@vtj/designer 0.9.0-alpha.1 → 0.9.0-alpha.3

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.
@@ -1,25 +0,0 @@
1
- const m = "dmFyIEgxPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgejE9KHN0LCRlLENlKT0+JGUgaW4gc3Q/SDEoc3QsJGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkNlfSk6c3RbJGVdPUNlO3ZhciBpdD0oc3QsJGUsQ2UpPT56MShzdCx0eXBlb2YgJGUhPSJzeW1ib2wiPyRlKyIiOiRlLENlKTsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGRlLEc7Y2xhc3Mgc3R7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24odCl7c2V0VGltZW91dCgoKT0+e3Rocm93IHQuc3RhY2s/aHQuaXNFcnJvck5vVGVsZW1ldHJ5KHQpP25ldyBodCh0Lm1lc3NhZ2UrYAoKYCt0LnN0YWNrKTpuZXcgRXJyb3IodC5tZXNzYWdlK2AKCmArdC5zdGFjayk6dH0sMCl9fWVtaXQodCl7dGhpcy5saXN0ZW5lcnMuZm9yRWFjaChuPT57bih0KX0pfW9uVW5leHBlY3RlZEVycm9yKHQpe3RoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcih0KSx0aGlzLmVtaXQodCl9b25VbmV4cGVjdGVkRXh0ZXJuYWxFcnJvcih0KXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIodCl9fWNvbnN0ICRlPW5ldyBzdDtmdW5jdGlvbiBDZShlKXtLbyhlKXx8JGUub25VbmV4cGVjdGVkRXJyb3IoZSl9ZnVuY3Rpb24gY2koZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lLHI9ZS5zdGFja3RyYWNlfHxlLnN0YWNrO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOnIsbm9UZWxlbWV0cnk6aHQuaXNFcnJvck5vVGVsZW1ldHJ5KGUpfX1yZXR1cm4gZX1jb25zdCBKbj0iQ2FuY2VsZWQiO2Z1bmN0aW9uIEtvKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZWw/ITA6ZSBpbnN0YW5jZW9mIEVycm9yJiZlLm5hbWU9PT1KbiYmZS5tZXNzYWdlPT09Sm59Y2xhc3MgZWwgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKEpuKSx0aGlzLm5hbWU9dGhpcy5tZXNzYWdlfX1jbGFzcyBodCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMubmFtZT0iQ29kZUV4cGVjdGVkRXJyb3IifXN0YXRpYyBmcm9tRXJyb3IodCl7aWYodCBpbnN0YW5jZW9mIGh0KXJldHVybiB0O2NvbnN0IG49bmV3IGh0O3JldHVybiBuLm1lc3NhZ2U9dC5tZXNzYWdlLG4uc3RhY2s9dC5zdGFjayxufXN0YXRpYyBpc0Vycm9yTm9UZWxlbWV0cnkodCl7cmV0dXJuIHQubmFtZT09PSJDb2RlRXhwZWN0ZWRFcnJvciJ9fWNsYXNzIHBlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIodHx8IkFuIHVuZXhwZWN0ZWQgYnVnIG9jY3VycmVkLiIpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHBlLnByb3RvdHlwZSl9fWZ1bmN0aW9uIHRsKGUsdCl7Y29uc3Qgbj10aGlzO2xldCByPSExLGk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHJ8fChyPSEwLGk9ZS5hcHBseShuLGFyZ3VtZW50cykpLGl9fXZhciBvbjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh5KXtyZXR1cm4geSYmdHlwZW9mIHk9PSJvYmplY3QiJiZ0eXBlb2YgeVtTeW1ib2wuaXRlcmF0b3JdPT0iZnVuY3Rpb24ifWUuaXM9dDtjb25zdCBuPU9iamVjdC5mcmVlemUoW10pO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbn1lLmVtcHR5PXI7ZnVuY3Rpb24qaSh5KXt5aWVsZCB5fWUuc2luZ2xlPWk7ZnVuY3Rpb24gcyh5KXtyZXR1cm4gdCh5KT95OmkoeSl9ZS53cmFwPXM7ZnVuY3Rpb24gYSh5KXtyZXR1cm4geXx8bn1lLmZyb209YTtmdW5jdGlvbipsKHkpe2ZvcihsZXQgYj15Lmxlbmd0aC0xO2I+PTA7Yi0tKXlpZWxkIHlbYl19ZS5yZXZlcnNlPWw7ZnVuY3Rpb24gbyh5KXtyZXR1cm4heXx8eVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLmRvbmU9PT0hMH1lLmlzRW1wdHk9bztmdW5jdGlvbiB1KHkpe3JldHVybiB5W1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkudmFsdWV9ZS5maXJzdD11O2Z1bmN0aW9uIGgoeSxiKXtsZXQgTD0wO2Zvcihjb25zdCBTIG9mIHkpaWYoYihTLEwrKykpcmV0dXJuITA7cmV0dXJuITF9ZS5zb21lPWg7ZnVuY3Rpb24gYyh5LGIpe2Zvcihjb25zdCBMIG9mIHkpaWYoYihMKSlyZXR1cm4gTH1lLmZpbmQ9YztmdW5jdGlvbipkKHksYil7Zm9yKGNvbnN0IEwgb2YgeSliKEwpJiYoeWllbGQgTCl9ZS5maWx0ZXI9ZDtmdW5jdGlvbiptKHksYil7bGV0IEw9MDtmb3IoY29uc3QgUyBvZiB5KXlpZWxkIGIoUyxMKyspfWUubWFwPW07ZnVuY3Rpb24qZyh5LGIpe2xldCBMPTA7Zm9yKGNvbnN0IFMgb2YgeSl5aWVsZCpiKFMsTCsrKX1lLmZsYXRNYXA9ZztmdW5jdGlvbipwKC4uLnkpe2Zvcihjb25zdCBiIG9mIHkpeWllbGQqYn1lLmNvbmNhdD1wO2Z1bmN0aW9uIHYoeSxiLEwpe2xldCBTPUw7Zm9yKGNvbnN0IE0gb2YgeSlTPWIoUyxNKTtyZXR1cm4gU31lLnJlZHVjZT12O2Z1bmN0aW9uKncoeSxiLEw9eS5sZW5ndGgpe2ZvcihiPDAmJihiKz15Lmxlbmd0aCksTDwwP0wrPXkubGVuZ3RoOkw+eS5sZW5ndGgmJihMPXkubGVuZ3RoKTtiPEw7YisrKXlpZWxkIHlbYl19ZS5zbGljZT13O2Z1bmN0aW9uIF8oeSxiPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSl7Y29uc3QgTD1bXTtpZihiPT09MClyZXR1cm5bTCx5XTtjb25zdCBTPXlbU3ltYm9sLml0ZXJhdG9yXSgpO2ZvcihsZXQgTT0wO008YjtNKyspe2NvbnN0IEY9Uy5uZXh0KCk7aWYoRi5kb25lKXJldHVybltMLGUuZW1wdHkoKV07TC5wdXNoKEYudmFsdWUpfXJldHVybltMLHtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBTfX1dfWUuY29uc3VtZT1fO2FzeW5jIGZ1bmN0aW9uIHgoeSl7Y29uc3QgYj1bXTtmb3IgYXdhaXQoY29uc3QgTCBvZiB5KWIucHVzaChMKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGIpfWUuYXN5bmNUb0FycmF5PXh9KShvbnx8KG9uPXt9KSk7ZnVuY3Rpb24gRzEoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gSjEoZSx0KXt9ZnVuY3Rpb24gZmkoZSl7aWYob24uaXMoZSkpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSlpZihuKXRyeXtuLmRpc3Bvc2UoKX1jYXRjaChyKXt0LnB1c2gocil9aWYodC5sZW5ndGg9PT0xKXRocm93IHRbMF07aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IodCwiRW5jb3VudGVyZWQgZXJyb3JzIHdoaWxlIGRpc3Bvc2luZyBvZiBzdG9yZSIpO3JldHVybiBBcnJheS5pc0FycmF5KGUpP1tdOmV9ZWxzZSBpZihlKXJldHVybiBlLmRpc3Bvc2UoKSxlfWZ1bmN0aW9uIG5sKC4uLmUpe3JldHVybiBsbigoKT0+ZmkoZSkpfWZ1bmN0aW9uIGxuKGUpe3JldHVybntkaXNwb3NlOnRsKCgpPT57ZSgpfSl9fWNvbnN0IE9uPWNsYXNzIE9ue2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9EaXNwb3NlPW5ldyBTZXQsdGhpcy5faXNEaXNwb3NlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2lzRGlzcG9zZWQ9ITAsdGhpcy5jbGVhcigpKX1nZXQgaXNEaXNwb3NlZCgpe3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkfWNsZWFyKCl7aWYodGhpcy5fdG9EaXNwb3NlLnNpemUhPT0wKXRyeXtmaSh0aGlzLl90b0Rpc3Bvc2UpfWZpbmFsbHl7dGhpcy5fdG9EaXNwb3NlLmNsZWFyKCl9fWFkZCh0KXtpZighdClyZXR1cm4gdDtpZih0PT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkP09uLkRJU0FCTEVfRElTUE9TRURfV0FSTklOR3x8Y29uc29sZS53YXJuKG5ldyBFcnJvcigiVHJ5aW5nIHRvIGFkZCBhIGRpc3Bvc2FibGUgdG8gYSBEaXNwb3NhYmxlU3RvcmUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9mLiBUaGUgYWRkZWQgb2JqZWN0IHdpbGwgYmUgbGVha2VkISIpLnN0YWNrKTp0aGlzLl90b0Rpc3Bvc2UuYWRkKHQpLHR9ZGVsZXRlQW5kTGVhayh0KXt0JiZ0aGlzLl90b0Rpc3Bvc2UuaGFzKHQpJiZ0aGlzLl90b0Rpc3Bvc2UuZGVsZXRlKHQpfX07T24uRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HPSExO2xldCBPdD1Pbjtjb25zdCBsaT1jbGFzcyBsaXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0b3JlPW5ldyBPdCx0aGlzLl9zdG9yZX1kaXNwb3NlKCl7dGhpcy5fc3RvcmUuZGlzcG9zZSgpfV9yZWdpc3Rlcih0KXtpZih0PT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9zdG9yZS5hZGQodCl9fTtsaS5Ob25lPU9iamVjdC5mcmVlemUoe2Rpc3Bvc2UoKXt9fSk7bGV0IGR0PWxpO2NvbnN0IFR0PWNsYXNzIFR0e2NvbnN0cnVjdG9yKHQpe3RoaXMuZWxlbWVudD10LHRoaXMubmV4dD1UdC5VbmRlZmluZWQsdGhpcy5wcmV2PVR0LlVuZGVmaW5lZH19O1R0LlVuZGVmaW5lZD1uZXcgVHQodm9pZCAwKTtsZXQgUT1UdDtjbGFzcyBybHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZpcnN0PVEuVW5kZWZpbmVkLHRoaXMuX2xhc3Q9US5VbmRlZmluZWQsdGhpcy5fc2l6ZT0wfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9aXNFbXB0eSgpe3JldHVybiB0aGlzLl9maXJzdD09PVEuVW5kZWZpbmVkfWNsZWFyKCl7bGV0IHQ9dGhpcy5fZmlyc3Q7Zm9yKDt0IT09US5VbmRlZmluZWQ7KXtjb25zdCBuPXQubmV4dDt0LnByZXY9US5VbmRlZmluZWQsdC5uZXh0PVEuVW5kZWZpbmVkLHQ9bn10aGlzLl9maXJzdD1RLlVuZGVmaW5lZCx0aGlzLl9sYXN0PVEuVW5kZWZpbmVkLHRoaXMuX3NpemU9MH11bnNoaWZ0KHQpe3JldHVybiB0aGlzLl9pbnNlcnQodCwhMSl9cHVzaCh0KXtyZXR1cm4gdGhpcy5faW5zZXJ0KHQsITApfV9pbnNlcnQodCxuKXtjb25zdCByPW5ldyBRKHQpO2lmKHRoaXMuX2ZpcnN0PT09US5VbmRlZmluZWQpdGhpcy5fZmlyc3Q9cix0aGlzLl9sYXN0PXI7ZWxzZSBpZihuKXtjb25zdCBzPXRoaXMuX2xhc3Q7dGhpcy5fbGFzdD1yLHIucHJldj1zLHMubmV4dD1yfWVsc2V7Y29uc3Qgcz10aGlzLl9maXJzdDt0aGlzLl9maXJzdD1yLHIubmV4dD1zLHMucHJldj1yfXRoaXMuX3NpemUrPTE7bGV0IGk9ITE7cmV0dXJuKCk9PntpfHwoaT0hMCx0aGlzLl9yZW1vdmUocikpfX1zaGlmdCgpe2lmKHRoaXMuX2ZpcnN0IT09US5VbmRlZmluZWQpe2NvbnN0IHQ9dGhpcy5fZmlyc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2ZpcnN0KSx0fX1wb3AoKXtpZih0aGlzLl9sYXN0IT09US5VbmRlZmluZWQpe2NvbnN0IHQ9dGhpcy5fbGFzdC5lbGVtZW50O3JldHVybiB0aGlzLl9yZW1vdmUodGhpcy5fbGFzdCksdH19X3JlbW92ZSh0KXtpZih0LnByZXYhPT1RLlVuZGVmaW5lZCYmdC5uZXh0IT09US5VbmRlZmluZWQpe2NvbnN0IG49dC5wcmV2O24ubmV4dD10Lm5leHQsdC5uZXh0LnByZXY9bn1lbHNlIHQucHJldj09PVEuVW5kZWZpbmVkJiZ0Lm5leHQ9PT1RLlVuZGVmaW5lZD8odGhpcy5fZmlyc3Q9US5VbmRlZmluZWQsdGhpcy5fbGFzdD1RLlVuZGVmaW5lZCk6dC5uZXh0PT09US5VbmRlZmluZWQ/KHRoaXMuX2xhc3Q9dGhpcy5fbGFzdC5wcmV2LHRoaXMuX2xhc3QubmV4dD1RLlVuZGVmaW5lZCk6dC5wcmV2PT09US5VbmRlZmluZWQmJih0aGlzLl9maXJzdD10aGlzLl9maXJzdC5uZXh0LHRoaXMuX2ZpcnN0LnByZXY9US5VbmRlZmluZWQpO3RoaXMuX3NpemUtPTF9KltTeW1ib2wuaXRlcmF0b3JdKCl7bGV0IHQ9dGhpcy5fZmlyc3Q7Zm9yKDt0IT09US5VbmRlZmluZWQ7KXlpZWxkIHQuZWxlbWVudCx0PXQubmV4dH19Y29uc3QgaWw9Z2xvYmFsVGhpcy5wZXJmb3JtYW5jZSYmdHlwZW9mIGdsb2JhbFRoaXMucGVyZm9ybWFuY2Uubm93PT0iZnVuY3Rpb24iO2NsYXNzIHVue3N0YXRpYyBjcmVhdGUodCl7cmV0dXJuIG5ldyB1bih0KX1jb25zdHJ1Y3Rvcih0KXt0aGlzLl9ub3c9aWwmJnQ9PT0hMT9EYXRlLm5vdzpnbG9iYWxUaGlzLnBlcmZvcm1hbmNlLm5vdy5iaW5kKGdsb2JhbFRoaXMucGVyZm9ybWFuY2UpLHRoaXMuX3N0YXJ0VGltZT10aGlzLl9ub3coKSx0aGlzLl9zdG9wVGltZT0tMX1zdG9wKCl7dGhpcy5fc3RvcFRpbWU9dGhpcy5fbm93KCl9cmVzZXQoKXt0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9ZWxhcHNlZCgpe3JldHVybiB0aGlzLl9zdG9wVGltZSE9PS0xP3RoaXMuX3N0b3BUaW1lLXRoaXMuX3N0YXJ0VGltZTp0aGlzLl9ub3coKS10aGlzLl9zdGFydFRpbWV9fXZhciBjbjsoZnVuY3Rpb24oZSl7ZS5Ob25lPSgpPT5kdC5Ob25lO2Z1bmN0aW9uIHQoayxSKXtyZXR1cm4gZChrLCgpPT57fSwwLHZvaWQgMCwhMCx2b2lkIDAsUil9ZS5kZWZlcj10O2Z1bmN0aW9uIG4oayl7cmV0dXJuKFIsST1udWxsLFQpPT57bGV0IFA9ITEsRDtyZXR1cm4gRD1rKFU9PntpZighUClyZXR1cm4gRD9ELmRpc3Bvc2UoKTpQPSEwLFIuY2FsbChJLFUpfSxudWxsLFQpLFAmJkQuZGlzcG9zZSgpLER9fWUub25jZT1uO2Z1bmN0aW9uIHIoayxSKXtyZXR1cm4gZS5vbmNlKGUuZmlsdGVyKGssUikpfWUub25jZUlmPXI7ZnVuY3Rpb24gaShrLFIsSSl7cmV0dXJuIGgoKFQsUD1udWxsLEQpPT5rKFU9PlQuY2FsbChQLFIoVSkpLG51bGwsRCksSSl9ZS5tYXA9aTtmdW5jdGlvbiBzKGssUixJKXtyZXR1cm4gaCgoVCxQPW51bGwsRCk9PmsoVT0+e1IoVSksVC5jYWxsKFAsVSl9LG51bGwsRCksSSl9ZS5mb3JFYWNoPXM7ZnVuY3Rpb24gYShrLFIsSSl7cmV0dXJuIGgoKFQsUD1udWxsLEQpPT5rKFU9PlIoVSkmJlQuY2FsbChQLFUpLG51bGwsRCksSSl9ZS5maWx0ZXI9YTtmdW5jdGlvbiBsKGspe3JldHVybiBrfWUuc2lnbmFsPWw7ZnVuY3Rpb24gbyguLi5rKXtyZXR1cm4oUixJPW51bGwsVCk9Pntjb25zdCBQPW5sKC4uLmsubWFwKEQ9PkQoVT0+Ui5jYWxsKEksVSkpKSk7cmV0dXJuIGMoUCxUKX19ZS5hbnk9bztmdW5jdGlvbiB1KGssUixJLFQpe2xldCBQPUk7cmV0dXJuIGkoayxEPT4oUD1SKFAsRCksUCksVCl9ZS5yZWR1Y2U9dTtmdW5jdGlvbiBoKGssUil7bGV0IEk7Y29uc3QgVD17b25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe0k9ayhQLmZpcmUsUCl9LG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyKCl7ST8uZGlzcG9zZSgpfX0sUD1uZXcgX2UoVCk7cmV0dXJuIFI/LmFkZChQKSxQLmV2ZW50fWZ1bmN0aW9uIGMoayxSKXtyZXR1cm4gUiBpbnN0YW5jZW9mIEFycmF5P1IucHVzaChrKTpSJiZSLmFkZChrKSxrfWZ1bmN0aW9uIGQoayxSLEk9MTAwLFQ9ITEsUD0hMSxELFUpe2xldCBqLG5lLER0LEhuPTAsYW47Y29uc3QgcTE9e2xlYWtXYXJuaW5nVGhyZXNob2xkOkQsb25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe2o9ayhqMT0+e0huKyssbmU9UihuZSxqMSksVCYmIUR0JiYoem4uZmlyZShuZSksbmU9dm9pZCAwKSxhbj0oKT0+e2NvbnN0IFcxPW5lO25lPXZvaWQgMCxEdD12b2lkIDAsKCFUfHxIbj4xKSYmem4uZmlyZShXMSksSG49MH0sdHlwZW9mIEk9PSJudW1iZXIiPyhjbGVhclRpbWVvdXQoRHQpLER0PXNldFRpbWVvdXQoYW4sSSkpOkR0PT09dm9pZCAwJiYoRHQ9MCxxdWV1ZU1pY3JvdGFzayhhbikpfSl9LG9uV2lsbFJlbW92ZUxpc3RlbmVyKCl7UCYmSG4+MCYmYW4/LigpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpe2FuPXZvaWQgMCxqLmRpc3Bvc2UoKX19LHpuPW5ldyBfZShxMSk7cmV0dXJuIFU/LmFkZCh6biksem4uZXZlbnR9ZS5kZWJvdW5jZT1kO2Z1bmN0aW9uIG0oayxSPTAsSSl7cmV0dXJuIGUuZGVib3VuY2UoaywoVCxQKT0+VD8oVC5wdXNoKFApLFQpOltQXSxSLHZvaWQgMCwhMCx2b2lkIDAsSSl9ZS5hY2N1bXVsYXRlPW07ZnVuY3Rpb24gZyhrLFI9KFQsUCk9PlQ9PT1QLEkpe2xldCBUPSEwLFA7cmV0dXJuIGEoayxEPT57Y29uc3QgVT1UfHwhUihELFApO3JldHVybiBUPSExLFA9RCxVfSxJKX1lLmxhdGNoPWc7ZnVuY3Rpb24gcChrLFIsSSl7cmV0dXJuW2UuZmlsdGVyKGssUixJKSxlLmZpbHRlcihrLFQ9PiFSKFQpLEkpXX1lLnNwbGl0PXA7ZnVuY3Rpb24gdihrLFI9ITEsST1bXSxUKXtsZXQgUD1JLnNsaWNlKCksRD1rKG5lPT57UD9QLnB1c2gobmUpOmouZmlyZShuZSl9KTtUJiZULmFkZChEKTtjb25zdCBVPSgpPT57UD8uZm9yRWFjaChuZT0+ai5maXJlKG5lKSksUD1udWxsfSxqPW5ldyBfZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe0R8fChEPWsobmU9PmouZmlyZShuZSkpLFQmJlQuYWRkKEQpKX0sb25EaWRBZGRGaXJzdExpc3RlbmVyKCl7UCYmKFI/c2V0VGltZW91dChVKTpVKCkpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpe0QmJkQuZGlzcG9zZSgpLEQ9bnVsbH19KTtyZXR1cm4gVCYmVC5hZGQoaiksai5ldmVudH1lLmJ1ZmZlcj12O2Z1bmN0aW9uIHcoayxSKXtyZXR1cm4oVCxQLEQpPT57Y29uc3QgVT1SKG5ldyB4KTtyZXR1cm4gayhmdW5jdGlvbihqKXtjb25zdCBuZT1VLmV2YWx1YXRlKGopO25lIT09XyYmVC5jYWxsKFAsbmUpfSx2b2lkIDAsRCl9fWUuY2hhaW49dztjb25zdCBfPVN5bWJvbCgiSGFsdENoYWluYWJsZSIpO2NsYXNzIHh7Y29uc3RydWN0b3IoKXt0aGlzLnN0ZXBzPVtdfW1hcChSKXtyZXR1cm4gdGhpcy5zdGVwcy5wdXNoKFIpLHRoaXN9Zm9yRWFjaChSKXtyZXR1cm4gdGhpcy5zdGVwcy5wdXNoKEk9PihSKEkpLEkpKSx0aGlzfWZpbHRlcihSKXtyZXR1cm4gdGhpcy5zdGVwcy5wdXNoKEk9PlIoSSk/STpfKSx0aGlzfXJlZHVjZShSLEkpe2xldCBUPUk7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChQPT4oVD1SKFQsUCksVCkpLHRoaXN9bGF0Y2goUj0oSSxUKT0+ST09PVQpe2xldCBJPSEwLFQ7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChQPT57Y29uc3QgRD1JfHwhUihQLFQpO3JldHVybiBJPSExLFQ9UCxEP1A6X30pLHRoaXN9ZXZhbHVhdGUoUil7Zm9yKGNvbnN0IEkgb2YgdGhpcy5zdGVwcylpZihSPUkoUiksUj09PV8pYnJlYWs7cmV0dXJuIFJ9fWZ1bmN0aW9uIHkoayxSLEk9VD0+VCl7Y29uc3QgVD0oLi4uaik9PlUuZmlyZShJKC4uLmopKSxQPSgpPT5rLm9uKFIsVCksRD0oKT0+ay5yZW1vdmVMaXN0ZW5lcihSLFQpLFU9bmV3IF9lKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyOlAsb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6RH0pO3JldHVybiBVLmV2ZW50fWUuZnJvbU5vZGVFdmVudEVtaXR0ZXI9eTtmdW5jdGlvbiBiKGssUixJPVQ9PlQpe2NvbnN0IFQ9KC4uLmopPT5VLmZpcmUoSSguLi5qKSksUD0oKT0+ay5hZGRFdmVudExpc3RlbmVyKFIsVCksRD0oKT0+ay5yZW1vdmVFdmVudExpc3RlbmVyKFIsVCksVT1uZXcgX2Uoe29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6UCxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjpEfSk7cmV0dXJuIFUuZXZlbnR9ZS5mcm9tRE9NRXZlbnRFbWl0dGVyPWI7ZnVuY3Rpb24gTChrKXtyZXR1cm4gbmV3IFByb21pc2UoUj0+bihrKShSKSl9ZS50b1Byb21pc2U9TDtmdW5jdGlvbiBTKGspe2NvbnN0IFI9bmV3IF9lO3JldHVybiBrLnRoZW4oST0+e1IuZmlyZShJKX0sKCk9PntSLmZpcmUodm9pZCAwKX0pLmZpbmFsbHkoKCk9PntSLmRpc3Bvc2UoKX0pLFIuZXZlbnR9ZS5mcm9tUHJvbWlzZT1TO2Z1bmN0aW9uIE0oayxSKXtyZXR1cm4gayhJPT5SLmZpcmUoSSkpfWUuZm9yd2FyZD1NO2Z1bmN0aW9uIEYoayxSLEkpe3JldHVybiBSKEkpLGsoVD0+UihUKSl9ZS5ydW5BbmRTdWJzY3JpYmU9RjtjbGFzcyBPe2NvbnN0cnVjdG9yKFIsSSl7dGhpcy5fb2JzZXJ2YWJsZT1SLHRoaXMuX2NvdW50ZXI9MCx0aGlzLl9oYXNDaGFuZ2VkPSExO2NvbnN0IFQ9e29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6KCk9PntSLmFkZE9ic2VydmVyKHRoaXMpLHRoaXMuX29ic2VydmFibGUucmVwb3J0Q2hhbmdlcygpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+e1IucmVtb3ZlT2JzZXJ2ZXIodGhpcyl9fTt0aGlzLmVtaXR0ZXI9bmV3IF9lKFQpLEkmJkkuYWRkKHRoaXMuZW1pdHRlcil9YmVnaW5VcGRhdGUoUil7dGhpcy5fY291bnRlcisrfWhhbmRsZVBvc3NpYmxlQ2hhbmdlKFIpe31oYW5kbGVDaGFuZ2UoUixJKXt0aGlzLl9oYXNDaGFuZ2VkPSEwfWVuZFVwZGF0ZShSKXt0aGlzLl9jb3VudGVyLS0sdGhpcy5fY291bnRlcj09PTAmJih0aGlzLl9vYnNlcnZhYmxlLnJlcG9ydENoYW5nZXMoKSx0aGlzLl9oYXNDaGFuZ2VkJiYodGhpcy5faGFzQ2hhbmdlZD0hMSx0aGlzLmVtaXR0ZXIuZmlyZSh0aGlzLl9vYnNlcnZhYmxlLmdldCgpKSkpfX1mdW5jdGlvbiBDKGssUil7cmV0dXJuIG5ldyBPKGssUikuZW1pdHRlci5ldmVudH1lLmZyb21PYnNlcnZhYmxlPUM7ZnVuY3Rpb24gTihrKXtyZXR1cm4oUixJLFQpPT57bGV0IFA9MCxEPSExO2NvbnN0IFU9e2JlZ2luVXBkYXRlKCl7UCsrfSxlbmRVcGRhdGUoKXtQLS0sUD09PTAmJihrLnJlcG9ydENoYW5nZXMoKSxEJiYoRD0hMSxSLmNhbGwoSSkpKX0saGFuZGxlUG9zc2libGVDaGFuZ2UoKXt9LGhhbmRsZUNoYW5nZSgpe0Q9ITB9fTtrLmFkZE9ic2VydmVyKFUpLGsucmVwb3J0Q2hhbmdlcygpO2NvbnN0IGo9e2Rpc3Bvc2UoKXtrLnJlbW92ZU9ic2VydmVyKFUpfX07cmV0dXJuIFQgaW5zdGFuY2VvZiBPdD9ULmFkZChqKTpBcnJheS5pc0FycmF5KFQpJiZULnB1c2goaiksan19ZS5mcm9tT2JzZXJ2YWJsZUxpZ2h0PU59KShjbnx8KGNuPXt9KSk7Y29uc3QgUHQ9Y2xhc3MgUHR7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lckNvdW50PTAsdGhpcy5pbnZvY2F0aW9uQ291bnQ9MCx0aGlzLmVsYXBzZWRPdmVyYWxsPTAsdGhpcy5kdXJhdGlvbnM9W10sdGhpcy5uYW1lPWAke3R9XyR7UHQuX2lkUG9vbCsrfWAsUHQuYWxsLmFkZCh0aGlzKX1zdGFydCh0KXt0aGlzLl9zdG9wV2F0Y2g9bmV3IHVuLHRoaXMubGlzdGVuZXJDb3VudD10fXN0b3AoKXtpZih0aGlzLl9zdG9wV2F0Y2gpe2NvbnN0IHQ9dGhpcy5fc3RvcFdhdGNoLmVsYXBzZWQoKTt0aGlzLmR1cmF0aW9ucy5wdXNoKHQpLHRoaXMuZWxhcHNlZE92ZXJhbGwrPXQsdGhpcy5pbnZvY2F0aW9uQ291bnQrPTEsdGhpcy5fc3RvcFdhdGNoPXZvaWQgMH19fTtQdC5hbGw9bmV3IFNldCxQdC5faWRQb29sPTA7bGV0IFhuPVB0LGhpPS0xO2NvbnN0ICRuPWNsYXNzICRue2NvbnN0cnVjdG9yKHQsbixyPSgkbi5faWRQb29sKyspLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgzLCIwIikpe3RoaXMuX2Vycm9ySGFuZGxlcj10LHRoaXMudGhyZXNob2xkPW4sdGhpcy5uYW1lPXIsdGhpcy5fd2FybkNvdW50ZG93bj0wfWRpc3Bvc2UoKXt0aGlzLl9zdGFja3M/LmNsZWFyKCl9Y2hlY2sodCxuKXtjb25zdCByPXRoaXMudGhyZXNob2xkO2lmKHI8PTB8fG48cilyZXR1cm47dGhpcy5fc3RhY2tzfHwodGhpcy5fc3RhY2tzPW5ldyBNYXApO2NvbnN0IGk9dGhpcy5fc3RhY2tzLmdldCh0LnZhbHVlKXx8MDtpZih0aGlzLl9zdGFja3Muc2V0KHQudmFsdWUsaSsxKSx0aGlzLl93YXJuQ291bnRkb3duLT0xLHRoaXMuX3dhcm5Db3VudGRvd248PTApe3RoaXMuX3dhcm5Db3VudGRvd249ciouNTtjb25zdFtzLGFdPXRoaXMuZ2V0TW9zdEZyZXF1ZW50U3RhY2soKSxsPWBbJHt0aGlzLm5hbWV9XSBwb3RlbnRpYWwgbGlzdGVuZXIgTEVBSyBkZXRlY3RlZCwgaGF2aW5nICR7bn0gbGlzdGVuZXJzIGFscmVhZHkuIE1PU1QgZnJlcXVlbnQgbGlzdGVuZXIgKCR7YX0pOmA7Y29uc29sZS53YXJuKGwpLGNvbnNvbGUud2FybihzKTtjb25zdCBvPW5ldyBzbChsLHMpO3RoaXMuX2Vycm9ySGFuZGxlcihvKX1yZXR1cm4oKT0+e2NvbnN0IHM9dGhpcy5fc3RhY2tzLmdldCh0LnZhbHVlKXx8MDt0aGlzLl9zdGFja3Muc2V0KHQudmFsdWUscy0xKX19Z2V0TW9zdEZyZXF1ZW50U3RhY2soKXtpZighdGhpcy5fc3RhY2tzKXJldHVybjtsZXQgdCxuPTA7Zm9yKGNvbnN0W3IsaV1vZiB0aGlzLl9zdGFja3MpKCF0fHxuPGkpJiYodD1bcixpXSxuPWkpO3JldHVybiB0fX07JG4uX2lkUG9vbD0xO2xldCBRbj0kbjtjbGFzcyBZbntzdGF0aWMgY3JlYXRlKCl7Y29uc3QgdD1uZXcgRXJyb3I7cmV0dXJuIG5ldyBZbih0LnN0YWNrPz8iIil9Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10fXByaW50KCl7Y29uc29sZS53YXJuKHRoaXMudmFsdWUuc3BsaXQoYApgKS5zbGljZSgyKS5qb2luKGAKYCkpfX1jbGFzcyBzbCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIodCksdGhpcy5uYW1lPSJMaXN0ZW5lckxlYWtFcnJvciIsdGhpcy5zdGFjaz1ufX1jbGFzcyBhbCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIodCksdGhpcy5uYW1lPSJMaXN0ZW5lclJlZnVzYWxFcnJvciIsdGhpcy5zdGFjaz1ufX1jbGFzcyBabntjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXR9fWNvbnN0IG9sPTI7bGV0IEtuO2NsYXNzIF9le2NvbnN0cnVjdG9yKHQpe3RoaXMuX3NpemU9MCx0aGlzLl9vcHRpb25zPXQsdGhpcy5fbGVha2FnZU1vbj1oaT4wfHx0aGlzLl9vcHRpb25zPy5sZWFrV2FybmluZ1RocmVzaG9sZD9uZXcgUW4odD8ub25MaXN0ZW5lckVycm9yPz9DZSx0aGlzLl9vcHRpb25zPy5sZWFrV2FybmluZ1RocmVzaG9sZD8/aGkpOnZvaWQgMCx0aGlzLl9wZXJmTW9uPXRoaXMuX29wdGlvbnM/Ll9wcm9mTmFtZT9uZXcgWG4odGhpcy5fb3B0aW9ucy5fcHJvZk5hbWUpOnZvaWQgMCx0aGlzLl9kZWxpdmVyeVF1ZXVlPXRoaXMuX29wdGlvbnM/LmRlbGl2ZXJ5UXVldWV9ZGlzcG9zZSgpe3RoaXMuX2Rpc3Bvc2VkfHwodGhpcy5fZGlzcG9zZWQ9ITAsdGhpcy5fZGVsaXZlcnlRdWV1ZT8uY3VycmVudD09PXRoaXMmJnRoaXMuX2RlbGl2ZXJ5UXVldWUucmVzZXQoKSx0aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnM9dm9pZCAwLHRoaXMuX3NpemU9MCksdGhpcy5fb3B0aW9ucz8ub25EaWRSZW1vdmVMYXN0TGlzdGVuZXI/LigpLHRoaXMuX2xlYWthZ2VNb24/LmRpc3Bvc2UoKSl9Z2V0IGV2ZW50KCl7cmV0dXJuIHRoaXMuX2V2ZW50Pz8odGhpcy5fZXZlbnQ9KHQsbixyKT0+e2lmKHRoaXMuX2xlYWthZ2VNb24mJnRoaXMuX3NpemU+dGhpcy5fbGVha2FnZU1vbi50aHJlc2hvbGQqKjIpe2NvbnN0IGw9YFske3RoaXMuX2xlYWthZ2VNb24ubmFtZX1dIFJFRlVTRVMgdG8gYWNjZXB0IG5ldyBsaXN0ZW5lcnMgYmVjYXVzZSBpdCBleGNlZWRlZCBpdHMgdGhyZXNob2xkIGJ5IGZhciAoJHt0aGlzLl9zaXplfSB2cyAke3RoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkfSlgO2NvbnNvbGUud2FybihsKTtjb25zdCBvPXRoaXMuX2xlYWthZ2VNb24uZ2V0TW9zdEZyZXF1ZW50U3RhY2soKT8/WyJVTktOT1dOIHN0YWNrIiwtMV0sdT1uZXcgYWwoYCR7bH0uIEhJTlQ6IFN0YWNrIHNob3dzIG1vc3QgZnJlcXVlbnQgbGlzdGVuZXIgKCR7b1sxXX0tdGltZXMpYCxvWzBdKTtyZXR1cm4odGhpcy5fb3B0aW9ucz8ub25MaXN0ZW5lckVycm9yfHxDZSkodSksZHQuTm9uZX1pZih0aGlzLl9kaXNwb3NlZClyZXR1cm4gZHQuTm9uZTtuJiYodD10LmJpbmQobikpO2NvbnN0IGk9bmV3IFpuKHQpO2xldCBzO3RoaXMuX2xlYWthZ2VNb24mJnRoaXMuX3NpemU+PU1hdGguY2VpbCh0aGlzLl9sZWFrYWdlTW9uLnRocmVzaG9sZCouMikmJihpLnN0YWNrPVluLmNyZWF0ZSgpLHM9dGhpcy5fbGVha2FnZU1vbi5jaGVjayhpLnN0YWNrLHRoaXMuX3NpemUrMSkpLHRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMgaW5zdGFuY2VvZiBabj8odGhpcy5fZGVsaXZlcnlRdWV1ZT8/KHRoaXMuX2RlbGl2ZXJ5UXVldWU9bmV3IGxsKSx0aGlzLl9saXN0ZW5lcnM9W3RoaXMuX2xpc3RlbmVycyxpXSk6dGhpcy5fbGlzdGVuZXJzLnB1c2goaSk6KHRoaXMuX29wdGlvbnM/Lm9uV2lsbEFkZEZpcnN0TGlzdGVuZXI/Lih0aGlzKSx0aGlzLl9saXN0ZW5lcnM9aSx0aGlzLl9vcHRpb25zPy5vbkRpZEFkZEZpcnN0TGlzdGVuZXI/Lih0aGlzKSksdGhpcy5fc2l6ZSsrO2NvbnN0IGE9bG4oKCk9PntLbj8udW5yZWdpc3RlcihhKSxzPy4oKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcihpKX0pO2lmKHIgaW5zdGFuY2VvZiBPdD9yLmFkZChhKTpBcnJheS5pc0FycmF5KHIpJiZyLnB1c2goYSksS24pe2NvbnN0IGw9bmV3IEVycm9yKCkuc3RhY2suc3BsaXQoYApgKS5zbGljZSgyLDMpLmpvaW4oYApgKS50cmltKCksbz0vKGZpbGU6fHZzY29kZS1maWxlOlwvXC92c2NvZGUtYXBwKT8oXC9bXjpdKjpcZCs6XGQrKS8uZXhlYyhsKTtLbi5yZWdpc3RlcihhLG8/LlsyXT8/bCxhKX1yZXR1cm4gYX0pLHRoaXMuX2V2ZW50fV9yZW1vdmVMaXN0ZW5lcih0KXtpZih0aGlzLl9vcHRpb25zPy5vbldpbGxSZW1vdmVMaXN0ZW5lcj8uKHRoaXMpLCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2lmKHRoaXMuX3NpemU9PT0xKXt0aGlzLl9saXN0ZW5lcnM9dm9pZCAwLHRoaXMuX29wdGlvbnM/Lm9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyPy4odGhpcyksdGhpcy5fc2l6ZT0wO3JldHVybn1jb25zdCBuPXRoaXMuX2xpc3RlbmVycyxyPW4uaW5kZXhPZih0KTtpZihyPT09LTEpdGhyb3cgY29uc29sZS5sb2coImRpc3Bvc2VkPyIsdGhpcy5fZGlzcG9zZWQpLGNvbnNvbGUubG9nKCJzaXplPyIsdGhpcy5fc2l6ZSksY29uc29sZS5sb2coImFycj8iLEpTT04uc3RyaW5naWZ5KHRoaXMuX2xpc3RlbmVycykpLG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGRpc3Bvc2UgdW5rbm93biBsaXN0ZW5lciIpO3RoaXMuX3NpemUtLSxuW3JdPXZvaWQgMDtjb25zdCBpPXRoaXMuX2RlbGl2ZXJ5UXVldWUuY3VycmVudD09PXRoaXM7aWYodGhpcy5fc2l6ZSpvbDw9bi5sZW5ndGgpe2xldCBzPTA7Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDthKyspblthXT9uW3MrK109blthXTppJiYodGhpcy5fZGVsaXZlcnlRdWV1ZS5lbmQtLSxzPHRoaXMuX2RlbGl2ZXJ5UXVldWUuaSYmdGhpcy5fZGVsaXZlcnlRdWV1ZS5pLS0pO24ubGVuZ3RoPXN9fV9kZWxpdmVyKHQsbil7aWYoIXQpcmV0dXJuO2NvbnN0IHI9dGhpcy5fb3B0aW9ucz8ub25MaXN0ZW5lckVycm9yfHxDZTtpZighcil7dC52YWx1ZShuKTtyZXR1cm59dHJ5e3QudmFsdWUobil9Y2F0Y2goaSl7cihpKX19X2RlbGl2ZXJRdWV1ZSh0KXtjb25zdCBuPXQuY3VycmVudC5fbGlzdGVuZXJzO2Zvcig7dC5pPHQuZW5kOyl0aGlzLl9kZWxpdmVyKG5bdC5pKytdLHQudmFsdWUpO3QucmVzZXQoKX1maXJlKHQpe2lmKHRoaXMuX2RlbGl2ZXJ5UXVldWU/LmN1cnJlbnQmJih0aGlzLl9kZWxpdmVyUXVldWUodGhpcy5fZGVsaXZlcnlRdWV1ZSksdGhpcy5fcGVyZk1vbj8uc3RvcCgpKSx0aGlzLl9wZXJmTW9uPy5zdGFydCh0aGlzLl9zaXplKSx0aGlzLl9saXN0ZW5lcnMpaWYodGhpcy5fbGlzdGVuZXJzIGluc3RhbmNlb2YgWm4pdGhpcy5fZGVsaXZlcih0aGlzLl9saXN0ZW5lcnMsdCk7ZWxzZXtjb25zdCBuPXRoaXMuX2RlbGl2ZXJ5UXVldWU7bi5lbnF1ZXVlKHRoaXMsdCx0aGlzLl9saXN0ZW5lcnMubGVuZ3RoKSx0aGlzLl9kZWxpdmVyUXVldWUobil9dGhpcy5fcGVyZk1vbj8uc3RvcCgpfWhhc0xpc3RlbmVycygpe3JldHVybiB0aGlzLl9zaXplPjB9fWNsYXNzIGxse2NvbnN0cnVjdG9yKCl7dGhpcy5pPS0xLHRoaXMuZW5kPTB9ZW5xdWV1ZSh0LG4scil7dGhpcy5pPTAsdGhpcy5lbmQ9cix0aGlzLmN1cnJlbnQ9dCx0aGlzLnZhbHVlPW59cmVzZXQoKXt0aGlzLmk9dGhpcy5lbmQsdGhpcy5jdXJyZW50PXZvaWQgMCx0aGlzLnZhbHVlPXZvaWQgMH19ZnVuY3Rpb24gdWwoKXtyZXR1cm4gZ2xvYmFsVGhpcy5fVlNDT0RFX05MU19NRVNTQUdFU31mdW5jdGlvbiBkaSgpe3JldHVybiBnbG9iYWxUaGlzLl9WU0NPREVfTkxTX0xBTkdVQUdFfWNvbnN0IGNsPWRpKCk9PT0icHNldWRvInx8dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQubG9jYXRpb24mJmRvY3VtZW50LmxvY2F0aW9uLmhhc2guaW5kZXhPZigicHNldWRvPXRydWUiKT49MDtmdW5jdGlvbiBtaShlLHQpe2xldCBuO3JldHVybiB0Lmxlbmd0aD09PTB8fChuPWUucmVwbGFjZSgvXHsoXGQrKVx9L2csKHIsaSk9Pntjb25zdCBzPWlbMF0sYT10W3NdO2xldCBsPXI7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIj9sPWE6KHR5cGVvZiBhPT0ibnVtYmVyInx8dHlwZW9mIGE9PSJib29sZWFuInx8YT09PXZvaWQgMHx8YT09PW51bGwpJiYobD1TdHJpbmcoYSkpLGx9KSksY2wmJihuPSLvvLsiK24ucmVwbGFjZSgvW2FvdWVpXS9nLCIkJiQmIikrIu+8vSIpLG59ZnVuY3Rpb24gWChlLHQsLi4ubil7cmV0dXJuIG1pKHR5cGVvZiBlPT0ibnVtYmVyIj9mbChlLHQpOnQsbil9ZnVuY3Rpb24gZmwoZSx0KXtjb25zdCBuPXVsKCk/LltlXTtpZih0eXBlb2YgbiE9InN0cmluZyIpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoYCEhISBOTFMgTUlTU0lORzogJHtlfSAhISFgKX1yZXR1cm4gbn1jb25zdCBtdD0iZW4iO2xldCBlcj0hMSx0cj0hMSxucj0hMSxnaT0hMSxycj0hMSxmbixpcj1tdCxwaT1tdCxobCxVZTtjb25zdCBCZT1nbG9iYWxUaGlzO2xldCBiZTt0eXBlb2YgQmUudnNjb2RlPCJ1IiYmdHlwZW9mIEJlLnZzY29kZS5wcm9jZXNzPCJ1Ij9iZT1CZS52c2NvZGUucHJvY2Vzczp0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBwcm9jZXNzPy52ZXJzaW9ucz8ubm9kZT09InN0cmluZyImJihiZT1wcm9jZXNzKTtjb25zdCBkbD10eXBlb2YgYmU/LnZlcnNpb25zPy5lbGVjdHJvbj09InN0cmluZyImJmJlPy50eXBlPT09InJlbmRlcmVyIjtpZih0eXBlb2YgYmU9PSJvYmplY3QiKXtlcj1iZS5wbGF0Zm9ybT09PSJ3aW4zMiIsdHI9YmUucGxhdGZvcm09PT0iZGFyd2luIixucj1iZS5wbGF0Zm9ybT09PSJsaW51eCIsbnImJmJlLmVudi5TTkFQJiZiZS5lbnYuU05BUF9SRVZJU0lPTixiZS5lbnYuQ0l8fGJlLmVudi5CVUlMRF9BUlRJRkFDVFNUQUdJTkdESVJFQ1RPUlksZm49bXQsaXI9bXQ7Y29uc3QgZT1iZS5lbnYuVlNDT0RFX05MU19DT05GSUc7aWYoZSl0cnl7Y29uc3QgdD1KU09OLnBhcnNlKGUpO2ZuPXQudXNlckxvY2FsZSxwaT10Lm9zTG9jYWxlLGlyPXQucmVzb2x2ZWRMYW5ndWFnZXx8bXQsaGw9dC5sYW5ndWFnZVBhY2s/LnRyYW5zbGF0aW9uc0NvbmZpZ0ZpbGV9Y2F0Y2h7fWdpPSEwfWVsc2UgdHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJiFkbD8oVWU9bmF2aWdhdG9yLnVzZXJBZ2VudCxlcj1VZS5pbmRleE9mKCJXaW5kb3dzIik+PTAsdHI9VWUuaW5kZXhPZigiTWFjaW50b3NoIik+PTAsKFVlLmluZGV4T2YoIk1hY2ludG9zaCIpPj0wfHxVZS5pbmRleE9mKCJpUGFkIik+PTB8fFVlLmluZGV4T2YoImlQaG9uZSIpPj0wKSYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MCxucj1VZS5pbmRleE9mKCJMaW51eCIpPj0wLFVlPy5pbmRleE9mKCJNb2JpIik+PTAscnI9ITAsaXI9ZGkoKXx8bXQsZm49bmF2aWdhdG9yLmxhbmd1YWdlLnRvTG93ZXJDYXNlKCkscGk9Zm4pOmNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2NvbnN0ICR0PWVyLG1sPXRyLGdsPWdpLHBsPXJyLGJsPXJyJiZ0eXBlb2YgQmUuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIj9CZS5vcmlnaW46dm9pZCAwLFRlPVVlLHZsPXR5cGVvZiBCZS5wb3N0TWVzc2FnZT09ImZ1bmN0aW9uIiYmIUJlLmltcG9ydFNjcmlwdHM7KCgpPT57aWYodmwpe2NvbnN0IGU9W107QmUuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbj0+e2lmKG4uZGF0YSYmbi5kYXRhLnZzY29kZVNjaGVkdWxlQXN5bmNXb3JrKWZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3Qgcz1lW3JdO2lmKHMuaWQ9PT1uLmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspe2Uuc3BsaWNlKHIsMSkscy5jYWxsYmFjaygpO3JldHVybn19fSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksQmUucG9zdE1lc3NhZ2Uoe3ZzY29kZVNjaGVkdWxlQXN5bmNXb3JrOnJ9LCIqIil9fXJldHVybiBlPT5zZXRUaW1lb3V0KGUpfSkoKTtjb25zdCB4bD0hIShUZSYmVGUuaW5kZXhPZigiQ2hyb21lIik+PTApO1RlJiZUZS5pbmRleE9mKCJGaXJlZm94Iik+PTAsIXhsJiZUZSYmVGUuaW5kZXhPZigiU2FmYXJpIik+PTAsVGUmJlRlLmluZGV4T2YoIkVkZy8iKT49MCxUZSYmVGUuaW5kZXhPZigiQW5kcm9pZCIpPj0wO2Z1bmN0aW9uIHlsKGUpe3JldHVybiBlfWNsYXNzIHdse2NvbnN0cnVjdG9yKHQsbil7dGhpcy5sYXN0Q2FjaGU9dm9pZCAwLHRoaXMubGFzdEFyZ0tleT12b2lkIDAsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KHRoaXMuX2ZuPXQsdGhpcy5fY29tcHV0ZUtleT15bCk6KHRoaXMuX2ZuPW4sdGhpcy5fY29tcHV0ZUtleT10LmdldENhY2hlS2V5KX1nZXQodCl7Y29uc3Qgbj10aGlzLl9jb21wdXRlS2V5KHQpO3JldHVybiB0aGlzLmxhc3RBcmdLZXkhPT1uJiYodGhpcy5sYXN0QXJnS2V5PW4sdGhpcy5sYXN0Q2FjaGU9dGhpcy5fZm4odCkpLHRoaXMubGFzdENhY2hlfX1jbGFzcyBiaXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmV4ZWN1dG9yPXQsdGhpcy5fZGlkUnVuPSExfWdldCB2YWx1ZSgpe2lmKCF0aGlzLl9kaWRSdW4pdHJ5e3RoaXMuX3ZhbHVlPXRoaXMuZXhlY3V0b3IoKX1jYXRjaCh0KXt0aGlzLl9lcnJvcj10fWZpbmFsbHl7dGhpcy5fZGlkUnVuPSEwfWlmKHRoaXMuX2Vycm9yKXRocm93IHRoaXMuX2Vycm9yO3JldHVybiB0aGlzLl92YWx1ZX1nZXQgcmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9fWZ1bmN0aW9uIF9sKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXFx7XH1cKlwrXD9cfFxeXCRcLlxbXF1cKFwpXS9nLCJcXCQmIil9ZnVuY3Rpb24gTGwoZSl7cmV0dXJuIGUuc3BsaXQoL1xyXG58XHJ8XG4vKX1mdW5jdGlvbiBObChlKXtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KHQpO2lmKHIhPT0zMiYmciE9PTkpcmV0dXJuIHR9cmV0dXJuLTF9ZnVuY3Rpb24gU2woZSx0PWUubGVuZ3RoLTEpe2ZvcihsZXQgbj10O24+PTA7bi0tKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtpZihyIT09MzImJnIhPT05KXJldHVybiBufXJldHVybi0xfWZ1bmN0aW9uIHZpKGUpe3JldHVybiBlPj02NSYmZTw9OTB9ZnVuY3Rpb24gaG4oZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBzcihlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfWZ1bmN0aW9uIHhpKGUsdCl7cmV0dXJuKGUtNTUyOTY8PDEwKSsodC01NjMyMCkrNjU1MzZ9ZnVuY3Rpb24gQWwoZSx0LG4pe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4pO2lmKGhuKHIpJiZuKzE8dCl7Y29uc3QgaT1lLmNoYXJDb2RlQXQobisxKTtpZihzcihpKSlyZXR1cm4geGkocixpKX1yZXR1cm4gcn1jb25zdCBrbD0vXltcdFxuXHJceDIwLVx4N0VdKiQvO2Z1bmN0aW9uIFJsKGUpe3JldHVybiBrbC50ZXN0KGUpfWNvbnN0IE9lPWNsYXNzIE9le3N0YXRpYyBnZXRJbnN0YW5jZSh0KXtyZXR1cm4gT2UuY2FjaGUuZ2V0KEFycmF5LmZyb20odCkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIE9lLl9sb2NhbGVzLnZhbHVlfWNvbnN0cnVjdG9yKHQpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9dH1pc0FtYmlndW91cyh0KXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXModCl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUodCl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KHQpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX07T2UuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YT1uZXcgYmkoKCk9PkpTT04ucGFyc2UoJ3siX2NvbW1vbiI6WzgyMzIsMzIsODIzMywzMiw1NzYwLDMyLDgxOTIsMzIsODE5MywzMiw4MTk0LDMyLDgxOTUsMzIsODE5NiwzMiw4MTk3LDMyLDgxOTgsMzIsODIwMCwzMiw4MjAxLDMyLDgyMDIsMzIsODI4NywzMiw4MTk5LDMyLDgyMzksMzIsMjA0Miw5NSw2NTEwMSw5NSw2NTEwMiw5NSw2NTEwMyw5NSw4MjA4LDQ1LDgyMDksNDUsODIxMCw0NSw2NTExMiw0NSwxNzQ4LDQ1LDgyNTksNDUsNzI3LDQ1LDg3MjIsNDUsMTAxMzQsNDUsMTE0NTAsNDUsMTU0OSw0NCwxNjQzLDQ0LDgyMTgsNDQsMTg0LDQ0LDQyMjMzLDQ0LDg5NCw1OSwyMzA3LDU4LDI2OTEsNTgsMTQxNyw1OCwxNzk1LDU4LDE3OTYsNTgsNTg2OCw1OCw2NTA3Miw1OCw2MTQ3LDU4LDYxNTMsNTgsODI4Miw1OCwxNDc1LDU4LDc2MCw1OCw0Mjg4OSw1OCw4NzU4LDU4LDcyMCw1OCw0MjIzNyw1OCw0NTEsMzMsMTE2MDEsMzMsNjYwLDYzLDU3Nyw2MywyNDI5LDYzLDUwMzgsNjMsNDI3MzEsNjMsMTE5MTQ5LDQ2LDgyMjgsNDYsMTc5Myw0NiwxNzk0LDQ2LDQyNTEwLDQ2LDY4MTc2LDQ2LDE2MzIsNDYsMTc3Niw0Niw0MjIzMiw0NiwxMzczLDk2LDY1Mjg3LDk2LDgyMTksOTYsODI0Miw5NiwxMzcwLDk2LDE1MjMsOTYsODE3NSw5Niw2NTM0NCw5Niw5MDAsOTYsODE4OSw5Niw4MTI1LDk2LDgxMjcsOTYsODE5MCw5Niw2OTcsOTYsODg0LDk2LDcxMiw5Niw3MTQsOTYsNzE1LDk2LDc1Niw5Niw2OTksOTYsNzAxLDk2LDcwMCw5Niw3MDIsOTYsNDI4OTIsOTYsMTQ5Nyw5NiwyMDM2LDk2LDIwMzcsOTYsNTE5NCw5Niw1ODM2LDk2LDk0MDMzLDk2LDk0MDM0LDk2LDY1MzM5LDkxLDEwMDg4LDQwLDEwMDk4LDQwLDEyMzA4LDQwLDY0ODMwLDQwLDY1MzQxLDkzLDEwMDg5LDQxLDEwMDk5LDQxLDEyMzA5LDQxLDY0ODMxLDQxLDEwMTAwLDEyMywxMTkwNjAsMTIzLDEwMTAxLDEyNSw2NTM0Miw5NCw4MjcwLDQyLDE2NDUsNDIsODcyNyw0Miw2NjMzNSw0Miw1OTQxLDQ3LDgyNTcsNDcsODcyNSw0Nyw4MjYwLDQ3LDk1ODUsNDcsMTAxODcsNDcsMTA3NDQsNDcsMTE5MzU0LDQ3LDEyNzU1LDQ3LDEyMzM5LDQ3LDExNDYyLDQ3LDIwMDMxLDQ3LDEyMDM1LDQ3LDY1MzQwLDkyLDY1MTI4LDkyLDg3MjYsOTIsMTAxODksOTIsMTA3NDEsOTIsMTA3NDUsOTIsMTE5MzExLDkyLDExOTM1NSw5MiwxMjc1Niw5MiwyMDAyMiw5MiwxMjAzNCw5Miw0Mjg3MiwzOCw3MDgsOTQsNzEwLDk0LDU4NjksNDMsMTAxMzMsNDMsNjYyMDMsNDMsODI0OSw2MCwxMDA5NCw2MCw3MDYsNjAsMTE5MzUwLDYwLDUxNzYsNjAsNTgxMCw2MCw1MTIwLDYxLDExODQwLDYxLDEyNDQ4LDYxLDQyMjM5LDYxLDgyNTAsNjIsMTAwOTUsNjIsNzA3LDYyLDExOTM1MSw2Miw1MTcxLDYyLDk0MDE1LDYyLDgyNzUsMTI2LDczMiwxMjYsODEyOCwxMjYsODc2NCwxMjYsNjUzNzIsMTI0LDY1MjkzLDQ1LDEyMDc4NCw1MCwxMjA3OTQsNTAsMTIwODA0LDUwLDEyMDgxNCw1MCwxMjA4MjQsNTAsMTMwMDM0LDUwLDQyODQyLDUwLDQyMyw1MCwxMDAwLDUwLDQyNTY0LDUwLDUzMTEsNTAsNDI3MzUsNTAsMTE5MzAyLDUxLDEyMDc4NSw1MSwxMjA3OTUsNTEsMTIwODA1LDUxLDEyMDgxNSw1MSwxMjA4MjUsNTEsMTMwMDM1LDUxLDQyOTIzLDUxLDU0MCw1MSw0MzksNTEsNDI4NTgsNTEsMTE0NjgsNTEsMTI0OCw1MSw5NDAxMSw1MSw3MTg4Miw1MSwxMjA3ODYsNTIsMTIwNzk2LDUyLDEyMDgwNiw1MiwxMjA4MTYsNTIsMTIwODI2LDUyLDEzMDAzNiw1Miw1MDcwLDUyLDcxODU1LDUyLDEyMDc4Nyw1MywxMjA3OTcsNTMsMTIwODA3LDUzLDEyMDgxNyw1MywxMjA4MjcsNTMsMTMwMDM3LDUzLDQ0NCw1Myw3MTg2Nyw1MywxMjA3ODgsNTQsMTIwNzk4LDU0LDEyMDgwOCw1NCwxMjA4MTgsNTQsMTIwODI4LDU0LDEzMDAzOCw1NCwxMTQ3NCw1NCw1MTAyLDU0LDcxODkzLDU0LDExOTMxNCw1NSwxMjA3ODksNTUsMTIwNzk5LDU1LDEyMDgwOSw1NSwxMjA4MTksNTUsMTIwODI5LDU1LDEzMDAzOSw1NSw2Njc3MCw1NSw3MTg3OCw1NSwyODE5LDU2LDI1MzgsNTYsMjY2Niw1NiwxMjUxMzEsNTYsMTIwNzkwLDU2LDEyMDgwMCw1NiwxMjA4MTAsNTYsMTIwODIwLDU2LDEyMDgzMCw1NiwxMzAwNDAsNTYsNTQ3LDU2LDU0Niw1Niw2NjMzMCw1NiwyNjYzLDU3LDI5MjAsNTcsMjU0MSw1NywzNDM3LDU3LDEyMDc5MSw1NywxMjA4MDEsNTcsMTIwODExLDU3LDEyMDgyMSw1NywxMjA4MzEsNTcsMTMwMDQxLDU3LDQyODYyLDU3LDExNDY2LDU3LDcxODg0LDU3LDcxODUyLDU3LDcxODk0LDU3LDkwODIsOTcsNjUzNDUsOTcsMTE5ODM0LDk3LDExOTg4Niw5NywxMTk5MzgsOTcsMTE5OTkwLDk3LDEyMDA0Miw5NywxMjAwOTQsOTcsMTIwMTQ2LDk3LDEyMDE5OCw5NywxMjAyNTAsOTcsMTIwMzAyLDk3LDEyMDM1NCw5NywxMjA0MDYsOTcsMTIwNDU4LDk3LDU5Myw5Nyw5NDUsOTcsMTIwNTE0LDk3LDEyMDU3Miw5NywxMjA2MzAsOTcsMTIwNjg4LDk3LDEyMDc0Niw5Nyw2NTMxMyw2NSwxMTk4MDgsNjUsMTE5ODYwLDY1LDExOTkxMiw2NSwxMTk5NjQsNjUsMTIwMDE2LDY1LDEyMDA2OCw2NSwxMjAxMjAsNjUsMTIwMTcyLDY1LDEyMDIyNCw2NSwxMjAyNzYsNjUsMTIwMzI4LDY1LDEyMDM4MCw2NSwxMjA0MzIsNjUsOTEzLDY1LDEyMDQ4OCw2NSwxMjA1NDYsNjUsMTIwNjA0LDY1LDEyMDY2Miw2NSwxMjA3MjAsNjUsNTAzNCw2NSw1NTczLDY1LDQyMjIyLDY1LDk0MDE2LDY1LDY2MjA4LDY1LDExOTgzNSw5OCwxMTk4ODcsOTgsMTE5OTM5LDk4LDExOTk5MSw5OCwxMjAwNDMsOTgsMTIwMDk1LDk4LDEyMDE0Nyw5OCwxMjAxOTksOTgsMTIwMjUxLDk4LDEyMDMwMyw5OCwxMjAzNTUsOTgsMTIwNDA3LDk4LDEyMDQ1OSw5OCwzODgsOTgsNTA3MSw5OCw1MjM0LDk4LDU1NTEsOTgsNjUzMTQsNjYsODQ5Miw2NiwxMTk4MDksNjYsMTE5ODYxLDY2LDExOTkxMyw2NiwxMjAwMTcsNjYsMTIwMDY5LDY2LDEyMDEyMSw2NiwxMjAxNzMsNjYsMTIwMjI1LDY2LDEyMDI3Nyw2NiwxMjAzMjksNjYsMTIwMzgxLDY2LDEyMDQzMyw2Niw0MjkzMiw2Niw5MTQsNjYsMTIwNDg5LDY2LDEyMDU0Nyw2NiwxMjA2MDUsNjYsMTIwNjYzLDY2LDEyMDcyMSw2Niw1MTA4LDY2LDU2MjMsNjYsNDIxOTIsNjYsNjYxNzgsNjYsNjYyMDksNjYsNjYzMDUsNjYsNjUzNDcsOTksODU3Myw5OSwxMTk4MzYsOTksMTE5ODg4LDk5LDExOTk0MCw5OSwxMTk5OTIsOTksMTIwMDQ0LDk5LDEyMDA5Niw5OSwxMjAxNDgsOTksMTIwMjAwLDk5LDEyMDI1Miw5OSwxMjAzMDQsOTksMTIwMzU2LDk5LDEyMDQwOCw5OSwxMjA0NjAsOTksNzQyOCw5OSwxMDEwLDk5LDExNDI5LDk5LDQzOTUxLDk5LDY2NjIxLDk5LDEyODg0NCw2Nyw3MTkyMiw2Nyw3MTkxMyw2Nyw2NTMxNSw2Nyw4NTU3LDY3LDg0NTAsNjcsODQ5Myw2NywxMTk4MTAsNjcsMTE5ODYyLDY3LDExOTkxNCw2NywxMTk5NjYsNjcsMTIwMDE4LDY3LDEyMDE3NCw2NywxMjAyMjYsNjcsMTIwMjc4LDY3LDEyMDMzMCw2NywxMjAzODIsNjcsMTIwNDM0LDY3LDEwMTcsNjcsMTE0MjgsNjcsNTA4Nyw2Nyw0MjIwMiw2Nyw2NjIxMCw2Nyw2NjMwNiw2Nyw2NjU4MSw2Nyw2Njg0NCw2Nyw4NTc0LDEwMCw4NTE4LDEwMCwxMTk4MzcsMTAwLDExOTg4OSwxMDAsMTE5OTQxLDEwMCwxMTk5OTMsMTAwLDEyMDA0NSwxMDAsMTIwMDk3LDEwMCwxMjAxNDksMTAwLDEyMDIwMSwxMDAsMTIwMjUzLDEwMCwxMjAzMDUsMTAwLDEyMDM1NywxMDAsMTIwNDA5LDEwMCwxMjA0NjEsMTAwLDEyODEsMTAwLDUwOTUsMTAwLDUyMzEsMTAwLDQyMTk0LDEwMCw4NTU4LDY4LDg1MTcsNjgsMTE5ODExLDY4LDExOTg2Myw2OCwxMTk5MTUsNjgsMTE5OTY3LDY4LDEyMDAxOSw2OCwxMjAwNzEsNjgsMTIwMTIzLDY4LDEyMDE3NSw2OCwxMjAyMjcsNjgsMTIwMjc5LDY4LDEyMDMzMSw2OCwxMjAzODMsNjgsMTIwNDM1LDY4LDUwMjQsNjgsNTU5OCw2OCw1NjEwLDY4LDQyMTk1LDY4LDg0OTQsMTAxLDY1MzQ5LDEwMSw4NDk1LDEwMSw4NTE5LDEwMSwxMTk4MzgsMTAxLDExOTg5MCwxMDEsMTE5OTQyLDEwMSwxMjAwNDYsMTAxLDEyMDA5OCwxMDEsMTIwMTUwLDEwMSwxMjAyMDIsMTAxLDEyMDI1NCwxMDEsMTIwMzA2LDEwMSwxMjAzNTgsMTAxLDEyMDQxMCwxMDEsMTIwNDYyLDEwMSw0MzgyNiwxMDEsMTIxMywxMDEsODk1OSw2OSw2NTMxNyw2OSw4NDk2LDY5LDExOTgxMiw2OSwxMTk4NjQsNjksMTE5OTE2LDY5LDEyMDAyMCw2OSwxMjAwNzIsNjksMTIwMTI0LDY5LDEyMDE3Niw2OSwxMjAyMjgsNjksMTIwMjgwLDY5LDEyMDMzMiw2OSwxMjAzODQsNjksMTIwNDM2LDY5LDkxNyw2OSwxMjA0OTIsNjksMTIwNTUwLDY5LDEyMDYwOCw2OSwxMjA2NjYsNjksMTIwNzI0LDY5LDExNTc3LDY5LDUwMzYsNjksNDIyMjQsNjksNzE4NDYsNjksNzE4NTQsNjksNjYxODIsNjksMTE5ODM5LDEwMiwxMTk4OTEsMTAyLDExOTk0MywxMDIsMTE5OTk1LDEwMiwxMjAwNDcsMTAyLDEyMDA5OSwxMDIsMTIwMTUxLDEwMiwxMjAyMDMsMTAyLDEyMDI1NSwxMDIsMTIwMzA3LDEwMiwxMjAzNTksMTAyLDEyMDQxMSwxMDIsMTIwNDYzLDEwMiw0MzgyOSwxMDIsNDI5MDUsMTAyLDM4MywxMDIsNzgzNywxMDIsMTQxMiwxMDIsMTE5MzE1LDcwLDg0OTcsNzAsMTE5ODEzLDcwLDExOTg2NSw3MCwxMTk5MTcsNzAsMTIwMDIxLDcwLDEyMDA3Myw3MCwxMjAxMjUsNzAsMTIwMTc3LDcwLDEyMDIyOSw3MCwxMjAyODEsNzAsMTIwMzMzLDcwLDEyMDM4NSw3MCwxMjA0MzcsNzAsNDI5MDQsNzAsOTg4LDcwLDEyMDc3OCw3MCw1NTU2LDcwLDQyMjA1LDcwLDcxODc0LDcwLDcxODQyLDcwLDY2MTgzLDcwLDY2MjEzLDcwLDY2ODUzLDcwLDY1MzUxLDEwMyw4NDU4LDEwMywxMTk4NDAsMTAzLDExOTg5MiwxMDMsMTE5OTQ0LDEwMywxMjAwNDgsMTAzLDEyMDEwMCwxMDMsMTIwMTUyLDEwMywxMjAyMDQsMTAzLDEyMDI1NiwxMDMsMTIwMzA4LDEwMywxMjAzNjAsMTAzLDEyMDQxMiwxMDMsMTIwNDY0LDEwMyw2MDksMTAzLDc1NTUsMTAzLDM5NywxMDMsMTQwOSwxMDMsMTE5ODE0LDcxLDExOTg2Niw3MSwxMTk5MTgsNzEsMTE5OTcwLDcxLDEyMDAyMiw3MSwxMjAwNzQsNzEsMTIwMTI2LDcxLDEyMDE3OCw3MSwxMjAyMzAsNzEsMTIwMjgyLDcxLDEyMDMzNCw3MSwxMjAzODYsNzEsMTIwNDM4LDcxLDEyOTIsNzEsNTA1Niw3MSw1MTA3LDcxLDQyMTk4LDcxLDY1MzUyLDEwNCw4NDYyLDEwNCwxMTk4NDEsMTA0LDExOTk0NSwxMDQsMTE5OTk3LDEwNCwxMjAwNDksMTA0LDEyMDEwMSwxMDQsMTIwMTUzLDEwNCwxMjAyMDUsMTA0LDEyMDI1NywxMDQsMTIwMzA5LDEwNCwxMjAzNjEsMTA0LDEyMDQxMywxMDQsMTIwNDY1LDEwNCwxMjExLDEwNCwxMzkyLDEwNCw1MDU4LDEwNCw2NTMyMCw3Miw4NDU5LDcyLDg0NjAsNzIsODQ2MSw3MiwxMTk4MTUsNzIsMTE5ODY3LDcyLDExOTkxOSw3MiwxMjAwMjMsNzIsMTIwMTc5LDcyLDEyMDIzMSw3MiwxMjAyODMsNzIsMTIwMzM1LDcyLDEyMDM4Nyw3MiwxMjA0MzksNzIsOTE5LDcyLDEyMDQ5NCw3MiwxMjA1NTIsNzIsMTIwNjEwLDcyLDEyMDY2OCw3MiwxMjA3MjYsNzIsMTE0MDYsNzIsNTA1MSw3Miw1NTAwLDcyLDQyMjE1LDcyLDY2MjU1LDcyLDczMSwxMDUsOTA3NSwxMDUsNjUzNTMsMTA1LDg1NjAsMTA1LDg1MDUsMTA1LDg1MjAsMTA1LDExOTg0MiwxMDUsMTE5ODk0LDEwNSwxMTk5NDYsMTA1LDExOTk5OCwxMDUsMTIwMDUwLDEwNSwxMjAxMDIsMTA1LDEyMDE1NCwxMDUsMTIwMjA2LDEwNSwxMjAyNTgsMTA1LDEyMDMxMCwxMDUsMTIwMzYyLDEwNSwxMjA0MTQsMTA1LDEyMDQ2NiwxMDUsMTIwNDg0LDEwNSw2MTgsMTA1LDYxNywxMDUsOTUzLDEwNSw4MTI2LDEwNSw4OTAsMTA1LDEyMDUyMiwxMDUsMTIwNTgwLDEwNSwxMjA2MzgsMTA1LDEyMDY5NiwxMDUsMTIwNzU0LDEwNSwxMTEwLDEwNSw0MjU2NywxMDUsMTIzMSwxMDUsNDM4OTMsMTA1LDUwMjksMTA1LDcxODc1LDEwNSw2NTM1NCwxMDYsODUyMSwxMDYsMTE5ODQzLDEwNiwxMTk4OTUsMTA2LDExOTk0NywxMDYsMTE5OTk5LDEwNiwxMjAwNTEsMTA2LDEyMDEwMywxMDYsMTIwMTU1LDEwNiwxMjAyMDcsMTA2LDEyMDI1OSwxMDYsMTIwMzExLDEwNiwxMjAzNjMsMTA2LDEyMDQxNSwxMDYsMTIwNDY3LDEwNiwxMDExLDEwNiwxMTEyLDEwNiw2NTMyMiw3NCwxMTk4MTcsNzQsMTE5ODY5LDc0LDExOTkyMSw3NCwxMTk5NzMsNzQsMTIwMDI1LDc0LDEyMDA3Nyw3NCwxMjAxMjksNzQsMTIwMTgxLDc0LDEyMDIzMyw3NCwxMjAyODUsNzQsMTIwMzM3LDc0LDEyMDM4OSw3NCwxMjA0NDEsNzQsNDI5MzAsNzQsODk1LDc0LDEwMzIsNzQsNTAzNSw3NCw1MjYxLDc0LDQyMjAxLDc0LDExOTg0NCwxMDcsMTE5ODk2LDEwNywxMTk5NDgsMTA3LDEyMDAwMCwxMDcsMTIwMDUyLDEwNywxMjAxMDQsMTA3LDEyMDE1NiwxMDcsMTIwMjA4LDEwNywxMjAyNjAsMTA3LDEyMDMxMiwxMDcsMTIwMzY0LDEwNywxMjA0MTYsMTA3LDEyMDQ2OCwxMDcsODQ5MCw3NSw2NTMyMyw3NSwxMTk4MTgsNzUsMTE5ODcwLDc1LDExOTkyMiw3NSwxMTk5NzQsNzUsMTIwMDI2LDc1LDEyMDA3OCw3NSwxMjAxMzAsNzUsMTIwMTgyLDc1LDEyMDIzNCw3NSwxMjAyODYsNzUsMTIwMzM4LDc1LDEyMDM5MCw3NSwxMjA0NDIsNzUsOTIyLDc1LDEyMDQ5Nyw3NSwxMjA1NTUsNzUsMTIwNjEzLDc1LDEyMDY3MSw3NSwxMjA3MjksNzUsMTE0MTIsNzUsNTA5NCw3NSw1ODQ1LDc1LDQyMTk5LDc1LDY2ODQwLDc1LDE0NzIsMTA4LDg3MzksNzMsOTIxMyw3Myw2NTUxMiw3MywxNjMzLDEwOCwxNzc3LDczLDY2MzM2LDEwOCwxMjUxMjcsMTA4LDEyMDc4Myw3MywxMjA3OTMsNzMsMTIwODAzLDczLDEyMDgxMyw3MywxMjA4MjMsNzMsMTMwMDMzLDczLDY1MzIxLDczLDg1NDQsNzMsODQ2NCw3Myw4NDY1LDczLDExOTgxNiw3MywxMTk4NjgsNzMsMTE5OTIwLDczLDEyMDAyNCw3MywxMjAxMjgsNzMsMTIwMTgwLDczLDEyMDIzMiw3MywxMjAyODQsNzMsMTIwMzM2LDczLDEyMDM4OCw3MywxMjA0NDAsNzMsNjUzNTYsMTA4LDg1NzIsNzMsODQ2NywxMDgsMTE5ODQ1LDEwOCwxMTk4OTcsMTA4LDExOTk0OSwxMDgsMTIwMDAxLDEwOCwxMjAwNTMsMTA4LDEyMDEwNSw3MywxMjAxNTcsNzMsMTIwMjA5LDczLDEyMDI2MSw3MywxMjAzMTMsNzMsMTIwMzY1LDczLDEyMDQxNyw3MywxMjA0NjksNzMsNDQ4LDczLDEyMDQ5Niw3MywxMjA1NTQsNzMsMTIwNjEyLDczLDEyMDY3MCw3MywxMjA3MjgsNzMsMTE0MTAsNzMsMTAzMCw3MywxMjE2LDczLDE0OTMsMTA4LDE1MDMsMTA4LDE1NzUsMTA4LDEyNjQ2NCwxMDgsMTI2NTkyLDEwOCw2NTE2NiwxMDgsNjUxNjUsMTA4LDE5OTQsMTA4LDExNTk5LDczLDU4MjUsNzMsNDIyMjYsNzMsOTM5OTIsNzMsNjYxODYsMTI0LDY2MzEzLDEyNCwxMTkzMzgsNzYsODU1Niw3Niw4NDY2LDc2LDExOTgxOSw3NiwxMTk4NzEsNzYsMTE5OTIzLDc2LDEyMDAyNyw3NiwxMjAwNzksNzYsMTIwMTMxLDc2LDEyMDE4Myw3NiwxMjAyMzUsNzYsMTIwMjg3LDc2LDEyMDMzOSw3NiwxMjAzOTEsNzYsMTIwNDQzLDc2LDExNDcyLDc2LDUwODYsNzYsNTI5MCw3Niw0MjIwOSw3Niw5Mzk3NCw3Niw3MTg0Myw3Niw3MTg1OCw3Niw2NjU4Nyw3Niw2Njg1NCw3Niw2NTMyNSw3Nyw4NTU5LDc3LDg0OTksNzcsMTE5ODIwLDc3LDExOTg3Miw3NywxMTk5MjQsNzcsMTIwMDI4LDc3LDEyMDA4MCw3NywxMjAxMzIsNzcsMTIwMTg0LDc3LDEyMDIzNiw3NywxMjAyODgsNzcsMTIwMzQwLDc3LDEyMDM5Miw3NywxMjA0NDQsNzcsOTI0LDc3LDEyMDQ5OSw3NywxMjA1NTcsNzcsMTIwNjE1LDc3LDEyMDY3Myw3NywxMjA3MzEsNzcsMTAxOCw3NywxMTQxNiw3Nyw1MDQ3LDc3LDU2MTYsNzcsNTg0Niw3Nyw0MjIwNyw3Nyw2NjIyNCw3Nyw2NjMyMSw3NywxMTk4NDcsMTEwLDExOTg5OSwxMTAsMTE5OTUxLDExMCwxMjAwMDMsMTEwLDEyMDA1NSwxMTAsMTIwMTA3LDExMCwxMjAxNTksMTEwLDEyMDIxMSwxMTAsMTIwMjYzLDExMCwxMjAzMTUsMTEwLDEyMDM2NywxMTAsMTIwNDE5LDExMCwxMjA0NzEsMTEwLDE0MDAsMTEwLDE0MDQsMTEwLDY1MzI2LDc4LDg0NjksNzgsMTE5ODIxLDc4LDExOTg3Myw3OCwxMTk5MjUsNzgsMTE5OTc3LDc4LDEyMDAyOSw3OCwxMjAwODEsNzgsMTIwMTg1LDc4LDEyMDIzNyw3OCwxMjAyODksNzgsMTIwMzQxLDc4LDEyMDM5Myw3OCwxMjA0NDUsNzgsOTI1LDc4LDEyMDUwMCw3OCwxMjA1NTgsNzgsMTIwNjE2LDc4LDEyMDY3NCw3OCwxMjA3MzIsNzgsMTE0MTgsNzgsNDIyMDgsNzgsNjY4MzUsNzgsMzA3NCwxMTEsMzIwMiwxMTEsMzMzMCwxMTEsMzQ1OCwxMTEsMjQwNiwxMTEsMjY2MiwxMTEsMjc5MCwxMTEsMzA0NiwxMTEsMzE3NCwxMTEsMzMwMiwxMTEsMzQzMCwxMTEsMzY2NCwxMTEsMzc5MiwxMTEsNDE2MCwxMTEsMTYzNywxMTEsMTc4MSwxMTEsNjUzNTksMTExLDg1MDAsMTExLDExOTg0OCwxMTEsMTE5OTAwLDExMSwxMTk5NTIsMTExLDEyMDA1NiwxMTEsMTIwMTA4LDExMSwxMjAxNjAsMTExLDEyMDIxMiwxMTEsMTIwMjY0LDExMSwxMjAzMTYsMTExLDEyMDM2OCwxMTEsMTIwNDIwLDExMSwxMjA0NzIsMTExLDc0MzksMTExLDc0NDEsMTExLDQzODM3LDExMSw5NTksMTExLDEyMDUyOCwxMTEsMTIwNTg2LDExMSwxMjA2NDQsMTExLDEyMDcwMiwxMTEsMTIwNzYwLDExMSw5NjMsMTExLDEyMDUzMiwxMTEsMTIwNTkwLDExMSwxMjA2NDgsMTExLDEyMDcwNiwxMTEsMTIwNzY0LDExMSwxMTQyMywxMTEsNDM1MSwxMTEsMTQxMywxMTEsMTUwNSwxMTEsMTYwNywxMTEsMTI2NTAwLDExMSwxMjY1NjQsMTExLDEyNjU5NiwxMTEsNjUyNTksMTExLDY1MjYwLDExMSw2NTI1OCwxMTEsNjUyNTcsMTExLDE3MjYsMTExLDY0NDI4LDExMSw2NDQyOSwxMTEsNjQ0MjcsMTExLDY0NDI2LDExMSwxNzI5LDExMSw2NDQyNCwxMTEsNjQ0MjUsMTExLDY0NDIzLDExMSw2NDQyMiwxMTEsMTc0OSwxMTEsMzM2MCwxMTEsNDEyNSwxMTEsNjY3OTQsMTExLDcxODgwLDExMSw3MTg5NSwxMTEsNjY2MDQsMTExLDE5ODQsNzksMjUzNCw3OSwyOTE4LDc5LDEyMjk1LDc5LDcwODY0LDc5LDcxOTA0LDc5LDEyMDc4Miw3OSwxMjA3OTIsNzksMTIwODAyLDc5LDEyMDgxMiw3OSwxMjA4MjIsNzksMTMwMDMyLDc5LDY1MzI3LDc5LDExOTgyMiw3OSwxMTk4NzQsNzksMTE5OTI2LDc5LDExOTk3OCw3OSwxMjAwMzAsNzksMTIwMDgyLDc5LDEyMDEzNCw3OSwxMjAxODYsNzksMTIwMjM4LDc5LDEyMDI5MCw3OSwxMjAzNDIsNzksMTIwMzk0LDc5LDEyMDQ0Niw3OSw5MjcsNzksMTIwNTAyLDc5LDEyMDU2MCw3OSwxMjA2MTgsNzksMTIwNjc2LDc5LDEyMDczNCw3OSwxMTQyMiw3OSwxMzY1LDc5LDExNjA0LDc5LDQ4MTYsNzksMjg0OCw3OSw2Njc1NCw3OSw0MjIyNyw3OSw3MTg2MSw3OSw2NjE5NCw3OSw2NjIxOSw3OSw2NjU2NCw3OSw2NjgzOCw3OSw5MDc2LDExMiw2NTM2MCwxMTIsMTE5ODQ5LDExMiwxMTk5MDEsMTEyLDExOTk1MywxMTIsMTIwMDA1LDExMiwxMjAwNTcsMTEyLDEyMDEwOSwxMTIsMTIwMTYxLDExMiwxMjAyMTMsMTEyLDEyMDI2NSwxMTIsMTIwMzE3LDExMiwxMjAzNjksMTEyLDEyMDQyMSwxMTIsMTIwNDczLDExMiw5NjEsMTEyLDEyMDUzMCwxMTIsMTIwNTQ0LDExMiwxMjA1ODgsMTEyLDEyMDYwMiwxMTIsMTIwNjQ2LDExMiwxMjA2NjAsMTEyLDEyMDcwNCwxMTIsMTIwNzE4LDExMiwxMjA3NjIsMTEyLDEyMDc3NiwxMTIsMTE0MjcsMTEyLDY1MzI4LDgwLDg0NzMsODAsMTE5ODIzLDgwLDExOTg3NSw4MCwxMTk5MjcsODAsMTE5OTc5LDgwLDEyMDAzMSw4MCwxMjAwODMsODAsMTIwMTg3LDgwLDEyMDIzOSw4MCwxMjAyOTEsODAsMTIwMzQzLDgwLDEyMDM5NSw4MCwxMjA0NDcsODAsOTI5LDgwLDEyMDUwNCw4MCwxMjA1NjIsODAsMTIwNjIwLDgwLDEyMDY3OCw4MCwxMjA3MzYsODAsMTE0MjYsODAsNTA5MCw4MCw1MjI5LDgwLDQyMTkzLDgwLDY2MTk3LDgwLDExOTg1MCwxMTMsMTE5OTAyLDExMywxMTk5NTQsMTEzLDEyMDAwNiwxMTMsMTIwMDU4LDExMywxMjAxMTAsMTEzLDEyMDE2MiwxMTMsMTIwMjE0LDExMywxMjAyNjYsMTEzLDEyMDMxOCwxMTMsMTIwMzcwLDExMywxMjA0MjIsMTEzLDEyMDQ3NCwxMTMsMTMwNywxMTMsMTM3OSwxMTMsMTM4MiwxMTMsODQ3NCw4MSwxMTk4MjQsODEsMTE5ODc2LDgxLDExOTkyOCw4MSwxMTk5ODAsODEsMTIwMDMyLDgxLDEyMDA4NCw4MSwxMjAxODgsODEsMTIwMjQwLDgxLDEyMDI5Miw4MSwxMjAzNDQsODEsMTIwMzk2LDgxLDEyMDQ0OCw4MSwxMTYwNSw4MSwxMTk4NTEsMTE0LDExOTkwMywxMTQsMTE5OTU1LDExNCwxMjAwMDcsMTE0LDEyMDA1OSwxMTQsMTIwMTExLDExNCwxMjAxNjMsMTE0LDEyMDIxNSwxMTQsMTIwMjY3LDExNCwxMjAzMTksMTE0LDEyMDM3MSwxMTQsMTIwNDIzLDExNCwxMjA0NzUsMTE0LDQzODQ3LDExNCw0Mzg0OCwxMTQsNzQ2MiwxMTQsMTEzOTcsMTE0LDQzOTA1LDExNCwxMTkzMTgsODIsODQ3NSw4Miw4NDc2LDgyLDg0NzcsODIsMTE5ODI1LDgyLDExOTg3Nyw4MiwxMTk5MjksODIsMTIwMDMzLDgyLDEyMDE4OSw4MiwxMjAyNDEsODIsMTIwMjkzLDgyLDEyMDM0NSw4MiwxMjAzOTcsODIsMTIwNDQ5LDgyLDQyMiw4Miw1MDI1LDgyLDUwNzQsODIsNjY3NDAsODIsNTUxMSw4Miw0MjIxMSw4Miw5NDAwNSw4Miw2NTM2MywxMTUsMTE5ODUyLDExNSwxMTk5MDQsMTE1LDExOTk1NiwxMTUsMTIwMDA4LDExNSwxMjAwNjAsMTE1LDEyMDExMiwxMTUsMTIwMTY0LDExNSwxMjAyMTYsMTE1LDEyMDI2OCwxMTUsMTIwMzIwLDExNSwxMjAzNzIsMTE1LDEyMDQyNCwxMTUsMTIwNDc2LDExNSw0MjgwMSwxMTUsNDQ1LDExNSwxMTA5LDExNSw0Mzk0NiwxMTUsNzE4NzMsMTE1LDY2NjMyLDExNSw2NTMzMSw4MywxMTk4MjYsODMsMTE5ODc4LDgzLDExOTkzMCw4MywxMTk5ODIsODMsMTIwMDM0LDgzLDEyMDA4Niw4MywxMjAxMzgsODMsMTIwMTkwLDgzLDEyMDI0Miw4MywxMjAyOTQsODMsMTIwMzQ2LDgzLDEyMDM5OCw4MywxMjA0NTAsODMsMTAyOSw4MywxMzU5LDgzLDUwNzcsODMsNTA4Miw4Myw0MjIxMCw4Myw5NDAxMCw4Myw2NjE5OCw4Myw2NjU5Miw4MywxMTk4NTMsMTE2LDExOTkwNSwxMTYsMTE5OTU3LDExNiwxMjAwMDksMTE2LDEyMDA2MSwxMTYsMTIwMTEzLDExNiwxMjAxNjUsMTE2LDEyMDIxNywxMTYsMTIwMjY5LDExNiwxMjAzMjEsMTE2LDEyMDM3MywxMTYsMTIwNDI1LDExNiwxMjA0NzcsMTE2LDg4NjgsODQsMTAyMDEsODQsMTI4ODcyLDg0LDY1MzMyLDg0LDExOTgyNyw4NCwxMTk4NzksODQsMTE5OTMxLDg0LDExOTk4Myw4NCwxMjAwMzUsODQsMTIwMDg3LDg0LDEyMDEzOSw4NCwxMjAxOTEsODQsMTIwMjQzLDg0LDEyMDI5NSw4NCwxMjAzNDcsODQsMTIwMzk5LDg0LDEyMDQ1MSw4NCw5MzIsODQsMTIwNTA3LDg0LDEyMDU2NSw4NCwxMjA2MjMsODQsMTIwNjgxLDg0LDEyMDczOSw4NCwxMTQzMCw4NCw1MDI2LDg0LDQyMTk2LDg0LDkzOTYyLDg0LDcxODY4LDg0LDY2MTk5LDg0LDY2MjI1LDg0LDY2MzI1LDg0LDExOTg1NCwxMTcsMTE5OTA2LDExNywxMTk5NTgsMTE3LDEyMDAxMCwxMTcsMTIwMDYyLDExNywxMjAxMTQsMTE3LDEyMDE2NiwxMTcsMTIwMjE4LDExNywxMjAyNzAsMTE3LDEyMDMyMiwxMTcsMTIwMzc0LDExNywxMjA0MjYsMTE3LDEyMDQ3OCwxMTcsNDI5MTEsMTE3LDc0NTIsMTE3LDQzODU0LDExNyw0Mzg1OCwxMTcsNjUxLDExNyw5NjUsMTE3LDEyMDUzNCwxMTcsMTIwNTkyLDExNywxMjA2NTAsMTE3LDEyMDcwOCwxMTcsMTIwNzY2LDExNywxNDA1LDExNyw2NjgwNiwxMTcsNzE4OTYsMTE3LDg3NDYsODUsODg5OSw4NSwxMTk4MjgsODUsMTE5ODgwLDg1LDExOTkzMiw4NSwxMTk5ODQsODUsMTIwMDM2LDg1LDEyMDA4OCw4NSwxMjAxNDAsODUsMTIwMTkyLDg1LDEyMDI0NCw4NSwxMjAyOTYsODUsMTIwMzQ4LDg1LDEyMDQwMCw4NSwxMjA0NTIsODUsMTM1Nyw4NSw0NjA4LDg1LDY2NzY2LDg1LDUxOTYsODUsNDIyMjgsODUsOTQwMTgsODUsNzE4NjQsODUsODc0NCwxMTgsODg5NywxMTgsNjUzNjYsMTE4LDg1NjQsMTE4LDExOTg1NSwxMTgsMTE5OTA3LDExOCwxMTk5NTksMTE4LDEyMDAxMSwxMTgsMTIwMDYzLDExOCwxMjAxMTUsMTE4LDEyMDE2NywxMTgsMTIwMjE5LDExOCwxMjAyNzEsMTE4LDEyMDMyMywxMTgsMTIwMzc1LDExOCwxMjA0MjcsMTE4LDEyMDQ3OSwxMTgsNzQ1NiwxMTgsOTU3LDExOCwxMjA1MjYsMTE4LDEyMDU4NCwxMTgsMTIwNjQyLDExOCwxMjA3MDAsMTE4LDEyMDc1OCwxMTgsMTE0MSwxMTgsMTQ5NiwxMTgsNzE0MzAsMTE4LDQzOTQ1LDExOCw3MTg3MiwxMTgsMTE5MzA5LDg2LDE2MzksODYsMTc4Myw4Niw4NTQ4LDg2LDExOTgyOSw4NiwxMTk4ODEsODYsMTE5OTMzLDg2LDExOTk4NSw4NiwxMjAwMzcsODYsMTIwMDg5LDg2LDEyMDE0MSw4NiwxMjAxOTMsODYsMTIwMjQ1LDg2LDEyMDI5Nyw4NiwxMjAzNDksODYsMTIwNDAxLDg2LDEyMDQ1Myw4NiwxMTQwLDg2LDExNTc2LDg2LDUwODEsODYsNTE2Nyw4Niw0MjcxOSw4Niw0MjIxNCw4Niw5Mzk2MCw4Niw3MTg0MCw4Niw2Njg0NSw4Niw2MjMsMTE5LDExOTg1NiwxMTksMTE5OTA4LDExOSwxMTk5NjAsMTE5LDEyMDAxMiwxMTksMTIwMDY0LDExOSwxMjAxMTYsMTE5LDEyMDE2OCwxMTksMTIwMjIwLDExOSwxMjAyNzIsMTE5LDEyMDMyNCwxMTksMTIwMzc2LDExOSwxMjA0MjgsMTE5LDEyMDQ4MCwxMTksNzQ1NywxMTksMTEyMSwxMTksMTMwOSwxMTksMTM3NywxMTksNzE0MzQsMTE5LDcxNDM4LDExOSw3MTQzOSwxMTksNDM5MDcsMTE5LDcxOTE5LDg3LDcxOTEwLDg3LDExOTgzMCw4NywxMTk4ODIsODcsMTE5OTM0LDg3LDExOTk4Niw4NywxMjAwMzgsODcsMTIwMDkwLDg3LDEyMDE0Miw4NywxMjAxOTQsODcsMTIwMjQ2LDg3LDEyMDI5OCw4NywxMjAzNTAsODcsMTIwNDAyLDg3LDEyMDQ1NCw4NywxMzA4LDg3LDUwNDMsODcsNTA3Niw4Nyw0MjIxOCw4Nyw1NzQyLDEyMCwxMDUzOSwxMjAsMTA1NDAsMTIwLDEwNzk5LDEyMCw2NTM2OCwxMjAsODU2OSwxMjAsMTE5ODU3LDEyMCwxMTk5MDksMTIwLDExOTk2MSwxMjAsMTIwMDEzLDEyMCwxMjAwNjUsMTIwLDEyMDExNywxMjAsMTIwMTY5LDEyMCwxMjAyMjEsMTIwLDEyMDI3MywxMjAsMTIwMzI1LDEyMCwxMjAzNzcsMTIwLDEyMDQyOSwxMjAsMTIwNDgxLDEyMCw1NDQxLDEyMCw1NTAxLDEyMCw1NzQxLDg4LDk1ODcsODgsNjYzMzgsODgsNzE5MTYsODgsNjUzMzYsODgsODU1Myw4OCwxMTk4MzEsODgsMTE5ODgzLDg4LDExOTkzNSw4OCwxMTk5ODcsODgsMTIwMDM5LDg4LDEyMDA5MSw4OCwxMjAxNDMsODgsMTIwMTk1LDg4LDEyMDI0Nyw4OCwxMjAyOTksODgsMTIwMzUxLDg4LDEyMDQwMyw4OCwxMjA0NTUsODgsNDI5MzEsODgsOTM1LDg4LDEyMDUxMCw4OCwxMjA1NjgsODgsMTIwNjI2LDg4LDEyMDY4NCw4OCwxMjA3NDIsODgsMTE0MzYsODgsMTE2MTMsODgsNTgxNSw4OCw0MjIxOSw4OCw2NjE5Miw4OCw2NjIyOCw4OCw2NjMyNyw4OCw2Njg1NSw4OCw2MTEsMTIxLDc1NjQsMTIxLDY1MzY5LDEyMSwxMTk4NTgsMTIxLDExOTkxMCwxMjEsMTE5OTYyLDEyMSwxMjAwMTQsMTIxLDEyMDA2NiwxMjEsMTIwMTE4LDEyMSwxMjAxNzAsMTIxLDEyMDIyMiwxMjEsMTIwMjc0LDEyMSwxMjAzMjYsMTIxLDEyMDM3OCwxMjEsMTIwNDMwLDEyMSwxMjA0ODIsMTIxLDY1NSwxMjEsNzkzNSwxMjEsNDM4NjYsMTIxLDk0NywxMjEsODUwOSwxMjEsMTIwNTE2LDEyMSwxMjA1NzQsMTIxLDEyMDYzMiwxMjEsMTIwNjkwLDEyMSwxMjA3NDgsMTIxLDExOTksMTIxLDQzMjcsMTIxLDcxOTAwLDEyMSw2NTMzNyw4OSwxMTk4MzIsODksMTE5ODg0LDg5LDExOTkzNiw4OSwxMTk5ODgsODksMTIwMDQwLDg5LDEyMDA5Miw4OSwxMjAxNDQsODksMTIwMTk2LDg5LDEyMDI0OCw4OSwxMjAzMDAsODksMTIwMzUyLDg5LDEyMDQwNCw4OSwxMjA0NTYsODksOTMzLDg5LDk3OCw4OSwxMjA1MDgsODksMTIwNTY2LDg5LDEyMDYyNCw4OSwxMjA2ODIsODksMTIwNzQwLDg5LDExNDMyLDg5LDExOTgsODksNTAzMyw4OSw1MDUzLDg5LDQyMjIwLDg5LDk0MDE5LDg5LDcxODQ0LDg5LDY2MjI2LDg5LDExOTg1OSwxMjIsMTE5OTExLDEyMiwxMTk5NjMsMTIyLDEyMDAxNSwxMjIsMTIwMDY3LDEyMiwxMjAxMTksMTIyLDEyMDE3MSwxMjIsMTIwMjIzLDEyMiwxMjAyNzUsMTIyLDEyMDMyNywxMjIsMTIwMzc5LDEyMiwxMjA0MzEsMTIyLDEyMDQ4MywxMjIsNzQ1OCwxMjIsNDM5MjMsMTIyLDcxODc2LDEyMiw2NjI5Myw5MCw3MTkwOSw5MCw2NTMzOCw5MCw4NDg0LDkwLDg0ODgsOTAsMTE5ODMzLDkwLDExOTg4NSw5MCwxMTk5MzcsOTAsMTE5OTg5LDkwLDEyMDA0MSw5MCwxMjAxOTcsOTAsMTIwMjQ5LDkwLDEyMDMwMSw5MCwxMjAzNTMsOTAsMTIwNDA1LDkwLDEyMDQ1Nyw5MCw5MTgsOTAsMTIwNDkzLDkwLDEyMDU1MSw5MCwxMjA2MDksOTAsMTIwNjY3LDkwLDEyMDcyNSw5MCw1MDU5LDkwLDQyMjA0LDkwLDcxODQ5LDkwLDY1MjgyLDM0LDY1Mjg0LDM2LDY1Mjg1LDM3LDY1Mjg2LDM4LDY1MjkwLDQyLDY1MjkxLDQzLDY1Mjk0LDQ2LDY1Mjk1LDQ3LDY1Mjk2LDQ4LDY1Mjk3LDQ5LDY1Mjk4LDUwLDY1Mjk5LDUxLDY1MzAwLDUyLDY1MzAxLDUzLDY1MzAyLDU0LDY1MzAzLDU1LDY1MzA0LDU2LDY1MzA1LDU3LDY1MzA4LDYwLDY1MzA5LDYxLDY1MzEwLDYyLDY1MzEyLDY0LDY1MzE2LDY4LDY1MzE4LDcwLDY1MzE5LDcxLDY1MzI0LDc2LDY1MzI5LDgxLDY1MzMwLDgyLDY1MzMzLDg1LDY1MzM0LDg2LDY1MzM1LDg3LDY1MzQzLDk1LDY1MzQ2LDk4LDY1MzQ4LDEwMCw2NTM1MCwxMDIsNjUzNTUsMTA3LDY1MzU3LDEwOSw2NTM1OCwxMTAsNjUzNjEsMTEzLDY1MzYyLDExNCw2NTM2NCwxMTYsNjUzNjUsMTE3LDY1MzY3LDExOSw2NTM3MCwxMjIsNjUzNzEsMTIzLDY1MzczLDEyNSwxMTk4NDYsMTA5XSwiX2RlZmF1bHQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiY3MiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImRlIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJlcyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJmciI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJpdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiamEiOls4MjExLDQ1LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI5Miw0NCw2NTMwNyw1OV0sImtvIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwbCI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwdC1CUiI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJxcHMtcGxvYyI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJydSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMzA1LDEwNSw5MjEsNzMsMTAwOSwxMTIsMjE1LDEyMCw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInRyIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInpoLWhhbnMiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODgsNDAsNjUyODksNDFdLCJ6aC1oYW50IjpbODIxMSw0NSw2NTM3NCwxMjYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MzA3LDU5XX0nKSksT2UuY2FjaGU9bmV3IHdsKHtnZXRDYWNoZUtleTpKU09OLnN0cmluZ2lmeX0sdD0+e2Z1bmN0aW9uIG4oaCl7Y29uc3QgYz1uZXcgTWFwO2ZvcihsZXQgZD0wO2Q8aC5sZW5ndGg7ZCs9MiljLnNldChoW2RdLGhbZCsxXSk7cmV0dXJuIGN9ZnVuY3Rpb24gcihoLGMpe2NvbnN0IGQ9bmV3IE1hcChoKTtmb3IoY29uc3RbbSxnXW9mIGMpZC5zZXQobSxnKTtyZXR1cm4gZH1mdW5jdGlvbiBpKGgsYyl7aWYoIWgpcmV0dXJuIGM7Y29uc3QgZD1uZXcgTWFwO2Zvcihjb25zdFttLGddb2YgaCljLmhhcyhtKSYmZC5zZXQobSxnKTtyZXR1cm4gZH1jb25zdCBzPU9lLmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWU7bGV0IGE9dC5maWx0ZXIoaD0+IWguc3RhcnRzV2l0aCgiXyIpJiZoIGluIHMpO2EubGVuZ3RoPT09MCYmKGE9WyJfZGVmYXVsdCJdKTtsZXQgbDtmb3IoY29uc3QgaCBvZiBhKXtjb25zdCBjPW4oc1toXSk7bD1pKGwsYyl9Y29uc3Qgbz1uKHMuX2NvbW1vbiksdT1yKG8sbCk7cmV0dXJuIG5ldyBPZSh1KX0pLE9lLl9sb2NhbGVzPW5ldyBiaSgoKT0+T2JqZWN0LmtleXMoT2UuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS52YWx1ZSkuZmlsdGVyKHQ9PiF0LnN0YXJ0c1dpdGgoIl8iKSkpO2xldCBVdD1PZTtjb25zdCBJdD1jbGFzcyBJdHtzdGF0aWMgZ2V0UmF3RGF0YSgpe3JldHVybiBKU09OLnBhcnNlKCJbOSwxMCwxMSwxMiwxMywzMiwxMjcsMTYwLDE3Myw4NDcsMTU2NCw0NDQ3LDQ0NDgsNjA2OCw2MDY5LDYxNTUsNjE1Niw2MTU3LDYxNTgsNzM1NSw3MzU2LDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4MTk3LDgxOTgsODE5OSw4MjAwLDgyMDEsODIwMiw4MjAzLDgyMDQsODIwNSw4MjA2LDgyMDcsODIzNCw4MjM1LDgyMzYsODIzNyw4MjM4LDgyMzksODI4Nyw4Mjg4LDgyODksODI5MCw4MjkxLDgyOTIsODI5Myw4Mjk0LDgyOTUsODI5Niw4Mjk3LDgyOTgsODI5OSw4MzAwLDgzMDEsODMwMiw4MzAzLDEwMjQwLDEyMjg4LDEyNjQ0LDY1MDI0LDY1MDI1LDY1MDI2LDY1MDI3LDY1MDI4LDY1MDI5LDY1MDMwLDY1MDMxLDY1MDMyLDY1MDMzLDY1MDM0LDY1MDM1LDY1MDM2LDY1MDM3LDY1MDM4LDY1MDM5LDY1Mjc5LDY1NDQwLDY1NTIwLDY1NTIxLDY1NTIyLDY1NTIzLDY1NTI0LDY1NTI1LDY1NTI2LDY1NTI3LDY1NTI4LDY1NTMyLDc4ODQ0LDExOTE1NSwxMTkxNTYsMTE5MTU3LDExOTE1OCwxMTkxNTksMTE5MTYwLDExOTE2MSwxMTkxNjIsOTE3NTA0LDkxNzUwNSw5MTc1MDYsOTE3NTA3LDkxNzUwOCw5MTc1MDksOTE3NTEwLDkxNzUxMSw5MTc1MTIsOTE3NTEzLDkxNzUxNCw5MTc1MTUsOTE3NTE2LDkxNzUxNyw5MTc1MTgsOTE3NTE5LDkxNzUyMCw5MTc1MjEsOTE3NTIyLDkxNzUyMyw5MTc1MjQsOTE3NTI1LDkxNzUyNiw5MTc1MjcsOTE3NTI4LDkxNzUyOSw5MTc1MzAsOTE3NTMxLDkxNzUzMiw5MTc1MzMsOTE3NTM0LDkxNzUzNSw5MTc1MzYsOTE3NTM3LDkxNzUzOCw5MTc1MzksOTE3NTQwLDkxNzU0MSw5MTc1NDIsOTE3NTQzLDkxNzU0NCw5MTc1NDUsOTE3NTQ2LDkxNzU0Nyw5MTc1NDgsOTE3NTQ5LDkxNzU1MCw5MTc1NTEsOTE3NTUyLDkxNzU1Myw5MTc1NTQsOTE3NTU1LDkxNzU1Niw5MTc1NTcsOTE3NTU4LDkxNzU1OSw5MTc1NjAsOTE3NTYxLDkxNzU2Miw5MTc1NjMsOTE3NTY0LDkxNzU2NSw5MTc1NjYsOTE3NTY3LDkxNzU2OCw5MTc1NjksOTE3NTcwLDkxNzU3MSw5MTc1NzIsOTE3NTczLDkxNzU3NCw5MTc1NzUsOTE3NTc2LDkxNzU3Nyw5MTc1NzgsOTE3NTc5LDkxNzU4MCw5MTc1ODEsOTE3NTgyLDkxNzU4Myw5MTc1ODQsOTE3NTg1LDkxNzU4Niw5MTc1ODcsOTE3NTg4LDkxNzU4OSw5MTc1OTAsOTE3NTkxLDkxNzU5Miw5MTc1OTMsOTE3NTk0LDkxNzU5NSw5MTc1OTYsOTE3NTk3LDkxNzU5OCw5MTc1OTksOTE3NjAwLDkxNzYwMSw5MTc2MDIsOTE3NjAzLDkxNzYwNCw5MTc2MDUsOTE3NjA2LDkxNzYwNyw5MTc2MDgsOTE3NjA5LDkxNzYxMCw5MTc2MTEsOTE3NjEyLDkxNzYxMyw5MTc2MTQsOTE3NjE1LDkxNzYxNiw5MTc2MTcsOTE3NjE4LDkxNzYxOSw5MTc2MjAsOTE3NjIxLDkxNzYyMiw5MTc2MjMsOTE3NjI0LDkxNzYyNSw5MTc2MjYsOTE3NjI3LDkxNzYyOCw5MTc2MjksOTE3NjMwLDkxNzYzMSw5MTc3NjAsOTE3NzYxLDkxNzc2Miw5MTc3NjMsOTE3NzY0LDkxNzc2NSw5MTc3NjYsOTE3NzY3LDkxNzc2OCw5MTc3NjksOTE3NzcwLDkxNzc3MSw5MTc3NzIsOTE3NzczLDkxNzc3NCw5MTc3NzUsOTE3Nzc2LDkxNzc3Nyw5MTc3NzgsOTE3Nzc5LDkxNzc4MCw5MTc3ODEsOTE3NzgyLDkxNzc4Myw5MTc3ODQsOTE3Nzg1LDkxNzc4Niw5MTc3ODcsOTE3Nzg4LDkxNzc4OSw5MTc3OTAsOTE3NzkxLDkxNzc5Miw5MTc3OTMsOTE3Nzk0LDkxNzc5NSw5MTc3OTYsOTE3Nzk3LDkxNzc5OCw5MTc3OTksOTE3ODAwLDkxNzgwMSw5MTc4MDIsOTE3ODAzLDkxNzgwNCw5MTc4MDUsOTE3ODA2LDkxNzgwNyw5MTc4MDgsOTE3ODA5LDkxNzgxMCw5MTc4MTEsOTE3ODEyLDkxNzgxMyw5MTc4MTQsOTE3ODE1LDkxNzgxNiw5MTc4MTcsOTE3ODE4LDkxNzgxOSw5MTc4MjAsOTE3ODIxLDkxNzgyMiw5MTc4MjMsOTE3ODI0LDkxNzgyNSw5MTc4MjYsOTE3ODI3LDkxNzgyOCw5MTc4MjksOTE3ODMwLDkxNzgzMSw5MTc4MzIsOTE3ODMzLDkxNzgzNCw5MTc4MzUsOTE3ODM2LDkxNzgzNyw5MTc4MzgsOTE3ODM5LDkxNzg0MCw5MTc4NDEsOTE3ODQyLDkxNzg0Myw5MTc4NDQsOTE3ODQ1LDkxNzg0Niw5MTc4NDcsOTE3ODQ4LDkxNzg0OSw5MTc4NTAsOTE3ODUxLDkxNzg1Miw5MTc4NTMsOTE3ODU0LDkxNzg1NSw5MTc4NTYsOTE3ODU3LDkxNzg1OCw5MTc4NTksOTE3ODYwLDkxNzg2MSw5MTc4NjIsOTE3ODYzLDkxNzg2NCw5MTc4NjUsOTE3ODY2LDkxNzg2Nyw5MTc4NjgsOTE3ODY5LDkxNzg3MCw5MTc4NzEsOTE3ODcyLDkxNzg3Myw5MTc4NzQsOTE3ODc1LDkxNzg3Niw5MTc4NzcsOTE3ODc4LDkxNzg3OSw5MTc4ODAsOTE3ODgxLDkxNzg4Miw5MTc4ODMsOTE3ODg0LDkxNzg4NSw5MTc4ODYsOTE3ODg3LDkxNzg4OCw5MTc4ODksOTE3ODkwLDkxNzg5MSw5MTc4OTIsOTE3ODkzLDkxNzg5NCw5MTc4OTUsOTE3ODk2LDkxNzg5Nyw5MTc4OTgsOTE3ODk5LDkxNzkwMCw5MTc5MDEsOTE3OTAyLDkxNzkwMyw5MTc5MDQsOTE3OTA1LDkxNzkwNiw5MTc5MDcsOTE3OTA4LDkxNzkwOSw5MTc5MTAsOTE3OTExLDkxNzkxMiw5MTc5MTMsOTE3OTE0LDkxNzkxNSw5MTc5MTYsOTE3OTE3LDkxNzkxOCw5MTc5MTksOTE3OTIwLDkxNzkyMSw5MTc5MjIsOTE3OTIzLDkxNzkyNCw5MTc5MjUsOTE3OTI2LDkxNzkyNyw5MTc5MjgsOTE3OTI5LDkxNzkzMCw5MTc5MzEsOTE3OTMyLDkxNzkzMyw5MTc5MzQsOTE3OTM1LDkxNzkzNiw5MTc5MzcsOTE3OTM4LDkxNzkzOSw5MTc5NDAsOTE3OTQxLDkxNzk0Miw5MTc5NDMsOTE3OTQ0LDkxNzk0NSw5MTc5NDYsOTE3OTQ3LDkxNzk0OCw5MTc5NDksOTE3OTUwLDkxNzk1MSw5MTc5NTIsOTE3OTUzLDkxNzk1NCw5MTc5NTUsOTE3OTU2LDkxNzk1Nyw5MTc5NTgsOTE3OTU5LDkxNzk2MCw5MTc5NjEsOTE3OTYyLDkxNzk2Myw5MTc5NjQsOTE3OTY1LDkxNzk2Niw5MTc5NjcsOTE3OTY4LDkxNzk2OSw5MTc5NzAsOTE3OTcxLDkxNzk3Miw5MTc5NzMsOTE3OTc0LDkxNzk3NSw5MTc5NzYsOTE3OTc3LDkxNzk3OCw5MTc5NzksOTE3OTgwLDkxNzk4MSw5MTc5ODIsOTE3OTgzLDkxNzk4NCw5MTc5ODUsOTE3OTg2LDkxNzk4Nyw5MTc5ODgsOTE3OTg5LDkxNzk5MCw5MTc5OTEsOTE3OTkyLDkxNzk5Myw5MTc5OTQsOTE3OTk1LDkxNzk5Niw5MTc5OTcsOTE3OTk4LDkxNzk5OV0iKX1zdGF0aWMgZ2V0RGF0YSgpe3JldHVybiB0aGlzLl9kYXRhfHwodGhpcy5fZGF0YT1uZXcgU2V0KEl0LmdldFJhd0RhdGEoKSkpLHRoaXMuX2RhdGF9c3RhdGljIGlzSW52aXNpYmxlQ2hhcmFjdGVyKHQpe3JldHVybiBJdC5nZXREYXRhKCkuaGFzKHQpfXN0YXRpYyBnZXQgY29kZVBvaW50cygpe3JldHVybiBJdC5nZXREYXRhKCl9fTtJdC5fZGF0YT12b2lkIDA7bGV0IEJ0PUl0O3ZhciB5aT17RU5WX1RZUEU6ImxvY2FsIixOT0RFX0VOVjoicHJvZHVjdGlvbiJ9O2xldCBndDtjb25zdCBhcj1nbG9iYWxUaGlzLnZzY29kZTtpZih0eXBlb2YgYXI8InUiJiZ0eXBlb2YgYXIucHJvY2VzczwidSIpe2NvbnN0IGU9YXIucHJvY2VzcztndD17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIGUucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIGUuYXJjaH0sZ2V0IGVudigpe3JldHVybiBlLmVudn0sY3dkKCl7cmV0dXJuIGUuY3dkKCl9fX1lbHNlIHR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3M/LnZlcnNpb25zPy5ub2RlPT0ic3RyaW5nIj9ndD17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIHByb2Nlc3MucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIHByb2Nlc3MuYXJjaH0sZ2V0IGVudigpe3JldHVybiB5aX0sY3dkKCl7cmV0dXJuIHlpLlZTQ09ERV9DV0R8fHByb2Nlc3MuY3dkKCl9fTpndD17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuICR0PyJ3aW4zMiI6bWw/ImRhcndpbiI6ImxpbnV4In0sZ2V0IGFyY2goKXt9LGdldCBlbnYoKXtyZXR1cm57fX0sY3dkKCl7cmV0dXJuIi8ifX07Y29uc3QgZG49Z3QuY3dkLEVsPWd0LmVudixNbD1ndC5wbGF0Zm9ybSxDbD02NSxUbD05NyxQbD05MCxJbD0xMjIsR2U9NDYsb2U9NDcsZ2U9OTIsSmU9NTgsRmw9NjM7Y2xhc3Mgd2kgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4scil7bGV0IGk7dHlwZW9mIG49PSJzdHJpbmciJiZuLmluZGV4T2YoIm5vdCAiKT09PTA/KGk9Im11c3Qgbm90IGJlIixuPW4ucmVwbGFjZSgvXm5vdCAvLCIiKSk6aT0ibXVzdCBiZSI7Y29uc3Qgcz10LmluZGV4T2YoIi4iKSE9PS0xPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtsZXQgYT1gVGhlICIke3R9IiAke3N9ICR7aX0gb2YgdHlwZSAke259YDthKz1gLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIHJ9YCxzdXBlcihhKSx0aGlzLmNvZGU9IkVSUl9JTlZBTElEX0FSR19UWVBFIn19ZnVuY3Rpb24gVmwoZSx0KXtpZihlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyB3aSh0LCJPYmplY3QiLGUpfWZ1bmN0aW9uIEsoZSx0KXtpZih0eXBlb2YgZSE9InN0cmluZyIpdGhyb3cgbmV3IHdpKHQsInN0cmluZyIsZSl9Y29uc3QgcWU9TWw9PT0id2luMzIiO2Z1bmN0aW9uIEIoZSl7cmV0dXJuIGU9PT1vZXx8ZT09PWdlfWZ1bmN0aW9uIG9yKGUpe3JldHVybiBlPT09b2V9ZnVuY3Rpb24gWGUoZSl7cmV0dXJuIGU+PUNsJiZlPD1QbHx8ZT49VGwmJmU8PUlsfWZ1bmN0aW9uIG1uKGUsdCxuLHIpe2xldCBpPSIiLHM9MCxhPS0xLGw9MCxvPTA7Zm9yKGxldCB1PTA7dTw9ZS5sZW5ndGg7Kyt1KXtpZih1PGUubGVuZ3RoKW89ZS5jaGFyQ29kZUF0KHUpO2Vsc2V7aWYocihvKSlicmVhaztvPW9lfWlmKHIobykpe2lmKCEoYT09PXUtMXx8bD09PTEpKWlmKGw9PT0yKXtpZihpLmxlbmd0aDwyfHxzIT09Mnx8aS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09R2V8fGkuY2hhckNvZGVBdChpLmxlbmd0aC0yKSE9PUdlKXtpZihpLmxlbmd0aD4yKXtjb25zdCBoPWkubGFzdEluZGV4T2Yobik7aD09PS0xPyhpPSIiLHM9MCk6KGk9aS5zbGljZSgwLGgpLHM9aS5sZW5ndGgtMS1pLmxhc3RJbmRleE9mKG4pKSxhPXUsbD0wO2NvbnRpbnVlfWVsc2UgaWYoaS5sZW5ndGghPT0wKXtpPSIiLHM9MCxhPXUsbD0wO2NvbnRpbnVlfX10JiYoaSs9aS5sZW5ndGg+MD9gJHtufS4uYDoiLi4iLHM9Mil9ZWxzZSBpLmxlbmd0aD4wP2krPWAke259JHtlLnNsaWNlKGErMSx1KX1gOmk9ZS5zbGljZShhKzEsdSkscz11LWEtMTthPXUsbD0wfWVsc2Ugbz09PUdlJiZsIT09LTE/KytsOmw9LTF9cmV0dXJuIGl9ZnVuY3Rpb24gRGwoZSl7cmV0dXJuIGU/YCR7ZVswXT09PSIuIj8iIjoiLiJ9JHtlfWA6IiJ9ZnVuY3Rpb24gX2koZSx0KXtWbCh0LCJwYXRoT2JqZWN0Iik7Y29uc3Qgbj10LmRpcnx8dC5yb290LHI9dC5iYXNlfHxgJHt0Lm5hbWV8fCIifSR7RGwodC5leHQpfWA7cmV0dXJuIG4/bj09PXQucm9vdD9gJHtufSR7cn1gOmAke259JHtlfSR7cn1gOnJ9Y29uc3QgdWU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0iIixyPSExO2ZvcihsZXQgaT1lLmxlbmd0aC0xO2k+PS0xO2ktLSl7bGV0IHM7aWYoaT49MCl7aWYocz1lW2ldLEsocyxgcGF0aHNbJHtpfV1gKSxzLmxlbmd0aD09PTApY29udGludWV9ZWxzZSB0Lmxlbmd0aD09PTA/cz1kbigpOihzPUVsW2A9JHt0fWBdfHxkbigpLChzPT09dm9pZCAwfHxzLnNsaWNlKDAsMikudG9Mb3dlckNhc2UoKSE9PXQudG9Mb3dlckNhc2UoKSYmcy5jaGFyQ29kZUF0KDIpPT09Z2UpJiYocz1gJHt0fVxcYCkpO2NvbnN0IGE9cy5sZW5ndGg7bGV0IGw9MCxvPSIiLHU9ITE7Y29uc3QgaD1zLmNoYXJDb2RlQXQoMCk7aWYoYT09PTEpQihoKSYmKGw9MSx1PSEwKTtlbHNlIGlmKEIoaCkpaWYodT0hMCxCKHMuY2hhckNvZGVBdCgxKSkpe2xldCBjPTIsZD1jO2Zvcig7YzxhJiYhQihzLmNoYXJDb2RlQXQoYykpOyljKys7aWYoYzxhJiZjIT09ZCl7Y29uc3QgbT1zLnNsaWNlKGQsYyk7Zm9yKGQ9YztjPGEmJkIocy5jaGFyQ29kZUF0KGMpKTspYysrO2lmKGM8YSYmYyE9PWQpe2ZvcihkPWM7YzxhJiYhQihzLmNoYXJDb2RlQXQoYykpOyljKys7KGM9PT1hfHxjIT09ZCkmJihvPWBcXFxcJHttfVxcJHtzLnNsaWNlKGQsYyl9YCxsPWMpfX19ZWxzZSBsPTE7ZWxzZSBYZShoKSYmcy5jaGFyQ29kZUF0KDEpPT09SmUmJihvPXMuc2xpY2UoMCwyKSxsPTIsYT4yJiZCKHMuY2hhckNvZGVBdCgyKSkmJih1PSEwLGw9MykpO2lmKG8ubGVuZ3RoPjApaWYodC5sZW5ndGg+MCl7aWYoby50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWVsc2UgdD1vO2lmKHIpe2lmKHQubGVuZ3RoPjApYnJlYWt9ZWxzZSBpZihuPWAke3Muc2xpY2UobCl9XFwke259YCxyPXUsdSYmdC5sZW5ndGg+MClicmVha31yZXR1cm4gbj1tbihuLCFyLCJcXCIsQikscj9gJHt0fVxcJHtufWA6YCR7dH0ke259YHx8Ii4ifSxub3JtYWxpemUoZSl7SyhlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4iLiI7bGV0IG49MCxyLGk9ITE7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoMCk7aWYodD09PTEpcmV0dXJuIG9yKHMpPyJcXCI6ZTtpZihCKHMpKWlmKGk9ITAsQihlLmNoYXJDb2RlQXQoMSkpKXtsZXQgbD0yLG89bDtmb3IoO2w8dCYmIUIoZS5jaGFyQ29kZUF0KGwpKTspbCsrO2lmKGw8dCYmbCE9PW8pe2NvbnN0IHU9ZS5zbGljZShvLGwpO2ZvcihvPWw7bDx0JiZCKGUuY2hhckNvZGVBdChsKSk7KWwrKztpZihsPHQmJmwhPT1vKXtmb3Iobz1sO2w8dCYmIUIoZS5jaGFyQ29kZUF0KGwpKTspbCsrO2lmKGw9PT10KXJldHVybmBcXFxcJHt1fVxcJHtlLnNsaWNlKG8pfVxcYDtsIT09byYmKHI9YFxcXFwke3V9XFwke2Uuc2xpY2UobyxsKX1gLG49bCl9fX1lbHNlIG49MTtlbHNlIFhlKHMpJiZlLmNoYXJDb2RlQXQoMSk9PT1KZSYmKHI9ZS5zbGljZSgwLDIpLG49Mix0PjImJkIoZS5jaGFyQ29kZUF0KDIpKSYmKGk9ITAsbj0zKSk7bGV0IGE9bjx0P21uKGUuc2xpY2UobiksIWksIlxcIixCKToiIjtyZXR1cm4gYS5sZW5ndGg9PT0wJiYhaSYmKGE9Ii4iKSxhLmxlbmd0aD4wJiZCKGUuY2hhckNvZGVBdCh0LTEpKSYmKGErPSJcXCIpLHI9PT12b2lkIDA/aT9gXFwke2F9YDphOmk/YCR7cn1cXCR7YX1gOmAke3J9JHthfWB9LGlzQWJzb2x1dGUoZSl7SyhlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4hMTtjb25zdCBuPWUuY2hhckNvZGVBdCgwKTtyZXR1cm4gQihuKXx8dD4yJiZYZShuKSYmZS5jaGFyQ29kZUF0KDEpPT09SmUmJkIoZS5jaGFyQ29kZUF0KDIpKX0sam9pbiguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIi4iO2xldCB0LG47Zm9yKGxldCBzPTA7czxlLmxlbmd0aDsrK3Mpe2NvbnN0IGE9ZVtzXTtLKGEsInBhdGgiKSxhLmxlbmd0aD4wJiYodD09PXZvaWQgMD90PW49YTp0Kz1gXFwke2F9YCl9aWYodD09PXZvaWQgMClyZXR1cm4iLiI7bGV0IHI9ITAsaT0wO2lmKHR5cGVvZiBuPT0ic3RyaW5nIiYmQihuLmNoYXJDb2RlQXQoMCkpKXsrK2k7Y29uc3Qgcz1uLmxlbmd0aDtzPjEmJkIobi5jaGFyQ29kZUF0KDEpKSYmKCsraSxzPjImJihCKG4uY2hhckNvZGVBdCgyKSk/KytpOnI9ITEpKX1pZihyKXtmb3IoO2k8dC5sZW5ndGgmJkIodC5jaGFyQ29kZUF0KGkpKTspaSsrO2k+PTImJih0PWBcXCR7dC5zbGljZShpKX1gKX1yZXR1cm4gdWUubm9ybWFsaXplKHQpfSxyZWxhdGl2ZShlLHQpe2lmKEsoZSwiZnJvbSIpLEsodCwidG8iKSxlPT09dClyZXR1cm4iIjtjb25zdCBuPXVlLnJlc29sdmUoZSkscj11ZS5yZXNvbHZlKHQpO2lmKG49PT1yfHwoZT1uLnRvTG93ZXJDYXNlKCksdD1yLnRvTG93ZXJDYXNlKCksZT09PXQpKXJldHVybiIiO2xldCBpPTA7Zm9yKDtpPGUubGVuZ3RoJiZlLmNoYXJDb2RlQXQoaSk9PT1nZTspaSsrO2xldCBzPWUubGVuZ3RoO2Zvcig7cy0xPmkmJmUuY2hhckNvZGVBdChzLTEpPT09Z2U7KXMtLTtjb25zdCBhPXMtaTtsZXQgbD0wO2Zvcig7bDx0Lmxlbmd0aCYmdC5jaGFyQ29kZUF0KGwpPT09Z2U7KWwrKztsZXQgbz10Lmxlbmd0aDtmb3IoO28tMT5sJiZ0LmNoYXJDb2RlQXQoby0xKT09PWdlOylvLS07Y29uc3QgdT1vLWwsaD1hPHU/YTp1O2xldCBjPS0xLGQ9MDtmb3IoO2Q8aDtkKyspe2NvbnN0IGc9ZS5jaGFyQ29kZUF0KGkrZCk7aWYoZyE9PXQuY2hhckNvZGVBdChsK2QpKWJyZWFrO2c9PT1nZSYmKGM9ZCl9aWYoZCE9PWgpe2lmKGM9PT0tMSlyZXR1cm4gcn1lbHNle2lmKHU+aCl7aWYodC5jaGFyQ29kZUF0KGwrZCk9PT1nZSlyZXR1cm4gci5zbGljZShsK2QrMSk7aWYoZD09PTIpcmV0dXJuIHIuc2xpY2UobCtkKX1hPmgmJihlLmNoYXJDb2RlQXQoaStkKT09PWdlP2M9ZDpkPT09MiYmKGM9MykpLGM9PT0tMSYmKGM9MCl9bGV0IG09IiI7Zm9yKGQ9aStjKzE7ZDw9czsrK2QpKGQ9PT1zfHxlLmNoYXJDb2RlQXQoZCk9PT1nZSkmJihtKz1tLmxlbmd0aD09PTA/Ii4uIjoiXFwuLiIpO3JldHVybiBsKz1jLG0ubGVuZ3RoPjA/YCR7bX0ke3Iuc2xpY2UobCxvKX1gOihyLmNoYXJDb2RlQXQobCk9PT1nZSYmKytsLHIuc2xpY2UobCxvKSl9LHRvTmFtZXNwYWNlZFBhdGgoZSl7aWYodHlwZW9mIGUhPSJzdHJpbmcifHxlLmxlbmd0aD09PTApcmV0dXJuIGU7Y29uc3QgdD11ZS5yZXNvbHZlKGUpO2lmKHQubGVuZ3RoPD0yKXJldHVybiBlO2lmKHQuY2hhckNvZGVBdCgwKT09PWdlKXtpZih0LmNoYXJDb2RlQXQoMSk9PT1nZSl7Y29uc3Qgbj10LmNoYXJDb2RlQXQoMik7aWYobiE9PUZsJiZuIT09R2UpcmV0dXJuYFxcXFw/XFxVTkNcXCR7dC5zbGljZSgyKX1gfX1lbHNlIGlmKFhlKHQuY2hhckNvZGVBdCgwKSkmJnQuY2hhckNvZGVBdCgxKT09PUplJiZ0LmNoYXJDb2RlQXQoMik9PT1nZSlyZXR1cm5gXFxcXD9cXCR7dH1gO3JldHVybiBlfSxkaXJuYW1lKGUpe0soZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuIi4iO2xldCBuPS0xLHI9MDtjb25zdCBpPWUuY2hhckNvZGVBdCgwKTtpZih0PT09MSlyZXR1cm4gQihpKT9lOiIuIjtpZihCKGkpKXtpZihuPXI9MSxCKGUuY2hhckNvZGVBdCgxKSkpe2xldCBsPTIsbz1sO2Zvcig7bDx0JiYhQihlLmNoYXJDb2RlQXQobCkpOylsKys7aWYobDx0JiZsIT09byl7Zm9yKG89bDtsPHQmJkIoZS5jaGFyQ29kZUF0KGwpKTspbCsrO2lmKGw8dCYmbCE9PW8pe2ZvcihvPWw7bDx0JiYhQihlLmNoYXJDb2RlQXQobCkpOylsKys7aWYobD09PXQpcmV0dXJuIGU7bCE9PW8mJihuPXI9bCsxKX19fX1lbHNlIFhlKGkpJiZlLmNoYXJDb2RlQXQoMSk9PT1KZSYmKG49dD4yJiZCKGUuY2hhckNvZGVBdCgyKSk/MzoyLHI9bik7bGV0IHM9LTEsYT0hMDtmb3IobGV0IGw9dC0xO2w+PXI7LS1sKWlmKEIoZS5jaGFyQ29kZUF0KGwpKSl7aWYoIWEpe3M9bDticmVha319ZWxzZSBhPSExO2lmKHM9PT0tMSl7aWYobj09PS0xKXJldHVybiIuIjtzPW59cmV0dXJuIGUuc2xpY2UoMCxzKX0sYmFzZW5hbWUoZSx0KXt0IT09dm9pZCAwJiZLKHQsInN1ZmZpeCIpLEsoZSwicGF0aCIpO2xldCBuPTAscj0tMSxpPSEwLHM7aWYoZS5sZW5ndGg+PTImJlhlKGUuY2hhckNvZGVBdCgwKSkmJmUuY2hhckNvZGVBdCgxKT09PUplJiYobj0yKSx0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBhPXQubGVuZ3RoLTEsbD0tMTtmb3Iocz1lLmxlbmd0aC0xO3M+PW47LS1zKXtjb25zdCBvPWUuY2hhckNvZGVBdChzKTtpZihCKG8pKXtpZighaSl7bj1zKzE7YnJlYWt9fWVsc2UgbD09PS0xJiYoaT0hMSxsPXMrMSksYT49MCYmKG89PT10LmNoYXJDb2RlQXQoYSk/LS1hPT09LTEmJihyPXMpOihhPS0xLHI9bCkpfXJldHVybiBuPT09cj9yPWw6cj09PS0xJiYocj1lLmxlbmd0aCksZS5zbGljZShuLHIpfWZvcihzPWUubGVuZ3RoLTE7cz49bjstLXMpaWYoQihlLmNoYXJDb2RlQXQocykpKXtpZighaSl7bj1zKzE7YnJlYWt9fWVsc2Ugcj09PS0xJiYoaT0hMSxyPXMrMSk7cmV0dXJuIHI9PT0tMT8iIjplLnNsaWNlKG4scil9LGV4dG5hbWUoZSl7SyhlLCJwYXRoIik7bGV0IHQ9MCxuPS0xLHI9MCxpPS0xLHM9ITAsYT0wO2UubGVuZ3RoPj0yJiZlLmNoYXJDb2RlQXQoMSk9PT1KZSYmWGUoZS5jaGFyQ29kZUF0KDApKSYmKHQ9cj0yKTtmb3IobGV0IGw9ZS5sZW5ndGgtMTtsPj10Oy0tbCl7Y29uc3Qgbz1lLmNoYXJDb2RlQXQobCk7aWYoQihvKSl7aWYoIXMpe3I9bCsxO2JyZWFrfWNvbnRpbnVlfWk9PT0tMSYmKHM9ITEsaT1sKzEpLG89PT1HZT9uPT09LTE/bj1sOmEhPT0xJiYoYT0xKTpuIT09LTEmJihhPS0xKX1yZXR1cm4gbj09PS0xfHxpPT09LTF8fGE9PT0wfHxhPT09MSYmbj09PWktMSYmbj09PXIrMT8iIjplLnNsaWNlKG4saSl9LGZvcm1hdDpfaS5iaW5kKG51bGwsIlxcIikscGFyc2UoZSl7SyhlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5sZW5ndGg7bGV0IHI9MCxpPWUuY2hhckNvZGVBdCgwKTtpZihuPT09MSlyZXR1cm4gQihpKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZihCKGkpKXtpZihyPTEsQihlLmNoYXJDb2RlQXQoMSkpKXtsZXQgYz0yLGQ9Yztmb3IoO2M8biYmIUIoZS5jaGFyQ29kZUF0KGMpKTspYysrO2lmKGM8biYmYyE9PWQpe2ZvcihkPWM7YzxuJiZCKGUuY2hhckNvZGVBdChjKSk7KWMrKztpZihjPG4mJmMhPT1kKXtmb3IoZD1jO2M8biYmIUIoZS5jaGFyQ29kZUF0KGMpKTspYysrO2M9PT1uP3I9YzpjIT09ZCYmKHI9YysxKX19fX1lbHNlIGlmKFhlKGkpJiZlLmNoYXJDb2RlQXQoMSk9PT1KZSl7aWYobjw9MilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtpZihyPTIsQihlLmNoYXJDb2RlQXQoMikpKXtpZihuPT09MylyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtyPTN9fXI+MCYmKHQucm9vdD1lLnNsaWNlKDAscikpO2xldCBzPS0xLGE9cixsPS0xLG89ITAsdT1lLmxlbmd0aC0xLGg9MDtmb3IoO3U+PXI7LS11KXtpZihpPWUuY2hhckNvZGVBdCh1KSxCKGkpKXtpZighbyl7YT11KzE7YnJlYWt9Y29udGludWV9bD09PS0xJiYobz0hMSxsPXUrMSksaT09PUdlP3M9PT0tMT9zPXU6aCE9PTEmJihoPTEpOnMhPT0tMSYmKGg9LTEpfXJldHVybiBsIT09LTEmJihzPT09LTF8fGg9PT0wfHxoPT09MSYmcz09PWwtMSYmcz09PWErMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UoYSxsKToodC5uYW1lPWUuc2xpY2UoYSxzKSx0LmJhc2U9ZS5zbGljZShhLGwpLHQuZXh0PWUuc2xpY2UocyxsKSkpLGE+MCYmYSE9PXI/dC5kaXI9ZS5zbGljZSgwLGEtMSk6dC5kaXI9dC5yb290LHR9LHNlcDoiXFwiLGRlbGltaXRlcjoiOyIsd2luMzI6bnVsbCxwb3NpeDpudWxsfSxPbD0oKCk9PntpZihxZSl7Y29uc3QgZT0vXFwvZztyZXR1cm4oKT0+e2NvbnN0IHQ9ZG4oKS5yZXBsYWNlKGUsIi8iKTtyZXR1cm4gdC5zbGljZSh0LmluZGV4T2YoIi8iKSl9fXJldHVybigpPT5kbigpfSkoKSxjZT17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSExO2ZvcihsZXQgcj1lLmxlbmd0aC0xO3I+PS0xJiYhbjtyLS0pe2NvbnN0IGk9cj49MD9lW3JdOk9sKCk7SyhpLGBwYXRoc1ske3J9XWApLGkubGVuZ3RoIT09MCYmKHQ9YCR7aX0vJHt0fWAsbj1pLmNoYXJDb2RlQXQoMCk9PT1vZSl9cmV0dXJuIHQ9bW4odCwhbiwiLyIsb3IpLG4/YC8ke3R9YDp0Lmxlbmd0aD4wP3Q6Ii4ifSxub3JtYWxpemUoZSl7aWYoSyhlLCJwYXRoIiksZS5sZW5ndGg9PT0wKXJldHVybiIuIjtjb25zdCB0PWUuY2hhckNvZGVBdCgwKT09PW9lLG49ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpPT09b2U7cmV0dXJuIGU9bW4oZSwhdCwiLyIsb3IpLGUubGVuZ3RoPT09MD90PyIvIjpuPyIuLyI6Ii4iOihuJiYoZSs9Ii8iKSx0P2AvJHtlfWA6ZSl9LGlzQWJzb2x1dGUoZSl7cmV0dXJuIEsoZSwicGF0aCIpLGUubGVuZ3RoPjAmJmUuY2hhckNvZGVBdCgwKT09PW9lfSxqb2luKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4iLiI7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDsrK24pe2NvbnN0IHI9ZVtuXTtLKHIsInBhdGgiKSxyLmxlbmd0aD4wJiYodD09PXZvaWQgMD90PXI6dCs9YC8ke3J9YCl9cmV0dXJuIHQ9PT12b2lkIDA/Ii4iOmNlLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmUoZSx0KXtpZihLKGUsImZyb20iKSxLKHQsInRvIiksZT09PXR8fChlPWNlLnJlc29sdmUoZSksdD1jZS5yZXNvbHZlKHQpLGU9PT10KSlyZXR1cm4iIjtjb25zdCBuPTEscj1lLmxlbmd0aCxpPXItbixzPTEsYT10Lmxlbmd0aC1zLGw9aTxhP2k6YTtsZXQgbz0tMSx1PTA7Zm9yKDt1PGw7dSsrKXtjb25zdCBjPWUuY2hhckNvZGVBdChuK3UpO2lmKGMhPT10LmNoYXJDb2RlQXQocyt1KSlicmVhaztjPT09b2UmJihvPXUpfWlmKHU9PT1sKWlmKGE+bCl7aWYodC5jaGFyQ29kZUF0KHMrdSk9PT1vZSlyZXR1cm4gdC5zbGljZShzK3UrMSk7aWYodT09PTApcmV0dXJuIHQuc2xpY2Uocyt1KX1lbHNlIGk+bCYmKGUuY2hhckNvZGVBdChuK3UpPT09b2U/bz11OnU9PT0wJiYobz0wKSk7bGV0IGg9IiI7Zm9yKHU9bitvKzE7dTw9cjsrK3UpKHU9PT1yfHxlLmNoYXJDb2RlQXQodSk9PT1vZSkmJihoKz1oLmxlbmd0aD09PTA/Ii4uIjoiLy4uIik7cmV0dXJuYCR7aH0ke3Quc2xpY2UocytvKX1gfSx0b05hbWVzcGFjZWRQYXRoKGUpe3JldHVybiBlfSxkaXJuYW1lKGUpe2lmKEsoZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT1vZTtsZXQgbj0tMSxyPSEwO2ZvcihsZXQgaT1lLmxlbmd0aC0xO2k+PTE7LS1pKWlmKGUuY2hhckNvZGVBdChpKT09PW9lKXtpZighcil7bj1pO2JyZWFrfX1lbHNlIHI9ITE7cmV0dXJuIG49PT0tMT90PyIvIjoiLiI6dCYmbj09PTE/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dCE9PXZvaWQgMCYmSyh0LCJleHQiKSxLKGUsInBhdGgiKTtsZXQgbj0wLHI9LTEsaT0hMCxzO2lmKHQhPT12b2lkIDAmJnQubGVuZ3RoPjAmJnQubGVuZ3RoPD1lLmxlbmd0aCl7aWYodD09PWUpcmV0dXJuIiI7bGV0IGE9dC5sZW5ndGgtMSxsPS0xO2ZvcihzPWUubGVuZ3RoLTE7cz49MDstLXMpe2NvbnN0IG89ZS5jaGFyQ29kZUF0KHMpO2lmKG89PT1vZSl7aWYoIWkpe249cysxO2JyZWFrfX1lbHNlIGw9PT0tMSYmKGk9ITEsbD1zKzEpLGE+PTAmJihvPT09dC5jaGFyQ29kZUF0KGEpPy0tYT09PS0xJiYocj1zKTooYT0tMSxyPWwpKX1yZXR1cm4gbj09PXI/cj1sOnI9PT0tMSYmKHI9ZS5sZW5ndGgpLGUuc2xpY2UobixyKX1mb3Iocz1lLmxlbmd0aC0xO3M+PTA7LS1zKWlmKGUuY2hhckNvZGVBdChzKT09PW9lKXtpZighaSl7bj1zKzE7YnJlYWt9fWVsc2Ugcj09PS0xJiYoaT0hMSxyPXMrMSk7cmV0dXJuIHI9PT0tMT8iIjplLnNsaWNlKG4scil9LGV4dG5hbWUoZSl7SyhlLCJwYXRoIik7bGV0IHQ9LTEsbj0wLHI9LTEsaT0hMCxzPTA7Zm9yKGxldCBhPWUubGVuZ3RoLTE7YT49MDstLWEpe2NvbnN0IGw9ZS5jaGFyQ29kZUF0KGEpO2lmKGw9PT1vZSl7aWYoIWkpe249YSsxO2JyZWFrfWNvbnRpbnVlfXI9PT0tMSYmKGk9ITEscj1hKzEpLGw9PT1HZT90PT09LTE/dD1hOnMhPT0xJiYocz0xKTp0IT09LTEmJihzPS0xKX1yZXR1cm4gdD09PS0xfHxyPT09LTF8fHM9PT0wfHxzPT09MSYmdD09PXItMSYmdD09PW4rMT8iIjplLnNsaWNlKHQscil9LGZvcm1hdDpfaS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtLKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZihlLmxlbmd0aD09PTApcmV0dXJuIHQ7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk9PT1vZTtsZXQgcjtuPyh0LnJvb3Q9Ii8iLHI9MSk6cj0wO2xldCBpPS0xLHM9MCxhPS0xLGw9ITAsbz1lLmxlbmd0aC0xLHU9MDtmb3IoO28+PXI7LS1vKXtjb25zdCBoPWUuY2hhckNvZGVBdChvKTtpZihoPT09b2Upe2lmKCFsKXtzPW8rMTticmVha31jb250aW51ZX1hPT09LTEmJihsPSExLGE9bysxKSxoPT09R2U/aT09PS0xP2k9bzp1IT09MSYmKHU9MSk6aSE9PS0xJiYodT0tMSl9aWYoYSE9PS0xKXtjb25zdCBoPXM9PT0wJiZuPzE6cztpPT09LTF8fHU9PT0wfHx1PT09MSYmaT09PWEtMSYmaT09PXMrMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UoaCxhKToodC5uYW1lPWUuc2xpY2UoaCxpKSx0LmJhc2U9ZS5zbGljZShoLGEpLHQuZXh0PWUuc2xpY2UoaSxhKSl9cmV0dXJuIHM+MD90LmRpcj1lLnNsaWNlKDAscy0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtjZS53aW4zMj11ZS53aW4zMj11ZSxjZS5wb3NpeD11ZS5wb3NpeD1jZSxxZT91ZS5ub3JtYWxpemU6Y2Uubm9ybWFsaXplO2NvbnN0ICRsPXFlP3VlLmpvaW46Y2Uuam9pbjtxZT91ZS5yZXNvbHZlOmNlLnJlc29sdmUscWU/dWUucmVsYXRpdmU6Y2UucmVsYXRpdmUscWU/dWUuZGlybmFtZTpjZS5kaXJuYW1lLHFlP3VlLmJhc2VuYW1lOmNlLmJhc2VuYW1lLHFlP3VlLmV4dG5hbWU6Y2UuZXh0bmFtZSxxZT91ZS5zZXA6Y2Uuc2VwO2NvbnN0IFVsPS9eXHdbXHdcZCsuLV0qJC8sQmw9L15cLy8scWw9L15cL1wvLztmdW5jdGlvbiBqbChlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIVVsLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpe2lmKGUuYXV0aG9yaXR5KXtpZighQmwudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYocWwudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1mdW5jdGlvbiBXbChlLHQpe3JldHVybiFlJiYhdD8iZmlsZSI6ZX1mdW5jdGlvbiBIbChlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09QWUmJih0PUFlK3QpOnQ9QWU7YnJlYWt9cmV0dXJuIHR9Y29uc3QgSj0iIixBZT0iLyIsemw9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy87bGV0IFBlPWNsYXNzIEdue3N0YXRpYyBpc1VyaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEduPyEwOnQ/dHlwZW9mIHQuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIHQuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2YgdC5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIHQucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2YgdC5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2YgdC5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2YgdC53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZz09ImZ1bmN0aW9uIjohMX1jb25zdHJ1Y3Rvcih0LG4scixpLHMsYT0hMSl7dHlwZW9mIHQ9PSJvYmplY3QiPyh0aGlzLnNjaGVtZT10LnNjaGVtZXx8Six0aGlzLmF1dGhvcml0eT10LmF1dGhvcml0eXx8Six0aGlzLnBhdGg9dC5wYXRofHxKLHRoaXMucXVlcnk9dC5xdWVyeXx8Six0aGlzLmZyYWdtZW50PXQuZnJhZ21lbnR8fEopOih0aGlzLnNjaGVtZT1XbCh0LGEpLHRoaXMuYXV0aG9yaXR5PW58fEosdGhpcy5wYXRoPUhsKHRoaXMuc2NoZW1lLHJ8fEopLHRoaXMucXVlcnk9aXx8Six0aGlzLmZyYWdtZW50PXN8fEosamwodGhpcyxhKSl9Z2V0IGZzUGF0aCgpe3JldHVybiBscih0aGlzLCExKX13aXRoKHQpe2lmKCF0KXJldHVybiB0aGlzO2xldHtzY2hlbWU6bixhdXRob3JpdHk6cixwYXRoOmkscXVlcnk6cyxmcmFnbWVudDphfT10O3JldHVybiBuPT09dm9pZCAwP249dGhpcy5zY2hlbWU6bj09PW51bGwmJihuPUopLHI9PT12b2lkIDA/cj10aGlzLmF1dGhvcml0eTpyPT09bnVsbCYmKHI9SiksaT09PXZvaWQgMD9pPXRoaXMucGF0aDppPT09bnVsbCYmKGk9Sikscz09PXZvaWQgMD9zPXRoaXMucXVlcnk6cz09PW51bGwmJihzPUopLGE9PT12b2lkIDA/YT10aGlzLmZyYWdtZW50OmE9PT1udWxsJiYoYT1KKSxuPT09dGhpcy5zY2hlbWUmJnI9PT10aGlzLmF1dGhvcml0eSYmaT09PXRoaXMucGF0aCYmcz09PXRoaXMucXVlcnkmJmE9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IHB0KG4scixpLHMsYSl9c3RhdGljIHBhcnNlKHQsbj0hMSl7Y29uc3Qgcj16bC5leGVjKHQpO3JldHVybiByP25ldyBwdChyWzJdfHxKLGduKHJbNF18fEopLGduKHJbNV18fEopLGduKHJbN118fEopLGduKHJbOV18fEopLG4pOm5ldyBwdChKLEosSixKLEopfXN0YXRpYyBmaWxlKHQpe2xldCBuPUo7aWYoJHQmJih0PXQucmVwbGFjZSgvXFwvZyxBZSkpLHRbMF09PT1BZSYmdFsxXT09PUFlKXtjb25zdCByPXQuaW5kZXhPZihBZSwyKTtyPT09LTE/KG49dC5zdWJzdHJpbmcoMiksdD1BZSk6KG49dC5zdWJzdHJpbmcoMixyKSx0PXQuc3Vic3RyaW5nKHIpfHxBZSl9cmV0dXJuIG5ldyBwdCgiZmlsZSIsbix0LEosSil9c3RhdGljIGZyb20odCxuKXtyZXR1cm4gbmV3IHB0KHQuc2NoZW1lLHQuYXV0aG9yaXR5LHQucGF0aCx0LnF1ZXJ5LHQuZnJhZ21lbnQsbil9c3RhdGljIGpvaW5QYXRoKHQsLi4ubil7aWYoIXQucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgcjtyZXR1cm4gJHQmJnQuc2NoZW1lPT09ImZpbGUiP3I9R24uZmlsZSh1ZS5qb2luKGxyKHQsITApLC4uLm4pKS5wYXRoOnI9Y2Uuam9pbih0LnBhdGgsLi4ubiksdC53aXRoKHtwYXRoOnJ9KX10b1N0cmluZyh0PSExKXtyZXR1cm4gdXIodGhpcyx0KX10b0pTT04oKXtyZXR1cm4gdGhpc31zdGF0aWMgcmV2aXZlKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiBHbilyZXR1cm4gdDt7Y29uc3Qgbj1uZXcgcHQodCk7cmV0dXJuIG4uX2Zvcm1hdHRlZD10LmV4dGVybmFsPz9udWxsLG4uX2ZzUGF0aD10Ll9zZXA9PT1MaT90LmZzUGF0aD8/bnVsbDpudWxsLG59fWVsc2UgcmV0dXJuIHR9fTtjb25zdCBMaT0kdD8xOnZvaWQgMDtjbGFzcyBwdCBleHRlbmRzIFBle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb3JtYXR0ZWQ9bnVsbCx0aGlzLl9mc1BhdGg9bnVsbH1nZXQgZnNQYXRoKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD1scih0aGlzLCExKSksdGhpcy5fZnNQYXRofXRvU3RyaW5nKHQ9ITEpe3JldHVybiB0P3VyKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9dXIodGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9dG9KU09OKCl7Y29uc3QgdD17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYodC5mc1BhdGg9dGhpcy5fZnNQYXRoLHQuX3NlcD1MaSksdGhpcy5fZm9ybWF0dGVkJiYodC5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKHQucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYodC5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYodC5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJih0LnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJih0LmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLHR9fWNvbnN0IE5pPXs1ODoiJTNBIiw0NzoiJTJGIiw2MzoiJTNGIiwzNToiJTIzIiw5MToiJTVCIiw5MzoiJTVEIiw2NDoiJTQwIiwzMzoiJTIxIiwzNjoiJTI0IiwzODoiJTI2IiwzOToiJTI3Iiw0MDoiJTI4Iiw0MToiJTI5Iiw0MjoiJTJBIiw0MzoiJTJCIiw0NDoiJTJDIiw1OToiJTNCIiw2MToiJTNEIiwzMjoiJTIwIn07ZnVuY3Rpb24gU2koZSx0LG4pe2xldCByLGk9LTE7Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IGE9ZS5jaGFyQ29kZUF0KHMpO2lmKGE+PTk3JiZhPD0xMjJ8fGE+PTY1JiZhPD05MHx8YT49NDgmJmE8PTU3fHxhPT09NDV8fGE9PT00Nnx8YT09PTk1fHxhPT09MTI2fHx0JiZhPT09NDd8fG4mJmE9PT05MXx8biYmYT09PTkzfHxuJiZhPT09NTgpaSE9PS0xJiYocis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKGkscykpLGk9LTEpLHIhPT12b2lkIDAmJihyKz1lLmNoYXJBdChzKSk7ZWxzZXtyPT09dm9pZCAwJiYocj1lLnN1YnN0cigwLHMpKTtjb25zdCBsPU5pW2FdO2whPT12b2lkIDA/KGkhPT0tMSYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhpLHMpKSxpPS0xKSxyKz1sKTppPT09LTEmJihpPXMpfX1yZXR1cm4gaSE9PS0xJiYocis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKGkpKSksciE9PXZvaWQgMD9yOmV9ZnVuY3Rpb24gR2woZSl7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4pO3I9PT0zNXx8cj09PTYzPyh0PT09dm9pZCAwJiYodD1lLnN1YnN0cigwLG4pKSx0Kz1OaVtyXSk6dCE9PXZvaWQgMCYmKHQrPWVbbl0pfXJldHVybiB0IT09dm9pZCAwP3Q6ZX1mdW5jdGlvbiBscihlLHQpe2xldCBuO3JldHVybiBlLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiZlLnNjaGVtZT09PSJmaWxlIj9uPWAvLyR7ZS5hdXRob3JpdHl9JHtlLnBhdGh9YDplLnBhdGguY2hhckNvZGVBdCgwKT09PTQ3JiYoZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fGUucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJmUucGF0aC5jaGFyQ29kZUF0KDIpPT09NTg/dD9uPWUucGF0aC5zdWJzdHIoMSk6bj1lLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOm49ZS5wYXRoLCR0JiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gdXIoZSx0KXtjb25zdCBuPXQ/R2w6U2k7bGV0IHI9IiIse3NjaGVtZTppLGF1dGhvcml0eTpzLHBhdGg6YSxxdWVyeTpsLGZyYWdtZW50Om99PWU7aWYoaSYmKHIrPWkscis9IjoiKSwoc3x8aT09PSJmaWxlIikmJihyKz1BZSxyKz1BZSkscyl7bGV0IHU9cy5pbmRleE9mKCJAIik7aWYodSE9PS0xKXtjb25zdCBoPXMuc3Vic3RyKDAsdSk7cz1zLnN1YnN0cih1KzEpLHU9aC5sYXN0SW5kZXhPZigiOiIpLHU9PT0tMT9yKz1uKGgsITEsITEpOihyKz1uKGguc3Vic3RyKDAsdSksITEsITEpLHIrPSI6IixyKz1uKGguc3Vic3RyKHUrMSksITEsITApKSxyKz0iQCJ9cz1zLnRvTG93ZXJDYXNlKCksdT1zLmxhc3RJbmRleE9mKCI6IiksdT09PS0xP3IrPW4ocywhMSwhMCk6KHIrPW4ocy5zdWJzdHIoMCx1KSwhMSwhMCkscis9cy5zdWJzdHIodSkpfWlmKGEpe2lmKGEubGVuZ3RoPj0zJiZhLmNoYXJDb2RlQXQoMCk9PT00NyYmYS5jaGFyQ29kZUF0KDIpPT09NTgpe2NvbnN0IHU9YS5jaGFyQ29kZUF0KDEpO3U+PTY1JiZ1PD05MCYmKGE9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUodSszMil9OiR7YS5zdWJzdHIoMyl9YCl9ZWxzZSBpZihhLmxlbmd0aD49MiYmYS5jaGFyQ29kZUF0KDEpPT09NTgpe2NvbnN0IHU9YS5jaGFyQ29kZUF0KDApO3U+PTY1JiZ1PD05MCYmKGE9YCR7U3RyaW5nLmZyb21DaGFyQ29kZSh1KzMyKX06JHthLnN1YnN0cigyKX1gKX1yKz1uKGEsITAsITEpfXJldHVybiBsJiYocis9Ij8iLHIrPW4obCwhMSwhMSkpLG8mJihyKz0iIyIscis9dD9vOlNpKG8sITEsITEpKSxyfWZ1bmN0aW9uIEFpKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoe3JldHVybiBlLmxlbmd0aD4zP2Uuc3Vic3RyKDAsMykrQWkoZS5zdWJzdHIoMykpOmV9fWNvbnN0IGtpPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIGduKGUpe3JldHVybiBlLm1hdGNoKGtpKT9lLnJlcGxhY2Uoa2ksdD0+QWkodCkpOmV9dmFyIFFlOyhmdW5jdGlvbihlKXtlLmluTWVtb3J5PSJpbm1lbW9yeSIsZS52c2NvZGU9InZzY29kZSIsZS5pbnRlcm5hbD0icHJpdmF0ZSIsZS53YWxrVGhyb3VnaD0id2Fsa1Rocm91Z2giLGUud2Fsa1Rocm91Z2hTbmlwcGV0PSJ3YWxrVGhyb3VnaFNuaXBwZXQiLGUuaHR0cD0iaHR0cCIsZS5odHRwcz0iaHR0cHMiLGUuZmlsZT0iZmlsZSIsZS5tYWlsdG89Im1haWx0byIsZS51bnRpdGxlZD0idW50aXRsZWQiLGUuZGF0YT0iZGF0YSIsZS5jb21tYW5kPSJjb21tYW5kIixlLnZzY29kZVJlbW90ZT0idnNjb2RlLXJlbW90ZSIsZS52c2NvZGVSZW1vdGVSZXNvdXJjZT0idnNjb2RlLXJlbW90ZS1yZXNvdXJjZSIsZS52c2NvZGVNYW5hZ2VkUmVtb3RlUmVzb3VyY2U9InZzY29kZS1tYW5hZ2VkLXJlbW90ZS1yZXNvdXJjZSIsZS52c2NvZGVVc2VyRGF0YT0idnNjb2RlLXVzZXJkYXRhIixlLnZzY29kZUN1c3RvbUVkaXRvcj0idnNjb2RlLWN1c3RvbS1lZGl0b3IiLGUudnNjb2RlTm90ZWJvb2tDZWxsPSJ2c2NvZGUtbm90ZWJvb2stY2VsbCIsZS52c2NvZGVOb3RlYm9va0NlbGxNZXRhZGF0YT0idnNjb2RlLW5vdGVib29rLWNlbGwtbWV0YWRhdGEiLGUudnNjb2RlTm90ZWJvb2tDZWxsTWV0YWRhdGFEaWZmPSJ2c2NvZGUtbm90ZWJvb2stY2VsbC1tZXRhZGF0YS1kaWZmIixlLnZzY29kZU5vdGVib29rQ2VsbE91dHB1dD0idnNjb2RlLW5vdGVib29rLWNlbGwtb3V0cHV0IixlLnZzY29kZU5vdGVib29rQ2VsbE91dHB1dERpZmY9InZzY29kZS1ub3RlYm9vay1jZWxsLW91dHB1dC1kaWZmIixlLnZzY29kZU5vdGVib29rTWV0YWRhdGE9InZzY29kZS1ub3RlYm9vay1tZXRhZGF0YSIsZS52c2NvZGVJbnRlcmFjdGl2ZUlucHV0PSJ2c2NvZGUtaW50ZXJhY3RpdmUtaW5wdXQiLGUudnNjb2RlU2V0dGluZ3M9InZzY29kZS1zZXR0aW5ncyIsZS52c2NvZGVXb3Jrc3BhY2VUcnVzdD0idnNjb2RlLXdvcmtzcGFjZS10cnVzdCIsZS52c2NvZGVUZXJtaW5hbD0idnNjb2RlLXRlcm1pbmFsIixlLnZzY29kZUNoYXRDb2RlQmxvY2s9InZzY29kZS1jaGF0LWNvZGUtYmxvY2siLGUudnNjb2RlQ2hhdENvZGVDb21wYXJlQmxvY2s9InZzY29kZS1jaGF0LWNvZGUtY29tcGFyZS1ibG9jayIsZS52c2NvZGVDaGF0U2Vzc3Npb249InZzY29kZS1jaGF0LWVkaXRvciIsZS53ZWJ2aWV3UGFuZWw9IndlYnZpZXctcGFuZWwiLGUudnNjb2RlV2Vidmlldz0idnNjb2RlLXdlYnZpZXciLGUuZXh0ZW5zaW9uPSJleHRlbnNpb24iLGUudnNjb2RlRmlsZVJlc291cmNlPSJ2c2NvZGUtZmlsZSIsZS50bXA9InRtcCIsZS52c2xzPSJ2c2xzIixlLnZzY29kZVNvdXJjZUNvbnRyb2w9InZzY29kZS1zY20iLGUuY29tbWVudHNJbnB1dD0iY29tbWVudCIsZS5jb2RlU2V0dGluZz0iY29kZS1zZXR0aW5nIixlLm91dHB1dENoYW5uZWw9Im91dHB1dCJ9KShRZXx8KFFlPXt9KSk7Y29uc3QgSmw9InRrbiI7Y2xhc3MgWGx7Y29uc3RydWN0b3IoKXt0aGlzLl9ob3N0cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3BvcnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fY29ubmVjdGlvblRva2Vucz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3ByZWZlcnJlZFdlYlNjaGVtYT0iaHR0cCIsdGhpcy5fZGVsZWdhdGU9bnVsbCx0aGlzLl9zZXJ2ZXJSb290UGF0aD0iLyJ9c2V0UHJlZmVycmVkV2ViU2NoZW1hKHQpe3RoaXMuX3ByZWZlcnJlZFdlYlNjaGVtYT10fWdldCBfcmVtb3RlUmVzb3VyY2VzUGF0aCgpe3JldHVybiBjZS5qb2luKHRoaXMuX3NlcnZlclJvb3RQYXRoLFFlLnZzY29kZVJlbW90ZVJlc291cmNlKX1yZXdyaXRlKHQpe2lmKHRoaXMuX2RlbGVnYXRlKXRyeXtyZXR1cm4gdGhpcy5fZGVsZWdhdGUodCl9Y2F0Y2gobCl7cmV0dXJuIENlKGwpLHR9Y29uc3Qgbj10LmF1dGhvcml0eTtsZXQgcj10aGlzLl9ob3N0c1tuXTtyJiZyLmluZGV4T2YoIjoiKSE9PS0xJiZyLmluZGV4T2YoIlsiKT09PS0xJiYocj1gWyR7cn1dYCk7Y29uc3QgaT10aGlzLl9wb3J0c1tuXSxzPXRoaXMuX2Nvbm5lY3Rpb25Ub2tlbnNbbl07bGV0IGE9YHBhdGg9JHtlbmNvZGVVUklDb21wb25lbnQodC5wYXRoKX1gO3JldHVybiB0eXBlb2Ygcz09InN0cmluZyImJihhKz1gJiR7Smx9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHMpfWApLFBlLmZyb20oe3NjaGVtZTpwbD90aGlzLl9wcmVmZXJyZWRXZWJTY2hlbWE6UWUudnNjb2RlUmVtb3RlUmVzb3VyY2UsYXV0aG9yaXR5OmAke3J9OiR7aX1gLHBhdGg6dGhpcy5fcmVtb3RlUmVzb3VyY2VzUGF0aCxxdWVyeTphfSl9fWNvbnN0IFFsPW5ldyBYbCxZbD0idnNjb2RlLWFwcCIsbm49Y2xhc3Mgbm57YXNCcm93c2VyVXJpKHQpe2NvbnN0IG49dGhpcy50b1VyaSh0KTtyZXR1cm4gdGhpcy51cmlUb0Jyb3dzZXJVcmkobil9dXJpVG9Ccm93c2VyVXJpKHQpe3JldHVybiB0LnNjaGVtZT09PVFlLnZzY29kZVJlbW90ZT9RbC5yZXdyaXRlKHQpOnQuc2NoZW1lPT09UWUuZmlsZSYmKGdsfHxibD09PWAke1FlLnZzY29kZUZpbGVSZXNvdXJjZX06Ly8ke25uLkZBTExCQUNLX0FVVEhPUklUWX1gKT90LndpdGgoe3NjaGVtZTpRZS52c2NvZGVGaWxlUmVzb3VyY2UsYXV0aG9yaXR5OnQuYXV0aG9yaXR5fHxubi5GQUxMQkFDS19BVVRIT1JJVFkscXVlcnk6bnVsbCxmcmFnbWVudDpudWxsfSk6dH10b1VyaSh0LG4pe2lmKFBlLmlzVXJpKHQpKXJldHVybiB0O2lmKGdsb2JhbFRoaXMuX1ZTQ09ERV9GSUxFX1JPT1Qpe2NvbnN0IHI9Z2xvYmFsVGhpcy5fVlNDT0RFX0ZJTEVfUk9PVDtpZigvXlx3W1x3XGQrLi1dKjpcL1wvLy50ZXN0KHIpKXJldHVybiBQZS5qb2luUGF0aChQZS5wYXJzZShyLCEwKSx0KTtjb25zdCBpPSRsKHIsdCk7cmV0dXJuIFBlLmZpbGUoaSl9cmV0dXJuIFBlLnBhcnNlKG4udG9VcmwodCkpfX07bm4uRkFMTEJBQ0tfQVVUSE9SSVRZPVlsO2xldCBjcj1ubjtjb25zdCBSaT1uZXcgY3I7dmFyIEVpOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXAoW1siMSIseyJDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSI6InNhbWUtb3JpZ2luIn1dLFsiMiIseyJDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5IjoicmVxdWlyZS1jb3JwIn1dLFsiMyIseyJDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSI6InNhbWUtb3JpZ2luIiwiQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeSI6InJlcXVpcmUtY29ycCJ9XV0pO2UuQ29vcEFuZENvZXA9T2JqZWN0LmZyZWV6ZSh0LmdldCgiMyIpKTtjb25zdCBuPSJ2c2NvZGUtY29pIjtmdW5jdGlvbiByKHMpe2xldCBhO3R5cGVvZiBzPT0ic3RyaW5nIj9hPW5ldyBVUkwocykuc2VhcmNoUGFyYW1zOnMgaW5zdGFuY2VvZiBVUkw/YT1zLnNlYXJjaFBhcmFtczpQZS5pc1VyaShzKSYmKGE9bmV3IFVSTChzLnRvU3RyaW5nKCEwKSkuc2VhcmNoUGFyYW1zKTtjb25zdCBsPWE/LmdldChuKTtpZihsKXJldHVybiB0LmdldChsKX1lLmdldEhlYWRlcnNGcm9tUXVlcnk9cjtmdW5jdGlvbiBpKHMsYSxsKXtpZighZ2xvYmFsVGhpcy5jcm9zc09yaWdpbklzb2xhdGVkKXJldHVybjtjb25zdCBvPWEmJmw/IjMiOmw/IjIiOiIxIjtzIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zP3Muc2V0KG4sbyk6c1tuXT1vfWUuYWRkU2VhcmNoUGFyYW09aX0pKEVpfHwoRWk9e30pKTtjb25zdCBmcj0iZGVmYXVsdCIsWmw9IiRpbml0aWFsaXplIjtjbGFzcyBLbHtjb25zdHJ1Y3Rvcih0LG4scixpLHMpe3RoaXMudnNXb3JrZXI9dCx0aGlzLnJlcT1uLHRoaXMuY2hhbm5lbD1yLHRoaXMubWV0aG9kPWksdGhpcy5hcmdzPXMsdGhpcy50eXBlPTB9fWNsYXNzIE1pe2NvbnN0cnVjdG9yKHQsbixyLGkpe3RoaXMudnNXb3JrZXI9dCx0aGlzLnNlcT1uLHRoaXMucmVzPXIsdGhpcy5lcnI9aSx0aGlzLnR5cGU9MX19Y2xhc3MgZXV7Y29uc3RydWN0b3IodCxuLHIsaSxzKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmNoYW5uZWw9cix0aGlzLmV2ZW50TmFtZT1pLHRoaXMuYXJnPXMsdGhpcy50eXBlPTJ9fWNsYXNzIHR1e2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50PXIsdGhpcy50eXBlPTN9fWNsYXNzIG51e2NvbnN0cnVjdG9yKHQsbil7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy50eXBlPTR9fWNsYXNzIHJ1e2NvbnN0cnVjdG9yKHQpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9dCx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKHQpe3RoaXMuX3dvcmtlcklkPXR9c2VuZE1lc3NhZ2UodCxuLHIpe2NvbnN0IGk9U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpO3JldHVybiBuZXcgUHJvbWlzZSgocyxhKT0+e3RoaXMuX3BlbmRpbmdSZXBsaWVzW2ldPXtyZXNvbHZlOnMscmVqZWN0OmF9LHRoaXMuX3NlbmQobmV3IEtsKHRoaXMuX3dvcmtlcklkLGksdCxuLHIpKX0pfWxpc3Rlbih0LG4scil7bGV0IGk9bnVsbDtjb25zdCBzPW5ldyBfZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjooKT0+e2k9U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpLHRoaXMuX3BlbmRpbmdFbWl0dGVycy5zZXQoaSxzKSx0aGlzLl9zZW5kKG5ldyBldSh0aGlzLl93b3JrZXJJZCxpLHQsbixyKSl9LG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShpKSx0aGlzLl9zZW5kKG5ldyBudSh0aGlzLl93b3JrZXJJZCxpKSksaT1udWxsfX0pO3JldHVybiBzLmV2ZW50fWhhbmRsZU1lc3NhZ2UodCl7IXR8fCF0LnZzV29ya2VyfHx0aGlzLl93b3JrZXJJZCE9PS0xJiZ0LnZzV29ya2VyIT09dGhpcy5fd29ya2VySWR8fHRoaXMuX2hhbmRsZU1lc3NhZ2UodCl9Y3JlYXRlUHJveHlUb1JlbW90ZUNoYW5uZWwodCxuKXtjb25zdCByPXtnZXQ6KGkscyk9Pih0eXBlb2Ygcz09InN0cmluZyImJiFpW3NdJiYoVGkocyk/aVtzXT1hPT50aGlzLmxpc3Rlbih0LHMsYSk6Q2kocyk/aVtzXT10aGlzLmxpc3Rlbih0LHMsdm9pZCAwKTpzLmNoYXJDb2RlQXQoMCk9PT0zNiYmKGlbc109YXN5bmMoLi4uYSk9Pihhd2FpdCBuPy4oKSx0aGlzLnNlbmRNZXNzYWdlKHQscyxhKSkpKSxpW3NdKX07cmV0dXJuIG5ldyBQcm94eShPYmplY3QuY3JlYXRlKG51bGwpLHIpfV9oYW5kbGVNZXNzYWdlKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5faGFuZGxlUmVwbHlNZXNzYWdlKHQpO2Nhc2UgMDpyZXR1cm4gdGhpcy5faGFuZGxlUmVxdWVzdE1lc3NhZ2UodCk7Y2FzZSAyOnJldHVybiB0aGlzLl9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UodCk7Y2FzZSAzOnJldHVybiB0aGlzLl9oYW5kbGVFdmVudE1lc3NhZ2UodCk7Y2FzZSA0OnJldHVybiB0aGlzLl9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KX19X2hhbmRsZVJlcGx5TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdKXtjb25zb2xlLndhcm4oIkdvdCByZXBseSB0byB1bmtub3duIHNlcSIpO3JldHVybn1jb25zdCBuPXRoaXMuX3BlbmRpbmdSZXBsaWVzW3Quc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdLHQuZXJyKXtsZXQgcj10LmVycjt0LmVyci4kaXNFcnJvciYmKHI9bmV3IEVycm9yLHIubmFtZT10LmVyci5uYW1lLHIubWVzc2FnZT10LmVyci5tZXNzYWdlLHIuc3RhY2s9dC5lcnIuc3RhY2spLG4ucmVqZWN0KHIpO3JldHVybn1uLnJlc29sdmUodC5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxO3RoaXMuX2hhbmRsZXIuaGFuZGxlTWVzc2FnZSh0LmNoYW5uZWwsdC5tZXRob2QsdC5hcmdzKS50aGVuKGk9Pnt0aGlzLl9zZW5kKG5ldyBNaSh0aGlzLl93b3JrZXJJZCxuLGksdm9pZCAwKSl9LGk9PntpLmRldGFpbCBpbnN0YW5jZW9mIEVycm9yJiYoaS5kZXRhaWw9Y2koaS5kZXRhaWwpKSx0aGlzLl9zZW5kKG5ldyBNaSh0aGlzLl93b3JrZXJJZCxuLHZvaWQgMCxjaShpKSkpfSl9X2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxLHI9dGhpcy5faGFuZGxlci5oYW5kbGVFdmVudCh0LmNoYW5uZWwsdC5ldmVudE5hbWUsdC5hcmcpKGk9Pnt0aGlzLl9zZW5kKG5ldyB0dSh0aGlzLl93b3JrZXJJZCxuLGkpKX0pO3RoaXMuX3BlbmRpbmdFdmVudHMuc2V0KG4scil9X2hhbmRsZUV2ZW50TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmhhcyh0LnJlcSkpe2NvbnNvbGUud2FybigiR290IGV2ZW50IGZvciB1bmtub3duIHJlcSIpO3JldHVybn10aGlzLl9wZW5kaW5nRW1pdHRlcnMuZ2V0KHQucmVxKS5maXJlKHQuZXZlbnQpfV9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ0V2ZW50cy5oYXModC5yZXEpKXtjb25zb2xlLndhcm4oIkdvdCB1bnN1YnNjcmliZSBmb3IgdW5rbm93biByZXEiKTtyZXR1cm59dGhpcy5fcGVuZGluZ0V2ZW50cy5nZXQodC5yZXEpLmRpc3Bvc2UoKSx0aGlzLl9wZW5kaW5nRXZlbnRzLmRlbGV0ZSh0LnJlcSl9X3NlbmQodCl7Y29uc3Qgbj1bXTtpZih0LnR5cGU9PT0wKWZvcihsZXQgcj0wO3I8dC5hcmdzLmxlbmd0aDtyKyspdC5hcmdzW3JdaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmbi5wdXNoKHQuYXJnc1tyXSk7ZWxzZSB0LnR5cGU9PT0xJiZ0LnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZuLnB1c2godC5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UodCxuKX19ZnVuY3Rpb24gQ2koZSl7cmV0dXJuIGVbMF09PT0ibyImJmVbMV09PT0ibiImJnZpKGUuY2hhckNvZGVBdCgyKSl9ZnVuY3Rpb24gVGkoZSl7cmV0dXJuL15vbkR5bmFtaWMvLnRlc3QoZSkmJnZpKGUuY2hhckNvZGVBdCg5KSl9Y2xhc3MgaXV7Y29uc3RydWN0b3IodCxuKXt0aGlzLl9sb2NhbENoYW5uZWxzPW5ldyBNYXAsdGhpcy5fcmVtb3RlQ2hhbm5lbHM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9bix0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyBydSh7c2VuZE1lc3NhZ2U6KHIsaSk9Pnt0KHIsaSl9LGhhbmRsZU1lc3NhZ2U6KHIsaSxzKT0+dGhpcy5faGFuZGxlTWVzc2FnZShyLGkscyksaGFuZGxlRXZlbnQ6KHIsaSxzKT0+dGhpcy5faGFuZGxlRXZlbnQocixpLHMpfSl9b25tZXNzYWdlKHQpe3RoaXMuX3Byb3RvY29sLmhhbmRsZU1lc3NhZ2UodCl9X2hhbmRsZU1lc3NhZ2UodCxuLHIpe2lmKHQ9PT1mciYmbj09PVpsKXJldHVybiB0aGlzLmluaXRpYWxpemUoclswXSxyWzFdLHJbMl0pO2NvbnN0IGk9dD09PWZyP3RoaXMuX3JlcXVlc3RIYW5kbGVyOnRoaXMuX2xvY2FsQ2hhbm5lbHMuZ2V0KHQpO2lmKCFpKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYE1pc3NpbmcgY2hhbm5lbCAke3R9IG9uIHdvcmtlciB0aHJlYWRgKSk7aWYodHlwZW9mIGlbbl0hPSJmdW5jdGlvbiIpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgTWlzc2luZyBtZXRob2QgJHtufSBvbiB3b3JrZXIgdGhyZWFkIGNoYW5uZWwgJHt0fWApKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpW25dLmFwcGx5KGkscikpfWNhdGNoKHMpe3JldHVybiBQcm9taXNlLnJlamVjdChzKX19X2hhbmRsZUV2ZW50KHQsbixyKXtjb25zdCBpPXQ9PT1mcj90aGlzLl9yZXF1ZXN0SGFuZGxlcjp0aGlzLl9sb2NhbENoYW5uZWxzLmdldCh0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgY2hhbm5lbCAke3R9IG9uIHdvcmtlciB0aHJlYWRgKTtpZihUaShuKSl7Y29uc3Qgcz1pW25dLmNhbGwoaSxyKTtpZih0eXBlb2YgcyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZHluYW1pYyBldmVudCAke259IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gc31pZihDaShuKSl7Y29uc3Qgcz1pW25dO2lmKHR5cGVvZiBzIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBldmVudCAke259IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gc310aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBldmVudCBuYW1lICR7bn1gKX1nZXRDaGFubmVsKHQpe2lmKCF0aGlzLl9yZW1vdGVDaGFubmVscy5oYXModCkpe2NvbnN0IG49dGhpcy5fcHJvdG9jb2wuY3JlYXRlUHJveHlUb1JlbW90ZUNoYW5uZWwodCk7dGhpcy5fcmVtb3RlQ2hhbm5lbHMuc2V0KHQsbil9cmV0dXJuIHRoaXMuX3JlbW90ZUNoYW5uZWxzLmdldCh0KX1hc3luYyBpbml0aWFsaXplKHQsbixyKXtpZih0aGlzLl9wcm90b2NvbC5zZXRXb3JrZXJJZCh0KSx0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnkpe3RoaXMuX3JlcXVlc3RIYW5kbGVyPXRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeSh0aGlzKTtyZXR1cm59cmV0dXJuIG4mJih0eXBlb2Ygbi5iYXNlVXJsPCJ1IiYmZGVsZXRlIG4uYmFzZVVybCx0eXBlb2Ygbi5wYXRoczwidSImJnR5cGVvZiBuLnBhdGhzLnZzPCJ1IiYmZGVsZXRlIG4ucGF0aHMudnMsdHlwZW9mIG4udHJ1c3RlZFR5cGVzUG9saWN5PCJ1IiYmZGVsZXRlIG4udHJ1c3RlZFR5cGVzUG9saWN5LG4uY2F0Y2hFcnJvcj0hMCxnbG9iYWxUaGlzLnJlcXVpcmUuY29uZmlnKG4pKSxpbXBvcnQoYCR7UmkuYXNCcm93c2VyVXJpKGAke3J9LmpzYCkudG9TdHJpbmcoITApfWApLnRoZW4ocz0+e2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVyPXMuY3JlYXRlKHRoaXMpLCF0aGlzLl9yZXF1ZXN0SGFuZGxlcil0aHJvdyBuZXcgRXJyb3IoIk5vIFJlcXVlc3RIYW5kbGVyISIpfSl9fWNsYXNzIFlle2NvbnN0cnVjdG9yKHQsbixyLGkpe3RoaXMub3JpZ2luYWxTdGFydD10LHRoaXMub3JpZ2luYWxMZW5ndGg9bix0aGlzLm1vZGlmaWVkU3RhcnQ9cix0aGlzLm1vZGlmaWVkTGVuZ3RoPWl9Z2V0T3JpZ2luYWxFbmQoKXtyZXR1cm4gdGhpcy5vcmlnaW5hbFN0YXJ0K3RoaXMub3JpZ2luYWxMZW5ndGh9Z2V0TW9kaWZpZWRFbmQoKXtyZXR1cm4gdGhpcy5tb2RpZmllZFN0YXJ0K3RoaXMubW9kaWZpZWRMZW5ndGh9fWZ1bmN0aW9uIFBpKGUsdCl7cmV0dXJuKHQ8PDUpLXQrZXwwfWZ1bmN0aW9uIHN1KGUsdCl7dD1QaSgxNDk0MTcsdCk7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXQ9UGkoZS5jaGFyQ29kZUF0KG4pLHQpO3JldHVybiB0fWZ1bmN0aW9uIGhyKGUsdCxuPTMyKXtjb25zdCByPW4tdCxpPX4oKDE8PHIpLTEpO3JldHVybihlPDx0fChpJmUpPj4+cik+Pj4wfWZ1bmN0aW9uIElpKGUsdD0wLG49ZS5ieXRlTGVuZ3RoLHI9MCl7Zm9yKGxldCBpPTA7aTxuO2krKyllW3QraV09cn1mdW5jdGlvbiBhdShlLHQsbj0iMCIpe2Zvcig7ZS5sZW5ndGg8dDspZT1uK2U7cmV0dXJuIGV9ZnVuY3Rpb24gcXQoZSx0PTMyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP0FycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoZSkpLm1hcChuPT5uLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpLmpvaW4oIiIpOmF1KChlPj4+MCkudG9TdHJpbmcoMTYpLHQvNCl9Y29uc3QgVW49Y2xhc3MgVW57Y29uc3RydWN0b3IoKXt0aGlzLl9oMD0xNzMyNTg0MTkzLHRoaXMuX2gxPTQwMjMyMzM0MTcsdGhpcy5faDI9MjU2MjM4MzEwMix0aGlzLl9oMz0yNzE3MzM4NzgsdGhpcy5faDQ9MzI4NTM3NzUyMCx0aGlzLl9idWZmPW5ldyBVaW50OEFycmF5KDY3KSx0aGlzLl9idWZmRFY9bmV3IERhdGFWaWV3KHRoaXMuX2J1ZmYuYnVmZmVyKSx0aGlzLl9idWZmTGVuPTAsdGhpcy5fdG90YWxMZW49MCx0aGlzLl9sZWZ0b3ZlckhpZ2hTdXJyb2dhdGU9MCx0aGlzLl9maW5pc2hlZD0hMX11cGRhdGUodCl7Y29uc3Qgbj10Lmxlbmd0aDtpZihuPT09MClyZXR1cm47Y29uc3Qgcj10aGlzLl9idWZmO2xldCBpPXRoaXMuX2J1ZmZMZW4scz10aGlzLl9sZWZ0b3ZlckhpZ2hTdXJyb2dhdGUsYSxsO2ZvcihzIT09MD8oYT1zLGw9LTEscz0wKTooYT10LmNoYXJDb2RlQXQoMCksbD0wKTs7KXtsZXQgbz1hO2lmKGhuKGEpKWlmKGwrMTxuKXtjb25zdCB1PXQuY2hhckNvZGVBdChsKzEpO3NyKHUpPyhsKyssbz14aShhLHUpKTpvPTY1NTMzfWVsc2V7cz1hO2JyZWFrfWVsc2Ugc3IoYSkmJihvPTY1NTMzKTtpZihpPXRoaXMuX3B1c2gocixpLG8pLGwrKyxsPG4pYT10LmNoYXJDb2RlQXQobCk7ZWxzZSBicmVha310aGlzLl9idWZmTGVuPWksdGhpcy5fbGVmdG92ZXJIaWdoU3Vycm9nYXRlPXN9X3B1c2godCxuLHIpe3JldHVybiByPDEyOD90W24rK109cjpyPDIwNDg/KHRbbisrXT0xOTJ8KHImMTk4NCk+Pj42LHRbbisrXT0xMjh8KHImNjMpPj4+MCk6cjw2NTUzNj8odFtuKytdPTIyNHwociY2MTQ0MCk+Pj4xMix0W24rK109MTI4fChyJjQwMzIpPj4+Nix0W24rK109MTI4fChyJjYzKT4+PjApOih0W24rK109MjQwfChyJjE4MzUwMDgpPj4+MTgsdFtuKytdPTEyOHwociYyNTgwNDgpPj4+MTIsdFtuKytdPTEyOHwociY0MDMyKT4+PjYsdFtuKytdPTEyOHwociY2Myk+Pj4wKSxuPj02NCYmKHRoaXMuX3N0ZXAoKSxuLT02NCx0aGlzLl90b3RhbExlbis9NjQsdFswXT10WzY0XSx0WzFdPXRbNjVdLHRbMl09dFs2Nl0pLG59ZGlnZXN0KCl7cmV0dXJuIHRoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fbGVmdG92ZXJIaWdoU3Vycm9nYXRlJiYodGhpcy5fbGVmdG92ZXJIaWdoU3Vycm9nYXRlPTAsdGhpcy5fYnVmZkxlbj10aGlzLl9wdXNoKHRoaXMuX2J1ZmYsdGhpcy5fYnVmZkxlbiw2NTUzMykpLHRoaXMuX3RvdGFsTGVuKz10aGlzLl9idWZmTGVuLHRoaXMuX3dyYXBVcCgpKSxxdCh0aGlzLl9oMCkrcXQodGhpcy5faDEpK3F0KHRoaXMuX2gyKStxdCh0aGlzLl9oMykrcXQodGhpcy5faDQpfV93cmFwVXAoKXt0aGlzLl9idWZmW3RoaXMuX2J1ZmZMZW4rK109MTI4LElpKHRoaXMuX2J1ZmYsdGhpcy5fYnVmZkxlbiksdGhpcy5fYnVmZkxlbj41NiYmKHRoaXMuX3N0ZXAoKSxJaSh0aGlzLl9idWZmKSk7Y29uc3QgdD04KnRoaXMuX3RvdGFsTGVuO3RoaXMuX2J1ZmZEVi5zZXRVaW50MzIoNTYsTWF0aC5mbG9vcih0LzQyOTQ5NjcyOTYpLCExKSx0aGlzLl9idWZmRFYuc2V0VWludDMyKDYwLHQlNDI5NDk2NzI5NiwhMSksdGhpcy5fc3RlcCgpfV9zdGVwKCl7Y29uc3QgdD1Vbi5fYmlnQmxvY2szMixuPXRoaXMuX2J1ZmZEVjtmb3IobGV0IGM9MDtjPDY0O2MrPTQpdC5zZXRVaW50MzIoYyxuLmdldFVpbnQzMihjLCExKSwhMSk7Zm9yKGxldCBjPTY0O2M8MzIwO2MrPTQpdC5zZXRVaW50MzIoYyxocih0LmdldFVpbnQzMihjLTEyLCExKV50LmdldFVpbnQzMihjLTMyLCExKV50LmdldFVpbnQzMihjLTU2LCExKV50LmdldFVpbnQzMihjLTY0LCExKSwxKSwhMSk7bGV0IHI9dGhpcy5faDAsaT10aGlzLl9oMSxzPXRoaXMuX2gyLGE9dGhpcy5faDMsbD10aGlzLl9oNCxvLHUsaDtmb3IobGV0IGM9MDtjPDgwO2MrKyljPDIwPyhvPWkmc3x+aSZhLHU9MTUxODUwMDI0OSk6Yzw0MD8obz1pXnNeYSx1PTE4NTk3NzUzOTMpOmM8NjA/KG89aSZzfGkmYXxzJmEsdT0yNDAwOTU5NzA4KToobz1pXnNeYSx1PTMzOTU0Njk3ODIpLGg9aHIociw1KStvK2wrdSt0LmdldFVpbnQzMihjKjQsITEpJjQyOTQ5NjcyOTUsbD1hLGE9cyxzPWhyKGksMzApLGk9cixyPWg7dGhpcy5faDA9dGhpcy5faDArciY0Mjk0OTY3Mjk1LHRoaXMuX2gxPXRoaXMuX2gxK2kmNDI5NDk2NzI5NSx0aGlzLl9oMj10aGlzLl9oMitzJjQyOTQ5NjcyOTUsdGhpcy5faDM9dGhpcy5faDMrYSY0Mjk0OTY3Mjk1LHRoaXMuX2g0PXRoaXMuX2g0K2wmNDI5NDk2NzI5NX19O1VuLl9iaWdCbG9jazMyPW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMzIwKSk7bGV0IEZpPVVuO2NsYXNzIFZpe2NvbnN0cnVjdG9yKHQpe3RoaXMuc291cmNlPXR9Z2V0RWxlbWVudHMoKXtjb25zdCB0PXRoaXMuc291cmNlLG49bmV3IEludDMyQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgcj0wLGk9dC5sZW5ndGg7cjxpO3IrKyluW3JdPXQuY2hhckNvZGVBdChyKTtyZXR1cm4gbn19ZnVuY3Rpb24gb3UoZSx0LG4pe3JldHVybiBuZXcgWmUobmV3IFZpKGUpLG5ldyBWaSh0KSkuQ29tcHV0ZURpZmYobikuY2hhbmdlc31jbGFzcyBidHtzdGF0aWMgQXNzZXJ0KHQsbil7aWYoIXQpdGhyb3cgbmV3IEVycm9yKG4pfX1jbGFzcyB2dHtzdGF0aWMgQ29weSh0LG4scixpLHMpe2ZvcihsZXQgYT0wO2E8czthKyspcltpK2FdPXRbbithXX1zdGF0aWMgQ29weTIodCxuLHIsaSxzKXtmb3IobGV0IGE9MDthPHM7YSsrKXJbaSthXT10W24rYV19fWNsYXNzIERpe2NvbnN0cnVjdG9yKCl7dGhpcy5tX2NoYW5nZXM9W10sdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0LHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MH1NYXJrTmV4dENoYW5nZSgpeyh0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5tX2NoYW5nZXMucHVzaChuZXcgWWUodGhpcy5tX29yaWdpbmFsU3RhcnQsdGhpcy5tX29yaWdpbmFsQ291bnQsdGhpcy5tX21vZGlmaWVkU3RhcnQsdGhpcy5tX21vZGlmaWVkQ291bnQpKSx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTAsdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0fUFkZE9yaWdpbmFsRWxlbWVudCh0LG4pe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHQpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LG4pLHRoaXMubV9vcmlnaW5hbENvdW50Kyt9QWRkTW9kaWZpZWRFbGVtZW50KHQsbil7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsdCksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsbiksdGhpcy5tX21vZGlmaWVkQ291bnQrK31nZXRDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXN9Z2V0UmV2ZXJzZUNoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlcy5yZXZlcnNlKCksdGhpcy5tX2NoYW5nZXN9fWNsYXNzIFple2NvbnN0cnVjdG9yKHQsbixyPW51bGwpe3RoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlPXIsdGhpcy5fb3JpZ2luYWxTZXF1ZW5jZT10LHRoaXMuX21vZGlmaWVkU2VxdWVuY2U9bjtjb25zdFtpLHMsYV09WmUuX2dldEVsZW1lbnRzKHQpLFtsLG8sdV09WmUuX2dldEVsZW1lbnRzKG4pO3RoaXMuX2hhc1N0cmluZ3M9YSYmdSx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzPWksdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaD1zLHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHM9bCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoPW8sdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXX1zdGF0aWMgX2lzU3RyaW5nQXJyYXkodCl7cmV0dXJuIHQubGVuZ3RoPjAmJnR5cGVvZiB0WzBdPT0ic3RyaW5nIn1zdGF0aWMgX2dldEVsZW1lbnRzKHQpe2NvbnN0IG49dC5nZXRFbGVtZW50cygpO2lmKFplLl9pc1N0cmluZ0FycmF5KG4pKXtjb25zdCByPW5ldyBJbnQzMkFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IGk9MCxzPW4ubGVuZ3RoO2k8cztpKyspcltpXT1zdShuW2ldLDApO3JldHVybltuLHIsITBdfXJldHVybiBuIGluc3RhbmNlb2YgSW50MzJBcnJheT9bW10sbiwhMV06W1tdLG5ldyBJbnQzMkFycmF5KG4pLCExXX1FbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbbl06ITB9RWxlbWVudHNBcmVTdHJpY3RFcXVhbCh0LG4pe2lmKCF0aGlzLkVsZW1lbnRzQXJlRXF1YWwodCxuKSlyZXR1cm4hMTtjb25zdCByPVplLl9nZXRTdHJpY3RFbGVtZW50KHRoaXMuX29yaWdpbmFsU2VxdWVuY2UsdCksaT1aZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9tb2RpZmllZFNlcXVlbmNlLG4pO3JldHVybiByPT09aX1zdGF0aWMgX2dldFN0cmljdEVsZW1lbnQodCxuKXtyZXR1cm4gdHlwZW9mIHQuZ2V0U3RyaWN0RWxlbWVudD09ImZ1bmN0aW9uIj90LmdldFN0cmljdEVsZW1lbnQobik6bnVsbH1PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwodCxuKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSE9PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbbl0/ITE6dGhpcy5faGFzU3RyaW5ncz90aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3RdPT09dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tuXTohMH1Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwodCxuKXtyZXR1cm4gdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFt0XSE9PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbbl0/ITE6dGhpcy5faGFzU3RyaW5ncz90aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdPT09dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tuXTohMH1Db21wdXRlRGlmZih0KXtyZXR1cm4gdGhpcy5fQ29tcHV0ZURpZmYoMCx0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLDAsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMSx0KX1fQ29tcHV0ZURpZmYodCxuLHIsaSxzKXtjb25zdCBhPVshMV07bGV0IGw9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZSh0LG4scixpLGEpO3JldHVybiBzJiYobD10aGlzLlByZXR0aWZ5Q2hhbmdlcyhsKSkse3F1aXRFYXJseTphWzBdLGNoYW5nZXM6bH19Q29tcHV0ZURpZmZSZWN1cnNpdmUodCxuLHIsaSxzKXtmb3Ioc1swXT0hMTt0PD1uJiZyPD1pJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwodCxyKTspdCsrLHIrKztmb3IoO24+PXQmJmk+PXImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChuLGkpOyluLS0saS0tO2lmKHQ+bnx8cj5pKXtsZXQgYztyZXR1cm4gcjw9aT8oYnQuQXNzZXJ0KHQ9PT1uKzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGM9W25ldyBZZSh0LDAscixpLXIrMSldKTp0PD1uPyhidC5Bc3NlcnQocj09PWkrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksYz1bbmV3IFllKHQsbi10KzEsciwwKV0pOihidC5Bc3NlcnQodD09PW4rMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksYnQuQXNzZXJ0KHI9PT1pKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGM9W10pLGN9Y29uc3QgYT1bMF0sbD1bMF0sbz10aGlzLkNvbXB1dGVSZWN1cnNpb25Qb2ludCh0LG4scixpLGEsbCxzKSx1PWFbMF0saD1sWzBdO2lmKG8hPT1udWxsKXJldHVybiBvO2lmKCFzWzBdKXtjb25zdCBjPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUodCx1LHIsaCxzKTtsZXQgZD1bXTtyZXR1cm4gc1swXT9kPVtuZXcgWWUodSsxLG4tKHUrMSkrMSxoKzEsaS0oaCsxKSsxKV06ZD10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKHUrMSxuLGgrMSxpLHMpLHRoaXMuQ29uY2F0ZW5hdGVDaGFuZ2VzKGMsZCl9cmV0dXJuW25ldyBZZSh0LG4tdCsxLHIsaS1yKzEpXX1XQUxLVFJBQ0UodCxuLHIsaSxzLGEsbCxvLHUsaCxjLGQsbSxnLHAsdix3LF8pe2xldCB4PW51bGwseT1udWxsLGI9bmV3IERpLEw9bixTPXIsTT1tWzBdLXZbMF0taSxGPS0xMDczNzQxODI0LE89dGhpcy5tX2ZvcndhcmRIaXN0b3J5Lmxlbmd0aC0xO2Rve2NvbnN0IEM9TSt0O0M9PT1MfHxDPFMmJnVbQy0xXTx1W0MrMV0/KGM9dVtDKzFdLGc9Yy1NLWksYzxGJiZiLk1hcmtOZXh0Q2hhbmdlKCksRj1jLGIuQWRkTW9kaWZpZWRFbGVtZW50KGMrMSxnKSxNPUMrMS10KTooYz11W0MtMV0rMSxnPWMtTS1pLGM8RiYmYi5NYXJrTmV4dENoYW5nZSgpLEY9Yy0xLGIuQWRkT3JpZ2luYWxFbGVtZW50KGMsZysxKSxNPUMtMS10KSxPPj0wJiYodT10aGlzLm1fZm9yd2FyZEhpc3RvcnlbT10sdD11WzBdLEw9MSxTPXUubGVuZ3RoLTEpfXdoaWxlKC0tTz49LTEpO2lmKHg9Yi5nZXRSZXZlcnNlQ2hhbmdlcygpLF9bMF0pe2xldCBDPW1bMF0rMSxOPXZbMF0rMTtpZih4IT09bnVsbCYmeC5sZW5ndGg+MCl7Y29uc3Qgaz14W3gubGVuZ3RoLTFdO0M9TWF0aC5tYXgoQyxrLmdldE9yaWdpbmFsRW5kKCkpLE49TWF0aC5tYXgoTixrLmdldE1vZGlmaWVkRW5kKCkpfXk9W25ldyBZZShDLGQtQysxLE4scC1OKzEpXX1lbHNle2I9bmV3IERpLEw9YSxTPWwsTT1tWzBdLXZbMF0tbyxGPTEwNzM3NDE4MjQsTz13P3RoaXMubV9yZXZlcnNlSGlzdG9yeS5sZW5ndGgtMTp0aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTI7ZG97Y29uc3QgQz1NK3M7Qz09PUx8fEM8UyYmaFtDLTFdPj1oW0MrMV0/KGM9aFtDKzFdLTEsZz1jLU0tbyxjPkYmJmIuTWFya05leHRDaGFuZ2UoKSxGPWMrMSxiLkFkZE9yaWdpbmFsRWxlbWVudChjKzEsZysxKSxNPUMrMS1zKTooYz1oW0MtMV0sZz1jLU0tbyxjPkYmJmIuTWFya05leHRDaGFuZ2UoKSxGPWMsYi5BZGRNb2RpZmllZEVsZW1lbnQoYysxLGcrMSksTT1DLTEtcyksTz49MCYmKGg9dGhpcy5tX3JldmVyc2VIaXN0b3J5W09dLHM9aFswXSxMPTEsUz1oLmxlbmd0aC0xKX13aGlsZSgtLU8+PS0xKTt5PWIuZ2V0Q2hhbmdlcygpfXJldHVybiB0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyh4LHkpfUNvbXB1dGVSZWN1cnNpb25Qb2ludCh0LG4scixpLHMsYSxsKXtsZXQgbz0wLHU9MCxoPTAsYz0wLGQ9MCxtPTA7dC0tLHItLSxzWzBdPTAsYVswXT0wLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W107Y29uc3QgZz1uLXQrKGktcikscD1nKzEsdj1uZXcgSW50MzJBcnJheShwKSx3PW5ldyBJbnQzMkFycmF5KHApLF89aS1yLHg9bi10LHk9dC1yLGI9bi1pLFM9KHgtXyklMj09PTA7dltfXT10LHdbeF09bixsWzBdPSExO2ZvcihsZXQgTT0xO008PWcvMisxO00rKyl7bGV0IEY9MCxPPTA7aD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKF8tTSxNLF8scCksYz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKF8rTSxNLF8scCk7Zm9yKGxldCBOPWg7Tjw9YztOKz0yKXtOPT09aHx8TjxjJiZ2W04tMV08dltOKzFdP289dltOKzFdOm89dltOLTFdKzEsdT1vLShOLV8pLXk7Y29uc3Qgaz1vO2Zvcig7bzxuJiZ1PGkmJnRoaXMuRWxlbWVudHNBcmVFcXVhbChvKzEsdSsxKTspbysrLHUrKztpZih2W05dPW8sbyt1PkYrTyYmKEY9byxPPXUpLCFTJiZNYXRoLmFicyhOLXgpPD1NLTEmJm8+PXdbTl0pcmV0dXJuIHNbMF09byxhWzBdPXUsazw9d1tOXSYmTTw9MTQ0OD90aGlzLldBTEtUUkFDRShfLGgsYyx5LHgsZCxtLGIsdix3LG8sbixzLHUsaSxhLFMsbCk6bnVsbH1jb25zdCBDPShGLXQrKE8tciktTSkvMjtpZih0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZSE9PW51bGwmJiF0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZShGLEMpKXJldHVybiBsWzBdPSEwLHNbMF09RixhWzBdPU8sQz4wJiZNPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKF8saCxjLHkseCxkLG0sYix2LHcsbyxuLHMsdSxpLGEsUyxsKToodCsrLHIrKyxbbmV3IFllKHQsbi10KzEscixpLXIrMSldKTtkPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoeC1NLE0seCxwKSxtPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoeCtNLE0seCxwKTtmb3IobGV0IE49ZDtOPD1tO04rPTIpe049PT1kfHxOPG0mJndbTi0xXT49d1tOKzFdP289d1tOKzFdLTE6bz13W04tMV0sdT1vLShOLXgpLWI7Y29uc3Qgaz1vO2Zvcig7bz50JiZ1PnImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChvLHUpOylvLS0sdS0tO2lmKHdbTl09byxTJiZNYXRoLmFicyhOLV8pPD1NJiZvPD12W05dKXJldHVybiBzWzBdPW8sYVswXT11LGs+PXZbTl0mJk08PTE0NDg/dGhpcy5XQUxLVFJBQ0UoXyxoLGMseSx4LGQsbSxiLHYsdyxvLG4scyx1LGksYSxTLGwpOm51bGx9aWYoTTw9MTQ0Nyl7bGV0IE49bmV3IEludDMyQXJyYXkoYy1oKzIpO05bMF09Xy1oKzEsdnQuQ29weTIodixoLE4sMSxjLWgrMSksdGhpcy5tX2ZvcndhcmRIaXN0b3J5LnB1c2goTiksTj1uZXcgSW50MzJBcnJheShtLWQrMiksTlswXT14LWQrMSx2dC5Db3B5Mih3LGQsTiwxLG0tZCsxKSx0aGlzLm1fcmV2ZXJzZUhpc3RvcnkucHVzaChOKX19cmV0dXJuIHRoaXMuV0FMS1RSQUNFKF8saCxjLHkseCxkLG0sYix2LHcsbyxuLHMsdSxpLGEsUyxsKX1QcmV0dGlmeUNoYW5nZXModCl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IHI9dFtuXSxpPW48dC5sZW5ndGgtMT90W24rMV0ub3JpZ2luYWxTdGFydDp0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aCxzPW48dC5sZW5ndGgtMT90W24rMV0ubW9kaWZpZWRTdGFydDp0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aCxhPXIub3JpZ2luYWxMZW5ndGg+MCxsPXIubW9kaWZpZWRMZW5ndGg+MDtmb3IoO3Iub3JpZ2luYWxTdGFydCtyLm9yaWdpbmFsTGVuZ3RoPGkmJnIubW9kaWZpZWRTdGFydCtyLm1vZGlmaWVkTGVuZ3RoPHMmJighYXx8dGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwoci5vcmlnaW5hbFN0YXJ0LHIub3JpZ2luYWxTdGFydCtyLm9yaWdpbmFsTGVuZ3RoKSkmJighbHx8dGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwoci5tb2RpZmllZFN0YXJ0LHIubW9kaWZpZWRTdGFydCtyLm1vZGlmaWVkTGVuZ3RoKSk7KXtjb25zdCB1PXRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbChyLm9yaWdpbmFsU3RhcnQsci5tb2RpZmllZFN0YXJ0KTtpZih0aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoci5vcmlnaW5hbFN0YXJ0K3Iub3JpZ2luYWxMZW5ndGgsci5tb2RpZmllZFN0YXJ0K3IubW9kaWZpZWRMZW5ndGgpJiYhdSlicmVhaztyLm9yaWdpbmFsU3RhcnQrKyxyLm1vZGlmaWVkU3RhcnQrK31jb25zdCBvPVtudWxsXTtpZihuPHQubGVuZ3RoLTEmJnRoaXMuQ2hhbmdlc092ZXJsYXAodFtuXSx0W24rMV0sbykpe3Rbbl09b1swXSx0LnNwbGljZShuKzEsMSksbi0tO2NvbnRpbnVlfX1mb3IobGV0IG49dC5sZW5ndGgtMTtuPj0wO24tLSl7Y29uc3Qgcj10W25dO2xldCBpPTAscz0wO2lmKG4+MCl7Y29uc3QgYz10W24tMV07aT1jLm9yaWdpbmFsU3RhcnQrYy5vcmlnaW5hbExlbmd0aCxzPWMubW9kaWZpZWRTdGFydCtjLm1vZGlmaWVkTGVuZ3RofWNvbnN0IGE9ci5vcmlnaW5hbExlbmd0aD4wLGw9ci5tb2RpZmllZExlbmd0aD4wO2xldCBvPTAsdT10aGlzLl9ib3VuZGFyeVNjb3JlKHIub3JpZ2luYWxTdGFydCxyLm9yaWdpbmFsTGVuZ3RoLHIubW9kaWZpZWRTdGFydCxyLm1vZGlmaWVkTGVuZ3RoKTtmb3IobGV0IGM9MTs7YysrKXtjb25zdCBkPXIub3JpZ2luYWxTdGFydC1jLG09ci5tb2RpZmllZFN0YXJ0LWM7aWYoZDxpfHxtPHN8fGEmJiF0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChkLGQrci5vcmlnaW5hbExlbmd0aCl8fGwmJiF0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChtLG0rci5tb2RpZmllZExlbmd0aCkpYnJlYWs7Y29uc3QgcD0oZD09PWkmJm09PT1zPzU6MCkrdGhpcy5fYm91bmRhcnlTY29yZShkLHIub3JpZ2luYWxMZW5ndGgsbSxyLm1vZGlmaWVkTGVuZ3RoKTtwPnUmJih1PXAsbz1jKX1yLm9yaWdpbmFsU3RhcnQtPW8sci5tb2RpZmllZFN0YXJ0LT1vO2NvbnN0IGg9W251bGxdO2lmKG4+MCYmdGhpcy5DaGFuZ2VzT3ZlcmxhcCh0W24tMV0sdFtuXSxoKSl7dFtuLTFdPWhbMF0sdC5zcGxpY2UobiwxKSxuKys7Y29udGludWV9fWlmKHRoaXMuX2hhc1N0cmluZ3MpZm9yKGxldCBuPTEscj10Lmxlbmd0aDtuPHI7bisrKXtjb25zdCBpPXRbbi0xXSxzPXRbbl0sYT1zLm9yaWdpbmFsU3RhcnQtaS5vcmlnaW5hbFN0YXJ0LWkub3JpZ2luYWxMZW5ndGgsbD1pLm9yaWdpbmFsU3RhcnQsbz1zLm9yaWdpbmFsU3RhcnQrcy5vcmlnaW5hbExlbmd0aCx1PW8tbCxoPWkubW9kaWZpZWRTdGFydCxjPXMubW9kaWZpZWRTdGFydCtzLm1vZGlmaWVkTGVuZ3RoLGQ9Yy1oO2lmKGE8NSYmdTwyMCYmZDwyMCl7Y29uc3QgbT10aGlzLl9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKGwsdSxoLGQsYSk7aWYobSl7Y29uc3RbZyxwXT1tOyhnIT09aS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGh8fHAhPT1pLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aCkmJihpLm9yaWdpbmFsTGVuZ3RoPWctaS5vcmlnaW5hbFN0YXJ0LGkubW9kaWZpZWRMZW5ndGg9cC1pLm1vZGlmaWVkU3RhcnQscy5vcmlnaW5hbFN0YXJ0PWcrYSxzLm1vZGlmaWVkU3RhcnQ9cCthLHMub3JpZ2luYWxMZW5ndGg9by1zLm9yaWdpbmFsU3RhcnQscy5tb2RpZmllZExlbmd0aD1jLXMubW9kaWZpZWRTdGFydCl9fX1yZXR1cm4gdH1fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZSh0LG4scixpLHMpe2lmKG48c3x8aTxzKXJldHVybiBudWxsO2NvbnN0IGE9dCtuLXMrMSxsPXIraS1zKzE7bGV0IG89MCx1PTAsaD0wO2ZvcihsZXQgYz10O2M8YTtjKyspZm9yKGxldCBkPXI7ZDxsO2QrKyl7Y29uc3QgbT10aGlzLl9jb250aWd1b3VzU2VxdWVuY2VTY29yZShjLGQscyk7bT4wJiZtPm8mJihvPW0sdT1jLGg9ZCl9cmV0dXJuIG8+MD9bdSxoXTpudWxsfV9jb250aWd1b3VzU2VxdWVuY2VTY29yZSh0LG4scil7bGV0IGk9MDtmb3IobGV0IHM9MDtzPHI7cysrKXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQrcyxuK3MpKXJldHVybiAwO2krPXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdCtzXS5sZW5ndGh9cmV0dXJuIGl9X09yaWdpbmFsSXNCb3VuZGFyeSh0KXtyZXR1cm4gdDw9MHx8dD49dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMT8hMDp0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XSl9X09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeSh0LG4pe2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeSh0KXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KHQtMSkpcmV0dXJuITA7aWYobj4wKXtjb25zdCByPXQrbjtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoci0xKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KHIpKXJldHVybiEwfXJldHVybiExfV9Nb2RpZmllZElzQm91bmRhcnkodCl7cmV0dXJuIHQ8PTB8fHQ+PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTE/ITA6dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfV9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkodCxuKXtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkodCl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeSh0LTEpKXJldHVybiEwO2lmKG4+MCl7Y29uc3Qgcj10K247aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KHItMSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShyKSlyZXR1cm4hMH1yZXR1cm4hMX1fYm91bmRhcnlTY29yZSh0LG4scixpKXtjb25zdCBzPXRoaXMuX09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeSh0LG4pPzE6MCxhPXRoaXMuX01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeShyLGkpPzE6MDtyZXR1cm4gcythfUNvbmNhdGVuYXRlQ2hhbmdlcyh0LG4pe2NvbnN0IHI9W107aWYodC5sZW5ndGg9PT0wfHxuLmxlbmd0aD09PTApcmV0dXJuIG4ubGVuZ3RoPjA/bjp0O2lmKHRoaXMuQ2hhbmdlc092ZXJsYXAodFt0Lmxlbmd0aC0xXSxuWzBdLHIpKXtjb25zdCBpPW5ldyBBcnJheSh0Lmxlbmd0aCtuLmxlbmd0aC0xKTtyZXR1cm4gdnQuQ29weSh0LDAsaSwwLHQubGVuZ3RoLTEpLGlbdC5sZW5ndGgtMV09clswXSx2dC5Db3B5KG4sMSxpLHQubGVuZ3RoLG4ubGVuZ3RoLTEpLGl9ZWxzZXtjb25zdCBpPW5ldyBBcnJheSh0Lmxlbmd0aCtuLmxlbmd0aCk7cmV0dXJuIHZ0LkNvcHkodCwwLGksMCx0Lmxlbmd0aCksdnQuQ29weShuLDAsaSx0Lmxlbmd0aCxuLmxlbmd0aCksaX19Q2hhbmdlc092ZXJsYXAodCxuLHIpe2lmKGJ0LkFzc2VydCh0Lm9yaWdpbmFsU3RhcnQ8PW4ub3JpZ2luYWxTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSxidC5Bc3NlcnQodC5tb2RpZmllZFN0YXJ0PD1uLm1vZGlmaWVkU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGg+PW4ub3JpZ2luYWxTdGFydHx8dC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGg+PW4ubW9kaWZpZWRTdGFydCl7Y29uc3QgaT10Lm9yaWdpbmFsU3RhcnQ7bGV0IHM9dC5vcmlnaW5hbExlbmd0aDtjb25zdCBhPXQubW9kaWZpZWRTdGFydDtsZXQgbD10Lm1vZGlmaWVkTGVuZ3RoO3JldHVybiB0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aD49bi5vcmlnaW5hbFN0YXJ0JiYocz1uLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aC10Lm9yaWdpbmFsU3RhcnQpLHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoPj1uLm1vZGlmaWVkU3RhcnQmJihsPW4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoLXQubW9kaWZpZWRTdGFydCksclswXT1uZXcgWWUoaSxzLGEsbCksITB9ZWxzZSByZXR1cm4gclswXT1udWxsLCExfUNsaXBEaWFnb25hbEJvdW5kKHQsbixyLGkpe2lmKHQ+PTAmJnQ8aSlyZXR1cm4gdDtjb25zdCBzPXIsYT1pLXItMSxsPW4lMj09PTA7aWYodDwwKXtjb25zdCBvPXMlMj09PTA7cmV0dXJuIGw9PT1vPzA6MX1lbHNle2NvbnN0IG89YSUyPT09MDtyZXR1cm4gbD09PW8/aS0xOmktMn19fWxldCBlZT1jbGFzcyBmdHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGluZU51bWJlcj10LHRoaXMuY29sdW1uPW59d2l0aCh0PXRoaXMubGluZU51bWJlcixuPXRoaXMuY29sdW1uKXtyZXR1cm4gdD09PXRoaXMubGluZU51bWJlciYmbj09PXRoaXMuY29sdW1uP3RoaXM6bmV3IGZ0KHQsbil9ZGVsdGEodD0wLG49MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrdCx0aGlzLmNvbHVtbituKX1lcXVhbHModCl7cmV0dXJuIGZ0LmVxdWFscyh0aGlzLHQpfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4hdCYmIW4/ITA6ISF0JiYhIW4mJnQubGluZU51bWJlcj09PW4ubGluZU51bWJlciYmdC5jb2x1bW49PT1uLmNvbHVtbn1pc0JlZm9yZSh0KXtyZXR1cm4gZnQuaXNCZWZvcmUodGhpcyx0KX1zdGF0aWMgaXNCZWZvcmUodCxuKXtyZXR1cm4gdC5saW5lTnVtYmVyPG4ubGluZU51bWJlcj8hMDpuLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyPyExOnQuY29sdW1uPG4uY29sdW1ufWlzQmVmb3JlT3JFcXVhbCh0KXtyZXR1cm4gZnQuaXNCZWZvcmVPckVxdWFsKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbCh0LG4pe3JldHVybiB0LmxpbmVOdW1iZXI8bi5saW5lTnVtYmVyPyEwOm4ubGluZU51bWJlcjx0LmxpbmVOdW1iZXI/ITE6dC5jb2x1bW48PW4uY29sdW1ufXN0YXRpYyBjb21wYXJlKHQsbil7Y29uc3Qgcj10LmxpbmVOdW1iZXJ8MCxpPW4ubGluZU51bWJlcnwwO2lmKHI9PT1pKXtjb25zdCBzPXQuY29sdW1ufDAsYT1uLmNvbHVtbnwwO3JldHVybiBzLWF9cmV0dXJuIHItaX1jbG9uZSgpe3JldHVybiBuZXcgZnQodGhpcy5saW5lTnVtYmVyLHRoaXMuY29sdW1uKX10b1N0cmluZygpe3JldHVybiIoIit0aGlzLmxpbmVOdW1iZXIrIiwiK3RoaXMuY29sdW1uKyIpIn1zdGF0aWMgbGlmdCh0KXtyZXR1cm4gbmV3IGZ0KHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgdC5saW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuY29sdW1uPT0ibnVtYmVyIn10b0pTT04oKXtyZXR1cm57bGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuY29sdW1ufX19LHo9Y2xhc3MgcmV7Y29uc3RydWN0b3IodCxuLHIsaSl7dD5yfHx0PT09ciYmbj5pPyh0aGlzLnN0YXJ0TGluZU51bWJlcj1yLHRoaXMuc3RhcnRDb2x1bW49aSx0aGlzLmVuZExpbmVOdW1iZXI9dCx0aGlzLmVuZENvbHVtbj1uKToodGhpcy5zdGFydExpbmVOdW1iZXI9dCx0aGlzLnN0YXJ0Q29sdW1uPW4sdGhpcy5lbmRMaW5lTnVtYmVyPXIsdGhpcy5lbmRDb2x1bW49aSl9aXNFbXB0eSgpe3JldHVybiByZS5pc0VtcHR5KHRoaXMpfXN0YXRpYyBpc0VtcHR5KHQpe3JldHVybiB0LnN0YXJ0TGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmdC5zdGFydENvbHVtbj09PXQuZW5kQ29sdW1ufWNvbnRhaW5zUG9zaXRpb24odCl7cmV0dXJuIHJlLmNvbnRhaW5zUG9zaXRpb24odGhpcyx0KX1zdGF0aWMgY29udGFpbnNQb3NpdGlvbih0LG4pe3JldHVybiEobi5saW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5jb2x1bW48dC5zdGFydENvbHVtbnx8bi5saW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmNvbHVtbj50LmVuZENvbHVtbil9c3RhdGljIHN0cmljdENvbnRhaW5zUG9zaXRpb24odCxuKXtyZXR1cm4hKG4ubGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5saW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5saW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uY29sdW1uPD10LnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uY29sdW1uPj10LmVuZENvbHVtbil9Y29udGFpbnNSYW5nZSh0KXtyZXR1cm4gcmUuY29udGFpbnNSYW5nZSh0aGlzLHQpfXN0YXRpYyBjb250YWluc1JhbmdlKHQsbil7cmV0dXJuIShuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLnN0YXJ0TGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uc3RhcnRDb2x1bW48dC5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbj50LmVuZENvbHVtbil9c3RyaWN0Q29udGFpbnNSYW5nZSh0KXtyZXR1cm4gcmUuc3RyaWN0Q29udGFpbnNSYW5nZSh0aGlzLHQpfXN0YXRpYyBzdHJpY3RDb250YWluc1JhbmdlKHQsbil7cmV0dXJuIShuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLnN0YXJ0TGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uc3RhcnRDb2x1bW48PXQuc3RhcnRDb2x1bW58fG4uZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmbi5lbmRDb2x1bW4+PXQuZW5kQ29sdW1uKX1wbHVzUmFuZ2UodCl7cmV0dXJuIHJlLnBsdXNSYW5nZSh0aGlzLHQpfXN0YXRpYyBwbHVzUmFuZ2UodCxuKXtsZXQgcixpLHMsYTtyZXR1cm4gbi5zdGFydExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXI/KHI9bi5zdGFydExpbmVOdW1iZXIsaT1uLnN0YXJ0Q29sdW1uKTpuLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyPyhyPW4uc3RhcnRMaW5lTnVtYmVyLGk9TWF0aC5taW4obi5zdGFydENvbHVtbix0LnN0YXJ0Q29sdW1uKSk6KHI9dC5zdGFydExpbmVOdW1iZXIsaT10LnN0YXJ0Q29sdW1uKSxuLmVuZExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyPyhzPW4uZW5kTGluZU51bWJlcixhPW4uZW5kQ29sdW1uKTpuLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXI/KHM9bi5lbmRMaW5lTnVtYmVyLGE9TWF0aC5tYXgobi5lbmRDb2x1bW4sdC5lbmRDb2x1bW4pKToocz10LmVuZExpbmVOdW1iZXIsYT10LmVuZENvbHVtbiksbmV3IHJlKHIsaSxzLGEpfWludGVyc2VjdFJhbmdlcyh0KXtyZXR1cm4gcmUuaW50ZXJzZWN0UmFuZ2VzKHRoaXMsdCl9c3RhdGljIGludGVyc2VjdFJhbmdlcyh0LG4pe2xldCByPXQuc3RhcnRMaW5lTnVtYmVyLGk9dC5zdGFydENvbHVtbixzPXQuZW5kTGluZU51bWJlcixhPXQuZW5kQ29sdW1uO2NvbnN0IGw9bi5zdGFydExpbmVOdW1iZXIsbz1uLnN0YXJ0Q29sdW1uLHU9bi5lbmRMaW5lTnVtYmVyLGg9bi5lbmRDb2x1bW47cmV0dXJuIHI8bD8ocj1sLGk9byk6cj09PWwmJihpPU1hdGgubWF4KGksbykpLHM+dT8ocz11LGE9aCk6cz09PXUmJihhPU1hdGgubWluKGEsaCkpLHI+c3x8cj09PXMmJmk+YT9udWxsOm5ldyByZShyLGkscyxhKX1lcXVhbHNSYW5nZSh0KXtyZXR1cm4gcmUuZXF1YWxzUmFuZ2UodGhpcyx0KX1zdGF0aWMgZXF1YWxzUmFuZ2UodCxuKXtyZXR1cm4hdCYmIW4/ITA6ISF0JiYhIW4mJnQuc3RhcnRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW49PT1uLnN0YXJ0Q29sdW1uJiZ0LmVuZExpbmVOdW1iZXI9PT1uLmVuZExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPT09bi5lbmRDb2x1bW59Z2V0RW5kUG9zaXRpb24oKXtyZXR1cm4gcmUuZ2V0RW5kUG9zaXRpb24odGhpcyl9c3RhdGljIGdldEVuZFBvc2l0aW9uKHQpe3JldHVybiBuZXcgZWUodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKX1nZXRTdGFydFBvc2l0aW9uKCl7cmV0dXJuIHJlLmdldFN0YXJ0UG9zaXRpb24odGhpcyl9c3RhdGljIGdldFN0YXJ0UG9zaXRpb24odCl7cmV0dXJuIG5ldyBlZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKX10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zdGFydENvbHVtbisiIC0+ICIrdGhpcy5lbmRMaW5lTnVtYmVyKyIsIit0aGlzLmVuZENvbHVtbisiXSJ9c2V0RW5kUG9zaXRpb24odCxuKXtyZXR1cm4gbmV3IHJlKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sdCxuKX1zZXRTdGFydFBvc2l0aW9uKHQsbil7cmV0dXJuIG5ldyByZSh0LG4sdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKX1jb2xsYXBzZVRvU3RhcnQoKXtyZXR1cm4gcmUuY29sbGFwc2VUb1N0YXJ0KHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvU3RhcnQodCl7cmV0dXJuIG5ldyByZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfWNvbGxhcHNlVG9FbmQoKXtyZXR1cm4gcmUuY29sbGFwc2VUb0VuZCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb0VuZCh0KXtyZXR1cm4gbmV3IHJlKHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbix0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pfWRlbHRhKHQpe3JldHVybiBuZXcgcmUodGhpcy5zdGFydExpbmVOdW1iZXIrdCx0aGlzLnN0YXJ0Q29sdW1uLHRoaXMuZW5kTGluZU51bWJlcit0LHRoaXMuZW5kQ29sdW1uKX1zdGF0aWMgZnJvbVBvc2l0aW9ucyh0LG49dCl7cmV0dXJuIG5ldyByZSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4sbi5saW5lTnVtYmVyLG4uY29sdW1uKX1zdGF0aWMgbGlmdCh0KXtyZXR1cm4gdD9uZXcgcmUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pOm51bGx9c3RhdGljIGlzSVJhbmdlKHQpe3JldHVybiB0JiZ0eXBlb2YgdC5zdGFydExpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5zdGFydENvbHVtbj09Im51bWJlciImJnR5cGVvZiB0LmVuZExpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5lbmRDb2x1bW49PSJudW1iZXIifXN0YXRpYyBhcmVJbnRlcnNlY3RpbmdPclRvdWNoaW5nKHQsbil7cmV0dXJuISh0LmVuZExpbmVOdW1iZXI8bi5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PW4uc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjxuLnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbjx0LnN0YXJ0Q29sdW1uKX1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nKHQsbil7cmV0dXJuISh0LmVuZExpbmVOdW1iZXI8bi5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PW4uc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjw9bi5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5lbmRDb2x1bW48PXQuc3RhcnRDb2x1bW4pfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdTdGFydHModCxuKXtpZih0JiZuKXtjb25zdCBzPXQuc3RhcnRMaW5lTnVtYmVyfDAsYT1uLnN0YXJ0TGluZU51bWJlcnwwO2lmKHM9PT1hKXtjb25zdCBsPXQuc3RhcnRDb2x1bW58MCxvPW4uc3RhcnRDb2x1bW58MDtpZihsPT09byl7Y29uc3QgdT10LmVuZExpbmVOdW1iZXJ8MCxoPW4uZW5kTGluZU51bWJlcnwwO2lmKHU9PT1oKXtjb25zdCBjPXQuZW5kQ29sdW1ufDAsZD1uLmVuZENvbHVtbnwwO3JldHVybiBjLWR9cmV0dXJuIHUtaH1yZXR1cm4gbC1vfXJldHVybiBzLWF9cmV0dXJuKHQ/MTowKS0obj8xOjApfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdFbmRzKHQsbil7cmV0dXJuIHQuZW5kTGluZU51bWJlcj09PW4uZW5kTGluZU51bWJlcj90LmVuZENvbHVtbj09PW4uZW5kQ29sdW1uP3Quc3RhcnRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXI/dC5zdGFydENvbHVtbi1uLnN0YXJ0Q29sdW1uOnQuc3RhcnRMaW5lTnVtYmVyLW4uc3RhcnRMaW5lTnVtYmVyOnQuZW5kQ29sdW1uLW4uZW5kQ29sdW1uOnQuZW5kTGluZU51bWJlci1uLmVuZExpbmVOdW1iZXJ9c3RhdGljIHNwYW5zTXVsdGlwbGVMaW5lcyh0KXtyZXR1cm4gdC5lbmRMaW5lTnVtYmVyPnQuc3RhcnRMaW5lTnVtYmVyfXRvSlNPTigpe3JldHVybiB0aGlzfX07ZnVuY3Rpb24gT2koZSl7cmV0dXJuIGU8MD8wOmU+MjU1PzI1NTplfDB9ZnVuY3Rpb24geHQoZSl7cmV0dXJuIGU8MD8wOmU+NDI5NDk2NzI5NT80Mjk0OTY3Mjk1OmV8MH1jbGFzcyBkcntjb25zdHJ1Y3Rvcih0KXtjb25zdCBuPU9pKHQpO3RoaXMuX2RlZmF1bHRWYWx1ZT1uLHRoaXMuX2FzY2lpTWFwPWRyLl9jcmVhdGVBc2NpaU1hcChuKSx0aGlzLl9tYXA9bmV3IE1hcH1zdGF0aWMgX2NyZWF0ZUFzY2lpTWFwKHQpe2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoMjU2KTtyZXR1cm4gbi5maWxsKHQpLG59c2V0KHQsbil7Y29uc3Qgcj1PaShuKTt0Pj0wJiZ0PDI1Nj90aGlzLl9hc2NpaU1hcFt0XT1yOnRoaXMuX21hcC5zZXQodCxyKX1nZXQodCl7cmV0dXJuIHQ+PTAmJnQ8MjU2P3RoaXMuX2FzY2lpTWFwW3RdOnRoaXMuX21hcC5nZXQodCl8fHRoaXMuX2RlZmF1bHRWYWx1ZX1jbGVhcigpe3RoaXMuX2FzY2lpTWFwLmZpbGwodGhpcy5fZGVmYXVsdFZhbHVlKSx0aGlzLl9tYXAuY2xlYXIoKX19Y2xhc3MgbHV7Y29uc3RydWN0b3IodCxuLHIpe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkodCpuKTtmb3IobGV0IHM9MCxhPXQqbjtzPGE7cysrKWlbc109cjt0aGlzLl9kYXRhPWksdGhpcy5yb3dzPXQsdGhpcy5jb2xzPW59Z2V0KHQsbil7cmV0dXJuIHRoaXMuX2RhdGFbdCp0aGlzLmNvbHMrbl19c2V0KHQsbixyKXt0aGlzLl9kYXRhW3QqdGhpcy5jb2xzK25dPXJ9fWNsYXNzIHV1e2NvbnN0cnVjdG9yKHQpe2xldCBuPTAscj0wO2ZvcihsZXQgcz0wLGE9dC5sZW5ndGg7czxhO3MrKyl7Y29uc3RbbCxvLHVdPXRbc107bz5uJiYobj1vKSxsPnImJihyPWwpLHU+ciYmKHI9dSl9bisrLHIrKztjb25zdCBpPW5ldyBsdShyLG4sMCk7Zm9yKGxldCBzPTAsYT10Lmxlbmd0aDtzPGE7cysrKXtjb25zdFtsLG8sdV09dFtzXTtpLnNldChsLG8sdSl9dGhpcy5fc3RhdGVzPWksdGhpcy5fbWF4Q2hhckNvZGU9bn1uZXh0U3RhdGUodCxuKXtyZXR1cm4gbjwwfHxuPj10aGlzLl9tYXhDaGFyQ29kZT8wOnRoaXMuX3N0YXRlcy5nZXQodCxuKX19bGV0IG1yPW51bGw7ZnVuY3Rpb24gY3UoKXtyZXR1cm4gbXI9PT1udWxsJiYobXI9bmV3IHV1KFtbMSwxMDQsMl0sWzEsNzIsMl0sWzEsMTAyLDZdLFsxLDcwLDZdLFsyLDExNiwzXSxbMiw4NCwzXSxbMywxMTYsNF0sWzMsODQsNF0sWzQsMTEyLDVdLFs0LDgwLDVdLFs1LDExNSw5XSxbNSw4Myw5XSxbNSw1OCwxMF0sWzYsMTA1LDddLFs2LDczLDddLFs3LDEwOCw4XSxbNyw3Niw4XSxbOCwxMDEsOV0sWzgsNjksOV0sWzksNTgsMTBdLFsxMCw0NywxMV0sWzExLDQ3LDEyXV0pKSxtcn1sZXQganQ9bnVsbDtmdW5jdGlvbiBmdSgpe2lmKGp0PT09bnVsbCl7anQ9bmV3IGRyKDApO2NvbnN0IGU9YCAJPD4nIuOAgeOAgu+9oe+9pO+8jO+8ju+8mu+8m+KAmOOAiOOAjOOAjuOAlO+8iO+8u++9m++9ou+9o++9ne+8ve+8ieOAleOAj+OAjeOAieKAme+9gO+9nuKApmA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspanQuc2V0KGUuY2hhckNvZGVBdChuKSwxKTtjb25zdCB0PSIuLDs6Ijtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylqdC5zZXQodC5jaGFyQ29kZUF0KG4pLDIpfXJldHVybiBqdH1jbGFzcyBwbntzdGF0aWMgX2NyZWF0ZUxpbmsodCxuLHIsaSxzKXtsZXQgYT1zLTE7ZG97Y29uc3QgbD1uLmNoYXJDb2RlQXQoYSk7aWYodC5nZXQobCkhPT0yKWJyZWFrO2EtLX13aGlsZShhPmkpO2lmKGk+MCl7Y29uc3QgbD1uLmNoYXJDb2RlQXQoaS0xKSxvPW4uY2hhckNvZGVBdChhKTsobD09PTQwJiZvPT09NDF8fGw9PT05MSYmbz09PTkzfHxsPT09MTIzJiZvPT09MTI1KSYmYS0tfXJldHVybntyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnIsc3RhcnRDb2x1bW46aSsxLGVuZExpbmVOdW1iZXI6cixlbmRDb2x1bW46YSsyfSx1cmw6bi5zdWJzdHJpbmcoaSxhKzEpfX1zdGF0aWMgY29tcHV0ZUxpbmtzKHQsbj1jdSgpKXtjb25zdCByPWZ1KCksaT1bXTtmb3IobGV0IHM9MSxhPXQuZ2V0TGluZUNvdW50KCk7czw9YTtzKyspe2NvbnN0IGw9dC5nZXRMaW5lQ29udGVudChzKSxvPWwubGVuZ3RoO2xldCB1PTAsaD0wLGM9MCxkPTEsbT0hMSxnPSExLHA9ITEsdj0hMTtmb3IoO3U8bzspe2xldCB3PSExO2NvbnN0IF89bC5jaGFyQ29kZUF0KHUpO2lmKGQ9PT0xMyl7bGV0IHg7c3dpdGNoKF8pe2Nhc2UgNDA6bT0hMCx4PTA7YnJlYWs7Y2FzZSA0MTp4PW0/MDoxO2JyZWFrO2Nhc2UgOTE6cD0hMCxnPSEwLHg9MDticmVhaztjYXNlIDkzOnA9ITEseD1nPzA6MTticmVhaztjYXNlIDEyMzp2PSEwLHg9MDticmVhaztjYXNlIDEyNTp4PXY/MDoxO2JyZWFrO2Nhc2UgMzk6Y2FzZSAzNDpjYXNlIDk2OmM9PT1fP3g9MTpjPT09Mzl8fGM9PT0zNHx8Yz09PTk2P3g9MDp4PTE7YnJlYWs7Y2FzZSA0Mjp4PWM9PT00Mj8xOjA7YnJlYWs7Y2FzZSAxMjQ6eD1jPT09MTI0PzE6MDticmVhaztjYXNlIDMyOng9cD8wOjE7YnJlYWs7ZGVmYXVsdDp4PXIuZ2V0KF8pfXg9PT0xJiYoaS5wdXNoKHBuLl9jcmVhdGVMaW5rKHIsbCxzLGgsdSkpLHc9ITApfWVsc2UgaWYoZD09PTEyKXtsZXQgeDtfPT09OTE/KGc9ITAseD0wKTp4PXIuZ2V0KF8pLHg9PT0xP3c9ITA6ZD0xM31lbHNlIGQ9bi5uZXh0U3RhdGUoZCxfKSxkPT09MCYmKHc9ITApO3cmJihkPTEsbT0hMSxnPSExLHY9ITEsaD11KzEsYz1fKSx1Kyt9ZD09PTEzJiZpLnB1c2gocG4uX2NyZWF0ZUxpbmsocixsLHMsaCxvKSl9cmV0dXJuIGl9fWZ1bmN0aW9uIGh1KGUpe3JldHVybiFlfHx0eXBlb2YgZS5nZXRMaW5lQ291bnQhPSJmdW5jdGlvbiJ8fHR5cGVvZiBlLmdldExpbmVDb250ZW50IT0iZnVuY3Rpb24iP1tdOnBuLmNvbXB1dGVMaW5rcyhlKX1jb25zdCBCbj1jbGFzcyBCbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWYWx1ZVNldD1bWyJ0cnVlIiwiZmFsc2UiXSxbIlRydWUiLCJGYWxzZSJdLFsiUHJpdmF0ZSIsIlB1YmxpYyIsIkZyaWVuZCIsIlJlYWRPbmx5IiwiUGFydGlhbCIsIlByb3RlY3RlZCIsIldyaXRlT25seSJdLFsicHVibGljIiwicHJvdGVjdGVkIiwicHJpdmF0ZSJdXX1uYXZpZ2F0ZVZhbHVlU2V0KHQsbixyLGkscyl7aWYodCYmbil7Y29uc3QgYT10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChuLHMpO2lmKGEpcmV0dXJue3JhbmdlOnQsdmFsdWU6YX19aWYociYmaSl7Y29uc3QgYT10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChpLHMpO2lmKGEpcmV0dXJue3JhbmdlOnIsdmFsdWU6YX19cmV0dXJuIG51bGx9ZG9OYXZpZ2F0ZVZhbHVlU2V0KHQsbil7Y29uc3Qgcj10aGlzLm51bWJlclJlcGxhY2UodCxuKTtyZXR1cm4gciE9PW51bGw/cjp0aGlzLnRleHRSZXBsYWNlKHQsbil9bnVtYmVyUmVwbGFjZSh0LG4pe2NvbnN0IHI9TWF0aC5wb3coMTAsdC5sZW5ndGgtKHQubGFzdEluZGV4T2YoIi4iKSsxKSk7bGV0IGk9TnVtYmVyKHQpO2NvbnN0IHM9cGFyc2VGbG9hdCh0KTtyZXR1cm4haXNOYU4oaSkmJiFpc05hTihzKSYmaT09PXM/aT09PTAmJiFuP251bGw6KGk9TWF0aC5mbG9vcihpKnIpLGkrPW4/cjotcixTdHJpbmcoaS9yKSk6bnVsbH10ZXh0UmVwbGFjZSh0LG4pe3JldHVybiB0aGlzLnZhbHVlU2V0c1JlcGxhY2UodGhpcy5fZGVmYXVsdFZhbHVlU2V0LHQsbil9dmFsdWVTZXRzUmVwbGFjZSh0LG4scil7bGV0IGk9bnVsbDtmb3IobGV0IHM9MCxhPXQubGVuZ3RoO2k9PT1udWxsJiZzPGE7cysrKWk9dGhpcy52YWx1ZVNldFJlcGxhY2UodFtzXSxuLHIpO3JldHVybiBpfXZhbHVlU2V0UmVwbGFjZSh0LG4scil7bGV0IGk9dC5pbmRleE9mKG4pO3JldHVybiBpPj0wPyhpKz1yPzE6LTEsaTwwP2k9dC5sZW5ndGgtMTppJT10Lmxlbmd0aCx0W2ldKTpudWxsfX07Qm4uSU5TVEFOQ0U9bmV3IEJuO2xldCBncj1Cbjtjb25zdCAkaT1PYmplY3QuZnJlZXplKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1zZXRUaW1lb3V0KGUuYmluZCh0KSwwKTtyZXR1cm57ZGlzcG9zZSgpe2NsZWFyVGltZW91dChuKX19fSk7dmFyIGJuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybiBuPT09ZS5Ob25lfHxuPT09ZS5DYW5jZWxsZWR8fG4gaW5zdGFuY2VvZiB2bj8hMDohbnx8dHlwZW9mIG4hPSJvYmplY3QiPyExOnR5cGVvZiBuLmlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkPT0iYm9vbGVhbiImJnR5cGVvZiBuLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkPT0iZnVuY3Rpb24ifWUuaXNDYW5jZWxsYXRpb25Ub2tlbj10LGUuTm9uZT1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMSxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpjbi5Ob25lfSksZS5DYW5jZWxsZWQ9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITAsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6JGl9KX0pKGJufHwoYm49e30pKTtjbGFzcyB2bntjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExLHRoaXMuX2VtaXR0ZXI9bnVsbH1jYW5jZWwoKXt0aGlzLl9pc0NhbmNlbGxlZHx8KHRoaXMuX2lzQ2FuY2VsbGVkPSEwLHRoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmZpcmUodm9pZCAwKSx0aGlzLmRpc3Bvc2UoKSkpfWdldCBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZH1nZXQgb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ/JGk6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyBfZSksdGhpcy5fZW1pdHRlci5ldmVudCl9ZGlzcG9zZSgpe3RoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmRpc3Bvc2UoKSx0aGlzLl9lbWl0dGVyPW51bGwpfX1jbGFzcyBkdXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl90b2tlbj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXQmJnQub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQodGhpcy5jYW5jZWwsdGhpcyl9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3IHZuKSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIHZuJiZ0aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1ibi5DYW5jZWxsZWR9ZGlzcG9zZSh0PSExKXt0JiZ0aGlzLmNhbmNlbCgpLHRoaXMuX3BhcmVudExpc3RlbmVyPy5kaXNwb3NlKCksdGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiB2biYmdGhpcy5fdG9rZW4uZGlzcG9zZSgpOnRoaXMuX3Rva2VuPWJuLk5vbmV9fWNsYXNzIHBye2NvbnN0cnVjdG9yKCl7dGhpcy5fa2V5Q29kZVRvU3RyPVtdLHRoaXMuX3N0clRvS2V5Q29kZT1PYmplY3QuY3JlYXRlKG51bGwpfWRlZmluZSh0LG4pe3RoaXMuX2tleUNvZGVUb1N0clt0XT1uLHRoaXMuX3N0clRvS2V5Q29kZVtuLnRvTG93ZXJDYXNlKCldPXR9a2V5Q29kZVRvU3RyKHQpe3JldHVybiB0aGlzLl9rZXlDb2RlVG9TdHJbdF19c3RyVG9LZXlDb2RlKHQpe3JldHVybiB0aGlzLl9zdHJUb0tleUNvZGVbdC50b0xvd2VyQ2FzZSgpXXx8MH19Y29uc3QgeG49bmV3IHByLGJyPW5ldyBwcix2cj1uZXcgcHIsbXU9bmV3IEFycmF5KDIzMCksZ3U9T2JqZWN0LmNyZWF0ZShudWxsKSxwdT1PYmplY3QuY3JlYXRlKG51bGwpOyhmdW5jdGlvbigpe2NvbnN0IGU9IiIsdD1bWzEsMCwiTm9uZSIsMCwidW5rbm93biIsMCwiVktfVU5LTk9XTiIsZSxlXSxbMSwxLCJIeXBlciIsMCxlLDAsZSxlLGVdLFsxLDIsIlN1cGVyIiwwLGUsMCxlLGUsZV0sWzEsMywiRm4iLDAsZSwwLGUsZSxlXSxbMSw0LCJGbkxvY2siLDAsZSwwLGUsZSxlXSxbMSw1LCJTdXNwZW5kIiwwLGUsMCxlLGUsZV0sWzEsNiwiUmVzdW1lIiwwLGUsMCxlLGUsZV0sWzEsNywiVHVyYm8iLDAsZSwwLGUsZSxlXSxbMSw4LCJTbGVlcCIsMCxlLDAsIlZLX1NMRUVQIixlLGVdLFsxLDksIldha2VVcCIsMCxlLDAsZSxlLGVdLFswLDEwLCJLZXlBIiwzMSwiQSIsNjUsIlZLX0EiLGUsZV0sWzAsMTEsIktleUIiLDMyLCJCIiw2NiwiVktfQiIsZSxlXSxbMCwxMiwiS2V5QyIsMzMsIkMiLDY3LCJWS19DIixlLGVdLFswLDEzLCJLZXlEIiwzNCwiRCIsNjgsIlZLX0QiLGUsZV0sWzAsMTQsIktleUUiLDM1LCJFIiw2OSwiVktfRSIsZSxlXSxbMCwxNSwiS2V5RiIsMzYsIkYiLDcwLCJWS19GIixlLGVdLFswLDE2LCJLZXlHIiwzNywiRyIsNzEsIlZLX0ciLGUsZV0sWzAsMTcsIktleUgiLDM4LCJIIiw3MiwiVktfSCIsZSxlXSxbMCwxOCwiS2V5SSIsMzksIkkiLDczLCJWS19JIixlLGVdLFswLDE5LCJLZXlKIiw0MCwiSiIsNzQsIlZLX0oiLGUsZV0sWzAsMjAsIktleUsiLDQxLCJLIiw3NSwiVktfSyIsZSxlXSxbMCwyMSwiS2V5TCIsNDIsIkwiLDc2LCJWS19MIixlLGVdLFswLDIyLCJLZXlNIiw0MywiTSIsNzcsIlZLX00iLGUsZV0sWzAsMjMsIktleU4iLDQ0LCJOIiw3OCwiVktfTiIsZSxlXSxbMCwyNCwiS2V5TyIsNDUsIk8iLDc5LCJWS19PIixlLGVdLFswLDI1LCJLZXlQIiw0NiwiUCIsODAsIlZLX1AiLGUsZV0sWzAsMjYsIktleVEiLDQ3LCJRIiw4MSwiVktfUSIsZSxlXSxbMCwyNywiS2V5UiIsNDgsIlIiLDgyLCJWS19SIixlLGVdLFswLDI4LCJLZXlTIiw0OSwiUyIsODMsIlZLX1MiLGUsZV0sWzAsMjksIktleVQiLDUwLCJUIiw4NCwiVktfVCIsZSxlXSxbMCwzMCwiS2V5VSIsNTEsIlUiLDg1LCJWS19VIixlLGVdLFswLDMxLCJLZXlWIiw1MiwiViIsODYsIlZLX1YiLGUsZV0sWzAsMzIsIktleVciLDUzLCJXIiw4NywiVktfVyIsZSxlXSxbMCwzMywiS2V5WCIsNTQsIlgiLDg4LCJWS19YIixlLGVdLFswLDM0LCJLZXlZIiw1NSwiWSIsODksIlZLX1kiLGUsZV0sWzAsMzUsIktleVoiLDU2LCJaIiw5MCwiVktfWiIsZSxlXSxbMCwzNiwiRGlnaXQxIiwyMiwiMSIsNDksIlZLXzEiLGUsZV0sWzAsMzcsIkRpZ2l0MiIsMjMsIjIiLDUwLCJWS18yIixlLGVdLFswLDM4LCJEaWdpdDMiLDI0LCIzIiw1MSwiVktfMyIsZSxlXSxbMCwzOSwiRGlnaXQ0IiwyNSwiNCIsNTIsIlZLXzQiLGUsZV0sWzAsNDAsIkRpZ2l0NSIsMjYsIjUiLDUzLCJWS181IixlLGVdLFswLDQxLCJEaWdpdDYiLDI3LCI2Iiw1NCwiVktfNiIsZSxlXSxbMCw0MiwiRGlnaXQ3IiwyOCwiNyIsNTUsIlZLXzciLGUsZV0sWzAsNDMsIkRpZ2l0OCIsMjksIjgiLDU2LCJWS184IixlLGVdLFswLDQ0LCJEaWdpdDkiLDMwLCI5Iiw1NywiVktfOSIsZSxlXSxbMCw0NSwiRGlnaXQwIiwyMSwiMCIsNDgsIlZLXzAiLGUsZV0sWzEsNDYsIkVudGVyIiwzLCJFbnRlciIsMTMsIlZLX1JFVFVSTiIsZSxlXSxbMSw0NywiRXNjYXBlIiw5LCJFc2NhcGUiLDI3LCJWS19FU0NBUEUiLGUsZV0sWzEsNDgsIkJhY2tzcGFjZSIsMSwiQmFja3NwYWNlIiw4LCJWS19CQUNLIixlLGVdLFsxLDQ5LCJUYWIiLDIsIlRhYiIsOSwiVktfVEFCIixlLGVdLFsxLDUwLCJTcGFjZSIsMTAsIlNwYWNlIiwzMiwiVktfU1BBQ0UiLGUsZV0sWzAsNTEsIk1pbnVzIiw4OCwiLSIsMTg5LCJWS19PRU1fTUlOVVMiLCItIiwiT0VNX01JTlVTIl0sWzAsNTIsIkVxdWFsIiw4NiwiPSIsMTg3LCJWS19PRU1fUExVUyIsIj0iLCJPRU1fUExVUyJdLFswLDUzLCJCcmFja2V0TGVmdCIsOTIsIlsiLDIxOSwiVktfT0VNXzQiLCJbIiwiT0VNXzQiXSxbMCw1NCwiQnJhY2tldFJpZ2h0Iiw5NCwiXSIsMjIxLCJWS19PRU1fNiIsIl0iLCJPRU1fNiJdLFswLDU1LCJCYWNrc2xhc2giLDkzLCJcXCIsMjIwLCJWS19PRU1fNSIsIlxcIiwiT0VNXzUiXSxbMCw1NiwiSW50bEhhc2giLDAsZSwwLGUsZSxlXSxbMCw1NywiU2VtaWNvbG9uIiw4NSwiOyIsMTg2LCJWS19PRU1fMSIsIjsiLCJPRU1fMSJdLFswLDU4LCJRdW90ZSIsOTUsIiciLDIyMiwiVktfT0VNXzciLCInIiwiT0VNXzciXSxbMCw1OSwiQmFja3F1b3RlIiw5MSwiYCIsMTkyLCJWS19PRU1fMyIsImAiLCJPRU1fMyJdLFswLDYwLCJDb21tYSIsODcsIiwiLDE4OCwiVktfT0VNX0NPTU1BIiwiLCIsIk9FTV9DT01NQSJdLFswLDYxLCJQZXJpb2QiLDg5LCIuIiwxOTAsIlZLX09FTV9QRVJJT0QiLCIuIiwiT0VNX1BFUklPRCJdLFswLDYyLCJTbGFzaCIsOTAsIi8iLDE5MSwiVktfT0VNXzIiLCIvIiwiT0VNXzIiXSxbMSw2MywiQ2Fwc0xvY2siLDgsIkNhcHNMb2NrIiwyMCwiVktfQ0FQSVRBTCIsZSxlXSxbMSw2NCwiRjEiLDU5LCJGMSIsMTEyLCJWS19GMSIsZSxlXSxbMSw2NSwiRjIiLDYwLCJGMiIsMTEzLCJWS19GMiIsZSxlXSxbMSw2NiwiRjMiLDYxLCJGMyIsMTE0LCJWS19GMyIsZSxlXSxbMSw2NywiRjQiLDYyLCJGNCIsMTE1LCJWS19GNCIsZSxlXSxbMSw2OCwiRjUiLDYzLCJGNSIsMTE2LCJWS19GNSIsZSxlXSxbMSw2OSwiRjYiLDY0LCJGNiIsMTE3LCJWS19GNiIsZSxlXSxbMSw3MCwiRjciLDY1LCJGNyIsMTE4LCJWS19GNyIsZSxlXSxbMSw3MSwiRjgiLDY2LCJGOCIsMTE5LCJWS19GOCIsZSxlXSxbMSw3MiwiRjkiLDY3LCJGOSIsMTIwLCJWS19GOSIsZSxlXSxbMSw3MywiRjEwIiw2OCwiRjEwIiwxMjEsIlZLX0YxMCIsZSxlXSxbMSw3NCwiRjExIiw2OSwiRjExIiwxMjIsIlZLX0YxMSIsZSxlXSxbMSw3NSwiRjEyIiw3MCwiRjEyIiwxMjMsIlZLX0YxMiIsZSxlXSxbMSw3NiwiUHJpbnRTY3JlZW4iLDAsZSwwLGUsZSxlXSxbMSw3NywiU2Nyb2xsTG9jayIsODQsIlNjcm9sbExvY2siLDE0NSwiVktfU0NST0xMIixlLGVdLFsxLDc4LCJQYXVzZSIsNywiUGF1c2VCcmVhayIsMTksIlZLX1BBVVNFIixlLGVdLFsxLDc5LCJJbnNlcnQiLDE5LCJJbnNlcnQiLDQ1LCJWS19JTlNFUlQiLGUsZV0sWzEsODAsIkhvbWUiLDE0LCJIb21lIiwzNiwiVktfSE9NRSIsZSxlXSxbMSw4MSwiUGFnZVVwIiwxMSwiUGFnZVVwIiwzMywiVktfUFJJT1IiLGUsZV0sWzEsODIsIkRlbGV0ZSIsMjAsIkRlbGV0ZSIsNDYsIlZLX0RFTEVURSIsZSxlXSxbMSw4MywiRW5kIiwxMywiRW5kIiwzNSwiVktfRU5EIixlLGVdLFsxLDg0LCJQYWdlRG93biIsMTIsIlBhZ2VEb3duIiwzNCwiVktfTkVYVCIsZSxlXSxbMSw4NSwiQXJyb3dSaWdodCIsMTcsIlJpZ2h0QXJyb3ciLDM5LCJWS19SSUdIVCIsIlJpZ2h0IixlXSxbMSw4NiwiQXJyb3dMZWZ0IiwxNSwiTGVmdEFycm93IiwzNywiVktfTEVGVCIsIkxlZnQiLGVdLFsxLDg3LCJBcnJvd0Rvd24iLDE4LCJEb3duQXJyb3ciLDQwLCJWS19ET1dOIiwiRG93biIsZV0sWzEsODgsIkFycm93VXAiLDE2LCJVcEFycm93IiwzOCwiVktfVVAiLCJVcCIsZV0sWzEsODksIk51bUxvY2siLDgzLCJOdW1Mb2NrIiwxNDQsIlZLX05VTUxPQ0siLGUsZV0sWzEsOTAsIk51bXBhZERpdmlkZSIsMTEzLCJOdW1QYWRfRGl2aWRlIiwxMTEsIlZLX0RJVklERSIsZSxlXSxbMSw5MSwiTnVtcGFkTXVsdGlwbHkiLDEwOCwiTnVtUGFkX011bHRpcGx5IiwxMDYsIlZLX01VTFRJUExZIixlLGVdLFsxLDkyLCJOdW1wYWRTdWJ0cmFjdCIsMTExLCJOdW1QYWRfU3VidHJhY3QiLDEwOSwiVktfU1VCVFJBQ1QiLGUsZV0sWzEsOTMsIk51bXBhZEFkZCIsMTA5LCJOdW1QYWRfQWRkIiwxMDcsIlZLX0FERCIsZSxlXSxbMSw5NCwiTnVtcGFkRW50ZXIiLDMsZSwwLGUsZSxlXSxbMSw5NSwiTnVtcGFkMSIsOTksIk51bVBhZDEiLDk3LCJWS19OVU1QQUQxIixlLGVdLFsxLDk2LCJOdW1wYWQyIiwxMDAsIk51bVBhZDIiLDk4LCJWS19OVU1QQUQyIixlLGVdLFsxLDk3LCJOdW1wYWQzIiwxMDEsIk51bVBhZDMiLDk5LCJWS19OVU1QQUQzIixlLGVdLFsxLDk4LCJOdW1wYWQ0IiwxMDIsIk51bVBhZDQiLDEwMCwiVktfTlVNUEFENCIsZSxlXSxbMSw5OSwiTnVtcGFkNSIsMTAzLCJOdW1QYWQ1IiwxMDEsIlZLX05VTVBBRDUiLGUsZV0sWzEsMTAwLCJOdW1wYWQ2IiwxMDQsIk51bVBhZDYiLDEwMiwiVktfTlVNUEFENiIsZSxlXSxbMSwxMDEsIk51bXBhZDciLDEwNSwiTnVtUGFkNyIsMTAzLCJWS19OVU1QQUQ3IixlLGVdLFsxLDEwMiwiTnVtcGFkOCIsMTA2LCJOdW1QYWQ4IiwxMDQsIlZLX05VTVBBRDgiLGUsZV0sWzEsMTAzLCJOdW1wYWQ5IiwxMDcsIk51bVBhZDkiLDEwNSwiVktfTlVNUEFEOSIsZSxlXSxbMSwxMDQsIk51bXBhZDAiLDk4LCJOdW1QYWQwIiw5NiwiVktfTlVNUEFEMCIsZSxlXSxbMSwxMDUsIk51bXBhZERlY2ltYWwiLDExMiwiTnVtUGFkX0RlY2ltYWwiLDExMCwiVktfREVDSU1BTCIsZSxlXSxbMCwxMDYsIkludGxCYWNrc2xhc2giLDk3LCJPRU1fMTAyIiwyMjYsIlZLX09FTV8xMDIiLGUsZV0sWzEsMTA3LCJDb250ZXh0TWVudSIsNTgsIkNvbnRleHRNZW51Iiw5MyxlLGUsZV0sWzEsMTA4LCJQb3dlciIsMCxlLDAsZSxlLGVdLFsxLDEwOSwiTnVtcGFkRXF1YWwiLDAsZSwwLGUsZSxlXSxbMSwxMTAsIkYxMyIsNzEsIkYxMyIsMTI0LCJWS19GMTMiLGUsZV0sWzEsMTExLCJGMTQiLDcyLCJGMTQiLDEyNSwiVktfRjE0IixlLGVdLFsxLDExMiwiRjE1Iiw3MywiRjE1IiwxMjYsIlZLX0YxNSIsZSxlXSxbMSwxMTMsIkYxNiIsNzQsIkYxNiIsMTI3LCJWS19GMTYiLGUsZV0sWzEsMTE0LCJGMTciLDc1LCJGMTciLDEyOCwiVktfRjE3IixlLGVdLFsxLDExNSwiRjE4Iiw3NiwiRjE4IiwxMjksIlZLX0YxOCIsZSxlXSxbMSwxMTYsIkYxOSIsNzcsIkYxOSIsMTMwLCJWS19GMTkiLGUsZV0sWzEsMTE3LCJGMjAiLDc4LCJGMjAiLDEzMSwiVktfRjIwIixlLGVdLFsxLDExOCwiRjIxIiw3OSwiRjIxIiwxMzIsIlZLX0YyMSIsZSxlXSxbMSwxMTksIkYyMiIsODAsIkYyMiIsMTMzLCJWS19GMjIiLGUsZV0sWzEsMTIwLCJGMjMiLDgxLCJGMjMiLDEzNCwiVktfRjIzIixlLGVdLFsxLDEyMSwiRjI0Iiw4MiwiRjI0IiwxMzUsIlZLX0YyNCIsZSxlXSxbMSwxMjIsIk9wZW4iLDAsZSwwLGUsZSxlXSxbMSwxMjMsIkhlbHAiLDAsZSwwLGUsZSxlXSxbMSwxMjQsIlNlbGVjdCIsMCxlLDAsZSxlLGVdLFsxLDEyNSwiQWdhaW4iLDAsZSwwLGUsZSxlXSxbMSwxMjYsIlVuZG8iLDAsZSwwLGUsZSxlXSxbMSwxMjcsIkN1dCIsMCxlLDAsZSxlLGVdLFsxLDEyOCwiQ29weSIsMCxlLDAsZSxlLGVdLFsxLDEyOSwiUGFzdGUiLDAsZSwwLGUsZSxlXSxbMSwxMzAsIkZpbmQiLDAsZSwwLGUsZSxlXSxbMSwxMzEsIkF1ZGlvVm9sdW1lTXV0ZSIsMTE3LCJBdWRpb1ZvbHVtZU11dGUiLDE3MywiVktfVk9MVU1FX01VVEUiLGUsZV0sWzEsMTMyLCJBdWRpb1ZvbHVtZVVwIiwxMTgsIkF1ZGlvVm9sdW1lVXAiLDE3NSwiVktfVk9MVU1FX1VQIixlLGVdLFsxLDEzMywiQXVkaW9Wb2x1bWVEb3duIiwxMTksIkF1ZGlvVm9sdW1lRG93biIsMTc0LCJWS19WT0xVTUVfRE9XTiIsZSxlXSxbMSwxMzQsIk51bXBhZENvbW1hIiwxMTAsIk51bVBhZF9TZXBhcmF0b3IiLDEwOCwiVktfU0VQQVJBVE9SIixlLGVdLFswLDEzNSwiSW50bFJvIiwxMTUsIkFCTlRfQzEiLDE5MywiVktfQUJOVF9DMSIsZSxlXSxbMSwxMzYsIkthbmFNb2RlIiwwLGUsMCxlLGUsZV0sWzAsMTM3LCJJbnRsWWVuIiwwLGUsMCxlLGUsZV0sWzEsMTM4LCJDb252ZXJ0IiwwLGUsMCxlLGUsZV0sWzEsMTM5LCJOb25Db252ZXJ0IiwwLGUsMCxlLGUsZV0sWzEsMTQwLCJMYW5nMSIsMCxlLDAsZSxlLGVdLFsxLDE0MSwiTGFuZzIiLDAsZSwwLGUsZSxlXSxbMSwxNDIsIkxhbmczIiwwLGUsMCxlLGUsZV0sWzEsMTQzLCJMYW5nNCIsMCxlLDAsZSxlLGVdLFsxLDE0NCwiTGFuZzUiLDAsZSwwLGUsZSxlXSxbMSwxNDUsIkFib3J0IiwwLGUsMCxlLGUsZV0sWzEsMTQ2LCJQcm9wcyIsMCxlLDAsZSxlLGVdLFsxLDE0NywiTnVtcGFkUGFyZW5MZWZ0IiwwLGUsMCxlLGUsZV0sWzEsMTQ4LCJOdW1wYWRQYXJlblJpZ2h0IiwwLGUsMCxlLGUsZV0sWzEsMTQ5LCJOdW1wYWRCYWNrc3BhY2UiLDAsZSwwLGUsZSxlXSxbMSwxNTAsIk51bXBhZE1lbW9yeVN0b3JlIiwwLGUsMCxlLGUsZV0sWzEsMTUxLCJOdW1wYWRNZW1vcnlSZWNhbGwiLDAsZSwwLGUsZSxlXSxbMSwxNTIsIk51bXBhZE1lbW9yeUNsZWFyIiwwLGUsMCxlLGUsZV0sWzEsMTUzLCJOdW1wYWRNZW1vcnlBZGQiLDAsZSwwLGUsZSxlXSxbMSwxNTQsIk51bXBhZE1lbW9yeVN1YnRyYWN0IiwwLGUsMCxlLGUsZV0sWzEsMTU1LCJOdW1wYWRDbGVhciIsMTMxLCJDbGVhciIsMTIsIlZLX0NMRUFSIixlLGVdLFsxLDE1NiwiTnVtcGFkQ2xlYXJFbnRyeSIsMCxlLDAsZSxlLGVdLFsxLDAsZSw1LCJDdHJsIiwxNywiVktfQ09OVFJPTCIsZSxlXSxbMSwwLGUsNCwiU2hpZnQiLDE2LCJWS19TSElGVCIsZSxlXSxbMSwwLGUsNiwiQWx0IiwxOCwiVktfTUVOVSIsZSxlXSxbMSwwLGUsNTcsIk1ldGEiLDkxLCJWS19DT01NQU5EIixlLGVdLFsxLDE1NywiQ29udHJvbExlZnQiLDUsZSwwLCJWS19MQ09OVFJPTCIsZSxlXSxbMSwxNTgsIlNoaWZ0TGVmdCIsNCxlLDAsIlZLX0xTSElGVCIsZSxlXSxbMSwxNTksIkFsdExlZnQiLDYsZSwwLCJWS19MTUVOVSIsZSxlXSxbMSwxNjAsIk1ldGFMZWZ0Iiw1NyxlLDAsIlZLX0xXSU4iLGUsZV0sWzEsMTYxLCJDb250cm9sUmlnaHQiLDUsZSwwLCJWS19SQ09OVFJPTCIsZSxlXSxbMSwxNjIsIlNoaWZ0UmlnaHQiLDQsZSwwLCJWS19SU0hJRlQiLGUsZV0sWzEsMTYzLCJBbHRSaWdodCIsNixlLDAsIlZLX1JNRU5VIixlLGVdLFsxLDE2NCwiTWV0YVJpZ2h0Iiw1NyxlLDAsIlZLX1JXSU4iLGUsZV0sWzEsMTY1LCJCcmlnaHRuZXNzVXAiLDAsZSwwLGUsZSxlXSxbMSwxNjYsIkJyaWdodG5lc3NEb3duIiwwLGUsMCxlLGUsZV0sWzEsMTY3LCJNZWRpYVBsYXkiLDAsZSwwLGUsZSxlXSxbMSwxNjgsIk1lZGlhUmVjb3JkIiwwLGUsMCxlLGUsZV0sWzEsMTY5LCJNZWRpYUZhc3RGb3J3YXJkIiwwLGUsMCxlLGUsZV0sWzEsMTcwLCJNZWRpYVJld2luZCIsMCxlLDAsZSxlLGVdLFsxLDE3MSwiTWVkaWFUcmFja05leHQiLDEyNCwiTWVkaWFUcmFja05leHQiLDE3NiwiVktfTUVESUFfTkVYVF9UUkFDSyIsZSxlXSxbMSwxNzIsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTI1LCJNZWRpYVRyYWNrUHJldmlvdXMiLDE3NywiVktfTUVESUFfUFJFVl9UUkFDSyIsZSxlXSxbMSwxNzMsIk1lZGlhU3RvcCIsMTI2LCJNZWRpYVN0b3AiLDE3OCwiVktfTUVESUFfU1RPUCIsZSxlXSxbMSwxNzQsIkVqZWN0IiwwLGUsMCxlLGUsZV0sWzEsMTc1LCJNZWRpYVBsYXlQYXVzZSIsMTI3LCJNZWRpYVBsYXlQYXVzZSIsMTc5LCJWS19NRURJQV9QTEFZX1BBVVNFIixlLGVdLFsxLDE3NiwiTWVkaWFTZWxlY3QiLDEyOCwiTGF1bmNoTWVkaWFQbGF5ZXIiLDE4MSwiVktfTUVESUFfTEFVTkNIX01FRElBX1NFTEVDVCIsZSxlXSxbMSwxNzcsIkxhdW5jaE1haWwiLDEyOSwiTGF1bmNoTWFpbCIsMTgwLCJWS19NRURJQV9MQVVOQ0hfTUFJTCIsZSxlXSxbMSwxNzgsIkxhdW5jaEFwcDIiLDEzMCwiTGF1bmNoQXBwMiIsMTgzLCJWS19NRURJQV9MQVVOQ0hfQVBQMiIsZSxlXSxbMSwxNzksIkxhdW5jaEFwcDEiLDAsZSwwLCJWS19NRURJQV9MQVVOQ0hfQVBQMSIsZSxlXSxbMSwxODAsIlNlbGVjdFRhc2siLDAsZSwwLGUsZSxlXSxbMSwxODEsIkxhdW5jaFNjcmVlblNhdmVyIiwwLGUsMCxlLGUsZV0sWzEsMTgyLCJCcm93c2VyU2VhcmNoIiwxMjAsIkJyb3dzZXJTZWFyY2giLDE3MCwiVktfQlJPV1NFUl9TRUFSQ0giLGUsZV0sWzEsMTgzLCJCcm93c2VySG9tZSIsMTIxLCJCcm93c2VySG9tZSIsMTcyLCJWS19CUk9XU0VSX0hPTUUiLGUsZV0sWzEsMTg0LCJCcm93c2VyQmFjayIsMTIyLCJCcm93c2VyQmFjayIsMTY2LCJWS19CUk9XU0VSX0JBQ0siLGUsZV0sWzEsMTg1LCJCcm93c2VyRm9yd2FyZCIsMTIzLCJCcm93c2VyRm9yd2FyZCIsMTY3LCJWS19CUk9XU0VSX0ZPUldBUkQiLGUsZV0sWzEsMTg2LCJCcm93c2VyU3RvcCIsMCxlLDAsIlZLX0JST1dTRVJfU1RPUCIsZSxlXSxbMSwxODcsIkJyb3dzZXJSZWZyZXNoIiwwLGUsMCwiVktfQlJPV1NFUl9SRUZSRVNIIixlLGVdLFsxLDE4OCwiQnJvd3NlckZhdm9yaXRlcyIsMCxlLDAsIlZLX0JST1dTRVJfRkFWT1JJVEVTIixlLGVdLFsxLDE4OSwiWm9vbVRvZ2dsZSIsMCxlLDAsZSxlLGVdLFsxLDE5MCwiTWFpbFJlcGx5IiwwLGUsMCxlLGUsZV0sWzEsMTkxLCJNYWlsRm9yd2FyZCIsMCxlLDAsZSxlLGVdLFsxLDE5MiwiTWFpbFNlbmQiLDAsZSwwLGUsZSxlXSxbMSwwLGUsMTE0LCJLZXlJbkNvbXBvc2l0aW9uIiwyMjksZSxlLGVdLFsxLDAsZSwxMTYsIkFCTlRfQzIiLDE5NCwiVktfQUJOVF9DMiIsZSxlXSxbMSwwLGUsOTYsIk9FTV84IiwyMjMsIlZLX09FTV84IixlLGVdLFsxLDAsZSwwLGUsMCwiVktfS0FOQSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0hBTkdVTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0pVTkpBIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRklOQUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19IQU5KQSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0tBTkpJIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQ09OVkVSVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX05PTkNPTlZFUlQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19BQ0NFUFQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19NT0RFQ0hBTkdFIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfU0VMRUNUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUFJJTlQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19FWEVDVVRFIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfU05BUFNIT1QiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19IRUxQIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQVBQUyIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BST0NFU1NLRVkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QQUNLRVQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19EQkVfU0JDU0NIQVIiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19EQkVfREJDU0NIQVIiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19BVFROIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQ1JTRUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19FWFNFTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0VSRU9GIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUExBWSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1pPT00iLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19OT05BTUUiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QQTEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19PRU1fQ0xFQVIiLGUsZV1dLG49W10scj1bXTtmb3IoY29uc3QgaSBvZiB0KXtjb25zdFtzLGEsbCxvLHUsaCxjLGQsbV09aTtpZihyW2FdfHwoclthXT0hMCxndVtsXT1hLHB1W2wudG9Mb3dlckNhc2UoKV09YSksIW5bb10pe2lmKG5bb109ITAsIXUpdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcgcmVwcmVzZW50YXRpb24gbWlzc2luZyBmb3Iga2V5IGNvZGUgJHtvfSBhcm91bmQgc2NhbiBjb2RlICR7bH1gKTt4bi5kZWZpbmUobyx1KSxici5kZWZpbmUobyxkfHx1KSx2ci5kZWZpbmUobyxtfHxkfHx1KX1oJiYobXVbaF09byl9fSkoKTt2YXIgVWk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobCl7cmV0dXJuIHhuLmtleUNvZGVUb1N0cihsKX1lLnRvU3RyaW5nPXQ7ZnVuY3Rpb24gbihsKXtyZXR1cm4geG4uc3RyVG9LZXlDb2RlKGwpfWUuZnJvbVN0cmluZz1uO2Z1bmN0aW9uIHIobCl7cmV0dXJuIGJyLmtleUNvZGVUb1N0cihsKX1lLnRvVXNlclNldHRpbmdzVVM9cjtmdW5jdGlvbiBpKGwpe3JldHVybiB2ci5rZXlDb2RlVG9TdHIobCl9ZS50b1VzZXJTZXR0aW5nc0dlbmVyYWw9aTtmdW5jdGlvbiBzKGwpe3JldHVybiBici5zdHJUb0tleUNvZGUobCl8fHZyLnN0clRvS2V5Q29kZShsKX1lLmZyb21Vc2VyU2V0dGluZ3M9cztmdW5jdGlvbiBhKGwpe2lmKGw+PTk4JiZsPD0xMTMpcmV0dXJuIG51bGw7c3dpdGNoKGwpe2Nhc2UgMTY6cmV0dXJuIlVwIjtjYXNlIDE4OnJldHVybiJEb3duIjtjYXNlIDE1OnJldHVybiJMZWZ0IjtjYXNlIDE3OnJldHVybiJSaWdodCJ9cmV0dXJuIHhuLmtleUNvZGVUb1N0cihsKX1lLnRvRWxlY3Ryb25BY2NlbGVyYXRvcj1hfSkoVWl8fChVaT17fSkpO2Z1bmN0aW9uIGJ1KGUsdCl7Y29uc3Qgbj0odCY2NTUzNSk8PDE2Pj4+MDtyZXR1cm4oZXxuKT4+PjB9Y2xhc3MgdmUgZXh0ZW5kcyB6e2NvbnN0cnVjdG9yKHQsbixyLGkpe3N1cGVyKHQsbixyLGkpLHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPXQsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj1uLHRoaXMucG9zaXRpb25MaW5lTnVtYmVyPXIsdGhpcy5wb3NpdGlvbkNvbHVtbj1pfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLnBvc2l0aW9uTGluZU51bWJlcisiLCIrdGhpcy5wb3NpdGlvbkNvbHVtbisiXSJ9ZXF1YWxzU2VsZWN0aW9uKHQpe3JldHVybiB2ZS5zZWxlY3Rpb25zRXF1YWwodGhpcyx0KX1zdGF0aWMgc2VsZWN0aW9uc0VxdWFsKHQsbil7cmV0dXJuIHQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09bi5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJnQuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT1uLnNlbGVjdGlvblN0YXJ0Q29sdW1uJiZ0LnBvc2l0aW9uTGluZU51bWJlcj09PW4ucG9zaXRpb25MaW5lTnVtYmVyJiZ0LnBvc2l0aW9uQ29sdW1uPT09bi5wb3NpdGlvbkNvbHVtbn1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10aGlzLnN0YXJ0TGluZU51bWJlciYmdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj09PXRoaXMuc3RhcnRDb2x1bW4/MDoxfXNldEVuZFBvc2l0aW9uKHQsbil7cmV0dXJuIHRoaXMuZ2V0RGlyZWN0aW9uKCk9PT0wP25ldyB2ZSh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLHQsbik6bmV3IHZlKHQsbix0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uKX1nZXRQb3NpdGlvbigpe3JldHVybiBuZXcgZWUodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IGVlKHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4pfXNldFN0YXJ0UG9zaXRpb24odCxuKXtyZXR1cm4gdGhpcy5nZXREaXJlY3Rpb24oKT09PTA/bmV3IHZlKHQsbix0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pOm5ldyB2ZSh0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4sdCxuKX1zdGF0aWMgZnJvbVBvc2l0aW9ucyh0LG49dCl7cmV0dXJuIG5ldyB2ZSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4sbi5saW5lTnVtYmVyLG4uY29sdW1uKX1zdGF0aWMgZnJvbVJhbmdlKHQsbil7cmV0dXJuIG49PT0wP25ldyB2ZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbik6bmV3IHZlKHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbix0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKX1zdGF0aWMgbGlmdFNlbGVjdGlvbih0KXtyZXR1cm4gbmV3IHZlKHQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHQuc2VsZWN0aW9uU3RhcnRDb2x1bW4sdC5wb3NpdGlvbkxpbmVOdW1iZXIsdC5wb3NpdGlvbkNvbHVtbil9c3RhdGljIHNlbGVjdGlvbnNBcnJFcXVhbCh0LG4pe2lmKHQmJiFufHwhdCYmbilyZXR1cm4hMTtpZighdCYmIW4pcmV0dXJuITA7aWYodC5sZW5ndGghPT1uLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspaWYoIXRoaXMuc2VsZWN0aW9uc0VxdWFsKHRbcl0sbltyXSkpcmV0dXJuITE7cmV0dXJuITB9c3RhdGljIGlzSVNlbGVjdGlvbih0KXtyZXR1cm4gdCYmdHlwZW9mIHQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuc2VsZWN0aW9uU3RhcnRDb2x1bW49PSJudW1iZXIiJiZ0eXBlb2YgdC5wb3NpdGlvbkxpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5wb3NpdGlvbkNvbHVtbj09Im51bWJlciJ9c3RhdGljIGNyZWF0ZVdpdGhEaXJlY3Rpb24odCxuLHIsaSxzKXtyZXR1cm4gcz09PTA/bmV3IHZlKHQsbixyLGkpOm5ldyB2ZShyLGksdCxuKX19ZnVuY3Rpb24gdnUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIn1jb25zdCBCaT1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGYoZSx0KXtpZih2dSh0KSl7Y29uc3Qgbj1CaVt0XTtpZihuPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgJHtlfSByZWZlcmVuY2VzIGFuIHVua25vd24gY29kaWNvbjogJHt0fWApO3Q9bn1yZXR1cm4gQmlbZV09dCx7aWQ6ZX19Y29uc3QgeHU9e2FkZDpmKCJhZGQiLDZlNCkscGx1czpmKCJwbHVzIiw2ZTQpLGdpc3ROZXc6ZigiZ2lzdC1uZXciLDZlNCkscmVwb0NyZWF0ZTpmKCJyZXBvLWNyZWF0ZSIsNmU0KSxsaWdodGJ1bGI6ZigibGlnaHRidWxiIiw2MDAwMSksbGlnaHRCdWxiOmYoImxpZ2h0LWJ1bGIiLDYwMDAxKSxyZXBvOmYoInJlcG8iLDYwMDAyKSxyZXBvRGVsZXRlOmYoInJlcG8tZGVsZXRlIiw2MDAwMiksZ2lzdEZvcms6ZigiZ2lzdC1mb3JrIiw2MDAwMykscmVwb0ZvcmtlZDpmKCJyZXBvLWZvcmtlZCIsNjAwMDMpLGdpdFB1bGxSZXF1ZXN0OmYoImdpdC1wdWxsLXJlcXVlc3QiLDYwMDA0KSxnaXRQdWxsUmVxdWVzdEFiYW5kb25lZDpmKCJnaXQtcHVsbC1yZXF1ZXN0LWFiYW5kb25lZCIsNjAwMDQpLHJlY29yZEtleXM6ZigicmVjb3JkLWtleXMiLDYwMDA1KSxrZXlib2FyZDpmKCJrZXlib2FyZCIsNjAwMDUpLHRhZzpmKCJ0YWciLDYwMDA2KSxnaXRQdWxsUmVxdWVzdExhYmVsOmYoImdpdC1wdWxsLXJlcXVlc3QtbGFiZWwiLDYwMDA2KSx0YWdBZGQ6ZigidGFnLWFkZCIsNjAwMDYpLHRhZ1JlbW92ZTpmKCJ0YWctcmVtb3ZlIiw2MDAwNikscGVyc29uOmYoInBlcnNvbiIsNjAwMDcpLHBlcnNvbkZvbGxvdzpmKCJwZXJzb24tZm9sbG93Iiw2MDAwNykscGVyc29uT3V0bGluZTpmKCJwZXJzb24tb3V0bGluZSIsNjAwMDcpLHBlcnNvbkZpbGxlZDpmKCJwZXJzb24tZmlsbGVkIiw2MDAwNyksZ2l0QnJhbmNoOmYoImdpdC1icmFuY2giLDYwMDA4KSxnaXRCcmFuY2hDcmVhdGU6ZigiZ2l0LWJyYW5jaC1jcmVhdGUiLDYwMDA4KSxnaXRCcmFuY2hEZWxldGU6ZigiZ2l0LWJyYW5jaC1kZWxldGUiLDYwMDA4KSxzb3VyY2VDb250cm9sOmYoInNvdXJjZS1jb250cm9sIiw2MDAwOCksbWlycm9yOmYoIm1pcnJvciIsNjAwMDkpLG1pcnJvclB1YmxpYzpmKCJtaXJyb3ItcHVibGljIiw2MDAwOSksc3RhcjpmKCJzdGFyIiw2MDAxMCksc3RhckFkZDpmKCJzdGFyLWFkZCIsNjAwMTApLHN0YXJEZWxldGU6Zigic3Rhci1kZWxldGUiLDYwMDEwKSxzdGFyRW1wdHk6Zigic3Rhci1lbXB0eSIsNjAwMTApLGNvbW1lbnQ6ZigiY29tbWVudCIsNjAwMTEpLGNvbW1lbnRBZGQ6ZigiY29tbWVudC1hZGQiLDYwMDExKSxhbGVydDpmKCJhbGVydCIsNjAwMTIpLHdhcm5pbmc6Zigid2FybmluZyIsNjAwMTIpLHNlYXJjaDpmKCJzZWFyY2giLDYwMDEzKSxzZWFyY2hTYXZlOmYoInNlYXJjaC1zYXZlIiw2MDAxMyksbG9nT3V0OmYoImxvZy1vdXQiLDYwMDE0KSxzaWduT3V0OmYoInNpZ24tb3V0Iiw2MDAxNCksbG9nSW46ZigibG9nLWluIiw2MDAxNSksc2lnbkluOmYoInNpZ24taW4iLDYwMDE1KSxleWU6ZigiZXllIiw2MDAxNiksZXllVW53YXRjaDpmKCJleWUtdW53YXRjaCIsNjAwMTYpLGV5ZVdhdGNoOmYoImV5ZS13YXRjaCIsNjAwMTYpLGNpcmNsZUZpbGxlZDpmKCJjaXJjbGUtZmlsbGVkIiw2MDAxNykscHJpbWl0aXZlRG90OmYoInByaW1pdGl2ZS1kb3QiLDYwMDE3KSxjbG9zZURpcnR5OmYoImNsb3NlLWRpcnR5Iiw2MDAxNyksZGVidWdCcmVha3BvaW50OmYoImRlYnVnLWJyZWFrcG9pbnQiLDYwMDE3KSxkZWJ1Z0JyZWFrcG9pbnREaXNhYmxlZDpmKCJkZWJ1Zy1icmVha3BvaW50LWRpc2FibGVkIiw2MDAxNyksZGVidWdIaW50OmYoImRlYnVnLWhpbnQiLDYwMDE3KSx0ZXJtaW5hbERlY29yYXRpb25TdWNjZXNzOmYoInRlcm1pbmFsLWRlY29yYXRpb24tc3VjY2VzcyIsNjAwMTcpLHByaW1pdGl2ZVNxdWFyZTpmKCJwcmltaXRpdmUtc3F1YXJlIiw2MDAxOCksZWRpdDpmKCJlZGl0Iiw2MDAxOSkscGVuY2lsOmYoInBlbmNpbCIsNjAwMTkpLGluZm86ZigiaW5mbyIsNjAwMjApLGlzc3VlT3BlbmVkOmYoImlzc3VlLW9wZW5lZCIsNjAwMjApLGdpc3RQcml2YXRlOmYoImdpc3QtcHJpdmF0ZSIsNjAwMjEpLGdpdEZvcmtQcml2YXRlOmYoImdpdC1mb3JrLXByaXZhdGUiLDYwMDIxKSxsb2NrOmYoImxvY2siLDYwMDIxKSxtaXJyb3JQcml2YXRlOmYoIm1pcnJvci1wcml2YXRlIiw2MDAyMSksY2xvc2U6ZigiY2xvc2UiLDYwMDIyKSxyZW1vdmVDbG9zZTpmKCJyZW1vdmUtY2xvc2UiLDYwMDIyKSx4OmYoIngiLDYwMDIyKSxyZXBvU3luYzpmKCJyZXBvLXN5bmMiLDYwMDIzKSxzeW5jOmYoInN5bmMiLDYwMDIzKSxjbG9uZTpmKCJjbG9uZSIsNjAwMjQpLGRlc2t0b3BEb3dubG9hZDpmKCJkZXNrdG9wLWRvd25sb2FkIiw2MDAyNCksYmVha2VyOmYoImJlYWtlciIsNjAwMjUpLG1pY3Jvc2NvcGU6ZigibWljcm9zY29wZSIsNjAwMjUpLHZtOmYoInZtIiw2MDAyNiksZGV2aWNlRGVza3RvcDpmKCJkZXZpY2UtZGVza3RvcCIsNjAwMjYpLGZpbGU6ZigiZmlsZSIsNjAwMjcpLGZpbGVUZXh0OmYoImZpbGUtdGV4dCIsNjAwMjcpLG1vcmU6ZigibW9yZSIsNjAwMjgpLGVsbGlwc2lzOmYoImVsbGlwc2lzIiw2MDAyOCksa2ViYWJIb3Jpem9udGFsOmYoImtlYmFiLWhvcml6b250YWwiLDYwMDI4KSxtYWlsUmVwbHk6ZigibWFpbC1yZXBseSIsNjAwMjkpLHJlcGx5OmYoInJlcGx5Iiw2MDAyOSksb3JnYW5pemF0aW9uOmYoIm9yZ2FuaXphdGlvbiIsNjAwMzApLG9yZ2FuaXphdGlvbkZpbGxlZDpmKCJvcmdhbml6YXRpb24tZmlsbGVkIiw2MDAzMCksb3JnYW5pemF0aW9uT3V0bGluZTpmKCJvcmdhbml6YXRpb24tb3V0bGluZSIsNjAwMzApLG5ld0ZpbGU6ZigibmV3LWZpbGUiLDYwMDMxKSxmaWxlQWRkOmYoImZpbGUtYWRkIiw2MDAzMSksbmV3Rm9sZGVyOmYoIm5ldy1mb2xkZXIiLDYwMDMyKSxmaWxlRGlyZWN0b3J5Q3JlYXRlOmYoImZpbGUtZGlyZWN0b3J5LWNyZWF0ZSIsNjAwMzIpLHRyYXNoOmYoInRyYXNoIiw2MDAzMyksdHJhc2hjYW46ZigidHJhc2hjYW4iLDYwMDMzKSxoaXN0b3J5OmYoImhpc3RvcnkiLDYwMDM0KSxjbG9jazpmKCJjbG9jayIsNjAwMzQpLGZvbGRlcjpmKCJmb2xkZXIiLDYwMDM1KSxmaWxlRGlyZWN0b3J5OmYoImZpbGUtZGlyZWN0b3J5Iiw2MDAzNSksc3ltYm9sRm9sZGVyOmYoInN5bWJvbC1mb2xkZXIiLDYwMDM1KSxsb2dvR2l0aHViOmYoImxvZ28tZ2l0aHViIiw2MDAzNiksbWFya0dpdGh1YjpmKCJtYXJrLWdpdGh1YiIsNjAwMzYpLGdpdGh1YjpmKCJnaXRodWIiLDYwMDM2KSx0ZXJtaW5hbDpmKCJ0ZXJtaW5hbCIsNjAwMzcpLGNvbnNvbGU6ZigiY29uc29sZSIsNjAwMzcpLHJlcGw6ZigicmVwbCIsNjAwMzcpLHphcDpmKCJ6YXAiLDYwMDM4KSxzeW1ib2xFdmVudDpmKCJzeW1ib2wtZXZlbnQiLDYwMDM4KSxlcnJvcjpmKCJlcnJvciIsNjAwMzkpLHN0b3A6Zigic3RvcCIsNjAwMzkpLHZhcmlhYmxlOmYoInZhcmlhYmxlIiw2MDA0MCksc3ltYm9sVmFyaWFibGU6Zigic3ltYm9sLXZhcmlhYmxlIiw2MDA0MCksYXJyYXk6ZigiYXJyYXkiLDYwMDQyKSxzeW1ib2xBcnJheTpmKCJzeW1ib2wtYXJyYXkiLDYwMDQyKSxzeW1ib2xNb2R1bGU6Zigic3ltYm9sLW1vZHVsZSIsNjAwNDMpLHN5bWJvbFBhY2thZ2U6Zigic3ltYm9sLXBhY2thZ2UiLDYwMDQzKSxzeW1ib2xOYW1lc3BhY2U6Zigic3ltYm9sLW5hbWVzcGFjZSIsNjAwNDMpLHN5bWJvbE9iamVjdDpmKCJzeW1ib2wtb2JqZWN0Iiw2MDA0Myksc3ltYm9sTWV0aG9kOmYoInN5bWJvbC1tZXRob2QiLDYwMDQ0KSxzeW1ib2xGdW5jdGlvbjpmKCJzeW1ib2wtZnVuY3Rpb24iLDYwMDQ0KSxzeW1ib2xDb25zdHJ1Y3RvcjpmKCJzeW1ib2wtY29uc3RydWN0b3IiLDYwMDQ0KSxzeW1ib2xCb29sZWFuOmYoInN5bWJvbC1ib29sZWFuIiw2MDA0Nyksc3ltYm9sTnVsbDpmKCJzeW1ib2wtbnVsbCIsNjAwNDcpLHN5bWJvbE51bWVyaWM6Zigic3ltYm9sLW51bWVyaWMiLDYwMDQ4KSxzeW1ib2xOdW1iZXI6Zigic3ltYm9sLW51bWJlciIsNjAwNDgpLHN5bWJvbFN0cnVjdHVyZTpmKCJzeW1ib2wtc3RydWN0dXJlIiw2MDA0OSksc3ltYm9sU3RydWN0OmYoInN5bWJvbC1zdHJ1Y3QiLDYwMDQ5KSxzeW1ib2xQYXJhbWV0ZXI6Zigic3ltYm9sLXBhcmFtZXRlciIsNjAwNTApLHN5bWJvbFR5cGVQYXJhbWV0ZXI6Zigic3ltYm9sLXR5cGUtcGFyYW1ldGVyIiw2MDA1MCksc3ltYm9sS2V5OmYoInN5bWJvbC1rZXkiLDYwMDUxKSxzeW1ib2xUZXh0OmYoInN5bWJvbC10ZXh0Iiw2MDA1MSksc3ltYm9sUmVmZXJlbmNlOmYoInN5bWJvbC1yZWZlcmVuY2UiLDYwMDUyKSxnb1RvRmlsZTpmKCJnby10by1maWxlIiw2MDA1Miksc3ltYm9sRW51bTpmKCJzeW1ib2wtZW51bSIsNjAwNTMpLHN5bWJvbFZhbHVlOmYoInN5bWJvbC12YWx1ZSIsNjAwNTMpLHN5bWJvbFJ1bGVyOmYoInN5bWJvbC1ydWxlciIsNjAwNTQpLHN5bWJvbFVuaXQ6Zigic3ltYm9sLXVuaXQiLDYwMDU0KSxhY3RpdmF0ZUJyZWFrcG9pbnRzOmYoImFjdGl2YXRlLWJyZWFrcG9pbnRzIiw2MDA1NSksYXJjaGl2ZTpmKCJhcmNoaXZlIiw2MDA1NiksYXJyb3dCb3RoOmYoImFycm93LWJvdGgiLDYwMDU3KSxhcnJvd0Rvd246ZigiYXJyb3ctZG93biIsNjAwNTgpLGFycm93TGVmdDpmKCJhcnJvdy1sZWZ0Iiw2MDA1OSksYXJyb3dSaWdodDpmKCJhcnJvdy1yaWdodCIsNjAwNjApLGFycm93U21hbGxEb3duOmYoImFycm93LXNtYWxsLWRvd24iLDYwMDYxKSxhcnJvd1NtYWxsTGVmdDpmKCJhcnJvdy1zbWFsbC1sZWZ0Iiw2MDA2MiksYXJyb3dTbWFsbFJpZ2h0OmYoImFycm93LXNtYWxsLXJpZ2h0Iiw2MDA2MyksYXJyb3dTbWFsbFVwOmYoImFycm93LXNtYWxsLXVwIiw2MDA2NCksYXJyb3dVcDpmKCJhcnJvdy11cCIsNjAwNjUpLGJlbGw6ZigiYmVsbCIsNjAwNjYpLGJvbGQ6ZigiYm9sZCIsNjAwNjcpLGJvb2s6ZigiYm9vayIsNjAwNjgpLGJvb2ttYXJrOmYoImJvb2ttYXJrIiw2MDA2OSksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxVbnZlcmlmaWVkOmYoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtdW52ZXJpZmllZCIsNjAwNzApLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsOmYoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkOmYoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtZGlzYWJsZWQiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnREYXRhVW52ZXJpZmllZDpmKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtdW52ZXJpZmllZCIsNjAwNzIpLGRlYnVnQnJlYWtwb2ludERhdGE6ZigiZGVidWctYnJlYWtwb2ludC1kYXRhIiw2MDA3MyksZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkOmYoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS1kaXNhYmxlZCIsNjAwNzMpLGRlYnVnQnJlYWtwb2ludExvZ1VudmVyaWZpZWQ6ZigiZGVidWctYnJlYWtwb2ludC1sb2ctdW52ZXJpZmllZCIsNjAwNzQpLGRlYnVnQnJlYWtwb2ludExvZzpmKCJkZWJ1Zy1icmVha3BvaW50LWxvZyIsNjAwNzUpLGRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkOmYoImRlYnVnLWJyZWFrcG9pbnQtbG9nLWRpc2FibGVkIiw2MDA3NSksYnJpZWZjYXNlOmYoImJyaWVmY2FzZSIsNjAwNzYpLGJyb2FkY2FzdDpmKCJicm9hZGNhc3QiLDYwMDc3KSxicm93c2VyOmYoImJyb3dzZXIiLDYwMDc4KSxidWc6ZigiYnVnIiw2MDA3OSksY2FsZW5kYXI6ZigiY2FsZW5kYXIiLDYwMDgwKSxjYXNlU2Vuc2l0aXZlOmYoImNhc2Utc2Vuc2l0aXZlIiw2MDA4MSksY2hlY2s6ZigiY2hlY2siLDYwMDgyKSxjaGVja2xpc3Q6ZigiY2hlY2tsaXN0Iiw2MDA4MyksY2hldnJvbkRvd246ZigiY2hldnJvbi1kb3duIiw2MDA4NCksY2hldnJvbkxlZnQ6ZigiY2hldnJvbi1sZWZ0Iiw2MDA4NSksY2hldnJvblJpZ2h0OmYoImNoZXZyb24tcmlnaHQiLDYwMDg2KSxjaGV2cm9uVXA6ZigiY2hldnJvbi11cCIsNjAwODcpLGNocm9tZUNsb3NlOmYoImNocm9tZS1jbG9zZSIsNjAwODgpLGNocm9tZU1heGltaXplOmYoImNocm9tZS1tYXhpbWl6ZSIsNjAwODkpLGNocm9tZU1pbmltaXplOmYoImNocm9tZS1taW5pbWl6ZSIsNjAwOTApLGNocm9tZVJlc3RvcmU6ZigiY2hyb21lLXJlc3RvcmUiLDYwMDkxKSxjaXJjbGVPdXRsaW5lOmYoImNpcmNsZS1vdXRsaW5lIiw2MDA5MiksY2lyY2xlOmYoImNpcmNsZSIsNjAwOTIpLGRlYnVnQnJlYWtwb2ludFVudmVyaWZpZWQ6ZigiZGVidWctYnJlYWtwb2ludC11bnZlcmlmaWVkIiw2MDA5MiksdGVybWluYWxEZWNvcmF0aW9uSW5jb21wbGV0ZTpmKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLWluY29tcGxldGUiLDYwMDkyKSxjaXJjbGVTbGFzaDpmKCJjaXJjbGUtc2xhc2giLDYwMDkzKSxjaXJjdWl0Qm9hcmQ6ZigiY2lyY3VpdC1ib2FyZCIsNjAwOTQpLGNsZWFyQWxsOmYoImNsZWFyLWFsbCIsNjAwOTUpLGNsaXBweTpmKCJjbGlwcHkiLDYwMDk2KSxjbG9zZUFsbDpmKCJjbG9zZS1hbGwiLDYwMDk3KSxjbG91ZERvd25sb2FkOmYoImNsb3VkLWRvd25sb2FkIiw2MDA5OCksY2xvdWRVcGxvYWQ6ZigiY2xvdWQtdXBsb2FkIiw2MDA5OSksY29kZTpmKCJjb2RlIiw2MDEwMCksY29sbGFwc2VBbGw6ZigiY29sbGFwc2UtYWxsIiw2MDEwMSksY29sb3JNb2RlOmYoImNvbG9yLW1vZGUiLDYwMTAyKSxjb21tZW50RGlzY3Vzc2lvbjpmKCJjb21tZW50LWRpc2N1c3Npb24iLDYwMTAzKSxjcmVkaXRDYXJkOmYoImNyZWRpdC1jYXJkIiw2MDEwNSksZGFzaDpmKCJkYXNoIiw2MDEwOCksZGFzaGJvYXJkOmYoImRhc2hib2FyZCIsNjAxMDkpLGRhdGFiYXNlOmYoImRhdGFiYXNlIiw2MDExMCksZGVidWdDb250aW51ZTpmKCJkZWJ1Zy1jb250aW51ZSIsNjAxMTEpLGRlYnVnRGlzY29ubmVjdDpmKCJkZWJ1Zy1kaXNjb25uZWN0Iiw2MDExMiksZGVidWdQYXVzZTpmKCJkZWJ1Zy1wYXVzZSIsNjAxMTMpLGRlYnVnUmVzdGFydDpmKCJkZWJ1Zy1yZXN0YXJ0Iiw2MDExNCksZGVidWdTdGFydDpmKCJkZWJ1Zy1zdGFydCIsNjAxMTUpLGRlYnVnU3RlcEludG86ZigiZGVidWctc3RlcC1pbnRvIiw2MDExNiksZGVidWdTdGVwT3V0OmYoImRlYnVnLXN0ZXAtb3V0Iiw2MDExNyksZGVidWdTdGVwT3ZlcjpmKCJkZWJ1Zy1zdGVwLW92ZXIiLDYwMTE4KSxkZWJ1Z1N0b3A6ZigiZGVidWctc3RvcCIsNjAxMTkpLGRlYnVnOmYoImRlYnVnIiw2MDEyMCksZGV2aWNlQ2FtZXJhVmlkZW86ZigiZGV2aWNlLWNhbWVyYS12aWRlbyIsNjAxMjEpLGRldmljZUNhbWVyYTpmKCJkZXZpY2UtY2FtZXJhIiw2MDEyMiksZGV2aWNlTW9iaWxlOmYoImRldmljZS1tb2JpbGUiLDYwMTIzKSxkaWZmQWRkZWQ6ZigiZGlmZi1hZGRlZCIsNjAxMjQpLGRpZmZJZ25vcmVkOmYoImRpZmYtaWdub3JlZCIsNjAxMjUpLGRpZmZNb2RpZmllZDpmKCJkaWZmLW1vZGlmaWVkIiw2MDEyNiksZGlmZlJlbW92ZWQ6ZigiZGlmZi1yZW1vdmVkIiw2MDEyNyksZGlmZlJlbmFtZWQ6ZigiZGlmZi1yZW5hbWVkIiw2MDEyOCksZGlmZjpmKCJkaWZmIiw2MDEyOSksZGlmZlNpZGVieXNpZGU6ZigiZGlmZi1zaWRlYnlzaWRlIiw2MDEyOSksZGlzY2FyZDpmKCJkaXNjYXJkIiw2MDEzMCksZWRpdG9yTGF5b3V0OmYoImVkaXRvci1sYXlvdXQiLDYwMTMxKSxlbXB0eVdpbmRvdzpmKCJlbXB0eS13aW5kb3ciLDYwMTMyKSxleGNsdWRlOmYoImV4Y2x1ZGUiLDYwMTMzKSxleHRlbnNpb25zOmYoImV4dGVuc2lvbnMiLDYwMTM0KSxleWVDbG9zZWQ6ZigiZXllLWNsb3NlZCIsNjAxMzUpLGZpbGVCaW5hcnk6ZigiZmlsZS1iaW5hcnkiLDYwMTM2KSxmaWxlQ29kZTpmKCJmaWxlLWNvZGUiLDYwMTM3KSxmaWxlTWVkaWE6ZigiZmlsZS1tZWRpYSIsNjAxMzgpLGZpbGVQZGY6ZigiZmlsZS1wZGYiLDYwMTM5KSxmaWxlU3VibW9kdWxlOmYoImZpbGUtc3VibW9kdWxlIiw2MDE0MCksZmlsZVN5bWxpbmtEaXJlY3Rvcnk6ZigiZmlsZS1zeW1saW5rLWRpcmVjdG9yeSIsNjAxNDEpLGZpbGVTeW1saW5rRmlsZTpmKCJmaWxlLXN5bWxpbmstZmlsZSIsNjAxNDIpLGZpbGVaaXA6ZigiZmlsZS16aXAiLDYwMTQzKSxmaWxlczpmKCJmaWxlcyIsNjAxNDQpLGZpbHRlcjpmKCJmaWx0ZXIiLDYwMTQ1KSxmbGFtZTpmKCJmbGFtZSIsNjAxNDYpLGZvbGREb3duOmYoImZvbGQtZG93biIsNjAxNDcpLGZvbGRVcDpmKCJmb2xkLXVwIiw2MDE0OCksZm9sZDpmKCJmb2xkIiw2MDE0OSksZm9sZGVyQWN0aXZlOmYoImZvbGRlci1hY3RpdmUiLDYwMTUwKSxmb2xkZXJPcGVuZWQ6ZigiZm9sZGVyLW9wZW5lZCIsNjAxNTEpLGdlYXI6ZigiZ2VhciIsNjAxNTIpLGdpZnQ6ZigiZ2lmdCIsNjAxNTMpLGdpc3RTZWNyZXQ6ZigiZ2lzdC1zZWNyZXQiLDYwMTU0KSxnaXN0OmYoImdpc3QiLDYwMTU1KSxnaXRDb21taXQ6ZigiZ2l0LWNvbW1pdCIsNjAxNTYpLGdpdENvbXBhcmU6ZigiZ2l0LWNvbXBhcmUiLDYwMTU3KSxjb21wYXJlQ2hhbmdlczpmKCJjb21wYXJlLWNoYW5nZXMiLDYwMTU3KSxnaXRNZXJnZTpmKCJnaXQtbWVyZ2UiLDYwMTU4KSxnaXRodWJBY3Rpb246ZigiZ2l0aHViLWFjdGlvbiIsNjAxNTkpLGdpdGh1YkFsdDpmKCJnaXRodWItYWx0Iiw2MDE2MCksZ2xvYmU6ZigiZ2xvYmUiLDYwMTYxKSxncmFiYmVyOmYoImdyYWJiZXIiLDYwMTYyKSxncmFwaDpmKCJncmFwaCIsNjAxNjMpLGdyaXBwZXI6ZigiZ3JpcHBlciIsNjAxNjQpLGhlYXJ0OmYoImhlYXJ0Iiw2MDE2NSksaG9tZTpmKCJob21lIiw2MDE2NiksaG9yaXpvbnRhbFJ1bGU6ZigiaG9yaXpvbnRhbC1ydWxlIiw2MDE2NyksaHVib3Q6ZigiaHVib3QiLDYwMTY4KSxpbmJveDpmKCJpbmJveCIsNjAxNjkpLGlzc3VlUmVvcGVuZWQ6ZigiaXNzdWUtcmVvcGVuZWQiLDYwMTcxKSxpc3N1ZXM6ZigiaXNzdWVzIiw2MDE3MiksaXRhbGljOmYoIml0YWxpYyIsNjAxNzMpLGplcnNleTpmKCJqZXJzZXkiLDYwMTc0KSxqc29uOmYoImpzb24iLDYwMTc1KSxrZWJhYlZlcnRpY2FsOmYoImtlYmFiLXZlcnRpY2FsIiw2MDE3Niksa2V5OmYoImtleSIsNjAxNzcpLGxhdzpmKCJsYXciLDYwMTc4KSxsaWdodGJ1bGJBdXRvZml4OmYoImxpZ2h0YnVsYi1hdXRvZml4Iiw2MDE3OSksbGlua0V4dGVybmFsOmYoImxpbmstZXh0ZXJuYWwiLDYwMTgwKSxsaW5rOmYoImxpbmsiLDYwMTgxKSxsaXN0T3JkZXJlZDpmKCJsaXN0LW9yZGVyZWQiLDYwMTgyKSxsaXN0VW5vcmRlcmVkOmYoImxpc3QtdW5vcmRlcmVkIiw2MDE4MyksbGl2ZVNoYXJlOmYoImxpdmUtc2hhcmUiLDYwMTg0KSxsb2FkaW5nOmYoImxvYWRpbmciLDYwMTg1KSxsb2NhdGlvbjpmKCJsb2NhdGlvbiIsNjAxODYpLG1haWxSZWFkOmYoIm1haWwtcmVhZCIsNjAxODcpLG1haWw6ZigibWFpbCIsNjAxODgpLG1hcmtkb3duOmYoIm1hcmtkb3duIiw2MDE4OSksbWVnYXBob25lOmYoIm1lZ2FwaG9uZSIsNjAxOTApLG1lbnRpb246ZigibWVudGlvbiIsNjAxOTEpLG1pbGVzdG9uZTpmKCJtaWxlc3RvbmUiLDYwMTkyKSxnaXRQdWxsUmVxdWVzdE1pbGVzdG9uZTpmKCJnaXQtcHVsbC1yZXF1ZXN0LW1pbGVzdG9uZSIsNjAxOTIpLG1vcnRhckJvYXJkOmYoIm1vcnRhci1ib2FyZCIsNjAxOTMpLG1vdmU6ZigibW92ZSIsNjAxOTQpLG11bHRpcGxlV2luZG93czpmKCJtdWx0aXBsZS13aW5kb3dzIiw2MDE5NSksbXV0ZTpmKCJtdXRlIiw2MDE5Niksbm9OZXdsaW5lOmYoIm5vLW5ld2xpbmUiLDYwMTk3KSxub3RlOmYoIm5vdGUiLDYwMTk4KSxvY3RvZmFjZTpmKCJvY3RvZmFjZSIsNjAxOTkpLG9wZW5QcmV2aWV3OmYoIm9wZW4tcHJldmlldyIsNjAyMDApLHBhY2thZ2U6ZigicGFja2FnZSIsNjAyMDEpLHBhaW50Y2FuOmYoInBhaW50Y2FuIiw2MDIwMikscGluOmYoInBpbiIsNjAyMDMpLHBsYXk6ZigicGxheSIsNjAyMDQpLHJ1bjpmKCJydW4iLDYwMjA0KSxwbHVnOmYoInBsdWciLDYwMjA1KSxwcmVzZXJ2ZUNhc2U6ZigicHJlc2VydmUtY2FzZSIsNjAyMDYpLHByZXZpZXc6ZigicHJldmlldyIsNjAyMDcpLHByb2plY3Q6ZigicHJvamVjdCIsNjAyMDgpLHB1bHNlOmYoInB1bHNlIiw2MDIwOSkscXVlc3Rpb246ZigicXVlc3Rpb24iLDYwMjEwKSxxdW90ZTpmKCJxdW90ZSIsNjAyMTEpLHJhZGlvVG93ZXI6ZigicmFkaW8tdG93ZXIiLDYwMjEyKSxyZWFjdGlvbnM6ZigicmVhY3Rpb25zIiw2MDIxMykscmVmZXJlbmNlczpmKCJyZWZlcmVuY2VzIiw2MDIxNCkscmVmcmVzaDpmKCJyZWZyZXNoIiw2MDIxNSkscmVnZXg6ZigicmVnZXgiLDYwMjE2KSxyZW1vdGVFeHBsb3JlcjpmKCJyZW1vdGUtZXhwbG9yZXIiLDYwMjE3KSxyZW1vdGU6ZigicmVtb3RlIiw2MDIxOCkscmVtb3ZlOmYoInJlbW92ZSIsNjAyMTkpLHJlcGxhY2VBbGw6ZigicmVwbGFjZS1hbGwiLDYwMjIwKSxyZXBsYWNlOmYoInJlcGxhY2UiLDYwMjIxKSxyZXBvQ2xvbmU6ZigicmVwby1jbG9uZSIsNjAyMjIpLHJlcG9Gb3JjZVB1c2g6ZigicmVwby1mb3JjZS1wdXNoIiw2MDIyMykscmVwb1B1bGw6ZigicmVwby1wdWxsIiw2MDIyNCkscmVwb1B1c2g6ZigicmVwby1wdXNoIiw2MDIyNSkscmVwb3J0OmYoInJlcG9ydCIsNjAyMjYpLHJlcXVlc3RDaGFuZ2VzOmYoInJlcXVlc3QtY2hhbmdlcyIsNjAyMjcpLHJvY2tldDpmKCJyb2NrZXQiLDYwMjI4KSxyb290Rm9sZGVyT3BlbmVkOmYoInJvb3QtZm9sZGVyLW9wZW5lZCIsNjAyMjkpLHJvb3RGb2xkZXI6Zigicm9vdC1mb2xkZXIiLDYwMjMwKSxyc3M6ZigicnNzIiw2MDIzMSkscnVieTpmKCJydWJ5Iiw2MDIzMiksc2F2ZUFsbDpmKCJzYXZlLWFsbCIsNjAyMzMpLHNhdmVBczpmKCJzYXZlLWFzIiw2MDIzNCksc2F2ZTpmKCJzYXZlIiw2MDIzNSksc2NyZWVuRnVsbDpmKCJzY3JlZW4tZnVsbCIsNjAyMzYpLHNjcmVlbk5vcm1hbDpmKCJzY3JlZW4tbm9ybWFsIiw2MDIzNyksc2VhcmNoU3RvcDpmKCJzZWFyY2gtc3RvcCIsNjAyMzgpLHNlcnZlcjpmKCJzZXJ2ZXIiLDYwMjQwKSxzZXR0aW5nc0dlYXI6Zigic2V0dGluZ3MtZ2VhciIsNjAyNDEpLHNldHRpbmdzOmYoInNldHRpbmdzIiw2MDI0Miksc2hpZWxkOmYoInNoaWVsZCIsNjAyNDMpLHNtaWxleTpmKCJzbWlsZXkiLDYwMjQ0KSxzb3J0UHJlY2VkZW5jZTpmKCJzb3J0LXByZWNlZGVuY2UiLDYwMjQ1KSxzcGxpdEhvcml6b250YWw6Zigic3BsaXQtaG9yaXpvbnRhbCIsNjAyNDYpLHNwbGl0VmVydGljYWw6Zigic3BsaXQtdmVydGljYWwiLDYwMjQ3KSxzcXVpcnJlbDpmKCJzcXVpcnJlbCIsNjAyNDgpLHN0YXJGdWxsOmYoInN0YXItZnVsbCIsNjAyNDkpLHN0YXJIYWxmOmYoInN0YXItaGFsZiIsNjAyNTApLHN5bWJvbENsYXNzOmYoInN5bWJvbC1jbGFzcyIsNjAyNTEpLHN5bWJvbENvbG9yOmYoInN5bWJvbC1jb2xvciIsNjAyNTIpLHN5bWJvbENvbnN0YW50OmYoInN5bWJvbC1jb25zdGFudCIsNjAyNTMpLHN5bWJvbEVudW1NZW1iZXI6Zigic3ltYm9sLWVudW0tbWVtYmVyIiw2MDI1NCksc3ltYm9sRmllbGQ6Zigic3ltYm9sLWZpZWxkIiw2MDI1NSksc3ltYm9sRmlsZTpmKCJzeW1ib2wtZmlsZSIsNjAyNTYpLHN5bWJvbEludGVyZmFjZTpmKCJzeW1ib2wtaW50ZXJmYWNlIiw2MDI1Nyksc3ltYm9sS2V5d29yZDpmKCJzeW1ib2wta2V5d29yZCIsNjAyNTgpLHN5bWJvbE1pc2M6Zigic3ltYm9sLW1pc2MiLDYwMjU5KSxzeW1ib2xPcGVyYXRvcjpmKCJzeW1ib2wtb3BlcmF0b3IiLDYwMjYwKSxzeW1ib2xQcm9wZXJ0eTpmKCJzeW1ib2wtcHJvcGVydHkiLDYwMjYxKSx3cmVuY2g6Zigid3JlbmNoIiw2MDI2MSksd3JlbmNoU3ViYWN0aW9uOmYoIndyZW5jaC1zdWJhY3Rpb24iLDYwMjYxKSxzeW1ib2xTbmlwcGV0OmYoInN5bWJvbC1zbmlwcGV0Iiw2MDI2MiksdGFza2xpc3Q6ZigidGFza2xpc3QiLDYwMjYzKSx0ZWxlc2NvcGU6ZigidGVsZXNjb3BlIiw2MDI2NCksdGV4dFNpemU6ZigidGV4dC1zaXplIiw2MDI2NSksdGhyZWVCYXJzOmYoInRocmVlLWJhcnMiLDYwMjY2KSx0aHVtYnNkb3duOmYoInRodW1ic2Rvd24iLDYwMjY3KSx0aHVtYnN1cDpmKCJ0aHVtYnN1cCIsNjAyNjgpLHRvb2xzOmYoInRvb2xzIiw2MDI2OSksdHJpYW5nbGVEb3duOmYoInRyaWFuZ2xlLWRvd24iLDYwMjcwKSx0cmlhbmdsZUxlZnQ6ZigidHJpYW5nbGUtbGVmdCIsNjAyNzEpLHRyaWFuZ2xlUmlnaHQ6ZigidHJpYW5nbGUtcmlnaHQiLDYwMjcyKSx0cmlhbmdsZVVwOmYoInRyaWFuZ2xlLXVwIiw2MDI3MyksdHdpdHRlcjpmKCJ0d2l0dGVyIiw2MDI3NCksdW5mb2xkOmYoInVuZm9sZCIsNjAyNzUpLHVubG9jazpmKCJ1bmxvY2siLDYwMjc2KSx1bm11dGU6ZigidW5tdXRlIiw2MDI3NyksdW52ZXJpZmllZDpmKCJ1bnZlcmlmaWVkIiw2MDI3OCksdmVyaWZpZWQ6ZigidmVyaWZpZWQiLDYwMjc5KSx2ZXJzaW9uczpmKCJ2ZXJzaW9ucyIsNjAyODApLHZtQWN0aXZlOmYoInZtLWFjdGl2ZSIsNjAyODEpLHZtT3V0bGluZTpmKCJ2bS1vdXRsaW5lIiw2MDI4Miksdm1SdW5uaW5nOmYoInZtLXJ1bm5pbmciLDYwMjgzKSx3YXRjaDpmKCJ3YXRjaCIsNjAyODQpLHdoaXRlc3BhY2U6Zigid2hpdGVzcGFjZSIsNjAyODUpLHdob2xlV29yZDpmKCJ3aG9sZS13b3JkIiw2MDI4Niksd2luZG93OmYoIndpbmRvdyIsNjAyODcpLHdvcmRXcmFwOmYoIndvcmQtd3JhcCIsNjAyODgpLHpvb21JbjpmKCJ6b29tLWluIiw2MDI4OSksem9vbU91dDpmKCJ6b29tLW91dCIsNjAyOTApLGxpc3RGaWx0ZXI6ZigibGlzdC1maWx0ZXIiLDYwMjkxKSxsaXN0RmxhdDpmKCJsaXN0LWZsYXQiLDYwMjkyKSxsaXN0U2VsZWN0aW9uOmYoImxpc3Qtc2VsZWN0aW9uIiw2MDI5Myksc2VsZWN0aW9uOmYoInNlbGVjdGlvbiIsNjAyOTMpLGxpc3RUcmVlOmYoImxpc3QtdHJlZSIsNjAyOTQpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uVW52ZXJpZmllZDpmKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLDYwMjk1KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbjpmKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uIiw2MDI5NiksZGVidWdCcmVha3BvaW50RnVuY3Rpb25EaXNhYmxlZDpmKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLWRpc2FibGVkIiw2MDI5NiksZGVidWdTdGFja2ZyYW1lQWN0aXZlOmYoImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIiw2MDI5NyksY2lyY2xlU21hbGxGaWxsZWQ6ZigiY2lyY2xlLXNtYWxsLWZpbGxlZCIsNjAyOTgpLGRlYnVnU3RhY2tmcmFtZURvdDpmKCJkZWJ1Zy1zdGFja2ZyYW1lLWRvdCIsNjAyOTgpLHRlcm1pbmFsRGVjb3JhdGlvbk1hcms6ZigidGVybWluYWwtZGVjb3JhdGlvbi1tYXJrIiw2MDI5OCksZGVidWdTdGFja2ZyYW1lOmYoImRlYnVnLXN0YWNrZnJhbWUiLDYwMjk5KSxkZWJ1Z1N0YWNrZnJhbWVGb2N1c2VkOmYoImRlYnVnLXN0YWNrZnJhbWUtZm9jdXNlZCIsNjAyOTkpLGRlYnVnQnJlYWtwb2ludFVuc3VwcG9ydGVkOmYoImRlYnVnLWJyZWFrcG9pbnQtdW5zdXBwb3J0ZWQiLDYwMzAwKSxzeW1ib2xTdHJpbmc6Zigic3ltYm9sLXN0cmluZyIsNjAzMDEpLGRlYnVnUmV2ZXJzZUNvbnRpbnVlOmYoImRlYnVnLXJldmVyc2UtY29udGludWUiLDYwMzAyKSxkZWJ1Z1N0ZXBCYWNrOmYoImRlYnVnLXN0ZXAtYmFjayIsNjAzMDMpLGRlYnVnUmVzdGFydEZyYW1lOmYoImRlYnVnLXJlc3RhcnQtZnJhbWUiLDYwMzA0KSxkZWJ1Z0FsdDpmKCJkZWJ1Zy1hbHQiLDYwMzA1KSxjYWxsSW5jb21pbmc6ZigiY2FsbC1pbmNvbWluZyIsNjAzMDYpLGNhbGxPdXRnb2luZzpmKCJjYWxsLW91dGdvaW5nIiw2MDMwNyksbWVudTpmKCJtZW51Iiw2MDMwOCksZXhwYW5kQWxsOmYoImV4cGFuZC1hbGwiLDYwMzA5KSxmZWVkYmFjazpmKCJmZWVkYmFjayIsNjAzMTApLGdpdFB1bGxSZXF1ZXN0UmV2aWV3ZXI6ZigiZ2l0LXB1bGwtcmVxdWVzdC1yZXZpZXdlciIsNjAzMTApLGdyb3VwQnlSZWZUeXBlOmYoImdyb3VwLWJ5LXJlZi10eXBlIiw2MDMxMSksdW5ncm91cEJ5UmVmVHlwZTpmKCJ1bmdyb3VwLWJ5LXJlZi10eXBlIiw2MDMxMiksYWNjb3VudDpmKCJhY2NvdW50Iiw2MDMxMyksZ2l0UHVsbFJlcXVlc3RBc3NpZ25lZTpmKCJnaXQtcHVsbC1yZXF1ZXN0LWFzc2lnbmVlIiw2MDMxMyksYmVsbERvdDpmKCJiZWxsLWRvdCIsNjAzMTQpLGRlYnVnQ29uc29sZTpmKCJkZWJ1Zy1jb25zb2xlIiw2MDMxNSksbGlicmFyeTpmKCJsaWJyYXJ5Iiw2MDMxNiksb3V0cHV0OmYoIm91dHB1dCIsNjAzMTcpLHJ1bkFsbDpmKCJydW4tYWxsIiw2MDMxOCksc3luY0lnbm9yZWQ6Zigic3luYy1pZ25vcmVkIiw2MDMxOSkscGlubmVkOmYoInBpbm5lZCIsNjAzMjApLGdpdGh1YkludmVydGVkOmYoImdpdGh1Yi1pbnZlcnRlZCIsNjAzMjEpLHNlcnZlclByb2Nlc3M6Zigic2VydmVyLXByb2Nlc3MiLDYwMzIyKSxzZXJ2ZXJFbnZpcm9ubWVudDpmKCJzZXJ2ZXItZW52aXJvbm1lbnQiLDYwMzIzKSxwYXNzOmYoInBhc3MiLDYwMzI0KSxpc3N1ZUNsb3NlZDpmKCJpc3N1ZS1jbG9zZWQiLDYwMzI0KSxzdG9wQ2lyY2xlOmYoInN0b3AtY2lyY2xlIiw2MDMyNSkscGxheUNpcmNsZTpmKCJwbGF5LWNpcmNsZSIsNjAzMjYpLHJlY29yZDpmKCJyZWNvcmQiLDYwMzI3KSxkZWJ1Z0FsdFNtYWxsOmYoImRlYnVnLWFsdC1zbWFsbCIsNjAzMjgpLHZtQ29ubmVjdDpmKCJ2bS1jb25uZWN0Iiw2MDMyOSksY2xvdWQ6ZigiY2xvdWQiLDYwMzMwKSxtZXJnZTpmKCJtZXJnZSIsNjAzMzEpLGV4cG9ydDpmKCJleHBvcnQiLDYwMzMyKSxncmFwaExlZnQ6ZigiZ3JhcGgtbGVmdCIsNjAzMzMpLG1hZ25ldDpmKCJtYWduZXQiLDYwMzM0KSxub3RlYm9vazpmKCJub3RlYm9vayIsNjAzMzUpLHJlZG86ZigicmVkbyIsNjAzMzYpLGNoZWNrQWxsOmYoImNoZWNrLWFsbCIsNjAzMzcpLHBpbm5lZERpcnR5OmYoInBpbm5lZC1kaXJ0eSIsNjAzMzgpLHBhc3NGaWxsZWQ6ZigicGFzcy1maWxsZWQiLDYwMzM5KSxjaXJjbGVMYXJnZUZpbGxlZDpmKCJjaXJjbGUtbGFyZ2UtZmlsbGVkIiw2MDM0MCksY2lyY2xlTGFyZ2U6ZigiY2lyY2xlLWxhcmdlIiw2MDM0MSksY2lyY2xlTGFyZ2VPdXRsaW5lOmYoImNpcmNsZS1sYXJnZS1vdXRsaW5lIiw2MDM0MSksY29tYmluZTpmKCJjb21iaW5lIiw2MDM0MiksZ2F0aGVyOmYoImdhdGhlciIsNjAzNDIpLHRhYmxlOmYoInRhYmxlIiw2MDM0MyksdmFyaWFibGVHcm91cDpmKCJ2YXJpYWJsZS1ncm91cCIsNjAzNDQpLHR5cGVIaWVyYXJjaHk6ZigidHlwZS1oaWVyYXJjaHkiLDYwMzQ1KSx0eXBlSGllcmFyY2h5U3ViOmYoInR5cGUtaGllcmFyY2h5LXN1YiIsNjAzNDYpLHR5cGVIaWVyYXJjaHlTdXBlcjpmKCJ0eXBlLWhpZXJhcmNoeS1zdXBlciIsNjAzNDcpLGdpdFB1bGxSZXF1ZXN0Q3JlYXRlOmYoImdpdC1wdWxsLXJlcXVlc3QtY3JlYXRlIiw2MDM0OCkscnVuQWJvdmU6ZigicnVuLWFib3ZlIiw2MDM0OSkscnVuQmVsb3c6ZigicnVuLWJlbG93Iiw2MDM1MCksbm90ZWJvb2tUZW1wbGF0ZTpmKCJub3RlYm9vay10ZW1wbGF0ZSIsNjAzNTEpLGRlYnVnUmVydW46ZigiZGVidWctcmVydW4iLDYwMzUyKSx3b3Jrc3BhY2VUcnVzdGVkOmYoIndvcmtzcGFjZS10cnVzdGVkIiw2MDM1Myksd29ya3NwYWNlVW50cnVzdGVkOmYoIndvcmtzcGFjZS11bnRydXN0ZWQiLDYwMzU0KSx3b3Jrc3BhY2VVbmtub3duOmYoIndvcmtzcGFjZS11bmtub3duIiw2MDM1NSksdGVybWluYWxDbWQ6ZigidGVybWluYWwtY21kIiw2MDM1NiksdGVybWluYWxEZWJpYW46ZigidGVybWluYWwtZGViaWFuIiw2MDM1NyksdGVybWluYWxMaW51eDpmKCJ0ZXJtaW5hbC1saW51eCIsNjAzNTgpLHRlcm1pbmFsUG93ZXJzaGVsbDpmKCJ0ZXJtaW5hbC1wb3dlcnNoZWxsIiw2MDM1OSksdGVybWluYWxUbXV4OmYoInRlcm1pbmFsLXRtdXgiLDYwMzYwKSx0ZXJtaW5hbFVidW50dTpmKCJ0ZXJtaW5hbC11YnVudHUiLDYwMzYxKSx0ZXJtaW5hbEJhc2g6ZigidGVybWluYWwtYmFzaCIsNjAzNjIpLGFycm93U3dhcDpmKCJhcnJvdy1zd2FwIiw2MDM2MyksY29weTpmKCJjb3B5Iiw2MDM2NCkscGVyc29uQWRkOmYoInBlcnNvbi1hZGQiLDYwMzY1KSxmaWx0ZXJGaWxsZWQ6ZigiZmlsdGVyLWZpbGxlZCIsNjAzNjYpLHdhbmQ6Zigid2FuZCIsNjAzNjcpLGRlYnVnTGluZUJ5TGluZTpmKCJkZWJ1Zy1saW5lLWJ5LWxpbmUiLDYwMzY4KSxpbnNwZWN0OmYoImluc3BlY3QiLDYwMzY5KSxsYXllcnM6ZigibGF5ZXJzIiw2MDM3MCksbGF5ZXJzRG90OmYoImxheWVycy1kb3QiLDYwMzcxKSxsYXllcnNBY3RpdmU6ZigibGF5ZXJzLWFjdGl2ZSIsNjAzNzIpLGNvbXBhc3M6ZigiY29tcGFzcyIsNjAzNzMpLGNvbXBhc3NEb3Q6ZigiY29tcGFzcy1kb3QiLDYwMzc0KSxjb21wYXNzQWN0aXZlOmYoImNvbXBhc3MtYWN0aXZlIiw2MDM3NSksYXp1cmU6ZigiYXp1cmUiLDYwMzc2KSxpc3N1ZURyYWZ0OmYoImlzc3VlLWRyYWZ0Iiw2MDM3NyksZ2l0UHVsbFJlcXVlc3RDbG9zZWQ6ZigiZ2l0LXB1bGwtcmVxdWVzdC1jbG9zZWQiLDYwMzc4KSxnaXRQdWxsUmVxdWVzdERyYWZ0OmYoImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLDYwMzc5KSxkZWJ1Z0FsbDpmKCJkZWJ1Zy1hbGwiLDYwMzgwKSxkZWJ1Z0NvdmVyYWdlOmYoImRlYnVnLWNvdmVyYWdlIiw2MDM4MSkscnVuRXJyb3JzOmYoInJ1bi1lcnJvcnMiLDYwMzgyKSxmb2xkZXJMaWJyYXJ5OmYoImZvbGRlci1saWJyYXJ5Iiw2MDM4MyksZGVidWdDb250aW51ZVNtYWxsOmYoImRlYnVnLWNvbnRpbnVlLXNtYWxsIiw2MDM4NCksYmVha2VyU3RvcDpmKCJiZWFrZXItc3RvcCIsNjAzODUpLGdyYXBoTGluZTpmKCJncmFwaC1saW5lIiw2MDM4NiksZ3JhcGhTY2F0dGVyOmYoImdyYXBoLXNjYXR0ZXIiLDYwMzg3KSxwaWVDaGFydDpmKCJwaWUtY2hhcnQiLDYwMzg4KSxicmFja2V0OmYoImJyYWNrZXQiLDYwMTc1KSxicmFja2V0RG90OmYoImJyYWNrZXQtZG90Iiw2MDM4OSksYnJhY2tldEVycm9yOmYoImJyYWNrZXQtZXJyb3IiLDYwMzkwKSxsb2NrU21hbGw6ZigibG9jay1zbWFsbCIsNjAzOTEpLGF6dXJlRGV2b3BzOmYoImF6dXJlLWRldm9wcyIsNjAzOTIpLHZlcmlmaWVkRmlsbGVkOmYoInZlcmlmaWVkLWZpbGxlZCIsNjAzOTMpLG5ld2xpbmU6ZigibmV3bGluZSIsNjAzOTQpLGxheW91dDpmKCJsYXlvdXQiLDYwMzk1KSxsYXlvdXRBY3Rpdml0eWJhckxlZnQ6ZigibGF5b3V0LWFjdGl2aXR5YmFyLWxlZnQiLDYwMzk2KSxsYXlvdXRBY3Rpdml0eWJhclJpZ2h0OmYoImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIsNjAzOTcpLGxheW91dFBhbmVsTGVmdDpmKCJsYXlvdXQtcGFuZWwtbGVmdCIsNjAzOTgpLGxheW91dFBhbmVsQ2VudGVyOmYoImxheW91dC1wYW5lbC1jZW50ZXIiLDYwMzk5KSxsYXlvdXRQYW5lbEp1c3RpZnk6ZigibGF5b3V0LXBhbmVsLWp1c3RpZnkiLDYwNDAwKSxsYXlvdXRQYW5lbFJpZ2h0OmYoImxheW91dC1wYW5lbC1yaWdodCIsNjA0MDEpLGxheW91dFBhbmVsOmYoImxheW91dC1wYW5lbCIsNjA0MDIpLGxheW91dFNpZGViYXJMZWZ0OmYoImxheW91dC1zaWRlYmFyLWxlZnQiLDYwNDAzKSxsYXlvdXRTaWRlYmFyUmlnaHQ6ZigibGF5b3V0LXNpZGViYXItcmlnaHQiLDYwNDA0KSxsYXlvdXRTdGF0dXNiYXI6ZigibGF5b3V0LXN0YXR1c2JhciIsNjA0MDUpLGxheW91dE1lbnViYXI6ZigibGF5b3V0LW1lbnViYXIiLDYwNDA2KSxsYXlvdXRDZW50ZXJlZDpmKCJsYXlvdXQtY2VudGVyZWQiLDYwNDA3KSx0YXJnZXQ6ZigidGFyZ2V0Iiw2MDQwOCksaW5kZW50OmYoImluZGVudCIsNjA0MDkpLHJlY29yZFNtYWxsOmYoInJlY29yZC1zbWFsbCIsNjA0MTApLGVycm9yU21hbGw6ZigiZXJyb3Itc21hbGwiLDYwNDExKSx0ZXJtaW5hbERlY29yYXRpb25FcnJvcjpmKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLWVycm9yIiw2MDQxMSksYXJyb3dDaXJjbGVEb3duOmYoImFycm93LWNpcmNsZS1kb3duIiw2MDQxMiksYXJyb3dDaXJjbGVMZWZ0OmYoImFycm93LWNpcmNsZS1sZWZ0Iiw2MDQxMyksYXJyb3dDaXJjbGVSaWdodDpmKCJhcnJvdy1jaXJjbGUtcmlnaHQiLDYwNDE0KSxhcnJvd0NpcmNsZVVwOmYoImFycm93LWNpcmNsZS11cCIsNjA0MTUpLGxheW91dFNpZGViYXJSaWdodE9mZjpmKCJsYXlvdXQtc2lkZWJhci1yaWdodC1vZmYiLDYwNDE2KSxsYXlvdXRQYW5lbE9mZjpmKCJsYXlvdXQtcGFuZWwtb2ZmIiw2MDQxNyksbGF5b3V0U2lkZWJhckxlZnRPZmY6ZigibGF5b3V0LXNpZGViYXItbGVmdC1vZmYiLDYwNDE4KSxibGFuazpmKCJibGFuayIsNjA0MTkpLGhlYXJ0RmlsbGVkOmYoImhlYXJ0LWZpbGxlZCIsNjA0MjApLG1hcDpmKCJtYXAiLDYwNDIxKSxtYXBIb3Jpem9udGFsOmYoIm1hcC1ob3Jpem9udGFsIiw2MDQyMSksZm9sZEhvcml6b250YWw6ZigiZm9sZC1ob3Jpem9udGFsIiw2MDQyMSksbWFwRmlsbGVkOmYoIm1hcC1maWxsZWQiLDYwNDIyKSxtYXBIb3Jpem9udGFsRmlsbGVkOmYoIm1hcC1ob3Jpem9udGFsLWZpbGxlZCIsNjA0MjIpLGZvbGRIb3Jpem9udGFsRmlsbGVkOmYoImZvbGQtaG9yaXpvbnRhbC1maWxsZWQiLDYwNDIyKSxjaXJjbGVTbWFsbDpmKCJjaXJjbGUtc21hbGwiLDYwNDIzKSxiZWxsU2xhc2g6ZigiYmVsbC1zbGFzaCIsNjA0MjQpLGJlbGxTbGFzaERvdDpmKCJiZWxsLXNsYXNoLWRvdCIsNjA0MjUpLGNvbW1lbnRVbnJlc29sdmVkOmYoImNvbW1lbnQtdW5yZXNvbHZlZCIsNjA0MjYpLGdpdFB1bGxSZXF1ZXN0R29Ub0NoYW5nZXM6ZigiZ2l0LXB1bGwtcmVxdWVzdC1nby10by1jaGFuZ2VzIiw2MDQyNyksZ2l0UHVsbFJlcXVlc3ROZXdDaGFuZ2VzOmYoImdpdC1wdWxsLXJlcXVlc3QtbmV3LWNoYW5nZXMiLDYwNDI4KSxzZWFyY2hGdXp6eTpmKCJzZWFyY2gtZnV6enkiLDYwNDI5KSxjb21tZW50RHJhZnQ6ZigiY29tbWVudC1kcmFmdCIsNjA0MzApLHNlbmQ6Zigic2VuZCIsNjA0MzEpLHNwYXJrbGU6Zigic3BhcmtsZSIsNjA0MzIpLGluc2VydDpmKCJpbnNlcnQiLDYwNDMzKSxtaWM6ZigibWljIiw2MDQzNCksdGh1bWJzZG93bkZpbGxlZDpmKCJ0aHVtYnNkb3duLWZpbGxlZCIsNjA0MzUpLHRodW1ic3VwRmlsbGVkOmYoInRodW1ic3VwLWZpbGxlZCIsNjA0MzYpLGNvZmZlZTpmKCJjb2ZmZWUiLDYwNDM3KSxzbmFrZTpmKCJzbmFrZSIsNjA0MzgpLGdhbWU6ZigiZ2FtZSIsNjA0MzkpLHZyOmYoInZyIiw2MDQ0MCksY2hpcDpmKCJjaGlwIiw2MDQ0MSkscGlhbm86ZigicGlhbm8iLDYwNDQyKSxtdXNpYzpmKCJtdXNpYyIsNjA0NDMpLG1pY0ZpbGxlZDpmKCJtaWMtZmlsbGVkIiw2MDQ0NCkscmVwb0ZldGNoOmYoInJlcG8tZmV0Y2giLDYwNDQ1KSxjb3BpbG90OmYoImNvcGlsb3QiLDYwNDQ2KSxsaWdodGJ1bGJTcGFya2xlOmYoImxpZ2h0YnVsYi1zcGFya2xlIiw2MDQ0Nykscm9ib3Q6Zigicm9ib3QiLDYwNDQ4KSxzcGFya2xlRmlsbGVkOmYoInNwYXJrbGUtZmlsbGVkIiw2MDQ0OSksZGlmZlNpbmdsZTpmKCJkaWZmLXNpbmdsZSIsNjA0NTApLGRpZmZNdWx0aXBsZTpmKCJkaWZmLW11bHRpcGxlIiw2MDQ1MSksc3Vycm91bmRXaXRoOmYoInN1cnJvdW5kLXdpdGgiLDYwNDUyKSxzaGFyZTpmKCJzaGFyZSIsNjA0NTMpLGdpdFN0YXNoOmYoImdpdC1zdGFzaCIsNjA0NTQpLGdpdFN0YXNoQXBwbHk6ZigiZ2l0LXN0YXNoLWFwcGx5Iiw2MDQ1NSksZ2l0U3Rhc2hQb3A6ZigiZ2l0LXN0YXNoLXBvcCIsNjA0NTYpLHZzY29kZTpmKCJ2c2NvZGUiLDYwNDU3KSx2c2NvZGVJbnNpZGVyczpmKCJ2c2NvZGUtaW5zaWRlcnMiLDYwNDU4KSxjb2RlT3NzOmYoImNvZGUtb3NzIiw2MDQ1OSkscnVuQ292ZXJhZ2U6ZigicnVuLWNvdmVyYWdlIiw2MDQ2MCkscnVuQWxsQ292ZXJhZ2U6ZigicnVuLWFsbC1jb3ZlcmFnZSIsNjA0NjEpLGNvdmVyYWdlOmYoImNvdmVyYWdlIiw2MDQ2MiksZ2l0aHViUHJvamVjdDpmKCJnaXRodWItcHJvamVjdCIsNjA0NjMpLG1hcFZlcnRpY2FsOmYoIm1hcC12ZXJ0aWNhbCIsNjA0NjQpLGZvbGRWZXJ0aWNhbDpmKCJmb2xkLXZlcnRpY2FsIiw2MDQ2NCksbWFwVmVydGljYWxGaWxsZWQ6ZigibWFwLXZlcnRpY2FsLWZpbGxlZCIsNjA0NjUpLGZvbGRWZXJ0aWNhbEZpbGxlZDpmKCJmb2xkLXZlcnRpY2FsLWZpbGxlZCIsNjA0NjUpLGdvVG9TZWFyY2g6ZigiZ28tdG8tc2VhcmNoIiw2MDQ2NikscGVyY2VudGFnZTpmKCJwZXJjZW50YWdlIiw2MDQ2Nyksc29ydFBlcmNlbnRhZ2U6Zigic29ydC1wZXJjZW50YWdlIiw2MDQ2NyksYXR0YWNoOmYoImF0dGFjaCIsNjA0NjgpfSx5dT17ZGlhbG9nRXJyb3I6ZigiZGlhbG9nLWVycm9yIiwiZXJyb3IiKSxkaWFsb2dXYXJuaW5nOmYoImRpYWxvZy13YXJuaW5nIiwid2FybmluZyIpLGRpYWxvZ0luZm86ZigiZGlhbG9nLWluZm8iLCJpbmZvIiksZGlhbG9nQ2xvc2U6ZigiZGlhbG9nLWNsb3NlIiwiY2xvc2UiKSx0cmVlSXRlbUV4cGFuZGVkOmYoInRyZWUtaXRlbS1leHBhbmRlZCIsImNoZXZyb24tZG93biIpLHRyZWVGaWx0ZXJPblR5cGVPbjpmKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9uIiwibGlzdC1maWx0ZXIiKSx0cmVlRmlsdGVyT25UeXBlT2ZmOmYoInRyZWUtZmlsdGVyLW9uLXR5cGUtb2ZmIiwibGlzdC1zZWxlY3Rpb24iKSx0cmVlRmlsdGVyQ2xlYXI6ZigidHJlZS1maWx0ZXItY2xlYXIiLCJjbG9zZSIpLHRyZWVJdGVtTG9hZGluZzpmKCJ0cmVlLWl0ZW0tbG9hZGluZyIsImxvYWRpbmciKSxtZW51U2VsZWN0aW9uOmYoIm1lbnUtc2VsZWN0aW9uIiwiY2hlY2siKSxtZW51U3VibWVudTpmKCJtZW51LXN1Ym1lbnUiLCJjaGV2cm9uLXJpZ2h0IiksbWVudUJhck1vcmU6ZigibWVudWJhci1tb3JlIiwibW9yZSIpLHNjcm9sbGJhckJ1dHRvbkxlZnQ6Zigic2Nyb2xsYmFyLWJ1dHRvbi1sZWZ0IiwidHJpYW5nbGUtbGVmdCIpLHNjcm9sbGJhckJ1dHRvblJpZ2h0OmYoInNjcm9sbGJhci1idXR0b24tcmlnaHQiLCJ0cmlhbmdsZS1yaWdodCIpLHNjcm9sbGJhckJ1dHRvblVwOmYoInNjcm9sbGJhci1idXR0b24tdXAiLCJ0cmlhbmdsZS11cCIpLHNjcm9sbGJhckJ1dHRvbkRvd246Zigic2Nyb2xsYmFyLWJ1dHRvbi1kb3duIiwidHJpYW5nbGUtZG93biIpLHRvb2xCYXJNb3JlOmYoInRvb2xiYXItbW9yZSIsIm1vcmUiKSxxdWlja0lucHV0QmFjazpmKCJxdWljay1pbnB1dC1iYWNrIiwiYXJyb3ctbGVmdCIpLGRyb3BEb3duQnV0dG9uOmYoImRyb3AtZG93bi1idXR0b24iLDYwMDg0KSxzeW1ib2xDdXN0b21Db2xvcjpmKCJzeW1ib2wtY3VzdG9tY29sb3IiLDYwMjUyKSxleHBvcnRJY29uOmYoImV4cG9ydCIsNjAzMzIpLHdvcmtzcGFjZVVuc3BlY2lmaWVkOmYoIndvcmtzcGFjZS11bnNwZWNpZmllZCIsNjAzNTUpLG5ld0xpbmU6ZigibmV3bGluZSIsNjAzOTQpLHRodW1ic0Rvd25GaWxsZWQ6ZigidGh1bWJzZG93bi1maWxsZWQiLDYwNDM1KSx0aHVtYnNVcEZpbGxlZDpmKCJ0aHVtYnN1cC1maWxsZWQiLDYwNDM2KSxnaXRGZXRjaDpmKCJnaXQtZmV0Y2giLDYwNDQ1KSxsaWdodGJ1bGJTcGFya2xlQXV0b2ZpeDpmKCJsaWdodGJ1bGItc3BhcmtsZS1hdXRvZml4Iiw2MDQ0NyksZGVidWdCcmVha3BvaW50UGVuZGluZzpmKCJkZWJ1Zy1icmVha3BvaW50LXBlbmRpbmciLDYwMzc3KX0sVj17Li4ueHUsLi4ueXV9O2NsYXNzIHFpe2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHM9bmV3IE1hcCx0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcCx0aGlzLl9vbkRpZENoYW5nZT1uZXcgX2UsdGhpcy5vbkRpZENoYW5nZT10aGlzLl9vbkRpZENoYW5nZS5ldmVudCx0aGlzLl9jb2xvck1hcD1udWxsfWhhbmRsZUNoYW5nZSh0KXt0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOnQsY2hhbmdlZENvbG9yTWFwOiExfSl9cmVnaXN0ZXIodCxuKXtyZXR1cm4gdGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuc2V0KHQsbiksdGhpcy5oYW5kbGVDaGFuZ2UoW3RdKSxsbigoKT0+e3RoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmdldCh0KT09PW4mJih0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5kZWxldGUodCksdGhpcy5oYW5kbGVDaGFuZ2UoW3RdKSl9KX1nZXQodCl7cmV0dXJuIHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmdldCh0KXx8bnVsbH1yZWdpc3RlckZhY3RvcnkodCxuKXt0aGlzLl9mYWN0b3JpZXMuZ2V0KHQpPy5kaXNwb3NlKCk7Y29uc3Qgcj1uZXcgd3UodGhpcyx0LG4pO3JldHVybiB0aGlzLl9mYWN0b3JpZXMuc2V0KHQsciksbG4oKCk9Pntjb25zdCBpPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7IWl8fGkhPT1yfHwodGhpcy5fZmFjdG9yaWVzLmRlbGV0ZSh0KSxpLmRpc3Bvc2UoKSl9KX1hc3luYyBnZXRPckNyZWF0ZSh0KXtjb25zdCBuPXRoaXMuZ2V0KHQpO2lmKG4pcmV0dXJuIG47Y29uc3Qgcj10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpO3JldHVybiFyfHxyLmlzUmVzb2x2ZWQ/bnVsbDooYXdhaXQgci5yZXNvbHZlKCksdGhpcy5nZXQodCkpfWlzUmVzb2x2ZWQodCl7aWYodGhpcy5nZXQodCkpcmV0dXJuITA7Y29uc3Qgcj10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpO3JldHVybiEhKCFyfHxyLmlzUmVzb2x2ZWQpfXNldENvbG9yTWFwKHQpe3RoaXMuX2NvbG9yTWFwPXQsdGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczpBcnJheS5mcm9tKHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmtleXMoKSksY2hhbmdlZENvbG9yTWFwOiEwfSl9Z2V0Q29sb3JNYXAoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXB9Z2V0RGVmYXVsdEJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXAmJnRoaXMuX2NvbG9yTWFwLmxlbmd0aD4yP3RoaXMuX2NvbG9yTWFwWzJdOm51bGx9fWNsYXNzIHd1IGV4dGVuZHMgZHR7Z2V0IGlzUmVzb2x2ZWQoKXtyZXR1cm4gdGhpcy5faXNSZXNvbHZlZH1jb25zdHJ1Y3Rvcih0LG4scil7c3VwZXIoKSx0aGlzLl9yZWdpc3RyeT10LHRoaXMuX2xhbmd1YWdlSWQ9bix0aGlzLl9mYWN0b3J5PXIsdGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLl9yZXNvbHZlUHJvbWlzZT1udWxsLHRoaXMuX2lzUmVzb2x2ZWQ9ITF9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWQ9ITAsc3VwZXIuZGlzcG9zZSgpfWFzeW5jIHJlc29sdmUoKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVByb21pc2V8fCh0aGlzLl9yZXNvbHZlUHJvbWlzZT10aGlzLl9jcmVhdGUoKSksdGhpcy5fcmVzb2x2ZVByb21pc2V9YXN5bmMgX2NyZWF0ZSgpe2NvbnN0IHQ9YXdhaXQgdGhpcy5fZmFjdG9yeS50b2tlbml6YXRpb25TdXBwb3J0O3RoaXMuX2lzUmVzb2x2ZWQ9ITAsdCYmIXRoaXMuX2lzRGlzcG9zZWQmJnRoaXMuX3JlZ2lzdGVyKHRoaXMuX3JlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMuX2xhbmd1YWdlSWQsdCkpfX1jbGFzcyBfdXtjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5vZmZzZXQ9dCx0aGlzLnR5cGU9bix0aGlzLmxhbmd1YWdlPXIsdGhpcy5fdG9rZW5CcmFuZD12b2lkIDB9dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5vZmZzZXQrIiwgIit0aGlzLnR5cGUrIikifX12YXIgamk7KGZ1bmN0aW9uKGUpe2VbZS5JbmNyZWFzZT0wXT0iSW5jcmVhc2UiLGVbZS5EZWNyZWFzZT0xXT0iRGVjcmVhc2UifSkoaml8fChqaT17fSkpO3ZhciBXaTsoZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3Quc2V0KDAsVi5zeW1ib2xNZXRob2QpLHQuc2V0KDEsVi5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMixWLnN5bWJvbENvbnN0cnVjdG9yKSx0LnNldCgzLFYuc3ltYm9sRmllbGQpLHQuc2V0KDQsVi5zeW1ib2xWYXJpYWJsZSksdC5zZXQoNSxWLnN5bWJvbENsYXNzKSx0LnNldCg2LFYuc3ltYm9sU3RydWN0KSx0LnNldCg3LFYuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCg4LFYuc3ltYm9sTW9kdWxlKSx0LnNldCg5LFYuc3ltYm9sUHJvcGVydHkpLHQuc2V0KDEwLFYuc3ltYm9sRXZlbnQpLHQuc2V0KDExLFYuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDEyLFYuc3ltYm9sVW5pdCksdC5zZXQoMTMsVi5zeW1ib2xWYWx1ZSksdC5zZXQoMTUsVi5zeW1ib2xFbnVtKSx0LnNldCgxNCxWLnN5bWJvbENvbnN0YW50KSx0LnNldCgxNSxWLnN5bWJvbEVudW0pLHQuc2V0KDE2LFYuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMTcsVi5zeW1ib2xLZXl3b3JkKSx0LnNldCgyNyxWLnN5bWJvbFNuaXBwZXQpLHQuc2V0KDE4LFYuc3ltYm9sVGV4dCksdC5zZXQoMTksVi5zeW1ib2xDb2xvciksdC5zZXQoMjAsVi5zeW1ib2xGaWxlKSx0LnNldCgyMSxWLnN5bWJvbFJlZmVyZW5jZSksdC5zZXQoMjIsVi5zeW1ib2xDdXN0b21Db2xvciksdC5zZXQoMjMsVi5zeW1ib2xGb2xkZXIpLHQuc2V0KDI0LFYuc3ltYm9sVHlwZVBhcmFtZXRlciksdC5zZXQoMjUsVi5hY2NvdW50KSx0LnNldCgyNixWLmlzc3Vlcyk7ZnVuY3Rpb24gbihzKXtsZXQgYT10LmdldChzKTtyZXR1cm4gYXx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgQ29tcGxldGlvbkl0ZW1LaW5kICIrcyksYT1WLnN5bWJvbFByb3BlcnR5KSxhfWUudG9JY29uPW47Y29uc3Qgcj1uZXcgTWFwO3Iuc2V0KCJtZXRob2QiLDApLHIuc2V0KCJmdW5jdGlvbiIsMSksci5zZXQoImNvbnN0cnVjdG9yIiwyKSxyLnNldCgiZmllbGQiLDMpLHIuc2V0KCJ2YXJpYWJsZSIsNCksci5zZXQoImNsYXNzIiw1KSxyLnNldCgic3RydWN0Iiw2KSxyLnNldCgiaW50ZXJmYWNlIiw3KSxyLnNldCgibW9kdWxlIiw4KSxyLnNldCgicHJvcGVydHkiLDkpLHIuc2V0KCJldmVudCIsMTApLHIuc2V0KCJvcGVyYXRvciIsMTEpLHIuc2V0KCJ1bml0IiwxMiksci5zZXQoInZhbHVlIiwxMyksci5zZXQoImNvbnN0YW50IiwxNCksci5zZXQoImVudW0iLDE1KSxyLnNldCgiZW51bS1tZW1iZXIiLDE2KSxyLnNldCgiZW51bU1lbWJlciIsMTYpLHIuc2V0KCJrZXl3b3JkIiwxNyksci5zZXQoInNuaXBwZXQiLDI3KSxyLnNldCgidGV4dCIsMTgpLHIuc2V0KCJjb2xvciIsMTkpLHIuc2V0KCJmaWxlIiwyMCksci5zZXQoInJlZmVyZW5jZSIsMjEpLHIuc2V0KCJjdXN0b21jb2xvciIsMjIpLHIuc2V0KCJmb2xkZXIiLDIzKSxyLnNldCgidHlwZS1wYXJhbWV0ZXIiLDI0KSxyLnNldCgidHlwZVBhcmFtZXRlciIsMjQpLHIuc2V0KCJhY2NvdW50IiwyNSksci5zZXQoImlzc3VlIiwyNik7ZnVuY3Rpb24gaShzLGEpe2xldCBsPXIuZ2V0KHMpO3JldHVybiB0eXBlb2YgbD4idSImJiFhJiYobD05KSxsfWUuZnJvbVN0cmluZz1pfSkoV2l8fChXaT17fSkpO3ZhciBIaTsoZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0pKEhpfHwoSGk9e30pKTt2YXIgemk7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLlBhc3RlQXM9MV09IlBhc3RlQXMifSkoeml8fCh6aT17fSkpO3ZhciBHaTsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifSkoR2l8fChHaT17fSkpO3ZhciBKaTsoZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0pKEppfHwoSmk9e30pKSxYKCJBcnJheSIsImFycmF5IiksWCgiQm9vbGVhbiIsImJvb2xlYW4iKSxYKCJDbGFzcyIsImNsYXNzIiksWCgiQ29uc3RhbnQiLCJjb25zdGFudCIpLFgoIkNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiKSxYKCJFbnVtIiwiZW51bWVyYXRpb24iKSxYKCJFbnVtTWVtYmVyIiwiZW51bWVyYXRpb24gbWVtYmVyIiksWCgiRXZlbnQiLCJldmVudCIpLFgoIkZpZWxkIiwiZmllbGQiKSxYKCJGaWxlIiwiZmlsZSIpLFgoIkZ1bmN0aW9uIiwiZnVuY3Rpb24iKSxYKCJJbnRlcmZhY2UiLCJpbnRlcmZhY2UiKSxYKCJLZXkiLCJrZXkiKSxYKCJNZXRob2QiLCJtZXRob2QiKSxYKCJNb2R1bGUiLCJtb2R1bGUiKSxYKCJOYW1lc3BhY2UiLCJuYW1lc3BhY2UiKSxYKCJOdWxsIiwibnVsbCIpLFgoIk51bWJlciIsIm51bWJlciIpLFgoIk9iamVjdCIsIm9iamVjdCIpLFgoIk9wZXJhdG9yIiwib3BlcmF0b3IiKSxYKCJQYWNrYWdlIiwicGFja2FnZSIpLFgoIlByb3BlcnR5IiwicHJvcGVydHkiKSxYKCJTdHJpbmciLCJzdHJpbmciKSxYKCJTdHJ1Y3QiLCJzdHJ1Y3QiKSxYKCJUeXBlUGFyYW1ldGVyIiwidHlwZSBwYXJhbWV0ZXIiKSxYKCJWYXJpYWJsZSIsInZhcmlhYmxlIik7dmFyIFhpOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxWLnN5bWJvbEZpbGUpLHQuc2V0KDEsVi5zeW1ib2xNb2R1bGUpLHQuc2V0KDIsVi5zeW1ib2xOYW1lc3BhY2UpLHQuc2V0KDMsVi5zeW1ib2xQYWNrYWdlKSx0LnNldCg0LFYuc3ltYm9sQ2xhc3MpLHQuc2V0KDUsVi5zeW1ib2xNZXRob2QpLHQuc2V0KDYsVi5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoNyxWLnN5bWJvbEZpZWxkKSx0LnNldCg4LFYuc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDksVi5zeW1ib2xFbnVtKSx0LnNldCgxMCxWLnN5bWJvbEludGVyZmFjZSksdC5zZXQoMTEsVi5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMTIsVi5zeW1ib2xWYXJpYWJsZSksdC5zZXQoMTMsVi5zeW1ib2xDb25zdGFudCksdC5zZXQoMTQsVi5zeW1ib2xTdHJpbmcpLHQuc2V0KDE1LFYuc3ltYm9sTnVtYmVyKSx0LnNldCgxNixWLnN5bWJvbEJvb2xlYW4pLHQuc2V0KDE3LFYuc3ltYm9sQXJyYXkpLHQuc2V0KDE4LFYuc3ltYm9sT2JqZWN0KSx0LnNldCgxOSxWLnN5bWJvbEtleSksdC5zZXQoMjAsVi5zeW1ib2xOdWxsKSx0LnNldCgyMSxWLnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDIyLFYuc3ltYm9sU3RydWN0KSx0LnNldCgyMyxWLnN5bWJvbEV2ZW50KSx0LnNldCgyNCxWLnN5bWJvbE9wZXJhdG9yKSx0LnNldCgyNSxWLnN5bWJvbFR5cGVQYXJhbWV0ZXIpO2Z1bmN0aW9uIG4ocil7bGV0IGk9dC5nZXQocik7cmV0dXJuIGl8fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIFN5bWJvbEtpbmQgIityKSxpPVYuc3ltYm9sUHJvcGVydHkpLGl9ZS50b0ljb249bn0pKFhpfHwoWGk9e30pKTtsZXQgWTE9KGRlPWNsYXNze3N0YXRpYyBmcm9tVmFsdWUodCl7c3dpdGNoKHQpe2Nhc2UiY29tbWVudCI6cmV0dXJuIGRlLkNvbW1lbnQ7Y2FzZSJpbXBvcnRzIjpyZXR1cm4gZGUuSW1wb3J0cztjYXNlInJlZ2lvbiI6cmV0dXJuIGRlLlJlZ2lvbn1yZXR1cm4gbmV3IGRlKHQpfWNvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dH19LGRlLkNvbW1lbnQ9bmV3IGRlKCJjb21tZW50IiksZGUuSW1wb3J0cz1uZXcgZGUoImltcG9ydHMiKSxkZS5SZWdpb249bmV3IGRlKCJyZWdpb24iKSxkZSk7dmFyIFFpOyhmdW5jdGlvbihlKXtlW2UuQUlHZW5lcmF0ZWQ9MV09IkFJR2VuZXJhdGVkIn0pKFFpfHwoUWk9e30pKTt2YXIgWWk7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLkF1dG9tYXRpYz0xXT0iQXV0b21hdGljIn0pKFlpfHwoWWk9e30pKTt2YXIgWmk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJuIW58fHR5cGVvZiBuIT0ib2JqZWN0Ij8hMTp0eXBlb2Ygbi5pZD09InN0cmluZyImJnR5cGVvZiBuLnRpdGxlPT0ic3RyaW5nIn1lLmlzPXR9KShaaXx8KFppPXt9KSk7dmFyIEtpOyhmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0pKEtpfHwoS2k9e30pKSxuZXcgcWksbmV3IHFpO3ZhciBlczsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuQXV0b21hdGljPTFdPSJBdXRvbWF0aWMifSkoZXN8fChlcz17fSkpO3ZhciB0czsoZnVuY3Rpb24oZSl7ZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5EaXNhYmxlZD0xXT0iRGlzYWJsZWQiLGVbZS5FbmFibGVkPTJdPSJFbmFibGVkIn0pKHRzfHwodHM9e30pKTt2YXIgbnM7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLkF1dG89Ml09IkF1dG8ifSkobnN8fChucz17fSkpO3ZhciByczsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwV2hpdGVzcGFjZT0xXT0iS2VlcFdoaXRlc3BhY2UiLGVbZS5JbnNlcnRBc1NuaXBwZXQ9NF09Ikluc2VydEFzU25pcHBldCJ9KShyc3x8KHJzPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuTWV0aG9kPTBdPSJNZXRob2QiLGVbZS5GdW5jdGlvbj0xXT0iRnVuY3Rpb24iLGVbZS5Db25zdHJ1Y3Rvcj0yXT0iQ29uc3RydWN0b3IiLGVbZS5GaWVsZD0zXT0iRmllbGQiLGVbZS5WYXJpYWJsZT00XT0iVmFyaWFibGUiLGVbZS5DbGFzcz01XT0iQ2xhc3MiLGVbZS5TdHJ1Y3Q9Nl09IlN0cnVjdCIsZVtlLkludGVyZmFjZT03XT0iSW50ZXJmYWNlIixlW2UuTW9kdWxlPThdPSJNb2R1bGUiLGVbZS5Qcm9wZXJ0eT05XT0iUHJvcGVydHkiLGVbZS5FdmVudD0xMF09IkV2ZW50IixlW2UuT3BlcmF0b3I9MTFdPSJPcGVyYXRvciIsZVtlLlVuaXQ9MTJdPSJVbml0IixlW2UuVmFsdWU9MTNdPSJWYWx1ZSIsZVtlLkNvbnN0YW50PTE0XT0iQ29uc3RhbnQiLGVbZS5FbnVtPTE1XT0iRW51bSIsZVtlLkVudW1NZW1iZXI9MTZdPSJFbnVtTWVtYmVyIixlW2UuS2V5d29yZD0xN109IktleXdvcmQiLGVbZS5UZXh0PTE4XT0iVGV4dCIsZVtlLkNvbG9yPTE5XT0iQ29sb3IiLGVbZS5GaWxlPTIwXT0iRmlsZSIsZVtlLlJlZmVyZW5jZT0yMV09IlJlZmVyZW5jZSIsZVtlLkN1c3RvbWNvbG9yPTIyXT0iQ3VzdG9tY29sb3IiLGVbZS5Gb2xkZXI9MjNdPSJGb2xkZXIiLGVbZS5UeXBlUGFyYW1ldGVyPTI0XT0iVHlwZVBhcmFtZXRlciIsZVtlLlVzZXI9MjVdPSJVc2VyIixlW2UuSXNzdWU9MjZdPSJJc3N1ZSIsZVtlLlNuaXBwZXQ9MjddPSJTbmlwcGV0In0pKGlzfHwoaXM9e30pKTt2YXIgc3M7KGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0pKHNzfHwoc3M9e30pKTt2YXIgYXM7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9MV09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5UcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zPTJdPSJUcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zIn0pKGFzfHwoYXM9e30pKTt2YXIgb3M7KGZ1bmN0aW9uKGUpe2VbZS5FWEFDVD0wXT0iRVhBQ1QiLGVbZS5BQk9WRT0xXT0iQUJPVkUiLGVbZS5CRUxPVz0yXT0iQkVMT1cifSkob3N8fChvcz17fSkpO3ZhciBsczsoZnVuY3Rpb24oZSl7ZVtlLk5vdFNldD0wXT0iTm90U2V0IixlW2UuQ29udGVudEZsdXNoPTFdPSJDb250ZW50Rmx1c2giLGVbZS5SZWNvdmVyRnJvbU1hcmtlcnM9Ml09IlJlY292ZXJGcm9tTWFya2VycyIsZVtlLkV4cGxpY2l0PTNdPSJFeHBsaWNpdCIsZVtlLlBhc3RlPTRdPSJQYXN0ZSIsZVtlLlVuZG89NV09IlVuZG8iLGVbZS5SZWRvPTZdPSJSZWRvIn0pKGxzfHwobHM9e30pKTt2YXIgdXM7KGZ1bmN0aW9uKGUpe2VbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0pKHVzfHwodXM9e30pKTt2YXIgY3M7KGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KShjc3x8KGNzPXt9KSk7dmFyIGZzOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLktlZXA9MV09IktlZXAiLGVbZS5CcmFja2V0cz0yXT0iQnJhY2tldHMiLGVbZS5BZHZhbmNlZD0zXT0iQWR2YW5jZWQiLGVbZS5GdWxsPTRdPSJGdWxsIn0pKGZzfHwoZnM9e30pKTt2YXIgaHM7KGZ1bmN0aW9uKGUpe2VbZS5hY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXI9MF09ImFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3RlciIsZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyPTFdPSJhY2NlcHRTdWdnZXN0aW9uT25FbnRlciIsZVtlLmFjY2Vzc2liaWxpdHlTdXBwb3J0PTJdPSJhY2Nlc3NpYmlsaXR5U3VwcG9ydCIsZVtlLmFjY2Vzc2liaWxpdHlQYWdlU2l6ZT0zXT0iYWNjZXNzaWJpbGl0eVBhZ2VTaXplIixlW2UuYXJpYUxhYmVsPTRdPSJhcmlhTGFiZWwiLGVbZS5hcmlhUmVxdWlyZWQ9NV09ImFyaWFSZXF1aXJlZCIsZVtlLmF1dG9DbG9zaW5nQnJhY2tldHM9Nl09ImF1dG9DbG9zaW5nQnJhY2tldHMiLGVbZS5hdXRvQ2xvc2luZ0NvbW1lbnRzPTddPSJhdXRvQ2xvc2luZ0NvbW1lbnRzIixlW2Uuc2NyZWVuUmVhZGVyQW5ub3VuY2VJbmxpbmVTdWdnZXN0aW9uPThdPSJzY3JlZW5SZWFkZXJBbm5vdW5jZUlubGluZVN1Z2dlc3Rpb24iLGVbZS5hdXRvQ2xvc2luZ0RlbGV0ZT05XT0iYXV0b0Nsb3NpbmdEZWxldGUiLGVbZS5hdXRvQ2xvc2luZ092ZXJ0eXBlPTEwXT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPTExXT0iYXV0b0Nsb3NpbmdRdW90ZXMiLGVbZS5hdXRvSW5kZW50PTEyXT0iYXV0b0luZGVudCIsZVtlLmF1dG9tYXRpY0xheW91dD0xM109ImF1dG9tYXRpY0xheW91dCIsZVtlLmF1dG9TdXJyb3VuZD0xNF09ImF1dG9TdXJyb3VuZCIsZVtlLmJyYWNrZXRQYWlyQ29sb3JpemF0aW9uPTE1XT0iYnJhY2tldFBhaXJDb2xvcml6YXRpb24iLGVbZS5ndWlkZXM9MTZdPSJndWlkZXMiLGVbZS5jb2RlTGVucz0xN109ImNvZGVMZW5zIixlW2UuY29kZUxlbnNGb250RmFtaWx5PTE4XT0iY29kZUxlbnNGb250RmFtaWx5IixlW2UuY29kZUxlbnNGb250U2l6ZT0xOV09ImNvZGVMZW5zRm9udFNpemUiLGVbZS5jb2xvckRlY29yYXRvcnM9MjBdPSJjb2xvckRlY29yYXRvcnMiLGVbZS5jb2xvckRlY29yYXRvcnNMaW1pdD0yMV09ImNvbG9yRGVjb3JhdG9yc0xpbWl0IixlW2UuY29sdW1uU2VsZWN0aW9uPTIyXT0iY29sdW1uU2VsZWN0aW9uIixlW2UuY29tbWVudHM9MjNdPSJjb21tZW50cyIsZVtlLmNvbnRleHRtZW51PTI0XT0iY29udGV4dG1lbnUiLGVbZS5jb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZz0yNV09ImNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nIixlW2UuY3Vyc29yQmxpbmtpbmc9MjZdPSJjdXJzb3JCbGlua2luZyIsZVtlLmN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uPTI3XT0iY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb24iLGVbZS5jdXJzb3JTdHlsZT0yOF09ImN1cnNvclN0eWxlIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lcz0yOV09ImN1cnNvclN1cnJvdW5kaW5nTGluZXMiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGU9MzBdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGUiLGVbZS5jdXJzb3JXaWR0aD0zMV09ImN1cnNvcldpZHRoIixlW2UuZGlzYWJsZUxheWVySGludGluZz0zMl09ImRpc2FibGVMYXllckhpbnRpbmciLGVbZS5kaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucz0zM109ImRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zIixlW2UuZG9tUmVhZE9ubHk9MzRdPSJkb21SZWFkT25seSIsZVtlLmRyYWdBbmREcm9wPTM1XT0iZHJhZ0FuZERyb3AiLGVbZS5kcm9wSW50b0VkaXRvcj0zNl09ImRyb3BJbnRvRWRpdG9yIixlW2UuZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQ9MzddPSJlbXB0eVNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLmV4cGVyaW1lbnRhbFdoaXRlc3BhY2VSZW5kZXJpbmc9MzhdPSJleHBlcmltZW50YWxXaGl0ZXNwYWNlUmVuZGVyaW5nIixlW2UuZXh0cmFFZGl0b3JDbGFzc05hbWU9MzldPSJleHRyYUVkaXRvckNsYXNzTmFtZSIsZVtlLmZhc3RTY3JvbGxTZW5zaXRpdml0eT00MF09ImZhc3RTY3JvbGxTZW5zaXRpdml0eSIsZVtlLmZpbmQ9NDFdPSJmaW5kIixlW2UuZml4ZWRPdmVyZmxvd1dpZGdldHM9NDJdPSJmaXhlZE92ZXJmbG93V2lkZ2V0cyIsZVtlLmZvbGRpbmc9NDNdPSJmb2xkaW5nIixlW2UuZm9sZGluZ1N0cmF0ZWd5PTQ0XT0iZm9sZGluZ1N0cmF0ZWd5IixlW2UuZm9sZGluZ0hpZ2hsaWdodD00NV09ImZvbGRpbmdIaWdobGlnaHQiLGVbZS5mb2xkaW5nSW1wb3J0c0J5RGVmYXVsdD00Nl09ImZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0IixlW2UuZm9sZGluZ01heGltdW1SZWdpb25zPTQ3XT0iZm9sZGluZ01heGltdW1SZWdpb25zIixlW2UudW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lPTQ4XT0idW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lIixlW2UuZm9udEZhbWlseT00OV09ImZvbnRGYW1pbHkiLGVbZS5mb250SW5mbz01MF09ImZvbnRJbmZvIixlW2UuZm9udExpZ2F0dXJlcz01MV09ImZvbnRMaWdhdHVyZXMiLGVbZS5mb250U2l6ZT01Ml09ImZvbnRTaXplIixlW2UuZm9udFdlaWdodD01M109ImZvbnRXZWlnaHQiLGVbZS5mb250VmFyaWF0aW9ucz01NF09ImZvbnRWYXJpYXRpb25zIixlW2UuZm9ybWF0T25QYXN0ZT01NV09ImZvcm1hdE9uUGFzdGUiLGVbZS5mb3JtYXRPblR5cGU9NTZdPSJmb3JtYXRPblR5cGUiLGVbZS5nbHlwaE1hcmdpbj01N109ImdseXBoTWFyZ2luIixlW2UuZ290b0xvY2F0aW9uPTU4XT0iZ290b0xvY2F0aW9uIixlW2UuaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcj01OV09ImhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXIiLGVbZS5ob3Zlcj02MF09ImhvdmVyIixlW2UuaW5EaWZmRWRpdG9yPTYxXT0iaW5EaWZmRWRpdG9yIixlW2UuaW5saW5lU3VnZ2VzdD02Ml09ImlubGluZVN1Z2dlc3QiLGVbZS5pbmxpbmVFZGl0PTYzXT0iaW5saW5lRWRpdCIsZVtlLmxldHRlclNwYWNpbmc9NjRdPSJsZXR0ZXJTcGFjaW5nIixlW2UubGlnaHRidWxiPTY1XT0ibGlnaHRidWxiIixlW2UubGluZURlY29yYXRpb25zV2lkdGg9NjZdPSJsaW5lRGVjb3JhdGlvbnNXaWR0aCIsZVtlLmxpbmVIZWlnaHQ9NjddPSJsaW5lSGVpZ2h0IixlW2UubGluZU51bWJlcnM9NjhdPSJsaW5lTnVtYmVycyIsZVtlLmxpbmVOdW1iZXJzTWluQ2hhcnM9NjldPSJsaW5lTnVtYmVyc01pbkNoYXJzIixlW2UubGlua2VkRWRpdGluZz03MF09ImxpbmtlZEVkaXRpbmciLGVbZS5saW5rcz03MV09ImxpbmtzIixlW2UubWF0Y2hCcmFja2V0cz03Ml09Im1hdGNoQnJhY2tldHMiLGVbZS5taW5pbWFwPTczXT0ibWluaW1hcCIsZVtlLm1vdXNlU3R5bGU9NzRdPSJtb3VzZVN0eWxlIixlW2UubW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5PTc1XT0ibW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5IixlW2UubW91c2VXaGVlbFpvb209NzZdPSJtb3VzZVdoZWVsWm9vbSIsZVtlLm11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZz03N109Im11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZyIsZVtlLm11bHRpQ3Vyc29yTW9kaWZpZXI9NzhdPSJtdWx0aUN1cnNvck1vZGlmaWVyIixlW2UubXVsdGlDdXJzb3JQYXN0ZT03OV09Im11bHRpQ3Vyc29yUGFzdGUiLGVbZS5tdWx0aUN1cnNvckxpbWl0PTgwXT0ibXVsdGlDdXJzb3JMaW1pdCIsZVtlLm9jY3VycmVuY2VzSGlnaGxpZ2h0PTgxXT0ib2NjdXJyZW5jZXNIaWdobGlnaHQiLGVbZS5vdmVydmlld1J1bGVyQm9yZGVyPTgyXT0ib3ZlcnZpZXdSdWxlckJvcmRlciIsZVtlLm92ZXJ2aWV3UnVsZXJMYW5lcz04M109Im92ZXJ2aWV3UnVsZXJMYW5lcyIsZVtlLnBhZGRpbmc9ODRdPSJwYWRkaW5nIixlW2UucGFzdGVBcz04NV09InBhc3RlQXMiLGVbZS5wYXJhbWV0ZXJIaW50cz04Nl09InBhcmFtZXRlckhpbnRzIixlW2UucGVla1dpZGdldERlZmF1bHRGb2N1cz04N109InBlZWtXaWRnZXREZWZhdWx0Rm9jdXMiLGVbZS5wbGFjZWhvbGRlcj04OF09InBsYWNlaG9sZGVyIixlW2UuZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlaz04OV09ImRlZmluaXRpb25MaW5rT3BlbnNJblBlZWsiLGVbZS5xdWlja1N1Z2dlc3Rpb25zPTkwXT0icXVpY2tTdWdnZXN0aW9ucyIsZVtlLnF1aWNrU3VnZ2VzdGlvbnNEZWxheT05MV09InF1aWNrU3VnZ2VzdGlvbnNEZWxheSIsZVtlLnJlYWRPbmx5PTkyXT0icmVhZE9ubHkiLGVbZS5yZWFkT25seU1lc3NhZ2U9OTNdPSJyZWFkT25seU1lc3NhZ2UiLGVbZS5yZW5hbWVPblR5cGU9OTRdPSJyZW5hbWVPblR5cGUiLGVbZS5yZW5kZXJDb250cm9sQ2hhcmFjdGVycz05NV09InJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzIixlW2UucmVuZGVyRmluYWxOZXdsaW5lPTk2XT0icmVuZGVyRmluYWxOZXdsaW5lIixlW2UucmVuZGVyTGluZUhpZ2hsaWdodD05N109InJlbmRlckxpbmVIaWdobGlnaHQiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cz05OF09InJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzIixlW2UucmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zPTk5XT0icmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zIixlW2UucmVuZGVyV2hpdGVzcGFjZT0xMDBdPSJyZW5kZXJXaGl0ZXNwYWNlIixlW2UucmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZz0xMDFdPSJyZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nIixlW2Uucm91bmRlZFNlbGVjdGlvbj0xMDJdPSJyb3VuZGVkU2VsZWN0aW9uIixlW2UucnVsZXJzPTEwM109InJ1bGVycyIsZVtlLnNjcm9sbGJhcj0xMDRdPSJzY3JvbGxiYXIiLGVbZS5zY3JvbGxCZXlvbmRMYXN0Q29sdW1uPTEwNV09InNjcm9sbEJleW9uZExhc3RDb2x1bW4iLGVbZS5zY3JvbGxCZXlvbmRMYXN0TGluZT0xMDZdPSJzY3JvbGxCZXlvbmRMYXN0TGluZSIsZVtlLnNjcm9sbFByZWRvbWluYW50QXhpcz0xMDddPSJzY3JvbGxQcmVkb21pbmFudEF4aXMiLGVbZS5zZWxlY3Rpb25DbGlwYm9hcmQ9MTA4XT0ic2VsZWN0aW9uQ2xpcGJvYXJkIixlW2Uuc2VsZWN0aW9uSGlnaGxpZ2h0PTEwOV09InNlbGVjdGlvbkhpZ2hsaWdodCIsZVtlLnNlbGVjdE9uTGluZU51bWJlcnM9MTEwXT0ic2VsZWN0T25MaW5lTnVtYmVycyIsZVtlLnNob3dGb2xkaW5nQ29udHJvbHM9MTExXT0ic2hvd0ZvbGRpbmdDb250cm9scyIsZVtlLnNob3dVbnVzZWQ9MTEyXT0ic2hvd1VudXNlZCIsZVtlLnNuaXBwZXRTdWdnZXN0aW9ucz0xMTNdPSJzbmlwcGV0U3VnZ2VzdGlvbnMiLGVbZS5zbWFydFNlbGVjdD0xMTRdPSJzbWFydFNlbGVjdCIsZVtlLnNtb290aFNjcm9sbGluZz0xMTVdPSJzbW9vdGhTY3JvbGxpbmciLGVbZS5zdGlja3lTY3JvbGw9MTE2XT0ic3RpY2t5U2Nyb2xsIixlW2Uuc3RpY2t5VGFiU3RvcHM9MTE3XT0ic3RpY2t5VGFiU3RvcHMiLGVbZS5zdG9wUmVuZGVyaW5nTGluZUFmdGVyPTExOF09InN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXIiLGVbZS5zdWdnZXN0PTExOV09InN1Z2dlc3QiLGVbZS5zdWdnZXN0Rm9udFNpemU9MTIwXT0ic3VnZ2VzdEZvbnRTaXplIixlW2Uuc3VnZ2VzdExpbmVIZWlnaHQ9MTIxXT0ic3VnZ2VzdExpbmVIZWlnaHQiLGVbZS5zdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycz0xMjJdPSJzdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycyIsZVtlLnN1Z2dlc3RTZWxlY3Rpb249MTIzXT0ic3VnZ2VzdFNlbGVjdGlvbiIsZVtlLnRhYkNvbXBsZXRpb249MTI0XT0idGFiQ29tcGxldGlvbiIsZVtlLnRhYkluZGV4PTEyNV09InRhYkluZGV4IixlW2UudW5pY29kZUhpZ2hsaWdodGluZz0xMjZdPSJ1bmljb2RlSGlnaGxpZ2h0aW5nIixlW2UudW51c3VhbExpbmVUZXJtaW5hdG9ycz0xMjddPSJ1bnVzdWFsTGluZVRlcm1pbmF0b3JzIixlW2UudXNlU2hhZG93RE9NPTEyOF09InVzZVNoYWRvd0RPTSIsZVtlLnVzZVRhYlN0b3BzPTEyOV09InVzZVRhYlN0b3BzIixlW2Uud29yZEJyZWFrPTEzMF09IndvcmRCcmVhayIsZVtlLndvcmRTZWdtZW50ZXJMb2NhbGVzPTEzMV09IndvcmRTZWdtZW50ZXJMb2NhbGVzIixlW2Uud29yZFNlcGFyYXRvcnM9MTMyXT0id29yZFNlcGFyYXRvcnMiLGVbZS53b3JkV3JhcD0xMzNdPSJ3b3JkV3JhcCIsZVtlLndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnM9MTM0XT0id29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzPTEzNV09IndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBDb2x1bW49MTM2XT0id29yZFdyYXBDb2x1bW4iLGVbZS53b3JkV3JhcE92ZXJyaWRlMT0xMzddPSJ3b3JkV3JhcE92ZXJyaWRlMSIsZVtlLndvcmRXcmFwT3ZlcnJpZGUyPTEzOF09IndvcmRXcmFwT3ZlcnJpZGUyIixlW2Uud3JhcHBpbmdJbmRlbnQ9MTM5XT0id3JhcHBpbmdJbmRlbnQiLGVbZS53cmFwcGluZ1N0cmF0ZWd5PTE0MF09IndyYXBwaW5nU3RyYXRlZ3kiLGVbZS5zaG93RGVwcmVjYXRlZD0xNDFdPSJzaG93RGVwcmVjYXRlZCIsZVtlLmlubGF5SGludHM9MTQyXT0iaW5sYXlIaW50cyIsZVtlLmVkaXRvckNsYXNzTmFtZT0xNDNdPSJlZGl0b3JDbGFzc05hbWUiLGVbZS5waXhlbFJhdGlvPTE0NF09InBpeGVsUmF0aW8iLGVbZS50YWJGb2N1c01vZGU9MTQ1XT0idGFiRm9jdXNNb2RlIixlW2UubGF5b3V0SW5mbz0xNDZdPSJsYXlvdXRJbmZvIixlW2Uud3JhcHBpbmdJbmZvPTE0N109IndyYXBwaW5nSW5mbyIsZVtlLmRlZmF1bHRDb2xvckRlY29yYXRvcnM9MTQ4XT0iZGVmYXVsdENvbG9yRGVjb3JhdG9ycyIsZVtlLmNvbG9yRGVjb3JhdG9yc0FjdGl2YXRlZE9uPTE0OV09ImNvbG9yRGVjb3JhdG9yc0FjdGl2YXRlZE9uIixlW2UuaW5saW5lQ29tcGxldGlvbnNBY2Nlc3NpYmlsaXR5VmVyYm9zZT0xNTBdPSJpbmxpbmVDb21wbGV0aW9uc0FjY2Vzc2liaWxpdHlWZXJib3NlIn0pKGhzfHwoaHM9e30pKTt2YXIgZHM7KGZ1bmN0aW9uKGUpe2VbZS5UZXh0RGVmaW5lZD0wXT0iVGV4dERlZmluZWQiLGVbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0pKGRzfHwoZHM9e30pKTt2YXIgbXM7KGZ1bmN0aW9uKGUpe2VbZS5MRj0wXT0iTEYiLGVbZS5DUkxGPTFdPSJDUkxGIn0pKG1zfHwobXM9e30pKTt2YXIgZ3M7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD0zXT0iUmlnaHQifSkoZ3N8fChncz17fSkpO3ZhciBwczsoZnVuY3Rpb24oZSl7ZVtlLkluY3JlYXNlPTBdPSJJbmNyZWFzZSIsZVtlLkRlY3JlYXNlPTFdPSJEZWNyZWFzZSJ9KShwc3x8KHBzPXt9KSk7dmFyIGJzOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLkluZGVudD0xXT0iSW5kZW50IixlW2UuSW5kZW50T3V0ZGVudD0yXT0iSW5kZW50T3V0ZGVudCIsZVtlLk91dGRlbnQ9M109Ik91dGRlbnQifSkoYnN8fChicz17fSkpO3ZhciB2czsoZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KSh2c3x8KHZzPXt9KSk7dmFyIHhzOyhmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0pKHhzfHwoeHM9e30pKTt2YXIgeXM7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KSh5c3x8KHlzPXt9KSk7dmFyIHdzOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5BdXRvbWF0aWM9MV09IkF1dG9tYXRpYyJ9KSh3c3x8KHdzPXt9KSk7dmFyIHhyOyhmdW5jdGlvbihlKXtlW2UuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIsZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5CYWNrc3BhY2U9MV09IkJhY2tzcGFjZSIsZVtlLlRhYj0yXT0iVGFiIixlW2UuRW50ZXI9M109IkVudGVyIixlW2UuU2hpZnQ9NF09IlNoaWZ0IixlW2UuQ3RybD01XT0iQ3RybCIsZVtlLkFsdD02XT0iQWx0IixlW2UuUGF1c2VCcmVhaz03XT0iUGF1c2VCcmVhayIsZVtlLkNhcHNMb2NrPThdPSJDYXBzTG9jayIsZVtlLkVzY2FwZT05XT0iRXNjYXBlIixlW2UuU3BhY2U9MTBdPSJTcGFjZSIsZVtlLlBhZ2VVcD0xMV09IlBhZ2VVcCIsZVtlLlBhZ2VEb3duPTEyXT0iUGFnZURvd24iLGVbZS5FbmQ9MTNdPSJFbmQiLGVbZS5Ib21lPTE0XT0iSG9tZSIsZVtlLkxlZnRBcnJvdz0xNV09IkxlZnRBcnJvdyIsZVtlLlVwQXJyb3c9MTZdPSJVcEFycm93IixlW2UuUmlnaHRBcnJvdz0xN109IlJpZ2h0QXJyb3ciLGVbZS5Eb3duQXJyb3c9MThdPSJEb3duQXJyb3ciLGVbZS5JbnNlcnQ9MTldPSJJbnNlcnQiLGVbZS5EZWxldGU9MjBdPSJEZWxldGUiLGVbZS5EaWdpdDA9MjFdPSJEaWdpdDAiLGVbZS5EaWdpdDE9MjJdPSJEaWdpdDEiLGVbZS5EaWdpdDI9MjNdPSJEaWdpdDIiLGVbZS5EaWdpdDM9MjRdPSJEaWdpdDMiLGVbZS5EaWdpdDQ9MjVdPSJEaWdpdDQiLGVbZS5EaWdpdDU9MjZdPSJEaWdpdDUiLGVbZS5EaWdpdDY9MjddPSJEaWdpdDYiLGVbZS5EaWdpdDc9MjhdPSJEaWdpdDciLGVbZS5EaWdpdDg9MjldPSJEaWdpdDgiLGVbZS5EaWdpdDk9MzBdPSJEaWdpdDkiLGVbZS5LZXlBPTMxXT0iS2V5QSIsZVtlLktleUI9MzJdPSJLZXlCIixlW2UuS2V5Qz0zM109IktleUMiLGVbZS5LZXlEPTM0XT0iS2V5RCIsZVtlLktleUU9MzVdPSJLZXlFIixlW2UuS2V5Rj0zNl09IktleUYiLGVbZS5LZXlHPTM3XT0iS2V5RyIsZVtlLktleUg9MzhdPSJLZXlIIixlW2UuS2V5ST0zOV09IktleUkiLGVbZS5LZXlKPTQwXT0iS2V5SiIsZVtlLktleUs9NDFdPSJLZXlLIixlW2UuS2V5TD00Ml09IktleUwiLGVbZS5LZXlNPTQzXT0iS2V5TSIsZVtlLktleU49NDRdPSJLZXlOIixlW2UuS2V5Tz00NV09IktleU8iLGVbZS5LZXlQPTQ2XT0iS2V5UCIsZVtlLktleVE9NDddPSJLZXlRIixlW2UuS2V5Uj00OF09IktleVIiLGVbZS5LZXlTPTQ5XT0iS2V5UyIsZVtlLktleVQ9NTBdPSJLZXlUIixlW2UuS2V5VT01MV09IktleVUiLGVbZS5LZXlWPTUyXT0iS2V5ViIsZVtlLktleVc9NTNdPSJLZXlXIixlW2UuS2V5WD01NF09IktleVgiLGVbZS5LZXlZPTU1XT0iS2V5WSIsZVtlLktleVo9NTZdPSJLZXlaIixlW2UuTWV0YT01N109Ik1ldGEiLGVbZS5Db250ZXh0TWVudT01OF09IkNvbnRleHRNZW51IixlW2UuRjE9NTldPSJGMSIsZVtlLkYyPTYwXT0iRjIiLGVbZS5GMz02MV09IkYzIixlW2UuRjQ9NjJdPSJGNCIsZVtlLkY1PTYzXT0iRjUiLGVbZS5GNj02NF09IkY2IixlW2UuRjc9NjVdPSJGNyIsZVtlLkY4PTY2XT0iRjgiLGVbZS5GOT02N109IkY5IixlW2UuRjEwPTY4XT0iRjEwIixlW2UuRjExPTY5XT0iRjExIixlW2UuRjEyPTcwXT0iRjEyIixlW2UuRjEzPTcxXT0iRjEzIixlW2UuRjE0PTcyXT0iRjE0IixlW2UuRjE1PTczXT0iRjE1IixlW2UuRjE2PTc0XT0iRjE2IixlW2UuRjE3PTc1XT0iRjE3IixlW2UuRjE4PTc2XT0iRjE4IixlW2UuRjE5PTc3XT0iRjE5IixlW2UuRjIwPTc4XT0iRjIwIixlW2UuRjIxPTc5XT0iRjIxIixlW2UuRjIyPTgwXT0iRjIyIixlW2UuRjIzPTgxXT0iRjIzIixlW2UuRjI0PTgyXT0iRjI0IixlW2UuTnVtTG9jaz04M109Ik51bUxvY2siLGVbZS5TY3JvbGxMb2NrPTg0XT0iU2Nyb2xsTG9jayIsZVtlLlNlbWljb2xvbj04NV09IlNlbWljb2xvbiIsZVtlLkVxdWFsPTg2XT0iRXF1YWwiLGVbZS5Db21tYT04N109IkNvbW1hIixlW2UuTWludXM9ODhdPSJNaW51cyIsZVtlLlBlcmlvZD04OV09IlBlcmlvZCIsZVtlLlNsYXNoPTkwXT0iU2xhc2giLGVbZS5CYWNrcXVvdGU9OTFdPSJCYWNrcXVvdGUiLGVbZS5CcmFja2V0TGVmdD05Ml09IkJyYWNrZXRMZWZ0IixlW2UuQmFja3NsYXNoPTkzXT0iQmFja3NsYXNoIixlW2UuQnJhY2tldFJpZ2h0PTk0XT0iQnJhY2tldFJpZ2h0IixlW2UuUXVvdGU9OTVdPSJRdW90ZSIsZVtlLk9FTV84PTk2XT0iT0VNXzgiLGVbZS5JbnRsQmFja3NsYXNoPTk3XT0iSW50bEJhY2tzbGFzaCIsZVtlLk51bXBhZDA9OThdPSJOdW1wYWQwIixlW2UuTnVtcGFkMT05OV09Ik51bXBhZDEiLGVbZS5OdW1wYWQyPTEwMF09Ik51bXBhZDIiLGVbZS5OdW1wYWQzPTEwMV09Ik51bXBhZDMiLGVbZS5OdW1wYWQ0PTEwMl09Ik51bXBhZDQiLGVbZS5OdW1wYWQ1PTEwM109Ik51bXBhZDUiLGVbZS5OdW1wYWQ2PTEwNF09Ik51bXBhZDYiLGVbZS5OdW1wYWQ3PTEwNV09Ik51bXBhZDciLGVbZS5OdW1wYWQ4PTEwNl09Ik51bXBhZDgiLGVbZS5OdW1wYWQ5PTEwN109Ik51bXBhZDkiLGVbZS5OdW1wYWRNdWx0aXBseT0xMDhdPSJOdW1wYWRNdWx0aXBseSIsZVtlLk51bXBhZEFkZD0xMDldPSJOdW1wYWRBZGQiLGVbZS5OVU1QQURfU0VQQVJBVE9SPTExMF09Ik5VTVBBRF9TRVBBUkFUT1IiLGVbZS5OdW1wYWRTdWJ0cmFjdD0xMTFdPSJOdW1wYWRTdWJ0cmFjdCIsZVtlLk51bXBhZERlY2ltYWw9MTEyXT0iTnVtcGFkRGVjaW1hbCIsZVtlLk51bXBhZERpdmlkZT0xMTNdPSJOdW1wYWREaXZpZGUiLGVbZS5LRVlfSU5fQ09NUE9TSVRJT049MTE0XT0iS0VZX0lOX0NPTVBPU0lUSU9OIixlW2UuQUJOVF9DMT0xMTVdPSJBQk5UX0MxIixlW2UuQUJOVF9DMj0xMTZdPSJBQk5UX0MyIixlW2UuQXVkaW9Wb2x1bWVNdXRlPTExN109IkF1ZGlvVm9sdW1lTXV0ZSIsZVtlLkF1ZGlvVm9sdW1lVXA9MTE4XT0iQXVkaW9Wb2x1bWVVcCIsZVtlLkF1ZGlvVm9sdW1lRG93bj0xMTldPSJBdWRpb1ZvbHVtZURvd24iLGVbZS5Ccm93c2VyU2VhcmNoPTEyMF09IkJyb3dzZXJTZWFyY2giLGVbZS5Ccm93c2VySG9tZT0xMjFdPSJCcm93c2VySG9tZSIsZVtlLkJyb3dzZXJCYWNrPTEyMl09IkJyb3dzZXJCYWNrIixlW2UuQnJvd3NlckZvcndhcmQ9MTIzXT0iQnJvd3NlckZvcndhcmQiLGVbZS5NZWRpYVRyYWNrTmV4dD0xMjRdPSJNZWRpYVRyYWNrTmV4dCIsZVtlLk1lZGlhVHJhY2tQcmV2aW91cz0xMjVdPSJNZWRpYVRyYWNrUHJldmlvdXMiLGVbZS5NZWRpYVN0b3A9MTI2XT0iTWVkaWFTdG9wIixlW2UuTWVkaWFQbGF5UGF1c2U9MTI3XT0iTWVkaWFQbGF5UGF1c2UiLGVbZS5MYXVuY2hNZWRpYVBsYXllcj0xMjhdPSJMYXVuY2hNZWRpYVBsYXllciIsZVtlLkxhdW5jaE1haWw9MTI5XT0iTGF1bmNoTWFpbCIsZVtlLkxhdW5jaEFwcDI9MTMwXT0iTGF1bmNoQXBwMiIsZVtlLkNsZWFyPTEzMV09IkNsZWFyIixlW2UuTUFYX1ZBTFVFPTEzMl09Ik1BWF9WQUxVRSJ9KSh4cnx8KHhyPXt9KSk7dmFyIHlyOyhmdW5jdGlvbihlKXtlW2UuSGludD0xXT0iSGludCIsZVtlLkluZm89Ml09IkluZm8iLGVbZS5XYXJuaW5nPTRdPSJXYXJuaW5nIixlW2UuRXJyb3I9OF09IkVycm9yIn0pKHlyfHwoeXI9e30pKTt2YXIgd3I7KGZ1bmN0aW9uKGUpe2VbZS5Vbm5lY2Vzc2FyeT0xXT0iVW5uZWNlc3NhcnkiLGVbZS5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIn0pKHdyfHwod3I9e30pKTt2YXIgX3M7KGZ1bmN0aW9uKGUpe2VbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkd1dHRlcj0yXT0iR3V0dGVyIn0pKF9zfHwoX3M9e30pKTt2YXIgTHM7KGZ1bmN0aW9uKGUpe2VbZS5Ob3JtYWw9MV09Ik5vcm1hbCIsZVtlLlVuZGVybGluZWQ9Ml09IlVuZGVybGluZWQifSkoTHN8fChMcz17fSkpO3ZhciBOczsoZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09IlVOS05PV04iLGVbZS5URVhUQVJFQT0xXT0iVEVYVEFSRUEiLGVbZS5HVVRURVJfR0xZUEhfTUFSR0lOPTJdPSJHVVRURVJfR0xZUEhfTUFSR0lOIixlW2UuR1VUVEVSX0xJTkVfTlVNQkVSUz0zXT0iR1VUVEVSX0xJTkVfTlVNQkVSUyIsZVtlLkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TPTRdPSJHVVRURVJfTElORV9ERUNPUkFUSU9OUyIsZVtlLkdVVFRFUl9WSUVXX1pPTkU9NV09IkdVVFRFUl9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1RFWFQ9Nl09IkNPTlRFTlRfVEVYVCIsZVtlLkNPTlRFTlRfRU1QVFk9N109IkNPTlRFTlRfRU1QVFkiLGVbZS5DT05URU5UX1ZJRVdfWk9ORT04XT0iQ09OVEVOVF9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1dJREdFVD05XT0iQ09OVEVOVF9XSURHRVQiLGVbZS5PVkVSVklFV19SVUxFUj0xMF09Ik9WRVJWSUVXX1JVTEVSIixlW2UuU0NST0xMQkFSPTExXT0iU0NST0xMQkFSIixlW2UuT1ZFUkxBWV9XSURHRVQ9MTJdPSJPVkVSTEFZX1dJREdFVCIsZVtlLk9VVFNJREVfRURJVE9SPTEzXT0iT1VUU0lERV9FRElUT1IifSkoTnN8fChOcz17fSkpO3ZhciBTczsoZnVuY3Rpb24oZSl7ZVtlLkFJR2VuZXJhdGVkPTFdPSJBSUdlbmVyYXRlZCJ9KShTc3x8KFNzPXt9KSk7dmFyIEFzOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5BdXRvbWF0aWM9MV09IkF1dG9tYXRpYyJ9KShBc3x8KEFzPXt9KSk7dmFyIGtzOyhmdW5jdGlvbihlKXtlW2UuVE9QX1JJR0hUX0NPUk5FUj0wXT0iVE9QX1JJR0hUX0NPUk5FUiIsZVtlLkJPVFRPTV9SSUdIVF9DT1JORVI9MV09IkJPVFRPTV9SSUdIVF9DT1JORVIiLGVbZS5UT1BfQ0VOVEVSPTJdPSJUT1BfQ0VOVEVSIn0pKGtzfHwoa3M9e30pKTt2YXIgUnM7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0pKFJzfHwoUnM9e30pKTt2YXIgRXM7KGZ1bmN0aW9uKGUpe2VbZS5Xb3JkPTBdPSJXb3JkIixlW2UuTGluZT0xXT0iTGluZSIsZVtlLlN1Z2dlc3Q9Ml09IlN1Z2dlc3QifSkoRXN8fChFcz17fSkpO3ZhciBNczsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MF09IkxlZnQiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5Ob25lPTJdPSJOb25lIixlW2UuTGVmdE9mSW5qZWN0ZWRUZXh0PTNdPSJMZWZ0T2ZJbmplY3RlZFRleHQiLGVbZS5SaWdodE9mSW5qZWN0ZWRUZXh0PTRdPSJSaWdodE9mSW5qZWN0ZWRUZXh0In0pKE1zfHwoTXM9e30pKTt2YXIgQ3M7KGZ1bmN0aW9uKGUpe2VbZS5PZmY9MF09Ik9mZiIsZVtlLk9uPTFdPSJPbiIsZVtlLlJlbGF0aXZlPTJdPSJSZWxhdGl2ZSIsZVtlLkludGVydmFsPTNdPSJJbnRlcnZhbCIsZVtlLkN1c3RvbT00XT0iQ3VzdG9tIn0pKENzfHwoQ3M9e30pKTt2YXIgVHM7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuVGV4dD0xXT0iVGV4dCIsZVtlLkJsb2Nrcz0yXT0iQmxvY2tzIn0pKFRzfHwoVHM9e30pKTt2YXIgUHM7KGZ1bmN0aW9uKGUpe2VbZS5TbW9vdGg9MF09IlNtb290aCIsZVtlLkltbWVkaWF0ZT0xXT0iSW1tZWRpYXRlIn0pKFBzfHwoUHM9e30pKTt2YXIgSXM7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvPTFdPSJBdXRvIixlW2UuSGlkZGVuPTJdPSJIaWRkZW4iLGVbZS5WaXNpYmxlPTNdPSJWaXNpYmxlIn0pKElzfHwoSXM9e30pKTt2YXIgX3I7KGZ1bmN0aW9uKGUpe2VbZS5MVFI9MF09IkxUUiIsZVtlLlJUTD0xXT0iUlRMIn0pKF9yfHwoX3I9e30pKTt2YXIgRnM7KGZ1bmN0aW9uKGUpe2UuT2ZmPSJvZmYiLGUuT25Db2RlPSJvbkNvZGUiLGUuT249Im9uIn0pKEZzfHwoRnM9e30pKTt2YXIgVnM7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9Ml09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5Db250ZW50Q2hhbmdlPTNdPSJDb250ZW50Q2hhbmdlIn0pKFZzfHwoVnM9e30pKTt2YXIgRHM7KGZ1bmN0aW9uKGUpe2VbZS5GaWxlPTBdPSJGaWxlIixlW2UuTW9kdWxlPTFdPSJNb2R1bGUiLGVbZS5OYW1lc3BhY2U9Ml09Ik5hbWVzcGFjZSIsZVtlLlBhY2thZ2U9M109IlBhY2thZ2UiLGVbZS5DbGFzcz00XT0iQ2xhc3MiLGVbZS5NZXRob2Q9NV09Ik1ldGhvZCIsZVtlLlByb3BlcnR5PTZdPSJQcm9wZXJ0eSIsZVtlLkZpZWxkPTddPSJGaWVsZCIsZVtlLkNvbnN0cnVjdG9yPThdPSJDb25zdHJ1Y3RvciIsZVtlLkVudW09OV09IkVudW0iLGVbZS5JbnRlcmZhY2U9MTBdPSJJbnRlcmZhY2UiLGVbZS5GdW5jdGlvbj0xMV09IkZ1bmN0aW9uIixlW2UuVmFyaWFibGU9MTJdPSJWYXJpYWJsZSIsZVtlLkNvbnN0YW50PTEzXT0iQ29uc3RhbnQiLGVbZS5TdHJpbmc9MTRdPSJTdHJpbmciLGVbZS5OdW1iZXI9MTVdPSJOdW1iZXIiLGVbZS5Cb29sZWFuPTE2XT0iQm9vbGVhbiIsZVtlLkFycmF5PTE3XT0iQXJyYXkiLGVbZS5PYmplY3Q9MThdPSJPYmplY3QiLGVbZS5LZXk9MTldPSJLZXkiLGVbZS5OdWxsPTIwXT0iTnVsbCIsZVtlLkVudW1NZW1iZXI9MjFdPSJFbnVtTWVtYmVyIixlW2UuU3RydWN0PTIyXT0iU3RydWN0IixlW2UuRXZlbnQ9MjNdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTI0XT0iT3BlcmF0b3IiLGVbZS5UeXBlUGFyYW1ldGVyPTI1XT0iVHlwZVBhcmFtZXRlciJ9KShEc3x8KERzPXt9KSk7dmFyIE9zOyhmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KShPc3x8KE9zPXt9KSk7dmFyICRzOyhmdW5jdGlvbihlKXtlW2UuSGlkZGVuPTBdPSJIaWRkZW4iLGVbZS5CbGluaz0xXT0iQmxpbmsiLGVbZS5TbW9vdGg9Ml09IlNtb290aCIsZVtlLlBoYXNlPTNdPSJQaGFzZSIsZVtlLkV4cGFuZD00XT0iRXhwYW5kIixlW2UuU29saWQ9NV09IlNvbGlkIn0pKCRzfHwoJHM9e30pKTt2YXIgVXM7KGZ1bmN0aW9uKGUpe2VbZS5MaW5lPTFdPSJMaW5lIixlW2UuQmxvY2s9Ml09IkJsb2NrIixlW2UuVW5kZXJsaW5lPTNdPSJVbmRlcmxpbmUiLGVbZS5MaW5lVGhpbj00XT0iTGluZVRoaW4iLGVbZS5CbG9ja091dGxpbmU9NV09IkJsb2NrT3V0bGluZSIsZVtlLlVuZGVybGluZVRoaW49Nl09IlVuZGVybGluZVRoaW4ifSkoVXN8fChVcz17fSkpO3ZhciBCczsoZnVuY3Rpb24oZSl7ZVtlLkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXM9MF09IkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5OZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXM9MV09Ik5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmU9Ml09Ikdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmUiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXI9M109Ikdyb3dzT25seVdoZW5UeXBpbmdBZnRlciJ9KShCc3x8KEJzPXt9KSk7dmFyIHFzOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlNhbWU9MV09IlNhbWUiLGVbZS5JbmRlbnQ9Ml09IkluZGVudCIsZVtlLkRlZXBJbmRlbnQ9M109IkRlZXBJbmRlbnQifSkocXN8fChxcz17fSkpO2NvbnN0IEZ0PWNsYXNzIEZ0e3N0YXRpYyBjaG9yZCh0LG4pe3JldHVybiBidSh0LG4pfX07RnQuQ3RybENtZD0yMDQ4LEZ0LlNoaWZ0PTEwMjQsRnQuQWx0PTUxMixGdC5XaW5DdHJsPTI1NjtsZXQgTHI9RnQ7ZnVuY3Rpb24gTHUoKXtyZXR1cm57ZWRpdG9yOnZvaWQgMCxsYW5ndWFnZXM6dm9pZCAwLENhbmNlbGxhdGlvblRva2VuU291cmNlOmR1LEVtaXR0ZXI6X2UsS2V5Q29kZTp4cixLZXlNb2Q6THIsUG9zaXRpb246ZWUsUmFuZ2U6eixTZWxlY3Rpb246dmUsU2VsZWN0aW9uRGlyZWN0aW9uOl9yLE1hcmtlclNldmVyaXR5OnlyLE1hcmtlclRhZzp3cixVcmk6UGUsVG9rZW46X3V9fWNvbnN0IHJuPWNsYXNzIHJue3N0YXRpYyBnZXRDaGFubmVsKHQpe3JldHVybiB0LmdldENoYW5uZWwocm4uQ0hBTk5FTF9OQU1FKX1zdGF0aWMgc2V0Q2hhbm5lbCh0LG4pe3Quc2V0Q2hhbm5lbChybi5DSEFOTkVMX05BTUUsbil9fTtybi5DSEFOTkVMX05BTUU9ImVkaXRvcldvcmtlckhvc3QiO2xldCBOcj1ybjt2YXIganM7Y2xhc3MgTnV7Y29uc3RydWN0b3IoKXt0aGlzW2pzXT0iTGlua2VkTWFwIix0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMCx0aGlzLl9zaXplPTAsdGhpcy5fc3RhdGU9MH1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwLHRoaXMuX3NpemU9MCx0aGlzLl9zdGF0ZSsrfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5faGVhZCYmIXRoaXMuX3RhaWx9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1nZXQgZmlyc3QoKXtyZXR1cm4gdGhpcy5faGVhZD8udmFsdWV9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5fdGFpbD8udmFsdWV9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfWdldCh0LG49MCl7Y29uc3Qgcj10aGlzLl9tYXAuZ2V0KHQpO2lmKHIpcmV0dXJuIG4hPT0wJiZ0aGlzLnRvdWNoKHIsbiksci52YWx1ZX1zZXQodCxuLHI9MCl7bGV0IGk9dGhpcy5fbWFwLmdldCh0KTtpZihpKWkudmFsdWU9bixyIT09MCYmdGhpcy50b3VjaChpLHIpO2Vsc2V7c3dpdGNoKGk9e2tleTp0LHZhbHVlOm4sbmV4dDp2b2lkIDAscHJldmlvdXM6dm9pZCAwfSxyKXtjYXNlIDA6dGhpcy5hZGRJdGVtTGFzdChpKTticmVhaztjYXNlIDE6dGhpcy5hZGRJdGVtRmlyc3QoaSk7YnJlYWs7Y2FzZSAyOnRoaXMuYWRkSXRlbUxhc3QoaSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmFkZEl0ZW1MYXN0KGkpO2JyZWFrfXRoaXMuX21hcC5zZXQodCxpKSx0aGlzLl9zaXplKyt9cmV0dXJuIHRoaXN9ZGVsZXRlKHQpe3JldHVybiEhdGhpcy5yZW1vdmUodCl9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtpZihuKXJldHVybiB0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXMucmVtb3ZlSXRlbShuKSx0aGlzLl9zaXplLS0sbi52YWx1ZX1zaGlmdCgpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbClyZXR1cm47aWYoIXRoaXMuX2hlYWR8fCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7Y29uc3QgdD10aGlzLl9oZWFkO3JldHVybiB0aGlzLl9tYXAuZGVsZXRlKHQua2V5KSx0aGlzLnJlbW92ZUl0ZW0odCksdGhpcy5fc2l6ZS0tLHQudmFsdWV9Zm9yRWFjaCh0LG4pe2NvbnN0IHI9dGhpcy5fc3RhdGU7bGV0IGk9dGhpcy5faGVhZDtmb3IoO2k7KXtpZihuP3QuYmluZChuKShpLnZhbHVlLGkua2V5LHRoaXMpOnQoaS52YWx1ZSxpLmtleSx0aGlzKSx0aGlzLl9zdGF0ZSE9PXIpdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aT1pLm5leHR9fWtleXMoKXtjb25zdCB0PXRoaXMsbj10aGlzLl9zdGF0ZTtsZXQgcj10aGlzLl9oZWFkO2NvbnN0IGk9e1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIGl9LG5leHQoKXtpZih0Ll9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aWYocil7Y29uc3Qgcz17dmFsdWU6ci5rZXksZG9uZTohMX07cmV0dXJuIHI9ci5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGl9dmFsdWVzKCl7Y29uc3QgdD10aGlzLG49dGhpcy5fc3RhdGU7bGV0IHI9dGhpcy5faGVhZDtjb25zdCBpPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBpfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO2lmKHIpe2NvbnN0IHM9e3ZhbHVlOnIudmFsdWUsZG9uZTohMX07cmV0dXJuIHI9ci5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGl9ZW50cmllcygpe2NvbnN0IHQ9dGhpcyxuPXRoaXMuX3N0YXRlO2xldCByPXRoaXMuX2hlYWQ7Y29uc3QgaT17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gaX0sbmV4dCgpe2lmKHQuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtpZihyKXtjb25zdCBzPXt2YWx1ZTpbci5rZXksci52YWx1ZV0sZG9uZTohMX07cmV0dXJuIHI9ci5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGl9Wyhqcz1TeW1ib2wudG9TdHJpbmdUYWcsU3ltYm9sLml0ZXJhdG9yKV0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9dHJpbU9sZCh0KXtpZih0Pj10aGlzLnNpemUpcmV0dXJuO2lmKHQ9PT0wKXt0aGlzLmNsZWFyKCk7cmV0dXJufWxldCBuPXRoaXMuX2hlYWQscj10aGlzLnNpemU7Zm9yKDtuJiZyPnQ7KXRoaXMuX21hcC5kZWxldGUobi5rZXkpLG49bi5uZXh0LHItLTt0aGlzLl9oZWFkPW4sdGhpcy5fc2l6ZT1yLG4mJihuLnByZXZpb3VzPXZvaWQgMCksdGhpcy5fc3RhdGUrK310cmltTmV3KHQpe2lmKHQ+PXRoaXMuc2l6ZSlyZXR1cm47aWYodD09PTApe3RoaXMuY2xlYXIoKTtyZXR1cm59bGV0IG49dGhpcy5fdGFpbCxyPXRoaXMuc2l6ZTtmb3IoO24mJnI+dDspdGhpcy5fbWFwLmRlbGV0ZShuLmtleSksbj1uLnByZXZpb3VzLHItLTt0aGlzLl90YWlsPW4sdGhpcy5fc2l6ZT1yLG4mJihuLm5leHQ9dm9pZCAwKSx0aGlzLl9zdGF0ZSsrfWFkZEl0ZW1GaXJzdCh0KXtpZighdGhpcy5faGVhZCYmIXRoaXMuX3RhaWwpdGhpcy5fdGFpbD10O2Vsc2UgaWYodGhpcy5faGVhZCl0Lm5leHQ9dGhpcy5faGVhZCx0aGlzLl9oZWFkLnByZXZpb3VzPXQ7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3RoaXMuX2hlYWQ9dCx0aGlzLl9zdGF0ZSsrfWFkZEl0ZW1MYXN0KHQpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbCl0aGlzLl9oZWFkPXQ7ZWxzZSBpZih0aGlzLl90YWlsKXQucHJldmlvdXM9dGhpcy5fdGFpbCx0aGlzLl90YWlsLm5leHQ9dDtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dGhpcy5fdGFpbD10LHRoaXMuX3N0YXRlKyt9cmVtb3ZlSXRlbSh0KXtpZih0PT09dGhpcy5faGVhZCYmdD09PXRoaXMuX3RhaWwpdGhpcy5faGVhZD12b2lkIDAsdGhpcy5fdGFpbD12b2lkIDA7ZWxzZSBpZih0PT09dGhpcy5faGVhZCl7aWYoIXQubmV4dCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3QubmV4dC5wcmV2aW91cz12b2lkIDAsdGhpcy5faGVhZD10Lm5leHR9ZWxzZSBpZih0PT09dGhpcy5fdGFpbCl7aWYoIXQucHJldmlvdXMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0LnByZXZpb3VzLm5leHQ9dm9pZCAwLHRoaXMuX3RhaWw9dC5wcmV2aW91c31lbHNle2NvbnN0IG49dC5uZXh0LHI9dC5wcmV2aW91cztpZighbnx8IXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtuLnByZXZpb3VzPXIsci5uZXh0PW59dC5uZXh0PXZvaWQgMCx0LnByZXZpb3VzPXZvaWQgMCx0aGlzLl9zdGF0ZSsrfXRvdWNoKHQsbil7aWYoIXRoaXMuX2hlYWR8fCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7aWYoIShuIT09MSYmbiE9PTIpKXtpZihuPT09MSl7aWYodD09PXRoaXMuX2hlYWQpcmV0dXJuO2NvbnN0IHI9dC5uZXh0LGk9dC5wcmV2aW91czt0PT09dGhpcy5fdGFpbD8oaS5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPWkpOihyLnByZXZpb3VzPWksaS5uZXh0PXIpLHQucHJldmlvdXM9dm9pZCAwLHQubmV4dD10aGlzLl9oZWFkLHRoaXMuX2hlYWQucHJldmlvdXM9dCx0aGlzLl9oZWFkPXQsdGhpcy5fc3RhdGUrK31lbHNlIGlmKG49PT0yKXtpZih0PT09dGhpcy5fdGFpbClyZXR1cm47Y29uc3Qgcj10Lm5leHQsaT10LnByZXZpb3VzO3Q9PT10aGlzLl9oZWFkPyhyLnByZXZpb3VzPXZvaWQgMCx0aGlzLl9oZWFkPXIpOihyLnByZXZpb3VzPWksaS5uZXh0PXIpLHQubmV4dD12b2lkIDAsdC5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD10LHRoaXMuX3RhaWw9dCx0aGlzLl9zdGF0ZSsrfX19dG9KU09OKCl7Y29uc3QgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChuLHIpPT57dC5wdXNoKFtyLG5dKX0pLHR9ZnJvbUpTT04odCl7dGhpcy5jbGVhcigpO2Zvcihjb25zdFtuLHJdb2YgdCl0aGlzLnNldChuLHIpfX1jbGFzcyBTdSBleHRlbmRzIE51e2NvbnN0cnVjdG9yKHQsbj0xKXtzdXBlcigpLHRoaXMuX2xpbWl0PXQsdGhpcy5fcmF0aW89TWF0aC5taW4oTWF0aC5tYXgoMCxuKSwxKX1nZXQgbGltaXQoKXtyZXR1cm4gdGhpcy5fbGltaXR9c2V0IGxpbWl0KHQpe3RoaXMuX2xpbWl0PXQsdGhpcy5jaGVja1RyaW0oKX1nZXQodCxuPTIpe3JldHVybiBzdXBlci5nZXQodCxuKX1wZWVrKHQpe3JldHVybiBzdXBlci5nZXQodCwwKX1zZXQodCxuKXtyZXR1cm4gc3VwZXIuc2V0KHQsbiwyKSx0aGlzfWNoZWNrVHJpbSgpe3RoaXMuc2l6ZT50aGlzLl9saW1pdCYmdGhpcy50cmltKE1hdGgucm91bmQodGhpcy5fbGltaXQqdGhpcy5fcmF0aW8pKX19Y2xhc3MgQXUgZXh0ZW5kcyBTdXtjb25zdHJ1Y3Rvcih0LG49MSl7c3VwZXIodCxuKX10cmltKHQpe3RoaXMudHJpbU9sZCh0KX1zZXQodCxuKXtyZXR1cm4gc3VwZXIuc2V0KHQsbiksdGhpcy5jaGVja1RyaW0oKSx0aGlzfX1jbGFzcyBrdXtjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9YWRkKHQsbil7bGV0IHI9dGhpcy5tYXAuZ2V0KHQpO3J8fChyPW5ldyBTZXQsdGhpcy5tYXAuc2V0KHQscikpLHIuYWRkKG4pfWRlbGV0ZSh0LG4pe2NvbnN0IHI9dGhpcy5tYXAuZ2V0KHQpO3ImJihyLmRlbGV0ZShuKSxyLnNpemU9PT0wJiZ0aGlzLm1hcC5kZWxldGUodCkpfWZvckVhY2godCxuKXtjb25zdCByPXRoaXMubWFwLmdldCh0KTtyJiZyLmZvckVhY2gobil9Z2V0KHQpe2NvbnN0IG49dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBufHxuZXcgU2V0fX1uZXcgQXUoMTApO2Z1bmN0aW9uIFJ1KGUpe2xldCB0PVtdO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PWU7KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkpLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0fWZ1bmN0aW9uIFdzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgUnUoZSkpdHlwZW9mIGVbbl09PSJmdW5jdGlvbiImJnQucHVzaChuKTtyZXR1cm4gdH1mdW5jdGlvbiBFdShlLHQpe2NvbnN0IG49aT0+ZnVuY3Rpb24oKXtjb25zdCBzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gdChpLHMpfSxyPXt9O2Zvcihjb25zdCBpIG9mIGUpcltpXT1uKGkpO3JldHVybiByfXZhciBIczsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifSkoSHN8fChIcz17fSkpO3ZhciB6czsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTNdPSJSaWdodCJ9KSh6c3x8KHpzPXt9KSk7dmFyIEdzOyhmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0pKEdzfHwoR3M9e30pKTtmdW5jdGlvbiBNdShlLHQsbixyLGkpe2lmKHI9PT0wKXJldHVybiEwO2NvbnN0IHM9dC5jaGFyQ29kZUF0KHItMSk7aWYoZS5nZXQocykhPT0wfHxzPT09MTN8fHM9PT0xMClyZXR1cm4hMDtpZihpPjApe2NvbnN0IGE9dC5jaGFyQ29kZUF0KHIpO2lmKGUuZ2V0KGEpIT09MClyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBDdShlLHQsbixyLGkpe2lmKHIraT09PW4pcmV0dXJuITA7Y29uc3Qgcz10LmNoYXJDb2RlQXQocitpKTtpZihlLmdldChzKSE9PTB8fHM9PT0xM3x8cz09PTEwKXJldHVybiEwO2lmKGk+MCl7Y29uc3QgYT10LmNoYXJDb2RlQXQocitpLTEpO2lmKGUuZ2V0KGEpIT09MClyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBUdShlLHQsbixyLGkpe3JldHVybiBNdShlLHQsbixyLGkpJiZDdShlLHQsbixyLGkpfWNsYXNzIFB1e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5fd29yZFNlcGFyYXRvcnM9dCx0aGlzLl9zZWFyY2hSZWdleD1uLHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9cmVzZXQodCl7dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4PXQsdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1uZXh0KHQpe2NvbnN0IG49dC5sZW5ndGg7bGV0IHI7ZG97aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCt0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9PT1ufHwocj10aGlzLl9zZWFyY2hSZWdleC5leGVjKHQpLCFyKSlyZXR1cm4gbnVsbDtjb25zdCBpPXIuaW5kZXgscz1yWzBdLmxlbmd0aDtpZihpPT09dGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCYmcz09PXRoaXMuX3ByZXZNYXRjaExlbmd0aCl7aWYocz09PTApe0FsKHQsbix0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgpPjY1NTM1P3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9Mjp0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTE7Y29udGludWV9cmV0dXJuIG51bGx9aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD1pLHRoaXMuX3ByZXZNYXRjaExlbmd0aD1zLCF0aGlzLl93b3JkU2VwYXJhdG9yc3x8VHUodGhpcy5fd29yZFNlcGFyYXRvcnMsdCxuLGkscykpcmV0dXJuIHJ9d2hpbGUocik7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEl1KGUsdD0iVW5yZWFjaGFibGUiKXt0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24geW4oZSl7aWYoIWUoKSl7ZGVidWdnZXI7ZSgpLENlKG5ldyBwZSgiQXNzZXJ0aW9uIEZhaWxlZCIpKX19ZnVuY3Rpb24gSnMoZSx0KXtsZXQgbj0wO2Zvcig7bjxlLmxlbmd0aC0xOyl7Y29uc3Qgcj1lW25dLGk9ZVtuKzFdO2lmKCF0KHIsaSkpcmV0dXJuITE7bisrfXJldHVybiEwfWNvbnN0IEZ1PSJgfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsLjw+Lz8iO2Z1bmN0aW9uIFZ1KGU9IiIpe2xldCB0PSIoLT9cXGQqXFwuXFxkXFx3Kil8KFteIjtmb3IoY29uc3QgbiBvZiBGdSllLmluZGV4T2Yobik+PTB8fCh0Kz0iXFwiK24pO3JldHVybiB0Kz0iXFxzXSspIixuZXcgUmVnRXhwKHQsImciKX1jb25zdCBYcz1WdSgpO2Z1bmN0aW9uIFFzKGUpe2xldCB0PVhzO2lmKGUmJmUgaW5zdGFuY2VvZiBSZWdFeHApaWYoZS5nbG9iYWwpdD1lO2Vsc2V7bGV0IG49ImciO2UuaWdub3JlQ2FzZSYmKG4rPSJpIiksZS5tdWx0aWxpbmUmJihuKz0ibSIpLGUudW5pY29kZSYmKG4rPSJ1IiksdD1uZXcgUmVnRXhwKGUuc291cmNlLG4pfXJldHVybiB0Lmxhc3RJbmRleD0wLHR9Y29uc3QgWXM9bmV3IHJsO1lzLnVuc2hpZnQoe21heExlbjoxZTMsd2luZG93U2l6ZToxNSx0aW1lQnVkZ2V0OjE1MH0pO2Z1bmN0aW9uIFNyKGUsdCxuLHIsaSl7aWYodD1Rcyh0KSxpfHwoaT1vbi5maXJzdChZcykpLG4ubGVuZ3RoPmkubWF4TGVuKXtsZXQgdT1lLWkubWF4TGVuLzI7cmV0dXJuIHU8MD91PTA6cis9dSxuPW4uc3Vic3RyaW5nKHUsZStpLm1heExlbi8yKSxTcihlLHQsbixyLGkpfWNvbnN0IHM9RGF0ZS5ub3coKSxhPWUtMS1yO2xldCBsPS0xLG89bnVsbDtmb3IobGV0IHU9MTshKERhdGUubm93KCktcz49aS50aW1lQnVkZ2V0KTt1Kyspe2NvbnN0IGg9YS1pLndpbmRvd1NpemUqdTt0Lmxhc3RJbmRleD1NYXRoLm1heCgwLGgpO2NvbnN0IGM9RHUodCxuLGEsbCk7aWYoIWMmJm98fChvPWMsaDw9MCkpYnJlYWs7bD1ofWlmKG8pe2NvbnN0IHU9e3dvcmQ6b1swXSxzdGFydENvbHVtbjpyKzErby5pbmRleCxlbmRDb2x1bW46cisxK28uaW5kZXgrb1swXS5sZW5ndGh9O3JldHVybiB0Lmxhc3RJbmRleD0wLHV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRHUoZSx0LG4scil7bGV0IGk7Zm9yKDtpPWUuZXhlYyh0KTspe2NvbnN0IHM9aS5pbmRleHx8MDtpZihzPD1uJiZlLmxhc3RJbmRleD49bilyZXR1cm4gaTtpZihyPjAmJnM+cilyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH1jbGFzcyBPdXtzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHQsbixyKXtjb25zdCBpPXI/ci5zdGFydExpbmVOdW1iZXI6MSxzPXI/ci5lbmRMaW5lTnVtYmVyOnQuZ2V0TGluZUNvdW50KCksYT1uZXcgWnMobiksbD1hLmdldENhbmRpZGF0ZUNvZGVQb2ludHMoKTtsZXQgbztsPT09ImFsbE5vbkJhc2ljQXNjaWkiP289bmV3IFJlZ0V4cCgiW15cXHRcXG5cXHJcXHgyMC1cXHg3RV0iLCJnIik6bz1uZXcgUmVnRXhwKGAkeyR1KEFycmF5LmZyb20obCkpfWAsImciKTtjb25zdCB1PW5ldyBQdShudWxsLG8pLGg9W107bGV0IGM9ITEsZCxtPTAsZz0wLHA9MDtlOmZvcihsZXQgdj1pLHc9czt2PD13O3YrKyl7Y29uc3QgXz10LmdldExpbmVDb250ZW50KHYpLHg9Xy5sZW5ndGg7dS5yZXNldCgwKTtkbyBpZihkPXUubmV4dChfKSxkKXtsZXQgeT1kLmluZGV4LGI9ZC5pbmRleCtkWzBdLmxlbmd0aDtpZih5PjApe2NvbnN0IEY9Xy5jaGFyQ29kZUF0KHktMSk7aG4oRikmJnktLX1pZihiKzE8eCl7Y29uc3QgRj1fLmNoYXJDb2RlQXQoYi0xKTtobihGKSYmYisrfWNvbnN0IEw9Xy5zdWJzdHJpbmcoeSxiKTtsZXQgUz1Tcih5KzEsWHMsXywwKTtTJiZTLmVuZENvbHVtbjw9eSsxJiYoUz1udWxsKTtjb25zdCBNPWEuc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShMLFM/Uy53b3JkOm51bGwpO2lmKE0hPT0wKXtpZihNPT09Mz9tKys6TT09PTI/ZysrOk09PT0xP3ArKzpJdSgpLGgubGVuZ3RoPj0xZTMpe2M9ITA7YnJlYWsgZX1oLnB1c2gobmV3IHoodix5KzEsdixiKzEpKX19d2hpbGUoZCl9cmV0dXJue3JhbmdlczpoLGhhc01vcmU6YyxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDptLGludmlzaWJsZUNoYXJhY3RlckNvdW50Omcsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OnB9fXN0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodFJlYXNvbih0LG4pe2NvbnN0IHI9bmV3IFpzKG4pO3N3aXRjaChyLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkodCxudWxsKSl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMjpyZXR1cm57a2luZDoxfTtjYXNlIDM6e2NvbnN0IHM9dC5jb2RlUG9pbnRBdCgwKSxhPXIuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRQcmltYXJ5Q29uZnVzYWJsZShzKSxsPVV0LmdldExvY2FsZXMoKS5maWx0ZXIobz0+IVV0LmdldEluc3RhbmNlKG5ldyBTZXQoWy4uLm4uYWxsb3dlZExvY2FsZXMsb10pKS5pc0FtYmlndW91cyhzKSk7cmV0dXJue2tpbmQ6MCxjb25mdXNhYmxlV2l0aDpTdHJpbmcuZnJvbUNvZGVQb2ludChhKSxub3RBbWJpZ3VvdXNJbkxvY2FsZXM6bH19Y2FzZSAxOnJldHVybntraW5kOjJ9fX19ZnVuY3Rpb24gJHUoZSx0KXtyZXR1cm5gWyR7X2woZS5tYXAocj0+U3RyaW5nLmZyb21Db2RlUG9pbnQocikpLmpvaW4oIiIpKX1dYH1jbGFzcyBac3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wdGlvbnM9dCx0aGlzLmFsbG93ZWRDb2RlUG9pbnRzPW5ldyBTZXQodC5hbGxvd2VkQ29kZVBvaW50cyksdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzPVV0LmdldEluc3RhbmNlKG5ldyBTZXQodC5hbGxvd2VkTG9jYWxlcykpfWdldENhbmRpZGF0ZUNvZGVQb2ludHMoKXtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4iYWxsTm9uQmFzaWNBc2NpaSI7Y29uc3QgdD1uZXcgU2V0O2lmKHRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzKWZvcihjb25zdCBuIG9mIEJ0LmNvZGVQb2ludHMpS3MoU3RyaW5nLmZyb21Db2RlUG9pbnQobikpfHx0LmFkZChuKTtpZih0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycylmb3IoY29uc3QgbiBvZiB0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKSl0LmFkZChuKTtmb3IoY29uc3QgbiBvZiB0aGlzLmFsbG93ZWRDb2RlUG9pbnRzKXQuZGVsZXRlKG4pO3JldHVybiB0fXNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkodCxuKXtjb25zdCByPXQuY29kZVBvaW50QXQoMCk7aWYodGhpcy5hbGxvd2VkQ29kZVBvaW50cy5oYXMocikpcmV0dXJuIDA7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuIDE7bGV0IGk9ITEscz0hMTtpZihuKWZvcihjb25zdCBhIG9mIG4pe2NvbnN0IGw9YS5jb2RlUG9pbnRBdCgwKSxvPVJsKGEpO2k9aXx8bywhbyYmIXRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyhsKSYmIUJ0LmlzSW52aXNpYmxlQ2hhcmFjdGVyKGwpJiYocz0hMCl9cmV0dXJuIWkmJnM/MDp0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycyYmIUtzKHQpJiZCdC5pc0ludmlzaWJsZUNoYXJhY3RlcihyKT8yOnRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzJiZ0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXMocik/MzowfX1mdW5jdGlvbiBLcyhlKXtyZXR1cm4gZT09PSIgInx8ZT09PWAKYHx8ZT09PSIJIn1jbGFzcyB3bntjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5jaGFuZ2VzPXQsdGhpcy5tb3Zlcz1uLHRoaXMuaGl0VGltZW91dD1yfX1jbGFzcyBVdXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGluZVJhbmdlTWFwcGluZz10LHRoaXMuY2hhbmdlcz1ufX1jbGFzcyBXe3N0YXRpYyBhZGRSYW5nZSh0LG4pe2xldCByPTA7Zm9yKDtyPG4ubGVuZ3RoJiZuW3JdLmVuZEV4Y2x1c2l2ZTx0LnN0YXJ0OylyKys7bGV0IGk9cjtmb3IoO2k8bi5sZW5ndGgmJm5baV0uc3RhcnQ8PXQuZW5kRXhjbHVzaXZlOylpKys7aWYocj09PWkpbi5zcGxpY2UociwwLHQpO2Vsc2V7Y29uc3Qgcz1NYXRoLm1pbih0LnN0YXJ0LG5bcl0uc3RhcnQpLGE9TWF0aC5tYXgodC5lbmRFeGNsdXNpdmUsbltpLTFdLmVuZEV4Y2x1c2l2ZSk7bi5zcGxpY2UocixpLXIsbmV3IFcocyxhKSl9fXN0YXRpYyB0cnlDcmVhdGUodCxuKXtpZighKHQ+bikpcmV0dXJuIG5ldyBXKHQsbil9c3RhdGljIG9mTGVuZ3RoKHQpe3JldHVybiBuZXcgVygwLHQpfXN0YXRpYyBvZlN0YXJ0QW5kTGVuZ3RoKHQsbil7cmV0dXJuIG5ldyBXKHQsdCtuKX1jb25zdHJ1Y3Rvcih0LG4pe2lmKHRoaXMuc3RhcnQ9dCx0aGlzLmVuZEV4Y2x1c2l2ZT1uLHQ+bil0aHJvdyBuZXcgcGUoYEludmFsaWQgcmFuZ2U6ICR7dGhpcy50b1N0cmluZygpfWApfWdldCBpc0VtcHR5KCl7cmV0dXJuIHRoaXMuc3RhcnQ9PT10aGlzLmVuZEV4Y2x1c2l2ZX1kZWx0YSh0KXtyZXR1cm4gbmV3IFcodGhpcy5zdGFydCt0LHRoaXMuZW5kRXhjbHVzaXZlK3QpfWRlbHRhU3RhcnQodCl7cmV0dXJuIG5ldyBXKHRoaXMuc3RhcnQrdCx0aGlzLmVuZEV4Y2x1c2l2ZSl9ZGVsdGFFbmQodCl7cmV0dXJuIG5ldyBXKHRoaXMuc3RhcnQsdGhpcy5lbmRFeGNsdXNpdmUrdCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZEV4Y2x1c2l2ZS10aGlzLnN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYFske3RoaXMuc3RhcnR9LCAke3RoaXMuZW5kRXhjbHVzaXZlfSlgfWNvbnRhaW5zKHQpe3JldHVybiB0aGlzLnN0YXJ0PD10JiZ0PHRoaXMuZW5kRXhjbHVzaXZlfWpvaW4odCl7cmV0dXJuIG5ldyBXKE1hdGgubWluKHRoaXMuc3RhcnQsdC5zdGFydCksTWF0aC5tYXgodGhpcy5lbmRFeGNsdXNpdmUsdC5lbmRFeGNsdXNpdmUpKX1pbnRlcnNlY3QodCl7Y29uc3Qgbj1NYXRoLm1heCh0aGlzLnN0YXJ0LHQuc3RhcnQpLHI9TWF0aC5taW4odGhpcy5lbmRFeGNsdXNpdmUsdC5lbmRFeGNsdXNpdmUpO2lmKG48PXIpcmV0dXJuIG5ldyBXKG4scil9aW50ZXJzZWN0cyh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnQsdC5zdGFydCkscj1NYXRoLm1pbih0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSk7cmV0dXJuIG48cn1pc0JlZm9yZSh0KXtyZXR1cm4gdGhpcy5lbmRFeGNsdXNpdmU8PXQuc3RhcnR9aXNBZnRlcih0KXtyZXR1cm4gdGhpcy5zdGFydD49dC5lbmRFeGNsdXNpdmV9c2xpY2UodCl7cmV0dXJuIHQuc2xpY2UodGhpcy5zdGFydCx0aGlzLmVuZEV4Y2x1c2l2ZSl9c3Vic3RyaW5nKHQpe3JldHVybiB0LnN1YnN0cmluZyh0aGlzLnN0YXJ0LHRoaXMuZW5kRXhjbHVzaXZlKX1jbGlwKHQpe2lmKHRoaXMuaXNFbXB0eSl0aHJvdyBuZXcgcGUoYEludmFsaWQgY2xpcHBpbmcgcmFuZ2U6ICR7dGhpcy50b1N0cmluZygpfWApO3JldHVybiBNYXRoLm1heCh0aGlzLnN0YXJ0LE1hdGgubWluKHRoaXMuZW5kRXhjbHVzaXZlLTEsdCkpfWNsaXBDeWNsaWModCl7aWYodGhpcy5pc0VtcHR5KXRocm93IG5ldyBwZShgSW52YWxpZCBjbGlwcGluZyByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCk7cmV0dXJuIHQ8dGhpcy5zdGFydD90aGlzLmVuZEV4Y2x1c2l2ZS0odGhpcy5zdGFydC10KSV0aGlzLmxlbmd0aDp0Pj10aGlzLmVuZEV4Y2x1c2l2ZT90aGlzLnN0YXJ0Kyh0LXRoaXMuc3RhcnQpJXRoaXMubGVuZ3RoOnR9Zm9yRWFjaCh0KXtmb3IobGV0IG49dGhpcy5zdGFydDtuPHRoaXMuZW5kRXhjbHVzaXZlO24rKyl0KG4pfX1mdW5jdGlvbiB5dChlLHQpe2NvbnN0IG49V3QoZSx0KTtyZXR1cm4gbj09PS0xP3ZvaWQgMDplW25dfWZ1bmN0aW9uIFd0KGUsdCxuPTAscj1lLmxlbmd0aCl7bGV0IGk9bixzPXI7Zm9yKDtpPHM7KXtjb25zdCBhPU1hdGguZmxvb3IoKGkrcykvMik7dChlW2FdKT9pPWErMTpzPWF9cmV0dXJuIGktMX1mdW5jdGlvbiBCdShlLHQpe2NvbnN0IG49QXIoZSx0KTtyZXR1cm4gbj09PWUubGVuZ3RoP3ZvaWQgMDplW25dfWZ1bmN0aW9uIEFyKGUsdCxuPTAscj1lLmxlbmd0aCl7bGV0IGk9bixzPXI7Zm9yKDtpPHM7KXtjb25zdCBhPU1hdGguZmxvb3IoKGkrcykvMik7dChlW2FdKT9zPWE6aT1hKzF9cmV0dXJuIGl9Y29uc3QgcW49Y2xhc3MgcW57Y29uc3RydWN0b3IodCl7dGhpcy5fYXJyYXk9dCx0aGlzLl9maW5kTGFzdE1vbm90b25vdXNMYXN0SWR4PTB9ZmluZExhc3RNb25vdG9ub3VzKHQpe2lmKHFuLmFzc2VydEludmFyaWFudHMpe2lmKHRoaXMuX3ByZXZGaW5kTGFzdFByZWRpY2F0ZSl7Zm9yKGNvbnN0IHIgb2YgdGhpcy5fYXJyYXkpaWYodGhpcy5fcHJldkZpbmRMYXN0UHJlZGljYXRlKHIpJiYhdChyKSl0aHJvdyBuZXcgRXJyb3IoIk1vbm90b25vdXNBcnJheTogY3VycmVudCBwcmVkaWNhdGUgbXVzdCBiZSB3ZWFrZXIgdGhhbiAob3IgZXF1YWwgdG8pIHRoZSBwcmV2aW91cyBwcmVkaWNhdGUuIil9dGhpcy5fcHJldkZpbmRMYXN0UHJlZGljYXRlPXR9Y29uc3Qgbj1XdCh0aGlzLl9hcnJheSx0LHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHgpO3JldHVybiB0aGlzLl9maW5kTGFzdE1vbm90b25vdXNMYXN0SWR4PW4rMSxuPT09LTE/dm9pZCAwOnRoaXMuX2FycmF5W25dfX07cW4uYXNzZXJ0SW52YXJpYW50cz0hMTtsZXQgX249cW47Y2xhc3MgJHtzdGF0aWMgZnJvbVJhbmdlSW5jbHVzaXZlKHQpe3JldHVybiBuZXcgJCh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXIrMSl9c3RhdGljIGpvaW5NYW55KHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgbj1uZXcgSWUodFswXS5zbGljZSgpKTtmb3IobGV0IHI9MTtyPHQubGVuZ3RoO3IrKyluPW4uZ2V0VW5pb24obmV3IEllKHRbcl0uc2xpY2UoKSkpO3JldHVybiBuLnJhbmdlc31zdGF0aWMgam9pbih0KXtpZih0Lmxlbmd0aD09PTApdGhyb3cgbmV3IHBlKCJsaW5lUmFuZ2VzIGNhbm5vdCBiZSBlbXB0eSIpO2xldCBuPXRbMF0uc3RhcnRMaW5lTnVtYmVyLHI9dFswXS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlO2ZvcihsZXQgaT0xO2k8dC5sZW5ndGg7aSsrKW49TWF0aC5taW4obix0W2ldLnN0YXJ0TGluZU51bWJlcikscj1NYXRoLm1heChyLHRbaV0uZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7cmV0dXJuIG5ldyAkKG4scil9c3RhdGljIG9mTGVuZ3RoKHQsbil7cmV0dXJuIG5ldyAkKHQsdCtuKX1zdGF0aWMgZGVzZXJpYWxpemUodCl7cmV0dXJuIG5ldyAkKHRbMF0sdFsxXSl9Y29uc3RydWN0b3IodCxuKXtpZih0Pm4pdGhyb3cgbmV3IHBlKGBzdGFydExpbmVOdW1iZXIgJHt0fSBjYW5ub3QgYmUgYWZ0ZXIgZW5kTGluZU51bWJlckV4Y2x1c2l2ZSAke259YCk7dGhpcy5zdGFydExpbmVOdW1iZXI9dCx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9bn1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQmJnQ8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWdldCBpc0VtcHR5KCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWRlbHRhKHQpe3JldHVybiBuZXcgJCh0aGlzLnN0YXJ0TGluZU51bWJlcit0LHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSt0KX1kZWx0YUxlbmd0aCh0KXtyZXR1cm4gbmV3ICQodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK3QpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLXRoaXMuc3RhcnRMaW5lTnVtYmVyfWpvaW4odCl7cmV0dXJuIG5ldyAkKE1hdGgubWluKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRMaW5lTnVtYmVyKSxNYXRoLm1heCh0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsdC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSl9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFydExpbmVOdW1iZXJ9LCR7dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfSlgfWludGVyc2VjdCh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRMaW5lTnVtYmVyKSxyPU1hdGgubWluKHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpO2lmKG48PXIpcmV0dXJuIG5ldyAkKG4scil9aW50ZXJzZWN0c1N0cmljdCh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZ0LnN0YXJ0TGluZU51bWJlcjx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9b3ZlcmxhcE9yVG91Y2godCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnQuc3RhcnRMaW5lTnVtYmVyPD10aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9ZXF1YWxzKHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZ0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9dG9JbmNsdXNpdmVSYW5nZSgpe3JldHVybiB0aGlzLmlzRW1wdHk/bnVsbDpuZXcgeih0aGlzLnN0YXJ0TGluZU51bWJlciwxLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKX10b0V4Y2x1c2l2ZVJhbmdlKCl7cmV0dXJuIG5ldyB6KHRoaXMuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLDEpfW1hcFRvTGluZUFycmF5KHQpe2NvbnN0IG49W107Zm9yKGxldCByPXRoaXMuc3RhcnRMaW5lTnVtYmVyO3I8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlO3IrKyluLnB1c2godChyKSk7cmV0dXJuIG59Zm9yRWFjaCh0KXtmb3IobGV0IG49dGhpcy5zdGFydExpbmVOdW1iZXI7bjx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7bisrKXQobil9c2VyaWFsaXplKCl7cmV0dXJuW3RoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZV19aW5jbHVkZXModCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPD10JiZ0PHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX10b09mZnNldFJhbmdlKCl7cmV0dXJuIG5ldyBXKHRoaXMuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEpfX1jbGFzcyBJZXtjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLl9ub3JtYWxpemVkUmFuZ2VzPXR9Z2V0IHJhbmdlcygpe3JldHVybiB0aGlzLl9ub3JtYWxpemVkUmFuZ2VzfWFkZFJhbmdlKHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm47Y29uc3Qgbj1Bcih0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLGk9PmkuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT49dC5zdGFydExpbmVOdW1iZXIpLHI9V3QodGhpcy5fbm9ybWFsaXplZFJhbmdlcyxpPT5pLnN0YXJ0TGluZU51bWJlcjw9dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSsxO2lmKG49PT1yKXRoaXMuX25vcm1hbGl6ZWRSYW5nZXMuc3BsaWNlKG4sMCx0KTtlbHNlIGlmKG49PT1yLTEpe2NvbnN0IGk9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tuXTt0aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dPWkuam9pbih0KX1lbHNle2NvbnN0IGk9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tuXS5qb2luKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbci0xXSkuam9pbih0KTt0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLnNwbGljZShuLHItbixpKX19Y29udGFpbnModCl7Y29uc3Qgbj15dCh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLHI9PnIuc3RhcnRMaW5lTnVtYmVyPD10KTtyZXR1cm4hIW4mJm4uZW5kTGluZU51bWJlckV4Y2x1c2l2ZT50fWludGVyc2VjdHModCl7Y29uc3Qgbj15dCh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLHI9PnIuc3RhcnRMaW5lTnVtYmVyPHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7cmV0dXJuISFuJiZuLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+dC5zdGFydExpbmVOdW1iZXJ9Z2V0VW5pb24odCl7aWYodGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg9PT0wKXJldHVybiB0O2lmKHQuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoPT09MClyZXR1cm4gdGhpcztjb25zdCBuPVtdO2xldCByPTAsaT0wLHM9bnVsbDtmb3IoO3I8dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGh8fGk8dC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg7KXtsZXQgYT1udWxsO2lmKHI8dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGgmJmk8dC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGgpe2NvbnN0IGw9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tyXSxvPXQuX25vcm1hbGl6ZWRSYW5nZXNbaV07bC5zdGFydExpbmVOdW1iZXI8by5zdGFydExpbmVOdW1iZXI/KGE9bCxyKyspOihhPW8saSsrKX1lbHNlIHI8dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg/KGE9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tyXSxyKyspOihhPXQuX25vcm1hbGl6ZWRSYW5nZXNbaV0saSsrKTtzPT09bnVsbD9zPWE6cy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPj1hLnN0YXJ0TGluZU51bWJlcj9zPW5ldyAkKHMuc3RhcnRMaW5lTnVtYmVyLE1hdGgubWF4KHMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxhLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKToobi5wdXNoKHMpLHM9YSl9cmV0dXJuIHMhPT1udWxsJiZuLnB1c2gocyksbmV3IEllKG4pfXN1YnRyYWN0RnJvbSh0KXtjb25zdCBuPUFyKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsYT0+YS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPj10LnN0YXJ0TGluZU51bWJlcikscj1XdCh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLGE9PmEuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKzE7aWYobj09PXIpcmV0dXJuIG5ldyBJZShbdF0pO2NvbnN0IGk9W107bGV0IHM9dC5zdGFydExpbmVOdW1iZXI7Zm9yKGxldCBhPW47YTxyO2ErKyl7Y29uc3QgbD10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW2FdO2wuc3RhcnRMaW5lTnVtYmVyPnMmJmkucHVzaChuZXcgJChzLGwuc3RhcnRMaW5lTnVtYmVyKSkscz1sLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9cmV0dXJuIHM8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZpLnB1c2gobmV3ICQocyx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKSxuZXcgSWUoaSl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5fbm9ybWFsaXplZFJhbmdlcy5tYXAodD0+dC50b1N0cmluZygpKS5qb2luKCIsICIpfWdldEludGVyc2VjdGlvbih0KXtjb25zdCBuPVtdO2xldCByPTAsaT0wO2Zvcig7cjx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCYmaTx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aDspe2NvbnN0IHM9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tyXSxhPXQuX25vcm1hbGl6ZWRSYW5nZXNbaV0sbD1zLmludGVyc2VjdChhKTtsJiYhbC5pc0VtcHR5JiZuLnB1c2gobCkscy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPGEuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT9yKys6aSsrfXJldHVybiBuZXcgSWUobil9Z2V0V2l0aERlbHRhKHQpe3JldHVybiBuZXcgSWUodGhpcy5fbm9ybWFsaXplZFJhbmdlcy5tYXAobj0+bi5kZWx0YSh0KSkpfX1jb25zdCBydD1jbGFzcyBydHtzdGF0aWMgYmV0d2VlblBvc2l0aW9ucyh0LG4pe3JldHVybiB0LmxpbmVOdW1iZXI9PT1uLmxpbmVOdW1iZXI/bmV3IHJ0KDAsbi5jb2x1bW4tdC5jb2x1bW4pOm5ldyBydChuLmxpbmVOdW1iZXItdC5saW5lTnVtYmVyLG4uY29sdW1uLTEpfXN0YXRpYyBvZlJhbmdlKHQpe3JldHVybiBydC5iZXR3ZWVuUG9zaXRpb25zKHQuZ2V0U3RhcnRQb3NpdGlvbigpLHQuZ2V0RW5kUG9zaXRpb24oKSl9c3RhdGljIG9mVGV4dCh0KXtsZXQgbj0wLHI9MDtmb3IoY29uc3QgaSBvZiB0KWk9PT1gCmA/KG4rKyxyPTApOnIrKztyZXR1cm4gbmV3IHJ0KG4scil9Y29uc3RydWN0b3IodCxuKXt0aGlzLmxpbmVDb3VudD10LHRoaXMuY29sdW1uQ291bnQ9bn1pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvKHQpe3JldHVybiB0aGlzLmxpbmVDb3VudCE9PXQubGluZUNvdW50P3RoaXMubGluZUNvdW50PnQubGluZUNvdW50OnRoaXMuY29sdW1uQ291bnQ+PXQuY29sdW1uQ291bnR9Y3JlYXRlUmFuZ2UodCl7cmV0dXJuIHRoaXMubGluZUNvdW50PT09MD9uZXcgeih0LmxpbmVOdW1iZXIsdC5jb2x1bW4sdC5saW5lTnVtYmVyLHQuY29sdW1uK3RoaXMuY29sdW1uQ291bnQpOm5ldyB6KHQubGluZU51bWJlcix0LmNvbHVtbix0LmxpbmVOdW1iZXIrdGhpcy5saW5lQ291bnQsdGhpcy5jb2x1bW5Db3VudCsxKX1hZGRUb1Bvc2l0aW9uKHQpe3JldHVybiB0aGlzLmxpbmVDb3VudD09PTA/bmV3IGVlKHQubGluZU51bWJlcix0LmNvbHVtbit0aGlzLmNvbHVtbkNvdW50KTpuZXcgZWUodC5saW5lTnVtYmVyK3RoaXMubGluZUNvdW50LHRoaXMuY29sdW1uQ291bnQrMSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLmxpbmVDb3VudH0sJHt0aGlzLmNvbHVtbkNvdW50fWB9fTtydC56ZXJvPW5ldyBydCgwLDApO2xldCBlYT1ydDtjbGFzcyBxdXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMucmFuZ2U9dCx0aGlzLnRleHQ9bn10b1NpbmdsZUVkaXRPcGVyYXRpb24oKXtyZXR1cm57cmFuZ2U6dGhpcy5yYW5nZSx0ZXh0OnRoaXMudGV4dH19fWNsYXNzIExle3N0YXRpYyBpbnZlcnNlKHQsbixyKXtjb25zdCBpPVtdO2xldCBzPTEsYT0xO2Zvcihjb25zdCBvIG9mIHQpe2NvbnN0IHU9bmV3IExlKG5ldyAkKHMsby5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpLG5ldyAkKGEsby5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKTt1Lm1vZGlmaWVkLmlzRW1wdHl8fGkucHVzaCh1KSxzPW8ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxhPW8ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1jb25zdCBsPW5ldyBMZShuZXcgJChzLG4rMSksbmV3ICQoYSxyKzEpKTtyZXR1cm4gbC5tb2RpZmllZC5pc0VtcHR5fHxpLnB1c2gobCksaX1zdGF0aWMgY2xpcCh0LG4scil7Y29uc3QgaT1bXTtmb3IoY29uc3QgcyBvZiB0KXtjb25zdCBhPXMub3JpZ2luYWwuaW50ZXJzZWN0KG4pLGw9cy5tb2RpZmllZC5pbnRlcnNlY3Qocik7YSYmIWEuaXNFbXB0eSYmbCYmIWwuaXNFbXB0eSYmaS5wdXNoKG5ldyBMZShhLGwpKX1yZXR1cm4gaX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMub3JpZ2luYWw9dCx0aGlzLm1vZGlmaWVkPW59dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbC50b1N0cmluZygpfS0+JHt0aGlzLm1vZGlmaWVkLnRvU3RyaW5nKCl9fWB9ZmxpcCgpe3JldHVybiBuZXcgTGUodGhpcy5tb2RpZmllZCx0aGlzLm9yaWdpbmFsKX1qb2luKHQpe3JldHVybiBuZXcgTGUodGhpcy5vcmlnaW5hbC5qb2luKHQub3JpZ2luYWwpLHRoaXMubW9kaWZpZWQuam9pbih0Lm1vZGlmaWVkKSl9dG9SYW5nZU1hcHBpbmcoKXtjb25zdCB0PXRoaXMub3JpZ2luYWwudG9JbmNsdXNpdmVSYW5nZSgpLG49dGhpcy5tb2RpZmllZC50b0luY2x1c2l2ZVJhbmdlKCk7aWYodCYmbilyZXR1cm4gbmV3IGtlKHQsbik7aWYodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI9PT0xfHx0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcj09PTEpe2lmKCEodGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI9PT0xJiZ0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcj09PTEpKXRocm93IG5ldyBwZSgibm90IGEgdmFsaWQgZGlmZiIpO3JldHVybiBuZXcga2UobmV3IHoodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsMSx0aGlzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSksbmV3IHoodGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsMSx0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSkpfWVsc2UgcmV0dXJuIG5ldyBrZShuZXcgeih0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSxuZXcgeih0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHRoaXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSl9dG9SYW5nZU1hcHBpbmcyKHQsbil7aWYodGEodGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLHQpJiZ0YSh0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsbikpcmV0dXJuIG5ldyBrZShuZXcgeih0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciwxLHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKSxuZXcgeih0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciwxLHRoaXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKSk7aWYoIXRoaXMub3JpZ2luYWwuaXNFbXB0eSYmIXRoaXMubW9kaWZpZWQuaXNFbXB0eSlyZXR1cm4gbmV3IGtlKHouZnJvbVBvc2l0aW9ucyhuZXcgZWUodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsMSksd3QobmV3IGVlKHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSx0KSksei5mcm9tUG9zaXRpb25zKG5ldyBlZSh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciwxKSx3dChuZXcgZWUodGhpcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLG4pKSk7aWYodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI+MSYmdGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI+MSlyZXR1cm4gbmV3IGtlKHouZnJvbVBvc2l0aW9ucyh3dChuZXcgZWUodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksdCksd3QobmV3IGVlKHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSx0KSksei5mcm9tUG9zaXRpb25zKHd0KG5ldyBlZSh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSxuKSx3dChuZXcgZWUodGhpcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLG4pKSk7dGhyb3cgbmV3IHBlfX1mdW5jdGlvbiB3dChlLHQpe2lmKGUubGluZU51bWJlcjwxKXJldHVybiBuZXcgZWUoMSwxKTtpZihlLmxpbmVOdW1iZXI+dC5sZW5ndGgpcmV0dXJuIG5ldyBlZSh0Lmxlbmd0aCx0W3QubGVuZ3RoLTFdLmxlbmd0aCsxKTtjb25zdCBuPXRbZS5saW5lTnVtYmVyLTFdO3JldHVybiBlLmNvbHVtbj5uLmxlbmd0aCsxP25ldyBlZShlLmxpbmVOdW1iZXIsbi5sZW5ndGgrMSk6ZX1mdW5jdGlvbiB0YShlLHQpe3JldHVybiBlPj0xJiZlPD10Lmxlbmd0aH1jbGFzcyBqZSBleHRlbmRzIExle3N0YXRpYyBmcm9tUmFuZ2VNYXBwaW5ncyh0KXtjb25zdCBuPSQuam9pbih0Lm1hcChpPT4kLmZyb21SYW5nZUluY2x1c2l2ZShpLm9yaWdpbmFsUmFuZ2UpKSkscj0kLmpvaW4odC5tYXAoaT0+JC5mcm9tUmFuZ2VJbmNsdXNpdmUoaS5tb2RpZmllZFJhbmdlKSkpO3JldHVybiBuZXcgamUobixyLHQpfWNvbnN0cnVjdG9yKHQsbixyKXtzdXBlcih0LG4pLHRoaXMuaW5uZXJDaGFuZ2VzPXJ9ZmxpcCgpe3JldHVybiBuZXcgamUodGhpcy5tb2RpZmllZCx0aGlzLm9yaWdpbmFsLHRoaXMuaW5uZXJDaGFuZ2VzPy5tYXAodD0+dC5mbGlwKCkpKX13aXRoSW5uZXJDaGFuZ2VzRnJvbUxpbmVSYW5nZXMoKXtyZXR1cm4gbmV3IGplKHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCxbdGhpcy50b1JhbmdlTWFwcGluZygpXSl9fWNsYXNzIGtle3N0YXRpYyBhc3NlcnRTb3J0ZWQodCl7Zm9yKGxldCBuPTE7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IHI9dFtuLTFdLGk9dFtuXTtpZighKHIub3JpZ2luYWxSYW5nZS5nZXRFbmRQb3NpdGlvbigpLmlzQmVmb3JlT3JFcXVhbChpLm9yaWdpbmFsUmFuZ2UuZ2V0U3RhcnRQb3NpdGlvbigpKSYmci5tb2RpZmllZFJhbmdlLmdldEVuZFBvc2l0aW9uKCkuaXNCZWZvcmVPckVxdWFsKGkubW9kaWZpZWRSYW5nZS5nZXRTdGFydFBvc2l0aW9uKCkpKSl0aHJvdyBuZXcgcGUoIlJhbmdlIG1hcHBpbmdzIG11c3QgYmUgc29ydGVkIil9fWNvbnN0cnVjdG9yKHQsbil7dGhpcy5vcmlnaW5hbFJhbmdlPXQsdGhpcy5tb2RpZmllZFJhbmdlPW59dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbFJhbmdlLnRvU3RyaW5nKCl9LT4ke3RoaXMubW9kaWZpZWRSYW5nZS50b1N0cmluZygpfX1gfWZsaXAoKXtyZXR1cm4gbmV3IGtlKHRoaXMubW9kaWZpZWRSYW5nZSx0aGlzLm9yaWdpbmFsUmFuZ2UpfXRvVGV4dEVkaXQodCl7Y29uc3Qgbj10LmdldFZhbHVlT2ZSYW5nZSh0aGlzLm1vZGlmaWVkUmFuZ2UpO3JldHVybiBuZXcgcXUodGhpcy5vcmlnaW5hbFJhbmdlLG4pfX1jb25zdCBqdT0zO2NsYXNzIFd1e2NvbXB1dGVEaWZmKHQsbixyKXtjb25zdCBzPW5ldyBHdSh0LG4se21heENvbXB1dGF0aW9uVGltZTpyLm1heENvbXB1dGF0aW9uVGltZU1zLHNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlOnIuaWdub3JlVHJpbVdoaXRlc3BhY2Usc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzOiEwLHNob3VsZE1ha2VQcmV0dHlEaWZmOiEwLHNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM6ITB9KS5jb21wdXRlRGlmZigpLGE9W107bGV0IGw9bnVsbDtmb3IoY29uc3QgbyBvZiBzLmNoYW5nZXMpe2xldCB1O28ub3JpZ2luYWxFbmRMaW5lTnVtYmVyPT09MD91PW5ldyAkKG8ub3JpZ2luYWxTdGFydExpbmVOdW1iZXIrMSxvLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyKzEpOnU9bmV3ICQoby5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcixvLm9yaWdpbmFsRW5kTGluZU51bWJlcisxKTtsZXQgaDtvLm1vZGlmaWVkRW5kTGluZU51bWJlcj09PTA/aD1uZXcgJChvLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyKzEsby5tb2RpZmllZFN0YXJ0TGluZU51bWJlcisxKTpoPW5ldyAkKG8ubW9kaWZpZWRTdGFydExpbmVOdW1iZXIsby5tb2RpZmllZEVuZExpbmVOdW1iZXIrMSk7bGV0IGM9bmV3IGplKHUsaCxvLmNoYXJDaGFuZ2VzPy5tYXAoZD0+bmV3IGtlKG5ldyB6KGQub3JpZ2luYWxTdGFydExpbmVOdW1iZXIsZC5vcmlnaW5hbFN0YXJ0Q29sdW1uLGQub3JpZ2luYWxFbmRMaW5lTnVtYmVyLGQub3JpZ2luYWxFbmRDb2x1bW4pLG5ldyB6KGQubW9kaWZpZWRTdGFydExpbmVOdW1iZXIsZC5tb2RpZmllZFN0YXJ0Q29sdW1uLGQubW9kaWZpZWRFbmRMaW5lTnVtYmVyLGQubW9kaWZpZWRFbmRDb2x1bW4pKSkpO2wmJihsLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1jLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcnx8bC5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09Yy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpJiYoYz1uZXcgamUobC5vcmlnaW5hbC5qb2luKGMub3JpZ2luYWwpLGwubW9kaWZpZWQuam9pbihjLm1vZGlmaWVkKSxsLmlubmVyQ2hhbmdlcyYmYy5pbm5lckNoYW5nZXM/bC5pbm5lckNoYW5nZXMuY29uY2F0KGMuaW5uZXJDaGFuZ2VzKTp2b2lkIDApLGEucG9wKCkpLGEucHVzaChjKSxsPWN9cmV0dXJuIHluKCgpPT5KcyhhLChvLHUpPT51Lm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1vLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT11Lm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1vLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJm8ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTx1Lm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciYmby5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHUubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyKSksbmV3IHduKGEsW10scy5xdWl0RWFybHkpfX1mdW5jdGlvbiBuYShlLHQsbixyKXtyZXR1cm4gbmV3IFplKGUsdCxuKS5Db21wdXRlRGlmZihyKX1sZXQgcmE9Y2xhc3N7Y29uc3RydWN0b3IodCl7Y29uc3Qgbj1bXSxyPVtdO2ZvcihsZXQgaT0wLHM9dC5sZW5ndGg7aTxzO2krKyluW2ldPWtyKHRbaV0sMSkscltpXT1Scih0W2ldLDEpO3RoaXMubGluZXM9dCx0aGlzLl9zdGFydENvbHVtbnM9bix0aGlzLl9lbmRDb2x1bW5zPXJ9Z2V0RWxlbWVudHMoKXtjb25zdCB0PVtdO2ZvcihsZXQgbj0wLHI9dGhpcy5saW5lcy5sZW5ndGg7bjxyO24rKyl0W25dPXRoaXMubGluZXNbbl0uc3Vic3RyaW5nKHRoaXMuX3N0YXJ0Q29sdW1uc1tuXS0xLHRoaXMuX2VuZENvbHVtbnNbbl0tMSk7cmV0dXJuIHR9Z2V0U3RyaWN0RWxlbWVudCh0KXtyZXR1cm4gdGhpcy5saW5lc1t0XX1nZXRTdGFydExpbmVOdW1iZXIodCl7cmV0dXJuIHQrMX1nZXRFbmRMaW5lTnVtYmVyKHQpe3JldHVybiB0KzF9Y3JlYXRlQ2hhclNlcXVlbmNlKHQsbixyKXtjb25zdCBpPVtdLHM9W10sYT1bXTtsZXQgbD0wO2ZvcihsZXQgbz1uO288PXI7bysrKXtjb25zdCB1PXRoaXMubGluZXNbb10saD10P3RoaXMuX3N0YXJ0Q29sdW1uc1tvXToxLGM9dD90aGlzLl9lbmRDb2x1bW5zW29dOnUubGVuZ3RoKzE7Zm9yKGxldCBkPWg7ZDxjO2QrKylpW2xdPXUuY2hhckNvZGVBdChkLTEpLHNbbF09bysxLGFbbF09ZCxsKys7IXQmJm88ciYmKGlbbF09MTAsc1tsXT1vKzEsYVtsXT11Lmxlbmd0aCsxLGwrKyl9cmV0dXJuIG5ldyBIdShpLHMsYSl9fTtjbGFzcyBIdXtjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5fY2hhckNvZGVzPXQsdGhpcy5fbGluZU51bWJlcnM9bix0aGlzLl9jb2x1bW5zPXJ9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5fY2hhckNvZGVzLm1hcCgodCxuKT0+KHQ9PT0xMD8iXFxuIjpTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKStgLSgke3RoaXMuX2xpbmVOdW1iZXJzW25dfSwke3RoaXMuX2NvbHVtbnNbbl19KWApLmpvaW4oIiwgIikrIl0ifV9hc3NlcnRJbmRleCh0LG4pe2lmKHQ8MHx8dD49bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIGluZGV4Iil9Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fY2hhckNvZGVzfWdldFN0YXJ0TGluZU51bWJlcih0KXtyZXR1cm4gdD4wJiZ0PT09dGhpcy5fbGluZU51bWJlcnMubGVuZ3RoP3RoaXMuZ2V0RW5kTGluZU51bWJlcih0LTEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2xpbmVOdW1iZXJzKSx0aGlzLl9saW5lTnVtYmVyc1t0XSl9Z2V0RW5kTGluZU51bWJlcih0KXtyZXR1cm4gdD09PS0xP3RoaXMuZ2V0U3RhcnRMaW5lTnVtYmVyKHQrMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fbGluZU51bWJlcnMpLHRoaXMuX2NoYXJDb2Rlc1t0XT09PTEwP3RoaXMuX2xpbmVOdW1iZXJzW3RdKzE6dGhpcy5fbGluZU51bWJlcnNbdF0pfWdldFN0YXJ0Q29sdW1uKHQpe3JldHVybiB0PjAmJnQ9PT10aGlzLl9jb2x1bW5zLmxlbmd0aD90aGlzLmdldEVuZENvbHVtbih0LTEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2NvbHVtbnMpLHRoaXMuX2NvbHVtbnNbdF0pfWdldEVuZENvbHVtbih0KXtyZXR1cm4gdD09PS0xP3RoaXMuZ2V0U3RhcnRDb2x1bW4odCsxKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9jb2x1bW5zKSx0aGlzLl9jaGFyQ29kZXNbdF09PT0xMD8xOnRoaXMuX2NvbHVtbnNbdF0rMSl9fWNsYXNzIF90e2NvbnN0cnVjdG9yKHQsbixyLGkscyxhLGwsbyl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj10LHRoaXMub3JpZ2luYWxTdGFydENvbHVtbj1uLHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPXIsdGhpcy5vcmlnaW5hbEVuZENvbHVtbj1pLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9cyx0aGlzLm1vZGlmaWVkU3RhcnRDb2x1bW49YSx0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1sLHRoaXMubW9kaWZpZWRFbmRDb2x1bW49b31zdGF0aWMgY3JlYXRlRnJvbURpZmZDaGFuZ2UodCxuLHIpe2NvbnN0IGk9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KSxzPW4uZ2V0U3RhcnRDb2x1bW4odC5vcmlnaW5hbFN0YXJ0KSxhPW4uZ2V0RW5kTGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxsPW4uZ2V0RW5kQ29sdW1uKHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpLG89ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KSx1PXIuZ2V0U3RhcnRDb2x1bW4odC5tb2RpZmllZFN0YXJ0KSxoPXIuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSxjPXIuZ2V0RW5kQ29sdW1uKHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpO3JldHVybiBuZXcgX3QoaSxzLGEsbCxvLHUsaCxjKX19ZnVuY3Rpb24genUoZSl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3QgdD1bZVswXV07bGV0IG49dFswXTtmb3IobGV0IHI9MSxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0IHM9ZVtyXSxhPXMub3JpZ2luYWxTdGFydC0obi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpLGw9cy5tb2RpZmllZFN0YXJ0LShuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCk7TWF0aC5taW4oYSxsKTxqdT8obi5vcmlnaW5hbExlbmd0aD1zLm9yaWdpbmFsU3RhcnQrcy5vcmlnaW5hbExlbmd0aC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1zLm1vZGlmaWVkU3RhcnQrcy5tb2RpZmllZExlbmd0aC1uLm1vZGlmaWVkU3RhcnQpOih0LnB1c2gocyksbj1zKX1yZXR1cm4gdH1jbGFzcyBIdHtjb25zdHJ1Y3Rvcih0LG4scixpLHMpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9dCx0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj1uLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9cix0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1pLHRoaXMuY2hhckNoYW5nZXM9c31zdGF0aWMgY3JlYXRlRnJvbURpZmZSZXN1bHQodCxuLHIsaSxzLGEsbCl7bGV0IG8sdSxoLGMsZDtpZihuLm9yaWdpbmFsTGVuZ3RoPT09MD8obz1yLmdldFN0YXJ0TGluZU51bWJlcihuLm9yaWdpbmFsU3RhcnQpLTEsdT0wKToobz1yLmdldFN0YXJ0TGluZU51bWJlcihuLm9yaWdpbmFsU3RhcnQpLHU9ci5nZXRFbmRMaW5lTnVtYmVyKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLTEpKSxuLm1vZGlmaWVkTGVuZ3RoPT09MD8oaD1pLmdldFN0YXJ0TGluZU51bWJlcihuLm1vZGlmaWVkU3RhcnQpLTEsYz0wKTooaD1pLmdldFN0YXJ0TGluZU51bWJlcihuLm1vZGlmaWVkU3RhcnQpLGM9aS5nZXRFbmRMaW5lTnVtYmVyKG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoLTEpKSxhJiZuLm9yaWdpbmFsTGVuZ3RoPjAmJm4ub3JpZ2luYWxMZW5ndGg8MjAmJm4ubW9kaWZpZWRMZW5ndGg+MCYmbi5tb2RpZmllZExlbmd0aDwyMCYmcygpKXtjb25zdCBtPXIuY3JlYXRlQ2hhclNlcXVlbmNlKHQsbi5vcmlnaW5hbFN0YXJ0LG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLTEpLGc9aS5jcmVhdGVDaGFyU2VxdWVuY2UodCxuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgtMSk7aWYobS5nZXRFbGVtZW50cygpLmxlbmd0aD4wJiZnLmdldEVsZW1lbnRzKCkubGVuZ3RoPjApe2xldCBwPW5hKG0sZyxzLCEwKS5jaGFuZ2VzO2wmJihwPXp1KHApKSxkPVtdO2ZvcihsZXQgdj0wLHc9cC5sZW5ndGg7djx3O3YrKylkLnB1c2goX3QuY3JlYXRlRnJvbURpZmZDaGFuZ2UocFt2XSxtLGcpKX19cmV0dXJuIG5ldyBIdChvLHUsaCxjLGQpfX1jbGFzcyBHdXtjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXM9ci5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzPXIuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlPXIuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZj1yLnNob3VsZE1ha2VQcmV0dHlEaWZmLHRoaXMub3JpZ2luYWxMaW5lcz10LHRoaXMubW9kaWZpZWRMaW5lcz1uLHRoaXMub3JpZ2luYWw9bmV3IHJhKHQpLHRoaXMubW9kaWZpZWQ9bmV3IHJhKG4pLHRoaXMuY29udGludWVMaW5lRGlmZj1pYShyLm1heENvbXB1dGF0aW9uVGltZSksdGhpcy5jb250aW51ZUNoYXJEaWZmPWlhKHIubWF4Q29tcHV0YXRpb25UaW1lPT09MD8wOk1hdGgubWluKHIubWF4Q29tcHV0YXRpb25UaW1lLDVlMykpfWNvbXB1dGVEaWZmKCl7aWYodGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGg9PT0xJiZ0aGlzLm9yaWdpbmFsLmxpbmVzWzBdLmxlbmd0aD09PTApcmV0dXJuIHRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoPT09MSYmdGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGg9PT0wP3txdWl0RWFybHk6ITEsY2hhbmdlczpbXX06e3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MSxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjp0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCxjaGFyQ2hhbmdlczp2b2lkIDB9XX07aWYodGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGg9PT0xJiZ0aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aD09PTApcmV0dXJue3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6dGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGgsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6MSxjaGFyQ2hhbmdlczp2b2lkIDB9XX07Y29uc3QgdD1uYSh0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUxpbmVEaWZmLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmYpLG49dC5jaGFuZ2VzLHI9dC5xdWl0RWFybHk7aWYodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSl7Y29uc3QgbD1bXTtmb3IobGV0IG89MCx1PW4ubGVuZ3RoO288dTtvKyspbC5wdXNoKEh0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsbltvXSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpO3JldHVybntxdWl0RWFybHk6cixjaGFuZ2VzOmx9fWNvbnN0IGk9W107bGV0IHM9MCxhPTA7Zm9yKGxldCBsPS0xLG89bi5sZW5ndGg7bDxvO2wrKyl7Y29uc3QgdT1sKzE8bz9uW2wrMV06bnVsbCxoPXU/dS5vcmlnaW5hbFN0YXJ0OnRoaXMub3JpZ2luYWxMaW5lcy5sZW5ndGgsYz11P3UubW9kaWZpZWRTdGFydDp0aGlzLm1vZGlmaWVkTGluZXMubGVuZ3RoO2Zvcig7czxoJiZhPGM7KXtjb25zdCBkPXRoaXMub3JpZ2luYWxMaW5lc1tzXSxtPXRoaXMubW9kaWZpZWRMaW5lc1thXTtpZihkIT09bSl7e2xldCBnPWtyKGQsMSkscD1rcihtLDEpO2Zvcig7Zz4xJiZwPjE7KXtjb25zdCB2PWQuY2hhckNvZGVBdChnLTIpLHc9bS5jaGFyQ29kZUF0KHAtMik7aWYodiE9PXcpYnJlYWs7Zy0tLHAtLX0oZz4xfHxwPjEpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGkscysxLDEsZyxhKzEsMSxwKX17bGV0IGc9UnIoZCwxKSxwPVJyKG0sMSk7Y29uc3Qgdj1kLmxlbmd0aCsxLHc9bS5sZW5ndGgrMTtmb3IoO2c8diYmcDx3Oyl7Y29uc3QgXz1kLmNoYXJDb2RlQXQoZy0xKSx4PWQuY2hhckNvZGVBdChwLTEpO2lmKF8hPT14KWJyZWFrO2crKyxwKyt9KGc8dnx8cDx3KSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShpLHMrMSxnLHYsYSsxLHAsdyl9fXMrKyxhKyt9dSYmKGkucHVzaChIdC5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHUsdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKSxzKz11Lm9yaWdpbmFsTGVuZ3RoLGErPXUubW9kaWZpZWRMZW5ndGgpfXJldHVybntxdWl0RWFybHk6cixjaGFuZ2VzOml9fV9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQsbixyLGkscyxhLGwpe2lmKHRoaXMuX21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQsbixyLGkscyxhLGwpKXJldHVybjtsZXQgbzt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmKG89W25ldyBfdChuLHIsbixpLHMsYSxzLGwpXSksdC5wdXNoKG5ldyBIdChuLG4scyxzLG8pKX1fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxuLHIsaSxzLGEsbCl7Y29uc3Qgbz10Lmxlbmd0aDtpZihvPT09MClyZXR1cm4hMTtjb25zdCB1PXRbby0xXTtyZXR1cm4gdS5vcmlnaW5hbEVuZExpbmVOdW1iZXI9PT0wfHx1Lm1vZGlmaWVkRW5kTGluZU51bWJlcj09PTA/ITE6dS5vcmlnaW5hbEVuZExpbmVOdW1iZXI9PT1uJiZ1Lm1vZGlmaWVkRW5kTGluZU51bWJlcj09PXM/KHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiZ1LmNoYXJDaGFuZ2VzJiZ1LmNoYXJDaGFuZ2VzLnB1c2gobmV3IF90KG4scixuLGkscyxhLHMsbCkpLCEwKTp1Lm9yaWdpbmFsRW5kTGluZU51bWJlcisxPT09biYmdS5tb2RpZmllZEVuZExpbmVOdW1iZXIrMT09PXM/KHUub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdS5tb2RpZmllZEVuZExpbmVOdW1iZXI9cyx0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmdS5jaGFyQ2hhbmdlcyYmdS5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBfdChuLHIsbixpLHMsYSxzLGwpKSwhMCk6ITF9fWZ1bmN0aW9uIGtyKGUsdCl7Y29uc3Qgbj1ObChlKTtyZXR1cm4gbj09PS0xP3Q6bisxfWZ1bmN0aW9uIFJyKGUsdCl7Y29uc3Qgbj1TbChlKTtyZXR1cm4gbj09PS0xP3Q6bisyfWZ1bmN0aW9uIGlhKGUpe2lmKGU9PT0wKXJldHVybigpPT4hMDtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuKCk9PkRhdGUubm93KCktdDxlfWZ1bmN0aW9uIEp1KGUsdCxuPShyLGkpPT5yPT09aSl7aWYoZT09PXQpcmV0dXJuITA7aWYoIWV8fCF0fHxlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKylpZighbihlW3JdLHRbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uKlh1KGUsdCl7bGV0IG4scjtmb3IoY29uc3QgaSBvZiBlKXIhPT12b2lkIDAmJnQocixpKT9uLnB1c2goaSk6KG4mJih5aWVsZCBuKSxuPVtpXSkscj1pO24mJih5aWVsZCBuKX1mdW5jdGlvbiBRdShlLHQpe2ZvcihsZXQgbj0wO248PWUubGVuZ3RoO24rKyl0KG49PT0wP3ZvaWQgMDplW24tMV0sbj09PWUubGVuZ3RoP3ZvaWQgMDplW25dKX1mdW5jdGlvbiBZdShlLHQpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQobj09PTA/dm9pZCAwOmVbbi0xXSxlW25dLG4rMT09PWUubGVuZ3RoP3ZvaWQgMDplW24rMV0pfWZ1bmN0aW9uIFp1KGUsdCl7Zm9yKGNvbnN0IG4gb2YgdCllLnB1c2gobil9dmFyIEVyOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHMpe3JldHVybiBzPDB9ZS5pc0xlc3NUaGFuPXQ7ZnVuY3Rpb24gbihzKXtyZXR1cm4gczw9MH1lLmlzTGVzc1RoYW5PckVxdWFsPW47ZnVuY3Rpb24gcihzKXtyZXR1cm4gcz4wfWUuaXNHcmVhdGVyVGhhbj1yO2Z1bmN0aW9uIGkocyl7cmV0dXJuIHM9PT0wfWUuaXNOZWl0aGVyTGVzc09yR3JlYXRlclRoYW49aSxlLmdyZWF0ZXJUaGFuPTEsZS5sZXNzVGhhbj0tMSxlLm5laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj0wfSkoRXJ8fChFcj17fSkpO2Z1bmN0aW9uIExuKGUsdCl7cmV0dXJuKG4scik9PnQoZShuKSxlKHIpKX1jb25zdCBObj0oZSx0KT0+ZS10O2Z1bmN0aW9uIEt1KGUpe3JldHVybih0LG4pPT4tZSh0LG4pfWNvbnN0IFZ0PWNsYXNzIFZ0e2NvbnN0cnVjdG9yKHQpe3RoaXMuaXRlcmF0ZT10fXRvQXJyYXkoKXtjb25zdCB0PVtdO3JldHVybiB0aGlzLml0ZXJhdGUobj0+KHQucHVzaChuKSwhMCkpLHR9ZmlsdGVyKHQpe3JldHVybiBuZXcgVnQobj0+dGhpcy5pdGVyYXRlKHI9PnQocik/bihyKTohMCkpfW1hcCh0KXtyZXR1cm4gbmV3IFZ0KG49PnRoaXMuaXRlcmF0ZShyPT5uKHQocikpKSl9ZmluZExhc3QodCl7bGV0IG47cmV0dXJuIHRoaXMuaXRlcmF0ZShyPT4odChyKSYmKG49ciksITApKSxufWZpbmRMYXN0TWF4QnkodCl7bGV0IG4scj0hMDtyZXR1cm4gdGhpcy5pdGVyYXRlKGk9Pigocnx8RXIuaXNHcmVhdGVyVGhhbih0KGksbikpKSYmKHI9ITEsbj1pKSwhMCkpLG59fTtWdC5lbXB0eT1uZXcgVnQodD0+e30pO2xldCBzYT1WdDtjbGFzcyBXZXtzdGF0aWMgdHJpdmlhbCh0LG4pe3JldHVybiBuZXcgV2UoW25ldyBZKFcub2ZMZW5ndGgodC5sZW5ndGgpLFcub2ZMZW5ndGgobi5sZW5ndGgpKV0sITEpfXN0YXRpYyB0cml2aWFsVGltZWRPdXQodCxuKXtyZXR1cm4gbmV3IFdlKFtuZXcgWShXLm9mTGVuZ3RoKHQubGVuZ3RoKSxXLm9mTGVuZ3RoKG4ubGVuZ3RoKSldLCEwKX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMuZGlmZnM9dCx0aGlzLmhpdFRpbWVvdXQ9bn19Y2xhc3MgWXtzdGF0aWMgaW52ZXJ0KHQsbil7Y29uc3Qgcj1bXTtyZXR1cm4gUXUodCwoaSxzKT0+e3IucHVzaChZLmZyb21PZmZzZXRQYWlycyhpP2kuZ2V0RW5kRXhjbHVzaXZlcygpOkhlLnplcm8scz9zLmdldFN0YXJ0cygpOm5ldyBIZShuLChpP2kuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZS1pLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU6MCkrbikpKX0pLHJ9c3RhdGljIGZyb21PZmZzZXRQYWlycyh0LG4pe3JldHVybiBuZXcgWShuZXcgVyh0Lm9mZnNldDEsbi5vZmZzZXQxKSxuZXcgVyh0Lm9mZnNldDIsbi5vZmZzZXQyKSl9c3RhdGljIGFzc2VydFNvcnRlZCh0KXtsZXQgbjtmb3IoY29uc3QgciBvZiB0KXtpZihuJiYhKG4uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTw9ci5zZXExUmFuZ2Uuc3RhcnQmJm4uc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZTw9ci5zZXEyUmFuZ2Uuc3RhcnQpKXRocm93IG5ldyBwZSgiU2VxdWVuY2UgZGlmZnMgbXVzdCBiZSBzb3J0ZWQiKTtuPXJ9fWNvbnN0cnVjdG9yKHQsbil7dGhpcy5zZXExUmFuZ2U9dCx0aGlzLnNlcTJSYW5nZT1ufXN3YXAoKXtyZXR1cm4gbmV3IFkodGhpcy5zZXEyUmFuZ2UsdGhpcy5zZXExUmFuZ2UpfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5zZXExUmFuZ2V9IDwtPiAke3RoaXMuc2VxMlJhbmdlfWB9am9pbih0KXtyZXR1cm4gbmV3IFkodGhpcy5zZXExUmFuZ2Uuam9pbih0LnNlcTFSYW5nZSksdGhpcy5zZXEyUmFuZ2Uuam9pbih0LnNlcTJSYW5nZSkpfWRlbHRhKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBZKHRoaXMuc2VxMVJhbmdlLmRlbHRhKHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhKHQpKX1kZWx0YVN0YXJ0KHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBZKHRoaXMuc2VxMVJhbmdlLmRlbHRhU3RhcnQodCksdGhpcy5zZXEyUmFuZ2UuZGVsdGFTdGFydCh0KSl9ZGVsdGFFbmQodCl7cmV0dXJuIHQ9PT0wP3RoaXM6bmV3IFkodGhpcy5zZXExUmFuZ2UuZGVsdGFFbmQodCksdGhpcy5zZXEyUmFuZ2UuZGVsdGFFbmQodCkpfWludGVyc2VjdCh0KXtjb25zdCBuPXRoaXMuc2VxMVJhbmdlLmludGVyc2VjdCh0LnNlcTFSYW5nZSkscj10aGlzLnNlcTJSYW5nZS5pbnRlcnNlY3QodC5zZXEyUmFuZ2UpO2lmKCEoIW58fCFyKSlyZXR1cm4gbmV3IFkobixyKX1nZXRTdGFydHMoKXtyZXR1cm4gbmV3IEhlKHRoaXMuc2VxMVJhbmdlLnN0YXJ0LHRoaXMuc2VxMlJhbmdlLnN0YXJ0KX1nZXRFbmRFeGNsdXNpdmVzKCl7cmV0dXJuIG5ldyBIZSh0aGlzLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUsdGhpcy5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlKX19Y29uc3QgY3Q9Y2xhc3MgY3R7Y29uc3RydWN0b3IodCxuKXt0aGlzLm9mZnNldDE9dCx0aGlzLm9mZnNldDI9bn10b1N0cmluZygpe3JldHVybmAke3RoaXMub2Zmc2V0MX0gPC0+ICR7dGhpcy5vZmZzZXQyfWB9ZGVsdGEodCl7cmV0dXJuIHQ9PT0wP3RoaXM6bmV3IGN0KHRoaXMub2Zmc2V0MSt0LHRoaXMub2Zmc2V0Mit0KX1lcXVhbHModCl7cmV0dXJuIHRoaXMub2Zmc2V0MT09PXQub2Zmc2V0MSYmdGhpcy5vZmZzZXQyPT09dC5vZmZzZXQyfX07Y3QuemVybz1uZXcgY3QoMCwwKSxjdC5tYXg9bmV3IGN0KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtsZXQgSGU9Y3Q7Y29uc3Qgam49Y2xhc3Mgam57aXNWYWxpZCgpe3JldHVybiEwfX07am4uaW5zdGFuY2U9bmV3IGpuO2xldCB6dD1qbjtjbGFzcyBlY3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnRpbWVvdXQ9dCx0aGlzLnN0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMudmFsaWQ9ITAsdDw9MCl0aHJvdyBuZXcgcGUoInRpbWVvdXQgbXVzdCBiZSBwb3NpdGl2ZSIpfWlzVmFsaWQoKXtpZighKERhdGUubm93KCktdGhpcy5zdGFydFRpbWU8dGhpcy50aW1lb3V0KSYmdGhpcy52YWxpZCl7dGhpcy52YWxpZD0hMTtkZWJ1Z2dlcn1yZXR1cm4gdGhpcy52YWxpZH19Y2xhc3MgTXJ7Y29uc3RydWN0b3IodCxuKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9bix0aGlzLmFycmF5PVtdLHRoaXMuYXJyYXk9bmV3IEFycmF5KHQqbil9Z2V0KHQsbil7cmV0dXJuIHRoaXMuYXJyYXlbdCtuKnRoaXMud2lkdGhdfXNldCh0LG4scil7dGhpcy5hcnJheVt0K24qdGhpcy53aWR0aF09cn19ZnVuY3Rpb24gQ3IoZSl7cmV0dXJuIGU9PT0zMnx8ZT09PTl9Y29uc3Qgc249Y2xhc3Mgc257c3RhdGljIGdldEtleSh0KXtsZXQgbj10aGlzLmNocktleXMuZ2V0KHQpO3JldHVybiBuPT09dm9pZCAwJiYobj10aGlzLmNocktleXMuc2l6ZSx0aGlzLmNocktleXMuc2V0KHQsbikpLG59Y29uc3RydWN0b3IodCxuLHIpe3RoaXMucmFuZ2U9dCx0aGlzLmxpbmVzPW4sdGhpcy5zb3VyY2U9cix0aGlzLmhpc3RvZ3JhbT1bXTtsZXQgaT0wO2ZvcihsZXQgcz10LnN0YXJ0TGluZU51bWJlci0xO3M8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTE7cysrKXtjb25zdCBhPW5bc107Zm9yKGxldCBvPTA7bzxhLmxlbmd0aDtvKyspe2krKztjb25zdCB1PWFbb10saD1zbi5nZXRLZXkodSk7dGhpcy5oaXN0b2dyYW1baF09KHRoaXMuaGlzdG9ncmFtW2hdfHwwKSsxfWkrKztjb25zdCBsPXNuLmdldEtleShgCmApO3RoaXMuaGlzdG9ncmFtW2xdPSh0aGlzLmhpc3RvZ3JhbVtsXXx8MCkrMX10aGlzLnRvdGFsQ291bnQ9aX1jb21wdXRlU2ltaWxhcml0eSh0KXtsZXQgbj0wO2NvbnN0IHI9TWF0aC5tYXgodGhpcy5oaXN0b2dyYW0ubGVuZ3RoLHQuaGlzdG9ncmFtLmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxyO2krKyluKz1NYXRoLmFicygodGhpcy5oaXN0b2dyYW1baV0/PzApLSh0Lmhpc3RvZ3JhbVtpXT8/MCkpO3JldHVybiAxLW4vKHRoaXMudG90YWxDb3VudCt0LnRvdGFsQ291bnQpfX07c24uY2hyS2V5cz1uZXcgTWFwO2xldCBTbj1zbjtjbGFzcyB0Y3tjb21wdXRlKHQsbixyPXp0Lmluc3RhbmNlLGkpe2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBXZS50cml2aWFsKHQsbik7Y29uc3Qgcz1uZXcgTXIodC5sZW5ndGgsbi5sZW5ndGgpLGE9bmV3IE1yKHQubGVuZ3RoLG4ubGVuZ3RoKSxsPW5ldyBNcih0Lmxlbmd0aCxuLmxlbmd0aCk7Zm9yKGxldCBnPTA7Zzx0Lmxlbmd0aDtnKyspZm9yKGxldCBwPTA7cDxuLmxlbmd0aDtwKyspe2lmKCFyLmlzVmFsaWQoKSlyZXR1cm4gV2UudHJpdmlhbFRpbWVkT3V0KHQsbik7Y29uc3Qgdj1nPT09MD8wOnMuZ2V0KGctMSxwKSx3PXA9PT0wPzA6cy5nZXQoZyxwLTEpO2xldCBfO3QuZ2V0RWxlbWVudChnKT09PW4uZ2V0RWxlbWVudChwKT8oZz09PTB8fHA9PT0wP189MDpfPXMuZ2V0KGctMSxwLTEpLGc+MCYmcD4wJiZhLmdldChnLTEscC0xKT09PTMmJihfKz1sLmdldChnLTEscC0xKSksXys9aT9pKGcscCk6MSk6Xz0tMTtjb25zdCB4PU1hdGgubWF4KHYsdyxfKTtpZih4PT09Xyl7Y29uc3QgeT1nPjAmJnA+MD9sLmdldChnLTEscC0xKTowO2wuc2V0KGcscCx5KzEpLGEuc2V0KGcscCwzKX1lbHNlIHg9PT12PyhsLnNldChnLHAsMCksYS5zZXQoZyxwLDEpKTp4PT09dyYmKGwuc2V0KGcscCwwKSxhLnNldChnLHAsMikpO3Muc2V0KGcscCx4KX1jb25zdCBvPVtdO2xldCB1PXQubGVuZ3RoLGg9bi5sZW5ndGg7ZnVuY3Rpb24gYyhnLHApeyhnKzEhPT11fHxwKzEhPT1oKSYmby5wdXNoKG5ldyBZKG5ldyBXKGcrMSx1KSxuZXcgVyhwKzEsaCkpKSx1PWcsaD1wfWxldCBkPXQubGVuZ3RoLTEsbT1uLmxlbmd0aC0xO2Zvcig7ZD49MCYmbT49MDspYS5nZXQoZCxtKT09PTM/KGMoZCxtKSxkLS0sbS0tKTphLmdldChkLG0pPT09MT9kLS06bS0tO3JldHVybiBjKC0xLC0xKSxvLnJldmVyc2UoKSxuZXcgV2UobywhMSl9fWNsYXNzIGFhe2NvbXB1dGUodCxuLHI9enQuaW5zdGFuY2Upe2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBXZS50cml2aWFsKHQsbik7Y29uc3QgaT10LHM9bjtmdW5jdGlvbiBhKHAsdil7Zm9yKDtwPGkubGVuZ3RoJiZ2PHMubGVuZ3RoJiZpLmdldEVsZW1lbnQocCk9PT1zLmdldEVsZW1lbnQodik7KXArKyx2Kys7cmV0dXJuIHB9bGV0IGw9MDtjb25zdCBvPW5ldyBuYztvLnNldCgwLGEoMCwwKSk7Y29uc3QgdT1uZXcgcmM7dS5zZXQoMCxvLmdldCgwKT09PTA/bnVsbDpuZXcgb2EobnVsbCwwLDAsby5nZXQoMCkpKTtsZXQgaD0wO2U6Zm9yKDs7KXtpZihsKyssIXIuaXNWYWxpZCgpKXJldHVybiBXZS50cml2aWFsVGltZWRPdXQoaSxzKTtjb25zdCBwPS1NYXRoLm1pbihsLHMubGVuZ3RoK2wlMiksdj1NYXRoLm1pbihsLGkubGVuZ3RoK2wlMik7Zm9yKGg9cDtoPD12O2grPTIpe2NvbnN0IHc9aD09PXY/LTE6by5nZXQoaCsxKSxfPWg9PT1wPy0xOm8uZ2V0KGgtMSkrMSx4PU1hdGgubWluKE1hdGgubWF4KHcsXyksaS5sZW5ndGgpLHk9eC1oO2lmKHg+aS5sZW5ndGh8fHk+cy5sZW5ndGgpY29udGludWU7Y29uc3QgYj1hKHgseSk7by5zZXQoaCxiKTtjb25zdCBMPXg9PT13P3UuZ2V0KGgrMSk6dS5nZXQoaC0xKTtpZih1LnNldChoLGIhPT14P25ldyBvYShMLHgseSxiLXgpOkwpLG8uZ2V0KGgpPT09aS5sZW5ndGgmJm8uZ2V0KGgpLWg9PT1zLmxlbmd0aClicmVhayBlfX1sZXQgYz11LmdldChoKTtjb25zdCBkPVtdO2xldCBtPWkubGVuZ3RoLGc9cy5sZW5ndGg7Zm9yKDs7KXtjb25zdCBwPWM/Yy54K2MubGVuZ3RoOjAsdj1jP2MueStjLmxlbmd0aDowO2lmKChwIT09bXx8diE9PWcpJiZkLnB1c2gobmV3IFkobmV3IFcocCxtKSxuZXcgVyh2LGcpKSksIWMpYnJlYWs7bT1jLngsZz1jLnksYz1jLnByZXZ9cmV0dXJuIGQucmV2ZXJzZSgpLG5ldyBXZShkLCExKX19Y2xhc3Mgb2F7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy5wcmV2PXQsdGhpcy54PW4sdGhpcy55PXIsdGhpcy5sZW5ndGg9aX19Y2xhc3MgbmN7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDEwKSx0aGlzLm5lZ2F0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDEwKX1nZXQodCl7cmV0dXJuIHQ8MD8odD0tdC0xLHRoaXMubmVnYXRpdmVBcnJbdF0pOnRoaXMucG9zaXRpdmVBcnJbdF19c2V0KHQsbil7aWYodDwwKXtpZih0PS10LTEsdD49dGhpcy5uZWdhdGl2ZUFyci5sZW5ndGgpe2NvbnN0IHI9dGhpcy5uZWdhdGl2ZUFycjt0aGlzLm5lZ2F0aXZlQXJyPW5ldyBJbnQzMkFycmF5KHIubGVuZ3RoKjIpLHRoaXMubmVnYXRpdmVBcnIuc2V0KHIpfXRoaXMubmVnYXRpdmVBcnJbdF09bn1lbHNle2lmKHQ+PXRoaXMucG9zaXRpdmVBcnIubGVuZ3RoKXtjb25zdCByPXRoaXMucG9zaXRpdmVBcnI7dGhpcy5wb3NpdGl2ZUFycj1uZXcgSW50MzJBcnJheShyLmxlbmd0aCoyKSx0aGlzLnBvc2l0aXZlQXJyLnNldChyKX10aGlzLnBvc2l0aXZlQXJyW3RdPW59fX1jbGFzcyByY3tjb25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpdmVBcnI9W10sdGhpcy5uZWdhdGl2ZUFycj1bXX1nZXQodCl7cmV0dXJuIHQ8MD8odD0tdC0xLHRoaXMubmVnYXRpdmVBcnJbdF0pOnRoaXMucG9zaXRpdmVBcnJbdF19c2V0KHQsbil7dDwwPyh0PS10LTEsdGhpcy5uZWdhdGl2ZUFyclt0XT1uKTp0aGlzLnBvc2l0aXZlQXJyW3RdPW59fWNsYXNzIEFue2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLmxpbmVzPXQsdGhpcy5yYW5nZT1uLHRoaXMuY29uc2lkZXJXaGl0ZXNwYWNlQ2hhbmdlcz1yLHRoaXMuZWxlbWVudHM9W10sdGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHg9W10sdGhpcy5saW5lU3RhcnRPZmZzZXRzPVtdLHRoaXMudHJpbW1lZFdzTGVuZ3Roc0J5TGluZUlkeD1bXSx0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeC5wdXNoKDApO2ZvcihsZXQgaT10aGlzLnJhbmdlLnN0YXJ0TGluZU51bWJlcjtpPD10aGlzLnJhbmdlLmVuZExpbmVOdW1iZXI7aSsrKXtsZXQgcz10W2ktMV0sYT0wO2k9PT10aGlzLnJhbmdlLnN0YXJ0TGluZU51bWJlciYmdGhpcy5yYW5nZS5zdGFydENvbHVtbj4xJiYoYT10aGlzLnJhbmdlLnN0YXJ0Q29sdW1uLTEscz1zLnN1YnN0cmluZyhhKSksdGhpcy5saW5lU3RhcnRPZmZzZXRzLnB1c2goYSk7bGV0IGw9MDtpZighcil7Y29uc3QgdT1zLnRyaW1TdGFydCgpO2w9cy5sZW5ndGgtdS5sZW5ndGgscz11LnRyaW1FbmQoKX10aGlzLnRyaW1tZWRXc0xlbmd0aHNCeUxpbmVJZHgucHVzaChsKTtjb25zdCBvPWk9PT10aGlzLnJhbmdlLmVuZExpbmVOdW1iZXI/TWF0aC5taW4odGhpcy5yYW5nZS5lbmRDb2x1bW4tMS1hLWwscy5sZW5ndGgpOnMubGVuZ3RoO2ZvcihsZXQgdT0wO3U8bzt1KyspdGhpcy5lbGVtZW50cy5wdXNoKHMuY2hhckNvZGVBdCh1KSk7aTx0aGlzLnJhbmdlLmVuZExpbmVOdW1iZXImJih0aGlzLmVsZW1lbnRzLnB1c2goMTApLHRoaXMuZmlyc3RFbGVtZW50T2Zmc2V0QnlMaW5lSWR4LnB1c2godGhpcy5lbGVtZW50cy5sZW5ndGgpKX19dG9TdHJpbmcoKXtyZXR1cm5gU2xpY2U6ICIke3RoaXMudGV4dH0iYH1nZXQgdGV4dCgpe3JldHVybiB0aGlzLmdldFRleHQobmV3IFcoMCx0aGlzLmxlbmd0aCkpfWdldFRleHQodCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuc2xpY2UodC5zdGFydCx0LmVuZEV4Y2x1c2l2ZSkubWFwKG49PlN0cmluZy5mcm9tQ2hhckNvZGUobikpLmpvaW4oIiIpfWdldEVsZW1lbnQodCl7cmV0dXJuIHRoaXMuZWxlbWVudHNbdF19Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmxlbmd0aH1nZXRCb3VuZGFyeVNjb3JlKHQpe2NvbnN0IG49dWEodD4wP3RoaXMuZWxlbWVudHNbdC0xXTotMSkscj11YSh0PHRoaXMuZWxlbWVudHMubGVuZ3RoP3RoaXMuZWxlbWVudHNbdF06LTEpO2lmKG49PT03JiZyPT09OClyZXR1cm4gMDtpZihuPT09OClyZXR1cm4gMTUwO2xldCBpPTA7cmV0dXJuIG4hPT1yJiYoaSs9MTAsbj09PTAmJnI9PT0xJiYoaSs9MSkpLGkrPWxhKG4pLGkrPWxhKHIpLGl9dHJhbnNsYXRlT2Zmc2V0KHQsbj0icmlnaHQiKXtjb25zdCByPVd0KHRoaXMuZmlyc3RFbGVtZW50T2Zmc2V0QnlMaW5lSWR4LHM9PnM8PXQpLGk9dC10aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeFtyXTtyZXR1cm4gbmV3IGVlKHRoaXMucmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3IsMSt0aGlzLmxpbmVTdGFydE9mZnNldHNbcl0raSsoaT09PTAmJm49PT0ibGVmdCI/MDp0aGlzLnRyaW1tZWRXc0xlbmd0aHNCeUxpbmVJZHhbcl0pKX10cmFuc2xhdGVSYW5nZSh0KXtjb25zdCBuPXRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuc3RhcnQsInJpZ2h0Iikscj10aGlzLnRyYW5zbGF0ZU9mZnNldCh0LmVuZEV4Y2x1c2l2ZSwibGVmdCIpO3JldHVybiByLmlzQmVmb3JlKG4pP3ouZnJvbVBvc2l0aW9ucyhyLHIpOnouZnJvbVBvc2l0aW9ucyhuLHIpfWZpbmRXb3JkQ29udGFpbmluZyh0KXtpZih0PDB8fHQ+PXRoaXMuZWxlbWVudHMubGVuZ3RofHwhVHIodGhpcy5lbGVtZW50c1t0XSkpcmV0dXJuO2xldCBuPXQ7Zm9yKDtuPjAmJlRyKHRoaXMuZWxlbWVudHNbbi0xXSk7KW4tLTtsZXQgcj10O2Zvcig7cjx0aGlzLmVsZW1lbnRzLmxlbmd0aCYmVHIodGhpcy5lbGVtZW50c1tyXSk7KXIrKztyZXR1cm4gbmV3IFcobixyKX1jb3VudExpbmVzSW4odCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuZW5kRXhjbHVzaXZlKS5saW5lTnVtYmVyLXRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuc3RhcnQpLmxpbmVOdW1iZXJ9aXNTdHJvbmdseUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuZWxlbWVudHNbdF09PT10aGlzLmVsZW1lbnRzW25dfWV4dGVuZFRvRnVsbExpbmVzKHQpe2NvbnN0IG49eXQodGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHgsaT0+aTw9dC5zdGFydCk/PzAscj1CdSh0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeCxpPT50LmVuZEV4Y2x1c2l2ZTw9aSk/P3RoaXMuZWxlbWVudHMubGVuZ3RoO3JldHVybiBuZXcgVyhuLHIpfX1mdW5jdGlvbiBUcihlKXtyZXR1cm4gZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTd9Y29uc3QgaWM9ezA6MCwxOjAsMjowLDM6MTAsNDoyLDU6MzAsNjozLDc6MTAsODoxMH07ZnVuY3Rpb24gbGEoZSl7cmV0dXJuIGljW2VdfWZ1bmN0aW9uIHVhKGUpe3JldHVybiBlPT09MTA/ODplPT09MTM/NzpDcihlKT82OmU+PTk3JiZlPD0xMjI/MDplPj02NSYmZTw9OTA/MTplPj00OCYmZTw9NTc/MjplPT09LTE/MzplPT09NDR8fGU9PT01OT81OjR9ZnVuY3Rpb24gc2MoZSx0LG4scixpLHMpe2xldHttb3ZlczphLGV4Y2x1ZGVkQ2hhbmdlczpsfT1vYyhlLHQsbixzKTtpZighcy5pc1ZhbGlkKCkpcmV0dXJuW107Y29uc3Qgbz1lLmZpbHRlcihoPT4hbC5oYXMoaCkpLHU9bGMobyxyLGksdCxuLHMpO3JldHVybiBadShhLHUpLGE9dWMoYSksYT1hLmZpbHRlcihoPT57Y29uc3QgYz1oLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKS5zbGljZSh0KS5tYXAobT0+bS50cmltKCkpO3JldHVybiBjLmpvaW4oYApgKS5sZW5ndGg+PTE1JiZhYyhjLG09Pm0ubGVuZ3RoPj0yKT49Mn0pLGE9Y2MoZSxhKSxhfWZ1bmN0aW9uIGFjKGUsdCl7bGV0IG49MDtmb3IoY29uc3QgciBvZiBlKXQocikmJm4rKztyZXR1cm4gbn1mdW5jdGlvbiBvYyhlLHQsbixyKXtjb25zdCBpPVtdLHM9ZS5maWx0ZXIobz0+by5tb2RpZmllZC5pc0VtcHR5JiZvLm9yaWdpbmFsLmxlbmd0aD49MykubWFwKG89Pm5ldyBTbihvLm9yaWdpbmFsLHQsbykpLGE9bmV3IFNldChlLmZpbHRlcihvPT5vLm9yaWdpbmFsLmlzRW1wdHkmJm8ubW9kaWZpZWQubGVuZ3RoPj0zKS5tYXAobz0+bmV3IFNuKG8ubW9kaWZpZWQsbixvKSkpLGw9bmV3IFNldDtmb3IoY29uc3QgbyBvZiBzKXtsZXQgdT0tMSxoO2Zvcihjb25zdCBjIG9mIGEpe2NvbnN0IGQ9by5jb21wdXRlU2ltaWxhcml0eShjKTtkPnUmJih1PWQsaD1jKX1pZih1Pi45JiZoJiYoYS5kZWxldGUoaCksaS5wdXNoKG5ldyBMZShvLnJhbmdlLGgucmFuZ2UpKSxsLmFkZChvLnNvdXJjZSksbC5hZGQoaC5zb3VyY2UpKSwhci5pc1ZhbGlkKCkpcmV0dXJue21vdmVzOmksZXhjbHVkZWRDaGFuZ2VzOmx9fXJldHVybnttb3ZlczppLGV4Y2x1ZGVkQ2hhbmdlczpsfX1mdW5jdGlvbiBsYyhlLHQsbixyLGkscyl7Y29uc3QgYT1bXSxsPW5ldyBrdTtmb3IoY29uc3QgZCBvZiBlKWZvcihsZXQgbT1kLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjttPGQub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0yO20rKyl7Y29uc3QgZz1gJHt0W20tMV19OiR7dFttKzEtMV19OiR7dFttKzItMV19YDtsLmFkZChnLHtyYW5nZTpuZXcgJChtLG0rMyl9KX1jb25zdCBvPVtdO2Uuc29ydChMbihkPT5kLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcixObikpO2Zvcihjb25zdCBkIG9mIGUpe2xldCBtPVtdO2ZvcihsZXQgZz1kLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjtnPGQubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0yO2crKyl7Y29uc3QgcD1gJHtuW2ctMV19OiR7bltnKzEtMV19OiR7bltnKzItMV19YCx2PW5ldyAkKGcsZyszKSx3PVtdO2wuZm9yRWFjaChwLCh7cmFuZ2U6X30pPT57Zm9yKGNvbnN0IHkgb2YgbSlpZih5Lm9yaWdpbmFsTGluZVJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrMT09PV8uZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmeS5tb2RpZmllZExpbmVSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKzE9PT12LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpe3kub3JpZ2luYWxMaW5lUmFuZ2U9bmV3ICQoeS5vcmlnaW5hbExpbmVSYW5nZS5zdGFydExpbmVOdW1iZXIsXy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSx5Lm1vZGlmaWVkTGluZVJhbmdlPW5ldyAkKHkubW9kaWZpZWRMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLHYuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSksdy5wdXNoKHkpO3JldHVybn1jb25zdCB4PXttb2RpZmllZExpbmVSYW5nZTp2LG9yaWdpbmFsTGluZVJhbmdlOl99O28ucHVzaCh4KSx3LnB1c2goeCl9KSxtPXd9aWYoIXMuaXNWYWxpZCgpKXJldHVybltdfW8uc29ydChLdShMbihkPT5kLm1vZGlmaWVkTGluZVJhbmdlLmxlbmd0aCxObikpKTtjb25zdCB1PW5ldyBJZSxoPW5ldyBJZTtmb3IoY29uc3QgZCBvZiBvKXtjb25zdCBtPWQubW9kaWZpZWRMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLWQub3JpZ2luYWxMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGc9dS5zdWJ0cmFjdEZyb20oZC5tb2RpZmllZExpbmVSYW5nZSkscD1oLnN1YnRyYWN0RnJvbShkLm9yaWdpbmFsTGluZVJhbmdlKS5nZXRXaXRoRGVsdGEobSksdj1nLmdldEludGVyc2VjdGlvbihwKTtmb3IoY29uc3QgdyBvZiB2LnJhbmdlcyl7aWYody5sZW5ndGg8Myljb250aW51ZTtjb25zdCBfPXcseD13LmRlbHRhKC1tKTthLnB1c2gobmV3IExlKHgsXykpLHUuYWRkUmFuZ2UoXyksaC5hZGRSYW5nZSh4KX19YS5zb3J0KExuKGQ9PmQub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLE5uKSk7Y29uc3QgYz1uZXcgX24oZSk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NvbnN0IG09YVtkXSxnPWMuZmluZExhc3RNb25vdG9ub3VzKEw9Pkwub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyPD1tLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcikscD15dChlLEw9PkwubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyPD1tLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciksdj1NYXRoLm1heChtLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1nLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixtLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1wLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciksdz1jLmZpbmRMYXN0TW9ub3Rvbm91cyhMPT5MLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxtLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLF89eXQoZSxMPT5MLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjxtLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLHg9TWF0aC5tYXgody5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLW0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxfLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtbS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtsZXQgeTtmb3IoeT0wO3k8djt5Kyspe2NvbnN0IEw9bS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIteS0xLFM9bS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIteS0xO2lmKEw+ci5sZW5ndGh8fFM+aS5sZW5ndGh8fHUuY29udGFpbnMoUyl8fGguY29udGFpbnMoTCl8fCFjYShyW0wtMV0saVtTLTFdLHMpKWJyZWFrfXk+MCYmKGguYWRkUmFuZ2UobmV3ICQobS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIteSxtLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcikpLHUuYWRkUmFuZ2UobmV3ICQobS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIteSxtLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpKTtsZXQgYjtmb3IoYj0wO2I8eDtiKyspe2NvbnN0IEw9bS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK2IsUz1tLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrYjtpZihMPnIubGVuZ3RofHxTPmkubGVuZ3RofHx1LmNvbnRhaW5zKFMpfHxoLmNvbnRhaW5zKEwpfHwhY2EocltMLTFdLGlbUy0xXSxzKSlicmVha31iPjAmJihoLmFkZFJhbmdlKG5ldyAkKG0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxtLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrYikpLHUuYWRkUmFuZ2UobmV3ICQobS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLG0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStiKSkpLCh5PjB8fGI+MCkmJihhW2RdPW5ldyBMZShuZXcgJChtLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci15LG0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStiKSxuZXcgJChtLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci15LG0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStiKSkpfXJldHVybiBhfWZ1bmN0aW9uIGNhKGUsdCxuKXtpZihlLnRyaW0oKT09PXQudHJpbSgpKXJldHVybiEwO2lmKGUubGVuZ3RoPjMwMCYmdC5sZW5ndGg+MzAwKXJldHVybiExO2NvbnN0IGk9bmV3IGFhKCkuY29tcHV0ZShuZXcgQW4oW2VdLG5ldyB6KDEsMSwxLGUubGVuZ3RoKSwhMSksbmV3IEFuKFt0XSxuZXcgeigxLDEsMSx0Lmxlbmd0aCksITEpLG4pO2xldCBzPTA7Y29uc3QgYT1ZLmludmVydChpLmRpZmZzLGUubGVuZ3RoKTtmb3IoY29uc3QgaCBvZiBhKWguc2VxMVJhbmdlLmZvckVhY2goYz0+e0NyKGUuY2hhckNvZGVBdChjKSl8fHMrK30pO2Z1bmN0aW9uIGwoaCl7bGV0IGM9MDtmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKylDcihoLmNoYXJDb2RlQXQoZCkpfHxjKys7cmV0dXJuIGN9Y29uc3Qgbz1sKGUubGVuZ3RoPnQubGVuZ3RoP2U6dCk7cmV0dXJuIHMvbz4uNiYmbz4xMH1mdW5jdGlvbiB1YyhlKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIGU7ZS5zb3J0KExuKG49Pm4ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLE5uKSk7Y29uc3QgdD1bZVswXV07Zm9yKGxldCBuPTE7bjxlLmxlbmd0aDtuKyspe2NvbnN0IHI9dFt0Lmxlbmd0aC0xXSxpPWVbbl0scz1pLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1yLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsYT1pLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1yLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7aWYocz49MCYmYT49MCYmcythPD0yKXt0W3QubGVuZ3RoLTFdPXIuam9pbihpKTtjb250aW51ZX10LnB1c2goaSl9cmV0dXJuIHR9ZnVuY3Rpb24gY2MoZSx0KXtjb25zdCBuPW5ldyBfbihlKTtyZXR1cm4gdD10LmZpbHRlcihyPT57Y29uc3QgaT1uLmZpbmRMYXN0TW9ub3Rvbm91cyhsPT5sLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxyLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpfHxuZXcgTGUobmV3ICQoMSwxKSxuZXcgJCgxLDEpKSxzPXl0KGUsbD0+bC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI8ci5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gaSE9PXN9KSx0fWZ1bmN0aW9uIGZhKGUsdCxuKXtsZXQgcj1uO3JldHVybiByPWhhKGUsdCxyKSxyPWhhKGUsdCxyKSxyPWZjKGUsdCxyKSxyfWZ1bmN0aW9uIGhhKGUsdCxuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuIG47Y29uc3Qgcj1bXTtyLnB1c2goblswXSk7Zm9yKGxldCBzPTE7czxuLmxlbmd0aDtzKyspe2NvbnN0IGE9cltyLmxlbmd0aC0xXTtsZXQgbD1uW3NdO2lmKGwuc2VxMVJhbmdlLmlzRW1wdHl8fGwuc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IG89bC5zZXExUmFuZ2Uuc3RhcnQtYS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2xldCB1O2Zvcih1PTE7dTw9byYmIShlLmdldEVsZW1lbnQobC5zZXExUmFuZ2Uuc3RhcnQtdSkhPT1lLmdldEVsZW1lbnQobC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLXUpfHx0LmdldEVsZW1lbnQobC5zZXEyUmFuZ2Uuc3RhcnQtdSkhPT10LmdldEVsZW1lbnQobC5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLXUpKTt1KyspO2lmKHUtLSx1PT09byl7cltyLmxlbmd0aC0xXT1uZXcgWShuZXcgVyhhLnNlcTFSYW5nZS5zdGFydCxsLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUtbyksbmV3IFcoYS5zZXEyUmFuZ2Uuc3RhcnQsbC5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLW8pKTtjb250aW51ZX1sPWwuZGVsdGEoLXUpfXIucHVzaChsKX1jb25zdCBpPVtdO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGgtMTtzKyspe2NvbnN0IGE9cltzKzFdO2xldCBsPXJbc107aWYobC5zZXExUmFuZ2UuaXNFbXB0eXx8bC5zZXEyUmFuZ2UuaXNFbXB0eSl7Y29uc3Qgbz1hLnNlcTFSYW5nZS5zdGFydC1sLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU7bGV0IHU7Zm9yKHU9MDt1PG8mJiEoIWUuaXNTdHJvbmdseUVxdWFsKGwuc2VxMVJhbmdlLnN0YXJ0K3UsbC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlK3UpfHwhdC5pc1N0cm9uZ2x5RXF1YWwobC5zZXEyUmFuZ2Uuc3RhcnQrdSxsLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrdSkpO3UrKyk7aWYodT09PW8pe3JbcysxXT1uZXcgWShuZXcgVyhsLnNlcTFSYW5nZS5zdGFydCtvLGEuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSksbmV3IFcobC5zZXEyUmFuZ2Uuc3RhcnQrbyxhLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUpKTtjb250aW51ZX11PjAmJihsPWwuZGVsdGEodSkpfWkucHVzaChsKX1yZXR1cm4gci5sZW5ndGg+MCYmaS5wdXNoKHJbci5sZW5ndGgtMV0pLGl9ZnVuY3Rpb24gZmMoZSx0LG4pe2lmKCFlLmdldEJvdW5kYXJ5U2NvcmV8fCF0LmdldEJvdW5kYXJ5U2NvcmUpcmV0dXJuIG47Zm9yKGxldCByPTA7cjxuLmxlbmd0aDtyKyspe2NvbnN0IGk9cj4wP25bci0xXTp2b2lkIDAscz1uW3JdLGE9cisxPG4ubGVuZ3RoP25bcisxXTp2b2lkIDAsbD1uZXcgVyhpP2kuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSsxOjAsYT9hLnNlcTFSYW5nZS5zdGFydC0xOmUubGVuZ3RoKSxvPW5ldyBXKGk/aS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlKzE6MCxhP2Euc2VxMlJhbmdlLnN0YXJ0LTE6dC5sZW5ndGgpO3Muc2VxMVJhbmdlLmlzRW1wdHk/bltyXT1kYShzLGUsdCxsLG8pOnMuc2VxMlJhbmdlLmlzRW1wdHkmJihuW3JdPWRhKHMuc3dhcCgpLHQsZSxvLGwpLnN3YXAoKSl9cmV0dXJuIG59ZnVuY3Rpb24gZGEoZSx0LG4scixpKXtsZXQgYT0xO2Zvcig7ZS5zZXExUmFuZ2Uuc3RhcnQtYT49ci5zdGFydCYmZS5zZXEyUmFuZ2Uuc3RhcnQtYT49aS5zdGFydCYmbi5pc1N0cm9uZ2x5RXF1YWwoZS5zZXEyUmFuZ2Uuc3RhcnQtYSxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtYSkmJmE8MTAwOylhKys7YS0tO2xldCBsPTA7Zm9yKDtlLnNlcTFSYW5nZS5zdGFydCtsPHIuZW5kRXhjbHVzaXZlJiZlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbDxpLmVuZEV4Y2x1c2l2ZSYmbi5pc1N0cm9uZ2x5RXF1YWwoZS5zZXEyUmFuZ2Uuc3RhcnQrbCxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbCkmJmw8MTAwOylsKys7aWYoYT09PTAmJmw9PT0wKXJldHVybiBlO2xldCBvPTAsdT0tMTtmb3IobGV0IGg9LWE7aDw9bDtoKyspe2NvbnN0IGM9ZS5zZXEyUmFuZ2Uuc3RhcnQraCxkPWUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZStoLG09ZS5zZXExUmFuZ2Uuc3RhcnQraCxnPXQuZ2V0Qm91bmRhcnlTY29yZShtKStuLmdldEJvdW5kYXJ5U2NvcmUoYykrbi5nZXRCb3VuZGFyeVNjb3JlKGQpO2c+dSYmKHU9ZyxvPWgpfXJldHVybiBlLmRlbHRhKG8pfWZ1bmN0aW9uIGhjKGUsdCxuKXtjb25zdCByPVtdO2Zvcihjb25zdCBpIG9mIG4pe2NvbnN0IHM9cltyLmxlbmd0aC0xXTtpZighcyl7ci5wdXNoKGkpO2NvbnRpbnVlfWkuc2VxMVJhbmdlLnN0YXJ0LXMuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTw9Mnx8aS5zZXEyUmFuZ2Uuc3RhcnQtcy5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlPD0yP3Jbci5sZW5ndGgtMV09bmV3IFkocy5zZXExUmFuZ2Uuam9pbihpLnNlcTFSYW5nZSkscy5zZXEyUmFuZ2Uuam9pbihpLnNlcTJSYW5nZSkpOnIucHVzaChpKX1yZXR1cm4gcn1mdW5jdGlvbiBkYyhlLHQsbil7Y29uc3Qgcj1ZLmludmVydChuLGUubGVuZ3RoKSxpPVtdO2xldCBzPW5ldyBIZSgwLDApO2Z1bmN0aW9uIGEobyx1KXtpZihvLm9mZnNldDE8cy5vZmZzZXQxfHxvLm9mZnNldDI8cy5vZmZzZXQyKXJldHVybjtjb25zdCBoPWUuZmluZFdvcmRDb250YWluaW5nKG8ub2Zmc2V0MSksYz10LmZpbmRXb3JkQ29udGFpbmluZyhvLm9mZnNldDIpO2lmKCFofHwhYylyZXR1cm47bGV0IGQ9bmV3IFkoaCxjKTtjb25zdCBtPWQuaW50ZXJzZWN0KHUpO2xldCBnPW0uc2VxMVJhbmdlLmxlbmd0aCxwPW0uc2VxMlJhbmdlLmxlbmd0aDtmb3IoO3IubGVuZ3RoPjA7KXtjb25zdCB2PXJbMF07aWYoISh2LnNlcTFSYW5nZS5pbnRlcnNlY3RzKGQuc2VxMVJhbmdlKXx8di5zZXEyUmFuZ2UuaW50ZXJzZWN0cyhkLnNlcTJSYW5nZSkpKWJyZWFrO2NvbnN0IF89ZS5maW5kV29yZENvbnRhaW5pbmcodi5zZXExUmFuZ2Uuc3RhcnQpLHg9dC5maW5kV29yZENvbnRhaW5pbmcodi5zZXEyUmFuZ2Uuc3RhcnQpLHk9bmV3IFkoXyx4KSxiPXkuaW50ZXJzZWN0KHYpO2lmKGcrPWIuc2VxMVJhbmdlLmxlbmd0aCxwKz1iLnNlcTJSYW5nZS5sZW5ndGgsZD1kLmpvaW4oeSksZC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlPj12LnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUpci5zaGlmdCgpO2Vsc2UgYnJlYWt9ZytwPChkLnNlcTFSYW5nZS5sZW5ndGgrZC5zZXEyUmFuZ2UubGVuZ3RoKSoyLzMmJmkucHVzaChkKSxzPWQuZ2V0RW5kRXhjbHVzaXZlcygpfWZvcig7ci5sZW5ndGg+MDspe2NvbnN0IG89ci5zaGlmdCgpO28uc2VxMVJhbmdlLmlzRW1wdHl8fChhKG8uZ2V0U3RhcnRzKCksbyksYShvLmdldEVuZEV4Y2x1c2l2ZXMoKS5kZWx0YSgtMSksbykpfXJldHVybiBtYyhuLGkpfWZ1bmN0aW9uIG1jKGUsdCl7Y29uc3Qgbj1bXTtmb3IoO2UubGVuZ3RoPjB8fHQubGVuZ3RoPjA7KXtjb25zdCByPWVbMF0saT10WzBdO2xldCBzO3ImJighaXx8ci5zZXExUmFuZ2Uuc3RhcnQ8aS5zZXExUmFuZ2Uuc3RhcnQpP3M9ZS5zaGlmdCgpOnM9dC5zaGlmdCgpLG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZT49cy5zZXExUmFuZ2Uuc3RhcnQ/bltuLmxlbmd0aC0xXT1uW24ubGVuZ3RoLTFdLmpvaW4ocyk6bi5wdXNoKHMpfXJldHVybiBufWZ1bmN0aW9uIGdjKGUsdCxuKXtsZXQgcj1uO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gcjtsZXQgaT0wLHM7ZG97cz0hMTtjb25zdCBhPVtyWzBdXTtmb3IobGV0IGw9MTtsPHIubGVuZ3RoO2wrKyl7bGV0IGg9ZnVuY3Rpb24oZCxtKXtjb25zdCBnPW5ldyBXKHUuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxvLnNlcTFSYW5nZS5zdGFydCk7cmV0dXJuIGUuZ2V0VGV4dChnKS5yZXBsYWNlKC9ccy9nLCIiKS5sZW5ndGg8PTQmJihkLnNlcTFSYW5nZS5sZW5ndGgrZC5zZXEyUmFuZ2UubGVuZ3RoPjV8fG0uc2VxMVJhbmdlLmxlbmd0aCttLnNlcTJSYW5nZS5sZW5ndGg+NSl9O2NvbnN0IG89cltsXSx1PWFbYS5sZW5ndGgtMV07aCh1LG8pPyhzPSEwLGFbYS5sZW5ndGgtMV09YVthLmxlbmd0aC0xXS5qb2luKG8pKTphLnB1c2gobyl9cj1hfXdoaWxlKGkrKzwxMCYmcyk7cmV0dXJuIHJ9ZnVuY3Rpb24gcGMoZSx0LG4pe2xldCByPW47aWYoci5sZW5ndGg9PT0wKXJldHVybiByO2xldCBpPTAscztkb3tzPSExO2NvbnN0IGw9W3JbMF1dO2ZvcihsZXQgbz0xO288ci5sZW5ndGg7bysrKXtsZXQgYz1mdW5jdGlvbihtLGcpe2NvbnN0IHA9bmV3IFcoaC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHUuc2VxMVJhbmdlLnN0YXJ0KTtpZihlLmNvdW50TGluZXNJbihwKT41fHxwLmxlbmd0aD41MDApcmV0dXJuITE7Y29uc3Qgdz1lLmdldFRleHQocCkudHJpbSgpO2lmKHcubGVuZ3RoPjIwfHx3LnNwbGl0KC9cclxufFxyfFxuLykubGVuZ3RoPjEpcmV0dXJuITE7Y29uc3QgXz1lLmNvdW50TGluZXNJbihtLnNlcTFSYW5nZSkseD1tLnNlcTFSYW5nZS5sZW5ndGgseT10LmNvdW50TGluZXNJbihtLnNlcTJSYW5nZSksYj1tLnNlcTJSYW5nZS5sZW5ndGgsTD1lLmNvdW50TGluZXNJbihnLnNlcTFSYW5nZSksUz1nLnNlcTFSYW5nZS5sZW5ndGgsTT10LmNvdW50TGluZXNJbihnLnNlcTJSYW5nZSksRj1nLnNlcTJSYW5nZS5sZW5ndGgsTz0yKjQwKzUwO2Z1bmN0aW9uIEMoTil7cmV0dXJuIE1hdGgubWluKE4sTyl9cmV0dXJuIE1hdGgucG93KE1hdGgucG93KEMoXyo0MCt4KSwxLjUpK01hdGgucG93KEMoeSo0MCtiKSwxLjUpLDEuNSkrTWF0aC5wb3coTWF0aC5wb3coQyhMKjQwK1MpLDEuNSkrTWF0aC5wb3coQyhNKjQwK0YpLDEuNSksMS41KT4oTyoqMS41KSoqMS41KjEuM307Y29uc3QgdT1yW29dLGg9bFtsLmxlbmd0aC0xXTtjKGgsdSk/KHM9ITAsbFtsLmxlbmd0aC0xXT1sW2wubGVuZ3RoLTFdLmpvaW4odSkpOmwucHVzaCh1KX1yPWx9d2hpbGUoaSsrPDEwJiZzKTtjb25zdCBhPVtdO3JldHVybiBZdShyLChsLG8sdSk9PntsZXQgaD1vO2Z1bmN0aW9uIGModyl7cmV0dXJuIHcubGVuZ3RoPjAmJncudHJpbSgpLmxlbmd0aDw9MyYmby5zZXExUmFuZ2UubGVuZ3RoK28uc2VxMlJhbmdlLmxlbmd0aD4xMDB9Y29uc3QgZD1lLmV4dGVuZFRvRnVsbExpbmVzKG8uc2VxMVJhbmdlKSxtPWUuZ2V0VGV4dChuZXcgVyhkLnN0YXJ0LG8uc2VxMVJhbmdlLnN0YXJ0KSk7YyhtKSYmKGg9aC5kZWx0YVN0YXJ0KC1tLmxlbmd0aCkpO2NvbnN0IGc9ZS5nZXRUZXh0KG5ldyBXKG8uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxkLmVuZEV4Y2x1c2l2ZSkpO2MoZykmJihoPWguZGVsdGFFbmQoZy5sZW5ndGgpKTtjb25zdCBwPVkuZnJvbU9mZnNldFBhaXJzKGw/bC5nZXRFbmRFeGNsdXNpdmVzKCk6SGUuemVybyx1P3UuZ2V0U3RhcnRzKCk6SGUubWF4KSx2PWguaW50ZXJzZWN0KHApO2EubGVuZ3RoPjAmJnYuZ2V0U3RhcnRzKCkuZXF1YWxzKGFbYS5sZW5ndGgtMV0uZ2V0RW5kRXhjbHVzaXZlcygpKT9hW2EubGVuZ3RoLTFdPWFbYS5sZW5ndGgtMV0uam9pbih2KTphLnB1c2godil9KSxhfWNsYXNzIG1he2NvbnN0cnVjdG9yKHQsbil7dGhpcy50cmltbWVkSGFzaD10LHRoaXMubGluZXM9bn1nZXRFbGVtZW50KHQpe3JldHVybiB0aGlzLnRyaW1tZWRIYXNoW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy50cmltbWVkSGFzaC5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZSh0KXtjb25zdCBuPXQ9PT0wPzA6Z2EodGhpcy5saW5lc1t0LTFdKSxyPXQ9PT10aGlzLmxpbmVzLmxlbmd0aD8wOmdhKHRoaXMubGluZXNbdF0pO3JldHVybiAxZTMtKG4rcil9Z2V0VGV4dCh0KXtyZXR1cm4gdGhpcy5saW5lcy5zbGljZSh0LnN0YXJ0LHQuZW5kRXhjbHVzaXZlKS5qb2luKGAKYCl9aXNTdHJvbmdseUVxdWFsKHQsbil7cmV0dXJuIHRoaXMubGluZXNbdF09PT10aGlzLmxpbmVzW25dfX1mdW5jdGlvbiBnYShlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aCYmKGUuY2hhckNvZGVBdCh0KT09PTMyfHxlLmNoYXJDb2RlQXQodCk9PT05KTspdCsrO3JldHVybiB0fWNsYXNzIGJje2NvbnN0cnVjdG9yKCl7dGhpcy5keW5hbWljUHJvZ3JhbW1pbmdEaWZmaW5nPW5ldyB0Yyx0aGlzLm15ZXJzRGlmZmluZ0FsZ29yaXRobT1uZXcgYWF9Y29tcHV0ZURpZmYodCxuLHIpe2lmKHQubGVuZ3RoPD0xJiZKdSh0LG4sKGIsTCk9PmI9PT1MKSlyZXR1cm4gbmV3IHduKFtdLFtdLCExKTtpZih0Lmxlbmd0aD09PTEmJnRbMF0ubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0xJiZuWzBdLmxlbmd0aD09PTApcmV0dXJuIG5ldyB3bihbbmV3IGplKG5ldyAkKDEsdC5sZW5ndGgrMSksbmV3ICQoMSxuLmxlbmd0aCsxKSxbbmV3IGtlKG5ldyB6KDEsMSx0Lmxlbmd0aCx0W3QubGVuZ3RoLTFdLmxlbmd0aCsxKSxuZXcgeigxLDEsbi5sZW5ndGgsbltuLmxlbmd0aC0xXS5sZW5ndGgrMSkpXSldLFtdLCExKTtjb25zdCBpPXIubWF4Q29tcHV0YXRpb25UaW1lTXM9PT0wP3p0Lmluc3RhbmNlOm5ldyBlYyhyLm1heENvbXB1dGF0aW9uVGltZU1zKSxzPSFyLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLGE9bmV3IE1hcDtmdW5jdGlvbiBsKGIpe2xldCBMPWEuZ2V0KGIpO3JldHVybiBMPT09dm9pZCAwJiYoTD1hLnNpemUsYS5zZXQoYixMKSksTH1jb25zdCBvPXQubWFwKGI9PmwoYi50cmltKCkpKSx1PW4ubWFwKGI9PmwoYi50cmltKCkpKSxoPW5ldyBtYShvLHQpLGM9bmV3IG1hKHUsbiksZD1oLmxlbmd0aCtjLmxlbmd0aDwxNzAwP3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZy5jb21wdXRlKGgsYyxpLChiLEwpPT50W2JdPT09bltMXT9uW0xdLmxlbmd0aD09PTA/LjE6MStNYXRoLmxvZygxK25bTF0ubGVuZ3RoKTouOTkpOnRoaXMubXllcnNEaWZmaW5nQWxnb3JpdGhtLmNvbXB1dGUoaCxjLGkpO2xldCBtPWQuZGlmZnMsZz1kLmhpdFRpbWVvdXQ7bT1mYShoLGMsbSksbT1nYyhoLGMsbSk7Y29uc3QgcD1bXSx2PWI9PntpZihzKWZvcihsZXQgTD0wO0w8YjtMKyspe2NvbnN0IFM9dytMLE09XytMO2lmKHRbU10hPT1uW01dKXtjb25zdCBGPXRoaXMucmVmaW5lRGlmZih0LG4sbmV3IFkobmV3IFcoUyxTKzEpLG5ldyBXKE0sTSsxKSksaSxzKTtmb3IoY29uc3QgTyBvZiBGLm1hcHBpbmdzKXAucHVzaChPKTtGLmhpdFRpbWVvdXQmJihnPSEwKX19fTtsZXQgdz0wLF89MDtmb3IoY29uc3QgYiBvZiBtKXt5bigoKT0+Yi5zZXExUmFuZ2Uuc3RhcnQtdz09PWIuc2VxMlJhbmdlLnN0YXJ0LV8pO2NvbnN0IEw9Yi5zZXExUmFuZ2Uuc3RhcnQtdzt2KEwpLHc9Yi5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLF89Yi5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlO2NvbnN0IFM9dGhpcy5yZWZpbmVEaWZmKHQsbixiLGkscyk7Uy5oaXRUaW1lb3V0JiYoZz0hMCk7Zm9yKGNvbnN0IE0gb2YgUy5tYXBwaW5ncylwLnB1c2goTSl9dih0Lmxlbmd0aC13KTtjb25zdCB4PXBhKHAsdCxuKTtsZXQgeT1bXTtyZXR1cm4gci5jb21wdXRlTW92ZXMmJih5PXRoaXMuY29tcHV0ZU1vdmVzKHgsdCxuLG8sdSxpLHMpKSx5bigoKT0+e2Z1bmN0aW9uIGIoUyxNKXtpZihTLmxpbmVOdW1iZXI8MXx8Uy5saW5lTnVtYmVyPk0ubGVuZ3RoKXJldHVybiExO2NvbnN0IEY9TVtTLmxpbmVOdW1iZXItMV07cmV0dXJuIShTLmNvbHVtbjwxfHxTLmNvbHVtbj5GLmxlbmd0aCsxKX1mdW5jdGlvbiBMKFMsTSl7cmV0dXJuIShTLnN0YXJ0TGluZU51bWJlcjwxfHxTLnN0YXJ0TGluZU51bWJlcj5NLmxlbmd0aCsxfHxTLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8MXx8Uy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPk0ubGVuZ3RoKzEpfWZvcihjb25zdCBTIG9mIHgpe2lmKCFTLmlubmVyQ2hhbmdlcylyZXR1cm4hMTtmb3IoY29uc3QgTSBvZiBTLmlubmVyQ2hhbmdlcylpZighKGIoTS5tb2RpZmllZFJhbmdlLmdldFN0YXJ0UG9zaXRpb24oKSxuKSYmYihNLm1vZGlmaWVkUmFuZ2UuZ2V0RW5kUG9zaXRpb24oKSxuKSYmYihNLm9yaWdpbmFsUmFuZ2UuZ2V0U3RhcnRQb3NpdGlvbigpLHQpJiZiKE0ub3JpZ2luYWxSYW5nZS5nZXRFbmRQb3NpdGlvbigpLHQpKSlyZXR1cm4hMTtpZighTChTLm1vZGlmaWVkLG4pfHwhTChTLm9yaWdpbmFsLHQpKXJldHVybiExfXJldHVybiEwfSksbmV3IHduKHgseSxnKX1jb21wdXRlTW92ZXModCxuLHIsaSxzLGEsbCl7cmV0dXJuIHNjKHQsbixyLGkscyxhKS5tYXAoaD0+e2NvbnN0IGM9dGhpcy5yZWZpbmVEaWZmKG4scixuZXcgWShoLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKSxoLm1vZGlmaWVkLnRvT2Zmc2V0UmFuZ2UoKSksYSxsKSxkPXBhKGMubWFwcGluZ3MsbixyLCEwKTtyZXR1cm4gbmV3IFV1KGgsZCl9KX1yZWZpbmVEaWZmKHQsbixyLGkscyl7Y29uc3QgbD14YyhyKS50b1JhbmdlTWFwcGluZzIodCxuKSxvPW5ldyBBbih0LGwub3JpZ2luYWxSYW5nZSxzKSx1PW5ldyBBbihuLGwubW9kaWZpZWRSYW5nZSxzKSxoPW8ubGVuZ3RoK3UubGVuZ3RoPDUwMD90aGlzLmR5bmFtaWNQcm9ncmFtbWluZ0RpZmZpbmcuY29tcHV0ZShvLHUsaSk6dGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG0uY29tcHV0ZShvLHUsaSk7bGV0IGM9aC5kaWZmcztyZXR1cm4gYz1mYShvLHUsYyksYz1kYyhvLHUsYyksYz1oYyhvLHUsYyksYz1wYyhvLHUsYykse21hcHBpbmdzOmMubWFwKG09Pm5ldyBrZShvLnRyYW5zbGF0ZVJhbmdlKG0uc2VxMVJhbmdlKSx1LnRyYW5zbGF0ZVJhbmdlKG0uc2VxMlJhbmdlKSkpLGhpdFRpbWVvdXQ6aC5oaXRUaW1lb3V0fX19ZnVuY3Rpb24gcGEoZSx0LG4scj0hMSl7Y29uc3QgaT1bXTtmb3IoY29uc3QgcyBvZiBYdShlLm1hcChhPT52YyhhLHQsbikpLChhLGwpPT5hLm9yaWdpbmFsLm92ZXJsYXBPclRvdWNoKGwub3JpZ2luYWwpfHxhLm1vZGlmaWVkLm92ZXJsYXBPclRvdWNoKGwubW9kaWZpZWQpKSl7Y29uc3QgYT1zWzBdLGw9c1tzLmxlbmd0aC0xXTtpLnB1c2gobmV3IGplKGEub3JpZ2luYWwuam9pbihsLm9yaWdpbmFsKSxhLm1vZGlmaWVkLmpvaW4obC5tb2RpZmllZCkscy5tYXAobz0+by5pbm5lckNoYW5nZXNbMF0pKSl9cmV0dXJuIHluKCgpPT4hciYmaS5sZW5ndGg+MCYmKGlbMF0ubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyIT09aVswXS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXJ8fG4ubGVuZ3RoLWlbaS5sZW5ndGgtMV0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSE9PXQubGVuZ3RoLWlbaS5sZW5ndGgtMV0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk/ITE6SnMoaSwocyxhKT0+YS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09YS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8YS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXImJnMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxhLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpLGl9ZnVuY3Rpb24gdmMoZSx0LG4pe2xldCByPTAsaT0wO2UubW9kaWZpZWRSYW5nZS5lbmRDb2x1bW49PT0xJiZlLm9yaWdpbmFsUmFuZ2UuZW5kQ29sdW1uPT09MSYmZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcityPD1lLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlciYmZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcityPD1lLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlciYmKGk9LTEpLGUubW9kaWZpZWRSYW5nZS5zdGFydENvbHVtbi0xPj1uW2UubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXItMV0ubGVuZ3RoJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRDb2x1bW4tMT49dFtlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLTFdLmxlbmd0aCYmZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcjw9ZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIraSYmZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcjw9ZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXIraSYmKHI9MSk7Y29uc3Qgcz1uZXcgJChlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3IsZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIrMStpKSxhPW5ldyAkKGUubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIrcixlLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcisxK2kpO3JldHVybiBuZXcgamUocyxhLFtlXSl9ZnVuY3Rpb24geGMoZSl7cmV0dXJuIG5ldyBMZShuZXcgJChlLnNlcTFSYW5nZS5zdGFydCsxLGUuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSsxKSxuZXcgJChlLnNlcTJSYW5nZS5zdGFydCsxLGUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSsxKSl9Y29uc3QgYmE9e2dldExlZ2FjeTooKT0+bmV3IFd1LGdldERlZmF1bHQ6KCk9Pm5ldyBiY307ZnVuY3Rpb24gS2UoZSx0KXtjb25zdCBuPU1hdGgucG93KDEwLHQpO3JldHVybiBNYXRoLnJvdW5kKGUqbikvbn1jbGFzcyBhZXtjb25zdHJ1Y3Rvcih0LG4scixpPTEpe3RoaXMuX3JnYmFCcmFuZD12b2lkIDAsdGhpcy5yPU1hdGgubWluKDI1NSxNYXRoLm1heCgwLHQpKXwwLHRoaXMuZz1NYXRoLm1pbigyNTUsTWF0aC5tYXgoMCxuKSl8MCx0aGlzLmI9TWF0aC5taW4oMjU1LE1hdGgubWF4KDAscikpfDAsdGhpcy5hPUtlKE1hdGgubWF4KE1hdGgubWluKDEsaSksMCksMyl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0LnI9PT1uLnImJnQuZz09PW4uZyYmdC5iPT09bi5iJiZ0LmE9PT1uLmF9fWNsYXNzIE5le2NvbnN0cnVjdG9yKHQsbixyLGkpe3RoaXMuX2hzbGFCcmFuZD12b2lkIDAsdGhpcy5oPU1hdGgubWF4KE1hdGgubWluKDM2MCx0KSwwKXwwLHRoaXMucz1LZShNYXRoLm1heChNYXRoLm1pbigxLG4pLDApLDMpLHRoaXMubD1LZShNYXRoLm1heChNYXRoLm1pbigxLHIpLDApLDMpLHRoaXMuYT1LZShNYXRoLm1heChNYXRoLm1pbigxLGkpLDApLDMpfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4gdC5oPT09bi5oJiZ0LnM9PT1uLnMmJnQubD09PW4ubCYmdC5hPT09bi5hfXN0YXRpYyBmcm9tUkdCQSh0KXtjb25zdCBuPXQuci8yNTUscj10LmcvMjU1LGk9dC5iLzI1NSxzPXQuYSxhPU1hdGgubWF4KG4scixpKSxsPU1hdGgubWluKG4scixpKTtsZXQgbz0wLHU9MDtjb25zdCBoPShsK2EpLzIsYz1hLWw7aWYoYz4wKXtzd2l0Y2godT1NYXRoLm1pbihoPD0uNT9jLygyKmgpOmMvKDItMipoKSwxKSxhKXtjYXNlIG46bz0oci1pKS9jKyhyPGk/NjowKTticmVhaztjYXNlIHI6bz0oaS1uKS9jKzI7YnJlYWs7Y2FzZSBpOm89KG4tcikvYys0O2JyZWFrfW8qPTYwLG89TWF0aC5yb3VuZChvKX1yZXR1cm4gbmV3IE5lKG8sdSxoLHMpfXN0YXRpYyBfaHVlMnJnYih0LG4scil7cmV0dXJuIHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8MS82P3QrKG4tdCkqNipyOnI8MS8yP246cjwyLzM/dCsobi10KSooMi8zLXIpKjY6dH1zdGF0aWMgdG9SR0JBKHQpe2NvbnN0IG49dC5oLzM2MCx7czpyLGw6aSxhOnN9PXQ7bGV0IGEsbCxvO2lmKHI9PT0wKWE9bD1vPWk7ZWxzZXtjb25zdCB1PWk8LjU/aSooMStyKTppK3ItaSpyLGg9MippLXU7YT1OZS5faHVlMnJnYihoLHUsbisxLzMpLGw9TmUuX2h1ZTJyZ2IoaCx1LG4pLG89TmUuX2h1ZTJyZ2IoaCx1LG4tMS8zKX1yZXR1cm4gbmV3IGFlKE1hdGgucm91bmQoYSoyNTUpLE1hdGgucm91bmQobCoyNTUpLE1hdGgucm91bmQobyoyNTUpLHMpfX1jbGFzcyBMdHtjb25zdHJ1Y3Rvcih0LG4scixpKXt0aGlzLl9oc3ZhQnJhbmQ9dm9pZCAwLHRoaXMuaD1NYXRoLm1heChNYXRoLm1pbigzNjAsdCksMCl8MCx0aGlzLnM9S2UoTWF0aC5tYXgoTWF0aC5taW4oMSxuKSwwKSwzKSx0aGlzLnY9S2UoTWF0aC5tYXgoTWF0aC5taW4oMSxyKSwwKSwzKSx0aGlzLmE9S2UoTWF0aC5tYXgoTWF0aC5taW4oMSxpKSwwKSwzKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQuaD09PW4uaCYmdC5zPT09bi5zJiZ0LnY9PT1uLnYmJnQuYT09PW4uYX1zdGF0aWMgZnJvbVJHQkEodCl7Y29uc3Qgbj10LnIvMjU1LHI9dC5nLzI1NSxpPXQuYi8yNTUscz1NYXRoLm1heChuLHIsaSksYT1NYXRoLm1pbihuLHIsaSksbD1zLWEsbz1zPT09MD8wOmwvcztsZXQgdTtyZXR1cm4gbD09PTA/dT0wOnM9PT1uP3U9KChyLWkpL2wlNis2KSU2OnM9PT1yP3U9KGktbikvbCsyOnU9KG4tcikvbCs0LG5ldyBMdChNYXRoLnJvdW5kKHUqNjApLG8scyx0LmEpfXN0YXRpYyB0b1JHQkEodCl7Y29uc3R7aDpuLHM6cix2OmksYTpzfT10LGE9aSpyLGw9YSooMS1NYXRoLmFicyhuLzYwJTItMSkpLG89aS1hO2xldFt1LGgsY109WzAsMCwwXTtyZXR1cm4gbjw2MD8odT1hLGg9bCk6bjwxMjA/KHU9bCxoPWEpOm48MTgwPyhoPWEsYz1sKTpuPDI0MD8oaD1sLGM9YSk6bjwzMDA/KHU9bCxjPWEpOm48PTM2MCYmKHU9YSxjPWwpLHU9TWF0aC5yb3VuZCgodStvKSoyNTUpLGg9TWF0aC5yb3VuZCgoaCtvKSoyNTUpLGM9TWF0aC5yb3VuZCgoYytvKSoyNTUpLG5ldyBhZSh1LGgsYyxzKX19bGV0IGtuPShHPWNsYXNze3N0YXRpYyBmcm9tSGV4KHQpe3JldHVybiBHLkZvcm1hdC5DU1MucGFyc2VIZXgodCl8fEcucmVkfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4hdCYmIW4/ITA6IXR8fCFuPyExOnQuZXF1YWxzKG4pfWdldCBoc2xhKCl7cmV0dXJuIHRoaXMuX2hzbGE/dGhpcy5faHNsYTpOZS5mcm9tUkdCQSh0aGlzLnJnYmEpfWdldCBoc3ZhKCl7cmV0dXJuIHRoaXMuX2hzdmE/dGhpcy5faHN2YTpMdC5mcm9tUkdCQSh0aGlzLnJnYmEpfWNvbnN0cnVjdG9yKHQpe2lmKHQpaWYodCBpbnN0YW5jZW9mIGFlKXRoaXMucmdiYT10O2Vsc2UgaWYodCBpbnN0YW5jZW9mIE5lKXRoaXMuX2hzbGE9dCx0aGlzLnJnYmE9TmUudG9SR0JBKHQpO2Vsc2UgaWYodCBpbnN0YW5jZW9mIEx0KXRoaXMuX2hzdmE9dCx0aGlzLnJnYmE9THQudG9SR0JBKHQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbG9yIGN0b3IgYXJndW1lbnQiKTtlbHNlIHRocm93IG5ldyBFcnJvcigiQ29sb3IgbmVlZHMgYSB2YWx1ZSIpfWVxdWFscyh0KXtyZXR1cm4hIXQmJmFlLmVxdWFscyh0aGlzLnJnYmEsdC5yZ2JhKSYmTmUuZXF1YWxzKHRoaXMuaHNsYSx0LmhzbGEpJiZMdC5lcXVhbHModGhpcy5oc3ZhLHQuaHN2YSl9Z2V0UmVsYXRpdmVMdW1pbmFuY2UoKXtjb25zdCB0PUcuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5yKSxuPUcuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5nKSxyPUcuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5iKSxpPS4yMTI2KnQrLjcxNTIqbisuMDcyMipyO3JldHVybiBLZShpLDQpfXN0YXRpYyBfcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodCl7Y29uc3Qgbj10LzI1NTtyZXR1cm4gbjw9LjAzOTI4P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1pc0xpZ2h0ZXIoKXtyZXR1cm4odGhpcy5yZ2JhLnIqMjk5K3RoaXMucmdiYS5nKjU4Nyt0aGlzLnJnYmEuYioxMTQpLzFlMz49MTI4fWlzTGlnaHRlclRoYW4odCl7Y29uc3Qgbj10aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCkscj10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG4+cn1pc0RhcmtlclRoYW4odCl7Y29uc3Qgbj10aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCkscj10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG48cn1saWdodGVuKHQpe3JldHVybiBuZXcgRyhuZXcgTmUodGhpcy5oc2xhLmgsdGhpcy5oc2xhLnMsdGhpcy5oc2xhLmwrdGhpcy5oc2xhLmwqdCx0aGlzLmhzbGEuYSkpfWRhcmtlbih0KXtyZXR1cm4gbmV3IEcobmV3IE5lKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sLXRoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX10cmFuc3BhcmVudCh0KXtjb25zdHtyOm4sZzpyLGI6aSxhOnN9PXRoaXMucmdiYTtyZXR1cm4gbmV3IEcobmV3IGFlKG4scixpLHMqdCkpfWlzVHJhbnNwYXJlbnQoKXtyZXR1cm4gdGhpcy5yZ2JhLmE9PT0wfWlzT3BhcXVlKCl7cmV0dXJuIHRoaXMucmdiYS5hPT09MX1vcHBvc2l0ZSgpe3JldHVybiBuZXcgRyhuZXcgYWUoMjU1LXRoaXMucmdiYS5yLDI1NS10aGlzLnJnYmEuZywyNTUtdGhpcy5yZ2JhLmIsdGhpcy5yZ2JhLmEpKX1tYWtlT3BhcXVlKHQpe2lmKHRoaXMuaXNPcGFxdWUoKXx8dC5yZ2JhLmEhPT0xKXJldHVybiB0aGlzO2NvbnN0e3I6bixnOnIsYjppLGE6c309dGhpcy5yZ2JhO3JldHVybiBuZXcgRyhuZXcgYWUodC5yZ2JhLnItcyoodC5yZ2JhLnItbiksdC5yZ2JhLmctcyoodC5yZ2JhLmctciksdC5yZ2JhLmItcyoodC5yZ2JhLmItaSksMSkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3RvU3RyaW5nfHwodGhpcy5fdG9TdHJpbmc9Ry5Gb3JtYXQuQ1NTLmZvcm1hdCh0aGlzKSksdGhpcy5fdG9TdHJpbmd9c3RhdGljIGdldExpZ2h0ZXJDb2xvcih0LG4scil7aWYodC5pc0xpZ2h0ZXJUaGFuKG4pKXJldHVybiB0O3I9cnx8LjU7Y29uc3QgaT10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCkscz1uLmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIHI9cioocy1pKS9zLHQubGlnaHRlbihyKX1zdGF0aWMgZ2V0RGFya2VyQ29sb3IodCxuLHIpe2lmKHQuaXNEYXJrZXJUaGFuKG4pKXJldHVybiB0O3I9cnx8LjU7Y29uc3QgaT10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCkscz1uLmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIHI9ciooaS1zKS9pLHQuZGFya2VuKHIpfX0sRy53aGl0ZT1uZXcgRyhuZXcgYWUoMjU1LDI1NSwyNTUsMSkpLEcuYmxhY2s9bmV3IEcobmV3IGFlKDAsMCwwLDEpKSxHLnJlZD1uZXcgRyhuZXcgYWUoMjU1LDAsMCwxKSksRy5ibHVlPW5ldyBHKG5ldyBhZSgwLDAsMjU1LDEpKSxHLmdyZWVuPW5ldyBHKG5ldyBhZSgwLDI1NSwwLDEpKSxHLmN5YW49bmV3IEcobmV3IGFlKDAsMjU1LDI1NSwxKSksRy5saWdodGdyZXk9bmV3IEcobmV3IGFlKDIxMSwyMTEsMjExLDEpKSxHLnRyYW5zcGFyZW50PW5ldyBHKG5ldyBhZSgwLDAsMCwwKSksRyk7KGZ1bmN0aW9uKGUpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24obil7ZnVuY3Rpb24gcihtKXtyZXR1cm4gbS5yZ2JhLmE9PT0xP2ByZ2IoJHttLnJnYmEucn0sICR7bS5yZ2JhLmd9LCAke20ucmdiYS5ifSlgOmUuRm9ybWF0LkNTUy5mb3JtYXRSR0JBKG0pfW4uZm9ybWF0UkdCPXI7ZnVuY3Rpb24gaShtKXtyZXR1cm5gcmdiYSgke20ucmdiYS5yfSwgJHttLnJnYmEuZ30sICR7bS5yZ2JhLmJ9LCAkeyttLnJnYmEuYS50b0ZpeGVkKDIpfSlgfW4uZm9ybWF0UkdCQT1pO2Z1bmN0aW9uIHMobSl7cmV0dXJuIG0uaHNsYS5hPT09MT9gaHNsKCR7bS5oc2xhLmh9LCAkeyhtLmhzbGEucyoxMDApLnRvRml4ZWQoMil9JSwgJHsobS5oc2xhLmwqMTAwKS50b0ZpeGVkKDIpfSUpYDplLkZvcm1hdC5DU1MuZm9ybWF0SFNMQShtKX1uLmZvcm1hdEhTTD1zO2Z1bmN0aW9uIGEobSl7cmV0dXJuYGhzbGEoJHttLmhzbGEuaH0sICR7KG0uaHNsYS5zKjEwMCkudG9GaXhlZCgyKX0lLCAkeyhtLmhzbGEubCoxMDApLnRvRml4ZWQoMil9JSwgJHttLmhzbGEuYS50b0ZpeGVkKDIpfSlgfW4uZm9ybWF0SFNMQT1hO2Z1bmN0aW9uIGwobSl7Y29uc3QgZz1tLnRvU3RyaW5nKDE2KTtyZXR1cm4gZy5sZW5ndGghPT0yPyIwIitnOmd9ZnVuY3Rpb24gbyhtKXtyZXR1cm5gIyR7bChtLnJnYmEucil9JHtsKG0ucmdiYS5nKX0ke2wobS5yZ2JhLmIpfWB9bi5mb3JtYXRIZXg9bztmdW5jdGlvbiB1KG0sZz0hMSl7cmV0dXJuIGcmJm0ucmdiYS5hPT09MT9lLkZvcm1hdC5DU1MuZm9ybWF0SGV4KG0pOmAjJHtsKG0ucmdiYS5yKX0ke2wobS5yZ2JhLmcpfSR7bChtLnJnYmEuYil9JHtsKE1hdGgucm91bmQobS5yZ2JhLmEqMjU1KSl9YH1uLmZvcm1hdEhleEE9dTtmdW5jdGlvbiBoKG0pe3JldHVybiBtLmlzT3BhcXVlKCk/ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhleChtKTplLkZvcm1hdC5DU1MuZm9ybWF0UkdCQShtKX1uLmZvcm1hdD1oO2Z1bmN0aW9uIGMobSl7Y29uc3QgZz1tLmxlbmd0aDtpZihnPT09MHx8bS5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuIG51bGw7aWYoZz09PTcpe2NvbnN0IHA9MTYqZChtLmNoYXJDb2RlQXQoMSkpK2QobS5jaGFyQ29kZUF0KDIpKSx2PTE2KmQobS5jaGFyQ29kZUF0KDMpKStkKG0uY2hhckNvZGVBdCg0KSksdz0xNipkKG0uY2hhckNvZGVBdCg1KSkrZChtLmNoYXJDb2RlQXQoNikpO3JldHVybiBuZXcgZShuZXcgYWUocCx2LHcsMSkpfWlmKGc9PT05KXtjb25zdCBwPTE2KmQobS5jaGFyQ29kZUF0KDEpKStkKG0uY2hhckNvZGVBdCgyKSksdj0xNipkKG0uY2hhckNvZGVBdCgzKSkrZChtLmNoYXJDb2RlQXQoNCkpLHc9MTYqZChtLmNoYXJDb2RlQXQoNSkpK2QobS5jaGFyQ29kZUF0KDYpKSxfPTE2KmQobS5jaGFyQ29kZUF0KDcpKStkKG0uY2hhckNvZGVBdCg4KSk7cmV0dXJuIG5ldyBlKG5ldyBhZShwLHYsdyxfLzI1NSkpfWlmKGc9PT00KXtjb25zdCBwPWQobS5jaGFyQ29kZUF0KDEpKSx2PWQobS5jaGFyQ29kZUF0KDIpKSx3PWQobS5jaGFyQ29kZUF0KDMpKTtyZXR1cm4gbmV3IGUobmV3IGFlKDE2KnArcCwxNip2K3YsMTYqdyt3KSl9aWYoZz09PTUpe2NvbnN0IHA9ZChtLmNoYXJDb2RlQXQoMSkpLHY9ZChtLmNoYXJDb2RlQXQoMikpLHc9ZChtLmNoYXJDb2RlQXQoMykpLF89ZChtLmNoYXJDb2RlQXQoNCkpO3JldHVybiBuZXcgZShuZXcgYWUoMTYqcCtwLDE2KnYrdiwxNip3K3csKDE2Kl8rXykvMjU1KSl9cmV0dXJuIG51bGx9bi5wYXJzZUhleD1jO2Z1bmN0aW9uIGQobSl7c3dpdGNoKG0pe2Nhc2UgNDg6cmV0dXJuIDA7Y2FzZSA0OTpyZXR1cm4gMTtjYXNlIDUwOnJldHVybiAyO2Nhc2UgNTE6cmV0dXJuIDM7Y2FzZSA1MjpyZXR1cm4gNDtjYXNlIDUzOnJldHVybiA1O2Nhc2UgNTQ6cmV0dXJuIDY7Y2FzZSA1NTpyZXR1cm4gNztjYXNlIDU2OnJldHVybiA4O2Nhc2UgNTc6cmV0dXJuIDk7Y2FzZSA5NzpyZXR1cm4gMTA7Y2FzZSA2NTpyZXR1cm4gMTA7Y2FzZSA5ODpyZXR1cm4gMTE7Y2FzZSA2NjpyZXR1cm4gMTE7Y2FzZSA5OTpyZXR1cm4gMTI7Y2FzZSA2NzpyZXR1cm4gMTI7Y2FzZSAxMDA6cmV0dXJuIDEzO2Nhc2UgNjg6cmV0dXJuIDEzO2Nhc2UgMTAxOnJldHVybiAxNDtjYXNlIDY5OnJldHVybiAxNDtjYXNlIDEwMjpyZXR1cm4gMTU7Y2FzZSA3MDpyZXR1cm4gMTV9cmV0dXJuIDB9fSkodC5DU1N8fCh0LkNTUz17fSkpfSkoZS5Gb3JtYXR8fChlLkZvcm1hdD17fSkpfSkoa258fChrbj17fSkpO2Z1bmN0aW9uIHZhKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3Qgcj1OdW1iZXIobik7KHJ8fHI9PT0wJiZuLnJlcGxhY2UoL1xzL2csIiIpIT09IiIpJiZ0LnB1c2gocil9cmV0dXJuIHR9ZnVuY3Rpb24gUHIoZSx0LG4scil7cmV0dXJue3JlZDplLzI1NSxibHVlOm4vMjU1LGdyZWVuOnQvMjU1LGFscGhhOnJ9fWZ1bmN0aW9uIEd0KGUsdCl7Y29uc3Qgbj10LmluZGV4LHI9dFswXS5sZW5ndGg7aWYoIW4pcmV0dXJuO2NvbnN0IGk9ZS5wb3NpdGlvbkF0KG4pO3JldHVybntzdGFydExpbmVOdW1iZXI6aS5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOmkuY29sdW1uLGVuZExpbmVOdW1iZXI6aS5saW5lTnVtYmVyLGVuZENvbHVtbjppLmNvbHVtbityfX1mdW5jdGlvbiB5YyhlLHQpe2lmKCFlKXJldHVybjtjb25zdCBuPWtuLkZvcm1hdC5DU1MucGFyc2VIZXgodCk7aWYobilyZXR1cm57cmFuZ2U6ZSxjb2xvcjpQcihuLnJnYmEucixuLnJnYmEuZyxuLnJnYmEuYixuLnJnYmEuYSl9fWZ1bmN0aW9uIHhhKGUsdCxuKXtpZighZXx8dC5sZW5ndGghPT0xKXJldHVybjtjb25zdCBpPXRbMF0udmFsdWVzKCkscz12YShpKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjpQcihzWzBdLHNbMV0sc1syXSxuP3NbM106MSl9fWZ1bmN0aW9uIHlhKGUsdCxuKXtpZighZXx8dC5sZW5ndGghPT0xKXJldHVybjtjb25zdCBpPXRbMF0udmFsdWVzKCkscz12YShpKSxhPW5ldyBrbihuZXcgTmUoc1swXSxzWzFdLzEwMCxzWzJdLzEwMCxuP3NbM106MSkpO3JldHVybntyYW5nZTplLGNvbG9yOlByKGEucmdiYS5yLGEucmdiYS5nLGEucmdiYS5iLGEucmdiYS5hKX19ZnVuY3Rpb24gSnQoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP1suLi5lLm1hdGNoQWxsKHQpXTplLmZpbmRNYXRjaGVzKHQpfWZ1bmN0aW9uIHdjKGUpe2NvbnN0IHQ9W10scj1KdChlLC9cYihyZ2J8cmdiYXxoc2x8aHNsYSkoXChbMC05XHMsLlwlXSpcKSl8KCMpKFtBLUZhLWYwLTldezN9KVxifCgjKShbQS1GYS1mMC05XXs0fSlcYnwoIykoW0EtRmEtZjAtOV17Nn0pXGJ8KCMpKFtBLUZhLWYwLTldezh9KVxiL2dtKTtpZihyLmxlbmd0aD4wKWZvcihjb25zdCBpIG9mIHIpe2NvbnN0IHM9aS5maWx0ZXIodT0+dSE9PXZvaWQgMCksYT1zWzFdLGw9c1syXTtpZighbCljb250aW51ZTtsZXQgbztpZihhPT09InJnYiIpe2NvbnN0IHU9L15cKFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqXCkkL2dtO289eGEoR3QoZSxpKSxKdChsLHUpLCExKX1lbHNlIGlmKGE9PT0icmdiYSIpe2NvbnN0IHU9L15cKFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigwWy5dWzAtOV0rfFsuXVswLTldK3xbMDFdWy5dfFswMV0pXHMqXCkkL2dtO289eGEoR3QoZSxpKSxKdChsLHUpLCEwKX1lbHNlIGlmKGE9PT0iaHNsIil7Y29uc3QgdT0vXlwoXHMqKDM2WzBdfDNbMC01XVswLTldfFsxMl1bMC05XVswLTldfFsxLTldP1swLTldKVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccypcKSQvZ207bz15YShHdChlLGkpLEp0KGwsdSksITEpfWVsc2UgaWYoYT09PSJoc2xhIil7Y29uc3QgdT0vXlwoXHMqKDM2WzBdfDNbMC01XVswLTldfFsxMl1bMC05XVswLTldfFsxLTldP1swLTldKVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccyosXHMqKDBbLl1bMC05XSt8Wy5dWzAtOV0rfFswMV1bLl18WzAxXSlccypcKSQvZ207bz15YShHdChlLGkpLEp0KGwsdSksITApfWVsc2UgYT09PSIjIiYmKG89eWMoR3QoZSxpKSxhK2wpKTtvJiZ0LnB1c2gobyl9cmV0dXJuIHR9ZnVuY3Rpb24gX2MoZSl7cmV0dXJuIWV8fHR5cGVvZiBlLmdldFZhbHVlIT0iZnVuY3Rpb24ifHx0eXBlb2YgZS5wb3NpdGlvbkF0IT0iZnVuY3Rpb24iP1tdOndjKGUpfWNvbnN0IHdhPW5ldyBSZWdFeHAoIlxcYk1BUks6XFxzKiguKikkIiwiZCIpLExjPS9eLSt8LSskL2c7ZnVuY3Rpb24gTmMoZSx0KXtsZXQgbj1bXTtpZih0LmZpbmRSZWdpb25TZWN0aW9uSGVhZGVycyYmdC5mb2xkaW5nUnVsZXM/Lm1hcmtlcnMpe2NvbnN0IHI9U2MoZSx0KTtuPW4uY29uY2F0KHIpfWlmKHQuZmluZE1hcmtTZWN0aW9uSGVhZGVycyl7Y29uc3Qgcj1BYyhlKTtuPW4uY29uY2F0KHIpfXJldHVybiBufWZ1bmN0aW9uIFNjKGUsdCl7Y29uc3Qgbj1bXSxyPWUuZ2V0TGluZUNvdW50KCk7Zm9yKGxldCBpPTE7aTw9cjtpKyspe2NvbnN0IHM9ZS5nZXRMaW5lQ29udGVudChpKSxhPXMubWF0Y2godC5mb2xkaW5nUnVsZXMubWFya2Vycy5zdGFydCk7aWYoYSl7Y29uc3QgbD17c3RhcnRMaW5lTnVtYmVyOmksc3RhcnRDb2x1bW46YVswXS5sZW5ndGgrMSxlbmRMaW5lTnVtYmVyOmksZW5kQ29sdW1uOnMubGVuZ3RoKzF9O2lmKGwuZW5kQ29sdW1uPmwuc3RhcnRDb2x1bW4pe2NvbnN0IG89e3JhbmdlOmwsLi4uX2Eocy5zdWJzdHJpbmcoYVswXS5sZW5ndGgpKSxzaG91bGRCZUluQ29tbWVudHM6ITF9OyhvLnRleHR8fG8uaGFzU2VwYXJhdG9yTGluZSkmJm4ucHVzaChvKX19fXJldHVybiBufWZ1bmN0aW9uIEFjKGUpe2NvbnN0IHQ9W10sbj1lLmdldExpbmVDb3VudCgpO2ZvcihsZXQgcj0xO3I8PW47cisrKXtjb25zdCBpPWUuZ2V0TGluZUNvbnRlbnQocik7a2MoaSxyLHQpfXJldHVybiB0fWZ1bmN0aW9uIGtjKGUsdCxuKXt3YS5sYXN0SW5kZXg9MDtjb25zdCByPXdhLmV4ZWMoZSk7aWYocil7Y29uc3QgaT1yLmluZGljZXNbMV1bMF0rMSxzPXIuaW5kaWNlc1sxXVsxXSsxLGE9e3N0YXJ0TGluZU51bWJlcjp0LHN0YXJ0Q29sdW1uOmksZW5kTGluZU51bWJlcjp0LGVuZENvbHVtbjpzfTtpZihhLmVuZENvbHVtbj5hLnN0YXJ0Q29sdW1uKXtjb25zdCBsPXtyYW5nZTphLC4uLl9hKHJbMV0pLHNob3VsZEJlSW5Db21tZW50czohMH07KGwudGV4dHx8bC5oYXNTZXBhcmF0b3JMaW5lKSYmbi5wdXNoKGwpfX19ZnVuY3Rpb24gX2EoZSl7ZT1lLnRyaW0oKTtjb25zdCB0PWUuc3RhcnRzV2l0aCgiLSIpO3JldHVybiBlPWUucmVwbGFjZShMYywiIikse3RleHQ6ZSxoYXNTZXBhcmF0b3JMaW5lOnR9fXZhciBMYTsoZnVuY3Rpb24oZSl7YXN5bmMgZnVuY3Rpb24gdChyKXtsZXQgaTtjb25zdCBzPWF3YWl0IFByb21pc2UuYWxsKHIubWFwKGE9PmEudGhlbihsPT5sLGw9PntpfHwoaT1sKX0pKSk7aWYodHlwZW9mIGk8InUiKXRocm93IGk7cmV0dXJuIHN9ZS5zZXR0bGVkPXQ7ZnVuY3Rpb24gbihyKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoaSxzKT0+e3RyeXthd2FpdCByKGkscyl9Y2F0Y2goYSl7cyhhKX19KX1lLndpdGhBc3luY0JvZHk9bn0pKExhfHwoTGE9e30pKTtjb25zdCBtZT1jbGFzcyBtZXtzdGF0aWMgZnJvbUFycmF5KHQpe3JldHVybiBuZXcgbWUobj0+e24uZW1pdE1hbnkodCl9KX1zdGF0aWMgZnJvbVByb21pc2UodCl7cmV0dXJuIG5ldyBtZShhc3luYyBuPT57bi5lbWl0TWFueShhd2FpdCB0KX0pfXN0YXRpYyBmcm9tUHJvbWlzZXModCl7cmV0dXJuIG5ldyBtZShhc3luYyBuPT57YXdhaXQgUHJvbWlzZS5hbGwodC5tYXAoYXN5bmMgcj0+bi5lbWl0T25lKGF3YWl0IHIpKSl9KX1zdGF0aWMgbWVyZ2UodCl7cmV0dXJuIG5ldyBtZShhc3luYyBuPT57YXdhaXQgUHJvbWlzZS5hbGwodC5tYXAoYXN5bmMgcj0+e2ZvciBhd2FpdChjb25zdCBpIG9mIHIpbi5lbWl0T25lKGkpfSkpfSl9Y29uc3RydWN0b3IodCxuKXt0aGlzLl9zdGF0ZT0wLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5fZXJyb3I9bnVsbCx0aGlzLl9vblJldHVybj1uLHRoaXMuX29uU3RhdGVDaGFuZ2VkPW5ldyBfZSxxdWV1ZU1pY3JvdGFzayhhc3luYygpPT57Y29uc3Qgcj17ZW1pdE9uZTppPT50aGlzLmVtaXRPbmUoaSksZW1pdE1hbnk6aT0+dGhpcy5lbWl0TWFueShpKSxyZWplY3Q6aT0+dGhpcy5yZWplY3QoaSl9O3RyeXthd2FpdCBQcm9taXNlLnJlc29sdmUodChyKSksdGhpcy5yZXNvbHZlKCl9Y2F0Y2goaSl7dGhpcy5yZWplY3QoaSl9ZmluYWxseXtyLmVtaXRPbmU9dm9pZCAwLHIuZW1pdE1hbnk9dm9pZCAwLHIucmVqZWN0PXZvaWQgMH19KX1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7bGV0IHQ9MDtyZXR1cm57bmV4dDphc3luYygpPT57ZG97aWYodGhpcy5fc3RhdGU9PT0yKXRocm93IHRoaXMuX2Vycm9yO2lmKHQ8dGhpcy5fcmVzdWx0cy5sZW5ndGgpcmV0dXJue2RvbmU6ITEsdmFsdWU6dGhpcy5fcmVzdWx0c1t0KytdfTtpZih0aGlzLl9zdGF0ZT09PTEpcmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfTthd2FpdCBjbi50b1Byb21pc2UodGhpcy5fb25TdGF0ZUNoYW5nZWQuZXZlbnQpfXdoaWxlKCEwKX0scmV0dXJuOmFzeW5jKCk9Pih0aGlzLl9vblJldHVybj8uKCkse2RvbmU6ITAsdmFsdWU6dm9pZCAwfSl9fXN0YXRpYyBtYXAodCxuKXtyZXR1cm4gbmV3IG1lKGFzeW5jIHI9Pntmb3IgYXdhaXQoY29uc3QgaSBvZiB0KXIuZW1pdE9uZShuKGkpKX0pfW1hcCh0KXtyZXR1cm4gbWUubWFwKHRoaXMsdCl9c3RhdGljIGZpbHRlcih0LG4pe3JldHVybiBuZXcgbWUoYXN5bmMgcj0+e2ZvciBhd2FpdChjb25zdCBpIG9mIHQpbihpKSYmci5lbWl0T25lKGkpfSl9ZmlsdGVyKHQpe3JldHVybiBtZS5maWx0ZXIodGhpcyx0KX1zdGF0aWMgY29hbGVzY2UodCl7cmV0dXJuIG1lLmZpbHRlcih0LG49PiEhbil9Y29hbGVzY2UoKXtyZXR1cm4gbWUuY29hbGVzY2UodGhpcyl9c3RhdGljIGFzeW5jIHRvUHJvbWlzZSh0KXtjb25zdCBuPVtdO2ZvciBhd2FpdChjb25zdCByIG9mIHQpbi5wdXNoKHIpO3JldHVybiBufXRvUHJvbWlzZSgpe3JldHVybiBtZS50b1Byb21pc2UodGhpcyl9ZW1pdE9uZSh0KXt0aGlzLl9zdGF0ZT09PTAmJih0aGlzLl9yZXN1bHRzLnB1c2godCksdGhpcy5fb25TdGF0ZUNoYW5nZWQuZmlyZSgpKX1lbWl0TWFueSh0KXt0aGlzLl9zdGF0ZT09PTAmJih0aGlzLl9yZXN1bHRzPXRoaXMuX3Jlc3VsdHMuY29uY2F0KHQpLHRoaXMuX29uU3RhdGVDaGFuZ2VkLmZpcmUoKSl9cmVzb2x2ZSgpe3RoaXMuX3N0YXRlPT09MCYmKHRoaXMuX3N0YXRlPTEsdGhpcy5fb25TdGF0ZUNoYW5nZWQuZmlyZSgpKX1yZWplY3QodCl7dGhpcy5fc3RhdGU9PT0wJiYodGhpcy5fc3RhdGU9Mix0aGlzLl9lcnJvcj10LHRoaXMuX29uU3RhdGVDaGFuZ2VkLmZpcmUoKSl9fTttZS5FTVBUWT1tZS5mcm9tQXJyYXkoW10pO2xldCBOYT1tZTtjbGFzcyBSY3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlcz10LHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0Lmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4PW5ldyBJbnQzMkFycmF5KDEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT0tMX1pbnNlcnRWYWx1ZXModCxuKXt0PXh0KHQpO2NvbnN0IHI9dGhpcy52YWx1ZXMsaT10aGlzLnByZWZpeFN1bSxzPW4ubGVuZ3RoO3JldHVybiBzPT09MD8hMToodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KHIubGVuZ3RoK3MpLHRoaXMudmFsdWVzLnNldChyLnN1YmFycmF5KDAsdCksMCksdGhpcy52YWx1ZXMuc2V0KHIuc3ViYXJyYXkodCksdCtzKSx0aGlzLnZhbHVlcy5zZXQobix0KSx0LTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPXQtMSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPj0wJiZ0aGlzLnByZWZpeFN1bS5zZXQoaS5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfXNldFZhbHVlKHQsbil7cmV0dXJuIHQ9eHQodCksbj14dChuKSx0aGlzLnZhbHVlc1t0XT09PW4/ITE6KHRoaXMudmFsdWVzW3RdPW4sdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLCEwKX1yZW1vdmVWYWx1ZXModCxuKXt0PXh0KHQpLG49eHQobik7Y29uc3Qgcj10aGlzLnZhbHVlcyxpPXRoaXMucHJlZml4U3VtO2lmKHQ+PXIubGVuZ3RoKXJldHVybiExO2NvbnN0IHM9ci5sZW5ndGgtdDtyZXR1cm4gbj49cyYmKG49cyksbj09PTA/ITE6KHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShyLmxlbmd0aC1uKSx0aGlzLnZhbHVlcy5zZXQoci5zdWJhcnJheSgwLHQpLDApLHRoaXMudmFsdWVzLnNldChyLnN1YmFycmF5KHQrbiksdCksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KGkuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1nZXRUb3RhbFN1bSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGg9PT0wPzA6dGhpcy5fZ2V0UHJlZml4U3VtKHRoaXMudmFsdWVzLmxlbmd0aC0xKX1nZXRQcmVmaXhTdW0odCl7cmV0dXJuIHQ8MD8wOih0PXh0KHQpLHRoaXMuX2dldFByZWZpeFN1bSh0KSl9X2dldFByZWZpeFN1bSh0KXtpZih0PD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0pcmV0dXJuIHRoaXMucHJlZml4U3VtW3RdO2xldCBuPXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxO249PT0wJiYodGhpcy5wcmVmaXhTdW1bMF09dGhpcy52YWx1ZXNbMF0sbisrKSx0Pj10aGlzLnZhbHVlcy5sZW5ndGgmJih0PXRoaXMudmFsdWVzLmxlbmd0aC0xKTtmb3IobGV0IHI9bjtyPD10O3IrKyl0aGlzLnByZWZpeFN1bVtyXT10aGlzLnByZWZpeFN1bVtyLTFdK3RoaXMudmFsdWVzW3JdO3JldHVybiB0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09TWF0aC5tYXgodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdLHQpLHRoaXMucHJlZml4U3VtW3RdfWdldEluZGV4T2YodCl7dD1NYXRoLmZsb29yKHQpLHRoaXMuZ2V0VG90YWxTdW0oKTtsZXQgbj0wLHI9dGhpcy52YWx1ZXMubGVuZ3RoLTEsaT0wLHM9MCxhPTA7Zm9yKDtuPD1yOylpZihpPW4rKHItbikvMnwwLHM9dGhpcy5wcmVmaXhTdW1baV0sYT1zLXRoaXMudmFsdWVzW2ldLHQ8YSlyPWktMTtlbHNlIGlmKHQ+PXMpbj1pKzE7ZWxzZSBicmVhaztyZXR1cm4gbmV3IEVjKGksdC1hKX19Y2xhc3MgRWN7Y29uc3RydWN0b3IodCxuKXt0aGlzLmluZGV4PXQsdGhpcy5yZW1haW5kZXI9bix0aGlzLl9wcmVmaXhTdW1JbmRleE9mUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMuaW5kZXg9dCx0aGlzLnJlbWFpbmRlcj1ufX1jbGFzcyBNY3tjb25zdHJ1Y3Rvcih0LG4scixpKXt0aGlzLl91cmk9dCx0aGlzLl9saW5lcz1uLHRoaXMuX2VvbD1yLHRoaXMuX3ZlcnNpb25JZD1pLHRoaXMuX2xpbmVTdGFydHM9bnVsbCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1kaXNwb3NlKCl7dGhpcy5fbGluZXMubGVuZ3RoPTB9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbklkfWdldFRleHQoKXtyZXR1cm4gdGhpcy5fY2FjaGVkVGV4dFZhbHVlPT09bnVsbCYmKHRoaXMuX2NhY2hlZFRleHRWYWx1ZT10aGlzLl9saW5lcy5qb2luKHRoaXMuX2VvbCkpLHRoaXMuX2NhY2hlZFRleHRWYWx1ZX1vbkV2ZW50cyh0KXt0LmVvbCYmdC5lb2whPT10aGlzLl9lb2wmJih0aGlzLl9lb2w9dC5lb2wsdGhpcy5fbGluZVN0YXJ0cz1udWxsKTtjb25zdCBuPXQuY2hhbmdlcztmb3IoY29uc3QgciBvZiBuKXRoaXMuX2FjY2VwdERlbGV0ZVJhbmdlKHIucmFuZ2UpLHRoaXMuX2FjY2VwdEluc2VydFRleHQobmV3IGVlKHIucmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLHIucmFuZ2Uuc3RhcnRDb2x1bW4pLHIudGV4dCk7dGhpcy5fdmVyc2lvbklkPXQudmVyc2lvbklkLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfV9lbnN1cmVMaW5lU3RhcnRzKCl7aWYoIXRoaXMuX2xpbmVTdGFydHMpe2NvbnN0IHQ9dGhpcy5fZW9sLmxlbmd0aCxuPXRoaXMuX2xpbmVzLmxlbmd0aCxyPW5ldyBVaW50MzJBcnJheShuKTtmb3IobGV0IGk9MDtpPG47aSsrKXJbaV09dGhpcy5fbGluZXNbaV0ubGVuZ3RoK3Q7dGhpcy5fbGluZVN0YXJ0cz1uZXcgUmMocil9fV9zZXRMaW5lVGV4dCh0LG4pe3RoaXMuX2xpbmVzW3RdPW4sdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5zZXRWYWx1ZSh0LHRoaXMuX2xpbmVzW3RdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoKX1fYWNjZXB0RGVsZXRlUmFuZ2UodCl7aWYodC5zdGFydExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXIpe2lmKHQuc3RhcnRDb2x1bW49PT10LmVuZENvbHVtbilyZXR1cm47dGhpcy5fc2V0TGluZVRleHQodC5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW3Quc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmVuZENvbHVtbi0xKSk7cmV0dXJufXRoaXMuX3NldExpbmVUZXh0KHQuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1t0LmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UodC5zdGFydExpbmVOdW1iZXIsdC5lbmRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXItdC5zdGFydExpbmVOdW1iZXIpfV9hY2NlcHRJbnNlcnRUZXh0KHQsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybjtjb25zdCByPUxsKG4pO2lmKHIubGVuZ3RoPT09MSl7dGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK3JbMF0rdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmNvbHVtbi0xKSk7cmV0dXJufXJbci5sZW5ndGgtMV0rPXRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5jb2x1bW4tMSksdGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK3JbMF0pO2NvbnN0IGk9bmV3IFVpbnQzMkFycmF5KHIubGVuZ3RoLTEpO2ZvcihsZXQgcz0xO3M8ci5sZW5ndGg7cysrKXRoaXMuX2xpbmVzLnNwbGljZSh0LmxpbmVOdW1iZXIrcy0xLDAscltzXSksaVtzLTFdPXJbc10ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGg7dGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5pbnNlcnRWYWx1ZXModC5saW5lTnVtYmVyLGkpfX1jbGFzcyBDY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpfWdldE1vZGVsKHQpe3JldHVybiB0aGlzLl9tb2RlbHNbdF19Z2V0TW9kZWxzKCl7Y29uc3QgdD1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKG49PnQucHVzaCh0aGlzLl9tb2RlbHNbbl0pKSx0fSRhY2NlcHROZXdNb2RlbCh0KXt0aGlzLl9tb2RlbHNbdC51cmxdPW5ldyBUYyhQZS5wYXJzZSh0LnVybCksdC5saW5lcyx0LkVPTCx0LnZlcnNpb25JZCl9JGFjY2VwdE1vZGVsQ2hhbmdlZCh0LG4pe2lmKCF0aGlzLl9tb2RlbHNbdF0pcmV0dXJuO3RoaXMuX21vZGVsc1t0XS5vbkV2ZW50cyhuKX0kYWNjZXB0UmVtb3ZlZE1vZGVsKHQpe3RoaXMuX21vZGVsc1t0XSYmZGVsZXRlIHRoaXMuX21vZGVsc1t0XX19Y2xhc3MgVGMgZXh0ZW5kcyBNY3tnZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgZW9sKCl7cmV0dXJuIHRoaXMuX2VvbH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldFRleHQoKX1maW5kTWF0Y2hlcyh0KXtjb25zdCBuPVtdO2ZvcihsZXQgcj0wO3I8dGhpcy5fbGluZXMubGVuZ3RoO3IrKyl7Y29uc3QgaT10aGlzLl9saW5lc1tyXSxzPXRoaXMub2Zmc2V0QXQobmV3IGVlKHIrMSwxKSksYT1pLm1hdGNoQWxsKHQpO2Zvcihjb25zdCBsIG9mIGEpKGwuaW5kZXh8fGwuaW5kZXg9PT0wKSYmKGwuaW5kZXg9bC5pbmRleCtzKSxuLnB1c2gobCl9cmV0dXJuIG59Z2V0TGluZXNDb250ZW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLnNsaWNlKDApfWdldExpbmVDb3VudCgpe3JldHVybiB0aGlzLl9saW5lcy5sZW5ndGh9Z2V0TGluZUNvbnRlbnQodCl7cmV0dXJuIHRoaXMuX2xpbmVzW3QtMV19Z2V0V29yZEF0UG9zaXRpb24odCxuKXtjb25zdCByPVNyKHQuY29sdW1uLFFzKG4pLHRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXSwwKTtyZXR1cm4gcj9uZXcgeih0LmxpbmVOdW1iZXIsci5zdGFydENvbHVtbix0LmxpbmVOdW1iZXIsci5lbmRDb2x1bW4pOm51bGx9d29yZHModCl7Y29uc3Qgbj10aGlzLl9saW5lcyxyPXRoaXMuX3dvcmRlbml6ZS5iaW5kKHRoaXMpO2xldCBpPTAscz0iIixhPTAsbD1bXTtyZXR1cm57KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKDs7KWlmKGE8bC5sZW5ndGgpe2NvbnN0IG89cy5zdWJzdHJpbmcobFthXS5zdGFydCxsW2FdLmVuZCk7YSs9MSx5aWVsZCBvfWVsc2UgaWYoaTxuLmxlbmd0aClzPW5baV0sbD1yKHMsdCksYT0wLGkrPTE7ZWxzZSBicmVha319fWdldExpbmVXb3Jkcyh0LG4pe2NvbnN0IHI9dGhpcy5fbGluZXNbdC0xXSxpPXRoaXMuX3dvcmRlbml6ZShyLG4pLHM9W107Zm9yKGNvbnN0IGEgb2YgaSlzLnB1c2goe3dvcmQ6ci5zdWJzdHJpbmcoYS5zdGFydCxhLmVuZCksc3RhcnRDb2x1bW46YS5zdGFydCsxLGVuZENvbHVtbjphLmVuZCsxfSk7cmV0dXJuIHN9X3dvcmRlbml6ZSh0LG4pe2NvbnN0IHI9W107bGV0IGk7Zm9yKG4ubGFzdEluZGV4PTA7KGk9bi5leGVjKHQpKSYmaVswXS5sZW5ndGghPT0wOylyLnB1c2goe3N0YXJ0OmkuaW5kZXgsZW5kOmkuaW5kZXgraVswXS5sZW5ndGh9KTtyZXR1cm4gcn1nZXRWYWx1ZUluUmFuZ2UodCl7aWYodD10aGlzLl92YWxpZGF0ZVJhbmdlKHQpLHQuc3RhcnRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyKXJldHVybiB0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5zdGFydENvbHVtbi0xLHQuZW5kQ29sdW1uLTEpO2NvbnN0IG49dGhpcy5fZW9sLHI9dC5zdGFydExpbmVOdW1iZXItMSxpPXQuZW5kTGluZU51bWJlci0xLHM9W107cy5wdXNoKHRoaXMuX2xpbmVzW3JdLnN1YnN0cmluZyh0LnN0YXJ0Q29sdW1uLTEpKTtmb3IobGV0IGE9cisxO2E8aTthKyspcy5wdXNoKHRoaXMuX2xpbmVzW2FdKTtyZXR1cm4gcy5wdXNoKHRoaXMuX2xpbmVzW2ldLnN1YnN0cmluZygwLHQuZW5kQ29sdW1uLTEpKSxzLmpvaW4obil9b2Zmc2V0QXQodCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih0KSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCksdGhpcy5fbGluZVN0YXJ0cy5nZXRQcmVmaXhTdW0odC5saW5lTnVtYmVyLTIpKyh0LmNvbHVtbi0xKX1wb3NpdGlvbkF0KHQpe3Q9TWF0aC5mbG9vcih0KSx0PU1hdGgubWF4KDAsdCksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpO2NvbnN0IG49dGhpcy5fbGluZVN0YXJ0cy5nZXRJbmRleE9mKHQpLHI9dGhpcy5fbGluZXNbbi5pbmRleF0ubGVuZ3RoO3JldHVybntsaW5lTnVtYmVyOjErbi5pbmRleCxjb2x1bW46MStNYXRoLm1pbihuLnJlbWFpbmRlcixyKX19X3ZhbGlkYXRlUmFuZ2UodCl7Y29uc3Qgbj10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjp0LnN0YXJ0Q29sdW1ufSkscj10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuZW5kTGluZU51bWJlcixjb2x1bW46dC5lbmRDb2x1bW59KTtyZXR1cm4gbi5saW5lTnVtYmVyIT09dC5zdGFydExpbmVOdW1iZXJ8fG4uY29sdW1uIT09dC5zdGFydENvbHVtbnx8ci5saW5lTnVtYmVyIT09dC5lbmRMaW5lTnVtYmVyfHxyLmNvbHVtbiE9PXQuZW5kQ29sdW1uP3tzdGFydExpbmVOdW1iZXI6bi5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOm4uY29sdW1uLGVuZExpbmVOdW1iZXI6ci5saW5lTnVtYmVyLGVuZENvbHVtbjpyLmNvbHVtbn06dH1fdmFsaWRhdGVQb3NpdGlvbih0KXtpZighZWUuaXNJUG9zaXRpb24odCkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9zaXRpb24iKTtsZXR7bGluZU51bWJlcjpuLGNvbHVtbjpyfT10LGk9ITE7aWYobjwxKW49MSxyPTEsaT0hMDtlbHNlIGlmKG4+dGhpcy5fbGluZXMubGVuZ3RoKW49dGhpcy5fbGluZXMubGVuZ3RoLHI9dGhpcy5fbGluZXNbbi0xXS5sZW5ndGgrMSxpPSEwO2Vsc2V7Y29uc3Qgcz10aGlzLl9saW5lc1tuLTFdLmxlbmd0aCsxO3I8MT8ocj0xLGk9ITApOnI+cyYmKHI9cyxpPSEwKX1yZXR1cm4gaT97bGluZU51bWJlcjpuLGNvbHVtbjpyfTp0fX1jb25zdCBXbj1jbGFzcyBXbntjb25zdHJ1Y3Rvcigpe3RoaXMuX3dvcmtlclRleHRNb2RlbFN5bmNTZXJ2ZXI9bmV3IENjfWRpc3Bvc2UoKXt9X2dldE1vZGVsKHQpe3JldHVybiB0aGlzLl93b3JrZXJUZXh0TW9kZWxTeW5jU2VydmVyLmdldE1vZGVsKHQpfV9nZXRNb2RlbHMoKXtyZXR1cm4gdGhpcy5fd29ya2VyVGV4dE1vZGVsU3luY1NlcnZlci5nZXRNb2RlbHMoKX0kYWNjZXB0TmV3TW9kZWwodCl7dGhpcy5fd29ya2VyVGV4dE1vZGVsU3luY1NlcnZlci4kYWNjZXB0TmV3TW9kZWwodCl9JGFjY2VwdE1vZGVsQ2hhbmdlZCh0LG4pe3RoaXMuX3dvcmtlclRleHRNb2RlbFN5bmNTZXJ2ZXIuJGFjY2VwdE1vZGVsQ2hhbmdlZCh0LG4pfSRhY2NlcHRSZW1vdmVkTW9kZWwodCl7dGhpcy5fd29ya2VyVGV4dE1vZGVsU3luY1NlcnZlci4kYWNjZXB0UmVtb3ZlZE1vZGVsKHQpfWFzeW5jICRjb21wdXRlVW5pY29kZUhpZ2hsaWdodHModCxuLHIpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIGk/T3UuY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGksbixyKTp7cmFuZ2VzOltdLGhhc01vcmU6ITEsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6MCxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDowLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDowfX1hc3luYyAkZmluZFNlY3Rpb25IZWFkZXJzKHQsbil7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gcj9OYyhyLG4pOltdfWFzeW5jICRjb21wdXRlRGlmZih0LG4scixpKXtjb25zdCBzPXRoaXMuX2dldE1vZGVsKHQpLGE9dGhpcy5fZ2V0TW9kZWwobik7cmV0dXJuIXN8fCFhP251bGw6Um4uY29tcHV0ZURpZmYocyxhLHIsaSl9c3RhdGljIGNvbXB1dGVEaWZmKHQsbixyLGkpe2NvbnN0IHM9aT09PSJhZHZhbmNlZCI/YmEuZ2V0RGVmYXVsdCgpOmJhLmdldExlZ2FjeSgpLGE9dC5nZXRMaW5lc0NvbnRlbnQoKSxsPW4uZ2V0TGluZXNDb250ZW50KCksbz1zLmNvbXB1dGVEaWZmKGEsbCxyKSx1PW8uY2hhbmdlcy5sZW5ndGg+MD8hMTp0aGlzLl9tb2RlbHNBcmVJZGVudGljYWwodCxuKTtmdW5jdGlvbiBoKGMpe3JldHVybiBjLm1hcChkPT5bZC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsZC5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGQubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLGQubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxkLmlubmVyQ2hhbmdlcz8ubWFwKG09PlttLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLG0ub3JpZ2luYWxSYW5nZS5zdGFydENvbHVtbixtLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlcixtLm9yaWdpbmFsUmFuZ2UuZW5kQ29sdW1uLG0ubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIsbS5tb2RpZmllZFJhbmdlLnN0YXJ0Q29sdW1uLG0ubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyLG0ubW9kaWZpZWRSYW5nZS5lbmRDb2x1bW5dKV0pfXJldHVybntpZGVudGljYWw6dSxxdWl0RWFybHk6by5oaXRUaW1lb3V0LGNoYW5nZXM6aChvLmNoYW5nZXMpLG1vdmVzOm8ubW92ZXMubWFwKGM9PltjLmxpbmVSYW5nZU1hcHBpbmcub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLGMubGluZVJhbmdlTWFwcGluZy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGMubGluZVJhbmdlTWFwcGluZy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsYy5saW5lUmFuZ2VNYXBwaW5nLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsaChjLmNoYW5nZXMpXSl9fXN0YXRpYyBfbW9kZWxzQXJlSWRlbnRpY2FsKHQsbil7Y29uc3Qgcj10LmdldExpbmVDb3VudCgpLGk9bi5nZXRMaW5lQ291bnQoKTtpZihyIT09aSlyZXR1cm4hMTtmb3IobGV0IHM9MTtzPD1yO3MrKyl7Y29uc3QgYT10LmdldExpbmVDb250ZW50KHMpLGw9bi5nZXRMaW5lQ29udGVudChzKTtpZihhIT09bClyZXR1cm4hMX1yZXR1cm4hMH1hc3luYyAkY29tcHV0ZU1vcmVNaW5pbWFsRWRpdHModCxuLHIpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIWkpcmV0dXJuIG47Y29uc3Qgcz1bXTtsZXQgYTtuPW4uc2xpY2UoMCkuc29ydCgobyx1KT0+e2lmKG8ucmFuZ2UmJnUucmFuZ2UpcmV0dXJuIHouY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKG8ucmFuZ2UsdS5yYW5nZSk7Y29uc3QgaD1vLnJhbmdlPzA6MSxjPXUucmFuZ2U/MDoxO3JldHVybiBoLWN9KTtsZXQgbD0wO2ZvcihsZXQgbz0xO288bi5sZW5ndGg7bysrKXouZ2V0RW5kUG9zaXRpb24obltsXS5yYW5nZSkuZXF1YWxzKHouZ2V0U3RhcnRQb3NpdGlvbihuW29dLnJhbmdlKSk/KG5bbF0ucmFuZ2U9ei5mcm9tUG9zaXRpb25zKHouZ2V0U3RhcnRQb3NpdGlvbihuW2xdLnJhbmdlKSx6LmdldEVuZFBvc2l0aW9uKG5bb10ucmFuZ2UpKSxuW2xdLnRleHQrPW5bb10udGV4dCk6KGwrKyxuW2xdPW5bb10pO24ubGVuZ3RoPWwrMTtmb3IobGV0e3JhbmdlOm8sdGV4dDp1LGVvbDpofW9mIG4pe2lmKHR5cGVvZiBoPT0ibnVtYmVyIiYmKGE9aCksei5pc0VtcHR5KG8pJiYhdSljb250aW51ZTtjb25zdCBjPWkuZ2V0VmFsdWVJblJhbmdlKG8pO2lmKHU9dS5yZXBsYWNlKC9cclxufFxufFxyL2csaS5lb2wpLGM9PT11KWNvbnRpbnVlO2lmKE1hdGgubWF4KHUubGVuZ3RoLGMubGVuZ3RoKT5Sbi5fZGlmZkxpbWl0KXtzLnB1c2goe3JhbmdlOm8sdGV4dDp1fSk7Y29udGludWV9Y29uc3QgZD1vdShjLHUsciksbT1pLm9mZnNldEF0KHoubGlmdChvKS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBnIG9mIGQpe2NvbnN0IHA9aS5wb3NpdGlvbkF0KG0rZy5vcmlnaW5hbFN0YXJ0KSx2PWkucG9zaXRpb25BdChtK2cub3JpZ2luYWxTdGFydCtnLm9yaWdpbmFsTGVuZ3RoKSx3PXt0ZXh0OnUuc3Vic3RyKGcubW9kaWZpZWRTdGFydCxnLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnAubGluZU51bWJlcixzdGFydENvbHVtbjpwLmNvbHVtbixlbmRMaW5lTnVtYmVyOnYubGluZU51bWJlcixlbmRDb2x1bW46di5jb2x1bW59fTtpLmdldFZhbHVlSW5SYW5nZSh3LnJhbmdlKSE9PXcudGV4dCYmcy5wdXNoKHcpfX1yZXR1cm4gdHlwZW9mIGE9PSJudW1iZXIiJiZzLnB1c2goe2VvbDphLHRleHQ6IiIscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjowLHN0YXJ0Q29sdW1uOjAsZW5kTGluZU51bWJlcjowLGVuZENvbHVtbjowfX0pLHN9YXN5bmMgJGNvbXB1dGVMaW5rcyh0KXtjb25zdCBuPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBuP2h1KG4pOm51bGx9YXN5bmMgJGNvbXB1dGVEZWZhdWx0RG9jdW1lbnRDb2xvcnModCl7Y29uc3Qgbj10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gbj9fYyhuKTpudWxsfWFzeW5jICR0ZXh0dWFsU3VnZ2VzdCh0LG4scixpKXtjb25zdCBzPW5ldyB1bixhPW5ldyBSZWdFeHAocixpKSxsPW5ldyBTZXQ7ZTpmb3IoY29uc3QgbyBvZiB0KXtjb25zdCB1PXRoaXMuX2dldE1vZGVsKG8pO2lmKHUpe2Zvcihjb25zdCBoIG9mIHUud29yZHMoYSkpaWYoIShoPT09bnx8IWlzTmFOKE51bWJlcihoKSkpJiYobC5hZGQoaCksbC5zaXplPlJuLl9zdWdnZXN0aW9uc0xpbWl0KSlicmVhayBlfX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShsKSxkdXJhdGlvbjpzLmVsYXBzZWQoKX19YXN5bmMgJGNvbXB1dGVXb3JkUmFuZ2VzKHQsbixyLGkpe2NvbnN0IHM9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIXMpcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7Y29uc3QgYT1uZXcgUmVnRXhwKHIsaSksbD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgbz1uLnN0YXJ0TGluZU51bWJlcjtvPG4uZW5kTGluZU51bWJlcjtvKyspe2NvbnN0IHU9cy5nZXRMaW5lV29yZHMobyxhKTtmb3IoY29uc3QgaCBvZiB1KXtpZighaXNOYU4oTnVtYmVyKGgud29yZCkpKWNvbnRpbnVlO2xldCBjPWxbaC53b3JkXTtjfHwoYz1bXSxsW2gud29yZF09YyksYy5wdXNoKHtzdGFydExpbmVOdW1iZXI6byxzdGFydENvbHVtbjpoLnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6byxlbmRDb2x1bW46aC5lbmRDb2x1bW59KX19cmV0dXJuIGx9YXN5bmMgJG5hdmlnYXRlVmFsdWVTZXQodCxuLHIsaSxzKXtjb25zdCBhPXRoaXMuX2dldE1vZGVsKHQpO2lmKCFhKXJldHVybiBudWxsO2NvbnN0IGw9bmV3IFJlZ0V4cChpLHMpO24uc3RhcnRDb2x1bW49PT1uLmVuZENvbHVtbiYmKG49e3N0YXJ0TGluZU51bWJlcjpuLnN0YXJ0TGluZU51bWJlcixzdGFydENvbHVtbjpuLnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6bi5lbmRMaW5lTnVtYmVyLGVuZENvbHVtbjpuLmVuZENvbHVtbisxfSk7Y29uc3Qgbz1hLmdldFZhbHVlSW5SYW5nZShuKSx1PWEuZ2V0V29yZEF0UG9zaXRpb24oe2xpbmVOdW1iZXI6bi5zdGFydExpbmVOdW1iZXIsY29sdW1uOm4uc3RhcnRDb2x1bW59LGwpO2lmKCF1KXJldHVybiBudWxsO2NvbnN0IGg9YS5nZXRWYWx1ZUluUmFuZ2UodSk7cmV0dXJuIGdyLklOU1RBTkNFLm5hdmlnYXRlVmFsdWVTZXQobixvLHUsaCxyKX19O1duLl9kaWZmTGltaXQ9MWU1LFduLl9zdWdnZXN0aW9uc0xpbWl0PTFlNDtsZXQgSXI9V247Y2xhc3MgUm4gZXh0ZW5kcyBJcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCksdGhpcy5faG9zdD10LHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PW4sdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWFzeW5jICRwaW5nKCl7cmV0dXJuInBvbmcifSRsb2FkRm9yZWlnbk1vZHVsZSh0LG4scil7Y29uc3QgYT17aG9zdDpFdShyLChsLG8pPT50aGlzLl9ob3N0LiRmaHIobCxvKSksZ2V0TWlycm9yTW9kZWxzOigpPT50aGlzLl9nZXRNb2RlbHMoKX07cmV0dXJuIHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5Pyh0aGlzLl9mb3JlaWduTW9kdWxlPXRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5KGEsbiksUHJvbWlzZS5yZXNvbHZlKFdzKHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6bmV3IFByb21pc2UoKGwsbyk9Pntjb25zdCB1PWg9Pnt0aGlzLl9mb3JlaWduTW9kdWxlPWguY3JlYXRlKGEsbiksbChXcyh0aGlzLl9mb3JlaWduTW9kdWxlKSl9O2ltcG9ydChgJHtSaS5hc0Jyb3dzZXJVcmkoYCR7dH0uanNgKS50b1N0cmluZyghMCl9YCkudGhlbih1KS5jYXRjaChvKX0pfSRmbXIodCxuKXtpZighdGhpcy5fZm9yZWlnbk1vZHVsZXx8dHlwZW9mIHRoaXMuX2ZvcmVpZ25Nb2R1bGVbdF0hPSJmdW5jdGlvbiIpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrdCkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZvcmVpZ25Nb2R1bGVbdF0uYXBwbHkodGhpcy5fZm9yZWlnbk1vZHVsZSxuKSl9Y2F0Y2gocil7cmV0dXJuIFByb21pc2UucmVqZWN0KHIpfX19dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiImJihnbG9iYWxUaGlzLm1vbmFjbz1MdSgpKTtsZXQgRnI9ITE7ZnVuY3Rpb24gU2EoZSl7aWYoRnIpcmV0dXJuO0ZyPSEwO2NvbnN0IHQ9bmV3IGl1KG49PntnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKG4pfSxuPT5uZXcgUm4oTnIuZ2V0Q2hhbm5lbChuKSxlKSk7Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9bj0+e3Qub25tZXNzYWdlKG4uZGF0YSl9fWdsb2JhbFRoaXMub25tZXNzYWdlPWU9PntGcnx8U2EobnVsbCl9Oy8qIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBWZXJzaW9uOiAwLjUyLjAoZjZkYzBlYjhmY2U2N2U1N2Y2MDM2ZjQ3NjlkOTJjMTY2NmNkZjU0NikKICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvbW9uYWNvLWVkaXRvci9ibG9iL21haW4vTElDRU5TRS50eHQKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovZnVuY3Rpb24gVnIoZSx0PSExKXtjb25zdCBuPWUubGVuZ3RoO2xldCByPTAsaT0iIixzPTAsYT0xNixsPTAsbz0wLHU9MCxoPTAsYz0wO2Z1bmN0aW9uIGQoeCx5KXtsZXQgYj0wLEw9MDtmb3IoO2I8eHx8IXk7KXtsZXQgUz1lLmNoYXJDb2RlQXQocik7aWYoUz49NDgmJlM8PTU3KUw9TCoxNitTLTQ4O2Vsc2UgaWYoUz49NjUmJlM8PTcwKUw9TCoxNitTLTY1KzEwO2Vsc2UgaWYoUz49OTcmJlM8PTEwMilMPUwqMTYrUy05NysxMDtlbHNlIGJyZWFrO3IrKyxiKyt9cmV0dXJuIGI8eCYmKEw9LTEpLEx9ZnVuY3Rpb24gbSh4KXtyPXgsaT0iIixzPTAsYT0xNixjPTB9ZnVuY3Rpb24gZygpe2xldCB4PXI7aWYoZS5jaGFyQ29kZUF0KHIpPT09NDgpcisrO2Vsc2UgZm9yKHIrKztyPGUubGVuZ3RoJiZOdChlLmNoYXJDb2RlQXQocikpOylyKys7aWYocjxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KHIpPT09NDYpaWYocisrLHI8ZS5sZW5ndGgmJk50KGUuY2hhckNvZGVBdChyKSkpZm9yKHIrKztyPGUubGVuZ3RoJiZOdChlLmNoYXJDb2RlQXQocikpOylyKys7ZWxzZSByZXR1cm4gYz0zLGUuc3Vic3RyaW5nKHgscik7bGV0IHk9cjtpZihyPGUubGVuZ3RoJiYoZS5jaGFyQ29kZUF0KHIpPT09Njl8fGUuY2hhckNvZGVBdChyKT09PTEwMSkpaWYocisrLChyPGUubGVuZ3RoJiZlLmNoYXJDb2RlQXQocik9PT00M3x8ZS5jaGFyQ29kZUF0KHIpPT09NDUpJiZyKysscjxlLmxlbmd0aCYmTnQoZS5jaGFyQ29kZUF0KHIpKSl7Zm9yKHIrKztyPGUubGVuZ3RoJiZOdChlLmNoYXJDb2RlQXQocikpOylyKys7eT1yfWVsc2UgYz0zO3JldHVybiBlLnN1YnN0cmluZyh4LHkpfWZ1bmN0aW9uIHAoKXtsZXQgeD0iIix5PXI7Zm9yKDs7KXtpZihyPj1uKXt4Kz1lLnN1YnN0cmluZyh5LHIpLGM9MjticmVha31jb25zdCBiPWUuY2hhckNvZGVBdChyKTtpZihiPT09MzQpe3grPWUuc3Vic3RyaW5nKHkscikscisrO2JyZWFrfWlmKGI9PT05Mil7aWYoeCs9ZS5zdWJzdHJpbmcoeSxyKSxyKysscj49bil7Yz0yO2JyZWFrfXN3aXRjaChlLmNoYXJDb2RlQXQocisrKSl7Y2FzZSAzNDp4Kz0nIic7YnJlYWs7Y2FzZSA5Mjp4Kz0iXFwiO2JyZWFrO2Nhc2UgNDc6eCs9Ii8iO2JyZWFrO2Nhc2UgOTg6eCs9IlxiIjticmVhaztjYXNlIDEwMjp4Kz0iXGYiO2JyZWFrO2Nhc2UgMTEwOngrPWAKYDticmVhaztjYXNlIDExNDp4Kz0iXHIiO2JyZWFrO2Nhc2UgMTE2OngrPSIJIjticmVhaztjYXNlIDExNzpjb25zdCBTPWQoNCwhMCk7Uz49MD94Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFMpOmM9NDticmVhaztkZWZhdWx0OmM9NX15PXI7Y29udGludWV9aWYoYj49MCYmYjw9MzEpaWYoWHQoYikpe3grPWUuc3Vic3RyaW5nKHksciksYz0yO2JyZWFrfWVsc2UgYz02O3IrK31yZXR1cm4geH1mdW5jdGlvbiB2KCl7aWYoaT0iIixjPTAscz1yLG89bCxoPXUscj49bilyZXR1cm4gcz1uLGE9MTc7bGV0IHg9ZS5jaGFyQ29kZUF0KHIpO2lmKERyKHgpKXtkbyByKyssaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh4KSx4PWUuY2hhckNvZGVBdChyKTt3aGlsZShEcih4KSk7cmV0dXJuIGE9MTV9aWYoWHQoeCkpcmV0dXJuIHIrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHgpLHg9PT0xMyYmZS5jaGFyQ29kZUF0KHIpPT09MTAmJihyKyssaSs9YApgKSxsKyssdT1yLGE9MTQ7c3dpdGNoKHgpe2Nhc2UgMTIzOnJldHVybiByKyssYT0xO2Nhc2UgMTI1OnJldHVybiByKyssYT0yO2Nhc2UgOTE6cmV0dXJuIHIrKyxhPTM7Y2FzZSA5MzpyZXR1cm4gcisrLGE9NDtjYXNlIDU4OnJldHVybiByKyssYT02O2Nhc2UgNDQ6cmV0dXJuIHIrKyxhPTU7Y2FzZSAzNDpyZXR1cm4gcisrLGk9cCgpLGE9MTA7Y2FzZSA0Nzpjb25zdCB5PXItMTtpZihlLmNoYXJDb2RlQXQocisxKT09PTQ3KXtmb3Iocis9MjtyPG4mJiFYdChlLmNoYXJDb2RlQXQocikpOylyKys7cmV0dXJuIGk9ZS5zdWJzdHJpbmcoeSxyKSxhPTEyfWlmKGUuY2hhckNvZGVBdChyKzEpPT09NDIpe3IrPTI7Y29uc3QgYj1uLTE7bGV0IEw9ITE7Zm9yKDtyPGI7KXtjb25zdCBTPWUuY2hhckNvZGVBdChyKTtpZihTPT09NDImJmUuY2hhckNvZGVBdChyKzEpPT09NDcpe3IrPTIsTD0hMDticmVha31yKyssWHQoUykmJihTPT09MTMmJmUuY2hhckNvZGVBdChyKT09PTEwJiZyKyssbCsrLHU9cil9cmV0dXJuIEx8fChyKyssYz0xKSxpPWUuc3Vic3RyaW5nKHksciksYT0xM31yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh4KSxyKyssYT0xNjtjYXNlIDQ1OmlmKGkrPVN0cmluZy5mcm9tQ2hhckNvZGUoeCkscisrLHI9PT1ufHwhTnQoZS5jaGFyQ29kZUF0KHIpKSlyZXR1cm4gYT0xNjtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiBpKz1nKCksYT0xMTtkZWZhdWx0OmZvcig7cjxuJiZ3KHgpOylyKysseD1lLmNoYXJDb2RlQXQocik7aWYocyE9PXIpe3N3aXRjaChpPWUuc3Vic3RyaW5nKHMsciksaSl7Y2FzZSJ0cnVlIjpyZXR1cm4gYT04O2Nhc2UiZmFsc2UiOnJldHVybiBhPTk7Y2FzZSJudWxsIjpyZXR1cm4gYT03fXJldHVybiBhPTE2fXJldHVybiBpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHgpLHIrKyxhPTE2fX1mdW5jdGlvbiB3KHgpe2lmKERyKHgpfHxYdCh4KSlyZXR1cm4hMTtzd2l0Y2goeCl7Y2FzZSAxMjU6Y2FzZSA5MzpjYXNlIDEyMzpjYXNlIDkxOmNhc2UgMzQ6Y2FzZSA1ODpjYXNlIDQ0OmNhc2UgNDc6cmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gXygpe2xldCB4O2RvIHg9digpO3doaWxlKHg+PTEyJiZ4PD0xNSk7cmV0dXJuIHh9cmV0dXJue3NldFBvc2l0aW9uOm0sZ2V0UG9zaXRpb246KCk9PnIsc2Nhbjp0P186dixnZXRUb2tlbjooKT0+YSxnZXRUb2tlblZhbHVlOigpPT5pLGdldFRva2VuT2Zmc2V0OigpPT5zLGdldFRva2VuTGVuZ3RoOigpPT5yLXMsZ2V0VG9rZW5TdGFydExpbmU6KCk9Pm8sZ2V0VG9rZW5TdGFydENoYXJhY3RlcjooKT0+cy1oLGdldFRva2VuRXJyb3I6KCk9PmN9fWZ1bmN0aW9uIERyKGUpe3JldHVybiBlPT09MzJ8fGU9PT05fWZ1bmN0aW9uIFh0KGUpe3JldHVybiBlPT09MTB8fGU9PT0xM31mdW5jdGlvbiBOdChlKXtyZXR1cm4gZT49NDgmJmU8PTU3fXZhciBBYTsoZnVuY3Rpb24oZSl7ZVtlLmxpbmVGZWVkPTEwXT0ibGluZUZlZWQiLGVbZS5jYXJyaWFnZVJldHVybj0xM109ImNhcnJpYWdlUmV0dXJuIixlW2Uuc3BhY2U9MzJdPSJzcGFjZSIsZVtlLl8wPTQ4XT0iXzAiLGVbZS5fMT00OV09Il8xIixlW2UuXzI9NTBdPSJfMiIsZVtlLl8zPTUxXT0iXzMiLGVbZS5fND01Ml09Il80IixlW2UuXzU9NTNdPSJfNSIsZVtlLl82PTU0XT0iXzYiLGVbZS5fNz01NV09Il83IixlW2UuXzg9NTZdPSJfOCIsZVtlLl85PTU3XT0iXzkiLGVbZS5hPTk3XT0iYSIsZVtlLmI9OThdPSJiIixlW2UuYz05OV09ImMiLGVbZS5kPTEwMF09ImQiLGVbZS5lPTEwMV09ImUiLGVbZS5mPTEwMl09ImYiLGVbZS5nPTEwM109ImciLGVbZS5oPTEwNF09ImgiLGVbZS5pPTEwNV09ImkiLGVbZS5qPTEwNl09ImoiLGVbZS5rPTEwN109ImsiLGVbZS5sPTEwOF09ImwiLGVbZS5tPTEwOV09Im0iLGVbZS5uPTExMF09Im4iLGVbZS5vPTExMV09Im8iLGVbZS5wPTExMl09InAiLGVbZS5xPTExM109InEiLGVbZS5yPTExNF09InIiLGVbZS5zPTExNV09InMiLGVbZS50PTExNl09InQiLGVbZS51PTExN109InUiLGVbZS52PTExOF09InYiLGVbZS53PTExOV09InciLGVbZS54PTEyMF09IngiLGVbZS55PTEyMV09InkiLGVbZS56PTEyMl09InoiLGVbZS5BPTY1XT0iQSIsZVtlLkI9NjZdPSJCIixlW2UuQz02N109IkMiLGVbZS5EPTY4XT0iRCIsZVtlLkU9NjldPSJFIixlW2UuRj03MF09IkYiLGVbZS5HPTcxXT0iRyIsZVtlLkg9NzJdPSJIIixlW2UuST03M109IkkiLGVbZS5KPTc0XT0iSiIsZVtlLks9NzVdPSJLIixlW2UuTD03Nl09IkwiLGVbZS5NPTc3XT0iTSIsZVtlLk49NzhdPSJOIixlW2UuTz03OV09Ik8iLGVbZS5QPTgwXT0iUCIsZVtlLlE9ODFdPSJRIixlW2UuUj04Ml09IlIiLGVbZS5TPTgzXT0iUyIsZVtlLlQ9ODRdPSJUIixlW2UuVT04NV09IlUiLGVbZS5WPTg2XT0iViIsZVtlLlc9ODddPSJXIixlW2UuWD04OF09IlgiLGVbZS5ZPTg5XT0iWSIsZVtlLlo9OTBdPSJaIixlW2UuYXN0ZXJpc2s9NDJdPSJhc3RlcmlzayIsZVtlLmJhY2tzbGFzaD05Ml09ImJhY2tzbGFzaCIsZVtlLmNsb3NlQnJhY2U9MTI1XT0iY2xvc2VCcmFjZSIsZVtlLmNsb3NlQnJhY2tldD05M109ImNsb3NlQnJhY2tldCIsZVtlLmNvbG9uPTU4XT0iY29sb24iLGVbZS5jb21tYT00NF09ImNvbW1hIixlW2UuZG90PTQ2XT0iZG90IixlW2UuZG91YmxlUXVvdGU9MzRdPSJkb3VibGVRdW90ZSIsZVtlLm1pbnVzPTQ1XT0ibWludXMiLGVbZS5vcGVuQnJhY2U9MTIzXT0ib3BlbkJyYWNlIixlW2Uub3BlbkJyYWNrZXQ9OTFdPSJvcGVuQnJhY2tldCIsZVtlLnBsdXM9NDNdPSJwbHVzIixlW2Uuc2xhc2g9NDddPSJzbGFzaCIsZVtlLmZvcm1GZWVkPTEyXT0iZm9ybUZlZWQiLGVbZS50YWI9OV09InRhYiJ9KShBYXx8KEFhPXt9KSk7dmFyIFNlPW5ldyBBcnJheSgyMCkuZmlsbCgwKS5tYXAoKGUsdCk9PiIgIi5yZXBlYXQodCkpLFN0PTIwMCxrYT17IiAiOnsiXG4iOm5ldyBBcnJheShTdCkuZmlsbCgwKS5tYXAoKGUsdCk9PmAKYCsiICIucmVwZWF0KHQpKSwiXHIiOm5ldyBBcnJheShTdCkuZmlsbCgwKS5tYXAoKGUsdCk9PiJcciIrIiAiLnJlcGVhdCh0KSksIlxyXG4iOm5ldyBBcnJheShTdCkuZmlsbCgwKS5tYXAoKGUsdCk9PmBccgpgKyIgIi5yZXBlYXQodCkpfSwiCSI6eyJcbiI6bmV3IEFycmF5KFN0KS5maWxsKDApLm1hcCgoZSx0KT0+YApgKyIJIi5yZXBlYXQodCkpLCJcciI6bmV3IEFycmF5KFN0KS5maWxsKDApLm1hcCgoZSx0KT0+IlxyIisiCSIucmVwZWF0KHQpKSwiXHJcbiI6bmV3IEFycmF5KFN0KS5maWxsKDApLm1hcCgoZSx0KT0+YFxyCmArIgkiLnJlcGVhdCh0KSl9fSxQYz1bYApgLCJcciIsYFxyCmBdO2Z1bmN0aW9uIEljKGUsdCxuKXtsZXQgcixpLHMsYSxsO2lmKHQpe2ZvcihhPXQub2Zmc2V0LGw9YSt0Lmxlbmd0aCxzPWE7cz4wJiYhUmEoZSxzLTEpOylzLS07bGV0IGI9bDtmb3IoO2I8ZS5sZW5ndGgmJiFSYShlLGIpOyliKys7aT1lLnN1YnN0cmluZyhzLGIpLHI9RmMoaSxuKX1lbHNlIGk9ZSxyPTAscz0wLGE9MCxsPWUubGVuZ3RoO2NvbnN0IG89VmMobixlKSx1PVBjLmluY2x1ZGVzKG8pO2xldCBoPTAsYz0wLGQ7bi5pbnNlcnRTcGFjZXM/ZD1TZVtuLnRhYlNpemV8fDRdPz9BdChTZVsxXSxuLnRhYlNpemV8fDQpOmQ9IgkiO2NvbnN0IG09ZD09PSIJIj8iCSI6IiAiO2xldCBnPVZyKGksITEpLHA9ITE7ZnVuY3Rpb24gdigpe2lmKGg+MSlyZXR1cm4gQXQobyxoKStBdChkLHIrYyk7Y29uc3QgYj1kLmxlbmd0aCoocitjKTtyZXR1cm4hdXx8Yj5rYVttXVtvXS5sZW5ndGg/bytBdChkLHIrYyk6Yjw9MD9vOmthW21dW29dW2JdfWZ1bmN0aW9uIHcoKXtsZXQgYj1nLnNjYW4oKTtmb3IoaD0wO2I9PT0xNXx8Yj09PTE0OyliPT09MTQmJm4ua2VlcExpbmVzP2grPTE6Yj09PTE0JiYoaD0xKSxiPWcuc2NhbigpO3JldHVybiBwPWI9PT0xNnx8Zy5nZXRUb2tlbkVycm9yKCkhPT0wLGJ9Y29uc3QgXz1bXTtmdW5jdGlvbiB4KGIsTCxTKXshcCYmKCF0fHxMPGwmJlM+YSkmJmUuc3Vic3RyaW5nKEwsUykhPT1iJiZfLnB1c2goe29mZnNldDpMLGxlbmd0aDpTLUwsY29udGVudDpifSl9bGV0IHk9dygpO2lmKG4ua2VlcExpbmVzJiZoPjAmJngoQXQobyxoKSwwLDApLHkhPT0xNyl7bGV0IGI9Zy5nZXRUb2tlbk9mZnNldCgpK3MsTD1kLmxlbmd0aCpyPDIwJiZuLmluc2VydFNwYWNlcz9TZVtkLmxlbmd0aCpyXTpBdChkLHIpO3goTCxzLGIpfWZvcig7eSE9PTE3Oyl7bGV0IGI9Zy5nZXRUb2tlbk9mZnNldCgpK2cuZ2V0VG9rZW5MZW5ndGgoKStzLEw9dygpLFM9IiIsTT0hMTtmb3IoO2g9PT0wJiYoTD09PTEyfHxMPT09MTMpOyl7bGV0IE89Zy5nZXRUb2tlbk9mZnNldCgpK3M7eChTZVsxXSxiLE8pLGI9Zy5nZXRUb2tlbk9mZnNldCgpK2cuZ2V0VG9rZW5MZW5ndGgoKStzLE09TD09PTEyLFM9TT92KCk6IiIsTD13KCl9aWYoTD09PTIpeSE9PTEmJmMtLSxuLmtlZXBMaW5lcyYmaD4wfHwhbi5rZWVwTGluZXMmJnkhPT0xP1M9digpOm4ua2VlcExpbmVzJiYoUz1TZVsxXSk7ZWxzZSBpZihMPT09NCl5IT09MyYmYy0tLG4ua2VlcExpbmVzJiZoPjB8fCFuLmtlZXBMaW5lcyYmeSE9PTM/Uz12KCk6bi5rZWVwTGluZXMmJihTPVNlWzFdKTtlbHNle3N3aXRjaCh5KXtjYXNlIDM6Y2FzZSAxOmMrKyxuLmtlZXBMaW5lcyYmaD4wfHwhbi5rZWVwTGluZXM/Uz12KCk6Uz1TZVsxXTticmVhaztjYXNlIDU6bi5rZWVwTGluZXMmJmg+MHx8IW4ua2VlcExpbmVzP1M9digpOlM9U2VbMV07YnJlYWs7Y2FzZSAxMjpTPXYoKTticmVhaztjYXNlIDEzOmg+MD9TPXYoKTpNfHwoUz1TZVsxXSk7YnJlYWs7Y2FzZSA2Om4ua2VlcExpbmVzJiZoPjA/Uz12KCk6TXx8KFM9U2VbMV0pO2JyZWFrO2Nhc2UgMTA6bi5rZWVwTGluZXMmJmg+MD9TPXYoKTpMPT09NiYmIU0mJihTPSIiKTticmVhaztjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDExOmNhc2UgMjpjYXNlIDQ6bi5rZWVwTGluZXMmJmg+MD9TPXYoKTooTD09PTEyfHxMPT09MTMpJiYhTT9TPVNlWzFdOkwhPT01JiZMIT09MTcmJihwPSEwKTticmVhaztjYXNlIDE2OnA9ITA7YnJlYWt9aD4wJiYoTD09PTEyfHxMPT09MTMpJiYoUz12KCkpfUw9PT0xNyYmKG4ua2VlcExpbmVzJiZoPjA/Uz12KCk6Uz1uLmluc2VydEZpbmFsTmV3bGluZT9vOiIiKTtjb25zdCBGPWcuZ2V0VG9rZW5PZmZzZXQoKStzO3goUyxiLEYpLHk9TH1yZXR1cm4gX31mdW5jdGlvbiBBdChlLHQpe2xldCBuPSIiO2ZvcihsZXQgcj0wO3I8dDtyKyspbis9ZTtyZXR1cm4gbn1mdW5jdGlvbiBGYyhlLHQpe2xldCBuPTAscj0wO2NvbnN0IGk9dC50YWJTaXplfHw0O2Zvcig7bjxlLmxlbmd0aDspe2xldCBzPWUuY2hhckF0KG4pO2lmKHM9PT1TZVsxXSlyKys7ZWxzZSBpZihzPT09IgkiKXIrPWk7ZWxzZSBicmVhaztuKyt9cmV0dXJuIE1hdGguZmxvb3Ioci9pKX1mdW5jdGlvbiBWYyhlLHQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCByPXQuY2hhckF0KG4pO2lmKHI9PT0iXHIiKXJldHVybiBuKzE8dC5sZW5ndGgmJnQuY2hhckF0KG4rMSk9PT1gCmA/YFxyCmA6IlxyIjtpZihyPT09YApgKXJldHVybmAKYH1yZXR1cm4gZSYmZS5lb2x8fGAKYH1mdW5jdGlvbiBSYShlLHQpe3JldHVybmBccgpgLmluZGV4T2YoZS5jaGFyQXQodCkpIT09LTF9dmFyIEVuOyhmdW5jdGlvbihlKXtlLkRFRkFVTFQ9e2FsbG93VHJhaWxpbmdDb21tYTohMX19KShFbnx8KEVuPXt9KSk7ZnVuY3Rpb24gRGMoZSx0PVtdLG49RW4uREVGQVVMVCl7bGV0IHI9bnVsbCxpPVtdO2NvbnN0IHM9W107ZnVuY3Rpb24gYShvKXtBcnJheS5pc0FycmF5KGkpP2kucHVzaChvKTpyIT09bnVsbCYmKGlbcl09byl9cmV0dXJuICRjKGUse29uT2JqZWN0QmVnaW46KCk9Pntjb25zdCBvPXt9O2Eobykscy5wdXNoKGkpLGk9byxyPW51bGx9LG9uT2JqZWN0UHJvcGVydHk6bz0+e3I9b30sb25PYmplY3RFbmQ6KCk9PntpPXMucG9wKCl9LG9uQXJyYXlCZWdpbjooKT0+e2NvbnN0IG89W107YShvKSxzLnB1c2goaSksaT1vLHI9bnVsbH0sb25BcnJheUVuZDooKT0+e2k9cy5wb3AoKX0sb25MaXRlcmFsVmFsdWU6YSxvbkVycm9yOihvLHUsaCk9Pnt0LnB1c2goe2Vycm9yOm8sb2Zmc2V0OnUsbGVuZ3RoOmh9KX19LG4pLGlbMF19ZnVuY3Rpb24gRWEoZSl7aWYoIWUucGFyZW50fHwhZS5wYXJlbnQuY2hpbGRyZW4pcmV0dXJuW107Y29uc3QgdD1FYShlLnBhcmVudCk7aWYoZS5wYXJlbnQudHlwZT09PSJwcm9wZXJ0eSIpe2NvbnN0IG49ZS5wYXJlbnQuY2hpbGRyZW5bMF0udmFsdWU7dC5wdXNoKG4pfWVsc2UgaWYoZS5wYXJlbnQudHlwZT09PSJhcnJheSIpe2NvbnN0IG49ZS5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihlKTtuIT09LTEmJnQucHVzaChuKX1yZXR1cm4gdH1mdW5jdGlvbiBPcihlKXtzd2l0Y2goZS50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4gZS5jaGlsZHJlbi5tYXAoT3IpO2Nhc2Uib2JqZWN0Ijpjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBuIG9mIGUuY2hpbGRyZW4pe2NvbnN0IHI9bi5jaGlsZHJlblsxXTtyJiYodFtuLmNoaWxkcmVuWzBdLnZhbHVlXT1PcihyKSl9cmV0dXJuIHQ7Y2FzZSJudWxsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIGUudmFsdWU7ZGVmYXVsdDpyZXR1cm59fWZ1bmN0aW9uIE9jKGUsdCxuPSExKXtyZXR1cm4gdD49ZS5vZmZzZXQmJnQ8ZS5vZmZzZXQrZS5sZW5ndGh8fG4mJnQ9PT1lLm9mZnNldCtlLmxlbmd0aH1mdW5jdGlvbiBNYShlLHQsbj0hMSl7aWYoT2MoZSx0LG4pKXtjb25zdCByPWUuY2hpbGRyZW47aWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IGk9MDtpPHIubGVuZ3RoJiZyW2ldLm9mZnNldDw9dDtpKyspe2NvbnN0IHM9TWEocltpXSx0LG4pO2lmKHMpcmV0dXJuIHN9cmV0dXJuIGV9fWZ1bmN0aW9uICRjKGUsdCxuPUVuLkRFRkFVTFQpe2NvbnN0IHI9VnIoZSwhMSksaT1bXTtmdW5jdGlvbiBzKE4pe3JldHVybiBOPygpPT5OKHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKTooKT0+ITB9ZnVuY3Rpb24gYShOKXtyZXR1cm4gTj8oKT0+TihyLmdldFRva2VuT2Zmc2V0KCksci5nZXRUb2tlbkxlbmd0aCgpLHIuZ2V0VG9rZW5TdGFydExpbmUoKSxyLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSwoKT0+aS5zbGljZSgpKTooKT0+ITB9ZnVuY3Rpb24gbChOKXtyZXR1cm4gTj9rPT5OKGssci5nZXRUb2tlbk9mZnNldCgpLHIuZ2V0VG9rZW5MZW5ndGgoKSxyLmdldFRva2VuU3RhcnRMaW5lKCksci5nZXRUb2tlblN0YXJ0Q2hhcmFjdGVyKCkpOigpPT4hMH1mdW5jdGlvbiBvKE4pe3JldHVybiBOP2s9Pk4oayxyLmdldFRva2VuT2Zmc2V0KCksci5nZXRUb2tlbkxlbmd0aCgpLHIuZ2V0VG9rZW5TdGFydExpbmUoKSxyLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSwoKT0+aS5zbGljZSgpKTooKT0+ITB9Y29uc3QgdT1hKHQub25PYmplY3RCZWdpbiksaD1vKHQub25PYmplY3RQcm9wZXJ0eSksYz1zKHQub25PYmplY3RFbmQpLGQ9YSh0Lm9uQXJyYXlCZWdpbiksbT1zKHQub25BcnJheUVuZCksZz1vKHQub25MaXRlcmFsVmFsdWUpLHA9bCh0Lm9uU2VwYXJhdG9yKSx2PXModC5vbkNvbW1lbnQpLHc9bCh0Lm9uRXJyb3IpLF89biYmbi5kaXNhbGxvd0NvbW1lbnRzLHg9biYmbi5hbGxvd1RyYWlsaW5nQ29tbWE7ZnVuY3Rpb24geSgpe2Zvcig7Oyl7Y29uc3QgTj1yLnNjYW4oKTtzd2l0Y2goci5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDpiKDE0KTticmVhaztjYXNlIDU6YigxNSk7YnJlYWs7Y2FzZSAzOmIoMTMpO2JyZWFrO2Nhc2UgMTpffHxiKDExKTticmVhaztjYXNlIDI6YigxMik7YnJlYWs7Y2FzZSA2OmIoMTYpO2JyZWFrfXN3aXRjaChOKXtjYXNlIDEyOmNhc2UgMTM6Xz9iKDEwKTp2KCk7YnJlYWs7Y2FzZSAxNjpiKDEpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNDpicmVhaztkZWZhdWx0OnJldHVybiBOfX19ZnVuY3Rpb24gYihOLGs9W10sUj1bXSl7aWYodyhOKSxrLmxlbmd0aCtSLmxlbmd0aD4wKXtsZXQgST1yLmdldFRva2VuKCk7Zm9yKDtJIT09MTc7KXtpZihrLmluZGV4T2YoSSkhPT0tMSl7eSgpO2JyZWFrfWVsc2UgaWYoUi5pbmRleE9mKEkpIT09LTEpYnJlYWs7ST15KCl9fX1mdW5jdGlvbiBMKE4pe2NvbnN0IGs9ci5nZXRUb2tlblZhbHVlKCk7cmV0dXJuIE4/ZyhrKTooaChrKSxpLnB1c2goaykpLHkoKSwhMH1mdW5jdGlvbiBTKCl7c3dpdGNoKHIuZ2V0VG9rZW4oKSl7Y2FzZSAxMTpjb25zdCBOPXIuZ2V0VG9rZW5WYWx1ZSgpO2xldCBrPU51bWJlcihOKTtpc05hTihrKSYmKGIoMiksaz0wKSxnKGspO2JyZWFrO2Nhc2UgNzpnKG51bGwpO2JyZWFrO2Nhc2UgODpnKCEwKTticmVhaztjYXNlIDk6ZyghMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4geSgpLCEwfWZ1bmN0aW9uIE0oKXtyZXR1cm4gci5nZXRUb2tlbigpIT09MTA/KGIoMyxbXSxbMiw1XSksITEpOihMKCExKSxyLmdldFRva2VuKCk9PT02PyhwKCI6IikseSgpLEMoKXx8Yig0LFtdLFsyLDVdKSk6Yig1LFtdLFsyLDVdKSxpLnBvcCgpLCEwKX1mdW5jdGlvbiBGKCl7dSgpLHkoKTtsZXQgTj0hMTtmb3IoO3IuZ2V0VG9rZW4oKSE9PTImJnIuZ2V0VG9rZW4oKSE9PTE3Oyl7aWYoci5nZXRUb2tlbigpPT09NSl7aWYoTnx8Yig0LFtdLFtdKSxwKCIsIikseSgpLHIuZ2V0VG9rZW4oKT09PTImJngpYnJlYWt9ZWxzZSBOJiZiKDYsW10sW10pO00oKXx8Yig0LFtdLFsyLDVdKSxOPSEwfXJldHVybiBjKCksci5nZXRUb2tlbigpIT09Mj9iKDcsWzJdLFtdKTp5KCksITB9ZnVuY3Rpb24gTygpe2QoKSx5KCk7bGV0IE49ITAsaz0hMTtmb3IoO3IuZ2V0VG9rZW4oKSE9PTQmJnIuZ2V0VG9rZW4oKSE9PTE3Oyl7aWYoci5nZXRUb2tlbigpPT09NSl7aWYoa3x8Yig0LFtdLFtdKSxwKCIsIikseSgpLHIuZ2V0VG9rZW4oKT09PTQmJngpYnJlYWt9ZWxzZSBrJiZiKDYsW10sW10pO04/KGkucHVzaCgwKSxOPSExKTppW2kubGVuZ3RoLTFdKyssQygpfHxiKDQsW10sWzQsNV0pLGs9ITB9cmV0dXJuIG0oKSxOfHxpLnBvcCgpLHIuZ2V0VG9rZW4oKSE9PTQ/Yig4LFs0XSxbXSk6eSgpLCEwfWZ1bmN0aW9uIEMoKXtzd2l0Y2goci5nZXRUb2tlbigpKXtjYXNlIDM6cmV0dXJuIE8oKTtjYXNlIDE6cmV0dXJuIEYoKTtjYXNlIDEwOnJldHVybiBMKCEwKTtkZWZhdWx0OnJldHVybiBTKCl9fXJldHVybiB5KCksci5nZXRUb2tlbigpPT09MTc/bi5hbGxvd0VtcHR5Q29udGVudD8hMDooYig0LFtdLFtdKSwhMSk6QygpPyhyLmdldFRva2VuKCkhPT0xNyYmYig5LFtdLFtdKSwhMCk6KGIoNCxbXSxbXSksITEpfXZhciBhdD1WcixDYTsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5VbmV4cGVjdGVkRW5kT2ZDb21tZW50PTFdPSJVbmV4cGVjdGVkRW5kT2ZDb21tZW50IixlW2UuVW5leHBlY3RlZEVuZE9mU3RyaW5nPTJdPSJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLGVbZS5VbmV4cGVjdGVkRW5kT2ZOdW1iZXI9M109IlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsZVtlLkludmFsaWRVbmljb2RlPTRdPSJJbnZhbGlkVW5pY29kZSIsZVtlLkludmFsaWRFc2NhcGVDaGFyYWN0ZXI9NV09IkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLGVbZS5JbnZhbGlkQ2hhcmFjdGVyPTZdPSJJbnZhbGlkQ2hhcmFjdGVyIn0pKENhfHwoQ2E9e30pKTt2YXIgVGE7KGZ1bmN0aW9uKGUpe2VbZS5PcGVuQnJhY2VUb2tlbj0xXT0iT3BlbkJyYWNlVG9rZW4iLGVbZS5DbG9zZUJyYWNlVG9rZW49Ml09IkNsb3NlQnJhY2VUb2tlbiIsZVtlLk9wZW5CcmFja2V0VG9rZW49M109Ik9wZW5CcmFja2V0VG9rZW4iLGVbZS5DbG9zZUJyYWNrZXRUb2tlbj00XT0iQ2xvc2VCcmFja2V0VG9rZW4iLGVbZS5Db21tYVRva2VuPTVdPSJDb21tYVRva2VuIixlW2UuQ29sb25Ub2tlbj02XT0iQ29sb25Ub2tlbiIsZVtlLk51bGxLZXl3b3JkPTddPSJOdWxsS2V5d29yZCIsZVtlLlRydWVLZXl3b3JkPThdPSJUcnVlS2V5d29yZCIsZVtlLkZhbHNlS2V5d29yZD05XT0iRmFsc2VLZXl3b3JkIixlW2UuU3RyaW5nTGl0ZXJhbD0xMF09IlN0cmluZ0xpdGVyYWwiLGVbZS5OdW1lcmljTGl0ZXJhbD0xMV09Ik51bWVyaWNMaXRlcmFsIixlW2UuTGluZUNvbW1lbnRUcml2aWE9MTJdPSJMaW5lQ29tbWVudFRyaXZpYSIsZVtlLkJsb2NrQ29tbWVudFRyaXZpYT0xM109IkJsb2NrQ29tbWVudFRyaXZpYSIsZVtlLkxpbmVCcmVha1RyaXZpYT0xNF09IkxpbmVCcmVha1RyaXZpYSIsZVtlLlRyaXZpYT0xNV09IlRyaXZpYSIsZVtlLlVua25vd249MTZdPSJVbmtub3duIixlW2UuRU9GPTE3XT0iRU9GIn0pKFRhfHwoVGE9e30pKTt2YXIgVWM9RGMsQmM9TWEscWM9RWEsamM9T3IsUGE7KGZ1bmN0aW9uKGUpe2VbZS5JbnZhbGlkU3ltYm9sPTFdPSJJbnZhbGlkU3ltYm9sIixlW2UuSW52YWxpZE51bWJlckZvcm1hdD0yXT0iSW52YWxpZE51bWJlckZvcm1hdCIsZVtlLlByb3BlcnR5TmFtZUV4cGVjdGVkPTNdPSJQcm9wZXJ0eU5hbWVFeHBlY3RlZCIsZVtlLlZhbHVlRXhwZWN0ZWQ9NF09IlZhbHVlRXhwZWN0ZWQiLGVbZS5Db2xvbkV4cGVjdGVkPTVdPSJDb2xvbkV4cGVjdGVkIixlW2UuQ29tbWFFeHBlY3RlZD02XT0iQ29tbWFFeHBlY3RlZCIsZVtlLkNsb3NlQnJhY2VFeHBlY3RlZD03XT0iQ2xvc2VCcmFjZUV4cGVjdGVkIixlW2UuQ2xvc2VCcmFja2V0RXhwZWN0ZWQ9OF09IkNsb3NlQnJhY2tldEV4cGVjdGVkIixlW2UuRW5kT2ZGaWxlRXhwZWN0ZWQ9OV09IkVuZE9mRmlsZUV4cGVjdGVkIixlW2UuSW52YWxpZENvbW1lbnRUb2tlbj0xMF09IkludmFsaWRDb21tZW50VG9rZW4iLGVbZS5VbmV4cGVjdGVkRW5kT2ZDb21tZW50PTExXT0iVW5leHBlY3RlZEVuZE9mQ29tbWVudCIsZVtlLlVuZXhwZWN0ZWRFbmRPZlN0cmluZz0xMl09IlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIsZVtlLlVuZXhwZWN0ZWRFbmRPZk51bWJlcj0xM109IlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsZVtlLkludmFsaWRVbmljb2RlPTE0XT0iSW52YWxpZFVuaWNvZGUiLGVbZS5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyPTE1XT0iSW52YWxpZEVzY2FwZUNoYXJhY3RlciIsZVtlLkludmFsaWRDaGFyYWN0ZXI9MTZdPSJJbnZhbGlkQ2hhcmFjdGVyIn0pKFBhfHwoUGE9e30pKTtmdW5jdGlvbiBXYyhlLHQsbil7cmV0dXJuIEljKGUsdCxuKX1mdW5jdGlvbiBrdChlLHQpe2lmKGU9PT10KXJldHVybiEwO2lmKGU9PW51bGx8fHQ9PT1udWxsfHx0PT09dm9pZCAwfHx0eXBlb2YgZSE9dHlwZW9mIHR8fHR5cGVvZiBlIT0ib2JqZWN0Inx8QXJyYXkuaXNBcnJheShlKSE9PUFycmF5LmlzQXJyYXkodCkpcmV0dXJuITE7bGV0IG4scjtpZihBcnJheS5pc0FycmF5KGUpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYoIWt0KGVbbl0sdFtuXSkpcmV0dXJuITF9ZWxzZXtjb25zdCBpPVtdO2ZvcihyIGluIGUpaS5wdXNoKHIpO2kuc29ydCgpO2NvbnN0IHM9W107Zm9yKHIgaW4gdClzLnB1c2gocik7aWYocy5zb3J0KCksIWt0KGkscykpcmV0dXJuITE7Zm9yKG49MDtuPGkubGVuZ3RoO24rKylpZigha3QoZVtpW25dXSx0W2lbbl1dKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBmZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJudW1iZXIifWZ1bmN0aW9uIFJlKGUpe3JldHVybiB0eXBlb2YgZTwidSJ9ZnVuY3Rpb24gRmUoZSl7cmV0dXJuIHR5cGVvZiBlPT0iYm9vbGVhbiJ9ZnVuY3Rpb24gSWEoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIn1mdW5jdGlvbiBldChlKXtyZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbCYmIUFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gSGMoZSx0KXtpZihlLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZihlW25dIT09dFtuXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBRdChlLHQpe2NvbnN0IG49ZS5sZW5ndGgtdC5sZW5ndGg7cmV0dXJuIG4+MD9lLmxhc3RJbmRleE9mKHQpPT09bjpuPT09MD9lPT09dDohMX1mdW5jdGlvbiBNbihlKXtsZXQgdD0iIjtIYyhlLCIoP2kpIikmJihlPWUuc3Vic3RyaW5nKDQpLHQ9ImkiKTt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoZSx0KyJ1Iil9Y2F0Y2h7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCl9Y2F0Y2h7cmV0dXJufX19ZnVuY3Rpb24gRmEoZSl7bGV0IHQ9MDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7dCsrO2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4pOzU1Mjk2PD1yJiZyPD01NjMxOSYmbisrfXJldHVybiB0fXZhciBWYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmcifWUuaXM9dH0pKFZhfHwoVmE9e30pKTt2YXIgJHI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJuIHR5cGVvZiBuPT0ic3RyaW5nIn1lLmlzPXR9KSgkcnx8KCRyPXt9KSk7dmFyIERhOyhmdW5jdGlvbihlKXtlLk1JTl9WQUxVRT0tMjE0NzQ4MzY0OCxlLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIHQobil7cmV0dXJuIHR5cGVvZiBuPT0ibnVtYmVyIiYmZS5NSU5fVkFMVUU8PW4mJm48PWUuTUFYX1ZBTFVFfWUuaXM9dH0pKERhfHwoRGE9e30pKTt2YXIgQ247KGZ1bmN0aW9uKGUpe2UuTUlOX1ZBTFVFPTAsZS5NQVhfVkFMVUU9MjE0NzQ4MzY0NztmdW5jdGlvbiB0KG4pe3JldHVybiB0eXBlb2Ygbj09Im51bWJlciImJmUuTUlOX1ZBTFVFPD1uJiZuPD1lLk1BWF9WQUxVRX1lLmlzPXR9KShDbnx8KENuPXt9KSk7dmFyIFo7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm4gcj09PU51bWJlci5NQVhfVkFMVUUmJihyPUNuLk1BWF9WQUxVRSksaT09PU51bWJlci5NQVhfVkFMVUUmJihpPUNuLk1BWF9WQUxVRSkse2xpbmU6cixjaGFyYWN0ZXI6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIEEub2JqZWN0TGl0ZXJhbChpKSYmQS51aW50ZWdlcihpLmxpbmUpJiZBLnVpbnRlZ2VyKGkuY2hhcmFjdGVyKX1lLmlzPW59KShafHwoWj17fSkpO3ZhciBxOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzLGEpe2lmKEEudWludGVnZXIocikmJkEudWludGVnZXIoaSkmJkEudWludGVnZXIocykmJkEudWludGVnZXIoYSkpcmV0dXJue3N0YXJ0OlouY3JlYXRlKHIsaSksZW5kOlouY3JlYXRlKHMsYSl9O2lmKFouaXMocikmJlouaXMoaSkpcmV0dXJue3N0YXJ0OnIsZW5kOml9O3Rocm93IG5ldyBFcnJvcihgUmFuZ2UjY3JlYXRlIGNhbGxlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzWyR7cn0sICR7aX0sICR7c30sICR7YX1dYCl9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIEEub2JqZWN0TGl0ZXJhbChpKSYmWi5pcyhpLnN0YXJ0KSYmWi5pcyhpLmVuZCl9ZS5pcz1ufSkocXx8KHE9e30pKTt2YXIgUnQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57dXJpOnIscmFuZ2U6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIEEub2JqZWN0TGl0ZXJhbChpKSYmcS5pcyhpLnJhbmdlKSYmKEEuc3RyaW5nKGkudXJpKXx8QS51bmRlZmluZWQoaS51cmkpKX1lLmlzPW59KShSdHx8KFJ0PXt9KSk7dmFyIE9hOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzLGEpe3JldHVybnt0YXJnZXRVcmk6cix0YXJnZXRSYW5nZTppLHRhcmdldFNlbGVjdGlvblJhbmdlOnMsb3JpZ2luU2VsZWN0aW9uUmFuZ2U6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIEEub2JqZWN0TGl0ZXJhbChpKSYmcS5pcyhpLnRhcmdldFJhbmdlKSYmQS5zdHJpbmcoaS50YXJnZXRVcmkpJiZxLmlzKGkudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpJiYocS5pcyhpLm9yaWdpblNlbGVjdGlvblJhbmdlKXx8QS51bmRlZmluZWQoaS5vcmlnaW5TZWxlY3Rpb25SYW5nZSkpfWUuaXM9bn0pKE9hfHwoT2E9e30pKTt2YXIgVXI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSl7cmV0dXJue3JlZDpyLGdyZWVuOmksYmx1ZTpzLGFscGhhOmF9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtjb25zdCBpPXI7cmV0dXJuIEEub2JqZWN0TGl0ZXJhbChpKSYmQS5udW1iZXJSYW5nZShpLnJlZCwwLDEpJiZBLm51bWJlclJhbmdlKGkuZ3JlZW4sMCwxKSYmQS5udW1iZXJSYW5nZShpLmJsdWUsMCwxKSYmQS5udW1iZXJSYW5nZShpLmFscGhhLDAsMSl9ZS5pcz1ufSkoVXJ8fChVcj17fSkpO3ZhciAkYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybntyYW5nZTpyLGNvbG9yOml9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtjb25zdCBpPXI7cmV0dXJuIEEub2JqZWN0TGl0ZXJhbChpKSYmcS5pcyhpLnJhbmdlKSYmVXIuaXMoaS5jb2xvcil9ZS5pcz1ufSkoJGF8fCgkYT17fSkpO3ZhciBVYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7cmV0dXJue2xhYmVsOnIsdGV4dEVkaXQ6aSxhZGRpdGlvbmFsVGV4dEVkaXRzOnN9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtjb25zdCBpPXI7cmV0dXJuIEEub2JqZWN0TGl0ZXJhbChpKSYmQS5zdHJpbmcoaS5sYWJlbCkmJihBLnVuZGVmaW5lZChpLnRleHRFZGl0KXx8VmUuaXMoaSkpJiYoQS51bmRlZmluZWQoaS5hZGRpdGlvbmFsVGV4dEVkaXRzKXx8QS50eXBlZEFycmF5KGkuYWRkaXRpb25hbFRleHRFZGl0cyxWZS5pcykpfWUuaXM9bn0pKFVhfHwoVWE9e30pKTt2YXIgWXQ7KGZ1bmN0aW9uKGUpe2UuQ29tbWVudD0iY29tbWVudCIsZS5JbXBvcnRzPSJpbXBvcnRzIixlLlJlZ2lvbj0icmVnaW9uIn0pKFl0fHwoWXQ9e30pKTt2YXIgQmE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSxsLG8pe2NvbnN0IHU9e3N0YXJ0TGluZTpyLGVuZExpbmU6aX07cmV0dXJuIEEuZGVmaW5lZChzKSYmKHUuc3RhcnRDaGFyYWN0ZXI9cyksQS5kZWZpbmVkKGEpJiYodS5lbmRDaGFyYWN0ZXI9YSksQS5kZWZpbmVkKGwpJiYodS5raW5kPWwpLEEuZGVmaW5lZChvKSYmKHUuY29sbGFwc2VkVGV4dD1vKSx1fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtjb25zdCBpPXI7cmV0dXJuIEEub2JqZWN0TGl0ZXJhbChpKSYmQS51aW50ZWdlcihpLnN0YXJ0TGluZSkmJkEudWludGVnZXIoaS5zdGFydExpbmUpJiYoQS51bmRlZmluZWQoaS5zdGFydENoYXJhY3Rlcil8fEEudWludGVnZXIoaS5zdGFydENoYXJhY3RlcikpJiYoQS51bmRlZmluZWQoaS5lbmRDaGFyYWN0ZXIpfHxBLnVpbnRlZ2VyKGkuZW5kQ2hhcmFjdGVyKSkmJihBLnVuZGVmaW5lZChpLmtpbmQpfHxBLnN0cmluZyhpLmtpbmQpKX1lLmlzPW59KShCYXx8KEJhPXt9KSk7dmFyIEJyOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSl7cmV0dXJue2xvY2F0aW9uOnIsbWVzc2FnZTppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gQS5kZWZpbmVkKGkpJiZSdC5pcyhpLmxvY2F0aW9uKSYmQS5zdHJpbmcoaS5tZXNzYWdlKX1lLmlzPW59KShCcnx8KEJyPXt9KSk7dmFyIHhlOyhmdW5jdGlvbihlKXtlLkVycm9yPTEsZS5XYXJuaW5nPTIsZS5JbmZvcm1hdGlvbj0zLGUuSGludD00fSkoeGV8fCh4ZT17fSkpO3ZhciBxYTsoZnVuY3Rpb24oZSl7ZS5Vbm5lY2Vzc2FyeT0xLGUuRGVwcmVjYXRlZD0yfSkocWF8fChxYT17fSkpO3ZhciBqYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtjb25zdCByPW47cmV0dXJuIEEub2JqZWN0TGl0ZXJhbChyKSYmQS5zdHJpbmcoci5ocmVmKX1lLmlzPXR9KShqYXx8KGphPXt9KSk7dmFyIHplOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzLGEsbCxvKXtsZXQgdT17cmFuZ2U6cixtZXNzYWdlOml9O3JldHVybiBBLmRlZmluZWQocykmJih1LnNldmVyaXR5PXMpLEEuZGVmaW5lZChhKSYmKHUuY29kZT1hKSxBLmRlZmluZWQobCkmJih1LnNvdXJjZT1sKSxBLmRlZmluZWQobykmJih1LnJlbGF0ZWRJbmZvcm1hdGlvbj1vKSx1fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaTtsZXQgcz1yO3JldHVybiBBLmRlZmluZWQocykmJnEuaXMocy5yYW5nZSkmJkEuc3RyaW5nKHMubWVzc2FnZSkmJihBLm51bWJlcihzLnNldmVyaXR5KXx8QS51bmRlZmluZWQocy5zZXZlcml0eSkpJiYoQS5pbnRlZ2VyKHMuY29kZSl8fEEuc3RyaW5nKHMuY29kZSl8fEEudW5kZWZpbmVkKHMuY29kZSkpJiYoQS51bmRlZmluZWQocy5jb2RlRGVzY3JpcHRpb24pfHxBLnN0cmluZygoaT1zLmNvZGVEZXNjcmlwdGlvbik9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLmhyZWYpKSYmKEEuc3RyaW5nKHMuc291cmNlKXx8QS51bmRlZmluZWQocy5zb3VyY2UpKSYmKEEudW5kZWZpbmVkKHMucmVsYXRlZEluZm9ybWF0aW9uKXx8QS50eXBlZEFycmF5KHMucmVsYXRlZEluZm9ybWF0aW9uLEJyLmlzKSl9ZS5pcz1ufSkoemV8fCh6ZT17fSkpO3ZhciBFdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGksLi4ucyl7bGV0IGE9e3RpdGxlOnIsY29tbWFuZDppfTtyZXR1cm4gQS5kZWZpbmVkKHMpJiZzLmxlbmd0aD4wJiYoYS5hcmd1bWVudHM9cyksYX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gQS5kZWZpbmVkKGkpJiZBLnN0cmluZyhpLnRpdGxlKSYmQS5zdHJpbmcoaS5jb21tYW5kKX1lLmlzPW59KShFdHx8KEV0PXt9KSk7dmFyIFZlOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHMsYSl7cmV0dXJue3JhbmdlOnMsbmV3VGV4dDphfX1lLnJlcGxhY2U9dDtmdW5jdGlvbiBuKHMsYSl7cmV0dXJue3JhbmdlOntzdGFydDpzLGVuZDpzfSxuZXdUZXh0OmF9fWUuaW5zZXJ0PW47ZnVuY3Rpb24gcihzKXtyZXR1cm57cmFuZ2U6cyxuZXdUZXh0OiIifX1lLmRlbD1yO2Z1bmN0aW9uIGkocyl7Y29uc3QgYT1zO3JldHVybiBBLm9iamVjdExpdGVyYWwoYSkmJkEuc3RyaW5nKGEubmV3VGV4dCkmJnEuaXMoYS5yYW5nZSl9ZS5pcz1pfSkoVmV8fChWZT17fSkpO3ZhciBxcjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7Y29uc3QgYT17bGFiZWw6cn07cmV0dXJuIGkhPT12b2lkIDAmJihhLm5lZWRzQ29uZmlybWF0aW9uPWkpLHMhPT12b2lkIDAmJihhLmRlc2NyaXB0aW9uPXMpLGF9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gQS5vYmplY3RMaXRlcmFsKGkpJiZBLnN0cmluZyhpLmxhYmVsKSYmKEEuYm9vbGVhbihpLm5lZWRzQ29uZmlybWF0aW9uKXx8aS5uZWVkc0NvbmZpcm1hdGlvbj09PXZvaWQgMCkmJihBLnN0cmluZyhpLmRlc2NyaXB0aW9uKXx8aS5kZXNjcmlwdGlvbj09PXZvaWQgMCl9ZS5pcz1ufSkocXJ8fChxcj17fSkpO3ZhciBNdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtjb25zdCByPW47cmV0dXJuIEEuc3RyaW5nKHIpfWUuaXM9dH0pKE10fHwoTXQ9e30pKTt2YXIgV2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocyxhLGwpe3JldHVybntyYW5nZTpzLG5ld1RleHQ6YSxhbm5vdGF0aW9uSWQ6bH19ZS5yZXBsYWNlPXQ7ZnVuY3Rpb24gbihzLGEsbCl7cmV0dXJue3JhbmdlOntzdGFydDpzLGVuZDpzfSxuZXdUZXh0OmEsYW5ub3RhdGlvbklkOmx9fWUuaW5zZXJ0PW47ZnVuY3Rpb24gcihzLGEpe3JldHVybntyYW5nZTpzLG5ld1RleHQ6IiIsYW5ub3RhdGlvbklkOmF9fWUuZGVsPXI7ZnVuY3Rpb24gaShzKXtjb25zdCBhPXM7cmV0dXJuIFZlLmlzKGEpJiYocXIuaXMoYS5hbm5vdGF0aW9uSWQpfHxNdC5pcyhhLmFubm90YXRpb25JZCkpfWUuaXM9aX0pKFdhfHwoV2E9e30pKTt2YXIganI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57dGV4dERvY3VtZW50OnIsZWRpdHM6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIEEuZGVmaW5lZChpKSYmSnIuaXMoaS50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KGkuZWRpdHMpfWUuaXM9bn0pKGpyfHwoanI9e30pKTt2YXIgV3I7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMpe2xldCBhPXtraW5kOiJjcmVhdGUiLHVyaTpyfTtyZXR1cm4gaSE9PXZvaWQgMCYmKGkub3ZlcndyaXRlIT09dm9pZCAwfHxpLmlnbm9yZUlmRXhpc3RzIT09dm9pZCAwKSYmKGEub3B0aW9ucz1pKSxzIT09dm9pZCAwJiYoYS5hbm5vdGF0aW9uSWQ9cyksYX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gaSYmaS5raW5kPT09ImNyZWF0ZSImJkEuc3RyaW5nKGkudXJpKSYmKGkub3B0aW9ucz09PXZvaWQgMHx8KGkub3B0aW9ucy5vdmVyd3JpdGU9PT12b2lkIDB8fEEuYm9vbGVhbihpLm9wdGlvbnMub3ZlcndyaXRlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZFeGlzdHM9PT12b2lkIDB8fEEuYm9vbGVhbihpLm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJihpLmFubm90YXRpb25JZD09PXZvaWQgMHx8TXQuaXMoaS5hbm5vdGF0aW9uSWQpKX1lLmlzPW59KShXcnx8KFdyPXt9KSk7dmFyIEhyOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzLGEpe2xldCBsPXtraW5kOiJyZW5hbWUiLG9sZFVyaTpyLG5ld1VyaTppfTtyZXR1cm4gcyE9PXZvaWQgMCYmKHMub3ZlcndyaXRlIT09dm9pZCAwfHxzLmlnbm9yZUlmRXhpc3RzIT09dm9pZCAwKSYmKGwub3B0aW9ucz1zKSxhIT09dm9pZCAwJiYobC5hbm5vdGF0aW9uSWQ9YSksbH1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gaSYmaS5raW5kPT09InJlbmFtZSImJkEuc3RyaW5nKGkub2xkVXJpKSYmQS5zdHJpbmcoaS5uZXdVcmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8QS5ib29sZWFuKGkub3B0aW9ucy5vdmVyd3JpdGUpKSYmKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cz09PXZvaWQgMHx8QS5ib29sZWFuKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKGkuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxNdC5pcyhpLmFubm90YXRpb25JZCkpfWUuaXM9bn0pKEhyfHwoSHI9e30pKTt2YXIgenI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMpe2xldCBhPXtraW5kOiJkZWxldGUiLHVyaTpyfTtyZXR1cm4gaSE9PXZvaWQgMCYmKGkucmVjdXJzaXZlIT09dm9pZCAwfHxpLmlnbm9yZUlmTm90RXhpc3RzIT09dm9pZCAwKSYmKGEub3B0aW9ucz1pKSxzIT09dm9pZCAwJiYoYS5hbm5vdGF0aW9uSWQ9cyksYX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gaSYmaS5raW5kPT09ImRlbGV0ZSImJkEuc3RyaW5nKGkudXJpKSYmKGkub3B0aW9ucz09PXZvaWQgMHx8KGkub3B0aW9ucy5yZWN1cnNpdmU9PT12b2lkIDB8fEEuYm9vbGVhbihpLm9wdGlvbnMucmVjdXJzaXZlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHM9PT12b2lkIDB8fEEuYm9vbGVhbihpLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHMpKSkmJihpLmFubm90YXRpb25JZD09PXZvaWQgMHx8TXQuaXMoaS5hbm5vdGF0aW9uSWQpKX1lLmlzPW59KSh6cnx8KHpyPXt9KSk7dmFyIEdyOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2xldCByPW47cmV0dXJuIHImJihyLmNoYW5nZXMhPT12b2lkIDB8fHIuZG9jdW1lbnRDaGFuZ2VzIT09dm9pZCAwKSYmKHIuZG9jdW1lbnRDaGFuZ2VzPT09dm9pZCAwfHxyLmRvY3VtZW50Q2hhbmdlcy5ldmVyeShpPT5BLnN0cmluZyhpLmtpbmQpP1dyLmlzKGkpfHxIci5pcyhpKXx8enIuaXMoaSk6anIuaXMoaSkpKX1lLmlzPXR9KShHcnx8KEdyPXt9KSk7dmFyIEhhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybnt1cmk6cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIEEuZGVmaW5lZChpKSYmQS5zdHJpbmcoaS51cmkpfWUuaXM9bn0pKEhhfHwoSGE9e30pKTt2YXIgemE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57dXJpOnIsdmVyc2lvbjppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gQS5kZWZpbmVkKGkpJiZBLnN0cmluZyhpLnVyaSkmJkEuaW50ZWdlcihpLnZlcnNpb24pfWUuaXM9bn0pKHphfHwoemE9e30pKTt2YXIgSnI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57dXJpOnIsdmVyc2lvbjppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gQS5kZWZpbmVkKGkpJiZBLnN0cmluZyhpLnVyaSkmJihpLnZlcnNpb249PT1udWxsfHxBLmludGVnZXIoaS52ZXJzaW9uKSl9ZS5pcz1ufSkoSnJ8fChKcj17fSkpO3ZhciBHYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyxhKXtyZXR1cm57dXJpOnIsbGFuZ3VhZ2VJZDppLHZlcnNpb246cyx0ZXh0OmF9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtsZXQgaT1yO3JldHVybiBBLmRlZmluZWQoaSkmJkEuc3RyaW5nKGkudXJpKSYmQS5zdHJpbmcoaS5sYW5ndWFnZUlkKSYmQS5pbnRlZ2VyKGkudmVyc2lvbikmJkEuc3RyaW5nKGkudGV4dCl9ZS5pcz1ufSkoR2F8fChHYT17fSkpO3ZhciBvdDsoZnVuY3Rpb24oZSl7ZS5QbGFpblRleHQ9InBsYWludGV4dCIsZS5NYXJrZG93bj0ibWFya2Rvd24iO2Z1bmN0aW9uIHQobil7Y29uc3Qgcj1uO3JldHVybiByPT09ZS5QbGFpblRleHR8fHI9PT1lLk1hcmtkb3dufWUuaXM9dH0pKG90fHwob3Q9e30pKTt2YXIgWnQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7Y29uc3Qgcj1uO3JldHVybiBBLm9iamVjdExpdGVyYWwobikmJm90LmlzKHIua2luZCkmJkEuc3RyaW5nKHIudmFsdWUpfWUuaXM9dH0pKFp0fHwoWnQ9e30pKTt2YXIgeWU7KGZ1bmN0aW9uKGUpe2UuVGV4dD0xLGUuTWV0aG9kPTIsZS5GdW5jdGlvbj0zLGUuQ29uc3RydWN0b3I9NCxlLkZpZWxkPTUsZS5WYXJpYWJsZT02LGUuQ2xhc3M9NyxlLkludGVyZmFjZT04LGUuTW9kdWxlPTksZS5Qcm9wZXJ0eT0xMCxlLlVuaXQ9MTEsZS5WYWx1ZT0xMixlLkVudW09MTMsZS5LZXl3b3JkPTE0LGUuU25pcHBldD0xNSxlLkNvbG9yPTE2LGUuRmlsZT0xNyxlLlJlZmVyZW5jZT0xOCxlLkZvbGRlcj0xOSxlLkVudW1NZW1iZXI9MjAsZS5Db25zdGFudD0yMSxlLlN0cnVjdD0yMixlLkV2ZW50PTIzLGUuT3BlcmF0b3I9MjQsZS5UeXBlUGFyYW1ldGVyPTI1fSkoeWV8fCh5ZT17fSkpO3ZhciBpZTsoZnVuY3Rpb24oZSl7ZS5QbGFpblRleHQ9MSxlLlNuaXBwZXQ9Mn0pKGllfHwoaWU9e30pKTt2YXIgSmE7KGZ1bmN0aW9uKGUpe2UuRGVwcmVjYXRlZD0xfSkoSmF8fChKYT17fSkpO3ZhciBYYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7cmV0dXJue25ld1RleHQ6cixpbnNlcnQ6aSxyZXBsYWNlOnN9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtjb25zdCBpPXI7cmV0dXJuIGkmJkEuc3RyaW5nKGkubmV3VGV4dCkmJnEuaXMoaS5pbnNlcnQpJiZxLmlzKGkucmVwbGFjZSl9ZS5pcz1ufSkoWGF8fChYYT17fSkpO3ZhciBRYTsoZnVuY3Rpb24oZSl7ZS5hc0lzPTEsZS5hZGp1c3RJbmRlbnRhdGlvbj0yfSkoUWF8fChRYT17fSkpO3ZhciBZYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtjb25zdCByPW47cmV0dXJuIHImJihBLnN0cmluZyhyLmRldGFpbCl8fHIuZGV0YWlsPT09dm9pZCAwKSYmKEEuc3RyaW5nKHIuZGVzY3JpcHRpb24pfHxyLmRlc2NyaXB0aW9uPT09dm9pZCAwKX1lLmlzPXR9KShZYXx8KFlhPXt9KSk7dmFyIFhyOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybntsYWJlbDpufX1lLmNyZWF0ZT10fSkoWHJ8fChYcj17fSkpO3ZhciBaYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLHIpe3JldHVybntpdGVtczpufHxbXSxpc0luY29tcGxldGU6ISFyfX1lLmNyZWF0ZT10fSkoWmF8fChaYT17fSkpO3ZhciBUbjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gci5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9ZS5mcm9tUGxhaW5UZXh0PXQ7ZnVuY3Rpb24gbihyKXtjb25zdCBpPXI7cmV0dXJuIEEuc3RyaW5nKGkpfHxBLm9iamVjdExpdGVyYWwoaSkmJkEuc3RyaW5nKGkubGFuZ3VhZ2UpJiZBLnN0cmluZyhpLnZhbHVlKX1lLmlzPW59KShUbnx8KFRuPXt9KSk7dmFyIEthOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2xldCByPW47cmV0dXJuISFyJiZBLm9iamVjdExpdGVyYWwocikmJihadC5pcyhyLmNvbnRlbnRzKXx8VG4uaXMoci5jb250ZW50cyl8fEEudHlwZWRBcnJheShyLmNvbnRlbnRzLFRuLmlzKSkmJihuLnJhbmdlPT09dm9pZCAwfHxxLmlzKG4ucmFuZ2UpKX1lLmlzPXR9KShLYXx8KEthPXt9KSk7dmFyIGVvOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4scil7cmV0dXJuIHI/e2xhYmVsOm4sZG9jdW1lbnRhdGlvbjpyfTp7bGFiZWw6bn19ZS5jcmVhdGU9dH0pKGVvfHwoZW89e30pKTt2YXIgdG87KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixyLC4uLmkpe2xldCBzPXtsYWJlbDpufTtyZXR1cm4gQS5kZWZpbmVkKHIpJiYocy5kb2N1bWVudGF0aW9uPXIpLEEuZGVmaW5lZChpKT9zLnBhcmFtZXRlcnM9aTpzLnBhcmFtZXRlcnM9W10sc31lLmNyZWF0ZT10fSkodG98fCh0bz17fSkpO3ZhciBubzsoZnVuY3Rpb24oZSl7ZS5UZXh0PTEsZS5SZWFkPTIsZS5Xcml0ZT0zfSkobm98fChubz17fSkpO3ZhciBybzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLHIpe2xldCBpPXtyYW5nZTpufTtyZXR1cm4gQS5udW1iZXIocikmJihpLmtpbmQ9ciksaX1lLmNyZWF0ZT10fSkocm98fChybz17fSkpO3ZhciBEZTsoZnVuY3Rpb24oZSl7ZS5GaWxlPTEsZS5Nb2R1bGU9MixlLk5hbWVzcGFjZT0zLGUuUGFja2FnZT00LGUuQ2xhc3M9NSxlLk1ldGhvZD02LGUuUHJvcGVydHk9NyxlLkZpZWxkPTgsZS5Db25zdHJ1Y3Rvcj05LGUuRW51bT0xMCxlLkludGVyZmFjZT0xMSxlLkZ1bmN0aW9uPTEyLGUuVmFyaWFibGU9MTMsZS5Db25zdGFudD0xNCxlLlN0cmluZz0xNSxlLk51bWJlcj0xNixlLkJvb2xlYW49MTcsZS5BcnJheT0xOCxlLk9iamVjdD0xOSxlLktleT0yMCxlLk51bGw9MjEsZS5FbnVtTWVtYmVyPTIyLGUuU3RydWN0PTIzLGUuRXZlbnQ9MjQsZS5PcGVyYXRvcj0yNSxlLlR5cGVQYXJhbWV0ZXI9MjZ9KShEZXx8KERlPXt9KSk7dmFyIGlvOyhmdW5jdGlvbihlKXtlLkRlcHJlY2F0ZWQ9MX0pKGlvfHwoaW89e30pKTt2YXIgc287KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixyLGkscyxhKXtsZXQgbD17bmFtZTpuLGtpbmQ6cixsb2NhdGlvbjp7dXJpOnMscmFuZ2U6aX19O3JldHVybiBhJiYobC5jb250YWluZXJOYW1lPWEpLGx9ZS5jcmVhdGU9dH0pKHNvfHwoc289e30pKTt2YXIgYW87KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixyLGkscyl7cmV0dXJuIHMhPT12b2lkIDA/e25hbWU6bixraW5kOnIsbG9jYXRpb246e3VyaTppLHJhbmdlOnN9fTp7bmFtZTpuLGtpbmQ6cixsb2NhdGlvbjp7dXJpOml9fX1lLmNyZWF0ZT10fSkoYW98fChhbz17fSkpO3ZhciBvbzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyxhLGwsbyl7bGV0IHU9e25hbWU6cixkZXRhaWw6aSxraW5kOnMscmFuZ2U6YSxzZWxlY3Rpb25SYW5nZTpsfTtyZXR1cm4gbyE9PXZvaWQgMCYmKHUuY2hpbGRyZW49byksdX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gaSYmQS5zdHJpbmcoaS5uYW1lKSYmQS5udW1iZXIoaS5raW5kKSYmcS5pcyhpLnJhbmdlKSYmcS5pcyhpLnNlbGVjdGlvblJhbmdlKSYmKGkuZGV0YWlsPT09dm9pZCAwfHxBLnN0cmluZyhpLmRldGFpbCkpJiYoaS5kZXByZWNhdGVkPT09dm9pZCAwfHxBLmJvb2xlYW4oaS5kZXByZWNhdGVkKSkmJihpLmNoaWxkcmVuPT09dm9pZCAwfHxBcnJheS5pc0FycmF5KGkuY2hpbGRyZW4pKSYmKGkudGFncz09PXZvaWQgMHx8QXJyYXkuaXNBcnJheShpLnRhZ3MpKX1lLmlzPW59KShvb3x8KG9vPXt9KSk7dmFyIGxvOyhmdW5jdGlvbihlKXtlLkVtcHR5PSIiLGUuUXVpY2tGaXg9InF1aWNrZml4IixlLlJlZmFjdG9yPSJyZWZhY3RvciIsZS5SZWZhY3RvckV4dHJhY3Q9InJlZmFjdG9yLmV4dHJhY3QiLGUuUmVmYWN0b3JJbmxpbmU9InJlZmFjdG9yLmlubGluZSIsZS5SZWZhY3RvclJld3JpdGU9InJlZmFjdG9yLnJld3JpdGUiLGUuU291cmNlPSJzb3VyY2UiLGUuU291cmNlT3JnYW5pemVJbXBvcnRzPSJzb3VyY2Uub3JnYW5pemVJbXBvcnRzIixlLlNvdXJjZUZpeEFsbD0ic291cmNlLmZpeEFsbCJ9KShsb3x8KGxvPXt9KSk7dmFyIFBuOyhmdW5jdGlvbihlKXtlLkludm9rZWQ9MSxlLkF1dG9tYXRpYz0yfSkoUG58fChQbj17fSkpO3ZhciB1bzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7bGV0IGE9e2RpYWdub3N0aWNzOnJ9O3JldHVybiBpIT1udWxsJiYoYS5vbmx5PWkpLHMhPW51bGwmJihhLnRyaWdnZXJLaW5kPXMpLGF9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIEEuZGVmaW5lZChpKSYmQS50eXBlZEFycmF5KGkuZGlhZ25vc3RpY3MsemUuaXMpJiYoaS5vbmx5PT09dm9pZCAwfHxBLnR5cGVkQXJyYXkoaS5vbmx5LEEuc3RyaW5nKSkmJihpLnRyaWdnZXJLaW5kPT09dm9pZCAwfHxpLnRyaWdnZXJLaW5kPT09UG4uSW52b2tlZHx8aS50cmlnZ2VyS2luZD09PVBuLkF1dG9tYXRpYyl9ZS5pcz1ufSkodW98fCh1bz17fSkpO3ZhciBjbzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7bGV0IGE9e3RpdGxlOnJ9LGw9ITA7cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj8obD0hMSxhLmtpbmQ9aSk6RXQuaXMoaSk/YS5jb21tYW5kPWk6YS5lZGl0PWksbCYmcyE9PXZvaWQgMCYmKGEua2luZD1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtsZXQgaT1yO3JldHVybiBpJiZBLnN0cmluZyhpLnRpdGxlKSYmKGkuZGlhZ25vc3RpY3M9PT12b2lkIDB8fEEudHlwZWRBcnJheShpLmRpYWdub3N0aWNzLHplLmlzKSkmJihpLmtpbmQ9PT12b2lkIDB8fEEuc3RyaW5nKGkua2luZCkpJiYoaS5lZGl0IT09dm9pZCAwfHxpLmNvbW1hbmQhPT12b2lkIDApJiYoaS5jb21tYW5kPT09dm9pZCAwfHxFdC5pcyhpLmNvbW1hbmQpKSYmKGkuaXNQcmVmZXJyZWQ9PT12b2lkIDB8fEEuYm9vbGVhbihpLmlzUHJlZmVycmVkKSkmJihpLmVkaXQ9PT12b2lkIDB8fEdyLmlzKGkuZWRpdCkpfWUuaXM9bn0pKGNvfHwoY289e30pKTt2YXIgZm87KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtsZXQgcz17cmFuZ2U6cn07cmV0dXJuIEEuZGVmaW5lZChpKSYmKHMuZGF0YT1pKSxzfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtsZXQgaT1yO3JldHVybiBBLmRlZmluZWQoaSkmJnEuaXMoaS5yYW5nZSkmJihBLnVuZGVmaW5lZChpLmNvbW1hbmQpfHxFdC5pcyhpLmNvbW1hbmQpKX1lLmlzPW59KShmb3x8KGZvPXt9KSk7dmFyIGhvOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSl7cmV0dXJue3RhYlNpemU6cixpbnNlcnRTcGFjZXM6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIEEuZGVmaW5lZChpKSYmQS51aW50ZWdlcihpLnRhYlNpemUpJiZBLmJvb2xlYW4oaS5pbnNlcnRTcGFjZXMpfWUuaXM9bn0pKGhvfHwoaG89e30pKTt2YXIgbW87KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMpe3JldHVybntyYW5nZTpyLHRhcmdldDppLGRhdGE6c319ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIEEuZGVmaW5lZChpKSYmcS5pcyhpLnJhbmdlKSYmKEEudW5kZWZpbmVkKGkudGFyZ2V0KXx8QS5zdHJpbmcoaS50YXJnZXQpKX1lLmlzPW59KShtb3x8KG1vPXt9KSk7dmFyIEluOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSl7cmV0dXJue3JhbmdlOnIscGFyZW50Oml9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtsZXQgaT1yO3JldHVybiBBLm9iamVjdExpdGVyYWwoaSkmJnEuaXMoaS5yYW5nZSkmJihpLnBhcmVudD09PXZvaWQgMHx8ZS5pcyhpLnBhcmVudCkpfWUuaXM9bn0pKElufHwoSW49e30pKTt2YXIgZ287KGZ1bmN0aW9uKGUpe2UubmFtZXNwYWNlPSJuYW1lc3BhY2UiLGUudHlwZT0idHlwZSIsZS5jbGFzcz0iY2xhc3MiLGUuZW51bT0iZW51bSIsZS5pbnRlcmZhY2U9ImludGVyZmFjZSIsZS5zdHJ1Y3Q9InN0cnVjdCIsZS50eXBlUGFyYW1ldGVyPSJ0eXBlUGFyYW1ldGVyIixlLnBhcmFtZXRlcj0icGFyYW1ldGVyIixlLnZhcmlhYmxlPSJ2YXJpYWJsZSIsZS5wcm9wZXJ0eT0icHJvcGVydHkiLGUuZW51bU1lbWJlcj0iZW51bU1lbWJlciIsZS5ldmVudD0iZXZlbnQiLGUuZnVuY3Rpb249ImZ1bmN0aW9uIixlLm1ldGhvZD0ibWV0aG9kIixlLm1hY3JvPSJtYWNybyIsZS5rZXl3b3JkPSJrZXl3b3JkIixlLm1vZGlmaWVyPSJtb2RpZmllciIsZS5jb21tZW50PSJjb21tZW50IixlLnN0cmluZz0ic3RyaW5nIixlLm51bWJlcj0ibnVtYmVyIixlLnJlZ2V4cD0icmVnZXhwIixlLm9wZXJhdG9yPSJvcGVyYXRvciIsZS5kZWNvcmF0b3I9ImRlY29yYXRvciJ9KShnb3x8KGdvPXt9KSk7dmFyIHBvOyhmdW5jdGlvbihlKXtlLmRlY2xhcmF0aW9uPSJkZWNsYXJhdGlvbiIsZS5kZWZpbml0aW9uPSJkZWZpbml0aW9uIixlLnJlYWRvbmx5PSJyZWFkb25seSIsZS5zdGF0aWM9InN0YXRpYyIsZS5kZXByZWNhdGVkPSJkZXByZWNhdGVkIixlLmFic3RyYWN0PSJhYnN0cmFjdCIsZS5hc3luYz0iYXN5bmMiLGUubW9kaWZpY2F0aW9uPSJtb2RpZmljYXRpb24iLGUuZG9jdW1lbnRhdGlvbj0iZG9jdW1lbnRhdGlvbiIsZS5kZWZhdWx0TGlicmFyeT0iZGVmYXVsdExpYnJhcnkifSkocG98fChwbz17fSkpO3ZhciBibzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtjb25zdCByPW47cmV0dXJuIEEub2JqZWN0TGl0ZXJhbChyKSYmKHIucmVzdWx0SWQ9PT12b2lkIDB8fHR5cGVvZiByLnJlc3VsdElkPT0ic3RyaW5nIikmJkFycmF5LmlzQXJyYXkoci5kYXRhKSYmKHIuZGF0YS5sZW5ndGg9PT0wfHx0eXBlb2Ygci5kYXRhWzBdPT0ibnVtYmVyIil9ZS5pcz10fSkoYm98fChibz17fSkpO3ZhciB2bzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybntyYW5nZTpyLHRleHQ6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gaSE9bnVsbCYmcS5pcyhpLnJhbmdlKSYmQS5zdHJpbmcoaS50ZXh0KX1lLmlzPW59KSh2b3x8KHZvPXt9KSk7dmFyIHhvOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzKXtyZXR1cm57cmFuZ2U6cix2YXJpYWJsZU5hbWU6aSxjYXNlU2Vuc2l0aXZlTG9va3VwOnN9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtjb25zdCBpPXI7cmV0dXJuIGkhPW51bGwmJnEuaXMoaS5yYW5nZSkmJkEuYm9vbGVhbihpLmNhc2VTZW5zaXRpdmVMb29rdXApJiYoQS5zdHJpbmcoaS52YXJpYWJsZU5hbWUpfHxpLnZhcmlhYmxlTmFtZT09PXZvaWQgMCl9ZS5pcz1ufSkoeG98fCh4bz17fSkpO3ZhciB5bzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybntyYW5nZTpyLGV4cHJlc3Npb246aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gaSE9bnVsbCYmcS5pcyhpLnJhbmdlKSYmKEEuc3RyaW5nKGkuZXhwcmVzc2lvbil8fGkuZXhwcmVzc2lvbj09PXZvaWQgMCl9ZS5pcz1ufSkoeW98fCh5bz17fSkpO3ZhciB3bzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybntmcmFtZUlkOnIsc3RvcHBlZExvY2F0aW9uOml9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtjb25zdCBpPXI7cmV0dXJuIEEuZGVmaW5lZChpKSYmcS5pcyhyLnN0b3BwZWRMb2NhdGlvbil9ZS5pcz1ufSkod298fCh3bz17fSkpO3ZhciBRcjsoZnVuY3Rpb24oZSl7ZS5UeXBlPTEsZS5QYXJhbWV0ZXI9MjtmdW5jdGlvbiB0KG4pe3JldHVybiBuPT09MXx8bj09PTJ9ZS5pcz10fSkoUXJ8fChRcj17fSkpO3ZhciBZcjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm57dmFsdWU6cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gQS5vYmplY3RMaXRlcmFsKGkpJiYoaS50b29sdGlwPT09dm9pZCAwfHxBLnN0cmluZyhpLnRvb2x0aXApfHxadC5pcyhpLnRvb2x0aXApKSYmKGkubG9jYXRpb249PT12b2lkIDB8fFJ0LmlzKGkubG9jYXRpb24pKSYmKGkuY29tbWFuZD09PXZvaWQgMHx8RXQuaXMoaS5jb21tYW5kKSl9ZS5pcz1ufSkoWXJ8fChZcj17fSkpO3ZhciBfbzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7Y29uc3QgYT17cG9zaXRpb246cixsYWJlbDppfTtyZXR1cm4gcyE9PXZvaWQgMCYmKGEua2luZD1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtjb25zdCBpPXI7cmV0dXJuIEEub2JqZWN0TGl0ZXJhbChpKSYmWi5pcyhpLnBvc2l0aW9uKSYmKEEuc3RyaW5nKGkubGFiZWwpfHxBLnR5cGVkQXJyYXkoaS5sYWJlbCxZci5pcykpJiYoaS5raW5kPT09dm9pZCAwfHxRci5pcyhpLmtpbmQpKSYmaS50ZXh0RWRpdHM9PT12b2lkIDB8fEEudHlwZWRBcnJheShpLnRleHRFZGl0cyxWZS5pcykmJihpLnRvb2x0aXA9PT12b2lkIDB8fEEuc3RyaW5nKGkudG9vbHRpcCl8fFp0LmlzKGkudG9vbHRpcCkpJiYoaS5wYWRkaW5nTGVmdD09PXZvaWQgMHx8QS5ib29sZWFuKGkucGFkZGluZ0xlZnQpKSYmKGkucGFkZGluZ1JpZ2h0PT09dm9pZCAwfHxBLmJvb2xlYW4oaS5wYWRkaW5nUmlnaHQpKX1lLmlzPW59KShfb3x8KF9vPXt9KSk7dmFyIExvOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybntraW5kOiJzbmlwcGV0Iix2YWx1ZTpufX1lLmNyZWF0ZVNuaXBwZXQ9dH0pKExvfHwoTG89e30pKTt2YXIgTm87KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixyLGkscyl7cmV0dXJue2luc2VydFRleHQ6bixmaWx0ZXJUZXh0OnIscmFuZ2U6aSxjb21tYW5kOnN9fWUuY3JlYXRlPXR9KShOb3x8KE5vPXt9KSk7dmFyIFNvOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybntpdGVtczpufX1lLmNyZWF0ZT10fSkoU298fChTbz17fSkpO3ZhciBBbzsoZnVuY3Rpb24oZSl7ZS5JbnZva2VkPTAsZS5BdXRvbWF0aWM9MX0pKEFvfHwoQW89e30pKTt2YXIga287KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixyKXtyZXR1cm57cmFuZ2U6bix0ZXh0OnJ9fWUuY3JlYXRlPXR9KShrb3x8KGtvPXt9KSk7dmFyIFJvOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4scil7cmV0dXJue3RyaWdnZXJLaW5kOm4sc2VsZWN0ZWRDb21wbGV0aW9uSW5mbzpyfX1lLmNyZWF0ZT10fSkoUm98fChSbz17fSkpO3ZhciBFbzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtjb25zdCByPW47cmV0dXJuIEEub2JqZWN0TGl0ZXJhbChyKSYmJHIuaXMoci51cmkpJiZBLnN0cmluZyhyLm5hbWUpfWUuaXM9dH0pKEVvfHwoRW89e30pKTt2YXIgTW87KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocyxhLGwsbyl7cmV0dXJuIG5ldyB6YyhzLGEsbCxvKX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocyl7bGV0IGE9cztyZXR1cm4hIShBLmRlZmluZWQoYSkmJkEuc3RyaW5nKGEudXJpKSYmKEEudW5kZWZpbmVkKGEubGFuZ3VhZ2VJZCl8fEEuc3RyaW5nKGEubGFuZ3VhZ2VJZCkpJiZBLnVpbnRlZ2VyKGEubGluZUNvdW50KSYmQS5mdW5jKGEuZ2V0VGV4dCkmJkEuZnVuYyhhLnBvc2l0aW9uQXQpJiZBLmZ1bmMoYS5vZmZzZXRBdCkpfWUuaXM9bjtmdW5jdGlvbiByKHMsYSl7bGV0IGw9cy5nZXRUZXh0KCksbz1pKGEsKGgsYyk9PntsZXQgZD1oLnJhbmdlLnN0YXJ0LmxpbmUtYy5yYW5nZS5zdGFydC5saW5lO3JldHVybiBkPT09MD9oLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci1jLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpkfSksdT1sLmxlbmd0aDtmb3IobGV0IGg9by5sZW5ndGgtMTtoPj0wO2gtLSl7bGV0IGM9b1toXSxkPXMub2Zmc2V0QXQoYy5yYW5nZS5zdGFydCksbT1zLm9mZnNldEF0KGMucmFuZ2UuZW5kKTtpZihtPD11KWw9bC5zdWJzdHJpbmcoMCxkKStjLm5ld1RleHQrbC5zdWJzdHJpbmcobSxsLmxlbmd0aCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTt1PWR9cmV0dXJuIGx9ZS5hcHBseUVkaXRzPXI7ZnVuY3Rpb24gaShzLGEpe2lmKHMubGVuZ3RoPD0xKXJldHVybiBzO2NvbnN0IGw9cy5sZW5ndGgvMnwwLG89cy5zbGljZSgwLGwpLHU9cy5zbGljZShsKTtpKG8sYSksaSh1LGEpO2xldCBoPTAsYz0wLGQ9MDtmb3IoO2g8by5sZW5ndGgmJmM8dS5sZW5ndGg7KWEob1toXSx1W2NdKTw9MD9zW2QrK109b1toKytdOnNbZCsrXT11W2MrK107Zm9yKDtoPG8ubGVuZ3RoOylzW2QrK109b1toKytdO2Zvcig7Yzx1Lmxlbmd0aDspc1tkKytdPXVbYysrXTtyZXR1cm4gc319KShNb3x8KE1vPXt9KSk7dmFyIHpjPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXtpZihlKXtsZXQgdD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLG49dGhpcy5vZmZzZXRBdChlLmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHQsbil9cmV0dXJuIHRoaXMuX2NvbnRlbnR9dXBkYXRlKGUsdCl7dGhpcy5fY29udGVudD1lLnRleHQsdGhpcy5fdmVyc2lvbj10LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXRMaW5lT2Zmc2V0cygpe2lmKHRoaXMuX2xpbmVPZmZzZXRzPT09dm9pZCAwKXtsZXQgZT1bXSx0PXRoaXMuX2NvbnRlbnQsbj0hMDtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7biYmKGUucHVzaChyKSxuPSExKTtsZXQgaT10LmNoYXJBdChyKTtuPWk9PT0iXHIifHxpPT09YApgLGk9PT0iXHIiJiZyKzE8dC5sZW5ndGgmJnQuY2hhckF0KHIrMSk9PT1gCmAmJnIrK31uJiZ0Lmxlbmd0aD4wJiZlLnB1c2godC5sZW5ndGgpLHRoaXMuX2xpbmVPZmZzZXRzPWV9cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTtsZXQgdD10aGlzLmdldExpbmVPZmZzZXRzKCksbj0wLHI9dC5sZW5ndGg7aWYocj09PTApcmV0dXJuIFouY3JlYXRlKDAsZSk7Zm9yKDtuPHI7KXtsZXQgcz1NYXRoLmZsb29yKChuK3IpLzIpO3Rbc10+ZT9yPXM6bj1zKzF9bGV0IGk9bi0xO3JldHVybiBaLmNyZWF0ZShpLGUtdFtpXSl9b2Zmc2V0QXQoZSl7bGV0IHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKGUubGluZT49dC5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKGUubGluZTwwKXJldHVybiAwO2xldCBuPXRbZS5saW5lXSxyPWUubGluZSsxPHQubGVuZ3RoP3RbZS5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoO3JldHVybiBNYXRoLm1heChNYXRoLm1pbihuK2UuY2hhcmFjdGVyLHIpLG4pfWdldCBsaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH19LEE7KGZ1bmN0aW9uKGUpe2NvbnN0IHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBuKG0pe3JldHVybiB0eXBlb2YgbTwidSJ9ZS5kZWZpbmVkPW47ZnVuY3Rpb24gcihtKXtyZXR1cm4gdHlwZW9mIG0+InUifWUudW5kZWZpbmVkPXI7ZnVuY3Rpb24gaShtKXtyZXR1cm4gbT09PSEwfHxtPT09ITF9ZS5ib29sZWFuPWk7ZnVuY3Rpb24gcyhtKXtyZXR1cm4gdC5jYWxsKG0pPT09IltvYmplY3QgU3RyaW5nXSJ9ZS5zdHJpbmc9cztmdW5jdGlvbiBhKG0pe3JldHVybiB0LmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIn1lLm51bWJlcj1hO2Z1bmN0aW9uIGwobSxnLHApe3JldHVybiB0LmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIiYmZzw9bSYmbTw9cH1lLm51bWJlclJhbmdlPWw7ZnVuY3Rpb24gbyhtKXtyZXR1cm4gdC5jYWxsKG0pPT09IltvYmplY3QgTnVtYmVyXSImJi0yMTQ3NDgzNjQ4PD1tJiZtPD0yMTQ3NDgzNjQ3fWUuaW50ZWdlcj1vO2Z1bmN0aW9uIHUobSl7cmV0dXJuIHQuY2FsbChtKT09PSJbb2JqZWN0IE51bWJlcl0iJiYwPD1tJiZtPD0yMTQ3NDgzNjQ3fWUudWludGVnZXI9dTtmdW5jdGlvbiBoKG0pe3JldHVybiB0LmNhbGwobSk9PT0iW29iamVjdCBGdW5jdGlvbl0ifWUuZnVuYz1oO2Z1bmN0aW9uIGMobSl7cmV0dXJuIG0hPT1udWxsJiZ0eXBlb2YgbT09Im9iamVjdCJ9ZS5vYmplY3RMaXRlcmFsPWM7ZnVuY3Rpb24gZChtLGcpe3JldHVybiBBcnJheS5pc0FycmF5KG0pJiZtLmV2ZXJ5KGcpfWUudHlwZWRBcnJheT1kfSkoQXx8KEE9e30pKTt2YXIgQ289Y2xhc3MgdWl7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy5fdXJpPXQsdGhpcy5fbGFuZ3VhZ2VJZD1uLHRoaXMuX3ZlcnNpb249cix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KHQpe2lmKHQpe2NvbnN0IG49dGhpcy5vZmZzZXRBdCh0LnN0YXJ0KSxyPXRoaXMub2Zmc2V0QXQodC5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyhuLHIpfXJldHVybiB0aGlzLl9jb250ZW50fXVwZGF0ZSh0LG4pe2ZvcihsZXQgciBvZiB0KWlmKHVpLmlzSW5jcmVtZW50YWwocikpe2NvbnN0IGk9UG8oci5yYW5nZSkscz10aGlzLm9mZnNldEF0KGkuc3RhcnQpLGE9dGhpcy5vZmZzZXRBdChpLmVuZCk7dGhpcy5fY29udGVudD10aGlzLl9jb250ZW50LnN1YnN0cmluZygwLHMpK3IudGV4dCt0aGlzLl9jb250ZW50LnN1YnN0cmluZyhhLHRoaXMuX2NvbnRlbnQubGVuZ3RoKTtjb25zdCBsPU1hdGgubWF4KGkuc3RhcnQubGluZSwwKSxvPU1hdGgubWF4KGkuZW5kLmxpbmUsMCk7bGV0IHU9dGhpcy5fbGluZU9mZnNldHM7Y29uc3QgaD1UbyhyLnRleHQsITEscyk7aWYoby1sPT09aC5sZW5ndGgpZm9yKGxldCBkPTAsbT1oLmxlbmd0aDtkPG07ZCsrKXVbZCtsKzFdPWhbZF07ZWxzZSBoLmxlbmd0aDwxZTQ/dS5zcGxpY2UobCsxLG8tbCwuLi5oKTp0aGlzLl9saW5lT2Zmc2V0cz11PXUuc2xpY2UoMCxsKzEpLmNvbmNhdChoLHUuc2xpY2UobysxKSk7Y29uc3QgYz1yLnRleHQubGVuZ3RoLShhLXMpO2lmKGMhPT0wKWZvcihsZXQgZD1sKzEraC5sZW5ndGgsbT11Lmxlbmd0aDtkPG07ZCsrKXVbZF09dVtkXStjfWVsc2UgaWYodWkuaXNGdWxsKHIpKXRoaXMuX2NvbnRlbnQ9ci50ZXh0LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMDtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaGFuZ2UgZXZlbnQgcmVjZWl2ZWQiKTt0aGlzLl92ZXJzaW9uPW59Z2V0TGluZU9mZnNldHMoKXtyZXR1cm4gdGhpcy5fbGluZU9mZnNldHM9PT12b2lkIDAmJih0aGlzLl9saW5lT2Zmc2V0cz1Ubyh0aGlzLl9jb250ZW50LCEwKSksdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdCh0KXt0PU1hdGgubWF4KE1hdGgubWluKHQsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCBuPXRoaXMuZ2V0TGluZU9mZnNldHMoKSxyPTAsaT1uLmxlbmd0aDtpZihpPT09MClyZXR1cm57bGluZTowLGNoYXJhY3Rlcjp0fTtmb3IoO3I8aTspe2xldCBhPU1hdGguZmxvb3IoKHIraSkvMik7blthXT50P2k9YTpyPWErMX1sZXQgcz1yLTE7cmV0dXJue2xpbmU6cyxjaGFyYWN0ZXI6dC1uW3NdfX1vZmZzZXRBdCh0KXtsZXQgbj10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYodC5saW5lPj1uLmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYodC5saW5lPDApcmV0dXJuIDA7bGV0IHI9blt0LmxpbmVdLGk9dC5saW5lKzE8bi5sZW5ndGg/blt0LmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHIrdC5jaGFyYWN0ZXIsaSkscil9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofXN0YXRpYyBpc0luY3JlbWVudGFsKHQpe2xldCBuPXQ7cmV0dXJuIG4hPW51bGwmJnR5cGVvZiBuLnRleHQ9PSJzdHJpbmciJiZuLnJhbmdlIT09dm9pZCAwJiYobi5yYW5nZUxlbmd0aD09PXZvaWQgMHx8dHlwZW9mIG4ucmFuZ2VMZW5ndGg9PSJudW1iZXIiKX1zdGF0aWMgaXNGdWxsKHQpe2xldCBuPXQ7cmV0dXJuIG4hPW51bGwmJnR5cGVvZiBuLnRleHQ9PSJzdHJpbmciJiZuLnJhbmdlPT09dm9pZCAwJiZuLnJhbmdlTGVuZ3RoPT09dm9pZCAwfX0sRWU7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxzLGEsbCl7cmV0dXJuIG5ldyBDbyhpLHMsYSxsKX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSxzLGEpe2lmKGkgaW5zdGFuY2VvZiBDbylyZXR1cm4gaS51cGRhdGUocyxhKSxpO3Rocm93IG5ldyBFcnJvcigiVGV4dERvY3VtZW50LnVwZGF0ZTogZG9jdW1lbnQgbXVzdCBiZSBjcmVhdGVkIGJ5IFRleHREb2N1bWVudC5jcmVhdGUiKX1lLnVwZGF0ZT1uO2Z1bmN0aW9uIHIoaSxzKXtsZXQgYT1pLmdldFRleHQoKSxsPVpyKHMubWFwKEdjKSwoaCxjKT0+e2xldCBkPWgucmFuZ2Uuc3RhcnQubGluZS1jLnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIGQ9PT0wP2gucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLWMucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOmR9KSxvPTA7Y29uc3QgdT1bXTtmb3IoY29uc3QgaCBvZiBsKXtsZXQgYz1pLm9mZnNldEF0KGgucmFuZ2Uuc3RhcnQpO2lmKGM8byl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtjPm8mJnUucHVzaChhLnN1YnN0cmluZyhvLGMpKSxoLm5ld1RleHQubGVuZ3RoJiZ1LnB1c2goaC5uZXdUZXh0KSxvPWkub2Zmc2V0QXQoaC5yYW5nZS5lbmQpfXJldHVybiB1LnB1c2goYS5zdWJzdHIobykpLHUuam9pbigiIil9ZS5hcHBseUVkaXRzPXJ9KShFZXx8KEVlPXt9KSk7ZnVuY3Rpb24gWnIoZSx0KXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCBuPWUubGVuZ3RoLzJ8MCxyPWUuc2xpY2UoMCxuKSxpPWUuc2xpY2Uobik7WnIocix0KSxacihpLHQpO2xldCBzPTAsYT0wLGw9MDtmb3IoO3M8ci5sZW5ndGgmJmE8aS5sZW5ndGg7KXQocltzXSxpW2FdKTw9MD9lW2wrK109cltzKytdOmVbbCsrXT1pW2ErK107Zm9yKDtzPHIubGVuZ3RoOyllW2wrK109cltzKytdO2Zvcig7YTxpLmxlbmd0aDspZVtsKytdPWlbYSsrXTtyZXR1cm4gZX1mdW5jdGlvbiBUbyhlLHQsbj0wKXtjb25zdCByPXQ/W25dOltdO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcz1lLmNoYXJDb2RlQXQoaSk7KHM9PT0xM3x8cz09PTEwKSYmKHM9PT0xMyYmaSsxPGUubGVuZ3RoJiZlLmNoYXJDb2RlQXQoaSsxKT09PTEwJiZpKyssci5wdXNoKG4raSsxKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gUG8oZSl7Y29uc3QgdD1lLnN0YXJ0LG49ZS5lbmQ7cmV0dXJuIHQubGluZT5uLmxpbmV8fHQubGluZT09PW4ubGluZSYmdC5jaGFyYWN0ZXI+bi5jaGFyYWN0ZXI/e3N0YXJ0Om4sZW5kOnR9OmV9ZnVuY3Rpb24gR2MoZSl7Y29uc3QgdD1QbyhlLnJhbmdlKTtyZXR1cm4gdCE9PWUucmFuZ2U/e25ld1RleHQ6ZS5uZXdUZXh0LHJhbmdlOnR9OmV9dmFyIEg7KGZ1bmN0aW9uKGUpe2VbZS5VbmRlZmluZWQ9MF09IlVuZGVmaW5lZCIsZVtlLkVudW1WYWx1ZU1pc21hdGNoPTFdPSJFbnVtVmFsdWVNaXNtYXRjaCIsZVtlLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQiLGVbZS5VbmV4cGVjdGVkRW5kT2ZDb21tZW50PTI1N109IlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLGVbZS5VbmV4cGVjdGVkRW5kT2ZTdHJpbmc9MjU4XT0iVW5leHBlY3RlZEVuZE9mU3RyaW5nIixlW2UuVW5leHBlY3RlZEVuZE9mTnVtYmVyPTI1OV09IlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsZVtlLkludmFsaWRVbmljb2RlPTI2MF09IkludmFsaWRVbmljb2RlIixlW2UuSW52YWxpZEVzY2FwZUNoYXJhY3Rlcj0yNjFdPSJJbnZhbGlkRXNjYXBlQ2hhcmFjdGVyIixlW2UuSW52YWxpZENoYXJhY3Rlcj0yNjJdPSJJbnZhbGlkQ2hhcmFjdGVyIixlW2UuUHJvcGVydHlFeHBlY3RlZD01MTNdPSJQcm9wZXJ0eUV4cGVjdGVkIixlW2UuQ29tbWFFeHBlY3RlZD01MTRdPSJDb21tYUV4cGVjdGVkIixlW2UuQ29sb25FeHBlY3RlZD01MTVdPSJDb2xvbkV4cGVjdGVkIixlW2UuVmFsdWVFeHBlY3RlZD01MTZdPSJWYWx1ZUV4cGVjdGVkIixlW2UuQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQ9NTE3XT0iQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQiLGVbZS5Db21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkPTUxOF09IkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQiLGVbZS5UcmFpbGluZ0NvbW1hPTUxOV09IlRyYWlsaW5nQ29tbWEiLGVbZS5EdXBsaWNhdGVLZXk9NTIwXT0iRHVwbGljYXRlS2V5IixlW2UuQ29tbWVudE5vdFBlcm1pdHRlZD01MjFdPSJDb21tZW50Tm90UGVybWl0dGVkIixlW2UuUHJvcGVydHlLZXlzTXVzdEJlRG91YmxlcXVvdGVkPTUyOF09IlByb3BlcnR5S2V5c011c3RCZURvdWJsZXF1b3RlZCIsZVtlLlNjaGVtYVJlc29sdmVFcnJvcj03NjhdPSJTY2hlbWFSZXNvbHZlRXJyb3IiLGVbZS5TY2hlbWFVbnN1cHBvcnRlZEZlYXR1cmU9NzY5XT0iU2NoZW1hVW5zdXBwb3J0ZWRGZWF0dXJlIn0pKEh8fChIPXt9KSk7dmFyIE1lOyhmdW5jdGlvbihlKXtlW2UudjM9M109InYzIixlW2UudjQ9NF09InY0IixlW2UudjY9Nl09InY2IixlW2Uudjc9N109InY3IixlW2UudjIwMTlfMDk9MTldPSJ2MjAxOV8wOSIsZVtlLnYyMDIwXzEyPTIwXT0idjIwMjBfMTIifSkoTWV8fChNZT17fSkpO3ZhciBLcjsoZnVuY3Rpb24oZSl7ZS5MQVRFU1Q9e3RleHREb2N1bWVudDp7Y29tcGxldGlvbjp7Y29tcGxldGlvbkl0ZW06e2RvY3VtZW50YXRpb25Gb3JtYXQ6W290Lk1hcmtkb3duLG90LlBsYWluVGV4dF0sY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnQ6ITAsbGFiZWxEZXRhaWxzU3VwcG9ydDohMH19fX19KShLcnx8KEtyPXt9KSk7ZnVuY3Rpb24gRSguLi5lKXtjb25zdCB0PWVbMF07bGV0IG4scixpO2lmKHR5cGVvZiB0PT0ic3RyaW5nIiluPXQscj10LGUuc3BsaWNlKDAsMSksaT0hZXx8dHlwZW9mIGVbMF0hPSJvYmplY3QiP2U6ZVswXTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBBcnJheSl7Y29uc3Qgcz1lLnNsaWNlKDEpO2lmKHQubGVuZ3RoIT09cy5sZW5ndGgrMSl0aHJvdyBuZXcgRXJyb3IoImV4cGVjdGVkIGEgc3RyaW5nIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBsMTBuLnQiKTtsZXQgYT10WzBdO2ZvcihsZXQgbD0xO2w8dC5sZW5ndGg7bCsrKWErPWB7JHtsLTF9fWArdFtsXTtyZXR1cm4gRShhLC4uLnMpfWVsc2Ugcj10Lm1lc3NhZ2Usbj1yLHQuY29tbWVudCYmdC5jb21tZW50Lmxlbmd0aD4wJiYobis9YC8ke0FycmF5LmlzQXJyYXkodC5jb21tZW50KT90LmNvbW1lbnQuam9pbigiIik6dC5jb21tZW50fWApLGk9dC5hcmdzPz97fTtyZXR1cm4gWGMocixpKX12YXIgSmM9L3soW159XSspfS9nO2Z1bmN0aW9uIFhjKGUsdCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmxlbmd0aD09PTA/ZTplLnJlcGxhY2UoSmMsKG4scik9PnRbcl0/P24pfXZhciBRYz17ImNvbG9yLWhleCI6e2Vycm9yTWVzc2FnZTpFKCJJbnZhbGlkIGNvbG9yIGZvcm1hdC4gVXNlICNSR0IsICNSR0JBLCAjUlJHR0JCIG9yICNSUkdHQkJBQS4iKSxwYXR0ZXJuOi9eIyhbMC05QS1GYS1mXXszLDR9fChbMC05QS1GYS1mXXsyfSl7Myw0fSkkL30sImRhdGUtdGltZSI6e2Vycm9yTWVzc2FnZTpFKCJTdHJpbmcgaXMgbm90IGEgUkZDMzMzOSBkYXRlLXRpbWUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKVQoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pOihbMC01XVswLTldfDYwKShcLlswLTldKyk/KFp8KFwrfC0pKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKSkkL2l9LGRhdGU6e2Vycm9yTWVzc2FnZTpFKCJTdHJpbmcgaXMgbm90IGEgUkZDMzMzOSBkYXRlLiIpLHBhdHRlcm46L14oXGR7NH0pLSgwWzEtOV18MVswLTJdKS0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSkkL2l9LHRpbWU6e2Vycm9yTWVzc2FnZTpFKCJTdHJpbmcgaXMgbm90IGEgUkZDMzMzOSB0aW1lLiIpLHBhdHRlcm46L14oWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pOihbMC01XVswLTldfDYwKShcLlswLTldKyk/KFp8KFwrfC0pKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKSkkL2l9LGVtYWlsOntlcnJvck1lc3NhZ2U6RSgiU3RyaW5nIGlzIG5vdCBhbiBlLW1haWwgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aMC05LV0rXC4pK1thLXpBLVpdezIsfSkpJC99LGhvc3RuYW1lOntlcnJvck1lc3NhZ2U6RSgiU3RyaW5nIGlzIG5vdCBhIGhvc3RuYW1lLiIpLHBhdHRlcm46L14oPz0uezEsMjUzfVwuPyQpW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KD86XC5bYS16MC05XSg/OlstMC05YS16XXswLDYxfVswLTlhLXpdKT8pKlwuPyQvaX0saXB2NDp7ZXJyb3JNZXNzYWdlOkUoIlN0cmluZyBpcyBub3QgYW4gSVB2NCBhZGRyZXNzLiIpLHBhdHRlcm46L14oPzooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKVwuKXszfSg/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpJC99LGlwdjY6e2Vycm9yTWVzc2FnZTpFKCJTdHJpbmcgaXMgbm90IGFuIElQdjYgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKCgoWzAtOWEtZl17MSw0fTopezd9KFswLTlhLWZdezEsNH18OikpfCgoWzAtOWEtZl17MSw0fTopezZ9KDpbMC05YS1mXXsxLDR9fCgoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05YS1mXXsxLDR9Oil7NX0oKCg6WzAtOWEtZl17MSw0fSl7MSwyfSl8OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05YS1mXXsxLDR9Oil7NH0oKCg6WzAtOWEtZl17MSw0fSl7MSwzfSl8KCg6WzAtOWEtZl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezN9KCgoOlswLTlhLWZdezEsNH0pezEsNH0pfCgoOlswLTlhLWZdezEsNH0pezAsMn06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7Mn0oKCg6WzAtOWEtZl17MSw0fSl7MSw1fSl8KCg6WzAtOWEtZl17MSw0fSl7MCwzfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXsxfSgoKDpbMC05YS1mXXsxLDR9KXsxLDZ9KXwoKDpbMC05YS1mXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCg6KCgoOlswLTlhLWZdezEsNH0pezEsN30pfCgoOlswLTlhLWZdezEsNH0pezAsNX06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSkpJC9pfX0sbHQ9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG49MCl7dGhpcy5vZmZzZXQ9dCx0aGlzLmxlbmd0aD1uLHRoaXMucGFyZW50PWV9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuW119dG9TdHJpbmcoKXtyZXR1cm4idHlwZTogIit0aGlzLnR5cGUrIiAoIit0aGlzLm9mZnNldCsiLyIrdGhpcy5sZW5ndGgrIikiKyh0aGlzLnBhcmVudD8iIHBhcmVudDogeyIrdGhpcy5wYXJlbnQudG9TdHJpbmcoKSsifSI6IiIpfX0sWWM9Y2xhc3MgZXh0ZW5kcyBsdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy50eXBlPSJudWxsIix0aGlzLnZhbHVlPW51bGx9fSxJbz1jbGFzcyBleHRlbmRzIGx0e2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLG4pLHRoaXMudHlwZT0iYm9vbGVhbiIsdGhpcy52YWx1ZT10fX0sWmM9Y2xhc3MgZXh0ZW5kcyBsdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy50eXBlPSJhcnJheSIsdGhpcy5pdGVtcz1bXX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5pdGVtc319LEtjPWNsYXNzIGV4dGVuZHMgbHR7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMudHlwZT0ibnVtYmVyIix0aGlzLmlzSW50ZWdlcj0hMCx0aGlzLnZhbHVlPU51bWJlci5OYU59fSxlaT1jbGFzcyBleHRlbmRzIGx0e2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQsbiksdGhpcy50eXBlPSJzdHJpbmciLHRoaXMudmFsdWU9IiJ9fSxlMT1jbGFzcyBleHRlbmRzIGx0e2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQpLHRoaXMudHlwZT0icHJvcGVydHkiLHRoaXMuY29sb25PZmZzZXQ9LTEsdGhpcy5rZXlOb2RlPW59Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMudmFsdWVOb2RlP1t0aGlzLmtleU5vZGUsdGhpcy52YWx1ZU5vZGVdOlt0aGlzLmtleU5vZGVdfX0sdDE9Y2xhc3MgZXh0ZW5kcyBsdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy50eXBlPSJvYmplY3QiLHRoaXMucHJvcGVydGllcz1bXX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5wcm9wZXJ0aWVzfX07ZnVuY3Rpb24gd2UoZSl7cmV0dXJuIEZlKGUpP2U/e306e25vdDp7fX06ZX12YXIgRm87KGZ1bmN0aW9uKGUpe2VbZS5LZXk9MF09IktleSIsZVtlLkVudW09MV09IkVudW0ifSkoRm98fChGbz17fSkpO3ZhciBuMT17Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDMvc2NoZW1hIyI6TWUudjMsImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI6TWUudjQsImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDYvc2NoZW1hIyI6TWUudjYsImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI6TWUudjcsImh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMTktMDkvc2NoZW1hIjpNZS52MjAxOV8wOSwiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiOk1lLnYyMDIwXzEyfSxWbz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnNjaGVtYURyYWZ0PWV9fSxyMT1jbGFzcyBab3tjb25zdHJ1Y3Rvcih0PS0xLG4pe3RoaXMuZm9jdXNPZmZzZXQ9dCx0aGlzLmV4Y2x1ZGU9bix0aGlzLnNjaGVtYXM9W119YWRkKHQpe3RoaXMuc2NoZW1hcy5wdXNoKHQpfW1lcmdlKHQpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuc2NoZW1hcyx0LnNjaGVtYXMpfWluY2x1ZGUodCl7cmV0dXJuKHRoaXMuZm9jdXNPZmZzZXQ9PT0tMXx8RG8odCx0aGlzLmZvY3VzT2Zmc2V0KSkmJnQhPT10aGlzLmV4Y2x1ZGV9bmV3U3ViKCl7cmV0dXJuIG5ldyBabygtMSx0aGlzLmV4Y2x1ZGUpfX0sS3Q9Y2xhc3N7Y29uc3RydWN0b3IoKXt9Z2V0IHNjaGVtYXMoKXtyZXR1cm5bXX1hZGQoZSl7fW1lcmdlKGUpe31pbmNsdWRlKGUpe3JldHVybiEwfW5ld1N1Yigpe3JldHVybiB0aGlzfX07S3QuaW5zdGFuY2U9bmV3IEt0O3ZhciBoZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJvYmxlbXM9W10sdGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcz0wLHRoaXMucHJvY2Vzc2VkUHJvcGVydGllcz1uZXcgU2V0LHRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcz0wLHRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcz0wLHRoaXMuZW51bVZhbHVlTWF0Y2g9ITEsdGhpcy5lbnVtVmFsdWVzPXZvaWQgMH1oYXNQcm9ibGVtcygpe3JldHVybiEhdGhpcy5wcm9ibGVtcy5sZW5ndGh9bWVyZ2UoZSl7dGhpcy5wcm9ibGVtcz10aGlzLnByb2JsZW1zLmNvbmNhdChlLnByb2JsZW1zKSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzKz1lLnByb3BlcnRpZXNNYXRjaGVzLHRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9ZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLHRoaXMubWVyZ2VQcm9jZXNzZWRQcm9wZXJ0aWVzKGUpfW1lcmdlRW51bVZhbHVlcyhlKXtpZighdGhpcy5lbnVtVmFsdWVNYXRjaCYmIWUuZW51bVZhbHVlTWF0Y2gmJnRoaXMuZW51bVZhbHVlcyYmZS5lbnVtVmFsdWVzKXt0aGlzLmVudW1WYWx1ZXM9dGhpcy5lbnVtVmFsdWVzLmNvbmNhdChlLmVudW1WYWx1ZXMpO2Zvcihjb25zdCB0IG9mIHRoaXMucHJvYmxlbXMpdC5jb2RlPT09SC5FbnVtVmFsdWVNaXNtYXRjaCYmKHQubWVzc2FnZT1FKCJWYWx1ZSBpcyBub3QgYWNjZXB0ZWQuIFZhbGlkIHZhbHVlczogezB9LiIsdGhpcy5lbnVtVmFsdWVzLm1hcChuPT5KU09OLnN0cmluZ2lmeShuKSkuam9pbigiLCAiKSkpfX1tZXJnZVByb3BlcnR5TWF0Y2goZSl7dGhpcy5wcm9ibGVtcz10aGlzLnByb2JsZW1zLmNvbmNhdChlLnByb2JsZW1zKSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzKyssKGUuZW51bVZhbHVlTWF0Y2h8fCFlLmhhc1Byb2JsZW1zKCkmJmUucHJvcGVydGllc01hdGNoZXMpJiZ0aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKyxlLmVudW1WYWx1ZU1hdGNoJiZlLmVudW1WYWx1ZXMmJmUuZW51bVZhbHVlcy5sZW5ndGg9PT0xJiZ0aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMrK31tZXJnZVByb2Nlc3NlZFByb3BlcnRpZXMoZSl7ZS5wcm9jZXNzZWRQcm9wZXJ0aWVzLmZvckVhY2godD0+dGhpcy5wcm9jZXNzZWRQcm9wZXJ0aWVzLmFkZCh0KSl9Y29tcGFyZShlKXtjb25zdCB0PXRoaXMuaGFzUHJvYmxlbXMoKTtyZXR1cm4gdCE9PWUuaGFzUHJvYmxlbXMoKT90Py0xOjE6dGhpcy5lbnVtVmFsdWVNYXRjaCE9PWUuZW51bVZhbHVlTWF0Y2g/ZS5lbnVtVmFsdWVNYXRjaD8tMToxOnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcyE9PWUucHJpbWFyeVZhbHVlTWF0Y2hlcz90aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMtZS5wcmltYXJ5VmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyE9PWUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcz90aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMtZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc01hdGNoZXMtZS5wcm9wZXJ0aWVzTWF0Y2hlc319O2Z1bmN0aW9uIGkxKGUsdD1bXSl7cmV0dXJuIG5ldyBPbyhlLHQsW10pfWZ1bmN0aW9uIHV0KGUpe3JldHVybiBqYyhlKX1mdW5jdGlvbiB0aShlKXtyZXR1cm4gcWMoZSl9ZnVuY3Rpb24gRG8oZSx0LG49ITEpe3JldHVybiB0Pj1lLm9mZnNldCYmdDxlLm9mZnNldCtlLmxlbmd0aHx8biYmdD09PWUub2Zmc2V0K2UubGVuZ3RofXZhciBPbz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQ9W10sbj1bXSl7dGhpcy5yb290PWUsdGhpcy5zeW50YXhFcnJvcnM9dCx0aGlzLmNvbW1lbnRzPW59Z2V0Tm9kZUZyb21PZmZzZXQoZSx0PSExKXtpZih0aGlzLnJvb3QpcmV0dXJuIEJjKHRoaXMucm9vdCxlLHQpfXZpc2l0KGUpe2lmKHRoaXMucm9vdCl7Y29uc3QgdD1uPT57bGV0IHI9ZShuKTtjb25zdCBpPW4uY2hpbGRyZW47aWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IHM9MDtzPGkubGVuZ3RoJiZyO3MrKylyPXQoaVtzXSk7cmV0dXJuIHJ9O3QodGhpcy5yb290KX19dmFsaWRhdGUoZSx0LG49eGUuV2FybmluZyxyKXtpZih0aGlzLnJvb3QmJnQpe2NvbnN0IGk9bmV3IGhlO3JldHVybiBsZSh0aGlzLnJvb3QsdCxpLEt0Lmluc3RhbmNlLG5ldyBWbyhyPz8kbyh0KSkpLGkucHJvYmxlbXMubWFwKHM9Pntjb25zdCBhPXEuY3JlYXRlKGUucG9zaXRpb25BdChzLmxvY2F0aW9uLm9mZnNldCksZS5wb3NpdGlvbkF0KHMubG9jYXRpb24ub2Zmc2V0K3MubG9jYXRpb24ubGVuZ3RoKSk7cmV0dXJuIHplLmNyZWF0ZShhLHMubWVzc2FnZSxzLnNldmVyaXR5Pz9uLHMuY29kZSl9KX19Z2V0TWF0Y2hpbmdTY2hlbWFzKGUsdD0tMSxuKXtpZih0aGlzLnJvb3QmJmUpe2NvbnN0IHI9bmV3IHIxKHQsbiksaT0kbyhlKSxzPW5ldyBWbyhpKTtyZXR1cm4gbGUodGhpcy5yb290LGUsbmV3IGhlLHIscyksci5zY2hlbWFzfXJldHVybltdfX07ZnVuY3Rpb24gJG8oZSx0PU1lLnYyMDIwXzEyKXtsZXQgbj1lLiRzY2hlbWE7cmV0dXJuIG4/bjFbbl0/P3Q6dH1mdW5jdGlvbiBsZShlLHQsbixyLGkpe2lmKCFlfHwhci5pbmNsdWRlKGUpKXJldHVybjtpZihlLnR5cGU9PT0icHJvcGVydHkiKXJldHVybiBsZShlLnZhbHVlTm9kZSx0LG4scixpKTtjb25zdCBzPWU7c3dpdGNoKGEoKSxzLnR5cGUpe2Nhc2Uib2JqZWN0IjpoKHMpO2JyZWFrO2Nhc2UiYXJyYXkiOnUocyk7YnJlYWs7Y2FzZSJzdHJpbmciOm8ocyk7YnJlYWs7Y2FzZSJudW1iZXIiOmwocyk7YnJlYWt9ci5hZGQoe25vZGU6cyxzY2hlbWE6dH0pO2Z1bmN0aW9uIGEoKXtmdW5jdGlvbiBjKF8pe3JldHVybiBzLnR5cGU9PT1ffHxfPT09ImludGVnZXIiJiZzLnR5cGU9PT0ibnVtYmVyIiYmcy5pc0ludGVnZXJ9aWYoQXJyYXkuaXNBcnJheSh0LnR5cGUpP3QudHlwZS5zb21lKGMpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cy5vZmZzZXQsbGVuZ3RoOnMubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxFKCJJbmNvcnJlY3QgdHlwZS4gRXhwZWN0ZWQgb25lIG9mIHswfS4iLHQudHlwZS5qb2luKCIsICIpKX0pOnQudHlwZSYmKGModC50eXBlKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnMub2Zmc2V0LGxlbmd0aDpzLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8RSgnSW5jb3JyZWN0IHR5cGUuIEV4cGVjdGVkICJ7MH0iLicsdC50eXBlKX0pKSxBcnJheS5pc0FycmF5KHQuYWxsT2YpKWZvcihjb25zdCBfIG9mIHQuYWxsT2Ype2NvbnN0IHg9bmV3IGhlLHk9ci5uZXdTdWIoKTtsZShzLHdlKF8pLHgseSxpKSxuLm1lcmdlKHgpLHIubWVyZ2UoeSl9Y29uc3QgZD13ZSh0Lm5vdCk7aWYoZCl7Y29uc3QgXz1uZXcgaGUseD1yLm5ld1N1YigpO2xlKHMsZCxfLHgsaSksXy5oYXNQcm9ibGVtcygpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cy5vZmZzZXQsbGVuZ3RoOnMubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxFKCJNYXRjaGVzIGEgc2NoZW1hIHRoYXQgaXMgbm90IGFsbG93ZWQuIil9KTtmb3IoY29uc3QgeSBvZiB4LnNjaGVtYXMpeS5pbnZlcnRlZD0heS5pbnZlcnRlZCxyLmFkZCh5KX1jb25zdCBtPShfLHgpPT57Y29uc3QgeT1bXTtsZXQgYjtmb3IoY29uc3QgTCBvZiBfKXtjb25zdCBTPXdlKEwpLE09bmV3IGhlLEY9ci5uZXdTdWIoKTtpZihsZShzLFMsTSxGLGkpLE0uaGFzUHJvYmxlbXMoKXx8eS5wdXNoKFMpLCFiKWI9e3NjaGVtYTpTLHZhbGlkYXRpb25SZXN1bHQ6TSxtYXRjaGluZ1NjaGVtYXM6Rn07ZWxzZSBpZigheCYmIU0uaGFzUHJvYmxlbXMoKSYmIWIudmFsaWRhdGlvblJlc3VsdC5oYXNQcm9ibGVtcygpKWIubWF0Y2hpbmdTY2hlbWFzLm1lcmdlKEYpLGIudmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzTWF0Y2hlcys9TS5wcm9wZXJ0aWVzTWF0Y2hlcyxiLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9TS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLGIudmFsaWRhdGlvblJlc3VsdC5tZXJnZVByb2Nlc3NlZFByb3BlcnRpZXMoTSk7ZWxzZXtjb25zdCBPPU0uY29tcGFyZShiLnZhbGlkYXRpb25SZXN1bHQpO08+MD9iPXtzY2hlbWE6Uyx2YWxpZGF0aW9uUmVzdWx0Ok0sbWF0Y2hpbmdTY2hlbWFzOkZ9Ok89PT0wJiYoYi5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoRiksYi52YWxpZGF0aW9uUmVzdWx0Lm1lcmdlRW51bVZhbHVlcyhNKSl9fXJldHVybiB5Lmxlbmd0aD4xJiZ4JiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cy5vZmZzZXQsbGVuZ3RoOjF9LG1lc3NhZ2U6RSgiTWF0Y2hlcyBtdWx0aXBsZSBzY2hlbWFzIHdoZW4gb25seSBvbmUgbXVzdCB2YWxpZGF0ZS4iKX0pLGImJihuLm1lcmdlKGIudmFsaWRhdGlvblJlc3VsdCksci5tZXJnZShiLm1hdGNoaW5nU2NoZW1hcykpLHkubGVuZ3RofTtBcnJheS5pc0FycmF5KHQuYW55T2YpJiZtKHQuYW55T2YsITEpLEFycmF5LmlzQXJyYXkodC5vbmVPZikmJm0odC5vbmVPZiwhMCk7Y29uc3QgZz1fPT57Y29uc3QgeD1uZXcgaGUseT1yLm5ld1N1YigpO2xlKHMsd2UoXykseCx5LGkpLG4ubWVyZ2UoeCksci5tZXJnZSh5KX0scD0oXyx4LHkpPT57Y29uc3QgYj13ZShfKSxMPW5ldyBoZSxTPXIubmV3U3ViKCk7bGUocyxiLEwsUyxpKSxyLm1lcmdlKFMpLG4ubWVyZ2VQcm9jZXNzZWRQcm9wZXJ0aWVzKEwpLEwuaGFzUHJvYmxlbXMoKT95JiZnKHkpOngmJmcoeCl9LHY9d2UodC5pZik7aWYodiYmcCh2LHdlKHQudGhlbiksd2UodC5lbHNlKSksQXJyYXkuaXNBcnJheSh0LmVudW0pKXtjb25zdCBfPXV0KHMpO2xldCB4PSExO2Zvcihjb25zdCB5IG9mIHQuZW51bSlpZihrdChfLHkpKXt4PSEwO2JyZWFrfW4uZW51bVZhbHVlcz10LmVudW0sbi5lbnVtVmFsdWVNYXRjaD14LHh8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpzLm9mZnNldCxsZW5ndGg6cy5sZW5ndGh9LGNvZGU6SC5FbnVtVmFsdWVNaXNtYXRjaCxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxFKCJWYWx1ZSBpcyBub3QgYWNjZXB0ZWQuIFZhbGlkIHZhbHVlczogezB9LiIsdC5lbnVtLm1hcCh5PT5KU09OLnN0cmluZ2lmeSh5KSkuam9pbigiLCAiKSl9KX1pZihSZSh0LmNvbnN0KSl7Y29uc3QgXz11dChzKTtrdChfLHQuY29uc3QpP24uZW51bVZhbHVlTWF0Y2g9ITA6KG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpzLm9mZnNldCxsZW5ndGg6cy5sZW5ndGh9LGNvZGU6SC5FbnVtVmFsdWVNaXNtYXRjaCxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxFKCJWYWx1ZSBtdXN0IGJlIHswfS4iLEpTT04uc3RyaW5naWZ5KHQuY29uc3QpKX0pLG4uZW51bVZhbHVlTWF0Y2g9ITEpLG4uZW51bVZhbHVlcz1bdC5jb25zdF19bGV0IHc9dC5kZXByZWNhdGlvbk1lc3NhZ2U7aWYod3x8dC5kZXByZWNhdGVkKXt3PXd8fEUoIlZhbHVlIGlzIGRlcHJlY2F0ZWQiKTtsZXQgXz1zLnBhcmVudD8udHlwZT09PSJwcm9wZXJ0eSI/cy5wYXJlbnQ6cztuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Xy5vZmZzZXQsbGVuZ3RoOl8ubGVuZ3RofSxzZXZlcml0eTp4ZS5XYXJuaW5nLG1lc3NhZ2U6dyxjb2RlOkguRGVwcmVjYXRlZH0pfX1mdW5jdGlvbiBsKGMpe2NvbnN0IGQ9Yy52YWx1ZTtmdW5jdGlvbiBtKHkpe2NvbnN0IGI9L14oLT9cZCspKD86XC4oXGQrKSk/KD86ZShbLStdXGQrKSk/JC8uZXhlYyh5LnRvU3RyaW5nKCkpO3JldHVybiBiJiZ7dmFsdWU6TnVtYmVyKGJbMV0rKGJbMl18fCIiKSksbXVsdGlwbGllcjooYlsyXT8ubGVuZ3RofHwwKS0ocGFyc2VJbnQoYlszXSl8fDApfX1pZihmZSh0Lm11bHRpcGxlT2YpKXtsZXQgeT0tMTtpZihOdW1iZXIuaXNJbnRlZ2VyKHQubXVsdGlwbGVPZikpeT1kJXQubXVsdGlwbGVPZjtlbHNle2xldCBiPW0odC5tdWx0aXBsZU9mKSxMPW0oZCk7aWYoYiYmTCl7Y29uc3QgUz0xMCoqTWF0aC5hYnMoTC5tdWx0aXBsaWVyLWIubXVsdGlwbGllcik7TC5tdWx0aXBsaWVyPGIubXVsdGlwbGllcj9MLnZhbHVlKj1TOmIudmFsdWUqPVMseT1MLnZhbHVlJWIudmFsdWV9fXkhPT0wJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOkUoIlZhbHVlIGlzIG5vdCBkaXZpc2libGUgYnkgezB9LiIsdC5tdWx0aXBsZU9mKX0pfWZ1bmN0aW9uIGcoeSxiKXtpZihmZShiKSlyZXR1cm4gYjtpZihGZShiKSYmYilyZXR1cm4geX1mdW5jdGlvbiBwKHksYil7aWYoIUZlKGIpfHwhYilyZXR1cm4geX1jb25zdCB2PWcodC5taW5pbXVtLHQuZXhjbHVzaXZlTWluaW11bSk7ZmUodikmJmQ8PXYmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6RSgiVmFsdWUgaXMgYmVsb3cgdGhlIGV4Y2x1c2l2ZSBtaW5pbXVtIG9mIHswfS4iLHYpfSk7Y29uc3Qgdz1nKHQubWF4aW11bSx0LmV4Y2x1c2l2ZU1heGltdW0pO2ZlKHcpJiZkPj13JiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOkUoIlZhbHVlIGlzIGFib3ZlIHRoZSBleGNsdXNpdmUgbWF4aW11bSBvZiB7MH0uIix3KX0pO2NvbnN0IF89cCh0Lm1pbmltdW0sdC5leGNsdXNpdmVNaW5pbXVtKTtmZShfKSYmZDxfJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOkUoIlZhbHVlIGlzIGJlbG93IHRoZSBtaW5pbXVtIG9mIHswfS4iLF8pfSk7Y29uc3QgeD1wKHQubWF4aW11bSx0LmV4Y2x1c2l2ZU1heGltdW0pO2ZlKHgpJiZkPngmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6RSgiVmFsdWUgaXMgYWJvdmUgdGhlIG1heGltdW0gb2YgezB9LiIseCl9KX1mdW5jdGlvbiBvKGMpe2lmKGZlKHQubWluTGVuZ3RoKSYmRmEoYy52YWx1ZSk8dC5taW5MZW5ndGgmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6RSgiU3RyaW5nIGlzIHNob3J0ZXIgdGhhbiB0aGUgbWluaW11bSBsZW5ndGggb2YgezB9LiIsdC5taW5MZW5ndGgpfSksZmUodC5tYXhMZW5ndGgpJiZGYShjLnZhbHVlKT50Lm1heExlbmd0aCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpFKCJTdHJpbmcgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWF4TGVuZ3RoKX0pLElhKHQucGF0dGVybikmJihNbih0LnBhdHRlcm4pPy50ZXN0KGMudmFsdWUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOnQucGF0dGVybkVycm9yTWVzc2FnZXx8dC5lcnJvck1lc3NhZ2V8fEUoJ1N0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0dGVybiBvZiAiezB9Ii4nLHQucGF0dGVybil9KSksdC5mb3JtYXQpc3dpdGNoKHQuZm9ybWF0KXtjYXNlInVyaSI6Y2FzZSJ1cmktcmVmZXJlbmNlIjp7bGV0IG07aWYoIWMudmFsdWUpbT1FKCJVUkkgZXhwZWN0ZWQuIik7ZWxzZXtjb25zdCBnPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vLmV4ZWMoYy52YWx1ZSk7Zz8hZ1syXSYmdC5mb3JtYXQ9PT0idXJpIiYmKG09RSgiVVJJIHdpdGggYSBzY2hlbWUgaXMgZXhwZWN0ZWQuIikpOm09RSgiVVJJIGlzIGV4cGVjdGVkLiIpfW0mJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8RSgiU3RyaW5nIGlzIG5vdCBhIFVSSTogezB9IixtKX0pfWJyZWFrO2Nhc2UiY29sb3ItaGV4IjpjYXNlImRhdGUtdGltZSI6Y2FzZSJkYXRlIjpjYXNlInRpbWUiOmNhc2UiZW1haWwiOmNhc2UiaG9zdG5hbWUiOmNhc2UiaXB2NCI6Y2FzZSJpcHY2Ijpjb25zdCBkPVFjW3QuZm9ybWF0XTsoIWMudmFsdWV8fCFkLnBhdHRlcm4uZXhlYyhjLnZhbHVlKSkmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8ZC5lcnJvck1lc3NhZ2V9KX19ZnVuY3Rpb24gdShjKXtsZXQgZCxtO2kuc2NoZW1hRHJhZnQ+PU1lLnYyMDIwXzEyPyhkPXQucHJlZml4SXRlbXMsbT1BcnJheS5pc0FycmF5KHQuaXRlbXMpP3ZvaWQgMDp0Lml0ZW1zKTooZD1BcnJheS5pc0FycmF5KHQuaXRlbXMpP3QuaXRlbXM6dm9pZCAwLG09QXJyYXkuaXNBcnJheSh0Lml0ZW1zKT90LmFkZGl0aW9uYWxJdGVtczp0Lml0ZW1zKTtsZXQgZz0wO2lmKGQhPT12b2lkIDApe2NvbnN0IHc9TWF0aC5taW4oZC5sZW5ndGgsYy5pdGVtcy5sZW5ndGgpO2Zvcig7Zzx3O2crKyl7Y29uc3QgXz1kW2ddLHg9d2UoXykseT1uZXcgaGUsYj1jLml0ZW1zW2ddO2ImJihsZShiLHgseSxyLGkpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHkpKSxuLnByb2Nlc3NlZFByb3BlcnRpZXMuYWRkKFN0cmluZyhnKSl9fWlmKG0hPT12b2lkIDAmJmc8Yy5pdGVtcy5sZW5ndGgpaWYodHlwZW9mIG09PSJib29sZWFuIilmb3IobT09PSExJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOkUoIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcyBhY2NvcmRpbmcgdG8gc2NoZW1hLiBFeHBlY3RlZCB7MH0gb3IgZmV3ZXIuIixnKX0pO2c8Yy5pdGVtcy5sZW5ndGg7ZysrKW4ucHJvY2Vzc2VkUHJvcGVydGllcy5hZGQoU3RyaW5nKGcpKSxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKztlbHNlIGZvcig7ZzxjLml0ZW1zLmxlbmd0aDtnKyspe2NvbnN0IHc9bmV3IGhlO2xlKGMuaXRlbXNbZ10sbSx3LHIsaSksbi5tZXJnZVByb3BlcnR5TWF0Y2godyksbi5wcm9jZXNzZWRQcm9wZXJ0aWVzLmFkZChTdHJpbmcoZykpfWNvbnN0IHA9d2UodC5jb250YWlucyk7aWYocCl7bGV0IHc9MDtmb3IobGV0IF89MDtfPGMuaXRlbXMubGVuZ3RoO18rKyl7Y29uc3QgeD1jLml0ZW1zW19dLHk9bmV3IGhlO2xlKHgscCx5LEt0Lmluc3RhbmNlLGkpLHkuaGFzUHJvYmxlbXMoKXx8KHcrKyxpLnNjaGVtYURyYWZ0Pj1NZS52MjAyMF8xMiYmbi5wcm9jZXNzZWRQcm9wZXJ0aWVzLmFkZChTdHJpbmcoXykpKX13PT09MCYmIWZlKHQubWluQ29udGFpbnMpJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxFKCJBcnJheSBkb2VzIG5vdCBjb250YWluIHJlcXVpcmVkIGl0ZW0uIil9KSxmZSh0Lm1pbkNvbnRhaW5zKSYmdzx0Lm1pbkNvbnRhaW5zJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxFKCJBcnJheSBoYXMgdG9vIGZldyBpdGVtcyB0aGF0IG1hdGNoIHRoZSBjb250YWlucyBjb250cmFpbnQuIEV4cGVjdGVkIHswfSBvciBtb3JlLiIsdC5taW5Db250YWlucyl9KSxmZSh0Lm1heENvbnRhaW5zKSYmdz50Lm1heENvbnRhaW5zJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxFKCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMgdGhhdCBtYXRjaCB0aGUgY29udGFpbnMgY29udHJhaW50LiBFeHBlY3RlZCB7MH0gb3IgbGVzcy4iLHQubWF4Q29udGFpbnMpfSl9Y29uc3Qgdj10LnVuZXZhbHVhdGVkSXRlbXM7aWYodiE9PXZvaWQgMClmb3IobGV0IHc9MDt3PGMuaXRlbXMubGVuZ3RoO3crKyl7aWYoIW4ucHJvY2Vzc2VkUHJvcGVydGllcy5oYXMoU3RyaW5nKHcpKSlpZih2PT09ITEpbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpFKCJJdGVtIGRvZXMgbm90IG1hdGNoIGFueSB2YWxpZGF0aW9uIHJ1bGUgZnJvbSB0aGUgYXJyYXkuIil9KTtlbHNle2NvbnN0IF89bmV3IGhlO2xlKGMuaXRlbXNbd10sdC51bmV2YWx1YXRlZEl0ZW1zLF8scixpKSxuLm1lcmdlUHJvcGVydHlNYXRjaChfKX1uLnByb2Nlc3NlZFByb3BlcnRpZXMuYWRkKFN0cmluZyh3KSksbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyt9aWYoZmUodC5taW5JdGVtcykmJmMuaXRlbXMubGVuZ3RoPHQubWluSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6RSgiQXJyYXkgaGFzIHRvbyBmZXcgaXRlbXMuIEV4cGVjdGVkIHswfSBvciBtb3JlLiIsdC5taW5JdGVtcyl9KSxmZSh0Lm1heEl0ZW1zKSYmYy5pdGVtcy5sZW5ndGg+dC5tYXhJdGVtcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpFKCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMuIEV4cGVjdGVkIHswfSBvciBmZXdlci4iLHQubWF4SXRlbXMpfSksdC51bmlxdWVJdGVtcz09PSEwKXtsZXQgdz1mdW5jdGlvbigpe2ZvcihsZXQgeD0wO3g8Xy5sZW5ndGgtMTt4Kyspe2NvbnN0IHk9X1t4XTtmb3IobGV0IGI9eCsxO2I8Xy5sZW5ndGg7YisrKWlmKGt0KHksX1tiXSkpcmV0dXJuITB9cmV0dXJuITF9O2NvbnN0IF89dXQoYyk7dygpJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOkUoIkFycmF5IGhhcyBkdXBsaWNhdGUgaXRlbXMuIil9KX19ZnVuY3Rpb24gaChjKXtjb25zdCBkPU9iamVjdC5jcmVhdGUobnVsbCksbT1uZXcgU2V0O2Zvcihjb25zdCB4IG9mIGMucHJvcGVydGllcyl7Y29uc3QgeT14LmtleU5vZGUudmFsdWU7ZFt5XT14LnZhbHVlTm9kZSxtLmFkZCh5KX1pZihBcnJheS5pc0FycmF5KHQucmVxdWlyZWQpKXtmb3IoY29uc3QgeCBvZiB0LnJlcXVpcmVkKWlmKCFkW3hdKXtjb25zdCB5PWMucGFyZW50JiZjLnBhcmVudC50eXBlPT09InByb3BlcnR5IiYmYy5wYXJlbnQua2V5Tm9kZSxiPXk/e29mZnNldDp5Lm9mZnNldCxsZW5ndGg6eS5sZW5ndGh9OntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOjF9O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246YixtZXNzYWdlOkUoJ01pc3NpbmcgcHJvcGVydHkgInswfSIuJyx4KX0pfX1jb25zdCBnPXg9PnttLmRlbGV0ZSh4KSxuLnByb2Nlc3NlZFByb3BlcnRpZXMuYWRkKHgpfTtpZih0LnByb3BlcnRpZXMpZm9yKGNvbnN0IHggb2YgT2JqZWN0LmtleXModC5wcm9wZXJ0aWVzKSl7Zyh4KTtjb25zdCB5PXQucHJvcGVydGllc1t4XSxiPWRbeF07aWYoYilpZihGZSh5KSlpZih5KW4ucHJvcGVydGllc01hdGNoZXMrKyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKztlbHNle2NvbnN0IEw9Yi5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Okwua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOkwua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEUoIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLHgpfSl9ZWxzZXtjb25zdCBMPW5ldyBoZTtsZShiLHksTCxyLGkpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKEwpfX1pZih0LnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcihjb25zdCB4IG9mIE9iamVjdC5rZXlzKHQucGF0dGVyblByb3BlcnRpZXMpKXtjb25zdCB5PU1uKHgpO2lmKHkpe2NvbnN0IGI9W107Zm9yKGNvbnN0IEwgb2YgbSlpZih5LnRlc3QoTCkpe2IucHVzaChMKTtjb25zdCBTPWRbTF07aWYoUyl7Y29uc3QgTT10LnBhdHRlcm5Qcm9wZXJ0aWVzW3hdO2lmKEZlKE0pKWlmKE0pbi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7Y29uc3QgRj1TLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Ri5rZXlOb2RlLm9mZnNldCxsZW5ndGg6Ri5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8RSgiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsTCl9KX1lbHNle2NvbnN0IEY9bmV3IGhlO2xlKFMsTSxGLHIsaSksbi5tZXJnZVByb3BlcnR5TWF0Y2goRil9fX1iLmZvckVhY2goZyl9fWNvbnN0IHA9dC5hZGRpdGlvbmFsUHJvcGVydGllcztpZihwIT09dm9pZCAwKWZvcihjb25zdCB4IG9mIG0pe2coeCk7Y29uc3QgeT1kW3hdO2lmKHkpe2lmKHA9PT0hMSl7Y29uc3QgYj15LnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yi5rZXlOb2RlLm9mZnNldCxsZW5ndGg6Yi5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8RSgiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIseCl9KX1lbHNlIGlmKHAhPT0hMCl7Y29uc3QgYj1uZXcgaGU7bGUoeSxwLGIscixpKSxuLm1lcmdlUHJvcGVydHlNYXRjaChiKX19fWNvbnN0IHY9dC51bmV2YWx1YXRlZFByb3BlcnRpZXM7aWYodiE9PXZvaWQgMCl7Y29uc3QgeD1bXTtmb3IoY29uc3QgeSBvZiBtKWlmKCFuLnByb2Nlc3NlZFByb3BlcnRpZXMuaGFzKHkpKXt4LnB1c2goeSk7Y29uc3QgYj1kW3ldO2lmKGIpe2lmKHY9PT0hMSl7Y29uc3QgTD1iLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6TC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6TC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8RSgiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIseSl9KX1lbHNlIGlmKHYhPT0hMCl7Y29uc3QgTD1uZXcgaGU7bGUoYix2LEwscixpKSxuLm1lcmdlUHJvcGVydHlNYXRjaChMKX19fXguZm9yRWFjaChnKX1pZihmZSh0Lm1heFByb3BlcnRpZXMpJiZjLnByb3BlcnRpZXMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpFKCJPYmplY3QgaGFzIG1vcmUgcHJvcGVydGllcyB0aGFuIGxpbWl0IG9mIHswfS4iLHQubWF4UHJvcGVydGllcyl9KSxmZSh0Lm1pblByb3BlcnRpZXMpJiZjLnByb3BlcnRpZXMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpFKCJPYmplY3QgaGFzIGZld2VyIHByb3BlcnRpZXMgdGhhbiB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIHswfSIsdC5taW5Qcm9wZXJ0aWVzKX0pLHQuZGVwZW5kZW50UmVxdWlyZWQpZm9yKGNvbnN0IHggaW4gdC5kZXBlbmRlbnRSZXF1aXJlZCl7Y29uc3QgeT1kW3hdLGI9dC5kZXBlbmRlbnRSZXF1aXJlZFt4XTt5JiZBcnJheS5pc0FycmF5KGIpJiZfKHgsYil9aWYodC5kZXBlbmRlbnRTY2hlbWFzKWZvcihjb25zdCB4IGluIHQuZGVwZW5kZW50U2NoZW1hcyl7Y29uc3QgeT1kW3hdLGI9dC5kZXBlbmRlbnRTY2hlbWFzW3hdO3kmJmV0KGIpJiZfKHgsYil9aWYodC5kZXBlbmRlbmNpZXMpZm9yKGNvbnN0IHggaW4gdC5kZXBlbmRlbmNpZXMpZFt4XSYmXyh4LHQuZGVwZW5kZW5jaWVzW3hdKTtjb25zdCB3PXdlKHQucHJvcGVydHlOYW1lcyk7aWYodylmb3IoY29uc3QgeCBvZiBjLnByb3BlcnRpZXMpe2NvbnN0IHk9eC5rZXlOb2RlO3kmJmxlKHksdyxuLEt0Lmluc3RhbmNlLGkpfWZ1bmN0aW9uIF8oeCx5KXtpZihBcnJheS5pc0FycmF5KHkpKWZvcihjb25zdCBiIG9mIHkpZFtiXT9uLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKzpuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOkUoIk9iamVjdCBpcyBtaXNzaW5nIHByb3BlcnR5IHswfSByZXF1aXJlZCBieSBwcm9wZXJ0eSB7MX0uIixiLHgpfSk7ZWxzZXtjb25zdCBiPXdlKHkpO2lmKGIpe2NvbnN0IEw9bmV3IGhlO2xlKGMsYixMLHIsaSksbi5tZXJnZVByb3BlcnR5TWF0Y2goTCl9fX19fWZ1bmN0aW9uIHMxKGUsdCl7Y29uc3Qgbj1bXTtsZXQgcj0tMTtjb25zdCBpPWUuZ2V0VGV4dCgpLHM9YXQoaSwhMSksYT10JiZ0LmNvbGxlY3RDb21tZW50cz9bXTp2b2lkIDA7ZnVuY3Rpb24gbCgpe2Zvcig7Oyl7Y29uc3QgTD1zLnNjYW4oKTtzd2l0Y2goaCgpLEwpe2Nhc2UgMTI6Y2FzZSAxMzpBcnJheS5pc0FycmF5KGEpJiZhLnB1c2gocS5jcmVhdGUoZS5wb3NpdGlvbkF0KHMuZ2V0VG9rZW5PZmZzZXQoKSksZS5wb3NpdGlvbkF0KHMuZ2V0VG9rZW5PZmZzZXQoKStzLmdldFRva2VuTGVuZ3RoKCkpKSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIEx9fX1mdW5jdGlvbiBvKEwsUyxNLEYsTz14ZS5FcnJvcil7aWYobi5sZW5ndGg9PT0wfHxNIT09cil7Y29uc3QgQz1xLmNyZWF0ZShlLnBvc2l0aW9uQXQoTSksZS5wb3NpdGlvbkF0KEYpKTtuLnB1c2goemUuY3JlYXRlKEMsTCxPLFMsZS5sYW5ndWFnZUlkKSkscj1NfX1mdW5jdGlvbiB1KEwsUyxNPXZvaWQgMCxGPVtdLE89W10pe2xldCBDPXMuZ2V0VG9rZW5PZmZzZXQoKSxOPXMuZ2V0VG9rZW5PZmZzZXQoKStzLmdldFRva2VuTGVuZ3RoKCk7aWYoQz09PU4mJkM+MCl7Zm9yKEMtLTtDPjAmJi9ccy8udGVzdChpLmNoYXJBdChDKSk7KUMtLTtOPUMrMX1pZihvKEwsUyxDLE4pLE0mJmMoTSwhMSksRi5sZW5ndGgrTy5sZW5ndGg+MCl7bGV0IGs9cy5nZXRUb2tlbigpO2Zvcig7ayE9PTE3Oyl7aWYoRi5pbmRleE9mKGspIT09LTEpe2woKTticmVha31lbHNlIGlmKE8uaW5kZXhPZihrKSE9PS0xKWJyZWFrO2s9bCgpfX1yZXR1cm4gTX1mdW5jdGlvbiBoKCl7c3dpdGNoKHMuZ2V0VG9rZW5FcnJvcigpKXtjYXNlIDQ6cmV0dXJuIHUoRSgiSW52YWxpZCB1bmljb2RlIHNlcXVlbmNlIGluIHN0cmluZy4iKSxILkludmFsaWRVbmljb2RlKSwhMDtjYXNlIDU6cmV0dXJuIHUoRSgiSW52YWxpZCBlc2NhcGUgY2hhcmFjdGVyIGluIHN0cmluZy4iKSxILkludmFsaWRFc2NhcGVDaGFyYWN0ZXIpLCEwO2Nhc2UgMzpyZXR1cm4gdShFKCJVbmV4cGVjdGVkIGVuZCBvZiBudW1iZXIuIiksSC5VbmV4cGVjdGVkRW5kT2ZOdW1iZXIpLCEwO2Nhc2UgMTpyZXR1cm4gdShFKCJVbmV4cGVjdGVkIGVuZCBvZiBjb21tZW50LiIpLEguVW5leHBlY3RlZEVuZE9mQ29tbWVudCksITA7Y2FzZSAyOnJldHVybiB1KEUoIlVuZXhwZWN0ZWQgZW5kIG9mIHN0cmluZy4iKSxILlVuZXhwZWN0ZWRFbmRPZlN0cmluZyksITA7Y2FzZSA2OnJldHVybiB1KEUoIkludmFsaWQgY2hhcmFjdGVycyBpbiBzdHJpbmcuIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IGJlIGVzY2FwZWQuIiksSC5JbnZhbGlkQ2hhcmFjdGVyKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBjKEwsUyl7cmV0dXJuIEwubGVuZ3RoPXMuZ2V0VG9rZW5PZmZzZXQoKStzLmdldFRva2VuTGVuZ3RoKCktTC5vZmZzZXQsUyYmbCgpLEx9ZnVuY3Rpb24gZChMKXtpZihzLmdldFRva2VuKCkhPT0zKXJldHVybjtjb25zdCBTPW5ldyBaYyhMLHMuZ2V0VG9rZW5PZmZzZXQoKSk7bCgpO2xldCBNPSExO2Zvcig7cy5nZXRUb2tlbigpIT09NCYmcy5nZXRUb2tlbigpIT09MTc7KXtpZihzLmdldFRva2VuKCk9PT01KXtNfHx1KEUoIlZhbHVlIGV4cGVjdGVkIiksSC5WYWx1ZUV4cGVjdGVkKTtjb25zdCBPPXMuZ2V0VG9rZW5PZmZzZXQoKTtpZihsKCkscy5nZXRUb2tlbigpPT09NCl7TSYmbyhFKCJUcmFpbGluZyBjb21tYSIpLEguVHJhaWxpbmdDb21tYSxPLE8rMSk7Y29udGludWV9fWVsc2UgTSYmdShFKCJFeHBlY3RlZCBjb21tYSIpLEguQ29tbWFFeHBlY3RlZCk7Y29uc3QgRj14KFMpO0Y/Uy5pdGVtcy5wdXNoKEYpOnUoRSgiVmFsdWUgZXhwZWN0ZWQiKSxILlZhbHVlRXhwZWN0ZWQsdm9pZCAwLFtdLFs0LDVdKSxNPSEwfXJldHVybiBzLmdldFRva2VuKCkhPT00P3UoRSgiRXhwZWN0ZWQgY29tbWEgb3IgY2xvc2luZyBicmFja2V0IiksSC5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCxTKTpjKFMsITApfWNvbnN0IG09bmV3IGVpKHZvaWQgMCwwLDApO2Z1bmN0aW9uIGcoTCxTKXtjb25zdCBNPW5ldyBlMShMLHMuZ2V0VG9rZW5PZmZzZXQoKSxtKTtsZXQgRj12KE0pO2lmKCFGKWlmKHMuZ2V0VG9rZW4oKT09PTE2KXt1KEUoIlByb3BlcnR5IGtleXMgbXVzdCBiZSBkb3VibGVxdW90ZWQiKSxILlByb3BlcnR5S2V5c011c3RCZURvdWJsZXF1b3RlZCk7Y29uc3QgQz1uZXcgZWkoTSxzLmdldFRva2VuT2Zmc2V0KCkscy5nZXRUb2tlbkxlbmd0aCgpKTtDLnZhbHVlPXMuZ2V0VG9rZW5WYWx1ZSgpLEY9QyxsKCl9ZWxzZSByZXR1cm47aWYoTS5rZXlOb2RlPUYsRi52YWx1ZSE9PSIvLyIpe2NvbnN0IEM9U1tGLnZhbHVlXTtDPyhvKEUoIkR1cGxpY2F0ZSBvYmplY3Qga2V5IiksSC5EdXBsaWNhdGVLZXksTS5rZXlOb2RlLm9mZnNldCxNLmtleU5vZGUub2Zmc2V0K00ua2V5Tm9kZS5sZW5ndGgseGUuV2FybmluZyksZXQoQykmJm8oRSgiRHVwbGljYXRlIG9iamVjdCBrZXkiKSxILkR1cGxpY2F0ZUtleSxDLmtleU5vZGUub2Zmc2V0LEMua2V5Tm9kZS5vZmZzZXQrQy5rZXlOb2RlLmxlbmd0aCx4ZS5XYXJuaW5nKSxTW0YudmFsdWVdPSEwKTpTW0YudmFsdWVdPU19aWYocy5nZXRUb2tlbigpPT09NilNLmNvbG9uT2Zmc2V0PXMuZ2V0VG9rZW5PZmZzZXQoKSxsKCk7ZWxzZSBpZih1KEUoIkNvbG9uIGV4cGVjdGVkIiksSC5Db2xvbkV4cGVjdGVkKSxzLmdldFRva2VuKCk9PT0xMCYmZS5wb3NpdGlvbkF0KEYub2Zmc2V0K0YubGVuZ3RoKS5saW5lPGUucG9zaXRpb25BdChzLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUpcmV0dXJuIE0ubGVuZ3RoPUYubGVuZ3RoLE07Y29uc3QgTz14KE0pO3JldHVybiBPPyhNLnZhbHVlTm9kZT1PLE0ubGVuZ3RoPU8ub2Zmc2V0K08ubGVuZ3RoLU0ub2Zmc2V0LE0pOnUoRSgiVmFsdWUgZXhwZWN0ZWQiKSxILlZhbHVlRXhwZWN0ZWQsTSxbXSxbMiw1XSl9ZnVuY3Rpb24gcChMKXtpZihzLmdldFRva2VuKCkhPT0xKXJldHVybjtjb25zdCBTPW5ldyB0MShMLHMuZ2V0VG9rZW5PZmZzZXQoKSksTT1PYmplY3QuY3JlYXRlKG51bGwpO2woKTtsZXQgRj0hMTtmb3IoO3MuZ2V0VG9rZW4oKSE9PTImJnMuZ2V0VG9rZW4oKSE9PTE3Oyl7aWYocy5nZXRUb2tlbigpPT09NSl7Rnx8dShFKCJQcm9wZXJ0eSBleHBlY3RlZCIpLEguUHJvcGVydHlFeHBlY3RlZCk7Y29uc3QgQz1zLmdldFRva2VuT2Zmc2V0KCk7aWYobCgpLHMuZ2V0VG9rZW4oKT09PTIpe0YmJm8oRSgiVHJhaWxpbmcgY29tbWEiKSxILlRyYWlsaW5nQ29tbWEsQyxDKzEpO2NvbnRpbnVlfX1lbHNlIEYmJnUoRSgiRXhwZWN0ZWQgY29tbWEiKSxILkNvbW1hRXhwZWN0ZWQpO2NvbnN0IE89ZyhTLE0pO08/Uy5wcm9wZXJ0aWVzLnB1c2goTyk6dShFKCJQcm9wZXJ0eSBleHBlY3RlZCIpLEguUHJvcGVydHlFeHBlY3RlZCx2b2lkIDAsW10sWzIsNV0pLEY9ITB9cmV0dXJuIHMuZ2V0VG9rZW4oKSE9PTI/dShFKCJFeHBlY3RlZCBjb21tYSBvciBjbG9zaW5nIGJyYWNlIiksSC5Db21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkLFMpOmMoUywhMCl9ZnVuY3Rpb24gdihMKXtpZihzLmdldFRva2VuKCkhPT0xMClyZXR1cm47Y29uc3QgUz1uZXcgZWkoTCxzLmdldFRva2VuT2Zmc2V0KCkpO3JldHVybiBTLnZhbHVlPXMuZ2V0VG9rZW5WYWx1ZSgpLGMoUywhMCl9ZnVuY3Rpb24gdyhMKXtpZihzLmdldFRva2VuKCkhPT0xMSlyZXR1cm47Y29uc3QgUz1uZXcgS2MoTCxzLmdldFRva2VuT2Zmc2V0KCkpO2lmKHMuZ2V0VG9rZW5FcnJvcigpPT09MCl7Y29uc3QgTT1zLmdldFRva2VuVmFsdWUoKTt0cnl7Y29uc3QgRj1KU09OLnBhcnNlKE0pO2lmKCFmZShGKSlyZXR1cm4gdShFKCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksSC5VbmRlZmluZWQsUyk7Uy52YWx1ZT1GfWNhdGNoe3JldHVybiB1KEUoIkludmFsaWQgbnVtYmVyIGZvcm1hdC4iKSxILlVuZGVmaW5lZCxTKX1TLmlzSW50ZWdlcj1NLmluZGV4T2YoIi4iKT09PS0xfXJldHVybiBjKFMsITApfWZ1bmN0aW9uIF8oTCl7c3dpdGNoKHMuZ2V0VG9rZW4oKSl7Y2FzZSA3OnJldHVybiBjKG5ldyBZYyhMLHMuZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgODpyZXR1cm4gYyhuZXcgSW8oTCwhMCxzLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtjYXNlIDk6cmV0dXJuIGMobmV3IElvKEwsITEscy5nZXRUb2tlbk9mZnNldCgpKSwhMCk7ZGVmYXVsdDpyZXR1cm59fWZ1bmN0aW9uIHgoTCl7cmV0dXJuIGQoTCl8fHAoTCl8fHYoTCl8fHcoTCl8fF8oTCl9bGV0IHk7cmV0dXJuIGwoKSE9PTE3JiYoeT14KHkpLHk/cy5nZXRUb2tlbigpIT09MTcmJnUoRSgiRW5kIG9mIGZpbGUgZXhwZWN0ZWQuIiksSC5VbmRlZmluZWQpOnUoRSgiRXhwZWN0ZWQgYSBKU09OIG9iamVjdCwgYXJyYXkgb3IgbGl0ZXJhbC4iKSxILlVuZGVmaW5lZCkpLG5ldyBPbyh5LG4sYSl9ZnVuY3Rpb24gbmkoZSx0LG4pe2lmKGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCIpe2NvbnN0IHI9dCsiCSI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiJbXSI7bGV0IGk9YFsKYDtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKylpKz1yK25pKGVbc10scixuKSxzPGUubGVuZ3RoLTEmJihpKz0iLCIpLGkrPWAKYDtyZXR1cm4gaSs9dCsiXSIsaX1lbHNle2NvbnN0IGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg9PT0wKXJldHVybiJ7fSI7bGV0IHM9YHsKYDtmb3IobGV0IGE9MDthPGkubGVuZ3RoO2ErKyl7Y29uc3QgbD1pW2FdO3MrPXIrSlNPTi5zdHJpbmdpZnkobCkrIjogIituaShlW2xdLHIsbiksYTxpLmxlbmd0aC0xJiYocys9IiwiKSxzKz1gCmB9cmV0dXJuIHMrPXQrIn0iLHN9fXJldHVybiBuKGUpfXZhciBhMT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQ9W10sbj1Qcm9taXNlLHI9e30pe3RoaXMuc2NoZW1hU2VydmljZT1lLHRoaXMuY29udHJpYnV0aW9ucz10LHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPW4sdGhpcy5jbGllbnRDYXBhYmlsaXRpZXM9cn1kb1Jlc29sdmUoZSl7Zm9yKGxldCB0PXRoaXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3Qgbj10aGlzLmNvbnRyaWJ1dGlvbnNbdF0ucmVzb2x2ZUNvbXBsZXRpb247aWYobil7Y29uc3Qgcj1uKGUpO2lmKHIpcmV0dXJuIHJ9fXJldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvci5yZXNvbHZlKGUpfWRvQ29tcGxldGUoZSx0LG4pe2NvbnN0IHI9e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX0saT1lLmdldFRleHQoKSxzPWUub2Zmc2V0QXQodCk7bGV0IGE9bi5nZXROb2RlRnJvbU9mZnNldChzLCEwKTtpZih0aGlzLmlzSW5Db21tZW50KGUsYT9hLm9mZnNldDowLHMpKXJldHVybiBQcm9taXNlLnJlc29sdmUocik7aWYoYSYmcz09PWEub2Zmc2V0K2EubGVuZ3RoJiZzPjApe2NvbnN0IGM9aVtzLTFdOyhhLnR5cGU9PT0ib2JqZWN0IiYmYz09PSJ9Inx8YS50eXBlPT09ImFycmF5IiYmYz09PSJdIikmJihhPWEucGFyZW50KX1jb25zdCBsPXRoaXMuZ2V0Q3VycmVudFdvcmQoZSxzKTtsZXQgbztpZihhJiYoYS50eXBlPT09InN0cmluZyJ8fGEudHlwZT09PSJudW1iZXIifHxhLnR5cGU9PT0iYm9vbGVhbiJ8fGEudHlwZT09PSJudWxsIikpbz1xLmNyZWF0ZShlLnBvc2l0aW9uQXQoYS5vZmZzZXQpLGUucG9zaXRpb25BdChhLm9mZnNldCthLmxlbmd0aCkpO2Vsc2V7bGV0IGM9cy1sLmxlbmd0aDtjPjAmJmlbYy0xXT09PSciJyYmYy0tLG89cS5jcmVhdGUoZS5wb3NpdGlvbkF0KGMpLHQpfWNvbnN0IHU9bmV3IE1hcCxoPXthZGQ6Yz0+e2xldCBkPWMubGFiZWw7Y29uc3QgbT11LmdldChkKTtpZihtKW0uZG9jdW1lbnRhdGlvbnx8KG0uZG9jdW1lbnRhdGlvbj1jLmRvY3VtZW50YXRpb24pLG0uZGV0YWlsfHwobS5kZXRhaWw9Yy5kZXRhaWwpLG0ubGFiZWxEZXRhaWxzfHwobS5sYWJlbERldGFpbHM9Yy5sYWJlbERldGFpbHMpO2Vsc2V7aWYoZD1kLnJlcGxhY2UoL1tcbl0vZywi4oa1IiksZC5sZW5ndGg+NjApe2NvbnN0IGc9ZC5zdWJzdHIoMCw1NykudHJpbSgpKyIuLi4iO3UuaGFzKGcpfHwoZD1nKX1jLnRleHRFZGl0PVZlLnJlcGxhY2UobyxjLmluc2VydFRleHQpLGMubGFiZWw9ZCx1LnNldChkLGMpLHIuaXRlbXMucHVzaChjKX19LHNldEFzSW5jb21wbGV0ZTooKT0+e3IuaXNJbmNvbXBsZXRlPSEwfSxlcnJvcjpjPT57Y29uc29sZS5lcnJvcihjKX0sZ2V0TnVtYmVyT2ZQcm9wb3NhbHM6KCk9PnIuaXRlbXMubGVuZ3RofTtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLG4pLnRoZW4oYz0+e2NvbnN0IGQ9W107bGV0IG09ITAsZz0iIixwO2lmKGEmJmEudHlwZT09PSJzdHJpbmciKXtjb25zdCB3PWEucGFyZW50O3cmJncudHlwZT09PSJwcm9wZXJ0eSImJncua2V5Tm9kZT09PWEmJihtPSF3LnZhbHVlTm9kZSxwPXcsZz1pLnN1YnN0cihhLm9mZnNldCsxLGEubGVuZ3RoLTIpLHcmJihhPXcucGFyZW50KSl9aWYoYSYmYS50eXBlPT09Im9iamVjdCIpe2lmKGEub2Zmc2V0PT09cylyZXR1cm4gcjthLnByb3BlcnRpZXMuZm9yRWFjaCh5PT57KCFwfHxwIT09eSkmJnUuc2V0KHkua2V5Tm9kZS52YWx1ZSxYci5jcmVhdGUoIl9fIikpfSk7bGV0IF89IiI7bSYmKF89dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGUsZS5vZmZzZXRBdChvLmVuZCkpKSxjP3RoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhjLG4sYSxtLF8saCk6dGhpcy5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucyhuLGEsZyxoKTtjb25zdCB4PXRpKGEpO3RoaXMuY29udHJpYnV0aW9ucy5mb3JFYWNoKHk9Pntjb25zdCBiPXkuY29sbGVjdFByb3BlcnR5Q29tcGxldGlvbnMoZS51cmkseCxsLG0sXz09PSIiLGgpO2ImJmQucHVzaChiKX0pLCFjJiZsLmxlbmd0aD4wJiZpLmNoYXJBdChzLWwubGVuZ3RoLTEpIT09JyInJiYoaC5hZGQoe2tpbmQ6eWUuUHJvcGVydHksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKGwpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkobCx2b2lkIDAsITEsXyksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxoLnNldEFzSW5jb21wbGV0ZSgpKX1jb25zdCB2PXt9O3JldHVybiBjP3RoaXMuZ2V0VmFsdWVDb21wbGV0aW9ucyhjLG4sYSxzLGUsaCx2KTp0aGlzLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zKG4sYSxzLGUsaCksdGhpcy5jb250cmlidXRpb25zLmxlbmd0aD4wJiZ0aGlzLmdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucyhuLGEscyxlLGgsZCksdGhpcy5wcm9taXNlQ29uc3RydWN0b3IuYWxsKGQpLnRoZW4oKCk9PntpZihoLmdldE51bWJlck9mUHJvcG9zYWxzKCk9PT0wKXtsZXQgdz1zO2EmJihhLnR5cGU9PT0ic3RyaW5nInx8YS50eXBlPT09Im51bWJlciJ8fGEudHlwZT09PSJib29sZWFuInx8YS50eXBlPT09Im51bGwiKSYmKHc9YS5vZmZzZXQrYS5sZW5ndGgpO2NvbnN0IF89dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGUsdyk7dGhpcy5hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zKHYsXyxoKX1yZXR1cm4gcn0pfSl9Z2V0UHJvcGVydHlDb21wbGV0aW9ucyhlLHQsbixyLGkscyl7dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsbi5vZmZzZXQpLmZvckVhY2gobD0+e2lmKGwubm9kZT09PW4mJiFsLmludmVydGVkKXtjb25zdCBvPWwuc2NoZW1hLnByb3BlcnRpZXM7byYmT2JqZWN0LmtleXMobykuZm9yRWFjaChoPT57Y29uc3QgYz1vW2hdO2lmKHR5cGVvZiBjPT0ib2JqZWN0IiYmIWMuZGVwcmVjYXRpb25NZXNzYWdlJiYhYy5kb05vdFN1Z2dlc3Qpe2NvbnN0IGQ9e2tpbmQ6eWUuUHJvcGVydHksbGFiZWw6aCxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGgsYyxyLGkpLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldCxmaWx0ZXJUZXh0OnRoaXMuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGgpLGRvY3VtZW50YXRpb246dGhpcy5mcm9tTWFya3VwKGMubWFya2Rvd25EZXNjcmlwdGlvbil8fGMuZGVzY3JpcHRpb258fCIifTtjLnN1Z2dlc3RTb3J0VGV4dCE9PXZvaWQgMCYmKGQuc29ydFRleHQ9Yy5zdWdnZXN0U29ydFRleHQpLGQuaW5zZXJ0VGV4dCYmUXQoZC5pbnNlcnRUZXh0LGAkMSR7aX1gKSYmKGQuY29tbWFuZD17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSkscy5hZGQoZCl9fSk7Y29uc3QgdT1sLnNjaGVtYS5wcm9wZXJ0eU5hbWVzO2lmKHR5cGVvZiB1PT0ib2JqZWN0IiYmIXUuZGVwcmVjYXRpb25NZXNzYWdlJiYhdS5kb05vdFN1Z2dlc3Qpe2NvbnN0IGg9KGMsZD12b2lkIDApPT57Y29uc3QgbT17a2luZDp5ZS5Qcm9wZXJ0eSxsYWJlbDpjLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoYyx2b2lkIDAscixpKSxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZmlsdGVyVGV4dDp0aGlzLmdldEZpbHRlclRleHRGb3JWYWx1ZShjKSxkb2N1bWVudGF0aW9uOmR8fHRoaXMuZnJvbU1hcmt1cCh1Lm1hcmtkb3duRGVzY3JpcHRpb24pfHx1LmRlc2NyaXB0aW9ufHwiIn07dS5zdWdnZXN0U29ydFRleHQhPT12b2lkIDAmJihtLnNvcnRUZXh0PXUuc3VnZ2VzdFNvcnRUZXh0KSxtLmluc2VydFRleHQmJlF0KG0uaW5zZXJ0VGV4dCxgJDEke2l9YCkmJihtLmNvbW1hbmQ9e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In0pLHMuYWRkKG0pfTtpZih1LmVudW0pZm9yKGxldCBjPTA7Yzx1LmVudW0ubGVuZ3RoO2MrKyl7bGV0IGQ7dS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMmJmM8dS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMubGVuZ3RoP2Q9dGhpcy5mcm9tTWFya3VwKHUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW2NdKTp1LmVudW1EZXNjcmlwdGlvbnMmJmM8dS5lbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmKGQ9dS5lbnVtRGVzY3JpcHRpb25zW2NdKSxoKHUuZW51bVtjXSxkKX11LmNvbnN0JiZoKHUuY29uc3QpfX19KX1nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucyhlLHQsbixyKXtjb25zdCBpPXM9PntzLnByb3BlcnRpZXMuZm9yRWFjaChhPT57Y29uc3QgbD1hLmtleU5vZGUudmFsdWU7ci5hZGQoe2tpbmQ6eWUuUHJvcGVydHksbGFiZWw6bCxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGwsIiIpLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldCxmaWx0ZXJUZXh0OnRoaXMuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGwpLGRvY3VtZW50YXRpb246IiJ9KX0pfTtpZih0LnBhcmVudClpZih0LnBhcmVudC50eXBlPT09InByb3BlcnR5Iil7Y29uc3Qgcz10LnBhcmVudC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoYT0+KGEudHlwZT09PSJwcm9wZXJ0eSImJmEhPT10LnBhcmVudCYmYS5rZXlOb2RlLnZhbHVlPT09cyYmYS52YWx1ZU5vZGUmJmEudmFsdWVOb2RlLnR5cGU9PT0ib2JqZWN0IiYmaShhLnZhbHVlTm9kZSksITApKX1lbHNlIHQucGFyZW50LnR5cGU9PT0iYXJyYXkiJiZ0LnBhcmVudC5pdGVtcy5mb3JFYWNoKHM9PntzLnR5cGU9PT0ib2JqZWN0IiYmcyE9PXQmJmkocyl9KTtlbHNlIHQudHlwZT09PSJvYmplY3QiJiZyLmFkZCh7a2luZDp5ZS5Qcm9wZXJ0eSxsYWJlbDoiJHNjaGVtYSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eSgiJHNjaGVtYSIsdm9pZCAwLCEwLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIixmaWx0ZXJUZXh0OnRoaXMuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKCIkc2NoZW1hIil9KX1nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyLGkpe2xldCBzPW47aWYodCYmKHQudHlwZT09PSJzdHJpbmcifHx0LnR5cGU9PT0ibnVtYmVyInx8dC50eXBlPT09ImJvb2xlYW4ifHx0LnR5cGU9PT0ibnVsbCIpJiYocz10Lm9mZnNldCt0Lmxlbmd0aCx0PXQucGFyZW50KSwhdCl7aS5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6IkVtcHR5IG9iamVjdCIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSwiIiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxpLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJhcnJheSIpLGxhYmVsOiJFbXB0eSBhcnJheSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShbXSwiIiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KTtyZXR1cm59Y29uc3QgYT10aGlzLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIocixzKSxsPW89PntvLnBhcmVudCYmIURvKG8ucGFyZW50LG4sITApJiZpLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKG8udHlwZSksbGFiZWw6dGhpcy5nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGUobyxyKSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZShvLHIsYSksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxvLnR5cGU9PT0iYm9vbGVhbiImJnRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighby52YWx1ZSxhLGkpfTtpZih0LnR5cGU9PT0icHJvcGVydHkiJiZuPih0LmNvbG9uT2Zmc2V0fHwwKSl7Y29uc3Qgbz10LnZhbHVlTm9kZTtpZihvJiYobj5vLm9mZnNldCtvLmxlbmd0aHx8by50eXBlPT09Im9iamVjdCJ8fG8udHlwZT09PSJhcnJheSIpKXJldHVybjtjb25zdCB1PXQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KGg9PihoLnR5cGU9PT0icHJvcGVydHkiJiZoLmtleU5vZGUudmFsdWU9PT11JiZoLnZhbHVlTm9kZSYmbChoLnZhbHVlTm9kZSksITApKSx1PT09IiRzY2hlbWEiJiZ0LnBhcmVudCYmIXQucGFyZW50LnBhcmVudCYmdGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhhLGkpfWlmKHQudHlwZT09PSJhcnJheSIpaWYodC5wYXJlbnQmJnQucGFyZW50LnR5cGU9PT0icHJvcGVydHkiKXtjb25zdCBvPXQucGFyZW50LmtleU5vZGUudmFsdWU7ZS52aXNpdCh1PT4odS50eXBlPT09InByb3BlcnR5IiYmdS5rZXlOb2RlLnZhbHVlPT09byYmdS52YWx1ZU5vZGUmJnUudmFsdWVOb2RlLnR5cGU9PT0iYXJyYXkiJiZ1LnZhbHVlTm9kZS5pdGVtcy5mb3JFYWNoKGwpLCEwKSl9ZWxzZSB0Lml0ZW1zLmZvckVhY2gobCl9Z2V0VmFsdWVDb21wbGV0aW9ucyhlLHQsbixyLGkscyxhKXtsZXQgbD1yLG8sdTtpZihuJiYobi50eXBlPT09InN0cmluZyJ8fG4udHlwZT09PSJudW1iZXIifHxuLnR5cGU9PT0iYm9vbGVhbiJ8fG4udHlwZT09PSJudWxsIikmJihsPW4ub2Zmc2V0K24ubGVuZ3RoLHU9bixuPW4ucGFyZW50KSwhbil7dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUuc2NoZW1hLCIiLHMsYSk7cmV0dXJufWlmKG4udHlwZT09PSJwcm9wZXJ0eSImJnI+KG4uY29sb25PZmZzZXR8fDApKXtjb25zdCBoPW4udmFsdWVOb2RlO2lmKGgmJnI+aC5vZmZzZXQraC5sZW5ndGgpcmV0dXJuO289bi5rZXlOb2RlLnZhbHVlLG49bi5wYXJlbnR9aWYobiYmKG8hPT12b2lkIDB8fG4udHlwZT09PSJhcnJheSIpKXtjb25zdCBoPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihpLGwpLGM9dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsbi5vZmZzZXQsdSk7Zm9yKGNvbnN0IGQgb2YgYylpZihkLm5vZGU9PT1uJiYhZC5pbnZlcnRlZCYmZC5zY2hlbWEpe2lmKG4udHlwZT09PSJhcnJheSImJmQuc2NoZW1hLml0ZW1zKXtsZXQgbT1zO2lmKGQuc2NoZW1hLnVuaXF1ZUl0ZW1zKXtjb25zdCBnPW5ldyBTZXQ7bi5jaGlsZHJlbi5mb3JFYWNoKHA9PntwLnR5cGUhPT0iYXJyYXkiJiZwLnR5cGUhPT0ib2JqZWN0IiYmZy5hZGQodGhpcy5nZXRMYWJlbEZvclZhbHVlKHV0KHApKSl9KSxtPXsuLi5zLGFkZChwKXtnLmhhcyhwLmxhYmVsKXx8cy5hZGQocCl9fX1pZihBcnJheS5pc0FycmF5KGQuc2NoZW1hLml0ZW1zKSl7Y29uc3QgZz10aGlzLmZpbmRJdGVtQXRPZmZzZXQobixpLHIpO2c8ZC5zY2hlbWEuaXRlbXMubGVuZ3RoJiZ0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZC5zY2hlbWEuaXRlbXNbZ10saCxtLGEpfWVsc2UgdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGQuc2NoZW1hLml0ZW1zLGgsbSxhKX1pZihvIT09dm9pZCAwKXtsZXQgbT0hMTtpZihkLnNjaGVtYS5wcm9wZXJ0aWVzKXtjb25zdCBnPWQuc2NoZW1hLnByb3BlcnRpZXNbb107ZyYmKG09ITAsdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGcsaCxzLGEpKX1pZihkLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyYmIW0pe2Zvcihjb25zdCBnIG9mIE9iamVjdC5rZXlzKGQuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKSlpZihNbihnKT8udGVzdChvKSl7bT0hMDtjb25zdCB2PWQuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzW2ddO3RoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyh2LGgscyxhKX19aWYoZC5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMmJiFtKXtjb25zdCBnPWQuc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO3RoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhnLGgscyxhKX19fW89PT0iJHNjaGVtYSImJiFuLnBhcmVudCYmdGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhoLHMpLGEuYm9vbGVhbiYmKHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMCxoLHMpLHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMSxoLHMpKSxhLm51bGwmJnRoaXMuYWRkTnVsbFZhbHVlQ29tcGxldGlvbihoLHMpfX1nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnMoZSx0LG4scixpLHMpe2lmKCF0KXRoaXMuY29udHJpYnV0aW9ucy5mb3JFYWNoKGE9Pntjb25zdCBsPWEuY29sbGVjdERlZmF1bHRDb21wbGV0aW9ucyhyLnVyaSxpKTtsJiZzLnB1c2gobCl9KTtlbHNlIGlmKCh0LnR5cGU9PT0ic3RyaW5nInx8dC50eXBlPT09Im51bWJlciJ8fHQudHlwZT09PSJib29sZWFuInx8dC50eXBlPT09Im51bGwiKSYmKHQ9dC5wYXJlbnQpLHQmJnQudHlwZT09PSJwcm9wZXJ0eSImJm4+KHQuY29sb25PZmZzZXR8fDApKXtjb25zdCBhPXQua2V5Tm9kZS52YWx1ZSxsPXQudmFsdWVOb2RlO2lmKCghbHx8bjw9bC5vZmZzZXQrbC5sZW5ndGgpJiZ0LnBhcmVudCl7Y29uc3Qgbz10aSh0LnBhcmVudCk7dGhpcy5jb250cmlidXRpb25zLmZvckVhY2godT0+e2NvbnN0IGg9dS5jb2xsZWN0VmFsdWVDb21wbGV0aW9ucyhyLnVyaSxvLGEsaSk7aCYmcy5wdXNoKGgpfSl9fX1hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIpe3R5cGVvZiBlPT0ib2JqZWN0IiYmKHRoaXMuYWRkRW51bVZhbHVlQ29tcGxldGlvbnMoZSx0LG4pLHRoaXMuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnMoZSx0LG4pLHRoaXMuY29sbGVjdFR5cGVzKGUsciksQXJyYXkuaXNBcnJheShlLmFsbE9mKSYmZS5hbGxPZi5mb3JFYWNoKGk9PnRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhpLHQsbixyKSksQXJyYXkuaXNBcnJheShlLmFueU9mKSYmZS5hbnlPZi5mb3JFYWNoKGk9PnRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhpLHQsbixyKSksQXJyYXkuaXNBcnJheShlLm9uZU9mKSYmZS5vbmVPZi5mb3JFYWNoKGk9PnRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhpLHQsbixyKSkpfWFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHI9MCl7bGV0IGk9ITE7aWYoUmUoZS5kZWZhdWx0KSl7bGV0IHM9ZS50eXBlLGE9ZS5kZWZhdWx0O2ZvcihsZXQgbz1yO28+MDtvLS0pYT1bYV0scz0iYXJyYXkiO2NvbnN0IGw9e2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChzKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUoYSksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShhLHQpLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldH07dGhpcy5kb2VzU3VwcG9ydHNMYWJlbERldGFpbHMoKT9sLmxhYmVsRGV0YWlscz17ZGVzY3JpcHRpb246RSgiRGVmYXVsdCB2YWx1ZSIpfTpsLmRldGFpbD1FKCJEZWZhdWx0IHZhbHVlIiksbi5hZGQobCksaT0hMH1BcnJheS5pc0FycmF5KGUuZXhhbXBsZXMpJiZlLmV4YW1wbGVzLmZvckVhY2gocz0+e2xldCBhPWUudHlwZSxsPXM7Zm9yKGxldCBvPXI7bz4wO28tLSlsPVtsXSxhPSJhcnJheSI7bi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChhKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUobCksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShsLHQpLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldH0pLGk9ITB9KSxBcnJheS5pc0FycmF5KGUuZGVmYXVsdFNuaXBwZXRzKSYmZS5kZWZhdWx0U25pcHBldHMuZm9yRWFjaChzPT57bGV0IGE9ZS50eXBlLGw9cy5ib2R5LG89cy5sYWJlbCx1LGg7aWYoUmUobCkpe2UudHlwZTtmb3IobGV0IGM9cjtjPjA7Yy0tKWw9W2xdO3U9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKGwsdCksaD10aGlzLmdldEZpbHRlclRleHRGb3JTbmlwcGV0VmFsdWUobCksbz1vfHx0aGlzLmdldExhYmVsRm9yU25pcHBldFZhbHVlKGwpfWVsc2UgaWYodHlwZW9mIHMuYm9keVRleHQ9PSJzdHJpbmciKXtsZXQgYz0iIixkPSIiLG09IiI7Zm9yKGxldCBnPXI7Zz4wO2ctLSljPWMrbStgWwpgLGQ9ZCtgCmArbSsiXSIsbSs9IgkiLGE9ImFycmF5Ijt1PWMrbStzLmJvZHlUZXh0LnNwbGl0KGAKYCkuam9pbihgCmArbSkrZCt0LG89b3x8dSxoPXUucmVwbGFjZSgvW1xuXS9nLCIiKX1lbHNlIHJldHVybjtuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGEpLGxhYmVsOm8sZG9jdW1lbnRhdGlvbjp0aGlzLmZyb21NYXJrdXAocy5tYXJrZG93bkRlc2NyaXB0aW9uKXx8cy5kZXNjcmlwdGlvbixpbnNlcnRUZXh0OnUsaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGZpbHRlclRleHQ6aH0pLGk9ITB9KSwhaSYmdHlwZW9mIGUuaXRlbXM9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlLml0ZW1zKSYmcjw1JiZ0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKGUuaXRlbXMsdCxuLHIrMSl9YWRkRW51bVZhbHVlQ29tcGxldGlvbnMoZSx0LG4pe2lmKFJlKGUuY29uc3QpJiZuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKGUuY29uc3QpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZS5jb25zdCx0KSxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjp0aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8ZS5kZXNjcmlwdGlvbn0pLEFycmF5LmlzQXJyYXkoZS5lbnVtKSlmb3IobGV0IHI9MCxpPWUuZW51bS5sZW5ndGg7cjxpO3IrKyl7Y29uc3Qgcz1lLmVudW1bcl07bGV0IGE9dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25EZXNjcmlwdGlvbil8fGUuZGVzY3JpcHRpb247ZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMmJnI8ZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiZ0aGlzLmRvZXNTdXBwb3J0TWFya2Rvd24oKT9hPXRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1tyXSk6ZS5lbnVtRGVzY3JpcHRpb25zJiZyPGUuZW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJihhPWUuZW51bURlc2NyaXB0aW9uc1tyXSksbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShzKSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHMsdCksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246YX0pfX1jb2xsZWN0VHlwZXMoZSx0KXtpZihBcnJheS5pc0FycmF5KGUuZW51bSl8fFJlKGUuY29uc3QpKXJldHVybjtjb25zdCBuPWUudHlwZTtBcnJheS5pc0FycmF5KG4pP24uZm9yRWFjaChyPT50W3JdPSEwKTpuJiYodFtuXT0hMCl9YWRkRmlsbGVyVmFsdWVDb21wbGV0aW9ucyhlLHQsbil7ZS5vYmplY3QmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm9iamVjdCIpLGxhYmVsOiJ7fSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUoe30sdCksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRldGFpbDpFKCJOZXcgb2JqZWN0IiksZG9jdW1lbnRhdGlvbjoiIn0pLGUuYXJyYXkmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IltdIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZShbXSx0KSxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZGV0YWlsOkUoIk5ldyBhcnJheSIpLGRvY3VtZW50YXRpb246IiJ9KX1hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKGUsdCxuKXtuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJib29sZWFuIiksbGFiZWw6ZT8idHJ1ZSI6ImZhbHNlIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX1hZGROdWxsVmFsdWVDb21wbGV0aW9uKGUsdCl7dC5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgibnVsbCIpLGxhYmVsOiJudWxsIixpbnNlcnRUZXh0OiJudWxsIitlLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9YWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnMoZSx0KXt0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcyhyPT5yPT09Imh0dHAifHxyPT09Imh0dHBzIikuZm9yRWFjaChyPT57ci5zdGFydHNXaXRoKCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LSIpJiYocj1yKyIjIiksdC5hZGQoe2tpbmQ6eWUuTW9kdWxlLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShyKSxmaWx0ZXJUZXh0OnRoaXMuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKHIpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUocixlKSxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSl9Z2V0TGFiZWxGb3JWYWx1ZShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9Z2V0VmFsdWVGcm9tTGFiZWwoZSl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Z2V0RmlsdGVyVGV4dEZvclZhbHVlKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX1nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfWdldExhYmVsRm9yU25pcHBldFZhbHVlKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfWdldEluc2VydFRleHRGb3JQbGFpblRleHQoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcXCRcfV0vZywiXFwkJiIpfWdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpe2NvbnN0IG49SlNPTi5zdHJpbmdpZnkoZSxudWxsLCIJIik7cmV0dXJuIG49PT0ie30iPyJ7JDF9Iit0Om49PT0iW10iPyJbJDFdIit0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChuK3QpfWdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWUoZSx0KXtyZXR1cm4gbmkoZSwiIixyPT50eXBlb2Ygcj09InN0cmluZyImJnJbMF09PT0iXiI/ci5zdWJzdHIoMSk6SlNPTi5zdHJpbmdpZnkocikpK3R9Z2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZShlLHQpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJvYmplY3QiOnJldHVybiBlPT09bnVsbD8iJHsxOm51bGx9Iit0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCk7Y2FzZSJzdHJpbmciOmxldCBuPUpTT04uc3RyaW5naWZ5KGUpO3JldHVybiBuPW4uc3Vic3RyKDEsbi5sZW5ndGgtMiksbj10aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQobiksJyIkezE6JytuKyd9IicrdDtjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4iJHsxOiIrSlNPTi5zdHJpbmdpZnkoZSkrIn0iK3R9cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCl9Z2V0U3VnZ2VzdGlvbktpbmQoZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3QgdD1lO2U9dC5sZW5ndGg+MD90WzBdOnZvaWQgMH1pZighZSlyZXR1cm4geWUuVmFsdWU7c3dpdGNoKGUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4geWUuVmFsdWU7Y2FzZSJvYmplY3QiOnJldHVybiB5ZS5Nb2R1bGU7Y2FzZSJwcm9wZXJ0eSI6cmV0dXJuIHllLlByb3BlcnR5O2RlZmF1bHQ6cmV0dXJuIHllLlZhbHVlfX1nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGUoZSx0KXtzd2l0Y2goZS50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4iW10iO2Nhc2Uib2JqZWN0IjpyZXR1cm4ie30iO2RlZmF1bHQ6cmV0dXJuIHQuZ2V0VGV4dCgpLnN1YnN0cihlLm9mZnNldCxlLmxlbmd0aCl9fWdldEluc2VydFRleHRGb3JNYXRjaGluZ05vZGUoZSx0LG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShbXSxuKTtjYXNlIm9iamVjdCI6cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHt9LG4pO2RlZmF1bHQ6Y29uc3Qgcj10LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpK247cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChyKX19Z2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGUsdCxuLHIpe2NvbnN0IGk9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSwiIik7aWYoIW4pcmV0dXJuIGk7Y29uc3Qgcz1pKyI6ICI7bGV0IGEsbD0wO2lmKHQpe2lmKEFycmF5LmlzQXJyYXkodC5kZWZhdWx0U25pcHBldHMpKXtpZih0LmRlZmF1bHRTbmlwcGV0cy5sZW5ndGg9PT0xKXtjb25zdCBvPXQuZGVmYXVsdFNuaXBwZXRzWzBdLmJvZHk7UmUobykmJihhPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZShvLCIiKSl9bCs9dC5kZWZhdWx0U25pcHBldHMubGVuZ3RofWlmKHQuZW51bSYmKCFhJiZ0LmVudW0ubGVuZ3RoPT09MSYmKGE9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZW51bVswXSwiIikpLGwrPXQuZW51bS5sZW5ndGgpLFJlKHQuY29uc3QpJiYoYXx8KGE9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuY29uc3QsIiIpKSxsKyspLFJlKHQuZGVmYXVsdCkmJihhfHwoYT10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5kZWZhdWx0LCIiKSksbCsrKSxBcnJheS5pc0FycmF5KHQuZXhhbXBsZXMpJiZ0LmV4YW1wbGVzLmxlbmd0aCYmKGF8fChhPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmV4YW1wbGVzWzBdLCIiKSksbCs9dC5leGFtcGxlcy5sZW5ndGgpLGw9PT0wKXtsZXQgbz1BcnJheS5pc0FycmF5KHQudHlwZSk/dC50eXBlWzBdOnQudHlwZTtzd2l0Y2gob3x8KHQucHJvcGVydGllcz9vPSJvYmplY3QiOnQuaXRlbXMmJihvPSJhcnJheSIpKSxvKXtjYXNlImJvb2xlYW4iOmE9IiQxIjticmVhaztjYXNlInN0cmluZyI6YT0nIiQxIic7YnJlYWs7Y2FzZSJvYmplY3QiOmE9InskMX0iO2JyZWFrO2Nhc2UiYXJyYXkiOmE9IlskMV0iO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOmE9IiR7MTowfSI7YnJlYWs7Y2FzZSJudWxsIjphPSIkezE6bnVsbH0iO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGl9fX1yZXR1cm4oIWF8fGw+MSkmJihhPSIkMSIpLHMrYStyfWdldEN1cnJlbnRXb3JkKGUsdCl7bGV0IG49dC0xO2NvbnN0IHI9ZS5nZXRUZXh0KCk7Zm9yKDtuPj0wJiZgIAkKXHJcdiI6e1ssXX1gLmluZGV4T2Yoci5jaGFyQXQobikpPT09LTE7KW4tLTtyZXR1cm4gci5zdWJzdHJpbmcobisxLHQpfWV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoZSx0KXtjb25zdCBuPWF0KGUuZ2V0VGV4dCgpLCEwKTtzd2l0Y2gobi5zZXRQb3NpdGlvbih0KSxuLnNjYW4oKSl7Y2FzZSA1OmNhc2UgMjpjYXNlIDQ6Y2FzZSAxNzpyZXR1cm4iIjtkZWZhdWx0OnJldHVybiIsIn19ZmluZEl0ZW1BdE9mZnNldChlLHQsbil7Y29uc3Qgcj1hdCh0LmdldFRleHQoKSwhMCksaT1lLml0ZW1zO2ZvcihsZXQgcz1pLmxlbmd0aC0xO3M+PTA7cy0tKXtjb25zdCBhPWlbc107aWYobj5hLm9mZnNldCthLmxlbmd0aClyZXR1cm4gci5zZXRQb3NpdGlvbihhLm9mZnNldCthLmxlbmd0aCksci5zY2FuKCk9PT01JiZuPj1yLmdldFRva2VuT2Zmc2V0KCkrci5nZXRUb2tlbkxlbmd0aCgpP3MrMTpzO2lmKG4+PWEub2Zmc2V0KXJldHVybiBzfXJldHVybiAwfWlzSW5Db21tZW50KGUsdCxuKXtjb25zdCByPWF0KGUuZ2V0VGV4dCgpLCExKTtyLnNldFBvc2l0aW9uKHQpO2xldCBpPXIuc2NhbigpO2Zvcig7aSE9PTE3JiZyLmdldFRva2VuT2Zmc2V0KCkrci5nZXRUb2tlbkxlbmd0aCgpPG47KWk9ci5zY2FuKCk7cmV0dXJuKGk9PT0xMnx8aT09PTEzKSYmci5nZXRUb2tlbk9mZnNldCgpPD1ufWZyb21NYXJrdXAoZSl7aWYoZSYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCkpcmV0dXJue2tpbmQ6b3QuTWFya2Rvd24sdmFsdWU6ZX19ZG9lc1N1cHBvcnRNYXJrZG93bigpe2lmKCFSZSh0aGlzLnN1cHBvcnRzTWFya2Rvd24pKXtjb25zdCBlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudD8uY29tcGxldGlvbj8uY29tcGxldGlvbkl0ZW0/LmRvY3VtZW50YXRpb25Gb3JtYXQ7dGhpcy5zdXBwb3J0c01hcmtkb3duPUFycmF5LmlzQXJyYXkoZSkmJmUuaW5kZXhPZihvdC5NYXJrZG93bikhPT0tMX1yZXR1cm4gdGhpcy5zdXBwb3J0c01hcmtkb3dufWRvZXNTdXBwb3J0c0NvbW1pdENoYXJhY3RlcnMoKXtyZXR1cm4gUmUodGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnMpfHwodGhpcy5sYWJlbERldGFpbHNTdXBwb3J0PXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudD8uY29tcGxldGlvbj8uY29tcGxldGlvbkl0ZW0/LmNvbW1pdENoYXJhY3RlcnNTdXBwb3J0KSx0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVyc31kb2VzU3VwcG9ydHNMYWJlbERldGFpbHMoKXtyZXR1cm4gUmUodGhpcy5sYWJlbERldGFpbHNTdXBwb3J0KXx8KHRoaXMubGFiZWxEZXRhaWxzU3VwcG9ydD10aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQ/LmNvbXBsZXRpb24/LmNvbXBsZXRpb25JdGVtPy5sYWJlbERldGFpbHNTdXBwb3J0KSx0aGlzLmxhYmVsRGV0YWlsc1N1cHBvcnR9fSxvMT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQ9W10sbil7dGhpcy5zY2hlbWFTZXJ2aWNlPWUsdGhpcy5jb250cmlidXRpb25zPXQsdGhpcy5wcm9taXNlPW58fFByb21pc2V9ZG9Ib3ZlcihlLHQsbil7Y29uc3Qgcj1lLm9mZnNldEF0KHQpO2xldCBpPW4uZ2V0Tm9kZUZyb21PZmZzZXQocik7aWYoIWl8fChpLnR5cGU9PT0ib2JqZWN0Inx8aS50eXBlPT09ImFycmF5IikmJnI+aS5vZmZzZXQrMSYmcjxpLm9mZnNldCtpLmxlbmd0aC0xKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShudWxsKTtjb25zdCBzPWk7aWYoaS50eXBlPT09InN0cmluZyIpe2NvbnN0IHU9aS5wYXJlbnQ7aWYodSYmdS50eXBlPT09InByb3BlcnR5IiYmdS5rZXlOb2RlPT09aSYmKGk9dS52YWx1ZU5vZGUsIWkpKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShudWxsKX1jb25zdCBhPXEuY3JlYXRlKGUucG9zaXRpb25BdChzLm9mZnNldCksZS5wb3NpdGlvbkF0KHMub2Zmc2V0K3MubGVuZ3RoKSksbD11PT4oe2NvbnRlbnRzOnUscmFuZ2U6YX0pLG89dGkoaSk7Zm9yKGxldCB1PXRoaXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTt1Pj0wO3UtLSl7Y29uc3QgYz10aGlzLmNvbnRyaWJ1dGlvbnNbdV0uZ2V0SW5mb0NvbnRyaWJ1dGlvbihlLnVyaSxvKTtpZihjKXJldHVybiBjLnRoZW4oZD0+bChkKSl9cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSxuKS50aGVuKHU9PntpZih1JiZpKXtjb25zdCBoPW4uZ2V0TWF0Y2hpbmdTY2hlbWFzKHUuc2NoZW1hLGkub2Zmc2V0KTtsZXQgYyxkLG0sZztoLmV2ZXJ5KHY9PntpZih2Lm5vZGU9PT1pJiYhdi5pbnZlcnRlZCYmdi5zY2hlbWEmJihjPWN8fHYuc2NoZW1hLnRpdGxlLGQ9ZHx8di5zY2hlbWEubWFya2Rvd25EZXNjcmlwdGlvbnx8cmkodi5zY2hlbWEuZGVzY3JpcHRpb24pLHYuc2NoZW1hLmVudW0pKXtjb25zdCB3PXYuc2NoZW1hLmVudW0uaW5kZXhPZih1dChpKSk7di5zY2hlbWEubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zP209di5zY2hlbWEubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW3ddOnYuc2NoZW1hLmVudW1EZXNjcmlwdGlvbnMmJihtPXJpKHYuc2NoZW1hLmVudW1EZXNjcmlwdGlvbnNbd10pKSxtJiYoZz12LnNjaGVtYS5lbnVtW3ddLHR5cGVvZiBnIT0ic3RyaW5nIiYmKGc9SlNPTi5zdHJpbmdpZnkoZykpKX1yZXR1cm4hMH0pO2xldCBwPSIiO3JldHVybiBjJiYocD1yaShjKSksZCYmKHAubGVuZ3RoPjAmJihwKz1gCgpgKSxwKz1kKSxtJiYocC5sZW5ndGg+MCYmKHArPWAKCmApLHArPWBcYCR7bDEoZyl9XGA6ICR7bX1gKSxsKFtwXSl9cmV0dXJuIG51bGx9KX19O2Z1bmN0aW9uIHJpKGUpe2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvKFteXG5ccl0pKFxyP1xuKShbXlxuXHJdKS9nbSxgJDEKCiQzYCkucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfWZ1bmN0aW9uIGwxKGUpe3JldHVybiBlLmluZGV4T2YoImAiKSE9PS0xPyJgYCAiK2UrIiBgYCI6ZX12YXIgdTE9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmpzb25TY2hlbWFTZXJ2aWNlPWUsdGhpcy5wcm9taXNlPXQsdGhpcy52YWxpZGF0aW9uRW5hYmxlZD0hMH1jb25maWd1cmUoZSl7ZSYmKHRoaXMudmFsaWRhdGlvbkVuYWJsZWQ9ZS52YWxpZGF0ZSE9PSExLHRoaXMuY29tbWVudFNldmVyaXR5PWUuYWxsb3dDb21tZW50cz92b2lkIDA6eGUuRXJyb3IpfWRvVmFsaWRhdGlvbihlLHQsbixyKXtpZighdGhpcy52YWxpZGF0aW9uRW5hYmxlZClyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUoW10pO2NvbnN0IGk9W10scz17fSxhPW89Pntjb25zdCB1PW8ucmFuZ2Uuc3RhcnQubGluZSsiICIrby5yYW5nZS5zdGFydC5jaGFyYWN0ZXIrIiAiK28ubWVzc2FnZTtzW3VdfHwoc1t1XT0hMCxpLnB1c2gobykpfSxsPW89PntsZXQgdT1uPy50cmFpbGluZ0NvbW1hcz9GbihuLnRyYWlsaW5nQ29tbWFzKTp4ZS5FcnJvcixoPW4/LmNvbW1lbnRzP0ZuKG4uY29tbWVudHMpOnRoaXMuY29tbWVudFNldmVyaXR5LGM9bj8uc2NoZW1hVmFsaWRhdGlvbj9GbihuLnNjaGVtYVZhbGlkYXRpb24pOnhlLldhcm5pbmcsZD1uPy5zY2hlbWFSZXF1ZXN0P0ZuKG4uc2NoZW1hUmVxdWVzdCk6eGUuV2FybmluZztpZihvKXtjb25zdCBtPShnLHApPT57aWYodC5yb290JiZkKXtjb25zdCB2PXQucm9vdCx3PXYudHlwZT09PSJvYmplY3QiP3YucHJvcGVydGllc1swXTp2b2lkIDA7aWYodyYmdy5rZXlOb2RlLnZhbHVlPT09IiRzY2hlbWEiKXtjb25zdCBfPXcudmFsdWVOb2RlfHx3LHg9cS5jcmVhdGUoZS5wb3NpdGlvbkF0KF8ub2Zmc2V0KSxlLnBvc2l0aW9uQXQoXy5vZmZzZXQrXy5sZW5ndGgpKTthKHplLmNyZWF0ZSh4LGcsZCxwKSl9ZWxzZXtjb25zdCBfPXEuY3JlYXRlKGUucG9zaXRpb25BdCh2Lm9mZnNldCksZS5wb3NpdGlvbkF0KHYub2Zmc2V0KzEpKTthKHplLmNyZWF0ZShfLGcsZCxwKSl9fX07aWYoby5lcnJvcnMubGVuZ3RoKW0oby5lcnJvcnNbMF0sSC5TY2hlbWFSZXNvbHZlRXJyb3IpO2Vsc2UgaWYoYyl7Zm9yKGNvbnN0IHAgb2Ygby53YXJuaW5ncyltKHAsSC5TY2hlbWFVbnN1cHBvcnRlZEZlYXR1cmUpO2NvbnN0IGc9dC52YWxpZGF0ZShlLG8uc2NoZW1hLGMsbj8uc2NoZW1hRHJhZnQpO2cmJmcuZm9yRWFjaChhKX1VbyhvLnNjaGVtYSkmJihoPXZvaWQgMCksQm8oby5zY2hlbWEpJiYodT12b2lkIDApfWZvcihjb25zdCBtIG9mIHQuc3ludGF4RXJyb3JzKXtpZihtLmNvZGU9PT1ILlRyYWlsaW5nQ29tbWEpe2lmKHR5cGVvZiB1IT0ibnVtYmVyIiljb250aW51ZTttLnNldmVyaXR5PXV9YShtKX1pZih0eXBlb2YgaD09Im51bWJlciIpe2NvbnN0IG09RSgiQ29tbWVudHMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gSlNPTi4iKTt0LmNvbW1lbnRzLmZvckVhY2goZz0+e2EoemUuY3JlYXRlKGcsbSxoLEguQ29tbWVudE5vdFBlcm1pdHRlZCkpfSl9cmV0dXJuIGl9O2lmKHIpe2NvbnN0IG89ci5pZHx8InNjaGVtYXNlcnZpY2U6Ly91bnRpdGxlZC8iK2MxKys7cmV0dXJuIHRoaXMuanNvblNjaGVtYVNlcnZpY2UucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYSh7dXJpOm8sc2NoZW1hOnJ9KS5nZXRSZXNvbHZlZFNjaGVtYSgpLnRoZW4oaD0+bChoKSl9cmV0dXJuIHRoaXMuanNvblNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbihvPT5sKG8pKX1nZXRMYW5ndWFnZVN0YXR1cyhlLHQpe3JldHVybntzY2hlbWFzOnRoaXMuanNvblNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hVVJJc0ZvclJlc291cmNlKGUudXJpLHQpfX19LGMxPTA7ZnVuY3Rpb24gVW8oZSl7aWYoZSYmdHlwZW9mIGU9PSJvYmplY3QiKXtpZihGZShlLmFsbG93Q29tbWVudHMpKXJldHVybiBlLmFsbG93Q29tbWVudHM7aWYoZS5hbGxPZilmb3IoY29uc3QgdCBvZiBlLmFsbE9mKXtjb25zdCBuPVVvKHQpO2lmKEZlKG4pKXJldHVybiBufX19ZnVuY3Rpb24gQm8oZSl7aWYoZSYmdHlwZW9mIGU9PSJvYmplY3QiKXtpZihGZShlLmFsbG93VHJhaWxpbmdDb21tYXMpKXJldHVybiBlLmFsbG93VHJhaWxpbmdDb21tYXM7Y29uc3QgdD1lO2lmKEZlKHQuYWxsb3dzVHJhaWxpbmdDb21tYXMpKXJldHVybiB0LmFsbG93c1RyYWlsaW5nQ29tbWFzO2lmKGUuYWxsT2YpZm9yKGNvbnN0IG4gb2YgZS5hbGxPZil7Y29uc3Qgcj1CbyhuKTtpZihGZShyKSlyZXR1cm4gcn19fWZ1bmN0aW9uIEZuKGUpe3N3aXRjaChlKXtjYXNlImVycm9yIjpyZXR1cm4geGUuRXJyb3I7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4geGUuV2FybmluZztjYXNlImlnbm9yZSI6cmV0dXJufX12YXIgcW89NDgsZjE9NTcsaDE9NjUsVm49OTcsZDE9MTAyO2Z1bmN0aW9uIHRlKGUpe3JldHVybiBlPHFvPzA6ZTw9ZjE/ZS1xbzooZTxWbiYmKGUrPVZuLWgxKSxlPj1WbiYmZTw9ZDE/ZS1WbisxMDowKX1mdW5jdGlvbiBtMShlKXtpZihlWzBdPT09IiMiKXN3aXRjaChlLmxlbmd0aCl7Y2FzZSA0OnJldHVybntyZWQ6dGUoZS5jaGFyQ29kZUF0KDEpKSoxNy8yNTUsZ3JlZW46dGUoZS5jaGFyQ29kZUF0KDIpKSoxNy8yNTUsYmx1ZTp0ZShlLmNoYXJDb2RlQXQoMykpKjE3LzI1NSxhbHBoYToxfTtjYXNlIDU6cmV0dXJue3JlZDp0ZShlLmNoYXJDb2RlQXQoMSkpKjE3LzI1NSxncmVlbjp0ZShlLmNoYXJDb2RlQXQoMikpKjE3LzI1NSxibHVlOnRlKGUuY2hhckNvZGVBdCgzKSkqMTcvMjU1LGFscGhhOnRlKGUuY2hhckNvZGVBdCg0KSkqMTcvMjU1fTtjYXNlIDc6cmV0dXJue3JlZDoodGUoZS5jaGFyQ29kZUF0KDEpKSoxNit0ZShlLmNoYXJDb2RlQXQoMikpKS8yNTUsZ3JlZW46KHRlKGUuY2hhckNvZGVBdCgzKSkqMTYrdGUoZS5jaGFyQ29kZUF0KDQpKSkvMjU1LGJsdWU6KHRlKGUuY2hhckNvZGVBdCg1KSkqMTYrdGUoZS5jaGFyQ29kZUF0KDYpKSkvMjU1LGFscGhhOjF9O2Nhc2UgOTpyZXR1cm57cmVkOih0ZShlLmNoYXJDb2RlQXQoMSkpKjE2K3RlKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjoodGUoZS5jaGFyQ29kZUF0KDMpKSoxNit0ZShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZToodGUoZS5jaGFyQ29kZUF0KDUpKSoxNit0ZShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6KHRlKGUuY2hhckNvZGVBdCg3KSkqMTYrdGUoZS5jaGFyQ29kZUF0KDgpKSkvMjU1fX19dmFyIGcxPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuc2NoZW1hU2VydmljZT1lfWZpbmREb2N1bWVudFN5bWJvbHMoZSx0LG49e3Jlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUV9KXtjb25zdCByPXQucm9vdDtpZighcilyZXR1cm5bXTtsZXQgaT1uLnJlc3VsdExpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFO2NvbnN0IHM9ZS51cmk7aWYoKHM9PT0idnNjb2RlOi8vZGVmYXVsdHNldHRpbmdzL2tleWJpbmRpbmdzLmpzb24ifHxRdChzLnRvTG93ZXJDYXNlKCksIi91c2VyL2tleWJpbmRpbmdzLmpzb24iKSkmJnIudHlwZT09PSJhcnJheSIpe2NvbnN0IGM9W107Zm9yKGNvbnN0IGQgb2Ygci5pdGVtcylpZihkLnR5cGU9PT0ib2JqZWN0Iil7Zm9yKGNvbnN0IG0gb2YgZC5wcm9wZXJ0aWVzKWlmKG0ua2V5Tm9kZS52YWx1ZT09PSJrZXkiJiZtLnZhbHVlTm9kZSl7Y29uc3QgZz1SdC5jcmVhdGUoZS51cmksdHQoZSxkKSk7aWYoYy5wdXNoKHtuYW1lOmpvKG0udmFsdWVOb2RlKSxraW5kOkRlLkZ1bmN0aW9uLGxvY2F0aW9uOmd9KSxpLS0saTw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHMpLGN9fXJldHVybiBjfWNvbnN0IGE9W3tub2RlOnIsY29udGFpbmVyTmFtZToiIn1dO2xldCBsPTAsbz0hMTtjb25zdCB1PVtdLGg9KGMsZCk9PntjLnR5cGU9PT0iYXJyYXkiP2MuaXRlbXMuZm9yRWFjaChtPT57bSYmYS5wdXNoKHtub2RlOm0sY29udGFpbmVyTmFtZTpkfSl9KTpjLnR5cGU9PT0ib2JqZWN0IiYmYy5wcm9wZXJ0aWVzLmZvckVhY2gobT0+e2NvbnN0IGc9bS52YWx1ZU5vZGU7aWYoZylpZihpPjApe2ktLTtjb25zdCBwPVJ0LmNyZWF0ZShlLnVyaSx0dChlLG0pKSx2PWQ/ZCsiLiIrbS5rZXlOb2RlLnZhbHVlOm0ua2V5Tm9kZS52YWx1ZTt1LnB1c2goe25hbWU6dGhpcy5nZXRLZXlMYWJlbChtKSxraW5kOnRoaXMuZ2V0U3ltYm9sS2luZChnLnR5cGUpLGxvY2F0aW9uOnAsY29udGFpbmVyTmFtZTpkfSksYS5wdXNoKHtub2RlOmcsY29udGFpbmVyTmFtZTp2fSl9ZWxzZSBvPSEwfSl9O2Zvcig7bDxhLmxlbmd0aDspe2NvbnN0IGM9YVtsKytdO2goYy5ub2RlLGMuY29udGFpbmVyTmFtZSl9cmV0dXJuIG8mJm4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChzKSx1fWZpbmREb2N1bWVudFN5bWJvbHMyKGUsdCxuPXtyZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFfSl7Y29uc3Qgcj10LnJvb3Q7aWYoIXIpcmV0dXJuW107bGV0IGk9bi5yZXN1bHRMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRTtjb25zdCBzPWUudXJpO2lmKChzPT09InZzY29kZTovL2RlZmF1bHRzZXR0aW5ncy9rZXliaW5kaW5ncy5qc29uInx8UXQocy50b0xvd2VyQ2FzZSgpLCIvdXNlci9rZXliaW5kaW5ncy5qc29uIikpJiZyLnR5cGU9PT0iYXJyYXkiKXtjb25zdCBjPVtdO2Zvcihjb25zdCBkIG9mIHIuaXRlbXMpaWYoZC50eXBlPT09Im9iamVjdCIpe2Zvcihjb25zdCBtIG9mIGQucHJvcGVydGllcylpZihtLmtleU5vZGUudmFsdWU9PT0ia2V5IiYmbS52YWx1ZU5vZGUpe2NvbnN0IGc9dHQoZSxkKSxwPXR0KGUsbS5rZXlOb2RlKTtpZihjLnB1c2goe25hbWU6am8obS52YWx1ZU5vZGUpLGtpbmQ6RGUuRnVuY3Rpb24scmFuZ2U6ZyxzZWxlY3Rpb25SYW5nZTpwfSksaS0tLGk8PTApcmV0dXJuIG4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChzKSxjfX1yZXR1cm4gY31jb25zdCBhPVtdLGw9W3tub2RlOnIscmVzdWx0OmF9XTtsZXQgbz0wLHU9ITE7Y29uc3QgaD0oYyxkKT0+e2MudHlwZT09PSJhcnJheSI/Yy5pdGVtcy5mb3JFYWNoKChtLGcpPT57aWYobSlpZihpPjApe2ktLTtjb25zdCBwPXR0KGUsbSksdj1wLF89e25hbWU6U3RyaW5nKGcpLGtpbmQ6dGhpcy5nZXRTeW1ib2xLaW5kKG0udHlwZSkscmFuZ2U6cCxzZWxlY3Rpb25SYW5nZTp2LGNoaWxkcmVuOltdfTtkLnB1c2goXyksbC5wdXNoKHtyZXN1bHQ6Xy5jaGlsZHJlbixub2RlOm19KX1lbHNlIHU9ITB9KTpjLnR5cGU9PT0ib2JqZWN0IiYmYy5wcm9wZXJ0aWVzLmZvckVhY2gobT0+e2NvbnN0IGc9bS52YWx1ZU5vZGU7aWYoZylpZihpPjApe2ktLTtjb25zdCBwPXR0KGUsbSksdj10dChlLG0ua2V5Tm9kZSksdz1bXSxfPXtuYW1lOnRoaXMuZ2V0S2V5TGFiZWwobSksa2luZDp0aGlzLmdldFN5bWJvbEtpbmQoZy50eXBlKSxyYW5nZTpwLHNlbGVjdGlvblJhbmdlOnYsY2hpbGRyZW46dyxkZXRhaWw6dGhpcy5nZXREZXRhaWwoZyl9O2QucHVzaChfKSxsLnB1c2goe3Jlc3VsdDp3LG5vZGU6Z30pfWVsc2UgdT0hMH0pfTtmb3IoO288bC5sZW5ndGg7KXtjb25zdCBjPWxbbysrXTtoKGMubm9kZSxjLnJlc3VsdCl9cmV0dXJuIHUmJm4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChzKSxhfWdldFN5bWJvbEtpbmQoZSl7c3dpdGNoKGUpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gRGUuTW9kdWxlO2Nhc2Uic3RyaW5nIjpyZXR1cm4gRGUuU3RyaW5nO2Nhc2UibnVtYmVyIjpyZXR1cm4gRGUuTnVtYmVyO2Nhc2UiYXJyYXkiOnJldHVybiBEZS5BcnJheTtjYXNlImJvb2xlYW4iOnJldHVybiBEZS5Cb29sZWFuO2RlZmF1bHQ6cmV0dXJuIERlLlZhcmlhYmxlfX1nZXRLZXlMYWJlbChlKXtsZXQgdD1lLmtleU5vZGUudmFsdWU7cmV0dXJuIHQmJih0PXQucmVwbGFjZSgvW1xuXS9nLCLihrUiKSksdCYmdC50cmltKCk/dDpgIiR7dH0iYH1nZXREZXRhaWwoZSl7aWYoZSl7aWYoZS50eXBlPT09ImJvb2xlYW4ifHxlLnR5cGU9PT0ibnVtYmVyInx8ZS50eXBlPT09Im51bGwifHxlLnR5cGU9PT0ic3RyaW5nIilyZXR1cm4gU3RyaW5nKGUudmFsdWUpO2lmKGUudHlwZT09PSJhcnJheSIpcmV0dXJuIGUuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoiW10iO2lmKGUudHlwZT09PSJvYmplY3QiKXJldHVybiBlLmNoaWxkcmVuLmxlbmd0aD92b2lkIDA6Int9In19ZmluZERvY3VtZW50Q29sb3JzKGUsdCxuKXtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4ocj0+e2NvbnN0IGk9W107aWYocil7bGV0IHM9biYmdHlwZW9mIG4ucmVzdWx0TGltaXQ9PSJudW1iZXIiP24ucmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRTtjb25zdCBhPXQuZ2V0TWF0Y2hpbmdTY2hlbWFzKHIuc2NoZW1hKSxsPXt9O2Zvcihjb25zdCBvIG9mIGEpaWYoIW8uaW52ZXJ0ZWQmJm8uc2NoZW1hJiYoby5zY2hlbWEuZm9ybWF0PT09ImNvbG9yInx8by5zY2hlbWEuZm9ybWF0PT09ImNvbG9yLWhleCIpJiZvLm5vZGUmJm8ubm9kZS50eXBlPT09InN0cmluZyIpe2NvbnN0IHU9U3RyaW5nKG8ubm9kZS5vZmZzZXQpO2lmKCFsW3VdKXtjb25zdCBoPW0xKHV0KG8ubm9kZSkpO2lmKGgpe2NvbnN0IGM9dHQoZSxvLm5vZGUpO2kucHVzaCh7Y29sb3I6aCxyYW5nZTpjfSl9aWYobFt1XT0hMCxzLS0sczw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGUudXJpKSxpfX19cmV0dXJuIGl9KX1nZXRDb2xvclByZXNlbnRhdGlvbnMoZSx0LG4scil7Y29uc3QgaT1bXSxzPU1hdGgucm91bmQobi5yZWQqMjU1KSxhPU1hdGgucm91bmQobi5ncmVlbioyNTUpLGw9TWF0aC5yb3VuZChuLmJsdWUqMjU1KTtmdW5jdGlvbiBvKGgpe2NvbnN0IGM9aC50b1N0cmluZygxNik7cmV0dXJuIGMubGVuZ3RoIT09Mj8iMCIrYzpjfWxldCB1O3JldHVybiBuLmFscGhhPT09MT91PWAjJHtvKHMpfSR7byhhKX0ke28obCl9YDp1PWAjJHtvKHMpfSR7byhhKX0ke28obCl9JHtvKE1hdGgucm91bmQobi5hbHBoYSoyNTUpKX1gLGkucHVzaCh7bGFiZWw6dSx0ZXh0RWRpdDpWZS5yZXBsYWNlKHIsSlNPTi5zdHJpbmdpZnkodSkpfSksaX19O2Z1bmN0aW9uIHR0KGUsdCl7cmV0dXJuIHEuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoKSl9ZnVuY3Rpb24gam8oZSl7cmV0dXJuIHV0KGUpfHxFKCI8ZW1wdHk+Iil9dmFyIGlpPXtzY2hlbWFBc3NvY2lhdGlvbnM6W10sc2NoZW1hczp7Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI6eyRzY2hlbWE6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyIsZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxwb3NpdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0scG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOnt0eXBlOiJzdHJpbmciLGVudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfX0sdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntpZDp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6e30sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsZXhjbHVzaXZlTWluaW11bTohMH0sbWF4aW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWF4aW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWluaW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWluaW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4TGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5MZW5ndGg6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDp7fX0sbWF4SXRlbXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pbkl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHVuaXF1ZUl0ZW1zOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtYXhQcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5Qcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHJlcXVpcmVkOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxkZWZpbml0aW9uczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwYXR0ZXJuUHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxlbnVtOnt0eXBlOiJhcnJheSIsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0OnthbnlPZjpbe3R5cGU6InN0cmluZyIsZW51bTpbImRhdGUtdGltZSIsInVyaSIsImVtYWlsIiwiaG9zdG5hbWUiLCJpcHY0IiwiaXB2NiIsInJlZ2V4Il19LHt0eXBlOiJzdHJpbmcifV19LGFsbE9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LGFueU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG9uZU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG5vdDp7YWxsT2Y6W3skcmVmOiIjIn1dfX0sZGVwZW5kZW5jaWVzOntleGNsdXNpdmVNYXhpbXVtOlsibWF4aW11bSJdLGV4Y2x1c2l2ZU1pbmltdW06WyJtaW5pbXVtIl19LGRlZmF1bHQ6e319LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiOntkZWZpbml0aW9uczp7c2NoZW1hQXJyYXk6e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLGl0ZW1zOnskcmVmOiIjIn19LG5vbk5lZ2F0aXZlSW50ZWdlcjp7dHlwZToiaW50ZWdlciIsbWluaW11bTowfSxub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LHtkZWZhdWx0OjB9XX0sc2ltcGxlVHlwZXM6e2VudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSx1bmlxdWVJdGVtczohMCxkZWZhdWx0OltdfX0sdHlwZTpbIm9iamVjdCIsImJvb2xlYW4iXSxwcm9wZXJ0aWVzOnskaWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJHNjaGVtYTp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRyZWY6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJGNvbW1lbnQ6e3R5cGU6InN0cmluZyJ9LHRpdGxlOnt0eXBlOiJzdHJpbmcifSxkZXNjcmlwdGlvbjp7dHlwZToic3RyaW5nIn0sZGVmYXVsdDohMCxyZWFkT25seTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sZXhhbXBsZXM6e3R5cGU6ImFycmF5IixpdGVtczohMH0sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixleGNsdXNpdmVNaW5pbXVtOjB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6Im51bWJlciJ9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5MZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxwYXR0ZXJuOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoicmVnZXgifSxhZGRpdGlvbmFsSXRlbXM6eyRyZWY6IiMifSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDohMH0sbWF4SXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluSXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY29udGFpbnM6eyRyZWY6IiMifSxtYXhQcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pblByb3BlcnRpZXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxyZXF1aXJlZDp7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxwcm9wZXJ0eU5hbWVzOntmb3JtYXQ6InJlZ2V4In0sZGVmYXVsdDp7fX0sZGVwZW5kZW5jaWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX19LHByb3BlcnR5TmFtZXM6eyRyZWY6IiMifSxjb25zdDohMCxlbnVtOnt0eXBlOiJhcnJheSIsaXRlbXM6ITAsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0Ont0eXBlOiJzdHJpbmcifSxjb250ZW50TWVkaWFUeXBlOnt0eXBlOiJzdHJpbmcifSxjb250ZW50RW5jb2Rpbmc6e3R5cGU6InN0cmluZyJ9LGlmOnskcmVmOiIjIn0sdGhlbjp7JHJlZjoiIyJ9LGVsc2U6eyRyZWY6IiMifSxhbGxPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LGFueU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sb25lT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxub3Q6eyRyZWY6IiMifX0sZGVmYXVsdDohMH19fSxwMT17aWQ6RSgiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkc2NoZW1hOkUoIlRoZSBzY2hlbWEgdG8gdmVyaWZ5IHRoaXMgZG9jdW1lbnQgYWdhaW5zdC4iKSx0aXRsZTpFKCJBIGRlc2NyaXB0aXZlIHRpdGxlIG9mIHRoZSBlbGVtZW50LiIpLGRlc2NyaXB0aW9uOkUoIkEgbG9uZyBkZXNjcmlwdGlvbiBvZiB0aGUgZWxlbWVudC4gVXNlZCBpbiBob3ZlciBtZW51cyBhbmQgc3VnZ2VzdGlvbnMuIiksZGVmYXVsdDpFKCJBIGRlZmF1bHQgdmFsdWUuIFVzZWQgYnkgc3VnZ2VzdGlvbnMuIiksbXVsdGlwbGVPZjpFKCJBIG51bWJlciB0aGF0IHNob3VsZCBjbGVhbmx5IGRpdmlkZSB0aGUgY3VycmVudCB2YWx1ZSAoaS5lLiBoYXZlIG5vIHJlbWFpbmRlcikuIiksbWF4aW11bTpFKCJUaGUgbWF4aW11bSBudW1lcmljYWwgdmFsdWUsIGluY2x1c2l2ZSBieSBkZWZhdWx0LiIpLGV4Y2x1c2l2ZU1heGltdW06RSgiTWFrZXMgdGhlIG1heGltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1pbmltdW06RSgiVGhlIG1pbmltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNaW5pbXVtOkUoIk1ha2VzIHRoZSBtaW5pbXVtIHByb3BlcnR5IGV4Y2x1c2l2ZS4iKSxtYXhMZW5ndGg6RSgiVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLG1pbkxlbmd0aDpFKCJUaGUgbWluaW11bSBsZW5ndGggb2YgYSBzdHJpbmcuIikscGF0dGVybjpFKCJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgc3RyaW5nIGFnYWluc3QuIEl0IGlzIG5vdCBpbXBsaWNpdGx5IGFuY2hvcmVkLiIpLGFkZGl0aW9uYWxJdGVtczpFKCJGb3IgYXJyYXlzLCBvbmx5IHdoZW4gaXRlbXMgaXMgc2V0IGFzIGFuIGFycmF5LiBJZiBpdCBpcyBhIHNjaGVtYSwgdGhlbiB0aGlzIHNjaGVtYSB2YWxpZGF0ZXMgaXRlbXMgYWZ0ZXIgdGhlIG9uZXMgc3BlY2lmaWVkIGJ5IHRoZSBpdGVtcyBhcnJheS4gSWYgaXQgaXMgZmFsc2UsIHRoZW4gYWRkaXRpb25hbCBpdGVtcyB3aWxsIGNhdXNlIHZhbGlkYXRpb24gdG8gZmFpbC4iKSxpdGVtczpFKCJGb3IgYXJyYXlzLiBDYW4gZWl0aGVyIGJlIGEgc2NoZW1hIHRvIHZhbGlkYXRlIGV2ZXJ5IGVsZW1lbnQgYWdhaW5zdCBvciBhbiBhcnJheSBvZiBzY2hlbWFzIHRvIHZhbGlkYXRlIGVhY2ggaXRlbSBhZ2FpbnN0IGluIG9yZGVyICh0aGUgZmlyc3Qgc2NoZW1hIHdpbGwgdmFsaWRhdGUgdGhlIGZpcnN0IGVsZW1lbnQsIHRoZSBzZWNvbmQgc2NoZW1hIHdpbGwgdmFsaWRhdGUgdGhlIHNlY29uZCBlbGVtZW50LCBhbmQgc28gb24uIiksbWF4SXRlbXM6RSgiVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLG1pbkl0ZW1zOkUoIlRoZSBtaW5pbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBpbnNpZGUgYW4gYXJyYXkuIEluY2x1c2l2ZS4iKSx1bmlxdWVJdGVtczpFKCJJZiBhbGwgb2YgdGhlIGl0ZW1zIGluIHRoZSBhcnJheSBtdXN0IGJlIHVuaXF1ZS4gRGVmYXVsdHMgdG8gZmFsc2UuIiksbWF4UHJvcGVydGllczpFKCJUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvcGVydGllcyBhbiBvYmplY3QgY2FuIGhhdmUuIEluY2x1c2l2ZS4iKSxtaW5Qcm9wZXJ0aWVzOkUoIlRoZSBtaW5pbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLHJlcXVpcmVkOkUoIkFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgcmVxdWlyZWQgb24gdGhpcyBvYmplY3QuIiksYWRkaXRpb25hbFByb3BlcnRpZXM6RSgiRWl0aGVyIGEgc2NoZW1hIG9yIGEgYm9vbGVhbi4gSWYgYSBzY2hlbWEsIHRoZW4gdXNlZCB0byB2YWxpZGF0ZSBhbGwgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSAncHJvcGVydGllcycgb3IgJ3BhdHRlcm5Qcm9wZXJ0aWVzJy4gSWYgZmFsc2UsIHRoZW4gYW55IHByb3BlcnRpZXMgbm90IG1hdGNoZWQgYnkgZWl0aGVyIHdpbGwgY2F1c2UgdGhpcyBzY2hlbWEgdG8gZmFpbC4iKSxkZWZpbml0aW9uczpFKCJOb3QgdXNlZCBmb3IgdmFsaWRhdGlvbi4gUGxhY2Ugc3Vic2NoZW1hcyBoZXJlIHRoYXQgeW91IHdpc2ggdG8gcmVmZXJlbmNlIGlubGluZSB3aXRoICRyZWYuIikscHJvcGVydGllczpFKCJBIG1hcCBvZiBwcm9wZXJ0eSBuYW1lcyB0byBzY2hlbWFzIGZvciBlYWNoIHByb3BlcnR5LiIpLHBhdHRlcm5Qcm9wZXJ0aWVzOkUoIkEgbWFwIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgb24gcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgbWF0Y2hpbmcgcHJvcGVydGllcy4iKSxkZXBlbmRlbmNpZXM6RSgiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gZWl0aGVyIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG9yIGEgc2NoZW1hLiBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBtZWFucyB0aGUgcHJvcGVydHkgbmFtZWQgaW4gdGhlIGtleSBkZXBlbmRzIG9uIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheSBiZWluZyBwcmVzZW50IGluIHRoZSBvYmplY3QgaW4gb3JkZXIgdG8gYmUgdmFsaWQuIElmIHRoZSB2YWx1ZSBpcyBhIHNjaGVtYSwgdGhlbiB0aGUgc2NoZW1hIGlzIG9ubHkgYXBwbGllZCB0byB0aGUgb2JqZWN0IGlmIHRoZSBwcm9wZXJ0eSBpbiB0aGUga2V5IGV4aXN0cyBvbiB0aGUgb2JqZWN0LiIpLGVudW06RSgiVGhlIHNldCBvZiBsaXRlcmFsIHZhbHVlcyB0aGF0IGFyZSB2YWxpZC4iKSx0eXBlOkUoIkVpdGhlciBhIHN0cmluZyBvZiBvbmUgb2YgdGhlIGJhc2ljIHNjaGVtYSB0eXBlcyAobnVtYmVyLCBpbnRlZ2VyLCBudWxsLCBhcnJheSwgb2JqZWN0LCBib29sZWFuLCBzdHJpbmcpIG9yIGFuIGFycmF5IG9mIHN0cmluZ3Mgc3BlY2lmeWluZyBhIHN1YnNldCBvZiB0aG9zZSB0eXBlcy4iKSxmb3JtYXQ6RSgiRGVzY3JpYmVzIHRoZSBmb3JtYXQgZXhwZWN0ZWQgZm9yIHRoZSB2YWx1ZS4iKSxhbGxPZjpFKCJBbiBhcnJheSBvZiBzY2hlbWFzLCBhbGwgb2Ygd2hpY2ggbXVzdCBtYXRjaC4iKSxhbnlPZjpFKCJBbiBhcnJheSBvZiBzY2hlbWFzLCB3aGVyZSBhdCBsZWFzdCBvbmUgbXVzdCBtYXRjaC4iKSxvbmVPZjpFKCJBbiBhcnJheSBvZiBzY2hlbWFzLCBleGFjdGx5IG9uZSBvZiB3aGljaCBtdXN0IG1hdGNoLiIpLG5vdDpFKCJBIHNjaGVtYSB3aGljaCBtdXN0IG5vdCBtYXRjaC4iKSwkaWQ6RSgiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkcmVmOkUoIlJlZmVyZW5jZSBhIGRlZmluaXRpb24gaG9zdGVkIG9uIGFueSBsb2NhdGlvbi4iKSwkY29tbWVudDpFKCJDb21tZW50cyBmcm9tIHNjaGVtYSBhdXRob3JzIHRvIHJlYWRlcnMgb3IgbWFpbnRhaW5lcnMgb2YgdGhlIHNjaGVtYS4iKSxyZWFkT25seTpFKCJJbmRpY2F0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIGluc3RhbmNlIGlzIG1hbmFnZWQgZXhjbHVzaXZlbHkgYnkgdGhlIG93bmluZyBhdXRob3JpdHkuIiksZXhhbXBsZXM6RSgiU2FtcGxlIEpTT04gdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2NoZW1hLCBmb3IgdGhlIHB1cnBvc2Ugb2YgaWxsdXN0cmF0aW5nIHVzYWdlLiIpLGNvbnRhaW5zOkUoJ0FuIGFycmF5IGluc3RhbmNlIGlzIHZhbGlkIGFnYWluc3QgImNvbnRhaW5zIiBpZiBhdCBsZWFzdCBvbmUgb2YgaXRzIGVsZW1lbnRzIGlzIHZhbGlkIGFnYWluc3QgdGhlIGdpdmVuIHNjaGVtYS4nKSxwcm9wZXJ0eU5hbWVzOkUoIklmIHRoZSBpbnN0YW5jZSBpcyBhbiBvYmplY3QsIHRoaXMga2V5d29yZCB2YWxpZGF0ZXMgaWYgZXZlcnkgcHJvcGVydHkgbmFtZSBpbiB0aGUgaW5zdGFuY2UgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHByb3ZpZGVkIHNjaGVtYS4iKSxjb25zdDpFKCJBbiBpbnN0YW5jZSB2YWxpZGF0ZXMgc3VjY2Vzc2Z1bGx5IGFnYWluc3QgdGhpcyBrZXl3b3JkIGlmIGl0cyB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YgdGhlIGtleXdvcmQuIiksY29udGVudE1lZGlhVHlwZTpFKCJEZXNjcmliZXMgdGhlIG1lZGlhIHR5cGUgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksY29udGVudEVuY29kaW5nOkUoIkRlc2NyaWJlcyB0aGUgY29udGVudCBlbmNvZGluZyBvZiBhIHN0cmluZyBwcm9wZXJ0eS4iKSxpZjpFKCdUaGUgdmFsaWRhdGlvbiBvdXRjb21lIG9mIHRoZSAiaWYiIHN1YnNjaGVtYSBjb250cm9scyB3aGljaCBvZiB0aGUgInRoZW4iIG9yICJlbHNlIiBrZXl3b3JkcyBhcmUgZXZhbHVhdGVkLicpLHRoZW46RSgnVGhlICJpZiIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgc3VjY2VlZHMuJyksZWxzZTpFKCdUaGUgImVsc2UiIHN1YnNjaGVtYSBpcyB1c2VkIGZvciB2YWxpZGF0aW9uIHdoZW4gdGhlICJpZiIgc3Vic2NoZW1hIGZhaWxzLicpfTtmb3IoY29uc3QgZSBpbiBpaS5zY2hlbWFzKXtjb25zdCB0PWlpLnNjaGVtYXNbZV07Zm9yKGNvbnN0IG4gaW4gdC5wcm9wZXJ0aWVzKXtsZXQgcj10LnByb3BlcnRpZXNbbl07dHlwZW9mIHI9PSJib29sZWFuIiYmKHI9dC5wcm9wZXJ0aWVzW25dPXt9KTtjb25zdCBpPXAxW25dO2kmJihyLmRlc2NyaXB0aW9uPWkpfX12YXIgV287KCgpPT57dmFyIGU9ezQ3MDppPT57ZnVuY3Rpb24gcyhvKXtpZih0eXBlb2YgbyE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KG8pKX1mdW5jdGlvbiBhKG8sdSl7Zm9yKHZhciBoLGM9IiIsZD0wLG09LTEsZz0wLHA9MDtwPD1vLmxlbmd0aDsrK3Ape2lmKHA8by5sZW5ndGgpaD1vLmNoYXJDb2RlQXQocCk7ZWxzZXtpZihoPT09NDcpYnJlYWs7aD00N31pZihoPT09NDcpe2lmKCEobT09PXAtMXx8Zz09PTEpKWlmKG0hPT1wLTEmJmc9PT0yKXtpZihjLmxlbmd0aDwyfHxkIT09Mnx8Yy5jaGFyQ29kZUF0KGMubGVuZ3RoLTEpIT09NDZ8fGMuY2hhckNvZGVBdChjLmxlbmd0aC0yKSE9PTQ2KXtpZihjLmxlbmd0aD4yKXt2YXIgdj1jLmxhc3RJbmRleE9mKCIvIik7aWYodiE9PWMubGVuZ3RoLTEpe3Y9PT0tMT8oYz0iIixkPTApOmQ9KGM9Yy5zbGljZSgwLHYpKS5sZW5ndGgtMS1jLmxhc3RJbmRleE9mKCIvIiksbT1wLGc9MDtjb250aW51ZX19ZWxzZSBpZihjLmxlbmd0aD09PTJ8fGMubGVuZ3RoPT09MSl7Yz0iIixkPTAsbT1wLGc9MDtjb250aW51ZX19dSYmKGMubGVuZ3RoPjA/Yys9Ii8uLiI6Yz0iLi4iLGQ9Mil9ZWxzZSBjLmxlbmd0aD4wP2MrPSIvIitvLnNsaWNlKG0rMSxwKTpjPW8uc2xpY2UobSsxLHApLGQ9cC1tLTE7bT1wLGc9MH1lbHNlIGg9PT00NiYmZyE9PS0xPysrZzpnPS0xfXJldHVybiBjfXZhciBsPXtyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBvLHU9IiIsaD0hMSxjPWFyZ3VtZW50cy5sZW5ndGgtMTtjPj0tMSYmIWg7Yy0tKXt2YXIgZDtjPj0wP2Q9YXJndW1lbnRzW2NdOihvPT09dm9pZCAwJiYobz1wcm9jZXNzLmN3ZCgpKSxkPW8pLHMoZCksZC5sZW5ndGghPT0wJiYodT1kKyIvIit1LGg9ZC5jaGFyQ29kZUF0KDApPT09NDcpfXJldHVybiB1PWEodSwhaCksaD91Lmxlbmd0aD4wPyIvIit1OiIvIjp1Lmxlbmd0aD4wP3U6Ii4ifSxub3JtYWxpemU6ZnVuY3Rpb24obyl7aWYocyhvKSxvLmxlbmd0aD09PTApcmV0dXJuIi4iO3ZhciB1PW8uY2hhckNvZGVBdCgwKT09PTQ3LGg9by5jaGFyQ29kZUF0KG8ubGVuZ3RoLTEpPT09NDc7cmV0dXJuKG89YShvLCF1KSkubGVuZ3RoIT09MHx8dXx8KG89Ii4iKSxvLmxlbmd0aD4wJiZoJiYobys9Ii8iKSx1PyIvIitvOm99LGlzQWJzb2x1dGU6ZnVuY3Rpb24obyl7cmV0dXJuIHMobyksby5sZW5ndGg+MCYmby5jaGFyQ29kZUF0KDApPT09NDd9LGpvaW46ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4iLiI7Zm9yKHZhciBvLHU9MDt1PGFyZ3VtZW50cy5sZW5ndGg7Kyt1KXt2YXIgaD1hcmd1bWVudHNbdV07cyhoKSxoLmxlbmd0aD4wJiYobz09PXZvaWQgMD9vPWg6bys9Ii8iK2gpfXJldHVybiBvPT09dm9pZCAwPyIuIjpsLm5vcm1hbGl6ZShvKX0scmVsYXRpdmU6ZnVuY3Rpb24obyx1KXtpZihzKG8pLHModSksbz09PXV8fChvPWwucmVzb2x2ZShvKSk9PT0odT1sLnJlc29sdmUodSkpKXJldHVybiIiO2Zvcih2YXIgaD0xO2g8by5sZW5ndGgmJm8uY2hhckNvZGVBdChoKT09PTQ3OysraCk7Zm9yKHZhciBjPW8ubGVuZ3RoLGQ9Yy1oLG09MTttPHUubGVuZ3RoJiZ1LmNoYXJDb2RlQXQobSk9PT00NzsrK20pO2Zvcih2YXIgZz11Lmxlbmd0aC1tLHA9ZDxnP2Q6Zyx2PS0xLHc9MDt3PD1wOysrdyl7aWYodz09PXApe2lmKGc+cCl7aWYodS5jaGFyQ29kZUF0KG0rdyk9PT00NylyZXR1cm4gdS5zbGljZShtK3crMSk7aWYodz09PTApcmV0dXJuIHUuc2xpY2UobSt3KX1lbHNlIGQ+cCYmKG8uY2hhckNvZGVBdChoK3cpPT09NDc/dj13Onc9PT0wJiYodj0wKSk7YnJlYWt9dmFyIF89by5jaGFyQ29kZUF0KGgrdyk7aWYoXyE9PXUuY2hhckNvZGVBdChtK3cpKWJyZWFrO189PT00NyYmKHY9dyl9dmFyIHg9IiI7Zm9yKHc9aCt2KzE7dzw9YzsrK3cpdyE9PWMmJm8uY2hhckNvZGVBdCh3KSE9PTQ3fHwoeC5sZW5ndGg9PT0wP3grPSIuLiI6eCs9Ii8uLiIpO3JldHVybiB4Lmxlbmd0aD4wP3grdS5zbGljZShtK3YpOihtKz12LHUuY2hhckNvZGVBdChtKT09PTQ3JiYrK20sdS5zbGljZShtKSl9LF9tYWtlTG9uZzpmdW5jdGlvbihvKXtyZXR1cm4gb30sZGlybmFtZTpmdW5jdGlvbihvKXtpZihzKG8pLG8ubGVuZ3RoPT09MClyZXR1cm4iLiI7Zm9yKHZhciB1PW8uY2hhckNvZGVBdCgwKSxoPXU9PT00NyxjPS0xLGQ9ITAsbT1vLmxlbmd0aC0xO20+PTE7LS1tKWlmKCh1PW8uY2hhckNvZGVBdChtKSk9PT00Nyl7aWYoIWQpe2M9bTticmVha319ZWxzZSBkPSExO3JldHVybiBjPT09LTE/aD8iLyI6Ii4iOmgmJmM9PT0xPyIvLyI6by5zbGljZSgwLGMpfSxiYXNlbmFtZTpmdW5jdGlvbihvLHUpe2lmKHUhPT12b2lkIDAmJnR5cGVvZiB1IT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7cyhvKTt2YXIgaCxjPTAsZD0tMSxtPSEwO2lmKHUhPT12b2lkIDAmJnUubGVuZ3RoPjAmJnUubGVuZ3RoPD1vLmxlbmd0aCl7aWYodS5sZW5ndGg9PT1vLmxlbmd0aCYmdT09PW8pcmV0dXJuIiI7dmFyIGc9dS5sZW5ndGgtMSxwPS0xO2ZvcihoPW8ubGVuZ3RoLTE7aD49MDstLWgpe3ZhciB2PW8uY2hhckNvZGVBdChoKTtpZih2PT09NDcpe2lmKCFtKXtjPWgrMTticmVha319ZWxzZSBwPT09LTEmJihtPSExLHA9aCsxKSxnPj0wJiYodj09PXUuY2hhckNvZGVBdChnKT8tLWc9PS0xJiYoZD1oKTooZz0tMSxkPXApKX1yZXR1cm4gYz09PWQ/ZD1wOmQ9PT0tMSYmKGQ9by5sZW5ndGgpLG8uc2xpY2UoYyxkKX1mb3IoaD1vLmxlbmd0aC0xO2g+PTA7LS1oKWlmKG8uY2hhckNvZGVBdChoKT09PTQ3KXtpZighbSl7Yz1oKzE7YnJlYWt9fWVsc2UgZD09PS0xJiYobT0hMSxkPWgrMSk7cmV0dXJuIGQ9PT0tMT8iIjpvLnNsaWNlKGMsZCl9LGV4dG5hbWU6ZnVuY3Rpb24obyl7cyhvKTtmb3IodmFyIHU9LTEsaD0wLGM9LTEsZD0hMCxtPTAsZz1vLmxlbmd0aC0xO2c+PTA7LS1nKXt2YXIgcD1vLmNoYXJDb2RlQXQoZyk7aWYocCE9PTQ3KWM9PT0tMSYmKGQ9ITEsYz1nKzEpLHA9PT00Nj91PT09LTE/dT1nOm0hPT0xJiYobT0xKTp1IT09LTEmJihtPS0xKTtlbHNlIGlmKCFkKXtoPWcrMTticmVha319cmV0dXJuIHU9PT0tMXx8Yz09PS0xfHxtPT09MHx8bT09PTEmJnU9PT1jLTEmJnU9PT1oKzE/IiI6by5zbGljZSh1LGMpfSxmb3JtYXQ6ZnVuY3Rpb24obyl7aWYobz09PW51bGx8fHR5cGVvZiBvIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2Ygbyk7cmV0dXJuIGZ1bmN0aW9uKHUsaCl7dmFyIGM9aC5kaXJ8fGgucm9vdCxkPWguYmFzZXx8KGgubmFtZXx8IiIpKyhoLmV4dHx8IiIpO3JldHVybiBjP2M9PT1oLnJvb3Q/YytkOmMrIi8iK2Q6ZH0oMCxvKX0scGFyc2U6ZnVuY3Rpb24obyl7cyhvKTt2YXIgdT17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoby5sZW5ndGg9PT0wKXJldHVybiB1O3ZhciBoLGM9by5jaGFyQ29kZUF0KDApLGQ9Yz09PTQ3O2Q/KHUucm9vdD0iLyIsaD0xKTpoPTA7Zm9yKHZhciBtPS0xLGc9MCxwPS0xLHY9ITAsdz1vLmxlbmd0aC0xLF89MDt3Pj1oOy0tdylpZigoYz1vLmNoYXJDb2RlQXQodykpIT09NDcpcD09PS0xJiYodj0hMSxwPXcrMSksYz09PTQ2P209PT0tMT9tPXc6XyE9PTEmJihfPTEpOm0hPT0tMSYmKF89LTEpO2Vsc2UgaWYoIXYpe2c9dysxO2JyZWFrfXJldHVybiBtPT09LTF8fHA9PT0tMXx8Xz09PTB8fF89PT0xJiZtPT09cC0xJiZtPT09ZysxP3AhPT0tMSYmKHUuYmFzZT11Lm5hbWU9Zz09PTAmJmQ/by5zbGljZSgxLHApOm8uc2xpY2UoZyxwKSk6KGc9PT0wJiZkPyh1Lm5hbWU9by5zbGljZSgxLG0pLHUuYmFzZT1vLnNsaWNlKDEscCkpOih1Lm5hbWU9by5zbGljZShnLG0pLHUuYmFzZT1vLnNsaWNlKGcscCkpLHUuZXh0PW8uc2xpY2UobSxwKSksZz4wP3UuZGlyPW8uc2xpY2UoMCxnLTEpOmQmJih1LmRpcj0iLyIpLHV9LHNlcDoiLyIsZGVsaW1pdGVyOiI6Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9O2wucG9zaXg9bCxpLmV4cG9ydHM9bH19LHQ9e307ZnVuY3Rpb24gbihpKXt2YXIgcz10W2ldO2lmKHMhPT12b2lkIDApcmV0dXJuIHMuZXhwb3J0czt2YXIgYT10W2ldPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtpXShhLGEuZXhwb3J0cyxuKSxhLmV4cG9ydHN9bi5kPShpLHMpPT57Zm9yKHZhciBhIGluIHMpbi5vKHMsYSkmJiFuLm8oaSxhKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksYSx7ZW51bWVyYWJsZTohMCxnZXQ6c1thXX0pfSxuLm89KGkscyk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpLG4ucj1pPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX07dmFyIHI9e307KCgpPT57bGV0IGk7bi5yKHIpLG4uZChyLHtVUkk6KCk9PmQsVXRpbHM6KCk9Pk99KSx0eXBlb2YgcHJvY2Vzcz09Im9iamVjdCI/aT1wcm9jZXNzLnBsYXRmb3JtPT09IndpbjMyIjp0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmKGk9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJXaW5kb3dzIik+PTApO2NvbnN0IHM9L15cd1tcd1xkKy4tXSokLyxhPS9eXC8vLGw9L15cL1wvLztmdW5jdGlvbiBvKEMsTil7aWYoIUMuc2NoZW1lJiZOKXRocm93IG5ldyBFcnJvcihgW1VyaUVycm9yXTogU2NoZW1lIGlzIG1pc3Npbmc6IHtzY2hlbWU6ICIiLCBhdXRob3JpdHk6ICIke0MuYXV0aG9yaXR5fSIsIHBhdGg6ICIke0MucGF0aH0iLCBxdWVyeTogIiR7Qy5xdWVyeX0iLCBmcmFnbWVudDogIiR7Qy5mcmFnbWVudH0ifWApO2lmKEMuc2NoZW1lJiYhcy50ZXN0KEMuc2NoZW1lKSl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IFNjaGVtZSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuIik7aWYoQy5wYXRoKXtpZihDLmF1dGhvcml0eSl7aWYoIWEudGVzdChDLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYobC50ZXN0KEMucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9fWNvbnN0IHU9IiIsaD0iLyIsYz0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/LztjbGFzcyBke2NvbnN0cnVjdG9yKE4sayxSLEksVCxQPSExKXtpdCh0aGlzLCJzY2hlbWUiKTtpdCh0aGlzLCJhdXRob3JpdHkiKTtpdCh0aGlzLCJwYXRoIik7aXQodGhpcywicXVlcnkiKTtpdCh0aGlzLCJmcmFnbWVudCIpO3R5cGVvZiBOPT0ib2JqZWN0Ij8odGhpcy5zY2hlbWU9Ti5zY2hlbWV8fHUsdGhpcy5hdXRob3JpdHk9Ti5hdXRob3JpdHl8fHUsdGhpcy5wYXRoPU4ucGF0aHx8dSx0aGlzLnF1ZXJ5PU4ucXVlcnl8fHUsdGhpcy5mcmFnbWVudD1OLmZyYWdtZW50fHx1KToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oRCxVKXtyZXR1cm4gRHx8VT9EOiJmaWxlIn0oTixQKSx0aGlzLmF1dGhvcml0eT1rfHx1LHRoaXMucGF0aD1mdW5jdGlvbihELFUpe3N3aXRjaChEKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6VT9VWzBdIT09aCYmKFU9aCtVKTpVPWh9cmV0dXJuIFV9KHRoaXMuc2NoZW1lLFJ8fHUpLHRoaXMucXVlcnk9SXx8dSx0aGlzLmZyYWdtZW50PVR8fHUsbyh0aGlzLFApKX1zdGF0aWMgaXNVcmkoTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBkfHwhIU4mJnR5cGVvZiBOLmF1dGhvcml0eT09InN0cmluZyImJnR5cGVvZiBOLmZyYWdtZW50PT0ic3RyaW5nIiYmdHlwZW9mIE4ucGF0aD09InN0cmluZyImJnR5cGVvZiBOLnF1ZXJ5PT0ic3RyaW5nIiYmdHlwZW9mIE4uc2NoZW1lPT0ic3RyaW5nIiYmdHlwZW9mIE4uZnNQYXRoPT0ic3RyaW5nIiYmdHlwZW9mIE4ud2l0aD09ImZ1bmN0aW9uIiYmdHlwZW9mIE4udG9TdHJpbmc9PSJmdW5jdGlvbiJ9Z2V0IGZzUGF0aCgpe3JldHVybiBfKHRoaXMpfXdpdGgoTil7aWYoIU4pcmV0dXJuIHRoaXM7bGV0e3NjaGVtZTprLGF1dGhvcml0eTpSLHBhdGg6SSxxdWVyeTpULGZyYWdtZW50OlB9PU47cmV0dXJuIGs9PT12b2lkIDA/az10aGlzLnNjaGVtZTprPT09bnVsbCYmKGs9dSksUj09PXZvaWQgMD9SPXRoaXMuYXV0aG9yaXR5OlI9PT1udWxsJiYoUj11KSxJPT09dm9pZCAwP0k9dGhpcy5wYXRoOkk9PT1udWxsJiYoST11KSxUPT09dm9pZCAwP1Q9dGhpcy5xdWVyeTpUPT09bnVsbCYmKFQ9dSksUD09PXZvaWQgMD9QPXRoaXMuZnJhZ21lbnQ6UD09PW51bGwmJihQPXUpLGs9PT10aGlzLnNjaGVtZSYmUj09PXRoaXMuYXV0aG9yaXR5JiZJPT09dGhpcy5wYXRoJiZUPT09dGhpcy5xdWVyeSYmUD09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgZyhrLFIsSSxULFApfXN0YXRpYyBwYXJzZShOLGs9ITEpe2NvbnN0IFI9Yy5leGVjKE4pO3JldHVybiBSP25ldyBnKFJbMl18fHUsTChSWzRdfHx1KSxMKFJbNV18fHUpLEwoUls3XXx8dSksTChSWzldfHx1KSxrKTpuZXcgZyh1LHUsdSx1LHUpfXN0YXRpYyBmaWxlKE4pe2xldCBrPXU7aWYoaSYmKE49Ti5yZXBsYWNlKC9cXC9nLGgpKSxOWzBdPT09aCYmTlsxXT09PWgpe2NvbnN0IFI9Ti5pbmRleE9mKGgsMik7Uj09PS0xPyhrPU4uc3Vic3RyaW5nKDIpLE49aCk6KGs9Ti5zdWJzdHJpbmcoMixSKSxOPU4uc3Vic3RyaW5nKFIpfHxoKX1yZXR1cm4gbmV3IGcoImZpbGUiLGssTix1LHUpfXN0YXRpYyBmcm9tKE4pe2NvbnN0IGs9bmV3IGcoTi5zY2hlbWUsTi5hdXRob3JpdHksTi5wYXRoLE4ucXVlcnksTi5mcmFnbWVudCk7cmV0dXJuIG8oaywhMCksa310b1N0cmluZyhOPSExKXtyZXR1cm4geCh0aGlzLE4pfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUoTil7aWYoTil7aWYoTiBpbnN0YW5jZW9mIGQpcmV0dXJuIE47e2NvbnN0IGs9bmV3IGcoTik7cmV0dXJuIGsuX2Zvcm1hdHRlZD1OLmV4dGVybmFsLGsuX2ZzUGF0aD1OLl9zZXA9PT1tP04uZnNQYXRoOm51bGwsa319cmV0dXJuIE59fWNvbnN0IG09aT8xOnZvaWQgMDtjbGFzcyBnIGV4dGVuZHMgZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7aXQodGhpcywiX2Zvcm1hdHRlZCIsbnVsbCk7aXQodGhpcywiX2ZzUGF0aCIsbnVsbCl9Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9Xyh0aGlzKSksdGhpcy5fZnNQYXRofXRvU3RyaW5nKGs9ITEpe3JldHVybiBrP3godGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD14KHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2NvbnN0IGs9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGsuZnNQYXRoPXRoaXMuX2ZzUGF0aCxrLl9zZXA9bSksdGhpcy5fZm9ybWF0dGVkJiYoay5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKGsucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoay5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoay5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihrLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihrLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLGt9fWNvbnN0IHA9ezU4OiIlM0EiLDQ3OiIlMkYiLDYzOiIlM0YiLDM1OiIlMjMiLDkxOiIlNUIiLDkzOiIlNUQiLDY0OiIlNDAiLDMzOiIlMjEiLDM2OiIlMjQiLDM4OiIlMjYiLDM5OiIlMjciLDQwOiIlMjgiLDQxOiIlMjkiLDQyOiIlMkEiLDQzOiIlMkIiLDQ0OiIlMkMiLDU5OiIlM0IiLDYxOiIlM0QiLDMyOiIlMjAifTtmdW5jdGlvbiB2KEMsTixrKXtsZXQgUixJPS0xO2ZvcihsZXQgVD0wO1Q8Qy5sZW5ndGg7VCsrKXtjb25zdCBQPUMuY2hhckNvZGVBdChUKTtpZihQPj05NyYmUDw9MTIyfHxQPj02NSYmUDw9OTB8fFA+PTQ4JiZQPD01N3x8UD09PTQ1fHxQPT09NDZ8fFA9PT05NXx8UD09PTEyNnx8TiYmUD09PTQ3fHxrJiZQPT09OTF8fGsmJlA9PT05M3x8ayYmUD09PTU4KUkhPT0tMSYmKFIrPWVuY29kZVVSSUNvbXBvbmVudChDLnN1YnN0cmluZyhJLFQpKSxJPS0xKSxSIT09dm9pZCAwJiYoUis9Qy5jaGFyQXQoVCkpO2Vsc2V7Uj09PXZvaWQgMCYmKFI9Qy5zdWJzdHIoMCxUKSk7Y29uc3QgRD1wW1BdO0QhPT12b2lkIDA/KEkhPT0tMSYmKFIrPWVuY29kZVVSSUNvbXBvbmVudChDLnN1YnN0cmluZyhJLFQpKSxJPS0xKSxSKz1EKTpJPT09LTEmJihJPVQpfX1yZXR1cm4gSSE9PS0xJiYoUis9ZW5jb2RlVVJJQ29tcG9uZW50KEMuc3Vic3RyaW5nKEkpKSksUiE9PXZvaWQgMD9SOkN9ZnVuY3Rpb24gdyhDKXtsZXQgTjtmb3IobGV0IGs9MDtrPEMubGVuZ3RoO2srKyl7Y29uc3QgUj1DLmNoYXJDb2RlQXQoayk7Uj09PTM1fHxSPT09NjM/KE49PT12b2lkIDAmJihOPUMuc3Vic3RyKDAsaykpLE4rPXBbUl0pOk4hPT12b2lkIDAmJihOKz1DW2tdKX1yZXR1cm4gTiE9PXZvaWQgMD9OOkN9ZnVuY3Rpb24gXyhDLE4pe2xldCBrO3JldHVybiBrPUMuYXV0aG9yaXR5JiZDLnBhdGgubGVuZ3RoPjEmJkMuc2NoZW1lPT09ImZpbGUiP2AvLyR7Qy5hdXRob3JpdHl9JHtDLnBhdGh9YDpDLnBhdGguY2hhckNvZGVBdCgwKT09PTQ3JiYoQy5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZDLnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fEMucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmQy5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJkMucGF0aC5jaGFyQ29kZUF0KDIpPT09NTg/Qy5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrQy5wYXRoLnN1YnN0cigyKTpDLnBhdGgsaSYmKGs9ay5yZXBsYWNlKC9cLy9nLCJcXCIpKSxrfWZ1bmN0aW9uIHgoQyxOKXtjb25zdCBrPU4/dzp2O2xldCBSPSIiLHtzY2hlbWU6SSxhdXRob3JpdHk6VCxwYXRoOlAscXVlcnk6RCxmcmFnbWVudDpVfT1DO2lmKEkmJihSKz1JLFIrPSI6IiksKFR8fEk9PT0iZmlsZSIpJiYoUis9aCxSKz1oKSxUKXtsZXQgaj1ULmluZGV4T2YoIkAiKTtpZihqIT09LTEpe2NvbnN0IG5lPVQuc3Vic3RyKDAsaik7VD1ULnN1YnN0cihqKzEpLGo9bmUubGFzdEluZGV4T2YoIjoiKSxqPT09LTE/Uis9ayhuZSwhMSwhMSk6KFIrPWsobmUuc3Vic3RyKDAsaiksITEsITEpLFIrPSI6IixSKz1rKG5lLnN1YnN0cihqKzEpLCExLCEwKSksUis9IkAifVQ9VC50b0xvd2VyQ2FzZSgpLGo9VC5sYXN0SW5kZXhPZigiOiIpLGo9PT0tMT9SKz1rKFQsITEsITApOihSKz1rKFQuc3Vic3RyKDAsaiksITEsITApLFIrPVQuc3Vic3RyKGopKX1pZihQKXtpZihQLmxlbmd0aD49MyYmUC5jaGFyQ29kZUF0KDApPT09NDcmJlAuY2hhckNvZGVBdCgyKT09PTU4KXtjb25zdCBqPVAuY2hhckNvZGVBdCgxKTtqPj02NSYmajw9OTAmJihQPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGorMzIpfToke1Auc3Vic3RyKDMpfWApfWVsc2UgaWYoUC5sZW5ndGg+PTImJlAuY2hhckNvZGVBdCgxKT09PTU4KXtjb25zdCBqPVAuY2hhckNvZGVBdCgwKTtqPj02NSYmajw9OTAmJihQPWAke1N0cmluZy5mcm9tQ2hhckNvZGUoaiszMil9OiR7UC5zdWJzdHIoMil9YCl9Uis9ayhQLCEwLCExKX1yZXR1cm4gRCYmKFIrPSI/IixSKz1rKEQsITEsITEpKSxVJiYoUis9IiMiLFIrPU4/VTp2KFUsITEsITEpKSxSfWZ1bmN0aW9uIHkoQyl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoQyl9Y2F0Y2h7cmV0dXJuIEMubGVuZ3RoPjM/Qy5zdWJzdHIoMCwzKSt5KEMuc3Vic3RyKDMpKTpDfX1jb25zdCBiPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIEwoQyl7cmV0dXJuIEMubWF0Y2goYik/Qy5yZXBsYWNlKGIsTj0+eShOKSk6Q312YXIgUz1uKDQ3MCk7Y29uc3QgTT1TLnBvc2l4fHxTLEY9Ii8iO3ZhciBPOyhmdW5jdGlvbihDKXtDLmpvaW5QYXRoPWZ1bmN0aW9uKE4sLi4uayl7cmV0dXJuIE4ud2l0aCh7cGF0aDpNLmpvaW4oTi5wYXRoLC4uLmspfSl9LEMucmVzb2x2ZVBhdGg9ZnVuY3Rpb24oTiwuLi5rKXtsZXQgUj1OLnBhdGgsST0hMTtSWzBdIT09RiYmKFI9RitSLEk9ITApO2xldCBUPU0ucmVzb2x2ZShSLC4uLmspO3JldHVybiBJJiZUWzBdPT09RiYmIU4uYXV0aG9yaXR5JiYoVD1ULnN1YnN0cmluZygxKSksTi53aXRoKHtwYXRoOlR9KX0sQy5kaXJuYW1lPWZ1bmN0aW9uKE4pe2lmKE4ucGF0aC5sZW5ndGg9PT0wfHxOLnBhdGg9PT1GKXJldHVybiBOO2xldCBrPU0uZGlybmFtZShOLnBhdGgpO3JldHVybiBrLmxlbmd0aD09PTEmJmsuY2hhckNvZGVBdCgwKT09PTQ2JiYoaz0iIiksTi53aXRoKHtwYXRoOmt9KX0sQy5iYXNlbmFtZT1mdW5jdGlvbihOKXtyZXR1cm4gTS5iYXNlbmFtZShOLnBhdGgpfSxDLmV4dG5hbWU9ZnVuY3Rpb24oTil7cmV0dXJuIE0uZXh0bmFtZShOLnBhdGgpfX0pKE98fChPPXt9KSl9KSgpLFdvPXJ9KSgpO3ZhcntVUkk6Q3QsVXRpbHM6WjF9PVdvO2Z1bmN0aW9uIGIxKGUsdCl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7Y29uc3Qgbj1TdHJpbmcoZSk7bGV0IHI9IiI7Y29uc3QgaT10PyEhdC5leHRlbmRlZDohMSxzPXQ/ISF0Lmdsb2JzdGFyOiExO2xldCBhPSExO2NvbnN0IGw9dCYmdHlwZW9mIHQuZmxhZ3M9PSJzdHJpbmciP3QuZmxhZ3M6IiI7bGV0IG87Zm9yKGxldCB1PTAsaD1uLmxlbmd0aDt1PGg7dSsrKXN3aXRjaChvPW5bdV0sbyl7Y2FzZSIvIjpjYXNlIiQiOmNhc2UiXiI6Y2FzZSIrIjpjYXNlIi4iOmNhc2UiKCI6Y2FzZSIpIjpjYXNlIj0iOmNhc2UiISI6Y2FzZSJ8IjpyKz0iXFwiK287YnJlYWs7Y2FzZSI/IjppZihpKXtyKz0iLiI7YnJlYWt9Y2FzZSJbIjpjYXNlIl0iOmlmKGkpe3IrPW87YnJlYWt9Y2FzZSJ7IjppZihpKXthPSEwLHIrPSIoIjticmVha31jYXNlIn0iOmlmKGkpe2E9ITEscis9IikiO2JyZWFrfWNhc2UiLCI6aWYoYSl7cis9InwiO2JyZWFrfXIrPSJcXCIrbzticmVhaztjYXNlIioiOmNvbnN0IGM9blt1LTFdO2xldCBkPTE7Zm9yKDtuW3UrMV09PT0iKiI7KWQrKyx1Kys7Y29uc3QgbT1uW3UrMV07cz9kPjEmJihjPT09Ii8ifHxjPT09dm9pZCAwfHxjPT09InsifHxjPT09IiwiKSYmKG09PT0iLyJ8fG09PT12b2lkIDB8fG09PT0iLCJ8fG09PT0ifSIpPyhtPT09Ii8iP3UrKzpjPT09Ii8iJiZyLmVuZHNXaXRoKCJcXC8iKSYmKHI9ci5zdWJzdHIoMCxyLmxlbmd0aC0yKSkscis9IigoPzpbXi9dKig/Oi98JCkpKikiKTpyKz0iKFteL10qKSI6cis9Ii4qIjticmVhaztkZWZhdWx0OnIrPW99cmV0dXJuKCFsfHwhfmwuaW5kZXhPZigiZyIpKSYmKHI9Il4iK3IrIiQiKSxuZXcgUmVnRXhwKHIsbCl9dmFyIHYxPSIhIix4MT0iLyIseTE9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZm9sZGVyVXJpPXQsdGhpcy51cmlzPW4sdGhpcy5nbG9iV3JhcHBlcnM9W107dHJ5e2ZvcihsZXQgciBvZiBlKXtjb25zdCBpPXJbMF0hPT12MTtpfHwocj1yLnN1YnN0cmluZygxKSksci5sZW5ndGg+MCYmKHJbMF09PT14MSYmKHI9ci5zdWJzdHJpbmcoMSkpLHRoaXMuZ2xvYldyYXBwZXJzLnB1c2goe3JlZ2V4cDpiMSgiKiovIityLHtleHRlbmRlZDohMCxnbG9ic3RhcjohMH0pLGluY2x1ZGU6aX0pKX10JiYodD16byh0KSx0LmVuZHNXaXRoKCIvIil8fCh0PXQrIi8iKSx0aGlzLmZvbGRlclVyaT10KX1jYXRjaHt0aGlzLmdsb2JXcmFwcGVycy5sZW5ndGg9MCx0aGlzLnVyaXM9W119fW1hdGNoZXNQYXR0ZXJuKGUpe2lmKHRoaXMuZm9sZGVyVXJpJiYhZS5zdGFydHNXaXRoKHRoaXMuZm9sZGVyVXJpKSlyZXR1cm4hMTtsZXQgdD0hMTtmb3IoY29uc3R7cmVnZXhwOm4saW5jbHVkZTpyfW9mIHRoaXMuZ2xvYldyYXBwZXJzKW4udGVzdChlKSYmKHQ9cik7cmV0dXJuIHR9Z2V0VVJJcygpe3JldHVybiB0aGlzLnVyaXN9fSx3MT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5zZXJ2aWNlPWUsdGhpcy51cmk9dCx0aGlzLmRlcGVuZGVuY2llcz1uZXcgU2V0LHRoaXMuYW5jaG9ycz12b2lkIDAsbiYmKHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UucHJvbWlzZS5yZXNvbHZlKG5ldyBlbihuKSkpfWdldFVucmVzb2x2ZWRTY2hlbWEoKXtyZXR1cm4gdGhpcy51bnJlc29sdmVkU2NoZW1hfHwodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5sb2FkU2NoZW1hKHRoaXMudXJpKSksdGhpcy51bnJlc29sdmVkU2NoZW1hfWdldFJlc29sdmVkU2NoZW1hKCl7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWF8fCh0aGlzLnJlc29sdmVkU2NoZW1hPXRoaXMuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oZT0+dGhpcy5zZXJ2aWNlLnJlc29sdmVTY2hlbWFDb250ZW50KGUsdGhpcykpKSx0aGlzLnJlc29sdmVkU2NoZW1hfWNsZWFyU2NoZW1hKCl7Y29uc3QgZT0hIXRoaXMudW5yZXNvbHZlZFNjaGVtYTtyZXR1cm4gdGhpcy5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy51bnJlc29sdmVkU2NoZW1hPXZvaWQgMCx0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpLHRoaXMuYW5jaG9ycz12b2lkIDAsZX19LGVuPWNsYXNze2NvbnN0cnVjdG9yKGUsdD1bXSl7dGhpcy5zY2hlbWE9ZSx0aGlzLmVycm9ycz10fX0sSG89Y2xhc3N7Y29uc3RydWN0b3IoZSx0PVtdLG49W10scil7dGhpcy5zY2hlbWE9ZSx0aGlzLmVycm9ycz10LHRoaXMud2FybmluZ3M9bix0aGlzLnNjaGVtYURyYWZ0PXJ9Z2V0U2VjdGlvbihlKXtjb25zdCB0PXRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHRoaXMuc2NoZW1hKTtpZih0KXJldHVybiB3ZSh0KX1nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdCl7aWYoIXR8fHR5cGVvZiB0PT0iYm9vbGVhbiJ8fGUubGVuZ3RoPT09MClyZXR1cm4gdDtjb25zdCBuPWUuc2hpZnQoKTtpZih0LnByb3BlcnRpZXMmJnR5cGVvZiB0LnByb3BlcnRpZXNbbl0pcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQucHJvcGVydGllc1tuXSk7aWYodC5wYXR0ZXJuUHJvcGVydGllcyl7Zm9yKGNvbnN0IHIgb2YgT2JqZWN0LmtleXModC5wYXR0ZXJuUHJvcGVydGllcykpaWYoTW4ocik/LnRlc3QobikpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQucGF0dGVyblByb3BlcnRpZXNbcl0pfWVsc2V7aWYodHlwZW9mIHQuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtpZihuLm1hdGNoKCJbMC05XSsiKSl7aWYoQXJyYXkuaXNBcnJheSh0Lml0ZW1zKSl7Y29uc3Qgcj1wYXJzZUludChuLDEwKTtpZighaXNOYU4ocikmJnQuaXRlbXNbcl0pcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuaXRlbXNbcl0pfWVsc2UgaWYodC5pdGVtcylyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5pdGVtcyl9fX19LF8xPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLmNvbnRleHRTZXJ2aWNlPXQsdGhpcy5yZXF1ZXN0U2VydmljZT1lLHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPW58fFByb21pc2UsdGhpcy5jYWxsT25EaXNwb3NlPVtdLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcz17fSx0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucz1bXSx0aGlzLnNjaGVtYXNCeUlkPXt9LHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM9W10sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcz17fX1nZXRSZWdpc3RlcmVkU2NoZW1hSWRzKGUpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzKS5maWx0ZXIodD0+e2NvbnN0IG49Q3QucGFyc2UodCkuc2NoZW1lO3JldHVybiBuIT09InNjaGVtYXNlcnZpY2UiJiYoIWV8fGUobikpfSl9Z2V0IHByb21pc2UoKXtyZXR1cm4gdGhpcy5wcm9taXNlQ29uc3RydWN0b3J9ZGlzcG9zZSgpe2Zvcig7dGhpcy5jYWxsT25EaXNwb3NlLmxlbmd0aD4wOyl0aGlzLmNhbGxPbkRpc3Bvc2UucG9wKCkoKX1vblJlc291cmNlQ2hhbmdlKGUpe3RoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwO2xldCB0PSExO2U9bnQoZSk7Y29uc3Qgbj1bZV0scj1PYmplY3Qua2V5cyh0aGlzLnNjaGVtYXNCeUlkKS5tYXAoaT0+dGhpcy5zY2hlbWFzQnlJZFtpXSk7Zm9yKDtuLmxlbmd0aDspe2NvbnN0IGk9bi5wb3AoKTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKyl7Y29uc3QgYT1yW3NdO2EmJihhLnVyaT09PWl8fGEuZGVwZW5kZW5jaWVzLmhhcyhpKSkmJihhLnVyaSE9PWkmJm4ucHVzaChhLnVyaSksYS5jbGVhclNjaGVtYSgpJiYodD0hMCkscltzXT12b2lkIDApfX1yZXR1cm4gdH1zZXRTY2hlbWFDb250cmlidXRpb25zKGUpe2lmKGUuc2NoZW1hcyl7Y29uc3QgdD1lLnNjaGVtYXM7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgcj1udChuKTt0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbcl09dGhpcy5hZGRTY2hlbWFIYW5kbGUocix0W25dKX19aWYoQXJyYXkuaXNBcnJheShlLnNjaGVtYUFzc29jaWF0aW9ucykpe2NvbnN0IHQ9ZS5zY2hlbWFBc3NvY2lhdGlvbnM7Zm9yKGxldCBuIG9mIHQpe2NvbnN0IHI9bi51cmlzLm1hcChudCksaT10aGlzLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb24obi5wYXR0ZXJuLG4uZm9sZGVyVXJpLHIpO3RoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zLnB1c2goaSl9fX1hZGRTY2hlbWFIYW5kbGUoZSx0KXtjb25zdCBuPW5ldyB3MSh0aGlzLGUsdCk7cmV0dXJuIHRoaXMuc2NoZW1hc0J5SWRbZV09bixufWdldE9yQWRkU2NoZW1hSGFuZGxlKGUsdCl7cmV0dXJuIHRoaXMuc2NoZW1hc0J5SWRbZV18fHRoaXMuYWRkU2NoZW1hSGFuZGxlKGUsdCl9YWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbihlLHQsbil7Y29uc3Qgcj1uZXcgeTEoZSx0LG4pO3JldHVybiB0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2gocikscn1yZWdpc3RlckV4dGVybmFsU2NoZW1hKGUpe2NvbnN0IHQ9bnQoZS51cmkpO3JldHVybiB0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzW3RdPSEwLHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwLGUuZmlsZU1hdGNoJiZlLmZpbGVNYXRjaC5sZW5ndGgmJnRoaXMuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbihlLmZpbGVNYXRjaCxlLmZvbGRlclVyaSxbdF0pLGUuc2NoZW1hP3RoaXMuYWRkU2NoZW1hSGFuZGxlKHQsZS5zY2hlbWEpOnRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUodCl9Y2xlYXJFeHRlcm5hbFNjaGVtYXMoKXt0aGlzLnNjaGVtYXNCeUlkPXt9LHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM9W10sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcz17fSx0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMDtmb3IoY29uc3QgZSBpbiB0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXMpdGhpcy5zY2hlbWFzQnlJZFtlXT10aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbZV0sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkc1tlXT0hMDtmb3IoY29uc3QgZSBvZiB0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucyl0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2goZSl9Z2V0UmVzb2x2ZWRTY2hlbWEoZSl7Y29uc3QgdD1udChlKSxuPXRoaXMuc2NoZW1hc0J5SWRbdF07cmV0dXJuIG4/bi5nZXRSZXNvbHZlZFNjaGVtYSgpOnRoaXMucHJvbWlzZS5yZXNvbHZlKHZvaWQgMCl9bG9hZFNjaGVtYShlKXtpZighdGhpcy5yZXF1ZXN0U2VydmljZSl7Y29uc3QgdD1FKCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9Jy4gTm8gc2NoZW1hIHJlcXVlc3Qgc2VydmljZSBhdmFpbGFibGUiLHRuKGUpKTtyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IGVuKHt9LFt0XSkpfXJldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvIikmJihlPSJodHRwcyIrZS5zdWJzdHJpbmcoNCkpLHRoaXMucmVxdWVzdFNlcnZpY2UoZSkudGhlbih0PT57aWYoIXQpe2NvbnN0IHM9RSgiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfSc6IE5vIGNvbnRlbnQuIix0bihlKSk7cmV0dXJuIG5ldyBlbih7fSxbc10pfWNvbnN0IG49W107dC5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihuLnB1c2goRSgiUHJvYmxlbSByZWFkaW5nIGNvbnRlbnQgZnJvbSAnezB9JzogVVRGLTggd2l0aCBCT00gZGV0ZWN0ZWQsIG9ubHkgVVRGIDggaXMgYWxsb3dlZC4iLHRuKGUpKSksdD10LnRyaW1TdGFydCgpKTtsZXQgcj17fTtjb25zdCBpPVtdO3JldHVybiByPVVjKHQsaSksaS5sZW5ndGgmJm4ucHVzaChFKCJVbmFibGUgdG8gcGFyc2UgY29udGVudCBmcm9tICd7MH0nOiBQYXJzZSBlcnJvciBhdCBvZmZzZXQgezF9LiIsdG4oZSksaVswXS5vZmZzZXQpKSxuZXcgZW4ocixuKX0sdD0+e2xldCBuPXQudG9TdHJpbmcoKTtjb25zdCByPXQudG9TdHJpbmcoKS5zcGxpdCgiRXJyb3I6ICIpO3JldHVybiByLmxlbmd0aD4xJiYobj1yWzFdKSxRdChuLCIuIikmJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtMSkpLG5ldyBlbih7fSxbRSgiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfSc6IHsxfS4iLHRuKGUpLG4pXSl9KX1yZXNvbHZlU2NoZW1hQ29udGVudChlLHQpe2NvbnN0IG49ZS5lcnJvcnMuc2xpY2UoMCkscj1lLnNjaGVtYTtsZXQgaT1yLiRzY2hlbWE/bnQoci4kc2NoZW1hKTp2b2lkIDA7aWYoaT09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTAzL3NjaGVtYSIpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG5ldyBIbyh7fSxbRSgiRHJhZnQtMDMgc2NoZW1hcyBhcmUgbm90IHN1cHBvcnRlZC4iKV0sW10saSkpO2xldCBzPW5ldyBTZXQ7Y29uc3QgYT10aGlzLmNvbnRleHRTZXJ2aWNlLGw9KGcscCk9PntwPWRlY29kZVVSSUNvbXBvbmVudChwKTtsZXQgdj1nO3JldHVybiBwWzBdPT09Ii8iJiYocD1wLnN1YnN0cmluZygxKSkscC5zcGxpdCgiLyIpLnNvbWUodz0+KHc9dy5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpLHY9dlt3XSwhdikpLHZ9LG89KGcscCx2KT0+KHAuYW5jaG9yc3x8KHAuYW5jaG9ycz1tKGcpKSxwLmFuY2hvcnMuZ2V0KHYpKSx1PShnLHApPT57Zm9yKGNvbnN0IHYgaW4gcClwLmhhc093blByb3BlcnR5KHYpJiZ2IT09ImlkIiYmdiE9PSIkaWQiJiYoZ1t2XT1wW3ZdKX0saD0oZyxwLHYsdyk9PntsZXQgXzt3PT09dm9pZCAwfHx3Lmxlbmd0aD09PTA/Xz1wOncuY2hhckF0KDApPT09Ii8iP189bChwLHcpOl89byhwLHYsdyksXz91KGcsXyk6bi5wdXNoKEUoIiRyZWYgJ3swfScgaW4gJ3sxfScgY2FuIG5vdCBiZSByZXNvbHZlZC4iLHd8fCIiLHYudXJpKSl9LGM9KGcscCx2LHcpPT57YSYmIS9eW0EtWmEtel1bQS1aYS16MC05K1wtLitdKjpcL1wvLiovLnRlc3QocCkmJihwPWEucmVzb2x2ZVJlbGF0aXZlUGF0aChwLHcudXJpKSkscD1udChwKTtjb25zdCBfPXRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUocCk7cmV0dXJuIF8uZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oeD0+e2lmKHcuZGVwZW5kZW5jaWVzLmFkZChwKSx4LmVycm9ycy5sZW5ndGgpe2NvbnN0IHk9dj9wKyIjIit2OnA7bi5wdXNoKEUoIlByb2JsZW1zIGxvYWRpbmcgcmVmZXJlbmNlICd7MH0nOiB7MX0iLHkseC5lcnJvcnNbMF0pKX1yZXR1cm4gaChnLHguc2NoZW1hLF8sdiksZChnLHguc2NoZW1hLF8pfSl9LGQ9KGcscCx2KT0+e2NvbnN0IHc9W107cmV0dXJuIHRoaXMudHJhdmVyc2VOb2RlcyhnLF89Pntjb25zdCB4PW5ldyBTZXQ7Zm9yKDtfLiRyZWY7KXtjb25zdCB5PV8uJHJlZixiPXkuc3BsaXQoIiMiLDIpO2lmKGRlbGV0ZSBfLiRyZWYsYlswXS5sZW5ndGg+MCl7dy5wdXNoKGMoXyxiWzBdLGJbMV0sdikpO3JldHVybn1lbHNlIGlmKCF4Lmhhcyh5KSl7Y29uc3QgTD1iWzFdO2goXyxwLHYsTCkseC5hZGQoeSl9fV8uJHJlY3Vyc2l2ZVJlZiYmcy5hZGQoIiRyZWN1cnNpdmVSZWYiKSxfLiRkeW5hbWljUmVmJiZzLmFkZCgiJGR5bmFtaWNSZWYiKX0pLHRoaXMucHJvbWlzZS5hbGwodyl9LG09Zz0+e2NvbnN0IHA9bmV3IE1hcDtyZXR1cm4gdGhpcy50cmF2ZXJzZU5vZGVzKGcsdj0+e2NvbnN0IHc9di4kaWR8fHYuaWQsXz1JYSh3KSYmdy5jaGFyQXQoMCk9PT0iIyI/dy5zdWJzdHJpbmcoMSk6di4kYW5jaG9yO18mJihwLmhhcyhfKT9uLnB1c2goRSgiRHVwbGljYXRlIGFuY2hvciBkZWNsYXJhdGlvbjogJ3swfSciLF8pKTpwLnNldChfLHYpKSx2LiRyZWN1cnNpdmVBbmNob3ImJnMuYWRkKCIkcmVjdXJzaXZlQW5jaG9yIiksdi4kZHluYW1pY0FuY2hvciYmcy5hZGQoIiRkeW5hbWljQW5jaG9yIil9KSxwfTtyZXR1cm4gZChyLHIsdCkudGhlbihnPT57bGV0IHA9W107cmV0dXJuIHMuc2l6ZSYmcC5wdXNoKEUoIlRoZSBzY2hlbWEgdXNlcyBtZXRhLXNjaGVtYSBmZWF0dXJlcyAoezB9KSB0aGF0IGFyZSBub3QgeWV0IHN1cHBvcnRlZCBieSB0aGUgdmFsaWRhdG9yLiIsQXJyYXkuZnJvbShzLmtleXMoKSkuam9pbigiLCAiKSkpLG5ldyBIbyhyLG4scCxpKX0pfXRyYXZlcnNlTm9kZXMoZSx0KXtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7Y29uc3Qgbj1uZXcgU2V0LHI9KC4uLnUpPT57Zm9yKGNvbnN0IGggb2YgdSlldChoKSYmbC5wdXNoKGgpfSxpPSguLi51KT0+e2Zvcihjb25zdCBoIG9mIHUpaWYoZXQoaCkpZm9yKGNvbnN0IGMgaW4gaCl7Y29uc3QgbT1oW2NdO2V0KG0pJiZsLnB1c2gobSl9fSxzPSguLi51KT0+e2Zvcihjb25zdCBoIG9mIHUpaWYoQXJyYXkuaXNBcnJheShoKSlmb3IoY29uc3QgYyBvZiBoKWV0KGMpJiZsLnB1c2goYyl9LGE9dT0+e2lmKEFycmF5LmlzQXJyYXkodSkpZm9yKGNvbnN0IGggb2YgdSlldChoKSYmbC5wdXNoKGgpO2Vsc2UgZXQodSkmJmwucHVzaCh1KX0sbD1bZV07bGV0IG89bC5wb3AoKTtmb3IoO287KW4uaGFzKG8pfHwobi5hZGQobyksdChvKSxyKG8uYWRkaXRpb25hbEl0ZW1zLG8uYWRkaXRpb25hbFByb3BlcnRpZXMsby5ub3Qsby5jb250YWlucyxvLnByb3BlcnR5TmFtZXMsby5pZixvLnRoZW4sby5lbHNlLG8udW5ldmFsdWF0ZWRJdGVtcyxvLnVuZXZhbHVhdGVkUHJvcGVydGllcyksaShvLmRlZmluaXRpb25zLG8uJGRlZnMsby5wcm9wZXJ0aWVzLG8ucGF0dGVyblByb3BlcnRpZXMsby5kZXBlbmRlbmNpZXMsby5kZXBlbmRlbnRTY2hlbWFzKSxzKG8uYW55T2Ysby5hbGxPZixvLm9uZU9mLG8ucHJlZml4SXRlbXMpLGEoby5pdGVtcykpLG89bC5wb3AoKX1nZXRTY2hlbWFGcm9tUHJvcGVydHkoZSx0KXtpZih0LnJvb3Q/LnR5cGU9PT0ib2JqZWN0Iil7Zm9yKGNvbnN0IG4gb2YgdC5yb290LnByb3BlcnRpZXMpaWYobi5rZXlOb2RlLnZhbHVlPT09IiRzY2hlbWEiJiZuLnZhbHVlTm9kZT8udHlwZT09PSJzdHJpbmciKXtsZXQgcj1uLnZhbHVlTm9kZS52YWx1ZTtyZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZSYmIS9eXHdbXHdcZCsuLV0qOi8udGVzdChyKSYmKHI9dGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlUmVsYXRpdmVQYXRoKHIsZSkpLHJ9fX1nZXRBc3NvY2lhdGVkU2NoZW1hcyhlKXtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCksbj1bXSxyPXpvKGUpO2Zvcihjb25zdCBpIG9mIHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnMpaWYoaS5tYXRjaGVzUGF0dGVybihyKSlmb3IoY29uc3QgcyBvZiBpLmdldFVSSXMoKSl0W3NdfHwobi5wdXNoKHMpLHRbc109ITApO3JldHVybiBufWdldFNjaGVtYVVSSXNGb3JSZXNvdXJjZShlLHQpe2xldCBuPXQmJnRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7cmV0dXJuIG4/W25dOnRoaXMuZ2V0QXNzb2NpYXRlZFNjaGVtYXMoZSl9Z2V0U2NoZW1hRm9yUmVzb3VyY2UoZSx0KXtpZih0KXtsZXQgaT10aGlzLmdldFNjaGVtYUZyb21Qcm9wZXJ0eShlLHQpO2lmKGkpe2NvbnN0IHM9bnQoaSk7cmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUocykuZ2V0UmVzb2x2ZWRTY2hlbWEoKX19aWYodGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZSYmdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvdXJjZT09PWUpcmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb2x2ZWRTY2hlbWE7Y29uc3Qgbj10aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKGUpLHI9bi5sZW5ndGg+MD90aGlzLmNyZWF0ZUNvbWJpbmVkU2NoZW1hKGUsbikuZ2V0UmVzb2x2ZWRTY2hlbWEoKTp0aGlzLnByb21pc2UucmVzb2x2ZSh2b2lkIDApO3JldHVybiB0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXtyZXNvdXJjZTplLHJlc29sdmVkU2NoZW1hOnJ9LHJ9Y3JlYXRlQ29tYmluZWRTY2hlbWEoZSx0KXtpZih0Lmxlbmd0aD09PTEpcmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUodFswXSk7e2NvbnN0IG49InNjaGVtYXNlcnZpY2U6Ly9jb21iaW5lZFNjaGVtYS8iK2VuY29kZVVSSUNvbXBvbmVudChlKSxyPXthbGxPZjp0Lm1hcChpPT4oeyRyZWY6aX0pKX07cmV0dXJuIHRoaXMuYWRkU2NoZW1hSGFuZGxlKG4scil9fWdldE1hdGNoaW5nU2NoZW1hcyhlLHQsbil7aWYobil7Y29uc3Qgcj1uLmlkfHwic2NoZW1hc2VydmljZTovL3VudGl0bGVkL21hdGNoaW5nU2NoZW1hcy8iK0wxKys7cmV0dXJuIHRoaXMuYWRkU2NoZW1hSGFuZGxlKHIsbikuZ2V0UmVzb2x2ZWRTY2hlbWEoKS50aGVuKHM9PnQuZ2V0TWF0Y2hpbmdTY2hlbWFzKHMuc2NoZW1hKS5maWx0ZXIoYT0+IWEuaW52ZXJ0ZWQpKX1yZXR1cm4gdGhpcy5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSx0KS50aGVuKHI9PnI/dC5nZXRNYXRjaGluZ1NjaGVtYXMoci5zY2hlbWEpLmZpbHRlcihpPT4haS5pbnZlcnRlZCk6W10pfX0sTDE9MDtmdW5jdGlvbiBudChlKXt0cnl7cmV0dXJuIEN0LnBhcnNlKGUpLnRvU3RyaW5nKCEwKX1jYXRjaHtyZXR1cm4gZX19ZnVuY3Rpb24gem8oZSl7dHJ5e3JldHVybiBDdC5wYXJzZShlKS53aXRoKHtmcmFnbWVudDpudWxsLHF1ZXJ5Om51bGx9KS50b1N0cmluZyghMCl9Y2F0Y2h7cmV0dXJuIGV9fWZ1bmN0aW9uIHRuKGUpe3RyeXtjb25zdCB0PUN0LnBhcnNlKGUpO2lmKHQuc2NoZW1lPT09ImZpbGUiKXJldHVybiB0LmZzUGF0aH1jYXRjaHt9cmV0dXJuIGV9ZnVuY3Rpb24gTjEoZSx0KXtjb25zdCBuPVtdLHI9W10saT1bXTtsZXQgcz0tMTtjb25zdCBhPWF0KGUuZ2V0VGV4dCgpLCExKTtsZXQgbD1hLnNjYW4oKTtmdW5jdGlvbiBvKGcpe24ucHVzaChnKSxyLnB1c2goaS5sZW5ndGgpfWZvcig7bCE9PTE3Oyl7c3dpdGNoKGwpe2Nhc2UgMTpjYXNlIDM6e2NvbnN0IGc9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSkubGluZSxwPXtzdGFydExpbmU6ZyxlbmRMaW5lOmcsa2luZDpsPT09MT8ib2JqZWN0IjoiYXJyYXkifTtpLnB1c2gocCk7YnJlYWt9Y2FzZSAyOmNhc2UgNDp7Y29uc3QgZz1sPT09Mj8ib2JqZWN0IjoiYXJyYXkiO2lmKGkubGVuZ3RoPjAmJmlbaS5sZW5ndGgtMV0ua2luZD09PWcpe2NvbnN0IHA9aS5wb3AoKSx2PWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7cCYmdj5wLnN0YXJ0TGluZSsxJiZzIT09cC5zdGFydExpbmUmJihwLmVuZExpbmU9di0xLG8ocCkscz1wLnN0YXJ0TGluZSl9YnJlYWt9Y2FzZSAxMzp7Y29uc3QgZz1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLHA9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSthLmdldFRva2VuTGVuZ3RoKCkpLmxpbmU7YS5nZXRUb2tlbkVycm9yKCk9PT0xJiZnKzE8ZS5saW5lQ291bnQ/YS5zZXRQb3NpdGlvbihlLm9mZnNldEF0KFouY3JlYXRlKGcrMSwwKSkpOmc8cCYmKG8oe3N0YXJ0TGluZTpnLGVuZExpbmU6cCxraW5kOll0LkNvbW1lbnR9KSxzPWcpO2JyZWFrfWNhc2UgMTI6e2NvbnN0IHA9ZS5nZXRUZXh0KCkuc3Vic3RyKGEuZ2V0VG9rZW5PZmZzZXQoKSxhLmdldFRva2VuTGVuZ3RoKCkpLm1hdGNoKC9eXC9cL1xzKiMocmVnaW9uXGIpfChlbmRyZWdpb25cYikvKTtpZihwKXtjb25zdCB2PWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7aWYocFsxXSl7Y29uc3Qgdz17c3RhcnRMaW5lOnYsZW5kTGluZTp2LGtpbmQ6WXQuUmVnaW9ufTtpLnB1c2godyl9ZWxzZXtsZXQgdz1pLmxlbmd0aC0xO2Zvcig7dz49MCYmaVt3XS5raW5kIT09WXQuUmVnaW9uOyl3LS07aWYodz49MCl7Y29uc3QgXz1pW3ddO2kubGVuZ3RoPXcsdj5fLnN0YXJ0TGluZSYmcyE9PV8uc3RhcnRMaW5lJiYoXy5lbmRMaW5lPXYsbyhfKSxzPV8uc3RhcnRMaW5lKX19fWJyZWFrfX1sPWEuc2NhbigpfWNvbnN0IHU9dCYmdC5yYW5nZUxpbWl0O2lmKHR5cGVvZiB1IT0ibnVtYmVyInx8bi5sZW5ndGg8PXUpcmV0dXJuIG47dCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZChlLnVyaSk7Y29uc3QgaD1bXTtmb3IobGV0IGcgb2YgcilnPDMwJiYoaFtnXT0oaFtnXXx8MCkrMSk7bGV0IGM9MCxkPTA7Zm9yKGxldCBnPTA7ZzxoLmxlbmd0aDtnKyspe2NvbnN0IHA9aFtnXTtpZihwKXtpZihwK2M+dSl7ZD1nO2JyZWFrfWMrPXB9fWNvbnN0IG09W107Zm9yKGxldCBnPTA7ZzxuLmxlbmd0aDtnKyspe2NvbnN0IHA9cltnXTt0eXBlb2YgcD09Im51bWJlciImJihwPGR8fHA9PT1kJiZjKys8dSkmJm0ucHVzaChuW2ddKX1yZXR1cm4gbX1mdW5jdGlvbiBTMShlLHQsbil7ZnVuY3Rpb24gcihsKXtsZXQgbz1lLm9mZnNldEF0KGwpLHU9bi5nZXROb2RlRnJvbU9mZnNldChvLCEwKTtjb25zdCBoPVtdO2Zvcig7dTspe3N3aXRjaCh1LnR5cGUpe2Nhc2Uic3RyaW5nIjpjYXNlIm9iamVjdCI6Y2FzZSJhcnJheSI6Y29uc3QgZD11Lm9mZnNldCsxLG09dS5vZmZzZXQrdS5sZW5ndGgtMTtkPG0mJm8+PWQmJm88PW0mJmgucHVzaChpKGQsbSkpLGgucHVzaChpKHUub2Zmc2V0LHUub2Zmc2V0K3UubGVuZ3RoKSk7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpjYXNlInByb3BlcnR5IjpoLnB1c2goaSh1Lm9mZnNldCx1Lm9mZnNldCt1Lmxlbmd0aCkpO2JyZWFrfWlmKHUudHlwZT09PSJwcm9wZXJ0eSJ8fHUucGFyZW50JiZ1LnBhcmVudC50eXBlPT09ImFycmF5Iil7Y29uc3QgZD1hKHUub2Zmc2V0K3UubGVuZ3RoLDUpO2QhPT0tMSYmaC5wdXNoKGkodS5vZmZzZXQsZCkpfXU9dS5wYXJlbnR9bGV0IGM7Zm9yKGxldCBkPWgubGVuZ3RoLTE7ZD49MDtkLS0pYz1Jbi5jcmVhdGUoaFtkXSxjKTtyZXR1cm4gY3x8KGM9SW4uY3JlYXRlKHEuY3JlYXRlKGwsbCkpKSxjfWZ1bmN0aW9uIGkobCxvKXtyZXR1cm4gcS5jcmVhdGUoZS5wb3NpdGlvbkF0KGwpLGUucG9zaXRpb25BdChvKSl9Y29uc3Qgcz1hdChlLmdldFRleHQoKSwhMCk7ZnVuY3Rpb24gYShsLG8pe3JldHVybiBzLnNldFBvc2l0aW9uKGwpLHMuc2NhbigpPT09bz9zLmdldFRva2VuT2Zmc2V0KCkrcy5nZXRUb2tlbkxlbmd0aCgpOi0xfXJldHVybiB0Lm1hcChyKX1mdW5jdGlvbiBzaShlLHQsbil7bGV0IHI7aWYobil7Y29uc3Qgcz1lLm9mZnNldEF0KG4uc3RhcnQpLGE9ZS5vZmZzZXRBdChuLmVuZCktcztyPXtvZmZzZXQ6cyxsZW5ndGg6YX19Y29uc3QgaT17dGFiU2l6ZTp0P3QudGFiU2l6ZTo0LGluc2VydFNwYWNlczp0Py5pbnNlcnRTcGFjZXM9PT0hMCxpbnNlcnRGaW5hbE5ld2xpbmU6dD8uaW5zZXJ0RmluYWxOZXdsaW5lPT09ITAsZW9sOmAKYCxrZWVwTGluZXM6dD8ua2VlcExpbmVzPT09ITB9O3JldHVybiBXYyhlLmdldFRleHQoKSxyLGkpLm1hcChzPT5WZS5yZXBsYWNlKHEuY3JlYXRlKGUucG9zaXRpb25BdChzLm9mZnNldCksZS5wb3NpdGlvbkF0KHMub2Zmc2V0K3MubGVuZ3RoKSkscy5jb250ZW50KSl9dmFyIHNlOyhmdW5jdGlvbihlKXtlW2UuT2JqZWN0PTBdPSJPYmplY3QiLGVbZS5BcnJheT0xXT0iQXJyYXkifSkoc2V8fChzZT17fSkpO3ZhciBEbj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMucHJvcGVydHlOYW1lPWU/PyIiLHRoaXMuYmVnaW5uaW5nTGluZU51bWJlcj10LHRoaXMuY2hpbGRyZW5Qcm9wZXJ0aWVzPVtdLHRoaXMubGFzdFByb3BlcnR5PSExLHRoaXMubm9LZXlOYW1lPSExfWFkZENoaWxkUHJvcGVydHkoZSl7aWYoZS5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcmVuUHJvcGVydGllcy5sZW5ndGg+MCl7bGV0IHQ9MDtlLm5vS2V5TmFtZT90PXRoaXMuY2hpbGRyZW5Qcm9wZXJ0aWVzLmxlbmd0aDp0PWsxKHRoaXMuY2hpbGRyZW5Qcm9wZXJ0aWVzLGUsQTEpLHQ8MCYmKHQ9dCotMS0xKSx0aGlzLmNoaWxkcmVuUHJvcGVydGllcy5zcGxpY2UodCwwLGUpfWVsc2UgdGhpcy5jaGlsZHJlblByb3BlcnRpZXMucHVzaChlKTtyZXR1cm4gZX19O2Z1bmN0aW9uIEExKGUsdCl7Y29uc3Qgbj1lLnByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpLHI9dC5wcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gbjxyPy0xOm4+cj8xOjB9ZnVuY3Rpb24gazEoZSx0LG4pe2NvbnN0IHI9dC5wcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKSxpPWVbMF0ucHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCkscz1lW2UubGVuZ3RoLTFdLnByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO2lmKHI8aSlyZXR1cm4gMDtpZihyPnMpcmV0dXJuIGUubGVuZ3RoO2xldCBhPTAsbD1lLmxlbmd0aC0xO2Zvcig7YTw9bDspe2xldCBvPWwrYT4+MSx1PW4odCxlW29dKTtpZih1PjApYT1vKzE7ZWxzZSBpZih1PDApbD1vLTE7ZWxzZSByZXR1cm4gb31yZXR1cm4tYS0xfWZ1bmN0aW9uIFIxKGUsdCl7Y29uc3Qgbj17Li4udCxrZWVwTGluZXM6ITF9LHI9RWUuYXBwbHlFZGl0cyhlLHNpKGUsbix2b2lkIDApKSxpPUVlLmNyZWF0ZSgidGVzdDovL3Rlc3QuanNvbiIsImpzb24iLDAscikscz1FMShpKSxhPU0xKGkscyksbD1zaShhLG4sdm9pZCAwKSxvPUVlLmFwcGx5RWRpdHMoYSxsKTtyZXR1cm5bVmUucmVwbGFjZShxLmNyZWF0ZShaLmNyZWF0ZSgwLDApLGUucG9zaXRpb25BdChlLmdldFRleHQoKS5sZW5ndGgpKSxvKV19ZnVuY3Rpb24gRTEoZSl7Y29uc3QgdD1lLmdldFRleHQoKSxuPWF0KHQsITEpO2xldCByPW5ldyBEbixpPXIscz1yLGE9cixsLG89MCx1PTAsaCxjLGQ9LTEsbT0tMSxnPTAscD0wLHY9W10sdz0hMSxfPSExO2Zvcig7KGw9bi5zY2FuKCkpIT09MTc7KXtpZih3PT09ITAmJmwhPT0xNCYmbCE9PTE1JiZsIT09MTImJmwhPT0xMyYmcy5lbmRMaW5lTnVtYmVyPT09dm9pZCAwKXtsZXQgeD1uLmdldFRva2VuU3RhcnRMaW5lKCk7Yz09PTJ8fGM9PT00P2EuZW5kTGluZU51bWJlcj14LTE6cy5lbmRMaW5lTnVtYmVyPXgtMSxnPXgsdz0hMX1pZihfPT09ITAmJmwhPT0xNCYmbCE9PTE1JiZsIT09MTImJmwhPT0xMyYmKGc9bi5nZXRUb2tlblN0YXJ0TGluZSgpLF89ITEpLG4uZ2V0VG9rZW5TdGFydExpbmUoKSE9PW8pe2ZvcihsZXQgeD1vO3g8bi5nZXRUb2tlblN0YXJ0TGluZSgpO3grKyl7Y29uc3QgeT1lLmdldFRleHQocS5jcmVhdGUoWi5jcmVhdGUoeCwwKSxaLmNyZWF0ZSh4KzEsMCkpKS5sZW5ndGg7dT11K3l9bz1uLmdldFRva2VuU3RhcnRMaW5lKCl9c3dpdGNoKGwpe2Nhc2UgMTA6e2lmKGg9PT12b2lkIDB8fGg9PT0xfHxoPT09NSYmdlt2Lmxlbmd0aC0xXT09PXNlLk9iamVjdCl7Y29uc3QgeD1uZXcgRG4obi5nZXRUb2tlblZhbHVlKCksZyk7YT1zLHM9aS5hZGRDaGlsZFByb3BlcnR5KHgpfWJyZWFrfWNhc2UgMzp7aWYoci5iZWdpbm5pbmdMaW5lTnVtYmVyPT09dm9pZCAwJiYoci5iZWdpbm5pbmdMaW5lTnVtYmVyPW4uZ2V0VG9rZW5TdGFydExpbmUoKSksdlt2Lmxlbmd0aC0xXT09PXNlLk9iamVjdClpPXM7ZWxzZSBpZih2W3YubGVuZ3RoLTFdPT09c2UuQXJyYXkpe2NvbnN0IHg9bmV3IERuKG4uZ2V0VG9rZW5WYWx1ZSgpLGcpO3gubm9LZXlOYW1lPSEwLGE9cyxzPWkuYWRkQ2hpbGRQcm9wZXJ0eSh4KSxpPXN9di5wdXNoKHNlLkFycmF5KSxzLnR5cGU9c2UuQXJyYXksZz1uLmdldFRva2VuU3RhcnRMaW5lKCksZysrO2JyZWFrfWNhc2UgMTp7aWYoci5iZWdpbm5pbmdMaW5lTnVtYmVyPT09dm9pZCAwKXIuYmVnaW5uaW5nTGluZU51bWJlcj1uLmdldFRva2VuU3RhcnRMaW5lKCk7ZWxzZSBpZih2W3YubGVuZ3RoLTFdPT09c2UuQXJyYXkpe2NvbnN0IHg9bmV3IERuKG4uZ2V0VG9rZW5WYWx1ZSgpLGcpO3gubm9LZXlOYW1lPSEwLGE9cyxzPWkuYWRkQ2hpbGRQcm9wZXJ0eSh4KX1zLnR5cGU9c2UuT2JqZWN0LHYucHVzaChzZS5PYmplY3QpLGk9cyxnPW4uZ2V0VG9rZW5TdGFydExpbmUoKSxnKys7YnJlYWt9Y2FzZSA0OntwPW4uZ2V0VG9rZW5TdGFydExpbmUoKSx2LnBvcCgpLHMuZW5kTGluZU51bWJlcj09PXZvaWQgMCYmKGg9PT0yfHxoPT09NCkmJihzLmVuZExpbmVOdW1iZXI9cC0xLHMubGFzdFByb3BlcnR5PSEwLHMubGluZVdoZXJlVG9BZGRDb21tYT1kLHMuaW5kZXhXaGVyZVRvQWRkQ29tYT1tLGE9cyxzPXM/cy5wYXJlbnQ6dm9pZCAwLGk9cyksci5lbmRMaW5lTnVtYmVyPXAsZz1wKzE7YnJlYWt9Y2FzZSAyOntwPW4uZ2V0VG9rZW5TdGFydExpbmUoKSx2LnBvcCgpLGghPT0xJiYocy5lbmRMaW5lTnVtYmVyPT09dm9pZCAwJiYocy5lbmRMaW5lTnVtYmVyPXAtMSxzLmxhc3RQcm9wZXJ0eT0hMCxzLmxpbmVXaGVyZVRvQWRkQ29tbWE9ZCxzLmluZGV4V2hlcmVUb0FkZENvbWE9bSksYT1zLHM9cz9zLnBhcmVudDp2b2lkIDAsaT1zKSxyLmVuZExpbmVOdW1iZXI9bi5nZXRUb2tlblN0YXJ0TGluZSgpLGc9cCsxO2JyZWFrfWNhc2UgNTp7cD1uLmdldFRva2VuU3RhcnRMaW5lKCkscy5lbmRMaW5lTnVtYmVyPT09dm9pZCAwJiYodlt2Lmxlbmd0aC0xXT09PXNlLk9iamVjdHx8dlt2Lmxlbmd0aC0xXT09PXNlLkFycmF5JiYoaD09PTJ8fGg9PT00KSkmJihzLmVuZExpbmVOdW1iZXI9cCxzLmNvbW1hSW5kZXg9bi5nZXRUb2tlbk9mZnNldCgpLXUscy5jb21tYUxpbmU9cCksKGg9PT0yfHxoPT09NCkmJihhPXMscz1zP3MucGFyZW50OnZvaWQgMCxpPXMpLGc9cCsxO2JyZWFrfWNhc2UgMTM6e2g9PT01JiZkPT09bi5nZXRUb2tlblN0YXJ0TGluZSgpJiYodlt2Lmxlbmd0aC0xXT09PXNlLkFycmF5JiYoYz09PTJ8fGM9PT00KXx8dlt2Lmxlbmd0aC0xXT09PXNlLk9iamVjdCkmJih2W3YubGVuZ3RoLTFdPT09c2UuQXJyYXkmJihjPT09Mnx8Yz09PTQpfHx2W3YubGVuZ3RoLTFdPT09c2UuT2JqZWN0KSYmKHMuZW5kTGluZU51bWJlcj12b2lkIDAsdz0hMCksKGg9PT0xfHxoPT09MykmJmQ9PT1uLmdldFRva2VuU3RhcnRMaW5lKCkmJihfPSEwKTticmVha319bCE9PTE0JiZsIT09MTMmJmwhPT0xMiYmbCE9PTE1JiYoYz1oLGg9bCxkPW4uZ2V0VG9rZW5TdGFydExpbmUoKSxtPW4uZ2V0VG9rZW5PZmZzZXQoKStuLmdldFRva2VuTGVuZ3RoKCktdSl9cmV0dXJuIHJ9ZnVuY3Rpb24gTTEoZSx0KXtpZih0LmNoaWxkcmVuUHJvcGVydGllcy5sZW5ndGg9PT0wKXJldHVybiBlO2NvbnN0IG49RWUuY3JlYXRlKCJ0ZXN0Oi8vdGVzdC5qc29uIiwianNvbiIsMCxlLmdldFRleHQoKSkscj1bXTtmb3IoR28ocix0LHQuYmVnaW5uaW5nTGluZU51bWJlcik7ci5sZW5ndGg+MDspe2NvbnN0IGk9ci5zaGlmdCgpLHM9aS5wcm9wZXJ0eVRyZWVBcnJheTtsZXQgYT1pLmJlZ2lubmluZ0xpbmVOdW1iZXI7Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKyspe2NvbnN0IG89c1tsXSx1PXEuY3JlYXRlKFouY3JlYXRlKG8uYmVnaW5uaW5nTGluZU51bWJlciwwKSxaLmNyZWF0ZShvLmVuZExpbmVOdW1iZXIrMSwwKSksaD1lLmdldFRleHQodSksYz1FZS5jcmVhdGUoInRlc3Q6Ly90ZXN0Lmpzb24iLCJqc29uIiwwLGgpO2lmKG8ubGFzdFByb3BlcnR5PT09ITAmJmwhPT1zLmxlbmd0aC0xKXtjb25zdCBnPW8ubGluZVdoZXJlVG9BZGRDb21tYS1vLmJlZ2lubmluZ0xpbmVOdW1iZXIscD1vLmluZGV4V2hlcmVUb0FkZENvbWEsdj17cmFuZ2U6cS5jcmVhdGUoWi5jcmVhdGUoZyxwKSxaLmNyZWF0ZShnLHApKSx0ZXh0OiIsIn07RWUudXBkYXRlKGMsW3ZdLDEpfWVsc2UgaWYoby5sYXN0UHJvcGVydHk9PT0hMSYmbD09PXMubGVuZ3RoLTEpe2NvbnN0IGc9by5jb21tYUluZGV4LHY9by5jb21tYUxpbmUtby5iZWdpbm5pbmdMaW5lTnVtYmVyLHc9e3JhbmdlOnEuY3JlYXRlKFouY3JlYXRlKHYsZyksWi5jcmVhdGUodixnKzEpKSx0ZXh0OiIifTtFZS51cGRhdGUoYyxbd10sMSl9Y29uc3QgZD1vLmVuZExpbmVOdW1iZXItby5iZWdpbm5pbmdMaW5lTnVtYmVyKzEsbT17cmFuZ2U6cS5jcmVhdGUoWi5jcmVhdGUoYSwwKSxaLmNyZWF0ZShhK2QsMCkpLHRleHQ6Yy5nZXRUZXh0KCl9O0VlLnVwZGF0ZShuLFttXSwxKSxHbyhyLG8sYSksYT1hK2R9fXJldHVybiBufWZ1bmN0aW9uIEdvKGUsdCxuKXtpZih0LmNoaWxkcmVuUHJvcGVydGllcy5sZW5ndGghPT0wKWlmKHQudHlwZT09PXNlLk9iamVjdCl7bGV0IHI9MS8wO2Zvcihjb25zdCBzIG9mIHQuY2hpbGRyZW5Qcm9wZXJ0aWVzKXMuYmVnaW5uaW5nTGluZU51bWJlcjxyJiYocj1zLmJlZ2lubmluZ0xpbmVOdW1iZXIpO2NvbnN0IGk9ci10LmJlZ2lubmluZ0xpbmVOdW1iZXI7bj1uK2ksZS5wdXNoKG5ldyBYbyhuLHQuY2hpbGRyZW5Qcm9wZXJ0aWVzKSl9ZWxzZSB0LnR5cGU9PT1zZS5BcnJheSYmSm8oZSx0LG4pfWZ1bmN0aW9uIEpvKGUsdCxuKXtmb3IoY29uc3QgciBvZiB0LmNoaWxkcmVuUHJvcGVydGllcyl7aWYoci50eXBlPT09c2UuT2JqZWN0KXtsZXQgaT0xLzA7Zm9yKGNvbnN0IGEgb2Ygci5jaGlsZHJlblByb3BlcnRpZXMpYS5iZWdpbm5pbmdMaW5lTnVtYmVyPGkmJihpPWEuYmVnaW5uaW5nTGluZU51bWJlcik7Y29uc3Qgcz1pLXIuYmVnaW5uaW5nTGluZU51bWJlcjtlLnB1c2gobmV3IFhvKG4rci5iZWdpbm5pbmdMaW5lTnVtYmVyLXQuYmVnaW5uaW5nTGluZU51bWJlcitzLHIuY2hpbGRyZW5Qcm9wZXJ0aWVzKSl9ci50eXBlPT09c2UuQXJyYXkmJkpvKGUscixuK3IuYmVnaW5uaW5nTGluZU51bWJlci10LmJlZ2lubmluZ0xpbmVOdW1iZXIpfX12YXIgWG89Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmJlZ2lubmluZ0xpbmVOdW1iZXI9ZSx0aGlzLnByb3BlcnR5VHJlZUFycmF5PXR9fTtmdW5jdGlvbiBDMShlLHQpe2NvbnN0IG49W107cmV0dXJuIHQudmlzaXQocj0+e2lmKHIudHlwZT09PSJwcm9wZXJ0eSImJnIua2V5Tm9kZS52YWx1ZT09PSIkcmVmIiYmci52YWx1ZU5vZGU/LnR5cGU9PT0ic3RyaW5nIil7Y29uc3QgaT1yLnZhbHVlTm9kZS52YWx1ZSxzPVAxKHQsaSk7aWYocyl7Y29uc3QgYT1lLnBvc2l0aW9uQXQocy5vZmZzZXQpO24ucHVzaCh7dGFyZ2V0OmAke2UudXJpfSMke2EubGluZSsxfSwke2EuY2hhcmFjdGVyKzF9YCxyYW5nZTpUMShlLHIudmFsdWVOb2RlKX0pfX1yZXR1cm4hMH0pLFByb21pc2UucmVzb2x2ZShuKX1mdW5jdGlvbiBUMShlLHQpe3JldHVybiBxLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQrMSksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoLTEpKX1mdW5jdGlvbiBQMShlLHQpe2NvbnN0IG49STEodCk7cmV0dXJuIG4/YWkobixlLnJvb3QpOm51bGx9ZnVuY3Rpb24gYWkoZSx0KXtpZighdClyZXR1cm4gbnVsbDtpZihlLmxlbmd0aD09PTApcmV0dXJuIHQ7Y29uc3Qgbj1lLnNoaWZ0KCk7aWYodCYmdC50eXBlPT09Im9iamVjdCIpe2NvbnN0IHI9dC5wcm9wZXJ0aWVzLmZpbmQoaT0+aS5rZXlOb2RlLnZhbHVlPT09bik7cmV0dXJuIHI/YWkoZSxyLnZhbHVlTm9kZSk6bnVsbH1lbHNlIGlmKHQmJnQudHlwZT09PSJhcnJheSImJm4ubWF0Y2goL14oMHxbMS05XVswLTldKikkLykpe2NvbnN0IHI9TnVtYmVyLnBhcnNlSW50KG4pLGk9dC5pdGVtc1tyXTtyZXR1cm4gaT9haShlLGkpOm51bGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSTEoZSl7cmV0dXJuIGU9PT0iIyI/W106ZVswXSE9PSIjInx8ZVsxXSE9PSIvIj9udWxsOmUuc3Vic3RyaW5nKDIpLnNwbGl0KC9cLy8pLm1hcChGMSl9ZnVuY3Rpb24gRjEoZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBWMShlKXtjb25zdCB0PWUucHJvbWlzZUNvbnN0cnVjdG9yfHxQcm9taXNlLG49bmV3IF8xKGUuc2NoZW1hUmVxdWVzdFNlcnZpY2UsZS53b3Jrc3BhY2VDb250ZXh0LHQpO24uc2V0U2NoZW1hQ29udHJpYnV0aW9ucyhpaSk7Y29uc3Qgcj1uZXcgYTEobixlLmNvbnRyaWJ1dGlvbnMsdCxlLmNsaWVudENhcGFiaWxpdGllcyksaT1uZXcgbzEobixlLmNvbnRyaWJ1dGlvbnMsdCkscz1uZXcgZzEobiksYT1uZXcgdTEobix0KTtyZXR1cm57Y29uZmlndXJlOmw9PntuLmNsZWFyRXh0ZXJuYWxTY2hlbWFzKCksbC5zY2hlbWFzPy5mb3JFYWNoKG4ucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYS5iaW5kKG4pKSxhLmNvbmZpZ3VyZShsKX0scmVzZXRTY2hlbWE6bD0+bi5vblJlc291cmNlQ2hhbmdlKGwpLGRvVmFsaWRhdGlvbjphLmRvVmFsaWRhdGlvbi5iaW5kKGEpLGdldExhbmd1YWdlU3RhdHVzOmEuZ2V0TGFuZ3VhZ2VTdGF0dXMuYmluZChhKSxwYXJzZUpTT05Eb2N1bWVudDpsPT5zMShsLHtjb2xsZWN0Q29tbWVudHM6ITB9KSxuZXdKU09ORG9jdW1lbnQ6KGwsbyk9PmkxKGwsbyksZ2V0TWF0Y2hpbmdTY2hlbWFzOm4uZ2V0TWF0Y2hpbmdTY2hlbWFzLmJpbmQobiksZG9SZXNvbHZlOnIuZG9SZXNvbHZlLmJpbmQociksZG9Db21wbGV0ZTpyLmRvQ29tcGxldGUuYmluZChyKSxmaW5kRG9jdW1lbnRTeW1ib2xzOnMuZmluZERvY3VtZW50U3ltYm9scy5iaW5kKHMpLGZpbmREb2N1bWVudFN5bWJvbHMyOnMuZmluZERvY3VtZW50U3ltYm9sczIuYmluZChzKSxmaW5kRG9jdW1lbnRDb2xvcnM6cy5maW5kRG9jdW1lbnRDb2xvcnMuYmluZChzKSxnZXRDb2xvclByZXNlbnRhdGlvbnM6cy5nZXRDb2xvclByZXNlbnRhdGlvbnMuYmluZChzKSxkb0hvdmVyOmkuZG9Ib3Zlci5iaW5kKGkpLGdldEZvbGRpbmdSYW5nZXM6TjEsZ2V0U2VsZWN0aW9uUmFuZ2VzOlMxLGZpbmREZWZpbml0aW9uOigpPT5Qcm9taXNlLnJlc29sdmUoW10pLGZpbmRMaW5rczpDMSxmb3JtYXQ6KGwsbyx1KT0+c2kobCx1LG8pLHNvcnQ6KGwsbyk9PlIxKGwsbyl9fXZhciBRbzt0eXBlb2YgZmV0Y2g8InUiJiYoUW89ZnVuY3Rpb24oZSl7cmV0dXJuIGZldGNoKGUpLnRoZW4odD0+dC50ZXh0KCkpfSk7dmFyIEQxPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fY3R4PWUsdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncz10Lmxhbmd1YWdlU2V0dGluZ3MsdGhpcy5fbGFuZ3VhZ2VJZD10Lmxhbmd1YWdlSWQsdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlPVYxKHt3b3Jrc3BhY2VDb250ZXh0OntyZXNvbHZlUmVsYXRpdmVQYXRoOihuLHIpPT57Y29uc3QgaT1yLnN1YnN0cigwLHIubGFzdEluZGV4T2YoIi8iKSsxKTtyZXR1cm4gVTEoaSxuKX19LHNjaGVtYVJlcXVlc3RTZXJ2aWNlOnQuZW5hYmxlU2NoZW1hUmVxdWVzdD9Rbzp2b2lkIDAsY2xpZW50Q2FwYWJpbGl0aWVzOktyLkxBVEVTVH0pLHRoaXMuX2xhbmd1YWdlU2VydmljZS5jb25maWd1cmUodGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9YXN5bmMgZG9WYWxpZGF0aW9uKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZih0KXtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCk7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1ZhbGlkYXRpb24odCxuLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MpfXJldHVybiBQcm9taXNlLnJlc29sdmUoW10pfWFzeW5jIGRvQ29tcGxldGUoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Db21wbGV0ZShuLHQscil9YXN5bmMgZG9SZXNvbHZlKGUpe3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9SZXNvbHZlKGUpfWFzeW5jIGRvSG92ZXIoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Ib3ZlcihuLHQscil9YXN5bmMgZm9ybWF0KGUsdCxuKXtsZXQgcj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXIpcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZvcm1hdChyLHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1hc3luYyByZXNldFNjaGVtYShlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xhbmd1YWdlU2VydmljZS5yZXNldFNjaGVtYShlKSl9YXN5bmMgZmluZERvY3VtZW50U3ltYm9scyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudFN5bWJvbHMyKHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBmaW5kRG9jdW1lbnRDb2xvcnMoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybltdO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KSxyPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRDb2xvcnModCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGdldENvbG9yUHJlc2VudGF0aW9ucyhlLHQsbil7bGV0IHI9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFyKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChyKSxzPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRDb2xvclByZXNlbnRhdGlvbnMocixpLHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShzKX1hc3luYyBnZXRGb2xkaW5nUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRGb2xkaW5nUmFuZ2VzKG4sdCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBnZXRTZWxlY3Rpb25SYW5nZXMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pLGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldFNlbGVjdGlvblJhbmdlcyhuLHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1hc3luYyBwYXJzZUpTT05Eb2N1bWVudChlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuIG51bGw7bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUobil9YXN5bmMgZ2V0TWF0Y2hpbmdTY2hlbWFzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0TWF0Y2hpbmdTY2hlbWFzKHQsbikpfV9nZXRUZXh0RG9jdW1lbnQoZSl7bGV0IHQ9dGhpcy5fY3R4LmdldE1pcnJvck1vZGVscygpO2ZvcihsZXQgbiBvZiB0KWlmKG4udXJpLnRvU3RyaW5nKCk9PT1lKXJldHVybiBFZS5jcmVhdGUoZSx0aGlzLl9sYW5ndWFnZUlkLG4udmVyc2lvbixuLmdldFZhbHVlKCkpO3JldHVybiBudWxsfX0sTzE9NDcsb2k9NDY7ZnVuY3Rpb24gJDEoZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKT09PU8xfWZ1bmN0aW9uIFUxKGUsdCl7aWYoJDEodCkpe2NvbnN0IG49Q3QucGFyc2UoZSkscj10LnNwbGl0KCIvIik7cmV0dXJuIG4ud2l0aCh7cGF0aDpZbyhyKX0pLnRvU3RyaW5nKCl9cmV0dXJuIEIxKGUsdCl9ZnVuY3Rpb24gWW8oZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgciBvZiBlKXIubGVuZ3RoPT09MHx8ci5sZW5ndGg9PT0xJiZyLmNoYXJDb2RlQXQoMCk9PT1vaXx8KHIubGVuZ3RoPT09MiYmci5jaGFyQ29kZUF0KDApPT09b2kmJnIuY2hhckNvZGVBdCgxKT09PW9pP3QucG9wKCk6dC5wdXNoKHIpKTtlLmxlbmd0aD4xJiZlW2UubGVuZ3RoLTFdLmxlbmd0aD09PTAmJnQucHVzaCgiIik7bGV0IG49dC5qb2luKCIvIik7cmV0dXJuIGVbMF0ubGVuZ3RoPT09MCYmKG49Ii8iK24pLG59ZnVuY3Rpb24gQjEoZSwuLi50KXtjb25zdCBuPUN0LnBhcnNlKGUpLHI9bi5wYXRoLnNwbGl0KCIvIik7Zm9yKGxldCBpIG9mIHQpci5wdXNoKC4uLmkuc3BsaXQoIi8iKSk7cmV0dXJuIG4ud2l0aCh7cGF0aDpZbyhyKX0pLnRvU3RyaW5nKCl9c2VsZi5vbm1lc3NhZ2U9KCk9PntTYSgoZSx0KT0+bmV3IEQxKGUsdCkpfX0pKCk7Cg==", c = (l) => Uint8Array.from(atob(l), (Z) => Z.charCodeAt(0)), d = typeof self < "u" && self.Blob && new Blob([c(m)], { type: "text/javascript;charset=utf-8" });
2
- function G(l) {
3
- let Z;
4
- try {
5
- if (Z = d && (self.URL || self.webkitURL).createObjectURL(d), !Z) throw "";
6
- const b = new Worker(Z, {
7
- name: l?.name
8
- });
9
- return b.addEventListener("error", () => {
10
- (self.URL || self.webkitURL).revokeObjectURL(Z);
11
- }), b;
12
- } catch {
13
- return new Worker(
14
- "data:text/javascript;base64," + m,
15
- {
16
- name: l?.name
17
- }
18
- );
19
- } finally {
20
- Z && (self.URL || self.webkitURL).revokeObjectURL(Z);
21
- }
22
- }
23
- export {
24
- G as default
25
- };