@valbuild/ui 0.40.0 → 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/valbuild-ui.cjs.js +494 -560
- package/dist/valbuild-ui.esm.js +494 -560
- package/package.json +3 -3
- package/server/.tmp/assets/index-yF-ezBh3.js +201 -0
- package/server/.tmp/index.html +1 -1
- package/server/dist/valbuild-ui-main.cjs.js +469 -195
- package/server/dist/valbuild-ui-main.esm.js +469 -195
- package/server/dist/valbuild-ui-server.cjs.js +1 -1
- package/server/dist/valbuild-ui-server.esm.js +1 -1
- package/server/.tmp/assets/index-U4J2Ol5s.js +0 -201
|
@@ -15,7 +15,7 @@ function getServerMimeType(path) {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
const files = JSON.parse(
|
|
18
|
-
`{"/assets/index-U4J2Ol5s.js":"dmFyIFZDPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgSEM9KGUsdCxuKT0+dCBpbiBlP1ZDKGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pOmVbdF09bjt2YXIgQmU9KGUsdCxuKT0+KEhDKGUsdHlwZW9mIHQhPSJzeW1ib2wiP3QrIiI6dCxuKSxuKSxLQz0oZSx0LG4pPT57aWYoIXQuaGFzKGUpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90ICIrbil9O3ZhciBIZD0oZSx0LG4pPT57aWYodC5oYXMoZSkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgYWRkIHRoZSBzYW1lIHByaXZhdGUgbWVtYmVyIG1vcmUgdGhhbiBvbmNlIik7dCBpbnN0YW5jZW9mIFdlYWtTZXQ/dC5hZGQoZSk6dC5zZXQoZSxuKX07dmFyIFhhPShlLHQsbik9PihLQyhlLHQsImFjY2VzcyBwcml2YXRlIG1ldGhvZCIpLG4pO2Z1bmN0aW9uIHMxKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IHI9dFtuXTtpZih0eXBlb2YgciE9InN0cmluZyImJiFBcnJheS5pc0FycmF5KHIpKXtmb3IoY29uc3QgbyBpbiByKWlmKG8hPT0iZGVmYXVsdCImJiEobyBpbiBlKSl7Y29uc3QgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk7aSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbyxpLmdldD9pOntlbnVtZXJhYmxlOiEwLGdldDooKT0+cltvXX0pfX19cmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKX0oZnVuY3Rpb24oKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKS5yZWxMaXN0O2lmKHQmJnQuc3VwcG9ydHMmJnQuc3VwcG9ydHMoIm1vZHVsZXByZWxvYWQiKSlyZXR1cm47Zm9yKGNvbnN0IG8gb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXScpKXIobyk7bmV3IE11dGF0aW9uT2JzZXJ2ZXIobz0+e2Zvcihjb25zdCBpIG9mIG8paWYoaS50eXBlPT09ImNoaWxkTGlzdCIpZm9yKGNvbnN0IGwgb2YgaS5hZGRlZE5vZGVzKWwudGFnTmFtZT09PSJMSU5LIiYmbC5yZWw9PT0ibW9kdWxlcHJlbG9hZCImJnIobCl9KS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pO2Z1bmN0aW9uIG4obyl7Y29uc3QgaT17fTtyZXR1cm4gby5pbnRlZ3JpdHkmJihpLmludGVncml0eT1vLmludGVncml0eSksby5yZWZlcnJlclBvbGljeSYmKGkucmVmZXJyZXJQb2xpY3k9by5yZWZlcnJlclBvbGljeSksby5jcm9zc09yaWdpbj09PSJ1c2UtY3JlZGVudGlhbHMiP2kuY3JlZGVudGlhbHM9ImluY2x1ZGUiOm8uY3Jvc3NPcmlnaW49PT0iYW5vbnltb3VzIj9pLmNyZWRlbnRpYWxzPSJvbWl0IjppLmNyZWRlbnRpYWxzPSJzYW1lLW9yaWdpbiIsaX1mdW5jdGlvbiByKG8pe2lmKG8uZXApcmV0dXJuO28uZXA9ITA7Y29uc3QgaT1uKG8pO2ZldGNoKG8uaHJlZixpKX19KSgpO2Z1bmN0aW9uIFJhKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9dmFyIGExPXtleHBvcnRzOnt9fSxDZT17fTsvKioKICogQGxpY2Vuc2UgUmVhY3QKICogcmVhY3QucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL3ZhciBQYT1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IiksR0M9U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksWUM9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSxYQz1TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpLFFDPVN5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIiksSkM9U3ltYm9sLmZvcigicmVhY3QucHJvdmlkZXIiKSxaQz1TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0IikscUM9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSxlJD1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZSIpLHQkPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSxuJD1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksSm09U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIHIkKGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiP251bGw6KGU9Sm0mJmVbSm1dfHxlWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpudWxsKX12YXIgdTE9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LGMxPU9iamVjdC5hc3NpZ24sZDE9e307ZnVuY3Rpb24gTGwoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9ZDEsdGhpcy51cGRhdGVyPW58fHUxfUxsLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O0xsLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0IiYmdHlwZW9mIGUhPSJmdW5jdGlvbiImJmUhPW51bGwpdGhyb3cgRXJyb3IoInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLiIpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsInNldFN0YXRlIil9O0xsLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSwiZm9yY2VVcGRhdGUiKX07ZnVuY3Rpb24gZjEoKXt9ZjEucHJvdG90eXBlPUxsLnByb3RvdHlwZTtmdW5jdGlvbiBqcChlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1kMSx0aGlzLnVwZGF0ZXI9bnx8dTF9dmFyIHpwPWpwLnByb3RvdHlwZT1uZXcgZjE7enAuY29uc3RydWN0b3I9anA7YzEoenAsTGwucHJvdG90eXBlKTt6cC5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgWm09QXJyYXkuaXNBcnJheSxoMT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEZwPXtjdXJyZW50Om51bGx9LHAxPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gZzEoZSx0LG4pe3ZhciByLG89e30saT1udWxsLGw9bnVsbDtpZih0IT1udWxsKWZvcihyIGluIHQucmVmIT09dm9pZCAwJiYobD10LnJlZiksdC5rZXkhPT12b2lkIDAmJihpPSIiK3Qua2V5KSx0KWgxLmNhbGwodCxyKSYmIXAxLmhhc093blByb3BlcnR5KHIpJiYob1tyXT10W3JdKTt2YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYocz09PTEpby5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtmb3IodmFyIGE9QXJyYXkocyksdT0wO3U8czt1KyspYVt1XT1hcmd1bWVudHNbdSsyXTtvLmNoaWxkcmVuPWF9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gcz1lLmRlZmF1bHRQcm9wcyxzKW9bcl09PT12b2lkIDAmJihvW3JdPXNbcl0pO3JldHVybnskJHR5cGVvZjpQYSx0eXBlOmUsa2V5OmkscmVmOmwscHJvcHM6byxfb3duZXI6RnAuY3VycmVudH19ZnVuY3Rpb24gbyQoZSx0KXtyZXR1cm57JCR0eXBlb2Y6UGEsdHlwZTplLnR5cGUsa2V5OnQscmVmOmUucmVmLHByb3BzOmUucHJvcHMsX293bmVyOmUuX293bmVyfX1mdW5jdGlvbiBCcChlKXtyZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbCYmZS4kJHR5cGVvZj09PVBhfWZ1bmN0aW9uIGkkKGUpe3ZhciB0PXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiK2UucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKG4pe3JldHVybiB0W25dfSl9dmFyIHFtPS9cLysvZztmdW5jdGlvbiBLZChlLHQpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiZlLmtleSE9bnVsbD9pJCgiIitlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gUnUoZSx0LG4scixvKXt2YXIgaT10eXBlb2YgZTsoaT09PSJ1bmRlZmluZWQifHxpPT09ImJvb2xlYW4iKSYmKGU9bnVsbCk7dmFyIGw9ITE7aWYoZT09PW51bGwpbD0hMDtlbHNlIHN3aXRjaChpKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmw9ITA7YnJlYWs7Y2FzZSJvYmplY3QiOnN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIFBhOmNhc2UgR0M6bD0hMH19aWYobClyZXR1cm4gbD1lLG89byhsKSxlPXI9PT0iIj8iLiIrS2QobCwwKTpyLFptKG8pPyhuPSIiLGUhPW51bGwmJihuPWUucmVwbGFjZShxbSwiJCYvIikrIi8iKSxSdShvLHQsbiwiIixmdW5jdGlvbih1KXtyZXR1cm4gdX0pKTpvIT1udWxsJiYoQnAobykmJihvPW8kKG8sbisoIW8ua2V5fHxsJiZsLmtleT09PW8ua2V5PyIiOigiIitvLmtleSkucmVwbGFjZShxbSwiJCYvIikrIi8iKStlKSksdC5wdXNoKG8pKSwxO2lmKGw9MCxyPXI9PT0iIj8iLiI6cisiOiIsWm0oZSkpZm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe2k9ZVtzXTt2YXIgYT1yK0tkKGkscyk7bCs9UnUoaSx0LG4sYSxvKX1lbHNlIGlmKGE9ciQoZSksdHlwZW9mIGE9PSJmdW5jdGlvbiIpZm9yKGU9YS5jYWxsKGUpLHM9MDshKGk9ZS5uZXh0KCkpLmRvbmU7KWk9aS52YWx1ZSxhPXIrS2QoaSxzKyspLGwrPVJ1KGksdCxuLGEsbyk7ZWxzZSBpZihpPT09Im9iamVjdCIpdGhyb3cgdD1TdHJpbmcoZSksRXJyb3IoIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogIisodD09PSJbb2JqZWN0IE9iamVjdF0iPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiwgIikrIn0iOnQpKyIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuIik7cmV0dXJuIGx9ZnVuY3Rpb24gUWEoZSx0LG4pe2lmKGU9PW51bGwpcmV0dXJuIGU7dmFyIHI9W10sbz0wO3JldHVybiBSdShlLHIsIiIsIiIsZnVuY3Rpb24oaSl7cmV0dXJuIHQuY2FsbChuLGksbysrKX0pLHJ9ZnVuY3Rpb24gbCQoZSl7aWYoZS5fc3RhdHVzPT09LTEpe3ZhciB0PWUuX3Jlc3VsdDt0PXQoKSx0LnRoZW4oZnVuY3Rpb24obil7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD1uKX0sZnVuY3Rpb24obil7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD1uKX0pLGUuX3N0YXR1cz09PS0xJiYoZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQpfWlmKGUuX3N0YXR1cz09PTEpcmV0dXJuIGUuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgc249e2N1cnJlbnQ6bnVsbH0sUHU9e3RyYW5zaXRpb246bnVsbH0scyQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6c24sUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6UHUsUmVhY3RDdXJyZW50T3duZXI6RnB9O0NlLkNoaWxkcmVuPXttYXA6UWEsZm9yRWFjaDpmdW5jdGlvbihlLHQsbil7UWEoZSxmdW5jdGlvbigpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxuKX0sY291bnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9MDtyZXR1cm4gUWEoZSxmdW5jdGlvbigpe3QrK30pLHR9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFhKGUsZnVuY3Rpb24odCl7cmV0dXJuIHR9KXx8W119LG9ubHk6ZnVuY3Rpb24oZSl7aWYoIUJwKGUpKXRocm93IEVycm9yKCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4iKTtyZXR1cm4gZX19O0NlLkNvbXBvbmVudD1MbDtDZS5GcmFnbWVudD1ZQztDZS5Qcm9maWxlcj1RQztDZS5QdXJlQ29tcG9uZW50PWpwO0NlLlN0cmljdE1vZGU9WEM7Q2UuU3VzcGVuc2U9ZSQ7Q2UuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9cyQ7Q2UuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtpZihlPT1udWxsKXRocm93IEVycm9yKCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCAiK2UrIi4iKTt2YXIgcj1jMSh7fSxlLnByb3BzKSxvPWUua2V5LGk9ZS5yZWYsbD1lLl9vd25lcjtpZih0IT1udWxsKXtpZih0LnJlZiE9PXZvaWQgMCYmKGk9dC5yZWYsbD1GcC5jdXJyZW50KSx0LmtleSE9PXZvaWQgMCYmKG89IiIrdC5rZXkpLGUudHlwZSYmZS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgcz1lLnR5cGUuZGVmYXVsdFByb3BzO2ZvcihhIGluIHQpaDEuY2FsbCh0LGEpJiYhcDEuaGFzT3duUHJvcGVydHkoYSkmJihyW2FdPXRbYV09PT12b2lkIDAmJnMhPT12b2lkIDA/c1thXTp0W2FdKX12YXIgYT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoYT09PTEpci5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxhKXtzPUFycmF5KGEpO2Zvcih2YXIgdT0wO3U8YTt1Kyspc1t1XT1hcmd1bWVudHNbdSsyXTtyLmNoaWxkcmVuPXN9cmV0dXJueyQkdHlwZW9mOlBhLHR5cGU6ZS50eXBlLGtleTpvLHJlZjppLHByb3BzOnIsX293bmVyOmx9fTtDZS5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlPXskJHR5cGVvZjpaQyxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGwsX2RlZmF1bHRWYWx1ZTpudWxsLF9nbG9iYWxOYW1lOm51bGx9LGUuUHJvdmlkZXI9eyQkdHlwZW9mOkpDLF9jb250ZXh0OmV9LGUuQ29uc3VtZXI9ZX07Q2UuY3JlYXRlRWxlbWVudD1nMTtDZS5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGUpe3ZhciB0PWcxLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH07Q2UuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O0NlLmZvcndhcmRSZWY9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOnFDLHJlbmRlcjplfX07Q2UuaXNWYWxpZEVsZW1lbnQ9QnA7Q2UubGF6eT1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6biQsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDplfSxfaW5pdDpsJH19O0NlLm1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6dCQsdHlwZTplLGNvbXBhcmU6dD09PXZvaWQgMD9udWxsOnR9fTtDZS5zdGFydFRyYW5zaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9UHUudHJhbnNpdGlvbjtQdS50cmFuc2l0aW9uPXt9O3RyeXtlKCl9ZmluYWxseXtQdS50cmFuc2l0aW9uPXR9fTtDZS51bnN0YWJsZV9hY3Q9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiYWN0KC4uLikgaXMgbm90IHN1cHBvcnRlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcyBvZiBSZWFjdC4iKX07Q2UudXNlQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc24uY3VycmVudC51c2VDYWxsYmFjayhlLHQpfTtDZS51c2VDb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBzbi5jdXJyZW50LnVzZUNvbnRleHQoZSl9O0NlLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9O0NlLnVzZURlZmVycmVkVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHNuLmN1cnJlbnQudXNlRGVmZXJyZWRWYWx1ZShlKX07Q2UudXNlRWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHNuLmN1cnJlbnQudXNlRWZmZWN0KGUsdCl9O0NlLnVzZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIHNuLmN1cnJlbnQudXNlSWQoKX07Q2UudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHNuLmN1cnJlbnQudXNlSW1wZXJhdGl2ZUhhbmRsZShlLHQsbil9O0NlLnVzZUluc2VydGlvbkVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBzbi5jdXJyZW50LnVzZUluc2VydGlvbkVmZmVjdChlLHQpfTtDZS51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc24uY3VycmVudC51c2VMYXlvdXRFZmZlY3QoZSx0KX07Q2UudXNlTWVtbz1mdW5jdGlvbihlLHQpe3JldHVybiBzbi5jdXJyZW50LnVzZU1lbW8oZSx0KX07Q2UudXNlUmVkdWNlcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHNuLmN1cnJlbnQudXNlUmVkdWNlcihlLHQsbil9O0NlLnVzZVJlZj1mdW5jdGlvbihlKXtyZXR1cm4gc24uY3VycmVudC51c2VSZWYoZSl9O0NlLnVzZVN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBzbi5jdXJyZW50LnVzZVN0YXRlKGUpfTtDZS51c2VTeW5jRXh0ZXJuYWxTdG9yZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHNuLmN1cnJlbnQudXNlU3luY0V4dGVybmFsU3RvcmUoZSx0LG4pfTtDZS51c2VUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHNuLmN1cnJlbnQudXNlVHJhbnNpdGlvbigpfTtDZS52ZXJzaW9uPSIxOC4yLjAiO2ExLmV4cG9ydHM9Q2U7dmFyIHA9YTEuZXhwb3J0cztjb25zdCBlZT1SYShwKSxtMT1zMSh7X19wcm90b19fOm51bGwsZGVmYXVsdDplZX0sW3BdKTt2YXIgRmY9e30sdjE9e2V4cG9ydHM6e319LFJuPXt9LHkxPXtleHBvcnRzOnt9fSx4MT17fTsvKioKICogQGxpY2Vuc2UgUmVhY3QKICogc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi8oZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChFLE8pe3ZhciBSPUUubGVuZ3RoO0UucHVzaChPKTtlOmZvcig7MDxSOyl7dmFyIEY9Ui0xPj4+MSxWPUVbRl07aWYoMDxvKFYsTykpRVtGXT1PLEVbUl09VixSPUY7ZWxzZSBicmVhayBlfX1mdW5jdGlvbiBuKEUpe3JldHVybiBFLmxlbmd0aD09PTA/bnVsbDpFWzBdfWZ1bmN0aW9uIHIoRSl7aWYoRS5sZW5ndGg9PT0wKXJldHVybiBudWxsO3ZhciBPPUVbMF0sUj1FLnBvcCgpO2lmKFIhPT1PKXtFWzBdPVI7ZTpmb3IodmFyIEY9MCxWPUUubGVuZ3RoLGFlPVY+Pj4xO0Y8YWU7KXt2YXIgb2U9MiooRisxKS0xLCRlPUVbb2VdLF9lPW9lKzEsUT1FW19lXTtpZigwPm8oJGUsUikpX2U8ViYmMD5vKFEsJGUpPyhFW0ZdPVEsRVtfZV09UixGPV9lKTooRVtGXT0kZSxFW29lXT1SLEY9b2UpO2Vsc2UgaWYoX2U8ViYmMD5vKFEsUikpRVtGXT1RLEVbX2VdPVIsRj1fZTtlbHNlIGJyZWFrIGV9fXJldHVybiBPfWZ1bmN0aW9uIG8oRSxPKXt2YXIgUj1FLnNvcnRJbmRleC1PLnNvcnRJbmRleDtyZXR1cm4gUiE9PTA/UjpFLmlkLU8uaWR9aWYodHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmdHlwZW9mIHBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIil7dmFyIGk9cGVyZm9ybWFuY2U7ZS51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gaS5ub3coKX19ZWxzZXt2YXIgbD1EYXRlLHM9bC5ub3coKTtlLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBsLm5vdygpLXN9fXZhciBhPVtdLHU9W10sYz0xLGQ9bnVsbCxmPTMsaD0hMSxnPSExLG09ITEsXz10eXBlb2Ygc2V0VGltZW91dD09ImZ1bmN0aW9uIj9zZXRUaW1lb3V0Om51bGwsdj10eXBlb2YgY2xlYXJUaW1lb3V0PT0iZnVuY3Rpb24iP2NsZWFyVGltZW91dDpudWxsLHk9dHlwZW9mIHNldEltbWVkaWF0ZTwidSI/c2V0SW1tZWRpYXRlOm51bGw7dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zY2hlZHVsaW5nIT09dm9pZCAwJiZuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZyE9PXZvaWQgMCYmbmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcuYmluZChuYXZpZ2F0b3Iuc2NoZWR1bGluZyk7ZnVuY3Rpb24geChFKXtmb3IodmFyIE89bih1KTtPIT09bnVsbDspe2lmKE8uY2FsbGJhY2s9PT1udWxsKXIodSk7ZWxzZSBpZihPLnN0YXJ0VGltZTw9RSlyKHUpLE8uc29ydEluZGV4PU8uZXhwaXJhdGlvblRpbWUsdChhLE8pO2Vsc2UgYnJlYWs7Tz1uKHUpfX1mdW5jdGlvbiBTKEUpe2lmKG09ITEseChFKSwhZylpZihuKGEpIT09bnVsbClnPSEwLEMoayk7ZWxzZXt2YXIgTz1uKHUpO08hPT1udWxsJiYkKFMsTy5zdGFydFRpbWUtRSl9fWZ1bmN0aW9uIGsoRSxPKXtnPSExLG0mJihtPSExLHYoTiksTj0tMSksaD0hMDt2YXIgUj1mO3RyeXtmb3IoeChPKSxkPW4oYSk7ZCE9PW51bGwmJighKGQuZXhwaXJhdGlvblRpbWU+Tyl8fEUmJiFqKCkpOyl7dmFyIEY9ZC5jYWxsYmFjaztpZih0eXBlb2YgRj09ImZ1bmN0aW9uIil7ZC5jYWxsYmFjaz1udWxsLGY9ZC5wcmlvcml0eUxldmVsO3ZhciBWPUYoZC5leHBpcmF0aW9uVGltZTw9Tyk7Tz1lLnVuc3RhYmxlX25vdygpLHR5cGVvZiBWPT0iZnVuY3Rpb24iP2QuY2FsbGJhY2s9VjpkPT09bihhKSYmcihhKSx4KE8pfWVsc2UgcihhKTtkPW4oYSl9aWYoZCE9PW51bGwpdmFyIGFlPSEwO2Vsc2V7dmFyIG9lPW4odSk7b2UhPT1udWxsJiYkKFMsb2Uuc3RhcnRUaW1lLU8pLGFlPSExfXJldHVybiBhZX1maW5hbGx5e2Q9bnVsbCxmPVIsaD0hMX19dmFyIGI9ITEsVD1udWxsLE49LTEsRD01LE09LTE7ZnVuY3Rpb24gaigpe3JldHVybiEoZS51bnN0YWJsZV9ub3coKS1NPEQpfWZ1bmN0aW9uIEIoKXtpZihUIT09bnVsbCl7dmFyIEU9ZS51bnN0YWJsZV9ub3coKTtNPUU7dmFyIE89ITA7dHJ5e089VCghMCxFKX1maW5hbGx5e08/cmUoKTooYj0hMSxUPW51bGwpfX1lbHNlIGI9ITF9dmFyIHJlO2lmKHR5cGVvZiB5PT0iZnVuY3Rpb24iKXJlPWZ1bmN0aW9uKCl7eShCKX07ZWxzZSBpZih0eXBlb2YgTWVzc2FnZUNoYW5uZWw8InUiKXt2YXIgSD1uZXcgTWVzc2FnZUNoYW5uZWwsWT1ILnBvcnQyO0gucG9ydDEub25tZXNzYWdlPUIscmU9ZnVuY3Rpb24oKXtZLnBvc3RNZXNzYWdlKG51bGwpfX1lbHNlIHJlPWZ1bmN0aW9uKCl7XyhCLDApfTtmdW5jdGlvbiBDKEUpe1Q9RSxifHwoYj0hMCxyZSgpKX1mdW5jdGlvbiAkKEUsTyl7Tj1fKGZ1bmN0aW9uKCl7RShlLnVuc3RhYmxlX25vdygpKX0sTyl9ZS51bnN0YWJsZV9JZGxlUHJpb3JpdHk9NSxlLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTEsZS51bnN0YWJsZV9Mb3dQcmlvcml0eT00LGUudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9MyxlLnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsLGUudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9MixlLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKEUpe0UuY2FsbGJhY2s9bnVsbH0sZS51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe2d8fGh8fChnPSEwLEMoaykpfSxlLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKEUpezA+RXx8MTI1PEU/Y29uc29sZS5lcnJvcigiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkIik6RD0wPEU/TWF0aC5mbG9vcigxZTMvRSk6NX0sZS51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBmfSxlLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIG4oYSl9LGUudW5zdGFibGVfbmV4dD1mdW5jdGlvbihFKXtzd2l0Y2goZil7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyIE89MzticmVhaztkZWZhdWx0Ok89Zn12YXIgUj1mO2Y9Tzt0cnl7cmV0dXJuIEUoKX1maW5hbGx5e2Y9Un19LGUudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9LGUudW5zdGFibGVfcmVxdWVzdFBhaW50PWZ1bmN0aW9uKCl7fSxlLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1mdW5jdGlvbihFLE8pe3N3aXRjaChFKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6RT0zfXZhciBSPWY7Zj1FO3RyeXtyZXR1cm4gTygpfWZpbmFsbHl7Zj1SfX0sZS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKEUsTyxSKXt2YXIgRj1lLnVuc3RhYmxlX25vdygpO3N3aXRjaCh0eXBlb2YgUj09Im9iamVjdCImJlIhPT1udWxsPyhSPVIuZGVsYXksUj10eXBlb2YgUj09Im51bWJlciImJjA8Uj9GK1I6Rik6Uj1GLEUpe2Nhc2UgMTp2YXIgVj0tMTticmVhaztjYXNlIDI6Vj0yNTA7YnJlYWs7Y2FzZSA1OlY9MTA3Mzc0MTgyMzticmVhaztjYXNlIDQ6Vj0xZTQ7YnJlYWs7ZGVmYXVsdDpWPTVlM31yZXR1cm4gVj1SK1YsRT17aWQ6YysrLGNhbGxiYWNrOk8scHJpb3JpdHlMZXZlbDpFLHN0YXJ0VGltZTpSLGV4cGlyYXRpb25UaW1lOlYsc29ydEluZGV4Oi0xfSxSPkY/KEUuc29ydEluZGV4PVIsdCh1LEUpLG4oYSk9PT1udWxsJiZFPT09bih1KSYmKG0/KHYoTiksTj0tMSk6bT0hMCwkKFMsUi1GKSkpOihFLnNvcnRJbmRleD1WLHQoYSxFKSxnfHxofHwoZz0hMCxDKGspKSksRX0sZS51bnN0YWJsZV9zaG91bGRZaWVsZD1qLGUudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKEUpe3ZhciBPPWY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFI9ZjtmPU87dHJ5e3JldHVybiBFLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2Y9Un19fX0pKHgxKTt5MS5leHBvcnRzPXgxO3ZhciBhJD15MS5leHBvcnRzOy8qKgogKiBAbGljZW5zZSBSZWFjdAogKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL3ZhciB3MT1wLFRuPWEkO2Z1bmN0aW9uIFUoZSl7Zm9yKHZhciB0PSJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2Usbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdCs9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW25dKTtyZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCAiK3QrIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn12YXIgXzE9bmV3IFNldCxKcz17fTtmdW5jdGlvbiBfaShlLHQpe3hsKGUsdCkseGwoZSsiQ2FwdHVyZSIsdCl9ZnVuY3Rpb24geGwoZSx0KXtmb3IoSnNbZV09dCxlPTA7ZTx0Lmxlbmd0aDtlKyspXzEuYWRkKHRbZV0pfXZhciBVcj0hKHR5cGVvZiB3aW5kb3c+InUifHx0eXBlb2Ygd2luZG93LmRvY3VtZW50PiJ1Inx8dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50PiJ1IiksQmY9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx1JD0vXls6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXVs6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXC0uMC05XHUwMEI3XHUwMzAwLVx1MDM2Rlx1MjAzRi1cdTIwNDBdKiQvLGV2PXt9LHR2PXt9O2Z1bmN0aW9uIGMkKGUpe3JldHVybiBCZi5jYWxsKHR2LGUpPyEwOkJmLmNhbGwoZXYsZSk/ITE6dSQudGVzdChlKT90dltlXT0hMDooZXZbZV09ITAsITEpfWZ1bmN0aW9uIGQkKGUsdCxuLHIpe2lmKG4hPT1udWxsJiZuLnR5cGU9PT0wKXJldHVybiExO3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOnJldHVybiEwO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIHI/ITE6biE9PW51bGw/IW4uYWNjZXB0c0Jvb2xlYW5zOihlPWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLDUpLGUhPT0iZGF0YS0iJiZlIT09ImFyaWEtIik7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gZiQoZSx0LG4scil7aWYodD09PW51bGx8fHR5cGVvZiB0PiJ1Inx8ZCQoZSx0LG4scikpcmV0dXJuITA7aWYocilyZXR1cm4hMTtpZihuIT09bnVsbClzd2l0Y2gobi50eXBlKXtjYXNlIDM6cmV0dXJuIXQ7Y2FzZSA0OnJldHVybiB0PT09ITE7Y2FzZSA1OnJldHVybiBpc05hTih0KTtjYXNlIDY6cmV0dXJuIGlzTmFOKHQpfHwxPnR9cmV0dXJuITF9ZnVuY3Rpb24gYW4oZSx0LG4scixvLGksbCl7dGhpcy5hY2NlcHRzQm9vbGVhbnM9dD09PTJ8fHQ9PT0zfHx0PT09NCx0aGlzLmF0dHJpYnV0ZU5hbWU9cix0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZT1vLHRoaXMubXVzdFVzZVByb3BlcnR5PW4sdGhpcy5wcm9wZXJ0eU5hbWU9ZSx0aGlzLnR5cGU9dCx0aGlzLnNhbml0aXplVVJMPWksdGhpcy5yZW1vdmVFbXB0eVN0cmluZz1sfXZhciBJdD17fTsiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7SXRbZV09bmV3IGFuKGUsMCwhMSxlLG51bGwsITEsITEpfSk7W1siYWNjZXB0Q2hhcnNldCIsImFjY2VwdC1jaGFyc2V0Il0sWyJjbGFzc05hbWUiLCJjbGFzcyJdLFsiaHRtbEZvciIsImZvciJdLFsiaHR0cEVxdWl2IiwiaHR0cC1lcXVpdiJdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07SXRbdF09bmV3IGFuKHQsMSwhMSxlWzFdLG51bGwsITEsITEpfSk7WyJjb250ZW50RWRpdGFibGUiLCJkcmFnZ2FibGUiLCJzcGVsbENoZWNrIiwidmFsdWUiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0l0W2VdPW5ldyBhbihlLDIsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7WyJhdXRvUmV2ZXJzZSIsImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQiLCJmb2N1c2FibGUiLCJwcmVzZXJ2ZUFscGhhIl0uZm9yRWFjaChmdW5jdGlvbihlKXtJdFtlXT1uZXcgYW4oZSwyLCExLGUsbnVsbCwhMSwhMSl9KTsiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlIGRpc2FibGVSZW1vdGVQbGF5YmFjayBmb3JtTm9WYWxpZGF0ZSBoaWRkZW4gbG9vcCBub01vZHVsZSBub1ZhbGlkYXRlIG9wZW4gcGxheXNJbmxpbmUgcmVhZE9ubHkgcmVxdWlyZWQgcmV2ZXJzZWQgc2NvcGVkIHNlYW1sZXNzIGl0ZW1TY29wZSIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0l0W2VdPW5ldyBhbihlLDMsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7WyJjaGVja2VkIiwibXVsdGlwbGUiLCJtdXRlZCIsInNlbGVjdGVkIl0uZm9yRWFjaChmdW5jdGlvbihlKXtJdFtlXT1uZXcgYW4oZSwzLCEwLGUsbnVsbCwhMSwhMSl9KTtbImNhcHR1cmUiLCJkb3dubG9hZCJdLmZvckVhY2goZnVuY3Rpb24oZSl7SXRbZV09bmV3IGFuKGUsNCwhMSxlLG51bGwsITEsITEpfSk7WyJjb2xzIiwicm93cyIsInNpemUiLCJzcGFuIl0uZm9yRWFjaChmdW5jdGlvbihlKXtJdFtlXT1uZXcgYW4oZSw2LCExLGUsbnVsbCwhMSwhMSl9KTtbInJvd1NwYW4iLCJzdGFydCJdLmZvckVhY2goZnVuY3Rpb24oZSl7SXRbZV09bmV3IGFuKGUsNSwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTt2YXIgV3A9L1tcLTpdKFthLXpdKS9nO2Z1bmN0aW9uIFVwKGUpe3JldHVybiBlWzFdLnRvVXBwZXJDYXNlKCl9ImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0Ii5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFdwLFVwKTtJdFt0XT1uZXcgYW4odCwxLCExLGUsbnVsbCwhMSwhMSl9KTsieGxpbms6YWN0dWF0ZSB4bGluazphcmNyb2xlIHhsaW5rOnJvbGUgeGxpbms6c2hvdyB4bGluazp0aXRsZSB4bGluazp0eXBlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFdwLFVwKTtJdFt0XT1uZXcgYW4odCwxLCExLGUsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCExLCExKX0pO1sieG1sOmJhc2UiLCJ4bWw6bGFuZyIsInhtbDpzcGFjZSJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFdwLFVwKTtJdFt0XT1uZXcgYW4odCwxLCExLGUsImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsITEsITEpfSk7WyJ0YWJJbmRleCIsImNyb3NzT3JpZ2luIl0uZm9yRWFjaChmdW5jdGlvbihlKXtJdFtlXT1uZXcgYW4oZSwxLCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO0l0LnhsaW5rSHJlZj1uZXcgYW4oInhsaW5rSHJlZiIsMSwhMSwieGxpbms6aHJlZiIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCEwLCExKTtbInNyYyIsImhyZWYiLCJhY3Rpb24iLCJmb3JtQWN0aW9uIl0uZm9yRWFjaChmdW5jdGlvbihlKXtJdFtlXT1uZXcgYW4oZSwxLCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCEwLCEwKX0pO2Z1bmN0aW9uIFZwKGUsdCxuLHIpe3ZhciBvPUl0Lmhhc093blByb3BlcnR5KHQpP0l0W3RdOm51bGw7KG8hPT1udWxsP28udHlwZSE9PTA6cnx8ISgyPHQubGVuZ3RoKXx8dFswXSE9PSJvIiYmdFswXSE9PSJPInx8dFsxXSE9PSJuIiYmdFsxXSE9PSJOIikmJihmJCh0LG4sbyxyKSYmKG49bnVsbCkscnx8bz09PW51bGw/YyQodCkmJihuPT09bnVsbD9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LCIiK24pKTpvLm11c3RVc2VQcm9wZXJ0eT9lW28ucHJvcGVydHlOYW1lXT1uPT09bnVsbD9vLnR5cGU9PT0zPyExOiIiOm46KHQ9by5hdHRyaWJ1dGVOYW1lLHI9by5hdHRyaWJ1dGVOYW1lc3BhY2Usbj09PW51bGw/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6KG89by50eXBlLG49bz09PTN8fG89PT00JiZuPT09ITA/IiI6IiIrbixyP2Uuc2V0QXR0cmlidXRlTlMocix0LG4pOmUuc2V0QXR0cmlidXRlKHQsbikpKSl9dmFyIFFyPXcxLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELEphPVN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKSxLaT1TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKSxHaT1TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpLEhwPVN5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIiksV2Y9U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKSxTMT1TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpLEUxPVN5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKSxLcD1TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpLFVmPVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIiksVmY9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2VfbGlzdCIpLEdwPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSx1bz1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksQzE9U3ltYm9sLmZvcigicmVhY3Qub2Zmc2NyZWVuIiksbnY9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIHJzKGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiP251bGw6KGU9bnYmJmVbbnZdfHxlWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpudWxsKX12YXIgcnQ9T2JqZWN0LmFzc2lnbixHZDtmdW5jdGlvbiB4cyhlKXtpZihHZD09PXZvaWQgMCl0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChuKXt2YXIgdD1uLnN0YWNrLnRyaW0oKS5tYXRjaCgvXG4oICooYXQgKT8pLyk7R2Q9dCYmdFsxXXx8IiJ9cmV0dXJuYApgK0dkK2V9dmFyIFlkPSExO2Z1bmN0aW9uIFhkKGUsdCl7aWYoIWV8fFlkKXJldHVybiIiO1lkPSEwO3ZhciBuPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7aWYodClpZih0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm9wcyIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksdHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KHQsW10pfWNhdGNoKHUpe3ZhciByPXV9UmVmbGVjdC5jb25zdHJ1Y3QoZSxbXSx0KX1lbHNle3RyeXt0LmNhbGwoKX1jYXRjaCh1KXtyPXV9ZS5jYWxsKHQucHJvdG90eXBlKX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKHUpe3I9dX1lKCl9fWNhdGNoKHUpe2lmKHUmJnImJnR5cGVvZiB1LnN0YWNrPT0ic3RyaW5nIil7Zm9yKHZhciBvPXUuc3RhY2suc3BsaXQoYApgKSxpPXIuc3RhY2suc3BsaXQoYApgKSxsPW8ubGVuZ3RoLTEscz1pLmxlbmd0aC0xOzE8PWwmJjA8PXMmJm9bbF0hPT1pW3NdOylzLS07Zm9yKDsxPD1sJiYwPD1zO2wtLSxzLS0paWYob1tsXSE9PWlbc10pe2lmKGwhPT0xfHxzIT09MSlkbyBpZihsLS0scy0tLDA+c3x8b1tsXSE9PWlbc10pe3ZhciBhPWAKYCtvW2xdLnJlcGxhY2UoIiBhdCBuZXcgIiwiIGF0ICIpO3JldHVybiBlLmRpc3BsYXlOYW1lJiZhLmluY2x1ZGVzKCI8YW5vbnltb3VzPiIpJiYoYT1hLnJlcGxhY2UoIjxhbm9ueW1vdXM+IixlLmRpc3BsYXlOYW1lKSksYX13aGlsZSgxPD1sJiYwPD1zKTticmVha319fWZpbmFsbHl7WWQ9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9bn1yZXR1cm4oZT1lP2UuZGlzcGxheU5hbWV8fGUubmFtZToiIik/eHMoZSk6IiJ9ZnVuY3Rpb24gaCQoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDU6cmV0dXJuIHhzKGUudHlwZSk7Y2FzZSAxNjpyZXR1cm4geHMoIkxhenkiKTtjYXNlIDEzOnJldHVybiB4cygiU3VzcGVuc2UiKTtjYXNlIDE5OnJldHVybiB4cygiU3VzcGVuc2VMaXN0Iik7Y2FzZSAwOmNhc2UgMjpjYXNlIDE1OnJldHVybiBlPVhkKGUudHlwZSwhMSksZTtjYXNlIDExOnJldHVybiBlPVhkKGUudHlwZS5yZW5kZXIsITEpLGU7Y2FzZSAxOnJldHVybiBlPVhkKGUudHlwZSwhMCksZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBIZihlKXtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fG51bGw7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO3N3aXRjaChlKXtjYXNlIEdpOnJldHVybiJGcmFnbWVudCI7Y2FzZSBLaTpyZXR1cm4iUG9ydGFsIjtjYXNlIFdmOnJldHVybiJQcm9maWxlciI7Y2FzZSBIcDpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSBVZjpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgVmY6cmV0dXJuIlN1c3BlbnNlTGlzdCJ9aWYodHlwZW9mIGU9PSJvYmplY3QiKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIEUxOnJldHVybihlLmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuQ29uc3VtZXIiO2Nhc2UgUzE6cmV0dXJuKGUuX2NvbnRleHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Qcm92aWRlciI7Y2FzZSBLcDp2YXIgdD1lLnJlbmRlcjtyZXR1cm4gZT1lLmRpc3BsYXlOYW1lLGV8fChlPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZT1lIT09IiI/IkZvcndhcmRSZWYoIitlKyIpIjoiRm9yd2FyZFJlZiIpLGU7Y2FzZSBHcDpyZXR1cm4gdD1lLmRpc3BsYXlOYW1lfHxudWxsLHQhPT1udWxsP3Q6SGYoZS50eXBlKXx8Ik1lbW8iO2Nhc2UgdW86dD1lLl9wYXlsb2FkLGU9ZS5faW5pdDt0cnl7cmV0dXJuIEhmKGUodCkpfWNhdGNoe319cmV0dXJuIG51bGx9ZnVuY3Rpb24gcCQoZSl7dmFyIHQ9ZS50eXBlO3N3aXRjaChlLnRhZyl7Y2FzZSAyNDpyZXR1cm4iQ2FjaGUiO2Nhc2UgOTpyZXR1cm4odC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLkNvbnN1bWVyIjtjYXNlIDEwOnJldHVybih0Ll9jb250ZXh0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuUHJvdmlkZXIiO2Nhc2UgMTg6cmV0dXJuIkRlaHlkcmF0ZWRGcmFnbWVudCI7Y2FzZSAxMTpyZXR1cm4gZT10LnJlbmRlcixlPWUuZGlzcGxheU5hbWV8fGUubmFtZXx8IiIsdC5kaXNwbGF5TmFtZXx8KGUhPT0iIj8iRm9yd2FyZFJlZigiK2UrIikiOiJGb3J3YXJkUmVmIik7Y2FzZSA3OnJldHVybiJGcmFnbWVudCI7Y2FzZSA1OnJldHVybiB0O2Nhc2UgNDpyZXR1cm4iUG9ydGFsIjtjYXNlIDM6cmV0dXJuIlJvb3QiO2Nhc2UgNjpyZXR1cm4iVGV4dCI7Y2FzZSAxNjpyZXR1cm4gSGYodCk7Y2FzZSA4OnJldHVybiB0PT09SHA/IlN0cmljdE1vZGUiOiJNb2RlIjtjYXNlIDIyOnJldHVybiJPZmZzY3JlZW4iO2Nhc2UgMTI6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIDIxOnJldHVybiJTY29wZSI7Y2FzZSAxMzpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgMTk6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSAyNTpyZXR1cm4iVHJhY2luZ01hcmtlciI7Y2FzZSAxOmNhc2UgMDpjYXNlIDE3OmNhc2UgMjpjYXNlIDE0OmNhc2UgMTU6aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIHQuZGlzcGxheU5hbWV8fHQubmFtZXx8bnVsbDtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gUG8oZSl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlImJvb2xlYW4iOmNhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBlO2Nhc2Uib2JqZWN0IjpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiAkMShlKXt2YXIgdD1lLnR5cGU7cmV0dXJuKGU9ZS5ub2RlTmFtZSkmJmUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJih0PT09ImNoZWNrYm94Inx8dD09PSJyYWRpbyIpfWZ1bmN0aW9uIGckKGUpe3ZhciB0PSQxKGUpPyJjaGVja2VkIjoidmFsdWUiLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx0KSxyPSIiK2VbdF07aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnR5cGVvZiBuPCJ1IiYmdHlwZW9mIG4uZ2V0PT0iZnVuY3Rpb24iJiZ0eXBlb2Ygbi5zZXQ9PSJmdW5jdGlvbiIpe3ZhciBvPW4uZ2V0LGk9bi5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24obCl7cj0iIitsLGkuY2FsbCh0aGlzLGwpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6bi5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldFZhbHVlOmZ1bmN0aW9uKGwpe3I9IiIrbH0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbdF19fX19ZnVuY3Rpb24gWmEoZSl7ZS5fdmFsdWVUcmFja2VyfHwoZS5fdmFsdWVUcmFja2VyPWckKGUpKX1mdW5jdGlvbiBrMShlKXtpZighZSlyZXR1cm4hMTt2YXIgdD1lLl92YWx1ZVRyYWNrZXI7aWYoIXQpcmV0dXJuITA7dmFyIG49dC5nZXRWYWx1ZSgpLHI9IiI7cmV0dXJuIGUmJihyPSQxKGUpP2UuY2hlY2tlZD8idHJ1ZSI6ImZhbHNlIjplLnZhbHVlKSxlPXIsZSE9PW4/KHQuc2V0VmFsdWUoZSksITApOiExfWZ1bmN0aW9uIFF1KGUpe2lmKGU9ZXx8KHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQ6dm9pZCAwKSx0eXBlb2YgZT4idSIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRjaHtyZXR1cm4gZS5ib2R5fX1mdW5jdGlvbiBLZihlLHQpe3ZhciBuPXQuY2hlY2tlZDtyZXR1cm4gcnQoe30sdCx7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bj8/ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkfSl9ZnVuY3Rpb24gcnYoZSx0KXt2YXIgbj10LmRlZmF1bHRWYWx1ZT09bnVsbD8iIjp0LmRlZmF1bHRWYWx1ZSxyPXQuY2hlY2tlZCE9bnVsbD90LmNoZWNrZWQ6dC5kZWZhdWx0Q2hlY2tlZDtuPVBvKHQudmFsdWUhPW51bGw/dC52YWx1ZTpuKSxlLl93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOnIsaW5pdGlhbFZhbHVlOm4sY29udHJvbGxlZDp0LnR5cGU9PT0iY2hlY2tib3gifHx0LnR5cGU9PT0icmFkaW8iP3QuY2hlY2tlZCE9bnVsbDp0LnZhbHVlIT1udWxsfX1mdW5jdGlvbiBUMShlLHQpe3Q9dC5jaGVja2VkLHQhPW51bGwmJlZwKGUsImNoZWNrZWQiLHQsITEpfWZ1bmN0aW9uIEdmKGUsdCl7VDEoZSx0KTt2YXIgbj1Qbyh0LnZhbHVlKSxyPXQudHlwZTtpZihuIT1udWxsKXI9PT0ibnVtYmVyIj8obj09PTAmJmUudmFsdWU9PT0iInx8ZS52YWx1ZSE9bikmJihlLnZhbHVlPSIiK24pOmUudmFsdWUhPT0iIituJiYoZS52YWx1ZT0iIituKTtlbHNlIGlmKHI9PT0ic3VibWl0Inx8cj09PSJyZXNldCIpe2UucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpO3JldHVybn10Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpP1lmKGUsdC50eXBlLG4pOnQuaGFzT3duUHJvcGVydHkoImRlZmF1bHRWYWx1ZSIpJiZZZihlLHQudHlwZSxQbyh0LmRlZmF1bHRWYWx1ZSkpLHQuY2hlY2tlZD09bnVsbCYmdC5kZWZhdWx0Q2hlY2tlZCE9bnVsbCYmKGUuZGVmYXVsdENoZWNrZWQ9ISF0LmRlZmF1bHRDaGVja2VkKX1mdW5jdGlvbiBvdihlLHQsbil7aWYodC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKXx8dC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikpe3ZhciByPXQudHlwZTtpZighKHIhPT0ic3VibWl0IiYmciE9PSJyZXNldCJ8fHQudmFsdWUhPT12b2lkIDAmJnQudmFsdWUhPT1udWxsKSlyZXR1cm47dD0iIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLG58fHQ9PT1lLnZhbHVlfHwoZS52YWx1ZT10KSxlLmRlZmF1bHRWYWx1ZT10fW49ZS5uYW1lLG4hPT0iIiYmKGUubmFtZT0iIiksZS5kZWZhdWx0Q2hlY2tlZD0hIWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZCxuIT09IiImJihlLm5hbWU9bil9ZnVuY3Rpb24gWWYoZSx0LG4peyh0IT09Im51bWJlciJ8fFF1KGUub3duZXJEb2N1bWVudCkhPT1lKSYmKG49PW51bGw/ZS5kZWZhdWx0VmFsdWU9IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTplLmRlZmF1bHRWYWx1ZSE9PSIiK24mJihlLmRlZmF1bHRWYWx1ZT0iIituKSl9dmFyIHdzPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gYWwoZSx0LG4scil7aWYoZT1lLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl0WyIkIituW29dXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKW89dC5oYXNPd25Qcm9wZXJ0eSgiJCIrZVtuXS52YWx1ZSksZVtuXS5zZWxlY3RlZCE9PW8mJihlW25dLnNlbGVjdGVkPW8pLG8mJnImJihlW25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobj0iIitQbyhuKSx0PW51bGwsbz0wO288ZS5sZW5ndGg7bysrKXtpZihlW29dLnZhbHVlPT09bil7ZVtvXS5zZWxlY3RlZD0hMCxyJiYoZVtvXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn10IT09bnVsbHx8ZVtvXS5kaXNhYmxlZHx8KHQ9ZVtvXSl9dCE9PW51bGwmJih0LnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gWGYoZSx0KXtpZih0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT1udWxsKXRocm93IEVycm9yKFUoOTEpKTtyZXR1cm4gcnQoe30sdCx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIGl2KGUsdCl7dmFyIG49dC52YWx1ZTtpZihuPT1udWxsKXtpZihuPXQuY2hpbGRyZW4sdD10LmRlZmF1bHRWYWx1ZSxuIT1udWxsKXtpZih0IT1udWxsKXRocm93IEVycm9yKFUoOTIpKTtpZih3cyhuKSl7aWYoMTxuLmxlbmd0aCl0aHJvdyBFcnJvcihVKDkzKSk7bj1uWzBdfXQ9bn10PT1udWxsJiYodD0iIiksbj10fWUuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOlBvKG4pfX1mdW5jdGlvbiBiMShlLHQpe3ZhciBuPVBvKHQudmFsdWUpLHI9UG8odC5kZWZhdWx0VmFsdWUpO24hPW51bGwmJihuPSIiK24sbiE9PWUudmFsdWUmJihlLnZhbHVlPW4pLHQuZGVmYXVsdFZhbHVlPT1udWxsJiZlLmRlZmF1bHRWYWx1ZSE9PW4mJihlLmRlZmF1bHRWYWx1ZT1uKSksciE9bnVsbCYmKGUuZGVmYXVsdFZhbHVlPSIiK3IpfWZ1bmN0aW9uIGx2KGUpe3ZhciB0PWUudGV4dENvbnRlbnQ7dD09PWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJnQhPT0iIiYmdCE9PW51bGwmJihlLnZhbHVlPXQpfWZ1bmN0aW9uIE4xKGUpe3N3aXRjaChlKXtjYXNlInN2ZyI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtjYXNlIm1hdGgiOnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjtkZWZhdWx0OnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIn19ZnVuY3Rpb24gUWYoZSx0KXtyZXR1cm4gZT09bnVsbHx8ZT09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj9OMSh0KTplPT09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiYmdD09PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6ZX12YXIgcWEsUjE9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBNU0FwcDwidSImJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKHQsbixyLG8pe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLHIsbyl9KX06ZX0oZnVuY3Rpb24oZSx0KXtpZihlLm5hbWVzcGFjZVVSSSE9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ8fCJpbm5lckhUTUwiaW4gZSllLmlubmVySFRNTD10O2Vsc2V7Zm9yKHFhPXFhfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxxYS5pbm5lckhUTUw9Ijxzdmc+Iit0LnZhbHVlT2YoKS50b1N0cmluZygpKyI8L3N2Zz4iLHQ9cWEuZmlyc3RDaGlsZDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtmb3IoO3QuZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZCh0LmZpcnN0Q2hpbGQpfX0pO2Z1bmN0aW9uIFpzKGUsdCl7aWYodCl7dmFyIG49ZS5maXJzdENoaWxkO2lmKG4mJm49PT1lLmxhc3RDaGlsZCYmbi5ub2RlVHlwZT09PTMpe24ubm9kZVZhbHVlPXQ7cmV0dXJufX1lLnRleHRDb250ZW50PXR9dmFyIFRzPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxhc3BlY3RSYXRpbzohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxtJD1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKFRzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe20kLmZvckVhY2goZnVuY3Rpb24odCl7dD10K2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSksVHNbdF09VHNbZV19KX0pO2Z1bmN0aW9uIFAxKGUsdCxuKXtyZXR1cm4gdD09bnVsbHx8dHlwZW9mIHQ9PSJib29sZWFuInx8dD09PSIiPyIiOm58fHR5cGVvZiB0IT0ibnVtYmVyInx8dD09PTB8fFRzLmhhc093blByb3BlcnR5KGUpJiZUc1tlXT8oIiIrdCkudHJpbSgpOnQrInB4In1mdW5jdGlvbiBPMShlLHQpe2U9ZS5zdHlsZTtmb3IodmFyIG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pKXt2YXIgcj1uLmluZGV4T2YoIi0tIik9PT0wLG89UDEobix0W25dLHIpO249PT0iZmxvYXQiJiYobj0iY3NzRmxvYXQiKSxyP2Uuc2V0UHJvcGVydHkobixvKTplW25dPW99fXZhciB2JD1ydCh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtmdW5jdGlvbiBKZihlLHQpe2lmKHQpe2lmKHYkW2VdJiYodC5jaGlsZHJlbiE9bnVsbHx8dC5kYW5nZXJvdXNseVNldElubmVySFRNTCE9bnVsbCkpdGhyb3cgRXJyb3IoVSgxMzcsZSkpO2lmKHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPW51bGwpe2lmKHQuY2hpbGRyZW4hPW51bGwpdGhyb3cgRXJyb3IoVSg2MCkpO2lmKHR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT0ib2JqZWN0Inx8ISgiX19odG1sImluIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKFUoNjEpKX1pZih0LnN0eWxlIT1udWxsJiZ0eXBlb2YgdC5zdHlsZSE9Im9iamVjdCIpdGhyb3cgRXJyb3IoVSg2MikpfX1mdW5jdGlvbiBaZihlLHQpe2lmKGUuaW5kZXhPZigiLSIpPT09LTEpcmV0dXJuIHR5cGVvZiB0LmlzPT0ic3RyaW5nIjtzd2l0Y2goZSl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgcWY9bnVsbDtmdW5jdGlvbiBZcChlKXtyZXR1cm4gZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3csZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGU9ZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksZS5ub2RlVHlwZT09PTM/ZS5wYXJlbnROb2RlOmV9dmFyIGVoPW51bGwsdWw9bnVsbCxjbD1udWxsO2Z1bmN0aW9uIHN2KGUpe2lmKGU9TWEoZSkpe2lmKHR5cGVvZiBlaCE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihVKDI4MCkpO3ZhciB0PWUuc3RhdGVOb2RlO3QmJih0PXFjKHQpLGVoKGUuc3RhdGVOb2RlLGUudHlwZSx0KSl9fWZ1bmN0aW9uIEExKGUpe3VsP2NsP2NsLnB1c2goZSk6Y2w9W2VdOnVsPWV9ZnVuY3Rpb24gTTEoKXtpZih1bCl7dmFyIGU9dWwsdD1jbDtpZihjbD11bD1udWxsLHN2KGUpLHQpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKylzdih0W2VdKX19ZnVuY3Rpb24gTDEoZSx0KXtyZXR1cm4gZSh0KX1mdW5jdGlvbiBEMSgpe312YXIgUWQ9ITE7ZnVuY3Rpb24gSTEoZSx0LG4pe2lmKFFkKXJldHVybiBlKHQsbik7UWQ9ITA7dHJ5e3JldHVybiBMMShlLHQsbil9ZmluYWxseXtRZD0hMSwodWwhPT1udWxsfHxjbCE9PW51bGwpJiYoRDEoKSxNMSgpKX19ZnVuY3Rpb24gcXMoZSx0KXt2YXIgbj1lLnN0YXRlTm9kZTtpZihuPT09bnVsbClyZXR1cm4gbnVsbDt2YXIgcj1xYyhuKTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtuPXJbdF07ZTpzd2l0Y2godCl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xpY2tDYXB0dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUiOmNhc2Uib25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VNb3ZlIjpjYXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3VzZVVwQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRW50ZXIiOihyPSFyLmRpc2FibGVkKXx8KGU9ZS50eXBlLHI9IShlPT09ImJ1dHRvbiJ8fGU9PT0iaW5wdXQifHxlPT09InNlbGVjdCJ8fGU9PT0idGV4dGFyZWEiKSksZT0hcjticmVhayBlO2RlZmF1bHQ6ZT0hMX1pZihlKXJldHVybiBudWxsO2lmKG4mJnR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFUoMjMxLHQsdHlwZW9mIG4pKTtyZXR1cm4gbn12YXIgdGg9ITE7aWYoVXIpdHJ5e3ZhciBvcz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkob3MsInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXt0aD0hMH19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsb3Msb3MpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0Iixvcyxvcyl9Y2F0Y2h7dGg9ITF9ZnVuY3Rpb24geSQoZSx0LG4scixvLGksbCxzLGEpe3ZhciB1PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7dC5hcHBseShuLHUpfWNhdGNoKGMpe3RoaXMub25FcnJvcihjKX19dmFyIGJzPSExLEp1PW51bGwsWnU9ITEsbmg9bnVsbCx4JD17b25FcnJvcjpmdW5jdGlvbihlKXticz0hMCxKdT1lfX07ZnVuY3Rpb24gdyQoZSx0LG4scixvLGksbCxzLGEpe2JzPSExLEp1PW51bGwseSQuYXBwbHkoeCQsYXJndW1lbnRzKX1mdW5jdGlvbiBfJChlLHQsbixyLG8saSxsLHMsYSl7aWYodyQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGJzKXtpZihicyl7dmFyIHU9SnU7YnM9ITEsSnU9bnVsbH1lbHNlIHRocm93IEVycm9yKFUoMTk4KSk7WnV8fChadT0hMCxuaD11KX19ZnVuY3Rpb24gU2koZSl7dmFyIHQ9ZSxuPWU7aWYoZS5hbHRlcm5hdGUpZm9yKDt0LnJldHVybjspdD10LnJldHVybjtlbHNle2U9dDtkbyB0PWUsdC5mbGFncyY0MDk4JiYobj10LnJldHVybiksZT10LnJldHVybjt3aGlsZShlKX1yZXR1cm4gdC50YWc9PT0zP246bnVsbH1mdW5jdGlvbiBqMShlKXtpZihlLnRhZz09PTEzKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYodD09PW51bGwmJihlPWUuYWx0ZXJuYXRlLGUhPT1udWxsJiYodD1lLm1lbW9pemVkU3RhdGUpKSx0IT09bnVsbClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIGF2KGUpe2lmKFNpKGUpIT09ZSl0aHJvdyBFcnJvcihVKDE4OCkpfWZ1bmN0aW9uIFMkKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKCF0KXtpZih0PVNpKGUpLHQ9PT1udWxsKXRocm93IEVycm9yKFUoMTg4KSk7cmV0dXJuIHQhPT1lP251bGw6ZX1mb3IodmFyIG49ZSxyPXQ7Oyl7dmFyIG89bi5yZXR1cm47aWYobz09PW51bGwpYnJlYWs7dmFyIGk9by5hbHRlcm5hdGU7aWYoaT09PW51bGwpe2lmKHI9by5yZXR1cm4sciE9PW51bGwpe249cjtjb250aW51ZX1icmVha31pZihvLmNoaWxkPT09aS5jaGlsZCl7Zm9yKGk9by5jaGlsZDtpOyl7aWYoaT09PW4pcmV0dXJuIGF2KG8pLGU7aWYoaT09PXIpcmV0dXJuIGF2KG8pLHQ7aT1pLnNpYmxpbmd9dGhyb3cgRXJyb3IoVSgxODgpKX1pZihuLnJldHVybiE9PXIucmV0dXJuKW49byxyPWk7ZWxzZXtmb3IodmFyIGw9ITEscz1vLmNoaWxkO3M7KXtpZihzPT09bil7bD0hMCxuPW8scj1pO2JyZWFrfWlmKHM9PT1yKXtsPSEwLHI9byxuPWk7YnJlYWt9cz1zLnNpYmxpbmd9aWYoIWwpe2ZvcihzPWkuY2hpbGQ7czspe2lmKHM9PT1uKXtsPSEwLG49aSxyPW87YnJlYWt9aWYocz09PXIpe2w9ITAscj1pLG49bzticmVha31zPXMuc2libGluZ31pZighbCl0aHJvdyBFcnJvcihVKDE4OSkpfX1pZihuLmFsdGVybmF0ZSE9PXIpdGhyb3cgRXJyb3IoVSgxOTApKX1pZihuLnRhZyE9PTMpdGhyb3cgRXJyb3IoVSgxODgpKTtyZXR1cm4gbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/ZTp0fWZ1bmN0aW9uIHoxKGUpe3JldHVybiBlPVMkKGUpLGUhPT1udWxsP0YxKGUpOm51bGx9ZnVuY3Rpb24gRjEoZSl7aWYoZS50YWc9PT01fHxlLnRhZz09PTYpcmV0dXJuIGU7Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe3ZhciB0PUYxKGUpO2lmKHQhPT1udWxsKXJldHVybiB0O2U9ZS5zaWJsaW5nfXJldHVybiBudWxsfXZhciBCMT1Ubi51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLHV2PVRuLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLEUkPVRuLnVuc3RhYmxlX3Nob3VsZFlpZWxkLEMkPVRuLnVuc3RhYmxlX3JlcXVlc3RQYWludCxmdD1Ubi51bnN0YWJsZV9ub3csJCQ9VG4udW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsWHA9VG4udW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksVzE9VG4udW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkscXU9VG4udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksayQ9VG4udW5zdGFibGVfTG93UHJpb3JpdHksVTE9VG4udW5zdGFibGVfSWRsZVByaW9yaXR5LFhjPW51bGwseXI9bnVsbDtmdW5jdGlvbiBUJChlKXtpZih5ciYmdHlwZW9mIHlyLm9uQ29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXt5ci5vbkNvbW1pdEZpYmVyUm9vdChYYyxlLHZvaWQgMCwoZS5jdXJyZW50LmZsYWdzJjEyOCk9PT0xMjgpfWNhdGNoe319dmFyIHJyPU1hdGguY2x6MzI/TWF0aC5jbHozMjpSJCxiJD1NYXRoLmxvZyxOJD1NYXRoLkxOMjtmdW5jdGlvbiBSJChlKXtyZXR1cm4gZT4+Pj0wLGU9PT0wPzMyOjMxLShiJChlKS9OJHwwKXwwfXZhciBldT02NCx0dT00MTk0MzA0O2Z1bmN0aW9uIF9zKGUpe3N3aXRjaChlJi1lKXtjYXNlIDE6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDg6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gMTY7Y2FzZSAzMjpyZXR1cm4gMzI7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gZSY0MTk0MjQwO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6cmV0dXJuIGUmMTMwMDIzNDI0O2Nhc2UgMTM0MjE3NzI4OnJldHVybiAxMzQyMTc3Mjg7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4gNTM2ODcwOTEyO2Nhc2UgMTA3Mzc0MTgyNDpyZXR1cm4gMTA3Mzc0MTgyNDtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBlYyhlLHQpe3ZhciBuPWUucGVuZGluZ0xhbmVzO2lmKG49PT0wKXJldHVybiAwO3ZhciByPTAsbz1lLnN1c3BlbmRlZExhbmVzLGk9ZS5waW5nZWRMYW5lcyxsPW4mMjY4NDM1NDU1O2lmKGwhPT0wKXt2YXIgcz1sJn5vO3MhPT0wP3I9X3Mocyk6KGkmPWwsaSE9PTAmJihyPV9zKGkpKSl9ZWxzZSBsPW4mfm8sbCE9PTA/cj1fcyhsKTppIT09MCYmKHI9X3MoaSkpO2lmKHI9PT0wKXJldHVybiAwO2lmKHQhPT0wJiZ0IT09ciYmISh0Jm8pJiYobz1yJi1yLGk9dCYtdCxvPj1pfHxvPT09MTYmJihpJjQxOTQyNDApIT09MCkpcmV0dXJuIHQ7aWYociY0JiYocnw9biYxNiksdD1lLmVudGFuZ2xlZExhbmVzLHQhPT0wKWZvcihlPWUuZW50YW5nbGVtZW50cyx0Jj1yOzA8dDspbj0zMS1ycih0KSxvPTE8PG4scnw9ZVtuXSx0Jj1+bztyZXR1cm4gcn1mdW5jdGlvbiBQJChlLHQpe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gdCsyNTA7Y2FzZSA4OmNhc2UgMTY6Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiB0KzVlMztjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0OnJldHVybi0xO2Nhc2UgMTM0MjE3NzI4OmNhc2UgMjY4NDM1NDU2OmNhc2UgNTM2ODcwOTEyOmNhc2UgMTA3Mzc0MTgyNDpyZXR1cm4tMTtkZWZhdWx0OnJldHVybi0xfX1mdW5jdGlvbiBPJChlLHQpe2Zvcih2YXIgbj1lLnN1c3BlbmRlZExhbmVzLHI9ZS5waW5nZWRMYW5lcyxvPWUuZXhwaXJhdGlvblRpbWVzLGk9ZS5wZW5kaW5nTGFuZXM7MDxpOyl7dmFyIGw9MzEtcnIoaSkscz0xPDxsLGE9b1tsXTthPT09LTE/KCEocyZuKXx8cyZyKSYmKG9bbF09UCQocyx0KSk6YTw9dCYmKGUuZXhwaXJlZExhbmVzfD1zKSxpJj1+c319ZnVuY3Rpb24gcmgoZSl7cmV0dXJuIGU9ZS5wZW5kaW5nTGFuZXMmLTEwNzM3NDE4MjUsZSE9PTA/ZTplJjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uIFYxKCl7dmFyIGU9ZXU7cmV0dXJuIGV1PDw9MSwhKGV1JjQxOTQyNDApJiYoZXU9NjQpLGV9ZnVuY3Rpb24gSmQoZSl7Zm9yKHZhciB0PVtdLG49MDszMT5uO24rKyl0LnB1c2goZSk7cmV0dXJuIHR9ZnVuY3Rpb24gT2EoZSx0LG4pe2UucGVuZGluZ0xhbmVzfD10LHQhPT01MzY4NzA5MTImJihlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wKSxlPWUuZXZlbnRUaW1lcyx0PTMxLXJyKHQpLGVbdF09bn1mdW5jdGlvbiBBJChlLHQpe3ZhciBuPWUucGVuZGluZ0xhbmVzJn50O2UucGVuZGluZ0xhbmVzPXQsZS5zdXNwZW5kZWRMYW5lcz0wLGUucGluZ2VkTGFuZXM9MCxlLmV4cGlyZWRMYW5lcyY9dCxlLm11dGFibGVSZWFkTGFuZXMmPXQsZS5lbnRhbmdsZWRMYW5lcyY9dCx0PWUuZW50YW5nbGVtZW50czt2YXIgcj1lLmV2ZW50VGltZXM7Zm9yKGU9ZS5leHBpcmF0aW9uVGltZXM7MDxuOyl7dmFyIG89MzEtcnIobiksaT0xPDxvO3Rbb109MCxyW29dPS0xLGVbb109LTEsbiY9fml9fWZ1bmN0aW9uIFFwKGUsdCl7dmFyIG49ZS5lbnRhbmdsZWRMYW5lc3w9dDtmb3IoZT1lLmVudGFuZ2xlbWVudHM7bjspe3ZhciByPTMxLXJyKG4pLG89MTw8cjtvJnR8ZVtyXSZ0JiYoZVtyXXw9dCksbiY9fm99fXZhciBBZT0wO2Z1bmN0aW9uIEgxKGUpe3JldHVybiBlJj0tZSwxPGU/NDxlP2UmMjY4NDM1NDU1PzE2OjUzNjg3MDkxMjo0OjF9dmFyIEsxLEpwLEcxLFkxLFgxLG9oPSExLG51PVtdLHdvPW51bGwsX289bnVsbCxTbz1udWxsLGVhPW5ldyBNYXAsdGE9bmV3IE1hcCxobz1bXSxNJD0ibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0IHN1Ym1pdCIuc3BsaXQoIiAiKTtmdW5jdGlvbiBjdihlLHQpe3N3aXRjaChlKXtjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOndvPW51bGw7YnJlYWs7Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2xlYXZlIjpfbz1udWxsO2JyZWFrO2Nhc2UibW91c2VvdmVyIjpjYXNlIm1vdXNlb3V0IjpTbz1udWxsO2JyZWFrO2Nhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcm91dCI6ZWEuZGVsZXRlKHQucG9pbnRlcklkKTticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6dGEuZGVsZXRlKHQucG9pbnRlcklkKX19ZnVuY3Rpb24gaXMoZSx0LG4scixvLGkpe3JldHVybiBlPT09bnVsbHx8ZS5uYXRpdmVFdmVudCE9PWk/KGU9e2Jsb2NrZWRPbjp0LGRvbUV2ZW50TmFtZTpuLGV2ZW50U3lzdGVtRmxhZ3M6cixuYXRpdmVFdmVudDppLHRhcmdldENvbnRhaW5lcnM6W29dfSx0IT09bnVsbCYmKHQ9TWEodCksdCE9PW51bGwmJkpwKHQpKSxlKTooZS5ldmVudFN5c3RlbUZsYWdzfD1yLHQ9ZS50YXJnZXRDb250YWluZXJzLG8hPT1udWxsJiZ0LmluZGV4T2Yobyk9PT0tMSYmdC5wdXNoKG8pLGUpfWZ1bmN0aW9uIEwkKGUsdCxuLHIsbyl7c3dpdGNoKHQpe2Nhc2UiZm9jdXNpbiI6cmV0dXJuIHdvPWlzKHdvLGUsdCxuLHIsbyksITA7Y2FzZSJkcmFnZW50ZXIiOnJldHVybiBfbz1pcyhfbyxlLHQsbixyLG8pLCEwO2Nhc2UibW91c2VvdmVyIjpyZXR1cm4gU289aXMoU28sZSx0LG4scixvKSwhMDtjYXNlInBvaW50ZXJvdmVyIjp2YXIgaT1vLnBvaW50ZXJJZDtyZXR1cm4gZWEuc2V0KGksaXMoZWEuZ2V0KGkpfHxudWxsLGUsdCxuLHIsbykpLCEwO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOnJldHVybiBpPW8ucG9pbnRlcklkLHRhLnNldChpLGlzKHRhLmdldChpKXx8bnVsbCxlLHQsbixyLG8pKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBRMShlKXt2YXIgdD1xbyhlLnRhcmdldCk7aWYodCE9PW51bGwpe3ZhciBuPVNpKHQpO2lmKG4hPT1udWxsKXtpZih0PW4udGFnLHQ9PT0xMyl7aWYodD1qMShuKSx0IT09bnVsbCl7ZS5ibG9ja2VkT249dCxYMShlLnByaW9yaXR5LGZ1bmN0aW9uKCl7RzEobil9KTtyZXR1cm59fWVsc2UgaWYodD09PTMmJm4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe2UuYmxvY2tlZE9uPW4udGFnPT09Mz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBPdShlKXtpZihlLmJsb2NrZWRPbiE9PW51bGwpcmV0dXJuITE7Zm9yKHZhciB0PWUudGFyZ2V0Q29udGFpbmVyczswPHQubGVuZ3RoOyl7dmFyIG49aWgoZS5kb21FdmVudE5hbWUsZS5ldmVudFN5c3RlbUZsYWdzLHRbMF0sZS5uYXRpdmVFdmVudCk7aWYobj09PW51bGwpe249ZS5uYXRpdmVFdmVudDt2YXIgcj1uZXcgbi5jb25zdHJ1Y3RvcihuLnR5cGUsbik7cWY9cixuLnRhcmdldC5kaXNwYXRjaEV2ZW50KHIpLHFmPW51bGx9ZWxzZSByZXR1cm4gdD1NYShuKSx0IT09bnVsbCYmSnAodCksZS5ibG9ja2VkT249biwhMTt0LnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gZHYoZSx0LG4pe091KGUpJiZuLmRlbGV0ZSh0KX1mdW5jdGlvbiBEJCgpe29oPSExLHdvIT09bnVsbCYmT3Uod28pJiYod289bnVsbCksX28hPT1udWxsJiZPdShfbykmJihfbz1udWxsKSxTbyE9PW51bGwmJk91KFNvKSYmKFNvPW51bGwpLGVhLmZvckVhY2goZHYpLHRhLmZvckVhY2goZHYpfWZ1bmN0aW9uIGxzKGUsdCl7ZS5ibG9ja2VkT249PT10JiYoZS5ibG9ja2VkT249bnVsbCxvaHx8KG9oPSEwLFRuLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soVG4udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksRCQpKSl9ZnVuY3Rpb24gbmEoZSl7ZnVuY3Rpb24gdChvKXtyZXR1cm4gbHMobyxlKX1pZigwPG51Lmxlbmd0aCl7bHMobnVbMF0sZSk7Zm9yKHZhciBuPTE7bjxudS5sZW5ndGg7bisrKXt2YXIgcj1udVtuXTtyLmJsb2NrZWRPbj09PWUmJihyLmJsb2NrZWRPbj1udWxsKX19Zm9yKHdvIT09bnVsbCYmbHMod28sZSksX28hPT1udWxsJiZscyhfbyxlKSxTbyE9PW51bGwmJmxzKFNvLGUpLGVhLmZvckVhY2godCksdGEuZm9yRWFjaCh0KSxuPTA7bjxoby5sZW5ndGg7bisrKXI9aG9bbl0sci5ibG9ja2VkT249PT1lJiYoci5ibG9ja2VkT249bnVsbCk7Zm9yKDswPGhvLmxlbmd0aCYmKG49aG9bMF0sbi5ibG9ja2VkT249PT1udWxsKTspUTEobiksbi5ibG9ja2VkT249PT1udWxsJiZoby5zaGlmdCgpfXZhciBkbD1Rci5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyx0Yz0hMDtmdW5jdGlvbiBJJChlLHQsbixyKXt2YXIgbz1BZSxpPWRsLnRyYW5zaXRpb247ZGwudHJhbnNpdGlvbj1udWxsO3RyeXtBZT0xLFpwKGUsdCxuLHIpfWZpbmFsbHl7QWU9byxkbC50cmFuc2l0aW9uPWl9fWZ1bmN0aW9uIGokKGUsdCxuLHIpe3ZhciBvPUFlLGk9ZGwudHJhbnNpdGlvbjtkbC50cmFuc2l0aW9uPW51bGw7dHJ5e0FlPTQsWnAoZSx0LG4scil9ZmluYWxseXtBZT1vLGRsLnRyYW5zaXRpb249aX19ZnVuY3Rpb24gWnAoZSx0LG4scil7aWYodGMpe3ZhciBvPWloKGUsdCxuLHIpO2lmKG89PT1udWxsKWFmKGUsdCxyLG5jLG4pLGN2KGUscik7ZWxzZSBpZihMJChvLGUsdCxuLHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihjdihlLHIpLHQmNCYmLTE8TSQuaW5kZXhPZihlKSl7Zm9yKDtvIT09bnVsbDspe3ZhciBpPU1hKG8pO2lmKGkhPT1udWxsJiZLMShpKSxpPWloKGUsdCxuLHIpLGk9PT1udWxsJiZhZihlLHQscixuYyxuKSxpPT09bylicmVhaztvPWl9byE9PW51bGwmJnIuc3RvcFByb3BhZ2F0aW9uKCl9ZWxzZSBhZihlLHQscixudWxsLG4pfX12YXIgbmM9bnVsbDtmdW5jdGlvbiBpaChlLHQsbixyKXtpZihuYz1udWxsLGU9WXAociksZT1xbyhlKSxlIT09bnVsbClpZih0PVNpKGUpLHQ9PT1udWxsKWU9bnVsbDtlbHNlIGlmKG49dC50YWcsbj09PTEzKXtpZihlPWoxKHQpLGUhPT1udWxsKXJldHVybiBlO2U9bnVsbH1lbHNlIGlmKG49PT0zKXtpZih0LnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXJldHVybiB0LnRhZz09PTM/dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO2U9bnVsbH1lbHNlIHQhPT1lJiYoZT1udWxsKTtyZXR1cm4gbmM9ZSxudWxsfWZ1bmN0aW9uIEoxKGUpe3N3aXRjaChlKXtjYXNlImNhbmNlbCI6Y2FzZSJjbGljayI6Y2FzZSJjbG9zZSI6Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjpjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOmNhc2UiaW5wdXQiOmNhc2UiaW52YWxpZCI6Y2FzZSJrZXlkb3duIjpjYXNlImtleXByZXNzIjpjYXNlImtleXVwIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZXVwIjpjYXNlInBhc3RlIjpjYXNlInBhdXNlIjpjYXNlInBsYXkiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVydXAiOmNhc2UicmF0ZWNoYW5nZSI6Y2FzZSJyZXNldCI6Y2FzZSJyZXNpemUiOmNhc2Uic2Vla2VkIjpjYXNlInN1Ym1pdCI6Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaHN0YXJ0IjpjYXNlInZvbHVtZWNoYW5nZSI6Y2FzZSJjaGFuZ2UiOmNhc2Uic2VsZWN0aW9uY2hhbmdlIjpjYXNlInRleHRJbnB1dCI6Y2FzZSJjb21wb3NpdGlvbnN0YXJ0IjpjYXNlImNvbXBvc2l0aW9uZW5kIjpjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpjYXNlImJlZm9yZWJsdXIiOmNhc2UiYWZ0ZXJibHVyIjpjYXNlImJlZm9yZWlucHV0IjpjYXNlImJsdXIiOmNhc2UiZnVsbHNjcmVlbmNoYW5nZSI6Y2FzZSJmb2N1cyI6Y2FzZSJoYXNoY2hhbmdlIjpjYXNlInBvcHN0YXRlIjpjYXNlInNlbGVjdCI6Y2FzZSJzZWxlY3RzdGFydCI6cmV0dXJuIDE7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNlb3V0IjpjYXNlIm1vdXNlb3ZlciI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInNjcm9sbCI6Y2FzZSJ0b2dnbGUiOmNhc2UidG91Y2htb3ZlIjpjYXNlIndoZWVsIjpjYXNlIm1vdXNlZW50ZXIiOmNhc2UibW91c2VsZWF2ZSI6Y2FzZSJwb2ludGVyZW50ZXIiOmNhc2UicG9pbnRlcmxlYXZlIjpyZXR1cm4gNDtjYXNlIm1lc3NhZ2UiOnN3aXRjaCgkJCgpKXtjYXNlIFhwOnJldHVybiAxO2Nhc2UgVzE6cmV0dXJuIDQ7Y2FzZSBxdTpjYXNlIGskOnJldHVybiAxNjtjYXNlIFUxOnJldHVybiA1MzY4NzA5MTI7ZGVmYXVsdDpyZXR1cm4gMTZ9ZGVmYXVsdDpyZXR1cm4gMTZ9fXZhciBtbz1udWxsLHFwPW51bGwsQXU9bnVsbDtmdW5jdGlvbiBaMSgpe2lmKEF1KXJldHVybiBBdTt2YXIgZSx0PXFwLG49dC5sZW5ndGgscixvPSJ2YWx1ZSJpbiBtbz9tby52YWx1ZTptby50ZXh0Q29udGVudCxpPW8ubGVuZ3RoO2ZvcihlPTA7ZTxuJiZ0W2VdPT09b1tlXTtlKyspO3ZhciBsPW4tZTtmb3Iocj0xO3I8PWwmJnRbbi1yXT09PW9baS1yXTtyKyspO3JldHVybiBBdT1vLnNsaWNlKGUsMTxyPzEtcjp2b2lkIDApfWZ1bmN0aW9uIE11KGUpe3ZhciB0PWUua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gZT8oZT1lLmNoYXJDb2RlLGU9PT0wJiZ0PT09MTMmJihlPTEzKSk6ZT10LGU9PT0xMCYmKGU9MTMpLDMyPD1lfHxlPT09MTM/ZTowfWZ1bmN0aW9uIHJ1KCl7cmV0dXJuITB9ZnVuY3Rpb24gZnYoKXtyZXR1cm4hMX1mdW5jdGlvbiBQbihlKXtmdW5jdGlvbiB0KG4scixvLGksbCl7dGhpcy5fcmVhY3ROYW1lPW4sdGhpcy5fdGFyZ2V0SW5zdD1vLHRoaXMudHlwZT1yLHRoaXMubmF0aXZlRXZlbnQ9aSx0aGlzLnRhcmdldD1sLHRoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgcyBpbiBlKWUuaGFzT3duUHJvcGVydHkocykmJihuPWVbc10sdGhpc1tzXT1uP24oaSk6aVtzXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShpLmRlZmF1bHRQcmV2ZW50ZWQhPW51bGw/aS5kZWZhdWx0UHJldmVudGVkOmkucmV0dXJuVmFsdWU9PT0hMSk/cnU6ZnYsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdix0aGlzfXJldHVybiBydCh0LnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5wcmV2ZW50RGVmYXVsdD9uLnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIG4ucmV0dXJuVmFsdWUhPSJ1bmtub3duIiYmKG4ucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXJ1KX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5zdG9wUHJvcGFnYXRpb24/bi5zdG9wUHJvcGFnYXRpb24oKTp0eXBlb2Ygbi5jYW5jZWxCdWJibGUhPSJ1bmtub3duIiYmKG4uY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXJ1KX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OnJ1fSksdH12YXIgRGw9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0sZWc9UG4oRGwpLEFhPXJ0KHt9LERsLHt2aWV3OjAsZGV0YWlsOjB9KSx6JD1QbihBYSksWmQscWQsc3MsUWM9cnQoe30sQWEse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6dGcsYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVsYXRlZFRhcmdldD09PXZvaWQgMD9lLmZyb21FbGVtZW50PT09ZS5zcmNFbGVtZW50P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQ6ZS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oZSl7cmV0dXJuIm1vdmVtZW50WCJpbiBlP2UubW92ZW1lbnRYOihlIT09c3MmJihzcyYmZS50eXBlPT09Im1vdXNlbW92ZSI/KFpkPWUuc2NyZWVuWC1zcy5zY3JlZW5YLHFkPWUuc2NyZWVuWS1zcy5zY3JlZW5ZKTpxZD1aZD0wLHNzPWUpLFpkKX0sbW92ZW1lbnRZOmZ1bmN0aW9uKGUpe3JldHVybiJtb3ZlbWVudFkiaW4gZT9lLm1vdmVtZW50WTpxZH19KSxodj1QbihRYyksRiQ9cnQoe30sUWMse2RhdGFUcmFuc2ZlcjowfSksQiQ9UG4oRiQpLFckPXJ0KHt9LEFhLHtyZWxhdGVkVGFyZ2V0OjB9KSxlZj1QbihXJCksVSQ9cnQoe30sRGwse2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLFYkPVBuKFUkKSxIJD1ydCh7fSxEbCx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxLJD1QbihIJCksRyQ9cnQoe30sRGwse2RhdGE6MH0pLHB2PVBuKEckKSxZJD17RXNjOiJFc2NhcGUiLFNwYWNlYmFyOiIgIixMZWZ0OiJBcnJvd0xlZnQiLFVwOiJBcnJvd1VwIixSaWdodDoiQXJyb3dSaWdodCIsRG93bjoiQXJyb3dEb3duIixEZWw6IkRlbGV0ZSIsV2luOiJPUyIsTWVudToiQ29udGV4dE1lbnUiLEFwcHM6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLE1velByaW50YWJsZUtleToiVW5pZGVudGlmaWVkIn0sWCQ9ezg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMjoiQ2xlYXIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ29udHJvbCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2NhcGUiLDMyOiIgIiwzMzoiUGFnZVVwIiwzNDoiUGFnZURvd24iLDM1OiJFbmQiLDM2OiJIb21lIiwzNzoiQXJyb3dMZWZ0IiwzODoiQXJyb3dVcCIsMzk6IkFycm93UmlnaHQiLDQwOiJBcnJvd0Rvd24iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDExMjoiRjEiLDExMzoiRjIiLDExNDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYiLDExODoiRjciLDExOToiRjgiLDEyMDoiRjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIiLDE0NDoiTnVtTG9jayIsMTQ1OiJTY3JvbGxMb2NrIiwyMjQ6Ik1ldGEifSxRJD17QWx0OiJhbHRLZXkiLENvbnRyb2w6ImN0cmxLZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlmdEtleSJ9O2Z1bmN0aW9uIEokKGUpe3ZhciB0PXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIHQuZ2V0TW9kaWZpZXJTdGF0ZT90LmdldE1vZGlmaWVyU3RhdGUoZSk6KGU9USRbZV0pPyEhdFtlXTohMX1mdW5jdGlvbiB0Zygpe3JldHVybiBKJH12YXIgWiQ9cnQoe30sQWEse2tleTpmdW5jdGlvbihlKXtpZihlLmtleSl7dmFyIHQ9WSRbZS5rZXldfHxlLmtleTtpZih0IT09IlVuaWRlbnRpZmllZCIpcmV0dXJuIHR9cmV0dXJuIGUudHlwZT09PSJrZXlwcmVzcyI/KGU9TXUoZSksZT09PTEzPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZShlKSk6ZS50eXBlPT09ImtleWRvd24ifHxlLnR5cGU9PT0ia2V5dXAiP1gkW2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTp0ZyxjaGFyQ29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImtleXByZXNzIj9NdShlKTowfSxrZXlDb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ia2V5ZG93biJ8fGUudHlwZT09PSJrZXl1cCI/ZS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ia2V5cHJlc3MiP011KGUpOmUudHlwZT09PSJrZXlkb3duInx8ZS50eXBlPT09ImtleXVwIj9lLmtleUNvZGU6MH19KSxxJD1QbihaJCksZWs9cnQoe30sUWMse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksZ3Y9UG4oZWspLHRrPXJ0KHt9LEFhLHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6dGd9KSxuaz1Qbih0aykscms9cnQoe30sRGwse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksb2s9UG4ocmspLGlrPXJ0KHt9LFFjLHtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWCJpbiBlP2UuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiBlPy1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFZImluIGU/ZS5kZWx0YVk6IndoZWVsRGVsdGFZImluIGU/LWUud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4gZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksbGs9UG4oaWspLHNrPVs5LDEzLDI3LDMyXSxuZz1VciYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LE5zPW51bGw7VXImJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJihOcz1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBhaz1VciYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiFOcyxxMT1VciYmKCFuZ3x8TnMmJjg8TnMmJjExPj1OcyksbXY9IiAiLHZ2PSExO2Z1bmN0aW9uIGV4KGUsdCl7c3dpdGNoKGUpe2Nhc2Uia2V5dXAiOnJldHVybiBzay5pbmRleE9mKHQua2V5Q29kZSkhPT0tMTtjYXNlImtleWRvd24iOnJldHVybiB0LmtleUNvZGUhPT0yMjk7Y2FzZSJrZXlwcmVzcyI6Y2FzZSJtb3VzZWRvd24iOmNhc2UiZm9jdXNvdXQiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIHR4KGUpe3JldHVybiBlPWUuZGV0YWlsLHR5cGVvZiBlPT0ib2JqZWN0IiYmImRhdGEiaW4gZT9lLmRhdGE6bnVsbH12YXIgWWk9ITE7ZnVuY3Rpb24gdWsoZSx0KXtzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIHR4KHQpO2Nhc2Uia2V5cHJlc3MiOnJldHVybiB0LndoaWNoIT09MzI/bnVsbDoodnY9ITAsbXYpO2Nhc2UidGV4dElucHV0IjpyZXR1cm4gZT10LmRhdGEsZT09PW12JiZ2dj9udWxsOmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gY2soZSx0KXtpZihZaSlyZXR1cm4gZT09PSJjb21wb3NpdGlvbmVuZCJ8fCFuZyYmZXgoZSx0KT8oZT1aMSgpLEF1PXFwPW1vPW51bGwsWWk9ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoISh0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpfHx0LmN0cmxLZXkmJnQuYWx0S2V5KXtpZih0LmNoYXImJjE8dC5jaGFyLmxlbmd0aClyZXR1cm4gdC5jaGFyO2lmKHQud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIHExJiZ0LmxvY2FsZSE9PSJrbyI/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIGRrPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1sb2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiB5dihlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT0iaW5wdXQiPyEhZGtbZS50eXBlXTp0PT09InRleHRhcmVhIn1mdW5jdGlvbiBueChlLHQsbixyKXtBMShyKSx0PXJjKHQsIm9uQ2hhbmdlIiksMDx0Lmxlbmd0aCYmKG49bmV3IGVnKCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLHIpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgUnM9bnVsbCxyYT1udWxsO2Z1bmN0aW9uIGZrKGUpe2h4KGUsMCl9ZnVuY3Rpb24gSmMoZSl7dmFyIHQ9SmkoZSk7aWYoazEodCkpcmV0dXJuIGV9ZnVuY3Rpb24gaGsoZSx0KXtpZihlPT09ImNoYW5nZSIpcmV0dXJuIHR9dmFyIHJ4PSExO2lmKFVyKXt2YXIgdGY7aWYoVXIpe3ZhciBuZj0ib25pbnB1dCJpbiBkb2N1bWVudDtpZighbmYpe3ZhciB4dj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt4di5zZXRBdHRyaWJ1dGUoIm9uaW5wdXQiLCJyZXR1cm47IiksbmY9dHlwZW9mIHh2Lm9uaW5wdXQ9PSJmdW5jdGlvbiJ9dGY9bmZ9ZWxzZSB0Zj0hMTtyeD10ZiYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiB3digpe1JzJiYoUnMuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLG94KSxyYT1Scz1udWxsKX1mdW5jdGlvbiBveChlKXtpZihlLnByb3BlcnR5TmFtZT09PSJ2YWx1ZSImJkpjKHJhKSl7dmFyIHQ9W107bngodCxyYSxlLFlwKGUpKSxJMShmayx0KX19ZnVuY3Rpb24gcGsoZSx0LG4pe2U9PT0iZm9jdXNpbiI/KHd2KCksUnM9dCxyYT1uLFJzLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixveCkpOmU9PT0iZm9jdXNvdXQiJiZ3digpfWZ1bmN0aW9uIGdrKGUpe2lmKGU9PT0ic2VsZWN0aW9uY2hhbmdlInx8ZT09PSJrZXl1cCJ8fGU9PT0ia2V5ZG93biIpcmV0dXJuIEpjKHJhKX1mdW5jdGlvbiBtayhlLHQpe2lmKGU9PT0iY2xpY2siKXJldHVybiBKYyh0KX1mdW5jdGlvbiB2ayhlLHQpe2lmKGU9PT0iaW5wdXQifHxlPT09ImNoYW5nZSIpcmV0dXJuIEpjKHQpfWZ1bmN0aW9uIHlrKGUsdCl7cmV0dXJuIGU9PT10JiYoZSE9PTB8fDEvZT09PTEvdCl8fGUhPT1lJiZ0IT09dH12YXIgaXI9dHlwZW9mIE9iamVjdC5pcz09ImZ1bmN0aW9uIj9PYmplY3QuaXM6eWs7ZnVuY3Rpb24gb2EoZSx0KXtpZihpcihlLHQpKXJldHVybiEwO2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGwpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSkscj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07aWYoIUJmLmNhbGwodCxvKXx8IWlyKGVbb10sdFtvXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gX3YoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIFN2KGUsdCl7dmFyIG49X3YoZSk7ZT0wO2Zvcih2YXIgcjtuOyl7aWYobi5ub2RlVHlwZT09PTMpe2lmKHI9ZStuLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZyPj10KXJldHVybntub2RlOm4sb2Zmc2V0OnQtZX07ZT1yfWU6e2Zvcig7bjspe2lmKG4ubmV4dFNpYmxpbmcpe249bi5uZXh0U2libGluZzticmVhayBlfW49bi5wYXJlbnROb2RlfW49dm9pZCAwfW49X3Yobil9fWZ1bmN0aW9uIGl4KGUsdCl7cmV0dXJuIGUmJnQ/ZT09PXQ/ITA6ZSYmZS5ub2RlVHlwZT09PTM/ITE6dCYmdC5ub2RlVHlwZT09PTM/aXgoZSx0LnBhcmVudE5vZGUpOiJjb250YWlucyJpbiBlP2UuY29udGFpbnModCk6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8hIShlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJjE2KTohMTohMX1mdW5jdGlvbiBseCgpe2Zvcih2YXIgZT13aW5kb3csdD1RdSgpO3QgaW5zdGFuY2VvZiBlLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBuPXR5cGVvZiB0LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZj09InN0cmluZyJ9Y2F0Y2h7bj0hMX1pZihuKWU9dC5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7dD1RdShlLmRvY3VtZW50KX1yZXR1cm4gdH1mdW5jdGlvbiByZyhlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQmJih0PT09ImlucHV0IiYmKGUudHlwZT09PSJ0ZXh0Inx8ZS50eXBlPT09InNlYXJjaCJ8fGUudHlwZT09PSJ0ZWwifHxlLnR5cGU9PT0idXJsInx8ZS50eXBlPT09InBhc3N3b3JkIil8fHQ9PT0idGV4dGFyZWEifHxlLmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIil9ZnVuY3Rpb24geGsoZSl7dmFyIHQ9bHgoKSxuPWUuZm9jdXNlZEVsZW0scj1lLnNlbGVjdGlvblJhbmdlO2lmKHQhPT1uJiZuJiZuLm93bmVyRG9jdW1lbnQmJml4KG4ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbikpe2lmKHIhPT1udWxsJiZyZyhuKSl7aWYodD1yLnN0YXJ0LGU9ci5lbmQsZT09PXZvaWQgMCYmKGU9dCksInNlbGVjdGlvblN0YXJ0ImluIG4pbi5zZWxlY3Rpb25TdGFydD10LG4uc2VsZWN0aW9uRW5kPU1hdGgubWluKGUsbi52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYoZT0odD1uLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmdC5kZWZhdWx0Vmlld3x8d2luZG93LGUuZ2V0U2VsZWN0aW9uKXtlPWUuZ2V0U2VsZWN0aW9uKCk7dmFyIG89bi50ZXh0Q29udGVudC5sZW5ndGgsaT1NYXRoLm1pbihyLnN0YXJ0LG8pO3I9ci5lbmQ9PT12b2lkIDA/aTpNYXRoLm1pbihyLmVuZCxvKSwhZS5leHRlbmQmJmk+ciYmKG89cixyPWksaT1vKSxvPVN2KG4saSk7dmFyIGw9U3YobixyKTtvJiZsJiYoZS5yYW5nZUNvdW50IT09MXx8ZS5hbmNob3JOb2RlIT09by5ub2RlfHxlLmFuY2hvck9mZnNldCE9PW8ub2Zmc2V0fHxlLmZvY3VzTm9kZSE9PWwubm9kZXx8ZS5mb2N1c09mZnNldCE9PWwub2Zmc2V0KSYmKHQ9dC5jcmVhdGVSYW5nZSgpLHQuc2V0U3RhcnQoby5ub2RlLG8ub2Zmc2V0KSxlLnJlbW92ZUFsbFJhbmdlcygpLGk+cj8oZS5hZGRSYW5nZSh0KSxlLmV4dGVuZChsLm5vZGUsbC5vZmZzZXQpKToodC5zZXRFbmQobC5ub2RlLGwub2Zmc2V0KSxlLmFkZFJhbmdlKHQpKSl9fWZvcih0PVtdLGU9bjtlPWUucGFyZW50Tm9kZTspZS5ub2RlVHlwZT09PTEmJnQucHVzaCh7ZWxlbWVudDplLGxlZnQ6ZS5zY3JvbGxMZWZ0LHRvcDplLnNjcm9sbFRvcH0pO2Zvcih0eXBlb2Ygbi5mb2N1cz09ImZ1bmN0aW9uIiYmbi5mb2N1cygpLG49MDtuPHQubGVuZ3RoO24rKyllPXRbbl0sZS5lbGVtZW50LnNjcm9sbExlZnQ9ZS5sZWZ0LGUuZWxlbWVudC5zY3JvbGxUb3A9ZS50b3B9fXZhciB3az1VciYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxYaT1udWxsLGxoPW51bGwsUHM9bnVsbCxzaD0hMTtmdW5jdGlvbiBFdihlLHQsbil7dmFyIHI9bi53aW5kb3c9PT1uP24uZG9jdW1lbnQ6bi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQ7c2h8fFhpPT1udWxsfHxYaSE9PVF1KHIpfHwocj1YaSwic2VsZWN0aW9uU3RhcnQiaW4gciYmcmcocik/cj17c3RhcnQ6ci5zZWxlY3Rpb25TdGFydCxlbmQ6ci5zZWxlY3Rpb25FbmR9OihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxyPXthbmNob3JOb2RlOnIuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9KSxQcyYmb2EoUHMscil8fChQcz1yLHI9cmMobGgsIm9uU2VsZWN0IiksMDxyLmxlbmd0aCYmKHQ9bmV3IGVnKCJvblNlbGVjdCIsInNlbGVjdCIsbnVsbCx0LG4pLGUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6cn0pLHQudGFyZ2V0PVhpKSkpfWZ1bmN0aW9uIG91KGUsdCl7dmFyIG49e307cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJDYXNlKCksblsiV2Via2l0IitlXT0id2Via2l0Iit0LG5bIk1veiIrZV09Im1veiIrdCxufXZhciBRaT17YW5pbWF0aW9uZW5kOm91KCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246b3UoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0Om91KCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6b3UoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LHJmPXt9LHN4PXt9O1VyJiYoc3g9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBRaS5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBRaS5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBRaS5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgUWkudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtmdW5jdGlvbiBaYyhlKXtpZihyZltlXSlyZXR1cm4gcmZbZV07aWYoIVFpW2VdKXJldHVybiBlO3ZhciB0PVFpW2VdLG47Zm9yKG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pJiZuIGluIHN4KXJldHVybiByZltlXT10W25dO3JldHVybiBlfXZhciBheD1aYygiYW5pbWF0aW9uZW5kIiksdXg9WmMoImFuaW1hdGlvbml0ZXJhdGlvbiIpLGN4PVpjKCJhbmltYXRpb25zdGFydCIpLGR4PVpjKCJ0cmFuc2l0aW9uZW5kIiksZng9bmV3IE1hcCxDdj0iYWJvcnQgYXV4Q2xpY2sgY2FuY2VsIGNhblBsYXkgY2FuUGxheVRocm91Z2ggY2xpY2sgY2xvc2UgY29udGV4dE1lbnUgY29weSBjdXQgZHJhZyBkcmFnRW5kIGRyYWdFbnRlciBkcmFnRXhpdCBkcmFnTGVhdmUgZHJhZ092ZXIgZHJhZ1N0YXJ0IGRyb3AgZHVyYXRpb25DaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgZ290UG9pbnRlckNhcHR1cmUgaW5wdXQgaW52YWxpZCBrZXlEb3duIGtleVByZXNzIGtleVVwIGxvYWQgbG9hZGVkRGF0YSBsb2FkZWRNZXRhZGF0YSBsb2FkU3RhcnQgbG9zdFBvaW50ZXJDYXB0dXJlIG1vdXNlRG93biBtb3VzZU1vdmUgbW91c2VPdXQgbW91c2VPdmVyIG1vdXNlVXAgcGFzdGUgcGF1c2UgcGxheSBwbGF5aW5nIHBvaW50ZXJDYW5jZWwgcG9pbnRlckRvd24gcG9pbnRlck1vdmUgcG9pbnRlck91dCBwb2ludGVyT3ZlciBwb2ludGVyVXAgcHJvZ3Jlc3MgcmF0ZUNoYW5nZSByZXNldCByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdWJtaXQgc3VzcGVuZCB0aW1lVXBkYXRlIHRvdWNoQ2FuY2VsIHRvdWNoRW5kIHRvdWNoU3RhcnQgdm9sdW1lQ2hhbmdlIHNjcm9sbCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWwiLnNwbGl0KCIgIik7ZnVuY3Rpb24gQm8oZSx0KXtmeC5zZXQoZSx0KSxfaSh0LFtlXSl9Zm9yKHZhciBvZj0wO29mPEN2Lmxlbmd0aDtvZisrKXt2YXIgbGY9Q3Zbb2ZdLF9rPWxmLnRvTG93ZXJDYXNlKCksU2s9bGZbMF0udG9VcHBlckNhc2UoKStsZi5zbGljZSgxKTtCbyhfaywib24iK1NrKX1CbyhheCwib25BbmltYXRpb25FbmQiKTtCbyh1eCwib25BbmltYXRpb25JdGVyYXRpb24iKTtCbyhjeCwib25BbmltYXRpb25TdGFydCIpO0JvKCJkYmxjbGljayIsIm9uRG91YmxlQ2xpY2siKTtCbygiZm9jdXNpbiIsIm9uRm9jdXMiKTtCbygiZm9jdXNvdXQiLCJvbkJsdXIiKTtCbyhkeCwib25UcmFuc2l0aW9uRW5kIik7eGwoIm9uTW91c2VFbnRlciIsWyJtb3VzZW91dCIsIm1vdXNlb3ZlciJdKTt4bCgib25Nb3VzZUxlYXZlIixbIm1vdXNlb3V0IiwibW91c2VvdmVyIl0pO3hsKCJvblBvaW50ZXJFbnRlciIsWyJwb2ludGVyb3V0IiwicG9pbnRlcm92ZXIiXSk7eGwoIm9uUG9pbnRlckxlYXZlIixbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdKTtfaSgib25DaGFuZ2UiLCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKSk7X2koIm9uU2VsZWN0IiwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlIi5zcGxpdCgiICIpKTtfaSgib25CZWZvcmVJbnB1dCIsWyJjb21wb3NpdGlvbmVuZCIsImtleXByZXNzIiwidGV4dElucHV0IiwicGFzdGUiXSk7X2koIm9uQ29tcG9zaXRpb25FbmQiLCJjb21wb3NpdGlvbmVuZCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7X2koIm9uQ29tcG9zaXRpb25TdGFydCIsImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO19pKCJvbkNvbXBvc2l0aW9uVXBkYXRlIiwiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO3ZhciBTcz0iYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmciLnNwbGl0KCIgIiksRWs9bmV3IFNldCgiY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgdG9nZ2xlIi5zcGxpdCgiICIpLmNvbmNhdChTcykpO2Z1bmN0aW9uICR2KGUsdCxuKXt2YXIgcj1lLnR5cGV8fCJ1bmtub3duLWV2ZW50IjtlLmN1cnJlbnRUYXJnZXQ9bixfJChyLHQsdm9pZCAwLGUpLGUuY3VycmVudFRhcmdldD1udWxsfWZ1bmN0aW9uIGh4KGUsdCl7dD0odCY0KSE9PTA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0sbz1yLmV2ZW50O3I9ci5saXN0ZW5lcnM7ZTp7dmFyIGk9dm9pZCAwO2lmKHQpZm9yKHZhciBsPXIubGVuZ3RoLTE7MDw9bDtsLS0pe3ZhciBzPXJbbF0sYT1zLmluc3RhbmNlLHU9cy5jdXJyZW50VGFyZ2V0O2lmKHM9cy5saXN0ZW5lcixhIT09aSYmby5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7JHYobyxzLHUpLGk9YX1lbHNlIGZvcihsPTA7bDxyLmxlbmd0aDtsKyspe2lmKHM9cltsXSxhPXMuaW5zdGFuY2UsdT1zLmN1cnJlbnRUYXJnZXQscz1zLmxpc3RlbmVyLGEhPT1pJiZvLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgZTskdihvLHMsdSksaT1hfX19aWYoWnUpdGhyb3cgZT1uaCxadT0hMSxuaD1udWxsLGV9ZnVuY3Rpb24gVWUoZSx0KXt2YXIgbj10W2ZoXTtuPT09dm9pZCAwJiYobj10W2ZoXT1uZXcgU2V0KTt2YXIgcj1lKyJfX2J1YmJsZSI7bi5oYXMocil8fChweCh0LGUsMiwhMSksbi5hZGQocikpfWZ1bmN0aW9uIHNmKGUsdCxuKXt2YXIgcj0wO3QmJihyfD00KSxweChuLGUscix0KX12YXIgaXU9Il9yZWFjdExpc3RlbmluZyIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7ZnVuY3Rpb24gaWEoZSl7aWYoIWVbaXVdKXtlW2l1XT0hMCxfMS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24hPT0ic2VsZWN0aW9uY2hhbmdlIiYmKEVrLmhhcyhuKXx8c2YobiwhMSxlKSxzZihuLCEwLGUpKX0pO3ZhciB0PWUubm9kZVR5cGU9PT05P2U6ZS5vd25lckRvY3VtZW50O3Q9PT1udWxsfHx0W2l1XXx8KHRbaXVdPSEwLHNmKCJzZWxlY3Rpb25jaGFuZ2UiLCExLHQpKX19ZnVuY3Rpb24gcHgoZSx0LG4scil7c3dpdGNoKEoxKHQpKXtjYXNlIDE6dmFyIG89SSQ7YnJlYWs7Y2FzZSA0Om89aiQ7YnJlYWs7ZGVmYXVsdDpvPVpwfW49by5iaW5kKG51bGwsdCxuLGUpLG89dm9pZCAwLCF0aHx8dCE9PSJ0b3VjaHN0YXJ0IiYmdCE9PSJ0b3VjaG1vdmUiJiZ0IT09IndoZWVsInx8KG89ITApLHI/byE9PXZvaWQgMD9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLHtjYXB0dXJlOiEwLHBhc3NpdmU6b30pOmUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITApOm8hPT12b2lkIDA/ZS5hZGRFdmVudExpc3RlbmVyKHQsbix7cGFzc2l2ZTpvfSk6ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMSl9ZnVuY3Rpb24gYWYoZSx0LG4scixvKXt2YXIgaT1yO2lmKCEodCYxKSYmISh0JjIpJiZyIT09bnVsbCllOmZvcig7Oyl7aWYocj09PW51bGwpcmV0dXJuO3ZhciBsPXIudGFnO2lmKGw9PT0zfHxsPT09NCl7dmFyIHM9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztpZihzPT09b3x8cy5ub2RlVHlwZT09PTgmJnMucGFyZW50Tm9kZT09PW8pYnJlYWs7aWYobD09PTQpZm9yKGw9ci5yZXR1cm47bCE9PW51bGw7KXt2YXIgYT1sLnRhZztpZigoYT09PTN8fGE9PT00KSYmKGE9bC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxhPT09b3x8YS5ub2RlVHlwZT09PTgmJmEucGFyZW50Tm9kZT09PW8pKXJldHVybjtsPWwucmV0dXJufWZvcig7cyE9PW51bGw7KXtpZihsPXFvKHMpLGw9PT1udWxsKXJldHVybjtpZihhPWwudGFnLGE9PT01fHxhPT09Nil7cj1pPWw7Y29udGludWUgZX1zPXMucGFyZW50Tm9kZX19cj1yLnJldHVybn1JMShmdW5jdGlvbigpe3ZhciB1PWksYz1ZcChuKSxkPVtdO2U6e3ZhciBmPWZ4LmdldChlKTtpZihmIT09dm9pZCAwKXt2YXIgaD1lZyxnPWU7c3dpdGNoKGUpe2Nhc2Uia2V5cHJlc3MiOmlmKE11KG4pPT09MClicmVhayBlO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6aD1xJDticmVhaztjYXNlImZvY3VzaW4iOmc9ImZvY3VzIixoPWVmO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOmc9ImJsdXIiLGg9ZWY7YnJlYWs7Y2FzZSJiZWZvcmVibHVyIjpjYXNlImFmdGVyYmx1ciI6aD1lZjticmVhaztjYXNlImNsaWNrIjppZihuLmJ1dHRvbj09PTIpYnJlYWsgZTtjYXNlImF1eGNsaWNrIjpjYXNlImRibGNsaWNrIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZW1vdmUiOmNhc2UibW91c2V1cCI6Y2FzZSJtb3VzZW91dCI6Y2FzZSJtb3VzZW92ZXIiOmNhc2UiY29udGV4dG1lbnUiOmg9aHY7YnJlYWs7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbmQiOmNhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdleGl0IjpjYXNlImRyYWdsZWF2ZSI6Y2FzZSJkcmFnb3ZlciI6Y2FzZSJkcmFnc3RhcnQiOmNhc2UiZHJvcCI6aD1CJDticmVhaztjYXNlInRvdWNoY2FuY2VsIjpjYXNlInRvdWNoZW5kIjpjYXNlInRvdWNobW92ZSI6Y2FzZSJ0b3VjaHN0YXJ0IjpoPW5rO2JyZWFrO2Nhc2UgYXg6Y2FzZSB1eDpjYXNlIGN4Omg9ViQ7YnJlYWs7Y2FzZSBkeDpoPW9rO2JyZWFrO2Nhc2Uic2Nyb2xsIjpoPXokO2JyZWFrO2Nhc2Uid2hlZWwiOmg9bGs7YnJlYWs7Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJwYXN0ZSI6aD1LJDticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJwb2ludGVyY2FuY2VsIjpjYXNlInBvaW50ZXJkb3duIjpjYXNlInBvaW50ZXJtb3ZlIjpjYXNlInBvaW50ZXJvdXQiOmNhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcnVwIjpoPWd2fXZhciBtPSh0JjQpIT09MCxfPSFtJiZlPT09InNjcm9sbCIsdj1tP2YhPT1udWxsP2YrIkNhcHR1cmUiOm51bGw6ZjttPVtdO2Zvcih2YXIgeT11LHg7eSE9PW51bGw7KXt4PXk7dmFyIFM9eC5zdGF0ZU5vZGU7aWYoeC50YWc9PT01JiZTIT09bnVsbCYmKHg9Uyx2IT09bnVsbCYmKFM9cXMoeSx2KSxTIT1udWxsJiZtLnB1c2gobGEoeSxTLHgpKSkpLF8pYnJlYWs7eT15LnJldHVybn0wPG0ubGVuZ3RoJiYoZj1uZXcgaChmLGcsbnVsbCxuLGMpLGQucHVzaCh7ZXZlbnQ6ZixsaXN0ZW5lcnM6bX0pKX19aWYoISh0JjcpKXtlOntpZihmPWU9PT0ibW91c2VvdmVyInx8ZT09PSJwb2ludGVyb3ZlciIsaD1lPT09Im1vdXNlb3V0Inx8ZT09PSJwb2ludGVyb3V0IixmJiZuIT09cWYmJihnPW4ucmVsYXRlZFRhcmdldHx8bi5mcm9tRWxlbWVudCkmJihxbyhnKXx8Z1tWcl0pKWJyZWFrIGU7aWYoKGh8fGYpJiYoZj1jLndpbmRvdz09PWM/YzooZj1jLm93bmVyRG9jdW1lbnQpP2YuZGVmYXVsdFZpZXd8fGYucGFyZW50V2luZG93OndpbmRvdyxoPyhnPW4ucmVsYXRlZFRhcmdldHx8bi50b0VsZW1lbnQsaD11LGc9Zz9xbyhnKTpudWxsLGchPT1udWxsJiYoXz1TaShnKSxnIT09X3x8Zy50YWchPT01JiZnLnRhZyE9PTYpJiYoZz1udWxsKSk6KGg9bnVsbCxnPXUpLGghPT1nKSl7aWYobT1odixTPSJvbk1vdXNlTGVhdmUiLHY9Im9uTW91c2VFbnRlciIseT0ibW91c2UiLChlPT09InBvaW50ZXJvdXQifHxlPT09InBvaW50ZXJvdmVyIikmJihtPWd2LFM9Im9uUG9pbnRlckxlYXZlIix2PSJvblBvaW50ZXJFbnRlciIseT0icG9pbnRlciIpLF89aD09bnVsbD9mOkppKGgpLHg9Zz09bnVsbD9mOkppKGcpLGY9bmV3IG0oUyx5KyJsZWF2ZSIsaCxuLGMpLGYudGFyZ2V0PV8sZi5yZWxhdGVkVGFyZ2V0PXgsUz1udWxsLHFvKGMpPT09dSYmKG09bmV3IG0odix5KyJlbnRlciIsZyxuLGMpLG0udGFyZ2V0PXgsbS5yZWxhdGVkVGFyZ2V0PV8sUz1tKSxfPVMsaCYmZyl0Ontmb3IobT1oLHY9Zyx5PTAseD1tO3g7eD1MaSh4KSl5Kys7Zm9yKHg9MCxTPXY7UztTPUxpKFMpKXgrKztmb3IoOzA8eS14OyltPUxpKG0pLHktLTtmb3IoOzA8eC15Oyl2PUxpKHYpLHgtLTtmb3IoO3ktLTspe2lmKG09PT12fHx2IT09bnVsbCYmbT09PXYuYWx0ZXJuYXRlKWJyZWFrIHQ7bT1MaShtKSx2PUxpKHYpfW09bnVsbH1lbHNlIG09bnVsbDtoIT09bnVsbCYma3YoZCxmLGgsbSwhMSksZyE9PW51bGwmJl8hPT1udWxsJiZrdihkLF8sZyxtLCEwKX19ZTp7aWYoZj11P0ppKHUpOndpbmRvdyxoPWYubm9kZU5hbWUmJmYubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxoPT09InNlbGVjdCJ8fGg9PT0iaW5wdXQiJiZmLnR5cGU9PT0iZmlsZSIpdmFyIGs9aGs7ZWxzZSBpZih5dihmKSlpZihyeClrPXZrO2Vsc2V7az1nazt2YXIgYj1wa31lbHNlKGg9Zi5ub2RlTmFtZSkmJmgudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJihmLnR5cGU9PT0iY2hlY2tib3gifHxmLnR5cGU9PT0icmFkaW8iKSYmKGs9bWspO2lmKGsmJihrPWsoZSx1KSkpe254KGQsayxuLGMpO2JyZWFrIGV9YiYmYihlLGYsdSksZT09PSJmb2N1c291dCImJihiPWYuX3dyYXBwZXJTdGF0ZSkmJmIuY29udHJvbGxlZCYmZi50eXBlPT09Im51bWJlciImJllmKGYsIm51bWJlciIsZi52YWx1ZSl9c3dpdGNoKGI9dT9KaSh1KTp3aW5kb3csZSl7Y2FzZSJmb2N1c2luIjooeXYoYil8fGIuY29udGVudEVkaXRhYmxlPT09InRydWUiKSYmKFhpPWIsbGg9dSxQcz1udWxsKTticmVhaztjYXNlImZvY3Vzb3V0IjpQcz1saD1YaT1udWxsO2JyZWFrO2Nhc2UibW91c2Vkb3duIjpzaD0hMDticmVhaztjYXNlImNvbnRleHRtZW51IjpjYXNlIm1vdXNldXAiOmNhc2UiZHJhZ2VuZCI6c2g9ITEsRXYoZCxuLGMpO2JyZWFrO2Nhc2Uic2VsZWN0aW9uY2hhbmdlIjppZih3aylicmVhaztjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOkV2KGQsbixjKX12YXIgVDtpZihuZyllOntzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbnN0YXJ0Ijp2YXIgTj0ib25Db21wb3NpdGlvblN0YXJ0IjticmVhayBlO2Nhc2UiY29tcG9zaXRpb25lbmQiOk49Im9uQ29tcG9zaXRpb25FbmQiO2JyZWFrIGU7Y2FzZSJjb21wb3NpdGlvbnVwZGF0ZSI6Tj0ib25Db21wb3NpdGlvblVwZGF0ZSI7YnJlYWsgZX1OPXZvaWQgMH1lbHNlIFlpP2V4KGUsbikmJihOPSJvbkNvbXBvc2l0aW9uRW5kIik6ZT09PSJrZXlkb3duIiYmbi5rZXlDb2RlPT09MjI5JiYoTj0ib25Db21wb3NpdGlvblN0YXJ0Iik7TiYmKHExJiZuLmxvY2FsZSE9PSJrbyImJihZaXx8TiE9PSJvbkNvbXBvc2l0aW9uU3RhcnQiP049PT0ib25Db21wb3NpdGlvbkVuZCImJllpJiYoVD1aMSgpKToobW89YyxxcD0idmFsdWUiaW4gbW8/bW8udmFsdWU6bW8udGV4dENvbnRlbnQsWWk9ITApKSxiPXJjKHUsTiksMDxiLmxlbmd0aCYmKE49bmV3IHB2KE4sZSxudWxsLG4sYyksZC5wdXNoKHtldmVudDpOLGxpc3RlbmVyczpifSksVD9OLmRhdGE9VDooVD10eChuKSxUIT09bnVsbCYmKE4uZGF0YT1UKSkpKSwoVD1haz91ayhlLG4pOmNrKGUsbikpJiYodT1yYyh1LCJvbkJlZm9yZUlucHV0IiksMDx1Lmxlbmd0aCYmKGM9bmV3IHB2KCJvbkJlZm9yZUlucHV0IiwiYmVmb3JlaW5wdXQiLG51bGwsbixjKSxkLnB1c2goe2V2ZW50OmMsbGlzdGVuZXJzOnV9KSxjLmRhdGE9VCkpfWh4KGQsdCl9KX1mdW5jdGlvbiBsYShlLHQsbil7cmV0dXJue2luc3RhbmNlOmUsbGlzdGVuZXI6dCxjdXJyZW50VGFyZ2V0Om59fWZ1bmN0aW9uIHJjKGUsdCl7Zm9yKHZhciBuPXQrIkNhcHR1cmUiLHI9W107ZSE9PW51bGw7KXt2YXIgbz1lLGk9by5zdGF0ZU5vZGU7by50YWc9PT01JiZpIT09bnVsbCYmKG89aSxpPXFzKGUsbiksaSE9bnVsbCYmci51bnNoaWZ0KGxhKGUsaSxvKSksaT1xcyhlLHQpLGkhPW51bGwmJnIucHVzaChsYShlLGksbykpKSxlPWUucmV0dXJufXJldHVybiByfWZ1bmN0aW9uIExpKGUpe2lmKGU9PT1udWxsKXJldHVybiBudWxsO2RvIGU9ZS5yZXR1cm47d2hpbGUoZSYmZS50YWchPT01KTtyZXR1cm4gZXx8bnVsbH1mdW5jdGlvbiBrdihlLHQsbixyLG8pe2Zvcih2YXIgaT10Ll9yZWFjdE5hbWUsbD1bXTtuIT09bnVsbCYmbiE9PXI7KXt2YXIgcz1uLGE9cy5hbHRlcm5hdGUsdT1zLnN0YXRlTm9kZTtpZihhIT09bnVsbCYmYT09PXIpYnJlYWs7cy50YWc9PT01JiZ1IT09bnVsbCYmKHM9dSxvPyhhPXFzKG4saSksYSE9bnVsbCYmbC51bnNoaWZ0KGxhKG4sYSxzKSkpOm98fChhPXFzKG4saSksYSE9bnVsbCYmbC5wdXNoKGxhKG4sYSxzKSkpKSxuPW4ucmV0dXJufWwubGVuZ3RoIT09MCYmZS5wdXNoKHtldmVudDp0LGxpc3RlbmVyczpsfSl9dmFyIENrPS9cclxuPy9nLCRrPS9cdTAwMDB8XHVGRkZEL2c7ZnVuY3Rpb24gVHYoZSl7cmV0dXJuKHR5cGVvZiBlPT0ic3RyaW5nIj9lOiIiK2UpLnJlcGxhY2UoQ2ssYApgKS5yZXBsYWNlKCRrLCIiKX1mdW5jdGlvbiBsdShlLHQsbil7aWYodD1Udih0KSxUdihlKSE9PXQmJm4pdGhyb3cgRXJyb3IoVSg0MjUpKX1mdW5jdGlvbiBvYygpe312YXIgYWg9bnVsbCx1aD1udWxsO2Z1bmN0aW9uIGNoKGUsdCl7cmV0dXJuIGU9PT0idGV4dGFyZWEifHxlPT09Im5vc2NyaXB0Inx8dHlwZW9mIHQuY2hpbGRyZW49PSJzdHJpbmcifHx0eXBlb2YgdC5jaGlsZHJlbj09Im51bWJlciJ8fHR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPT0ib2JqZWN0IiYmdC5kYW5nZXJvdXNseVNldElubmVySFRNTCE9PW51bGwmJnQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sIT1udWxsfXZhciBkaD10eXBlb2Ygc2V0VGltZW91dD09ImZ1bmN0aW9uIj9zZXRUaW1lb3V0OnZvaWQgMCxraz10eXBlb2YgY2xlYXJUaW1lb3V0PT0iZnVuY3Rpb24iP2NsZWFyVGltZW91dDp2b2lkIDAsYnY9dHlwZW9mIFByb21pc2U9PSJmdW5jdGlvbiI/UHJvbWlzZTp2b2lkIDAsVGs9dHlwZW9mIHF1ZXVlTWljcm90YXNrPT0iZnVuY3Rpb24iP3F1ZXVlTWljcm90YXNrOnR5cGVvZiBidjwidSI/ZnVuY3Rpb24oZSl7cmV0dXJuIGJ2LnJlc29sdmUobnVsbCkudGhlbihlKS5jYXRjaChiayl9OmRoO2Z1bmN0aW9uIGJrKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9ZnVuY3Rpb24gdWYoZSx0KXt2YXIgbj10LHI9MDtkb3t2YXIgbz1uLm5leHRTaWJsaW5nO2lmKGUucmVtb3ZlQ2hpbGQobiksbyYmby5ub2RlVHlwZT09PTgpaWYobj1vLmRhdGEsbj09PSIvJCIpe2lmKHI9PT0wKXtlLnJlbW92ZUNoaWxkKG8pLG5hKHQpO3JldHVybn1yLS19ZWxzZSBuIT09IiQiJiZuIT09IiQ/IiYmbiE9PSIkISJ8fHIrKztuPW99d2hpbGUobik7bmEodCl9ZnVuY3Rpb24gRW8oZSl7Zm9yKDtlIT1udWxsO2U9ZS5uZXh0U2libGluZyl7dmFyIHQ9ZS5ub2RlVHlwZTtpZih0PT09MXx8dD09PTMpYnJlYWs7aWYodD09PTgpe2lmKHQ9ZS5kYXRhLHQ9PT0iJCJ8fHQ9PT0iJCEifHx0PT09IiQ/IilicmVhaztpZih0PT09Ii8kIilyZXR1cm4gbnVsbH19cmV0dXJuIGV9ZnVuY3Rpb24gTnYoZSl7ZT1lLnByZXZpb3VzU2libGluZztmb3IodmFyIHQ9MDtlOyl7aWYoZS5ub2RlVHlwZT09PTgpe3ZhciBuPWUuZGF0YTtpZihuPT09IiQifHxuPT09IiQhInx8bj09PSIkPyIpe2lmKHQ9PT0wKXJldHVybiBlO3QtLX1lbHNlIG49PT0iLyQiJiZ0Kyt9ZT1lLnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH12YXIgSWw9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksaHI9Il9fcmVhY3RGaWJlciQiK0lsLHNhPSJfX3JlYWN0UHJvcHMkIitJbCxWcj0iX19yZWFjdENvbnRhaW5lciQiK0lsLGZoPSJfX3JlYWN0RXZlbnRzJCIrSWwsTms9Il9fcmVhY3RMaXN0ZW5lcnMkIitJbCxSaz0iX19yZWFjdEhhbmRsZXMkIitJbDtmdW5jdGlvbiBxbyhlKXt2YXIgdD1lW2hyXTtpZih0KXJldHVybiB0O2Zvcih2YXIgbj1lLnBhcmVudE5vZGU7bjspe2lmKHQ9bltWcl18fG5baHJdKXtpZihuPXQuYWx0ZXJuYXRlLHQuY2hpbGQhPT1udWxsfHxuIT09bnVsbCYmbi5jaGlsZCE9PW51bGwpZm9yKGU9TnYoZSk7ZSE9PW51bGw7KXtpZihuPWVbaHJdKXJldHVybiBuO2U9TnYoZSl9cmV0dXJuIHR9ZT1uLG49ZS5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIE1hKGUpe3JldHVybiBlPWVbaHJdfHxlW1ZyXSwhZXx8ZS50YWchPT01JiZlLnRhZyE9PTYmJmUudGFnIT09MTMmJmUudGFnIT09Mz9udWxsOmV9ZnVuY3Rpb24gSmkoZSl7aWYoZS50YWc9PT01fHxlLnRhZz09PTYpcmV0dXJuIGUuc3RhdGVOb2RlO3Rocm93IEVycm9yKFUoMzMpKX1mdW5jdGlvbiBxYyhlKXtyZXR1cm4gZVtzYV18fG51bGx9dmFyIGhoPVtdLFppPS0xO2Z1bmN0aW9uIFdvKGUpe3JldHVybntjdXJyZW50OmV9fWZ1bmN0aW9uIEdlKGUpezA+Wml8fChlLmN1cnJlbnQ9aGhbWmldLGhoW1ppXT1udWxsLFppLS0pfWZ1bmN0aW9uIHplKGUsdCl7WmkrKyxoaFtaaV09ZS5jdXJyZW50LGUuY3VycmVudD10fXZhciBPbz17fSxHdD1XbyhPbykscG49V28oITEpLHVpPU9vO2Z1bmN0aW9uIHdsKGUsdCl7dmFyIG49ZS50eXBlLmNvbnRleHRUeXBlcztpZighbilyZXR1cm4gT287dmFyIHI9ZS5zdGF0ZU5vZGU7aWYociYmci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PT09dClyZXR1cm4gci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDt2YXIgbz17fSxpO2ZvcihpIGluIG4pb1tpXT10W2ldO3JldHVybiByJiYoZT1lLnN0YXRlTm9kZSxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9dCxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PW8pLG99ZnVuY3Rpb24gZ24oZSl7cmV0dXJuIGU9ZS5jaGlsZENvbnRleHRUeXBlcyxlIT1udWxsfWZ1bmN0aW9uIGljKCl7R2UocG4pLEdlKEd0KX1mdW5jdGlvbiBSdihlLHQsbil7aWYoR3QuY3VycmVudCE9PU9vKXRocm93IEVycm9yKFUoMTY4KSk7emUoR3QsdCksemUocG4sbil9ZnVuY3Rpb24gZ3goZSx0LG4pe3ZhciByPWUuc3RhdGVOb2RlO2lmKHQ9dC5jaGlsZENvbnRleHRUeXBlcyx0eXBlb2Ygci5nZXRDaGlsZENvbnRleHQhPSJmdW5jdGlvbiIpcmV0dXJuIG47cj1yLmdldENoaWxkQ29udGV4dCgpO2Zvcih2YXIgbyBpbiByKWlmKCEobyBpbiB0KSl0aHJvdyBFcnJvcihVKDEwOCxwJChlKXx8IlVua25vd24iLG8pKTtyZXR1cm4gcnQoe30sbixyKX1mdW5jdGlvbiBsYyhlKXtyZXR1cm4gZT0oZT1lLnN0YXRlTm9kZSkmJmUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHR8fE9vLHVpPUd0LmN1cnJlbnQsemUoR3QsZSksemUocG4scG4uY3VycmVudCksITB9ZnVuY3Rpb24gUHYoZSx0LG4pe3ZhciByPWUuc3RhdGVOb2RlO2lmKCFyKXRocm93IEVycm9yKFUoMTY5KSk7bj8oZT1neChlLHQsdWkpLHIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ9ZSxHZShwbiksR2UoR3QpLHplKEd0LGUpKTpHZShwbiksemUocG4sbil9dmFyIElyPW51bGwsZWQ9ITEsY2Y9ITE7ZnVuY3Rpb24gbXgoZSl7SXI9PT1udWxsP0lyPVtlXTpJci5wdXNoKGUpfWZ1bmN0aW9uIFBrKGUpe2VkPSEwLG14KGUpfWZ1bmN0aW9uIFVvKCl7aWYoIWNmJiZJciE9PW51bGwpe2NmPSEwO3ZhciBlPTAsdD1BZTt0cnl7dmFyIG49SXI7Zm9yKEFlPTE7ZTxuLmxlbmd0aDtlKyspe3ZhciByPW5bZV07ZG8gcj1yKCEwKTt3aGlsZShyIT09bnVsbCl9SXI9bnVsbCxlZD0hMX1jYXRjaChvKXt0aHJvdyBJciE9PW51bGwmJihJcj1Jci5zbGljZShlKzEpKSxCMShYcCxVbyksb31maW5hbGx5e0FlPXQsY2Y9ITF9fXJldHVybiBudWxsfXZhciBxaT1bXSxlbD0wLHNjPW51bGwsYWM9MCxMbj1bXSxEbj0wLGNpPW51bGwsRnI9MSxCcj0iIjtmdW5jdGlvbiBYbyhlLHQpe3FpW2VsKytdPWFjLHFpW2VsKytdPXNjLHNjPWUsYWM9dH1mdW5jdGlvbiB2eChlLHQsbil7TG5bRG4rK109RnIsTG5bRG4rK109QnIsTG5bRG4rK109Y2ksY2k9ZTt2YXIgcj1GcjtlPUJyO3ZhciBvPTMyLXJyKHIpLTE7ciY9figxPDxvKSxuKz0xO3ZhciBpPTMyLXJyKHQpK287aWYoMzA8aSl7dmFyIGw9by1vJTU7aT0ociYoMTw8bCktMSkudG9TdHJpbmcoMzIpLHI+Pj1sLG8tPWwsRnI9MTw8MzItcnIodCkrb3xuPDxvfHIsQnI9aStlfWVsc2UgRnI9MTw8aXxuPDxvfHIsQnI9ZX1mdW5jdGlvbiBvZyhlKXtlLnJldHVybiE9PW51bGwmJihYbyhlLDEpLHZ4KGUsMSwwKSl9ZnVuY3Rpb24gaWcoZSl7Zm9yKDtlPT09c2M7KXNjPXFpWy0tZWxdLHFpW2VsXT1udWxsLGFjPXFpWy0tZWxdLHFpW2VsXT1udWxsO2Zvcig7ZT09PWNpOyljaT1MblstLURuXSxMbltEbl09bnVsbCxCcj1MblstLURuXSxMbltEbl09bnVsbCxGcj1MblstLURuXSxMbltEbl09bnVsbH12YXIgQ249bnVsbCxFbj1udWxsLFllPSExLGVyPW51bGw7ZnVuY3Rpb24geXgoZSx0KXt2YXIgbj16big1LG51bGwsbnVsbCwwKTtuLmVsZW1lbnRUeXBlPSJERUxFVEVEIixuLnN0YXRlTm9kZT10LG4ucmV0dXJuPWUsdD1lLmRlbGV0aW9ucyx0PT09bnVsbD8oZS5kZWxldGlvbnM9W25dLGUuZmxhZ3N8PTE2KTp0LnB1c2gobil9ZnVuY3Rpb24gT3YoZSx0KXtzd2l0Y2goZS50YWcpe2Nhc2UgNTp2YXIgbj1lLnR5cGU7cmV0dXJuIHQ9dC5ub2RlVHlwZSE9PTF8fG4udG9Mb3dlckNhc2UoKSE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9udWxsOnQsdCE9PW51bGw/KGUuc3RhdGVOb2RlPXQsQ249ZSxFbj1Fbyh0LmZpcnN0Q2hpbGQpLCEwKTohMTtjYXNlIDY6cmV0dXJuIHQ9ZS5wZW5kaW5nUHJvcHM9PT0iInx8dC5ub2RlVHlwZSE9PTM/bnVsbDp0LHQhPT1udWxsPyhlLnN0YXRlTm9kZT10LENuPWUsRW49bnVsbCwhMCk6ITE7Y2FzZSAxMzpyZXR1cm4gdD10Lm5vZGVUeXBlIT09OD9udWxsOnQsdCE9PW51bGw/KG49Y2khPT1udWxsP3tpZDpGcixvdmVyZmxvdzpCcn06bnVsbCxlLm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6dCx0cmVlQ29udGV4dDpuLHJldHJ5TGFuZToxMDczNzQxODI0fSxuPXpuKDE4LG51bGwsbnVsbCwwKSxuLnN0YXRlTm9kZT10LG4ucmV0dXJuPWUsZS5jaGlsZD1uLENuPWUsRW49bnVsbCwhMCk6ITE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gcGgoZSl7cmV0dXJuKGUubW9kZSYxKSE9PTAmJihlLmZsYWdzJjEyOCk9PT0wfWZ1bmN0aW9uIGdoKGUpe2lmKFllKXt2YXIgdD1FbjtpZih0KXt2YXIgbj10O2lmKCFPdihlLHQpKXtpZihwaChlKSl0aHJvdyBFcnJvcihVKDQxOCkpO3Q9RW8obi5uZXh0U2libGluZyk7dmFyIHI9Q247dCYmT3YoZSx0KT95eChyLG4pOihlLmZsYWdzPWUuZmxhZ3MmLTQwOTd8MixZZT0hMSxDbj1lKX19ZWxzZXtpZihwaChlKSl0aHJvdyBFcnJvcihVKDQxOCkpO2UuZmxhZ3M9ZS5mbGFncyYtNDA5N3wyLFllPSExLENuPWV9fX1mdW5jdGlvbiBBdihlKXtmb3IoZT1lLnJldHVybjtlIT09bnVsbCYmZS50YWchPT01JiZlLnRhZyE9PTMmJmUudGFnIT09MTM7KWU9ZS5yZXR1cm47Q249ZX1mdW5jdGlvbiBzdShlKXtpZihlIT09Q24pcmV0dXJuITE7aWYoIVllKXJldHVybiBBdihlKSxZZT0hMCwhMTt2YXIgdDtpZigodD1lLnRhZyE9PTMpJiYhKHQ9ZS50YWchPT01KSYmKHQ9ZS50eXBlLHQ9dCE9PSJoZWFkIiYmdCE9PSJib2R5IiYmIWNoKGUudHlwZSxlLm1lbW9pemVkUHJvcHMpKSx0JiYodD1Fbikpe2lmKHBoKGUpKXRocm93IHh4KCksRXJyb3IoVSg0MTgpKTtmb3IoO3Q7KXl4KGUsdCksdD1Fbyh0Lm5leHRTaWJsaW5nKX1pZihBdihlKSxlLnRhZz09PTEzKXtpZihlPWUubWVtb2l6ZWRTdGF0ZSxlPWUhPT1udWxsP2UuZGVoeWRyYXRlZDpudWxsLCFlKXRocm93IEVycm9yKFUoMzE3KSk7ZTp7Zm9yKGU9ZS5uZXh0U2libGluZyx0PTA7ZTspe2lmKGUubm9kZVR5cGU9PT04KXt2YXIgbj1lLmRhdGE7aWYobj09PSIvJCIpe2lmKHQ9PT0wKXtFbj1FbyhlLm5leHRTaWJsaW5nKTticmVhayBlfXQtLX1lbHNlIG4hPT0iJCImJm4hPT0iJCEiJiZuIT09IiQ/Inx8dCsrfWU9ZS5uZXh0U2libGluZ31Fbj1udWxsfX1lbHNlIEVuPUNuP0VvKGUuc3RhdGVOb2RlLm5leHRTaWJsaW5nKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIHh4KCl7Zm9yKHZhciBlPUVuO2U7KWU9RW8oZS5uZXh0U2libGluZyl9ZnVuY3Rpb24gX2woKXtFbj1Dbj1udWxsLFllPSExfWZ1bmN0aW9uIGxnKGUpe2VyPT09bnVsbD9lcj1bZV06ZXIucHVzaChlKX12YXIgT2s9UXIuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7ZnVuY3Rpb24gSm4oZSx0KXtpZihlJiZlLmRlZmF1bHRQcm9wcyl7dD1ydCh7fSx0KSxlPWUuZGVmYXVsdFByb3BzO2Zvcih2YXIgbiBpbiBlKXRbbl09PT12b2lkIDAmJih0W25dPWVbbl0pO3JldHVybiB0fXJldHVybiB0fXZhciB1Yz1XbyhudWxsKSxjYz1udWxsLHRsPW51bGwsc2c9bnVsbDtmdW5jdGlvbiBhZygpe3NnPXRsPWNjPW51bGx9ZnVuY3Rpb24gdWcoZSl7dmFyIHQ9dWMuY3VycmVudDtHZSh1YyksZS5fY3VycmVudFZhbHVlPXR9ZnVuY3Rpb24gbWgoZSx0LG4pe2Zvcig7ZSE9PW51bGw7KXt2YXIgcj1lLmFsdGVybmF0ZTtpZigoZS5jaGlsZExhbmVzJnQpIT09dD8oZS5jaGlsZExhbmVzfD10LHIhPT1udWxsJiYoci5jaGlsZExhbmVzfD10KSk6ciE9PW51bGwmJihyLmNoaWxkTGFuZXMmdCkhPT10JiYoci5jaGlsZExhbmVzfD10KSxlPT09bilicmVhaztlPWUucmV0dXJufX1mdW5jdGlvbiBmbChlLHQpe2NjPWUsc2c9dGw9bnVsbCxlPWUuZGVwZW5kZW5jaWVzLGUhPT1udWxsJiZlLmZpcnN0Q29udGV4dCE9PW51bGwmJihlLmxhbmVzJnQmJihobj0hMCksZS5maXJzdENvbnRleHQ9bnVsbCl9ZnVuY3Rpb24gV24oZSl7dmFyIHQ9ZS5fY3VycmVudFZhbHVlO2lmKHNnIT09ZSlpZihlPXtjb250ZXh0OmUsbWVtb2l6ZWRWYWx1ZTp0LG5leHQ6bnVsbH0sdGw9PT1udWxsKXtpZihjYz09PW51bGwpdGhyb3cgRXJyb3IoVSgzMDgpKTt0bD1lLGNjLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6ZX19ZWxzZSB0bD10bC5uZXh0PWU7cmV0dXJuIHR9dmFyIGVpPW51bGw7ZnVuY3Rpb24gY2coZSl7ZWk9PT1udWxsP2VpPVtlXTplaS5wdXNoKGUpfWZ1bmN0aW9uIHd4KGUsdCxuLHIpe3ZhciBvPXQuaW50ZXJsZWF2ZWQ7cmV0dXJuIG89PT1udWxsPyhuLm5leHQ9bixjZyh0KSk6KG4ubmV4dD1vLm5leHQsby5uZXh0PW4pLHQuaW50ZXJsZWF2ZWQ9bixIcihlLHIpfWZ1bmN0aW9uIEhyKGUsdCl7ZS5sYW5lc3w9dDt2YXIgbj1lLmFsdGVybmF0ZTtmb3IobiE9PW51bGwmJihuLmxhbmVzfD10KSxuPWUsZT1lLnJldHVybjtlIT09bnVsbDspZS5jaGlsZExhbmVzfD10LG49ZS5hbHRlcm5hdGUsbiE9PW51bGwmJihuLmNoaWxkTGFuZXN8PXQpLG49ZSxlPWUucmV0dXJuO3JldHVybiBuLnRhZz09PTM/bi5zdGF0ZU5vZGU6bnVsbH12YXIgY289ITE7ZnVuY3Rpb24gZGcoZSl7ZS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmUubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MH0sZWZmZWN0czpudWxsfX1mdW5jdGlvbiBfeChlLHQpe2U9ZS51cGRhdGVRdWV1ZSx0LnVwZGF0ZVF1ZXVlPT09ZSYmKHQudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6ZS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6ZS5zaGFyZWQsZWZmZWN0czplLmVmZmVjdHN9KX1mdW5jdGlvbiBXcihlLHQpe3JldHVybntldmVudFRpbWU6ZSxsYW5lOnQsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfX1mdW5jdGlvbiBDbyhlLHQsbil7dmFyIHI9ZS51cGRhdGVRdWV1ZTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtpZihyPXIuc2hhcmVkLFRlJjIpe3ZhciBvPXIucGVuZGluZztyZXR1cm4gbz09PW51bGw/dC5uZXh0PXQ6KHQubmV4dD1vLm5leHQsby5uZXh0PXQpLHIucGVuZGluZz10LEhyKGUsbil9cmV0dXJuIG89ci5pbnRlcmxlYXZlZCxvPT09bnVsbD8odC5uZXh0PXQsY2cocikpOih0Lm5leHQ9by5uZXh0LG8ubmV4dD10KSxyLmludGVybGVhdmVkPXQsSHIoZSxuKX1mdW5jdGlvbiBMdShlLHQsbil7aWYodD10LnVwZGF0ZVF1ZXVlLHQhPT1udWxsJiYodD10LnNoYXJlZCwobiY0MTk0MjQwKSE9PTApKXt2YXIgcj10LmxhbmVzO3ImPWUucGVuZGluZ0xhbmVzLG58PXIsdC5sYW5lcz1uLFFwKGUsbil9fWZ1bmN0aW9uIE12KGUsdCl7dmFyIG49ZS51cGRhdGVRdWV1ZSxyPWUuYWx0ZXJuYXRlO2lmKHIhPT1udWxsJiYocj1yLnVwZGF0ZVF1ZXVlLG49PT1yKSl7dmFyIG89bnVsbCxpPW51bGw7aWYobj1uLmZpcnN0QmFzZVVwZGF0ZSxuIT09bnVsbCl7ZG97dmFyIGw9e2V2ZW50VGltZTpuLmV2ZW50VGltZSxsYW5lOm4ubGFuZSx0YWc6bi50YWcscGF5bG9hZDpuLnBheWxvYWQsY2FsbGJhY2s6bi5jYWxsYmFjayxuZXh0Om51bGx9O2k9PT1udWxsP289aT1sOmk9aS5uZXh0PWwsbj1uLm5leHR9d2hpbGUobiE9PW51bGwpO2k9PT1udWxsP289aT10Omk9aS5uZXh0PXR9ZWxzZSBvPWk9dDtuPXtiYXNlU3RhdGU6ci5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm8sbGFzdEJhc2VVcGRhdGU6aSxzaGFyZWQ6ci5zaGFyZWQsZWZmZWN0czpyLmVmZmVjdHN9LGUudXBkYXRlUXVldWU9bjtyZXR1cm59ZT1uLmxhc3RCYXNlVXBkYXRlLGU9PT1udWxsP24uZmlyc3RCYXNlVXBkYXRlPXQ6ZS5uZXh0PXQsbi5sYXN0QmFzZVVwZGF0ZT10fWZ1bmN0aW9uIGRjKGUsdCxuLHIpe3ZhciBvPWUudXBkYXRlUXVldWU7Y289ITE7dmFyIGk9by5maXJzdEJhc2VVcGRhdGUsbD1vLmxhc3RCYXNlVXBkYXRlLHM9by5zaGFyZWQucGVuZGluZztpZihzIT09bnVsbCl7by5zaGFyZWQucGVuZGluZz1udWxsO3ZhciBhPXMsdT1hLm5leHQ7YS5uZXh0PW51bGwsbD09PW51bGw/aT11OmwubmV4dD11LGw9YTt2YXIgYz1lLmFsdGVybmF0ZTtjIT09bnVsbCYmKGM9Yy51cGRhdGVRdWV1ZSxzPWMubGFzdEJhc2VVcGRhdGUscyE9PWwmJihzPT09bnVsbD9jLmZpcnN0QmFzZVVwZGF0ZT11OnMubmV4dD11LGMubGFzdEJhc2VVcGRhdGU9YSkpfWlmKGkhPT1udWxsKXt2YXIgZD1vLmJhc2VTdGF0ZTtsPTAsYz11PWE9bnVsbCxzPWk7ZG97dmFyIGY9cy5sYW5lLGg9cy5ldmVudFRpbWU7aWYoKHImZik9PT1mKXtjIT09bnVsbCYmKGM9Yy5uZXh0PXtldmVudFRpbWU6aCxsYW5lOjAsdGFnOnMudGFnLHBheWxvYWQ6cy5wYXlsb2FkLGNhbGxiYWNrOnMuY2FsbGJhY2ssbmV4dDpudWxsfSk7ZTp7dmFyIGc9ZSxtPXM7c3dpdGNoKGY9dCxoPW4sbS50YWcpe2Nhc2UgMTppZihnPW0ucGF5bG9hZCx0eXBlb2YgZz09ImZ1bmN0aW9uIil7ZD1nLmNhbGwoaCxkLGYpO2JyZWFrIGV9ZD1nO2JyZWFrIGU7Y2FzZSAzOmcuZmxhZ3M9Zy5mbGFncyYtNjU1Mzd8MTI4O2Nhc2UgMDppZihnPW0ucGF5bG9hZCxmPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2cuY2FsbChoLGQsZik6ZyxmPT1udWxsKWJyZWFrIGU7ZD1ydCh7fSxkLGYpO2JyZWFrIGU7Y2FzZSAyOmNvPSEwfX1zLmNhbGxiYWNrIT09bnVsbCYmcy5sYW5lIT09MCYmKGUuZmxhZ3N8PTY0LGY9by5lZmZlY3RzLGY9PT1udWxsP28uZWZmZWN0cz1bc106Zi5wdXNoKHMpKX1lbHNlIGg9e2V2ZW50VGltZTpoLGxhbmU6Zix0YWc6cy50YWcscGF5bG9hZDpzLnBheWxvYWQsY2FsbGJhY2s6cy5jYWxsYmFjayxuZXh0Om51bGx9LGM9PT1udWxsPyh1PWM9aCxhPWQpOmM9Yy5uZXh0PWgsbHw9ZjtpZihzPXMubmV4dCxzPT09bnVsbCl7aWYocz1vLnNoYXJlZC5wZW5kaW5nLHM9PT1udWxsKWJyZWFrO2Y9cyxzPWYubmV4dCxmLm5leHQ9bnVsbCxvLmxhc3RCYXNlVXBkYXRlPWYsby5zaGFyZWQucGVuZGluZz1udWxsfX13aGlsZSghMCk7aWYoYz09PW51bGwmJihhPWQpLG8uYmFzZVN0YXRlPWEsby5maXJzdEJhc2VVcGRhdGU9dSxvLmxhc3RCYXNlVXBkYXRlPWMsdD1vLnNoYXJlZC5pbnRlcmxlYXZlZCx0IT09bnVsbCl7bz10O2RvIGx8PW8ubGFuZSxvPW8ubmV4dDt3aGlsZShvIT09dCl9ZWxzZSBpPT09bnVsbCYmKG8uc2hhcmVkLmxhbmVzPTApO2ZpfD1sLGUubGFuZXM9bCxlLm1lbW9pemVkU3RhdGU9ZH19ZnVuY3Rpb24gTHYoZSx0LG4pe2lmKGU9dC5lZmZlY3RzLHQuZWZmZWN0cz1udWxsLGUhPT1udWxsKWZvcih0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciByPWVbdF0sbz1yLmNhbGxiYWNrO2lmKG8hPT1udWxsKXtpZihyLmNhbGxiYWNrPW51bGwscj1uLHR5cGVvZiBvIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFUoMTkxLG8pKTtvLmNhbGwocil9fX12YXIgU3g9bmV3IHcxLkNvbXBvbmVudCgpLnJlZnM7ZnVuY3Rpb24gdmgoZSx0LG4scil7dD1lLm1lbW9pemVkU3RhdGUsbj1uKHIsdCksbj1uPT1udWxsP3Q6cnQoe30sdCxuKSxlLm1lbW9pemVkU3RhdGU9bixlLmxhbmVzPT09MCYmKGUudXBkYXRlUXVldWUuYmFzZVN0YXRlPW4pfXZhciB0ZD17aXNNb3VudGVkOmZ1bmN0aW9uKGUpe3JldHVybihlPWUuX3JlYWN0SW50ZXJuYWxzKT9TaShlKT09PWU6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1sbigpLG89a28oZSksaT1XcihyLG8pO2kucGF5bG9hZD10LG4hPW51bGwmJihpLmNhbGxiYWNrPW4pLHQ9Q28oZSxpLG8pLHQhPT1udWxsJiYob3IodCxlLG8sciksTHUodCxlLG8pKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1sbigpLG89a28oZSksaT1XcihyLG8pO2kudGFnPTEsaS5wYXlsb2FkPXQsbiE9bnVsbCYmKGkuY2FsbGJhY2s9biksdD1DbyhlLGksbyksdCE9PW51bGwmJihvcih0LGUsbyxyKSxMdSh0LGUsbykpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciBuPWxuKCkscj1rbyhlKSxvPVdyKG4scik7by50YWc9Mix0IT1udWxsJiYoby5jYWxsYmFjaz10KSx0PUNvKGUsbyxyKSx0IT09bnVsbCYmKG9yKHQsZSxyLG4pLEx1KHQsZSxyKSl9fTtmdW5jdGlvbiBEdihlLHQsbixyLG8saSxsKXtyZXR1cm4gZT1lLnN0YXRlTm9kZSx0eXBlb2YgZS5zaG91bGRDb21wb25lbnRVcGRhdGU9PSJmdW5jdGlvbiI/ZS5zaG91bGRDb21wb25lbnRVcGRhdGUocixpLGwpOnQucHJvdG90eXBlJiZ0LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hb2EobixyKXx8IW9hKG8saSk6ITB9ZnVuY3Rpb24gRXgoZSx0LG4pe3ZhciByPSExLG89T28saT10LmNvbnRleHRUeXBlO3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJmkhPT1udWxsP2k9V24oaSk6KG89Z24odCk/dWk6R3QuY3VycmVudCxyPXQuY29udGV4dFR5cGVzLGk9KHI9ciE9bnVsbCk/d2woZSxvKTpPbyksdD1uZXcgdChuLGkpLGUubWVtb2l6ZWRTdGF0ZT10LnN0YXRlIT09bnVsbCYmdC5zdGF0ZSE9PXZvaWQgMD90LnN0YXRlOm51bGwsdC51cGRhdGVyPXRkLGUuc3RhdGVOb2RlPXQsdC5fcmVhY3RJbnRlcm5hbHM9ZSxyJiYoZT1lLnN0YXRlTm9kZSxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9byxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWkpLHR9ZnVuY3Rpb24gSXYoZSx0LG4scil7ZT10LnN0YXRlLHR5cGVvZiB0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9PSJmdW5jdGlvbiImJnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLHIpLHR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT0iZnVuY3Rpb24iJiZ0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksdC5zdGF0ZSE9PWUmJnRkLmVucXVldWVSZXBsYWNlU3RhdGUodCx0LnN0YXRlLG51bGwpfWZ1bmN0aW9uIHloKGUsdCxuLHIpe3ZhciBvPWUuc3RhdGVOb2RlO28ucHJvcHM9bixvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxvLnJlZnM9U3gsZGcoZSk7dmFyIGk9dC5jb250ZXh0VHlwZTt0eXBlb2YgaT09Im9iamVjdCImJmkhPT1udWxsP28uY29udGV4dD1XbihpKTooaT1nbih0KT91aTpHdC5jdXJyZW50LG8uY29udGV4dD13bChlLGkpKSxvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxpPXQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLHR5cGVvZiBpPT0iZnVuY3Rpb24iJiYodmgoZSx0LGksbiksby5zdGF0ZT1lLm1lbW9pemVkU3RhdGUpLHR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09ImZ1bmN0aW9uInx8dHlwZW9mIG8uZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiJ8fHR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiImJnR5cGVvZiBvLmNvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uInx8KHQ9by5zdGF0ZSx0eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJm8uY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksdCE9PW8uc3RhdGUmJnRkLmVucXVldWVSZXBsYWNlU3RhdGUobyxvLnN0YXRlLG51bGwpLGRjKGUsbixvLHIpLG8uc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSx0eXBlb2Ygby5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKGUuZmxhZ3N8PTQxOTQzMDgpfWZ1bmN0aW9uIGFzKGUsdCxuKXtpZihlPW4ucmVmLGUhPT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGUhPSJvYmplY3QiKXtpZihuLl9vd25lcil7aWYobj1uLl9vd25lcixuKXtpZihuLnRhZyE9PTEpdGhyb3cgRXJyb3IoVSgzMDkpKTt2YXIgcj1uLnN0YXRlTm9kZX1pZighcil0aHJvdyBFcnJvcihVKDE0NyxlKSk7dmFyIG89cixpPSIiK2U7cmV0dXJuIHQhPT1udWxsJiZ0LnJlZiE9PW51bGwmJnR5cGVvZiB0LnJlZj09ImZ1bmN0aW9uIiYmdC5yZWYuX3N0cmluZ1JlZj09PWk/dC5yZWY6KHQ9ZnVuY3Rpb24obCl7dmFyIHM9by5yZWZzO3M9PT1TeCYmKHM9by5yZWZzPXt9KSxsPT09bnVsbD9kZWxldGUgc1tpXTpzW2ldPWx9LHQuX3N0cmluZ1JlZj1pLHQpfWlmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBFcnJvcihVKDI4NCkpO2lmKCFuLl9vd25lcil0aHJvdyBFcnJvcihVKDI5MCxlKSl9cmV0dXJuIGV9ZnVuY3Rpb24gYXUoZSx0KXt0aHJvdyBlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSxFcnJvcihVKDMxLGU9PT0iW29iamVjdCBPYmplY3RdIj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyh0KS5qb2luKCIsICIpKyJ9IjplKSl9ZnVuY3Rpb24ganYoZSl7dmFyIHQ9ZS5faW5pdDtyZXR1cm4gdChlLl9wYXlsb2FkKX1mdW5jdGlvbiBDeChlKXtmdW5jdGlvbiB0KHYseSl7aWYoZSl7dmFyIHg9di5kZWxldGlvbnM7eD09PW51bGw/KHYuZGVsZXRpb25zPVt5XSx2LmZsYWdzfD0xNik6eC5wdXNoKHkpfX1mdW5jdGlvbiBuKHYseSl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKDt5IT09bnVsbDspdCh2LHkpLHk9eS5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIHIodix5KXtmb3Iodj1uZXcgTWFwO3khPT1udWxsOyl5LmtleSE9PW51bGw/di5zZXQoeS5rZXkseSk6di5zZXQoeS5pbmRleCx5KSx5PXkuc2libGluZztyZXR1cm4gdn1mdW5jdGlvbiBvKHYseSl7cmV0dXJuIHY9VG8odix5KSx2LmluZGV4PTAsdi5zaWJsaW5nPW51bGwsdn1mdW5jdGlvbiBpKHYseSx4KXtyZXR1cm4gdi5pbmRleD14LGU/KHg9di5hbHRlcm5hdGUseCE9PW51bGw/KHg9eC5pbmRleCx4PHk/KHYuZmxhZ3N8PTIseSk6eCk6KHYuZmxhZ3N8PTIseSkpOih2LmZsYWdzfD0xMDQ4NTc2LHkpfWZ1bmN0aW9uIGwodil7cmV0dXJuIGUmJnYuYWx0ZXJuYXRlPT09bnVsbCYmKHYuZmxhZ3N8PTIpLHZ9ZnVuY3Rpb24gcyh2LHkseCxTKXtyZXR1cm4geT09PW51bGx8fHkudGFnIT09Nj8oeT12Zih4LHYubW9kZSxTKSx5LnJldHVybj12LHkpOih5PW8oeSx4KSx5LnJldHVybj12LHkpfWZ1bmN0aW9uIGEodix5LHgsUyl7dmFyIGs9eC50eXBlO3JldHVybiBrPT09R2k/Yyh2LHkseC5wcm9wcy5jaGlsZHJlbixTLHgua2V5KTp5IT09bnVsbCYmKHkuZWxlbWVudFR5cGU9PT1rfHx0eXBlb2Ygaz09Im9iamVjdCImJmshPT1udWxsJiZrLiQkdHlwZW9mPT09dW8mJmp2KGspPT09eS50eXBlKT8oUz1vKHkseC5wcm9wcyksUy5yZWY9YXModix5LHgpLFMucmV0dXJuPXYsUyk6KFM9QnUoeC50eXBlLHgua2V5LHgucHJvcHMsbnVsbCx2Lm1vZGUsUyksUy5yZWY9YXModix5LHgpLFMucmV0dXJuPXYsUyl9ZnVuY3Rpb24gdSh2LHkseCxTKXtyZXR1cm4geT09PW51bGx8fHkudGFnIT09NHx8eS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PXguY29udGFpbmVySW5mb3x8eS5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT14LmltcGxlbWVudGF0aW9uPyh5PXlmKHgsdi5tb2RlLFMpLHkucmV0dXJuPXYseSk6KHk9byh5LHguY2hpbGRyZW58fFtdKSx5LnJldHVybj12LHkpfWZ1bmN0aW9uIGModix5LHgsUyxrKXtyZXR1cm4geT09PW51bGx8fHkudGFnIT09Nz8oeT1paSh4LHYubW9kZSxTLGspLHkucmV0dXJuPXYseSk6KHk9byh5LHgpLHkucmV0dXJuPXYseSl9ZnVuY3Rpb24gZCh2LHkseCl7aWYodHlwZW9mIHk9PSJzdHJpbmciJiZ5IT09IiJ8fHR5cGVvZiB5PT0ibnVtYmVyIilyZXR1cm4geT12ZigiIit5LHYubW9kZSx4KSx5LnJldHVybj12LHk7aWYodHlwZW9mIHk9PSJvYmplY3QiJiZ5IT09bnVsbCl7c3dpdGNoKHkuJCR0eXBlb2Ype2Nhc2UgSmE6cmV0dXJuIHg9QnUoeS50eXBlLHkua2V5LHkucHJvcHMsbnVsbCx2Lm1vZGUseCkseC5yZWY9YXModixudWxsLHkpLHgucmV0dXJuPXYseDtjYXNlIEtpOnJldHVybiB5PXlmKHksdi5tb2RlLHgpLHkucmV0dXJuPXYseTtjYXNlIHVvOnZhciBTPXkuX2luaXQ7cmV0dXJuIGQodixTKHkuX3BheWxvYWQpLHgpfWlmKHdzKHkpfHxycyh5KSlyZXR1cm4geT1paSh5LHYubW9kZSx4LG51bGwpLHkucmV0dXJuPXYseTthdSh2LHkpfXJldHVybiBudWxsfWZ1bmN0aW9uIGYodix5LHgsUyl7dmFyIGs9eSE9PW51bGw/eS5rZXk6bnVsbDtpZih0eXBlb2YgeD09InN0cmluZyImJnghPT0iInx8dHlwZW9mIHg9PSJudW1iZXIiKXJldHVybiBrIT09bnVsbD9udWxsOnModix5LCIiK3gsUyk7aWYodHlwZW9mIHg9PSJvYmplY3QiJiZ4IT09bnVsbCl7c3dpdGNoKHguJCR0eXBlb2Ype2Nhc2UgSmE6cmV0dXJuIHgua2V5PT09az9hKHYseSx4LFMpOm51bGw7Y2FzZSBLaTpyZXR1cm4geC5rZXk9PT1rP3Uodix5LHgsUyk6bnVsbDtjYXNlIHVvOnJldHVybiBrPXguX2luaXQsZih2LHksayh4Ll9wYXlsb2FkKSxTKX1pZih3cyh4KXx8cnMoeCkpcmV0dXJuIGshPT1udWxsP251bGw6Yyh2LHkseCxTLG51bGwpO2F1KHYseCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaCh2LHkseCxTLGspe2lmKHR5cGVvZiBTPT0ic3RyaW5nIiYmUyE9PSIifHx0eXBlb2YgUz09Im51bWJlciIpcmV0dXJuIHY9di5nZXQoeCl8fG51bGwscyh5LHYsIiIrUyxrKTtpZih0eXBlb2YgUz09Im9iamVjdCImJlMhPT1udWxsKXtzd2l0Y2goUy4kJHR5cGVvZil7Y2FzZSBKYTpyZXR1cm4gdj12LmdldChTLmtleT09PW51bGw/eDpTLmtleSl8fG51bGwsYSh5LHYsUyxrKTtjYXNlIEtpOnJldHVybiB2PXYuZ2V0KFMua2V5PT09bnVsbD94OlMua2V5KXx8bnVsbCx1KHksdixTLGspO2Nhc2UgdW86dmFyIGI9Uy5faW5pdDtyZXR1cm4gaCh2LHkseCxiKFMuX3BheWxvYWQpLGspfWlmKHdzKFMpfHxycyhTKSlyZXR1cm4gdj12LmdldCh4KXx8bnVsbCxjKHksdixTLGssbnVsbCk7YXUoeSxTKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBnKHYseSx4LFMpe2Zvcih2YXIgaz1udWxsLGI9bnVsbCxUPXksTj15PTAsRD1udWxsO1QhPT1udWxsJiZOPHgubGVuZ3RoO04rKyl7VC5pbmRleD5OPyhEPVQsVD1udWxsKTpEPVQuc2libGluZzt2YXIgTT1mKHYsVCx4W05dLFMpO2lmKE09PT1udWxsKXtUPT09bnVsbCYmKFQ9RCk7YnJlYWt9ZSYmVCYmTS5hbHRlcm5hdGU9PT1udWxsJiZ0KHYsVCkseT1pKE0seSxOKSxiPT09bnVsbD9rPU06Yi5zaWJsaW5nPU0sYj1NLFQ9RH1pZihOPT09eC5sZW5ndGgpcmV0dXJuIG4odixUKSxZZSYmWG8odixOKSxrO2lmKFQ9PT1udWxsKXtmb3IoO048eC5sZW5ndGg7TisrKVQ9ZCh2LHhbTl0sUyksVCE9PW51bGwmJih5PWkoVCx5LE4pLGI9PT1udWxsP2s9VDpiLnNpYmxpbmc9VCxiPVQpO3JldHVybiBZZSYmWG8odixOKSxrfWZvcihUPXIodixUKTtOPHgubGVuZ3RoO04rKylEPWgoVCx2LE4seFtOXSxTKSxEIT09bnVsbCYmKGUmJkQuYWx0ZXJuYXRlIT09bnVsbCYmVC5kZWxldGUoRC5rZXk9PT1udWxsP046RC5rZXkpLHk9aShELHksTiksYj09PW51bGw/az1EOmIuc2libGluZz1ELGI9RCk7cmV0dXJuIGUmJlQuZm9yRWFjaChmdW5jdGlvbihqKXtyZXR1cm4gdCh2LGopfSksWWUmJlhvKHYsTiksa31mdW5jdGlvbiBtKHYseSx4LFMpe3ZhciBrPXJzKHgpO2lmKHR5cGVvZiBrIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFUoMTUwKSk7aWYoeD1rLmNhbGwoeCkseD09bnVsbCl0aHJvdyBFcnJvcihVKDE1MSkpO2Zvcih2YXIgYj1rPW51bGwsVD15LE49eT0wLEQ9bnVsbCxNPXgubmV4dCgpO1QhPT1udWxsJiYhTS5kb25lO04rKyxNPXgubmV4dCgpKXtULmluZGV4Pk4/KEQ9VCxUPW51bGwpOkQ9VC5zaWJsaW5nO3ZhciBqPWYodixULE0udmFsdWUsUyk7aWYoaj09PW51bGwpe1Q9PT1udWxsJiYoVD1EKTticmVha31lJiZUJiZqLmFsdGVybmF0ZT09PW51bGwmJnQodixUKSx5PWkoaix5LE4pLGI9PT1udWxsP2s9ajpiLnNpYmxpbmc9aixiPWosVD1EfWlmKE0uZG9uZSlyZXR1cm4gbih2LFQpLFllJiZYbyh2LE4pLGs7aWYoVD09PW51bGwpe2Zvcig7IU0uZG9uZTtOKyssTT14Lm5leHQoKSlNPWQodixNLnZhbHVlLFMpLE0hPT1udWxsJiYoeT1pKE0seSxOKSxiPT09bnVsbD9rPU06Yi5zaWJsaW5nPU0sYj1NKTtyZXR1cm4gWWUmJlhvKHYsTiksa31mb3IoVD1yKHYsVCk7IU0uZG9uZTtOKyssTT14Lm5leHQoKSlNPWgoVCx2LE4sTS52YWx1ZSxTKSxNIT09bnVsbCYmKGUmJk0uYWx0ZXJuYXRlIT09bnVsbCYmVC5kZWxldGUoTS5rZXk9PT1udWxsP046TS5rZXkpLHk9aShNLHksTiksYj09PW51bGw/az1NOmIuc2libGluZz1NLGI9TSk7cmV0dXJuIGUmJlQuZm9yRWFjaChmdW5jdGlvbihCKXtyZXR1cm4gdCh2LEIpfSksWWUmJlhvKHYsTiksa31mdW5jdGlvbiBfKHYseSx4LFMpe2lmKHR5cGVvZiB4PT0ib2JqZWN0IiYmeCE9PW51bGwmJngudHlwZT09PUdpJiZ4LmtleT09PW51bGwmJih4PXgucHJvcHMuY2hpbGRyZW4pLHR5cGVvZiB4PT0ib2JqZWN0IiYmeCE9PW51bGwpe3N3aXRjaCh4LiQkdHlwZW9mKXtjYXNlIEphOmU6e2Zvcih2YXIgaz14LmtleSxiPXk7YiE9PW51bGw7KXtpZihiLmtleT09PWspe2lmKGs9eC50eXBlLGs9PT1HaSl7aWYoYi50YWc9PT03KXtuKHYsYi5zaWJsaW5nKSx5PW8oYix4LnByb3BzLmNoaWxkcmVuKSx5LnJldHVybj12LHY9eTticmVhayBlfX1lbHNlIGlmKGIuZWxlbWVudFR5cGU9PT1rfHx0eXBlb2Ygaz09Im9iamVjdCImJmshPT1udWxsJiZrLiQkdHlwZW9mPT09dW8mJmp2KGspPT09Yi50eXBlKXtuKHYsYi5zaWJsaW5nKSx5PW8oYix4LnByb3BzKSx5LnJlZj1hcyh2LGIseCkseS5yZXR1cm49dix2PXk7YnJlYWsgZX1uKHYsYik7YnJlYWt9ZWxzZSB0KHYsYik7Yj1iLnNpYmxpbmd9eC50eXBlPT09R2k/KHk9aWkoeC5wcm9wcy5jaGlsZHJlbix2Lm1vZGUsUyx4LmtleSkseS5yZXR1cm49dix2PXkpOihTPUJ1KHgudHlwZSx4LmtleSx4LnByb3BzLG51bGwsdi5tb2RlLFMpLFMucmVmPWFzKHYseSx4KSxTLnJldHVybj12LHY9Uyl9cmV0dXJuIGwodik7Y2FzZSBLaTplOntmb3IoYj14LmtleTt5IT09bnVsbDspe2lmKHkua2V5PT09YilpZih5LnRhZz09PTQmJnkuc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT14LmNvbnRhaW5lckluZm8mJnkuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uPT09eC5pbXBsZW1lbnRhdGlvbil7bih2LHkuc2libGluZykseT1vKHkseC5jaGlsZHJlbnx8W10pLHkucmV0dXJuPXYsdj15O2JyZWFrIGV9ZWxzZXtuKHYseSk7YnJlYWt9ZWxzZSB0KHYseSk7eT15LnNpYmxpbmd9eT15Zih4LHYubW9kZSxTKSx5LnJldHVybj12LHY9eX1yZXR1cm4gbCh2KTtjYXNlIHVvOnJldHVybiBiPXguX2luaXQsXyh2LHksYih4Ll9wYXlsb2FkKSxTKX1pZih3cyh4KSlyZXR1cm4gZyh2LHkseCxTKTtpZihycyh4KSlyZXR1cm4gbSh2LHkseCxTKTthdSh2LHgpfXJldHVybiB0eXBlb2YgeD09InN0cmluZyImJnghPT0iInx8dHlwZW9mIHg9PSJudW1iZXIiPyh4PSIiK3gseSE9PW51bGwmJnkudGFnPT09Nj8obih2LHkuc2libGluZykseT1vKHkseCkseS5yZXR1cm49dix2PXkpOihuKHYseSkseT12Zih4LHYubW9kZSxTKSx5LnJldHVybj12LHY9eSksbCh2KSk6bih2LHkpfXJldHVybiBffXZhciBTbD1DeCghMCksJHg9Q3goITEpLExhPXt9LHhyPVdvKExhKSxhYT1XbyhMYSksdWE9V28oTGEpO2Z1bmN0aW9uIHRpKGUpe2lmKGU9PT1MYSl0aHJvdyBFcnJvcihVKDE3NCkpO3JldHVybiBlfWZ1bmN0aW9uIGZnKGUsdCl7c3dpdGNoKHplKHVhLHQpLHplKGFhLGUpLHplKHhyLExhKSxlPXQubm9kZVR5cGUsZSl7Y2FzZSA5OmNhc2UgMTE6dD0odD10LmRvY3VtZW50RWxlbWVudCk/dC5uYW1lc3BhY2VVUkk6UWYobnVsbCwiIik7YnJlYWs7ZGVmYXVsdDplPWU9PT04P3QucGFyZW50Tm9kZTp0LHQ9ZS5uYW1lc3BhY2VVUkl8fG51bGwsZT1lLnRhZ05hbWUsdD1RZih0LGUpfUdlKHhyKSx6ZSh4cix0KX1mdW5jdGlvbiBFbCgpe0dlKHhyKSxHZShhYSksR2UodWEpfWZ1bmN0aW9uIGt4KGUpe3RpKHVhLmN1cnJlbnQpO3ZhciB0PXRpKHhyLmN1cnJlbnQpLG49UWYodCxlLnR5cGUpO3QhPT1uJiYoemUoYWEsZSksemUoeHIsbikpfWZ1bmN0aW9uIGhnKGUpe2FhLmN1cnJlbnQ9PT1lJiYoR2UoeHIpLEdlKGFhKSl9dmFyIHFlPVdvKDApO2Z1bmN0aW9uIGZjKGUpe2Zvcih2YXIgdD1lO3QhPT1udWxsOyl7aWYodC50YWc9PT0xMyl7dmFyIG49dC5tZW1vaXplZFN0YXRlO2lmKG4hPT1udWxsJiYobj1uLmRlaHlkcmF0ZWQsbj09PW51bGx8fG4uZGF0YT09PSIkPyJ8fG4uZGF0YT09PSIkISIpKXJldHVybiB0fWVsc2UgaWYodC50YWc9PT0xOSYmdC5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyIT09dm9pZCAwKXtpZih0LmZsYWdzJjEyOClyZXR1cm4gdH1lbHNlIGlmKHQuY2hpbGQhPT1udWxsKXt0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZDtjb250aW51ZX1pZih0PT09ZSlicmVhaztmb3IoO3Quc2libGluZz09PW51bGw7KXtpZih0LnJldHVybj09PW51bGx8fHQucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIGRmPVtdO2Z1bmN0aW9uIHBnKCl7Zm9yKHZhciBlPTA7ZTxkZi5sZW5ndGg7ZSsrKWRmW2VdLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PW51bGw7ZGYubGVuZ3RoPTB9dmFyIER1PVFyLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmY9UXIuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsZGk9MCx0dD1udWxsLHl0PW51bGwsJHQ9bnVsbCxoYz0hMSxPcz0hMSxjYT0wLEFrPTA7ZnVuY3Rpb24ganQoKXt0aHJvdyBFcnJvcihVKDMyMSkpfWZ1bmN0aW9uIGdnKGUsdCl7aWYodD09PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmbjxlLmxlbmd0aDtuKyspaWYoIWlyKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbWcoZSx0LG4scixvLGkpe2lmKGRpPWksdHQ9dCx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsdC5sYW5lcz0wLER1LmN1cnJlbnQ9ZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGw/SWs6amssZT1uKHIsbyksT3Mpe2k9MDtkb3tpZihPcz0hMSxjYT0wLDI1PD1pKXRocm93IEVycm9yKFUoMzAxKSk7aSs9MSwkdD15dD1udWxsLHQudXBkYXRlUXVldWU9bnVsbCxEdS5jdXJyZW50PXprLGU9bihyLG8pfXdoaWxlKE9zKX1pZihEdS5jdXJyZW50PXBjLHQ9eXQhPT1udWxsJiZ5dC5uZXh0IT09bnVsbCxkaT0wLCR0PXl0PXR0PW51bGwsaGM9ITEsdCl0aHJvdyBFcnJvcihVKDMwMCkpO3JldHVybiBlfWZ1bmN0aW9uIHZnKCl7dmFyIGU9Y2EhPT0wO3JldHVybiBjYT0wLGV9ZnVuY3Rpb24gZHIoKXt2YXIgZT17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtyZXR1cm4gJHQ9PT1udWxsP3R0Lm1lbW9pemVkU3RhdGU9JHQ9ZTokdD0kdC5uZXh0PWUsJHR9ZnVuY3Rpb24gVW4oKXtpZih5dD09PW51bGwpe3ZhciBlPXR0LmFsdGVybmF0ZTtlPWUhPT1udWxsP2UubWVtb2l6ZWRTdGF0ZTpudWxsfWVsc2UgZT15dC5uZXh0O3ZhciB0PSR0PT09bnVsbD90dC5tZW1vaXplZFN0YXRlOiR0Lm5leHQ7aWYodCE9PW51bGwpJHQ9dCx5dD1lO2Vsc2V7aWYoZT09PW51bGwpdGhyb3cgRXJyb3IoVSgzMTApKTt5dD1lLGU9e21lbW9pemVkU3RhdGU6eXQubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6eXQuYmFzZVN0YXRlLGJhc2VRdWV1ZTp5dC5iYXNlUXVldWUscXVldWU6eXQucXVldWUsbmV4dDpudWxsfSwkdD09PW51bGw/dHQubWVtb2l6ZWRTdGF0ZT0kdD1lOiR0PSR0Lm5leHQ9ZX1yZXR1cm4gJHR9ZnVuY3Rpb24gZGEoZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0fWZ1bmN0aW9uIGhmKGUpe3ZhciB0PVVuKCksbj10LnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKFUoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPWU7dmFyIHI9eXQsbz1yLmJhc2VRdWV1ZSxpPW4ucGVuZGluZztpZihpIT09bnVsbCl7aWYobyE9PW51bGwpe3ZhciBsPW8ubmV4dDtvLm5leHQ9aS5uZXh0LGkubmV4dD1sfXIuYmFzZVF1ZXVlPW89aSxuLnBlbmRpbmc9bnVsbH1pZihvIT09bnVsbCl7aT1vLm5leHQscj1yLmJhc2VTdGF0ZTt2YXIgcz1sPW51bGwsYT1udWxsLHU9aTtkb3t2YXIgYz11LmxhbmU7aWYoKGRpJmMpPT09YylhIT09bnVsbCYmKGE9YS5uZXh0PXtsYW5lOjAsYWN0aW9uOnUuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6dS5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6dS5lYWdlclN0YXRlLG5leHQ6bnVsbH0pLHI9dS5oYXNFYWdlclN0YXRlP3UuZWFnZXJTdGF0ZTplKHIsdS5hY3Rpb24pO2Vsc2V7dmFyIGQ9e2xhbmU6YyxhY3Rpb246dS5hY3Rpb24saGFzRWFnZXJTdGF0ZTp1Lmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTp1LmVhZ2VyU3RhdGUsbmV4dDpudWxsfTthPT09bnVsbD8ocz1hPWQsbD1yKTphPWEubmV4dD1kLHR0LmxhbmVzfD1jLGZpfD1jfXU9dS5uZXh0fXdoaWxlKHUhPT1udWxsJiZ1IT09aSk7YT09PW51bGw/bD1yOmEubmV4dD1zLGlyKHIsdC5tZW1vaXplZFN0YXRlKXx8KGhuPSEwKSx0Lm1lbW9pemVkU3RhdGU9cix0LmJhc2VTdGF0ZT1sLHQuYmFzZVF1ZXVlPWEsbi5sYXN0UmVuZGVyZWRTdGF0ZT1yfWlmKGU9bi5pbnRlcmxlYXZlZCxlIT09bnVsbCl7bz1lO2RvIGk9by5sYW5lLHR0LmxhbmVzfD1pLGZpfD1pLG89by5uZXh0O3doaWxlKG8hPT1lKX1lbHNlIG89PT1udWxsJiYobi5sYW5lcz0wKTtyZXR1cm5bdC5tZW1vaXplZFN0YXRlLG4uZGlzcGF0Y2hdfWZ1bmN0aW9uIHBmKGUpe3ZhciB0PVVuKCksbj10LnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKFUoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPWU7dmFyIHI9bi5kaXNwYXRjaCxvPW4ucGVuZGluZyxpPXQubWVtb2l6ZWRTdGF0ZTtpZihvIT09bnVsbCl7bi5wZW5kaW5nPW51bGw7dmFyIGw9bz1vLm5leHQ7ZG8gaT1lKGksbC5hY3Rpb24pLGw9bC5uZXh0O3doaWxlKGwhPT1vKTtpcihpLHQubWVtb2l6ZWRTdGF0ZSl8fChobj0hMCksdC5tZW1vaXplZFN0YXRlPWksdC5iYXNlUXVldWU9PT1udWxsJiYodC5iYXNlU3RhdGU9aSksbi5sYXN0UmVuZGVyZWRTdGF0ZT1pfXJldHVybltpLHJdfWZ1bmN0aW9uIFR4KCl7fWZ1bmN0aW9uIGJ4KGUsdCl7dmFyIG49dHQscj1VbigpLG89dCgpLGk9IWlyKHIubWVtb2l6ZWRTdGF0ZSxvKTtpZihpJiYoci5tZW1vaXplZFN0YXRlPW8saG49ITApLHI9ci5xdWV1ZSx5ZyhQeC5iaW5kKG51bGwsbixyLGUpLFtlXSksci5nZXRTbmFwc2hvdCE9PXR8fGl8fCR0IT09bnVsbCYmJHQubWVtb2l6ZWRTdGF0ZS50YWcmMSl7aWYobi5mbGFnc3w9MjA0OCxmYSg5LFJ4LmJpbmQobnVsbCxuLHIsbyx0KSx2b2lkIDAsbnVsbCksUnQ9PT1udWxsKXRocm93IEVycm9yKFUoMzQ5KSk7ZGkmMzB8fE54KG4sdCxvKX1yZXR1cm4gb31mdW5jdGlvbiBOeChlLHQsbil7ZS5mbGFnc3w9MTYzODQsZT17Z2V0U25hcHNob3Q6dCx2YWx1ZTpufSx0PXR0LnVwZGF0ZVF1ZXVlLHQ9PT1udWxsPyh0PXtsYXN0RWZmZWN0Om51bGwsc3RvcmVzOm51bGx9LHR0LnVwZGF0ZVF1ZXVlPXQsdC5zdG9yZXM9W2VdKToobj10LnN0b3JlcyxuPT09bnVsbD90LnN0b3Jlcz1bZV06bi5wdXNoKGUpKX1mdW5jdGlvbiBSeChlLHQsbixyKXt0LnZhbHVlPW4sdC5nZXRTbmFwc2hvdD1yLE94KHQpJiZBeChlKX1mdW5jdGlvbiBQeChlLHQsbil7cmV0dXJuIG4oZnVuY3Rpb24oKXtPeCh0KSYmQXgoZSl9KX1mdW5jdGlvbiBPeChlKXt2YXIgdD1lLmdldFNuYXBzaG90O2U9ZS52YWx1ZTt0cnl7dmFyIG49dCgpO3JldHVybiFpcihlLG4pfWNhdGNoe3JldHVybiEwfX1mdW5jdGlvbiBBeChlKXt2YXIgdD1IcihlLDEpO3QhPT1udWxsJiZvcih0LGUsMSwtMSl9ZnVuY3Rpb24genYoZSl7dmFyIHQ9ZHIoKTtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiImJihlPWUoKSksdC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWUsZT17cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6ZGEsbGFzdFJlbmRlcmVkU3RhdGU6ZX0sdC5xdWV1ZT1lLGU9ZS5kaXNwYXRjaD1Eay5iaW5kKG51bGwsdHQsZSksW3QubWVtb2l6ZWRTdGF0ZSxlXX1mdW5jdGlvbiBmYShlLHQsbixyKXtyZXR1cm4gZT17dGFnOmUsY3JlYXRlOnQsZGVzdHJveTpuLGRlcHM6cixuZXh0Om51bGx9LHQ9dHQudXBkYXRlUXVldWUsdD09PW51bGw/KHQ9e2xhc3RFZmZlY3Q6bnVsbCxzdG9yZXM6bnVsbH0sdHQudXBkYXRlUXVldWU9dCx0Lmxhc3RFZmZlY3Q9ZS5uZXh0PWUpOihuPXQubGFzdEVmZmVjdCxuPT09bnVsbD90Lmxhc3RFZmZlY3Q9ZS5uZXh0PWU6KHI9bi5uZXh0LG4ubmV4dD1lLGUubmV4dD1yLHQubGFzdEVmZmVjdD1lKSksZX1mdW5jdGlvbiBNeCgpe3JldHVybiBVbigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gSXUoZSx0LG4scil7dmFyIG89ZHIoKTt0dC5mbGFnc3w9ZSxvLm1lbW9pemVkU3RhdGU9ZmEoMXx0LG4sdm9pZCAwLHI9PT12b2lkIDA/bnVsbDpyKX1mdW5jdGlvbiBuZChlLHQsbixyKXt2YXIgbz1VbigpO3I9cj09PXZvaWQgMD9udWxsOnI7dmFyIGk9dm9pZCAwO2lmKHl0IT09bnVsbCl7dmFyIGw9eXQubWVtb2l6ZWRTdGF0ZTtpZihpPWwuZGVzdHJveSxyIT09bnVsbCYmZ2cocixsLmRlcHMpKXtvLm1lbW9pemVkU3RhdGU9ZmEodCxuLGkscik7cmV0dXJufX10dC5mbGFnc3w9ZSxvLm1lbW9pemVkU3RhdGU9ZmEoMXx0LG4saSxyKX1mdW5jdGlvbiBGdihlLHQpe3JldHVybiBJdSg4MzkwNjU2LDgsZSx0KX1mdW5jdGlvbiB5ZyhlLHQpe3JldHVybiBuZCgyMDQ4LDgsZSx0KX1mdW5jdGlvbiBMeChlLHQpe3JldHVybiBuZCg0LDIsZSx0KX1mdW5jdGlvbiBEeChlLHQpe3JldHVybiBuZCg0LDQsZSx0KX1mdW5jdGlvbiBJeChlLHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXJldHVybiBlPWUoKSx0KGUpLGZ1bmN0aW9uKCl7dChudWxsKX07aWYodCE9bnVsbClyZXR1cm4gZT1lKCksdC5jdXJyZW50PWUsZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gangoZSx0LG4pe3JldHVybiBuPW4hPW51bGw/bi5jb25jYXQoW2VdKTpudWxsLG5kKDQsNCxJeC5iaW5kKG51bGwsdCxlKSxuKX1mdW5jdGlvbiB4Zygpe31mdW5jdGlvbiB6eChlLHQpe3ZhciBuPVVuKCk7dD10PT09dm9pZCAwP251bGw6dDt2YXIgcj1uLm1lbW9pemVkU3RhdGU7cmV0dXJuIHIhPT1udWxsJiZ0IT09bnVsbCYmZ2codCxyWzFdKT9yWzBdOihuLm1lbW9pemVkU3RhdGU9W2UsdF0sZSl9ZnVuY3Rpb24gRngoZSx0KXt2YXIgbj1VbigpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiByIT09bnVsbCYmdCE9PW51bGwmJmdnKHQsclsxXSk/clswXTooZT1lKCksbi5tZW1vaXplZFN0YXRlPVtlLHRdLGUpfWZ1bmN0aW9uIEJ4KGUsdCxuKXtyZXR1cm4gZGkmMjE/KGlyKG4sdCl8fChuPVYxKCksdHQubGFuZXN8PW4sZml8PW4sZS5iYXNlU3RhdGU9ITApLHQpOihlLmJhc2VTdGF0ZSYmKGUuYmFzZVN0YXRlPSExLGhuPSEwKSxlLm1lbW9pemVkU3RhdGU9bil9ZnVuY3Rpb24gTWsoZSx0KXt2YXIgbj1BZTtBZT1uIT09MCYmND5uP246NCxlKCEwKTt2YXIgcj1mZi50cmFuc2l0aW9uO2ZmLnRyYW5zaXRpb249e307dHJ5e2UoITEpLHQoKX1maW5hbGx5e0FlPW4sZmYudHJhbnNpdGlvbj1yfX1mdW5jdGlvbiBXeCgpe3JldHVybiBVbigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gTGsoZSx0LG4pe3ZhciByPWtvKGUpO2lmKG49e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LFV4KGUpKVZ4KHQsbik7ZWxzZSBpZihuPXd4KGUsdCxuLHIpLG4hPT1udWxsKXt2YXIgbz1sbigpO29yKG4sZSxyLG8pLEh4KG4sdCxyKX19ZnVuY3Rpb24gRGsoZSx0LG4pe3ZhciByPWtvKGUpLG89e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O2lmKFV4KGUpKVZ4KHQsbyk7ZWxzZXt2YXIgaT1lLmFsdGVybmF0ZTtpZihlLmxhbmVzPT09MCYmKGk9PT1udWxsfHxpLmxhbmVzPT09MCkmJihpPXQubGFzdFJlbmRlcmVkUmVkdWNlcixpIT09bnVsbCkpdHJ5e3ZhciBsPXQubGFzdFJlbmRlcmVkU3RhdGUscz1pKGwsbik7aWYoby5oYXNFYWdlclN0YXRlPSEwLG8uZWFnZXJTdGF0ZT1zLGlyKHMsbCkpe3ZhciBhPXQuaW50ZXJsZWF2ZWQ7YT09PW51bGw/KG8ubmV4dD1vLGNnKHQpKTooby5uZXh0PWEubmV4dCxhLm5leHQ9byksdC5pbnRlcmxlYXZlZD1vO3JldHVybn19Y2F0Y2h7fWZpbmFsbHl7fW49d3goZSx0LG8sciksbiE9PW51bGwmJihvPWxuKCksb3IobixlLHIsbyksSHgobix0LHIpKX19ZnVuY3Rpb24gVXgoZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7cmV0dXJuIGU9PT10dHx8dCE9PW51bGwmJnQ9PT10dH1mdW5jdGlvbiBWeChlLHQpe09zPWhjPSEwO3ZhciBuPWUucGVuZGluZztuPT09bnVsbD90Lm5leHQ9dDoodC5uZXh0PW4ubmV4dCxuLm5leHQ9dCksZS5wZW5kaW5nPXR9ZnVuY3Rpb24gSHgoZSx0LG4pe2lmKG4mNDE5NDI0MCl7dmFyIHI9dC5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyxufD1yLHQubGFuZXM9bixRcChlLG4pfX12YXIgcGM9e3JlYWRDb250ZXh0OlduLHVzZUNhbGxiYWNrOmp0LHVzZUNvbnRleHQ6anQsdXNlRWZmZWN0Omp0LHVzZUltcGVyYXRpdmVIYW5kbGU6anQsdXNlSW5zZXJ0aW9uRWZmZWN0Omp0LHVzZUxheW91dEVmZmVjdDpqdCx1c2VNZW1vOmp0LHVzZVJlZHVjZXI6anQsdXNlUmVmOmp0LHVzZVN0YXRlOmp0LHVzZURlYnVnVmFsdWU6anQsdXNlRGVmZXJyZWRWYWx1ZTpqdCx1c2VUcmFuc2l0aW9uOmp0LHVzZU11dGFibGVTb3VyY2U6anQsdXNlU3luY0V4dGVybmFsU3RvcmU6anQsdXNlSWQ6anQsdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxJaz17cmVhZENvbnRleHQ6V24sdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZHIoKS5tZW1vaXplZFN0YXRlPVtlLHQ9PT12b2lkIDA/bnVsbDp0XSxlfSx1c2VDb250ZXh0OlduLHVzZUVmZmVjdDpGdix1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uIT1udWxsP24uY29uY2F0KFtlXSk6bnVsbCxJdSg0MTk0MzA4LDQsSXguYmluZChudWxsLHQsZSksbil9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihlLHQpe3JldHVybiBJdSg0MTk0MzA4LDQsZSx0KX0sdXNlSW5zZXJ0aW9uRWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEl1KDQsMixlLHQpfSx1c2VNZW1vOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZHIoKTtyZXR1cm4gdD10PT09dm9pZCAwP251bGw6dCxlPWUoKSxuLm1lbW9pemVkU3RhdGU9W2UsdF0sZX0sdXNlUmVkdWNlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZHIoKTtyZXR1cm4gdD1uIT09dm9pZCAwP24odCk6dCxyLm1lbW9pemVkU3RhdGU9ci5iYXNlU3RhdGU9dCxlPXtwZW5kaW5nOm51bGwsaW50ZXJsZWF2ZWQ6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjplLGxhc3RSZW5kZXJlZFN0YXRlOnR9LHIucXVldWU9ZSxlPWUuZGlzcGF0Y2g9TGsuYmluZChudWxsLHR0LGUpLFtyLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXt2YXIgdD1kcigpO3JldHVybiBlPXtjdXJyZW50OmV9LHQubWVtb2l6ZWRTdGF0ZT1lfSx1c2VTdGF0ZTp6dix1c2VEZWJ1Z1ZhbHVlOnhnLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGRyKCkubWVtb2l6ZWRTdGF0ZT1lfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9enYoITEpLHQ9ZVswXTtyZXR1cm4gZT1Nay5iaW5kKG51bGwsZVsxXSksZHIoKS5tZW1vaXplZFN0YXRlPWUsW3QsZV19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oKXt9LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10dCxvPWRyKCk7aWYoWWUpe2lmKG49PT12b2lkIDApdGhyb3cgRXJyb3IoVSg0MDcpKTtuPW4oKX1lbHNle2lmKG49dCgpLFJ0PT09bnVsbCl0aHJvdyBFcnJvcihVKDM0OSkpO2RpJjMwfHxOeChyLHQsbil9by5tZW1vaXplZFN0YXRlPW47dmFyIGk9e3ZhbHVlOm4sZ2V0U25hcHNob3Q6dH07cmV0dXJuIG8ucXVldWU9aSxGdihQeC5iaW5kKG51bGwscixpLGUpLFtlXSksci5mbGFnc3w9MjA0OCxmYSg5LFJ4LmJpbmQobnVsbCxyLGksbix0KSx2b2lkIDAsbnVsbCksbn0sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgZT1kcigpLHQ9UnQuaWRlbnRpZmllclByZWZpeDtpZihZZSl7dmFyIG49QnIscj1GcjtuPShyJn4oMTw8MzItcnIociktMSkpLnRvU3RyaW5nKDMyKStuLHQ9IjoiK3QrIlIiK24sbj1jYSsrLDA8biYmKHQrPSJIIituLnRvU3RyaW5nKDMyKSksdCs9IjoifWVsc2Ugbj1BaysrLHQ9IjoiK3QrInIiK24udG9TdHJpbmcoMzIpKyI6IjtyZXR1cm4gZS5tZW1vaXplZFN0YXRlPXR9LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sams9e3JlYWRDb250ZXh0OlduLHVzZUNhbGxiYWNrOnp4LHVzZUNvbnRleHQ6V24sdXNlRWZmZWN0OnlnLHVzZUltcGVyYXRpdmVIYW5kbGU6angsdXNlSW5zZXJ0aW9uRWZmZWN0Okx4LHVzZUxheW91dEVmZmVjdDpEeCx1c2VNZW1vOkZ4LHVzZVJlZHVjZXI6aGYsdXNlUmVmOk14LHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGhmKGRhKX0sdXNlRGVidWdWYWx1ZTp4Zyx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVVuKCk7cmV0dXJuIEJ4KHQseXQubWVtb2l6ZWRTdGF0ZSxlKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPWhmKGRhKVswXSx0PVVuKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bZSx0XX0sdXNlTXV0YWJsZVNvdXJjZTpUeCx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpieCx1c2VJZDpXeCx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LHprPXtyZWFkQ29udGV4dDpXbix1c2VDYWxsYmFjazp6eCx1c2VDb250ZXh0OlduLHVzZUVmZmVjdDp5Zyx1c2VJbXBlcmF0aXZlSGFuZGxlOmp4LHVzZUluc2VydGlvbkVmZmVjdDpMeCx1c2VMYXlvdXRFZmZlY3Q6RHgsdXNlTWVtbzpGeCx1c2VSZWR1Y2VyOnBmLHVzZVJlZjpNeCx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBwZihkYSl9LHVzZURlYnVnVmFsdWU6eGcsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1VbigpO3JldHVybiB5dD09PW51bGw/dC5tZW1vaXplZFN0YXRlPWU6QngodCx5dC5tZW1vaXplZFN0YXRlLGUpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9cGYoZGEpWzBdLHQ9VW4oKS5tZW1vaXplZFN0YXRlO3JldHVybltlLHRdfSx1c2VNdXRhYmxlU291cmNlOlR4LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmJ4LHVzZUlkOld4LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX07ZnVuY3Rpb24gQ2woZSx0KXt0cnl7dmFyIG49IiIscj10O2RvIG4rPWgkKHIpLHI9ci5yZXR1cm47d2hpbGUocik7dmFyIG89bn1jYXRjaChpKXtvPWAKRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogYCtpLm1lc3NhZ2UrYApgK2kuc3RhY2t9cmV0dXJue3ZhbHVlOmUsc291cmNlOnQsc3RhY2s6byxkaWdlc3Q6bnVsbH19ZnVuY3Rpb24gZ2YoZSx0LG4pe3JldHVybnt2YWx1ZTplLHNvdXJjZTpudWxsLHN0YWNrOm4/P251bGwsZGlnZXN0OnQ/P251bGx9fWZ1bmN0aW9uIHhoKGUsdCl7dHJ5e2NvbnNvbGUuZXJyb3IodC52YWx1ZSl9Y2F0Y2gobil7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IG59KX19dmFyIEZrPXR5cGVvZiBXZWFrTWFwPT0iZnVuY3Rpb24iP1dlYWtNYXA6TWFwO2Z1bmN0aW9uIEt4KGUsdCxuKXtuPVdyKC0xLG4pLG4udGFnPTMsbi5wYXlsb2FkPXtlbGVtZW50Om51bGx9O3ZhciByPXQudmFsdWU7cmV0dXJuIG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXttY3x8KG1jPSEwLE5oPXIpLHhoKGUsdCl9LG59ZnVuY3Rpb24gR3goZSx0LG4pe249V3IoLTEsbiksbi50YWc9Mzt2YXIgcj1lLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt2YXIgbz10LnZhbHVlO24ucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiByKG8pfSxuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7eGgoZSx0KX19dmFyIGk9ZS5zdGF0ZU5vZGU7cmV0dXJuIGkhPT1udWxsJiZ0eXBlb2YgaS5jb21wb25lbnREaWRDYXRjaD09ImZ1bmN0aW9uIiYmKG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXt4aChlLHQpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiYoJG89PT1udWxsPyRvPW5ldyBTZXQoW3RoaXNdKTokby5hZGQodGhpcykpO3ZhciBsPXQuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaCh0LnZhbHVlLHtjb21wb25lbnRTdGFjazpsIT09bnVsbD9sOiIifSl9KSxufWZ1bmN0aW9uIEJ2KGUsdCxuKXt2YXIgcj1lLnBpbmdDYWNoZTtpZihyPT09bnVsbCl7cj1lLnBpbmdDYWNoZT1uZXcgRms7dmFyIG89bmV3IFNldDtyLnNldCh0LG8pfWVsc2Ugbz1yLmdldCh0KSxvPT09dm9pZCAwJiYobz1uZXcgU2V0LHIuc2V0KHQsbykpO28uaGFzKG4pfHwoby5hZGQobiksZT1lVC5iaW5kKG51bGwsZSx0LG4pLHQudGhlbihlLGUpKX1mdW5jdGlvbiBXdihlKXtkb3t2YXIgdDtpZigodD1lLnRhZz09PTEzKSYmKHQ9ZS5tZW1vaXplZFN0YXRlLHQ9dCE9PW51bGw/dC5kZWh5ZHJhdGVkIT09bnVsbDohMCksdClyZXR1cm4gZTtlPWUucmV0dXJufXdoaWxlKGUhPT1udWxsKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBVdihlLHQsbixyLG8pe3JldHVybiBlLm1vZGUmMT8oZS5mbGFnc3w9NjU1MzYsZS5sYW5lcz1vLGUpOihlPT09dD9lLmZsYWdzfD02NTUzNjooZS5mbGFnc3w9MTI4LG4uZmxhZ3N8PTEzMTA3MixuLmZsYWdzJj0tNTI4MDUsbi50YWc9PT0xJiYobi5hbHRlcm5hdGU9PT1udWxsP24udGFnPTE3Oih0PVdyKC0xLDEpLHQudGFnPTIsQ28obix0LDEpKSksbi5sYW5lc3w9MSksZSl9dmFyIEJrPVFyLlJlYWN0Q3VycmVudE93bmVyLGhuPSExO2Z1bmN0aW9uIEp0KGUsdCxuLHIpe3QuY2hpbGQ9ZT09PW51bGw/JHgodCxudWxsLG4scik6U2wodCxlLmNoaWxkLG4scil9ZnVuY3Rpb24gVnYoZSx0LG4scixvKXtuPW4ucmVuZGVyO3ZhciBpPXQucmVmO3JldHVybiBmbCh0LG8pLHI9bWcoZSx0LG4scixpLG8pLG49dmcoKSxlIT09bnVsbCYmIWhuPyh0LnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdC5mbGFncyY9LTIwNTMsZS5sYW5lcyY9fm8sS3IoZSx0LG8pKTooWWUmJm4mJm9nKHQpLHQuZmxhZ3N8PTEsSnQoZSx0LHIsbyksdC5jaGlsZCl9ZnVuY3Rpb24gSHYoZSx0LG4scixvKXtpZihlPT09bnVsbCl7dmFyIGk9bi50eXBlO3JldHVybiB0eXBlb2YgaT09ImZ1bmN0aW9uIiYmIVRnKGkpJiZpLmRlZmF1bHRQcm9wcz09PXZvaWQgMCYmbi5jb21wYXJlPT09bnVsbCYmbi5kZWZhdWx0UHJvcHM9PT12b2lkIDA/KHQudGFnPTE1LHQudHlwZT1pLFl4KGUsdCxpLHIsbykpOihlPUJ1KG4udHlwZSxudWxsLHIsdCx0Lm1vZGUsbyksZS5yZWY9dC5yZWYsZS5yZXR1cm49dCx0LmNoaWxkPWUpfWlmKGk9ZS5jaGlsZCwhKGUubGFuZXMmbykpe3ZhciBsPWkubWVtb2l6ZWRQcm9wcztpZihuPW4uY29tcGFyZSxuPW4hPT1udWxsP246b2EsbihsLHIpJiZlLnJlZj09PXQucmVmKXJldHVybiBLcihlLHQsbyl9cmV0dXJuIHQuZmxhZ3N8PTEsZT1UbyhpLHIpLGUucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lfWZ1bmN0aW9uIFl4KGUsdCxuLHIsbyl7aWYoZSE9PW51bGwpe3ZhciBpPWUubWVtb2l6ZWRQcm9wcztpZihvYShpLHIpJiZlLnJlZj09PXQucmVmKWlmKGhuPSExLHQucGVuZGluZ1Byb3BzPXI9aSwoZS5sYW5lcyZvKSE9PTApZS5mbGFncyYxMzEwNzImJihobj0hMCk7ZWxzZSByZXR1cm4gdC5sYW5lcz1lLmxhbmVzLEtyKGUsdCxvKX1yZXR1cm4gd2goZSx0LG4scixvKX1mdW5jdGlvbiBYeChlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHMsbz1yLmNoaWxkcmVuLGk9ZSE9PW51bGw/ZS5tZW1vaXplZFN0YXRlOm51bGw7aWYoci5tb2RlPT09ImhpZGRlbiIpaWYoISh0Lm1vZGUmMSkpdC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSx6ZShybCx3biksd258PW47ZWxzZXtpZighKG4mMTA3Mzc0MTgyNCkpcmV0dXJuIGU9aSE9PW51bGw/aS5iYXNlTGFuZXN8bjpuLHQubGFuZXM9dC5jaGlsZExhbmVzPTEwNzM3NDE4MjQsdC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6ZSxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSx0LnVwZGF0ZVF1ZXVlPW51bGwsemUocmwsd24pLHdufD1lLG51bGw7dC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxyPWkhPT1udWxsP2kuYmFzZUxhbmVzOm4semUocmwsd24pLHdufD1yfWVsc2UgaSE9PW51bGw/KHI9aS5iYXNlTGFuZXN8bix0Lm1lbW9pemVkU3RhdGU9bnVsbCk6cj1uLHplKHJsLHduKSx3bnw9cjtyZXR1cm4gSnQoZSx0LG8sbiksdC5jaGlsZH1mdW5jdGlvbiBReChlLHQpe3ZhciBuPXQucmVmOyhlPT09bnVsbCYmbiE9PW51bGx8fGUhPT1udWxsJiZlLnJlZiE9PW4pJiYodC5mbGFnc3w9NTEyLHQuZmxhZ3N8PTIwOTcxNTIpfWZ1bmN0aW9uIHdoKGUsdCxuLHIsbyl7dmFyIGk9Z24obik/dWk6R3QuY3VycmVudDtyZXR1cm4gaT13bCh0LGkpLGZsKHQsbyksbj1tZyhlLHQsbixyLGksbykscj12ZygpLGUhPT1udWxsJiYhaG4/KHQudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0LmZsYWdzJj0tMjA1MyxlLmxhbmVzJj1+byxLcihlLHQsbykpOihZZSYmciYmb2codCksdC5mbGFnc3w9MSxKdChlLHQsbixvKSx0LmNoaWxkKX1mdW5jdGlvbiBLdihlLHQsbixyLG8pe2lmKGduKG4pKXt2YXIgaT0hMDtsYyh0KX1lbHNlIGk9ITE7aWYoZmwodCxvKSx0LnN0YXRlTm9kZT09PW51bGwpanUoZSx0KSxFeCh0LG4scikseWgodCxuLHIsbykscj0hMDtlbHNlIGlmKGU9PT1udWxsKXt2YXIgbD10LnN0YXRlTm9kZSxzPXQubWVtb2l6ZWRQcm9wcztsLnByb3BzPXM7dmFyIGE9bC5jb250ZXh0LHU9bi5jb250ZXh0VHlwZTt0eXBlb2YgdT09Im9iamVjdCImJnUhPT1udWxsP3U9V24odSk6KHU9Z24obik/dWk6R3QuY3VycmVudCx1PXdsKHQsdSkpO3ZhciBjPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLGQ9dHlwZW9mIGM9PSJmdW5jdGlvbiJ8fHR5cGVvZiBsLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24iO2R8fHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24ifHwocyE9PXJ8fGEhPT11KSYmSXYodCxsLHIsdSksY289ITE7dmFyIGY9dC5tZW1vaXplZFN0YXRlO2wuc3RhdGU9ZixkYyh0LHIsbCxvKSxhPXQubWVtb2l6ZWRTdGF0ZSxzIT09cnx8ZiE9PWF8fHBuLmN1cnJlbnR8fGNvPyh0eXBlb2YgYz09ImZ1bmN0aW9uIiYmKHZoKHQsbixjLHIpLGE9dC5tZW1vaXplZFN0YXRlKSwocz1jb3x8RHYodCxuLHMscixmLGEsdSkpPyhkfHx0eXBlb2YgbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiJ8fCh0eXBlb2YgbC5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJmwuY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIGwuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLHR5cGVvZiBsLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NDE5NDMwOCkpOih0eXBlb2YgbC5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpLHQubWVtb2l6ZWRQcm9wcz1yLHQubWVtb2l6ZWRTdGF0ZT1hKSxsLnByb3BzPXIsbC5zdGF0ZT1hLGwuY29udGV4dD11LHI9cyk6KHR5cGVvZiBsLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NDE5NDMwOCkscj0hMSl9ZWxzZXtsPXQuc3RhdGVOb2RlLF94KGUsdCkscz10Lm1lbW9pemVkUHJvcHMsdT10LnR5cGU9PT10LmVsZW1lbnRUeXBlP3M6Sm4odC50eXBlLHMpLGwucHJvcHM9dSxkPXQucGVuZGluZ1Byb3BzLGY9bC5jb250ZXh0LGE9bi5jb250ZXh0VHlwZSx0eXBlb2YgYT09Im9iamVjdCImJmEhPT1udWxsP2E9V24oYSk6KGE9Z24obik/dWk6R3QuY3VycmVudCxhPXdsKHQsYSkpO3ZhciBoPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyhjPXR5cGVvZiBoPT0iZnVuY3Rpb24ifHx0eXBlb2YgbC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uIil8fHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24ifHwocyE9PWR8fGYhPT1hKSYmSXYodCxsLHIsYSksY289ITEsZj10Lm1lbW9pemVkU3RhdGUsbC5zdGF0ZT1mLGRjKHQscixsLG8pO3ZhciBnPXQubWVtb2l6ZWRTdGF0ZTtzIT09ZHx8ZiE9PWd8fHBuLmN1cnJlbnR8fGNvPyh0eXBlb2YgaD09ImZ1bmN0aW9uIiYmKHZoKHQsbixoLHIpLGc9dC5tZW1vaXplZFN0YXRlKSwodT1jb3x8RHYodCxuLHUscixmLGcsYSl8fCExKT8oY3x8dHlwZW9mIGwuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiImJnR5cGVvZiBsLmNvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiJ8fCh0eXBlb2YgbC5jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZsLmNvbXBvbmVudFdpbGxVcGRhdGUocixnLGEpLHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZsLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKHIsZyxhKSksdHlwZW9mIGwuY29tcG9uZW50RGlkVXBkYXRlPT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NCksdHlwZW9mIGwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiImJih0LmZsYWdzfD0xMDI0KSk6KHR5cGVvZiBsLmNvbXBvbmVudERpZFVwZGF0ZSE9ImZ1bmN0aW9uInx8cz09PWUubWVtb2l6ZWRQcm9wcyYmZj09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTQpLHR5cGVvZiBsLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT0iZnVuY3Rpb24ifHxzPT09ZS5tZW1vaXplZFByb3BzJiZmPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9MTAyNCksdC5tZW1vaXplZFByb3BzPXIsdC5tZW1vaXplZFN0YXRlPWcpLGwucHJvcHM9cixsLnN0YXRlPWcsbC5jb250ZXh0PWEscj11KToodHlwZW9mIGwuY29tcG9uZW50RGlkVXBkYXRlIT0iZnVuY3Rpb24ifHxzPT09ZS5tZW1vaXplZFByb3BzJiZmPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9NCksdHlwZW9mIGwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPSJmdW5jdGlvbiJ8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmY9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD0xMDI0KSxyPSExKX1yZXR1cm4gX2goZSx0LG4scixpLG8pfWZ1bmN0aW9uIF9oKGUsdCxuLHIsbyxpKXtReChlLHQpO3ZhciBsPSh0LmZsYWdzJjEyOCkhPT0wO2lmKCFyJiYhbClyZXR1cm4gbyYmUHYodCxuLCExKSxLcihlLHQsaSk7cj10LnN0YXRlTm9kZSxCay5jdXJyZW50PXQ7dmFyIHM9bCYmdHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT0iZnVuY3Rpb24iP251bGw6ci5yZW5kZXIoKTtyZXR1cm4gdC5mbGFnc3w9MSxlIT09bnVsbCYmbD8odC5jaGlsZD1TbCh0LGUuY2hpbGQsbnVsbCxpKSx0LmNoaWxkPVNsKHQsbnVsbCxzLGkpKTpKdChlLHQscyxpKSx0Lm1lbW9pemVkU3RhdGU9ci5zdGF0ZSxvJiZQdih0LG4sITApLHQuY2hpbGR9ZnVuY3Rpb24gSngoZSl7dmFyIHQ9ZS5zdGF0ZU5vZGU7dC5wZW5kaW5nQ29udGV4dD9SdihlLHQucGVuZGluZ0NvbnRleHQsdC5wZW5kaW5nQ29udGV4dCE9PXQuY29udGV4dCk6dC5jb250ZXh0JiZSdihlLHQuY29udGV4dCwhMSksZmcoZSx0LmNvbnRhaW5lckluZm8pfWZ1bmN0aW9uIEd2KGUsdCxuLHIsbyl7cmV0dXJuIF9sKCksbGcobyksdC5mbGFnc3w9MjU2LEp0KGUsdCxuLHIpLHQuY2hpbGR9dmFyIFNoPXtkZWh5ZHJhdGVkOm51bGwsdHJlZUNvbnRleHQ6bnVsbCxyZXRyeUxhbmU6MH07ZnVuY3Rpb24gRWgoZSl7cmV0dXJue2Jhc2VMYW5lczplLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9fWZ1bmN0aW9uIFp4KGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcyxvPXFlLmN1cnJlbnQsaT0hMSxsPSh0LmZsYWdzJjEyOCkhPT0wLHM7aWYoKHM9bCl8fChzPWUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGU9PT1udWxsPyExOihvJjIpIT09MCkscz8oaT0hMCx0LmZsYWdzJj0tMTI5KTooZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiYob3w9MSksemUocWUsbyYxKSxlPT09bnVsbClyZXR1cm4gZ2godCksZT10Lm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJihlPWUuZGVoeWRyYXRlZCxlIT09bnVsbCk/KHQubW9kZSYxP2UuZGF0YT09PSIkISI/dC5sYW5lcz04OnQubGFuZXM9MTA3Mzc0MTgyNDp0LmxhbmVzPTEsbnVsbCk6KGw9ci5jaGlsZHJlbixlPXIuZmFsbGJhY2ssaT8ocj10Lm1vZGUsaT10LmNoaWxkLGw9e21vZGU6ImhpZGRlbiIsY2hpbGRyZW46bH0sIShyJjEpJiZpIT09bnVsbD8oaS5jaGlsZExhbmVzPTAsaS5wZW5kaW5nUHJvcHM9bCk6aT1pZChsLHIsMCxudWxsKSxlPWlpKGUscixuLG51bGwpLGkucmV0dXJuPXQsZS5yZXR1cm49dCxpLnNpYmxpbmc9ZSx0LmNoaWxkPWksdC5jaGlsZC5tZW1vaXplZFN0YXRlPUVoKG4pLHQubWVtb2l6ZWRTdGF0ZT1TaCxlKTp3Zyh0LGwpKTtpZihvPWUubWVtb2l6ZWRTdGF0ZSxvIT09bnVsbCYmKHM9by5kZWh5ZHJhdGVkLHMhPT1udWxsKSlyZXR1cm4gV2soZSx0LGwscixzLG8sbik7aWYoaSl7aT1yLmZhbGxiYWNrLGw9dC5tb2RlLG89ZS5jaGlsZCxzPW8uc2libGluZzt2YXIgYT17bW9kZToiaGlkZGVuIixjaGlsZHJlbjpyLmNoaWxkcmVufTtyZXR1cm4hKGwmMSkmJnQuY2hpbGQhPT1vPyhyPXQuY2hpbGQsci5jaGlsZExhbmVzPTAsci5wZW5kaW5nUHJvcHM9YSx0LmRlbGV0aW9ucz1udWxsKToocj1UbyhvLGEpLHIuc3VidHJlZUZsYWdzPW8uc3VidHJlZUZsYWdzJjE0NjgwMDY0KSxzIT09bnVsbD9pPVRvKHMsaSk6KGk9aWkoaSxsLG4sbnVsbCksaS5mbGFnc3w9MiksaS5yZXR1cm49dCxyLnJldHVybj10LHIuc2libGluZz1pLHQuY2hpbGQ9cixyPWksaT10LmNoaWxkLGw9ZS5jaGlsZC5tZW1vaXplZFN0YXRlLGw9bD09PW51bGw/RWgobik6e2Jhc2VMYW5lczpsLmJhc2VMYW5lc3xuLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOmwudHJhbnNpdGlvbnN9LGkubWVtb2l6ZWRTdGF0ZT1sLGkuY2hpbGRMYW5lcz1lLmNoaWxkTGFuZXMmfm4sdC5tZW1vaXplZFN0YXRlPVNoLHJ9cmV0dXJuIGk9ZS5jaGlsZCxlPWkuc2libGluZyxyPVRvKGkse21vZGU6InZpc2libGUiLGNoaWxkcmVuOnIuY2hpbGRyZW59KSwhKHQubW9kZSYxKSYmKHIubGFuZXM9biksci5yZXR1cm49dCxyLnNpYmxpbmc9bnVsbCxlIT09bnVsbCYmKG49dC5kZWxldGlvbnMsbj09PW51bGw/KHQuZGVsZXRpb25zPVtlXSx0LmZsYWdzfD0xNik6bi5wdXNoKGUpKSx0LmNoaWxkPXIsdC5tZW1vaXplZFN0YXRlPW51bGwscn1mdW5jdGlvbiB3ZyhlLHQpe3JldHVybiB0PWlkKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjp0fSxlLm1vZGUsMCxudWxsKSx0LnJldHVybj1lLGUuY2hpbGQ9dH1mdW5jdGlvbiB1dShlLHQsbixyKXtyZXR1cm4gciE9PW51bGwmJmxnKHIpLFNsKHQsZS5jaGlsZCxudWxsLG4pLGU9d2codCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksZS5mbGFnc3w9Mix0Lm1lbW9pemVkU3RhdGU9bnVsbCxlfWZ1bmN0aW9uIFdrKGUsdCxuLHIsbyxpLGwpe2lmKG4pcmV0dXJuIHQuZmxhZ3MmMjU2Pyh0LmZsYWdzJj0tMjU3LHI9Z2YoRXJyb3IoVSg0MjIpKSksdXUoZSx0LGwscikpOnQubWVtb2l6ZWRTdGF0ZSE9PW51bGw/KHQuY2hpbGQ9ZS5jaGlsZCx0LmZsYWdzfD0xMjgsbnVsbCk6KGk9ci5mYWxsYmFjayxvPXQubW9kZSxyPWlkKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjpyLmNoaWxkcmVufSxvLDAsbnVsbCksaT1paShpLG8sbCxudWxsKSxpLmZsYWdzfD0yLHIucmV0dXJuPXQsaS5yZXR1cm49dCxyLnNpYmxpbmc9aSx0LmNoaWxkPXIsdC5tb2RlJjEmJlNsKHQsZS5jaGlsZCxudWxsLGwpLHQuY2hpbGQubWVtb2l6ZWRTdGF0ZT1FaChsKSx0Lm1lbW9pemVkU3RhdGU9U2gsaSk7aWYoISh0Lm1vZGUmMSkpcmV0dXJuIHV1KGUsdCxsLG51bGwpO2lmKG8uZGF0YT09PSIkISIpe2lmKHI9by5uZXh0U2libGluZyYmby5uZXh0U2libGluZy5kYXRhc2V0LHIpdmFyIHM9ci5kZ3N0O3JldHVybiByPXMsaT1FcnJvcihVKDQxOSkpLHI9Z2YoaSxyLHZvaWQgMCksdXUoZSx0LGwscil9aWYocz0obCZlLmNoaWxkTGFuZXMpIT09MCxobnx8cyl7aWYocj1SdCxyIT09bnVsbCl7c3dpdGNoKGwmLWwpe2Nhc2UgNDpvPTI7YnJlYWs7Y2FzZSAxNjpvPTg7YnJlYWs7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0Om89MzI7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6bz0yNjg0MzU0NTY7YnJlYWs7ZGVmYXVsdDpvPTB9bz1vJihyLnN1c3BlbmRlZExhbmVzfGwpPzA6byxvIT09MCYmbyE9PWkucmV0cnlMYW5lJiYoaS5yZXRyeUxhbmU9byxIcihlLG8pLG9yKHIsZSxvLC0xKSl9cmV0dXJuIGtnKCkscj1nZihFcnJvcihVKDQyMSkpKSx1dShlLHQsbCxyKX1yZXR1cm4gby5kYXRhPT09IiQ/Ij8odC5mbGFnc3w9MTI4LHQuY2hpbGQ9ZS5jaGlsZCx0PXRULmJpbmQobnVsbCxlKSxvLl9yZWFjdFJldHJ5PXQsbnVsbCk6KGU9aS50cmVlQ29udGV4dCxFbj1FbyhvLm5leHRTaWJsaW5nKSxDbj10LFllPSEwLGVyPW51bGwsZSE9PW51bGwmJihMbltEbisrXT1GcixMbltEbisrXT1CcixMbltEbisrXT1jaSxGcj1lLmlkLEJyPWUub3ZlcmZsb3csY2k9dCksdD13Zyh0LHIuY2hpbGRyZW4pLHQuZmxhZ3N8PTQwOTYsdCl9ZnVuY3Rpb24gWXYoZSx0LG4pe2UubGFuZXN8PXQ7dmFyIHI9ZS5hbHRlcm5hdGU7ciE9PW51bGwmJihyLmxhbmVzfD10KSxtaChlLnJldHVybix0LG4pfWZ1bmN0aW9uIG1mKGUsdCxuLHIsbyl7dmFyIGk9ZS5tZW1vaXplZFN0YXRlO2k9PT1udWxsP2UubWVtb2l6ZWRTdGF0ZT17aXNCYWNrd2FyZHM6dCxyZW5kZXJpbmc6bnVsbCxyZW5kZXJpbmdTdGFydFRpbWU6MCxsYXN0OnIsdGFpbDpuLHRhaWxNb2RlOm99OihpLmlzQmFja3dhcmRzPXQsaS5yZW5kZXJpbmc9bnVsbCxpLnJlbmRlcmluZ1N0YXJ0VGltZT0wLGkubGFzdD1yLGkudGFpbD1uLGkudGFpbE1vZGU9byl9ZnVuY3Rpb24gcXgoZSx0LG4pe3ZhciByPXQucGVuZGluZ1Byb3BzLG89ci5yZXZlYWxPcmRlcixpPXIudGFpbDtpZihKdChlLHQsci5jaGlsZHJlbixuKSxyPXFlLmN1cnJlbnQsciYyKXI9ciYxfDIsdC5mbGFnc3w9MTI4O2Vsc2V7aWYoZSE9PW51bGwmJmUuZmxhZ3MmMTI4KWU6Zm9yKGU9dC5jaGlsZDtlIT09bnVsbDspe2lmKGUudGFnPT09MTMpZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmWXYoZSxuLHQpO2Vsc2UgaWYoZS50YWc9PT0xOSlZdihlLG4sdCk7ZWxzZSBpZihlLmNoaWxkIT09bnVsbCl7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGQ7Y29udGludWV9aWYoZT09PXQpYnJlYWsgZTtmb3IoO2Uuc2libGluZz09PW51bGw7KXtpZihlLnJldHVybj09PW51bGx8fGUucmV0dXJuPT09dClicmVhayBlO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZ31yJj0xfWlmKHplKHFlLHIpLCEodC5tb2RlJjEpKXQubWVtb2l6ZWRTdGF0ZT1udWxsO2Vsc2Ugc3dpdGNoKG8pe2Nhc2UiZm9yd2FyZHMiOmZvcihuPXQuY2hpbGQsbz1udWxsO24hPT1udWxsOyllPW4uYWx0ZXJuYXRlLGUhPT1udWxsJiZmYyhlKT09PW51bGwmJihvPW4pLG49bi5zaWJsaW5nO249byxuPT09bnVsbD8obz10LmNoaWxkLHQuY2hpbGQ9bnVsbCk6KG89bi5zaWJsaW5nLG4uc2libGluZz1udWxsKSxtZih0LCExLG8sbixpKTticmVhaztjYXNlImJhY2t3YXJkcyI6Zm9yKG49bnVsbCxvPXQuY2hpbGQsdC5jaGlsZD1udWxsO28hPT1udWxsOyl7aWYoZT1vLmFsdGVybmF0ZSxlIT09bnVsbCYmZmMoZSk9PT1udWxsKXt0LmNoaWxkPW87YnJlYWt9ZT1vLnNpYmxpbmcsby5zaWJsaW5nPW4sbj1vLG89ZX1tZih0LCEwLG4sbnVsbCxpKTticmVhaztjYXNlInRvZ2V0aGVyIjptZih0LCExLG51bGwsbnVsbCx2b2lkIDApO2JyZWFrO2RlZmF1bHQ6dC5tZW1vaXplZFN0YXRlPW51bGx9cmV0dXJuIHQuY2hpbGR9ZnVuY3Rpb24ganUoZSx0KXshKHQubW9kZSYxKSYmZSE9PW51bGwmJihlLmFsdGVybmF0ZT1udWxsLHQuYWx0ZXJuYXRlPW51bGwsdC5mbGFnc3w9Mil9ZnVuY3Rpb24gS3IoZSx0LG4pe2lmKGUhPT1udWxsJiYodC5kZXBlbmRlbmNpZXM9ZS5kZXBlbmRlbmNpZXMpLGZpfD10LmxhbmVzLCEobiZ0LmNoaWxkTGFuZXMpKXJldHVybiBudWxsO2lmKGUhPT1udWxsJiZ0LmNoaWxkIT09ZS5jaGlsZCl0aHJvdyBFcnJvcihVKDE1MykpO2lmKHQuY2hpbGQhPT1udWxsKXtmb3IoZT10LmNoaWxkLG49VG8oZSxlLnBlbmRpbmdQcm9wcyksdC5jaGlsZD1uLG4ucmV0dXJuPXQ7ZS5zaWJsaW5nIT09bnVsbDspZT1lLnNpYmxpbmcsbj1uLnNpYmxpbmc9VG8oZSxlLnBlbmRpbmdQcm9wcyksbi5yZXR1cm49dDtuLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBVayhlLHQsbil7c3dpdGNoKHQudGFnKXtjYXNlIDM6SngodCksX2woKTticmVhaztjYXNlIDU6a3godCk7YnJlYWs7Y2FzZSAxOmduKHQudHlwZSkmJmxjKHQpO2JyZWFrO2Nhc2UgNDpmZyh0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTA6dmFyIHI9dC50eXBlLl9jb250ZXh0LG89dC5tZW1vaXplZFByb3BzLnZhbHVlO3plKHVjLHIuX2N1cnJlbnRWYWx1ZSksci5fY3VycmVudFZhbHVlPW87YnJlYWs7Y2FzZSAxMzppZihyPXQubWVtb2l6ZWRTdGF0ZSxyIT09bnVsbClyZXR1cm4gci5kZWh5ZHJhdGVkIT09bnVsbD8oemUocWUscWUuY3VycmVudCYxKSx0LmZsYWdzfD0xMjgsbnVsbCk6biZ0LmNoaWxkLmNoaWxkTGFuZXM/WngoZSx0LG4pOih6ZShxZSxxZS5jdXJyZW50JjEpLGU9S3IoZSx0LG4pLGUhPT1udWxsP2Uuc2libGluZzpudWxsKTt6ZShxZSxxZS5jdXJyZW50JjEpO2JyZWFrO2Nhc2UgMTk6aWYocj0obiZ0LmNoaWxkTGFuZXMpIT09MCxlLmZsYWdzJjEyOCl7aWYocilyZXR1cm4gcXgoZSx0LG4pO3QuZmxhZ3N8PTEyOH1pZihvPXQubWVtb2l6ZWRTdGF0ZSxvIT09bnVsbCYmKG8ucmVuZGVyaW5nPW51bGwsby50YWlsPW51bGwsby5sYXN0RWZmZWN0PW51bGwpLHplKHFlLHFlLmN1cnJlbnQpLHIpYnJlYWs7cmV0dXJuIG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiB0LmxhbmVzPTAsWHgoZSx0LG4pfXJldHVybiBLcihlLHQsbil9dmFyIGV3LENoLHR3LG53O2V3PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQuY2hpbGQ7biE9PW51bGw7KXtpZihuLnRhZz09PTV8fG4udGFnPT09NillLmFwcGVuZENoaWxkKG4uc3RhdGVOb2RlKTtlbHNlIGlmKG4udGFnIT09NCYmbi5jaGlsZCE9PW51bGwpe24uY2hpbGQucmV0dXJuPW4sbj1uLmNoaWxkO2NvbnRpbnVlfWlmKG49PT10KWJyZWFrO2Zvcig7bi5zaWJsaW5nPT09bnVsbDspe2lmKG4ucmV0dXJuPT09bnVsbHx8bi5yZXR1cm49PT10KXJldHVybjtuPW4ucmV0dXJufW4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9fTtDaD1mdW5jdGlvbigpe307dHc9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ZS5tZW1vaXplZFByb3BzO2lmKG8hPT1yKXtlPXQuc3RhdGVOb2RlLHRpKHhyLmN1cnJlbnQpO3ZhciBpPW51bGw7c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOm89S2YoZSxvKSxyPUtmKGUsciksaT1bXTticmVhaztjYXNlInNlbGVjdCI6bz1ydCh7fSxvLHt2YWx1ZTp2b2lkIDB9KSxyPXJ0KHt9LHIse3ZhbHVlOnZvaWQgMH0pLGk9W107YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6bz1YZihlLG8pLHI9WGYoZSxyKSxpPVtdO2JyZWFrO2RlZmF1bHQ6dHlwZW9mIG8ub25DbGljayE9ImZ1bmN0aW9uIiYmdHlwZW9mIHIub25DbGljaz09ImZ1bmN0aW9uIiYmKGUub25jbGljaz1vYyl9SmYobixyKTt2YXIgbDtuPW51bGw7Zm9yKHUgaW4gbylpZighci5oYXNPd25Qcm9wZXJ0eSh1KSYmby5oYXNPd25Qcm9wZXJ0eSh1KSYmb1t1XSE9bnVsbClpZih1PT09InN0eWxlIil7dmFyIHM9b1t1XTtmb3IobCBpbiBzKXMuaGFzT3duUHJvcGVydHkobCkmJihufHwobj17fSksbltsXT0iIil9ZWxzZSB1IT09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiYmdSE9PSJjaGlsZHJlbiImJnUhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmdSE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiZ1IT09ImF1dG9Gb2N1cyImJihKcy5oYXNPd25Qcm9wZXJ0eSh1KT9pfHwoaT1bXSk6KGk9aXx8W10pLnB1c2godSxudWxsKSk7Zm9yKHUgaW4gcil7dmFyIGE9clt1XTtpZihzPW8hPW51bGw/b1t1XTp2b2lkIDAsci5oYXNPd25Qcm9wZXJ0eSh1KSYmYSE9PXMmJihhIT1udWxsfHxzIT1udWxsKSlpZih1PT09InN0eWxlIilpZihzKXtmb3IobCBpbiBzKSFzLmhhc093blByb3BlcnR5KGwpfHxhJiZhLmhhc093blByb3BlcnR5KGwpfHwobnx8KG49e30pLG5bbF09IiIpO2ZvcihsIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShsKSYmc1tsXSE9PWFbbF0mJihufHwobj17fSksbltsXT1hW2xdKX1lbHNlIG58fChpfHwoaT1bXSksaS5wdXNoKHUsbikpLG49YTtlbHNlIHU9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPyhhPWE/YS5fX2h0bWw6dm9pZCAwLHM9cz9zLl9faHRtbDp2b2lkIDAsYSE9bnVsbCYmcyE9PWEmJihpPWl8fFtdKS5wdXNoKHUsYSkpOnU9PT0iY2hpbGRyZW4iP3R5cGVvZiBhIT0ic3RyaW5nIiYmdHlwZW9mIGEhPSJudW1iZXIifHwoaT1pfHxbXSkucHVzaCh1LCIiK2EpOnUhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmdSE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiYoSnMuaGFzT3duUHJvcGVydHkodSk/KGEhPW51bGwmJnU9PT0ib25TY3JvbGwiJiZVZSgic2Nyb2xsIixlKSxpfHxzPT09YXx8KGk9W10pKTooaT1pfHxbXSkucHVzaCh1LGEpKX1uJiYoaT1pfHxbXSkucHVzaCgic3R5bGUiLG4pO3ZhciB1PWk7KHQudXBkYXRlUXVldWU9dSkmJih0LmZsYWdzfD00KX19O253PWZ1bmN0aW9uKGUsdCxuLHIpe24hPT1yJiYodC5mbGFnc3w9NCl9O2Z1bmN0aW9uIHVzKGUsdCl7aWYoIVllKXN3aXRjaChlLnRhaWxNb2RlKXtjYXNlImhpZGRlbiI6dD1lLnRhaWw7Zm9yKHZhciBuPW51bGw7dCE9PW51bGw7KXQuYWx0ZXJuYXRlIT09bnVsbCYmKG49dCksdD10LnNpYmxpbmc7bj09PW51bGw/ZS50YWlsPW51bGw6bi5zaWJsaW5nPW51bGw7YnJlYWs7Y2FzZSJjb2xsYXBzZWQiOm49ZS50YWlsO2Zvcih2YXIgcj1udWxsO24hPT1udWxsOyluLmFsdGVybmF0ZSE9PW51bGwmJihyPW4pLG49bi5zaWJsaW5nO3I9PT1udWxsP3R8fGUudGFpbD09PW51bGw/ZS50YWlsPW51bGw6ZS50YWlsLnNpYmxpbmc9bnVsbDpyLnNpYmxpbmc9bnVsbH19ZnVuY3Rpb24genQoZSl7dmFyIHQ9ZS5hbHRlcm5hdGUhPT1udWxsJiZlLmFsdGVybmF0ZS5jaGlsZD09PWUuY2hpbGQsbj0wLHI9MDtpZih0KWZvcih2YXIgbz1lLmNoaWxkO28hPT1udWxsOylufD1vLmxhbmVzfG8uY2hpbGRMYW5lcyxyfD1vLnN1YnRyZWVGbGFncyYxNDY4MDA2NCxyfD1vLmZsYWdzJjE0NjgwMDY0LG8ucmV0dXJuPWUsbz1vLnNpYmxpbmc7ZWxzZSBmb3Iobz1lLmNoaWxkO28hPT1udWxsOylufD1vLmxhbmVzfG8uY2hpbGRMYW5lcyxyfD1vLnN1YnRyZWVGbGFncyxyfD1vLmZsYWdzLG8ucmV0dXJuPWUsbz1vLnNpYmxpbmc7cmV0dXJuIGUuc3VidHJlZUZsYWdzfD1yLGUuY2hpbGRMYW5lcz1uLHR9ZnVuY3Rpb24gVmsoZSx0LG4pe3ZhciByPXQucGVuZGluZ1Byb3BzO3N3aXRjaChpZyh0KSx0LnRhZyl7Y2FzZSAyOmNhc2UgMTY6Y2FzZSAxNTpjYXNlIDA6Y2FzZSAxMTpjYXNlIDc6Y2FzZSA4OmNhc2UgMTI6Y2FzZSA5OmNhc2UgMTQ6cmV0dXJuIHp0KHQpLG51bGw7Y2FzZSAxOnJldHVybiBnbih0LnR5cGUpJiZpYygpLHp0KHQpLG51bGw7Y2FzZSAzOnJldHVybiByPXQuc3RhdGVOb2RlLEVsKCksR2UocG4pLEdlKEd0KSxwZygpLHIucGVuZGluZ0NvbnRleHQmJihyLmNvbnRleHQ9ci5wZW5kaW5nQ29udGV4dCxyLnBlbmRpbmdDb250ZXh0PW51bGwpLChlPT09bnVsbHx8ZS5jaGlsZD09PW51bGwpJiYoc3UodCk/dC5mbGFnc3w9NDplPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmISh0LmZsYWdzJjI1Nil8fCh0LmZsYWdzfD0xMDI0LGVyIT09bnVsbCYmKE9oKGVyKSxlcj1udWxsKSkpLENoKGUsdCksenQodCksbnVsbDtjYXNlIDU6aGcodCk7dmFyIG89dGkodWEuY3VycmVudCk7aWYobj10LnR5cGUsZSE9PW51bGwmJnQuc3RhdGVOb2RlIT1udWxsKXR3KGUsdCxuLHIsbyksZS5yZWYhPT10LnJlZiYmKHQuZmxhZ3N8PTUxMix0LmZsYWdzfD0yMDk3MTUyKTtlbHNle2lmKCFyKXtpZih0LnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoVSgxNjYpKTtyZXR1cm4genQodCksbnVsbH1pZihlPXRpKHhyLmN1cnJlbnQpLHN1KHQpKXtyPXQuc3RhdGVOb2RlLG49dC50eXBlO3ZhciBpPXQubWVtb2l6ZWRQcm9wcztzd2l0Y2gocltocl09dCxyW3NhXT1pLGU9KHQubW9kZSYxKSE9PTAsbil7Y2FzZSJkaWFsb2ciOlVlKCJjYW5jZWwiLHIpLFVlKCJjbG9zZSIscik7YnJlYWs7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjpVZSgibG9hZCIscik7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKG89MDtvPFNzLmxlbmd0aDtvKyspVWUoU3Nbb10scik7YnJlYWs7Y2FzZSJzb3VyY2UiOlVlKCJlcnJvciIscik7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6VWUoImVycm9yIixyKSxVZSgibG9hZCIscik7YnJlYWs7Y2FzZSJkZXRhaWxzIjpVZSgidG9nZ2xlIixyKTticmVhaztjYXNlImlucHV0IjpydihyLGkpLFVlKCJpbnZhbGlkIixyKTticmVhaztjYXNlInNlbGVjdCI6ci5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIWkubXVsdGlwbGV9LFVlKCJpbnZhbGlkIixyKTticmVhaztjYXNlInRleHRhcmVhIjppdihyLGkpLFVlKCJpbnZhbGlkIixyKX1KZihuLGkpLG89bnVsbDtmb3IodmFyIGwgaW4gaSlpZihpLmhhc093blByb3BlcnR5KGwpKXt2YXIgcz1pW2xdO2w9PT0iY2hpbGRyZW4iP3R5cGVvZiBzPT0ic3RyaW5nIj9yLnRleHRDb250ZW50IT09cyYmKGkuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIT09ITAmJmx1KHIudGV4dENvbnRlbnQscyxlKSxvPVsiY2hpbGRyZW4iLHNdKTp0eXBlb2Ygcz09Im51bWJlciImJnIudGV4dENvbnRlbnQhPT0iIitzJiYoaS5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmchPT0hMCYmbHUoci50ZXh0Q29udGVudCxzLGUpLG89WyJjaGlsZHJlbiIsIiIrc10pOkpzLmhhc093blByb3BlcnR5KGwpJiZzIT1udWxsJiZsPT09Im9uU2Nyb2xsIiYmVWUoInNjcm9sbCIscil9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOlphKHIpLG92KHIsaSwhMCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6WmEociksbHYocik7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2Uib3B0aW9uIjpicmVhaztkZWZhdWx0OnR5cGVvZiBpLm9uQ2xpY2s9PSJmdW5jdGlvbiImJihyLm9uY2xpY2s9b2MpfXI9byx0LnVwZGF0ZVF1ZXVlPXIsciE9PW51bGwmJih0LmZsYWdzfD00KX1lbHNle2w9by5ub2RlVHlwZT09PTk/bzpvLm93bmVyRG9jdW1lbnQsZT09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiYmKGU9TjEobikpLGU9PT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI/bj09PSJzY3JpcHQiPyhlPWwuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5pbm5lckhUTUw9IjxzY3JpcHQ+PFwvc2NyaXB0PiIsZT1lLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCkpOnR5cGVvZiByLmlzPT0ic3RyaW5nIj9lPWwuY3JlYXRlRWxlbWVudChuLHtpczpyLmlzfSk6KGU9bC5jcmVhdGVFbGVtZW50KG4pLG49PT0ic2VsZWN0IiYmKGw9ZSxyLm11bHRpcGxlP2wubXVsdGlwbGU9ITA6ci5zaXplJiYobC5zaXplPXIuc2l6ZSkpKTplPWwuY3JlYXRlRWxlbWVudE5TKGUsbiksZVtocl09dCxlW3NhXT1yLGV3KGUsdCwhMSwhMSksdC5zdGF0ZU5vZGU9ZTtlOntzd2l0Y2gobD1aZihuLHIpLG4pe2Nhc2UiZGlhbG9nIjpVZSgiY2FuY2VsIixlKSxVZSgiY2xvc2UiLGUpLG89cjticmVhaztjYXNlImlmcmFtZSI6Y2FzZSJvYmplY3QiOmNhc2UiZW1iZWQiOlVlKCJsb2FkIixlKSxvPXI7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKG89MDtvPFNzLmxlbmd0aDtvKyspVWUoU3Nbb10sZSk7bz1yO2JyZWFrO2Nhc2Uic291cmNlIjpVZSgiZXJyb3IiLGUpLG89cjticmVhaztjYXNlImltZyI6Y2FzZSJpbWFnZSI6Y2FzZSJsaW5rIjpVZSgiZXJyb3IiLGUpLFVlKCJsb2FkIixlKSxvPXI7YnJlYWs7Y2FzZSJkZXRhaWxzIjpVZSgidG9nZ2xlIixlKSxvPXI7YnJlYWs7Y2FzZSJpbnB1dCI6cnYoZSxyKSxvPUtmKGUsciksVWUoImludmFsaWQiLGUpO2JyZWFrO2Nhc2Uib3B0aW9uIjpvPXI7YnJlYWs7Y2FzZSJzZWxlY3QiOmUuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFyLm11bHRpcGxlfSxvPXJ0KHt9LHIse3ZhbHVlOnZvaWQgMH0pLFVlKCJpbnZhbGlkIixlKTticmVhaztjYXNlInRleHRhcmVhIjppdihlLHIpLG89WGYoZSxyKSxVZSgiaW52YWxpZCIsZSk7YnJlYWs7ZGVmYXVsdDpvPXJ9SmYobixvKSxzPW87Zm9yKGkgaW4gcylpZihzLmhhc093blByb3BlcnR5KGkpKXt2YXIgYT1zW2ldO2k9PT0ic3R5bGUiP08xKGUsYSk6aT09PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/KGE9YT9hLl9faHRtbDp2b2lkIDAsYSE9bnVsbCYmUjEoZSxhKSk6aT09PSJjaGlsZHJlbiI/dHlwZW9mIGE9PSJzdHJpbmciPyhuIT09InRleHRhcmVhInx8YSE9PSIiKSYmWnMoZSxhKTp0eXBlb2YgYT09Im51bWJlciImJlpzKGUsIiIrYSk6aSE9PSJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciJiZpIT09InN1cHByZXNzSHlkcmF0aW9uV2FybmluZyImJmkhPT0iYXV0b0ZvY3VzIiYmKEpzLmhhc093blByb3BlcnR5KGkpP2EhPW51bGwmJmk9PT0ib25TY3JvbGwiJiZVZSgic2Nyb2xsIixlKTphIT1udWxsJiZWcChlLGksYSxsKSl9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOlphKGUpLG92KGUsciwhMSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6WmEoZSksbHYoZSk7YnJlYWs7Y2FzZSJvcHRpb24iOnIudmFsdWUhPW51bGwmJmUuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIrUG8oci52YWx1ZSkpO2JyZWFrO2Nhc2Uic2VsZWN0IjplLm11bHRpcGxlPSEhci5tdWx0aXBsZSxpPXIudmFsdWUsaSE9bnVsbD9hbChlLCEhci5tdWx0aXBsZSxpLCExKTpyLmRlZmF1bHRWYWx1ZSE9bnVsbCYmYWwoZSwhIXIubXVsdGlwbGUsci5kZWZhdWx0VmFsdWUsITApO2JyZWFrO2RlZmF1bHQ6dHlwZW9mIG8ub25DbGljaz09ImZ1bmN0aW9uIiYmKGUub25jbGljaz1vYyl9c3dpdGNoKG4pe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6cj0hIXIuYXV0b0ZvY3VzO2JyZWFrIGU7Y2FzZSJpbWciOnI9ITA7YnJlYWsgZTtkZWZhdWx0OnI9ITF9fXImJih0LmZsYWdzfD00KX10LnJlZiE9PW51bGwmJih0LmZsYWdzfD01MTIsdC5mbGFnc3w9MjA5NzE1Mil9cmV0dXJuIHp0KHQpLG51bGw7Y2FzZSA2OmlmKGUmJnQuc3RhdGVOb2RlIT1udWxsKW53KGUsdCxlLm1lbW9pemVkUHJvcHMscik7ZWxzZXtpZih0eXBlb2YgciE9InN0cmluZyImJnQuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihVKDE2NikpO2lmKG49dGkodWEuY3VycmVudCksdGkoeHIuY3VycmVudCksc3UodCkpe2lmKHI9dC5zdGF0ZU5vZGUsbj10Lm1lbW9pemVkUHJvcHMscltocl09dCwoaT1yLm5vZGVWYWx1ZSE9PW4pJiYoZT1DbixlIT09bnVsbCkpc3dpdGNoKGUudGFnKXtjYXNlIDM6bHUoci5ub2RlVmFsdWUsbiwoZS5tb2RlJjEpIT09MCk7YnJlYWs7Y2FzZSA1OmUubWVtb2l6ZWRQcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmchPT0hMCYmbHUoci5ub2RlVmFsdWUsbiwoZS5tb2RlJjEpIT09MCl9aSYmKHQuZmxhZ3N8PTQpfWVsc2Ugcj0obi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQpLmNyZWF0ZVRleHROb2RlKHIpLHJbaHJdPXQsdC5zdGF0ZU5vZGU9cn1yZXR1cm4genQodCksbnVsbDtjYXNlIDEzOmlmKEdlKHFlKSxyPXQubWVtb2l6ZWRTdGF0ZSxlPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQhPT1udWxsKXtpZihZZSYmRW4hPT1udWxsJiZ0Lm1vZGUmMSYmISh0LmZsYWdzJjEyOCkpeHgoKSxfbCgpLHQuZmxhZ3N8PTk4NTYwLGk9ITE7ZWxzZSBpZihpPXN1KHQpLHIhPT1udWxsJiZyLmRlaHlkcmF0ZWQhPT1udWxsKXtpZihlPT09bnVsbCl7aWYoIWkpdGhyb3cgRXJyb3IoVSgzMTgpKTtpZihpPXQubWVtb2l6ZWRTdGF0ZSxpPWkhPT1udWxsP2kuZGVoeWRyYXRlZDpudWxsLCFpKXRocm93IEVycm9yKFUoMzE3KSk7aVtocl09dH1lbHNlIF9sKCksISh0LmZsYWdzJjEyOCkmJih0Lm1lbW9pemVkU3RhdGU9bnVsbCksdC5mbGFnc3w9NDt6dCh0KSxpPSExfWVsc2UgZXIhPT1udWxsJiYoT2goZXIpLGVyPW51bGwpLGk9ITA7aWYoIWkpcmV0dXJuIHQuZmxhZ3MmNjU1MzY/dDpudWxsfXJldHVybiB0LmZsYWdzJjEyOD8odC5sYW5lcz1uLHQpOihyPXIhPT1udWxsLHIhPT0oZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiZyJiYodC5jaGlsZC5mbGFnc3w9ODE5Mix0Lm1vZGUmMSYmKGU9PT1udWxsfHxxZS5jdXJyZW50JjE/X3Q9PT0wJiYoX3Q9Myk6a2coKSkpLHQudXBkYXRlUXVldWUhPT1udWxsJiYodC5mbGFnc3w9NCksenQodCksbnVsbCk7Y2FzZSA0OnJldHVybiBFbCgpLENoKGUsdCksZT09PW51bGwmJmlhKHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLHp0KHQpLG51bGw7Y2FzZSAxMDpyZXR1cm4gdWcodC50eXBlLl9jb250ZXh0KSx6dCh0KSxudWxsO2Nhc2UgMTc6cmV0dXJuIGduKHQudHlwZSkmJmljKCksenQodCksbnVsbDtjYXNlIDE5OmlmKEdlKHFlKSxpPXQubWVtb2l6ZWRTdGF0ZSxpPT09bnVsbClyZXR1cm4genQodCksbnVsbDtpZihyPSh0LmZsYWdzJjEyOCkhPT0wLGw9aS5yZW5kZXJpbmcsbD09PW51bGwpaWYocil1cyhpLCExKTtlbHNle2lmKF90IT09MHx8ZSE9PW51bGwmJmUuZmxhZ3MmMTI4KWZvcihlPXQuY2hpbGQ7ZSE9PW51bGw7KXtpZihsPWZjKGUpLGwhPT1udWxsKXtmb3IodC5mbGFnc3w9MTI4LHVzKGksITEpLHI9bC51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKHQudXBkYXRlUXVldWU9cix0LmZsYWdzfD00KSx0LnN1YnRyZWVGbGFncz0wLHI9bixuPXQuY2hpbGQ7biE9PW51bGw7KWk9bixlPXIsaS5mbGFncyY9MTQ2ODAwNjYsbD1pLmFsdGVybmF0ZSxsPT09bnVsbD8oaS5jaGlsZExhbmVzPTAsaS5sYW5lcz1lLGkuY2hpbGQ9bnVsbCxpLnN1YnRyZWVGbGFncz0wLGkubWVtb2l6ZWRQcm9wcz1udWxsLGkubWVtb2l6ZWRTdGF0ZT1udWxsLGkudXBkYXRlUXVldWU9bnVsbCxpLmRlcGVuZGVuY2llcz1udWxsLGkuc3RhdGVOb2RlPW51bGwpOihpLmNoaWxkTGFuZXM9bC5jaGlsZExhbmVzLGkubGFuZXM9bC5sYW5lcyxpLmNoaWxkPWwuY2hpbGQsaS5zdWJ0cmVlRmxhZ3M9MCxpLmRlbGV0aW9ucz1udWxsLGkubWVtb2l6ZWRQcm9wcz1sLm1lbW9pemVkUHJvcHMsaS5tZW1vaXplZFN0YXRlPWwubWVtb2l6ZWRTdGF0ZSxpLnVwZGF0ZVF1ZXVlPWwudXBkYXRlUXVldWUsaS50eXBlPWwudHlwZSxlPWwuZGVwZW5kZW5jaWVzLGkuZGVwZW5kZW5jaWVzPWU9PT1udWxsP251bGw6e2xhbmVzOmUubGFuZXMsZmlyc3RDb250ZXh0OmUuZmlyc3RDb250ZXh0fSksbj1uLnNpYmxpbmc7cmV0dXJuIHplKHFlLHFlLmN1cnJlbnQmMXwyKSx0LmNoaWxkfWU9ZS5zaWJsaW5nfWkudGFpbCE9PW51bGwmJmZ0KCk+JGwmJih0LmZsYWdzfD0xMjgscj0hMCx1cyhpLCExKSx0LmxhbmVzPTQxOTQzMDQpfWVsc2V7aWYoIXIpaWYoZT1mYyhsKSxlIT09bnVsbCl7aWYodC5mbGFnc3w9MTI4LHI9ITAsbj1lLnVwZGF0ZVF1ZXVlLG4hPT1udWxsJiYodC51cGRhdGVRdWV1ZT1uLHQuZmxhZ3N8PTQpLHVzKGksITApLGkudGFpbD09PW51bGwmJmkudGFpbE1vZGU9PT0iaGlkZGVuIiYmIWwuYWx0ZXJuYXRlJiYhWWUpcmV0dXJuIHp0KHQpLG51bGx9ZWxzZSAyKmZ0KCktaS5yZW5kZXJpbmdTdGFydFRpbWU+JGwmJm4hPT0xMDczNzQxODI0JiYodC5mbGFnc3w9MTI4LHI9ITAsdXMoaSwhMSksdC5sYW5lcz00MTk0MzA0KTtpLmlzQmFja3dhcmRzPyhsLnNpYmxpbmc9dC5jaGlsZCx0LmNoaWxkPWwpOihuPWkubGFzdCxuIT09bnVsbD9uLnNpYmxpbmc9bDp0LmNoaWxkPWwsaS5sYXN0PWwpfXJldHVybiBpLnRhaWwhPT1udWxsPyh0PWkudGFpbCxpLnJlbmRlcmluZz10LGkudGFpbD10LnNpYmxpbmcsaS5yZW5kZXJpbmdTdGFydFRpbWU9ZnQoKSx0LnNpYmxpbmc9bnVsbCxuPXFlLmN1cnJlbnQsemUocWUscj9uJjF8MjpuJjEpLHQpOih6dCh0KSxudWxsKTtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuICRnKCkscj10Lm1lbW9pemVkU3RhdGUhPT1udWxsLGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUhPT1udWxsIT09ciYmKHQuZmxhZ3N8PTgxOTIpLHImJnQubW9kZSYxP3duJjEwNzM3NDE4MjQmJih6dCh0KSx0LnN1YnRyZWVGbGFncyY2JiYodC5mbGFnc3w9ODE5MikpOnp0KHQpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbnVsbDtjYXNlIDI1OnJldHVybiBudWxsfXRocm93IEVycm9yKFUoMTU2LHQudGFnKSl9ZnVuY3Rpb24gSGsoZSx0KXtzd2l0Y2goaWcodCksdC50YWcpe2Nhc2UgMTpyZXR1cm4gZ24odC50eXBlKSYmaWMoKSxlPXQuZmxhZ3MsZSY2NTUzNj8odC5mbGFncz1lJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDM6cmV0dXJuIEVsKCksR2UocG4pLEdlKEd0KSxwZygpLGU9dC5mbGFncyxlJjY1NTM2JiYhKGUmMTI4KT8odC5mbGFncz1lJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDU6cmV0dXJuIGhnKHQpLG51bGw7Y2FzZSAxMzppZihHZShxZSksZT10Lm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJmUuZGVoeWRyYXRlZCE9PW51bGwpe2lmKHQuYWx0ZXJuYXRlPT09bnVsbCl0aHJvdyBFcnJvcihVKDM0MCkpO19sKCl9cmV0dXJuIGU9dC5mbGFncyxlJjY1NTM2Pyh0LmZsYWdzPWUmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgMTk6cmV0dXJuIEdlKHFlKSxudWxsO2Nhc2UgNDpyZXR1cm4gRWwoKSxudWxsO2Nhc2UgMTA6cmV0dXJuIHVnKHQudHlwZS5fY29udGV4dCksbnVsbDtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuICRnKCksbnVsbDtjYXNlIDI0OnJldHVybiBudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciBjdT0hMSxCdD0hMSxLaz10eXBlb2YgV2Vha1NldD09ImZ1bmN0aW9uIj9XZWFrU2V0OlNldCxxPW51bGw7ZnVuY3Rpb24gbmwoZSx0KXt2YXIgbj1lLnJlZjtpZihuIT09bnVsbClpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIil0cnl7bihudWxsKX1jYXRjaChyKXtpdChlLHQscil9ZWxzZSBuLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiAkaChlLHQsbil7dHJ5e24oKX1jYXRjaChyKXtpdChlLHQscil9fXZhciBYdj0hMTtmdW5jdGlvbiBHayhlLHQpe2lmKGFoPXRjLGU9bHgoKSxyZyhlKSl7aWYoInNlbGVjdGlvblN0YXJ0ImluIGUpdmFyIG49e3N0YXJ0OmUuc2VsZWN0aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtlbHNlIGU6e249KG49ZS5vd25lckRvY3VtZW50KSYmbi5kZWZhdWx0Vmlld3x8d2luZG93O3ZhciByPW4uZ2V0U2VsZWN0aW9uJiZuLmdldFNlbGVjdGlvbigpO2lmKHImJnIucmFuZ2VDb3VudCE9PTApe249ci5hbmNob3JOb2RlO3ZhciBvPXIuYW5jaG9yT2Zmc2V0LGk9ci5mb2N1c05vZGU7cj1yLmZvY3VzT2Zmc2V0O3RyeXtuLm5vZGVUeXBlLGkubm9kZVR5cGV9Y2F0Y2h7bj1udWxsO2JyZWFrIGV9dmFyIGw9MCxzPS0xLGE9LTEsdT0wLGM9MCxkPWUsZj1udWxsO3Q6Zm9yKDs7KXtmb3IodmFyIGg7ZCE9PW58fG8hPT0wJiZkLm5vZGVUeXBlIT09M3x8KHM9bCtvKSxkIT09aXx8ciE9PTAmJmQubm9kZVR5cGUhPT0zfHwoYT1sK3IpLGQubm9kZVR5cGU9PT0zJiYobCs9ZC5ub2RlVmFsdWUubGVuZ3RoKSwoaD1kLmZpcnN0Q2hpbGQpIT09bnVsbDspZj1kLGQ9aDtmb3IoOzspe2lmKGQ9PT1lKWJyZWFrIHQ7aWYoZj09PW4mJisrdT09PW8mJihzPWwpLGY9PT1pJiYrK2M9PT1yJiYoYT1sKSwoaD1kLm5leHRTaWJsaW5nKSE9PW51bGwpYnJlYWs7ZD1mLGY9ZC5wYXJlbnROb2RlfWQ9aH1uPXM9PT0tMXx8YT09PS0xP251bGw6e3N0YXJ0OnMsZW5kOmF9fWVsc2Ugbj1udWxsfW49bnx8e3N0YXJ0OjAsZW5kOjB9fWVsc2Ugbj1udWxsO2Zvcih1aD17Zm9jdXNlZEVsZW06ZSxzZWxlY3Rpb25SYW5nZTpufSx0Yz0hMSxxPXQ7cSE9PW51bGw7KWlmKHQ9cSxlPXQuY2hpbGQsKHQuc3VidHJlZUZsYWdzJjEwMjgpIT09MCYmZSE9PW51bGwpZS5yZXR1cm49dCxxPWU7ZWxzZSBmb3IoO3EhPT1udWxsOyl7dD1xO3RyeXt2YXIgZz10LmFsdGVybmF0ZTtpZih0LmZsYWdzJjEwMjQpc3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmJyZWFrO2Nhc2UgMTppZihnIT09bnVsbCl7dmFyIG09Zy5tZW1vaXplZFByb3BzLF89Zy5tZW1vaXplZFN0YXRlLHY9dC5zdGF0ZU5vZGUseT12LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHQuZWxlbWVudFR5cGU9PT10LnR5cGU/bTpKbih0LnR5cGUsbSksXyk7di5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZT15fWJyZWFrO2Nhc2UgMzp2YXIgeD10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvO3gubm9kZVR5cGU9PT0xP3gudGV4dENvbnRlbnQ9IiI6eC5ub2RlVHlwZT09PTkmJnguZG9jdW1lbnRFbGVtZW50JiZ4LnJlbW92ZUNoaWxkKHguZG9jdW1lbnRFbGVtZW50KTticmVhaztjYXNlIDU6Y2FzZSA2OmNhc2UgNDpjYXNlIDE3OmJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoVSgxNjMpKX19Y2F0Y2goUyl7aXQodCx0LnJldHVybixTKX1pZihlPXQuc2libGluZyxlIT09bnVsbCl7ZS5yZXR1cm49dC5yZXR1cm4scT1lO2JyZWFrfXE9dC5yZXR1cm59cmV0dXJuIGc9WHYsWHY9ITEsZ31mdW5jdGlvbiBBcyhlLHQsbil7dmFyIHI9dC51cGRhdGVRdWV1ZTtpZihyPXIhPT1udWxsP3IubGFzdEVmZmVjdDpudWxsLHIhPT1udWxsKXt2YXIgbz1yPXIubmV4dDtkb3tpZigoby50YWcmZSk9PT1lKXt2YXIgaT1vLmRlc3Ryb3k7by5kZXN0cm95PXZvaWQgMCxpIT09dm9pZCAwJiYkaCh0LG4saSl9bz1vLm5leHR9d2hpbGUobyE9PXIpfX1mdW5jdGlvbiByZChlLHQpe2lmKHQ9dC51cGRhdGVRdWV1ZSx0PXQhPT1udWxsP3QubGFzdEVmZmVjdDpudWxsLHQhPT1udWxsKXt2YXIgbj10PXQubmV4dDtkb3tpZigobi50YWcmZSk9PT1lKXt2YXIgcj1uLmNyZWF0ZTtuLmRlc3Ryb3k9cigpfW49bi5uZXh0fXdoaWxlKG4hPT10KX19ZnVuY3Rpb24ga2goZSl7dmFyIHQ9ZS5yZWY7aWYodCE9PW51bGwpe3ZhciBuPWUuc3RhdGVOb2RlO3N3aXRjaChlLnRhZyl7Y2FzZSA1OmU9bjticmVhaztkZWZhdWx0OmU9bn10eXBlb2YgdD09ImZ1bmN0aW9uIj90KGUpOnQuY3VycmVudD1lfX1mdW5jdGlvbiBydyhlKXt2YXIgdD1lLmFsdGVybmF0ZTt0IT09bnVsbCYmKGUuYWx0ZXJuYXRlPW51bGwscncodCkpLGUuY2hpbGQ9bnVsbCxlLmRlbGV0aW9ucz1udWxsLGUuc2libGluZz1udWxsLGUudGFnPT09NSYmKHQ9ZS5zdGF0ZU5vZGUsdCE9PW51bGwmJihkZWxldGUgdFtocl0sZGVsZXRlIHRbc2FdLGRlbGV0ZSB0W2ZoXSxkZWxldGUgdFtOa10sZGVsZXRlIHRbUmtdKSksZS5zdGF0ZU5vZGU9bnVsbCxlLnJldHVybj1udWxsLGUuZGVwZW5kZW5jaWVzPW51bGwsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS5wZW5kaW5nUHJvcHM9bnVsbCxlLnN0YXRlTm9kZT1udWxsLGUudXBkYXRlUXVldWU9bnVsbH1mdW5jdGlvbiBvdyhlKXtyZXR1cm4gZS50YWc9PT01fHxlLnRhZz09PTN8fGUudGFnPT09NH1mdW5jdGlvbiBRdihlKXtlOmZvcig7Oyl7Zm9yKDtlLnNpYmxpbmc9PT1udWxsOyl7aWYoZS5yZXR1cm49PT1udWxsfHxvdyhlLnJldHVybikpcmV0dXJuIG51bGw7ZT1lLnJldHVybn1mb3IoZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZztlLnRhZyE9PTUmJmUudGFnIT09NiYmZS50YWchPT0xODspe2lmKGUuZmxhZ3MmMnx8ZS5jaGlsZD09PW51bGx8fGUudGFnPT09NCljb250aW51ZSBlO2UuY2hpbGQucmV0dXJuPWUsZT1lLmNoaWxkfWlmKCEoZS5mbGFncyYyKSlyZXR1cm4gZS5zdGF0ZU5vZGV9fWZ1bmN0aW9uIFRoKGUsdCxuKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpZT1lLnN0YXRlTm9kZSx0P24ubm9kZVR5cGU9PT04P24ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0KTpuLmluc2VydEJlZm9yZShlLHQpOihuLm5vZGVUeXBlPT09OD8odD1uLnBhcmVudE5vZGUsdC5pbnNlcnRCZWZvcmUoZSxuKSk6KHQ9bix0LmFwcGVuZENoaWxkKGUpKSxuPW4uX3JlYWN0Um9vdENvbnRhaW5lcixuIT1udWxsfHx0Lm9uY2xpY2shPT1udWxsfHwodC5vbmNsaWNrPW9jKSk7ZWxzZSBpZihyIT09NCYmKGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKFRoKGUsdCxuKSxlPWUuc2libGluZztlIT09bnVsbDspVGgoZSx0LG4pLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIGJoKGUsdCxuKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpZT1lLnN0YXRlTm9kZSx0P24uaW5zZXJ0QmVmb3JlKGUsdCk6bi5hcHBlbmRDaGlsZChlKTtlbHNlIGlmKHIhPT00JiYoZT1lLmNoaWxkLGUhPT1udWxsKSlmb3IoYmgoZSx0LG4pLGU9ZS5zaWJsaW5nO2UhPT1udWxsOyliaChlLHQsbiksZT1lLnNpYmxpbmd9dmFyIE10PW51bGwsWm49ITE7ZnVuY3Rpb24gcm8oZSx0LG4pe2ZvcihuPW4uY2hpbGQ7biE9PW51bGw7KWl3KGUsdCxuKSxuPW4uc2libGluZ31mdW5jdGlvbiBpdyhlLHQsbil7aWYoeXImJnR5cGVvZiB5ci5vbkNvbW1pdEZpYmVyVW5tb3VudD09ImZ1bmN0aW9uIil0cnl7eXIub25Db21taXRGaWJlclVubW91bnQoWGMsbil9Y2F0Y2h7fXN3aXRjaChuLnRhZyl7Y2FzZSA1OkJ0fHxubChuLHQpO2Nhc2UgNjp2YXIgcj1NdCxvPVpuO010PW51bGwscm8oZSx0LG4pLE10PXIsWm49byxNdCE9PW51bGwmJihabj8oZT1NdCxuPW4uc3RhdGVOb2RlLGUubm9kZVR5cGU9PT04P2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKTplLnJlbW92ZUNoaWxkKG4pKTpNdC5yZW1vdmVDaGlsZChuLnN0YXRlTm9kZSkpO2JyZWFrO2Nhc2UgMTg6TXQhPT1udWxsJiYoWm4/KGU9TXQsbj1uLnN0YXRlTm9kZSxlLm5vZGVUeXBlPT09OD91ZihlLnBhcmVudE5vZGUsbik6ZS5ub2RlVHlwZT09PTEmJnVmKGUsbiksbmEoZSkpOnVmKE10LG4uc3RhdGVOb2RlKSk7YnJlYWs7Y2FzZSA0OnI9TXQsbz1abixNdD1uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLFpuPSEwLHJvKGUsdCxuKSxNdD1yLFpuPW87YnJlYWs7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKCFCdCYmKHI9bi51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKHI9ci5sYXN0RWZmZWN0LHIhPT1udWxsKSkpe289cj1yLm5leHQ7ZG97dmFyIGk9byxsPWkuZGVzdHJveTtpPWkudGFnLGwhPT12b2lkIDAmJihpJjJ8fGkmNCkmJiRoKG4sdCxsKSxvPW8ubmV4dH13aGlsZShvIT09cil9cm8oZSx0LG4pO2JyZWFrO2Nhc2UgMTppZighQnQmJihubChuLHQpLHI9bi5zdGF0ZU5vZGUsdHlwZW9mIHIuY29tcG9uZW50V2lsbFVubW91bnQ9PSJmdW5jdGlvbiIpKXRyeXtyLnByb3BzPW4ubWVtb2l6ZWRQcm9wcyxyLnN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSxyLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2gocyl7aXQobix0LHMpfXJvKGUsdCxuKTticmVhaztjYXNlIDIxOnJvKGUsdCxuKTticmVhaztjYXNlIDIyOm4ubW9kZSYxPyhCdD0ocj1CdCl8fG4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwscm8oZSx0LG4pLEJ0PXIpOnJvKGUsdCxuKTticmVhaztkZWZhdWx0OnJvKGUsdCxuKX19ZnVuY3Rpb24gSnYoZSl7dmFyIHQ9ZS51cGRhdGVRdWV1ZTtpZih0IT09bnVsbCl7ZS51cGRhdGVRdWV1ZT1udWxsO3ZhciBuPWUuc3RhdGVOb2RlO249PT1udWxsJiYobj1lLnN0YXRlTm9kZT1uZXcgS2spLHQuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1uVC5iaW5kKG51bGwsZSxyKTtuLmhhcyhyKXx8KG4uYWRkKHIpLHIudGhlbihvLG8pKX0pfX1mdW5jdGlvbiBZbihlLHQpe3ZhciBuPXQuZGVsZXRpb25zO2lmKG4hPT1udWxsKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdO3RyeXt2YXIgaT1lLGw9dCxzPWw7ZTpmb3IoO3MhPT1udWxsOyl7c3dpdGNoKHMudGFnKXtjYXNlIDU6TXQ9cy5zdGF0ZU5vZGUsWm49ITE7YnJlYWsgZTtjYXNlIDM6TXQ9cy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxabj0hMDticmVhayBlO2Nhc2UgNDpNdD1zLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLFpuPSEwO2JyZWFrIGV9cz1zLnJldHVybn1pZihNdD09PW51bGwpdGhyb3cgRXJyb3IoVSgxNjApKTtpdyhpLGwsbyksTXQ9bnVsbCxabj0hMTt2YXIgYT1vLmFsdGVybmF0ZTthIT09bnVsbCYmKGEucmV0dXJuPW51bGwpLG8ucmV0dXJuPW51bGx9Y2F0Y2godSl7aXQobyx0LHUpfX1pZih0LnN1YnRyZWVGbGFncyYxMjg1NClmb3IodD10LmNoaWxkO3QhPT1udWxsOylsdyh0LGUpLHQ9dC5zaWJsaW5nfWZ1bmN0aW9uIGx3KGUsdCl7dmFyIG49ZS5hbHRlcm5hdGUscj1lLmZsYWdzO3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKFluKHQsZSksY3IoZSksciY0KXt0cnl7QXMoMyxlLGUucmV0dXJuKSxyZCgzLGUpfWNhdGNoKG0pe2l0KGUsZS5yZXR1cm4sbSl9dHJ5e0FzKDUsZSxlLnJldHVybil9Y2F0Y2gobSl7aXQoZSxlLnJldHVybixtKX19YnJlYWs7Y2FzZSAxOlluKHQsZSksY3IoZSksciY1MTImJm4hPT1udWxsJiZubChuLG4ucmV0dXJuKTticmVhaztjYXNlIDU6aWYoWW4odCxlKSxjcihlKSxyJjUxMiYmbiE9PW51bGwmJm5sKG4sbi5yZXR1cm4pLGUuZmxhZ3MmMzIpe3ZhciBvPWUuc3RhdGVOb2RlO3RyeXtacyhvLCIiKX1jYXRjaChtKXtpdChlLGUucmV0dXJuLG0pfX1pZihyJjQmJihvPWUuc3RhdGVOb2RlLG8hPW51bGwpKXt2YXIgaT1lLm1lbW9pemVkUHJvcHMsbD1uIT09bnVsbD9uLm1lbW9pemVkUHJvcHM6aSxzPWUudHlwZSxhPWUudXBkYXRlUXVldWU7aWYoZS51cGRhdGVRdWV1ZT1udWxsLGEhPT1udWxsKXRyeXtzPT09ImlucHV0IiYmaS50eXBlPT09InJhZGlvIiYmaS5uYW1lIT1udWxsJiZUMShvLGkpLFpmKHMsbCk7dmFyIHU9WmYocyxpKTtmb3IobD0wO2w8YS5sZW5ndGg7bCs9Mil7dmFyIGM9YVtsXSxkPWFbbCsxXTtjPT09InN0eWxlIj9PMShvLGQpOmM9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP1IxKG8sZCk6Yz09PSJjaGlsZHJlbiI/WnMobyxkKTpWcChvLGMsZCx1KX1zd2l0Y2gocyl7Y2FzZSJpbnB1dCI6R2YobyxpKTticmVhaztjYXNlInRleHRhcmVhIjpiMShvLGkpO2JyZWFrO2Nhc2Uic2VsZWN0Ijp2YXIgZj1vLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7by5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhaS5tdWx0aXBsZTt2YXIgaD1pLnZhbHVlO2ghPW51bGw/YWwobywhIWkubXVsdGlwbGUsaCwhMSk6ZiE9PSEhaS5tdWx0aXBsZSYmKGkuZGVmYXVsdFZhbHVlIT1udWxsP2FsKG8sISFpLm11bHRpcGxlLGkuZGVmYXVsdFZhbHVlLCEwKTphbChvLCEhaS5tdWx0aXBsZSxpLm11bHRpcGxlP1tdOiIiLCExKSl9b1tzYV09aX1jYXRjaChtKXtpdChlLGUucmV0dXJuLG0pfX1icmVhaztjYXNlIDY6aWYoWW4odCxlKSxjcihlKSxyJjQpe2lmKGUuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihVKDE2MikpO289ZS5zdGF0ZU5vZGUsaT1lLm1lbW9pemVkUHJvcHM7dHJ5e28ubm9kZVZhbHVlPWl9Y2F0Y2gobSl7aXQoZSxlLnJldHVybixtKX19YnJlYWs7Y2FzZSAzOmlmKFluKHQsZSksY3IoZSksciY0JiZuIT09bnVsbCYmbi5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl0cnl7bmEodC5jb250YWluZXJJbmZvKX1jYXRjaChtKXtpdChlLGUucmV0dXJuLG0pfWJyZWFrO2Nhc2UgNDpZbih0LGUpLGNyKGUpO2JyZWFrO2Nhc2UgMTM6WW4odCxlKSxjcihlKSxvPWUuY2hpbGQsby5mbGFncyY4MTkyJiYoaT1vLm1lbW9pemVkU3RhdGUhPT1udWxsLG8uc3RhdGVOb2RlLmlzSGlkZGVuPWksIWl8fG8uYWx0ZXJuYXRlIT09bnVsbCYmby5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fChFZz1mdCgpKSksciY0JiZKdihlKTticmVhaztjYXNlIDIyOmlmKGM9biE9PW51bGwmJm4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsZS5tb2RlJjE/KEJ0PSh1PUJ0KXx8YyxZbih0LGUpLEJ0PXUpOlluKHQsZSksY3IoZSksciY4MTkyKXtpZih1PWUubWVtb2l6ZWRTdGF0ZSE9PW51bGwsKGUuc3RhdGVOb2RlLmlzSGlkZGVuPXUpJiYhYyYmZS5tb2RlJjEpZm9yKHE9ZSxjPWUuY2hpbGQ7YyE9PW51bGw7KXtmb3IoZD1xPWM7cSE9PW51bGw7KXtzd2l0Y2goZj1xLGg9Zi5jaGlsZCxmLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OkFzKDQsZixmLnJldHVybik7YnJlYWs7Y2FzZSAxOm5sKGYsZi5yZXR1cm4pO3ZhciBnPWYuc3RhdGVOb2RlO2lmKHR5cGVvZiBnLmNvbXBvbmVudFdpbGxVbm1vdW50PT0iZnVuY3Rpb24iKXtyPWYsbj1mLnJldHVybjt0cnl7dD1yLGcucHJvcHM9dC5tZW1vaXplZFByb3BzLGcuc3RhdGU9dC5tZW1vaXplZFN0YXRlLGcuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChtKXtpdChyLG4sbSl9fWJyZWFrO2Nhc2UgNTpubChmLGYucmV0dXJuKTticmVhaztjYXNlIDIyOmlmKGYubWVtb2l6ZWRTdGF0ZSE9PW51bGwpe3F2KGQpO2NvbnRpbnVlfX1oIT09bnVsbD8oaC5yZXR1cm49ZixxPWgpOnF2KGQpfWM9Yy5zaWJsaW5nfWU6Zm9yKGM9bnVsbCxkPWU7Oyl7aWYoZC50YWc9PT01KXtpZihjPT09bnVsbCl7Yz1kO3RyeXtvPWQuc3RhdGVOb2RlLHU/KGk9by5zdHlsZSx0eXBlb2YgaS5zZXRQcm9wZXJ0eT09ImZ1bmN0aW9uIj9pLnNldFByb3BlcnR5KCJkaXNwbGF5Iiwibm9uZSIsImltcG9ydGFudCIpOmkuZGlzcGxheT0ibm9uZSIpOihzPWQuc3RhdGVOb2RlLGE9ZC5tZW1vaXplZFByb3BzLnN0eWxlLGw9YSE9bnVsbCYmYS5oYXNPd25Qcm9wZXJ0eSgiZGlzcGxheSIpP2EuZGlzcGxheTpudWxsLHMuc3R5bGUuZGlzcGxheT1QMSgiZGlzcGxheSIsbCkpfWNhdGNoKG0pe2l0KGUsZS5yZXR1cm4sbSl9fX1lbHNlIGlmKGQudGFnPT09Nil7aWYoYz09PW51bGwpdHJ5e2Quc3RhdGVOb2RlLm5vZGVWYWx1ZT11PyIiOmQubWVtb2l6ZWRQcm9wc31jYXRjaChtKXtpdChlLGUucmV0dXJuLG0pfX1lbHNlIGlmKChkLnRhZyE9PTIyJiZkLnRhZyE9PTIzfHxkLm1lbW9pemVkU3RhdGU9PT1udWxsfHxkPT09ZSkmJmQuY2hpbGQhPT1udWxsKXtkLmNoaWxkLnJldHVybj1kLGQ9ZC5jaGlsZDtjb250aW51ZX1pZihkPT09ZSlicmVhayBlO2Zvcig7ZC5zaWJsaW5nPT09bnVsbDspe2lmKGQucmV0dXJuPT09bnVsbHx8ZC5yZXR1cm49PT1lKWJyZWFrIGU7Yz09PWQmJihjPW51bGwpLGQ9ZC5yZXR1cm59Yz09PWQmJihjPW51bGwpLGQuc2libGluZy5yZXR1cm49ZC5yZXR1cm4sZD1kLnNpYmxpbmd9fWJyZWFrO2Nhc2UgMTk6WW4odCxlKSxjcihlKSxyJjQmJkp2KGUpO2JyZWFrO2Nhc2UgMjE6YnJlYWs7ZGVmYXVsdDpZbih0LGUpLGNyKGUpfX1mdW5jdGlvbiBjcihlKXt2YXIgdD1lLmZsYWdzO2lmKHQmMil7dHJ5e2U6e2Zvcih2YXIgbj1lLnJldHVybjtuIT09bnVsbDspe2lmKG93KG4pKXt2YXIgcj1uO2JyZWFrIGV9bj1uLnJldHVybn10aHJvdyBFcnJvcihVKDE2MCkpfXN3aXRjaChyLnRhZyl7Y2FzZSA1OnZhciBvPXIuc3RhdGVOb2RlO3IuZmxhZ3MmMzImJihacyhvLCIiKSxyLmZsYWdzJj0tMzMpO3ZhciBpPVF2KGUpO2JoKGUsaSxvKTticmVhaztjYXNlIDM6Y2FzZSA0OnZhciBsPXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8scz1RdihlKTtUaChlLHMsbCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihVKDE2MSkpfX1jYXRjaChhKXtpdChlLGUucmV0dXJuLGEpfWUuZmxhZ3MmPS0zfXQmNDA5NiYmKGUuZmxhZ3MmPS00MDk3KX1mdW5jdGlvbiBZayhlLHQsbil7cT1lLHN3KGUpfWZ1bmN0aW9uIHN3KGUsdCxuKXtmb3IodmFyIHI9KGUubW9kZSYxKSE9PTA7cSE9PW51bGw7KXt2YXIgbz1xLGk9by5jaGlsZDtpZihvLnRhZz09PTIyJiZyKXt2YXIgbD1vLm1lbW9pemVkU3RhdGUhPT1udWxsfHxjdTtpZighbCl7dmFyIHM9by5hbHRlcm5hdGUsYT1zIT09bnVsbCYmcy5tZW1vaXplZFN0YXRlIT09bnVsbHx8QnQ7cz1jdTt2YXIgdT1CdDtpZihjdT1sLChCdD1hKSYmIXUpZm9yKHE9bztxIT09bnVsbDspbD1xLGE9bC5jaGlsZCxsLnRhZz09PTIyJiZsLm1lbW9pemVkU3RhdGUhPT1udWxsP2V5KG8pOmEhPT1udWxsPyhhLnJldHVybj1sLHE9YSk6ZXkobyk7Zm9yKDtpIT09bnVsbDspcT1pLHN3KGkpLGk9aS5zaWJsaW5nO3E9byxjdT1zLEJ0PXV9WnYoZSl9ZWxzZSBvLnN1YnRyZWVGbGFncyY4NzcyJiZpIT09bnVsbD8oaS5yZXR1cm49byxxPWkpOlp2KGUpfX1mdW5jdGlvbiBadihlKXtmb3IoO3EhPT1udWxsOyl7dmFyIHQ9cTtpZih0LmZsYWdzJjg3NzIpe3ZhciBuPXQuYWx0ZXJuYXRlO3RyeXtpZih0LmZsYWdzJjg3NzIpc3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OkJ0fHxyZCg1LHQpO2JyZWFrO2Nhc2UgMTp2YXIgcj10LnN0YXRlTm9kZTtpZih0LmZsYWdzJjQmJiFCdClpZihuPT09bnVsbClyLmNvbXBvbmVudERpZE1vdW50KCk7ZWxzZXt2YXIgbz10LmVsZW1lbnRUeXBlPT09dC50eXBlP24ubWVtb2l6ZWRQcm9wczpKbih0LnR5cGUsbi5tZW1vaXplZFByb3BzKTtyLmNvbXBvbmVudERpZFVwZGF0ZShvLG4ubWVtb2l6ZWRTdGF0ZSxyLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKX12YXIgaT10LnVwZGF0ZVF1ZXVlO2khPT1udWxsJiZMdih0LGkscik7YnJlYWs7Y2FzZSAzOnZhciBsPXQudXBkYXRlUXVldWU7aWYobCE9PW51bGwpe2lmKG49bnVsbCx0LmNoaWxkIT09bnVsbClzd2l0Y2godC5jaGlsZC50YWcpe2Nhc2UgNTpuPXQuY2hpbGQuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMTpuPXQuY2hpbGQuc3RhdGVOb2RlfUx2KHQsbCxuKX1icmVhaztjYXNlIDU6dmFyIHM9dC5zdGF0ZU5vZGU7aWYobj09PW51bGwmJnQuZmxhZ3MmNCl7bj1zO3ZhciBhPXQubWVtb2l6ZWRQcm9wcztzd2l0Y2godC50eXBlKXtjYXNlImJ1dHRvbiI6Y2FzZSJpbnB1dCI6Y2FzZSJzZWxlY3QiOmNhc2UidGV4dGFyZWEiOmEuYXV0b0ZvY3VzJiZuLmZvY3VzKCk7YnJlYWs7Y2FzZSJpbWciOmEuc3JjJiYobi5zcmM9YS5zcmMpfX1icmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzppZih0Lm1lbW9pemVkU3RhdGU9PT1udWxsKXt2YXIgdT10LmFsdGVybmF0ZTtpZih1IT09bnVsbCl7dmFyIGM9dS5tZW1vaXplZFN0YXRlO2lmKGMhPT1udWxsKXt2YXIgZD1jLmRlaHlkcmF0ZWQ7ZCE9PW51bGwmJm5hKGQpfX19YnJlYWs7Y2FzZSAxOTpjYXNlIDE3OmNhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmNhc2UgMjU6YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihVKDE2MykpfUJ0fHx0LmZsYWdzJjUxMiYma2godCl9Y2F0Y2goZil7aXQodCx0LnJldHVybixmKX19aWYodD09PWUpe3E9bnVsbDticmVha31pZihuPXQuc2libGluZyxuIT09bnVsbCl7bi5yZXR1cm49dC5yZXR1cm4scT1uO2JyZWFrfXE9dC5yZXR1cm59fWZ1bmN0aW9uIHF2KGUpe2Zvcig7cSE9PW51bGw7KXt2YXIgdD1xO2lmKHQ9PT1lKXtxPW51bGw7YnJlYWt9dmFyIG49dC5zaWJsaW5nO2lmKG4hPT1udWxsKXtuLnJldHVybj10LnJldHVybixxPW47YnJlYWt9cT10LnJldHVybn19ZnVuY3Rpb24gZXkoZSl7Zm9yKDtxIT09bnVsbDspe3ZhciB0PXE7dHJ5e3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTp2YXIgbj10LnJldHVybjt0cnl7cmQoNCx0KX1jYXRjaChhKXtpdCh0LG4sYSl9YnJlYWs7Y2FzZSAxOnZhciByPXQuc3RhdGVOb2RlO2lmKHR5cGVvZiByLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iKXt2YXIgbz10LnJldHVybjt0cnl7ci5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGEpe2l0KHQsbyxhKX19dmFyIGk9dC5yZXR1cm47dHJ5e2toKHQpfWNhdGNoKGEpe2l0KHQsaSxhKX1icmVhaztjYXNlIDU6dmFyIGw9dC5yZXR1cm47dHJ5e2toKHQpfWNhdGNoKGEpe2l0KHQsbCxhKX19fWNhdGNoKGEpe2l0KHQsdC5yZXR1cm4sYSl9aWYodD09PWUpe3E9bnVsbDticmVha312YXIgcz10LnNpYmxpbmc7aWYocyE9PW51bGwpe3MucmV0dXJuPXQucmV0dXJuLHE9czticmVha31xPXQucmV0dXJufX12YXIgWGs9TWF0aC5jZWlsLGdjPVFyLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsX2c9UXIuUmVhY3RDdXJyZW50T3duZXIsQm49UXIuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsVGU9MCxSdD1udWxsLHB0PW51bGwsRHQ9MCx3bj0wLHJsPVdvKDApLF90PTAsaGE9bnVsbCxmaT0wLG9kPTAsU2c9MCxNcz1udWxsLGZuPW51bGwsRWc9MCwkbD0xLzAsTXI9bnVsbCxtYz0hMSxOaD1udWxsLCRvPW51bGwsZHU9ITEsdm89bnVsbCx2Yz0wLExzPTAsUmg9bnVsbCx6dT0tMSxGdT0wO2Z1bmN0aW9uIGxuKCl7cmV0dXJuIFRlJjY/ZnQoKTp6dSE9PS0xP3p1Onp1PWZ0KCl9ZnVuY3Rpb24ga28oZSl7cmV0dXJuIGUubW9kZSYxP1RlJjImJkR0IT09MD9EdCYtRHQ6T2sudHJhbnNpdGlvbiE9PW51bGw/KEZ1PT09MCYmKEZ1PVYxKCkpLEZ1KTooZT1BZSxlIT09MHx8KGU9d2luZG93LmV2ZW50LGU9ZT09PXZvaWQgMD8xNjpKMShlLnR5cGUpKSxlKToxfWZ1bmN0aW9uIG9yKGUsdCxuLHIpe2lmKDUwPExzKXRocm93IExzPTAsUmg9bnVsbCxFcnJvcihVKDE4NSkpO09hKGUsbixyKSwoIShUZSYyKXx8ZSE9PVJ0KSYmKGU9PT1SdCYmKCEoVGUmMikmJihvZHw9biksX3Q9PT00JiZwbyhlLER0KSksbW4oZSxyKSxuPT09MSYmVGU9PT0wJiYhKHQubW9kZSYxKSYmKCRsPWZ0KCkrNTAwLGVkJiZVbygpKSl9ZnVuY3Rpb24gbW4oZSx0KXt2YXIgbj1lLmNhbGxiYWNrTm9kZTtPJChlLHQpO3ZhciByPWVjKGUsZT09PVJ0P0R0OjApO2lmKHI9PT0wKW4hPT1udWxsJiZ1dihuKSxlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wO2Vsc2UgaWYodD1yJi1yLGUuY2FsbGJhY2tQcmlvcml0eSE9PXQpe2lmKG4hPW51bGwmJnV2KG4pLHQ9PT0xKWUudGFnPT09MD9Qayh0eS5iaW5kKG51bGwsZSkpOm14KHR5LmJpbmQobnVsbCxlKSksVGsoZnVuY3Rpb24oKXshKFRlJjYpJiZVbygpfSksbj1udWxsO2Vsc2V7c3dpdGNoKEgxKHIpKXtjYXNlIDE6bj1YcDticmVhaztjYXNlIDQ6bj1XMTticmVhaztjYXNlIDE2Om49cXU7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6bj1VMTticmVhaztkZWZhdWx0Om49cXV9bj1ndyhuLGF3LmJpbmQobnVsbCxlKSl9ZS5jYWxsYmFja1ByaW9yaXR5PXQsZS5jYWxsYmFja05vZGU9bn19ZnVuY3Rpb24gYXcoZSx0KXtpZih6dT0tMSxGdT0wLFRlJjYpdGhyb3cgRXJyb3IoVSgzMjcpKTt2YXIgbj1lLmNhbGxiYWNrTm9kZTtpZihobCgpJiZlLmNhbGxiYWNrTm9kZSE9PW4pcmV0dXJuIG51bGw7dmFyIHI9ZWMoZSxlPT09UnQ/RHQ6MCk7aWYocj09PTApcmV0dXJuIG51bGw7aWYociYzMHx8ciZlLmV4cGlyZWRMYW5lc3x8dCl0PXljKGUscik7ZWxzZXt0PXI7dmFyIG89VGU7VGV8PTI7dmFyIGk9Y3coKTsoUnQhPT1lfHxEdCE9PXQpJiYoTXI9bnVsbCwkbD1mdCgpKzUwMCxvaShlLHQpKTtkbyB0cnl7WmsoKTticmVha31jYXRjaChzKXt1dyhlLHMpfXdoaWxlKCEwKTthZygpLGdjLmN1cnJlbnQ9aSxUZT1vLHB0IT09bnVsbD90PTA6KFJ0PW51bGwsRHQ9MCx0PV90KX1pZih0IT09MCl7aWYodD09PTImJihvPXJoKGUpLG8hPT0wJiYocj1vLHQ9UGgoZSxvKSkpLHQ9PT0xKXRocm93IG49aGEsb2koZSwwKSxwbyhlLHIpLG1uKGUsZnQoKSksbjtpZih0PT09NilwbyhlLHIpO2Vsc2V7aWYobz1lLmN1cnJlbnQuYWx0ZXJuYXRlLCEociYzMCkmJiFRayhvKSYmKHQ9eWMoZSxyKSx0PT09MiYmKGk9cmgoZSksaSE9PTAmJihyPWksdD1QaChlLGkpKSksdD09PTEpKXRocm93IG49aGEsb2koZSwwKSxwbyhlLHIpLG1uKGUsZnQoKSksbjtzd2l0Y2goZS5maW5pc2hlZFdvcms9byxlLmZpbmlzaGVkTGFuZXM9cix0KXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKFUoMzQ1KSk7Y2FzZSAyOlFvKGUsZm4sTXIpO2JyZWFrO2Nhc2UgMzppZihwbyhlLHIpLChyJjEzMDAyMzQyNCk9PT1yJiYodD1FZys1MDAtZnQoKSwxMDx0KSl7aWYoZWMoZSwwKSE9PTApYnJlYWs7aWYobz1lLnN1c3BlbmRlZExhbmVzLChvJnIpIT09cil7bG4oKSxlLnBpbmdlZExhbmVzfD1lLnN1c3BlbmRlZExhbmVzJm87YnJlYWt9ZS50aW1lb3V0SGFuZGxlPWRoKFFvLmJpbmQobnVsbCxlLGZuLE1yKSx0KTticmVha31RbyhlLGZuLE1yKTticmVhaztjYXNlIDQ6aWYocG8oZSxyKSwociY0MTk0MjQwKT09PXIpYnJlYWs7Zm9yKHQ9ZS5ldmVudFRpbWVzLG89LTE7MDxyOyl7dmFyIGw9MzEtcnIocik7aT0xPDxsLGw9dFtsXSxsPm8mJihvPWwpLHImPX5pfWlmKHI9byxyPWZ0KCktcixyPSgxMjA+cj8xMjA6NDgwPnI/NDgwOjEwODA+cj8xMDgwOjE5MjA+cj8xOTIwOjNlMz5yPzNlMzo0MzIwPnI/NDMyMDoxOTYwKlhrKHIvMTk2MCkpLXIsMTA8cil7ZS50aW1lb3V0SGFuZGxlPWRoKFFvLmJpbmQobnVsbCxlLGZuLE1yKSxyKTticmVha31RbyhlLGZuLE1yKTticmVhaztjYXNlIDU6UW8oZSxmbixNcik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihVKDMyOSkpfX19cmV0dXJuIG1uKGUsZnQoKSksZS5jYWxsYmFja05vZGU9PT1uP2F3LmJpbmQobnVsbCxlKTpudWxsfWZ1bmN0aW9uIFBoKGUsdCl7dmFyIG49TXM7cmV0dXJuIGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmKG9pKGUsdCkuZmxhZ3N8PTI1NiksZT15YyhlLHQpLGUhPT0yJiYodD1mbixmbj1uLHQhPT1udWxsJiZPaCh0KSksZX1mdW5jdGlvbiBPaChlKXtmbj09PW51bGw/Zm49ZTpmbi5wdXNoLmFwcGx5KGZuLGUpfWZ1bmN0aW9uIFFrKGUpe2Zvcih2YXIgdD1lOzspe2lmKHQuZmxhZ3MmMTYzODQpe3ZhciBuPXQudXBkYXRlUXVldWU7aWYobiE9PW51bGwmJihuPW4uc3RvcmVzLG4hPT1udWxsKSlmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXSxpPW8uZ2V0U25hcHNob3Q7bz1vLnZhbHVlO3RyeXtpZighaXIoaSgpLG8pKXJldHVybiExfWNhdGNoe3JldHVybiExfX19aWYobj10LmNoaWxkLHQuc3VidHJlZUZsYWdzJjE2Mzg0JiZuIT09bnVsbCluLnJldHVybj10LHQ9bjtlbHNle2lmKHQ9PT1lKWJyZWFrO2Zvcig7dC5zaWJsaW5nPT09bnVsbDspe2lmKHQucmV0dXJuPT09bnVsbHx8dC5yZXR1cm49PT1lKXJldHVybiEwO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ319cmV0dXJuITB9ZnVuY3Rpb24gcG8oZSx0KXtmb3IodCY9flNnLHQmPX5vZCxlLnN1c3BlbmRlZExhbmVzfD10LGUucGluZ2VkTGFuZXMmPX50LGU9ZS5leHBpcmF0aW9uVGltZXM7MDx0Oyl7dmFyIG49MzEtcnIodCkscj0xPDxuO2Vbbl09LTEsdCY9fnJ9fWZ1bmN0aW9uIHR5KGUpe2lmKFRlJjYpdGhyb3cgRXJyb3IoVSgzMjcpKTtobCgpO3ZhciB0PWVjKGUsMCk7aWYoISh0JjEpKXJldHVybiBtbihlLGZ0KCkpLG51bGw7dmFyIG49eWMoZSx0KTtpZihlLnRhZyE9PTAmJm49PT0yKXt2YXIgcj1yaChlKTtyIT09MCYmKHQ9cixuPVBoKGUscikpfWlmKG49PT0xKXRocm93IG49aGEsb2koZSwwKSxwbyhlLHQpLG1uKGUsZnQoKSksbjtpZihuPT09Nil0aHJvdyBFcnJvcihVKDM0NSkpO3JldHVybiBlLmZpbmlzaGVkV29yaz1lLmN1cnJlbnQuYWx0ZXJuYXRlLGUuZmluaXNoZWRMYW5lcz10LFFvKGUsZm4sTXIpLG1uKGUsZnQoKSksbnVsbH1mdW5jdGlvbiBDZyhlLHQpe3ZhciBuPVRlO1RlfD0xO3RyeXtyZXR1cm4gZSh0KX1maW5hbGx5e1RlPW4sVGU9PT0wJiYoJGw9ZnQoKSs1MDAsZWQmJlVvKCkpfX1mdW5jdGlvbiBoaShlKXt2byE9PW51bGwmJnZvLnRhZz09PTAmJiEoVGUmNikmJmhsKCk7dmFyIHQ9VGU7VGV8PTE7dmFyIG49Qm4udHJhbnNpdGlvbixyPUFlO3RyeXtpZihCbi50cmFuc2l0aW9uPW51bGwsQWU9MSxlKXJldHVybiBlKCl9ZmluYWxseXtBZT1yLEJuLnRyYW5zaXRpb249bixUZT10LCEoVGUmNikmJlVvKCl9fWZ1bmN0aW9uICRnKCl7d249cmwuY3VycmVudCxHZShybCl9ZnVuY3Rpb24gb2koZSx0KXtlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wO3ZhciBuPWUudGltZW91dEhhbmRsZTtpZihuIT09LTEmJihlLnRpbWVvdXRIYW5kbGU9LTEsa2sobikpLHB0IT09bnVsbClmb3Iobj1wdC5yZXR1cm47biE9PW51bGw7KXt2YXIgcj1uO3N3aXRjaChpZyhyKSxyLnRhZyl7Y2FzZSAxOnI9ci50eXBlLmNoaWxkQ29udGV4dFR5cGVzLHIhPW51bGwmJmljKCk7YnJlYWs7Y2FzZSAzOkVsKCksR2UocG4pLEdlKEd0KSxwZygpO2JyZWFrO2Nhc2UgNTpoZyhyKTticmVhaztjYXNlIDQ6RWwoKTticmVhaztjYXNlIDEzOkdlKHFlKTticmVhaztjYXNlIDE5OkdlKHFlKTticmVhaztjYXNlIDEwOnVnKHIudHlwZS5fY29udGV4dCk7YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOiRnKCl9bj1uLnJldHVybn1pZihSdD1lLHB0PWU9VG8oZS5jdXJyZW50LG51bGwpLER0PXduPXQsX3Q9MCxoYT1udWxsLFNnPW9kPWZpPTAsZm49TXM9bnVsbCxlaSE9PW51bGwpe2Zvcih0PTA7dDxlaS5sZW5ndGg7dCsrKWlmKG49ZWlbdF0scj1uLmludGVybGVhdmVkLHIhPT1udWxsKXtuLmludGVybGVhdmVkPW51bGw7dmFyIG89ci5uZXh0LGk9bi5wZW5kaW5nO2lmKGkhPT1udWxsKXt2YXIgbD1pLm5leHQ7aS5uZXh0PW8sci5uZXh0PWx9bi5wZW5kaW5nPXJ9ZWk9bnVsbH1yZXR1cm4gZX1mdW5jdGlvbiB1dyhlLHQpe2Rve3ZhciBuPXB0O3RyeXtpZihhZygpLER1LmN1cnJlbnQ9cGMsaGMpe2Zvcih2YXIgcj10dC5tZW1vaXplZFN0YXRlO3IhPT1udWxsOyl7dmFyIG89ci5xdWV1ZTtvIT09bnVsbCYmKG8ucGVuZGluZz1udWxsKSxyPXIubmV4dH1oYz0hMX1pZihkaT0wLCR0PXl0PXR0PW51bGwsT3M9ITEsY2E9MCxfZy5jdXJyZW50PW51bGwsbj09PW51bGx8fG4ucmV0dXJuPT09bnVsbCl7X3Q9MSxoYT10LHB0PW51bGw7YnJlYWt9ZTp7dmFyIGk9ZSxsPW4ucmV0dXJuLHM9bixhPXQ7aWYodD1EdCxzLmZsYWdzfD0zMjc2OCxhIT09bnVsbCYmdHlwZW9mIGE9PSJvYmplY3QiJiZ0eXBlb2YgYS50aGVuPT0iZnVuY3Rpb24iKXt2YXIgdT1hLGM9cyxkPWMudGFnO2lmKCEoYy5tb2RlJjEpJiYoZD09PTB8fGQ9PT0xMXx8ZD09PTE1KSl7dmFyIGY9Yy5hbHRlcm5hdGU7Zj8oYy51cGRhdGVRdWV1ZT1mLnVwZGF0ZVF1ZXVlLGMubWVtb2l6ZWRTdGF0ZT1mLm1lbW9pemVkU3RhdGUsYy5sYW5lcz1mLmxhbmVzKTooYy51cGRhdGVRdWV1ZT1udWxsLGMubWVtb2l6ZWRTdGF0ZT1udWxsKX12YXIgaD1XdihsKTtpZihoIT09bnVsbCl7aC5mbGFncyY9LTI1NyxVdihoLGwscyxpLHQpLGgubW9kZSYxJiZCdihpLHUsdCksdD1oLGE9dTt2YXIgZz10LnVwZGF0ZVF1ZXVlO2lmKGc9PT1udWxsKXt2YXIgbT1uZXcgU2V0O20uYWRkKGEpLHQudXBkYXRlUXVldWU9bX1lbHNlIGcuYWRkKGEpO2JyZWFrIGV9ZWxzZXtpZighKHQmMSkpe0J2KGksdSx0KSxrZygpO2JyZWFrIGV9YT1FcnJvcihVKDQyNikpfX1lbHNlIGlmKFllJiZzLm1vZGUmMSl7dmFyIF89V3YobCk7aWYoXyE9PW51bGwpeyEoXy5mbGFncyY2NTUzNikmJihfLmZsYWdzfD0yNTYpLFV2KF8sbCxzLGksdCksbGcoQ2woYSxzKSk7YnJlYWsgZX19aT1hPUNsKGEscyksX3QhPT00JiYoX3Q9MiksTXM9PT1udWxsP01zPVtpXTpNcy5wdXNoKGkpLGk9bDtkb3tzd2l0Y2goaS50YWcpe2Nhc2UgMzppLmZsYWdzfD02NTUzNix0Jj0tdCxpLmxhbmVzfD10O3ZhciB2PUt4KGksYSx0KTtNdihpLHYpO2JyZWFrIGU7Y2FzZSAxOnM9YTt2YXIgeT1pLnR5cGUseD1pLnN0YXRlTm9kZTtpZighKGkuZmxhZ3MmMTI4KSYmKHR5cGVvZiB5LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8eCE9PW51bGwmJnR5cGVvZiB4LmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYoJG89PT1udWxsfHwhJG8uaGFzKHgpKSkpe2kuZmxhZ3N8PTY1NTM2LHQmPS10LGkubGFuZXN8PXQ7dmFyIFM9R3goaSxzLHQpO012KGksUyk7YnJlYWsgZX19aT1pLnJldHVybn13aGlsZShpIT09bnVsbCl9Zncobil9Y2F0Y2goayl7dD1rLHB0PT09biYmbiE9PW51bGwmJihwdD1uPW4ucmV0dXJuKTtjb250aW51ZX1icmVha313aGlsZSghMCl9ZnVuY3Rpb24gY3coKXt2YXIgZT1nYy5jdXJyZW50O3JldHVybiBnYy5jdXJyZW50PXBjLGU9PT1udWxsP3BjOmV9ZnVuY3Rpb24ga2coKXsoX3Q9PT0wfHxfdD09PTN8fF90PT09MikmJihfdD00KSxSdD09PW51bGx8fCEoZmkmMjY4NDM1NDU1KSYmIShvZCYyNjg0MzU0NTUpfHxwbyhSdCxEdCl9ZnVuY3Rpb24geWMoZSx0KXt2YXIgbj1UZTtUZXw9Mjt2YXIgcj1jdygpOyhSdCE9PWV8fER0IT09dCkmJihNcj1udWxsLG9pKGUsdCkpO2RvIHRyeXtKaygpO2JyZWFrfWNhdGNoKG8pe3V3KGUsbyl9d2hpbGUoITApO2lmKGFnKCksVGU9bixnYy5jdXJyZW50PXIscHQhPT1udWxsKXRocm93IEVycm9yKFUoMjYxKSk7cmV0dXJuIFJ0PW51bGwsRHQ9MCxfdH1mdW5jdGlvbiBKaygpe2Zvcig7cHQhPT1udWxsOylkdyhwdCl9ZnVuY3Rpb24gWmsoKXtmb3IoO3B0IT09bnVsbCYmIUUkKCk7KWR3KHB0KX1mdW5jdGlvbiBkdyhlKXt2YXIgdD1wdyhlLmFsdGVybmF0ZSxlLHduKTtlLm1lbW9pemVkUHJvcHM9ZS5wZW5kaW5nUHJvcHMsdD09PW51bGw/ZncoZSk6cHQ9dCxfZy5jdXJyZW50PW51bGx9ZnVuY3Rpb24gZncoZSl7dmFyIHQ9ZTtkb3t2YXIgbj10LmFsdGVybmF0ZTtpZihlPXQucmV0dXJuLHQuZmxhZ3MmMzI3Njgpe2lmKG49SGsobix0KSxuIT09bnVsbCl7bi5mbGFncyY9MzI3NjcscHQ9bjtyZXR1cm59aWYoZSE9PW51bGwpZS5mbGFnc3w9MzI3NjgsZS5zdWJ0cmVlRmxhZ3M9MCxlLmRlbGV0aW9ucz1udWxsO2Vsc2V7X3Q9NixwdD1udWxsO3JldHVybn19ZWxzZSBpZihuPVZrKG4sdCx3biksbiE9PW51bGwpe3B0PW47cmV0dXJufWlmKHQ9dC5zaWJsaW5nLHQhPT1udWxsKXtwdD10O3JldHVybn1wdD10PWV9d2hpbGUodCE9PW51bGwpO190PT09MCYmKF90PTUpfWZ1bmN0aW9uIFFvKGUsdCxuKXt2YXIgcj1BZSxvPUJuLnRyYW5zaXRpb247dHJ5e0JuLnRyYW5zaXRpb249bnVsbCxBZT0xLHFrKGUsdCxuLHIpfWZpbmFsbHl7Qm4udHJhbnNpdGlvbj1vLEFlPXJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcWsoZSx0LG4scil7ZG8gaGwoKTt3aGlsZSh2byE9PW51bGwpO2lmKFRlJjYpdGhyb3cgRXJyb3IoVSgzMjcpKTtuPWUuZmluaXNoZWRXb3JrO3ZhciBvPWUuZmluaXNoZWRMYW5lcztpZihuPT09bnVsbClyZXR1cm4gbnVsbDtpZihlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wLG49PT1lLmN1cnJlbnQpdGhyb3cgRXJyb3IoVSgxNzcpKTtlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wO3ZhciBpPW4ubGFuZXN8bi5jaGlsZExhbmVzO2lmKEEkKGUsaSksZT09PVJ0JiYocHQ9UnQ9bnVsbCxEdD0wKSwhKG4uc3VidHJlZUZsYWdzJjIwNjQpJiYhKG4uZmxhZ3MmMjA2NCl8fGR1fHwoZHU9ITAsZ3cocXUsZnVuY3Rpb24oKXtyZXR1cm4gaGwoKSxudWxsfSkpLGk9KG4uZmxhZ3MmMTU5OTApIT09MCxuLnN1YnRyZWVGbGFncyYxNTk5MHx8aSl7aT1Cbi50cmFuc2l0aW9uLEJuLnRyYW5zaXRpb249bnVsbDt2YXIgbD1BZTtBZT0xO3ZhciBzPVRlO1RlfD00LF9nLmN1cnJlbnQ9bnVsbCxHayhlLG4pLGx3KG4sZSkseGsodWgpLHRjPSEhYWgsdWg9YWg9bnVsbCxlLmN1cnJlbnQ9bixZayhuKSxDJCgpLFRlPXMsQWU9bCxCbi50cmFuc2l0aW9uPWl9ZWxzZSBlLmN1cnJlbnQ9bjtpZihkdSYmKGR1PSExLHZvPWUsdmM9byksaT1lLnBlbmRpbmdMYW5lcyxpPT09MCYmKCRvPW51bGwpLFQkKG4uc3RhdGVOb2RlKSxtbihlLGZ0KCkpLHQhPT1udWxsKWZvcihyPWUub25SZWNvdmVyYWJsZUVycm9yLG49MDtuPHQubGVuZ3RoO24rKylvPXRbbl0scihvLnZhbHVlLHtjb21wb25lbnRTdGFjazpvLnN0YWNrLGRpZ2VzdDpvLmRpZ2VzdH0pO2lmKG1jKXRocm93IG1jPSExLGU9TmgsTmg9bnVsbCxlO3JldHVybiB2YyYxJiZlLnRhZyE9PTAmJmhsKCksaT1lLnBlbmRpbmdMYW5lcyxpJjE/ZT09PVJoP0xzKys6KExzPTAsUmg9ZSk6THM9MCxVbygpLG51bGx9ZnVuY3Rpb24gaGwoKXtpZih2byE9PW51bGwpe3ZhciBlPUgxKHZjKSx0PUJuLnRyYW5zaXRpb24sbj1BZTt0cnl7aWYoQm4udHJhbnNpdGlvbj1udWxsLEFlPTE2PmU/MTY6ZSx2bz09PW51bGwpdmFyIHI9ITE7ZWxzZXtpZihlPXZvLHZvPW51bGwsdmM9MCxUZSY2KXRocm93IEVycm9yKFUoMzMxKSk7dmFyIG89VGU7Zm9yKFRlfD00LHE9ZS5jdXJyZW50O3EhPT1udWxsOyl7dmFyIGk9cSxsPWkuY2hpbGQ7aWYocS5mbGFncyYxNil7dmFyIHM9aS5kZWxldGlvbnM7aWYocyE9PW51bGwpe2Zvcih2YXIgYT0wO2E8cy5sZW5ndGg7YSsrKXt2YXIgdT1zW2FdO2ZvcihxPXU7cSE9PW51bGw7KXt2YXIgYz1xO3N3aXRjaChjLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpBcyg4LGMsaSl9dmFyIGQ9Yy5jaGlsZDtpZihkIT09bnVsbClkLnJldHVybj1jLHE9ZDtlbHNlIGZvcig7cSE9PW51bGw7KXtjPXE7dmFyIGY9Yy5zaWJsaW5nLGg9Yy5yZXR1cm47aWYocncoYyksYz09PXUpe3E9bnVsbDticmVha31pZihmIT09bnVsbCl7Zi5yZXR1cm49aCxxPWY7YnJlYWt9cT1ofX19dmFyIGc9aS5hbHRlcm5hdGU7aWYoZyE9PW51bGwpe3ZhciBtPWcuY2hpbGQ7aWYobSE9PW51bGwpe2cuY2hpbGQ9bnVsbDtkb3t2YXIgXz1tLnNpYmxpbmc7bS5zaWJsaW5nPW51bGwsbT1ffXdoaWxlKG0hPT1udWxsKX19cT1pfX1pZihpLnN1YnRyZWVGbGFncyYyMDY0JiZsIT09bnVsbClsLnJldHVybj1pLHE9bDtlbHNlIGU6Zm9yKDtxIT09bnVsbDspe2lmKGk9cSxpLmZsYWdzJjIwNDgpc3dpdGNoKGkudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OkFzKDksaSxpLnJldHVybil9dmFyIHY9aS5zaWJsaW5nO2lmKHYhPT1udWxsKXt2LnJldHVybj1pLnJldHVybixxPXY7YnJlYWsgZX1xPWkucmV0dXJufX12YXIgeT1lLmN1cnJlbnQ7Zm9yKHE9eTtxIT09bnVsbDspe2w9cTt2YXIgeD1sLmNoaWxkO2lmKGwuc3VidHJlZUZsYWdzJjIwNjQmJnghPT1udWxsKXgucmV0dXJuPWwscT14O2Vsc2UgZTpmb3IobD15O3EhPT1udWxsOyl7aWYocz1xLHMuZmxhZ3MmMjA0OCl0cnl7c3dpdGNoKHMudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnJkKDkscyl9fWNhdGNoKGspe2l0KHMscy5yZXR1cm4sayl9aWYocz09PWwpe3E9bnVsbDticmVhayBlfXZhciBTPXMuc2libGluZztpZihTIT09bnVsbCl7Uy5yZXR1cm49cy5yZXR1cm4scT1TO2JyZWFrIGV9cT1zLnJldHVybn19aWYoVGU9byxVbygpLHlyJiZ0eXBlb2YgeXIub25Qb3N0Q29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXt5ci5vblBvc3RDb21taXRGaWJlclJvb3QoWGMsZSl9Y2F0Y2h7fXI9ITB9cmV0dXJuIHJ9ZmluYWxseXtBZT1uLEJuLnRyYW5zaXRpb249dH19cmV0dXJuITF9ZnVuY3Rpb24gbnkoZSx0LG4pe3Q9Q2wobix0KSx0PUt4KGUsdCwxKSxlPUNvKGUsdCwxKSx0PWxuKCksZSE9PW51bGwmJihPYShlLDEsdCksbW4oZSx0KSl9ZnVuY3Rpb24gaXQoZSx0LG4pe2lmKGUudGFnPT09MylueShlLGUsbik7ZWxzZSBmb3IoO3QhPT1udWxsOyl7aWYodC50YWc9PT0zKXtueSh0LGUsbik7YnJlYWt9ZWxzZSBpZih0LnRhZz09PTEpe3ZhciByPXQuc3RhdGVOb2RlO2lmKHR5cGVvZiB0LnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPT0iZnVuY3Rpb24ifHx0eXBlb2Ygci5jb21wb25lbnREaWRDYXRjaD09ImZ1bmN0aW9uIiYmKCRvPT09bnVsbHx8ISRvLmhhcyhyKSkpe2U9Q2wobixlKSxlPUd4KHQsZSwxKSx0PUNvKHQsZSwxKSxlPWxuKCksdCE9PW51bGwmJihPYSh0LDEsZSksbW4odCxlKSk7YnJlYWt9fXQ9dC5yZXR1cm59fWZ1bmN0aW9uIGVUKGUsdCxuKXt2YXIgcj1lLnBpbmdDYWNoZTtyIT09bnVsbCYmci5kZWxldGUodCksdD1sbigpLGUucGluZ2VkTGFuZXN8PWUuc3VzcGVuZGVkTGFuZXMmbixSdD09PWUmJihEdCZuKT09PW4mJihfdD09PTR8fF90PT09MyYmKER0JjEzMDAyMzQyNCk9PT1EdCYmNTAwPmZ0KCktRWc/b2koZSwwKTpTZ3w9biksbW4oZSx0KX1mdW5jdGlvbiBodyhlLHQpe3Q9PT0wJiYoZS5tb2RlJjE/KHQ9dHUsdHU8PD0xLCEodHUmMTMwMDIzNDI0KSYmKHR1PTQxOTQzMDQpKTp0PTEpO3ZhciBuPWxuKCk7ZT1IcihlLHQpLGUhPT1udWxsJiYoT2EoZSx0LG4pLG1uKGUsbikpfWZ1bmN0aW9uIHRUKGUpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZSxuPTA7dCE9PW51bGwmJihuPXQucmV0cnlMYW5lKSxodyhlLG4pfWZ1bmN0aW9uIG5UKGUsdCl7dmFyIG49MDtzd2l0Y2goZS50YWcpe2Nhc2UgMTM6dmFyIHI9ZS5zdGF0ZU5vZGUsbz1lLm1lbW9pemVkU3RhdGU7byE9PW51bGwmJihuPW8ucmV0cnlMYW5lKTticmVhaztjYXNlIDE5OnI9ZS5zdGF0ZU5vZGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihVKDMxNCkpfXIhPT1udWxsJiZyLmRlbGV0ZSh0KSxodyhlLG4pfXZhciBwdztwdz1mdW5jdGlvbihlLHQsbil7aWYoZSE9PW51bGwpaWYoZS5tZW1vaXplZFByb3BzIT09dC5wZW5kaW5nUHJvcHN8fHBuLmN1cnJlbnQpaG49ITA7ZWxzZXtpZighKGUubGFuZXMmbikmJiEodC5mbGFncyYxMjgpKXJldHVybiBobj0hMSxVayhlLHQsbik7aG49ISEoZS5mbGFncyYxMzEwNzIpfWVsc2UgaG49ITEsWWUmJnQuZmxhZ3MmMTA0ODU3NiYmdngodCxhYyx0LmluZGV4KTtzd2l0Y2godC5sYW5lcz0wLHQudGFnKXtjYXNlIDI6dmFyIHI9dC50eXBlO2p1KGUsdCksZT10LnBlbmRpbmdQcm9wczt2YXIgbz13bCh0LEd0LmN1cnJlbnQpO2ZsKHQsbiksbz1tZyhudWxsLHQscixlLG8sbik7dmFyIGk9dmcoKTtyZXR1cm4gdC5mbGFnc3w9MSx0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsJiZ0eXBlb2Ygby5yZW5kZXI9PSJmdW5jdGlvbiImJm8uJCR0eXBlb2Y9PT12b2lkIDA/KHQudGFnPTEsdC5tZW1vaXplZFN0YXRlPW51bGwsdC51cGRhdGVRdWV1ZT1udWxsLGduKHIpPyhpPSEwLGxjKHQpKTppPSExLHQubWVtb2l6ZWRTdGF0ZT1vLnN0YXRlIT09bnVsbCYmby5zdGF0ZSE9PXZvaWQgMD9vLnN0YXRlOm51bGwsZGcodCksby51cGRhdGVyPXRkLHQuc3RhdGVOb2RlPW8sby5fcmVhY3RJbnRlcm5hbHM9dCx5aCh0LHIsZSxuKSx0PV9oKG51bGwsdCxyLCEwLGksbikpOih0LnRhZz0wLFllJiZpJiZvZyh0KSxKdChudWxsLHQsbyxuKSx0PXQuY2hpbGQpLHQ7Y2FzZSAxNjpyPXQuZWxlbWVudFR5cGU7ZTp7c3dpdGNoKGp1KGUsdCksZT10LnBlbmRpbmdQcm9wcyxvPXIuX2luaXQscj1vKHIuX3BheWxvYWQpLHQudHlwZT1yLG89dC50YWc9b1QociksZT1KbihyLGUpLG8pe2Nhc2UgMDp0PXdoKG51bGwsdCxyLGUsbik7YnJlYWsgZTtjYXNlIDE6dD1LdihudWxsLHQscixlLG4pO2JyZWFrIGU7Y2FzZSAxMTp0PVZ2KG51bGwsdCxyLGUsbik7YnJlYWsgZTtjYXNlIDE0OnQ9SHYobnVsbCx0LHIsSm4oci50eXBlLGUpLG4pO2JyZWFrIGV9dGhyb3cgRXJyb3IoVSgzMDYsciwiIikpfXJldHVybiB0O2Nhc2UgMDpyZXR1cm4gcj10LnR5cGUsbz10LnBlbmRpbmdQcm9wcyxvPXQuZWxlbWVudFR5cGU9PT1yP286Sm4ocixvKSx3aChlLHQscixvLG4pO2Nhc2UgMTpyZXR1cm4gcj10LnR5cGUsbz10LnBlbmRpbmdQcm9wcyxvPXQuZWxlbWVudFR5cGU9PT1yP286Sm4ocixvKSxLdihlLHQscixvLG4pO2Nhc2UgMzplOntpZihKeCh0KSxlPT09bnVsbCl0aHJvdyBFcnJvcihVKDM4NykpO3I9dC5wZW5kaW5nUHJvcHMsaT10Lm1lbW9pemVkU3RhdGUsbz1pLmVsZW1lbnQsX3goZSx0KSxkYyh0LHIsbnVsbCxuKTt2YXIgbD10Lm1lbW9pemVkU3RhdGU7aWYocj1sLmVsZW1lbnQsaS5pc0RlaHlkcmF0ZWQpaWYoaT17ZWxlbWVudDpyLGlzRGVoeWRyYXRlZDohMSxjYWNoZTpsLmNhY2hlLHBlbmRpbmdTdXNwZW5zZUJvdW5kYXJpZXM6bC5wZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzLHRyYW5zaXRpb25zOmwudHJhbnNpdGlvbnN9LHQudXBkYXRlUXVldWUuYmFzZVN0YXRlPWksdC5tZW1vaXplZFN0YXRlPWksdC5mbGFncyYyNTYpe289Q2woRXJyb3IoVSg0MjMpKSx0KSx0PUd2KGUsdCxyLG4sbyk7YnJlYWsgZX1lbHNlIGlmKHIhPT1vKXtvPUNsKEVycm9yKFUoNDI0KSksdCksdD1HdihlLHQscixuLG8pO2JyZWFrIGV9ZWxzZSBmb3IoRW49RW8odC5zdGF0ZU5vZGUuY29udGFpbmVySW5mby5maXJzdENoaWxkKSxDbj10LFllPSEwLGVyPW51bGwsbj0keCh0LG51bGwscixuKSx0LmNoaWxkPW47bjspbi5mbGFncz1uLmZsYWdzJi0zfDQwOTYsbj1uLnNpYmxpbmc7ZWxzZXtpZihfbCgpLHI9PT1vKXt0PUtyKGUsdCxuKTticmVhayBlfUp0KGUsdCxyLG4pfXQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDU6cmV0dXJuIGt4KHQpLGU9PT1udWxsJiZnaCh0KSxyPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLGk9ZSE9PW51bGw/ZS5tZW1vaXplZFByb3BzOm51bGwsbD1vLmNoaWxkcmVuLGNoKHIsbyk/bD1udWxsOmkhPT1udWxsJiZjaChyLGkpJiYodC5mbGFnc3w9MzIpLFF4KGUsdCksSnQoZSx0LGwsbiksdC5jaGlsZDtjYXNlIDY6cmV0dXJuIGU9PT1udWxsJiZnaCh0KSxudWxsO2Nhc2UgMTM6cmV0dXJuIFp4KGUsdCxuKTtjYXNlIDQ6cmV0dXJuIGZnKHQsdC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbykscj10LnBlbmRpbmdQcm9wcyxlPT09bnVsbD90LmNoaWxkPVNsKHQsbnVsbCxyLG4pOkp0KGUsdCxyLG4pLHQuY2hpbGQ7Y2FzZSAxMTpyZXR1cm4gcj10LnR5cGUsbz10LnBlbmRpbmdQcm9wcyxvPXQuZWxlbWVudFR5cGU9PT1yP286Sm4ocixvKSxWdihlLHQscixvLG4pO2Nhc2UgNzpyZXR1cm4gSnQoZSx0LHQucGVuZGluZ1Byb3BzLG4pLHQuY2hpbGQ7Y2FzZSA4OnJldHVybiBKdChlLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sbiksdC5jaGlsZDtjYXNlIDEyOnJldHVybiBKdChlLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sbiksdC5jaGlsZDtjYXNlIDEwOmU6e2lmKHI9dC50eXBlLl9jb250ZXh0LG89dC5wZW5kaW5nUHJvcHMsaT10Lm1lbW9pemVkUHJvcHMsbD1vLnZhbHVlLHplKHVjLHIuX2N1cnJlbnRWYWx1ZSksci5fY3VycmVudFZhbHVlPWwsaSE9PW51bGwpaWYoaXIoaS52YWx1ZSxsKSl7aWYoaS5jaGlsZHJlbj09PW8uY2hpbGRyZW4mJiFwbi5jdXJyZW50KXt0PUtyKGUsdCxuKTticmVhayBlfX1lbHNlIGZvcihpPXQuY2hpbGQsaSE9PW51bGwmJihpLnJldHVybj10KTtpIT09bnVsbDspe3ZhciBzPWkuZGVwZW5kZW5jaWVzO2lmKHMhPT1udWxsKXtsPWkuY2hpbGQ7Zm9yKHZhciBhPXMuZmlyc3RDb250ZXh0O2EhPT1udWxsOyl7aWYoYS5jb250ZXh0PT09cil7aWYoaS50YWc9PT0xKXthPVdyKC0xLG4mLW4pLGEudGFnPTI7dmFyIHU9aS51cGRhdGVRdWV1ZTtpZih1IT09bnVsbCl7dT11LnNoYXJlZDt2YXIgYz11LnBlbmRpbmc7Yz09PW51bGw/YS5uZXh0PWE6KGEubmV4dD1jLm5leHQsYy5uZXh0PWEpLHUucGVuZGluZz1hfX1pLmxhbmVzfD1uLGE9aS5hbHRlcm5hdGUsYSE9PW51bGwmJihhLmxhbmVzfD1uKSxtaChpLnJldHVybixuLHQpLHMubGFuZXN8PW47YnJlYWt9YT1hLm5leHR9fWVsc2UgaWYoaS50YWc9PT0xMClsPWkudHlwZT09PXQudHlwZT9udWxsOmkuY2hpbGQ7ZWxzZSBpZihpLnRhZz09PTE4KXtpZihsPWkucmV0dXJuLGw9PT1udWxsKXRocm93IEVycm9yKFUoMzQxKSk7bC5sYW5lc3w9bixzPWwuYWx0ZXJuYXRlLHMhPT1udWxsJiYocy5sYW5lc3w9biksbWgobCxuLHQpLGw9aS5zaWJsaW5nfWVsc2UgbD1pLmNoaWxkO2lmKGwhPT1udWxsKWwucmV0dXJuPWk7ZWxzZSBmb3IobD1pO2whPT1udWxsOyl7aWYobD09PXQpe2w9bnVsbDticmVha31pZihpPWwuc2libGluZyxpIT09bnVsbCl7aS5yZXR1cm49bC5yZXR1cm4sbD1pO2JyZWFrfWw9bC5yZXR1cm59aT1sfUp0KGUsdCxvLmNoaWxkcmVuLG4pLHQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDk6cmV0dXJuIG89dC50eXBlLHI9dC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sZmwodCxuKSxvPVduKG8pLHI9cihvKSx0LmZsYWdzfD0xLEp0KGUsdCxyLG4pLHQuY2hpbGQ7Y2FzZSAxNDpyZXR1cm4gcj10LnR5cGUsbz1KbihyLHQucGVuZGluZ1Byb3BzKSxvPUpuKHIudHlwZSxvKSxIdihlLHQscixvLG4pO2Nhc2UgMTU6cmV0dXJuIFl4KGUsdCx0LnR5cGUsdC5wZW5kaW5nUHJvcHMsbik7Y2FzZSAxNzpyZXR1cm4gcj10LnR5cGUsbz10LnBlbmRpbmdQcm9wcyxvPXQuZWxlbWVudFR5cGU9PT1yP286Sm4ocixvKSxqdShlLHQpLHQudGFnPTEsZ24ocik/KGU9ITAsbGModCkpOmU9ITEsZmwodCxuKSxFeCh0LHIsbykseWgodCxyLG8sbiksX2gobnVsbCx0LHIsITAsZSxuKTtjYXNlIDE5OnJldHVybiBxeChlLHQsbik7Y2FzZSAyMjpyZXR1cm4gWHgoZSx0LG4pfXRocm93IEVycm9yKFUoMTU2LHQudGFnKSl9O2Z1bmN0aW9uIGd3KGUsdCl7cmV0dXJuIEIxKGUsdCl9ZnVuY3Rpb24gclQoZSx0LG4scil7dGhpcy50YWc9ZSx0aGlzLmtleT1uLHRoaXMuc2libGluZz10aGlzLmNoaWxkPXRoaXMucmV0dXJuPXRoaXMuc3RhdGVOb2RlPXRoaXMudHlwZT10aGlzLmVsZW1lbnRUeXBlPW51bGwsdGhpcy5pbmRleD0wLHRoaXMucmVmPW51bGwsdGhpcy5wZW5kaW5nUHJvcHM9dCx0aGlzLmRlcGVuZGVuY2llcz10aGlzLm1lbW9pemVkU3RhdGU9dGhpcy51cGRhdGVRdWV1ZT10aGlzLm1lbW9pemVkUHJvcHM9bnVsbCx0aGlzLm1vZGU9cix0aGlzLnN1YnRyZWVGbGFncz10aGlzLmZsYWdzPTAsdGhpcy5kZWxldGlvbnM9bnVsbCx0aGlzLmNoaWxkTGFuZXM9dGhpcy5sYW5lcz0wLHRoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24gem4oZSx0LG4scil7cmV0dXJuIG5ldyByVChlLHQsbixyKX1mdW5jdGlvbiBUZyhlKXtyZXR1cm4gZT1lLnByb3RvdHlwZSwhKCFlfHwhZS5pc1JlYWN0Q29tcG9uZW50KX1mdW5jdGlvbiBvVChlKXtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIilyZXR1cm4gVGcoZSk/MTowO2lmKGUhPW51bGwpe2lmKGU9ZS4kJHR5cGVvZixlPT09S3ApcmV0dXJuIDExO2lmKGU9PT1HcClyZXR1cm4gMTR9cmV0dXJuIDJ9ZnVuY3Rpb24gVG8oZSx0KXt2YXIgbj1lLmFsdGVybmF0ZTtyZXR1cm4gbj09PW51bGw/KG49em4oZS50YWcsdCxlLmtleSxlLm1vZGUpLG4uZWxlbWVudFR5cGU9ZS5lbGVtZW50VHlwZSxuLnR5cGU9ZS50eXBlLG4uc3RhdGVOb2RlPWUuc3RhdGVOb2RlLG4uYWx0ZXJuYXRlPWUsZS5hbHRlcm5hdGU9bik6KG4ucGVuZGluZ1Byb3BzPXQsbi50eXBlPWUudHlwZSxuLmZsYWdzPTAsbi5zdWJ0cmVlRmxhZ3M9MCxuLmRlbGV0aW9ucz1udWxsKSxuLmZsYWdzPWUuZmxhZ3MmMTQ2ODAwNjQsbi5jaGlsZExhbmVzPWUuY2hpbGRMYW5lcyxuLmxhbmVzPWUubGFuZXMsbi5jaGlsZD1lLmNoaWxkLG4ubWVtb2l6ZWRQcm9wcz1lLm1lbW9pemVkUHJvcHMsbi5tZW1vaXplZFN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxuLnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdD1lLmRlcGVuZGVuY2llcyxuLmRlcGVuZGVuY2llcz10PT09bnVsbD9udWxsOntsYW5lczp0LmxhbmVzLGZpcnN0Q29udGV4dDp0LmZpcnN0Q29udGV4dH0sbi5zaWJsaW5nPWUuc2libGluZyxuLmluZGV4PWUuaW5kZXgsbi5yZWY9ZS5yZWYsbn1mdW5jdGlvbiBCdShlLHQsbixyLG8saSl7dmFyIGw9MjtpZihyPWUsdHlwZW9mIGU9PSJmdW5jdGlvbiIpVGcoZSkmJihsPTEpO2Vsc2UgaWYodHlwZW9mIGU9PSJzdHJpbmciKWw9NTtlbHNlIGU6c3dpdGNoKGUpe2Nhc2UgR2k6cmV0dXJuIGlpKG4uY2hpbGRyZW4sbyxpLHQpO2Nhc2UgSHA6bD04LG98PTg7YnJlYWs7Y2FzZSBXZjpyZXR1cm4gZT16bigxMixuLHQsb3wyKSxlLmVsZW1lbnRUeXBlPVdmLGUubGFuZXM9aSxlO2Nhc2UgVWY6cmV0dXJuIGU9em4oMTMsbix0LG8pLGUuZWxlbWVudFR5cGU9VWYsZS5sYW5lcz1pLGU7Y2FzZSBWZjpyZXR1cm4gZT16bigxOSxuLHQsbyksZS5lbGVtZW50VHlwZT1WZixlLmxhbmVzPWksZTtjYXNlIEMxOnJldHVybiBpZChuLG8saSx0KTtkZWZhdWx0OmlmKHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwpc3dpdGNoKGUuJCR0eXBlb2Ype2Nhc2UgUzE6bD0xMDticmVhayBlO2Nhc2UgRTE6bD05O2JyZWFrIGU7Y2FzZSBLcDpsPTExO2JyZWFrIGU7Y2FzZSBHcDpsPTE0O2JyZWFrIGU7Y2FzZSB1bzpsPTE2LHI9bnVsbDticmVhayBlfXRocm93IEVycm9yKFUoMTMwLGU9PW51bGw/ZTp0eXBlb2YgZSwiIikpfXJldHVybiB0PXpuKGwsbix0LG8pLHQuZWxlbWVudFR5cGU9ZSx0LnR5cGU9cix0LmxhbmVzPWksdH1mdW5jdGlvbiBpaShlLHQsbixyKXtyZXR1cm4gZT16big3LGUscix0KSxlLmxhbmVzPW4sZX1mdW5jdGlvbiBpZChlLHQsbixyKXtyZXR1cm4gZT16bigyMixlLHIsdCksZS5lbGVtZW50VHlwZT1DMSxlLmxhbmVzPW4sZS5zdGF0ZU5vZGU9e2lzSGlkZGVuOiExfSxlfWZ1bmN0aW9uIHZmKGUsdCxuKXtyZXR1cm4gZT16big2LGUsbnVsbCx0KSxlLmxhbmVzPW4sZX1mdW5jdGlvbiB5ZihlLHQsbil7cmV0dXJuIHQ9em4oNCxlLmNoaWxkcmVuIT09bnVsbD9lLmNoaWxkcmVuOltdLGUua2V5LHQpLHQubGFuZXM9bix0LnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzplLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246ZS5pbXBsZW1lbnRhdGlvbn0sdH1mdW5jdGlvbiBpVChlLHQsbixyLG8pe3RoaXMudGFnPXQsdGhpcy5jb250YWluZXJJbmZvPWUsdGhpcy5maW5pc2hlZFdvcms9dGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGwsdGhpcy50aW1lb3V0SGFuZGxlPS0xLHRoaXMuY2FsbGJhY2tOb2RlPXRoaXMucGVuZGluZ0NvbnRleHQ9dGhpcy5jb250ZXh0PW51bGwsdGhpcy5jYWxsYmFja1ByaW9yaXR5PTAsdGhpcy5ldmVudFRpbWVzPUpkKDApLHRoaXMuZXhwaXJhdGlvblRpbWVzPUpkKC0xKSx0aGlzLmVudGFuZ2xlZExhbmVzPXRoaXMuZmluaXNoZWRMYW5lcz10aGlzLm11dGFibGVSZWFkTGFuZXM9dGhpcy5leHBpcmVkTGFuZXM9dGhpcy5waW5nZWRMYW5lcz10aGlzLnN1c3BlbmRlZExhbmVzPXRoaXMucGVuZGluZ0xhbmVzPTAsdGhpcy5lbnRhbmdsZW1lbnRzPUpkKDApLHRoaXMuaWRlbnRpZmllclByZWZpeD1yLHRoaXMub25SZWNvdmVyYWJsZUVycm9yPW8sdGhpcy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPW51bGx9ZnVuY3Rpb24gYmcoZSx0LG4scixvLGksbCxzLGEpe3JldHVybiBlPW5ldyBpVChlLHQsbixzLGEpLHQ9PT0xPyh0PTEsaT09PSEwJiYodHw9OCkpOnQ9MCxpPXpuKDMsbnVsbCxudWxsLHQpLGUuY3VycmVudD1pLGkuc3RhdGVOb2RlPWUsaS5tZW1vaXplZFN0YXRlPXtlbGVtZW50OnIsaXNEZWh5ZHJhdGVkOm4sY2FjaGU6bnVsbCx0cmFuc2l0aW9uczpudWxsLHBlbmRpbmdTdXNwZW5zZUJvdW5kYXJpZXM6bnVsbH0sZGcoaSksZX1mdW5jdGlvbiBsVChlLHQsbil7dmFyIHI9Mzxhcmd1bWVudHMubGVuZ3RoJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOktpLGtleTpyPT1udWxsP251bGw6IiIrcixjaGlsZHJlbjplLGNvbnRhaW5lckluZm86dCxpbXBsZW1lbnRhdGlvbjpufX1mdW5jdGlvbiBtdyhlKXtpZighZSlyZXR1cm4gT287ZT1lLl9yZWFjdEludGVybmFscztlOntpZihTaShlKSE9PWV8fGUudGFnIT09MSl0aHJvdyBFcnJvcihVKDE3MCkpO3ZhciB0PWU7ZG97c3dpdGNoKHQudGFnKXtjYXNlIDM6dD10LnN0YXRlTm9kZS5jb250ZXh0O2JyZWFrIGU7Y2FzZSAxOmlmKGduKHQudHlwZSkpe3Q9dC5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7YnJlYWsgZX19dD10LnJldHVybn13aGlsZSh0IT09bnVsbCk7dGhyb3cgRXJyb3IoVSgxNzEpKX1pZihlLnRhZz09PTEpe3ZhciBuPWUudHlwZTtpZihnbihuKSlyZXR1cm4gZ3goZSxuLHQpfXJldHVybiB0fWZ1bmN0aW9uIHZ3KGUsdCxuLHIsbyxpLGwscyxhKXtyZXR1cm4gZT1iZyhuLHIsITAsZSxvLGksbCxzLGEpLGUuY29udGV4dD1tdyhudWxsKSxuPWUuY3VycmVudCxyPWxuKCksbz1rbyhuKSxpPVdyKHIsbyksaS5jYWxsYmFjaz10Pz9udWxsLENvKG4saSxvKSxlLmN1cnJlbnQubGFuZXM9byxPYShlLG8sciksbW4oZSxyKSxlfWZ1bmN0aW9uIGxkKGUsdCxuLHIpe3ZhciBvPXQuY3VycmVudCxpPWxuKCksbD1rbyhvKTtyZXR1cm4gbj1tdyhuKSx0LmNvbnRleHQ9PT1udWxsP3QuY29udGV4dD1uOnQucGVuZGluZ0NvbnRleHQ9bix0PVdyKGksbCksdC5wYXlsb2FkPXtlbGVtZW50OmV9LHI9cj09PXZvaWQgMD9udWxsOnIsciE9PW51bGwmJih0LmNhbGxiYWNrPXIpLGU9Q28obyx0LGwpLGUhPT1udWxsJiYob3IoZSxvLGwsaSksTHUoZSxvLGwpKSxsfWZ1bmN0aW9uIHhjKGUpe2lmKGU9ZS5jdXJyZW50LCFlLmNoaWxkKXJldHVybiBudWxsO3N3aXRjaChlLmNoaWxkLnRhZyl7Y2FzZSA1OnJldHVybiBlLmNoaWxkLnN0YXRlTm9kZTtkZWZhdWx0OnJldHVybiBlLmNoaWxkLnN0YXRlTm9kZX19ZnVuY3Rpb24gcnkoZSx0KXtpZihlPWUubWVtb2l6ZWRTdGF0ZSxlIT09bnVsbCYmZS5kZWh5ZHJhdGVkIT09bnVsbCl7dmFyIG49ZS5yZXRyeUxhbmU7ZS5yZXRyeUxhbmU9biE9PTAmJm48dD9uOnR9fWZ1bmN0aW9uIE5nKGUsdCl7cnkoZSx0KSwoZT1lLmFsdGVybmF0ZSkmJnJ5KGUsdCl9ZnVuY3Rpb24gc1QoKXtyZXR1cm4gbnVsbH12YXIgeXc9dHlwZW9mIHJlcG9ydEVycm9yPT0iZnVuY3Rpb24iP3JlcG9ydEVycm9yOmZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoZSl9O2Z1bmN0aW9uIFJnKGUpe3RoaXMuX2ludGVybmFsUm9vdD1lfXNkLnByb3RvdHlwZS5yZW5kZXI9UmcucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcm5hbFJvb3Q7aWYodD09PW51bGwpdGhyb3cgRXJyb3IoVSg0MDkpKTtsZChlLHQsbnVsbCxudWxsKX07c2QucHJvdG90eXBlLnVubW91bnQ9UmcucHJvdG90eXBlLnVubW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pbnRlcm5hbFJvb3Q7aWYoZSE9PW51bGwpe3RoaXMuX2ludGVybmFsUm9vdD1udWxsO3ZhciB0PWUuY29udGFpbmVySW5mbztoaShmdW5jdGlvbigpe2xkKG51bGwsZSxudWxsLG51bGwpfSksdFtWcl09bnVsbH19O2Z1bmN0aW9uIHNkKGUpe3RoaXMuX2ludGVybmFsUm9vdD1lfXNkLnByb3RvdHlwZS51bnN0YWJsZV9zY2hlZHVsZUh5ZHJhdGlvbj1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD1ZMSgpO2U9e2Jsb2NrZWRPbjpudWxsLHRhcmdldDplLHByaW9yaXR5OnR9O2Zvcih2YXIgbj0wO248aG8ubGVuZ3RoJiZ0IT09MCYmdDxob1tuXS5wcmlvcml0eTtuKyspO2hvLnNwbGljZShuLDAsZSksbj09PTAmJlExKGUpfX07ZnVuY3Rpb24gUGcoZSl7cmV0dXJuISghZXx8ZS5ub2RlVHlwZSE9PTEmJmUubm9kZVR5cGUhPT05JiZlLm5vZGVUeXBlIT09MTEpfWZ1bmN0aW9uIGFkKGUpe3JldHVybiEoIWV8fGUubm9kZVR5cGUhPT0xJiZlLm5vZGVUeXBlIT09OSYmZS5ub2RlVHlwZSE9PTExJiYoZS5ub2RlVHlwZSE9PTh8fGUubm9kZVZhbHVlIT09IiByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSAiKSl9ZnVuY3Rpb24gb3koKXt9ZnVuY3Rpb24gYVQoZSx0LG4scixvKXtpZihvKXtpZih0eXBlb2Ygcj09ImZ1bmN0aW9uIil7dmFyIGk9cjtyPWZ1bmN0aW9uKCl7dmFyIHU9eGMobCk7aS5jYWxsKHUpfX12YXIgbD12dyh0LHIsZSwwLG51bGwsITEsITEsIiIsb3kpO3JldHVybiBlLl9yZWFjdFJvb3RDb250YWluZXI9bCxlW1ZyXT1sLmN1cnJlbnQsaWEoZS5ub2RlVHlwZT09PTg/ZS5wYXJlbnROb2RlOmUpLGhpKCksbH1mb3IoO289ZS5sYXN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQobyk7aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpe3ZhciBzPXI7cj1mdW5jdGlvbigpe3ZhciB1PXhjKGEpO3MuY2FsbCh1KX19dmFyIGE9YmcoZSwwLCExLG51bGwsbnVsbCwhMSwhMSwiIixveSk7cmV0dXJuIGUuX3JlYWN0Um9vdENvbnRhaW5lcj1hLGVbVnJdPWEuY3VycmVudCxpYShlLm5vZGVUeXBlPT09OD9lLnBhcmVudE5vZGU6ZSksaGkoZnVuY3Rpb24oKXtsZCh0LGEsbixyKX0pLGF9ZnVuY3Rpb24gdWQoZSx0LG4scixvKXt2YXIgaT1uLl9yZWFjdFJvb3RDb250YWluZXI7aWYoaSl7dmFyIGw9aTtpZih0eXBlb2Ygbz09ImZ1bmN0aW9uIil7dmFyIHM9bztvPWZ1bmN0aW9uKCl7dmFyIGE9eGMobCk7cy5jYWxsKGEpfX1sZCh0LGwsZSxvKX1lbHNlIGw9YVQobix0LGUsbyxyKTtyZXR1cm4geGMobCl9SzE9ZnVuY3Rpb24oZSl7c3dpdGNoKGUudGFnKXtjYXNlIDM6dmFyIHQ9ZS5zdGF0ZU5vZGU7aWYodC5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXt2YXIgbj1fcyh0LnBlbmRpbmdMYW5lcyk7biE9PTAmJihRcCh0LG58MSksbW4odCxmdCgpKSwhKFRlJjYpJiYoJGw9ZnQoKSs1MDAsVW8oKSkpfWJyZWFrO2Nhc2UgMTM6aGkoZnVuY3Rpb24oKXt2YXIgcj1IcihlLDEpO2lmKHIhPT1udWxsKXt2YXIgbz1sbigpO29yKHIsZSwxLG8pfX0pLE5nKGUsMSl9fTtKcD1mdW5jdGlvbihlKXtpZihlLnRhZz09PTEzKXt2YXIgdD1IcihlLDEzNDIxNzcyOCk7aWYodCE9PW51bGwpe3ZhciBuPWxuKCk7b3IodCxlLDEzNDIxNzcyOCxuKX1OZyhlLDEzNDIxNzcyOCl9fTtHMT1mdW5jdGlvbihlKXtpZihlLnRhZz09PTEzKXt2YXIgdD1rbyhlKSxuPUhyKGUsdCk7aWYobiE9PW51bGwpe3ZhciByPWxuKCk7b3IobixlLHQscil9TmcoZSx0KX19O1kxPWZ1bmN0aW9uKCl7cmV0dXJuIEFlfTtYMT1mdW5jdGlvbihlLHQpe3ZhciBuPUFlO3RyeXtyZXR1cm4gQWU9ZSx0KCl9ZmluYWxseXtBZT1ufX07ZWg9ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaCh0KXtjYXNlImlucHV0IjppZihHZihlLG4pLHQ9bi5uYW1lLG4udHlwZT09PSJyYWRpbyImJnQhPW51bGwpe2ZvcihuPWU7bi5wYXJlbnROb2RlOyluPW4ucGFyZW50Tm9kZTtmb3Iobj1uLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9IitKU09OLnN0cmluZ2lmeSgiIit0KSsnXVt0eXBlPSJyYWRpbyJdJyksdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO2lmKHIhPT1lJiZyLmZvcm09PT1lLmZvcm0pe3ZhciBvPXFjKHIpO2lmKCFvKXRocm93IEVycm9yKFUoOTApKTtrMShyKSxHZihyLG8pfX19YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6YjEoZSxuKTticmVhaztjYXNlInNlbGVjdCI6dD1uLnZhbHVlLHQhPW51bGwmJmFsKGUsISFuLm11bHRpcGxlLHQsITEpfX07TDE9Q2c7RDE9aGk7dmFyIHVUPXt1c2luZ0NsaWVudEVudHJ5UG9pbnQ6ITEsRXZlbnRzOltNYSxKaSxxYyxBMSxNMSxDZ119LGNzPXtmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpxbyxidW5kbGVUeXBlOjAsdmVyc2lvbjoiMTguMi4wIixyZW5kZXJlclBhY2thZ2VOYW1lOiJyZWFjdC1kb20ifSxjVD17YnVuZGxlVHlwZTpjcy5idW5kbGVUeXBlLHZlcnNpb246Y3MudmVyc2lvbixyZW5kZXJlclBhY2thZ2VOYW1lOmNzLnJlbmRlcmVyUGFja2FnZU5hbWUscmVuZGVyZXJDb25maWc6Y3MucmVuZGVyZXJDb25maWcsb3ZlcnJpZGVIb29rU3RhdGU6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzOm51bGwsb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzUmVuYW1lUGF0aDpudWxsLHNldEVycm9ySGFuZGxlcjpudWxsLHNldFN1c3BlbnNlSGFuZGxlcjpudWxsLHNjaGVkdWxlVXBkYXRlOm51bGwsY3VycmVudERpc3BhdGNoZXJSZWY6UXIuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT16MShlKSxlPT09bnVsbD9udWxsOmUuc3RhdGVOb2RlfSxmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpjcy5maW5kRmliZXJCeUhvc3RJbnN0YW5jZXx8c1QsZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOm51bGwsc2NoZWR1bGVSZWZyZXNoOm51bGwsc2NoZWR1bGVSb290Om51bGwsc2V0UmVmcmVzaEhhbmRsZXI6bnVsbCxnZXRDdXJyZW50RmliZXI6bnVsbCxyZWNvbmNpbGVyVmVyc2lvbjoiMTguMi4wLW5leHQtOWUzYjc3MmI4LTIwMjIwNjA4In07aWYodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXzwidSIpe3ZhciBmdT1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYoIWZ1LmlzRGlzYWJsZWQmJmZ1LnN1cHBvcnRzRmliZXIpdHJ5e1hjPWZ1LmluamVjdChjVCkseXI9ZnV9Y2F0Y2h7fX1Sbi5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD11VDtSbi5jcmVhdGVQb3J0YWw9ZnVuY3Rpb24oZSx0KXt2YXIgbj0yPGFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbDtpZighUGcodCkpdGhyb3cgRXJyb3IoVSgyMDApKTtyZXR1cm4gbFQoZSx0LG51bGwsbil9O1JuLmNyZWF0ZVJvb3Q9ZnVuY3Rpb24oZSx0KXtpZighUGcoZSkpdGhyb3cgRXJyb3IoVSgyOTkpKTt2YXIgbj0hMSxyPSIiLG89eXc7cmV0dXJuIHQhPW51bGwmJih0LnVuc3RhYmxlX3N0cmljdE1vZGU9PT0hMCYmKG49ITApLHQuaWRlbnRpZmllclByZWZpeCE9PXZvaWQgMCYmKHI9dC5pZGVudGlmaWVyUHJlZml4KSx0Lm9uUmVjb3ZlcmFibGVFcnJvciE9PXZvaWQgMCYmKG89dC5vblJlY292ZXJhYmxlRXJyb3IpKSx0PWJnKGUsMSwhMSxudWxsLG51bGwsbiwhMSxyLG8pLGVbVnJdPXQuY3VycmVudCxpYShlLm5vZGVUeXBlPT09OD9lLnBhcmVudE5vZGU6ZSksbmV3IFJnKHQpfTtSbi5maW5kRE9NTm9kZT1mdW5jdGlvbihlKXtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKGUubm9kZVR5cGU9PT0xKXJldHVybiBlO3ZhciB0PWUuX3JlYWN0SW50ZXJuYWxzO2lmKHQ9PT12b2lkIDApdGhyb3cgdHlwZW9mIGUucmVuZGVyPT0iZnVuY3Rpb24iP0Vycm9yKFUoMTg4KSk6KGU9T2JqZWN0LmtleXMoZSkuam9pbigiLCIpLEVycm9yKFUoMjY4LGUpKSk7cmV0dXJuIGU9ejEodCksZT1lPT09bnVsbD9udWxsOmUuc3RhdGVOb2RlLGV9O1JuLmZsdXNoU3luYz1mdW5jdGlvbihlKXtyZXR1cm4gaGkoZSl9O1JuLmh5ZHJhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKCFhZCh0KSl0aHJvdyBFcnJvcihVKDIwMCkpO3JldHVybiB1ZChudWxsLGUsdCwhMCxuKX07Um4uaHlkcmF0ZVJvb3Q9ZnVuY3Rpb24oZSx0LG4pe2lmKCFQZyhlKSl0aHJvdyBFcnJvcihVKDQwNSkpO3ZhciByPW4hPW51bGwmJm4uaHlkcmF0ZWRTb3VyY2VzfHxudWxsLG89ITEsaT0iIixsPXl3O2lmKG4hPW51bGwmJihuLnVuc3RhYmxlX3N0cmljdE1vZGU9PT0hMCYmKG89ITApLG4uaWRlbnRpZmllclByZWZpeCE9PXZvaWQgMCYmKGk9bi5pZGVudGlmaWVyUHJlZml4KSxuLm9uUmVjb3ZlcmFibGVFcnJvciE9PXZvaWQgMCYmKGw9bi5vblJlY292ZXJhYmxlRXJyb3IpKSx0PXZ3KHQsbnVsbCxlLDEsbj8/bnVsbCxvLCExLGksbCksZVtWcl09dC5jdXJyZW50LGlhKGUpLHIpZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyluPXJbZV0sbz1uLl9nZXRWZXJzaW9uLG89byhuLl9zb3VyY2UpLHQubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT09bnVsbD90Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9W24sb106dC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2gobixvKTtyZXR1cm4gbmV3IHNkKHQpfTtSbi5yZW5kZXI9ZnVuY3Rpb24oZSx0LG4pe2lmKCFhZCh0KSl0aHJvdyBFcnJvcihVKDIwMCkpO3JldHVybiB1ZChudWxsLGUsdCwhMSxuKX07Um4udW5tb3VudENvbXBvbmVudEF0Tm9kZT1mdW5jdGlvbihlKXtpZighYWQoZSkpdGhyb3cgRXJyb3IoVSg0MCkpO3JldHVybiBlLl9yZWFjdFJvb3RDb250YWluZXI/KGhpKGZ1bmN0aW9uKCl7dWQobnVsbCxudWxsLGUsITEsZnVuY3Rpb24oKXtlLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbCxlW1ZyXT1udWxsfSl9KSwhMCk6ITF9O1JuLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPUNnO1JuLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFhZChuKSl0aHJvdyBFcnJvcihVKDIwMCkpO2lmKGU9PW51bGx8fGUuX3JlYWN0SW50ZXJuYWxzPT09dm9pZCAwKXRocm93IEVycm9yKFUoMzgpKTtyZXR1cm4gdWQoZSx0LG4sITEscil9O1JuLnZlcnNpb249IjE4LjIuMC1uZXh0LTllM2I3NzJiOC0yMDIyMDYwOCI7ZnVuY3Rpb24geHcoKXtpZighKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18+InUifHx0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFIT0iZnVuY3Rpb24iKSl0cnl7X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKHh3KX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfX14dygpLHYxLmV4cG9ydHM9Um47dmFyICRyPXYxLmV4cG9ydHM7Y29uc3Qgd3c9UmEoJHIpLGRUPXMxKHtfX3Byb3RvX186bnVsbCxkZWZhdWx0Ond3fSxbJHJdKTt2YXIgaXk9JHI7RmYuY3JlYXRlUm9vdD1peS5jcmVhdGVSb290LEZmLmh5ZHJhdGVSb290PWl5Lmh5ZHJhdGVSb290O3ZhciBfdz17ZXhwb3J0czp7fX0sY2Q9e307LyoqCiAqIEBsaWNlbnNlIFJlYWN0CiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi92YXIgZlQ9cCxoVD1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IikscFQ9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSxnVD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LG1UPWZULl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLHZUPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gU3coZSx0LG4pe3ZhciByLG89e30saT1udWxsLGw9bnVsbDtuIT09dm9pZCAwJiYoaT0iIituKSx0LmtleSE9PXZvaWQgMCYmKGk9IiIrdC5rZXkpLHQucmVmIT09dm9pZCAwJiYobD10LnJlZik7Zm9yKHIgaW4gdClnVC5jYWxsKHQscikmJiF2VC5oYXNPd25Qcm9wZXJ0eShyKSYmKG9bcl09dFtyXSk7aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gdD1lLmRlZmF1bHRQcm9wcyx0KW9bcl09PT12b2lkIDAmJihvW3JdPXRbcl0pO3JldHVybnskJHR5cGVvZjpoVCx0eXBlOmUsa2V5OmkscmVmOmwscHJvcHM6byxfb3duZXI6bVQuY3VycmVudH19Y2QuRnJhZ21lbnQ9cFQ7Y2QuanN4PVN3O2NkLmpzeHM9U3c7X3cuZXhwb3J0cz1jZDt2YXIgdz1fdy5leHBvcnRzO2Z1bmN0aW9uIEFoKGUsdCl7KHQ9PW51bGx8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gT2coZSx0KXtpZihlKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIEFoKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKG49PT0iT2JqZWN0IiYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxuPT09Ik1hcCJ8fG49PT0iU2V0IilyZXR1cm4gQXJyYXkuZnJvbShlKTtpZihuPT09IkFyZ3VtZW50cyJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBBaChlLHQpfX1mdW5jdGlvbiBBZyhlLHQpe3ZhciBuPXR5cGVvZiBTeW1ib2w8InUiJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheShlKXx8KG49T2coZSkpfHx0JiZlJiZ0eXBlb2YgZS5sZW5ndGg9PSJudW1iZXIiKXtuJiYoZT1uKTt2YXIgcj0wLG89ZnVuY3Rpb24oKXt9O3JldHVybntzOm8sbjpmdW5jdGlvbigpe3JldHVybiByPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtyKytdfX0sZTpmdW5jdGlvbihhKXt0aHJvdyBhfSxmOm99fXRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfXZhciBpPSEwLGw9ITEscztyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGE9bi5uZXh0KCk7cmV0dXJuIGk9YS5kb25lLGF9LGU6ZnVuY3Rpb24oYSl7bD0hMCxzPWF9LGY6ZnVuY3Rpb24oKXt0cnl7IWkmJm4ucmV0dXJuIT1udWxsJiZuLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBzfX19fWZ1bmN0aW9uIEV3KGUpe3JldHVybiBlLmxlbmd0aD4wfXZhciBEYT1PYmplY3QuZnJlZXplKHtraW5kOiJvayIsdmFsdWU6dm9pZCAwfSk7ZnVuY3Rpb24gSWEoZSl7cmV0dXJuIGU9PT12b2lkIDA/RGE6e2tpbmQ6Im9rIix2YWx1ZTplfX1mdW5jdGlvbiB3cihlKXtyZXR1cm57a2luZDoiZXJyIixlcnJvcjplfX1mdW5jdGlvbiBqbChlKXtyZXR1cm4gZT09PURhfHxlLmtpbmQ9PT0ib2sifWZ1bmN0aW9uIE1nKGUpe3JldHVybiBlIT09RGEmJmUua2luZD09PSJlcnIifWZ1bmN0aW9uIEN3KGUpe3ZhciB0PVtdLG49W10scj1BZyhlKSxvO3RyeXtmb3Ioci5zKCk7IShvPXIubigpKS5kb25lOyl7dmFyIGk9by52YWx1ZTtqbChpKT90LnB1c2goaS52YWx1ZSk6bi5wdXNoKGkuZXJyb3IpfX1jYXRjaChsKXtyLmUobCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gRXcobik/d3Iobik6SWEodCl9ZnVuY3Rpb24geVQoZSl7cmV0dXJuIEN3KGUpfWZ1bmN0aW9uIHhUKGUpe3ZhciB0PVtdLG49QWcoZSkscjt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7TWcobykmJnQucHVzaChvLmVycm9yKX19Y2F0Y2goaSl7bi5lKGkpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIEV3KHQpP3dyKHQpOkRhfWZ1bmN0aW9uIHdUKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgcj1JYSh0KSxvPTA7bzxuLmxlbmd0aCYmamwocik7KytvKXI9ZShyLnZhbHVlLG5bb10sbyk7cmV0dXJuIHJ9fWZ1bmN0aW9uIF9UKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gamwodCk/SWEoZSh0LnZhbHVlKSk6dH19ZnVuY3Rpb24gU1QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBqbCh0KT9lKHQudmFsdWUpOnR9fWZ1bmN0aW9uIEVUKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWcodCk/d3IoZSh0LmVycm9yKSk6dH19ZnVuY3Rpb24gQ1QoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUobik/SWEobik6d3IodChuKSl9fXZhciAkVD1mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gamwocik/dChyLnZhbHVlKT9yOndyKG4oci52YWx1ZSkpOnJ9fSxEcz1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCx2b2lkT2s6RGEsb2s6SWEsZXJyOndyLGlzT2s6amwsaXNFcnI6TWcsYWxsVDpDdyxhbGw6eVQsYWxsVjp4VCxmbGF0TWFwUmVkdWNlOndULG1hcDpfVCxmbGF0TWFwOlNULG1hcEVycjpFVCxmcm9tUHJlZGljYXRlOkNULGZpbHRlck9yRWxzZTokVH0pO2Z1bmN0aW9uIGtUKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIEFoKGUpfWZ1bmN0aW9uIFRUKGUpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZlW1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fGVbIkBAaXRlcmF0b3IiXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbShlKX1mdW5jdGlvbiBiVCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gTlQoZSl7cmV0dXJuIGtUKGUpfHxUVChlKXx8T2coZSl8fGJUKCl9ZnVuY3Rpb24gbWUoZSl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4gbWU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG1lKGUpfWZ1bmN0aW9uIFJUKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbClyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYobiE9PXZvaWQgMCl7dmFyIHI9bi5jYWxsKGUsdHx8ImRlZmF1bHQiKTtpZih0eXBlb2YgciE9Im9iamVjdCIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4odD09PSJzdHJpbmciP1N0cmluZzpOdW1iZXIpKGUpfWZ1bmN0aW9uICR3KGUpe3ZhciB0PVJUKGUsInN0cmluZyIpO3JldHVybiB0eXBlb2YgdD09InN5bWJvbCI/dDpTdHJpbmcodCl9ZnVuY3Rpb24geHQoZSx0LG4pe3JldHVybiB0PSR3KHQpLHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gbHkoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKGZ1bmN0aW9uKG8pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbykuZW51bWVyYWJsZX0pKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBrbChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF0hPW51bGw/YXJndW1lbnRzW3RdOnt9O3QlMj9seShPYmplY3QobiksITApLmZvckVhY2goZnVuY3Rpb24ocil7eHQoZSxyLG5bcl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6bHkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHIpKX0pfXJldHVybiBlfWZ1bmN0aW9uIFBUKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9ZnVuY3Rpb24gT1QoZSx0KXt2YXIgbj1lPT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG4hPW51bGwpe3ZhciByLG8saSxsLHM9W10sYT0hMCx1PSExO3RyeXtpZihpPShuPW4uY2FsbChlKSkubmV4dCx0PT09MCl7aWYoT2JqZWN0KG4pIT09bilyZXR1cm47YT0hMX1lbHNlIGZvcig7IShhPShyPWkuY2FsbChuKSkuZG9uZSkmJihzLnB1c2goci52YWx1ZSkscy5sZW5ndGghPT10KTthPSEwKTt9Y2F0Y2goYyl7dT0hMCxvPWN9ZmluYWxseXt0cnl7aWYoIWEmJm4ucmV0dXJuIT1udWxsJiYobD1uLnJldHVybigpLE9iamVjdChsKSE9PWwpKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgb319cmV0dXJuIHN9fWZ1bmN0aW9uIEFUKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIGJvKGUsdCl7cmV0dXJuIFBUKGUpfHxPVChlLHQpfHxPZyhlLHQpfHxBVCgpfWZ1bmN0aW9uIGtyKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gc3koZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCR3KHIua2V5KSxyKX19ZnVuY3Rpb24gVHIoZSx0LG4pe3JldHVybiB0JiZzeShlLnByb3RvdHlwZSx0KSxuJiZzeShlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gTWgoZSx0KXtyZXR1cm4gTWg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24ocixvKXtyZXR1cm4gci5fX3Byb3RvX189byxyfSxNaChlLHQpfWZ1bmN0aW9uIEVpKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiImJnQhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJk1oKGUsdCl9ZnVuY3Rpb24gd2MoZSl7cmV0dXJuIHdjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKG4pe3JldHVybiBuLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pfSx3YyhlKX1mdW5jdGlvbiBNVCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKHR5cGVvZiBQcm94eT09ImZ1bmN0aW9uIilyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBrdyhlKXtpZihlPT09dm9pZCAwKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ZnVuY3Rpb24gTFQoZSx0KXtpZih0JiYodHlwZW9mIHQ9PSJvYmplY3QifHx0eXBlb2YgdD09ImZ1bmN0aW9uIikpcmV0dXJuIHQ7aWYodCE9PXZvaWQgMCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBrdyhlKX1mdW5jdGlvbiBDaShlKXt2YXIgdD1NVCgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXdjKGUpLG87aWYodCl7dmFyIGk9d2ModGhpcykuY29uc3RydWN0b3I7bz1SZWZsZWN0LmNvbnN0cnVjdChyLGFyZ3VtZW50cyxpKX1lbHNlIG89ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIExUKHRoaXMsbyl9fXZhciAkaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtrcih0aGlzLGUpfXJldHVybiBUcihlLFt7a2V5OiJhcHBlbmRWYWxpZGF0aW9uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKG4scixvLGkpe3JldHVybiBuPyhuW3JdP25bcl0ucHVzaCh7bWVzc2FnZTpvLHZhbHVlOml9KTpuW3JdPVt7bWVzc2FnZTpvLHZhbHVlOml9XSxuKTp4dCh7fSxyLFt7bWVzc2FnZTpvLHZhbHVlOml9XSl9fV0pLGV9KCksV3U9U3ltYm9sKCJHZXRTY2hlbWEiKSxubj1TeW1ib2woIlBhdGgiKSx3dD1TeW1ib2woIkdldFNvdXJjZSIpO2Z1bmN0aW9uIERUKGUpe3JldHVybiBlW1d1XX12YXIgTGc9VHIoZnVuY3Rpb24gZSh0KXtrcih0aGlzLGUpLHRoaXMuc3Bhbj10fSksSVQ9ZnVuY3Rpb24oZSl7RWkobixlKTt2YXIgdD1DaShuKTtmdW5jdGlvbiBuKHIsbyl7dmFyIGk7cmV0dXJuIGtyKHRoaXMsbiksaT10LmNhbGwodGhpcyxvKSx4dChrdyhpKSwidHlwZSIsIlN5bSIpLGkudmFsdWU9cixpfXJldHVybiBUcihuLFt7a2V5OiJ0cmFuc3BpbGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9fV0pLG59KExnKTtuZXcgSVQoIigpIik7dmFyIEh0PSJfdHlwZSIsdm49Il9yZWYiLGpUPWZ1bmN0aW9uKGUpe0VpKG4sZSk7dmFyIHQ9Q2kobik7ZnVuY3Rpb24gbihyKXt2YXIgbyxpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4ga3IodGhpcyxuKSxvPXQuY2FsbCh0aGlzKSxvLm9wdGlvbnM9cixvLm9wdD1pLG99cmV0dXJuIFRyKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihvLGkpe3JldHVybiB0aGlzLm9wdCYmaT09bnVsbD8hMTppPT1udWxsP3h0KHt9LG8sW3ttZXNzYWdlOiJOb24tb3B0aW9uYWwgaW1hZ2Ugd2FzIG51bGwgb3IgdW5kZWZpbmVkLiIsdmFsdWU6aX1dKTp0eXBlb2YgaVt2bl0hPSJzdHJpbmciP3h0KHt9LG8sW3ttZXNzYWdlOiJJbWFnZSBkaWQgbm90IGhhdmUgYSBmaWxlIHJlZmVyZW5jZSBzdHJpbmcuIEdvdDogIi5jb25jYXQobWUoaVt2bl0pKSx2YWx1ZTppfV0pOmlbSHRdIT09ImZpbGUiP3h0KHt9LG8sW3ttZXNzYWdlOiJJbWFnZSBkaWQgbm90IGhhdmUgdGhlIHZhbGlkIGZpbGUgZXh0ZW5zaW9uIHR5cGUuIEdvdDogIi5jb25jYXQoaVtIdF0pLHZhbHVlOml9XSk6aS5tZXRhZGF0YT94dCh7fSxvLFt7bWVzc2FnZToiRm91bmQgbWV0YWRhdGEsIGJ1dCBpdCBjb3VsZCBub3QgYmUgdmFsaWRhdGVkLiBJbWFnZSBtZXRhZGF0YSBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIHRoZSByZXF1aXJlZCBwcm9wczogd2lkdGggKHBvc2l0aXZlIG51bWJlciksIGhlaWdodCAocG9zaXRpdmUgbnVtYmVyKSBhbmQgc2hhMjU2IChzdHJpbmcgb2YgbGVuZ3RoIDY0IG9mIHRoZSBiYXNlMTYgaGFzaCkuIix2YWx1ZTppLGZpeGVzOlsiaW1hZ2U6cmVwbGFjZS1tZXRhZGF0YSJdfV0pOnh0KHt9LG8sW3ttZXNzYWdlOiJDb3VsZCBub3QgdmFsaWRhdGUgSW1hZ2UgbWV0YWRhdGEuIix2YWx1ZTppLGZpeGVzOlsiaW1hZ2U6YWRkLW1ldGFkYXRhIl19XSl9fSx7a2V5OiJhc3NlcnQiLHZhbHVlOmZ1bmN0aW9uKG8pe3JldHVybiB0aGlzLm9wdCYmbz09bnVsbD8hMDoobz09bnVsbD92b2lkIDA6b1t2bl0pPT09ImltYWdlIiYmKG89PW51bGw/dm9pZCAwOm9bSHRdKT09PSJmaWxlIn19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLm9wdGlvbnMsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJpbWFnZSIsb3B0aW9uczp0aGlzLm9wdGlvbnMsb3B0OnRoaXMub3B0fX19XSksbn0oJGkpLFR3PWZ1bmN0aW9uKHQpe3ZhciBuO2lmKCF0W3ZuXS5zdGFydHNXaXRoKCIvcHVibGljIikpe3ZhciByO3JldHVybnt1cmw6dFt2bl0rIj9zaGEyNTY9Ii5jb25jYXQoKHI9dC5tZXRhZGF0YSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnNoYTI1NiksbWV0YWRhdGE6dC5tZXRhZGF0YX19cmV0dXJue3VybDp0W3ZuXS5zbGljZSg3KSsiP3NoYTI1Nj0iLmNvbmNhdCgobj10Lm1ldGFkYXRhKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uc2hhMjU2KSxtZXRhZGF0YTp0Lm1ldGFkYXRhfX07ZnVuY3Rpb24gYncoZSl7cmV0dXJuIG1lKGUpPT09Im9iamVjdCImJmUhPT1udWxsJiZlIT09dm9pZCAwJiYoInZhbCJpbiBlfHwidmFsUGF0aCJpbiBlKX1mdW5jdGlvbiB6VChlKXtyZXR1cm4gbWUoZSk9PT0ib2JqZWN0IiYmZSE9PW51bGwmJmUhPT12b2lkIDAmJm5uIGluIGUmJiJ2YWwiaW4gZX1mdW5jdGlvbiBGVChlKXtyZXR1cm4gZVtubl19ZnVuY3Rpb24gQlQoZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9ZnVuY3Rpb24gYXkoZSx0LG4pe3JldHVybiB0P0V0KGUoRXQodCxuKSkpOkV0KHQsbil9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIG1lKGUpPT09Im9iamVjdCImJmUhPT1udWxsJiYod3QgaW4gZXx8bm4gaW4gZSl9ZnVuY3Rpb24gRXQoZSx0LG4pe2lmKG1lKGUpPT09Im9iamVjdCIpe2lmKE5vKGUpKXJldHVybiBlO2lmKGJ3KGUpKXJldHVybiBFdChlLnZhbCxlLnZhbFBhdGgpfWlmKGUmJmVbdm5dJiZlW0h0XT09PSJmaWxlIil7dmFyIHI9ZVt2bl07aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IEVycm9yKCJJbnZhbGlkIGZpbGUgcmVmOiAiK3IpO3JldHVybiBFdChUdyhlKSx0LG4pfXN3aXRjaChtZShlKSl7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOnRocm93IEVycm9yKCJJbnZhbGlkIHNlbGVjdG9yIHR5cGU6ICIuY29uY2F0KG1lKGUpLCI6ICIpLmNvbmNhdChlKSk7Y2FzZSJvYmplY3QiOmlmKGUhPT1udWxsKXJldHVybiBuZXcgUHJveHkoZSx7aGFzOmZ1bmN0aW9uKGksbCl7cmV0dXJuIGw9PT13dHx8bD09PW5ufHxsPT09ImFuZFRoZW4ifHxsPT09V3U/ITA6bCBpbiBpfSxnZXQ6ZnVuY3Rpb24oaSxsKXtpZihsPT09d3QpcmV0dXJuIGU7aWYobD09PW5uKXJldHVybiB0O2lmKGw9PT1XdSlyZXR1cm4gbjtpZihsPT09ImFuZFRoZW4iKXJldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYXkoYSxlLHQpfTtpZihBcnJheS5pc0FycmF5KGkpKXtpZihsPT09ImZpbHRlciIpcmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciB1PWkubWFwKGZ1bmN0aW9uKGMsZCl7cmV0dXJuIEV0KGMsdHIodCxkKSxuPT1udWxsP3ZvaWQgMDpuLml0ZW0pfSkuZmlsdGVyKGZ1bmN0aW9uKGMpe3JldHVybiBhJiZhIGluc3RhbmNlb2YgJGk/YS5hc3NlcnQodXkoYykpOnV5KGEoYykpfSk7cmV0dXJuIEV0KHUsdCxuKX07aWYobD09PSJtYXAiKXJldHVybiBmdW5jdGlvbihhKXt2YXIgdT1pLm1hcChmdW5jdGlvbihjLGQpe3ZhciBmPWEoRXQoYyx0cih0LGQpLG49PW51bGw/dm9pZCAwOm4uaXRlbSksRXQoZCkpO3JldHVybiBObyhmKT9mOkV0KGYpfSk7cmV0dXJuIEV0KHUsdCxuKX19aWYoQXJyYXkuaXNBcnJheShpKSYmbD09PSJsZW5ndGgiKXJldHVybiBFdChpLmxlbmd0aCk7dmFyIHM9UmVmbGVjdC5nZXQoaSxsKTtyZXR1cm4gQlQoZSxsKT9OdW1iZXIuaXNOYU4oTnVtYmVyKGwpKT9FdChzLHRyKHQsbCksbj09bnVsbD92b2lkIDA6bi5pdGVtc1tsXSk6RXQocyx0cih0LE51bWJlcihsKSksbj09bnVsbD92b2lkIDA6bi5pdGVtKTpzfX0pO2RlZmF1bHQ6cmV0dXJuIHh0KHh0KHh0KHtlcTpmdW5jdGlvbihpKXt2YXIgbD1pO2lmKE5vKGkpJiYobD1pW3d0XSxsIGluc3RhbmNlb2YgTGcpKXRocm93IEVycm9yKCJUT0RPOiBDYW5ub3QgZXZhbHVhdGUgZXF1YWxpdHkgd2l0aCBhbiBFeHByIik7cmV0dXJuIEV0KGU9PT1sLHZvaWQgMCl9LGFuZFRoZW46ZnVuY3Rpb24oaSl7cmV0dXJuIGF5KGksZT09PXZvaWQgMD9udWxsOmUsdCl9fSx3dCxlPT09dm9pZCAwP251bGw6ZSksbm4sdCksV3Usbil9fWZ1bmN0aW9uIHRyKGUsdCl7aWYobWUodCk9PT0ic3ltYm9sIil0aHJvdyBFcnJvcigiQ2Fubm90IGNyZWF0ZSB2YWwgcGF0aCBvZiBhcnJheSBpdGVtIHdpdGggc3ltYm9sIHByb3A6ICIuY29uY2F0KHQudG9TdHJpbmcoKSkpO3JldHVybiBlJiYiIi5jb25jYXQoZSwiLiIpLmNvbmNhdChKU09OLnN0cmluZ2lmeSh0KSl9ZnVuY3Rpb24gdXkoZSl7aWYobWUoZSk9PT0ib2JqZWN0IiYmKHd0IGluIGV8fG5uIGluIGUpKXt2YXIgdD1lW3d0XTtyZXR1cm4gdH1yZXR1cm4gZX12YXIgV1Q9ZnVuY3Rpb24oZSl7RWkobixlKTt2YXIgdD1DaShuKTtmdW5jdGlvbiBuKHIpe3ZhciBvLGk9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiBrcih0aGlzLG4pLG89dC5jYWxsKHRoaXMpLG8uaXRlbXM9cixvLm9wdD1pLG99cmV0dXJuIFRyKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihvLGkpe3ZhciBsPXRoaXMscz0hMTtyZXR1cm4gdGhpcy5vcHQmJmk9PW51bGw/ITE6bWUoaSkhPT0ib2JqZWN0Ij94dCh7fSxvLFt7bWVzc2FnZToiRXhwZWN0ZWQgJ29iamVjdCcsIGdvdCAnIi5jb25jYXQobWUoaSksIiciKX1dKTpBcnJheS5pc0FycmF5KGkpP3h0KHt9LG8sW3ttZXNzYWdlOiJFeHBlY3RlZCAnb2JqZWN0JywgZ290ICdhcnJheScifV0pOihPYmplY3QuZW50cmllcyh0aGlzLml0ZW1zKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciB1PWJvKGEsMiksYz11WzBdLGQ9dVsxXSxmPXRyKG8sYyk7aWYoIWYpcz1sLmFwcGVuZFZhbGlkYXRpb25FcnJvcihzLG8sIkludGVybmFsIGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIHBhdGggYXQgIi5jb25jYXQoIW8mJnR5cGVvZiBvPT0ic3RyaW5nIj8iPGVtcHR5IHN0cmluZz4iOm8sIiBhdCBrZXkgIikuY29uY2F0KGMpLGkpO2Vsc2V7dmFyIGg9ZC52YWxpZGF0ZShmLGlbY10pO2gmJnM/cz1rbChrbCh7fSxoKSxzKTpoJiYocz1oKX19KSxzKX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24obyl7aWYodGhpcy5vcHQmJm89PW51bGwpcmV0dXJuITA7aWYoIW8pcmV0dXJuITE7Zm9yKHZhciBpPTAsbD1PYmplY3QuZW50cmllcyh0aGlzLml0ZW1zKTtpPGwubGVuZ3RoO2krKyl7dmFyIHM9Ym8obFtpXSwyKSxhPXNbMF0sdT1zWzFdO2lmKCF1LmFzc2VydChvW2FdKSlyZXR1cm4hMX1yZXR1cm4gbWUobyk9PT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkobyl9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5pdGVtcywhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6Im9iamVjdCIsaXRlbXM6T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRoaXMuaXRlbXMpLm1hcChmdW5jdGlvbihvKXt2YXIgaT1ibyhvLDIpLGw9aVswXSxzPWlbMV07cmV0dXJuW2wscy5zZXJpYWxpemUoKV19KSksb3B0OnRoaXMub3B0fX19XSksbn0oJGkpLFVUPWZ1bmN0aW9uKGUpe0VpKG4sZSk7dmFyIHQ9Q2kobik7ZnVuY3Rpb24gbihyKXt2YXIgbyxpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4ga3IodGhpcyxuKSxvPXQuY2FsbCh0aGlzKSxvLml0ZW09cixvLm9wdD1pLG99cmV0dXJuIFRyKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihvLGkpe3ZhciBsPXRoaXMscz0hMTtyZXR1cm4gdGhpcy5vcHQmJmk9PW51bGw/ITE6bWUoaSkhPT0ib2JqZWN0Inx8IUFycmF5LmlzQXJyYXkoaSk/eHQoe30sbyxbe21lc3NhZ2U6IkV4cGVjdGVkICdhcnJheScsIGdvdCAnIi5jb25jYXQobWUoaSksIiciKX1dKTooaS5mb3JFYWNoKGZ1bmN0aW9uKGEsdSl7dmFyIGM9dHIobyx1KTtpZighYylzPWwuYXBwZW5kVmFsaWRhdGlvbkVycm9yKHMsbywiSW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgcGF0aCBhdCAiLmNvbmNhdCghbyYmdHlwZW9mIG89PSJzdHJpbmciPyI8ZW1wdHkgc3RyaW5nPiI6bywiIGF0IGluZGV4ICIpLmNvbmNhdCh1KSxpKTtlbHNle3ZhciBkPWwuaXRlbS52YWxpZGF0ZShjLGEpO2QmJnM/cz1rbChrbCh7fSxkKSxzKTpkJiYocz1kKX19KSxzKX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24obyl7aWYodGhpcy5vcHQmJm89PW51bGwpcmV0dXJuITA7aWYoIW8pcmV0dXJuITE7dmFyIGk9QWcobyksbDt0cnl7Zm9yKGkucygpOyEobD1pLm4oKSkuZG9uZTspe3ZhciBzPWwudmFsdWU7aWYoIXRoaXMuaXRlbS5hc3NlcnQocykpcmV0dXJuITF9fWNhdGNoKGEpe2kuZShhKX1maW5hbGx5e2kuZigpfXJldHVybiBtZShvKT09PSJvYmplY3QiJiZBcnJheS5pc0FycmF5KG8pfX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMuaXRlbSwhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImFycmF5IixpdGVtOnRoaXMuaXRlbS5zZXJpYWxpemUoKSxvcHQ6dGhpcy5vcHR9fX1dKSxufSgkaSksVlQ9ZnVuY3Rpb24oZSl7RWkobixlKTt2YXIgdD1DaShuKTtmdW5jdGlvbiBuKHIsbyl7dmFyIGksbD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITE7cmV0dXJuIGtyKHRoaXMsbiksaT10LmNhbGwodGhpcyksaS5rZXk9cixpLml0ZW1zPW8saS5vcHQ9bCxpfXJldHVybiBUcihuLFt7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24obyxpKXt0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuIil9fSx7a2V5OiJhc3NlcnQiLHZhbHVlOmZ1bmN0aW9uKG8pe3Rocm93IG5ldyBFcnJvcigiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4iKX19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4iKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToidW5pb24iLGtleTp0aGlzLmtleSxpdGVtczp0aGlzLml0ZW1zLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gby5zZXJpYWxpemUoKX0pLG9wdDp0aGlzLm9wdH19fV0pLG59KCRpKSxIVD1mdW5jdGlvbihlKXtFaShuLGUpO3ZhciB0PUNpKG4pO2Z1bmN0aW9uIG4ocil7dmFyIG8saT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7cmV0dXJuIGtyKHRoaXMsbiksbz10LmNhbGwodGhpcyksby5vcHRpb25zPXIsby5vcHQ9aSxvfXJldHVybiBUcihuLFt7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24obyxpKXtyZXR1cm4hMX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24obyl7cmV0dXJuITB9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5vcHRpb25zLCEwKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToicmljaHRleHQiLG9wdDp0aGlzLm9wdH19fV0pLG59KCRpKSxLVD1mdW5jdGlvbihlKXtFaShuLGUpO3ZhciB0PUNpKG4pO2Z1bmN0aW9uIG4ocil7dmFyIG8saT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7cmV0dXJuIGtyKHRoaXMsbiksbz10LmNhbGwodGhpcyksby5pdGVtPXIsby5vcHQ9aSxvfXJldHVybiBUcihuLFt7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24obyxpKXt2YXIgbD10aGlzLHM9ITE7cmV0dXJuIHRoaXMub3B0JiZpPT1udWxsPyExOm1lKGkpIT09Im9iamVjdCI/eHQoe30sbyxbe21lc3NhZ2U6IkV4cGVjdGVkICdvYmplY3QnLCBnb3QgJyIuY29uY2F0KG1lKGkpLCInIil9XSk6QXJyYXkuaXNBcnJheShpKT94dCh7fSxvLFt7bWVzc2FnZToiRXhwZWN0ZWQgJ29iamVjdCcsIGdvdCAnYXJyYXknIn1dKTooT2JqZWN0LmVudHJpZXMoaSkuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgdT1ibyhhLDIpLGM9dVswXSxkPXVbMV0sZj10cihvLGMpO2lmKCFmKXM9bC5hcHBlbmRWYWxpZGF0aW9uRXJyb3IocyxvLCJJbnRlcm5hbCBlcnJvcjogY291bGQgbm90IGNyZWF0ZSBwYXRoIGF0ICIuY29uY2F0KCFvJiZ0eXBlb2Ygbz09InN0cmluZyI/IjxlbXB0eSBzdHJpbmc+IjpvLCIgYXQga2V5ICIpLmNvbmNhdChkKSxpKTtlbHNle3ZhciBoPWwuaXRlbS52YWxpZGF0ZShmLGQpO2gmJnM/cz1rbChrbCh7fSxoKSxzKTpoJiYocz1oKX19KSxzKX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24obyl7aWYodGhpcy5vcHQmJm89PW51bGwpcmV0dXJuITA7aWYoIW8pcmV0dXJuITE7Zm9yKHZhciBpPTAsbD1PYmplY3QuZW50cmllcyhvKTtpPGwubGVuZ3RoO2krKyl7dmFyIHM9Ym8obFtpXSwyKSxhPXNbMV07aWYoIXRoaXMuaXRlbS5hc3NlcnQoYSkpcmV0dXJuITF9cmV0dXJuIG1lKG8pPT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KG8pfX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMuaXRlbSwhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6InJlY29yZCIsaXRlbTp0aGlzLml0ZW0uc2VyaWFsaXplKCksb3B0OnRoaXMub3B0fX19XSksbn0oJGkpO2Z1bmN0aW9uIEdUKGUpe3ZhciB0PWVbd3RdO2lmKHQgaW5zdGFuY2VvZiBMZyl0aHJvdyBFcnJvcigiQ2Fubm90IGdldCByYXcgc291cmNlIG9mIGFuIEV4cHIiKTt2YXIgbj10O3JldHVybiBufWZ1bmN0aW9uIFlUKGUpe3JldHVybiBlLmluZGV4T2YoIi4iKT09PS0xP1tlLCIiXTpbZS5zbGljZSgwLGUuaW5kZXhPZigiLiIpKSxlLnNsaWNlKGUuaW5kZXhPZigiLiIpKzEpXX1mdW5jdGlvbiBYVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFdUfHxtZShlKT09PSJvYmplY3QiJiYidHlwZSJpbiBlJiZlLnR5cGU9PT0ib2JqZWN0In1mdW5jdGlvbiBRVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEtUfHxtZShlKT09PSJvYmplY3QiJiYidHlwZSJpbiBlJiZlLnR5cGU9PT0icmVjb3JkIn1mdW5jdGlvbiBKVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFVUfHxtZShlKT09PSJvYmplY3QiJiYidHlwZSJpbiBlJiZlLnR5cGU9PT0iYXJyYXkifWZ1bmN0aW9uIFpUKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVlR8fG1lKGUpPT09Im9iamVjdCImJiJ0eXBlImluIGUmJmUudHlwZT09PSJ1bmlvbiJ9ZnVuY3Rpb24gcVQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBIVHx8bWUoZSk9PT0ib2JqZWN0IiYmInR5cGUiaW4gZSYmZS50eXBlPT09InJpY2h0ZXh0In1mdW5jdGlvbiBlYihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGpUfHxtZShlKT09PSJvYmplY3QiJiYidHlwZSJpbiBlJiZlLnR5cGU9PT0iaW1hZ2UifWZ1bmN0aW9uIHRiKGUsdCxuKXtmb3IodmFyIHI9bmIoZSksbz1OVChyKSxpPW4sbD10LHM9ZnVuY3Rpb24oKXt2YXIgYz1yLnNoaWZ0KCk7aWYoYz09PXZvaWQgMCl0aHJvdyBFcnJvcigiVW5leHBlY3RlZCB1bmRlZmluZWQgcGFydCIpO2lmKEpUKGkpKXtpZihOdW1iZXIuaXNOYU4oTnVtYmVyKGMpKSl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiBhcnJheSBzY2hlbWEgIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoaSksIiBtdXN0IGhhdmUgYSBudW1iZXIgYXMgcGF0aCwgYnV0IGdvdCAiKS5jb25jYXQoYywiLiBQYXRoOiAiKS5jb25jYXQoZSkpO2lmKG1lKGwpIT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGwpKXRocm93IEVycm9yKCJTY2hlbWEgdHlwZSBlcnJvcjogZXhwZWN0ZWQgc291cmNlIHRvIGJlIHR5cGUgb2YgYXJyYXksIGJ1dCBnb3QgIi5jb25jYXQobWUobCkpKTtpZighbFtjXSl7dmFyIGQ7dGhyb3cgRXJyb3IoIkludmFsaWQgcGF0aDogYXJyYXkgc291cmNlIChsZW5ndGg6ICIuY29uY2F0KChkPWwpPT09bnVsbHx8ZD09PXZvaWQgMD92b2lkIDA6ZC5sZW5ndGgsIikgZGlkIG5vdCBoYXZlIGluZGV4ICIpLmNvbmNhdChjLCIgZnJvbSBwYXRoOiAiKS5jb25jYXQoZSkpfWw9bFtjXSxpPWkuaXRlbX1lbHNlIGlmKFFUKGkpKXtpZih0eXBlb2YgYyE9InN0cmluZyIpdGhyb3cgRXJyb3IoIkludmFsaWQgcGF0aDogcmVjb3JkIHNjaGVtYSAiLmNvbmNhdChpLCIgbXVzdCBoYXZlIHBhdGg6ICIpLmNvbmNhdChjLCIgYXMgc3RyaW5nIikpO2lmKG1lKGwpIT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGwpKXRocm93IEVycm9yKCJTY2hlbWEgdHlwZSBlcnJvcjogZXhwZWN0ZWQgc291cmNlIHRvIGJlIHR5cGUgb2YgcmVjb3JkLCBidXQgZ290ICIuY29uY2F0KG1lKGwpKSk7aWYoIWxbY10pdGhyb3cgRXJyb3IoIkludmFsaWQgcGF0aDogcmVjb3JkIHNvdXJjZSBkaWQgbm90IGhhdmUga2V5ICIuY29uY2F0KGMsIiBmcm9tIHBhdGg6ICIpLmNvbmNhdChlKSk7bD1sW2NdLGk9aS5pdGVtfWVsc2UgaWYoWFQoaSkpe2lmKG1lKGwpIT09Im9iamVjdCIpdGhyb3cgRXJyb3IoIlNjaGVtYSB0eXBlIGVycm9yOiBleHBlY3RlZCBzb3VyY2UgdG8gYmUgdHlwZSBvZiBvYmplY3QsIGJ1dCBnb3QgIi5jb25jYXQobWUobCkpKTtpZighbFtjXSl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiBvYmplY3Qgc291cmNlIGRpZCBub3QgaGF2ZSBrZXkgIi5jb25jYXQoYywiIGZyb20gcGF0aDogIikuY29uY2F0KGUpKTtsPWxbY10saT1pLml0ZW1zW2NdfWVsc2V7aWYoZWIoaSkpcmV0dXJue3Y6e3BhdGg6by5zbGljZSgwLG8ubGVuZ3RoLXIubGVuZ3RoLTEpLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobSl9KS5qb2luKCIuIiksc2NoZW1hOmksc291cmNlOmx9fTtpZihaVChpKSl7dmFyIGY9aS5rZXksaD1sW2ZdO2lmKCFoKXRocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6IHVuaW9uIHNvdXJjZSAiLmNvbmNhdChpLCIgZGlkIG5vdCBoYXZlIHJlcXVpcmVkIGtleSAiKS5jb25jYXQoZiwiIGluIHBhdGg6ICIpLmNvbmNhdChlKSk7dmFyIGc9aS5pdGVtcy5maW5kKGZ1bmN0aW9uKG0pe3ZhciBfO3JldHVybihtPT1udWxsfHwoXz1tLml0ZW1zKT09PW51bGx8fF89PT12b2lkIDB8fChfPV9bZl0pPT09bnVsbHx8Xz09PXZvaWQgMD92b2lkIDA6Xy52YWx1ZSk9PT1ofSk7aWYoIWcpdGhyb3cgRXJyb3IoIkludmFsaWQgcGF0aDogdW5pb24gc2NoZW1hICIuY29uY2F0KGksIiBkaWQgbm90IGhhdmUgYSBjaGlsZCBvYmplY3Qgd2l0aCAiKS5jb25jYXQoZiwiIG9mIHZhbHVlICIpLmNvbmNhdChoLCIgaW4gcGF0aDogIikuY29uY2F0KGUpKTtpPWcuaXRlbXNbY10sbD1sW2NdfWVsc2V7aWYocVQoaSkpcmV0dXJue3Y6e3BhdGg6by5zbGljZSgwLG8ubGVuZ3RoLXIubGVuZ3RoLTEpLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobSl9KS5qb2luKCIuIiksc2NoZW1hOmksc291cmNlOmx9fTt0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiAiLmNvbmNhdChjLCIgcmVzb2x2ZWQgdG8gYW4gdW5leHBlY3RlZCBzY2hlbWEgIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGkpKSl9fX0sYTtyLmxlbmd0aD4wOylpZihhPXMoKSxhKXJldHVybiBhLnY7aWYoci5sZW5ndGg+MCl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiAiLmNvbmNhdChyLmpvaW4oIi4iKSwiIGlzIG5vdCBhIHZhbGlkIHBhdGgiKSk7cmV0dXJue3BhdGg6by5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIE51bWJlci5pc05hTihOdW1iZXIodSkpP0pTT04uc3RyaW5naWZ5KHUpOnV9KS5qb2luKCIuIiksc2NoZW1hOmksc291cmNlOmx9fWZ1bmN0aW9uIG5iKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDspe3ZhciByPSIiO2lmKGVbbl09PT0nIicpe2ZvcihuKys7bjxlLmxlbmd0aCYmZVtuXSE9PSciJzspZVtuXT09PSJcXCImJmVbbisxXT09PSciJz8ocis9JyInLG4rKyk6cis9ZVtuXSxuKys7aWYoZVtuXSE9PSciJyl7dmFyIG87dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0ICgiLmNvbmNhdChKU09OLnN0cmluZ2lmeShlKSwiKTogTWlzc2luZyBjbG9zaW5nIGRvdWJsZSBxdW90ZTogIikuY29uY2F0KChvPWVbbl0pIT09bnVsbCYmbyE9PXZvaWQgMD9vOiJhdCBlbmQgb2Ygc3RyaW5nIiwiIChjaGFyOiAiKS5jb25jYXQobiwiOyBsZW5ndGg6ICIpLmNvbmNhdChlLmxlbmd0aCwiKSIpKX19ZWxzZSBmb3IoO248ZS5sZW5ndGgmJmVbbl0hPT0iLiI7KXIrPWVbbl0sbisrO3IhPT0iIiYmdC5wdXNoKHIpLG4rK31yZXR1cm4gdH1mdW5jdGlvbiByYihlKXtyZXR1cm4gTncobGIoZSkpfWZ1bmN0aW9uIG9iKGUpe3JldHVybiBObyhlKT9tZShlW3d0XSk9PT0ib2JqZWN0IiYmZVt3dF0hPT1udWxsJiZBcnJheS5pc0FycmF5KGVbd3RdKTpBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIGliKGUpe3JldHVybiBObyhlKT9tZShlW3d0XSk9PT0ib2JqZWN0IiYmZVt3dF0hPT1udWxsJiYhQXJyYXkuaXNBcnJheShlW3d0XSk6bWUoZSk9PT0ib2JqZWN0In1mdW5jdGlvbiBsYihlKXt2YXIgdD1FdChlKTtmdW5jdGlvbiBuKHIpe3ZhciBvPW9iKHIpLGk9aWIocik7aWYobyl7dmFyIGw9d3QgaW4gcj9yW3d0XTpyLHM9bm4gaW4gcj9yW25uXTp2b2lkIDA7cmV0dXJue3ZhbDpsLm1hcChmdW5jdGlvbihjLGQpe3JldHVybiBuKE5vKGMpP2M6RXQoYyx0cihzLGQpKSl9KSx2YWxQYXRoOnN9fWVsc2UgaWYoaSl7dmFyIGE9d3QgaW4gcj9yW3d0XTpyLHU9bm4gaW4gcj9yW25uXTp2b2lkIDA7cmV0dXJue3ZhbDphIT09bnVsbCYmT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGEpLm1hcChmdW5jdGlvbihjKXt2YXIgZD1ibyhjLDIpLGY9ZFswXSxoPWRbMV07cmV0dXJuW2YsbihObyhoKT9oOkV0KGgsdHIodSxmKSkpXX0pKSx2YWxQYXRoOnV9fWVsc2UgcmV0dXJuIE5vKHIpP3t2YWw6bihyW3d0XSksdmFsUGF0aDpyW25uXX06cn1yZXR1cm4gbih0KX1mdW5jdGlvbiBMaChlKXt2YXIgdD1idyhlKT9lLnZhbDplO3N3aXRjaChtZSh0KSl7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOnRocm93IEVycm9yKCJJbnZhbGlkIHZhbCB0eXBlOiAiLmNvbmNhdChtZSh0KSkpO2Nhc2Uib2JqZWN0IjpyZXR1cm4gdD09PW51bGw/bnVsbDpBcnJheS5pc0FycmF5KHQpP3QubWFwKExoKTpPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModCkubWFwKGZ1bmN0aW9uKG4pe3ZhciByPWJvKG4sMiksbz1yWzBdLGk9clsxXTtyZXR1cm5bbyxpJiZMaChpKV19KSk7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gTncoZSl7dmFyIHQ9ZS52YWw7c3dpdGNoKG1lKHQpKXtjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6dGhyb3cgRXJyb3IoIkludmFsaWQgdmFsIHR5cGU6ICIuY29uY2F0KG1lKHQpKSk7Y2FzZSJvYmplY3QiOmlmKHQhPT1udWxsKXJldHVybiBuZXcgUHJveHkodCx7aGFzOmZ1bmN0aW9uKHIsbyl7cmV0dXJuIG89PT0idmFsInx8bz09PW5uPyEwOmN5KHIsbyl9LGdldDpmdW5jdGlvbihyLG8pe2lmKG89PT1ubilyZXR1cm4gZS52YWxQYXRoO2lmKG89PT0idmFsIilyZXR1cm4gTGgoZSk7aWYoQXJyYXkuaXNBcnJheShyKSYmbz09PSJsZW5ndGgiKXJldHVybiByLmxlbmd0aDtpZihjeSh0LG8pKXt2YXIgaSxsO3JldHVybiBOdyh7dmFsOlJlZmxlY3QuZ2V0KHIsbykudmFsLHZhbFBhdGg6KGk9KGw9UmVmbGVjdC5nZXQocixvKSk9PT1udWxsfHxsPT09dm9pZCAwP3ZvaWQgMDpsLnZhbFBhdGgpIT09bnVsbCYmaSE9PXZvaWQgMD9pOnRyKGUudmFsUGF0aCxBcnJheS5pc0FycmF5KHIpP051bWJlcihvKTpvKX0pfXJldHVybiBSZWZsZWN0LmdldChyLG8pfX0pO2RlZmF1bHQ6cmV0dXJuIHh0KHh0KHt9LG5uLGUudmFsUGF0aCksInZhbCIsZS52YWwpfX1mdW5jdGlvbiBjeShlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX1mdW5jdGlvbiBwaSgpe3BpPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciBlLHQ9e30sbj1PYmplY3QucHJvdG90eXBlLHI9bi5oYXNPd25Qcm9wZXJ0eSxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oQywkLEUpe0NbJF09RS52YWx1ZX0saT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iP1N5bWJvbDp7fSxsPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYT1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gdShDLCQsRSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDLCQse3ZhbHVlOkUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxDWyRdfXRyeXt1KHt9LCIiKX1jYXRjaHt1PWZ1bmN0aW9uKCQsRSxPKXtyZXR1cm4gJFtFXT1PfX1mdW5jdGlvbiBjKEMsJCxFLE8pe3ZhciBSPSQmJiQucHJvdG90eXBlIGluc3RhbmNlb2Ygdj8kOnYsRj1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlKSxWPW5ldyBIKE98fFtdKTtyZXR1cm4gbyhGLCJfaW52b2tlIix7dmFsdWU6TShDLEUsVil9KSxGfWZ1bmN0aW9uIGQoQywkLEUpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6Qy5jYWxsKCQsRSl9fWNhdGNoKE8pe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOk99fX10LndyYXA9Yzt2YXIgZj0ic3VzcGVuZGVkU3RhcnQiLGg9InN1c3BlbmRlZFlpZWxkIixnPSJleGVjdXRpbmciLG09ImNvbXBsZXRlZCIsXz17fTtmdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9ZnVuY3Rpb24geCgpe312YXIgUz17fTt1KFMsbCxmdW5jdGlvbigpe3JldHVybiB0aGlzfSk7dmFyIGs9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ayYmayhrKFkoW10pKSk7YiYmYiE9PW4mJnIuY2FsbChiLGwpJiYoUz1iKTt2YXIgVD14LnByb3RvdHlwZT12LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMpO2Z1bmN0aW9uIE4oQyl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe3UoQywkLGZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLl9pbnZva2UoJCxFKX0pfSl9ZnVuY3Rpb24gRChDLCQpe2Z1bmN0aW9uIEUoUixGLFYsYWUpe3ZhciBvZT1kKENbUl0sQyxGKTtpZihvZS50eXBlIT09InRocm93Iil7dmFyICRlPW9lLmFyZyxfZT0kZS52YWx1ZTtyZXR1cm4gX2UmJnR5cGVvZiBfZT09Im9iamVjdCImJnIuY2FsbChfZSwiX19hd2FpdCIpPyQucmVzb2x2ZShfZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKFEpe0UoIm5leHQiLFEsVixhZSl9LGZ1bmN0aW9uKFEpe0UoInRocm93IixRLFYsYWUpfSk6JC5yZXNvbHZlKF9lKS50aGVuKGZ1bmN0aW9uKFEpeyRlLnZhbHVlPVEsVigkZSl9LGZ1bmN0aW9uKFEpe3JldHVybiBFKCJ0aHJvdyIsUSxWLGFlKX0pfWFlKG9lLmFyZyl9dmFyIE87byh0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oUixGKXtmdW5jdGlvbiBWKCl7cmV0dXJuIG5ldyAkKGZ1bmN0aW9uKGFlLG9lKXtFKFIsRixhZSxvZSl9KX1yZXR1cm4gTz1PP08udGhlbihWLFYpOlYoKX19KX1mdW5jdGlvbiBNKEMsJCxFKXt2YXIgTz1mO3JldHVybiBmdW5jdGlvbihSLEYpe2lmKE89PT1nKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKE89PT1tKXtpZihSPT09InRocm93Iil0aHJvdyBGO3JldHVybnt2YWx1ZTplLGRvbmU6ITB9fWZvcihFLm1ldGhvZD1SLEUuYXJnPUY7Oyl7dmFyIFY9RS5kZWxlZ2F0ZTtpZihWKXt2YXIgYWU9aihWLEUpO2lmKGFlKXtpZihhZT09PV8pY29udGludWU7cmV0dXJuIGFlfX1pZihFLm1ldGhvZD09PSJuZXh0IilFLnNlbnQ9RS5fc2VudD1FLmFyZztlbHNlIGlmKEUubWV0aG9kPT09InRocm93Iil7aWYoTz09PWYpdGhyb3cgTz1tLEUuYXJnO0UuZGlzcGF0Y2hFeGNlcHRpb24oRS5hcmcpfWVsc2UgRS5tZXRob2Q9PT0icmV0dXJuIiYmRS5hYnJ1cHQoInJldHVybiIsRS5hcmcpO089Zzt2YXIgb2U9ZChDLCQsRSk7aWYob2UudHlwZT09PSJub3JtYWwiKXtpZihPPUUuZG9uZT9tOmgsb2UuYXJnPT09Xyljb250aW51ZTtyZXR1cm57dmFsdWU6b2UuYXJnLGRvbmU6RS5kb25lfX1vZS50eXBlPT09InRocm93IiYmKE89bSxFLm1ldGhvZD0idGhyb3ciLEUuYXJnPW9lLmFyZyl9fX1mdW5jdGlvbiBqKEMsJCl7dmFyIEU9JC5tZXRob2QsTz1DLml0ZXJhdG9yW0VdO2lmKE89PT1lKXJldHVybiAkLmRlbGVnYXRlPW51bGwsRT09PSJ0aHJvdyImJkMuaXRlcmF0b3IucmV0dXJuJiYoJC5tZXRob2Q9InJldHVybiIsJC5hcmc9ZSxqKEMsJCksJC5tZXRob2Q9PT0idGhyb3ciKXx8RSE9PSJyZXR1cm4iJiYoJC5tZXRob2Q9InRocm93IiwkLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK0UrIicgbWV0aG9kIikpLF87dmFyIFI9ZChPLEMuaXRlcmF0b3IsJC5hcmcpO2lmKFIudHlwZT09PSJ0aHJvdyIpcmV0dXJuICQubWV0aG9kPSJ0aHJvdyIsJC5hcmc9Ui5hcmcsJC5kZWxlZ2F0ZT1udWxsLF87dmFyIEY9Ui5hcmc7cmV0dXJuIEY/Ri5kb25lPygkW0MucmVzdWx0TmFtZV09Ri52YWx1ZSwkLm5leHQ9Qy5uZXh0TG9jLCQubWV0aG9kIT09InJldHVybiImJigkLm1ldGhvZD0ibmV4dCIsJC5hcmc9ZSksJC5kZWxlZ2F0ZT1udWxsLF8pOkY6KCQubWV0aG9kPSJ0aHJvdyIsJC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSwkLmRlbGVnYXRlPW51bGwsXyl9ZnVuY3Rpb24gQihDKXt2YXIgJD17dHJ5TG9jOkNbMF19OzEgaW4gQyYmKCQuY2F0Y2hMb2M9Q1sxXSksMiBpbiBDJiYoJC5maW5hbGx5TG9jPUNbMl0sJC5hZnRlckxvYz1DWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCgkKX1mdW5jdGlvbiByZShDKXt2YXIgJD1DLmNvbXBsZXRpb258fHt9OyQudHlwZT0ibm9ybWFsIixkZWxldGUgJC5hcmcsQy5jb21wbGV0aW9uPSR9ZnVuY3Rpb24gSChDKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sQy5mb3JFYWNoKEIsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gWShDKXtpZihDfHxDPT09IiIpe3ZhciAkPUNbbF07aWYoJClyZXR1cm4gJC5jYWxsKEMpO2lmKHR5cGVvZiBDLm5leHQ9PSJmdW5jdGlvbiIpcmV0dXJuIEM7aWYoIWlzTmFOKEMubGVuZ3RoKSl7dmFyIEU9LTEsTz1mdW5jdGlvbiBSKCl7Zm9yKDsrK0U8Qy5sZW5ndGg7KWlmKHIuY2FsbChDLEUpKXJldHVybiBSLnZhbHVlPUNbRV0sUi5kb25lPSExLFI7cmV0dXJuIFIudmFsdWU9ZSxSLmRvbmU9ITAsUn07cmV0dXJuIE8ubmV4dD1PfX10aHJvdyBuZXcgVHlwZUVycm9yKHR5cGVvZiBDKyIgaXMgbm90IGl0ZXJhYmxlIil9cmV0dXJuIHkucHJvdG90eXBlPXgsbyhULCJjb25zdHJ1Y3RvciIse3ZhbHVlOngsY29uZmlndXJhYmxlOiEwfSksbyh4LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSkseS5kaXNwbGF5TmFtZT11KHgsYSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oQyl7dmFyICQ9dHlwZW9mIEM9PSJmdW5jdGlvbiImJkMuY29uc3RydWN0b3I7cmV0dXJuISEkJiYoJD09PXl8fCgkLmRpc3BsYXlOYW1lfHwkLm5hbWUpPT09IkdlbmVyYXRvckZ1bmN0aW9uIil9LHQubWFyaz1mdW5jdGlvbihDKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihDLHgpOihDLl9fcHJvdG9fXz14LHUoQyxhLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxDLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFQpLEN9LHQuYXdyYXA9ZnVuY3Rpb24oQyl7cmV0dXJue19fYXdhaXQ6Q319LE4oRC5wcm90b3R5cGUpLHUoRC5wcm90b3R5cGUscyxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksdC5Bc3luY0l0ZXJhdG9yPUQsdC5hc3luYz1mdW5jdGlvbihDLCQsRSxPLFIpe1I9PT12b2lkIDAmJihSPVByb21pc2UpO3ZhciBGPW5ldyBEKGMoQywkLEUsTyksUik7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbigkKT9GOkYubmV4dCgpLnRoZW4oZnVuY3Rpb24oVil7cmV0dXJuIFYuZG9uZT9WLnZhbHVlOkYubmV4dCgpfSl9LE4oVCksdShULGEsIkdlbmVyYXRvciIpLHUoVCxsLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx1KFQsInRvU3RyaW5nIixmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSksdC5rZXlzPWZ1bmN0aW9uKEMpe3ZhciAkPU9iamVjdChDKSxFPVtdO2Zvcih2YXIgTyBpbiAkKUUucHVzaChPKTtyZXR1cm4gRS5yZXZlcnNlKCksZnVuY3Rpb24gUigpe2Zvcig7RS5sZW5ndGg7KXt2YXIgRj1FLnBvcCgpO2lmKEYgaW4gJClyZXR1cm4gUi52YWx1ZT1GLFIuZG9uZT0hMSxSfXJldHVybiBSLmRvbmU9ITAsUn19LHQudmFsdWVzPVksSC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkgscmVzZXQ6ZnVuY3Rpb24oQyl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9ZSx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz1lLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlKSwhQylmb3IodmFyICQgaW4gdGhpcykkLmNoYXJBdCgwKT09PSJ0IiYmci5jYWxsKHRoaXMsJCkmJiFpc05hTigrJC5zbGljZSgxKSkmJih0aGlzWyRdPWUpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBDPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKEMudHlwZT09PSJ0aHJvdyIpdGhyb3cgQy5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oQyl7aWYodGhpcy5kb25lKXRocm93IEM7dmFyICQ9dGhpcztmdW5jdGlvbiBFKG9lLCRlKXtyZXR1cm4gRi50eXBlPSJ0aHJvdyIsRi5hcmc9QywkLm5leHQ9b2UsJGUmJigkLm1ldGhvZD0ibmV4dCIsJC5hcmc9ZSksISEkZX1mb3IodmFyIE89dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO08+PTA7LS1PKXt2YXIgUj10aGlzLnRyeUVudHJpZXNbT10sRj1SLmNvbXBsZXRpb247aWYoUi50cnlMb2M9PT0icm9vdCIpcmV0dXJuIEUoImVuZCIpO2lmKFIudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBWPXIuY2FsbChSLCJjYXRjaExvYyIpLGFlPXIuY2FsbChSLCJmaW5hbGx5TG9jIik7aWYoViYmYWUpe2lmKHRoaXMucHJldjxSLmNhdGNoTG9jKXJldHVybiBFKFIuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxSLmZpbmFsbHlMb2MpcmV0dXJuIEUoUi5maW5hbGx5TG9jKX1lbHNlIGlmKFYpe2lmKHRoaXMucHJldjxSLmNhdGNoTG9jKXJldHVybiBFKFIuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWFlKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8Ui5maW5hbGx5TG9jKXJldHVybiBFKFIuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihDLCQpe2Zvcih2YXIgRT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7RT49MDstLUUpe3ZhciBPPXRoaXMudHJ5RW50cmllc1tFXTtpZihPLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoTywiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8Ty5maW5hbGx5TG9jKXt2YXIgUj1PO2JyZWFrfX1SJiYoQz09PSJicmVhayJ8fEM9PT0iY29udGludWUiKSYmUi50cnlMb2M8PSQmJiQ8PVIuZmluYWxseUxvYyYmKFI9bnVsbCk7dmFyIEY9Uj9SLmNvbXBsZXRpb246e307cmV0dXJuIEYudHlwZT1DLEYuYXJnPSQsUj8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1SLmZpbmFsbHlMb2MsXyk6dGhpcy5jb21wbGV0ZShGKX0sY29tcGxldGU6ZnVuY3Rpb24oQywkKXtpZihDLnR5cGU9PT0idGhyb3ciKXRocm93IEMuYXJnO3JldHVybiBDLnR5cGU9PT0iYnJlYWsifHxDLnR5cGU9PT0iY29udGludWUiP3RoaXMubmV4dD1DLmFyZzpDLnR5cGU9PT0icmV0dXJuIj8odGhpcy5ydmFsPXRoaXMuYXJnPUMuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Qy50eXBlPT09Im5vcm1hbCImJiQmJih0aGlzLm5leHQ9JCksX30sZmluaXNoOmZ1bmN0aW9uKEMpe2Zvcih2YXIgJD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7JD49MDstLSQpe3ZhciBFPXRoaXMudHJ5RW50cmllc1skXTtpZihFLmZpbmFsbHlMb2M9PT1DKXJldHVybiB0aGlzLmNvbXBsZXRlKEUuY29tcGxldGlvbixFLmFmdGVyTG9jKSxyZShFKSxffX0sY2F0Y2g6ZnVuY3Rpb24oQyl7Zm9yKHZhciAkPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTskPj0wOy0tJCl7dmFyIEU9dGhpcy50cnlFbnRyaWVzWyRdO2lmKEUudHJ5TG9jPT09Qyl7dmFyIE89RS5jb21wbGV0aW9uO2lmKE8udHlwZT09PSJ0aHJvdyIpe3ZhciBSPU8uYXJnO3JlKEUpfXJldHVybiBSfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKEMsJCxFKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6WShDKSxyZXN1bHROYW1lOiQsbmV4dExvYzpFfSx0aGlzLm1ldGhvZD09PSJuZXh0IiYmKHRoaXMuYXJnPWUpLF99fSx0fWZ1bmN0aW9uIGR5KGUsdCxuLHIsbyxpLGwpe3RyeXt2YXIgcz1lW2ldKGwpLGE9cy52YWx1ZX1jYXRjaCh1KXtuKHUpO3JldHVybn1zLmRvbmU/dChhKTpQcm9taXNlLnJlc29sdmUoYSkudGhlbihyLG8pfWZ1bmN0aW9uIERnKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7dmFyIGk9ZS5hcHBseSh0LG4pO2Z1bmN0aW9uIGwoYSl7ZHkoaSxyLG8sbCxzLCJuZXh0IixhKX1mdW5jdGlvbiBzKGEpe2R5KGkscixvLGwscywidGhyb3ciLGEpfWwodm9pZCAwKX0pfX12YXIgc2I9ZnVuY3Rpb24oKXt2YXIgZT1EZyhwaSgpLm1hcmsoZnVuY3Rpb24gdChuKXt2YXIgcixvLGk7cmV0dXJuIHBpKCkud3JhcChmdW5jdGlvbihzKXtmb3IoOzspc3dpdGNoKHMucHJldj1zLm5leHQpe2Nhc2UgMDpyZXR1cm4gcy5uZXh0PTIsY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLG4pO2Nhc2UgMjpyZXR1cm4gcj1zLnNlbnQsbz1BcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KHIpKSxpPW8ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIil9KS5qb2luKCIiKSxzLmFicnVwdCgicmV0dXJuIixpKTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBzLnN0b3AoKX19LHQpfSkpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGFiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtrcih0aGlzLGUpLHRoaXMuaG9zdD10fXJldHVybiBUcihlLFt7a2V5OiJnZXREaXNhYmxlVXJsIix2YWx1ZTpmdW5jdGlvbihuKXtyZXR1cm4iIi5jb25jYXQodGhpcy5ob3N0LCIvZGlzYWJsZT9yZWRpcmVjdF90bz0iKS5jb25jYXQoZW5jb2RlVVJJQ29tcG9uZW50KG4pKX19LHtrZXk6ImdldEVkaXRVcmwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiIuY29uY2F0KHRoaXMuaG9zdCwiL3N0YXRpYy9lZGl0Iil9fSx7a2V5OiJnZXRMb2dpblVybCIsdmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuIiIuY29uY2F0KHRoaXMuaG9zdCwiL2F1dGhvcml6ZT9yZWRpcmVjdF90bz0iKS5jb25jYXQoZW5jb2RlVVJJQ29tcG9uZW50KG4pKX19LHtrZXk6ImdldEVuYWJsZVVybCIsdmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuIiIuY29uY2F0KHRoaXMuaG9zdCwiL2VuYWJsZT9yZWRpcmVjdF90bz0iKS5jb25jYXQoZW5jb2RlVVJJQ29tcG9uZW50KG4pKX19LHtrZXk6ImdldFBhdGNoZXMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9RGcocGkoKS5tYXJrKGZ1bmN0aW9uIHIobyl7dmFyIGksbCxzO3JldHVybiBwaSgpLndyYXAoZnVuY3Rpb24odSl7Zm9yKDs7KXN3aXRjaCh1LnByZXY9dS5uZXh0KXtjYXNlIDA6cmV0dXJuIGk9by5wYXRjaElkcyxsPW8uaGVhZGVycyxzPWk/Ij8iLmNvbmNhdChpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4iIi5jb25jYXQoYywiPSIpLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQoYykpfSkuam9pbigiJiIpKToiIix1LmFicnVwdCgicmV0dXJuIixmZXRjaCgiIi5jb25jYXQodGhpcy5ob3N0LCIvcGF0Y2hlcy9+IikuY29uY2F0KHMpLHtoZWFkZXJzOmx8fHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihmdW5jdGlvbihjKXtyZXR1cm4gcHUoYyl9KS5jYXRjaChodSkpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHUuc3RvcCgpfX0scix0aGlzKX0pKTtmdW5jdGlvbiBuKHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbn0oKX0se2tleToicG9zdFBhdGNoZXMiLHZhbHVlOmZ1bmN0aW9uKG4scixvKXtyZXR1cm4gZmV0Y2goIiIuY29uY2F0KHRoaXMuaG9zdCwiL3BhdGNoZXMvfiIpLHtoZWFkZXJzOm98fHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LG1ldGhvZDoiUE9TVCIsYm9keTpKU09OLnN0cmluZ2lmeSh4dCh7fSxuLHIpKX0pLnRoZW4oZnVuY3Rpb24oaSl7cmV0dXJuIHB1KGkpfSkuY2F0Y2goaHUpfX0se2tleToiZ2V0U2Vzc2lvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZmV0Y2goIiIuY29uY2F0KHRoaXMuaG9zdCwiL3Nlc3Npb24iKSkudGhlbihmdW5jdGlvbihuKXtyZXR1cm4gcHUobikuY2F0Y2goaHUpfSl9fSx7a2V5OiJnZXRUcmVlIix2YWx1ZTpmdW5jdGlvbihuKXt2YXIgcj1uLnBhdGNoLG89cj09PXZvaWQgMD8hMTpyLGk9bi5pbmNsdWRlU2NoZW1hLGw9aT09PXZvaWQgMD8hMTppLHM9bi5pbmNsdWRlU291cmNlLGE9cz09PXZvaWQgMD8hMTpzLHU9bi50cmVlUGF0aCxjPXU9PT12b2lkIDA/Ii8iOnUsZD1uLmhlYWRlcnMsZj1uZXcgVVJMU2VhcmNoUGFyYW1zO3JldHVybiBmLnNldCgicGF0Y2giLG8udG9TdHJpbmcoKSksZi5zZXQoInNjaGVtYSIsbC50b1N0cmluZygpKSxmLnNldCgic291cmNlIixhLnRvU3RyaW5nKCkpLGZldGNoKCIiLmNvbmNhdCh0aGlzLmhvc3QsIi90cmVlL34iKS5jb25jYXQoYywiPyIpLmNvbmNhdChmLnRvU3RyaW5nKCkpLHtoZWFkZXJzOmR9KS50aGVuKGZ1bmN0aW9uKGgpe3JldHVybiBwdShoKX0pLmNhdGNoKGh1KX19XSksZX0oKTtmdW5jdGlvbiBodShlKXtyZXR1cm4gd3Ioe3N0YXR1c0NvZGU6NTAwLG1lc3NhZ2U6ZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZToiVW5rbm93biBlcnJvciJ9KX1mdW5jdGlvbiBwdShlKXtyZXR1cm4gRGguYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIERoKCl7cmV0dXJuIERoPURnKHBpKCkubWFyayhmdW5jdGlvbiBlKHQpe3ZhciBuO3JldHVybiBwaSgpLndyYXAoZnVuY3Rpb24obyl7Zm9yKDs7KXN3aXRjaChvLnByZXY9by5uZXh0KXtjYXNlIDA6aWYoby5wcmV2PTAsIXQub2spe28ubmV4dD05O2JyZWFrfXJldHVybiBvLnQwPURzLG8ubmV4dD01LHQuanNvbigpO2Nhc2UgNTpyZXR1cm4gby50MT1vLnNlbnQsby5hYnJ1cHQoInJldHVybiIsby50MC5vay5jYWxsKG8udDAsby50MSkpO2Nhc2UgOTpyZXR1cm4gby5wcmV2PTksby5uZXh0PTEyLHQuanNvbigpO2Nhc2UgMTI6cmV0dXJuIG49by5zZW50LG8uYWJydXB0KCJyZXR1cm4iLHdyKHtzdGF0dXNDb2RlOnQuc3RhdHVzLG1lc3NhZ2U6bi5tZXNzYWdlfHx0LnN0YXR1c1RleHQsZGV0YWlsczpuLmRldGFpbHN8fE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhuKS5maWx0ZXIoZnVuY3Rpb24oaSl7dmFyIGw9Ym8oaSwxKSxzPWxbMF07cmV0dXJuIHMhPT0ibWVzc2FnZSJ9KSl9KSk7Y2FzZSAxNjpyZXR1cm4gby5wcmV2PTE2LG8udDI9by5jYXRjaCg5KSxvLmFicnVwdCgicmV0dXJuIix3cih7c3RhdHVzQ29kZTp0LnN0YXR1cyxtZXNzYWdlOnQuc3RhdHVzVGV4dH0pKTtjYXNlIDE5Om8ubmV4dD0yNDticmVhaztjYXNlIDIxOnJldHVybiBvLnByZXY9MjEsby50Mz1vLmNhdGNoKDApLG8uYWJydXB0KCJyZXR1cm4iLHdyKHttZXNzYWdlOm8udDMgaW5zdGFuY2VvZiBFcnJvcj9vLnQzLm1lc3NhZ2U6IlVua25vd24gZXJyb3IifSkpO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19LGUsbnVsbCxbWzAsMjFdLFs5LDE2XV0pfSkpLERoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgS3Q9e2NvbnZlcnRGaWxlU291cmNlOlR3LGdldFNjaGVtYTpEVCxnZXRWYWxQYXRoOkZULGdldFZhbDpyYixnZXRTb3VyY2U6R1QscmVzb2x2ZVBhdGg6dGIsc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGg6WVQsaXNWYWw6elQsY3JlYXRlVmFsUGF0aE9mSXRlbTp0cixnZXRTSEEyNTZIYXNoOnNiLGNyZWF0ZVBhdGNoSlNPTlBhdGg6ZnVuY3Rpb24odCl7cmV0dXJuIi8iLmNvbmNhdCh0LnNwbGl0KCIuIikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuJiZ1YihuKX0pLmpvaW4oIi8iKSl9LFZBTF9FTkFCTEVfQ09PS0lFX05BTUU6InZhbF9lbmFibGUiLFZBTF9TVEFURV9DT09LSUU6InZhbF9zdGF0ZSIsVkFMX1NFU1NJT05fQ09PS0lFOiJ2YWxfc2Vzc2lvbiJ9O2Z1bmN0aW9uIHViKGUpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaHtyZXR1cm4gZX19dmFyIFJ3PXtleHBvcnRzOnt9fTsvKiEKCUNvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLgoJTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWUKCWh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXMKKi8oZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7dmFyIHQ9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gbigpe2Zvcih2YXIgcj1bXSxvPTA7bzxhcmd1bWVudHMubGVuZ3RoO28rKyl7dmFyIGk9YXJndW1lbnRzW29dO2lmKGkpe3ZhciBsPXR5cGVvZiBpO2lmKGw9PT0ic3RyaW5nInx8bD09PSJudW1iZXIiKXIucHVzaChpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoaSkpe2lmKGkubGVuZ3RoKXt2YXIgcz1uLmFwcGx5KG51bGwsaSk7cyYmci5wdXNoKHMpfX1lbHNlIGlmKGw9PT0ib2JqZWN0Iil7aWYoaS50b1N0cmluZyE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcmJiFpLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoIltuYXRpdmUgY29kZV0iKSl7ci5wdXNoKGkudG9TdHJpbmcoKSk7Y29udGludWV9Zm9yKHZhciBhIGluIGkpdC5jYWxsKGksYSkmJmlbYV0mJnIucHVzaChhKX19fXJldHVybiByLmpvaW4oIiAiKX1lLmV4cG9ydHM/KG4uZGVmYXVsdD1uLGUuZXhwb3J0cz1uKTp3aW5kb3cuY2xhc3NOYW1lcz1ufSkoKX0pKFJ3KTt2YXIgY2I9UncuZXhwb3J0cztjb25zdCBkZD1SYShjYik7ZnVuY3Rpb24gdGUoKXtyZXR1cm4gdGU9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZGIoZSx0KXt0eXBlb2YgZT09ImZ1bmN0aW9uIj9lKHQpOmUhPW51bGwmJihlLmN1cnJlbnQ9dCl9ZnVuY3Rpb24gUHcoLi4uZSl7cmV0dXJuIHQ9PmUuZm9yRWFjaChuPT5kYihuLHQpKX1mdW5jdGlvbiBRZSguLi5lKXtyZXR1cm4gcC51c2VDYWxsYmFjayhQdyguLi5lKSxlKX1jb25zdCBUbD1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtjaGlsZHJlbjpuLC4uLnJ9PWUsbz1wLkNoaWxkcmVuLnRvQXJyYXkobiksaT1vLmZpbmQoaGIpO2lmKGkpe2NvbnN0IGw9aS5wcm9wcy5jaGlsZHJlbixzPW8ubWFwKGE9PmE9PT1pP3AuQ2hpbGRyZW4uY291bnQobCk+MT9wLkNoaWxkcmVuLm9ubHkobnVsbCk6cC5pc1ZhbGlkRWxlbWVudChsKT9sLnByb3BzLmNoaWxkcmVuOm51bGw6YSk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChJaCx0ZSh7fSxyLHtyZWY6dH0pLHAuaXNWYWxpZEVsZW1lbnQobCk/cC5jbG9uZUVsZW1lbnQobCx2b2lkIDAscyk6bnVsbCl9cmV0dXJuIHAuY3JlYXRlRWxlbWVudChJaCx0ZSh7fSxyLHtyZWY6dH0pLG4pfSk7VGwuZGlzcGxheU5hbWU9IlNsb3QiO2NvbnN0IEloPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e2NoaWxkcmVuOm4sLi4ucn09ZTtyZXR1cm4gcC5pc1ZhbGlkRWxlbWVudChuKT9wLmNsb25lRWxlbWVudChuLHsuLi5wYihyLG4ucHJvcHMpLHJlZjp0P1B3KHQsbi5yZWYpOm4ucmVmfSk6cC5DaGlsZHJlbi5jb3VudChuKT4xP3AuQ2hpbGRyZW4ub25seShudWxsKTpudWxsfSk7SWguZGlzcGxheU5hbWU9IlNsb3RDbG9uZSI7Y29uc3QgZmI9KHtjaGlsZHJlbjplfSk9PnAuY3JlYXRlRWxlbWVudChwLkZyYWdtZW50LG51bGwsZSk7ZnVuY3Rpb24gaGIoZSl7cmV0dXJuIHAuaXNWYWxpZEVsZW1lbnQoZSkmJmUudHlwZT09PWZifWZ1bmN0aW9uIHBiKGUsdCl7Y29uc3Qgbj17Li4udH07Zm9yKGNvbnN0IHIgaW4gdCl7Y29uc3Qgbz1lW3JdLGk9dFtyXTsvXm9uW0EtWl0vLnRlc3Qocik/byYmaT9uW3JdPSguLi5zKT0+e2koLi4ucyksbyguLi5zKX06byYmKG5bcl09byk6cj09PSJzdHlsZSI/bltyXT17Li4ubywuLi5pfTpyPT09ImNsYXNzTmFtZSImJihuW3JdPVtvLGldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIikpfXJldHVybnsuLi5lLC4uLm59fWNvbnN0IGdiPVsiYSIsImJ1dHRvbiIsImRpdiIsImZvcm0iLCJoMiIsImgzIiwiaW1nIiwiaW5wdXQiLCJsYWJlbCIsImxpIiwibmF2Iiwib2wiLCJwIiwic3BhbiIsInN2ZyIsInVsIl0sTGU9Z2IucmVkdWNlKChlLHQpPT57Y29uc3Qgbj1wLmZvcndhcmRSZWYoKHIsbyk9Pntjb25zdHthc0NoaWxkOmksLi4ubH09cixzPWk/VGw6dDtyZXR1cm4gcC51c2VFZmZlY3QoKCk9Pnt3aW5kb3dbU3ltYm9sLmZvcigicmFkaXgtdWkiKV09ITB9LFtdKSxwLmNyZWF0ZUVsZW1lbnQocyx0ZSh7fSxsLHtyZWY6b30pKX0pO3JldHVybiBuLmRpc3BsYXlOYW1lPWBQcmltaXRpdmUuJHt0fWAsey4uLmUsW3RdOm59fSx7fSk7ZnVuY3Rpb24gbWIoZSx0KXtlJiYkci5mbHVzaFN5bmMoKCk9PmUuZGlzcGF0Y2hFdmVudCh0KSl9Y29uc3QgYm49Z2xvYmFsVGhpcyE9bnVsbCYmZ2xvYmFsVGhpcy5kb2N1bWVudD9wLnVzZUxheW91dEVmZmVjdDooKT0+e307ZnVuY3Rpb24gdmIoZSx0KXtyZXR1cm4gcC51c2VSZWR1Y2VyKChuLHIpPT57Y29uc3Qgbz10W25dW3JdO3JldHVybiBvPz9ufSxlKX1jb25zdCB6bD1lPT57Y29uc3R7cHJlc2VudDp0LGNoaWxkcmVuOm59PWUscj15Yih0KSxvPXR5cGVvZiBuPT0iZnVuY3Rpb24iP24oe3ByZXNlbnQ6ci5pc1ByZXNlbnR9KTpwLkNoaWxkcmVuLm9ubHkobiksaT1RZShyLnJlZixvLnJlZik7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24ifHxyLmlzUHJlc2VudD9wLmNsb25lRWxlbWVudChvLHtyZWY6aX0pOm51bGx9O3psLmRpc3BsYXlOYW1lPSJQcmVzZW5jZSI7ZnVuY3Rpb24geWIoZSl7Y29uc3RbdCxuXT1wLnVzZVN0YXRlKCkscj1wLnVzZVJlZih7fSksbz1wLnVzZVJlZihlKSxpPXAudXNlUmVmKCJub25lIiksbD1lPyJtb3VudGVkIjoidW5tb3VudGVkIixbcyxhXT12YihsLHttb3VudGVkOntVTk1PVU5UOiJ1bm1vdW50ZWQiLEFOSU1BVElPTl9PVVQ6InVubW91bnRTdXNwZW5kZWQifSx1bm1vdW50U3VzcGVuZGVkOntNT1VOVDoibW91bnRlZCIsQU5JTUFUSU9OX0VORDoidW5tb3VudGVkIn0sdW5tb3VudGVkOntNT1VOVDoibW91bnRlZCJ9fSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3QgdT1ndShyLmN1cnJlbnQpO2kuY3VycmVudD1zPT09Im1vdW50ZWQiP3U6Im5vbmUifSxbc10pLGJuKCgpPT57Y29uc3QgdT1yLmN1cnJlbnQsYz1vLmN1cnJlbnQ7aWYoYyE9PWUpe2NvbnN0IGY9aS5jdXJyZW50LGg9Z3UodSk7ZT9hKCJNT1VOVCIpOmg9PT0ibm9uZSJ8fCh1PT1udWxsP3ZvaWQgMDp1LmRpc3BsYXkpPT09Im5vbmUiP2EoIlVOTU9VTlQiKTphKGMmJmYhPT1oPyJBTklNQVRJT05fT1VUIjoiVU5NT1VOVCIpLG8uY3VycmVudD1lfX0sW2UsYV0pLGJuKCgpPT57aWYodCl7Y29uc3QgdT1kPT57Y29uc3QgaD1ndShyLmN1cnJlbnQpLmluY2x1ZGVzKGQuYW5pbWF0aW9uTmFtZSk7ZC50YXJnZXQ9PT10JiZoJiYkci5mbHVzaFN5bmMoKCk9PmEoIkFOSU1BVElPTl9FTkQiKSl9LGM9ZD0+e2QudGFyZ2V0PT09dCYmKGkuY3VycmVudD1ndShyLmN1cnJlbnQpKX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLGMpLHQuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uY2FuY2VsIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmVuZCIsdSksKCk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0IixjKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmNhbmNlbCIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25lbmQiLHUpfX1lbHNlIGEoIkFOSU1BVElPTl9FTkQiKX0sW3QsYV0pLHtpc1ByZXNlbnQ6WyJtb3VudGVkIiwidW5tb3VudFN1c3BlbmRlZCJdLmluY2x1ZGVzKHMpLHJlZjpwLnVzZUNhbGxiYWNrKHU9Pnt1JiYoci5jdXJyZW50PWdldENvbXB1dGVkU3R5bGUodSkpLG4odSl9LFtdKX19ZnVuY3Rpb24gZ3UoZSl7cmV0dXJuKGU9PW51bGw/dm9pZCAwOmUuYW5pbWF0aW9uTmFtZSl8fCJub25lIn1mdW5jdGlvbiBraShlLHQ9W10pe2xldCBuPVtdO2Z1bmN0aW9uIHIoaSxsKXtjb25zdCBzPXAuY3JlYXRlQ29udGV4dChsKSxhPW4ubGVuZ3RoO249Wy4uLm4sbF07ZnVuY3Rpb24gdShkKXtjb25zdHtzY29wZTpmLGNoaWxkcmVuOmgsLi4uZ309ZCxtPShmPT1udWxsP3ZvaWQgMDpmW2VdW2FdKXx8cyxfPXAudXNlTWVtbygoKT0+ZyxPYmplY3QudmFsdWVzKGcpKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KG0uUHJvdmlkZXIse3ZhbHVlOl99LGgpfWZ1bmN0aW9uIGMoZCxmKXtjb25zdCBoPShmPT1udWxsP3ZvaWQgMDpmW2VdW2FdKXx8cyxnPXAudXNlQ29udGV4dChoKTtpZihnKXJldHVybiBnO2lmKGwhPT12b2lkIDApcmV0dXJuIGw7dGhyb3cgbmV3IEVycm9yKGBcYCR7ZH1cYCBtdXN0IGJlIHVzZWQgd2l0aGluIFxgJHtpfVxgYCl9cmV0dXJuIHUuZGlzcGxheU5hbWU9aSsiUHJvdmlkZXIiLFt1LGNdfWNvbnN0IG89KCk9Pntjb25zdCBpPW4ubWFwKGw9PnAuY3JlYXRlQ29udGV4dChsKSk7cmV0dXJuIGZ1bmN0aW9uKHMpe2NvbnN0IGE9KHM9PW51bGw/dm9pZCAwOnNbZV0pfHxpO3JldHVybiBwLnVzZU1lbW8oKCk9Pih7W2BfX3Njb3BlJHtlfWBdOnsuLi5zLFtlXTphfX0pLFtzLGFdKX19O3JldHVybiBvLnNjb3BlTmFtZT1lLFtyLHhiKG8sLi4udCldfWZ1bmN0aW9uIHhiKC4uLmUpe2NvbnN0IHQ9ZVswXTtpZihlLmxlbmd0aD09PTEpcmV0dXJuIHQ7Y29uc3Qgbj0oKT0+e2NvbnN0IHI9ZS5tYXAobz0+KHt1c2VTY29wZTpvKCksc2NvcGVOYW1lOm8uc2NvcGVOYW1lfSkpO3JldHVybiBmdW5jdGlvbihpKXtjb25zdCBsPXIucmVkdWNlKChzLHt1c2VTY29wZTphLHNjb3BlTmFtZTp1fSk9Pntjb25zdCBkPWEoaSlbYF9fc2NvcGUke3V9YF07cmV0dXJuey4uLnMsLi4uZH19LHt9KTtyZXR1cm4gcC51c2VNZW1vKCgpPT4oe1tgX19zY29wZSR7dC5zY29wZU5hbWV9YF06bH0pLFtsXSl9fTtyZXR1cm4gbi5zY29wZU5hbWU9dC5zY29wZU5hbWUsbn1mdW5jdGlvbiBVdChlKXtjb25zdCB0PXAudXNlUmVmKGUpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e3QuY3VycmVudD1lfSkscC51c2VNZW1vKCgpPT4oLi4ubik9Pnt2YXIgcjtyZXR1cm4ocj10LmN1cnJlbnQpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5jYWxsKHQsLi4ubil9LFtdKX1jb25zdCB3Yj1wLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBJZyhlKXtjb25zdCB0PXAudXNlQ29udGV4dCh3Yik7cmV0dXJuIGV8fHR8fCJsdHIifWZ1bmN0aW9uIGpoKGUsW3Qsbl0pe3JldHVybiBNYXRoLm1pbihuLE1hdGgubWF4KHQsZSkpfWZ1bmN0aW9uIEhlKGUsdCx7Y2hlY2tGb3JEZWZhdWx0UHJldmVudGVkOm49ITB9PXt9KXtyZXR1cm4gZnVuY3Rpb24obyl7aWYoZT09bnVsbHx8ZShvKSxuPT09ITF8fCFvLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuIHQ9PW51bGw/dm9pZCAwOnQobyl9fWZ1bmN0aW9uIF9iKGUsdCl7cmV0dXJuIHAudXNlUmVkdWNlcigobixyKT0+e2NvbnN0IG89dFtuXVtyXTtyZXR1cm4gbz8/bn0sZSl9Y29uc3QgT3c9IlNjcm9sbEFyZWEiLFtBdyxINF09a2koT3cpLFtTYixIbl09QXcoT3cpLEViPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTY3JvbGxBcmVhOm4sdHlwZTpyPSJob3ZlciIsZGlyOm8sc2Nyb2xsSGlkZURlbGF5Omk9NjAwLC4uLmx9PWUsW3MsYV09cC51c2VTdGF0ZShudWxsKSxbdSxjXT1wLnVzZVN0YXRlKG51bGwpLFtkLGZdPXAudXNlU3RhdGUobnVsbCksW2gsZ109cC51c2VTdGF0ZShudWxsKSxbbSxfXT1wLnVzZVN0YXRlKG51bGwpLFt2LHldPXAudXNlU3RhdGUoMCksW3gsU109cC51c2VTdGF0ZSgwKSxbayxiXT1wLnVzZVN0YXRlKCExKSxbVCxOXT1wLnVzZVN0YXRlKCExKSxEPVFlKHQsaj0+YShqKSksTT1JZyhvKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KFNiLHtzY29wZTpuLHR5cGU6cixkaXI6TSxzY3JvbGxIaWRlRGVsYXk6aSxzY3JvbGxBcmVhOnMsdmlld3BvcnQ6dSxvblZpZXdwb3J0Q2hhbmdlOmMsY29udGVudDpkLG9uQ29udGVudENoYW5nZTpmLHNjcm9sbGJhclg6aCxvblNjcm9sbGJhclhDaGFuZ2U6ZyxzY3JvbGxiYXJYRW5hYmxlZDprLG9uU2Nyb2xsYmFyWEVuYWJsZWRDaGFuZ2U6YixzY3JvbGxiYXJZOm0sb25TY3JvbGxiYXJZQ2hhbmdlOl8sc2Nyb2xsYmFyWUVuYWJsZWQ6VCxvblNjcm9sbGJhcllFbmFibGVkQ2hhbmdlOk4sb25Db3JuZXJXaWR0aENoYW5nZTp5LG9uQ29ybmVySGVpZ2h0Q2hhbmdlOlN9LHAuY3JlYXRlRWxlbWVudChMZS5kaXYsdGUoe2RpcjpNfSxsLHtyZWY6RCxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIiwiLS1yYWRpeC1zY3JvbGwtYXJlYS1jb3JuZXItd2lkdGgiOnYrInB4IiwiLS1yYWRpeC1zY3JvbGwtYXJlYS1jb3JuZXItaGVpZ2h0Ijp4KyJweCIsLi4uZS5zdHlsZX19KSkpfSksQ2I9IlNjcm9sbEFyZWFWaWV3cG9ydCIsJGI9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNjcm9sbEFyZWE6bixjaGlsZHJlbjpyLC4uLm99PWUsaT1IbihDYixuKSxsPXAudXNlUmVmKG51bGwpLHM9UWUodCxsLGkub25WaWV3cG9ydENoYW5nZSk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChwLkZyYWdtZW50LG51bGwscC5jcmVhdGVFbGVtZW50KCJzdHlsZSIse2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6IltkYXRhLXJhZGl4LXNjcm9sbC1hcmVhLXZpZXdwb3J0XXtzY3JvbGxiYXItd2lkdGg6bm9uZTstbXMtb3ZlcmZsb3ctc3R5bGU6bm9uZTstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDt9W2RhdGEtcmFkaXgtc2Nyb2xsLWFyZWEtdmlld3BvcnRdOjotd2Via2l0LXNjcm9sbGJhcntkaXNwbGF5Om5vbmV9In19KSxwLmNyZWF0ZUVsZW1lbnQoTGUuZGl2LHRlKHsiZGF0YS1yYWRpeC1zY3JvbGwtYXJlYS12aWV3cG9ydCI6IiJ9LG8se3JlZjpzLHN0eWxlOntvdmVyZmxvd1g6aS5zY3JvbGxiYXJYRW5hYmxlZD8ic2Nyb2xsIjoiaGlkZGVuIixvdmVyZmxvd1k6aS5zY3JvbGxiYXJZRW5hYmxlZD8ic2Nyb2xsIjoiaGlkZGVuIiwuLi5lLnN0eWxlfX0pLHAuY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOmkub25Db250ZW50Q2hhbmdlLHN0eWxlOnttaW5XaWR0aDoiMTAwJSIsZGlzcGxheToidGFibGUifX0scikpKX0pLEpyPSJTY3JvbGxBcmVhU2Nyb2xsYmFyIixNdz1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtmb3JjZU1vdW50Om4sLi4ucn09ZSxvPUhuKEpyLGUuX19zY29wZVNjcm9sbEFyZWEpLHtvblNjcm9sbGJhclhFbmFibGVkQ2hhbmdlOmksb25TY3JvbGxiYXJZRW5hYmxlZENoYW5nZTpsfT1vLHM9ZS5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIjtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PihzP2koITApOmwoITApLCgpPT57cz9pKCExKTpsKCExKX0pLFtzLGksbF0pLG8udHlwZT09PSJob3ZlciI/cC5jcmVhdGVFbGVtZW50KGtiLHRlKHt9LHIse3JlZjp0LGZvcmNlTW91bnQ6bn0pKTpvLnR5cGU9PT0ic2Nyb2xsIj9wLmNyZWF0ZUVsZW1lbnQoVGIsdGUoe30scix7cmVmOnQsZm9yY2VNb3VudDpufSkpOm8udHlwZT09PSJhdXRvIj9wLmNyZWF0ZUVsZW1lbnQoTHcsdGUoe30scix7cmVmOnQsZm9yY2VNb3VudDpufSkpOm8udHlwZT09PSJhbHdheXMiP3AuY3JlYXRlRWxlbWVudChqZyx0ZSh7fSxyLHtyZWY6dH0pKTpudWxsfSksa2I9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7Zm9yY2VNb3VudDpuLC4uLnJ9PWUsbz1IbihKcixlLl9fc2NvcGVTY3JvbGxBcmVhKSxbaSxsXT1wLnVzZVN0YXRlKCExKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9Pntjb25zdCBzPW8uc2Nyb2xsQXJlYTtsZXQgYT0wO2lmKHMpe2NvbnN0IHU9KCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KGEpLGwoITApfSxjPSgpPT57YT13aW5kb3cuc2V0VGltZW91dCgoKT0+bCghMSksby5zY3JvbGxIaWRlRGVsYXkpfTtyZXR1cm4gcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLHUpLHMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIixjKSwoKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQoYSkscy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLHUpLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIixjKX19fSxbby5zY3JvbGxBcmVhLG8uc2Nyb2xsSGlkZURlbGF5XSkscC5jcmVhdGVFbGVtZW50KHpsLHtwcmVzZW50Om58fGl9LHAuY3JlYXRlRWxlbWVudChMdyx0ZSh7ImRhdGEtc3RhdGUiOmk/InZpc2libGUiOiJoaWRkZW4ifSxyLHtyZWY6dH0pKSl9KSxUYj1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtmb3JjZU1vdW50Om4sLi4ucn09ZSxvPUhuKEpyLGUuX19zY29wZVNjcm9sbEFyZWEpLGk9ZS5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIixsPWhkKCgpPT5hKCJTQ1JPTExfRU5EIiksMTAwKSxbcyxhXT1fYigiaGlkZGVuIix7aGlkZGVuOntTQ1JPTEw6InNjcm9sbGluZyJ9LHNjcm9sbGluZzp7U0NST0xMX0VORDoiaWRsZSIsUE9JTlRFUl9FTlRFUjoiaW50ZXJhY3RpbmcifSxpbnRlcmFjdGluZzp7U0NST0xMOiJpbnRlcmFjdGluZyIsUE9JTlRFUl9MRUFWRToiaWRsZSJ9LGlkbGU6e0hJREU6ImhpZGRlbiIsU0NST0xMOiJzY3JvbGxpbmciLFBPSU5URVJfRU5URVI6ImludGVyYWN0aW5nIn19KTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntpZihzPT09ImlkbGUiKXtjb25zdCB1PXdpbmRvdy5zZXRUaW1lb3V0KCgpPT5hKCJISURFIiksby5zY3JvbGxIaWRlRGVsYXkpO3JldHVybigpPT53aW5kb3cuY2xlYXJUaW1lb3V0KHUpfX0sW3Msby5zY3JvbGxIaWRlRGVsYXksYV0pLHAudXNlRWZmZWN0KCgpPT57Y29uc3QgdT1vLnZpZXdwb3J0LGM9aT8ic2Nyb2xsTGVmdCI6InNjcm9sbFRvcCI7aWYodSl7bGV0IGQ9dVtjXTtjb25zdCBmPSgpPT57Y29uc3QgaD11W2NdO2QhPT1oJiYoYSgiU0NST0xMIiksbCgpKSxkPWh9O3JldHVybiB1LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsZiksKCk9PnUucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmKX19LFtvLnZpZXdwb3J0LGksYSxsXSkscC5jcmVhdGVFbGVtZW50KHpsLHtwcmVzZW50Om58fHMhPT0iaGlkZGVuIn0scC5jcmVhdGVFbGVtZW50KGpnLHRlKHsiZGF0YS1zdGF0ZSI6cz09PSJoaWRkZW4iPyJoaWRkZW4iOiJ2aXNpYmxlIn0scix7cmVmOnQsb25Qb2ludGVyRW50ZXI6SGUoZS5vblBvaW50ZXJFbnRlciwoKT0+YSgiUE9JTlRFUl9FTlRFUiIpKSxvblBvaW50ZXJMZWF2ZTpIZShlLm9uUG9pbnRlckxlYXZlLCgpPT5hKCJQT0lOVEVSX0xFQVZFIikpfSkpKX0pLEx3PXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0IG49SG4oSnIsZS5fX3Njb3BlU2Nyb2xsQXJlYSkse2ZvcmNlTW91bnQ6ciwuLi5vfT1lLFtpLGxdPXAudXNlU3RhdGUoITEpLHM9ZS5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIixhPWhkKCgpPT57aWYobi52aWV3cG9ydCl7Y29uc3QgdT1uLnZpZXdwb3J0Lm9mZnNldFdpZHRoPG4udmlld3BvcnQuc2Nyb2xsV2lkdGgsYz1uLnZpZXdwb3J0Lm9mZnNldEhlaWdodDxuLnZpZXdwb3J0LnNjcm9sbEhlaWdodDtsKHM/dTpjKX19LDEwKTtyZXR1cm4gYmwobi52aWV3cG9ydCxhKSxibChuLmNvbnRlbnQsYSkscC5jcmVhdGVFbGVtZW50KHpsLHtwcmVzZW50OnJ8fGl9LHAuY3JlYXRlRWxlbWVudChqZyx0ZSh7ImRhdGEtc3RhdGUiOmk/InZpc2libGUiOiJoaWRkZW4ifSxvLHtyZWY6dH0pKSl9KSxqZz1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtvcmllbnRhdGlvbjpuPSJ2ZXJ0aWNhbCIsLi4ucn09ZSxvPUhuKEpyLGUuX19zY29wZVNjcm9sbEFyZWEpLGk9cC51c2VSZWYobnVsbCksbD1wLnVzZVJlZigwKSxbcyxhXT1wLnVzZVN0YXRlKHtjb250ZW50OjAsdmlld3BvcnQ6MCxzY3JvbGxiYXI6e3NpemU6MCxwYWRkaW5nU3RhcnQ6MCxwYWRkaW5nRW5kOjB9fSksdT16dyhzLnZpZXdwb3J0LHMuY29udGVudCksYz17Li4ucixzaXplczpzLG9uU2l6ZXNDaGFuZ2U6YSxoYXNUaHVtYjp1PjAmJnU8MSxvblRodW1iQ2hhbmdlOmY9PmkuY3VycmVudD1mLG9uVGh1bWJQb2ludGVyVXA6KCk9PmwuY3VycmVudD0wLG9uVGh1bWJQb2ludGVyRG93bjpmPT5sLmN1cnJlbnQ9Zn07ZnVuY3Rpb24gZChmLGgpe3JldHVybiBMYihmLGwuY3VycmVudCxzLGgpfXJldHVybiBuPT09Imhvcml6b250YWwiP3AuY3JlYXRlRWxlbWVudChiYix0ZSh7fSxjLHtyZWY6dCxvblRodW1iUG9zaXRpb25DaGFuZ2U6KCk9PntpZihvLnZpZXdwb3J0JiZpLmN1cnJlbnQpe2NvbnN0IGY9by52aWV3cG9ydC5zY3JvbGxMZWZ0LGg9ZnkoZixzLG8uZGlyKTtpLmN1cnJlbnQuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUzZCgke2h9cHgsIDAsIDApYH19LG9uV2hlZWxTY3JvbGw6Zj0+e28udmlld3BvcnQmJihvLnZpZXdwb3J0LnNjcm9sbExlZnQ9Zil9LG9uRHJhZ1Njcm9sbDpmPT57by52aWV3cG9ydCYmKG8udmlld3BvcnQuc2Nyb2xsTGVmdD1kKGYsby5kaXIpKX19KSk6bj09PSJ2ZXJ0aWNhbCI/cC5jcmVhdGVFbGVtZW50KE5iLHRlKHt9LGMse3JlZjp0LG9uVGh1bWJQb3NpdGlvbkNoYW5nZTooKT0+e2lmKG8udmlld3BvcnQmJmkuY3VycmVudCl7Y29uc3QgZj1vLnZpZXdwb3J0LnNjcm9sbFRvcCxoPWZ5KGYscyk7aS5jdXJyZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoMCwgJHtofXB4LCAwKWB9fSxvbldoZWVsU2Nyb2xsOmY9PntvLnZpZXdwb3J0JiYoby52aWV3cG9ydC5zY3JvbGxUb3A9Zil9LG9uRHJhZ1Njcm9sbDpmPT57by52aWV3cG9ydCYmKG8udmlld3BvcnQuc2Nyb2xsVG9wPWQoZikpfX0pKTpudWxsfSksYmI9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7c2l6ZXM6bixvblNpemVzQ2hhbmdlOnIsLi4ub309ZSxpPUhuKEpyLGUuX19zY29wZVNjcm9sbEFyZWEpLFtsLHNdPXAudXNlU3RhdGUoKSxhPXAudXNlUmVmKG51bGwpLHU9UWUodCxhLGkub25TY3JvbGxiYXJYQ2hhbmdlKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PnthLmN1cnJlbnQmJnMoZ2V0Q29tcHV0ZWRTdHlsZShhLmN1cnJlbnQpKX0sW2FdKSxwLmNyZWF0ZUVsZW1lbnQoSXcsdGUoeyJkYXRhLW9yaWVudGF0aW9uIjoiaG9yaXpvbnRhbCJ9LG8se3JlZjp1LHNpemVzOm4sc3R5bGU6e2JvdHRvbTowLGxlZnQ6aS5kaXI9PT0icnRsIj8idmFyKC0tcmFkaXgtc2Nyb2xsLWFyZWEtY29ybmVyLXdpZHRoKSI6MCxyaWdodDppLmRpcj09PSJsdHIiPyJ2YXIoLS1yYWRpeC1zY3JvbGwtYXJlYS1jb3JuZXItd2lkdGgpIjowLCItLXJhZGl4LXNjcm9sbC1hcmVhLXRodW1iLXdpZHRoIjpmZChuKSsicHgiLC4uLmUuc3R5bGV9LG9uVGh1bWJQb2ludGVyRG93bjpjPT5lLm9uVGh1bWJQb2ludGVyRG93bihjLngpLG9uRHJhZ1Njcm9sbDpjPT5lLm9uRHJhZ1Njcm9sbChjLngpLG9uV2hlZWxTY3JvbGw6KGMsZCk9PntpZihpLnZpZXdwb3J0KXtjb25zdCBmPWkudmlld3BvcnQuc2Nyb2xsTGVmdCtjLmRlbHRhWDtlLm9uV2hlZWxTY3JvbGwoZiksQncoZixkKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sb25SZXNpemU6KCk9PnthLmN1cnJlbnQmJmkudmlld3BvcnQmJmwmJnIoe2NvbnRlbnQ6aS52aWV3cG9ydC5zY3JvbGxXaWR0aCx2aWV3cG9ydDppLnZpZXdwb3J0Lm9mZnNldFdpZHRoLHNjcm9sbGJhcjp7c2l6ZTphLmN1cnJlbnQuY2xpZW50V2lkdGgscGFkZGluZ1N0YXJ0Ol9jKGwucGFkZGluZ0xlZnQpLHBhZGRpbmdFbmQ6X2MobC5wYWRkaW5nUmlnaHQpfX0pfX0pKX0pLE5iPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e3NpemVzOm4sb25TaXplc0NoYW5nZTpyLC4uLm99PWUsaT1IbihKcixlLl9fc2NvcGVTY3JvbGxBcmVhKSxbbCxzXT1wLnVzZVN0YXRlKCksYT1wLnVzZVJlZihudWxsKSx1PVFlKHQsYSxpLm9uU2Nyb2xsYmFyWUNoYW5nZSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57YS5jdXJyZW50JiZzKGdldENvbXB1dGVkU3R5bGUoYS5jdXJyZW50KSl9LFthXSkscC5jcmVhdGVFbGVtZW50KEl3LHRlKHsiZGF0YS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIn0sbyx7cmVmOnUsc2l6ZXM6bixzdHlsZTp7dG9wOjAscmlnaHQ6aS5kaXI9PT0ibHRyIj8wOnZvaWQgMCxsZWZ0OmkuZGlyPT09InJ0bCI/MDp2b2lkIDAsYm90dG9tOiJ2YXIoLS1yYWRpeC1zY3JvbGwtYXJlYS1jb3JuZXItaGVpZ2h0KSIsIi0tcmFkaXgtc2Nyb2xsLWFyZWEtdGh1bWItaGVpZ2h0IjpmZChuKSsicHgiLC4uLmUuc3R5bGV9LG9uVGh1bWJQb2ludGVyRG93bjpjPT5lLm9uVGh1bWJQb2ludGVyRG93bihjLnkpLG9uRHJhZ1Njcm9sbDpjPT5lLm9uRHJhZ1Njcm9sbChjLnkpLG9uV2hlZWxTY3JvbGw6KGMsZCk9PntpZihpLnZpZXdwb3J0KXtjb25zdCBmPWkudmlld3BvcnQuc2Nyb2xsVG9wK2MuZGVsdGFZO2Uub25XaGVlbFNjcm9sbChmKSxCdyhmLGQpJiZjLnByZXZlbnREZWZhdWx0KCl9fSxvblJlc2l6ZTooKT0+e2EuY3VycmVudCYmaS52aWV3cG9ydCYmbCYmcih7Y29udGVudDppLnZpZXdwb3J0LnNjcm9sbEhlaWdodCx2aWV3cG9ydDppLnZpZXdwb3J0Lm9mZnNldEhlaWdodCxzY3JvbGxiYXI6e3NpemU6YS5jdXJyZW50LmNsaWVudEhlaWdodCxwYWRkaW5nU3RhcnQ6X2MobC5wYWRkaW5nVG9wKSxwYWRkaW5nRW5kOl9jKGwucGFkZGluZ0JvdHRvbSl9fSl9fSkpfSksW1JiLER3XT1BdyhKciksSXc9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNjcm9sbEFyZWE6bixzaXplczpyLGhhc1RodW1iOm8sb25UaHVtYkNoYW5nZTppLG9uVGh1bWJQb2ludGVyVXA6bCxvblRodW1iUG9pbnRlckRvd246cyxvblRodW1iUG9zaXRpb25DaGFuZ2U6YSxvbkRyYWdTY3JvbGw6dSxvbldoZWVsU2Nyb2xsOmMsb25SZXNpemU6ZCwuLi5mfT1lLGg9SG4oSnIsbiksW2csbV09cC51c2VTdGF0ZShudWxsKSxfPVFlKHQsRD0+bShEKSksdj1wLnVzZVJlZihudWxsKSx5PXAudXNlUmVmKCIiKSx4PWgudmlld3BvcnQsUz1yLmNvbnRlbnQtci52aWV3cG9ydCxrPVV0KGMpLGI9VXQoYSksVD1oZChkLDEwKTtmdW5jdGlvbiBOKEQpe2lmKHYuY3VycmVudCl7Y29uc3QgTT1ELmNsaWVudFgtdi5jdXJyZW50LmxlZnQsaj1ELmNsaWVudFktdi5jdXJyZW50LnRvcDt1KHt4Ok0seTpqfSl9fXJldHVybiBwLnVzZUVmZmVjdCgoKT0+e2NvbnN0IEQ9TT0+e2NvbnN0IGo9TS50YXJnZXQ7KGc9PW51bGw/dm9pZCAwOmcuY29udGFpbnMoaikpJiZrKE0sUyl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsRCx7cGFzc2l2ZTohMX0pLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsRCx7cGFzc2l2ZTohMX0pfSxbeCxnLFMsa10pLHAudXNlRWZmZWN0KGIsW3IsYl0pLGJsKGcsVCksYmwoaC5jb250ZW50LFQpLHAuY3JlYXRlRWxlbWVudChSYix7c2NvcGU6bixzY3JvbGxiYXI6ZyxoYXNUaHVtYjpvLG9uVGh1bWJDaGFuZ2U6VXQoaSksb25UaHVtYlBvaW50ZXJVcDpVdChsKSxvblRodW1iUG9zaXRpb25DaGFuZ2U6YixvblRodW1iUG9pbnRlckRvd246VXQocyl9LHAuY3JlYXRlRWxlbWVudChMZS5kaXYsdGUoe30sZix7cmVmOl8sc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsLi4uZi5zdHlsZX0sb25Qb2ludGVyRG93bjpIZShlLm9uUG9pbnRlckRvd24sRD0+e0QuYnV0dG9uPT09MCYmKEQudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKEQucG9pbnRlcklkKSx2LmN1cnJlbnQ9Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx5LmN1cnJlbnQ9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0LGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD0ibm9uZSIsaC52aWV3cG9ydCYmKGgudmlld3BvcnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9ImF1dG8iKSxOKEQpKX0pLG9uUG9pbnRlck1vdmU6SGUoZS5vblBvaW50ZXJNb3ZlLE4pLG9uUG9pbnRlclVwOkhlKGUub25Qb2ludGVyVXAsRD0+e2NvbnN0IE09RC50YXJnZXQ7TS5oYXNQb2ludGVyQ2FwdHVyZShELnBvaW50ZXJJZCkmJk0ucmVsZWFzZVBvaW50ZXJDYXB0dXJlKEQucG9pbnRlcklkKSxkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9eS5jdXJyZW50LGgudmlld3BvcnQmJihoLnZpZXdwb3J0LnN0eWxlLnNjcm9sbEJlaGF2aW9yPSIiKSx2LmN1cnJlbnQ9bnVsbH0pfSkpKX0pLHpoPSJTY3JvbGxBcmVhVGh1bWIiLFBiPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e2ZvcmNlTW91bnQ6biwuLi5yfT1lLG89RHcoemgsZS5fX3Njb3BlU2Nyb2xsQXJlYSk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudCh6bCx7cHJlc2VudDpufHxvLmhhc1RodW1ifSxwLmNyZWF0ZUVsZW1lbnQoT2IsdGUoe3JlZjp0fSxyKSkpfSksT2I9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNjcm9sbEFyZWE6bixzdHlsZTpyLC4uLm99PWUsaT1Ibih6aCxuKSxsPUR3KHpoLG4pLHtvblRodW1iUG9zaXRpb25DaGFuZ2U6c309bCxhPVFlKHQsZD0+bC5vblRodW1iQ2hhbmdlKGQpKSx1PXAudXNlUmVmKCksYz1oZCgoKT0+e3UuY3VycmVudCYmKHUuY3VycmVudCgpLHUuY3VycmVudD12b2lkIDApfSwxMDApO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGQ9aS52aWV3cG9ydDtpZihkKXtjb25zdCBmPSgpPT57aWYoYygpLCF1LmN1cnJlbnQpe2NvbnN0IGg9RGIoZCxzKTt1LmN1cnJlbnQ9aCxzKCl9fTtyZXR1cm4gcygpLGQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmKSwoKT0+ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLGYpfX0sW2kudmlld3BvcnQsYyxzXSkscC5jcmVhdGVFbGVtZW50KExlLmRpdix0ZSh7ImRhdGEtc3RhdGUiOmwuaGFzVGh1bWI/InZpc2libGUiOiJoaWRkZW4ifSxvLHtyZWY6YSxzdHlsZTp7d2lkdGg6InZhcigtLXJhZGl4LXNjcm9sbC1hcmVhLXRodW1iLXdpZHRoKSIsaGVpZ2h0OiJ2YXIoLS1yYWRpeC1zY3JvbGwtYXJlYS10aHVtYi1oZWlnaHQpIiwuLi5yfSxvblBvaW50ZXJEb3duQ2FwdHVyZTpIZShlLm9uUG9pbnRlckRvd25DYXB0dXJlLGQ9Pntjb25zdCBoPWQudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9ZC5jbGllbnRYLWgubGVmdCxtPWQuY2xpZW50WS1oLnRvcDtsLm9uVGh1bWJQb2ludGVyRG93bih7eDpnLHk6bX0pfSksb25Qb2ludGVyVXA6SGUoZS5vblBvaW50ZXJVcCxsLm9uVGh1bWJQb2ludGVyVXApfSkpfSksanc9IlNjcm9sbEFyZWFDb3JuZXIiLEFiPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0IG49SG4oancsZS5fX3Njb3BlU2Nyb2xsQXJlYSkscj0hIShuLnNjcm9sbGJhclgmJm4uc2Nyb2xsYmFyWSk7cmV0dXJuIG4udHlwZSE9PSJzY3JvbGwiJiZyP3AuY3JlYXRlRWxlbWVudChNYix0ZSh7fSxlLHtyZWY6dH0pKTpudWxsfSksTWI9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNjcm9sbEFyZWE6biwuLi5yfT1lLG89SG4oancsbiksW2ksbF09cC51c2VTdGF0ZSgwKSxbcyxhXT1wLnVzZVN0YXRlKDApLHU9ISEoaSYmcyk7cmV0dXJuIGJsKG8uc2Nyb2xsYmFyWCwoKT0+e3ZhciBjO2NvbnN0IGQ9KChjPW8uc2Nyb2xsYmFyWCk9PT1udWxsfHxjPT09dm9pZCAwP3ZvaWQgMDpjLm9mZnNldEhlaWdodCl8fDA7by5vbkNvcm5lckhlaWdodENoYW5nZShkKSxhKGQpfSksYmwoby5zY3JvbGxiYXJZLCgpPT57dmFyIGM7Y29uc3QgZD0oKGM9by5zY3JvbGxiYXJZKT09PW51bGx8fGM9PT12b2lkIDA/dm9pZCAwOmMub2Zmc2V0V2lkdGgpfHwwO28ub25Db3JuZXJXaWR0aENoYW5nZShkKSxsKGQpfSksdT9wLmNyZWF0ZUVsZW1lbnQoTGUuZGl2LHRlKHt9LHIse3JlZjp0LHN0eWxlOnt3aWR0aDppLGhlaWdodDpzLHBvc2l0aW9uOiJhYnNvbHV0ZSIscmlnaHQ6by5kaXI9PT0ibHRyIj8wOnZvaWQgMCxsZWZ0Om8uZGlyPT09InJ0bCI/MDp2b2lkIDAsYm90dG9tOjAsLi4uZS5zdHlsZX19KSk6bnVsbH0pO2Z1bmN0aW9uIF9jKGUpe3JldHVybiBlP3BhcnNlSW50KGUsMTApOjB9ZnVuY3Rpb24gencoZSx0KXtjb25zdCBuPWUvdDtyZXR1cm4gaXNOYU4obik/MDpufWZ1bmN0aW9uIGZkKGUpe2NvbnN0IHQ9encoZS52aWV3cG9ydCxlLmNvbnRlbnQpLG49ZS5zY3JvbGxiYXIucGFkZGluZ1N0YXJ0K2Uuc2Nyb2xsYmFyLnBhZGRpbmdFbmQscj0oZS5zY3JvbGxiYXIuc2l6ZS1uKSp0O3JldHVybiBNYXRoLm1heChyLDE4KX1mdW5jdGlvbiBMYihlLHQsbixyPSJsdHIiKXtjb25zdCBvPWZkKG4pLGk9by8yLGw9dHx8aSxzPW8tbCxhPW4uc2Nyb2xsYmFyLnBhZGRpbmdTdGFydCtsLHU9bi5zY3JvbGxiYXIuc2l6ZS1uLnNjcm9sbGJhci5wYWRkaW5nRW5kLXMsYz1uLmNvbnRlbnQtbi52aWV3cG9ydCxkPXI9PT0ibHRyIj9bMCxjXTpbYyotMSwwXTtyZXR1cm4gRncoW2EsdV0sZCkoZSl9ZnVuY3Rpb24gZnkoZSx0LG49Imx0ciIpe2NvbnN0IHI9ZmQodCksbz10LnNjcm9sbGJhci5wYWRkaW5nU3RhcnQrdC5zY3JvbGxiYXIucGFkZGluZ0VuZCxpPXQuc2Nyb2xsYmFyLnNpemUtbyxsPXQuY29udGVudC10LnZpZXdwb3J0LHM9aS1yLGE9bj09PSJsdHIiP1swLGxdOltsKi0xLDBdLHU9amgoZSxhKTtyZXR1cm4gRncoWzAsbF0sWzAsc10pKHUpfWZ1bmN0aW9uIEZ3KGUsdCl7cmV0dXJuIG49PntpZihlWzBdPT09ZVsxXXx8dFswXT09PXRbMV0pcmV0dXJuIHRbMF07Y29uc3Qgcj0odFsxXS10WzBdKS8oZVsxXS1lWzBdKTtyZXR1cm4gdFswXStyKihuLWVbMF0pfX1mdW5jdGlvbiBCdyhlLHQpe3JldHVybiBlPjAmJmU8dH1jb25zdCBEYj0oZSx0PSgpPT57fSk9PntsZXQgbj17bGVmdDplLnNjcm9sbExlZnQsdG9wOmUuc2Nyb2xsVG9wfSxyPTA7cmV0dXJuIGZ1bmN0aW9uIG8oKXtjb25zdCBpPXtsZWZ0OmUuc2Nyb2xsTGVmdCx0b3A6ZS5zY3JvbGxUb3B9LGw9bi5sZWZ0IT09aS5sZWZ0LHM9bi50b3AhPT1pLnRvcDsobHx8cykmJnQoKSxuPWkscj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG8pfSgpLCgpPT53aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocil9O2Z1bmN0aW9uIGhkKGUsdCl7Y29uc3Qgbj1VdChlKSxyPXAudXNlUmVmKDApO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+KCk9PndpbmRvdy5jbGVhclRpbWVvdXQoci5jdXJyZW50KSxbXSkscC51c2VDYWxsYmFjaygoKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQoci5jdXJyZW50KSxyLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQobix0KX0sW24sdF0pfWZ1bmN0aW9uIGJsKGUsdCl7Y29uc3Qgbj1VdCh0KTtibigoKT0+e2xldCByPTA7aWYoZSl7Y29uc3Qgbz1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9PntjYW5jZWxBbmltYXRpb25GcmFtZShyKSxyPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KTtyZXR1cm4gby5vYnNlcnZlKGUpLCgpPT57d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHIpLG8udW5vYnNlcnZlKGUpfX19LFtlLG5dKX1jb25zdCBXdz1FYixJYj0kYixqYj1BYjtmdW5jdGlvbiBVdyhlKXt2YXIgdCxuLHI9IiI7aWYodHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09Im51bWJlciIpcis9ZTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0IilpZihBcnJheS5pc0FycmF5KGUpKWZvcih0PTA7dDxlLmxlbmd0aDt0KyspZVt0XSYmKG49VXcoZVt0XSkpJiYociYmKHIrPSIgIikscis9bik7ZWxzZSBmb3IodCBpbiBlKWVbdF0mJihyJiYocis9IiAiKSxyKz10KTtyZXR1cm4gcn1mdW5jdGlvbiBWdygpe2Zvcih2YXIgZSx0LG49MCxyPSIiO248YXJndW1lbnRzLmxlbmd0aDspKGU9YXJndW1lbnRzW24rK10pJiYodD1VdyhlKSkmJihyJiYocis9IiAiKSxyKz10KTtyZXR1cm4gcn1jb25zdCB6Zz0iLSI7ZnVuY3Rpb24gemIoZSl7Y29uc3QgdD1CYihlKSx7Y29uZmxpY3RpbmdDbGFzc0dyb3VwczpuLGNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyczpyfT1lO2Z1bmN0aW9uIG8obCl7Y29uc3Qgcz1sLnNwbGl0KHpnKTtyZXR1cm4gc1swXT09PSIiJiZzLmxlbmd0aCE9PTEmJnMuc2hpZnQoKSxIdyhzLHQpfHxGYihsKX1mdW5jdGlvbiBpKGwscyl7Y29uc3QgYT1uW2xdfHxbXTtyZXR1cm4gcyYmcltsXT9bLi4uYSwuLi5yW2xdXTphfXJldHVybntnZXRDbGFzc0dyb3VwSWQ6byxnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6aX19ZnVuY3Rpb24gSHcoZSx0KXt2YXIgbDtpZihlLmxlbmd0aD09PTApcmV0dXJuIHQuY2xhc3NHcm91cElkO2NvbnN0IG49ZVswXSxyPXQubmV4dFBhcnQuZ2V0KG4pLG89cj9IdyhlLnNsaWNlKDEpLHIpOnZvaWQgMDtpZihvKXJldHVybiBvO2lmKHQudmFsaWRhdG9ycy5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBpPWUuam9pbih6Zyk7cmV0dXJuKGw9dC52YWxpZGF0b3JzLmZpbmQoKHt2YWxpZGF0b3I6c30pPT5zKGkpKSk9PW51bGw/dm9pZCAwOmwuY2xhc3NHcm91cElkfWNvbnN0IGh5PS9eXFsoLispXF0kLztmdW5jdGlvbiBGYihlKXtpZihoeS50ZXN0KGUpKXtjb25zdCB0PWh5LmV4ZWMoZSlbMV0sbj10PT1udWxsP3ZvaWQgMDp0LnN1YnN0cmluZygwLHQuaW5kZXhPZigiOiIpKTtpZihuKXJldHVybiJhcmJpdHJhcnkuLiIrbn19ZnVuY3Rpb24gQmIoZSl7Y29uc3R7dGhlbWU6dCxwcmVmaXg6bn09ZSxyPXtuZXh0UGFydDpuZXcgTWFwLHZhbGlkYXRvcnM6W119O3JldHVybiBVYihPYmplY3QuZW50cmllcyhlLmNsYXNzR3JvdXBzKSxuKS5mb3JFYWNoKChbaSxsXSk9PntGaChsLHIsaSx0KX0pLHJ9ZnVuY3Rpb24gRmgoZSx0LG4scil7ZS5mb3JFYWNoKG89PntpZih0eXBlb2Ygbz09InN0cmluZyIpe2NvbnN0IGk9bz09PSIiP3Q6cHkodCxvKTtpLmNsYXNzR3JvdXBJZD1uO3JldHVybn1pZih0eXBlb2Ygbz09ImZ1bmN0aW9uIil7aWYoV2Iobykpe0ZoKG8ociksdCxuLHIpO3JldHVybn10LnZhbGlkYXRvcnMucHVzaCh7dmFsaWRhdG9yOm8sY2xhc3NHcm91cElkOm59KTtyZXR1cm59T2JqZWN0LmVudHJpZXMobykuZm9yRWFjaCgoW2ksbF0pPT57RmgobCxweSh0LGkpLG4scil9KX0pfWZ1bmN0aW9uIHB5KGUsdCl7bGV0IG49ZTtyZXR1cm4gdC5zcGxpdCh6ZykuZm9yRWFjaChyPT57bi5uZXh0UGFydC5oYXMocil8fG4ubmV4dFBhcnQuc2V0KHIse25leHRQYXJ0Om5ldyBNYXAsdmFsaWRhdG9yczpbXX0pLG49bi5uZXh0UGFydC5nZXQocil9KSxufWZ1bmN0aW9uIFdiKGUpe3JldHVybiBlLmlzVGhlbWVHZXR0ZXJ9ZnVuY3Rpb24gVWIoZSx0KXtyZXR1cm4gdD9lLm1hcCgoW24scl0pPT57Y29uc3Qgbz1yLm1hcChpPT50eXBlb2YgaT09InN0cmluZyI/dCtpOnR5cGVvZiBpPT0ib2JqZWN0Ij9PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoaSkubWFwKChbbCxzXSk9Plt0K2wsc10pKTppKTtyZXR1cm5bbixvXX0pOmV9ZnVuY3Rpb24gVmIoZSl7aWYoZTwxKXJldHVybntnZXQ6KCk9Pnt9LHNldDooKT0+e319O2xldCB0PTAsbj1uZXcgTWFwLHI9bmV3IE1hcDtmdW5jdGlvbiBvKGksbCl7bi5zZXQoaSxsKSx0KyssdD5lJiYodD0wLHI9bixuPW5ldyBNYXApfXJldHVybntnZXQoaSl7bGV0IGw9bi5nZXQoaSk7aWYobCE9PXZvaWQgMClyZXR1cm4gbDtpZigobD1yLmdldChpKSkhPT12b2lkIDApcmV0dXJuIG8oaSxsKSxsfSxzZXQoaSxsKXtuLmhhcyhpKT9uLnNldChpLGwpOm8oaSxsKX19fWNvbnN0IEt3PSIhIjtmdW5jdGlvbiBIYihlKXtjb25zdCB0PWUuc2VwYXJhdG9yLG49dC5sZW5ndGg9PT0xLHI9dFswXSxvPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihsKXtjb25zdCBzPVtdO2xldCBhPTAsdT0wLGM7Zm9yKGxldCBtPTA7bTxsLmxlbmd0aDttKyspe2xldCBfPWxbbV07aWYoYT09PTApe2lmKF89PT1yJiYobnx8bC5zbGljZShtLG0rbyk9PT10KSl7cy5wdXNoKGwuc2xpY2UodSxtKSksdT1tK287Y29udGludWV9aWYoXz09PSIvIil7Yz1tO2NvbnRpbnVlfX1fPT09IlsiP2ErKzpfPT09Il0iJiZhLS19Y29uc3QgZD1zLmxlbmd0aD09PTA/bDpsLnN1YnN0cmluZyh1KSxmPWQuc3RhcnRzV2l0aChLdyksaD1mP2Quc3Vic3RyaW5nKDEpOmQsZz1jJiZjPnU/Yy11OnZvaWQgMDtyZXR1cm57bW9kaWZpZXJzOnMsaGFzSW1wb3J0YW50TW9kaWZpZXI6ZixiYXNlQ2xhc3NOYW1lOmgsbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvbjpnfX19ZnVuY3Rpb24gS2IoZSl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3QgdD1bXTtsZXQgbj1bXTtyZXR1cm4gZS5mb3JFYWNoKHI9PntyWzBdPT09IlsiPyh0LnB1c2goLi4ubi5zb3J0KCksciksbj1bXSk6bi5wdXNoKHIpfSksdC5wdXNoKC4uLm4uc29ydCgpKSx0fWZ1bmN0aW9uIEdiKGUpe3JldHVybntjYWNoZTpWYihlLmNhY2hlU2l6ZSksc3BsaXRNb2RpZmllcnM6SGIoZSksLi4uemIoZSl9fWNvbnN0IFliPS9ccysvO2Z1bmN0aW9uIFhiKGUsdCl7Y29uc3R7c3BsaXRNb2RpZmllcnM6bixnZXRDbGFzc0dyb3VwSWQ6cixnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6b309dCxpPW5ldyBTZXQ7cmV0dXJuIGUudHJpbSgpLnNwbGl0KFliKS5tYXAobD0+e2NvbnN0e21vZGlmaWVyczpzLGhhc0ltcG9ydGFudE1vZGlmaWVyOmEsYmFzZUNsYXNzTmFtZTp1LG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb246Y309bihsKTtsZXQgZD1yKGM/dS5zdWJzdHJpbmcoMCxjKTp1KSxmPSEhYztpZighZCl7aWYoIWMpcmV0dXJue2lzVGFpbHdpbmRDbGFzczohMSxvcmlnaW5hbENsYXNzTmFtZTpsfTtpZihkPXIodSksIWQpcmV0dXJue2lzVGFpbHdpbmRDbGFzczohMSxvcmlnaW5hbENsYXNzTmFtZTpsfTtmPSExfWNvbnN0IGg9S2Iocykuam9pbigiOiIpO3JldHVybntpc1RhaWx3aW5kQ2xhc3M6ITAsbW9kaWZpZXJJZDphP2grS3c6aCxjbGFzc0dyb3VwSWQ6ZCxvcmlnaW5hbENsYXNzTmFtZTpsLGhhc1Bvc3RmaXhNb2RpZmllcjpmfX0pLnJldmVyc2UoKS5maWx0ZXIobD0+e2lmKCFsLmlzVGFpbHdpbmRDbGFzcylyZXR1cm4hMDtjb25zdHttb2RpZmllcklkOnMsY2xhc3NHcm91cElkOmEsaGFzUG9zdGZpeE1vZGlmaWVyOnV9PWwsYz1zK2E7cmV0dXJuIGkuaGFzKGMpPyExOihpLmFkZChjKSxvKGEsdSkuZm9yRWFjaChkPT5pLmFkZChzK2QpKSwhMCl9KS5yZXZlcnNlKCkubWFwKGw9Pmwub3JpZ2luYWxDbGFzc05hbWUpLmpvaW4oIiAiKX1mdW5jdGlvbiBRYigpe2xldCBlPTAsdCxuLHI9IiI7Zm9yKDtlPGFyZ3VtZW50cy5sZW5ndGg7KSh0PWFyZ3VtZW50c1tlKytdKSYmKG49R3codCkpJiYociYmKHIrPSIgIikscis9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gR3coZSl7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO2xldCB0LG49IiI7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspZVtyXSYmKHQ9R3coZVtyXSkpJiYobiYmKG4rPSIgIiksbis9dCk7cmV0dXJuIG59ZnVuY3Rpb24gSmIoZSwuLi50KXtsZXQgbixyLG8saT1sO2Z1bmN0aW9uIGwoYSl7Y29uc3QgdT10LnJlZHVjZSgoYyxkKT0+ZChjKSxlKCkpO3JldHVybiBuPUdiKHUpLHI9bi5jYWNoZS5nZXQsbz1uLmNhY2hlLnNldCxpPXMscyhhKX1mdW5jdGlvbiBzKGEpe2NvbnN0IHU9cihhKTtpZih1KXJldHVybiB1O2NvbnN0IGM9WGIoYSxuKTtyZXR1cm4gbyhhLGMpLGN9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkoUWIuYXBwbHkobnVsbCxhcmd1bWVudHMpKX19ZnVuY3Rpb24gV2UoZSl7Y29uc3QgdD1uPT5uW2VdfHxbXTtyZXR1cm4gdC5pc1RoZW1lR2V0dGVyPSEwLHR9Y29uc3QgWXc9L15cWyg/OihbYS16LV0rKTopPyguKylcXSQvaSxaYj0vXlxkK1wvXGQrJC8scWI9bmV3IFNldChbInB4IiwiZnVsbCIsInNjcmVlbiJdKSxlTj0vXihcZCsoXC5cZCspPyk/KHhzfHNtfG1kfGxnfHhsKSQvLHROPS9cZCsoJXxweHxyP2VtfFtzZGxdP3YoW2h3aWJdfG1pbnxtYXgpfHB0fHBjfGlufGNtfG1tfGNhcHxjaHxleHxyP2xofGNxKHd8aHxpfGJ8bWlufG1heCkpfFxiKGNhbGN8bWlufG1heHxjbGFtcClcKC4rXCl8XjAkLyxuTj0vXi0/KChcZCspP1wuPyhcZCspW2Etel0rfDApXy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApLyxyTj0vXih1cmx8aW1hZ2V8aW1hZ2Utc2V0fGNyb3NzLWZhZGV8ZWxlbWVudHwocmVwZWF0aW5nLSk/KGxpbmVhcnxyYWRpYWx8Y29uaWMpLWdyYWRpZW50KVwoLitcKSQvO2Z1bmN0aW9uIFhuKGUpe3JldHVybiBuaShlKXx8cWIuaGFzKGUpfHxaYi50ZXN0KGUpfWZ1bmN0aW9uIG9vKGUpe3JldHVybiBGbChlLCJsZW5ndGgiLGROKX1mdW5jdGlvbiBuaShlKXtyZXR1cm4hIWUmJiFOdW1iZXIuaXNOYU4oTnVtYmVyKGUpKX1mdW5jdGlvbiBtdShlKXtyZXR1cm4gRmwoZSwibnVtYmVyIixuaSl9ZnVuY3Rpb24gZHMoZSl7cmV0dXJuISFlJiZOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcihlKSl9ZnVuY3Rpb24gb04oZSl7cmV0dXJuIGUuZW5kc1dpdGgoIiUiKSYmbmkoZS5zbGljZSgwLC0xKSl9ZnVuY3Rpb24gZ2UoZSl7cmV0dXJuIFl3LnRlc3QoZSl9ZnVuY3Rpb24gaW8oZSl7cmV0dXJuIGVOLnRlc3QoZSl9Y29uc3QgaU49bmV3IFNldChbImxlbmd0aCIsInNpemUiLCJwZXJjZW50YWdlIl0pO2Z1bmN0aW9uIGxOKGUpe3JldHVybiBGbChlLGlOLFh3KX1mdW5jdGlvbiBzTihlKXtyZXR1cm4gRmwoZSwicG9zaXRpb24iLFh3KX1jb25zdCBhTj1uZXcgU2V0KFsiaW1hZ2UiLCJ1cmwiXSk7ZnVuY3Rpb24gdU4oZSl7cmV0dXJuIEZsKGUsYU4saE4pfWZ1bmN0aW9uIGNOKGUpe3JldHVybiBGbChlLCIiLGZOKX1mdW5jdGlvbiBmcygpe3JldHVybiEwfWZ1bmN0aW9uIEZsKGUsdCxuKXtjb25zdCByPVl3LmV4ZWMoZSk7cmV0dXJuIHI/clsxXT90eXBlb2YgdD09InN0cmluZyI/clsxXT09PXQ6dC5oYXMoclsxXSk6bihyWzJdKTohMX1mdW5jdGlvbiBkTihlKXtyZXR1cm4gdE4udGVzdChlKX1mdW5jdGlvbiBYdygpe3JldHVybiExfWZ1bmN0aW9uIGZOKGUpe3JldHVybiBuTi50ZXN0KGUpfWZ1bmN0aW9uIGhOKGUpe3JldHVybiByTi50ZXN0KGUpfWZ1bmN0aW9uIHBOKCl7Y29uc3QgZT1XZSgiY29sb3JzIiksdD1XZSgic3BhY2luZyIpLG49V2UoImJsdXIiKSxyPVdlKCJicmlnaHRuZXNzIiksbz1XZSgiYm9yZGVyQ29sb3IiKSxpPVdlKCJib3JkZXJSYWRpdXMiKSxsPVdlKCJib3JkZXJTcGFjaW5nIikscz1XZSgiYm9yZGVyV2lkdGgiKSxhPVdlKCJjb250cmFzdCIpLHU9V2UoImdyYXlzY2FsZSIpLGM9V2UoImh1ZVJvdGF0ZSIpLGQ9V2UoImludmVydCIpLGY9V2UoImdhcCIpLGg9V2UoImdyYWRpZW50Q29sb3JTdG9wcyIpLGc9V2UoImdyYWRpZW50Q29sb3JTdG9wUG9zaXRpb25zIiksbT1XZSgiaW5zZXQiKSxfPVdlKCJtYXJnaW4iKSx2PVdlKCJvcGFjaXR5IikseT1XZSgicGFkZGluZyIpLHg9V2UoInNhdHVyYXRlIiksUz1XZSgic2NhbGUiKSxrPVdlKCJzZXBpYSIpLGI9V2UoInNrZXciKSxUPVdlKCJzcGFjZSIpLE49V2UoInRyYW5zbGF0ZSIpLEQ9KCk9PlsiYXV0byIsImNvbnRhaW4iLCJub25lIl0sTT0oKT0+WyJhdXRvIiwiaGlkZGVuIiwiY2xpcCIsInZpc2libGUiLCJzY3JvbGwiXSxqPSgpPT5bImF1dG8iLGdlLHRdLEI9KCk9PltnZSx0XSxyZT0oKT0+WyIiLFhuLG9vXSxIPSgpPT5bImF1dG8iLG5pLGdlXSxZPSgpPT5bImJvdHRvbSIsImNlbnRlciIsImxlZnQiLCJsZWZ0LWJvdHRvbSIsImxlZnQtdG9wIiwicmlnaHQiLCJyaWdodC1ib3R0b20iLCJyaWdodC10b3AiLCJ0b3AiXSxDPSgpPT5bInNvbGlkIiwiZGFzaGVkIiwiZG90dGVkIiwiZG91YmxlIiwibm9uZSJdLCQ9KCk9Plsibm9ybWFsIiwibXVsdGlwbHkiLCJzY3JlZW4iLCJvdmVybGF5IiwiZGFya2VuIiwibGlnaHRlbiIsImNvbG9yLWRvZGdlIiwiY29sb3ItYnVybiIsImhhcmQtbGlnaHQiLCJzb2Z0LWxpZ2h0IiwiZGlmZmVyZW5jZSIsImV4Y2x1c2lvbiIsImh1ZSIsInNhdHVyYXRpb24iLCJjb2xvciIsImx1bWlub3NpdHkiLCJwbHVzLWxpZ2h0ZXIiXSxFPSgpPT5bInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwiYmV0d2VlbiIsImFyb3VuZCIsImV2ZW5seSIsInN0cmV0Y2giXSxPPSgpPT5bIiIsIjAiLGdlXSxSPSgpPT5bImF1dG8iLCJhdm9pZCIsImFsbCIsImF2b2lkLXBhZ2UiLCJwYWdlIiwibGVmdCIsInJpZ2h0IiwiY29sdW1uIl0sRj0oKT0+W25pLG11XSxWPSgpPT5bbmksZ2VdO3JldHVybntjYWNoZVNpemU6NTAwLHNlcGFyYXRvcjoiOiIsdGhlbWU6e2NvbG9yczpbZnNdLHNwYWNpbmc6W1huLG9vXSxibHVyOlsibm9uZSIsIiIsaW8sZ2VdLGJyaWdodG5lc3M6RigpLGJvcmRlckNvbG9yOltlXSxib3JkZXJSYWRpdXM6WyJub25lIiwiIiwiZnVsbCIsaW8sZ2VdLGJvcmRlclNwYWNpbmc6QigpLGJvcmRlcldpZHRoOnJlKCksY29udHJhc3Q6RigpLGdyYXlzY2FsZTpPKCksaHVlUm90YXRlOlYoKSxpbnZlcnQ6TygpLGdhcDpCKCksZ3JhZGllbnRDb2xvclN0b3BzOltlXSxncmFkaWVudENvbG9yU3RvcFBvc2l0aW9uczpbb04sb29dLGluc2V0OmooKSxtYXJnaW46aigpLG9wYWNpdHk6RigpLHBhZGRpbmc6QigpLHNhdHVyYXRlOkYoKSxzY2FsZTpGKCksc2VwaWE6TygpLHNrZXc6VigpLHNwYWNlOkIoKSx0cmFuc2xhdGU6QigpfSxjbGFzc0dyb3Vwczp7YXNwZWN0Olt7YXNwZWN0OlsiYXV0byIsInNxdWFyZSIsInZpZGVvIixnZV19XSxjb250YWluZXI6WyJjb250YWluZXIiXSxjb2x1bW5zOlt7Y29sdW1uczpbaW9dfV0sImJyZWFrLWFmdGVyIjpbeyJicmVhay1hZnRlciI6UigpfV0sImJyZWFrLWJlZm9yZSI6W3siYnJlYWstYmVmb3JlIjpSKCl9XSwiYnJlYWstaW5zaWRlIjpbeyJicmVhay1pbnNpZGUiOlsiYXV0byIsImF2b2lkIiwiYXZvaWQtcGFnZSIsImF2b2lkLWNvbHVtbiJdfV0sImJveC1kZWNvcmF0aW9uIjpbeyJib3gtZGVjb3JhdGlvbiI6WyJzbGljZSIsImNsb25lIl19XSxib3g6W3tib3g6WyJib3JkZXIiLCJjb250ZW50Il19XSxkaXNwbGF5OlsiYmxvY2siLCJpbmxpbmUtYmxvY2siLCJpbmxpbmUiLCJmbGV4IiwiaW5saW5lLWZsZXgiLCJ0YWJsZSIsImlubGluZS10YWJsZSIsInRhYmxlLWNhcHRpb24iLCJ0YWJsZS1jZWxsIiwidGFibGUtY29sdW1uIiwidGFibGUtY29sdW1uLWdyb3VwIiwidGFibGUtZm9vdGVyLWdyb3VwIiwidGFibGUtaGVhZGVyLWdyb3VwIiwidGFibGUtcm93LWdyb3VwIiwidGFibGUtcm93IiwiZmxvdy1yb290IiwiZ3JpZCIsImlubGluZS1ncmlkIiwiY29udGVudHMiLCJsaXN0LWl0ZW0iLCJoaWRkZW4iXSxmbG9hdDpbe2Zsb2F0OlsicmlnaHQiLCJsZWZ0Iiwibm9uZSJdfV0sY2xlYXI6W3tjbGVhcjpbImxlZnQiLCJyaWdodCIsImJvdGgiLCJub25lIl19XSxpc29sYXRpb246WyJpc29sYXRlIiwiaXNvbGF0aW9uLWF1dG8iXSwib2JqZWN0LWZpdCI6W3tvYmplY3Q6WyJjb250YWluIiwiY292ZXIiLCJmaWxsIiwibm9uZSIsInNjYWxlLWRvd24iXX1dLCJvYmplY3QtcG9zaXRpb24iOlt7b2JqZWN0OlsuLi5ZKCksZ2VdfV0sb3ZlcmZsb3c6W3tvdmVyZmxvdzpNKCl9XSwib3ZlcmZsb3cteCI6W3sib3ZlcmZsb3cteCI6TSgpfV0sIm92ZXJmbG93LXkiOlt7Im92ZXJmbG93LXkiOk0oKX1dLG92ZXJzY3JvbGw6W3tvdmVyc2Nyb2xsOkQoKX1dLCJvdmVyc2Nyb2xsLXgiOlt7Im92ZXJzY3JvbGwteCI6RCgpfV0sIm92ZXJzY3JvbGwteSI6W3sib3ZlcnNjcm9sbC15IjpEKCl9XSxwb3NpdGlvbjpbInN0YXRpYyIsImZpeGVkIiwiYWJzb2x1dGUiLCJyZWxhdGl2ZSIsInN0aWNreSJdLGluc2V0Olt7aW5zZXQ6W21dfV0sImluc2V0LXgiOlt7Imluc2V0LXgiOlttXX1dLCJpbnNldC15IjpbeyJpbnNldC15IjpbbV19XSxzdGFydDpbe3N0YXJ0OlttXX1dLGVuZDpbe2VuZDpbbV19XSx0b3A6W3t0b3A6W21dfV0scmlnaHQ6W3tyaWdodDpbbV19XSxib3R0b206W3tib3R0b206W21dfV0sbGVmdDpbe2xlZnQ6W21dfV0sdmlzaWJpbGl0eTpbInZpc2libGUiLCJpbnZpc2libGUiLCJjb2xsYXBzZSJdLHo6W3t6OlsiYXV0byIsZHMsZ2VdfV0sYmFzaXM6W3tiYXNpczpqKCl9XSwiZmxleC1kaXJlY3Rpb24iOlt7ZmxleDpbInJvdyIsInJvdy1yZXZlcnNlIiwiY29sIiwiY29sLXJldmVyc2UiXX1dLCJmbGV4LXdyYXAiOlt7ZmxleDpbIndyYXAiLCJ3cmFwLXJldmVyc2UiLCJub3dyYXAiXX1dLGZsZXg6W3tmbGV4OlsiMSIsImF1dG8iLCJpbml0aWFsIiwibm9uZSIsZ2VdfV0sZ3Jvdzpbe2dyb3c6TygpfV0sc2hyaW5rOlt7c2hyaW5rOk8oKX1dLG9yZGVyOlt7b3JkZXI6WyJmaXJzdCIsImxhc3QiLCJub25lIixkcyxnZV19XSwiZ3JpZC1jb2xzIjpbeyJncmlkLWNvbHMiOltmc119XSwiY29sLXN0YXJ0LWVuZCI6W3tjb2w6WyJhdXRvIix7c3BhbjpbImZ1bGwiLGRzLGdlXX0sZ2VdfV0sImNvbC1zdGFydCI6W3siY29sLXN0YXJ0IjpIKCl9XSwiY29sLWVuZCI6W3siY29sLWVuZCI6SCgpfV0sImdyaWQtcm93cyI6W3siZ3JpZC1yb3dzIjpbZnNdfV0sInJvdy1zdGFydC1lbmQiOlt7cm93OlsiYXV0byIse3NwYW46W2RzLGdlXX0sZ2VdfV0sInJvdy1zdGFydCI6W3sicm93LXN0YXJ0IjpIKCl9XSwicm93LWVuZCI6W3sicm93LWVuZCI6SCgpfV0sImdyaWQtZmxvdyI6W3siZ3JpZC1mbG93IjpbInJvdyIsImNvbCIsImRlbnNlIiwicm93LWRlbnNlIiwiY29sLWRlbnNlIl19XSwiYXV0by1jb2xzIjpbeyJhdXRvLWNvbHMiOlsiYXV0byIsIm1pbiIsIm1heCIsImZyIixnZV19XSwiYXV0by1yb3dzIjpbeyJhdXRvLXJvd3MiOlsiYXV0byIsIm1pbiIsIm1heCIsImZyIixnZV19XSxnYXA6W3tnYXA6W2ZdfV0sImdhcC14IjpbeyJnYXAteCI6W2ZdfV0sImdhcC15IjpbeyJnYXAteSI6W2ZdfV0sImp1c3RpZnktY29udGVudCI6W3tqdXN0aWZ5Olsibm9ybWFsIiwuLi5FKCldfV0sImp1c3RpZnktaXRlbXMiOlt7Imp1c3RpZnktaXRlbXMiOlsic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJzdHJldGNoIl19XSwianVzdGlmeS1zZWxmIjpbeyJqdXN0aWZ5LXNlbGYiOlsiYXV0byIsInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwic3RyZXRjaCJdfV0sImFsaWduLWNvbnRlbnQiOlt7Y29udGVudDpbIm5vcm1hbCIsLi4uRSgpLCJiYXNlbGluZSJdfV0sImFsaWduLWl0ZW1zIjpbe2l0ZW1zOlsic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJiYXNlbGluZSIsInN0cmV0Y2giXX1dLCJhbGlnbi1zZWxmIjpbe3NlbGY6WyJhdXRvIiwic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJzdHJldGNoIiwiYmFzZWxpbmUiXX1dLCJwbGFjZS1jb250ZW50IjpbeyJwbGFjZS1jb250ZW50IjpbLi4uRSgpLCJiYXNlbGluZSJdfV0sInBsYWNlLWl0ZW1zIjpbeyJwbGFjZS1pdGVtcyI6WyJzdGFydCIsImVuZCIsImNlbnRlciIsImJhc2VsaW5lIiwic3RyZXRjaCJdfV0sInBsYWNlLXNlbGYiOlt7InBsYWNlLXNlbGYiOlsiYXV0byIsInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwic3RyZXRjaCJdfV0scDpbe3A6W3ldfV0scHg6W3tweDpbeV19XSxweTpbe3B5Olt5XX1dLHBzOlt7cHM6W3ldfV0scGU6W3twZTpbeV19XSxwdDpbe3B0Olt5XX1dLHByOlt7cHI6W3ldfV0scGI6W3twYjpbeV19XSxwbDpbe3BsOlt5XX1dLG06W3ttOltfXX1dLG14Olt7bXg6W19dfV0sbXk6W3tteTpbX119XSxtczpbe21zOltfXX1dLG1lOlt7bWU6W19dfV0sbXQ6W3ttdDpbX119XSxtcjpbe21yOltfXX1dLG1iOlt7bWI6W19dfV0sbWw6W3ttbDpbX119XSwic3BhY2UteCI6W3sic3BhY2UteCI6W1RdfV0sInNwYWNlLXgtcmV2ZXJzZSI6WyJzcGFjZS14LXJldmVyc2UiXSwic3BhY2UteSI6W3sic3BhY2UteSI6W1RdfV0sInNwYWNlLXktcmV2ZXJzZSI6WyJzcGFjZS15LXJldmVyc2UiXSx3Olt7dzpbImF1dG8iLCJtaW4iLCJtYXgiLCJmaXQiLGdlLHRdfV0sIm1pbi13IjpbeyJtaW4tdyI6WyJtaW4iLCJtYXgiLCJmaXQiLGdlLFhuXX1dLCJtYXgtdyI6W3sibWF4LXciOlsiMCIsIm5vbmUiLCJmdWxsIiwibWluIiwibWF4IiwiZml0IiwicHJvc2UiLHtzY3JlZW46W2lvXX0saW8sZ2VdfV0saDpbe2g6W2dlLHQsImF1dG8iLCJtaW4iLCJtYXgiLCJmaXQiXX1dLCJtaW4taCI6W3sibWluLWgiOlsibWluIiwibWF4IiwiZml0IixYbixnZV19XSwibWF4LWgiOlt7Im1heC1oIjpbZ2UsdCwibWluIiwibWF4IiwiZml0Il19XSwiZm9udC1zaXplIjpbe3RleHQ6WyJiYXNlIixpbyxvb119XSwiZm9udC1zbW9vdGhpbmciOlsiYW50aWFsaWFzZWQiLCJzdWJwaXhlbC1hbnRpYWxpYXNlZCJdLCJmb250LXN0eWxlIjpbIml0YWxpYyIsIm5vdC1pdGFsaWMiXSwiZm9udC13ZWlnaHQiOlt7Zm9udDpbInRoaW4iLCJleHRyYWxpZ2h0IiwibGlnaHQiLCJub3JtYWwiLCJtZWRpdW0iLCJzZW1pYm9sZCIsImJvbGQiLCJleHRyYWJvbGQiLCJibGFjayIsbXVdfV0sImZvbnQtZmFtaWx5Ijpbe2ZvbnQ6W2ZzXX1dLCJmdm4tbm9ybWFsIjpbIm5vcm1hbC1udW1zIl0sImZ2bi1vcmRpbmFsIjpbIm9yZGluYWwiXSwiZnZuLXNsYXNoZWQtemVybyI6WyJzbGFzaGVkLXplcm8iXSwiZnZuLWZpZ3VyZSI6WyJsaW5pbmctbnVtcyIsIm9sZHN0eWxlLW51bXMiXSwiZnZuLXNwYWNpbmciOlsicHJvcG9ydGlvbmFsLW51bXMiLCJ0YWJ1bGFyLW51bXMiXSwiZnZuLWZyYWN0aW9uIjpbImRpYWdvbmFsLWZyYWN0aW9ucyIsInN0YWNrZWQtZnJhY3RvbnMiXSx0cmFja2luZzpbe3RyYWNraW5nOlsidGlnaHRlciIsInRpZ2h0Iiwibm9ybWFsIiwid2lkZSIsIndpZGVyIiwid2lkZXN0IixnZV19XSwibGluZS1jbGFtcCI6W3sibGluZS1jbGFtcCI6WyJub25lIixuaSxtdV19XSxsZWFkaW5nOlt7bGVhZGluZzpbIm5vbmUiLCJ0aWdodCIsInNudWciLCJub3JtYWwiLCJyZWxheGVkIiwibG9vc2UiLFhuLGdlXX1dLCJsaXN0LWltYWdlIjpbeyJsaXN0LWltYWdlIjpbIm5vbmUiLGdlXX1dLCJsaXN0LXN0eWxlLXR5cGUiOlt7bGlzdDpbIm5vbmUiLCJkaXNjIiwiZGVjaW1hbCIsZ2VdfV0sImxpc3Qtc3R5bGUtcG9zaXRpb24iOlt7bGlzdDpbImluc2lkZSIsIm91dHNpZGUiXX1dLCJwbGFjZWhvbGRlci1jb2xvciI6W3twbGFjZWhvbGRlcjpbZV19XSwicGxhY2Vob2xkZXItb3BhY2l0eSI6W3sicGxhY2Vob2xkZXItb3BhY2l0eSI6W3ZdfV0sInRleHQtYWxpZ25tZW50Ijpbe3RleHQ6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJqdXN0aWZ5Iiwic3RhcnQiLCJlbmQiXX1dLCJ0ZXh0LWNvbG9yIjpbe3RleHQ6W2VdfV0sInRleHQtb3BhY2l0eSI6W3sidGV4dC1vcGFjaXR5Ijpbdl19XSwidGV4dC1kZWNvcmF0aW9uIjpbInVuZGVybGluZSIsIm92ZXJsaW5lIiwibGluZS10aHJvdWdoIiwibm8tdW5kZXJsaW5lIl0sInRleHQtZGVjb3JhdGlvbi1zdHlsZSI6W3tkZWNvcmF0aW9uOlsuLi5DKCksIndhdnkiXX1dLCJ0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzIjpbe2RlY29yYXRpb246WyJhdXRvIiwiZnJvbS1mb250IixYbixvb119XSwidW5kZXJsaW5lLW9mZnNldCI6W3sidW5kZXJsaW5lLW9mZnNldCI6WyJhdXRvIixYbixnZV19XSwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIjpbe2RlY29yYXRpb246W2VdfV0sInRleHQtdHJhbnNmb3JtIjpbInVwcGVyY2FzZSIsImxvd2VyY2FzZSIsImNhcGl0YWxpemUiLCJub3JtYWwtY2FzZSJdLCJ0ZXh0LW92ZXJmbG93IjpbInRydW5jYXRlIiwidGV4dC1lbGxpcHNpcyIsInRleHQtY2xpcCJdLGluZGVudDpbe2luZGVudDpCKCl9XSwidmVydGljYWwtYWxpZ24iOlt7YWxpZ246WyJiYXNlbGluZSIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSIsInRleHQtdG9wIiwidGV4dC1ib3R0b20iLCJzdWIiLCJzdXBlciIsZ2VdfV0sd2hpdGVzcGFjZTpbe3doaXRlc3BhY2U6WyJub3JtYWwiLCJub3dyYXAiLCJwcmUiLCJwcmUtbGluZSIsInByZS13cmFwIiwiYnJlYWstc3BhY2VzIl19XSxicmVhazpbe2JyZWFrOlsibm9ybWFsIiwid29yZHMiLCJhbGwiLCJrZWVwIl19XSxoeXBoZW5zOlt7aHlwaGVuczpbIm5vbmUiLCJtYW51YWwiLCJhdXRvIl19XSxjb250ZW50Olt7Y29udGVudDpbIm5vbmUiLGdlXX1dLCJiZy1hdHRhY2htZW50Ijpbe2JnOlsiZml4ZWQiLCJsb2NhbCIsInNjcm9sbCJdfV0sImJnLWNsaXAiOlt7ImJnLWNsaXAiOlsiYm9yZGVyIiwicGFkZGluZyIsImNvbnRlbnQiLCJ0ZXh0Il19XSwiYmctb3BhY2l0eSI6W3siYmctb3BhY2l0eSI6W3ZdfV0sImJnLW9yaWdpbiI6W3siYmctb3JpZ2luIjpbImJvcmRlciIsInBhZGRpbmciLCJjb250ZW50Il19XSwiYmctcG9zaXRpb24iOlt7Ymc6Wy4uLlkoKSxzTl19XSwiYmctcmVwZWF0Ijpbe2JnOlsibm8tcmVwZWF0Iix7cmVwZWF0OlsiIiwieCIsInkiLCJyb3VuZCIsInNwYWNlIl19XX1dLCJiZy1zaXplIjpbe2JnOlsiYXV0byIsImNvdmVyIiwiY29udGFpbiIsbE5dfV0sImJnLWltYWdlIjpbe2JnOlsibm9uZSIseyJncmFkaWVudC10byI6WyJ0IiwidHIiLCJyIiwiYnIiLCJiIiwiYmwiLCJsIiwidGwiXX0sdU5dfV0sImJnLWNvbG9yIjpbe2JnOltlXX1dLCJncmFkaWVudC1mcm9tLXBvcyI6W3tmcm9tOltnXX1dLCJncmFkaWVudC12aWEtcG9zIjpbe3ZpYTpbZ119XSwiZ3JhZGllbnQtdG8tcG9zIjpbe3RvOltnXX1dLCJncmFkaWVudC1mcm9tIjpbe2Zyb206W2hdfV0sImdyYWRpZW50LXZpYSI6W3t2aWE6W2hdfV0sImdyYWRpZW50LXRvIjpbe3RvOltoXX1dLHJvdW5kZWQ6W3tyb3VuZGVkOltpXX1dLCJyb3VuZGVkLXMiOlt7InJvdW5kZWQtcyI6W2ldfV0sInJvdW5kZWQtZSI6W3sicm91bmRlZC1lIjpbaV19XSwicm91bmRlZC10IjpbeyJyb3VuZGVkLXQiOltpXX1dLCJyb3VuZGVkLXIiOlt7InJvdW5kZWQtciI6W2ldfV0sInJvdW5kZWQtYiI6W3sicm91bmRlZC1iIjpbaV19XSwicm91bmRlZC1sIjpbeyJyb3VuZGVkLWwiOltpXX1dLCJyb3VuZGVkLXNzIjpbeyJyb3VuZGVkLXNzIjpbaV19XSwicm91bmRlZC1zZSI6W3sicm91bmRlZC1zZSI6W2ldfV0sInJvdW5kZWQtZWUiOlt7InJvdW5kZWQtZWUiOltpXX1dLCJyb3VuZGVkLWVzIjpbeyJyb3VuZGVkLWVzIjpbaV19XSwicm91bmRlZC10bCI6W3sicm91bmRlZC10bCI6W2ldfV0sInJvdW5kZWQtdHIiOlt7InJvdW5kZWQtdHIiOltpXX1dLCJyb3VuZGVkLWJyIjpbeyJyb3VuZGVkLWJyIjpbaV19XSwicm91bmRlZC1ibCI6W3sicm91bmRlZC1ibCI6W2ldfV0sImJvcmRlci13Ijpbe2JvcmRlcjpbc119XSwiYm9yZGVyLXcteCI6W3siYm9yZGVyLXgiOltzXX1dLCJib3JkZXItdy15IjpbeyJib3JkZXIteSI6W3NdfV0sImJvcmRlci13LXMiOlt7ImJvcmRlci1zIjpbc119XSwiYm9yZGVyLXctZSI6W3siYm9yZGVyLWUiOltzXX1dLCJib3JkZXItdy10IjpbeyJib3JkZXItdCI6W3NdfV0sImJvcmRlci13LXIiOlt7ImJvcmRlci1yIjpbc119XSwiYm9yZGVyLXctYiI6W3siYm9yZGVyLWIiOltzXX1dLCJib3JkZXItdy1sIjpbeyJib3JkZXItbCI6W3NdfV0sImJvcmRlci1vcGFjaXR5IjpbeyJib3JkZXItb3BhY2l0eSI6W3ZdfV0sImJvcmRlci1zdHlsZSI6W3tib3JkZXI6Wy4uLkMoKSwiaGlkZGVuIl19XSwiZGl2aWRlLXgiOlt7ImRpdmlkZS14Ijpbc119XSwiZGl2aWRlLXgtcmV2ZXJzZSI6WyJkaXZpZGUteC1yZXZlcnNlIl0sImRpdmlkZS15IjpbeyJkaXZpZGUteSI6W3NdfV0sImRpdmlkZS15LXJldmVyc2UiOlsiZGl2aWRlLXktcmV2ZXJzZSJdLCJkaXZpZGUtb3BhY2l0eSI6W3siZGl2aWRlLW9wYWNpdHkiOlt2XX1dLCJkaXZpZGUtc3R5bGUiOlt7ZGl2aWRlOkMoKX1dLCJib3JkZXItY29sb3IiOlt7Ym9yZGVyOltvXX1dLCJib3JkZXItY29sb3IteCI6W3siYm9yZGVyLXgiOltvXX1dLCJib3JkZXItY29sb3IteSI6W3siYm9yZGVyLXkiOltvXX1dLCJib3JkZXItY29sb3ItdCI6W3siYm9yZGVyLXQiOltvXX1dLCJib3JkZXItY29sb3ItciI6W3siYm9yZGVyLXIiOltvXX1dLCJib3JkZXItY29sb3ItYiI6W3siYm9yZGVyLWIiOltvXX1dLCJib3JkZXItY29sb3ItbCI6W3siYm9yZGVyLWwiOltvXX1dLCJkaXZpZGUtY29sb3IiOlt7ZGl2aWRlOltvXX1dLCJvdXRsaW5lLXN0eWxlIjpbe291dGxpbmU6WyIiLC4uLkMoKV19XSwib3V0bGluZS1vZmZzZXQiOlt7Im91dGxpbmUtb2Zmc2V0IjpbWG4sZ2VdfV0sIm91dGxpbmUtdyI6W3tvdXRsaW5lOltYbixvb119XSwib3V0bGluZS1jb2xvciI6W3tvdXRsaW5lOltlXX1dLCJyaW5nLXciOlt7cmluZzpyZSgpfV0sInJpbmctdy1pbnNldCI6WyJyaW5nLWluc2V0Il0sInJpbmctY29sb3IiOlt7cmluZzpbZV19XSwicmluZy1vcGFjaXR5IjpbeyJyaW5nLW9wYWNpdHkiOlt2XX1dLCJyaW5nLW9mZnNldC13IjpbeyJyaW5nLW9mZnNldCI6W1huLG9vXX1dLCJyaW5nLW9mZnNldC1jb2xvciI6W3sicmluZy1vZmZzZXQiOltlXX1dLHNoYWRvdzpbe3NoYWRvdzpbIiIsImlubmVyIiwibm9uZSIsaW8sY05dfV0sInNoYWRvdy1jb2xvciI6W3tzaGFkb3c6W2ZzXX1dLG9wYWNpdHk6W3tvcGFjaXR5Olt2XX1dLCJtaXgtYmxlbmQiOlt7Im1peC1ibGVuZCI6JCgpfV0sImJnLWJsZW5kIjpbeyJiZy1ibGVuZCI6JCgpfV0sZmlsdGVyOlt7ZmlsdGVyOlsiIiwibm9uZSJdfV0sYmx1cjpbe2JsdXI6W25dfV0sYnJpZ2h0bmVzczpbe2JyaWdodG5lc3M6W3JdfV0sY29udHJhc3Q6W3tjb250cmFzdDpbYV19XSwiZHJvcC1zaGFkb3ciOlt7ImRyb3Atc2hhZG93IjpbIiIsIm5vbmUiLGlvLGdlXX1dLGdyYXlzY2FsZTpbe2dyYXlzY2FsZTpbdV19XSwiaHVlLXJvdGF0ZSI6W3siaHVlLXJvdGF0ZSI6W2NdfV0saW52ZXJ0Olt7aW52ZXJ0OltkXX1dLHNhdHVyYXRlOlt7c2F0dXJhdGU6W3hdfV0sc2VwaWE6W3tzZXBpYTpba119XSwiYmFja2Ryb3AtZmlsdGVyIjpbeyJiYWNrZHJvcC1maWx0ZXIiOlsiIiwibm9uZSJdfV0sImJhY2tkcm9wLWJsdXIiOlt7ImJhY2tkcm9wLWJsdXIiOltuXX1dLCJiYWNrZHJvcC1icmlnaHRuZXNzIjpbeyJiYWNrZHJvcC1icmlnaHRuZXNzIjpbcl19XSwiYmFja2Ryb3AtY29udHJhc3QiOlt7ImJhY2tkcm9wLWNvbnRyYXN0IjpbYV19XSwiYmFja2Ryb3AtZ3JheXNjYWxlIjpbeyJiYWNrZHJvcC1ncmF5c2NhbGUiOlt1XX1dLCJiYWNrZHJvcC1odWUtcm90YXRlIjpbeyJiYWNrZHJvcC1odWUtcm90YXRlIjpbY119XSwiYmFja2Ryb3AtaW52ZXJ0IjpbeyJiYWNrZHJvcC1pbnZlcnQiOltkXX1dLCJiYWNrZHJvcC1vcGFjaXR5IjpbeyJiYWNrZHJvcC1vcGFjaXR5Ijpbdl19XSwiYmFja2Ryb3Atc2F0dXJhdGUiOlt7ImJhY2tkcm9wLXNhdHVyYXRlIjpbeF19XSwiYmFja2Ryb3Atc2VwaWEiOlt7ImJhY2tkcm9wLXNlcGlhIjpba119XSwiYm9yZGVyLWNvbGxhcHNlIjpbe2JvcmRlcjpbImNvbGxhcHNlIiwic2VwYXJhdGUiXX1dLCJib3JkZXItc3BhY2luZyI6W3siYm9yZGVyLXNwYWNpbmciOltsXX1dLCJib3JkZXItc3BhY2luZy14IjpbeyJib3JkZXItc3BhY2luZy14IjpbbF19XSwiYm9yZGVyLXNwYWNpbmcteSI6W3siYm9yZGVyLXNwYWNpbmcteSI6W2xdfV0sInRhYmxlLWxheW91dCI6W3t0YWJsZTpbImF1dG8iLCJmaXhlZCJdfV0sY2FwdGlvbjpbe2NhcHRpb246WyJ0b3AiLCJib3R0b20iXX1dLHRyYW5zaXRpb246W3t0cmFuc2l0aW9uOlsibm9uZSIsImFsbCIsIiIsImNvbG9ycyIsIm9wYWNpdHkiLCJzaGFkb3ciLCJ0cmFuc2Zvcm0iLGdlXX1dLGR1cmF0aW9uOlt7ZHVyYXRpb246VigpfV0sZWFzZTpbe2Vhc2U6WyJsaW5lYXIiLCJpbiIsIm91dCIsImluLW91dCIsZ2VdfV0sZGVsYXk6W3tkZWxheTpWKCl9XSxhbmltYXRlOlt7YW5pbWF0ZTpbIm5vbmUiLCJzcGluIiwicGluZyIsInB1bHNlIiwiYm91bmNlIixnZV19XSx0cmFuc2Zvcm06W3t0cmFuc2Zvcm06WyIiLCJncHUiLCJub25lIl19XSxzY2FsZTpbe3NjYWxlOltTXX1dLCJzY2FsZS14IjpbeyJzY2FsZS14IjpbU119XSwic2NhbGUteSI6W3sic2NhbGUteSI6W1NdfV0scm90YXRlOlt7cm90YXRlOltkcyxnZV19XSwidHJhbnNsYXRlLXgiOlt7InRyYW5zbGF0ZS14IjpbTl19XSwidHJhbnNsYXRlLXkiOlt7InRyYW5zbGF0ZS15IjpbTl19XSwic2tldy14IjpbeyJza2V3LXgiOltiXX1dLCJza2V3LXkiOlt7InNrZXcteSI6W2JdfV0sInRyYW5zZm9ybS1vcmlnaW4iOlt7b3JpZ2luOlsiY2VudGVyIiwidG9wIiwidG9wLXJpZ2h0IiwicmlnaHQiLCJib3R0b20tcmlnaHQiLCJib3R0b20iLCJib3R0b20tbGVmdCIsImxlZnQiLCJ0b3AtbGVmdCIsZ2VdfV0sYWNjZW50Olt7YWNjZW50OlsiYXV0byIsZV19XSxhcHBlYXJhbmNlOlsiYXBwZWFyYW5jZS1ub25lIl0sY3Vyc29yOlt7Y3Vyc29yOlsiYXV0byIsImRlZmF1bHQiLCJwb2ludGVyIiwid2FpdCIsInRleHQiLCJtb3ZlIiwiaGVscCIsIm5vdC1hbGxvd2VkIiwibm9uZSIsImNvbnRleHQtbWVudSIsInByb2dyZXNzIiwiY2VsbCIsImNyb3NzaGFpciIsInZlcnRpY2FsLXRleHQiLCJhbGlhcyIsImNvcHkiLCJuby1kcm9wIiwiZ3JhYiIsImdyYWJiaW5nIiwiYWxsLXNjcm9sbCIsImNvbC1yZXNpemUiLCJyb3ctcmVzaXplIiwibi1yZXNpemUiLCJlLXJlc2l6ZSIsInMtcmVzaXplIiwidy1yZXNpemUiLCJuZS1yZXNpemUiLCJudy1yZXNpemUiLCJzZS1yZXNpemUiLCJzdy1yZXNpemUiLCJldy1yZXNpemUiLCJucy1yZXNpemUiLCJuZXN3LXJlc2l6ZSIsIm53c2UtcmVzaXplIiwiem9vbS1pbiIsInpvb20tb3V0IixnZV19XSwiY2FyZXQtY29sb3IiOlt7Y2FyZXQ6W2VdfV0sInBvaW50ZXItZXZlbnRzIjpbeyJwb2ludGVyLWV2ZW50cyI6WyJub25lIiwiYXV0byJdfV0scmVzaXplOlt7cmVzaXplOlsibm9uZSIsInkiLCJ4IiwiIl19XSwic2Nyb2xsLWJlaGF2aW9yIjpbe3Njcm9sbDpbImF1dG8iLCJzbW9vdGgiXX1dLCJzY3JvbGwtbSI6W3sic2Nyb2xsLW0iOkIoKX1dLCJzY3JvbGwtbXgiOlt7InNjcm9sbC1teCI6QigpfV0sInNjcm9sbC1teSI6W3sic2Nyb2xsLW15IjpCKCl9XSwic2Nyb2xsLW1zIjpbeyJzY3JvbGwtbXMiOkIoKX1dLCJzY3JvbGwtbWUiOlt7InNjcm9sbC1tZSI6QigpfV0sInNjcm9sbC1tdCI6W3sic2Nyb2xsLW10IjpCKCl9XSwic2Nyb2xsLW1yIjpbeyJzY3JvbGwtbXIiOkIoKX1dLCJzY3JvbGwtbWIiOlt7InNjcm9sbC1tYiI6QigpfV0sInNjcm9sbC1tbCI6W3sic2Nyb2xsLW1sIjpCKCl9XSwic2Nyb2xsLXAiOlt7InNjcm9sbC1wIjpCKCl9XSwic2Nyb2xsLXB4IjpbeyJzY3JvbGwtcHgiOkIoKX1dLCJzY3JvbGwtcHkiOlt7InNjcm9sbC1weSI6QigpfV0sInNjcm9sbC1wcyI6W3sic2Nyb2xsLXBzIjpCKCl9XSwic2Nyb2xsLXBlIjpbeyJzY3JvbGwtcGUiOkIoKX1dLCJzY3JvbGwtcHQiOlt7InNjcm9sbC1wdCI6QigpfV0sInNjcm9sbC1wciI6W3sic2Nyb2xsLXByIjpCKCl9XSwic2Nyb2xsLXBiIjpbeyJzY3JvbGwtcGIiOkIoKX1dLCJzY3JvbGwtcGwiOlt7InNjcm9sbC1wbCI6QigpfV0sInNuYXAtYWxpZ24iOlt7c25hcDpbInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwiYWxpZ24tbm9uZSJdfV0sInNuYXAtc3RvcCI6W3tzbmFwOlsibm9ybWFsIiwiYWx3YXlzIl19XSwic25hcC10eXBlIjpbe3NuYXA6WyJub25lIiwieCIsInkiLCJib3RoIl19XSwic25hcC1zdHJpY3RuZXNzIjpbe3NuYXA6WyJtYW5kYXRvcnkiLCJwcm94aW1pdHkiXX1dLHRvdWNoOlt7dG91Y2g6WyJhdXRvIiwibm9uZSIsIm1hbmlwdWxhdGlvbiJdfV0sInRvdWNoLXgiOlt7InRvdWNoLXBhbiI6WyJ4IiwibGVmdCIsInJpZ2h0Il19XSwidG91Y2gteSI6W3sidG91Y2gtcGFuIjpbInkiLCJ1cCIsImRvd24iXX1dLCJ0b3VjaC1weiI6WyJ0b3VjaC1waW5jaC16b29tIl0sc2VsZWN0Olt7c2VsZWN0Olsibm9uZSIsInRleHQiLCJhbGwiLCJhdXRvIl19XSwid2lsbC1jaGFuZ2UiOlt7IndpbGwtY2hhbmdlIjpbImF1dG8iLCJzY3JvbGwiLCJjb250ZW50cyIsInRyYW5zZm9ybSIsZ2VdfV0sZmlsbDpbe2ZpbGw6W2UsIm5vbmUiXX1dLCJzdHJva2UtdyI6W3tzdHJva2U6W1huLG9vLG11XX1dLHN0cm9rZTpbe3N0cm9rZTpbZSwibm9uZSJdfV0sc3I6WyJzci1vbmx5Iiwibm90LXNyLW9ubHkiXX0sY29uZmxpY3RpbmdDbGFzc0dyb3Vwczp7b3ZlcmZsb3c6WyJvdmVyZmxvdy14Iiwib3ZlcmZsb3cteSJdLG92ZXJzY3JvbGw6WyJvdmVyc2Nyb2xsLXgiLCJvdmVyc2Nyb2xsLXkiXSxpbnNldDpbImluc2V0LXgiLCJpbnNldC15Iiwic3RhcnQiLCJlbmQiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSwiaW5zZXQteCI6WyJyaWdodCIsImxlZnQiXSwiaW5zZXQteSI6WyJ0b3AiLCJib3R0b20iXSxmbGV4OlsiYmFzaXMiLCJncm93Iiwic2hyaW5rIl0sZ2FwOlsiZ2FwLXgiLCJnYXAteSJdLHA6WyJweCIsInB5IiwicHMiLCJwZSIsInB0IiwicHIiLCJwYiIsInBsIl0scHg6WyJwciIsInBsIl0scHk6WyJwdCIsInBiIl0sbTpbIm14IiwibXkiLCJtcyIsIm1lIiwibXQiLCJtciIsIm1iIiwibWwiXSxteDpbIm1yIiwibWwiXSxteTpbIm10IiwibWIiXSwiZm9udC1zaXplIjpbImxlYWRpbmciXSwiZnZuLW5vcm1hbCI6WyJmdm4tb3JkaW5hbCIsImZ2bi1zbGFzaGVkLXplcm8iLCJmdm4tZmlndXJlIiwiZnZuLXNwYWNpbmciLCJmdm4tZnJhY3Rpb24iXSwiZnZuLW9yZGluYWwiOlsiZnZuLW5vcm1hbCJdLCJmdm4tc2xhc2hlZC16ZXJvIjpbImZ2bi1ub3JtYWwiXSwiZnZuLWZpZ3VyZSI6WyJmdm4tbm9ybWFsIl0sImZ2bi1zcGFjaW5nIjpbImZ2bi1ub3JtYWwiXSwiZnZuLWZyYWN0aW9uIjpbImZ2bi1ub3JtYWwiXSxyb3VuZGVkOlsicm91bmRlZC1zIiwicm91bmRlZC1lIiwicm91bmRlZC10Iiwicm91bmRlZC1yIiwicm91bmRlZC1iIiwicm91bmRlZC1sIiwicm91bmRlZC1zcyIsInJvdW5kZWQtc2UiLCJyb3VuZGVkLWVlIiwicm91bmRlZC1lcyIsInJvdW5kZWQtdGwiLCJyb3VuZGVkLXRyIiwicm91bmRlZC1iciIsInJvdW5kZWQtYmwiXSwicm91bmRlZC1zIjpbInJvdW5kZWQtc3MiLCJyb3VuZGVkLWVzIl0sInJvdW5kZWQtZSI6WyJyb3VuZGVkLXNlIiwicm91bmRlZC1lZSJdLCJyb3VuZGVkLXQiOlsicm91bmRlZC10bCIsInJvdW5kZWQtdHIiXSwicm91bmRlZC1yIjpbInJvdW5kZWQtdHIiLCJyb3VuZGVkLWJyIl0sInJvdW5kZWQtYiI6WyJyb3VuZGVkLWJyIiwicm91bmRlZC1ibCJdLCJyb3VuZGVkLWwiOlsicm91bmRlZC10bCIsInJvdW5kZWQtYmwiXSwiYm9yZGVyLXNwYWNpbmciOlsiYm9yZGVyLXNwYWNpbmcteCIsImJvcmRlci1zcGFjaW5nLXkiXSwiYm9yZGVyLXciOlsiYm9yZGVyLXctcyIsImJvcmRlci13LWUiLCJib3JkZXItdy10IiwiYm9yZGVyLXctciIsImJvcmRlci13LWIiLCJib3JkZXItdy1sIl0sImJvcmRlci13LXgiOlsiYm9yZGVyLXctciIsImJvcmRlci13LWwiXSwiYm9yZGVyLXcteSI6WyJib3JkZXItdy10IiwiYm9yZGVyLXctYiJdLCJib3JkZXItY29sb3IiOlsiYm9yZGVyLWNvbG9yLXQiLCJib3JkZXItY29sb3ItciIsImJvcmRlci1jb2xvci1iIiwiYm9yZGVyLWNvbG9yLWwiXSwiYm9yZGVyLWNvbG9yLXgiOlsiYm9yZGVyLWNvbG9yLXIiLCJib3JkZXItY29sb3ItbCJdLCJib3JkZXItY29sb3IteSI6WyJib3JkZXItY29sb3ItdCIsImJvcmRlci1jb2xvci1iIl0sInNjcm9sbC1tIjpbInNjcm9sbC1teCIsInNjcm9sbC1teSIsInNjcm9sbC1tcyIsInNjcm9sbC1tZSIsInNjcm9sbC1tdCIsInNjcm9sbC1tciIsInNjcm9sbC1tYiIsInNjcm9sbC1tbCJdLCJzY3JvbGwtbXgiOlsic2Nyb2xsLW1yIiwic2Nyb2xsLW1sIl0sInNjcm9sbC1teSI6WyJzY3JvbGwtbXQiLCJzY3JvbGwtbWIiXSwic2Nyb2xsLXAiOlsic2Nyb2xsLXB4Iiwic2Nyb2xsLXB5Iiwic2Nyb2xsLXBzIiwic2Nyb2xsLXBlIiwic2Nyb2xsLXB0Iiwic2Nyb2xsLXByIiwic2Nyb2xsLXBiIiwic2Nyb2xsLXBsIl0sInNjcm9sbC1weCI6WyJzY3JvbGwtcHIiLCJzY3JvbGwtcGwiXSwic2Nyb2xsLXB5IjpbInNjcm9sbC1wdCIsInNjcm9sbC1wYiJdLHRvdWNoOlsidG91Y2gteCIsInRvdWNoLXkiLCJ0b3VjaC1weiJdLCJ0b3VjaC14IjpbInRvdWNoIl0sInRvdWNoLXkiOlsidG91Y2giXSwidG91Y2gtcHoiOlsidG91Y2giXX0sY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzOnsiZm9udC1zaXplIjpbImxlYWRpbmciXX19fWNvbnN0IGdOPUpiKHBOKTtmdW5jdGlvbiBzdCguLi5lKXtyZXR1cm4gZ04oVncoZSkpfWNvbnN0IElzPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGNoaWxkcmVuOnQsLi4ubn0scik9PncuanN4cyhXdyx7cmVmOnIsY2xhc3NOYW1lOnN0KCJyZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW4iLGUpLC4uLm4sY2hpbGRyZW46W3cuanN4KEliLHtjbGFzc05hbWU6ImgtZnVsbCB3LWZ1bGwgcm91bmRlZC1baW5oZXJpdF0iLGNoaWxkcmVuOnR9KSx3LmpzeChRdyx7fSksdy5qc3goamIse30pXX0pKTtJcy5kaXNwbGF5TmFtZT1Xdy5kaXNwbGF5TmFtZTtjb25zdCBRdz1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSxvcmllbnRhdGlvbjp0PSJ2ZXJ0aWNhbCIsLi4ubn0scik9PncuanN4KE13LHtyZWY6cixvcmllbnRhdGlvbjp0LGNsYXNzTmFtZTpzdCgiZmxleCB0b3VjaC1ub25lIHNlbGVjdC1ub25lIHRyYW5zaXRpb24tY29sb3JzIix0PT09InZlcnRpY2FsIiYmImgtZnVsbCB3LTIuNSBib3JkZXItbCBib3JkZXItbC10cmFuc3BhcmVudCBwLVsxcHhdIix0PT09Imhvcml6b250YWwiJiYiaC0yLjUgZmxleC1jb2wgYm9yZGVyLXQgYm9yZGVyLXQtdHJhbnNwYXJlbnQgcC1bMXB4XSIsZSksLi4ubixjaGlsZHJlbjp3LmpzeChQYix7Y2xhc3NOYW1lOnN0KCJyZWxhdGl2ZSByb3VuZGVkLWZ1bGwgYmctYm9yZGVyIix0PT09InZlcnRpY2FsIiYmImZsZXgtMSIpfSl9KSk7UXcuZGlzcGxheU5hbWU9TXcuZGlzcGxheU5hbWU7ZnVuY3Rpb24ganMoe2NoaWxkcmVuOmV9KXtjb25zdCB0PXAudXNlUmVmKG51bGwpLG49cC51c2VSZWYobnVsbCkscj1wLnVzZVJlZighMSksbz1wLnVzZVJlZigwKSxpPXAudXNlUmVmKG51bGwpLGw9cC51c2VSZWYoMCkscz0oKT0+e3IuY3VycmVudD0hMSxpLmN1cnJlbnQ9bnVsbCxvLmN1cnJlbnQ9MCxsLmN1cnJlbnQ9MH0sYT1fPT57Xy5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IHY9aS5jdXJyZW50PT09ImxlZnQiP3Q6bjtpZih2LmN1cnJlbnQmJnIuY3VycmVudCl7Y29uc3QgeT1pLmN1cnJlbnQ9PT0ibGVmdCI/Xy5zY3JlZW5YLW8uY3VycmVudDpvLmN1cnJlbnQtXy5zY3JlZW5YO3YuY3VycmVudC5zdHlsZS53aWR0aD1gJHtNYXRoLm1heChsLmN1cnJlbnQreSwxNTApfXB4YH19LHU9Xz0+dj0+e2lmKHYudGFyZ2V0KXtjb25zdCB4PV89PT0ibGVmdCI/dDpfPT09InJpZ2h0Ij9uOm51bGw7ci5jdXJyZW50PSEwLHgmJnguY3VycmVudCYmKG8uY3VycmVudD12LnNjcmVlblgsaS5jdXJyZW50PV8seC5jdXJyZW50JiYobC5jdXJyZW50PXguY3VycmVudC5vZmZzZXRXaWR0aCkpfX0sW2MsZCxmLGgsZyxtXT1wLkNoaWxkcmVuLnRvQXJyYXkoZSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT4oZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixhKSwoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHMpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsYSl9KSxbXSksdy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaC1zY3JlZW4iLGNoaWxkcmVuOlt3LmpzeHMoImRpdiIse3JlZjp0LGNsYXNzTmFtZToicmVsYXRpdmUgYm9yZGVyLXIgYm9yZGVyLWJvcmRlciIsc3R5bGU6e3dpZHRoOjMwMH0sY2hpbGRyZW46W3cuanN4cyhqcy5Db2x1bW4se2NoaWxkcmVuOltjLHcuanN4KElzLHtzdHlsZTp7aGVpZ2h0OiJjYWxjKDEwMHZoIC0gNTBweCkifSxjaGlsZHJlbjpkfSldfSksdy5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQteS0wIHJpZ2h0LTAgY3Vyc29yLWNvbC1yZXNpemUgdy1bMXB4XSBob3Zlcjp3LVszcHhdIGgtZnVsbCBob3ZlcjpiZy1ib3JkZXIiLG9uTW91c2VEb3duOnUoImxlZnQiKX0pXX0pLHcuanN4KCJkaXYiLHtjbGFzc05hbWU6ZGQoIiIseyJ3LWZ1bGwiOiFnJiYhbX0pLGNoaWxkcmVuOncuanN4cyhqcy5Db2x1bW4se2NoaWxkcmVuOltmLHcuanN4KElzLHtzdHlsZTp7aGVpZ2h0OiJjYWxjKDEwMHZoIC0gNTBweCkifSxjaGlsZHJlbjpofSldfSl9KSxnfHxtJiZ3LmpzeHMoImRpdiIse3JlZjpuLGNsYXNzTmFtZToicmVsYXRpdmUgaC1zY3JlZW4gYm9yZGVyLWwgYm9yZGVyLWJvcmRlciIsc3R5bGU6e3dpZHRoOjMwMH0sY2hpbGRyZW46W3cuanN4cyhqcy5Db2x1bW4se2NoaWxkcmVuOltnLHcuanN4KElzLHtzdHlsZTp7aGVpZ2h0OiJjYWxjKDEwMHZoIC0gNTBweCkifSxjaGlsZHJlbjptfSldfSksdy5qc3goImRpdiIse29uTW91c2VEb3duOnUoInJpZ2h0IiksY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC15LTAgbGVmdC0wIGN1cnNvci1jb2wtcmVzaXplIHctWzFweF0gYmctYm9yZGVyIGhvdmVyOnctWzNweF0gaG92ZXI6YmctYm9yZGVyIn0pXX0pXX0pfWpzLkNvbHVtbj0oe2NoaWxkcmVuOmV9KT0+e2NvbnN0W3Qsbl09cC5DaGlsZHJlbi50b0FycmF5KGUpO3JldHVybiB3LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCIsY2hpbGRyZW46W3cuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGJvcmRlci1iIGJvcmRlci1ib3JkZXIiLGNoaWxkcmVuOnR9KSxuXX0pfTtjb25zdCBtTj0oe2NsYXNzTmFtZTplfSk9PncuanN4cygic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgOSAxMCIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjbGFzc05hbWU6ZSxjaGlsZHJlbjpbdy5qc3hzKCJnIix7Y2xpcFBhdGg6InVybCgjY2xpcDBfMTIyNV8xNjM4KSIsY2hpbGRyZW46W3cuanN4KCJyZWN0Iix7eToiMC41Iix3aWR0aDoiOSIsaGVpZ2h0OiI5In0pLHcuanN4KCJwYXRoIix7ZDoiTTAgN0w4LjUgNSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IifSksdy5qc3goImNpcmNsZSIse2N4OiIzIixjeToiMy41IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IifSldfSksdy5qc3goInJlY3QiLHt4OiIwLjUiLHk6IjEiLHdpZHRoOiI4IixoZWlnaHQ6IjgiLHN0cm9rZToiY3VycmVudENvbG9yIn0pLHcuanN4KCJkZWZzIix7Y2hpbGRyZW46dy5qc3goImNsaXBQYXRoIix7aWQ6ImNsaXAwXzEyMjVfMTYzOCIsY2hpbGRyZW46dy5qc3goInJlY3QiLHt5OiIwLjUiLHdpZHRoOiI5IixoZWlnaHQ6IjkiLGZpbGw6IndoaXRlIn0pfSl9KV19KSxKdz1tTix2Tj0oe2NsYXNzTmFtZTplfSk9PncuanN4cygic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCA5IDEwIixjbGFzc05hbWU6ZSxmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W3cuanN4cygiZyIse2NsaXBQYXRoOiJ1cmwoI2NsaXAwXzEyMjJfMTYxOCkiLGNoaWxkcmVuOlt3LmpzeCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixjbGlwUnVsZToiZXZlbm9kZCIsZDoiTTkgMS41SDBWMC41SDlWMS41WiIsZmlsbDoiY3VycmVudENvbG9yIn0pLHcuanN4KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixkOiJNOSA5LjVIMFY4LjVIOVY5LjVaIixmaWxsOiJjdXJyZW50Q29sb3IifSldfSksdy5qc3goImRlZnMiLHtjaGlsZHJlbjp3LmpzeCgiY2xpcFBhdGgiLHtpZDoiY2xpcDBfMTIyMl8xNjE4IixjaGlsZHJlbjp3LmpzeCgicmVjdCIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLGZpbGw6IndoaXRlIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgwIDAuNSkifSl9KX0pXX0pLHlOPXZOLHhOPSh7Y2xhc3NOYW1lOmV9KT0+dy5qc3goInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgOSAxMCIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNsYXNzTmFtZTplLGNoaWxkcmVuOncuanN4KCJnIix7Y2xpcFBhdGg6InVybCgjY2xpcDBfMTIyOV8xNjI1KSIsY2hpbGRyZW46dy5qc3goInBhdGgiLHtkOiJNMC4wMTQ1NTEzIDAuNUg4Ljk4NTQ1TDkgMy4xODU2OUg4LjU3MDc0QzguNDMwMDcgMi4yMjc2IDguMDI3NDkgMS41Nzk0OCA3LjM2Mjk4IDEuMjQxMzNDNi45ODk0OSAxLjA1NDkxIDYuNDMxNjkgMC45NTMwMzUgNS42ODk1NyAwLjkzNTY5NFY3Ljk0NTgxQzUuNjg5NTcgOC40MzU2OSA1Ljc4NDE2IDguNzYwODQgNS45NzMzMiA4LjkyMTI0QzYuMTY3MzQgOS4wODE2NSA2LjU2NzUgOS4xNjE4NSA3LjE3MzgxIDkuMTYxODVWOS41SDEuODYyNTdWOS4xNjE4NUMyLjQ0NDYyIDkuMTYxODUgMi44MzAyMyA5LjA4MTY1IDMuMDE5NCA4LjkyMTI0QzMuMjEzNDIgOC43NTY1IDMuMzEwNDMgOC40MzEzNiAzLjMxMDQzIDcuOTQ1ODFWMC45MzU2OTRDMi41ODI4NiAwLjk1MzAzNSAyLjAyNTA2IDEuMDU0OTEgMS42MzcwMyAxLjI0MTMzQzAuOTI0MDEgMS41ODgxNSAwLjUyMTQyMyAyLjIzNjI3IDAuNDI5MjY0IDMuMTg1NjlIMEwwLjAxNDU1MTMgMC41WiJ9KX0pfSksd049eE47ZnVuY3Rpb24gWncoe2NoaWxkcmVuOmUscm9vdFBhdGg6dH0pe3JldHVybiB3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIHctZnVsbCBweS0yIHRleHQteHMiLGNoaWxkcmVuOnAuQ2hpbGRyZW4ubWFwKGUsbj0+cC5jbG9uZUVsZW1lbnQobix7cGF0aHM6W3RdfSkpfSl9WncuTm9kZT0oe2NoaWxkcmVuOmUscGF0aHM6dD1bXSxwYXRoOm4sbGV2ZWw6cj0xLHR5cGU6byxzZXRBY3RpdmVQYXRoOml9KT0+e2NvbnN0IGw9ciozMCxzPW89PT0ic3RyaW5nIj93LmpzeCh3Tix7fSk6bz09PSJpbWFnZSI/dy5qc3goSncse2NsYXNzTmFtZToiaC1bOXB4XSB3LVs5cHhdIn0pOncuanN4KHlOLHt9KTtyZXR1cm4gdy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InctZnVsbCIsY2hpbGRyZW46W3cuanN4KCJidXR0b24iLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1iZXR3ZWVuIHctZnVsbCBncm91cCBweS0yIHRleHQteHMgZm9udC1bNDAwXSBzaHJpbmstMCIsb25DbGljazooKT0+e2kmJmkobil9LHN0eWxlOntwYWRkaW5nTGVmdDpsfSxjaGlsZHJlbjp3LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOltzLHcuanN4KCJwIix7Y2hpbGRyZW46bn0pXX0pfSksZSYmdy5qc3gody5GcmFnbWVudCx7Y2hpbGRyZW46cC5DaGlsZHJlbi5tYXAoZSxhPT5wLmNsb25lRWxlbWVudChhLHtsZXZlbDpyKzEscGF0aHM6Wy4uLnQsbl19KSl9KV19KX07ZnVuY3Rpb24gRmcoKXtyZXR1cm57YXN5bmM6ITEsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaG9va3M6bnVsbCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNpbGVudDohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGx9fWxldCBUaT1GZygpO2Z1bmN0aW9uIHF3KGUpe1RpPWV9Y29uc3QgZV89L1smPD4iJ10vLF9OPW5ldyBSZWdFeHAoZV8uc291cmNlLCJnIiksdF89L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLFNOPW5ldyBSZWdFeHAodF8uc291cmNlLCJnIiksRU49eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9LGd5PWU9PkVOW2VdO2Z1bmN0aW9uIF9uKGUsdCl7aWYodCl7aWYoZV8udGVzdChlKSlyZXR1cm4gZS5yZXBsYWNlKF9OLGd5KX1lbHNlIGlmKHRfLnRlc3QoZSkpcmV0dXJuIGUucmVwbGFjZShTTixneSk7cmV0dXJuIGV9Y29uc3QgQ049LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vaWc7ZnVuY3Rpb24gJE4oZSl7cmV0dXJuIGUucmVwbGFjZShDTiwodCxuKT0+KG49bi50b0xvd2VyQ2FzZSgpLG49PT0iY29sb24iPyI6IjpuLmNoYXJBdCgwKT09PSIjIj9uLmNoYXJBdCgxKT09PSJ4Ij9TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG4uc3Vic3RyaW5nKDIpLDE2KSk6U3RyaW5nLmZyb21DaGFyQ29kZSgrbi5zdWJzdHJpbmcoMSkpOiIiKSl9Y29uc3Qga049LyhefFteXFtdKVxeL2c7ZnVuY3Rpb24gT2UoZSx0KXtlPXR5cGVvZiBlPT0ic3RyaW5nIj9lOmUuc291cmNlLHQ9dHx8IiI7Y29uc3Qgbj17cmVwbGFjZToocixvKT0+KG89dHlwZW9mIG89PSJvYmplY3QiJiYic291cmNlImluIG8/by5zb3VyY2U6byxvPW8ucmVwbGFjZShrTiwiJDEiKSxlPWUucmVwbGFjZShyLG8pLG4pLGdldFJlZ2V4OigpPT5uZXcgUmVnRXhwKGUsdCl9O3JldHVybiBufWZ1bmN0aW9uIG15KGUpe3RyeXtlPWVuY29kZVVSSShlKS5yZXBsYWNlKC8lMjUvZywiJSIpfWNhdGNoe3JldHVybiBudWxsfXJldHVybiBlfWNvbnN0IFNjPXtleGVjOigpPT5udWxsfTtmdW5jdGlvbiB2eShlLHQpe2NvbnN0IG49ZS5yZXBsYWNlKC9cfC9nLChpLGwscyk9PntsZXQgYT0hMSx1PWw7Zm9yKDstLXU+PTAmJnNbdV09PT0iXFwiOylhPSFhO3JldHVybiBhPyJ8IjoiIHwifSkscj1uLnNwbGl0KC8gXHwvKTtsZXQgbz0wO2lmKHJbMF0udHJpbSgpfHxyLnNoaWZ0KCksci5sZW5ndGg+MCYmIXJbci5sZW5ndGgtMV0udHJpbSgpJiZyLnBvcCgpLHQpaWYoci5sZW5ndGg+dClyLnNwbGljZSh0KTtlbHNlIGZvcig7ci5sZW5ndGg8dDspci5wdXNoKCIiKTtmb3IoO288ci5sZW5ndGg7bysrKXJbb109cltvXS50cmltKCkucmVwbGFjZSgvXFxcfC9nLCJ8Iik7cmV0dXJuIHJ9ZnVuY3Rpb24gdnUoZSx0LG4pe2NvbnN0IHI9ZS5sZW5ndGg7aWYocj09PTApcmV0dXJuIiI7bGV0IG89MDtmb3IoO288cjspe2NvbnN0IGk9ZS5jaGFyQXQoci1vLTEpO2lmKGk9PT10JiYhbilvKys7ZWxzZSBpZihpIT09dCYmbilvKys7ZWxzZSBicmVha31yZXR1cm4gZS5zbGljZSgwLHItbyl9ZnVuY3Rpb24gVE4oZSx0KXtpZihlLmluZGV4T2YodFsxXSk9PT0tMSlyZXR1cm4tMTtsZXQgbj0wO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl09PT0iXFwiKXIrKztlbHNlIGlmKGVbcl09PT10WzBdKW4rKztlbHNlIGlmKGVbcl09PT10WzFdJiYobi0tLG48MCkpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24geXkoZSx0LG4scil7Y29uc3Qgbz10LmhyZWYsaT10LnRpdGxlP19uKHQudGl0bGUpOm51bGwsbD1lWzFdLnJlcGxhY2UoL1xcKFtcW1xdXSkvZywiJDEiKTtpZihlWzBdLmNoYXJBdCgwKSE9PSIhIil7ci5zdGF0ZS5pbkxpbms9ITA7Y29uc3Qgcz17dHlwZToibGluayIscmF3Om4saHJlZjpvLHRpdGxlOmksdGV4dDpsLHRva2VuczpyLmlubGluZVRva2VucyhsKX07cmV0dXJuIHIuc3RhdGUuaW5MaW5rPSExLHN9cmV0dXJue3R5cGU6ImltYWdlIixyYXc6bixocmVmOm8sdGl0bGU6aSx0ZXh0Ol9uKGwpfX1mdW5jdGlvbiBiTihlLHQpe2NvbnN0IG49ZS5tYXRjaCgvXihccyspKD86YGBgKS8pO2lmKG49PT1udWxsKXJldHVybiB0O2NvbnN0IHI9blsxXTtyZXR1cm4gdC5zcGxpdChgCmApLm1hcChvPT57Y29uc3QgaT1vLm1hdGNoKC9eXHMrLyk7aWYoaT09PW51bGwpcmV0dXJuIG87Y29uc3RbbF09aTtyZXR1cm4gbC5sZW5ndGg+PXIubGVuZ3RoP28uc2xpY2Uoci5sZW5ndGgpOm99KS5qb2luKGAKYCl9Y2xhc3MgRWN7Y29uc3RydWN0b3IodCl7QmUodGhpcywib3B0aW9ucyIpO0JlKHRoaXMsInJ1bGVzIik7QmUodGhpcywibGV4ZXIiKTt0aGlzLm9wdGlvbnM9dHx8VGl9c3BhY2UodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUuZXhlYyh0KTtpZihuJiZuWzBdLmxlbmd0aD4wKXJldHVybnt0eXBlOiJzcGFjZSIscmF3Om5bMF19fWNvZGUodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyh0KTtpZihuKXtjb25zdCByPW5bMF0ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpuWzBdLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/cjp2dShyLGAKYCl9fX1mZW5jZXModCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKHQpO2lmKG4pe2NvbnN0IHI9blswXSxvPWJOKHIsblszXXx8IiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6cixsYW5nOm5bMl0/blsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKTpuWzJdLHRleHQ6b319fWhlYWRpbmcodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLmhlYWRpbmcuZXhlYyh0KTtpZihuKXtsZXQgcj1uWzJdLnRyaW0oKTtpZigvIyQvLnRlc3Qocikpe2NvbnN0IG89dnUociwiIyIpOyh0aGlzLm9wdGlvbnMucGVkYW50aWN8fCFvfHwvICQvLnRlc3QobykpJiYocj1vLnRyaW0oKSl9cmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzpuWzBdLGRlcHRoOm5bMV0ubGVuZ3RoLHRleHQ6cix0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUocil9fX1ocih0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyh0KTtpZihuKXJldHVybnt0eXBlOiJociIscmF3Om5bMF19fWJsb2NrcXVvdGUodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyh0KTtpZihuKXtjb25zdCByPXZ1KG5bMF0ucmVwbGFjZSgvXiAqPlsgXHRdPy9nbSwiIiksYApgKSxvPXRoaXMubGV4ZXIuc3RhdGUudG9wO3RoaXMubGV4ZXIuc3RhdGUudG9wPSEwO2NvbnN0IGk9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhyKTtyZXR1cm4gdGhpcy5sZXhlci5zdGF0ZS50b3A9byx7dHlwZToiYmxvY2txdW90ZSIscmF3Om5bMF0sdG9rZW5zOmksdGV4dDpyfX19bGlzdCh0KXtsZXQgbj10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyh0KTtpZihuKXtsZXQgcj1uWzFdLnRyaW0oKTtjb25zdCBvPXIubGVuZ3RoPjEsaT17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6byxzdGFydDpvPytyLnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfTtyPW8/YFxcZHsxLDl9XFwke3Iuc2xpY2UoLTEpfWA6YFxcJHtyfWAsdGhpcy5vcHRpb25zLnBlZGFudGljJiYocj1vP3I6IlsqKy1dIik7Y29uc3QgbD1uZXcgUmVnRXhwKGBeKCB7MCwzfSR7cn0pKCg/OlsJIF1bXlxcbl0qKT8oPzpcXG58JCkpYCk7bGV0IHM9IiIsYT0iIix1PSExO2Zvcig7dDspe2xldCBjPSExO2lmKCEobj1sLmV4ZWModCkpfHx0aGlzLnJ1bGVzLmJsb2NrLmhyLnRlc3QodCkpYnJlYWs7cz1uWzBdLHQ9dC5zdWJzdHJpbmcocy5sZW5ndGgpO2xldCBkPW5bMl0uc3BsaXQoYApgLDEpWzBdLnJlcGxhY2UoL15cdCsvLHY9PiIgIi5yZXBlYXQoMyp2Lmxlbmd0aCkpLGY9dC5zcGxpdChgCmAsMSlbMF0saD0wO3RoaXMub3B0aW9ucy5wZWRhbnRpYz8oaD0yLGE9ZC50cmltU3RhcnQoKSk6KGg9blsyXS5zZWFyY2goL1teIF0vKSxoPWg+ND8xOmgsYT1kLnNsaWNlKGgpLGgrPW5bMV0ubGVuZ3RoKTtsZXQgZz0hMTtpZighZCYmL14gKiQvLnRlc3QoZikmJihzKz1mK2AKYCx0PXQuc3Vic3RyaW5nKGYubGVuZ3RoKzEpLGM9ITApLCFjKXtjb25zdCB2PW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGgtMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyAJXVteXFxuXSopPyg/OlxcbnwkKSlgKSx5PW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGgtMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JClgKSx4PW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGgtMSl9fSg/OlxgXGBcYHx+fn4pYCksUz1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxoLTEpfX0jYCk7Zm9yKDt0Oyl7Y29uc3Qgaz10LnNwbGl0KGAKYCwxKVswXTtpZihmPWssdGhpcy5vcHRpb25zLnBlZGFudGljJiYoZj1mLnJlcGxhY2UoL14gezEsNH0oPz0oIHs0fSkqW14gXSkvZywiICAiKSkseC50ZXN0KGYpfHxTLnRlc3QoZil8fHYudGVzdChmKXx8eS50ZXN0KHQpKWJyZWFrO2lmKGYuc2VhcmNoKC9bXiBdLyk+PWh8fCFmLnRyaW0oKSlhKz1gCmArZi5zbGljZShoKTtlbHNle2lmKGd8fGQuc2VhcmNoKC9bXiBdLyk+PTR8fHgudGVzdChkKXx8Uy50ZXN0KGQpfHx5LnRlc3QoZCkpYnJlYWs7YSs9YApgK2Z9IWcmJiFmLnRyaW0oKSYmKGc9ITApLHMrPWsrYApgLHQ9dC5zdWJzdHJpbmcoay5sZW5ndGgrMSksZD1mLnNsaWNlKGgpfX1pLmxvb3NlfHwodT9pLmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QocykmJih1PSEwKSk7bGV0IG09bnVsbCxfO3RoaXMub3B0aW9ucy5nZm0mJihtPS9eXFtbIHhYXVxdIC8uZXhlYyhhKSxtJiYoXz1tWzBdIT09IlsgXSAiLGE9YS5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSkpLGkuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6cyx0YXNrOiEhbSxjaGVja2VkOl8sbG9vc2U6ITEsdGV4dDphLHRva2VuczpbXX0pLGkucmF3Kz1zfWkuaXRlbXNbaS5pdGVtcy5sZW5ndGgtMV0ucmF3PXMudHJpbUVuZCgpLGkuaXRlbXNbaS5pdGVtcy5sZW5ndGgtMV0udGV4dD1hLnRyaW1FbmQoKSxpLnJhdz1pLnJhdy50cmltRW5kKCk7Zm9yKGxldCBjPTA7YzxpLml0ZW1zLmxlbmd0aDtjKyspaWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsaS5pdGVtc1tjXS50b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhpLml0ZW1zW2NdLnRleHQsW10pLCFpLmxvb3NlKXtjb25zdCBkPWkuaXRlbXNbY10udG9rZW5zLmZpbHRlcihoPT5oLnR5cGU9PT0ic3BhY2UiKSxmPWQubGVuZ3RoPjAmJmQuc29tZShoPT4vXG4uKlxuLy50ZXN0KGgucmF3KSk7aS5sb29zZT1mfWlmKGkubG9vc2UpZm9yKGxldCBjPTA7YzxpLml0ZW1zLmxlbmd0aDtjKyspaS5pdGVtc1tjXS5sb29zZT0hMDtyZXR1cm4gaX19aHRtbCh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKHQpO2lmKG4pcmV0dXJue3R5cGU6Imh0bWwiLGJsb2NrOiEwLHJhdzpuWzBdLHByZTpuWzFdPT09InByZSJ8fG5bMV09PT0ic2NyaXB0Inx8blsxXT09PSJzdHlsZSIsdGV4dDpuWzBdfX1kZWYodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKHQpO2lmKG4pe2NvbnN0IHI9blsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksbz1uWzJdP25bMl0ucmVwbGFjZSgvXjwoLiopPiQvLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6IiIsaT1uWzNdP25bM10uc3Vic3RyaW5nKDEsblszXS5sZW5ndGgtMSkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKTpuWzNdO3JldHVybnt0eXBlOiJkZWYiLHRhZzpyLHJhdzpuWzBdLGhyZWY6byx0aXRsZTppfX19dGFibGUodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWModCk7aWYobil7aWYoIS9bOnxdLy50ZXN0KG5bMl0pKXJldHVybjtjb25zdCByPXt0eXBlOiJ0YWJsZSIscmF3Om5bMF0saGVhZGVyOnZ5KG5bMV0pLm1hcChvPT4oe3RleHQ6byx0b2tlbnM6W119KSksYWxpZ246blsyXS5yZXBsYWNlKC9eXHx8XHwgKiQvZywiIikuc3BsaXQoInwiKSxyb3dzOm5bM10mJm5bM10udHJpbSgpP25bM10ucmVwbGFjZSgvXG5bIFx0XSokLywiIikuc3BsaXQoYApgKTpbXX07aWYoci5oZWFkZXIubGVuZ3RoPT09ci5hbGlnbi5sZW5ndGgpe2xldCBvPXIuYWxpZ24ubGVuZ3RoLGksbCxzLGE7Zm9yKGk9MDtpPG87aSsrKXtjb25zdCB1PXIuYWxpZ25baV07dSYmKC9eICotKzogKiQvLnRlc3QodSk/ci5hbGlnbltpXT0icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KHUpP3IuYWxpZ25baV09ImNlbnRlciI6L14gKjotKyAqJC8udGVzdCh1KT9yLmFsaWduW2ldPSJsZWZ0IjpyLmFsaWduW2ldPW51bGwpfWZvcihvPXIucm93cy5sZW5ndGgsaT0wO2k8bztpKyspci5yb3dzW2ldPXZ5KHIucm93c1tpXSxyLmhlYWRlci5sZW5ndGgpLm1hcCh1PT4oe3RleHQ6dSx0b2tlbnM6W119KSk7Zm9yKG89ci5oZWFkZXIubGVuZ3RoLGw9MDtsPG87bCsrKXIuaGVhZGVyW2xdLnRva2Vucz10aGlzLmxleGVyLmlubGluZShyLmhlYWRlcltsXS50ZXh0KTtmb3Iobz1yLnJvd3MubGVuZ3RoLGw9MDtsPG87bCsrKWZvcihhPXIucm93c1tsXSxzPTA7czxhLmxlbmd0aDtzKyspYVtzXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoYVtzXS50ZXh0KTtyZXR1cm4gcn19fWxoZWFkaW5nKHQpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5saGVhZGluZy5leGVjKHQpO2lmKG4pcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzpuWzBdLGRlcHRoOm5bMl0uY2hhckF0KDApPT09Ij0iPzE6Mix0ZXh0Om5bMV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG5bMV0pfX1wYXJhZ3JhcGgodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKHQpO2lmKG4pe2NvbnN0IHI9blsxXS5jaGFyQXQoblsxXS5sZW5ndGgtMSk9PT1gCmA/blsxXS5zbGljZSgwLC0xKTpuWzFdO3JldHVybnt0eXBlOiJwYXJhZ3JhcGgiLHJhdzpuWzBdLHRleHQ6cix0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUocil9fX10ZXh0KHQpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay50ZXh0LmV4ZWModCk7aWYobilyZXR1cm57dHlwZToidGV4dCIscmF3Om5bMF0sdGV4dDpuWzBdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShuWzBdKX19ZXNjYXBlKHQpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUuZXNjYXBlLmV4ZWModCk7aWYobilyZXR1cm57dHlwZToiZXNjYXBlIixyYXc6blswXSx0ZXh0Ol9uKG5bMV0pfX10YWcodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS50YWcuZXhlYyh0KTtpZihuKXJldHVybiF0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148YSAvaS50ZXN0KG5bMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxcL2E+L2kudGVzdChuWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSExKSwhdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KG5bMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePFwvKHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChuWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6Imh0bWwiLHJhdzpuWzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayxibG9jazohMSx0ZXh0Om5bMF19fWxpbmsodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWModCk7aWYobil7Y29uc3Qgcj1uWzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3Qocikpe2lmKCEvPiQvLnRlc3QocikpcmV0dXJuO2NvbnN0IGw9dnUoci5zbGljZSgwLC0xKSwiXFwiKTtpZigoci5sZW5ndGgtbC5sZW5ndGgpJTI9PT0wKXJldHVybn1lbHNle2NvbnN0IGw9VE4oblsyXSwiKCkiKTtpZihsPi0xKXtjb25zdCBhPShuWzBdLmluZGV4T2YoIiEiKT09PTA/NTo0KStuWzFdLmxlbmd0aCtsO25bMl09blsyXS5zdWJzdHJpbmcoMCxsKSxuWzBdPW5bMF0uc3Vic3RyaW5nKDAsYSkudHJpbSgpLG5bM109IiJ9fWxldCBvPW5bMl0saT0iIjtpZih0aGlzLm9wdGlvbnMucGVkYW50aWMpe2NvbnN0IGw9L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLy5leGVjKG8pO2wmJihvPWxbMV0saT1sWzNdKX1lbHNlIGk9blszXT9uWzNdLnNsaWNlKDEsLTEpOiIiO3JldHVybiBvPW8udHJpbSgpLC9ePC8udGVzdChvKSYmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmIS8+JC8udGVzdChyKT9vPW8uc2xpY2UoMSk6bz1vLnNsaWNlKDEsLTEpKSx5eShuLHtocmVmOm8mJm8ucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0aXRsZTppJiZpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIil9LG5bMF0sdGhpcy5sZXhlcil9fXJlZmxpbmsodCxuKXtsZXQgcjtpZigocj10aGlzLnJ1bGVzLmlubGluZS5yZWZsaW5rLmV4ZWModCkpfHwocj10aGlzLnJ1bGVzLmlubGluZS5ub2xpbmsuZXhlYyh0KSkpe2xldCBvPShyWzJdfHxyWzFdKS5yZXBsYWNlKC9ccysvZywiICIpO2lmKG89bltvLnRvTG93ZXJDYXNlKCldLCFvKXtjb25zdCBpPXJbMF0uY2hhckF0KDApO3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6aSx0ZXh0Oml9fXJldHVybiB5eShyLG8sclswXSx0aGlzLmxleGVyKX19ZW1TdHJvbmcodCxuLHI9IiIpe2xldCBvPXRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLmxEZWxpbS5leGVjKHQpO2lmKCFvfHxvWzNdJiZyLm1hdGNoKC9bXHB7TH1ccHtOfV0vdSkpcmV0dXJuO2lmKCEob1sxXXx8b1syXXx8IiIpfHwhcnx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhyKSl7Y29uc3QgbD1bLi4ub1swXV0ubGVuZ3RoLTE7bGV0IHMsYSx1PWwsYz0wO2NvbnN0IGQ9b1swXVswXT09PSIqIj90aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltVW5kO2ZvcihkLmxhc3RJbmRleD0wLG49bi5zbGljZSgtMSp0Lmxlbmd0aCtsKTsobz1kLmV4ZWMobikpIT1udWxsOyl7aWYocz1vWzFdfHxvWzJdfHxvWzNdfHxvWzRdfHxvWzVdfHxvWzZdLCFzKWNvbnRpbnVlO2lmKGE9Wy4uLnNdLmxlbmd0aCxvWzNdfHxvWzRdKXt1Kz1hO2NvbnRpbnVlfWVsc2UgaWYoKG9bNV18fG9bNl0pJiZsJTMmJiEoKGwrYSklMykpe2MrPWE7Y29udGludWV9aWYodS09YSx1PjApY29udGludWU7YT1NYXRoLm1pbihhLGErdStjKTtjb25zdCBmPVsuLi5vWzBdXVswXS5sZW5ndGgsaD10LnNsaWNlKDAsbCtvLmluZGV4K2YrYSk7aWYoTWF0aC5taW4obCxhKSUyKXtjb25zdCBtPWguc2xpY2UoMSwtMSk7cmV0dXJue3R5cGU6ImVtIixyYXc6aCx0ZXh0Om0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKG0pfX1jb25zdCBnPWguc2xpY2UoMiwtMik7cmV0dXJue3R5cGU6InN0cm9uZyIscmF3OmgsdGV4dDpnLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhnKX19fX1jb2Rlc3Bhbih0KXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyh0KTtpZihuKXtsZXQgcj1uWzJdLnJlcGxhY2UoL1xuL2csIiAiKTtjb25zdCBvPS9bXiBdLy50ZXN0KHIpLGk9L14gLy50ZXN0KHIpJiYvICQvLnRlc3Qocik7cmV0dXJuIG8mJmkmJihyPXIuc3Vic3RyaW5nKDEsci5sZW5ndGgtMSkpLHI9X24ociwhMCkse3R5cGU6ImNvZGVzcGFuIixyYXc6blswXSx0ZXh0OnJ9fX1icih0KXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLmJyLmV4ZWModCk7aWYobilyZXR1cm57dHlwZToiYnIiLHJhdzpuWzBdfX1kZWwodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyh0KTtpZihuKXJldHVybnt0eXBlOiJkZWwiLHJhdzpuWzBdLHRleHQ6blsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoblsyXSl9fWF1dG9saW5rKHQpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyh0KTtpZihuKXtsZXQgcixvO3JldHVybiBuWzJdPT09IkAiPyhyPV9uKG5bMV0pLG89Im1haWx0bzoiK3IpOihyPV9uKG5bMV0pLG89cikse3R5cGU6ImxpbmsiLHJhdzpuWzBdLHRleHQ6cixocmVmOm8sdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OnIsdGV4dDpyfV19fX11cmwodCl7bGV0IG47aWYobj10aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyh0KSl7bGV0IHIsbztpZihuWzJdPT09IkAiKXI9X24oblswXSksbz0ibWFpbHRvOiIrcjtlbHNle2xldCBpO2RvIGk9blswXSxuWzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyhuWzBdKVswXTt3aGlsZShpIT09blswXSk7cj1fbihuWzBdKSxuWzFdPT09Ind3dy4iP289Imh0dHA6Ly8iK25bMF06bz1uWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6blswXSx0ZXh0OnIsaHJlZjpvLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpyLHRleHQ6cn1dfX19aW5saW5lVGV4dCh0KXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyh0KTtpZihuKXtsZXQgcjtyZXR1cm4gdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3I9blswXTpyPV9uKG5bMF0pLHt0eXBlOiJ0ZXh0IixyYXc6blswXSx0ZXh0OnJ9fX19Y29uc3Qgc2U9e25ld2xpbmU6L14oPzogKig/OlxufCQpKSsvLGNvZGU6L14oIHs0fVteXG5dKyg/OlxuKD86ICooPzpcbnwkKSkqKT8pKy8sZmVuY2VzOi9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+ezMsfSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8saHI6L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8saGVhZGluZzovXiB7MCwzfSgjezEsNn0pKD89XHN8JCkoLiopKD86XG4rfCQpLyxibG9ja3F1b3RlOi9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cbl0qKSg/OlxufCQpKSsvLGxpc3Q6L14oIHswLDN9YnVsbCkoWyBcdF1bXlxuXSs/KT8oPzpcbnwkKS8saHRtbDoiXiB7MCwzfSg/Ojwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbXFxzPl1bXFxzXFxTXSo/KD86PC9cXDE+W15cXG5dKlxcbit8JCl8Y29tbWVudFteXFxuXSooXFxuK3wkKXw8XFw/W1xcc1xcU10qPyg/OlxcPz5cXG4qfCQpfDwhW0EtWl1bXFxzXFxTXSo/KD86Plxcbip8JCl8PCFcXFtDREFUQVxcW1tcXHNcXFNdKj8oPzpcXF1cXF0+XFxuKnwkKXw8Lz8odGFnKSg/OiArfFxcbnwvPz4pW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcdy1dKlxccyo+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKSkiLGRlZjovXiB7MCwzfVxbKGxhYmVsKVxdOiAqKD86XG4gKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzogKyg/OlxuICopP3wgKlxuICopKHRpdGxlKSk/ICooPzpcbit8JCkvLHRhYmxlOlNjLGxoZWFkaW5nOi9eKD8hYnVsbCApKCg/Oi58XG4oPyFccyo/XG58YnVsbCApKSs/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxfcGFyYWdyYXBoOi9eKFteXG5dKyg/OlxuKD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9ja3F1b3RlfGZlbmNlc3xsaXN0fGh0bWx8dGFibGV8ICtcbilbXlxuXSspKikvLHRleHQ6L15bXlxuXSsvfTtzZS5fbGFiZWw9Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy87c2UuX3RpdGxlPS8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvO3NlLmRlZj1PZShzZS5kZWYpLnJlcGxhY2UoImxhYmVsIixzZS5fbGFiZWwpLnJlcGxhY2UoInRpdGxlIixzZS5fdGl0bGUpLmdldFJlZ2V4KCk7c2UuYnVsbGV0PS8oPzpbKistXXxcZHsxLDl9Wy4pXSkvO3NlLmxpc3RJdGVtU3RhcnQ9T2UoL14oICopKGJ1bGwpICovKS5yZXBsYWNlKCJidWxsIixzZS5idWxsZXQpLmdldFJlZ2V4KCk7c2UubGlzdD1PZShzZS5saXN0KS5yZXBsYWNlKC9idWxsL2csc2UuYnVsbGV0KS5yZXBsYWNlKCJociIsIlxcbisoPz1cXDE/KD86KD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpKSIpLnJlcGxhY2UoImRlZiIsIlxcbisoPz0iK3NlLmRlZi5zb3VyY2UrIikiKS5nZXRSZWdleCgpO3NlLl90YWc9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiO3NlLl9jb21tZW50PS88IS0tKD8hLT8+KVtcc1xTXSo/KD86LS0+fCQpLztzZS5odG1sPU9lKHNlLmh0bWwsImkiKS5yZXBsYWNlKCJjb21tZW50IixzZS5fY29tbWVudCkucmVwbGFjZSgidGFnIixzZS5fdGFnKS5yZXBsYWNlKCJhdHRyaWJ1dGUiLC8gK1thLXpBLVo6X11bXHcuOi1dKig/OiAqPSAqIlteIlxuXSoifCAqPSAqJ1teJ1xuXSonfCAqPSAqW15ccyInPTw+YF0rKT8vKS5nZXRSZWdleCgpO3NlLmxoZWFkaW5nPU9lKHNlLmxoZWFkaW5nKS5yZXBsYWNlKC9idWxsL2csc2UuYnVsbGV0KS5nZXRSZWdleCgpO3NlLnBhcmFncmFwaD1PZShzZS5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsc2UuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsc2UuX3RhZykuZ2V0UmVnZXgoKTtzZS5ibG9ja3F1b3RlPU9lKHNlLmJsb2NrcXVvdGUpLnJlcGxhY2UoInBhcmFncmFwaCIsc2UucGFyYWdyYXBoKS5nZXRSZWdleCgpO3NlLm5vcm1hbD17Li4uc2V9O3NlLmdmbT17Li4uc2Uubm9ybWFsLHRhYmxlOiJeICooW15cXG4gXS4qKVxcbiB7MCwzfSgoPzpcXHwgKik/Oj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSooPzpcXHwgKik/KSg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4qKD86XFxufCQpKSopXFxuKnwkKSJ9O3NlLmdmbS50YWJsZT1PZShzZS5nZm0udGFibGUpLnJlcGxhY2UoImhyIixzZS5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLHNlLl90YWcpLmdldFJlZ2V4KCk7c2UuZ2ZtLnBhcmFncmFwaD1PZShzZS5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsc2UuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIsc2UuZ2ZtLnRhYmxlKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsc2UuX3RhZykuZ2V0UmVnZXgoKTtzZS5wZWRhbnRpYz17Li4uc2Uubm9ybWFsLGh0bWw6T2UoYF4gKig/OmNvbW1lbnQgKig/OlxcbnxcXHMqJCl8PCh0YWcpW1xcc1xcU10rPzwvXFwxPiAqKD86XFxuezIsfXxcXHMqJCl8PHRhZyg/OiJbXiJdKiJ8J1teJ10qJ3xcXHNbXiciLz5cXHNdKikqPy8/PiAqKD86XFxuezIsfXxcXHMqJCkpYCkucmVwbGFjZSgiY29tbWVudCIsc2UuX2NvbW1lbnQpLnJlcGxhY2UoL3RhZy9nLCIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITp8W15cXHdcXHNAXSpAKVxcYiIpLmdldFJlZ2V4KCksZGVmOi9eICpcWyhbXlxdXSspXF06ICo8PyhbXlxzPl0rKT4/KD86ICsoWyIoXVteXG5dK1siKV0pKT8gKig/OlxuK3wkKS8saGVhZGluZzovXigjezEsNn0pKC4qKSg/OlxuK3wkKS8sZmVuY2VzOlNjLGxoZWFkaW5nOi9eKC4rPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8scGFyYWdyYXBoOk9lKHNlLm5vcm1hbC5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsc2UuaHIpLnJlcGxhY2UoImhlYWRpbmciLGAgKiN7MSw2fSAqW14KXWApLnJlcGxhY2UoImxoZWFkaW5nIixzZS5saGVhZGluZykucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJ8ZmVuY2VzIiwiIikucmVwbGFjZSgifGxpc3QiLCIiKS5yZXBsYWNlKCJ8aHRtbCIsIiIpLmdldFJlZ2V4KCl9O2NvbnN0IFg9e2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFpbCk+Lyx1cmw6U2MsdGFnOiJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPiIsbGluazovXiE/XFsobGFiZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8bm9saW5rKD8hXFwoKSIsZW1TdHJvbmc6e2xEZWxpbTovXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilbcHVuY3RdKFwqKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXCorKSg/IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8qXSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKykoPz1bXnB1bmN0XHNdKXxbXHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOlNjLHRleHQ6L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8scHVuY3R1YXRpb246L14oKD8hWypfXSlbXHNwdW5jdHVhdGlvbl0pL307WC5fcHVuY3R1YXRpb249IlxccHtQfSQrPD0+YF58fiI7WC5wdW5jdHVhdGlvbj1PZShYLnB1bmN0dWF0aW9uLCJ1IikucmVwbGFjZSgvcHVuY3R1YXRpb24vZyxYLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKTtYLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZztYLmFueVB1bmN0dWF0aW9uPS9cXFtwdW5jdF0vZztYLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nO1guX2NvbW1lbnQ9T2Uoc2UuX2NvbW1lbnQpLnJlcGxhY2UoIig/Oi0tPnwkKSIsIi0tPiIpLmdldFJlZ2V4KCk7WC5lbVN0cm9uZy5sRGVsaW09T2UoWC5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBsYWNlKC9wdW5jdC9nLFguX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpO1guZW1TdHJvbmcuckRlbGltQXN0PU9lKFguZW1TdHJvbmcuckRlbGltQXN0LCJndSIpLnJlcGxhY2UoL3B1bmN0L2csWC5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCk7WC5lbVN0cm9uZy5yRGVsaW1VbmQ9T2UoWC5lbVN0cm9uZy5yRGVsaW1VbmQsImd1IikucmVwbGFjZSgvcHVuY3QvZyxYLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKTtYLmFueVB1bmN0dWF0aW9uPU9lKFguYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxYLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKTtYLl9lc2NhcGVzPU9lKFguX2VzY2FwZXMsImd1IikucmVwbGFjZSgvcHVuY3QvZyxYLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKTtYLl9zY2hlbWU9L1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vO1guX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS87WC5hdXRvbGluaz1PZShYLmF1dG9saW5rKS5yZXBsYWNlKCJzY2hlbWUiLFguX3NjaGVtZSkucmVwbGFjZSgiZW1haWwiLFguX2VtYWlsKS5nZXRSZWdleCgpO1guX2F0dHJpYnV0ZT0vXHMrW2EtekEtWjpfXVtcdy46LV0qKD86XHMqPVxzKiJbXiJdKiJ8XHMqPVxzKidbXiddKid8XHMqPVxzKlteXHMiJz08PmBdKyk/LztYLnRhZz1PZShYLnRhZykucmVwbGFjZSgiY29tbWVudCIsWC5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRlIixYLl9hdHRyaWJ1dGUpLmdldFJlZ2V4KCk7WC5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy87WC5faHJlZj0vPCg/OlxcLnxbXlxuPD5cXF0pKz58W15cc1x4MDAtXHgxZl0qLztYLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvO1gubGluaz1PZShYLmxpbmspLnJlcGxhY2UoImxhYmVsIixYLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsWC5faHJlZikucmVwbGFjZSgidGl0bGUiLFguX3RpdGxlKS5nZXRSZWdleCgpO1gucmVmbGluaz1PZShYLnJlZmxpbmspLnJlcGxhY2UoImxhYmVsIixYLl9sYWJlbCkucmVwbGFjZSgicmVmIixzZS5fbGFiZWwpLmdldFJlZ2V4KCk7WC5ub2xpbms9T2UoWC5ub2xpbmspLnJlcGxhY2UoInJlZiIsc2UuX2xhYmVsKS5nZXRSZWdleCgpO1gucmVmbGlua1NlYXJjaD1PZShYLnJlZmxpbmtTZWFyY2gsImciKS5yZXBsYWNlKCJyZWZsaW5rIixYLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsWC5ub2xpbmspLmdldFJlZ2V4KCk7WC5ub3JtYWw9ey4uLlh9O1gucGVkYW50aWM9ey4uLlgubm9ybWFsLHN0cm9uZzp7c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pLyxlbmRBc3Q6L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazpPZSgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsWC5fbGFiZWwpLmdldFJlZ2V4KCkscmVmbGluazpPZSgvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIsWC5fbGFiZWwpLmdldFJlZ2V4KCl9O1guZ2ZtPXsuLi5YLm5vcm1hbCxlc2NhcGU6T2UoWC5lc2NhcGUpLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksX2V4dGVuZGVkX2VtYWlsOi9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLyx1cmw6L14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nIn4pXSsoPyEkKSkrLyxkZWw6L14ofn4/KSg/PVteXHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99O1guZ2ZtLnVybD1PZShYLmdmbS51cmwsImkiKS5yZXBsYWNlKCJlbWFpbCIsWC5nZm0uX2V4dGVuZGVkX2VtYWlsKS5nZXRSZWdleCgpO1guYnJlYWtzPXsuLi5YLmdmbSxicjpPZShYLmJyKS5yZXBsYWNlKCJ7Mix9IiwiKiIpLmdldFJlZ2V4KCksdGV4dDpPZShYLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJlcGxhY2UoL1x7MixcfS9nLCIqIikuZ2V0UmVnZXgoKX07Y2xhc3MgZ3J7Y29uc3RydWN0b3IodCl7QmUodGhpcywidG9rZW5zIik7QmUodGhpcywib3B0aW9ucyIpO0JlKHRoaXMsInN0YXRlIik7QmUodGhpcywidG9rZW5pemVyIik7QmUodGhpcywiaW5saW5lUXVldWUiKTt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz10fHxUaSx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBFYyx0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2NvbnN0IG49e2Jsb2NrOnNlLm5vcm1hbCxpbmxpbmU6WC5ub3JtYWx9O3RoaXMub3B0aW9ucy5wZWRhbnRpYz8obi5ibG9jaz1zZS5wZWRhbnRpYyxuLmlubGluZT1YLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYobi5ibG9jaz1zZS5nZm0sdGhpcy5vcHRpb25zLmJyZWFrcz9uLmlubGluZT1YLmJyZWFrczpuLmlubGluZT1YLmdmbSksdGhpcy50b2tlbml6ZXIucnVsZXM9bn1zdGF0aWMgZ2V0IHJ1bGVzKCl7cmV0dXJue2Jsb2NrOnNlLGlubGluZTpYfX1zdGF0aWMgbGV4KHQsbil7cmV0dXJuIG5ldyBncihuKS5sZXgodCl9c3RhdGljIGxleElubGluZSh0LG4pe3JldHVybiBuZXcgZ3IobikuaW5saW5lVG9rZW5zKHQpfWxleCh0KXt0PXQucmVwbGFjZSgvXHJcbnxcci9nLGAKYCksdGhpcy5ibG9ja1Rva2Vucyh0LHRoaXMudG9rZW5zKTtsZXQgbjtmb3IoO249dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlubGluZVRva2VucyhuLnNyYyxuLnRva2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKHQsbj1bXSl7dGhpcy5vcHRpb25zLnBlZGFudGljP3Q9dC5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6dD10LnJlcGxhY2UoL14oICopKFx0KykvZ20sKHMsYSx1KT0+YSsiICAgICIucmVwZWF0KHUubGVuZ3RoKSk7bGV0IHIsbyxpLGw7Zm9yKDt0OylpZighKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZShzPT4ocj1zLmNhbGwoe2xleGVyOnRoaXN9LHQsbikpPyh0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpLCEwKTohMSkpKXtpZihyPXRoaXMudG9rZW5pemVyLnNwYWNlKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksci5yYXcubGVuZ3RoPT09MSYmbi5sZW5ndGg+MD9uW24ubGVuZ3RoLTFdLnJhdys9YApgOm4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmNvZGUodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxvPW5bbi5sZW5ndGgtMV0sbyYmKG8udHlwZT09PSJwYXJhZ3JhcGgifHxvLnR5cGU9PT0idGV4dCIpPyhvLnJhdys9YApgK3IucmF3LG8udGV4dCs9YApgK3IudGV4dCx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1vLnRleHQpOm4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmZlbmNlcyh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmhlYWRpbmcodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5ocih0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmJsb2NrcXVvdGUodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5saXN0KHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuaHRtbCh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmRlZih0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG89bltuLmxlbmd0aC0xXSxvJiYoby50eXBlPT09InBhcmFncmFwaCJ8fG8udHlwZT09PSJ0ZXh0Iik/KG8ucmF3Kz1gCmArci5yYXcsby50ZXh0Kz1gCmArci5yYXcsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9by50ZXh0KTp0aGlzLnRva2Vucy5saW5rc1tyLnRhZ118fCh0aGlzLnRva2Vucy5saW5rc1tyLnRhZ109e2hyZWY6ci5ocmVmLHRpdGxlOnIudGl0bGV9KTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLnRhYmxlKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIubGhlYWRpbmcodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYoaT10LHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrKXtsZXQgcz0xLzA7Y29uc3QgYT10LnNsaWNlKDEpO2xldCB1O3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChjPT57dT1jLmNhbGwoe2xleGVyOnRoaXN9LGEpLHR5cGVvZiB1PT0ibnVtYmVyIiYmdT49MCYmKHM9TWF0aC5taW4ocyx1KSl9KSxzPDEvMCYmcz49MCYmKGk9dC5zdWJzdHJpbmcoMCxzKzEpKX1pZih0aGlzLnN0YXRlLnRvcCYmKHI9dGhpcy50b2tlbml6ZXIucGFyYWdyYXBoKGkpKSl7bz1uW24ubGVuZ3RoLTFdLGwmJm8udHlwZT09PSJwYXJhZ3JhcGgiPyhvLnJhdys9YApgK3IucmF3LG8udGV4dCs9YApgK3IudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPW8udGV4dCk6bi5wdXNoKHIpLGw9aS5sZW5ndGghPT10Lmxlbmd0aCx0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCk7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci50ZXh0KHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbz1uW24ubGVuZ3RoLTFdLG8mJm8udHlwZT09PSJ0ZXh0Ij8oby5yYXcrPWAKYCtyLnJhdyxvLnRleHQrPWAKYCtyLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1vLnRleHQpOm4ucHVzaChyKTtjb250aW51ZX1pZih0KXtjb25zdCBzPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrdC5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3Iocyk7YnJlYWt9ZWxzZSB0aHJvdyBuZXcgRXJyb3Iocyl9fXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxufWlubGluZSh0LG49W10pe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzp0LHRva2VuczpufSksbn1pbmxpbmVUb2tlbnModCxuPVtdKXtsZXQgcixvLGksbD10LHMsYSx1O2lmKHRoaXMudG9rZW5zLmxpbmtzKXtjb25zdCBjPU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZihjLmxlbmd0aD4wKWZvcig7KHM9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhsKSkhPW51bGw7KWMuaW5jbHVkZXMoc1swXS5zbGljZShzWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYobD1sLnNsaWNlKDAscy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoc1swXS5sZW5ndGgtMikrIl0iK2wuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDsocz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWMobCkpIT1udWxsOylsPWwuc2xpY2UoMCxzLmluZGV4KSsiWyIrImEiLnJlcGVhdChzWzBdLmxlbmd0aC0yKSsiXSIrbC5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDsocz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyhsKSkhPW51bGw7KWw9bC5zbGljZSgwLHMuaW5kZXgpKyIrKyIrbC5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO3Q7KWlmKGF8fCh1PSIiKSxhPSExLCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZSYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUoYz0+KHI9Yy5jYWxsKHtsZXhlcjp0aGlzfSx0LG4pKT8odD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKSwhMCk6ITEpKSl7aWYocj10aGlzLnRva2VuaXplci5lc2NhcGUodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci50YWcodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxvPW5bbi5sZW5ndGgtMV0sbyYmci50eXBlPT09InRleHQiJiZvLnR5cGU9PT0idGV4dCI/KG8ucmF3Kz1yLnJhdyxvLnRleHQrPXIudGV4dCk6bi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIubGluayh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLnJlZmxpbmsodCx0aGlzLnRva2Vucy5saW5rcykpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxvPW5bbi5sZW5ndGgtMV0sbyYmci50eXBlPT09InRleHQiJiZvLnR5cGU9PT0idGV4dCI/KG8ucmF3Kz1yLnJhdyxvLnRleHQrPXIudGV4dCk6bi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuZW1TdHJvbmcodCxsLHUpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuY29kZXNwYW4odCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5icih0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmRlbCh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmF1dG9saW5rKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKHI9dGhpcy50b2tlbml6ZXIudXJsKHQpKSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihpPXQsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lKXtsZXQgYz0xLzA7Y29uc3QgZD10LnNsaWNlKDEpO2xldCBmO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lLmZvckVhY2goaD0+e2Y9aC5jYWxsKHtsZXhlcjp0aGlzfSxkKSx0eXBlb2YgZj09Im51bWJlciImJmY+PTAmJihjPU1hdGgubWluKGMsZikpfSksYzwxLzAmJmM+PTAmJihpPXQuc3Vic3RyaW5nKDAsYysxKSl9aWYocj10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGkpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksci5yYXcuc2xpY2UoLTEpIT09Il8iJiYodT1yLnJhdy5zbGljZSgtMSkpLGE9ITAsbz1uW24ubGVuZ3RoLTFdLG8mJm8udHlwZT09PSJ0ZXh0Ij8oby5yYXcrPXIucmF3LG8udGV4dCs9ci50ZXh0KTpuLnB1c2gocik7Y29udGludWV9aWYodCl7Y29uc3QgYz0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK3QuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKGMpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IEVycm9yKGMpfX1yZXR1cm4gbn19Y2xhc3MgQ2N7Y29uc3RydWN0b3IodCl7QmUodGhpcywib3B0aW9ucyIpO3RoaXMub3B0aW9ucz10fHxUaX1jb2RlKHQsbixyKXt2YXIgaTtjb25zdCBvPShpPShufHwiIikubWF0Y2goL15cUyovKSk9PW51bGw/dm9pZCAwOmlbMF07cmV0dXJuIHQ9dC5yZXBsYWNlKC9cbiQvLCIiKStgCmAsbz8nPHByZT48Y29kZSBjbGFzcz0ibGFuZ3VhZ2UtJytfbihvKSsnIj4nKyhyP3Q6X24odCwhMCkpK2A8L2NvZGU+PC9wcmU+CmA6IjxwcmU+PGNvZGU+Iisocj90Ol9uKHQsITApKStgPC9jb2RlPjwvcHJlPgpgfWJsb2NrcXVvdGUodCl7cmV0dXJuYDxibG9ja3F1b3RlPgoke3R9PC9ibG9ja3F1b3RlPgpgfWh0bWwodCxuKXtyZXR1cm4gdH1oZWFkaW5nKHQsbixyKXtyZXR1cm5gPGgke259PiR7dH08L2gke259PgpgfWhyKCl7cmV0dXJuYDxocj4KYH1saXN0KHQsbixyKXtjb25zdCBvPW4/Im9sIjoidWwiLGk9biYmciE9PTE/JyBzdGFydD0iJytyKyciJzoiIjtyZXR1cm4iPCIrbytpK2A+CmArdCsiPC8iK28rYD4KYH1saXN0aXRlbSh0LG4scil7cmV0dXJuYDxsaT4ke3R9PC9saT4KYH1jaGVja2JveCh0KXtyZXR1cm4iPGlucHV0ICIrKHQ/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94Ij4nfXBhcmFncmFwaCh0KXtyZXR1cm5gPHA+JHt0fTwvcD4KYH10YWJsZSh0LG4pe3JldHVybiBuJiYobj1gPHRib2R5PiR7bn08L3Rib2R5PmApLGA8dGFibGU+Cjx0aGVhZD4KYCt0K2A8L3RoZWFkPgpgK24rYDwvdGFibGU+CmB9dGFibGVyb3codCl7cmV0dXJuYDx0cj4KJHt0fTwvdHI+CmB9dGFibGVjZWxsKHQsbil7Y29uc3Qgcj1uLmhlYWRlcj8idGgiOiJ0ZCI7cmV0dXJuKG4uYWxpZ24/YDwke3J9IGFsaWduPSIke24uYWxpZ259Ij5gOmA8JHtyfT5gKSt0K2A8LyR7cn0+CmB9c3Ryb25nKHQpe3JldHVybmA8c3Ryb25nPiR7dH08L3N0cm9uZz5gfWVtKHQpe3JldHVybmA8ZW0+JHt0fTwvZW0+YH1jb2Rlc3Bhbih0KXtyZXR1cm5gPGNvZGU+JHt0fTwvY29kZT5gfWJyKCl7cmV0dXJuIjxicj4ifWRlbCh0KXtyZXR1cm5gPGRlbD4ke3R9PC9kZWw+YH1saW5rKHQsbixyKXtjb25zdCBvPW15KHQpO2lmKG89PT1udWxsKXJldHVybiByO3Q9bztsZXQgaT0nPGEgaHJlZj0iJyt0KyciJztyZXR1cm4gbiYmKGkrPScgdGl0bGU9IicrbisnIicpLGkrPSI+IityKyI8L2E+IixpfWltYWdlKHQsbixyKXtjb25zdCBvPW15KHQpO2lmKG89PT1udWxsKXJldHVybiByO3Q9bztsZXQgaT1gPGltZyBzcmM9IiR7dH0iIGFsdD0iJHtyfSJgO3JldHVybiBuJiYoaSs9YCB0aXRsZT0iJHtufSJgKSxpKz0iPiIsaX10ZXh0KHQpe3JldHVybiB0fX1jbGFzcyBCZ3tzdHJvbmcodCl7cmV0dXJuIHR9ZW0odCl7cmV0dXJuIHR9Y29kZXNwYW4odCl7cmV0dXJuIHR9ZGVsKHQpe3JldHVybiB0fWh0bWwodCl7cmV0dXJuIHR9dGV4dCh0KXtyZXR1cm4gdH1saW5rKHQsbixyKXtyZXR1cm4iIityfWltYWdlKHQsbixyKXtyZXR1cm4iIityfWJyKCl7cmV0dXJuIiJ9fWNsYXNzIG1ye2NvbnN0cnVjdG9yKHQpe0JlKHRoaXMsIm9wdGlvbnMiKTtCZSh0aGlzLCJyZW5kZXJlciIpO0JlKHRoaXMsInRleHRSZW5kZXJlciIpO3RoaXMub3B0aW9ucz10fHxUaSx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgQ2MsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRleHRSZW5kZXJlcj1uZXcgQmd9c3RhdGljIHBhcnNlKHQsbil7cmV0dXJuIG5ldyBtcihuKS5wYXJzZSh0KX1zdGF0aWMgcGFyc2VJbmxpbmUodCxuKXtyZXR1cm4gbmV3IG1yKG4pLnBhcnNlSW5saW5lKHQpfXBhcnNlKHQsbj0hMCl7bGV0IHI9IiI7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2NvbnN0IGk9dFtvXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbaS50eXBlXSl7Y29uc3QgbD1pLHM9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2wudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGwpO2lmKHMhPT0hMXx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFibGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMobC50eXBlKSl7cis9c3x8IiI7Y29udGludWV9fXN3aXRjaChpLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOntyKz10aGlzLnJlbmRlcmVyLmhyKCk7Y29udGludWV9Y2FzZSJoZWFkaW5nIjp7Y29uc3QgbD1pO3IrPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zKSxsLmRlcHRoLCROKHRoaXMucGFyc2VJbmxpbmUobC50b2tlbnMsdGhpcy50ZXh0UmVuZGVyZXIpKSk7Y29udGludWV9Y2FzZSJjb2RlIjp7Y29uc3QgbD1pO3IrPXRoaXMucmVuZGVyZXIuY29kZShsLnRleHQsbC5sYW5nLCEhbC5lc2NhcGVkKTtjb250aW51ZX1jYXNlInRhYmxlIjp7Y29uc3QgbD1pO2xldCBzPSIiLGE9IiI7Zm9yKGxldCBjPTA7YzxsLmhlYWRlci5sZW5ndGg7YysrKWErPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUobC5oZWFkZXJbY10udG9rZW5zKSx7aGVhZGVyOiEwLGFsaWduOmwuYWxpZ25bY119KTtzKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KGEpO2xldCB1PSIiO2ZvcihsZXQgYz0wO2M8bC5yb3dzLmxlbmd0aDtjKyspe2NvbnN0IGQ9bC5yb3dzW2NdO2E9IiI7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspYSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShkW2ZdLnRva2Vucykse2hlYWRlcjohMSxhbGlnbjpsLmFsaWduW2ZdfSk7dSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhhKX1yKz10aGlzLnJlbmRlcmVyLnRhYmxlKHMsdSk7Y29udGludWV9Y2FzZSJibG9ja3F1b3RlIjp7Y29uc3QgbD1pLHM9dGhpcy5wYXJzZShsLnRva2Vucyk7cis9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKHMpO2NvbnRpbnVlfWNhc2UibGlzdCI6e2NvbnN0IGw9aSxzPWwub3JkZXJlZCxhPWwuc3RhcnQsdT1sLmxvb3NlO2xldCBjPSIiO2ZvcihsZXQgZD0wO2Q8bC5pdGVtcy5sZW5ndGg7ZCsrKXtjb25zdCBmPWwuaXRlbXNbZF0saD1mLmNoZWNrZWQsZz1mLnRhc2s7bGV0IG09IiI7aWYoZi50YXNrKXtjb25zdCBfPXRoaXMucmVuZGVyZXIuY2hlY2tib3goISFoKTt1P2YudG9rZW5zLmxlbmd0aD4wJiZmLnRva2Vuc1swXS50eXBlPT09InBhcmFncmFwaCI/KGYudG9rZW5zWzBdLnRleHQ9XysiICIrZi50b2tlbnNbMF0udGV4dCxmLnRva2Vuc1swXS50b2tlbnMmJmYudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmZi50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGU9PT0idGV4dCImJihmLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD1fKyIgIitmLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmYudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHRleHQ6XysiICJ9KTptKz1fKyIgIn1tKz10aGlzLnBhcnNlKGYudG9rZW5zLHUpLGMrPXRoaXMucmVuZGVyZXIubGlzdGl0ZW0obSxnLCEhaCl9cis9dGhpcy5yZW5kZXJlci5saXN0KGMscyxhKTtjb250aW51ZX1jYXNlImh0bWwiOntjb25zdCBsPWk7cis9dGhpcy5yZW5kZXJlci5odG1sKGwudGV4dCxsLmJsb2NrKTtjb250aW51ZX1jYXNlInBhcmFncmFwaCI6e2NvbnN0IGw9aTtyKz10aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zKSk7Y29udGludWV9Y2FzZSJ0ZXh0Ijp7bGV0IGw9aSxzPWwudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUobC50b2tlbnMpOmwudGV4dDtmb3IoO28rMTx0Lmxlbmd0aCYmdFtvKzFdLnR5cGU9PT0idGV4dCI7KWw9dFsrK29dLHMrPWAKYCsobC50b2tlbnM/dGhpcy5wYXJzZUlubGluZShsLnRva2Vucyk6bC50ZXh0KTtyKz1uP3RoaXMucmVuZGVyZXIucGFyYWdyYXBoKHMpOnM7Y29udGludWV9ZGVmYXVsdDp7Y29uc3QgbD0nVG9rZW4gd2l0aCAiJytpLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihsKSwiIjt0aHJvdyBuZXcgRXJyb3IobCl9fX1yZXR1cm4gcn1wYXJzZUlubGluZSh0LG4pe249bnx8dGhpcy5yZW5kZXJlcjtsZXQgcj0iIjtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Y29uc3QgaT10W29dO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tpLnR5cGVdKXtjb25zdCBsPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tpLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxpKTtpZihsIT09ITF8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoaS50eXBlKSl7cis9bHx8IiI7Y29udGludWV9fXN3aXRjaChpLnR5cGUpe2Nhc2UiZXNjYXBlIjp7Y29uc3QgbD1pO3IrPW4udGV4dChsLnRleHQpO2JyZWFrfWNhc2UiaHRtbCI6e2NvbnN0IGw9aTtyKz1uLmh0bWwobC50ZXh0KTticmVha31jYXNlImxpbmsiOntjb25zdCBsPWk7cis9bi5saW5rKGwuaHJlZixsLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUobC50b2tlbnMsbikpO2JyZWFrfWNhc2UiaW1hZ2UiOntjb25zdCBsPWk7cis9bi5pbWFnZShsLmhyZWYsbC50aXRsZSxsLnRleHQpO2JyZWFrfWNhc2Uic3Ryb25nIjp7Y29uc3QgbD1pO3IrPW4uc3Ryb25nKHRoaXMucGFyc2VJbmxpbmUobC50b2tlbnMsbikpO2JyZWFrfWNhc2UiZW0iOntjb25zdCBsPWk7cis9bi5lbSh0aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zLG4pKTticmVha31jYXNlImNvZGVzcGFuIjp7Y29uc3QgbD1pO3IrPW4uY29kZXNwYW4obC50ZXh0KTticmVha31jYXNlImJyIjp7cis9bi5icigpO2JyZWFrfWNhc2UiZGVsIjp7Y29uc3QgbD1pO3IrPW4uZGVsKHRoaXMucGFyc2VJbmxpbmUobC50b2tlbnMsbikpO2JyZWFrfWNhc2UidGV4dCI6e2NvbnN0IGw9aTtyKz1uLnRleHQobC50ZXh0KTticmVha31kZWZhdWx0Ontjb25zdCBsPSdUb2tlbiB3aXRoICInK2kudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKGwpLCIiO3Rocm93IG5ldyBFcnJvcihsKX19fXJldHVybiByfX1jbGFzcyB6c3tjb25zdHJ1Y3Rvcih0KXtCZSh0aGlzLCJvcHRpb25zIik7dGhpcy5vcHRpb25zPXR8fFRpfXByZXByb2Nlc3ModCl7cmV0dXJuIHR9cG9zdHByb2Nlc3ModCl7cmV0dXJuIHR9fUJlKHpzLCJwYXNzVGhyb3VnaEhvb2tzIixuZXcgU2V0KFsicHJlcHJvY2VzcyIsInBvc3Rwcm9jZXNzIl0pKTt2YXIgTmEsQmgsWWMsbl87Y2xhc3MgTk57Y29uc3RydWN0b3IoLi4udCl7SGQodGhpcyxOYSk7SGQodGhpcyxZYyk7QmUodGhpcywiZGVmYXVsdHMiLEZnKCkpO0JlKHRoaXMsIm9wdGlvbnMiLHRoaXMuc2V0T3B0aW9ucyk7QmUodGhpcywicGFyc2UiLFhhKHRoaXMsTmEsQmgpLmNhbGwodGhpcyxnci5sZXgsbXIucGFyc2UpKTtCZSh0aGlzLCJwYXJzZUlubGluZSIsWGEodGhpcyxOYSxCaCkuY2FsbCh0aGlzLGdyLmxleElubGluZSxtci5wYXJzZUlubGluZSkpO0JlKHRoaXMsIlBhcnNlciIsbXIpO0JlKHRoaXMsIlJlbmRlcmVyIixDYyk7QmUodGhpcywiVGV4dFJlbmRlcmVyIixCZyk7QmUodGhpcywiTGV4ZXIiLGdyKTtCZSh0aGlzLCJUb2tlbml6ZXIiLEVjKTtCZSh0aGlzLCJIb29rcyIsenMpO3RoaXMudXNlKC4uLnQpfXdhbGtUb2tlbnModCxuKXt2YXIgbyxpO2xldCByPVtdO2Zvcihjb25zdCBsIG9mIHQpc3dpdGNoKHI9ci5jb25jYXQobi5jYWxsKHRoaXMsbCkpLGwudHlwZSl7Y2FzZSJ0YWJsZSI6e2NvbnN0IHM9bDtmb3IoY29uc3QgYSBvZiBzLmhlYWRlcilyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhhLnRva2VucyxuKSk7Zm9yKGNvbnN0IGEgb2Ygcy5yb3dzKWZvcihjb25zdCB1IG9mIGEpcj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnModS50b2tlbnMsbikpO2JyZWFrfWNhc2UibGlzdCI6e2NvbnN0IHM9bDtyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhzLml0ZW1zLG4pKTticmVha31kZWZhdWx0Ontjb25zdCBzPWw7KGk9KG89dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zKT09bnVsbD92b2lkIDA6by5jaGlsZFRva2VucykhPW51bGwmJmlbcy50eXBlXT90aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbcy50eXBlXS5mb3JFYWNoKGE9PntyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhzW2FdLG4pKX0pOnMudG9rZW5zJiYocj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMocy50b2tlbnMsbikpKX19cmV0dXJuIHJ9dXNlKC4uLnQpe2NvbnN0IG49dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gdC5mb3JFYWNoKHI9Pntjb25zdCBvPXsuLi5yfTtpZihvLmFzeW5jPXRoaXMuZGVmYXVsdHMuYXN5bmN8fG8uYXN5bmN8fCExLHIuZXh0ZW5zaW9ucyYmKHIuZXh0ZW5zaW9ucy5mb3JFYWNoKGk9PntpZighaS5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTtpZigicmVuZGVyZXIiaW4gaSl7Y29uc3QgbD1uLnJlbmRlcmVyc1tpLm5hbWVdO2w/bi5yZW5kZXJlcnNbaS5uYW1lXT1mdW5jdGlvbiguLi5zKXtsZXQgYT1pLnJlbmRlcmVyLmFwcGx5KHRoaXMscyk7cmV0dXJuIGE9PT0hMSYmKGE9bC5hcHBseSh0aGlzLHMpKSxhfTpuLnJlbmRlcmVyc1tpLm5hbWVdPWkucmVuZGVyZXJ9aWYoInRva2VuaXplciJpbiBpKXtpZighaS5sZXZlbHx8aS5sZXZlbCE9PSJibG9jayImJmkubGV2ZWwhPT0iaW5saW5lIil0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTtjb25zdCBsPW5baS5sZXZlbF07bD9sLnVuc2hpZnQoaS50b2tlbml6ZXIpOm5baS5sZXZlbF09W2kudG9rZW5pemVyXSxpLnN0YXJ0JiYoaS5sZXZlbD09PSJibG9jayI/bi5zdGFydEJsb2NrP24uc3RhcnRCbG9jay5wdXNoKGkuc3RhcnQpOm4uc3RhcnRCbG9jaz1baS5zdGFydF06aS5sZXZlbD09PSJpbmxpbmUiJiYobi5zdGFydElubGluZT9uLnN0YXJ0SW5saW5lLnB1c2goaS5zdGFydCk6bi5zdGFydElubGluZT1baS5zdGFydF0pKX0iY2hpbGRUb2tlbnMiaW4gaSYmaS5jaGlsZFRva2VucyYmKG4uY2hpbGRUb2tlbnNbaS5uYW1lXT1pLmNoaWxkVG9rZW5zKX0pLG8uZXh0ZW5zaW9ucz1uKSxyLnJlbmRlcmVyKXtjb25zdCBpPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyBDYyh0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgbCBpbiByLnJlbmRlcmVyKXtjb25zdCBzPXIucmVuZGVyZXJbbF0sYT1sLHU9aVthXTtpW2FdPSguLi5jKT0+e2xldCBkPXMuYXBwbHkoaSxjKTtyZXR1cm4gZD09PSExJiYoZD11LmFwcGx5KGksYykpLGR8fCIifX1vLnJlbmRlcmVyPWl9aWYoci50b2tlbml6ZXIpe2NvbnN0IGk9dGhpcy5kZWZhdWx0cy50b2tlbml6ZXJ8fG5ldyBFYyh0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgbCBpbiByLnRva2VuaXplcil7Y29uc3Qgcz1yLnRva2VuaXplcltsXSxhPWwsdT1pW2FdO2lbYV09KC4uLmMpPT57bGV0IGQ9cy5hcHBseShpLGMpO3JldHVybiBkPT09ITEmJihkPXUuYXBwbHkoaSxjKSksZH19by50b2tlbml6ZXI9aX1pZihyLmhvb2tzKXtjb25zdCBpPXRoaXMuZGVmYXVsdHMuaG9va3N8fG5ldyB6cztmb3IoY29uc3QgbCBpbiByLmhvb2tzKXtjb25zdCBzPXIuaG9va3NbbF0sYT1sLHU9aVthXTt6cy5wYXNzVGhyb3VnaEhvb2tzLmhhcyhsKT9pW2FdPWM9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUocy5jYWxsKGksYykpLnRoZW4oZj0+dS5jYWxsKGksZikpO2NvbnN0IGQ9cy5jYWxsKGksYyk7cmV0dXJuIHUuY2FsbChpLGQpfTppW2FdPSguLi5jKT0+e2xldCBkPXMuYXBwbHkoaSxjKTtyZXR1cm4gZD09PSExJiYoZD11LmFwcGx5KGksYykpLGR9fW8uaG9va3M9aX1pZihyLndhbGtUb2tlbnMpe2NvbnN0IGk9dGhpcy5kZWZhdWx0cy53YWxrVG9rZW5zLGw9ci53YWxrVG9rZW5zO28ud2Fsa1Rva2Vucz1mdW5jdGlvbihzKXtsZXQgYT1bXTtyZXR1cm4gYS5wdXNoKGwuY2FsbCh0aGlzLHMpKSxpJiYoYT1hLmNvbmNhdChpLmNhbGwodGhpcyxzKSkpLGF9fXRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4ub319KSx0aGlzfXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4udH0sdGhpc31sZXhlcih0LG4pe3JldHVybiBnci5sZXgodCxuPz90aGlzLmRlZmF1bHRzKX1wYXJzZXIodCxuKXtyZXR1cm4gbXIucGFyc2UodCxuPz90aGlzLmRlZmF1bHRzKX19TmE9bmV3IFdlYWtTZXQsQmg9ZnVuY3Rpb24odCxuKXtyZXR1cm4ocixvKT0+e2NvbnN0IGk9ey4uLm99LGw9ey4uLnRoaXMuZGVmYXVsdHMsLi4uaX07dGhpcy5kZWZhdWx0cy5hc3luYz09PSEwJiZpLmFzeW5jPT09ITEmJihsLnNpbGVudHx8Y29uc29sZS53YXJuKCJtYXJrZWQoKTogVGhlIGFzeW5jIG9wdGlvbiB3YXMgc2V0IHRvIHRydWUgYnkgYW4gZXh0ZW5zaW9uLiBUaGUgYXN5bmM6IGZhbHNlIG9wdGlvbiBzZW50IHRvIHBhcnNlIHdpbGwgYmUgaWdub3JlZC4iKSxsLmFzeW5jPSEwKTtjb25zdCBzPVhhKHRoaXMsWWMsbl8pLmNhbGwodGhpcywhIWwuc2lsZW50LCEhbC5hc3luYyk7aWYodHlwZW9mIHI+InUifHxyPT09bnVsbClyZXR1cm4gcyhuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYodHlwZW9mIHIhPSJzdHJpbmciKXJldHVybiBzKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpKyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihsLmhvb2tzJiYobC5ob29rcy5vcHRpb25zPWwpLGwuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShsLmhvb2tzP2wuaG9va3MucHJlcHJvY2VzcyhyKTpyKS50aGVuKGE9PnQoYSxsKSkudGhlbihhPT5sLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKGEsbC53YWxrVG9rZW5zKSkudGhlbigoKT0+YSk6YSkudGhlbihhPT5uKGEsbCkpLnRoZW4oYT0+bC5ob29rcz9sLmhvb2tzLnBvc3Rwcm9jZXNzKGEpOmEpLmNhdGNoKHMpO3RyeXtsLmhvb2tzJiYocj1sLmhvb2tzLnByZXByb2Nlc3MocikpO2NvbnN0IGE9dChyLGwpO2wud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKGEsbC53YWxrVG9rZW5zKTtsZXQgdT1uKGEsbCk7cmV0dXJuIGwuaG9va3MmJih1PWwuaG9va3MucG9zdHByb2Nlc3ModSkpLHV9Y2F0Y2goYSl7cmV0dXJuIHMoYSl9fX0sWWM9bmV3IFdlYWtTZXQsbl89ZnVuY3Rpb24odCxuKXtyZXR1cm4gcj0+e2lmKHIubWVzc2FnZSs9YApQbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC5gLHQpe2NvbnN0IG89IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIrX24oci5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+IjtyZXR1cm4gbj9Qcm9taXNlLnJlc29sdmUobyk6b31pZihuKXJldHVybiBQcm9taXNlLnJlamVjdChyKTt0aHJvdyByfX07Y29uc3QgZ2k9bmV3IE5OO2Z1bmN0aW9uIE1lKGUsdCl7cmV0dXJuIGdpLnBhcnNlKGUsdCl9TWUub3B0aW9ucz1NZS5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBnaS5zZXRPcHRpb25zKGUpLE1lLmRlZmF1bHRzPWdpLmRlZmF1bHRzLHF3KE1lLmRlZmF1bHRzKSxNZX07TWUuZ2V0RGVmYXVsdHM9Rmc7TWUuZGVmYXVsdHM9VGk7TWUudXNlPWZ1bmN0aW9uKC4uLmUpe3JldHVybiBnaS51c2UoLi4uZSksTWUuZGVmYXVsdHM9Z2kuZGVmYXVsdHMscXcoTWUuZGVmYXVsdHMpLE1lfTtNZS53YWxrVG9rZW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdpLndhbGtUb2tlbnMoZSx0KX07TWUucGFyc2VJbmxpbmU9Z2kucGFyc2VJbmxpbmU7TWUuUGFyc2VyPW1yO01lLnBhcnNlcj1tci5wYXJzZTtNZS5SZW5kZXJlcj1DYztNZS5UZXh0UmVuZGVyZXI9Qmc7TWUuTGV4ZXI9Z3I7TWUubGV4ZXI9Z3IubGV4O01lLlRva2VuaXplcj1FYztNZS5Ib29rcz16cztNZS5wYXJzZT1NZTtNZS5vcHRpb25zO01lLnNldE9wdGlvbnM7TWUudXNlO01lLndhbGtUb2tlbnM7TWUucGFyc2VJbmxpbmU7bXIucGFyc2U7Y29uc3QgUk49Z3IubGV4O2Z1bmN0aW9uIHBhKCl7cGE9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIGUsdD17fSxuPU9iamVjdC5wcm90b3R5cGUscj1uLmhhc093blByb3BlcnR5LG89T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihDLCQsRSl7Q1skXT1FLnZhbHVlfSxpPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiI/U3ltYm9sOnt9LGw9aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLHM9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixhPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiB1KEMsJCxFKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KEMsJCx7dmFsdWU6RSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLENbJF19dHJ5e3Uoe30sIiIpfWNhdGNoe3U9ZnVuY3Rpb24oJCxFLE8pe3JldHVybiAkW0VdPU99fWZ1bmN0aW9uIGMoQywkLEUsTyl7dmFyIFI9JCYmJC5wcm90b3R5cGUgaW5zdGFuY2VvZiB2PyQ6dixGPU9iamVjdC5jcmVhdGUoUi5wcm90b3R5cGUpLFY9bmV3IEgoT3x8W10pO3JldHVybiBvKEYsIl9pbnZva2UiLHt2YWx1ZTpNKEMsRSxWKX0pLEZ9ZnVuY3Rpb24gZChDLCQsRSl7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzpDLmNhbGwoJCxFKX19Y2F0Y2goTyl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6T319fXQud3JhcD1jO3ZhciBmPSJzdXNwZW5kZWRTdGFydCIsaD0ic3VzcGVuZGVkWWllbGQiLGc9ImV4ZWN1dGluZyIsbT0iY29tcGxldGVkIixfPXt9O2Z1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe31mdW5jdGlvbiB4KCl7fXZhciBTPXt9O3UoUyxsLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTt2YXIgaz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1rJiZrKGsoWShbXSkpKTtiJiZiIT09biYmci5jYWxsKGIsbCkmJihTPWIpO3ZhciBUPXgucHJvdG90eXBlPXYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUyk7ZnVuY3Rpb24gTihDKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goZnVuY3Rpb24oJCl7dShDLCQsZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuX2ludm9rZSgkLEUpfSl9KX1mdW5jdGlvbiBEKEMsJCl7ZnVuY3Rpb24gRShSLEYsVixhZSl7dmFyIG9lPWQoQ1tSXSxDLEYpO2lmKG9lLnR5cGUhPT0idGhyb3ciKXt2YXIgJGU9b2UuYXJnLF9lPSRlLnZhbHVlO3JldHVybiBfZSYmdHlwZW9mIF9lPT0ib2JqZWN0IiYmci5jYWxsKF9lLCJfX2F3YWl0Iik/JC5yZXNvbHZlKF9lLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24oUSl7RSgibmV4dCIsUSxWLGFlKX0sZnVuY3Rpb24oUSl7RSgidGhyb3ciLFEsVixhZSl9KTokLnJlc29sdmUoX2UpLnRoZW4oZnVuY3Rpb24oUSl7JGUudmFsdWU9USxWKCRlKX0sZnVuY3Rpb24oUSl7cmV0dXJuIEUoInRocm93IixRLFYsYWUpfSl9YWUob2UuYXJnKX12YXIgTztvKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihSLEYpe2Z1bmN0aW9uIFYoKXtyZXR1cm4gbmV3ICQoZnVuY3Rpb24oYWUsb2Upe0UoUixGLGFlLG9lKX0pfXJldHVybiBPPU8/Ty50aGVuKFYsVik6VigpfX0pfWZ1bmN0aW9uIE0oQywkLEUpe3ZhciBPPWY7cmV0dXJuIGZ1bmN0aW9uKFIsRil7aWYoTz09PWcpdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoTz09PW0pe2lmKFI9PT0idGhyb3ciKXRocm93IEY7cmV0dXJue3ZhbHVlOmUsZG9uZTohMH19Zm9yKEUubWV0aG9kPVIsRS5hcmc9Rjs7KXt2YXIgVj1FLmRlbGVnYXRlO2lmKFYpe3ZhciBhZT1qKFYsRSk7aWYoYWUpe2lmKGFlPT09Xyljb250aW51ZTtyZXR1cm4gYWV9fWlmKEUubWV0aG9kPT09Im5leHQiKUUuc2VudD1FLl9zZW50PUUuYXJnO2Vsc2UgaWYoRS5tZXRob2Q9PT0idGhyb3ciKXtpZihPPT09Zil0aHJvdyBPPW0sRS5hcmc7RS5kaXNwYXRjaEV4Y2VwdGlvbihFLmFyZyl9ZWxzZSBFLm1ldGhvZD09PSJyZXR1cm4iJiZFLmFicnVwdCgicmV0dXJuIixFLmFyZyk7Tz1nO3ZhciBvZT1kKEMsJCxFKTtpZihvZS50eXBlPT09Im5vcm1hbCIpe2lmKE89RS5kb25lP206aCxvZS5hcmc9PT1fKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpvZS5hcmcsZG9uZTpFLmRvbmV9fW9lLnR5cGU9PT0idGhyb3ciJiYoTz1tLEUubWV0aG9kPSJ0aHJvdyIsRS5hcmc9b2UuYXJnKX19fWZ1bmN0aW9uIGooQywkKXt2YXIgRT0kLm1ldGhvZCxPPUMuaXRlcmF0b3JbRV07aWYoTz09PWUpcmV0dXJuICQuZGVsZWdhdGU9bnVsbCxFPT09InRocm93IiYmQy5pdGVyYXRvci5yZXR1cm4mJigkLm1ldGhvZD0icmV0dXJuIiwkLmFyZz1lLGooQywkKSwkLm1ldGhvZD09PSJ0aHJvdyIpfHxFIT09InJldHVybiImJigkLm1ldGhvZD0idGhyb3ciLCQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrRSsiJyBtZXRob2QiKSksXzt2YXIgUj1kKE8sQy5pdGVyYXRvciwkLmFyZyk7aWYoUi50eXBlPT09InRocm93IilyZXR1cm4gJC5tZXRob2Q9InRocm93IiwkLmFyZz1SLmFyZywkLmRlbGVnYXRlPW51bGwsXzt2YXIgRj1SLmFyZztyZXR1cm4gRj9GLmRvbmU/KCRbQy5yZXN1bHROYW1lXT1GLnZhbHVlLCQubmV4dD1DLm5leHRMb2MsJC5tZXRob2QhPT0icmV0dXJuIiYmKCQubWV0aG9kPSJuZXh0IiwkLmFyZz1lKSwkLmRlbGVnYXRlPW51bGwsXyk6RjooJC5tZXRob2Q9InRocm93IiwkLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLCQuZGVsZWdhdGU9bnVsbCxfKX1mdW5jdGlvbiBCKEMpe3ZhciAkPXt0cnlMb2M6Q1swXX07MSBpbiBDJiYoJC5jYXRjaExvYz1DWzFdKSwyIGluIEMmJigkLmZpbmFsbHlMb2M9Q1syXSwkLmFmdGVyTG9jPUNbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKCQpfWZ1bmN0aW9uIHJlKEMpe3ZhciAkPUMuY29tcGxldGlvbnx8e307JC50eXBlPSJub3JtYWwiLGRlbGV0ZSAkLmFyZyxDLmNvbXBsZXRpb249JH1mdW5jdGlvbiBIKEMpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxDLmZvckVhY2goQix0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBZKEMpe2lmKEN8fEM9PT0iIil7dmFyICQ9Q1tsXTtpZigkKXJldHVybiAkLmNhbGwoQyk7aWYodHlwZW9mIEMubmV4dD09ImZ1bmN0aW9uIilyZXR1cm4gQztpZighaXNOYU4oQy5sZW5ndGgpKXt2YXIgRT0tMSxPPWZ1bmN0aW9uIFIoKXtmb3IoOysrRTxDLmxlbmd0aDspaWYoci5jYWxsKEMsRSkpcmV0dXJuIFIudmFsdWU9Q1tFXSxSLmRvbmU9ITEsUjtyZXR1cm4gUi52YWx1ZT1lLFIuZG9uZT0hMCxSfTtyZXR1cm4gTy5uZXh0PU99fXRocm93IG5ldyBUeXBlRXJyb3IodHlwZW9mIEMrIiBpcyBub3QgaXRlcmFibGUiKX1yZXR1cm4geS5wcm90b3R5cGU9eCxvKFQsImNvbnN0cnVjdG9yIix7dmFsdWU6eCxjb25maWd1cmFibGU6ITB9KSxvKHgsImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSx5LmRpc3BsYXlOYW1lPXUoeCxhLCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihDKXt2YXIgJD10eXBlb2YgQz09ImZ1bmN0aW9uIiYmQy5jb25zdHJ1Y3RvcjtyZXR1cm4hISQmJigkPT09eXx8KCQuZGlzcGxheU5hbWV8fCQubmFtZSk9PT0iR2VuZXJhdG9yRnVuY3Rpb24iKX0sdC5tYXJrPWZ1bmN0aW9uKEMpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKEMseCk6KEMuX19wcm90b19fPXgsdShDLGEsIkdlbmVyYXRvckZ1bmN0aW9uIikpLEMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVCksQ30sdC5hd3JhcD1mdW5jdGlvbihDKXtyZXR1cm57X19hd2FpdDpDfX0sTihELnByb3RvdHlwZSksdShELnByb3RvdHlwZSxzLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0LkFzeW5jSXRlcmF0b3I9RCx0LmFzeW5jPWZ1bmN0aW9uKEMsJCxFLE8sUil7Uj09PXZvaWQgMCYmKFI9UHJvbWlzZSk7dmFyIEY9bmV3IEQoYyhDLCQsRSxPKSxSKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKCQpP0Y6Ri5uZXh0KCkudGhlbihmdW5jdGlvbihWKXtyZXR1cm4gVi5kb25lP1YudmFsdWU6Ri5uZXh0KCl9KX0sTihUKSx1KFQsYSwiR2VuZXJhdG9yIiksdShULGwsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHUoVCwidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSx0LmtleXM9ZnVuY3Rpb24oQyl7dmFyICQ9T2JqZWN0KEMpLEU9W107Zm9yKHZhciBPIGluICQpRS5wdXNoKE8pO3JldHVybiBFLnJldmVyc2UoKSxmdW5jdGlvbiBSKCl7Zm9yKDtFLmxlbmd0aDspe3ZhciBGPUUucG9wKCk7aWYoRiBpbiAkKXJldHVybiBSLnZhbHVlPUYsUi5kb25lPSExLFJ9cmV0dXJuIFIuZG9uZT0hMCxSfX0sdC52YWx1ZXM9WSxILnByb3RvdHlwZT17Y29uc3RydWN0b3I6SCxyZXNldDpmdW5jdGlvbihDKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD1lLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPWUsdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmUpLCFDKWZvcih2YXIgJCBpbiB0aGlzKSQuY2hhckF0KDApPT09InQiJiZyLmNhbGwodGhpcywkKSYmIWlzTmFOKCskLnNsaWNlKDEpKSYmKHRoaXNbJF09ZSl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIEM9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoQy50eXBlPT09InRocm93Iil0aHJvdyBDLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihDKXtpZih0aGlzLmRvbmUpdGhyb3cgQzt2YXIgJD10aGlzO2Z1bmN0aW9uIEUob2UsJGUpe3JldHVybiBGLnR5cGU9InRocm93IixGLmFyZz1DLCQubmV4dD1vZSwkZSYmKCQubWV0aG9kPSJuZXh0IiwkLmFyZz1lKSwhISRlfWZvcih2YXIgTz10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7Tz49MDstLU8pe3ZhciBSPXRoaXMudHJ5RW50cmllc1tPXSxGPVIuY29tcGxldGlvbjtpZihSLnRyeUxvYz09PSJyb290IilyZXR1cm4gRSgiZW5kIik7aWYoUi50cnlMb2M8PXRoaXMucHJldil7dmFyIFY9ci5jYWxsKFIsImNhdGNoTG9jIiksYWU9ci5jYWxsKFIsImZpbmFsbHlMb2MiKTtpZihWJiZhZSl7aWYodGhpcy5wcmV2PFIuY2F0Y2hMb2MpcmV0dXJuIEUoUi5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PFIuZmluYWxseUxvYylyZXR1cm4gRShSLmZpbmFsbHlMb2MpfWVsc2UgaWYoVil7aWYodGhpcy5wcmV2PFIuY2F0Y2hMb2MpcmV0dXJuIEUoUi5jYXRjaExvYywhMCl9ZWxzZXtpZighYWUpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxSLmZpbmFsbHlMb2MpcmV0dXJuIEUoUi5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKEMsJCl7Zm9yKHZhciBFPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtFPj0wOy0tRSl7dmFyIE89dGhpcy50cnlFbnRyaWVzW0VdO2lmKE8udHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChPLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxPLmZpbmFsbHlMb2Mpe3ZhciBSPU87YnJlYWt9fVImJihDPT09ImJyZWFrInx8Qz09PSJjb250aW51ZSIpJiZSLnRyeUxvYzw9JCYmJDw9Ui5maW5hbGx5TG9jJiYoUj1udWxsKTt2YXIgRj1SP1IuY29tcGxldGlvbjp7fTtyZXR1cm4gRi50eXBlPUMsRi5hcmc9JCxSPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PVIuZmluYWxseUxvYyxfKTp0aGlzLmNvbXBsZXRlKEYpfSxjb21wbGV0ZTpmdW5jdGlvbihDLCQpe2lmKEMudHlwZT09PSJ0aHJvdyIpdGhyb3cgQy5hcmc7cmV0dXJuIEMudHlwZT09PSJicmVhayJ8fEMudHlwZT09PSJjb250aW51ZSI/dGhpcy5uZXh0PUMuYXJnOkMudHlwZT09PSJyZXR1cm4iPyh0aGlzLnJ2YWw9dGhpcy5hcmc9Qy5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKTpDLnR5cGU9PT0ibm9ybWFsIiYmJCYmKHRoaXMubmV4dD0kKSxffSxmaW5pc2g6ZnVuY3Rpb24oQyl7Zm9yKHZhciAkPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTskPj0wOy0tJCl7dmFyIEU9dGhpcy50cnlFbnRyaWVzWyRdO2lmKEUuZmluYWxseUxvYz09PUMpcmV0dXJuIHRoaXMuY29tcGxldGUoRS5jb21wbGV0aW9uLEUuYWZ0ZXJMb2MpLHJlKEUpLF99fSxjYXRjaDpmdW5jdGlvbihDKXtmb3IodmFyICQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xOyQ+PTA7LS0kKXt2YXIgRT10aGlzLnRyeUVudHJpZXNbJF07aWYoRS50cnlMb2M9PT1DKXt2YXIgTz1FLmNvbXBsZXRpb247aWYoTy50eXBlPT09InRocm93Iil7dmFyIFI9Ty5hcmc7cmUoRSl9cmV0dXJuIFJ9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oQywkLEUpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpZKEMpLHJlc3VsdE5hbWU6JCxuZXh0TG9jOkV9LHRoaXMubWV0aG9kPT09Im5leHQiJiYodGhpcy5hcmc9ZSksX319LHR9ZnVuY3Rpb24gV2goZSx0KXsodD09bnVsbHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBXZyhlLHQpe2lmKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gV2goZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYobj09PSJPYmplY3QiJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLG49PT0iTWFwInx8bj09PSJTZXQiKXJldHVybiBBcnJheS5mcm9tKGUpO2lmKG49PT0iQXJndW1lbnRzInx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIFdoKGUsdCl9fWZ1bmN0aW9uIFBOKGUsdCl7dmFyIG49dHlwZW9mIFN5bWJvbDwidSImJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KGUpfHwobj1XZyhlKSl8fHQmJmUmJnR5cGVvZiBlLmxlbmd0aD09Im51bWJlciIpe24mJihlPW4pO3ZhciByPTAsbz1mdW5jdGlvbigpe307cmV0dXJue3M6byxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW3IrK119fSxlOmZ1bmN0aW9uKGEpe3Rocm93IGF9LGY6b319dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9dmFyIGk9ITAsbD0hMSxzO3JldHVybntzOmZ1bmN0aW9uKCl7bj1uLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgYT1uLm5leHQoKTtyZXR1cm4gaT1hLmRvbmUsYX0sZTpmdW5jdGlvbihhKXtsPSEwLHM9YX0sZjpmdW5jdGlvbigpe3RyeXshaSYmbi5yZXR1cm4hPW51bGwmJm4ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHN9fX19ZnVuY3Rpb24gT04oZSx0KXtpZih0eXBlb2YgZSE9Im9iamVjdCJ8fGU9PT1udWxsKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwoZSx0fHwiZGVmYXVsdCIpO2lmKHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybih0PT09InN0cmluZyI/U3RyaW5nOk51bWJlcikoZSl9ZnVuY3Rpb24gQU4oZSl7dmFyIHQ9T04oZSwic3RyaW5nIik7cmV0dXJuIHR5cGVvZiB0PT0ic3ltYm9sIj90OlN0cmluZyh0KX1mdW5jdGlvbiBXdChlLHQsbil7cmV0dXJuIHQ9QU4odCksdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBNTihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfWZ1bmN0aW9uIExOKGUsdCl7dmFyIG49ZT09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihuIT1udWxsKXt2YXIgcixvLGksbCxzPVtdLGE9ITAsdT0hMTt0cnl7aWYoaT0obj1uLmNhbGwoZSkpLm5leHQsdD09PTApe2lmKE9iamVjdChuKSE9PW4pcmV0dXJuO2E9ITF9ZWxzZSBmb3IoOyEoYT0ocj1pLmNhbGwobikpLmRvbmUpJiYocy5wdXNoKHIudmFsdWUpLHMubGVuZ3RoIT09dCk7YT0hMCk7fWNhdGNoKGMpe3U9ITAsbz1jfWZpbmFsbHl7dHJ5e2lmKCFhJiZuLnJldHVybiE9bnVsbCYmKGw9bi5yZXR1cm4oKSxPYmplY3QobCkhPT1sKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IG99fXJldHVybiBzfX1mdW5jdGlvbiBETigpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBJTihlLHQpe3JldHVybiBNTihlKXx8TE4oZSx0KXx8V2coZSx0KXx8RE4oKX1mdW5jdGlvbiB4eShlLHQsbixyLG8saSxsKXt0cnl7dmFyIHM9ZVtpXShsKSxhPXMudmFsdWV9Y2F0Y2godSl7bih1KTtyZXR1cm59cy5kb25lP3QoYSk6UHJvbWlzZS5yZXNvbHZlKGEpLnRoZW4ocixvKX1mdW5jdGlvbiByXyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLG8pe3ZhciBpPWUuYXBwbHkodCxuKTtmdW5jdGlvbiBsKGEpe3h5KGkscixvLGwscywibmV4dCIsYSl9ZnVuY3Rpb24gcyhhKXt4eShpLHIsbyxsLHMsInRocm93IixhKX1sKHZvaWQgMCl9KX19ZnVuY3Rpb24gak4oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gV2goZSl9ZnVuY3Rpb24gek4oZSl7aWYodHlwZW9mIFN5bWJvbDwidSImJmVbU3ltYm9sLml0ZXJhdG9yXSE9bnVsbHx8ZVsiQEBpdGVyYXRvciJdIT1udWxsKXJldHVybiBBcnJheS5mcm9tKGUpfWZ1bmN0aW9uIEZOKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBVaChlKXtyZXR1cm4gak4oZSl8fHpOKGUpfHxXZyhlKXx8Rk4oKX12YXIgQk49L15kYXRhOihpbWFnZVwvKHBuZ3xqcGVnfGpwZ3xnaWZ8d2VicHxibXB8dGlmZnxpY298c3ZnXCt4bWwpKTtiYXNlNjQsLztmdW5jdGlvbiBVZyhlKXt2YXIgdD1CTi5leGVjKGUpO2lmKHQmJnRbMV0pcmV0dXJuIHRbMV19ZnVuY3Rpb24gVmcoZSl7cmV0dXJuIGU9PT0iaW1hZ2Uvc3ZnK3htbCI/InN2ZyI6ZT09PSJpbWFnZS92bmQubWljcm9zb2Z0Lmljb24iPyJpY28iOmUuc3RhcnRzV2l0aCgiaW1hZ2UvIik/ZS5zbGljZSg2KTplfXZhciBXTj0vXmgoW1xkK10pJC87ZnVuY3Rpb24gVU4oZSl7dmFyIHQ9ZS5jaGlsZHJlbi5tYXAoVk4pO3JldHVybiBITih0KX1mdW5jdGlvbiBWTihlKXtpZihlLnR5cGU9PT0iaGVhZGluZyIpe3ZhciB0LG49IiIscj1OdW1iZXIoKHQ9ZS50YWcubWF0Y2goV04pKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnRbMV0pO2lmKE51bWJlci5pc05hTihyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGVhZGVyIGRlcHRoIik7Zm9yKHZhciBvPTA7bzxOdW1iZXIocik7bysrKW4rPSIjIjt2YXIgaT1bIiIuY29uY2F0KG4sIiAiKV07cmV0dXJue3R5cGU6ImJsb2NrIixjaGlsZHJlbjppLmNvbmNhdC5hcHBseShpLFVoKGUuY2hpbGRyZW4ubWFwKEhoKSkpfX1lbHNle2lmKGUudHlwZT09PSJwYXJhZ3JhcGgiKXJldHVybiBlLmNoaWxkcmVuLmxlbmd0aD09PTA/e3R5cGU6ImJsb2NrIixjaGlsZHJlbjpbIjxiciAvPiJdfTp7dHlwZToiYmxvY2siLGNoaWxkcmVuOmUuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHMpe3JldHVybiBIaChzKX0pfTtpZihlLnR5cGU9PT0ibGlzdCIpcmV0dXJue3R5cGU6ImJsb2NrIixjaGlsZHJlbjplLmNoaWxkcmVuLmZsYXRNYXAoZnVuY3Rpb24ocyxhKXtyZXR1cm4gaV8obF8oZSkscywwLGE9PT0wKX0pfTt2YXIgbD1lO3Rocm93IG5ldyBFcnJvcigiVW5oYW5kbGVkIG5vZGUgdHlwZTogIi5jb25jYXQoInR5cGUiaW4gbD8iZXhoYXVzdGl2ZUNoZWNrLnR5cGUiOiJ1bmtub3duIikpfX1mdW5jdGlvbiBITihlKXtyZXR1cm4gVmguYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFZoKCl7cmV0dXJuIFZoPXJfKHBhKCkubWFyayhmdW5jdGlvbiBlKHQpe3ZhciBuLHIsbyxpLGwscyxhLHUsYztyZXR1cm4gcGEoKS53cmFwKGZ1bmN0aW9uKGYpe2Zvcig7Oylzd2l0Y2goZi5wcmV2PWYubmV4dCl7Y2FzZSAwOm49W2AKYF0scj1bXSxvPXt9LGk9MDtjYXNlIDQ6aWYoIShpPHQubGVuZ3RoKSl7Zi5uZXh0PTQ0O2JyZWFrfWw9dFtpXSxzPVBOKGwuY2hpbGRyZW4pLGYucHJldj03LHMucygpO2Nhc2UgOTppZigoYT1zLm4oKSkuZG9uZSl7Zi5uZXh0PTMyO2JyZWFrfWlmKHU9YS52YWx1ZSx0eXBlb2YgdSE9InN0cmluZyIpe2YubmV4dD0xNTticmVha31uW24ubGVuZ3RoLTFdKz11LGYubmV4dD0zMDticmVhaztjYXNlIDE1OmlmKHUudHlwZSE9PSJpbWFnZSIpe2YubmV4dD0yMzticmVha31yZXR1cm4gZi50MD1yLGYubmV4dD0xOSxYTih1LG8pO2Nhc2UgMTk6Zi50MT1mLnNlbnQsZi50MC5wdXNoLmNhbGwoZi50MCxmLnQxKSxmLm5leHQ9Mjk7YnJlYWs7Y2FzZSAyMzppZih1LnR5cGUhPT0ibGluayIpe2YubmV4dD0yNzticmVha31yLnB1c2goSk4odSkpLGYubmV4dD0yOTticmVhaztjYXNlIDI3OnRocm93IGM9dSxuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbm9kZSB0eXBlOiAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShjLG51bGwsMikpKTtjYXNlIDI5Om4ucHVzaCgiIik7Y2FzZSAzMDpmLm5leHQ9OTticmVhaztjYXNlIDMyOmYubmV4dD0zNzticmVhaztjYXNlIDM0OmYucHJldj0zNCxmLnQyPWYuY2F0Y2goNykscy5lKGYudDIpO2Nhc2UgMzc6cmV0dXJuIGYucHJldj0zNyxzLmYoKSxmLmZpbmlzaCgzNyk7Y2FzZSA0MDppPT09dC5sZW5ndGgtMT9uW24ubGVuZ3RoLTFdKz1gCmA6bltuLmxlbmd0aC0xXSs9YAoKYDtjYXNlIDQxOmkrKyxmLm5leHQ9NDticmVhaztjYXNlIDQ0OnJldHVybiBmLmFicnVwdCgicmV0dXJuIixXdChXdChXdChXdCh7fSxIdCwicmljaHRleHQiKSwidGVtcGxhdGVTdHJpbmdzIixuKSwiZXhwcnMiLHIpLCJmaWxlcyIsbykpO2Nhc2UgNDU6Y2FzZSJlbmQiOnJldHVybiBmLnN0b3AoKX19LGUsbnVsbCxbWzcsMzQsMzcsNDBdXSl9KSksVmguYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG9fKGUpe3ZhciB0PXR5cGVvZiBlLmZvcm1hdD09Im51bWJlciI/R04oZS5mb3JtYXQpOltdLG49ZS50ZXh0LnRyaW1TdGFydCgpLHI9ZS50ZXh0Lmxlbmd0aC1uLmxlbmd0aDtuPW4udHJpbUVuZCgpO3ZhciBvPWUudGV4dC5sZW5ndGgtbi5sZW5ndGgtcjtyZXR1cm4gdC5pbmNsdWRlcygiYm9sZCIpJiZ0LmluY2x1ZGVzKCJpdGFsaWMiKT9uPSIqKioiLmNvbmNhdChuLCIqKioiKTp0LmluY2x1ZGVzKCJib2xkIik/bj0iKioiLmNvbmNhdChuLCIqKiIpOnQuaW5jbHVkZXMoIml0YWxpYyIpJiYobj0iXyIuY29uY2F0KG4sIl8iKSksdC5pbmNsdWRlcygibGluZS10aHJvdWdoIikmJihuPSJ+fiIuY29uY2F0KG4sIn5+IikpLCIiLmNvbmNhdCgiICIucmVwZWF0KHIpKS5jb25jYXQobikuY29uY2F0KCIgIi5yZXBlYXQobykpfWZ1bmN0aW9uIEhoKGUpe3JldHVybiBlLnR5cGU9PT0idGV4dCI/b18oZSk6ZS50eXBlPT09ImxpbmVicmVhayI/YApgOmV9ZnVuY3Rpb24gaV8oZSx0LG4pe3ZhciByLG89YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLGk9bz8iIjpgCmAsbD1bIiIuY29uY2F0KGkpLmNvbmNhdCgiICIucmVwZWF0KG4pKS5jb25jYXQoZSldO3JldHVybigocj10LmNoaWxkcmVuKT09PW51bGx8fHI9PT12b2lkIDB8fChyPXJbMF0pPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci50eXBlKSE9PSJsaXN0IiYmbC5wdXNoKCIgIiksbC5jb25jYXQodC5jaGlsZHJlbi5mbGF0TWFwKGZ1bmN0aW9uKHMpe3JldHVybiBzLnR5cGU9PT0ibGlzdCI/cy5jaGlsZHJlbi5mbGF0TWFwKGZ1bmN0aW9uKGEpe3JldHVybiBpXyhsXyhzKSxhLG4rNCl9KTpbSGgocyldfSkpfWZ1bmN0aW9uIGxfKGUpe2lmKGUubGlzdFR5cGU9PT0iYnVsbGV0IilyZXR1cm4iLSI7aWYoZS5saXN0VHlwZT09PSJudW1iZXIiKXJldHVybiIxLiI7dGhyb3cgbmV3IEVycm9yKCJVbmhhbmRsZWQgbGlzdCB0eXBlOiAiLmNvbmNhdChlLmxpc3RUeXBlKSl9dmFyIEtOPXtib2xkOjEsaXRhbGljOjIsImxpbmUtdGhyb3VnaCI6NH07ZnVuY3Rpb24gR04oZSl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKEtOKS5mbGF0TWFwKGZ1bmN0aW9uKHQpe3ZhciBuPUlOKHQsMikscj1uWzBdLG89blsxXTtyZXR1cm4obyZlKT09PW8/W3JdOltdfSl9dmFyIFlOPW5ldyBUZXh0RW5jb2RlcjtmdW5jdGlvbiBYTihlLHQpe3JldHVybiBLaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gS2goKXtyZXR1cm4gS2g9cl8ocGEoKS5tYXJrKGZ1bmN0aW9uIGUodCxuKXt2YXIgcixvLGksbCxzO3JldHVybiBwYSgpLndyYXAoZnVuY3Rpb24odSl7Zm9yKDs7KXN3aXRjaCh1LnByZXY9dS5uZXh0KXtjYXNlIDA6aWYoIXQuc3JjLnN0YXJ0c1dpdGgoImRhdGE6Iikpe3UubmV4dD0xMzticmVha31yZXR1cm4gdS5uZXh0PTMsS3QuZ2V0U0hBMjU2SGFzaChZTi5lbmNvZGUodC5zcmMpKTtjYXNlIDM6aWYocj11LnNlbnQsbz1VZyh0LnNyYyksbyE9PXZvaWQgMCl7dS5uZXh0PTc7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZGV0ZWN0IE1pbWUgVHlwZSBmb3IgaW1hZ2U6ICIuY29uY2F0KHQuc3JjKSk7Y2FzZSA3OnJldHVybiBpPVZnKG8pLGw9Ii9wdWJsaWMvIi5jb25jYXQociwiLiIpLmNvbmNhdChpKSxuW2xdPXQuc3JjLHUuYWJydXB0KCJyZXR1cm4iLFd0KFd0KFd0KHt9LEh0LCJmaWxlIiksdm4sbCksIm1ldGFkYXRhIix7d2lkdGg6dC53aWR0aHx8MCxoZWlnaHQ6dC5oZWlnaHR8fDAsc2hhMjU2OnJ8fCIifSkpO2Nhc2UgMTM6cmV0dXJuIHM9UU4oInNoYTI1NiIsdC5zcmMpLHUuYWJydXB0KCJyZXR1cm4iLFd0KFd0KFd0KHt9LEh0LCJmaWxlIiksdm4sIi9wdWJsaWMiLmNvbmNhdCh0LnNyYy5zcGxpdCgiPyIpWzBdKSksIm1ldGFkYXRhIix7d2lkdGg6dC53aWR0aHx8MCxoZWlnaHQ6dC5oZWlnaHR8fDAsc2hhMjU2OnN8fCIifSkpO2Nhc2UgMTU6Y2FzZSJlbmQiOnJldHVybiB1LnN0b3AoKX19LGUpfSkpLEtoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBRTihlLHQpe3ZhciBuPXQuc3BsaXQoIj8iKTtpZighKG4ubGVuZ3RoPDIpKXt2YXIgcj1uWzFdLG89bmV3IFVSTFNlYXJjaFBhcmFtcyhyKTtpZihvLmhhcyhlKSlyZXR1cm4gby5nZXQoZSl9fWZ1bmN0aW9uIEpOKGUpe3JldHVybiBXdChXdChXdCh7fSxIdCwibGluayIpLCJocmVmIixlLnVybCksImNoaWxkcmVuIixlLmNoaWxkcmVuLm1hcChvXykpfWZ1bmN0aW9uIHd5KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcihmdW5jdGlvbihvKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG8pLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gWGUoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdIT1udWxsP2FyZ3VtZW50c1t0XTp7fTt0JTI/d3koT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe1d0KGUscixuW3JdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOnd5KE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixyKSl9KX1yZXR1cm4gZX12YXIgbHI9e3ZlcnNpb246MSxmb3JtYXQ6IiIsaW5kZW50OjAsZGlyZWN0aW9uOm51bGx9O2Z1bmN0aW9uIEJsKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIFhlKFhlKHt9LGxyKSx7fSx7dHlwZToidGV4dCIsZm9ybWF0OiIiLHRleHQ6ZX0pO2lmKCJ0YWciaW4gZSlzd2l0Y2goZS50YWcpe2Nhc2UiaDEiOnJldHVybiBEaShlKTtjYXNlImgyIjpyZXR1cm4gRGkoZSk7Y2FzZSJoMyI6cmV0dXJuIERpKGUpO2Nhc2UiaDQiOnJldHVybiBEaShlKTtjYXNlImg1IjpyZXR1cm4gRGkoZSk7Y2FzZSJoNiI6cmV0dXJuIERpKGUpO2Nhc2UibGkiOnJldHVybiByMihlKTtjYXNlInAiOnJldHVybiB0MihlKTtjYXNlInVsIjpyZXR1cm4gX3koZSk7Y2FzZSJvbCI6cmV0dXJuIF95KGUpO2Nhc2Uic3BhbiI6cmV0dXJuIHNfKGUpO2Nhc2UiYSI6cmV0dXJuIHFOKGUpO2Nhc2UiaW1nIjpyZXR1cm4gWk4oZSk7Y2FzZSJiciI6cmV0dXJuIHQ/WGUoWGUoe30sbHIpLHt9LHt0eXBlOiJsaW5lYnJlYWsifSk6bjIoKTtkZWZhdWx0OnRocm93IEVycm9yKCJVbmV4cGVjdGVkIG5vZGUgdGFnOiAiK0pTT04uc3RyaW5naWZ5KGUsbnVsbCwyKSl9ZWxzZSB0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBub2RlOiAiK0pTT04uc3RyaW5naWZ5KGUsbnVsbCwyKSl9ZnVuY3Rpb24gWk4oZSl7dmFyIHQ9ZS5zcmM7cmV0dXJuIFhlKFhlKHt9LGxyKSx7fSx7dHlwZToiaW1hZ2UiLHNyYzp0LHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fSl9ZnVuY3Rpb24gcU4oZSl7cmV0dXJuIFhlKFhlKHt9LGxyKSx7fSx7dHlwZToibGluayIsdXJsOmUuaHJlZixjaGlsZHJlbjplLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gQmwodCl9KX0pfWZ1bmN0aW9uIGUyKGUpe3JldHVybiBYZShYZSh7fSxscikse30se2Zvcm1hdDoiIix0eXBlOiJyb290IixjaGlsZHJlbjplLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gQmwodCl9KX0pfWZ1bmN0aW9uIERpKGUpe3JldHVybiBYZShYZSh7fSxscikse30se3R5cGU6ImhlYWRpbmciLHRhZzplLnRhZyxjaGlsZHJlbjplLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gQmwodCl9KX0pfWZ1bmN0aW9uIHQyKGUpe3JldHVybiBYZShYZSh7fSxscikse30se3R5cGU6InBhcmFncmFwaCIsY2hpbGRyZW46ZS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJsKHQsITApfSl9KX1mdW5jdGlvbiBuMigpe3JldHVybiBYZShYZSh7fSxscikse30se3R5cGU6InBhcmFncmFwaCIsY2hpbGRyZW46W119KX1mdW5jdGlvbiByMihlKXtyZXR1cm4gWGUoWGUoe30sbHIpLHt9LHt0eXBlOiJsaXN0aXRlbSIsY2hpbGRyZW46ZS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJsKHQsITApfSl9KX1mdW5jdGlvbiBfeShlKXtyZXR1cm4gWGUoWGUoe30sbHIpLHt9LHt0eXBlOiJsaXN0IixsaXN0VHlwZTplLnRhZz09PSJvbCI/Im51bWJlciI6ImJ1bGxldCIsY2hpbGRyZW46ZS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJsKHQpfSl9LGUuZGlyP3tkaXJlY3Rpb246ZS5kaXJ9OntkaXJlY3Rpb246bnVsbH0pfXZhciBvMj17Ym9sZDoxLGl0YWxpYzoyLCJsaW5lLXRocm91Z2giOjR9O2Z1bmN0aW9uIGkyKGUpe3JldHVybiBlLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0fG8yW25dfSwwKX1mdW5jdGlvbiBzXyhlKXt2YXIgdD1lLmNoaWxkcmVuWzBdO3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/WGUoWGUoe30sbHIpLHt9LHt0eXBlOiJ0ZXh0Iix0ZXh0OnQsZm9ybWF0OmkyKGUuY2xhc3Nlcyl9KTpzXyhYZShYZSh7fSx0KSx7fSx7Y2xhc3NlczplLmNsYXNzZXMuY29uY2F0KHQuY2xhc3Nlcyl9KSl9dmFyICRjPSc8dmFsIHZhbHVlPSInLEdoPSciPicsWWg9IjwvdmFsPiI7ZnVuY3Rpb24gUW4oZSx0LG4pe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsbz1bXSxpPWZ1bmN0aW9uKCl7dmFyIGE9ZVtuXTtpZihhLnR5cGU9PT0iaGVhZGluZyIpby5wdXNoKHt0YWc6ImgiLmNvbmNhdChhLmRlcHRoKSxjaGlsZHJlbjpRbihhLnRva2Vucz9hLnRva2VuczpbXSx0LDApLmNoaWxkcmVufSk7ZWxzZSBpZihhLnR5cGU9PT0icGFyYWdyYXBoIilvLnB1c2goe3RhZzoicCIsY2hpbGRyZW46UW4oYS50b2tlbnM/YS50b2tlbnM6W10sdCwwKS5jaGlsZHJlbn0pO2Vsc2UgaWYoYS50eXBlPT09InN0cm9uZyIpby5wdXNoKHt0YWc6InNwYW4iLGNsYXNzZXM6WyJib2xkIl0sY2hpbGRyZW46UW4oYS50b2tlbnM/YS50b2tlbnM6W10sdCwwKS5jaGlsZHJlbn0pO2Vsc2UgaWYoYS50eXBlPT09ImVtIilvLnB1c2goe3RhZzoic3BhbiIsY2xhc3NlczpbIml0YWxpYyJdLGNoaWxkcmVuOlFuKGEudG9rZW5zP2EudG9rZW5zOltdLHQsMCkuY2hpbGRyZW59KTtlbHNlIGlmKGEudHlwZT09PSJkZWwiKW8ucHVzaCh7dGFnOiJzcGFuIixjbGFzc2VzOlsibGluZS10aHJvdWdoIl0sY2hpbGRyZW46UW4oYS50b2tlbnM/YS50b2tlbnM6W10sdCwwKS5jaGlsZHJlbn0pO2Vsc2UgaWYoYS50eXBlPT09InRleHQiKWlmKCJ0b2tlbnMiaW4gYSYmQXJyYXkuaXNBcnJheShhLnRva2Vucykpby5wdXNoLmFwcGx5KG8sVWgoUW4oYS50b2tlbnMsdCxuLHIpLmNoaWxkcmVuKSk7ZWxzZSBpZihyJiZ0eXBlb2YgYS5yYXc9PSJzdHJpbmciKXt2YXIgdT1hLnJhdy5zcGxpdChgCmApLGM9dS5mbGF0TWFwKGZ1bmN0aW9uKFMsayl7cmV0dXJuIGs9PT11Lmxlbmd0aC0xP1tTXTpbUyx7dGFnOiJiciIsY2hpbGRyZW46W119XX0pO28ucHVzaC5hcHBseShvLFVoKGMpKX1lbHNlIG8ucHVzaChhLnJhdyk7ZWxzZSBpZihhLnR5cGU9PT0ibGlzdCIpby5wdXNoKHt0YWc6YS5vcmRlcmVkPyJvbCI6InVsIixjaGlsZHJlbjpRbihhLml0ZW1zLHQsMCkuY2hpbGRyZW59KTtlbHNlIGlmKGEudHlwZT09PSJsaXN0X2l0ZW0iKW8ucHVzaCh7dGFnOiJsaSIsY2hpbGRyZW46UW4oYS50b2tlbnM/YS50b2tlbnM6W10sdCwwLCEwKS5jaGlsZHJlbn0pO2Vsc2UgaWYoYS50eXBlIT09InNwYWNlIilpZihhLnR5cGU9PT0iaHRtbCIpe2lmKGEudGV4dD09PVloKXJldHVybnt2OntjaGlsZHJlbjpvLGN1cnNvcjpufX07dmFyIGQ9YS50ZXh0LmluZGV4T2YoR2gpO2lmKGEudGV4dC5zdGFydHNXaXRoKCRjKSYmZD4tMSl7dmFyIGY9TnVtYmVyKGEudGV4dC5zbGljZSgkYy5sZW5ndGgsZCkpO2lmKE51bWJlci5pc05hTihmKSl0aHJvdyBFcnJvcigiSWxsZWdhbCB2YWwgaW50ZXJtZWRpYXRlIG5vZGU6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGEpKSk7dmFyIGg9UW4oZS5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIFMudHlwZT09PSJsaW5rInx8Uy50eXBlPT09Imxpc3QiP3t0eXBlOiJ0ZXh0IixyYXc6Uy5yYXcsdGV4dDpTLnJhd306U30pLHQsbisxKSxnPWguY2hpbGRyZW4sbT1oLmN1cnNvcixfPXRbZl07aWYoXy5fdHlwZT09PSJsaW5rIilvLnB1c2goe3RhZzoiYSIsaHJlZjpfLmhyZWYsY2hpbGRyZW46Z30pO2Vsc2UgaWYoXy5fdHlwZT09PSJmaWxlIil7dmFyIHYseTtvLnB1c2goe3RhZzoiaW1nIixzcmM6S3QuY29udmVydEZpbGVTb3VyY2UoXykudXJsLHdpZHRoOih2PV8ubWV0YWRhdGEpPT09bnVsbHx8dj09PXZvaWQgMD92b2lkIDA6di53aWR0aCxoZWlnaHQ6KHk9Xy5tZXRhZGF0YSk9PT1udWxsfHx5PT09dm9pZCAwP3ZvaWQgMDp5LmhlaWdodCxjaGlsZHJlbjpbXX0pfW49bX12YXIgeD0vPGJyXHMqXC8/Pi9naTthLnRleHQudHJpbSgpLm1hdGNoKHgpJiZvLnB1c2goe3RhZzoiYnIiLGNoaWxkcmVuOltdfSl9ZWxzZSBhLnR5cGU9PT0ibGluayI/YS5yYXc9PT1hLmhyZWY/by5wdXNoKGEucmF3KTpvLnB1c2goe3RhZzoiYSIsaHJlZjphLmhyZWYsY2hpbGRyZW46UW4oYS50b2tlbnM/YS50b2tlbnM6W10sdCwwKS5jaGlsZHJlbn0pOmEudHlwZT09PSJiciI/by5wdXNoKHt0YWc6ImJyIixjaGlsZHJlbjpbXX0pOmNvbnNvbGUuZXJyb3IoIkNvdWxkIG5vdCBwYXJzZSBtYXJrZG93bjogdW5zdXBwb3J0ZWQgdG9rZW4gdHlwZTogIi5jb25jYXQoYS50eXBlLCIuIEZvdW5kOiAiKS5jb25jYXQoYS5yYXcpKTtuKyt9LGw7bjxlLmxlbmd0aDspaWYobD1pKCksbClyZXR1cm4gbC52O3JldHVybntjaGlsZHJlbjpvLGN1cnNvcjpufX1mdW5jdGlvbiBhXyhlKXt2YXIgdD1lLnRlbXBsYXRlU3RyaW5ncyxuPWUuZXhwcnMscj10LmZsYXRNYXAoZnVuY3Rpb24oYSx1KXt2YXIgYz1uW3VdO3JldHVybiBjP2NbSHRdPT09ImxpbmsiP2EuY29uY2F0KCIiLmNvbmNhdCgkYykuY29uY2F0KHUpLmNvbmNhdChHaCkuY29uY2F0KGMuY2hpbGRyZW5bMF0pLmNvbmNhdChZaCkpOmEuY29uY2F0KCIiLmNvbmNhdCgkYykuY29uY2F0KHUpLmNvbmNhdChHaCkuY29uY2F0KFloKSk6YX0pLmpvaW4oIiIpLG89Uk4ocix7Z2ZtOiEwfSksaT1RbihvLG4sMCksbD1pLmNoaWxkcmVuLHM9aS5jdXJzb3I7aWYocyE9PW8ubGVuZ3RoKXRocm93IEVycm9yKCJVbmV4cGVjdGVkbHkgdGVybWluYXRlZCBtYXJrZG93biBwYXJzaW5nLiBQb3NzaWJsZSByZWFzb246IHVuY2xvc2VkIGh0bWwgdGFnPyIpO3JldHVybiBXdChXdCh7fSxIdCwicmljaHRleHQiKSwiY2hpbGRyZW4iLGwpfUt0LlZBTF9TRVNTSU9OX0NPT0tJRTtLdC5WQUxfU1RBVEVfQ09PS0lFO0t0LlZBTF9FTkFCTEVfQ09PS0lFX05BTUU7dmFyIHVuPXt9LEk9e307bGV0IHBkPXt9LHVfPXt9LGdhPXt9LEZzPXt9LFhoPXt9LHBsPXt9LEhnPXt9LFFoPXt9LG1hPXt9LHZhPXt9LHlvPXt9LEtnPXt9LEdnPXt9LGNfPXt9LGRfPXt9LGZfPXt9LGhfPXt9LHBfPXt9LGdfPXt9LG1fPXt9LGtjPXt9LHZfPXt9LHlfPXt9LHhfPXt9LHdfPXt9LF9fPXt9LFNfPXt9LEVfPXt9LENfPXt9LCRfPXt9LFlnPXt9LFhnPXt9LEpoPXt9LGtfPXt9LFRfPXt9LGJfPXt9O2Z1bmN0aW9uIEsoZSl7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtczt0LmFwcGVuZCgiY29kZSIsZSk7Zm9yKGxldCBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0LmFwcGVuZCgidiIsYXJndW1lbnRzW25dKTt0aHJvdyBFcnJvcihgTWluaWZpZWQgTGV4aWNhbCBlcnJvciAjJHtlfTsgdmlzaXQgaHR0cHM6Ly9sZXhpY2FsLmRldi9kb2NzL2Vycm9yPyR7dH0gZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLmApfWxldCBacj10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudDwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudDwidSIsbDI9WnImJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQ/ZG9jdW1lbnQuZG9jdW1lbnRNb2RlOm51bGwsRnQ9WnImJi9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLEFvPVpyJiYvXig/IS4qU2VhbW9ua2V5KSg/PS4qRmlyZWZveCkuKi9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksVGM9WnImJiJJbnB1dEV2ZW50ImluIHdpbmRvdyYmIWwyPyJnZXRUYXJnZXRSYW5nZXMiaW4gbmV3IHdpbmRvdy5JbnB1dEV2ZW50KCJpbnB1dCIpOiExLFFnPVpyJiYvVmVyc2lvblwvW1xkLl0rLipTYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksZ2Q9WnImJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhd2luZG93Lk1TU3RyZWFtLHMyPVpyJiYvXig/PS4qQ2hyb21lKS4qL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxKZz1aciYmL0FwcGxlV2ViS2l0XC9bXGQuXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiFzMixtZD1RZ3x8Z2R8fEpnPyLCoCI6IuKAiyIsYTI9QW8/IsKgIjptZCx1Mj0vXlteQS1aYS16XHUwMGMwLVx1MDBkNlx1MDBkOC1cdTAwZjZcdTAwZjgtXHUwMmI4XHUwMzAwLVx1MDU5MFx1MDgwMC1cdTFmZmZcdTIwMGVcdTJjMDAtXHVmYjFjXHVmZTAwLVx1ZmU2Zlx1ZmVmZC1cdWZmZmZdKltcdTA1OTEtXHUwN2ZmXHVmYjFkLVx1ZmRmZFx1ZmU3MC1cdWZlZmNdLyxjMj0vXlteXHUwNTkxLVx1MDdmZlx1ZmIxZC1cdWZkZmRcdWZlNzAtXHVmZWZjXSpbQS1aYS16XHUwMGMwLVx1MDBkNlx1MDBkOC1cdTAwZjZcdTAwZjgtXHUwMmI4XHUwMzAwLVx1MDU5MFx1MDgwMC1cdTFmZmZcdTIwMGVcdTJjMDAtXHVmYjFjXHVmZTAwLVx1ZmU2Zlx1ZmVmZC1cdWZmZmZdLyxsaT17Ym9sZDoxLGNvZGU6MTYsaGlnaGxpZ2h0OjEyOCxpdGFsaWM6MixzdHJpa2V0aHJvdWdoOjQsc3Vic2NyaXB0OjMyLHN1cGVyc2NyaXB0OjY0LHVuZGVybGluZTo4fSxkMj17ZGlyZWN0aW9ubGVzczoxLHVubWVyZ2VhYmxlOjJ9LFN5PXtjZW50ZXI6MixlbmQ6NixqdXN0aWZ5OjQsbGVmdDoxLHJpZ2h0OjMsc3RhcnQ6NX0sZjI9ezI6ImNlbnRlciIsNjoiZW5kIiw0OiJqdXN0aWZ5IiwxOiJsZWZ0IiwzOiJyaWdodCIsNToic3RhcnQifSxoMj17bm9ybWFsOjAsc2VnbWVudGVkOjIsdG9rZW46MX0scDI9ezA6Im5vcm1hbCIsMjoic2VnbWVudGVkIiwxOiJ0b2tlbiJ9LFpoPSExLFpnPTA7ZnVuY3Rpb24gZzIoZSl7Wmc9ZS50aW1lU3RhbXB9ZnVuY3Rpb24geGYoZSx0LG4pe3JldHVybiB0Ll9fbGV4aWNhbExpbmVCcmVhaz09PWV8fGVbYF9fbGV4aWNhbEtleV8ke24uX2tleX1gXSE9PXZvaWQgMH1mdW5jdGlvbiBtMihlKXtyZXR1cm4gZS5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCk9PntsZXQgdD1LZSgpO3JldHVybiB0IT09bnVsbD90LmNsb25lKCk6bnVsbH0pfWZ1bmN0aW9uIE5fKGUsdCxuKXtaaD0hMDtsZXQgcj0xMDA8cGVyZm9ybWFuY2Uubm93KCktWmc7dHJ5e05uKGUsKCk9PntsZXQgbz1LZSgpfHxtMihlKTt2YXIgaT1uZXcgTWFwLGw9ZS5nZXRSb290RWxlbWVudCgpLHM9ZS5fZWRpdG9yU3RhdGUsYT1lLl9ibG9ja0N1cnNvckVsZW1lbnQ7bGV0IHU9ITEsYz0iIjtmb3IodmFyIGQ9MDtkPHQubGVuZ3RoO2QrKyl7dmFyIGY9dFtkXSxoPWYudHlwZSxnPWYudGFyZ2V0LG09emEoZyxzKTtpZighKG09PT1udWxsJiZnIT09bHx8VmUobSkpKXtpZihoPT09ImNoYXJhY3RlckRhdGEiKXtpZihmPXImJloobSkpZTp7Zj1vLGg9Zzt2YXIgXz1tO2lmKGZlKGYpKXt2YXIgdj1mLmFuY2hvci5nZXROb2RlKCk7aWYodi5pcyhfKSYmZi5mb3JtYXQhPT12LmdldEZvcm1hdCgpKXtmPSExO2JyZWFrIGV9fWY9aC5ub2RlVHlwZT09PTMmJl8uaXNBdHRhY2hlZCgpfWYmJihfPU5yKGUuX3dpbmRvdyksaD1mPW51bGwsXyE9PW51bGwmJl8uYW5jaG9yTm9kZT09PWcmJihmPV8uYW5jaG9yT2Zmc2V0LGg9Xy5mb2N1c09mZnNldCksZz1nLm5vZGVWYWx1ZSxnIT09bnVsbCYmb20obSxnLGYsaCwhMSkpfWVsc2UgaWYoaD09PSJjaGlsZExpc3QiKXtmb3IodT0hMCxoPWYuYWRkZWROb2RlcyxfPTA7XzxoLmxlbmd0aDtfKyspe3Y9aFtfXTt2YXIgeT1EXyh2KSx4PXYucGFyZW50Tm9kZTt4PT1udWxsfHx2PT09YXx8eSE9PW51bGx8fHYubm9kZU5hbWU9PT0iQlIiJiZ4Zih2LHgsZSl8fChBbyYmKHk9di5pbm5lclRleHR8fHYubm9kZVZhbHVlKSYmKGMrPXkpLHgucmVtb3ZlQ2hpbGQodikpfWlmKGY9Zi5yZW1vdmVkTm9kZXMsaD1mLmxlbmd0aCwwPGgpe2ZvcihfPTAsdj0wO3Y8aDt2KyspeD1mW3ZdLCh4Lm5vZGVOYW1lPT09IkJSIiYmeGYoeCxnLGUpfHxhPT09eCkmJihnLmFwcGVuZENoaWxkKHgpLF8rKyk7aCE9PV8mJihnPT09bCYmKG09cy5fbm9kZU1hcC5nZXQoInJvb3QiKSksaS5zZXQoZyxtKSl9fX19aWYoMDxpLnNpemUpZm9yKGxldFtTLGtdb2YgaSlpZihXKGspKWZvcihpPWsuZ2V0Q2hpbGRyZW5LZXlzKCksbD1TLmZpcnN0Q2hpbGQscz0wO3M8aS5sZW5ndGg7cysrKWE9ZS5nZXRFbGVtZW50QnlLZXkoaVtzXSksYSE9PW51bGwmJihsPT1udWxsPyhTLmFwcGVuZENoaWxkKGEpLGw9YSk6bCE9PWEmJlMucmVwbGFjZUNoaWxkKGEsbCksbD1sLm5leHRTaWJsaW5nKTtlbHNlIFooaykmJmsubWFya0RpcnR5KCk7aWYoaT1uLnRha2VSZWNvcmRzKCksMDxpLmxlbmd0aCl7Zm9yKGw9MDtsPGkubGVuZ3RoO2wrKylmb3IoYT1pW2xdLHM9YS5hZGRlZE5vZGVzLGE9YS50YXJnZXQsZD0wO2Q8cy5sZW5ndGg7ZCsrKW09c1tkXSxnPW0ucGFyZW50Tm9kZSxnPT1udWxsfHxtLm5vZGVOYW1lIT09IkJSInx8eGYobSxhLGUpfHxnLnJlbW92ZUNoaWxkKG0pO24udGFrZVJlY29yZHMoKX1vIT09bnVsbCYmKHUmJihvLmRpcnR5PSEwLFNyKG8pKSxBbyYmRl8oZSkmJm8uaW5zZXJ0UmF3VGV4dChjKSl9KX1maW5hbGx5e1poPSExfX1mdW5jdGlvbiBSXyhlKXtsZXQgdD1lLl9vYnNlcnZlcjtpZih0IT09bnVsbCl7bGV0IG49dC50YWtlUmVjb3JkcygpO05fKGUsbix0KX19ZnVuY3Rpb24gUF8oZSl7Wmc9PT0wJiZ5ZChlKS5hZGRFdmVudExpc3RlbmVyKCJ0ZXh0SW5wdXQiLGcyLCEwKSxlLl9vYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcigodCxuKT0+e05fKGUsdCxuKX0pfWZ1bmN0aW9uIEV5KGUsdCl7bGV0IG49ZS5fX21vZGUscj1lLl9fZm9ybWF0O2U9ZS5fX3N0eWxlO2xldCBvPXQuX19tb2RlLGk9dC5fX2Zvcm1hdDtyZXR1cm4gdD10Ll9fc3R5bGUsKG49PT1udWxsfHxuPT09bykmJihyPT09bnVsbHx8cj09PWkpJiYoZT09PW51bGx8fGU9PT10KX1mdW5jdGlvbiBDeShlLHQpe2xldCBuPWUubWVyZ2VXaXRoU2libGluZyh0KSxyPW50KCkuX25vcm1hbGl6ZWROb2RlcztyZXR1cm4gci5hZGQoZS5fX2tleSksci5hZGQodC5fX2tleSksbn1mdW5jdGlvbiBPXyhlKXtpZihlLl9fdGV4dD09PSIiJiZlLmlzU2ltcGxlVGV4dCgpJiYhZS5pc1VubWVyZ2VhYmxlKCkpZS5yZW1vdmUoKTtlbHNle2Zvcih2YXIgdDsodD1lLmdldFByZXZpb3VzU2libGluZygpKSE9PW51bGwmJloodCkmJnQuaXNTaW1wbGVUZXh0KCkmJiF0LmlzVW5tZXJnZWFibGUoKTspaWYodC5fX3RleHQ9PT0iIil0LnJlbW92ZSgpO2Vsc2V7RXkodCxlKSYmKGU9Q3kodCxlKSk7YnJlYWt9Zm9yKHZhciBuOyhuPWUuZ2V0TmV4dFNpYmxpbmcoKSkhPT1udWxsJiZaKG4pJiZuLmlzU2ltcGxlVGV4dCgpJiYhbi5pc1VubWVyZ2VhYmxlKCk7KWlmKG4uX190ZXh0PT09IiIpbi5yZW1vdmUoKTtlbHNle0V5KGUsbikmJkN5KGUsbik7YnJlYWt9fX1mdW5jdGlvbiBxZyhlKXtyZXR1cm4gJHkoZS5hbmNob3IpLCR5KGUuZm9jdXMpLGV9ZnVuY3Rpb24gJHkoZSl7Zm9yKDtlLnR5cGU9PT0iZWxlbWVudCI7KXt2YXIgdD1lLmdldE5vZGUoKSxuPWUub2Zmc2V0O2lmKG49PT10LmdldENoaWxkcmVuU2l6ZSgpPyh0PXQuZ2V0Q2hpbGRBdEluZGV4KG4tMSksbj0hMCk6KHQ9dC5nZXRDaGlsZEF0SW5kZXgobiksbj0hMSksWih0KSl7ZS5zZXQodC5fX2tleSxuP3QuZ2V0VGV4dENvbnRlbnRTaXplKCk6MCwidGV4dCIpO2JyZWFrfWVsc2UgaWYoIVcodCkpYnJlYWs7ZS5zZXQodC5fX2tleSxuP3QuZ2V0Q2hpbGRyZW5TaXplKCk6MCwiZWxlbWVudCIpfX1sZXQgdjI9MSx5Mj10eXBlb2YgcXVldWVNaWNyb3Rhc2s9PSJmdW5jdGlvbiI/cXVldWVNaWNyb3Rhc2s6ZT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oZSl9O2Z1bmN0aW9uIGVtKGUpe2xldCB0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYodD09PW51bGwpcmV0dXJuITE7bGV0IG49dC5ub2RlTmFtZTtyZXR1cm4gVmUoemEoZSkpJiYobj09PSJJTlBVVCJ8fG49PT0iVEVYVEFSRUEifHx0LmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIiYmdC5fX2xleGljYWxFZGl0b3I9PW51bGwpfWZ1bmN0aW9uIGphKGUsdCxuKXtsZXQgcj1lLmdldFJvb3RFbGVtZW50KCk7dHJ5e3JldHVybiByIT09bnVsbCYmci5jb250YWlucyh0KSYmci5jb250YWlucyhuKSYmdCE9PW51bGwmJiFlbSh0KSYmdG0odCk9PT1lfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiB0bShlKXtmb3IoO2UhPW51bGw7KXtsZXQgdD1lLl9fbGV4aWNhbEVkaXRvcjtpZih0IT1udWxsKXJldHVybiB0O2U9dmQoZSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcWgoZSl7cmV0dXJuIGUuaXNUb2tlbigpfHxlLmlzU2VnbWVudGVkKCl9ZnVuY3Rpb24gYmMoZSl7Zm9yKDtlIT1udWxsOyl7aWYoZS5ub2RlVHlwZT09PTMpcmV0dXJuIGU7ZT1lLmZpcnN0Q2hpbGR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQV8oZSx0LG4pe3JldHVybiB0PWxpW3RdLGUmdCYmKG49PT1udWxsfHwhKG4mdCkpP2VedDpuPT09bnVsbHx8biZ0P2V8dDplfWZ1bmN0aW9uIE1fKGUpe3JldHVybiBaKGUpfHxfYShlKXx8VmUoZSl9ZnVuY3Rpb24gTF8oZSx0KXtpZih0IT1udWxsKWUuX19rZXk9dDtlbHNle3RuKCksOTk8U2EmJksoMTQpLHQ9bnQoKTt2YXIgbj1ScigpLHI9IiIrdjIrKztuLl9ub2RlTWFwLnNldChyLGUpLFcoZSk/dC5fZGlydHlFbGVtZW50cy5zZXQociwhMCk6dC5fZGlydHlMZWF2ZXMuYWRkKHIpLHQuX2Nsb25lTm90TmVlZGVkLmFkZChyKSx0Ll9kaXJ0eVR5cGU9MSxlLl9fa2V5PXJ9fWZ1bmN0aW9uIHNpKGUpe3ZhciB0PWUuZ2V0UGFyZW50KCk7aWYodCE9PW51bGwpe2xldCBvPWUuZ2V0V3JpdGFibGUoKTt0PXQuZ2V0V3JpdGFibGUoKTt2YXIgbj1lLmdldFByZXZpb3VzU2libGluZygpO2lmKGU9ZS5nZXROZXh0U2libGluZygpLG49PT1udWxsKWlmKGUhPT1udWxsKXt2YXIgcj1lLmdldFdyaXRhYmxlKCk7dC5fX2ZpcnN0PWUuX19rZXksci5fX3ByZXY9bnVsbH1lbHNlIHQuX19maXJzdD1udWxsO2Vsc2V7aWYocj1uLmdldFdyaXRhYmxlKCksZSE9PW51bGwpe2xldCBpPWUuZ2V0V3JpdGFibGUoKTtpLl9fcHJldj1yLl9fa2V5LHIuX19uZXh0PWkuX19rZXl9ZWxzZSByLl9fbmV4dD1udWxsO28uX19wcmV2PW51bGx9ZT09PW51bGw/biE9PW51bGw/KGU9bi5nZXRXcml0YWJsZSgpLHQuX19sYXN0PW4uX19rZXksZS5fX25leHQ9bnVsbCk6dC5fX2xhc3Q9bnVsbDooZT1lLmdldFdyaXRhYmxlKCksbiE9PW51bGw/KG49bi5nZXRXcml0YWJsZSgpLG4uX19uZXh0PWUuX19rZXksZS5fX3ByZXY9bi5fX2tleSk6ZS5fX3ByZXY9bnVsbCxvLl9fbmV4dD1udWxsKSx0Ll9fc2l6ZS0tLG8uX19wYXJlbnQ9bnVsbH19ZnVuY3Rpb24gTmMoZSl7OTk8U2EmJksoMTQpO3ZhciB0PWUuZ2V0TGF0ZXN0KCksbj10Ll9fcGFyZW50LHI9UnIoKTtsZXQgbz1udCgpLGk9ci5fbm9kZU1hcDtpZihyPW8uX2RpcnR5RWxlbWVudHMsbiE9PW51bGwpZTpmb3IoO24hPT1udWxsOyl7aWYoci5oYXMobikpYnJlYWsgZTtsZXQgbD1pLmdldChuKTtpZihsPT09dm9pZCAwKWJyZWFrO3Iuc2V0KG4sITEpLG49bC5fX3BhcmVudH10PXQuX19rZXksby5fZGlydHlUeXBlPTEsVyhlKT9yLnNldCh0LCEwKTpvLl9kaXJ0eUxlYXZlcy5hZGQodCl9ZnVuY3Rpb24gTHQoZSl7dG4oKTt2YXIgdD1udCgpO2xldCBuPXQuX2NvbXBvc2l0aW9uS2V5O2UhPT1uJiYodC5fY29tcG9zaXRpb25LZXk9ZSxuIT09bnVsbCYmKHQ9a3QobiksdCE9PW51bGwmJnQuZ2V0V3JpdGFibGUoKSksZSE9PW51bGwmJihlPWt0KGUpLGUhPT1udWxsJiZlLmdldFdyaXRhYmxlKCkpKX1mdW5jdGlvbiB4bygpe3JldHVybiBLbCgpP251bGw6bnQoKS5fY29tcG9zaXRpb25LZXl9ZnVuY3Rpb24ga3QoZSx0KXtyZXR1cm4gZT0odHx8UnIoKSkuX25vZGVNYXAuZ2V0KGUpLGU9PT12b2lkIDA/bnVsbDplfWZ1bmN0aW9uIERfKGUsdCl7bGV0IG49bnQoKTtyZXR1cm4gZT1lW2BfX2xleGljYWxLZXlfJHtuLl9rZXl9YF0sZSE9PXZvaWQgMD9rdChlLHQpOm51bGx9ZnVuY3Rpb24gemEoZSx0KXtmb3IoO2UhPW51bGw7KXtsZXQgbj1EXyhlLHQpO2lmKG4hPT1udWxsKXJldHVybiBuO2U9dmQoZSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSV8oZSl7bGV0IHQ9T2JqZWN0LmFzc2lnbih7fSxlLl9kZWNvcmF0b3JzKTtyZXR1cm4gZS5fcGVuZGluZ0RlY29yYXRvcnM9dH1mdW5jdGlvbiBreShlKXtyZXR1cm4gZS5yZWFkKCgpPT5icigpLmdldFRleHRDb250ZW50KCkpfWZ1bmN0aW9uIHgyKGUsdCl7Tm4oZSwoKT0+e3ZhciBuPVJyKCk7aWYoIW4uaXNFbXB0eSgpKWlmKHQ9PT0icm9vdCIpYnIoKS5tYXJrRGlydHkoKTtlbHNle249bi5fbm9kZU1hcDtmb3IobGV0WyxyXW9mIG4pci5tYXJrRGlydHkoKX19LGUuX3BlbmRpbmdFZGl0b3JTdGF0ZT09PW51bGw/e3RhZzoiaGlzdG9yeS1tZXJnZSJ9OnZvaWQgMCl9ZnVuY3Rpb24gYnIoKXtyZXR1cm4gUnIoKS5fbm9kZU1hcC5nZXQoInJvb3QiKX1mdW5jdGlvbiBTcihlKXt0bigpO2xldCB0PVJyKCk7ZSE9PW51bGwmJihlLmRpcnR5PSEwLGUuX2NhY2hlZE5vZGVzPW51bGwpLHQuX3NlbGVjdGlvbj1lfWZ1bmN0aW9uIG9sKGUpe3ZhciB0PW50KCksbjtlOntmb3Iobj1lO24hPW51bGw7KXtsZXQgcj1uW2BfX2xleGljYWxLZXlfJHt0Ll9rZXl9YF07aWYociE9PXZvaWQgMCl7bj1yO2JyZWFrIGV9bj12ZChuKX1uPW51bGx9cmV0dXJuIG49PT1udWxsPyh0PXQuZ2V0Um9vdEVsZW1lbnQoKSxlPT09dD9rdCgicm9vdCIpOm51bGwpOmt0KG4pfWZ1bmN0aW9uIGpfKGUpe3JldHVybi9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZy50ZXN0KGUpfWZ1bmN0aW9uIG5tKGUpe2xldCB0PVtdO2Zvcig7ZSE9PW51bGw7KXQucHVzaChlKSxlPWUuX3BhcmVudEVkaXRvcjtyZXR1cm4gdH1mdW5jdGlvbiB6Xygpe3JldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csIiIpLnN1YnN0cigwLDUpfWZ1bmN0aW9uIHJtKGUsdCxuKXtpZih0PU5yKHQuX3dpbmRvdyksdCE9PW51bGwpe3ZhciByPXQuYW5jaG9yTm9kZSx7YW5jaG9yT2Zmc2V0Om8sZm9jdXNPZmZzZXQ6aX09dDtpZihyIT09bnVsbCYmKHQ9ci5ub2RlVHlwZT09PTM/ci5ub2RlVmFsdWU6bnVsbCxyPXphKHIpLHQhPT1udWxsJiZaKHIpKSl7aWYodD09PW1kJiZuKXtsZXQgbD1uLmxlbmd0aDt0PW4saT1vPWx9dCE9PW51bGwmJm9tKHIsdCxvLGksZSl9fX1mdW5jdGlvbiBvbShlLHQsbixyLG8pe2xldCBpPWU7aWYoaS5pc0F0dGFjaGVkKCkmJihvfHwhaS5pc0RpcnR5KCkpKXtsZXQgdT1pLmlzQ29tcG9zaW5nKCksYz10O2lmKCh1fHxvKSYmdFt0Lmxlbmd0aC0xXT09PW1kJiYoYz10LnNsaWNlKDAsLTEpKSx0PWkuZ2V0VGV4dENvbnRlbnQoKSxvfHxjIT09dClpZihjPT09IiIpaWYoTHQobnVsbCksUWd8fGdkfHxKZylpLnJlbW92ZSgpO2Vsc2V7bGV0IGQ9bnQoKTtzZXRUaW1lb3V0KCgpPT57ZC51cGRhdGUoKCk9PntpLmlzQXR0YWNoZWQoKSYmaS5yZW1vdmUoKX0pfSwyMCl9ZWxzZXtvPWkuZ2V0UGFyZW50KCksdD1IbCgpO3ZhciBsPWkuZ2V0VGV4dENvbnRlbnRTaXplKCkscz14bygpLGE9aS5nZXRLZXkoKTtpLmlzVG9rZW4oKXx8cyE9PW51bGwmJmE9PT1zJiYhdXx8ZmUodCkmJihvIT09bnVsbCYmIW8uY2FuSW5zZXJ0VGV4dEJlZm9yZSgpJiZ0LmFuY2hvci5vZmZzZXQ9PT0wfHx0LmFuY2hvci5rZXk9PT1lLl9fa2V5JiZ0LmFuY2hvci5vZmZzZXQ9PT0wJiYhaS5jYW5JbnNlcnRUZXh0QmVmb3JlKCl8fHQuZm9jdXMua2V5PT09ZS5fX2tleSYmdC5mb2N1cy5vZmZzZXQ9PT1sJiYhaS5jYW5JbnNlcnRUZXh0QWZ0ZXIoKSk/aS5tYXJrRGlydHkoKTooZT1LZSgpLGZlKGUpJiZuIT09bnVsbCYmciE9PW51bGwmJihlLnNldFRleHROb2RlUmFuZ2UoaSxuLGksciksaS5pc1NlZ21lbnRlZCgpJiYobj1pLmdldFRleHRDb250ZW50KCksbj1DdChuKSxpLnJlcGxhY2UobiksaT1uKSksaS5zZXRUZXh0Q29udGVudChjKSl9fX1mdW5jdGlvbiB3MihlLHQpe2lmKHQuaXNTZWdtZW50ZWQoKSlyZXR1cm4hMDtpZighZS5pc0NvbGxhcHNlZCgpKXJldHVybiExO2U9ZS5hbmNob3Iub2Zmc2V0O2xldCBuPXQuZ2V0UGFyZW50T3JUaHJvdygpLHI9dC5pc1Rva2VuKCk7cmV0dXJuIGU9PT0wPygoZT0hdC5jYW5JbnNlcnRUZXh0QmVmb3JlKCl8fCFuLmNhbkluc2VydFRleHRCZWZvcmUoKXx8cil8fCh0PXQuZ2V0UHJldmlvdXNTaWJsaW5nKCksZT0oWih0KXx8Vyh0KSYmdC5pc0lubGluZSgpKSYmIXQuY2FuSW5zZXJ0VGV4dEFmdGVyKCkpLGUpOmU9PT10LmdldFRleHRDb250ZW50U2l6ZSgpPyF0LmNhbkluc2VydFRleHRBZnRlcigpfHwhbi5jYW5JbnNlcnRUZXh0QWZ0ZXIoKXx8cjohMX1mdW5jdGlvbiBCcyhlLHQpe2UuX19sZXhpY2FsQ2xhc3NOYW1lQ2FjaGU9PT12b2lkIDAmJihlLl9fbGV4aWNhbENsYXNzTmFtZUNhY2hlPXt9KTtsZXQgbj1lLl9fbGV4aWNhbENsYXNzTmFtZUNhY2hlLHI9blt0XTtyZXR1cm4gciE9PXZvaWQgMD9yOihlPWVbdF0sdHlwZW9mIGU9PSJzdHJpbmciPyhlPWUuc3BsaXQoIiAiKSxuW3RdPWUpOmUpfWZ1bmN0aW9uIGltKGUsdCxuLHIsbyl7bi5zaXplIT09MCYmKG49ci5fX3R5cGUscj1yLl9fa2V5LHQ9dC5nZXQobiksdD09PXZvaWQgMCYmSygzMyxuKSxuPXQua2xhc3MsdD1lLmdldChuKSx0PT09dm9pZCAwJiYodD1uZXcgTWFwLGUuc2V0KG4sdCkpLGU9dC5nZXQociksbj1lPT09ImRlc3Ryb3llZCImJm89PT0iY3JlYXRlZCIsKGU9PT12b2lkIDB8fG4pJiZ0LnNldChyLG4/InVwZGF0ZWQiOm8pKX1mdW5jdGlvbiBUeShlLHQsbil7bGV0IHI9ZS5nZXRQYXJlbnQoKSxvPW47cmV0dXJuIHIhPT1udWxsJiYodCYmbj09PTA/KG89ZS5nZXRJbmRleFdpdGhpblBhcmVudCgpLGU9cik6dHx8biE9PWUuZ2V0Q2hpbGRyZW5TaXplKCl8fChvPWUuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSsxLGU9cikpLGUuZ2V0Q2hpbGRBdEluZGV4KHQ/by0xOm8pfWZ1bmN0aW9uIGVwKGUsdCl7dmFyIG49ZS5vZmZzZXQ7cmV0dXJuIGUudHlwZT09PSJlbGVtZW50Ij8oZT1lLmdldE5vZGUoKSxUeShlLHQsbikpOihlPWUuZ2V0Tm9kZSgpLHQmJm49PT0wfHwhdCYmbj09PWUuZ2V0VGV4dENvbnRlbnRTaXplKCk/KG49dD9lLmdldFByZXZpb3VzU2libGluZygpOmUuZ2V0TmV4dFNpYmxpbmcoKSxuPT09bnVsbD9UeShlLmdldFBhcmVudE9yVGhyb3coKSx0LGUuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSsodD8wOjEpKTpuKTpudWxsKX1mdW5jdGlvbiBGXyhlKXtyZXR1cm4gZT0oZT15ZChlKS5ldmVudCkmJmUuaW5wdXRUeXBlLGU9PT0iaW5zZXJ0RnJvbVBhc3RlInx8ZT09PSJpbnNlcnRGcm9tUGFzdGVBc1F1b3RhdGlvbiJ9ZnVuY3Rpb24gUmMoZSl7cmV0dXJuIXJuKGUpJiYhZS5pc0xhc3RDaGlsZCgpJiYhZS5pc0lubGluZSgpfWZ1bmN0aW9uIFBjKGUsdCl7cmV0dXJuIGU9ZS5fa2V5VG9ET01NYXAuZ2V0KHQpLGU9PT12b2lkIDAmJksoNzUsdCksZX1mdW5jdGlvbiB2ZChlKXtyZXR1cm4gZT1lLmFzc2lnbmVkU2xvdHx8ZS5wYXJlbnRFbGVtZW50LGUhPT1udWxsJiZlLm5vZGVUeXBlPT09MTE/ZS5ob3N0OmV9ZnVuY3Rpb24gT2MoZSx0KXtmb3IoZT1lLmdldFBhcmVudCgpO2UhPT1udWxsOyl7aWYoZS5pcyh0KSlyZXR1cm4hMDtlPWUuZ2V0UGFyZW50KCl9cmV0dXJuITF9ZnVuY3Rpb24geWQoZSl7cmV0dXJuIGU9ZS5fd2luZG93LGU9PT1udWxsJiZLKDc4KSxlfWZ1bmN0aW9uIEJfKGUpe2ZvcihlPWUuZ2V0UGFyZW50T3JUaHJvdygpO2UhPT1udWxsJiYhbnIoZSk7KWU9ZS5nZXRQYXJlbnRPclRocm93KCk7cmV0dXJuIGV9ZnVuY3Rpb24gbnIoZSl7cmV0dXJuIHJuKGUpfHxXKGUpJiZlLmlzU2hhZG93Um9vdCgpfWZ1bmN0aW9uIFdfKGUpe3JldHVybiBlPWUuY29uc3RydWN0b3IuY2xvbmUoZSksTF8oZSxudWxsKSxlfWZ1bmN0aW9uIEZhKGUpe3ZhciB0PW50KCk7bGV0IG49ZS5jb25zdHJ1Y3Rvci5nZXRUeXBlKCk7cmV0dXJuIHQ9dC5fbm9kZXMuZ2V0KG4pLHQ9PT12b2lkIDAmJksoOTcpLHQ9dC5yZXBsYWNlLHQhPT1udWxsPyh0PXQoZSksdCBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3J8fEsoOTgpLHQpOmV9ZnVuY3Rpb24gd2YoZSx0KXtlPWUuZ2V0UGFyZW50KCksIXJuKGUpfHxXKHQpfHxWZSh0KXx8Syg5OSl9ZnVuY3Rpb24gX2YoZSl7cmV0dXJuKFZlKGUpfHxXKGUpJiYhZS5jYW5CZUVtcHR5KCkpJiYhZS5pc0lubGluZSgpfWZ1bmN0aW9uIHRwKGUsdCxuKXtuLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJjYXJldC1jb2xvciIpLHQuX2Jsb2NrQ3Vyc29yRWxlbWVudD1udWxsLHQ9ZS5wYXJlbnRFbGVtZW50LHQhPT1udWxsJiZ0LnJlbW92ZUNoaWxkKGUpfWZ1bmN0aW9uIE5yKGUpe3JldHVybiBacj8oZXx8d2luZG93KS5nZXRTZWxlY3Rpb24oKTpudWxsfWZ1bmN0aW9uIFVfKGUsdCl7bGV0IG49ZS5nZXRDaGlsZEF0SW5kZXgodCk7bj09bnVsbCYmKG49ZSksbnIoZSkmJksoMTAyKTtsZXQgcj1sPT57Y29uc3Qgcz1sLmdldFBhcmVudE9yVGhyb3coKSxhPW5yKHMpLHU9bCE9PW58fGE/V18obCk6bDtpZihhKXJldHVybiBsLmluc2VydEFmdGVyKHUpLFtsLHUsdV07Y29uc3RbYyxkLGZdPXIocyk7cmV0dXJuIGw9bC5nZXROZXh0U2libGluZ3MoKSxmLmFwcGVuZCh1LC4uLmwpLFtjLGQsdV19LFtvLGldPXIobik7cmV0dXJuW28saV19ZnVuY3Rpb24gQWMoZSx0KXtmb3IoO2UhPT1icigpJiZlIT1udWxsOyl7aWYodChlKSlyZXR1cm4gZTtlPWUuZ2V0UGFyZW50KCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gXzIoZSl7bGV0IHQ9W10sbj1bZV07Zm9yKDswPG4ubGVuZ3RoOyl7bGV0IHI9bi5wb3AoKTtyPT09dm9pZCAwJiZLKDExMiksVyhyKSYmbi51bnNoaWZ0KC4uLnIuZ2V0Q2hpbGRyZW4oKSksciE9PWUmJnQucHVzaChyKX1yZXR1cm4gdH1mdW5jdGlvbiB4ZChlKXtyZXR1cm4gZS5ub2RlVHlwZT09PTF9ZnVuY3Rpb24gVl8oZSx0LG4scixvLGkpe2ZvcihlPWUuZ2V0Rmlyc3RDaGlsZCgpO2UhPT1udWxsOyl7bGV0IGw9ZS5fX2tleTtlLl9fcGFyZW50PT09dCYmKFcoZSkmJlZfKGUsbCxuLHIsbyxpKSxuLmhhcyhsKXx8aS5kZWxldGUobCksby5wdXNoKGwpKSxlPWUuZ2V0TmV4dFNpYmxpbmcoKX19ZnVuY3Rpb24gUzIoZSx0LG4scil7ZT1lLl9ub2RlTWFwLHQ9dC5fbm9kZU1hcDtsZXQgbz1bXTtmb3IobGV0W2ldb2Ygcil7bGV0IGw9dC5nZXQoaSk7bD09PXZvaWQgMHx8bC5pc0F0dGFjaGVkKCl8fChXKGwpJiZWXyhsLGksZSx0LG8sciksZS5oYXMoaSl8fHIuZGVsZXRlKGkpLG8ucHVzaChpKSl9Zm9yKGxldCBpIG9mIG8pdC5kZWxldGUoaSk7Zm9yKGxldCBpIG9mIG4pcj10LmdldChpKSxyPT09dm9pZCAwfHxyLmlzQXR0YWNoZWQoKXx8KGUuaGFzKGkpfHxuLmRlbGV0ZShpKSx0LmRlbGV0ZShpKSl9bGV0IHZ0PSIiLGVuPSIiLGpyPSIiLE1vLFZ0LHlhLEhfPSExLGxtPSExLHdkLFV1PW51bGwsbnAscnAsbWksTG8sb3AseGE7ZnVuY3Rpb24gVnUoZSx0KXtsZXQgbj1taS5nZXQoZSk7aWYodCE9PW51bGwpe2xldCByPXNwKGUpO3IucGFyZW50Tm9kZT09PXQmJnQucmVtb3ZlQ2hpbGQocil9TG8uaGFzKGUpfHxWdC5fa2V5VG9ET01NYXAuZGVsZXRlKGUpLFcobikmJihlPU1jKG4sbWkpLGlwKGUsMCxlLmxlbmd0aC0xLG51bGwpKSxuIT09dm9pZCAwJiZpbSh4YSx5YSx3ZCxuLCJkZXN0cm95ZWQiKX1mdW5jdGlvbiBpcChlLHQsbixyKXtmb3IoO3Q8PW47Kyt0KXtsZXQgbz1lW3RdO28hPT12b2lkIDAmJlZ1KG8scil9fWZ1bmN0aW9uIFlvKGUsdCl7ZS5zZXRQcm9wZXJ0eSgidGV4dC1hbGlnbiIsdCl9ZnVuY3Rpb24gS18oZSx0KXt2YXIgbj1Nby50aGVtZS5pbmRlbnQ7aWYodHlwZW9mIG49PSJzdHJpbmciKXtsZXQgcj1lLmNsYXNzTGlzdC5jb250YWlucyhuKTswPHQmJiFyP2UuY2xhc3NMaXN0LmFkZChuKToxPnQmJnImJmUuY2xhc3NMaXN0LnJlbW92ZShuKX1uPWdldENvbXB1dGVkU3R5bGUoZSkuZ2V0UHJvcGVydHlWYWx1ZSgiLS1sZXhpY2FsLWluZGVudC1iYXNlLXZhbHVlIil8fCI0MHB4IixlLnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWlubGluZS1zdGFydCIsdD09PTA/IiI6YGNhbGMoJHt0fSAqICR7bn0pYCl9ZnVuY3Rpb24gR18oZSx0KXtlPWUuc3R5bGUsdD09PTA/WW8oZSwiIik6dD09PTE/WW8oZSwibGVmdCIpOnQ9PT0yP1lvKGUsImNlbnRlciIpOnQ9PT0zP1lvKGUsInJpZ2h0Iik6dD09PTQ/WW8oZSwianVzdGlmeSIpOnQ9PT01P1lvKGUsInN0YXJ0Iik6dD09PTYmJllvKGUsImVuZCIpfWZ1bmN0aW9uIEh1KGUsdCxuKXtsZXQgcj1Mby5nZXQoZSk7cj09PXZvaWQgMCYmSyg2MCk7bGV0IG89ci5jcmVhdGVET00oTW8sVnQpO3ZhciBpPVZ0Ll9rZXlUb0RPTU1hcDtpZihvWyJfX2xleGljYWxLZXlfIitWdC5fa2V5XT1lLGkuc2V0KGUsbyksWihyKT9vLnNldEF0dHJpYnV0ZSgiZGF0YS1sZXhpY2FsLXRleHQiLCJ0cnVlIik6VmUocikmJm8uc2V0QXR0cmlidXRlKCJkYXRhLWxleGljYWwtZGVjb3JhdG9yIiwidHJ1ZSIpLFcocikpe2lmKGU9ci5fX2luZGVudCxpPXIuX19zaXplLGUhPT0wJiZLXyhvLGUpLGkhPT0wKXstLWksZT1NYyhyLExvKTt2YXIgbD1lbjtlbj0iIixscChlLHIsMCxpLG8sbnVsbCksWF8ocixvKSxlbj1sfWU9ci5fX2Zvcm1hdCxlIT09MCYmR18obyxlKSxyLmlzSW5saW5lKCl8fFlfKG51bGwscixvKSxSYyhyKSYmKHZ0Kz1gCgpgLGpyKz1gCgpgKX1lbHNlIGk9ci5nZXRUZXh0Q29udGVudCgpLFZlKHIpPyhsPXIuZGVjb3JhdGUoVnQsTW8pLGwhPT1udWxsJiZRXyhlLGwpLG8uY29udGVudEVkaXRhYmxlPSJmYWxzZSIpOloocikmJihyLmlzRGlyZWN0aW9ubGVzcygpfHwoZW4rPWkpKSx2dCs9aSxqcis9aTtyZXR1cm4gdCE9PW51bGwmJihuIT1udWxsP3QuaW5zZXJ0QmVmb3JlKG8sbik6KG49dC5fX2xleGljYWxMaW5lQnJlYWssbiE9bnVsbD90Lmluc2VydEJlZm9yZShvLG4pOnQuYXBwZW5kQ2hpbGQobykpKSxpbSh4YSx5YSx3ZCxyLCJjcmVhdGVkIiksb31mdW5jdGlvbiBscChlLHQsbixyLG8saSl7bGV0IGw9dnQ7Zm9yKHZ0PSIiO248PXI7KytuKUh1KGVbbl0sbyxpKTtSYyh0KSYmKHZ0Kz1gCgpgKSxvLl9fbGV4aWNhbFRleHRDb250ZW50PXZ0LHZ0PWwrdnR9ZnVuY3Rpb24gYnkoZSx0KXtyZXR1cm4gZT10LmdldChlKSxfYShlKXx8VmUoZSkmJmUuaXNJbmxpbmUoKX1mdW5jdGlvbiBZXyhlLHQsbil7ZT1lIT09bnVsbCYmKGUuX19zaXplPT09MHx8YnkoZS5fX2xhc3QsbWkpKSx0PXQuX19zaXplPT09MHx8YnkodC5fX2xhc3QsTG8pLGU/dHx8KHQ9bi5fX2xleGljYWxMaW5lQnJlYWssdCE9bnVsbCYmbi5yZW1vdmVDaGlsZCh0KSxuLl9fbGV4aWNhbExpbmVCcmVhaz1udWxsKTp0JiYodD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpLG4uX19sZXhpY2FsTGluZUJyZWFrPXQsbi5hcHBlbmRDaGlsZCh0KSl9ZnVuY3Rpb24gWF8oZSx0KXt2YXIgbj10Ll9fbGV4aWNhbERpcjtpZih0Ll9fbGV4aWNhbERpclRleHRDb250ZW50IT09ZW58fG4hPT1VdSl7bGV0IGk9ZW49PT0iIjtpZihpKXZhciByPVV1O2Vsc2Ugcj1lbixyPXUyLnRlc3Qocik/InJ0bCI6YzIudGVzdChyKT8ibHRyIjpudWxsO2lmKHIhPT1uKXtsZXQgbD10LmNsYXNzTGlzdCxzPU1vLnRoZW1lO3ZhciBvPW4hPT1udWxsP3Nbbl06dm9pZCAwO2xldCBhPXIhPT1udWxsP3Nbcl06dm9pZCAwO28hPT12b2lkIDAmJih0eXBlb2Ygbz09InN0cmluZyImJihvPW8uc3BsaXQoIiAiKSxvPXNbbl09byksbC5yZW1vdmUoLi4ubykpLHI9PT1udWxsfHxpJiZyPT09Imx0ciI/dC5yZW1vdmVBdHRyaWJ1dGUoImRpciIpOihhIT09dm9pZCAwJiYodHlwZW9mIGE9PSJzdHJpbmciJiYobj1hLnNwbGl0KCIgIiksYT1zW3JdPW4pLGEhPT12b2lkIDAmJmwuYWRkKC4uLmEpKSx0LmRpcj1yKSxsbXx8KGUuZ2V0V3JpdGFibGUoKS5fX2Rpcj1yKX1VdT1yLHQuX19sZXhpY2FsRGlyVGV4dENvbnRlbnQ9ZW4sdC5fX2xleGljYWxEaXI9cn19ZnVuY3Rpb24gTWMoZSx0KXtsZXQgbj1bXTtmb3IoZT1lLl9fZmlyc3Q7ZSE9PW51bGw7KXtsZXQgcj10LmdldChlKTtyPT09dm9pZCAwJiZLKDEwMSksbi5wdXNoKGUpLGU9ci5fX25leHR9cmV0dXJuIG59ZnVuY3Rpb24gRXMoZSx0KXt2YXIgbj1taS5nZXQoZSkscj1Mby5nZXQoZSk7biE9PXZvaWQgMCYmciE9PXZvaWQgMHx8Syg2MSk7dmFyIG89SF98fHJwLmhhcyhlKXx8bnAuaGFzKGUpO2xldCBpPVBjKFZ0LGUpO2lmKG49PT1yJiYhbylyZXR1cm4gVyhuKT8ocj1pLl9fbGV4aWNhbFRleHRDb250ZW50LHIhPT12b2lkIDAmJih2dCs9cixqcis9cikscj1pLl9fbGV4aWNhbERpclRleHRDb250ZW50LHIhPT12b2lkIDAmJihlbis9cikpOihyPW4uZ2V0VGV4dENvbnRlbnQoKSxaKG4pJiYhbi5pc0RpcmVjdGlvbmxlc3MoKSYmKGVuKz1yKSxqcis9cix2dCs9ciksaTtpZihuIT09ciYmbyYmaW0oeGEseWEsd2QsciwidXBkYXRlZCIpLHIudXBkYXRlRE9NKG4saSxNbykpcmV0dXJuIHI9SHUoZSxudWxsLG51bGwpLHQ9PT1udWxsJiZLKDYyKSx0LnJlcGxhY2VDaGlsZChyLGkpLFZ1KGUsbnVsbCkscjtpZihXKG4pJiZXKHIpKXtpZihlPXIuX19pbmRlbnQsZSE9PW4uX19pbmRlbnQmJktfKGksZSksZT1yLl9fZm9ybWF0LGUhPT1uLl9fZm9ybWF0JiZHXyhpLGUpLG8pe2U9cixvPWVuLGVuPSIiLHQ9dnQ7dmFyIGw9bi5fX3NpemUscz1lLl9fc2l6ZTtpZih2dD0iIixsPT09MSYmcz09PTEpe3ZhciBhPW4uX19maXJzdCx1PWUuX19maXJzdDtpZihhPT09dSlFcyhhLGkpO2Vsc2V7dmFyIGM9c3AoYSk7dT1IdSh1LG51bGwsbnVsbCksaS5yZXBsYWNlQ2hpbGQodSxjKSxWdShhLG51bGwpfX1lbHNle3U9TWMobixtaSk7dmFyIGQ9TWMoZSxMbyk7aWYobD09PTApcyE9PTAmJmxwKGQsZSwwLHMtMSxpLG51bGwpO2Vsc2UgaWYocz09PTApbCE9PTAmJihhPWkuX19sZXhpY2FsTGluZUJyZWFrPT1udWxsLGlwKHUsMCxsLTEsYT9udWxsOmkpLGEmJihpLnRleHRDb250ZW50PSIiKSk7ZWxzZXt2YXIgZj11O3U9ZCxkPWwtMSxsPXMtMTtsZXQgZz1pLmZpcnN0Q2hpbGQsbT0wO2ZvcihzPTA7bTw9ZCYmczw9bDspe3ZhciBoPWZbbV07bGV0IF89dVtzXTtpZihoPT09XylnPVNmKEVzKF8saSkpLG0rKyxzKys7ZWxzZXthPT09dm9pZCAwJiYoYT1uZXcgU2V0KGYpKSxjPT09dm9pZCAwJiYoYz1uZXcgU2V0KHUpKTtsZXQgdj1jLmhhcyhoKSx5PWEuaGFzKF8pO3Y/KHk/KGg9UGMoVnQsXyksaD09PWc/Zz1TZihFcyhfLGkpKTooZyE9bnVsbD9pLmluc2VydEJlZm9yZShoLGcpOmkuYXBwZW5kQ2hpbGQoaCksRXMoXyxpKSksbSsrKTpIdShfLGksZykscysrKTooZz1TZihzcChoKSksVnUoaCxpKSxtKyspfX1hPW0+ZCxjPXM+bCxhJiYhYz8oYT11W2wrMV0sYT1hPT09dm9pZCAwP251bGw6VnQuZ2V0RWxlbWVudEJ5S2V5KGEpLGxwKHUsZSxzLGwsaSxhKSk6YyYmIWEmJmlwKGYsbSxkLGkpfX1SYyhlKSYmKHZ0Kz1gCgpgKSxpLl9fbGV4aWNhbFRleHRDb250ZW50PXZ0LHZ0PXQrdnQsWF8oZSxpKSxlbj1vLHJuKHIpfHxyLmlzSW5saW5lKCl8fFlfKG4scixpKX1SYyhyKSYmKHZ0Kz1gCgpgLGpyKz1gCgpgKX1lbHNlIG49ci5nZXRUZXh0Q29udGVudCgpLFZlKHIpPyhvPXIuZGVjb3JhdGUoVnQsTW8pLG8hPT1udWxsJiZRXyhlLG8pKTpaKHIpJiYhci5pc0RpcmVjdGlvbmxlc3MoKSYmKGVuKz1uKSx2dCs9bixqcis9bjtyZXR1cm4hbG0mJnJuKHIpJiZyLl9fY2FjaGVkVGV4dCE9PWpyJiYocj1yLmdldFdyaXRhYmxlKCksci5fX2NhY2hlZFRleHQ9anIpLGl9ZnVuY3Rpb24gUV8oZSx0KXtsZXQgbj1WdC5fcGVuZGluZ0RlY29yYXRvcnMscj1WdC5fZGVjb3JhdG9ycztpZihuPT09bnVsbCl7aWYocltlXT09PXQpcmV0dXJuO249SV8oVnQpfW5bZV09dH1mdW5jdGlvbiBTZihlKXtyZXR1cm4gZT1lLm5leHRTaWJsaW5nLGUhPT1udWxsJiZlPT09VnQuX2Jsb2NrQ3Vyc29yRWxlbWVudCYmKGU9ZS5uZXh0U2libGluZyksZX1mdW5jdGlvbiBzcChlKXtsZXQgdD1vcC5nZXQoZSk7cmV0dXJuIHQ9PT12b2lkIDAmJksoNzUsZSksdH1sZXQgQXI9T2JqZWN0LmZyZWV6ZSh7fSksYXA9W1sia2V5ZG93biIsUjJdLFsicG9pbnRlcmRvd24iLEMyXSxbImNvbXBvc2l0aW9uc3RhcnQiLGIyXSxbImNvbXBvc2l0aW9uZW5kIixOMl0sWyJpbnB1dCIsVDJdLFsiY2xpY2siLEUyXSxbImN1dCIsQXJdLFsiY29weSIsQXJdLFsiZHJhZ3N0YXJ0IixBcl0sWyJkcmFnb3ZlciIsQXJdLFsiZHJhZ2VuZCIsQXJdLFsicGFzdGUiLEFyXSxbImZvY3VzIixBcl0sWyJibHVyIixBcl0sWyJkcm9wIixBcl1dO1RjJiZhcC5wdXNoKFsiYmVmb3JlaW5wdXQiLChlLHQpPT5rMihlLHQpXSk7bGV0IHdhPTAsSl89MCxaXz0wLEhpPW51bGwsV3M9MCx1cD0hMSxjcD0hMSxVcz0hMSxDcz0hMSxxXz1bMCwiIiwwLCJyb290IiwwXTtmdW5jdGlvbiBlUyhlLHQsbixyLG8pe2xldCBpPWUuYW5jaG9yLGw9ZS5mb2N1cyxzPWkuZ2V0Tm9kZSgpO3ZhciBhPW50KCk7bGV0IHU9TnIoYS5fd2luZG93KSxjPXUhPT1udWxsP3UuYW5jaG9yTm9kZTpudWxsLGQ9aS5rZXk7YT1hLmdldEVsZW1lbnRCeUtleShkKTtsZXQgZj1uLmxlbmd0aDtyZXR1cm4gZCE9PWwua2V5fHwhWihzKXx8KCFvJiYoIVRjfHxaXzxyKzUwKXx8cy5pc0RpcnR5KCkmJjI+Znx8al8obikpJiZpLm9mZnNldCE9PWwub2Zmc2V0JiYhcy5pc0NvbXBvc2luZygpfHxxaChzKXx8cy5pc0RpcnR5KCkmJjE8Znx8KG98fCFUYykmJmEhPT1udWxsJiYhcy5pc0NvbXBvc2luZygpJiZjIT09YmMoYSl8fHUhPT1udWxsJiZ0IT09bnVsbCYmKCF0LmNvbGxhcHNlZHx8dC5zdGFydENvbnRhaW5lciE9PXUuYW5jaG9yTm9kZXx8dC5zdGFydE9mZnNldCE9PXUuYW5jaG9yT2Zmc2V0KXx8cy5nZXRGb3JtYXQoKSE9PWUuZm9ybWF0fHxzLmdldFN0eWxlKCkhPT1lLnN0eWxlfHx3MihlLHMpfWZ1bmN0aW9uIE55KGUsdCl7cmV0dXJuIGUhPT1udWxsJiZlLm5vZGVWYWx1ZSE9PW51bGwmJmUubm9kZVR5cGU9PT0zJiZ0IT09MCYmdCE9PWUubm9kZVZhbHVlLmxlbmd0aH1mdW5jdGlvbiBSeShlLHQsbil7bGV0e2FuY2hvck5vZGU6cixhbmNob3JPZmZzZXQ6byxmb2N1c05vZGU6aSxmb2N1c09mZnNldDpsfT1lO3VwJiYodXA9ITEsTnkocixvKSYmTnkoaSxsKSl8fE5uKHQsKCk9PntpZighbilTcihudWxsKTtlbHNlIGlmKGphKHQscixpKSl7dmFyIHM9S2UoKTtpZihmZShzKSl7dmFyIGE9cy5hbmNob3IsdT1hLmdldE5vZGUoKTtpZihzLmlzQ29sbGFwc2VkKCkpe2UudHlwZT09PSJSYW5nZSImJmUuYW5jaG9yTm9kZT09PWUuZm9jdXNOb2RlJiYocy5kaXJ0eT0hMCk7dmFyIGM9eWQodCkuZXZlbnQ7Yz1jP2MudGltZVN0YW1wOnBlcmZvcm1hbmNlLm5vdygpO2xldFtkLGYsaCxnLG1dPXFfO2M8bSsyMDAmJmEub2Zmc2V0PT09aCYmYS5rZXk9PT1nPyhzLmZvcm1hdD1kLHMuc3R5bGU9Zik6YS50eXBlPT09InRleHQiPyhzLmZvcm1hdD11LmdldEZvcm1hdCgpLHMuc3R5bGU9dS5nZXRTdHlsZSgpKTphLnR5cGU9PT0iZWxlbWVudCImJihzLmZvcm1hdD0wLHMuc3R5bGU9IiIpfWVsc2V7YT0yNTUsdT0hMSxjPXMuZ2V0Tm9kZXMoKTtsZXQgZD1jLmxlbmd0aDtmb3IobGV0IGY9MDtmPGQ7ZisrKXtsZXQgaD1jW2ZdO2lmKFooaCkmJih1PSEwLGEmPWguZ2V0Rm9ybWF0KCksYT09PTApKWJyZWFrfXMuZm9ybWF0PXU/YTowfX1KKHQscGQsdm9pZCAwKX19KX1mdW5jdGlvbiBFMihlLHQpe05uKHQsKCk9PntsZXQgbj1LZSgpO3ZhciByPU5yKHQuX3dpbmRvdyk7bGV0IG89SGwoKTtpZihyKWlmKGZlKG4pKXtsZXQgbD1uLmFuY2hvcjt2YXIgaT1sLmdldE5vZGUoKTtsLnR5cGU9PT0iZWxlbWVudCImJmwub2Zmc2V0PT09MCYmbi5pc0NvbGxhcHNlZCgpJiYhcm4oaSkmJmJyKCkuZ2V0Q2hpbGRyZW5TaXplKCk9PT0xJiZpLmdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKS5pc0VtcHR5KCkmJm8hPT1udWxsJiZuLmlzKG8pPyhyLnJlbW92ZUFsbFJhbmdlcygpLG4uZGlydHk9ITApOmUuZGV0YWlsIT09M3x8bi5pc0NvbGxhcHNlZCgpfHwocj1uLmZvY3VzLmdldE5vZGUoKSxpIT09ciYmKFcoaSk/aS5zZWxlY3QoMCk6aS5nZXRQYXJlbnRPclRocm93KCkuc2VsZWN0KDApKSl9ZWxzZSBlLnBvaW50ZXJUeXBlPT09InRvdWNoIiYmKGk9ci5hbmNob3JOb2RlLGkhPT1udWxsJiYoaT1pLm5vZGVUeXBlLGk9PT0xfHxpPT09MykpJiYocj1hbShvLHIsdCksU3IocikpO0oodCx1XyxlKX0pfWZ1bmN0aW9uIEMyKGUsdCl7bGV0IG49ZS50YXJnZXQ7ZT1lLnBvaW50ZXJUeXBlLG4gaW5zdGFuY2VvZiBOb2RlJiZlIT09InRvdWNoIiYmTm4odCwoKT0+e1ZlKHphKG4pKXx8KGNwPSEwKX0pfWZ1bmN0aW9uIHRTKGUpe3JldHVybiBlLmdldFRhcmdldFJhbmdlcz8oZT1lLmdldFRhcmdldFJhbmdlcygpLGUubGVuZ3RoPT09MD9udWxsOmVbMF0pOm51bGx9ZnVuY3Rpb24gJDIoZSx0KXtyZXR1cm4gZSE9PXR8fFcoZSl8fFcodCl8fCFlLmlzVG9rZW4oKXx8IXQuaXNUb2tlbigpfWZ1bmN0aW9uIGsyKGUsdCl7bGV0IG49ZS5pbnB1dFR5cGUscj10UyhlKTtuPT09ImRlbGV0ZUNvbXBvc2l0aW9uVGV4dCJ8fEFvJiZGXyh0KXx8biE9PSJpbnNlcnRDb21wb3NpdGlvblRleHQiJiZObih0LCgpPT57bGV0IG89S2UoKTtpZihuPT09ImRlbGV0ZUNvbnRlbnRCYWNrd2FyZCIpe2lmKG89PT1udWxsKXt2YXIgaT1IbCgpO2lmKCFmZShpKSlyZXR1cm47U3IoaS5jbG9uZSgpKX1pZihmZShvKSl7Sl89PT0yMjkmJmUudGltZVN0YW1wPHdhKzMwJiZ0LmlzQ29tcG9zaW5nKCkmJm8uYW5jaG9yLmtleT09PW8uZm9jdXMua2V5PyhMdChudWxsKSx3YT0wLHNldFRpbWVvdXQoKCk9PntObih0LCgpPT57THQobnVsbCl9KX0sMzApLGZlKG8pJiYoaT1vLmFuY2hvci5nZXROb2RlKCksaS5tYXJrRGlydHkoKSxvLmZvcm1hdD1pLmdldEZvcm1hdCgpLG8uc3R5bGU9aS5nZXRTdHlsZSgpKSk6KGUucHJldmVudERlZmF1bHQoKSxKKHQsZ2EsITApKTtyZXR1cm59fWlmKGZlKG8pKXtpPWUuZGF0YSxIaSE9PW51bGwmJnJtKCExLHQsSGkpLG8uZGlydHkmJkhpPT09bnVsbHx8IW8uaXNDb2xsYXBzZWQoKXx8cm4oby5hbmNob3IuZ2V0Tm9kZSgpKXx8cj09PW51bGx8fG8uYXBwbHlET01SYW5nZShyKSxIaT1udWxsO3ZhciBsPW8uZm9jdXMscz1vLmFuY2hvci5nZXROb2RlKCk7aWYobD1sLmdldE5vZGUoKSxuPT09Imluc2VydFRleHQifHxuPT09Imluc2VydFRyYW5zcG9zZSIpaT09PWAKYD8oZS5wcmV2ZW50RGVmYXVsdCgpLEoodCxGcywhMSkpOmk9PT1gCgpgPyhlLnByZXZlbnREZWZhdWx0KCksSih0LFhoLHZvaWQgMCkpOmk9PW51bGwmJmUuZGF0YVRyYW5zZmVyPyhpPWUuZGF0YVRyYW5zZmVyLmdldERhdGEoInRleHQvcGxhaW4iKSxlLnByZXZlbnREZWZhdWx0KCksby5pbnNlcnRSYXdUZXh0KGkpKTppIT1udWxsJiZlUyhvLHIsaSxlLnRpbWVTdGFtcCwhMCk/KGUucHJldmVudERlZmF1bHQoKSxKKHQscGwsaSkpOkhpPWksWl89ZS50aW1lU3RhbXA7ZWxzZSBzd2l0Y2goZS5wcmV2ZW50RGVmYXVsdCgpLG4pe2Nhc2UiaW5zZXJ0RnJvbVlhbmsiOmNhc2UiaW5zZXJ0RnJvbURyb3AiOmNhc2UiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0IjpKKHQscGwsZSk7YnJlYWs7Y2FzZSJpbnNlcnRGcm9tQ29tcG9zaXRpb24iOkx0KG51bGwpLEoodCxwbCxlKTticmVhaztjYXNlImluc2VydExpbmVCcmVhayI6THQobnVsbCksSih0LEZzLCExKTticmVhaztjYXNlImluc2VydFBhcmFncmFwaCI6THQobnVsbCksVXMmJiFnZD8oVXM9ITEsSih0LEZzLCExKSk6Sih0LFhoLHZvaWQgMCk7YnJlYWs7Y2FzZSJpbnNlcnRGcm9tUGFzdGUiOmNhc2UiaW5zZXJ0RnJvbVBhc3RlQXNRdW90YXRpb24iOkoodCxIZyxlKTticmVhaztjYXNlImRlbGV0ZUJ5Q29tcG9zaXRpb24iOiQyKHMsbCkmJkoodCxRaCxlKTticmVhaztjYXNlImRlbGV0ZUJ5RHJhZyI6Y2FzZSJkZWxldGVCeUN1dCI6Sih0LFFoLGUpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudCI6Sih0LGdhLCExKTticmVhaztjYXNlImRlbGV0ZVdvcmRCYWNrd2FyZCI6Sih0LG1hLCEwKTticmVhaztjYXNlImRlbGV0ZVdvcmRGb3J3YXJkIjpKKHQsbWEsITEpO2JyZWFrO2Nhc2UiZGVsZXRlSGFyZExpbmVCYWNrd2FyZCI6Y2FzZSJkZWxldGVTb2Z0TGluZUJhY2t3YXJkIjpKKHQsdmEsITApO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEZvcndhcmQiOmNhc2UiZGVsZXRlSGFyZExpbmVGb3J3YXJkIjpjYXNlImRlbGV0ZVNvZnRMaW5lRm9yd2FyZCI6Sih0LHZhLCExKTticmVhaztjYXNlImZvcm1hdFN0cmlrZVRocm91Z2giOkoodCx5bywic3RyaWtldGhyb3VnaCIpO2JyZWFrO2Nhc2UiZm9ybWF0Qm9sZCI6Sih0LHlvLCJib2xkIik7YnJlYWs7Y2FzZSJmb3JtYXRJdGFsaWMiOkoodCx5bywiaXRhbGljIik7YnJlYWs7Y2FzZSJmb3JtYXRVbmRlcmxpbmUiOkoodCx5bywidW5kZXJsaW5lIik7YnJlYWs7Y2FzZSJoaXN0b3J5VW5kbyI6Sih0LEtnLHZvaWQgMCk7YnJlYWs7Y2FzZSJoaXN0b3J5UmVkbyI6Sih0LEdnLHZvaWQgMCl9fX0pfWZ1bmN0aW9uIFQyKGUsdCl7ZS5zdG9wUHJvcGFnYXRpb24oKSxObih0LCgpPT57dmFyIG49S2UoKSxyPWUuZGF0YSxvPXRTKGUpO2lmKHIhPW51bGwmJmZlKG4pJiZlUyhuLG8scixlLnRpbWVTdGFtcCwhMSkpe0NzJiYoZHAodCxyKSxDcz0hMSk7dmFyIGk9bi5hbmNob3IsbD1pLmdldE5vZGUoKTtpZihvPU5yKHQuX3dpbmRvdyksbz09PW51bGwpcmV0dXJuO2xldCBzPWkub2Zmc2V0OyhpPVRjJiYhbi5pc0NvbGxhcHNlZCgpJiZaKGwpJiZvLmFuY2hvck5vZGUhPT1udWxsKSYmKGw9bC5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAscykrcitsLmdldFRleHRDb250ZW50KCkuc2xpY2UocytuLmZvY3VzLm9mZnNldCksbz1vLmFuY2hvck5vZGUsaT1sPT09KG8ubm9kZVR5cGU9PT0zP28ubm9kZVZhbHVlOm51bGwpKSxpfHxKKHQscGwscikscj1yLmxlbmd0aCxBbyYmMTxyJiZlLmlucHV0VHlwZT09PSJpbnNlcnRDb21wb3NpdGlvblRleHQiJiYhdC5pc0NvbXBvc2luZygpJiYobi5hbmNob3Iub2Zmc2V0LT1yKSxRZ3x8Z2R8fEpnfHwhdC5pc0NvbXBvc2luZygpfHwod2E9MCxMdChudWxsKSl9ZWxzZSBybSghMSx0LHIhPT1udWxsP3I6dm9pZCAwKSxDcyYmKGRwKHQscnx8dm9pZCAwKSxDcz0hMSk7dG4oKSxuPW50KCksUl8obil9KSxIaT1udWxsfWZ1bmN0aW9uIGIyKGUsdCl7Tm4odCwoKT0+e2xldCBuPUtlKCk7aWYoZmUobikmJiF0LmlzQ29tcG9zaW5nKCkpe2xldCByPW4uYW5jaG9yLG89bi5hbmNob3IuZ2V0Tm9kZSgpO0x0KHIua2V5KSwoZS50aW1lU3RhbXA8d2ErMzB8fHIudHlwZT09PSJlbGVtZW50Inx8IW4uaXNDb2xsYXBzZWQoKXx8by5nZXRGb3JtYXQoKSE9PW4uZm9ybWF0fHxvLmdldFN0eWxlKCkhPT1uLnN0eWxlKSYmSih0LHBsLGEyKX19KX1mdW5jdGlvbiBkcChlLHQpe3ZhciBuPWUuX2NvbXBvc2l0aW9uS2V5O2lmKEx0KG51bGwpLG4hPT1udWxsJiZ0IT1udWxsKXtpZih0PT09IiIpe3Q9a3QobiksZT1iYyhlLmdldEVsZW1lbnRCeUtleShuKSksZSE9PW51bGwmJmUubm9kZVZhbHVlIT09bnVsbCYmWih0KSYmb20odCxlLm5vZGVWYWx1ZSxudWxsLG51bGwsITApO3JldHVybn1pZih0W3QubGVuZ3RoLTFdPT09YApgJiYobj1LZSgpLGZlKG4pKSl7dD1uLmZvY3VzLG4uYW5jaG9yLnNldCh0LmtleSx0Lm9mZnNldCx0LnR5cGUpLEooZSxrYyxudWxsKTtyZXR1cm59fXJtKCEwLGUsdCl9ZnVuY3Rpb24gTjIoZSx0KXtBbz9Dcz0hMDpObih0LCgpPT57ZHAodCxlLmRhdGEpfSl9ZnVuY3Rpb24gUjIoZSx0KXtpZih3YT1lLnRpbWVTdGFtcCxKXz1lLmtleUNvZGUsIXQuaXNDb21wb3NpbmcoKSl7dmFye2tleUNvZGU6bixzaGlmdEtleTpyLGN0cmxLZXk6byxtZXRhS2V5OmksYWx0S2V5Omx9PWU7aWYoIUoodCxjXyxlKSl7aWYobiE9PTM5fHxvfHxpfHxsKWlmKG4hPT0zOXx8bHx8cnx8IW8mJiFpKWlmKG4hPT0zN3x8b3x8aXx8bClpZihuIT09Mzd8fGx8fHJ8fCFvJiYhaSlpZihuIT09Mzh8fG98fGkpaWYobiE9PTQwfHxvfHxpKWlmKG49PT0xMyYmcilVcz0hMCxKKHQsa2MsZSk7ZWxzZSBpZihuPT09MzIpSih0LHZfLGUpO2Vsc2UgaWYoRnQmJm8mJm49PT03OSllLnByZXZlbnREZWZhdWx0KCksVXM9ITAsSih0LEZzLCEwKTtlbHNlIGlmKG4hPT0xM3x8cil7dmFyIHM9RnQ/bHx8aT8hMTpuPT09OHx8bj09PTcyJiZvOm98fGx8fGk/ITE6bj09PTg7cz9uPT09OD9KKHQseV8sZSk6KGUucHJldmVudERlZmF1bHQoKSxKKHQsZ2EsITApKTpuPT09Mjc/Sih0LHhfLGUpOihzPUZ0P3J8fGx8fGk/ITE6bj09PTQ2fHxuPT09NjgmJm86b3x8bHx8aT8hMTpuPT09NDYscz9uPT09NDY/Sih0LHdfLGUpOihlLnByZXZlbnREZWZhdWx0KCksSih0LGdhLCExKSk6bj09PTgmJihGdD9sOm8pPyhlLnByZXZlbnREZWZhdWx0KCksSih0LG1hLCEwKSk6bj09PTQ2JiYoRnQ/bDpvKT8oZS5wcmV2ZW50RGVmYXVsdCgpLEoodCxtYSwhMSkpOkZ0JiZpJiZuPT09OD8oZS5wcmV2ZW50RGVmYXVsdCgpLEoodCx2YSwhMCkpOkZ0JiZpJiZuPT09NDY/KGUucHJldmVudERlZmF1bHQoKSxKKHQsdmEsITEpKTpuPT09NjYmJiFsJiYoRnQ/aTpvKT8oZS5wcmV2ZW50RGVmYXVsdCgpLEoodCx5bywiYm9sZCIpKTpuPT09ODUmJiFsJiYoRnQ/aTpvKT8oZS5wcmV2ZW50RGVmYXVsdCgpLEoodCx5bywidW5kZXJsaW5lIikpOm49PT03MyYmIWwmJihGdD9pOm8pPyhlLnByZXZlbnREZWZhdWx0KCksSih0LHlvLCJpdGFsaWMiKSk6biE9PTl8fGx8fG98fGk/bj09PTkwJiYhciYmKEZ0P2k6byk/KGUucHJldmVudERlZmF1bHQoKSxKKHQsS2csdm9pZCAwKSk6KHM9RnQ/bj09PTkwJiZpJiZyOm49PT04OSYmb3x8bj09PTkwJiZvJiZyLHM/KGUucHJldmVudERlZmF1bHQoKSxKKHQsR2csdm9pZCAwKSk6VmwodC5fZWRpdG9yU3RhdGUuX3NlbGVjdGlvbik/KHM9cj8hMTpuPT09Njc/RnQ/aTpvOiExLHM/KGUucHJldmVudERlZmF1bHQoKSxKKHQsWWcsZSkpOihzPXI/ITE6bj09PTg4P0Z0P2k6bzohMSxzPyhlLnByZXZlbnREZWZhdWx0KCksSih0LFhnLGUpKTpuPT09NjUmJihGdD9pOm8pJiYoZS5wcmV2ZW50RGVmYXVsdCgpLEoodCxKaCxlKSkpKTohQW8mJm49PT02NSYmKEZ0P2k6bykmJihlLnByZXZlbnREZWZhdWx0KCksSih0LEpoLGUpKSk6Sih0LF9fLGUpKX1lbHNlIFVzPSExLEoodCxrYyxlKTtlbHNlIEoodCxtXyxlKTtlbHNlIEoodCxnXyxlKTtlbHNlIEoodCxwXyxlKTtlbHNlIEoodCxoXyxlKTtlbHNlIEoodCxmXyxlKTtlbHNlIEoodCxkXyxlKTsob3x8cnx8bHx8aSkmJkoodCxiXyxlKX19fWZ1bmN0aW9uIG5TKGUpe2xldCB0PWUuX19sZXhpY2FsRXZlbnRIYW5kbGVzO3JldHVybiB0PT09dm9pZCAwJiYodD1bXSxlLl9fbGV4aWNhbEV2ZW50SGFuZGxlcz10KSx0fWxldCBnbD1uZXcgTWFwO2Z1bmN0aW9uIHJTKGUpe2U9ZS50YXJnZXQ7bGV0IHQ9TnIoZT09bnVsbD9udWxsOmUubm9kZVR5cGU9PT05P2UuZGVmYXVsdFZpZXc6ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KTtpZih0IT09bnVsbCl7dmFyIG49dG0odC5hbmNob3JOb2RlKTtpZihuIT09bnVsbCl7Y3AmJihjcD0hMSxObihuLCgpPT57dmFyIGw9SGwoKSxzPXQuYW5jaG9yTm9kZTtzIT09bnVsbCYmKHM9cy5ub2RlVHlwZSxzPT09MXx8cz09PTMpJiYobD1hbShsLHQsbiksU3IobCkpfSkpLGU9bm0obiksZT1lW2UubGVuZ3RoLTFdO3ZhciByPWUuX2tleSxvPWdsLmdldChyKSxpPW98fGU7aSE9PW4mJlJ5KHQsaSwhMSksUnkodCxuLCEwKSxuIT09ZT9nbC5zZXQocixuKTpvJiZnbC5kZWxldGUocil9fX1mdW5jdGlvbiBQMihlLHQpe1dzPT09MCYmZS5vd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsclMpLFdzKyssZS5fX2xleGljYWxFZGl0b3I9dDtsZXQgbj1uUyhlKTtmb3IobGV0IHI9MDtyPGFwLmxlbmd0aDtyKyspe2xldFtvLGldPWFwW3JdLGw9dHlwZW9mIGk9PSJmdW5jdGlvbiI/cz0+e3MuX2xleGljYWxIYW5kbGVkIT09ITAmJihzLl9sZXhpY2FsSGFuZGxlZD0hMCx0LmlzRWRpdGFibGUoKSYmaShzLHQpKX06cz0+e2lmKHMuX2xleGljYWxIYW5kbGVkIT09ITAmJihzLl9sZXhpY2FsSGFuZGxlZD0hMCx0LmlzRWRpdGFibGUoKSkpc3dpdGNoKG8pe2Nhc2UiY3V0IjpyZXR1cm4gSih0LFhnLHMpO2Nhc2UiY29weSI6cmV0dXJuIEoodCxZZyxzKTtjYXNlInBhc3RlIjpyZXR1cm4gSih0LEhnLHMpO2Nhc2UiZHJhZ3N0YXJ0IjpyZXR1cm4gSih0LEVfLHMpO2Nhc2UiZHJhZ292ZXIiOnJldHVybiBKKHQsQ18scyk7Y2FzZSJkcmFnZW5kIjpyZXR1cm4gSih0LCRfLHMpO2Nhc2UiZm9jdXMiOnJldHVybiBKKHQsa18scyk7Y2FzZSJibHVyIjpyZXR1cm4gSih0LFRfLHMpO2Nhc2UiZHJvcCI6cmV0dXJuIEoodCxTXyxzKX19O2UuYWRkRXZlbnRMaXN0ZW5lcihvLGwpLG4ucHVzaCgoKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLGwpfSl9fWZ1bmN0aW9uIGZwKGUsdCxuKXt0bigpO3ZhciByPWUuX19rZXk7bGV0IG89ZS5nZXRQYXJlbnQoKTtpZihvIT09bnVsbCl7dmFyIGk9S2UoKTtpZihmZShpKSYmVyhlKSl7dmFye2FuY2hvcjpsLGZvY3VzOnN9PWksYT1sLmdldE5vZGUoKSx1PXMuZ2V0Tm9kZSgpO09jKGEsZSkmJmwuc2V0KGUuX19rZXksMCwiZWxlbWVudCIpLE9jKHUsZSkmJnMuc2V0KGUuX19rZXksMCwiZWxlbWVudCIpfWlmKGE9aSx1PSExLGZlKGEpJiZ0KXtpPWEuYW5jaG9yO2xldCBjPWEuZm9jdXM7aS5rZXk9PT1yJiYoRGMoaSxlLG8sZS5nZXRQcmV2aW91c1NpYmxpbmcoKSxlLmdldE5leHRTaWJsaW5nKCkpLHU9ITApLGMua2V5PT09ciYmKERjKGMsZSxvLGUuZ2V0UHJldmlvdXNTaWJsaW5nKCksZS5nZXROZXh0U2libGluZygpKSx1PSEwKX1lbHNlIFZsKGEpJiZ0JiZlLmlzU2VsZWN0ZWQoKSYmZS5zZWxlY3RQcmV2aW91cygpO2ZlKGEpJiZ0JiYhdT8ocj1lLmdldEluZGV4V2l0aGluUGFyZW50KCksc2koZSksTGMoYSxvLHIsLTEpKTpzaShlKSxufHxucihvKXx8by5jYW5CZUVtcHR5KCl8fCFvLmlzRW1wdHkoKXx8ZnAobyx0KSx0JiZybihvKSYmby5pc0VtcHR5KCkmJm8uc2VsZWN0RW5kKCl9fWNsYXNzIEJhe3N0YXRpYyBnZXRUeXBlKCl7Syg2NCx0aGlzLm5hbWUpfXN0YXRpYyBjbG9uZSgpe0soNjUsdGhpcy5uYW1lKX1jb25zdHJ1Y3Rvcih0KXt0aGlzLl9fdHlwZT10aGlzLmNvbnN0cnVjdG9yLmdldFR5cGUoKSx0aGlzLl9fbmV4dD10aGlzLl9fcHJldj10aGlzLl9fcGFyZW50PW51bGwsTF8odGhpcyx0KX1nZXRUeXBlKCl7cmV0dXJuIHRoaXMuX190eXBlfWlzQXR0YWNoZWQoKXtmb3IodmFyIHQ9dGhpcy5fX2tleTt0IT09bnVsbDspe2lmKHQ9PT0icm9vdCIpcmV0dXJuITA7aWYodD1rdCh0KSx0PT09bnVsbClicmVhazt0PXQuX19wYXJlbnR9cmV0dXJuITF9aXNTZWxlY3RlZCh0KXtpZih0PXR8fEtlKCksdD09bnVsbClyZXR1cm4hMTtsZXQgbj10LmdldE5vZGVzKCkuc29tZShyPT5yLl9fa2V5PT09dGhpcy5fX2tleSk7cmV0dXJuIFoodGhpcyk/bjpmZSh0KSYmdC5hbmNob3IudHlwZT09PSJlbGVtZW50IiYmdC5mb2N1cy50eXBlPT09ImVsZW1lbnQiJiZ0LmFuY2hvci5rZXk9PT10LmZvY3VzLmtleSYmdC5hbmNob3Iub2Zmc2V0PT09dC5mb2N1cy5vZmZzZXQ/ITE6bn1nZXRLZXkoKXtyZXR1cm4gdGhpcy5fX2tleX1nZXRJbmRleFdpdGhpblBhcmVudCgpe3ZhciB0PXRoaXMuZ2V0UGFyZW50KCk7aWYodD09PW51bGwpcmV0dXJuLTE7dD10LmdldEZpcnN0Q2hpbGQoKTtsZXQgbj0wO2Zvcig7dCE9PW51bGw7KXtpZih0aGlzLmlzKHQpKXJldHVybiBuO24rKyx0PXQuZ2V0TmV4dFNpYmxpbmcoKX1yZXR1cm4tMX1nZXRQYXJlbnQoKXtsZXQgdD10aGlzLmdldExhdGVzdCgpLl9fcGFyZW50O3JldHVybiB0PT09bnVsbD9udWxsOmt0KHQpfWdldFBhcmVudE9yVGhyb3coKXtsZXQgdD10aGlzLmdldFBhcmVudCgpO3JldHVybiB0PT09bnVsbCYmSyg2Nix0aGlzLl9fa2V5KSx0fWdldFRvcExldmVsRWxlbWVudCgpe2xldCB0PXRoaXM7Zm9yKDt0IT09bnVsbDspe2xldCBuPXQuZ2V0UGFyZW50KCk7aWYobnIobikpcmV0dXJuIHQ7dD1ufXJldHVybiBudWxsfWdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKXtsZXQgdD10aGlzLmdldFRvcExldmVsRWxlbWVudCgpO3JldHVybiB0PT09bnVsbCYmSyg2Nyx0aGlzLl9fa2V5KSx0fWdldFBhcmVudHMoKXtsZXQgdD1bXSxuPXRoaXMuZ2V0UGFyZW50KCk7Zm9yKDtuIT09bnVsbDspdC5wdXNoKG4pLG49bi5nZXRQYXJlbnQoKTtyZXR1cm4gdH1nZXRQYXJlbnRLZXlzKCl7bGV0IHQ9W10sbj10aGlzLmdldFBhcmVudCgpO2Zvcig7biE9PW51bGw7KXQucHVzaChuLl9fa2V5KSxuPW4uZ2V0UGFyZW50KCk7cmV0dXJuIHR9Z2V0UHJldmlvdXNTaWJsaW5nKCl7bGV0IHQ9dGhpcy5nZXRMYXRlc3QoKS5fX3ByZXY7cmV0dXJuIHQ9PT1udWxsP251bGw6a3QodCl9Z2V0UHJldmlvdXNTaWJsaW5ncygpe2xldCB0PVtdO3ZhciBuPXRoaXMuZ2V0UGFyZW50KCk7aWYobj09PW51bGwpcmV0dXJuIHQ7Zm9yKG49bi5nZXRGaXJzdENoaWxkKCk7biE9PW51bGwmJiFuLmlzKHRoaXMpOyl0LnB1c2gobiksbj1uLmdldE5leHRTaWJsaW5nKCk7cmV0dXJuIHR9Z2V0TmV4dFNpYmxpbmcoKXtsZXQgdD10aGlzLmdldExhdGVzdCgpLl9fbmV4dDtyZXR1cm4gdD09PW51bGw/bnVsbDprdCh0KX1nZXROZXh0U2libGluZ3MoKXtsZXQgdD1bXSxuPXRoaXMuZ2V0TmV4dFNpYmxpbmcoKTtmb3IoO24hPT1udWxsOyl0LnB1c2gobiksbj1uLmdldE5leHRTaWJsaW5nKCk7cmV0dXJuIHR9Z2V0Q29tbW9uQW5jZXN0b3IodCl7bGV0IG49dGhpcy5nZXRQYXJlbnRzKCk7dmFyIHI9dC5nZXRQYXJlbnRzKCk7Vyh0aGlzKSYmbi51bnNoaWZ0KHRoaXMpLFcodCkmJnIudW5zaGlmdCh0KSx0PW4ubGVuZ3RoO3ZhciBvPXIubGVuZ3RoO2lmKHQ9PT0wfHxvPT09MHx8blt0LTFdIT09cltvLTFdKXJldHVybiBudWxsO2ZvcihyPW5ldyBTZXQociksbz0wO288dDtvKyspe2xldCBpPW5bb107aWYoci5oYXMoaSkpcmV0dXJuIGl9cmV0dXJuIG51bGx9aXModCl7cmV0dXJuIHQ9PW51bGw/ITE6dGhpcy5fX2tleT09PXQuX19rZXl9aXNCZWZvcmUodCl7aWYodGhpcz09PXQpcmV0dXJuITE7aWYodC5pc1BhcmVudE9mKHRoaXMpKXJldHVybiEwO2lmKHRoaXMuaXNQYXJlbnRPZih0KSlyZXR1cm4hMTt2YXIgbj10aGlzLmdldENvbW1vbkFuY2VzdG9yKHQpO2xldCByPXRoaXM7Zm9yKDs7KXt2YXIgbz1yLmdldFBhcmVudE9yVGhyb3coKTtpZihvPT09bil7bz1yLmdldEluZGV4V2l0aGluUGFyZW50KCk7YnJlYWt9cj1vfWZvcihyPXQ7Oyl7aWYodD1yLmdldFBhcmVudE9yVGhyb3coKSx0PT09bil7bj1yLmdldEluZGV4V2l0aGluUGFyZW50KCk7YnJlYWt9cj10fXJldHVybiBvPG59aXNQYXJlbnRPZih0KXtsZXQgbj10aGlzLl9fa2V5O2lmKG49PT10Ll9fa2V5KXJldHVybiExO2Zvcig7dCE9PW51bGw7KXtpZih0Ll9fa2V5PT09bilyZXR1cm4hMDt0PXQuZ2V0UGFyZW50KCl9cmV0dXJuITF9Z2V0Tm9kZXNCZXR3ZWVuKHQpe2xldCBuPXRoaXMuaXNCZWZvcmUodCkscj1bXSxvPW5ldyBTZXQ7Zm9yKHZhciBpPXRoaXM7Oyl7dmFyIGw9aS5fX2tleTtpZihvLmhhcyhsKXx8KG8uYWRkKGwpLHIucHVzaChpKSksaT09PXQpYnJlYWs7aWYobD1XKGkpP24/aS5nZXRGaXJzdENoaWxkKCk6aS5nZXRMYXN0Q2hpbGQoKTpudWxsLGwhPT1udWxsKWk9bDtlbHNlIGlmKGw9bj9pLmdldE5leHRTaWJsaW5nKCk6aS5nZXRQcmV2aW91c1NpYmxpbmcoKSxsIT09bnVsbClpPWw7ZWxzZXtpZihpPWkuZ2V0UGFyZW50T3JUaHJvdygpLG8uaGFzKGkuX19rZXkpfHxyLnB1c2goaSksaT09PXQpYnJlYWs7bD1pO2RvIGw9PT1udWxsJiZLKDY4KSxpPW4/bC5nZXROZXh0U2libGluZygpOmwuZ2V0UHJldmlvdXNTaWJsaW5nKCksbD1sLmdldFBhcmVudCgpLGwhPT1udWxsJiYoaSE9PW51bGx8fG8uaGFzKGwuX19rZXkpfHxyLnB1c2gobCkpO3doaWxlKGk9PT1udWxsKX19cmV0dXJuIG58fHIucmV2ZXJzZSgpLHJ9aXNEaXJ0eSgpe2xldCB0PW50KCkuX2RpcnR5TGVhdmVzO3JldHVybiB0IT09bnVsbCYmdC5oYXModGhpcy5fX2tleSl9Z2V0TGF0ZXN0KCl7bGV0IHQ9a3QodGhpcy5fX2tleSk7cmV0dXJuIHQ9PT1udWxsJiZLKDExMyksdH1nZXRXcml0YWJsZSgpe3RuKCk7dmFyIHQ9UnIoKSxuPW50KCk7dD10Ll9ub2RlTWFwO2xldCByPXRoaXMuX19rZXksbz10aGlzLmdldExhdGVzdCgpLGk9by5fX3BhcmVudDtuPW4uX2Nsb25lTm90TmVlZGVkO3ZhciBsPUtlKCk7cmV0dXJuIGwhPT1udWxsJiYobC5fY2FjaGVkTm9kZXM9bnVsbCksbi5oYXMocik/KE5jKG8pLG8pOihsPW8uY29uc3RydWN0b3IuY2xvbmUobyksbC5fX3BhcmVudD1pLGwuX19uZXh0PW8uX19uZXh0LGwuX19wcmV2PW8uX19wcmV2LFcobykmJlcobCk/KGwuX19maXJzdD1vLl9fZmlyc3QsbC5fX2xhc3Q9by5fX2xhc3QsbC5fX3NpemU9by5fX3NpemUsbC5fX2luZGVudD1vLl9faW5kZW50LGwuX19mb3JtYXQ9by5fX2Zvcm1hdCxsLl9fZGlyPW8uX19kaXIpOloobykmJloobCkmJihsLl9fZm9ybWF0PW8uX19mb3JtYXQsbC5fX3N0eWxlPW8uX19zdHlsZSxsLl9fbW9kZT1vLl9fbW9kZSxsLl9fZGV0YWlsPW8uX19kZXRhaWwpLG4uYWRkKHIpLGwuX19rZXk9cixOYyhsKSx0LnNldChyLGwpLGwpfWdldFRleHRDb250ZW50KCl7cmV0dXJuIiJ9Z2V0VGV4dENvbnRlbnRTaXplKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGh9Y3JlYXRlRE9NKCl7Syg3MCl9dXBkYXRlRE9NKCl7Syg3MSl9ZXhwb3J0RE9NKHQpe3JldHVybntlbGVtZW50OnRoaXMuY3JlYXRlRE9NKHQuX2NvbmZpZyx0KX19ZXhwb3J0SlNPTigpe0soNzIpfXN0YXRpYyBpbXBvcnRKU09OKCl7SygxOCx0aGlzLm5hbWUpfXN0YXRpYyB0cmFuc2Zvcm0oKXtyZXR1cm4gbnVsbH1yZW1vdmUodCl7ZnAodGhpcywhMCx0KX1yZXBsYWNlKHQsbil7dG4oKTt2YXIgcj1LZSgpO3IhPT1udWxsJiYocj1yLmNsb25lKCkpLHdmKHRoaXMsdCk7bGV0IG89dGhpcy5nZXRMYXRlc3QoKSxpPXRoaXMuX19rZXksbD10Ll9fa2V5LHM9dC5nZXRXcml0YWJsZSgpO3Q9dGhpcy5nZXRQYXJlbnRPclRocm93KCkuZ2V0V3JpdGFibGUoKTtsZXQgYT10Ll9fc2l6ZTtzaShzKTtsZXQgdT1vLmdldFByZXZpb3VzU2libGluZygpLGM9by5nZXROZXh0U2libGluZygpLGQ9by5fX3ByZXYsZj1vLl9fbmV4dCxoPW8uX19wYXJlbnQ7cmV0dXJuIGZwKG8sITEsITApLHU9PT1udWxsP3QuX19maXJzdD1sOnUuZ2V0V3JpdGFibGUoKS5fX25leHQ9bCxzLl9fcHJldj1kLGM9PT1udWxsP3QuX19sYXN0PWw6Yy5nZXRXcml0YWJsZSgpLl9fcHJldj1sLHMuX19uZXh0PWYscy5fX3BhcmVudD1oLHQuX19zaXplPWEsbiYmdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2goZz0+e3MuYXBwZW5kKGcpfSksZmUocikmJihTcihyKSxuPXIuYW5jaG9yLHI9ci5mb2N1cyxuLmtleT09PWkmJkF5KG4scyksci5rZXk9PT1pJiZBeShyLHMpKSx4bygpPT09aSYmTHQobCksc31pbnNlcnRBZnRlcih0LG49ITApe3RuKCksd2YodGhpcyx0KTt2YXIgcj10aGlzLmdldFdyaXRhYmxlKCk7bGV0IG89dC5nZXRXcml0YWJsZSgpO3ZhciBpPW8uZ2V0UGFyZW50KCk7bGV0IGw9S2UoKTt2YXIgcz0hMSxhPSExO2lmKGkhPT1udWxsKXt2YXIgdT10LmdldEluZGV4V2l0aGluUGFyZW50KCk7c2kobyksZmUobCkmJihhPWkuX19rZXkscz1sLmFuY2hvcixpPWwuZm9jdXMscz1zLnR5cGU9PT0iZWxlbWVudCImJnMua2V5PT09YSYmcy5vZmZzZXQ9PT11KzEsYT1pLnR5cGU9PT0iZWxlbWVudCImJmkua2V5PT09YSYmaS5vZmZzZXQ9PT11KzEpfWk9dGhpcy5nZXROZXh0U2libGluZygpLHU9dGhpcy5nZXRQYXJlbnRPclRocm93KCkuZ2V0V3JpdGFibGUoKTtsZXQgYz1vLl9fa2V5LGQ9ci5fX25leHQ7cmV0dXJuIGk9PT1udWxsP3UuX19sYXN0PWM6aS5nZXRXcml0YWJsZSgpLl9fcHJldj1jLHUuX19zaXplKyssci5fX25leHQ9YyxvLl9fbmV4dD1kLG8uX19wcmV2PXIuX19rZXksby5fX3BhcmVudD1yLl9fcGFyZW50LG4mJmZlKGwpJiYobj10aGlzLmdldEluZGV4V2l0aGluUGFyZW50KCksTGMobCx1LG4rMSkscj11Ll9fa2V5LHMmJmwuYW5jaG9yLnNldChyLG4rMiwiZWxlbWVudCIpLGEmJmwuZm9jdXMuc2V0KHIsbisyLCJlbGVtZW50IikpLHR9aW5zZXJ0QmVmb3JlKHQsbj0hMCl7dG4oKSx3Zih0aGlzLHQpO3ZhciByPXRoaXMuZ2V0V3JpdGFibGUoKTtsZXQgbz10LmdldFdyaXRhYmxlKCksaT1vLl9fa2V5O3NpKG8pO2xldCBsPXRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCkscz10aGlzLmdldFBhcmVudE9yVGhyb3coKS5nZXRXcml0YWJsZSgpLGE9ci5fX3ByZXYsdT10aGlzLmdldEluZGV4V2l0aGluUGFyZW50KCk7cmV0dXJuIGw9PT1udWxsP3MuX19maXJzdD1pOmwuZ2V0V3JpdGFibGUoKS5fX25leHQ9aSxzLl9fc2l6ZSsrLHIuX19wcmV2PWksby5fX3ByZXY9YSxvLl9fbmV4dD1yLl9fa2V5LG8uX19wYXJlbnQ9ci5fX3BhcmVudCxyPUtlKCksbiYmZmUocikmJihuPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpLExjKHIsbix1KSksdH1pc1BhcmVudFJlcXVpcmVkKCl7cmV0dXJuITF9Y3JlYXRlUGFyZW50RWxlbWVudE5vZGUoKXtyZXR1cm4gdmkoKX1zZWxlY3RQcmV2aW91cyh0LG4pe3RuKCk7bGV0IHI9dGhpcy5nZXRQcmV2aW91c1NpYmxpbmcoKSxvPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpO3JldHVybiByPT09bnVsbD9vLnNlbGVjdCgwLDApOlcocik/ci5zZWxlY3QoKTpaKHIpP3Iuc2VsZWN0KHQsbik6KHQ9ci5nZXRJbmRleFdpdGhpblBhcmVudCgpKzEsby5zZWxlY3QodCx0KSl9c2VsZWN0TmV4dCh0LG4pe3RuKCk7bGV0IHI9dGhpcy5nZXROZXh0U2libGluZygpLG89dGhpcy5nZXRQYXJlbnRPclRocm93KCk7cmV0dXJuIHI9PT1udWxsP28uc2VsZWN0KCk6VyhyKT9yLnNlbGVjdCgwLDApOloocik/ci5zZWxlY3QodCxuKToodD1yLmdldEluZGV4V2l0aGluUGFyZW50KCksby5zZWxlY3QodCx0KSl9bWFya0RpcnR5KCl7dGhpcy5nZXRXcml0YWJsZSgpfX1jbGFzcyBXbCBleHRlbmRzIEJhe3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuImxpbmVicmVhayJ9c3RhdGljIGNsb25lKHQpe3JldHVybiBuZXcgV2wodC5fX2tleSl9Y29uc3RydWN0b3IodCl7c3VwZXIodCl9Z2V0VGV4dENvbnRlbnQoKXtyZXR1cm5gCmB9Y3JlYXRlRE9NKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIil9dXBkYXRlRE9NKCl7cmV0dXJuITF9c3RhdGljIGltcG9ydERPTSgpe3JldHVybnticjp0PT57bGV0IG49dC5wYXJlbnRFbGVtZW50LHIsbztyZXR1cm4gbiE9PW51bGwmJigocj1uLmZpcnN0Q2hpbGQpPT09dHx8ci5uZXh0U2libGluZz09PXQmJnIubm9kZVR5cGU9PT0zJiYoci50ZXh0Q29udGVudHx8IiIpLm1hdGNoKC9eKCB8XHR8XHI/XG4pKyQvKSE9PW51bGwpJiYoKG89bi5sYXN0Q2hpbGQpPT09dHx8by5wcmV2aW91c1NpYmxpbmc9PT10JiZvLm5vZGVUeXBlPT09MyYmKG8udGV4dENvbnRlbnR8fCIiKS5tYXRjaCgvXiggfFx0fFxyP1xuKSskLykhPT1udWxsKT9udWxsOntjb252ZXJzaW9uOk8yLHByaW9yaXR5OjB9fX19c3RhdGljIGltcG9ydEpTT04oKXtyZXR1cm4gTmwoKX1leHBvcnRKU09OKCl7cmV0dXJue3R5cGU6ImxpbmVicmVhayIsdmVyc2lvbjoxfX19ZnVuY3Rpb24gTzIoKXtyZXR1cm57bm9kZTpObCgpfX1mdW5jdGlvbiBObCgpe3JldHVybiBGYShuZXcgV2wpfWZ1bmN0aW9uIF9hKGUpe3JldHVybiBlIGluc3RhbmNlb2YgV2x9ZnVuY3Rpb24gRWYoZSx0KXtyZXR1cm4gdCYxNj8iY29kZSI6dCYxMjg/Im1hcmsiOnQmMzI/InN1YiI6dCY2ND8ic3VwIjpudWxsfWZ1bmN0aW9uIENmKGUsdCl7cmV0dXJuIHQmMT8ic3Ryb25nIjp0JjI/ImVtIjoic3BhbiJ9ZnVuY3Rpb24gJGYoZSx0LG4scixvKXtlPXIuY2xhc3NMaXN0LHI9QnMobywiYmFzZSIpLHIhPT12b2lkIDAmJmUuYWRkKC4uLnIpLHI9QnMobywidW5kZXJsaW5lU3RyaWtldGhyb3VnaCIpO2xldCBpPSExLGw9dCY4JiZ0JjQ7dmFyIHM9biY4JiZuJjQ7ciE9PXZvaWQgMCYmKHM/KGk9ITAsbHx8ZS5hZGQoLi4ucikpOmwmJmUucmVtb3ZlKC4uLnIpKTtmb3IobGV0IGEgaW4gbGkpcz1saVthXSxyPUJzKG8sYSksciE9PXZvaWQgMCYmKG4mcz8haXx8YSE9PSJ1bmRlcmxpbmUiJiZhIT09InN0cmlrZXRocm91Z2giPyghKHQmcyl8fGwmJmE9PT0idW5kZXJsaW5lInx8YT09PSJzdHJpa2V0aHJvdWdoIikmJmUuYWRkKC4uLnIpOnQmcyYmZS5yZW1vdmUoLi4ucik6dCZzJiZlLnJlbW92ZSguLi5yKSl9ZnVuY3Rpb24ga2YoZSx0LG4pe2xldCByPXQuZmlyc3RDaGlsZDtpZihuPW4uaXNDb21wb3NpbmcoKSxlKz1uP21kOiIiLHI9PW51bGwpdC50ZXh0Q29udGVudD1lO2Vsc2UgaWYodD1yLm5vZGVWYWx1ZSx0IT09ZSlpZihufHxBbyl7bj10Lmxlbmd0aDtsZXQgbz1lLmxlbmd0aCxpPTAsbD0wO2Zvcig7aTxuJiZpPG8mJnRbaV09PT1lW2ldOylpKys7Zm9yKDtsK2k8biYmbCtpPG8mJnRbbi1sLTFdPT09ZVtvLWwtMV07KWwrKztlPVtpLG4taS1sLGUuc2xpY2UoaSxvLWwpXTtsZXRbcyxhLHVdPWU7YSE9PTAmJnIuZGVsZXRlRGF0YShzLGEpLHIuaW5zZXJ0RGF0YShzLHUpfWVsc2Ugci5ub2RlVmFsdWU9ZX1mdW5jdGlvbiB5dShlLHQpe3JldHVybiB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCksdC5hcHBlbmRDaGlsZChlKSx0fWNsYXNzIGJpIGV4dGVuZHMgQmF7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4idGV4dCJ9c3RhdGljIGNsb25lKHQpe3JldHVybiBuZXcgYmkodC5fX3RleHQsdC5fX2tleSl9Y29uc3RydWN0b3IodCxuKXtzdXBlcihuKSx0aGlzLl9fdGV4dD10LHRoaXMuX19mb3JtYXQ9MCx0aGlzLl9fc3R5bGU9IiIsdGhpcy5fX2RldGFpbD10aGlzLl9fbW9kZT0wfWdldEZvcm1hdCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fZm9ybWF0fWdldERldGFpbCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fZGV0YWlsfWdldE1vZGUoKXtsZXQgdD10aGlzLmdldExhdGVzdCgpO3JldHVybiBwMlt0Ll9fbW9kZV19Z2V0U3R5bGUoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX3N0eWxlfWlzVG9rZW4oKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX21vZGU9PT0xfWlzQ29tcG9zaW5nKCl7cmV0dXJuIHRoaXMuX19rZXk9PT14bygpfWlzU2VnbWVudGVkKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19tb2RlPT09Mn1pc0RpcmVjdGlvbmxlc3MoKXtyZXR1cm4odGhpcy5nZXRMYXRlc3QoKS5fX2RldGFpbCYxKSE9PTB9aXNVbm1lcmdlYWJsZSgpe3JldHVybih0aGlzLmdldExhdGVzdCgpLl9fZGV0YWlsJjIpIT09MH1oYXNGb3JtYXQodCl7cmV0dXJuIHQ9bGlbdF0sKHRoaXMuZ2V0Rm9ybWF0KCkmdCkhPT0wfWlzU2ltcGxlVGV4dCgpe3JldHVybiB0aGlzLl9fdHlwZT09PSJ0ZXh0IiYmdGhpcy5fX21vZGU9PT0wfWdldFRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX190ZXh0fWdldEZvcm1hdEZsYWdzKHQsbil7bGV0IHI9dGhpcy5nZXRMYXRlc3QoKS5fX2Zvcm1hdDtyZXR1cm4gQV8ocix0LG4pfWNyZWF0ZURPTSh0KXt2YXIgbj10aGlzLl9fZm9ybWF0LHI9RWYodGhpcyxuKTtsZXQgbz1DZih0aGlzLG4pLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChyPT09bnVsbD9vOnIpLGw9aTtyZXR1cm4gdGhpcy5oYXNGb3JtYXQoImNvZGUiKSYmaS5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCJmYWxzZSIpLHIhPT1udWxsJiYobD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KG8pLGkuYXBwZW5kQ2hpbGQobCkpLHI9bCxrZih0aGlzLl9fdGV4dCxyLHRoaXMpLHQ9dC50aGVtZS50ZXh0LHQhPT12b2lkIDAmJiRmKG8sMCxuLHIsdCksbj10aGlzLl9fc3R5bGUsbiE9PSIiJiYoaS5zdHlsZS5jc3NUZXh0PW4pLGl9dXBkYXRlRE9NKHQsbixyKXtsZXQgbz10aGlzLl9fdGV4dDt2YXIgaT10Ll9fZm9ybWF0LGw9dGhpcy5fX2Zvcm1hdCxzPUVmKHRoaXMsaSk7bGV0IGE9RWYodGhpcyxsKTt2YXIgdT1DZih0aGlzLGkpO2xldCBjPUNmKHRoaXMsbCk7cmV0dXJuKHM9PT1udWxsP3U6cykhPT0oYT09PW51bGw/YzphKT8hMDpzPT09YSYmdSE9PWM/KGk9bi5maXJzdENoaWxkLGk9PW51bGwmJksoNDgpLHQ9cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGMpLGtmKG8sdCx0aGlzKSxyPXIudGhlbWUudGV4dCxyIT09dm9pZCAwJiYkZihjLDAsbCx0LHIpLG4ucmVwbGFjZUNoaWxkKHMsaSksITEpOih1PW4sYSE9PW51bGwmJnMhPT1udWxsJiYodT1uLmZpcnN0Q2hpbGQsdT09bnVsbCYmSyg0OSkpLGtmKG8sdSx0aGlzKSxyPXIudGhlbWUudGV4dCxyIT09dm9pZCAwJiZpIT09bCYmJGYoYyxpLGwsdSxyKSxsPXRoaXMuX19zdHlsZSx0Ll9fc3R5bGUhPT1sJiYobi5zdHlsZS5jc3NUZXh0PWwpLCExKX1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJueyIjdGV4dCI6KCk9Pih7Y29udmVyc2lvbjpMMixwcmlvcml0eTowfSksYjooKT0+KHtjb252ZXJzaW9uOk0yLHByaW9yaXR5OjB9KSxjb2RlOigpPT4oe2NvbnZlcnNpb246bG8scHJpb3JpdHk6MH0pLGVtOigpPT4oe2NvbnZlcnNpb246bG8scHJpb3JpdHk6MH0pLGk6KCk9Pih7Y29udmVyc2lvbjpsbyxwcmlvcml0eTowfSksczooKT0+KHtjb252ZXJzaW9uOmxvLHByaW9yaXR5OjB9KSxzcGFuOigpPT4oe2NvbnZlcnNpb246QTIscHJpb3JpdHk6MH0pLHN0cm9uZzooKT0+KHtjb252ZXJzaW9uOmxvLHByaW9yaXR5OjB9KSxzdWI6KCk9Pih7Y29udmVyc2lvbjpsbyxwcmlvcml0eTowfSksc3VwOigpPT4oe2NvbnZlcnNpb246bG8scHJpb3JpdHk6MH0pLHU6KCk9Pih7Y29udmVyc2lvbjpsbyxwcmlvcml0eTowfSl9fXN0YXRpYyBpbXBvcnRKU09OKHQpe2xldCBuPUN0KHQudGV4dCk7cmV0dXJuIG4uc2V0Rm9ybWF0KHQuZm9ybWF0KSxuLnNldERldGFpbCh0LmRldGFpbCksbi5zZXRNb2RlKHQubW9kZSksbi5zZXRTdHlsZSh0LnN0eWxlKSxufWV4cG9ydERPTSh0KXtyZXR1cm57ZWxlbWVudDp0fT1zdXBlci5leHBvcnRET00odCksdCE9PW51bGwmJnhkKHQpfHxLKDEzMiksdC5zdHlsZS53aGl0ZVNwYWNlPSJwcmUtd3JhcCIsdGhpcy5oYXNGb3JtYXQoImJvbGQiKSYmKHQ9eXUodCwiYiIpKSx0aGlzLmhhc0Zvcm1hdCgiaXRhbGljIikmJih0PXl1KHQsImkiKSksdGhpcy5oYXNGb3JtYXQoInN0cmlrZXRocm91Z2giKSYmKHQ9eXUodCwicyIpKSx0aGlzLmhhc0Zvcm1hdCgidW5kZXJsaW5lIikmJih0PXl1KHQsInUiKSkse2VsZW1lbnQ6dH19ZXhwb3J0SlNPTigpe3JldHVybntkZXRhaWw6dGhpcy5nZXREZXRhaWwoKSxmb3JtYXQ6dGhpcy5nZXRGb3JtYXQoKSxtb2RlOnRoaXMuZ2V0TW9kZSgpLHN0eWxlOnRoaXMuZ2V0U3R5bGUoKSx0ZXh0OnRoaXMuZ2V0VGV4dENvbnRlbnQoKSx0eXBlOiJ0ZXh0Iix2ZXJzaW9uOjF9fXNlbGVjdGlvblRyYW5zZm9ybSgpe31zZXRGb3JtYXQodCl7bGV0IG49dGhpcy5nZXRXcml0YWJsZSgpO3JldHVybiBuLl9fZm9ybWF0PXR5cGVvZiB0PT0ic3RyaW5nIj9saVt0XTp0LG59c2V0RGV0YWlsKHQpe2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gbi5fX2RldGFpbD10eXBlb2YgdD09InN0cmluZyI/ZDJbdF06dCxufXNldFN0eWxlKHQpe2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gbi5fX3N0eWxlPXQsbn10b2dnbGVGb3JtYXQodCl7cmV0dXJuIHQ9bGlbdF0sdGhpcy5zZXRGb3JtYXQodGhpcy5nZXRGb3JtYXQoKV50KX10b2dnbGVEaXJlY3Rpb25sZXNzKCl7bGV0IHQ9dGhpcy5nZXRXcml0YWJsZSgpO3JldHVybiB0Ll9fZGV0YWlsXj0xLHR9dG9nZ2xlVW5tZXJnZWFibGUoKXtsZXQgdD10aGlzLmdldFdyaXRhYmxlKCk7cmV0dXJuIHQuX19kZXRhaWxePTIsdH1zZXRNb2RlKHQpe2lmKHQ9aDJbdF0sdGhpcy5fX21vZGU9PT10KXJldHVybiB0aGlzO2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gbi5fX21vZGU9dCxufXNldFRleHRDb250ZW50KHQpe2lmKHRoaXMuX190ZXh0PT09dClyZXR1cm4gdGhpcztsZXQgbj10aGlzLmdldFdyaXRhYmxlKCk7cmV0dXJuIG4uX190ZXh0PXQsbn1zZWxlY3QodCxuKXt0bigpO2xldCByPUtlKCk7dmFyIG89dGhpcy5nZXRUZXh0Q29udGVudCgpO2xldCBpPXRoaXMuX19rZXk7aWYodHlwZW9mIG89PSJzdHJpbmciPyhvPW8ubGVuZ3RoLHQ9PT12b2lkIDAmJih0PW8pLG49PT12b2lkIDAmJihuPW8pKTpuPXQ9MCxmZShyKSlvPXhvKCksbyE9PXIuYW5jaG9yLmtleSYmbyE9PXIuZm9jdXMua2V5fHxMdChpKSxyLnNldFRleHROb2RlUmFuZ2UodGhpcyx0LHRoaXMsbik7ZWxzZSByZXR1cm4gbFMoaSx0LGksbiwidGV4dCIsInRleHQiKTtyZXR1cm4gcn1zcGxpY2VUZXh0KHQsbixyLG8pe2xldCBpPXRoaXMuZ2V0V3JpdGFibGUoKSxsPWkuX190ZXh0LHM9ci5sZW5ndGgsYT10OzA+YSYmKGE9cythLDA+YSYmKGE9MCkpO2xldCB1PUtlKCk7cmV0dXJuIG8mJmZlKHUpJiYodCs9cyx1LnNldFRleHROb2RlUmFuZ2UoaSx0LGksdCkpLG49bC5zbGljZSgwLGEpK3IrbC5zbGljZShhK24pLGkuX190ZXh0PW4saX1jYW5JbnNlcnRUZXh0QmVmb3JlKCl7cmV0dXJuITB9Y2FuSW5zZXJ0VGV4dEFmdGVyKCl7cmV0dXJuITB9c3BsaXRUZXh0KC4uLnQpe3RuKCk7dmFyIG49dGhpcy5nZXRMYXRlc3QoKSxyPW4uZ2V0VGV4dENvbnRlbnQoKSxvPW4uX19rZXksaT14bygpLGw9bmV3IFNldCh0KTt0PVtdO2Zvcih2YXIgcz1yLmxlbmd0aCxhPSIiLHU9MDt1PHM7dSsrKWEhPT0iIiYmbC5oYXModSkmJih0LnB1c2goYSksYT0iIiksYSs9clt1XTtpZihhIT09IiImJnQucHVzaChhKSxsPXQubGVuZ3RoLGw9PT0wKXJldHVybltdO2lmKHRbMF09PT1yKXJldHVybltuXTt2YXIgYz10WzBdO3I9bi5nZXRQYXJlbnRPclRocm93KCksdT1uLmdldEZvcm1hdCgpO2xldCBkPW4uZ2V0U3R5bGUoKSxmPW4uX19kZXRhaWw7cz0hMSxuLmlzU2VnbWVudGVkKCk/KGE9Q3QoYyksYS5fX2Zvcm1hdD11LGEuX19zdHlsZT1kLGEuX19kZXRhaWw9ZixzPSEwKTooYT1uLmdldFdyaXRhYmxlKCksYS5fX3RleHQ9Yyksbj1LZSgpLGE9W2FdLGM9Yy5sZW5ndGg7Zm9yKGxldCBtPTE7bTxsO20rKyl7dmFyIGg9dFttXSxnPWgubGVuZ3RoO2g9Q3QoaCkuZ2V0V3JpdGFibGUoKSxoLl9fZm9ybWF0PXUsaC5fX3N0eWxlPWQsaC5fX2RldGFpbD1mO2xldCBfPWguX19rZXk7aWYoZz1jK2csZmUobikpe2xldCB2PW4uYW5jaG9yLHk9bi5mb2N1czt2LmtleT09PW8mJnYudHlwZT09PSJ0ZXh0IiYmdi5vZmZzZXQ+YyYmdi5vZmZzZXQ8PWcmJih2LmtleT1fLHYub2Zmc2V0LT1jLG4uZGlydHk9ITApLHkua2V5PT09byYmeS50eXBlPT09InRleHQiJiZ5Lm9mZnNldD5jJiZ5Lm9mZnNldDw9ZyYmKHkua2V5PV8seS5vZmZzZXQtPWMsbi5kaXJ0eT0hMCl9aT09PW8mJkx0KF8pLGM9ZyxhLnB1c2goaCl9cmV0dXJuIG89dGhpcy5nZXRQcmV2aW91c1NpYmxpbmcoKSxpPXRoaXMuZ2V0TmV4dFNpYmxpbmcoKSxvIT09bnVsbCYmTmMobyksaSE9PW51bGwmJk5jKGkpLG89ci5nZXRXcml0YWJsZSgpLGk9dGhpcy5nZXRJbmRleFdpdGhpblBhcmVudCgpLHM/KG8uc3BsaWNlKGksMCxhKSx0aGlzLnJlbW92ZSgpKTpvLnNwbGljZShpLDEsYSksZmUobikmJkxjKG4scixpLGwtMSksYX1tZXJnZVdpdGhTaWJsaW5nKHQpe3ZhciBuPXQ9PT10aGlzLmdldFByZXZpb3VzU2libGluZygpO258fHQ9PT10aGlzLmdldE5leHRTaWJsaW5nKCl8fEsoNTApO3ZhciByPXRoaXMuX19rZXk7bGV0IG89dC5fX2tleSxpPXRoaXMuX190ZXh0LGw9aS5sZW5ndGg7eG8oKT09PW8mJkx0KHIpO2xldCBzPUtlKCk7aWYoZmUocykpe2xldCBhPXMuYW5jaG9yLHU9cy5mb2N1czthIT09bnVsbCYmYS5rZXk9PT1vJiYoRnkoYSxuLHIsdCxsKSxzLmRpcnR5PSEwKSx1IT09bnVsbCYmdS5rZXk9PT1vJiYoRnkodSxuLHIsdCxsKSxzLmRpcnR5PSEwKX1yZXR1cm4gcj10Ll9fdGV4dCx0aGlzLnNldFRleHRDb250ZW50KG4/citpOmkrciksbj10aGlzLmdldFdyaXRhYmxlKCksdC5yZW1vdmUoKSxufWlzVGV4dEVudGl0eSgpe3JldHVybiExfX1mdW5jdGlvbiBBMihlKXtsZXQgdD1lLnN0eWxlLmZvbnRXZWlnaHQ9PT0iNzAwIixuPWUuc3R5bGUudGV4dERlY29yYXRpb249PT0ibGluZS10aHJvdWdoIixyPWUuc3R5bGUuZm9udFN0eWxlPT09Iml0YWxpYyIsbz1lLnN0eWxlLnRleHREZWNvcmF0aW9uPT09InVuZGVybGluZSIsaT1lLnN0eWxlLnZlcnRpY2FsQWxpZ247cmV0dXJue2ZvckNoaWxkOmw9PihaKGwpJiYodCYmbC50b2dnbGVGb3JtYXQoImJvbGQiKSxuJiZsLnRvZ2dsZUZvcm1hdCgic3RyaWtldGhyb3VnaCIpLHImJmwudG9nZ2xlRm9ybWF0KCJpdGFsaWMiKSxvJiZsLnRvZ2dsZUZvcm1hdCgidW5kZXJsaW5lIiksaT09PSJzdWIiJiZsLnRvZ2dsZUZvcm1hdCgic3Vic2NyaXB0IiksaT09PSJzdXBlciImJmwudG9nZ2xlRm9ybWF0KCJzdXBlcnNjcmlwdCIpKSxsKSxub2RlOm51bGx9fWZ1bmN0aW9uIE0yKGUpe2xldCB0PWUuc3R5bGUuZm9udFdlaWdodD09PSJub3JtYWwiO3JldHVybntmb3JDaGlsZDpuPT4oWihuKSYmIXQmJm4udG9nZ2xlRm9ybWF0KCJib2xkIiksbiksbm9kZTpudWxsfX1sZXQgUHk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTDIoZSl7ZS5wYXJlbnRFbGVtZW50PT09bnVsbCYmSygxMjkpO2Zvcih2YXIgdD1lLnRleHRDb250ZW50fHwiIixuLHI9ZS5wYXJlbnROb2RlLG89W2VdO3IhPT1udWxsJiYobj1QeS5nZXQocikpPT09dm9pZCAwJiYhKHIubm9kZU5hbWU9PT0iUFJFInx8ci5ub2RlVHlwZT09PTEmJnIuc3R5bGUud2hpdGVTcGFjZS5zdGFydHNXaXRoKCJwcmUiKSk7KW8ucHVzaChyKSxyPXIucGFyZW50Tm9kZTtmb3Iobj1uPT09dm9pZCAwP3I6bixyPTA7cjxvLmxlbmd0aDtyKyspUHkuc2V0KG9bcl0sbik7aWYobiE9PW51bGwpe2Zvcih0PXQuc3BsaXQoLyhccj9cbnxcdCkvKSxlPVtdLG89dC5sZW5ndGgsbj0wO248bztuKyspcj10W25dLHI9PT1gCmB8fHI9PT1gXHIKYD9lLnB1c2goTmwoKSk6cj09PSIJIj9lLnB1c2goX2QoKSk6ciE9PSIiJiZlLnB1c2goQ3QocikpO3JldHVybntub2RlOmV9fWlmKHQ9dC5yZXBsYWNlKC9cci9nLCIiKS5yZXBsYWNlKC9bIFx0XG5dKy9nLCIgIiksdD09PSIiKXJldHVybntub2RlOm51bGx9O2lmKHRbMF09PT0iICIpe2ZvcihvPWUsbj0hMDtvIT09bnVsbCYmKG89T3kobywhMSkpIT09bnVsbDspaWYocj1vLnRleHRDb250ZW50fHwiIiwwPHIubGVuZ3RoKXsvWyBcdFxuXSQvLnRlc3QocikmJih0PXQuc2xpY2UoMSkpLG49ITE7YnJlYWt9biYmKHQ9dC5zbGljZSgxKSl9aWYodFt0Lmxlbmd0aC0xXT09PSIgIil7Zm9yKG89ITA7ZSE9PW51bGwmJihlPU95KGUsITApKSE9PW51bGw7KWlmKDA8KGUudGV4dENvbnRlbnR8fCIiKS5yZXBsYWNlKC9eKCB8XHR8XHI/XG4pKy8sIiIpLmxlbmd0aCl7bz0hMTticmVha31vJiYodD10LnNsaWNlKDAsdC5sZW5ndGgtMSkpfXJldHVybiB0PT09IiI/e25vZGU6bnVsbH06e25vZGU6Q3QodCl9fWxldCBEMj1uZXcgUmVnRXhwKC9eKGF8YWJicnxhY3JvbnltfGJ8Y2l0ZXxjb2RlfGRlbHxlbXxpfGluc3xrYmR8bGFiZWx8b3V0cHV0fHF8cnVieXxzfHNhbXB8c3BhbnxzdHJvbmd8c3VifHN1cHx0aW1lfHV8dHR8dmFyKSQvLCJpIik7ZnVuY3Rpb24gT3koZSx0KXtmb3IoOzspe2Zvcih2YXIgbj12b2lkIDA7KG49dD9lLm5leHRTaWJsaW5nOmUucHJldmlvdXNTaWJsaW5nKT09PW51bGw7KWlmKGU9ZS5wYXJlbnRFbGVtZW50LGU9PT1udWxsKXJldHVybiBudWxsO2lmKGU9bixlLm5vZGVUeXBlPT09MSYmKG49ZS5zdHlsZS5kaXNwbGF5LG49PT0iIiYmZS5ub2RlTmFtZS5tYXRjaChEMik9PT1udWxsfHxuIT09IiImJiFuLnN0YXJ0c1dpdGgoImlubGluZSIpKSlyZXR1cm4gbnVsbDtmb3IoOyhuPXQ/ZS5maXJzdENoaWxkOmUubGFzdENoaWxkKSE9PW51bGw7KWU9bjtpZihlLm5vZGVUeXBlPT09MylyZXR1cm4gZTtpZihlLm5vZGVOYW1lPT09IkJSIilyZXR1cm4gbnVsbH19bGV0IEkyPXtjb2RlOiJjb2RlIixlbToiaXRhbGljIixpOiJpdGFsaWMiLHM6InN0cmlrZXRocm91Z2giLHN0cm9uZzoiYm9sZCIsc3ViOiJzdWJzY3JpcHQiLHN1cDoic3VwZXJzY3JpcHQiLHU6InVuZGVybGluZSJ9O2Z1bmN0aW9uIGxvKGUpe2xldCB0PUkyW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07cmV0dXJuIHQ9PT12b2lkIDA/e25vZGU6bnVsbH06e2ZvckNoaWxkOm49PihaKG4pJiYhbi5oYXNGb3JtYXQodCkmJm4udG9nZ2xlRm9ybWF0KHQpLG4pLG5vZGU6bnVsbH19ZnVuY3Rpb24gQ3QoZT0iIil7cmV0dXJuIEZhKG5ldyBiaShlKSl9ZnVuY3Rpb24gWihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGJpfWNsYXNzIFVsIGV4dGVuZHMgYml7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4idGFiIn1zdGF0aWMgY2xvbmUodCl7bGV0IG49bmV3IFVsKHQuX19rZXkpO3JldHVybiBuLl9fdGV4dD10Ll9fdGV4dCxuLl9fZm9ybWF0PXQuX19mb3JtYXQsbi5fX3N0eWxlPXQuX19zdHlsZSxufWNvbnN0cnVjdG9yKHQpe3N1cGVyKCIJIix0KSx0aGlzLl9fZGV0YWlsPTJ9c3RhdGljIGltcG9ydERPTSgpe3JldHVybiBudWxsfXN0YXRpYyBpbXBvcnRKU09OKHQpe2xldCBuPV9kKCk7cmV0dXJuIG4uc2V0Rm9ybWF0KHQuZm9ybWF0KSxuLnNldFN0eWxlKHQuc3R5bGUpLG59ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksdHlwZToidGFiIix2ZXJzaW9uOjF9fXNldFRleHRDb250ZW50KCl7SygxMjYpfXNldERldGFpbCgpe0soMTI3KX1zZXRNb2RlKCl7SygxMjgpfWNhbkluc2VydFRleHRCZWZvcmUoKXtyZXR1cm4hMX1jYW5JbnNlcnRUZXh0QWZ0ZXIoKXtyZXR1cm4hMX19ZnVuY3Rpb24gX2QoKXtyZXR1cm4gRmEobmV3IFVsKX1jbGFzcyBFcntjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5fc2VsZWN0aW9uPW51bGwsdGhpcy5rZXk9dCx0aGlzLm9mZnNldD1uLHRoaXMudHlwZT1yfWlzKHQpe3JldHVybiB0aGlzLmtleT09PXQua2V5JiZ0aGlzLm9mZnNldD09PXQub2Zmc2V0JiZ0aGlzLnR5cGU9PT10LnR5cGV9aXNCZWZvcmUodCl7bGV0IG49dGhpcy5nZXROb2RlKCkscj10LmdldE5vZGUoKSxvPXRoaXMub2Zmc2V0O2lmKHQ9dC5vZmZzZXQsVyhuKSl7dmFyIGk9bi5nZXREZXNjZW5kYW50QnlJbmRleChvKTtuPWk/P259cmV0dXJuIFcocikmJihpPXIuZ2V0RGVzY2VuZGFudEJ5SW5kZXgodCkscj1pPz9yKSxuPT09cj9vPHQ6bi5pc0JlZm9yZShyKX1nZXROb2RlKCl7bGV0IHQ9a3QodGhpcy5rZXkpO3JldHVybiB0PT09bnVsbCYmSygyMCksdH1zZXQodCxuLHIpe2xldCBvPXRoaXMuX3NlbGVjdGlvbixpPXRoaXMua2V5O3RoaXMua2V5PXQsdGhpcy5vZmZzZXQ9bix0aGlzLnR5cGU9cixLbCgpfHwoeG8oKT09PWkmJkx0KHQpLG8hPT1udWxsJiYoby5fY2FjaGVkTm9kZXM9bnVsbCxvLmRpcnR5PSEwKSl9fWZ1bmN0aW9uIFRmKGUsdCl7bGV0IG49dC5fX2tleSxyPWUub2Zmc2V0LG89ImVsZW1lbnQiO2lmKFoodCkpbz0idGV4dCIsdD10LmdldFRleHRDb250ZW50U2l6ZSgpLHI+dCYmKHI9dCk7ZWxzZSBpZighVyh0KSl7dmFyIGk9dC5nZXROZXh0U2libGluZygpO1ooaSk/KG49aS5fX2tleSxyPTAsbz0idGV4dCIpOihpPXQuZ2V0UGFyZW50KCkpJiYobj1pLl9fa2V5LHI9dC5nZXRJbmRleFdpdGhpblBhcmVudCgpKzEpfWUuc2V0KG4scixvKX1mdW5jdGlvbiBBeShlLHQpe2lmKFcodCkpe2xldCBuPXQuZ2V0TGFzdERlc2NlbmRhbnQoKTtXKG4pfHxaKG4pP1RmKGUsbik6VGYoZSx0KX1lbHNlIFRmKGUsdCl9ZnVuY3Rpb24gTXkoZSx0LG4scil7bGV0IG89ZS5nZXROb2RlKCksaT1vLmdldENoaWxkQXRJbmRleChlLm9mZnNldCksbD1DdCgpLHM9cm4obyk/dmkoKS5hcHBlbmQobCk6bDtsLnNldEZvcm1hdChuKSxsLnNldFN0eWxlKHIpLGk9PT1udWxsP28uYXBwZW5kKHMpOihpLmluc2VydEJlZm9yZShzKSx0LnR5cGU9PT0iZWxlbWVudCImJnQua2V5PT09ZS5rZXkmJnQub2Zmc2V0IT09ZS5vZmZzZXQmJnQuc2V0KHQua2V5LHQub2Zmc2V0KzEsImVsZW1lbnQiKSksZS5pcyh0KSYmdC5zZXQobC5fX2tleSwwLCJ0ZXh0IiksZS5zZXQobC5fX2tleSwwLCJ0ZXh0Iil9ZnVuY3Rpb24gZm8oZSx0LG4scil7ZS5rZXk9dCxlLm9mZnNldD1uLGUudHlwZT1yfWNsYXNzIFNke2NvbnN0cnVjdG9yKHQpe3RoaXMuZGlydHk9ITEsdGhpcy5fbm9kZXM9dCx0aGlzLl9jYWNoZWROb2Rlcz1udWxsfWlzKHQpe2lmKCFWbCh0KSlyZXR1cm4hMTtsZXQgbj10aGlzLl9ub2RlcyxyPXQuX25vZGVzO3JldHVybiBuLnNpemU9PT1yLnNpemUmJkFycmF5LmZyb20obikuZXZlcnkobz0+ci5oYXMobykpfWFkZCh0KXt0aGlzLmRpcnR5PSEwLHRoaXMuX25vZGVzLmFkZCh0KSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsfWRlbGV0ZSh0KXt0aGlzLmRpcnR5PSEwLHRoaXMuX25vZGVzLmRlbGV0ZSh0KSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsfWNsZWFyKCl7dGhpcy5kaXJ0eT0hMCx0aGlzLl9ub2Rlcy5jbGVhcigpLHRoaXMuX2NhY2hlZE5vZGVzPW51bGx9aGFzKHQpe3JldHVybiB0aGlzLl9ub2Rlcy5oYXModCl9Y2xvbmUoKXtyZXR1cm4gbmV3IFNkKG5ldyBTZXQodGhpcy5fbm9kZXMpKX1leHRyYWN0KCl7cmV0dXJuIHRoaXMuZ2V0Tm9kZXMoKX1pbnNlcnRSYXdUZXh0KCl7fWluc2VydFRleHQoKXt9aW5zZXJ0Tm9kZXModCxuKXtsZXQgcj10aGlzLmdldE5vZGVzKCksbz1yLmxlbmd0aDt2YXIgaT1yW28tMV07aWYoWihpKSlpPWkuc2VsZWN0KCk7ZWxzZXtsZXQgbD1pLmdldEluZGV4V2l0aGluUGFyZW50KCkrMTtpPWkuZ2V0UGFyZW50T3JUaHJvdygpLnNlbGVjdChsLGwpfWZvcihpLmluc2VydE5vZGVzKHQsbiksdD0wO3Q8bzt0Kyspclt0XS5yZW1vdmUoKTtyZXR1cm4hMH1nZXROb2Rlcygpe3ZhciB0PXRoaXMuX2NhY2hlZE5vZGVzO2lmKHQhPT1udWxsKXJldHVybiB0O3ZhciBuPXRoaXMuX25vZGVzO3Q9W107Zm9yKGxldCByIG9mIG4pbj1rdChyKSxuIT09bnVsbCYmdC5wdXNoKG4pO3JldHVybiBLbCgpfHwodGhpcy5fY2FjaGVkTm9kZXM9dCksdH1nZXRUZXh0Q29udGVudCgpe2xldCB0PXRoaXMuZ2V0Tm9kZXMoKSxuPSIiO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKW4rPXRbcl0uZ2V0VGV4dENvbnRlbnQoKTtyZXR1cm4gbn19ZnVuY3Rpb24gZmUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBOaX1mdW5jdGlvbiBocChlKXtsZXRbdCwsbl09YVMoZSk7ZT1uLmdldENoaWxkcmVuKCk7bGV0IHI9ZS5sZW5ndGg7dmFyIG89ZVswXS5nZXRDaGlsZHJlbigpLmxlbmd0aDtsZXQgaT1BcnJheShyKTtmb3IodmFyIGw9MDtsPHI7bCsrKWlbbF09QXJyYXkobyk7Zm9yKG89MDtvPHI7bysrKXtsPWVbb10uZ2V0Q2hpbGRyZW4oKTtsZXQgcz0wO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKXtmb3IoO2lbb11bc107KXMrKztsZXQgdT1sW2FdLGM9dS5fX3Jvd1NwYW58fDEsZD11Ll9fY29sU3Bhbnx8MTtmb3IobGV0IGY9MDtmPGM7ZisrKWZvcihsZXQgaD0wO2g8ZDtoKyspaVtvK2ZdW3MraF09dTtpZih0PT09dSlyZXR1cm57Y29sU3BhbjpkLGNvbHVtbkluZGV4OnMscm93SW5kZXg6byxyb3dTcGFuOmN9O3MrPWR9fXJldHVybiBudWxsfWNsYXNzIEVke2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLmdyaWRLZXk9dCx0aGlzLmFuY2hvcj1uLHRoaXMuZm9jdXM9cix0aGlzLmRpcnR5PSExLHRoaXMuX2NhY2hlZE5vZGVzPW51bGwsbi5fc2VsZWN0aW9uPXRoaXMsci5fc2VsZWN0aW9uPXRoaXN9aXModCl7cmV0dXJuIHNtKHQpP3RoaXMuZ3JpZEtleT09PXQuZ3JpZEtleSYmdGhpcy5hbmNob3IuaXModC5hbmNob3IpJiZ0aGlzLmZvY3VzLmlzKHQuZm9jdXMpOiExfXNldCh0LG4scil7dGhpcy5kaXJ0eT0hMCx0aGlzLmdyaWRLZXk9dCx0aGlzLmFuY2hvci5rZXk9bix0aGlzLmZvY3VzLmtleT1yLHRoaXMuX2NhY2hlZE5vZGVzPW51bGx9Y2xvbmUoKXtyZXR1cm4gbmV3IEVkKHRoaXMuZ3JpZEtleSx0aGlzLmFuY2hvcix0aGlzLmZvY3VzKX1pc0NvbGxhcHNlZCgpe3JldHVybiExfWlzQmFja3dhcmQoKXtyZXR1cm4gdGhpcy5mb2N1cy5pc0JlZm9yZSh0aGlzLmFuY2hvcil9Z2V0Q2hhcmFjdGVyT2Zmc2V0cygpe3JldHVybiBLdSh0aGlzKX1leHRyYWN0KCl7cmV0dXJuIHRoaXMuZ2V0Tm9kZXMoKX1pbnNlcnRSYXdUZXh0KCl7fWluc2VydFRleHQoKXt9aW5zZXJ0Tm9kZXModCxuKXtsZXQgcj10aGlzLmZvY3VzLmdldE5vZGUoKTtyZXR1cm4gcWcoci5zZWxlY3QoMCxyLmdldENoaWxkcmVuU2l6ZSgpKSkuaW5zZXJ0Tm9kZXModCxuKX1nZXRTaGFwZSgpe3ZhciB0PWt0KHRoaXMuYW5jaG9yLmtleSk7aWYoSW4odCl8fEsoMTAzKSx0PWhwKHQpLHQ9PT1udWxsKXRocm93IEVycm9yKCJnZXRDZWxsUmVjdDogZXhwZWN0ZWQgdG8gZmluZCBBbmNob3JOb2RlIik7dmFyIG49a3QodGhpcy5mb2N1cy5rZXkpO0luKG4pfHxLKDEwNCk7bGV0IHI9aHAobik7aWYocj09PW51bGwpdGhyb3cgRXJyb3IoImdldENlbGxSZWN0OiBleHBlY3RlZCB0byBmaW5kIGZvY3VzQ2VsbE5vZGUiKTtuPU1hdGgubWluKHQuY29sdW1uSW5kZXgsci5jb2x1bW5JbmRleCk7bGV0IG89TWF0aC5tYXgodC5jb2x1bW5JbmRleCxyLmNvbHVtbkluZGV4KSxpPU1hdGgubWluKHQucm93SW5kZXgsci5yb3dJbmRleCk7cmV0dXJuIHQ9TWF0aC5tYXgodC5yb3dJbmRleCxyLnJvd0luZGV4KSx7ZnJvbVg6TWF0aC5taW4obixvKSxmcm9tWTpNYXRoLm1pbihpLHQpLHRvWDpNYXRoLm1heChuLG8pLHRvWTpNYXRoLm1heChpLHQpfX1nZXROb2Rlcygpe2Z1bmN0aW9uIHQoXyl7bGV0e2NlbGw6dixzdGFydENvbHVtbjp5LHN0YXJ0Um93Onh9PV87YT1NYXRoLm1pbihhLHkpLHU9TWF0aC5taW4odSx4KSxjPU1hdGgubWF4KGMseSt2Ll9fY29sU3Bhbi0xKSxkPU1hdGgubWF4KGQseCt2Ll9fcm93U3Bhbi0xKX12YXIgbj10aGlzLl9jYWNoZWROb2RlcztpZihuIT09bnVsbClyZXR1cm4gbjt2YXIgcj10aGlzLmFuY2hvci5nZXROb2RlKCk7bj10aGlzLmZvY3VzLmdldE5vZGUoKSxyPUFjKHIsSW4pO3ZhciBvPUFjKG4sSW4pO0luKHIpfHxLKDEwMyksSW4obyl8fEsoMTA0KSxuPXIuZ2V0UGFyZW50KCksRWEobil8fEsoMTA1KSxuPW4uZ2V0UGFyZW50KCksZm0obil8fEsoMTA2KTtsZXRbaSxsLHNdPXNTKG4scixvKSxhPU1hdGgubWluKGwuc3RhcnRDb2x1bW4scy5zdGFydENvbHVtbiksdT1NYXRoLm1pbihsLnN0YXJ0Um93LHMuc3RhcnRSb3cpLGM9TWF0aC5tYXgobC5zdGFydENvbHVtbitsLmNlbGwuX19jb2xTcGFuLTEscy5zdGFydENvbHVtbitzLmNlbGwuX19jb2xTcGFuLTEpLGQ9TWF0aC5tYXgobC5zdGFydFJvdytsLmNlbGwuX19yb3dTcGFuLTEscy5zdGFydFJvdytzLmNlbGwuX19yb3dTcGFuLTEpO3I9YSxvPXU7Zm9yKHZhciBmPWEsaD11O2E8cnx8dTxvfHxjPmZ8fGQ+aDspe2lmKGE8cil7dmFyIGc9aC1vOy0tcjtmb3IodmFyIG09MDttPD1nO20rKyl0KGlbbyttXVtyXSl9aWYodTxvKWZvcihnPWYtciwtLW8sbT0wO208PWc7bSsrKXQoaVtvXVtyK21dKTtpZihjPmYpZm9yKGc9aC1vLGYrPTEsbT0wO208PWc7bSsrKXQoaVtvK21dW2ZdKTtpZihkPmgpZm9yKGc9Zi1yLGgrPTEsbT0wO208PWc7bSsrKXQoaVtoXVtyK21dKX1mb3Iobj1bbl0scj1udWxsLG89dTtvPD1kO28rKylmb3IoZj1hO2Y8PWM7ZisrKSh7Y2VsbDpofT1pW29dW2ZdKSxnPWguZ2V0UGFyZW50KCksRWEoZyl8fEsoMTA3KSxnIT09ciYmbi5wdXNoKGcpLG4ucHVzaChoLC4uLl8yKGgpKSxyPWc7cmV0dXJuIEtsKCl8fCh0aGlzLl9jYWNoZWROb2Rlcz1uKSxufWdldFRleHRDb250ZW50KCl7bGV0IHQ9dGhpcy5nZXROb2RlcygpLG49IiI7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspbis9dFtyXS5nZXRUZXh0Q29udGVudCgpO3JldHVybiBufX1mdW5jdGlvbiBzbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEVkfWNsYXNzIE5pe2NvbnN0cnVjdG9yKHQsbixyLG8pe3RoaXMuYW5jaG9yPXQsdGhpcy5mb2N1cz1uLHRoaXMuZGlydHk9ITEsdGhpcy5mb3JtYXQ9cix0aGlzLnN0eWxlPW8sdGhpcy5fY2FjaGVkTm9kZXM9bnVsbCx0Ll9zZWxlY3Rpb249dGhpcyxuLl9zZWxlY3Rpb249dGhpc31pcyh0KXtyZXR1cm4gZmUodCk/dGhpcy5hbmNob3IuaXModC5hbmNob3IpJiZ0aGlzLmZvY3VzLmlzKHQuZm9jdXMpJiZ0aGlzLmZvcm1hdD09PXQuZm9ybWF0JiZ0aGlzLnN0eWxlPT09dC5zdHlsZTohMX1pc0JhY2t3YXJkKCl7cmV0dXJuIHRoaXMuZm9jdXMuaXNCZWZvcmUodGhpcy5hbmNob3IpfWlzQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuYW5jaG9yLmlzKHRoaXMuZm9jdXMpfWdldE5vZGVzKCl7dmFyIHQ9dGhpcy5fY2FjaGVkTm9kZXM7aWYodCE9PW51bGwpcmV0dXJuIHQ7dD10aGlzLmFuY2hvcjt2YXIgbj10aGlzLmZvY3VzLHI9dC5pc0JlZm9yZShuKSxvPXI/dDpuO3I9cj9uOnQsdD1vLmdldE5vZGUoKSxuPXIuZ2V0Tm9kZSgpO2xldCBpPW8ub2Zmc2V0O3JldHVybiBvPXIub2Zmc2V0LFcodCkmJihyPXQuZ2V0RGVzY2VuZGFudEJ5SW5kZXgoaSksdD1yPz90KSxXKG4pJiYocj1uLmdldERlc2NlbmRhbnRCeUluZGV4KG8pLHIhPT1udWxsJiZyIT09dCYmbi5nZXRDaGlsZEF0SW5kZXgobyk9PT1yJiYocj1yLmdldFByZXZpb3VzU2libGluZygpKSxuPXI/P24pLHQ9dC5pcyhuKT9XKHQpJiYwPHQuZ2V0Q2hpbGRyZW5TaXplKCk/W106W3RdOnQuZ2V0Tm9kZXNCZXR3ZWVuKG4pLEtsKCl8fCh0aGlzLl9jYWNoZWROb2Rlcz10KSx0fXNldFRleHROb2RlUmFuZ2UodCxuLHIsbyl7Zm8odGhpcy5hbmNob3IsdC5fX2tleSxuLCJ0ZXh0IiksZm8odGhpcy5mb2N1cyxyLl9fa2V5LG8sInRleHQiKSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsLHRoaXMuZGlydHk9ITB9Z2V0VGV4dENvbnRlbnQoKXtsZXQgdD10aGlzLmdldE5vZGVzKCk7aWYodC5sZW5ndGg9PT0wKXJldHVybiIiO2xldCBuPXRbMF0scj10W3QubGVuZ3RoLTFdLG89dGhpcy5hbmNob3IsaT10aGlzLmZvY3VzLGw9by5pc0JlZm9yZShpKSxbcyxhXT1LdSh0aGlzKSx1PSIiLGM9ITA7Zm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspe2xldCBmPXRbZF07aWYoVyhmKSYmIWYuaXNJbmxpbmUoKSljfHwodSs9YApgKSxjPSFmLmlzRW1wdHkoKTtlbHNlIGlmKGM9ITEsWihmKSl7bGV0IGg9Zi5nZXRUZXh0Q29udGVudCgpO2Y9PT1uP2Y9PT1yPyhvLnR5cGUhPT0iZWxlbWVudCJ8fGkudHlwZSE9PSJlbGVtZW50Inx8aS5vZmZzZXQ9PT1vLm9mZnNldCkmJihoPXM8YT9oLnNsaWNlKHMsYSk6aC5zbGljZShhLHMpKTpoPWw/aC5zbGljZShzKTpoLnNsaWNlKGEpOmY9PT1yJiYoaD1sP2guc2xpY2UoMCxhKTpoLnNsaWNlKDAscykpLHUrPWh9ZWxzZSFWZShmKSYmIV9hKGYpfHxmPT09ciYmdGhpcy5pc0NvbGxhcHNlZCgpfHwodSs9Zi5nZXRUZXh0Q29udGVudCgpKX1yZXR1cm4gdX1hcHBseURPTVJhbmdlKHQpe2xldCBuPW50KCkscj1uLmdldEVkaXRvclN0YXRlKCkuX3NlbGVjdGlvbjtpZih0PWlTKHQuc3RhcnRDb250YWluZXIsdC5zdGFydE9mZnNldCx0LmVuZENvbnRhaW5lcix0LmVuZE9mZnNldCxuLHIpLHQhPT1udWxsKXt2YXJbbyxpXT10O2ZvKHRoaXMuYW5jaG9yLG8ua2V5LG8ub2Zmc2V0LG8udHlwZSksZm8odGhpcy5mb2N1cyxpLmtleSxpLm9mZnNldCxpLnR5cGUpLHRoaXMuX2NhY2hlZE5vZGVzPW51bGx9fWNsb25lKCl7bGV0IHQ9dGhpcy5hbmNob3Isbj10aGlzLmZvY3VzO3JldHVybiBuZXcgTmkobmV3IEVyKHQua2V5LHQub2Zmc2V0LHQudHlwZSksbmV3IEVyKG4ua2V5LG4ub2Zmc2V0LG4udHlwZSksdGhpcy5mb3JtYXQsdGhpcy5zdHlsZSl9dG9nZ2xlRm9ybWF0KHQpe3RoaXMuZm9ybWF0PUFfKHRoaXMuZm9ybWF0LHQsbnVsbCksdGhpcy5kaXJ0eT0hMH1zZXRTdHlsZSh0KXt0aGlzLnN0eWxlPXQsdGhpcy5kaXJ0eT0hMH1oYXNGb3JtYXQodCl7cmV0dXJuKHRoaXMuZm9ybWF0JmxpW3RdKSE9PTB9aW5zZXJ0UmF3VGV4dCh0KXt0PXQuc3BsaXQoLyhccj9cbnxcdCkvKTtsZXQgbj1bXSxyPXQubGVuZ3RoO2ZvcihsZXQgbz0wO288cjtvKyspe2xldCBpPXRbb107aT09PWAKYHx8aT09PWBccgpgP24ucHVzaChObCgpKTppPT09IgkiP24ucHVzaChfZCgpKTpuLnB1c2goQ3QoaSkpfXRoaXMuaW5zZXJ0Tm9kZXMobil9aW5zZXJ0VGV4dCh0KXt2YXIgbj10aGlzLmFuY2hvcixyPXRoaXMuZm9jdXMsbz10aGlzLmlzQ29sbGFwc2VkKCl8fG4uaXNCZWZvcmUociksaT10aGlzLmZvcm1hdCxsPXRoaXMuc3R5bGU7byYmbi50eXBlPT09ImVsZW1lbnQiP015KG4scixpLGwpOm98fHIudHlwZSE9PSJlbGVtZW50Inx8TXkocixuLGksbCk7dmFyIHM9dGhpcy5nZXROb2RlcygpLGE9cy5sZW5ndGgsdT1vP3I6bjtyPShvP246cikub2Zmc2V0O3ZhciBjPXUub2Zmc2V0O249c1swXSxaKG4pfHxLKDI2KSxvPW4uZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGg7dmFyIGQ9bi5nZXRQYXJlbnRPclRocm93KCksZj1zW2EtMV07aWYodGhpcy5pc0NvbGxhcHNlZCgpJiZyPT09byYmKG4uaXNTZWdtZW50ZWQoKXx8bi5pc1Rva2VuKCl8fCFuLmNhbkluc2VydFRleHRBZnRlcigpfHwhZC5jYW5JbnNlcnRUZXh0QWZ0ZXIoKSYmbi5nZXROZXh0U2libGluZygpPT09bnVsbCkpe3ZhciBoPW4uZ2V0TmV4dFNpYmxpbmcoKTtpZihaKGgpJiZoLmNhbkluc2VydFRleHRCZWZvcmUoKSYmIXFoKGgpfHwoaD1DdCgpLGguc2V0Rm9ybWF0KGkpLGQuY2FuSW5zZXJ0VGV4dEFmdGVyKCk/bi5pbnNlcnRBZnRlcihoKTpkLmluc2VydEFmdGVyKGgpKSxoLnNlbGVjdCgwLDApLG49aCx0IT09IiIpe3RoaXMuaW5zZXJ0VGV4dCh0KTtyZXR1cm59fWVsc2UgaWYodGhpcy5pc0NvbGxhcHNlZCgpJiZyPT09MCYmKG4uaXNTZWdtZW50ZWQoKXx8bi5pc1Rva2VuKCl8fCFuLmNhbkluc2VydFRleHRCZWZvcmUoKXx8IWQuY2FuSW5zZXJ0VGV4dEJlZm9yZSgpJiZuLmdldFByZXZpb3VzU2libGluZygpPT09bnVsbCkpe2lmKGg9bi5nZXRQcmV2aW91c1NpYmxpbmcoKSwoIVooaCl8fHFoKGgpKSYmKGg9Q3QoKSxoLnNldEZvcm1hdChpKSxkLmNhbkluc2VydFRleHRCZWZvcmUoKT9uLmluc2VydEJlZm9yZShoKTpkLmluc2VydEJlZm9yZShoKSksaC5zZWxlY3QoKSxuPWgsdCE9PSIiKXt0aGlzLmluc2VydFRleHQodCk7cmV0dXJufX1lbHNlIGlmKG4uaXNTZWdtZW50ZWQoKSYmciE9PW8pZD1DdChuLmdldFRleHRDb250ZW50KCkpLGQuc2V0Rm9ybWF0KGkpLG4ucmVwbGFjZShkKSxuPWQ7ZWxzZSBpZighKHRoaXMuaXNDb2xsYXBzZWQoKXx8dD09PSIifHwoaD1mLmdldFBhcmVudCgpLGQuY2FuSW5zZXJ0VGV4dEJlZm9yZSgpJiZkLmNhbkluc2VydFRleHRBZnRlcigpJiYoIVcoaCl8fGguY2FuSW5zZXJ0VGV4dEJlZm9yZSgpJiZoLmNhbkluc2VydFRleHRBZnRlcigpKSkpKXt0aGlzLmluc2VydFRleHQoIiIpLG9TKHRoaXMuYW5jaG9yLHRoaXMuZm9jdXMsbnVsbCksdGhpcy5pbnNlcnRUZXh0KHQpO3JldHVybn1pZihhPT09MSlpZihuLmlzVG9rZW4oKSl0PUN0KHQpLHQuc2VsZWN0KCksbi5yZXBsYWNlKHQpO2Vsc2V7aWYocz1uLmdldEZvcm1hdCgpLGE9bi5nZXRTdHlsZSgpLHI9PT1jJiYocyE9PWl8fGEhPT1sKSlpZihuLmdldFRleHRDb250ZW50KCk9PT0iIiluLnNldEZvcm1hdChpKSxuLnNldFN0eWxlKGwpO2Vsc2V7cz1DdCh0KSxzLnNldEZvcm1hdChpKSxzLnNldFN0eWxlKGwpLHMuc2VsZWN0KCkscj09PTA/bi5pbnNlcnRCZWZvcmUocywhMSk6KFthXT1uLnNwbGl0VGV4dChyKSxhLmluc2VydEFmdGVyKHMsITEpKSxzLmlzQ29tcG9zaW5nKCkmJnRoaXMuYW5jaG9yLnR5cGU9PT0idGV4dCImJih0aGlzLmFuY2hvci5vZmZzZXQtPXQubGVuZ3RoKTtyZXR1cm59bj1uLnNwbGljZVRleHQocixjLXIsdCwhMCksbi5nZXRUZXh0Q29udGVudCgpPT09IiI/bi5yZW1vdmUoKTp0aGlzLmFuY2hvci50eXBlPT09InRleHQiJiYobi5pc0NvbXBvc2luZygpP3RoaXMuYW5jaG9yLm9mZnNldC09dC5sZW5ndGg6KHRoaXMuZm9ybWF0PXMsdGhpcy5zdHlsZT1hKSl9ZWxzZXtpZihpPW5ldyBTZXQoWy4uLm4uZ2V0UGFyZW50S2V5cygpLC4uLmYuZ2V0UGFyZW50S2V5cygpXSksaD1XKG4pP246bi5nZXRQYXJlbnRPclRocm93KCksbD1XKGYpP2Y6Zi5nZXRQYXJlbnRPclRocm93KCksZD1mLCFoLmlzKGwpJiZsLmlzSW5saW5lKCkpZG8gZD1sLGw9bC5nZXRQYXJlbnRPclRocm93KCk7d2hpbGUobC5pc0lubGluZSgpKTtpZih1LnR5cGU9PT0idGV4dCImJihjIT09MHx8Zi5nZXRUZXh0Q29udGVudCgpPT09IiIpfHx1LnR5cGU9PT0iZWxlbWVudCImJmYuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKTxjKWlmKFooZikmJiFmLmlzVG9rZW4oKSYmYyE9PWYuZ2V0VGV4dENvbnRlbnRTaXplKCkpe2lmKGYuaXNTZWdtZW50ZWQoKSl7dmFyIGc9Q3QoZi5nZXRUZXh0Q29udGVudCgpKTtmLnJlcGxhY2UoZyksZj1nfXJuKHUuZ2V0Tm9kZSgpKXx8KGY9Zi5zcGxpY2VUZXh0KDAsYywiIikpLGkuYWRkKGYuX19rZXkpfWVsc2UgdT1mLmdldFBhcmVudE9yVGhyb3coKSx1LmNhbkJlRW1wdHkoKXx8dS5nZXRDaGlsZHJlblNpemUoKSE9PTE/Zi5yZW1vdmUoKTp1LnJlbW92ZSgpO2Vsc2UgaS5hZGQoZi5fX2tleSk7Zm9yKHU9bC5nZXRDaGlsZHJlbigpLGM9bmV3IFNldChzKSxmPWguaXMobCksaD1oLmlzSW5saW5lKCkmJm4uZ2V0TmV4dFNpYmxpbmcoKT09PW51bGw/aDpuLGc9dS5sZW5ndGgtMTswPD1nO2ctLSl7bGV0IG09dVtnXTtpZihtLmlzKG4pfHxXKG0pJiZtLmlzUGFyZW50T2YobikpYnJlYWs7bS5pc0F0dGFjaGVkKCkmJighYy5oYXMobSl8fG0uaXMoZCk/Znx8aC5pbnNlcnRBZnRlcihtLCExKTptLnJlbW92ZSgpKX1pZighZilmb3IodT1sLGM9bnVsbDt1IT09bnVsbDspbD11LmdldENoaWxkcmVuKCksZj1sLmxlbmd0aCwoZj09PTB8fGxbZi0xXS5pcyhjKSkmJihpLmRlbGV0ZSh1Ll9fa2V5KSxjPXUpLHU9dS5nZXRQYXJlbnQoKTtmb3Iobi5pc1Rva2VuKCk/cj09PW8/bi5zZWxlY3QoKToodD1DdCh0KSx0LnNlbGVjdCgpLG4ucmVwbGFjZSh0KSk6KG49bi5zcGxpY2VUZXh0KHIsby1yLHQsITApLG4uZ2V0VGV4dENvbnRlbnQoKT09PSIiP24ucmVtb3ZlKCk6bi5pc0NvbXBvc2luZygpJiZ0aGlzLmFuY2hvci50eXBlPT09InRleHQiJiYodGhpcy5hbmNob3Iub2Zmc2V0LT10Lmxlbmd0aCkpLHQ9MTt0PGE7dCsrKW49c1t0XSxpLmhhcyhuLl9fa2V5KXx8bi5yZW1vdmUoKX19cmVtb3ZlVGV4dCgpe3RoaXMuaW5zZXJ0VGV4dCgiIil9Zm9ybWF0VGV4dCh0KXtpZih0aGlzLmlzQ29sbGFwc2VkKCkpdGhpcy50b2dnbGVGb3JtYXQodCksTHQobnVsbCk7ZWxzZXt2YXIgbj10aGlzLmdldE5vZGVzKCkscj1bXTtmb3IodmFyIG8gb2YgbilaKG8pJiZyLnB1c2gobyk7dmFyIGk9ci5sZW5ndGg7aWYoaT09PTApdGhpcy50b2dnbGVGb3JtYXQodCksTHQobnVsbCk7ZWxzZXtvPXRoaXMuYW5jaG9yO3ZhciBsPXRoaXMuZm9jdXMscz10aGlzLmlzQmFja3dhcmQoKTtuPXM/bDpvLG89cz9vOmw7dmFyIGE9MCx1PXJbMF07aWYobD1uLnR5cGU9PT0iZWxlbWVudCI/MDpuLm9mZnNldCxuLnR5cGU9PT0idGV4dCImJmw9PT11LmdldFRleHRDb250ZW50U2l6ZSgpJiYoYT0xLHU9clsxXSxsPTApLHUhPW51bGwpe3M9dS5nZXRGb3JtYXRGbGFncyh0LG51bGwpO3ZhciBjPWktMSxkPXJbY107aWYoaT1vLnR5cGU9PT0idGV4dCI/by5vZmZzZXQ6ZC5nZXRUZXh0Q29udGVudFNpemUoKSx1LmlzKGQpKWwhPT1pJiYobD09PTAmJmk9PT11LmdldFRleHRDb250ZW50U2l6ZSgpP3Uuc2V0Rm9ybWF0KHMpOih0PXUuc3BsaXRUZXh0KGwsaSksdD1sPT09MD90WzBdOnRbMV0sdC5zZXRGb3JtYXQocyksbi50eXBlPT09InRleHQiJiZuLnNldCh0Ll9fa2V5LDAsInRleHQiKSxvLnR5cGU9PT0idGV4dCImJm8uc2V0KHQuX19rZXksaS1sLCJ0ZXh0IikpLHRoaXMuZm9ybWF0PXMpO2Vsc2V7bCE9PTAmJihbLHVdPXUuc3BsaXRUZXh0KGwpLGw9MCksdS5zZXRGb3JtYXQocyk7dmFyIGY9ZC5nZXRGb3JtYXRGbGFncyh0LHMpO2ZvcigwPGkmJihpIT09ZC5nZXRUZXh0Q29udGVudFNpemUoKSYmKFtkXT1kLnNwbGl0VGV4dChpKSksZC5zZXRGb3JtYXQoZikpLGErPTE7YTxjO2ErKyl7bGV0IGg9clthXTtpZighaC5pc1Rva2VuKCkpe2xldCBnPWguZ2V0Rm9ybWF0RmxhZ3ModCxmKTtoLnNldEZvcm1hdChnKX19bi50eXBlPT09InRleHQiJiZuLnNldCh1Ll9fa2V5LGwsInRleHQiKSxvLnR5cGU9PT0idGV4dCImJm8uc2V0KGQuX19rZXksaSwidGV4dCIpLHRoaXMuZm9ybWF0PXN8Zn19fX19aW5zZXJ0Tm9kZXModCxuKXtpZighdGhpcy5pc0NvbGxhcHNlZCgpKXt2YXIgcj10aGlzLmlzQmFja3dhcmQoKT90aGlzLmFuY2hvcjp0aGlzLmZvY3VzLG89ci5nZXROb2RlKCkuZ2V0TmV4dFNpYmxpbmcoKTtpZihvPW8/by5nZXRLZXkoKTpudWxsLHI9KHI9ci5nZXROb2RlKCkuZ2V0UHJldmlvdXNTaWJsaW5nKCkpP3IuZ2V0S2V5KCk6bnVsbCx0aGlzLnJlbW92ZVRleHQoKSx0aGlzLmlzQ29sbGFwc2VkKCkmJnRoaXMuZm9jdXMudHlwZT09PSJlbGVtZW50Iil7aWYodGhpcy5mb2N1cy5rZXk9PT1vJiZ0aGlzLmZvY3VzLm9mZnNldD09PTApe3ZhciBpPUN0KCk7dGhpcy5mb2N1cy5nZXROb2RlKCkuaW5zZXJ0QmVmb3JlKGkpfWVsc2UgdGhpcy5mb2N1cy5rZXk9PT1yJiZ0aGlzLmZvY3VzLm9mZnNldD09PXRoaXMuZm9jdXMuZ2V0Tm9kZSgpLmdldENoaWxkcmVuU2l6ZSgpJiYoaT1DdCgpLHRoaXMuZm9jdXMuZ2V0Tm9kZSgpLmluc2VydEFmdGVyKGkpKTtpJiYodGhpcy5mb2N1cy5zZXQoaS5fX2tleSwwLCJ0ZXh0IiksdGhpcy5hbmNob3Iuc2V0KGkuX19rZXksMCwidGV4dCIpKX19aT10aGlzLmFuY2hvcixyPWkub2Zmc2V0O3ZhciBsPWkuZ2V0Tm9kZSgpO289bCxpLnR5cGU9PT0iZWxlbWVudCImJihpPWkuZ2V0Tm9kZSgpLG89aS5nZXRDaGlsZEF0SW5kZXgoci0xKSxvPW89PT1udWxsP2k6byksaT1bXTt2YXIgcz1sLmdldE5leHRTaWJsaW5ncygpLGE9bnIobCk/bnVsbDpsLmdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKTtpZihaKGwpKWlmKG89bC5nZXRUZXh0Q29udGVudCgpLmxlbmd0aCxyPT09MCYmbyE9PTApbz1sLmdldFByZXZpb3VzU2libGluZygpLG89byE9PW51bGw/bzpsLmdldFBhcmVudE9yVGhyb3coKSxpLnB1c2gobCk7ZWxzZSBpZihyPT09bylvPWw7ZWxzZXtpZihsLmlzVG9rZW4oKSlyZXR1cm4hMTtbbyxsXT1sLnNwbGl0VGV4dChyKSxpLnB1c2gobCl9bD1vLGkucHVzaCguLi5zKSxzPXRbMF07dmFyIHU9ITEsYz1udWxsO2ZvcihsZXQgZz0wO2c8dC5sZW5ndGg7ZysrKXt2YXIgZD10W2ddO2lmKG5yKG8pfHxWZShvKXx8IVcoZCl8fGQuaXNJbmxpbmUoKSl1JiYhVyhkKSYmIVZlKGQpJiZucihvLmdldFBhcmVudCgpKSYmSygyOCk7ZWxzZXtpZihkLmlzKHMpKXtpZihXKG8pJiZvLmlzRW1wdHkoKSYmby5jYW5SZXBsYWNlV2l0aChkKSl7by5yZXBsYWNlKGQpLG89ZCx1PSEwO2NvbnRpbnVlfWlmKHU9ZC5nZXRGaXJzdERlc2NlbmRhbnQoKSxNXyh1KSl7Zm9yKHZhciBmPXUuZ2V0UGFyZW50T3JUaHJvdygpO2YuaXNJbmxpbmUoKTspZj1mLmdldFBhcmVudE9yVGhyb3coKTtpZihjPWYuZ2V0Q2hpbGRyZW4oKSx1PWMubGVuZ3RoLFcobykpe3ZhciBoPW8uZ2V0Rmlyc3RDaGlsZCgpO2ZvcihsZXQgbT0wO208dTttKyspe2xldCBfPWNbbV07aD09PW51bGw/by5hcHBlbmQoXyk6aC5pbnNlcnRBZnRlcihfKSxoPV99fWVsc2V7Zm9yKGg9dS0xOzA8PWg7aC0tKW8uaW5zZXJ0QWZ0ZXIoY1toXSk7bz1vLmdldFBhcmVudE9yVGhyb3coKX1pZihjPWNbdS0xXSxmLnJlbW92ZSgpLHU9ITAsZi5pcyhkKSljb250aW51ZX19WihvKSYmKGE9PT1udWxsJiZLKDI3KSxvPWEpfXU9ITEsVyhvKSYmIW8uaXNJbmxpbmUoKT8oYz1kLFZlKGQpJiYhZC5pc0lubGluZSgpP289dC5sZW5ndGg9PT0xJiZvLmNhbkJlRW1wdHkoKSYmby5pc0VtcHR5KCk/by5pbnNlcnRCZWZvcmUoZCwhMSk6by5pbnNlcnRBZnRlcihkLCExKTpXKGQpPyhkLmNhbkJlRW1wdHkoKXx8IWQuaXNFbXB0eSgpKSYmKHJuKG8pPyhmPW8uZ2V0Q2hpbGRBdEluZGV4KHIpLGYhPT1udWxsP2YuaW5zZXJ0QmVmb3JlKGQpOm8uYXBwZW5kKGQpLG89ZCk6ZC5pc0lubGluZSgpPyhvLmFwcGVuZChkKSxvPWQpOm89by5pbnNlcnRBZnRlcihkLCExKSk6KGY9by5nZXRGaXJzdENoaWxkKCksZiE9PW51bGw/Zi5pbnNlcnRCZWZvcmUoZCk6by5hcHBlbmQoZCksbz1kKSk6IVcoZCl8fFcoZCkmJmQuaXNJbmxpbmUoKXx8VmUobykmJiFvLmlzSW5saW5lKCk/KGM9ZCxmZSh0aGlzKSYmVmUoZCkmJihXKG8pfHxaKG8pKSYmIWQuaXNJbmxpbmUoKT8oWihvKT8oZj1vLmdldFBhcmVudE9yVGhyb3coKSxbb109by5zcGxpdFRleHQociksbz1vLmdldEluZGV4V2l0aGluUGFyZW50KCkrMSk6KGY9byxvPXIpLFssb109VV8oZixvKSxvPW8uaW5zZXJ0QmVmb3JlKGQpKTpvPW8uaW5zZXJ0QWZ0ZXIoZCwhMSkpOihkPW8uZ2V0UGFyZW50T3JUaHJvdygpLF9hKG8pJiZvLnJlbW92ZSgpLG89ZCxnLS0pfWlmKG4mJihaKGwpP2wuc2VsZWN0KCk6KHQ9by5nZXRQcmV2aW91c1NpYmxpbmcoKSxaKHQpP3Quc2VsZWN0KCk6KHQ9by5nZXRJbmRleFdpdGhpblBhcmVudCgpLG8uZ2V0UGFyZW50T3JUaHJvdygpLnNlbGVjdCh0LHQpKSkpLFcobykpe2lmKHQ9WihjKT9jOlcoYykmJmMuaXNJbmxpbmUoKT9jLmdldExhc3REZXNjZW5kYW50KCk6by5nZXRMYXN0RGVzY2VuZGFudCgpLG58fCh0PT09bnVsbD9vLnNlbGVjdCgpOloodCk/dC5nZXRUZXh0Q29udGVudCgpPT09IiI/dC5zZWxlY3RQcmV2aW91cygpOnQuc2VsZWN0KCk6dC5zZWxlY3ROZXh0KCkpLGkubGVuZ3RoIT09MClmb3Iobj1vLHQ9aS5sZW5ndGgtMTswPD10O3QtLSlyPWlbdF0sYT1yLmdldFBhcmVudE9yVGhyb3coKSwhVyhvKXx8cHAocil8fFZlKHIpJiYoIXIuaXNJbmxpbmUoKXx8ci5pc0lzb2xhdGVkKCkpP1cobyl8fHBwKHIpP1cocikmJiFyLmNhbkluc2VydEFmdGVyKG8pPyhsPWEuY29uc3RydWN0b3IuY2xvbmUoYSksVyhsKXx8SygyOSksbC5hcHBlbmQociksby5pbnNlcnRBZnRlcihsKSk6by5pbnNlcnRBZnRlcihyKTooby5pbnNlcnRCZWZvcmUociksbz1yKToobj09PW8/by5hcHBlbmQocik6by5pbnNlcnRCZWZvcmUociksbz1yKSxhLmlzRW1wdHkoKSYmIWEuY2FuQmVFbXB0eSgpJiZhLnJlbW92ZSgpfWVsc2Ugbnx8KFoobyk/by5zZWxlY3QoKToobj1vLmdldFBhcmVudE9yVGhyb3coKSx0PW8uZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSsxLG4uc2VsZWN0KHQsdCkpKTtyZXR1cm4hMH1pbnNlcnRQYXJhZ3JhcGgoKXt0aGlzLmlzQ29sbGFwc2VkKCl8fHRoaXMucmVtb3ZlVGV4dCgpO3ZhciB0PXRoaXMuYW5jaG9yLG49dC5vZmZzZXQscj1bXTtpZih0LnR5cGU9PT0idGV4dCIpe3ZhciBvPXQuZ2V0Tm9kZSgpLGk9by5nZXROZXh0U2libGluZ3MoKS5yZXZlcnNlKCksbD1vLmdldFBhcmVudE9yVGhyb3coKSxzPWwuaXNJbmxpbmUoKSxhPXM/bC5nZXRUZXh0Q29udGVudFNpemUoKTpvLmdldFRleHRDb250ZW50U2l6ZSgpO249PT0wP2kucHVzaChvKToocyYmKHI9bC5nZXROZXh0U2libGluZ3MoKSksbj09PWF8fHMmJm49PT1vLmdldFRleHRDb250ZW50U2l6ZSgpfHwoWyxvXT1vLnNwbGl0VGV4dChuKSxpLnB1c2gobykpKX1lbHNle2lmKGw9dC5nZXROb2RlKCksbnIobCkpe2k9dmkoKSxyPWwuZ2V0Q2hpbGRBdEluZGV4KG4pLGkuc2VsZWN0KCksciE9PW51bGw/ci5pbnNlcnRCZWZvcmUoaSwhMSk6bC5hcHBlbmQoaSk7cmV0dXJufWk9bC5nZXRDaGlsZHJlbigpLnNsaWNlKG4pLnJldmVyc2UoKX1pZihvPWkubGVuZ3RoLG49PT0wJiYwPG8mJmwuaXNJbmxpbmUoKSl7aWYocj1sLmdldFBhcmVudE9yVGhyb3coKSxpPXIuaW5zZXJ0TmV3QWZ0ZXIodGhpcywhMSksVyhpKSlmb3Iocj1yLmdldENoaWxkcmVuKCksbD0wO2w8ci5sZW5ndGg7bCsrKWkuYXBwZW5kKHJbbF0pfWVsc2UgaWYocz1sLmluc2VydE5ld0FmdGVyKHRoaXMsITEpLHM9PT1udWxsKXRoaXMuaW5zZXJ0TGluZUJyZWFrKCk7ZWxzZSBpZihXKHMpKWlmKGE9bC5nZXRGaXJzdENoaWxkKCksbj09PTAmJihsLmlzKHQuZ2V0Tm9kZSgpKXx8YSYmYS5pcyh0LmdldE5vZGUoKSkpJiYwPG8pbC5pbnNlcnRCZWZvcmUocyk7ZWxzZXtpZihsPW51bGwsbj1yLmxlbmd0aCx0PXMuZ2V0UGFyZW50T3JUaHJvdygpLDA8bilmb3IoYT0wO2E8bjthKyspdC5hcHBlbmQoclthXSk7aWYobyE9PTApZm9yKHI9MDtyPG87cisrKW49aVtyXSxsPT09bnVsbD9zLmFwcGVuZChuKTpsLmluc2VydEJlZm9yZShuKSxsPW47cy5jYW5CZUVtcHR5KCl8fHMuZ2V0Q2hpbGRyZW5TaXplKCkhPT0wP3Muc2VsZWN0U3RhcnQoKToocy5zZWxlY3RQcmV2aW91cygpLHMucmVtb3ZlKCkpfX1pbnNlcnRMaW5lQnJlYWsodCl7bGV0IG49TmwoKTt2YXIgcj10aGlzLmFuY2hvcjtyLnR5cGU9PT0iZWxlbWVudCImJihyPXIuZ2V0Tm9kZSgpLHJuKHIpJiZ0aGlzLmluc2VydFBhcmFncmFwaCgpKSx0P3RoaXMuaW5zZXJ0Tm9kZXMoW25dLCEwKTp0aGlzLmluc2VydE5vZGVzKFtuXSkmJm4uc2VsZWN0TmV4dCgwLDApfWdldENoYXJhY3Rlck9mZnNldHMoKXtyZXR1cm4gS3UodGhpcyl9ZXh0cmFjdCgpe3ZhciB0PXRoaXMuZ2V0Tm9kZXMoKSxuPXQubGVuZ3RoLHI9bi0xLG89dGhpcy5hbmNob3I7bGV0IGk9dGhpcy5mb2N1czt2YXIgbD10WzBdO2xldCBzPXRbcl0sW2EsdV09S3UodGhpcyk7cmV0dXJuIG49PT0wP1tdOm49PT0xP1oobCkmJiF0aGlzLmlzQ29sbGFwc2VkKCk/KHQ9YT51P3U6YSxyPWwuc3BsaXRUZXh0KHQsYT51P2E6dSksdD10PT09MD9yWzBdOnJbMV0sdCE9bnVsbD9bdF06W10pOltsXToobj1vLmlzQmVmb3JlKGkpLFoobCkmJihvPW4/YTp1LG89PT1sLmdldFRleHRDb250ZW50U2l6ZSgpP3Quc2hpZnQoKTpvIT09MCYmKFssbF09bC5zcGxpdFRleHQobyksdFswXT1sKSksWihzKSYmKGw9cy5nZXRUZXh0Q29udGVudCgpLmxlbmd0aCxuPW4/dTphLG49PT0wP3QucG9wKCk6biE9PWwmJihbc109cy5zcGxpdFRleHQobiksdFtyXT1zKSksdCl9bW9kaWZ5KHQsbixyKXt2YXIgbz10aGlzLmZvY3VzLGk9dGhpcy5hbmNob3IsbD10PT09Im1vdmUiLHM9ZXAobyxuKTtpZihWZShzKSYmIXMuaXNJc29sYXRlZCgpKWwmJnMuaXNLZXlib2FyZFNlbGVjdGFibGUoKT8obj1ncCgpLG4uYWRkKHMuX19rZXkpLFNyKG4pKToodD1uP3MuZ2V0UHJldmlvdXNTaWJsaW5nKCk6cy5nZXROZXh0U2libGluZygpLFoodCk/KHM9dC5fX2tleSxuPW4/dC5nZXRUZXh0Q29udGVudCgpLmxlbmd0aDowLG8uc2V0KHMsbiwidGV4dCIpLGwmJmkuc2V0KHMsbiwidGV4dCIpKToocj1zLmdldFBhcmVudE9yVGhyb3coKSxXKHQpPyhyPXQuX19rZXkscz1uP3QuZ2V0Q2hpbGRyZW5TaXplKCk6MCk6KHM9cy5nZXRJbmRleFdpdGhpblBhcmVudCgpLHI9ci5fX2tleSxufHxzKyspLG8uc2V0KHIscywiZWxlbWVudCIpLGwmJmkuc2V0KHIscywiZWxlbWVudCIpKSk7ZWxzZSBpZihpPW50KCksbz1OcihpLl93aW5kb3cpKXt2YXIgYT1pLl9ibG9ja0N1cnNvckVsZW1lbnQsdT1pLl9yb290RWxlbWVudDtpZih1PT09bnVsbHx8YT09PW51bGx8fCFXKHMpfHxzLmlzSW5saW5lKCl8fHMuY2FuQmVFbXB0eSgpfHx0cChhLGksdSksby5tb2RpZnkodCxuPyJiYWNrd2FyZCI6ImZvcndhcmQiLHIpLDA8by5yYW5nZUNvdW50JiYocz1vLmdldFJhbmdlQXQoMCksaT10aGlzLmFuY2hvci5nZXROb2RlKCksaT1ybihpKT9pOkJfKGkpLHRoaXMuYXBwbHlET01SYW5nZShzKSx0aGlzLmRpcnR5PSEwLCFsKSl7Zm9yKGw9dGhpcy5nZXROb2RlcygpLHQ9W10scj0hMSxhPTA7YTxsLmxlbmd0aDthKyspdT1sW2FdLE9jKHUsaSk/dC5wdXNoKHUpOnI9ITA7ciYmMDx0Lmxlbmd0aCYmKG4/KG49dFswXSxXKG4pP24uc2VsZWN0U3RhcnQoKTpuLmdldFBhcmVudE9yVGhyb3coKS5zZWxlY3RTdGFydCgpKToobj10W3QubGVuZ3RoLTFdLFcobik/bi5zZWxlY3RFbmQoKTpuLmdldFBhcmVudE9yVGhyb3coKS5zZWxlY3RFbmQoKSkpLChvLmFuY2hvck5vZGUhPT1zLnN0YXJ0Q29udGFpbmVyfHxvLmFuY2hvck9mZnNldCE9PXMuc3RhcnRPZmZzZXQpJiYobj10aGlzLmZvY3VzLGw9dGhpcy5hbmNob3Isbz1sLmtleSxzPWwub2Zmc2V0LGk9bC50eXBlLGZvKGwsbi5rZXksbi5vZmZzZXQsbi50eXBlKSxmbyhuLG8scyxpKSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsKX19fWRlbGV0ZUNoYXJhY3Rlcih0KXtsZXQgbj10aGlzLmlzQ29sbGFwc2VkKCk7aWYodGhpcy5pc0NvbGxhcHNlZCgpKXt2YXIgcj10aGlzLmFuY2hvcixvPXRoaXMuZm9jdXMsaT1yLmdldE5vZGUoKTtpZighdCYmKHIudHlwZT09PSJlbGVtZW50IiYmVyhpKSYmci5vZmZzZXQ9PT1pLmdldENoaWxkcmVuU2l6ZSgpfHxyLnR5cGU9PT0idGV4dCImJnIub2Zmc2V0PT09aS5nZXRUZXh0Q29udGVudFNpemUoKSkpe3ZhciBsPWkuZ2V0UGFyZW50KCk7aWYobD1pLmdldE5leHRTaWJsaW5nKCl8fChsPT09bnVsbD9udWxsOmwuZ2V0TmV4dFNpYmxpbmcoKSksVyhsKSYmbC5pc1NoYWRvd1Jvb3QoKSlyZXR1cm59aWYobD1lcChvLHQpLFZlKGwpJiYhbC5pc0lzb2xhdGVkKCkpe2wuaXNLZXlib2FyZFNlbGVjdGFibGUoKSYmVyhpKSYmaS5nZXRDaGlsZHJlblNpemUoKT09PTA/KGkucmVtb3ZlKCksdD1ncCgpLHQuYWRkKGwuX19rZXkpLFNyKHQpKToobC5yZW1vdmUoKSxudCgpLmRpc3BhdGNoQ29tbWFuZChwZCx2b2lkIDApKTtyZXR1cm59aWYoIXQmJlcobCkmJlcoaSkmJmkuaXNFbXB0eSgpKXtpLnJlbW92ZSgpLGwuc2VsZWN0U3RhcnQoKTtyZXR1cm59aWYodGhpcy5tb2RpZnkoImV4dGVuZCIsdCwiY2hhcmFjdGVyIiksdGhpcy5pc0NvbGxhcHNlZCgpKXtpZih0JiZyLm9mZnNldD09PTAmJihyLnR5cGU9PT0iZWxlbWVudCI/ci5nZXROb2RlKCk6ci5nZXROb2RlKCkuZ2V0UGFyZW50T3JUaHJvdygpKS5jb2xsYXBzZUF0U3RhcnQodGhpcykpcmV0dXJufWVsc2V7aWYobD1vLnR5cGU9PT0idGV4dCI/by5nZXROb2RlKCk6bnVsbCxpPXIudHlwZT09PSJ0ZXh0Ij9yLmdldE5vZGUoKTpudWxsLGwhPT1udWxsJiZsLmlzU2VnbWVudGVkKCkpe2lmKHI9by5vZmZzZXQsbz1sLmdldFRleHRDb250ZW50U2l6ZSgpLGwuaXMoaSl8fHQmJnIhPT1vfHwhdCYmciE9PTApe0R5KGwsdCxyKTtyZXR1cm59fWVsc2UgaWYoaSE9PW51bGwmJmkuaXNTZWdtZW50ZWQoKSYmKHI9ci5vZmZzZXQsbz1pLmdldFRleHRDb250ZW50U2l6ZSgpLGkuaXMobCl8fHQmJnIhPT0wfHwhdCYmciE9PW8pKXtEeShpLHQscik7cmV0dXJufWlmKGk9dGhpcy5hbmNob3IsbD10aGlzLmZvY3VzLHI9aS5nZXROb2RlKCksbz1sLmdldE5vZGUoKSxyPT09byYmaS50eXBlPT09InRleHQiJiZsLnR5cGU9PT0idGV4dCIpe3ZhciBzPWkub2Zmc2V0LGE9bC5vZmZzZXQ7bGV0IHU9czxhO289dT9zOmEsYT11P2E6cyxzPWEtMSxvIT09cyYmKHI9ci5nZXRUZXh0Q29udGVudCgpLnNsaWNlKG8sYSksal8ocil8fCh0P2wub2Zmc2V0PXM6aS5vZmZzZXQ9cykpfX19dGhpcy5yZW1vdmVUZXh0KCksdCYmIW4mJnRoaXMuaXNDb2xsYXBzZWQoKSYmdGhpcy5hbmNob3IudHlwZT09PSJlbGVtZW50IiYmdGhpcy5hbmNob3Iub2Zmc2V0PT09MCYmKHQ9dGhpcy5hbmNob3IuZ2V0Tm9kZSgpLHQuaXNFbXB0eSgpJiZybih0LmdldFBhcmVudCgpKSYmdC5nZXRJbmRleFdpdGhpblBhcmVudCgpPT09MCYmdC5jb2xsYXBzZUF0U3RhcnQodGhpcykpfWRlbGV0ZUxpbmUodCl7dGhpcy5pc0NvbGxhcHNlZCgpJiYodGhpcy5hbmNob3IudHlwZT09PSJ0ZXh0IiYmdGhpcy5tb2RpZnkoImV4dGVuZCIsdCwibGluZWJvdW5kYXJ5IiksKHQ/dGhpcy5mb2N1czp0aGlzLmFuY2hvcikub2Zmc2V0PT09MCYmdGhpcy5tb2RpZnkoImV4dGVuZCIsdCwiY2hhcmFjdGVyIikpLHRoaXMucmVtb3ZlVGV4dCgpfWRlbGV0ZVdvcmQodCl7dGhpcy5pc0NvbGxhcHNlZCgpJiZ0aGlzLm1vZGlmeSgiZXh0ZW5kIix0LCJ3b3JkIiksdGhpcy5yZW1vdmVUZXh0KCl9fWZ1bmN0aW9uIFZsKGUpe3JldHVybiBlIGluc3RhbmNlb2YgU2R9ZnVuY3Rpb24gTHkoZSl7bGV0IHQ9ZS5vZmZzZXQ7cmV0dXJuIGUudHlwZT09PSJ0ZXh0Ij90OihlPWUuZ2V0Tm9kZSgpLHQ9PT1lLmdldENoaWxkcmVuU2l6ZSgpP2UuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGg6MCl9ZnVuY3Rpb24gS3UoZSl7bGV0IHQ9ZS5hbmNob3I7cmV0dXJuIGU9ZS5mb2N1cyx0LnR5cGU9PT0iZWxlbWVudCImJmUudHlwZT09PSJlbGVtZW50IiYmdC5rZXk9PT1lLmtleSYmdC5vZmZzZXQ9PT1lLm9mZnNldD9bMCwwXTpbTHkodCksTHkoZSldfWZ1bmN0aW9uIER5KGUsdCxuKXtsZXQgcj1lLmdldFRleHRDb250ZW50KCkuc3BsaXQoLyg/PVxzKS9nKSxvPXIubGVuZ3RoLGk9MCxsPTA7Zm9yKGxldCBzPTA7czxvO3MrKyl7bGV0IGE9cltzXSx1PXM9PT1vLTE7aWYobD1pLGkrPWEubGVuZ3RoLHQmJmk9PT1ufHxpPm58fHUpe3Iuc3BsaWNlKHMsMSksdSYmKGw9dm9pZCAwKTticmVha319dD1yLmpvaW4oIiIpLnRyaW0oKSx0PT09IiI/ZS5yZW1vdmUoKTooZS5zZXRUZXh0Q29udGVudCh0KSxlLnNlbGVjdChsLGwpKX1mdW5jdGlvbiBJeShlLHQsbixyKXt2YXIgbz10O2lmKGUubm9kZVR5cGU9PT0xKXtsZXQgcz0hMTt2YXIgaT1lLmNoaWxkTm9kZXMsbD1pLmxlbmd0aDtvPT09bCYmKHM9ITAsbz1sLTEpO2xldCBhPWlbb107aWYobD0hMSxhPT09ci5fYmxvY2tDdXJzb3JFbGVtZW50PyhhPWlbbysxXSxsPSEwKTpyLl9ibG9ja0N1cnNvckVsZW1lbnQhPT1udWxsJiZvLS0scj1vbChhKSxaKHIpKW89cz9yLmdldFRleHRDb250ZW50U2l6ZSgpOjA7ZWxzZXtpZihpPW9sKGUpLGk9PT1udWxsKXJldHVybiBudWxsO2lmKFcoaSk/KGU9aS5nZXRDaGlsZEF0SW5kZXgobyksKHQ9VyhlKSkmJih0PWUuZ2V0UGFyZW50KCksdD1uPT09bnVsbHx8dD09PW51bGx8fCF0LmNhbkJlRW1wdHkoKXx8dCE9PW4uZ2V0Tm9kZSgpKSx0JiYobj1zP2UuZ2V0TGFzdERlc2NlbmRhbnQoKTplLmdldEZpcnN0RGVzY2VuZGFudCgpLG49PT1udWxsPyhpPWUsbz0wKTooZT1uLGk9VyhlKT9lOmUuZ2V0UGFyZW50T3JUaHJvdygpKSksWihlKT8ocj1lLGk9bnVsbCxvPXM/ZS5nZXRUZXh0Q29udGVudFNpemUoKTowKTplIT09aSYmcyYmIWwmJm8rKyk6KG89aS5nZXRJbmRleFdpdGhpblBhcmVudCgpLG89dD09PTAmJlZlKGkpJiZvbChlKT09PWk/bzpvKzEsaT1pLmdldFBhcmVudE9yVGhyb3coKSksVyhpKSlyZXR1cm4gbmV3IEVyKGkuX19rZXksbywiZWxlbWVudCIpfX1lbHNlIHI9b2woZSk7cmV0dXJuIFoocik/bmV3IEVyKHIuX19rZXksbywidGV4dCIpOm51bGx9ZnVuY3Rpb24gankoZSx0LG4pe3ZhciByPWUub2Zmc2V0LG89ZS5nZXROb2RlKCk7cj09PTA/KHI9by5nZXRQcmV2aW91c1NpYmxpbmcoKSxvPW8uZ2V0UGFyZW50KCksdD8obnx8IXQpJiZyPT09bnVsbCYmVyhvKSYmby5pc0lubGluZSgpJiYodD1vLmdldFByZXZpb3VzU2libGluZygpLFoodCkmJihlLmtleT10Ll9fa2V5LGUub2Zmc2V0PXQuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGgpKTpXKHIpJiYhbiYmci5pc0lubGluZSgpPyhlLmtleT1yLl9fa2V5LGUub2Zmc2V0PXIuZ2V0Q2hpbGRyZW5TaXplKCksZS50eXBlPSJlbGVtZW50Iik6WihyKSYmKGUua2V5PXIuX19rZXksZS5vZmZzZXQ9ci5nZXRUZXh0Q29udGVudCgpLmxlbmd0aCkpOnI9PT1vLmdldFRleHRDb250ZW50KCkubGVuZ3RoJiYocj1vLmdldE5leHRTaWJsaW5nKCksbz1vLmdldFBhcmVudCgpLHQmJlcocikmJnIuaXNJbmxpbmUoKT8oZS5rZXk9ci5fX2tleSxlLm9mZnNldD0wLGUudHlwZT0iZWxlbWVudCIpOihufHx0KSYmcj09PW51bGwmJlcobykmJm8uaXNJbmxpbmUoKSYmIW8uY2FuSW5zZXJ0VGV4dEFmdGVyKCkmJih0PW8uZ2V0TmV4dFNpYmxpbmcoKSxaKHQpJiYoZS5rZXk9dC5fX2tleSxlLm9mZnNldD0wKSkpfWZ1bmN0aW9uIG9TKGUsdCxuKXtpZihlLnR5cGU9PT0idGV4dCImJnQudHlwZT09PSJ0ZXh0Iil7dmFyIHI9ZS5pc0JlZm9yZSh0KTtsZXQgbz1lLmlzKHQpO2p5KGUscixvKSxqeSh0LCFyLG8pLG8mJih0LmtleT1lLmtleSx0Lm9mZnNldD1lLm9mZnNldCx0LnR5cGU9ZS50eXBlKSxyPW50KCksci5pc0NvbXBvc2luZygpJiZyLl9jb21wb3NpdGlvbktleSE9PWUua2V5JiZmZShuKSYmKHI9bi5hbmNob3Isbj1uLmZvY3VzLGZvKGUsci5rZXksci5vZmZzZXQsci50eXBlKSxmbyh0LG4ua2V5LG4ub2Zmc2V0LG4udHlwZSkpfX1mdW5jdGlvbiBpUyhlLHQsbixyLG8saSl7cmV0dXJuIGU9PT1udWxsfHxuPT09bnVsbHx8IWphKG8sZSxuKXx8KHQ9SXkoZSx0LGZlKGkpP2kuYW5jaG9yOm51bGwsbyksdD09PW51bGwpfHwocj1JeShuLHIsZmUoaSk/aS5mb2N1czpudWxsLG8pLHI9PT1udWxsfHx0LnR5cGU9PT0iZWxlbWVudCImJnIudHlwZT09PSJlbGVtZW50IiYmKGU9b2woZSksbj1vbChuKSxWZShlKSYmVmUobikpKT9udWxsOihvUyh0LHIsaSksW3Qscl0pfWZ1bmN0aW9uIHBwKGUpe3JldHVybiBXKGUpJiYhZS5pc0lubGluZSgpfWZ1bmN0aW9uIGxTKGUsdCxuLHIsbyxpKXtsZXQgbD1ScigpO3JldHVybiBlPW5ldyBOaShuZXcgRXIoZSx0LG8pLG5ldyBFcihuLHIsaSksMCwiIiksZS5kaXJ0eT0hMCxsLl9zZWxlY3Rpb249ZX1mdW5jdGlvbiBncCgpe3JldHVybiBuZXcgU2QobmV3IFNldCl9ZnVuY3Rpb24gajIoZSl7bGV0IHQ9ZS5nZXRFZGl0b3JTdGF0ZSgpLl9zZWxlY3Rpb24sbj1OcihlLl93aW5kb3cpO3JldHVybiBWbCh0KXx8c20odCk/dC5jbG9uZSgpOmFtKHQsbixlKX1mdW5jdGlvbiBhbShlLHQsbil7dmFyIHI9bi5fd2luZG93O2lmKHI9PT1udWxsKXJldHVybiBudWxsO3ZhciBvPXIuZXZlbnQsaT1vP28udHlwZTp2b2lkIDA7cj1pPT09InNlbGVjdGlvbmNoYW5nZSIsbz0hWmgmJihyfHxpPT09ImJlZm9yZWlucHV0Inx8aT09PSJjb21wb3NpdGlvbnN0YXJ0Inx8aT09PSJjb21wb3NpdGlvbmVuZCJ8fGk9PT0iY2xpY2siJiZvJiZvLmRldGFpbD09PTN8fGk9PT0iZHJvcCJ8fGk9PT12b2lkIDApO2xldCBsO2lmKCFmZShlKXx8byl7aWYodD09PW51bGwpcmV0dXJuIG51bGw7aWYobz10LmFuY2hvck5vZGUsaT10LmZvY3VzTm9kZSxsPXQuYW5jaG9yT2Zmc2V0LHQ9dC5mb2N1c09mZnNldCxyJiZmZShlKSYmIWphKG4sbyxpKSlyZXR1cm4gZS5jbG9uZSgpfWVsc2UgcmV0dXJuIGUuY2xvbmUoKTtpZihuPWlTKG8sbCxpLHQsbixlKSxuPT09bnVsbClyZXR1cm4gbnVsbDtsZXRbcyxhXT1uO3JldHVybiBuZXcgTmkocyxhLGZlKGUpP2UuZm9ybWF0OjAsZmUoZSk/ZS5zdHlsZToiIil9ZnVuY3Rpb24gS2UoKXtyZXR1cm4gUnIoKS5fc2VsZWN0aW9ufWZ1bmN0aW9uIEhsKCl7cmV0dXJuIG50KCkuX2VkaXRvclN0YXRlLl9zZWxlY3Rpb259ZnVuY3Rpb24gTGMoZSx0LG4scj0xKXt2YXIgbz1lLmFuY2hvcixpPWUuZm9jdXMsbD1vLmdldE5vZGUoKSxzPWkuZ2V0Tm9kZSgpO2lmKHQuaXMobCl8fHQuaXMocykpe2lmKGw9dC5fX2tleSxlLmlzQ29sbGFwc2VkKCkpdD1vLm9mZnNldCwobjw9dCYmMDxyfHxuPHQmJjA+cikmJihuPU1hdGgubWF4KDAsdCtyKSxvLnNldChsLG4sImVsZW1lbnQiKSxpLnNldChsLG4sImVsZW1lbnQiKSx6eShlKSk7ZWxzZXtsZXQgdT1lLmlzQmFja3dhcmQoKTtzPXU/aTpvO3ZhciBhPXMuZ2V0Tm9kZSgpO289dT9vOmksaT1vLmdldE5vZGUoKSx0LmlzKGEpJiYoYT1zLm9mZnNldCwobjw9YSYmMDxyfHxuPGEmJjA+cikmJnMuc2V0KGwsTWF0aC5tYXgoMCxhK3IpLCJlbGVtZW50IikpLHQuaXMoaSkmJih0PW8ub2Zmc2V0LChuPD10JiYwPHJ8fG48dCYmMD5yKSYmby5zZXQobCxNYXRoLm1heCgwLHQrciksImVsZW1lbnQiKSl9enkoZSl9fWZ1bmN0aW9uIHp5KGUpe3ZhciB0PWUuYW5jaG9yLG49dC5vZmZzZXQ7bGV0IHI9ZS5mb2N1czt2YXIgbz1yLm9mZnNldCxpPXQuZ2V0Tm9kZSgpLGw9ci5nZXROb2RlKCk7aWYoZS5pc0NvbGxhcHNlZCgpKVcoaSkmJihsPWkuZ2V0Q2hpbGRyZW5TaXplKCksbD0obz1uPj1sKT9pLmdldENoaWxkQXRJbmRleChsLTEpOmkuZ2V0Q2hpbGRBdEluZGV4KG4pLFoobCkmJihuPTAsbyYmKG49bC5nZXRUZXh0Q29udGVudFNpemUoKSksdC5zZXQobC5fX2tleSxuLCJ0ZXh0Iiksci5zZXQobC5fX2tleSxuLCJ0ZXh0IikpKTtlbHNle2lmKFcoaSkpe2xldCBzPWkuZ2V0Q2hpbGRyZW5TaXplKCk7bj0oZT1uPj1zKT9pLmdldENoaWxkQXRJbmRleChzLTEpOmkuZ2V0Q2hpbGRBdEluZGV4KG4pLFoobikmJihpPTAsZSYmKGk9bi5nZXRUZXh0Q29udGVudFNpemUoKSksdC5zZXQobi5fX2tleSxpLCJ0ZXh0IikpfVcobCkmJihuPWwuZ2V0Q2hpbGRyZW5TaXplKCksbz0odD1vPj1uKT9sLmdldENoaWxkQXRJbmRleChuLTEpOmwuZ2V0Q2hpbGRBdEluZGV4KG8pLFoobykmJihsPTAsdCYmKGw9by5nZXRUZXh0Q29udGVudFNpemUoKSksci5zZXQoby5fX2tleSxsLCJ0ZXh0IikpKX19ZnVuY3Rpb24gejIoZSx0KXtpZih0PXQuZ2V0RWRpdG9yU3RhdGUoKS5fc2VsZWN0aW9uLGU9ZS5fc2VsZWN0aW9uLGZlKGUpKXt2YXIgbj1lLmFuY2hvcjtsZXQgcj1lLmZvY3VzLG87bi50eXBlPT09InRleHQiJiYobz1uLmdldE5vZGUoKSxvLnNlbGVjdGlvblRyYW5zZm9ybSh0LGUpKSxyLnR5cGU9PT0idGV4dCImJihuPXIuZ2V0Tm9kZSgpLG8hPT1uJiZuLnNlbGVjdGlvblRyYW5zZm9ybSh0LGUpKX19ZnVuY3Rpb24gRGMoZSx0LG4scixvKXtsZXQgaT1udWxsLGw9MCxzPW51bGw7ciE9PW51bGw/KGk9ci5fX2tleSxaKHIpPyhsPXIuZ2V0VGV4dENvbnRlbnRTaXplKCkscz0idGV4dCIpOlcocikmJihsPXIuZ2V0Q2hpbGRyZW5TaXplKCkscz0iZWxlbWVudCIpKTpvIT09bnVsbCYmKGk9by5fX2tleSxaKG8pP3M9InRleHQiOlcobykmJihzPSJlbGVtZW50IikpLGkhPT1udWxsJiZzIT09bnVsbD9lLnNldChpLGwscyk6KGw9dC5nZXRJbmRleFdpdGhpblBhcmVudCgpLGw9PT0tMSYmKGw9bi5nZXRDaGlsZHJlblNpemUoKSksZS5zZXQobi5fX2tleSxsLCJlbGVtZW50IikpfWZ1bmN0aW9uIEZ5KGUsdCxuLHIsbyl7ZS50eXBlPT09InRleHQiPyhlLmtleT1uLHR8fChlLm9mZnNldCs9bykpOmUub2Zmc2V0PnIuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSYmLS1lLm9mZnNldH1mdW5jdGlvbiBzUyhlLHQsbil7bGV0IHI9W10sbz1udWxsLGk9bnVsbDtlPWUuZ2V0Q2hpbGRyZW4oKTtmb3IobGV0IGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIGw9ZVtjXTtFYShsKXx8SygxMDgpO3ZhciBzPWwuZ2V0Q2hpbGRyZW4oKTtsPTA7Zm9yKGxldCBkIG9mIHMpe2ZvcihJbihkKXx8SygxMDkpO3JbY10hPT12b2lkIDAmJnJbY11bbF0hPT12b2lkIDA7KWwrKztzPWM7dmFyIGE9bCx1PWQ7bGV0IGY9e2NlbGw6dSxzdGFydENvbHVtbjphLHN0YXJ0Um93OnN9LGg9dS5fX3Jvd1NwYW4sZz11Ll9fY29sU3Bhbjtmb3IobGV0IG09MDttPGg7bSsrKXtyW3MrbV09PT12b2lkIDAmJihyW3MrbV09W10pO2ZvcihsZXQgXz0wO188ZztfKyspcltzK21dW2ErX109Zn10LmlzKHUpJiYobz1mKSxuLmlzKHUpJiYoaT1mKSxsKz1kLl9fY29sU3Bhbn19cmV0dXJuIG89PT1udWxsJiZLKDExMCksaT09PW51bGwmJksoMTExKSxbcixvLGldfWZ1bmN0aW9uIGFTKGUpe2UgaW5zdGFuY2VvZiBkbXx8KGUgaW5zdGFuY2VvZiBCYT8oZT1BYyhlLEluKSxJbihlKXx8SygxMTQpKTooZT1BYyhlLmdldE5vZGUoKSxJbiksSW4oZSl8fEsoMTE0KSkpO2xldCB0PWUuZ2V0UGFyZW50KCk7RWEodCl8fEsoMTE1KTtsZXQgbj10LmdldFBhcmVudCgpO3JldHVybiBmbShuKXx8SygxMTYpLFtlLHQsbl19bGV0IFR0PW51bGwsYnQ9bnVsbCx5bj0hMSxiZj0hMSxTYT0wLEJ5PXtjaGFyYWN0ZXJEYXRhOiEwLGNoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfTtmdW5jdGlvbiBLbCgpe3JldHVybiB5bnx8VHQhPT1udWxsJiZUdC5fcmVhZE9ubHl9ZnVuY3Rpb24gdG4oKXt5biYmSygxMyl9ZnVuY3Rpb24gUnIoKXtyZXR1cm4gVHQ9PT1udWxsJiZLKDE1KSxUdH1mdW5jdGlvbiBudCgpe3JldHVybiBidD09PW51bGwmJksoMTYpLGJ0fWZ1bmN0aW9uIFd5KGUsdCxuKXt2YXIgcj10Ll9fdHlwZTtsZXQgbz1lLl9ub2Rlcy5nZXQocik7Zm9yKG89PT12b2lkIDAmJksoMzAsciksZT1uLmdldChyKSxlPT09dm9pZCAwJiYoZT1BcnJheS5mcm9tKG8udHJhbnNmb3Jtcyksbi5zZXQocixlKSksbj1lLmxlbmd0aCxyPTA7cjxuJiYoZVtyXSh0KSx0LmlzQXR0YWNoZWQoKSk7cisrKTt9ZnVuY3Rpb24gRjIoZSx0KXt0PXQuX2RpcnR5TGVhdmVzLGU9ZS5fbm9kZU1hcDtmb3IobGV0IG4gb2YgdCl0PWUuZ2V0KG4pLFoodCkmJnQuaXNBdHRhY2hlZCgpJiZ0LmlzU2ltcGxlVGV4dCgpJiYhdC5pc1VubWVyZ2VhYmxlKCkmJk9fKHQpfWZ1bmN0aW9uIEIyKGUsdCl7bGV0IG49dC5fZGlydHlMZWF2ZXMscj10Ll9kaXJ0eUVsZW1lbnRzO2U9ZS5fbm9kZU1hcDtsZXQgbz14bygpLGk9bmV3IE1hcDt2YXIgbD1uO2xldCBzPWwuc2l6ZTtmb3IodmFyIGE9cix1PWEuc2l6ZTswPHN8fDA8dTspe2lmKDA8cyl7dC5fZGlydHlMZWF2ZXM9bmV3IFNldDtmb3IobGV0IGMgb2YgbClsPWUuZ2V0KGMpLFoobCkmJmwuaXNBdHRhY2hlZCgpJiZsLmlzU2ltcGxlVGV4dCgpJiYhbC5pc1VubWVyZ2VhYmxlKCkmJk9fKGwpLGwhPT12b2lkIDAmJmwhPT12b2lkIDAmJmwuX19rZXkhPT1vJiZsLmlzQXR0YWNoZWQoKSYmV3kodCxsLGkpLG4uYWRkKGMpO2lmKGw9dC5fZGlydHlMZWF2ZXMscz1sLnNpemUsMDxzKXtTYSsrO2NvbnRpbnVlfX10Ll9kaXJ0eUxlYXZlcz1uZXcgU2V0LHQuX2RpcnR5RWxlbWVudHM9bmV3IE1hcDtmb3IobGV0IGMgb2YgYSlhPWNbMF0sdT1jWzFdLChhPT09InJvb3QifHx1KSYmKGw9ZS5nZXQoYSksbCE9PXZvaWQgMCYmbCE9PXZvaWQgMCYmbC5fX2tleSE9PW8mJmwuaXNBdHRhY2hlZCgpJiZXeSh0LGwsaSksci5zZXQoYSx1KSk7bD10Ll9kaXJ0eUxlYXZlcyxzPWwuc2l6ZSxhPXQuX2RpcnR5RWxlbWVudHMsdT1hLnNpemUsU2ErK310Ll9kaXJ0eUxlYXZlcz1uLHQuX2RpcnR5RWxlbWVudHM9cn1mdW5jdGlvbiB1bShlLHQpe3ZhciBuPWUudHlwZSxyPXQuZ2V0KG4pO2lmKHI9PT12b2lkIDAmJksoMTcsbiksbj1yLmtsYXNzLGUudHlwZSE9PW4uZ2V0VHlwZSgpJiZLKDE4LG4ubmFtZSksbj1uLmltcG9ydEpTT04oZSksZT1lLmNoaWxkcmVuLFcobikmJkFycmF5LmlzQXJyYXkoZSkpZm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89dW0oZVtyXSx0KTtuLmFwcGVuZChvKX1yZXR1cm4gbn1mdW5jdGlvbiBVeShlLHQpe2xldCBuPVR0LHI9eW4sbz1idDtUdD1lLHluPSEwLGJ0PW51bGw7dHJ5e3JldHVybiB0KCl9ZmluYWxseXtUdD1uLHluPXIsYnQ9b319ZnVuY3Rpb24gYWkoZSx0KXtsZXQgbj1lLl9wZW5kaW5nRWRpdG9yU3RhdGUscj1lLl9yb290RWxlbWVudCxvPWUuX2hlYWRsZXNzfHxyPT09bnVsbDtpZihuIT09bnVsbCl7dmFyIGk9ZS5fZWRpdG9yU3RhdGUsbD1pLl9zZWxlY3Rpb24scz1uLl9zZWxlY3Rpb24sYT1lLl9kaXJ0eVR5cGUhPT0wLHU9VHQsYz15bixkPWJ0LGY9ZS5fdXBkYXRpbmcsaD1lLl9vYnNlcnZlcixnPW51bGw7aWYoZS5fcGVuZGluZ0VkaXRvclN0YXRlPW51bGwsZS5fZWRpdG9yU3RhdGU9biwhbyYmYSYmaCE9PW51bGwpe2J0PWUsVHQ9bix5bj0hMSxlLl91cGRhdGluZz0hMDt0cnl7bGV0IFJlPWUuX2RpcnR5VHlwZSxtdD1lLl9kaXJ0eUVsZW1lbnRzLEplPWUuX2RpcnR5TGVhdmVzO2guZGlzY29ubmVjdCgpO3ZhciBtPVJlLF89bXQsdj1KZTtlbj1qcj12dD0iIixIXz1tPT09MixVdT1udWxsLFZ0PWUsTW89ZS5fY29uZmlnLHlhPWUuX25vZGVzLHdkPVZ0Ll9saXN0ZW5lcnMubXV0YXRpb24sbnA9XyxycD12LG1pPWkuX25vZGVNYXAsTG89bi5fbm9kZU1hcCxsbT1uLl9yZWFkT25seSxvcD1uZXcgTWFwKGUuX2tleVRvRE9NTWFwKTtsZXQgWXQ9bmV3IE1hcDt4YT1ZdCxFcygicm9vdCIsbnVsbCkseGE9b3A9TW89TG89bWk9cnA9bnA9eWE9VnQ9dm9pZCAwLGc9WXR9Y2F0Y2goUmUpe2lmKFJlIGluc3RhbmNlb2YgRXJyb3ImJmUuX29uRXJyb3IoUmUpLGJmKXRocm93IFJlO2ZTKGUsbnVsbCxyLG4pLFBfKGUpLGUuX2RpcnR5VHlwZT0yLGJmPSEwLGFpKGUsaSksYmY9ITE7cmV0dXJufWZpbmFsbHl7aC5vYnNlcnZlKHIsQnkpLGUuX3VwZGF0aW5nPWYsVHQ9dSx5bj1jLGJ0PWR9fW4uX3JlYWRPbmx5fHwobi5fcmVhZE9ubHk9ITApO3ZhciB5PWUuX2RpcnR5TGVhdmVzLHg9ZS5fZGlydHlFbGVtZW50cyxTPWUuX25vcm1hbGl6ZWROb2RlcyxrPWUuX3VwZGF0ZVRhZ3MsYj1lLl9kZWZlcnJlZDthJiYoZS5fZGlydHlUeXBlPTAsZS5fY2xvbmVOb3ROZWVkZWQuY2xlYXIoKSxlLl9kaXJ0eUxlYXZlcz1uZXcgU2V0LGUuX2RpcnR5RWxlbWVudHM9bmV3IE1hcCxlLl9ub3JtYWxpemVkTm9kZXM9bmV3IFNldCxlLl91cGRhdGVUYWdzPW5ldyBTZXQpO3ZhciBUPWUuX2RlY29yYXRvcnMsTj1lLl9wZW5kaW5nRGVjb3JhdG9yc3x8VCxEPW4uX25vZGVNYXAsTTtmb3IoTSBpbiBOKUQuaGFzKE0pfHwoTj09PVQmJihOPUlfKGUpKSxkZWxldGUgTltNXSk7dmFyIGo9bz9udWxsOk5yKGUuX3dpbmRvdyk7aWYoZS5fZWRpdGFibGUmJmohPT1udWxsJiYoYXx8cz09PW51bGx8fHMuZGlydHkpKXtidD1lLFR0PW47dHJ5e2lmKGghPT1udWxsJiZoLmRpc2Nvbm5lY3QoKSxhfHxzPT09bnVsbHx8cy5kaXJ0eSl7bGV0IFJlPWUuX2Jsb2NrQ3Vyc29yRWxlbWVudDtSZSE9PW51bGwmJnRwKFJlLGUscik7ZTp7bGV0IG10PWouYW5jaG9yTm9kZSxKZT1qLmZvY3VzTm9kZSxZdD1qLmFuY2hvck9mZnNldCxkbj1qLmZvY3VzT2Zmc2V0LGF0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYoIShrLmhhcygiY29sbGFib3JhdGlvbiIpJiZhdCE9PXJ8fGF0IT09bnVsbCYmZW0oYXQpKSlpZihmZShzKSl7dmFyIEI9cy5hbmNob3IscmU9cy5mb2N1cyxIPUIua2V5LFk9cmUua2V5LEM9UGMoZSxIKSwkPVBjKGUsWSksRT1CLm9mZnNldCxPPXJlLm9mZnNldCxSPXMuZm9ybWF0LEY9cy5zdHlsZSxWPXMuaXNDb2xsYXBzZWQoKSxhZT1DLG9lPSQsJGU9ITE7aWYoQi50eXBlPT09InRleHQiKXthZT1iYyhDKTtsZXQgU3Q9Qi5nZXROb2RlKCk7JGU9U3QuZ2V0Rm9ybWF0KCkhPT1SfHxTdC5nZXRTdHlsZSgpIT09Rn1lbHNlIGZlKGwpJiZsLmFuY2hvci50eXBlPT09InRleHQiJiYoJGU9ITApO2lmKHJlLnR5cGU9PT0idGV4dCImJihvZT1iYygkKSksYWUhPT1udWxsJiZvZSE9PW51bGwpe2lmKFYmJihsPT09bnVsbHx8JGV8fGZlKGwpJiYobC5mb3JtYXQhPT1SfHxsLnN0eWxlIT09RikpKXt2YXIgX2U9cGVyZm9ybWFuY2Uubm93KCk7cV89W1IsRixFLEgsX2VdfWlmKFl0PT09RSYmZG49PT1PJiZtdD09PWFlJiZKZT09PW9lJiYoai50eXBlIT09IlJhbmdlInx8IVYpJiYoYXQhPT1udWxsJiZyLmNvbnRhaW5zKGF0KXx8ci5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLEIudHlwZSE9PSJlbGVtZW50IikpYnJlYWsgZTt0cnl7ai5zZXRCYXNlQW5kRXh0ZW50KGFlLEUsb2UsTyl9Y2F0Y2h7fWlmKCFrLmhhcygic2tpcC1zY3JvbGwtaW50by12aWV3IikmJnMuaXNDb2xsYXBzZWQoKSYmciE9PW51bGwmJnI9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50KXtsZXQgU3Q9cyBpbnN0YW5jZW9mIE5pJiZzLmFuY2hvci50eXBlPT09ImVsZW1lbnQiP2FlLmNoaWxkTm9kZXNbRV18fG51bGw6MDxqLnJhbmdlQ291bnQ/ai5nZXRSYW5nZUF0KDApOm51bGw7aWYoU3QhPT1udWxsKXtsZXQgWHQ7aWYoU3QgaW5zdGFuY2VvZiBUZXh0KXtsZXQgb3Q9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtvdC5zZWxlY3ROb2RlKFN0KSxYdD1vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1lbHNlIFh0PVN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCB4bj1yLm93bmVyRG9jdW1lbnQsT3I9eG4uZGVmYXVsdFZpZXc7aWYoT3IhPT1udWxsKWZvcih2YXJ7dG9wOlEsYm90dG9tOk5lfT1YdCx5ZSxTZSxwZT1yO3BlIT09bnVsbDspe2xldCBvdD1wZT09PXhuLmJvZHk7aWYob3QpeWU9MCxTZT15ZChlKS5pbm5lckhlaWdodDtlbHNle2xldCBLbz1wZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt5ZT1Lby50b3AsU2U9S28uYm90dG9tfWxldCBhcj0wO2lmKFE8eWU/YXI9LSh5ZS1RKTpOZT5TZSYmKGFyPU5lLVNlKSxhciE9PTApaWYob3QpT3Iuc2Nyb2xsQnkoMCxhcik7ZWxzZXtsZXQgS289cGUuc2Nyb2xsVG9wO3BlLnNjcm9sbFRvcCs9YXI7bGV0IHRzPXBlLnNjcm9sbFRvcC1LbztRLT10cyxOZS09dHN9aWYob3QpYnJlYWs7cGU9dmQocGUpfX19dXA9ITB9fWVsc2UgbCE9PW51bGwmJmphKGUsbXQsSmUpJiZqLnJlbW92ZUFsbFJhbmdlcygpfX1lOntsZXQgUmU9ZS5fYmxvY2tDdXJzb3JFbGVtZW50O2lmKGZlKHMpJiZzLmlzQ29sbGFwc2VkKCkmJnMuYW5jaG9yLnR5cGU9PT0iZWxlbWVudCImJnIuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpe2xldCBtdD1zLmFuY2hvcixKZT1tdC5nZXROb2RlKCksWXQ9bXQub2Zmc2V0LGRuPUplLmdldENoaWxkcmVuU2l6ZSgpLGF0PSExLFN0PW51bGw7aWYoWXQ9PT1kbil7bGV0IFh0PUplLmdldENoaWxkQXRJbmRleChZdC0xKTtfZihYdCkmJihhdD0hMCl9ZWxzZXtsZXQgWHQ9SmUuZ2V0Q2hpbGRBdEluZGV4KFl0KTtpZihfZihYdCkpe2xldCB4bj1YdC5nZXRQcmV2aW91c1NpYmxpbmcoKTsoeG49PT1udWxsfHxfZih4bikpJiYoYXQ9ITAsU3Q9ZS5nZXRFbGVtZW50QnlLZXkoWHQuX19rZXkpKX19aWYoYXQpe2xldCBYdD1lLmdldEVsZW1lbnRCeUtleShKZS5fX2tleSk7aWYoUmU9PT1udWxsKXtsZXQgeG49ZS5fY29uZmlnLnRoZW1lLE9yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO09yLmNvbnRlbnRFZGl0YWJsZT0iZmFsc2UiLE9yLnNldEF0dHJpYnV0ZSgiZGF0YS1sZXhpY2FsLWN1cnNvciIsInRydWUiKTtsZXQgb3Q9eG4uYmxvY2tDdXJzb3I7aWYob3QhPT12b2lkIDApe2lmKHR5cGVvZiBvdD09InN0cmluZyIpe2xldCBhcj1vdC5zcGxpdCgiICIpO290PXhuLmJsb2NrQ3Vyc29yPWFyfW90IT09dm9pZCAwJiZPci5jbGFzc0xpc3QuYWRkKC4uLm90KX1lLl9ibG9ja0N1cnNvckVsZW1lbnQ9UmU9T3J9ci5zdHlsZS5jYXJldENvbG9yPSJ0cmFuc3BhcmVudCIsU3Q9PT1udWxsP1h0LmFwcGVuZENoaWxkKFJlKTpYdC5pbnNlcnRCZWZvcmUoUmUsU3QpO2JyZWFrIGV9fVJlIT09bnVsbCYmdHAoUmUsZSxyKX1oIT09bnVsbCYmaC5vYnNlcnZlKHIsQnkpfWZpbmFsbHl7YnQ9ZCxUdD11fX1pZihnIT09bnVsbCl7dmFyIGJlPWc7bGV0IFJlPUFycmF5LmZyb20oZS5fbGlzdGVuZXJzLm11dGF0aW9uKSxtdD1SZS5sZW5ndGg7Zm9yKGxldCBKZT0wO0plPG10O0plKyspe2xldFtZdCxkbl09UmVbSmVdLGF0PWJlLmdldChkbik7YXQhPT12b2lkIDAmJll0KGF0LHtkaXJ0eUxlYXZlczp5LHByZXZFZGl0b3JTdGF0ZTppLHVwZGF0ZVRhZ3M6a30pfX1mZShzKXx8cz09PW51bGx8fGwhPT1udWxsJiZsLmlzKHMpfHxlLmRpc3BhdGNoQ29tbWFuZChwZCx2b2lkIDApO3ZhciBGZT1lLl9wZW5kaW5nRGVjb3JhdG9ycztGZSE9PW51bGwmJihlLl9kZWNvcmF0b3JzPUZlLGUuX3BlbmRpbmdEZWNvcmF0b3JzPW51bGwsVnMoImRlY29yYXRvciIsZSwhMCxGZSkpO3ZhciBPdD1reSh0fHxpKSxjbj1reShuKTtpZihPdCE9PWNuJiZWcygidGV4dGNvbnRlbnQiLGUsITAsY24pLFZzKCJ1cGRhdGUiLGUsITAse2RpcnR5RWxlbWVudHM6eCxkaXJ0eUxlYXZlczp5LGVkaXRvclN0YXRlOm4sbm9ybWFsaXplZE5vZGVzOlMscHJldkVkaXRvclN0YXRlOnR8fGksdGFnczprfSksZS5fZGVmZXJyZWQ9W10sYi5sZW5ndGghPT0wKXtsZXQgUmU9ZS5fdXBkYXRpbmc7ZS5fdXBkYXRpbmc9ITA7dHJ5e2ZvcihsZXQgbXQ9MDttdDxiLmxlbmd0aDttdCsrKWJbbXRdKCl9ZmluYWxseXtlLl91cGRhdGluZz1SZX19dmFyIEtuPWUuX3VwZGF0ZXM7aWYoS24ubGVuZ3RoIT09MCl7bGV0IFJlPUtuLnNoaWZ0KCk7aWYoUmUpe2xldFttdCxKZV09UmU7dVMoZSxtdCxKZSl9fX19ZnVuY3Rpb24gVnMoZSx0LG4sLi4ucil7bGV0IG89dC5fdXBkYXRpbmc7dC5fdXBkYXRpbmc9bjt0cnl7bGV0IGk9QXJyYXkuZnJvbSh0Ll9saXN0ZW5lcnNbZV0pO2ZvcihlPTA7ZTxpLmxlbmd0aDtlKyspaVtlXS5hcHBseShudWxsLHIpfWZpbmFsbHl7dC5fdXBkYXRpbmc9b319ZnVuY3Rpb24gSihlLHQsbil7aWYoZS5fdXBkYXRpbmc9PT0hMXx8YnQhPT1lKXtsZXQgaT0hMTtyZXR1cm4gZS51cGRhdGUoKCk9PntpPUooZSx0LG4pfSksaX1sZXQgcj1ubShlKTtmb3IobGV0IGk9NDswPD1pO2ktLSlmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIG89cltsXS5fY29tbWFuZHMuZ2V0KHQpO2lmKG8hPT12b2lkIDAmJihvPW9baV0sbyE9PXZvaWQgMCkpe289QXJyYXkuZnJvbShvKTtsZXQgcz1vLmxlbmd0aDtmb3IobGV0IGE9MDthPHM7YSsrKWlmKG9bYV0obixlKT09PSEwKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBWeShlLHQpe2xldCBuPWUuX3VwZGF0ZXM7Zm9yKHQ9dHx8ITE7bi5sZW5ndGghPT0wOyl7dmFyIHI9bi5zaGlmdCgpO2lmKHIpe2xldFtvLGldPXIsbDtpIT09dm9pZCAwJiYocj1pLm9uVXBkYXRlLGw9aS50YWcsaS5za2lwVHJhbnNmb3JtcyYmKHQ9ITApLHImJmUuX2RlZmVycmVkLnB1c2gociksbCYmZS5fdXBkYXRlVGFncy5hZGQobCkpLG8oKX19cmV0dXJuIHR9ZnVuY3Rpb24gdVMoZSx0LG4pe2xldCByPWUuX3VwZGF0ZVRhZ3M7dmFyIG8saT1vPSExO2lmKG4hPT12b2lkIDApe3ZhciBsPW4ub25VcGRhdGU7bz1uLnRhZyxvIT1udWxsJiZyLmFkZChvKSxvPW4uc2tpcFRyYW5zZm9ybXN8fCExLGk9bi5kaXNjcmV0ZXx8ITF9bCYmZS5fZGVmZXJyZWQucHVzaChsKSxuPWUuX2VkaXRvclN0YXRlLGw9ZS5fcGVuZGluZ0VkaXRvclN0YXRlO2xldCBzPSExOyhsPT09bnVsbHx8bC5fcmVhZE9ubHkpJiYobD1lLl9wZW5kaW5nRWRpdG9yU3RhdGU9bmV3IENkKG5ldyBNYXAoKGx8fG4pLl9ub2RlTWFwKSkscz0hMCksbC5fZmx1c2hTeW5jPWksaT1UdDtsZXQgYT15bix1PWJ0LGM9ZS5fdXBkYXRpbmc7VHQ9bCx5bj0hMSxlLl91cGRhdGluZz0hMCxidD1lO3RyeXtzJiYoZS5faGVhZGxlc3M/bi5fc2VsZWN0aW9uIT1udWxsJiYobC5fc2VsZWN0aW9uPW4uX3NlbGVjdGlvbi5jbG9uZSgpKTpsLl9zZWxlY3Rpb249ajIoZSkpO2xldCBkPWUuX2NvbXBvc2l0aW9uS2V5O3QoKSxvPVZ5KGUsbyksejIobCxlKSxlLl9kaXJ0eVR5cGUhPT0wJiYobz9GMihsLGUpOkIyKGwsZSksVnkoZSksUzIobixsLGUuX2RpcnR5TGVhdmVzLGUuX2RpcnR5RWxlbWVudHMpKSxkIT09ZS5fY29tcG9zaXRpb25LZXkmJihsLl9mbHVzaFN5bmM9ITApO2xldCBmPWwuX3NlbGVjdGlvbjtpZihmZShmKSl7bGV0IGg9bC5fbm9kZU1hcCxnPWYuZm9jdXMua2V5O2guZ2V0KGYuYW5jaG9yLmtleSkhPT12b2lkIDAmJmguZ2V0KGcpIT09dm9pZCAwfHxLKDE5KX1lbHNlIFZsKGYpJiZmLl9ub2Rlcy5zaXplPT09MCYmKGwuX3NlbGVjdGlvbj1udWxsKX1jYXRjaChkKXtkIGluc3RhbmNlb2YgRXJyb3ImJmUuX29uRXJyb3IoZCksZS5fcGVuZGluZ0VkaXRvclN0YXRlPW4sZS5fZGlydHlUeXBlPTIsZS5fY2xvbmVOb3ROZWVkZWQuY2xlYXIoKSxlLl9kaXJ0eUxlYXZlcz1uZXcgU2V0LGUuX2RpcnR5RWxlbWVudHMuY2xlYXIoKSxhaShlKTtyZXR1cm59ZmluYWxseXtUdD1pLHluPWEsYnQ9dSxlLl91cGRhdGluZz1jLFNhPTB9ZS5fZGlydHlUeXBlIT09MHx8VzIobCxlKT9sLl9mbHVzaFN5bmM/KGwuX2ZsdXNoU3luYz0hMSxhaShlKSk6cyYmeTIoKCk9PnthaShlKX0pOihsLl9mbHVzaFN5bmM9ITEscyYmKHIuY2xlYXIoKSxlLl9kZWZlcnJlZD1bXSxlLl9wZW5kaW5nRWRpdG9yU3RhdGU9bnVsbCkpfWZ1bmN0aW9uIE5uKGUsdCxuKXtlLl91cGRhdGluZz9lLl91cGRhdGVzLnB1c2goW3Qsbl0pOnVTKGUsdCxuKX1jbGFzcyBjUyBleHRlbmRzIEJhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWRlY29yYXRlKCl7Syg0Nyl9aXNJc29sYXRlZCgpe3JldHVybiExfWlzSW5saW5lKCl7cmV0dXJuITB9aXNLZXlib2FyZFNlbGVjdGFibGUoKXtyZXR1cm4hMH19ZnVuY3Rpb24gVmUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBjU31jbGFzcyBSaSBleHRlbmRzIEJhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX19sYXN0PXRoaXMuX19maXJzdD1udWxsLHRoaXMuX19pbmRlbnQ9dGhpcy5fX2Zvcm1hdD10aGlzLl9fc2l6ZT0wLHRoaXMuX19kaXI9bnVsbH1nZXRGb3JtYXQoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX2Zvcm1hdH1nZXRGb3JtYXRUeXBlKCl7bGV0IHQ9dGhpcy5nZXRGb3JtYXQoKTtyZXR1cm4gZjJbdF18fCIifWdldEluZGVudCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9faW5kZW50fWdldENoaWxkcmVuKCl7bGV0IHQ9W10sbj10aGlzLmdldEZpcnN0Q2hpbGQoKTtmb3IoO24hPT1udWxsOyl0LnB1c2gobiksbj1uLmdldE5leHRTaWJsaW5nKCk7cmV0dXJuIHR9Z2V0Q2hpbGRyZW5LZXlzKCl7bGV0IHQ9W10sbj10aGlzLmdldEZpcnN0Q2hpbGQoKTtmb3IoO24hPT1udWxsOyl0LnB1c2gobi5fX2tleSksbj1uLmdldE5leHRTaWJsaW5nKCk7cmV0dXJuIHR9Z2V0Q2hpbGRyZW5TaXplKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5nZXRDaGlsZHJlblNpemUoKT09PTB9aXNEaXJ0eSgpe2xldCB0PW50KCkuX2RpcnR5RWxlbWVudHM7cmV0dXJuIHQhPT1udWxsJiZ0Lmhhcyh0aGlzLl9fa2V5KX1pc0xhc3RDaGlsZCgpe2xldCB0PXRoaXMuZ2V0TGF0ZXN0KCksbj10aGlzLmdldFBhcmVudE9yVGhyb3coKS5nZXRMYXN0Q2hpbGQoKTtyZXR1cm4gbiE9PW51bGwmJm4uaXModCl9Z2V0QWxsVGV4dE5vZGVzKCl7bGV0IHQ9W10sbj10aGlzLmdldEZpcnN0Q2hpbGQoKTtmb3IoO24hPT1udWxsOyl7aWYoWihuKSYmdC5wdXNoKG4pLFcobikpe2xldCByPW4uZ2V0QWxsVGV4dE5vZGVzKCk7dC5wdXNoKC4uLnIpfW49bi5nZXROZXh0U2libGluZygpfXJldHVybiB0fWdldEZpcnN0RGVzY2VuZGFudCgpe2xldCB0PXRoaXMuZ2V0Rmlyc3RDaGlsZCgpO2Zvcig7dCE9PW51bGw7KXtpZihXKHQpKXtsZXQgbj10LmdldEZpcnN0Q2hpbGQoKTtpZihuIT09bnVsbCl7dD1uO2NvbnRpbnVlfX1icmVha31yZXR1cm4gdH1nZXRMYXN0RGVzY2VuZGFudCgpe2xldCB0PXRoaXMuZ2V0TGFzdENoaWxkKCk7Zm9yKDt0IT09bnVsbDspe2lmKFcodCkpe2xldCBuPXQuZ2V0TGFzdENoaWxkKCk7aWYobiE9PW51bGwpe3Q9bjtjb250aW51ZX19YnJlYWt9cmV0dXJuIHR9Z2V0RGVzY2VuZGFudEJ5SW5kZXgodCl7bGV0IG49dGhpcy5nZXRDaGlsZHJlbigpLHI9bi5sZW5ndGg7cmV0dXJuIHQ+PXI/KHQ9bltyLTFdLFcodCkmJnQuZ2V0TGFzdERlc2NlbmRhbnQoKXx8dHx8bnVsbCk6KHQ9blt0XSxXKHQpJiZ0LmdldEZpcnN0RGVzY2VuZGFudCgpfHx0fHxudWxsKX1nZXRGaXJzdENoaWxkKCl7bGV0IHQ9dGhpcy5nZXRMYXRlc3QoKS5fX2ZpcnN0O3JldHVybiB0PT09bnVsbD9udWxsOmt0KHQpfWdldEZpcnN0Q2hpbGRPclRocm93KCl7bGV0IHQ9dGhpcy5nZXRGaXJzdENoaWxkKCk7cmV0dXJuIHQ9PT1udWxsJiZLKDQ1LHRoaXMuX19rZXkpLHR9Z2V0TGFzdENoaWxkKCl7bGV0IHQ9dGhpcy5nZXRMYXRlc3QoKS5fX2xhc3Q7cmV0dXJuIHQ9PT1udWxsP251bGw6a3QodCl9Z2V0TGFzdENoaWxkT3JUaHJvdygpe2xldCB0PXRoaXMuZ2V0TGFzdENoaWxkKCk7cmV0dXJuIHQ9PT1udWxsJiZLKDk2LHRoaXMuX19rZXkpLHR9Z2V0Q2hpbGRBdEluZGV4KHQpe3ZhciBuPXRoaXMuZ2V0Q2hpbGRyZW5TaXplKCk7bGV0IHI7aWYodDxuLzIpe2ZvcihyPXRoaXMuZ2V0Rmlyc3RDaGlsZCgpLG49MDtyIT09bnVsbCYmbjw9dDspe2lmKG49PT10KXJldHVybiByO3I9ci5nZXROZXh0U2libGluZygpLG4rK31yZXR1cm4gbnVsbH1mb3Iocj10aGlzLmdldExhc3RDaGlsZCgpLC0tbjtyIT09bnVsbCYmbj49dDspe2lmKG49PT10KXJldHVybiByO3I9ci5nZXRQcmV2aW91c1NpYmxpbmcoKSxuLS19cmV0dXJuIG51bGx9Z2V0VGV4dENvbnRlbnQoKXtsZXQgdD0iIixuPXRoaXMuZ2V0Q2hpbGRyZW4oKSxyPW4ubGVuZ3RoO2ZvcihsZXQgbz0wO288cjtvKyspe2xldCBpPW5bb107dCs9aS5nZXRUZXh0Q29udGVudCgpLFcoaSkmJm8hPT1yLTEmJiFpLmlzSW5saW5lKCkmJih0Kz1gCgpgKX1yZXR1cm4gdH1nZXRUZXh0Q29udGVudFNpemUoKXtsZXQgdD0wLG49dGhpcy5nZXRDaGlsZHJlbigpLHI9bi5sZW5ndGg7Zm9yKGxldCBvPTA7bzxyO28rKyl7bGV0IGk9bltvXTt0Kz1pLmdldFRleHRDb250ZW50U2l6ZSgpLFcoaSkmJm8hPT1yLTEmJiFpLmlzSW5saW5lKCkmJih0Kz0yKX1yZXR1cm4gdH1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX2Rpcn1oYXNGb3JtYXQodCl7cmV0dXJuIHQhPT0iIj8odD1TeVt0XSwodGhpcy5nZXRGb3JtYXQoKSZ0KSE9PTApOiExfXNlbGVjdCh0LG4pe3RuKCk7bGV0IHI9S2UoKSxvPXQsaT1uO3ZhciBsPXRoaXMuZ2V0Q2hpbGRyZW5TaXplKCk7aWYoIXRoaXMuY2FuQmVFbXB0eSgpKXtpZih0PT09MCYmbj09PTApe2lmKHQ9dGhpcy5nZXRGaXJzdENoaWxkKCksWih0KXx8Vyh0KSlyZXR1cm4gdC5zZWxlY3QoMCwwKX1lbHNlIGlmKCEodCE9PXZvaWQgMCYmdCE9PWx8fG4hPT12b2lkIDAmJm4hPT1sKSYmKHQ9dGhpcy5nZXRMYXN0Q2hpbGQoKSxaKHQpfHxXKHQpKSlyZXR1cm4gdC5zZWxlY3QoKX1pZihvPT09dm9pZCAwJiYobz1sKSxpPT09dm9pZCAwJiYoaT1sKSxsPXRoaXMuX19rZXksZmUocikpci5hbmNob3Iuc2V0KGwsbywiZWxlbWVudCIpLHIuZm9jdXMuc2V0KGwsaSwiZWxlbWVudCIpLHIuZGlydHk9ITA7ZWxzZSByZXR1cm4gbFMobCxvLGwsaSwiZWxlbWVudCIsImVsZW1lbnQiKTtyZXR1cm4gcn1zZWxlY3RTdGFydCgpe2xldCB0PXRoaXMuZ2V0Rmlyc3REZXNjZW5kYW50KCk7cmV0dXJuIFcodCl8fFoodCk/dC5zZWxlY3QoMCwwKTp0IT09bnVsbD90LnNlbGVjdFByZXZpb3VzKCk6dGhpcy5zZWxlY3QoMCwwKX1zZWxlY3RFbmQoKXtsZXQgdD10aGlzLmdldExhc3REZXNjZW5kYW50KCk7cmV0dXJuIFcodCl8fFoodCk/dC5zZWxlY3QoKTp0IT09bnVsbD90LnNlbGVjdE5leHQoKTp0aGlzLnNlbGVjdCgpfWNsZWFyKCl7bGV0IHQ9dGhpcy5nZXRXcml0YWJsZSgpO3JldHVybiB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaChuPT5uLnJlbW92ZSgpKSx0fWFwcGVuZCguLi50KXtyZXR1cm4gdGhpcy5zcGxpY2UodGhpcy5nZXRDaGlsZHJlblNpemUoKSwwLHQpfXNldERpcmVjdGlvbih0KXtsZXQgbj10aGlzLmdldFdyaXRhYmxlKCk7cmV0dXJuIG4uX19kaXI9dCxufXNldEZvcm1hdCh0KXtyZXR1cm4gdGhpcy5nZXRXcml0YWJsZSgpLl9fZm9ybWF0PXQhPT0iIj9TeVt0XTowLHRoaXN9c2V0SW5kZW50KHQpe3JldHVybiB0aGlzLmdldFdyaXRhYmxlKCkuX19pbmRlbnQ9dCx0aGlzfXNwbGljZSh0LG4scil7bGV0IG89ci5sZW5ndGgsaT10aGlzLmdldENoaWxkcmVuU2l6ZSgpLGw9dGhpcy5nZXRXcml0YWJsZSgpLHM9bC5fX2tleTt2YXIgYT1bXSx1PVtdO2xldCBjPXRoaXMuZ2V0Q2hpbGRBdEluZGV4KHQrbiksZD1udWxsLGY9aS1uK287aWYodCE9PTApaWYodD09PWkpZD10aGlzLmdldExhc3RDaGlsZCgpO2Vsc2V7dmFyIGg9dGhpcy5nZXRDaGlsZEF0SW5kZXgodCk7aCE9PW51bGwmJihkPWguZ2V0UHJldmlvdXNTaWJsaW5nKCkpfWlmKDA8bil7dmFyIGc9ZD09PW51bGw/dGhpcy5nZXRGaXJzdENoaWxkKCk6ZC5nZXROZXh0U2libGluZygpO2ZvcihoPTA7aDxuO2grKyl7Zz09PW51bGwmJksoMTAwKTt2YXIgbT1nLmdldE5leHRTaWJsaW5nKCksXz1nLl9fa2V5O2c9Zy5nZXRXcml0YWJsZSgpLHNpKGcpLHUucHVzaChfKSxnPW19fWZvcihoPWQsbT0wO208bzttKyspe189clttXSxoIT09bnVsbCYmXy5pcyhoKSYmKGQ9aD1oLmdldFByZXZpb3VzU2libGluZygpKSxnPV8uZ2V0V3JpdGFibGUoKSxnLl9fcGFyZW50PT09cyYmZi0tLHNpKGcpO2xldCB2PV8uX19rZXk7aD09PW51bGw/KGwuX19maXJzdD12LGcuX19wcmV2PW51bGwpOihoPWguZ2V0V3JpdGFibGUoKSxoLl9fbmV4dD12LGcuX19wcmV2PWguX19rZXkpLF8uX19rZXk9PT1zJiZLKDc2KSxnLl9fcGFyZW50PXMsYS5wdXNoKHYpLGg9X31pZih0K249PT1pP2ghPT1udWxsJiYoaC5nZXRXcml0YWJsZSgpLl9fbmV4dD1udWxsLGwuX19sYXN0PWguX19rZXkpOmMhPT1udWxsJiYodD1jLmdldFdyaXRhYmxlKCksaCE9PW51bGw/KG49aC5nZXRXcml0YWJsZSgpLHQuX19wcmV2PWguX19rZXksbi5fX25leHQ9Yy5fX2tleSk6dC5fX3ByZXY9bnVsbCksbC5fX3NpemU9Zix1Lmxlbmd0aCYmKHQ9S2UoKSxmZSh0KSkpe3U9bmV3IFNldCh1KSxhPW5ldyBTZXQoYSk7bGV0e2FuY2hvcjp2LGZvY3VzOnl9PXQ7SHkodix1LGEpJiZEYyh2LHYuZ2V0Tm9kZSgpLHRoaXMsZCxjKSxIeSh5LHUsYSkmJkRjKHkseS5nZXROb2RlKCksdGhpcyxkLGMpLGYhPT0wfHx0aGlzLmNhbkJlRW1wdHkoKXx8bnIodGhpcyl8fHRoaXMucmVtb3ZlKCl9cmV0dXJuIGx9ZXhwb3J0SlNPTigpe3JldHVybntjaGlsZHJlbjpbXSxkaXJlY3Rpb246dGhpcy5nZXREaXJlY3Rpb24oKSxmb3JtYXQ6dGhpcy5nZXRGb3JtYXRUeXBlKCksaW5kZW50OnRoaXMuZ2V0SW5kZW50KCksdHlwZToiZWxlbWVudCIsdmVyc2lvbjoxfX1pbnNlcnROZXdBZnRlcigpe3JldHVybiBudWxsfWNhbkluZGVudCgpe3JldHVybiEwfWNvbGxhcHNlQXRTdGFydCgpe3JldHVybiExfWV4Y2x1ZGVGcm9tQ29weSgpe3JldHVybiExfWNhbkV4dHJhY3RDb250ZW50cygpe3JldHVybiEwfWNhblJlcGxhY2VXaXRoKCl7cmV0dXJuITB9Y2FuSW5zZXJ0QWZ0ZXIoKXtyZXR1cm4hMH1jYW5CZUVtcHR5KCl7cmV0dXJuITB9Y2FuSW5zZXJ0VGV4dEJlZm9yZSgpe3JldHVybiEwfWNhbkluc2VydFRleHRBZnRlcigpe3JldHVybiEwfWlzSW5saW5lKCl7cmV0dXJuITF9aXNTaGFkb3dSb290KCl7cmV0dXJuITF9Y2FuTWVyZ2VXaXRoKCl7cmV0dXJuITF9ZXh0cmFjdFdpdGhDaGlsZCgpe3JldHVybiExfX1mdW5jdGlvbiBXKGUpe3JldHVybiBlIGluc3RhbmNlb2YgUml9ZnVuY3Rpb24gSHkoZSx0LG4pe2ZvcihlPWUuZ2V0Tm9kZSgpO2U7KXtsZXQgcj1lLl9fa2V5O2lmKHQuaGFzKHIpJiYhbi5oYXMocikpcmV0dXJuITA7ZT1lLmdldFBhcmVudCgpfXJldHVybiExfWNsYXNzIEdsIGV4dGVuZHMgUml7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4icm9vdCJ9c3RhdGljIGNsb25lKCl7cmV0dXJuIG5ldyBHbH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCJyb290IiksdGhpcy5fX2NhY2hlZFRleHQ9bnVsbH1nZXRUb3BMZXZlbEVsZW1lbnRPclRocm93KCl7Syg1MSl9Z2V0VGV4dENvbnRlbnQoKXtsZXQgdD10aGlzLl9fY2FjaGVkVGV4dDtyZXR1cm4hS2woKSYmbnQoKS5fZGlydHlUeXBlIT09MHx8dD09PW51bGw/c3VwZXIuZ2V0VGV4dENvbnRlbnQoKTp0fXJlbW92ZSgpe0soNTIpfXJlcGxhY2UoKXtLKDUzKX1pbnNlcnRCZWZvcmUoKXtLKDU0KX1pbnNlcnRBZnRlcigpe0soNTUpfXVwZGF0ZURPTSgpe3JldHVybiExfWFwcGVuZCguLi50KXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7bGV0IHI9dFtuXTtXKHIpfHxWZShyKXx8Syg1Nil9cmV0dXJuIHN1cGVyLmFwcGVuZCguLi50KX1zdGF0aWMgaW1wb3J0SlNPTih0KXtsZXQgbj1icigpO3JldHVybiBuLnNldEZvcm1hdCh0LmZvcm1hdCksbi5zZXRJbmRlbnQodC5pbmRlbnQpLG4uc2V0RGlyZWN0aW9uKHQuZGlyZWN0aW9uKSxufWV4cG9ydEpTT04oKXtyZXR1cm57Y2hpbGRyZW46W10sZGlyZWN0aW9uOnRoaXMuZ2V0RGlyZWN0aW9uKCksZm9ybWF0OnRoaXMuZ2V0Rm9ybWF0VHlwZSgpLGluZGVudDp0aGlzLmdldEluZGVudCgpLHR5cGU6InJvb3QiLHZlcnNpb246MX19Y29sbGFwc2VBdFN0YXJ0KCl7cmV0dXJuITB9fWZ1bmN0aW9uIHJuKGUpe3JldHVybiBlIGluc3RhbmNlb2YgR2x9ZnVuY3Rpb24gVzIoZSx0KXtpZih0PXQuZ2V0RWRpdG9yU3RhdGUoKS5fc2VsZWN0aW9uLGU9ZS5fc2VsZWN0aW9uLGUhPT1udWxsKXtpZihlLmRpcnR5fHwhZS5pcyh0KSlyZXR1cm4hMH1lbHNlIGlmKHQhPT1udWxsKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGNtKCl7cmV0dXJuIG5ldyBDZChuZXcgTWFwKFtbInJvb3QiLG5ldyBHbF1dKSl9ZnVuY3Rpb24gZFMoZSl7bGV0IHQ9ZS5leHBvcnRKU09OKCk7dmFyIG49ZS5jb25zdHJ1Y3Rvcjt0LnR5cGUhPT1uLmdldFR5cGUoKSYmSygxMzAsbi5uYW1lKTtsZXQgcj10LmNoaWxkcmVuO2lmKFcoZSkpZm9yKEFycmF5LmlzQXJyYXkocil8fEsoNTksbi5uYW1lKSxlPWUuZ2V0Q2hpbGRyZW4oKSxuPTA7bjxlLmxlbmd0aDtuKyspe2xldCBvPWRTKGVbbl0pO3IucHVzaChvKX1yZXR1cm4gdH1jbGFzcyBDZHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuX25vZGVNYXA9dCx0aGlzLl9zZWxlY3Rpb249bnx8bnVsbCx0aGlzLl9yZWFkT25seT10aGlzLl9mbHVzaFN5bmM9ITF9aXNFbXB0eSgpe3JldHVybiB0aGlzLl9ub2RlTWFwLnNpemU9PT0xJiZ0aGlzLl9zZWxlY3Rpb249PT1udWxsfXJlYWQodCl7cmV0dXJuIFV5KHRoaXMsdCl9Y2xvbmUodCl7cmV0dXJuIHQ9bmV3IENkKHRoaXMuX25vZGVNYXAsdD09PXZvaWQgMD90aGlzLl9zZWxlY3Rpb246dCksdC5fcmVhZE9ubHk9ITAsdH10b0pTT04oKXtyZXR1cm4gVXkodGhpcywoKT0+KHtyb290OmRTKGJyKCkpfSkpfX1jbGFzcyBZbCBleHRlbmRzIFJpe3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuInBhcmFncmFwaCJ9c3RhdGljIGNsb25lKHQpe3JldHVybiBuZXcgWWwodC5fX2tleSl9Y3JlYXRlRE9NKHQpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtyZXR1cm4gdD1Ccyh0LnRoZW1lLCJwYXJhZ3JhcGgiKSx0IT09dm9pZCAwJiZuLmNsYXNzTGlzdC5hZGQoLi4udCksbn11cGRhdGVET00oKXtyZXR1cm4hMX1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJue3A6KCk9Pih7Y29udmVyc2lvbjpVMixwcmlvcml0eTowfSl9fWV4cG9ydERPTSh0KXtpZih7ZWxlbWVudDp0fT1zdXBlci5leHBvcnRET00odCksdCYmeGQodCkpe3RoaXMuaXNFbXB0eSgpJiZ0LmFwcGVuZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTt2YXIgbj10aGlzLmdldEZvcm1hdFR5cGUoKTt0LnN0eWxlLnRleHRBbGlnbj1uLChuPXRoaXMuZ2V0RGlyZWN0aW9uKCkpJiYodC5kaXI9biksbj10aGlzLmdldEluZGVudCgpLDA8biYmKHQuc3R5bGUudGV4dEluZGVudD1gJHsyMCpufXB4YCl9cmV0dXJue2VsZW1lbnQ6dH19c3RhdGljIGltcG9ydEpTT04odCl7bGV0IG49dmkoKTtyZXR1cm4gbi5zZXRGb3JtYXQodC5mb3JtYXQpLG4uc2V0SW5kZW50KHQuaW5kZW50KSxuLnNldERpcmVjdGlvbih0LmRpcmVjdGlvbiksbn1leHBvcnRKU09OKCl7cmV0dXJuey4uLnN1cGVyLmV4cG9ydEpTT04oKSx0eXBlOiJwYXJhZ3JhcGgiLHZlcnNpb246MX19aW5zZXJ0TmV3QWZ0ZXIodCxuKXt0PXZpKCk7bGV0IHI9dGhpcy5nZXREaXJlY3Rpb24oKTtyZXR1cm4gdC5zZXREaXJlY3Rpb24ociksdGhpcy5pbnNlcnRBZnRlcih0LG4pLHR9Y29sbGFwc2VBdFN0YXJ0KCl7bGV0IHQ9dGhpcy5nZXRDaGlsZHJlbigpO2lmKHQubGVuZ3RoPT09MHx8Wih0WzBdKSYmdFswXS5nZXRUZXh0Q29udGVudCgpLnRyaW0oKT09PSIiKXtpZih0aGlzLmdldE5leHRTaWJsaW5nKCkhPT1udWxsKXJldHVybiB0aGlzLnNlbGVjdE5leHQoKSx0aGlzLnJlbW92ZSgpLCEwO2lmKHRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCkhPT1udWxsKXJldHVybiB0aGlzLnNlbGVjdFByZXZpb3VzKCksdGhpcy5yZW1vdmUoKSwhMH1yZXR1cm4hMX19ZnVuY3Rpb24gVTIoZSl7bGV0IHQ9dmkoKTtyZXR1cm4gZS5zdHlsZSYmKHQuc2V0Rm9ybWF0KGUuc3R5bGUudGV4dEFsaWduKSxlPXBhcnNlSW50KGUuc3R5bGUudGV4dEluZGVudCwxMCkvMjAsMDxlJiZ0LnNldEluZGVudChlKSkse25vZGU6dH19ZnVuY3Rpb24gdmkoKXtyZXR1cm4gRmEobmV3IFlsKX1mdW5jdGlvbiBmUyhlLHQsbixyKXtsZXQgbz1lLl9rZXlUb0RPTU1hcDtvLmNsZWFyKCksZS5fZWRpdG9yU3RhdGU9Y20oKSxlLl9wZW5kaW5nRWRpdG9yU3RhdGU9cixlLl9jb21wb3NpdGlvbktleT1udWxsLGUuX2RpcnR5VHlwZT0wLGUuX2Nsb25lTm90TmVlZGVkLmNsZWFyKCksZS5fZGlydHlMZWF2ZXM9bmV3IFNldCxlLl9kaXJ0eUVsZW1lbnRzLmNsZWFyKCksZS5fbm9ybWFsaXplZE5vZGVzPW5ldyBTZXQsZS5fdXBkYXRlVGFncz1uZXcgU2V0LGUuX3VwZGF0ZXM9W10sZS5fYmxvY2tDdXJzb3JFbGVtZW50PW51bGwscj1lLl9vYnNlcnZlcixyIT09bnVsbCYmKHIuZGlzY29ubmVjdCgpLGUuX29ic2VydmVyPW51bGwpLHQhPT1udWxsJiYodC50ZXh0Q29udGVudD0iIiksbiE9PW51bGwmJihuLnRleHRDb250ZW50PSIiLG8uc2V0KCJyb290IixuKSl9ZnVuY3Rpb24gVjIoZSl7bGV0IHQ9bmV3IE1hcCxuPW5ldyBTZXQ7cmV0dXJuIGUuZm9yRWFjaChyPT57aWYocj1yLmtsYXNzLmltcG9ydERPTSE9bnVsbD9yLmtsYXNzLmltcG9ydERPTS5iaW5kKHIua2xhc3MpOm51bGwsciE9bnVsbCYmIW4uaGFzKHIpKXtuLmFkZChyKTt2YXIgbz1yKCk7byE9PW51bGwmJk9iamVjdC5rZXlzKG8pLmZvckVhY2goaT0+e2xldCBsPXQuZ2V0KGkpO2w9PT12b2lkIDAmJihsPVtdLHQuc2V0KGksbCkpLGwucHVzaChvW2ldKX0pfX0pLHR9Y2xhc3MgSDJ7Y29uc3RydWN0b3IodCxuLHIsbyxpLGwscyl7dGhpcy5fcGFyZW50RWRpdG9yPW4sdGhpcy5fcm9vdEVsZW1lbnQ9bnVsbCx0aGlzLl9lZGl0b3JTdGF0ZT10LHRoaXMuX2NvbXBvc2l0aW9uS2V5PXRoaXMuX3BlbmRpbmdFZGl0b3JTdGF0ZT1udWxsLHRoaXMuX2RlZmVycmVkPVtdLHRoaXMuX2tleVRvRE9NTWFwPW5ldyBNYXAsdGhpcy5fdXBkYXRlcz1bXSx0aGlzLl91cGRhdGluZz0hMSx0aGlzLl9saXN0ZW5lcnM9e2RlY29yYXRvcjpuZXcgU2V0LGVkaXRhYmxlOm5ldyBTZXQsbXV0YXRpb246bmV3IE1hcCxyb290Om5ldyBTZXQsdGV4dGNvbnRlbnQ6bmV3IFNldCx1cGRhdGU6bmV3IFNldH0sdGhpcy5fY29tbWFuZHM9bmV3IE1hcCx0aGlzLl9jb25maWc9byx0aGlzLl9ub2Rlcz1yLHRoaXMuX2RlY29yYXRvcnM9e30sdGhpcy5fcGVuZGluZ0RlY29yYXRvcnM9bnVsbCx0aGlzLl9kaXJ0eVR5cGU9MCx0aGlzLl9jbG9uZU5vdE5lZWRlZD1uZXcgU2V0LHRoaXMuX2RpcnR5TGVhdmVzPW5ldyBTZXQsdGhpcy5fZGlydHlFbGVtZW50cz1uZXcgTWFwLHRoaXMuX25vcm1hbGl6ZWROb2Rlcz1uZXcgU2V0LHRoaXMuX3VwZGF0ZVRhZ3M9bmV3IFNldCx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX2tleT16XygpLHRoaXMuX29uRXJyb3I9aSx0aGlzLl9odG1sQ29udmVyc2lvbnM9bCx0aGlzLl9lZGl0YWJsZT1zLHRoaXMuX2hlYWRsZXNzPW4hPT1udWxsJiZuLl9oZWFkbGVzcyx0aGlzLl9ibG9ja0N1cnNvckVsZW1lbnQ9dGhpcy5fd2luZG93PW51bGx9aXNDb21wb3NpbmcoKXtyZXR1cm4gdGhpcy5fY29tcG9zaXRpb25LZXkhPW51bGx9cmVnaXN0ZXJVcGRhdGVMaXN0ZW5lcih0KXtsZXQgbj10aGlzLl9saXN0ZW5lcnMudXBkYXRlO3JldHVybiBuLmFkZCh0KSwoKT0+e24uZGVsZXRlKHQpfX1yZWdpc3RlckVkaXRhYmxlTGlzdGVuZXIodCl7bGV0IG49dGhpcy5fbGlzdGVuZXJzLmVkaXRhYmxlO3JldHVybiBuLmFkZCh0KSwoKT0+e24uZGVsZXRlKHQpfX1yZWdpc3RlckRlY29yYXRvckxpc3RlbmVyKHQpe2xldCBuPXRoaXMuX2xpc3RlbmVycy5kZWNvcmF0b3I7cmV0dXJuIG4uYWRkKHQpLCgpPT57bi5kZWxldGUodCl9fXJlZ2lzdGVyVGV4dENvbnRlbnRMaXN0ZW5lcih0KXtsZXQgbj10aGlzLl9saXN0ZW5lcnMudGV4dGNvbnRlbnQ7cmV0dXJuIG4uYWRkKHQpLCgpPT57bi5kZWxldGUodCl9fXJlZ2lzdGVyUm9vdExpc3RlbmVyKHQpe2xldCBuPXRoaXMuX2xpc3RlbmVycy5yb290O3JldHVybiB0KHRoaXMuX3Jvb3RFbGVtZW50LG51bGwpLG4uYWRkKHQpLCgpPT57dChudWxsLHRoaXMuX3Jvb3RFbGVtZW50KSxuLmRlbGV0ZSh0KX19cmVnaXN0ZXJDb21tYW5kKHQsbixyKXtyPT09dm9pZCAwJiZLKDM1KTtsZXQgbz10aGlzLl9jb21tYW5kcztvLmhhcyh0KXx8by5zZXQodCxbbmV3IFNldCxuZXcgU2V0LG5ldyBTZXQsbmV3IFNldCxuZXcgU2V0XSk7bGV0IGk9by5nZXQodCk7aT09PXZvaWQgMCYmSygzNixTdHJpbmcodCkpO2xldCBsPWlbcl07cmV0dXJuIGwuYWRkKG4pLCgpPT57bC5kZWxldGUobiksaS5ldmVyeShzPT5zLnNpemU9PT0wKSYmby5kZWxldGUodCl9fXJlZ2lzdGVyTXV0YXRpb25MaXN0ZW5lcih0LG4pe3RoaXMuX25vZGVzLmdldCh0LmdldFR5cGUoKSk9PT12b2lkIDAmJksoMzcsdC5uYW1lKTtsZXQgcj10aGlzLl9saXN0ZW5lcnMubXV0YXRpb247cmV0dXJuIHIuc2V0KG4sdCksKCk9PntyLmRlbGV0ZShuKX19cmVnaXN0ZXJOb2RlVHJhbnNmb3JtVG9LbGFzcyh0LG4pe3ZhciByPXQuZ2V0VHlwZSgpO3JldHVybiByPXRoaXMuX25vZGVzLmdldChyKSxyPT09dm9pZCAwJiZLKDM3LHQubmFtZSksci50cmFuc2Zvcm1zLmFkZChuKSxyfXJlZ2lzdGVyTm9kZVRyYW5zZm9ybSh0LG4pe3ZhciByPXRoaXMucmVnaXN0ZXJOb2RlVHJhbnNmb3JtVG9LbGFzcyh0LG4pO2xldCBvPVtyXTtyZXR1cm4gcj1yLnJlcGxhY2VXaXRoS2xhc3MsciE9bnVsbCYmKHI9dGhpcy5yZWdpc3Rlck5vZGVUcmFuc2Zvcm1Ub0tsYXNzKHIsbiksby5wdXNoKHIpKSx4Mih0aGlzLHQuZ2V0VHlwZSgpKSwoKT0+e28uZm9yRWFjaChpPT5pLnRyYW5zZm9ybXMuZGVsZXRlKG4pKX19aGFzTm9kZSh0KXtyZXR1cm4gdGhpcy5fbm9kZXMuaGFzKHQuZ2V0VHlwZSgpKX1oYXNOb2Rlcyh0KXtyZXR1cm4gdC5ldmVyeSh0aGlzLmhhc05vZGUuYmluZCh0aGlzKSl9ZGlzcGF0Y2hDb21tYW5kKHQsbil7cmV0dXJuIEoodGhpcyx0LG4pfWdldERlY29yYXRvcnMoKXtyZXR1cm4gdGhpcy5fZGVjb3JhdG9yc31nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9yb290RWxlbWVudH1nZXRLZXkoKXtyZXR1cm4gdGhpcy5fa2V5fXNldFJvb3RFbGVtZW50KHQpe2xldCBuPXRoaXMuX3Jvb3RFbGVtZW50O2lmKHQhPT1uKXtsZXQgbD1Ccyh0aGlzLl9jb25maWcudGhlbWUsInJvb3QiKTt2YXIgcj10aGlzLl9wZW5kaW5nRWRpdG9yU3RhdGV8fHRoaXMuX2VkaXRvclN0YXRlO2lmKHRoaXMuX3Jvb3RFbGVtZW50PXQsZlModGhpcyxuLHQsciksbiE9PW51bGwpe2lmKCF0aGlzLl9jb25maWcuZGlzYWJsZUV2ZW50cyl7V3MhPT0wJiYoV3MtLSxXcz09PTAmJm4ub3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLHJTKSk7dmFyIG89bi5fX2xleGljYWxFZGl0b3I7aWYobyE9bnVsbCl7aWYoby5fcGFyZW50RWRpdG9yIT09bnVsbCl7dmFyIGk9bm0obyk7aT1pW2kubGVuZ3RoLTFdLl9rZXksZ2wuZ2V0KGkpPT09byYmZ2wuZGVsZXRlKGkpfWVsc2UgZ2wuZGVsZXRlKG8uX2tleSk7bi5fX2xleGljYWxFZGl0b3I9bnVsbH1mb3Iobz1uUyhuKSxpPTA7aTxvLmxlbmd0aDtpKyspb1tpXSgpO24uX19sZXhpY2FsRXZlbnRIYW5kbGVzPVtdfWwhPW51bGwmJm4uY2xhc3NMaXN0LnJlbW92ZSguLi5sKX10IT09bnVsbD8ocj0ocj10Lm93bmVyRG9jdW1lbnQpJiZyLmRlZmF1bHRWaWV3fHxudWxsLG89dC5zdHlsZSxvLnVzZXJTZWxlY3Q9InRleHQiLG8ud2hpdGVTcGFjZT0icHJlLXdyYXAiLG8ud29yZEJyZWFrPSJicmVhay13b3JkIix0LnNldEF0dHJpYnV0ZSgiZGF0YS1sZXhpY2FsLWVkaXRvciIsInRydWUiKSx0aGlzLl93aW5kb3c9cix0aGlzLl9kaXJ0eVR5cGU9MixQXyh0aGlzKSx0aGlzLl91cGRhdGVUYWdzLmFkZCgiaGlzdG9yeS1tZXJnZSIpLGFpKHRoaXMpLHRoaXMuX2NvbmZpZy5kaXNhYmxlRXZlbnRzfHxQMih0LHRoaXMpLGwhPW51bGwmJnQuY2xhc3NMaXN0LmFkZCguLi5sKSk6KHRoaXMuX2VkaXRvclN0YXRlPXIsdGhpcy5fd2luZG93PXRoaXMuX3BlbmRpbmdFZGl0b3JTdGF0ZT1udWxsKSxWcygicm9vdCIsdGhpcywhMSx0LG4pfX1nZXRFbGVtZW50QnlLZXkodCl7cmV0dXJuIHRoaXMuX2tleVRvRE9NTWFwLmdldCh0KXx8bnVsbH1nZXRFZGl0b3JTdGF0ZSgpe3JldHVybiB0aGlzLl9lZGl0b3JTdGF0ZX1zZXRFZGl0b3JTdGF0ZSh0LG4pe3QuaXNFbXB0eSgpJiZLKDM4KSxSXyh0aGlzKTtsZXQgcj10aGlzLl9wZW5kaW5nRWRpdG9yU3RhdGUsbz10aGlzLl91cGRhdGVUYWdzO249biE9PXZvaWQgMD9uLnRhZzpudWxsLHI9PT1udWxsfHxyLmlzRW1wdHkoKXx8KG4hPW51bGwmJm8uYWRkKG4pLGFpKHRoaXMpKSx0aGlzLl9wZW5kaW5nRWRpdG9yU3RhdGU9dCx0aGlzLl9kaXJ0eVR5cGU9Mix0aGlzLl9kaXJ0eUVsZW1lbnRzLnNldCgicm9vdCIsITEpLHRoaXMuX2NvbXBvc2l0aW9uS2V5PW51bGwsbiE9bnVsbCYmby5hZGQobiksYWkodGhpcyl9cGFyc2VFZGl0b3JTdGF0ZSh0LG4pe3Q9dHlwZW9mIHQ9PSJzdHJpbmciP0pTT04ucGFyc2UodCk6dDtsZXQgcj1jbSgpLG89VHQsaT15bixsPWJ0LHM9dGhpcy5fZGlydHlFbGVtZW50cyxhPXRoaXMuX2RpcnR5TGVhdmVzLHU9dGhpcy5fY2xvbmVOb3ROZWVkZWQsYz10aGlzLl9kaXJ0eVR5cGU7dGhpcy5fZGlydHlFbGVtZW50cz1uZXcgTWFwLHRoaXMuX2RpcnR5TGVhdmVzPW5ldyBTZXQsdGhpcy5fY2xvbmVOb3ROZWVkZWQ9bmV3IFNldCx0aGlzLl9kaXJ0eVR5cGU9MCxUdD1yLHluPSExLGJ0PXRoaXM7dHJ5e3VtKHQucm9vdCx0aGlzLl9ub2RlcyksbiYmbigpLHIuX3JlYWRPbmx5PSEwfWNhdGNoKGQpe2QgaW5zdGFuY2VvZiBFcnJvciYmdGhpcy5fb25FcnJvcihkKX1maW5hbGx5e3RoaXMuX2RpcnR5RWxlbWVudHM9cyx0aGlzLl9kaXJ0eUxlYXZlcz1hLHRoaXMuX2Nsb25lTm90TmVlZGVkPXUsdGhpcy5fZGlydHlUeXBlPWMsVHQ9byx5bj1pLGJ0PWx9cmV0dXJuIHJ9dXBkYXRlKHQsbil7Tm4odGhpcyx0LG4pfWZvY3VzKHQsbj17fSl7bGV0IHI9dGhpcy5fcm9vdEVsZW1lbnQ7ciE9PW51bGwmJihyLnNldEF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxpemUiLCJvZmYiKSxObih0aGlzLCgpPT57bGV0IG89S2UoKSxpPWJyKCk7byE9PW51bGw/by5kaXJ0eT0hMDppLmdldENoaWxkcmVuU2l6ZSgpIT09MCYmKG4uZGVmYXVsdFNlbGVjdGlvbj09PSJyb290U3RhcnQiP2kuc2VsZWN0U3RhcnQoKTppLnNlbGVjdEVuZCgpKX0se29uVXBkYXRlOigpPT57ci5yZW1vdmVBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiksdCYmdCgpfSx0YWc6ImZvY3VzIn0pLHRoaXMuX3BlbmRpbmdFZGl0b3JTdGF0ZT09PW51bGwmJnIucmVtb3ZlQXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIpKX1ibHVyKCl7dmFyIHQ9dGhpcy5fcm9vdEVsZW1lbnQ7dCE9PW51bGwmJnQuYmx1cigpLHQ9TnIodGhpcy5fd2luZG93KSx0IT09bnVsbCYmdC5yZW1vdmVBbGxSYW5nZXMoKX1pc0VkaXRhYmxlKCl7cmV0dXJuIHRoaXMuX2VkaXRhYmxlfXNldEVkaXRhYmxlKHQpe3RoaXMuX2VkaXRhYmxlIT09dCYmKHRoaXMuX2VkaXRhYmxlPXQsVnMoImVkaXRhYmxlIix0aGlzLCEwLHQpKX10b0pTT04oKXtyZXR1cm57ZWRpdG9yU3RhdGU6dGhpcy5fZWRpdG9yU3RhdGUudG9KU09OKCl9fX1jbGFzcyBkbSBleHRlbmRzIFJpe2NvbnN0cnVjdG9yKHQsbil7c3VwZXIobiksdGhpcy5fX2NvbFNwYW49dCx0aGlzLl9fcm93U3Bhbj0xfWV4cG9ydEpTT04oKXtyZXR1cm57Li4uc3VwZXIuZXhwb3J0SlNPTigpLGNvbFNwYW46dGhpcy5fX2NvbFNwYW4scm93U3Bhbjp0aGlzLl9fcm93U3Bhbn19Z2V0Q29sU3Bhbigpe3JldHVybiB0aGlzLl9fY29sU3Bhbn1zZXRDb2xTcGFuKHQpe3JldHVybiB0aGlzLmdldFdyaXRhYmxlKCkuX19jb2xTcGFuPXQsdGhpc31nZXRSb3dTcGFuKCl7cmV0dXJuIHRoaXMuX19yb3dTcGFufXNldFJvd1NwYW4odCl7cmV0dXJuIHRoaXMuZ2V0V3JpdGFibGUoKS5fX3Jvd1NwYW49dCx0aGlzfX1mdW5jdGlvbiBJbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGRtfWNsYXNzIGhTIGV4dGVuZHMgUml7fWZ1bmN0aW9uIGZtKGUpe3JldHVybiBlIGluc3RhbmNlb2YgaFN9Y2xhc3MgcFMgZXh0ZW5kcyBSaXt9ZnVuY3Rpb24gRWEoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBwU31JLiRhZGRVcGRhdGVUYWc9ZnVuY3Rpb24oZSl7dG4oKSxudCgpLl91cGRhdGVUYWdzLmFkZChlKX07SS4kYXBwbHlOb2RlUmVwbGFjZW1lbnQ9RmE7SS4kY29weU5vZGU9V187SS4kY3JlYXRlTGluZUJyZWFrTm9kZT1ObDtJLiRjcmVhdGVOb2RlU2VsZWN0aW9uPWdwO0kuJGNyZWF0ZVBhcmFncmFwaE5vZGU9dmk7SS4kY3JlYXRlUmFuZ2VTZWxlY3Rpb249ZnVuY3Rpb24oKXtsZXQgZT1uZXcgRXIoInJvb3QiLDAsImVsZW1lbnQiKSx0PW5ldyBFcigicm9vdCIsMCwiZWxlbWVudCIpO3JldHVybiBuZXcgTmkoZSx0LDAsIiIpfTtJLiRjcmVhdGVUYWJOb2RlPV9kO0kuJGNyZWF0ZVRleHROb2RlPUN0O0kuJGdldEFkamFjZW50Tm9kZT1lcDtJLiRnZXROZWFyZXN0Tm9kZUZyb21ET01Ob2RlPXphO0kuJGdldE5lYXJlc3RSb290T3JTaGFkb3dSb290PUJfO0kuJGdldE5vZGVCeUtleT1rdDtJLiRnZXRQcmV2aW91c1NlbGVjdGlvbj1IbDtJLiRnZXRSb290PWJyO0kuJGdldFNlbGVjdGlvbj1LZTtJLiRnZXRUZXh0Q29udGVudD1mdW5jdGlvbigpe2xldCBlPUtlKCk7cmV0dXJuIGU9PT1udWxsPyIiOmUuZ2V0VGV4dENvbnRlbnQoKX07SS4kaGFzQW5jZXN0b3I9T2M7SS4kaGFzVXBkYXRlVGFnPWZ1bmN0aW9uKGUpe3JldHVybiBudCgpLl91cGRhdGVUYWdzLmhhcyhlKX07SS4kaW5zZXJ0Tm9kZXM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1LZSgpfHxIbCgpO3JldHVybiBuPT09bnVsbCYmKG49YnIoKS5zZWxlY3RFbmQoKSksbi5pbnNlcnROb2RlcyhlLHQpfTtJLiRpc0Jsb2NrRWxlbWVudE5vZGU9cHA7SS4kaXNEZWNvcmF0b3JOb2RlPVZlO0kuJGlzRWxlbWVudE5vZGU9VztJLiRpc0lubGluZUVsZW1lbnRPckRlY29yYXRvck5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFcoZSkmJmUuaXNJbmxpbmUoKXx8VmUoZSkmJmUuaXNJbmxpbmUoKX07SS4kaXNMZWFmTm9kZT1NXztJLiRpc0xpbmVCcmVha05vZGU9X2E7SS4kaXNOb2RlU2VsZWN0aW9uPVZsO0kuJGlzUGFyYWdyYXBoTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFlsfTtJLiRpc1JhbmdlU2VsZWN0aW9uPWZlO0kuJGlzUm9vdE5vZGU9cm47SS4kaXNSb290T3JTaGFkb3dSb290PW5yO0kuJGlzVGFiTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFVsfTtJLiRpc1RleHROb2RlPVo7SS4kbm9kZXNPZlR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQ9UnIoKTtsZXQgbj10Ll9yZWFkT25seSxyPWUuZ2V0VHlwZSgpO3Q9dC5fbm9kZU1hcDtsZXQgbz1bXTtmb3IobGV0WyxpXW9mIHQpaSBpbnN0YW5jZW9mIGUmJmkuX190eXBlPT09ciYmKG58fGkuaXNBdHRhY2hlZCgpKSYmby5wdXNoKGkpO3JldHVybiBvfTtJLiRub3JtYWxpemVTZWxlY3Rpb25fX0VYUEVSSU1FTlRBTD1xZztJLiRwYXJzZVNlcmlhbGl6ZWROb2RlPWZ1bmN0aW9uKGUpe3JldHVybiB1bShlLG50KCkuX25vZGVzKX07SS4kc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dmFyIGU9YnIoKTtlPWUuc2VsZWN0KDAsZS5nZXRDaGlsZHJlblNpemUoKSksU3IocWcoZSkpfTtJLiRzZXRDb21wb3NpdGlvbktleT1MdDtJLiRzZXRTZWxlY3Rpb249U3I7SS4kc3BsaXROb2RlPVVfO0kuQkxVUl9DT01NQU5EPVRfO0kuQ0FOX1JFRE9fQ09NTUFORD17fTtJLkNBTl9VTkRPX0NPTU1BTkQ9e307SS5DTEVBUl9FRElUT1JfQ09NTUFORD17fTtJLkNMRUFSX0hJU1RPUllfQ09NTUFORD17fTtJLkNMSUNLX0NPTU1BTkQ9dV87SS5DT01NQU5EX1BSSU9SSVRZX0NSSVRJQ0FMPTQ7SS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUj0wO0kuQ09NTUFORF9QUklPUklUWV9ISUdIPTM7SS5DT01NQU5EX1BSSU9SSVRZX0xPVz0xO0kuQ09NTUFORF9QUklPUklUWV9OT1JNQUw9MjtJLkNPTlRST0xMRURfVEVYVF9JTlNFUlRJT05fQ09NTUFORD1wbDtJLkNPUFlfQ09NTUFORD1ZZztJLkNVVF9DT01NQU5EPVhnO0kuREVMRVRFX0NIQVJBQ1RFUl9DT01NQU5EPWdhO0kuREVMRVRFX0xJTkVfQ09NTUFORD12YTtJLkRFTEVURV9XT1JEX0NPTU1BTkQ9bWE7SS5ERVBSRUNBVEVEXyRjb21wdXRlR3JpZE1hcD1zUztJLkRFUFJFQ0FURURfJGNyZWF0ZUdyaWRTZWxlY3Rpb249ZnVuY3Rpb24oKXtsZXQgZT1uZXcgRXIoInJvb3QiLDAsImVsZW1lbnQiKSx0PW5ldyBFcigicm9vdCIsMCwiZWxlbWVudCIpO3JldHVybiBuZXcgRWQoInJvb3QiLGUsdCl9O0kuREVQUkVDQVRFRF8kZ2V0R3JpZENlbGxOb2RlUmVjdD1ocDtJLkRFUFJFQ0FURURfJGdldE5vZGVUcmlwbGV0PWFTO0kuREVQUkVDQVRFRF8kaXNHcmlkQ2VsbE5vZGU9SW47SS5ERVBSRUNBVEVEXyRpc0dyaWROb2RlPWZtO0kuREVQUkVDQVRFRF8kaXNHcmlkUm93Tm9kZT1FYTtJLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbj1zbTtJLkRFUFJFQ0FURURfR3JpZENlbGxOb2RlPWRtO0kuREVQUkVDQVRFRF9HcmlkTm9kZT1oUztJLkRFUFJFQ0FURURfR3JpZFJvd05vZGU9cFM7SS5EUkFHRU5EX0NPTU1BTkQ9JF87SS5EUkFHT1ZFUl9DT01NQU5EPUNfO0kuRFJBR1NUQVJUX0NPTU1BTkQ9RV87SS5EUk9QX0NPTU1BTkQ9U187SS5EZWNvcmF0b3JOb2RlPWNTO0kuRWxlbWVudE5vZGU9Umk7SS5GT0NVU19DT01NQU5EPWtfO0kuRk9STUFUX0VMRU1FTlRfQ09NTUFORD17fTtJLkZPUk1BVF9URVhUX0NPTU1BTkQ9eW87SS5JTkRFTlRfQ09OVEVOVF9DT01NQU5EPXt9O0kuSU5TRVJUX0xJTkVfQlJFQUtfQ09NTUFORD1GcztJLklOU0VSVF9QQVJBR1JBUEhfQ09NTUFORD1YaDtJLklOU0VSVF9UQUJfQ09NTUFORD17fTtJLktFWV9BUlJPV19ET1dOX0NPTU1BTkQ9bV87SS5LRVlfQVJST1dfTEVGVF9DT01NQU5EPWhfO0kuS0VZX0FSUk9XX1JJR0hUX0NPTU1BTkQ9ZF87SS5LRVlfQVJST1dfVVBfQ09NTUFORD1nXztJLktFWV9CQUNLU1BBQ0VfQ09NTUFORD15XztJLktFWV9ERUxFVEVfQ09NTUFORD13XztJLktFWV9ET1dOX0NPTU1BTkQ9Y187SS5LRVlfRU5URVJfQ09NTUFORD1rYztJLktFWV9FU0NBUEVfQ09NTUFORD14XztJLktFWV9NT0RJRklFUl9DT01NQU5EPWJfO0kuS0VZX1NQQUNFX0NPTU1BTkQ9dl87SS5LRVlfVEFCX0NPTU1BTkQ9X187SS5MaW5lQnJlYWtOb2RlPVdsO0kuTU9WRV9UT19FTkQ9Zl87SS5NT1ZFX1RPX1NUQVJUPXBfO0kuT1VUREVOVF9DT05URU5UX0NPTU1BTkQ9e307SS5QQVNURV9DT01NQU5EPUhnO0kuUGFyYWdyYXBoTm9kZT1ZbDtJLlJFRE9fQ09NTUFORD1HZztJLlJFTU9WRV9URVhUX0NPTU1BTkQ9UWg7SS5Sb290Tm9kZT1HbDtJLlNFTEVDVElPTl9DSEFOR0VfQ09NTUFORD1wZDtJLlNFTEVDVF9BTExfQ09NTUFORD1KaDtJLlRhYk5vZGU9VWw7SS5UZXh0Tm9kZT1iaTtJLlVORE9fQ09NTUFORD1LZztJLmNyZWF0ZUNvbW1hbmQ9ZnVuY3Rpb24oKXtyZXR1cm57fX07SS5jcmVhdGVFZGl0b3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8e30sbj1idCxyPXQudGhlbWV8fHt9O2xldCBvPWU9PT12b2lkIDA/bjp0LnBhcmVudEVkaXRvcnx8bnVsbCxpPXQuZGlzYWJsZUV2ZW50c3x8ITEsbD1jbSgpLHM9dC5uYW1lc3BhY2V8fChvIT09bnVsbD9vLl9jb25maWcubmFtZXNwYWNlOnpfKCkpLGE9dC5lZGl0b3JTdGF0ZSx1PVtHbCxiaSxXbCxVbCxZbCwuLi50Lm5vZGVzfHxbXV0sYz10Lm9uRXJyb3I7aWYodD10LmVkaXRhYmxlIT09dm9pZCAwP3QuZWRpdGFibGU6ITAsZT09PXZvaWQgMCYmbiE9PW51bGwpZT1uLl9ub2RlcztlbHNlIGZvcihlPW5ldyBNYXAsbj0wO248dS5sZW5ndGg7bisrKXtsZXQgZj11W25dLGg9bnVsbDt2YXIgZD1udWxsO3R5cGVvZiBmIT0iZnVuY3Rpb24iJiYoZD1mLGY9ZC5yZXBsYWNlLGg9ZC53aXRoLGQ9ZC53aXRoS2xhc3M/ZC53aXRoS2xhc3M6bnVsbCk7bGV0IGc9Zi5nZXRUeXBlKCksbT1mLnRyYW5zZm9ybSgpLF89bmV3IFNldDttIT09bnVsbCYmXy5hZGQobSksZS5zZXQoZyx7a2xhc3M6ZixyZXBsYWNlOmgscmVwbGFjZVdpdGhLbGFzczpkLHRyYW5zZm9ybXM6X30pfXJldHVybiByPW5ldyBIMihsLG8sZSx7ZGlzYWJsZUV2ZW50czppLG5hbWVzcGFjZTpzLHRoZW1lOnJ9LGN8fGNvbnNvbGUuZXJyb3IsVjIoZSksdCksYSE9PXZvaWQgMCYmKHIuX3BlbmRpbmdFZGl0b3JTdGF0ZT1hLHIuX2RpcnR5VHlwZT0yKSxyfTtJLmdldE5lYXJlc3RFZGl0b3JGcm9tRE9NTm9kZT10bTtJLmlzSFRNTEFuY2hvckVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHhkKGUpJiZlLnRhZ05hbWU9PT0iQSJ9O0kuaXNIVE1MRWxlbWVudD14ZDtJLmlzU2VsZWN0aW9uQ2FwdHVyZWRJbkRlY29yYXRvcklucHV0PWVtO0kuaXNTZWxlY3Rpb25XaXRoaW5FZGl0b3I9amE7Y29uc3QgSzI9STt2YXIgaGU9SzIsZ3Q9e30sUHQ9e30saWU9aGU7bGV0IEljPW5ldyBNYXA7ZnVuY3Rpb24gS3koZSl7Zm9yKDtlIT1udWxsOyl7aWYoZS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXJldHVybiBlO2U9ZS5maXJzdENoaWxkfXJldHVybiBudWxsfWZ1bmN0aW9uIEd5KGUpe2xldCB0PWUucGFyZW50Tm9kZTtpZih0PT1udWxsKXRocm93IEVycm9yKCJTaG91bGQgbmV2ZXIgaGFwcGVuIik7cmV0dXJuW3QsQXJyYXkuZnJvbSh0LmNoaWxkTm9kZXMpLmluZGV4T2YoZSldfWZ1bmN0aW9uIGdTKGUpe2xldCB0PXt9O2U9ZS5zcGxpdCgiOyIpO2ZvcihsZXQgbiBvZiBlKWlmKG4hPT0iIil7bGV0W3Isb109bi5zcGxpdCgvOihbXl0rKS8pO3Rbci50cmltKCldPW8udHJpbSgpfXJldHVybiB0fWZ1bmN0aW9uIGpjKGUpe2xldCB0PUljLmdldChlKTtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9Z1MoZSksSWMuc2V0KGUsdCkpLHR9ZnVuY3Rpb24gRzIoZSl7bGV0IHQ9IiI7Zm9yKGxldCBuIGluIGUpbiYmKHQrPWAke259OiAke2Vbbl19O2ApO3JldHVybiB0fWZ1bmN0aW9uIElpKGUsdCl7dmFyIG49amMoImdldFN0eWxlImluIGU/ZS5nZXRTdHlsZSgpOmUuc3R5bGUpO3Q9T2JqZWN0LmVudHJpZXModCkucmVkdWNlKChyLFtvLGldKT0+KGk9PT1udWxsP2RlbGV0ZSByW29dOnJbb109aSxyKSx7Li4ubn0pLG49RzIodCksZS5zZXRTdHlsZShuKSxJYy5zZXQobix0KX1mdW5jdGlvbiBtUyhlLHQpe3ZhciBuPWUuZ2V0Tm9kZXMoKSxyPW4ubGVuZ3RoO2lmKGllLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihlKSl7Zm9yKHZhciBvPWllLiRjcmVhdGVSYW5nZVNlbGVjdGlvbigpLGk9by5hbmNob3IsbD1vLmZvY3VzLHM9MDtzPHI7cysrKXt2YXIgYT1uW3NdO2llLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKGEpJiYoaS5zZXQoYS5nZXRLZXkoKSwwLCJlbGVtZW50IiksbC5zZXQoYS5nZXRLZXkoKSxhLmdldENoaWxkcmVuU2l6ZSgpLCJlbGVtZW50IiksbVMoaWUuJG5vcm1hbGl6ZVNlbGVjdGlvbl9fRVhQRVJJTUVOVEFMKG8pLHQpKX1pZS4kc2V0U2VsZWN0aW9uKGUpfWVsc2UgaWYoLS1yLG89blswXSxpPW5bcl0sZS5pc0NvbGxhcHNlZCgpKUlpKGUsdCk7ZWxzZXt2YXIgdT1lLmFuY2hvcixjPWUuZm9jdXM7cz1vLmdldFRleHRDb250ZW50KCkubGVuZ3RoLGE9Yy5vZmZzZXQ7dmFyIGQ9dS5vZmZzZXQsZj11LmlzQmVmb3JlKGMpO2w9Zj9kOmEsZT1mP2E6ZDt2YXIgaD1mP3UudHlwZTpjLnR5cGUsZz1mP2MudHlwZTp1LnR5cGU7aWYodT1mP2Mua2V5OnUua2V5LGllLiRpc1RleHROb2RlKG8pJiZsPT09cyYmKGM9by5nZXROZXh0U2libGluZygpLGllLiRpc1RleHROb2RlKGMpJiYobD1kPTAsbz1jKSksbi5sZW5ndGg9PT0xKWllLiRpc1RleHROb2RlKG8pJiYobD1oPT09ImVsZW1lbnQiPzA6ZD5hP2E6ZCxlPWc9PT0iZWxlbWVudCI/czpkPmE/ZDphLGwhPT1lJiYobD09PTAmJmU9PT1zPyhJaShvLHQpLG8uc2VsZWN0KGwsZSkpOihuPW8uc3BsaXRUZXh0KGwsZSksbj1sPT09MD9uWzBdOm5bMV0sSWkobix0KSxuLnNlbGVjdCgwLGUtbCkpKSk7ZWxzZSBmb3IoaWUuJGlzVGV4dE5vZGUobykmJmw8by5nZXRUZXh0Q29udGVudFNpemUoKSYmKGwhPT0wJiYobz1vLnNwbGl0VGV4dChsKVsxXSksSWkobyx0KSksaWUuJGlzVGV4dE5vZGUoaSkmJihsPWkuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGgsaS5fX2tleSE9PXUmJmUhPT0wJiYoZT1sKSxlIT09bCYmKFtpXT1pLnNwbGl0VGV4dChlKSksZSE9PTAmJklpKGksdCkpLGU9MTtlPHI7ZSsrKWw9bltlXSxzPWwuZ2V0S2V5KCksaWUuJGlzVGV4dE5vZGUobCkmJnMhPT1vLmdldEtleSgpJiZzIT09aS5nZXRLZXkoKSYmIWwuaXNUb2tlbigpJiZJaShsLHQpfX1mdW5jdGlvbiBZMihlKXtmb3IoO2UhPT1udWxsJiYhaWUuJGlzUm9vdE9yU2hhZG93Um9vdChlKTspe2xldCB0PWUuZ2V0TGF0ZXN0KCksbj1lLmdldFBhcmVudCgpO3QuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wJiZlLnJlbW92ZSghMCksZT1ufX1mdW5jdGlvbiBOZihlLHQsbixyLG89bnVsbCl7aWYodC5sZW5ndGghPT0wKXt2YXIgaT10WzBdLGw9bmV3IE1hcCxzPVtdO2k9aWUuJGlzRWxlbWVudE5vZGUoaSk/aTppLmdldFBhcmVudE9yVGhyb3coKSxpLmlzSW5saW5lKCkmJihpPWkuZ2V0UGFyZW50T3JUaHJvdygpKTtmb3IodmFyIGE9ITE7aSE9PW51bGw7KXt2YXIgdT1pLmdldFByZXZpb3VzU2libGluZygpO2lmKHUhPT1udWxsKXtpPXUsYT0hMDticmVha31pZihpPWkuZ2V0UGFyZW50T3JUaHJvdygpLGllLiRpc1Jvb3RPclNoYWRvd1Jvb3QoaSkpYnJlYWt9dT1uZXcgU2V0O2Zvcih2YXIgYz0wO2M8bjtjKyspe3ZhciBkPXRbY107aWUuJGlzRWxlbWVudE5vZGUoZCkmJmQuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wJiZ1LmFkZChkLmdldEtleSgpKX12YXIgZj1uZXcgU2V0O2ZvcihjPTA7YzxuO2MrKyl7ZD10W2NdO3ZhciBoPWQuZ2V0UGFyZW50KCk7aWYoaCE9PW51bGwmJmguaXNJbmxpbmUoKSYmKGg9aC5nZXRQYXJlbnQoKSksaCE9PW51bGwmJmllLiRpc0xlYWZOb2RlKGQpJiYhZi5oYXMoZC5nZXRLZXkoKSkpe2lmKGQ9aC5nZXRLZXkoKSxsLmdldChkKT09PXZvaWQgMCl7bGV0IGc9cigpO2cuc2V0Rm9ybWF0KGguZ2V0Rm9ybWF0VHlwZSgpKSxnLnNldEluZGVudChoLmdldEluZGVudCgpKSxzLnB1c2goZyksbC5zZXQoZCxnKSxoLmdldENoaWxkcmVuKCkuZm9yRWFjaChtPT57Zy5hcHBlbmQobSksZi5hZGQobS5nZXRLZXkoKSksaWUuJGlzRWxlbWVudE5vZGUobSkmJm0uZ2V0Q2hpbGRyZW5LZXlzKCkuZm9yRWFjaChfPT5mLmFkZChfKSl9KSxZMihoKX19ZWxzZSB1LmhhcyhkLmdldEtleSgpKSYmKGg9cigpLGguc2V0Rm9ybWF0KGQuZ2V0Rm9ybWF0VHlwZSgpKSxoLnNldEluZGVudChkLmdldEluZGVudCgpKSxzLnB1c2goaCksZC5yZW1vdmUoITApKX1pZihvIT09bnVsbClmb3IodD0wO3Q8cy5sZW5ndGg7dCsrKW8uYXBwZW5kKHNbdF0pO2lmKHQ9bnVsbCxpZS4kaXNSb290T3JTaGFkb3dSb290KGkpKWlmKGEpaWYobyE9PW51bGwpaS5pbnNlcnRBZnRlcihvKTtlbHNlIGZvcihvPXMubGVuZ3RoLTE7MDw9bztvLS0paS5pbnNlcnRBZnRlcihzW29dKTtlbHNlIGlmKGE9aS5nZXRGaXJzdENoaWxkKCksaWUuJGlzRWxlbWVudE5vZGUoYSkmJihpPWEpLGE9PT1udWxsKWlmKG8paS5hcHBlbmQobyk7ZWxzZSBmb3Iobz0wO288cy5sZW5ndGg7bysrKWE9c1tvXSxpLmFwcGVuZChhKSx0PWE7ZWxzZSBpZihvIT09bnVsbClhLmluc2VydEJlZm9yZShvKTtlbHNlIGZvcihpPTA7aTxzLmxlbmd0aDtpKyspbz1zW2ldLGEuaW5zZXJ0QmVmb3JlKG8pLHQ9bztlbHNlIGlmKG8paS5pbnNlcnRBZnRlcihvKTtlbHNlIGZvcihvPXMubGVuZ3RoLTE7MDw9bztvLS0pYT1zW29dLGkuaW5zZXJ0QWZ0ZXIoYSksdD1hO3M9aWUuJGdldFByZXZpb3VzU2VsZWN0aW9uKCksaWUuJGlzUmFuZ2VTZWxlY3Rpb24ocykmJnMuYW5jaG9yLmdldE5vZGUoKS5pc0F0dGFjaGVkKCkmJnMuZm9jdXMuZ2V0Tm9kZSgpLmlzQXR0YWNoZWQoKT9pZS4kc2V0U2VsZWN0aW9uKHMuY2xvbmUoKSk6dCE9PW51bGw/dC5zZWxlY3RFbmQoKTplLmRpcnR5PSEwfX1mdW5jdGlvbiB2UyhlLHQsbixyKXtlLm1vZGlmeSh0PyJleHRlbmQiOiJtb3ZlIixuLHIpfWZ1bmN0aW9uIHlTKGUpe3JldHVybiBlPWUuYW5jaG9yLmdldE5vZGUoKSwoaWUuJGlzUm9vdE5vZGUoZSk/ZTplLmdldFBhcmVudE9yVGhyb3coKSkuZ2V0RGlyZWN0aW9uKCk9PT0icnRsIn1QdC4kYWRkTm9kZVN0eWxlPWZ1bmN0aW9uKGUpe2U9ZS5nZXRTdHlsZSgpO2xldCB0PWdTKGUpO0ljLnNldChlLHQpfTtQdC4kY2xvbmVXaXRoUHJvcGVydGllcz1mdW5jdGlvbihlKXtsZXQgdD1lLmNvbnN0cnVjdG9yLmNsb25lKGUpO3JldHVybiB0Ll9fcGFyZW50PWUuX19wYXJlbnQsdC5fX25leHQ9ZS5fX25leHQsdC5fX3ByZXY9ZS5fX3ByZXYsaWUuJGlzRWxlbWVudE5vZGUoZSkmJmllLiRpc0VsZW1lbnROb2RlKHQpPyh0Ll9fZmlyc3Q9ZS5fX2ZpcnN0LHQuX19sYXN0PWUuX19sYXN0LHQuX19zaXplPWUuX19zaXplLHQuX19mb3JtYXQ9ZS5fX2Zvcm1hdCx0Ll9faW5kZW50PWUuX19pbmRlbnQsdC5fX2Rpcj1lLl9fZGlyLHQpOihpZS4kaXNUZXh0Tm9kZShlKSYmaWUuJGlzVGV4dE5vZGUodCkmJih0Ll9fZm9ybWF0PWUuX19mb3JtYXQsdC5fX3N0eWxlPWUuX19zdHlsZSx0Ll9fbW9kZT1lLl9fbW9kZSx0Ll9fZGV0YWlsPWUuX19kZXRhaWwpLHQpfTtQdC4kZ2V0U2VsZWN0aW9uU3R5bGVWYWx1ZUZvclByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuPSIiKXtsZXQgcj1udWxsLG89ZS5nZXROb2RlcygpO3ZhciBpPWUuYW5jaG9yLGw9ZS5mb2N1cyxzPWUuaXNCYWNrd2FyZCgpO2xldCBhPXM/bC5vZmZzZXQ6aS5vZmZzZXQ7aWYoaT1zP2wuZ2V0Tm9kZSgpOmkuZ2V0Tm9kZSgpLGUuc3R5bGUhPT0iIiYmKGU9amMoZS5zdHlsZSksZSE9PW51bGwmJnQgaW4gZSkpcmV0dXJuIGVbdF07Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyl7dmFyIHU9b1tlXTtpZigoZT09PTB8fGEhPT0wfHwhdS5pcyhpKSkmJmllLiRpc1RleHROb2RlKHUpKXtpZihsPXQscz1uLHU9dS5nZXRTdHlsZSgpLHU9amModSksbD11IT09bnVsbCYmdVtsXXx8cyxyPT09bnVsbClyPWw7ZWxzZSBpZihyIT09bCl7cj0iIjticmVha319fXJldHVybiByPT09bnVsbD9uOnJ9O1B0LiRpc0F0Tm9kZUVuZD1mdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09InRleHQiP2Uub2Zmc2V0PT09ZS5nZXROb2RlKCkuZ2V0VGV4dENvbnRlbnRTaXplKCk6ZS5vZmZzZXQ9PT1lLmdldE5vZGUoKS5nZXRDaGlsZHJlblNpemUoKX07UHQuJGlzUGFyZW50RWxlbWVudFJUTD15UztQdC4kbW92ZUNhcmV0U2VsZWN0aW9uPXZTO1B0LiRtb3ZlQ2hhcmFjdGVyPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj15UyhlKTt2UyhlLHQsbj8hcjpyLCJjaGFyYWN0ZXIiKX07UHQuJHBhdGNoU3R5bGVUZXh0PW1TO1B0LiRzZWxlY3RBbGw9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5hbmNob3I7ZT1lLmZvY3VzO3ZhciBuPXQuZ2V0Tm9kZSgpLmdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKS5nZXRQYXJlbnRPclRocm93KCk7bGV0IHI9bi5nZXRGaXJzdERlc2NlbmRhbnQoKTtuPW4uZ2V0TGFzdERlc2NlbmRhbnQoKTtsZXQgbz0iZWxlbWVudCIsaT0iZWxlbWVudCIsbD0wO2llLiRpc1RleHROb2RlKHIpP289InRleHQiOmllLiRpc0VsZW1lbnROb2RlKHIpfHxyPT09bnVsbHx8KHI9ci5nZXRQYXJlbnRPclRocm93KCkpLGllLiRpc1RleHROb2RlKG4pPyhpPSJ0ZXh0IixsPW4uZ2V0VGV4dENvbnRlbnRTaXplKCkpOmllLiRpc0VsZW1lbnROb2RlKG4pfHxuPT09bnVsbHx8KG49bi5nZXRQYXJlbnRPclRocm93KCkpLHImJm4mJih0LnNldChyLmdldEtleSgpLDAsbyksZS5zZXQobi5nZXRLZXkoKSxsLGkpKX07UHQuJHNldEJsb2Nrc1R5cGU9ZnVuY3Rpb24oZSx0KXtpZihlLmFuY2hvci5rZXk9PT0icm9vdCIpe3Q9dCgpO3ZhciBuPWllLiRnZXRSb290KCk7KGU9bi5nZXRGaXJzdENoaWxkKCkpP2UucmVwbGFjZSh0LCEwKTpuLmFwcGVuZCh0KX1lbHNlIGZvcihuPWUuZ2V0Tm9kZXMoKSxlPWUuYW5jaG9yLmdldE5vZGUoKS5nZXRQYXJlbnRPclRocm93KCksbi5pbmRleE9mKGUpPT09LTEmJm4ucHVzaChlKSxlLmlzSW5saW5lKCkmJihlPWUuZ2V0UGFyZW50T3JUaHJvdygpLG4uaW5kZXhPZihlKT09PS0xJiZuLnB1c2goZSkpLGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9bltlXTt2YXIgcj1pO2lmKCFpZS4kaXNFbGVtZW50Tm9kZShyKXx8aWUuJGlzUm9vdE9yU2hhZG93Um9vdChyKSlyPSExO2Vsc2V7dmFyIG89ci5nZXRGaXJzdENoaWxkKCk7bz1vPT09bnVsbHx8aWUuJGlzTGluZUJyZWFrTm9kZShvKXx8aWUuJGlzVGV4dE5vZGUobyl8fG8uaXNJbmxpbmUoKSxyPSFyLmlzSW5saW5lKCkmJnIuY2FuQmVFbXB0eSgpIT09ITEmJm99ciYmKHI9dCgpLHIuc2V0Rm9ybWF0KGkuZ2V0Rm9ybWF0VHlwZSgpKSxyLnNldEluZGVudChpLmdldEluZGVudCgpKSxpLnJlcGxhY2UociwhMCkpfX07UHQuJHNob3VsZE92ZXJyaWRlRGVmYXVsdENoYXJhY3RlclNlbGVjdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiBlPWllLiRnZXRBZGphY2VudE5vZGUoZS5mb2N1cyx0KSxpZS4kaXNEZWNvcmF0b3JOb2RlKGUpJiYhZS5pc0lzb2xhdGVkKCl8fGllLiRpc0VsZW1lbnROb2RlKGUpJiYhZS5pc0lubGluZSgpJiYhZS5jYW5CZUVtcHR5KCl9O1B0LiRzbGljZVNlbGVjdGVkVGV4dE5vZGVDb250ZW50PWZ1bmN0aW9uKGUsdCl7aWYodC5pc1NlbGVjdGVkKCkmJiF0LmlzU2VnbWVudGVkKCkmJiF0LmlzVG9rZW4oKSYmKGllLiRpc1JhbmdlU2VsZWN0aW9uKGUpfHxpZS5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb24oZSkpKXt2YXIgbj1lLmFuY2hvci5nZXROb2RlKCkscj1lLmZvY3VzLmdldE5vZGUoKSxvPXQuaXMobiksaT10LmlzKHIpO2lmKG98fGkpe289ZS5pc0JhY2t3YXJkKCk7bGV0W2wsc109ZS5nZXRDaGFyYWN0ZXJPZmZzZXRzKCk7ZT1uLmlzKHIpLGk9dC5pcyhvP3I6bikscj10LmlzKG8/bjpyKSxuPTA7bGV0IGE7ZT8obj1sPnM/czpsLGE9bD5zP2w6cyk6aT8obj1vP3M6bCxhPXZvaWQgMCk6ciYmKG89bz9sOnMsbj0wLGE9byksdC5fX3RleHQ9dC5fX3RleHQuc2xpY2UobixhKX19cmV0dXJuIHR9O1B0LiR3cmFwTm9kZXM9ZnVuY3Rpb24oZSx0LG49bnVsbCl7dmFyIHI9ZS5nZXROb2RlcygpO2xldCBvPXIubGVuZ3RoO3ZhciBpPWUuYW5jaG9yO2lmKG89PT0wfHxvPT09MSYmaS50eXBlPT09ImVsZW1lbnQiJiZpLmdldE5vZGUoKS5nZXRDaGlsZHJlblNpemUoKT09PTApe2U9aS50eXBlPT09InRleHQiP2kuZ2V0Tm9kZSgpLmdldFBhcmVudE9yVGhyb3coKTppLmdldE5vZGUoKSxyPWUuZ2V0Q2hpbGRyZW4oKTtsZXQgcz10KCk7cy5zZXRGb3JtYXQoZS5nZXRGb3JtYXRUeXBlKCkpLHMuc2V0SW5kZW50KGUuZ2V0SW5kZW50KCkpLHIuZm9yRWFjaChhPT5zLmFwcGVuZChhKSksbiYmKHM9bi5hcHBlbmQocykpLGUucmVwbGFjZShzKX1lbHNle2k9bnVsbDt2YXIgbD1bXTtmb3IobGV0IHM9MDtzPG87cysrKXtsZXQgYT1yW3NdO2llLiRpc1Jvb3RPclNoYWRvd1Jvb3QoYSk/KE5mKGUsbCxsLmxlbmd0aCx0LG4pLGw9W10saT1hKTppPT09bnVsbHx8aSE9PW51bGwmJmllLiRoYXNBbmNlc3RvcihhLGkpP2wucHVzaChhKTooTmYoZSxsLGwubGVuZ3RoLHQsbiksbD1bYV0pfU5mKGUsbCxsLmxlbmd0aCx0LG4pfX07UHQuY3JlYXRlRE9NUmFuZ2U9ZnVuY3Rpb24oZSx0LG4scixvKXtsZXQgaT10LmdldEtleSgpLGw9ci5nZXRLZXkoKSxzPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksYT1lLmdldEVsZW1lbnRCeUtleShpKTtpZihlPWUuZ2V0RWxlbWVudEJ5S2V5KGwpLGllLiRpc1RleHROb2RlKHQpJiYoYT1LeShhKSksaWUuJGlzVGV4dE5vZGUocikmJihlPUt5KGUpKSx0PT09dm9pZCAwfHxyPT09dm9pZCAwfHxhPT09bnVsbHx8ZT09PW51bGwpcmV0dXJuIG51bGw7YS5ub2RlTmFtZT09PSJCUiImJihbYSxuXT1HeShhKSksZS5ub2RlTmFtZT09PSJCUiImJihbZSxvXT1HeShlKSksdD1hLmZpcnN0Q2hpbGQsYT09PWUmJnQhPW51bGwmJnQubm9kZU5hbWU9PT0iQlIiJiZuPT09MCYmbz09PTAmJihvPTEpO3RyeXtzLnNldFN0YXJ0KGEsbikscy5zZXRFbmQoZSxvKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4hcy5jb2xsYXBzZWR8fG49PT1vJiZpPT09bHx8KHMuc2V0U3RhcnQoZSxvKSxzLnNldEVuZChhLG4pKSxzfTtQdC5jcmVhdGVSZWN0c0Zyb21ET01SYW5nZT1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0Um9vdEVsZW1lbnQoKTtpZihuPT09bnVsbClyZXR1cm5bXTtlPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1nZXRDb21wdXRlZFN0eWxlKG4pLG49cGFyc2VGbG9hdChuLnBhZGRpbmdMZWZ0KStwYXJzZUZsb2F0KG4ucGFkZGluZ1JpZ2h0KSx0PUFycmF5LmZyb20odC5nZXRDbGllbnRSZWN0cygpKTtsZXQgcj10Lmxlbmd0aDt0LnNvcnQoKGksbCk9PntsZXQgcz1pLnRvcC1sLnRvcDtyZXR1cm4gMz49TWF0aC5hYnMocyk/aS5sZWZ0LWwubGVmdDpzfSk7bGV0IG87Zm9yKGxldCBpPTA7aTxyO2krKyl7bGV0IGw9dFtpXSxzPWwud2lkdGgrbj09PWUud2lkdGg7byYmby50b3A8PWwudG9wJiZvLnRvcCtvLmhlaWdodD5sLnRvcCYmby5sZWZ0K28ud2lkdGg+bC5sZWZ0fHxzPyh0LnNwbGljZShpLS0sMSksci0tKTpvPWx9cmV0dXJuIHR9O1B0LmdldFN0eWxlT2JqZWN0RnJvbUNTUz1qYztQdC50cmltVGV4dENvbnRlbnRGcm9tQW5jaG9yPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj10LmdldE5vZGUoKTtpZihpZS4kaXNFbGVtZW50Tm9kZShyKSl7dmFyIG89ci5nZXREZXNjZW5kYW50QnlJbmRleCh0Lm9mZnNldCk7byE9PW51bGwmJihyPW8pfWZvcig7MDxuJiZyIT09bnVsbDspe3ZhciBpPXIuZ2V0UHJldmlvdXNTaWJsaW5nKCksbD0wO2lmKGk9PT1udWxsKXtvPXIuZ2V0UGFyZW50T3JUaHJvdygpO2Zvcih2YXIgcz1vLmdldFByZXZpb3VzU2libGluZygpO3M9PT1udWxsOyl7aWYobz1vLmdldFBhcmVudCgpLG89PT1udWxsKXtpPW51bGw7YnJlYWt9cz1vLmdldFByZXZpb3VzU2libGluZygpfW8hPT1udWxsJiYobD1vLmlzSW5saW5lKCk/MDoyLGk9aWUuJGlzRWxlbWVudE5vZGUocyk/cy5nZXRMYXN0RGVzY2VuZGFudCgpOnMpfWlmKHM9ci5nZXRUZXh0Q29udGVudCgpLHM9PT0iIiYmaWUuJGlzRWxlbWVudE5vZGUocikmJiFyLmlzSW5saW5lKCkmJihzPWAKCmApLG89cy5sZW5ndGgsIWllLiRpc1RleHROb2RlKHIpfHxuPj1vKXM9ci5nZXRQYXJlbnQoKSxyLnJlbW92ZSgpLHM9PW51bGx8fHMuZ2V0Q2hpbGRyZW5TaXplKCkhPT0wfHxpZS4kaXNSb290Tm9kZShzKXx8cy5yZW1vdmUoKSxuLT1vK2wscj1pO2Vsc2V7bGV0IGE9ci5nZXRLZXkoKTtsPWUuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpPT57Y29uc3QgYz1pZS4kZ2V0Tm9kZUJ5S2V5KGEpO3JldHVybiBpZS4kaXNUZXh0Tm9kZShjKSYmYy5pc1NpbXBsZVRleHQoKT9jLmdldFRleHRDb250ZW50KCk6bnVsbH0pLGk9by1uO2xldCB1PXMuc2xpY2UoMCxpKTtsIT09bnVsbCYmbCE9PXM/KG49aWUuJGdldFByZXZpb3VzU2VsZWN0aW9uKCksbz1yLHIuaXNTaW1wbGVUZXh0KCk/ci5zZXRUZXh0Q29udGVudChsKToobz1pZS4kY3JlYXRlVGV4dE5vZGUobCksci5yZXBsYWNlKG8pKSxpZS4kaXNSYW5nZVNlbGVjdGlvbihuKSYmbi5pc0NvbGxhcHNlZCgpJiYobj1uLmFuY2hvci5vZmZzZXQsby5zZWxlY3QobixuKSkpOnIuaXNTaW1wbGVUZXh0KCk/KGw9dC5rZXk9PT1hLHM9dC5vZmZzZXQsczxuJiYocz1vKSxuPWw/cy1uOjAsbz1sP3M6aSxsJiZuPT09MD8oW25dPXIuc3BsaXRUZXh0KG4sbyksbi5yZW1vdmUoKSk6KFssbl09ci5zcGxpdFRleHQobixvKSxuLnJlbW92ZSgpKSk6KG49aWUuJGNyZWF0ZVRleHROb2RlKHUpLHIucmVwbGFjZShuKSksbj0wfX19O2NvbnN0IFgyPVB0O3ZhciBEbz1YMixRMj1EbyxkdD1oZTtmdW5jdGlvbiBKMihlKXtsZXQgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO3QuYXBwZW5kKCJjb2RlIixlKTtmb3IobGV0IG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXQuYXBwZW5kKCJ2Iixhcmd1bWVudHNbbl0pO3Rocm93IEVycm9yKGBNaW5pZmllZCBMZXhpY2FsIGVycm9yICMke2V9OyB2aXNpdCBodHRwczovL2xleGljYWwuZGV2L2RvY3MvZXJyb3I/JHt0fSBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuYCl9ZnVuY3Rpb24geFMoZSx0KXtmb3IobGV0IG4gb2YgdClpZihlLnR5cGUuc3RhcnRzV2l0aChuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB3UyhlLHQpe2Zvcig7ZSE9PWR0LiRnZXRSb290KCkmJmUhPW51bGw7KXtpZih0KGUpKXJldHVybiBlO2U9ZS5nZXRQYXJlbnQoKX1yZXR1cm4gbnVsbH1ndC4kc3BsaXROb2RlPWR0LiRzcGxpdE5vZGU7Z3QuaXNIVE1MQW5jaG9yRWxlbWVudD1kdC5pc0hUTUxBbmNob3JFbGVtZW50O2d0LmlzSFRNTEVsZW1lbnQ9ZHQuaXNIVE1MRWxlbWVudDtndC4kZGZzPWZ1bmN0aW9uKGUsdCl7bGV0IG49W107ZT0oZXx8ZHQuJGdldFJvb3QoKSkuZ2V0TGF0ZXN0KCksdD10fHwoZHQuJGlzRWxlbWVudE5vZGUoZSk/ZS5nZXRMYXN0RGVzY2VuZGFudCgpOmUpO2Zvcih2YXIgcj1lLG89MDsocj1yLmdldFBhcmVudCgpKSE9PW51bGw7KW8rKztmb3Iocj1vO2UhPT1udWxsJiYhZS5pcyh0KTspaWYobi5wdXNoKHtkZXB0aDpyLG5vZGU6ZX0pLGR0LiRpc0VsZW1lbnROb2RlKGUpJiYwPGUuZ2V0Q2hpbGRyZW5TaXplKCkpZT1lLmdldEZpcnN0Q2hpbGQoKSxyKys7ZWxzZSBmb3Iobz1udWxsO289PT1udWxsJiZlIT09bnVsbDspbz1lLmdldE5leHRTaWJsaW5nKCksbz09PW51bGw/KGU9ZS5nZXRQYXJlbnQoKSxyLS0pOmU9bztyZXR1cm4gZSE9PW51bGwmJmUuaXModCkmJm4ucHVzaCh7ZGVwdGg6cixub2RlOmV9KSxufTtndC4kZmlsdGVyPWZ1bmN0aW9uKGUsdCl7bGV0IG49W107Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldCBvPXQoZVtyXSk7byE9PW51bGwmJm4ucHVzaChvKX1yZXR1cm4gbn07Z3QuJGZpbmRNYXRjaGluZ1BhcmVudD13UztndC4kZ2V0TmVhcmVzdEJsb2NrRWxlbWVudEFuY2VzdG9yT3JUaHJvdz1mdW5jdGlvbihlKXtsZXQgdD13UyhlLG49PmR0LiRpc0VsZW1lbnROb2RlKG4pJiYhbi5pc0lubGluZSgpKTtyZXR1cm4gZHQuJGlzRWxlbWVudE5vZGUodCl8fEoyKDQsZS5fX2tleSksdH07Z3QuJGdldE5lYXJlc3ROb2RlT2ZUeXBlPWZ1bmN0aW9uKGUsdCl7Zm9yKDtlIT1udWxsOyl7aWYoZSBpbnN0YW5jZW9mIHQpcmV0dXJuIGU7ZT1lLmdldFBhcmVudCgpfXJldHVybiBudWxsfTtndC4kaW5zZXJ0Rmlyc3Q9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmdldEZpcnN0Q2hpbGQoKTtuIT09bnVsbD9uLmluc2VydEJlZm9yZSh0KTplLmFwcGVuZCh0KX07Z3QuJGluc2VydE5vZGVUb05lYXJlc3RSb290PWZ1bmN0aW9uKGUpe3ZhciB0PWR0LiRnZXRTZWxlY3Rpb24oKXx8ZHQuJGdldFByZXZpb3VzU2VsZWN0aW9uKCk7aWYoZHQuJGlzUmFuZ2VTZWxlY3Rpb24odCkpe3Zhcntmb2N1czpufT10O2lmKHQ9bi5nZXROb2RlKCksbj1uLm9mZnNldCxkdC4kaXNSb290T3JTaGFkb3dSb290KHQpKW49dC5nZXRDaGlsZEF0SW5kZXgobiksbj09bnVsbD90LmFwcGVuZChlKTpuLmluc2VydEJlZm9yZShlKSxlLnNlbGVjdE5leHQoKTtlbHNle2xldCByLG87ZHQuJGlzVGV4dE5vZGUodCk/KHI9dC5nZXRQYXJlbnRPclRocm93KCksbz10LmdldEluZGV4V2l0aGluUGFyZW50KCksMDxuJiYobys9MSx0LnNwbGl0VGV4dChuKSkpOihyPXQsbz1uKSxbLHRdPWR0LiRzcGxpdE5vZGUocixvKSx0Lmluc2VydEJlZm9yZShlKSx0LnNlbGVjdFN0YXJ0KCl9fWVsc2UgZHQuJGlzTm9kZVNlbGVjdGlvbih0KXx8ZHQuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKHQpPyh0PXQuZ2V0Tm9kZXMoKSx0W3QubGVuZ3RoLTFdLmdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKS5pbnNlcnRBZnRlcihlKSk6ZHQuJGdldFJvb3QoKS5hcHBlbmQoZSksdD1kdC4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpLGUuaW5zZXJ0QWZ0ZXIodCksdC5zZWxlY3QoKTtyZXR1cm4gZS5nZXRMYXRlc3QoKX07Z3QuJHJlc3RvcmVFZGl0b3JTdGF0ZT1mdW5jdGlvbihlLHQpe2xldCBuPW5ldyBNYXAscj1lLl9wZW5kaW5nRWRpdG9yU3RhdGU7Zm9yKGxldFtvLGldb2YgdC5fbm9kZU1hcCl7bGV0IGw9UTIuJGNsb25lV2l0aFByb3BlcnRpZXMoaSk7ZHQuJGlzVGV4dE5vZGUobCkmJihsLl9fdGV4dD1pLl9fdGV4dCksbi5zZXQobyxsKX1yJiYoci5fbm9kZU1hcD1uKSxlLl9kaXJ0eVR5cGU9MixlPXQuX3NlbGVjdGlvbixkdC4kc2V0U2VsZWN0aW9uKGU9PT1udWxsP251bGw6ZS5jbG9uZSgpKX07Z3QuJHdyYXBOb2RlSW5FbGVtZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dCgpLGUucmVwbGFjZSh0KSx0LmFwcGVuZChlKSx0fTtndC5hZGRDbGFzc05hbWVzVG9FbGVtZW50PWZ1bmN0aW9uKGUsLi4udCl7dC5mb3JFYWNoKG49Pnt0eXBlb2Ygbj09InN0cmluZyImJihuPW4uc3BsaXQoIiAiKS5maWx0ZXIocj0+ciE9PSIiKSxlLmNsYXNzTGlzdC5hZGQoLi4ubikpfSl9O2d0LmlzTWltZVR5cGU9eFM7Z3QubWVkaWFGaWxlUmVhZGVyPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZVtTeW1ib2wuaXRlcmF0b3JdKCk7cmV0dXJuIG5ldyBQcm9taXNlKChyLG8pPT57bGV0IGk9W10sbD0oKT0+e2NvbnN0e2RvbmU6cyx2YWx1ZTphfT1uLm5leHQoKTtpZihzKXJldHVybiByKGkpO2NvbnN0IHU9bmV3IEZpbGVSZWFkZXI7dS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsbyksdS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoKT0+e2NvbnN0IGM9dS5yZXN1bHQ7dHlwZW9mIGM9PSJzdHJpbmciJiZpLnB1c2goe2ZpbGU6YSxyZXN1bHQ6Y30pLGwoKX0pLHhTKGEsdCk/dS5yZWFkQXNEYXRhVVJMKGEpOmwoKX07bCgpfSl9O2d0Lm1lcmdlUmVnaXN0ZXI9ZnVuY3Rpb24oLi4uZSl7cmV0dXJuKCk9PntlLmZvckVhY2godD0+dCgpKX19O2d0Lm9iamVjdEtsYXNzRXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUhPT1udWxsP09iamVjdC5nZXRQcm90b3R5cGVPZihlKS5jb25zdHJ1Y3Rvci5uYW1lPT09dC5uYW1lOiExfTtndC5yZWdpc3Rlck5lc3RlZEVsZW1lbnRSZXNvbHZlcj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5yZWdpc3Rlck5vZGVUcmFuc2Zvcm0odCxvPT57ZTp7Zm9yKHZhciBpPW8uZ2V0Q2hpbGRyZW4oKSxsPTA7bDxpLmxlbmd0aDtsKyspaWYoaVtsXWluc3RhbmNlb2YgdCl7aT1udWxsO2JyZWFrIGV9Zm9yKGk9bztpIT09bnVsbDspaWYobD1pLGk9aS5nZXRQYXJlbnQoKSxpIGluc3RhbmNlb2YgdCl7aT17Y2hpbGQ6bCxwYXJlbnQ6aX07YnJlYWsgZX1pPW51bGx9aWYoaSE9PW51bGwpe2NvbnN0e2NoaWxkOnMscGFyZW50OmF9PWk7aWYocy5pcyhvKSl7aWYocihhLG8pLG89cy5nZXROZXh0U2libGluZ3MoKSxpPW8ubGVuZ3RoLGEuaW5zZXJ0QWZ0ZXIocyksaSE9PTApe2w9bihhKSxzLmluc2VydEFmdGVyKGwpO2ZvcihsZXQgdT0wO3U8aTt1KyspbC5hcHBlbmQob1t1XSl9YS5jYW5CZUVtcHR5KCl8fGEuZ2V0Q2hpbGRyZW5TaXplKCkhPT0wfHxhLnJlbW92ZSgpfX19KX07Z3QucmVtb3ZlQ2xhc3NOYW1lc0Zyb21FbGVtZW50PWZ1bmN0aW9uKGUsLi4udCl7dC5mb3JFYWNoKG49Pnt0eXBlb2Ygbj09InN0cmluZyImJmUuY2xhc3NMaXN0LnJlbW92ZSguLi5uLnNwbGl0KCIgIikpfSl9O2NvbnN0IFoyPWd0O3ZhciBOdD1aMixQZT1oZSxJbz1OdDtmdW5jdGlvbiBSbChlKXtsZXQgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO3QuYXBwZW5kKCJjb2RlIixlKTtmb3IobGV0IG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXQuYXBwZW5kKCJ2Iixhcmd1bWVudHNbbl0pO3Rocm93IEVycm9yKGBNaW5pZmllZCBMZXhpY2FsIGVycm9yICMke2V9OyB2aXNpdCBodHRwczovL2xleGljYWwuZGV2L2RvY3MvZXJyb3I/JHt0fSBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuYCl9ZnVuY3Rpb24gX1MoZSl7bGV0IHQ9MTtmb3IoZT1lLmdldFBhcmVudCgpO2UhPW51bGw7KXtpZihldChlKSl7aWYoZT1lLmdldFBhcmVudCgpLHdlKGUpKXt0KyssZT1lLmdldFBhcmVudCgpO2NvbnRpbnVlfVJsKDQwKX1icmVha31yZXR1cm4gdH1mdW5jdGlvbiBtcChlKXtlPWUuZ2V0UGFyZW50KCksd2UoZSl8fFJsKDQwKTtsZXQgdD1lO2Zvcig7dCE9PW51bGw7KXQ9dC5nZXRQYXJlbnQoKSx3ZSh0KSYmKGU9dCk7cmV0dXJuIGV9ZnVuY3Rpb24gU1MoZSl7bGV0IHQ9W107ZT1lLmdldENoaWxkcmVuKCkuZmlsdGVyKGV0KTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXSxvPXIuZ2V0Rmlyc3RDaGlsZCgpO3dlKG8pP3Q9dC5jb25jYXQoU1MobykpOnQucHVzaChyKX1yZXR1cm4gdH1mdW5jdGlvbiBmcihlKXtyZXR1cm4gZXQoZSkmJndlKGUuZ2V0Rmlyc3RDaGlsZCgpKX1mdW5jdGlvbiBxMihlKXtmb3IoO2UuZ2V0TmV4dFNpYmxpbmcoKT09bnVsbCYmZS5nZXRQcmV2aW91c1NpYmxpbmcoKT09bnVsbDspe2xldCB0PWUuZ2V0UGFyZW50KCk7aWYodD09bnVsbHx8IWV0KGUpJiYhd2UoZSkpYnJlYWs7ZT10fWUucmVtb3ZlKCl9ZnVuY3Rpb24gWXkoZSl7cmV0dXJuICRuKCkuYXBwZW5kKGUpfWZ1bmN0aW9uIEVTKGUsdCl7cmV0dXJuIGV0KGUpJiYodC5sZW5ndGg9PT0wfHx0Lmxlbmd0aD09PTEmJmUuaXModFswXSkmJmUuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wKX1mdW5jdGlvbiB5aShlLHQpe2Uuc3BsaWNlKGUuZ2V0Q2hpbGRyZW5TaXplKCksMCx0KX1mdW5jdGlvbiBYeShlLHQpe2lmKHdlKGUpKXJldHVybiBlO2xldCBuPWUuZ2V0UHJldmlvdXNTaWJsaW5nKCkscj1lLmdldE5leHRTaWJsaW5nKCksbz0kbigpO3JldHVybiBvLnNldEZvcm1hdChlLmdldEZvcm1hdFR5cGUoKSksby5zZXRJbmRlbnQoZS5nZXRJbmRlbnQoKSkseWkobyxlLmdldENoaWxkcmVuKCkpLHdlKG4pJiZ0PT09bi5nZXRMaXN0VHlwZSgpPyhuLmFwcGVuZChvKSxlLnJlbW92ZSgpLHdlKHIpJiZ0PT09ci5nZXRMaXN0VHlwZSgpJiYoeWkobixyLmdldENoaWxkcmVuKCkpLHIucmVtb3ZlKCkpLG4pOndlKHIpJiZ0PT09ci5nZXRMaXN0VHlwZSgpPyhyLmdldEZpcnN0Q2hpbGRPclRocm93KCkuaW5zZXJ0QmVmb3JlKG8pLGUucmVtb3ZlKCkscik6KHQ9b24odCksdC5hcHBlbmQobyksZS5yZXBsYWNlKHQpLFp0KHQpLHQpfWZ1bmN0aW9uIENTKGUsdCl7dmFyIG49ZS5nZXRMYXN0Q2hpbGQoKTtsZXQgcj10LmdldEZpcnN0Q2hpbGQoKTtuJiZyJiZmcihuKSYmZnIocikmJihDUyhuLmdldEZpcnN0Q2hpbGQoKSxyLmdldEZpcnN0Q2hpbGQoKSksci5yZW1vdmUoKSksbj10LmdldENoaWxkcmVuKCksMDxuLmxlbmd0aCYmKGUuYXBwZW5kKC4uLm4pLFp0KGUpKSx0LnJlbW92ZSgpfWZ1bmN0aW9uIFp0KGUsdCl7aWYoZT10fHxlLmdldENoaWxkcmVuKCksZSE9PXZvaWQgMClmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgaT1lW3RdO2lmKGV0KGkpKXtsZXQgbD1pLmdldFZhbHVlKCk7dmFyIG49aSxyPW4uZ2V0UGFyZW50KCksbz0xO2ZvcihyIT1udWxsJiYod2Uocik/bz1yLmdldFN0YXJ0KCk6UmwoNDQpKSxuPW4uZ2V0UHJldmlvdXNTaWJsaW5ncygpLHI9MDtyPG4ubGVuZ3RoO3IrKyl7bGV0IHM9bltyXTtldChzKSYmIXdlKHMuZ2V0Rmlyc3RDaGlsZCgpKSYmbysrfWwhPT1vJiZpLnNldFZhbHVlKG8pfX19ZnVuY3Rpb24gZVIoZSl7aWYoIWZyKGUpKXt2YXIgdD1lLmdldFBhcmVudCgpLG49dD90LmdldFBhcmVudCgpOnZvaWQgMCxyPW4/bi5nZXRQYXJlbnQoKTp2b2lkIDA7aWYod2UocikmJmV0KG4pJiZ3ZSh0KSl7dmFyIG89dD90LmdldEZpcnN0Q2hpbGQoKTp2b2lkIDAsaT10P3QuZ2V0TGFzdENoaWxkKCk6dm9pZCAwO2lmKGUuaXMobykpbi5pbnNlcnRCZWZvcmUoZSksdC5pc0VtcHR5KCkmJm4ucmVtb3ZlKCk7ZWxzZSBpZihlLmlzKGkpKW4uaW5zZXJ0QWZ0ZXIoZSksdC5pc0VtcHR5KCkmJm4ucmVtb3ZlKCk7ZWxzZXt2YXIgbD10LmdldExpc3RUeXBlKCk7bz0kbigpO2xldCBzPW9uKGwpO28uYXBwZW5kKHMpLGUuZ2V0UHJldmlvdXNTaWJsaW5ncygpLmZvckVhY2goYT0+cy5hcHBlbmQoYSkpLGk9JG4oKSxsPW9uKGwpLGkuYXBwZW5kKGwpLHlpKGwsZS5nZXROZXh0U2libGluZ3MoKSksbi5pbnNlcnRCZWZvcmUobyksbi5pbnNlcnRBZnRlcihpKSxuLnJlcGxhY2UoZSl9WnQodCksWnQocil9fX1sZXQgJGQ9Y2xhc3MgJFMgZXh0ZW5kcyBQZS5FbGVtZW50Tm9kZXtzdGF0aWMgZ2V0VHlwZSgpe3JldHVybiJsaXN0aXRlbSJ9c3RhdGljIGNsb25lKHQpe3JldHVybiBuZXcgJFModC5fX3ZhbHVlLHQuX19jaGVja2VkLHQuX19rZXkpfWNvbnN0cnVjdG9yKHQsbixyKXtzdXBlcihyKSx0aGlzLl9fdmFsdWU9dD09PXZvaWQgMD8xOnQsdGhpcy5fX2NoZWNrZWQ9bn1jcmVhdGVET00odCl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKSxyPXRoaXMuZ2V0UGFyZW50KCk7cmV0dXJuIHdlKHIpJiZyLmdldExpc3RUeXBlKCk9PT0iY2hlY2siJiZKeShuLHRoaXMsbnVsbCksbi52YWx1ZT10aGlzLl9fdmFsdWUsUXkobix0LnRoZW1lLHRoaXMpLG59dXBkYXRlRE9NKHQsbixyKXtsZXQgbz10aGlzLmdldFBhcmVudCgpO3JldHVybiB3ZShvKSYmby5nZXRMaXN0VHlwZSgpPT09ImNoZWNrIiYmSnkobix0aGlzLHQpLG4udmFsdWU9dGhpcy5fX3ZhbHVlLFF5KG4sci50aGVtZSx0aGlzKSwhMX1zdGF0aWMgdHJhbnNmb3JtKCl7cmV0dXJuIHQ9PntsZXQgbj10LmdldFBhcmVudCgpO3dlKG4pJiYoWnQobiksbi5nZXRMaXN0VHlwZSgpIT09ImNoZWNrIiYmdC5nZXRDaGVja2VkKCkhPW51bGwmJnQuc2V0Q2hlY2tlZCh2b2lkIDApKX19c3RhdGljIGltcG9ydERPTSgpe3JldHVybntsaTooKT0+KHtjb252ZXJzaW9uOnRSLHByaW9yaXR5OjB9KX19c3RhdGljIGltcG9ydEpTT04odCl7bGV0IG49JG4oKTtyZXR1cm4gbi5zZXRDaGVja2VkKHQuY2hlY2tlZCksbi5zZXRWYWx1ZSh0LnZhbHVlKSxuLnNldEZvcm1hdCh0LmZvcm1hdCksbi5zZXREaXJlY3Rpb24odC5kaXJlY3Rpb24pLG59ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksY2hlY2tlZDp0aGlzLmdldENoZWNrZWQoKSx0eXBlOiJsaXN0aXRlbSIsdmFsdWU6dGhpcy5nZXRWYWx1ZSgpLHZlcnNpb246MX19YXBwZW5kKC4uLnQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgcj10W25dO2lmKFBlLiRpc0VsZW1lbnROb2RlKHIpJiZ0aGlzLmNhbk1lcmdlV2l0aChyKSl7bGV0IG89ci5nZXRDaGlsZHJlbigpO3RoaXMuYXBwZW5kKC4uLm8pLHIucmVtb3ZlKCl9ZWxzZSBzdXBlci5hcHBlbmQocil9cmV0dXJuIHRoaXN9cmVwbGFjZSh0LG4pe2lmKGV0KHQpKXJldHVybiBzdXBlci5yZXBsYWNlKHQpO3RoaXMuc2V0SW5kZW50KDApO2xldCByPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpO2lmKCF3ZShyKSlyZXR1cm4gdDtpZihyLl9fZmlyc3Q9PT10aGlzLmdldEtleSgpKXIuaW5zZXJ0QmVmb3JlKHQpO2Vsc2UgaWYoci5fX2xhc3Q9PT10aGlzLmdldEtleSgpKXIuaW5zZXJ0QWZ0ZXIodCk7ZWxzZXtsZXQgbz1vbihyLmdldExpc3RUeXBlKCkpLGk9dGhpcy5nZXROZXh0U2libGluZygpO2Zvcig7aTspe2xldCBsPWk7aT1pLmdldE5leHRTaWJsaW5nKCksby5hcHBlbmQobCl9ci5pbnNlcnRBZnRlcih0KSx0Lmluc2VydEFmdGVyKG8pfXJldHVybiBuJiZ0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaChvPT57dC5hcHBlbmQobyl9KSx0aGlzLnJlbW92ZSgpLHIuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wJiZyLnJlbW92ZSgpLHR9aW5zZXJ0QWZ0ZXIodCxuPSEwKXt2YXIgcj10aGlzLmdldFBhcmVudE9yVGhyb3coKTt3ZShyKXx8UmwoMzkpO3ZhciBvPXRoaXMuZ2V0TmV4dFNpYmxpbmdzKCk7aWYoZXQodCkpcmV0dXJuIG49c3VwZXIuaW5zZXJ0QWZ0ZXIodCxuKSx0PXQuZ2V0UGFyZW50T3JUaHJvdygpLHdlKHQpJiZadCh0KSxuO2lmKHdlKHQpKXtmb3Iocj10LHQ9dC5nZXRDaGlsZHJlbigpLG89dC5sZW5ndGgtMTswPD1vO28tLSlyPXRbb10sdGhpcy5pbnNlcnRBZnRlcihyLG4pO3JldHVybiByfWlmKHIuaW5zZXJ0QWZ0ZXIodCxuKSxvLmxlbmd0aCE9PTApe2xldCBpPW9uKHIuZ2V0TGlzdFR5cGUoKSk7by5mb3JFYWNoKGw9PmkuYXBwZW5kKGwpKSx0Lmluc2VydEFmdGVyKGksbil9cmV0dXJuIHR9cmVtb3ZlKHQpe2xldCBuPXRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCkscj10aGlzLmdldE5leHRTaWJsaW5nKCk7c3VwZXIucmVtb3ZlKHQpLG4mJnImJmZyKG4pJiZmcihyKT8oQ1Mobi5nZXRGaXJzdENoaWxkKCksci5nZXRGaXJzdENoaWxkKCkpLHIucmVtb3ZlKCkpOnImJih0PXIuZ2V0UGFyZW50KCksd2UodCkmJlp0KHQpKX1pbnNlcnROZXdBZnRlcih0LG49ITApe3JldHVybiB0PSRuKHRoaXMuX19jaGVja2VkPT1udWxsP3ZvaWQgMDohMSksdGhpcy5pbnNlcnRBZnRlcih0LG4pLHR9Y29sbGFwc2VBdFN0YXJ0KHQpe2xldCBuPVBlLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk7dGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2gobD0+bi5hcHBlbmQobCkpO3ZhciByPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpLG89ci5nZXRQYXJlbnRPclRocm93KCk7bGV0IGk9ZXQobyk7cmV0dXJuIHIuZ2V0Q2hpbGRyZW5TaXplKCk9PT0xP2k/KHIucmVtb3ZlKCksby5zZWxlY3QoKSk6KHIuaW5zZXJ0QmVmb3JlKG4pLHIucmVtb3ZlKCkscj10LmFuY2hvcix0PXQuZm9jdXMsbz1uLmdldEtleSgpLHIudHlwZT09PSJlbGVtZW50IiYmci5nZXROb2RlKCkuaXModGhpcykmJnIuc2V0KG8sci5vZmZzZXQsImVsZW1lbnQiKSx0LnR5cGU9PT0iZWxlbWVudCImJnQuZ2V0Tm9kZSgpLmlzKHRoaXMpJiZ0LnNldChvLHQub2Zmc2V0LCJlbGVtZW50IikpOihyLmluc2VydEJlZm9yZShuKSx0aGlzLnJlbW92ZSgpKSwhMH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fdmFsdWV9c2V0VmFsdWUodCl7dGhpcy5nZXRXcml0YWJsZSgpLl9fdmFsdWU9dH1nZXRDaGVja2VkKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19jaGVja2VkfXNldENoZWNrZWQodCl7dGhpcy5nZXRXcml0YWJsZSgpLl9fY2hlY2tlZD10fXRvZ2dsZUNoZWNrZWQoKXt0aGlzLnNldENoZWNrZWQoIXRoaXMuX19jaGVja2VkKX1nZXRJbmRlbnQoKXt2YXIgdD10aGlzLmdldFBhcmVudCgpO2lmKHQ9PT1udWxsKXJldHVybiB0aGlzLmdldExhdGVzdCgpLl9faW5kZW50O3Q9dC5nZXRQYXJlbnRPclRocm93KCk7bGV0IG49MDtmb3IoO2V0KHQpOyl0PXQuZ2V0UGFyZW50T3JUaHJvdygpLmdldFBhcmVudE9yVGhyb3coKSxuKys7cmV0dXJuIG59c2V0SW5kZW50KHQpe3R5cGVvZiB0PT0ibnVtYmVyIiYmLTE8dHx8UmwoMTE3KTtsZXQgbj10aGlzLmdldEluZGVudCgpO2Zvcig7biE9PXQ7KWlmKG48dCl7ZTp7dmFyIHI9bmV3IFNldDtpZihmcih0aGlzKXx8ci5oYXModGhpcy5nZXRLZXkoKSkpYnJlYWsgZTtsZXQgcz10aGlzLmdldFBhcmVudCgpO3ZhciBvPXRoaXMuZ2V0TmV4dFNpYmxpbmcoKSxpPXRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCk7aWYoZnIobykmJmZyKGkpKXtpZihpPWkuZ2V0Rmlyc3RDaGlsZCgpLHdlKGkpKXtpLmFwcGVuZCh0aGlzKTt2YXIgbD1vLmdldEZpcnN0Q2hpbGQoKTt3ZShsKSYmKGw9bC5nZXRDaGlsZHJlbigpLHlpKGksbCksby5yZW1vdmUoKSxyLmFkZChvLmdldEtleSgpKSksWnQoaSl9fWVsc2UgZnIobyk/KG89by5nZXRGaXJzdENoaWxkKCksd2UobykmJihyPW8uZ2V0Rmlyc3RDaGlsZCgpLHIhPT1udWxsJiZyLmluc2VydEJlZm9yZSh0aGlzKSxadChvKSkpOmZyKGkpPyhvPWkuZ2V0Rmlyc3RDaGlsZCgpLHdlKG8pJiYoby5hcHBlbmQodGhpcyksWnQobykpKTp3ZShzKSYmKHI9JG4oKSxsPW9uKHMuZ2V0TGlzdFR5cGUoKSksci5hcHBlbmQobCksbC5hcHBlbmQodGhpcyksaT9pLmluc2VydEFmdGVyKHIpOm8/by5pbnNlcnRCZWZvcmUocik6cy5hcHBlbmQociksWnQobCkpO3dlKHMpJiZadChzKX1uKyt9ZWxzZSBlUih0aGlzKSxuLS07cmV0dXJuIHRoaXN9aW5zZXJ0QmVmb3JlKHQpe2lmKGV0KHQpKXtsZXQgbj10aGlzLmdldFBhcmVudE9yVGhyb3coKTtpZih3ZShuKSl7bGV0IHI9dGhpcy5nZXROZXh0U2libGluZ3MoKTtadChuLHIpfX1yZXR1cm4gc3VwZXIuaW5zZXJ0QmVmb3JlKHQpfWNhbkluc2VydEFmdGVyKHQpe3JldHVybiBldCh0KX1jYW5SZXBsYWNlV2l0aCh0KXtyZXR1cm4gZXQodCl9Y2FuTWVyZ2VXaXRoKHQpe3JldHVybiBQZS4kaXNQYXJhZ3JhcGhOb2RlKHQpfHxldCh0KX1leHRyYWN0V2l0aENoaWxkKHQsbil7aWYoIVBlLiRpc1JhbmdlU2VsZWN0aW9uKG4pKXJldHVybiExO3Q9bi5hbmNob3IuZ2V0Tm9kZSgpO2xldCByPW4uZm9jdXMuZ2V0Tm9kZSgpO3JldHVybiB0aGlzLmlzUGFyZW50T2YodCkmJnRoaXMuaXNQYXJlbnRPZihyKSYmdGhpcy5nZXRUZXh0Q29udGVudCgpLmxlbmd0aD09PW4uZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGh9aXNQYXJlbnRSZXF1aXJlZCgpe3JldHVybiEwfWNyZWF0ZVBhcmVudEVsZW1lbnROb2RlKCl7cmV0dXJuIG9uKCJidWxsZXQiKX19O2Z1bmN0aW9uIFF5KGUsdCxuKXtsZXQgcj1bXSxvPVtdO3ZhciBpPSh0PXQubGlzdCk/dC5saXN0aXRlbTp2b2lkIDA7aWYodCYmdC5uZXN0ZWQpdmFyIGw9dC5uZXN0ZWQubGlzdGl0ZW07aWYoaSE9PXZvaWQgMCYmKGk9aS5zcGxpdCgiICIpLHIucHVzaCguLi5pKSksdCl7aT1uLmdldFBhcmVudCgpLGk9d2UoaSkmJmkuZ2V0TGlzdFR5cGUoKT09PSJjaGVjayI7bGV0IHM9bi5nZXRDaGVja2VkKCk7aSYmIXN8fG8ucHVzaCh0Lmxpc3RpdGVtVW5jaGVja2VkKSxpJiZzfHxvLnB1c2godC5saXN0aXRlbUNoZWNrZWQpLGkmJnIucHVzaChzP3QubGlzdGl0ZW1DaGVja2VkOnQubGlzdGl0ZW1VbmNoZWNrZWQpfWwhPT12b2lkIDAmJihsPWwuc3BsaXQoIiAiKSxuLmdldENoaWxkcmVuKCkuc29tZShzPT53ZShzKSk/ci5wdXNoKC4uLmwpOm8ucHVzaCguLi5sKSksMDxvLmxlbmd0aCYmSW8ucmVtb3ZlQ2xhc3NOYW1lc0Zyb21FbGVtZW50KGUsLi4ubyksMDxyLmxlbmd0aCYmSW8uYWRkQ2xhc3NOYW1lc1RvRWxlbWVudChlLC4uLnIpfWZ1bmN0aW9uIEp5KGUsdCxuKXt3ZSh0LmdldEZpcnN0Q2hpbGQoKSk/KGUucmVtb3ZlQXR0cmlidXRlKCJyb2xlIiksZS5yZW1vdmVBdHRyaWJ1dGUoInRhYkluZGV4IiksZS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIpKTooZS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJjaGVja2JveCIpLGUuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIi0xIiksbiYmdC5fX2NoZWNrZWQ9PT1uLl9fY2hlY2tlZHx8ZS5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsdC5nZXRDaGVja2VkKCk/InRydWUiOiJmYWxzZSIpKX1mdW5jdGlvbiB0UihlKXtyZXR1cm4gZT1Jby5pc0hUTUxFbGVtZW50KGUpJiZlLmdldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIik9PT0idHJ1ZSIse25vZGU6JG4oZSl9fWZ1bmN0aW9uICRuKGUpe3JldHVybiBQZS4kYXBwbHlOb2RlUmVwbGFjZW1lbnQobmV3ICRkKHZvaWQgMCxlKSl9ZnVuY3Rpb24gZXQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiAkZH1sZXQgaG09Y2xhc3Mga1MgZXh0ZW5kcyBQZS5FbGVtZW50Tm9kZXtzdGF0aWMgZ2V0VHlwZSgpe3JldHVybiJsaXN0In1zdGF0aWMgY2xvbmUodCl7cmV0dXJuIG5ldyBrUyh0Ll9fbGlzdFR5cGV8fGUwW3QuX190YWddLHQuX19zdGFydCx0Ll9fa2V5KX1jb25zdHJ1Y3Rvcih0LG4scil7c3VwZXIociksdGhpcy5fX2xpc3RUeXBlPXQ9ZTBbdF18fHQsdGhpcy5fX3RhZz10PT09Im51bWJlciI/Im9sIjoidWwiLHRoaXMuX19zdGFydD1ufWdldFRhZygpe3JldHVybiB0aGlzLl9fdGFnfXNldExpc3RUeXBlKHQpe2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtuLl9fbGlzdFR5cGU9dCxuLl9fdGFnPXQ9PT0ibnVtYmVyIj8ib2wiOiJ1bCJ9Z2V0TGlzdFR5cGUoKXtyZXR1cm4gdGhpcy5fX2xpc3RUeXBlfWdldFN0YXJ0KCl7cmV0dXJuIHRoaXMuX19zdGFydH1jcmVhdGVET00odCl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLl9fdGFnKTtyZXR1cm4gdGhpcy5fX3N0YXJ0IT09MSYmbi5zZXRBdHRyaWJ1dGUoInN0YXJ0IixTdHJpbmcodGhpcy5fX3N0YXJ0KSksbi5fX2xleGljYWxMaXN0VHlwZT10aGlzLl9fbGlzdFR5cGUsWnkobix0LnRoZW1lLHRoaXMpLG59dXBkYXRlRE9NKHQsbixyKXtyZXR1cm4gdC5fX3RhZyE9PXRoaXMuX190YWc/ITA6KFp5KG4sci50aGVtZSx0aGlzKSwhMSl9c3RhdGljIGltcG9ydERPTSgpe3JldHVybntvbDooKT0+KHtjb252ZXJzaW9uOnF5LHByaW9yaXR5OjB9KSx1bDooKT0+KHtjb252ZXJzaW9uOnF5LHByaW9yaXR5OjB9KX19c3RhdGljIGltcG9ydEpTT04odCl7bGV0IG49b24odC5saXN0VHlwZSx0LnN0YXJ0KTtyZXR1cm4gbi5zZXRGb3JtYXQodC5mb3JtYXQpLG4uc2V0SW5kZW50KHQuaW5kZW50KSxuLnNldERpcmVjdGlvbih0LmRpcmVjdGlvbiksbn1leHBvcnRET00odCl7cmV0dXJue2VsZW1lbnQ6dH09c3VwZXIuZXhwb3J0RE9NKHQpLHQmJklvLmlzSFRNTEVsZW1lbnQodCkmJih0aGlzLl9fc3RhcnQhPT0xJiZ0LnNldEF0dHJpYnV0ZSgic3RhcnQiLFN0cmluZyh0aGlzLl9fc3RhcnQpKSx0aGlzLl9fbGlzdFR5cGU9PT0iY2hlY2siJiZ0LnNldEF0dHJpYnV0ZSgiX19sZXhpY2FsTGlzdFR5cGUiLCJjaGVjayIpKSx7ZWxlbWVudDp0fX1leHBvcnRKU09OKCl7cmV0dXJuey4uLnN1cGVyLmV4cG9ydEpTT04oKSxsaXN0VHlwZTp0aGlzLmdldExpc3RUeXBlKCksc3RhcnQ6dGhpcy5nZXRTdGFydCgpLHRhZzp0aGlzLmdldFRhZygpLHR5cGU6Imxpc3QiLHZlcnNpb246MX19Y2FuQmVFbXB0eSgpe3JldHVybiExfWNhbkluZGVudCgpe3JldHVybiExfWFwcGVuZCguLi50KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZihldChuKSlzdXBlci5hcHBlbmQobik7ZWxzZXtsZXQgbz0kbigpO3dlKG4pfHxQZS4kaXNFbGVtZW50Tm9kZShuKSYmKG49UGUuJGNyZWF0ZVRleHROb2RlKG4uZ2V0VGV4dENvbnRlbnQoKSkpLG8uYXBwZW5kKG4pLHN1cGVyLmFwcGVuZChvKX19cmV0dXJuIFp0KHRoaXMpLHRoaXN9ZXh0cmFjdFdpdGhDaGlsZCh0KXtyZXR1cm4gZXQodCl9fTtmdW5jdGlvbiBaeShlLHQsbil7bGV0IHI9W10sbz1bXTt2YXIgaT10Lmxpc3Q7aWYoaSE9PXZvaWQgMCl7bGV0IHM9aVtgJHtuLl9fdGFnfURlcHRoYF18fFtdO3Q9X1MobiktMTtsZXQgYT10JXMubGVuZ3RoO3ZhciBsPXNbYV07bGV0IHU9aVtuLl9fdGFnXSxjO2lmKGk9aS5uZXN0ZWQsaSE9PXZvaWQgMCYmaS5saXN0JiYoYz1pLmxpc3QpLHUhPT12b2lkIDAmJnIucHVzaCh1KSxsIT09dm9pZCAwKWZvcihsPWwuc3BsaXQoIiAiKSxyLnB1c2goLi4ubCksbD0wO2w8cy5sZW5ndGg7bCsrKWwhPT1hJiZvLnB1c2gobi5fX3RhZytsKTtjIT09dm9pZCAwJiYobj1jLnNwbGl0KCIgIiksMTx0P3IucHVzaCguLi5uKTpvLnB1c2goLi4ubikpfTA8by5sZW5ndGgmJklvLnJlbW92ZUNsYXNzTmFtZXNGcm9tRWxlbWVudChlLC4uLm8pLDA8ci5sZW5ndGgmJklvLmFkZENsYXNzTmFtZXNUb0VsZW1lbnQoZSwuLi5yKX1mdW5jdGlvbiBuUihlKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtldChuKT8odC5wdXNoKG4pLG49bi5nZXRDaGlsZHJlbigpLDE8bi5sZW5ndGgmJm4uZm9yRWFjaChvPT57d2UobykmJnQucHVzaChZeShvKSl9KSk6dC5wdXNoKFl5KG4pKX1yZXR1cm4gdH1mdW5jdGlvbiBxeShlKXtsZXQgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj1udWxsO3JldHVybiB0PT09Im9sIj9uPW9uKCJudW1iZXIiLGUuc3RhcnQpOnQ9PT0idWwiJiYobj1Jby5pc0hUTUxFbGVtZW50KGUpJiZlLmdldEF0dHJpYnV0ZSgiX19sZXhpY2FsbGlzdHR5cGUiKT09PSJjaGVjayI/b24oImNoZWNrIik6b24oImJ1bGxldCIpKSx7YWZ0ZXI6blIsbm9kZTpufX1sZXQgZTA9e29sOiJudW1iZXIiLHVsOiJidWxsZXQifTtmdW5jdGlvbiBvbihlLHQ9MSl7cmV0dXJuIFBlLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcgaG0oZSx0KSl9ZnVuY3Rpb24gd2UoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBobX1sZXQgclI9UGUuY3JlYXRlQ29tbWFuZCgiSU5TRVJUX1VOT1JERVJFRF9MSVNUX0NPTU1BTkQiKSxvUj1QZS5jcmVhdGVDb21tYW5kKCJJTlNFUlRfT1JERVJFRF9MSVNUX0NPTU1BTkQiKSxpUj1QZS5jcmVhdGVDb21tYW5kKCJJTlNFUlRfQ0hFQ0tfTElTVF9DT01NQU5EIiksbFI9UGUuY3JlYXRlQ29tbWFuZCgiUkVNT1ZFX0xJU1RfQ09NTUFORCIpO3VuLiRjcmVhdGVMaXN0SXRlbU5vZGU9JG47dW4uJGNyZWF0ZUxpc3ROb2RlPW9uO3VuLiRnZXRMaXN0RGVwdGg9X1M7dW4uJGhhbmRsZUxpc3RJbnNlcnRQYXJhZ3JhcGg9ZnVuY3Rpb24oKXt2YXIgZT1QZS4kZ2V0U2VsZWN0aW9uKCk7aWYoIVBlLiRpc1JhbmdlU2VsZWN0aW9uKGUpfHwhZS5pc0NvbGxhcHNlZCgpfHwoZT1lLmFuY2hvci5nZXROb2RlKCksIWV0KGUpfHxlLmdldENoaWxkcmVuU2l6ZSgpIT09MCkpcmV0dXJuITE7dmFyIHQ9bXAoZSksbj1lLmdldFBhcmVudCgpO3dlKG4pfHxSbCg0MCk7bGV0IHI9bi5nZXRQYXJlbnQoKSxvO2lmKFBlLiRpc1Jvb3RPclNoYWRvd1Jvb3Qocikpbz1QZS4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpLHQuaW5zZXJ0QWZ0ZXIobyk7ZWxzZSBpZihldChyKSlvPSRuKCksci5pbnNlcnRBZnRlcihvKTtlbHNlIHJldHVybiExO2lmKG8uc2VsZWN0KCksdD1lLmdldE5leHRTaWJsaW5ncygpLDA8dC5sZW5ndGgpe2xldCBpPW9uKG4uZ2V0TGlzdFR5cGUoKSk7UGUuJGlzUGFyYWdyYXBoTm9kZShvKT9vLmluc2VydEFmdGVyKGkpOihuPSRuKCksbi5hcHBlbmQoaSksby5pbnNlcnRBZnRlcihuKSksdC5mb3JFYWNoKGw9PntsLnJlbW92ZSgpLGkuYXBwZW5kKGwpfSl9cmV0dXJuIHEyKGUpLCEwfTt1bi4kaXNMaXN0SXRlbU5vZGU9ZXQ7dW4uJGlzTGlzdE5vZGU9d2U7dW4uSU5TRVJUX0NIRUNLX0xJU1RfQ09NTUFORD1pUjt1bi5JTlNFUlRfT1JERVJFRF9MSVNUX0NPTU1BTkQ9b1I7dW4uSU5TRVJUX1VOT1JERVJFRF9MSVNUX0NPTU1BTkQ9clI7dW4uTGlzdEl0ZW1Ob2RlPSRkO3VuLkxpc3ROb2RlPWhtO3VuLlJFTU9WRV9MSVNUX0NPTU1BTkQ9bFI7dW4uaW5zZXJ0TGlzdD1mdW5jdGlvbihlLHQpe2UudXBkYXRlKCgpPT57dmFyIG49UGUuJGdldFNlbGVjdGlvbigpO2lmKFBlLiRpc1JhbmdlU2VsZWN0aW9uKG4pfHxQZS5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb24obikpe3ZhciByPW4uZ2V0Tm9kZXMoKTtuPW4uYW5jaG9yLmdldE5vZGUoKTt2YXIgbz1uLmdldFBhcmVudCgpO2lmKEVTKG4scikpcj1vbih0KSxQZS4kaXNSb290T3JTaGFkb3dSb290KG8pPyhuLnJlcGxhY2Uociksbz0kbigpLFBlLiRpc0VsZW1lbnROb2RlKG4pJiYoby5zZXRGb3JtYXQobi5nZXRGb3JtYXRUeXBlKCkpLG8uc2V0SW5kZW50KG4uZ2V0SW5kZW50KCkpKSxyLmFwcGVuZChvKSk6ZXQobikmJihuPW4uZ2V0UGFyZW50T3JUaHJvdygpLHlpKHIsbi5nZXRDaGlsZHJlbigpKSxuLnJlcGxhY2UocikpO2Vsc2UgZm9yKG49bmV3IFNldCxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBpPXJbb107aWYoUGUuJGlzRWxlbWVudE5vZGUoaSkmJmkuaXNFbXB0eSgpJiYhbi5oYXMoaS5nZXRLZXkoKSkpWHkoaSx0KTtlbHNlIGlmKFBlLiRpc0xlYWZOb2RlKGkpKWZvcihpPWkuZ2V0UGFyZW50KCk7aSE9bnVsbDspe2xldCBzPWkuZ2V0S2V5KCk7aWYod2UoaSkpe2lmKCFuLmhhcyhzKSl7dmFyIGw9b24odCk7eWkobCxpLmdldENoaWxkcmVuKCkpLGkucmVwbGFjZShsKSxadChsKSxuLmFkZChzKX1icmVha31lbHNle2lmKGw9aS5nZXRQYXJlbnQoKSxQZS4kaXNSb290T3JTaGFkb3dSb290KGwpJiYhbi5oYXMocykpe24uYWRkKHMpLFh5KGksdCk7YnJlYWt9aT1sfX19fX0pfTt1bi5yZW1vdmVMaXN0PWZ1bmN0aW9uKGUpe2UudXBkYXRlKCgpPT57bGV0IHQ9UGUuJGdldFNlbGVjdGlvbigpO2lmKFBlLiRpc1JhbmdlU2VsZWN0aW9uKHQpKXt2YXIgbj1uZXcgU2V0LHI9dC5nZXROb2RlcygpLG89dC5hbmNob3IuZ2V0Tm9kZSgpO2lmKEVTKG8scikpbi5hZGQobXAobykpO2Vsc2UgZm9yKG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGk9cltvXTtQZS4kaXNMZWFmTm9kZShpKSYmKGk9SW8uJGdldE5lYXJlc3ROb2RlT2ZUeXBlKGksJGQpLGkhPW51bGwmJm4uYWRkKG1wKGkpKSl9Zm9yKGxldCBsIG9mIG4pe249bCxyPVNTKGwpO2ZvcihsZXQgcyBvZiByKXI9UGUuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKSx5aShyLHMuZ2V0Q2hpbGRyZW4oKSksbi5pbnNlcnRBZnRlcihyKSxuPXIscy5fX2tleT09PXQuYW5jaG9yLmtleSYmdC5hbmNob3Iuc2V0KHIuZ2V0S2V5KCksMCwiZWxlbWVudCIpLHMuX19rZXk9PT10LmZvY3VzLmtleSYmdC5mb2N1cy5zZXQoci5nZXRLZXkoKSwwLCJlbGVtZW50Iikscy5yZW1vdmUoKTtsLnJlbW92ZSgpfX19KX07Y29uc3Qgc1I9dW47dmFyIGdvPXNSLFRTPXt9LGtkPXt9LGJTPXA7ZnVuY3Rpb24gYVIoZSl7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtczt0LmFwcGVuZCgiY29kZSIsZSk7Zm9yKGxldCBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0LmFwcGVuZCgidiIsYXJndW1lbnRzW25dKTt0aHJvdyBFcnJvcihgTWluaWZpZWQgTGV4aWNhbCBlcnJvciAjJHtlfTsgdmlzaXQgaHR0cHM6Ly9sZXhpY2FsLmRldi9kb2NzL2Vycm9yPyR7dH0gZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLmApfWxldCBOUz1iUy5jcmVhdGVDb250ZXh0KG51bGwpO2tkLkxleGljYWxDb21wb3NlckNvbnRleHQ9TlM7a2QuY3JlYXRlTGV4aWNhbENvbXBvc2VyQ29udGV4dD1mdW5jdGlvbihlLHQpe2xldCBuPW51bGw7cmV0dXJuIGUhPW51bGwmJihuPWVbMV0pLHtnZXRUaGVtZTpmdW5jdGlvbigpe3JldHVybiB0Pz8obiE9bnVsbD9uLmdldFRoZW1lKCk6bnVsbCl9fX07a2QudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dD1mdW5jdGlvbigpe2xldCBlPWJTLnVzZUNvbnRleHQoTlMpO3JldHVybiBlPT1udWxsJiZhUig4KSxlfTtjb25zdCB1Uj1rZDt2YXIgc3I9dVIsdDA9c3IsJHM9aGUsemM9cDtsZXQgUlM9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiO3ZhciBjUj1SUz96Yy51c2VMYXlvdXRFZmZlY3Q6emMudXNlRWZmZWN0O2xldCB4dT17dGFnOiJoaXN0b3J5LW1lcmdlIn07ZnVuY3Rpb24gZFIoZSx0KXtpZih0IT09bnVsbCl7aWYodD09PXZvaWQgMCllLnVwZGF0ZSgoKT0+e3ZhciBuPSRzLiRnZXRSb290KCk7aWYobi5pc0VtcHR5KCkpe2xldCByPSRzLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk7bi5hcHBlbmQociksbj1SUz9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGwsKCRzLiRnZXRTZWxlY3Rpb24oKSE9PW51bGx8fG4hPT1udWxsJiZuPT09ZS5nZXRSb290RWxlbWVudCgpKSYmci5zZWxlY3QoKX19LHh1KTtlbHNlIGlmKHQhPT1udWxsKXN3aXRjaCh0eXBlb2YgdCl7Y2FzZSJzdHJpbmciOmxldCBuPWUucGFyc2VFZGl0b3JTdGF0ZSh0KTtlLnNldEVkaXRvclN0YXRlKG4seHUpO2JyZWFrO2Nhc2Uib2JqZWN0IjplLnNldEVkaXRvclN0YXRlKHQseHUpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmUudXBkYXRlKCgpPT57JHMuJGdldFJvb3QoKS5pc0VtcHR5KCkmJnQoZSl9LHh1KX19fVRTLkxleGljYWxDb21wb3Nlcj1mdW5jdGlvbih7aW5pdGlhbENvbmZpZzplLGNoaWxkcmVuOnR9KXtsZXQgbj16Yy51c2VNZW1vKCgpPT57Y29uc3R7dGhlbWU6cixuYW1lc3BhY2U6byxlZGl0b3JfX0RFUFJFQ0FURUQ6aSxub2RlczpsLG9uRXJyb3I6cyxlZGl0b3JTdGF0ZTphfT1lLHU9dDAuY3JlYXRlTGV4aWNhbENvbXBvc2VyQ29udGV4dChudWxsLHIpO2xldCBjPWl8fG51bGw7aWYoYz09PW51bGwpe2NvbnN0IGQ9JHMuY3JlYXRlRWRpdG9yKHtlZGl0YWJsZTplLmVkaXRhYmxlLG5hbWVzcGFjZTpvLG5vZGVzOmwsb25FcnJvcjpmPT5zKGYsZCksdGhlbWU6cn0pO2RSKGQsYSksYz1kfXJldHVybltjLHVdfSxbXSk7cmV0dXJuIGNSKCgpPT57bGV0IHI9ZS5lZGl0YWJsZSxbb109bjtvLnNldEVkaXRhYmxlKHIhPT12b2lkIDA/cjohMCl9LFtdKSx6Yy5jcmVhdGVFbGVtZW50KHQwLkxleGljYWxDb21wb3NlckNvbnRleHQuUHJvdmlkZXIse3ZhbHVlOm59LHQpfTtjb25zdCBmUj1UUzt2YXIgaFI9ZlIsSHM9cDtmdW5jdGlvbiB2cChlLHQpe3JldHVybiB2cD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihuLHIpe3JldHVybiBuLl9fcHJvdG9fXz1yLG59LHZwKGUsdCl9ZnVuY3Rpb24gcFIoZSx0KXtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLHZwKGUsdCl9ZnVuY3Rpb24gZ1IoZSx0KXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9W10pLHQ9PT12b2lkIDAmJih0PVtdKSxlLmxlbmd0aCE9PXQubGVuZ3RofHxlLnNvbWUoZnVuY3Rpb24obixyKXtyZXR1cm4hT2JqZWN0LmlzKG4sdFtyXSl9KX12YXIgbjA9e2Vycm9yOm51bGx9LG1SPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtmb3IodmFyIHIsbz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkobyksbD0wO2w8bztsKyspaVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIHI9ZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSl8fHRoaXMsci5zdGF0ZT1uMCxyLnJlc2V0RXJyb3JCb3VuZGFyeT1mdW5jdGlvbigpe2Zvcih2YXIgcyxhPWFyZ3VtZW50cy5sZW5ndGgsdT1BcnJheShhKSxjPTA7YzxhO2MrKyl1W2NdPWFyZ3VtZW50c1tjXTtyLnByb3BzLm9uUmVzZXQ9PW51bGx8fChzPXIucHJvcHMpLm9uUmVzZXQuYXBwbHkocyx1KSxyLnJlc2V0KCl9LHJ9cFIodCxlKSx0LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj1mdW5jdGlvbihyKXtyZXR1cm57ZXJyb3I6cn19O3ZhciBuPXQucHJvdG90eXBlO3JldHVybiBuLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5zZXRTdGF0ZShuMCl9LG4uY29tcG9uZW50RGlkQ2F0Y2g9ZnVuY3Rpb24ocixvKXt2YXIgaSxsOyhpPShsPXRoaXMucHJvcHMpLm9uRXJyb3IpPT1udWxsfHxpLmNhbGwobCxyLG8pfSxuLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbihyLG8pe3ZhciBpPXRoaXMucHJvcHMucmVzZXRLZXlzO2lmKHRoaXMuc3RhdGUuZXJyb3IhPT1udWxsJiZvLmVycm9yIT09bnVsbCYmZ1Ioci5yZXNldEtleXMsaSkpe3ZhciBsLHM7KGw9KHM9dGhpcy5wcm9wcykub25SZXNldEtleXNDaGFuZ2UpPT1udWxsfHxsLmNhbGwocyxyLnJlc2V0S2V5cyxpKSx0aGlzLnJlc2V0KCl9fSxuLnJlbmRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMuc3RhdGUuZXJyb3Isbz10aGlzLnByb3BzLGk9by5mYWxsYmFja1JlbmRlcixsPW8uRmFsbGJhY2tDb21wb25lbnQ7aWYobz1vLmZhbGxiYWNrLHIhPT1udWxsKXtpZihyPXtlcnJvcjpyLHJlc2V0RXJyb3JCb3VuZGFyeTp0aGlzLnJlc2V0RXJyb3JCb3VuZGFyeX0sSHMuaXNWYWxpZEVsZW1lbnQobykpcmV0dXJuIG87aWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpcmV0dXJuIGkocik7aWYobClyZXR1cm4gSHMuY3JlYXRlRWxlbWVudChsLHIpO3Rocm93IEVycm9yKCJyZWFjdC1lcnJvci1ib3VuZGFyeSByZXF1aXJlcyBlaXRoZXIgYSBmYWxsYmFjaywgZmFsbGJhY2tSZW5kZXIsIG9yIEZhbGxiYWNrQ29tcG9uZW50IHByb3AiKX1yZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbn0sdH0oSHMuQ29tcG9uZW50KSx2Uj1mdW5jdGlvbih7Y2hpbGRyZW46ZSxvbkVycm9yOnR9KXtyZXR1cm4gSHMuY3JlYXRlRWxlbWVudChtUix7ZmFsbGJhY2s6SHMuY3JlYXRlRWxlbWVudCgiZGl2Iix7c3R5bGU6e2JvcmRlcjoiMXB4IHNvbGlkICNmMDAiLGNvbG9yOiIjZjAwIixwYWRkaW5nOiI4cHgifX0sIkFuIGVycm9yIHdhcyB0aHJvd24uIiksb25FcnJvcjp0fSxlKX07Y29uc3QgeVI9dlI7dmFyIHhSPXlSO2NvbnN0IHdSPVJhKHhSKTt2YXIgcG09e30sZ209e30sX1I9TnQsamU9aGU7ZnVuY3Rpb24gU1IoZSx0LG4scixvKXtpZihlPT09bnVsbHx8bi5zaXplPT09MCYmci5zaXplPT09MCYmIW8pcmV0dXJuIDA7dmFyIGk9dC5fc2VsZWN0aW9uLGw9ZS5fc2VsZWN0aW9uO2lmKG8pcmV0dXJuIDE7aWYoIShqZS4kaXNSYW5nZVNlbGVjdGlvbihpKSYmamUuJGlzUmFuZ2VTZWxlY3Rpb24obCkmJmwuaXNDb2xsYXBzZWQoKSYmaS5pc0NvbGxhcHNlZCgpKSlyZXR1cm4gMDtvPXQuX25vZGVNYXA7bGV0IHM9W107Zm9yKGxldCBhIG9mIG4pbj1vLmdldChhKSxuIT09dm9pZCAwJiZzLnB1c2gobik7Zm9yKGxldFthLHVdb2Ygcil1JiYocj1vLmdldChhKSxyPT09dm9pZCAwfHxqZS4kaXNSb290Tm9kZShyKXx8cy5wdXNoKHIpKTtyZXR1cm4gcy5sZW5ndGg9PT0wPzA6MTxzLmxlbmd0aD8ocj10Ll9ub2RlTWFwLHQ9ci5nZXQoaS5hbmNob3Iua2V5KSxsPXIuZ2V0KGwuYW5jaG9yLmtleSksdCYmbCYmIWUuX25vZGVNYXAuaGFzKHQuX19rZXkpJiZqZS4kaXNUZXh0Tm9kZSh0KSYmdC5fX3RleHQubGVuZ3RoPT09MSYmaS5hbmNob3Iub2Zmc2V0PT09MT8yOjApOih0PXNbMF0sZT1lLl9ub2RlTWFwLmdldCh0Ll9fa2V5KSwhamUuJGlzVGV4dE5vZGUoZSl8fCFqZS4kaXNUZXh0Tm9kZSh0KXx8ZS5fX21vZGUhPT10Ll9fbW9kZXx8KGU9ZS5fX3RleHQsdD10Ll9fdGV4dCxlPT09dCl8fChpPWkuYW5jaG9yLGw9bC5hbmNob3IsaS5rZXkhPT1sLmtleXx8aS50eXBlIT09InRleHQiKT8wOihpPWkub2Zmc2V0LGw9bC5vZmZzZXQsZT10Lmxlbmd0aC1lLmxlbmd0aCxlPT09MSYmbD09PWktMT8yOmU9PT0tMSYmbD09PWkrMT8zOmU9PT0tMSYmbD09PWk/NDowKSl9ZnVuY3Rpb24gRVIoZSx0KXtsZXQgbj1EYXRlLm5vdygpLHI9MDtyZXR1cm4obyxpLGwscyxhLHUpPT57bGV0IGM9RGF0ZS5ub3coKTtpZih1LmhhcygiaGlzdG9yaWMiKSlyZXR1cm4gcj0wLG49YywyO2xldCBkPVNSKG8saSxzLGEsZS5pc0NvbXBvc2luZygpKSxmPSgoKT0+e3ZhciBoPWw9PT1udWxsfHxsLmVkaXRvcj09PWUsZz11LmhhcygiaGlzdG9yeS1wdXNoIik7aWYoIWcmJmgmJnUuaGFzKCJoaXN0b3J5LW1lcmdlIikpcmV0dXJuIDA7aWYobz09PW51bGwpcmV0dXJuIDE7dmFyIG09aS5fc2VsZWN0aW9uO2lmKCEoMDxzLnNpemV8fDA8YS5zaXplKSlyZXR1cm4gbSE9PW51bGw/MDoyO2lmKGc9PT0hMSYmZCE9PTAmJmQ9PT1yJiZjPG4rdCYmaClyZXR1cm4gMDtpZihzLnNpemU9PT0xKXt7Zz1BcnJheS5mcm9tKHMpWzBdLGg9by5fbm9kZU1hcC5nZXQoZyksZz1pLl9ub2RlTWFwLmdldChnKSxtPW8uX3NlbGVjdGlvbjtsZXQgXz1pLl9zZWxlY3Rpb24sdj0hMTtqZS4kaXNSYW5nZVNlbGVjdGlvbihtKSYmamUuJGlzUmFuZ2VTZWxlY3Rpb24oXykmJih2PW0uYW5jaG9yLnR5cGU9PT0iZWxlbWVudCImJm0uZm9jdXMudHlwZT09PSJlbGVtZW50IiYmXy5hbmNob3IudHlwZT09PSJ0ZXh0IiYmXy5mb2N1cy50eXBlPT09InRleHQiKSxoPSF2JiZqZS4kaXNUZXh0Tm9kZShoKSYmamUuJGlzVGV4dE5vZGUoZyk/aC5fX3R5cGU9PT1nLl9fdHlwZSYmaC5fX3RleHQ9PT1nLl9fdGV4dCYmaC5fX21vZGU9PT1nLl9fbW9kZSYmaC5fX2RldGFpbD09PWcuX19kZXRhaWwmJmguX19zdHlsZT09PWcuX19zdHlsZSYmaC5fX2Zvcm1hdD09PWcuX19mb3JtYXQmJmguX19wYXJlbnQ9PT1nLl9fcGFyZW50OiExfWlmKGgpcmV0dXJuIDB9cmV0dXJuIDF9KSgpO3JldHVybiBuPWMscj1kLGZ9fWdtLmNyZWF0ZUVtcHR5SGlzdG9yeVN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbCxyZWRvU3RhY2s6W10sdW5kb1N0YWNrOltdfX07Z20ucmVnaXN0ZXJIaXN0b3J5PWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1FUihlLG4pO249KHtlZGl0b3JTdGF0ZTpsLHByZXZFZGl0b3JTdGF0ZTpzLGRpcnR5TGVhdmVzOmEsZGlydHlFbGVtZW50czp1LHRhZ3M6Y30pPT57Y29uc3QgZD10LmN1cnJlbnQsZj10LnJlZG9TdGFjayxoPXQudW5kb1N0YWNrLGc9ZD09PW51bGw/bnVsbDpkLmVkaXRvclN0YXRlO2lmKGQ9PT1udWxsfHxsIT09Zyl7aWYocz1yKHMsbCxkLGEsdSxjKSxzPT09MSlmLmxlbmd0aCE9PTAmJih0LnJlZG9TdGFjaz1bXSxlLmRpc3BhdGNoQ29tbWFuZChqZS5DQU5fUkVET19DT01NQU5ELCExKSksZCE9PW51bGwmJihoLnB1c2goey4uLmR9KSxlLmRpc3BhdGNoQ29tbWFuZChqZS5DQU5fVU5ET19DT01NQU5ELCEwKSk7ZWxzZSBpZihzPT09MilyZXR1cm47dC5jdXJyZW50PXtlZGl0b3I6ZSxlZGl0b3JTdGF0ZTpsfX19O2xldCBvPV9SLm1lcmdlUmVnaXN0ZXIoZS5yZWdpc3RlckNvbW1hbmQoamUuVU5ET19DT01NQU5ELCgpPT57bGV0IGw9dC5yZWRvU3RhY2sscz10LnVuZG9TdGFjaztpZihzLmxlbmd0aCE9PTApe2xldCBhPXQuY3VycmVudCx1PXMucG9wKCk7YSE9PW51bGwmJihsLnB1c2goYSksZS5kaXNwYXRjaENvbW1hbmQoamUuQ0FOX1JFRE9fQ09NTUFORCwhMCkpLHMubGVuZ3RoPT09MCYmZS5kaXNwYXRjaENvbW1hbmQoamUuQ0FOX1VORE9fQ09NTUFORCwhMSksdC5jdXJyZW50PXV8fG51bGwsdSYmdS5lZGl0b3Iuc2V0RWRpdG9yU3RhdGUodS5lZGl0b3JTdGF0ZSx7dGFnOiJoaXN0b3JpYyJ9KX1yZXR1cm4hMH0samUuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLGUucmVnaXN0ZXJDb21tYW5kKGplLlJFRE9fQ09NTUFORCwoKT0+e2xldCBsPXQucmVkb1N0YWNrO3ZhciBzPXQudW5kb1N0YWNrO2lmKGwubGVuZ3RoIT09MCl7bGV0IGE9dC5jdXJyZW50O2EhPT1udWxsJiYocy5wdXNoKGEpLGUuZGlzcGF0Y2hDb21tYW5kKGplLkNBTl9VTkRPX0NPTU1BTkQsITApKSxzPWwucG9wKCksbC5sZW5ndGg9PT0wJiZlLmRpc3BhdGNoQ29tbWFuZChqZS5DQU5fUkVET19DT01NQU5ELCExKSx0LmN1cnJlbnQ9c3x8bnVsbCxzJiZzLmVkaXRvci5zZXRFZGl0b3JTdGF0ZShzLmVkaXRvclN0YXRlLHt0YWc6Imhpc3RvcmljIn0pfXJldHVybiEwfSxqZS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoamUuQ0xFQVJfRURJVE9SX0NPTU1BTkQsKCk9Pih0LnVuZG9TdGFjaz1bXSx0LnJlZG9TdGFjaz1bXSx0LmN1cnJlbnQ9bnVsbCwhMSksamUuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLGUucmVnaXN0ZXJDb21tYW5kKGplLkNMRUFSX0hJU1RPUllfQ09NTUFORCwoKT0+KHQudW5kb1N0YWNrPVtdLHQucmVkb1N0YWNrPVtdLHQuY3VycmVudD1udWxsLGUuZGlzcGF0Y2hDb21tYW5kKGplLkNBTl9SRURPX0NPTU1BTkQsITEpLGUuZGlzcGF0Y2hDb21tYW5kKGplLkNBTl9VTkRPX0NPTU1BTkQsITEpLCEwKSxqZS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlclVwZGF0ZUxpc3RlbmVyKG4pKSxpPWUucmVnaXN0ZXJVcGRhdGVMaXN0ZW5lcihuKTtyZXR1cm4oKT0+e28oKSxpKCl9fTtjb25zdCBDUj1nbTt2YXIgJFI9Q1Isa1I9c3IseXA9JFIscjA9cDtmdW5jdGlvbiBUUihlLHQsbj0xZTMpe2xldCByPXIwLnVzZU1lbW8oKCk9PnR8fHlwLmNyZWF0ZUVtcHR5SGlzdG9yeVN0YXRlKCksW3RdKTtyMC51c2VFZmZlY3QoKCk9PnlwLnJlZ2lzdGVySGlzdG9yeShlLHIsbiksW24sZSxyXSl9cG0uY3JlYXRlRW1wdHlIaXN0b3J5U3RhdGU9eXAuY3JlYXRlRW1wdHlIaXN0b3J5U3RhdGU7cG0uSGlzdG9yeVBsdWdpbj1mdW5jdGlvbih7ZXh0ZXJuYWxIaXN0b3J5U3RhdGU6ZX0pe2xldFt0XT1rUi51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCk7cmV0dXJuIFRSKHQsZSksbnVsbH07Y29uc3QgYlI9cG07dmFyIE5SPWJSLFBTPXt9LFJSPXNyLEtzPXAsUFI9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiP0tzLnVzZUxheW91dEVmZmVjdDpLcy51c2VFZmZlY3Q7ZnVuY3Rpb24gT1IoZSl7bGV0W3RdPVJSLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKSxuPUtzLnVzZU1lbW8oKCk9PmUodCksW3QsZV0pLHI9S3MudXNlUmVmKG4uaW5pdGlhbFZhbHVlRm4oKSksW28saV09S3MudXNlU3RhdGUoci5jdXJyZW50KTtyZXR1cm4gUFIoKCk9PntsZXR7aW5pdGlhbFZhbHVlRm46bCxzdWJzY3JpYmU6c309bixhPWwoKTtyZXR1cm4gci5jdXJyZW50IT09YSYmKHIuY3VycmVudD1hLGkoYSkpLHModT0+e3IuY3VycmVudD11LGkodSl9KX0sW24sZV0pLG99ZnVuY3Rpb24gQVIoZSl7cmV0dXJue2luaXRpYWxWYWx1ZUZuOigpPT5lLmlzRWRpdGFibGUoKSxzdWJzY3JpYmU6dD0+ZS5yZWdpc3RlckVkaXRhYmxlTGlzdGVuZXIodCl9fXZhciBNUj1mdW5jdGlvbigpe3JldHVybiBPUihBUil9O2NvbnN0IExSPU1SO3ZhciBEUj1MUixWbz17fSxxdD1oZTtmdW5jdGlvbiBtbShlLHQ9ITApe3JldHVybiBlPyExOihlPU9TKCksdCYmKGU9ZS50cmltKCkpLGU9PT0iIil9ZnVuY3Rpb24gT1MoKXtyZXR1cm4gcXQuJGdldFJvb3QoKS5nZXRUZXh0Q29udGVudCgpfWZ1bmN0aW9uIEFTKGUpe2lmKCFtbShlLCExKSlyZXR1cm4hMTtlPXF0LiRnZXRSb290KCkuZ2V0Q2hpbGRyZW4oKTtsZXQgdD1lLmxlbmd0aDtpZigxPHQpcmV0dXJuITE7Zm9yKGxldCByPTA7cjx0O3IrKyl7dmFyIG49ZVtyXTtpZihxdC4kaXNEZWNvcmF0b3JOb2RlKG4pKXJldHVybiExO2lmKHF0LiRpc0VsZW1lbnROb2RlKG4pKXtpZighcXQuJGlzUGFyYWdyYXBoTm9kZShuKXx8bi5fX2luZGVudCE9PTApcmV0dXJuITE7bj1uLmdldENoaWxkcmVuKCk7bGV0IG89bi5sZW5ndGg7Zm9yKGxldCBpPTA7aTxvO2krKylpZighcXQuJGlzVGV4dE5vZGUobltyXSkpcmV0dXJuITF9fXJldHVybiEwfVZvLiRjYW5TaG93UGxhY2Vob2xkZXI9QVM7Vm8uJGNhblNob3dQbGFjZWhvbGRlckN1cnJ5PWZ1bmN0aW9uKGUpe3JldHVybigpPT5BUyhlKX07Vm8uJGZpbmRUZXh0SW50ZXJzZWN0aW9uRnJvbUNoYXJhY3RlcnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldEZpcnN0Q2hpbGQoKTtlPTA7ZTpmb3IoO24hPT1udWxsOyl7aWYocXQuJGlzRWxlbWVudE5vZGUobikpe3ZhciByPW4uZ2V0Rmlyc3RDaGlsZCgpO2lmKHIhPT1udWxsKXtuPXI7Y29udGludWV9fWVsc2UgaWYocXQuJGlzVGV4dE5vZGUobikpe2lmKHI9bi5nZXRUZXh0Q29udGVudFNpemUoKSxlK3I+dClyZXR1cm57bm9kZTpuLG9mZnNldDp0LWV9O2UrPXJ9aWYocj1uLmdldE5leHRTaWJsaW5nKCksciE9PW51bGwpbj1yO2Vsc2V7Zm9yKG49bi5nZXRQYXJlbnQoKTtuIT09bnVsbDspe2lmKHI9bi5nZXROZXh0U2libGluZygpLHIhPT1udWxsKXtuPXI7Y29udGludWUgZX1uPW4uZ2V0UGFyZW50KCl9YnJlYWt9fXJldHVybiBudWxsfTtWby4kaXNSb290VGV4dENvbnRlbnRFbXB0eT1tbTtWby4kaXNSb290VGV4dENvbnRlbnRFbXB0eUN1cnJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKCk9Pm1tKGUsdCl9O1ZvLiRyb290VGV4dENvbnRlbnQ9T1M7Vm8ucmVnaXN0ZXJMZXhpY2FsVGV4dEVudGl0eT1mdW5jdGlvbihlLHQsbixyKXtsZXQgbz1sPT57Y29uc3Qgcz1xdC4kY3JlYXRlVGV4dE5vZGUobC5nZXRUZXh0Q29udGVudCgpKTtzLnNldEZvcm1hdChsLmdldEZvcm1hdCgpKSxsLnJlcGxhY2Uocyl9LGk9ZS5yZWdpc3Rlck5vZGVUcmFuc2Zvcm0ocXQuVGV4dE5vZGUsbD0+e2lmKGwuaXNTaW1wbGVUZXh0KCkpe3ZhciBzPWwuZ2V0UHJldmlvdXNTaWJsaW5nKCksYT1sLmdldFRleHRDb250ZW50KCksdT1sO2lmKHF0LiRpc1RleHROb2RlKHMpKXt2YXIgYz1zLmdldFRleHRDb250ZW50KCksZD10KGMrYSk7aWYocyBpbnN0YW5jZW9mIG4pe2lmKGQ9PT1udWxsfHxzLmdldExhdGVzdCgpLl9fbW9kZSE9PTApe28ocyk7cmV0dXJufWlmKGQ9ZC5lbmQtYy5sZW5ndGgsMDxkKXt1PWEuc2xpY2UoMCxkKSx1PWMrdSxzLnNlbGVjdCgpLHMuc2V0VGV4dENvbnRlbnQodSksZD09PWEubGVuZ3RoP2wucmVtb3ZlKCk6KHM9YS5zbGljZShkKSxsLnNldFRleHRDb250ZW50KHMpKTtyZXR1cm59fWVsc2UgaWYoZD09PW51bGx8fGQuc3RhcnQ8Yy5sZW5ndGgpcmV0dXJufWZvcig7Oyl7aWYobD10KGEpLGE9ZD1sPT09bnVsbD8iIjphLnNsaWNlKGwuZW5kKSxkPT09IiIpe2lmKGM9dS5nZXROZXh0U2libGluZygpLHF0LiRpc1RleHROb2RlKGMpKXtpZihkPXUuZ2V0VGV4dENvbnRlbnQoKStjLmdldFRleHRDb250ZW50KCksZD10KGQpLGQ9PT1udWxsKXtjIGluc3RhbmNlb2Ygbj9vKGMpOmMubWFya0RpcnR5KCk7YnJlYWt9ZWxzZSBpZihkLnN0YXJ0IT09MClicmVha319ZWxzZSBpZihjPXQoZCksYyE9PW51bGwmJmMuc3RhcnQ9PT0wKWJyZWFrO2lmKGw9PT1udWxsKWJyZWFrO2lmKGwuc3RhcnQ9PT0wJiZxdC4kaXNUZXh0Tm9kZShzKSYmcy5pc1RleHRFbnRpdHkoKSljb250aW51ZTtsZXQgZjtpZihsLnN0YXJ0PT09MD9bZix1XT11LnNwbGl0VGV4dChsLmVuZCk6WyxmLHVdPXUuc3BsaXRUZXh0KGwuc3RhcnQsbC5lbmQpLGw9cihmKSxsLnNldEZvcm1hdChmLmdldEZvcm1hdCgpKSxmLnJlcGxhY2UobCksdT09bnVsbClicmVha319fSk7cmV0dXJuIGU9ZS5yZWdpc3Rlck5vZGVUcmFuc2Zvcm0obixsPT57dmFyIHM9bC5nZXRUZXh0Q29udGVudCgpO2NvbnN0IGE9dChzKTthPT09bnVsbHx8YS5zdGFydCE9PTA/byhsKTpzLmxlbmd0aD5hLmVuZD9sLnNwbGl0VGV4dChhLmVuZCk6KHM9bC5nZXRQcmV2aW91c1NpYmxpbmcoKSxxdC4kaXNUZXh0Tm9kZShzKSYmcy5pc1RleHRFbnRpdHkoKSYmKG8ocyksbyhsKSkscz1sLmdldE5leHRTaWJsaW5nKCkscXQuJGlzVGV4dE5vZGUocykmJnMuaXNUZXh0RW50aXR5KCkmJihvKHMpLGwgaW5zdGFuY2VvZiBuJiZvKGwpKSl9KSxbaSxlXX07Y29uc3QgSVI9Vm87dmFyIGpSPUlSLE1TPXt9LHd1PWhlO01TLnJlZ2lzdGVyRHJhZ29uU3VwcG9ydD1mdW5jdGlvbihlKXtsZXQgdD13aW5kb3cubG9jYXRpb24ub3JpZ2luLG49cj0+e2lmKHIub3JpZ2luPT09dCl7dmFyIG89ZS5nZXRSb290RWxlbWVudCgpO2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1vJiYobz1yLmRhdGEsdHlwZW9mIG89PSJzdHJpbmciKSl7dHJ5e3ZhciBpPUpTT04ucGFyc2Uobyl9Y2F0Y2h7cmV0dXJufWlmKGkmJmkucHJvdG9jb2w9PT0ibnVhbnJpYV9tZXNzYWdpbmciJiZpLnR5cGU9PT0icmVxdWVzdCImJihpPWkucGF5bG9hZCkmJmkuZnVuY3Rpb25JZD09PSJtYWtlQ2hhbmdlcyImJihpPWkuYXJncykpe2NvbnN0W2wscyxhLHUsY109aTtlLnVwZGF0ZSgoKT0+e2NvbnN0IGQ9d3UuJGdldFNlbGVjdGlvbigpO2lmKHd1LiRpc1JhbmdlU2VsZWN0aW9uKGQpKXt2YXIgZj1kLmFuY2hvcjtsZXQgaD1mLmdldE5vZGUoKSxnPTAsbT0wO3d1LiRpc1RleHROb2RlKGgpJiYwPD1sJiYwPD1zJiYoZz1sLG09bCtzLGQuc2V0VGV4dE5vZGVSYW5nZShoLGcsaCxtKSksKGchPT1tfHxhIT09IiIpJiYoZC5pbnNlcnRSYXdUZXh0KGEpLGg9Zi5nZXROb2RlKCkpLHd1LiRpc1RleHROb2RlKGgpJiYoZz11LG09dStjLGY9aC5nZXRUZXh0Q29udGVudFNpemUoKSxnPWc+Zj9mOmcsbT1tPmY/ZjptLGQuc2V0VGV4dE5vZGVSYW5nZShoLGcsaCxtKSksci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX19KX19fX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuLCEwKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuLCEwKX19O2NvbnN0IHpSPU1TO3ZhciBGUj16UixQcj17fSxxcj17fSx2bT17fSxvMD1EbyxCUj1OdCxpbD1oZTtmdW5jdGlvbiBMUyhlLHQsbixyPW51bGwpe2xldCBvPXIhPW51bGw/dC5pc1NlbGVjdGVkKHIpOiEwLGk9aWwuJGlzRWxlbWVudE5vZGUodCkmJnQuZXhjbHVkZUZyb21Db3B5KCJodG1sIik7dmFyIGw9dDtyIT09bnVsbCYmKGw9bzAuJGNsb25lV2l0aFByb3BlcnRpZXModCksbD1pbC4kaXNUZXh0Tm9kZShsKSYmciE9bnVsbD9vMC4kc2xpY2VTZWxlY3RlZFRleHROb2RlQ29udGVudChyLGwpOmwpO2xldCBzPWlsLiRpc0VsZW1lbnROb2RlKGwpP2wuZ2V0Q2hpbGRyZW4oKTpbXSx7ZWxlbWVudDphLGFmdGVyOnV9PWwuZXhwb3J0RE9NKGUpO2lmKCFhKXJldHVybiExO2xldCBjPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtmb3IobGV0IGQ9MDtkPHMubGVuZ3RoO2QrKyl7bGV0IGY9c1tkXSxoPUxTKGUsZixjLHIpOyFvJiZpbC4kaXNFbGVtZW50Tm9kZSh0KSYmaCYmdC5leHRyYWN0V2l0aENoaWxkKGYsciwiaHRtbCIpJiYobz0hMCl9cmV0dXJuIG8mJiFpPyhCUi5pc0hUTUxFbGVtZW50KGEpJiZhLmFwcGVuZChjKSxuLmFwcGVuZChhKSx1JiYoZT11LmNhbGwobCxhKSkmJmEucmVwbGFjZVdpdGgoZSkpOm4uYXBwZW5kKGMpLG99bGV0IERTPW5ldyBTZXQoWyJTVFlMRSIsIlNDUklQVCJdKTtmdW5jdGlvbiBJUyhlLHQsbj1uZXcgTWFwLHIpe2xldCBvPVtdO2lmKERTLmhhcyhlLm5vZGVOYW1lKSlyZXR1cm4gbztsZXQgaT1udWxsO3ZhciBsLHtub2RlTmFtZTpzfT1lLGE9dC5faHRtbENvbnZlcnNpb25zLmdldChzLnRvTG93ZXJDYXNlKCkpO2lmKHM9bnVsbCxhIT09dm9pZCAwKWZvcihsIG9mIGEpYT1sKGUpLGEhPT1udWxsJiYocz09PW51bGx8fHMucHJpb3JpdHk8YS5wcmlvcml0eSkmJihzPWEpO2lmKHM9KGw9cyE9PW51bGw/cy5jb252ZXJzaW9uOm51bGwpP2woZSk6bnVsbCxsPW51bGwscyE9PW51bGwpe2lmKGw9cy5hZnRlcixhPXMubm9kZSxpPUFycmF5LmlzQXJyYXkoYSk/YVthLmxlbmd0aC0xXTphLGkhPT1udWxsKXtmb3IodmFyWyx1XW9mIG4paWYoaT11KGksciksIWkpYnJlYWs7aSYmby5wdXNoKC4uLkFycmF5LmlzQXJyYXkoYSk/YTpbaV0pfXMuZm9yQ2hpbGQhPW51bGwmJm4uc2V0KGUubm9kZU5hbWUscy5mb3JDaGlsZCl9Zm9yKGU9ZS5jaGlsZE5vZGVzLHI9W10sdT0wO3U8ZS5sZW5ndGg7dSsrKXIucHVzaCguLi5JUyhlW3VdLHQsbmV3IE1hcChuKSxpKSk7cmV0dXJuIGwhPW51bGwmJihyPWwocikpLGk9PW51bGw/bz1vLmNvbmNhdChyKTppbC4kaXNFbGVtZW50Tm9kZShpKSYmaS5hcHBlbmQoLi4uciksb312bS4kZ2VuZXJhdGVIdG1sRnJvbU5vZGVzPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIGRvY3VtZW50PiJ1Inx8dHlwZW9mIHdpbmRvdz4idSIpdGhyb3cgRXJyb3IoIlRvIHVzZSAkZ2VuZXJhdGVIdG1sRnJvbU5vZGVzIGluIGhlYWRsZXNzIG1vZGUgcGxlYXNlIGluaXRpYWxpemUgYSBoZWFkbGVzcyBicm93c2VyIGltcGxlbWVudGF0aW9uIHN1Y2ggYXMgSlNEb20gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4iKTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxyPWlsLiRnZXRSb290KCkuZ2V0Q2hpbGRyZW4oKTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKylMUyhlLHJbb10sbix0KTtyZXR1cm4gbi5pbm5lckhUTUx9O3ZtLiRnZW5lcmF0ZU5vZGVzRnJvbURPTT1mdW5jdGlvbihlLHQpe3Q9dC5ib2R5P3QuYm9keS5jaGlsZE5vZGVzOltdO2xldCBuPVtdO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcj10W29dO0RTLmhhcyhyLm5vZGVOYW1lKXx8KHI9SVMocixlKSxyIT09bnVsbCYmKG49bi5jb25jYXQocikpKX1yZXR1cm4gbn07Y29uc3QgV1I9dm07dmFyIFVSPVdSLGpTPVVSLHhwPURvLG1sPU50LGRlPWhlO2Z1bmN0aW9uIHpyKGUpe2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7dC5hcHBlbmQoImNvZGUiLGUpO2ZvcihsZXQgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdC5hcHBlbmQoInYiLGFyZ3VtZW50c1tuXSk7dGhyb3cgRXJyb3IoYE1pbmlmaWVkIExleGljYWwgZXJyb3IgIyR7ZX07IHZpc2l0IGh0dHBzOi8vbGV4aWNhbC5kZXYvZG9jcy9lcnJvcj8ke3R9IGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5gKX1sZXQgelM9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiO2Z1bmN0aW9uIEZTKGUpe2xldCB0PWRlLiRnZXRTZWxlY3Rpb24oKTtpZih0PT1udWxsKXRocm93IEVycm9yKCJFeHBlY3RlZCB2YWxpZCBMZXhpY2FsU2VsZWN0aW9uIik7cmV0dXJuIGRlLiRpc1JhbmdlU2VsZWN0aW9uKHQpJiZ0LmlzQ29sbGFwc2VkKCl8fHQuZ2V0Tm9kZXMoKS5sZW5ndGg9PT0wPyIiOmpTLiRnZW5lcmF0ZUh0bWxGcm9tTm9kZXMoZSx0KX1mdW5jdGlvbiBCUyhlKXtsZXQgdD1kZS4kZ2V0U2VsZWN0aW9uKCk7aWYodD09bnVsbCl0aHJvdyBFcnJvcigiRXhwZWN0ZWQgdmFsaWQgTGV4aWNhbFNlbGVjdGlvbiIpO3JldHVybiBkZS4kaXNSYW5nZVNlbGVjdGlvbih0KSYmdC5pc0NvbGxhcHNlZCgpfHx0LmdldE5vZGVzKCkubGVuZ3RoPT09MD9udWxsOkpTT04uc3RyaW5naWZ5KFVTKGUsdCkpfWZ1bmN0aW9uIHdwKGUsdCxuKXsoZGUuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKG4pfHxtbC4kZmluZE1hdGNoaW5nUGFyZW50KG4uYW5jaG9yLmdldE5vZGUoKSxyPT5kZS5ERVBSRUNBVEVEXyRpc0dyaWRDZWxsTm9kZShyKSkhPT1udWxsJiZtbC4kZmluZE1hdGNoaW5nUGFyZW50KG4uZm9jdXMuZ2V0Tm9kZSgpLHI9PmRlLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKHIpKSE9PW51bGwpJiZ0Lmxlbmd0aD09PTEmJmRlLkRFUFJFQ0FURURfJGlzR3JpZE5vZGUodFswXSk/SFIodCxuLCExLGUpOlZSKHQsbil9ZnVuY3Rpb24gVlIoZSx0KXtsZXQgbj1bXSxyPW51bGw7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2xldCBpPWVbb10sbD1kZS4kaXNMaW5lQnJlYWtOb2RlKGkpO2lmKGx8fGRlLiRpc0RlY29yYXRvck5vZGUoaSkmJmkuaXNJbmxpbmUoKXx8ZGUuJGlzRWxlbWVudE5vZGUoaSkmJmkuaXNJbmxpbmUoKXx8ZGUuJGlzVGV4dE5vZGUoaSl8fGkuaXNQYXJlbnRSZXF1aXJlZCgpKXtpZihyPT09bnVsbCYmKHI9aS5jcmVhdGVQYXJlbnRFbGVtZW50Tm9kZSgpLG4ucHVzaChyKSxsKSljb250aW51ZTtyIT09bnVsbCYmci5hcHBlbmQoaSl9ZWxzZSBuLnB1c2goaSkscj1udWxsfWRlLiRpc1JhbmdlU2VsZWN0aW9uKHQpP3QuaW5zZXJ0Tm9kZXMobik6ZGUuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKHQpJiYoZT10LmFuY2hvci5nZXROb2RlKCksZGUuREVQUkVDQVRFRF8kaXNHcmlkQ2VsbE5vZGUoZSl8fHpyKDQxKSxlLmFwcGVuZCguLi5uKSl9ZnVuY3Rpb24gSFIoZSx0LG4scil7ZS5sZW5ndGg9PT0xJiZkZS5ERVBSRUNBVEVEXyRpc0dyaWROb2RlKGVbMF0pfHx6cig0Mik7dmFyIG89ZVswXTtlPW8uZ2V0Q2hpbGRyZW4oKSxuPW8uZ2V0Rmlyc3RDaGlsZE9yVGhyb3coKS5nZXRDaGlsZHJlblNpemUoKTt2YXIgaT1vLmdldENoaWxkcmVuU2l6ZSgpLGw9bWwuJGZpbmRNYXRjaGluZ1BhcmVudCh0LmFuY2hvci5nZXROb2RlKCksaD0+ZGUuREVQUkVDQVRFRF8kaXNHcmlkQ2VsbE5vZGUoaCkpO3Q9KG89bCYmbWwuJGZpbmRNYXRjaGluZ1BhcmVudChsLGg9PmRlLkRFUFJFQ0FURURfJGlzR3JpZFJvd05vZGUoaCkpKSYmbWwuJGZpbmRNYXRjaGluZ1BhcmVudChvLGg9PmRlLkRFUFJFQ0FURURfJGlzR3JpZE5vZGUoaCkpLGRlLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKGwpJiZkZS5ERVBSRUNBVEVEXyRpc0dyaWRSb3dOb2RlKG8pJiZkZS5ERVBSRUNBVEVEXyRpc0dyaWROb2RlKHQpfHx6cig0Myk7dmFyIHM9by5nZXRJbmRleFdpdGhpblBhcmVudCgpLGE9TWF0aC5taW4odC5nZXRDaGlsZHJlblNpemUoKS0xLHMraS0xKTtpPWwuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSxsPU1hdGgubWluKG8uZ2V0Q2hpbGRyZW5TaXplKCktMSxpK24tMSksbj1NYXRoLm1pbihpLGwpLG89TWF0aC5taW4ocyxhKSxpPU1hdGgubWF4KGksbCkscz1NYXRoLm1heChzLGEpLGE9dC5nZXRDaGlsZHJlbigpLGw9MDtsZXQgdSxjO2ZvcihsZXQgaD1vO2g8PXM7aCsrKXt2YXIgZD1hW2hdO2RlLkRFUFJFQ0FURURfJGlzR3JpZFJvd05vZGUoZCl8fHpyKDI0KTt2YXIgZj1lW2xdO2RlLkRFUFJFQ0FURURfJGlzR3JpZFJvd05vZGUoZil8fHpyKDI0KSxkPWQuZ2V0Q2hpbGRyZW4oKSxmPWYuZ2V0Q2hpbGRyZW4oKTtsZXQgZz0wO2ZvcihsZXQgbT1uO208PWk7bSsrKXtsZXQgXz1kW21dO2RlLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKF8pfHx6cigyNSk7bGV0IHY9ZltnXTtkZS5ERVBSRUNBVEVEXyRpc0dyaWRDZWxsTm9kZSh2KXx8enIoMjUpLGg9PT1vJiZtPT09bj91PV8uZ2V0S2V5KCk6aD09PXMmJm09PT1pJiYoYz1fLmdldEtleSgpKTtsZXQgeT1fLmdldENoaWxkcmVuKCk7di5nZXRDaGlsZHJlbigpLmZvckVhY2goeD0+e2RlLiRpc1RleHROb2RlKHgpJiZkZS4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpLmFwcGVuZCh4KSxfLmFwcGVuZCh4KX0pLHkuZm9yRWFjaCh4PT54LnJlbW92ZSgpKSxnKyt9bCsrfXUmJmMmJihlPWRlLkRFUFJFQ0FURURfJGNyZWF0ZUdyaWRTZWxlY3Rpb24oKSxlLnNldCh0LmdldEtleSgpLHUsYyksZGUuJHNldFNlbGVjdGlvbihlKSxyLmRpc3BhdGNoQ29tbWFuZChkZS5TRUxFQ1RJT05fQ0hBTkdFX0NPTU1BTkQsdm9pZCAwKSl9ZnVuY3Rpb24gV1MoZSx0LG4scj1bXSl7bGV0IG89dCE9bnVsbD9uLmlzU2VsZWN0ZWQodCk6ITAsaT1kZS4kaXNFbGVtZW50Tm9kZShuKSYmbi5leGNsdWRlRnJvbUNvcHkoImh0bWwiKTt2YXIgbD1uO2lmKHQhPT1udWxsKXt2YXIgcz14cC4kY2xvbmVXaXRoUHJvcGVydGllcyhuKTtsPXM9ZGUuJGlzVGV4dE5vZGUocykmJnQhPW51bGw/eHAuJHNsaWNlU2VsZWN0ZWRUZXh0Tm9kZUNvbnRlbnQodCxzKTpzfWxldCBhPWRlLiRpc0VsZW1lbnROb2RlKGwpP2wuZ2V0Q2hpbGRyZW4oKTpbXTt2YXIgdT1sO3M9dS5leHBvcnRKU09OKCk7dmFyIGM9dS5jb25zdHJ1Y3RvcjtzLnR5cGUhPT1jLmdldFR5cGUoKSYmenIoNTgsYy5uYW1lKTtsZXQgZD1zLmNoaWxkcmVuO2ZvcihkZS4kaXNFbGVtZW50Tm9kZSh1KSYmKEFycmF5LmlzQXJyYXkoZCl8fHpyKDU5LGMubmFtZSkpLGRlLiRpc1RleHROb2RlKGwpJiYobD1sLl9fdGV4dCwwPGwubGVuZ3RoP3MudGV4dD1sOm89ITEpLGw9MDtsPGEubGVuZ3RoO2wrKyl1PWFbbF0sYz1XUyhlLHQsdSxzLmNoaWxkcmVuKSwhbyYmZGUuJGlzRWxlbWVudE5vZGUobikmJmMmJm4uZXh0cmFjdFdpdGhDaGlsZCh1LHQsImNsb25lIikmJihvPSEwKTtpZihvJiYhaSlyLnB1c2gocyk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHMuY2hpbGRyZW4pKWZvcihlPTA7ZTxzLmNoaWxkcmVuLmxlbmd0aDtlKyspci5wdXNoKHMuY2hpbGRyZW5bZV0pO3JldHVybiBvfWZ1bmN0aW9uIFVTKGUsdCl7bGV0IG49W10scj1kZS4kZ2V0Um9vdCgpLmdldENoaWxkcmVuKCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspV1MoZSx0LHJbb10sbik7cmV0dXJue25hbWVzcGFjZTplLl9jb25maWcubmFtZXNwYWNlLG5vZGVzOm59fWZ1bmN0aW9uIFZTKGUpe2xldCB0PVtdO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1kZS4kcGFyc2VTZXJpYWxpemVkTm9kZShlW25dKTtkZS4kaXNUZXh0Tm9kZShyKSYmeHAuJGFkZE5vZGVTdHlsZShyKSx0LnB1c2gocil9cmV0dXJuIHR9bGV0IGppPW51bGw7ZnVuY3Rpb24gaTAoZSx0KXt2YXIgbj16Uz8oZS5fd2luZG93fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpOm51bGw7aWYoIW4pcmV0dXJuITE7dmFyIHI9bi5hbmNob3JOb2RlO2lmKG49bi5mb2N1c05vZGUsciE9PW51bGwmJm4hPT1udWxsJiYhZGUuaXNTZWxlY3Rpb25XaXRoaW5FZGl0b3IoZSxyLG4pfHwodC5wcmV2ZW50RGVmYXVsdCgpLHQ9dC5jbGlwYm9hcmREYXRhLHI9ZGUuJGdldFNlbGVjdGlvbigpLHQ9PT1udWxsfHxyPT09bnVsbCkpcmV0dXJuITE7bj1GUyhlKSxlPUJTKGUpO2xldCBvPSIiO3JldHVybiByIT09bnVsbCYmKG89ci5nZXRUZXh0Q29udGVudCgpKSxuIT09bnVsbCYmdC5zZXREYXRhKCJ0ZXh0L2h0bWwiLG4pLGUhPT1udWxsJiZ0LnNldERhdGEoImFwcGxpY2F0aW9uL3gtbGV4aWNhbC1lZGl0b3IiLGUpLHQuc2V0RGF0YSgidGV4dC9wbGFpbiIsbyksITB9cXIuJGdlbmVyYXRlSlNPTkZyb21TZWxlY3RlZE5vZGVzPVVTO3FyLiRnZW5lcmF0ZU5vZGVzRnJvbVNlcmlhbGl6ZWROb2Rlcz1WUztxci4kZ2V0SHRtbENvbnRlbnQ9RlM7cXIuJGdldExleGljYWxDb250ZW50PUJTO3FyLiRpbnNlcnREYXRhVHJhbnNmZXJGb3JQbGFpblRleHQ9ZnVuY3Rpb24oZSx0KXtlPWUuZ2V0RGF0YSgidGV4dC9wbGFpbiIpfHxlLmdldERhdGEoInRleHQvdXJpLWxpc3QiKSxlIT1udWxsJiZ0Lmluc2VydFJhd1RleHQoZSl9O3FyLiRpbnNlcnREYXRhVHJhbnNmZXJGb3JSaWNoVGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5nZXREYXRhKCJhcHBsaWNhdGlvbi94LWxleGljYWwtZWRpdG9yIik7aWYocil0cnl7bGV0IGw9SlNPTi5wYXJzZShyKTtpZihsLm5hbWVzcGFjZT09PW4uX2NvbmZpZy5uYW1lc3BhY2UmJkFycmF5LmlzQXJyYXkobC5ub2Rlcykpe2xldCBzPVZTKGwubm9kZXMpO3JldHVybiB3cChuLHMsdCl9fWNhdGNoe31pZihyPWUuZ2V0RGF0YSgidGV4dC9odG1sIikpdHJ5e3ZhciBvPW5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcociwidGV4dC9odG1sIiksaT1qUy4kZ2VuZXJhdGVOb2Rlc0Zyb21ET00obixvKTtyZXR1cm4gd3AobixpLHQpfWNhdGNoe31pZihlPWUuZ2V0RGF0YSgidGV4dC9wbGFpbiIpfHxlLmdldERhdGEoInRleHQvdXJpLWxpc3QiKSxlIT1udWxsKWlmKGRlLiRpc1JhbmdlU2VsZWN0aW9uKHQpKWZvcihlPWUuc3BsaXQoLyhccj9cbnxcdCkvKSxuPWUubGVuZ3RoLG89MDtvPG47bysrKWk9ZVtvXSxpPT09YApgfHxpPT09YFxyCmA/dC5pbnNlcnRQYXJhZ3JhcGgoKTppPT09IgkiP3QuaW5zZXJ0Tm9kZXMoW2RlLiRjcmVhdGVUYWJOb2RlKCldKTp0Lmluc2VydFRleHQoaSk7ZWxzZSB0Lmluc2VydFJhd1RleHQoZSl9O3FyLiRpbnNlcnRHZW5lcmF0ZWROb2Rlcz13cDtxci5jb3B5VG9DbGlwYm9hcmQ9YXN5bmMgZnVuY3Rpb24oZSx0KXtpZihqaSE9PW51bGwpcmV0dXJuITE7aWYodCE9PW51bGwpcmV0dXJuIG5ldyBQcm9taXNlKGw9PntlLnVwZGF0ZSgoKT0+e2woaTAoZSx0KSl9KX0pO3ZhciBuPWUuZ2V0Um9vdEVsZW1lbnQoKTtsZXQgcj1lLl93aW5kb3c9PW51bGw/d2luZG93LmRvY3VtZW50OmUuX3dpbmRvdy5kb2N1bWVudCxvPXpTPyhlLl93aW5kb3d8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKCk6bnVsbDtpZihuPT09bnVsbHx8bz09PW51bGwpcmV0dXJuITE7bGV0IGk9ci5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIGkuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246IGZpeGVkOyB0b3A6IC0xMDAwcHg7IixpLmFwcGVuZChyLmNyZWF0ZVRleHROb2RlKCIjIikpLG4uYXBwZW5kKGkpLG49bmV3IFJhbmdlLG4uc2V0U3RhcnQoaSwwKSxuLnNldEVuZChpLDEpLG8ucmVtb3ZlQWxsUmFuZ2VzKCksby5hZGRSYW5nZShuKSxuZXcgUHJvbWlzZShsPT57bGV0IHM9ZS5yZWdpc3RlckNvbW1hbmQoZGUuQ09QWV9DT01NQU5ELGE9PihtbC5vYmplY3RLbGFzc0VxdWFscyhhLENsaXBib2FyZEV2ZW50KSYmKHMoKSxqaSE9PW51bGwmJih3aW5kb3cuY2xlYXJUaW1lb3V0KGppKSxqaT1udWxsKSxsKGkwKGUsYSkpKSwhMCksZGUuQ09NTUFORF9QUklPUklUWV9DUklUSUNBTCk7amk9d2luZG93LnNldFRpbWVvdXQoKCk9PntzKCksamk9bnVsbCxsKCExKX0sNTApLHIuZXhlY0NvbW1hbmQoImNvcHkiKSxpLnJlbW92ZSgpfSl9O2NvbnN0IEtSPXFyO3ZhciBHUj1LUixGYz1HUixfdT1Ebyx2cj1OdCxBPWhlO2Z1bmN0aW9uIGwwKGUsdCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50PCJ1Ij8oZT1kb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KGUsdCksZT09PW51bGw/bnVsbDp7bm9kZTplLnN0YXJ0Q29udGFpbmVyLG9mZnNldDplLnN0YXJ0T2Zmc2V0fSk6ZG9jdW1lbnQuY2FyZXRQb3NpdGlvbkZyb21Qb2ludCE9PSJ1bmRlZmluZWQiPyhlPWRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQoZSx0KSxlPT09bnVsbD9udWxsOntub2RlOmUub2Zmc2V0Tm9kZSxvZmZzZXQ6ZS5vZmZzZXR9KTpudWxsfWxldCBYbD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudDwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudDwidSIsWVI9WGwmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQ/ZG9jdW1lbnQuZG9jdW1lbnRNb2RlOm51bGwsWFI9WGwmJiJJbnB1dEV2ZW50ImluIHdpbmRvdyYmIVlSPyJnZXRUYXJnZXRSYW5nZXMiaW4gbmV3IHdpbmRvdy5JbnB1dEV2ZW50KCJpbnB1dCIpOiExLFFSPVhsJiYvVmVyc2lvblwvW1xkLl0rLipTYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSlI9WGwmJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhd2luZG93Lk1TU3RyZWFtLFpSPVhsJiYvXig/PS4qQ2hyb21lKS4qL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxxUj1YbCYmL0FwcGxlV2ViS2l0XC9bXGQuXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiFaUixfcD1BLmNyZWF0ZUNvbW1hbmQoIkRSQUdfRFJPUF9QQVNURV9GSUxFIikseW09Y2xhc3MgSFMgZXh0ZW5kcyBBLkVsZW1lbnROb2Rle3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuInF1b3RlIn1zdGF0aWMgY2xvbmUodCl7cmV0dXJuIG5ldyBIUyh0Ll9fa2V5KX1jb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1jcmVhdGVET00odCl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYmxvY2txdW90ZSIpO3JldHVybiB2ci5hZGRDbGFzc05hbWVzVG9FbGVtZW50KG4sdC50aGVtZS5xdW90ZSksbn11cGRhdGVET00oKXtyZXR1cm4hMX1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJue2Jsb2NrcXVvdGU6KCk9Pih7Y29udmVyc2lvbjplUCxwcmlvcml0eTowfSl9fWV4cG9ydERPTSh0KXtpZih7ZWxlbWVudDp0fT1zdXBlci5leHBvcnRET00odCksdCYmdnIuaXNIVE1MRWxlbWVudCh0KSl7dGhpcy5pc0VtcHR5KCkmJnQuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpO3ZhciBuPXRoaXMuZ2V0Rm9ybWF0VHlwZSgpO3Quc3R5bGUudGV4dEFsaWduPW4sKG49dGhpcy5nZXREaXJlY3Rpb24oKSkmJih0LmRpcj1uKX1yZXR1cm57ZWxlbWVudDp0fX1zdGF0aWMgaW1wb3J0SlNPTih0KXtsZXQgbj14bSgpO3JldHVybiBuLnNldEZvcm1hdCh0LmZvcm1hdCksbi5zZXRJbmRlbnQodC5pbmRlbnQpLG4uc2V0RGlyZWN0aW9uKHQuZGlyZWN0aW9uKSxufWV4cG9ydEpTT04oKXtyZXR1cm57Li4uc3VwZXIuZXhwb3J0SlNPTigpLHR5cGU6InF1b3RlIn19aW5zZXJ0TmV3QWZ0ZXIodCxuKXt0PUEuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKTtsZXQgcj10aGlzLmdldERpcmVjdGlvbigpO3JldHVybiB0LnNldERpcmVjdGlvbihyKSx0aGlzLmluc2VydEFmdGVyKHQsbiksdH1jb2xsYXBzZUF0U3RhcnQoKXtsZXQgdD1BLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKG49PnQuYXBwZW5kKG4pKSx0aGlzLnJlcGxhY2UodCksITB9fTtmdW5jdGlvbiB4bSgpe3JldHVybiBBLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcgeW0pfWxldCB3bT1jbGFzcyBLUyBleHRlbmRzIEEuRWxlbWVudE5vZGV7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4iaGVhZGluZyJ9c3RhdGljIGNsb25lKHQpe3JldHVybiBuZXcgS1ModC5fX3RhZyx0Ll9fa2V5KX1jb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKG4pLHRoaXMuX190YWc9dH1nZXRUYWcoKXtyZXR1cm4gdGhpcy5fX3RhZ31jcmVhdGVET00odCl7bGV0IG49dGhpcy5fX3RhZyxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobik7cmV0dXJuIHQ9dC50aGVtZS5oZWFkaW5nLHQhPT12b2lkIDAmJnZyLmFkZENsYXNzTmFtZXNUb0VsZW1lbnQocix0W25dKSxyfXVwZGF0ZURPTSgpe3JldHVybiExfXN0YXRpYyBpbXBvcnRET00oKXtyZXR1cm57aDE6KCk9Pih7Y29udmVyc2lvbjp6aSxwcmlvcml0eTowfSksaDI6KCk9Pih7Y29udmVyc2lvbjp6aSxwcmlvcml0eTowfSksaDM6KCk9Pih7Y29udmVyc2lvbjp6aSxwcmlvcml0eTowfSksaDQ6KCk9Pih7Y29udmVyc2lvbjp6aSxwcmlvcml0eTowfSksaDU6KCk9Pih7Y29udmVyc2lvbjp6aSxwcmlvcml0eTowfSksaDY6KCk9Pih7Y29udmVyc2lvbjp6aSxwcmlvcml0eTowfSkscDp0PT4odD10LmZpcnN0Q2hpbGQsdCE9PW51bGwmJnMwKHQpP3tjb252ZXJzaW9uOigpPT4oe25vZGU6bnVsbH0pLHByaW9yaXR5OjN9Om51bGwpLHNwYW46dD0+czAodCk/e2NvbnZlcnNpb246KCk9Pih7bm9kZTpsbCgiaDEiKX0pLHByaW9yaXR5OjN9Om51bGx9fWV4cG9ydERPTSh0KXtpZih7ZWxlbWVudDp0fT1zdXBlci5leHBvcnRET00odCksdCYmdnIuaXNIVE1MRWxlbWVudCh0KSl7dGhpcy5pc0VtcHR5KCkmJnQuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpO3ZhciBuPXRoaXMuZ2V0Rm9ybWF0VHlwZSgpO3Quc3R5bGUudGV4dEFsaWduPW4sKG49dGhpcy5nZXREaXJlY3Rpb24oKSkmJih0LmRpcj1uKX1yZXR1cm57ZWxlbWVudDp0fX1zdGF0aWMgaW1wb3J0SlNPTih0KXtsZXQgbj1sbCh0LnRhZyk7cmV0dXJuIG4uc2V0Rm9ybWF0KHQuZm9ybWF0KSxuLnNldEluZGVudCh0LmluZGVudCksbi5zZXREaXJlY3Rpb24odC5kaXJlY3Rpb24pLG59ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksdGFnOnRoaXMuZ2V0VGFnKCksdHlwZToiaGVhZGluZyIsdmVyc2lvbjoxfX1pbnNlcnROZXdBZnRlcih0LG49ITApe3Q9dD90LmFuY2hvci5vZmZzZXQ6MCx0PTA8dCYmdDx0aGlzLmdldFRleHRDb250ZW50U2l6ZSgpP2xsKHRoaXMuZ2V0VGFnKCkpOkEuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKTtsZXQgcj10aGlzLmdldERpcmVjdGlvbigpO3JldHVybiB0LnNldERpcmVjdGlvbihyKSx0aGlzLmluc2VydEFmdGVyKHQsbiksdH1jb2xsYXBzZUF0U3RhcnQoKXtsZXQgdD10aGlzLmlzRW1wdHkoKT9BLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk6bGwodGhpcy5nZXRUYWcoKSk7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKG49PnQuYXBwZW5kKG4pKSx0aGlzLnJlcGxhY2UodCksITB9ZXh0cmFjdFdpdGhDaGlsZCgpe3JldHVybiEwfX07ZnVuY3Rpb24gczAoZSl7cmV0dXJuIGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJzcGFuIj9lLnN0eWxlLmZvbnRTaXplPT09IjI2cHQiOiExfWZ1bmN0aW9uIHppKGUpe2xldCB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPW51bGw7cmV0dXJuKHQ9PT0iaDEifHx0PT09ImgyInx8dD09PSJoMyJ8fHQ9PT0iaDQifHx0PT09Img1Inx8dD09PSJoNiIpJiYobj1sbCh0KSxlLnN0eWxlIT09bnVsbCYmbi5zZXRGb3JtYXQoZS5zdHlsZS50ZXh0QWxpZ24pKSx7bm9kZTpufX1mdW5jdGlvbiBlUChlKXtsZXQgdD14bSgpO3JldHVybiBlLnN0eWxlIT09bnVsbCYmdC5zZXRGb3JtYXQoZS5zdHlsZS50ZXh0QWxpZ24pLHtub2RlOnR9fWZ1bmN0aW9uIGxsKGUpe3JldHVybiBBLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcgd20oZSkpfWZ1bmN0aW9uIHRQKGUsdCl7ZS5wcmV2ZW50RGVmYXVsdCgpLHQudXBkYXRlKCgpPT57bGV0IG49QS4kZ2V0U2VsZWN0aW9uKCkscj1lIGluc3RhbmNlb2YgSW5wdXRFdmVudHx8ZSBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQ/bnVsbDplLmNsaXBib2FyZERhdGE7ciE9bnVsbCYmKEEuJGlzUmFuZ2VTZWxlY3Rpb24obil8fEEuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKG4pKSYmRmMuJGluc2VydERhdGFUcmFuc2ZlckZvclJpY2hUZXh0KHIsbix0KX0se3RhZzoicGFzdGUifSl9YXN5bmMgZnVuY3Rpb24gblAoZSx0KXthd2FpdCBGYy5jb3B5VG9DbGlwYm9hcmQodCx2ci5vYmplY3RLbGFzc0VxdWFscyhlLENsaXBib2FyZEV2ZW50KT9lOm51bGwpLHQudXBkYXRlKCgpPT57bGV0IG49QS4kZ2V0U2VsZWN0aW9uKCk7QS4kaXNSYW5nZVNlbGVjdGlvbihuKT9uLnJlbW92ZVRleHQoKTpBLiRpc05vZGVTZWxlY3Rpb24obikmJm4uZ2V0Tm9kZXMoKS5mb3JFYWNoKHI9PnIucmVtb3ZlKCkpfSl9ZnVuY3Rpb24ga3MoZSl7bGV0IHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgRHJhZ0V2ZW50P3Q9ZS5kYXRhVHJhbnNmZXI6ZSBpbnN0YW5jZW9mIENsaXBib2FyZEV2ZW50JiYodD1lLmNsaXBib2FyZERhdGEpLHQ9PT1udWxsKXJldHVyblshMSxbXSwhMV07dmFyIG49dC50eXBlcztyZXR1cm4gZT1uLmluY2x1ZGVzKCJGaWxlcyIpLG49bi5pbmNsdWRlcygidGV4dC9odG1sIil8fG4uaW5jbHVkZXMoInRleHQvcGxhaW4iKSxbZSxBcnJheS5mcm9tKHQuZmlsZXMpLG5dfWZ1bmN0aW9uIGEwKGUpe3ZhciB0PUEuJGdldFNlbGVjdGlvbigpO2lmKCFBLiRpc1JhbmdlU2VsZWN0aW9uKHQpKXJldHVybiExO2xldCBuPW5ldyBTZXQ7dD10LmdldE5vZGVzKCk7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciByPXRbaV0sbz1yLmdldEtleSgpO24uaGFzKG8pfHwocj12ci4kZ2V0TmVhcmVzdEJsb2NrRWxlbWVudEFuY2VzdG9yT3JUaHJvdyhyKSxvPXIuZ2V0S2V5KCksci5jYW5JbmRlbnQoKSYmIW4uaGFzKG8pJiYobi5hZGQobyksZShyKSkpfXJldHVybiAwPG4uc2l6ZX1mdW5jdGlvbiBTdShlKXtyZXR1cm4gZT1BLiRnZXROZWFyZXN0Tm9kZUZyb21ET01Ob2RlKGUpLEEuJGlzRGVjb3JhdG9yTm9kZShlKX1Qci4kY3JlYXRlSGVhZGluZ05vZGU9bGw7UHIuJGNyZWF0ZVF1b3RlTm9kZT14bTtQci4kaXNIZWFkaW5nTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHdtfTtQci4kaXNRdW90ZU5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB5bX07UHIuRFJBR19EUk9QX1BBU1RFPV9wO1ByLkhlYWRpbmdOb2RlPXdtO1ByLlF1b3RlTm9kZT15bTtQci5ldmVudEZpbGVzPWtzO1ByLnJlZ2lzdGVyUmljaFRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZyLm1lcmdlUmVnaXN0ZXIoZS5yZWdpc3RlckNvbW1hbmQoQS5DTElDS19DT01NQU5ELCgpPT57Y29uc3QgdD1BLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gQS4kaXNOb2RlU2VsZWN0aW9uKHQpPyh0LmNsZWFyKCksITApOiExfSwwKSxlLnJlZ2lzdGVyQ29tbWFuZChBLkRFTEVURV9DSEFSQUNURVJfQ09NTUFORCx0PT57Y29uc3Qgbj1BLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gQS4kaXNSYW5nZVNlbGVjdGlvbihuKT8obi5kZWxldGVDaGFyYWN0ZXIodCksITApOiExfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLkRFTEVURV9XT1JEX0NPTU1BTkQsdD0+e2NvbnN0IG49QS4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIEEuJGlzUmFuZ2VTZWxlY3Rpb24obik/KG4uZGVsZXRlV29yZCh0KSwhMCk6ITF9LEEuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLGUucmVnaXN0ZXJDb21tYW5kKEEuREVMRVRFX0xJTkVfQ09NTUFORCx0PT57Y29uc3Qgbj1BLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gQS4kaXNSYW5nZVNlbGVjdGlvbihuKT8obi5kZWxldGVMaW5lKHQpLCEwKTohMX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5DT05UUk9MTEVEX1RFWFRfSU5TRVJUSU9OX0NPTU1BTkQsdD0+e2NvbnN0IG49QS4kZ2V0U2VsZWN0aW9uKCk7aWYodHlwZW9mIHQ9PSJzdHJpbmciKUEuJGlzUmFuZ2VTZWxlY3Rpb24obik/bi5pbnNlcnRUZXh0KHQpOkEuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKG4pO2Vsc2V7aWYoIUEuJGlzUmFuZ2VTZWxlY3Rpb24obikmJiFBLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihuKSlyZXR1cm4hMTtjb25zdCByPXQuZGF0YVRyYW5zZmVyO3IhPW51bGw/RmMuJGluc2VydERhdGFUcmFuc2ZlckZvclJpY2hUZXh0KHIsbixlKTpBLiRpc1JhbmdlU2VsZWN0aW9uKG4pJiYodD10LmRhdGEpJiZuLmluc2VydFRleHQodCl9cmV0dXJuITB9LEEuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLGUucmVnaXN0ZXJDb21tYW5kKEEuUkVNT1ZFX1RFWFRfQ09NTUFORCwoKT0+e2NvbnN0IHQ9QS4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIEEuJGlzUmFuZ2VTZWxlY3Rpb24odCk/KHQucmVtb3ZlVGV4dCgpLCEwKTohMX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5GT1JNQVRfVEVYVF9DT01NQU5ELHQ9Pntjb25zdCBuPUEuJGdldFNlbGVjdGlvbigpO3JldHVybiBBLiRpc1JhbmdlU2VsZWN0aW9uKG4pPyhuLmZvcm1hdFRleHQodCksITApOiExfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLkZPUk1BVF9FTEVNRU5UX0NPTU1BTkQsdD0+e3ZhciBuPUEuJGdldFNlbGVjdGlvbigpO2lmKCFBLiRpc1JhbmdlU2VsZWN0aW9uKG4pJiYhQS4kaXNOb2RlU2VsZWN0aW9uKG4pKXJldHVybiExO249bi5nZXROb2RlcygpO2Zvcihjb25zdCByIG9mIG4pbj12ci4kZmluZE1hdGNoaW5nUGFyZW50KHIsbz0+QS4kaXNFbGVtZW50Tm9kZShvKSYmIW8uaXNJbmxpbmUoKSksbiE9PW51bGwmJm4uc2V0Rm9ybWF0KHQpO3JldHVybiEwfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLklOU0VSVF9MSU5FX0JSRUFLX0NPTU1BTkQsdD0+e2NvbnN0IG49QS4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIEEuJGlzUmFuZ2VTZWxlY3Rpb24obik/KG4uaW5zZXJ0TGluZUJyZWFrKHQpLCEwKTohMX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5JTlNFUlRfUEFSQUdSQVBIX0NPTU1BTkQsKCk9Pntjb25zdCB0PUEuJGdldFNlbGVjdGlvbigpO3JldHVybiBBLiRpc1JhbmdlU2VsZWN0aW9uKHQpPyh0Lmluc2VydFBhcmFncmFwaCgpLCEwKTohMX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5JTlNFUlRfVEFCX0NPTU1BTkQsKCk9PihBLiRpbnNlcnROb2RlcyhbQS4kY3JlYXRlVGFiTm9kZSgpXSksITApLEEuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLGUucmVnaXN0ZXJDb21tYW5kKEEuSU5ERU5UX0NPTlRFTlRfQ09NTUFORCwoKT0+YTAodD0+e2NvbnN0IG49dC5nZXRJbmRlbnQoKTt0LnNldEluZGVudChuKzEpfSksQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5PVVRERU5UX0NPTlRFTlRfQ09NTUFORCwoKT0+YTAodD0+e2NvbnN0IG49dC5nZXRJbmRlbnQoKTswPG4mJnQuc2V0SW5kZW50KG4tMSl9KSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLktFWV9BUlJPV19VUF9DT01NQU5ELHQ9Pnt2YXIgbj1BLiRnZXRTZWxlY3Rpb24oKTtpZihBLiRpc05vZGVTZWxlY3Rpb24obikmJiFTdSh0LnRhcmdldCkpe2lmKHQ9bi5nZXROb2RlcygpLDA8dC5sZW5ndGgpcmV0dXJuIHRbMF0uc2VsZWN0UHJldmlvdXMoKSwhMH1lbHNlIGlmKEEuJGlzUmFuZ2VTZWxlY3Rpb24obikmJihuPUEuJGdldEFkamFjZW50Tm9kZShuLmZvY3VzLCEwKSwhdC5zaGlmdEtleSYmQS4kaXNEZWNvcmF0b3JOb2RlKG4pJiYhbi5pc0lzb2xhdGVkKCkmJiFuLmlzSW5saW5lKCkpKXJldHVybiBuLnNlbGVjdFByZXZpb3VzKCksdC5wcmV2ZW50RGVmYXVsdCgpLCEwO3JldHVybiExfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLktFWV9BUlJPV19ET1dOX0NPTU1BTkQsdD0+e3ZhciBuPUEuJGdldFNlbGVjdGlvbigpO2lmKEEuJGlzTm9kZVNlbGVjdGlvbihuKSl7aWYodD1uLmdldE5vZGVzKCksMDx0Lmxlbmd0aClyZXR1cm4gdFswXS5zZWxlY3ROZXh0KDAsMCksITB9ZWxzZSBpZihBLiRpc1JhbmdlU2VsZWN0aW9uKG4pKXtsZXQgcj1uLmZvY3VzO2lmKHIua2V5PT09InJvb3QiJiZyLm9mZnNldD09PUEuJGdldFJvb3QoKS5nZXRDaGlsZHJlblNpemUoKSlyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLCEwO2lmKG49QS4kZ2V0QWRqYWNlbnROb2RlKG4uZm9jdXMsITEpLCF0LnNoaWZ0S2V5JiZBLiRpc0RlY29yYXRvck5vZGUobikmJiFuLmlzSXNvbGF0ZWQoKSYmIW4uaXNJbmxpbmUoKSlyZXR1cm4gbi5zZWxlY3ROZXh0KCksdC5wcmV2ZW50RGVmYXVsdCgpLCEwfXJldHVybiExfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLktFWV9BUlJPV19MRUZUX0NPTU1BTkQsdD0+e2NvbnN0IG49QS4kZ2V0U2VsZWN0aW9uKCk7aWYoQS4kaXNOb2RlU2VsZWN0aW9uKG4pKXt2YXIgcj1uLmdldE5vZGVzKCk7aWYoMDxyLmxlbmd0aClyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLHJbMF0uc2VsZWN0UHJldmlvdXMoKSwhMH1yZXR1cm4gQS4kaXNSYW5nZVNlbGVjdGlvbihuKSYmX3UuJHNob3VsZE92ZXJyaWRlRGVmYXVsdENoYXJhY3RlclNlbGVjdGlvbihuLCEwKT8ocj10LnNoaWZ0S2V5LHQucHJldmVudERlZmF1bHQoKSxfdS4kbW92ZUNoYXJhY3RlcihuLHIsITApLCEwKTohMX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5LRVlfQVJST1dfUklHSFRfQ09NTUFORCx0PT57Y29uc3Qgbj1BLiRnZXRTZWxlY3Rpb24oKTtpZihBLiRpc05vZGVTZWxlY3Rpb24obikmJiFTdSh0LnRhcmdldCkpe3ZhciByPW4uZ2V0Tm9kZXMoKTtpZigwPHIubGVuZ3RoKXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksclswXS5zZWxlY3ROZXh0KDAsMCksITB9cmV0dXJuIEEuJGlzUmFuZ2VTZWxlY3Rpb24obik/KHI9dC5zaGlmdEtleSxfdS4kc2hvdWxkT3ZlcnJpZGVEZWZhdWx0Q2hhcmFjdGVyU2VsZWN0aW9uKG4sITEpPyh0LnByZXZlbnREZWZhdWx0KCksX3UuJG1vdmVDaGFyYWN0ZXIobixyLCExKSwhMCk6ITEpOiExfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLktFWV9CQUNLU1BBQ0VfQ09NTUFORCx0PT57aWYoU3UodC50YXJnZXQpKXJldHVybiExO2NvbnN0IG49QS4kZ2V0U2VsZWN0aW9uKCk7aWYoIUEuJGlzUmFuZ2VTZWxlY3Rpb24obikpcmV0dXJuITE7dC5wcmV2ZW50RGVmYXVsdCgpLHthbmNob3I6dH09bjtjb25zdCByPXQuZ2V0Tm9kZSgpO3JldHVybiBuLmlzQ29sbGFwc2VkKCkmJnQub2Zmc2V0PT09MCYmIUEuJGlzUm9vdE5vZGUocikmJjA8dnIuJGdldE5lYXJlc3RCbG9ja0VsZW1lbnRBbmNlc3Rvck9yVGhyb3cocikuZ2V0SW5kZW50KCk/ZS5kaXNwYXRjaENvbW1hbmQoQS5PVVRERU5UX0NPTlRFTlRfQ09NTUFORCx2b2lkIDApOmUuZGlzcGF0Y2hDb21tYW5kKEEuREVMRVRFX0NIQVJBQ1RFUl9DT01NQU5ELCEwKX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5LRVlfREVMRVRFX0NPTU1BTkQsdD0+e2lmKFN1KHQudGFyZ2V0KSlyZXR1cm4hMTtjb25zdCBuPUEuJGdldFNlbGVjdGlvbigpO3JldHVybiBBLiRpc1JhbmdlU2VsZWN0aW9uKG4pPyh0LnByZXZlbnREZWZhdWx0KCksZS5kaXNwYXRjaENvbW1hbmQoQS5ERUxFVEVfQ0hBUkFDVEVSX0NPTU1BTkQsITEpKTohMX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5LRVlfRU5URVJfQ09NTUFORCx0PT57Y29uc3Qgbj1BLiRnZXRTZWxlY3Rpb24oKTtpZighQS4kaXNSYW5nZVNlbGVjdGlvbihuKSlyZXR1cm4hMTtpZih0IT09bnVsbCl7aWYoKEpSfHxRUnx8cVIpJiZYUilyZXR1cm4hMTtpZih0LnByZXZlbnREZWZhdWx0KCksdC5zaGlmdEtleSlyZXR1cm4gZS5kaXNwYXRjaENvbW1hbmQoQS5JTlNFUlRfTElORV9CUkVBS19DT01NQU5ELCExKX1yZXR1cm4gZS5kaXNwYXRjaENvbW1hbmQoQS5JTlNFUlRfUEFSQUdSQVBIX0NPTU1BTkQsdm9pZCAwKX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5LRVlfRVNDQVBFX0NPTU1BTkQsKCk9Pntjb25zdCB0PUEuJGdldFNlbGVjdGlvbigpO3JldHVybiBBLiRpc1JhbmdlU2VsZWN0aW9uKHQpPyhlLmJsdXIoKSwhMCk6ITF9LEEuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLGUucmVnaXN0ZXJDb21tYW5kKEEuRFJPUF9DT01NQU5ELHQ9Pntjb25zdFssbl09a3ModCk7aWYoMDxuLmxlbmd0aCl7dmFyIHI9bDAodC5jbGllbnRYLHQuY2xpZW50WSk7aWYociE9PW51bGwpe2NvbnN0e29mZnNldDppLG5vZGU6bH09cjt2YXIgbz1BLiRnZXROZWFyZXN0Tm9kZUZyb21ET01Ob2RlKGwpO2lmKG8hPT1udWxsKXtpZihyPUEuJGNyZWF0ZVJhbmdlU2VsZWN0aW9uKCksQS4kaXNUZXh0Tm9kZShvKSlyLmFuY2hvci5zZXQoby5nZXRLZXkoKSxpLCJ0ZXh0Iiksci5mb2N1cy5zZXQoby5nZXRLZXkoKSxpLCJ0ZXh0Iik7ZWxzZXtjb25zdCBzPW8uZ2V0UGFyZW50T3JUaHJvdygpLmdldEtleSgpO289by5nZXRJbmRleFdpdGhpblBhcmVudCgpKzEsci5hbmNob3Iuc2V0KHMsbywiZWxlbWVudCIpLHIuZm9jdXMuc2V0KHMsbywiZWxlbWVudCIpfXI9QS4kbm9ybWFsaXplU2VsZWN0aW9uX19FWFBFUklNRU5UQUwociksQS4kc2V0U2VsZWN0aW9uKHIpfWUuZGlzcGF0Y2hDb21tYW5kKF9wLG4pfXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksITB9cmV0dXJuIHQ9QS4kZ2V0U2VsZWN0aW9uKCksISFBLiRpc1JhbmdlU2VsZWN0aW9uKHQpfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLkRSQUdTVEFSVF9DT01NQU5ELHQ9PntbdF09a3ModCk7Y29uc3Qgbj1BLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4hKHQmJiFBLiRpc1JhbmdlU2VsZWN0aW9uKG4pKX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5EUkFHT1ZFUl9DT01NQU5ELHQ9Pnt2YXJbbl09a3ModCk7Y29uc3Qgcj1BLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gbiYmIUEuJGlzUmFuZ2VTZWxlY3Rpb24ocik/ITE6KG49bDAodC5jbGllbnRYLHQuY2xpZW50WSksbiE9PW51bGwmJihuPUEuJGdldE5lYXJlc3ROb2RlRnJvbURPTU5vZGUobi5ub2RlKSxBLiRpc0RlY29yYXRvck5vZGUobikmJnQucHJldmVudERlZmF1bHQoKSksITApfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLlNFTEVDVF9BTExfQ09NTUFORCwoKT0+KEEuJHNlbGVjdEFsbCgpLCEwKSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLkNPUFlfQ09NTUFORCx0PT4oRmMuY29weVRvQ2xpcGJvYXJkKGUsdnIub2JqZWN0S2xhc3NFcXVhbHModCxDbGlwYm9hcmRFdmVudCk/dDpudWxsKSwhMCksQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5DVVRfQ09NTUFORCx0PT4oblAodCxlKSwhMCksQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5QQVNURV9DT01NQU5ELHQ9Pntjb25zdFssbixyXT1rcyh0KTtpZigwPG4ubGVuZ3RoJiYhcilyZXR1cm4gZS5kaXNwYXRjaENvbW1hbmQoX3AsbiksITA7aWYoQS5pc1NlbGVjdGlvbkNhcHR1cmVkSW5EZWNvcmF0b3JJbnB1dCh0LnRhcmdldCkpcmV0dXJuITE7Y29uc3Qgbz1BLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gQS4kaXNSYW5nZVNlbGVjdGlvbihvKXx8QS5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb24obyk/KHRQKHQsZSksITApOiExfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSl9O2NvbnN0IHJQPVByO3ZhciBHcz1yUCxHUz1zcixvUD1EUixqbj1wLGlQPWpSLFlTPU50LHUwPSRyLGxQPUZSLHNQPUdzLF9tPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50PCJ1Ij9qbi51c2VMYXlvdXRFZmZlY3Q6am4udXNlRWZmZWN0O2Z1bmN0aW9uIGMwKGUpe3JldHVybiBlLmdldEVkaXRvclN0YXRlKCkucmVhZChpUC4kY2FuU2hvd1BsYWNlaG9sZGVyQ3VycnkoZS5pc0NvbXBvc2luZygpKSl9ZnVuY3Rpb24gYVAoZSl7bGV0W3Qsbl09am4udXNlU3RhdGUoKCk9PmMwKGUpKTtyZXR1cm4gX20oKCk9PntmdW5jdGlvbiByKCl7bGV0IG89YzAoZSk7bihvKX1yZXR1cm4gcigpLFlTLm1lcmdlUmVnaXN0ZXIoZS5yZWdpc3RlclVwZGF0ZUxpc3RlbmVyKCgpPT57cigpfSksZS5yZWdpc3RlckVkaXRhYmxlTGlzdGVuZXIoKCk9PntyKCl9KSl9LFtlXSksdH1mdW5jdGlvbiB1UChlLHQpe2xldFtuLHJdPWpuLnVzZVN0YXRlKCgpPT5lLmdldERlY29yYXRvcnMoKSk7cmV0dXJuIF9tKCgpPT5lLnJlZ2lzdGVyRGVjb3JhdG9yTGlzdGVuZXIobz0+e3UwLmZsdXNoU3luYygoKT0+e3Iobyl9KX0pLFtlXSksam4udXNlRWZmZWN0KCgpPT57cihlLmdldERlY29yYXRvcnMoKSl9LFtlXSksam4udXNlTWVtbygoKT0+e2xldCBvPVtdLGk9T2JqZWN0LmtleXMobik7Zm9yKGxldCBsPTA7bDxpLmxlbmd0aDtsKyspe2xldCBzPWlbbF0sYT1qbi5jcmVhdGVFbGVtZW50KHQse29uRXJyb3I6Yz0+ZS5fb25FcnJvcihjKX0sam4uY3JlYXRlRWxlbWVudChqbi5TdXNwZW5zZSx7ZmFsbGJhY2s6bnVsbH0sbltzXSkpLHU9ZS5nZXRFbGVtZW50QnlLZXkocyk7dSE9PW51bGwmJm8ucHVzaCh1MC5jcmVhdGVQb3J0YWwoYSx1LHMpKX1yZXR1cm4gb30sW3QsbixlXSl9ZnVuY3Rpb24gY1AoZSl7X20oKCk9PllTLm1lcmdlUmVnaXN0ZXIoc1AucmVnaXN0ZXJSaWNoVGV4dChlKSxsUC5yZWdpc3RlckRyYWdvblN1cHBvcnQoZSkpLFtlXSl9ZnVuY3Rpb24gZFAoe2NvbnRlbnQ6ZX0pe3Zhclt0XT1HUy51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCk7dD1hUCh0KTtsZXQgbj1vUCgpO3JldHVybiB0P3R5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6ZTpudWxsfVBTLlJpY2hUZXh0UGx1Z2luPWZ1bmN0aW9uKHtjb250ZW50RWRpdGFibGU6ZSxwbGFjZWhvbGRlcjp0LEVycm9yQm91bmRhcnk6bn0pe2xldFtyXT1HUy51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCk7cmV0dXJuIG49dVAocixuKSxjUChyKSxqbi5jcmVhdGVFbGVtZW50KGpuLkZyYWdtZW50LG51bGwsZSxqbi5jcmVhdGVFbGVtZW50KGRQLHtjb250ZW50OnR9KSxuKX07Y29uc3QgZlA9UFM7dmFyIGhQPWZQLFhTPXt9LExyPWdvLHBQPXNyLFFTPXAsZ1A9TnQsaHM9aGU7ZnVuY3Rpb24gbVAoZSl7UVMudXNlRWZmZWN0KCgpPT5nUC5tZXJnZVJlZ2lzdGVyKGUucmVnaXN0ZXJDb21tYW5kKExyLklOU0VSVF9PUkRFUkVEX0xJU1RfQ09NTUFORCwoKT0+KExyLmluc2VydExpc3QoZSwibnVtYmVyIiksITApLGhzLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSxlLnJlZ2lzdGVyQ29tbWFuZChMci5JTlNFUlRfVU5PUkRFUkVEX0xJU1RfQ09NTUFORCwoKT0+KExyLmluc2VydExpc3QoZSwiYnVsbGV0IiksITApLGhzLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSxlLnJlZ2lzdGVyQ29tbWFuZChMci5SRU1PVkVfTElTVF9DT01NQU5ELCgpPT4oTHIucmVtb3ZlTGlzdChlKSwhMCksaHMuQ09NTUFORF9QUklPUklUWV9MT1cpLGUucmVnaXN0ZXJDb21tYW5kKGhzLklOU0VSVF9QQVJBR1JBUEhfQ09NTUFORCwoKT0+ISFMci4kaGFuZGxlTGlzdEluc2VydFBhcmFncmFwaCgpLGhzLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSksW2VdKX1YUy5MaXN0UGx1Z2luPWZ1bmN0aW9uKCl7bGV0W2VdPXBQLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKTtyZXR1cm4gUVMudXNlRWZmZWN0KCgpPT57aWYoIWUuaGFzTm9kZXMoW0xyLkxpc3ROb2RlLExyLkxpc3RJdGVtTm9kZV0pKXRocm93IEVycm9yKCJMaXN0UGx1Z2luOiBMaXN0Tm9kZSBhbmQvb3IgTGlzdEl0ZW1Ob2RlIG5vdCByZWdpc3RlcmVkIG9uIGVkaXRvciIpfSxbZV0pLG1QKGUpLG51bGx9O2NvbnN0IHZQPVhTO3ZhciB5UD12UCxKUz17fSxlbz17fSxaUz1OdCxfcj1oZTtsZXQgeFA9bmV3IFNldChbImh0dHA6IiwiaHR0cHM6IiwibWFpbHRvOiIsInNtczoiLCJ0ZWw6Il0pO2NsYXNzIFFsIGV4dGVuZHMgX3IuRWxlbWVudE5vZGV7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4ibGluayJ9c3RhdGljIGNsb25lKHQpe3JldHVybiBuZXcgUWwodC5fX3VybCx7cmVsOnQuX19yZWwsdGFyZ2V0OnQuX190YXJnZXQsdGl0bGU6dC5fX3RpdGxlfSx0Ll9fa2V5KX1jb25zdHJ1Y3Rvcih0LG49e30scil7c3VwZXIocik7bGV0e3RhcmdldDpvPW51bGwscmVsOmk9bnVsbCx0aXRsZTpsPW51bGx9PW47dGhpcy5fX3VybD10LHRoaXMuX190YXJnZXQ9byx0aGlzLl9fcmVsPWksdGhpcy5fX3RpdGxlPWx9Y3JlYXRlRE9NKHQpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gbi5ocmVmPXRoaXMuc2FuaXRpemVVcmwodGhpcy5fX3VybCksdGhpcy5fX3RhcmdldCE9PW51bGwmJihuLnRhcmdldD10aGlzLl9fdGFyZ2V0KSx0aGlzLl9fcmVsIT09bnVsbCYmKG4ucmVsPXRoaXMuX19yZWwpLHRoaXMuX190aXRsZSE9PW51bGwmJihuLnRpdGxlPXRoaXMuX190aXRsZSksWlMuYWRkQ2xhc3NOYW1lc1RvRWxlbWVudChuLHQudGhlbWUubGluayksbn11cGRhdGVET00odCxuKXtsZXQgcj10aGlzLl9fdXJsLG89dGhpcy5fX3RhcmdldCxpPXRoaXMuX19yZWwsbD10aGlzLl9fdGl0bGU7cmV0dXJuIHIhPT10Ll9fdXJsJiYobi5ocmVmPXIpLG8hPT10Ll9fdGFyZ2V0JiYobz9uLnRhcmdldD1vOm4ucmVtb3ZlQXR0cmlidXRlKCJ0YXJnZXQiKSksaSE9PXQuX19yZWwmJihpP24ucmVsPWk6bi5yZW1vdmVBdHRyaWJ1dGUoInJlbCIpKSxsIT09dC5fX3RpdGxlJiYobD9uLnRpdGxlPWw6bi5yZW1vdmVBdHRyaWJ1dGUoInRpdGxlIikpLCExfXN0YXRpYyBpbXBvcnRET00oKXtyZXR1cm57YTooKT0+KHtjb252ZXJzaW9uOndQLHByaW9yaXR5OjF9KX19c3RhdGljIGltcG9ydEpTT04odCl7bGV0IG49Q2EodC51cmwse3JlbDp0LnJlbCx0YXJnZXQ6dC50YXJnZXQsdGl0bGU6dC50aXRsZX0pO3JldHVybiBuLnNldEZvcm1hdCh0LmZvcm1hdCksbi5zZXRJbmRlbnQodC5pbmRlbnQpLG4uc2V0RGlyZWN0aW9uKHQuZGlyZWN0aW9uKSxufXNhbml0aXplVXJsKHQpe3RyeXtsZXQgbj1uZXcgVVJMKHQpO2lmKCF4UC5oYXMobi5wcm90b2NvbCkpcmV0dXJuImFib3V0OmJsYW5rIn1jYXRjaHt9cmV0dXJuIHR9ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCkscmVsOnRoaXMuZ2V0UmVsKCksdGFyZ2V0OnRoaXMuZ2V0VGFyZ2V0KCksdGl0bGU6dGhpcy5nZXRUaXRsZSgpLHR5cGU6ImxpbmsiLHVybDp0aGlzLmdldFVSTCgpLHZlcnNpb246MX19Z2V0VVJMKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX191cmx9c2V0VVJMKHQpe3RoaXMuZ2V0V3JpdGFibGUoKS5fX3VybD10fWdldFRhcmdldCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fdGFyZ2V0fXNldFRhcmdldCh0KXt0aGlzLmdldFdyaXRhYmxlKCkuX190YXJnZXQ9dH1nZXRSZWwoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX3JlbH1zZXRSZWwodCl7dGhpcy5nZXRXcml0YWJsZSgpLl9fcmVsPXR9Z2V0VGl0bGUoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX3RpdGxlfXNldFRpdGxlKHQpe3RoaXMuZ2V0V3JpdGFibGUoKS5fX3RpdGxlPXR9aW5zZXJ0TmV3QWZ0ZXIodCxuPSEwKXtyZXR1cm4gdD10aGlzLmdldFBhcmVudE9yVGhyb3coKS5pbnNlcnROZXdBZnRlcih0LG4pLF9yLiRpc0VsZW1lbnROb2RlKHQpPyhuPUNhKHRoaXMuX191cmwse3JlbDp0aGlzLl9fcmVsLHRhcmdldDp0aGlzLl9fdGFyZ2V0LHRpdGxlOnRoaXMuX190aXRsZX0pLHQuYXBwZW5kKG4pLG4pOm51bGx9Y2FuSW5zZXJ0VGV4dEJlZm9yZSgpe3JldHVybiExfWNhbkluc2VydFRleHRBZnRlcigpe3JldHVybiExfWNhbkJlRW1wdHkoKXtyZXR1cm4hMX1pc0lubGluZSgpe3JldHVybiEwfWV4dHJhY3RXaXRoQ2hpbGQodCxuKXtpZighX3IuJGlzUmFuZ2VTZWxlY3Rpb24obikpcmV0dXJuITE7dD1uLmFuY2hvci5nZXROb2RlKCk7bGV0IHI9bi5mb2N1cy5nZXROb2RlKCk7cmV0dXJuIHRoaXMuaXNQYXJlbnRPZih0KSYmdGhpcy5pc1BhcmVudE9mKHIpJiYwPG4uZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGh9fWZ1bmN0aW9uIHdQKGUpe2xldCB0PW51bGw7aWYoWlMuaXNIVE1MQW5jaG9yRWxlbWVudChlKSl7bGV0IG49ZS50ZXh0Q29udGVudDtuIT09bnVsbCYmbiE9PSIiJiYodD1DYShlLmdldEF0dHJpYnV0ZSgiaHJlZiIpfHwiIix7cmVsOmUuZ2V0QXR0cmlidXRlKCJyZWwiKSx0YXJnZXQ6ZS5nZXRBdHRyaWJ1dGUoInRhcmdldCIpLHRpdGxlOmUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpfSkpfXJldHVybntub2RlOnR9fWZ1bmN0aW9uIENhKGUsdCl7cmV0dXJuIF9yLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcgUWwoZSx0KSl9ZnVuY3Rpb24gSm8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBRbH1jbGFzcyBXYSBleHRlbmRzIFFse3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuImF1dG9saW5rIn1zdGF0aWMgY2xvbmUodCl7cmV0dXJuIG5ldyBXYSh0Ll9fdXJsLHtyZWw6dC5fX3JlbCx0YXJnZXQ6dC5fX3RhcmdldCx0aXRsZTp0Ll9fdGl0bGV9LHQuX19rZXkpfXN0YXRpYyBpbXBvcnRKU09OKHQpe2xldCBuPVNwKHQudXJsLHtyZWw6dC5yZWwsdGFyZ2V0OnQudGFyZ2V0LHRpdGxlOnQudGl0bGV9KTtyZXR1cm4gbi5zZXRGb3JtYXQodC5mb3JtYXQpLG4uc2V0SW5kZW50KHQuaW5kZW50KSxuLnNldERpcmVjdGlvbih0LmRpcmVjdGlvbiksbn1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJuIG51bGx9ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksdHlwZToiYXV0b2xpbmsiLHZlcnNpb246MX19aW5zZXJ0TmV3QWZ0ZXIodCxuPSEwKXtyZXR1cm4gdD10aGlzLmdldFBhcmVudE9yVGhyb3coKS5pbnNlcnROZXdBZnRlcih0LG4pLF9yLiRpc0VsZW1lbnROb2RlKHQpPyhuPVNwKHRoaXMuX191cmwse3JlbDp0aGlzLl9yZWwsdGFyZ2V0OnRoaXMuX190YXJnZXQsdGl0bGU6dGhpcy5fX3RpdGxlfSksdC5hcHBlbmQobiksbik6bnVsbH19ZnVuY3Rpb24gU3AoZSx0KXtyZXR1cm4gX3IuJGFwcGx5Tm9kZVJlcGxhY2VtZW50KG5ldyBXYShlLHQpKX1sZXQgX1A9X3IuY3JlYXRlQ29tbWFuZCgiVE9HR0xFX0xJTktfQ09NTUFORCIpO2Z1bmN0aW9uIFNQKGUsdCl7Zm9yKDtlIT09bnVsbCYmKGU9ZS5nZXRQYXJlbnQoKSkhPT1udWxsJiYhdChlKTspO3JldHVybiBlfWVvLiRjcmVhdGVBdXRvTGlua05vZGU9U3A7ZW8uJGNyZWF0ZUxpbmtOb2RlPUNhO2VvLiRpc0F1dG9MaW5rTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFdhfTtlby4kaXNMaW5rTm9kZT1Kbztlby5BdXRvTGlua05vZGU9V2E7ZW8uTGlua05vZGU9UWw7ZW8uVE9HR0xFX0xJTktfQ09NTUFORD1fUDtlby50b2dnbGVMaW5rPWZ1bmN0aW9uKGUsdD17fSl7bGV0e3RhcmdldDpuLHRpdGxlOnJ9PXQsbz10LnJlbD09PXZvaWQgMD8ibm9yZWZlcnJlciI6dC5yZWw7aWYodD1fci4kZ2V0U2VsZWN0aW9uKCksX3IuJGlzUmFuZ2VTZWxlY3Rpb24odCkpaWYodD10LmV4dHJhY3QoKSxlPT09bnVsbCl0LmZvckVhY2gobD0+e2lmKGw9bC5nZXRQYXJlbnQoKSxKbyhsKSl7bGV0IHM9bC5nZXRDaGlsZHJlbigpO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKWwuaW5zZXJ0QmVmb3JlKHNbYV0pO2wucmVtb3ZlKCl9fSk7ZWxzZXtpZih0Lmxlbmd0aD09PTEpe3ZhciBpPXRbMF07aWYoaT1KbyhpKT9pOlNQKGksSm8pLGkhPT1udWxsKXtpLnNldFVSTChlKSxuIT09dm9pZCAwJiZpLnNldFRhcmdldChuKSxvIT09bnVsbCYmaS5zZXRSZWwobyksciE9PXZvaWQgMCYmaS5zZXRUaXRsZShyKTtyZXR1cm59fWxldCBsPW51bGwscz1udWxsO3QuZm9yRWFjaChhPT57dmFyIHU9YS5nZXRQYXJlbnQoKTtpZih1IT09cyYmdSE9PW51bGwmJighX3IuJGlzRWxlbWVudE5vZGUoYSl8fGEuaXNJbmxpbmUoKSkpaWYoSm8odSkpcz11LHUuc2V0VVJMKGUpLG4hPT12b2lkIDAmJnUuc2V0VGFyZ2V0KG4pLG8hPT1udWxsJiZzLnNldFJlbChvKSxyIT09dm9pZCAwJiZzLnNldFRpdGxlKHIpO2Vsc2UgaWYodS5pcyhsKXx8KGw9dSxzPUNhKGUse3JlbDpvLHRhcmdldDpufSksSm8odSk/YS5nZXRQcmV2aW91c1NpYmxpbmcoKT09PW51bGw/dS5pbnNlcnRCZWZvcmUocyk6dS5pbnNlcnRBZnRlcihzKTphLmluc2VydEJlZm9yZShzKSksSm8oYSkpe2lmKCFhLmlzKHMpKXtpZihzIT09bnVsbCl7dT1hLmdldENoaWxkcmVuKCk7Zm9yKGxldCBjPTA7Yzx1Lmxlbmd0aDtjKyspcy5hcHBlbmQodVtjXSl9YS5yZW1vdmUoKX19ZWxzZSBzIT09bnVsbCYmcy5hcHBlbmQoYSl9KX19O2NvbnN0IEVQPWVvO3ZhciBQbD1FUCxGaT1QbCxDUD1zciwkUD1OdCxCaT1oZSxrUD1wO0pTLkxpbmtQbHVnaW49ZnVuY3Rpb24oe3ZhbGlkYXRlVXJsOmV9KXtsZXRbdF09Q1AudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO3JldHVybiBrUC51c2VFZmZlY3QoKCk9PntpZighdC5oYXNOb2RlcyhbRmkuTGlua05vZGVdKSl0aHJvdyBFcnJvcigiTGlua1BsdWdpbjogTGlua05vZGUgbm90IHJlZ2lzdGVyZWQgb24gZWRpdG9yIik7cmV0dXJuICRQLm1lcmdlUmVnaXN0ZXIodC5yZWdpc3RlckNvbW1hbmQoRmkuVE9HR0xFX0xJTktfQ09NTUFORCxuPT57aWYobj09PW51bGwpcmV0dXJuIEZpLnRvZ2dsZUxpbmsobiksITA7aWYodHlwZW9mIG49PSJzdHJpbmciKXJldHVybiBlPT09dm9pZCAwfHxlKG4pPyhGaS50b2dnbGVMaW5rKG4pLCEwKTohMTtsZXR7dXJsOnIsdGFyZ2V0Om8scmVsOmksdGl0bGU6bH09bjtyZXR1cm4gRmkudG9nZ2xlTGluayhyLHtyZWw6aSx0YXJnZXQ6byx0aXRsZTpsfSksITB9LEJpLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSxlIT09dm9pZCAwP3QucmVnaXN0ZXJDb21tYW5kKEJpLlBBU1RFX0NPTU1BTkQsbj0+e2xldCByPUJpLiRnZXRTZWxlY3Rpb24oKTtpZighQmkuJGlzUmFuZ2VTZWxlY3Rpb24ocil8fHIuaXNDb2xsYXBzZWQoKXx8IShuIGluc3RhbmNlb2YgQ2xpcGJvYXJkRXZlbnQpfHxuLmNsaXBib2FyZERhdGE9PW51bGwpcmV0dXJuITE7bGV0IG89bi5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQiKTtyZXR1cm4gZShvKT9yLmdldE5vZGVzKCkuc29tZShpPT5CaS4kaXNFbGVtZW50Tm9kZShpKSk/ITE6KHQuZGlzcGF0Y2hDb21tYW5kKEZpLlRPR0dMRV9MSU5LX0NPTU1BTkQsbyksbi5wcmV2ZW50RGVmYXVsdCgpLCEwKTohMX0sQmkuQ09NTUFORF9QUklPUklUWV9MT1cpOigpPT57fSl9LFt0LGVdKSxudWxsfTtjb25zdCBUUD1KUzt2YXIgYlA9VFA7ZnVuY3Rpb24gTlAoe2FyaWFBY3RpdmVEZXNjZW5kYW50OmUsYXJpYUF1dG9Db21wbGV0ZTp0LGFyaWFDb250cm9sczpuLGFyaWFEZXNjcmliZWRCeTpyLGFyaWFFeHBhbmRlZDpvLGFyaWFMYWJlbDppLGFyaWFMYWJlbGxlZEJ5OmwsYXJpYU11bHRpbGluZTpzLGFyaWFPd25zOmEsYXJpYVJlcXVpcmVkOnUsYXV0b0NhcGl0YWxpemU6YyxjbGFzc05hbWU6ZCxpZDpmLHJvbGU6aD0idGV4dGJveCIsc3BlbGxDaGVjazpnPSEwLHN0eWxlOm0sdGFiSW5kZXg6XywiZGF0YS10ZXN0aWQiOnYsLi4ueX0pe2NvbnN0W3hdPXNyLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKSxbUyxrXT1wLnVzZVN0YXRlKCExKSxiPXAudXNlQ2FsbGJhY2soVD0+e3ZhciBEO3guc2V0Um9vdEVsZW1lbnQoVCk7Y29uc3QgTj0oRD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidmFsLXVpIikpPT1udWxsP3ZvaWQgMDpELnNoYWRvd1Jvb3Q7aWYoTiYmImdldFNlbGVjdGlvbiJpbiBOKXt4Ll93aW5kb3c9TjtyZXR1cm59fSxbeF0pO3JldHVybiBwLnVzZUxheW91dEVmZmVjdCgoKT0+KGsoeC5pc0VkaXRhYmxlKCkpLHgucmVnaXN0ZXJFZGl0YWJsZUxpc3RlbmVyKFQ9PntrKFQpfSkpLFt4XSksdy5qc3goImRpdiIsey4uLnksImFyaWEtYWN0aXZlZGVzY2VuZGFudCI6Uz9lOnZvaWQgMCwiYXJpYS1hdXRvY29tcGxldGUiOlM/dDoibm9uZSIsImFyaWEtY29udHJvbHMiOlM/bjp2b2lkIDAsImFyaWEtZGVzY3JpYmVkYnkiOnIsImFyaWEtZXhwYW5kZWQiOlMmJmg9PT0iY29tYm9ib3giPyEhbzp2b2lkIDAsImFyaWEtbGFiZWwiOmksImFyaWEtbGFiZWxsZWRieSI6bCwiYXJpYS1tdWx0aWxpbmUiOnMsImFyaWEtb3ducyI6Uz9hOnZvaWQgMCwiYXJpYS1yZWFkb25seSI6Uz92b2lkIDA6ITAsImFyaWEtcmVxdWlyZWQiOnUsYXV0b0NhcGl0YWxpemU6YyxjbGFzc05hbWU6ZCxjb250ZW50RWRpdGFibGU6UywiZGF0YS10ZXN0aWQiOnYsaWQ6ZixyZWY6Yixyb2xlOmgsc3BlbGxDaGVjazpnLHN0eWxlOm0sdGFiSW5kZXg6X30pfWZ1bmN0aW9uIFJQKHtjbGFzc05hbWU6ZX0pe3JldHVybiB3LmpzeChOUCx7Y2xhc3NOYW1lOmV9KX1jbGFzcyBVYSBleHRlbmRzIGhlLkRlY29yYXRvck5vZGV7Y29uc3RydWN0b3IodCxuKXtzdXBlcihuKSx0aGlzLl9fc3JjPXQuc3JjLHRoaXMuX19hbHRUZXh0PXQuYWx0VGV4dCx0aGlzLl9fd2lkdGg9dC53aWR0aCx0aGlzLl9faGVpZ2h0PXQuaGVpZ2h0fXN0YXRpYyBnZXRUeXBlKCl7cmV0dXJuImltYWdlIn1zdGF0aWMgY2xvbmUodCl7cmV0dXJuIG5ldyBVYSh7c3JjOnQuX19zcmMsYWx0VGV4dDp0Ll9fYWx0VGV4dCx3aWR0aDp0Ll9fd2lkdGgsaGVpZ2h0OnQuX19oZWlnaHR9KX1leHBvcnRKU09OKCl7cmV0dXJue2FsdFRleHQ6dGhpcy5fX2FsdFRleHQsaGVpZ2h0OnRoaXMuX193aWR0aCxzcmM6dGhpcy5fX3NyYyx0eXBlOiJpbWFnZSIsdmVyc2lvbjoxLHdpZHRoOnRoaXMuX193aWR0aH19c3RhdGljIGltcG9ydEpTT04odCl7cmV0dXJuIHFTKHQpfWNyZWF0ZURPTSgpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKX11cGRhdGVET00oKXtyZXR1cm4hMX1kZWNvcmF0ZSgpe3JldHVybiB3LmpzeChQUCx7c3JjOnRoaXMuX19zcmMsYWx0VGV4dDp0aGlzLl9fYWx0VGV4dCxlbXB0eTp0aGlzLl9fZW1wdHksaGVpZ2h0OnRoaXMuX19oZWlnaHQsbm9kZUtleTp0aGlzLmdldEtleSgpfSl9fWZ1bmN0aW9uIFBQKGUpe3JldHVybiB3LmpzeCgiaW1nIix7c3JjOmUuc3JjfSl9ZnVuY3Rpb24gcVMoZSl7cmV0dXJuIG5ldyBVYShlKX1mdW5jdGlvbiBPUCgpe2NvbnN0W2VdPXNyLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntlLmZvY3VzKCl9LFtlXSksbnVsbH1jb25zdCBlRT1oZS5jcmVhdGVDb21tYW5kKCJJTlNFUlRfSU1BR0VfQ09NTUFORCIpO2Z1bmN0aW9uIEFQKCl7Y29uc3RbZV09c3IudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2lmKCFlLmhhc05vZGVzKFtVYV0pKXRocm93IG5ldyBFcnJvcigiSW1hZ2VzUGx1Z2luOiBJbWFnZU5vZGUgbm90IHJlZ2lzdGVyZWQgb24gZWRpdG9yIik7cmV0dXJuIE50Lm1lcmdlUmVnaXN0ZXIoZS5yZWdpc3RlckNvbW1hbmQoZUUsdD0+e2NvbnN0IG49cVModCk7cmV0dXJuIGhlLiRpbnNlcnROb2Rlcyhbbl0pLGhlLiRpc1Jvb3RPclNoYWRvd1Jvb3Qobi5nZXRQYXJlbnRPclRocm93KCkpJiZOdC4kd3JhcE5vZGVJbkVsZW1lbnQobixoZS4kY3JlYXRlUGFyYWdyYXBoTm9kZSkuc2VsZWN0RW5kKCksITB9LGhlLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSl9LFtlXSksbnVsbH1jb25zdCBNUD0oe2NsYXNzTmFtZTplfSk9PncuanN4cygic3ZnIix7aGVpZ2h0OjEyLHdpZHRoOjEyLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZTplLGNoaWxkcmVuOlt3LmpzeCgicGF0aCIse2Q6Ik02IDRoOGE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMS00IDRINnoifSksdy5qc3goInBhdGgiLHtkOiJNNiAxMmg5YTQgNCAwIDAgMSA0IDQgNCA0IDAgMCAxLTQgNEg2eiJ9KV19KSxMUD1NUCxEUD0oe2NsYXNzTmFtZTplfSk9PncuanN4cygic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOmUsd2lkdGg6MTIsaGVpZ2h0OjEyLGNoaWxkcmVuOlt3LmpzeCgibGluZSIse3gxOiIxOSIseTE6IjQiLHgyOiIxMCIseTI6IjQifSksdy5qc3goImxpbmUiLHt4MToiMTQiLHkxOiIyMCIseDI6IjUiLHkyOiIyMCJ9KSx3LmpzeCgibGluZSIse3gxOiIxNSIseTE6IjQiLHgyOiI5Iix5MjoiMjAifSldfSksSVA9RFAsalA9KHtjbGFzc05hbWU6ZX0pPT53LmpzeCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjQgMjQiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMSIsY2xhc3NOYW1lOmUsd2lkdGg6MTIsaGVpZ2h0OjEyLGNoaWxkcmVuOncuanN4KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xMywxNSBMMTMsMjEgQzEzLDIxLjU1MjI4NDcgMTIuNTUyMjg0NywyMiAxMiwyMiBDMTEuNDQ3NzE1MywyMiAxMSwyMS41NTIyODQ3IDExLDIxIEwxMSwxNSBMMTMsMTUgWiBNMywxMyBDMi40NDc3MTUyNSwxMyAyLDEyLjU1MjI4NDcgMiwxMiBDMiwxMS40NDc3MTUzIDIuNDQ3NzE1MjUsMTEgMywxMSBMMjEsMTEgQzIxLjU1MjI4NDcsMTEgMjIsMTEuNDQ3NzE1MyAyMiwxMiBDMjIsMTIuNTUyMjg0NyAyMS41NTIyODQ3LDEzIDIxLDEzIEwzLDEzIFogTTE5LDIgQzE5LjU1MjI4NDcsMiAyMCwyLjQ0NzcxNTI1IDIwLDMgQzIwLDMuNTUyMjg0NzUgMTkuNTUyMjg0Nyw0IDE5LDQgTDEzLDQgTDEzLDkgTDExLDkgTDExLDQgTDUsNCBDNC40NDc3MTUyNSw0IDQsMy41NTIyODQ3NSA0LDMgQzQsMi40NDc3MTUyNSA0LjQ0NzcxNTI1LDIgNSwyIEwxOSwyIFoifSl9KSx6UD1qUCxGUD0oe3ZhcmlhbnQ6ZT0icHJpbWFyeSIsb25DbGljazp0LGNoaWxkcmVuOm4saWNvbjpyLGRpc2FibGVkOm89ITF9KT0+dy5qc3goImJ1dHRvbiIse2Rpc2FibGVkOm8sY2xhc3NOYW1lOmRkKCJmb250LXNhbnMgZm9udC1bMTJweF0gdHJhY2tpbmctWzAuMDRlbV0gcHktMSBweC0yIHJvdW5kZWQgd2hpdGVzcGFjZS1ub3dyYXAgZ3JvdXAgcmVsYXRpdmUgdGV4dC1wcmltYXJ5Iix7ImZvbnQtYm9sZCI6ZT09PSJwcmltYXJ5IiwiYmctYmFja2dyb3VuZCBob3ZlcjpiZy1iYWNrZ3JvdW5kIHRleHQtZmlsbCBkaXNhYmxlZDpiZy1maWxsIGRpc2FibGVkOnRleHQtYmFja2dyb3VuZCI6ZT09PSJwcmltYXJ5IiwiYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci1wcmltYXJ5IHRleHQtcHJpbWFyeSBob3Zlcjpib3JkZXItaGlnaGxpZ2h0IGhvdmVyOnRleHQtaGlnaGxpZ2h0IGRpc2FibGVkOmJnLWZpbGwgZGlzYWJsZWQ6dGV4dC1iYWNrZ3JvdW5kIjplIT09InByaW1hcnkifSksb25DbGljazp0LGNoaWxkcmVuOncuanN4cygic3BhbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOltyJiZyLG5dfSl9KSxabz1GUCxCUD0oe2NsYXNzTmFtZTplfSk9PncuanN4cygic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMTIgMTIiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOmUsY2hpbGRyZW46W3cuanN4KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixkOiJNMy43MDczMyAxLjAwMDE1TDguNzc4NCA2LjA3MTIxTDguMDcxMjkgNi43NzgzMkwzLjAwMDIyIDEuNzA3MjVMMy43MDczMyAxLjAwMDE1WiIsZmlsbDoiY3VycmVudENvbG9yIn0pLHcuanN4KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixkOiJNMy4wMDAxNSAxMC40NzA5TDguMDcxMjEgNS4zOTk4M0w4Ljc3ODMyIDYuMTA2OTNMMy43MDcyNSAxMS4xNzhMMy4wMDAxNSAxMC40NzA5WiIsZmlsbDoiY3VycmVudENvbG9yIn0pXX0pLFdQPUJQLHRFPWVlLmNyZWF0ZUNvbnRleHQoe2dldCBhcGkoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXNzaW9uKCl7dGhyb3cgRXJyb3IoIlZhbE92ZXJsYXlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsT3ZlcmxheVByb3ZpZGVyISIpfSxnZXQgdGhlbWUoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXRUaGVtZSgpe3Rocm93IEVycm9yKCJWYWxPdmVybGF5Q29udGV4dCBub3QgZm91bmQuIEVuc3VyZSBjb21wb25lbnRzIGFyZSB3cmFwcGVkIGJ5IFZhbE92ZXJsYXlQcm92aWRlciEiKX0sZ2V0IGVkaXRNb2RlKCl7dGhyb3cgRXJyb3IoIlZhbE92ZXJsYXlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsT3ZlcmxheVByb3ZpZGVyISIpfSxnZXQgc2V0RWRpdE1vZGUoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBoaWdobGlnaHQoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXRIaWdobGlnaHQoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXRXaW5kb3dTaXplKCl7dGhyb3cgRXJyb3IoIlZhbE92ZXJsYXlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsT3ZlcmxheVByb3ZpZGVyISIpfSxnZXQgd2luZG93U2l6ZSgpe3Rocm93IEVycm9yKCJWYWxPdmVybGF5Q29udGV4dCBub3QgZm91bmQuIEVuc3VyZSBjb21wb25lbnRzIGFyZSB3cmFwcGVkIGJ5IFZhbE92ZXJsYXlQcm92aWRlciEiKX19KTtmdW5jdGlvbiBTbSgpe3JldHVybiBlZS51c2VDb250ZXh0KHRFKX1jb25zdCBVUD0oe29wdGlvbnM6ZSxvbkNoYW5nZTp0LGxhYmVsOm4saWNvbjpyfSk9Pntjb25zdFtvLGldPXAudXNlU3RhdGUoITEpLGw9cC51c2VSZWYobnVsbCksW3MsYV09cC51c2VTdGF0ZSgwKSx7d2luZG93U2l6ZTp1fT1TbSgpLGM9KCk9PntpKCFvKX0sZD0oZixoKT0+e2EoaCksdChmKSxpKCExKX07cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3QgZj1oPT57byYmbC5jdXJyZW50JiYhbC5jdXJyZW50LmNvbnRhaW5zKGgudGFyZ2V0KSYmaSghMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZiksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsZil9fSxbXSksdy5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0iLHJlZjpsLGNoaWxkcmVuOncuanN4KFpvLHtvbkNsaWNrOmY9PntmLnByZXZlbnREZWZhdWx0KCksYygpfSxpY29uOncuanN4KFdQLHtjbGFzc05hbWU6YHJvdGF0ZS1bLTkwZGVnXSB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0xNTAgZWFzZS1pbi1vdXQgJHtvPyIiOiJyb3RhdGUtWzkwZGVnXSJ9YH0pLGNoaWxkcmVuOncuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W3cuanN4cygic3BhbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEiLGNoaWxkcmVuOltuLHImJnJdfSksbyYmdy5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgLXRvcC1bNHB4XSBvdmVyZmxvdy1zY3JvbGwgc2hhZG93LWxnIC1sZWZ0LTIgdGV4dC1wcmltYXJ5IGJnLWJvcmRlciB3LWZpdCB6LW92ZXJsYXkiLHN0eWxlOnttYXhIZWlnaHQ6dT09bnVsbD92b2lkIDA6dS5pbm5lckhlaWdodH0sY2hpbGRyZW46dy5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCAiLGNoaWxkcmVuOmU9PW51bGw/dm9pZCAwOmUubWFwKChmLGgpPT53LmpzeCgiYnV0dG9uIix7b25DbGljazpnPT57Zy5wcmV2ZW50RGVmYXVsdCgpLGQoZixoKX0sY2xhc3NOYW1lOmB0ZXh0LWxlZnQgcHgtMiBweS0xIGhvdmVyOmJnLWJhY2tncm91bmQgaG92ZXI6dGV4dC1oaWdobGlnaHQgICR7aD09PXMmJiJmb250LWJvbGQgYmctYmFja2dyb3VuZCBob3ZlcjpiZy1iYWNrZ3JvdW5kIHRydW5jYXRlIn1gLGNoaWxkcmVuOmZ9LGYpKX0pfSldfSl9KX0pfSxWUD1VUCxIUD1uZXcgVGV4dEVuY29kZXI7ZnVuY3Rpb24gbkUoZSl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57dmFyIGk7Y29uc3Qgcj0oaT1lLmN1cnJlbnRUYXJnZXQuZmlsZXMpPT1udWxsP3ZvaWQgMDppWzBdLG89bmV3IEZpbGVSZWFkZXI7by5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoKT0+e2NvbnN0IGw9by5yZXN1bHQ7aWYodHlwZW9mIGw9PSJzdHJpbmciKXtjb25zdCBzPW5ldyBJbWFnZTtzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGFzeW5jKCk9Pntjb25zdCBhPWF3YWl0IEt0LmdldFNIQTI1Nkhhc2goSFAuZW5jb2RlKGwpKTtpZihzLm5hdHVyYWxXaWR0aCYmcy5uYXR1cmFsSGVpZ2h0KXtjb25zdCB1PVVnKGwpO3Qoe3NyYzpsLHdpZHRoOnMubmF0dXJhbFdpZHRoLGhlaWdodDpzLm5hdHVyYWxIZWlnaHQsZmlsZW5hbWU6cj09bnVsbD92b2lkIDA6ci5uYW1lLHNoYTI1NjphLG1pbWVUeXBlOnUsZmlsZUV4dDp1JiZWZyh1KX0pfWVsc2UgdCh7c3JjOmwsZmlsZW5hbWU6cj09bnVsbD92b2lkIDA6ci5uYW1lLHNoYTI1NjphfSl9KSxzLnNyYz1sfWVsc2UgbihsP3ttZXNzYWdlOiJVbmV4cGVjdGVkIGltYWdlIHJlc3VsdCB0eXBlIixyZXN1bHQ6bH06e21lc3NhZ2U6IkVtcHR5IHJlc3VsdCJ9KX0pLHImJm8ucmVhZEFzRGF0YVVSTChyKX0pfWZ1bmN0aW9uIHJFKGUpe2NvbnN0IHQ9ZS5hbmNob3Isbj1lLmZvY3VzLHI9ZS5hbmNob3IuZ2V0Tm9kZSgpLG89ZS5mb2N1cy5nZXROb2RlKCk7cmV0dXJuIHI9PT1vP3I6ZS5pc0JhY2t3YXJkKCk/RG8uJGlzQXROb2RlRW5kKG4pP3I6bzpEby4kaXNBdE5vZGVFbmQodCk/cjpvfWZ1bmN0aW9uIEtQKCl7Y29uc3RbZV09c3IudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+TnQubWVyZ2VSZWdpc3RlcihlLnJlZ2lzdGVyQ29tbWFuZChoZS5DTElDS19DT01NQU5ELHQ9Pntjb25zdCBuPWhlLiRnZXRTZWxlY3Rpb24oKTtpZihoZS4kaXNSYW5nZVNlbGVjdGlvbihuKSl7Y29uc3Qgcj1yRShuKSxvPU50LiRmaW5kTWF0Y2hpbmdQYXJlbnQocixQbC4kaXNMaW5rTm9kZSk7aWYoUGwuJGlzTGlua05vZGUobykmJih0Lm1ldGFLZXl8fHQuY3RybEtleSkpcmV0dXJuIHdpbmRvdy5vcGVuKG8uZ2V0VVJMKCksIl9ibGFuayIpLCEwfXJldHVybiExfSxoZS5DT01NQU5EX1BSSU9SSVRZX0xPVykpLFtdKSxudWxsfXZhciBvRT17ZXhwb3J0czp7fX0sR1A9IlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEIixZUD1HUCxYUD1ZUDtmdW5jdGlvbiBpRSgpe31mdW5jdGlvbiBsRSgpe31sRS5yZXNldFdhcm5pbmdDYWNoZT1pRTt2YXIgUVA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHIsbyxpLGwscyxhKXtpZihhIT09WFApe3ZhciB1PW5ldyBFcnJvcigiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcyIpO3Rocm93IHUubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiIsdX19ZS5pc1JlcXVpcmVkPWU7ZnVuY3Rpb24gdCgpe3JldHVybiBlfXZhciBuPXthcnJheTplLGJpZ2ludDplLGJvb2w6ZSxmdW5jOmUsbnVtYmVyOmUsb2JqZWN0OmUsc3RyaW5nOmUsc3ltYm9sOmUsYW55OmUsYXJyYXlPZjp0LGVsZW1lbnQ6ZSxlbGVtZW50VHlwZTplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnQsZXhhY3Q6dCxjaGVja1Byb3BUeXBlczpsRSxyZXNldFdhcm5pbmdDYWNoZTppRX07cmV0dXJuIG4uUHJvcFR5cGVzPW4sbn07b0UuZXhwb3J0cz1RUCgpO3ZhciBKUD1vRS5leHBvcnRzO2NvbnN0IEZuPVJhKEpQKTtmdW5jdGlvbiBFcCgpe3JldHVybiBFcD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxFcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWlAoZSx0KXtpZihlPT1udWxsKXJldHVybnt9O3ZhciBuPXFQKGUsdCkscixvO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKG89MDtvPGkubGVuZ3RoO28rKylyPWlbb10sISh0LmluZGV4T2Yocik+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmKG5bcl09ZVtyXSl9cmV0dXJuIG59ZnVuY3Rpb24gcVAoZSx0KXtpZihlPT1udWxsKXJldHVybnt9O3ZhciBuPXt9LHI9T2JqZWN0LmtleXMoZSksbyxpO2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspbz1yW2ldLCEodC5pbmRleE9mKG8pPj0wKSYmKG5bb109ZVtvXSk7cmV0dXJuIG59dmFyIEVtPXAuZm9yd2FyZFJlZihmdW5jdGlvbihlLHQpe3ZhciBuPWUuY29sb3Iscj1uPT09dm9pZCAwPyJjdXJyZW50Q29sb3IiOm4sbz1lLnNpemUsaT1vPT09dm9pZCAwPzI0Om8sbD1aUChlLFsiY29sb3IiLCJzaXplIl0pO3JldHVybiBlZS5jcmVhdGVFbGVtZW50KCJzdmciLEVwKHtyZWY6dCx4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOmksaGVpZ2h0Omksdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6cixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9LGwpLGVlLmNyZWF0ZUVsZW1lbnQoInBvbHlsaW5lIix7cG9pbnRzOiIyMCA2IDkgMTcgNCAxMiJ9KSl9KTtFbS5wcm9wVHlwZXM9e2NvbG9yOkZuLnN0cmluZyxzaXplOkZuLm9uZU9mVHlwZShbRm4uc3RyaW5nLEZuLm51bWJlcl0pfTtFbS5kaXNwbGF5TmFtZT0iQ2hlY2siO2NvbnN0IGVPPUVtO2Z1bmN0aW9uIENwKCl7cmV0dXJuIENwPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LENwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB0TyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49bk8oZSx0KSxyLG87aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobz0wO288aS5sZW5ndGg7bysrKXI9aVtvXSwhKHQuaW5kZXhPZihyKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYobltyXT1lW3JdKX1yZXR1cm4gbn1mdW5jdGlvbiBuTyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49e30scj1PYmplY3Qua2V5cyhlKSxvLGk7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKylvPXJbaV0sISh0LmluZGV4T2Yobyk+PTApJiYobltvXT1lW29dKTtyZXR1cm4gbn12YXIgQ209cC5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jb2xvcixyPW49PT12b2lkIDA/ImN1cnJlbnRDb2xvciI6bixvPWUuc2l6ZSxpPW89PT12b2lkIDA/MjQ6byxsPXRPKGUsWyJjb2xvciIsInNpemUiXSk7cmV0dXJuIGVlLmNyZWF0ZUVsZW1lbnQoInN2ZyIsQ3Aoe3JlZjp0LHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6aSxoZWlnaHQ6aSx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZTpyLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn0sbCksZWUuY3JlYXRlRWxlbWVudCgicGF0aCIse2Q6Ik0xMCAxM2E1IDUgMCAwIDAgNy41NC41NGwzLTNhNSA1IDAgMCAwLTcuMDctNy4wN2wtMS43MiAxLjcxIn0pLGVlLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtkOiJNMTQgMTFhNSA1IDAgMCAwLTcuNTQtLjU0bC0zIDNhNSA1IDAgMCAwIDcuMDcgNy4wN2wxLjcxLTEuNzEifSkpfSk7Q20ucHJvcFR5cGVzPXtjb2xvcjpGbi5zdHJpbmcsc2l6ZTpGbi5vbmVPZlR5cGUoW0ZuLnN0cmluZyxGbi5udW1iZXJdKX07Q20uZGlzcGxheU5hbWU9IkxpbmsiO2NvbnN0IHJPPUNtO2Z1bmN0aW9uICRwKCl7cmV0dXJuICRwPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LCRwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBvTyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49aU8oZSx0KSxyLG87aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobz0wO288aS5sZW5ndGg7bysrKXI9aVtvXSwhKHQuaW5kZXhPZihyKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYobltyXT1lW3JdKX1yZXR1cm4gbn1mdW5jdGlvbiBpTyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49e30scj1PYmplY3Qua2V5cyhlKSxvLGk7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKylvPXJbaV0sISh0LmluZGV4T2Yobyk+PTApJiYobltvXT1lW29dKTtyZXR1cm4gbn12YXIgJG09cC5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jb2xvcixyPW49PT12b2lkIDA/ImN1cnJlbnRDb2xvciI6bixvPWUuc2l6ZSxpPW89PT12b2lkIDA/MjQ6byxsPW9PKGUsWyJjb2xvciIsInNpemUiXSk7cmV0dXJuIGVlLmNyZWF0ZUVsZW1lbnQoInN2ZyIsJHAoe3JlZjp0LHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6aSxoZWlnaHQ6aSx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZTpyLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn0sbCksZWUuY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSksZWUuY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSkpfSk7JG0ucHJvcFR5cGVzPXtjb2xvcjpGbi5zdHJpbmcsc2l6ZTpGbi5vbmVPZlR5cGUoW0ZuLnN0cmluZyxGbi5udW1iZXJdKX07JG0uZGlzcGxheU5hbWU9IlgiO2NvbnN0IGxPPSRtLHNPPSh7Zm9udFNpemVzOmUsZm9udHNGYW1pbGllczp0LG9uRWRpdG9yOm4sY29sb3JzOnJ9KT0+e2NvbnN0W29dPXNyLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKTtwLnVzZUVmZmVjdCgoKT0+e24mJm4obyl9LFtvXSk7Y29uc3RbaSxsXT1wLnVzZVN0YXRlKG8pLFtzLGFdPXAudXNlU3RhdGUobnVsbCksW3UsY109cC51c2VTdGF0ZSghMSksW2QsZl09cC51c2VTdGF0ZSghMSksW2gsZ109cC51c2VTdGF0ZSghMSksW20sX109cC51c2VTdGF0ZSghMSk7cC51c2VTdGF0ZSgiMTVweCIpLHAudXNlU3RhdGUoIiMwMDAiKSxwLnVzZVN0YXRlKCJTYW5zIik7Y29uc3Rbdix5XT1wLnVzZVN0YXRlKCJwYXJhZ3JhcGgiKTtwLnVzZVN0YXRlKCExKSxwLnVzZVN0YXRlKCExKSxwLnVzZVN0YXRlKCJ1cmwiKSxwLnVzZVN0YXRlKG51bGwpO2NvbnN0W3gsU109cC51c2VTdGF0ZShudWxsKSxrPU09PntvLmRpc3BhdGNoQ29tbWFuZChQbC5UT0dHTEVfTElOS19DT01NQU5ELE0pfSxiPXtwYXJhZ3JhcGg6Ik5vcm1hbCIsaDE6IkhlYWRpbmcgMSIsaDI6IkhlYWRpbmcgMiIsaDM6IkhlYWRpbmcgMyIsaDQ6IkhlYWRpbmcgNCIsaDU6IkhlYWRpbmcgNSIsaDY6IkhlYWRpbmcgNiIsbnVtYmVyOiJOdW1iZXJlZCBMaXN0IixidWxsZXQ6IkJ1bGxldGVkIExpc3QifSxUPXt9O2Zvcihjb25zdCBNIGluIGIpVFtiW01dXT1NO2NvbnN0IE49cC51c2VDYWxsYmFjaygoKT0+e2NvbnN0IE09aGUuJGdldFNlbGVjdGlvbigpO2lmKGhlLiRpc1JhbmdlU2VsZWN0aW9uKE0pKXtjb25zdCBqPU0uYW5jaG9yLmdldE5vZGUoKTtsZXQgQj1qLmdldEtleSgpPT09InJvb3QiP2o6TnQuJGZpbmRNYXRjaGluZ1BhcmVudChqLCQ9Pntjb25zdCBFPSQuZ2V0UGFyZW50KCk7cmV0dXJuIEUhPT1udWxsJiZoZS4kaXNSb290T3JTaGFkb3dSb290KEUpfSk7Qj09PW51bGwmJihCPWouZ2V0VG9wTGV2ZWxFbGVtZW50T3JUaHJvdygpKTtjb25zdCByZT1yRShNKSxIPU50LiRmaW5kTWF0Y2hpbmdQYXJlbnQocmUsUGwuJGlzTGlua05vZGUpO2lmKEghPT1udWxsKXtjb25zdCAkPUguZ2V0VVJMKCk7UygkKX1lbHNlIFMobnVsbCk7Y29uc3QgWT1CLmdldEtleSgpLEM9aS5nZXRFbGVtZW50QnlLZXkoWSk7aWYoYyhNLmhhc0Zvcm1hdCgiYm9sZCIpKSxmKE0uaGFzRm9ybWF0KCJpdGFsaWMiKSksZyhNLmhhc0Zvcm1hdCgic3RyaWtldGhyb3VnaCIpKSxfKE0uaGFzRm9ybWF0KCJ1bmRlcmxpbmUiKSksQyE9PW51bGwpaWYoYShZKSxnby4kaXNMaXN0Tm9kZShCKSl7Y29uc3QgJD1OdC4kZ2V0TmVhcmVzdE5vZGVPZlR5cGUoaixnby5MaXN0Tm9kZSksRT0kPyQuZ2V0TGlzdFR5cGUoKTpCLmdldExpc3RUeXBlKCk7eShFKX1lbHNle2NvbnN0ICQ9R3MuJGlzSGVhZGluZ05vZGUoQik/Qi5nZXRUYWcoKTpCLmdldFR5cGUoKTskIGluIGImJnkoJCl9fX0sW2ldKTtwLnVzZUVmZmVjdCgoKT0+TnQubWVyZ2VSZWdpc3RlcihvLnJlZ2lzdGVyVXBkYXRlTGlzdGVuZXIoKHtlZGl0b3JTdGF0ZTpNfSk9PntNLnJlYWQoKCk9PntOKCl9KX0pKSxbTixpLG9dKSxwLnVzZUVmZmVjdCgoKT0+by5yZWdpc3RlckNvbW1hbmQoaGUuU0VMRUNUSU9OX0NIQU5HRV9DT01NQU5ELChNLGopPT4oTigpLGwoaiksITEpLGhlLkNPTU1BTkRfUFJJT1JJVFlfQ1JJVElDQUwpLFtvLE5dKTtjb25zdCBEPU09PntbImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiJdLmluY2x1ZGVzKE0pP3YhPT1NJiZvLnVwZGF0ZSgoKT0+e2NvbnN0IGo9aGUuJGdldFNlbGVjdGlvbigpO2hlLiRpc1JhbmdlU2VsZWN0aW9uKGopJiZEby4kc2V0QmxvY2tzVHlwZShqLCgpPT5Hcy4kY3JlYXRlSGVhZGluZ05vZGUoTSkpfSk6TT09PSJwYXJhZ3JhcGgiJiZ2IT09InBhcmFncmFwaCI/by51cGRhdGUoKCk9Pntjb25zdCBqPWhlLiRnZXRTZWxlY3Rpb24oKTsoaGUuJGlzUmFuZ2VTZWxlY3Rpb24oail8fGhlLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihqKSkmJkRvLiRzZXRCbG9ja3NUeXBlKGosKCk9PmhlLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCkpfSk6TT09PSJudW1iZXIiJiZ2IT09Im51bWJlciI/by5kaXNwYXRjaENvbW1hbmQoZ28uSU5TRVJUX09SREVSRURfTElTVF9DT01NQU5ELHZvaWQgMCk6TT09PSJidWxsZXQiJiZ2IT09ImJ1bGxldCI/by5kaXNwYXRjaENvbW1hbmQoZ28uSU5TRVJUX1VOT1JERVJFRF9MSVNUX0NPTU1BTkQsdm9pZCAwKTpvLmRpc3BhdGNoQ29tbWFuZChnby5SRU1PVkVfTElTVF9DT01NQU5ELHZvaWQgMCl9O3JldHVybiBwLnVzZUNhbGxiYWNrKCgpPT57by51cGRhdGUoKCk9Pntjb25zdCBNPWhlLiRnZXRTZWxlY3Rpb24oKTtpZihoZS4kaXNSYW5nZVNlbGVjdGlvbihNKSl7Y29uc3Qgaj1NLmFuY2hvcixCPU0uZm9jdXMscmU9TS5nZXROb2RlcygpO2lmKGoua2V5PT09Qi5rZXkmJmoub2Zmc2V0PT09Qi5vZmZzZXQpcmV0dXJuO3JlLmZvckVhY2goKEgsWSk9PntoZS4kaXNUZXh0Tm9kZShIKT8oWT09PTAmJmoub2Zmc2V0IT09MCYmKEg9SC5zcGxpdFRleHQoai5vZmZzZXQpWzFdfHxIKSxZPT09cmUubGVuZ3RoLTEmJihIPUguc3BsaXRUZXh0KEIub2Zmc2V0KVswXXx8SCksSC5fX3N0eWxlIT09IiImJkguc2V0U3R5bGUoIiIpLEguX19mb3JtYXQhPT0wJiYoSC5zZXRGb3JtYXQoMCksTnQuJGdldE5lYXJlc3RCbG9ja0VsZW1lbnRBbmNlc3Rvck9yVGhyb3coSCkuc2V0Rm9ybWF0KCIiKSkpOkdzLiRpc0hlYWRpbmdOb2RlKEgpJiZILnJlcGxhY2UoaGUuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKSwhMCl9KX19KX0sW2ldKSx3LmpzeHMoImRpdiIse2NsYXNzTmFtZToic3RpY2t5IHRvcC0wIGJvcmRlci1iIGJnLWJhY2tncm91bmQgYm9yZGVyLWhpZ2hsaWdodCBmbGV4IGZsZXgtY29sIixjaGlsZHJlbjpbdy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgZ2FwLTEiLGNoaWxkcmVuOlt3LmpzeChWUCx7b3B0aW9uczpPYmplY3QudmFsdWVzKGIpLGxhYmVsOmJbdl0/P3YrIiAobm90IHN1cHBvcnRlZCkiLG9uQ2hhbmdlOk09PntEKFRbTV0pfX0pLHcuanN4KFpvLHt2YXJpYW50OiJwcmltYXJ5IixvbkNsaWNrOk09PntNLnByZXZlbnREZWZhdWx0KCksby5kaXNwYXRjaENvbW1hbmQoaGUuRk9STUFUX1RFWFRfQ09NTUFORCwiYm9sZCIpfSxhY3RpdmU6dSxpY29uOncuanN4KExQLHtjbGFzc05hbWU6YCR7dSYmInN0cm9rZS1bM3B4XSJ9YH0pfSksdy5qc3goWm8se2FjdGl2ZTpoLG9uQ2xpY2s6TT0+e00ucHJldmVudERlZmF1bHQoKSxvLmRpc3BhdGNoQ29tbWFuZChoZS5GT1JNQVRfVEVYVF9DT01NQU5ELCJzdHJpa2V0aHJvdWdoIil9LGljb246dy5qc3goelAse2NsYXNzTmFtZTpgJHtoJiYic3Ryb2tlLVsycHhdIn1gfSl9KSx3LmpzeChabyx7YWN0aXZlOmQsb25DbGljazpNPT57TS5wcmV2ZW50RGVmYXVsdCgpLG8uZGlzcGF0Y2hDb21tYW5kKGhlLkZPUk1BVF9URVhUX0NPTU1BTkQsIml0YWxpYyIpfSxpY29uOncuanN4KElQLHtjbGFzc05hbWU6YCR7ZCYmInN0cm9rZS1bM3B4XSJ9YH0pfSksdy5qc3goWm8se2FjdGl2ZTp4IT09bnVsbCxvbkNsaWNrOk09PntNLnByZXZlbnREZWZhdWx0KCksUygiIiksaygiIil9LGljb246dy5qc3gock8se3dpZHRoOjEyLGhlaWdodDoxMixjbGFzc05hbWU6YCR7eCE9PW51bGwmJiJzdHJva2UtWzNweF0ifWB9KX0pLHcuanN4cygibGFiZWwiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGN1cnNvci1wb2ludGVyIixjaGlsZHJlbjpbdy5qc3goSncse30pLHcuanN4KCJpbnB1dCIse3R5cGU6ImZpbGUiLGhpZGRlbjohMCxvbkNoYW5nZTpNPT57TS5wcmV2ZW50RGVmYXVsdCgpLG5FKE0pLnRoZW4oaj0+e28uZGlzcGF0Y2hDb21tYW5kKGVFLHsuLi5qfSl9KS5jYXRjaChqPT57Y29uc29sZS5lcnJvcigiRXJyb3IgcmVhZGluZyBpbWFnZSIsail9KX19KV19KV19KSx4IT09bnVsbCYmdy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgcC0yIixjaGlsZHJlbjpbdy5qc3goImlucHV0Iix7dHlwZToidGV4dCIscGxhY2Vob2xkZXI6IkVudGVyIFVSTCIsY2xhc3NOYW1lOiJ3LTEvMyB0ZXh0LXByaW1hcnkgYmctYmFja2dyb3VuZCBweC0yIix2YWx1ZTp4LG9uQ2hhbmdlOk09PntNLnByZXZlbnREZWZhdWx0KCksUyhNLnRhcmdldC52YWx1ZSl9fSksdy5qc3goWm8se3ZhcmlhbnQ6InByaW1hcnkiLG9uQ2xpY2s6TT0+e00ucHJldmVudERlZmF1bHQoKSxrKHh8fG51bGwpfSxpY29uOncuanN4KGVPLHtzaXplOjE0fSl9KSx3LmpzeChabyx7dmFyaWFudDoicHJpbWFyeSIsb25DbGljazpNPT57TS5wcmV2ZW50RGVmYXVsdCgpLGsobnVsbCl9LGljb246dy5qc3gobE8se3NpemU6MTR9KX0pXX0pXX0pfSxhTz1zTztmdW5jdGlvbiB1TyhlKXtjb25zb2xlLmVycm9yKGUpfWNvbnN0IGNPPTI4LGRPPSh7cmljaHRleHQ6ZSxvbkVkaXRvcjp0fSk9Pntjb25zdHt3aW5kb3dTaXplOm59PVNtKCksbz17bmFtZXNwYWNlOiJ2YWwiLGVkaXRvclN0YXRlOmk9PntpLnNldEVkaXRvclN0YXRlKGkucGFyc2VFZGl0b3JTdGF0ZSh7cm9vdDplMihhXyhlKSl9KSl9LG5vZGVzOltHcy5IZWFkaW5nTm9kZSxVYSxnby5MaXN0Tm9kZSxnby5MaXN0SXRlbU5vZGUsUGwuTGlua05vZGVdLHRoZW1lOnt0ZXh0Ontib2xkOiJmb250LXNlbWlib2xkIix1bmRlcmxpbmU6InVuZGVybGluZSIsaXRhbGljOiJpdGFsaWMiLHN0cmlrZXRocm91Z2g6ImxpbmUtdGhyb3VnaCIsdW5kZXJsaW5lU3RyaWtldGhyb3VnaDoidW5kZXJsaW5lIGxpbmUtdGhyb3VnaCJ9LGxpc3Q6e2xpc3RpdGVtOiJtbC1bMjBweF0iLG9sOiJsaXN0LWRlY2ltYWwiLHVsOiJsaXN0LWRpc2MifSxoZWFkaW5nOntoMToidGV4dC00eGwgZm9udC1ib2xkIixoMjoidGV4dC0zeGwgZm9udC1ib2xkIixoMzoidGV4dC0yeGwgZm9udC1ib2xkIixoNDoidGV4dC14bCBmb250LWJvbGQiLGg1OiJ0ZXh0LWxnIGZvbnQtYm9sZCIsaDY6InRleHQtbWQgZm9udC1ib2xkIn0sbGluazoidGV4dC1oaWdobGlnaHQgdW5kZXJsaW5lIn0sb25FcnJvcjp1T307cmV0dXJuIHcuanN4cyhoUi5MZXhpY2FsQ29tcG9zZXIse2luaXRpYWxDb25maWc6byxjaGlsZHJlbjpbdy5qc3goT1Ase30pLHcuanN4KGFPLHtvbkVkaXRvcjp0fSksdy5qc3goaFAuUmljaFRleHRQbHVnaW4se2NvbnRlbnRFZGl0YWJsZTp3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmb250LXNhbnMgYm9yZGVyLWIgdGV4dC1wcmltYXJ5IGJvcmRlci1oaWdobGlnaHQiLHN0eWxlOnttaW5IZWlnaHQ6biE9bnVsbCYmbi5pbm5lckhlaWdodD8obj09bnVsbD92b2lkIDA6bi5pbm5lckhlaWdodCktY086dm9pZCAwfSxjaGlsZHJlbjp3LmpzeChSUCx7Y2xhc3NOYW1lOiJwLTQgb3V0bGluZS1ub25lIGJnLWZpbGwifSl9KSxwbGFjZWhvbGRlcjp3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiIiLGNoaWxkcmVuOiJFbnRlciBzb21lIHRleHQuLi4ifSksRXJyb3JCb3VuZGFyeTp3Un0pLHcuanN4KGJQLkxpbmtQbHVnaW4se30pLHcuanN4KEtQLHt9KSx3LmpzeCh5UC5MaXN0UGx1Z2luLHt9KSx3LmpzeChBUCx7fSksdy5qc3goTlIuSGlzdG9yeVBsdWdpbix7fSldfSl9O3ZhciBmTz17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07Y29uc3QgaE89ZT0+ZS5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCksT249KGUsdCk9Pntjb25zdCBuPXAuZm9yd2FyZFJlZigoe2NvbG9yOnI9ImN1cnJlbnRDb2xvciIsc2l6ZTpvPTI0LHN0cm9rZVdpZHRoOmk9MixhYnNvbHV0ZVN0cm9rZVdpZHRoOmwsY2hpbGRyZW46cywuLi5hfSx1KT0+cC5jcmVhdGVFbGVtZW50KCJzdmciLHtyZWY6dSwuLi5mTyx3aWR0aDpvLGhlaWdodDpvLHN0cm9rZTpyLHN0cm9rZVdpZHRoOmw/TnVtYmVyKGkpKjI0L051bWJlcihvKTppLGNsYXNzTmFtZTpgbHVjaWRlIGx1Y2lkZS0ke2hPKGUpfWAsLi4uYX0sWy4uLnQubWFwKChbYyxkXSk9PnAuY3JlYXRlRWxlbWVudChjLGQpKSwuLi4oQXJyYXkuaXNBcnJheShzKT9zOltzXSl8fFtdXSkpO3JldHVybiBuLmRpc3BsYXlOYW1lPWAke2V9YCxufSxwTz1PbigiQ2hlY2siLFtbInBvbHlsaW5lIix7cG9pbnRzOiIyMCA2IDkgMTcgNCAxMiIsa2V5OiIxMGpqZmoifV1dKSxzRT1PbigiQ2hldnJvbkRvd24iLFtbInBhdGgiLHtkOiJtNiA5IDYgNiA2LTYiLGtleToicXJ1bnNsIn1dXSksZ089T24oIkNoZXZyb25MZWZ0IixbWyJwYXRoIix7ZDoibTE1IDE4LTYtNiA2LTYiLGtleToiMXduZmczIn1dXSksZDA9T24oIkxvZ0luIixbWyJwYXRoIix7ZDoiTTE1IDNoNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTQiLGtleToidTUzczZyIn1dLFsicG9seWxpbmUiLHtwb2ludHM6IjEwIDE3IDE1IDEyIDEwIDciLGtleToiMWFpbDBoIn1dLFsibGluZSIse3gxOiIxNSIseDI6IjMiLHkxOiIxMiIseTI6IjEyIixrZXk6InY2Z3J4OCJ9XV0pLG1PPU9uKCJNYXhpbWl6ZSIsW1sicGF0aCIse2Q6Ik04IDNINWEyIDIgMCAwIDAtMiAydjMiLGtleToiMWRjbWl0In1dLFsicGF0aCIse2Q6Ik0yMSA4VjVhMiAyIDAgMCAwLTItMmgtMyIsa2V5OiIxZTRndDMifV0sWyJwYXRoIix7ZDoiTTMgMTZ2M2EyIDIgMCAwIDAgMiAyaDMiLGtleToid3NsNXNjIn1dLFsicGF0aCIse2Q6Ik0xNiAyMWgzYTIgMiAwIDAgMCAyLTJ2LTMiLGtleToiMTh0cmVrIn1dXSksdk89T24oIk1pbmltaXplIixbWyJwYXRoIix7ZDoiTTggM3YzYTIgMiAwIDAgMS0yIDJIMyIsa2V5OiJob2hidHIifV0sWyJwYXRoIix7ZDoiTTIxIDhoLTNhMiAyIDAgMCAxLTItMlYzIixrZXk6IjVqdzFmMyJ9XSxbInBhdGgiLHtkOiJNMyAxNmgzYTIgMiAwIDAgMSAyIDJ2MyIsa2V5OiIxOTh0dnIifV0sWyJwYXRoIix7ZDoiTTE2IDIxdi0zYTIgMiAwIDAgMSAyLTJoMyIsa2V5OiJwaDhteHAifV1dKSx5Tz1PbigiTW9vbiIsW1sicGF0aCIse2Q6Ik0xMiAzYTYgNiAwIDAgMCA5IDkgOSA5IDAgMSAxLTktOVoiLGtleToiYTd0bjE4In1dXSkseE89T24oIlBhdXNlIixbWyJyZWN0Iix7d2lkdGg6IjQiLGhlaWdodDoiMTYiLHg6IjYiLHk6IjQiLGtleToiaWZmaGU0In1dLFsicmVjdCIse3dpZHRoOiI0IixoZWlnaHQ6IjE2Iix4OiIxNCIseToiNCIsa2V5OiJzamluN2oifV1dKSx3Tz1PbigiUGxheSIsW1sicG9seWdvbiIse3BvaW50czoiNSAzIDE5IDEyIDUgMjEgNSAzIixrZXk6IjE5MTYzNyJ9XV0pLF9PPU9uKCJQb3dlciIsW1sicGF0aCIse2Q6Ik0xMiAydjEwIixrZXk6Im1uZmJsIn1dLFsicGF0aCIse2Q6Ik0xOC40IDYuNmE5IDkgMCAxIDEtMTIuNzcuMDQiLGtleToib2JvZnU5In1dXSksU089T24oIlNlbmQiLFtbInBhdGgiLHtkOiJtMjIgMi03IDIwLTQtOS05LTRaIixrZXk6IjFxM3ZnZyJ9XSxbInBhdGgiLHtkOiJNMjIgMiAxMSAxMyIsa2V5OiJuemJxZWYifV1dKSxFTz1PbigiU3VuIixbWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNCIsa2V5OiI0ZXhpcDIifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiIsa2V5OiJ0dXMwM20ifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Im00LjkzIDQuOTMgMS40MSAxLjQxIixrZXk6IjE0OXQ2aiJ9XSxbInBhdGgiLHtkOiJtMTcuNjYgMTcuNjYgMS40MSAxLjQxIixrZXk6InB0Ymd1diJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyIixrZXk6IjF0OGY4biJ9XSxbInBhdGgiLHtkOiJNMjAgMTJoMiIsa2V5OiIxcThtancifV0sWyJwYXRoIix7ZDoibTYuMzQgMTcuNjYtMS40MSAxLjQxIixrZXk6IjFtOHp6NSJ9XSxbInBhdGgiLHtkOiJtMTkuMDcgNC45My0xLjQxIDEuNDEiLGtleToiMXNobGNzIn1dXSksQ089T24oIlgiLFtbInBhdGgiLHtkOiJNMTggNiA2IDE4IixrZXk6IjFibDVmOCJ9XSxbInBhdGgiLHtkOiJtNiA2IDEyIDEyIixrZXk6ImQ4Yms2diJ9XV0pLGttPSJwLTEgYm9yZGVyIHJvdW5kZWQtZnVsbCBzaGFkb3cgYm9yZGVyLWFjY2VudCIsZjA9InZhbGJ1aWxkOnVybEJlZm9yZU5hdmlnYXRpb24iO2Z1bmN0aW9uICRPKHthcGk6ZX0pe2NvbnN0e3RoZW1lOnQsc2V0VGhlbWU6bixlZGl0TW9kZTpyLHNldEVkaXRNb2RlOm8sc2Vzc2lvbjppfT1TbSgpO2lmKGkuc3RhdHVzPT09InN1Y2Nlc3MiJiZpLmRhdGEubW9kZT09PSJ1bmF1dGhvcml6ZWQiKXJldHVybiB3LmpzeHMoaDAse2hyZWY6ZS5nZXRMb2dpblVybCh3aW5kb3cubG9jYXRpb24uaHJlZiksY2hpbGRyZW46W3cuanN4KCJzcGFuIix7Y2hpbGRyZW46IkxvZ2luIn0pLHcuanN4KGQwLHtzaXplOjE4fSldfSk7aWYoaS5zdGF0dXM9PT0ic3VjY2VzcyImJiFpLmRhdGEuZW5hYmxlZClyZXR1cm4gdy5qc3hzKGgwLHtocmVmOmUuZ2V0RW5hYmxlVXJsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxjaGlsZHJlbjpbdy5qc3goInNwYW4iLHtjaGlsZHJlbjoiRW5hYmxlIn0pLHcuanN4KGQwLHtzaXplOjE4fSldfSk7Y29uc3RbbCxzXT1wLnVzZVN0YXRlKCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57aS5zdGF0dXM9PT0ic3VjY2VzcyImJmkuZGF0YS5tb2RlPT09InByb3h5IiYmZS5nZXRQYXRjaGVzKHt9KS50aGVuKGE9PntpZihEcy5pc09rKGEpKXtsZXQgdT0wO2Zvcihjb25zdCBjIGluIGEudmFsdWUpdSs9YS52YWx1ZVtjXS5sZW5ndGg7cyh1KX1lbHNlIGNvbnNvbGUuZXJyb3IoIkNvdWxkIG5vdCBsb2FkIHBhdGNoZXMiLGEuZXJyb3IpfSl9LFtpXSksdy5qc3hzKGtPLHtjaGlsZHJlbjpbdy5qc3goRXUse2FjdGl2ZTpyPT09ImhvdmVyIixvbkNsaWNrOigpPT57byhhPT5hPT09ImhvdmVyIj8ib2ZmIjoiaG92ZXIiKX0sY2hpbGRyZW46dy5qc3goImRpdiIse2NsYXNzTmFtZToiaC1bMjRweF0gdy1bMjRweF0gZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOnI9PT0iaG92ZXIiP3cuanN4KHhPLHtzaXplOjE4fSk6dy5qc3god08se3NpemU6MTh9KX0pfSksdy5qc3goRXUse29uQ2xpY2s6KCk9PntuKHQ9PT0iZGFyayI/ImxpZ2h0IjoiZGFyayIpfSxjaGlsZHJlbjp3LmpzeHMoImRpdiIse2NsYXNzTmFtZToiaC1bMjRweF0gdy1bMjRweF0gZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOlt0PT09ImRhcmsiJiZ3LmpzeChFTyx7c2l6ZToxNX0pLHQ9PT0ibGlnaHQiJiZ3LmpzeCh5Tyx7c2l6ZToxNX0pXX0pfSksdy5qc3goRXUse2FjdGl2ZTpyPT09ImZ1bGwiLG9uQ2xpY2s6KCk9PntpZihyIT09ImZ1bGwiKWxvY2FsU3RvcmFnZS5zZXRJdGVtKGYwLHdpbmRvdy5sb2NhdGlvbi5ocmVmKSx3aW5kb3cubG9jYXRpb24uaHJlZj1lLmdldEVkaXRVcmwoKTtlbHNlIGlmKHI9PT0iZnVsbCIpe2NvbnN0IGE9bG9jYWxTdG9yYWdlLmdldEl0ZW0oZjApO3dpbmRvdy5sb2NhdGlvbi5ocmVmPWF8fCIvIn19LGNoaWxkcmVuOncuanN4KCJkaXYiLHtjbGFzc05hbWU6ImgtWzI0cHhdIHctWzI0cHhdIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIixjaGlsZHJlbjpyPT09ImZ1bGwiP3cuanN4KHZPLHtzaXplOjE1fSk6dy5qc3gobU8se3NpemU6MTV9KX0pfSksbCYmdy5qc3goRXUse29uQ2xpY2s6KCk9Pnt9LGNoaWxkcmVuOncuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBoLVsyNHB4XSB3LVsyNHB4XSBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46W3cuanN4KCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIC1yaWdodC1bMTBweF0gLXRvcC1bMTBweF0gYm9yZGVyIGJvcmRlci1ib3JkZXIgcm91bmRlZC1mdWxsIHB4LTEgZm9udC1zYW5zIHRleHQteHMgYmctY2FyZCB0ZXh0LWFjY2VudCIsY2hpbGRyZW46bH0pLHcuanN4KFNPLHtzaXplOjE4fSldfSl9KSx3LmpzeCgiYSIse2NsYXNzTmFtZTprbSxocmVmOmUuZ2V0RGlzYWJsZVVybCh3aW5kb3cubG9jYXRpb24uaHJlZiksY2hpbGRyZW46dy5qc3goImRpdiIse2NsYXNzTmFtZToiaC1bMjRweF0gdy1bMjRweF0gZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOncuanN4KF9PLHtzaXplOjE4fSl9KX0pXX0pfWZ1bmN0aW9uIGgwKHtocmVmOmUsY2hpbGRyZW46dH0pe3JldHVybiB3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgaC1mdWxsIGZvbnQtc2FucyBib3JkZXItMiByb3VuZGVkLWZ1bGwgZ2FwLXgtMyB0ZXh0LXByaW1hcnkgYmctYmFja2dyb3VuZCBib3JkZXItZmlsbCIsY2hpbGRyZW46dy5qc3goImEiLHtjbGFzc05hbWU6a20saHJlZjplLGNoaWxkcmVuOncuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTIgZ2FwLXgtMiIsY2hpbGRyZW46dH0pfSl9KX1mdW5jdGlvbiBrTyh7Y2hpbGRyZW46ZX0pe3JldHVybiB3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgaC1mdWxsIHB4LTIgcHktMiBmb250LXNhbnMgYm9yZGVyLTIgcm91bmRlZC1mdWxsIGdhcC14LTMgdGV4dC1wcmltYXJ5IGJnLWJhY2tncm91bmQgYm9yZGVyLWZpbGwiLGNoaWxkcmVuOmV9KX1mdW5jdGlvbiBFdSh7YWN0aXZlOmUsb25DbGljazp0LGNoaWxkcmVuOm59KXtyZXR1cm4gdy5qc3goImJ1dHRvbiIse2NsYXNzTmFtZTpkZChrbSx7ImJnLWFjY2VudCBkcm9wLXNoYWRvdy1bMHB4XzBweF8xMnB4X3JnYmEoNTYsMjA1LDE1MiwwLjYwKV0iOmV9KSxvbkNsaWNrOnQsY2hpbGRyZW46bn0pfWNvbnN0IHAwPWU9PnR5cGVvZiBlPT0iYm9vbGVhbiI/IiIuY29uY2F0KGUpOmU9PT0wPyIwIjplLGcwPVZ3LFRPPShlLHQpPT5uPT57dmFyIHI7aWYoKHQ9PW51bGw/dm9pZCAwOnQudmFyaWFudHMpPT1udWxsKXJldHVybiBnMChlLG49PW51bGw/dm9pZCAwOm4uY2xhc3Msbj09bnVsbD92b2lkIDA6bi5jbGFzc05hbWUpO2NvbnN0e3ZhcmlhbnRzOm8sZGVmYXVsdFZhcmlhbnRzOml9PXQsbD1PYmplY3Qua2V5cyhvKS5tYXAodT0+e2NvbnN0IGM9bj09bnVsbD92b2lkIDA6blt1XSxkPWk9PW51bGw/dm9pZCAwOmlbdV07aWYoYz09PW51bGwpcmV0dXJuIG51bGw7Y29uc3QgZj1wMChjKXx8cDAoZCk7cmV0dXJuIG9bdV1bZl19KSxzPW4mJk9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgodSxjKT0+e2xldFtkLGZdPWM7cmV0dXJuIGY9PT12b2lkIDB8fCh1W2RdPWYpLHV9LHt9KSxhPXQ9PW51bGx8fChyPXQuY29tcG91bmRWYXJpYW50cyk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnJlZHVjZSgodSxjKT0+e2xldHtjbGFzczpkLGNsYXNzTmFtZTpmLC4uLmh9PWM7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGgpLmV2ZXJ5KGc9PntsZXRbbSxfXT1nO3JldHVybiBBcnJheS5pc0FycmF5KF8pP18uaW5jbHVkZXMoey4uLmksLi4uc31bbV0pOnsuLi5pLC4uLnN9W21dPT09X30pP1suLi51LGQsZl06dX0sW10pO3JldHVybiBnMChlLGwsYSxuPT1udWxsP3ZvaWQgMDpuLmNsYXNzLG49PW51bGw/dm9pZCAwOm4uY2xhc3NOYW1lKX0sYk89VE8oImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gcmluZy1vZmZzZXQtYmFja2dyb3VuZCB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIix7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6ImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgaG92ZXI6YmctcHJpbWFyeS85MCIsZGVzdHJ1Y3RpdmU6ImJnLWRlc3RydWN0aXZlIHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCIsb3V0bGluZToiYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIixzZWNvbmRhcnk6ImJnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCIsZ2hvc3Q6ImhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIixsaW5rOiJ0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZSJ9LHNpemU6e2RlZmF1bHQ6ImgtMTAgcHgtNCBweS0yIixzbToiaC05IHJvdW5kZWQtbWQgcHgtMyIsbGc6ImgtMTEgcm91bmRlZC1tZCBweC04IixpY29uOiJoLTEwIHctMTAifX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OiJkZWZhdWx0IixzaXplOiJkZWZhdWx0In19KSxKbD1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSx2YXJpYW50OnQsc2l6ZTpuLGFzQ2hpbGQ6cj0hMSwuLi5vfSxpKT0+e2NvbnN0IGw9cj9UbDoiYnV0dG9uIjtyZXR1cm4gdy5qc3gobCx7Y2xhc3NOYW1lOnN0KGJPKHt2YXJpYW50OnQsc2l6ZTpuLGNsYXNzTmFtZTplfSkpLHJlZjppLC4uLm99KX0pO0psLmRpc3BsYXlOYW1lPSJCdXR0b24iO2Z1bmN0aW9uIE5PKGU9ImRhcmsiKXtjb25zdFt0LG5dPXAudXNlU3RhdGUoZSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57bG9jYWxTdG9yYWdlLmdldEl0ZW0oInZhbC10aGVtZSIpPT09ImxpZ2h0Ij9uKCJsaWdodCIpOmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2YWwtdGhlbWUiKT09PSJkYXJrInx8d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcz9uKCJkYXJrIik6d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIpLm1hdGNoZXMmJm4oImxpZ2h0Iik7Y29uc3Qgcj1vPT57bG9jYWxTdG9yYWdlLmdldEl0ZW0oInZhbC10aGVtZSIpfHxuKG8ubWF0Y2hlcz8iZGFyayI6ImxpZ2h0Iil9O3JldHVybiB3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsciksKCk9Pnt3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIscil9fSxbXSksW3Qscj0+e2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJ2YWwtdGhlbWUiLHIpLG4ocil9XX1jb25zdCBUbT1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSx0eXBlOnQsLi4ubn0scik9PncuanN4KCJpbnB1dCIse3R5cGU6dCxjbGFzc05hbWU6c3QoImZsZXggaC0xMCB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcHgtMyBweS0yIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmaWxlOmJvcmRlci0wIGZpbGU6YmctdHJhbnNwYXJlbnQgZmlsZTp0ZXh0LXNtIGZpbGU6Zm9udC1tZWRpdW0gcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCIsZSkscmVmOnIsLi4ubn0pKTtUbS5kaXNwbGF5TmFtZT0iSW5wdXQiO2Z1bmN0aW9uIGFFKGUpe2NvbnN0IHQ9ZSsiQ29sbGVjdGlvblByb3ZpZGVyIixbbixyXT1raSh0KSxbbyxpXT1uKHQse2NvbGxlY3Rpb25SZWY6e2N1cnJlbnQ6bnVsbH0saXRlbU1hcDpuZXcgTWFwfSksbD1oPT57Y29uc3R7c2NvcGU6ZyxjaGlsZHJlbjptfT1oLF89ZWUudXNlUmVmKG51bGwpLHY9ZWUudXNlUmVmKG5ldyBNYXApLmN1cnJlbnQ7cmV0dXJuIGVlLmNyZWF0ZUVsZW1lbnQobyx7c2NvcGU6ZyxpdGVtTWFwOnYsY29sbGVjdGlvblJlZjpffSxtKX0scz1lKyJDb2xsZWN0aW9uU2xvdCIsYT1lZS5mb3J3YXJkUmVmKChoLGcpPT57Y29uc3R7c2NvcGU6bSxjaGlsZHJlbjpffT1oLHY9aShzLG0pLHk9UWUoZyx2LmNvbGxlY3Rpb25SZWYpO3JldHVybiBlZS5jcmVhdGVFbGVtZW50KFRsLHtyZWY6eX0sXyl9KSx1PWUrIkNvbGxlY3Rpb25JdGVtU2xvdCIsYz0iZGF0YS1yYWRpeC1jb2xsZWN0aW9uLWl0ZW0iLGQ9ZWUuZm9yd2FyZFJlZigoaCxnKT0+e2NvbnN0e3Njb3BlOm0sY2hpbGRyZW46XywuLi52fT1oLHk9ZWUudXNlUmVmKG51bGwpLHg9UWUoZyx5KSxTPWkodSxtKTtyZXR1cm4gZWUudXNlRWZmZWN0KCgpPT4oUy5pdGVtTWFwLnNldCh5LHtyZWY6eSwuLi52fSksKCk9PnZvaWQgUy5pdGVtTWFwLmRlbGV0ZSh5KSkpLGVlLmNyZWF0ZUVsZW1lbnQoVGwse1tjXToiIixyZWY6eH0sXyl9KTtmdW5jdGlvbiBmKGgpe2NvbnN0IGc9aShlKyJDb2xsZWN0aW9uQ29uc3VtZXIiLGgpO3JldHVybiBlZS51c2VDYWxsYmFjaygoKT0+e2NvbnN0IF89Zy5jb2xsZWN0aW9uUmVmLmN1cnJlbnQ7aWYoIV8pcmV0dXJuW107Y29uc3Qgdj1BcnJheS5mcm9tKF8ucXVlcnlTZWxlY3RvckFsbChgWyR7Y31dYCkpO3JldHVybiBBcnJheS5mcm9tKGcuaXRlbU1hcC52YWx1ZXMoKSkuc29ydCgoUyxrKT0+di5pbmRleE9mKFMucmVmLmN1cnJlbnQpLXYuaW5kZXhPZihrLnJlZi5jdXJyZW50KSl9LFtnLmNvbGxlY3Rpb25SZWYsZy5pdGVtTWFwXSl9cmV0dXJuW3tQcm92aWRlcjpsLFNsb3Q6YSxJdGVtU2xvdDpkfSxmLHJdfWZ1bmN0aW9uIFJPKGUsdD1nbG9iYWxUaGlzPT1udWxsP3ZvaWQgMDpnbG9iYWxUaGlzLmRvY3VtZW50KXtjb25zdCBuPVV0KGUpO3AudXNlRWZmZWN0KCgpPT57Y29uc3Qgcj1vPT57by5rZXk9PT0iRXNjYXBlIiYmbihvKX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsciksKCk9PnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscil9LFtuLHRdKX1jb25zdCBrcD0iZGlzbWlzc2FibGVMYXllci51cGRhdGUiLFBPPSJkaXNtaXNzYWJsZUxheWVyLnBvaW50ZXJEb3duT3V0c2lkZSIsT089ImRpc21pc3NhYmxlTGF5ZXIuZm9jdXNPdXRzaWRlIjtsZXQgbTA7Y29uc3QgQU89cC5jcmVhdGVDb250ZXh0KHtsYXllcnM6bmV3IFNldCxsYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZDpuZXcgU2V0LGJyYW5jaGVzOm5ldyBTZXR9KSxNTz1wLmZvcndhcmRSZWYoKGUsdCk9Pnt2YXIgbjtjb25zdHtkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6cj0hMSxvbkVzY2FwZUtleURvd246byxvblBvaW50ZXJEb3duT3V0c2lkZTppLG9uRm9jdXNPdXRzaWRlOmwsb25JbnRlcmFjdE91dHNpZGU6cyxvbkRpc21pc3M6YSwuLi51fT1lLGM9cC51c2VDb250ZXh0KEFPKSxbZCxmXT1wLnVzZVN0YXRlKG51bGwpLGg9KG49ZD09bnVsbD92b2lkIDA6ZC5vd25lckRvY3VtZW50KSE9PW51bGwmJm4hPT12b2lkIDA/bjpnbG9iYWxUaGlzPT1udWxsP3ZvaWQgMDpnbG9iYWxUaGlzLmRvY3VtZW50LFssZ109cC51c2VTdGF0ZSh7fSksbT1RZSh0LE49PmYoTikpLF89QXJyYXkuZnJvbShjLmxheWVycyksW3ZdPVsuLi5jLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkXS5zbGljZSgtMSkseT1fLmluZGV4T2YodikseD1kP18uaW5kZXhPZihkKTotMSxTPWMubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZT4wLGs9eD49eSxiPUxPKE49Pntjb25zdCBEPU4udGFyZ2V0LE09Wy4uLmMuYnJhbmNoZXNdLnNvbWUoaj0+ai5jb250YWlucyhEKSk7IWt8fE18fChpPT1udWxsfHxpKE4pLHM9PW51bGx8fHMoTiksTi5kZWZhdWx0UHJldmVudGVkfHxhPT1udWxsfHxhKCkpfSxoKSxUPURPKE49Pntjb25zdCBEPU4udGFyZ2V0O1suLi5jLmJyYW5jaGVzXS5zb21lKGo9PmouY29udGFpbnMoRCkpfHwobD09bnVsbHx8bChOKSxzPT1udWxsfHxzKE4pLE4uZGVmYXVsdFByZXZlbnRlZHx8YT09bnVsbHx8YSgpKX0saCk7cmV0dXJuIFJPKE49Pnt4PT09Yy5sYXllcnMuc2l6ZS0xJiYobz09bnVsbHx8byhOKSwhTi5kZWZhdWx0UHJldmVudGVkJiZhJiYoTi5wcmV2ZW50RGVmYXVsdCgpLGEoKSkpfSxoKSxwLnVzZUVmZmVjdCgoKT0+e2lmKGQpcmV0dXJuIHImJihjLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYobTA9aC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHMsaC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiKSxjLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmFkZChkKSksYy5sYXllcnMuYWRkKGQpLHYwKCksKCk9PntyJiZjLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0xJiYoaC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9bTApfX0sW2QsaCxyLGNdKSxwLnVzZUVmZmVjdCgoKT0+KCk9PntkJiYoYy5sYXllcnMuZGVsZXRlKGQpLGMubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuZGVsZXRlKGQpLHYwKCkpfSxbZCxjXSkscC51c2VFZmZlY3QoKCk9Pntjb25zdCBOPSgpPT5nKHt9KTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihrcCxOKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihrcCxOKX0sW10pLHAuY3JlYXRlRWxlbWVudChMZS5kaXYsdGUoe30sdSx7cmVmOm0sc3R5bGU6e3BvaW50ZXJFdmVudHM6Uz9rPyJhdXRvIjoibm9uZSI6dm9pZCAwLC4uLmUuc3R5bGV9LG9uRm9jdXNDYXB0dXJlOkhlKGUub25Gb2N1c0NhcHR1cmUsVC5vbkZvY3VzQ2FwdHVyZSksb25CbHVyQ2FwdHVyZTpIZShlLm9uQmx1ckNhcHR1cmUsVC5vbkJsdXJDYXB0dXJlKSxvblBvaW50ZXJEb3duQ2FwdHVyZTpIZShlLm9uUG9pbnRlckRvd25DYXB0dXJlLGIub25Qb2ludGVyRG93bkNhcHR1cmUpfSkpfSk7ZnVuY3Rpb24gTE8oZSx0PWdsb2JhbFRoaXM9PW51bGw/dm9pZCAwOmdsb2JhbFRoaXMuZG9jdW1lbnQpe2NvbnN0IG49VXQoZSkscj1wLnVzZVJlZighMSksbz1wLnVzZVJlZigoKT0+e30pO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGk9cz0+e2lmKHMudGFyZ2V0JiYhci5jdXJyZW50KXtsZXQgYz1mdW5jdGlvbigpe3VFKFBPLG4sdSx7ZGlzY3JldGU6ITB9KX07dmFyIGE9Yztjb25zdCB1PXtvcmlnaW5hbEV2ZW50OnN9O3MucG9pbnRlclR5cGU9PT0idG91Y2giPyh0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixvLmN1cnJlbnQpLG8uY3VycmVudD1jLHQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLG8uY3VycmVudCx7b25jZTohMH0pKTpjKCl9ZWxzZSB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixvLmN1cnJlbnQpO3IuY3VycmVudD0hMX0sbD13aW5kb3cuc2V0VGltZW91dCgoKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLGkpfSwwKTtyZXR1cm4oKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQobCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsaSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsby5jdXJyZW50KX19LFt0LG5dKSx7b25Qb2ludGVyRG93bkNhcHR1cmU6KCk9PnIuY3VycmVudD0hMH19ZnVuY3Rpb24gRE8oZSx0PWdsb2JhbFRoaXM9PW51bGw/dm9pZCAwOmdsb2JhbFRoaXMuZG9jdW1lbnQpe2NvbnN0IG49VXQoZSkscj1wLnVzZVJlZighMSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3Qgbz1pPT57aS50YXJnZXQmJiFyLmN1cnJlbnQmJnVFKE9PLG4se29yaWdpbmFsRXZlbnQ6aX0se2Rpc2NyZXRlOiExfSl9O3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLG8pLCgpPT50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLG8pfSxbdCxuXSkse29uRm9jdXNDYXB0dXJlOigpPT5yLmN1cnJlbnQ9ITAsb25CbHVyQ2FwdHVyZTooKT0+ci5jdXJyZW50PSExfX1mdW5jdGlvbiB2MCgpe2NvbnN0IGU9bmV3IEN1c3RvbUV2ZW50KGtwKTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGUpfWZ1bmN0aW9uIHVFKGUsdCxuLHtkaXNjcmV0ZTpyfSl7Y29uc3Qgbz1uLm9yaWdpbmFsRXZlbnQudGFyZ2V0LGk9bmV3IEN1c3RvbUV2ZW50KGUse2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMCxkZXRhaWw6bn0pO3QmJm8uYWRkRXZlbnRMaXN0ZW5lcihlLHQse29uY2U6ITB9KSxyP21iKG8saSk6by5kaXNwYXRjaEV2ZW50KGkpfWxldCBSZj0wO2Z1bmN0aW9uIElPKCl7cC51c2VFZmZlY3QoKCk9Pnt2YXIgZSx0O2NvbnN0IG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcmFkaXgtZm9jdXMtZ3VhcmRdIik7cmV0dXJuIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJhZnRlcmJlZ2luIiwoZT1uWzBdKSE9PW51bGwmJmUhPT12b2lkIDA/ZTp5MCgpKSxkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudCgiYmVmb3JlZW5kIiwodD1uWzFdKSE9PW51bGwmJnQhPT12b2lkIDA/dDp5MCgpKSxSZisrLCgpPT57UmY9PT0xJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1yYWRpeC1mb2N1cy1ndWFyZF0iKS5mb3JFYWNoKHI9PnIucmVtb3ZlKCkpLFJmLS19fSxbXSl9ZnVuY3Rpb24geTAoKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoImRhdGEtcmFkaXgtZm9jdXMtZ3VhcmQiLCIiKSxlLnRhYkluZGV4PTAsZS5zdHlsZS5jc3NUZXh0PSJvdXRsaW5lOiBub25lOyBvcGFjaXR5OiAwOyBwb3NpdGlvbjogZml4ZWQ7IHBvaW50ZXItZXZlbnRzOiBub25lIixlfWNvbnN0IFBmPSJmb2N1c1Njb3BlLmF1dG9Gb2N1c09uTW91bnQiLE9mPSJmb2N1c1Njb3BlLmF1dG9Gb2N1c09uVW5tb3VudCIseDA9e2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMH0sak89cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7bG9vcDpuPSExLHRyYXBwZWQ6cj0hMSxvbk1vdW50QXV0b0ZvY3VzOm8sb25Vbm1vdW50QXV0b0ZvY3VzOmksLi4ubH09ZSxbcyxhXT1wLnVzZVN0YXRlKG51bGwpLHU9VXQobyksYz1VdChpKSxkPXAudXNlUmVmKG51bGwpLGY9UWUodCxtPT5hKG0pKSxoPXAudXNlUmVmKHtwYXVzZWQ6ITEscGF1c2UoKXt0aGlzLnBhdXNlZD0hMH0scmVzdW1lKCl7dGhpcy5wYXVzZWQ9ITF9fSkuY3VycmVudDtwLnVzZUVmZmVjdCgoKT0+e2lmKHIpe2xldCB5PWZ1bmN0aW9uKGIpe2lmKGgucGF1c2VkfHwhcylyZXR1cm47Y29uc3QgVD1iLnRhcmdldDtzLmNvbnRhaW5zKFQpP2QuY3VycmVudD1UOnNvKGQuY3VycmVudCx7c2VsZWN0OiEwfSl9LHg9ZnVuY3Rpb24oYil7aWYoaC5wYXVzZWR8fCFzKXJldHVybjtjb25zdCBUPWIucmVsYXRlZFRhcmdldDtUIT09bnVsbCYmKHMuY29udGFpbnMoVCl8fHNvKGQuY3VycmVudCx7c2VsZWN0OiEwfSkpfSxTPWZ1bmN0aW9uKGIpe2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1kb2N1bWVudC5ib2R5KWZvcihjb25zdCBOIG9mIGIpTi5yZW1vdmVkTm9kZXMubGVuZ3RoPjAmJnNvKHMpfTt2YXIgbT15LF89eCx2PVM7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIseSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHgpO2NvbnN0IGs9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoUyk7cmV0dXJuIHMmJmsub2JzZXJ2ZShzLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIseSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHgpLGsuZGlzY29ubmVjdCgpfX19LFtyLHMsaC5wYXVzZWRdKSxwLnVzZUVmZmVjdCgoKT0+e2lmKHMpe18wLmFkZChoKTtjb25zdCBtPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYoIXMuY29udGFpbnMobSkpe2NvbnN0IHY9bmV3IEN1c3RvbUV2ZW50KFBmLHgwKTtzLmFkZEV2ZW50TGlzdGVuZXIoUGYsdSkscy5kaXNwYXRjaEV2ZW50KHYpLHYuZGVmYXVsdFByZXZlbnRlZHx8KHpPKFZPKGNFKHMpKSx7c2VsZWN0OiEwfSksZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PW0mJnNvKHMpKX1yZXR1cm4oKT0+e3MucmVtb3ZlRXZlbnRMaXN0ZW5lcihQZix1KSxzZXRUaW1lb3V0KCgpPT57Y29uc3Qgdj1uZXcgQ3VzdG9tRXZlbnQoT2YseDApO3MuYWRkRXZlbnRMaXN0ZW5lcihPZixjKSxzLmRpc3BhdGNoRXZlbnQodiksdi5kZWZhdWx0UHJldmVudGVkfHxzbyhtPz9kb2N1bWVudC5ib2R5LHtzZWxlY3Q6ITB9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoT2YsYyksXzAucmVtb3ZlKGgpfSwwKX19fSxbcyx1LGMsaF0pO2NvbnN0IGc9cC51c2VDYWxsYmFjayhtPT57aWYoIW4mJiFyfHxoLnBhdXNlZClyZXR1cm47Y29uc3QgXz1tLmtleT09PSJUYWIiJiYhbS5hbHRLZXkmJiFtLmN0cmxLZXkmJiFtLm1ldGFLZXksdj1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKF8mJnYpe2NvbnN0IHk9bS5jdXJyZW50VGFyZ2V0LFt4LFNdPUZPKHkpO3gmJlM/IW0uc2hpZnRLZXkmJnY9PT1TPyhtLnByZXZlbnREZWZhdWx0KCksbiYmc28oeCx7c2VsZWN0OiEwfSkpOm0uc2hpZnRLZXkmJnY9PT14JiYobS5wcmV2ZW50RGVmYXVsdCgpLG4mJnNvKFMse3NlbGVjdDohMH0pKTp2PT09eSYmbS5wcmV2ZW50RGVmYXVsdCgpfX0sW24scixoLnBhdXNlZF0pO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoTGUuZGl2LHRlKHt0YWJJbmRleDotMX0sbCx7cmVmOmYsb25LZXlEb3duOmd9KSl9KTtmdW5jdGlvbiB6TyhlLHtzZWxlY3Q6dD0hMX09e30pe2NvbnN0IG49ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoY29uc3QgciBvZiBlKWlmKHNvKHIse3NlbGVjdDp0fSksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PW4pcmV0dXJufWZ1bmN0aW9uIEZPKGUpe2NvbnN0IHQ9Y0UoZSksbj13MCh0LGUpLHI9dzAodC5yZXZlcnNlKCksZSk7cmV0dXJuW24scl19ZnVuY3Rpb24gY0UoZSl7Y29uc3QgdD1bXSxuPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCx7YWNjZXB0Tm9kZTpyPT57Y29uc3Qgbz1yLnRhZ05hbWU9PT0iSU5QVVQiJiZyLnR5cGU9PT0iaGlkZGVuIjtyZXR1cm4gci5kaXNhYmxlZHx8ci5oaWRkZW58fG8/Tm9kZUZpbHRlci5GSUxURVJfU0tJUDpyLnRhYkluZGV4Pj0wP05vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDpOb2RlRmlsdGVyLkZJTFRFUl9TS0lQfX0pO2Zvcig7bi5uZXh0Tm9kZSgpOyl0LnB1c2gobi5jdXJyZW50Tm9kZSk7cmV0dXJuIHR9ZnVuY3Rpb24gdzAoZSx0KXtmb3IoY29uc3QgbiBvZiBlKWlmKCFCTyhuLHt1cFRvOnR9KSlyZXR1cm4gbn1mdW5jdGlvbiBCTyhlLHt1cFRvOnR9KXtpZihnZXRDb21wdXRlZFN0eWxlKGUpLnZpc2liaWxpdHk9PT0iaGlkZGVuIilyZXR1cm4hMDtmb3IoO2U7KXtpZih0IT09dm9pZCAwJiZlPT09dClyZXR1cm4hMTtpZihnZXRDb21wdXRlZFN0eWxlKGUpLmRpc3BsYXk9PT0ibm9uZSIpcmV0dXJuITA7ZT1lLnBhcmVudEVsZW1lbnR9cmV0dXJuITF9ZnVuY3Rpb24gV08oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50JiYic2VsZWN0ImluIGV9ZnVuY3Rpb24gc28oZSx7c2VsZWN0OnQ9ITF9PXt9KXtpZihlJiZlLmZvY3VzKXtjb25zdCBuPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7ZS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGUhPT1uJiZXTyhlKSYmdCYmZS5zZWxlY3QoKX19Y29uc3QgXzA9VU8oKTtmdW5jdGlvbiBVTygpe2xldCBlPVtdO3JldHVybnthZGQodCl7Y29uc3Qgbj1lWzBdO3QhPT1uJiYobj09bnVsbHx8bi5wYXVzZSgpKSxlPVMwKGUsdCksZS51bnNoaWZ0KHQpfSxyZW1vdmUodCl7dmFyIG47ZT1TMChlLHQpLChuPWVbMF0pPT09bnVsbHx8bj09PXZvaWQgMHx8bi5yZXN1bWUoKX19fWZ1bmN0aW9uIFMwKGUsdCl7Y29uc3Qgbj1bLi4uZV0scj1uLmluZGV4T2YodCk7cmV0dXJuIHIhPT0tMSYmbi5zcGxpY2UociwxKSxufWZ1bmN0aW9uIFZPKGUpe3JldHVybiBlLmZpbHRlcih0PT50LnRhZ05hbWUhPT0iQSIpfWNvbnN0IEhPPW0xLnVzZUlkfHwoKCk9Pnt9KTtsZXQgS089MDtmdW5jdGlvbiBUZChlKXtjb25zdFt0LG5dPXAudXNlU3RhdGUoSE8oKSk7cmV0dXJuIGJuKCgpPT57ZXx8bihyPT5yPz9TdHJpbmcoS08rKykpfSxbZV0pLGV8fCh0P2ByYWRpeC0ke3R9YDoiIil9Y29uc3QgR089WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSxqbz1NYXRoLm1pbixTbj1NYXRoLm1heCxCYz1NYXRoLnJvdW5kLEN1PU1hdGguZmxvb3Isem89ZT0+KHt4OmUseTplfSksWU89e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsYm90dG9tOiJ0b3AiLHRvcDoiYm90dG9tIn0sWE89e3N0YXJ0OiJlbmQiLGVuZDoic3RhcnQifTtmdW5jdGlvbiBUcChlLHQsbil7cmV0dXJuIFNuKGUsam8odCxuKSl9ZnVuY3Rpb24gR3IoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSh0KTplfWZ1bmN0aW9uIFlyKGUpe3JldHVybiBlLnNwbGl0KCItIilbMF19ZnVuY3Rpb24gWmwoZSl7cmV0dXJuIGUuc3BsaXQoIi0iKVsxXX1mdW5jdGlvbiBibShlKXtyZXR1cm4gZT09PSJ4Ij8ieSI6IngifWZ1bmN0aW9uIE5tKGUpe3JldHVybiBlPT09InkiPyJoZWlnaHQiOiJ3aWR0aCJ9ZnVuY3Rpb24gcWwoZSl7cmV0dXJuWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyhZcihlKSk/InkiOiJ4In1mdW5jdGlvbiBSbShlKXtyZXR1cm4gYm0ocWwoZSkpfWZ1bmN0aW9uIFFPKGUsdCxuKXtuPT09dm9pZCAwJiYobj0hMSk7Y29uc3Qgcj1abChlKSxvPVJtKGUpLGk9Tm0obyk7bGV0IGw9bz09PSJ4Ij9yPT09KG4/ImVuZCI6InN0YXJ0Iik/InJpZ2h0IjoibGVmdCI6cj09PSJzdGFydCI/ImJvdHRvbSI6InRvcCI7cmV0dXJuIHQucmVmZXJlbmNlW2ldPnQuZmxvYXRpbmdbaV0mJihsPVdjKGwpKSxbbCxXYyhsKV19ZnVuY3Rpb24gSk8oZSl7Y29uc3QgdD1XYyhlKTtyZXR1cm5bYnAoZSksdCxicCh0KV19ZnVuY3Rpb24gYnAoZSl7cmV0dXJuIGUucmVwbGFjZSgvc3RhcnR8ZW5kL2csdD0+WE9bdF0pfWZ1bmN0aW9uIFpPKGUsdCxuKXtjb25zdCByPVsibGVmdCIsInJpZ2h0Il0sbz1bInJpZ2h0IiwibGVmdCJdLGk9WyJ0b3AiLCJib3R0b20iXSxsPVsiYm90dG9tIiwidG9wIl07c3dpdGNoKGUpe2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6cmV0dXJuIG4/dD9vOnI6dD9yOm87Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpyZXR1cm4gdD9pOmw7ZGVmYXVsdDpyZXR1cm5bXX19ZnVuY3Rpb24gcU8oZSx0LG4scil7Y29uc3Qgbz1abChlKTtsZXQgaT1aTyhZcihlKSxuPT09InN0YXJ0IixyKTtyZXR1cm4gbyYmKGk9aS5tYXAobD0+bCsiLSIrbyksdCYmKGk9aS5jb25jYXQoaS5tYXAoYnApKSkpLGl9ZnVuY3Rpb24gV2MoZSl7cmV0dXJuIGUucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csdD0+WU9bdF0pfWZ1bmN0aW9uIGU1KGUpe3JldHVybnt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MCwuLi5lfX1mdW5jdGlvbiBkRShlKXtyZXR1cm4gdHlwZW9mIGUhPSJudW1iZXIiP2U1KGUpOnt0b3A6ZSxyaWdodDplLGJvdHRvbTplLGxlZnQ6ZX19ZnVuY3Rpb24gVWMoZSl7cmV0dXJuey4uLmUsdG9wOmUueSxsZWZ0OmUueCxyaWdodDplLngrZS53aWR0aCxib3R0b206ZS55K2UuaGVpZ2h0fX1mdW5jdGlvbiBFMChlLHQsbil7bGV0e3JlZmVyZW5jZTpyLGZsb2F0aW5nOm99PWU7Y29uc3QgaT1xbCh0KSxsPVJtKHQpLHM9Tm0obCksYT1Zcih0KSx1PWk9PT0ieSIsYz1yLngrci53aWR0aC8yLW8ud2lkdGgvMixkPXIueStyLmhlaWdodC8yLW8uaGVpZ2h0LzIsZj1yW3NdLzItb1tzXS8yO2xldCBoO3N3aXRjaChhKXtjYXNlInRvcCI6aD17eDpjLHk6ci55LW8uaGVpZ2h0fTticmVhaztjYXNlImJvdHRvbSI6aD17eDpjLHk6ci55K3IuaGVpZ2h0fTticmVhaztjYXNlInJpZ2h0IjpoPXt4OnIueCtyLndpZHRoLHk6ZH07YnJlYWs7Y2FzZSJsZWZ0IjpoPXt4OnIueC1vLndpZHRoLHk6ZH07YnJlYWs7ZGVmYXVsdDpoPXt4OnIueCx5OnIueX19c3dpdGNoKFpsKHQpKXtjYXNlInN0YXJ0IjpoW2xdLT1mKihuJiZ1Py0xOjEpO2JyZWFrO2Nhc2UiZW5kIjpoW2xdKz1mKihuJiZ1Py0xOjEpO2JyZWFrfXJldHVybiBofWNvbnN0IHQ1PWFzeW5jKGUsdCxuKT0+e2NvbnN0e3BsYWNlbWVudDpyPSJib3R0b20iLHN0cmF0ZWd5Om89ImFic29sdXRlIixtaWRkbGV3YXJlOmk9W10scGxhdGZvcm06bH09bixzPWkuZmlsdGVyKEJvb2xlYW4pLGE9YXdhaXQobC5pc1JUTD09bnVsbD92b2lkIDA6bC5pc1JUTCh0KSk7bGV0IHU9YXdhaXQgbC5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTplLGZsb2F0aW5nOnQsc3RyYXRlZ3k6b30pLHt4OmMseTpkfT1FMCh1LHIsYSksZj1yLGg9e30sZz0wO2ZvcihsZXQgbT0wO208cy5sZW5ndGg7bSsrKXtjb25zdHtuYW1lOl8sZm46dn09c1ttXSx7eDp5LHk6eCxkYXRhOlMscmVzZXQ6a309YXdhaXQgdih7eDpjLHk6ZCxpbml0aWFsUGxhY2VtZW50OnIscGxhY2VtZW50OmYsc3RyYXRlZ3k6byxtaWRkbGV3YXJlRGF0YTpoLHJlY3RzOnUscGxhdGZvcm06bCxlbGVtZW50czp7cmVmZXJlbmNlOmUsZmxvYXRpbmc6dH19KTtpZihjPXk/P2MsZD14Pz9kLGg9ey4uLmgsW19dOnsuLi5oW19dLC4uLlN9fSxrJiZnPD01MCl7ZysrLHR5cGVvZiBrPT0ib2JqZWN0IiYmKGsucGxhY2VtZW50JiYoZj1rLnBsYWNlbWVudCksay5yZWN0cyYmKHU9ay5yZWN0cz09PSEwP2F3YWl0IGwuZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6ZSxmbG9hdGluZzp0LHN0cmF0ZWd5Om99KTprLnJlY3RzKSx7eDpjLHk6ZH09RTAodSxmLGEpKSxtPS0xO2NvbnRpbnVlfX1yZXR1cm57eDpjLHk6ZCxwbGFjZW1lbnQ6ZixzdHJhdGVneTpvLG1pZGRsZXdhcmVEYXRhOmh9fTthc3luYyBmdW5jdGlvbiAkYShlLHQpe3ZhciBuO3Q9PT12b2lkIDAmJih0PXt9KTtjb25zdHt4OnIseTpvLHBsYXRmb3JtOmkscmVjdHM6bCxlbGVtZW50czpzLHN0cmF0ZWd5OmF9PWUse2JvdW5kYXJ5OnU9ImNsaXBwaW5nQW5jZXN0b3JzIixyb290Qm91bmRhcnk6Yz0idmlld3BvcnQiLGVsZW1lbnRDb250ZXh0OmQ9ImZsb2F0aW5nIixhbHRCb3VuZGFyeTpmPSExLHBhZGRpbmc6aD0wfT1Hcih0LGUpLGc9ZEUoaCksXz1zW2Y/ZD09PSJmbG9hdGluZyI/InJlZmVyZW5jZSI6ImZsb2F0aW5nIjpkXSx2PVVjKGF3YWl0IGkuZ2V0Q2xpcHBpbmdSZWN0KHtlbGVtZW50OihuPWF3YWl0KGkuaXNFbGVtZW50PT1udWxsP3ZvaWQgMDppLmlzRWxlbWVudChfKSkpPT1udWxsfHxuP186Xy5jb250ZXh0RWxlbWVudHx8YXdhaXQoaS5nZXREb2N1bWVudEVsZW1lbnQ9PW51bGw/dm9pZCAwOmkuZ2V0RG9jdW1lbnRFbGVtZW50KHMuZmxvYXRpbmcpKSxib3VuZGFyeTp1LHJvb3RCb3VuZGFyeTpjLHN0cmF0ZWd5OmF9KSkseT1kPT09ImZsb2F0aW5nIj97Li4ubC5mbG9hdGluZyx4OnIseTpvfTpsLnJlZmVyZW5jZSx4PWF3YWl0KGkuZ2V0T2Zmc2V0UGFyZW50PT1udWxsP3ZvaWQgMDppLmdldE9mZnNldFBhcmVudChzLmZsb2F0aW5nKSksUz1hd2FpdChpLmlzRWxlbWVudD09bnVsbD92b2lkIDA6aS5pc0VsZW1lbnQoeCkpP2F3YWl0KGkuZ2V0U2NhbGU9PW51bGw/dm9pZCAwOmkuZ2V0U2NhbGUoeCkpfHx7eDoxLHk6MX06e3g6MSx5OjF9LGs9VWMoaS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdD9hd2FpdCBpLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtyZWN0Onksb2Zmc2V0UGFyZW50Ongsc3RyYXRlZ3k6YX0pOnkpO3JldHVybnt0b3A6KHYudG9wLWsudG9wK2cudG9wKS9TLnksYm90dG9tOihrLmJvdHRvbS12LmJvdHRvbStnLmJvdHRvbSkvUy55LGxlZnQ6KHYubGVmdC1rLmxlZnQrZy5sZWZ0KS9TLngscmlnaHQ6KGsucmlnaHQtdi5yaWdodCtnLnJpZ2h0KS9TLnh9fWNvbnN0IEMwPWU9Pih7bmFtZToiYXJyb3ciLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtjb25zdHt4Om4seTpyLHBsYWNlbWVudDpvLHJlY3RzOmkscGxhdGZvcm06bCxlbGVtZW50czpzLG1pZGRsZXdhcmVEYXRhOmF9PXQse2VsZW1lbnQ6dSxwYWRkaW5nOmM9MH09R3IoZSx0KXx8e307aWYodT09bnVsbClyZXR1cm57fTtjb25zdCBkPWRFKGMpLGY9e3g6bix5OnJ9LGg9Um0obyksZz1ObShoKSxtPWF3YWl0IGwuZ2V0RGltZW5zaW9ucyh1KSxfPWg9PT0ieSIsdj1fPyJ0b3AiOiJsZWZ0Iix5PV8/ImJvdHRvbSI6InJpZ2h0Iix4PV8/ImNsaWVudEhlaWdodCI6ImNsaWVudFdpZHRoIixTPWkucmVmZXJlbmNlW2ddK2kucmVmZXJlbmNlW2hdLWZbaF0taS5mbG9hdGluZ1tnXSxrPWZbaF0taS5yZWZlcmVuY2VbaF0sYj1hd2FpdChsLmdldE9mZnNldFBhcmVudD09bnVsbD92b2lkIDA6bC5nZXRPZmZzZXRQYXJlbnQodSkpO2xldCBUPWI/Ylt4XTowOyghVHx8IWF3YWl0KGwuaXNFbGVtZW50PT1udWxsP3ZvaWQgMDpsLmlzRWxlbWVudChiKSkpJiYoVD1zLmZsb2F0aW5nW3hdfHxpLmZsb2F0aW5nW2ddKTtjb25zdCBOPVMvMi1rLzIsRD1ULzItbVtnXS8yLTEsTT1qbyhkW3ZdLEQpLGo9am8oZFt5XSxEKSxCPU0scmU9VC1tW2ddLWosSD1ULzItbVtnXS8yK04sWT1UcChCLEgscmUpLEM9IWEuYXJyb3cmJlpsKG8pIT1udWxsJiZIIT1ZJiZpLnJlZmVyZW5jZVtnXS8yLShIPEI/TTpqKS1tW2ddLzI8MCwkPUM/SDxCP0gtQjpILXJlOjA7cmV0dXJue1toXTpmW2hdKyQsZGF0YTp7W2hdOlksY2VudGVyT2Zmc2V0OkgtWS0kLC4uLkMmJnthbGlnbm1lbnRPZmZzZXQ6JH19LHJlc2V0OkN9fX0pLG41PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6ImZsaXAiLG9wdGlvbnM6ZSxhc3luYyBmbih0KXt2YXIgbixyO2NvbnN0e3BsYWNlbWVudDpvLG1pZGRsZXdhcmVEYXRhOmkscmVjdHM6bCxpbml0aWFsUGxhY2VtZW50OnMscGxhdGZvcm06YSxlbGVtZW50czp1fT10LHttYWluQXhpczpjPSEwLGNyb3NzQXhpczpkPSEwLGZhbGxiYWNrUGxhY2VtZW50czpmLGZhbGxiYWNrU3RyYXRlZ3k6aD0iYmVzdEZpdCIsZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbjpnPSJub25lIixmbGlwQWxpZ25tZW50Om09ITAsLi4uX309R3IoZSx0KTtpZigobj1pLmFycm93KSE9bnVsbCYmbi5hbGlnbm1lbnRPZmZzZXQpcmV0dXJue307Y29uc3Qgdj1ZcihvKSx5PVlyKHMpPT09cyx4PWF3YWl0KGEuaXNSVEw9PW51bGw/dm9pZCAwOmEuaXNSVEwodS5mbG9hdGluZykpLFM9Znx8KHl8fCFtP1tXYyhzKV06Sk8ocykpOyFmJiZnIT09Im5vbmUiJiZTLnB1c2goLi4ucU8ocyxtLGcseCkpO2NvbnN0IGs9W3MsLi4uU10sYj1hd2FpdCAkYSh0LF8pLFQ9W107bGV0IE49KChyPWkuZmxpcCk9PW51bGw/dm9pZCAwOnIub3ZlcmZsb3dzKXx8W107aWYoYyYmVC5wdXNoKGJbdl0pLGQpe2NvbnN0IEI9UU8obyxsLHgpO1QucHVzaChiW0JbMF1dLGJbQlsxXV0pfWlmKE49Wy4uLk4se3BsYWNlbWVudDpvLG92ZXJmbG93czpUfV0sIVQuZXZlcnkoQj0+Qjw9MCkpe3ZhciBELE07Y29uc3QgQj0oKChEPWkuZmxpcCk9PW51bGw/dm9pZCAwOkQuaW5kZXgpfHwwKSsxLHJlPWtbQl07aWYocmUpcmV0dXJue2RhdGE6e2luZGV4OkIsb3ZlcmZsb3dzOk59LHJlc2V0OntwbGFjZW1lbnQ6cmV9fTtsZXQgSD0oTT1OLmZpbHRlcihZPT5ZLm92ZXJmbG93c1swXTw9MCkuc29ydCgoWSxDKT0+WS5vdmVyZmxvd3NbMV0tQy5vdmVyZmxvd3NbMV0pWzBdKT09bnVsbD92b2lkIDA6TS5wbGFjZW1lbnQ7aWYoIUgpc3dpdGNoKGgpe2Nhc2UiYmVzdEZpdCI6e3ZhciBqO2NvbnN0IFk9KGo9Ti5tYXAoQz0+W0MucGxhY2VtZW50LEMub3ZlcmZsb3dzLmZpbHRlcigkPT4kPjApLnJlZHVjZSgoJCxFKT0+JCtFLDApXSkuc29ydCgoQywkKT0+Q1sxXS0kWzFdKVswXSk9PW51bGw/dm9pZCAwOmpbMF07WSYmKEg9WSk7YnJlYWt9Y2FzZSJpbml0aWFsUGxhY2VtZW50IjpIPXM7YnJlYWt9aWYobyE9PUgpcmV0dXJue3Jlc2V0OntwbGFjZW1lbnQ6SH19fXJldHVybnt9fX19O2Z1bmN0aW9uICQwKGUsdCl7cmV0dXJue3RvcDplLnRvcC10LmhlaWdodCxyaWdodDplLnJpZ2h0LXQud2lkdGgsYm90dG9tOmUuYm90dG9tLXQuaGVpZ2h0LGxlZnQ6ZS5sZWZ0LXQud2lkdGh9fWZ1bmN0aW9uIGswKGUpe3JldHVybiBHTy5zb21lKHQ9PmVbdF0+PTApfWNvbnN0IHI1PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6ImhpZGUiLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtjb25zdHtyZWN0czpufT10LHtzdHJhdGVneTpyPSJyZWZlcmVuY2VIaWRkZW4iLC4uLm99PUdyKGUsdCk7c3dpdGNoKHIpe2Nhc2UicmVmZXJlbmNlSGlkZGVuIjp7Y29uc3QgaT1hd2FpdCAkYSh0LHsuLi5vLGVsZW1lbnRDb250ZXh0OiJyZWZlcmVuY2UifSksbD0kMChpLG4ucmVmZXJlbmNlKTtyZXR1cm57ZGF0YTp7cmVmZXJlbmNlSGlkZGVuT2Zmc2V0czpsLHJlZmVyZW5jZUhpZGRlbjprMChsKX19fWNhc2UiZXNjYXBlZCI6e2NvbnN0IGk9YXdhaXQgJGEodCx7Li4ubyxhbHRCb3VuZGFyeTohMH0pLGw9JDAoaSxuLmZsb2F0aW5nKTtyZXR1cm57ZGF0YTp7ZXNjYXBlZE9mZnNldHM6bCxlc2NhcGVkOmswKGwpfX19ZGVmYXVsdDpyZXR1cm57fX19fX07YXN5bmMgZnVuY3Rpb24gbzUoZSx0KXtjb25zdHtwbGFjZW1lbnQ6bixwbGF0Zm9ybTpyLGVsZW1lbnRzOm99PWUsaT1hd2FpdChyLmlzUlRMPT1udWxsP3ZvaWQgMDpyLmlzUlRMKG8uZmxvYXRpbmcpKSxsPVlyKG4pLHM9WmwobiksYT1xbChuKT09PSJ5Iix1PVsibGVmdCIsInRvcCJdLmluY2x1ZGVzKGwpPy0xOjEsYz1pJiZhPy0xOjEsZD1Hcih0LGUpO2xldHttYWluQXhpczpmLGNyb3NzQXhpczpoLGFsaWdubWVudEF4aXM6Z309dHlwZW9mIGQ9PSJudW1iZXIiP3ttYWluQXhpczpkLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbH06e21haW5BeGlzOjAsY3Jvc3NBeGlzOjAsYWxpZ25tZW50QXhpczpudWxsLC4uLmR9O3JldHVybiBzJiZ0eXBlb2YgZz09Im51bWJlciImJihoPXM9PT0iZW5kIj9nKi0xOmcpLGE/e3g6aCpjLHk6Zip1fTp7eDpmKnUseTpoKmN9fWNvbnN0IGk1PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0wKSx7bmFtZToib2Zmc2V0IixvcHRpb25zOmUsYXN5bmMgZm4odCl7Y29uc3R7eDpuLHk6cn09dCxvPWF3YWl0IG81KHQsZSk7cmV0dXJue3g6bitvLngseTpyK28ueSxkYXRhOm99fX19LGw1PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6InNoaWZ0IixvcHRpb25zOmUsYXN5bmMgZm4odCl7Y29uc3R7eDpuLHk6cixwbGFjZW1lbnQ6b309dCx7bWFpbkF4aXM6aT0hMCxjcm9zc0F4aXM6bD0hMSxsaW1pdGVyOnM9e2ZuOl89PntsZXR7eDp2LHl9PV87cmV0dXJue3g6dix5fX19LC4uLmF9PUdyKGUsdCksdT17eDpuLHk6cn0sYz1hd2FpdCAkYSh0LGEpLGQ9cWwoWXIobykpLGY9Ym0oZCk7bGV0IGg9dVtmXSxnPXVbZF07aWYoaSl7Y29uc3QgXz1mPT09InkiPyJ0b3AiOiJsZWZ0Iix2PWY9PT0ieSI/ImJvdHRvbSI6InJpZ2h0Iix5PWgrY1tfXSx4PWgtY1t2XTtoPVRwKHksaCx4KX1pZihsKXtjb25zdCBfPWQ9PT0ieSI/InRvcCI6ImxlZnQiLHY9ZD09PSJ5Ij8iYm90dG9tIjoicmlnaHQiLHk9ZytjW19dLHg9Zy1jW3ZdO2c9VHAoeSxnLHgpfWNvbnN0IG09cy5mbih7Li4udCxbZl06aCxbZF06Z30pO3JldHVybnsuLi5tLGRhdGE6e3g6bS54LW4seTptLnktcn19fX19LHM1PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse29wdGlvbnM6ZSxmbih0KXtjb25zdHt4Om4seTpyLHBsYWNlbWVudDpvLHJlY3RzOmksbWlkZGxld2FyZURhdGE6bH09dCx7b2Zmc2V0OnM9MCxtYWluQXhpczphPSEwLGNyb3NzQXhpczp1PSEwfT1HcihlLHQpLGM9e3g6bix5OnJ9LGQ9cWwobyksZj1ibShkKTtsZXQgaD1jW2ZdLGc9Y1tkXTtjb25zdCBtPUdyKHMsdCksXz10eXBlb2YgbT09Im51bWJlciI/e21haW5BeGlzOm0sY3Jvc3NBeGlzOjB9OnttYWluQXhpczowLGNyb3NzQXhpczowLC4uLm19O2lmKGEpe2NvbnN0IHg9Zj09PSJ5Ij8iaGVpZ2h0Ijoid2lkdGgiLFM9aS5yZWZlcmVuY2VbZl0taS5mbG9hdGluZ1t4XStfLm1haW5BeGlzLGs9aS5yZWZlcmVuY2VbZl0raS5yZWZlcmVuY2VbeF0tXy5tYWluQXhpcztoPFM/aD1TOmg+ayYmKGg9ayl9aWYodSl7dmFyIHYseTtjb25zdCB4PWY9PT0ieSI/IndpZHRoIjoiaGVpZ2h0IixTPVsidG9wIiwibGVmdCJdLmluY2x1ZGVzKFlyKG8pKSxrPWkucmVmZXJlbmNlW2RdLWkuZmxvYXRpbmdbeF0rKFMmJigodj1sLm9mZnNldCk9PW51bGw/dm9pZCAwOnZbZF0pfHwwKSsoUz8wOl8uY3Jvc3NBeGlzKSxiPWkucmVmZXJlbmNlW2RdK2kucmVmZXJlbmNlW3hdKyhTPzA6KCh5PWwub2Zmc2V0KT09bnVsbD92b2lkIDA6eVtkXSl8fDApLShTP18uY3Jvc3NBeGlzOjApO2c8az9nPWs6Zz5iJiYoZz1iKX1yZXR1cm57W2ZdOmgsW2RdOmd9fX19LGE1PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6InNpemUiLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtjb25zdHtwbGFjZW1lbnQ6bixyZWN0czpyLHBsYXRmb3JtOm8sZWxlbWVudHM6aX09dCx7YXBwbHk6bD0oKT0+e30sLi4uc309R3IoZSx0KSxhPWF3YWl0ICRhKHQscyksdT1ZcihuKSxjPVpsKG4pLGQ9cWwobik9PT0ieSIse3dpZHRoOmYsaGVpZ2h0Omh9PXIuZmxvYXRpbmc7bGV0IGcsbTt1PT09InRvcCJ8fHU9PT0iYm90dG9tIj8oZz11LG09Yz09PShhd2FpdChvLmlzUlRMPT1udWxsP3ZvaWQgMDpvLmlzUlRMKGkuZmxvYXRpbmcpKT8ic3RhcnQiOiJlbmQiKT8ibGVmdCI6InJpZ2h0Iik6KG09dSxnPWM9PT0iZW5kIj8idG9wIjoiYm90dG9tIik7Y29uc3QgXz1oLWFbZ10sdj1mLWFbbV0seT0hdC5taWRkbGV3YXJlRGF0YS5zaGlmdDtsZXQgeD1fLFM9djtpZihkKXtjb25zdCBiPWYtYS5sZWZ0LWEucmlnaHQ7Uz1jfHx5P2pvKHYsYik6Yn1lbHNle2NvbnN0IGI9aC1hLnRvcC1hLmJvdHRvbTt4PWN8fHk/am8oXyxiKTpifWlmKHkmJiFjKXtjb25zdCBiPVNuKGEubGVmdCwwKSxUPVNuKGEucmlnaHQsMCksTj1TbihhLnRvcCwwKSxEPVNuKGEuYm90dG9tLDApO2Q/Uz1mLTIqKGIhPT0wfHxUIT09MD9iK1Q6U24oYS5sZWZ0LGEucmlnaHQpKTp4PWgtMiooTiE9PTB8fEQhPT0wP04rRDpTbihhLnRvcCxhLmJvdHRvbSkpfWF3YWl0IGwoey4uLnQsYXZhaWxhYmxlV2lkdGg6UyxhdmFpbGFibGVIZWlnaHQ6eH0pO2NvbnN0IGs9YXdhaXQgby5nZXREaW1lbnNpb25zKGkuZmxvYXRpbmcpO3JldHVybiBmIT09ay53aWR0aHx8aCE9PWsuaGVpZ2h0P3tyZXNldDp7cmVjdHM6ITB9fTp7fX19fTtmdW5jdGlvbiBGbyhlKXtyZXR1cm4gZkUoZSk/KGUubm9kZU5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpOiIjZG9jdW1lbnQifWZ1bmN0aW9uIGtuKGUpe3ZhciB0O3JldHVybihlPT1udWxsfHwodD1lLm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDp0LmRlZmF1bHRWaWV3KXx8d2luZG93fWZ1bmN0aW9uIHRvKGUpe3ZhciB0O3JldHVybih0PShmRShlKT9lLm93bmVyRG9jdW1lbnQ6ZS5kb2N1bWVudCl8fHdpbmRvdy5kb2N1bWVudCk9PW51bGw/dm9pZCAwOnQuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIGZFKGUpe3JldHVybiBlIGluc3RhbmNlb2YgTm9kZXx8ZSBpbnN0YW5jZW9mIGtuKGUpLk5vZGV9ZnVuY3Rpb24gWHIoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBFbGVtZW50fHxlIGluc3RhbmNlb2Yga24oZSkuRWxlbWVudH1mdW5jdGlvbiBDcihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fHxlIGluc3RhbmNlb2Yga24oZSkuSFRNTEVsZW1lbnR9ZnVuY3Rpb24gVDAoZSl7cmV0dXJuIHR5cGVvZiBTaGFkb3dSb290PiJ1Ij8hMTplIGluc3RhbmNlb2YgU2hhZG93Um9vdHx8ZSBpbnN0YW5jZW9mIGtuKGUpLlNoYWRvd1Jvb3R9ZnVuY3Rpb24gVmEoZSl7Y29uc3R7b3ZlcmZsb3c6dCxvdmVyZmxvd1g6bixvdmVyZmxvd1k6cixkaXNwbGF5Om99PVZuKGUpO3JldHVybi9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KHQrcituKSYmIVsiaW5saW5lIiwiY29udGVudHMiXS5pbmNsdWRlcyhvKX1mdW5jdGlvbiB1NShlKXtyZXR1cm5bInRhYmxlIiwidGQiLCJ0aCJdLmluY2x1ZGVzKEZvKGUpKX1mdW5jdGlvbiBQbShlKXtjb25zdCB0PU9tKCksbj1WbihlKTtyZXR1cm4gbi50cmFuc2Zvcm0hPT0ibm9uZSJ8fG4ucGVyc3BlY3RpdmUhPT0ibm9uZSJ8fChuLmNvbnRhaW5lclR5cGU/bi5jb250YWluZXJUeXBlIT09Im5vcm1hbCI6ITEpfHwhdCYmKG4uYmFja2Ryb3BGaWx0ZXI/bi5iYWNrZHJvcEZpbHRlciE9PSJub25lIjohMSl8fCF0JiYobi5maWx0ZXI/bi5maWx0ZXIhPT0ibm9uZSI6ITEpfHxbInRyYW5zZm9ybSIsInBlcnNwZWN0aXZlIiwiZmlsdGVyIl0uc29tZShyPT4obi53aWxsQ2hhbmdlfHwiIikuaW5jbHVkZXMocikpfHxbInBhaW50IiwibGF5b3V0Iiwic3RyaWN0IiwiY29udGVudCJdLnNvbWUocj0+KG4uY29udGFpbnx8IiIpLmluY2x1ZGVzKHIpKX1mdW5jdGlvbiBjNShlKXtsZXQgdD1PbChlKTtmb3IoO0NyKHQpJiYhYmQodCk7KXtpZihQbSh0KSlyZXR1cm4gdDt0PU9sKHQpfXJldHVybiBudWxsfWZ1bmN0aW9uIE9tKCl7cmV0dXJuIHR5cGVvZiBDU1M+InUifHwhQ1NTLnN1cHBvcnRzPyExOkNTUy5zdXBwb3J0cygiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIiLCJub25lIil9ZnVuY3Rpb24gYmQoZSl7cmV0dXJuWyJodG1sIiwiYm9keSIsIiNkb2N1bWVudCJdLmluY2x1ZGVzKEZvKGUpKX1mdW5jdGlvbiBWbihlKXtyZXR1cm4ga24oZSkuZ2V0Q29tcHV0ZWRTdHlsZShlKX1mdW5jdGlvbiBOZChlKXtyZXR1cm4gWHIoZSk/e3Njcm9sbExlZnQ6ZS5zY3JvbGxMZWZ0LHNjcm9sbFRvcDplLnNjcm9sbFRvcH06e3Njcm9sbExlZnQ6ZS5wYWdlWE9mZnNldCxzY3JvbGxUb3A6ZS5wYWdlWU9mZnNldH19ZnVuY3Rpb24gT2woZSl7aWYoRm8oZSk9PT0iaHRtbCIpcmV0dXJuIGU7Y29uc3QgdD1lLmFzc2lnbmVkU2xvdHx8ZS5wYXJlbnROb2RlfHxUMChlKSYmZS5ob3N0fHx0byhlKTtyZXR1cm4gVDAodCk/dC5ob3N0OnR9ZnVuY3Rpb24gaEUoZSl7Y29uc3QgdD1PbChlKTtyZXR1cm4gYmQodCk/ZS5vd25lckRvY3VtZW50P2Uub3duZXJEb2N1bWVudC5ib2R5OmUuYm9keTpDcih0KSYmVmEodCk/dDpoRSh0KX1mdW5jdGlvbiBrYShlLHQsbil7dmFyIHI7dD09PXZvaWQgMCYmKHQ9W10pLG49PT12b2lkIDAmJihuPSEwKTtjb25zdCBvPWhFKGUpLGk9bz09PSgocj1lLm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDpyLmJvZHkpLGw9a24obyk7cmV0dXJuIGk/dC5jb25jYXQobCxsLnZpc3VhbFZpZXdwb3J0fHxbXSxWYShvKT9vOltdLGwuZnJhbWVFbGVtZW50JiZuP2thKGwuZnJhbWVFbGVtZW50KTpbXSk6dC5jb25jYXQobyxrYShvLFtdLG4pKX1mdW5jdGlvbiBwRShlKXtjb25zdCB0PVZuKGUpO2xldCBuPXBhcnNlRmxvYXQodC53aWR0aCl8fDAscj1wYXJzZUZsb2F0KHQuaGVpZ2h0KXx8MDtjb25zdCBvPUNyKGUpLGk9bz9lLm9mZnNldFdpZHRoOm4sbD1vP2Uub2Zmc2V0SGVpZ2h0OnIscz1CYyhuKSE9PWl8fEJjKHIpIT09bDtyZXR1cm4gcyYmKG49aSxyPWwpLHt3aWR0aDpuLGhlaWdodDpyLCQ6c319ZnVuY3Rpb24gQW0oZSl7cmV0dXJuIFhyKGUpP2U6ZS5jb250ZXh0RWxlbWVudH1mdW5jdGlvbiB2bChlKXtjb25zdCB0PUFtKGUpO2lmKCFDcih0KSlyZXR1cm4gem8oMSk7Y29uc3Qgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpyLGhlaWdodDpvLCQ6aX09cEUodCk7bGV0IGw9KGk/QmMobi53aWR0aCk6bi53aWR0aCkvcixzPShpP0JjKG4uaGVpZ2h0KTpuLmhlaWdodCkvbztyZXR1cm4oIWx8fCFOdW1iZXIuaXNGaW5pdGUobCkpJiYobD0xKSwoIXN8fCFOdW1iZXIuaXNGaW5pdGUocykpJiYocz0xKSx7eDpsLHk6c319Y29uc3QgZDU9em8oMCk7ZnVuY3Rpb24gZ0UoZSl7Y29uc3QgdD1rbihlKTtyZXR1cm4hT20oKXx8IXQudmlzdWFsVmlld3BvcnQ/ZDU6e3g6dC52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LHk6dC52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3B9fWZ1bmN0aW9uIGY1KGUsdCxuKXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9ITEpLCFufHx0JiZuIT09a24oZSk/ITE6dH1mdW5jdGlvbiB4aShlLHQsbixyKXt0PT09dm9pZCAwJiYodD0hMSksbj09PXZvaWQgMCYmKG49ITEpO2NvbnN0IG89ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPUFtKGUpO2xldCBsPXpvKDEpO3QmJihyP1hyKHIpJiYobD12bChyKSk6bD12bChlKSk7Y29uc3Qgcz1mNShpLG4scik/Z0UoaSk6em8oMCk7bGV0IGE9KG8ubGVmdCtzLngpL2wueCx1PShvLnRvcCtzLnkpL2wueSxjPW8ud2lkdGgvbC54LGQ9by5oZWlnaHQvbC55O2lmKGkpe2NvbnN0IGY9a24oaSksaD1yJiZYcihyKT9rbihyKTpyO2xldCBnPWYuZnJhbWVFbGVtZW50O2Zvcig7ZyYmciYmaCE9PWY7KXtjb25zdCBtPXZsKGcpLF89Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PVZuKGcpLHk9Xy5sZWZ0KyhnLmNsaWVudExlZnQrcGFyc2VGbG9hdCh2LnBhZGRpbmdMZWZ0KSkqbS54LHg9Xy50b3ArKGcuY2xpZW50VG9wK3BhcnNlRmxvYXQodi5wYWRkaW5nVG9wKSkqbS55O2EqPW0ueCx1Kj1tLnksYyo9bS54LGQqPW0ueSxhKz15LHUrPXgsZz1rbihnKS5mcmFtZUVsZW1lbnR9fXJldHVybiBVYyh7d2lkdGg6YyxoZWlnaHQ6ZCx4OmEseTp1fSl9ZnVuY3Rpb24gaDUoZSl7bGV0e3JlY3Q6dCxvZmZzZXRQYXJlbnQ6bixzdHJhdGVneTpyfT1lO2NvbnN0IG89Q3IobiksaT10byhuKTtpZihuPT09aSlyZXR1cm4gdDtsZXQgbD17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxzPXpvKDEpO2NvbnN0IGE9em8oMCk7aWYoKG98fCFvJiZyIT09ImZpeGVkIikmJigoRm8obikhPT0iYm9keSJ8fFZhKGkpKSYmKGw9TmQobikpLENyKG4pKSl7Y29uc3QgdT14aShuKTtzPXZsKG4pLGEueD11Lngrbi5jbGllbnRMZWZ0LGEueT11Lnkrbi5jbGllbnRUb3B9cmV0dXJue3dpZHRoOnQud2lkdGgqcy54LGhlaWdodDp0LmhlaWdodCpzLnkseDp0Lngqcy54LWwuc2Nyb2xsTGVmdCpzLngrYS54LHk6dC55KnMueS1sLnNjcm9sbFRvcCpzLnkrYS55fX1mdW5jdGlvbiBwNShlKXtyZXR1cm4gQXJyYXkuZnJvbShlLmdldENsaWVudFJlY3RzKCkpfWZ1bmN0aW9uIG1FKGUpe3JldHVybiB4aSh0byhlKSkubGVmdCtOZChlKS5zY3JvbGxMZWZ0fWZ1bmN0aW9uIGc1KGUpe2NvbnN0IHQ9dG8oZSksbj1OZChlKSxyPWUub3duZXJEb2N1bWVudC5ib2R5LG89U24odC5zY3JvbGxXaWR0aCx0LmNsaWVudFdpZHRoLHIuc2Nyb2xsV2lkdGgsci5jbGllbnRXaWR0aCksaT1Tbih0LnNjcm9sbEhlaWdodCx0LmNsaWVudEhlaWdodCxyLnNjcm9sbEhlaWdodCxyLmNsaWVudEhlaWdodCk7bGV0IGw9LW4uc2Nyb2xsTGVmdCttRShlKTtjb25zdCBzPS1uLnNjcm9sbFRvcDtyZXR1cm4gVm4ocikuZGlyZWN0aW9uPT09InJ0bCImJihsKz1Tbih0LmNsaWVudFdpZHRoLHIuY2xpZW50V2lkdGgpLW8pLHt3aWR0aDpvLGhlaWdodDppLHg6bCx5OnN9fWZ1bmN0aW9uIG01KGUsdCl7Y29uc3Qgbj1rbihlKSxyPXRvKGUpLG89bi52aXN1YWxWaWV3cG9ydDtsZXQgaT1yLmNsaWVudFdpZHRoLGw9ci5jbGllbnRIZWlnaHQscz0wLGE9MDtpZihvKXtpPW8ud2lkdGgsbD1vLmhlaWdodDtjb25zdCB1PU9tKCk7KCF1fHx1JiZ0PT09ImZpeGVkIikmJihzPW8ub2Zmc2V0TGVmdCxhPW8ub2Zmc2V0VG9wKX1yZXR1cm57d2lkdGg6aSxoZWlnaHQ6bCx4OnMseTphfX1mdW5jdGlvbiB2NShlLHQpe2NvbnN0IG49eGkoZSwhMCx0PT09ImZpeGVkIikscj1uLnRvcCtlLmNsaWVudFRvcCxvPW4ubGVmdCtlLmNsaWVudExlZnQsaT1DcihlKT92bChlKTp6bygxKSxsPWUuY2xpZW50V2lkdGgqaS54LHM9ZS5jbGllbnRIZWlnaHQqaS55LGE9byppLngsdT1yKmkueTtyZXR1cm57d2lkdGg6bCxoZWlnaHQ6cyx4OmEseTp1fX1mdW5jdGlvbiBiMChlLHQsbil7bGV0IHI7aWYodD09PSJ2aWV3cG9ydCIpcj1tNShlLG4pO2Vsc2UgaWYodD09PSJkb2N1bWVudCIpcj1nNSh0byhlKSk7ZWxzZSBpZihYcih0KSlyPXY1KHQsbik7ZWxzZXtjb25zdCBvPWdFKGUpO3I9ey4uLnQseDp0Lngtby54LHk6dC55LW8ueX19cmV0dXJuIFVjKHIpfWZ1bmN0aW9uIHZFKGUsdCl7Y29uc3Qgbj1PbChlKTtyZXR1cm4gbj09PXR8fCFYcihuKXx8YmQobik/ITE6Vm4obikucG9zaXRpb249PT0iZml4ZWQifHx2RShuLHQpfWZ1bmN0aW9uIHk1KGUsdCl7Y29uc3Qgbj10LmdldChlKTtpZihuKXJldHVybiBuO2xldCByPWthKGUsW10sITEpLmZpbHRlcihzPT5YcihzKSYmRm8ocykhPT0iYm9keSIpLG89bnVsbDtjb25zdCBpPVZuKGUpLnBvc2l0aW9uPT09ImZpeGVkIjtsZXQgbD1pP09sKGUpOmU7Zm9yKDtYcihsKSYmIWJkKGwpOyl7Y29uc3Qgcz1WbihsKSxhPVBtKGwpOyFhJiZzLnBvc2l0aW9uPT09ImZpeGVkIiYmKG89bnVsbCksKGk/IWEmJiFvOiFhJiZzLnBvc2l0aW9uPT09InN0YXRpYyImJiEhbyYmWyJhYnNvbHV0ZSIsImZpeGVkIl0uaW5jbHVkZXMoby5wb3NpdGlvbil8fFZhKGwpJiYhYSYmdkUoZSxsKSk/cj1yLmZpbHRlcihjPT5jIT09bCk6bz1zLGw9T2wobCl9cmV0dXJuIHQuc2V0KGUscikscn1mdW5jdGlvbiB4NShlKXtsZXR7ZWxlbWVudDp0LGJvdW5kYXJ5Om4scm9vdEJvdW5kYXJ5OnIsc3RyYXRlZ3k6b309ZTtjb25zdCBsPVsuLi5uPT09ImNsaXBwaW5nQW5jZXN0b3JzIj95NSh0LHRoaXMuX2MpOltdLmNvbmNhdChuKSxyXSxzPWxbMF0sYT1sLnJlZHVjZSgodSxjKT0+e2NvbnN0IGQ9YjAodCxjLG8pO3JldHVybiB1LnRvcD1TbihkLnRvcCx1LnRvcCksdS5yaWdodD1qbyhkLnJpZ2h0LHUucmlnaHQpLHUuYm90dG9tPWpvKGQuYm90dG9tLHUuYm90dG9tKSx1LmxlZnQ9U24oZC5sZWZ0LHUubGVmdCksdX0sYjAodCxzLG8pKTtyZXR1cm57d2lkdGg6YS5yaWdodC1hLmxlZnQsaGVpZ2h0OmEuYm90dG9tLWEudG9wLHg6YS5sZWZ0LHk6YS50b3B9fWZ1bmN0aW9uIHc1KGUpe3JldHVybiBwRShlKX1mdW5jdGlvbiBfNShlLHQsbil7Y29uc3Qgcj1Dcih0KSxvPXRvKHQpLGk9bj09PSJmaXhlZCIsbD14aShlLCEwLGksdCk7bGV0IHM9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH07Y29uc3QgYT16bygwKTtpZihyfHwhciYmIWkpaWYoKEZvKHQpIT09ImJvZHkifHxWYShvKSkmJihzPU5kKHQpKSxyKXtjb25zdCB1PXhpKHQsITAsaSx0KTthLng9dS54K3QuY2xpZW50TGVmdCxhLnk9dS55K3QuY2xpZW50VG9wfWVsc2UgbyYmKGEueD1tRShvKSk7cmV0dXJue3g6bC5sZWZ0K3Muc2Nyb2xsTGVmdC1hLngseTpsLnRvcCtzLnNjcm9sbFRvcC1hLnksd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9fWZ1bmN0aW9uIE4wKGUsdCl7cmV0dXJuIUNyKGUpfHxWbihlKS5wb3NpdGlvbj09PSJmaXhlZCI/bnVsbDp0P3QoZSk6ZS5vZmZzZXRQYXJlbnR9ZnVuY3Rpb24geUUoZSx0KXtjb25zdCBuPWtuKGUpO2lmKCFDcihlKSlyZXR1cm4gbjtsZXQgcj1OMChlLHQpO2Zvcig7ciYmdTUocikmJlZuKHIpLnBvc2l0aW9uPT09InN0YXRpYyI7KXI9TjAocix0KTtyZXR1cm4gciYmKEZvKHIpPT09Imh0bWwifHxGbyhyKT09PSJib2R5IiYmVm4ocikucG9zaXRpb249PT0ic3RhdGljIiYmIVBtKHIpKT9uOnJ8fGM1KGUpfHxufWNvbnN0IFM1PWFzeW5jIGZ1bmN0aW9uKGUpe2xldHtyZWZlcmVuY2U6dCxmbG9hdGluZzpuLHN0cmF0ZWd5OnJ9PWU7Y29uc3Qgbz10aGlzLmdldE9mZnNldFBhcmVudHx8eUUsaT10aGlzLmdldERpbWVuc2lvbnM7cmV0dXJue3JlZmVyZW5jZTpfNSh0LGF3YWl0IG8obiksciksZmxvYXRpbmc6e3g6MCx5OjAsLi4uYXdhaXQgaShuKX19fTtmdW5jdGlvbiBFNShlKXtyZXR1cm4gVm4oZSkuZGlyZWN0aW9uPT09InJ0bCJ9Y29uc3QgQzU9e2NvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0Omg1LGdldERvY3VtZW50RWxlbWVudDp0byxnZXRDbGlwcGluZ1JlY3Q6eDUsZ2V0T2Zmc2V0UGFyZW50OnlFLGdldEVsZW1lbnRSZWN0czpTNSxnZXRDbGllbnRSZWN0czpwNSxnZXREaW1lbnNpb25zOnc1LGdldFNjYWxlOnZsLGlzRWxlbWVudDpYcixpc1JUTDpFNX07ZnVuY3Rpb24gJDUoZSx0KXtsZXQgbj1udWxsLHI7Y29uc3Qgbz10byhlKTtmdW5jdGlvbiBpKCl7Y2xlYXJUaW1lb3V0KHIpLG4mJm4uZGlzY29ubmVjdCgpLG49bnVsbH1mdW5jdGlvbiBsKHMsYSl7cz09PXZvaWQgMCYmKHM9ITEpLGE9PT12b2lkIDAmJihhPTEpLGkoKTtjb25zdHtsZWZ0OnUsdG9wOmMsd2lkdGg6ZCxoZWlnaHQ6Zn09ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihzfHx0KCksIWR8fCFmKXJldHVybjtjb25zdCBoPUN1KGMpLGc9Q3Uoby5jbGllbnRXaWR0aC0odStkKSksbT1DdShvLmNsaWVudEhlaWdodC0oYytmKSksXz1DdSh1KSx5PXtyb290TWFyZ2luOi1oKyJweCAiKy1nKyJweCAiKy1tKyJweCAiKy1fKyJweCIsdGhyZXNob2xkOlNuKDAsam8oMSxhKSl8fDF9O2xldCB4PSEwO2Z1bmN0aW9uIFMoayl7Y29uc3QgYj1rWzBdLmludGVyc2VjdGlvblJhdGlvO2lmKGIhPT1hKXtpZigheClyZXR1cm4gbCgpO2I/bCghMSxiKTpyPXNldFRpbWVvdXQoKCk9PntsKCExLDFlLTcpfSwxMDApfXg9ITF9dHJ5e249bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFMsey4uLnkscm9vdDpvLm93bmVyRG9jdW1lbnR9KX1jYXRjaHtuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihTLHkpfW4ub2JzZXJ2ZShlKX1yZXR1cm4gbCghMCksaX1mdW5jdGlvbiBrNShlLHQsbixyKXtyPT09dm9pZCAwJiYocj17fSk7Y29uc3R7YW5jZXN0b3JTY3JvbGw6bz0hMCxhbmNlc3RvclJlc2l6ZTppPSEwLGVsZW1lbnRSZXNpemU6bD10eXBlb2YgUmVzaXplT2JzZXJ2ZXI9PSJmdW5jdGlvbiIsbGF5b3V0U2hpZnQ6cz10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9PSJmdW5jdGlvbiIsYW5pbWF0aW9uRnJhbWU6YT0hMX09cix1PUFtKGUpLGM9b3x8aT9bLi4udT9rYSh1KTpbXSwuLi5rYSh0KV06W107Yy5mb3JFYWNoKHY9PntvJiZ2LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsbix7cGFzc2l2ZTohMH0pLGkmJnYuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixuKX0pO2NvbnN0IGQ9dSYmcz8kNSh1LG4pOm51bGw7bGV0IGY9LTEsaD1udWxsO2wmJihoPW5ldyBSZXNpemVPYnNlcnZlcih2PT57bGV0W3ldPXY7eSYmeS50YXJnZXQ9PT11JiZoJiYoaC51bm9ic2VydmUodCksY2FuY2VsQW5pbWF0aW9uRnJhbWUoZiksZj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntoJiZoLm9ic2VydmUodCl9KSksbigpfSksdSYmIWEmJmgub2JzZXJ2ZSh1KSxoLm9ic2VydmUodCkpO2xldCBnLG09YT94aShlKTpudWxsO2EmJl8oKTtmdW5jdGlvbiBfKCl7Y29uc3Qgdj14aShlKTttJiYodi54IT09bS54fHx2LnkhPT1tLnl8fHYud2lkdGghPT1tLndpZHRofHx2LmhlaWdodCE9PW0uaGVpZ2h0KSYmbigpLG09dixnPXJlcXVlc3RBbmltYXRpb25GcmFtZShfKX1yZXR1cm4gbigpLCgpPT57Yy5mb3JFYWNoKHY9PntvJiZ2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsbiksaSYmdi5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLG4pfSksZCYmZCgpLGgmJmguZGlzY29ubmVjdCgpLGg9bnVsbCxhJiZjYW5jZWxBbmltYXRpb25GcmFtZShnKX19Y29uc3QgVDU9KGUsdCxuKT0+e2NvbnN0IHI9bmV3IE1hcCxvPXtwbGF0Zm9ybTpDNSwuLi5ufSxpPXsuLi5vLnBsYXRmb3JtLF9jOnJ9O3JldHVybiB0NShlLHQsey4uLm8scGxhdGZvcm06aX0pfSxiNT1lPT57ZnVuY3Rpb24gdChuKXtyZXR1cm57fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sImN1cnJlbnQiKX1yZXR1cm57bmFtZToiYXJyb3ciLG9wdGlvbnM6ZSxmbihuKXtjb25zdHtlbGVtZW50OnIscGFkZGluZzpvfT10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOmU7cmV0dXJuIHImJnQocik/ci5jdXJyZW50IT1udWxsP0MwKHtlbGVtZW50OnIuY3VycmVudCxwYWRkaW5nOm99KS5mbihuKTp7fTpyP0MwKHtlbGVtZW50OnIscGFkZGluZzpvfSkuZm4obik6e319fX07dmFyIEd1PXR5cGVvZiBkb2N1bWVudDwidSI/cC51c2VMYXlvdXRFZmZlY3Q6cC51c2VFZmZlY3Q7ZnVuY3Rpb24gVmMoZSx0KXtpZihlPT09dClyZXR1cm4hMDtpZih0eXBlb2YgZSE9dHlwZW9mIHQpcmV0dXJuITE7aWYodHlwZW9mIGU9PSJmdW5jdGlvbiImJmUudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4hMDtsZXQgbixyLG87aWYoZSYmdCYmdHlwZW9mIGU9PSJvYmplY3QiKXtpZihBcnJheS5pc0FycmF5KGUpKXtpZihuPWUubGVuZ3RoLG4hPXQubGVuZ3RoKXJldHVybiExO2ZvcihyPW47ci0tIT09MDspaWYoIVZjKGVbcl0sdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9aWYobz1PYmplY3Qua2V5cyhlKSxuPW8ubGVuZ3RoLG4hPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgpcmV0dXJuITE7Zm9yKHI9bjtyLS0hPT0wOylpZighe30uaGFzT3duUHJvcGVydHkuY2FsbCh0LG9bcl0pKXJldHVybiExO2ZvcihyPW47ci0tIT09MDspe2NvbnN0IGk9b1tyXTtpZighKGk9PT0iX293bmVyIiYmZS4kJHR5cGVvZikmJiFWYyhlW2ldLHRbaV0pKXJldHVybiExfXJldHVybiEwfXJldHVybiBlIT09ZSYmdCE9PXR9ZnVuY3Rpb24geEUoZSl7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiPzE6KGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5kZXZpY2VQaXhlbFJhdGlvfHwxfWZ1bmN0aW9uIFIwKGUsdCl7Y29uc3Qgbj14RShlKTtyZXR1cm4gTWF0aC5yb3VuZCh0Km4pL259ZnVuY3Rpb24gUDAoZSl7Y29uc3QgdD1wLnVzZVJlZihlKTtyZXR1cm4gR3UoKCk9Pnt0LmN1cnJlbnQ9ZX0pLHR9ZnVuY3Rpb24gTjUoZSl7ZT09PXZvaWQgMCYmKGU9e30pO2NvbnN0e3BsYWNlbWVudDp0PSJib3R0b20iLHN0cmF0ZWd5Om49ImFic29sdXRlIixtaWRkbGV3YXJlOnI9W10scGxhdGZvcm06byxlbGVtZW50czp7cmVmZXJlbmNlOmksZmxvYXRpbmc6bH09e30sdHJhbnNmb3JtOnM9ITAsd2hpbGVFbGVtZW50c01vdW50ZWQ6YSxvcGVuOnV9PWUsW2MsZF09cC51c2VTdGF0ZSh7eDowLHk6MCxzdHJhdGVneTpuLHBsYWNlbWVudDp0LG1pZGRsZXdhcmVEYXRhOnt9LGlzUG9zaXRpb25lZDohMX0pLFtmLGhdPXAudXNlU3RhdGUocik7VmMoZixyKXx8aChyKTtjb25zdFtnLG1dPXAudXNlU3RhdGUobnVsbCksW18sdl09cC51c2VTdGF0ZShudWxsKSx5PXAudXNlQ2FsbGJhY2soQz0+e0MhPWIuY3VycmVudCYmKGIuY3VycmVudD1DLG0oQykpfSxbbV0pLHg9cC51c2VDYWxsYmFjayhDPT57QyE9PVQuY3VycmVudCYmKFQuY3VycmVudD1DLHYoQykpfSxbdl0pLFM9aXx8ZyxrPWx8fF8sYj1wLnVzZVJlZihudWxsKSxUPXAudXNlUmVmKG51bGwpLE49cC51c2VSZWYoYyksRD1QMChhKSxNPVAwKG8pLGo9cC51c2VDYWxsYmFjaygoKT0+e2lmKCFiLmN1cnJlbnR8fCFULmN1cnJlbnQpcmV0dXJuO2NvbnN0IEM9e3BsYWNlbWVudDp0LHN0cmF0ZWd5Om4sbWlkZGxld2FyZTpmfTtNLmN1cnJlbnQmJihDLnBsYXRmb3JtPU0uY3VycmVudCksVDUoYi5jdXJyZW50LFQuY3VycmVudCxDKS50aGVuKCQ9Pntjb25zdCBFPXsuLi4kLGlzUG9zaXRpb25lZDohMH07Qi5jdXJyZW50JiYhVmMoTi5jdXJyZW50LEUpJiYoTi5jdXJyZW50PUUsJHIuZmx1c2hTeW5jKCgpPT57ZChFKX0pKX0pfSxbZix0LG4sTV0pO0d1KCgpPT57dT09PSExJiZOLmN1cnJlbnQuaXNQb3NpdGlvbmVkJiYoTi5jdXJyZW50LmlzUG9zaXRpb25lZD0hMSxkKEM9Pih7Li4uQyxpc1Bvc2l0aW9uZWQ6ITF9KSkpfSxbdV0pO2NvbnN0IEI9cC51c2VSZWYoITEpO0d1KCgpPT4oQi5jdXJyZW50PSEwLCgpPT57Qi5jdXJyZW50PSExfSksW10pLEd1KCgpPT57aWYoUyYmKGIuY3VycmVudD1TKSxrJiYoVC5jdXJyZW50PWspLFMmJmspe2lmKEQuY3VycmVudClyZXR1cm4gRC5jdXJyZW50KFMsayxqKTtqKCl9fSxbUyxrLGosRF0pO2NvbnN0IHJlPXAudXNlTWVtbygoKT0+KHtyZWZlcmVuY2U6YixmbG9hdGluZzpULHNldFJlZmVyZW5jZTp5LHNldEZsb2F0aW5nOnh9KSxbeSx4XSksSD1wLnVzZU1lbW8oKCk9Pih7cmVmZXJlbmNlOlMsZmxvYXRpbmc6a30pLFtTLGtdKSxZPXAudXNlTWVtbygoKT0+e2NvbnN0IEM9e3Bvc2l0aW9uOm4sbGVmdDowLHRvcDowfTtpZighSC5mbG9hdGluZylyZXR1cm4gQztjb25zdCAkPVIwKEguZmxvYXRpbmcsYy54KSxFPVIwKEguZmxvYXRpbmcsYy55KTtyZXR1cm4gcz97Li4uQyx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiKyQrInB4LCAiK0UrInB4KSIsLi4ueEUoSC5mbG9hdGluZyk+PTEuNSYme3dpbGxDaGFuZ2U6InRyYW5zZm9ybSJ9fTp7cG9zaXRpb246bixsZWZ0OiQsdG9wOkV9fSxbbixzLEguZmxvYXRpbmcsYy54LGMueV0pO3JldHVybiBwLnVzZU1lbW8oKCk9Pih7Li4uYyx1cGRhdGU6aixyZWZzOnJlLGVsZW1lbnRzOkgsZmxvYXRpbmdTdHlsZXM6WX0pLFtjLGoscmUsSCxZXSl9ZnVuY3Rpb24gd0UoZSl7Y29uc3RbdCxuXT1wLnVzZVN0YXRlKHZvaWQgMCk7cmV0dXJuIGJuKCgpPT57aWYoZSl7bih7d2lkdGg6ZS5vZmZzZXRXaWR0aCxoZWlnaHQ6ZS5vZmZzZXRIZWlnaHR9KTtjb25zdCByPW5ldyBSZXNpemVPYnNlcnZlcihvPT57aWYoIUFycmF5LmlzQXJyYXkobyl8fCFvLmxlbmd0aClyZXR1cm47Y29uc3QgaT1vWzBdO2xldCBsLHM7aWYoImJvcmRlckJveFNpemUiaW4gaSl7Y29uc3QgYT1pLmJvcmRlckJveFNpemUsdT1BcnJheS5pc0FycmF5KGEpP2FbMF06YTtsPXUuaW5saW5lU2l6ZSxzPXUuYmxvY2tTaXplfWVsc2UgbD1lLm9mZnNldFdpZHRoLHM9ZS5vZmZzZXRIZWlnaHQ7bih7d2lkdGg6bCxoZWlnaHQ6c30pfSk7cmV0dXJuIHIub2JzZXJ2ZShlLHtib3g6ImJvcmRlci1ib3gifSksKCk9PnIudW5vYnNlcnZlKGUpfWVsc2Ugbih2b2lkIDApfSxbZV0pLHR9Y29uc3QgX0U9IlBvcHBlciIsW1NFLEVFXT1raShfRSksW1I1LENFXT1TRShfRSksUDU9ZT0+e2NvbnN0e19fc2NvcGVQb3BwZXI6dCxjaGlsZHJlbjpufT1lLFtyLG9dPXAudXNlU3RhdGUobnVsbCk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChSNSx7c2NvcGU6dCxhbmNob3I6cixvbkFuY2hvckNoYW5nZTpvfSxuKX0sTzU9IlBvcHBlckFuY2hvciIsQTU9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVBvcHBlcjpuLHZpcnR1YWxSZWY6ciwuLi5vfT1lLGk9Q0UoTzUsbiksbD1wLnVzZVJlZihudWxsKSxzPVFlKHQsbCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57aS5vbkFuY2hvckNoYW5nZSgocj09bnVsbD92b2lkIDA6ci5jdXJyZW50KXx8bC5jdXJyZW50KX0pLHI/bnVsbDpwLmNyZWF0ZUVsZW1lbnQoTGUuZGl2LHRlKHt9LG8se3JlZjpzfSkpfSksJEU9IlBvcHBlckNvbnRlbnQiLFtNNSxLNF09U0UoJEUpLEw1PXAuZm9yd2FyZFJlZigoZSx0KT0+e3ZhciBuLHIsbyxpLGwscyxhLHU7Y29uc3R7X19zY29wZVBvcHBlcjpjLHNpZGU6ZD0iYm90dG9tIixzaWRlT2Zmc2V0OmY9MCxhbGlnbjpoPSJjZW50ZXIiLGFsaWduT2Zmc2V0Omc9MCxhcnJvd1BhZGRpbmc6bT0wLGF2b2lkQ29sbGlzaW9uczpfPSEwLGNvbGxpc2lvbkJvdW5kYXJ5OnY9W10sY29sbGlzaW9uUGFkZGluZzp5PTAsc3RpY2t5Ong9InBhcnRpYWwiLGhpZGVXaGVuRGV0YWNoZWQ6Uz0hMSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Oms9Im9wdGltaXplZCIsb25QbGFjZWQ6YiwuLi5UfT1lLE49Q0UoJEUsYyksW0QsTV09cC51c2VTdGF0ZShudWxsKSxqPVFlKHQsY249Pk0oY24pKSxbQixyZV09cC51c2VTdGF0ZShudWxsKSxIPXdFKEIpLFk9KG49SD09bnVsbD92b2lkIDA6SC53aWR0aCkhPT1udWxsJiZuIT09dm9pZCAwP246MCxDPShyPUg9PW51bGw/dm9pZCAwOkguaGVpZ2h0KSE9PW51bGwmJnIhPT12b2lkIDA/cjowLCQ9ZCsoaCE9PSJjZW50ZXIiPyItIitoOiIiKSxFPXR5cGVvZiB5PT0ibnVtYmVyIj95Ont0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MCwuLi55fSxPPUFycmF5LmlzQXJyYXkodik/djpbdl0sUj1PLmxlbmd0aD4wLEY9e3BhZGRpbmc6RSxib3VuZGFyeTpPLmZpbHRlcihENSksYWx0Qm91bmRhcnk6Un0se3JlZnM6VixmbG9hdGluZ1N0eWxlczphZSxwbGFjZW1lbnQ6b2UsaXNQb3NpdGlvbmVkOiRlLG1pZGRsZXdhcmVEYXRhOl9lfT1ONSh7c3RyYXRlZ3k6ImZpeGVkIixwbGFjZW1lbnQ6JCx3aGlsZUVsZW1lbnRzTW91bnRlZDooLi4uY24pPT5rNSguLi5jbix7YW5pbWF0aW9uRnJhbWU6az09PSJhbHdheXMifSksZWxlbWVudHM6e3JlZmVyZW5jZTpOLmFuY2hvcn0sbWlkZGxld2FyZTpbaTUoe21haW5BeGlzOmYrQyxhbGlnbm1lbnRBeGlzOmd9KSxfJiZsNSh7bWFpbkF4aXM6ITAsY3Jvc3NBeGlzOiExLGxpbWl0ZXI6eD09PSJwYXJ0aWFsIj9zNSgpOnZvaWQgMCwuLi5GfSksXyYmbjUoey4uLkZ9KSxhNSh7Li4uRixhcHBseTooe2VsZW1lbnRzOmNuLHJlY3RzOktuLGF2YWlsYWJsZVdpZHRoOlJlLGF2YWlsYWJsZUhlaWdodDptdH0pPT57Y29uc3R7d2lkdGg6SmUsaGVpZ2h0Oll0fT1Lbi5yZWZlcmVuY2UsZG49Y24uZmxvYXRpbmcuc3R5bGU7ZG4uc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS13aWR0aCIsYCR7UmV9cHhgKSxkbi5zZXRQcm9wZXJ0eSgiLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodCIsYCR7bXR9cHhgKSxkbi5zZXRQcm9wZXJ0eSgiLS1yYWRpeC1wb3BwZXItYW5jaG9yLXdpZHRoIixgJHtKZX1weGApLGRuLnNldFByb3BlcnR5KCItLXJhZGl4LXBvcHBlci1hbmNob3ItaGVpZ2h0IixgJHtZdH1weGApfX0pLEImJmI1KHtlbGVtZW50OkIscGFkZGluZzptfSksSTUoe2Fycm93V2lkdGg6WSxhcnJvd0hlaWdodDpDfSksUyYmcjUoe3N0cmF0ZWd5OiJyZWZlcmVuY2VIaWRkZW4iLC4uLkZ9KV19KSxbUSxOZV09a0Uob2UpLHllPVV0KGIpO2JuKCgpPT57JGUmJih5ZT09bnVsbHx8eWUoKSl9LFskZSx5ZV0pO2NvbnN0IFNlPShvPV9lLmFycm93KT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm8ueCxwZT0oaT1fZS5hcnJvdyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLnksYmU9KChsPV9lLmFycm93KT09PW51bGx8fGw9PT12b2lkIDA/dm9pZCAwOmwuY2VudGVyT2Zmc2V0KSE9PTAsW0ZlLE90XT1wLnVzZVN0YXRlKCk7cmV0dXJuIGJuKCgpPT57RCYmT3Qod2luZG93LmdldENvbXB1dGVkU3R5bGUoRCkuekluZGV4KX0sW0RdKSxwLmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjpWLnNldEZsb2F0aW5nLCJkYXRhLXJhZGl4LXBvcHBlci1jb250ZW50LXdyYXBwZXIiOiIiLHN0eWxlOnsuLi5hZSx0cmFuc2Zvcm06JGU/YWUudHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTIwMCUpIixtaW5XaWR0aDoibWF4LWNvbnRlbnQiLHpJbmRleDpGZSwiLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbiI6WyhzPV9lLnRyYW5zZm9ybU9yaWdpbik9PT1udWxsfHxzPT09dm9pZCAwP3ZvaWQgMDpzLngsKGE9X2UudHJhbnNmb3JtT3JpZ2luKT09PW51bGx8fGE9PT12b2lkIDA/dm9pZCAwOmEueV0uam9pbigiICIpfSxkaXI6ZS5kaXJ9LHAuY3JlYXRlRWxlbWVudChNNSx7c2NvcGU6YyxwbGFjZWRTaWRlOlEsb25BcnJvd0NoYW5nZTpyZSxhcnJvd1g6U2UsYXJyb3dZOnBlLHNob3VsZEhpZGVBcnJvdzpiZX0scC5jcmVhdGVFbGVtZW50KExlLmRpdix0ZSh7ImRhdGEtc2lkZSI6USwiZGF0YS1hbGlnbiI6TmV9LFQse3JlZjpqLHN0eWxlOnsuLi5ULnN0eWxlLGFuaW1hdGlvbjokZT92b2lkIDA6Im5vbmUiLG9wYWNpdHk6KHU9X2UuaGlkZSkhPT1udWxsJiZ1IT09dm9pZCAwJiZ1LnJlZmVyZW5jZUhpZGRlbj8wOnZvaWQgMH19KSkpKX0pO2Z1bmN0aW9uIEQ1KGUpe3JldHVybiBlIT09bnVsbH1jb25zdCBJNT1lPT4oe25hbWU6InRyYW5zZm9ybU9yaWdpbiIsb3B0aW9uczplLGZuKHQpe3ZhciBuLHIsbyxpLGw7Y29uc3R7cGxhY2VtZW50OnMscmVjdHM6YSxtaWRkbGV3YXJlRGF0YTp1fT10LGQ9KChuPXUuYXJyb3cpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5jZW50ZXJPZmZzZXQpIT09MCxmPWQ/MDplLmFycm93V2lkdGgsaD1kPzA6ZS5hcnJvd0hlaWdodCxbZyxtXT1rRShzKSxfPXtzdGFydDoiMCUiLGNlbnRlcjoiNTAlIixlbmQ6IjEwMCUifVttXSx2PSgocj0obz11LmFycm93KT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm8ueCkhPT1udWxsJiZyIT09dm9pZCAwP3I6MCkrZi8yLHk9KChpPShsPXUuYXJyb3cpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC55KSE9PW51bGwmJmkhPT12b2lkIDA/aTowKStoLzI7bGV0IHg9IiIsUz0iIjtyZXR1cm4gZz09PSJib3R0b20iPyh4PWQ/XzpgJHt2fXB4YCxTPWAkey1ofXB4YCk6Zz09PSJ0b3AiPyh4PWQ/XzpgJHt2fXB4YCxTPWAke2EuZmxvYXRpbmcuaGVpZ2h0K2h9cHhgKTpnPT09InJpZ2h0Ij8oeD1gJHstaH1weGAsUz1kP186YCR7eX1weGApOmc9PT0ibGVmdCImJih4PWAke2EuZmxvYXRpbmcud2lkdGgraH1weGAsUz1kP186YCR7eX1weGApLHtkYXRhOnt4LHk6U319fX0pO2Z1bmN0aW9uIGtFKGUpe2NvbnN0W3Qsbj0iY2VudGVyIl09ZS5zcGxpdCgiLSIpO3JldHVyblt0LG5dfWNvbnN0IGo1PVA1LHo1PUE1LEY1PUw1LEI1PXAuZm9yd2FyZFJlZigoZSx0KT0+e3ZhciBuO2NvbnN0e2NvbnRhaW5lcjpyPWdsb2JhbFRoaXM9PW51bGx8fChuPWdsb2JhbFRoaXMuZG9jdW1lbnQpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5ib2R5LC4uLm99PWU7cmV0dXJuIHI/d3cuY3JlYXRlUG9ydGFsKHAuY3JlYXRlRWxlbWVudChMZS5kaXYsdGUoe30sbyx7cmVmOnR9KSkscik6bnVsbH0pO2Z1bmN0aW9uIEFsKHtwcm9wOmUsZGVmYXVsdFByb3A6dCxvbkNoYW5nZTpuPSgpPT57fX0pe2NvbnN0W3Isb109VzUoe2RlZmF1bHRQcm9wOnQsb25DaGFuZ2U6bn0pLGk9ZSE9PXZvaWQgMCxsPWk/ZTpyLHM9VXQobiksYT1wLnVzZUNhbGxiYWNrKHU9PntpZihpKXtjb25zdCBkPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3UoZSk6dTtkIT09ZSYmcyhkKX1lbHNlIG8odSl9LFtpLGUsbyxzXSk7cmV0dXJuW2wsYV19ZnVuY3Rpb24gVzUoe2RlZmF1bHRQcm9wOmUsb25DaGFuZ2U6dH0pe2NvbnN0IG49cC51c2VTdGF0ZShlKSxbcl09bixvPXAudXNlUmVmKHIpLGk9VXQodCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57by5jdXJyZW50IT09ciYmKGkociksby5jdXJyZW50PXIpfSxbcixvLGldKSxufWZ1bmN0aW9uIFRFKGUpe2NvbnN0IHQ9cC51c2VSZWYoe3ZhbHVlOmUscHJldmlvdXM6ZX0pO3JldHVybiBwLnVzZU1lbW8oKCk9Pih0LmN1cnJlbnQudmFsdWUhPT1lJiYodC5jdXJyZW50LnByZXZpb3VzPXQuY3VycmVudC52YWx1ZSx0LmN1cnJlbnQudmFsdWU9ZSksdC5jdXJyZW50LnByZXZpb3VzKSxbZV0pfWNvbnN0IFU1PXAuZm9yd2FyZFJlZigoZSx0KT0+cC5jcmVhdGVFbGVtZW50KExlLnNwYW4sdGUoe30sZSx7cmVmOnQsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsYm9yZGVyOjAsd2lkdGg6MSxoZWlnaHQ6MSxwYWRkaW5nOjAsbWFyZ2luOi0xLG92ZXJmbG93OiJoaWRkZW4iLGNsaXA6InJlY3QoMCwgMCwgMCwgMCkiLHdoaXRlU3BhY2U6Im5vd3JhcCIsd29yZFdyYXA6Im5vcm1hbCIsLi4uZS5zdHlsZX19KSkpO3ZhciBWNT1mdW5jdGlvbihlKXtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiBudWxsO3ZhciB0PUFycmF5LmlzQXJyYXkoZSk/ZVswXTplO3JldHVybiB0Lm93bmVyRG9jdW1lbnQuYm9keX0sV2k9bmV3IFdlYWtNYXAsJHU9bmV3IFdlYWtNYXAsa3U9e30sQWY9MCxiRT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmKGUuaG9zdHx8YkUoZS5wYXJlbnROb2RlKSl9LEg1PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKG4pe2lmKGUuY29udGFpbnMobikpcmV0dXJuIG47dmFyIHI9YkUobik7cmV0dXJuIHImJmUuY29udGFpbnMocik/cjooY29uc29sZS5lcnJvcigiYXJpYS1oaWRkZW4iLG4sImluIG5vdCBjb250YWluZWQgaW5zaWRlIixlLCIuIERvaW5nIG5vdGhpbmciKSxudWxsKX0pLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hIW59KX0sSzU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89SDUodCxBcnJheS5pc0FycmF5KGUpP2U6W2VdKTtrdVtuXXx8KGt1W25dPW5ldyBXZWFrTWFwKTt2YXIgaT1rdVtuXSxsPVtdLHM9bmV3IFNldCxhPW5ldyBTZXQobyksdT1mdW5jdGlvbihkKXshZHx8cy5oYXMoZCl8fChzLmFkZChkKSx1KGQucGFyZW50Tm9kZSkpfTtvLmZvckVhY2godSk7dmFyIGM9ZnVuY3Rpb24oZCl7IWR8fGEuaGFzKGQpfHxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGQuY2hpbGRyZW4sZnVuY3Rpb24oZil7aWYocy5oYXMoZikpYyhmKTtlbHNle3ZhciBoPWYuZ2V0QXR0cmlidXRlKHIpLGc9aCE9PW51bGwmJmghPT0iZmFsc2UiLG09KFdpLmdldChmKXx8MCkrMSxfPShpLmdldChmKXx8MCkrMTtXaS5zZXQoZixtKSxpLnNldChmLF8pLGwucHVzaChmKSxtPT09MSYmZyYmJHUuc2V0KGYsITApLF89PT0xJiZmLnNldEF0dHJpYnV0ZShuLCJ0cnVlIiksZ3x8Zi5zZXRBdHRyaWJ1dGUociwidHJ1ZSIpfX0pfTtyZXR1cm4gYyh0KSxzLmNsZWFyKCksQWYrKyxmdW5jdGlvbigpe2wuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgZj1XaS5nZXQoZCktMSxoPWkuZ2V0KGQpLTE7V2kuc2V0KGQsZiksaS5zZXQoZCxoKSxmfHwoJHUuaGFzKGQpfHxkLnJlbW92ZUF0dHJpYnV0ZShyKSwkdS5kZWxldGUoZCkpLGh8fGQucmVtb3ZlQXR0cmlidXRlKG4pfSksQWYtLSxBZnx8KFdpPW5ldyBXZWFrTWFwLFdpPW5ldyBXZWFrTWFwLCR1PW5ldyBXZWFrTWFwLGt1PXt9KX19LEc1PWZ1bmN0aW9uKGUsdCxuKXtuPT09dm9pZCAwJiYobj0iZGF0YS1hcmlhLWhpZGRlbiIpO3ZhciByPUFycmF5LmZyb20oQXJyYXkuaXNBcnJheShlKT9lOltlXSksbz10fHxWNShlKTtyZXR1cm4gbz8oci5wdXNoLmFwcGx5KHIsQXJyYXkuZnJvbShvLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxpdmVdIikpKSxLNShyLG8sbiwiYXJpYS1oaWRkZW4iKSk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LHByPWZ1bmN0aW9uKCl7cmV0dXJuIHByPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTEsbz1hcmd1bWVudHMubGVuZ3RoO3I8bztyKyspe249YXJndW1lbnRzW3JdO2Zvcih2YXIgaSBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpJiYodFtpXT1uW2ldKX1yZXR1cm4gdH0scHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBORShlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYoZSE9bnVsbCYmdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM9PSJmdW5jdGlvbiIpZm9yKHZhciBvPTAscj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSk7cmV0dXJuIG59ZnVuY3Rpb24gWTUoZSx0LG4pe2lmKG58fGFyZ3VtZW50cy5sZW5ndGg9PT0yKWZvcih2YXIgcj0wLG89dC5sZW5ndGgsaTtyPG87cisrKShpfHwhKHIgaW4gdCkpJiYoaXx8KGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLHIpKSxpW3JdPXRbcl0pO3JldHVybiBlLmNvbmNhdChpfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9dmFyIFl1PSJyaWdodC1zY3JvbGwtYmFyLXBvc2l0aW9uIixYdT0id2lkdGgtYmVmb3JlLXNjcm9sbC1iYXIiLFg1PSJ3aXRoLXNjcm9sbC1iYXJzLWhpZGRlbiIsUTU9Ii0tcmVtb3ZlZC1ib2R5LXNjcm9sbC1iYXItc2l6ZSI7ZnVuY3Rpb24gSjUoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSh0KTplJiYoZS5jdXJyZW50PXQpLGV9ZnVuY3Rpb24gWjUoZSx0KXt2YXIgbj1wLnVzZVN0YXRlKGZ1bmN0aW9uKCl7cmV0dXJue3ZhbHVlOmUsY2FsbGJhY2s6dCxmYWNhZGU6e2dldCBjdXJyZW50KCl7cmV0dXJuIG4udmFsdWV9LHNldCBjdXJyZW50KHIpe3ZhciBvPW4udmFsdWU7byE9PXImJihuLnZhbHVlPXIsbi5jYWxsYmFjayhyLG8pKX19fX0pWzBdO3JldHVybiBuLmNhbGxiYWNrPXQsbi5mYWNhZGV9ZnVuY3Rpb24gcTUoZSx0KXtyZXR1cm4gWjUodHx8bnVsbCxmdW5jdGlvbihuKXtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiBKNShyLG4pfSl9KX1mdW5jdGlvbiBlQShlKXtyZXR1cm4gZX1mdW5jdGlvbiB0QShlLHQpe3Q9PT12b2lkIDAmJih0PWVBKTt2YXIgbj1bXSxyPSExLG89e3JlYWQ6ZnVuY3Rpb24oKXtpZihyKXRocm93IG5ldyBFcnJvcigiU2lkZWNhcjogY291bGQgbm90IGByZWFkYCBmcm9tIGFuIGBhc3NpZ25lZGAgbWVkaXVtLiBgcmVhZGAgY291bGQgYmUgdXNlZCBvbmx5IHdpdGggYHVzZU1lZGl1bWAuIik7cmV0dXJuIG4ubGVuZ3RoP25bbi5sZW5ndGgtMV06ZX0sdXNlTWVkaXVtOmZ1bmN0aW9uKGkpe3ZhciBsPXQoaSxyKTtyZXR1cm4gbi5wdXNoKGwpLGZ1bmN0aW9uKCl7bj1uLmZpbHRlcihmdW5jdGlvbihzKXtyZXR1cm4gcyE9PWx9KX19LGFzc2lnblN5bmNNZWRpdW06ZnVuY3Rpb24oaSl7Zm9yKHI9ITA7bi5sZW5ndGg7KXt2YXIgbD1uO249W10sbC5mb3JFYWNoKGkpfW49e3B1c2g6ZnVuY3Rpb24ocyl7cmV0dXJuIGkocyl9LGZpbHRlcjpmdW5jdGlvbigpe3JldHVybiBufX19LGFzc2lnbk1lZGl1bTpmdW5jdGlvbihpKXtyPSEwO3ZhciBsPVtdO2lmKG4ubGVuZ3RoKXt2YXIgcz1uO249W10scy5mb3JFYWNoKGkpLGw9bn12YXIgYT1mdW5jdGlvbigpe3ZhciBjPWw7bD1bXSxjLmZvckVhY2goaSl9LHU9ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihhKX07dSgpLG49e3B1c2g6ZnVuY3Rpb24oYyl7bC5wdXNoKGMpLHUoKX0sZmlsdGVyOmZ1bmN0aW9uKGMpe3JldHVybiBsPWwuZmlsdGVyKGMpLG59fX19O3JldHVybiBvfWZ1bmN0aW9uIG5BKGUpe2U9PT12b2lkIDAmJihlPXt9KTt2YXIgdD10QShudWxsKTtyZXR1cm4gdC5vcHRpb25zPXByKHthc3luYzohMCxzc3I6ITF9LGUpLHR9dmFyIFJFPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2lkZUNhcixuPU5FKGUsWyJzaWRlQ2FyIl0pO2lmKCF0KXRocm93IG5ldyBFcnJvcigiU2lkZWNhcjogcGxlYXNlIHByb3ZpZGUgYHNpZGVDYXJgIHByb3BlcnR5IHRvIGltcG9ydCB0aGUgcmlnaHQgY2FyIik7dmFyIHI9dC5yZWFkKCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJTaWRlY2FyIG1lZGl1bSBub3QgZm91bmQiKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KHIscHIoe30sbikpfTtSRS5pc1NpZGVDYXJFeHBvcnQ9ITA7ZnVuY3Rpb24gckEoZSx0KXtyZXR1cm4gZS51c2VNZWRpdW0odCksUkV9dmFyIFBFPW5BKCksTWY9ZnVuY3Rpb24oKXt9LFJkPXAuZm9yd2FyZFJlZihmdW5jdGlvbihlLHQpe3ZhciBuPXAudXNlUmVmKG51bGwpLHI9cC51c2VTdGF0ZSh7b25TY3JvbGxDYXB0dXJlOk1mLG9uV2hlZWxDYXB0dXJlOk1mLG9uVG91Y2hNb3ZlQ2FwdHVyZTpNZn0pLG89clswXSxpPXJbMV0sbD1lLmZvcndhcmRQcm9wcyxzPWUuY2hpbGRyZW4sYT1lLmNsYXNzTmFtZSx1PWUucmVtb3ZlU2Nyb2xsQmFyLGM9ZS5lbmFibGVkLGQ9ZS5zaGFyZHMsZj1lLnNpZGVDYXIsaD1lLm5vSXNvbGF0aW9uLGc9ZS5pbmVydCxtPWUuYWxsb3dQaW5jaFpvb20sXz1lLmFzLHY9Xz09PXZvaWQgMD8iZGl2IjpfLHk9TkUoZSxbImZvcndhcmRQcm9wcyIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwicmVtb3ZlU2Nyb2xsQmFyIiwiZW5hYmxlZCIsInNoYXJkcyIsInNpZGVDYXIiLCJub0lzb2xhdGlvbiIsImluZXJ0IiwiYWxsb3dQaW5jaFpvb20iLCJhcyJdKSx4PWYsUz1xNShbbix0XSksaz1wcihwcih7fSx5KSxvKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KHAuRnJhZ21lbnQsbnVsbCxjJiZwLmNyZWF0ZUVsZW1lbnQoeCx7c2lkZUNhcjpQRSxyZW1vdmVTY3JvbGxCYXI6dSxzaGFyZHM6ZCxub0lzb2xhdGlvbjpoLGluZXJ0Omcsc2V0Q2FsbGJhY2tzOmksYWxsb3dQaW5jaFpvb206ISFtLGxvY2tSZWY6bn0pLGw/cC5jbG9uZUVsZW1lbnQocC5DaGlsZHJlbi5vbmx5KHMpLHByKHByKHt9LGspLHtyZWY6U30pKTpwLmNyZWF0ZUVsZW1lbnQodixwcih7fSxrLHtjbGFzc05hbWU6YSxyZWY6U30pLHMpKX0pO1JkLmRlZmF1bHRQcm9wcz17ZW5hYmxlZDohMCxyZW1vdmVTY3JvbGxCYXI6ITAsaW5lcnQ6ITF9O1JkLmNsYXNzTmFtZXM9e2Z1bGxXaWR0aDpYdSx6ZXJvUmlnaHQ6WXV9O3ZhciBPMCxvQT1mdW5jdGlvbigpe2lmKE8wKXJldHVybiBPMDtpZih0eXBlb2YgX193ZWJwYWNrX25vbmNlX188InUiKXJldHVybiBfX3dlYnBhY2tfbm9uY2VfX307ZnVuY3Rpb24gaUEoKXtpZighZG9jdW1lbnQpcmV0dXJuIG51bGw7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtlLnR5cGU9InRleHQvY3NzIjt2YXIgdD1vQSgpO3JldHVybiB0JiZlLnNldEF0dHJpYnV0ZSgibm9uY2UiLHQpLGV9ZnVuY3Rpb24gbEEoZSx0KXtlLnN0eWxlU2hlZXQ/ZS5zdHlsZVNoZWV0LmNzc1RleHQ9dDplLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpKX1mdW5jdGlvbiBzQShlKXt2YXIgdD1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdO3QuYXBwZW5kQ2hpbGQoZSl9dmFyIGFBPWZ1bmN0aW9uKCl7dmFyIGU9MCx0PW51bGw7cmV0dXJue2FkZDpmdW5jdGlvbihuKXtlPT0wJiYodD1pQSgpKSYmKGxBKHQsbiksc0EodCkpLGUrK30scmVtb3ZlOmZ1bmN0aW9uKCl7ZS0tLCFlJiZ0JiYodC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsKX19fSx1QT1mdW5jdGlvbigpe3ZhciBlPWFBKCk7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cC51c2VFZmZlY3QoZnVuY3Rpb24oKXtyZXR1cm4gZS5hZGQodCksZnVuY3Rpb24oKXtlLnJlbW92ZSgpfX0sW3QmJm5dKX19LE9FPWZ1bmN0aW9uKCl7dmFyIGU9dUEoKSx0PWZ1bmN0aW9uKG4pe3ZhciByPW4uc3R5bGVzLG89bi5keW5hbWljO3JldHVybiBlKHIsbyksbnVsbH07cmV0dXJuIHR9LGNBPXtsZWZ0OjAsdG9wOjAscmlnaHQ6MCxnYXA6MH0sTGY9ZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGV8fCIiLDEwKXx8MH0sZEE9ZnVuY3Rpb24oZSl7dmFyIHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSksbj10W2U9PT0icGFkZGluZyI/InBhZGRpbmdMZWZ0IjoibWFyZ2luTGVmdCJdLHI9dFtlPT09InBhZGRpbmciPyJwYWRkaW5nVG9wIjoibWFyZ2luVG9wIl0sbz10W2U9PT0icGFkZGluZyI/InBhZGRpbmdSaWdodCI6Im1hcmdpblJpZ2h0Il07cmV0dXJuW0xmKG4pLExmKHIpLExmKG8pXX0sZkE9ZnVuY3Rpb24oZSl7aWYoZT09PXZvaWQgMCYmKGU9Im1hcmdpbiIpLHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBjQTt2YXIgdD1kQShlKSxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxyPXdpbmRvdy5pbm5lcldpZHRoO3JldHVybntsZWZ0OnRbMF0sdG9wOnRbMV0scmlnaHQ6dFsyXSxnYXA6TWF0aC5tYXgoMCxyLW4rdFsyXS10WzBdKX19LGhBPU9FKCkscEE9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ZS5sZWZ0LGk9ZS50b3AsbD1lLnJpZ2h0LHM9ZS5nYXA7cmV0dXJuIG49PT12b2lkIDAmJihuPSJtYXJnaW4iKSxgCiAgLmAuY29uY2F0KFg1LGAgewogICBvdmVyZmxvdzogaGlkZGVuIGApLmNvbmNhdChyLGA7CiAgIHBhZGRpbmctcmlnaHQ6IGApLmNvbmNhdChzLCJweCAiKS5jb25jYXQocixgOwogIH0KICBib2R5IHsKICAgIG92ZXJmbG93OiBoaWRkZW4gYCkuY29uY2F0KHIsYDsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBgKS5jb25jYXQoW3QmJiJwb3NpdGlvbjogcmVsYXRpdmUgIi5jb25jYXQociwiOyIpLG49PT0ibWFyZ2luIiYmYAogICAgcGFkZGluZy1sZWZ0OiBgLmNvbmNhdChvLGBweDsKICAgIHBhZGRpbmctdG9wOiBgKS5jb25jYXQoaSxgcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiBgKS5jb25jYXQobCxgcHg7CiAgICBtYXJnaW4tbGVmdDowOwogICAgbWFyZ2luLXRvcDowOwogICAgbWFyZ2luLXJpZ2h0OiBgKS5jb25jYXQocywicHggIikuY29uY2F0KHIsYDsKICAgIGApLG49PT0icGFkZGluZyImJiJwYWRkaW5nLXJpZ2h0OiAiLmNvbmNhdChzLCJweCAiKS5jb25jYXQociwiOyIpXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIiksYAogIH0KICAKICAuYCkuY29uY2F0KFl1LGAgewogICAgcmlnaHQ6IGApLmNvbmNhdChzLCJweCAiKS5jb25jYXQocixgOwogIH0KICAKICAuYCkuY29uY2F0KFh1LGAgewogICAgbWFyZ2luLXJpZ2h0OiBgKS5jb25jYXQocywicHggIikuY29uY2F0KHIsYDsKICB9CiAgCiAgLmApLmNvbmNhdChZdSwiIC4iKS5jb25jYXQoWXUsYCB7CiAgICByaWdodDogMCBgKS5jb25jYXQocixgOwogIH0KICAKICAuYCkuY29uY2F0KFh1LCIgLiIpLmNvbmNhdChYdSxgIHsKICAgIG1hcmdpbi1yaWdodDogMCBgKS5jb25jYXQocixgOwogIH0KICAKICBib2R5IHsKICAgIGApLmNvbmNhdChRNSwiOiAiKS5jb25jYXQocyxgcHg7CiAgfQpgKX0sZ0E9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub1JlbGF0aXZlLG49ZS5ub0ltcG9ydGFudCxyPWUuZ2FwTW9kZSxvPXI9PT12b2lkIDA/Im1hcmdpbiI6cixpPXAudXNlTWVtbyhmdW5jdGlvbigpe3JldHVybiBmQShvKX0sW29dKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KGhBLHtzdHlsZXM6cEEoaSwhdCxvLG4/IiI6IiFpbXBvcnRhbnQiKX0pfSxOcD0hMTtpZih0eXBlb2Ygd2luZG93PCJ1Iil0cnl7dmFyIFR1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBOcD0hMCwhMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsVHUsVHUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixUdSxUdSl9Y2F0Y2h7TnA9ITF9dmFyIFVpPU5wP3twYXNzaXZlOiExfTohMSxtQT1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lPT09IlRFWFRBUkVBIn0sQUU9ZnVuY3Rpb24oZSx0KXt2YXIgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKTtyZXR1cm4gblt0XSE9PSJoaWRkZW4iJiYhKG4ub3ZlcmZsb3dZPT09bi5vdmVyZmxvd1gmJiFtQShlKSYmblt0XT09PSJ2aXNpYmxlIil9LHZBPWZ1bmN0aW9uKGUpe3JldHVybiBBRShlLCJvdmVyZmxvd1kiKX0seUE9ZnVuY3Rpb24oZSl7cmV0dXJuIEFFKGUsIm92ZXJmbG93WCIpfSxBMD1mdW5jdGlvbihlLHQpe3ZhciBuPXQ7ZG97dHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZuIGluc3RhbmNlb2YgU2hhZG93Um9vdCYmKG49bi5ob3N0KTt2YXIgcj1NRShlLG4pO2lmKHIpe3ZhciBvPUxFKGUsbiksaT1vWzFdLGw9b1syXTtpZihpPmwpcmV0dXJuITB9bj1uLnBhcmVudE5vZGV9d2hpbGUobiYmbiE9PWRvY3VtZW50LmJvZHkpO3JldHVybiExfSx4QT1mdW5jdGlvbihlKXt2YXIgdD1lLnNjcm9sbFRvcCxuPWUuc2Nyb2xsSGVpZ2h0LHI9ZS5jbGllbnRIZWlnaHQ7cmV0dXJuW3QsbixyXX0sd0E9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY3JvbGxMZWZ0LG49ZS5zY3JvbGxXaWR0aCxyPWUuY2xpZW50V2lkdGg7cmV0dXJuW3QsbixyXX0sTUU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PSJ2Ij92QSh0KTp5QSh0KX0sTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PSJ2Ij94QSh0KTp3QSh0KX0sX0E9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PSJoIiYmdD09PSJydGwiPy0xOjF9LFNBPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9X0EoZSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXJlY3Rpb24pLGw9aSpyLHM9bi50YXJnZXQsYT10LmNvbnRhaW5zKHMpLHU9ITEsYz1sPjAsZD0wLGY9MDtkb3t2YXIgaD1MRShlLHMpLGc9aFswXSxtPWhbMV0sXz1oWzJdLHY9bS1fLWkqZzsoZ3x8dikmJk1FKGUscykmJihkKz12LGYrPWcpLHM9cy5wYXJlbnROb2RlfXdoaWxlKCFhJiZzIT09ZG9jdW1lbnQuYm9keXx8YSYmKHQuY29udGFpbnMocyl8fHQ9PT1zKSk7cmV0dXJuKGMmJihvJiZkPT09MHx8IW8mJmw+ZCl8fCFjJiYobyYmZj09PTB8fCFvJiYtbD5mKSkmJih1PSEwKSx1fSxidT1mdW5jdGlvbihlKXtyZXR1cm4iY2hhbmdlZFRvdWNoZXMiaW4gZT9bZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLGUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WV06WzAsMF19LE0wPWZ1bmN0aW9uKGUpe3JldHVybltlLmRlbHRhWCxlLmRlbHRhWV19LEwwPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiY3VycmVudCJpbiBlP2UuY3VycmVudDplfSxFQT1mdW5jdGlvbihlLHQpe3JldHVybiBlWzBdPT09dFswXSYmZVsxXT09PXRbMV19LENBPWZ1bmN0aW9uKGUpe3JldHVybmAKICAuYmxvY2staW50ZXJhY3Rpdml0eS1gLmNvbmNhdChlLGAge3BvaW50ZXItZXZlbnRzOiBub25lO30KICAuYWxsb3ctaW50ZXJhY3Rpdml0eS1gKS5jb25jYXQoZSxgIHtwb2ludGVyLWV2ZW50czogYWxsO30KYCl9LCRBPTAsVmk9W107ZnVuY3Rpb24ga0EoZSl7dmFyIHQ9cC51c2VSZWYoW10pLG49cC51c2VSZWYoWzAsMF0pLHI9cC51c2VSZWYoKSxvPXAudXNlU3RhdGUoJEErKylbMF0saT1wLnVzZVN0YXRlKGZ1bmN0aW9uKCl7cmV0dXJuIE9FKCl9KVswXSxsPXAudXNlUmVmKGUpO3AudXNlRWZmZWN0KGZ1bmN0aW9uKCl7bC5jdXJyZW50PWV9LFtlXSkscC51c2VFZmZlY3QoZnVuY3Rpb24oKXtpZihlLmluZXJ0KXtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoImJsb2NrLWludGVyYWN0aXZpdHktIi5jb25jYXQobykpO3ZhciBtPVk1KFtlLmxvY2tSZWYuY3VycmVudF0sKGUuc2hhcmRzfHxbXSkubWFwKEwwKSwhMCkuZmlsdGVyKEJvb2xlYW4pO3JldHVybiBtLmZvckVhY2goZnVuY3Rpb24oXyl7cmV0dXJuIF8uY2xhc3NMaXN0LmFkZCgiYWxsb3ctaW50ZXJhY3Rpdml0eS0iLmNvbmNhdChvKSl9KSxmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgiYmxvY2staW50ZXJhY3Rpdml0eS0iLmNvbmNhdChvKSksbS5mb3JFYWNoKGZ1bmN0aW9uKF8pe3JldHVybiBfLmNsYXNzTGlzdC5yZW1vdmUoImFsbG93LWludGVyYWN0aXZpdHktIi5jb25jYXQobykpfSl9fX0sW2UuaW5lcnQsZS5sb2NrUmVmLmN1cnJlbnQsZS5zaGFyZHNdKTt2YXIgcz1wLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKG0sXyl7aWYoInRvdWNoZXMiaW4gbSYmbS50b3VjaGVzLmxlbmd0aD09PTIpcmV0dXJuIWwuY3VycmVudC5hbGxvd1BpbmNoWm9vbTt2YXIgdj1idShtKSx5PW4uY3VycmVudCx4PSJkZWx0YVgiaW4gbT9tLmRlbHRhWDp5WzBdLXZbMF0sUz0iZGVsdGFZImluIG0/bS5kZWx0YVk6eVsxXS12WzFdLGssYj1tLnRhcmdldCxUPU1hdGguYWJzKHgpPk1hdGguYWJzKFMpPyJoIjoidiI7aWYoInRvdWNoZXMiaW4gbSYmVD09PSJoIiYmYi50eXBlPT09InJhbmdlIilyZXR1cm4hMTt2YXIgTj1BMChULGIpO2lmKCFOKXJldHVybiEwO2lmKE4/az1UOihrPVQ9PT0idiI/ImgiOiJ2IixOPUEwKFQsYikpLCFOKXJldHVybiExO2lmKCFyLmN1cnJlbnQmJiJjaGFuZ2VkVG91Y2hlcyJpbiBtJiYoeHx8UykmJihyLmN1cnJlbnQ9ayksIWspcmV0dXJuITA7dmFyIEQ9ci5jdXJyZW50fHxrO3JldHVybiBTQShELF8sbSxEPT09ImgiP3g6UywhMCl9LFtdKSxhPXAudXNlQ2FsbGJhY2soZnVuY3Rpb24obSl7dmFyIF89bTtpZighKCFWaS5sZW5ndGh8fFZpW1ZpLmxlbmd0aC0xXSE9PWkpKXt2YXIgdj0iZGVsdGFZImluIF8/TTAoXyk6YnUoXykseT10LmN1cnJlbnQuZmlsdGVyKGZ1bmN0aW9uKGspe3JldHVybiBrLm5hbWU9PT1fLnR5cGUmJmsudGFyZ2V0PT09Xy50YXJnZXQmJkVBKGsuZGVsdGEsdil9KVswXTtpZih5JiZ5LnNob3VsZCl7Xy5jYW5jZWxhYmxlJiZfLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufWlmKCF5KXt2YXIgeD0obC5jdXJyZW50LnNoYXJkc3x8W10pLm1hcChMMCkuZmlsdGVyKEJvb2xlYW4pLmZpbHRlcihmdW5jdGlvbihrKXtyZXR1cm4gay5jb250YWlucyhfLnRhcmdldCl9KSxTPXgubGVuZ3RoPjA/cyhfLHhbMF0pOiFsLmN1cnJlbnQubm9Jc29sYXRpb247UyYmXy5jYW5jZWxhYmxlJiZfLnByZXZlbnREZWZhdWx0KCl9fX0sW10pLHU9cC51c2VDYWxsYmFjayhmdW5jdGlvbihtLF8sdix5KXt2YXIgeD17bmFtZTptLGRlbHRhOl8sdGFyZ2V0OnYsc2hvdWxkOnl9O3QuY3VycmVudC5wdXNoKHgpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmN1cnJlbnQ9dC5jdXJyZW50LmZpbHRlcihmdW5jdGlvbihTKXtyZXR1cm4gUyE9PXh9KX0sMSl9LFtdKSxjPXAudXNlQ2FsbGJhY2soZnVuY3Rpb24obSl7bi5jdXJyZW50PWJ1KG0pLHIuY3VycmVudD12b2lkIDB9LFtdKSxkPXAudXNlQ2FsbGJhY2soZnVuY3Rpb24obSl7dShtLnR5cGUsTTAobSksbS50YXJnZXQscyhtLGUubG9ja1JlZi5jdXJyZW50KSl9LFtdKSxmPXAudXNlQ2FsbGJhY2soZnVuY3Rpb24obSl7dShtLnR5cGUsYnUobSksbS50YXJnZXQscyhtLGUubG9ja1JlZi5jdXJyZW50KSl9LFtdKTtwLnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiBWaS5wdXNoKGkpLGUuc2V0Q2FsbGJhY2tzKHtvblNjcm9sbENhcHR1cmU6ZCxvbldoZWVsQ2FwdHVyZTpkLG9uVG91Y2hNb3ZlQ2FwdHVyZTpmfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGEsVWkpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsYSxVaSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsYyxVaSksZnVuY3Rpb24oKXtWaT1WaS5maWx0ZXIoZnVuY3Rpb24obSl7cmV0dXJuIG0hPT1pfSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGEsVWkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsYSxVaSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsYyxVaSl9fSxbXSk7dmFyIGg9ZS5yZW1vdmVTY3JvbGxCYXIsZz1lLmluZXJ0O3JldHVybiBwLmNyZWF0ZUVsZW1lbnQocC5GcmFnbWVudCxudWxsLGc/cC5jcmVhdGVFbGVtZW50KGkse3N0eWxlczpDQShvKX0pOm51bGwsaD9wLmNyZWF0ZUVsZW1lbnQoZ0Ese2dhcE1vZGU6Im1hcmdpbiJ9KTpudWxsKX1jb25zdCBUQT1yQShQRSxrQSk7dmFyIERFPXAuZm9yd2FyZFJlZihmdW5jdGlvbihlLHQpe3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoUmQscHIoe30sZSx7cmVmOnQsc2lkZUNhcjpUQX0pKX0pO0RFLmNsYXNzTmFtZXM9UmQuY2xhc3NOYW1lcztjb25zdCBiQT1ERSxOQT1bIiAiLCJFbnRlciIsIkFycm93VXAiLCJBcnJvd0Rvd24iXSxSQT1bIiAiLCJFbnRlciJdLFBkPSJTZWxlY3QiLFtPZCxNbSxQQV09YUUoUGQpLFtlcyxHNF09a2koUGQsW1BBLEVFXSksTG09RUUoKSxbT0EsUGldPWVzKFBkKSxbQUEsTUFdPWVzKFBkKSxMQT1lPT57Y29uc3R7X19zY29wZVNlbGVjdDp0LGNoaWxkcmVuOm4sb3BlbjpyLGRlZmF1bHRPcGVuOm8sb25PcGVuQ2hhbmdlOmksdmFsdWU6bCxkZWZhdWx0VmFsdWU6cyxvblZhbHVlQ2hhbmdlOmEsZGlyOnUsbmFtZTpjLGF1dG9Db21wbGV0ZTpkLGRpc2FibGVkOmYscmVxdWlyZWQ6aH09ZSxnPUxtKHQpLFttLF9dPXAudXNlU3RhdGUobnVsbCksW3YseV09cC51c2VTdGF0ZShudWxsKSxbeCxTXT1wLnVzZVN0YXRlKCExKSxrPUlnKHUpLFtiPSExLFRdPUFsKHtwcm9wOnIsZGVmYXVsdFByb3A6byxvbkNoYW5nZTppfSksW04sRF09QWwoe3Byb3A6bCxkZWZhdWx0UHJvcDpzLG9uQ2hhbmdlOmF9KSxNPXAudXNlUmVmKG51bGwpLGo9bT8hIW0uY2xvc2VzdCgiZm9ybSIpOiEwLFtCLHJlXT1wLnVzZVN0YXRlKG5ldyBTZXQpLEg9QXJyYXkuZnJvbShCKS5tYXAoWT0+WS5wcm9wcy52YWx1ZSkuam9pbigiOyIpO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoajUsZyxwLmNyZWF0ZUVsZW1lbnQoT0Ese3JlcXVpcmVkOmgsc2NvcGU6dCx0cmlnZ2VyOm0sb25UcmlnZ2VyQ2hhbmdlOl8sdmFsdWVOb2RlOnYsb25WYWx1ZU5vZGVDaGFuZ2U6eSx2YWx1ZU5vZGVIYXNDaGlsZHJlbjp4LG9uVmFsdWVOb2RlSGFzQ2hpbGRyZW5DaGFuZ2U6Uyxjb250ZW50SWQ6VGQoKSx2YWx1ZTpOLG9uVmFsdWVDaGFuZ2U6RCxvcGVuOmIsb25PcGVuQ2hhbmdlOlQsZGlyOmssdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmOk0sZGlzYWJsZWQ6Zn0scC5jcmVhdGVFbGVtZW50KE9kLlByb3ZpZGVyLHtzY29wZTp0fSxwLmNyZWF0ZUVsZW1lbnQoQUEse3Njb3BlOmUuX19zY29wZVNlbGVjdCxvbk5hdGl2ZU9wdGlvbkFkZDpwLnVzZUNhbGxiYWNrKFk9PntyZShDPT5uZXcgU2V0KEMpLmFkZChZKSl9LFtdKSxvbk5hdGl2ZU9wdGlvblJlbW92ZTpwLnVzZUNhbGxiYWNrKFk9PntyZShDPT57Y29uc3QgJD1uZXcgU2V0KEMpO3JldHVybiAkLmRlbGV0ZShZKSwkfSl9LFtdKX0sbikpLGo/cC5jcmVhdGVFbGVtZW50KEZFLHtrZXk6SCwiYXJpYS1oaWRkZW4iOiEwLHJlcXVpcmVkOmgsdGFiSW5kZXg6LTEsbmFtZTpjLGF1dG9Db21wbGV0ZTpkLHZhbHVlOk4sb25DaGFuZ2U6WT0+RChZLnRhcmdldC52YWx1ZSksZGlzYWJsZWQ6Zn0sTj09PXZvaWQgMD9wLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse3ZhbHVlOiIifSk6bnVsbCxBcnJheS5mcm9tKEIpKTpudWxsKSl9LERBPSJTZWxlY3RUcmlnZ2VyIixJQT1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sZGlzYWJsZWQ6cj0hMSwuLi5vfT1lLGk9TG0obiksbD1QaShEQSxuKSxzPWwuZGlzYWJsZWR8fHIsYT1RZSh0LGwub25UcmlnZ2VyQ2hhbmdlKSx1PU1tKG4pLFtjLGQsZl09QkUoZz0+e2NvbnN0IG09dSgpLmZpbHRlcih5PT4heS5kaXNhYmxlZCksXz1tLmZpbmQoeT0+eS52YWx1ZT09PWwudmFsdWUpLHY9V0UobSxnLF8pO3YhPT12b2lkIDAmJmwub25WYWx1ZUNoYW5nZSh2LnZhbHVlKX0pLGg9KCk9PntzfHwobC5vbk9wZW5DaGFuZ2UoITApLGYoKSl9O3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoejUsdGUoe2FzQ2hpbGQ6ITB9LGkpLHAuY3JlYXRlRWxlbWVudChMZS5idXR0b24sdGUoe3R5cGU6ImJ1dHRvbiIscm9sZToiY29tYm9ib3giLCJhcmlhLWNvbnRyb2xzIjpsLmNvbnRlbnRJZCwiYXJpYS1leHBhbmRlZCI6bC5vcGVuLCJhcmlhLXJlcXVpcmVkIjpsLnJlcXVpcmVkLCJhcmlhLWF1dG9jb21wbGV0ZSI6Im5vbmUiLGRpcjpsLmRpciwiZGF0YS1zdGF0ZSI6bC5vcGVuPyJvcGVuIjoiY2xvc2VkIixkaXNhYmxlZDpzLCJkYXRhLWRpc2FibGVkIjpzPyIiOnZvaWQgMCwiZGF0YS1wbGFjZWhvbGRlciI6ekUobC52YWx1ZSk/IiI6dm9pZCAwfSxvLHtyZWY6YSxvbkNsaWNrOkhlKG8ub25DbGljayxnPT57Zy5jdXJyZW50VGFyZ2V0LmZvY3VzKCl9KSxvblBvaW50ZXJEb3duOkhlKG8ub25Qb2ludGVyRG93bixnPT57Y29uc3QgbT1nLnRhcmdldDttLmhhc1BvaW50ZXJDYXB0dXJlKGcucG9pbnRlcklkKSYmbS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZy5wb2ludGVySWQpLGcuYnV0dG9uPT09MCYmZy5jdHJsS2V5PT09ITEmJihoKCksbC50cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWYuY3VycmVudD17eDpNYXRoLnJvdW5kKGcucGFnZVgpLHk6TWF0aC5yb3VuZChnLnBhZ2VZKX0sZy5wcmV2ZW50RGVmYXVsdCgpKX0pLG9uS2V5RG93bjpIZShvLm9uS2V5RG93bixnPT57Y29uc3QgbT1jLmN1cnJlbnQhPT0iIjshKGcuY3RybEtleXx8Zy5hbHRLZXl8fGcubWV0YUtleSkmJmcua2V5Lmxlbmd0aD09PTEmJmQoZy5rZXkpLCEobSYmZy5rZXk9PT0iICIpJiZOQS5pbmNsdWRlcyhnLmtleSkmJihoKCksZy5wcmV2ZW50RGVmYXVsdCgpKX0pfSkpKX0pLGpBPSJTZWxlY3RWYWx1ZSIsekE9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLGNsYXNzTmFtZTpyLHN0eWxlOm8sY2hpbGRyZW46aSxwbGFjZWhvbGRlcjpsPSIiLC4uLnN9PWUsYT1QaShqQSxuKSx7b25WYWx1ZU5vZGVIYXNDaGlsZHJlbkNoYW5nZTp1fT1hLGM9aSE9PXZvaWQgMCxkPVFlKHQsYS5vblZhbHVlTm9kZUNoYW5nZSk7cmV0dXJuIGJuKCgpPT57dShjKX0sW3UsY10pLHAuY3JlYXRlRWxlbWVudChMZS5zcGFuLHRlKHt9LHMse3JlZjpkLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn19KSx6RShhLnZhbHVlKT9wLmNyZWF0ZUVsZW1lbnQocC5GcmFnbWVudCxudWxsLGwpOmkpfSksRkE9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLGNoaWxkcmVuOnIsLi4ub309ZTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KExlLnNwYW4sdGUoeyJhcmlhLWhpZGRlbiI6ITB9LG8se3JlZjp0fSkscnx8IuKWvCIpfSksQkE9ZT0+cC5jcmVhdGVFbGVtZW50KEI1LHRlKHthc0NoaWxkOiEwfSxlKSksTWw9IlNlbGVjdENvbnRlbnQiLFdBPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0IG49UGkoTWwsZS5fX3Njb3BlU2VsZWN0KSxbcixvXT1wLnVzZVN0YXRlKCk7aWYoYm4oKCk9PntvKG5ldyBEb2N1bWVudEZyYWdtZW50KX0sW10pLCFuLm9wZW4pe2NvbnN0IGk9cjtyZXR1cm4gaT8kci5jcmVhdGVQb3J0YWwocC5jcmVhdGVFbGVtZW50KElFLHtzY29wZTplLl9fc2NvcGVTZWxlY3R9LHAuY3JlYXRlRWxlbWVudChPZC5TbG90LHtzY29wZTplLl9fc2NvcGVTZWxlY3R9LHAuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLGUuY2hpbGRyZW4pKSksaSk6bnVsbH1yZXR1cm4gcC5jcmVhdGVFbGVtZW50KFVBLHRlKHt9LGUse3JlZjp0fSkpfSksRHI9MTAsW0lFLEFkXT1lcyhNbCksVUE9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLHBvc2l0aW9uOnI9Iml0ZW0tYWxpZ25lZCIsb25DbG9zZUF1dG9Gb2N1czpvLG9uRXNjYXBlS2V5RG93bjppLG9uUG9pbnRlckRvd25PdXRzaWRlOmwsc2lkZTpzLHNpZGVPZmZzZXQ6YSxhbGlnbjp1LGFsaWduT2Zmc2V0OmMsYXJyb3dQYWRkaW5nOmQsY29sbGlzaW9uQm91bmRhcnk6Zixjb2xsaXNpb25QYWRkaW5nOmgsc3RpY2t5OmcsaGlkZVdoZW5EZXRhY2hlZDptLGF2b2lkQ29sbGlzaW9uczpfLC4uLnZ9PWUseT1QaShNbCxuKSxbeCxTXT1wLnVzZVN0YXRlKG51bGwpLFtrLGJdPXAudXNlU3RhdGUobnVsbCksVD1RZSh0LFE9PlMoUSkpLFtOLERdPXAudXNlU3RhdGUobnVsbCksW00sal09cC51c2VTdGF0ZShudWxsKSxCPU1tKG4pLFtyZSxIXT1wLnVzZVN0YXRlKCExKSxZPXAudXNlUmVmKCExKTtwLnVzZUVmZmVjdCgoKT0+e2lmKHgpcmV0dXJuIEc1KHgpfSxbeF0pLElPKCk7Y29uc3QgQz1wLnVzZUNhbGxiYWNrKFE9Pntjb25zdFtOZSwuLi55ZV09QigpLm1hcChiZT0+YmUucmVmLmN1cnJlbnQpLFtTZV09eWUuc2xpY2UoLTEpLHBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Zm9yKGNvbnN0IGJlIG9mIFEpaWYoYmU9PT1wZXx8KGJlPT1udWxsfHxiZS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QifSksYmU9PT1OZSYmayYmKGsuc2Nyb2xsVG9wPTApLGJlPT09U2UmJmsmJihrLnNjcm9sbFRvcD1rLnNjcm9sbEhlaWdodCksYmU9PW51bGx8fGJlLmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXBlKSlyZXR1cm59LFtCLGtdKSwkPXAudXNlQ2FsbGJhY2soKCk9PkMoW04seF0pLFtDLE4seF0pO3AudXNlRWZmZWN0KCgpPT57cmUmJiQoKX0sW3JlLCRdKTtjb25zdHtvbk9wZW5DaGFuZ2U6RSx0cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWY6T309eTtwLnVzZUVmZmVjdCgoKT0+e2lmKHgpe2xldCBRPXt4OjAseTowfTtjb25zdCBOZT1TZT0+e3ZhciBwZSxiZSxGZSxPdDtRPXt4Ok1hdGguYWJzKE1hdGgucm91bmQoU2UucGFnZVgpLSgocGU9KGJlPU8uY3VycmVudCk9PT1udWxsfHxiZT09PXZvaWQgMD92b2lkIDA6YmUueCkhPT1udWxsJiZwZSE9PXZvaWQgMD9wZTowKSkseTpNYXRoLmFicyhNYXRoLnJvdW5kKFNlLnBhZ2VZKS0oKEZlPShPdD1PLmN1cnJlbnQpPT09bnVsbHx8T3Q9PT12b2lkIDA/dm9pZCAwOk90LnkpIT09bnVsbCYmRmUhPT12b2lkIDA/RmU6MCkpfX0seWU9U2U9PntRLng8PTEwJiZRLnk8PTEwP1NlLnByZXZlbnREZWZhdWx0KCk6eC5jb250YWlucyhTZS50YXJnZXQpfHxFKCExKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsTmUpLE8uY3VycmVudD1udWxsfTtyZXR1cm4gTy5jdXJyZW50IT09bnVsbCYmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixOZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIix5ZSx7Y2FwdHVyZTohMCxvbmNlOiEwfSkpLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLE5lKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLHllLHtjYXB0dXJlOiEwfSl9fX0sW3gsRSxPXSkscC51c2VFZmZlY3QoKCk9Pntjb25zdCBRPSgpPT5FKCExKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLFEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLFEpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLFEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLFEpfX0sW0VdKTtjb25zdFtSLEZdPUJFKFE9Pntjb25zdCBOZT1CKCkuZmlsdGVyKHBlPT4hcGUuZGlzYWJsZWQpLHllPU5lLmZpbmQocGU9PnBlLnJlZi5jdXJyZW50PT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCksU2U9V0UoTmUsUSx5ZSk7U2UmJnNldFRpbWVvdXQoKCk9PlNlLnJlZi5jdXJyZW50LmZvY3VzKCkpfSksVj1wLnVzZUNhbGxiYWNrKChRLE5lLHllKT0+e2NvbnN0IFNlPSFZLmN1cnJlbnQmJiF5ZTsoeS52YWx1ZSE9PXZvaWQgMCYmeS52YWx1ZT09PU5lfHxTZSkmJihEKFEpLFNlJiYoWS5jdXJyZW50PSEwKSl9LFt5LnZhbHVlXSksYWU9cC51c2VDYWxsYmFjaygoKT0+eD09bnVsbD92b2lkIDA6eC5mb2N1cygpLFt4XSksb2U9cC51c2VDYWxsYmFjaygoUSxOZSx5ZSk9Pntjb25zdCBTZT0hWS5jdXJyZW50JiYheWU7KHkudmFsdWUhPT12b2lkIDAmJnkudmFsdWU9PT1OZXx8U2UpJiZqKFEpfSxbeS52YWx1ZV0pLCRlPXI9PT0icG9wcGVyIj9EMDpWQSxfZT0kZT09PUQwP3tzaWRlOnMsc2lkZU9mZnNldDphLGFsaWduOnUsYWxpZ25PZmZzZXQ6YyxhcnJvd1BhZGRpbmc6ZCxjb2xsaXNpb25Cb3VuZGFyeTpmLGNvbGxpc2lvblBhZGRpbmc6aCxzdGlja3k6ZyxoaWRlV2hlbkRldGFjaGVkOm0sYXZvaWRDb2xsaXNpb25zOl99Ont9O3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoSUUse3Njb3BlOm4sY29udGVudDp4LHZpZXdwb3J0Omssb25WaWV3cG9ydENoYW5nZTpiLGl0ZW1SZWZDYWxsYmFjazpWLHNlbGVjdGVkSXRlbTpOLG9uSXRlbUxlYXZlOmFlLGl0ZW1UZXh0UmVmQ2FsbGJhY2s6b2UsZm9jdXNTZWxlY3RlZEl0ZW06JCxzZWxlY3RlZEl0ZW1UZXh0Ok0scG9zaXRpb246cixpc1Bvc2l0aW9uZWQ6cmUsc2VhcmNoUmVmOlJ9LHAuY3JlYXRlRWxlbWVudChiQSx7YXM6VGwsYWxsb3dQaW5jaFpvb206ITB9LHAuY3JlYXRlRWxlbWVudChqTyx7YXNDaGlsZDohMCx0cmFwcGVkOnkub3Blbixvbk1vdW50QXV0b0ZvY3VzOlE9PntRLnByZXZlbnREZWZhdWx0KCl9LG9uVW5tb3VudEF1dG9Gb2N1czpIZShvLFE9Pnt2YXIgTmU7KE5lPXkudHJpZ2dlcik9PT1udWxsfHxOZT09PXZvaWQgMHx8TmUuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxRLnByZXZlbnREZWZhdWx0KCl9KX0scC5jcmVhdGVFbGVtZW50KE1PLHthc0NoaWxkOiEwLGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czohMCxvbkVzY2FwZUtleURvd246aSxvblBvaW50ZXJEb3duT3V0c2lkZTpsLG9uRm9jdXNPdXRzaWRlOlE9PlEucHJldmVudERlZmF1bHQoKSxvbkRpc21pc3M6KCk9Pnkub25PcGVuQ2hhbmdlKCExKX0scC5jcmVhdGVFbGVtZW50KCRlLHRlKHtyb2xlOiJsaXN0Ym94IixpZDp5LmNvbnRlbnRJZCwiZGF0YS1zdGF0ZSI6eS5vcGVuPyJvcGVuIjoiY2xvc2VkIixkaXI6eS5kaXIsb25Db250ZXh0TWVudTpRPT5RLnByZXZlbnREZWZhdWx0KCl9LHYsX2Use29uUGxhY2VkOigpPT5IKCEwKSxyZWY6VCxzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixvdXRsaW5lOiJub25lIiwuLi52LnN0eWxlfSxvbktleURvd246SGUodi5vbktleURvd24sUT0+e2NvbnN0IE5lPVEuY3RybEtleXx8US5hbHRLZXl8fFEubWV0YUtleTtpZihRLmtleT09PSJUYWIiJiZRLnByZXZlbnREZWZhdWx0KCksIU5lJiZRLmtleS5sZW5ndGg9PT0xJiZGKFEua2V5KSxbIkFycm93VXAiLCJBcnJvd0Rvd24iLCJIb21lIiwiRW5kIl0uaW5jbHVkZXMoUS5rZXkpKXtsZXQgU2U9QigpLmZpbHRlcihwZT0+IXBlLmRpc2FibGVkKS5tYXAocGU9PnBlLnJlZi5jdXJyZW50KTtpZihbIkFycm93VXAiLCJFbmQiXS5pbmNsdWRlcyhRLmtleSkmJihTZT1TZS5zbGljZSgpLnJldmVyc2UoKSksWyJBcnJvd1VwIiwiQXJyb3dEb3duIl0uaW5jbHVkZXMoUS5rZXkpKXtjb25zdCBwZT1RLnRhcmdldCxiZT1TZS5pbmRleE9mKHBlKTtTZT1TZS5zbGljZShiZSsxKX1zZXRUaW1lb3V0KCgpPT5DKFNlKSksUS5wcmV2ZW50RGVmYXVsdCgpfX0pfSkpKSkpKX0pLFZBPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bixvblBsYWNlZDpyLC4uLm99PWUsaT1QaShNbCxuKSxsPUFkKE1sLG4pLFtzLGFdPXAudXNlU3RhdGUobnVsbCksW3UsY109cC51c2VTdGF0ZShudWxsKSxkPVFlKHQsVD0+YyhUKSksZj1NbShuKSxoPXAudXNlUmVmKCExKSxnPXAudXNlUmVmKCEwKSx7dmlld3BvcnQ6bSxzZWxlY3RlZEl0ZW06XyxzZWxlY3RlZEl0ZW1UZXh0OnYsZm9jdXNTZWxlY3RlZEl0ZW06eX09bCx4PXAudXNlQ2FsbGJhY2soKCk9PntpZihpLnRyaWdnZXImJmkudmFsdWVOb2RlJiZzJiZ1JiZtJiZfJiZ2KXtjb25zdCBUPWkudHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxOPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRD1pLnZhbHVlTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxNPXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoaS5kaXIhPT0icnRsIil7Y29uc3QgcGU9TS5sZWZ0LU4ubGVmdCxiZT1ELmxlZnQtcGUsRmU9VC5sZWZ0LWJlLE90PVQud2lkdGgrRmUsY249TWF0aC5tYXgoT3QsTi53aWR0aCksS249d2luZG93LmlubmVyV2lkdGgtRHIsUmU9amgoYmUsW0RyLEtuLWNuXSk7cy5zdHlsZS5taW5XaWR0aD1PdCsicHgiLHMuc3R5bGUubGVmdD1SZSsicHgifWVsc2V7Y29uc3QgcGU9Ti5yaWdodC1NLnJpZ2h0LGJlPXdpbmRvdy5pbm5lcldpZHRoLUQucmlnaHQtcGUsRmU9d2luZG93LmlubmVyV2lkdGgtVC5yaWdodC1iZSxPdD1ULndpZHRoK0ZlLGNuPU1hdGgubWF4KE90LE4ud2lkdGgpLEtuPXdpbmRvdy5pbm5lcldpZHRoLURyLFJlPWpoKGJlLFtEcixLbi1jbl0pO3Muc3R5bGUubWluV2lkdGg9T3QrInB4IixzLnN0eWxlLnJpZ2h0PVJlKyJweCJ9Y29uc3Qgaj1mKCksQj13aW5kb3cuaW5uZXJIZWlnaHQtRHIqMixyZT1tLnNjcm9sbEhlaWdodCxIPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHUpLFk9cGFyc2VJbnQoSC5ib3JkZXJUb3BXaWR0aCwxMCksQz1wYXJzZUludChILnBhZGRpbmdUb3AsMTApLCQ9cGFyc2VJbnQoSC5ib3JkZXJCb3R0b21XaWR0aCwxMCksRT1wYXJzZUludChILnBhZGRpbmdCb3R0b20sMTApLE89WStDK3JlK0UrJCxSPU1hdGgubWluKF8ub2Zmc2V0SGVpZ2h0KjUsTyksRj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShtKSxWPXBhcnNlSW50KEYucGFkZGluZ1RvcCwxMCksYWU9cGFyc2VJbnQoRi5wYWRkaW5nQm90dG9tLDEwKSxvZT1ULnRvcCtULmhlaWdodC8yLURyLCRlPUItb2UsX2U9Xy5vZmZzZXRIZWlnaHQvMixRPV8ub2Zmc2V0VG9wK19lLE5lPVkrQytRLHllPU8tTmU7aWYoTmU8PW9lKXtjb25zdCBwZT1fPT09altqLmxlbmd0aC0xXS5yZWYuY3VycmVudDtzLnN0eWxlLmJvdHRvbT0iMHB4Ijtjb25zdCBiZT11LmNsaWVudEhlaWdodC1tLm9mZnNldFRvcC1tLm9mZnNldEhlaWdodCxGZT1NYXRoLm1heCgkZSxfZSsocGU/YWU6MCkrYmUrJCksT3Q9TmUrRmU7cy5zdHlsZS5oZWlnaHQ9T3QrInB4In1lbHNle2NvbnN0IHBlPV89PT1qWzBdLnJlZi5jdXJyZW50O3Muc3R5bGUudG9wPSIwcHgiO2NvbnN0IEZlPU1hdGgubWF4KG9lLFkrbS5vZmZzZXRUb3ArKHBlP1Y6MCkrX2UpK3llO3Muc3R5bGUuaGVpZ2h0PUZlKyJweCIsbS5zY3JvbGxUb3A9TmUtb2UrbS5vZmZzZXRUb3B9cy5zdHlsZS5tYXJnaW49YCR7RHJ9cHggMGAscy5zdHlsZS5taW5IZWlnaHQ9UisicHgiLHMuc3R5bGUubWF4SGVpZ2h0PUIrInB4IixyPT1udWxsfHxyKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5oLmN1cnJlbnQ9ITApfX0sW2YsaS50cmlnZ2VyLGkudmFsdWVOb2RlLHMsdSxtLF8sdixpLmRpcixyXSk7Ym4oKCk9PngoKSxbeF0pO2NvbnN0W1Msa109cC51c2VTdGF0ZSgpO2JuKCgpPT57dSYmayh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh1KS56SW5kZXgpfSxbdV0pO2NvbnN0IGI9cC51c2VDYWxsYmFjayhUPT57VCYmZy5jdXJyZW50PT09ITAmJih4KCkseT09bnVsbHx8eSgpLGcuY3VycmVudD0hMSl9LFt4LHldKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KEhBLHtzY29wZTpuLGNvbnRlbnRXcmFwcGVyOnMsc2hvdWxkRXhwYW5kT25TY3JvbGxSZWY6aCxvblNjcm9sbEJ1dHRvbkNoYW5nZTpifSxwLmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjphLHN0eWxlOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLHBvc2l0aW9uOiJmaXhlZCIsekluZGV4OlN9fSxwLmNyZWF0ZUVsZW1lbnQoTGUuZGl2LHRlKHt9LG8se3JlZjpkLHN0eWxlOntib3hTaXppbmc6ImJvcmRlci1ib3giLG1heEhlaWdodDoiMTAwJSIsLi4uby5zdHlsZX19KSkpKX0pLEQwPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bixhbGlnbjpyPSJzdGFydCIsY29sbGlzaW9uUGFkZGluZzpvPURyLC4uLml9PWUsbD1MbShuKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KEY1LHRlKHt9LGwsaSx7cmVmOnQsYWxpZ246cixjb2xsaXNpb25QYWRkaW5nOm8sc3R5bGU6e2JveFNpemluZzoiYm9yZGVyLWJveCIsLi4uaS5zdHlsZSwiLS1yYWRpeC1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luIjoidmFyKC0tcmFkaXgtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4pIiwiLS1yYWRpeC1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtd2lkdGgiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLXdpZHRoKSIsIi0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCI6InZhcigtLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtaGVpZ2h0KSIsIi0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGgiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLXdpZHRoKSIsIi0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0IjoidmFyKC0tcmFkaXgtcG9wcGVyLWFuY2hvci1oZWlnaHQpIn19KSl9KSxbSEEsS0FdPWVzKE1sLHt9KSxJMD0iU2VsZWN0Vmlld3BvcnQiLEdBPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6biwuLi5yfT1lLG89QWQoSTAsbiksaT1LQShJMCxuKSxsPVFlKHQsby5vblZpZXdwb3J0Q2hhbmdlKSxzPXAudXNlUmVmKDApO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQocC5GcmFnbWVudCxudWxsLHAuY3JlYXRlRWxlbWVudCgic3R5bGUiLHtkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOiJbZGF0YS1yYWRpeC1zZWxlY3Qtdmlld3BvcnRde3Njcm9sbGJhci13aWR0aDpub25lOy1tcy1vdmVyZmxvdy1zdHlsZTpub25lOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO31bZGF0YS1yYWRpeC1zZWxlY3Qtdmlld3BvcnRdOjotd2Via2l0LXNjcm9sbGJhcntkaXNwbGF5Om5vbmV9In19KSxwLmNyZWF0ZUVsZW1lbnQoT2QuU2xvdCx7c2NvcGU6bn0scC5jcmVhdGVFbGVtZW50KExlLmRpdix0ZSh7ImRhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0IjoiIixyb2xlOiJwcmVzZW50YXRpb24ifSxyLHtyZWY6bCxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsb3ZlcmZsb3c6ImF1dG8iLC4uLnIuc3R5bGV9LG9uU2Nyb2xsOkhlKHIub25TY3JvbGwsYT0+e2NvbnN0IHU9YS5jdXJyZW50VGFyZ2V0LHtjb250ZW50V3JhcHBlcjpjLHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmOmR9PWk7aWYoZCE9bnVsbCYmZC5jdXJyZW50JiZjKXtjb25zdCBmPU1hdGguYWJzKHMuY3VycmVudC11LnNjcm9sbFRvcCk7aWYoZj4wKXtjb25zdCBoPXdpbmRvdy5pbm5lckhlaWdodC1EcioyLGc9cGFyc2VGbG9hdChjLnN0eWxlLm1pbkhlaWdodCksbT1wYXJzZUZsb2F0KGMuc3R5bGUuaGVpZ2h0KSxfPU1hdGgubWF4KGcsbSk7aWYoXzxoKXtjb25zdCB2PV8rZix5PU1hdGgubWluKGgsdikseD12LXk7Yy5zdHlsZS5oZWlnaHQ9eSsicHgiLGMuc3R5bGUuYm90dG9tPT09IjBweCImJih1LnNjcm9sbFRvcD14PjA/eDowLGMuc3R5bGUuanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIil9fX1zLmN1cnJlbnQ9dS5zY3JvbGxUb3B9KX0pKSkpfSksWUE9IlNlbGVjdEdyb3VwIixbWTQsWEFdPWVzKFlBKSxRQT0iU2VsZWN0TGFiZWwiLEpBPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6biwuLi5yfT1lLG89WEEoUUEsbik7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChMZS5kaXYsdGUoe2lkOm8uaWR9LHIse3JlZjp0fSkpfSksUnA9IlNlbGVjdEl0ZW0iLFtaQSxqRV09ZXMoUnApLHFBPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bix2YWx1ZTpyLGRpc2FibGVkOm89ITEsdGV4dFZhbHVlOmksLi4ubH09ZSxzPVBpKFJwLG4pLGE9QWQoUnAsbiksdT1zLnZhbHVlPT09cixbYyxkXT1wLnVzZVN0YXRlKGk/PyIiKSxbZixoXT1wLnVzZVN0YXRlKCExKSxnPVFlKHQsdj0+e3ZhciB5O3JldHVybih5PWEuaXRlbVJlZkNhbGxiYWNrKT09PW51bGx8fHk9PT12b2lkIDA/dm9pZCAwOnkuY2FsbChhLHYscixvKX0pLG09VGQoKSxfPSgpPT57b3x8KHMub25WYWx1ZUNoYW5nZShyKSxzLm9uT3BlbkNoYW5nZSghMSkpfTtpZihyPT09IiIpdGhyb3cgbmV3IEVycm9yKCJBIDxTZWxlY3QuSXRlbSAvPiBtdXN0IGhhdmUgYSB2YWx1ZSBwcm9wIHRoYXQgaXMgbm90IGFuIGVtcHR5IHN0cmluZy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBTZWxlY3QgdmFsdWUgY2FuIGJlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIHNlbGVjdGlvbiBhbmQgc2hvdyB0aGUgcGxhY2Vob2xkZXIuIik7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChaQSx7c2NvcGU6bix2YWx1ZTpyLGRpc2FibGVkOm8sdGV4dElkOm0saXNTZWxlY3RlZDp1LG9uSXRlbVRleHRDaGFuZ2U6cC51c2VDYWxsYmFjayh2PT57ZCh5PT57dmFyIHg7cmV0dXJuIHl8fCgoeD12PT1udWxsP3ZvaWQgMDp2LnRleHRDb250ZW50KSE9PW51bGwmJnghPT12b2lkIDA/eDoiIikudHJpbSgpfSl9LFtdKX0scC5jcmVhdGVFbGVtZW50KE9kLkl0ZW1TbG90LHtzY29wZTpuLHZhbHVlOnIsZGlzYWJsZWQ6byx0ZXh0VmFsdWU6Y30scC5jcmVhdGVFbGVtZW50KExlLmRpdix0ZSh7cm9sZToib3B0aW9uIiwiYXJpYS1sYWJlbGxlZGJ5IjptLCJkYXRhLWhpZ2hsaWdodGVkIjpmPyIiOnZvaWQgMCwiYXJpYS1zZWxlY3RlZCI6dSYmZiwiZGF0YS1zdGF0ZSI6dT8iY2hlY2tlZCI6InVuY2hlY2tlZCIsImFyaWEtZGlzYWJsZWQiOm98fHZvaWQgMCwiZGF0YS1kaXNhYmxlZCI6bz8iIjp2b2lkIDAsdGFiSW5kZXg6bz92b2lkIDA6LTF9LGwse3JlZjpnLG9uRm9jdXM6SGUobC5vbkZvY3VzLCgpPT5oKCEwKSksb25CbHVyOkhlKGwub25CbHVyLCgpPT5oKCExKSksb25Qb2ludGVyVXA6SGUobC5vblBvaW50ZXJVcCxfKSxvblBvaW50ZXJNb3ZlOkhlKGwub25Qb2ludGVyTW92ZSx2PT57aWYobyl7dmFyIHk7KHk9YS5vbkl0ZW1MZWF2ZSk9PT1udWxsfHx5PT09dm9pZCAwfHx5LmNhbGwoYSl9ZWxzZSB2LmN1cnJlbnRUYXJnZXQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX0pLG9uUG9pbnRlckxlYXZlOkhlKGwub25Qb2ludGVyTGVhdmUsdj0+e2lmKHYuY3VycmVudFRhcmdldD09PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpe3ZhciB5Oyh5PWEub25JdGVtTGVhdmUpPT09bnVsbHx8eT09PXZvaWQgMHx8eS5jYWxsKGEpfX0pLG9uS2V5RG93bjpIZShsLm9uS2V5RG93bix2PT57dmFyIHk7KCh5PWEuc2VhcmNoUmVmKT09PW51bGx8fHk9PT12b2lkIDA/dm9pZCAwOnkuY3VycmVudCkhPT0iIiYmdi5rZXk9PT0iICJ8fChSQS5pbmNsdWRlcyh2LmtleSkmJl8oKSx2LmtleT09PSIgIiYmdi5wcmV2ZW50RGVmYXVsdCgpKX0pfSkpKSl9KSxOdT0iU2VsZWN0SXRlbVRleHQiLGUzPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bixjbGFzc05hbWU6cixzdHlsZTpvLC4uLml9PWUsbD1QaShOdSxuKSxzPUFkKE51LG4pLGE9akUoTnUsbiksdT1NQShOdSxuKSxbYyxkXT1wLnVzZVN0YXRlKG51bGwpLGY9UWUodCx2PT5kKHYpLGEub25JdGVtVGV4dENoYW5nZSx2PT57dmFyIHk7cmV0dXJuKHk9cy5pdGVtVGV4dFJlZkNhbGxiYWNrKT09PW51bGx8fHk9PT12b2lkIDA/dm9pZCAwOnkuY2FsbChzLHYsYS52YWx1ZSxhLmRpc2FibGVkKX0pLGg9Yz09bnVsbD92b2lkIDA6Yy50ZXh0Q29udGVudCxnPXAudXNlTWVtbygoKT0+cC5jcmVhdGVFbGVtZW50KCJvcHRpb24iLHtrZXk6YS52YWx1ZSx2YWx1ZTphLnZhbHVlLGRpc2FibGVkOmEuZGlzYWJsZWR9LGgpLFthLmRpc2FibGVkLGEudmFsdWUsaF0pLHtvbk5hdGl2ZU9wdGlvbkFkZDptLG9uTmF0aXZlT3B0aW9uUmVtb3ZlOl99PXU7cmV0dXJuIGJuKCgpPT4obShnKSwoKT0+XyhnKSksW20sXyxnXSkscC5jcmVhdGVFbGVtZW50KHAuRnJhZ21lbnQsbnVsbCxwLmNyZWF0ZUVsZW1lbnQoTGUuc3Bhbix0ZSh7aWQ6YS50ZXh0SWR9LGkse3JlZjpmfSkpLGEuaXNTZWxlY3RlZCYmbC52YWx1ZU5vZGUmJiFsLnZhbHVlTm9kZUhhc0NoaWxkcmVuPyRyLmNyZWF0ZVBvcnRhbChpLmNoaWxkcmVuLGwudmFsdWVOb2RlKTpudWxsKX0pLHQzPSJTZWxlY3RJdGVtSW5kaWNhdG9yIixuMz1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sLi4ucn09ZTtyZXR1cm4gakUodDMsbikuaXNTZWxlY3RlZD9wLmNyZWF0ZUVsZW1lbnQoTGUuc3Bhbix0ZSh7ImFyaWEtaGlkZGVuIjohMH0scix7cmVmOnR9KSk6bnVsbH0pLHIzPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6biwuLi5yfT1lO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoTGUuZGl2LHRlKHsiYXJpYS1oaWRkZW4iOiEwfSxyLHtyZWY6dH0pKX0pO2Z1bmN0aW9uIHpFKGUpe3JldHVybiBlPT09IiJ8fGU9PT12b2lkIDB9Y29uc3QgRkU9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7dmFsdWU6biwuLi5yfT1lLG89cC51c2VSZWYobnVsbCksaT1RZSh0LG8pLGw9VEUobik7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3Qgcz1vLmN1cnJlbnQsYT13aW5kb3cuSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLGM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLCJ2YWx1ZSIpLnNldDtpZihsIT09biYmYyl7Y29uc3QgZD1uZXcgRXZlbnQoImNoYW5nZSIse2J1YmJsZXM6ITB9KTtjLmNhbGwocyxuKSxzLmRpc3BhdGNoRXZlbnQoZCl9fSxbbCxuXSkscC5jcmVhdGVFbGVtZW50KFU1LHthc0NoaWxkOiEwfSxwLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIsdGUoe30scix7cmVmOmksZGVmYXVsdFZhbHVlOm59KSkpfSk7RkUuZGlzcGxheU5hbWU9IkJ1YmJsZVNlbGVjdCI7ZnVuY3Rpb24gQkUoZSl7Y29uc3QgdD1VdChlKSxuPXAudXNlUmVmKCIiKSxyPXAudXNlUmVmKDApLG89cC51c2VDYWxsYmFjayhsPT57Y29uc3Qgcz1uLmN1cnJlbnQrbDt0KHMpLGZ1bmN0aW9uIGEodSl7bi5jdXJyZW50PXUsd2luZG93LmNsZWFyVGltZW91dChyLmN1cnJlbnQpLHUhPT0iIiYmKHIuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+YSgiIiksMWUzKSl9KHMpfSxbdF0pLGk9cC51c2VDYWxsYmFjaygoKT0+e24uY3VycmVudD0iIix3aW5kb3cuY2xlYXJUaW1lb3V0KHIuY3VycmVudCl9LFtdKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PigpPT53aW5kb3cuY2xlYXJUaW1lb3V0KHIuY3VycmVudCksW10pLFtuLG8saV19ZnVuY3Rpb24gV0UoZSx0LG4pe2NvbnN0IG89dC5sZW5ndGg+MSYmQXJyYXkuZnJvbSh0KS5ldmVyeSh1PT51PT09dFswXSk/dFswXTp0LGk9bj9lLmluZGV4T2Yobik6LTE7bGV0IGw9bzMoZSxNYXRoLm1heChpLDApKTtvLmxlbmd0aD09PTEmJihsPWwuZmlsdGVyKHU9PnUhPT1uKSk7Y29uc3QgYT1sLmZpbmQodT0+dS50ZXh0VmFsdWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG8udG9Mb3dlckNhc2UoKSkpO3JldHVybiBhIT09bj9hOnZvaWQgMH1mdW5jdGlvbiBvMyhlLHQpe3JldHVybiBlLm1hcCgobixyKT0+ZVsodCtyKSVlLmxlbmd0aF0pfWNvbnN0IGkzPUxBLFVFPUlBLGwzPXpBLHMzPUZBLGEzPUJBLFZFPVdBLHUzPUdBLEhFPUpBLEtFPXFBLGMzPWUzLGQzPW4zLEdFPXIzLGYzPWkzLGgzPWwzLFlFPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGNoaWxkcmVuOnQsLi4ubn0scik9PncuanN4cyhVRSx7cmVmOnIsY2xhc3NOYW1lOnN0KCJmbGV4IGgtMTAgdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcHgtMyBweS0yIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXJpbmcgZm9jdXM6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCIsZSksLi4ubixjaGlsZHJlbjpbdCx3LmpzeChzMyx7YXNDaGlsZDohMCxjaGlsZHJlbjp3LmpzeChzRSx7Y2xhc3NOYW1lOiJ3LTQgaC00IG9wYWNpdHktNTAifSl9KV19KSk7WUUuZGlzcGxheU5hbWU9VUUuZGlzcGxheU5hbWU7Y29uc3QgWEU9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsY2hpbGRyZW46dCxwb3NpdGlvbjpuPSJwb3BwZXIiLC4uLnJ9LG8pPT53LmpzeChhMyx7Y2hpbGRyZW46dy5qc3goVkUse3JlZjpvLGNsYXNzTmFtZTpzdCgicmVsYXRpdmUgei01MCBtaW4tdy1bOHJlbV0gb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgc2hhZG93LW1kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiIsbj09PSJwb3BwZXIiJiYiZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMSIsZSkscG9zaXRpb246biwuLi5yLGNoaWxkcmVuOncuanN4KHUzLHtjbGFzc05hbWU6c3QoInAtMSIsbj09PSJwb3BwZXIiJiYiaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIiksY2hpbGRyZW46dH0pfSl9KSk7WEUuZGlzcGxheU5hbWU9VkUuZGlzcGxheU5hbWU7Y29uc3QgcDM9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsLi4udH0sbik9PncuanN4KEhFLHtyZWY6bixjbGFzc05hbWU6c3QoInB5LTEuNSBwbC04IHByLTIgdGV4dC1zbSBmb250LXNlbWlib2xkIixlKSwuLi50fSkpO3AzLmRpc3BsYXlOYW1lPUhFLmRpc3BsYXlOYW1lO2NvbnN0IFFFPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGNoaWxkcmVuOnQsLi4ubn0scik9PncuanN4cyhLRSx7cmVmOnIsY2xhc3NOYW1lOnN0KCJyZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItZGVmYXVsdCBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbSBweS0xLjUgcGwtOCBwci0yIHRleHQtc20gb3V0bGluZS1ub25lIGZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhdGEtW2Rpc2FibGVkXTpwb2ludGVyLWV2ZW50cy1ub25lIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwIixlKSwuLi5uLGNoaWxkcmVuOlt3LmpzeCgic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgbGVmdC0yIGZsZXggaC0zLjUgdy0zLjUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjp3LmpzeChkMyx7Y2hpbGRyZW46dy5qc3gocE8se2NsYXNzTmFtZToidy00IGgtNCJ9KX0pfSksdy5qc3goYzMse2NoaWxkcmVuOnR9KV19KSk7UUUuZGlzcGxheU5hbWU9S0UuZGlzcGxheU5hbWU7Y29uc3QgZzM9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsLi4udH0sbik9PncuanN4KEdFLHtyZWY6bixjbGFzc05hbWU6c3QoIi1teC0xIG15LTEgaC1weCBiZy1tdXRlZCIsZSksLi4udH0pKTtnMy5kaXNwbGF5TmFtZT1HRS5kaXNwbGF5TmFtZTtmdW5jdGlvbiBKRSh7cGF0aDplLGRpc2FibGVkOnQsc291cmNlOm4sc2NoZW1hOnIscmVnaXN0ZXJQYXRjaENhbGxiYWNrOm8sb25TdWJtaXQ6aX0pe3JldHVybih0eXBlb2Ygbj09InN0cmluZyJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0ic3RyaW5nIj93LmpzeCh3Myx7ZGVmYXVsdFZhbHVlOm4sZGlzYWJsZWQ6dCxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6byxvblN1Ym1pdDppfSk6KHR5cGVvZiBuPT0ibnVtYmVyInx8bj09PW51bGwpJiYocj09bnVsbD92b2lkIDA6ci50eXBlKT09PSJudW1iZXIiP3cuanN4KHgzLHtkZWZhdWx0VmFsdWU6bixkaXNhYmxlZDp0LHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazpvLG9uU3VibWl0Oml9KToodHlwZW9mIG49PSJudW1iZXIifHx0eXBlb2Ygbj09InN0cmluZyJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0ia2V5T2YiP3cuanN4KHkzLHtkZWZhdWx0VmFsdWU6bixkaXNhYmxlZDp0LHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazpvLG9uU3VibWl0Omksc2VsZWN0b3I6ci5zZWxlY3Rvcn0pOih0eXBlb2Ygbj09Im9iamVjdCJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0icmljaHRleHQiP3cuanN4KHYzLHtyZWdpc3RlclBhdGNoQ2FsbGJhY2s6byxvblN1Ym1pdDppLGRlZmF1bHRWYWx1ZTpufSk6KHR5cGVvZiBuPT0ib2JqZWN0Inx8bj09PW51bGwpJiYocj09bnVsbD92b2lkIDA6ci50eXBlKT09PSJpbWFnZSI/dy5qc3gobTMse3BhdGg6ZSxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6byxvblN1Ym1pdDppLGRlZmF1bHRWYWx1ZTpufSk6dy5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbIlVuc3VwcG9ydGVkIHNjaGVtYTogIixyLnR5cGVdfSl9ZnVuY3Rpb24gajAoZSx0LG4scil7aWYoIXR8fCFyKXJldHVybltdO2NvbnN0IG89ci5zaGEyNTYuc2xpY2UoMCw1KSxpPWZ1bmN0aW9uKCl7Y29uc3QgbD1VZyh0KT8/InVua25vd24iLHM9VmcobCk7cmV0dXJuIG4/YC9wdWJsaWMvJHtuLnNwbGl0KCIuIikuc2xpY2UoMCwtMSkuam9pbigiLiIpfHxufV8ke299LiR7c31gOmAvcHVibGljLyR7ci5zaGEyNTZ9LiR7c31gfSgpO3JldHVyblt7dmFsdWU6e1t2bl06aSxbSHRdOiJmaWxlIixtZXRhZGF0YTpyfSxvcDoicmVwbGFjZSIscGF0aDplfSx7dmFsdWU6dCxvcDoiZmlsZSIscGF0aDplLGZpbGVQYXRoOml9XX1mdW5jdGlvbiBtMyh7cGF0aDplLGRlZmF1bHRWYWx1ZTp0LG9uU3VibWl0Om4scmVnaXN0ZXJQYXRjaENhbGxiYWNrOnJ9KXtjb25zdFtvLGldPXAudXNlU3RhdGUobnVsbCksW2wsc109cC51c2VTdGF0ZSghMSksW2EsdV09cC51c2VTdGF0ZSgpLFtjLGRdPXAudXNlU3RhdGUoKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntkKHQmJkt0LmNvbnZlcnRGaWxlU291cmNlKHQpLnVybCl9LFt0XSkscC51c2VFZmZlY3QoKCk9PntyJiZyKGFzeW5jIGY9PmowKGYsKG89PW51bGw/dm9pZCAwOm8uc3JjKT8/bnVsbCwobz09bnVsbD92b2lkIDA6by5maWxlbmFtZSk/P251bGwsYSkpfSxbbyx0XSksdy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im1heC13LTR4bCBwLTQiLGNoaWxkcmVuOlt3LmpzeHMoImxhYmVsIix7aHRtbEZvcjpgaW1nX2lucHV0OiR7ZX1gLGNsYXNzTmFtZToiIixjaGlsZHJlbjpbb3x8Yz93LmpzeCgiaW1nIix7c3JjOihvPT1udWxsP3ZvaWQgMDpvLnNyYyl8fGN9KTp3LmpzeCgiZGl2Iix7Y2hpbGRyZW46IkVtcHR5In0pLHcuanN4KCJpbnB1dCIse2lkOmBpbWdfaW5wdXQ6JHtlfWAsdHlwZToiZmlsZSIsaGlkZGVuOiEwLG9uQ2hhbmdlOmY9PntuRShmKS50aGVuKGg9PntpKHtzcmM6aC5zcmMsZmlsZW5hbWU6aC5maWxlbmFtZX0pLGgud2lkdGgmJmguaGVpZ2h0P3Uoe3NoYTI1NjpoLnNoYTI1Nix3aWR0aDpoLndpZHRoLGhlaWdodDpoLmhlaWdodH0pOnUodm9pZCAwKX0pLmNhdGNoKGg9Pntjb25zb2xlLmVycm9yKGgubWVzc2FnZSksaShudWxsKSx1KHZvaWQgMCl9KX19KV19KSxuJiZ3LmpzeCgiZGl2Iix7Y2hpbGRyZW46byYmdy5qc3goSmwse2Rpc2FibGVkOmwsb25DbGljazooKT0+e3MoITApLG4oZj0+UHJvbWlzZS5yZXNvbHZlKGowKGYsby5zcmMsby5maWxlbmFtZT8/bnVsbCxhKSkpLmZpbmFsbHkoKCk9PntzKCExKSxpKG51bGwpLHUodm9pZCAwKX0pfSxjaGlsZHJlbjpsPyJTYXZpbmcuLi4iOiJTdWJtaXQifSl9KV19LGUpfWFzeW5jIGZ1bmN0aW9uIHowKGUsdCl7Y29uc3R7dGVtcGxhdGVTdHJpbmdzOm4sZXhwcnM6cixmaWxlczpvfT10P2F3YWl0IFVOKHQuZ2V0RWRpdG9yU3RhdGUoKS50b0pTT04oKS5yb290KTp7W0h0XToicmljaHRleHQiLHRlbXBsYXRlU3RyaW5nczpbIiJdLGV4cHJzOltdLGZpbGVzOnt9fTtyZXR1cm5be29wOiJyZXBsYWNlIixwYXRoOmUsdmFsdWU6e3RlbXBsYXRlU3RyaW5nczpuLGV4cHJzOnIsW0h0XToicmljaHRleHQifX0sLi4uT2JqZWN0LmVudHJpZXMobykubWFwKChbaSxsXSk9Pih7b3A6ImZpbGUiLHBhdGg6ZSxmaWxlUGF0aDppLHZhbHVlOmx9KSldfWZ1bmN0aW9uIHYzKHtkZWZhdWx0VmFsdWU6ZSxvblN1Ym1pdDp0LHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazpufSl7Y29uc3RbcixvXT1wLnVzZVN0YXRlKG51bGwpLFtpLGxdPXAudXNlU3RhdGUoITEpLFtzLGFdPXAudXNlU3RhdGUoITEpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e3ImJihsKCExKSxyLnJlZ2lzdGVyVGV4dENvbnRlbnRMaXN0ZW5lcigoKT0+e2woITApfSksci5yZWdpc3RlckRlY29yYXRvckxpc3RlbmVyKCgpPT57bCghMCl9KSl9LFtyXSkscC51c2VFZmZlY3QoKCk9PntyJiZuJiZuKHU9PnowKHUscikpfSxbcl0pLHcuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgYm9yZGVyIHJvdW5kZWQgYm9yZGVyLWNhcmQiLGNoaWxkcmVuOlt3LmpzeChkTyx7b25FZGl0b3I6dT0+e28odSl9LHJpY2h0ZXh0OmV8fHtjaGlsZHJlbjpbXSxbSHRdOiJyb290In19KSx0JiZ3LmpzeCgiZGl2Iix7Y2hpbGRyZW46aSYmdy5qc3goSmwse2Rpc2FibGVkOnN8fCFyLG9uQ2xpY2s6KCk9PntyJiYoYSghMCksdCh1PT56MCh1LHIpKS5maW5hbGx5KCgpPT57YSghMSksbCghMSl9KSl9LGNoaWxkcmVuOnM/IlNhdmluZy4uLiI6IlN1Ym1pdCJ9KX0pXX0pfWZ1bmN0aW9uIHkzKHtkaXNhYmxlZDplLGRlZmF1bHRWYWx1ZTp0LHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazpuLG9uU3VibWl0OnIsc2VsZWN0b3I6b30pe2NvbnN0IGk9Qk0obykscz0oaD0+QXJyYXkuaXNBcnJheShoLm1vZHVsZVNvdXJjZSk/e3R5cGU6Im51bWJlciIsdmFsdWVzOk9iamVjdC5rZXlzKGgubW9kdWxlU291cmNlKS5tYXAoZz0+cGFyc2VJbnQoZykpfTp7dHlwZToic3RyaW5nIix2YWx1ZXM6T2JqZWN0LmtleXMoaC5tb2R1bGVTb3VyY2U/P1siRVJST1IgZmV0Y2hpbmcgc291cmNlIl0pfSkoaSksW2EsdV09cC51c2VTdGF0ZSh0Pz9zLnZhbHVlc1swXSksW2MsZF09cC51c2VTdGF0ZSghMSk7cC51c2VFZmZlY3QoKCk9PntkKGUpfSxbZV0pO2NvbnN0IGY9aD0+e2lmKHMudHlwZT09PSJudW1iZXIiKXtpZihoPT09IiIpdGhyb3cgbmV3IEVycm9yKCJWYWx1ZSBjYW5ub3QgYmUgZW1wdHkiKTtpZihOdW1iZXIuaXNOYU4oTnVtYmVyKGgpKSl0aHJvdyBuZXcgRXJyb3IoIlZhbHVlIHdhcyBub3QgYSBudW1iZXI6ICIrSlNPTi5zdHJpbmdpZnkoaCkpO3JldHVybiBOdW1iZXIoaCl9cmV0dXJuIGh9O3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e24mJm4oYXN5bmMgaD0+W3tvcDoicmVwbGFjZSIscGF0aDpoLHZhbHVlOmF9XSl9LFthXSksdy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGgtZnVsbCBnYXAteS00IixjaGlsZHJlbjpbdy5qc3hzKGYzLHtkZWZhdWx0VmFsdWU6YS50b1N0cmluZygpLGRpc2FibGVkOmMsb25WYWx1ZUNoYW5nZTpoPT57dShmKGgpKX0sY2hpbGRyZW46W3cuanN4KFlFLHtjaGlsZHJlbjp3LmpzeChoMyx7cGxhY2Vob2xkZXI6IlNlbGVjdCBhIHZhbHVlIn0pfSksdy5qc3goWEUse2NoaWxkcmVuOnMudmFsdWVzLm1hcChoPT53LmpzeChRRSx7dmFsdWU6aC50b1N0cmluZygpLGNoaWxkcmVuOmgudG9TdHJpbmcoKX0saCkpfSldfSksciYmdy5qc3goImRpdiIse2NoaWxkcmVuOnQhPT1hJiZ3LmpzeChKbCx7ZGlzYWJsZWQ6YyxvbkNsaWNrOigpPT57ZCghMCkscihhc3luYyBoPT5be29wOiJyZXBsYWNlIixwYXRoOmgsdmFsdWU6YX1dKS5maW5hbGx5KCgpPT57ZCghMSl9KX0sY2hpbGRyZW46Yz8iU2F2aW5nLi4uIjoiU3VibWl0In0pfSldfSl9ZnVuY3Rpb24geDMoe2Rpc2FibGVkOmUsZGVmYXVsdFZhbHVlOnQscmVnaXN0ZXJQYXRjaENhbGxiYWNrOm4sb25TdWJtaXQ6cn0pe2NvbnN0W28saV09cC51c2VTdGF0ZSh0fHwwKSxbbCxzXT1wLnVzZVN0YXRlKCExKTtwLnVzZUVmZmVjdCgoKT0+e3MoZSl9LFtlXSk7Y29uc3QgYT1wLnVzZVJlZihudWxsKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntuJiZuKGFzeW5jIHU9Pnt2YXIgYztyZXR1cm5be29wOiJyZXBsYWNlIixwYXRoOnUsdmFsdWU6TnVtYmVyKChjPWEuY3VycmVudCk9PW51bGw/dm9pZCAwOmMudmFsdWUpfHwwfV19KX0sW10pLHcuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBoLWZ1bGwgZ2FwLXktNCIsY2hpbGRyZW46W3cuanN4KFRtLHtyZWY6YSxkaXNhYmxlZDpsLGRlZmF1bHRWYWx1ZTpvPz8wLG9uQ2hhbmdlOnU9PmkoTnVtYmVyKHUudGFyZ2V0LnZhbHVlKSksdHlwZToibnVtYmVyIn0pLHImJncuanN4KCJkaXYiLHtjaGlsZHJlbjp0IT09byYmdy5qc3goSmwse2Rpc2FibGVkOmwsb25DbGljazooKT0+e3MoITApLHIoYXN5bmMgdT0+e3ZhciBjO3JldHVyblt7b3A6InJlcGxhY2UiLHBhdGg6dSx2YWx1ZTpOdW1iZXIoKGM9YS5jdXJyZW50KT09bnVsbD92b2lkIDA6Yy52YWx1ZSl8fDB9XX0pLmZpbmFsbHkoKCk9PntzKCExKX0pfSxjaGlsZHJlbjpsPyJTYXZpbmcuLi4iOiJTdWJtaXQifSl9KV19KX1mdW5jdGlvbiB3Myh7ZGlzYWJsZWQ6ZSxkZWZhdWx0VmFsdWU6dCxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6bixvblN1Ym1pdDpyfSl7Y29uc3RbbyxpXT1wLnVzZVN0YXRlKHR8fCIiKSxbbCxzXT1wLnVzZVN0YXRlKCExKTtwLnVzZUVmZmVjdCgoKT0+e3MoZSl9LFtlXSk7Y29uc3QgYT1wLnVzZVJlZihudWxsKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntuJiZuKGFzeW5jIHU9Pnt2YXIgYztyZXR1cm5be29wOiJyZXBsYWNlIixwYXRoOnUsdmFsdWU6KChjPWEuY3VycmVudCk9PW51bGw/dm9pZCAwOmMudmFsdWUpfHwiIn1dfSl9LFtdKSx3LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW4gaC1mdWxsIGdhcC15LTQiLGNoaWxkcmVuOlt3LmpzeChUbSx7cmVmOmEsZGlzYWJsZWQ6bCxkZWZhdWx0VmFsdWU6bz8/IiIsb25DaGFuZ2U6dT0+aSh1LnRhcmdldC52YWx1ZSl9KSxyJiZ3LmpzeCgiZGl2Iix7Y2hpbGRyZW46dCE9PW8mJncuanN4KEpsLHtkaXNhYmxlZDpsLG9uQ2xpY2s6KCk9PntzKCEwKSxyKGFzeW5jIHU9Pnt2YXIgYztyZXR1cm5be29wOiJyZXBsYWNlIixwYXRoOnUsdmFsdWU6KChjPWEuY3VycmVudCk9PW51bGw/dm9pZCAwOmMudmFsdWUpfHwiIn1dfSkuZmluYWxseSgoKT0+e3MoITEpfSl9LGNoaWxkcmVuOmw/IlNhdmluZy4uLiI6IlN1Ym1pdCJ9KX0pXX0pfWNvbnN0IF8zPSh7Y2xhc3NOYW1lOmV9KT0+dy5qc3hzKCJzdmciLHt3aWR0aDoiNTgiLGhlaWdodDoiMzQiLHZpZXdCb3g6IjAgMCA1OCAzNCIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjbGFzc05hbWU6ZSxjaGlsZHJlbjpbdy5qc3goImciLHtmaWx0ZXI6InVybCgjZmlsdGVyMF9kXzIxXzE2NzcpIixjaGlsZHJlbjp3LmpzeCgicGF0aCIse2Q6Ik01IDUuMzY0MjZDNSA1LjE2MzA5IDUuMTYzMDkgNSA1LjM2NDI2IDVIMTcuNjU4MUMxNy44NTkzIDUgMTguMDIyMyA1LjE2MzA5IDE4LjAyMjMgNS4zNjQyNlYyOC40OTQ5QzE4LjAyMjMgMjguNjk2IDE3Ljg1OTMgMjguODU5MSAxNy42NTgxIDI4Ljg1OTFINS4zNjQyNkM1LjE2MzA5IDI4Ljg1OTEgNSAyOC42OTYgNSAyOC40OTQ5VjUuMzY0MjZaIixmaWxsOiIjMzhDRDk4In0pfSksdy5qc3goImciLHtmaWx0ZXI6InVybCgjZmlsdGVyMV9pXzIxXzE2NzcpIixjaGlsZHJlbjp3LmpzeCgiY2lyY2xlIix7Y3g6IjExLjQ2NTYiLGN5OiIyMy43NTk1IixyOiIyLjE4NTU3IixmaWxsOiJjdXJyZW50Q29sb3IifSl9KSx3LmpzeCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixjbGlwUnVsZToiZXZlbm9kZCIsZDoiTTUyLjg1ODggMjMuODM5SDQ4LjcyNTdINDguNTM3SDQ4LjExMjhDNDcuNjcxNSAyMy44MzkgNDcuNDUwOCAyMy41OTQyIDQ3LjQ1MDggMjMuMTA0NFYxMy43MjkzQzQ3LjQ1MDggMTMuNTc4NCA0Ny4zMjg1IDEzLjQ1NjEgNDcuMTc3NyAxMy40NTYxSDQ1LjgxMThDNDUuNjYwOSAxMy40NTYxIDQ1LjUzODYgMTMuNTc4NCA0NS41Mzg2IDEzLjcyOTNWMTUuMTgzNkM0NS41Mzg2IDE1LjI4NDQgNDUuNDU2OSAxNS4zNjYxIDQ1LjM1NjEgMTUuMzY2MUM0NS4yODc2IDE1LjM2NjEgNDUuMjI1IDE1LjMyNzUgNDUuMTkyNCAxNS4yNjcyQzQ0LjgwNSAxNC41NTAzIDQ0LjI4MyAxNC4wMiA0My42MjY0IDEzLjY3NjVDNDIuOTU2MyAxMy4zMDEgNDIuMjA0NSAxMy4xMTMyIDQxLjM3MDkgMTMuMTEzMkM0MC42MDI4IDEzLjExMzIgMzkuODc1NSAxMy4yNTIgMzkuMTg5IDEzLjUyOTVDMzguNTAyNiAxMy44MDcxIDM3Ljg5NzkgMTQuMjE1MiAzNy4zNzQ4IDE0Ljc1MzlDMzYuODY4MiAxNS4yNzY0IDM2LjQ2NzggMTUuOTIxMiAzNi4xNzM2IDE2LjY4ODVDMzUuODc5NCAxNy40NTU4IDM1LjczMjMgMTguMzM3NCAzNS43MzIzIDE5LjMzMzJWMTkuNzI1QzM1LjczMjMgMjAuNzM3MiAzNS44Nzk0IDIxLjYyNyAzNi4xNzM2IDIyLjM5NDJDMzYuNDY3OCAyMy4xNjE1IDM2Ljg2ODIgMjMuODE0NiAzNy4zNzQ4IDI0LjM1MzNDMzcuODk3OSAyNC44NzU3IDM4LjUwMjYgMjUuMjc1NyAzOS4xODkgMjUuNTUzMkMzOS44NzU1IDI1LjgxNDQgNDAuNjE5MSAyNS45NDUgNDEuNDIgMjUuOTQ1QzQyLjE4ODEgMjUuOTQ1IDQyLjkxNTQgMjUuNzQ5MSA0My42MDE5IDI1LjM1NzNDNDQuMjc1MSAyNC45ODIgNDQuODA1OCAyNC40MTE5IDQ1LjE5NDEgMjMuNjQ3MUM0NS4yMjU1IDIzLjU4NTIgNDUuMjg4NiAyMy41NDUyIDQ1LjM1OCAyMy41NDUySDQ1LjM5MTdDNDUuNDcyOCAyMy41NDUyIDQ1LjUzODYgMjMuNjExIDQ1LjUzODYgMjMuNjkyMUM0NS41Mzg2IDIzLjc5MDQgNDUuNTQ0IDIzLjg4NTYgNDUuNTU0NyAyMy45Nzc3VjI1LjEzOTJDNDUuNTU0NyAyNS4zOTA0IDQ1Ljc1ODQgMjUuNTk0MSA0Ni4wMDk2IDI1LjU5NDFINDcuMjI2MUM0Ny4yOTE0IDI1LjU5OTUgNDcuMzU4MSAyNS42MDIyIDQ3LjQyNjMgMjUuNjAyMkg0OC41MzdINDguNzI1N0g1Ny43MjY4QzU3Ljg3NzcgMjUuNjAyMiA1OCAyNS40Nzk5IDU4IDI1LjMyOVYyNC4xMTIyQzU4IDIzLjk2MTQgNTcuODc3NyAyMy44MzkgNTcuNzI2OCAyMy44MzlINTUuMzE3NEM1NS4xNjY1IDIzLjgzOSA1NS4wNDQyIDIzLjcxNjcgNTUuMDQ0MiAyMy41NjU5VjguNzMzNjhDNTUuMDQ0MiA4LjU4Mjc5IDU0LjkyMTkgOC40NjA0OCA1NC43NzEgOC40NjA0OEg1MC41MDU0QzUwLjM1NDUgOC40NjA0OCA1MC4yMzIyIDguNTgyNzkgNTAuMjMyMiA4LjczMzY4VjkuOTUwNDNDNTAuMjMyMiAxMC4xMDEzIDUwLjM1NDUgMTAuMjIzNiA1MC41MDU0IDEwLjIyMzZINTIuODU4OEM1My4wMDk3IDEwLjIyMzYgNTMuMTMyIDEwLjM0NTkgNTMuMTMyIDEwLjQ5NjhWMjMuNTY1OUM1My4xMzIgMjMuNzE2NyA1My4wMDk3IDIzLjgzOSA1Mi44NTg4IDIzLjgzOVpNNDEuNjE2MSAyNC4xMzI5QzQyLjE4ODEgMjQuMTMyOSA0Mi43MTExIDI0LjAyNjggNDMuMTg1MSAyMy44MTQ2QzQzLjY3NTQgMjMuNjAyMyA0NC4wOTIyIDIzLjMwMDMgNDQuNDM1NCAyMi45MDg1QzQ0Ljc3ODYgMjIuNTE2NyA0NS4wNDgzIDIyLjA1MTQgNDUuMjQ0NCAyMS41MTI3QzQ1LjQ0MDYgMjAuOTU3NiA0NS41Mzg2IDIwLjM0NTQgNDUuNTM4NiAxOS42NzYxVjE5LjM4MjJDNDUuNTM4NiAxOC43MjkyIDQ1LjQ0MDYgMTguMTMzMyA0NS4yNDQ0IDE3LjU5NDZDNDUuMDQ4MyAxNy4wMzk1IDQ0Ljc3MDUgMTYuNTY2MSA0NC40MTA5IDE2LjE3NDNDNDQuMDY3NyAxNS43ODI0IDQzLjY1MDkgMTUuNDgwNCA0My4xNjA2IDE1LjI2ODJDNDIuNjg2NiAxNS4wMzk2IDQyLjE3MTggMTQuOTI1NCA0MS42MTYxIDE0LjkyNTRDNDEuMDQ0IDE0LjkyNTQgNDAuNTIxIDE1LjAzMTUgNDAuMDQ3MSAxNS4yNDM3QzM5LjU3MzEgMTUuNDU1OSAzOS4xNTYzIDE1Ljc1OCAzOC43OTY4IDE2LjE0OThDMzguNDUzNSAxNi41MjUyIDM4LjE4MzkgMTYuOTkwNSAzNy45ODc3IDE3LjU0NTZDMzcuNzkxNiAxOC4wODQzIDM3LjY5MzYgMTguNjgwMiAzNy42OTM2IDE5LjMzMzJWMTkuNzI1QzM3LjY5MzYgMjEuMTEyNyAzOC4wNTMxIDIyLjE5ODMgMzguNzcyMiAyMi45ODJDMzkuNTA3NyAyMy43NDkzIDQwLjQ1NTcgMjQuMTMyOSA0MS42MTYxIDI0LjEzMjlaTTMxLjExMTUgMjUuNDE5MUMzMS4wNzMyIDI1LjUyODcgMzAuOTY5OCAyNS42MDIyIDMwLjg1MzYgMjUuNjAyMkgyNy40NjYxQzI3LjM1IDI1LjYwMjIgMjcuMjQ2NSAyNS41Mjg3IDI3LjIwODIgMjUuNDE5MUwyMy4xNTc4IDEzLjgxOTNDMjMuMDk1OCAxMy42NDE3IDIzLjIyNzYgMTMuNDU2MSAyMy40MTU3IDEzLjQ1NjFIMjUuMDg5QzI1LjIwNjggMTMuNDU2MSAyNS4zMTE0IDEzLjUzMTYgMjUuMzQ4NCAxMy42NDM1TDI4Ljk2NjYgMjQuNTgxQzI4Ljk5NDIgMjQuNjY0MyAyOS4wNzIxIDI0LjcyMDYgMjkuMTU5OSAyNC43MjA2QzI5LjI0NzcgMjQuNzIwNiAyOS4zMjU2IDI0LjY2NDMgMjkuMzUzMiAyNC41ODFMMzIuOTcxNCAxMy42NDM1QzMzLjAwODQgMTMuNTMxNiAzMy4xMTI5IDEzLjQ1NjEgMzMuMjMwOCAxMy40NTYxSDM0LjkwNDFDMzUuMDkyMiAxMy40NTYxIDM1LjIyNCAxMy42NDE3IDM1LjE2MiAxMy44MTkzTDMxLjExMTUgMjUuNDE5MVoiLGZpbGw6ImN1cnJlbnRDb2xvciJ9KSx3LmpzeHMoImRlZnMiLHtjaGlsZHJlbjpbdy5qc3hzKCJmaWx0ZXIiLHtpZDoiZmlsdGVyMF9kXzIxXzE2NzciLHg6IjAuMTI0NzIyIix5OiIwLjEyNDcyMiIsd2lkdGg6IjIyLjc3MjkiLGhlaWdodDoiMzMuNjA5NyIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbdy5qc3goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLHcuanN4KCJmZUNvbG9yTWF0cml4Iix7aW46IlNvdXJjZUFscGhhIix0eXBlOiJtYXRyaXgiLHZhbHVlczoiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiLHJlc3VsdDoiaGFyZEFscGhhIn0pLHcuanN4KCJmZU9mZnNldCIse30pLHcuanN4KCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMi40Mzc2NCJ9KSx3LmpzeCgiZmVDb21wb3NpdGUiLHtpbjI6ImhhcmRBbHBoYSIsb3BlcmF0b3I6Im91dCJ9KSx3LmpzeCgiZmVDb2xvck1hdHJpeCIse3R5cGU6Im1hdHJpeCIsdmFsdWVzOiIwIDAgMCAwIDAuMjE5NjA4IDAgMCAwIDAgMC44MDM5MjIgMCAwIDAgMCAwLjUwMTk2MSAwIDAgMCAwLjMgMCJ9KSx3LmpzeCgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoiZWZmZWN0MV9kcm9wU2hhZG93XzIxXzE2NzcifSksdy5qc3goImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6ImVmZmVjdDFfZHJvcFNoYWRvd18yMV8xNjc3IixyZXN1bHQ6InNoYXBlIn0pXX0pLHcuanN4cygiZmlsdGVyIix7aWQ6ImZpbHRlcjFfaV8yMV8xNjc3Iix4OiI5LjI4MDAzIix5OiIyMS41NzM5Iix3aWR0aDoiNC4zNzExMiIsaGVpZ2h0OiI0LjM3MTEyIixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOlt3LmpzeCgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksdy5qc3goImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSx3LmpzeCgiZmVDb2xvck1hdHJpeCIse2luOiJTb3VyY2VBbHBoYSIsdHlwZToibWF0cml4Iix2YWx1ZXM6IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIixyZXN1bHQ6ImhhcmRBbHBoYSJ9KSx3LmpzeCgiZmVPZmZzZXQiLHt9KSx3LmpzeCgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNTQ2MzkyIn0pLHcuanN4KCJmZUNvbXBvc2l0ZSIse2luMjoiaGFyZEFscGhhIixvcGVyYXRvcjoiYXJpdGhtZXRpYyIsazI6Ii0xIixrMzoiMSJ9KSx3LmpzeCgiZmVDb2xvck1hdHJpeCIse3R5cGU6Im1hdHJpeCIsdmFsdWVzOiIwIDAgMCAwIDAuMjE5NjA4IDAgMCAwIDAgMC44MDM5MjIgMCAwIDAgMCAwLjUwMTk2MSAwIDAgMCAwLjMgMCJ9KSx3LmpzeCgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW4yOiJzaGFwZSIscmVzdWx0OiJlZmZlY3QxX2lubmVyU2hhZG93XzIxXzE2NzcifSldfSldfSldfSksWkU9XzMscUU9IlN3aXRjaCIsW1MzLFg0XT1raShxRSksW0UzLEMzXT1TMyhxRSksJDM9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVN3aXRjaDpuLG5hbWU6cixjaGVja2VkOm8sZGVmYXVsdENoZWNrZWQ6aSxyZXF1aXJlZDpsLGRpc2FibGVkOnMsdmFsdWU6YT0ib24iLG9uQ2hlY2tlZENoYW5nZTp1LC4uLmN9PWUsW2QsZl09cC51c2VTdGF0ZShudWxsKSxoPVFlKHQseT0+Zih5KSksZz1wLnVzZVJlZighMSksbT1kPyEhZC5jbG9zZXN0KCJmb3JtIik6ITAsW189ITEsdl09QWwoe3Byb3A6byxkZWZhdWx0UHJvcDppLG9uQ2hhbmdlOnV9KTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KEUzLHtzY29wZTpuLGNoZWNrZWQ6XyxkaXNhYmxlZDpzfSxwLmNyZWF0ZUVsZW1lbnQoTGUuYnV0dG9uLHRlKHt0eXBlOiJidXR0b24iLHJvbGU6InN3aXRjaCIsImFyaWEtY2hlY2tlZCI6XywiYXJpYS1yZXF1aXJlZCI6bCwiZGF0YS1zdGF0ZSI6ZUMoXyksImRhdGEtZGlzYWJsZWQiOnM/IiI6dm9pZCAwLGRpc2FibGVkOnMsdmFsdWU6YX0sYyx7cmVmOmgsb25DbGljazpIZShlLm9uQ2xpY2sseT0+e3YoeD0+IXgpLG0mJihnLmN1cnJlbnQ9eS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpLGcuY3VycmVudHx8eS5zdG9wUHJvcGFnYXRpb24oKSl9KX0pKSxtJiZwLmNyZWF0ZUVsZW1lbnQoYjMse2NvbnRyb2w6ZCxidWJibGVzOiFnLmN1cnJlbnQsbmFtZTpyLHZhbHVlOmEsY2hlY2tlZDpfLHJlcXVpcmVkOmwsZGlzYWJsZWQ6cyxzdHlsZTp7dHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC0xMDAlKSJ9fSkpfSksazM9IlN3aXRjaFRodW1iIixUMz1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU3dpdGNoOm4sLi4ucn09ZSxvPUMzKGszLG4pO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoTGUuc3Bhbix0ZSh7ImRhdGEtc3RhdGUiOmVDKG8uY2hlY2tlZCksImRhdGEtZGlzYWJsZWQiOm8uZGlzYWJsZWQ/IiI6dm9pZCAwfSxyLHtyZWY6dH0pKX0pLGIzPWU9Pntjb25zdHtjb250cm9sOnQsY2hlY2tlZDpuLGJ1YmJsZXM6cj0hMCwuLi5vfT1lLGk9cC51c2VSZWYobnVsbCksbD1URShuKSxzPXdFKHQpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGE9aS5jdXJyZW50LHU9d2luZG93LkhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLGQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih1LCJjaGVja2VkIikuc2V0O2lmKGwhPT1uJiZkKXtjb25zdCBmPW5ldyBFdmVudCgiY2xpY2siLHtidWJibGVzOnJ9KTtkLmNhbGwoYSxuKSxhLmRpc3BhdGNoRXZlbnQoZil9fSxbbCxuLHJdKSxwLmNyZWF0ZUVsZW1lbnQoImlucHV0Iix0ZSh7dHlwZToiY2hlY2tib3giLCJhcmlhLWhpZGRlbiI6ITAsZGVmYXVsdENoZWNrZWQ6bn0sbyx7dGFiSW5kZXg6LTEscmVmOmksc3R5bGU6ey4uLmUuc3R5bGUsLi4ucyxwb3NpdGlvbjoiYWJzb2x1dGUiLHBvaW50ZXJFdmVudHM6Im5vbmUiLG9wYWNpdHk6MCxtYXJnaW46MH19KSl9O2Z1bmN0aW9uIGVDKGUpe3JldHVybiBlPyJjaGVja2VkIjoidW5jaGVja2VkIn1jb25zdCB0Qz0kMyxOMz1UMyxQcD1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+dy5qc3godEMse2NsYXNzTmFtZTpzdCgicGVlciBpbmxpbmUtZmxleCBoLVsyMnB4XSB3LVs0NHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci10cmFuc3BhcmVudCB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT11bmNoZWNrZWRdOmJnLXByaW1hcnkiLGUpLC4uLnQscmVmOm4sY2hpbGRyZW46dy5qc3goTjMse2NsYXNzTmFtZTpzdCgicG9pbnRlci1ldmVudHMtbm9uZSBibG9jayBoLVsxOHB4XSB3LTUgcm91bmRlZC1mdWxsIGJnLWJhY2tncm91bmQgc2hhZG93LWxnIHJpbmctMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkYXRhLVtzdGF0ZT1jaGVja2VkXTp0cmFuc2xhdGUteC01IGRhdGEtW3N0YXRlPXVuY2hlY2tlZF06dHJhbnNsYXRlLXgtMCIpfSl9KSk7UHAuZGlzcGxheU5hbWU9dEMuZGlzcGxheU5hbWU7Y29uc3QgRG09cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsLi4udH0sbik9PncuanN4KCJkaXYiLHtyZWY6bixjbGFzc05hbWU6c3QoInJvdW5kZWQtbGcgYm9yZGVyIGJnLWNhcmQgdGV4dC1jYXJkLWZvcmVncm91bmQgc2hhZG93LXNtIixlKSwuLi50fSkpO0RtLmRpc3BsYXlOYW1lPSJDYXJkIjtjb25zdCBSMz1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+dy5qc3goImRpdiIse3JlZjpuLGNsYXNzTmFtZTpzdCgiZmxleCBmbGV4LWNvbCBzcGFjZS15LTEuNSBwLTYiLGUpLC4uLnR9KSk7UjMuZGlzcGxheU5hbWU9IkNhcmRIZWFkZXIiO2NvbnN0IFAzPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT53LmpzeCgiaDMiLHtyZWY6bixjbGFzc05hbWU6c3QoInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgbGVhZGluZy1ub25lIHRyYWNraW5nLXRpZ2h0IixlKSwuLi50fSkpO1AzLmRpc3BsYXlOYW1lPSJDYXJkVGl0bGUiO2NvbnN0IE8zPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT53LmpzeCgicCIse3JlZjpuLGNsYXNzTmFtZTpzdCgidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQiLGUpLC4uLnR9KSk7TzMuZGlzcGxheU5hbWU9IkNhcmREZXNjcmlwdGlvbiI7Y29uc3QgQTM9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsLi4udH0sbik9PncuanN4KCJkaXYiLHtyZWY6bixjbGFzc05hbWU6c3QoInAtNiBwdC0wIixlKSwuLi50fSkpO0EzLmRpc3BsYXlOYW1lPSJDYXJkQ29udGVudCI7Y29uc3QgTTM9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsLi4udH0sbik9PncuanN4KCJkaXYiLHtyZWY6bixjbGFzc05hbWU6c3QoImZsZXggaXRlbXMtY2VudGVyIHAtNiBwdC0wIixlKSwuLi50fSkpO00zLmRpc3BsYXlOYW1lPSJDYXJkRm9vdGVyIjsvKioKICogQHJlbWl4LXJ1bi9yb3V0ZXIgdjEuMTMuMAogKgogKiBDb3B5cmlnaHQgKGMpIFJlbWl4IFNvZnR3YXJlIEluYy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICoKICogQGxpY2Vuc2UgTUlUCiAqL2Z1bmN0aW9uIGx0KCl7cmV0dXJuIGx0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciB1dDsoZnVuY3Rpb24oZSl7ZS5Qb3A9IlBPUCIsZS5QdXNoPSJQVVNIIixlLlJlcGxhY2U9IlJFUExBQ0UifSkodXR8fCh1dD17fSkpO2NvbnN0IEYwPSJwb3BzdGF0ZSI7ZnVuY3Rpb24gTDMoZSl7ZT09PXZvaWQgMCYmKGU9e30pO2Z1bmN0aW9uIHQocixvKXtsZXR7cGF0aG5hbWU6aSxzZWFyY2g6bCxoYXNoOnN9PXIubG9jYXRpb247cmV0dXJuIFRhKCIiLHtwYXRobmFtZTppLHNlYXJjaDpsLGhhc2g6c30sby5zdGF0ZSYmby5zdGF0ZS51c3J8fG51bGwsby5zdGF0ZSYmby5zdGF0ZS5rZXl8fCJkZWZhdWx0Iil9ZnVuY3Rpb24gbihyLG8pe3JldHVybiB0eXBlb2Ygbz09InN0cmluZyI/bzpIYShvKX1yZXR1cm4gSTModCxuLG51bGwsZSl9ZnVuY3Rpb24gRWUoZSx0KXtpZihlPT09ITF8fGU9PT1udWxsfHx0eXBlb2YgZT4idSIpdGhyb3cgbmV3IEVycm9yKHQpfWZ1bmN0aW9uIHdpKGUsdCl7aWYoIWUpe3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKHQpO3RyeXt0aHJvdyBuZXcgRXJyb3IodCl9Y2F0Y2h7fX19ZnVuY3Rpb24gRDMoKXtyZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsOCl9ZnVuY3Rpb24gQjAoZSx0KXtyZXR1cm57dXNyOmUuc3RhdGUsa2V5OmUua2V5LGlkeDp0fX1mdW5jdGlvbiBUYShlLHQsbixyKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49bnVsbCksbHQoe3BhdGhuYW1lOnR5cGVvZiBlPT0ic3RyaW5nIj9lOmUucGF0aG5hbWUsc2VhcmNoOiIiLGhhc2g6IiJ9LHR5cGVvZiB0PT0ic3RyaW5nIj9ubyh0KTp0LHtzdGF0ZTpuLGtleTp0JiZ0LmtleXx8cnx8RDMoKX0pfWZ1bmN0aW9uIEhhKGUpe2xldHtwYXRobmFtZTp0PSIvIixzZWFyY2g6bj0iIixoYXNoOnI9IiJ9PWU7cmV0dXJuIG4mJm4hPT0iPyImJih0Kz1uLmNoYXJBdCgwKT09PSI/Ij9uOiI/IituKSxyJiZyIT09IiMiJiYodCs9ci5jaGFyQXQoMCk9PT0iIyI/cjoiIyIrciksdH1mdW5jdGlvbiBubyhlKXtsZXQgdD17fTtpZihlKXtsZXQgbj1lLmluZGV4T2YoIiMiKTtuPj0wJiYodC5oYXNoPWUuc3Vic3RyKG4pLGU9ZS5zdWJzdHIoMCxuKSk7bGV0IHI9ZS5pbmRleE9mKCI/Iik7cj49MCYmKHQuc2VhcmNoPWUuc3Vic3RyKHIpLGU9ZS5zdWJzdHIoMCxyKSksZSYmKHQucGF0aG5hbWU9ZSl9cmV0dXJuIHR9ZnVuY3Rpb24gSTMoZSx0LG4scil7cj09PXZvaWQgMCYmKHI9e30pO2xldHt3aW5kb3c6bz1kb2N1bWVudC5kZWZhdWx0Vmlldyx2NUNvbXBhdDppPSExfT1yLGw9by5oaXN0b3J5LHM9dXQuUG9wLGE9bnVsbCx1PWMoKTt1PT1udWxsJiYodT0wLGwucmVwbGFjZVN0YXRlKGx0KHt9LGwuc3RhdGUse2lkeDp1fSksIiIpKTtmdW5jdGlvbiBjKCl7cmV0dXJuKGwuc3RhdGV8fHtpZHg6bnVsbH0pLmlkeH1mdW5jdGlvbiBkKCl7cz11dC5Qb3A7bGV0IF89YygpLHY9Xz09bnVsbD9udWxsOl8tdTt1PV8sYSYmYSh7YWN0aW9uOnMsbG9jYXRpb246bS5sb2NhdGlvbixkZWx0YTp2fSl9ZnVuY3Rpb24gZihfLHYpe3M9dXQuUHVzaDtsZXQgeT1UYShtLmxvY2F0aW9uLF8sdik7biYmbih5LF8pLHU9YygpKzE7bGV0IHg9QjAoeSx1KSxTPW0uY3JlYXRlSHJlZih5KTt0cnl7bC5wdXNoU3RhdGUoeCwiIixTKX1jYXRjaChrKXtpZihrIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZrLm5hbWU9PT0iRGF0YUNsb25lRXJyb3IiKXRocm93IGs7by5sb2NhdGlvbi5hc3NpZ24oUyl9aSYmYSYmYSh7YWN0aW9uOnMsbG9jYXRpb246bS5sb2NhdGlvbixkZWx0YToxfSl9ZnVuY3Rpb24gaChfLHYpe3M9dXQuUmVwbGFjZTtsZXQgeT1UYShtLmxvY2F0aW9uLF8sdik7biYmbih5LF8pLHU9YygpO2xldCB4PUIwKHksdSksUz1tLmNyZWF0ZUhyZWYoeSk7bC5yZXBsYWNlU3RhdGUoeCwiIixTKSxpJiZhJiZhKHthY3Rpb246cyxsb2NhdGlvbjptLmxvY2F0aW9uLGRlbHRhOjB9KX1mdW5jdGlvbiBnKF8pe2xldCB2PW8ubG9jYXRpb24ub3JpZ2luIT09Im51bGwiP28ubG9jYXRpb24ub3JpZ2luOm8ubG9jYXRpb24uaHJlZix5PXR5cGVvZiBfPT0ic3RyaW5nIj9fOkhhKF8pO3JldHVybiBFZSh2LCJObyB3aW5kb3cubG9jYXRpb24uKG9yaWdpbnxocmVmKSBhdmFpbGFibGUgdG8gY3JlYXRlIFVSTCBmb3IgaHJlZjogIit5KSxuZXcgVVJMKHksdil9bGV0IG09e2dldCBhY3Rpb24oKXtyZXR1cm4gc30sZ2V0IGxvY2F0aW9uKCl7cmV0dXJuIGUobyxsKX0sbGlzdGVuKF8pe2lmKGEpdGhyb3cgbmV3IEVycm9yKCJBIGhpc3Rvcnkgb25seSBhY2NlcHRzIG9uZSBhY3RpdmUgbGlzdGVuZXIiKTtyZXR1cm4gby5hZGRFdmVudExpc3RlbmVyKEYwLGQpLGE9XywoKT0+e28ucmVtb3ZlRXZlbnRMaXN0ZW5lcihGMCxkKSxhPW51bGx9fSxjcmVhdGVIcmVmKF8pe3JldHVybiB0KG8sXyl9LGNyZWF0ZVVSTDpnLGVuY29kZUxvY2F0aW9uKF8pe2xldCB2PWcoXyk7cmV0dXJue3BhdGhuYW1lOnYucGF0aG5hbWUsc2VhcmNoOnYuc2VhcmNoLGhhc2g6di5oYXNofX0scHVzaDpmLHJlcGxhY2U6aCxnbyhfKXtyZXR1cm4gbC5nbyhfKX19O3JldHVybiBtfXZhciBjdDsoZnVuY3Rpb24oZSl7ZS5kYXRhPSJkYXRhIixlLmRlZmVycmVkPSJkZWZlcnJlZCIsZS5yZWRpcmVjdD0icmVkaXJlY3QiLGUuZXJyb3I9ImVycm9yIn0pKGN0fHwoY3Q9e30pKTtjb25zdCBqMz1uZXcgU2V0KFsibGF6eSIsImNhc2VTZW5zaXRpdmUiLCJwYXRoIiwiaWQiLCJpbmRleCIsImNoaWxkcmVuIl0pO2Z1bmN0aW9uIHozKGUpe3JldHVybiBlLmluZGV4PT09ITB9ZnVuY3Rpb24gT3AoZSx0LG4scil7cmV0dXJuIG49PT12b2lkIDAmJihuPVtdKSxyPT09dm9pZCAwJiYocj17fSksZS5tYXAoKG8saSk9PntsZXQgbD1bLi4ubixpXSxzPXR5cGVvZiBvLmlkPT0ic3RyaW5nIj9vLmlkOmwuam9pbigiLSIpO2lmKEVlKG8uaW5kZXghPT0hMHx8IW8uY2hpbGRyZW4sIkNhbm5vdCBzcGVjaWZ5IGNoaWxkcmVuIG9uIGFuIGluZGV4IHJvdXRlIiksRWUoIXJbc10sJ0ZvdW5kIGEgcm91dGUgaWQgY29sbGlzaW9uIG9uIGlkICInK3MrYCIuICBSb3V0ZSBpZCdzIG11c3QgYmUgZ2xvYmFsbHkgdW5pcXVlIHdpdGhpbiBEYXRhIFJvdXRlciB1c2FnZXNgKSx6MyhvKSl7bGV0IGE9bHQoe30sbyx0KG8pLHtpZDpzfSk7cmV0dXJuIHJbc109YSxhfWVsc2V7bGV0IGE9bHQoe30sbyx0KG8pLHtpZDpzLGNoaWxkcmVuOnZvaWQgMH0pO3JldHVybiByW3NdPWEsby5jaGlsZHJlbiYmKGEuY2hpbGRyZW49T3Aoby5jaGlsZHJlbix0LGwscikpLGF9fSl9ZnVuY3Rpb24gc2woZSx0LG4pe249PT12b2lkIDAmJihuPSIvIik7bGV0IHI9dHlwZW9mIHQ9PSJzdHJpbmciP25vKHQpOnQsbz1LYShyLnBhdGhuYW1lfHwiLyIsbik7aWYobz09bnVsbClyZXR1cm4gbnVsbDtsZXQgaT1uQyhlKTtCMyhpKTtsZXQgbD1udWxsO2ZvcihsZXQgcz0wO2w9PW51bGwmJnM8aS5sZW5ndGg7KytzKWw9UTMoaVtzXSxxMyhvKSk7cmV0dXJuIGx9ZnVuY3Rpb24gRjMoZSx0KXtsZXR7cm91dGU6bixwYXRobmFtZTpyLHBhcmFtczpvfT1lO3JldHVybntpZDpuLmlkLHBhdGhuYW1lOnIscGFyYW1zOm8sZGF0YTp0W24uaWRdLGhhbmRsZTpuLmhhbmRsZX19ZnVuY3Rpb24gbkMoZSx0LG4scil7dD09PXZvaWQgMCYmKHQ9W10pLG49PT12b2lkIDAmJihuPVtdKSxyPT09dm9pZCAwJiYocj0iIik7bGV0IG89KGksbCxzKT0+e2xldCBhPXtyZWxhdGl2ZVBhdGg6cz09PXZvaWQgMD9pLnBhdGh8fCIiOnMsY2FzZVNlbnNpdGl2ZTppLmNhc2VTZW5zaXRpdmU9PT0hMCxjaGlsZHJlbkluZGV4Omwscm91dGU6aX07YS5yZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgiLyIpJiYoRWUoYS5yZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChyKSwnQWJzb2x1dGUgcm91dGUgcGF0aCAiJythLnJlbGF0aXZlUGF0aCsnIiBuZXN0ZWQgdW5kZXIgcGF0aCAnKygnIicrcisnIiBpcyBub3QgdmFsaWQuIEFuIGFic29sdXRlIGNoaWxkIHJvdXRlIHBhdGggJykrIm11c3Qgc3RhcnQgd2l0aCB0aGUgY29tYmluZWQgcGF0aCBvZiBhbGwgaXRzIHBhcmVudCByb3V0ZXMuIiksYS5yZWxhdGl2ZVBhdGg9YS5yZWxhdGl2ZVBhdGguc2xpY2Uoci5sZW5ndGgpKTtsZXQgdT1SbyhbcixhLnJlbGF0aXZlUGF0aF0pLGM9bi5jb25jYXQoYSk7aS5jaGlsZHJlbiYmaS5jaGlsZHJlbi5sZW5ndGg+MCYmKEVlKGkuaW5kZXghPT0hMCwiSW5kZXggcm91dGVzIG11c3Qgbm90IGhhdmUgY2hpbGQgcm91dGVzLiBQbGVhc2UgcmVtb3ZlICIrKCdhbGwgY2hpbGQgcm91dGVzIGZyb20gcm91dGUgcGF0aCAiJyt1KyciLicpKSxuQyhpLmNoaWxkcmVuLHQsYyx1KSksIShpLnBhdGg9PW51bGwmJiFpLmluZGV4KSYmdC5wdXNoKHtwYXRoOnUsc2NvcmU6WTModSxpLmluZGV4KSxyb3V0ZXNNZXRhOmN9KX07cmV0dXJuIGUuZm9yRWFjaCgoaSxsKT0+e3ZhciBzO2lmKGkucGF0aD09PSIifHwhKChzPWkucGF0aCkhPW51bGwmJnMuaW5jbHVkZXMoIj8iKSkpbyhpLGwpO2Vsc2UgZm9yKGxldCBhIG9mIHJDKGkucGF0aCkpbyhpLGwsYSl9KSx0fWZ1bmN0aW9uIHJDKGUpe2xldCB0PWUuc3BsaXQoIi8iKTtpZih0Lmxlbmd0aD09PTApcmV0dXJuW107bGV0W24sLi4ucl09dCxvPW4uZW5kc1dpdGgoIj8iKSxpPW4ucmVwbGFjZSgvXD8kLywiIik7aWYoci5sZW5ndGg9PT0wKXJldHVybiBvP1tpLCIiXTpbaV07bGV0IGw9ckMoci5qb2luKCIvIikpLHM9W107cmV0dXJuIHMucHVzaCguLi5sLm1hcChhPT5hPT09IiI/aTpbaSxhXS5qb2luKCIvIikpKSxvJiZzLnB1c2goLi4ubCkscy5tYXAoYT0+ZS5zdGFydHNXaXRoKCIvIikmJmE9PT0iIj8iLyI6YSl9ZnVuY3Rpb24gQjMoZSl7ZS5zb3J0KCh0LG4pPT50LnNjb3JlIT09bi5zY29yZT9uLnNjb3JlLXQuc2NvcmU6WDModC5yb3V0ZXNNZXRhLm1hcChyPT5yLmNoaWxkcmVuSW5kZXgpLG4ucm91dGVzTWV0YS5tYXAocj0+ci5jaGlsZHJlbkluZGV4KSkpfWNvbnN0IFczPS9eOlx3KyQvLFUzPTMsVjM9MixIMz0xLEszPTEwLEczPS0yLFcwPWU9PmU9PT0iKiI7ZnVuY3Rpb24gWTMoZSx0KXtsZXQgbj1lLnNwbGl0KCIvIikscj1uLmxlbmd0aDtyZXR1cm4gbi5zb21lKFcwKSYmKHIrPUczKSx0JiYocis9VjMpLG4uZmlsdGVyKG89PiFXMChvKSkucmVkdWNlKChvLGkpPT5vKyhXMy50ZXN0KGkpP1UzOmk9PT0iIj9IMzpLMykscil9ZnVuY3Rpb24gWDMoZSx0KXtyZXR1cm4gZS5sZW5ndGg9PT10Lmxlbmd0aCYmZS5zbGljZSgwLC0xKS5ldmVyeSgocixvKT0+cj09PXRbb10pP2VbZS5sZW5ndGgtMV0tdFt0Lmxlbmd0aC0xXTowfWZ1bmN0aW9uIFEzKGUsdCl7bGV0e3JvdXRlc01ldGE6bn09ZSxyPXt9LG89Ii8iLGk9W107Zm9yKGxldCBsPTA7bDxuLmxlbmd0aDsrK2wpe2xldCBzPW5bbF0sYT1sPT09bi5sZW5ndGgtMSx1PW89PT0iLyI/dDp0LnNsaWNlKG8ubGVuZ3RoKXx8Ii8iLGM9SjMoe3BhdGg6cy5yZWxhdGl2ZVBhdGgsY2FzZVNlbnNpdGl2ZTpzLmNhc2VTZW5zaXRpdmUsZW5kOmF9LHUpO2lmKCFjKXJldHVybiBudWxsO09iamVjdC5hc3NpZ24ocixjLnBhcmFtcyk7bGV0IGQ9cy5yb3V0ZTtpLnB1c2goe3BhcmFtczpyLHBhdGhuYW1lOlJvKFtvLGMucGF0aG5hbWVdKSxwYXRobmFtZUJhc2U6ck0oUm8oW28sYy5wYXRobmFtZUJhc2VdKSkscm91dGU6ZH0pLGMucGF0aG5hbWVCYXNlIT09Ii8iJiYobz1SbyhbbyxjLnBhdGhuYW1lQmFzZV0pKX1yZXR1cm4gaX1mdW5jdGlvbiBKMyhlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIiYmKGU9e3BhdGg6ZSxjYXNlU2Vuc2l0aXZlOiExLGVuZDohMH0pO2xldFtuLHJdPVozKGUucGF0aCxlLmNhc2VTZW5zaXRpdmUsZS5lbmQpLG89dC5tYXRjaChuKTtpZighbylyZXR1cm4gbnVsbDtsZXQgaT1vWzBdLGw9aS5yZXBsYWNlKC8oLilcLyskLywiJDEiKSxzPW8uc2xpY2UoMSk7cmV0dXJue3BhcmFtczpyLnJlZHVjZSgodSxjLGQpPT57bGV0e3BhcmFtTmFtZTpmLGlzT3B0aW9uYWw6aH09YztpZihmPT09IioiKXtsZXQgbT1zW2RdfHwiIjtsPWkuc2xpY2UoMCxpLmxlbmd0aC1tLmxlbmd0aCkucmVwbGFjZSgvKC4pXC8rJC8sIiQxIil9Y29uc3QgZz1zW2RdO3JldHVybiBoJiYhZz91W2ZdPXZvaWQgMDp1W2ZdPWVNKGd8fCIiLGYpLHV9LHt9KSxwYXRobmFtZTppLHBhdGhuYW1lQmFzZTpsLHBhdHRlcm46ZX19ZnVuY3Rpb24gWjMoZSx0LG4pe3Q9PT12b2lkIDAmJih0PSExKSxuPT09dm9pZCAwJiYobj0hMCksd2koZT09PSIqInx8IWUuZW5kc1dpdGgoIioiKXx8ZS5lbmRzV2l0aCgiLyoiKSwnUm91dGUgcGF0aCAiJytlKyciIHdpbGwgYmUgdHJlYXRlZCBhcyBpZiBpdCB3ZXJlICcrKCciJytlLnJlcGxhY2UoL1wqJC8sIi8qIikrJyIgYmVjYXVzZSB0aGUgYCpgIGNoYXJhY3RlciBtdXN0ICcpKyJhbHdheXMgZm9sbG93IGEgYC9gIGluIHRoZSBwYXR0ZXJuLiBUbyBnZXQgcmlkIG9mIHRoaXMgd2FybmluZywgIisoJ3BsZWFzZSBjaGFuZ2UgdGhlIHJvdXRlIHBhdGggdG8gIicrZS5yZXBsYWNlKC9cKiQvLCIvKiIpKyciLicpKTtsZXQgcj1bXSxvPSJeIitlLnJlcGxhY2UoL1wvKlwqPyQvLCIiKS5yZXBsYWNlKC9eXC8qLywiLyIpLnJlcGxhY2UoL1tcXC4qK14ke318KClbXF1dL2csIlxcJCYiKS5yZXBsYWNlKC9cLzooXHcrKShcPyk/L2csKGwscyxhKT0+KHIucHVzaCh7cGFyYW1OYW1lOnMsaXNPcHRpb25hbDphIT1udWxsfSksYT8iLz8oW15cXC9dKyk/IjoiLyhbXlxcL10rKSIpKTtyZXR1cm4gZS5lbmRzV2l0aCgiKiIpPyhyLnB1c2goe3BhcmFtTmFtZToiKiJ9KSxvKz1lPT09IioifHxlPT09Ii8qIj8iKC4qKSQiOiIoPzpcXC8oLispfFxcLyopJCIpOm4/bys9IlxcLyokIjplIT09IiImJmUhPT0iLyImJihvKz0iKD86KD89XFwvfCQpKSIpLFtuZXcgUmVnRXhwKG8sdD92b2lkIDA6ImkiKSxyXX1mdW5jdGlvbiBxMyhlKXt0cnl7cmV0dXJuIGRlY29kZVVSSShlKX1jYXRjaCh0KXtyZXR1cm4gd2koITEsJ1RoZSBVUkwgcGF0aCAiJytlKyciIGNvdWxkIG5vdCBiZSBkZWNvZGVkIGJlY2F1c2UgaXQgaXMgaXMgYSBtYWxmb3JtZWQgVVJMIHNlZ21lbnQuIFRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIGEgYmFkIHBlcmNlbnQgJysoImVuY29kaW5nICgiK3QrIikuIikpLGV9fWZ1bmN0aW9uIGVNKGUsdCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2gobil7cmV0dXJuIHdpKCExLCdUaGUgdmFsdWUgZm9yIHRoZSBVUkwgcGFyYW0gIicrdCsnIiB3aWxsIG5vdCBiZSBkZWNvZGVkIGJlY2F1c2UnKygnIHRoZSBzdHJpbmcgIicrZSsnIiBpcyBhIG1hbGZvcm1lZCBVUkwgc2VnbWVudC4gVGhpcyBpcyBwcm9iYWJseScpKygiIGR1ZSB0byBhIGJhZCBwZXJjZW50IGVuY29kaW5nICgiK24rIikuIikpLGV9fWZ1bmN0aW9uIEthKGUsdCl7aWYodD09PSIvIilyZXR1cm4gZTtpZighZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodC50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gbnVsbDtsZXQgbj10LmVuZHNXaXRoKCIvIik/dC5sZW5ndGgtMTp0Lmxlbmd0aCxyPWUuY2hhckF0KG4pO3JldHVybiByJiZyIT09Ii8iP251bGw6ZS5zbGljZShuKXx8Ii8ifWZ1bmN0aW9uIHRNKGUsdCl7dD09PXZvaWQgMCYmKHQ9Ii8iKTtsZXR7cGF0aG5hbWU6bixzZWFyY2g6cj0iIixoYXNoOm89IiJ9PXR5cGVvZiBlPT0ic3RyaW5nIj9ubyhlKTplO3JldHVybntwYXRobmFtZTpuP24uc3RhcnRzV2l0aCgiLyIpP246bk0obix0KTp0LHNlYXJjaDpvTShyKSxoYXNoOmlNKG8pfX1mdW5jdGlvbiBuTShlLHQpe2xldCBuPXQucmVwbGFjZSgvXC8rJC8sIiIpLnNwbGl0KCIvIik7cmV0dXJuIGUuc3BsaXQoIi8iKS5mb3JFYWNoKG89PntvPT09Ii4uIj9uLmxlbmd0aD4xJiZuLnBvcCgpOm8hPT0iLiImJm4ucHVzaChvKX0pLG4ubGVuZ3RoPjE/bi5qb2luKCIvIik6Ii8ifWZ1bmN0aW9uIERmKGUsdCxuLHIpe3JldHVybiJDYW5ub3QgaW5jbHVkZSBhICciK2UrIicgY2hhcmFjdGVyIGluIGEgbWFudWFsbHkgc3BlY2lmaWVkICIrKCJgdG8uIit0KyJgIGZpZWxkIFsiK0pTT04uc3RyaW5naWZ5KHIpKyJdLiAgUGxlYXNlIHNlcGFyYXRlIGl0IG91dCB0byB0aGUgIikrKCJgdG8uIituKyJgIGZpZWxkLiBBbHRlcm5hdGl2ZWx5IHlvdSBtYXkgcHJvdmlkZSB0aGUgZnVsbCBwYXRoIGFzICIpKydhIHN0cmluZyBpbiA8TGluayB0bz0iLi4uIj4gYW5kIHRoZSByb3V0ZXIgd2lsbCBwYXJzZSBpdCBmb3IgeW91Lid9ZnVuY3Rpb24gb0MoZSl7cmV0dXJuIGUuZmlsdGVyKCh0LG4pPT5uPT09MHx8dC5yb3V0ZS5wYXRoJiZ0LnJvdXRlLnBhdGgubGVuZ3RoPjApfWZ1bmN0aW9uIGlDKGUpe3JldHVybiBvQyhlKS5tYXAoKHQsbik9Pm49PT1lLmxlbmd0aC0xP3QucGF0aG5hbWU6dC5wYXRobmFtZUJhc2UpfWZ1bmN0aW9uIGxDKGUsdCxuLHIpe3I9PT12b2lkIDAmJihyPSExKTtsZXQgbzt0eXBlb2YgZT09InN0cmluZyI/bz1ubyhlKToobz1sdCh7fSxlKSxFZSghby5wYXRobmFtZXx8IW8ucGF0aG5hbWUuaW5jbHVkZXMoIj8iKSxEZigiPyIsInBhdGhuYW1lIiwic2VhcmNoIixvKSksRWUoIW8ucGF0aG5hbWV8fCFvLnBhdGhuYW1lLmluY2x1ZGVzKCIjIiksRGYoIiMiLCJwYXRobmFtZSIsImhhc2giLG8pKSxFZSghby5zZWFyY2h8fCFvLnNlYXJjaC5pbmNsdWRlcygiIyIpLERmKCIjIiwic2VhcmNoIiwiaGFzaCIsbykpKTtsZXQgaT1lPT09IiJ8fG8ucGF0aG5hbWU9PT0iIixsPWk/Ii8iOm8ucGF0aG5hbWUscztpZihsPT1udWxsKXM9bjtlbHNlIGlmKHIpe2xldCBkPXRbdC5sZW5ndGgtMV0ucmVwbGFjZSgvXlwvLywiIikuc3BsaXQoIi8iKTtpZihsLnN0YXJ0c1dpdGgoIi4uIikpe2xldCBmPWwuc3BsaXQoIi8iKTtmb3IoO2ZbMF09PT0iLi4iOylmLnNoaWZ0KCksZC5wb3AoKTtvLnBhdGhuYW1lPWYuam9pbigiLyIpfXM9Ii8iK2Quam9pbigiLyIpfWVsc2V7bGV0IGQ9dC5sZW5ndGgtMTtpZihsLnN0YXJ0c1dpdGgoIi4uIikpe2xldCBmPWwuc3BsaXQoIi8iKTtmb3IoO2ZbMF09PT0iLi4iOylmLnNoaWZ0KCksZC09MTtvLnBhdGhuYW1lPWYuam9pbigiLyIpfXM9ZD49MD90W2RdOiIvIn1sZXQgYT10TShvLHMpLHU9bCYmbCE9PSIvIiYmbC5lbmRzV2l0aCgiLyIpLGM9KGl8fGw9PT0iLiIpJiZuLmVuZHNXaXRoKCIvIik7cmV0dXJuIWEucGF0aG5hbWUuZW5kc1dpdGgoIi8iKSYmKHV8fGMpJiYoYS5wYXRobmFtZSs9Ii8iKSxhfWNvbnN0IFJvPWU9PmUuam9pbigiLyIpLnJlcGxhY2UoL1wvXC8rL2csIi8iKSxyTT1lPT5lLnJlcGxhY2UoL1wvKyQvLCIiKS5yZXBsYWNlKC9eXC8qLywiLyIpLG9NPWU9PiFlfHxlPT09Ij8iPyIiOmUuc3RhcnRzV2l0aCgiPyIpP2U6Ij8iK2UsaU09ZT0+IWV8fGU9PT0iIyI/IiI6ZS5zdGFydHNXaXRoKCIjIik/ZToiIyIrZTtjbGFzcyBJbXtjb25zdHJ1Y3Rvcih0LG4scixvKXtvPT09dm9pZCAwJiYobz0hMSksdGhpcy5zdGF0dXM9dCx0aGlzLnN0YXR1c1RleHQ9bnx8IiIsdGhpcy5pbnRlcm5hbD1vLHIgaW5zdGFuY2VvZiBFcnJvcj8odGhpcy5kYXRhPXIudG9TdHJpbmcoKSx0aGlzLmVycm9yPXIpOnRoaXMuZGF0YT1yfX1mdW5jdGlvbiBzQyhlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGUuc3RhdHVzPT0ibnVtYmVyIiYmdHlwZW9mIGUuc3RhdHVzVGV4dD09InN0cmluZyImJnR5cGVvZiBlLmludGVybmFsPT0iYm9vbGVhbiImJiJkYXRhImluIGV9Y29uc3QgYUM9WyJwb3N0IiwicHV0IiwicGF0Y2giLCJkZWxldGUiXSxsTT1uZXcgU2V0KGFDKSxzTT1bImdldCIsLi4uYUNdLGFNPW5ldyBTZXQoc00pLHVNPW5ldyBTZXQoWzMwMSwzMDIsMzAzLDMwNywzMDhdKSxjTT1uZXcgU2V0KFszMDcsMzA4XSksSWY9e3N0YXRlOiJpZGxlIixsb2NhdGlvbjp2b2lkIDAsZm9ybU1ldGhvZDp2b2lkIDAsZm9ybUFjdGlvbjp2b2lkIDAsZm9ybUVuY1R5cGU6dm9pZCAwLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMH0sZE09e3N0YXRlOiJpZGxlIixkYXRhOnZvaWQgMCxmb3JtTWV0aG9kOnZvaWQgMCxmb3JtQWN0aW9uOnZvaWQgMCxmb3JtRW5jVHlwZTp2b2lkIDAsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6dm9pZCAwfSxwcz17c3RhdGU6InVuYmxvY2tlZCIscHJvY2VlZDp2b2lkIDAscmVzZXQ6dm9pZCAwLGxvY2F0aW9uOnZvaWQgMH0sdUM9L14oPzpbYS16XVthLXowLTkrLi1dKjp8XC9cLykvaSxmTT1lPT4oe2hhc0Vycm9yQm91bmRhcnk6ISFlLmhhc0Vycm9yQm91bmRhcnl9KSxjQz0icmVtaXgtcm91dGVyLXRyYW5zaXRpb25zIjtmdW5jdGlvbiBoTShlKXtjb25zdCB0PWUud2luZG93P2Uud2luZG93OnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAsbj10eXBlb2YgdDwidSImJnR5cGVvZiB0LmRvY3VtZW50PCJ1IiYmdHlwZW9mIHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudDwidSIscj0hbjtFZShlLnJvdXRlcy5sZW5ndGg+MCwiWW91IG11c3QgcHJvdmlkZSBhIG5vbi1lbXB0eSByb3V0ZXMgYXJyYXkgdG8gY3JlYXRlUm91dGVyIik7bGV0IG87aWYoZS5tYXBSb3V0ZVByb3BlcnRpZXMpbz1lLm1hcFJvdXRlUHJvcGVydGllcztlbHNlIGlmKGUuZGV0ZWN0RXJyb3JCb3VuZGFyeSl7bGV0IFA9ZS5kZXRlY3RFcnJvckJvdW5kYXJ5O289TD0+KHtoYXNFcnJvckJvdW5kYXJ5OlAoTCl9KX1lbHNlIG89Zk07bGV0IGk9e30sbD1PcChlLnJvdXRlcyxvLHZvaWQgMCxpKSxzLGE9ZS5iYXNlbmFtZXx8Ii8iLHU9bHQoe3Y3X2ZldGNoZXJQZXJzaXN0OiExLHY3X25vcm1hbGl6ZUZvcm1NZXRob2Q6ITEsdjdfcHJlcGVuZEJhc2VuYW1lOiExfSxlLmZ1dHVyZSksYz1udWxsLGQ9bmV3IFNldCxmPW51bGwsaD1udWxsLGc9bnVsbCxtPWUuaHlkcmF0aW9uRGF0YSE9bnVsbCxfPXNsKGwsZS5oaXN0b3J5LmxvY2F0aW9uLGEpLHY9bnVsbDtpZihfPT1udWxsKXtsZXQgUD1Nbig0MDQse3BhdGhuYW1lOmUuaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZX0pLHttYXRjaGVzOkwscm91dGU6en09UTAobCk7Xz1MLHY9e1t6LmlkXTpQfX1sZXQgeT0hXy5zb21lKFA9PlAucm91dGUubGF6eSkmJighXy5zb21lKFA9PlAucm91dGUubG9hZGVyKXx8ZS5oeWRyYXRpb25EYXRhIT1udWxsKSx4LFM9e2hpc3RvcnlBY3Rpb246ZS5oaXN0b3J5LmFjdGlvbixsb2NhdGlvbjplLmhpc3RvcnkubG9jYXRpb24sbWF0Y2hlczpfLGluaXRpYWxpemVkOnksbmF2aWdhdGlvbjpJZixyZXN0b3JlU2Nyb2xsUG9zaXRpb246ZS5oeWRyYXRpb25EYXRhIT1udWxsPyExOm51bGwscHJldmVudFNjcm9sbFJlc2V0OiExLHJldmFsaWRhdGlvbjoiaWRsZSIsbG9hZGVyRGF0YTplLmh5ZHJhdGlvbkRhdGEmJmUuaHlkcmF0aW9uRGF0YS5sb2FkZXJEYXRhfHx7fSxhY3Rpb25EYXRhOmUuaHlkcmF0aW9uRGF0YSYmZS5oeWRyYXRpb25EYXRhLmFjdGlvbkRhdGF8fG51bGwsZXJyb3JzOmUuaHlkcmF0aW9uRGF0YSYmZS5oeWRyYXRpb25EYXRhLmVycm9yc3x8dixmZXRjaGVyczpuZXcgTWFwLGJsb2NrZXJzOm5ldyBNYXB9LGs9dXQuUG9wLGI9ITEsVCxOPSExLEQ9bmV3IE1hcCxNPW51bGwsaj0hMSxCPSExLHJlPVtdLEg9W10sWT1uZXcgTWFwLEM9MCwkPS0xLEU9bmV3IE1hcCxPPW5ldyBTZXQsUj1uZXcgTWFwLEY9bmV3IE1hcCxWPW5ldyBTZXQsYWU9bmV3IE1hcCxvZT1uZXcgTWFwLCRlPSExO2Z1bmN0aW9uIF9lKCl7aWYoYz1lLmhpc3RvcnkubGlzdGVuKFA9PntsZXR7YWN0aW9uOkwsbG9jYXRpb246eixkZWx0YTpHfT1QO2lmKCRlKXskZT0hMTtyZXR1cm59d2kob2Uuc2l6ZT09PTB8fEchPW51bGwsIllvdSBhcmUgdHJ5aW5nIHRvIHVzZSBhIGJsb2NrZXIgb24gYSBQT1AgbmF2aWdhdGlvbiB0byBhIGxvY2F0aW9uIHRoYXQgd2FzIG5vdCBjcmVhdGVkIGJ5IEByZW1peC1ydW4vcm91dGVyLiBUaGlzIHdpbGwgZmFpbCBzaWxlbnRseSBpbiBwcm9kdWN0aW9uLiBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IGFyZSBuYXZpZ2F0aW5nIG91dHNpZGUgdGhlIHJvdXRlciB2aWEgYHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZWAvYHdpbmRvdy5sb2NhdGlvbi5oYXNoYCBpbnN0ZWFkIG9mIHVzaW5nIHJvdXRlciBuYXZpZ2F0aW9uIEFQSXMuICBUaGlzIGNhbiBhbHNvIGhhcHBlbiBpZiB5b3UgYXJlIHVzaW5nIGNyZWF0ZUhhc2hSb3V0ZXIgYW5kIHRoZSB1c2VyIG1hbnVhbGx5IGNoYW5nZXMgdGhlIFVSTC4iKTtsZXQgbmU9R20oe2N1cnJlbnRMb2NhdGlvbjpTLmxvY2F0aW9uLG5leHRMb2NhdGlvbjp6LGhpc3RvcnlBY3Rpb246TH0pO2lmKG5lJiZHIT1udWxsKXskZT0hMCxlLmhpc3RvcnkuZ28oRyotMSksR2EobmUse3N0YXRlOiJibG9ja2VkIixsb2NhdGlvbjp6LHByb2NlZWQoKXtHYShuZSx7c3RhdGU6InByb2NlZWRpbmciLHByb2NlZWQ6dm9pZCAwLHJlc2V0OnZvaWQgMCxsb2NhdGlvbjp6fSksZS5oaXN0b3J5LmdvKEcpfSxyZXNldCgpe2xldCB2ZT1uZXcgTWFwKFMuYmxvY2tlcnMpO3ZlLnNldChuZSxwcykseWUoe2Jsb2NrZXJzOnZlfSl9fSk7cmV0dXJufXJldHVybiBGZShMLHopfSksbil7Q00odCxEKTtsZXQgUD0oKT0+JE0odCxEKTt0LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixQKSxNPSgpPT50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixQKX1yZXR1cm4gUy5pbml0aWFsaXplZHx8RmUodXQuUG9wLFMubG9jYXRpb24pLHh9ZnVuY3Rpb24gUSgpe2MmJmMoKSxNJiZNKCksZC5jbGVhcigpLFQmJlQuYWJvcnQoKSxTLmZldGNoZXJzLmZvckVhY2goKFAsTCk9PnhuKEwpKSxTLmJsb2NrZXJzLmZvckVhY2goKFAsTCk9PkttKEwpKX1mdW5jdGlvbiBOZShQKXtyZXR1cm4gZC5hZGQoUCksKCk9PmQuZGVsZXRlKFApfWZ1bmN0aW9uIHllKFAsTCl7TD09PXZvaWQgMCYmKEw9e30pLFM9bHQoe30sUyxQKTtsZXQgej1bXSxHPVtdO3UudjdfZmV0Y2hlclBlcnNpc3QmJlMuZmV0Y2hlcnMuZm9yRWFjaCgobmUsdmUpPT57bmUuc3RhdGU9PT0iaWRsZSImJihWLmhhcyh2ZSk/Ry5wdXNoKHZlKTp6LnB1c2godmUpKX0pLFsuLi5kXS5mb3JFYWNoKG5lPT5uZShTLHtkZWxldGVkRmV0Y2hlcnM6Ryx1bnN0YWJsZV92aWV3VHJhbnNpdGlvbk9wdHM6TC52aWV3VHJhbnNpdGlvbk9wdHMsdW5zdGFibGVfZmx1c2hTeW5jOkwuZmx1c2hTeW5jPT09ITB9KSksdS52N19mZXRjaGVyUGVyc2lzdCYmKHouZm9yRWFjaChuZT0+Uy5mZXRjaGVycy5kZWxldGUobmUpKSxHLmZvckVhY2gobmU9PnhuKG5lKSkpfWZ1bmN0aW9uIFNlKFAsTCx6KXt2YXIgRyxuZTtsZXR7Zmx1c2hTeW5jOnZlfT16PT09dm9pZCAwP3t9OnosY2U9Uy5hY3Rpb25EYXRhIT1udWxsJiZTLm5hdmlnYXRpb24uZm9ybU1ldGhvZCE9bnVsbCYmcW4oUy5uYXZpZ2F0aW9uLmZvcm1NZXRob2QpJiZTLm5hdmlnYXRpb24uc3RhdGU9PT0ibG9hZGluZyImJigoRz1QLnN0YXRlKT09bnVsbD92b2lkIDA6Ry5faXNSZWRpcmVjdCkhPT0hMCx1ZTtMLmFjdGlvbkRhdGE/T2JqZWN0LmtleXMoTC5hY3Rpb25EYXRhKS5sZW5ndGg+MD91ZT1MLmFjdGlvbkRhdGE6dWU9bnVsbDpjZT91ZT1TLmFjdGlvbkRhdGE6dWU9bnVsbDtsZXQgbGU9TC5sb2FkZXJEYXRhP1gwKFMubG9hZGVyRGF0YSxMLmxvYWRlckRhdGEsTC5tYXRjaGVzfHxbXSxMLmVycm9ycyk6Uy5sb2FkZXJEYXRhLGtlPVMuYmxvY2tlcnM7a2Uuc2l6ZT4wJiYoa2U9bmV3IE1hcChrZSksa2UuZm9yRWFjaCgoRGUsWmUpPT5rZS5zZXQoWmUscHMpKSk7bGV0IEF0PWI9PT0hMHx8Uy5uYXZpZ2F0aW9uLmZvcm1NZXRob2QhPW51bGwmJnFuKFMubmF2aWdhdGlvbi5mb3JtTWV0aG9kKSYmKChuZT1QLnN0YXRlKT09bnVsbD92b2lkIDA6bmUuX2lzUmVkaXJlY3QpIT09ITA7cyYmKGw9cyxzPXZvaWQgMCksanx8az09PXV0LlBvcHx8KGs9PT11dC5QdXNoP2UuaGlzdG9yeS5wdXNoKFAsUC5zdGF0ZSk6az09PXV0LlJlcGxhY2UmJmUuaGlzdG9yeS5yZXBsYWNlKFAsUC5zdGF0ZSkpO2xldCB4ZTtpZihrPT09dXQuUG9wKXtsZXQgRGU9RC5nZXQoUy5sb2NhdGlvbi5wYXRobmFtZSk7RGUmJkRlLmhhcyhQLnBhdGhuYW1lKT94ZT17Y3VycmVudExvY2F0aW9uOlMubG9jYXRpb24sbmV4dExvY2F0aW9uOlB9OkQuaGFzKFAucGF0aG5hbWUpJiYoeGU9e2N1cnJlbnRMb2NhdGlvbjpQLG5leHRMb2NhdGlvbjpTLmxvY2F0aW9ufSl9ZWxzZSBpZihOKXtsZXQgRGU9RC5nZXQoUy5sb2NhdGlvbi5wYXRobmFtZSk7RGU/RGUuYWRkKFAucGF0aG5hbWUpOihEZT1uZXcgU2V0KFtQLnBhdGhuYW1lXSksRC5zZXQoUy5sb2NhdGlvbi5wYXRobmFtZSxEZSkpLHhlPXtjdXJyZW50TG9jYXRpb246Uy5sb2NhdGlvbixuZXh0TG9jYXRpb246UH19eWUobHQoe30sTCx7YWN0aW9uRGF0YTp1ZSxsb2FkZXJEYXRhOmxlLGhpc3RvcnlBY3Rpb246ayxsb2NhdGlvbjpQLGluaXRpYWxpemVkOiEwLG5hdmlnYXRpb246SWYscmV2YWxpZGF0aW9uOiJpZGxlIixyZXN0b3JlU2Nyb2xsUG9zaXRpb246WG0oUCxMLm1hdGNoZXN8fFMubWF0Y2hlcykscHJldmVudFNjcm9sbFJlc2V0OkF0LGJsb2NrZXJzOmtlfSkse3ZpZXdUcmFuc2l0aW9uT3B0czp4ZSxmbHVzaFN5bmM6dmU9PT0hMH0pLGs9dXQuUG9wLGI9ITEsTj0hMSxqPSExLEI9ITEscmU9W10sSD1bXX1hc3luYyBmdW5jdGlvbiBwZShQLEwpe2lmKHR5cGVvZiBQPT0ibnVtYmVyIil7ZS5oaXN0b3J5LmdvKFApO3JldHVybn1sZXQgej1BcChTLmxvY2F0aW9uLFMubWF0Y2hlcyxhLHUudjdfcHJlcGVuZEJhc2VuYW1lLFAsTD09bnVsbD92b2lkIDA6TC5mcm9tUm91dGVJZCxMPT1udWxsP3ZvaWQgMDpMLnJlbGF0aXZlKSx7cGF0aDpHLHN1Ym1pc3Npb246bmUsZXJyb3I6dmV9PVUwKHUudjdfbm9ybWFsaXplRm9ybU1ldGhvZCwhMSx6LEwpLGNlPVMubG9jYXRpb24sdWU9VGEoUy5sb2NhdGlvbixHLEwmJkwuc3RhdGUpO3VlPWx0KHt9LHVlLGUuaGlzdG9yeS5lbmNvZGVMb2NhdGlvbih1ZSkpO2xldCBsZT1MJiZMLnJlcGxhY2UhPW51bGw/TC5yZXBsYWNlOnZvaWQgMCxrZT11dC5QdXNoO2xlPT09ITA/a2U9dXQuUmVwbGFjZTpsZT09PSExfHxuZSE9bnVsbCYmcW4obmUuZm9ybU1ldGhvZCkmJm5lLmZvcm1BY3Rpb249PT1TLmxvY2F0aW9uLnBhdGhuYW1lK1MubG9jYXRpb24uc2VhcmNoJiYoa2U9dXQuUmVwbGFjZSk7bGV0IEF0PUwmJiJwcmV2ZW50U2Nyb2xsUmVzZXQiaW4gTD9MLnByZXZlbnRTY3JvbGxSZXNldD09PSEwOnZvaWQgMCx4ZT0oTCYmTC51bnN0YWJsZV9mbHVzaFN5bmMpPT09ITAsRGU9R20oe2N1cnJlbnRMb2NhdGlvbjpjZSxuZXh0TG9jYXRpb246dWUsaGlzdG9yeUFjdGlvbjprZX0pO2lmKERlKXtHYShEZSx7c3RhdGU6ImJsb2NrZWQiLGxvY2F0aW9uOnVlLHByb2NlZWQoKXtHYShEZSx7c3RhdGU6InByb2NlZWRpbmciLHByb2NlZWQ6dm9pZCAwLHJlc2V0OnZvaWQgMCxsb2NhdGlvbjp1ZX0pLHBlKFAsTCl9LHJlc2V0KCl7bGV0IFplPW5ldyBNYXAoUy5ibG9ja2Vycyk7WmUuc2V0KERlLHBzKSx5ZSh7YmxvY2tlcnM6WmV9KX19KTtyZXR1cm59cmV0dXJuIGF3YWl0IEZlKGtlLHVlLHtzdWJtaXNzaW9uOm5lLHBlbmRpbmdFcnJvcjp2ZSxwcmV2ZW50U2Nyb2xsUmVzZXQ6QXQscmVwbGFjZTpMJiZMLnJlcGxhY2UsZW5hYmxlVmlld1RyYW5zaXRpb246TCYmTC51bnN0YWJsZV92aWV3VHJhbnNpdGlvbixmbHVzaFN5bmM6eGV9KX1mdW5jdGlvbiBiZSgpe2lmKGRuKCkseWUoe3JldmFsaWRhdGlvbjoibG9hZGluZyJ9KSxTLm5hdmlnYXRpb24uc3RhdGUhPT0ic3VibWl0dGluZyIpe2lmKFMubmF2aWdhdGlvbi5zdGF0ZT09PSJpZGxlIil7RmUoUy5oaXN0b3J5QWN0aW9uLFMubG9jYXRpb24se3N0YXJ0VW5pbnRlcnJ1cHRlZFJldmFsaWRhdGlvbjohMH0pO3JldHVybn1GZShrfHxTLmhpc3RvcnlBY3Rpb24sUy5uYXZpZ2F0aW9uLmxvY2F0aW9uLHtvdmVycmlkZU5hdmlnYXRpb246Uy5uYXZpZ2F0aW9ufSl9fWFzeW5jIGZ1bmN0aW9uIEZlKFAsTCx6KXtUJiZULmFib3J0KCksVD1udWxsLGs9UCxqPSh6JiZ6LnN0YXJ0VW5pbnRlcnJ1cHRlZFJldmFsaWRhdGlvbik9PT0hMCxCQyhTLmxvY2F0aW9uLFMubWF0Y2hlcyksYj0oeiYmei5wcmV2ZW50U2Nyb2xsUmVzZXQpPT09ITAsTj0oeiYmei5lbmFibGVWaWV3VHJhbnNpdGlvbik9PT0hMDtsZXQgRz1zfHxsLG5lPXomJnoub3ZlcnJpZGVOYXZpZ2F0aW9uLHZlPXNsKEcsTCxhKSxjZT0oeiYmei5mbHVzaFN5bmMpPT09ITA7aWYoIXZlKXtsZXQgWmU9TW4oNDA0LHtwYXRobmFtZTpMLnBhdGhuYW1lfSkse21hdGNoZXM6UXQscm91dGU6dXJ9PVEwKEcpO0ZkKCksU2UoTCx7bWF0Y2hlczpRdCxsb2FkZXJEYXRhOnt9LGVycm9yczp7W3VyLmlkXTpaZX19LHtmbHVzaFN5bmM6Y2V9KTtyZXR1cm59aWYoUy5pbml0aWFsaXplZCYmIUImJnlNKFMubG9jYXRpb24sTCkmJiEoeiYmei5zdWJtaXNzaW9uJiZxbih6LnN1Ym1pc3Npb24uZm9ybU1ldGhvZCkpKXtTZShMLHttYXRjaGVzOnZlfSx7Zmx1c2hTeW5jOmNlfSk7cmV0dXJufVQ9bmV3IEFib3J0Q29udHJvbGxlcjtsZXQgdWU9bXMoZS5oaXN0b3J5LEwsVC5zaWduYWwseiYmei5zdWJtaXNzaW9uKSxsZSxrZTtpZih6JiZ6LnBlbmRpbmdFcnJvcilrZT17W1lzKHZlKS5yb3V0ZS5pZF06ei5wZW5kaW5nRXJyb3J9O2Vsc2UgaWYoeiYmei5zdWJtaXNzaW9uJiZxbih6LnN1Ym1pc3Npb24uZm9ybU1ldGhvZCkpe2xldCBaZT1hd2FpdCBPdCh1ZSxMLHouc3VibWlzc2lvbix2ZSx7cmVwbGFjZTp6LnJlcGxhY2UsZmx1c2hTeW5jOmNlfSk7aWYoWmUuc2hvcnRDaXJjdWl0ZWQpcmV0dXJuO2xlPVplLnBlbmRpbmdBY3Rpb25EYXRhLGtlPVplLnBlbmRpbmdBY3Rpb25FcnJvcixuZT1qZihMLHouc3VibWlzc2lvbiksY2U9ITEsdWU9bmV3IFJlcXVlc3QodWUudXJsLHtzaWduYWw6dWUuc2lnbmFsfSl9bGV0e3Nob3J0Q2lyY3VpdGVkOkF0LGxvYWRlckRhdGE6eGUsZXJyb3JzOkRlfT1hd2FpdCBjbih1ZSxMLHZlLG5lLHomJnouc3VibWlzc2lvbix6JiZ6LmZldGNoZXJTdWJtaXNzaW9uLHomJnoucmVwbGFjZSxjZSxsZSxrZSk7QXR8fChUPW51bGwsU2UoTCxsdCh7bWF0Y2hlczp2ZX0sbGU/e2FjdGlvbkRhdGE6bGV9Ont9LHtsb2FkZXJEYXRhOnhlLGVycm9yczpEZX0pKSl9YXN5bmMgZnVuY3Rpb24gT3QoUCxMLHosRyxuZSl7bmU9PT12b2lkIDAmJihuZT17fSksZG4oKTtsZXQgdmU9U00oTCx6KTt5ZSh7bmF2aWdhdGlvbjp2ZX0se2ZsdXNoU3luYzpuZS5mbHVzaFN5bmM9PT0hMH0pO2xldCBjZSx1ZT1McChHLEwpO2lmKCF1ZS5yb3V0ZS5hY3Rpb24mJiF1ZS5yb3V0ZS5sYXp5KWNlPXt0eXBlOmN0LmVycm9yLGVycm9yOk1uKDQwNSx7bWV0aG9kOlAubWV0aG9kLHBhdGhuYW1lOkwucGF0aG5hbWUscm91dGVJZDp1ZS5yb3V0ZS5pZH0pfTtlbHNlIGlmKGNlPWF3YWl0IGdzKCJhY3Rpb24iLFAsdWUsRyxpLG8sYSksUC5zaWduYWwuYWJvcnRlZClyZXR1cm57c2hvcnRDaXJjdWl0ZWQ6ITB9O2lmKHlsKGNlKSl7bGV0IGxlO3JldHVybiBuZSYmbmUucmVwbGFjZSE9bnVsbD9sZT1uZS5yZXBsYWNlOmxlPWNlLmxvY2F0aW9uPT09Uy5sb2NhdGlvbi5wYXRobmFtZStTLmxvY2F0aW9uLnNlYXJjaCxhd2FpdCBKZShTLGNlLHtzdWJtaXNzaW9uOnoscmVwbGFjZTpsZX0pLHtzaG9ydENpcmN1aXRlZDohMH19aWYoWHMoY2UpKXtsZXQgbGU9WXMoRyx1ZS5yb3V0ZS5pZCk7cmV0dXJuKG5lJiZuZS5yZXBsYWNlKSE9PSEwJiYoaz11dC5QdXNoKSx7cGVuZGluZ0FjdGlvbkRhdGE6e30scGVuZGluZ0FjdGlvbkVycm9yOntbbGUucm91dGUuaWRdOmNlLmVycm9yfX19aWYocmkoY2UpKXRocm93IE1uKDQwMCx7dHlwZToiZGVmZXItYWN0aW9uIn0pO3JldHVybntwZW5kaW5nQWN0aW9uRGF0YTp7W3VlLnJvdXRlLmlkXTpjZS5kYXRhfX19YXN5bmMgZnVuY3Rpb24gY24oUCxMLHosRyxuZSx2ZSxjZSx1ZSxsZSxrZSl7bGV0IEF0PUd8fGpmKEwsbmUpLHhlPW5lfHx2ZXx8cTAoQXQpLERlPXN8fGwsW1plLFF0XT1WMChlLmhpc3RvcnksUyx6LHhlLEwsQixyZSxILFYsUixPLERlLGEsbGUsa2UpO2lmKEZkKEllPT4hKHomJnouc29tZShBbj0+QW4ucm91dGUuaWQ9PT1JZSkpfHxaZSYmWmUuc29tZShBbj0+QW4ucm91dGUuaWQ9PT1JZSkpLCQ9KytDLFplLmxlbmd0aD09PTAmJlF0Lmxlbmd0aD09PTApe2xldCBJZT1LbygpO3JldHVybiBTZShMLGx0KHttYXRjaGVzOnosbG9hZGVyRGF0YTp7fSxlcnJvcnM6a2V8fG51bGx9LGxlP3thY3Rpb25EYXRhOmxlfTp7fSxJZT97ZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX06e30pLHtmbHVzaFN5bmM6dWV9KSx7c2hvcnRDaXJjdWl0ZWQ6ITB9fWlmKCFqKXtRdC5mb3JFYWNoKEFuPT57bGV0IGh0PVMuZmV0Y2hlcnMuZ2V0KEFuLmtleSksR289dnModm9pZCAwLGh0P2h0LmRhdGE6dm9pZCAwKTtTLmZldGNoZXJzLnNldChBbi5rZXksR28pfSk7bGV0IEllPWxlfHxTLmFjdGlvbkRhdGE7eWUobHQoe25hdmlnYXRpb246QXR9LEllP09iamVjdC5rZXlzKEllKS5sZW5ndGg9PT0wP3thY3Rpb25EYXRhOm51bGx9OnthY3Rpb25EYXRhOkllfTp7fSxRdC5sZW5ndGg+MD97ZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX06e30pLHtmbHVzaFN5bmM6dWV9KX1RdC5mb3JFYWNoKEllPT57WS5oYXMoSWUua2V5KSYmb3QoSWUua2V5KSxJZS5jb250cm9sbGVyJiZZLnNldChJZS5rZXksSWUuY29udHJvbGxlcil9KTtsZXQgdXI9KCk9PlF0LmZvckVhY2goSWU9Pm90KEllLmtleSkpO1QmJlQuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0Iix1cik7bGV0e3Jlc3VsdHM6bnMsbG9hZGVyUmVzdWx0czpCZCxmZXRjaGVyUmVzdWx0czpBaX09YXdhaXQgWXQoUy5tYXRjaGVzLHosWmUsUXQsUCk7aWYoUC5zaWduYWwuYWJvcnRlZClyZXR1cm57c2hvcnRDaXJjdWl0ZWQ6ITB9O1QmJlQuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iix1ciksUXQuZm9yRWFjaChJZT0+WS5kZWxldGUoSWUua2V5KSk7bGV0IEduPUowKG5zKTtpZihHbil7aWYoR24uaWR4Pj1aZS5sZW5ndGgpe2xldCBJZT1RdFtHbi5pZHgtWmUubGVuZ3RoXS5rZXk7Ty5hZGQoSWUpfXJldHVybiBhd2FpdCBKZShTLEduLnJlc3VsdCx7cmVwbGFjZTpjZX0pLHtzaG9ydENpcmN1aXRlZDohMH19bGV0e2xvYWRlckRhdGE6WWEsZXJyb3JzOldkfT1ZMChTLHosWmUsQmQsa2UsUXQsQWksYWUpO2FlLmZvckVhY2goKEllLEFuKT0+e0llLnN1YnNjcmliZShodD0+eyhodHx8SWUuZG9uZSkmJmFlLmRlbGV0ZShBbil9KX0pO2xldCBVZD1LbygpLFZkPXRzKCQpLE1pPVVkfHxWZHx8UXQubGVuZ3RoPjA7cmV0dXJuIGx0KHtsb2FkZXJEYXRhOllhLGVycm9yczpXZH0sTWk/e2ZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9Ont9KX1mdW5jdGlvbiBLbihQLEwseixHKXtpZihyKXRocm93IG5ldyBFcnJvcigicm91dGVyLmZldGNoKCkgd2FzIGNhbGxlZCBkdXJpbmcgdGhlIHNlcnZlciByZW5kZXIsIGJ1dCBpdCBzaG91bGRuJ3QgYmUuIFlvdSBhcmUgbGlrZWx5IGNhbGxpbmcgYSB1c2VGZXRjaGVyKCkgbWV0aG9kIGluIHRoZSBib2R5IG9mIHlvdXIgY29tcG9uZW50LiBUcnkgbW92aW5nIGl0IHRvIGEgdXNlRWZmZWN0IG9yIGEgY2FsbGJhY2suIik7WS5oYXMoUCkmJm90KFApO2xldCBuZT0oRyYmRy51bnN0YWJsZV9mbHVzaFN5bmMpPT09ITAsdmU9c3x8bCxjZT1BcChTLmxvY2F0aW9uLFMubWF0Y2hlcyxhLHUudjdfcHJlcGVuZEJhc2VuYW1lLHosTCxHPT1udWxsP3ZvaWQgMDpHLnJlbGF0aXZlKSx1ZT1zbCh2ZSxjZSxhKTtpZighdWUpe1N0KFAsTCxNbig0MDQse3BhdGhuYW1lOmNlfSkse2ZsdXNoU3luYzpuZX0pO3JldHVybn1sZXR7cGF0aDpsZSxzdWJtaXNzaW9uOmtlLGVycm9yOkF0fT1VMCh1LnY3X25vcm1hbGl6ZUZvcm1NZXRob2QsITAsY2UsRyk7aWYoQXQpe1N0KFAsTCxBdCx7Zmx1c2hTeW5jOm5lfSk7cmV0dXJufWxldCB4ZT1McCh1ZSxsZSk7aWYoYj0oRyYmRy5wcmV2ZW50U2Nyb2xsUmVzZXQpPT09ITAsa2UmJnFuKGtlLmZvcm1NZXRob2QpKXtSZShQLEwsbGUseGUsdWUsbmUsa2UpO3JldHVybn1SLnNldChQLHtyb3V0ZUlkOkwscGF0aDpsZX0pLG10KFAsTCxsZSx4ZSx1ZSxuZSxrZSl9YXN5bmMgZnVuY3Rpb24gUmUoUCxMLHosRyxuZSx2ZSxjZSl7aWYoZG4oKSxSLmRlbGV0ZShQKSwhRy5yb3V0ZS5hY3Rpb24mJiFHLnJvdXRlLmxhenkpe2xldCBodD1Nbig0MDUse21ldGhvZDpjZS5mb3JtTWV0aG9kLHBhdGhuYW1lOnoscm91dGVJZDpMfSk7U3QoUCxMLGh0LHtmbHVzaFN5bmM6dmV9KTtyZXR1cm59bGV0IHVlPVMuZmV0Y2hlcnMuZ2V0KFApO2F0KFAsRU0oY2UsdWUpLHtmbHVzaFN5bmM6dmV9KTtsZXQgbGU9bmV3IEFib3J0Q29udHJvbGxlcixrZT1tcyhlLmhpc3RvcnkseixsZS5zaWduYWwsY2UpO1kuc2V0KFAsbGUpO2xldCBBdD1DLHhlPWF3YWl0IGdzKCJhY3Rpb24iLGtlLEcsbmUsaSxvLGEpO2lmKGtlLnNpZ25hbC5hYm9ydGVkKXtZLmdldChQKT09PWxlJiZZLmRlbGV0ZShQKTtyZXR1cm59aWYoVi5oYXMoUCkpe2F0KFAsYW8odm9pZCAwKSk7cmV0dXJufWlmKHlsKHhlKSlpZihZLmRlbGV0ZShQKSwkPkF0KXthdChQLGFvKHZvaWQgMCkpO3JldHVybn1lbHNlIHJldHVybiBPLmFkZChQKSxhdChQLHZzKGNlKSksSmUoUyx4ZSx7ZmV0Y2hlclN1Ym1pc3Npb246Y2V9KTtpZihYcyh4ZSkpe1N0KFAsTCx4ZS5lcnJvcik7cmV0dXJufWlmKHJpKHhlKSl0aHJvdyBNbig0MDAse3R5cGU6ImRlZmVyLWFjdGlvbiJ9KTtsZXQgRGU9Uy5uYXZpZ2F0aW9uLmxvY2F0aW9ufHxTLmxvY2F0aW9uLFplPW1zKGUuaGlzdG9yeSxEZSxsZS5zaWduYWwpLFF0PXN8fGwsdXI9Uy5uYXZpZ2F0aW9uLnN0YXRlIT09ImlkbGUiP3NsKFF0LFMubmF2aWdhdGlvbi5sb2NhdGlvbixhKTpTLm1hdGNoZXM7RWUodXIsIkRpZG4ndCBmaW5kIGFueSBtYXRjaGVzIGFmdGVyIGZldGNoZXIgYWN0aW9uIik7bGV0IG5zPSsrQztFLnNldChQLG5zKTtsZXQgQmQ9dnMoY2UseGUuZGF0YSk7Uy5mZXRjaGVycy5zZXQoUCxCZCk7bGV0W0FpLEduXT1WMChlLmhpc3RvcnksUyx1cixjZSxEZSxCLHJlLEgsVixSLE8sUXQsYSx7W0cucm91dGUuaWRdOnhlLmRhdGF9LHZvaWQgMCk7R24uZmlsdGVyKGh0PT5odC5rZXkhPT1QKS5mb3JFYWNoKGh0PT57bGV0IEdvPWh0LmtleSxRbT1TLmZldGNoZXJzLmdldChHbyksVUM9dnModm9pZCAwLFFtP1FtLmRhdGE6dm9pZCAwKTtTLmZldGNoZXJzLnNldChHbyxVQyksWS5oYXMoR28pJiZvdChHbyksaHQuY29udHJvbGxlciYmWS5zZXQoR28saHQuY29udHJvbGxlcil9KSx5ZSh7ZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX0pO2xldCBZYT0oKT0+R24uZm9yRWFjaChodD0+b3QoaHQua2V5KSk7bGUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixZYSk7bGV0e3Jlc3VsdHM6V2QsbG9hZGVyUmVzdWx0czpVZCxmZXRjaGVyUmVzdWx0czpWZH09YXdhaXQgWXQoUy5tYXRjaGVzLHVyLEFpLEduLFplKTtpZihsZS5zaWduYWwuYWJvcnRlZClyZXR1cm47bGUuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixZYSksRS5kZWxldGUoUCksWS5kZWxldGUoUCksR24uZm9yRWFjaChodD0+WS5kZWxldGUoaHQua2V5KSk7bGV0IE1pPUowKFdkKTtpZihNaSl7aWYoTWkuaWR4Pj1BaS5sZW5ndGgpe2xldCBodD1HbltNaS5pZHgtQWkubGVuZ3RoXS5rZXk7Ty5hZGQoaHQpfXJldHVybiBKZShTLE1pLnJlc3VsdCl9bGV0e2xvYWRlckRhdGE6SWUsZXJyb3JzOkFufT1ZMChTLFMubWF0Y2hlcyxBaSxVZCx2b2lkIDAsR24sVmQsYWUpO2lmKFMuZmV0Y2hlcnMuaGFzKFApKXtsZXQgaHQ9YW8oeGUuZGF0YSk7Uy5mZXRjaGVycy5zZXQoUCxodCl9dHMobnMpLFMubmF2aWdhdGlvbi5zdGF0ZT09PSJsb2FkaW5nIiYmbnM+JD8oRWUoaywiRXhwZWN0ZWQgcGVuZGluZyBhY3Rpb24iKSxUJiZULmFib3J0KCksU2UoUy5uYXZpZ2F0aW9uLmxvY2F0aW9uLHttYXRjaGVzOnVyLGxvYWRlckRhdGE6SWUsZXJyb3JzOkFuLGZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9KSk6KHllKHtlcnJvcnM6QW4sbG9hZGVyRGF0YTpYMChTLmxvYWRlckRhdGEsSWUsdXIsQW4pLGZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9KSxCPSExKX1hc3luYyBmdW5jdGlvbiBtdChQLEwseixHLG5lLHZlLGNlKXtsZXQgdWU9Uy5mZXRjaGVycy5nZXQoUCk7YXQoUCx2cyhjZSx1ZT91ZS5kYXRhOnZvaWQgMCkse2ZsdXNoU3luYzp2ZX0pO2xldCBsZT1uZXcgQWJvcnRDb250cm9sbGVyLGtlPW1zKGUuaGlzdG9yeSx6LGxlLnNpZ25hbCk7WS5zZXQoUCxsZSk7bGV0IEF0PUMseGU9YXdhaXQgZ3MoImxvYWRlciIsa2UsRyxuZSxpLG8sYSk7aWYocmkoeGUpJiYoeGU9YXdhaXQgaEMoeGUsa2Uuc2lnbmFsLCEwKXx8eGUpLFkuZ2V0KFApPT09bGUmJlkuZGVsZXRlKFApLCFrZS5zaWduYWwuYWJvcnRlZCl7aWYoVi5oYXMoUCkpe2F0KFAsYW8odm9pZCAwKSk7cmV0dXJufWlmKHlsKHhlKSlpZigkPkF0KXthdChQLGFvKHZvaWQgMCkpO3JldHVybn1lbHNle08uYWRkKFApLGF3YWl0IEplKFMseGUpO3JldHVybn1pZihYcyh4ZSkpe1N0KFAsTCx4ZS5lcnJvcik7cmV0dXJufUVlKCFyaSh4ZSksIlVuaGFuZGxlZCBmZXRjaGVyIGRlZmVycmVkIGRhdGEiKSxhdChQLGFvKHhlLmRhdGEpKX19YXN5bmMgZnVuY3Rpb24gSmUoUCxMLHope2xldHtzdWJtaXNzaW9uOkcsZmV0Y2hlclN1Ym1pc3Npb246bmUscmVwbGFjZTp2ZX09ej09PXZvaWQgMD97fTp6O0wucmV2YWxpZGF0ZSYmKEI9ITApO2xldCBjZT1UYShQLmxvY2F0aW9uLEwubG9jYXRpb24se19pc1JlZGlyZWN0OiEwfSk7aWYoRWUoY2UsIkV4cGVjdGVkIGEgbG9jYXRpb24gb24gdGhlIHJlZGlyZWN0IG5hdmlnYXRpb24iKSxuKXtsZXQgRGU9ITE7aWYoTC5yZWxvYWREb2N1bWVudClEZT0hMDtlbHNlIGlmKHVDLnRlc3QoTC5sb2NhdGlvbikpe2NvbnN0IFplPWUuaGlzdG9yeS5jcmVhdGVVUkwoTC5sb2NhdGlvbik7RGU9WmUub3JpZ2luIT09dC5sb2NhdGlvbi5vcmlnaW58fEthKFplLnBhdGhuYW1lLGEpPT1udWxsfWlmKERlKXt2ZT90LmxvY2F0aW9uLnJlcGxhY2UoTC5sb2NhdGlvbik6dC5sb2NhdGlvbi5hc3NpZ24oTC5sb2NhdGlvbik7cmV0dXJufX1UPW51bGw7bGV0IHVlPXZlPT09ITA/dXQuUmVwbGFjZTp1dC5QdXNoLHtmb3JtTWV0aG9kOmxlLGZvcm1BY3Rpb246a2UsZm9ybUVuY1R5cGU6QXR9PVAubmF2aWdhdGlvbjshRyYmIW5lJiZsZSYma2UmJkF0JiYoRz1xMChQLm5hdmlnYXRpb24pKTtsZXQgeGU9R3x8bmU7aWYoY00uaGFzKEwuc3RhdHVzKSYmeGUmJnFuKHhlLmZvcm1NZXRob2QpKWF3YWl0IEZlKHVlLGNlLHtzdWJtaXNzaW9uOmx0KHt9LHhlLHtmb3JtQWN0aW9uOkwubG9jYXRpb259KSxwcmV2ZW50U2Nyb2xsUmVzZXQ6Yn0pO2Vsc2V7bGV0IERlPWpmKGNlLEcpO2F3YWl0IEZlKHVlLGNlLHtvdmVycmlkZU5hdmlnYXRpb246RGUsZmV0Y2hlclN1Ym1pc3Npb246bmUscHJldmVudFNjcm9sbFJlc2V0OmJ9KX19YXN5bmMgZnVuY3Rpb24gWXQoUCxMLHosRyxuZSl7bGV0IHZlPWF3YWl0IFByb21pc2UuYWxsKFsuLi56Lm1hcChsZT0+Z3MoImxvYWRlciIsbmUsbGUsTCxpLG8sYSkpLC4uLkcubWFwKGxlPT5sZS5tYXRjaGVzJiZsZS5tYXRjaCYmbGUuY29udHJvbGxlcj9ncygibG9hZGVyIixtcyhlLmhpc3RvcnksbGUucGF0aCxsZS5jb250cm9sbGVyLnNpZ25hbCksbGUubWF0Y2gsbGUubWF0Y2hlcyxpLG8sYSk6e3R5cGU6Y3QuZXJyb3IsZXJyb3I6TW4oNDA0LHtwYXRobmFtZTpsZS5wYXRofSl9KV0pLGNlPXZlLnNsaWNlKDAsei5sZW5ndGgpLHVlPXZlLnNsaWNlKHoubGVuZ3RoKTtyZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoW1owKFAseixjZSxjZS5tYXAoKCk9Pm5lLnNpZ25hbCksITEsUy5sb2FkZXJEYXRhKSxaMChQLEcubWFwKGxlPT5sZS5tYXRjaCksdWUsRy5tYXAobGU9PmxlLmNvbnRyb2xsZXI/bGUuY29udHJvbGxlci5zaWduYWw6bnVsbCksITApXSkse3Jlc3VsdHM6dmUsbG9hZGVyUmVzdWx0czpjZSxmZXRjaGVyUmVzdWx0czp1ZX19ZnVuY3Rpb24gZG4oKXtCPSEwLHJlLnB1c2goLi4uRmQoKSksUi5mb3JFYWNoKChQLEwpPT57WS5oYXMoTCkmJihILnB1c2goTCksb3QoTCkpfSl9ZnVuY3Rpb24gYXQoUCxMLHope3o9PT12b2lkIDAmJih6PXt9KSxTLmZldGNoZXJzLnNldChQLEwpLHllKHtmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfSx7Zmx1c2hTeW5jOih6JiZ6LmZsdXNoU3luYyk9PT0hMH0pfWZ1bmN0aW9uIFN0KFAsTCx6LEcpe0c9PT12b2lkIDAmJihHPXt9KTtsZXQgbmU9WXMoUy5tYXRjaGVzLEwpO3huKFApLHllKHtlcnJvcnM6e1tuZS5yb3V0ZS5pZF06en0sZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX0se2ZsdXNoU3luYzooRyYmRy5mbHVzaFN5bmMpPT09ITB9KX1mdW5jdGlvbiBYdChQKXtyZXR1cm4gdS52N19mZXRjaGVyUGVyc2lzdCYmKEYuc2V0KFAsKEYuZ2V0KFApfHwwKSsxKSxWLmhhcyhQKSYmVi5kZWxldGUoUCkpLFMuZmV0Y2hlcnMuZ2V0KFApfHxkTX1mdW5jdGlvbiB4bihQKXtsZXQgTD1TLmZldGNoZXJzLmdldChQKTtZLmhhcyhQKSYmIShMJiZMLnN0YXRlPT09ImxvYWRpbmciJiZFLmhhcyhQKSkmJm90KFApLFIuZGVsZXRlKFApLEUuZGVsZXRlKFApLE8uZGVsZXRlKFApLFYuZGVsZXRlKFApLFMuZmV0Y2hlcnMuZGVsZXRlKFApfWZ1bmN0aW9uIE9yKFApe2lmKHUudjdfZmV0Y2hlclBlcnNpc3Qpe2xldCBMPShGLmdldChQKXx8MCktMTtMPD0wPyhGLmRlbGV0ZShQKSxWLmFkZChQKSk6Ri5zZXQoUCxMKX1lbHNlIHhuKFApO3llKHtmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfSl9ZnVuY3Rpb24gb3QoUCl7bGV0IEw9WS5nZXQoUCk7RWUoTCwiRXhwZWN0ZWQgZmV0Y2ggY29udHJvbGxlcjogIitQKSxMLmFib3J0KCksWS5kZWxldGUoUCl9ZnVuY3Rpb24gYXIoUCl7Zm9yKGxldCBMIG9mIFApe2xldCB6PVh0KEwpLEc9YW8oei5kYXRhKTtTLmZldGNoZXJzLnNldChMLEcpfX1mdW5jdGlvbiBLbygpe2xldCBQPVtdLEw9ITE7Zm9yKGxldCB6IG9mIE8pe2xldCBHPVMuZmV0Y2hlcnMuZ2V0KHopO0VlKEcsIkV4cGVjdGVkIGZldGNoZXI6ICIreiksRy5zdGF0ZT09PSJsb2FkaW5nIiYmKE8uZGVsZXRlKHopLFAucHVzaCh6KSxMPSEwKX1yZXR1cm4gYXIoUCksTH1mdW5jdGlvbiB0cyhQKXtsZXQgTD1bXTtmb3IobGV0W3osR11vZiBFKWlmKEc8UCl7bGV0IG5lPVMuZmV0Y2hlcnMuZ2V0KHopO0VlKG5lLCJFeHBlY3RlZCBmZXRjaGVyOiAiK3opLG5lLnN0YXRlPT09ImxvYWRpbmciJiYob3QoeiksRS5kZWxldGUoeiksTC5wdXNoKHopKX1yZXR1cm4gYXIoTCksTC5sZW5ndGg+MH1mdW5jdGlvbiB6QyhQLEwpe2xldCB6PVMuYmxvY2tlcnMuZ2V0KFApfHxwcztyZXR1cm4gb2UuZ2V0KFApIT09TCYmb2Uuc2V0KFAsTCksen1mdW5jdGlvbiBLbShQKXtTLmJsb2NrZXJzLmRlbGV0ZShQKSxvZS5kZWxldGUoUCl9ZnVuY3Rpb24gR2EoUCxMKXtsZXQgej1TLmJsb2NrZXJzLmdldChQKXx8cHM7RWUoei5zdGF0ZT09PSJ1bmJsb2NrZWQiJiZMLnN0YXRlPT09ImJsb2NrZWQifHx6LnN0YXRlPT09ImJsb2NrZWQiJiZMLnN0YXRlPT09ImJsb2NrZWQifHx6LnN0YXRlPT09ImJsb2NrZWQiJiZMLnN0YXRlPT09InByb2NlZWRpbmcifHx6LnN0YXRlPT09ImJsb2NrZWQiJiZMLnN0YXRlPT09InVuYmxvY2tlZCJ8fHouc3RhdGU9PT0icHJvY2VlZGluZyImJkwuc3RhdGU9PT0idW5ibG9ja2VkIiwiSW52YWxpZCBibG9ja2VyIHN0YXRlIHRyYW5zaXRpb246ICIrei5zdGF0ZSsiIC0+ICIrTC5zdGF0ZSk7bGV0IEc9bmV3IE1hcChTLmJsb2NrZXJzKTtHLnNldChQLEwpLHllKHtibG9ja2VyczpHfSl9ZnVuY3Rpb24gR20oUCl7bGV0e2N1cnJlbnRMb2NhdGlvbjpMLG5leHRMb2NhdGlvbjp6LGhpc3RvcnlBY3Rpb246R309UDtpZihvZS5zaXplPT09MClyZXR1cm47b2Uuc2l6ZT4xJiZ3aSghMSwiQSByb3V0ZXIgb25seSBzdXBwb3J0cyBvbmUgYmxvY2tlciBhdCBhIHRpbWUiKTtsZXQgbmU9QXJyYXkuZnJvbShvZS5lbnRyaWVzKCkpLFt2ZSxjZV09bmVbbmUubGVuZ3RoLTFdLHVlPVMuYmxvY2tlcnMuZ2V0KHZlKTtpZighKHVlJiZ1ZS5zdGF0ZT09PSJwcm9jZWVkaW5nIikmJmNlKHtjdXJyZW50TG9jYXRpb246TCxuZXh0TG9jYXRpb246eixoaXN0b3J5QWN0aW9uOkd9KSlyZXR1cm4gdmV9ZnVuY3Rpb24gRmQoUCl7bGV0IEw9W107cmV0dXJuIGFlLmZvckVhY2goKHosRyk9PnsoIVB8fFAoRykpJiYoei5jYW5jZWwoKSxMLnB1c2goRyksYWUuZGVsZXRlKEcpKX0pLEx9ZnVuY3Rpb24gRkMoUCxMLHope2lmKGY9UCxnPUwsaD16fHxudWxsLCFtJiZTLm5hdmlnYXRpb249PT1JZil7bT0hMDtsZXQgRz1YbShTLmxvY2F0aW9uLFMubWF0Y2hlcyk7RyE9bnVsbCYmeWUoe3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpHfSl9cmV0dXJuKCk9PntmPW51bGwsZz1udWxsLGg9bnVsbH19ZnVuY3Rpb24gWW0oUCxMKXtyZXR1cm4gaCYmaChQLEwubWFwKEc9PkYzKEcsUy5sb2FkZXJEYXRhKSkpfHxQLmtleX1mdW5jdGlvbiBCQyhQLEwpe2lmKGYmJmcpe2xldCB6PVltKFAsTCk7Zlt6XT1nKCl9fWZ1bmN0aW9uIFhtKFAsTCl7aWYoZil7bGV0IHo9WW0oUCxMKSxHPWZbel07aWYodHlwZW9mIEc9PSJudW1iZXIiKXJldHVybiBHfXJldHVybiBudWxsfWZ1bmN0aW9uIFdDKFApe2k9e30scz1PcChQLG8sdm9pZCAwLGkpfXJldHVybiB4PXtnZXQgYmFzZW5hbWUoKXtyZXR1cm4gYX0sZ2V0IHN0YXRlKCl7cmV0dXJuIFN9LGdldCByb3V0ZXMoKXtyZXR1cm4gbH0sZ2V0IHdpbmRvdygpe3JldHVybiB0fSxpbml0aWFsaXplOl9lLHN1YnNjcmliZTpOZSxlbmFibGVTY3JvbGxSZXN0b3JhdGlvbjpGQyxuYXZpZ2F0ZTpwZSxmZXRjaDpLbixyZXZhbGlkYXRlOmJlLGNyZWF0ZUhyZWY6UD0+ZS5oaXN0b3J5LmNyZWF0ZUhyZWYoUCksZW5jb2RlTG9jYXRpb246UD0+ZS5oaXN0b3J5LmVuY29kZUxvY2F0aW9uKFApLGdldEZldGNoZXI6WHQsZGVsZXRlRmV0Y2hlcjpPcixkaXNwb3NlOlEsZ2V0QmxvY2tlcjp6QyxkZWxldGVCbG9ja2VyOkttLF9pbnRlcm5hbEZldGNoQ29udHJvbGxlcnM6WSxfaW50ZXJuYWxBY3RpdmVEZWZlcnJlZHM6YWUsX2ludGVybmFsU2V0Um91dGVzOldDfSx4fWZ1bmN0aW9uIHBNKGUpe3JldHVybiBlIT1udWxsJiYoImZvcm1EYXRhImluIGUmJmUuZm9ybURhdGEhPW51bGx8fCJib2R5ImluIGUmJmUuYm9keSE9PXZvaWQgMCl9ZnVuY3Rpb24gQXAoZSx0LG4scixvLGksbCl7bGV0IHMsYTtpZihpKXtzPVtdO2ZvcihsZXQgYyBvZiB0KWlmKHMucHVzaChjKSxjLnJvdXRlLmlkPT09aSl7YT1jO2JyZWFrfX1lbHNlIHM9dCxhPXRbdC5sZW5ndGgtMV07bGV0IHU9bEMob3x8Ii4iLGlDKHMpLEthKGUucGF0aG5hbWUsbil8fGUucGF0aG5hbWUsbD09PSJwYXRoIik7cmV0dXJuIG89PW51bGwmJih1LnNlYXJjaD1lLnNlYXJjaCx1Lmhhc2g9ZS5oYXNoKSwobz09bnVsbHx8bz09PSIifHxvPT09Ii4iKSYmYSYmYS5yb3V0ZS5pbmRleCYmIWptKHUuc2VhcmNoKSYmKHUuc2VhcmNoPXUuc2VhcmNoP3Uuc2VhcmNoLnJlcGxhY2UoL15cPy8sIj9pbmRleCYiKToiP2luZGV4IiksciYmbiE9PSIvIiYmKHUucGF0aG5hbWU9dS5wYXRobmFtZT09PSIvIj9uOlJvKFtuLHUucGF0aG5hbWVdKSksSGEodSl9ZnVuY3Rpb24gVTAoZSx0LG4scil7aWYoIXJ8fCFwTShyKSlyZXR1cm57cGF0aDpufTtpZihyLmZvcm1NZXRob2QmJiFfTShyLmZvcm1NZXRob2QpKXJldHVybntwYXRoOm4sZXJyb3I6TW4oNDA1LHttZXRob2Q6ci5mb3JtTWV0aG9kfSl9O2xldCBvPSgpPT4oe3BhdGg6bixlcnJvcjpNbig0MDAse3R5cGU6ImludmFsaWQtYm9keSJ9KX0pLGk9ci5mb3JtTWV0aG9kfHwiZ2V0IixsPWU/aS50b1VwcGVyQ2FzZSgpOmkudG9Mb3dlckNhc2UoKSxzPWZDKG4pO2lmKHIuYm9keSE9PXZvaWQgMCl7aWYoci5mb3JtRW5jVHlwZT09PSJ0ZXh0L3BsYWluIil7aWYoIXFuKGwpKXJldHVybiBvKCk7bGV0IGY9dHlwZW9mIHIuYm9keT09InN0cmluZyI/ci5ib2R5OnIuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxyLmJvZHkgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXM/QXJyYXkuZnJvbShyLmJvZHkuZW50cmllcygpKS5yZWR1Y2UoKGgsZyk9PntsZXRbbSxfXT1nO3JldHVybiIiK2grbSsiPSIrXytgCmB9LCIiKTpTdHJpbmcoci5ib2R5KTtyZXR1cm57cGF0aDpuLHN1Ym1pc3Npb246e2Zvcm1NZXRob2Q6bCxmb3JtQWN0aW9uOnMsZm9ybUVuY1R5cGU6ci5mb3JtRW5jVHlwZSxmb3JtRGF0YTp2b2lkIDAsanNvbjp2b2lkIDAsdGV4dDpmfX19ZWxzZSBpZihyLmZvcm1FbmNUeXBlPT09ImFwcGxpY2F0aW9uL2pzb24iKXtpZighcW4obCkpcmV0dXJuIG8oKTt0cnl7bGV0IGY9dHlwZW9mIHIuYm9keT09InN0cmluZyI/SlNPTi5wYXJzZShyLmJvZHkpOnIuYm9keTtyZXR1cm57cGF0aDpuLHN1Ym1pc3Npb246e2Zvcm1NZXRob2Q6bCxmb3JtQWN0aW9uOnMsZm9ybUVuY1R5cGU6ci5mb3JtRW5jVHlwZSxmb3JtRGF0YTp2b2lkIDAsanNvbjpmLHRleHQ6dm9pZCAwfX19Y2F0Y2h7cmV0dXJuIG8oKX19fUVlKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiwiRm9ybURhdGEgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Iik7bGV0IGEsdTtpZihyLmZvcm1EYXRhKWE9TXAoci5mb3JtRGF0YSksdT1yLmZvcm1EYXRhO2Vsc2UgaWYoci5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpYT1NcChyLmJvZHkpLHU9ci5ib2R5O2Vsc2UgaWYoci5ib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKWE9ci5ib2R5LHU9RzAoYSk7ZWxzZSBpZihyLmJvZHk9PW51bGwpYT1uZXcgVVJMU2VhcmNoUGFyYW1zLHU9bmV3IEZvcm1EYXRhO2Vsc2UgdHJ5e2E9bmV3IFVSTFNlYXJjaFBhcmFtcyhyLmJvZHkpLHU9RzAoYSl9Y2F0Y2h7cmV0dXJuIG8oKX1sZXQgYz17Zm9ybU1ldGhvZDpsLGZvcm1BY3Rpb246cyxmb3JtRW5jVHlwZTpyJiZyLmZvcm1FbmNUeXBlfHwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixmb3JtRGF0YTp1LGpzb246dm9pZCAwLHRleHQ6dm9pZCAwfTtpZihxbihjLmZvcm1NZXRob2QpKXJldHVybntwYXRoOm4sc3VibWlzc2lvbjpjfTtsZXQgZD1ubyhuKTtyZXR1cm4gdCYmZC5zZWFyY2gmJmptKGQuc2VhcmNoKSYmYS5hcHBlbmQoImluZGV4IiwiIiksZC5zZWFyY2g9Ij8iK2Ese3BhdGg6SGEoZCksc3VibWlzc2lvbjpjfX1mdW5jdGlvbiBnTShlLHQpe2xldCBuPWU7aWYodCl7bGV0IHI9ZS5maW5kSW5kZXgobz0+by5yb3V0ZS5pZD09PXQpO3I+PTAmJihuPWUuc2xpY2UoMCxyKSl9cmV0dXJuIG59ZnVuY3Rpb24gVjAoZSx0LG4scixvLGksbCxzLGEsdSxjLGQsZixoLGcpe2xldCBtPWc/T2JqZWN0LnZhbHVlcyhnKVswXTpoP09iamVjdC52YWx1ZXMoaClbMF06dm9pZCAwLF89ZS5jcmVhdGVVUkwodC5sb2NhdGlvbiksdj1lLmNyZWF0ZVVSTChvKSx5PWc/T2JqZWN0LmtleXMoZylbMF06dm9pZCAwLFM9Z00obix5KS5maWx0ZXIoKGIsVCk9PntpZihiLnJvdXRlLmxhenkpcmV0dXJuITA7aWYoYi5yb3V0ZS5sb2FkZXI9PW51bGwpcmV0dXJuITE7aWYobU0odC5sb2FkZXJEYXRhLHQubWF0Y2hlc1tUXSxiKXx8bC5zb21lKE09Pk09PT1iLnJvdXRlLmlkKSlyZXR1cm4hMDtsZXQgTj10Lm1hdGNoZXNbVF0sRD1iO3JldHVybiBIMChiLGx0KHtjdXJyZW50VXJsOl8sY3VycmVudFBhcmFtczpOLnBhcmFtcyxuZXh0VXJsOnYsbmV4dFBhcmFtczpELnBhcmFtc30scix7YWN0aW9uUmVzdWx0Om0sZGVmYXVsdFNob3VsZFJldmFsaWRhdGU6aXx8Xy5wYXRobmFtZStfLnNlYXJjaD09PXYucGF0aG5hbWUrdi5zZWFyY2h8fF8uc2VhcmNoIT09di5zZWFyY2h8fGRDKE4sRCl9KSl9KSxrPVtdO3JldHVybiB1LmZvckVhY2goKGIsVCk9PntpZighbi5zb21lKEI9PkIucm91dGUuaWQ9PT1iLnJvdXRlSWQpfHxhLmhhcyhUKSlyZXR1cm47bGV0IE49c2woZCxiLnBhdGgsZik7aWYoIU4pe2sucHVzaCh7a2V5OlQscm91dGVJZDpiLnJvdXRlSWQscGF0aDpiLnBhdGgsbWF0Y2hlczpudWxsLG1hdGNoOm51bGwsY29udHJvbGxlcjpudWxsfSk7cmV0dXJufWxldCBEPXQuZmV0Y2hlcnMuZ2V0KFQpLE09THAoTixiLnBhdGgpLGo9ITE7Yy5oYXMoVCk/aj0hMTpzLmluY2x1ZGVzKFQpP2o9ITA6RCYmRC5zdGF0ZSE9PSJpZGxlIiYmRC5kYXRhPT09dm9pZCAwP2o9aTpqPUgwKE0sbHQoe2N1cnJlbnRVcmw6XyxjdXJyZW50UGFyYW1zOnQubWF0Y2hlc1t0Lm1hdGNoZXMubGVuZ3RoLTFdLnBhcmFtcyxuZXh0VXJsOnYsbmV4dFBhcmFtczpuW24ubGVuZ3RoLTFdLnBhcmFtc30scix7YWN0aW9uUmVzdWx0Om0sZGVmYXVsdFNob3VsZFJldmFsaWRhdGU6aX0pKSxqJiZrLnB1c2goe2tleTpULHJvdXRlSWQ6Yi5yb3V0ZUlkLHBhdGg6Yi5wYXRoLG1hdGNoZXM6TixtYXRjaDpNLGNvbnRyb2xsZXI6bmV3IEFib3J0Q29udHJvbGxlcn0pfSksW1Msa119ZnVuY3Rpb24gbU0oZSx0LG4pe2xldCByPSF0fHxuLnJvdXRlLmlkIT09dC5yb3V0ZS5pZCxvPWVbbi5yb3V0ZS5pZF09PT12b2lkIDA7cmV0dXJuIHJ8fG99ZnVuY3Rpb24gZEMoZSx0KXtsZXQgbj1lLnJvdXRlLnBhdGg7cmV0dXJuIGUucGF0aG5hbWUhPT10LnBhdGhuYW1lfHxuIT1udWxsJiZuLmVuZHNXaXRoKCIqIikmJmUucGFyYW1zWyIqIl0hPT10LnBhcmFtc1siKiJdfWZ1bmN0aW9uIEgwKGUsdCl7aWYoZS5yb3V0ZS5zaG91bGRSZXZhbGlkYXRlKXtsZXQgbj1lLnJvdXRlLnNob3VsZFJldmFsaWRhdGUodCk7aWYodHlwZW9mIG49PSJib29sZWFuIilyZXR1cm4gbn1yZXR1cm4gdC5kZWZhdWx0U2hvdWxkUmV2YWxpZGF0ZX1hc3luYyBmdW5jdGlvbiBLMChlLHQsbil7aWYoIWUubGF6eSlyZXR1cm47bGV0IHI9YXdhaXQgZS5sYXp5KCk7aWYoIWUubGF6eSlyZXR1cm47bGV0IG89bltlLmlkXTtFZShvLCJObyByb3V0ZSBmb3VuZCBpbiBtYW5pZmVzdCIpO2xldCBpPXt9O2ZvcihsZXQgbCBpbiByKXtsZXQgYT1vW2xdIT09dm9pZCAwJiZsIT09Imhhc0Vycm9yQm91bmRhcnkiO3dpKCFhLCdSb3V0ZSAiJytvLmlkKyciIGhhcyBhIHN0YXRpYyBwcm9wZXJ0eSAiJytsKyciIGRlZmluZWQgYnV0IGl0cyBsYXp5IGZ1bmN0aW9uIGlzIGFsc28gcmV0dXJuaW5nIGEgdmFsdWUgZm9yIHRoaXMgcHJvcGVydHkuICcrKCdUaGUgbGF6eSByb3V0ZSBwcm9wZXJ0eSAiJytsKyciIHdpbGwgYmUgaWdub3JlZC4nKSksIWEmJiFqMy5oYXMobCkmJihpW2xdPXJbbF0pfU9iamVjdC5hc3NpZ24obyxpKSxPYmplY3QuYXNzaWduKG8sbHQoe30sdChvKSx7bGF6eTp2b2lkIDB9KSl9YXN5bmMgZnVuY3Rpb24gZ3MoZSx0LG4scixvLGksbCxzKXtzPT09dm9pZCAwJiYocz17fSk7bGV0IGEsdSxjLGQ9Zz0+e2xldCBtLF89bmV3IFByb21pc2UoKHYseSk9Pm09eSk7cmV0dXJuIGM9KCk9Pm0oKSx0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYyksUHJvbWlzZS5yYWNlKFtnKHtyZXF1ZXN0OnQscGFyYW1zOm4ucGFyYW1zLGNvbnRleHQ6cy5yZXF1ZXN0Q29udGV4dH0pLF9dKX07dHJ5e2xldCBnPW4ucm91dGVbZV07aWYobi5yb3V0ZS5sYXp5KWlmKGcpe2xldCBtLF89YXdhaXQgUHJvbWlzZS5hbGwoW2QoZykuY2F0Y2godj0+e209dn0pLEswKG4ucm91dGUsaSxvKV0pO2lmKG0pdGhyb3cgbTt1PV9bMF19ZWxzZSBpZihhd2FpdCBLMChuLnJvdXRlLGksbyksZz1uLnJvdXRlW2VdLGcpdT1hd2FpdCBkKGcpO2Vsc2UgaWYoZT09PSJhY3Rpb24iKXtsZXQgbT1uZXcgVVJMKHQudXJsKSxfPW0ucGF0aG5hbWUrbS5zZWFyY2g7dGhyb3cgTW4oNDA1LHttZXRob2Q6dC5tZXRob2QscGF0aG5hbWU6Xyxyb3V0ZUlkOm4ucm91dGUuaWR9KX1lbHNlIHJldHVybnt0eXBlOmN0LmRhdGEsZGF0YTp2b2lkIDB9O2Vsc2UgaWYoZyl1PWF3YWl0IGQoZyk7ZWxzZXtsZXQgbT1uZXcgVVJMKHQudXJsKSxfPW0ucGF0aG5hbWUrbS5zZWFyY2g7dGhyb3cgTW4oNDA0LHtwYXRobmFtZTpffSl9RWUodSE9PXZvaWQgMCwiWW91IGRlZmluZWQgIisoZT09PSJhY3Rpb24iPyJhbiBhY3Rpb24iOiJhIGxvYWRlciIpKyIgZm9yIHJvdXRlICIrKCciJytuLnJvdXRlLmlkKyJcIiBidXQgZGlkbid0IHJldHVybiBhbnl0aGluZyBmcm9tIHlvdXIgYCIrZSsiYCAiKSsiZnVuY3Rpb24uIFBsZWFzZSByZXR1cm4gYSB2YWx1ZSBvciBgbnVsbGAuIil9Y2F0Y2goZyl7YT1jdC5lcnJvcix1PWd9ZmluYWxseXtjJiZ0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYyl9aWYod00odSkpe2xldCBnPXUuc3RhdHVzO2lmKHVNLmhhcyhnKSl7bGV0IHY9dS5oZWFkZXJzLmdldCgiTG9jYXRpb24iKTtpZihFZSh2LCJSZWRpcmVjdHMgcmV0dXJuZWQvdGhyb3duIGZyb20gbG9hZGVycy9hY3Rpb25zIG11c3QgaGF2ZSBhIExvY2F0aW9uIGhlYWRlciIpLCF1Qy50ZXN0KHYpKXY9QXAobmV3IFVSTCh0LnVybCksci5zbGljZSgwLHIuaW5kZXhPZihuKSsxKSxsLCEwLHYpO2Vsc2UgaWYoIXMuaXNTdGF0aWNSZXF1ZXN0KXtsZXQgeT1uZXcgVVJMKHQudXJsKSx4PXYuc3RhcnRzV2l0aCgiLy8iKT9uZXcgVVJMKHkucHJvdG9jb2wrdik6bmV3IFVSTCh2KSxTPUthKHgucGF0aG5hbWUsbCkhPW51bGw7eC5vcmlnaW49PT15Lm9yaWdpbiYmUyYmKHY9eC5wYXRobmFtZSt4LnNlYXJjaCt4Lmhhc2gpfWlmKHMuaXNTdGF0aWNSZXF1ZXN0KXRocm93IHUuaGVhZGVycy5zZXQoIkxvY2F0aW9uIix2KSx1O3JldHVybnt0eXBlOmN0LnJlZGlyZWN0LHN0YXR1czpnLGxvY2F0aW9uOnYscmV2YWxpZGF0ZTp1LmhlYWRlcnMuZ2V0KCJYLVJlbWl4LVJldmFsaWRhdGUiKSE9PW51bGwscmVsb2FkRG9jdW1lbnQ6dS5oZWFkZXJzLmdldCgiWC1SZW1peC1SZWxvYWQtRG9jdW1lbnQiKSE9PW51bGx9fWlmKHMuaXNSb3V0ZVJlcXVlc3QpdGhyb3d7dHlwZTphPT09Y3QuZXJyb3I/Y3QuZXJyb3I6Y3QuZGF0YSxyZXNwb25zZTp1fTtsZXQgbSxfPXUuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpO3JldHVybiBfJiYvXGJhcHBsaWNhdGlvblwvanNvblxiLy50ZXN0KF8pP209YXdhaXQgdS5qc29uKCk6bT1hd2FpdCB1LnRleHQoKSxhPT09Y3QuZXJyb3I/e3R5cGU6YSxlcnJvcjpuZXcgSW0oZyx1LnN0YXR1c1RleHQsbSksaGVhZGVyczp1LmhlYWRlcnN9Ont0eXBlOmN0LmRhdGEsZGF0YTptLHN0YXR1c0NvZGU6dS5zdGF0dXMsaGVhZGVyczp1LmhlYWRlcnN9fWlmKGE9PT1jdC5lcnJvcilyZXR1cm57dHlwZTphLGVycm9yOnV9O2lmKHhNKHUpKXt2YXIgZixoO3JldHVybnt0eXBlOmN0LmRlZmVycmVkLGRlZmVycmVkRGF0YTp1LHN0YXR1c0NvZGU6KGY9dS5pbml0KT09bnVsbD92b2lkIDA6Zi5zdGF0dXMsaGVhZGVyczooKGg9dS5pbml0KT09bnVsbD92b2lkIDA6aC5oZWFkZXJzKSYmbmV3IEhlYWRlcnModS5pbml0LmhlYWRlcnMpfX1yZXR1cm57dHlwZTpjdC5kYXRhLGRhdGE6dX19ZnVuY3Rpb24gbXMoZSx0LG4scil7bGV0IG89ZS5jcmVhdGVVUkwoZkModCkpLnRvU3RyaW5nKCksaT17c2lnbmFsOm59O2lmKHImJnFuKHIuZm9ybU1ldGhvZCkpe2xldHtmb3JtTWV0aG9kOmwsZm9ybUVuY1R5cGU6c309cjtpLm1ldGhvZD1sLnRvVXBwZXJDYXNlKCkscz09PSJhcHBsaWNhdGlvbi9qc29uIj8oaS5oZWFkZXJzPW5ldyBIZWFkZXJzKHsiQ29udGVudC1UeXBlIjpzfSksaS5ib2R5PUpTT04uc3RyaW5naWZ5KHIuanNvbikpOnM9PT0idGV4dC9wbGFpbiI/aS5ib2R5PXIudGV4dDpzPT09ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCImJnIuZm9ybURhdGE/aS5ib2R5PU1wKHIuZm9ybURhdGEpOmkuYm9keT1yLmZvcm1EYXRhfXJldHVybiBuZXcgUmVxdWVzdChvLGkpfWZ1bmN0aW9uIE1wKGUpe2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGxldFtuLHJdb2YgZS5lbnRyaWVzKCkpdC5hcHBlbmQobix0eXBlb2Ygcj09InN0cmluZyI/cjpyLm5hbWUpO3JldHVybiB0fWZ1bmN0aW9uIEcwKGUpe2xldCB0PW5ldyBGb3JtRGF0YTtmb3IobGV0W24scl1vZiBlLmVudHJpZXMoKSl0LmFwcGVuZChuLHIpO3JldHVybiB0fWZ1bmN0aW9uIHZNKGUsdCxuLHIsbyl7bGV0IGk9e30sbD1udWxsLHMsYT0hMSx1PXt9O3JldHVybiBuLmZvckVhY2goKGMsZCk9PntsZXQgZj10W2RdLnJvdXRlLmlkO2lmKEVlKCF5bChjKSwiQ2Fubm90IGhhbmRsZSByZWRpcmVjdCByZXN1bHRzIGluIHByb2Nlc3NMb2FkZXJEYXRhIiksWHMoYykpe2xldCBoPVlzKGUsZiksZz1jLmVycm9yO3ImJihnPU9iamVjdC52YWx1ZXMocilbMF0scj12b2lkIDApLGw9bHx8e30sbFtoLnJvdXRlLmlkXT09bnVsbCYmKGxbaC5yb3V0ZS5pZF09ZyksaVtmXT12b2lkIDAsYXx8KGE9ITAscz1zQyhjLmVycm9yKT9jLmVycm9yLnN0YXR1czo1MDApLGMuaGVhZGVycyYmKHVbZl09Yy5oZWFkZXJzKX1lbHNlIHJpKGMpPyhvLnNldChmLGMuZGVmZXJyZWREYXRhKSxpW2ZdPWMuZGVmZXJyZWREYXRhLmRhdGEpOmlbZl09Yy5kYXRhLGMuc3RhdHVzQ29kZSE9bnVsbCYmYy5zdGF0dXNDb2RlIT09MjAwJiYhYSYmKHM9Yy5zdGF0dXNDb2RlKSxjLmhlYWRlcnMmJih1W2ZdPWMuaGVhZGVycyl9KSxyJiYobD1yLGlbT2JqZWN0LmtleXMocilbMF1dPXZvaWQgMCkse2xvYWRlckRhdGE6aSxlcnJvcnM6bCxzdGF0dXNDb2RlOnN8fDIwMCxsb2FkZXJIZWFkZXJzOnV9fWZ1bmN0aW9uIFkwKGUsdCxuLHIsbyxpLGwscyl7bGV0e2xvYWRlckRhdGE6YSxlcnJvcnM6dX09dk0odCxuLHIsbyxzKTtmb3IobGV0IGM9MDtjPGkubGVuZ3RoO2MrKyl7bGV0e2tleTpkLG1hdGNoOmYsY29udHJvbGxlcjpofT1pW2NdO0VlKGwhPT12b2lkIDAmJmxbY10hPT12b2lkIDAsIkRpZCBub3QgZmluZCBjb3JyZXNwb25kaW5nIGZldGNoZXIgcmVzdWx0Iik7bGV0IGc9bFtjXTtpZighKGgmJmguc2lnbmFsLmFib3J0ZWQpKWlmKFhzKGcpKXtsZXQgbT1ZcyhlLm1hdGNoZXMsZj09bnVsbD92b2lkIDA6Zi5yb3V0ZS5pZCk7dSYmdVttLnJvdXRlLmlkXXx8KHU9bHQoe30sdSx7W20ucm91dGUuaWRdOmcuZXJyb3J9KSksZS5mZXRjaGVycy5kZWxldGUoZCl9ZWxzZSBpZih5bChnKSlFZSghMSwiVW5oYW5kbGVkIGZldGNoZXIgcmV2YWxpZGF0aW9uIHJlZGlyZWN0Iik7ZWxzZSBpZihyaShnKSlFZSghMSwiVW5oYW5kbGVkIGZldGNoZXIgZGVmZXJyZWQgZGF0YSIpO2Vsc2V7bGV0IG09YW8oZy5kYXRhKTtlLmZldGNoZXJzLnNldChkLG0pfX1yZXR1cm57bG9hZGVyRGF0YTphLGVycm9yczp1fX1mdW5jdGlvbiBYMChlLHQsbixyKXtsZXQgbz1sdCh7fSx0KTtmb3IobGV0IGkgb2Ygbil7bGV0IGw9aS5yb3V0ZS5pZDtpZih0Lmhhc093blByb3BlcnR5KGwpP3RbbF0hPT12b2lkIDAmJihvW2xdPXRbbF0pOmVbbF0hPT12b2lkIDAmJmkucm91dGUubG9hZGVyJiYob1tsXT1lW2xdKSxyJiZyLmhhc093blByb3BlcnR5KGwpKWJyZWFrfXJldHVybiBvfWZ1bmN0aW9uIFlzKGUsdCl7cmV0dXJuKHQ/ZS5zbGljZSgwLGUuZmluZEluZGV4KHI9PnIucm91dGUuaWQ9PT10KSsxKTpbLi4uZV0pLnJldmVyc2UoKS5maW5kKHI9PnIucm91dGUuaGFzRXJyb3JCb3VuZGFyeT09PSEwKXx8ZVswXX1mdW5jdGlvbiBRMChlKXtsZXQgdD1lLmxlbmd0aD09PTE/ZVswXTplLmZpbmQobj0+bi5pbmRleHx8IW4ucGF0aHx8bi5wYXRoPT09Ii8iKXx8e2lkOiJfX3NoaW0tZXJyb3Itcm91dGVfXyJ9O3JldHVybnttYXRjaGVzOlt7cGFyYW1zOnt9LHBhdGhuYW1lOiIiLHBhdGhuYW1lQmFzZToiIixyb3V0ZTp0fV0scm91dGU6dH19ZnVuY3Rpb24gTW4oZSx0KXtsZXR7cGF0aG5hbWU6bixyb3V0ZUlkOnIsbWV0aG9kOm8sdHlwZTppfT10PT09dm9pZCAwP3t9OnQsbD0iVW5rbm93biBTZXJ2ZXIgRXJyb3IiLHM9IlVua25vd24gQHJlbWl4LXJ1bi9yb3V0ZXIgZXJyb3IiO3JldHVybiBlPT09NDAwPyhsPSJCYWQgUmVxdWVzdCIsbyYmbiYmcj9zPSJZb3UgbWFkZSBhICIrbysnIHJlcXVlc3QgdG8gIicrbisnIiBidXQgJysoJ2RpZCBub3QgcHJvdmlkZSBhIGBsb2FkZXJgIGZvciByb3V0ZSAiJytyKyciLCAnKSsic28gdGhlcmUgaXMgbm8gd2F5IHRvIGhhbmRsZSB0aGUgcmVxdWVzdC4iOmk9PT0iZGVmZXItYWN0aW9uIj9zPSJkZWZlcigpIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYWN0aW9ucyI6aT09PSJpbnZhbGlkLWJvZHkiJiYocz0iVW5hYmxlIHRvIGVuY29kZSBzdWJtaXNzaW9uIGJvZHkiKSk6ZT09PTQwMz8obD0iRm9yYmlkZGVuIixzPSdSb3V0ZSAiJytyKyciIGRvZXMgbm90IG1hdGNoIFVSTCAiJytuKyciJyk6ZT09PTQwND8obD0iTm90IEZvdW5kIixzPSdObyByb3V0ZSBtYXRjaGVzIFVSTCAiJytuKyciJyk6ZT09PTQwNSYmKGw9Ik1ldGhvZCBOb3QgQWxsb3dlZCIsbyYmbiYmcj9zPSJZb3UgbWFkZSBhICIrby50b1VwcGVyQ2FzZSgpKycgcmVxdWVzdCB0byAiJytuKyciIGJ1dCAnKygnZGlkIG5vdCBwcm92aWRlIGFuIGBhY3Rpb25gIGZvciByb3V0ZSAiJytyKyciLCAnKSsic28gdGhlcmUgaXMgbm8gd2F5IHRvIGhhbmRsZSB0aGUgcmVxdWVzdC4iOm8mJihzPSdJbnZhbGlkIHJlcXVlc3QgbWV0aG9kICInK28udG9VcHBlckNhc2UoKSsnIicpKSxuZXcgSW0oZXx8NTAwLGwsbmV3IEVycm9yKHMpLCEwKX1mdW5jdGlvbiBKMChlKXtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl7bGV0IG49ZVt0XTtpZih5bChuKSlyZXR1cm57cmVzdWx0Om4saWR4OnR9fX1mdW5jdGlvbiBmQyhlKXtsZXQgdD10eXBlb2YgZT09InN0cmluZyI/bm8oZSk6ZTtyZXR1cm4gSGEobHQoe30sdCx7aGFzaDoiIn0pKX1mdW5jdGlvbiB5TShlLHQpe3JldHVybiBlLnBhdGhuYW1lIT09dC5wYXRobmFtZXx8ZS5zZWFyY2ghPT10LnNlYXJjaD8hMTplLmhhc2g9PT0iIj90Lmhhc2ghPT0iIjplLmhhc2g9PT10Lmhhc2g/ITA6dC5oYXNoIT09IiJ9ZnVuY3Rpb24gcmkoZSl7cmV0dXJuIGUudHlwZT09PWN0LmRlZmVycmVkfWZ1bmN0aW9uIFhzKGUpe3JldHVybiBlLnR5cGU9PT1jdC5lcnJvcn1mdW5jdGlvbiB5bChlKXtyZXR1cm4oZSYmZS50eXBlKT09PWN0LnJlZGlyZWN0fWZ1bmN0aW9uIHhNKGUpe2xldCB0PWU7cmV0dXJuIHQmJnR5cGVvZiB0PT0ib2JqZWN0IiYmdHlwZW9mIHQuZGF0YT09Im9iamVjdCImJnR5cGVvZiB0LnN1YnNjcmliZT09ImZ1bmN0aW9uIiYmdHlwZW9mIHQuY2FuY2VsPT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC5yZXNvbHZlRGF0YT09ImZ1bmN0aW9uIn1mdW5jdGlvbiB3TShlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGUuc3RhdHVzPT0ibnVtYmVyIiYmdHlwZW9mIGUuc3RhdHVzVGV4dD09InN0cmluZyImJnR5cGVvZiBlLmhlYWRlcnM9PSJvYmplY3QiJiZ0eXBlb2YgZS5ib2R5PCJ1In1mdW5jdGlvbiBfTShlKXtyZXR1cm4gYU0uaGFzKGUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gcW4oZSl7cmV0dXJuIGxNLmhhcyhlLnRvTG93ZXJDYXNlKCkpfWFzeW5jIGZ1bmN0aW9uIFowKGUsdCxuLHIsbyxpKXtmb3IobGV0IGw9MDtsPG4ubGVuZ3RoO2wrKyl7bGV0IHM9bltsXSxhPXRbbF07aWYoIWEpY29udGludWU7bGV0IHU9ZS5maW5kKGQ9PmQucm91dGUuaWQ9PT1hLnJvdXRlLmlkKSxjPXUhPW51bGwmJiFkQyh1LGEpJiYoaSYmaVthLnJvdXRlLmlkXSkhPT12b2lkIDA7aWYocmkocykmJihvfHxjKSl7bGV0IGQ9cltsXTtFZShkLCJFeHBlY3RlZCBhbiBBYm9ydFNpZ25hbCBmb3IgcmV2YWxpZGF0aW5nIGZldGNoZXIgZGVmZXJyZWQgcmVzdWx0IiksYXdhaXQgaEMocyxkLG8pLnRoZW4oZj0+e2YmJihuW2xdPWZ8fG5bbF0pfSl9fX1hc3luYyBmdW5jdGlvbiBoQyhlLHQsbil7aWYobj09PXZvaWQgMCYmKG49ITEpLCFhd2FpdCBlLmRlZmVycmVkRGF0YS5yZXNvbHZlRGF0YSh0KSl7aWYobil0cnl7cmV0dXJue3R5cGU6Y3QuZGF0YSxkYXRhOmUuZGVmZXJyZWREYXRhLnVud3JhcHBlZERhdGF9fWNhdGNoKG8pe3JldHVybnt0eXBlOmN0LmVycm9yLGVycm9yOm99fXJldHVybnt0eXBlOmN0LmRhdGEsZGF0YTplLmRlZmVycmVkRGF0YS5kYXRhfX19ZnVuY3Rpb24gam0oZSl7cmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMoZSkuZ2V0QWxsKCJpbmRleCIpLnNvbWUodD0+dD09PSIiKX1mdW5jdGlvbiBMcChlLHQpe2xldCBuPXR5cGVvZiB0PT0ic3RyaW5nIj9ubyh0KS5zZWFyY2g6dC5zZWFyY2g7aWYoZVtlLmxlbmd0aC0xXS5yb3V0ZS5pbmRleCYmam0obnx8IiIpKXJldHVybiBlW2UubGVuZ3RoLTFdO2xldCByPW9DKGUpO3JldHVybiByW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIHEwKGUpe2xldHtmb3JtTWV0aG9kOnQsZm9ybUFjdGlvbjpuLGZvcm1FbmNUeXBlOnIsdGV4dDpvLGZvcm1EYXRhOmksanNvbjpsfT1lO2lmKCEoIXR8fCFufHwhcikpe2lmKG8hPW51bGwpcmV0dXJue2Zvcm1NZXRob2Q6dCxmb3JtQWN0aW9uOm4sZm9ybUVuY1R5cGU6cixmb3JtRGF0YTp2b2lkIDAsanNvbjp2b2lkIDAsdGV4dDpvfTtpZihpIT1udWxsKXJldHVybntmb3JtTWV0aG9kOnQsZm9ybUFjdGlvbjpuLGZvcm1FbmNUeXBlOnIsZm9ybURhdGE6aSxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMH07aWYobCE9PXZvaWQgMClyZXR1cm57Zm9ybU1ldGhvZDp0LGZvcm1BY3Rpb246bixmb3JtRW5jVHlwZTpyLGZvcm1EYXRhOnZvaWQgMCxqc29uOmwsdGV4dDp2b2lkIDB9fX1mdW5jdGlvbiBqZihlLHQpe3JldHVybiB0P3tzdGF0ZToibG9hZGluZyIsbG9jYXRpb246ZSxmb3JtTWV0aG9kOnQuZm9ybU1ldGhvZCxmb3JtQWN0aW9uOnQuZm9ybUFjdGlvbixmb3JtRW5jVHlwZTp0LmZvcm1FbmNUeXBlLGZvcm1EYXRhOnQuZm9ybURhdGEsanNvbjp0Lmpzb24sdGV4dDp0LnRleHR9OntzdGF0ZToibG9hZGluZyIsbG9jYXRpb246ZSxmb3JtTWV0aG9kOnZvaWQgMCxmb3JtQWN0aW9uOnZvaWQgMCxmb3JtRW5jVHlwZTp2b2lkIDAsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6dm9pZCAwfX1mdW5jdGlvbiBTTShlLHQpe3JldHVybntzdGF0ZToic3VibWl0dGluZyIsbG9jYXRpb246ZSxmb3JtTWV0aG9kOnQuZm9ybU1ldGhvZCxmb3JtQWN0aW9uOnQuZm9ybUFjdGlvbixmb3JtRW5jVHlwZTp0LmZvcm1FbmNUeXBlLGZvcm1EYXRhOnQuZm9ybURhdGEsanNvbjp0Lmpzb24sdGV4dDp0LnRleHR9fWZ1bmN0aW9uIHZzKGUsdCl7cmV0dXJuIGU/e3N0YXRlOiJsb2FkaW5nIixmb3JtTWV0aG9kOmUuZm9ybU1ldGhvZCxmb3JtQWN0aW9uOmUuZm9ybUFjdGlvbixmb3JtRW5jVHlwZTplLmZvcm1FbmNUeXBlLGZvcm1EYXRhOmUuZm9ybURhdGEsanNvbjplLmpzb24sdGV4dDplLnRleHQsZGF0YTp0fTp7c3RhdGU6ImxvYWRpbmciLGZvcm1NZXRob2Q6dm9pZCAwLGZvcm1BY3Rpb246dm9pZCAwLGZvcm1FbmNUeXBlOnZvaWQgMCxmb3JtRGF0YTp2b2lkIDAsanNvbjp2b2lkIDAsdGV4dDp2b2lkIDAsZGF0YTp0fX1mdW5jdGlvbiBFTShlLHQpe3JldHVybntzdGF0ZToic3VibWl0dGluZyIsZm9ybU1ldGhvZDplLmZvcm1NZXRob2QsZm9ybUFjdGlvbjplLmZvcm1BY3Rpb24sZm9ybUVuY1R5cGU6ZS5mb3JtRW5jVHlwZSxmb3JtRGF0YTplLmZvcm1EYXRhLGpzb246ZS5qc29uLHRleHQ6ZS50ZXh0LGRhdGE6dD90LmRhdGE6dm9pZCAwfX1mdW5jdGlvbiBhbyhlKXtyZXR1cm57c3RhdGU6ImlkbGUiLGZvcm1NZXRob2Q6dm9pZCAwLGZvcm1BY3Rpb246dm9pZCAwLGZvcm1FbmNUeXBlOnZvaWQgMCxmb3JtRGF0YTp2b2lkIDAsanNvbjp2b2lkIDAsdGV4dDp2b2lkIDAsZGF0YTplfX1mdW5jdGlvbiBDTShlLHQpe3RyeXtsZXQgbj1lLnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oY0MpO2lmKG4pe2xldCByPUpTT04ucGFyc2Uobik7Zm9yKGxldFtvLGldb2YgT2JqZWN0LmVudHJpZXMocnx8e30pKWkmJkFycmF5LmlzQXJyYXkoaSkmJnQuc2V0KG8sbmV3IFNldChpfHxbXSkpfX1jYXRjaHt9fWZ1bmN0aW9uICRNKGUsdCl7aWYodC5zaXplPjApe2xldCBuPXt9O2ZvcihsZXRbcixvXW9mIHQpbltyXT1bLi4ub107dHJ5e2Uuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShjQyxKU09OLnN0cmluZ2lmeShuKSl9Y2F0Y2gocil7d2koITEsIkZhaWxlZCB0byBzYXZlIGFwcGxpZWQgdmlldyB0cmFuc2l0aW9ucyBpbiBzZXNzaW9uU3RvcmFnZSAoIityKyIpLiIpfX19LyoqCiAqIFJlYWN0IFJvdXRlciB2Ni4yMC4wCiAqCiAqIENvcHlyaWdodCAoYykgUmVtaXggU29mdHdhcmUgSW5jLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRS5tZCBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKgogKiBAbGljZW5zZSBNSVQKICovZnVuY3Rpb24gSGMoKXtyZXR1cm4gSGM9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxIYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgTWQ9cC5jcmVhdGVDb250ZXh0KG51bGwpLHBDPXAuY3JlYXRlQ29udGV4dChudWxsKSxMZD1wLmNyZWF0ZUNvbnRleHQobnVsbCksRGQ9cC5jcmVhdGVDb250ZXh0KG51bGwpLE9pPXAuY3JlYXRlQ29udGV4dCh7b3V0bGV0Om51bGwsbWF0Y2hlczpbXSxpc0RhdGFSb3V0ZTohMX0pLGdDPXAuY3JlYXRlQ29udGV4dChudWxsKTtmdW5jdGlvbiBJZCgpe3JldHVybiBwLnVzZUNvbnRleHQoRGQpIT1udWxsfWZ1bmN0aW9uIG1DKCl7cmV0dXJuIElkKCl8fEVlKCExKSxwLnVzZUNvbnRleHQoRGQpLmxvY2F0aW9ufWZ1bmN0aW9uIHZDKGUpe3AudXNlQ29udGV4dChMZCkuc3RhdGljfHxwLnVzZUxheW91dEVmZmVjdChlKX1mdW5jdGlvbiB6bSgpe2xldHtpc0RhdGFSb3V0ZTplfT1wLnVzZUNvbnRleHQoT2kpO3JldHVybiBlP2pNKCk6a00oKX1mdW5jdGlvbiBrTSgpe0lkKCl8fEVlKCExKTtsZXQgZT1wLnVzZUNvbnRleHQoTWQpLHtiYXNlbmFtZTp0LG5hdmlnYXRvcjpufT1wLnVzZUNvbnRleHQoTGQpLHttYXRjaGVzOnJ9PXAudXNlQ29udGV4dChPaSkse3BhdGhuYW1lOm99PW1DKCksaT1KU09OLnN0cmluZ2lmeShpQyhyKSksbD1wLnVzZVJlZighMSk7cmV0dXJuIHZDKCgpPT57bC5jdXJyZW50PSEwfSkscC51c2VDYWxsYmFjayhmdW5jdGlvbihhLHUpe2lmKHU9PT12b2lkIDAmJih1PXt9KSwhbC5jdXJyZW50KXJldHVybjtpZih0eXBlb2YgYT09Im51bWJlciIpe24uZ28oYSk7cmV0dXJufWxldCBjPWxDKGEsSlNPTi5wYXJzZShpKSxvLHUucmVsYXRpdmU9PT0icGF0aCIpO2U9PW51bGwmJnQhPT0iLyImJihjLnBhdGhuYW1lPWMucGF0aG5hbWU9PT0iLyI/dDpSbyhbdCxjLnBhdGhuYW1lXSkpLCh1LnJlcGxhY2U/bi5yZXBsYWNlOm4ucHVzaCkoYyx1LnN0YXRlLHUpfSxbdCxuLGksbyxlXSl9ZnVuY3Rpb24gVE0oKXtsZXR7bWF0Y2hlczplfT1wLnVzZUNvbnRleHQoT2kpLHQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdD90LnBhcmFtczp7fX1mdW5jdGlvbiBiTShlLHQsbil7SWQoKXx8RWUoITEpO2xldHtuYXZpZ2F0b3I6cn09cC51c2VDb250ZXh0KExkKSx7bWF0Y2hlczpvfT1wLnVzZUNvbnRleHQoT2kpLGk9b1tvLmxlbmd0aC0xXSxsPWk/aS5wYXJhbXM6e307aSYmaS5wYXRobmFtZTtsZXQgcz1pP2kucGF0aG5hbWVCYXNlOiIvIjtpJiZpLnJvdXRlO2xldCBhPW1DKCksdTtpZih0KXt2YXIgYztsZXQgbT10eXBlb2YgdD09InN0cmluZyI/bm8odCk6dDtzPT09Ii8ifHwoYz1tLnBhdGhuYW1lKSE9bnVsbCYmYy5zdGFydHNXaXRoKHMpfHxFZSghMSksdT1tfWVsc2UgdT1hO2xldCBkPXUucGF0aG5hbWV8fCIvIixmPXM9PT0iLyI/ZDpkLnNsaWNlKHMubGVuZ3RoKXx8Ii8iLGg9c2woZSx7cGF0aG5hbWU6Zn0pLGc9QU0oaCYmaC5tYXAobT0+T2JqZWN0LmFzc2lnbih7fSxtLHtwYXJhbXM6T2JqZWN0LmFzc2lnbih7fSxsLG0ucGFyYW1zKSxwYXRobmFtZTpSbyhbcyxyLmVuY29kZUxvY2F0aW9uP3IuZW5jb2RlTG9jYXRpb24obS5wYXRobmFtZSkucGF0aG5hbWU6bS5wYXRobmFtZV0pLHBhdGhuYW1lQmFzZTptLnBhdGhuYW1lQmFzZT09PSIvIj9zOlJvKFtzLHIuZW5jb2RlTG9jYXRpb24/ci5lbmNvZGVMb2NhdGlvbihtLnBhdGhuYW1lQmFzZSkucGF0aG5hbWU6bS5wYXRobmFtZUJhc2VdKX0pKSxvLG4pO3JldHVybiB0JiZnP3AuY3JlYXRlRWxlbWVudChEZC5Qcm92aWRlcix7dmFsdWU6e2xvY2F0aW9uOkhjKHtwYXRobmFtZToiLyIsc2VhcmNoOiIiLGhhc2g6IiIsc3RhdGU6bnVsbCxrZXk6ImRlZmF1bHQifSx1KSxuYXZpZ2F0aW9uVHlwZTp1dC5Qb3B9fSxnKTpnfWZ1bmN0aW9uIE5NKCl7bGV0IGU9SU0oKSx0PXNDKGUpP2Uuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQ6ZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTpKU09OLnN0cmluZ2lmeShlKSxuPWUgaW5zdGFuY2VvZiBFcnJvcj9lLnN0YWNrOm51bGwsbz17cGFkZGluZzoiMC41cmVtIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMjAwLDIwMCwyMDAsIDAuNSkifSxpPW51bGw7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChwLkZyYWdtZW50LG51bGwscC5jcmVhdGVFbGVtZW50KCJoMiIsbnVsbCwiVW5leHBlY3RlZCBBcHBsaWNhdGlvbiBFcnJvciEiKSxwLmNyZWF0ZUVsZW1lbnQoImgzIix7c3R5bGU6e2ZvbnRTdHlsZToiaXRhbGljIn19LHQpLG4/cC5jcmVhdGVFbGVtZW50KCJwcmUiLHtzdHlsZTpvfSxuKTpudWxsLGkpfWNvbnN0IFJNPXAuY3JlYXRlRWxlbWVudChOTSxudWxsKTtjbGFzcyBQTSBleHRlbmRzIHAuQ29tcG9uZW50e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuc3RhdGU9e2xvY2F0aW9uOnQubG9jYXRpb24scmV2YWxpZGF0aW9uOnQucmV2YWxpZGF0aW9uLGVycm9yOnQuZXJyb3J9fXN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IodCl7cmV0dXJue2Vycm9yOnR9fXN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHModCxuKXtyZXR1cm4gbi5sb2NhdGlvbiE9PXQubG9jYXRpb258fG4ucmV2YWxpZGF0aW9uIT09ImlkbGUiJiZ0LnJldmFsaWRhdGlvbj09PSJpZGxlIj97ZXJyb3I6dC5lcnJvcixsb2NhdGlvbjp0LmxvY2F0aW9uLHJldmFsaWRhdGlvbjp0LnJldmFsaWRhdGlvbn06e2Vycm9yOnQuZXJyb3J8fG4uZXJyb3IsbG9jYXRpb246bi5sb2NhdGlvbixyZXZhbGlkYXRpb246dC5yZXZhbGlkYXRpb258fG4ucmV2YWxpZGF0aW9ufX1jb21wb25lbnREaWRDYXRjaCh0LG4pe2NvbnNvbGUuZXJyb3IoIlJlYWN0IFJvdXRlciBjYXVnaHQgdGhlIGZvbGxvd2luZyBlcnJvciBkdXJpbmcgcmVuZGVyIix0LG4pfXJlbmRlcigpe3JldHVybiB0aGlzLnN0YXRlLmVycm9yP3AuY3JlYXRlRWxlbWVudChPaS5Qcm92aWRlcix7dmFsdWU6dGhpcy5wcm9wcy5yb3V0ZUNvbnRleHR9LHAuY3JlYXRlRWxlbWVudChnQy5Qcm92aWRlcix7dmFsdWU6dGhpcy5zdGF0ZS5lcnJvcixjaGlsZHJlbjp0aGlzLnByb3BzLmNvbXBvbmVudH0pKTp0aGlzLnByb3BzLmNoaWxkcmVufX1mdW5jdGlvbiBPTShlKXtsZXR7cm91dGVDb250ZXh0OnQsbWF0Y2g6bixjaGlsZHJlbjpyfT1lLG89cC51c2VDb250ZXh0KE1kKTtyZXR1cm4gbyYmby5zdGF0aWMmJm8uc3RhdGljQ29udGV4dCYmKG4ucm91dGUuZXJyb3JFbGVtZW50fHxuLnJvdXRlLkVycm9yQm91bmRhcnkpJiYoby5zdGF0aWNDb250ZXh0Ll9kZWVwZXN0UmVuZGVyZWRCb3VuZGFyeUlkPW4ucm91dGUuaWQpLHAuY3JlYXRlRWxlbWVudChPaS5Qcm92aWRlcix7dmFsdWU6dH0scil9ZnVuY3Rpb24gQU0oZSx0LG4pe3ZhciByO2lmKHQ9PT12b2lkIDAmJih0PVtdKSxuPT09dm9pZCAwJiYobj1udWxsKSxlPT1udWxsKXt2YXIgbztpZigobz1uKSE9bnVsbCYmby5lcnJvcnMpZT1uLm1hdGNoZXM7ZWxzZSByZXR1cm4gbnVsbH1sZXQgaT1lLGw9KHI9bik9PW51bGw/dm9pZCAwOnIuZXJyb3JzO2lmKGwhPW51bGwpe2xldCBzPWkuZmluZEluZGV4KGE9PmEucm91dGUuaWQmJihsPT1udWxsP3ZvaWQgMDpsW2Eucm91dGUuaWRdKSk7cz49MHx8RWUoITEpLGk9aS5zbGljZSgwLE1hdGgubWluKGkubGVuZ3RoLHMrMSkpfXJldHVybiBpLnJlZHVjZVJpZ2h0KChzLGEsdSk9PntsZXQgYz1hLnJvdXRlLmlkP2w9PW51bGw/dm9pZCAwOmxbYS5yb3V0ZS5pZF06bnVsbCxkPW51bGw7biYmKGQ9YS5yb3V0ZS5lcnJvckVsZW1lbnR8fFJNKTtsZXQgZj10LmNvbmNhdChpLnNsaWNlKDAsdSsxKSksaD0oKT0+e2xldCBnO3JldHVybiBjP2c9ZDphLnJvdXRlLkNvbXBvbmVudD9nPXAuY3JlYXRlRWxlbWVudChhLnJvdXRlLkNvbXBvbmVudCxudWxsKTphLnJvdXRlLmVsZW1lbnQ/Zz1hLnJvdXRlLmVsZW1lbnQ6Zz1zLHAuY3JlYXRlRWxlbWVudChPTSx7bWF0Y2g6YSxyb3V0ZUNvbnRleHQ6e291dGxldDpzLG1hdGNoZXM6Zixpc0RhdGFSb3V0ZTpuIT1udWxsfSxjaGlsZHJlbjpnfSl9O3JldHVybiBuJiYoYS5yb3V0ZS5FcnJvckJvdW5kYXJ5fHxhLnJvdXRlLmVycm9yRWxlbWVudHx8dT09PTApP3AuY3JlYXRlRWxlbWVudChQTSx7bG9jYXRpb246bi5sb2NhdGlvbixyZXZhbGlkYXRpb246bi5yZXZhbGlkYXRpb24sY29tcG9uZW50OmQsZXJyb3I6YyxjaGlsZHJlbjpoKCkscm91dGVDb250ZXh0OntvdXRsZXQ6bnVsbCxtYXRjaGVzOmYsaXNEYXRhUm91dGU6ITB9fSk6aCgpfSxudWxsKX12YXIgeUM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuVXNlQmxvY2tlcj0idXNlQmxvY2tlciIsZS5Vc2VSZXZhbGlkYXRvcj0idXNlUmV2YWxpZGF0b3IiLGUuVXNlTmF2aWdhdGVTdGFibGU9InVzZU5hdmlnYXRlIixlfSh5Q3x8e30pLEtjPWZ1bmN0aW9uKGUpe3JldHVybiBlLlVzZUJsb2NrZXI9InVzZUJsb2NrZXIiLGUuVXNlTG9hZGVyRGF0YT0idXNlTG9hZGVyRGF0YSIsZS5Vc2VBY3Rpb25EYXRhPSJ1c2VBY3Rpb25EYXRhIixlLlVzZVJvdXRlRXJyb3I9InVzZVJvdXRlRXJyb3IiLGUuVXNlTmF2aWdhdGlvbj0idXNlTmF2aWdhdGlvbiIsZS5Vc2VSb3V0ZUxvYWRlckRhdGE9InVzZVJvdXRlTG9hZGVyRGF0YSIsZS5Vc2VNYXRjaGVzPSJ1c2VNYXRjaGVzIixlLlVzZVJldmFsaWRhdG9yPSJ1c2VSZXZhbGlkYXRvciIsZS5Vc2VOYXZpZ2F0ZVN0YWJsZT0idXNlTmF2aWdhdGUiLGUuVXNlUm91dGVJZD0idXNlUm91dGVJZCIsZX0oS2N8fHt9KTtmdW5jdGlvbiBNTShlKXtsZXQgdD1wLnVzZUNvbnRleHQoTWQpO3JldHVybiB0fHxFZSghMSksdH1mdW5jdGlvbiBMTShlKXtsZXQgdD1wLnVzZUNvbnRleHQocEMpO3JldHVybiB0fHxFZSghMSksdH1mdW5jdGlvbiBETShlKXtsZXQgdD1wLnVzZUNvbnRleHQoT2kpO3JldHVybiB0fHxFZSghMSksdH1mdW5jdGlvbiB4QyhlKXtsZXQgdD1ETSgpLG49dC5tYXRjaGVzW3QubWF0Y2hlcy5sZW5ndGgtMV07cmV0dXJuIG4ucm91dGUuaWR8fEVlKCExKSxuLnJvdXRlLmlkfWZ1bmN0aW9uIElNKCl7dmFyIGU7bGV0IHQ9cC51c2VDb250ZXh0KGdDKSxuPUxNKEtjLlVzZVJvdXRlRXJyb3IpLHI9eEMoS2MuVXNlUm91dGVFcnJvcik7cmV0dXJuIHR8fCgoZT1uLmVycm9ycyk9PW51bGw/dm9pZCAwOmVbcl0pfWZ1bmN0aW9uIGpNKCl7bGV0e3JvdXRlcjplfT1NTSh5Qy5Vc2VOYXZpZ2F0ZVN0YWJsZSksdD14QyhLYy5Vc2VOYXZpZ2F0ZVN0YWJsZSksbj1wLnVzZVJlZighMSk7cmV0dXJuIHZDKCgpPT57bi5jdXJyZW50PSEwfSkscC51c2VDYWxsYmFjayhmdW5jdGlvbihvLGkpe2k9PT12b2lkIDAmJihpPXt9KSxuLmN1cnJlbnQmJih0eXBlb2Ygbz09Im51bWJlciI/ZS5uYXZpZ2F0ZShvKTplLm5hdmlnYXRlKG8sSGMoe2Zyb21Sb3V0ZUlkOnR9LGkpKSl9LFtlLHRdKX1mdW5jdGlvbiB6TShlKXtsZXR7YmFzZW5hbWU6dD0iLyIsY2hpbGRyZW46bj1udWxsLGxvY2F0aW9uOnIsbmF2aWdhdGlvblR5cGU6bz11dC5Qb3AsbmF2aWdhdG9yOmksc3RhdGljOmw9ITF9PWU7SWQoKSYmRWUoITEpO2xldCBzPXQucmVwbGFjZSgvXlwvKi8sIi8iKSxhPXAudXNlTWVtbygoKT0+KHtiYXNlbmFtZTpzLG5hdmlnYXRvcjppLHN0YXRpYzpsfSksW3MsaSxsXSk7dHlwZW9mIHI9PSJzdHJpbmciJiYocj1ubyhyKSk7bGV0e3BhdGhuYW1lOnU9Ii8iLHNlYXJjaDpjPSIiLGhhc2g6ZD0iIixzdGF0ZTpmPW51bGwsa2V5Omg9ImRlZmF1bHQifT1yLGc9cC51c2VNZW1vKCgpPT57bGV0IG09S2EodSxzKTtyZXR1cm4gbT09bnVsbD9udWxsOntsb2NhdGlvbjp7cGF0aG5hbWU6bSxzZWFyY2g6YyxoYXNoOmQsc3RhdGU6ZixrZXk6aH0sbmF2aWdhdGlvblR5cGU6b319LFtzLHUsYyxkLGYsaCxvXSk7cmV0dXJuIGc9PW51bGw/bnVsbDpwLmNyZWF0ZUVsZW1lbnQoTGQuUHJvdmlkZXIse3ZhbHVlOmF9LHAuY3JlYXRlRWxlbWVudChEZC5Qcm92aWRlcix7Y2hpbGRyZW46bix2YWx1ZTpnfSkpfW5ldyBQcm9taXNlKCgpPT57fSk7ZnVuY3Rpb24gRk0oZSl7bGV0IHQ9e2hhc0Vycm9yQm91bmRhcnk6ZS5FcnJvckJvdW5kYXJ5IT1udWxsfHxlLmVycm9yRWxlbWVudCE9bnVsbH07cmV0dXJuIGUuQ29tcG9uZW50JiZPYmplY3QuYXNzaWduKHQse2VsZW1lbnQ6cC5jcmVhdGVFbGVtZW50KGUuQ29tcG9uZW50KSxDb21wb25lbnQ6dm9pZCAwfSksZS5FcnJvckJvdW5kYXJ5JiZPYmplY3QuYXNzaWduKHQse2Vycm9yRWxlbWVudDpwLmNyZWF0ZUVsZW1lbnQoZS5FcnJvckJvdW5kYXJ5KSxFcnJvckJvdW5kYXJ5OnZvaWQgMH0pLHR9Y29uc3Qgd0M9ZWUuY3JlYXRlQ29udGV4dChudWxsKSxCTT1lPT57dmFyIHMsYTtjb25zdCB0PWVlLnVzZUNvbnRleHQod0MpLFtuLHJdPUt0LnNwbGl0TW9kdWxlSWRBbmRNb2R1bGVQYXRoKGUpLG89KHM9dD09bnVsbD92b2lkIDA6dFtuXSk9PW51bGw/dm9pZCAwOnMuc291cmNlLGk9KGE9dD09bnVsbD92b2lkIDA6dFtuXSk9PW51bGw/dm9pZCAwOmEuc2NoZW1hO2lmKCFvfHwhaSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbW9kdWxlOiAiK24pO2NvbnN0IGw9S3QucmVzb2x2ZVBhdGgocixvLGkpO3JldHVybnttb2R1bGVJZDpuLG1vZHVsZVNvdXJjZTpsLnNvdXJjZSxtb2R1bGVTY2hlbWE6bC5zY2hlbWF9fSxXTT0oe3ZhbEFwaTplfSk9Pnt2YXIgUyxrO2NvbnN0eyIqIjp0fT1UTSgpLFtuLHJdPXAudXNlU3RhdGUobnVsbCksW28saV09cC51c2VTdGF0ZShudWxsKSxbbCxzXT1wLnVzZVN0YXRlKCksW2FdPWw/S3Quc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGgobCk6W3ZvaWQgMCx2b2lkIDBdLHU9YSYmKChTPW49PW51bGw/dm9pZCAwOm5bYV0pPT1udWxsP3ZvaWQgMDpTLnNvdXJjZSksYz1hJiYoKGs9bj09bnVsbD92b2lkIDA6blthXSk9PW51bGw/dm9pZCAwOmsuc2NoZW1hKSxkPU9iamVjdC5lbnRyaWVzKG58fHt9KS5mbGF0TWFwKChbLGJdKT0+Yi5lcnJvcnM/Yi5lcnJvcnMuZmF0YWw/Yi5lcnJvcnMuZmF0YWw6W106W10pLGY9T2JqZWN0LmVudHJpZXMobnx8e30pLmZsYXRNYXAoKFssYl0pPT5iLmVycm9ycyYmYi5lcnJvcnMudmFsaWRhdGlvbj9bYi5lcnJvcnMudmFsaWRhdGlvbl06W10pO2lmKGQmJmQubGVuZ3RoPjApe2NvbnN0IGI9ZC5sZW5ndGg9PT0xP2RbMF0ubWVzc2FnZTpgTXVsdGlwbGUgZXJyb3JzIGRldGVjdGVkOgoke2QubWFwKChOLEQpPT5gJHtEKzF9LiAke04ubWVzc2FnZX1gKS5qb2luKGAKYCl9CgpTaG93aW5nIHN0YWNrIHRyYWNlIG9mOiAwLiAke2RbMF0ubWVzc2FnZX1gLFQ9bmV3IEVycm9yKGIpO3Rocm93IFQuc3RhY2s9ZFswXS5zdGFjayxUfWYmJmYubGVuZ3RoPjAmJmNvbnNvbGUud2FybigiVmFsIGVuY291bnRlcmVkIHZhbGlkYXRpb24gZXJyb3JzOiIsZikscC51c2VFZmZlY3QoKCk9PntzKHQ/YC8ke3R9YDpsKX0sW3RdKTtjb25zdFtoLGddPXAudXNlU3RhdGUobnVsbCk7cC51c2VFZmZlY3QoKCk9Pnt0cnl7bmV3IFdlYlNvY2tldChgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2luLnJlcGxhY2UoImh0dHA6Ly8iLCJ3czovLyIpfS9fbmV4dC93ZWJwYWNrLWhtcmApLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLFQ9PntsZXQgTjt0cnl7Tj1KU09OLnBhcnNlKFQuZGF0YSl9Y2F0Y2h7Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIEhNUiIpfXR5cGVvZihOPT1udWxsP3ZvaWQgMDpOLmhhc2gpPT0ic3RyaW5nIiYmKE49PW51bGw/dm9pZCAwOk4uYWN0aW9uKT09PSJidWlsdCImJmcoTi5oYXNoKX0pfWNhdGNoKGIpe2NvbnNvbGUud2FybigiRmFpbGVkIHRvIGluaXRpYWxpemUgSE1SIixiKX19LFtdKSxwLnVzZUVmZmVjdCgoKT0+e2NvbnNvbGUubG9nKCIoUmUpLWZldGNoaW5nIG1vZHVsZXMiKSxlLmdldFRyZWUoe3BhdGNoOiEwLGluY2x1ZGVTY2hlbWE6ITAsaW5jbHVkZVNvdXJjZTohMH0pLnRoZW4oYj0+e0RzLmlzT2soYik/cihiLnZhbHVlLm1vZHVsZXMpOihpKCJDb3VsZCBub3QgbG9hZCBtb2R1bGVzOiAiK2IuZXJyb3IubWVzc2FnZSksY29uc29sZS5lcnJvcihiLmVycm9yKSl9KX0sW2hdKTtjb25zdCBtPXptKCksW18sdl09Tk8oKTtwLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGI9VD0+e2NvbnNvbGUubG9nKCJwb3BzdGF0ZSIsVCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGIpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixiKX19LFtdKTtjb25zdCB5PWVlLnVzZVJlZihudWxsKSx4PXAudXNlQ2FsbGJhY2soYj0+YXN5bmMgVD0+e2NvbnN0W04sRF09S3Quc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGgoYiksTT1hd2FpdCBUKEt0LmNyZWF0ZVBhdGNoSlNPTlBhdGgoRCkpO3JldHVybiBlLnBvc3RQYXRjaGVzKE4sTSkudGhlbihqPT57aWYoRHMuaXNFcnIoaikpdGhyb3cgai5lcnJvcjtpZighaClyZXR1cm4gZS5nZXRUcmVlKHt0cmVlUGF0aDpOLHBhdGNoOiEwLGluY2x1ZGVTY2hlbWE6ITAsaW5jbHVkZVNvdXJjZTohMH0pLnRoZW4oQj0+e0RzLmlzT2soQik/cihCLnZhbHVlLm1vZHVsZXMpOihpKCJDb3VsZCBub3QgbG9hZCBtb2R1bGVzOiAiK0IuZXJyb3IubWVzc2FnZSksY29uc29sZS5lcnJvcihCLmVycm9yKSl9KX0pLmNhdGNoKGo9Pntjb25zb2xlLmVycm9yKGopfSl9LFtdKTtyZXR1cm4gdy5qc3godEUuUHJvdmlkZXIse3ZhbHVlOnt0aGVtZTpfLHNldFRoZW1lOnYsYXBpOmUsZWRpdE1vZGU6ImZ1bGwiLHNlc3Npb246e3N0YXR1czoibm90LWFza2VkIn0saGlnaGxpZ2h0OiExLHNldEhpZ2hsaWdodDooKT0+e30sc2V0RWRpdE1vZGU6KCk9Pnt9LHNldFdpbmRvd1NpemU6KCk9Pnt9fSxjaGlsZHJlbjp3LmpzeHMoImRpdiIse2lkOiJ2YWwtZnVsbHNjcmVlbi1jb250YWluZXIiLGNsYXNzTmFtZToicmVsYXRpdmUgZm9udC1zZXJpZiBhbnRpYWxpYXNlZCIsImRhdGEtbW9kZSI6XyxjaGlsZHJlbjpbdy5qc3goImRpdiIse2NsYXNzTmFtZToiZml4ZWQgLXRyYW5zbGF0ZS14LTEvMiB6LW92ZXJsYXkgbGVmdC0xLzIgYm90dG9tLTQiLGNoaWxkcmVuOncuanN4KCRPLHthcGk6ZX0pfSksdy5qc3goImRpdiIse2lkOiJ2YWwtZnVsbHNjcmVlbi1ob3ZlciIscmVmOnl9KSx3LmpzeChfQy5Qcm92aWRlcix7dmFsdWU6e2hvdmVyRWxlbTp5PT1udWxsP3ZvaWQgMDp5LmN1cnJlbnR9LGNoaWxkcmVuOncuanN4KCJkaXYiLHtjbGFzc05hbWU6InRleHQtcHJpbWFyeSBiZy1iYWNrZ3JvdW5kIixjaGlsZHJlbjp3LmpzeHMoanMse2NoaWxkcmVuOlt3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJweC00IGgtWzUwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjp3LmpzeChaRSx7fSl9KSx3LmpzeChJcyx7Y2xhc3NOYW1lOiJweC00IixjaGlsZHJlbjpuP3cuanN4KEpNLHtwYXRoczpPYmplY3Qua2V5cyhuKSxzZXRTZWxlY3RlZE1vZHVsZUlkOmI9PnttKGIpfX0pOiFvJiZ3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJweS00IixjaGlsZHJlbjoiTG9hZGluZy4uLiJ9KX0pLHcuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IHctZnVsbCBoLVs1MHB4XSBnYXAtMiBmb250LXNlcmlmIHRleHQteHMiLGNoaWxkcmVuOlt3LmpzeCgiYnV0dG9uIix7b25DbGljazooKT0+e2hpc3RvcnkuYmFjaygpfSxjaGlsZHJlbjp3LmpzeChnTyx7fSl9KSx3LmpzeCgicCIse2NoaWxkcmVuOmx8fCIvIn0pXX0pLHcuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJwLTQiLGNoaWxkcmVuOltvJiZ3LmpzeHMoImRpdiIse2NsYXNzTmFtZToidGV4dC1sZyB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQiLGNoaWxkcmVuOlsiRVJST1I6ICIsb119KSxuJiZsJiZhJiZ1IT09dm9pZCAwJiZjIT09dm9pZCAwJiZ3LmpzeCh3Qy5Qcm92aWRlcix7dmFsdWU6bixjaGlsZHJlbjp3LmpzeChWTSx7cGF0aDpsLHNvdXJjZTp1LHNjaGVtYTpjLHNldFNlbGVjdGVkUGF0aDpzLGluaXRPblN1Ym1pdDp4fSl9KV19KV19KX0pfSldfSl9KX0sX0M9ZWUuY3JlYXRlQ29udGV4dCh7aG92ZXJFbGVtOm51bGx9KSxVTT0oKT0+ZWUudXNlQ29udGV4dChfQyk7ZnVuY3Rpb24gVk0oe3BhdGg6ZSxzb3VyY2U6dCxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cixpbml0T25TdWJtaXQ6b30pe2NvbnN0WyxpXT1LdC5zcGxpdE1vZHVsZUlkQW5kTW9kdWxlUGF0aChlKSxsPUt0LnJlc29sdmVQYXRoKGksdCxuKTtpZighbCl0aHJvdyBFcnJvcigiQ291bGQgbm90IHJlc29sdmUgbW9kdWxlOiAiK2UpO3JldHVybiB3LmpzeChTQyx7cGF0aDplLHNvdXJjZTpsLnNvdXJjZSxzY2hlbWE6bC5zY2hlbWEsc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Om8sdG9wOiEwfSl9ZnVuY3Rpb24gU0Moe3BhdGg6ZSxzb3VyY2U6dCxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cixmaWVsZDpvLGluaXRPblN1Ym1pdDppLHRvcDpsfSl7cmV0dXJuIHQ9PT1udWxsfHxuLm9wdD93LmpzeChZTSx7cGF0aDplLHNvdXJjZTp0LHNjaGVtYTpuLGZpZWxkOm8saW5pdE9uU3VibWl0Omksc2V0U2VsZWN0ZWRQYXRoOnJ9KTpuLnR5cGU9PT0ib2JqZWN0Ij90eXBlb2YgdCE9Im9iamVjdCJ8fFFzKHQpP3cuanN4cygiZGl2Iix7Y2hpbGRyZW46WyJFUlJPUjogZXhwZWN0ZWQgb2JqZWN0LCBidXQgZm91bmQgIix0eXBlb2YgdF19KTp3LmpzeChFQyx7c291cmNlOnQscGF0aDplLHNjaGVtYTpuLGluaXRPblN1Ym1pdDppLHNldFNlbGVjdGVkUGF0aDpyLHRvcDpsfSk6bi50eXBlPT09ImFycmF5Ij90eXBlb2YgdCE9Im9iamVjdCJ8fCFRcyh0KT93LmpzeHMoImRpdiIse2NoaWxkcmVuOlsiRVJST1I6IGV4cGVjdGVkIGFycmF5LCBidXQgZm91bmQgIix0eXBlb2YgdF19KTp3LmpzeChDQyx7c291cmNlOnQscGF0aDplLHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyfSk6bi50eXBlPT09InJlY29yZCI/dHlwZW9mIHQhPSJvYmplY3QiP3cuanN4cygiZGl2Iix7Y2hpbGRyZW46WyJFUlJPUjogZXhwZWN0ZWQgb2JqZWN0IGZvciAiLG4udHlwZSwiLCBidXQgZm91bmQgIix0eXBlb2YgdF19KTpRcyh0KT93LmpzeHMoImRpdiIse2NoaWxkcmVuOlsiRVJST1I6IGRpZCBub3QgZXhwZWN0IGFycmF5IGZvciAiLG4udHlwZV19KTp3LmpzeChITSx7c291cmNlOnQscGF0aDplLHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyfSk6dy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InB5LTIgZ2FwLXktNCIsY2hpbGRyZW46W3cuanN4KCJkaXYiLHtjbGFzc05hbWU6InRleHQtbGVmdCIsY2hpbGRyZW46b3x8ZX0pLHcuanN4KEpFLHtwYXRoOmUsZGlzYWJsZWQ6ITEsc291cmNlOnQsc2NoZW1hOm4sb25TdWJtaXQ6aShlKX0pXX0pfWZ1bmN0aW9uIEVDKHtwYXRoOmUsc291cmNlOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Om8sdG9wOml9KXtyZXR1cm4gdy5qc3goImRpdiIse2NsYXNzTmFtZTpkZCgiZmxleCBmbGV4LWNvbCBnYXAteS04Iix7ImJvcmRlci1sLTIgYm9yZGVyLWJvcmRlciBwbC02IjohaX0pLGNoaWxkcmVuOk9iamVjdC5lbnRyaWVzKG4uaXRlbXMpLm1hcCgoW2wsc10pPT57Y29uc3QgYT1iYShlLGwpO3JldHVybiB3LmpzeChTQyx7cGF0aDphLHNvdXJjZTp0W2xdLHNjaGVtYTpzLHNldFNlbGVjdGVkUGF0aDpyLGZpZWxkOmwsaW5pdE9uU3VibWl0Om99LGEpfSl9LGUpfWZ1bmN0aW9uIEhNKHtwYXRoOmUsc291cmNlOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnJ9KXtjb25zdCBvPXptKCk7cmV0dXJuIHcuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTQgcC0yIixjaGlsZHJlbjpPYmplY3QuZW50cmllcyh0KS5tYXAoKFtpLGxdKT0+e2NvbnN0IHM9YmEoZSxpKTtyZXR1cm4gdy5qc3goImJ1dHRvbiIse29uQ2xpY2s6KCk9PntyKHMpLG8ocyl9LGNoaWxkcmVuOncuanN4KEtNLHtyZWNvcmRLZXk6aSxwYXRoOnMsc291cmNlOmwsc2NoZW1hOm4uaXRlbX0pfSxzKX0pfSxlKX1jb25zdCBEcD0xNzA7ZnVuY3Rpb24gS00oe3JlY29yZEtleTplLHBhdGg6dCxzb3VyY2U6bixzY2hlbWE6cn0pe2NvbnN0IG89ZWUudXNlUmVmKG51bGwpLFtpLGxdPXAudXNlU3RhdGUoITEpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e28uY3VycmVudCYmby5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodD49RHAmJmwoITApfSxbXSksdy5qc3hzKERtLHtyZWY6byxjbGFzc05hbWU6InJlbGF0aXZlIHB4LTQgcHQtMiBwYi00IG92ZXJmbG93LWhpZGRlbiBib3JkZXIgZ2FwLXktMiIsc3R5bGU6e21heEhlaWdodDpEcH0sY2hpbGRyZW46W3cuanN4KCJkaXYiLHtjbGFzc05hbWU6InBiLTQgZm9udC1zZXJpZiB0ZXh0LWxlZnQgdGV4dC1hY2NlbnQiLGNoaWxkcmVuOmV9KSx3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIixjaGlsZHJlbjp3LmpzeChGbSx7cGF0aDp0LHNvdXJjZTpuLHNjaGVtYTpyfSl9KSxpJiZ3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgdy1mdWxsIGgtWzIwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS10cmFuc3BhcmVudCB0by1iYWNrZ3JvdW5kIn0pXX0sdCl9ZnVuY3Rpb24gQ0Moe3BhdGg6ZSxzb3VyY2U6dCxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cn0pe2NvbnN0IG89em0oKTtyZXR1cm4gdy5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtNCBwLTIiLGNoaWxkcmVuOnQubWFwKChpLGwpPT57Y29uc3Qgcz1iYShlLGwpO3JldHVybiB3LmpzeCgiYnV0dG9uIix7b25DbGljazooKT0+e3IocyksbyhzKX0sY2hpbGRyZW46dy5qc3goR00se2luZGV4OmwscGF0aDpzLHNvdXJjZTppLHNjaGVtYTpuLml0ZW19LHMpfSxzKX0pfSxlKX1jb25zdCBlMT1EcDtmdW5jdGlvbiBHTSh7aW5kZXg6ZSxwYXRoOnQsc291cmNlOm4sc2NoZW1hOnJ9KXtjb25zdCBvPWVlLnVzZVJlZihudWxsKSxbaSxsXT1wLnVzZVN0YXRlKCExKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntvLmN1cnJlbnQmJm8uY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ+PWUxJiZsKCEwKX0sW10pLHcuanN4cyhEbSx7cmVmOm8sY2xhc3NOYW1lOiJyZWxhdGl2ZSBweC00IHB0LTIgcGItNCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyIGdhcC15LTIiLHN0eWxlOnttYXhIZWlnaHQ6ZTF9LGNoaWxkcmVuOlt3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwYi00IGZvbnQtc2VyaWYgdGV4dC1sZWZ0IHVwcGVyY2FzZSB0ZXh0LWFjY2VudCIsY2hpbGRyZW46ZSsxPDEwP2AwJHtlKzF9YDplKzF9KSx3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIixjaGlsZHJlbjp3LmpzeChGbSx7cGF0aDp0LHNvdXJjZTpuLHNjaGVtYTpyfSl9KSxpJiZ3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgdy1mdWxsIGgtWzIwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS10cmFuc3BhcmVudCB0by1iYWNrZ3JvdW5kIn0pXX0pfWZ1bmN0aW9uIGJhKGUsdCl7Y29uc3Qgbj1LdC5jcmVhdGVWYWxQYXRoT2ZJdGVtKGUsdCk7aWYoIW4pdGhyb3cgRXJyb3IoYENvdWxkIG5vdCBjcmVhdGUgdmFsIHBhdGg6ICR7ZX0gb2YgJHt0PT1udWxsP3ZvaWQgMDp0LnRvU3RyaW5nKCl9YCk7cmV0dXJuIG59ZnVuY3Rpb24gRm0oe3BhdGg6ZSxzb3VyY2U6dCxzY2hlbWE6bn0pe2NvbnN0W3Isb109cC51c2VTdGF0ZShudWxsKSx7aG92ZXJFbGVtOml9PVVNKCk7aWYobi50eXBlPT09Im9iamVjdCIpcmV0dXJuIHcuanN4KCJkaXYiLHtjbGFzc05hbWU6ImdyaWQgZ3JpZC1jb2xzLVttaW4tY29udGVudF8xZnJdIGdhcC0yIHRleHQtbGVmdCIsY2hpbGRyZW46T2JqZWN0LmVudHJpZXMobi5pdGVtcykubWFwKChbbF0pPT53LmpzeHMocC5GcmFnbWVudCx7Y2hpbGRyZW46W3cuanN4cygic3BhbiIse2NsYXNzTmFtZToidGV4dC1tdXRlZCIsY2hpbGRyZW46W2wsIjoiXX0pLHcuanN4KCJzcGFuIix7Y2hpbGRyZW46dy5qc3goRm0se3NvdXJjZToodD09bnVsbD92b2lkIDA6dFtsXSk/P251bGwsc2NoZW1hOm4uaXRlbXNbbF0scGF0aDpiYShlLGwpfSl9KV19LGJhKGUsbCkpKX0sZSk7aWYobi50eXBlPT09ImFycmF5IilyZXR1cm4gdD09PW51bGw/dy5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjoiRW1wdHkifSxlKTpBcnJheS5pc0FycmF5KHQpP3cuanN4cygic3BhbiIse2NoaWxkcmVuOlt3LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOnQubGVuZ3RofSksdy5qc3goInNwYW4iLHtjaGlsZHJlbjp0Lmxlbmd0aD09PTE/IiBpdGVtIjoiIGl0ZW1zIn0pXX0sZSk6dy5qc3goInNwYW4iLHtjbGFzc05hbWU6InB4LTIgYmctZGVzdHJ1Y3RpdmUgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIixjaGlsZHJlbjoiVW5rbm93biBsZW5ndGgifSxlKTtpZihuLnR5cGU9PT0icmljaHRleHQiKXJldHVybiB0PT09bnVsbD93LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOiJFbXB0eSJ9LGUpOnR5cGVvZiB0IT0ib2JqZWN0Ij93LmpzeHMoImRpdiIse2NsYXNzTmFtZToicC00IHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCBiZy1kZXN0cnVjdGl2ZSIsY2hpbGRyZW46WyJFUlJPUjogIix0eXBlb2YgdCwiIG5vdCBhbiBvYmplY3QiXX0sZSk6IShIdCBpbiB0KXx8dFtIdF0hPT0icmljaHRleHQiP3cuanN4KCJkaXYiLHtjbGFzc05hbWU6InAtNCB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQgYmctZGVzdHJ1Y3RpdmUiLGNoaWxkcmVuOiJFUlJPUjogb2JqZWN0IGlzIG5vdCByaWNodGV4dCJ9LGUpOncuanN4KFpNLHtjaGlsZHJlbjphXyh0KX0sZSk7aWYobi50eXBlPT09InN0cmluZyIpcmV0dXJuIHQ9PT1udWxsP3cuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46IkVtcHR5In0sZSk6dy5qc3goInNwYW4iLHtjaGlsZHJlbjp0fSk7aWYobi50eXBlPT09ImltYWdlIil7aWYodD09PW51bGwpcmV0dXJuIHcuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46IkVtcHR5In0sZSk7aWYodHlwZW9mIHQhPSJvYmplY3QiKXJldHVybiB3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGJnLWRlc3RydWN0aXZlIixjaGlsZHJlbjoiRVJST1I6IG5vdCBhbiBvYmplY3QifSxlKTtpZighKHZuIGluIHQpfHx0eXBlb2YgdFt2bl0hPSJzdHJpbmciKXJldHVybiB3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGJnLWRlc3RydWN0aXZlIixjaGlsZHJlbjoiRVJST1I6IG9iamVjdCBpcyBub3QgYW4gaW1hZ2UifSxlKTtjb25zdCBsPUt0LmNvbnZlcnRGaWxlU291cmNlKHQpLnVybDtyZXR1cm4gdy5qc3hzKCJzcGFuIix7b25Nb3VzZU92ZXI6cz0+e28oe3g6cy5jbGllbnRYLHk6cy5jbGllbnRZfSl9LG9uTW91c2VMZWF2ZTooKT0+e28obnVsbCl9LGNsYXNzTmFtZToicmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAtMSIsY2hpbGRyZW46W3cuanN4KCJhIix7aHJlZjpsLGNsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHVuZGVybGluZSB0cnVuY2F0ZSAiLGNoaWxkcmVuOnRbdm5dfSksciYmaSYmJHIuY3JlYXRlUG9ydGFsKHcuanN4KCJpbWciLHtjbGFzc05hbWU6ImFic29sdXRlIHotWzVdIG1heC13LVsxMHZ3XSIsc3R5bGU6e2xlZnQ6ci54KzEwLHRvcDpyLnkrMTB9LHNyYzpsfSksaSldfSxlKX1lbHNle2lmKG4udHlwZT09PSJib29sZWFuIilyZXR1cm4gdD09PW51bGw/dy5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjoiRW1wdHkifSxlKTp3LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOnQ/InRydWUiOiJmYWxzZSJ9LGUpO2lmKG4udHlwZT09PSJudW1iZXIiKXJldHVybiB0PT09bnVsbD93LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOiJFbXB0eSJ9LGUpOncuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46dC50b1N0cmluZygpfSk7aWYobi50eXBlPT09ImtleU9mIilyZXR1cm4gdD09PW51bGw/dy5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjoiRW1wdHkifSxlKTp3LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOnQudG9TdHJpbmcoKX0sZSl9cmV0dXJuIHcuanN4cygiZGl2Iix7Y2hpbGRyZW46WyJUT0RPOiAiLG4udHlwZV19LGUpfWZ1bmN0aW9uIFlNKHtwYXRoOmUsc291cmNlOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Om8sZmllbGQ6aX0pe2NvbnN0W2wsc109cC51c2VTdGF0ZSh0IT09bnVsbCk7cmV0dXJuIHcuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC15LTYiLGNoaWxkcmVuOltpP3cuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IGdhcC14LTQiLGNoaWxkcmVuOlt3LmpzeChQcCx7Y2hlY2tlZDpsLG9uQ2xpY2s6KCk9PntzKGE9PiFhKX19KSx3LmpzeCgic3BhbiIse2NoaWxkcmVuOml9KV19KTp3LmpzeChQcCx7Y2hlY2tlZDpsLG9uQ2xpY2s6KCk9PntzKGE9PiFhKX19KSxsJiZ3LmpzeChYTSx7c291cmNlOnQsc2NoZW1hOm4scGF0aDplLHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDpvfSldfSxlKX1mdW5jdGlvbiBYTSh7c291cmNlOmUscGF0aDp0LHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDpvfSl7aWYobi50eXBlPT09ImFycmF5Iil7aWYodHlwZW9mIGU9PSJvYmplY3QiJiYoZT09PW51bGx8fFFzKGUpKSlyZXR1cm4gdy5qc3goQ0Mse3NvdXJjZTplPT09bnVsbD9bXTplLHBhdGg6dCxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cn0pfWVsc2UgaWYobi50eXBlPT09Im9iamVjdCIpe2lmKHR5cGVvZiBlPT0ib2JqZWN0IiYmKGU9PT1udWxsfHwhUXMoZSkpKXJldHVybiB3LmpzeChFQyx7c291cmNlOmUscGF0aDp0LHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDpvfSl9ZWxzZSBpZihuLnR5cGU9PT0icmljaHRleHQifHxuLnR5cGU9PT0ic3RyaW5nInx8bi50eXBlPT09ImltYWdlInx8bi50eXBlPT09Im51bWJlciJ8fG4udHlwZT09PSJrZXlPZiIpcmV0dXJuIHcuanN4KEpFLHtwYXRoOnQsZGlzYWJsZWQ6ITEsc291cmNlOmUsc2NoZW1hOm4sb25TdWJtaXQ6byh0KX0sdCk7cmV0dXJuIHcuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgYmctZGVzdHJ1Y3RpdmUgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIixjaGlsZHJlbjpbIkVSUk9SOiB1bmV4cGVjdGVkIHNvdXJjZSB0eXBlICIsdHlwZW9mIGUsIiBmb3Igc2NoZW1hIHR5cGUiLCIgIixuLnR5cGVdfSl9ZnVuY3Rpb24gUXMoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gUU0oZSl7Y29uc3QgdD17fTtyZXR1cm4gZS5mb3JFYWNoKG49Pntjb25zdCByPW4uc3BsaXQoIi8iKS5maWx0ZXIoaT0+aSE9PSIiKTtsZXQgbz10O3IuZm9yRWFjaChpPT57b1tpXXx8KG9baV09e30pLG89b1tpXX0pfSksdH1mdW5jdGlvbiBKTSh7cGF0aHM6ZSxzZXRTZWxlY3RlZE1vZHVsZUlkOnR9KXtjb25zdCBuPVFNKGUpO3JldHVybiB3LmpzeChadyx7Y2hpbGRyZW46T2JqZWN0LmVudHJpZXMobikubWFwKChbcixvXSk9PncuanN4KCJkaXYiLHtjbGFzc05hbWU6InB4LTQgcHktMiIsY2hpbGRyZW46dy5qc3goJEMse25hbWU6cix0cmVlOm8sbW9kdWxlSWQ6YC8ke3J9YCxzZXRTZWxlY3RlZE1vZHVsZUlkOnR9KX0sYC8ke3J9YCkpfSl9ZnVuY3Rpb24gJEMoe25hbWU6ZSx0cmVlOnQsbW9kdWxlSWQ6bixzZXRTZWxlY3RlZE1vZHVsZUlkOnJ9KXtyZXR1cm4gdy5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbdy5qc3goImJ1dHRvbiIse29uQ2xpY2s6KCk9PntyKG4pfSxjaGlsZHJlbjplfSksT2JqZWN0LmVudHJpZXModCkubWFwKChbbyxpXSk9PncuanN4KCJkaXYiLHtjbGFzc05hbWU6InB4LTQgcHktMSIsY2hpbGRyZW46dy5qc3goJEMse25hbWU6byx0cmVlOmksbW9kdWxlSWQ6YCR7bn0vJHtvfWAsc2V0U2VsZWN0ZWRNb2R1bGVJZDpyfSl9LGAke259LyR7b31gKSldfSl9Y29uc3QgdDE9e3RhZ3M6e2gxOiJmb250LWJvbGQiLGgyOiJmb250LWJvbGQiLGgzOiJmb250LWJvbGQiLGg0OiJmb250LWJvbGQiLGg1OiJmb250LWJvbGQiLGg2OiJmb250LWJvbGQiLHA6IiJ9LGNsYXNzZXM6e2JvbGQ6ImZvbnQtYm9sZCIsaXRhbGljOiJpdGFsaWMiLGxpbmVUaHJvdWdoOiJsaW5lLXRocm91Z2gifX07ZnVuY3Rpb24gWk0oe2NoaWxkcmVuOmV9KXtjb25zdCB0PWU7ZnVuY3Rpb24gbihpLGwpe2NvbnN0IHM9dDEudGFnc1tpXTtyZXR1cm4gcyYmbD9bbCxzXS5qb2luKCIgIik6c3x8bH1mdW5jdGlvbiByKGksbCl7Y29uc3Qgcz10MS5jbGFzc2VzW2ldO3JldHVybiBzJiZsP1tsLHNdLmpvaW4oIiAiKTpzfHxsfWZ1bmN0aW9uIG8oaSxsKXt2YXIgdSxjO2lmKHR5cGVvZiBpPT0ic3RyaW5nIilyZXR1cm4gaTtpZihpLnRhZz09PSJwIilyZXR1cm4gdy5qc3goInAiLHtjbGFzc05hbWU6bigicCIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxsKTtpZihpLnRhZz09PSJpbWciKXJldHVybiB3LmpzeCgiaW1nIix7Y2xhc3NOYW1lOm4oImltZyIpLHNyYzppLnNyY30sbCk7aWYoaS50YWc9PT0idWwiKXJldHVybiB3LmpzeCgidWwiLHtjbGFzc05hbWU6bigidWwiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0sbCk7aWYoaS50YWc9PT0ib2wiKXJldHVybiB3LmpzeCgib2wiLHtjbGFzc05hbWU6bigib2wiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0sbCk7aWYoaS50YWc9PT0ibGkiKXJldHVybiB3LmpzeCgibGkiLHtjbGFzc05hbWU6bigibGkiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0sbCk7aWYoaS50YWc9PT0ic3BhbiIpcmV0dXJuIHcuanN4KCJzcGFuIix7Y2xhc3NOYW1lOmkuY2xhc3Nlcy5tYXAoZD0+e3N3aXRjaChkKXtjYXNlImJvbGQiOnJldHVybiByKCJib2xkIik7Y2FzZSJsaW5lLXRocm91Z2giOnJldHVybiByKCJsaW5lVGhyb3VnaCIpO2Nhc2UiaXRhbGljIjpyZXR1cm4gcigiaXRhbGljIil9fSkuam9pbigiICIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxsKTtpZihpLnRhZz09PSJoMSIpcmV0dXJuIHcuanN4KCJoMSIse2NsYXNzTmFtZTpuKCJoMSIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxsKTtpZihpLnRhZz09PSJoMiIpcmV0dXJuIHcuanN4KCJoMiIse2NsYXNzTmFtZTpuKCJoMiIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxsKTtpZihpLnRhZz09PSJoMyIpcmV0dXJuIHcuanN4KCJoMyIse2NsYXNzTmFtZTpuKCJoMyIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxsKTtpZihpLnRhZz09PSJoNCIpcmV0dXJuIHcuanN4KCJoNCIse2NsYXNzTmFtZTpuKCJoNCIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxsKTtpZihpLnRhZz09PSJoNSIpcmV0dXJuIHcuanN4KCJoNSIse2NsYXNzTmFtZTpuKCJoNSIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxsKTtpZihpLnRhZz09PSJoNiIpcmV0dXJuIHcuanN4KCJoNiIse2NsYXNzTmFtZTpuKCJoNiIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxsKTtpZihpLnRhZz09PSJiciIpcmV0dXJuIHcuanN4KCJiciIse30sbCk7aWYoaS50YWc9PT0iYSIpcmV0dXJuIHcuanN4KCJhIix7aHJlZjppLmhyZWYsY2hpbGRyZW46aS5jaGlsZHJlbi5tYXAoKGQsZik9Pm8oZCxmKSl9LGwpO2NvbnNvbGUuZXJyb3IoIlVua25vd24gdGFnIixpLnRhZyk7Y29uc3QgYT1pLnRhZztyZXR1cm4gYSE9bnVsbCYmYS50YWc/ZWUuY3JlYXRlRWxlbWVudChhLnRhZyx7a2V5OmwsY2xhc3NOYW1lOih1PWEuY2xhc3MpPT1udWxsP3ZvaWQgMDp1LmpvaW4oIiAiKSxjaGlsZHJlbjooYz1hLmNoaWxkcmVuKT09bnVsbD92b2lkIDA6Yy5tYXAobyl9KTpudWxsfXJldHVybiB3LmpzeCgic3BhbiIseyJkYXRhLXZhbC1wYXRoIjp0LnZhbFBhdGgsY2hpbGRyZW46dC5jaGlsZHJlbi5tYXAoKGksbCk9Pm8oaSxsKSl9KX1jb25zdCBxTT1wLmNyZWF0ZUNvbnRleHQobnVsbCksemY9e2RpZENhdGNoOiExLGVycm9yOm51bGx9O2NsYXNzIGU0IGV4dGVuZHMgcC5Db21wb25lbnR7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5yZXNldEVycm9yQm91bmRhcnk9dGhpcy5yZXNldEVycm9yQm91bmRhcnkuYmluZCh0aGlzKSx0aGlzLnN0YXRlPXpmfXN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IodCl7cmV0dXJue2RpZENhdGNoOiEwLGVycm9yOnR9fXJlc2V0RXJyb3JCb3VuZGFyeSgpe2NvbnN0e2Vycm9yOnR9PXRoaXMuc3RhdGU7aWYodCE9PW51bGwpe2Zvcih2YXIgbixyLG89YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShvKSxsPTA7bDxvO2wrKylpW2xdPWFyZ3VtZW50c1tsXTsobj0ocj10aGlzLnByb3BzKS5vblJlc2V0KT09PW51bGx8fG49PT12b2lkIDB8fG4uY2FsbChyLHthcmdzOmkscmVhc29uOiJpbXBlcmF0aXZlLWFwaSJ9KSx0aGlzLnNldFN0YXRlKHpmKX19Y29tcG9uZW50RGlkQ2F0Y2godCxuKXt2YXIgcixvOyhyPShvPXRoaXMucHJvcHMpLm9uRXJyb3IpPT09bnVsbHx8cj09PXZvaWQgMHx8ci5jYWxsKG8sdCxuKX1jb21wb25lbnREaWRVcGRhdGUodCxuKXtjb25zdHtkaWRDYXRjaDpyfT10aGlzLnN0YXRlLHtyZXNldEtleXM6b309dGhpcy5wcm9wcztpZihyJiZuLmVycm9yIT09bnVsbCYmdDQodC5yZXNldEtleXMsbykpe3ZhciBpLGw7KGk9KGw9dGhpcy5wcm9wcykub25SZXNldCk9PT1udWxsfHxpPT09dm9pZCAwfHxpLmNhbGwobCx7bmV4dDpvLHByZXY6dC5yZXNldEtleXMscmVhc29uOiJrZXlzIn0pLHRoaXMuc2V0U3RhdGUoemYpfX1yZW5kZXIoKXtjb25zdHtjaGlsZHJlbjp0LGZhbGxiYWNrUmVuZGVyOm4sRmFsbGJhY2tDb21wb25lbnQ6cixmYWxsYmFjazpvfT10aGlzLnByb3BzLHtkaWRDYXRjaDppLGVycm9yOmx9PXRoaXMuc3RhdGU7bGV0IHM9dDtpZihpKXtjb25zdCBhPXtlcnJvcjpsLHJlc2V0RXJyb3JCb3VuZGFyeTp0aGlzLnJlc2V0RXJyb3JCb3VuZGFyeX07aWYocC5pc1ZhbGlkRWxlbWVudChvKSlzPW87ZWxzZSBpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIilzPW4oYSk7ZWxzZSBpZihyKXM9cC5jcmVhdGVFbGVtZW50KHIsYSk7ZWxzZSB0aHJvdyBsfXJldHVybiBwLmNyZWF0ZUVsZW1lbnQocU0uUHJvdmlkZXIse3ZhbHVlOntkaWRDYXRjaDppLGVycm9yOmwscmVzZXRFcnJvckJvdW5kYXJ5OnRoaXMucmVzZXRFcnJvckJvdW5kYXJ5fX0scyl9fWZ1bmN0aW9uIHQ0KCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOltdLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOltdO3JldHVybiBlLmxlbmd0aCE9PXQubGVuZ3RofHxlLnNvbWUoKG4scik9PiFPYmplY3QuaXMobix0W3JdKSl9Y29uc3Qga0M9IkNvbGxhcHNpYmxlIixbbjQsVENdPWtpKGtDKSxbcjQsQm1dPW40KGtDKSxvND1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlQ29sbGFwc2libGU6bixvcGVuOnIsZGVmYXVsdE9wZW46byxkaXNhYmxlZDppLG9uT3BlbkNoYW5nZTpsLC4uLnN9PWUsW2E9ITEsdV09QWwoe3Byb3A6cixkZWZhdWx0UHJvcDpvLG9uQ2hhbmdlOmx9KTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KHI0LHtzY29wZTpuLGRpc2FibGVkOmksY29udGVudElkOlRkKCksb3BlbjphLG9uT3BlblRvZ2dsZTpwLnVzZUNhbGxiYWNrKCgpPT51KGM9PiFjKSxbdV0pfSxwLmNyZWF0ZUVsZW1lbnQoTGUuZGl2LHRlKHsiZGF0YS1zdGF0ZSI6V20oYSksImRhdGEtZGlzYWJsZWQiOmk/IiI6dm9pZCAwfSxzLHtyZWY6dH0pKSl9KSxpND0iQ29sbGFwc2libGVUcmlnZ2VyIixsND1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlQ29sbGFwc2libGU6biwuLi5yfT1lLG89Qm0oaTQsbik7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChMZS5idXR0b24sdGUoe3R5cGU6ImJ1dHRvbiIsImFyaWEtY29udHJvbHMiOm8uY29udGVudElkLCJhcmlhLWV4cGFuZGVkIjpvLm9wZW58fCExLCJkYXRhLXN0YXRlIjpXbShvLm9wZW4pLCJkYXRhLWRpc2FibGVkIjpvLmRpc2FibGVkPyIiOnZvaWQgMCxkaXNhYmxlZDpvLmRpc2FibGVkfSxyLHtyZWY6dCxvbkNsaWNrOkhlKGUub25DbGljayxvLm9uT3BlblRvZ2dsZSl9KSl9KSxiQz0iQ29sbGFwc2libGVDb250ZW50IixzND1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtmb3JjZU1vdW50Om4sLi4ucn09ZSxvPUJtKGJDLGUuX19zY29wZUNvbGxhcHNpYmxlKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KHpsLHtwcmVzZW50Om58fG8ub3Blbn0sKHtwcmVzZW50Oml9KT0+cC5jcmVhdGVFbGVtZW50KGE0LHRlKHt9LHIse3JlZjp0LHByZXNlbnQ6aX0pKSl9KSxhND1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlQ29sbGFwc2libGU6bixwcmVzZW50OnIsY2hpbGRyZW46bywuLi5pfT1lLGw9Qm0oYkMsbiksW3MsYV09cC51c2VTdGF0ZShyKSx1PXAudXNlUmVmKG51bGwpLGM9UWUodCx1KSxkPXAudXNlUmVmKDApLGY9ZC5jdXJyZW50LGg9cC51c2VSZWYoMCksZz1oLmN1cnJlbnQsbT1sLm9wZW58fHMsXz1wLnVzZVJlZihtKSx2PXAudXNlUmVmKCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3QgeT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pl8uY3VycmVudD0hMSk7cmV0dXJuKCk9PmNhbmNlbEFuaW1hdGlvbkZyYW1lKHkpfSxbXSksYm4oKCk9Pntjb25zdCB5PXUuY3VycmVudDtpZih5KXt2LmN1cnJlbnQ9di5jdXJyZW50fHx7dHJhbnNpdGlvbkR1cmF0aW9uOnkuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uLGFuaW1hdGlvbk5hbWU6eS5zdHlsZS5hbmltYXRpb25OYW1lfSx5LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj0iMHMiLHkuc3R5bGUuYW5pbWF0aW9uTmFtZT0ibm9uZSI7Y29uc3QgeD15LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2QuY3VycmVudD14LmhlaWdodCxoLmN1cnJlbnQ9eC53aWR0aCxfLmN1cnJlbnR8fCh5LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj12LmN1cnJlbnQudHJhbnNpdGlvbkR1cmF0aW9uLHkuc3R5bGUuYW5pbWF0aW9uTmFtZT12LmN1cnJlbnQuYW5pbWF0aW9uTmFtZSksYShyKX19LFtsLm9wZW4scl0pLHAuY3JlYXRlRWxlbWVudChMZS5kaXYsdGUoeyJkYXRhLXN0YXRlIjpXbShsLm9wZW4pLCJkYXRhLWRpc2FibGVkIjpsLmRpc2FibGVkPyIiOnZvaWQgMCxpZDpsLmNvbnRlbnRJZCxoaWRkZW46IW19LGkse3JlZjpjLHN0eWxlOnsiLS1yYWRpeC1jb2xsYXBzaWJsZS1jb250ZW50LWhlaWdodCI6Zj9gJHtmfXB4YDp2b2lkIDAsIi0tcmFkaXgtY29sbGFwc2libGUtY29udGVudC13aWR0aCI6Zz9gJHtnfXB4YDp2b2lkIDAsLi4uZS5zdHlsZX19KSxtJiZvKX0pO2Z1bmN0aW9uIFdtKGUpe3JldHVybiBlPyJvcGVuIjoiY2xvc2VkIn1jb25zdCB1ND1vNCxjND1sNCxkND1zNCxIbz0iQWNjb3JkaW9uIixmND1bIkhvbWUiLCJFbmQiLCJBcnJvd0Rvd24iLCJBcnJvd1VwIiwiQXJyb3dMZWZ0IiwiQXJyb3dSaWdodCJdLFtVbSxoNCxwNF09YUUoSG8pLFtqZCxRNF09a2koSG8sW3A0LFRDXSksVm09VEMoKSxOQz1lZS5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7dHlwZTpuLC4uLnJ9PWUsbz1yLGk9cjtyZXR1cm4gZWUuY3JlYXRlRWxlbWVudChVbS5Qcm92aWRlcix7c2NvcGU6ZS5fX3Njb3BlQWNjb3JkaW9ufSxuPT09Im11bHRpcGxlIj9lZS5jcmVhdGVFbGVtZW50KHk0LHRlKHt9LGkse3JlZjp0fSkpOmVlLmNyZWF0ZUVsZW1lbnQodjQsdGUoe30sbyx7cmVmOnR9KSkpfSk7TkMucHJvcFR5cGVzPXt0eXBlKGUpe2NvbnN0IHQ9ZS52YWx1ZXx8ZS5kZWZhdWx0VmFsdWU7cmV0dXJuIGUudHlwZSYmIVsic2luZ2xlIiwibXVsdGlwbGUiXS5pbmNsdWRlcyhlLnR5cGUpP25ldyBFcnJvcigiSW52YWxpZCBwcm9wIGB0eXBlYCBzdXBwbGllZCB0byBgQWNjb3JkaW9uYC4gRXhwZWN0ZWQgb25lIG9mIGBzaW5nbGUgfCBtdWx0aXBsZWAuIik6ZS50eXBlPT09Im11bHRpcGxlIiYmdHlwZW9mIHQ9PSJzdHJpbmciP25ldyBFcnJvcigiSW52YWxpZCBwcm9wIGB0eXBlYCBzdXBwbGllZCB0byBgQWNjb3JkaW9uYC4gRXhwZWN0ZWQgYHNpbmdsZWAgd2hlbiBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIGlzIHR5cGUgYHN0cmluZ2AuIik6ZS50eXBlPT09InNpbmdsZSImJkFycmF5LmlzQXJyYXkodCk/bmV3IEVycm9yKCJJbnZhbGlkIHByb3AgYHR5cGVgIHN1cHBsaWVkIHRvIGBBY2NvcmRpb25gLiBFeHBlY3RlZCBgbXVsdGlwbGVgIHdoZW4gYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBpcyB0eXBlIGBzdHJpbmdbXWAuIik6bnVsbH19O2NvbnN0W1JDLGc0XT1qZChIbyksW1BDLG00XT1qZChIbyx7Y29sbGFwc2libGU6ITF9KSx2ND1lZS5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7dmFsdWU6bixkZWZhdWx0VmFsdWU6cixvblZhbHVlQ2hhbmdlOm89KCk9Pnt9LGNvbGxhcHNpYmxlOmk9ITEsLi4ubH09ZSxbcyxhXT1BbCh7cHJvcDpuLGRlZmF1bHRQcm9wOnIsb25DaGFuZ2U6b30pO3JldHVybiBlZS5jcmVhdGVFbGVtZW50KFJDLHtzY29wZTplLl9fc2NvcGVBY2NvcmRpb24sdmFsdWU6cz9bc106W10sb25JdGVtT3BlbjphLG9uSXRlbUNsb3NlOmVlLnVzZUNhbGxiYWNrKCgpPT5pJiZhKCIiKSxbaSxhXSl9LGVlLmNyZWF0ZUVsZW1lbnQoUEMse3Njb3BlOmUuX19zY29wZUFjY29yZGlvbixjb2xsYXBzaWJsZTppfSxlZS5jcmVhdGVFbGVtZW50KE9DLHRlKHt9LGwse3JlZjp0fSkpKSl9KSx5ND1lZS5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7dmFsdWU6bixkZWZhdWx0VmFsdWU6cixvblZhbHVlQ2hhbmdlOm89KCk9Pnt9LC4uLml9PWUsW2w9W10sc109QWwoe3Byb3A6bixkZWZhdWx0UHJvcDpyLG9uQ2hhbmdlOm99KSxhPWVlLnVzZUNhbGxiYWNrKGM9PnMoKGQ9W10pPT5bLi4uZCxjXSksW3NdKSx1PWVlLnVzZUNhbGxiYWNrKGM9PnMoKGQ9W10pPT5kLmZpbHRlcihmPT5mIT09YykpLFtzXSk7cmV0dXJuIGVlLmNyZWF0ZUVsZW1lbnQoUkMse3Njb3BlOmUuX19zY29wZUFjY29yZGlvbix2YWx1ZTpsLG9uSXRlbU9wZW46YSxvbkl0ZW1DbG9zZTp1fSxlZS5jcmVhdGVFbGVtZW50KFBDLHtzY29wZTplLl9fc2NvcGVBY2NvcmRpb24sY29sbGFwc2libGU6ITB9LGVlLmNyZWF0ZUVsZW1lbnQoT0MsdGUoe30saSx7cmVmOnR9KSkpKX0pLFt4NCx6ZF09amQoSG8pLE9DPWVlLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlQWNjb3JkaW9uOm4sZGlzYWJsZWQ6cixkaXI6byxvcmllbnRhdGlvbjppPSJ2ZXJ0aWNhbCIsLi4ubH09ZSxzPWVlLnVzZVJlZihudWxsKSxhPVFlKHMsdCksdT1oNChuKSxkPUlnKG8pPT09Imx0ciIsZj1IZShlLm9uS2V5RG93bixoPT57dmFyIGc7aWYoIWY0LmluY2x1ZGVzKGgua2V5KSlyZXR1cm47Y29uc3QgbT1oLnRhcmdldCxfPXUoKS5maWx0ZXIoRD0+e3ZhciBNO3JldHVybiEoKE09RC5yZWYuY3VycmVudCkhPT1udWxsJiZNIT09dm9pZCAwJiZNLmRpc2FibGVkKX0pLHY9Xy5maW5kSW5kZXgoRD0+RC5yZWYuY3VycmVudD09PW0pLHk9Xy5sZW5ndGg7aWYodj09PS0xKXJldHVybjtoLnByZXZlbnREZWZhdWx0KCk7bGV0IHg9djtjb25zdCBTPTAsaz15LTEsYj0oKT0+e3g9disxLHg+ayYmKHg9Uyl9LFQ9KCk9Pnt4PXYtMSx4PFMmJih4PWspfTtzd2l0Y2goaC5rZXkpe2Nhc2UiSG9tZSI6eD1TO2JyZWFrO2Nhc2UiRW5kIjp4PWs7YnJlYWs7Y2FzZSJBcnJvd1JpZ2h0IjppPT09Imhvcml6b250YWwiJiYoZD9iKCk6VCgpKTticmVhaztjYXNlIkFycm93RG93biI6aT09PSJ2ZXJ0aWNhbCImJmIoKTticmVhaztjYXNlIkFycm93TGVmdCI6aT09PSJob3Jpem9udGFsIiYmKGQ/VCgpOmIoKSk7YnJlYWs7Y2FzZSJBcnJvd1VwIjppPT09InZlcnRpY2FsIiYmVCgpO2JyZWFrfWNvbnN0IE49eCV5OyhnPV9bTl0ucmVmLmN1cnJlbnQpPT09bnVsbHx8Zz09PXZvaWQgMHx8Zy5mb2N1cygpfSk7cmV0dXJuIGVlLmNyZWF0ZUVsZW1lbnQoeDQse3Njb3BlOm4sZGlzYWJsZWQ6cixkaXJlY3Rpb246byxvcmllbnRhdGlvbjppfSxlZS5jcmVhdGVFbGVtZW50KFVtLlNsb3Qse3Njb3BlOm59LGVlLmNyZWF0ZUVsZW1lbnQoTGUuZGl2LHRlKHt9LGwseyJkYXRhLW9yaWVudGF0aW9uIjppLHJlZjphLG9uS2V5RG93bjpyP3ZvaWQgMDpmfSkpKSl9KSxJcD0iQWNjb3JkaW9uSXRlbSIsW3c0LEhtXT1qZChJcCksXzQ9ZWUuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVBY2NvcmRpb246bix2YWx1ZTpyLC4uLm99PWUsaT16ZChJcCxuKSxsPWc0KElwLG4pLHM9Vm0obiksYT1UZCgpLHU9ciYmbC52YWx1ZS5pbmNsdWRlcyhyKXx8ITEsYz1pLmRpc2FibGVkfHxlLmRpc2FibGVkO3JldHVybiBlZS5jcmVhdGVFbGVtZW50KHc0LHtzY29wZTpuLG9wZW46dSxkaXNhYmxlZDpjLHRyaWdnZXJJZDphfSxlZS5jcmVhdGVFbGVtZW50KHU0LHRlKHsiZGF0YS1vcmllbnRhdGlvbiI6aS5vcmllbnRhdGlvbiwiZGF0YS1zdGF0ZSI6QUModSl9LHMsbyx7cmVmOnQsZGlzYWJsZWQ6YyxvcGVuOnUsb25PcGVuQ2hhbmdlOmQ9PntkP2wub25JdGVtT3BlbihyKTpsLm9uSXRlbUNsb3NlKHIpfX0pKSl9KSxTND0iQWNjb3JkaW9uSGVhZGVyIixFND1lZS5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZUFjY29yZGlvbjpuLC4uLnJ9PWUsbz16ZChIbyxuKSxpPUhtKFM0LG4pO3JldHVybiBlZS5jcmVhdGVFbGVtZW50KExlLmgzLHRlKHsiZGF0YS1vcmllbnRhdGlvbiI6by5vcmllbnRhdGlvbiwiZGF0YS1zdGF0ZSI6QUMoaS5vcGVuKSwiZGF0YS1kaXNhYmxlZCI6aS5kaXNhYmxlZD8iIjp2b2lkIDB9LHIse3JlZjp0fSkpfSksbjE9IkFjY29yZGlvblRyaWdnZXIiLEM0PWVlLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlQWNjb3JkaW9uOm4sLi4ucn09ZSxvPXpkKEhvLG4pLGk9SG0objEsbiksbD1tNChuMSxuKSxzPVZtKG4pO3JldHVybiBlZS5jcmVhdGVFbGVtZW50KFVtLkl0ZW1TbG90LHtzY29wZTpufSxlZS5jcmVhdGVFbGVtZW50KGM0LHRlKHsiYXJpYS1kaXNhYmxlZCI6aS5vcGVuJiYhbC5jb2xsYXBzaWJsZXx8dm9pZCAwLCJkYXRhLW9yaWVudGF0aW9uIjpvLm9yaWVudGF0aW9uLGlkOmkudHJpZ2dlcklkfSxzLHIse3JlZjp0fSkpKX0pLCQ0PSJBY2NvcmRpb25Db250ZW50IixrND1lZS5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZUFjY29yZGlvbjpuLC4uLnJ9PWUsbz16ZChIbyxuKSxpPUhtKCQ0LG4pLGw9Vm0obik7cmV0dXJuIGVlLmNyZWF0ZUVsZW1lbnQoZDQsdGUoe3JvbGU6InJlZ2lvbiIsImFyaWEtbGFiZWxsZWRieSI6aS50cmlnZ2VySWQsImRhdGEtb3JpZW50YXRpb24iOm8ub3JpZW50YXRpb259LGwscix7cmVmOnQsc3R5bGU6eyItLXJhZGl4LWFjY29yZGlvbi1jb250ZW50LWhlaWdodCI6InZhcigtLXJhZGl4LWNvbGxhcHNpYmxlLWNvbnRlbnQtaGVpZ2h0KSIsIi0tcmFkaXgtYWNjb3JkaW9uLWNvbnRlbnQtd2lkdGgiOiJ2YXIoLS1yYWRpeC1jb2xsYXBzaWJsZS1jb250ZW50LXdpZHRoKSIsLi4uZS5zdHlsZX19KSl9KTtmdW5jdGlvbiBBQyhlKXtyZXR1cm4gZT8ib3BlbiI6ImNsb3NlZCJ9Y29uc3QgVDQ9TkMsYjQ9XzQsTjQ9RTQsTUM9QzQsTEM9azQsUjQ9VDQsREM9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsLi4udH0sbik9PncuanN4KGI0LHtyZWY6bixjbGFzc05hbWU6c3QoImJvcmRlci1iIixlKSwuLi50fSkpO0RDLmRpc3BsYXlOYW1lPSJBY2NvcmRpb25JdGVtIjtjb25zdCBJQz1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSxjaGlsZHJlbjp0LC4uLm59LHIpPT53LmpzeChONCx7Y2xhc3NOYW1lOiJmbGV4IixjaGlsZHJlbjp3LmpzeHMoTUMse3JlZjpyLGNsYXNzTmFtZTpzdCgiZmxleCBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweS00IGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tYWxsIGhvdmVyOnVuZGVybGluZSBbJltkYXRhLXN0YXRlPW9wZW5dPnN2Z106cm90YXRlLTE4MCIsZSksLi4ubixjaGlsZHJlbjpbdCx3LmpzeChzRSx7Y2xhc3NOYW1lOiJ3LTQgaC00IHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTIwMCBzaHJpbmstMCJ9KV19KX0pKTtJQy5kaXNwbGF5TmFtZT1NQy5kaXNwbGF5TmFtZTtjb25zdCBqQz1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSxjaGlsZHJlbjp0LC4uLm59LHIpPT53LmpzeChMQyx7cmVmOnIsY2xhc3NOYW1lOnN0KCJvdmVyZmxvdy1oaWRkZW4gdGV4dC1zbSB0cmFuc2l0aW9uLWFsbCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtYWNjb3JkaW9uLXVwIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtYWNjb3JkaW9uLWRvd24iLGUpLC4uLm4sY2hpbGRyZW46dy5qc3goImRpdiIse2NsYXNzTmFtZToicHQtMCBwYi00IixjaGlsZHJlbjp0fSl9KSk7akMuZGlzcGxheU5hbWU9TEMuZGlzcGxheU5hbWU7LyoqCiAqIFJlYWN0IFJvdXRlciBET00gdjYuMjAuMAogKgogKiBDb3B5cmlnaHQgKGMpIFJlbWl4IFNvZnR3YXJlIEluYy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICoKICogQGxpY2Vuc2UgTUlUCiAqL2Z1bmN0aW9uIEdjKCl7cmV0dXJuIEdjPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sR2MuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFA0KGUsdCl7cmV0dXJuIGhNKHtiYXNlbmFtZTp0PT1udWxsP3ZvaWQgMDp0LmJhc2VuYW1lLGZ1dHVyZTpHYyh7fSx0PT1udWxsP3ZvaWQgMDp0LmZ1dHVyZSx7djdfcHJlcGVuZEJhc2VuYW1lOiEwfSksaGlzdG9yeTpMMyh7d2luZG93OnQ9PW51bGw/dm9pZCAwOnQud2luZG93fSksaHlkcmF0aW9uRGF0YToodD09bnVsbD92b2lkIDA6dC5oeWRyYXRpb25EYXRhKXx8TzQoKSxyb3V0ZXM6ZSxtYXBSb3V0ZVByb3BlcnRpZXM6Rk0sd2luZG93OnQ9PW51bGw/dm9pZCAwOnQud2luZG93fSkuaW5pdGlhbGl6ZSgpfWZ1bmN0aW9uIE80KCl7dmFyIGU7bGV0IHQ9KGU9d2luZG93KT09bnVsbD92b2lkIDA6ZS5fX3N0YXRpY1JvdXRlckh5ZHJhdGlvbkRhdGE7cmV0dXJuIHQmJnQuZXJyb3JzJiYodD1HYyh7fSx0LHtlcnJvcnM6QTQodC5lcnJvcnMpfSkpLHR9ZnVuY3Rpb24gQTQoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9T2JqZWN0LmVudHJpZXMoZSksbj17fTtmb3IobGV0W3Isb11vZiB0KWlmKG8mJm8uX190eXBlPT09IlJvdXRlRXJyb3JSZXNwb25zZSIpbltyXT1uZXcgSW0oby5zdGF0dXMsby5zdGF0dXNUZXh0LG8uZGF0YSxvLmludGVybmFsPT09ITApO2Vsc2UgaWYobyYmby5fX3R5cGU9PT0iRXJyb3IiKXtpZihvLl9fc3ViVHlwZSl7bGV0IGk9d2luZG93W28uX19zdWJUeXBlXTtpZih0eXBlb2YgaT09ImZ1bmN0aW9uIil0cnl7bGV0IGw9bmV3IGkoby5tZXNzYWdlKTtsLnN0YWNrPSIiLG5bcl09bH1jYXRjaHt9fWlmKG5bcl09PW51bGwpe2xldCBpPW5ldyBFcnJvcihvLm1lc3NhZ2UpO2kuc3RhY2s9IiIsbltyXT1pfX1lbHNlIG5bcl09bztyZXR1cm4gbn1jb25zdCBNND1wLmNyZWF0ZUNvbnRleHQoe2lzVHJhbnNpdGlvbmluZzohMX0pLEw0PXAuY3JlYXRlQ29udGV4dChuZXcgTWFwKSxEND0ic3RhcnRUcmFuc2l0aW9uIixyMT1tMVtENF0sSTQ9ImZsdXNoU3luYyIsbzE9ZFRbSTRdO2Z1bmN0aW9uIGo0KGUpe3IxP3IxKGUpOmUoKX1mdW5jdGlvbiB5cyhlKXtvMT9vMShlKTplKCl9Y2xhc3MgejR7Y29uc3RydWN0b3IoKXt0aGlzLnN0YXR1cz0icGVuZGluZyIsdGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKCh0LG4pPT57dGhpcy5yZXNvbHZlPXI9Pnt0aGlzLnN0YXR1cz09PSJwZW5kaW5nIiYmKHRoaXMuc3RhdHVzPSJyZXNvbHZlZCIsdChyKSl9LHRoaXMucmVqZWN0PXI9Pnt0aGlzLnN0YXR1cz09PSJwZW5kaW5nIiYmKHRoaXMuc3RhdHVzPSJyZWplY3RlZCIsbihyKSl9fSl9fWZ1bmN0aW9uIEY0KGUpe2xldHtmYWxsYmFja0VsZW1lbnQ6dCxyb3V0ZXI6bixmdXR1cmU6cn09ZSxbbyxpXT1wLnVzZVN0YXRlKG4uc3RhdGUpLFtsLHNdPXAudXNlU3RhdGUoKSxbYSx1XT1wLnVzZVN0YXRlKHtpc1RyYW5zaXRpb25pbmc6ITF9KSxbYyxkXT1wLnVzZVN0YXRlKCksW2YsaF09cC51c2VTdGF0ZSgpLFtnLG1dPXAudXNlU3RhdGUoKSxfPXAudXNlUmVmKG5ldyBNYXApLHt2N19zdGFydFRyYW5zaXRpb246dn09cnx8e30seT1wLnVzZUNhbGxiYWNrKFQ9Pnt2P2o0KFQpOlQoKX0sW3ZdKSx4PXAudXNlQ2FsbGJhY2soKFQsTik9PntsZXR7ZGVsZXRlZEZldGNoZXJzOkQsdW5zdGFibGVfZmx1c2hTeW5jOk0sdW5zdGFibGVfdmlld1RyYW5zaXRpb25PcHRzOmp9PU47RC5mb3JFYWNoKHJlPT5fLmN1cnJlbnQuZGVsZXRlKHJlKSksVC5mZXRjaGVycy5mb3JFYWNoKChyZSxIKT0+e3JlLmRhdGEhPT12b2lkIDAmJl8uY3VycmVudC5zZXQoSCxyZS5kYXRhKX0pO2xldCBCPW4ud2luZG93PT1udWxsfHx0eXBlb2Ygbi53aW5kb3cuZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbiE9ImZ1bmN0aW9uIjtpZighanx8Qil7TT95cygoKT0+aShUKSk6eSgoKT0+aShUKSk7cmV0dXJufWlmKE0pe3lzKCgpPT57ZiYmKGMmJmMucmVzb2x2ZSgpLGYuc2tpcFRyYW5zaXRpb24oKSksdSh7aXNUcmFuc2l0aW9uaW5nOiEwLGZsdXNoU3luYzohMCxjdXJyZW50TG9jYXRpb246ai5jdXJyZW50TG9jYXRpb24sbmV4dExvY2F0aW9uOmoubmV4dExvY2F0aW9ufSl9KTtsZXQgcmU9bi53aW5kb3cuZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbigoKT0+e3lzKCgpPT5pKFQpKX0pO3JlLmZpbmlzaGVkLmZpbmFsbHkoKCk9Pnt5cygoKT0+e2Qodm9pZCAwKSxoKHZvaWQgMCkscyh2b2lkIDApLHUoe2lzVHJhbnNpdGlvbmluZzohMX0pfSl9KSx5cygoKT0+aChyZSkpO3JldHVybn1mPyhjJiZjLnJlc29sdmUoKSxmLnNraXBUcmFuc2l0aW9uKCksbSh7c3RhdGU6VCxjdXJyZW50TG9jYXRpb246ai5jdXJyZW50TG9jYXRpb24sbmV4dExvY2F0aW9uOmoubmV4dExvY2F0aW9ufSkpOihzKFQpLHUoe2lzVHJhbnNpdGlvbmluZzohMCxmbHVzaFN5bmM6ITEsY3VycmVudExvY2F0aW9uOmouY3VycmVudExvY2F0aW9uLG5leHRMb2NhdGlvbjpqLm5leHRMb2NhdGlvbn0pKX0sW24ud2luZG93LGYsYyxfLHldKTtwLnVzZUxheW91dEVmZmVjdCgoKT0+bi5zdWJzY3JpYmUoeCksW24seF0pLHAudXNlRWZmZWN0KCgpPT57YS5pc1RyYW5zaXRpb25pbmcmJiFhLmZsdXNoU3luYyYmZChuZXcgejQpfSxbYV0pLHAudXNlRWZmZWN0KCgpPT57aWYoYyYmbCYmbi53aW5kb3cpe2xldCBUPWwsTj1jLnByb21pc2UsRD1uLndpbmRvdy5kb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGFzeW5jKCk9Pnt5KCgpPT5pKFQpKSxhd2FpdCBOfSk7RC5maW5pc2hlZC5maW5hbGx5KCgpPT57ZCh2b2lkIDApLGgodm9pZCAwKSxzKHZvaWQgMCksdSh7aXNUcmFuc2l0aW9uaW5nOiExfSl9KSxoKEQpfX0sW3ksbCxjLG4ud2luZG93XSkscC51c2VFZmZlY3QoKCk9PntjJiZsJiZvLmxvY2F0aW9uLmtleT09PWwubG9jYXRpb24ua2V5JiZjLnJlc29sdmUoKX0sW2MsZixvLmxvY2F0aW9uLGxdKSxwLnVzZUVmZmVjdCgoKT0+eyFhLmlzVHJhbnNpdGlvbmluZyYmZyYmKHMoZy5zdGF0ZSksdSh7aXNUcmFuc2l0aW9uaW5nOiEwLGZsdXNoU3luYzohMSxjdXJyZW50TG9jYXRpb246Zy5jdXJyZW50TG9jYXRpb24sbmV4dExvY2F0aW9uOmcubmV4dExvY2F0aW9ufSksbSh2b2lkIDApKX0sW2EuaXNUcmFuc2l0aW9uaW5nLGddKTtsZXQgUz1wLnVzZU1lbW8oKCk9Pih7Y3JlYXRlSHJlZjpuLmNyZWF0ZUhyZWYsZW5jb2RlTG9jYXRpb246bi5lbmNvZGVMb2NhdGlvbixnbzpUPT5uLm5hdmlnYXRlKFQpLHB1c2g6KFQsTixEKT0+bi5uYXZpZ2F0ZShULHtzdGF0ZTpOLHByZXZlbnRTY3JvbGxSZXNldDpEPT1udWxsP3ZvaWQgMDpELnByZXZlbnRTY3JvbGxSZXNldH0pLHJlcGxhY2U6KFQsTixEKT0+bi5uYXZpZ2F0ZShULHtyZXBsYWNlOiEwLHN0YXRlOk4scHJldmVudFNjcm9sbFJlc2V0OkQ9PW51bGw/dm9pZCAwOkQucHJldmVudFNjcm9sbFJlc2V0fSl9KSxbbl0pLGs9bi5iYXNlbmFtZXx8Ii8iLGI9cC51c2VNZW1vKCgpPT4oe3JvdXRlcjpuLG5hdmlnYXRvcjpTLHN0YXRpYzohMSxiYXNlbmFtZTprfSksW24sUyxrXSk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChwLkZyYWdtZW50LG51bGwscC5jcmVhdGVFbGVtZW50KE1kLlByb3ZpZGVyLHt2YWx1ZTpifSxwLmNyZWF0ZUVsZW1lbnQocEMuUHJvdmlkZXIse3ZhbHVlOm99LHAuY3JlYXRlRWxlbWVudChMNC5Qcm92aWRlcix7dmFsdWU6Xy5jdXJyZW50fSxwLmNyZWF0ZUVsZW1lbnQoTTQuUHJvdmlkZXIse3ZhbHVlOmF9LHAuY3JlYXRlRWxlbWVudCh6TSx7YmFzZW5hbWU6ayxsb2NhdGlvbjpvLmxvY2F0aW9uLG5hdmlnYXRpb25UeXBlOm8uaGlzdG9yeUFjdGlvbixuYXZpZ2F0b3I6U30sby5pbml0aWFsaXplZD9wLmNyZWF0ZUVsZW1lbnQoQjQse3JvdXRlczpuLnJvdXRlcyxzdGF0ZTpvfSk6dCkpKSkpLG51bGwpfWZ1bmN0aW9uIEI0KGUpe2xldHtyb3V0ZXM6dCxzdGF0ZTpufT1lO3JldHVybiBiTSh0LHZvaWQgMCxuKX12YXIgaTE7KGZ1bmN0aW9uKGUpe2UuVXNlU2Nyb2xsUmVzdG9yYXRpb249InVzZVNjcm9sbFJlc3RvcmF0aW9uIixlLlVzZVN1Ym1pdD0idXNlU3VibWl0IixlLlVzZVN1Ym1pdEZldGNoZXI9InVzZVN1Ym1pdEZldGNoZXIiLGUuVXNlRmV0Y2hlcj0idXNlRmV0Y2hlciIsZS51c2VWaWV3VHJhbnNpdGlvblN0YXRlPSJ1c2VWaWV3VHJhbnNpdGlvblN0YXRlIn0pKGkxfHwoaTE9e30pKTt2YXIgbDE7KGZ1bmN0aW9uKGUpe2UuVXNlRmV0Y2hlcj0idXNlRmV0Y2hlciIsZS5Vc2VGZXRjaGVycz0idXNlRmV0Y2hlcnMiLGUuVXNlU2Nyb2xsUmVzdG9yYXRpb249InVzZVNjcm9sbFJlc3RvcmF0aW9uIn0pKGwxfHwobDE9e30pKTtmdW5jdGlvbiBXNCh7ZXJyb3I6ZSxyZXNldEVycm9yQm91bmRhcnk6dH0pe3JldHVybiBjb25zb2xlLmVycm9yKGUpLHcuanN4KCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LXNjcmVlbiBoLXNjcmVlbiBiZy1jYXJkLWZvcmVncm91bmQiLGNoaWxkcmVuOncuanN4KCJkaXYiLHtjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgcC0xMCIsY2hpbGRyZW46dy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgcC0xMCBiZy1jYXJkIHRleHQtcHJpbWFyeSIsY2hpbGRyZW46W3cuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4iLGNoaWxkcmVuOlt3LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLVswLjVlbV0gdGV4dC1sZyBmb250LWJvbGQgdGV4dC1jZW50ZXIgcHktMiIsY2hpbGRyZW46W3cuanN4KFpFLHt9KSwiIGVuY291bnRlcmVkIGFuIGVycm9yIl19KSx3LmpzeCgiYnV0dG9uIix7b25DbGljazp0LGNoaWxkcmVuOncuanN4KENPLHt9KX0pXX0pLHcuanN4KCJkaXYiLHtjbGFzc05hbWU6InRleHQtNHhsIGZvbnQtbm9ybWFsICIsY2hpbGRyZW46Ik1lc3NhZ2U6In0pLHcuanN4KCJwcmUiLHtjaGlsZHJlbjplLm1lc3NhZ2V9KSxlLnN0YWNrJiZ3LmpzeChSNCx7dHlwZToic2luZ2xlIixjbGFzc05hbWU6ImZvbnQtc2VyaWYiLGNvbGxhcHNpYmxlOiEwLGRlZmF1bHRWYWx1ZToiZXJyb3IiLGNoaWxkcmVuOncuanN4cyhEQyx7dmFsdWU6ImVycm9yIixjaGlsZHJlbjpbdy5qc3goSUMse2NoaWxkcmVuOiJTdGFjayB0cmFjZToifSksdy5qc3goakMse2NsYXNzTmFtZToicC00IGJnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQiLGNoaWxkcmVuOmUuc3RhY2smJncuanN4KCJwcmUiLHtjaGlsZHJlbjplLnN0YWNrfSl9KV19KX0pXX0pfSl9KX1mdW5jdGlvbiBVNCgpe2NvbnN0IGU9UDQoW3twYXRoOiIvKiIsZWxlbWVudDp3LmpzeChlNCx7ZmFsbGJhY2tSZW5kZXI6VzQsY2hpbGRyZW46dy5qc3goV00se3ZhbEFwaTpuZXcgYWIoIi9hcGkvdmFsIil9KX0pfV0se2Jhc2VuYW1lOiIvYXBpL3ZhbC9zdGF0aWMvZWRpdCJ9KTtyZXR1cm4gdy5qc3goRjQse3JvdXRlcjplfSl9RmYuY3JlYXRlUm9vdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoZWUuY3JlYXRlRWxlbWVudChlZS5TdHJpY3RNb2RlLG51bGwsZWUuY3JlYXRlRWxlbWVudChVNCxudWxsKSkpOwo=","/assets/index-_9BS8wn9.css":"Kiw6YmVmb3JlLDphZnRlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojZTVlN2VifTpiZWZvcmUsOmFmdGVyey0tdHctY29udGVudDogIiJ9aHRtbHtsaW5lLWhlaWdodDoxLjU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDtmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZjtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbH1ib2R5e21hcmdpbjowO2xpbmUtaGVpZ2h0OmluaGVyaXR9aHJ7aGVpZ2h0OjA7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsTGliZXJhdGlvbiBNb25vLENvdXJpZXIgTmV3LG1vbm9zcGFjZTtmb250LXNpemU6MWVtfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vie2JvdHRvbTotLjI1ZW19c3Vwe3RvcDotLjVlbX10YWJsZXt0ZXh0LWluZGVudDowO2JvcmRlci1jb2xvcjppbmhlcml0O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtmb250LXNpemU6MTAwJTtmb250LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDttYXJnaW46MDtwYWRkaW5nOjB9YnV0dG9uLHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfWJ1dHRvbixbdHlwZT1idXR0b25dLFt0eXBlPXJlc2V0XSxbdHlwZT1zdWJtaXRdey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b306LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fXN1bW1hcnl7ZGlzcGxheTpsaXN0LWl0ZW19YmxvY2txdW90ZSxkbCxkZCxoMSxoMixoMyxoNCxoNSxoNixocixmaWd1cmUscCxwcmV7bWFyZ2luOjB9ZmllbGRzZXR7bWFyZ2luOjA7cGFkZGluZzowfWxlZ2VuZHtwYWRkaW5nOjB9b2wsdWwsbWVudXtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowfWRpYWxvZ3twYWRkaW5nOjB9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWlucHV0OjotbW96LXBsYWNlaG9sZGVyLHRleHRhcmVhOjotbW96LXBsYWNlaG9sZGVye29wYWNpdHk6MTtjb2xvcjojOWNhM2FmfWlucHV0OjpwbGFjZWhvbGRlcix0ZXh0YXJlYTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxO2NvbG9yOiM5Y2EzYWZ9YnV0dG9uLFtyb2xlPWJ1dHRvbl17Y3Vyc29yOnBvaW50ZXJ9OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfVtoaWRkZW5de2Rpc3BsYXk6bm9uZX06aG9zdHstLWJhY2tncm91bmQ6IDAgMCUgMTAwJTstLWZvcmVncm91bmQ6IDIyMi4yIDg0JSA0LjklOy0tY2FyZDogMCAwJSAxMDAlOy0tY2FyZC1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTstLXBvcG92ZXI6IDAgMCUgMTAwJTstLXBvcG92ZXItZm9yZWdyb3VuZDogMjIyLjIgODQlIDQuOSU7LS1wcmltYXJ5OiAyMjIuMiA0Ny40JSAxMS4yJTstLXByaW1hcnktZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1zZWNvbmRhcnk6IDIxMCA0MCUgOTYuMSU7LS1zZWNvbmRhcnktZm9yZWdyb3VuZDogMjIyLjIgNDcuNCUgMTEuMiU7LS1tdXRlZDogMCAwJSA1Ny4zJTstLW11dGVkLWZvcmVncm91bmQ6IDIxNS40IDE2LjMlIDQ2LjklOy0tYWNjZW50OiAxNTksIDYwJSwgNTElLCAxOy0tYWNjZW50LWZvcmVncm91bmQ6IDIyMi4yIDQ3LjQlIDExLjIlOy0tZGVzdHJ1Y3RpdmU6IDAgODQuMiUgNjAuMiU7LS1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kOiAyMTAgNDAlIDk4JTstLWJvcmRlcjogMjE0LjMgMzEuOCUgOTEuNCU7LS1pbnB1dDogMjE0LjMgMzEuOCUgOTEuNCU7LS1yaW5nOiAyMjIuMiA4NCUgNC45JTstLXJhZGl1czogLjVyZW19OnJvb3R7LS1iYWNrZ3JvdW5kOiAwIDAlIDEwMCU7LS1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTstLWNhcmQ6IDAgMCUgMTAwJTstLWNhcmQtZm9yZWdyb3VuZDogMjIyLjIgODQlIDQuOSU7LS1wb3BvdmVyOiAwIDAlIDEwMCU7LS1wb3BvdmVyLWZvcmVncm91bmQ6IDIyMi4yIDg0JSA0LjklOy0tcHJpbWFyeTogMjIyLjIgNDcuNCUgMTEuMiU7LS1wcmltYXJ5LWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tc2Vjb25kYXJ5OiAyMTAgNDAlIDk2LjElOy0tc2Vjb25kYXJ5LWZvcmVncm91bmQ6IDIyMi4yIDQ3LjQlIDExLjIlOy0tbXV0ZWQ6IDAgMCUgNTcuMyU7LS1tdXRlZC1mb3JlZ3JvdW5kOiAyMTUuNCAxNi4zJSA0Ni45JTstLWFjY2VudDogMTU5LCA2MCUsIDUxJSwgMTstLWFjY2VudC1mb3JlZ3JvdW5kOiAyMjIuMiA0Ny40JSAxMS4yJTstLWRlc3RydWN0aXZlOiAwIDg0LjIlIDYwLjIlOy0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1ib3JkZXI6IDIxNC4zIDMxLjglIDkxLjQlOy0taW5wdXQ6IDIxNC4zIDMxLjglIDkxLjQlOy0tcmluZzogMjIyLjIgODQlIDQuOSU7LS1yYWRpdXM6IC41cmVtfSpbZGF0YS1tb2RlPWRhcmtdey0tYmFja2dyb3VuZDogMCAwJSA0JTstLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tY2FyZDogMjIyLjIgODQlIDQuOSU7LS1jYXJkLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tcG9wb3ZlcjogMjIyLjIgODQlIDQuOSU7LS1wb3BvdmVyLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tcHJpbWFyeTogMjEwIDQwJSA5OCU7LS1wcmltYXJ5LWZvcmVncm91bmQ6IDIyMi4yIDQ3LjQlIDExLjIlOy0tc2Vjb25kYXJ5OiAyMTcuMiAzMi42JSAxNy41JTstLXNlY29uZGFyeS1mb3JlZ3JvdW5kOiAyMTAgNDAlIDk4JTstLW11dGVkOiAxNzgsIDIzJSwgNzYlLCAxOy0tbXV0ZWQtZm9yZWdyb3VuZDogMjE1IDIwLjIlIDY1LjElOy0tYWNjZW50OiAxNTksIDYwJSwgNTElLCAxOy0tYWNjZW50LWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tZGVzdHJ1Y3RpdmU6IDAgNjIuOCUgMzAuNiU7LS1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kOiAyMTAgNDAlIDk4JTstLWJvcmRlcjogMjE3LjIgMzIuNiUgMTcuNSU7LS1pbnB1dDogMjE3LjIgMzIuNiUgMTcuNSU7LS1yaW5nOiAyMTIuNyAyNi44JSA4My45JX0qe2JvcmRlci1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSl9Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSk7Y29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpKX0qLDpiZWZvcmUsOmFmdGVyey0tdHctYm9yZGVyLXNwYWNpbmcteDogMDstLXR3LWJvcmRlci1zcGFjaW5nLXk6IDA7LS10dy10cmFuc2xhdGUteDogMDstLXR3LXRyYW5zbGF0ZS15OiAwOy0tdHctcm90YXRlOiAwOy0tdHctc2tldy14OiAwOy0tdHctc2tldy15OiAwOy0tdHctc2NhbGUteDogMTstLXR3LXNjYWxlLXk6IDE7LS10dy1wYW4teDogOy0tdHctcGFuLXk6IDstLXR3LXBpbmNoLXpvb206IDstLXR3LXNjcm9sbC1zbmFwLXN0cmljdG5lc3M6IHByb3hpbWl0eTstLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXZpYS1wb3NpdGlvbjogOy0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb246IDstLXR3LW9yZGluYWw6IDstLXR3LXNsYXNoZWQtemVybzogOy0tdHctbnVtZXJpYy1maWd1cmU6IDstLXR3LW51bWVyaWMtc3BhY2luZzogOy0tdHctbnVtZXJpYy1mcmFjdGlvbjogOy0tdHctcmluZy1pbnNldDogOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiAjZmZmOy0tdHctcmluZy1jb2xvcjogcmdiKDU5IDEzMCAyNDYgLyAuNSk7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXJpbmctc2hhZG93OiAwIDAgIzAwMDA7LS10dy1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDAgIzAwMDA7LS10dy1ibHVyOiA7LS10dy1icmlnaHRuZXNzOiA7LS10dy1jb250cmFzdDogOy0tdHctZ3JheXNjYWxlOiA7LS10dy1odWUtcm90YXRlOiA7LS10dy1pbnZlcnQ6IDstLXR3LXNhdHVyYXRlOiA7LS10dy1zZXBpYTogOy0tdHctZHJvcC1zaGFkb3c6IDstLXR3LWJhY2tkcm9wLWJsdXI6IDstLXR3LWJhY2tkcm9wLWJyaWdodG5lc3M6IDstLXR3LWJhY2tkcm9wLWNvbnRyYXN0OiA7LS10dy1iYWNrZHJvcC1ncmF5c2NhbGU6IDstLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGU6IDstLXR3LWJhY2tkcm9wLWludmVydDogOy0tdHctYmFja2Ryb3Atb3BhY2l0eTogOy0tdHctYmFja2Ryb3Atc2F0dXJhdGU6IDstLXR3LWJhY2tkcm9wLXNlcGlhOiB9OjpiYWNrZHJvcHstLXR3LWJvcmRlci1zcGFjaW5nLXg6IDA7LS10dy1ib3JkZXItc3BhY2luZy15OiAwOy0tdHctdHJhbnNsYXRlLXg6IDA7LS10dy10cmFuc2xhdGUteTogMDstLXR3LXJvdGF0ZTogMDstLXR3LXNrZXcteDogMDstLXR3LXNrZXcteTogMDstLXR3LXNjYWxlLXg6IDE7LS10dy1zY2FsZS15OiAxOy0tdHctcGFuLXg6IDstLXR3LXBhbi15OiA7LS10dy1waW5jaC16b29tOiA7LS10dy1zY3JvbGwtc25hcC1zdHJpY3RuZXNzOiBwcm94aW1pdHk7LS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uOiA7LS10dy1ncmFkaWVudC12aWEtcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uOiA7LS10dy1vcmRpbmFsOiA7LS10dy1zbGFzaGVkLXplcm86IDstLXR3LW51bWVyaWMtZmlndXJlOiA7LS10dy1udW1lcmljLXNwYWNpbmc6IDstLXR3LW51bWVyaWMtZnJhY3Rpb246IDstLXR3LXJpbmctaW5zZXQ6IDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOiAwcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjogI2ZmZjstLXR3LXJpbmctY29sb3I6IHJnYig1OSAxMzAgMjQ2IC8gLjUpOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OiAwIDAgIzAwMDA7LS10dy1yaW5nLXNoYWRvdzogMCAwICMwMDAwOy0tdHctc2hhZG93OiAwIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3JlZDogMCAwICMwMDAwOy0tdHctYmx1cjogOy0tdHctYnJpZ2h0bmVzczogOy0tdHctY29udHJhc3Q6IDstLXR3LWdyYXlzY2FsZTogOy0tdHctaHVlLXJvdGF0ZTogOy0tdHctaW52ZXJ0OiA7LS10dy1zYXR1cmF0ZTogOy0tdHctc2VwaWE6IDstLXR3LWRyb3Atc2hhZG93OiA7LS10dy1iYWNrZHJvcC1ibHVyOiA7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOiA7LS10dy1iYWNrZHJvcC1jb250cmFzdDogOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOiA7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOiA7LS10dy1iYWNrZHJvcC1pbnZlcnQ6IDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6IDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOiA7LS10dy1iYWNrZHJvcC1zZXBpYTogfS5zci1vbmx5e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDtoZWlnaHQ6MXB4O3BhZGRpbmc6MDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47Y2xpcDpyZWN0KDAsMCwwLDApO3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXItd2lkdGg6MH0ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LnN0YXRpY3twb3NpdGlvbjpzdGF0aWN9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LnN0aWNreXtwb3NpdGlvbjpzdGlja3l9Lmluc2V0LTB7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjB9Lmluc2V0LXktMHt0b3A6MDtib3R0b206MH0uLWxlZnQtMntsZWZ0Oi0uNXJlbX0uLXJpZ2h0LVxbMTBweFxde3JpZ2h0Oi0xMHB4fS4tdG9wLVxbMTBweFxde3RvcDotMTBweH0uLXRvcC1cWzRweFxde3RvcDotNHB4fS5ib3R0b20tMHtib3R0b206MH0uYm90dG9tLTR7Ym90dG9tOjFyZW19LmxlZnQtMHtsZWZ0OjB9LmxlZnQtMXtsZWZ0Oi4yNXJlbX0ubGVmdC0xXC8ye2xlZnQ6NTAlfS5sZWZ0LTJ7bGVmdDouNXJlbX0ubGVmdC1cWzUwXCVcXXtsZWZ0OjUwJX0ucmlnaHQtMHtyaWdodDowfS5yaWdodC0xe3JpZ2h0Oi4yNXJlbX0ucmlnaHQtNHtyaWdodDoxcmVtfS5yaWdodC1cWzE2cHhcXXtyaWdodDoxNnB4fS50b3AtMHt0b3A6MH0udG9wLTR7dG9wOjFyZW19LnRvcC1cWzUwXCVcXXt0b3A6NTAlfS56LTUwe3otaW5kZXg6NTB9LnotXFs1XF17ei1pbmRleDo1fS56LW92ZXJsYXl7ei1pbmRleDo0fS4tbXgtMXttYXJnaW4tbGVmdDotLjI1cmVtO21hcmdpbi1yaWdodDotLjI1cmVtfS4tbXktMnttYXJnaW4tdG9wOi0uNXJlbTttYXJnaW4tYm90dG9tOi0uNXJlbX0uLW15LVxbMTAwcHhcXXttYXJnaW4tdG9wOi0xMDBweDttYXJnaW4tYm90dG9tOi0xMDBweH0ubXgtMnttYXJnaW4tbGVmdDouNXJlbTttYXJnaW4tcmlnaHQ6LjVyZW19Lm15LTF7bWFyZ2luLXRvcDouMjVyZW07bWFyZ2luLWJvdHRvbTouMjVyZW19Lm1iLTR7bWFyZ2luLWJvdHRvbToxcmVtfS5tbC0ye21hcmdpbi1sZWZ0Oi41cmVtfS5tbC00e21hcmdpbi1sZWZ0OjFyZW19Lm1sLVxbMjBweFxde21hcmdpbi1sZWZ0OjIwcHh9Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30ubXItMnttYXJnaW4tcmlnaHQ6LjVyZW19Lm10LTJ7bWFyZ2luLXRvcDouNXJlbX0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0udGFibGV7ZGlzcGxheTp0YWJsZX0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmFzcGVjdC1zcXVhcmV7YXNwZWN0LXJhdGlvOjEgLyAxfS5oLTEwe2hlaWdodDoyLjVyZW19LmgtMTF7aGVpZ2h0OjIuNzVyZW19LmgtMntoZWlnaHQ6LjVyZW19LmgtMlwuNXtoZWlnaHQ6LjYyNXJlbX0uaC0ze2hlaWdodDouNzVyZW19LmgtM1wuNXtoZWlnaHQ6Ljg3NXJlbX0uaC00e2hlaWdodDoxcmVtfS5oLTd7aGVpZ2h0OjEuNzVyZW19LmgtOXtoZWlnaHQ6Mi4yNXJlbX0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzE4cHhcXXtoZWlnaHQ6MThweH0uaC1cWzFweFxde2hlaWdodDoxcHh9LmgtXFsyMHB4XF17aGVpZ2h0OjIwcHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNHB4XF17aGVpZ2h0OjI0cHh9LmgtXFszMnB4XF17aGVpZ2h0OjMycHh9LmgtXFs1MHB4XF17aGVpZ2h0OjUwcHh9LmgtXFs3NXB4XF17aGVpZ2h0Ojc1cHh9LmgtXFs5cHhcXXtoZWlnaHQ6OXB4fS5oLVxbdmFyXCgtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodFwpXF17aGVpZ2h0OnZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCl9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLVxbMzAwcHhcXXttYXgtaGVpZ2h0OjMwMHB4fS5taW4taC1cWzIwMHB4XF17bWluLWhlaWdodDoyMDBweH0ubWluLWgtXFszMDBweFxde21pbi1oZWlnaHQ6MzAwcHh9Lm1pbi1oLXNjcmVlbnttaW4taGVpZ2h0OjEwMHZofS53LTFcLzN7d2lkdGg6MzMuMzMzMzMzJX0udy0xMHt3aWR0aDoyLjVyZW19LnctMnt3aWR0aDouNXJlbX0udy0yXC41e3dpZHRoOi42MjVyZW19LnctM3t3aWR0aDouNzVyZW19LnctM1wuNXt3aWR0aDouODc1cmVtfS53LTR7d2lkdGg6MXJlbX0udy01e3dpZHRoOjEuMjVyZW19LnctN3t3aWR0aDoxLjc1cmVtfS53LTcye3dpZHRoOjE4cmVtfS53LTl7d2lkdGg6Mi4yNXJlbX0udy1cWzE0cHhcXXt3aWR0aDoxNHB4fS53LVxbMXB4XF17d2lkdGg6MXB4fS53LVxbMjBweFxde3dpZHRoOjIwcHh9LnctXFsyNHB4XF17d2lkdGg6MjRweH0udy1cWzMycHhcXXt3aWR0aDozMnB4fS53LVxbNDRweFxde3dpZHRoOjQ0cHh9LnctXFs5cHhcXXt3aWR0aDo5cHh9LnctZml0e3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9LnctZnVsbHt3aWR0aDoxMDAlfS53LXNjcmVlbnt3aWR0aDoxMDB2d30ubWluLXctMHttaW4td2lkdGg6MHB4fS5taW4tdy1cWzMyMHB4XF17bWluLXdpZHRoOjMyMHB4fS5taW4tdy1cWzUwMHB4XF17bWluLXdpZHRoOjUwMHB4fS5taW4tdy1cWzhyZW1cXXttaW4td2lkdGg6OHJlbX0ubWluLXctXFt2YXJcKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGhcKVxde21pbi13aWR0aDp2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCl9Lm1heC13LTR4bHttYXgtd2lkdGg6NTZyZW19Lm1heC13LVxbMTAwMHB4XF17bWF4LXdpZHRoOjEwMDBweH0ubWF4LXctXFsxMHZ3XF17bWF4LXdpZHRoOjEwdnd9Lm1heC13LVxbMzAwcHhcXXttYXgtd2lkdGg6MzAwcHh9Lm1heC13LVxbOTB2d1xde21heC13aWR0aDo5MHZ3fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5tYXgtdy1sZ3ttYXgtd2lkdGg6MzJyZW19LmZsZXgtMXtmbGV4OjEgMSAwJX0uZmxleC1hdXRve2ZsZXg6MSAxIGF1dG99LmZsZXgtc2hyaW5rLTAsLnNocmluay0we2ZsZXgtc2hyaW5rOjB9LmZsZXgtZ3Jvd3tmbGV4LWdyb3c6MX0uYm9yZGVyLWNvbGxhcHNle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0uLXRyYW5zbGF0ZS14LTFcLzIsLnRyYW5zbGF0ZS14LVxbLTUwXCVcXXstLXR3LXRyYW5zbGF0ZS14OiAtNTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS50cmFuc2xhdGUteS1cWy01MFwlXF17LS10dy10cmFuc2xhdGUteTogLTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uLXJvdGF0ZS05MHstLXR3LXJvdGF0ZTogLTkwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5yb3RhdGUtOTB7LS10dy1yb3RhdGU6IDkwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5yb3RhdGUtXFstOTBkZWdcXXstLXR3LXJvdGF0ZTogLTkwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5yb3RhdGUtXFs5MGRlZ1xdey0tdHctcm90YXRlOiA5MGRlZzt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0udHJhbnNmb3Jte3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5jdXJzb3ItY29sLXJlc2l6ZXtjdXJzb3I6Y29sLXJlc2l6ZX0uY3Vyc29yLWRlZmF1bHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1ncmFie2N1cnNvcjpncmFifS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXNlLXJlc2l6ZXtjdXJzb3I6c2UtcmVzaXplfS50b3VjaC1ub25le3RvdWNoLWFjdGlvbjpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnJlc2l6ZS1ub25le3Jlc2l6ZTpub25lfS5yZXNpemV7cmVzaXplOmJvdGh9Lmxpc3QtZGVjaW1hbHtsaXN0LXN0eWxlLXR5cGU6ZGVjaW1hbH0ubGlzdC1kaXNje2xpc3Qtc3R5bGUtdHlwZTpkaXNjfS5ncmlkLWNvbHMtXFttaW4tY29udGVudF8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWluLWNvbnRlbnQgMWZyfS5ncmlkLXJvd3MtXFsxZnJcLF9taW4tY29udGVudFxde2dyaWQtdGVtcGxhdGUtcm93czoxZnIgbWluLWNvbnRlbnR9LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LWNvbC1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfS5pdGVtcy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5pdGVtcy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmR9Lml0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9Lmp1c3RpZnktc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5nYXAtMXtnYXA6LjI1cmVtfS5nYXAtMntnYXA6LjVyZW19LmdhcC0ze2dhcDouNzVyZW19LmdhcC00e2dhcDoxcmVtfS5nYXAtNXtnYXA6MS4yNXJlbX0uZ2FwLVxbMFwuNWVtXF17Z2FwOi41ZW19LmdhcC1cWzM2cHhcXXtnYXA6MzZweH0uZ2FwLXgtMnstbW96LWNvbHVtbi1nYXA6LjVyZW07Y29sdW1uLWdhcDouNXJlbX0uZ2FwLXgtM3stbW96LWNvbHVtbi1nYXA6Ljc1cmVtO2NvbHVtbi1nYXA6Ljc1cmVtfS5nYXAteC00ey1tb3otY29sdW1uLWdhcDoxcmVtO2NvbHVtbi1nYXA6MXJlbX0uZ2FwLXktMntyb3ctZ2FwOi41cmVtfS5nYXAteS00e3Jvdy1nYXA6MXJlbX0uZ2FwLXktNntyb3ctZ2FwOjEuNXJlbX0uZ2FwLXktOHtyb3ctZ2FwOjJyZW19LnNwYWNlLXgtMT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXgtcmV2ZXJzZTogMDttYXJnaW4tcmlnaHQ6Y2FsYyguMjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKC4yNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKX0uc3BhY2UteS0xPjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYyguMjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC4yNXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5zcGFjZS15LTFcLjU+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKC4zNzVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC4zNzVyZW0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc3BhY2UteS0yPjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYyguNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoLjVyZW0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc3BhY2UteS00Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYygxcmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpO21hcmdpbi1ib3R0b206Y2FsYygxcmVtICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9Lm92ZXJmbG93LWF1dG97b3ZlcmZsb3c6YXV0b30ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3ctY2xpcHtvdmVyZmxvdzpjbGlwfS5vdmVyZmxvdy1zY3JvbGx7b3ZlcmZsb3c6c2Nyb2xsfS5vdmVyZmxvdy15LWF1dG97b3ZlcmZsb3cteTphdXRvfS5vdmVyZmxvdy14LWhpZGRlbntvdmVyZmxvdy14OmhpZGRlbn0ub3ZlcmZsb3cteS1zY3JvbGx7b3ZlcmZsb3cteTpzY3JvbGx9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5yb3VuZGVke2JvcmRlci1yYWRpdXM6LjI1cmVtfS5yb3VuZGVkLVxbaW5oZXJpdFxde2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6OTk5OXB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9LnJvdW5kZWQtc217Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSA0cHgpfS5ib3JkZXJ7Ym9yZGVyLXdpZHRoOjFweH0uYm9yZGVyLTIsLmJvcmRlci1cWzJweFxde2JvcmRlci13aWR0aDoycHh9LmJvcmRlci15e2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5ib3JkZXItYntib3JkZXItYm90dG9tLXdpZHRoOjFweH0uYm9yZGVyLWx7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4fS5ib3JkZXItbC0ye2JvcmRlci1sZWZ0LXdpZHRoOjJweH0uYm9yZGVyLXJ7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1hY2NlbnR7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uYm9yZGVyLWJvcmRlcntib3JkZXItY29sb3I6aHNsKHZhcigtLWJvcmRlcikpfS5ib3JkZXItY2FyZHtib3JkZXItY29sb3I6aHNsKHZhcigtLWNhcmQpKX0uYm9yZGVyLWdyYXktNDAwey0tdHctYm9yZGVyLW9wYWNpdHk6IDE7Ym9yZGVyLWNvbG9yOnJnYigxNTYgMTYzIDE3NSAvIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSl9LmJvcmRlci1pbnB1dHtib3JkZXItY29sb3I6aHNsKHZhcigtLWlucHV0KSl9LmJvcmRlci1wcmltYXJ5e2JvcmRlci1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfS5ib3JkZXItdHJhbnNwYXJlbnR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5ib3JkZXItbC10cmFuc3BhcmVudHtib3JkZXItbGVmdC1jb2xvcjp0cmFuc3BhcmVudH0uYm9yZGVyLXQtdHJhbnNwYXJlbnR7Ym9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudH0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5iZy1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpKX0uYmctYmFja2dyb3VuZFwvODB7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkgLyAuOCl9LmJnLWJvcmRlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1ib3JkZXIpKX0uYmctY2FyZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1jYXJkKSl9LmJnLWNhcmQtZm9yZWdyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1jYXJkLWZvcmVncm91bmQpKX0uYmctZGVzdHJ1Y3RpdmV7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tZGVzdHJ1Y3RpdmUpKX0uYmctZ3JheS0zMDB7LS10dy1iZy1vcGFjaXR5OiAxO2JhY2tncm91bmQtY29sb3I6cmdiKDIwOSAyMTMgMjE5IC8gdmFyKC0tdHctYmctb3BhY2l0eSkpfS5iZy1ncmF5LTUwMHstLXR3LWJnLW9wYWNpdHk6IDE7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMTA3IDExNCAxMjggLyB2YXIoLS10dy1iZy1vcGFjaXR5KSl9LmJnLW11dGVke2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLW11dGVkKSl9LmJnLXBvcG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tcG9wb3ZlcikpfS5iZy1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uYmctcmVkLTUwMHstLXR3LWJnLW9wYWNpdHk6IDE7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjM5IDY4IDY4IC8gdmFyKC0tdHctYmctb3BhY2l0eSkpfS5iZy1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tc2Vjb25kYXJ5KSl9LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmJnLXdoaXRley0tdHctYmctb3BhY2l0eTogMTtiYWNrZ3JvdW5kLWNvbG9yOnJnYigyNTUgMjU1IDI1NSAvIHZhcigtLXR3LWJnLW9wYWNpdHkpKX0uYmctZ3JhZGllbnQtdG8tYntiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdmFyKC0tdHctZ3JhZGllbnQtc3RvcHMpKX0uZnJvbS10cmFuc3BhcmVudHstLXR3LWdyYWRpZW50LWZyb206IHRyYW5zcGFyZW50IHZhcigtLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtdG86IHJnYigwIDAgMCAvIDApIHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXN0b3BzOiB2YXIoLS10dy1ncmFkaWVudC1mcm9tKSwgdmFyKC0tdHctZ3JhZGllbnQtdG8pfS50by1iYWNrZ3JvdW5key0tdHctZ3JhZGllbnQtdG86IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pfS5maWxsLWN1cnJlbnR7ZmlsbDpjdXJyZW50Q29sb3J9LmZpbGwtd2hpdGV7ZmlsbDojZmZmfS5zdHJva2UtXFsycHhcXXtzdHJva2Utd2lkdGg6MnB4fS5zdHJva2UtXFszcHhcXXtzdHJva2Utd2lkdGg6M3B4fS5vYmplY3QtY29udGFpbnstby1vYmplY3QtZml0OmNvbnRhaW47b2JqZWN0LWZpdDpjb250YWlufS5wLTB7cGFkZGluZzowfS5wLTF7cGFkZGluZzouMjVyZW19LnAtMTB7cGFkZGluZzoyLjVyZW19LnAtMntwYWRkaW5nOi41cmVtfS5wLTN7cGFkZGluZzouNzVyZW19LnAtNHtwYWRkaW5nOjFyZW19LnAtNntwYWRkaW5nOjEuNXJlbX0ucC1cWzFweFxde3BhZGRpbmc6MXB4fS5weC0xe3BhZGRpbmctbGVmdDouMjVyZW07cGFkZGluZy1yaWdodDouMjVyZW19LnB4LTJ7cGFkZGluZy1sZWZ0Oi41cmVtO3BhZGRpbmctcmlnaHQ6LjVyZW19LnB4LTJcLjV7cGFkZGluZy1sZWZ0Oi42MjVyZW07cGFkZGluZy1yaWdodDouNjI1cmVtfS5weC0ze3BhZGRpbmctbGVmdDouNzVyZW07cGFkZGluZy1yaWdodDouNzVyZW19LnB4LTR7cGFkZGluZy1sZWZ0OjFyZW07cGFkZGluZy1yaWdodDoxcmVtfS5weC01e3BhZGRpbmctbGVmdDoxLjI1cmVtO3BhZGRpbmctcmlnaHQ6MS4yNXJlbX0ucHgtOHtwYWRkaW5nLWxlZnQ6MnJlbTtwYWRkaW5nLXJpZ2h0OjJyZW19LnB4LVxbMjRweFxde3BhZGRpbmctbGVmdDoyNHB4O3BhZGRpbmctcmlnaHQ6MjRweH0ucHktMXtwYWRkaW5nLXRvcDouMjVyZW07cGFkZGluZy1ib3R0b206LjI1cmVtfS5weS0xXC41e3BhZGRpbmctdG9wOi4zNzVyZW07cGFkZGluZy1ib3R0b206LjM3NXJlbX0ucHktMntwYWRkaW5nLXRvcDouNXJlbTtwYWRkaW5nLWJvdHRvbTouNXJlbX0ucHktM3twYWRkaW5nLXRvcDouNzVyZW07cGFkZGluZy1ib3R0b206Ljc1cmVtfS5weS00e3BhZGRpbmctdG9wOjFyZW07cGFkZGluZy1ib3R0b206MXJlbX0ucHktNntwYWRkaW5nLXRvcDoxLjVyZW07cGFkZGluZy1ib3R0b206MS41cmVtfS5weS03e3BhZGRpbmctdG9wOjEuNzVyZW07cGFkZGluZy1ib3R0b206MS43NXJlbX0ucHktXFsycHhcXXtwYWRkaW5nLXRvcDoycHg7cGFkZGluZy1ib3R0b206MnB4fS5wYi0we3BhZGRpbmctYm90dG9tOjB9LnBiLTIwe3BhZGRpbmctYm90dG9tOjVyZW19LnBiLTR7cGFkZGluZy1ib3R0b206MXJlbX0ucGwtNntwYWRkaW5nLWxlZnQ6MS41cmVtfS5wbC04e3BhZGRpbmctbGVmdDoycmVtfS5wci0ye3BhZGRpbmctcmlnaHQ6LjVyZW19LnB0LTB7cGFkZGluZy10b3A6MH0ucHQtMXtwYWRkaW5nLXRvcDouMjVyZW19LnB0LTJ7cGFkZGluZy10b3A6LjVyZW19LnB0LTR7cGFkZGluZy10b3A6MXJlbX0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtc3RhcnR7dGV4dC1hbGlnbjpzdGFydH0uZm9udC1zYW5ze2ZvbnQtZmFtaWx5OlJvYm90byxzYW5zLXNlcmlmfS5mb250LXNlcmlme2ZvbnQtZmFtaWx5OlNwYWNlIE1vbm8sbW9ub3NwYWNlfS50ZXh0LTJ4bHtmb250LXNpemU6MS41cmVtO2xpbmUtaGVpZ2h0OjJyZW19LnRleHQtM3hse2ZvbnQtc2l6ZToxLjg3NXJlbTtsaW5lLWhlaWdodDoyLjI1cmVtfS50ZXh0LTR4bHtmb250LXNpemU6Mi4yNXJlbTtsaW5lLWhlaWdodDoyLjVyZW19LnRleHQtXFswXC44cmVtXF17Zm9udC1zaXplOi44cmVtfS50ZXh0LVxbMTJweFxde2ZvbnQtc2l6ZToxMnB4fS50ZXh0LWxne2ZvbnQtc2l6ZToxLjEyNXJlbTtsaW5lLWhlaWdodDoxLjc1cmVtfS50ZXh0LXNte2ZvbnQtc2l6ZTouODc1cmVtO2xpbmUtaGVpZ2h0OjEuMjVyZW19LnRleHQteGx7Zm9udC1zaXplOjEuMjVyZW07bGluZS1oZWlnaHQ6MS43NXJlbX0udGV4dC14c3tmb250LXNpemU6Ljc1cmVtO2xpbmUtaGVpZ2h0OjFyZW19LmZvbnQtXFsxMnB4XF17Zm9udC13ZWlnaHQ6MTJweH0uZm9udC1cWzQwMFxde2ZvbnQtd2VpZ2h0OjQwMH0uZm9udC1cWzUwMFxde2ZvbnQtd2VpZ2h0OjUwMH0uZm9udC1cWzU1MFxde2ZvbnQtd2VpZ2h0OjU1MH0uZm9udC1ib2xke2ZvbnQtd2VpZ2h0OjcwMH0uZm9udC1leHRyYWJvbGR7Zm9udC13ZWlnaHQ6ODAwfS5mb250LW1lZGl1bXtmb250LXdlaWdodDo1MDB9LmZvbnQtbm9ybWFse2ZvbnQtd2VpZ2h0OjQwMH0uZm9udC1zZW1pYm9sZHtmb250LXdlaWdodDo2MDB9LnVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Lml0YWxpY3tmb250LXN0eWxlOml0YWxpY30ubGVhZGluZy00e2xpbmUtaGVpZ2h0OjFyZW19LmxlYWRpbmctbm9uZXtsaW5lLWhlaWdodDoxfS50cmFja2luZy1cWzBcLjA0ZW1cXXtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctdGlnaHR7bGV0dGVyLXNwYWNpbmc6LS4wMjVlbX0udHJhY2tpbmctd2lkZXJ7bGV0dGVyLXNwYWNpbmc6LjA1ZW19LnRyYWNraW5nLXdpZGVzdHtsZXR0ZXItc3BhY2luZzouMWVtfS50ZXh0LWFjY2VudHtjb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LnRleHQtYWNjZW50LWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKSl9LnRleHQtYmFja2dyb3VuZHtjb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkpfS50ZXh0LWNhcmQtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tY2FyZC1mb3JlZ3JvdW5kKSl9LnRleHQtY3VycmVudHtjb2xvcjpjdXJyZW50Q29sb3J9LnRleHQtZGVzdHJ1Y3RpdmV7Y29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSl9LnRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCkpfS50ZXh0LWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpKX0udGV4dC1tdXRlZHtjb2xvcjpoc2wodmFyKC0tbXV0ZWQpKX0udGV4dC1tdXRlZC1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LnRleHQtcG9wb3Zlci1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1wb3BvdmVyLWZvcmVncm91bmQpKX0udGV4dC1wcmltYXJ5e2NvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSl9LnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1wcmltYXJ5LWZvcmVncm91bmQpKX0udGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tc2Vjb25kYXJ5LWZvcmVncm91bmQpKX0udGV4dC13aGl0ZXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKX0udW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbi1saW5lOnVuZGVybGluZX0ubGluZS10aHJvdWdoe3RleHQtZGVjb3JhdGlvbi1saW5lOmxpbmUtdGhyb3VnaH0udW5kZXJsaW5lLW9mZnNldC00e3RleHQtdW5kZXJsaW5lLW9mZnNldDo0cHh9LmFudGlhbGlhc2Vkey13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlfS5vcGFjaXR5LTB7b3BhY2l0eTowfS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9Lm9wYWNpdHktNTB7b3BhY2l0eTouNX0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTcwe29wYWNpdHk6Ljd9Lm9wYWNpdHktNzV7b3BhY2l0eTouNzV9LnNoYWRvd3stLXR3LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiKDAgMCAwIC8gLjEpLCAwIDFweCAycHggLTFweCByZ2IoMCAwIDAgLyAuMSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAxcHggM3B4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yKSwgMCAxcHggMnB4IC0xcHggdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctbGd7LS10dy1zaGFkb3c6IDAgMTBweCAxNXB4IC0zcHggcmdiKDAgMCAwIC8gLjEpLCAwIDRweCA2cHggLTRweCByZ2IoMCAwIDAgLyAuMSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAxMHB4IDE1cHggLTNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpLCAwIDRweCA2cHggLTRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1tZHstLXR3LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiKDAgMCAwIC8gLjEpLCAwIDJweCA0cHggLTJweCByZ2IoMCAwIDAgLyAuMSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCA0cHggNnB4IC0xcHggdmFyKC0tdHctc2hhZG93LWNvbG9yKSwgMCAycHggNHB4IC0ycHggdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctc217LS10dy1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIC4wNSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAxcHggMnB4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5vdXRsaW5lLW5vbmV7b3V0bGluZToycHggc29saWQgdHJhbnNwYXJlbnQ7b3V0bGluZS1vZmZzZXQ6MnB4fS5vdXRsaW5le291dGxpbmUtc3R5bGU6c29saWR9LnJpbmctMHstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpIHZhcigtLXR3LXJpbmctb2Zmc2V0LWNvbG9yKTstLXR3LXJpbmctc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCBjYWxjKDBweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCl9LnJpbmctb2Zmc2V0LWJhY2tncm91bmR7LS10dy1yaW5nLW9mZnNldC1jb2xvcjogaHNsKHZhcigtLWJhY2tncm91bmQpKX0uZHJvcC1zaGFkb3ctMnhsey0tdHctZHJvcC1zaGFkb3c6IGRyb3Atc2hhZG93KDAgMjVweCAyNXB4IHJnYigwIDAgMCAvIC4xNSkpO2ZpbHRlcjp2YXIoLS10dy1ibHVyKSB2YXIoLS10dy1icmlnaHRuZXNzKSB2YXIoLS10dy1jb250cmFzdCkgdmFyKC0tdHctZ3JheXNjYWxlKSB2YXIoLS10dy1odWUtcm90YXRlKSB2YXIoLS10dy1pbnZlcnQpIHZhcigtLXR3LXNhdHVyYXRlKSB2YXIoLS10dy1zZXBpYSkgdmFyKC0tdHctZHJvcC1zaGFkb3cpfS5kcm9wLXNoYWRvdy1cWzBweF8wcHhfMTJweF9yZ2JhXCg1NlwsMjA1XCwxNTJcLDBcLjYwXClcXXstLXR3LWRyb3Atc2hhZG93OiBkcm9wLXNoYWRvdygwcHggMHB4IDEycHggcmdiYSg1NiwyMDUsMTUyLC42KSk7ZmlsdGVyOnZhcigtLXR3LWJsdXIpIHZhcigtLXR3LWJyaWdodG5lc3MpIHZhcigtLXR3LWNvbnRyYXN0KSB2YXIoLS10dy1ncmF5c2NhbGUpIHZhcigtLXR3LWh1ZS1yb3RhdGUpIHZhcigtLXR3LWludmVydCkgdmFyKC0tdHctc2F0dXJhdGUpIHZhcigtLXR3LXNlcGlhKSB2YXIoLS10dy1kcm9wLXNoYWRvdyl9LmZpbHRlcntmaWx0ZXI6dmFyKC0tdHctYmx1cikgdmFyKC0tdHctYnJpZ2h0bmVzcykgdmFyKC0tdHctY29udHJhc3QpIHZhcigtLXR3LWdyYXlzY2FsZSkgdmFyKC0tdHctaHVlLXJvdGF0ZSkgdmFyKC0tdHctaW52ZXJ0KSB2YXIoLS10dy1zYXR1cmF0ZSkgdmFyKC0tdHctc2VwaWEpIHZhcigtLXR3LWRyb3Atc2hhZG93KX0uYmFja2Ryb3AtYmx1ci1zbXstLXR3LWJhY2tkcm9wLWJsdXI6IGJsdXIoNHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyKSB2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzKSB2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCkgdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlKSB2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlKSB2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQpIHZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHkpIHZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlKSB2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIpIHZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MpIHZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0KSB2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUpIHZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUpIHZhcigtLXR3LWJhY2tkcm9wLWludmVydCkgdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSkgdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUpIHZhcigtLXR3LWJhY2tkcm9wLXNlcGlhKX0udHJhbnNpdGlvbi1hbGx7dHJhbnNpdGlvbi1wcm9wZXJ0eTphbGw7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS50cmFuc2l0aW9uLXRyYW5zZm9ybXt0cmFuc2l0aW9uLXByb3BlcnR5OnRyYW5zZm9ybTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTE1MHt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc30uZWFzZS1pbi1vdXR7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSl9QGtleWZyYW1lcyBlbnRlcnswJXtvcGFjaXR5OnZhcigtLXR3LWVudGVyLW9wYWNpdHksIDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCh2YXIoLS10dy1lbnRlci10cmFuc2xhdGUteCwgMCksdmFyKC0tdHctZW50ZXItdHJhbnNsYXRlLXksIDApLDApIHNjYWxlM2QodmFyKC0tdHctZW50ZXItc2NhbGUsIDEpLHZhcigtLXR3LWVudGVyLXNjYWxlLCAxKSx2YXIoLS10dy1lbnRlci1zY2FsZSwgMSkpIHJvdGF0ZSh2YXIoLS10dy1lbnRlci1yb3RhdGUsIDApKX19QGtleWZyYW1lcyBleGl0e3Rve29wYWNpdHk6dmFyKC0tdHctZXhpdC1vcGFjaXR5LCAxKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QodmFyKC0tdHctZXhpdC10cmFuc2xhdGUteCwgMCksdmFyKC0tdHctZXhpdC10cmFuc2xhdGUteSwgMCksMCkgc2NhbGUzZCh2YXIoLS10dy1leGl0LXNjYWxlLCAxKSx2YXIoLS10dy1leGl0LXNjYWxlLCAxKSx2YXIoLS10dy1leGl0LXNjYWxlLCAxKSkgcm90YXRlKHZhcigtLXR3LWV4aXQtcm90YXRlLCAwKSl9fS5hbmltYXRlLWlue2FuaW1hdGlvbi1uYW1lOmVudGVyO2FuaW1hdGlvbi1kdXJhdGlvbjouMTVzOy0tdHctZW50ZXItb3BhY2l0eTogaW5pdGlhbDstLXR3LWVudGVyLXNjYWxlOiBpbml0aWFsOy0tdHctZW50ZXItcm90YXRlOiBpbml0aWFsOy0tdHctZW50ZXItdHJhbnNsYXRlLXg6IGluaXRpYWw7LS10dy1lbnRlci10cmFuc2xhdGUteTogaW5pdGlhbH0uZmFkZS1pbi0wey0tdHctZW50ZXItb3BhY2l0eTogMH0uem9vbS1pbi05NXstLXR3LWVudGVyLXNjYWxlOiAuOTV9LmR1cmF0aW9uLTE1MHthbmltYXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwe2FuaW1hdGlvbi1kdXJhdGlvbjouMnN9LmVhc2UtaW4tb3V0e2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSl9LmZpbGVcOmJvcmRlci0wOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3JkZXItd2lkdGg6MHB4fS5maWxlXDpiZy10cmFuc3BhcmVudDo6ZmlsZS1zZWxlY3Rvci1idXR0b257YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZmlsZVw6dGV4dC1zbTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS4yNXJlbX0uZmlsZVw6Zm9udC1tZWRpdW06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2ZvbnQtd2VpZ2h0OjUwMH0ucGxhY2Vob2xkZXJcOnRleHQtbXV0ZWQtZm9yZWdyb3VuZDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5wbGFjZWhvbGRlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kOjpwbGFjZWhvbGRlcntjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5mb2N1cy13aXRoaW5cOnJlbGF0aXZlOmZvY3VzLXdpdGhpbntwb3NpdGlvbjpyZWxhdGl2ZX0uaG92ZXJcOnctXFsycHhcXTpob3Zlcnt3aWR0aDoycHh9LmhvdmVyXDp3LVxbM3B4XF06aG92ZXJ7d2lkdGg6M3B4fS5ob3Zlclw6Y3Vyc29yLXBvaW50ZXI6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmhvdmVyXDpyb3VuZGVkLWxnOmhvdmVye2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0uaG92ZXJcOmJnLWFjY2VudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uaG92ZXJcOmJnLWJhY2tncm91bmQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkpfS5ob3Zlclw6YmctYm9yZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJvcmRlcikpfS5ob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzkwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSAvIC45KX0uaG92ZXJcOmJnLW11dGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLW11dGVkKSl9LmhvdmVyXDpiZy1wcmltYXJ5OmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uaG92ZXJcOmJnLXByaW1hcnlcLzkwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjkpfS5ob3Zlclw6YmctcmVkLTcwMDpob3ZlcnstLXR3LWJnLW9wYWNpdHk6IDE7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMTg1IDI4IDI4IC8gdmFyKC0tdHctYmctb3BhY2l0eSkpfS5ob3Zlclw6Ymctc2Vjb25kYXJ5XC84MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1zZWNvbmRhcnkpIC8gLjgpfS5ob3Zlclw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZDpob3Zlcntjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uaG92ZXJcOnRleHQtbXV0ZWQtZm9yZWdyb3VuZDpob3Zlcntjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5ob3Zlclw6dGV4dC1wcmltYXJ5LWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6aHNsKHZhcigtLXByaW1hcnktZm9yZWdyb3VuZCkpfS5ob3Zlclw6dGV4dC13aGl0ZTpob3ZlcnstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKX0uaG92ZXJcOnVuZGVybGluZTpob3Zlcnt0ZXh0LWRlY29yYXRpb24tbGluZTp1bmRlcmxpbmV9LmhvdmVyXDpvcGFjaXR5LTEwMDpob3ZlcntvcGFjaXR5OjF9LmZvY3VzXDpiZy1hY2NlbnQ6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmZvY3VzXDpiZy1wcmltYXJ5OmZvY3Vze2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uZm9jdXNcOnRleHQtYWNjZW50LWZvcmVncm91bmQ6Zm9jdXN7Y29sb3I6aHNsKHZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKSl9LmZvY3VzXDp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZDpmb2N1c3tjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LmZvY3VzXDpvdXRsaW5lLW5vbmU6Zm9jdXN7b3V0bGluZToycHggc29saWQgdHJhbnNwYXJlbnQ7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1c1w6cmluZy0yOmZvY3Vzey0tdHctcmluZy1vZmZzZXQtc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkgdmFyKC0tdHctcmluZy1vZmZzZXQtY29sb3IpOy0tdHctcmluZy1zaGFkb3c6IHZhcigtLXR3LXJpbmctaW5zZXQpIDAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKSB2YXIoLS10dy1yaW5nLWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdywgMCAwICMwMDAwKX0uZm9jdXNcOnJpbmctcmluZzpmb2N1c3stLXR3LXJpbmctY29sb3I6IGhzbCh2YXIoLS1yaW5nKSl9LmZvY3VzXDpyaW5nLW9mZnNldC0yOmZvY3Vzey0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1ub25lOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdHJhbnNwYXJlbnQ7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLWFjY2VudDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5mb2N1cy12aXNpYmxlXDpyaW5nLTI6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpIHZhcigtLXR3LXJpbmctb2Zmc2V0LWNvbG9yKTstLXR3LXJpbmctc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCBjYWxjKDJweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCl9LmZvY3VzLXZpc2libGVcOnJpbmctcmluZzpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjogaHNsKHZhcigtLXJpbmcpKX0uZm9jdXMtdmlzaWJsZVw6cmluZy1vZmZzZXQtMjpmb2N1cy12aXNpYmxley0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDJweH0uZm9jdXMtdmlzaWJsZVw6cmluZy1vZmZzZXQtYmFja2dyb3VuZDpmb2N1cy12aXNpYmxley0tdHctcmluZy1vZmZzZXQtY29sb3I6IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRpc2FibGVkXDpwb2ludGVyLWV2ZW50cy1ub25lOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmV9LmRpc2FibGVkXDpjdXJzb3Itbm90LWFsbG93ZWQ6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZFw6Ym9yZGVyLWJvcmRlcjpkaXNhYmxlZHtib3JkZXItY29sb3I6aHNsKHZhcigtLWJvcmRlcikpfS5kaXNhYmxlZFw6dGV4dC1iYWNrZ3JvdW5kOmRpc2FibGVke2NvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9LnBlZXI6ZGlzYWJsZWR+LnBlZXItZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZHtjdXJzb3I6bm90LWFsbG93ZWR9LnBlZXI6ZGlzYWJsZWR+LnBlZXItZGlzYWJsZWRcOm9wYWNpdHktNzB7b3BhY2l0eTouN30uYXJpYS1zZWxlY3RlZFw6YmctYWNjZW50W2FyaWEtc2VsZWN0ZWQ9dHJ1ZV17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmFyaWEtc2VsZWN0ZWRcOnRleHQtYWNjZW50LWZvcmVncm91bmRbYXJpYS1zZWxlY3RlZD10cnVlXXtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uYXJpYS1zZWxlY3RlZFw6b3BhY2l0eS0xMDBbYXJpYS1zZWxlY3RlZD10cnVlXXtvcGFjaXR5OjF9LmRhdGEtXFtkaXNhYmxlZFxdXDpwb2ludGVyLWV2ZW50cy1ub25lW2RhdGEtZGlzYWJsZWRde3BvaW50ZXItZXZlbnRzOm5vbmV9LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6dHJhbnNsYXRlLXktMVtkYXRhLXNpZGU9Ym90dG9tXXstLXR3LXRyYW5zbGF0ZS15OiAuMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzaWRlXD1sZWZ0XF1cOi10cmFuc2xhdGUteC0xW2RhdGEtc2lkZT1sZWZ0XXstLXR3LXRyYW5zbGF0ZS14OiAtLjI1cmVtO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5kYXRhLVxbc2lkZVw9cmlnaHRcXVw6dHJhbnNsYXRlLXgtMVtkYXRhLXNpZGU9cmlnaHRdey0tdHctdHJhbnNsYXRlLXg6IC4yNXJlbTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uZGF0YS1cW3NpZGVcPXRvcFxdXDotdHJhbnNsYXRlLXktMVtkYXRhLXNpZGU9dG9wXXstLXR3LXRyYW5zbGF0ZS15OiAtLjI1cmVtO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5kYXRhLVxbc3RhdGVcPWNoZWNrZWRcXVw6dHJhbnNsYXRlLXgtNVtkYXRhLXN0YXRlPWNoZWNrZWRdey0tdHctdHJhbnNsYXRlLXg6IDEuMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzdGF0ZVw9dW5jaGVja2VkXF1cOnRyYW5zbGF0ZS14LTBbZGF0YS1zdGF0ZT11bmNoZWNrZWRdey0tdHctdHJhbnNsYXRlLXg6IDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX1Aa2V5ZnJhbWVzIGFjY29yZGlvbi11cHswJXtoZWlnaHQ6dmFyKC0tcmFkaXgtYWNjb3JkaW9uLWNvbnRlbnQtaGVpZ2h0KX10b3toZWlnaHQ6MH19LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOmFuaW1hdGUtYWNjb3JkaW9uLXVwW2RhdGEtc3RhdGU9Y2xvc2VkXXthbmltYXRpb246YWNjb3JkaW9uLXVwIC4ycyBlYXNlLW91dH1Aa2V5ZnJhbWVzIGFjY29yZGlvbi1kb3duezAle2hlaWdodDowfXRve2hlaWdodDp2YXIoLS1yYWRpeC1hY2NvcmRpb24tY29udGVudC1oZWlnaHQpfX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOmFuaW1hdGUtYWNjb3JkaW9uLWRvd25bZGF0YS1zdGF0ZT1vcGVuXXthbmltYXRpb246YWNjb3JkaW9uLWRvd24gLjJzIGVhc2Utb3V0fS5kYXRhLVxbc3RhdGVcPWFjdGl2ZVxdXDpiZy1iYWNrZ3JvdW5kW2RhdGEtc3RhdGU9YWN0aXZlXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRhdGEtXFtzdGF0ZVw9Y2hlY2tlZFxdXDpiZy1hY2NlbnRbZGF0YS1zdGF0ZT1jaGVja2VkXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uZGF0YS1cW3N0YXRlXD1jaGVja2VkXF1cOmJnLXByaW1hcnlbZGF0YS1zdGF0ZT1jaGVja2VkXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSl9LmRhdGEtXFtzdGF0ZVw9b25cXVw6YmctYWNjZW50W2RhdGEtc3RhdGU9b25dLC5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6YmctYWNjZW50W2RhdGEtc3RhdGU9b3Blbl17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmRhdGEtXFtzdGF0ZVw9dW5jaGVja2VkXF1cOmJnLXByaW1hcnlbZGF0YS1zdGF0ZT11bmNoZWNrZWRde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uZGF0YS1cW3N0YXRlXD1hY3RpdmVcXVw6dGV4dC1mb3JlZ3JvdW5kW2RhdGEtc3RhdGU9YWN0aXZlXXtjb2xvcjpoc2wodmFyKC0tZm9yZWdyb3VuZCkpfS5kYXRhLVxbc3RhdGVcPWNoZWNrZWRcXVw6dGV4dC1wcmltYXJ5LWZvcmVncm91bmRbZGF0YS1zdGF0ZT1jaGVja2VkXXtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LmRhdGEtXFtzdGF0ZVw9b25cXVw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZFtkYXRhLXN0YXRlPW9uXXtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnRleHQtbXV0ZWQtZm9yZWdyb3VuZFtkYXRhLXN0YXRlPW9wZW5de2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LmRhdGEtXFtkaXNhYmxlZFxdXDpvcGFjaXR5LTUwW2RhdGEtZGlzYWJsZWRde29wYWNpdHk6LjV9LmRhdGEtXFtzdGF0ZVw9YWN0aXZlXF1cOnNoYWRvdy1zbVtkYXRhLXN0YXRlPWFjdGl2ZV17LS10dy1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIC4wNSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAxcHggMnB4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6YW5pbWF0ZS1pbltkYXRhLXN0YXRlPW9wZW5de2FuaW1hdGlvbi1uYW1lOmVudGVyO2FuaW1hdGlvbi1kdXJhdGlvbjouMTVzOy0tdHctZW50ZXItb3BhY2l0eTogaW5pdGlhbDstLXR3LWVudGVyLXNjYWxlOiBpbml0aWFsOy0tdHctZW50ZXItcm90YXRlOiBpbml0aWFsOy0tdHctZW50ZXItdHJhbnNsYXRlLXg6IGluaXRpYWw7LS10dy1lbnRlci10cmFuc2xhdGUteTogaW5pdGlhbH0uZGF0YS1cW3N0YXRlXD1jbG9zZWRcXVw6YW5pbWF0ZS1vdXRbZGF0YS1zdGF0ZT1jbG9zZWRde2FuaW1hdGlvbi1uYW1lOmV4aXQ7YW5pbWF0aW9uLWR1cmF0aW9uOi4xNXM7LS10dy1leGl0LW9wYWNpdHk6IGluaXRpYWw7LS10dy1leGl0LXNjYWxlOiBpbml0aWFsOy0tdHctZXhpdC1yb3RhdGU6IGluaXRpYWw7LS10dy1leGl0LXRyYW5zbGF0ZS14OiBpbml0aWFsOy0tdHctZXhpdC10cmFuc2xhdGUteTogaW5pdGlhbH0uZGF0YS1cW3N0YXRlXD1jbG9zZWRcXVw6ZmFkZS1vdXQtMFtkYXRhLXN0YXRlPWNsb3NlZF17LS10dy1leGl0LW9wYWNpdHk6IDB9LmRhdGEtXFtzdGF0ZVw9b3BlblxdXDpmYWRlLWluLTBbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLW9wYWNpdHk6IDB9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnpvb20tb3V0LTk1W2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtc2NhbGU6IC45NX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnpvb20taW4tOTVbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLXNjYWxlOiAuOTV9LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6c2xpZGUtaW4tZnJvbS10b3AtMltkYXRhLXNpZGU9Ym90dG9tXXstLXR3LWVudGVyLXRyYW5zbGF0ZS15OiAtLjVyZW19LmRhdGEtXFtzaWRlXD1sZWZ0XF1cOnNsaWRlLWluLWZyb20tcmlnaHQtMltkYXRhLXNpZGU9bGVmdF17LS10dy1lbnRlci10cmFuc2xhdGUteDogLjVyZW19LmRhdGEtXFtzaWRlXD1yaWdodFxdXDpzbGlkZS1pbi1mcm9tLWxlZnQtMltkYXRhLXNpZGU9cmlnaHRdey0tdHctZW50ZXItdHJhbnNsYXRlLXg6IC0uNXJlbX0uZGF0YS1cW3NpZGVcPXRvcFxdXDpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yW2RhdGEtc2lkZT10b3Bdey0tdHctZW50ZXItdHJhbnNsYXRlLXk6IC41cmVtfS5kYXRhLVxbc3RhdGVcPWNsb3NlZFxdXDpzbGlkZS1vdXQtdG8tbGVmdC0xXC8yW2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtdHJhbnNsYXRlLXg6IC01MCV9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnNsaWRlLW91dC10by10b3AtXFs0OFwlXF1bZGF0YS1zdGF0ZT1jbG9zZWRdey0tdHctZXhpdC10cmFuc2xhdGUteTogLTQ4JX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNsaWRlLWluLWZyb20tbGVmdC0xXC8yW2RhdGEtc3RhdGU9b3Blbl17LS10dy1lbnRlci10cmFuc2xhdGUteDogLTUwJX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNsaWRlLWluLWZyb20tdG9wLVxbNDhcJVxdW2RhdGEtc3RhdGU9b3Blbl17LS10dy1lbnRlci10cmFuc2xhdGUteTogLTQ4JX06aXMoW2RhdGEtbW9kZT1kYXJrXSAuZGFya1w6Ym9yZGVyLXdoaXRlKXstLXR3LWJvcmRlci1vcGFjaXR5OiAxO2JvcmRlci1jb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpfUBtZWRpYSAobWluLXdpZHRoOiA2NDBweCl7LnNtXDptdC0we21hcmdpbi10b3A6MH0uc21cOmJsb2Nre2Rpc3BsYXk6YmxvY2t9LnNtXDpmbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LnNtXDpqdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnNtXDpzcGFjZS14LTI+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS14LXJldmVyc2U6IDA7bWFyZ2luLXJpZ2h0OmNhbGMoLjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKC41cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpfS5zbVw6c3BhY2UteC00Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteC1yZXZlcnNlOiAwO21hcmdpbi1yaWdodDpjYWxjKDFyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKDFyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSl9LnNtXDpzcGFjZS15LTA+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKDBweCAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoMHB4ICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9LnNtXDpyb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0uc21cOnAtMHtwYWRkaW5nOjB9LnNtXDp0ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey5tZFw6dy1mdWxse3dpZHRoOjEwMCV9fS5cW1wmXDpoYXNcKFxbYXJpYS1zZWxlY3RlZFxdXClcXVw6YmctYWNjZW50OmhhcyhbYXJpYS1zZWxlY3RlZF0pe2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5maXJzdFw6XFtcJlw6aGFzXChcW2FyaWEtc2VsZWN0ZWRcXVwpXF1cOnJvdW5kZWQtbC1tZDpoYXMoW2FyaWEtc2VsZWN0ZWRdKTpmaXJzdC1jaGlsZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5sYXN0XDpcW1wmXDpoYXNcKFxbYXJpYS1zZWxlY3RlZFxdXClcXVw6cm91bmRlZC1yLW1kOmhhcyhbYXJpYS1zZWxlY3RlZF0pOmxhc3QtY2hpbGR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5cW1wmXFtkYXRhLXN0YXRlXD1vcGVuXF1cPnN2Z1xdXDpyb3RhdGUtMTgwW2RhdGEtc3RhdGU9b3Blbl0+c3Zney0tdHctcm90YXRlOiAxODBkZWc7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LlxbXCZfXFtjbWRrLWdyb3VwLWhlYWRpbmdcXVxdXDpweC0yIFtjbWRrLWdyb3VwLWhlYWRpbmdde3BhZGRpbmctbGVmdDouNXJlbTtwYWRkaW5nLXJpZ2h0Oi41cmVtfS5cW1wmX1xbY21kay1ncm91cC1oZWFkaW5nXF1cXVw6cHktMVwuNSBbY21kay1ncm91cC1oZWFkaW5nXXtwYWRkaW5nLXRvcDouMzc1cmVtO3BhZGRpbmctYm90dG9tOi4zNzVyZW19LlxbXCZfXFtjbWRrLWdyb3VwLWhlYWRpbmdcXVxdXDp0ZXh0LXhzIFtjbWRrLWdyb3VwLWhlYWRpbmdde2ZvbnQtc2l6ZTouNzVyZW07bGluZS1oZWlnaHQ6MXJlbX0uXFtcJl9cW2NtZGstZ3JvdXAtaGVhZGluZ1xdXF1cOmZvbnQtbWVkaXVtIFtjbWRrLWdyb3VwLWhlYWRpbmdde2ZvbnQtd2VpZ2h0OjUwMH0uXFtcJl9cW2NtZGstZ3JvdXAtaGVhZGluZ1xdXF1cOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbY21kay1ncm91cC1oZWFkaW5nXXtjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5cW1wmX1xbY21kay1ncm91cFxdXDpub3RcKFxbaGlkZGVuXF1cKV9cflxbY21kay1ncm91cFxdXF1cOnB0LTAgW2NtZGstZ3JvdXBdOm5vdChbaGlkZGVuXSl+W2NtZGstZ3JvdXBde3BhZGRpbmctdG9wOjB9LlxbXCZfXFtjbWRrLWdyb3VwXF1cXVw6cHgtMiBbY21kay1ncm91cF17cGFkZGluZy1sZWZ0Oi41cmVtO3BhZGRpbmctcmlnaHQ6LjVyZW19LlxbXCZfXFtjbWRrLWlucHV0LXdyYXBwZXJcXV9zdmdcXVw6aC01IFtjbWRrLWlucHV0LXdyYXBwZXJdIHN2Z3toZWlnaHQ6MS4yNXJlbX0uXFtcJl9cW2NtZGstaW5wdXQtd3JhcHBlclxdX3N2Z1xdXDp3LTUgW2NtZGstaW5wdXQtd3JhcHBlcl0gc3Zne3dpZHRoOjEuMjVyZW19LlxbXCZfXFtjbWRrLWlucHV0XF1cXVw6aC0xMiBbY21kay1pbnB1dF17aGVpZ2h0OjNyZW19LlxbXCZfXFtjbWRrLWl0ZW1cXVxdXDpweC0yIFtjbWRrLWl0ZW1de3BhZGRpbmctbGVmdDouNXJlbTtwYWRkaW5nLXJpZ2h0Oi41cmVtfS5cW1wmX1xbY21kay1pdGVtXF1cXVw6cHktMyBbY21kay1pdGVtXXtwYWRkaW5nLXRvcDouNzVyZW07cGFkZGluZy1ib3R0b206Ljc1cmVtfS5cW1wmX1xbY21kay1pdGVtXF1fc3ZnXF1cOmgtNSBbY21kay1pdGVtXSBzdmd7aGVpZ2h0OjEuMjVyZW19LlxbXCZfXFtjbWRrLWl0ZW1cXV9zdmdcXVw6dy01IFtjbWRrLWl0ZW1dIHN2Z3t3aWR0aDoxLjI1cmVtfQo=","/index.html":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgICA8dGl0bGU+VmFsPC90aXRsZT4KICAgIDxzY3JpcHQgdHlwZT0ibW9kdWxlIiBjcm9zc29yaWdpbiBzcmM9Ii9hcGkvdmFsL3N0YXRpYy9hc3NldHMvaW5kZXgtVTRKMk9sNXMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbiBocmVmPSIvYXBpL3ZhbC9zdGF0aWMvYXNzZXRzL2luZGV4LV85QlM4d245LmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBpZD0icm9vdCI+PC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg=="}`
|
|
18
|
+
`{"/assets/index-_9BS8wn9.css":"Kiw6YmVmb3JlLDphZnRlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojZTVlN2VifTpiZWZvcmUsOmFmdGVyey0tdHctY29udGVudDogIiJ9aHRtbHtsaW5lLWhlaWdodDoxLjU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDtmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZjtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbH1ib2R5e21hcmdpbjowO2xpbmUtaGVpZ2h0OmluaGVyaXR9aHJ7aGVpZ2h0OjA7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsTGliZXJhdGlvbiBNb25vLENvdXJpZXIgTmV3LG1vbm9zcGFjZTtmb250LXNpemU6MWVtfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vie2JvdHRvbTotLjI1ZW19c3Vwe3RvcDotLjVlbX10YWJsZXt0ZXh0LWluZGVudDowO2JvcmRlci1jb2xvcjppbmhlcml0O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtmb250LXNpemU6MTAwJTtmb250LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDttYXJnaW46MDtwYWRkaW5nOjB9YnV0dG9uLHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfWJ1dHRvbixbdHlwZT1idXR0b25dLFt0eXBlPXJlc2V0XSxbdHlwZT1zdWJtaXRdey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b306LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fXN1bW1hcnl7ZGlzcGxheTpsaXN0LWl0ZW19YmxvY2txdW90ZSxkbCxkZCxoMSxoMixoMyxoNCxoNSxoNixocixmaWd1cmUscCxwcmV7bWFyZ2luOjB9ZmllbGRzZXR7bWFyZ2luOjA7cGFkZGluZzowfWxlZ2VuZHtwYWRkaW5nOjB9b2wsdWwsbWVudXtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowfWRpYWxvZ3twYWRkaW5nOjB9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWlucHV0OjotbW96LXBsYWNlaG9sZGVyLHRleHRhcmVhOjotbW96LXBsYWNlaG9sZGVye29wYWNpdHk6MTtjb2xvcjojOWNhM2FmfWlucHV0OjpwbGFjZWhvbGRlcix0ZXh0YXJlYTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxO2NvbG9yOiM5Y2EzYWZ9YnV0dG9uLFtyb2xlPWJ1dHRvbl17Y3Vyc29yOnBvaW50ZXJ9OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfVtoaWRkZW5de2Rpc3BsYXk6bm9uZX06aG9zdHstLWJhY2tncm91bmQ6IDAgMCUgMTAwJTstLWZvcmVncm91bmQ6IDIyMi4yIDg0JSA0LjklOy0tY2FyZDogMCAwJSAxMDAlOy0tY2FyZC1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTstLXBvcG92ZXI6IDAgMCUgMTAwJTstLXBvcG92ZXItZm9yZWdyb3VuZDogMjIyLjIgODQlIDQuOSU7LS1wcmltYXJ5OiAyMjIuMiA0Ny40JSAxMS4yJTstLXByaW1hcnktZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1zZWNvbmRhcnk6IDIxMCA0MCUgOTYuMSU7LS1zZWNvbmRhcnktZm9yZWdyb3VuZDogMjIyLjIgNDcuNCUgMTEuMiU7LS1tdXRlZDogMCAwJSA1Ny4zJTstLW11dGVkLWZvcmVncm91bmQ6IDIxNS40IDE2LjMlIDQ2LjklOy0tYWNjZW50OiAxNTksIDYwJSwgNTElLCAxOy0tYWNjZW50LWZvcmVncm91bmQ6IDIyMi4yIDQ3LjQlIDExLjIlOy0tZGVzdHJ1Y3RpdmU6IDAgODQuMiUgNjAuMiU7LS1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kOiAyMTAgNDAlIDk4JTstLWJvcmRlcjogMjE0LjMgMzEuOCUgOTEuNCU7LS1pbnB1dDogMjE0LjMgMzEuOCUgOTEuNCU7LS1yaW5nOiAyMjIuMiA4NCUgNC45JTstLXJhZGl1czogLjVyZW19OnJvb3R7LS1iYWNrZ3JvdW5kOiAwIDAlIDEwMCU7LS1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTstLWNhcmQ6IDAgMCUgMTAwJTstLWNhcmQtZm9yZWdyb3VuZDogMjIyLjIgODQlIDQuOSU7LS1wb3BvdmVyOiAwIDAlIDEwMCU7LS1wb3BvdmVyLWZvcmVncm91bmQ6IDIyMi4yIDg0JSA0LjklOy0tcHJpbWFyeTogMjIyLjIgNDcuNCUgMTEuMiU7LS1wcmltYXJ5LWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tc2Vjb25kYXJ5OiAyMTAgNDAlIDk2LjElOy0tc2Vjb25kYXJ5LWZvcmVncm91bmQ6IDIyMi4yIDQ3LjQlIDExLjIlOy0tbXV0ZWQ6IDAgMCUgNTcuMyU7LS1tdXRlZC1mb3JlZ3JvdW5kOiAyMTUuNCAxNi4zJSA0Ni45JTstLWFjY2VudDogMTU5LCA2MCUsIDUxJSwgMTstLWFjY2VudC1mb3JlZ3JvdW5kOiAyMjIuMiA0Ny40JSAxMS4yJTstLWRlc3RydWN0aXZlOiAwIDg0LjIlIDYwLjIlOy0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1ib3JkZXI6IDIxNC4zIDMxLjglIDkxLjQlOy0taW5wdXQ6IDIxNC4zIDMxLjglIDkxLjQlOy0tcmluZzogMjIyLjIgODQlIDQuOSU7LS1yYWRpdXM6IC41cmVtfSpbZGF0YS1tb2RlPWRhcmtdey0tYmFja2dyb3VuZDogMCAwJSA0JTstLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tY2FyZDogMjIyLjIgODQlIDQuOSU7LS1jYXJkLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tcG9wb3ZlcjogMjIyLjIgODQlIDQuOSU7LS1wb3BvdmVyLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tcHJpbWFyeTogMjEwIDQwJSA5OCU7LS1wcmltYXJ5LWZvcmVncm91bmQ6IDIyMi4yIDQ3LjQlIDExLjIlOy0tc2Vjb25kYXJ5OiAyMTcuMiAzMi42JSAxNy41JTstLXNlY29uZGFyeS1mb3JlZ3JvdW5kOiAyMTAgNDAlIDk4JTstLW11dGVkOiAxNzgsIDIzJSwgNzYlLCAxOy0tbXV0ZWQtZm9yZWdyb3VuZDogMjE1IDIwLjIlIDY1LjElOy0tYWNjZW50OiAxNTksIDYwJSwgNTElLCAxOy0tYWNjZW50LWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tZGVzdHJ1Y3RpdmU6IDAgNjIuOCUgMzAuNiU7LS1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kOiAyMTAgNDAlIDk4JTstLWJvcmRlcjogMjE3LjIgMzIuNiUgMTcuNSU7LS1pbnB1dDogMjE3LjIgMzIuNiUgMTcuNSU7LS1yaW5nOiAyMTIuNyAyNi44JSA4My45JX0qe2JvcmRlci1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSl9Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSk7Y29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpKX0qLDpiZWZvcmUsOmFmdGVyey0tdHctYm9yZGVyLXNwYWNpbmcteDogMDstLXR3LWJvcmRlci1zcGFjaW5nLXk6IDA7LS10dy10cmFuc2xhdGUteDogMDstLXR3LXRyYW5zbGF0ZS15OiAwOy0tdHctcm90YXRlOiAwOy0tdHctc2tldy14OiAwOy0tdHctc2tldy15OiAwOy0tdHctc2NhbGUteDogMTstLXR3LXNjYWxlLXk6IDE7LS10dy1wYW4teDogOy0tdHctcGFuLXk6IDstLXR3LXBpbmNoLXpvb206IDstLXR3LXNjcm9sbC1zbmFwLXN0cmljdG5lc3M6IHByb3hpbWl0eTstLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXZpYS1wb3NpdGlvbjogOy0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb246IDstLXR3LW9yZGluYWw6IDstLXR3LXNsYXNoZWQtemVybzogOy0tdHctbnVtZXJpYy1maWd1cmU6IDstLXR3LW51bWVyaWMtc3BhY2luZzogOy0tdHctbnVtZXJpYy1mcmFjdGlvbjogOy0tdHctcmluZy1pbnNldDogOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiAjZmZmOy0tdHctcmluZy1jb2xvcjogcmdiKDU5IDEzMCAyNDYgLyAuNSk7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXJpbmctc2hhZG93OiAwIDAgIzAwMDA7LS10dy1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDAgIzAwMDA7LS10dy1ibHVyOiA7LS10dy1icmlnaHRuZXNzOiA7LS10dy1jb250cmFzdDogOy0tdHctZ3JheXNjYWxlOiA7LS10dy1odWUtcm90YXRlOiA7LS10dy1pbnZlcnQ6IDstLXR3LXNhdHVyYXRlOiA7LS10dy1zZXBpYTogOy0tdHctZHJvcC1zaGFkb3c6IDstLXR3LWJhY2tkcm9wLWJsdXI6IDstLXR3LWJhY2tkcm9wLWJyaWdodG5lc3M6IDstLXR3LWJhY2tkcm9wLWNvbnRyYXN0OiA7LS10dy1iYWNrZHJvcC1ncmF5c2NhbGU6IDstLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGU6IDstLXR3LWJhY2tkcm9wLWludmVydDogOy0tdHctYmFja2Ryb3Atb3BhY2l0eTogOy0tdHctYmFja2Ryb3Atc2F0dXJhdGU6IDstLXR3LWJhY2tkcm9wLXNlcGlhOiB9OjpiYWNrZHJvcHstLXR3LWJvcmRlci1zcGFjaW5nLXg6IDA7LS10dy1ib3JkZXItc3BhY2luZy15OiAwOy0tdHctdHJhbnNsYXRlLXg6IDA7LS10dy10cmFuc2xhdGUteTogMDstLXR3LXJvdGF0ZTogMDstLXR3LXNrZXcteDogMDstLXR3LXNrZXcteTogMDstLXR3LXNjYWxlLXg6IDE7LS10dy1zY2FsZS15OiAxOy0tdHctcGFuLXg6IDstLXR3LXBhbi15OiA7LS10dy1waW5jaC16b29tOiA7LS10dy1zY3JvbGwtc25hcC1zdHJpY3RuZXNzOiBwcm94aW1pdHk7LS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uOiA7LS10dy1ncmFkaWVudC12aWEtcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uOiA7LS10dy1vcmRpbmFsOiA7LS10dy1zbGFzaGVkLXplcm86IDstLXR3LW51bWVyaWMtZmlndXJlOiA7LS10dy1udW1lcmljLXNwYWNpbmc6IDstLXR3LW51bWVyaWMtZnJhY3Rpb246IDstLXR3LXJpbmctaW5zZXQ6IDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOiAwcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjogI2ZmZjstLXR3LXJpbmctY29sb3I6IHJnYig1OSAxMzAgMjQ2IC8gLjUpOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OiAwIDAgIzAwMDA7LS10dy1yaW5nLXNoYWRvdzogMCAwICMwMDAwOy0tdHctc2hhZG93OiAwIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3JlZDogMCAwICMwMDAwOy0tdHctYmx1cjogOy0tdHctYnJpZ2h0bmVzczogOy0tdHctY29udHJhc3Q6IDstLXR3LWdyYXlzY2FsZTogOy0tdHctaHVlLXJvdGF0ZTogOy0tdHctaW52ZXJ0OiA7LS10dy1zYXR1cmF0ZTogOy0tdHctc2VwaWE6IDstLXR3LWRyb3Atc2hhZG93OiA7LS10dy1iYWNrZHJvcC1ibHVyOiA7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOiA7LS10dy1iYWNrZHJvcC1jb250cmFzdDogOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOiA7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOiA7LS10dy1iYWNrZHJvcC1pbnZlcnQ6IDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6IDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOiA7LS10dy1iYWNrZHJvcC1zZXBpYTogfS5zci1vbmx5e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDtoZWlnaHQ6MXB4O3BhZGRpbmc6MDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47Y2xpcDpyZWN0KDAsMCwwLDApO3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXItd2lkdGg6MH0ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LnN0YXRpY3twb3NpdGlvbjpzdGF0aWN9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LnN0aWNreXtwb3NpdGlvbjpzdGlja3l9Lmluc2V0LTB7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjB9Lmluc2V0LXktMHt0b3A6MDtib3R0b206MH0uLWxlZnQtMntsZWZ0Oi0uNXJlbX0uLXJpZ2h0LVxbMTBweFxde3JpZ2h0Oi0xMHB4fS4tdG9wLVxbMTBweFxde3RvcDotMTBweH0uLXRvcC1cWzRweFxde3RvcDotNHB4fS5ib3R0b20tMHtib3R0b206MH0uYm90dG9tLTR7Ym90dG9tOjFyZW19LmxlZnQtMHtsZWZ0OjB9LmxlZnQtMXtsZWZ0Oi4yNXJlbX0ubGVmdC0xXC8ye2xlZnQ6NTAlfS5sZWZ0LTJ7bGVmdDouNXJlbX0ubGVmdC1cWzUwXCVcXXtsZWZ0OjUwJX0ucmlnaHQtMHtyaWdodDowfS5yaWdodC0xe3JpZ2h0Oi4yNXJlbX0ucmlnaHQtNHtyaWdodDoxcmVtfS5yaWdodC1cWzE2cHhcXXtyaWdodDoxNnB4fS50b3AtMHt0b3A6MH0udG9wLTR7dG9wOjFyZW19LnRvcC1cWzUwXCVcXXt0b3A6NTAlfS56LTUwe3otaW5kZXg6NTB9LnotXFs1XF17ei1pbmRleDo1fS56LW92ZXJsYXl7ei1pbmRleDo0fS4tbXgtMXttYXJnaW4tbGVmdDotLjI1cmVtO21hcmdpbi1yaWdodDotLjI1cmVtfS4tbXktMnttYXJnaW4tdG9wOi0uNXJlbTttYXJnaW4tYm90dG9tOi0uNXJlbX0uLW15LVxbMTAwcHhcXXttYXJnaW4tdG9wOi0xMDBweDttYXJnaW4tYm90dG9tOi0xMDBweH0ubXgtMnttYXJnaW4tbGVmdDouNXJlbTttYXJnaW4tcmlnaHQ6LjVyZW19Lm15LTF7bWFyZ2luLXRvcDouMjVyZW07bWFyZ2luLWJvdHRvbTouMjVyZW19Lm1iLTR7bWFyZ2luLWJvdHRvbToxcmVtfS5tbC0ye21hcmdpbi1sZWZ0Oi41cmVtfS5tbC00e21hcmdpbi1sZWZ0OjFyZW19Lm1sLVxbMjBweFxde21hcmdpbi1sZWZ0OjIwcHh9Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30ubXItMnttYXJnaW4tcmlnaHQ6LjVyZW19Lm10LTJ7bWFyZ2luLXRvcDouNXJlbX0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0udGFibGV7ZGlzcGxheTp0YWJsZX0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmFzcGVjdC1zcXVhcmV7YXNwZWN0LXJhdGlvOjEgLyAxfS5oLTEwe2hlaWdodDoyLjVyZW19LmgtMTF7aGVpZ2h0OjIuNzVyZW19LmgtMntoZWlnaHQ6LjVyZW19LmgtMlwuNXtoZWlnaHQ6LjYyNXJlbX0uaC0ze2hlaWdodDouNzVyZW19LmgtM1wuNXtoZWlnaHQ6Ljg3NXJlbX0uaC00e2hlaWdodDoxcmVtfS5oLTd7aGVpZ2h0OjEuNzVyZW19LmgtOXtoZWlnaHQ6Mi4yNXJlbX0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzE4cHhcXXtoZWlnaHQ6MThweH0uaC1cWzFweFxde2hlaWdodDoxcHh9LmgtXFsyMHB4XF17aGVpZ2h0OjIwcHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNHB4XF17aGVpZ2h0OjI0cHh9LmgtXFszMnB4XF17aGVpZ2h0OjMycHh9LmgtXFs1MHB4XF17aGVpZ2h0OjUwcHh9LmgtXFs3NXB4XF17aGVpZ2h0Ojc1cHh9LmgtXFs5cHhcXXtoZWlnaHQ6OXB4fS5oLVxbdmFyXCgtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodFwpXF17aGVpZ2h0OnZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCl9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLVxbMzAwcHhcXXttYXgtaGVpZ2h0OjMwMHB4fS5taW4taC1cWzIwMHB4XF17bWluLWhlaWdodDoyMDBweH0ubWluLWgtXFszMDBweFxde21pbi1oZWlnaHQ6MzAwcHh9Lm1pbi1oLXNjcmVlbnttaW4taGVpZ2h0OjEwMHZofS53LTFcLzN7d2lkdGg6MzMuMzMzMzMzJX0udy0xMHt3aWR0aDoyLjVyZW19LnctMnt3aWR0aDouNXJlbX0udy0yXC41e3dpZHRoOi42MjVyZW19LnctM3t3aWR0aDouNzVyZW19LnctM1wuNXt3aWR0aDouODc1cmVtfS53LTR7d2lkdGg6MXJlbX0udy01e3dpZHRoOjEuMjVyZW19LnctN3t3aWR0aDoxLjc1cmVtfS53LTcye3dpZHRoOjE4cmVtfS53LTl7d2lkdGg6Mi4yNXJlbX0udy1cWzE0cHhcXXt3aWR0aDoxNHB4fS53LVxbMXB4XF17d2lkdGg6MXB4fS53LVxbMjBweFxde3dpZHRoOjIwcHh9LnctXFsyNHB4XF17d2lkdGg6MjRweH0udy1cWzMycHhcXXt3aWR0aDozMnB4fS53LVxbNDRweFxde3dpZHRoOjQ0cHh9LnctXFs5cHhcXXt3aWR0aDo5cHh9LnctZml0e3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9LnctZnVsbHt3aWR0aDoxMDAlfS53LXNjcmVlbnt3aWR0aDoxMDB2d30ubWluLXctMHttaW4td2lkdGg6MHB4fS5taW4tdy1cWzMyMHB4XF17bWluLXdpZHRoOjMyMHB4fS5taW4tdy1cWzUwMHB4XF17bWluLXdpZHRoOjUwMHB4fS5taW4tdy1cWzhyZW1cXXttaW4td2lkdGg6OHJlbX0ubWluLXctXFt2YXJcKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGhcKVxde21pbi13aWR0aDp2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCl9Lm1heC13LTR4bHttYXgtd2lkdGg6NTZyZW19Lm1heC13LVxbMTAwMHB4XF17bWF4LXdpZHRoOjEwMDBweH0ubWF4LXctXFsxMHZ3XF17bWF4LXdpZHRoOjEwdnd9Lm1heC13LVxbMzAwcHhcXXttYXgtd2lkdGg6MzAwcHh9Lm1heC13LVxbOTB2d1xde21heC13aWR0aDo5MHZ3fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5tYXgtdy1sZ3ttYXgtd2lkdGg6MzJyZW19LmZsZXgtMXtmbGV4OjEgMSAwJX0uZmxleC1hdXRve2ZsZXg6MSAxIGF1dG99LmZsZXgtc2hyaW5rLTAsLnNocmluay0we2ZsZXgtc2hyaW5rOjB9LmZsZXgtZ3Jvd3tmbGV4LWdyb3c6MX0uYm9yZGVyLWNvbGxhcHNle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0uLXRyYW5zbGF0ZS14LTFcLzIsLnRyYW5zbGF0ZS14LVxbLTUwXCVcXXstLXR3LXRyYW5zbGF0ZS14OiAtNTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS50cmFuc2xhdGUteS1cWy01MFwlXF17LS10dy10cmFuc2xhdGUteTogLTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uLXJvdGF0ZS05MHstLXR3LXJvdGF0ZTogLTkwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5yb3RhdGUtOTB7LS10dy1yb3RhdGU6IDkwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5yb3RhdGUtXFstOTBkZWdcXXstLXR3LXJvdGF0ZTogLTkwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5yb3RhdGUtXFs5MGRlZ1xdey0tdHctcm90YXRlOiA5MGRlZzt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0udHJhbnNmb3Jte3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5jdXJzb3ItY29sLXJlc2l6ZXtjdXJzb3I6Y29sLXJlc2l6ZX0uY3Vyc29yLWRlZmF1bHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1ncmFie2N1cnNvcjpncmFifS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXNlLXJlc2l6ZXtjdXJzb3I6c2UtcmVzaXplfS50b3VjaC1ub25le3RvdWNoLWFjdGlvbjpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnJlc2l6ZS1ub25le3Jlc2l6ZTpub25lfS5yZXNpemV7cmVzaXplOmJvdGh9Lmxpc3QtZGVjaW1hbHtsaXN0LXN0eWxlLXR5cGU6ZGVjaW1hbH0ubGlzdC1kaXNje2xpc3Qtc3R5bGUtdHlwZTpkaXNjfS5ncmlkLWNvbHMtXFttaW4tY29udGVudF8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWluLWNvbnRlbnQgMWZyfS5ncmlkLXJvd3MtXFsxZnJcLF9taW4tY29udGVudFxde2dyaWQtdGVtcGxhdGUtcm93czoxZnIgbWluLWNvbnRlbnR9LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LWNvbC1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfS5pdGVtcy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5pdGVtcy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmR9Lml0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9Lmp1c3RpZnktc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5nYXAtMXtnYXA6LjI1cmVtfS5nYXAtMntnYXA6LjVyZW19LmdhcC0ze2dhcDouNzVyZW19LmdhcC00e2dhcDoxcmVtfS5nYXAtNXtnYXA6MS4yNXJlbX0uZ2FwLVxbMFwuNWVtXF17Z2FwOi41ZW19LmdhcC1cWzM2cHhcXXtnYXA6MzZweH0uZ2FwLXgtMnstbW96LWNvbHVtbi1nYXA6LjVyZW07Y29sdW1uLWdhcDouNXJlbX0uZ2FwLXgtM3stbW96LWNvbHVtbi1nYXA6Ljc1cmVtO2NvbHVtbi1nYXA6Ljc1cmVtfS5nYXAteC00ey1tb3otY29sdW1uLWdhcDoxcmVtO2NvbHVtbi1nYXA6MXJlbX0uZ2FwLXktMntyb3ctZ2FwOi41cmVtfS5nYXAteS00e3Jvdy1nYXA6MXJlbX0uZ2FwLXktNntyb3ctZ2FwOjEuNXJlbX0uZ2FwLXktOHtyb3ctZ2FwOjJyZW19LnNwYWNlLXgtMT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXgtcmV2ZXJzZTogMDttYXJnaW4tcmlnaHQ6Y2FsYyguMjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKC4yNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKX0uc3BhY2UteS0xPjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYyguMjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC4yNXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5zcGFjZS15LTFcLjU+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKC4zNzVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC4zNzVyZW0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc3BhY2UteS0yPjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYyguNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoLjVyZW0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc3BhY2UteS00Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYygxcmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpO21hcmdpbi1ib3R0b206Y2FsYygxcmVtICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9Lm92ZXJmbG93LWF1dG97b3ZlcmZsb3c6YXV0b30ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3ctY2xpcHtvdmVyZmxvdzpjbGlwfS5vdmVyZmxvdy1zY3JvbGx7b3ZlcmZsb3c6c2Nyb2xsfS5vdmVyZmxvdy15LWF1dG97b3ZlcmZsb3cteTphdXRvfS5vdmVyZmxvdy14LWhpZGRlbntvdmVyZmxvdy14OmhpZGRlbn0ub3ZlcmZsb3cteS1zY3JvbGx7b3ZlcmZsb3cteTpzY3JvbGx9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5yb3VuZGVke2JvcmRlci1yYWRpdXM6LjI1cmVtfS5yb3VuZGVkLVxbaW5oZXJpdFxde2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6OTk5OXB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9LnJvdW5kZWQtc217Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSA0cHgpfS5ib3JkZXJ7Ym9yZGVyLXdpZHRoOjFweH0uYm9yZGVyLTIsLmJvcmRlci1cWzJweFxde2JvcmRlci13aWR0aDoycHh9LmJvcmRlci15e2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5ib3JkZXItYntib3JkZXItYm90dG9tLXdpZHRoOjFweH0uYm9yZGVyLWx7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4fS5ib3JkZXItbC0ye2JvcmRlci1sZWZ0LXdpZHRoOjJweH0uYm9yZGVyLXJ7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1hY2NlbnR7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uYm9yZGVyLWJvcmRlcntib3JkZXItY29sb3I6aHNsKHZhcigtLWJvcmRlcikpfS5ib3JkZXItY2FyZHtib3JkZXItY29sb3I6aHNsKHZhcigtLWNhcmQpKX0uYm9yZGVyLWdyYXktNDAwey0tdHctYm9yZGVyLW9wYWNpdHk6IDE7Ym9yZGVyLWNvbG9yOnJnYigxNTYgMTYzIDE3NSAvIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSl9LmJvcmRlci1pbnB1dHtib3JkZXItY29sb3I6aHNsKHZhcigtLWlucHV0KSl9LmJvcmRlci1wcmltYXJ5e2JvcmRlci1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfS5ib3JkZXItdHJhbnNwYXJlbnR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5ib3JkZXItbC10cmFuc3BhcmVudHtib3JkZXItbGVmdC1jb2xvcjp0cmFuc3BhcmVudH0uYm9yZGVyLXQtdHJhbnNwYXJlbnR7Ym9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudH0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5iZy1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpKX0uYmctYmFja2dyb3VuZFwvODB7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkgLyAuOCl9LmJnLWJvcmRlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1ib3JkZXIpKX0uYmctY2FyZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1jYXJkKSl9LmJnLWNhcmQtZm9yZWdyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1jYXJkLWZvcmVncm91bmQpKX0uYmctZGVzdHJ1Y3RpdmV7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tZGVzdHJ1Y3RpdmUpKX0uYmctZ3JheS0zMDB7LS10dy1iZy1vcGFjaXR5OiAxO2JhY2tncm91bmQtY29sb3I6cmdiKDIwOSAyMTMgMjE5IC8gdmFyKC0tdHctYmctb3BhY2l0eSkpfS5iZy1ncmF5LTUwMHstLXR3LWJnLW9wYWNpdHk6IDE7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMTA3IDExNCAxMjggLyB2YXIoLS10dy1iZy1vcGFjaXR5KSl9LmJnLW11dGVke2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLW11dGVkKSl9LmJnLXBvcG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tcG9wb3ZlcikpfS5iZy1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uYmctcmVkLTUwMHstLXR3LWJnLW9wYWNpdHk6IDE7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjM5IDY4IDY4IC8gdmFyKC0tdHctYmctb3BhY2l0eSkpfS5iZy1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tc2Vjb25kYXJ5KSl9LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmJnLXdoaXRley0tdHctYmctb3BhY2l0eTogMTtiYWNrZ3JvdW5kLWNvbG9yOnJnYigyNTUgMjU1IDI1NSAvIHZhcigtLXR3LWJnLW9wYWNpdHkpKX0uYmctZ3JhZGllbnQtdG8tYntiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdmFyKC0tdHctZ3JhZGllbnQtc3RvcHMpKX0uZnJvbS10cmFuc3BhcmVudHstLXR3LWdyYWRpZW50LWZyb206IHRyYW5zcGFyZW50IHZhcigtLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtdG86IHJnYigwIDAgMCAvIDApIHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXN0b3BzOiB2YXIoLS10dy1ncmFkaWVudC1mcm9tKSwgdmFyKC0tdHctZ3JhZGllbnQtdG8pfS50by1iYWNrZ3JvdW5key0tdHctZ3JhZGllbnQtdG86IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pfS5maWxsLWN1cnJlbnR7ZmlsbDpjdXJyZW50Q29sb3J9LmZpbGwtd2hpdGV7ZmlsbDojZmZmfS5zdHJva2UtXFsycHhcXXtzdHJva2Utd2lkdGg6MnB4fS5zdHJva2UtXFszcHhcXXtzdHJva2Utd2lkdGg6M3B4fS5vYmplY3QtY29udGFpbnstby1vYmplY3QtZml0OmNvbnRhaW47b2JqZWN0LWZpdDpjb250YWlufS5wLTB7cGFkZGluZzowfS5wLTF7cGFkZGluZzouMjVyZW19LnAtMTB7cGFkZGluZzoyLjVyZW19LnAtMntwYWRkaW5nOi41cmVtfS5wLTN7cGFkZGluZzouNzVyZW19LnAtNHtwYWRkaW5nOjFyZW19LnAtNntwYWRkaW5nOjEuNXJlbX0ucC1cWzFweFxde3BhZGRpbmc6MXB4fS5weC0xe3BhZGRpbmctbGVmdDouMjVyZW07cGFkZGluZy1yaWdodDouMjVyZW19LnB4LTJ7cGFkZGluZy1sZWZ0Oi41cmVtO3BhZGRpbmctcmlnaHQ6LjVyZW19LnB4LTJcLjV7cGFkZGluZy1sZWZ0Oi42MjVyZW07cGFkZGluZy1yaWdodDouNjI1cmVtfS5weC0ze3BhZGRpbmctbGVmdDouNzVyZW07cGFkZGluZy1yaWdodDouNzVyZW19LnB4LTR7cGFkZGluZy1sZWZ0OjFyZW07cGFkZGluZy1yaWdodDoxcmVtfS5weC01e3BhZGRpbmctbGVmdDoxLjI1cmVtO3BhZGRpbmctcmlnaHQ6MS4yNXJlbX0ucHgtOHtwYWRkaW5nLWxlZnQ6MnJlbTtwYWRkaW5nLXJpZ2h0OjJyZW19LnB4LVxbMjRweFxde3BhZGRpbmctbGVmdDoyNHB4O3BhZGRpbmctcmlnaHQ6MjRweH0ucHktMXtwYWRkaW5nLXRvcDouMjVyZW07cGFkZGluZy1ib3R0b206LjI1cmVtfS5weS0xXC41e3BhZGRpbmctdG9wOi4zNzVyZW07cGFkZGluZy1ib3R0b206LjM3NXJlbX0ucHktMntwYWRkaW5nLXRvcDouNXJlbTtwYWRkaW5nLWJvdHRvbTouNXJlbX0ucHktM3twYWRkaW5nLXRvcDouNzVyZW07cGFkZGluZy1ib3R0b206Ljc1cmVtfS5weS00e3BhZGRpbmctdG9wOjFyZW07cGFkZGluZy1ib3R0b206MXJlbX0ucHktNntwYWRkaW5nLXRvcDoxLjVyZW07cGFkZGluZy1ib3R0b206MS41cmVtfS5weS03e3BhZGRpbmctdG9wOjEuNzVyZW07cGFkZGluZy1ib3R0b206MS43NXJlbX0ucHktXFsycHhcXXtwYWRkaW5nLXRvcDoycHg7cGFkZGluZy1ib3R0b206MnB4fS5wYi0we3BhZGRpbmctYm90dG9tOjB9LnBiLTIwe3BhZGRpbmctYm90dG9tOjVyZW19LnBiLTR7cGFkZGluZy1ib3R0b206MXJlbX0ucGwtNntwYWRkaW5nLWxlZnQ6MS41cmVtfS5wbC04e3BhZGRpbmctbGVmdDoycmVtfS5wci0ye3BhZGRpbmctcmlnaHQ6LjVyZW19LnB0LTB7cGFkZGluZy10b3A6MH0ucHQtMXtwYWRkaW5nLXRvcDouMjVyZW19LnB0LTJ7cGFkZGluZy10b3A6LjVyZW19LnB0LTR7cGFkZGluZy10b3A6MXJlbX0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtc3RhcnR7dGV4dC1hbGlnbjpzdGFydH0uZm9udC1zYW5ze2ZvbnQtZmFtaWx5OlJvYm90byxzYW5zLXNlcmlmfS5mb250LXNlcmlme2ZvbnQtZmFtaWx5OlNwYWNlIE1vbm8sbW9ub3NwYWNlfS50ZXh0LTJ4bHtmb250LXNpemU6MS41cmVtO2xpbmUtaGVpZ2h0OjJyZW19LnRleHQtM3hse2ZvbnQtc2l6ZToxLjg3NXJlbTtsaW5lLWhlaWdodDoyLjI1cmVtfS50ZXh0LTR4bHtmb250LXNpemU6Mi4yNXJlbTtsaW5lLWhlaWdodDoyLjVyZW19LnRleHQtXFswXC44cmVtXF17Zm9udC1zaXplOi44cmVtfS50ZXh0LVxbMTJweFxde2ZvbnQtc2l6ZToxMnB4fS50ZXh0LWxne2ZvbnQtc2l6ZToxLjEyNXJlbTtsaW5lLWhlaWdodDoxLjc1cmVtfS50ZXh0LXNte2ZvbnQtc2l6ZTouODc1cmVtO2xpbmUtaGVpZ2h0OjEuMjVyZW19LnRleHQteGx7Zm9udC1zaXplOjEuMjVyZW07bGluZS1oZWlnaHQ6MS43NXJlbX0udGV4dC14c3tmb250LXNpemU6Ljc1cmVtO2xpbmUtaGVpZ2h0OjFyZW19LmZvbnQtXFsxMnB4XF17Zm9udC13ZWlnaHQ6MTJweH0uZm9udC1cWzQwMFxde2ZvbnQtd2VpZ2h0OjQwMH0uZm9udC1cWzUwMFxde2ZvbnQtd2VpZ2h0OjUwMH0uZm9udC1cWzU1MFxde2ZvbnQtd2VpZ2h0OjU1MH0uZm9udC1ib2xke2ZvbnQtd2VpZ2h0OjcwMH0uZm9udC1leHRyYWJvbGR7Zm9udC13ZWlnaHQ6ODAwfS5mb250LW1lZGl1bXtmb250LXdlaWdodDo1MDB9LmZvbnQtbm9ybWFse2ZvbnQtd2VpZ2h0OjQwMH0uZm9udC1zZW1pYm9sZHtmb250LXdlaWdodDo2MDB9LnVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Lml0YWxpY3tmb250LXN0eWxlOml0YWxpY30ubGVhZGluZy00e2xpbmUtaGVpZ2h0OjFyZW19LmxlYWRpbmctbm9uZXtsaW5lLWhlaWdodDoxfS50cmFja2luZy1cWzBcLjA0ZW1cXXtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctdGlnaHR7bGV0dGVyLXNwYWNpbmc6LS4wMjVlbX0udHJhY2tpbmctd2lkZXJ7bGV0dGVyLXNwYWNpbmc6LjA1ZW19LnRyYWNraW5nLXdpZGVzdHtsZXR0ZXItc3BhY2luZzouMWVtfS50ZXh0LWFjY2VudHtjb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LnRleHQtYWNjZW50LWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKSl9LnRleHQtYmFja2dyb3VuZHtjb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkpfS50ZXh0LWNhcmQtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tY2FyZC1mb3JlZ3JvdW5kKSl9LnRleHQtY3VycmVudHtjb2xvcjpjdXJyZW50Q29sb3J9LnRleHQtZGVzdHJ1Y3RpdmV7Y29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSl9LnRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCkpfS50ZXh0LWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpKX0udGV4dC1tdXRlZHtjb2xvcjpoc2wodmFyKC0tbXV0ZWQpKX0udGV4dC1tdXRlZC1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LnRleHQtcG9wb3Zlci1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1wb3BvdmVyLWZvcmVncm91bmQpKX0udGV4dC1wcmltYXJ5e2NvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSl9LnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1wcmltYXJ5LWZvcmVncm91bmQpKX0udGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tc2Vjb25kYXJ5LWZvcmVncm91bmQpKX0udGV4dC13aGl0ZXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKX0udW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbi1saW5lOnVuZGVybGluZX0ubGluZS10aHJvdWdoe3RleHQtZGVjb3JhdGlvbi1saW5lOmxpbmUtdGhyb3VnaH0udW5kZXJsaW5lLW9mZnNldC00e3RleHQtdW5kZXJsaW5lLW9mZnNldDo0cHh9LmFudGlhbGlhc2Vkey13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlfS5vcGFjaXR5LTB7b3BhY2l0eTowfS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9Lm9wYWNpdHktNTB7b3BhY2l0eTouNX0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTcwe29wYWNpdHk6Ljd9Lm9wYWNpdHktNzV7b3BhY2l0eTouNzV9LnNoYWRvd3stLXR3LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiKDAgMCAwIC8gLjEpLCAwIDFweCAycHggLTFweCByZ2IoMCAwIDAgLyAuMSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAxcHggM3B4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yKSwgMCAxcHggMnB4IC0xcHggdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctbGd7LS10dy1zaGFkb3c6IDAgMTBweCAxNXB4IC0zcHggcmdiKDAgMCAwIC8gLjEpLCAwIDRweCA2cHggLTRweCByZ2IoMCAwIDAgLyAuMSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAxMHB4IDE1cHggLTNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpLCAwIDRweCA2cHggLTRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1tZHstLXR3LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiKDAgMCAwIC8gLjEpLCAwIDJweCA0cHggLTJweCByZ2IoMCAwIDAgLyAuMSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCA0cHggNnB4IC0xcHggdmFyKC0tdHctc2hhZG93LWNvbG9yKSwgMCAycHggNHB4IC0ycHggdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctc217LS10dy1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIC4wNSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAxcHggMnB4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5vdXRsaW5lLW5vbmV7b3V0bGluZToycHggc29saWQgdHJhbnNwYXJlbnQ7b3V0bGluZS1vZmZzZXQ6MnB4fS5vdXRsaW5le291dGxpbmUtc3R5bGU6c29saWR9LnJpbmctMHstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpIHZhcigtLXR3LXJpbmctb2Zmc2V0LWNvbG9yKTstLXR3LXJpbmctc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCBjYWxjKDBweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCl9LnJpbmctb2Zmc2V0LWJhY2tncm91bmR7LS10dy1yaW5nLW9mZnNldC1jb2xvcjogaHNsKHZhcigtLWJhY2tncm91bmQpKX0uZHJvcC1zaGFkb3ctMnhsey0tdHctZHJvcC1zaGFkb3c6IGRyb3Atc2hhZG93KDAgMjVweCAyNXB4IHJnYigwIDAgMCAvIC4xNSkpO2ZpbHRlcjp2YXIoLS10dy1ibHVyKSB2YXIoLS10dy1icmlnaHRuZXNzKSB2YXIoLS10dy1jb250cmFzdCkgdmFyKC0tdHctZ3JheXNjYWxlKSB2YXIoLS10dy1odWUtcm90YXRlKSB2YXIoLS10dy1pbnZlcnQpIHZhcigtLXR3LXNhdHVyYXRlKSB2YXIoLS10dy1zZXBpYSkgdmFyKC0tdHctZHJvcC1zaGFkb3cpfS5kcm9wLXNoYWRvdy1cWzBweF8wcHhfMTJweF9yZ2JhXCg1NlwsMjA1XCwxNTJcLDBcLjYwXClcXXstLXR3LWRyb3Atc2hhZG93OiBkcm9wLXNoYWRvdygwcHggMHB4IDEycHggcmdiYSg1NiwyMDUsMTUyLC42KSk7ZmlsdGVyOnZhcigtLXR3LWJsdXIpIHZhcigtLXR3LWJyaWdodG5lc3MpIHZhcigtLXR3LWNvbnRyYXN0KSB2YXIoLS10dy1ncmF5c2NhbGUpIHZhcigtLXR3LWh1ZS1yb3RhdGUpIHZhcigtLXR3LWludmVydCkgdmFyKC0tdHctc2F0dXJhdGUpIHZhcigtLXR3LXNlcGlhKSB2YXIoLS10dy1kcm9wLXNoYWRvdyl9LmZpbHRlcntmaWx0ZXI6dmFyKC0tdHctYmx1cikgdmFyKC0tdHctYnJpZ2h0bmVzcykgdmFyKC0tdHctY29udHJhc3QpIHZhcigtLXR3LWdyYXlzY2FsZSkgdmFyKC0tdHctaHVlLXJvdGF0ZSkgdmFyKC0tdHctaW52ZXJ0KSB2YXIoLS10dy1zYXR1cmF0ZSkgdmFyKC0tdHctc2VwaWEpIHZhcigtLXR3LWRyb3Atc2hhZG93KX0uYmFja2Ryb3AtYmx1ci1zbXstLXR3LWJhY2tkcm9wLWJsdXI6IGJsdXIoNHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyKSB2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzKSB2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCkgdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlKSB2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlKSB2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQpIHZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHkpIHZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlKSB2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIpIHZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MpIHZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0KSB2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUpIHZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUpIHZhcigtLXR3LWJhY2tkcm9wLWludmVydCkgdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSkgdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUpIHZhcigtLXR3LWJhY2tkcm9wLXNlcGlhKX0udHJhbnNpdGlvbi1hbGx7dHJhbnNpdGlvbi1wcm9wZXJ0eTphbGw7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS50cmFuc2l0aW9uLXRyYW5zZm9ybXt0cmFuc2l0aW9uLXByb3BlcnR5OnRyYW5zZm9ybTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTE1MHt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc30uZWFzZS1pbi1vdXR7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSl9QGtleWZyYW1lcyBlbnRlcnswJXtvcGFjaXR5OnZhcigtLXR3LWVudGVyLW9wYWNpdHksIDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCh2YXIoLS10dy1lbnRlci10cmFuc2xhdGUteCwgMCksdmFyKC0tdHctZW50ZXItdHJhbnNsYXRlLXksIDApLDApIHNjYWxlM2QodmFyKC0tdHctZW50ZXItc2NhbGUsIDEpLHZhcigtLXR3LWVudGVyLXNjYWxlLCAxKSx2YXIoLS10dy1lbnRlci1zY2FsZSwgMSkpIHJvdGF0ZSh2YXIoLS10dy1lbnRlci1yb3RhdGUsIDApKX19QGtleWZyYW1lcyBleGl0e3Rve29wYWNpdHk6dmFyKC0tdHctZXhpdC1vcGFjaXR5LCAxKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QodmFyKC0tdHctZXhpdC10cmFuc2xhdGUteCwgMCksdmFyKC0tdHctZXhpdC10cmFuc2xhdGUteSwgMCksMCkgc2NhbGUzZCh2YXIoLS10dy1leGl0LXNjYWxlLCAxKSx2YXIoLS10dy1leGl0LXNjYWxlLCAxKSx2YXIoLS10dy1leGl0LXNjYWxlLCAxKSkgcm90YXRlKHZhcigtLXR3LWV4aXQtcm90YXRlLCAwKSl9fS5hbmltYXRlLWlue2FuaW1hdGlvbi1uYW1lOmVudGVyO2FuaW1hdGlvbi1kdXJhdGlvbjouMTVzOy0tdHctZW50ZXItb3BhY2l0eTogaW5pdGlhbDstLXR3LWVudGVyLXNjYWxlOiBpbml0aWFsOy0tdHctZW50ZXItcm90YXRlOiBpbml0aWFsOy0tdHctZW50ZXItdHJhbnNsYXRlLXg6IGluaXRpYWw7LS10dy1lbnRlci10cmFuc2xhdGUteTogaW5pdGlhbH0uZmFkZS1pbi0wey0tdHctZW50ZXItb3BhY2l0eTogMH0uem9vbS1pbi05NXstLXR3LWVudGVyLXNjYWxlOiAuOTV9LmR1cmF0aW9uLTE1MHthbmltYXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwe2FuaW1hdGlvbi1kdXJhdGlvbjouMnN9LmVhc2UtaW4tb3V0e2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSl9LmZpbGVcOmJvcmRlci0wOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3JkZXItd2lkdGg6MHB4fS5maWxlXDpiZy10cmFuc3BhcmVudDo6ZmlsZS1zZWxlY3Rvci1idXR0b257YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZmlsZVw6dGV4dC1zbTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS4yNXJlbX0uZmlsZVw6Zm9udC1tZWRpdW06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2ZvbnQtd2VpZ2h0OjUwMH0ucGxhY2Vob2xkZXJcOnRleHQtbXV0ZWQtZm9yZWdyb3VuZDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5wbGFjZWhvbGRlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kOjpwbGFjZWhvbGRlcntjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5mb2N1cy13aXRoaW5cOnJlbGF0aXZlOmZvY3VzLXdpdGhpbntwb3NpdGlvbjpyZWxhdGl2ZX0uaG92ZXJcOnctXFsycHhcXTpob3Zlcnt3aWR0aDoycHh9LmhvdmVyXDp3LVxbM3B4XF06aG92ZXJ7d2lkdGg6M3B4fS5ob3Zlclw6Y3Vyc29yLXBvaW50ZXI6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmhvdmVyXDpyb3VuZGVkLWxnOmhvdmVye2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0uaG92ZXJcOmJnLWFjY2VudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uaG92ZXJcOmJnLWJhY2tncm91bmQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkpfS5ob3Zlclw6YmctYm9yZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJvcmRlcikpfS5ob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzkwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSAvIC45KX0uaG92ZXJcOmJnLW11dGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLW11dGVkKSl9LmhvdmVyXDpiZy1wcmltYXJ5OmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uaG92ZXJcOmJnLXByaW1hcnlcLzkwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjkpfS5ob3Zlclw6YmctcmVkLTcwMDpob3ZlcnstLXR3LWJnLW9wYWNpdHk6IDE7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMTg1IDI4IDI4IC8gdmFyKC0tdHctYmctb3BhY2l0eSkpfS5ob3Zlclw6Ymctc2Vjb25kYXJ5XC84MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1zZWNvbmRhcnkpIC8gLjgpfS5ob3Zlclw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZDpob3Zlcntjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uaG92ZXJcOnRleHQtbXV0ZWQtZm9yZWdyb3VuZDpob3Zlcntjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5ob3Zlclw6dGV4dC1wcmltYXJ5LWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6aHNsKHZhcigtLXByaW1hcnktZm9yZWdyb3VuZCkpfS5ob3Zlclw6dGV4dC13aGl0ZTpob3ZlcnstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKX0uaG92ZXJcOnVuZGVybGluZTpob3Zlcnt0ZXh0LWRlY29yYXRpb24tbGluZTp1bmRlcmxpbmV9LmhvdmVyXDpvcGFjaXR5LTEwMDpob3ZlcntvcGFjaXR5OjF9LmZvY3VzXDpiZy1hY2NlbnQ6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmZvY3VzXDpiZy1wcmltYXJ5OmZvY3Vze2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uZm9jdXNcOnRleHQtYWNjZW50LWZvcmVncm91bmQ6Zm9jdXN7Y29sb3I6aHNsKHZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKSl9LmZvY3VzXDp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZDpmb2N1c3tjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LmZvY3VzXDpvdXRsaW5lLW5vbmU6Zm9jdXN7b3V0bGluZToycHggc29saWQgdHJhbnNwYXJlbnQ7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1c1w6cmluZy0yOmZvY3Vzey0tdHctcmluZy1vZmZzZXQtc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkgdmFyKC0tdHctcmluZy1vZmZzZXQtY29sb3IpOy0tdHctcmluZy1zaGFkb3c6IHZhcigtLXR3LXJpbmctaW5zZXQpIDAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKSB2YXIoLS10dy1yaW5nLWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdywgMCAwICMwMDAwKX0uZm9jdXNcOnJpbmctcmluZzpmb2N1c3stLXR3LXJpbmctY29sb3I6IGhzbCh2YXIoLS1yaW5nKSl9LmZvY3VzXDpyaW5nLW9mZnNldC0yOmZvY3Vzey0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1ub25lOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdHJhbnNwYXJlbnQ7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLWFjY2VudDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5mb2N1cy12aXNpYmxlXDpyaW5nLTI6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpIHZhcigtLXR3LXJpbmctb2Zmc2V0LWNvbG9yKTstLXR3LXJpbmctc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCBjYWxjKDJweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCl9LmZvY3VzLXZpc2libGVcOnJpbmctcmluZzpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjogaHNsKHZhcigtLXJpbmcpKX0uZm9jdXMtdmlzaWJsZVw6cmluZy1vZmZzZXQtMjpmb2N1cy12aXNpYmxley0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDJweH0uZm9jdXMtdmlzaWJsZVw6cmluZy1vZmZzZXQtYmFja2dyb3VuZDpmb2N1cy12aXNpYmxley0tdHctcmluZy1vZmZzZXQtY29sb3I6IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRpc2FibGVkXDpwb2ludGVyLWV2ZW50cy1ub25lOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmV9LmRpc2FibGVkXDpjdXJzb3Itbm90LWFsbG93ZWQ6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZFw6Ym9yZGVyLWJvcmRlcjpkaXNhYmxlZHtib3JkZXItY29sb3I6aHNsKHZhcigtLWJvcmRlcikpfS5kaXNhYmxlZFw6dGV4dC1iYWNrZ3JvdW5kOmRpc2FibGVke2NvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9LnBlZXI6ZGlzYWJsZWR+LnBlZXItZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZHtjdXJzb3I6bm90LWFsbG93ZWR9LnBlZXI6ZGlzYWJsZWR+LnBlZXItZGlzYWJsZWRcOm9wYWNpdHktNzB7b3BhY2l0eTouN30uYXJpYS1zZWxlY3RlZFw6YmctYWNjZW50W2FyaWEtc2VsZWN0ZWQ9dHJ1ZV17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmFyaWEtc2VsZWN0ZWRcOnRleHQtYWNjZW50LWZvcmVncm91bmRbYXJpYS1zZWxlY3RlZD10cnVlXXtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uYXJpYS1zZWxlY3RlZFw6b3BhY2l0eS0xMDBbYXJpYS1zZWxlY3RlZD10cnVlXXtvcGFjaXR5OjF9LmRhdGEtXFtkaXNhYmxlZFxdXDpwb2ludGVyLWV2ZW50cy1ub25lW2RhdGEtZGlzYWJsZWRde3BvaW50ZXItZXZlbnRzOm5vbmV9LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6dHJhbnNsYXRlLXktMVtkYXRhLXNpZGU9Ym90dG9tXXstLXR3LXRyYW5zbGF0ZS15OiAuMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzaWRlXD1sZWZ0XF1cOi10cmFuc2xhdGUteC0xW2RhdGEtc2lkZT1sZWZ0XXstLXR3LXRyYW5zbGF0ZS14OiAtLjI1cmVtO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5kYXRhLVxbc2lkZVw9cmlnaHRcXVw6dHJhbnNsYXRlLXgtMVtkYXRhLXNpZGU9cmlnaHRdey0tdHctdHJhbnNsYXRlLXg6IC4yNXJlbTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uZGF0YS1cW3NpZGVcPXRvcFxdXDotdHJhbnNsYXRlLXktMVtkYXRhLXNpZGU9dG9wXXstLXR3LXRyYW5zbGF0ZS15OiAtLjI1cmVtO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5kYXRhLVxbc3RhdGVcPWNoZWNrZWRcXVw6dHJhbnNsYXRlLXgtNVtkYXRhLXN0YXRlPWNoZWNrZWRdey0tdHctdHJhbnNsYXRlLXg6IDEuMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzdGF0ZVw9dW5jaGVja2VkXF1cOnRyYW5zbGF0ZS14LTBbZGF0YS1zdGF0ZT11bmNoZWNrZWRdey0tdHctdHJhbnNsYXRlLXg6IDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX1Aa2V5ZnJhbWVzIGFjY29yZGlvbi11cHswJXtoZWlnaHQ6dmFyKC0tcmFkaXgtYWNjb3JkaW9uLWNvbnRlbnQtaGVpZ2h0KX10b3toZWlnaHQ6MH19LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOmFuaW1hdGUtYWNjb3JkaW9uLXVwW2RhdGEtc3RhdGU9Y2xvc2VkXXthbmltYXRpb246YWNjb3JkaW9uLXVwIC4ycyBlYXNlLW91dH1Aa2V5ZnJhbWVzIGFjY29yZGlvbi1kb3duezAle2hlaWdodDowfXRve2hlaWdodDp2YXIoLS1yYWRpeC1hY2NvcmRpb24tY29udGVudC1oZWlnaHQpfX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOmFuaW1hdGUtYWNjb3JkaW9uLWRvd25bZGF0YS1zdGF0ZT1vcGVuXXthbmltYXRpb246YWNjb3JkaW9uLWRvd24gLjJzIGVhc2Utb3V0fS5kYXRhLVxbc3RhdGVcPWFjdGl2ZVxdXDpiZy1iYWNrZ3JvdW5kW2RhdGEtc3RhdGU9YWN0aXZlXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRhdGEtXFtzdGF0ZVw9Y2hlY2tlZFxdXDpiZy1hY2NlbnRbZGF0YS1zdGF0ZT1jaGVja2VkXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uZGF0YS1cW3N0YXRlXD1jaGVja2VkXF1cOmJnLXByaW1hcnlbZGF0YS1zdGF0ZT1jaGVja2VkXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSl9LmRhdGEtXFtzdGF0ZVw9b25cXVw6YmctYWNjZW50W2RhdGEtc3RhdGU9b25dLC5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6YmctYWNjZW50W2RhdGEtc3RhdGU9b3Blbl17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmRhdGEtXFtzdGF0ZVw9dW5jaGVja2VkXF1cOmJnLXByaW1hcnlbZGF0YS1zdGF0ZT11bmNoZWNrZWRde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uZGF0YS1cW3N0YXRlXD1hY3RpdmVcXVw6dGV4dC1mb3JlZ3JvdW5kW2RhdGEtc3RhdGU9YWN0aXZlXXtjb2xvcjpoc2wodmFyKC0tZm9yZWdyb3VuZCkpfS5kYXRhLVxbc3RhdGVcPWNoZWNrZWRcXVw6dGV4dC1wcmltYXJ5LWZvcmVncm91bmRbZGF0YS1zdGF0ZT1jaGVja2VkXXtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LmRhdGEtXFtzdGF0ZVw9b25cXVw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZFtkYXRhLXN0YXRlPW9uXXtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnRleHQtbXV0ZWQtZm9yZWdyb3VuZFtkYXRhLXN0YXRlPW9wZW5de2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LmRhdGEtXFtkaXNhYmxlZFxdXDpvcGFjaXR5LTUwW2RhdGEtZGlzYWJsZWRde29wYWNpdHk6LjV9LmRhdGEtXFtzdGF0ZVw9YWN0aXZlXF1cOnNoYWRvdy1zbVtkYXRhLXN0YXRlPWFjdGl2ZV17LS10dy1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIC4wNSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAxcHggMnB4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6YW5pbWF0ZS1pbltkYXRhLXN0YXRlPW9wZW5de2FuaW1hdGlvbi1uYW1lOmVudGVyO2FuaW1hdGlvbi1kdXJhdGlvbjouMTVzOy0tdHctZW50ZXItb3BhY2l0eTogaW5pdGlhbDstLXR3LWVudGVyLXNjYWxlOiBpbml0aWFsOy0tdHctZW50ZXItcm90YXRlOiBpbml0aWFsOy0tdHctZW50ZXItdHJhbnNsYXRlLXg6IGluaXRpYWw7LS10dy1lbnRlci10cmFuc2xhdGUteTogaW5pdGlhbH0uZGF0YS1cW3N0YXRlXD1jbG9zZWRcXVw6YW5pbWF0ZS1vdXRbZGF0YS1zdGF0ZT1jbG9zZWRde2FuaW1hdGlvbi1uYW1lOmV4aXQ7YW5pbWF0aW9uLWR1cmF0aW9uOi4xNXM7LS10dy1leGl0LW9wYWNpdHk6IGluaXRpYWw7LS10dy1leGl0LXNjYWxlOiBpbml0aWFsOy0tdHctZXhpdC1yb3RhdGU6IGluaXRpYWw7LS10dy1leGl0LXRyYW5zbGF0ZS14OiBpbml0aWFsOy0tdHctZXhpdC10cmFuc2xhdGUteTogaW5pdGlhbH0uZGF0YS1cW3N0YXRlXD1jbG9zZWRcXVw6ZmFkZS1vdXQtMFtkYXRhLXN0YXRlPWNsb3NlZF17LS10dy1leGl0LW9wYWNpdHk6IDB9LmRhdGEtXFtzdGF0ZVw9b3BlblxdXDpmYWRlLWluLTBbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLW9wYWNpdHk6IDB9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnpvb20tb3V0LTk1W2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtc2NhbGU6IC45NX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnpvb20taW4tOTVbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLXNjYWxlOiAuOTV9LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6c2xpZGUtaW4tZnJvbS10b3AtMltkYXRhLXNpZGU9Ym90dG9tXXstLXR3LWVudGVyLXRyYW5zbGF0ZS15OiAtLjVyZW19LmRhdGEtXFtzaWRlXD1sZWZ0XF1cOnNsaWRlLWluLWZyb20tcmlnaHQtMltkYXRhLXNpZGU9bGVmdF17LS10dy1lbnRlci10cmFuc2xhdGUteDogLjVyZW19LmRhdGEtXFtzaWRlXD1yaWdodFxdXDpzbGlkZS1pbi1mcm9tLWxlZnQtMltkYXRhLXNpZGU9cmlnaHRdey0tdHctZW50ZXItdHJhbnNsYXRlLXg6IC0uNXJlbX0uZGF0YS1cW3NpZGVcPXRvcFxdXDpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yW2RhdGEtc2lkZT10b3Bdey0tdHctZW50ZXItdHJhbnNsYXRlLXk6IC41cmVtfS5kYXRhLVxbc3RhdGVcPWNsb3NlZFxdXDpzbGlkZS1vdXQtdG8tbGVmdC0xXC8yW2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtdHJhbnNsYXRlLXg6IC01MCV9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnNsaWRlLW91dC10by10b3AtXFs0OFwlXF1bZGF0YS1zdGF0ZT1jbG9zZWRdey0tdHctZXhpdC10cmFuc2xhdGUteTogLTQ4JX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNsaWRlLWluLWZyb20tbGVmdC0xXC8yW2RhdGEtc3RhdGU9b3Blbl17LS10dy1lbnRlci10cmFuc2xhdGUteDogLTUwJX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNsaWRlLWluLWZyb20tdG9wLVxbNDhcJVxdW2RhdGEtc3RhdGU9b3Blbl17LS10dy1lbnRlci10cmFuc2xhdGUteTogLTQ4JX06aXMoW2RhdGEtbW9kZT1kYXJrXSAuZGFya1w6Ym9yZGVyLXdoaXRlKXstLXR3LWJvcmRlci1vcGFjaXR5OiAxO2JvcmRlci1jb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpfUBtZWRpYSAobWluLXdpZHRoOiA2NDBweCl7LnNtXDptdC0we21hcmdpbi10b3A6MH0uc21cOmJsb2Nre2Rpc3BsYXk6YmxvY2t9LnNtXDpmbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LnNtXDpqdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnNtXDpzcGFjZS14LTI+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS14LXJldmVyc2U6IDA7bWFyZ2luLXJpZ2h0OmNhbGMoLjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKC41cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpfS5zbVw6c3BhY2UteC00Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteC1yZXZlcnNlOiAwO21hcmdpbi1yaWdodDpjYWxjKDFyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKDFyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSl9LnNtXDpzcGFjZS15LTA+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKDBweCAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoMHB4ICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9LnNtXDpyb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0uc21cOnAtMHtwYWRkaW5nOjB9LnNtXDp0ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey5tZFw6dy1mdWxse3dpZHRoOjEwMCV9fS5cW1wmXDpoYXNcKFxbYXJpYS1zZWxlY3RlZFxdXClcXVw6YmctYWNjZW50OmhhcyhbYXJpYS1zZWxlY3RlZF0pe2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5maXJzdFw6XFtcJlw6aGFzXChcW2FyaWEtc2VsZWN0ZWRcXVwpXF1cOnJvdW5kZWQtbC1tZDpoYXMoW2FyaWEtc2VsZWN0ZWRdKTpmaXJzdC1jaGlsZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5sYXN0XDpcW1wmXDpoYXNcKFxbYXJpYS1zZWxlY3RlZFxdXClcXVw6cm91bmRlZC1yLW1kOmhhcyhbYXJpYS1zZWxlY3RlZF0pOmxhc3QtY2hpbGR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5cW1wmXFtkYXRhLXN0YXRlXD1vcGVuXF1cPnN2Z1xdXDpyb3RhdGUtMTgwW2RhdGEtc3RhdGU9b3Blbl0+c3Zney0tdHctcm90YXRlOiAxODBkZWc7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LlxbXCZfXFtjbWRrLWdyb3VwLWhlYWRpbmdcXVxdXDpweC0yIFtjbWRrLWdyb3VwLWhlYWRpbmdde3BhZGRpbmctbGVmdDouNXJlbTtwYWRkaW5nLXJpZ2h0Oi41cmVtfS5cW1wmX1xbY21kay1ncm91cC1oZWFkaW5nXF1cXVw6cHktMVwuNSBbY21kay1ncm91cC1oZWFkaW5nXXtwYWRkaW5nLXRvcDouMzc1cmVtO3BhZGRpbmctYm90dG9tOi4zNzVyZW19LlxbXCZfXFtjbWRrLWdyb3VwLWhlYWRpbmdcXVxdXDp0ZXh0LXhzIFtjbWRrLWdyb3VwLWhlYWRpbmdde2ZvbnQtc2l6ZTouNzVyZW07bGluZS1oZWlnaHQ6MXJlbX0uXFtcJl9cW2NtZGstZ3JvdXAtaGVhZGluZ1xdXF1cOmZvbnQtbWVkaXVtIFtjbWRrLWdyb3VwLWhlYWRpbmdde2ZvbnQtd2VpZ2h0OjUwMH0uXFtcJl9cW2NtZGstZ3JvdXAtaGVhZGluZ1xdXF1cOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbY21kay1ncm91cC1oZWFkaW5nXXtjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5cW1wmX1xbY21kay1ncm91cFxdXDpub3RcKFxbaGlkZGVuXF1cKV9cflxbY21kay1ncm91cFxdXF1cOnB0LTAgW2NtZGstZ3JvdXBdOm5vdChbaGlkZGVuXSl+W2NtZGstZ3JvdXBde3BhZGRpbmctdG9wOjB9LlxbXCZfXFtjbWRrLWdyb3VwXF1cXVw6cHgtMiBbY21kay1ncm91cF17cGFkZGluZy1sZWZ0Oi41cmVtO3BhZGRpbmctcmlnaHQ6LjVyZW19LlxbXCZfXFtjbWRrLWlucHV0LXdyYXBwZXJcXV9zdmdcXVw6aC01IFtjbWRrLWlucHV0LXdyYXBwZXJdIHN2Z3toZWlnaHQ6MS4yNXJlbX0uXFtcJl9cW2NtZGstaW5wdXQtd3JhcHBlclxdX3N2Z1xdXDp3LTUgW2NtZGstaW5wdXQtd3JhcHBlcl0gc3Zne3dpZHRoOjEuMjVyZW19LlxbXCZfXFtjbWRrLWlucHV0XF1cXVw6aC0xMiBbY21kay1pbnB1dF17aGVpZ2h0OjNyZW19LlxbXCZfXFtjbWRrLWl0ZW1cXVxdXDpweC0yIFtjbWRrLWl0ZW1de3BhZGRpbmctbGVmdDouNXJlbTtwYWRkaW5nLXJpZ2h0Oi41cmVtfS5cW1wmX1xbY21kay1pdGVtXF1cXVw6cHktMyBbY21kay1pdGVtXXtwYWRkaW5nLXRvcDouNzVyZW07cGFkZGluZy1ib3R0b206Ljc1cmVtfS5cW1wmX1xbY21kay1pdGVtXF1fc3ZnXF1cOmgtNSBbY21kay1pdGVtXSBzdmd7aGVpZ2h0OjEuMjVyZW19LlxbXCZfXFtjbWRrLWl0ZW1cXV9zdmdcXVw6dy01IFtjbWRrLWl0ZW1dIHN2Z3t3aWR0aDoxLjI1cmVtfQo=","/assets/index-yF-ezBh3.js":"dmFyIHFDPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZSQ9KGUsdCxuKT0+dCBpbiBlP3FDKGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pOmVbdF09bjt2YXIgVWU9KGUsdCxuKT0+KGUkKGUsdHlwZW9mIHQhPSJzeW1ib2wiP3QrIiI6dCxuKSxuKSx0JD0oZSx0LG4pPT57aWYoIXQuaGFzKGUpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90ICIrbil9O3ZhciBKZD0oZSx0LG4pPT57aWYodC5oYXMoZSkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgYWRkIHRoZSBzYW1lIHByaXZhdGUgbWVtYmVyIG1vcmUgdGhhbiBvbmNlIik7dCBpbnN0YW5jZW9mIFdlYWtTZXQ/dC5hZGQoZSk6dC5zZXQoZSxuKX07dmFyIGV1PShlLHQsbik9Pih0JChlLHQsImFjY2VzcyBwcml2YXRlIG1ldGhvZCIpLG4pO2Z1bmN0aW9uIGcxKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IHI9dFtuXTtpZih0eXBlb2YgciE9InN0cmluZyImJiFBcnJheS5pc0FycmF5KHIpKXtmb3IoY29uc3QgbyBpbiByKWlmKG8hPT0iZGVmYXVsdCImJiEobyBpbiBlKSl7Y29uc3QgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk7aSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbyxpLmdldD9pOntlbnVtZXJhYmxlOiEwLGdldDooKT0+cltvXX0pfX19cmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKX0oZnVuY3Rpb24oKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKS5yZWxMaXN0O2lmKHQmJnQuc3VwcG9ydHMmJnQuc3VwcG9ydHMoIm1vZHVsZXByZWxvYWQiKSlyZXR1cm47Zm9yKGNvbnN0IG8gb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXScpKXIobyk7bmV3IE11dGF0aW9uT2JzZXJ2ZXIobz0+e2Zvcihjb25zdCBpIG9mIG8paWYoaS50eXBlPT09ImNoaWxkTGlzdCIpZm9yKGNvbnN0IGwgb2YgaS5hZGRlZE5vZGVzKWwudGFnTmFtZT09PSJMSU5LIiYmbC5yZWw9PT0ibW9kdWxlcHJlbG9hZCImJnIobCl9KS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pO2Z1bmN0aW9uIG4obyl7Y29uc3QgaT17fTtyZXR1cm4gby5pbnRlZ3JpdHkmJihpLmludGVncml0eT1vLmludGVncml0eSksby5yZWZlcnJlclBvbGljeSYmKGkucmVmZXJyZXJQb2xpY3k9by5yZWZlcnJlclBvbGljeSksby5jcm9zc09yaWdpbj09PSJ1c2UtY3JlZGVudGlhbHMiP2kuY3JlZGVudGlhbHM9ImluY2x1ZGUiOm8uY3Jvc3NPcmlnaW49PT0iYW5vbnltb3VzIj9pLmNyZWRlbnRpYWxzPSJvbWl0IjppLmNyZWRlbnRpYWxzPSJzYW1lLW9yaWdpbiIsaX1mdW5jdGlvbiByKG8pe2lmKG8uZXApcmV0dXJuO28uZXA9ITA7Y29uc3QgaT1uKG8pO2ZldGNoKG8uaHJlZixpKX19KSgpO2Z1bmN0aW9uIExhKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9dmFyIG0xPXtleHBvcnRzOnt9fSxDZT17fTsvKioKICogQGxpY2Vuc2UgUmVhY3QKICogcmVhY3QucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL3ZhciBEYT1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IiksbiQ9U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksciQ9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSxvJD1TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpLGkkPVN5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIiksbCQ9U3ltYm9sLmZvcigicmVhY3QucHJvdmlkZXIiKSxzJD1TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0IiksYSQ9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSx1JD1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZSIpLGMkPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSxkJD1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksbnY9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIGYkKGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiP251bGw6KGU9bnYmJmVbbnZdfHxlWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpudWxsKX12YXIgdjE9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LHkxPU9iamVjdC5hc3NpZ24seDE9e307ZnVuY3Rpb24gamwoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9eDEsdGhpcy51cGRhdGVyPW58fHYxfWpsLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O2psLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0IiYmdHlwZW9mIGUhPSJmdW5jdGlvbiImJmUhPW51bGwpdGhyb3cgRXJyb3IoInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLiIpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsInNldFN0YXRlIil9O2psLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSwiZm9yY2VVcGRhdGUiKX07ZnVuY3Rpb24gdzEoKXt9dzEucHJvdG90eXBlPWpsLnByb3RvdHlwZTtmdW5jdGlvbiBIcChlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz14MSx0aGlzLnVwZGF0ZXI9bnx8djF9dmFyIFZwPUhwLnByb3RvdHlwZT1uZXcgdzE7VnAuY29uc3RydWN0b3I9SHA7eTEoVnAsamwucHJvdG90eXBlKTtWcC5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgcnY9QXJyYXkuaXNBcnJheSxfMT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEtwPXtjdXJyZW50Om51bGx9LFMxPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gRTEoZSx0LG4pe3ZhciByLG89e30saT1udWxsLGw9bnVsbDtpZih0IT1udWxsKWZvcihyIGluIHQucmVmIT09dm9pZCAwJiYobD10LnJlZiksdC5rZXkhPT12b2lkIDAmJihpPSIiK3Qua2V5KSx0KV8xLmNhbGwodCxyKSYmIVMxLmhhc093blByb3BlcnR5KHIpJiYob1tyXT10W3JdKTt2YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYocz09PTEpby5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtmb3IodmFyIGE9QXJyYXkocyksdT0wO3U8czt1KyspYVt1XT1hcmd1bWVudHNbdSsyXTtvLmNoaWxkcmVuPWF9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gcz1lLmRlZmF1bHRQcm9wcyxzKW9bcl09PT12b2lkIDAmJihvW3JdPXNbcl0pO3JldHVybnskJHR5cGVvZjpEYSx0eXBlOmUsa2V5OmkscmVmOmwscHJvcHM6byxfb3duZXI6S3AuY3VycmVudH19ZnVuY3Rpb24gaCQoZSx0KXtyZXR1cm57JCR0eXBlb2Y6RGEsdHlwZTplLnR5cGUsa2V5OnQscmVmOmUucmVmLHByb3BzOmUucHJvcHMsX293bmVyOmUuX293bmVyfX1mdW5jdGlvbiBHcChlKXtyZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbCYmZS4kJHR5cGVvZj09PURhfWZ1bmN0aW9uIHAkKGUpe3ZhciB0PXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiK2UucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKG4pe3JldHVybiB0W25dfSl9dmFyIG92PS9cLysvZztmdW5jdGlvbiBaZChlLHQpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiZlLmtleSE9bnVsbD9wJCgiIitlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gRHUoZSx0LG4scixvKXt2YXIgaT10eXBlb2YgZTsoaT09PSJ1bmRlZmluZWQifHxpPT09ImJvb2xlYW4iKSYmKGU9bnVsbCk7dmFyIGw9ITE7aWYoZT09PW51bGwpbD0hMDtlbHNlIHN3aXRjaChpKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmw9ITA7YnJlYWs7Y2FzZSJvYmplY3QiOnN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIERhOmNhc2UgbiQ6bD0hMH19aWYobClyZXR1cm4gbD1lLG89byhsKSxlPXI9PT0iIj8iLiIrWmQobCwwKTpyLHJ2KG8pPyhuPSIiLGUhPW51bGwmJihuPWUucmVwbGFjZShvdiwiJCYvIikrIi8iKSxEdShvLHQsbiwiIixmdW5jdGlvbih1KXtyZXR1cm4gdX0pKTpvIT1udWxsJiYoR3AobykmJihvPWgkKG8sbisoIW8ua2V5fHxsJiZsLmtleT09PW8ua2V5PyIiOigiIitvLmtleSkucmVwbGFjZShvdiwiJCYvIikrIi8iKStlKSksdC5wdXNoKG8pKSwxO2lmKGw9MCxyPXI9PT0iIj8iLiI6cisiOiIscnYoZSkpZm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe2k9ZVtzXTt2YXIgYT1yK1pkKGkscyk7bCs9RHUoaSx0LG4sYSxvKX1lbHNlIGlmKGE9ZiQoZSksdHlwZW9mIGE9PSJmdW5jdGlvbiIpZm9yKGU9YS5jYWxsKGUpLHM9MDshKGk9ZS5uZXh0KCkpLmRvbmU7KWk9aS52YWx1ZSxhPXIrWmQoaSxzKyspLGwrPUR1KGksdCxuLGEsbyk7ZWxzZSBpZihpPT09Im9iamVjdCIpdGhyb3cgdD1TdHJpbmcoZSksRXJyb3IoIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogIisodD09PSJbb2JqZWN0IE9iamVjdF0iPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiwgIikrIn0iOnQpKyIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuIik7cmV0dXJuIGx9ZnVuY3Rpb24gdHUoZSx0LG4pe2lmKGU9PW51bGwpcmV0dXJuIGU7dmFyIHI9W10sbz0wO3JldHVybiBEdShlLHIsIiIsIiIsZnVuY3Rpb24oaSl7cmV0dXJuIHQuY2FsbChuLGksbysrKX0pLHJ9ZnVuY3Rpb24gZyQoZSl7aWYoZS5fc3RhdHVzPT09LTEpe3ZhciB0PWUuX3Jlc3VsdDt0PXQoKSx0LnRoZW4oZnVuY3Rpb24obil7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD1uKX0sZnVuY3Rpb24obil7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD1uKX0pLGUuX3N0YXR1cz09PS0xJiYoZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQpfWlmKGUuX3N0YXR1cz09PTEpcmV0dXJuIGUuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgc249e2N1cnJlbnQ6bnVsbH0sSXU9e3RyYW5zaXRpb246bnVsbH0sbSQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6c24sUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6SXUsUmVhY3RDdXJyZW50T3duZXI6S3B9O0NlLkNoaWxkcmVuPXttYXA6dHUsZm9yRWFjaDpmdW5jdGlvbihlLHQsbil7dHUoZSxmdW5jdGlvbigpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxuKX0sY291bnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9MDtyZXR1cm4gdHUoZSxmdW5jdGlvbigpe3QrK30pLHR9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIHR1KGUsZnVuY3Rpb24odCl7cmV0dXJuIHR9KXx8W119LG9ubHk6ZnVuY3Rpb24oZSl7aWYoIUdwKGUpKXRocm93IEVycm9yKCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4iKTtyZXR1cm4gZX19O0NlLkNvbXBvbmVudD1qbDtDZS5GcmFnbWVudD1yJDtDZS5Qcm9maWxlcj1pJDtDZS5QdXJlQ29tcG9uZW50PUhwO0NlLlN0cmljdE1vZGU9byQ7Q2UuU3VzcGVuc2U9dSQ7Q2UuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9bSQ7Q2UuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtpZihlPT1udWxsKXRocm93IEVycm9yKCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCAiK2UrIi4iKTt2YXIgcj15MSh7fSxlLnByb3BzKSxvPWUua2V5LGk9ZS5yZWYsbD1lLl9vd25lcjtpZih0IT1udWxsKXtpZih0LnJlZiE9PXZvaWQgMCYmKGk9dC5yZWYsbD1LcC5jdXJyZW50KSx0LmtleSE9PXZvaWQgMCYmKG89IiIrdC5rZXkpLGUudHlwZSYmZS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgcz1lLnR5cGUuZGVmYXVsdFByb3BzO2ZvcihhIGluIHQpXzEuY2FsbCh0LGEpJiYhUzEuaGFzT3duUHJvcGVydHkoYSkmJihyW2FdPXRbYV09PT12b2lkIDAmJnMhPT12b2lkIDA/c1thXTp0W2FdKX12YXIgYT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoYT09PTEpci5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxhKXtzPUFycmF5KGEpO2Zvcih2YXIgdT0wO3U8YTt1Kyspc1t1XT1hcmd1bWVudHNbdSsyXTtyLmNoaWxkcmVuPXN9cmV0dXJueyQkdHlwZW9mOkRhLHR5cGU6ZS50eXBlLGtleTpvLHJlZjppLHByb3BzOnIsX293bmVyOmx9fTtDZS5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlPXskJHR5cGVvZjpzJCxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGwsX2RlZmF1bHRWYWx1ZTpudWxsLF9nbG9iYWxOYW1lOm51bGx9LGUuUHJvdmlkZXI9eyQkdHlwZW9mOmwkLF9jb250ZXh0OmV9LGUuQ29uc3VtZXI9ZX07Q2UuY3JlYXRlRWxlbWVudD1FMTtDZS5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGUpe3ZhciB0PUUxLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH07Q2UuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O0NlLmZvcndhcmRSZWY9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOmEkLHJlbmRlcjplfX07Q2UuaXNWYWxpZEVsZW1lbnQ9R3A7Q2UubGF6eT1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6ZCQsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDplfSxfaW5pdDpnJH19O0NlLm1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6YyQsdHlwZTplLGNvbXBhcmU6dD09PXZvaWQgMD9udWxsOnR9fTtDZS5zdGFydFRyYW5zaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9SXUudHJhbnNpdGlvbjtJdS50cmFuc2l0aW9uPXt9O3RyeXtlKCl9ZmluYWxseXtJdS50cmFuc2l0aW9uPXR9fTtDZS51bnN0YWJsZV9hY3Q9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiYWN0KC4uLikgaXMgbm90IHN1cHBvcnRlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcyBvZiBSZWFjdC4iKX07Q2UudXNlQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc24uY3VycmVudC51c2VDYWxsYmFjayhlLHQpfTtDZS51c2VDb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBzbi5jdXJyZW50LnVzZUNvbnRleHQoZSl9O0NlLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9O0NlLnVzZURlZmVycmVkVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHNuLmN1cnJlbnQudXNlRGVmZXJyZWRWYWx1ZShlKX07Q2UudXNlRWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHNuLmN1cnJlbnQudXNlRWZmZWN0KGUsdCl9O0NlLnVzZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIHNuLmN1cnJlbnQudXNlSWQoKX07Q2UudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHNuLmN1cnJlbnQudXNlSW1wZXJhdGl2ZUhhbmRsZShlLHQsbil9O0NlLnVzZUluc2VydGlvbkVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBzbi5jdXJyZW50LnVzZUluc2VydGlvbkVmZmVjdChlLHQpfTtDZS51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc24uY3VycmVudC51c2VMYXlvdXRFZmZlY3QoZSx0KX07Q2UudXNlTWVtbz1mdW5jdGlvbihlLHQpe3JldHVybiBzbi5jdXJyZW50LnVzZU1lbW8oZSx0KX07Q2UudXNlUmVkdWNlcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHNuLmN1cnJlbnQudXNlUmVkdWNlcihlLHQsbil9O0NlLnVzZVJlZj1mdW5jdGlvbihlKXtyZXR1cm4gc24uY3VycmVudC51c2VSZWYoZSl9O0NlLnVzZVN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBzbi5jdXJyZW50LnVzZVN0YXRlKGUpfTtDZS51c2VTeW5jRXh0ZXJuYWxTdG9yZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHNuLmN1cnJlbnQudXNlU3luY0V4dGVybmFsU3RvcmUoZSx0LG4pfTtDZS51c2VUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHNuLmN1cnJlbnQudXNlVHJhbnNpdGlvbigpfTtDZS52ZXJzaW9uPSIxOC4yLjAiO20xLmV4cG9ydHM9Q2U7dmFyIHA9bTEuZXhwb3J0cztjb25zdCBlZT1MYShwKSxDMT1nMSh7X19wcm90b19fOm51bGwsZGVmYXVsdDplZX0sW3BdKTt2YXIgS2Y9e30sJDE9e2V4cG9ydHM6e319LFBuPXt9LGsxPXtleHBvcnRzOnt9fSxiMT17fTsvKioKICogQGxpY2Vuc2UgUmVhY3QKICogc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi8oZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChFLE8pe3ZhciBSPUUubGVuZ3RoO0UucHVzaChPKTtlOmZvcig7MDxSOyl7dmFyIEY9Ui0xPj4+MSxIPUVbRl07aWYoMDxvKEgsTykpRVtGXT1PLEVbUl09SCxSPUY7ZWxzZSBicmVhayBlfX1mdW5jdGlvbiBuKEUpe3JldHVybiBFLmxlbmd0aD09PTA/bnVsbDpFWzBdfWZ1bmN0aW9uIHIoRSl7aWYoRS5sZW5ndGg9PT0wKXJldHVybiBudWxsO3ZhciBPPUVbMF0sUj1FLnBvcCgpO2lmKFIhPT1PKXtFWzBdPVI7ZTpmb3IodmFyIEY9MCxIPUUubGVuZ3RoLGFlPUg+Pj4xO0Y8YWU7KXt2YXIgb2U9MiooRisxKS0xLCRlPUVbb2VdLF9lPW9lKzEsUT1FW19lXTtpZigwPm8oJGUsUikpX2U8SCYmMD5vKFEsJGUpPyhFW0ZdPVEsRVtfZV09UixGPV9lKTooRVtGXT0kZSxFW29lXT1SLEY9b2UpO2Vsc2UgaWYoX2U8SCYmMD5vKFEsUikpRVtGXT1RLEVbX2VdPVIsRj1fZTtlbHNlIGJyZWFrIGV9fXJldHVybiBPfWZ1bmN0aW9uIG8oRSxPKXt2YXIgUj1FLnNvcnRJbmRleC1PLnNvcnRJbmRleDtyZXR1cm4gUiE9PTA/UjpFLmlkLU8uaWR9aWYodHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmdHlwZW9mIHBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIil7dmFyIGk9cGVyZm9ybWFuY2U7ZS51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gaS5ub3coKX19ZWxzZXt2YXIgbD1EYXRlLHM9bC5ub3coKTtlLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBsLm5vdygpLXN9fXZhciBhPVtdLHU9W10sYz0xLGQ9bnVsbCxmPTMsaD0hMSxtPSExLGc9ITEsXz10eXBlb2Ygc2V0VGltZW91dD09ImZ1bmN0aW9uIj9zZXRUaW1lb3V0Om51bGwsdj10eXBlb2YgY2xlYXJUaW1lb3V0PT0iZnVuY3Rpb24iP2NsZWFyVGltZW91dDpudWxsLHk9dHlwZW9mIHNldEltbWVkaWF0ZTwidSI/c2V0SW1tZWRpYXRlOm51bGw7dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zY2hlZHVsaW5nIT09dm9pZCAwJiZuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZyE9PXZvaWQgMCYmbmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcuYmluZChuYXZpZ2F0b3Iuc2NoZWR1bGluZyk7ZnVuY3Rpb24geChFKXtmb3IodmFyIE89bih1KTtPIT09bnVsbDspe2lmKE8uY2FsbGJhY2s9PT1udWxsKXIodSk7ZWxzZSBpZihPLnN0YXJ0VGltZTw9RSlyKHUpLE8uc29ydEluZGV4PU8uZXhwaXJhdGlvblRpbWUsdChhLE8pO2Vsc2UgYnJlYWs7Tz1uKHUpfX1mdW5jdGlvbiBTKEUpe2lmKGc9ITEseChFKSwhbSlpZihuKGEpIT09bnVsbCltPSEwLEMoayk7ZWxzZXt2YXIgTz1uKHUpO08hPT1udWxsJiYkKFMsTy5zdGFydFRpbWUtRSl9fWZ1bmN0aW9uIGsoRSxPKXttPSExLGcmJihnPSExLHYoTiksTj0tMSksaD0hMDt2YXIgUj1mO3RyeXtmb3IoeChPKSxkPW4oYSk7ZCE9PW51bGwmJighKGQuZXhwaXJhdGlvblRpbWU+Tyl8fEUmJiFqKCkpOyl7dmFyIEY9ZC5jYWxsYmFjaztpZih0eXBlb2YgRj09ImZ1bmN0aW9uIil7ZC5jYWxsYmFjaz1udWxsLGY9ZC5wcmlvcml0eUxldmVsO3ZhciBIPUYoZC5leHBpcmF0aW9uVGltZTw9Tyk7Tz1lLnVuc3RhYmxlX25vdygpLHR5cGVvZiBIPT0iZnVuY3Rpb24iP2QuY2FsbGJhY2s9SDpkPT09bihhKSYmcihhKSx4KE8pfWVsc2UgcihhKTtkPW4oYSl9aWYoZCE9PW51bGwpdmFyIGFlPSEwO2Vsc2V7dmFyIG9lPW4odSk7b2UhPT1udWxsJiYkKFMsb2Uuc3RhcnRUaW1lLU8pLGFlPSExfXJldHVybiBhZX1maW5hbGx5e2Q9bnVsbCxmPVIsaD0hMX19dmFyIFQ9ITEsYj1udWxsLE49LTEsRD01LE09LTE7ZnVuY3Rpb24gaigpe3JldHVybiEoZS51bnN0YWJsZV9ub3coKS1NPEQpfWZ1bmN0aW9uIEIoKXtpZihiIT09bnVsbCl7dmFyIEU9ZS51bnN0YWJsZV9ub3coKTtNPUU7dmFyIE89ITA7dHJ5e089YighMCxFKX1maW5hbGx5e08/cmUoKTooVD0hMSxiPW51bGwpfX1lbHNlIFQ9ITF9dmFyIHJlO2lmKHR5cGVvZiB5PT0iZnVuY3Rpb24iKXJlPWZ1bmN0aW9uKCl7eShCKX07ZWxzZSBpZih0eXBlb2YgTWVzc2FnZUNoYW5uZWw8InUiKXt2YXIgVj1uZXcgTWVzc2FnZUNoYW5uZWwsWT1WLnBvcnQyO1YucG9ydDEub25tZXNzYWdlPUIscmU9ZnVuY3Rpb24oKXtZLnBvc3RNZXNzYWdlKG51bGwpfX1lbHNlIHJlPWZ1bmN0aW9uKCl7XyhCLDApfTtmdW5jdGlvbiBDKEUpe2I9RSxUfHwoVD0hMCxyZSgpKX1mdW5jdGlvbiAkKEUsTyl7Tj1fKGZ1bmN0aW9uKCl7RShlLnVuc3RhYmxlX25vdygpKX0sTyl9ZS51bnN0YWJsZV9JZGxlUHJpb3JpdHk9NSxlLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTEsZS51bnN0YWJsZV9Mb3dQcmlvcml0eT00LGUudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9MyxlLnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsLGUudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9MixlLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKEUpe0UuY2FsbGJhY2s9bnVsbH0sZS51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe218fGh8fChtPSEwLEMoaykpfSxlLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKEUpezA+RXx8MTI1PEU/Y29uc29sZS5lcnJvcigiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkIik6RD0wPEU/TWF0aC5mbG9vcigxZTMvRSk6NX0sZS51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBmfSxlLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIG4oYSl9LGUudW5zdGFibGVfbmV4dD1mdW5jdGlvbihFKXtzd2l0Y2goZil7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyIE89MzticmVhaztkZWZhdWx0Ok89Zn12YXIgUj1mO2Y9Tzt0cnl7cmV0dXJuIEUoKX1maW5hbGx5e2Y9Un19LGUudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9LGUudW5zdGFibGVfcmVxdWVzdFBhaW50PWZ1bmN0aW9uKCl7fSxlLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1mdW5jdGlvbihFLE8pe3N3aXRjaChFKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6RT0zfXZhciBSPWY7Zj1FO3RyeXtyZXR1cm4gTygpfWZpbmFsbHl7Zj1SfX0sZS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKEUsTyxSKXt2YXIgRj1lLnVuc3RhYmxlX25vdygpO3N3aXRjaCh0eXBlb2YgUj09Im9iamVjdCImJlIhPT1udWxsPyhSPVIuZGVsYXksUj10eXBlb2YgUj09Im51bWJlciImJjA8Uj9GK1I6Rik6Uj1GLEUpe2Nhc2UgMTp2YXIgSD0tMTticmVhaztjYXNlIDI6SD0yNTA7YnJlYWs7Y2FzZSA1Okg9MTA3Mzc0MTgyMzticmVhaztjYXNlIDQ6SD0xZTQ7YnJlYWs7ZGVmYXVsdDpIPTVlM31yZXR1cm4gSD1SK0gsRT17aWQ6YysrLGNhbGxiYWNrOk8scHJpb3JpdHlMZXZlbDpFLHN0YXJ0VGltZTpSLGV4cGlyYXRpb25UaW1lOkgsc29ydEluZGV4Oi0xfSxSPkY/KEUuc29ydEluZGV4PVIsdCh1LEUpLG4oYSk9PT1udWxsJiZFPT09bih1KSYmKGc/KHYoTiksTj0tMSk6Zz0hMCwkKFMsUi1GKSkpOihFLnNvcnRJbmRleD1ILHQoYSxFKSxtfHxofHwobT0hMCxDKGspKSksRX0sZS51bnN0YWJsZV9zaG91bGRZaWVsZD1qLGUudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKEUpe3ZhciBPPWY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFI9ZjtmPU87dHJ5e3JldHVybiBFLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2Y9Un19fX0pKGIxKTtrMS5leHBvcnRzPWIxO3ZhciB2JD1rMS5leHBvcnRzOy8qKgogKiBAbGljZW5zZSBSZWFjdAogKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL3ZhciBUMT1wLFRuPXYkO2Z1bmN0aW9uIFUoZSl7Zm9yKHZhciB0PSJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2Usbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdCs9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW25dKTtyZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCAiK3QrIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn12YXIgTjE9bmV3IFNldCx0YT17fTtmdW5jdGlvbiBDaShlLHQpe1NsKGUsdCksU2woZSsiQ2FwdHVyZSIsdCl9ZnVuY3Rpb24gU2woZSx0KXtmb3IodGFbZV09dCxlPTA7ZTx0Lmxlbmd0aDtlKyspTjEuYWRkKHRbZV0pfXZhciBWcj0hKHR5cGVvZiB3aW5kb3c+InUifHx0eXBlb2Ygd2luZG93LmRvY3VtZW50PiJ1Inx8dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50PiJ1IiksR2Y9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx5JD0vXls6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXVs6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXC0uMC05XHUwMEI3XHUwMzAwLVx1MDM2Rlx1MjAzRi1cdTIwNDBdKiQvLGl2PXt9LGx2PXt9O2Z1bmN0aW9uIHgkKGUpe3JldHVybiBHZi5jYWxsKGx2LGUpPyEwOkdmLmNhbGwoaXYsZSk/ITE6eSQudGVzdChlKT9sdltlXT0hMDooaXZbZV09ITAsITEpfWZ1bmN0aW9uIHckKGUsdCxuLHIpe2lmKG4hPT1udWxsJiZuLnR5cGU9PT0wKXJldHVybiExO3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOnJldHVybiEwO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIHI/ITE6biE9PW51bGw/IW4uYWNjZXB0c0Jvb2xlYW5zOihlPWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLDUpLGUhPT0iZGF0YS0iJiZlIT09ImFyaWEtIik7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gXyQoZSx0LG4scil7aWYodD09PW51bGx8fHR5cGVvZiB0PiJ1Inx8dyQoZSx0LG4scikpcmV0dXJuITA7aWYocilyZXR1cm4hMTtpZihuIT09bnVsbClzd2l0Y2gobi50eXBlKXtjYXNlIDM6cmV0dXJuIXQ7Y2FzZSA0OnJldHVybiB0PT09ITE7Y2FzZSA1OnJldHVybiBpc05hTih0KTtjYXNlIDY6cmV0dXJuIGlzTmFOKHQpfHwxPnR9cmV0dXJuITF9ZnVuY3Rpb24gYW4oZSx0LG4scixvLGksbCl7dGhpcy5hY2NlcHRzQm9vbGVhbnM9dD09PTJ8fHQ9PT0zfHx0PT09NCx0aGlzLmF0dHJpYnV0ZU5hbWU9cix0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZT1vLHRoaXMubXVzdFVzZVByb3BlcnR5PW4sdGhpcy5wcm9wZXJ0eU5hbWU9ZSx0aGlzLnR5cGU9dCx0aGlzLnNhbml0aXplVVJMPWksdGhpcy5yZW1vdmVFbXB0eVN0cmluZz1sfXZhciBqdD17fTsiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7anRbZV09bmV3IGFuKGUsMCwhMSxlLG51bGwsITEsITEpfSk7W1siYWNjZXB0Q2hhcnNldCIsImFjY2VwdC1jaGFyc2V0Il0sWyJjbGFzc05hbWUiLCJjbGFzcyJdLFsiaHRtbEZvciIsImZvciJdLFsiaHR0cEVxdWl2IiwiaHR0cC1lcXVpdiJdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07anRbdF09bmV3IGFuKHQsMSwhMSxlWzFdLG51bGwsITEsITEpfSk7WyJjb250ZW50RWRpdGFibGUiLCJkcmFnZ2FibGUiLCJzcGVsbENoZWNrIiwidmFsdWUiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2p0W2VdPW5ldyBhbihlLDIsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7WyJhdXRvUmV2ZXJzZSIsImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQiLCJmb2N1c2FibGUiLCJwcmVzZXJ2ZUFscGhhIl0uZm9yRWFjaChmdW5jdGlvbihlKXtqdFtlXT1uZXcgYW4oZSwyLCExLGUsbnVsbCwhMSwhMSl9KTsiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlIGRpc2FibGVSZW1vdGVQbGF5YmFjayBmb3JtTm9WYWxpZGF0ZSBoaWRkZW4gbG9vcCBub01vZHVsZSBub1ZhbGlkYXRlIG9wZW4gcGxheXNJbmxpbmUgcmVhZE9ubHkgcmVxdWlyZWQgcmV2ZXJzZWQgc2NvcGVkIHNlYW1sZXNzIGl0ZW1TY29wZSIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2p0W2VdPW5ldyBhbihlLDMsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7WyJjaGVja2VkIiwibXVsdGlwbGUiLCJtdXRlZCIsInNlbGVjdGVkIl0uZm9yRWFjaChmdW5jdGlvbihlKXtqdFtlXT1uZXcgYW4oZSwzLCEwLGUsbnVsbCwhMSwhMSl9KTtbImNhcHR1cmUiLCJkb3dubG9hZCJdLmZvckVhY2goZnVuY3Rpb24oZSl7anRbZV09bmV3IGFuKGUsNCwhMSxlLG51bGwsITEsITEpfSk7WyJjb2xzIiwicm93cyIsInNpemUiLCJzcGFuIl0uZm9yRWFjaChmdW5jdGlvbihlKXtqdFtlXT1uZXcgYW4oZSw2LCExLGUsbnVsbCwhMSwhMSl9KTtbInJvd1NwYW4iLCJzdGFydCJdLmZvckVhY2goZnVuY3Rpb24oZSl7anRbZV09bmV3IGFuKGUsNSwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTt2YXIgWXA9L1tcLTpdKFthLXpdKS9nO2Z1bmN0aW9uIFhwKGUpe3JldHVybiBlWzFdLnRvVXBwZXJDYXNlKCl9ImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0Ii5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFlwLFhwKTtqdFt0XT1uZXcgYW4odCwxLCExLGUsbnVsbCwhMSwhMSl9KTsieGxpbms6YWN0dWF0ZSB4bGluazphcmNyb2xlIHhsaW5rOnJvbGUgeGxpbms6c2hvdyB4bGluazp0aXRsZSB4bGluazp0eXBlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFlwLFhwKTtqdFt0XT1uZXcgYW4odCwxLCExLGUsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCExLCExKX0pO1sieG1sOmJhc2UiLCJ4bWw6bGFuZyIsInhtbDpzcGFjZSJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFlwLFhwKTtqdFt0XT1uZXcgYW4odCwxLCExLGUsImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsITEsITEpfSk7WyJ0YWJJbmRleCIsImNyb3NzT3JpZ2luIl0uZm9yRWFjaChmdW5jdGlvbihlKXtqdFtlXT1uZXcgYW4oZSwxLCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO2p0LnhsaW5rSHJlZj1uZXcgYW4oInhsaW5rSHJlZiIsMSwhMSwieGxpbms6aHJlZiIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCEwLCExKTtbInNyYyIsImhyZWYiLCJhY3Rpb24iLCJmb3JtQWN0aW9uIl0uZm9yRWFjaChmdW5jdGlvbihlKXtqdFtlXT1uZXcgYW4oZSwxLCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCEwLCEwKX0pO2Z1bmN0aW9uIFFwKGUsdCxuLHIpe3ZhciBvPWp0Lmhhc093blByb3BlcnR5KHQpP2p0W3RdOm51bGw7KG8hPT1udWxsP28udHlwZSE9PTA6cnx8ISgyPHQubGVuZ3RoKXx8dFswXSE9PSJvIiYmdFswXSE9PSJPInx8dFsxXSE9PSJuIiYmdFsxXSE9PSJOIikmJihfJCh0LG4sbyxyKSYmKG49bnVsbCkscnx8bz09PW51bGw/eCQodCkmJihuPT09bnVsbD9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LCIiK24pKTpvLm11c3RVc2VQcm9wZXJ0eT9lW28ucHJvcGVydHlOYW1lXT1uPT09bnVsbD9vLnR5cGU9PT0zPyExOiIiOm46KHQ9by5hdHRyaWJ1dGVOYW1lLHI9by5hdHRyaWJ1dGVOYW1lc3BhY2Usbj09PW51bGw/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6KG89by50eXBlLG49bz09PTN8fG89PT00JiZuPT09ITA/IiI6IiIrbixyP2Uuc2V0QXR0cmlidXRlTlMocix0LG4pOmUuc2V0QXR0cmlidXRlKHQsbikpKSl9dmFyIFpyPVQxLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELG51PVN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKSxYaT1TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKSxRaT1TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpLEpwPVN5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIiksWWY9U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKSxSMT1TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpLFAxPVN5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKSxacD1TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpLFhmPVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIiksUWY9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2VfbGlzdCIpLHFwPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSxobz1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksTzE9U3ltYm9sLmZvcigicmVhY3Qub2Zmc2NyZWVuIiksc3Y9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIGxzKGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiP251bGw6KGU9c3YmJmVbc3ZdfHxlWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpudWxsKX12YXIgaXQ9T2JqZWN0LmFzc2lnbixxZDtmdW5jdGlvbiBFcyhlKXtpZihxZD09PXZvaWQgMCl0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChuKXt2YXIgdD1uLnN0YWNrLnRyaW0oKS5tYXRjaCgvXG4oICooYXQgKT8pLyk7cWQ9dCYmdFsxXXx8IiJ9cmV0dXJuYApgK3FkK2V9dmFyIGVmPSExO2Z1bmN0aW9uIHRmKGUsdCl7aWYoIWV8fGVmKXJldHVybiIiO2VmPSEwO3ZhciBuPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7aWYodClpZih0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm9wcyIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksdHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KHQsW10pfWNhdGNoKHUpe3ZhciByPXV9UmVmbGVjdC5jb25zdHJ1Y3QoZSxbXSx0KX1lbHNle3RyeXt0LmNhbGwoKX1jYXRjaCh1KXtyPXV9ZS5jYWxsKHQucHJvdG90eXBlKX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKHUpe3I9dX1lKCl9fWNhdGNoKHUpe2lmKHUmJnImJnR5cGVvZiB1LnN0YWNrPT0ic3RyaW5nIil7Zm9yKHZhciBvPXUuc3RhY2suc3BsaXQoYApgKSxpPXIuc3RhY2suc3BsaXQoYApgKSxsPW8ubGVuZ3RoLTEscz1pLmxlbmd0aC0xOzE8PWwmJjA8PXMmJm9bbF0hPT1pW3NdOylzLS07Zm9yKDsxPD1sJiYwPD1zO2wtLSxzLS0paWYob1tsXSE9PWlbc10pe2lmKGwhPT0xfHxzIT09MSlkbyBpZihsLS0scy0tLDA+c3x8b1tsXSE9PWlbc10pe3ZhciBhPWAKYCtvW2xdLnJlcGxhY2UoIiBhdCBuZXcgIiwiIGF0ICIpO3JldHVybiBlLmRpc3BsYXlOYW1lJiZhLmluY2x1ZGVzKCI8YW5vbnltb3VzPiIpJiYoYT1hLnJlcGxhY2UoIjxhbm9ueW1vdXM+IixlLmRpc3BsYXlOYW1lKSksYX13aGlsZSgxPD1sJiYwPD1zKTticmVha319fWZpbmFsbHl7ZWY9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9bn1yZXR1cm4oZT1lP2UuZGlzcGxheU5hbWV8fGUubmFtZToiIik/RXMoZSk6IiJ9ZnVuY3Rpb24gUyQoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDU6cmV0dXJuIEVzKGUudHlwZSk7Y2FzZSAxNjpyZXR1cm4gRXMoIkxhenkiKTtjYXNlIDEzOnJldHVybiBFcygiU3VzcGVuc2UiKTtjYXNlIDE5OnJldHVybiBFcygiU3VzcGVuc2VMaXN0Iik7Y2FzZSAwOmNhc2UgMjpjYXNlIDE1OnJldHVybiBlPXRmKGUudHlwZSwhMSksZTtjYXNlIDExOnJldHVybiBlPXRmKGUudHlwZS5yZW5kZXIsITEpLGU7Y2FzZSAxOnJldHVybiBlPXRmKGUudHlwZSwhMCksZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBKZihlKXtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fG51bGw7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO3N3aXRjaChlKXtjYXNlIFFpOnJldHVybiJGcmFnbWVudCI7Y2FzZSBYaTpyZXR1cm4iUG9ydGFsIjtjYXNlIFlmOnJldHVybiJQcm9maWxlciI7Y2FzZSBKcDpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSBYZjpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgUWY6cmV0dXJuIlN1c3BlbnNlTGlzdCJ9aWYodHlwZW9mIGU9PSJvYmplY3QiKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIFAxOnJldHVybihlLmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuQ29uc3VtZXIiO2Nhc2UgUjE6cmV0dXJuKGUuX2NvbnRleHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Qcm92aWRlciI7Y2FzZSBacDp2YXIgdD1lLnJlbmRlcjtyZXR1cm4gZT1lLmRpc3BsYXlOYW1lLGV8fChlPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZT1lIT09IiI/IkZvcndhcmRSZWYoIitlKyIpIjoiRm9yd2FyZFJlZiIpLGU7Y2FzZSBxcDpyZXR1cm4gdD1lLmRpc3BsYXlOYW1lfHxudWxsLHQhPT1udWxsP3Q6SmYoZS50eXBlKXx8Ik1lbW8iO2Nhc2UgaG86dD1lLl9wYXlsb2FkLGU9ZS5faW5pdDt0cnl7cmV0dXJuIEpmKGUodCkpfWNhdGNoe319cmV0dXJuIG51bGx9ZnVuY3Rpb24gRSQoZSl7dmFyIHQ9ZS50eXBlO3N3aXRjaChlLnRhZyl7Y2FzZSAyNDpyZXR1cm4iQ2FjaGUiO2Nhc2UgOTpyZXR1cm4odC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLkNvbnN1bWVyIjtjYXNlIDEwOnJldHVybih0Ll9jb250ZXh0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuUHJvdmlkZXIiO2Nhc2UgMTg6cmV0dXJuIkRlaHlkcmF0ZWRGcmFnbWVudCI7Y2FzZSAxMTpyZXR1cm4gZT10LnJlbmRlcixlPWUuZGlzcGxheU5hbWV8fGUubmFtZXx8IiIsdC5kaXNwbGF5TmFtZXx8KGUhPT0iIj8iRm9yd2FyZFJlZigiK2UrIikiOiJGb3J3YXJkUmVmIik7Y2FzZSA3OnJldHVybiJGcmFnbWVudCI7Y2FzZSA1OnJldHVybiB0O2Nhc2UgNDpyZXR1cm4iUG9ydGFsIjtjYXNlIDM6cmV0dXJuIlJvb3QiO2Nhc2UgNjpyZXR1cm4iVGV4dCI7Y2FzZSAxNjpyZXR1cm4gSmYodCk7Y2FzZSA4OnJldHVybiB0PT09SnA/IlN0cmljdE1vZGUiOiJNb2RlIjtjYXNlIDIyOnJldHVybiJPZmZzY3JlZW4iO2Nhc2UgMTI6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIDIxOnJldHVybiJTY29wZSI7Y2FzZSAxMzpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgMTk6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSAyNTpyZXR1cm4iVHJhY2luZ01hcmtlciI7Y2FzZSAxOmNhc2UgMDpjYXNlIDE3OmNhc2UgMjpjYXNlIDE0OmNhc2UgMTU6aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIHQuZGlzcGxheU5hbWV8fHQubmFtZXx8bnVsbDtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTW8oZSl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlImJvb2xlYW4iOmNhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBlO2Nhc2Uib2JqZWN0IjpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBBMShlKXt2YXIgdD1lLnR5cGU7cmV0dXJuKGU9ZS5ub2RlTmFtZSkmJmUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJih0PT09ImNoZWNrYm94Inx8dD09PSJyYWRpbyIpfWZ1bmN0aW9uIEMkKGUpe3ZhciB0PUExKGUpPyJjaGVja2VkIjoidmFsdWUiLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx0KSxyPSIiK2VbdF07aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnR5cGVvZiBuPCJ1IiYmdHlwZW9mIG4uZ2V0PT0iZnVuY3Rpb24iJiZ0eXBlb2Ygbi5zZXQ9PSJmdW5jdGlvbiIpe3ZhciBvPW4uZ2V0LGk9bi5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24obCl7cj0iIitsLGkuY2FsbCh0aGlzLGwpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6bi5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldFZhbHVlOmZ1bmN0aW9uKGwpe3I9IiIrbH0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbdF19fX19ZnVuY3Rpb24gcnUoZSl7ZS5fdmFsdWVUcmFja2VyfHwoZS5fdmFsdWVUcmFja2VyPUMkKGUpKX1mdW5jdGlvbiBNMShlKXtpZighZSlyZXR1cm4hMTt2YXIgdD1lLl92YWx1ZVRyYWNrZXI7aWYoIXQpcmV0dXJuITA7dmFyIG49dC5nZXRWYWx1ZSgpLHI9IiI7cmV0dXJuIGUmJihyPUExKGUpP2UuY2hlY2tlZD8idHJ1ZSI6ImZhbHNlIjplLnZhbHVlKSxlPXIsZSE9PW4/KHQuc2V0VmFsdWUoZSksITApOiExfWZ1bmN0aW9uIG5jKGUpe2lmKGU9ZXx8KHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQ6dm9pZCAwKSx0eXBlb2YgZT4idSIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRjaHtyZXR1cm4gZS5ib2R5fX1mdW5jdGlvbiBaZihlLHQpe3ZhciBuPXQuY2hlY2tlZDtyZXR1cm4gaXQoe30sdCx7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bj8/ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkfSl9ZnVuY3Rpb24gYXYoZSx0KXt2YXIgbj10LmRlZmF1bHRWYWx1ZT09bnVsbD8iIjp0LmRlZmF1bHRWYWx1ZSxyPXQuY2hlY2tlZCE9bnVsbD90LmNoZWNrZWQ6dC5kZWZhdWx0Q2hlY2tlZDtuPU1vKHQudmFsdWUhPW51bGw/dC52YWx1ZTpuKSxlLl93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOnIsaW5pdGlhbFZhbHVlOm4sY29udHJvbGxlZDp0LnR5cGU9PT0iY2hlY2tib3gifHx0LnR5cGU9PT0icmFkaW8iP3QuY2hlY2tlZCE9bnVsbDp0LnZhbHVlIT1udWxsfX1mdW5jdGlvbiBMMShlLHQpe3Q9dC5jaGVja2VkLHQhPW51bGwmJlFwKGUsImNoZWNrZWQiLHQsITEpfWZ1bmN0aW9uIHFmKGUsdCl7TDEoZSx0KTt2YXIgbj1Nbyh0LnZhbHVlKSxyPXQudHlwZTtpZihuIT1udWxsKXI9PT0ibnVtYmVyIj8obj09PTAmJmUudmFsdWU9PT0iInx8ZS52YWx1ZSE9bikmJihlLnZhbHVlPSIiK24pOmUudmFsdWUhPT0iIituJiYoZS52YWx1ZT0iIituKTtlbHNlIGlmKHI9PT0ic3VibWl0Inx8cj09PSJyZXNldCIpe2UucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpO3JldHVybn10Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpP2VoKGUsdC50eXBlLG4pOnQuaGFzT3duUHJvcGVydHkoImRlZmF1bHRWYWx1ZSIpJiZlaChlLHQudHlwZSxNbyh0LmRlZmF1bHRWYWx1ZSkpLHQuY2hlY2tlZD09bnVsbCYmdC5kZWZhdWx0Q2hlY2tlZCE9bnVsbCYmKGUuZGVmYXVsdENoZWNrZWQ9ISF0LmRlZmF1bHRDaGVja2VkKX1mdW5jdGlvbiB1dihlLHQsbil7aWYodC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKXx8dC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikpe3ZhciByPXQudHlwZTtpZighKHIhPT0ic3VibWl0IiYmciE9PSJyZXNldCJ8fHQudmFsdWUhPT12b2lkIDAmJnQudmFsdWUhPT1udWxsKSlyZXR1cm47dD0iIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLG58fHQ9PT1lLnZhbHVlfHwoZS52YWx1ZT10KSxlLmRlZmF1bHRWYWx1ZT10fW49ZS5uYW1lLG4hPT0iIiYmKGUubmFtZT0iIiksZS5kZWZhdWx0Q2hlY2tlZD0hIWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZCxuIT09IiImJihlLm5hbWU9bil9ZnVuY3Rpb24gZWgoZSx0LG4peyh0IT09Im51bWJlciJ8fG5jKGUub3duZXJEb2N1bWVudCkhPT1lKSYmKG49PW51bGw/ZS5kZWZhdWx0VmFsdWU9IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTplLmRlZmF1bHRWYWx1ZSE9PSIiK24mJihlLmRlZmF1bHRWYWx1ZT0iIituKSl9dmFyIENzPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gZGwoZSx0LG4scil7aWYoZT1lLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl0WyIkIituW29dXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKW89dC5oYXNPd25Qcm9wZXJ0eSgiJCIrZVtuXS52YWx1ZSksZVtuXS5zZWxlY3RlZCE9PW8mJihlW25dLnNlbGVjdGVkPW8pLG8mJnImJihlW25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobj0iIitNbyhuKSx0PW51bGwsbz0wO288ZS5sZW5ndGg7bysrKXtpZihlW29dLnZhbHVlPT09bil7ZVtvXS5zZWxlY3RlZD0hMCxyJiYoZVtvXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn10IT09bnVsbHx8ZVtvXS5kaXNhYmxlZHx8KHQ9ZVtvXSl9dCE9PW51bGwmJih0LnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gdGgoZSx0KXtpZih0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT1udWxsKXRocm93IEVycm9yKFUoOTEpKTtyZXR1cm4gaXQoe30sdCx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIGN2KGUsdCl7dmFyIG49dC52YWx1ZTtpZihuPT1udWxsKXtpZihuPXQuY2hpbGRyZW4sdD10LmRlZmF1bHRWYWx1ZSxuIT1udWxsKXtpZih0IT1udWxsKXRocm93IEVycm9yKFUoOTIpKTtpZihDcyhuKSl7aWYoMTxuLmxlbmd0aCl0aHJvdyBFcnJvcihVKDkzKSk7bj1uWzBdfXQ9bn10PT1udWxsJiYodD0iIiksbj10fWUuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOk1vKG4pfX1mdW5jdGlvbiBEMShlLHQpe3ZhciBuPU1vKHQudmFsdWUpLHI9TW8odC5kZWZhdWx0VmFsdWUpO24hPW51bGwmJihuPSIiK24sbiE9PWUudmFsdWUmJihlLnZhbHVlPW4pLHQuZGVmYXVsdFZhbHVlPT1udWxsJiZlLmRlZmF1bHRWYWx1ZSE9PW4mJihlLmRlZmF1bHRWYWx1ZT1uKSksciE9bnVsbCYmKGUuZGVmYXVsdFZhbHVlPSIiK3IpfWZ1bmN0aW9uIGR2KGUpe3ZhciB0PWUudGV4dENvbnRlbnQ7dD09PWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJnQhPT0iIiYmdCE9PW51bGwmJihlLnZhbHVlPXQpfWZ1bmN0aW9uIEkxKGUpe3N3aXRjaChlKXtjYXNlInN2ZyI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtjYXNlIm1hdGgiOnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjtkZWZhdWx0OnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIn19ZnVuY3Rpb24gbmgoZSx0KXtyZXR1cm4gZT09bnVsbHx8ZT09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj9JMSh0KTplPT09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiYmdD09PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6ZX12YXIgb3UsajE9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBNU0FwcDwidSImJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKHQsbixyLG8pe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLHIsbyl9KX06ZX0oZnVuY3Rpb24oZSx0KXtpZihlLm5hbWVzcGFjZVVSSSE9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ8fCJpbm5lckhUTUwiaW4gZSllLmlubmVySFRNTD10O2Vsc2V7Zm9yKG91PW91fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxvdS5pbm5lckhUTUw9Ijxzdmc+Iit0LnZhbHVlT2YoKS50b1N0cmluZygpKyI8L3N2Zz4iLHQ9b3UuZmlyc3RDaGlsZDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtmb3IoO3QuZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZCh0LmZpcnN0Q2hpbGQpfX0pO2Z1bmN0aW9uIG5hKGUsdCl7aWYodCl7dmFyIG49ZS5maXJzdENoaWxkO2lmKG4mJm49PT1lLmxhc3RDaGlsZCYmbi5ub2RlVHlwZT09PTMpe24ubm9kZVZhbHVlPXQ7cmV0dXJufX1lLnRleHRDb250ZW50PXR9dmFyIFBzPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxhc3BlY3RSYXRpbzohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSwkJD1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKFBzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyQkLmZvckVhY2goZnVuY3Rpb24odCl7dD10K2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSksUHNbdF09UHNbZV19KX0pO2Z1bmN0aW9uIHoxKGUsdCxuKXtyZXR1cm4gdD09bnVsbHx8dHlwZW9mIHQ9PSJib29sZWFuInx8dD09PSIiPyIiOm58fHR5cGVvZiB0IT0ibnVtYmVyInx8dD09PTB8fFBzLmhhc093blByb3BlcnR5KGUpJiZQc1tlXT8oIiIrdCkudHJpbSgpOnQrInB4In1mdW5jdGlvbiBGMShlLHQpe2U9ZS5zdHlsZTtmb3IodmFyIG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pKXt2YXIgcj1uLmluZGV4T2YoIi0tIik9PT0wLG89ejEobix0W25dLHIpO249PT0iZmxvYXQiJiYobj0iY3NzRmxvYXQiKSxyP2Uuc2V0UHJvcGVydHkobixvKTplW25dPW99fXZhciBrJD1pdCh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtmdW5jdGlvbiByaChlLHQpe2lmKHQpe2lmKGskW2VdJiYodC5jaGlsZHJlbiE9bnVsbHx8dC5kYW5nZXJvdXNseVNldElubmVySFRNTCE9bnVsbCkpdGhyb3cgRXJyb3IoVSgxMzcsZSkpO2lmKHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPW51bGwpe2lmKHQuY2hpbGRyZW4hPW51bGwpdGhyb3cgRXJyb3IoVSg2MCkpO2lmKHR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT0ib2JqZWN0Inx8ISgiX19odG1sImluIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKFUoNjEpKX1pZih0LnN0eWxlIT1udWxsJiZ0eXBlb2YgdC5zdHlsZSE9Im9iamVjdCIpdGhyb3cgRXJyb3IoVSg2MikpfX1mdW5jdGlvbiBvaChlLHQpe2lmKGUuaW5kZXhPZigiLSIpPT09LTEpcmV0dXJuIHR5cGVvZiB0LmlzPT0ic3RyaW5nIjtzd2l0Y2goZSl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgaWg9bnVsbDtmdW5jdGlvbiBlZyhlKXtyZXR1cm4gZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3csZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGU9ZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksZS5ub2RlVHlwZT09PTM/ZS5wYXJlbnROb2RlOmV9dmFyIGxoPW51bGwsZmw9bnVsbCxobD1udWxsO2Z1bmN0aW9uIGZ2KGUpe2lmKGU9emEoZSkpe2lmKHR5cGVvZiBsaCE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihVKDI4MCkpO3ZhciB0PWUuc3RhdGVOb2RlO3QmJih0PWlkKHQpLGxoKGUuc3RhdGVOb2RlLGUudHlwZSx0KSl9fWZ1bmN0aW9uIEIxKGUpe2ZsP2hsP2hsLnB1c2goZSk6aGw9W2VdOmZsPWV9ZnVuY3Rpb24gVzEoKXtpZihmbCl7dmFyIGU9ZmwsdD1obDtpZihobD1mbD1udWxsLGZ2KGUpLHQpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKylmdih0W2VdKX19ZnVuY3Rpb24gVTEoZSx0KXtyZXR1cm4gZSh0KX1mdW5jdGlvbiBIMSgpe312YXIgbmY9ITE7ZnVuY3Rpb24gVjEoZSx0LG4pe2lmKG5mKXJldHVybiBlKHQsbik7bmY9ITA7dHJ5e3JldHVybiBVMShlLHQsbil9ZmluYWxseXtuZj0hMSwoZmwhPT1udWxsfHxobCE9PW51bGwpJiYoSDEoKSxXMSgpKX19ZnVuY3Rpb24gcmEoZSx0KXt2YXIgbj1lLnN0YXRlTm9kZTtpZihuPT09bnVsbClyZXR1cm4gbnVsbDt2YXIgcj1pZChuKTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtuPXJbdF07ZTpzd2l0Y2godCl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xpY2tDYXB0dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUiOmNhc2Uib25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VNb3ZlIjpjYXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3VzZVVwQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRW50ZXIiOihyPSFyLmRpc2FibGVkKXx8KGU9ZS50eXBlLHI9IShlPT09ImJ1dHRvbiJ8fGU9PT0iaW5wdXQifHxlPT09InNlbGVjdCJ8fGU9PT0idGV4dGFyZWEiKSksZT0hcjticmVhayBlO2RlZmF1bHQ6ZT0hMX1pZihlKXJldHVybiBudWxsO2lmKG4mJnR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFUoMjMxLHQsdHlwZW9mIG4pKTtyZXR1cm4gbn12YXIgc2g9ITE7aWYoVnIpdHJ5e3ZhciBzcz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoc3MsInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtzaD0hMH19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsc3Msc3MpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0Iixzcyxzcyl9Y2F0Y2h7c2g9ITF9ZnVuY3Rpb24gYiQoZSx0LG4scixvLGksbCxzLGEpe3ZhciB1PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7dC5hcHBseShuLHUpfWNhdGNoKGMpe3RoaXMub25FcnJvcihjKX19dmFyIE9zPSExLHJjPW51bGwsb2M9ITEsYWg9bnVsbCxUJD17b25FcnJvcjpmdW5jdGlvbihlKXtPcz0hMCxyYz1lfX07ZnVuY3Rpb24gTiQoZSx0LG4scixvLGksbCxzLGEpe09zPSExLHJjPW51bGwsYiQuYXBwbHkoVCQsYXJndW1lbnRzKX1mdW5jdGlvbiBSJChlLHQsbixyLG8saSxsLHMsYSl7aWYoTiQuYXBwbHkodGhpcyxhcmd1bWVudHMpLE9zKXtpZihPcyl7dmFyIHU9cmM7T3M9ITEscmM9bnVsbH1lbHNlIHRocm93IEVycm9yKFUoMTk4KSk7b2N8fChvYz0hMCxhaD11KX19ZnVuY3Rpb24gJGkoZSl7dmFyIHQ9ZSxuPWU7aWYoZS5hbHRlcm5hdGUpZm9yKDt0LnJldHVybjspdD10LnJldHVybjtlbHNle2U9dDtkbyB0PWUsdC5mbGFncyY0MDk4JiYobj10LnJldHVybiksZT10LnJldHVybjt3aGlsZShlKX1yZXR1cm4gdC50YWc9PT0zP246bnVsbH1mdW5jdGlvbiBLMShlKXtpZihlLnRhZz09PTEzKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYodD09PW51bGwmJihlPWUuYWx0ZXJuYXRlLGUhPT1udWxsJiYodD1lLm1lbW9pemVkU3RhdGUpKSx0IT09bnVsbClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIGh2KGUpe2lmKCRpKGUpIT09ZSl0aHJvdyBFcnJvcihVKDE4OCkpfWZ1bmN0aW9uIFAkKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKCF0KXtpZih0PSRpKGUpLHQ9PT1udWxsKXRocm93IEVycm9yKFUoMTg4KSk7cmV0dXJuIHQhPT1lP251bGw6ZX1mb3IodmFyIG49ZSxyPXQ7Oyl7dmFyIG89bi5yZXR1cm47aWYobz09PW51bGwpYnJlYWs7dmFyIGk9by5hbHRlcm5hdGU7aWYoaT09PW51bGwpe2lmKHI9by5yZXR1cm4sciE9PW51bGwpe249cjtjb250aW51ZX1icmVha31pZihvLmNoaWxkPT09aS5jaGlsZCl7Zm9yKGk9by5jaGlsZDtpOyl7aWYoaT09PW4pcmV0dXJuIGh2KG8pLGU7aWYoaT09PXIpcmV0dXJuIGh2KG8pLHQ7aT1pLnNpYmxpbmd9dGhyb3cgRXJyb3IoVSgxODgpKX1pZihuLnJldHVybiE9PXIucmV0dXJuKW49byxyPWk7ZWxzZXtmb3IodmFyIGw9ITEscz1vLmNoaWxkO3M7KXtpZihzPT09bil7bD0hMCxuPW8scj1pO2JyZWFrfWlmKHM9PT1yKXtsPSEwLHI9byxuPWk7YnJlYWt9cz1zLnNpYmxpbmd9aWYoIWwpe2ZvcihzPWkuY2hpbGQ7czspe2lmKHM9PT1uKXtsPSEwLG49aSxyPW87YnJlYWt9aWYocz09PXIpe2w9ITAscj1pLG49bzticmVha31zPXMuc2libGluZ31pZighbCl0aHJvdyBFcnJvcihVKDE4OSkpfX1pZihuLmFsdGVybmF0ZSE9PXIpdGhyb3cgRXJyb3IoVSgxOTApKX1pZihuLnRhZyE9PTMpdGhyb3cgRXJyb3IoVSgxODgpKTtyZXR1cm4gbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/ZTp0fWZ1bmN0aW9uIEcxKGUpe3JldHVybiBlPVAkKGUpLGUhPT1udWxsP1kxKGUpOm51bGx9ZnVuY3Rpb24gWTEoZSl7aWYoZS50YWc9PT01fHxlLnRhZz09PTYpcmV0dXJuIGU7Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe3ZhciB0PVkxKGUpO2lmKHQhPT1udWxsKXJldHVybiB0O2U9ZS5zaWJsaW5nfXJldHVybiBudWxsfXZhciBYMT1Ubi51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLHB2PVRuLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLE8kPVRuLnVuc3RhYmxlX3Nob3VsZFlpZWxkLEEkPVRuLnVuc3RhYmxlX3JlcXVlc3RQYWludCxwdD1Ubi51bnN0YWJsZV9ub3csTSQ9VG4udW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsdGc9VG4udW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksUTE9VG4udW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksaWM9VG4udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksTCQ9VG4udW5zdGFibGVfTG93UHJpb3JpdHksSjE9VG4udW5zdGFibGVfSWRsZVByaW9yaXR5LHRkPW51bGwsU3I9bnVsbDtmdW5jdGlvbiBEJChlKXtpZihTciYmdHlwZW9mIFNyLm9uQ29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXtTci5vbkNvbW1pdEZpYmVyUm9vdCh0ZCxlLHZvaWQgMCwoZS5jdXJyZW50LmZsYWdzJjEyOCk9PT0xMjgpfWNhdGNoe319dmFyIGlyPU1hdGguY2x6MzI/TWF0aC5jbHozMjp6JCxJJD1NYXRoLmxvZyxqJD1NYXRoLkxOMjtmdW5jdGlvbiB6JChlKXtyZXR1cm4gZT4+Pj0wLGU9PT0wPzMyOjMxLShJJChlKS9qJHwwKXwwfXZhciBpdT02NCxsdT00MTk0MzA0O2Z1bmN0aW9uICRzKGUpe3N3aXRjaChlJi1lKXtjYXNlIDE6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDg6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gMTY7Y2FzZSAzMjpyZXR1cm4gMzI7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gZSY0MTk0MjQwO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6cmV0dXJuIGUmMTMwMDIzNDI0O2Nhc2UgMTM0MjE3NzI4OnJldHVybiAxMzQyMTc3Mjg7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4gNTM2ODcwOTEyO2Nhc2UgMTA3Mzc0MTgyNDpyZXR1cm4gMTA3Mzc0MTgyNDtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBsYyhlLHQpe3ZhciBuPWUucGVuZGluZ0xhbmVzO2lmKG49PT0wKXJldHVybiAwO3ZhciByPTAsbz1lLnN1c3BlbmRlZExhbmVzLGk9ZS5waW5nZWRMYW5lcyxsPW4mMjY4NDM1NDU1O2lmKGwhPT0wKXt2YXIgcz1sJn5vO3MhPT0wP3I9JHMocyk6KGkmPWwsaSE9PTAmJihyPSRzKGkpKSl9ZWxzZSBsPW4mfm8sbCE9PTA/cj0kcyhsKTppIT09MCYmKHI9JHMoaSkpO2lmKHI9PT0wKXJldHVybiAwO2lmKHQhPT0wJiZ0IT09ciYmISh0Jm8pJiYobz1yJi1yLGk9dCYtdCxvPj1pfHxvPT09MTYmJihpJjQxOTQyNDApIT09MCkpcmV0dXJuIHQ7aWYociY0JiYocnw9biYxNiksdD1lLmVudGFuZ2xlZExhbmVzLHQhPT0wKWZvcihlPWUuZW50YW5nbGVtZW50cyx0Jj1yOzA8dDspbj0zMS1pcih0KSxvPTE8PG4scnw9ZVtuXSx0Jj1+bztyZXR1cm4gcn1mdW5jdGlvbiBGJChlLHQpe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gdCsyNTA7Y2FzZSA4OmNhc2UgMTY6Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiB0KzVlMztjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0OnJldHVybi0xO2Nhc2UgMTM0MjE3NzI4OmNhc2UgMjY4NDM1NDU2OmNhc2UgNTM2ODcwOTEyOmNhc2UgMTA3Mzc0MTgyNDpyZXR1cm4tMTtkZWZhdWx0OnJldHVybi0xfX1mdW5jdGlvbiBCJChlLHQpe2Zvcih2YXIgbj1lLnN1c3BlbmRlZExhbmVzLHI9ZS5waW5nZWRMYW5lcyxvPWUuZXhwaXJhdGlvblRpbWVzLGk9ZS5wZW5kaW5nTGFuZXM7MDxpOyl7dmFyIGw9MzEtaXIoaSkscz0xPDxsLGE9b1tsXTthPT09LTE/KCEocyZuKXx8cyZyKSYmKG9bbF09RiQocyx0KSk6YTw9dCYmKGUuZXhwaXJlZExhbmVzfD1zKSxpJj1+c319ZnVuY3Rpb24gdWgoZSl7cmV0dXJuIGU9ZS5wZW5kaW5nTGFuZXMmLTEwNzM3NDE4MjUsZSE9PTA/ZTplJjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uIFoxKCl7dmFyIGU9aXU7cmV0dXJuIGl1PDw9MSwhKGl1JjQxOTQyNDApJiYoaXU9NjQpLGV9ZnVuY3Rpb24gcmYoZSl7Zm9yKHZhciB0PVtdLG49MDszMT5uO24rKyl0LnB1c2goZSk7cmV0dXJuIHR9ZnVuY3Rpb24gSWEoZSx0LG4pe2UucGVuZGluZ0xhbmVzfD10LHQhPT01MzY4NzA5MTImJihlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wKSxlPWUuZXZlbnRUaW1lcyx0PTMxLWlyKHQpLGVbdF09bn1mdW5jdGlvbiBXJChlLHQpe3ZhciBuPWUucGVuZGluZ0xhbmVzJn50O2UucGVuZGluZ0xhbmVzPXQsZS5zdXNwZW5kZWRMYW5lcz0wLGUucGluZ2VkTGFuZXM9MCxlLmV4cGlyZWRMYW5lcyY9dCxlLm11dGFibGVSZWFkTGFuZXMmPXQsZS5lbnRhbmdsZWRMYW5lcyY9dCx0PWUuZW50YW5nbGVtZW50czt2YXIgcj1lLmV2ZW50VGltZXM7Zm9yKGU9ZS5leHBpcmF0aW9uVGltZXM7MDxuOyl7dmFyIG89MzEtaXIobiksaT0xPDxvO3Rbb109MCxyW29dPS0xLGVbb109LTEsbiY9fml9fWZ1bmN0aW9uIG5nKGUsdCl7dmFyIG49ZS5lbnRhbmdsZWRMYW5lc3w9dDtmb3IoZT1lLmVudGFuZ2xlbWVudHM7bjspe3ZhciByPTMxLWlyKG4pLG89MTw8cjtvJnR8ZVtyXSZ0JiYoZVtyXXw9dCksbiY9fm99fXZhciBNZT0wO2Z1bmN0aW9uIHExKGUpe3JldHVybiBlJj0tZSwxPGU/NDxlP2UmMjY4NDM1NDU1PzE2OjUzNjg3MDkxMjo0OjF9dmFyIGV4LHJnLHR4LG54LHJ4LGNoPSExLHN1PVtdLEVvPW51bGwsQ289bnVsbCwkbz1udWxsLG9hPW5ldyBNYXAsaWE9bmV3IE1hcCxtbz1bXSxVJD0ibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0IHN1Ym1pdCIuc3BsaXQoIiAiKTtmdW5jdGlvbiBndihlLHQpe3N3aXRjaChlKXtjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOkVvPW51bGw7YnJlYWs7Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2xlYXZlIjpDbz1udWxsO2JyZWFrO2Nhc2UibW91c2VvdmVyIjpjYXNlIm1vdXNlb3V0Ijokbz1udWxsO2JyZWFrO2Nhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcm91dCI6b2EuZGVsZXRlKHQucG9pbnRlcklkKTticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6aWEuZGVsZXRlKHQucG9pbnRlcklkKX19ZnVuY3Rpb24gYXMoZSx0LG4scixvLGkpe3JldHVybiBlPT09bnVsbHx8ZS5uYXRpdmVFdmVudCE9PWk/KGU9e2Jsb2NrZWRPbjp0LGRvbUV2ZW50TmFtZTpuLGV2ZW50U3lzdGVtRmxhZ3M6cixuYXRpdmVFdmVudDppLHRhcmdldENvbnRhaW5lcnM6W29dfSx0IT09bnVsbCYmKHQ9emEodCksdCE9PW51bGwmJnJnKHQpKSxlKTooZS5ldmVudFN5c3RlbUZsYWdzfD1yLHQ9ZS50YXJnZXRDb250YWluZXJzLG8hPT1udWxsJiZ0LmluZGV4T2Yobyk9PT0tMSYmdC5wdXNoKG8pLGUpfWZ1bmN0aW9uIEgkKGUsdCxuLHIsbyl7c3dpdGNoKHQpe2Nhc2UiZm9jdXNpbiI6cmV0dXJuIEVvPWFzKEVvLGUsdCxuLHIsbyksITA7Y2FzZSJkcmFnZW50ZXIiOnJldHVybiBDbz1hcyhDbyxlLHQsbixyLG8pLCEwO2Nhc2UibW91c2VvdmVyIjpyZXR1cm4gJG89YXMoJG8sZSx0LG4scixvKSwhMDtjYXNlInBvaW50ZXJvdmVyIjp2YXIgaT1vLnBvaW50ZXJJZDtyZXR1cm4gb2Euc2V0KGksYXMob2EuZ2V0KGkpfHxudWxsLGUsdCxuLHIsbykpLCEwO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOnJldHVybiBpPW8ucG9pbnRlcklkLGlhLnNldChpLGFzKGlhLmdldChpKXx8bnVsbCxlLHQsbixyLG8pKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBveChlKXt2YXIgdD1yaShlLnRhcmdldCk7aWYodCE9PW51bGwpe3ZhciBuPSRpKHQpO2lmKG4hPT1udWxsKXtpZih0PW4udGFnLHQ9PT0xMyl7aWYodD1LMShuKSx0IT09bnVsbCl7ZS5ibG9ja2VkT249dCxyeChlLnByaW9yaXR5LGZ1bmN0aW9uKCl7dHgobil9KTtyZXR1cm59fWVsc2UgaWYodD09PTMmJm4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe2UuYmxvY2tlZE9uPW4udGFnPT09Mz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBqdShlKXtpZihlLmJsb2NrZWRPbiE9PW51bGwpcmV0dXJuITE7Zm9yKHZhciB0PWUudGFyZ2V0Q29udGFpbmVyczswPHQubGVuZ3RoOyl7dmFyIG49ZGgoZS5kb21FdmVudE5hbWUsZS5ldmVudFN5c3RlbUZsYWdzLHRbMF0sZS5uYXRpdmVFdmVudCk7aWYobj09PW51bGwpe249ZS5uYXRpdmVFdmVudDt2YXIgcj1uZXcgbi5jb25zdHJ1Y3RvcihuLnR5cGUsbik7aWg9cixuLnRhcmdldC5kaXNwYXRjaEV2ZW50KHIpLGloPW51bGx9ZWxzZSByZXR1cm4gdD16YShuKSx0IT09bnVsbCYmcmcodCksZS5ibG9ja2VkT249biwhMTt0LnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gbXYoZSx0LG4pe2p1KGUpJiZuLmRlbGV0ZSh0KX1mdW5jdGlvbiBWJCgpe2NoPSExLEVvIT09bnVsbCYmanUoRW8pJiYoRW89bnVsbCksQ28hPT1udWxsJiZqdShDbykmJihDbz1udWxsKSwkbyE9PW51bGwmJmp1KCRvKSYmKCRvPW51bGwpLG9hLmZvckVhY2gobXYpLGlhLmZvckVhY2gobXYpfWZ1bmN0aW9uIHVzKGUsdCl7ZS5ibG9ja2VkT249PT10JiYoZS5ibG9ja2VkT249bnVsbCxjaHx8KGNoPSEwLFRuLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soVG4udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksViQpKSl9ZnVuY3Rpb24gbGEoZSl7ZnVuY3Rpb24gdChvKXtyZXR1cm4gdXMobyxlKX1pZigwPHN1Lmxlbmd0aCl7dXMoc3VbMF0sZSk7Zm9yKHZhciBuPTE7bjxzdS5sZW5ndGg7bisrKXt2YXIgcj1zdVtuXTtyLmJsb2NrZWRPbj09PWUmJihyLmJsb2NrZWRPbj1udWxsKX19Zm9yKEVvIT09bnVsbCYmdXMoRW8sZSksQ28hPT1udWxsJiZ1cyhDbyxlKSwkbyE9PW51bGwmJnVzKCRvLGUpLG9hLmZvckVhY2godCksaWEuZm9yRWFjaCh0KSxuPTA7bjxtby5sZW5ndGg7bisrKXI9bW9bbl0sci5ibG9ja2VkT249PT1lJiYoci5ibG9ja2VkT249bnVsbCk7Zm9yKDswPG1vLmxlbmd0aCYmKG49bW9bMF0sbi5ibG9ja2VkT249PT1udWxsKTspb3gobiksbi5ibG9ja2VkT249PT1udWxsJiZtby5zaGlmdCgpfXZhciBwbD1aci5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxzYz0hMDtmdW5jdGlvbiBLJChlLHQsbixyKXt2YXIgbz1NZSxpPXBsLnRyYW5zaXRpb247cGwudHJhbnNpdGlvbj1udWxsO3RyeXtNZT0xLG9nKGUsdCxuLHIpfWZpbmFsbHl7TWU9byxwbC50cmFuc2l0aW9uPWl9fWZ1bmN0aW9uIEckKGUsdCxuLHIpe3ZhciBvPU1lLGk9cGwudHJhbnNpdGlvbjtwbC50cmFuc2l0aW9uPW51bGw7dHJ5e01lPTQsb2coZSx0LG4scil9ZmluYWxseXtNZT1vLHBsLnRyYW5zaXRpb249aX19ZnVuY3Rpb24gb2coZSx0LG4scil7aWYoc2Mpe3ZhciBvPWRoKGUsdCxuLHIpO2lmKG89PT1udWxsKXBmKGUsdCxyLGFjLG4pLGd2KGUscik7ZWxzZSBpZihIJChvLGUsdCxuLHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihndihlLHIpLHQmNCYmLTE8VSQuaW5kZXhPZihlKSl7Zm9yKDtvIT09bnVsbDspe3ZhciBpPXphKG8pO2lmKGkhPT1udWxsJiZleChpKSxpPWRoKGUsdCxuLHIpLGk9PT1udWxsJiZwZihlLHQscixhYyxuKSxpPT09bylicmVhaztvPWl9byE9PW51bGwmJnIuc3RvcFByb3BhZ2F0aW9uKCl9ZWxzZSBwZihlLHQscixudWxsLG4pfX12YXIgYWM9bnVsbDtmdW5jdGlvbiBkaChlLHQsbixyKXtpZihhYz1udWxsLGU9ZWcociksZT1yaShlKSxlIT09bnVsbClpZih0PSRpKGUpLHQ9PT1udWxsKWU9bnVsbDtlbHNlIGlmKG49dC50YWcsbj09PTEzKXtpZihlPUsxKHQpLGUhPT1udWxsKXJldHVybiBlO2U9bnVsbH1lbHNlIGlmKG49PT0zKXtpZih0LnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXJldHVybiB0LnRhZz09PTM/dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO2U9bnVsbH1lbHNlIHQhPT1lJiYoZT1udWxsKTtyZXR1cm4gYWM9ZSxudWxsfWZ1bmN0aW9uIGl4KGUpe3N3aXRjaChlKXtjYXNlImNhbmNlbCI6Y2FzZSJjbGljayI6Y2FzZSJjbG9zZSI6Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjpjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOmNhc2UiaW5wdXQiOmNhc2UiaW52YWxpZCI6Y2FzZSJrZXlkb3duIjpjYXNlImtleXByZXNzIjpjYXNlImtleXVwIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZXVwIjpjYXNlInBhc3RlIjpjYXNlInBhdXNlIjpjYXNlInBsYXkiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVydXAiOmNhc2UicmF0ZWNoYW5nZSI6Y2FzZSJyZXNldCI6Y2FzZSJyZXNpemUiOmNhc2Uic2Vla2VkIjpjYXNlInN1Ym1pdCI6Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaHN0YXJ0IjpjYXNlInZvbHVtZWNoYW5nZSI6Y2FzZSJjaGFuZ2UiOmNhc2Uic2VsZWN0aW9uY2hhbmdlIjpjYXNlInRleHRJbnB1dCI6Y2FzZSJjb21wb3NpdGlvbnN0YXJ0IjpjYXNlImNvbXBvc2l0aW9uZW5kIjpjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpjYXNlImJlZm9yZWJsdXIiOmNhc2UiYWZ0ZXJibHVyIjpjYXNlImJlZm9yZWlucHV0IjpjYXNlImJsdXIiOmNhc2UiZnVsbHNjcmVlbmNoYW5nZSI6Y2FzZSJmb2N1cyI6Y2FzZSJoYXNoY2hhbmdlIjpjYXNlInBvcHN0YXRlIjpjYXNlInNlbGVjdCI6Y2FzZSJzZWxlY3RzdGFydCI6cmV0dXJuIDE7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNlb3V0IjpjYXNlIm1vdXNlb3ZlciI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInNjcm9sbCI6Y2FzZSJ0b2dnbGUiOmNhc2UidG91Y2htb3ZlIjpjYXNlIndoZWVsIjpjYXNlIm1vdXNlZW50ZXIiOmNhc2UibW91c2VsZWF2ZSI6Y2FzZSJwb2ludGVyZW50ZXIiOmNhc2UicG9pbnRlcmxlYXZlIjpyZXR1cm4gNDtjYXNlIm1lc3NhZ2UiOnN3aXRjaChNJCgpKXtjYXNlIHRnOnJldHVybiAxO2Nhc2UgUTE6cmV0dXJuIDQ7Y2FzZSBpYzpjYXNlIEwkOnJldHVybiAxNjtjYXNlIEoxOnJldHVybiA1MzY4NzA5MTI7ZGVmYXVsdDpyZXR1cm4gMTZ9ZGVmYXVsdDpyZXR1cm4gMTZ9fXZhciB4bz1udWxsLGlnPW51bGwsenU9bnVsbDtmdW5jdGlvbiBseCgpe2lmKHp1KXJldHVybiB6dTt2YXIgZSx0PWlnLG49dC5sZW5ndGgscixvPSJ2YWx1ZSJpbiB4bz94by52YWx1ZTp4by50ZXh0Q29udGVudCxpPW8ubGVuZ3RoO2ZvcihlPTA7ZTxuJiZ0W2VdPT09b1tlXTtlKyspO3ZhciBsPW4tZTtmb3Iocj0xO3I8PWwmJnRbbi1yXT09PW9baS1yXTtyKyspO3JldHVybiB6dT1vLnNsaWNlKGUsMTxyPzEtcjp2b2lkIDApfWZ1bmN0aW9uIEZ1KGUpe3ZhciB0PWUua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gZT8oZT1lLmNoYXJDb2RlLGU9PT0wJiZ0PT09MTMmJihlPTEzKSk6ZT10LGU9PT0xMCYmKGU9MTMpLDMyPD1lfHxlPT09MTM/ZTowfWZ1bmN0aW9uIGF1KCl7cmV0dXJuITB9ZnVuY3Rpb24gdnYoKXtyZXR1cm4hMX1mdW5jdGlvbiBPbihlKXtmdW5jdGlvbiB0KG4scixvLGksbCl7dGhpcy5fcmVhY3ROYW1lPW4sdGhpcy5fdGFyZ2V0SW5zdD1vLHRoaXMudHlwZT1yLHRoaXMubmF0aXZlRXZlbnQ9aSx0aGlzLnRhcmdldD1sLHRoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgcyBpbiBlKWUuaGFzT3duUHJvcGVydHkocykmJihuPWVbc10sdGhpc1tzXT1uP24oaSk6aVtzXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShpLmRlZmF1bHRQcmV2ZW50ZWQhPW51bGw/aS5kZWZhdWx0UHJldmVudGVkOmkucmV0dXJuVmFsdWU9PT0hMSk/YXU6dnYsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD12dix0aGlzfXJldHVybiBpdCh0LnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5wcmV2ZW50RGVmYXVsdD9uLnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIG4ucmV0dXJuVmFsdWUhPSJ1bmtub3duIiYmKG4ucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWF1KX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5zdG9wUHJvcGFnYXRpb24/bi5zdG9wUHJvcGFnYXRpb24oKTp0eXBlb2Ygbi5jYW5jZWxCdWJibGUhPSJ1bmtub3duIiYmKG4uY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWF1KX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OmF1fSksdH12YXIgemw9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0sbGc9T24oemwpLGphPWl0KHt9LHpsLHt2aWV3OjAsZGV0YWlsOjB9KSxZJD1PbihqYSksb2YsbGYsY3MsbmQ9aXQoe30samEse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6c2csYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVsYXRlZFRhcmdldD09PXZvaWQgMD9lLmZyb21FbGVtZW50PT09ZS5zcmNFbGVtZW50P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQ6ZS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oZSl7cmV0dXJuIm1vdmVtZW50WCJpbiBlP2UubW92ZW1lbnRYOihlIT09Y3MmJihjcyYmZS50eXBlPT09Im1vdXNlbW92ZSI/KG9mPWUuc2NyZWVuWC1jcy5zY3JlZW5YLGxmPWUuc2NyZWVuWS1jcy5zY3JlZW5ZKTpsZj1vZj0wLGNzPWUpLG9mKX0sbW92ZW1lbnRZOmZ1bmN0aW9uKGUpe3JldHVybiJtb3ZlbWVudFkiaW4gZT9lLm1vdmVtZW50WTpsZn19KSx5dj1PbihuZCksWCQ9aXQoe30sbmQse2RhdGFUcmFuc2ZlcjowfSksUSQ9T24oWCQpLEokPWl0KHt9LGphLHtyZWxhdGVkVGFyZ2V0OjB9KSxzZj1PbihKJCksWiQ9aXQoe30semwse2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLHEkPU9uKFokKSxlaz1pdCh7fSx6bCx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSx0az1Pbihlayksbms9aXQoe30semwse2RhdGE6MH0pLHh2PU9uKG5rKSxyaz17RXNjOiJFc2NhcGUiLFNwYWNlYmFyOiIgIixMZWZ0OiJBcnJvd0xlZnQiLFVwOiJBcnJvd1VwIixSaWdodDoiQXJyb3dSaWdodCIsRG93bjoiQXJyb3dEb3duIixEZWw6IkRlbGV0ZSIsV2luOiJPUyIsTWVudToiQ29udGV4dE1lbnUiLEFwcHM6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLE1velByaW50YWJsZUtleToiVW5pZGVudGlmaWVkIn0sb2s9ezg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMjoiQ2xlYXIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ29udHJvbCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2NhcGUiLDMyOiIgIiwzMzoiUGFnZVVwIiwzNDoiUGFnZURvd24iLDM1OiJFbmQiLDM2OiJIb21lIiwzNzoiQXJyb3dMZWZ0IiwzODoiQXJyb3dVcCIsMzk6IkFycm93UmlnaHQiLDQwOiJBcnJvd0Rvd24iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDExMjoiRjEiLDExMzoiRjIiLDExNDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYiLDExODoiRjciLDExOToiRjgiLDEyMDoiRjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIiLDE0NDoiTnVtTG9jayIsMTQ1OiJTY3JvbGxMb2NrIiwyMjQ6Ik1ldGEifSxpaz17QWx0OiJhbHRLZXkiLENvbnRyb2w6ImN0cmxLZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlmdEtleSJ9O2Z1bmN0aW9uIGxrKGUpe3ZhciB0PXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIHQuZ2V0TW9kaWZpZXJTdGF0ZT90LmdldE1vZGlmaWVyU3RhdGUoZSk6KGU9aWtbZV0pPyEhdFtlXTohMX1mdW5jdGlvbiBzZygpe3JldHVybiBsa312YXIgc2s9aXQoe30samEse2tleTpmdW5jdGlvbihlKXtpZihlLmtleSl7dmFyIHQ9cmtbZS5rZXldfHxlLmtleTtpZih0IT09IlVuaWRlbnRpZmllZCIpcmV0dXJuIHR9cmV0dXJuIGUudHlwZT09PSJrZXlwcmVzcyI/KGU9RnUoZSksZT09PTEzPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZShlKSk6ZS50eXBlPT09ImtleWRvd24ifHxlLnR5cGU9PT0ia2V5dXAiP29rW2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTpzZyxjaGFyQ29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImtleXByZXNzIj9GdShlKTowfSxrZXlDb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ia2V5ZG93biJ8fGUudHlwZT09PSJrZXl1cCI/ZS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ia2V5cHJlc3MiP0Z1KGUpOmUudHlwZT09PSJrZXlkb3duInx8ZS50eXBlPT09ImtleXVwIj9lLmtleUNvZGU6MH19KSxhaz1PbihzayksdWs9aXQoe30sbmQse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksd3Y9T24odWspLGNrPWl0KHt9LGphLHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6c2d9KSxkaz1PbihjayksZms9aXQoe30semwse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksaGs9T24oZmspLHBrPWl0KHt9LG5kLHtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWCJpbiBlP2UuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiBlPy1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFZImluIGU/ZS5kZWx0YVk6IndoZWVsRGVsdGFZImluIGU/LWUud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4gZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksZ2s9T24ocGspLG1rPVs5LDEzLDI3LDMyXSxhZz1WciYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LEFzPW51bGw7VnImJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJihBcz1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciB2az1WciYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiFBcyxzeD1WciYmKCFhZ3x8QXMmJjg8QXMmJjExPj1BcyksX3Y9IiAiLFN2PSExO2Z1bmN0aW9uIGF4KGUsdCl7c3dpdGNoKGUpe2Nhc2Uia2V5dXAiOnJldHVybiBtay5pbmRleE9mKHQua2V5Q29kZSkhPT0tMTtjYXNlImtleWRvd24iOnJldHVybiB0LmtleUNvZGUhPT0yMjk7Y2FzZSJrZXlwcmVzcyI6Y2FzZSJtb3VzZWRvd24iOmNhc2UiZm9jdXNvdXQiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIHV4KGUpe3JldHVybiBlPWUuZGV0YWlsLHR5cGVvZiBlPT0ib2JqZWN0IiYmImRhdGEiaW4gZT9lLmRhdGE6bnVsbH12YXIgSmk9ITE7ZnVuY3Rpb24geWsoZSx0KXtzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIHV4KHQpO2Nhc2Uia2V5cHJlc3MiOnJldHVybiB0LndoaWNoIT09MzI/bnVsbDooU3Y9ITAsX3YpO2Nhc2UidGV4dElucHV0IjpyZXR1cm4gZT10LmRhdGEsZT09PV92JiZTdj9udWxsOmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24geGsoZSx0KXtpZihKaSlyZXR1cm4gZT09PSJjb21wb3NpdGlvbmVuZCJ8fCFhZyYmYXgoZSx0KT8oZT1seCgpLHp1PWlnPXhvPW51bGwsSmk9ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoISh0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpfHx0LmN0cmxLZXkmJnQuYWx0S2V5KXtpZih0LmNoYXImJjE8dC5jaGFyLmxlbmd0aClyZXR1cm4gdC5jaGFyO2lmKHQud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIHN4JiZ0LmxvY2FsZSE9PSJrbyI/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIHdrPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1sb2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiBFdihlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT0iaW5wdXQiPyEhd2tbZS50eXBlXTp0PT09InRleHRhcmVhIn1mdW5jdGlvbiBjeChlLHQsbixyKXtCMShyKSx0PXVjKHQsIm9uQ2hhbmdlIiksMDx0Lmxlbmd0aCYmKG49bmV3IGxnKCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLHIpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgTXM9bnVsbCxzYT1udWxsO2Z1bmN0aW9uIF9rKGUpe194KGUsMCl9ZnVuY3Rpb24gcmQoZSl7dmFyIHQ9ZWwoZSk7aWYoTTEodCkpcmV0dXJuIGV9ZnVuY3Rpb24gU2soZSx0KXtpZihlPT09ImNoYW5nZSIpcmV0dXJuIHR9dmFyIGR4PSExO2lmKFZyKXt2YXIgYWY7aWYoVnIpe3ZhciB1Zj0ib25pbnB1dCJpbiBkb2N1bWVudDtpZighdWYpe3ZhciBDdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtDdi5zZXRBdHRyaWJ1dGUoIm9uaW5wdXQiLCJyZXR1cm47IiksdWY9dHlwZW9mIEN2Lm9uaW5wdXQ9PSJmdW5jdGlvbiJ9YWY9dWZ9ZWxzZSBhZj0hMTtkeD1hZiYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiAkdigpe01zJiYoTXMuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLGZ4KSxzYT1Ncz1udWxsKX1mdW5jdGlvbiBmeChlKXtpZihlLnByb3BlcnR5TmFtZT09PSJ2YWx1ZSImJnJkKHNhKSl7dmFyIHQ9W107Y3godCxzYSxlLGVnKGUpKSxWMShfayx0KX19ZnVuY3Rpb24gRWsoZSx0LG4pe2U9PT0iZm9jdXNpbiI/KCR2KCksTXM9dCxzYT1uLE1zLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixmeCkpOmU9PT0iZm9jdXNvdXQiJiYkdigpfWZ1bmN0aW9uIENrKGUpe2lmKGU9PT0ic2VsZWN0aW9uY2hhbmdlInx8ZT09PSJrZXl1cCJ8fGU9PT0ia2V5ZG93biIpcmV0dXJuIHJkKHNhKX1mdW5jdGlvbiAkayhlLHQpe2lmKGU9PT0iY2xpY2siKXJldHVybiByZCh0KX1mdW5jdGlvbiBrayhlLHQpe2lmKGU9PT0iaW5wdXQifHxlPT09ImNoYW5nZSIpcmV0dXJuIHJkKHQpfWZ1bmN0aW9uIGJrKGUsdCl7cmV0dXJuIGU9PT10JiYoZSE9PTB8fDEvZT09PTEvdCl8fGUhPT1lJiZ0IT09dH12YXIgc3I9dHlwZW9mIE9iamVjdC5pcz09ImZ1bmN0aW9uIj9PYmplY3QuaXM6Yms7ZnVuY3Rpb24gYWEoZSx0KXtpZihzcihlLHQpKXJldHVybiEwO2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGwpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSkscj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07aWYoIUdmLmNhbGwodCxvKXx8IXNyKGVbb10sdFtvXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24ga3YoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIGJ2KGUsdCl7dmFyIG49a3YoZSk7ZT0wO2Zvcih2YXIgcjtuOyl7aWYobi5ub2RlVHlwZT09PTMpe2lmKHI9ZStuLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZyPj10KXJldHVybntub2RlOm4sb2Zmc2V0OnQtZX07ZT1yfWU6e2Zvcig7bjspe2lmKG4ubmV4dFNpYmxpbmcpe249bi5uZXh0U2libGluZzticmVhayBlfW49bi5wYXJlbnROb2RlfW49dm9pZCAwfW49a3Yobil9fWZ1bmN0aW9uIGh4KGUsdCl7cmV0dXJuIGUmJnQ/ZT09PXQ/ITA6ZSYmZS5ub2RlVHlwZT09PTM/ITE6dCYmdC5ub2RlVHlwZT09PTM/aHgoZSx0LnBhcmVudE5vZGUpOiJjb250YWlucyJpbiBlP2UuY29udGFpbnModCk6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8hIShlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJjE2KTohMTohMX1mdW5jdGlvbiBweCgpe2Zvcih2YXIgZT13aW5kb3csdD1uYygpO3QgaW5zdGFuY2VvZiBlLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBuPXR5cGVvZiB0LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZj09InN0cmluZyJ9Y2F0Y2h7bj0hMX1pZihuKWU9dC5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7dD1uYyhlLmRvY3VtZW50KX1yZXR1cm4gdH1mdW5jdGlvbiB1ZyhlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQmJih0PT09ImlucHV0IiYmKGUudHlwZT09PSJ0ZXh0Inx8ZS50eXBlPT09InNlYXJjaCJ8fGUudHlwZT09PSJ0ZWwifHxlLnR5cGU9PT0idXJsInx8ZS50eXBlPT09InBhc3N3b3JkIil8fHQ9PT0idGV4dGFyZWEifHxlLmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIil9ZnVuY3Rpb24gVGsoZSl7dmFyIHQ9cHgoKSxuPWUuZm9jdXNlZEVsZW0scj1lLnNlbGVjdGlvblJhbmdlO2lmKHQhPT1uJiZuJiZuLm93bmVyRG9jdW1lbnQmJmh4KG4ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbikpe2lmKHIhPT1udWxsJiZ1ZyhuKSl7aWYodD1yLnN0YXJ0LGU9ci5lbmQsZT09PXZvaWQgMCYmKGU9dCksInNlbGVjdGlvblN0YXJ0ImluIG4pbi5zZWxlY3Rpb25TdGFydD10LG4uc2VsZWN0aW9uRW5kPU1hdGgubWluKGUsbi52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYoZT0odD1uLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmdC5kZWZhdWx0Vmlld3x8d2luZG93LGUuZ2V0U2VsZWN0aW9uKXtlPWUuZ2V0U2VsZWN0aW9uKCk7dmFyIG89bi50ZXh0Q29udGVudC5sZW5ndGgsaT1NYXRoLm1pbihyLnN0YXJ0LG8pO3I9ci5lbmQ9PT12b2lkIDA/aTpNYXRoLm1pbihyLmVuZCxvKSwhZS5leHRlbmQmJmk+ciYmKG89cixyPWksaT1vKSxvPWJ2KG4saSk7dmFyIGw9YnYobixyKTtvJiZsJiYoZS5yYW5nZUNvdW50IT09MXx8ZS5hbmNob3JOb2RlIT09by5ub2RlfHxlLmFuY2hvck9mZnNldCE9PW8ub2Zmc2V0fHxlLmZvY3VzTm9kZSE9PWwubm9kZXx8ZS5mb2N1c09mZnNldCE9PWwub2Zmc2V0KSYmKHQ9dC5jcmVhdGVSYW5nZSgpLHQuc2V0U3RhcnQoby5ub2RlLG8ub2Zmc2V0KSxlLnJlbW92ZUFsbFJhbmdlcygpLGk+cj8oZS5hZGRSYW5nZSh0KSxlLmV4dGVuZChsLm5vZGUsbC5vZmZzZXQpKToodC5zZXRFbmQobC5ub2RlLGwub2Zmc2V0KSxlLmFkZFJhbmdlKHQpKSl9fWZvcih0PVtdLGU9bjtlPWUucGFyZW50Tm9kZTspZS5ub2RlVHlwZT09PTEmJnQucHVzaCh7ZWxlbWVudDplLGxlZnQ6ZS5zY3JvbGxMZWZ0LHRvcDplLnNjcm9sbFRvcH0pO2Zvcih0eXBlb2Ygbi5mb2N1cz09ImZ1bmN0aW9uIiYmbi5mb2N1cygpLG49MDtuPHQubGVuZ3RoO24rKyllPXRbbl0sZS5lbGVtZW50LnNjcm9sbExlZnQ9ZS5sZWZ0LGUuZWxlbWVudC5zY3JvbGxUb3A9ZS50b3B9fXZhciBOaz1WciYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxaaT1udWxsLGZoPW51bGwsTHM9bnVsbCxoaD0hMTtmdW5jdGlvbiBUdihlLHQsbil7dmFyIHI9bi53aW5kb3c9PT1uP24uZG9jdW1lbnQ6bi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQ7aGh8fFppPT1udWxsfHxaaSE9PW5jKHIpfHwocj1aaSwic2VsZWN0aW9uU3RhcnQiaW4gciYmdWcocik/cj17c3RhcnQ6ci5zZWxlY3Rpb25TdGFydCxlbmQ6ci5zZWxlY3Rpb25FbmR9OihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxyPXthbmNob3JOb2RlOnIuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9KSxMcyYmYWEoTHMscil8fChMcz1yLHI9dWMoZmgsIm9uU2VsZWN0IiksMDxyLmxlbmd0aCYmKHQ9bmV3IGxnKCJvblNlbGVjdCIsInNlbGVjdCIsbnVsbCx0LG4pLGUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6cn0pLHQudGFyZ2V0PVppKSkpfWZ1bmN0aW9uIHV1KGUsdCl7dmFyIG49e307cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJDYXNlKCksblsiV2Via2l0IitlXT0id2Via2l0Iit0LG5bIk1veiIrZV09Im1veiIrdCxufXZhciBxaT17YW5pbWF0aW9uZW5kOnV1KCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246dXUoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0OnV1KCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6dXUoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LGNmPXt9LGd4PXt9O1ZyJiYoZ3g9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBxaS5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBxaS5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBxaS5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgcWkudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtmdW5jdGlvbiBvZChlKXtpZihjZltlXSlyZXR1cm4gY2ZbZV07aWYoIXFpW2VdKXJldHVybiBlO3ZhciB0PXFpW2VdLG47Zm9yKG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pJiZuIGluIGd4KXJldHVybiBjZltlXT10W25dO3JldHVybiBlfXZhciBteD1vZCgiYW5pbWF0aW9uZW5kIiksdng9b2QoImFuaW1hdGlvbml0ZXJhdGlvbiIpLHl4PW9kKCJhbmltYXRpb25zdGFydCIpLHh4PW9kKCJ0cmFuc2l0aW9uZW5kIiksd3g9bmV3IE1hcCxOdj0iYWJvcnQgYXV4Q2xpY2sgY2FuY2VsIGNhblBsYXkgY2FuUGxheVRocm91Z2ggY2xpY2sgY2xvc2UgY29udGV4dE1lbnUgY29weSBjdXQgZHJhZyBkcmFnRW5kIGRyYWdFbnRlciBkcmFnRXhpdCBkcmFnTGVhdmUgZHJhZ092ZXIgZHJhZ1N0YXJ0IGRyb3AgZHVyYXRpb25DaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgZ290UG9pbnRlckNhcHR1cmUgaW5wdXQgaW52YWxpZCBrZXlEb3duIGtleVByZXNzIGtleVVwIGxvYWQgbG9hZGVkRGF0YSBsb2FkZWRNZXRhZGF0YSBsb2FkU3RhcnQgbG9zdFBvaW50ZXJDYXB0dXJlIG1vdXNlRG93biBtb3VzZU1vdmUgbW91c2VPdXQgbW91c2VPdmVyIG1vdXNlVXAgcGFzdGUgcGF1c2UgcGxheSBwbGF5aW5nIHBvaW50ZXJDYW5jZWwgcG9pbnRlckRvd24gcG9pbnRlck1vdmUgcG9pbnRlck91dCBwb2ludGVyT3ZlciBwb2ludGVyVXAgcHJvZ3Jlc3MgcmF0ZUNoYW5nZSByZXNldCByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdWJtaXQgc3VzcGVuZCB0aW1lVXBkYXRlIHRvdWNoQ2FuY2VsIHRvdWNoRW5kIHRvdWNoU3RhcnQgdm9sdW1lQ2hhbmdlIHNjcm9sbCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWwiLnNwbGl0KCIgIik7ZnVuY3Rpb24gSG8oZSx0KXt3eC5zZXQoZSx0KSxDaSh0LFtlXSl9Zm9yKHZhciBkZj0wO2RmPE52Lmxlbmd0aDtkZisrKXt2YXIgZmY9TnZbZGZdLFJrPWZmLnRvTG93ZXJDYXNlKCksUGs9ZmZbMF0udG9VcHBlckNhc2UoKStmZi5zbGljZSgxKTtIbyhSaywib24iK1BrKX1IbyhteCwib25BbmltYXRpb25FbmQiKTtIbyh2eCwib25BbmltYXRpb25JdGVyYXRpb24iKTtIbyh5eCwib25BbmltYXRpb25TdGFydCIpO0hvKCJkYmxjbGljayIsIm9uRG91YmxlQ2xpY2siKTtIbygiZm9jdXNpbiIsIm9uRm9jdXMiKTtIbygiZm9jdXNvdXQiLCJvbkJsdXIiKTtIbyh4eCwib25UcmFuc2l0aW9uRW5kIik7U2woIm9uTW91c2VFbnRlciIsWyJtb3VzZW91dCIsIm1vdXNlb3ZlciJdKTtTbCgib25Nb3VzZUxlYXZlIixbIm1vdXNlb3V0IiwibW91c2VvdmVyIl0pO1NsKCJvblBvaW50ZXJFbnRlciIsWyJwb2ludGVyb3V0IiwicG9pbnRlcm92ZXIiXSk7U2woIm9uUG9pbnRlckxlYXZlIixbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdKTtDaSgib25DaGFuZ2UiLCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKSk7Q2koIm9uU2VsZWN0IiwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlIi5zcGxpdCgiICIpKTtDaSgib25CZWZvcmVJbnB1dCIsWyJjb21wb3NpdGlvbmVuZCIsImtleXByZXNzIiwidGV4dElucHV0IiwicGFzdGUiXSk7Q2koIm9uQ29tcG9zaXRpb25FbmQiLCJjb21wb3NpdGlvbmVuZCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7Q2koIm9uQ29tcG9zaXRpb25TdGFydCIsImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO0NpKCJvbkNvbXBvc2l0aW9uVXBkYXRlIiwiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO3ZhciBrcz0iYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmciLnNwbGl0KCIgIiksT2s9bmV3IFNldCgiY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgdG9nZ2xlIi5zcGxpdCgiICIpLmNvbmNhdChrcykpO2Z1bmN0aW9uIFJ2KGUsdCxuKXt2YXIgcj1lLnR5cGV8fCJ1bmtub3duLWV2ZW50IjtlLmN1cnJlbnRUYXJnZXQ9bixSJChyLHQsdm9pZCAwLGUpLGUuY3VycmVudFRhcmdldD1udWxsfWZ1bmN0aW9uIF94KGUsdCl7dD0odCY0KSE9PTA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0sbz1yLmV2ZW50O3I9ci5saXN0ZW5lcnM7ZTp7dmFyIGk9dm9pZCAwO2lmKHQpZm9yKHZhciBsPXIubGVuZ3RoLTE7MDw9bDtsLS0pe3ZhciBzPXJbbF0sYT1zLmluc3RhbmNlLHU9cy5jdXJyZW50VGFyZ2V0O2lmKHM9cy5saXN0ZW5lcixhIT09aSYmby5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7UnYobyxzLHUpLGk9YX1lbHNlIGZvcihsPTA7bDxyLmxlbmd0aDtsKyspe2lmKHM9cltsXSxhPXMuaW5zdGFuY2UsdT1zLmN1cnJlbnRUYXJnZXQscz1zLmxpc3RlbmVyLGEhPT1pJiZvLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgZTtSdihvLHMsdSksaT1hfX19aWYob2MpdGhyb3cgZT1haCxvYz0hMSxhaD1udWxsLGV9ZnVuY3Rpb24gVmUoZSx0KXt2YXIgbj10W3loXTtuPT09dm9pZCAwJiYobj10W3loXT1uZXcgU2V0KTt2YXIgcj1lKyJfX2J1YmJsZSI7bi5oYXMocil8fChTeCh0LGUsMiwhMSksbi5hZGQocikpfWZ1bmN0aW9uIGhmKGUsdCxuKXt2YXIgcj0wO3QmJihyfD00KSxTeChuLGUscix0KX12YXIgY3U9Il9yZWFjdExpc3RlbmluZyIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7ZnVuY3Rpb24gdWEoZSl7aWYoIWVbY3VdKXtlW2N1XT0hMCxOMS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24hPT0ic2VsZWN0aW9uY2hhbmdlIiYmKE9rLmhhcyhuKXx8aGYobiwhMSxlKSxoZihuLCEwLGUpKX0pO3ZhciB0PWUubm9kZVR5cGU9PT05P2U6ZS5vd25lckRvY3VtZW50O3Q9PT1udWxsfHx0W2N1XXx8KHRbY3VdPSEwLGhmKCJzZWxlY3Rpb25jaGFuZ2UiLCExLHQpKX19ZnVuY3Rpb24gU3goZSx0LG4scil7c3dpdGNoKGl4KHQpKXtjYXNlIDE6dmFyIG89SyQ7YnJlYWs7Y2FzZSA0Om89RyQ7YnJlYWs7ZGVmYXVsdDpvPW9nfW49by5iaW5kKG51bGwsdCxuLGUpLG89dm9pZCAwLCFzaHx8dCE9PSJ0b3VjaHN0YXJ0IiYmdCE9PSJ0b3VjaG1vdmUiJiZ0IT09IndoZWVsInx8KG89ITApLHI/byE9PXZvaWQgMD9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLHtjYXB0dXJlOiEwLHBhc3NpdmU6b30pOmUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITApOm8hPT12b2lkIDA/ZS5hZGRFdmVudExpc3RlbmVyKHQsbix7cGFzc2l2ZTpvfSk6ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMSl9ZnVuY3Rpb24gcGYoZSx0LG4scixvKXt2YXIgaT1yO2lmKCEodCYxKSYmISh0JjIpJiZyIT09bnVsbCllOmZvcig7Oyl7aWYocj09PW51bGwpcmV0dXJuO3ZhciBsPXIudGFnO2lmKGw9PT0zfHxsPT09NCl7dmFyIHM9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztpZihzPT09b3x8cy5ub2RlVHlwZT09PTgmJnMucGFyZW50Tm9kZT09PW8pYnJlYWs7aWYobD09PTQpZm9yKGw9ci5yZXR1cm47bCE9PW51bGw7KXt2YXIgYT1sLnRhZztpZigoYT09PTN8fGE9PT00KSYmKGE9bC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxhPT09b3x8YS5ub2RlVHlwZT09PTgmJmEucGFyZW50Tm9kZT09PW8pKXJldHVybjtsPWwucmV0dXJufWZvcig7cyE9PW51bGw7KXtpZihsPXJpKHMpLGw9PT1udWxsKXJldHVybjtpZihhPWwudGFnLGE9PT01fHxhPT09Nil7cj1pPWw7Y29udGludWUgZX1zPXMucGFyZW50Tm9kZX19cj1yLnJldHVybn1WMShmdW5jdGlvbigpe3ZhciB1PWksYz1lZyhuKSxkPVtdO2U6e3ZhciBmPXd4LmdldChlKTtpZihmIT09dm9pZCAwKXt2YXIgaD1sZyxtPWU7c3dpdGNoKGUpe2Nhc2Uia2V5cHJlc3MiOmlmKEZ1KG4pPT09MClicmVhayBlO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6aD1hazticmVhaztjYXNlImZvY3VzaW4iOm09ImZvY3VzIixoPXNmO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOm09ImJsdXIiLGg9c2Y7YnJlYWs7Y2FzZSJiZWZvcmVibHVyIjpjYXNlImFmdGVyYmx1ciI6aD1zZjticmVhaztjYXNlImNsaWNrIjppZihuLmJ1dHRvbj09PTIpYnJlYWsgZTtjYXNlImF1eGNsaWNrIjpjYXNlImRibGNsaWNrIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZW1vdmUiOmNhc2UibW91c2V1cCI6Y2FzZSJtb3VzZW91dCI6Y2FzZSJtb3VzZW92ZXIiOmNhc2UiY29udGV4dG1lbnUiOmg9eXY7YnJlYWs7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbmQiOmNhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdleGl0IjpjYXNlImRyYWdsZWF2ZSI6Y2FzZSJkcmFnb3ZlciI6Y2FzZSJkcmFnc3RhcnQiOmNhc2UiZHJvcCI6aD1RJDticmVhaztjYXNlInRvdWNoY2FuY2VsIjpjYXNlInRvdWNoZW5kIjpjYXNlInRvdWNobW92ZSI6Y2FzZSJ0b3VjaHN0YXJ0IjpoPWRrO2JyZWFrO2Nhc2UgbXg6Y2FzZSB2eDpjYXNlIHl4Omg9cSQ7YnJlYWs7Y2FzZSB4eDpoPWhrO2JyZWFrO2Nhc2Uic2Nyb2xsIjpoPVkkO2JyZWFrO2Nhc2Uid2hlZWwiOmg9Z2s7YnJlYWs7Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJwYXN0ZSI6aD10azticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJwb2ludGVyY2FuY2VsIjpjYXNlInBvaW50ZXJkb3duIjpjYXNlInBvaW50ZXJtb3ZlIjpjYXNlInBvaW50ZXJvdXQiOmNhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcnVwIjpoPXd2fXZhciBnPSh0JjQpIT09MCxfPSFnJiZlPT09InNjcm9sbCIsdj1nP2YhPT1udWxsP2YrIkNhcHR1cmUiOm51bGw6ZjtnPVtdO2Zvcih2YXIgeT11LHg7eSE9PW51bGw7KXt4PXk7dmFyIFM9eC5zdGF0ZU5vZGU7aWYoeC50YWc9PT01JiZTIT09bnVsbCYmKHg9Uyx2IT09bnVsbCYmKFM9cmEoeSx2KSxTIT1udWxsJiZnLnB1c2goY2EoeSxTLHgpKSkpLF8pYnJlYWs7eT15LnJldHVybn0wPGcubGVuZ3RoJiYoZj1uZXcgaChmLG0sbnVsbCxuLGMpLGQucHVzaCh7ZXZlbnQ6ZixsaXN0ZW5lcnM6Z30pKX19aWYoISh0JjcpKXtlOntpZihmPWU9PT0ibW91c2VvdmVyInx8ZT09PSJwb2ludGVyb3ZlciIsaD1lPT09Im1vdXNlb3V0Inx8ZT09PSJwb2ludGVyb3V0IixmJiZuIT09aWgmJihtPW4ucmVsYXRlZFRhcmdldHx8bi5mcm9tRWxlbWVudCkmJihyaShtKXx8bVtLcl0pKWJyZWFrIGU7aWYoKGh8fGYpJiYoZj1jLndpbmRvdz09PWM/YzooZj1jLm93bmVyRG9jdW1lbnQpP2YuZGVmYXVsdFZpZXd8fGYucGFyZW50V2luZG93OndpbmRvdyxoPyhtPW4ucmVsYXRlZFRhcmdldHx8bi50b0VsZW1lbnQsaD11LG09bT9yaShtKTpudWxsLG0hPT1udWxsJiYoXz0kaShtKSxtIT09X3x8bS50YWchPT01JiZtLnRhZyE9PTYpJiYobT1udWxsKSk6KGg9bnVsbCxtPXUpLGghPT1tKSl7aWYoZz15dixTPSJvbk1vdXNlTGVhdmUiLHY9Im9uTW91c2VFbnRlciIseT0ibW91c2UiLChlPT09InBvaW50ZXJvdXQifHxlPT09InBvaW50ZXJvdmVyIikmJihnPXd2LFM9Im9uUG9pbnRlckxlYXZlIix2PSJvblBvaW50ZXJFbnRlciIseT0icG9pbnRlciIpLF89aD09bnVsbD9mOmVsKGgpLHg9bT09bnVsbD9mOmVsKG0pLGY9bmV3IGcoUyx5KyJsZWF2ZSIsaCxuLGMpLGYudGFyZ2V0PV8sZi5yZWxhdGVkVGFyZ2V0PXgsUz1udWxsLHJpKGMpPT09dSYmKGc9bmV3IGcodix5KyJlbnRlciIsbSxuLGMpLGcudGFyZ2V0PXgsZy5yZWxhdGVkVGFyZ2V0PV8sUz1nKSxfPVMsaCYmbSl0Ontmb3IoZz1oLHY9bSx5PTAseD1nO3g7eD1qaSh4KSl5Kys7Zm9yKHg9MCxTPXY7UztTPWppKFMpKXgrKztmb3IoOzA8eS14OylnPWppKGcpLHktLTtmb3IoOzA8eC15Oyl2PWppKHYpLHgtLTtmb3IoO3ktLTspe2lmKGc9PT12fHx2IT09bnVsbCYmZz09PXYuYWx0ZXJuYXRlKWJyZWFrIHQ7Zz1qaShnKSx2PWppKHYpfWc9bnVsbH1lbHNlIGc9bnVsbDtoIT09bnVsbCYmUHYoZCxmLGgsZywhMSksbSE9PW51bGwmJl8hPT1udWxsJiZQdihkLF8sbSxnLCEwKX19ZTp7aWYoZj11P2VsKHUpOndpbmRvdyxoPWYubm9kZU5hbWUmJmYubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxoPT09InNlbGVjdCJ8fGg9PT0iaW5wdXQiJiZmLnR5cGU9PT0iZmlsZSIpdmFyIGs9U2s7ZWxzZSBpZihFdihmKSlpZihkeClrPWtrO2Vsc2V7az1Dazt2YXIgVD1Fa31lbHNlKGg9Zi5ub2RlTmFtZSkmJmgudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJihmLnR5cGU9PT0iY2hlY2tib3gifHxmLnR5cGU9PT0icmFkaW8iKSYmKGs9JGspO2lmKGsmJihrPWsoZSx1KSkpe2N4KGQsayxuLGMpO2JyZWFrIGV9VCYmVChlLGYsdSksZT09PSJmb2N1c291dCImJihUPWYuX3dyYXBwZXJTdGF0ZSkmJlQuY29udHJvbGxlZCYmZi50eXBlPT09Im51bWJlciImJmVoKGYsIm51bWJlciIsZi52YWx1ZSl9c3dpdGNoKFQ9dT9lbCh1KTp3aW5kb3csZSl7Y2FzZSJmb2N1c2luIjooRXYoVCl8fFQuY29udGVudEVkaXRhYmxlPT09InRydWUiKSYmKFppPVQsZmg9dSxMcz1udWxsKTticmVhaztjYXNlImZvY3Vzb3V0IjpMcz1maD1aaT1udWxsO2JyZWFrO2Nhc2UibW91c2Vkb3duIjpoaD0hMDticmVhaztjYXNlImNvbnRleHRtZW51IjpjYXNlIm1vdXNldXAiOmNhc2UiZHJhZ2VuZCI6aGg9ITEsVHYoZCxuLGMpO2JyZWFrO2Nhc2Uic2VsZWN0aW9uY2hhbmdlIjppZihOaylicmVhaztjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOlR2KGQsbixjKX12YXIgYjtpZihhZyllOntzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbnN0YXJ0Ijp2YXIgTj0ib25Db21wb3NpdGlvblN0YXJ0IjticmVhayBlO2Nhc2UiY29tcG9zaXRpb25lbmQiOk49Im9uQ29tcG9zaXRpb25FbmQiO2JyZWFrIGU7Y2FzZSJjb21wb3NpdGlvbnVwZGF0ZSI6Tj0ib25Db21wb3NpdGlvblVwZGF0ZSI7YnJlYWsgZX1OPXZvaWQgMH1lbHNlIEppP2F4KGUsbikmJihOPSJvbkNvbXBvc2l0aW9uRW5kIik6ZT09PSJrZXlkb3duIiYmbi5rZXlDb2RlPT09MjI5JiYoTj0ib25Db21wb3NpdGlvblN0YXJ0Iik7TiYmKHN4JiZuLmxvY2FsZSE9PSJrbyImJihKaXx8TiE9PSJvbkNvbXBvc2l0aW9uU3RhcnQiP049PT0ib25Db21wb3NpdGlvbkVuZCImJkppJiYoYj1seCgpKTooeG89YyxpZz0idmFsdWUiaW4geG8/eG8udmFsdWU6eG8udGV4dENvbnRlbnQsSmk9ITApKSxUPXVjKHUsTiksMDxULmxlbmd0aCYmKE49bmV3IHh2KE4sZSxudWxsLG4sYyksZC5wdXNoKHtldmVudDpOLGxpc3RlbmVyczpUfSksYj9OLmRhdGE9YjooYj11eChuKSxiIT09bnVsbCYmKE4uZGF0YT1iKSkpKSwoYj12az95ayhlLG4pOnhrKGUsbikpJiYodT11Yyh1LCJvbkJlZm9yZUlucHV0IiksMDx1Lmxlbmd0aCYmKGM9bmV3IHh2KCJvbkJlZm9yZUlucHV0IiwiYmVmb3JlaW5wdXQiLG51bGwsbixjKSxkLnB1c2goe2V2ZW50OmMsbGlzdGVuZXJzOnV9KSxjLmRhdGE9YikpfV94KGQsdCl9KX1mdW5jdGlvbiBjYShlLHQsbil7cmV0dXJue2luc3RhbmNlOmUsbGlzdGVuZXI6dCxjdXJyZW50VGFyZ2V0Om59fWZ1bmN0aW9uIHVjKGUsdCl7Zm9yKHZhciBuPXQrIkNhcHR1cmUiLHI9W107ZSE9PW51bGw7KXt2YXIgbz1lLGk9by5zdGF0ZU5vZGU7by50YWc9PT01JiZpIT09bnVsbCYmKG89aSxpPXJhKGUsbiksaSE9bnVsbCYmci51bnNoaWZ0KGNhKGUsaSxvKSksaT1yYShlLHQpLGkhPW51bGwmJnIucHVzaChjYShlLGksbykpKSxlPWUucmV0dXJufXJldHVybiByfWZ1bmN0aW9uIGppKGUpe2lmKGU9PT1udWxsKXJldHVybiBudWxsO2RvIGU9ZS5yZXR1cm47d2hpbGUoZSYmZS50YWchPT01KTtyZXR1cm4gZXx8bnVsbH1mdW5jdGlvbiBQdihlLHQsbixyLG8pe2Zvcih2YXIgaT10Ll9yZWFjdE5hbWUsbD1bXTtuIT09bnVsbCYmbiE9PXI7KXt2YXIgcz1uLGE9cy5hbHRlcm5hdGUsdT1zLnN0YXRlTm9kZTtpZihhIT09bnVsbCYmYT09PXIpYnJlYWs7cy50YWc9PT01JiZ1IT09bnVsbCYmKHM9dSxvPyhhPXJhKG4saSksYSE9bnVsbCYmbC51bnNoaWZ0KGNhKG4sYSxzKSkpOm98fChhPXJhKG4saSksYSE9bnVsbCYmbC5wdXNoKGNhKG4sYSxzKSkpKSxuPW4ucmV0dXJufWwubGVuZ3RoIT09MCYmZS5wdXNoKHtldmVudDp0LGxpc3RlbmVyczpsfSl9dmFyIEFrPS9cclxuPy9nLE1rPS9cdTAwMDB8XHVGRkZEL2c7ZnVuY3Rpb24gT3YoZSl7cmV0dXJuKHR5cGVvZiBlPT0ic3RyaW5nIj9lOiIiK2UpLnJlcGxhY2UoQWssYApgKS5yZXBsYWNlKE1rLCIiKX1mdW5jdGlvbiBkdShlLHQsbil7aWYodD1Pdih0KSxPdihlKSE9PXQmJm4pdGhyb3cgRXJyb3IoVSg0MjUpKX1mdW5jdGlvbiBjYygpe312YXIgcGg9bnVsbCxnaD1udWxsO2Z1bmN0aW9uIG1oKGUsdCl7cmV0dXJuIGU9PT0idGV4dGFyZWEifHxlPT09Im5vc2NyaXB0Inx8dHlwZW9mIHQuY2hpbGRyZW49PSJzdHJpbmcifHx0eXBlb2YgdC5jaGlsZHJlbj09Im51bWJlciJ8fHR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPT0ib2JqZWN0IiYmdC5kYW5nZXJvdXNseVNldElubmVySFRNTCE9PW51bGwmJnQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sIT1udWxsfXZhciB2aD10eXBlb2Ygc2V0VGltZW91dD09ImZ1bmN0aW9uIj9zZXRUaW1lb3V0OnZvaWQgMCxMaz10eXBlb2YgY2xlYXJUaW1lb3V0PT0iZnVuY3Rpb24iP2NsZWFyVGltZW91dDp2b2lkIDAsQXY9dHlwZW9mIFByb21pc2U9PSJmdW5jdGlvbiI/UHJvbWlzZTp2b2lkIDAsRGs9dHlwZW9mIHF1ZXVlTWljcm90YXNrPT0iZnVuY3Rpb24iP3F1ZXVlTWljcm90YXNrOnR5cGVvZiBBdjwidSI/ZnVuY3Rpb24oZSl7cmV0dXJuIEF2LnJlc29sdmUobnVsbCkudGhlbihlKS5jYXRjaChJayl9OnZoO2Z1bmN0aW9uIElrKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9ZnVuY3Rpb24gZ2YoZSx0KXt2YXIgbj10LHI9MDtkb3t2YXIgbz1uLm5leHRTaWJsaW5nO2lmKGUucmVtb3ZlQ2hpbGQobiksbyYmby5ub2RlVHlwZT09PTgpaWYobj1vLmRhdGEsbj09PSIvJCIpe2lmKHI9PT0wKXtlLnJlbW92ZUNoaWxkKG8pLGxhKHQpO3JldHVybn1yLS19ZWxzZSBuIT09IiQiJiZuIT09IiQ/IiYmbiE9PSIkISJ8fHIrKztuPW99d2hpbGUobik7bGEodCl9ZnVuY3Rpb24ga28oZSl7Zm9yKDtlIT1udWxsO2U9ZS5uZXh0U2libGluZyl7dmFyIHQ9ZS5ub2RlVHlwZTtpZih0PT09MXx8dD09PTMpYnJlYWs7aWYodD09PTgpe2lmKHQ9ZS5kYXRhLHQ9PT0iJCJ8fHQ9PT0iJCEifHx0PT09IiQ/IilicmVhaztpZih0PT09Ii8kIilyZXR1cm4gbnVsbH19cmV0dXJuIGV9ZnVuY3Rpb24gTXYoZSl7ZT1lLnByZXZpb3VzU2libGluZztmb3IodmFyIHQ9MDtlOyl7aWYoZS5ub2RlVHlwZT09PTgpe3ZhciBuPWUuZGF0YTtpZihuPT09IiQifHxuPT09IiQhInx8bj09PSIkPyIpe2lmKHQ9PT0wKXJldHVybiBlO3QtLX1lbHNlIG49PT0iLyQiJiZ0Kyt9ZT1lLnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH12YXIgRmw9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksdnI9Il9fcmVhY3RGaWJlciQiK0ZsLGRhPSJfX3JlYWN0UHJvcHMkIitGbCxLcj0iX19yZWFjdENvbnRhaW5lciQiK0ZsLHloPSJfX3JlYWN0RXZlbnRzJCIrRmwsams9Il9fcmVhY3RMaXN0ZW5lcnMkIitGbCx6az0iX19yZWFjdEhhbmRsZXMkIitGbDtmdW5jdGlvbiByaShlKXt2YXIgdD1lW3ZyXTtpZih0KXJldHVybiB0O2Zvcih2YXIgbj1lLnBhcmVudE5vZGU7bjspe2lmKHQ9bltLcl18fG5bdnJdKXtpZihuPXQuYWx0ZXJuYXRlLHQuY2hpbGQhPT1udWxsfHxuIT09bnVsbCYmbi5jaGlsZCE9PW51bGwpZm9yKGU9TXYoZSk7ZSE9PW51bGw7KXtpZihuPWVbdnJdKXJldHVybiBuO2U9TXYoZSl9cmV0dXJuIHR9ZT1uLG49ZS5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIHphKGUpe3JldHVybiBlPWVbdnJdfHxlW0tyXSwhZXx8ZS50YWchPT01JiZlLnRhZyE9PTYmJmUudGFnIT09MTMmJmUudGFnIT09Mz9udWxsOmV9ZnVuY3Rpb24gZWwoZSl7aWYoZS50YWc9PT01fHxlLnRhZz09PTYpcmV0dXJuIGUuc3RhdGVOb2RlO3Rocm93IEVycm9yKFUoMzMpKX1mdW5jdGlvbiBpZChlKXtyZXR1cm4gZVtkYV18fG51bGx9dmFyIHhoPVtdLHRsPS0xO2Z1bmN0aW9uIFZvKGUpe3JldHVybntjdXJyZW50OmV9fWZ1bmN0aW9uIFhlKGUpezA+dGx8fChlLmN1cnJlbnQ9eGhbdGxdLHhoW3RsXT1udWxsLHRsLS0pfWZ1bmN0aW9uIEJlKGUsdCl7dGwrKyx4aFt0bF09ZS5jdXJyZW50LGUuY3VycmVudD10fXZhciBMbz17fSxHdD1WbyhMbykscG49Vm8oITEpLGhpPUxvO2Z1bmN0aW9uIEVsKGUsdCl7dmFyIG49ZS50eXBlLmNvbnRleHRUeXBlcztpZighbilyZXR1cm4gTG87dmFyIHI9ZS5zdGF0ZU5vZGU7aWYociYmci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PT09dClyZXR1cm4gci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDt2YXIgbz17fSxpO2ZvcihpIGluIG4pb1tpXT10W2ldO3JldHVybiByJiYoZT1lLnN0YXRlTm9kZSxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9dCxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PW8pLG99ZnVuY3Rpb24gZ24oZSl7cmV0dXJuIGU9ZS5jaGlsZENvbnRleHRUeXBlcyxlIT1udWxsfWZ1bmN0aW9uIGRjKCl7WGUocG4pLFhlKEd0KX1mdW5jdGlvbiBMdihlLHQsbil7aWYoR3QuY3VycmVudCE9PUxvKXRocm93IEVycm9yKFUoMTY4KSk7QmUoR3QsdCksQmUocG4sbil9ZnVuY3Rpb24gRXgoZSx0LG4pe3ZhciByPWUuc3RhdGVOb2RlO2lmKHQ9dC5jaGlsZENvbnRleHRUeXBlcyx0eXBlb2Ygci5nZXRDaGlsZENvbnRleHQhPSJmdW5jdGlvbiIpcmV0dXJuIG47cj1yLmdldENoaWxkQ29udGV4dCgpO2Zvcih2YXIgbyBpbiByKWlmKCEobyBpbiB0KSl0aHJvdyBFcnJvcihVKDEwOCxFJChlKXx8IlVua25vd24iLG8pKTtyZXR1cm4gaXQoe30sbixyKX1mdW5jdGlvbiBmYyhlKXtyZXR1cm4gZT0oZT1lLnN0YXRlTm9kZSkmJmUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHR8fExvLGhpPUd0LmN1cnJlbnQsQmUoR3QsZSksQmUocG4scG4uY3VycmVudCksITB9ZnVuY3Rpb24gRHYoZSx0LG4pe3ZhciByPWUuc3RhdGVOb2RlO2lmKCFyKXRocm93IEVycm9yKFUoMTY5KSk7bj8oZT1FeChlLHQsaGkpLHIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ9ZSxYZShwbiksWGUoR3QpLEJlKEd0LGUpKTpYZShwbiksQmUocG4sbil9dmFyIHpyPW51bGwsbGQ9ITEsbWY9ITE7ZnVuY3Rpb24gQ3goZSl7enI9PT1udWxsP3pyPVtlXTp6ci5wdXNoKGUpfWZ1bmN0aW9uIEZrKGUpe2xkPSEwLEN4KGUpfWZ1bmN0aW9uIEtvKCl7aWYoIW1mJiZ6ciE9PW51bGwpe21mPSEwO3ZhciBlPTAsdD1NZTt0cnl7dmFyIG49enI7Zm9yKE1lPTE7ZTxuLmxlbmd0aDtlKyspe3ZhciByPW5bZV07ZG8gcj1yKCEwKTt3aGlsZShyIT09bnVsbCl9enI9bnVsbCxsZD0hMX1jYXRjaChvKXt0aHJvdyB6ciE9PW51bGwmJih6cj16ci5zbGljZShlKzEpKSxYMSh0ZyxLbyksb31maW5hbGx5e01lPXQsbWY9ITF9fXJldHVybiBudWxsfXZhciBubD1bXSxybD0wLGhjPW51bGwscGM9MCxEbj1bXSxJbj0wLHBpPW51bGwsV3I9MSxVcj0iIjtmdW5jdGlvbiBxbyhlLHQpe25sW3JsKytdPXBjLG5sW3JsKytdPWhjLGhjPWUscGM9dH1mdW5jdGlvbiAkeChlLHQsbil7RG5bSW4rK109V3IsRG5bSW4rK109VXIsRG5bSW4rK109cGkscGk9ZTt2YXIgcj1XcjtlPVVyO3ZhciBvPTMyLWlyKHIpLTE7ciY9figxPDxvKSxuKz0xO3ZhciBpPTMyLWlyKHQpK287aWYoMzA8aSl7dmFyIGw9by1vJTU7aT0ociYoMTw8bCktMSkudG9TdHJpbmcoMzIpLHI+Pj1sLG8tPWwsV3I9MTw8MzItaXIodCkrb3xuPDxvfHIsVXI9aStlfWVsc2UgV3I9MTw8aXxuPDxvfHIsVXI9ZX1mdW5jdGlvbiBjZyhlKXtlLnJldHVybiE9PW51bGwmJihxbyhlLDEpLCR4KGUsMSwwKSl9ZnVuY3Rpb24gZGcoZSl7Zm9yKDtlPT09aGM7KWhjPW5sWy0tcmxdLG5sW3JsXT1udWxsLHBjPW5sWy0tcmxdLG5sW3JsXT1udWxsO2Zvcig7ZT09PXBpOylwaT1EblstLUluXSxEbltJbl09bnVsbCxVcj1EblstLUluXSxEbltJbl09bnVsbCxXcj1EblstLUluXSxEbltJbl09bnVsbH12YXIgQ249bnVsbCxFbj1udWxsLFFlPSExLG5yPW51bGw7ZnVuY3Rpb24ga3goZSx0KXt2YXIgbj1Gbig1LG51bGwsbnVsbCwwKTtuLmVsZW1lbnRUeXBlPSJERUxFVEVEIixuLnN0YXRlTm9kZT10LG4ucmV0dXJuPWUsdD1lLmRlbGV0aW9ucyx0PT09bnVsbD8oZS5kZWxldGlvbnM9W25dLGUuZmxhZ3N8PTE2KTp0LnB1c2gobil9ZnVuY3Rpb24gSXYoZSx0KXtzd2l0Y2goZS50YWcpe2Nhc2UgNTp2YXIgbj1lLnR5cGU7cmV0dXJuIHQ9dC5ub2RlVHlwZSE9PTF8fG4udG9Mb3dlckNhc2UoKSE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9udWxsOnQsdCE9PW51bGw/KGUuc3RhdGVOb2RlPXQsQ249ZSxFbj1rbyh0LmZpcnN0Q2hpbGQpLCEwKTohMTtjYXNlIDY6cmV0dXJuIHQ9ZS5wZW5kaW5nUHJvcHM9PT0iInx8dC5ub2RlVHlwZSE9PTM/bnVsbDp0LHQhPT1udWxsPyhlLnN0YXRlTm9kZT10LENuPWUsRW49bnVsbCwhMCk6ITE7Y2FzZSAxMzpyZXR1cm4gdD10Lm5vZGVUeXBlIT09OD9udWxsOnQsdCE9PW51bGw/KG49cGkhPT1udWxsP3tpZDpXcixvdmVyZmxvdzpVcn06bnVsbCxlLm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6dCx0cmVlQ29udGV4dDpuLHJldHJ5TGFuZToxMDczNzQxODI0fSxuPUZuKDE4LG51bGwsbnVsbCwwKSxuLnN0YXRlTm9kZT10LG4ucmV0dXJuPWUsZS5jaGlsZD1uLENuPWUsRW49bnVsbCwhMCk6ITE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gd2goZSl7cmV0dXJuKGUubW9kZSYxKSE9PTAmJihlLmZsYWdzJjEyOCk9PT0wfWZ1bmN0aW9uIF9oKGUpe2lmKFFlKXt2YXIgdD1FbjtpZih0KXt2YXIgbj10O2lmKCFJdihlLHQpKXtpZih3aChlKSl0aHJvdyBFcnJvcihVKDQxOCkpO3Q9a28obi5uZXh0U2libGluZyk7dmFyIHI9Q247dCYmSXYoZSx0KT9reChyLG4pOihlLmZsYWdzPWUuZmxhZ3MmLTQwOTd8MixRZT0hMSxDbj1lKX19ZWxzZXtpZih3aChlKSl0aHJvdyBFcnJvcihVKDQxOCkpO2UuZmxhZ3M9ZS5mbGFncyYtNDA5N3wyLFFlPSExLENuPWV9fX1mdW5jdGlvbiBqdihlKXtmb3IoZT1lLnJldHVybjtlIT09bnVsbCYmZS50YWchPT01JiZlLnRhZyE9PTMmJmUudGFnIT09MTM7KWU9ZS5yZXR1cm47Q249ZX1mdW5jdGlvbiBmdShlKXtpZihlIT09Q24pcmV0dXJuITE7aWYoIVFlKXJldHVybiBqdihlKSxRZT0hMCwhMTt2YXIgdDtpZigodD1lLnRhZyE9PTMpJiYhKHQ9ZS50YWchPT01KSYmKHQ9ZS50eXBlLHQ9dCE9PSJoZWFkIiYmdCE9PSJib2R5IiYmIW1oKGUudHlwZSxlLm1lbW9pemVkUHJvcHMpKSx0JiYodD1Fbikpe2lmKHdoKGUpKXRocm93IGJ4KCksRXJyb3IoVSg0MTgpKTtmb3IoO3Q7KWt4KGUsdCksdD1rbyh0Lm5leHRTaWJsaW5nKX1pZihqdihlKSxlLnRhZz09PTEzKXtpZihlPWUubWVtb2l6ZWRTdGF0ZSxlPWUhPT1udWxsP2UuZGVoeWRyYXRlZDpudWxsLCFlKXRocm93IEVycm9yKFUoMzE3KSk7ZTp7Zm9yKGU9ZS5uZXh0U2libGluZyx0PTA7ZTspe2lmKGUubm9kZVR5cGU9PT04KXt2YXIgbj1lLmRhdGE7aWYobj09PSIvJCIpe2lmKHQ9PT0wKXtFbj1rbyhlLm5leHRTaWJsaW5nKTticmVhayBlfXQtLX1lbHNlIG4hPT0iJCImJm4hPT0iJCEiJiZuIT09IiQ/Inx8dCsrfWU9ZS5uZXh0U2libGluZ31Fbj1udWxsfX1lbHNlIEVuPUNuP2tvKGUuc3RhdGVOb2RlLm5leHRTaWJsaW5nKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIGJ4KCl7Zm9yKHZhciBlPUVuO2U7KWU9a28oZS5uZXh0U2libGluZyl9ZnVuY3Rpb24gQ2woKXtFbj1Dbj1udWxsLFFlPSExfWZ1bmN0aW9uIGZnKGUpe25yPT09bnVsbD9ucj1bZV06bnIucHVzaChlKX12YXIgQms9WnIuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7ZnVuY3Rpb24gcW4oZSx0KXtpZihlJiZlLmRlZmF1bHRQcm9wcyl7dD1pdCh7fSx0KSxlPWUuZGVmYXVsdFByb3BzO2Zvcih2YXIgbiBpbiBlKXRbbl09PT12b2lkIDAmJih0W25dPWVbbl0pO3JldHVybiB0fXJldHVybiB0fXZhciBnYz1WbyhudWxsKSxtYz1udWxsLG9sPW51bGwsaGc9bnVsbDtmdW5jdGlvbiBwZygpe2hnPW9sPW1jPW51bGx9ZnVuY3Rpb24gZ2coZSl7dmFyIHQ9Z2MuY3VycmVudDtYZShnYyksZS5fY3VycmVudFZhbHVlPXR9ZnVuY3Rpb24gU2goZSx0LG4pe2Zvcig7ZSE9PW51bGw7KXt2YXIgcj1lLmFsdGVybmF0ZTtpZigoZS5jaGlsZExhbmVzJnQpIT09dD8oZS5jaGlsZExhbmVzfD10LHIhPT1udWxsJiYoci5jaGlsZExhbmVzfD10KSk6ciE9PW51bGwmJihyLmNoaWxkTGFuZXMmdCkhPT10JiYoci5jaGlsZExhbmVzfD10KSxlPT09bilicmVhaztlPWUucmV0dXJufX1mdW5jdGlvbiBnbChlLHQpe21jPWUsaGc9b2w9bnVsbCxlPWUuZGVwZW5kZW5jaWVzLGUhPT1udWxsJiZlLmZpcnN0Q29udGV4dCE9PW51bGwmJihlLmxhbmVzJnQmJihobj0hMCksZS5maXJzdENvbnRleHQ9bnVsbCl9ZnVuY3Rpb24gVW4oZSl7dmFyIHQ9ZS5fY3VycmVudFZhbHVlO2lmKGhnIT09ZSlpZihlPXtjb250ZXh0OmUsbWVtb2l6ZWRWYWx1ZTp0LG5leHQ6bnVsbH0sb2w9PT1udWxsKXtpZihtYz09PW51bGwpdGhyb3cgRXJyb3IoVSgzMDgpKTtvbD1lLG1jLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6ZX19ZWxzZSBvbD1vbC5uZXh0PWU7cmV0dXJuIHR9dmFyIG9pPW51bGw7ZnVuY3Rpb24gbWcoZSl7b2k9PT1udWxsP29pPVtlXTpvaS5wdXNoKGUpfWZ1bmN0aW9uIFR4KGUsdCxuLHIpe3ZhciBvPXQuaW50ZXJsZWF2ZWQ7cmV0dXJuIG89PT1udWxsPyhuLm5leHQ9bixtZyh0KSk6KG4ubmV4dD1vLm5leHQsby5uZXh0PW4pLHQuaW50ZXJsZWF2ZWQ9bixHcihlLHIpfWZ1bmN0aW9uIEdyKGUsdCl7ZS5sYW5lc3w9dDt2YXIgbj1lLmFsdGVybmF0ZTtmb3IobiE9PW51bGwmJihuLmxhbmVzfD10KSxuPWUsZT1lLnJldHVybjtlIT09bnVsbDspZS5jaGlsZExhbmVzfD10LG49ZS5hbHRlcm5hdGUsbiE9PW51bGwmJihuLmNoaWxkTGFuZXN8PXQpLG49ZSxlPWUucmV0dXJuO3JldHVybiBuLnRhZz09PTM/bi5zdGF0ZU5vZGU6bnVsbH12YXIgcG89ITE7ZnVuY3Rpb24gdmcoZSl7ZS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmUubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MH0sZWZmZWN0czpudWxsfX1mdW5jdGlvbiBOeChlLHQpe2U9ZS51cGRhdGVRdWV1ZSx0LnVwZGF0ZVF1ZXVlPT09ZSYmKHQudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6ZS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6ZS5zaGFyZWQsZWZmZWN0czplLmVmZmVjdHN9KX1mdW5jdGlvbiBIcihlLHQpe3JldHVybntldmVudFRpbWU6ZSxsYW5lOnQsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfX1mdW5jdGlvbiBibyhlLHQsbil7dmFyIHI9ZS51cGRhdGVRdWV1ZTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtpZihyPXIuc2hhcmVkLGJlJjIpe3ZhciBvPXIucGVuZGluZztyZXR1cm4gbz09PW51bGw/dC5uZXh0PXQ6KHQubmV4dD1vLm5leHQsby5uZXh0PXQpLHIucGVuZGluZz10LEdyKGUsbil9cmV0dXJuIG89ci5pbnRlcmxlYXZlZCxvPT09bnVsbD8odC5uZXh0PXQsbWcocikpOih0Lm5leHQ9by5uZXh0LG8ubmV4dD10KSxyLmludGVybGVhdmVkPXQsR3IoZSxuKX1mdW5jdGlvbiBCdShlLHQsbil7aWYodD10LnVwZGF0ZVF1ZXVlLHQhPT1udWxsJiYodD10LnNoYXJlZCwobiY0MTk0MjQwKSE9PTApKXt2YXIgcj10LmxhbmVzO3ImPWUucGVuZGluZ0xhbmVzLG58PXIsdC5sYW5lcz1uLG5nKGUsbil9fWZ1bmN0aW9uIHp2KGUsdCl7dmFyIG49ZS51cGRhdGVRdWV1ZSxyPWUuYWx0ZXJuYXRlO2lmKHIhPT1udWxsJiYocj1yLnVwZGF0ZVF1ZXVlLG49PT1yKSl7dmFyIG89bnVsbCxpPW51bGw7aWYobj1uLmZpcnN0QmFzZVVwZGF0ZSxuIT09bnVsbCl7ZG97dmFyIGw9e2V2ZW50VGltZTpuLmV2ZW50VGltZSxsYW5lOm4ubGFuZSx0YWc6bi50YWcscGF5bG9hZDpuLnBheWxvYWQsY2FsbGJhY2s6bi5jYWxsYmFjayxuZXh0Om51bGx9O2k9PT1udWxsP289aT1sOmk9aS5uZXh0PWwsbj1uLm5leHR9d2hpbGUobiE9PW51bGwpO2k9PT1udWxsP289aT10Omk9aS5uZXh0PXR9ZWxzZSBvPWk9dDtuPXtiYXNlU3RhdGU6ci5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm8sbGFzdEJhc2VVcGRhdGU6aSxzaGFyZWQ6ci5zaGFyZWQsZWZmZWN0czpyLmVmZmVjdHN9LGUudXBkYXRlUXVldWU9bjtyZXR1cm59ZT1uLmxhc3RCYXNlVXBkYXRlLGU9PT1udWxsP24uZmlyc3RCYXNlVXBkYXRlPXQ6ZS5uZXh0PXQsbi5sYXN0QmFzZVVwZGF0ZT10fWZ1bmN0aW9uIHZjKGUsdCxuLHIpe3ZhciBvPWUudXBkYXRlUXVldWU7cG89ITE7dmFyIGk9by5maXJzdEJhc2VVcGRhdGUsbD1vLmxhc3RCYXNlVXBkYXRlLHM9by5zaGFyZWQucGVuZGluZztpZihzIT09bnVsbCl7by5zaGFyZWQucGVuZGluZz1udWxsO3ZhciBhPXMsdT1hLm5leHQ7YS5uZXh0PW51bGwsbD09PW51bGw/aT11OmwubmV4dD11LGw9YTt2YXIgYz1lLmFsdGVybmF0ZTtjIT09bnVsbCYmKGM9Yy51cGRhdGVRdWV1ZSxzPWMubGFzdEJhc2VVcGRhdGUscyE9PWwmJihzPT09bnVsbD9jLmZpcnN0QmFzZVVwZGF0ZT11OnMubmV4dD11LGMubGFzdEJhc2VVcGRhdGU9YSkpfWlmKGkhPT1udWxsKXt2YXIgZD1vLmJhc2VTdGF0ZTtsPTAsYz11PWE9bnVsbCxzPWk7ZG97dmFyIGY9cy5sYW5lLGg9cy5ldmVudFRpbWU7aWYoKHImZik9PT1mKXtjIT09bnVsbCYmKGM9Yy5uZXh0PXtldmVudFRpbWU6aCxsYW5lOjAsdGFnOnMudGFnLHBheWxvYWQ6cy5wYXlsb2FkLGNhbGxiYWNrOnMuY2FsbGJhY2ssbmV4dDpudWxsfSk7ZTp7dmFyIG09ZSxnPXM7c3dpdGNoKGY9dCxoPW4sZy50YWcpe2Nhc2UgMTppZihtPWcucGF5bG9hZCx0eXBlb2YgbT09ImZ1bmN0aW9uIil7ZD1tLmNhbGwoaCxkLGYpO2JyZWFrIGV9ZD1tO2JyZWFrIGU7Y2FzZSAzOm0uZmxhZ3M9bS5mbGFncyYtNjU1Mzd8MTI4O2Nhc2UgMDppZihtPWcucGF5bG9hZCxmPXR5cGVvZiBtPT0iZnVuY3Rpb24iP20uY2FsbChoLGQsZik6bSxmPT1udWxsKWJyZWFrIGU7ZD1pdCh7fSxkLGYpO2JyZWFrIGU7Y2FzZSAyOnBvPSEwfX1zLmNhbGxiYWNrIT09bnVsbCYmcy5sYW5lIT09MCYmKGUuZmxhZ3N8PTY0LGY9by5lZmZlY3RzLGY9PT1udWxsP28uZWZmZWN0cz1bc106Zi5wdXNoKHMpKX1lbHNlIGg9e2V2ZW50VGltZTpoLGxhbmU6Zix0YWc6cy50YWcscGF5bG9hZDpzLnBheWxvYWQsY2FsbGJhY2s6cy5jYWxsYmFjayxuZXh0Om51bGx9LGM9PT1udWxsPyh1PWM9aCxhPWQpOmM9Yy5uZXh0PWgsbHw9ZjtpZihzPXMubmV4dCxzPT09bnVsbCl7aWYocz1vLnNoYXJlZC5wZW5kaW5nLHM9PT1udWxsKWJyZWFrO2Y9cyxzPWYubmV4dCxmLm5leHQ9bnVsbCxvLmxhc3RCYXNlVXBkYXRlPWYsby5zaGFyZWQucGVuZGluZz1udWxsfX13aGlsZSghMCk7aWYoYz09PW51bGwmJihhPWQpLG8uYmFzZVN0YXRlPWEsby5maXJzdEJhc2VVcGRhdGU9dSxvLmxhc3RCYXNlVXBkYXRlPWMsdD1vLnNoYXJlZC5pbnRlcmxlYXZlZCx0IT09bnVsbCl7bz10O2RvIGx8PW8ubGFuZSxvPW8ubmV4dDt3aGlsZShvIT09dCl9ZWxzZSBpPT09bnVsbCYmKG8uc2hhcmVkLmxhbmVzPTApO21pfD1sLGUubGFuZXM9bCxlLm1lbW9pemVkU3RhdGU9ZH19ZnVuY3Rpb24gRnYoZSx0LG4pe2lmKGU9dC5lZmZlY3RzLHQuZWZmZWN0cz1udWxsLGUhPT1udWxsKWZvcih0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciByPWVbdF0sbz1yLmNhbGxiYWNrO2lmKG8hPT1udWxsKXtpZihyLmNhbGxiYWNrPW51bGwscj1uLHR5cGVvZiBvIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFUoMTkxLG8pKTtvLmNhbGwocil9fX12YXIgUng9bmV3IFQxLkNvbXBvbmVudCgpLnJlZnM7ZnVuY3Rpb24gRWgoZSx0LG4scil7dD1lLm1lbW9pemVkU3RhdGUsbj1uKHIsdCksbj1uPT1udWxsP3Q6aXQoe30sdCxuKSxlLm1lbW9pemVkU3RhdGU9bixlLmxhbmVzPT09MCYmKGUudXBkYXRlUXVldWUuYmFzZVN0YXRlPW4pfXZhciBzZD17aXNNb3VudGVkOmZ1bmN0aW9uKGUpe3JldHVybihlPWUuX3JlYWN0SW50ZXJuYWxzKT8kaShlKT09PWU6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1sbigpLG89Tm8oZSksaT1IcihyLG8pO2kucGF5bG9hZD10LG4hPW51bGwmJihpLmNhbGxiYWNrPW4pLHQ9Ym8oZSxpLG8pLHQhPT1udWxsJiYobHIodCxlLG8sciksQnUodCxlLG8pKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1sbigpLG89Tm8oZSksaT1IcihyLG8pO2kudGFnPTEsaS5wYXlsb2FkPXQsbiE9bnVsbCYmKGkuY2FsbGJhY2s9biksdD1ibyhlLGksbyksdCE9PW51bGwmJihscih0LGUsbyxyKSxCdSh0LGUsbykpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciBuPWxuKCkscj1ObyhlKSxvPUhyKG4scik7by50YWc9Mix0IT1udWxsJiYoby5jYWxsYmFjaz10KSx0PWJvKGUsbyxyKSx0IT09bnVsbCYmKGxyKHQsZSxyLG4pLEJ1KHQsZSxyKSl9fTtmdW5jdGlvbiBCdihlLHQsbixyLG8saSxsKXtyZXR1cm4gZT1lLnN0YXRlTm9kZSx0eXBlb2YgZS5zaG91bGRDb21wb25lbnRVcGRhdGU9PSJmdW5jdGlvbiI/ZS5zaG91bGRDb21wb25lbnRVcGRhdGUocixpLGwpOnQucHJvdG90eXBlJiZ0LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hYWEobixyKXx8IWFhKG8saSk6ITB9ZnVuY3Rpb24gUHgoZSx0LG4pe3ZhciByPSExLG89TG8saT10LmNvbnRleHRUeXBlO3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJmkhPT1udWxsP2k9VW4oaSk6KG89Z24odCk/aGk6R3QuY3VycmVudCxyPXQuY29udGV4dFR5cGVzLGk9KHI9ciE9bnVsbCk/RWwoZSxvKTpMbyksdD1uZXcgdChuLGkpLGUubWVtb2l6ZWRTdGF0ZT10LnN0YXRlIT09bnVsbCYmdC5zdGF0ZSE9PXZvaWQgMD90LnN0YXRlOm51bGwsdC51cGRhdGVyPXNkLGUuc3RhdGVOb2RlPXQsdC5fcmVhY3RJbnRlcm5hbHM9ZSxyJiYoZT1lLnN0YXRlTm9kZSxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9byxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWkpLHR9ZnVuY3Rpb24gV3YoZSx0LG4scil7ZT10LnN0YXRlLHR5cGVvZiB0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9PSJmdW5jdGlvbiImJnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLHIpLHR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT0iZnVuY3Rpb24iJiZ0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksdC5zdGF0ZSE9PWUmJnNkLmVucXVldWVSZXBsYWNlU3RhdGUodCx0LnN0YXRlLG51bGwpfWZ1bmN0aW9uIENoKGUsdCxuLHIpe3ZhciBvPWUuc3RhdGVOb2RlO28ucHJvcHM9bixvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxvLnJlZnM9UngsdmcoZSk7dmFyIGk9dC5jb250ZXh0VHlwZTt0eXBlb2YgaT09Im9iamVjdCImJmkhPT1udWxsP28uY29udGV4dD1VbihpKTooaT1nbih0KT9oaTpHdC5jdXJyZW50LG8uY29udGV4dD1FbChlLGkpKSxvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxpPXQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLHR5cGVvZiBpPT0iZnVuY3Rpb24iJiYoRWgoZSx0LGksbiksby5zdGF0ZT1lLm1lbW9pemVkU3RhdGUpLHR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09ImZ1bmN0aW9uInx8dHlwZW9mIG8uZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiJ8fHR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiImJnR5cGVvZiBvLmNvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uInx8KHQ9by5zdGF0ZSx0eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJm8uY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksdCE9PW8uc3RhdGUmJnNkLmVucXVldWVSZXBsYWNlU3RhdGUobyxvLnN0YXRlLG51bGwpLHZjKGUsbixvLHIpLG8uc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSx0eXBlb2Ygby5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKGUuZmxhZ3N8PTQxOTQzMDgpfWZ1bmN0aW9uIGRzKGUsdCxuKXtpZihlPW4ucmVmLGUhPT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGUhPSJvYmplY3QiKXtpZihuLl9vd25lcil7aWYobj1uLl9vd25lcixuKXtpZihuLnRhZyE9PTEpdGhyb3cgRXJyb3IoVSgzMDkpKTt2YXIgcj1uLnN0YXRlTm9kZX1pZighcil0aHJvdyBFcnJvcihVKDE0NyxlKSk7dmFyIG89cixpPSIiK2U7cmV0dXJuIHQhPT1udWxsJiZ0LnJlZiE9PW51bGwmJnR5cGVvZiB0LnJlZj09ImZ1bmN0aW9uIiYmdC5yZWYuX3N0cmluZ1JlZj09PWk/dC5yZWY6KHQ9ZnVuY3Rpb24obCl7dmFyIHM9by5yZWZzO3M9PT1SeCYmKHM9by5yZWZzPXt9KSxsPT09bnVsbD9kZWxldGUgc1tpXTpzW2ldPWx9LHQuX3N0cmluZ1JlZj1pLHQpfWlmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBFcnJvcihVKDI4NCkpO2lmKCFuLl9vd25lcil0aHJvdyBFcnJvcihVKDI5MCxlKSl9cmV0dXJuIGV9ZnVuY3Rpb24gaHUoZSx0KXt0aHJvdyBlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSxFcnJvcihVKDMxLGU9PT0iW29iamVjdCBPYmplY3RdIj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyh0KS5qb2luKCIsICIpKyJ9IjplKSl9ZnVuY3Rpb24gVXYoZSl7dmFyIHQ9ZS5faW5pdDtyZXR1cm4gdChlLl9wYXlsb2FkKX1mdW5jdGlvbiBPeChlKXtmdW5jdGlvbiB0KHYseSl7aWYoZSl7dmFyIHg9di5kZWxldGlvbnM7eD09PW51bGw/KHYuZGVsZXRpb25zPVt5XSx2LmZsYWdzfD0xNik6eC5wdXNoKHkpfX1mdW5jdGlvbiBuKHYseSl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKDt5IT09bnVsbDspdCh2LHkpLHk9eS5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIHIodix5KXtmb3Iodj1uZXcgTWFwO3khPT1udWxsOyl5LmtleSE9PW51bGw/di5zZXQoeS5rZXkseSk6di5zZXQoeS5pbmRleCx5KSx5PXkuc2libGluZztyZXR1cm4gdn1mdW5jdGlvbiBvKHYseSl7cmV0dXJuIHY9Um8odix5KSx2LmluZGV4PTAsdi5zaWJsaW5nPW51bGwsdn1mdW5jdGlvbiBpKHYseSx4KXtyZXR1cm4gdi5pbmRleD14LGU/KHg9di5hbHRlcm5hdGUseCE9PW51bGw/KHg9eC5pbmRleCx4PHk/KHYuZmxhZ3N8PTIseSk6eCk6KHYuZmxhZ3N8PTIseSkpOih2LmZsYWdzfD0xMDQ4NTc2LHkpfWZ1bmN0aW9uIGwodil7cmV0dXJuIGUmJnYuYWx0ZXJuYXRlPT09bnVsbCYmKHYuZmxhZ3N8PTIpLHZ9ZnVuY3Rpb24gcyh2LHkseCxTKXtyZXR1cm4geT09PW51bGx8fHkudGFnIT09Nj8oeT1FZih4LHYubW9kZSxTKSx5LnJldHVybj12LHkpOih5PW8oeSx4KSx5LnJldHVybj12LHkpfWZ1bmN0aW9uIGEodix5LHgsUyl7dmFyIGs9eC50eXBlO3JldHVybiBrPT09UWk/Yyh2LHkseC5wcm9wcy5jaGlsZHJlbixTLHgua2V5KTp5IT09bnVsbCYmKHkuZWxlbWVudFR5cGU9PT1rfHx0eXBlb2Ygaz09Im9iamVjdCImJmshPT1udWxsJiZrLiQkdHlwZW9mPT09aG8mJlV2KGspPT09eS50eXBlKT8oUz1vKHkseC5wcm9wcyksUy5yZWY9ZHModix5LHgpLFMucmV0dXJuPXYsUyk6KFM9R3UoeC50eXBlLHgua2V5LHgucHJvcHMsbnVsbCx2Lm1vZGUsUyksUy5yZWY9ZHModix5LHgpLFMucmV0dXJuPXYsUyl9ZnVuY3Rpb24gdSh2LHkseCxTKXtyZXR1cm4geT09PW51bGx8fHkudGFnIT09NHx8eS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PXguY29udGFpbmVySW5mb3x8eS5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT14LmltcGxlbWVudGF0aW9uPyh5PUNmKHgsdi5tb2RlLFMpLHkucmV0dXJuPXYseSk6KHk9byh5LHguY2hpbGRyZW58fFtdKSx5LnJldHVybj12LHkpfWZ1bmN0aW9uIGModix5LHgsUyxrKXtyZXR1cm4geT09PW51bGx8fHkudGFnIT09Nz8oeT11aSh4LHYubW9kZSxTLGspLHkucmV0dXJuPXYseSk6KHk9byh5LHgpLHkucmV0dXJuPXYseSl9ZnVuY3Rpb24gZCh2LHkseCl7aWYodHlwZW9mIHk9PSJzdHJpbmciJiZ5IT09IiJ8fHR5cGVvZiB5PT0ibnVtYmVyIilyZXR1cm4geT1FZigiIit5LHYubW9kZSx4KSx5LnJldHVybj12LHk7aWYodHlwZW9mIHk9PSJvYmplY3QiJiZ5IT09bnVsbCl7c3dpdGNoKHkuJCR0eXBlb2Ype2Nhc2UgbnU6cmV0dXJuIHg9R3UoeS50eXBlLHkua2V5LHkucHJvcHMsbnVsbCx2Lm1vZGUseCkseC5yZWY9ZHModixudWxsLHkpLHgucmV0dXJuPXYseDtjYXNlIFhpOnJldHVybiB5PUNmKHksdi5tb2RlLHgpLHkucmV0dXJuPXYseTtjYXNlIGhvOnZhciBTPXkuX2luaXQ7cmV0dXJuIGQodixTKHkuX3BheWxvYWQpLHgpfWlmKENzKHkpfHxscyh5KSlyZXR1cm4geT11aSh5LHYubW9kZSx4LG51bGwpLHkucmV0dXJuPXYseTtodSh2LHkpfXJldHVybiBudWxsfWZ1bmN0aW9uIGYodix5LHgsUyl7dmFyIGs9eSE9PW51bGw/eS5rZXk6bnVsbDtpZih0eXBlb2YgeD09InN0cmluZyImJnghPT0iInx8dHlwZW9mIHg9PSJudW1iZXIiKXJldHVybiBrIT09bnVsbD9udWxsOnModix5LCIiK3gsUyk7aWYodHlwZW9mIHg9PSJvYmplY3QiJiZ4IT09bnVsbCl7c3dpdGNoKHguJCR0eXBlb2Ype2Nhc2UgbnU6cmV0dXJuIHgua2V5PT09az9hKHYseSx4LFMpOm51bGw7Y2FzZSBYaTpyZXR1cm4geC5rZXk9PT1rP3Uodix5LHgsUyk6bnVsbDtjYXNlIGhvOnJldHVybiBrPXguX2luaXQsZih2LHksayh4Ll9wYXlsb2FkKSxTKX1pZihDcyh4KXx8bHMoeCkpcmV0dXJuIGshPT1udWxsP251bGw6Yyh2LHkseCxTLG51bGwpO2h1KHYseCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaCh2LHkseCxTLGspe2lmKHR5cGVvZiBTPT0ic3RyaW5nIiYmUyE9PSIifHx0eXBlb2YgUz09Im51bWJlciIpcmV0dXJuIHY9di5nZXQoeCl8fG51bGwscyh5LHYsIiIrUyxrKTtpZih0eXBlb2YgUz09Im9iamVjdCImJlMhPT1udWxsKXtzd2l0Y2goUy4kJHR5cGVvZil7Y2FzZSBudTpyZXR1cm4gdj12LmdldChTLmtleT09PW51bGw/eDpTLmtleSl8fG51bGwsYSh5LHYsUyxrKTtjYXNlIFhpOnJldHVybiB2PXYuZ2V0KFMua2V5PT09bnVsbD94OlMua2V5KXx8bnVsbCx1KHksdixTLGspO2Nhc2UgaG86dmFyIFQ9Uy5faW5pdDtyZXR1cm4gaCh2LHkseCxUKFMuX3BheWxvYWQpLGspfWlmKENzKFMpfHxscyhTKSlyZXR1cm4gdj12LmdldCh4KXx8bnVsbCxjKHksdixTLGssbnVsbCk7aHUoeSxTKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBtKHYseSx4LFMpe2Zvcih2YXIgaz1udWxsLFQ9bnVsbCxiPXksTj15PTAsRD1udWxsO2IhPT1udWxsJiZOPHgubGVuZ3RoO04rKyl7Yi5pbmRleD5OPyhEPWIsYj1udWxsKTpEPWIuc2libGluZzt2YXIgTT1mKHYsYix4W05dLFMpO2lmKE09PT1udWxsKXtiPT09bnVsbCYmKGI9RCk7YnJlYWt9ZSYmYiYmTS5hbHRlcm5hdGU9PT1udWxsJiZ0KHYsYikseT1pKE0seSxOKSxUPT09bnVsbD9rPU06VC5zaWJsaW5nPU0sVD1NLGI9RH1pZihOPT09eC5sZW5ndGgpcmV0dXJuIG4odixiKSxRZSYmcW8odixOKSxrO2lmKGI9PT1udWxsKXtmb3IoO048eC5sZW5ndGg7TisrKWI9ZCh2LHhbTl0sUyksYiE9PW51bGwmJih5PWkoYix5LE4pLFQ9PT1udWxsP2s9YjpULnNpYmxpbmc9YixUPWIpO3JldHVybiBRZSYmcW8odixOKSxrfWZvcihiPXIodixiKTtOPHgubGVuZ3RoO04rKylEPWgoYix2LE4seFtOXSxTKSxEIT09bnVsbCYmKGUmJkQuYWx0ZXJuYXRlIT09bnVsbCYmYi5kZWxldGUoRC5rZXk9PT1udWxsP046RC5rZXkpLHk9aShELHksTiksVD09PW51bGw/az1EOlQuc2libGluZz1ELFQ9RCk7cmV0dXJuIGUmJmIuZm9yRWFjaChmdW5jdGlvbihqKXtyZXR1cm4gdCh2LGopfSksUWUmJnFvKHYsTiksa31mdW5jdGlvbiBnKHYseSx4LFMpe3ZhciBrPWxzKHgpO2lmKHR5cGVvZiBrIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFUoMTUwKSk7aWYoeD1rLmNhbGwoeCkseD09bnVsbCl0aHJvdyBFcnJvcihVKDE1MSkpO2Zvcih2YXIgVD1rPW51bGwsYj15LE49eT0wLEQ9bnVsbCxNPXgubmV4dCgpO2IhPT1udWxsJiYhTS5kb25lO04rKyxNPXgubmV4dCgpKXtiLmluZGV4Pk4/KEQ9YixiPW51bGwpOkQ9Yi5zaWJsaW5nO3ZhciBqPWYodixiLE0udmFsdWUsUyk7aWYoaj09PW51bGwpe2I9PT1udWxsJiYoYj1EKTticmVha31lJiZiJiZqLmFsdGVybmF0ZT09PW51bGwmJnQodixiKSx5PWkoaix5LE4pLFQ9PT1udWxsP2s9ajpULnNpYmxpbmc9aixUPWosYj1EfWlmKE0uZG9uZSlyZXR1cm4gbih2LGIpLFFlJiZxbyh2LE4pLGs7aWYoYj09PW51bGwpe2Zvcig7IU0uZG9uZTtOKyssTT14Lm5leHQoKSlNPWQodixNLnZhbHVlLFMpLE0hPT1udWxsJiYoeT1pKE0seSxOKSxUPT09bnVsbD9rPU06VC5zaWJsaW5nPU0sVD1NKTtyZXR1cm4gUWUmJnFvKHYsTiksa31mb3IoYj1yKHYsYik7IU0uZG9uZTtOKyssTT14Lm5leHQoKSlNPWgoYix2LE4sTS52YWx1ZSxTKSxNIT09bnVsbCYmKGUmJk0uYWx0ZXJuYXRlIT09bnVsbCYmYi5kZWxldGUoTS5rZXk9PT1udWxsP046TS5rZXkpLHk9aShNLHksTiksVD09PW51bGw/az1NOlQuc2libGluZz1NLFQ9TSk7cmV0dXJuIGUmJmIuZm9yRWFjaChmdW5jdGlvbihCKXtyZXR1cm4gdCh2LEIpfSksUWUmJnFvKHYsTiksa31mdW5jdGlvbiBfKHYseSx4LFMpe2lmKHR5cGVvZiB4PT0ib2JqZWN0IiYmeCE9PW51bGwmJngudHlwZT09PVFpJiZ4LmtleT09PW51bGwmJih4PXgucHJvcHMuY2hpbGRyZW4pLHR5cGVvZiB4PT0ib2JqZWN0IiYmeCE9PW51bGwpe3N3aXRjaCh4LiQkdHlwZW9mKXtjYXNlIG51OmU6e2Zvcih2YXIgaz14LmtleSxUPXk7VCE9PW51bGw7KXtpZihULmtleT09PWspe2lmKGs9eC50eXBlLGs9PT1RaSl7aWYoVC50YWc9PT03KXtuKHYsVC5zaWJsaW5nKSx5PW8oVCx4LnByb3BzLmNoaWxkcmVuKSx5LnJldHVybj12LHY9eTticmVhayBlfX1lbHNlIGlmKFQuZWxlbWVudFR5cGU9PT1rfHx0eXBlb2Ygaz09Im9iamVjdCImJmshPT1udWxsJiZrLiQkdHlwZW9mPT09aG8mJlV2KGspPT09VC50eXBlKXtuKHYsVC5zaWJsaW5nKSx5PW8oVCx4LnByb3BzKSx5LnJlZj1kcyh2LFQseCkseS5yZXR1cm49dix2PXk7YnJlYWsgZX1uKHYsVCk7YnJlYWt9ZWxzZSB0KHYsVCk7VD1ULnNpYmxpbmd9eC50eXBlPT09UWk/KHk9dWkoeC5wcm9wcy5jaGlsZHJlbix2Lm1vZGUsUyx4LmtleSkseS5yZXR1cm49dix2PXkpOihTPUd1KHgudHlwZSx4LmtleSx4LnByb3BzLG51bGwsdi5tb2RlLFMpLFMucmVmPWRzKHYseSx4KSxTLnJldHVybj12LHY9Uyl9cmV0dXJuIGwodik7Y2FzZSBYaTplOntmb3IoVD14LmtleTt5IT09bnVsbDspe2lmKHkua2V5PT09VClpZih5LnRhZz09PTQmJnkuc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT14LmNvbnRhaW5lckluZm8mJnkuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uPT09eC5pbXBsZW1lbnRhdGlvbil7bih2LHkuc2libGluZykseT1vKHkseC5jaGlsZHJlbnx8W10pLHkucmV0dXJuPXYsdj15O2JyZWFrIGV9ZWxzZXtuKHYseSk7YnJlYWt9ZWxzZSB0KHYseSk7eT15LnNpYmxpbmd9eT1DZih4LHYubW9kZSxTKSx5LnJldHVybj12LHY9eX1yZXR1cm4gbCh2KTtjYXNlIGhvOnJldHVybiBUPXguX2luaXQsXyh2LHksVCh4Ll9wYXlsb2FkKSxTKX1pZihDcyh4KSlyZXR1cm4gbSh2LHkseCxTKTtpZihscyh4KSlyZXR1cm4gZyh2LHkseCxTKTtodSh2LHgpfXJldHVybiB0eXBlb2YgeD09InN0cmluZyImJnghPT0iInx8dHlwZW9mIHg9PSJudW1iZXIiPyh4PSIiK3gseSE9PW51bGwmJnkudGFnPT09Nj8obih2LHkuc2libGluZykseT1vKHkseCkseS5yZXR1cm49dix2PXkpOihuKHYseSkseT1FZih4LHYubW9kZSxTKSx5LnJldHVybj12LHY9eSksbCh2KSk6bih2LHkpfXJldHVybiBffXZhciAkbD1PeCghMCksQXg9T3goITEpLEZhPXt9LEVyPVZvKEZhKSxmYT1WbyhGYSksaGE9Vm8oRmEpO2Z1bmN0aW9uIGlpKGUpe2lmKGU9PT1GYSl0aHJvdyBFcnJvcihVKDE3NCkpO3JldHVybiBlfWZ1bmN0aW9uIHlnKGUsdCl7c3dpdGNoKEJlKGhhLHQpLEJlKGZhLGUpLEJlKEVyLEZhKSxlPXQubm9kZVR5cGUsZSl7Y2FzZSA5OmNhc2UgMTE6dD0odD10LmRvY3VtZW50RWxlbWVudCk/dC5uYW1lc3BhY2VVUkk6bmgobnVsbCwiIik7YnJlYWs7ZGVmYXVsdDplPWU9PT04P3QucGFyZW50Tm9kZTp0LHQ9ZS5uYW1lc3BhY2VVUkl8fG51bGwsZT1lLnRhZ05hbWUsdD1uaCh0LGUpfVhlKEVyKSxCZShFcix0KX1mdW5jdGlvbiBrbCgpe1hlKEVyKSxYZShmYSksWGUoaGEpfWZ1bmN0aW9uIE14KGUpe2lpKGhhLmN1cnJlbnQpO3ZhciB0PWlpKEVyLmN1cnJlbnQpLG49bmgodCxlLnR5cGUpO3QhPT1uJiYoQmUoZmEsZSksQmUoRXIsbikpfWZ1bmN0aW9uIHhnKGUpe2ZhLmN1cnJlbnQ9PT1lJiYoWGUoRXIpLFhlKGZhKSl9dmFyIHR0PVZvKDApO2Z1bmN0aW9uIHljKGUpe2Zvcih2YXIgdD1lO3QhPT1udWxsOyl7aWYodC50YWc9PT0xMyl7dmFyIG49dC5tZW1vaXplZFN0YXRlO2lmKG4hPT1udWxsJiYobj1uLmRlaHlkcmF0ZWQsbj09PW51bGx8fG4uZGF0YT09PSIkPyJ8fG4uZGF0YT09PSIkISIpKXJldHVybiB0fWVsc2UgaWYodC50YWc9PT0xOSYmdC5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyIT09dm9pZCAwKXtpZih0LmZsYWdzJjEyOClyZXR1cm4gdH1lbHNlIGlmKHQuY2hpbGQhPT1udWxsKXt0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZDtjb250aW51ZX1pZih0PT09ZSlicmVhaztmb3IoO3Quc2libGluZz09PW51bGw7KXtpZih0LnJldHVybj09PW51bGx8fHQucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIHZmPVtdO2Z1bmN0aW9uIHdnKCl7Zm9yKHZhciBlPTA7ZTx2Zi5sZW5ndGg7ZSsrKXZmW2VdLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PW51bGw7dmYubGVuZ3RoPTB9dmFyIFd1PVpyLlJlYWN0Q3VycmVudERpc3BhdGNoZXIseWY9WnIuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsZ2k9MCxydD1udWxsLHd0PW51bGwsa3Q9bnVsbCx4Yz0hMSxEcz0hMSxwYT0wLFdrPTA7ZnVuY3Rpb24genQoKXt0aHJvdyBFcnJvcihVKDMyMSkpfWZ1bmN0aW9uIF9nKGUsdCl7aWYodD09PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmbjxlLmxlbmd0aDtuKyspaWYoIXNyKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gU2coZSx0LG4scixvLGkpe2lmKGdpPWkscnQ9dCx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsdC5sYW5lcz0wLFd1LmN1cnJlbnQ9ZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGw/S2s6R2ssZT1uKHIsbyksRHMpe2k9MDtkb3tpZihEcz0hMSxwYT0wLDI1PD1pKXRocm93IEVycm9yKFUoMzAxKSk7aSs9MSxrdD13dD1udWxsLHQudXBkYXRlUXVldWU9bnVsbCxXdS5jdXJyZW50PVlrLGU9bihyLG8pfXdoaWxlKERzKX1pZihXdS5jdXJyZW50PXdjLHQ9d3QhPT1udWxsJiZ3dC5uZXh0IT09bnVsbCxnaT0wLGt0PXd0PXJ0PW51bGwseGM9ITEsdCl0aHJvdyBFcnJvcihVKDMwMCkpO3JldHVybiBlfWZ1bmN0aW9uIEVnKCl7dmFyIGU9cGEhPT0wO3JldHVybiBwYT0wLGV9ZnVuY3Rpb24gZ3IoKXt2YXIgZT17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtyZXR1cm4ga3Q9PT1udWxsP3J0Lm1lbW9pemVkU3RhdGU9a3Q9ZTprdD1rdC5uZXh0PWUsa3R9ZnVuY3Rpb24gSG4oKXtpZih3dD09PW51bGwpe3ZhciBlPXJ0LmFsdGVybmF0ZTtlPWUhPT1udWxsP2UubWVtb2l6ZWRTdGF0ZTpudWxsfWVsc2UgZT13dC5uZXh0O3ZhciB0PWt0PT09bnVsbD9ydC5tZW1vaXplZFN0YXRlOmt0Lm5leHQ7aWYodCE9PW51bGwpa3Q9dCx3dD1lO2Vsc2V7aWYoZT09PW51bGwpdGhyb3cgRXJyb3IoVSgzMTApKTt3dD1lLGU9e21lbW9pemVkU3RhdGU6d3QubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6d3QuYmFzZVN0YXRlLGJhc2VRdWV1ZTp3dC5iYXNlUXVldWUscXVldWU6d3QucXVldWUsbmV4dDpudWxsfSxrdD09PW51bGw/cnQubWVtb2l6ZWRTdGF0ZT1rdD1lOmt0PWt0Lm5leHQ9ZX1yZXR1cm4ga3R9ZnVuY3Rpb24gZ2EoZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0fWZ1bmN0aW9uIHhmKGUpe3ZhciB0PUhuKCksbj10LnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKFUoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPWU7dmFyIHI9d3Qsbz1yLmJhc2VRdWV1ZSxpPW4ucGVuZGluZztpZihpIT09bnVsbCl7aWYobyE9PW51bGwpe3ZhciBsPW8ubmV4dDtvLm5leHQ9aS5uZXh0LGkubmV4dD1sfXIuYmFzZVF1ZXVlPW89aSxuLnBlbmRpbmc9bnVsbH1pZihvIT09bnVsbCl7aT1vLm5leHQscj1yLmJhc2VTdGF0ZTt2YXIgcz1sPW51bGwsYT1udWxsLHU9aTtkb3t2YXIgYz11LmxhbmU7aWYoKGdpJmMpPT09YylhIT09bnVsbCYmKGE9YS5uZXh0PXtsYW5lOjAsYWN0aW9uOnUuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6dS5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6dS5lYWdlclN0YXRlLG5leHQ6bnVsbH0pLHI9dS5oYXNFYWdlclN0YXRlP3UuZWFnZXJTdGF0ZTplKHIsdS5hY3Rpb24pO2Vsc2V7dmFyIGQ9e2xhbmU6YyxhY3Rpb246dS5hY3Rpb24saGFzRWFnZXJTdGF0ZTp1Lmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTp1LmVhZ2VyU3RhdGUsbmV4dDpudWxsfTthPT09bnVsbD8ocz1hPWQsbD1yKTphPWEubmV4dD1kLHJ0LmxhbmVzfD1jLG1pfD1jfXU9dS5uZXh0fXdoaWxlKHUhPT1udWxsJiZ1IT09aSk7YT09PW51bGw/bD1yOmEubmV4dD1zLHNyKHIsdC5tZW1vaXplZFN0YXRlKXx8KGhuPSEwKSx0Lm1lbW9pemVkU3RhdGU9cix0LmJhc2VTdGF0ZT1sLHQuYmFzZVF1ZXVlPWEsbi5sYXN0UmVuZGVyZWRTdGF0ZT1yfWlmKGU9bi5pbnRlcmxlYXZlZCxlIT09bnVsbCl7bz1lO2RvIGk9by5sYW5lLHJ0LmxhbmVzfD1pLG1pfD1pLG89by5uZXh0O3doaWxlKG8hPT1lKX1lbHNlIG89PT1udWxsJiYobi5sYW5lcz0wKTtyZXR1cm5bdC5tZW1vaXplZFN0YXRlLG4uZGlzcGF0Y2hdfWZ1bmN0aW9uIHdmKGUpe3ZhciB0PUhuKCksbj10LnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKFUoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPWU7dmFyIHI9bi5kaXNwYXRjaCxvPW4ucGVuZGluZyxpPXQubWVtb2l6ZWRTdGF0ZTtpZihvIT09bnVsbCl7bi5wZW5kaW5nPW51bGw7dmFyIGw9bz1vLm5leHQ7ZG8gaT1lKGksbC5hY3Rpb24pLGw9bC5uZXh0O3doaWxlKGwhPT1vKTtzcihpLHQubWVtb2l6ZWRTdGF0ZSl8fChobj0hMCksdC5tZW1vaXplZFN0YXRlPWksdC5iYXNlUXVldWU9PT1udWxsJiYodC5iYXNlU3RhdGU9aSksbi5sYXN0UmVuZGVyZWRTdGF0ZT1pfXJldHVybltpLHJdfWZ1bmN0aW9uIEx4KCl7fWZ1bmN0aW9uIER4KGUsdCl7dmFyIG49cnQscj1IbigpLG89dCgpLGk9IXNyKHIubWVtb2l6ZWRTdGF0ZSxvKTtpZihpJiYoci5tZW1vaXplZFN0YXRlPW8saG49ITApLHI9ci5xdWV1ZSxDZyh6eC5iaW5kKG51bGwsbixyLGUpLFtlXSksci5nZXRTbmFwc2hvdCE9PXR8fGl8fGt0IT09bnVsbCYma3QubWVtb2l6ZWRTdGF0ZS50YWcmMSl7aWYobi5mbGFnc3w9MjA0OCxtYSg5LGp4LmJpbmQobnVsbCxuLHIsbyx0KSx2b2lkIDAsbnVsbCksUHQ9PT1udWxsKXRocm93IEVycm9yKFUoMzQ5KSk7Z2kmMzB8fEl4KG4sdCxvKX1yZXR1cm4gb31mdW5jdGlvbiBJeChlLHQsbil7ZS5mbGFnc3w9MTYzODQsZT17Z2V0U25hcHNob3Q6dCx2YWx1ZTpufSx0PXJ0LnVwZGF0ZVF1ZXVlLHQ9PT1udWxsPyh0PXtsYXN0RWZmZWN0Om51bGwsc3RvcmVzOm51bGx9LHJ0LnVwZGF0ZVF1ZXVlPXQsdC5zdG9yZXM9W2VdKToobj10LnN0b3JlcyxuPT09bnVsbD90LnN0b3Jlcz1bZV06bi5wdXNoKGUpKX1mdW5jdGlvbiBqeChlLHQsbixyKXt0LnZhbHVlPW4sdC5nZXRTbmFwc2hvdD1yLEZ4KHQpJiZCeChlKX1mdW5jdGlvbiB6eChlLHQsbil7cmV0dXJuIG4oZnVuY3Rpb24oKXtGeCh0KSYmQngoZSl9KX1mdW5jdGlvbiBGeChlKXt2YXIgdD1lLmdldFNuYXBzaG90O2U9ZS52YWx1ZTt0cnl7dmFyIG49dCgpO3JldHVybiFzcihlLG4pfWNhdGNoe3JldHVybiEwfX1mdW5jdGlvbiBCeChlKXt2YXIgdD1HcihlLDEpO3QhPT1udWxsJiZscih0LGUsMSwtMSl9ZnVuY3Rpb24gSHYoZSl7dmFyIHQ9Z3IoKTtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiImJihlPWUoKSksdC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWUsZT17cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6Z2EsbGFzdFJlbmRlcmVkU3RhdGU6ZX0sdC5xdWV1ZT1lLGU9ZS5kaXNwYXRjaD1Way5iaW5kKG51bGwscnQsZSksW3QubWVtb2l6ZWRTdGF0ZSxlXX1mdW5jdGlvbiBtYShlLHQsbixyKXtyZXR1cm4gZT17dGFnOmUsY3JlYXRlOnQsZGVzdHJveTpuLGRlcHM6cixuZXh0Om51bGx9LHQ9cnQudXBkYXRlUXVldWUsdD09PW51bGw/KHQ9e2xhc3RFZmZlY3Q6bnVsbCxzdG9yZXM6bnVsbH0scnQudXBkYXRlUXVldWU9dCx0Lmxhc3RFZmZlY3Q9ZS5uZXh0PWUpOihuPXQubGFzdEVmZmVjdCxuPT09bnVsbD90Lmxhc3RFZmZlY3Q9ZS5uZXh0PWU6KHI9bi5uZXh0LG4ubmV4dD1lLGUubmV4dD1yLHQubGFzdEVmZmVjdD1lKSksZX1mdW5jdGlvbiBXeCgpe3JldHVybiBIbigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gVXUoZSx0LG4scil7dmFyIG89Z3IoKTtydC5mbGFnc3w9ZSxvLm1lbW9pemVkU3RhdGU9bWEoMXx0LG4sdm9pZCAwLHI9PT12b2lkIDA/bnVsbDpyKX1mdW5jdGlvbiBhZChlLHQsbixyKXt2YXIgbz1IbigpO3I9cj09PXZvaWQgMD9udWxsOnI7dmFyIGk9dm9pZCAwO2lmKHd0IT09bnVsbCl7dmFyIGw9d3QubWVtb2l6ZWRTdGF0ZTtpZihpPWwuZGVzdHJveSxyIT09bnVsbCYmX2cocixsLmRlcHMpKXtvLm1lbW9pemVkU3RhdGU9bWEodCxuLGkscik7cmV0dXJufX1ydC5mbGFnc3w9ZSxvLm1lbW9pemVkU3RhdGU9bWEoMXx0LG4saSxyKX1mdW5jdGlvbiBWdihlLHQpe3JldHVybiBVdSg4MzkwNjU2LDgsZSx0KX1mdW5jdGlvbiBDZyhlLHQpe3JldHVybiBhZCgyMDQ4LDgsZSx0KX1mdW5jdGlvbiBVeChlLHQpe3JldHVybiBhZCg0LDIsZSx0KX1mdW5jdGlvbiBIeChlLHQpe3JldHVybiBhZCg0LDQsZSx0KX1mdW5jdGlvbiBWeChlLHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXJldHVybiBlPWUoKSx0KGUpLGZ1bmN0aW9uKCl7dChudWxsKX07aWYodCE9bnVsbClyZXR1cm4gZT1lKCksdC5jdXJyZW50PWUsZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gS3goZSx0LG4pe3JldHVybiBuPW4hPW51bGw/bi5jb25jYXQoW2VdKTpudWxsLGFkKDQsNCxWeC5iaW5kKG51bGwsdCxlKSxuKX1mdW5jdGlvbiAkZygpe31mdW5jdGlvbiBHeChlLHQpe3ZhciBuPUhuKCk7dD10PT09dm9pZCAwP251bGw6dDt2YXIgcj1uLm1lbW9pemVkU3RhdGU7cmV0dXJuIHIhPT1udWxsJiZ0IT09bnVsbCYmX2codCxyWzFdKT9yWzBdOihuLm1lbW9pemVkU3RhdGU9W2UsdF0sZSl9ZnVuY3Rpb24gWXgoZSx0KXt2YXIgbj1IbigpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiByIT09bnVsbCYmdCE9PW51bGwmJl9nKHQsclsxXSk/clswXTooZT1lKCksbi5tZW1vaXplZFN0YXRlPVtlLHRdLGUpfWZ1bmN0aW9uIFh4KGUsdCxuKXtyZXR1cm4gZ2kmMjE/KHNyKG4sdCl8fChuPVoxKCkscnQubGFuZXN8PW4sbWl8PW4sZS5iYXNlU3RhdGU9ITApLHQpOihlLmJhc2VTdGF0ZSYmKGUuYmFzZVN0YXRlPSExLGhuPSEwKSxlLm1lbW9pemVkU3RhdGU9bil9ZnVuY3Rpb24gVWsoZSx0KXt2YXIgbj1NZTtNZT1uIT09MCYmND5uP246NCxlKCEwKTt2YXIgcj15Zi50cmFuc2l0aW9uO3lmLnRyYW5zaXRpb249e307dHJ5e2UoITEpLHQoKX1maW5hbGx5e01lPW4seWYudHJhbnNpdGlvbj1yfX1mdW5jdGlvbiBReCgpe3JldHVybiBIbigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gSGsoZSx0LG4pe3ZhciByPU5vKGUpO2lmKG49e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LEp4KGUpKVp4KHQsbik7ZWxzZSBpZihuPVR4KGUsdCxuLHIpLG4hPT1udWxsKXt2YXIgbz1sbigpO2xyKG4sZSxyLG8pLHF4KG4sdCxyKX19ZnVuY3Rpb24gVmsoZSx0LG4pe3ZhciByPU5vKGUpLG89e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O2lmKEp4KGUpKVp4KHQsbyk7ZWxzZXt2YXIgaT1lLmFsdGVybmF0ZTtpZihlLmxhbmVzPT09MCYmKGk9PT1udWxsfHxpLmxhbmVzPT09MCkmJihpPXQubGFzdFJlbmRlcmVkUmVkdWNlcixpIT09bnVsbCkpdHJ5e3ZhciBsPXQubGFzdFJlbmRlcmVkU3RhdGUscz1pKGwsbik7aWYoby5oYXNFYWdlclN0YXRlPSEwLG8uZWFnZXJTdGF0ZT1zLHNyKHMsbCkpe3ZhciBhPXQuaW50ZXJsZWF2ZWQ7YT09PW51bGw/KG8ubmV4dD1vLG1nKHQpKTooby5uZXh0PWEubmV4dCxhLm5leHQ9byksdC5pbnRlcmxlYXZlZD1vO3JldHVybn19Y2F0Y2h7fWZpbmFsbHl7fW49VHgoZSx0LG8sciksbiE9PW51bGwmJihvPWxuKCksbHIobixlLHIsbykscXgobix0LHIpKX19ZnVuY3Rpb24gSngoZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7cmV0dXJuIGU9PT1ydHx8dCE9PW51bGwmJnQ9PT1ydH1mdW5jdGlvbiBaeChlLHQpe0RzPXhjPSEwO3ZhciBuPWUucGVuZGluZztuPT09bnVsbD90Lm5leHQ9dDoodC5uZXh0PW4ubmV4dCxuLm5leHQ9dCksZS5wZW5kaW5nPXR9ZnVuY3Rpb24gcXgoZSx0LG4pe2lmKG4mNDE5NDI0MCl7dmFyIHI9dC5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyxufD1yLHQubGFuZXM9bixuZyhlLG4pfX12YXIgd2M9e3JlYWRDb250ZXh0OlVuLHVzZUNhbGxiYWNrOnp0LHVzZUNvbnRleHQ6enQsdXNlRWZmZWN0Onp0LHVzZUltcGVyYXRpdmVIYW5kbGU6enQsdXNlSW5zZXJ0aW9uRWZmZWN0Onp0LHVzZUxheW91dEVmZmVjdDp6dCx1c2VNZW1vOnp0LHVzZVJlZHVjZXI6enQsdXNlUmVmOnp0LHVzZVN0YXRlOnp0LHVzZURlYnVnVmFsdWU6enQsdXNlRGVmZXJyZWRWYWx1ZTp6dCx1c2VUcmFuc2l0aW9uOnp0LHVzZU11dGFibGVTb3VyY2U6enQsdXNlU3luY0V4dGVybmFsU3RvcmU6enQsdXNlSWQ6enQsdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxLaz17cmVhZENvbnRleHQ6VW4sdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ3IoKS5tZW1vaXplZFN0YXRlPVtlLHQ9PT12b2lkIDA/bnVsbDp0XSxlfSx1c2VDb250ZXh0OlVuLHVzZUVmZmVjdDpWdix1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uIT1udWxsP24uY29uY2F0KFtlXSk6bnVsbCxVdSg0MTk0MzA4LDQsVnguYmluZChudWxsLHQsZSksbil9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihlLHQpe3JldHVybiBVdSg0MTk0MzA4LDQsZSx0KX0sdXNlSW5zZXJ0aW9uRWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFV1KDQsMixlLHQpfSx1c2VNZW1vOmZ1bmN0aW9uKGUsdCl7dmFyIG49Z3IoKTtyZXR1cm4gdD10PT09dm9pZCAwP251bGw6dCxlPWUoKSxuLm1lbW9pemVkU3RhdGU9W2UsdF0sZX0sdXNlUmVkdWNlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9Z3IoKTtyZXR1cm4gdD1uIT09dm9pZCAwP24odCk6dCxyLm1lbW9pemVkU3RhdGU9ci5iYXNlU3RhdGU9dCxlPXtwZW5kaW5nOm51bGwsaW50ZXJsZWF2ZWQ6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjplLGxhc3RSZW5kZXJlZFN0YXRlOnR9LHIucXVldWU9ZSxlPWUuZGlzcGF0Y2g9SGsuYmluZChudWxsLHJ0LGUpLFtyLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXt2YXIgdD1ncigpO3JldHVybiBlPXtjdXJyZW50OmV9LHQubWVtb2l6ZWRTdGF0ZT1lfSx1c2VTdGF0ZTpIdix1c2VEZWJ1Z1ZhbHVlOiRnLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdyKCkubWVtb2l6ZWRTdGF0ZT1lfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9SHYoITEpLHQ9ZVswXTtyZXR1cm4gZT1Vay5iaW5kKG51bGwsZVsxXSksZ3IoKS5tZW1vaXplZFN0YXRlPWUsW3QsZV19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oKXt9LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ydCxvPWdyKCk7aWYoUWUpe2lmKG49PT12b2lkIDApdGhyb3cgRXJyb3IoVSg0MDcpKTtuPW4oKX1lbHNle2lmKG49dCgpLFB0PT09bnVsbCl0aHJvdyBFcnJvcihVKDM0OSkpO2dpJjMwfHxJeChyLHQsbil9by5tZW1vaXplZFN0YXRlPW47dmFyIGk9e3ZhbHVlOm4sZ2V0U25hcHNob3Q6dH07cmV0dXJuIG8ucXVldWU9aSxWdih6eC5iaW5kKG51bGwscixpLGUpLFtlXSksci5mbGFnc3w9MjA0OCxtYSg5LGp4LmJpbmQobnVsbCxyLGksbix0KSx2b2lkIDAsbnVsbCksbn0sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgZT1ncigpLHQ9UHQuaWRlbnRpZmllclByZWZpeDtpZihRZSl7dmFyIG49VXIscj1XcjtuPShyJn4oMTw8MzItaXIociktMSkpLnRvU3RyaW5nKDMyKStuLHQ9IjoiK3QrIlIiK24sbj1wYSsrLDA8biYmKHQrPSJIIituLnRvU3RyaW5nKDMyKSksdCs9IjoifWVsc2Ugbj1XaysrLHQ9IjoiK3QrInIiK24udG9TdHJpbmcoMzIpKyI6IjtyZXR1cm4gZS5tZW1vaXplZFN0YXRlPXR9LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sR2s9e3JlYWRDb250ZXh0OlVuLHVzZUNhbGxiYWNrOkd4LHVzZUNvbnRleHQ6VW4sdXNlRWZmZWN0OkNnLHVzZUltcGVyYXRpdmVIYW5kbGU6S3gsdXNlSW5zZXJ0aW9uRWZmZWN0OlV4LHVzZUxheW91dEVmZmVjdDpIeCx1c2VNZW1vOll4LHVzZVJlZHVjZXI6eGYsdXNlUmVmOld4LHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHhmKGdhKX0sdXNlRGVidWdWYWx1ZTokZyx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PUhuKCk7cmV0dXJuIFh4KHQsd3QubWVtb2l6ZWRTdGF0ZSxlKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPXhmKGdhKVswXSx0PUhuKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bZSx0XX0sdXNlTXV0YWJsZVNvdXJjZTpMeCx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpEeCx1c2VJZDpReCx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LFlrPXtyZWFkQ29udGV4dDpVbix1c2VDYWxsYmFjazpHeCx1c2VDb250ZXh0OlVuLHVzZUVmZmVjdDpDZyx1c2VJbXBlcmF0aXZlSGFuZGxlOkt4LHVzZUluc2VydGlvbkVmZmVjdDpVeCx1c2VMYXlvdXRFZmZlY3Q6SHgsdXNlTWVtbzpZeCx1c2VSZWR1Y2VyOndmLHVzZVJlZjpXeCx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB3ZihnYSl9LHVzZURlYnVnVmFsdWU6JGcsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1IbigpO3JldHVybiB3dD09PW51bGw/dC5tZW1vaXplZFN0YXRlPWU6WHgodCx3dC5tZW1vaXplZFN0YXRlLGUpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9d2YoZ2EpWzBdLHQ9SG4oKS5tZW1vaXplZFN0YXRlO3JldHVybltlLHRdfSx1c2VNdXRhYmxlU291cmNlOkx4LHVzZVN5bmNFeHRlcm5hbFN0b3JlOkR4LHVzZUlkOlF4LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX07ZnVuY3Rpb24gYmwoZSx0KXt0cnl7dmFyIG49IiIscj10O2RvIG4rPVMkKHIpLHI9ci5yZXR1cm47d2hpbGUocik7dmFyIG89bn1jYXRjaChpKXtvPWAKRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogYCtpLm1lc3NhZ2UrYApgK2kuc3RhY2t9cmV0dXJue3ZhbHVlOmUsc291cmNlOnQsc3RhY2s6byxkaWdlc3Q6bnVsbH19ZnVuY3Rpb24gX2YoZSx0LG4pe3JldHVybnt2YWx1ZTplLHNvdXJjZTpudWxsLHN0YWNrOm4/P251bGwsZGlnZXN0OnQ/P251bGx9fWZ1bmN0aW9uICRoKGUsdCl7dHJ5e2NvbnNvbGUuZXJyb3IodC52YWx1ZSl9Y2F0Y2gobil7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IG59KX19dmFyIFhrPXR5cGVvZiBXZWFrTWFwPT0iZnVuY3Rpb24iP1dlYWtNYXA6TWFwO2Z1bmN0aW9uIGV3KGUsdCxuKXtuPUhyKC0xLG4pLG4udGFnPTMsbi5wYXlsb2FkPXtlbGVtZW50Om51bGx9O3ZhciByPXQudmFsdWU7cmV0dXJuIG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXtTY3x8KFNjPSEwLExoPXIpLCRoKGUsdCl9LG59ZnVuY3Rpb24gdHcoZSx0LG4pe249SHIoLTEsbiksbi50YWc9Mzt2YXIgcj1lLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt2YXIgbz10LnZhbHVlO24ucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiByKG8pfSxuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7JGgoZSx0KX19dmFyIGk9ZS5zdGF0ZU5vZGU7cmV0dXJuIGkhPT1udWxsJiZ0eXBlb2YgaS5jb21wb25lbnREaWRDYXRjaD09ImZ1bmN0aW9uIiYmKG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXskaChlLHQpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiYoVG89PT1udWxsP1RvPW5ldyBTZXQoW3RoaXNdKTpUby5hZGQodGhpcykpO3ZhciBsPXQuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaCh0LnZhbHVlLHtjb21wb25lbnRTdGFjazpsIT09bnVsbD9sOiIifSl9KSxufWZ1bmN0aW9uIEt2KGUsdCxuKXt2YXIgcj1lLnBpbmdDYWNoZTtpZihyPT09bnVsbCl7cj1lLnBpbmdDYWNoZT1uZXcgWGs7dmFyIG89bmV3IFNldDtyLnNldCh0LG8pfWVsc2Ugbz1yLmdldCh0KSxvPT09dm9pZCAwJiYobz1uZXcgU2V0LHIuc2V0KHQsbykpO28uaGFzKG4pfHwoby5hZGQobiksZT11Yi5iaW5kKG51bGwsZSx0LG4pLHQudGhlbihlLGUpKX1mdW5jdGlvbiBHdihlKXtkb3t2YXIgdDtpZigodD1lLnRhZz09PTEzKSYmKHQ9ZS5tZW1vaXplZFN0YXRlLHQ9dCE9PW51bGw/dC5kZWh5ZHJhdGVkIT09bnVsbDohMCksdClyZXR1cm4gZTtlPWUucmV0dXJufXdoaWxlKGUhPT1udWxsKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBZdihlLHQsbixyLG8pe3JldHVybiBlLm1vZGUmMT8oZS5mbGFnc3w9NjU1MzYsZS5sYW5lcz1vLGUpOihlPT09dD9lLmZsYWdzfD02NTUzNjooZS5mbGFnc3w9MTI4LG4uZmxhZ3N8PTEzMTA3MixuLmZsYWdzJj0tNTI4MDUsbi50YWc9PT0xJiYobi5hbHRlcm5hdGU9PT1udWxsP24udGFnPTE3Oih0PUhyKC0xLDEpLHQudGFnPTIsYm8obix0LDEpKSksbi5sYW5lc3w9MSksZSl9dmFyIFFrPVpyLlJlYWN0Q3VycmVudE93bmVyLGhuPSExO2Z1bmN0aW9uIEp0KGUsdCxuLHIpe3QuY2hpbGQ9ZT09PW51bGw/QXgodCxudWxsLG4scik6JGwodCxlLmNoaWxkLG4scil9ZnVuY3Rpb24gWHYoZSx0LG4scixvKXtuPW4ucmVuZGVyO3ZhciBpPXQucmVmO3JldHVybiBnbCh0LG8pLHI9U2coZSx0LG4scixpLG8pLG49RWcoKSxlIT09bnVsbCYmIWhuPyh0LnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdC5mbGFncyY9LTIwNTMsZS5sYW5lcyY9fm8sWXIoZSx0LG8pKTooUWUmJm4mJmNnKHQpLHQuZmxhZ3N8PTEsSnQoZSx0LHIsbyksdC5jaGlsZCl9ZnVuY3Rpb24gUXYoZSx0LG4scixvKXtpZihlPT09bnVsbCl7dmFyIGk9bi50eXBlO3JldHVybiB0eXBlb2YgaT09ImZ1bmN0aW9uIiYmIUFnKGkpJiZpLmRlZmF1bHRQcm9wcz09PXZvaWQgMCYmbi5jb21wYXJlPT09bnVsbCYmbi5kZWZhdWx0UHJvcHM9PT12b2lkIDA/KHQudGFnPTE1LHQudHlwZT1pLG53KGUsdCxpLHIsbykpOihlPUd1KG4udHlwZSxudWxsLHIsdCx0Lm1vZGUsbyksZS5yZWY9dC5yZWYsZS5yZXR1cm49dCx0LmNoaWxkPWUpfWlmKGk9ZS5jaGlsZCwhKGUubGFuZXMmbykpe3ZhciBsPWkubWVtb2l6ZWRQcm9wcztpZihuPW4uY29tcGFyZSxuPW4hPT1udWxsP246YWEsbihsLHIpJiZlLnJlZj09PXQucmVmKXJldHVybiBZcihlLHQsbyl9cmV0dXJuIHQuZmxhZ3N8PTEsZT1SbyhpLHIpLGUucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lfWZ1bmN0aW9uIG53KGUsdCxuLHIsbyl7aWYoZSE9PW51bGwpe3ZhciBpPWUubWVtb2l6ZWRQcm9wcztpZihhYShpLHIpJiZlLnJlZj09PXQucmVmKWlmKGhuPSExLHQucGVuZGluZ1Byb3BzPXI9aSwoZS5sYW5lcyZvKSE9PTApZS5mbGFncyYxMzEwNzImJihobj0hMCk7ZWxzZSByZXR1cm4gdC5sYW5lcz1lLmxhbmVzLFlyKGUsdCxvKX1yZXR1cm4ga2goZSx0LG4scixvKX1mdW5jdGlvbiBydyhlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHMsbz1yLmNoaWxkcmVuLGk9ZSE9PW51bGw/ZS5tZW1vaXplZFN0YXRlOm51bGw7aWYoci5tb2RlPT09ImhpZGRlbiIpaWYoISh0Lm1vZGUmMSkpdC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxCZShsbCx3biksd258PW47ZWxzZXtpZighKG4mMTA3Mzc0MTgyNCkpcmV0dXJuIGU9aSE9PW51bGw/aS5iYXNlTGFuZXN8bjpuLHQubGFuZXM9dC5jaGlsZExhbmVzPTEwNzM3NDE4MjQsdC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6ZSxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSx0LnVwZGF0ZVF1ZXVlPW51bGwsQmUobGwsd24pLHdufD1lLG51bGw7dC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxyPWkhPT1udWxsP2kuYmFzZUxhbmVzOm4sQmUobGwsd24pLHdufD1yfWVsc2UgaSE9PW51bGw/KHI9aS5iYXNlTGFuZXN8bix0Lm1lbW9pemVkU3RhdGU9bnVsbCk6cj1uLEJlKGxsLHduKSx3bnw9cjtyZXR1cm4gSnQoZSx0LG8sbiksdC5jaGlsZH1mdW5jdGlvbiBvdyhlLHQpe3ZhciBuPXQucmVmOyhlPT09bnVsbCYmbiE9PW51bGx8fGUhPT1udWxsJiZlLnJlZiE9PW4pJiYodC5mbGFnc3w9NTEyLHQuZmxhZ3N8PTIwOTcxNTIpfWZ1bmN0aW9uIGtoKGUsdCxuLHIsbyl7dmFyIGk9Z24obik/aGk6R3QuY3VycmVudDtyZXR1cm4gaT1FbCh0LGkpLGdsKHQsbyksbj1TZyhlLHQsbixyLGksbykscj1FZygpLGUhPT1udWxsJiYhaG4/KHQudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0LmZsYWdzJj0tMjA1MyxlLmxhbmVzJj1+byxZcihlLHQsbykpOihRZSYmciYmY2codCksdC5mbGFnc3w9MSxKdChlLHQsbixvKSx0LmNoaWxkKX1mdW5jdGlvbiBKdihlLHQsbixyLG8pe2lmKGduKG4pKXt2YXIgaT0hMDtmYyh0KX1lbHNlIGk9ITE7aWYoZ2wodCxvKSx0LnN0YXRlTm9kZT09PW51bGwpSHUoZSx0KSxQeCh0LG4sciksQ2godCxuLHIsbykscj0hMDtlbHNlIGlmKGU9PT1udWxsKXt2YXIgbD10LnN0YXRlTm9kZSxzPXQubWVtb2l6ZWRQcm9wcztsLnByb3BzPXM7dmFyIGE9bC5jb250ZXh0LHU9bi5jb250ZXh0VHlwZTt0eXBlb2YgdT09Im9iamVjdCImJnUhPT1udWxsP3U9VW4odSk6KHU9Z24obik/aGk6R3QuY3VycmVudCx1PUVsKHQsdSkpO3ZhciBjPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLGQ9dHlwZW9mIGM9PSJmdW5jdGlvbiJ8fHR5cGVvZiBsLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24iO2R8fHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24ifHwocyE9PXJ8fGEhPT11KSYmV3YodCxsLHIsdSkscG89ITE7dmFyIGY9dC5tZW1vaXplZFN0YXRlO2wuc3RhdGU9Zix2Yyh0LHIsbCxvKSxhPXQubWVtb2l6ZWRTdGF0ZSxzIT09cnx8ZiE9PWF8fHBuLmN1cnJlbnR8fHBvPyh0eXBlb2YgYz09ImZ1bmN0aW9uIiYmKEVoKHQsbixjLHIpLGE9dC5tZW1vaXplZFN0YXRlKSwocz1wb3x8QnYodCxuLHMscixmLGEsdSkpPyhkfHx0eXBlb2YgbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiJ8fCh0eXBlb2YgbC5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJmwuY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIGwuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLHR5cGVvZiBsLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NDE5NDMwOCkpOih0eXBlb2YgbC5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpLHQubWVtb2l6ZWRQcm9wcz1yLHQubWVtb2l6ZWRTdGF0ZT1hKSxsLnByb3BzPXIsbC5zdGF0ZT1hLGwuY29udGV4dD11LHI9cyk6KHR5cGVvZiBsLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NDE5NDMwOCkscj0hMSl9ZWxzZXtsPXQuc3RhdGVOb2RlLE54KGUsdCkscz10Lm1lbW9pemVkUHJvcHMsdT10LnR5cGU9PT10LmVsZW1lbnRUeXBlP3M6cW4odC50eXBlLHMpLGwucHJvcHM9dSxkPXQucGVuZGluZ1Byb3BzLGY9bC5jb250ZXh0LGE9bi5jb250ZXh0VHlwZSx0eXBlb2YgYT09Im9iamVjdCImJmEhPT1udWxsP2E9VW4oYSk6KGE9Z24obik/aGk6R3QuY3VycmVudCxhPUVsKHQsYSkpO3ZhciBoPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyhjPXR5cGVvZiBoPT0iZnVuY3Rpb24ifHx0eXBlb2YgbC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uIil8fHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24ifHwocyE9PWR8fGYhPT1hKSYmV3YodCxsLHIsYSkscG89ITEsZj10Lm1lbW9pemVkU3RhdGUsbC5zdGF0ZT1mLHZjKHQscixsLG8pO3ZhciBtPXQubWVtb2l6ZWRTdGF0ZTtzIT09ZHx8ZiE9PW18fHBuLmN1cnJlbnR8fHBvPyh0eXBlb2YgaD09ImZ1bmN0aW9uIiYmKEVoKHQsbixoLHIpLG09dC5tZW1vaXplZFN0YXRlKSwodT1wb3x8QnYodCxuLHUscixmLG0sYSl8fCExKT8oY3x8dHlwZW9mIGwuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiImJnR5cGVvZiBsLmNvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiJ8fCh0eXBlb2YgbC5jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZsLmNvbXBvbmVudFdpbGxVcGRhdGUocixtLGEpLHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZsLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKHIsbSxhKSksdHlwZW9mIGwuY29tcG9uZW50RGlkVXBkYXRlPT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NCksdHlwZW9mIGwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiImJih0LmZsYWdzfD0xMDI0KSk6KHR5cGVvZiBsLmNvbXBvbmVudERpZFVwZGF0ZSE9ImZ1bmN0aW9uInx8cz09PWUubWVtb2l6ZWRQcm9wcyYmZj09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTQpLHR5cGVvZiBsLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT0iZnVuY3Rpb24ifHxzPT09ZS5tZW1vaXplZFByb3BzJiZmPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9MTAyNCksdC5tZW1vaXplZFByb3BzPXIsdC5tZW1vaXplZFN0YXRlPW0pLGwucHJvcHM9cixsLnN0YXRlPW0sbC5jb250ZXh0PWEscj11KToodHlwZW9mIGwuY29tcG9uZW50RGlkVXBkYXRlIT0iZnVuY3Rpb24ifHxzPT09ZS5tZW1vaXplZFByb3BzJiZmPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9NCksdHlwZW9mIGwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPSJmdW5jdGlvbiJ8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmY9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD0xMDI0KSxyPSExKX1yZXR1cm4gYmgoZSx0LG4scixpLG8pfWZ1bmN0aW9uIGJoKGUsdCxuLHIsbyxpKXtvdyhlLHQpO3ZhciBsPSh0LmZsYWdzJjEyOCkhPT0wO2lmKCFyJiYhbClyZXR1cm4gbyYmRHYodCxuLCExKSxZcihlLHQsaSk7cj10LnN0YXRlTm9kZSxRay5jdXJyZW50PXQ7dmFyIHM9bCYmdHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT0iZnVuY3Rpb24iP251bGw6ci5yZW5kZXIoKTtyZXR1cm4gdC5mbGFnc3w9MSxlIT09bnVsbCYmbD8odC5jaGlsZD0kbCh0LGUuY2hpbGQsbnVsbCxpKSx0LmNoaWxkPSRsKHQsbnVsbCxzLGkpKTpKdChlLHQscyxpKSx0Lm1lbW9pemVkU3RhdGU9ci5zdGF0ZSxvJiZEdih0LG4sITApLHQuY2hpbGR9ZnVuY3Rpb24gaXcoZSl7dmFyIHQ9ZS5zdGF0ZU5vZGU7dC5wZW5kaW5nQ29udGV4dD9MdihlLHQucGVuZGluZ0NvbnRleHQsdC5wZW5kaW5nQ29udGV4dCE9PXQuY29udGV4dCk6dC5jb250ZXh0JiZMdihlLHQuY29udGV4dCwhMSkseWcoZSx0LmNvbnRhaW5lckluZm8pfWZ1bmN0aW9uIFp2KGUsdCxuLHIsbyl7cmV0dXJuIENsKCksZmcobyksdC5mbGFnc3w9MjU2LEp0KGUsdCxuLHIpLHQuY2hpbGR9dmFyIFRoPXtkZWh5ZHJhdGVkOm51bGwsdHJlZUNvbnRleHQ6bnVsbCxyZXRyeUxhbmU6MH07ZnVuY3Rpb24gTmgoZSl7cmV0dXJue2Jhc2VMYW5lczplLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9fWZ1bmN0aW9uIGx3KGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcyxvPXR0LmN1cnJlbnQsaT0hMSxsPSh0LmZsYWdzJjEyOCkhPT0wLHM7aWYoKHM9bCl8fChzPWUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGU9PT1udWxsPyExOihvJjIpIT09MCkscz8oaT0hMCx0LmZsYWdzJj0tMTI5KTooZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiYob3w9MSksQmUodHQsbyYxKSxlPT09bnVsbClyZXR1cm4gX2godCksZT10Lm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJihlPWUuZGVoeWRyYXRlZCxlIT09bnVsbCk/KHQubW9kZSYxP2UuZGF0YT09PSIkISI/dC5sYW5lcz04OnQubGFuZXM9MTA3Mzc0MTgyNDp0LmxhbmVzPTEsbnVsbCk6KGw9ci5jaGlsZHJlbixlPXIuZmFsbGJhY2ssaT8ocj10Lm1vZGUsaT10LmNoaWxkLGw9e21vZGU6ImhpZGRlbiIsY2hpbGRyZW46bH0sIShyJjEpJiZpIT09bnVsbD8oaS5jaGlsZExhbmVzPTAsaS5wZW5kaW5nUHJvcHM9bCk6aT1kZChsLHIsMCxudWxsKSxlPXVpKGUscixuLG51bGwpLGkucmV0dXJuPXQsZS5yZXR1cm49dCxpLnNpYmxpbmc9ZSx0LmNoaWxkPWksdC5jaGlsZC5tZW1vaXplZFN0YXRlPU5oKG4pLHQubWVtb2l6ZWRTdGF0ZT1UaCxlKTprZyh0LGwpKTtpZihvPWUubWVtb2l6ZWRTdGF0ZSxvIT09bnVsbCYmKHM9by5kZWh5ZHJhdGVkLHMhPT1udWxsKSlyZXR1cm4gSmsoZSx0LGwscixzLG8sbik7aWYoaSl7aT1yLmZhbGxiYWNrLGw9dC5tb2RlLG89ZS5jaGlsZCxzPW8uc2libGluZzt2YXIgYT17bW9kZToiaGlkZGVuIixjaGlsZHJlbjpyLmNoaWxkcmVufTtyZXR1cm4hKGwmMSkmJnQuY2hpbGQhPT1vPyhyPXQuY2hpbGQsci5jaGlsZExhbmVzPTAsci5wZW5kaW5nUHJvcHM9YSx0LmRlbGV0aW9ucz1udWxsKToocj1SbyhvLGEpLHIuc3VidHJlZUZsYWdzPW8uc3VidHJlZUZsYWdzJjE0NjgwMDY0KSxzIT09bnVsbD9pPVJvKHMsaSk6KGk9dWkoaSxsLG4sbnVsbCksaS5mbGFnc3w9MiksaS5yZXR1cm49dCxyLnJldHVybj10LHIuc2libGluZz1pLHQuY2hpbGQ9cixyPWksaT10LmNoaWxkLGw9ZS5jaGlsZC5tZW1vaXplZFN0YXRlLGw9bD09PW51bGw/Tmgobik6e2Jhc2VMYW5lczpsLmJhc2VMYW5lc3xuLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOmwudHJhbnNpdGlvbnN9LGkubWVtb2l6ZWRTdGF0ZT1sLGkuY2hpbGRMYW5lcz1lLmNoaWxkTGFuZXMmfm4sdC5tZW1vaXplZFN0YXRlPVRoLHJ9cmV0dXJuIGk9ZS5jaGlsZCxlPWkuc2libGluZyxyPVJvKGkse21vZGU6InZpc2libGUiLGNoaWxkcmVuOnIuY2hpbGRyZW59KSwhKHQubW9kZSYxKSYmKHIubGFuZXM9biksci5yZXR1cm49dCxyLnNpYmxpbmc9bnVsbCxlIT09bnVsbCYmKG49dC5kZWxldGlvbnMsbj09PW51bGw/KHQuZGVsZXRpb25zPVtlXSx0LmZsYWdzfD0xNik6bi5wdXNoKGUpKSx0LmNoaWxkPXIsdC5tZW1vaXplZFN0YXRlPW51bGwscn1mdW5jdGlvbiBrZyhlLHQpe3JldHVybiB0PWRkKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjp0fSxlLm1vZGUsMCxudWxsKSx0LnJldHVybj1lLGUuY2hpbGQ9dH1mdW5jdGlvbiBwdShlLHQsbixyKXtyZXR1cm4gciE9PW51bGwmJmZnKHIpLCRsKHQsZS5jaGlsZCxudWxsLG4pLGU9a2codCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksZS5mbGFnc3w9Mix0Lm1lbW9pemVkU3RhdGU9bnVsbCxlfWZ1bmN0aW9uIEprKGUsdCxuLHIsbyxpLGwpe2lmKG4pcmV0dXJuIHQuZmxhZ3MmMjU2Pyh0LmZsYWdzJj0tMjU3LHI9X2YoRXJyb3IoVSg0MjIpKSkscHUoZSx0LGwscikpOnQubWVtb2l6ZWRTdGF0ZSE9PW51bGw/KHQuY2hpbGQ9ZS5jaGlsZCx0LmZsYWdzfD0xMjgsbnVsbCk6KGk9ci5mYWxsYmFjayxvPXQubW9kZSxyPWRkKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjpyLmNoaWxkcmVufSxvLDAsbnVsbCksaT11aShpLG8sbCxudWxsKSxpLmZsYWdzfD0yLHIucmV0dXJuPXQsaS5yZXR1cm49dCxyLnNpYmxpbmc9aSx0LmNoaWxkPXIsdC5tb2RlJjEmJiRsKHQsZS5jaGlsZCxudWxsLGwpLHQuY2hpbGQubWVtb2l6ZWRTdGF0ZT1OaChsKSx0Lm1lbW9pemVkU3RhdGU9VGgsaSk7aWYoISh0Lm1vZGUmMSkpcmV0dXJuIHB1KGUsdCxsLG51bGwpO2lmKG8uZGF0YT09PSIkISIpe2lmKHI9by5uZXh0U2libGluZyYmby5uZXh0U2libGluZy5kYXRhc2V0LHIpdmFyIHM9ci5kZ3N0O3JldHVybiByPXMsaT1FcnJvcihVKDQxOSkpLHI9X2YoaSxyLHZvaWQgMCkscHUoZSx0LGwscil9aWYocz0obCZlLmNoaWxkTGFuZXMpIT09MCxobnx8cyl7aWYocj1QdCxyIT09bnVsbCl7c3dpdGNoKGwmLWwpe2Nhc2UgNDpvPTI7YnJlYWs7Y2FzZSAxNjpvPTg7YnJlYWs7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0Om89MzI7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6bz0yNjg0MzU0NTY7YnJlYWs7ZGVmYXVsdDpvPTB9bz1vJihyLnN1c3BlbmRlZExhbmVzfGwpPzA6byxvIT09MCYmbyE9PWkucmV0cnlMYW5lJiYoaS5yZXRyeUxhbmU9byxHcihlLG8pLGxyKHIsZSxvLC0xKSl9cmV0dXJuIE9nKCkscj1fZihFcnJvcihVKDQyMSkpKSxwdShlLHQsbCxyKX1yZXR1cm4gby5kYXRhPT09IiQ/Ij8odC5mbGFnc3w9MTI4LHQuY2hpbGQ9ZS5jaGlsZCx0PWNiLmJpbmQobnVsbCxlKSxvLl9yZWFjdFJldHJ5PXQsbnVsbCk6KGU9aS50cmVlQ29udGV4dCxFbj1rbyhvLm5leHRTaWJsaW5nKSxDbj10LFFlPSEwLG5yPW51bGwsZSE9PW51bGwmJihEbltJbisrXT1XcixEbltJbisrXT1VcixEbltJbisrXT1waSxXcj1lLmlkLFVyPWUub3ZlcmZsb3cscGk9dCksdD1rZyh0LHIuY2hpbGRyZW4pLHQuZmxhZ3N8PTQwOTYsdCl9ZnVuY3Rpb24gcXYoZSx0LG4pe2UubGFuZXN8PXQ7dmFyIHI9ZS5hbHRlcm5hdGU7ciE9PW51bGwmJihyLmxhbmVzfD10KSxTaChlLnJldHVybix0LG4pfWZ1bmN0aW9uIFNmKGUsdCxuLHIsbyl7dmFyIGk9ZS5tZW1vaXplZFN0YXRlO2k9PT1udWxsP2UubWVtb2l6ZWRTdGF0ZT17aXNCYWNrd2FyZHM6dCxyZW5kZXJpbmc6bnVsbCxyZW5kZXJpbmdTdGFydFRpbWU6MCxsYXN0OnIsdGFpbDpuLHRhaWxNb2RlOm99OihpLmlzQmFja3dhcmRzPXQsaS5yZW5kZXJpbmc9bnVsbCxpLnJlbmRlcmluZ1N0YXJ0VGltZT0wLGkubGFzdD1yLGkudGFpbD1uLGkudGFpbE1vZGU9byl9ZnVuY3Rpb24gc3coZSx0LG4pe3ZhciByPXQucGVuZGluZ1Byb3BzLG89ci5yZXZlYWxPcmRlcixpPXIudGFpbDtpZihKdChlLHQsci5jaGlsZHJlbixuKSxyPXR0LmN1cnJlbnQsciYyKXI9ciYxfDIsdC5mbGFnc3w9MTI4O2Vsc2V7aWYoZSE9PW51bGwmJmUuZmxhZ3MmMTI4KWU6Zm9yKGU9dC5jaGlsZDtlIT09bnVsbDspe2lmKGUudGFnPT09MTMpZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmcXYoZSxuLHQpO2Vsc2UgaWYoZS50YWc9PT0xOSlxdihlLG4sdCk7ZWxzZSBpZihlLmNoaWxkIT09bnVsbCl7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGQ7Y29udGludWV9aWYoZT09PXQpYnJlYWsgZTtmb3IoO2Uuc2libGluZz09PW51bGw7KXtpZihlLnJldHVybj09PW51bGx8fGUucmV0dXJuPT09dClicmVhayBlO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZ31yJj0xfWlmKEJlKHR0LHIpLCEodC5tb2RlJjEpKXQubWVtb2l6ZWRTdGF0ZT1udWxsO2Vsc2Ugc3dpdGNoKG8pe2Nhc2UiZm9yd2FyZHMiOmZvcihuPXQuY2hpbGQsbz1udWxsO24hPT1udWxsOyllPW4uYWx0ZXJuYXRlLGUhPT1udWxsJiZ5YyhlKT09PW51bGwmJihvPW4pLG49bi5zaWJsaW5nO249byxuPT09bnVsbD8obz10LmNoaWxkLHQuY2hpbGQ9bnVsbCk6KG89bi5zaWJsaW5nLG4uc2libGluZz1udWxsKSxTZih0LCExLG8sbixpKTticmVhaztjYXNlImJhY2t3YXJkcyI6Zm9yKG49bnVsbCxvPXQuY2hpbGQsdC5jaGlsZD1udWxsO28hPT1udWxsOyl7aWYoZT1vLmFsdGVybmF0ZSxlIT09bnVsbCYmeWMoZSk9PT1udWxsKXt0LmNoaWxkPW87YnJlYWt9ZT1vLnNpYmxpbmcsby5zaWJsaW5nPW4sbj1vLG89ZX1TZih0LCEwLG4sbnVsbCxpKTticmVhaztjYXNlInRvZ2V0aGVyIjpTZih0LCExLG51bGwsbnVsbCx2b2lkIDApO2JyZWFrO2RlZmF1bHQ6dC5tZW1vaXplZFN0YXRlPW51bGx9cmV0dXJuIHQuY2hpbGR9ZnVuY3Rpb24gSHUoZSx0KXshKHQubW9kZSYxKSYmZSE9PW51bGwmJihlLmFsdGVybmF0ZT1udWxsLHQuYWx0ZXJuYXRlPW51bGwsdC5mbGFnc3w9Mil9ZnVuY3Rpb24gWXIoZSx0LG4pe2lmKGUhPT1udWxsJiYodC5kZXBlbmRlbmNpZXM9ZS5kZXBlbmRlbmNpZXMpLG1pfD10LmxhbmVzLCEobiZ0LmNoaWxkTGFuZXMpKXJldHVybiBudWxsO2lmKGUhPT1udWxsJiZ0LmNoaWxkIT09ZS5jaGlsZCl0aHJvdyBFcnJvcihVKDE1MykpO2lmKHQuY2hpbGQhPT1udWxsKXtmb3IoZT10LmNoaWxkLG49Um8oZSxlLnBlbmRpbmdQcm9wcyksdC5jaGlsZD1uLG4ucmV0dXJuPXQ7ZS5zaWJsaW5nIT09bnVsbDspZT1lLnNpYmxpbmcsbj1uLnNpYmxpbmc9Um8oZSxlLnBlbmRpbmdQcm9wcyksbi5yZXR1cm49dDtuLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBaayhlLHQsbil7c3dpdGNoKHQudGFnKXtjYXNlIDM6aXcodCksQ2woKTticmVhaztjYXNlIDU6TXgodCk7YnJlYWs7Y2FzZSAxOmduKHQudHlwZSkmJmZjKHQpO2JyZWFrO2Nhc2UgNDp5Zyh0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTA6dmFyIHI9dC50eXBlLl9jb250ZXh0LG89dC5tZW1vaXplZFByb3BzLnZhbHVlO0JlKGdjLHIuX2N1cnJlbnRWYWx1ZSksci5fY3VycmVudFZhbHVlPW87YnJlYWs7Y2FzZSAxMzppZihyPXQubWVtb2l6ZWRTdGF0ZSxyIT09bnVsbClyZXR1cm4gci5kZWh5ZHJhdGVkIT09bnVsbD8oQmUodHQsdHQuY3VycmVudCYxKSx0LmZsYWdzfD0xMjgsbnVsbCk6biZ0LmNoaWxkLmNoaWxkTGFuZXM/bHcoZSx0LG4pOihCZSh0dCx0dC5jdXJyZW50JjEpLGU9WXIoZSx0LG4pLGUhPT1udWxsP2Uuc2libGluZzpudWxsKTtCZSh0dCx0dC5jdXJyZW50JjEpO2JyZWFrO2Nhc2UgMTk6aWYocj0obiZ0LmNoaWxkTGFuZXMpIT09MCxlLmZsYWdzJjEyOCl7aWYocilyZXR1cm4gc3coZSx0LG4pO3QuZmxhZ3N8PTEyOH1pZihvPXQubWVtb2l6ZWRTdGF0ZSxvIT09bnVsbCYmKG8ucmVuZGVyaW5nPW51bGwsby50YWlsPW51bGwsby5sYXN0RWZmZWN0PW51bGwpLEJlKHR0LHR0LmN1cnJlbnQpLHIpYnJlYWs7cmV0dXJuIG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiB0LmxhbmVzPTAscncoZSx0LG4pfXJldHVybiBZcihlLHQsbil9dmFyIGF3LFJoLHV3LGN3O2F3PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQuY2hpbGQ7biE9PW51bGw7KXtpZihuLnRhZz09PTV8fG4udGFnPT09NillLmFwcGVuZENoaWxkKG4uc3RhdGVOb2RlKTtlbHNlIGlmKG4udGFnIT09NCYmbi5jaGlsZCE9PW51bGwpe24uY2hpbGQucmV0dXJuPW4sbj1uLmNoaWxkO2NvbnRpbnVlfWlmKG49PT10KWJyZWFrO2Zvcig7bi5zaWJsaW5nPT09bnVsbDspe2lmKG4ucmV0dXJuPT09bnVsbHx8bi5yZXR1cm49PT10KXJldHVybjtuPW4ucmV0dXJufW4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9fTtSaD1mdW5jdGlvbigpe307dXc9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ZS5tZW1vaXplZFByb3BzO2lmKG8hPT1yKXtlPXQuc3RhdGVOb2RlLGlpKEVyLmN1cnJlbnQpO3ZhciBpPW51bGw7c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOm89WmYoZSxvKSxyPVpmKGUsciksaT1bXTticmVhaztjYXNlInNlbGVjdCI6bz1pdCh7fSxvLHt2YWx1ZTp2b2lkIDB9KSxyPWl0KHt9LHIse3ZhbHVlOnZvaWQgMH0pLGk9W107YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6bz10aChlLG8pLHI9dGgoZSxyKSxpPVtdO2JyZWFrO2RlZmF1bHQ6dHlwZW9mIG8ub25DbGljayE9ImZ1bmN0aW9uIiYmdHlwZW9mIHIub25DbGljaz09ImZ1bmN0aW9uIiYmKGUub25jbGljaz1jYyl9cmgobixyKTt2YXIgbDtuPW51bGw7Zm9yKHUgaW4gbylpZighci5oYXNPd25Qcm9wZXJ0eSh1KSYmby5oYXNPd25Qcm9wZXJ0eSh1KSYmb1t1XSE9bnVsbClpZih1PT09InN0eWxlIil7dmFyIHM9b1t1XTtmb3IobCBpbiBzKXMuaGFzT3duUHJvcGVydHkobCkmJihufHwobj17fSksbltsXT0iIil9ZWxzZSB1IT09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiYmdSE9PSJjaGlsZHJlbiImJnUhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmdSE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiZ1IT09ImF1dG9Gb2N1cyImJih0YS5oYXNPd25Qcm9wZXJ0eSh1KT9pfHwoaT1bXSk6KGk9aXx8W10pLnB1c2godSxudWxsKSk7Zm9yKHUgaW4gcil7dmFyIGE9clt1XTtpZihzPW8hPW51bGw/b1t1XTp2b2lkIDAsci5oYXNPd25Qcm9wZXJ0eSh1KSYmYSE9PXMmJihhIT1udWxsfHxzIT1udWxsKSlpZih1PT09InN0eWxlIilpZihzKXtmb3IobCBpbiBzKSFzLmhhc093blByb3BlcnR5KGwpfHxhJiZhLmhhc093blByb3BlcnR5KGwpfHwobnx8KG49e30pLG5bbF09IiIpO2ZvcihsIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShsKSYmc1tsXSE9PWFbbF0mJihufHwobj17fSksbltsXT1hW2xdKX1lbHNlIG58fChpfHwoaT1bXSksaS5wdXNoKHUsbikpLG49YTtlbHNlIHU9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPyhhPWE/YS5fX2h0bWw6dm9pZCAwLHM9cz9zLl9faHRtbDp2b2lkIDAsYSE9bnVsbCYmcyE9PWEmJihpPWl8fFtdKS5wdXNoKHUsYSkpOnU9PT0iY2hpbGRyZW4iP3R5cGVvZiBhIT0ic3RyaW5nIiYmdHlwZW9mIGEhPSJudW1iZXIifHwoaT1pfHxbXSkucHVzaCh1LCIiK2EpOnUhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmdSE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiYodGEuaGFzT3duUHJvcGVydHkodSk/KGEhPW51bGwmJnU9PT0ib25TY3JvbGwiJiZWZSgic2Nyb2xsIixlKSxpfHxzPT09YXx8KGk9W10pKTooaT1pfHxbXSkucHVzaCh1LGEpKX1uJiYoaT1pfHxbXSkucHVzaCgic3R5bGUiLG4pO3ZhciB1PWk7KHQudXBkYXRlUXVldWU9dSkmJih0LmZsYWdzfD00KX19O2N3PWZ1bmN0aW9uKGUsdCxuLHIpe24hPT1yJiYodC5mbGFnc3w9NCl9O2Z1bmN0aW9uIGZzKGUsdCl7aWYoIVFlKXN3aXRjaChlLnRhaWxNb2RlKXtjYXNlImhpZGRlbiI6dD1lLnRhaWw7Zm9yKHZhciBuPW51bGw7dCE9PW51bGw7KXQuYWx0ZXJuYXRlIT09bnVsbCYmKG49dCksdD10LnNpYmxpbmc7bj09PW51bGw/ZS50YWlsPW51bGw6bi5zaWJsaW5nPW51bGw7YnJlYWs7Y2FzZSJjb2xsYXBzZWQiOm49ZS50YWlsO2Zvcih2YXIgcj1udWxsO24hPT1udWxsOyluLmFsdGVybmF0ZSE9PW51bGwmJihyPW4pLG49bi5zaWJsaW5nO3I9PT1udWxsP3R8fGUudGFpbD09PW51bGw/ZS50YWlsPW51bGw6ZS50YWlsLnNpYmxpbmc9bnVsbDpyLnNpYmxpbmc9bnVsbH19ZnVuY3Rpb24gRnQoZSl7dmFyIHQ9ZS5hbHRlcm5hdGUhPT1udWxsJiZlLmFsdGVybmF0ZS5jaGlsZD09PWUuY2hpbGQsbj0wLHI9MDtpZih0KWZvcih2YXIgbz1lLmNoaWxkO28hPT1udWxsOylufD1vLmxhbmVzfG8uY2hpbGRMYW5lcyxyfD1vLnN1YnRyZWVGbGFncyYxNDY4MDA2NCxyfD1vLmZsYWdzJjE0NjgwMDY0LG8ucmV0dXJuPWUsbz1vLnNpYmxpbmc7ZWxzZSBmb3Iobz1lLmNoaWxkO28hPT1udWxsOylufD1vLmxhbmVzfG8uY2hpbGRMYW5lcyxyfD1vLnN1YnRyZWVGbGFncyxyfD1vLmZsYWdzLG8ucmV0dXJuPWUsbz1vLnNpYmxpbmc7cmV0dXJuIGUuc3VidHJlZUZsYWdzfD1yLGUuY2hpbGRMYW5lcz1uLHR9ZnVuY3Rpb24gcWsoZSx0LG4pe3ZhciByPXQucGVuZGluZ1Byb3BzO3N3aXRjaChkZyh0KSx0LnRhZyl7Y2FzZSAyOmNhc2UgMTY6Y2FzZSAxNTpjYXNlIDA6Y2FzZSAxMTpjYXNlIDc6Y2FzZSA4OmNhc2UgMTI6Y2FzZSA5OmNhc2UgMTQ6cmV0dXJuIEZ0KHQpLG51bGw7Y2FzZSAxOnJldHVybiBnbih0LnR5cGUpJiZkYygpLEZ0KHQpLG51bGw7Y2FzZSAzOnJldHVybiByPXQuc3RhdGVOb2RlLGtsKCksWGUocG4pLFhlKEd0KSx3ZygpLHIucGVuZGluZ0NvbnRleHQmJihyLmNvbnRleHQ9ci5wZW5kaW5nQ29udGV4dCxyLnBlbmRpbmdDb250ZXh0PW51bGwpLChlPT09bnVsbHx8ZS5jaGlsZD09PW51bGwpJiYoZnUodCk/dC5mbGFnc3w9NDplPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmISh0LmZsYWdzJjI1Nil8fCh0LmZsYWdzfD0xMDI0LG5yIT09bnVsbCYmKGpoKG5yKSxucj1udWxsKSkpLFJoKGUsdCksRnQodCksbnVsbDtjYXNlIDU6eGcodCk7dmFyIG89aWkoaGEuY3VycmVudCk7aWYobj10LnR5cGUsZSE9PW51bGwmJnQuc3RhdGVOb2RlIT1udWxsKXV3KGUsdCxuLHIsbyksZS5yZWYhPT10LnJlZiYmKHQuZmxhZ3N8PTUxMix0LmZsYWdzfD0yMDk3MTUyKTtlbHNle2lmKCFyKXtpZih0LnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoVSgxNjYpKTtyZXR1cm4gRnQodCksbnVsbH1pZihlPWlpKEVyLmN1cnJlbnQpLGZ1KHQpKXtyPXQuc3RhdGVOb2RlLG49dC50eXBlO3ZhciBpPXQubWVtb2l6ZWRQcm9wcztzd2l0Y2goclt2cl09dCxyW2RhXT1pLGU9KHQubW9kZSYxKSE9PTAsbil7Y2FzZSJkaWFsb2ciOlZlKCJjYW5jZWwiLHIpLFZlKCJjbG9zZSIscik7YnJlYWs7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjpWZSgibG9hZCIscik7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKG89MDtvPGtzLmxlbmd0aDtvKyspVmUoa3Nbb10scik7YnJlYWs7Y2FzZSJzb3VyY2UiOlZlKCJlcnJvciIscik7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6VmUoImVycm9yIixyKSxWZSgibG9hZCIscik7YnJlYWs7Y2FzZSJkZXRhaWxzIjpWZSgidG9nZ2xlIixyKTticmVhaztjYXNlImlucHV0IjphdihyLGkpLFZlKCJpbnZhbGlkIixyKTticmVhaztjYXNlInNlbGVjdCI6ci5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIWkubXVsdGlwbGV9LFZlKCJpbnZhbGlkIixyKTticmVhaztjYXNlInRleHRhcmVhIjpjdihyLGkpLFZlKCJpbnZhbGlkIixyKX1yaChuLGkpLG89bnVsbDtmb3IodmFyIGwgaW4gaSlpZihpLmhhc093blByb3BlcnR5KGwpKXt2YXIgcz1pW2xdO2w9PT0iY2hpbGRyZW4iP3R5cGVvZiBzPT0ic3RyaW5nIj9yLnRleHRDb250ZW50IT09cyYmKGkuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIT09ITAmJmR1KHIudGV4dENvbnRlbnQscyxlKSxvPVsiY2hpbGRyZW4iLHNdKTp0eXBlb2Ygcz09Im51bWJlciImJnIudGV4dENvbnRlbnQhPT0iIitzJiYoaS5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmchPT0hMCYmZHUoci50ZXh0Q29udGVudCxzLGUpLG89WyJjaGlsZHJlbiIsIiIrc10pOnRhLmhhc093blByb3BlcnR5KGwpJiZzIT1udWxsJiZsPT09Im9uU2Nyb2xsIiYmVmUoInNjcm9sbCIscil9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOnJ1KHIpLHV2KHIsaSwhMCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6cnUociksZHYocik7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2Uib3B0aW9uIjpicmVhaztkZWZhdWx0OnR5cGVvZiBpLm9uQ2xpY2s9PSJmdW5jdGlvbiImJihyLm9uY2xpY2s9Y2MpfXI9byx0LnVwZGF0ZVF1ZXVlPXIsciE9PW51bGwmJih0LmZsYWdzfD00KX1lbHNle2w9by5ub2RlVHlwZT09PTk/bzpvLm93bmVyRG9jdW1lbnQsZT09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiYmKGU9STEobikpLGU9PT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI/bj09PSJzY3JpcHQiPyhlPWwuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5pbm5lckhUTUw9IjxzY3JpcHQ+PFwvc2NyaXB0PiIsZT1lLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCkpOnR5cGVvZiByLmlzPT0ic3RyaW5nIj9lPWwuY3JlYXRlRWxlbWVudChuLHtpczpyLmlzfSk6KGU9bC5jcmVhdGVFbGVtZW50KG4pLG49PT0ic2VsZWN0IiYmKGw9ZSxyLm11bHRpcGxlP2wubXVsdGlwbGU9ITA6ci5zaXplJiYobC5zaXplPXIuc2l6ZSkpKTplPWwuY3JlYXRlRWxlbWVudE5TKGUsbiksZVt2cl09dCxlW2RhXT1yLGF3KGUsdCwhMSwhMSksdC5zdGF0ZU5vZGU9ZTtlOntzd2l0Y2gobD1vaChuLHIpLG4pe2Nhc2UiZGlhbG9nIjpWZSgiY2FuY2VsIixlKSxWZSgiY2xvc2UiLGUpLG89cjticmVhaztjYXNlImlmcmFtZSI6Y2FzZSJvYmplY3QiOmNhc2UiZW1iZWQiOlZlKCJsb2FkIixlKSxvPXI7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKG89MDtvPGtzLmxlbmd0aDtvKyspVmUoa3Nbb10sZSk7bz1yO2JyZWFrO2Nhc2Uic291cmNlIjpWZSgiZXJyb3IiLGUpLG89cjticmVhaztjYXNlImltZyI6Y2FzZSJpbWFnZSI6Y2FzZSJsaW5rIjpWZSgiZXJyb3IiLGUpLFZlKCJsb2FkIixlKSxvPXI7YnJlYWs7Y2FzZSJkZXRhaWxzIjpWZSgidG9nZ2xlIixlKSxvPXI7YnJlYWs7Y2FzZSJpbnB1dCI6YXYoZSxyKSxvPVpmKGUsciksVmUoImludmFsaWQiLGUpO2JyZWFrO2Nhc2Uib3B0aW9uIjpvPXI7YnJlYWs7Y2FzZSJzZWxlY3QiOmUuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFyLm11bHRpcGxlfSxvPWl0KHt9LHIse3ZhbHVlOnZvaWQgMH0pLFZlKCJpbnZhbGlkIixlKTticmVhaztjYXNlInRleHRhcmVhIjpjdihlLHIpLG89dGgoZSxyKSxWZSgiaW52YWxpZCIsZSk7YnJlYWs7ZGVmYXVsdDpvPXJ9cmgobixvKSxzPW87Zm9yKGkgaW4gcylpZihzLmhhc093blByb3BlcnR5KGkpKXt2YXIgYT1zW2ldO2k9PT0ic3R5bGUiP0YxKGUsYSk6aT09PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/KGE9YT9hLl9faHRtbDp2b2lkIDAsYSE9bnVsbCYmajEoZSxhKSk6aT09PSJjaGlsZHJlbiI/dHlwZW9mIGE9PSJzdHJpbmciPyhuIT09InRleHRhcmVhInx8YSE9PSIiKSYmbmEoZSxhKTp0eXBlb2YgYT09Im51bWJlciImJm5hKGUsIiIrYSk6aSE9PSJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciJiZpIT09InN1cHByZXNzSHlkcmF0aW9uV2FybmluZyImJmkhPT0iYXV0b0ZvY3VzIiYmKHRhLmhhc093blByb3BlcnR5KGkpP2EhPW51bGwmJmk9PT0ib25TY3JvbGwiJiZWZSgic2Nyb2xsIixlKTphIT1udWxsJiZRcChlLGksYSxsKSl9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOnJ1KGUpLHV2KGUsciwhMSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6cnUoZSksZHYoZSk7YnJlYWs7Y2FzZSJvcHRpb24iOnIudmFsdWUhPW51bGwmJmUuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIrTW8oci52YWx1ZSkpO2JyZWFrO2Nhc2Uic2VsZWN0IjplLm11bHRpcGxlPSEhci5tdWx0aXBsZSxpPXIudmFsdWUsaSE9bnVsbD9kbChlLCEhci5tdWx0aXBsZSxpLCExKTpyLmRlZmF1bHRWYWx1ZSE9bnVsbCYmZGwoZSwhIXIubXVsdGlwbGUsci5kZWZhdWx0VmFsdWUsITApO2JyZWFrO2RlZmF1bHQ6dHlwZW9mIG8ub25DbGljaz09ImZ1bmN0aW9uIiYmKGUub25jbGljaz1jYyl9c3dpdGNoKG4pe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6cj0hIXIuYXV0b0ZvY3VzO2JyZWFrIGU7Y2FzZSJpbWciOnI9ITA7YnJlYWsgZTtkZWZhdWx0OnI9ITF9fXImJih0LmZsYWdzfD00KX10LnJlZiE9PW51bGwmJih0LmZsYWdzfD01MTIsdC5mbGFnc3w9MjA5NzE1Mil9cmV0dXJuIEZ0KHQpLG51bGw7Y2FzZSA2OmlmKGUmJnQuc3RhdGVOb2RlIT1udWxsKWN3KGUsdCxlLm1lbW9pemVkUHJvcHMscik7ZWxzZXtpZih0eXBlb2YgciE9InN0cmluZyImJnQuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihVKDE2NikpO2lmKG49aWkoaGEuY3VycmVudCksaWkoRXIuY3VycmVudCksZnUodCkpe2lmKHI9dC5zdGF0ZU5vZGUsbj10Lm1lbW9pemVkUHJvcHMsclt2cl09dCwoaT1yLm5vZGVWYWx1ZSE9PW4pJiYoZT1DbixlIT09bnVsbCkpc3dpdGNoKGUudGFnKXtjYXNlIDM6ZHUoci5ub2RlVmFsdWUsbiwoZS5tb2RlJjEpIT09MCk7YnJlYWs7Y2FzZSA1OmUubWVtb2l6ZWRQcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmchPT0hMCYmZHUoci5ub2RlVmFsdWUsbiwoZS5tb2RlJjEpIT09MCl9aSYmKHQuZmxhZ3N8PTQpfWVsc2Ugcj0obi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQpLmNyZWF0ZVRleHROb2RlKHIpLHJbdnJdPXQsdC5zdGF0ZU5vZGU9cn1yZXR1cm4gRnQodCksbnVsbDtjYXNlIDEzOmlmKFhlKHR0KSxyPXQubWVtb2l6ZWRTdGF0ZSxlPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQhPT1udWxsKXtpZihRZSYmRW4hPT1udWxsJiZ0Lm1vZGUmMSYmISh0LmZsYWdzJjEyOCkpYngoKSxDbCgpLHQuZmxhZ3N8PTk4NTYwLGk9ITE7ZWxzZSBpZihpPWZ1KHQpLHIhPT1udWxsJiZyLmRlaHlkcmF0ZWQhPT1udWxsKXtpZihlPT09bnVsbCl7aWYoIWkpdGhyb3cgRXJyb3IoVSgzMTgpKTtpZihpPXQubWVtb2l6ZWRTdGF0ZSxpPWkhPT1udWxsP2kuZGVoeWRyYXRlZDpudWxsLCFpKXRocm93IEVycm9yKFUoMzE3KSk7aVt2cl09dH1lbHNlIENsKCksISh0LmZsYWdzJjEyOCkmJih0Lm1lbW9pemVkU3RhdGU9bnVsbCksdC5mbGFnc3w9NDtGdCh0KSxpPSExfWVsc2UgbnIhPT1udWxsJiYoamgobnIpLG5yPW51bGwpLGk9ITA7aWYoIWkpcmV0dXJuIHQuZmxhZ3MmNjU1MzY/dDpudWxsfXJldHVybiB0LmZsYWdzJjEyOD8odC5sYW5lcz1uLHQpOihyPXIhPT1udWxsLHIhPT0oZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiZyJiYodC5jaGlsZC5mbGFnc3w9ODE5Mix0Lm1vZGUmMSYmKGU9PT1udWxsfHx0dC5jdXJyZW50JjE/U3Q9PT0wJiYoU3Q9Myk6T2coKSkpLHQudXBkYXRlUXVldWUhPT1udWxsJiYodC5mbGFnc3w9NCksRnQodCksbnVsbCk7Y2FzZSA0OnJldHVybiBrbCgpLFJoKGUsdCksZT09PW51bGwmJnVhKHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLEZ0KHQpLG51bGw7Y2FzZSAxMDpyZXR1cm4gZ2codC50eXBlLl9jb250ZXh0KSxGdCh0KSxudWxsO2Nhc2UgMTc6cmV0dXJuIGduKHQudHlwZSkmJmRjKCksRnQodCksbnVsbDtjYXNlIDE5OmlmKFhlKHR0KSxpPXQubWVtb2l6ZWRTdGF0ZSxpPT09bnVsbClyZXR1cm4gRnQodCksbnVsbDtpZihyPSh0LmZsYWdzJjEyOCkhPT0wLGw9aS5yZW5kZXJpbmcsbD09PW51bGwpaWYocilmcyhpLCExKTtlbHNle2lmKFN0IT09MHx8ZSE9PW51bGwmJmUuZmxhZ3MmMTI4KWZvcihlPXQuY2hpbGQ7ZSE9PW51bGw7KXtpZihsPXljKGUpLGwhPT1udWxsKXtmb3IodC5mbGFnc3w9MTI4LGZzKGksITEpLHI9bC51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKHQudXBkYXRlUXVldWU9cix0LmZsYWdzfD00KSx0LnN1YnRyZWVGbGFncz0wLHI9bixuPXQuY2hpbGQ7biE9PW51bGw7KWk9bixlPXIsaS5mbGFncyY9MTQ2ODAwNjYsbD1pLmFsdGVybmF0ZSxsPT09bnVsbD8oaS5jaGlsZExhbmVzPTAsaS5sYW5lcz1lLGkuY2hpbGQ9bnVsbCxpLnN1YnRyZWVGbGFncz0wLGkubWVtb2l6ZWRQcm9wcz1udWxsLGkubWVtb2l6ZWRTdGF0ZT1udWxsLGkudXBkYXRlUXVldWU9bnVsbCxpLmRlcGVuZGVuY2llcz1udWxsLGkuc3RhdGVOb2RlPW51bGwpOihpLmNoaWxkTGFuZXM9bC5jaGlsZExhbmVzLGkubGFuZXM9bC5sYW5lcyxpLmNoaWxkPWwuY2hpbGQsaS5zdWJ0cmVlRmxhZ3M9MCxpLmRlbGV0aW9ucz1udWxsLGkubWVtb2l6ZWRQcm9wcz1sLm1lbW9pemVkUHJvcHMsaS5tZW1vaXplZFN0YXRlPWwubWVtb2l6ZWRTdGF0ZSxpLnVwZGF0ZVF1ZXVlPWwudXBkYXRlUXVldWUsaS50eXBlPWwudHlwZSxlPWwuZGVwZW5kZW5jaWVzLGkuZGVwZW5kZW5jaWVzPWU9PT1udWxsP251bGw6e2xhbmVzOmUubGFuZXMsZmlyc3RDb250ZXh0OmUuZmlyc3RDb250ZXh0fSksbj1uLnNpYmxpbmc7cmV0dXJuIEJlKHR0LHR0LmN1cnJlbnQmMXwyKSx0LmNoaWxkfWU9ZS5zaWJsaW5nfWkudGFpbCE9PW51bGwmJnB0KCk+VGwmJih0LmZsYWdzfD0xMjgscj0hMCxmcyhpLCExKSx0LmxhbmVzPTQxOTQzMDQpfWVsc2V7aWYoIXIpaWYoZT15YyhsKSxlIT09bnVsbCl7aWYodC5mbGFnc3w9MTI4LHI9ITAsbj1lLnVwZGF0ZVF1ZXVlLG4hPT1udWxsJiYodC51cGRhdGVRdWV1ZT1uLHQuZmxhZ3N8PTQpLGZzKGksITApLGkudGFpbD09PW51bGwmJmkudGFpbE1vZGU9PT0iaGlkZGVuIiYmIWwuYWx0ZXJuYXRlJiYhUWUpcmV0dXJuIEZ0KHQpLG51bGx9ZWxzZSAyKnB0KCktaS5yZW5kZXJpbmdTdGFydFRpbWU+VGwmJm4hPT0xMDczNzQxODI0JiYodC5mbGFnc3w9MTI4LHI9ITAsZnMoaSwhMSksdC5sYW5lcz00MTk0MzA0KTtpLmlzQmFja3dhcmRzPyhsLnNpYmxpbmc9dC5jaGlsZCx0LmNoaWxkPWwpOihuPWkubGFzdCxuIT09bnVsbD9uLnNpYmxpbmc9bDp0LmNoaWxkPWwsaS5sYXN0PWwpfXJldHVybiBpLnRhaWwhPT1udWxsPyh0PWkudGFpbCxpLnJlbmRlcmluZz10LGkudGFpbD10LnNpYmxpbmcsaS5yZW5kZXJpbmdTdGFydFRpbWU9cHQoKSx0LnNpYmxpbmc9bnVsbCxuPXR0LmN1cnJlbnQsQmUodHQscj9uJjF8MjpuJjEpLHQpOihGdCh0KSxudWxsKTtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIFBnKCkscj10Lm1lbW9pemVkU3RhdGUhPT1udWxsLGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUhPT1udWxsIT09ciYmKHQuZmxhZ3N8PTgxOTIpLHImJnQubW9kZSYxP3duJjEwNzM3NDE4MjQmJihGdCh0KSx0LnN1YnRyZWVGbGFncyY2JiYodC5mbGFnc3w9ODE5MikpOkZ0KHQpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbnVsbDtjYXNlIDI1OnJldHVybiBudWxsfXRocm93IEVycm9yKFUoMTU2LHQudGFnKSl9ZnVuY3Rpb24gZWIoZSx0KXtzd2l0Y2goZGcodCksdC50YWcpe2Nhc2UgMTpyZXR1cm4gZ24odC50eXBlKSYmZGMoKSxlPXQuZmxhZ3MsZSY2NTUzNj8odC5mbGFncz1lJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDM6cmV0dXJuIGtsKCksWGUocG4pLFhlKEd0KSx3ZygpLGU9dC5mbGFncyxlJjY1NTM2JiYhKGUmMTI4KT8odC5mbGFncz1lJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDU6cmV0dXJuIHhnKHQpLG51bGw7Y2FzZSAxMzppZihYZSh0dCksZT10Lm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJmUuZGVoeWRyYXRlZCE9PW51bGwpe2lmKHQuYWx0ZXJuYXRlPT09bnVsbCl0aHJvdyBFcnJvcihVKDM0MCkpO0NsKCl9cmV0dXJuIGU9dC5mbGFncyxlJjY1NTM2Pyh0LmZsYWdzPWUmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgMTk6cmV0dXJuIFhlKHR0KSxudWxsO2Nhc2UgNDpyZXR1cm4ga2woKSxudWxsO2Nhc2UgMTA6cmV0dXJuIGdnKHQudHlwZS5fY29udGV4dCksbnVsbDtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIFBnKCksbnVsbDtjYXNlIDI0OnJldHVybiBudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciBndT0hMSxXdD0hMSx0Yj10eXBlb2YgV2Vha1NldD09ImZ1bmN0aW9uIj9XZWFrU2V0OlNldCxxPW51bGw7ZnVuY3Rpb24gaWwoZSx0KXt2YXIgbj1lLnJlZjtpZihuIT09bnVsbClpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIil0cnl7bihudWxsKX1jYXRjaChyKXtzdChlLHQscil9ZWxzZSBuLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBQaChlLHQsbil7dHJ5e24oKX1jYXRjaChyKXtzdChlLHQscil9fXZhciBleT0hMTtmdW5jdGlvbiBuYihlLHQpe2lmKHBoPXNjLGU9cHgoKSx1ZyhlKSl7aWYoInNlbGVjdGlvblN0YXJ0ImluIGUpdmFyIG49e3N0YXJ0OmUuc2VsZWN0aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtlbHNlIGU6e249KG49ZS5vd25lckRvY3VtZW50KSYmbi5kZWZhdWx0Vmlld3x8d2luZG93O3ZhciByPW4uZ2V0U2VsZWN0aW9uJiZuLmdldFNlbGVjdGlvbigpO2lmKHImJnIucmFuZ2VDb3VudCE9PTApe249ci5hbmNob3JOb2RlO3ZhciBvPXIuYW5jaG9yT2Zmc2V0LGk9ci5mb2N1c05vZGU7cj1yLmZvY3VzT2Zmc2V0O3RyeXtuLm5vZGVUeXBlLGkubm9kZVR5cGV9Y2F0Y2h7bj1udWxsO2JyZWFrIGV9dmFyIGw9MCxzPS0xLGE9LTEsdT0wLGM9MCxkPWUsZj1udWxsO3Q6Zm9yKDs7KXtmb3IodmFyIGg7ZCE9PW58fG8hPT0wJiZkLm5vZGVUeXBlIT09M3x8KHM9bCtvKSxkIT09aXx8ciE9PTAmJmQubm9kZVR5cGUhPT0zfHwoYT1sK3IpLGQubm9kZVR5cGU9PT0zJiYobCs9ZC5ub2RlVmFsdWUubGVuZ3RoKSwoaD1kLmZpcnN0Q2hpbGQpIT09bnVsbDspZj1kLGQ9aDtmb3IoOzspe2lmKGQ9PT1lKWJyZWFrIHQ7aWYoZj09PW4mJisrdT09PW8mJihzPWwpLGY9PT1pJiYrK2M9PT1yJiYoYT1sKSwoaD1kLm5leHRTaWJsaW5nKSE9PW51bGwpYnJlYWs7ZD1mLGY9ZC5wYXJlbnROb2RlfWQ9aH1uPXM9PT0tMXx8YT09PS0xP251bGw6e3N0YXJ0OnMsZW5kOmF9fWVsc2Ugbj1udWxsfW49bnx8e3N0YXJ0OjAsZW5kOjB9fWVsc2Ugbj1udWxsO2ZvcihnaD17Zm9jdXNlZEVsZW06ZSxzZWxlY3Rpb25SYW5nZTpufSxzYz0hMSxxPXQ7cSE9PW51bGw7KWlmKHQ9cSxlPXQuY2hpbGQsKHQuc3VidHJlZUZsYWdzJjEwMjgpIT09MCYmZSE9PW51bGwpZS5yZXR1cm49dCxxPWU7ZWxzZSBmb3IoO3EhPT1udWxsOyl7dD1xO3RyeXt2YXIgbT10LmFsdGVybmF0ZTtpZih0LmZsYWdzJjEwMjQpc3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmJyZWFrO2Nhc2UgMTppZihtIT09bnVsbCl7dmFyIGc9bS5tZW1vaXplZFByb3BzLF89bS5tZW1vaXplZFN0YXRlLHY9dC5zdGF0ZU5vZGUseT12LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHQuZWxlbWVudFR5cGU9PT10LnR5cGU/Zzpxbih0LnR5cGUsZyksXyk7di5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZT15fWJyZWFrO2Nhc2UgMzp2YXIgeD10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvO3gubm9kZVR5cGU9PT0xP3gudGV4dENvbnRlbnQ9IiI6eC5ub2RlVHlwZT09PTkmJnguZG9jdW1lbnRFbGVtZW50JiZ4LnJlbW92ZUNoaWxkKHguZG9jdW1lbnRFbGVtZW50KTticmVhaztjYXNlIDU6Y2FzZSA2OmNhc2UgNDpjYXNlIDE3OmJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoVSgxNjMpKX19Y2F0Y2goUyl7c3QodCx0LnJldHVybixTKX1pZihlPXQuc2libGluZyxlIT09bnVsbCl7ZS5yZXR1cm49dC5yZXR1cm4scT1lO2JyZWFrfXE9dC5yZXR1cm59cmV0dXJuIG09ZXksZXk9ITEsbX1mdW5jdGlvbiBJcyhlLHQsbil7dmFyIHI9dC51cGRhdGVRdWV1ZTtpZihyPXIhPT1udWxsP3IubGFzdEVmZmVjdDpudWxsLHIhPT1udWxsKXt2YXIgbz1yPXIubmV4dDtkb3tpZigoby50YWcmZSk9PT1lKXt2YXIgaT1vLmRlc3Ryb3k7by5kZXN0cm95PXZvaWQgMCxpIT09dm9pZCAwJiZQaCh0LG4saSl9bz1vLm5leHR9d2hpbGUobyE9PXIpfX1mdW5jdGlvbiB1ZChlLHQpe2lmKHQ9dC51cGRhdGVRdWV1ZSx0PXQhPT1udWxsP3QubGFzdEVmZmVjdDpudWxsLHQhPT1udWxsKXt2YXIgbj10PXQubmV4dDtkb3tpZigobi50YWcmZSk9PT1lKXt2YXIgcj1uLmNyZWF0ZTtuLmRlc3Ryb3k9cigpfW49bi5uZXh0fXdoaWxlKG4hPT10KX19ZnVuY3Rpb24gT2goZSl7dmFyIHQ9ZS5yZWY7aWYodCE9PW51bGwpe3ZhciBuPWUuc3RhdGVOb2RlO3N3aXRjaChlLnRhZyl7Y2FzZSA1OmU9bjticmVhaztkZWZhdWx0OmU9bn10eXBlb2YgdD09ImZ1bmN0aW9uIj90KGUpOnQuY3VycmVudD1lfX1mdW5jdGlvbiBkdyhlKXt2YXIgdD1lLmFsdGVybmF0ZTt0IT09bnVsbCYmKGUuYWx0ZXJuYXRlPW51bGwsZHcodCkpLGUuY2hpbGQ9bnVsbCxlLmRlbGV0aW9ucz1udWxsLGUuc2libGluZz1udWxsLGUudGFnPT09NSYmKHQ9ZS5zdGF0ZU5vZGUsdCE9PW51bGwmJihkZWxldGUgdFt2cl0sZGVsZXRlIHRbZGFdLGRlbGV0ZSB0W3loXSxkZWxldGUgdFtqa10sZGVsZXRlIHRbemtdKSksZS5zdGF0ZU5vZGU9bnVsbCxlLnJldHVybj1udWxsLGUuZGVwZW5kZW5jaWVzPW51bGwsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS5wZW5kaW5nUHJvcHM9bnVsbCxlLnN0YXRlTm9kZT1udWxsLGUudXBkYXRlUXVldWU9bnVsbH1mdW5jdGlvbiBmdyhlKXtyZXR1cm4gZS50YWc9PT01fHxlLnRhZz09PTN8fGUudGFnPT09NH1mdW5jdGlvbiB0eShlKXtlOmZvcig7Oyl7Zm9yKDtlLnNpYmxpbmc9PT1udWxsOyl7aWYoZS5yZXR1cm49PT1udWxsfHxmdyhlLnJldHVybikpcmV0dXJuIG51bGw7ZT1lLnJldHVybn1mb3IoZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZztlLnRhZyE9PTUmJmUudGFnIT09NiYmZS50YWchPT0xODspe2lmKGUuZmxhZ3MmMnx8ZS5jaGlsZD09PW51bGx8fGUudGFnPT09NCljb250aW51ZSBlO2UuY2hpbGQucmV0dXJuPWUsZT1lLmNoaWxkfWlmKCEoZS5mbGFncyYyKSlyZXR1cm4gZS5zdGF0ZU5vZGV9fWZ1bmN0aW9uIEFoKGUsdCxuKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpZT1lLnN0YXRlTm9kZSx0P24ubm9kZVR5cGU9PT04P24ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0KTpuLmluc2VydEJlZm9yZShlLHQpOihuLm5vZGVUeXBlPT09OD8odD1uLnBhcmVudE5vZGUsdC5pbnNlcnRCZWZvcmUoZSxuKSk6KHQ9bix0LmFwcGVuZENoaWxkKGUpKSxuPW4uX3JlYWN0Um9vdENvbnRhaW5lcixuIT1udWxsfHx0Lm9uY2xpY2shPT1udWxsfHwodC5vbmNsaWNrPWNjKSk7ZWxzZSBpZihyIT09NCYmKGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKEFoKGUsdCxuKSxlPWUuc2libGluZztlIT09bnVsbDspQWgoZSx0LG4pLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIE1oKGUsdCxuKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpZT1lLnN0YXRlTm9kZSx0P24uaW5zZXJ0QmVmb3JlKGUsdCk6bi5hcHBlbmRDaGlsZChlKTtlbHNlIGlmKHIhPT00JiYoZT1lLmNoaWxkLGUhPT1udWxsKSlmb3IoTWgoZSx0LG4pLGU9ZS5zaWJsaW5nO2UhPT1udWxsOylNaChlLHQsbiksZT1lLnNpYmxpbmd9dmFyIEx0PW51bGwsZXI9ITE7ZnVuY3Rpb24gaW8oZSx0LG4pe2ZvcihuPW4uY2hpbGQ7biE9PW51bGw7KWh3KGUsdCxuKSxuPW4uc2libGluZ31mdW5jdGlvbiBodyhlLHQsbil7aWYoU3ImJnR5cGVvZiBTci5vbkNvbW1pdEZpYmVyVW5tb3VudD09ImZ1bmN0aW9uIil0cnl7U3Iub25Db21taXRGaWJlclVubW91bnQodGQsbil9Y2F0Y2h7fXN3aXRjaChuLnRhZyl7Y2FzZSA1Old0fHxpbChuLHQpO2Nhc2UgNjp2YXIgcj1MdCxvPWVyO0x0PW51bGwsaW8oZSx0LG4pLEx0PXIsZXI9byxMdCE9PW51bGwmJihlcj8oZT1MdCxuPW4uc3RhdGVOb2RlLGUubm9kZVR5cGU9PT04P2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKTplLnJlbW92ZUNoaWxkKG4pKTpMdC5yZW1vdmVDaGlsZChuLnN0YXRlTm9kZSkpO2JyZWFrO2Nhc2UgMTg6THQhPT1udWxsJiYoZXI/KGU9THQsbj1uLnN0YXRlTm9kZSxlLm5vZGVUeXBlPT09OD9nZihlLnBhcmVudE5vZGUsbik6ZS5ub2RlVHlwZT09PTEmJmdmKGUsbiksbGEoZSkpOmdmKEx0LG4uc3RhdGVOb2RlKSk7YnJlYWs7Y2FzZSA0OnI9THQsbz1lcixMdD1uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGVyPSEwLGlvKGUsdCxuKSxMdD1yLGVyPW87YnJlYWs7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKCFXdCYmKHI9bi51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKHI9ci5sYXN0RWZmZWN0LHIhPT1udWxsKSkpe289cj1yLm5leHQ7ZG97dmFyIGk9byxsPWkuZGVzdHJveTtpPWkudGFnLGwhPT12b2lkIDAmJihpJjJ8fGkmNCkmJlBoKG4sdCxsKSxvPW8ubmV4dH13aGlsZShvIT09cil9aW8oZSx0LG4pO2JyZWFrO2Nhc2UgMTppZighV3QmJihpbChuLHQpLHI9bi5zdGF0ZU5vZGUsdHlwZW9mIHIuY29tcG9uZW50V2lsbFVubW91bnQ9PSJmdW5jdGlvbiIpKXRyeXtyLnByb3BzPW4ubWVtb2l6ZWRQcm9wcyxyLnN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSxyLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2gocyl7c3Qobix0LHMpfWlvKGUsdCxuKTticmVhaztjYXNlIDIxOmlvKGUsdCxuKTticmVhaztjYXNlIDIyOm4ubW9kZSYxPyhXdD0ocj1XdCl8fG4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsaW8oZSx0LG4pLFd0PXIpOmlvKGUsdCxuKTticmVhaztkZWZhdWx0OmlvKGUsdCxuKX19ZnVuY3Rpb24gbnkoZSl7dmFyIHQ9ZS51cGRhdGVRdWV1ZTtpZih0IT09bnVsbCl7ZS51cGRhdGVRdWV1ZT1udWxsO3ZhciBuPWUuc3RhdGVOb2RlO249PT1udWxsJiYobj1lLnN0YXRlTm9kZT1uZXcgdGIpLHQuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1kYi5iaW5kKG51bGwsZSxyKTtuLmhhcyhyKXx8KG4uYWRkKHIpLHIudGhlbihvLG8pKX0pfX1mdW5jdGlvbiBYbihlLHQpe3ZhciBuPXQuZGVsZXRpb25zO2lmKG4hPT1udWxsKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdO3RyeXt2YXIgaT1lLGw9dCxzPWw7ZTpmb3IoO3MhPT1udWxsOyl7c3dpdGNoKHMudGFnKXtjYXNlIDU6THQ9cy5zdGF0ZU5vZGUsZXI9ITE7YnJlYWsgZTtjYXNlIDM6THQ9cy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxlcj0hMDticmVhayBlO2Nhc2UgNDpMdD1zLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGVyPSEwO2JyZWFrIGV9cz1zLnJldHVybn1pZihMdD09PW51bGwpdGhyb3cgRXJyb3IoVSgxNjApKTtodyhpLGwsbyksTHQ9bnVsbCxlcj0hMTt2YXIgYT1vLmFsdGVybmF0ZTthIT09bnVsbCYmKGEucmV0dXJuPW51bGwpLG8ucmV0dXJuPW51bGx9Y2F0Y2godSl7c3Qobyx0LHUpfX1pZih0LnN1YnRyZWVGbGFncyYxMjg1NClmb3IodD10LmNoaWxkO3QhPT1udWxsOylwdyh0LGUpLHQ9dC5zaWJsaW5nfWZ1bmN0aW9uIHB3KGUsdCl7dmFyIG49ZS5hbHRlcm5hdGUscj1lLmZsYWdzO3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKFhuKHQsZSkscHIoZSksciY0KXt0cnl7SXMoMyxlLGUucmV0dXJuKSx1ZCgzLGUpfWNhdGNoKGcpe3N0KGUsZS5yZXR1cm4sZyl9dHJ5e0lzKDUsZSxlLnJldHVybil9Y2F0Y2goZyl7c3QoZSxlLnJldHVybixnKX19YnJlYWs7Y2FzZSAxOlhuKHQsZSkscHIoZSksciY1MTImJm4hPT1udWxsJiZpbChuLG4ucmV0dXJuKTticmVhaztjYXNlIDU6aWYoWG4odCxlKSxwcihlKSxyJjUxMiYmbiE9PW51bGwmJmlsKG4sbi5yZXR1cm4pLGUuZmxhZ3MmMzIpe3ZhciBvPWUuc3RhdGVOb2RlO3RyeXtuYShvLCIiKX1jYXRjaChnKXtzdChlLGUucmV0dXJuLGcpfX1pZihyJjQmJihvPWUuc3RhdGVOb2RlLG8hPW51bGwpKXt2YXIgaT1lLm1lbW9pemVkUHJvcHMsbD1uIT09bnVsbD9uLm1lbW9pemVkUHJvcHM6aSxzPWUudHlwZSxhPWUudXBkYXRlUXVldWU7aWYoZS51cGRhdGVRdWV1ZT1udWxsLGEhPT1udWxsKXRyeXtzPT09ImlucHV0IiYmaS50eXBlPT09InJhZGlvIiYmaS5uYW1lIT1udWxsJiZMMShvLGkpLG9oKHMsbCk7dmFyIHU9b2gocyxpKTtmb3IobD0wO2w8YS5sZW5ndGg7bCs9Mil7dmFyIGM9YVtsXSxkPWFbbCsxXTtjPT09InN0eWxlIj9GMShvLGQpOmM9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP2oxKG8sZCk6Yz09PSJjaGlsZHJlbiI/bmEobyxkKTpRcChvLGMsZCx1KX1zd2l0Y2gocyl7Y2FzZSJpbnB1dCI6cWYobyxpKTticmVhaztjYXNlInRleHRhcmVhIjpEMShvLGkpO2JyZWFrO2Nhc2Uic2VsZWN0Ijp2YXIgZj1vLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7by5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhaS5tdWx0aXBsZTt2YXIgaD1pLnZhbHVlO2ghPW51bGw/ZGwobywhIWkubXVsdGlwbGUsaCwhMSk6ZiE9PSEhaS5tdWx0aXBsZSYmKGkuZGVmYXVsdFZhbHVlIT1udWxsP2RsKG8sISFpLm11bHRpcGxlLGkuZGVmYXVsdFZhbHVlLCEwKTpkbChvLCEhaS5tdWx0aXBsZSxpLm11bHRpcGxlP1tdOiIiLCExKSl9b1tkYV09aX1jYXRjaChnKXtzdChlLGUucmV0dXJuLGcpfX1icmVhaztjYXNlIDY6aWYoWG4odCxlKSxwcihlKSxyJjQpe2lmKGUuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihVKDE2MikpO289ZS5zdGF0ZU5vZGUsaT1lLm1lbW9pemVkUHJvcHM7dHJ5e28ubm9kZVZhbHVlPWl9Y2F0Y2goZyl7c3QoZSxlLnJldHVybixnKX19YnJlYWs7Y2FzZSAzOmlmKFhuKHQsZSkscHIoZSksciY0JiZuIT09bnVsbCYmbi5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl0cnl7bGEodC5jb250YWluZXJJbmZvKX1jYXRjaChnKXtzdChlLGUucmV0dXJuLGcpfWJyZWFrO2Nhc2UgNDpYbih0LGUpLHByKGUpO2JyZWFrO2Nhc2UgMTM6WG4odCxlKSxwcihlKSxvPWUuY2hpbGQsby5mbGFncyY4MTkyJiYoaT1vLm1lbW9pemVkU3RhdGUhPT1udWxsLG8uc3RhdGVOb2RlLmlzSGlkZGVuPWksIWl8fG8uYWx0ZXJuYXRlIT09bnVsbCYmby5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fChOZz1wdCgpKSksciY0JiZueShlKTticmVhaztjYXNlIDIyOmlmKGM9biE9PW51bGwmJm4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsZS5tb2RlJjE/KFd0PSh1PVd0KXx8YyxYbih0LGUpLFd0PXUpOlhuKHQsZSkscHIoZSksciY4MTkyKXtpZih1PWUubWVtb2l6ZWRTdGF0ZSE9PW51bGwsKGUuc3RhdGVOb2RlLmlzSGlkZGVuPXUpJiYhYyYmZS5tb2RlJjEpZm9yKHE9ZSxjPWUuY2hpbGQ7YyE9PW51bGw7KXtmb3IoZD1xPWM7cSE9PW51bGw7KXtzd2l0Y2goZj1xLGg9Zi5jaGlsZCxmLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OklzKDQsZixmLnJldHVybik7YnJlYWs7Y2FzZSAxOmlsKGYsZi5yZXR1cm4pO3ZhciBtPWYuc3RhdGVOb2RlO2lmKHR5cGVvZiBtLmNvbXBvbmVudFdpbGxVbm1vdW50PT0iZnVuY3Rpb24iKXtyPWYsbj1mLnJldHVybjt0cnl7dD1yLG0ucHJvcHM9dC5tZW1vaXplZFByb3BzLG0uc3RhdGU9dC5tZW1vaXplZFN0YXRlLG0uY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChnKXtzdChyLG4sZyl9fWJyZWFrO2Nhc2UgNTppbChmLGYucmV0dXJuKTticmVhaztjYXNlIDIyOmlmKGYubWVtb2l6ZWRTdGF0ZSE9PW51bGwpe295KGQpO2NvbnRpbnVlfX1oIT09bnVsbD8oaC5yZXR1cm49ZixxPWgpOm95KGQpfWM9Yy5zaWJsaW5nfWU6Zm9yKGM9bnVsbCxkPWU7Oyl7aWYoZC50YWc9PT01KXtpZihjPT09bnVsbCl7Yz1kO3RyeXtvPWQuc3RhdGVOb2RlLHU/KGk9by5zdHlsZSx0eXBlb2YgaS5zZXRQcm9wZXJ0eT09ImZ1bmN0aW9uIj9pLnNldFByb3BlcnR5KCJkaXNwbGF5Iiwibm9uZSIsImltcG9ydGFudCIpOmkuZGlzcGxheT0ibm9uZSIpOihzPWQuc3RhdGVOb2RlLGE9ZC5tZW1vaXplZFByb3BzLnN0eWxlLGw9YSE9bnVsbCYmYS5oYXNPd25Qcm9wZXJ0eSgiZGlzcGxheSIpP2EuZGlzcGxheTpudWxsLHMuc3R5bGUuZGlzcGxheT16MSgiZGlzcGxheSIsbCkpfWNhdGNoKGcpe3N0KGUsZS5yZXR1cm4sZyl9fX1lbHNlIGlmKGQudGFnPT09Nil7aWYoYz09PW51bGwpdHJ5e2Quc3RhdGVOb2RlLm5vZGVWYWx1ZT11PyIiOmQubWVtb2l6ZWRQcm9wc31jYXRjaChnKXtzdChlLGUucmV0dXJuLGcpfX1lbHNlIGlmKChkLnRhZyE9PTIyJiZkLnRhZyE9PTIzfHxkLm1lbW9pemVkU3RhdGU9PT1udWxsfHxkPT09ZSkmJmQuY2hpbGQhPT1udWxsKXtkLmNoaWxkLnJldHVybj1kLGQ9ZC5jaGlsZDtjb250aW51ZX1pZihkPT09ZSlicmVhayBlO2Zvcig7ZC5zaWJsaW5nPT09bnVsbDspe2lmKGQucmV0dXJuPT09bnVsbHx8ZC5yZXR1cm49PT1lKWJyZWFrIGU7Yz09PWQmJihjPW51bGwpLGQ9ZC5yZXR1cm59Yz09PWQmJihjPW51bGwpLGQuc2libGluZy5yZXR1cm49ZC5yZXR1cm4sZD1kLnNpYmxpbmd9fWJyZWFrO2Nhc2UgMTk6WG4odCxlKSxwcihlKSxyJjQmJm55KGUpO2JyZWFrO2Nhc2UgMjE6YnJlYWs7ZGVmYXVsdDpYbih0LGUpLHByKGUpfX1mdW5jdGlvbiBwcihlKXt2YXIgdD1lLmZsYWdzO2lmKHQmMil7dHJ5e2U6e2Zvcih2YXIgbj1lLnJldHVybjtuIT09bnVsbDspe2lmKGZ3KG4pKXt2YXIgcj1uO2JyZWFrIGV9bj1uLnJldHVybn10aHJvdyBFcnJvcihVKDE2MCkpfXN3aXRjaChyLnRhZyl7Y2FzZSA1OnZhciBvPXIuc3RhdGVOb2RlO3IuZmxhZ3MmMzImJihuYShvLCIiKSxyLmZsYWdzJj0tMzMpO3ZhciBpPXR5KGUpO01oKGUsaSxvKTticmVhaztjYXNlIDM6Y2FzZSA0OnZhciBsPXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8scz10eShlKTtBaChlLHMsbCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihVKDE2MSkpfX1jYXRjaChhKXtzdChlLGUucmV0dXJuLGEpfWUuZmxhZ3MmPS0zfXQmNDA5NiYmKGUuZmxhZ3MmPS00MDk3KX1mdW5jdGlvbiByYihlLHQsbil7cT1lLGd3KGUpfWZ1bmN0aW9uIGd3KGUsdCxuKXtmb3IodmFyIHI9KGUubW9kZSYxKSE9PTA7cSE9PW51bGw7KXt2YXIgbz1xLGk9by5jaGlsZDtpZihvLnRhZz09PTIyJiZyKXt2YXIgbD1vLm1lbW9pemVkU3RhdGUhPT1udWxsfHxndTtpZighbCl7dmFyIHM9by5hbHRlcm5hdGUsYT1zIT09bnVsbCYmcy5tZW1vaXplZFN0YXRlIT09bnVsbHx8V3Q7cz1ndTt2YXIgdT1XdDtpZihndT1sLChXdD1hKSYmIXUpZm9yKHE9bztxIT09bnVsbDspbD1xLGE9bC5jaGlsZCxsLnRhZz09PTIyJiZsLm1lbW9pemVkU3RhdGUhPT1udWxsP2l5KG8pOmEhPT1udWxsPyhhLnJldHVybj1sLHE9YSk6aXkobyk7Zm9yKDtpIT09bnVsbDspcT1pLGd3KGkpLGk9aS5zaWJsaW5nO3E9byxndT1zLFd0PXV9cnkoZSl9ZWxzZSBvLnN1YnRyZWVGbGFncyY4NzcyJiZpIT09bnVsbD8oaS5yZXR1cm49byxxPWkpOnJ5KGUpfX1mdW5jdGlvbiByeShlKXtmb3IoO3EhPT1udWxsOyl7dmFyIHQ9cTtpZih0LmZsYWdzJjg3NzIpe3ZhciBuPXQuYWx0ZXJuYXRlO3RyeXtpZih0LmZsYWdzJjg3NzIpc3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1Old0fHx1ZCg1LHQpO2JyZWFrO2Nhc2UgMTp2YXIgcj10LnN0YXRlTm9kZTtpZih0LmZsYWdzJjQmJiFXdClpZihuPT09bnVsbClyLmNvbXBvbmVudERpZE1vdW50KCk7ZWxzZXt2YXIgbz10LmVsZW1lbnRUeXBlPT09dC50eXBlP24ubWVtb2l6ZWRQcm9wczpxbih0LnR5cGUsbi5tZW1vaXplZFByb3BzKTtyLmNvbXBvbmVudERpZFVwZGF0ZShvLG4ubWVtb2l6ZWRTdGF0ZSxyLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKX12YXIgaT10LnVwZGF0ZVF1ZXVlO2khPT1udWxsJiZGdih0LGkscik7YnJlYWs7Y2FzZSAzOnZhciBsPXQudXBkYXRlUXVldWU7aWYobCE9PW51bGwpe2lmKG49bnVsbCx0LmNoaWxkIT09bnVsbClzd2l0Y2godC5jaGlsZC50YWcpe2Nhc2UgNTpuPXQuY2hpbGQuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMTpuPXQuY2hpbGQuc3RhdGVOb2RlfUZ2KHQsbCxuKX1icmVhaztjYXNlIDU6dmFyIHM9dC5zdGF0ZU5vZGU7aWYobj09PW51bGwmJnQuZmxhZ3MmNCl7bj1zO3ZhciBhPXQubWVtb2l6ZWRQcm9wcztzd2l0Y2godC50eXBlKXtjYXNlImJ1dHRvbiI6Y2FzZSJpbnB1dCI6Y2FzZSJzZWxlY3QiOmNhc2UidGV4dGFyZWEiOmEuYXV0b0ZvY3VzJiZuLmZvY3VzKCk7YnJlYWs7Y2FzZSJpbWciOmEuc3JjJiYobi5zcmM9YS5zcmMpfX1icmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzppZih0Lm1lbW9pemVkU3RhdGU9PT1udWxsKXt2YXIgdT10LmFsdGVybmF0ZTtpZih1IT09bnVsbCl7dmFyIGM9dS5tZW1vaXplZFN0YXRlO2lmKGMhPT1udWxsKXt2YXIgZD1jLmRlaHlkcmF0ZWQ7ZCE9PW51bGwmJmxhKGQpfX19YnJlYWs7Y2FzZSAxOTpjYXNlIDE3OmNhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmNhc2UgMjU6YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihVKDE2MykpfVd0fHx0LmZsYWdzJjUxMiYmT2godCl9Y2F0Y2goZil7c3QodCx0LnJldHVybixmKX19aWYodD09PWUpe3E9bnVsbDticmVha31pZihuPXQuc2libGluZyxuIT09bnVsbCl7bi5yZXR1cm49dC5yZXR1cm4scT1uO2JyZWFrfXE9dC5yZXR1cm59fWZ1bmN0aW9uIG95KGUpe2Zvcig7cSE9PW51bGw7KXt2YXIgdD1xO2lmKHQ9PT1lKXtxPW51bGw7YnJlYWt9dmFyIG49dC5zaWJsaW5nO2lmKG4hPT1udWxsKXtuLnJldHVybj10LnJldHVybixxPW47YnJlYWt9cT10LnJldHVybn19ZnVuY3Rpb24gaXkoZSl7Zm9yKDtxIT09bnVsbDspe3ZhciB0PXE7dHJ5e3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTp2YXIgbj10LnJldHVybjt0cnl7dWQoNCx0KX1jYXRjaChhKXtzdCh0LG4sYSl9YnJlYWs7Y2FzZSAxOnZhciByPXQuc3RhdGVOb2RlO2lmKHR5cGVvZiByLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iKXt2YXIgbz10LnJldHVybjt0cnl7ci5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGEpe3N0KHQsbyxhKX19dmFyIGk9dC5yZXR1cm47dHJ5e09oKHQpfWNhdGNoKGEpe3N0KHQsaSxhKX1icmVhaztjYXNlIDU6dmFyIGw9dC5yZXR1cm47dHJ5e09oKHQpfWNhdGNoKGEpe3N0KHQsbCxhKX19fWNhdGNoKGEpe3N0KHQsdC5yZXR1cm4sYSl9aWYodD09PWUpe3E9bnVsbDticmVha312YXIgcz10LnNpYmxpbmc7aWYocyE9PW51bGwpe3MucmV0dXJuPXQucmV0dXJuLHE9czticmVha31xPXQucmV0dXJufX12YXIgb2I9TWF0aC5jZWlsLF9jPVpyLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsYmc9WnIuUmVhY3RDdXJyZW50T3duZXIsV249WnIuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsYmU9MCxQdD1udWxsLG10PW51bGwsSXQ9MCx3bj0wLGxsPVZvKDApLFN0PTAsdmE9bnVsbCxtaT0wLGNkPTAsVGc9MCxqcz1udWxsLGZuPW51bGwsTmc9MCxUbD0xLzAsRHI9bnVsbCxTYz0hMSxMaD1udWxsLFRvPW51bGwsbXU9ITEsd289bnVsbCxFYz0wLHpzPTAsRGg9bnVsbCxWdT0tMSxLdT0wO2Z1bmN0aW9uIGxuKCl7cmV0dXJuIGJlJjY/cHQoKTpWdSE9PS0xP1Z1OlZ1PXB0KCl9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIGUubW9kZSYxP2JlJjImJkl0IT09MD9JdCYtSXQ6QmsudHJhbnNpdGlvbiE9PW51bGw/KEt1PT09MCYmKEt1PVoxKCkpLEt1KTooZT1NZSxlIT09MHx8KGU9d2luZG93LmV2ZW50LGU9ZT09PXZvaWQgMD8xNjppeChlLnR5cGUpKSxlKToxfWZ1bmN0aW9uIGxyKGUsdCxuLHIpe2lmKDUwPHpzKXRocm93IHpzPTAsRGg9bnVsbCxFcnJvcihVKDE4NSkpO0lhKGUsbixyKSwoIShiZSYyKXx8ZSE9PVB0KSYmKGU9PT1QdCYmKCEoYmUmMikmJihjZHw9biksU3Q9PT00JiZ2byhlLEl0KSksbW4oZSxyKSxuPT09MSYmYmU9PT0wJiYhKHQubW9kZSYxKSYmKFRsPXB0KCkrNTAwLGxkJiZLbygpKSl9ZnVuY3Rpb24gbW4oZSx0KXt2YXIgbj1lLmNhbGxiYWNrTm9kZTtCJChlLHQpO3ZhciByPWxjKGUsZT09PVB0P0l0OjApO2lmKHI9PT0wKW4hPT1udWxsJiZwdihuKSxlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wO2Vsc2UgaWYodD1yJi1yLGUuY2FsbGJhY2tQcmlvcml0eSE9PXQpe2lmKG4hPW51bGwmJnB2KG4pLHQ9PT0xKWUudGFnPT09MD9GayhseS5iaW5kKG51bGwsZSkpOkN4KGx5LmJpbmQobnVsbCxlKSksRGsoZnVuY3Rpb24oKXshKGJlJjYpJiZLbygpfSksbj1udWxsO2Vsc2V7c3dpdGNoKHExKHIpKXtjYXNlIDE6bj10ZzticmVhaztjYXNlIDQ6bj1RMTticmVhaztjYXNlIDE2Om49aWM7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6bj1KMTticmVhaztkZWZhdWx0Om49aWN9bj1FdyhuLG13LmJpbmQobnVsbCxlKSl9ZS5jYWxsYmFja1ByaW9yaXR5PXQsZS5jYWxsYmFja05vZGU9bn19ZnVuY3Rpb24gbXcoZSx0KXtpZihWdT0tMSxLdT0wLGJlJjYpdGhyb3cgRXJyb3IoVSgzMjcpKTt2YXIgbj1lLmNhbGxiYWNrTm9kZTtpZihtbCgpJiZlLmNhbGxiYWNrTm9kZSE9PW4pcmV0dXJuIG51bGw7dmFyIHI9bGMoZSxlPT09UHQ/SXQ6MCk7aWYocj09PTApcmV0dXJuIG51bGw7aWYociYzMHx8ciZlLmV4cGlyZWRMYW5lc3x8dCl0PUNjKGUscik7ZWxzZXt0PXI7dmFyIG89YmU7YmV8PTI7dmFyIGk9eXcoKTsoUHQhPT1lfHxJdCE9PXQpJiYoRHI9bnVsbCxUbD1wdCgpKzUwMCxhaShlLHQpKTtkbyB0cnl7c2IoKTticmVha31jYXRjaChzKXt2dyhlLHMpfXdoaWxlKCEwKTtwZygpLF9jLmN1cnJlbnQ9aSxiZT1vLG10IT09bnVsbD90PTA6KFB0PW51bGwsSXQ9MCx0PVN0KX1pZih0IT09MCl7aWYodD09PTImJihvPXVoKGUpLG8hPT0wJiYocj1vLHQ9SWgoZSxvKSkpLHQ9PT0xKXRocm93IG49dmEsYWkoZSwwKSx2byhlLHIpLG1uKGUscHQoKSksbjtpZih0PT09Nil2byhlLHIpO2Vsc2V7aWYobz1lLmN1cnJlbnQuYWx0ZXJuYXRlLCEociYzMCkmJiFpYihvKSYmKHQ9Q2MoZSxyKSx0PT09MiYmKGk9dWgoZSksaSE9PTAmJihyPWksdD1JaChlLGkpKSksdD09PTEpKXRocm93IG49dmEsYWkoZSwwKSx2byhlLHIpLG1uKGUscHQoKSksbjtzd2l0Y2goZS5maW5pc2hlZFdvcms9byxlLmZpbmlzaGVkTGFuZXM9cix0KXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKFUoMzQ1KSk7Y2FzZSAyOmVpKGUsZm4sRHIpO2JyZWFrO2Nhc2UgMzppZih2byhlLHIpLChyJjEzMDAyMzQyNCk9PT1yJiYodD1OZys1MDAtcHQoKSwxMDx0KSl7aWYobGMoZSwwKSE9PTApYnJlYWs7aWYobz1lLnN1c3BlbmRlZExhbmVzLChvJnIpIT09cil7bG4oKSxlLnBpbmdlZExhbmVzfD1lLnN1c3BlbmRlZExhbmVzJm87YnJlYWt9ZS50aW1lb3V0SGFuZGxlPXZoKGVpLmJpbmQobnVsbCxlLGZuLERyKSx0KTticmVha31laShlLGZuLERyKTticmVhaztjYXNlIDQ6aWYodm8oZSxyKSwociY0MTk0MjQwKT09PXIpYnJlYWs7Zm9yKHQ9ZS5ldmVudFRpbWVzLG89LTE7MDxyOyl7dmFyIGw9MzEtaXIocik7aT0xPDxsLGw9dFtsXSxsPm8mJihvPWwpLHImPX5pfWlmKHI9byxyPXB0KCktcixyPSgxMjA+cj8xMjA6NDgwPnI/NDgwOjEwODA+cj8xMDgwOjE5MjA+cj8xOTIwOjNlMz5yPzNlMzo0MzIwPnI/NDMyMDoxOTYwKm9iKHIvMTk2MCkpLXIsMTA8cil7ZS50aW1lb3V0SGFuZGxlPXZoKGVpLmJpbmQobnVsbCxlLGZuLERyKSxyKTticmVha31laShlLGZuLERyKTticmVhaztjYXNlIDU6ZWkoZSxmbixEcik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihVKDMyOSkpfX19cmV0dXJuIG1uKGUscHQoKSksZS5jYWxsYmFja05vZGU9PT1uP213LmJpbmQobnVsbCxlKTpudWxsfWZ1bmN0aW9uIEloKGUsdCl7dmFyIG49anM7cmV0dXJuIGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmKGFpKGUsdCkuZmxhZ3N8PTI1NiksZT1DYyhlLHQpLGUhPT0yJiYodD1mbixmbj1uLHQhPT1udWxsJiZqaCh0KSksZX1mdW5jdGlvbiBqaChlKXtmbj09PW51bGw/Zm49ZTpmbi5wdXNoLmFwcGx5KGZuLGUpfWZ1bmN0aW9uIGliKGUpe2Zvcih2YXIgdD1lOzspe2lmKHQuZmxhZ3MmMTYzODQpe3ZhciBuPXQudXBkYXRlUXVldWU7aWYobiE9PW51bGwmJihuPW4uc3RvcmVzLG4hPT1udWxsKSlmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXSxpPW8uZ2V0U25hcHNob3Q7bz1vLnZhbHVlO3RyeXtpZighc3IoaSgpLG8pKXJldHVybiExfWNhdGNoe3JldHVybiExfX19aWYobj10LmNoaWxkLHQuc3VidHJlZUZsYWdzJjE2Mzg0JiZuIT09bnVsbCluLnJldHVybj10LHQ9bjtlbHNle2lmKHQ9PT1lKWJyZWFrO2Zvcig7dC5zaWJsaW5nPT09bnVsbDspe2lmKHQucmV0dXJuPT09bnVsbHx8dC5yZXR1cm49PT1lKXJldHVybiEwO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ319cmV0dXJuITB9ZnVuY3Rpb24gdm8oZSx0KXtmb3IodCY9flRnLHQmPX5jZCxlLnN1c3BlbmRlZExhbmVzfD10LGUucGluZ2VkTGFuZXMmPX50LGU9ZS5leHBpcmF0aW9uVGltZXM7MDx0Oyl7dmFyIG49MzEtaXIodCkscj0xPDxuO2Vbbl09LTEsdCY9fnJ9fWZ1bmN0aW9uIGx5KGUpe2lmKGJlJjYpdGhyb3cgRXJyb3IoVSgzMjcpKTttbCgpO3ZhciB0PWxjKGUsMCk7aWYoISh0JjEpKXJldHVybiBtbihlLHB0KCkpLG51bGw7dmFyIG49Q2MoZSx0KTtpZihlLnRhZyE9PTAmJm49PT0yKXt2YXIgcj11aChlKTtyIT09MCYmKHQ9cixuPUloKGUscikpfWlmKG49PT0xKXRocm93IG49dmEsYWkoZSwwKSx2byhlLHQpLG1uKGUscHQoKSksbjtpZihuPT09Nil0aHJvdyBFcnJvcihVKDM0NSkpO3JldHVybiBlLmZpbmlzaGVkV29yaz1lLmN1cnJlbnQuYWx0ZXJuYXRlLGUuZmluaXNoZWRMYW5lcz10LGVpKGUsZm4sRHIpLG1uKGUscHQoKSksbnVsbH1mdW5jdGlvbiBSZyhlLHQpe3ZhciBuPWJlO2JlfD0xO3RyeXtyZXR1cm4gZSh0KX1maW5hbGx5e2JlPW4sYmU9PT0wJiYoVGw9cHQoKSs1MDAsbGQmJktvKCkpfX1mdW5jdGlvbiB2aShlKXt3byE9PW51bGwmJndvLnRhZz09PTAmJiEoYmUmNikmJm1sKCk7dmFyIHQ9YmU7YmV8PTE7dmFyIG49V24udHJhbnNpdGlvbixyPU1lO3RyeXtpZihXbi50cmFuc2l0aW9uPW51bGwsTWU9MSxlKXJldHVybiBlKCl9ZmluYWxseXtNZT1yLFduLnRyYW5zaXRpb249bixiZT10LCEoYmUmNikmJktvKCl9fWZ1bmN0aW9uIFBnKCl7d249bGwuY3VycmVudCxYZShsbCl9ZnVuY3Rpb24gYWkoZSx0KXtlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wO3ZhciBuPWUudGltZW91dEhhbmRsZTtpZihuIT09LTEmJihlLnRpbWVvdXRIYW5kbGU9LTEsTGsobikpLG10IT09bnVsbClmb3Iobj1tdC5yZXR1cm47biE9PW51bGw7KXt2YXIgcj1uO3N3aXRjaChkZyhyKSxyLnRhZyl7Y2FzZSAxOnI9ci50eXBlLmNoaWxkQ29udGV4dFR5cGVzLHIhPW51bGwmJmRjKCk7YnJlYWs7Y2FzZSAzOmtsKCksWGUocG4pLFhlKEd0KSx3ZygpO2JyZWFrO2Nhc2UgNTp4ZyhyKTticmVhaztjYXNlIDQ6a2woKTticmVhaztjYXNlIDEzOlhlKHR0KTticmVhaztjYXNlIDE5OlhlKHR0KTticmVhaztjYXNlIDEwOmdnKHIudHlwZS5fY29udGV4dCk7YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOlBnKCl9bj1uLnJldHVybn1pZihQdD1lLG10PWU9Um8oZS5jdXJyZW50LG51bGwpLEl0PXduPXQsU3Q9MCx2YT1udWxsLFRnPWNkPW1pPTAsZm49anM9bnVsbCxvaSE9PW51bGwpe2Zvcih0PTA7dDxvaS5sZW5ndGg7dCsrKWlmKG49b2lbdF0scj1uLmludGVybGVhdmVkLHIhPT1udWxsKXtuLmludGVybGVhdmVkPW51bGw7dmFyIG89ci5uZXh0LGk9bi5wZW5kaW5nO2lmKGkhPT1udWxsKXt2YXIgbD1pLm5leHQ7aS5uZXh0PW8sci5uZXh0PWx9bi5wZW5kaW5nPXJ9b2k9bnVsbH1yZXR1cm4gZX1mdW5jdGlvbiB2dyhlLHQpe2Rve3ZhciBuPW10O3RyeXtpZihwZygpLFd1LmN1cnJlbnQ9d2MseGMpe2Zvcih2YXIgcj1ydC5tZW1vaXplZFN0YXRlO3IhPT1udWxsOyl7dmFyIG89ci5xdWV1ZTtvIT09bnVsbCYmKG8ucGVuZGluZz1udWxsKSxyPXIubmV4dH14Yz0hMX1pZihnaT0wLGt0PXd0PXJ0PW51bGwsRHM9ITEscGE9MCxiZy5jdXJyZW50PW51bGwsbj09PW51bGx8fG4ucmV0dXJuPT09bnVsbCl7U3Q9MSx2YT10LG10PW51bGw7YnJlYWt9ZTp7dmFyIGk9ZSxsPW4ucmV0dXJuLHM9bixhPXQ7aWYodD1JdCxzLmZsYWdzfD0zMjc2OCxhIT09bnVsbCYmdHlwZW9mIGE9PSJvYmplY3QiJiZ0eXBlb2YgYS50aGVuPT0iZnVuY3Rpb24iKXt2YXIgdT1hLGM9cyxkPWMudGFnO2lmKCEoYy5tb2RlJjEpJiYoZD09PTB8fGQ9PT0xMXx8ZD09PTE1KSl7dmFyIGY9Yy5hbHRlcm5hdGU7Zj8oYy51cGRhdGVRdWV1ZT1mLnVwZGF0ZVF1ZXVlLGMubWVtb2l6ZWRTdGF0ZT1mLm1lbW9pemVkU3RhdGUsYy5sYW5lcz1mLmxhbmVzKTooYy51cGRhdGVRdWV1ZT1udWxsLGMubWVtb2l6ZWRTdGF0ZT1udWxsKX12YXIgaD1HdihsKTtpZihoIT09bnVsbCl7aC5mbGFncyY9LTI1NyxZdihoLGwscyxpLHQpLGgubW9kZSYxJiZLdihpLHUsdCksdD1oLGE9dTt2YXIgbT10LnVwZGF0ZVF1ZXVlO2lmKG09PT1udWxsKXt2YXIgZz1uZXcgU2V0O2cuYWRkKGEpLHQudXBkYXRlUXVldWU9Z31lbHNlIG0uYWRkKGEpO2JyZWFrIGV9ZWxzZXtpZighKHQmMSkpe0t2KGksdSx0KSxPZygpO2JyZWFrIGV9YT1FcnJvcihVKDQyNikpfX1lbHNlIGlmKFFlJiZzLm1vZGUmMSl7dmFyIF89R3YobCk7aWYoXyE9PW51bGwpeyEoXy5mbGFncyY2NTUzNikmJihfLmZsYWdzfD0yNTYpLFl2KF8sbCxzLGksdCksZmcoYmwoYSxzKSk7YnJlYWsgZX19aT1hPWJsKGEscyksU3QhPT00JiYoU3Q9MiksanM9PT1udWxsP2pzPVtpXTpqcy5wdXNoKGkpLGk9bDtkb3tzd2l0Y2goaS50YWcpe2Nhc2UgMzppLmZsYWdzfD02NTUzNix0Jj0tdCxpLmxhbmVzfD10O3ZhciB2PWV3KGksYSx0KTt6dihpLHYpO2JyZWFrIGU7Y2FzZSAxOnM9YTt2YXIgeT1pLnR5cGUseD1pLnN0YXRlTm9kZTtpZighKGkuZmxhZ3MmMTI4KSYmKHR5cGVvZiB5LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8eCE9PW51bGwmJnR5cGVvZiB4LmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYoVG89PT1udWxsfHwhVG8uaGFzKHgpKSkpe2kuZmxhZ3N8PTY1NTM2LHQmPS10LGkubGFuZXN8PXQ7dmFyIFM9dHcoaSxzLHQpO3p2KGksUyk7YnJlYWsgZX19aT1pLnJldHVybn13aGlsZShpIT09bnVsbCl9d3cobil9Y2F0Y2goayl7dD1rLG10PT09biYmbiE9PW51bGwmJihtdD1uPW4ucmV0dXJuKTtjb250aW51ZX1icmVha313aGlsZSghMCl9ZnVuY3Rpb24geXcoKXt2YXIgZT1fYy5jdXJyZW50O3JldHVybiBfYy5jdXJyZW50PXdjLGU9PT1udWxsP3djOmV9ZnVuY3Rpb24gT2coKXsoU3Q9PT0wfHxTdD09PTN8fFN0PT09MikmJihTdD00KSxQdD09PW51bGx8fCEobWkmMjY4NDM1NDU1KSYmIShjZCYyNjg0MzU0NTUpfHx2byhQdCxJdCl9ZnVuY3Rpb24gQ2MoZSx0KXt2YXIgbj1iZTtiZXw9Mjt2YXIgcj15dygpOyhQdCE9PWV8fEl0IT09dCkmJihEcj1udWxsLGFpKGUsdCkpO2RvIHRyeXtsYigpO2JyZWFrfWNhdGNoKG8pe3Z3KGUsbyl9d2hpbGUoITApO2lmKHBnKCksYmU9bixfYy5jdXJyZW50PXIsbXQhPT1udWxsKXRocm93IEVycm9yKFUoMjYxKSk7cmV0dXJuIFB0PW51bGwsSXQ9MCxTdH1mdW5jdGlvbiBsYigpe2Zvcig7bXQhPT1udWxsOyl4dyhtdCl9ZnVuY3Rpb24gc2IoKXtmb3IoO210IT09bnVsbCYmIU8kKCk7KXh3KG10KX1mdW5jdGlvbiB4dyhlKXt2YXIgdD1TdyhlLmFsdGVybmF0ZSxlLHduKTtlLm1lbW9pemVkUHJvcHM9ZS5wZW5kaW5nUHJvcHMsdD09PW51bGw/d3coZSk6bXQ9dCxiZy5jdXJyZW50PW51bGx9ZnVuY3Rpb24gd3coZSl7dmFyIHQ9ZTtkb3t2YXIgbj10LmFsdGVybmF0ZTtpZihlPXQucmV0dXJuLHQuZmxhZ3MmMzI3Njgpe2lmKG49ZWIobix0KSxuIT09bnVsbCl7bi5mbGFncyY9MzI3NjcsbXQ9bjtyZXR1cm59aWYoZSE9PW51bGwpZS5mbGFnc3w9MzI3NjgsZS5zdWJ0cmVlRmxhZ3M9MCxlLmRlbGV0aW9ucz1udWxsO2Vsc2V7U3Q9NixtdD1udWxsO3JldHVybn19ZWxzZSBpZihuPXFrKG4sdCx3biksbiE9PW51bGwpe210PW47cmV0dXJufWlmKHQ9dC5zaWJsaW5nLHQhPT1udWxsKXttdD10O3JldHVybn1tdD10PWV9d2hpbGUodCE9PW51bGwpO1N0PT09MCYmKFN0PTUpfWZ1bmN0aW9uIGVpKGUsdCxuKXt2YXIgcj1NZSxvPVduLnRyYW5zaXRpb247dHJ5e1duLnRyYW5zaXRpb249bnVsbCxNZT0xLGFiKGUsdCxuLHIpfWZpbmFsbHl7V24udHJhbnNpdGlvbj1vLE1lPXJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gYWIoZSx0LG4scil7ZG8gbWwoKTt3aGlsZSh3byE9PW51bGwpO2lmKGJlJjYpdGhyb3cgRXJyb3IoVSgzMjcpKTtuPWUuZmluaXNoZWRXb3JrO3ZhciBvPWUuZmluaXNoZWRMYW5lcztpZihuPT09bnVsbClyZXR1cm4gbnVsbDtpZihlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wLG49PT1lLmN1cnJlbnQpdGhyb3cgRXJyb3IoVSgxNzcpKTtlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wO3ZhciBpPW4ubGFuZXN8bi5jaGlsZExhbmVzO2lmKFckKGUsaSksZT09PVB0JiYobXQ9UHQ9bnVsbCxJdD0wKSwhKG4uc3VidHJlZUZsYWdzJjIwNjQpJiYhKG4uZmxhZ3MmMjA2NCl8fG11fHwobXU9ITAsRXcoaWMsZnVuY3Rpb24oKXtyZXR1cm4gbWwoKSxudWxsfSkpLGk9KG4uZmxhZ3MmMTU5OTApIT09MCxuLnN1YnRyZWVGbGFncyYxNTk5MHx8aSl7aT1Xbi50cmFuc2l0aW9uLFduLnRyYW5zaXRpb249bnVsbDt2YXIgbD1NZTtNZT0xO3ZhciBzPWJlO2JlfD00LGJnLmN1cnJlbnQ9bnVsbCxuYihlLG4pLHB3KG4sZSksVGsoZ2gpLHNjPSEhcGgsZ2g9cGg9bnVsbCxlLmN1cnJlbnQ9bixyYihuKSxBJCgpLGJlPXMsTWU9bCxXbi50cmFuc2l0aW9uPWl9ZWxzZSBlLmN1cnJlbnQ9bjtpZihtdSYmKG11PSExLHdvPWUsRWM9byksaT1lLnBlbmRpbmdMYW5lcyxpPT09MCYmKFRvPW51bGwpLEQkKG4uc3RhdGVOb2RlKSxtbihlLHB0KCkpLHQhPT1udWxsKWZvcihyPWUub25SZWNvdmVyYWJsZUVycm9yLG49MDtuPHQubGVuZ3RoO24rKylvPXRbbl0scihvLnZhbHVlLHtjb21wb25lbnRTdGFjazpvLnN0YWNrLGRpZ2VzdDpvLmRpZ2VzdH0pO2lmKFNjKXRocm93IFNjPSExLGU9TGgsTGg9bnVsbCxlO3JldHVybiBFYyYxJiZlLnRhZyE9PTAmJm1sKCksaT1lLnBlbmRpbmdMYW5lcyxpJjE/ZT09PURoP3pzKys6KHpzPTAsRGg9ZSk6enM9MCxLbygpLG51bGx9ZnVuY3Rpb24gbWwoKXtpZih3byE9PW51bGwpe3ZhciBlPXExKEVjKSx0PVduLnRyYW5zaXRpb24sbj1NZTt0cnl7aWYoV24udHJhbnNpdGlvbj1udWxsLE1lPTE2PmU/MTY6ZSx3bz09PW51bGwpdmFyIHI9ITE7ZWxzZXtpZihlPXdvLHdvPW51bGwsRWM9MCxiZSY2KXRocm93IEVycm9yKFUoMzMxKSk7dmFyIG89YmU7Zm9yKGJlfD00LHE9ZS5jdXJyZW50O3EhPT1udWxsOyl7dmFyIGk9cSxsPWkuY2hpbGQ7aWYocS5mbGFncyYxNil7dmFyIHM9aS5kZWxldGlvbnM7aWYocyE9PW51bGwpe2Zvcih2YXIgYT0wO2E8cy5sZW5ndGg7YSsrKXt2YXIgdT1zW2FdO2ZvcihxPXU7cSE9PW51bGw7KXt2YXIgYz1xO3N3aXRjaChjLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpJcyg4LGMsaSl9dmFyIGQ9Yy5jaGlsZDtpZihkIT09bnVsbClkLnJldHVybj1jLHE9ZDtlbHNlIGZvcig7cSE9PW51bGw7KXtjPXE7dmFyIGY9Yy5zaWJsaW5nLGg9Yy5yZXR1cm47aWYoZHcoYyksYz09PXUpe3E9bnVsbDticmVha31pZihmIT09bnVsbCl7Zi5yZXR1cm49aCxxPWY7YnJlYWt9cT1ofX19dmFyIG09aS5hbHRlcm5hdGU7aWYobSE9PW51bGwpe3ZhciBnPW0uY2hpbGQ7aWYoZyE9PW51bGwpe20uY2hpbGQ9bnVsbDtkb3t2YXIgXz1nLnNpYmxpbmc7Zy5zaWJsaW5nPW51bGwsZz1ffXdoaWxlKGchPT1udWxsKX19cT1pfX1pZihpLnN1YnRyZWVGbGFncyYyMDY0JiZsIT09bnVsbClsLnJldHVybj1pLHE9bDtlbHNlIGU6Zm9yKDtxIT09bnVsbDspe2lmKGk9cSxpLmZsYWdzJjIwNDgpc3dpdGNoKGkudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OklzKDksaSxpLnJldHVybil9dmFyIHY9aS5zaWJsaW5nO2lmKHYhPT1udWxsKXt2LnJldHVybj1pLnJldHVybixxPXY7YnJlYWsgZX1xPWkucmV0dXJufX12YXIgeT1lLmN1cnJlbnQ7Zm9yKHE9eTtxIT09bnVsbDspe2w9cTt2YXIgeD1sLmNoaWxkO2lmKGwuc3VidHJlZUZsYWdzJjIwNjQmJnghPT1udWxsKXgucmV0dXJuPWwscT14O2Vsc2UgZTpmb3IobD15O3EhPT1udWxsOyl7aWYocz1xLHMuZmxhZ3MmMjA0OCl0cnl7c3dpdGNoKHMudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnVkKDkscyl9fWNhdGNoKGspe3N0KHMscy5yZXR1cm4sayl9aWYocz09PWwpe3E9bnVsbDticmVhayBlfXZhciBTPXMuc2libGluZztpZihTIT09bnVsbCl7Uy5yZXR1cm49cy5yZXR1cm4scT1TO2JyZWFrIGV9cT1zLnJldHVybn19aWYoYmU9byxLbygpLFNyJiZ0eXBlb2YgU3Iub25Qb3N0Q29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXtTci5vblBvc3RDb21taXRGaWJlclJvb3QodGQsZSl9Y2F0Y2h7fXI9ITB9cmV0dXJuIHJ9ZmluYWxseXtNZT1uLFduLnRyYW5zaXRpb249dH19cmV0dXJuITF9ZnVuY3Rpb24gc3koZSx0LG4pe3Q9Ymwobix0KSx0PWV3KGUsdCwxKSxlPWJvKGUsdCwxKSx0PWxuKCksZSE9PW51bGwmJihJYShlLDEsdCksbW4oZSx0KSl9ZnVuY3Rpb24gc3QoZSx0LG4pe2lmKGUudGFnPT09MylzeShlLGUsbik7ZWxzZSBmb3IoO3QhPT1udWxsOyl7aWYodC50YWc9PT0zKXtzeSh0LGUsbik7YnJlYWt9ZWxzZSBpZih0LnRhZz09PTEpe3ZhciByPXQuc3RhdGVOb2RlO2lmKHR5cGVvZiB0LnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPT0iZnVuY3Rpb24ifHx0eXBlb2Ygci5jb21wb25lbnREaWRDYXRjaD09ImZ1bmN0aW9uIiYmKFRvPT09bnVsbHx8IVRvLmhhcyhyKSkpe2U9YmwobixlKSxlPXR3KHQsZSwxKSx0PWJvKHQsZSwxKSxlPWxuKCksdCE9PW51bGwmJihJYSh0LDEsZSksbW4odCxlKSk7YnJlYWt9fXQ9dC5yZXR1cm59fWZ1bmN0aW9uIHViKGUsdCxuKXt2YXIgcj1lLnBpbmdDYWNoZTtyIT09bnVsbCYmci5kZWxldGUodCksdD1sbigpLGUucGluZ2VkTGFuZXN8PWUuc3VzcGVuZGVkTGFuZXMmbixQdD09PWUmJihJdCZuKT09PW4mJihTdD09PTR8fFN0PT09MyYmKEl0JjEzMDAyMzQyNCk9PT1JdCYmNTAwPnB0KCktTmc/YWkoZSwwKTpUZ3w9biksbW4oZSx0KX1mdW5jdGlvbiBfdyhlLHQpe3Q9PT0wJiYoZS5tb2RlJjE/KHQ9bHUsbHU8PD0xLCEobHUmMTMwMDIzNDI0KSYmKGx1PTQxOTQzMDQpKTp0PTEpO3ZhciBuPWxuKCk7ZT1HcihlLHQpLGUhPT1udWxsJiYoSWEoZSx0LG4pLG1uKGUsbikpfWZ1bmN0aW9uIGNiKGUpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZSxuPTA7dCE9PW51bGwmJihuPXQucmV0cnlMYW5lKSxfdyhlLG4pfWZ1bmN0aW9uIGRiKGUsdCl7dmFyIG49MDtzd2l0Y2goZS50YWcpe2Nhc2UgMTM6dmFyIHI9ZS5zdGF0ZU5vZGUsbz1lLm1lbW9pemVkU3RhdGU7byE9PW51bGwmJihuPW8ucmV0cnlMYW5lKTticmVhaztjYXNlIDE5OnI9ZS5zdGF0ZU5vZGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihVKDMxNCkpfXIhPT1udWxsJiZyLmRlbGV0ZSh0KSxfdyhlLG4pfXZhciBTdztTdz1mdW5jdGlvbihlLHQsbil7aWYoZSE9PW51bGwpaWYoZS5tZW1vaXplZFByb3BzIT09dC5wZW5kaW5nUHJvcHN8fHBuLmN1cnJlbnQpaG49ITA7ZWxzZXtpZighKGUubGFuZXMmbikmJiEodC5mbGFncyYxMjgpKXJldHVybiBobj0hMSxaayhlLHQsbik7aG49ISEoZS5mbGFncyYxMzEwNzIpfWVsc2UgaG49ITEsUWUmJnQuZmxhZ3MmMTA0ODU3NiYmJHgodCxwYyx0LmluZGV4KTtzd2l0Y2godC5sYW5lcz0wLHQudGFnKXtjYXNlIDI6dmFyIHI9dC50eXBlO0h1KGUsdCksZT10LnBlbmRpbmdQcm9wczt2YXIgbz1FbCh0LEd0LmN1cnJlbnQpO2dsKHQsbiksbz1TZyhudWxsLHQscixlLG8sbik7dmFyIGk9RWcoKTtyZXR1cm4gdC5mbGFnc3w9MSx0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsJiZ0eXBlb2Ygby5yZW5kZXI9PSJmdW5jdGlvbiImJm8uJCR0eXBlb2Y9PT12b2lkIDA/KHQudGFnPTEsdC5tZW1vaXplZFN0YXRlPW51bGwsdC51cGRhdGVRdWV1ZT1udWxsLGduKHIpPyhpPSEwLGZjKHQpKTppPSExLHQubWVtb2l6ZWRTdGF0ZT1vLnN0YXRlIT09bnVsbCYmby5zdGF0ZSE9PXZvaWQgMD9vLnN0YXRlOm51bGwsdmcodCksby51cGRhdGVyPXNkLHQuc3RhdGVOb2RlPW8sby5fcmVhY3RJbnRlcm5hbHM9dCxDaCh0LHIsZSxuKSx0PWJoKG51bGwsdCxyLCEwLGksbikpOih0LnRhZz0wLFFlJiZpJiZjZyh0KSxKdChudWxsLHQsbyxuKSx0PXQuY2hpbGQpLHQ7Y2FzZSAxNjpyPXQuZWxlbWVudFR5cGU7ZTp7c3dpdGNoKEh1KGUsdCksZT10LnBlbmRpbmdQcm9wcyxvPXIuX2luaXQscj1vKHIuX3BheWxvYWQpLHQudHlwZT1yLG89dC50YWc9aGIociksZT1xbihyLGUpLG8pe2Nhc2UgMDp0PWtoKG51bGwsdCxyLGUsbik7YnJlYWsgZTtjYXNlIDE6dD1KdihudWxsLHQscixlLG4pO2JyZWFrIGU7Y2FzZSAxMTp0PVh2KG51bGwsdCxyLGUsbik7YnJlYWsgZTtjYXNlIDE0OnQ9UXYobnVsbCx0LHIscW4oci50eXBlLGUpLG4pO2JyZWFrIGV9dGhyb3cgRXJyb3IoVSgzMDYsciwiIikpfXJldHVybiB0O2Nhc2UgMDpyZXR1cm4gcj10LnR5cGUsbz10LnBlbmRpbmdQcm9wcyxvPXQuZWxlbWVudFR5cGU9PT1yP286cW4ocixvKSxraChlLHQscixvLG4pO2Nhc2UgMTpyZXR1cm4gcj10LnR5cGUsbz10LnBlbmRpbmdQcm9wcyxvPXQuZWxlbWVudFR5cGU9PT1yP286cW4ocixvKSxKdihlLHQscixvLG4pO2Nhc2UgMzplOntpZihpdyh0KSxlPT09bnVsbCl0aHJvdyBFcnJvcihVKDM4NykpO3I9dC5wZW5kaW5nUHJvcHMsaT10Lm1lbW9pemVkU3RhdGUsbz1pLmVsZW1lbnQsTngoZSx0KSx2Yyh0LHIsbnVsbCxuKTt2YXIgbD10Lm1lbW9pemVkU3RhdGU7aWYocj1sLmVsZW1lbnQsaS5pc0RlaHlkcmF0ZWQpaWYoaT17ZWxlbWVudDpyLGlzRGVoeWRyYXRlZDohMSxjYWNoZTpsLmNhY2hlLHBlbmRpbmdTdXNwZW5zZUJvdW5kYXJpZXM6bC5wZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzLHRyYW5zaXRpb25zOmwudHJhbnNpdGlvbnN9LHQudXBkYXRlUXVldWUuYmFzZVN0YXRlPWksdC5tZW1vaXplZFN0YXRlPWksdC5mbGFncyYyNTYpe289YmwoRXJyb3IoVSg0MjMpKSx0KSx0PVp2KGUsdCxyLG4sbyk7YnJlYWsgZX1lbHNlIGlmKHIhPT1vKXtvPWJsKEVycm9yKFUoNDI0KSksdCksdD1adihlLHQscixuLG8pO2JyZWFrIGV9ZWxzZSBmb3IoRW49a28odC5zdGF0ZU5vZGUuY29udGFpbmVySW5mby5maXJzdENoaWxkKSxDbj10LFFlPSEwLG5yPW51bGwsbj1BeCh0LG51bGwscixuKSx0LmNoaWxkPW47bjspbi5mbGFncz1uLmZsYWdzJi0zfDQwOTYsbj1uLnNpYmxpbmc7ZWxzZXtpZihDbCgpLHI9PT1vKXt0PVlyKGUsdCxuKTticmVhayBlfUp0KGUsdCxyLG4pfXQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDU6cmV0dXJuIE14KHQpLGU9PT1udWxsJiZfaCh0KSxyPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLGk9ZSE9PW51bGw/ZS5tZW1vaXplZFByb3BzOm51bGwsbD1vLmNoaWxkcmVuLG1oKHIsbyk/bD1udWxsOmkhPT1udWxsJiZtaChyLGkpJiYodC5mbGFnc3w9MzIpLG93KGUsdCksSnQoZSx0LGwsbiksdC5jaGlsZDtjYXNlIDY6cmV0dXJuIGU9PT1udWxsJiZfaCh0KSxudWxsO2Nhc2UgMTM6cmV0dXJuIGx3KGUsdCxuKTtjYXNlIDQ6cmV0dXJuIHlnKHQsdC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbykscj10LnBlbmRpbmdQcm9wcyxlPT09bnVsbD90LmNoaWxkPSRsKHQsbnVsbCxyLG4pOkp0KGUsdCxyLG4pLHQuY2hpbGQ7Y2FzZSAxMTpyZXR1cm4gcj10LnR5cGUsbz10LnBlbmRpbmdQcm9wcyxvPXQuZWxlbWVudFR5cGU9PT1yP286cW4ocixvKSxYdihlLHQscixvLG4pO2Nhc2UgNzpyZXR1cm4gSnQoZSx0LHQucGVuZGluZ1Byb3BzLG4pLHQuY2hpbGQ7Y2FzZSA4OnJldHVybiBKdChlLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sbiksdC5jaGlsZDtjYXNlIDEyOnJldHVybiBKdChlLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sbiksdC5jaGlsZDtjYXNlIDEwOmU6e2lmKHI9dC50eXBlLl9jb250ZXh0LG89dC5wZW5kaW5nUHJvcHMsaT10Lm1lbW9pemVkUHJvcHMsbD1vLnZhbHVlLEJlKGdjLHIuX2N1cnJlbnRWYWx1ZSksci5fY3VycmVudFZhbHVlPWwsaSE9PW51bGwpaWYoc3IoaS52YWx1ZSxsKSl7aWYoaS5jaGlsZHJlbj09PW8uY2hpbGRyZW4mJiFwbi5jdXJyZW50KXt0PVlyKGUsdCxuKTticmVhayBlfX1lbHNlIGZvcihpPXQuY2hpbGQsaSE9PW51bGwmJihpLnJldHVybj10KTtpIT09bnVsbDspe3ZhciBzPWkuZGVwZW5kZW5jaWVzO2lmKHMhPT1udWxsKXtsPWkuY2hpbGQ7Zm9yKHZhciBhPXMuZmlyc3RDb250ZXh0O2EhPT1udWxsOyl7aWYoYS5jb250ZXh0PT09cil7aWYoaS50YWc9PT0xKXthPUhyKC0xLG4mLW4pLGEudGFnPTI7dmFyIHU9aS51cGRhdGVRdWV1ZTtpZih1IT09bnVsbCl7dT11LnNoYXJlZDt2YXIgYz11LnBlbmRpbmc7Yz09PW51bGw/YS5uZXh0PWE6KGEubmV4dD1jLm5leHQsYy5uZXh0PWEpLHUucGVuZGluZz1hfX1pLmxhbmVzfD1uLGE9aS5hbHRlcm5hdGUsYSE9PW51bGwmJihhLmxhbmVzfD1uKSxTaChpLnJldHVybixuLHQpLHMubGFuZXN8PW47YnJlYWt9YT1hLm5leHR9fWVsc2UgaWYoaS50YWc9PT0xMClsPWkudHlwZT09PXQudHlwZT9udWxsOmkuY2hpbGQ7ZWxzZSBpZihpLnRhZz09PTE4KXtpZihsPWkucmV0dXJuLGw9PT1udWxsKXRocm93IEVycm9yKFUoMzQxKSk7bC5sYW5lc3w9bixzPWwuYWx0ZXJuYXRlLHMhPT1udWxsJiYocy5sYW5lc3w9biksU2gobCxuLHQpLGw9aS5zaWJsaW5nfWVsc2UgbD1pLmNoaWxkO2lmKGwhPT1udWxsKWwucmV0dXJuPWk7ZWxzZSBmb3IobD1pO2whPT1udWxsOyl7aWYobD09PXQpe2w9bnVsbDticmVha31pZihpPWwuc2libGluZyxpIT09bnVsbCl7aS5yZXR1cm49bC5yZXR1cm4sbD1pO2JyZWFrfWw9bC5yZXR1cm59aT1sfUp0KGUsdCxvLmNoaWxkcmVuLG4pLHQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDk6cmV0dXJuIG89dC50eXBlLHI9dC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sZ2wodCxuKSxvPVVuKG8pLHI9cihvKSx0LmZsYWdzfD0xLEp0KGUsdCxyLG4pLHQuY2hpbGQ7Y2FzZSAxNDpyZXR1cm4gcj10LnR5cGUsbz1xbihyLHQucGVuZGluZ1Byb3BzKSxvPXFuKHIudHlwZSxvKSxRdihlLHQscixvLG4pO2Nhc2UgMTU6cmV0dXJuIG53KGUsdCx0LnR5cGUsdC5wZW5kaW5nUHJvcHMsbik7Y2FzZSAxNzpyZXR1cm4gcj10LnR5cGUsbz10LnBlbmRpbmdQcm9wcyxvPXQuZWxlbWVudFR5cGU9PT1yP286cW4ocixvKSxIdShlLHQpLHQudGFnPTEsZ24ocik/KGU9ITAsZmModCkpOmU9ITEsZ2wodCxuKSxQeCh0LHIsbyksQ2godCxyLG8sbiksYmgobnVsbCx0LHIsITAsZSxuKTtjYXNlIDE5OnJldHVybiBzdyhlLHQsbik7Y2FzZSAyMjpyZXR1cm4gcncoZSx0LG4pfXRocm93IEVycm9yKFUoMTU2LHQudGFnKSl9O2Z1bmN0aW9uIEV3KGUsdCl7cmV0dXJuIFgxKGUsdCl9ZnVuY3Rpb24gZmIoZSx0LG4scil7dGhpcy50YWc9ZSx0aGlzLmtleT1uLHRoaXMuc2libGluZz10aGlzLmNoaWxkPXRoaXMucmV0dXJuPXRoaXMuc3RhdGVOb2RlPXRoaXMudHlwZT10aGlzLmVsZW1lbnRUeXBlPW51bGwsdGhpcy5pbmRleD0wLHRoaXMucmVmPW51bGwsdGhpcy5wZW5kaW5nUHJvcHM9dCx0aGlzLmRlcGVuZGVuY2llcz10aGlzLm1lbW9pemVkU3RhdGU9dGhpcy51cGRhdGVRdWV1ZT10aGlzLm1lbW9pemVkUHJvcHM9bnVsbCx0aGlzLm1vZGU9cix0aGlzLnN1YnRyZWVGbGFncz10aGlzLmZsYWdzPTAsdGhpcy5kZWxldGlvbnM9bnVsbCx0aGlzLmNoaWxkTGFuZXM9dGhpcy5sYW5lcz0wLHRoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24gRm4oZSx0LG4scil7cmV0dXJuIG5ldyBmYihlLHQsbixyKX1mdW5jdGlvbiBBZyhlKXtyZXR1cm4gZT1lLnByb3RvdHlwZSwhKCFlfHwhZS5pc1JlYWN0Q29tcG9uZW50KX1mdW5jdGlvbiBoYihlKXtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIilyZXR1cm4gQWcoZSk/MTowO2lmKGUhPW51bGwpe2lmKGU9ZS4kJHR5cGVvZixlPT09WnApcmV0dXJuIDExO2lmKGU9PT1xcClyZXR1cm4gMTR9cmV0dXJuIDJ9ZnVuY3Rpb24gUm8oZSx0KXt2YXIgbj1lLmFsdGVybmF0ZTtyZXR1cm4gbj09PW51bGw/KG49Rm4oZS50YWcsdCxlLmtleSxlLm1vZGUpLG4uZWxlbWVudFR5cGU9ZS5lbGVtZW50VHlwZSxuLnR5cGU9ZS50eXBlLG4uc3RhdGVOb2RlPWUuc3RhdGVOb2RlLG4uYWx0ZXJuYXRlPWUsZS5hbHRlcm5hdGU9bik6KG4ucGVuZGluZ1Byb3BzPXQsbi50eXBlPWUudHlwZSxuLmZsYWdzPTAsbi5zdWJ0cmVlRmxhZ3M9MCxuLmRlbGV0aW9ucz1udWxsKSxuLmZsYWdzPWUuZmxhZ3MmMTQ2ODAwNjQsbi5jaGlsZExhbmVzPWUuY2hpbGRMYW5lcyxuLmxhbmVzPWUubGFuZXMsbi5jaGlsZD1lLmNoaWxkLG4ubWVtb2l6ZWRQcm9wcz1lLm1lbW9pemVkUHJvcHMsbi5tZW1vaXplZFN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxuLnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdD1lLmRlcGVuZGVuY2llcyxuLmRlcGVuZGVuY2llcz10PT09bnVsbD9udWxsOntsYW5lczp0LmxhbmVzLGZpcnN0Q29udGV4dDp0LmZpcnN0Q29udGV4dH0sbi5zaWJsaW5nPWUuc2libGluZyxuLmluZGV4PWUuaW5kZXgsbi5yZWY9ZS5yZWYsbn1mdW5jdGlvbiBHdShlLHQsbixyLG8saSl7dmFyIGw9MjtpZihyPWUsdHlwZW9mIGU9PSJmdW5jdGlvbiIpQWcoZSkmJihsPTEpO2Vsc2UgaWYodHlwZW9mIGU9PSJzdHJpbmciKWw9NTtlbHNlIGU6c3dpdGNoKGUpe2Nhc2UgUWk6cmV0dXJuIHVpKG4uY2hpbGRyZW4sbyxpLHQpO2Nhc2UgSnA6bD04LG98PTg7YnJlYWs7Y2FzZSBZZjpyZXR1cm4gZT1GbigxMixuLHQsb3wyKSxlLmVsZW1lbnRUeXBlPVlmLGUubGFuZXM9aSxlO2Nhc2UgWGY6cmV0dXJuIGU9Rm4oMTMsbix0LG8pLGUuZWxlbWVudFR5cGU9WGYsZS5sYW5lcz1pLGU7Y2FzZSBRZjpyZXR1cm4gZT1GbigxOSxuLHQsbyksZS5lbGVtZW50VHlwZT1RZixlLmxhbmVzPWksZTtjYXNlIE8xOnJldHVybiBkZChuLG8saSx0KTtkZWZhdWx0OmlmKHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwpc3dpdGNoKGUuJCR0eXBlb2Ype2Nhc2UgUjE6bD0xMDticmVhayBlO2Nhc2UgUDE6bD05O2JyZWFrIGU7Y2FzZSBacDpsPTExO2JyZWFrIGU7Y2FzZSBxcDpsPTE0O2JyZWFrIGU7Y2FzZSBobzpsPTE2LHI9bnVsbDticmVhayBlfXRocm93IEVycm9yKFUoMTMwLGU9PW51bGw/ZTp0eXBlb2YgZSwiIikpfXJldHVybiB0PUZuKGwsbix0LG8pLHQuZWxlbWVudFR5cGU9ZSx0LnR5cGU9cix0LmxhbmVzPWksdH1mdW5jdGlvbiB1aShlLHQsbixyKXtyZXR1cm4gZT1Gbig3LGUscix0KSxlLmxhbmVzPW4sZX1mdW5jdGlvbiBkZChlLHQsbixyKXtyZXR1cm4gZT1GbigyMixlLHIsdCksZS5lbGVtZW50VHlwZT1PMSxlLmxhbmVzPW4sZS5zdGF0ZU5vZGU9e2lzSGlkZGVuOiExfSxlfWZ1bmN0aW9uIEVmKGUsdCxuKXtyZXR1cm4gZT1Gbig2LGUsbnVsbCx0KSxlLmxhbmVzPW4sZX1mdW5jdGlvbiBDZihlLHQsbil7cmV0dXJuIHQ9Rm4oNCxlLmNoaWxkcmVuIT09bnVsbD9lLmNoaWxkcmVuOltdLGUua2V5LHQpLHQubGFuZXM9bix0LnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzplLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246ZS5pbXBsZW1lbnRhdGlvbn0sdH1mdW5jdGlvbiBwYihlLHQsbixyLG8pe3RoaXMudGFnPXQsdGhpcy5jb250YWluZXJJbmZvPWUsdGhpcy5maW5pc2hlZFdvcms9dGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGwsdGhpcy50aW1lb3V0SGFuZGxlPS0xLHRoaXMuY2FsbGJhY2tOb2RlPXRoaXMucGVuZGluZ0NvbnRleHQ9dGhpcy5jb250ZXh0PW51bGwsdGhpcy5jYWxsYmFja1ByaW9yaXR5PTAsdGhpcy5ldmVudFRpbWVzPXJmKDApLHRoaXMuZXhwaXJhdGlvblRpbWVzPXJmKC0xKSx0aGlzLmVudGFuZ2xlZExhbmVzPXRoaXMuZmluaXNoZWRMYW5lcz10aGlzLm11dGFibGVSZWFkTGFuZXM9dGhpcy5leHBpcmVkTGFuZXM9dGhpcy5waW5nZWRMYW5lcz10aGlzLnN1c3BlbmRlZExhbmVzPXRoaXMucGVuZGluZ0xhbmVzPTAsdGhpcy5lbnRhbmdsZW1lbnRzPXJmKDApLHRoaXMuaWRlbnRpZmllclByZWZpeD1yLHRoaXMub25SZWNvdmVyYWJsZUVycm9yPW8sdGhpcy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPW51bGx9ZnVuY3Rpb24gTWcoZSx0LG4scixvLGksbCxzLGEpe3JldHVybiBlPW5ldyBwYihlLHQsbixzLGEpLHQ9PT0xPyh0PTEsaT09PSEwJiYodHw9OCkpOnQ9MCxpPUZuKDMsbnVsbCxudWxsLHQpLGUuY3VycmVudD1pLGkuc3RhdGVOb2RlPWUsaS5tZW1vaXplZFN0YXRlPXtlbGVtZW50OnIsaXNEZWh5ZHJhdGVkOm4sY2FjaGU6bnVsbCx0cmFuc2l0aW9uczpudWxsLHBlbmRpbmdTdXNwZW5zZUJvdW5kYXJpZXM6bnVsbH0sdmcoaSksZX1mdW5jdGlvbiBnYihlLHQsbil7dmFyIHI9Mzxhcmd1bWVudHMubGVuZ3RoJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOlhpLGtleTpyPT1udWxsP251bGw6IiIrcixjaGlsZHJlbjplLGNvbnRhaW5lckluZm86dCxpbXBsZW1lbnRhdGlvbjpufX1mdW5jdGlvbiBDdyhlKXtpZighZSlyZXR1cm4gTG87ZT1lLl9yZWFjdEludGVybmFscztlOntpZigkaShlKSE9PWV8fGUudGFnIT09MSl0aHJvdyBFcnJvcihVKDE3MCkpO3ZhciB0PWU7ZG97c3dpdGNoKHQudGFnKXtjYXNlIDM6dD10LnN0YXRlTm9kZS5jb250ZXh0O2JyZWFrIGU7Y2FzZSAxOmlmKGduKHQudHlwZSkpe3Q9dC5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7YnJlYWsgZX19dD10LnJldHVybn13aGlsZSh0IT09bnVsbCk7dGhyb3cgRXJyb3IoVSgxNzEpKX1pZihlLnRhZz09PTEpe3ZhciBuPWUudHlwZTtpZihnbihuKSlyZXR1cm4gRXgoZSxuLHQpfXJldHVybiB0fWZ1bmN0aW9uICR3KGUsdCxuLHIsbyxpLGwscyxhKXtyZXR1cm4gZT1NZyhuLHIsITAsZSxvLGksbCxzLGEpLGUuY29udGV4dD1DdyhudWxsKSxuPWUuY3VycmVudCxyPWxuKCksbz1ObyhuKSxpPUhyKHIsbyksaS5jYWxsYmFjaz10Pz9udWxsLGJvKG4saSxvKSxlLmN1cnJlbnQubGFuZXM9byxJYShlLG8sciksbW4oZSxyKSxlfWZ1bmN0aW9uIGZkKGUsdCxuLHIpe3ZhciBvPXQuY3VycmVudCxpPWxuKCksbD1ObyhvKTtyZXR1cm4gbj1DdyhuKSx0LmNvbnRleHQ9PT1udWxsP3QuY29udGV4dD1uOnQucGVuZGluZ0NvbnRleHQ9bix0PUhyKGksbCksdC5wYXlsb2FkPXtlbGVtZW50OmV9LHI9cj09PXZvaWQgMD9udWxsOnIsciE9PW51bGwmJih0LmNhbGxiYWNrPXIpLGU9Ym8obyx0LGwpLGUhPT1udWxsJiYobHIoZSxvLGwsaSksQnUoZSxvLGwpKSxsfWZ1bmN0aW9uICRjKGUpe2lmKGU9ZS5jdXJyZW50LCFlLmNoaWxkKXJldHVybiBudWxsO3N3aXRjaChlLmNoaWxkLnRhZyl7Y2FzZSA1OnJldHVybiBlLmNoaWxkLnN0YXRlTm9kZTtkZWZhdWx0OnJldHVybiBlLmNoaWxkLnN0YXRlTm9kZX19ZnVuY3Rpb24gYXkoZSx0KXtpZihlPWUubWVtb2l6ZWRTdGF0ZSxlIT09bnVsbCYmZS5kZWh5ZHJhdGVkIT09bnVsbCl7dmFyIG49ZS5yZXRyeUxhbmU7ZS5yZXRyeUxhbmU9biE9PTAmJm48dD9uOnR9fWZ1bmN0aW9uIExnKGUsdCl7YXkoZSx0KSwoZT1lLmFsdGVybmF0ZSkmJmF5KGUsdCl9ZnVuY3Rpb24gbWIoKXtyZXR1cm4gbnVsbH12YXIga3c9dHlwZW9mIHJlcG9ydEVycm9yPT0iZnVuY3Rpb24iP3JlcG9ydEVycm9yOmZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoZSl9O2Z1bmN0aW9uIERnKGUpe3RoaXMuX2ludGVybmFsUm9vdD1lfWhkLnByb3RvdHlwZS5yZW5kZXI9RGcucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcm5hbFJvb3Q7aWYodD09PW51bGwpdGhyb3cgRXJyb3IoVSg0MDkpKTtmZChlLHQsbnVsbCxudWxsKX07aGQucHJvdG90eXBlLnVubW91bnQ9RGcucHJvdG90eXBlLnVubW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pbnRlcm5hbFJvb3Q7aWYoZSE9PW51bGwpe3RoaXMuX2ludGVybmFsUm9vdD1udWxsO3ZhciB0PWUuY29udGFpbmVySW5mbzt2aShmdW5jdGlvbigpe2ZkKG51bGwsZSxudWxsLG51bGwpfSksdFtLcl09bnVsbH19O2Z1bmN0aW9uIGhkKGUpe3RoaXMuX2ludGVybmFsUm9vdD1lfWhkLnByb3RvdHlwZS51bnN0YWJsZV9zY2hlZHVsZUh5ZHJhdGlvbj1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD1ueCgpO2U9e2Jsb2NrZWRPbjpudWxsLHRhcmdldDplLHByaW9yaXR5OnR9O2Zvcih2YXIgbj0wO248bW8ubGVuZ3RoJiZ0IT09MCYmdDxtb1tuXS5wcmlvcml0eTtuKyspO21vLnNwbGljZShuLDAsZSksbj09PTAmJm94KGUpfX07ZnVuY3Rpb24gSWcoZSl7cmV0dXJuISghZXx8ZS5ub2RlVHlwZSE9PTEmJmUubm9kZVR5cGUhPT05JiZlLm5vZGVUeXBlIT09MTEpfWZ1bmN0aW9uIHBkKGUpe3JldHVybiEoIWV8fGUubm9kZVR5cGUhPT0xJiZlLm5vZGVUeXBlIT09OSYmZS5ub2RlVHlwZSE9PTExJiYoZS5ub2RlVHlwZSE9PTh8fGUubm9kZVZhbHVlIT09IiByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSAiKSl9ZnVuY3Rpb24gdXkoKXt9ZnVuY3Rpb24gdmIoZSx0LG4scixvKXtpZihvKXtpZih0eXBlb2Ygcj09ImZ1bmN0aW9uIil7dmFyIGk9cjtyPWZ1bmN0aW9uKCl7dmFyIHU9JGMobCk7aS5jYWxsKHUpfX12YXIgbD0kdyh0LHIsZSwwLG51bGwsITEsITEsIiIsdXkpO3JldHVybiBlLl9yZWFjdFJvb3RDb250YWluZXI9bCxlW0tyXT1sLmN1cnJlbnQsdWEoZS5ub2RlVHlwZT09PTg/ZS5wYXJlbnROb2RlOmUpLHZpKCksbH1mb3IoO289ZS5sYXN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQobyk7aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpe3ZhciBzPXI7cj1mdW5jdGlvbigpe3ZhciB1PSRjKGEpO3MuY2FsbCh1KX19dmFyIGE9TWcoZSwwLCExLG51bGwsbnVsbCwhMSwhMSwiIix1eSk7cmV0dXJuIGUuX3JlYWN0Um9vdENvbnRhaW5lcj1hLGVbS3JdPWEuY3VycmVudCx1YShlLm5vZGVUeXBlPT09OD9lLnBhcmVudE5vZGU6ZSksdmkoZnVuY3Rpb24oKXtmZCh0LGEsbixyKX0pLGF9ZnVuY3Rpb24gZ2QoZSx0LG4scixvKXt2YXIgaT1uLl9yZWFjdFJvb3RDb250YWluZXI7aWYoaSl7dmFyIGw9aTtpZih0eXBlb2Ygbz09ImZ1bmN0aW9uIil7dmFyIHM9bztvPWZ1bmN0aW9uKCl7dmFyIGE9JGMobCk7cy5jYWxsKGEpfX1mZCh0LGwsZSxvKX1lbHNlIGw9dmIobix0LGUsbyxyKTtyZXR1cm4gJGMobCl9ZXg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUudGFnKXtjYXNlIDM6dmFyIHQ9ZS5zdGF0ZU5vZGU7aWYodC5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXt2YXIgbj0kcyh0LnBlbmRpbmdMYW5lcyk7biE9PTAmJihuZyh0LG58MSksbW4odCxwdCgpKSwhKGJlJjYpJiYoVGw9cHQoKSs1MDAsS28oKSkpfWJyZWFrO2Nhc2UgMTM6dmkoZnVuY3Rpb24oKXt2YXIgcj1HcihlLDEpO2lmKHIhPT1udWxsKXt2YXIgbz1sbigpO2xyKHIsZSwxLG8pfX0pLExnKGUsMSl9fTtyZz1mdW5jdGlvbihlKXtpZihlLnRhZz09PTEzKXt2YXIgdD1HcihlLDEzNDIxNzcyOCk7aWYodCE9PW51bGwpe3ZhciBuPWxuKCk7bHIodCxlLDEzNDIxNzcyOCxuKX1MZyhlLDEzNDIxNzcyOCl9fTt0eD1mdW5jdGlvbihlKXtpZihlLnRhZz09PTEzKXt2YXIgdD1ObyhlKSxuPUdyKGUsdCk7aWYobiE9PW51bGwpe3ZhciByPWxuKCk7bHIobixlLHQscil9TGcoZSx0KX19O254PWZ1bmN0aW9uKCl7cmV0dXJuIE1lfTtyeD1mdW5jdGlvbihlLHQpe3ZhciBuPU1lO3RyeXtyZXR1cm4gTWU9ZSx0KCl9ZmluYWxseXtNZT1ufX07bGg9ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaCh0KXtjYXNlImlucHV0IjppZihxZihlLG4pLHQ9bi5uYW1lLG4udHlwZT09PSJyYWRpbyImJnQhPW51bGwpe2ZvcihuPWU7bi5wYXJlbnROb2RlOyluPW4ucGFyZW50Tm9kZTtmb3Iobj1uLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9IitKU09OLnN0cmluZ2lmeSgiIit0KSsnXVt0eXBlPSJyYWRpbyJdJyksdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO2lmKHIhPT1lJiZyLmZvcm09PT1lLmZvcm0pe3ZhciBvPWlkKHIpO2lmKCFvKXRocm93IEVycm9yKFUoOTApKTtNMShyKSxxZihyLG8pfX19YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6RDEoZSxuKTticmVhaztjYXNlInNlbGVjdCI6dD1uLnZhbHVlLHQhPW51bGwmJmRsKGUsISFuLm11bHRpcGxlLHQsITEpfX07VTE9Umc7SDE9dmk7dmFyIHliPXt1c2luZ0NsaWVudEVudHJ5UG9pbnQ6ITEsRXZlbnRzOlt6YSxlbCxpZCxCMSxXMSxSZ119LGhzPXtmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpyaSxidW5kbGVUeXBlOjAsdmVyc2lvbjoiMTguMi4wIixyZW5kZXJlclBhY2thZ2VOYW1lOiJyZWFjdC1kb20ifSx4Yj17YnVuZGxlVHlwZTpocy5idW5kbGVUeXBlLHZlcnNpb246aHMudmVyc2lvbixyZW5kZXJlclBhY2thZ2VOYW1lOmhzLnJlbmRlcmVyUGFja2FnZU5hbWUscmVuZGVyZXJDb25maWc6aHMucmVuZGVyZXJDb25maWcsb3ZlcnJpZGVIb29rU3RhdGU6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzOm51bGwsb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzUmVuYW1lUGF0aDpudWxsLHNldEVycm9ySGFuZGxlcjpudWxsLHNldFN1c3BlbnNlSGFuZGxlcjpudWxsLHNjaGVkdWxlVXBkYXRlOm51bGwsY3VycmVudERpc3BhdGNoZXJSZWY6WnIuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1HMShlKSxlPT09bnVsbD9udWxsOmUuc3RhdGVOb2RlfSxmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpocy5maW5kRmliZXJCeUhvc3RJbnN0YW5jZXx8bWIsZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOm51bGwsc2NoZWR1bGVSZWZyZXNoOm51bGwsc2NoZWR1bGVSb290Om51bGwsc2V0UmVmcmVzaEhhbmRsZXI6bnVsbCxnZXRDdXJyZW50RmliZXI6bnVsbCxyZWNvbmNpbGVyVmVyc2lvbjoiMTguMi4wLW5leHQtOWUzYjc3MmI4LTIwMjIwNjA4In07aWYodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXzwidSIpe3ZhciB2dT1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYoIXZ1LmlzRGlzYWJsZWQmJnZ1LnN1cHBvcnRzRmliZXIpdHJ5e3RkPXZ1LmluamVjdCh4YiksU3I9dnV9Y2F0Y2h7fX1Qbi5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD15YjtQbi5jcmVhdGVQb3J0YWw9ZnVuY3Rpb24oZSx0KXt2YXIgbj0yPGFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbDtpZighSWcodCkpdGhyb3cgRXJyb3IoVSgyMDApKTtyZXR1cm4gZ2IoZSx0LG51bGwsbil9O1BuLmNyZWF0ZVJvb3Q9ZnVuY3Rpb24oZSx0KXtpZighSWcoZSkpdGhyb3cgRXJyb3IoVSgyOTkpKTt2YXIgbj0hMSxyPSIiLG89a3c7cmV0dXJuIHQhPW51bGwmJih0LnVuc3RhYmxlX3N0cmljdE1vZGU9PT0hMCYmKG49ITApLHQuaWRlbnRpZmllclByZWZpeCE9PXZvaWQgMCYmKHI9dC5pZGVudGlmaWVyUHJlZml4KSx0Lm9uUmVjb3ZlcmFibGVFcnJvciE9PXZvaWQgMCYmKG89dC5vblJlY292ZXJhYmxlRXJyb3IpKSx0PU1nKGUsMSwhMSxudWxsLG51bGwsbiwhMSxyLG8pLGVbS3JdPXQuY3VycmVudCx1YShlLm5vZGVUeXBlPT09OD9lLnBhcmVudE5vZGU6ZSksbmV3IERnKHQpfTtQbi5maW5kRE9NTm9kZT1mdW5jdGlvbihlKXtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKGUubm9kZVR5cGU9PT0xKXJldHVybiBlO3ZhciB0PWUuX3JlYWN0SW50ZXJuYWxzO2lmKHQ9PT12b2lkIDApdGhyb3cgdHlwZW9mIGUucmVuZGVyPT0iZnVuY3Rpb24iP0Vycm9yKFUoMTg4KSk6KGU9T2JqZWN0LmtleXMoZSkuam9pbigiLCIpLEVycm9yKFUoMjY4LGUpKSk7cmV0dXJuIGU9RzEodCksZT1lPT09bnVsbD9udWxsOmUuc3RhdGVOb2RlLGV9O1BuLmZsdXNoU3luYz1mdW5jdGlvbihlKXtyZXR1cm4gdmkoZSl9O1BuLmh5ZHJhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKCFwZCh0KSl0aHJvdyBFcnJvcihVKDIwMCkpO3JldHVybiBnZChudWxsLGUsdCwhMCxuKX07UG4uaHlkcmF0ZVJvb3Q9ZnVuY3Rpb24oZSx0LG4pe2lmKCFJZyhlKSl0aHJvdyBFcnJvcihVKDQwNSkpO3ZhciByPW4hPW51bGwmJm4uaHlkcmF0ZWRTb3VyY2VzfHxudWxsLG89ITEsaT0iIixsPWt3O2lmKG4hPW51bGwmJihuLnVuc3RhYmxlX3N0cmljdE1vZGU9PT0hMCYmKG89ITApLG4uaWRlbnRpZmllclByZWZpeCE9PXZvaWQgMCYmKGk9bi5pZGVudGlmaWVyUHJlZml4KSxuLm9uUmVjb3ZlcmFibGVFcnJvciE9PXZvaWQgMCYmKGw9bi5vblJlY292ZXJhYmxlRXJyb3IpKSx0PSR3KHQsbnVsbCxlLDEsbj8/bnVsbCxvLCExLGksbCksZVtLcl09dC5jdXJyZW50LHVhKGUpLHIpZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyluPXJbZV0sbz1uLl9nZXRWZXJzaW9uLG89byhuLl9zb3VyY2UpLHQubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT09bnVsbD90Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9W24sb106dC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2gobixvKTtyZXR1cm4gbmV3IGhkKHQpfTtQbi5yZW5kZXI9ZnVuY3Rpb24oZSx0LG4pe2lmKCFwZCh0KSl0aHJvdyBFcnJvcihVKDIwMCkpO3JldHVybiBnZChudWxsLGUsdCwhMSxuKX07UG4udW5tb3VudENvbXBvbmVudEF0Tm9kZT1mdW5jdGlvbihlKXtpZighcGQoZSkpdGhyb3cgRXJyb3IoVSg0MCkpO3JldHVybiBlLl9yZWFjdFJvb3RDb250YWluZXI/KHZpKGZ1bmN0aW9uKCl7Z2QobnVsbCxudWxsLGUsITEsZnVuY3Rpb24oKXtlLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbCxlW0tyXT1udWxsfSl9KSwhMCk6ITF9O1BuLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPVJnO1BuLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFwZChuKSl0aHJvdyBFcnJvcihVKDIwMCkpO2lmKGU9PW51bGx8fGUuX3JlYWN0SW50ZXJuYWxzPT09dm9pZCAwKXRocm93IEVycm9yKFUoMzgpKTtyZXR1cm4gZ2QoZSx0LG4sITEscil9O1BuLnZlcnNpb249IjE4LjIuMC1uZXh0LTllM2I3NzJiOC0yMDIyMDYwOCI7ZnVuY3Rpb24gYncoKXtpZighKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18+InUifHx0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFIT0iZnVuY3Rpb24iKSl0cnl7X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGJ3KX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfX1idygpLCQxLmV4cG9ydHM9UG47dmFyIE5yPSQxLmV4cG9ydHM7Y29uc3QgVHc9TGEoTnIpLHdiPWcxKHtfX3Byb3RvX186bnVsbCxkZWZhdWx0OlR3fSxbTnJdKTt2YXIgY3k9TnI7S2YuY3JlYXRlUm9vdD1jeS5jcmVhdGVSb290LEtmLmh5ZHJhdGVSb290PWN5Lmh5ZHJhdGVSb290O3ZhciBOdz17ZXhwb3J0czp7fX0sbWQ9e307LyoqCiAqIEBsaWNlbnNlIFJlYWN0CiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi92YXIgX2I9cCxTYj1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IiksRWI9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSxDYj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LCRiPV9iLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLGtiPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gUncoZSx0LG4pe3ZhciByLG89e30saT1udWxsLGw9bnVsbDtuIT09dm9pZCAwJiYoaT0iIituKSx0LmtleSE9PXZvaWQgMCYmKGk9IiIrdC5rZXkpLHQucmVmIT09dm9pZCAwJiYobD10LnJlZik7Zm9yKHIgaW4gdClDYi5jYWxsKHQscikmJiFrYi5oYXNPd25Qcm9wZXJ0eShyKSYmKG9bcl09dFtyXSk7aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gdD1lLmRlZmF1bHRQcm9wcyx0KW9bcl09PT12b2lkIDAmJihvW3JdPXRbcl0pO3JldHVybnskJHR5cGVvZjpTYix0eXBlOmUsa2V5OmkscmVmOmwscHJvcHM6byxfb3duZXI6JGIuY3VycmVudH19bWQuRnJhZ21lbnQ9RWI7bWQuanN4PVJ3O21kLmpzeHM9Unc7TncuZXhwb3J0cz1tZDt2YXIgdz1Ody5leHBvcnRzO2Z1bmN0aW9uIHpoKGUsdCl7KHQ9PW51bGx8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gamcoZSx0KXtpZihlKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIHpoKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKG49PT0iT2JqZWN0IiYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxuPT09Ik1hcCJ8fG49PT0iU2V0IilyZXR1cm4gQXJyYXkuZnJvbShlKTtpZihuPT09IkFyZ3VtZW50cyJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiB6aChlLHQpfX1mdW5jdGlvbiB6ZyhlLHQpe3ZhciBuPXR5cGVvZiBTeW1ib2w8InUiJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheShlKXx8KG49amcoZSkpfHx0JiZlJiZ0eXBlb2YgZS5sZW5ndGg9PSJudW1iZXIiKXtuJiYoZT1uKTt2YXIgcj0wLG89ZnVuY3Rpb24oKXt9O3JldHVybntzOm8sbjpmdW5jdGlvbigpe3JldHVybiByPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtyKytdfX0sZTpmdW5jdGlvbihhKXt0aHJvdyBhfSxmOm99fXRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfXZhciBpPSEwLGw9ITEscztyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGE9bi5uZXh0KCk7cmV0dXJuIGk9YS5kb25lLGF9LGU6ZnVuY3Rpb24oYSl7bD0hMCxzPWF9LGY6ZnVuY3Rpb24oKXt0cnl7IWkmJm4ucmV0dXJuIT1udWxsJiZuLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBzfX19fWZ1bmN0aW9uIFB3KGUpe3JldHVybiBlLmxlbmd0aD4wfXZhciBCYT1PYmplY3QuZnJlZXplKHtraW5kOiJvayIsdmFsdWU6dm9pZCAwfSk7ZnVuY3Rpb24gV2EoZSl7cmV0dXJuIGU9PT12b2lkIDA/QmE6e2tpbmQ6Im9rIix2YWx1ZTplfX1mdW5jdGlvbiBDcihlKXtyZXR1cm57a2luZDoiZXJyIixlcnJvcjplfX1mdW5jdGlvbiBCbChlKXtyZXR1cm4gZT09PUJhfHxlLmtpbmQ9PT0ib2sifWZ1bmN0aW9uIEZnKGUpe3JldHVybiBlIT09QmEmJmUua2luZD09PSJlcnIifWZ1bmN0aW9uIE93KGUpe3ZhciB0PVtdLG49W10scj16ZyhlKSxvO3RyeXtmb3Ioci5zKCk7IShvPXIubigpKS5kb25lOyl7dmFyIGk9by52YWx1ZTtCbChpKT90LnB1c2goaS52YWx1ZSk6bi5wdXNoKGkuZXJyb3IpfX1jYXRjaChsKXtyLmUobCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gUHcobik/Q3Iobik6V2EodCl9ZnVuY3Rpb24gYmIoZSl7cmV0dXJuIE93KGUpfWZ1bmN0aW9uIFRiKGUpe3ZhciB0PVtdLG49emcoZSkscjt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7RmcobykmJnQucHVzaChvLmVycm9yKX19Y2F0Y2goaSl7bi5lKGkpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIFB3KHQpP0NyKHQpOkJhfWZ1bmN0aW9uIE5iKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgcj1XYSh0KSxvPTA7bzxuLmxlbmd0aCYmQmwocik7KytvKXI9ZShyLnZhbHVlLG5bb10sbyk7cmV0dXJuIHJ9fWZ1bmN0aW9uIFJiKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQmwodCk/V2EoZSh0LnZhbHVlKSk6dH19ZnVuY3Rpb24gUGIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBCbCh0KT9lKHQudmFsdWUpOnR9fWZ1bmN0aW9uIE9iKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRmcodCk/Q3IoZSh0LmVycm9yKSk6dH19ZnVuY3Rpb24gQWIoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUobik/V2Eobik6Q3IodChuKSl9fXZhciBNYj1mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gQmwocik/dChyLnZhbHVlKT9yOkNyKG4oci52YWx1ZSkpOnJ9fSxGcz1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCx2b2lkT2s6QmEsb2s6V2EsZXJyOkNyLGlzT2s6QmwsaXNFcnI6RmcsYWxsVDpPdyxhbGw6YmIsYWxsVjpUYixmbGF0TWFwUmVkdWNlOk5iLG1hcDpSYixmbGF0TWFwOlBiLG1hcEVycjpPYixmcm9tUHJlZGljYXRlOkFiLGZpbHRlck9yRWxzZTpNYn0pO2Z1bmN0aW9uIExiKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHpoKGUpfWZ1bmN0aW9uIERiKGUpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZlW1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fGVbIkBAaXRlcmF0b3IiXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbShlKX1mdW5jdGlvbiBJYigpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gamIoZSl7cmV0dXJuIExiKGUpfHxEYihlKXx8amcoZSl8fEliKCl9ZnVuY3Rpb24gbWUoZSl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4gbWU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG1lKGUpfWZ1bmN0aW9uIHpiKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbClyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYobiE9PXZvaWQgMCl7dmFyIHI9bi5jYWxsKGUsdHx8ImRlZmF1bHQiKTtpZih0eXBlb2YgciE9Im9iamVjdCIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4odD09PSJzdHJpbmciP1N0cmluZzpOdW1iZXIpKGUpfWZ1bmN0aW9uIEF3KGUpe3ZhciB0PXpiKGUsInN0cmluZyIpO3JldHVybiB0eXBlb2YgdD09InN5bWJvbCI/dDpTdHJpbmcodCl9ZnVuY3Rpb24gQWUoZSx0LG4pe3JldHVybiB0PUF3KHQpLHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gZHkoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKGZ1bmN0aW9uKG8pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbykuZW51bWVyYWJsZX0pKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBObChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF0hPW51bGw/YXJndW1lbnRzW3RdOnt9O3QlMj9keShPYmplY3QobiksITApLmZvckVhY2goZnVuY3Rpb24ocil7QWUoZSxyLG5bcl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6ZHkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHIpKX0pfXJldHVybiBlfWZ1bmN0aW9uIEZiKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9ZnVuY3Rpb24gQmIoZSx0KXt2YXIgbj1lPT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG4hPW51bGwpe3ZhciByLG8saSxsLHM9W10sYT0hMCx1PSExO3RyeXtpZihpPShuPW4uY2FsbChlKSkubmV4dCx0PT09MCl7aWYoT2JqZWN0KG4pIT09bilyZXR1cm47YT0hMX1lbHNlIGZvcig7IShhPShyPWkuY2FsbChuKSkuZG9uZSkmJihzLnB1c2goci52YWx1ZSkscy5sZW5ndGghPT10KTthPSEwKTt9Y2F0Y2goYyl7dT0hMCxvPWN9ZmluYWxseXt0cnl7aWYoIWEmJm4ucmV0dXJuIT1udWxsJiYobD1uLnJldHVybigpLE9iamVjdChsKSE9PWwpKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgb319cmV0dXJuIHN9fWZ1bmN0aW9uIFdiKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIFBvKGUsdCl7cmV0dXJuIEZiKGUpfHxCYihlLHQpfHxqZyhlLHQpfHxXYigpfWZ1bmN0aW9uIHVyKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZnkoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLEF3KHIua2V5KSxyKX19ZnVuY3Rpb24gY3IoZSx0LG4pe3JldHVybiB0JiZmeShlLnByb3RvdHlwZSx0KSxuJiZmeShlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gRmgoZSx0KXtyZXR1cm4gRmg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24ocixvKXtyZXR1cm4gci5fX3Byb3RvX189byxyfSxGaChlLHQpfWZ1bmN0aW9uIGtpKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiImJnQhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJkZoKGUsdCl9ZnVuY3Rpb24ga2MoZSl7cmV0dXJuIGtjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKG4pe3JldHVybiBuLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pfSxrYyhlKX1mdW5jdGlvbiBVYigpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKHR5cGVvZiBQcm94eT09ImZ1bmN0aW9uIilyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBNdyhlKXtpZihlPT09dm9pZCAwKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ZnVuY3Rpb24gSGIoZSx0KXtpZih0JiYodHlwZW9mIHQ9PSJvYmplY3QifHx0eXBlb2YgdD09ImZ1bmN0aW9uIikpcmV0dXJuIHQ7aWYodCE9PXZvaWQgMCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBNdyhlKX1mdW5jdGlvbiBiaShlKXt2YXIgdD1VYigpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPWtjKGUpLG87aWYodCl7dmFyIGk9a2ModGhpcykuY29uc3RydWN0b3I7bz1SZWZsZWN0LmNvbnN0cnVjdChyLGFyZ3VtZW50cyxpKX1lbHNlIG89ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIEhiKHRoaXMsbyl9fXZhciBUaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt1cih0aGlzLGUpfXJldHVybiBjcihlLFt7a2V5OiJhcHBlbmRWYWxpZGF0aW9uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKG4scixvLGkpe3JldHVybiBuPyhuW3JdP25bcl0ucHVzaCh7bWVzc2FnZTpvLHZhbHVlOml9KTpuW3JdPVt7bWVzc2FnZTpvLHZhbHVlOml9XSxuKTpBZSh7fSxyLFt7bWVzc2FnZTpvLHZhbHVlOml9XSl9fV0pLGV9KCksWXU9U3ltYm9sKCJHZXRTY2hlbWEiKSxubj1TeW1ib2woIlBhdGgiKSxfdD1TeW1ib2woIkdldFNvdXJjZSIpO2Z1bmN0aW9uIFZiKGUpe3JldHVybiBlW1l1XX12YXIgQmc9Y3IoZnVuY3Rpb24gZSh0KXt1cih0aGlzLGUpLHRoaXMuc3Bhbj10fSksS2I9ZnVuY3Rpb24oZSl7a2kobixlKTt2YXIgdD1iaShuKTtmdW5jdGlvbiBuKHIsbyl7dmFyIGk7cmV0dXJuIHVyKHRoaXMsbiksaT10LmNhbGwodGhpcyxvKSxBZShNdyhpKSwidHlwZSIsIlN5bSIpLGkudmFsdWU9cixpfXJldHVybiBjcihuLFt7a2V5OiJ0cmFuc3BpbGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9fV0pLG59KEJnKTtuZXcgS2IoIigpIik7dmFyIEt0PSJfdHlwZSIsdm49Il9yZWYiLEdiPWZ1bmN0aW9uKGUpe2tpKG4sZSk7dmFyIHQ9Ymkobik7ZnVuY3Rpb24gbihyKXt2YXIgbyxpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gdXIodGhpcyxuKSxvPXQuY2FsbCh0aGlzKSxvLm9wdGlvbnM9cixvLm9wdD1pLG99cmV0dXJuIGNyKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihvLGkpe3JldHVybiB0aGlzLm9wdCYmaT09bnVsbD8hMTppPT1udWxsP0FlKHt9LG8sW3ttZXNzYWdlOiJOb24tb3B0aW9uYWwgaW1hZ2Ugd2FzIG51bGwgb3IgdW5kZWZpbmVkLiIsdmFsdWU6aX1dKTp0eXBlb2YgaVt2bl0hPSJzdHJpbmciP0FlKHt9LG8sW3ttZXNzYWdlOiJJbWFnZSBkaWQgbm90IGhhdmUgYSBmaWxlIHJlZmVyZW5jZSBzdHJpbmcuIEdvdDogIi5jb25jYXQobWUoaVt2bl0pKSx2YWx1ZTppfV0pOmlbS3RdIT09ImZpbGUiP0FlKHt9LG8sW3ttZXNzYWdlOiJJbWFnZSBkaWQgbm90IGhhdmUgdGhlIHZhbGlkIGZpbGUgZXh0ZW5zaW9uIHR5cGUuIEdvdDogIi5jb25jYXQoaVtLdF0pLHZhbHVlOml9XSk6aS5tZXRhZGF0YT9BZSh7fSxvLFt7bWVzc2FnZToiRm91bmQgbWV0YWRhdGEsIGJ1dCBpdCBjb3VsZCBub3QgYmUgdmFsaWRhdGVkLiBJbWFnZSBtZXRhZGF0YSBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIHRoZSByZXF1aXJlZCBwcm9wczogd2lkdGggKHBvc2l0aXZlIG51bWJlciksIGhlaWdodCAocG9zaXRpdmUgbnVtYmVyKSBhbmQgc2hhMjU2IChzdHJpbmcgb2YgbGVuZ3RoIDY0IG9mIHRoZSBiYXNlMTYgaGFzaCkuIix2YWx1ZTppLGZpeGVzOlsiaW1hZ2U6cmVwbGFjZS1tZXRhZGF0YSJdfV0pOkFlKHt9LG8sW3ttZXNzYWdlOiJDb3VsZCBub3QgdmFsaWRhdGUgSW1hZ2UgbWV0YWRhdGEuIix2YWx1ZTppLGZpeGVzOlsiaW1hZ2U6YWRkLW1ldGFkYXRhIl19XSl9fSx7a2V5OiJhc3NlcnQiLHZhbHVlOmZ1bmN0aW9uKG8pe3JldHVybiB0aGlzLm9wdCYmbz09bnVsbD8hMDoobz09bnVsbD92b2lkIDA6b1t2bl0pPT09ImltYWdlIiYmKG89PW51bGw/dm9pZCAwOm9bS3RdKT09PSJmaWxlIn19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLm9wdGlvbnMsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJpbWFnZSIsb3B0aW9uczp0aGlzLm9wdGlvbnMsb3B0OnRoaXMub3B0fX19XSksbn0oVGkpLEx3PWZ1bmN0aW9uKHQpe3ZhciBuO2lmKCF0W3ZuXS5zdGFydHNXaXRoKCIvcHVibGljIikpe3ZhciByO3JldHVybnt1cmw6dFt2bl0rIj9zaGEyNTY9Ii5jb25jYXQoKHI9dC5tZXRhZGF0YSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnNoYTI1NiksbWV0YWRhdGE6dC5tZXRhZGF0YX19cmV0dXJue3VybDp0W3ZuXS5zbGljZSg3KSsiP3NoYTI1Nj0iLmNvbmNhdCgobj10Lm1ldGFkYXRhKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uc2hhMjU2KSxtZXRhZGF0YTp0Lm1ldGFkYXRhfX07ZnVuY3Rpb24gRHcoZSl7cmV0dXJuIG1lKGUpPT09Im9iamVjdCImJmUhPT1udWxsJiZlIT09dm9pZCAwJiYoInZhbCJpbiBlfHwidmFsUGF0aCJpbiBlKX1mdW5jdGlvbiBZYihlKXtyZXR1cm4gbWUoZSk9PT0ib2JqZWN0IiYmZSE9PW51bGwmJmUhPT12b2lkIDAmJm5uIGluIGUmJiJ2YWwiaW4gZX1mdW5jdGlvbiBYYihlKXtyZXR1cm4gZVtubl19ZnVuY3Rpb24gUWIoZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9ZnVuY3Rpb24gaHkoZSx0LG4pe3JldHVybiB0P0N0KGUoQ3QodCxuKSkpOkN0KHQsbil9ZnVuY3Rpb24gT28oZSl7cmV0dXJuIG1lKGUpPT09Im9iamVjdCImJmUhPT1udWxsJiYoX3QgaW4gZXx8bm4gaW4gZSl9ZnVuY3Rpb24gQ3QoZSx0LG4pe2lmKG1lKGUpPT09Im9iamVjdCIpe2lmKE9vKGUpKXJldHVybiBlO2lmKER3KGUpKXJldHVybiBDdChlLnZhbCxlLnZhbFBhdGgpfWlmKGUmJmVbdm5dJiZlW0t0XT09PSJmaWxlIil7dmFyIHI9ZVt2bl07aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IEVycm9yKCJJbnZhbGlkIGZpbGUgcmVmOiAiK3IpO3JldHVybiBDdChMdyhlKSx0LG4pfXN3aXRjaChtZShlKSl7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOnRocm93IEVycm9yKCJJbnZhbGlkIHNlbGVjdG9yIHR5cGU6ICIuY29uY2F0KG1lKGUpLCI6ICIpLmNvbmNhdChlKSk7Y2FzZSJvYmplY3QiOmlmKGUhPT1udWxsKXJldHVybiBuZXcgUHJveHkoZSx7aGFzOmZ1bmN0aW9uKGksbCl7cmV0dXJuIGw9PT1fdHx8bD09PW5ufHxsPT09ImFuZFRoZW4ifHxsPT09WXU/ITA6bCBpbiBpfSxnZXQ6ZnVuY3Rpb24oaSxsKXtpZihsPT09X3QpcmV0dXJuIGU7aWYobD09PW5uKXJldHVybiB0O2lmKGw9PT1ZdSlyZXR1cm4gbjtpZihsPT09ImFuZFRoZW4iKXJldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gaHkoYSxlLHQpfTtpZihBcnJheS5pc0FycmF5KGkpKXtpZihsPT09ImZpbHRlciIpcmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciB1PWkubWFwKGZ1bmN0aW9uKGMsZCl7cmV0dXJuIEN0KGMscnIodCxkKSxuPT1udWxsP3ZvaWQgMDpuLml0ZW0pfSkuZmlsdGVyKGZ1bmN0aW9uKGMpe3JldHVybiBhJiZhIGluc3RhbmNlb2YgVGk/YS5hc3NlcnQocHkoYykpOnB5KGEoYykpfSk7cmV0dXJuIEN0KHUsdCxuKX07aWYobD09PSJtYXAiKXJldHVybiBmdW5jdGlvbihhKXt2YXIgdT1pLm1hcChmdW5jdGlvbihjLGQpe3ZhciBmPWEoQ3QoYyxycih0LGQpLG49PW51bGw/dm9pZCAwOm4uaXRlbSksQ3QoZCkpO3JldHVybiBPbyhmKT9mOkN0KGYpfSk7cmV0dXJuIEN0KHUsdCxuKX19aWYoQXJyYXkuaXNBcnJheShpKSYmbD09PSJsZW5ndGgiKXJldHVybiBDdChpLmxlbmd0aCk7dmFyIHM9UmVmbGVjdC5nZXQoaSxsKTtyZXR1cm4gUWIoZSxsKT9OdW1iZXIuaXNOYU4oTnVtYmVyKGwpKT9DdChzLHJyKHQsbCksbj09bnVsbD92b2lkIDA6bi5pdGVtc1tsXSk6Q3Qocyxycih0LE51bWJlcihsKSksbj09bnVsbD92b2lkIDA6bi5pdGVtKTpzfX0pO2RlZmF1bHQ6cmV0dXJuIEFlKEFlKEFlKHtlcTpmdW5jdGlvbihpKXt2YXIgbD1pO2lmKE9vKGkpJiYobD1pW190XSxsIGluc3RhbmNlb2YgQmcpKXRocm93IEVycm9yKCJUT0RPOiBDYW5ub3QgZXZhbHVhdGUgZXF1YWxpdHkgd2l0aCBhbiBFeHByIik7cmV0dXJuIEN0KGU9PT1sLHZvaWQgMCl9LGFuZFRoZW46ZnVuY3Rpb24oaSl7cmV0dXJuIGh5KGksZT09PXZvaWQgMD9udWxsOmUsdCl9fSxfdCxlPT09dm9pZCAwP251bGw6ZSksbm4sdCksWXUsbil9fWZ1bmN0aW9uIHJyKGUsdCl7aWYobWUodCk9PT0ic3ltYm9sIil0aHJvdyBFcnJvcigiQ2Fubm90IGNyZWF0ZSB2YWwgcGF0aCBvZiBhcnJheSBpdGVtIHdpdGggc3ltYm9sIHByb3A6ICIuY29uY2F0KHQudG9TdHJpbmcoKSkpO3JldHVybiBlJiYiIi5jb25jYXQoZSwiLiIpLmNvbmNhdChKU09OLnN0cmluZ2lmeSh0KSl9ZnVuY3Rpb24gcHkoZSl7aWYobWUoZSk9PT0ib2JqZWN0IiYmKF90IGluIGV8fG5uIGluIGUpKXt2YXIgdD1lW190XTtyZXR1cm4gdH1yZXR1cm4gZX12YXIgSmI9ZnVuY3Rpb24oZSl7a2kobixlKTt2YXIgdD1iaShuKTtmdW5jdGlvbiBuKHIpe3ZhciBvLGk9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiB1cih0aGlzLG4pLG89dC5jYWxsKHRoaXMpLG8uaXRlbXM9cixvLm9wdD1pLG99cmV0dXJuIGNyKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihvLGkpe3ZhciBsPXRoaXMscz0hMTtyZXR1cm4gdGhpcy5vcHQmJmk9PW51bGw/ITE6bWUoaSkhPT0ib2JqZWN0Ij9BZSh7fSxvLFt7bWVzc2FnZToiRXhwZWN0ZWQgJ29iamVjdCcsIGdvdCAnIi5jb25jYXQobWUoaSksIiciKX1dKTpBcnJheS5pc0FycmF5KGkpP0FlKHt9LG8sW3ttZXNzYWdlOiJFeHBlY3RlZCAnb2JqZWN0JywgZ290ICdhcnJheScifV0pOihPYmplY3QuZW50cmllcyh0aGlzLml0ZW1zKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciB1PVBvKGEsMiksYz11WzBdLGQ9dVsxXSxmPXJyKG8sYyk7aWYoIWYpcz1sLmFwcGVuZFZhbGlkYXRpb25FcnJvcihzLG8sIkludGVybmFsIGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIHBhdGggYXQgIi5jb25jYXQoIW8mJnR5cGVvZiBvPT0ic3RyaW5nIj8iPGVtcHR5IHN0cmluZz4iOm8sIiBhdCBrZXkgIikuY29uY2F0KGMpLGkpO2Vsc2V7dmFyIGg9ZC52YWxpZGF0ZShmLGlbY10pO2gmJnM/cz1ObChObCh7fSxoKSxzKTpoJiYocz1oKX19KSxzKX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24obyl7aWYodGhpcy5vcHQmJm89PW51bGwpcmV0dXJuITA7aWYoIW8pcmV0dXJuITE7Zm9yKHZhciBpPTAsbD1PYmplY3QuZW50cmllcyh0aGlzLml0ZW1zKTtpPGwubGVuZ3RoO2krKyl7dmFyIHM9UG8obFtpXSwyKSxhPXNbMF0sdT1zWzFdO2lmKCF1LmFzc2VydChvW2FdKSlyZXR1cm4hMX1yZXR1cm4gbWUobyk9PT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkobyl9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5pdGVtcywhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6Im9iamVjdCIsaXRlbXM6T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRoaXMuaXRlbXMpLm1hcChmdW5jdGlvbihvKXt2YXIgaT1QbyhvLDIpLGw9aVswXSxzPWlbMV07cmV0dXJuW2wscy5zZXJpYWxpemUoKV19KSksb3B0OnRoaXMub3B0fX19XSksbn0oVGkpLFpiPWZ1bmN0aW9uKGUpe2tpKG4sZSk7dmFyIHQ9Ymkobik7ZnVuY3Rpb24gbihyKXt2YXIgbyxpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gdXIodGhpcyxuKSxvPXQuY2FsbCh0aGlzKSxvLml0ZW09cixvLm9wdD1pLG99cmV0dXJuIGNyKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihvLGkpe3ZhciBsPXRoaXMscz0hMTtyZXR1cm4gdGhpcy5vcHQmJmk9PW51bGw/ITE6bWUoaSkhPT0ib2JqZWN0Inx8IUFycmF5LmlzQXJyYXkoaSk/QWUoe30sbyxbe21lc3NhZ2U6IkV4cGVjdGVkICdhcnJheScsIGdvdCAnIi5jb25jYXQobWUoaSksIiciKX1dKTooaS5mb3JFYWNoKGZ1bmN0aW9uKGEsdSl7dmFyIGM9cnIobyx1KTtpZighYylzPWwuYXBwZW5kVmFsaWRhdGlvbkVycm9yKHMsbywiSW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgcGF0aCBhdCAiLmNvbmNhdCghbyYmdHlwZW9mIG89PSJzdHJpbmciPyI8ZW1wdHkgc3RyaW5nPiI6bywiIGF0IGluZGV4ICIpLmNvbmNhdCh1KSxpKTtlbHNle3ZhciBkPWwuaXRlbS52YWxpZGF0ZShjLGEpO2QmJnM/cz1ObChObCh7fSxkKSxzKTpkJiYocz1kKX19KSxzKX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24obyl7aWYodGhpcy5vcHQmJm89PW51bGwpcmV0dXJuITA7aWYoIW8pcmV0dXJuITE7dmFyIGk9emcobyksbDt0cnl7Zm9yKGkucygpOyEobD1pLm4oKSkuZG9uZTspe3ZhciBzPWwudmFsdWU7aWYoIXRoaXMuaXRlbS5hc3NlcnQocykpcmV0dXJuITF9fWNhdGNoKGEpe2kuZShhKX1maW5hbGx5e2kuZigpfXJldHVybiBtZShvKT09PSJvYmplY3QiJiZBcnJheS5pc0FycmF5KG8pfX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMuaXRlbSwhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImFycmF5IixpdGVtOnRoaXMuaXRlbS5zZXJpYWxpemUoKSxvcHQ6dGhpcy5vcHR9fX1dKSxufShUaSkscWI9ZnVuY3Rpb24oZSl7a2kobixlKTt2YXIgdD1iaShuKTtmdW5jdGlvbiBuKHIsbyl7dmFyIGksbD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITE7cmV0dXJuIHVyKHRoaXMsbiksaT10LmNhbGwodGhpcyksaS5rZXk9cixpLml0ZW1zPW8saS5vcHQ9bCxpfXJldHVybiBjcihuLFt7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24obyxpKXtyZXR1cm4hMX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24obyl7cmV0dXJuITB9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5rZXksdGhpcy5pdGVtcywhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiB0aGlzLmtleT09InN0cmluZyI/e3R5cGU6InVuaW9uIixrZXk6dGhpcy5rZXksaXRlbXM6dGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8uc2VyaWFsaXplKCl9KSxvcHQ6dGhpcy5vcHR9Ont0eXBlOiJ1bmlvbiIsaXRlbXM6dGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8uc2VyaWFsaXplKCl9KSxvcHQ6dGhpcy5vcHR9fX1dKSxufShUaSksZVQ9ZnVuY3Rpb24oZSl7a2kobixlKTt2YXIgdD1iaShuKTtmdW5jdGlvbiBuKHIpe3ZhciBvLGk9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiB1cih0aGlzLG4pLG89dC5jYWxsKHRoaXMpLG8ub3B0aW9ucz1yLG8ub3B0PWksb31yZXR1cm4gY3Iobixbe2tleToidmFsaWRhdGUiLHZhbHVlOmZ1bmN0aW9uKG8saSl7cmV0dXJuITF9fSx7a2V5OiJhc3NlcnQiLHZhbHVlOmZ1bmN0aW9uKG8pe3JldHVybiEwfX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMub3B0aW9ucywhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6InJpY2h0ZXh0IixvcHQ6dGhpcy5vcHR9fX1dKSxufShUaSksdFQ9ZnVuY3Rpb24oZSl7a2kobixlKTt2YXIgdD1iaShuKTtmdW5jdGlvbiBuKHIpe3ZhciBvLGk9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiB1cih0aGlzLG4pLG89dC5jYWxsKHRoaXMpLG8uaXRlbT1yLG8ub3B0PWksb31yZXR1cm4gY3Iobixbe2tleToidmFsaWRhdGUiLHZhbHVlOmZ1bmN0aW9uKG8saSl7dmFyIGw9dGhpcyxzPSExO3JldHVybiB0aGlzLm9wdCYmaT09bnVsbD8hMTptZShpKSE9PSJvYmplY3QiP0FlKHt9LG8sW3ttZXNzYWdlOiJFeHBlY3RlZCAnb2JqZWN0JywgZ290ICciLmNvbmNhdChtZShpKSwiJyIpfV0pOkFycmF5LmlzQXJyYXkoaSk/QWUoe30sbyxbe21lc3NhZ2U6IkV4cGVjdGVkICdvYmplY3QnLCBnb3QgJ2FycmF5JyJ9XSk6KE9iamVjdC5lbnRyaWVzKGkpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHU9UG8oYSwyKSxjPXVbMF0sZD11WzFdLGY9cnIobyxjKTtpZighZilzPWwuYXBwZW5kVmFsaWRhdGlvbkVycm9yKHMsbywiSW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgcGF0aCBhdCAiLmNvbmNhdCghbyYmdHlwZW9mIG89PSJzdHJpbmciPyI8ZW1wdHkgc3RyaW5nPiI6bywiIGF0IGtleSAiKS5jb25jYXQoZCksaSk7ZWxzZXt2YXIgaD1sLml0ZW0udmFsaWRhdGUoZixkKTtoJiZzP3M9TmwoTmwoe30saCkscyk6aCYmKHM9aCl9fSkscyl9fSx7a2V5OiJhc3NlcnQiLHZhbHVlOmZ1bmN0aW9uKG8pe2lmKHRoaXMub3B0JiZvPT1udWxsKXJldHVybiEwO2lmKCFvKXJldHVybiExO2Zvcih2YXIgaT0wLGw9T2JqZWN0LmVudHJpZXMobyk7aTxsLmxlbmd0aDtpKyspe3ZhciBzPVBvKGxbaV0sMiksYT1zWzFdO2lmKCF0aGlzLml0ZW0uYXNzZXJ0KGEpKXJldHVybiExfXJldHVybiBtZShvKT09PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShvKX19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLml0ZW0sITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJyZWNvcmQiLGl0ZW06dGhpcy5pdGVtLnNlcmlhbGl6ZSgpLG9wdDp0aGlzLm9wdH19fV0pLG59KFRpKTtmdW5jdGlvbiBuVChlKXt2YXIgdD1lW190XTtpZih0IGluc3RhbmNlb2YgQmcpdGhyb3cgRXJyb3IoIkNhbm5vdCBnZXQgcmF3IHNvdXJjZSBvZiBhbiBFeHByIik7dmFyIG49dDtyZXR1cm4gbn1mdW5jdGlvbiByVChlKXtyZXR1cm4gZS5pbmRleE9mKCIuIik9PT0tMT9bZSwiIl06W2Uuc2xpY2UoMCxlLmluZGV4T2YoIi4iKSksZS5zbGljZShlLmluZGV4T2YoIi4iKSsxKV19ZnVuY3Rpb24gb1QoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBKYnx8bWUoZSk9PT0ib2JqZWN0IiYmInR5cGUiaW4gZSYmZS50eXBlPT09Im9iamVjdCJ9ZnVuY3Rpb24gaVQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0VHx8bWUoZSk9PT0ib2JqZWN0IiYmInR5cGUiaW4gZSYmZS50eXBlPT09InJlY29yZCJ9ZnVuY3Rpb24gbFQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBaYnx8bWUoZSk9PT0ib2JqZWN0IiYmInR5cGUiaW4gZSYmZS50eXBlPT09ImFycmF5In1mdW5jdGlvbiBzVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHFifHxtZShlKT09PSJvYmplY3QiJiYidHlwZSJpbiBlJiZlLnR5cGU9PT0idW5pb24ifWZ1bmN0aW9uIGFUKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZVR8fG1lKGUpPT09Im9iamVjdCImJiJ0eXBlImluIGUmJmUudHlwZT09PSJyaWNodGV4dCJ9ZnVuY3Rpb24gdVQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBHYnx8bWUoZSk9PT0ib2JqZWN0IiYmInR5cGUiaW4gZSYmZS50eXBlPT09ImltYWdlIn1mdW5jdGlvbiBjVChlLHQsbil7Zm9yKHZhciByPWRUKGUpLG89amIociksaT1uLGw9dCxzPWZ1bmN0aW9uKCl7dmFyIGM9ci5zaGlmdCgpO2lmKGM9PT12b2lkIDApdGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWQgdW5kZWZpbmVkIHBhcnQiKTtpZihsVChpKSl7aWYoTnVtYmVyLmlzTmFOKE51bWJlcihjKSkpdGhyb3cgRXJyb3IoIkludmFsaWQgcGF0aDogYXJyYXkgc2NoZW1hICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGkpLCIgbXVzdCBoYXZlIGEgbnVtYmVyIGFzIHBhdGgsIGJ1dCBnb3QgIikuY29uY2F0KGMsIi4gUGF0aDogIikuY29uY2F0KGUpKTtpZihtZShsKSE9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShsKSl0aHJvdyBFcnJvcigiU2NoZW1hIHR5cGUgZXJyb3I6IGV4cGVjdGVkIHNvdXJjZSB0byBiZSB0eXBlIG9mIGFycmF5LCBidXQgZ290ICIuY29uY2F0KG1lKGwpKSk7aWYoIWxbY10pe3ZhciBkO3Rocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6IGFycmF5IHNvdXJjZSAobGVuZ3RoOiAiLmNvbmNhdCgoZD1sKT09PW51bGx8fGQ9PT12b2lkIDA/dm9pZCAwOmQubGVuZ3RoLCIpIGRpZCBub3QgaGF2ZSBpbmRleCAiKS5jb25jYXQoYywiIGZyb20gcGF0aDogIikuY29uY2F0KGUpKX1sPWxbY10saT1pLml0ZW19ZWxzZSBpZihpVChpKSl7aWYodHlwZW9mIGMhPSJzdHJpbmciKXRocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6IHJlY29yZCBzY2hlbWEgIi5jb25jYXQoaSwiIG11c3QgaGF2ZSBwYXRoOiAiKS5jb25jYXQoYywiIGFzIHN0cmluZyIpKTtpZihtZShsKSE9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShsKSl0aHJvdyBFcnJvcigiU2NoZW1hIHR5cGUgZXJyb3I6IGV4cGVjdGVkIHNvdXJjZSB0byBiZSB0eXBlIG9mIHJlY29yZCwgYnV0IGdvdCAiLmNvbmNhdChtZShsKSkpO2lmKCFsW2NdKXRocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6IHJlY29yZCBzb3VyY2UgZGlkIG5vdCBoYXZlIGtleSAiLmNvbmNhdChjLCIgZnJvbSBwYXRoOiAiKS5jb25jYXQoZSkpO2w9bFtjXSxpPWkuaXRlbX1lbHNlIGlmKG9UKGkpKXtpZihtZShsKSE9PSJvYmplY3QiKXRocm93IEVycm9yKCJTY2hlbWEgdHlwZSBlcnJvcjogZXhwZWN0ZWQgc291cmNlIHRvIGJlIHR5cGUgb2Ygb2JqZWN0LCBidXQgZ290ICIuY29uY2F0KG1lKGwpKSk7aWYoIWxbY10pdGhyb3cgRXJyb3IoIkludmFsaWQgcGF0aDogb2JqZWN0IHNvdXJjZSBkaWQgbm90IGhhdmUga2V5ICIuY29uY2F0KGMsIiBmcm9tIHBhdGg6ICIpLmNvbmNhdChlKSk7bD1sW2NdLGk9aS5pdGVtc1tjXX1lbHNle2lmKHVUKGkpKXJldHVybnt2OntwYXRoOm8uc2xpY2UoMCxvLmxlbmd0aC1yLmxlbmd0aC0xKS5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGcpfSkuam9pbigiLiIpLHNjaGVtYTppLHNvdXJjZTpsfX07aWYoc1QoaSkpe3ZhciBmPWkua2V5O2lmKCFmKXJldHVybnt2OntwYXRoOm8ubWFwKGZ1bmN0aW9uKGcpe3JldHVybiBOdW1iZXIuaXNOYU4oTnVtYmVyKGcpKT9KU09OLnN0cmluZ2lmeShnKTpnfSkuam9pbigiLiIpLHNjaGVtYTppLHNvdXJjZTpsfX07dmFyIGg9bFtmXTtpZighaCl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiB1bmlvbiBzb3VyY2UgIi5jb25jYXQoaSwiIGRpZCBub3QgaGF2ZSByZXF1aXJlZCBrZXkgIikuY29uY2F0KGYsIiBpbiBwYXRoOiAiKS5jb25jYXQoZSkpO3ZhciBtPWkuaXRlbXMuZmluZChmdW5jdGlvbihnKXt2YXIgXztyZXR1cm4oZz09bnVsbHx8KF89Zy5pdGVtcyk9PT1udWxsfHxfPT09dm9pZCAwfHwoXz1fW2ZdKT09PW51bGx8fF89PT12b2lkIDA/dm9pZCAwOl8udmFsdWUpPT09aH0pO2lmKCFtKXRocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6IHVuaW9uIHNjaGVtYSAiLmNvbmNhdChpLCIgZGlkIG5vdCBoYXZlIGEgY2hpbGQgb2JqZWN0IHdpdGggIikuY29uY2F0KGYsIiBvZiB2YWx1ZSAiKS5jb25jYXQoaCwiIGluIHBhdGg6ICIpLmNvbmNhdChlKSk7aT1tLml0ZW1zW2NdLGw9bFtjXX1lbHNle2lmKGFUKGkpKXJldHVybnt2OntwYXRoOm8uc2xpY2UoMCxvLmxlbmd0aC1yLmxlbmd0aC0xKS5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGcpfSkuam9pbigiLiIpLHNjaGVtYTppLHNvdXJjZTpsfX07dGhyb3cgRXJyb3IoIkludmFsaWQgcGF0aDogIi5jb25jYXQoYywiIHJlc29sdmVkIHRvIGFuIHVuZXhwZWN0ZWQgc2NoZW1hICIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShpKSkpfX19LGE7ci5sZW5ndGg+MDspaWYoYT1zKCksYSlyZXR1cm4gYS52O2lmKHIubGVuZ3RoPjApdGhyb3cgRXJyb3IoIkludmFsaWQgcGF0aDogIi5jb25jYXQoci5qb2luKCIuIiksIiBpcyBub3QgYSB2YWxpZCBwYXRoIikpO3JldHVybntwYXRoOm8ubWFwKGZ1bmN0aW9uKHUpe3JldHVybiBOdW1iZXIuaXNOYU4oTnVtYmVyKHUpKT9KU09OLnN0cmluZ2lmeSh1KTp1fSkuam9pbigiLiIpLHNjaGVtYTppLHNvdXJjZTpsfX1mdW5jdGlvbiBkVChlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KXt2YXIgcj0iIjtpZihlW25dPT09JyInKXtmb3IobisrO248ZS5sZW5ndGgmJmVbbl0hPT0nIic7KWVbbl09PT0iXFwiJiZlW24rMV09PT0nIic/KHIrPSciJyxuKyspOnIrPWVbbl0sbisrO2lmKGVbbl0hPT0nIicpe3ZhciBvO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCAoIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZSksIik6IE1pc3NpbmcgY2xvc2luZyBkb3VibGUgcXVvdGU6ICIpLmNvbmNhdCgobz1lW25dKSE9PW51bGwmJm8hPT12b2lkIDA/bzoiYXQgZW5kIG9mIHN0cmluZyIsIiAoY2hhcjogIikuY29uY2F0KG4sIjsgbGVuZ3RoOiAiKS5jb25jYXQoZS5sZW5ndGgsIikiKSl9fWVsc2UgZm9yKDtuPGUubGVuZ3RoJiZlW25dIT09Ii4iOylyKz1lW25dLG4rKztyIT09IiImJnQucHVzaChyKSxuKyt9cmV0dXJuIHR9ZnVuY3Rpb24gZlQoZSl7cmV0dXJuIEl3KGdUKGUpKX1mdW5jdGlvbiBoVChlKXtyZXR1cm4gT28oZSk/bWUoZVtfdF0pPT09Im9iamVjdCImJmVbX3RdIT09bnVsbCYmQXJyYXkuaXNBcnJheShlW190XSk6QXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBwVChlKXtyZXR1cm4gT28oZSk/bWUoZVtfdF0pPT09Im9iamVjdCImJmVbX3RdIT09bnVsbCYmIUFycmF5LmlzQXJyYXkoZVtfdF0pOm1lKGUpPT09Im9iamVjdCJ9ZnVuY3Rpb24gZ1QoZSl7dmFyIHQ9Q3QoZSk7ZnVuY3Rpb24gbihyKXt2YXIgbz1oVChyKSxpPXBUKHIpO2lmKG8pe3ZhciBsPV90IGluIHI/cltfdF06cixzPW5uIGluIHI/cltubl06dm9pZCAwO3JldHVybnt2YWw6bC5tYXAoZnVuY3Rpb24oYyxkKXtyZXR1cm4gbihPbyhjKT9jOkN0KGMscnIocyxkKSkpfSksdmFsUGF0aDpzfX1lbHNlIGlmKGkpe3ZhciBhPV90IGluIHI/cltfdF06cix1PW5uIGluIHI/cltubl06dm9pZCAwO3JldHVybnt2YWw6YSE9PW51bGwmJk9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhKS5tYXAoZnVuY3Rpb24oYyl7dmFyIGQ9UG8oYywyKSxmPWRbMF0saD1kWzFdO3JldHVybltmLG4oT28oaCk/aDpDdChoLHJyKHUsZikpKV19KSksdmFsUGF0aDp1fX1lbHNlIHJldHVybiBPbyhyKT97dmFsOm4ocltfdF0pLHZhbFBhdGg6cltubl19OnJ9cmV0dXJuIG4odCl9ZnVuY3Rpb24gQmgoZSl7dmFyIHQ9RHcoZSk/ZS52YWw6ZTtzd2l0Y2gobWUodCkpe2Nhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjp0aHJvdyBFcnJvcigiSW52YWxpZCB2YWwgdHlwZTogIi5jb25jYXQobWUodCkpKTtjYXNlIm9iamVjdCI6cmV0dXJuIHQ9PT1udWxsP251bGw6QXJyYXkuaXNBcnJheSh0KT90Lm1hcChCaCk6T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHQpLm1hcChmdW5jdGlvbihuKXt2YXIgcj1QbyhuLDIpLG89clswXSxpPXJbMV07cmV0dXJuW28saSYmQmgoaSldfSkpO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIEl3KGUpe3ZhciB0PWUudmFsO3N3aXRjaChtZSh0KSl7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOnRocm93IEVycm9yKCJJbnZhbGlkIHZhbCB0eXBlOiAiLmNvbmNhdChtZSh0KSkpO2Nhc2Uib2JqZWN0IjppZih0IT09bnVsbClyZXR1cm4gbmV3IFByb3h5KHQse2hhczpmdW5jdGlvbihyLG8pe3JldHVybiBvPT09InZhbCJ8fG89PT1ubj8hMDpneShyLG8pfSxnZXQ6ZnVuY3Rpb24ocixvKXtpZihvPT09bm4pcmV0dXJuIGUudmFsUGF0aDtpZihvPT09InZhbCIpcmV0dXJuIEJoKGUpO2lmKEFycmF5LmlzQXJyYXkocikmJm89PT0ibGVuZ3RoIilyZXR1cm4gci5sZW5ndGg7aWYoZ3kodCxvKSl7dmFyIGksbDtyZXR1cm4gSXcoe3ZhbDpSZWZsZWN0LmdldChyLG8pLnZhbCx2YWxQYXRoOihpPShsPVJlZmxlY3QuZ2V0KHIsbykpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC52YWxQYXRoKSE9PW51bGwmJmkhPT12b2lkIDA/aTpycihlLnZhbFBhdGgsQXJyYXkuaXNBcnJheShyKT9OdW1iZXIobyk6byl9KX1yZXR1cm4gUmVmbGVjdC5nZXQocixvKX19KTtkZWZhdWx0OnJldHVybiBBZShBZSh7fSxubixlLnZhbFBhdGgpLCJ2YWwiLGUudmFsKX19ZnVuY3Rpb24gZ3koZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9dmFyIG1UPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsLTEyNDU2NDM4MjUsLTM3Mzk1NzcyMyw5NjE5ODcxNjMsMTUwODk3MDk5MywtMTg0MTMzMTU0OCwtMTQyNDIwNDA3NSwtNjcwNTg2MjE2LDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LC0yMTMyODg5MDkwLC0xNjgwMDc5MTkzLC0xMDQ2NzQ0NzE2LC00NTk1NzY4OTUsLTI3Mjc0MjUyMiwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwtMTc0MDc0NjQxNCwtMTQ3MzEzMjk0NywtMTM0MTk3MDQ4OCwtMTA4NDY1MzYyNSwtOTU4Mzk1NDA1LC03MTA0Mzg1ODUsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsLTIxMTc5NDA5NDYsLTE4MzgwMTEyNTksLTE1NjQ0ODEzNzUsLTE0NzQ2NjQ4ODUsLTEwMzUyMzY0OTYsLTk0OTIwMjUyNSwtNzc4OTAxNDc5LC02OTQ2MTQ0OTIsLTIwMDM5NTM4NywyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsLTIwNjcyMzY4NDQsLTE5MzMxMTQ4NzIsLTE4NjY1MzA4MjIsLTE1MzgyMzMxMDksLTEwOTA5MzU4MTcsLTk2NTY0MTk5OF0sTGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbZS5pbnB1dEJ5dGVzPTY0XT0iaW5wdXRCeXRlcyIsZVtlLmlucHV0V29yZHM9MTZdPSJpbnB1dFdvcmRzIixlW2UuaGlnaEluZGV4PTE0XT0iaGlnaEluZGV4IixlW2UubG93SW5kZXg9MTVdPSJsb3dJbmRleCIsZVtlLndvcmtXb3Jkcz02NF09IndvcmtXb3JkcyIsZVtlLmFsbG9jQnl0ZXM9ODBdPSJhbGxvY0J5dGVzIixlW2UuYWxsb2NXb3Jkcz0yMF09ImFsbG9jV29yZHMiLGVbZS5hbGxvY1RvdGFsPThlM109ImFsbG9jVG90YWwiLGV9KExlfHx7fSksbXk9e3NoYTI1NjoxfTtmdW5jdGlvbiB2VChlKXtpZihlJiYhbXlbZV0mJiFteVtlLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IG1ldGhvZCBub3Qgc3VwcG9ydGVkIik7cmV0dXJuIG5ldyB5VH12YXIgeVQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dXIodGhpcyxlKSxBZSh0aGlzLCJBIiwxNzc5MDMzNzAzKSxBZSh0aGlzLCJCIiwtMTE1MDgzMzAxOSksQWUodGhpcywiQyIsMTAxMzkwNDI0MiksQWUodGhpcywiRCIsLTE1MjE0ODY1MzQpLEFlKHRoaXMsIkUiLDEzNTk4OTMxMTkpLEFlKHRoaXMsIkYiLC0xNjk0MTQ0MzcyKSxBZSh0aGlzLCJHIiw1Mjg3MzQ2MzUpLEFlKHRoaXMsIkgiLDE1NDE0NTkyMjUpLEFlKHRoaXMsIl9zaXplIiwwKSxBZSh0aGlzLCJfc3AiLDApLCgheXV8fHBzPj1MZS5hbGxvY1RvdGFsKSYmKHl1PW5ldyBBcnJheUJ1ZmZlcihMZS5hbGxvY1RvdGFsKSxwcz0wKSx0aGlzLl9ieXRlPW5ldyBVaW50OEFycmF5KHl1LHBzLExlLmFsbG9jQnl0ZXMpLHRoaXMuX3dvcmQ9bmV3IEludDMyQXJyYXkoeXUscHMsTGUuYWxsb2NXb3JkcykscHMrPUxlLmFsbG9jQnl0ZXN9cmV0dXJuIGNyKGUsW3trZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24obil7aWYodHlwZW9mIG49PSJzdHJpbmciKXJldHVybiB0aGlzLl91dGY4KG4pO2lmKG49PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0eXBlOiAiK21lKG4pKTt2YXIgcj1uLmJ5dGVPZmZzZXQsbz1uLmJ5dGVMZW5ndGgsaT1vL0xlLmlucHV0Qnl0ZXN8MCxsPTA7aWYoaSYmIShyJjMpJiYhKHRoaXMuX3NpemUlTGUuaW5wdXRCeXRlcykpe2Zvcih2YXIgcz1uZXcgSW50MzJBcnJheShuLmJ1ZmZlcixyLGkqTGUuaW5wdXRXb3Jkcyk7aS0tOyl0aGlzLl9pbnQzMihzLGw+PjIpLGwrPUxlLmlucHV0Qnl0ZXM7dGhpcy5fc2l6ZSs9bH12YXIgYT1uLkJZVEVTX1BFUl9FTEVNRU5UO2lmKGEhPT0xJiZuLmJ1ZmZlcil7dmFyIHU9bmV3IFVpbnQ4QXJyYXkobi5idWZmZXIscitsLG8tbCk7cmV0dXJuIHRoaXMuX3VpbnQ4KHUpfXJldHVybiBsPT09bz90aGlzOnRoaXMuX3VpbnQ4KG4sbCl9fSx7a2V5OiJfdWludDgiLHZhbHVlOmZ1bmN0aW9uKG4scil7dmFyIG89dGhpcy5fYnl0ZSxpPXRoaXMuX3dvcmQsbD1uLmxlbmd0aDtmb3Iocj1yfDA7cjxsOyl7Zm9yKHZhciBzPXRoaXMuX3NpemUlTGUuaW5wdXRCeXRlcyxhPXM7cjxsJiZhPExlLmlucHV0Qnl0ZXM7KW9bYSsrXT1uW3IrK107YT49TGUuaW5wdXRCeXRlcyYmdGhpcy5faW50MzIoaSksdGhpcy5fc2l6ZSs9YS1zfXJldHVybiB0aGlzfX0se2tleToiX3V0ZjgiLHZhbHVlOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj10aGlzLl9ieXRlLG89dGhpcy5fd29yZCxpPW4ubGVuZ3RoLGw9dGhpcy5fc3Ascz0wO3M8aTspe2Zvcih2YXIgYT10aGlzLl9zaXplJUxlLmlucHV0Qnl0ZXMsdT1hO3M8aSYmdTxMZS5pbnB1dEJ5dGVzOyl7dmFyIGM9bi5jaGFyQ29kZUF0KHMrKyl8MDtjPDEyOD9yW3UrK109YzpjPDIwNDg/KHJbdSsrXT0xOTJ8Yz4+PjYsclt1KytdPTEyOHxjJjYzKTpjPDU1Mjk2fHxjPjU3MzQzPyhyW3UrK109MjI0fGM+Pj4xMixyW3UrK109MTI4fGM+Pj42JjYzLHJbdSsrXT0xMjh8YyY2Myk6bD8oYz0oKGwmMTAyMyk8PDEwKSsoYyYxMDIzKSs2NTUzNixyW3UrK109MjQwfGM+Pj4xOCxyW3UrK109MTI4fGM+Pj4xMiY2MyxyW3UrK109MTI4fGM+Pj42JjYzLHJbdSsrXT0xMjh8YyY2MyxsPTApOmw9Y311Pj1MZS5pbnB1dEJ5dGVzJiYodGhpcy5faW50MzIobyksb1swXT1vW0xlLmlucHV0V29yZHNdKSx0aGlzLl9zaXplKz11LWF9cmV0dXJuIHRoaXMuX3NwPWwsdGhpc319LHtrZXk6Il9pbnQzMiIsdmFsdWU6ZnVuY3Rpb24obixyKXt2YXIgbz10aGlzLkEsaT10aGlzLkIsbD10aGlzLkMscz10aGlzLkQsYT10aGlzLkUsdT10aGlzLkYsYz10aGlzLkcsZD10aGlzLkgsZj0wO2ZvcihyPXJ8MDtmPExlLmlucHV0V29yZHM7KUpvW2YrK109UW4obltyKytdKTtmb3IoZj1MZS5pbnB1dFdvcmRzO2Y8TGUud29ya1dvcmRzO2YrKylKb1tmXT1rVChKb1tmLTJdKStKb1tmLTddKyRUKEpvW2YtMTVdKStKb1tmLTE2XXwwO2ZvcihmPTA7ZjxMZS53b3JrV29yZHM7ZisrKXt2YXIgaD1kK0NUKGEpK19UKGEsdSxjKSttVFtmXStKb1tmXXwwLG09RVQobykrU1QobyxpLGwpfDA7ZD1jLGM9dSx1PWEsYT1zK2h8MCxzPWwsbD1pLGk9byxvPWgrbXwwfXRoaXMuQT1vK3RoaXMuQXwwLHRoaXMuQj1pK3RoaXMuQnwwLHRoaXMuQz1sK3RoaXMuQ3wwLHRoaXMuRD1zK3RoaXMuRHwwLHRoaXMuRT1hK3RoaXMuRXwwLHRoaXMuRj11K3RoaXMuRnwwLHRoaXMuRz1jK3RoaXMuR3wwLHRoaXMuSD1kK3RoaXMuSHwwfX0se2tleToiZGlnZXN0Iix2YWx1ZTpmdW5jdGlvbihuKXt2YXIgcj10aGlzLl9ieXRlLG89dGhpcy5fd29yZCxpPXRoaXMuX3NpemUlTGUuaW5wdXRCeXRlc3wwO2ZvcihyW2krK109MTI4O2kmMzspcltpKytdPTA7aWYoaT4+PTIsaT5MZS5oaWdoSW5kZXgpe2Zvcig7aTxMZS5pbnB1dFdvcmRzOylvW2krK109MDtpPTAsdGhpcy5faW50MzIobyl9Zm9yKDtpPExlLmlucHV0V29yZHM7KW9baSsrXT0wO3ZhciBsPXRoaXMuX3NpemUqOCxzPShsJjQyOTQ5NjcyOTUpPj4+MCxhPShsLXMpLzQyOTQ5NjcyOTY7cmV0dXJuIGEmJihvW0xlLmhpZ2hJbmRleF09UW4oYSkpLHMmJihvW0xlLmxvd0luZGV4XT1RbihzKSksdGhpcy5faW50MzIobyksbj09PSJoZXgiP3RoaXMuX2hleCgpOnRoaXMuX2JpbigpfX0se2tleToiX2hleCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLkEscj10aGlzLkIsbz10aGlzLkMsaT10aGlzLkQsbD10aGlzLkUscz10aGlzLkYsYT10aGlzLkcsdT10aGlzLkg7cmV0dXJuIGxvKG4pK2xvKHIpK2xvKG8pK2xvKGkpK2xvKGwpK2xvKHMpK2xvKGEpK2xvKHUpfX0se2tleToiX2JpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLkEscj10aGlzLkIsbz10aGlzLkMsaT10aGlzLkQsbD10aGlzLkUscz10aGlzLkYsYT10aGlzLkcsdT10aGlzLkgsYz10aGlzLl9ieXRlLGQ9dGhpcy5fd29yZDtyZXR1cm4gZFswXT1RbihuKSxkWzFdPVFuKHIpLGRbMl09UW4obyksZFszXT1RbihpKSxkWzRdPVFuKGwpLGRbNV09UW4ocyksZFs2XT1RbihhKSxkWzddPVFuKHUpLGMuc2xpY2UoMCwzMil9fV0pLGV9KCksSm89bmV3IEludDMyQXJyYXkoTGUud29ya1dvcmRzKSx5dSxwcz0wLGxvPWZ1bmN0aW9uKHQpe3JldHVybih0KzQyOTQ5NjcyOTYpLnRvU3RyaW5nKDE2KS5zdWJzdHIoLTgpfSx4VD1mdW5jdGlvbih0KXtyZXR1cm4gdDw8MjQmNDI3ODE5MDA4MHx0PDw4JjE2NzExNjgwfHQ+PjgmNjUyODB8dD4+MjQmMjU1fSx3VD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sUW49YlQoKT93VDp4VCxfVD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJedCYobl5yKX0sU1Q9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0Jm58ciYodHxuKX0sRVQ9ZnVuY3Rpb24odCl7cmV0dXJuKHQ+Pj4yfHQ8PDMwKV4odD4+PjEzfHQ8PDE5KV4odD4+PjIyfHQ8PDEwKX0sQ1Q9ZnVuY3Rpb24odCl7cmV0dXJuKHQ+Pj42fHQ8PDI2KV4odD4+PjExfHQ8PDIxKV4odD4+PjI1fHQ8PDcpfSwkVD1mdW5jdGlvbih0KXtyZXR1cm4odD4+Pjd8dDw8MjUpXih0Pj4+MTh8dDw8MTQpXnQ+Pj4zfSxrVD1mdW5jdGlvbih0KXtyZXR1cm4odD4+PjE3fHQ8PDE1KV4odD4+PjE5fHQ8PDEzKV50Pj4+MTB9O2Z1bmN0aW9uIGJUKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFs2NTI3OV0pLmJ1ZmZlcik7cmV0dXJuIGVbMF09PT0yNTR9dmFyIFRUPWZ1bmN0aW9uKHQpe3JldHVybiB2VCgpLnVwZGF0ZSh0KS5kaWdlc3QoImhleCIpfTtmdW5jdGlvbiB5YSgpe3lhPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciBlLHQ9e30sbj1PYmplY3QucHJvdG90eXBlLHI9bi5oYXNPd25Qcm9wZXJ0eSxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oQywkLEUpe0NbJF09RS52YWx1ZX0saT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iP1N5bWJvbDp7fSxsPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYT1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gdShDLCQsRSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDLCQse3ZhbHVlOkUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxDWyRdfXRyeXt1KHt9LCIiKX1jYXRjaHt1PWZ1bmN0aW9uKCQsRSxPKXtyZXR1cm4gJFtFXT1PfX1mdW5jdGlvbiBjKEMsJCxFLE8pe3ZhciBSPSQmJiQucHJvdG90eXBlIGluc3RhbmNlb2Ygdj8kOnYsRj1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlKSxIPW5ldyBWKE98fFtdKTtyZXR1cm4gbyhGLCJfaW52b2tlIix7dmFsdWU6TShDLEUsSCl9KSxGfWZ1bmN0aW9uIGQoQywkLEUpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6Qy5jYWxsKCQsRSl9fWNhdGNoKE8pe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOk99fX10LndyYXA9Yzt2YXIgZj0ic3VzcGVuZGVkU3RhcnQiLGg9InN1c3BlbmRlZFlpZWxkIixtPSJleGVjdXRpbmciLGc9ImNvbXBsZXRlZCIsXz17fTtmdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9ZnVuY3Rpb24geCgpe312YXIgUz17fTt1KFMsbCxmdW5jdGlvbigpe3JldHVybiB0aGlzfSk7dmFyIGs9T2JqZWN0LmdldFByb3RvdHlwZU9mLFQ9ayYmayhrKFkoW10pKSk7VCYmVCE9PW4mJnIuY2FsbChULGwpJiYoUz1UKTt2YXIgYj14LnByb3RvdHlwZT12LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMpO2Z1bmN0aW9uIE4oQyl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe3UoQywkLGZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLl9pbnZva2UoJCxFKX0pfSl9ZnVuY3Rpb24gRChDLCQpe2Z1bmN0aW9uIEUoUixGLEgsYWUpe3ZhciBvZT1kKENbUl0sQyxGKTtpZihvZS50eXBlIT09InRocm93Iil7dmFyICRlPW9lLmFyZyxfZT0kZS52YWx1ZTtyZXR1cm4gX2UmJnR5cGVvZiBfZT09Im9iamVjdCImJnIuY2FsbChfZSwiX19hd2FpdCIpPyQucmVzb2x2ZShfZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKFEpe0UoIm5leHQiLFEsSCxhZSl9LGZ1bmN0aW9uKFEpe0UoInRocm93IixRLEgsYWUpfSk6JC5yZXNvbHZlKF9lKS50aGVuKGZ1bmN0aW9uKFEpeyRlLnZhbHVlPVEsSCgkZSl9LGZ1bmN0aW9uKFEpe3JldHVybiBFKCJ0aHJvdyIsUSxILGFlKX0pfWFlKG9lLmFyZyl9dmFyIE87byh0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oUixGKXtmdW5jdGlvbiBIKCl7cmV0dXJuIG5ldyAkKGZ1bmN0aW9uKGFlLG9lKXtFKFIsRixhZSxvZSl9KX1yZXR1cm4gTz1PP08udGhlbihILEgpOkgoKX19KX1mdW5jdGlvbiBNKEMsJCxFKXt2YXIgTz1mO3JldHVybiBmdW5jdGlvbihSLEYpe2lmKE89PT1tKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKE89PT1nKXtpZihSPT09InRocm93Iil0aHJvdyBGO3JldHVybnt2YWx1ZTplLGRvbmU6ITB9fWZvcihFLm1ldGhvZD1SLEUuYXJnPUY7Oyl7dmFyIEg9RS5kZWxlZ2F0ZTtpZihIKXt2YXIgYWU9aihILEUpO2lmKGFlKXtpZihhZT09PV8pY29udGludWU7cmV0dXJuIGFlfX1pZihFLm1ldGhvZD09PSJuZXh0IilFLnNlbnQ9RS5fc2VudD1FLmFyZztlbHNlIGlmKEUubWV0aG9kPT09InRocm93Iil7aWYoTz09PWYpdGhyb3cgTz1nLEUuYXJnO0UuZGlzcGF0Y2hFeGNlcHRpb24oRS5hcmcpfWVsc2UgRS5tZXRob2Q9PT0icmV0dXJuIiYmRS5hYnJ1cHQoInJldHVybiIsRS5hcmcpO089bTt2YXIgb2U9ZChDLCQsRSk7aWYob2UudHlwZT09PSJub3JtYWwiKXtpZihPPUUuZG9uZT9nOmgsb2UuYXJnPT09Xyljb250aW51ZTtyZXR1cm57dmFsdWU6b2UuYXJnLGRvbmU6RS5kb25lfX1vZS50eXBlPT09InRocm93IiYmKE89ZyxFLm1ldGhvZD0idGhyb3ciLEUuYXJnPW9lLmFyZyl9fX1mdW5jdGlvbiBqKEMsJCl7dmFyIEU9JC5tZXRob2QsTz1DLml0ZXJhdG9yW0VdO2lmKE89PT1lKXJldHVybiAkLmRlbGVnYXRlPW51bGwsRT09PSJ0aHJvdyImJkMuaXRlcmF0b3IucmV0dXJuJiYoJC5tZXRob2Q9InJldHVybiIsJC5hcmc9ZSxqKEMsJCksJC5tZXRob2Q9PT0idGhyb3ciKXx8RSE9PSJyZXR1cm4iJiYoJC5tZXRob2Q9InRocm93IiwkLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK0UrIicgbWV0aG9kIikpLF87dmFyIFI9ZChPLEMuaXRlcmF0b3IsJC5hcmcpO2lmKFIudHlwZT09PSJ0aHJvdyIpcmV0dXJuICQubWV0aG9kPSJ0aHJvdyIsJC5hcmc9Ui5hcmcsJC5kZWxlZ2F0ZT1udWxsLF87dmFyIEY9Ui5hcmc7cmV0dXJuIEY/Ri5kb25lPygkW0MucmVzdWx0TmFtZV09Ri52YWx1ZSwkLm5leHQ9Qy5uZXh0TG9jLCQubWV0aG9kIT09InJldHVybiImJigkLm1ldGhvZD0ibmV4dCIsJC5hcmc9ZSksJC5kZWxlZ2F0ZT1udWxsLF8pOkY6KCQubWV0aG9kPSJ0aHJvdyIsJC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSwkLmRlbGVnYXRlPW51bGwsXyl9ZnVuY3Rpb24gQihDKXt2YXIgJD17dHJ5TG9jOkNbMF19OzEgaW4gQyYmKCQuY2F0Y2hMb2M9Q1sxXSksMiBpbiBDJiYoJC5maW5hbGx5TG9jPUNbMl0sJC5hZnRlckxvYz1DWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCgkKX1mdW5jdGlvbiByZShDKXt2YXIgJD1DLmNvbXBsZXRpb258fHt9OyQudHlwZT0ibm9ybWFsIixkZWxldGUgJC5hcmcsQy5jb21wbGV0aW9uPSR9ZnVuY3Rpb24gVihDKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sQy5mb3JFYWNoKEIsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gWShDKXtpZihDfHxDPT09IiIpe3ZhciAkPUNbbF07aWYoJClyZXR1cm4gJC5jYWxsKEMpO2lmKHR5cGVvZiBDLm5leHQ9PSJmdW5jdGlvbiIpcmV0dXJuIEM7aWYoIWlzTmFOKEMubGVuZ3RoKSl7dmFyIEU9LTEsTz1mdW5jdGlvbiBSKCl7Zm9yKDsrK0U8Qy5sZW5ndGg7KWlmKHIuY2FsbChDLEUpKXJldHVybiBSLnZhbHVlPUNbRV0sUi5kb25lPSExLFI7cmV0dXJuIFIudmFsdWU9ZSxSLmRvbmU9ITAsUn07cmV0dXJuIE8ubmV4dD1PfX10aHJvdyBuZXcgVHlwZUVycm9yKHR5cGVvZiBDKyIgaXMgbm90IGl0ZXJhYmxlIil9cmV0dXJuIHkucHJvdG90eXBlPXgsbyhiLCJjb25zdHJ1Y3RvciIse3ZhbHVlOngsY29uZmlndXJhYmxlOiEwfSksbyh4LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSkseS5kaXNwbGF5TmFtZT11KHgsYSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oQyl7dmFyICQ9dHlwZW9mIEM9PSJmdW5jdGlvbiImJkMuY29uc3RydWN0b3I7cmV0dXJuISEkJiYoJD09PXl8fCgkLmRpc3BsYXlOYW1lfHwkLm5hbWUpPT09IkdlbmVyYXRvckZ1bmN0aW9uIil9LHQubWFyaz1mdW5jdGlvbihDKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihDLHgpOihDLl9fcHJvdG9fXz14LHUoQyxhLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxDLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIpLEN9LHQuYXdyYXA9ZnVuY3Rpb24oQyl7cmV0dXJue19fYXdhaXQ6Q319LE4oRC5wcm90b3R5cGUpLHUoRC5wcm90b3R5cGUscyxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksdC5Bc3luY0l0ZXJhdG9yPUQsdC5hc3luYz1mdW5jdGlvbihDLCQsRSxPLFIpe1I9PT12b2lkIDAmJihSPVByb21pc2UpO3ZhciBGPW5ldyBEKGMoQywkLEUsTyksUik7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbigkKT9GOkYubmV4dCgpLnRoZW4oZnVuY3Rpb24oSCl7cmV0dXJuIEguZG9uZT9ILnZhbHVlOkYubmV4dCgpfSl9LE4oYiksdShiLGEsIkdlbmVyYXRvciIpLHUoYixsLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx1KGIsInRvU3RyaW5nIixmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSksdC5rZXlzPWZ1bmN0aW9uKEMpe3ZhciAkPU9iamVjdChDKSxFPVtdO2Zvcih2YXIgTyBpbiAkKUUucHVzaChPKTtyZXR1cm4gRS5yZXZlcnNlKCksZnVuY3Rpb24gUigpe2Zvcig7RS5sZW5ndGg7KXt2YXIgRj1FLnBvcCgpO2lmKEYgaW4gJClyZXR1cm4gUi52YWx1ZT1GLFIuZG9uZT0hMSxSfXJldHVybiBSLmRvbmU9ITAsUn19LHQudmFsdWVzPVksVi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlYscmVzZXQ6ZnVuY3Rpb24oQyl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9ZSx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz1lLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlKSwhQylmb3IodmFyICQgaW4gdGhpcykkLmNoYXJBdCgwKT09PSJ0IiYmci5jYWxsKHRoaXMsJCkmJiFpc05hTigrJC5zbGljZSgxKSkmJih0aGlzWyRdPWUpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBDPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKEMudHlwZT09PSJ0aHJvdyIpdGhyb3cgQy5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oQyl7aWYodGhpcy5kb25lKXRocm93IEM7dmFyICQ9dGhpcztmdW5jdGlvbiBFKG9lLCRlKXtyZXR1cm4gRi50eXBlPSJ0aHJvdyIsRi5hcmc9QywkLm5leHQ9b2UsJGUmJigkLm1ldGhvZD0ibmV4dCIsJC5hcmc9ZSksISEkZX1mb3IodmFyIE89dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO08+PTA7LS1PKXt2YXIgUj10aGlzLnRyeUVudHJpZXNbT10sRj1SLmNvbXBsZXRpb247aWYoUi50cnlMb2M9PT0icm9vdCIpcmV0dXJuIEUoImVuZCIpO2lmKFIudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBIPXIuY2FsbChSLCJjYXRjaExvYyIpLGFlPXIuY2FsbChSLCJmaW5hbGx5TG9jIik7aWYoSCYmYWUpe2lmKHRoaXMucHJldjxSLmNhdGNoTG9jKXJldHVybiBFKFIuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxSLmZpbmFsbHlMb2MpcmV0dXJuIEUoUi5maW5hbGx5TG9jKX1lbHNlIGlmKEgpe2lmKHRoaXMucHJldjxSLmNhdGNoTG9jKXJldHVybiBFKFIuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWFlKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8Ui5maW5hbGx5TG9jKXJldHVybiBFKFIuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihDLCQpe2Zvcih2YXIgRT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7RT49MDstLUUpe3ZhciBPPXRoaXMudHJ5RW50cmllc1tFXTtpZihPLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoTywiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8Ty5maW5hbGx5TG9jKXt2YXIgUj1PO2JyZWFrfX1SJiYoQz09PSJicmVhayJ8fEM9PT0iY29udGludWUiKSYmUi50cnlMb2M8PSQmJiQ8PVIuZmluYWxseUxvYyYmKFI9bnVsbCk7dmFyIEY9Uj9SLmNvbXBsZXRpb246e307cmV0dXJuIEYudHlwZT1DLEYuYXJnPSQsUj8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1SLmZpbmFsbHlMb2MsXyk6dGhpcy5jb21wbGV0ZShGKX0sY29tcGxldGU6ZnVuY3Rpb24oQywkKXtpZihDLnR5cGU9PT0idGhyb3ciKXRocm93IEMuYXJnO3JldHVybiBDLnR5cGU9PT0iYnJlYWsifHxDLnR5cGU9PT0iY29udGludWUiP3RoaXMubmV4dD1DLmFyZzpDLnR5cGU9PT0icmV0dXJuIj8odGhpcy5ydmFsPXRoaXMuYXJnPUMuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Qy50eXBlPT09Im5vcm1hbCImJiQmJih0aGlzLm5leHQ9JCksX30sZmluaXNoOmZ1bmN0aW9uKEMpe2Zvcih2YXIgJD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7JD49MDstLSQpe3ZhciBFPXRoaXMudHJ5RW50cmllc1skXTtpZihFLmZpbmFsbHlMb2M9PT1DKXJldHVybiB0aGlzLmNvbXBsZXRlKEUuY29tcGxldGlvbixFLmFmdGVyTG9jKSxyZShFKSxffX0sY2F0Y2g6ZnVuY3Rpb24oQyl7Zm9yKHZhciAkPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTskPj0wOy0tJCl7dmFyIEU9dGhpcy50cnlFbnRyaWVzWyRdO2lmKEUudHJ5TG9jPT09Qyl7dmFyIE89RS5jb21wbGV0aW9uO2lmKE8udHlwZT09PSJ0aHJvdyIpe3ZhciBSPU8uYXJnO3JlKEUpfXJldHVybiBSfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKEMsJCxFKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6WShDKSxyZXN1bHROYW1lOiQsbmV4dExvYzpFfSx0aGlzLm1ldGhvZD09PSJuZXh0IiYmKHRoaXMuYXJnPWUpLF99fSx0fWZ1bmN0aW9uIHZ5KGUsdCxuLHIsbyxpLGwpe3RyeXt2YXIgcz1lW2ldKGwpLGE9cy52YWx1ZX1jYXRjaCh1KXtuKHUpO3JldHVybn1zLmRvbmU/dChhKTpQcm9taXNlLnJlc29sdmUoYSkudGhlbihyLG8pfWZ1bmN0aW9uIGp3KGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7dmFyIGk9ZS5hcHBseSh0LG4pO2Z1bmN0aW9uIGwoYSl7dnkoaSxyLG8sbCxzLCJuZXh0IixhKX1mdW5jdGlvbiBzKGEpe3Z5KGkscixvLGwscywidGhyb3ciLGEpfWwodm9pZCAwKX0pfX12YXIgTlQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3VyKHRoaXMsZSksdGhpcy5ob3N0PXR9cmV0dXJuIGNyKGUsW3trZXk6ImdldERpc2FibGVVcmwiLHZhbHVlOmZ1bmN0aW9uKG4pe3JldHVybiIiLmNvbmNhdCh0aGlzLmhvc3QsIi9kaXNhYmxlP3JlZGlyZWN0X3RvPSIpLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQobikpfX0se2tleToiZ2V0TG9naW5VcmwiLHZhbHVlOmZ1bmN0aW9uKG4pe3JldHVybiIiLmNvbmNhdCh0aGlzLmhvc3QsIi9hdXRob3JpemU/cmVkaXJlY3RfdG89IikuY29uY2F0KGVuY29kZVVSSUNvbXBvbmVudChuKSl9fSx7a2V5OiJnZXRFbmFibGVVcmwiLHZhbHVlOmZ1bmN0aW9uKG4pe3JldHVybiIiLmNvbmNhdCh0aGlzLmhvc3QsIi9lbmFibGU/cmVkaXJlY3RfdG89IikuY29uY2F0KGVuY29kZVVSSUNvbXBvbmVudChuKSl9fSx7a2V5OiJnZXRQYXRjaGVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWp3KHlhKCkubWFyayhmdW5jdGlvbiByKG8pe3ZhciBpLGwscztyZXR1cm4geWEoKS53cmFwKGZ1bmN0aW9uKHUpe2Zvcig7Oylzd2l0Y2godS5wcmV2PXUubmV4dCl7Y2FzZSAwOnJldHVybiBpPW8ucGF0Y2hJZHMsbD1vLmhlYWRlcnMscz1pPyI/Ii5jb25jYXQoaS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIiIuY29uY2F0KGMsIj0iKS5jb25jYXQoZW5jb2RlVVJJQ29tcG9uZW50KGMpKX0pLmpvaW4oIiYiKSk6IiIsdS5hYnJ1cHQoInJldHVybiIsZmV0Y2goIiIuY29uY2F0KHRoaXMuaG9zdCwiL3BhdGNoZXMvfiIpLmNvbmNhdChzKSx7aGVhZGVyczpsfHx7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oZnVuY3Rpb24oYyl7cmV0dXJuIHd1KGMpfSkuY2F0Y2goeHUpKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiB1LnN0b3AoKX19LHIsdGhpcyl9KSk7ZnVuY3Rpb24gbihyKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG59KCl9LHtrZXk6ImdldEVkaXRVcmwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiIuY29uY2F0KHRoaXMuaG9zdCwiL3N0YXRpYy9lZGl0Iil9fSx7a2V5OiJwb3N0UGF0Y2hlcyIsdmFsdWU6ZnVuY3Rpb24obixyLG8pe3JldHVybiBmZXRjaCgiIi5jb25jYXQodGhpcy5ob3N0LCIvcGF0Y2hlcy9+Iikse2hlYWRlcnM6b3x8eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sbWV0aG9kOiJQT1NUIixib2R5OkpTT04uc3RyaW5naWZ5KEFlKHt9LG4scikpfSkudGhlbihmdW5jdGlvbihpKXtyZXR1cm4gd3UoaSl9KS5jYXRjaCh4dSl9fSx7a2V5OiJnZXRTZXNzaW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBmZXRjaCgiIi5jb25jYXQodGhpcy5ob3N0LCIvc2Vzc2lvbiIpKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiB3dShuKS5jYXRjaCh4dSl9KX19LHtrZXk6ImdldFRyZWUiLHZhbHVlOmZ1bmN0aW9uKG4pe3ZhciByPW4ucGF0Y2gsbz1yPT09dm9pZCAwPyExOnIsaT1uLmluY2x1ZGVTY2hlbWEsbD1pPT09dm9pZCAwPyExOmkscz1uLmluY2x1ZGVTb3VyY2UsYT1zPT09dm9pZCAwPyExOnMsdT1uLnRyZWVQYXRoLGM9dT09PXZvaWQgMD8iLyI6dSxkPW4uaGVhZGVycyxmPW5ldyBVUkxTZWFyY2hQYXJhbXM7cmV0dXJuIGYuc2V0KCJwYXRjaCIsby50b1N0cmluZygpKSxmLnNldCgic2NoZW1hIixsLnRvU3RyaW5nKCkpLGYuc2V0KCJzb3VyY2UiLGEudG9TdHJpbmcoKSksZmV0Y2goIiIuY29uY2F0KHRoaXMuaG9zdCwiL3RyZWUvfiIpLmNvbmNhdChjLCI/IikuY29uY2F0KGYudG9TdHJpbmcoKSkse2hlYWRlcnM6ZH0pLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIHd1KGgpfSkuY2F0Y2goeHUpfX1dKSxlfSgpO2Z1bmN0aW9uIHh1KGUpe3JldHVybiBDcih7c3RhdHVzQ29kZTo1MDAsbWVzc2FnZTplIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOiJVbmtub3duIGVycm9yIn0pfWZ1bmN0aW9uIHd1KGUpe3JldHVybiBXaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gV2goKXtyZXR1cm4gV2g9ancoeWEoKS5tYXJrKGZ1bmN0aW9uIGUodCl7dmFyIG47cmV0dXJuIHlhKCkud3JhcChmdW5jdGlvbihvKXtmb3IoOzspc3dpdGNoKG8ucHJldj1vLm5leHQpe2Nhc2UgMDppZihvLnByZXY9MCwhdC5vayl7by5uZXh0PTk7YnJlYWt9cmV0dXJuIG8udDA9RnMsby5uZXh0PTUsdC5qc29uKCk7Y2FzZSA1OnJldHVybiBvLnQxPW8uc2VudCxvLmFicnVwdCgicmV0dXJuIixvLnQwLm9rLmNhbGwoby50MCxvLnQxKSk7Y2FzZSA5OnJldHVybiBvLnByZXY9OSxvLm5leHQ9MTIsdC5qc29uKCk7Y2FzZSAxMjpyZXR1cm4gbj1vLnNlbnQsby5hYnJ1cHQoInJldHVybiIsQ3Ioe3N0YXR1c0NvZGU6dC5zdGF0dXMsbWVzc2FnZTpuLm1lc3NhZ2V8fHQuc3RhdHVzVGV4dCxkZXRhaWxzOm4uZGV0YWlsc3x8T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG4pLmZpbHRlcihmdW5jdGlvbihpKXt2YXIgbD1QbyhpLDEpLHM9bFswXTtyZXR1cm4gcyE9PSJtZXNzYWdlIn0pKX0pKTtjYXNlIDE2OnJldHVybiBvLnByZXY9MTYsby50Mj1vLmNhdGNoKDkpLG8uYWJydXB0KCJyZXR1cm4iLENyKHtzdGF0dXNDb2RlOnQuc3RhdHVzLG1lc3NhZ2U6dC5zdGF0dXNUZXh0fSkpO2Nhc2UgMTk6by5uZXh0PTI0O2JyZWFrO2Nhc2UgMjE6cmV0dXJuIG8ucHJldj0yMSxvLnQzPW8uY2F0Y2goMCksby5hYnJ1cHQoInJldHVybiIsQ3Ioe21lc3NhZ2U6by50MyBpbnN0YW5jZW9mIEVycm9yP28udDMubWVzc2FnZToiVW5rbm93biBlcnJvciJ9KSk7Y2FzZSAyNDpjYXNlImVuZCI6cmV0dXJuIG8uc3RvcCgpfX0sZSxudWxsLFtbMCwyMV0sWzksMTZdXSl9KSksV2guYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciAkbj17Y29udmVydEZpbGVTb3VyY2U6THcsZ2V0U2NoZW1hOlZiLGdldFZhbFBhdGg6WGIsZ2V0VmFsOmZULGdldFNvdXJjZTpuVCxyZXNvbHZlUGF0aDpjVCxzcGxpdE1vZHVsZUlkQW5kTW9kdWxlUGF0aDpyVCxpc1ZhbDpZYixjcmVhdGVWYWxQYXRoT2ZJdGVtOnJyLGdldFNIQTI1Nkhhc2g6VFQsY3JlYXRlUGF0Y2hKU09OUGF0aDpmdW5jdGlvbih0KXtyZXR1cm4iLyIuY29uY2F0KHQuc3BsaXQoIi4iKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4mJlJUKG4pfSkuam9pbigiLyIpKX0sVkFMX0VOQUJMRV9DT09LSUVfTkFNRToidmFsX2VuYWJsZSIsVkFMX1NUQVRFX0NPT0tJRToidmFsX3N0YXRlIixWQUxfU0VTU0lPTl9DT09LSUU6InZhbF9zZXNzaW9uIn07ZnVuY3Rpb24gUlQoZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoe3JldHVybiBlfX12YXIgenc9e2V4cG9ydHM6e319Oy8qIQoJQ29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uCglMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZQoJaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lcwoqLyhmdW5jdGlvbihlKXsoZnVuY3Rpb24oKXt2YXIgdD17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBuKCl7Zm9yKHZhciByPVtdLG89MDtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKXt2YXIgaT1hcmd1bWVudHNbb107aWYoaSl7dmFyIGw9dHlwZW9mIGk7aWYobD09PSJzdHJpbmcifHxsPT09Im51bWJlciIpci5wdXNoKGkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSl7aWYoaS5sZW5ndGgpe3ZhciBzPW4uYXBwbHkobnVsbCxpKTtzJiZyLnB1c2gocyl9fWVsc2UgaWYobD09PSJvYmplY3QiKXtpZihpLnRvU3RyaW5nIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyYmIWkudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygiW25hdGl2ZSBjb2RlXSIpKXtyLnB1c2goaS50b1N0cmluZygpKTtjb250aW51ZX1mb3IodmFyIGEgaW4gaSl0LmNhbGwoaSxhKSYmaVthXSYmci5wdXNoKGEpfX19cmV0dXJuIHIuam9pbigiICIpfWUuZXhwb3J0cz8obi5kZWZhdWx0PW4sZS5leHBvcnRzPW4pOndpbmRvdy5jbGFzc05hbWVzPW59KSgpfSkoencpO3ZhciBQVD16dy5leHBvcnRzO2NvbnN0IHZkPUxhKFBUKTtmdW5jdGlvbiB0ZSgpe3JldHVybiB0ZT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPVChlLHQpe3R5cGVvZiBlPT0iZnVuY3Rpb24iP2UodCk6ZSE9bnVsbCYmKGUuY3VycmVudD10KX1mdW5jdGlvbiBGdyguLi5lKXtyZXR1cm4gdD0+ZS5mb3JFYWNoKG49Pk9UKG4sdCkpfWZ1bmN0aW9uIFplKC4uLmUpe3JldHVybiBwLnVzZUNhbGxiYWNrKEZ3KC4uLmUpLGUpfWNvbnN0IFJsPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e2NoaWxkcmVuOm4sLi4ucn09ZSxvPXAuQ2hpbGRyZW4udG9BcnJheShuKSxpPW8uZmluZChNVCk7aWYoaSl7Y29uc3QgbD1pLnByb3BzLmNoaWxkcmVuLHM9by5tYXAoYT0+YT09PWk/cC5DaGlsZHJlbi5jb3VudChsKT4xP3AuQ2hpbGRyZW4ub25seShudWxsKTpwLmlzVmFsaWRFbGVtZW50KGwpP2wucHJvcHMuY2hpbGRyZW46bnVsbDphKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KFVoLHRlKHt9LHIse3JlZjp0fSkscC5pc1ZhbGlkRWxlbWVudChsKT9wLmNsb25lRWxlbWVudChsLHZvaWQgMCxzKTpudWxsKX1yZXR1cm4gcC5jcmVhdGVFbGVtZW50KFVoLHRlKHt9LHIse3JlZjp0fSksbil9KTtSbC5kaXNwbGF5TmFtZT0iU2xvdCI7Y29uc3QgVWg9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7Y2hpbGRyZW46biwuLi5yfT1lO3JldHVybiBwLmlzVmFsaWRFbGVtZW50KG4pP3AuY2xvbmVFbGVtZW50KG4sey4uLkxUKHIsbi5wcm9wcykscmVmOnQ/RncodCxuLnJlZik6bi5yZWZ9KTpwLkNoaWxkcmVuLmNvdW50KG4pPjE/cC5DaGlsZHJlbi5vbmx5KG51bGwpOm51bGx9KTtVaC5kaXNwbGF5TmFtZT0iU2xvdENsb25lIjtjb25zdCBBVD0oe2NoaWxkcmVuOmV9KT0+cC5jcmVhdGVFbGVtZW50KHAuRnJhZ21lbnQsbnVsbCxlKTtmdW5jdGlvbiBNVChlKXtyZXR1cm4gcC5pc1ZhbGlkRWxlbWVudChlKSYmZS50eXBlPT09QVR9ZnVuY3Rpb24gTFQoZSx0KXtjb25zdCBuPXsuLi50fTtmb3IoY29uc3QgciBpbiB0KXtjb25zdCBvPWVbcl0saT10W3JdOy9eb25bQS1aXS8udGVzdChyKT9vJiZpP25bcl09KC4uLnMpPT57aSguLi5zKSxvKC4uLnMpfTpvJiYobltyXT1vKTpyPT09InN0eWxlIj9uW3JdPXsuLi5vLC4uLml9OnI9PT0iY2xhc3NOYW1lIiYmKG5bcl09W28saV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSl9cmV0dXJuey4uLmUsLi4ubn19Y29uc3QgRFQ9WyJhIiwiYnV0dG9uIiwiZGl2IiwiZm9ybSIsImgyIiwiaDMiLCJpbWciLCJpbnB1dCIsImxhYmVsIiwibGkiLCJuYXYiLCJvbCIsInAiLCJzcGFuIiwic3ZnIiwidWwiXSxJZT1EVC5yZWR1Y2UoKGUsdCk9Pntjb25zdCBuPXAuZm9yd2FyZFJlZigocixvKT0+e2NvbnN0e2FzQ2hpbGQ6aSwuLi5sfT1yLHM9aT9SbDp0O3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e3dpbmRvd1tTeW1ib2wuZm9yKCJyYWRpeC11aSIpXT0hMH0sW10pLHAuY3JlYXRlRWxlbWVudChzLHRlKHt9LGwse3JlZjpvfSkpfSk7cmV0dXJuIG4uZGlzcGxheU5hbWU9YFByaW1pdGl2ZS4ke3R9YCx7Li4uZSxbdF06bn19LHt9KTtmdW5jdGlvbiBJVChlLHQpe2UmJk5yLmZsdXNoU3luYygoKT0+ZS5kaXNwYXRjaEV2ZW50KHQpKX1jb25zdCBObj1nbG9iYWxUaGlzIT1udWxsJiZnbG9iYWxUaGlzLmRvY3VtZW50P3AudXNlTGF5b3V0RWZmZWN0OigpPT57fTtmdW5jdGlvbiBqVChlLHQpe3JldHVybiBwLnVzZVJlZHVjZXIoKG4scik9Pntjb25zdCBvPXRbbl1bcl07cmV0dXJuIG8/P259LGUpfWNvbnN0IFdsPWU9Pntjb25zdHtwcmVzZW50OnQsY2hpbGRyZW46bn09ZSxyPXpUKHQpLG89dHlwZW9mIG49PSJmdW5jdGlvbiI/bih7cHJlc2VudDpyLmlzUHJlc2VudH0pOnAuQ2hpbGRyZW4ub25seShuKSxpPVplKHIucmVmLG8ucmVmKTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiJ8fHIuaXNQcmVzZW50P3AuY2xvbmVFbGVtZW50KG8se3JlZjppfSk6bnVsbH07V2wuZGlzcGxheU5hbWU9IlByZXNlbmNlIjtmdW5jdGlvbiB6VChlKXtjb25zdFt0LG5dPXAudXNlU3RhdGUoKSxyPXAudXNlUmVmKHt9KSxvPXAudXNlUmVmKGUpLGk9cC51c2VSZWYoIm5vbmUiKSxsPWU/Im1vdW50ZWQiOiJ1bm1vdW50ZWQiLFtzLGFdPWpUKGwse21vdW50ZWQ6e1VOTU9VTlQ6InVubW91bnRlZCIsQU5JTUFUSU9OX09VVDoidW5tb3VudFN1c3BlbmRlZCJ9LHVubW91bnRTdXNwZW5kZWQ6e01PVU5UOiJtb3VudGVkIixBTklNQVRJT05fRU5EOiJ1bm1vdW50ZWQifSx1bm1vdW50ZWQ6e01PVU5UOiJtb3VudGVkIn19KTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9Pntjb25zdCB1PV91KHIuY3VycmVudCk7aS5jdXJyZW50PXM9PT0ibW91bnRlZCI/dToibm9uZSJ9LFtzXSksTm4oKCk9Pntjb25zdCB1PXIuY3VycmVudCxjPW8uY3VycmVudDtpZihjIT09ZSl7Y29uc3QgZj1pLmN1cnJlbnQsaD1fdSh1KTtlP2EoIk1PVU5UIik6aD09PSJub25lInx8KHU9PW51bGw/dm9pZCAwOnUuZGlzcGxheSk9PT0ibm9uZSI/YSgiVU5NT1VOVCIpOmEoYyYmZiE9PWg/IkFOSU1BVElPTl9PVVQiOiJVTk1PVU5UIiksby5jdXJyZW50PWV9fSxbZSxhXSksTm4oKCk9PntpZih0KXtjb25zdCB1PWQ9Pntjb25zdCBoPV91KHIuY3VycmVudCkuaW5jbHVkZXMoZC5hbmltYXRpb25OYW1lKTtkLnRhcmdldD09PXQmJmgmJk5yLmZsdXNoU3luYygoKT0+YSgiQU5JTUFUSU9OX0VORCIpKX0sYz1kPT57ZC50YXJnZXQ9PT10JiYoaS5jdXJyZW50PV91KHIuY3VycmVudCkpfTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsYyksdC5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25jYW5jZWwiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix1KSwoKT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLGMpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uY2FuY2VsIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmVuZCIsdSl9fWVsc2UgYSgiQU5JTUFUSU9OX0VORCIpfSxbdCxhXSkse2lzUHJlc2VudDpbIm1vdW50ZWQiLCJ1bm1vdW50U3VzcGVuZGVkIl0uaW5jbHVkZXMocykscmVmOnAudXNlQ2FsbGJhY2sodT0+e3UmJihyLmN1cnJlbnQ9Z2V0Q29tcHV0ZWRTdHlsZSh1KSksbih1KX0sW10pfX1mdW5jdGlvbiBfdShlKXtyZXR1cm4oZT09bnVsbD92b2lkIDA6ZS5hbmltYXRpb25OYW1lKXx8Im5vbmUifWZ1bmN0aW9uIE5pKGUsdD1bXSl7bGV0IG49W107ZnVuY3Rpb24gcihpLGwpe2NvbnN0IHM9cC5jcmVhdGVDb250ZXh0KGwpLGE9bi5sZW5ndGg7bj1bLi4ubixsXTtmdW5jdGlvbiB1KGQpe2NvbnN0e3Njb3BlOmYsY2hpbGRyZW46aCwuLi5tfT1kLGc9KGY9PW51bGw/dm9pZCAwOmZbZV1bYV0pfHxzLF89cC51c2VNZW1vKCgpPT5tLE9iamVjdC52YWx1ZXMobSkpO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoZy5Qcm92aWRlcix7dmFsdWU6X30saCl9ZnVuY3Rpb24gYyhkLGYpe2NvbnN0IGg9KGY9PW51bGw/dm9pZCAwOmZbZV1bYV0pfHxzLG09cC51c2VDb250ZXh0KGgpO2lmKG0pcmV0dXJuIG07aWYobCE9PXZvaWQgMClyZXR1cm4gbDt0aHJvdyBuZXcgRXJyb3IoYFxgJHtkfVxgIG11c3QgYmUgdXNlZCB3aXRoaW4gXGAke2l9XGBgKX1yZXR1cm4gdS5kaXNwbGF5TmFtZT1pKyJQcm92aWRlciIsW3UsY119Y29uc3Qgbz0oKT0+e2NvbnN0IGk9bi5tYXAobD0+cC5jcmVhdGVDb250ZXh0KGwpKTtyZXR1cm4gZnVuY3Rpb24ocyl7Y29uc3QgYT0ocz09bnVsbD92b2lkIDA6c1tlXSl8fGk7cmV0dXJuIHAudXNlTWVtbygoKT0+KHtbYF9fc2NvcGUke2V9YF06ey4uLnMsW2VdOmF9fSksW3MsYV0pfX07cmV0dXJuIG8uc2NvcGVOYW1lPWUsW3IsRlQobywuLi50KV19ZnVuY3Rpb24gRlQoLi4uZSl7Y29uc3QgdD1lWzBdO2lmKGUubGVuZ3RoPT09MSlyZXR1cm4gdDtjb25zdCBuPSgpPT57Y29uc3Qgcj1lLm1hcChvPT4oe3VzZVNjb3BlOm8oKSxzY29wZU5hbWU6by5zY29wZU5hbWV9KSk7cmV0dXJuIGZ1bmN0aW9uKGkpe2NvbnN0IGw9ci5yZWR1Y2UoKHMse3VzZVNjb3BlOmEsc2NvcGVOYW1lOnV9KT0+e2NvbnN0IGQ9YShpKVtgX19zY29wZSR7dX1gXTtyZXR1cm57Li4ucywuLi5kfX0se30pO3JldHVybiBwLnVzZU1lbW8oKCk9Pih7W2BfX3Njb3BlJHt0LnNjb3BlTmFtZX1gXTpsfSksW2xdKX19O3JldHVybiBuLnNjb3BlTmFtZT10LnNjb3BlTmFtZSxufWZ1bmN0aW9uIEh0KGUpe2NvbnN0IHQ9cC51c2VSZWYoZSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57dC5jdXJyZW50PWV9KSxwLnVzZU1lbW8oKCk9PiguLi5uKT0+e3ZhciByO3JldHVybihyPXQuY3VycmVudCk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLmNhbGwodCwuLi5uKX0sW10pfWNvbnN0IEJUPXAuY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIFdnKGUpe2NvbnN0IHQ9cC51c2VDb250ZXh0KEJUKTtyZXR1cm4gZXx8dHx8Imx0ciJ9ZnVuY3Rpb24gSGgoZSxbdCxuXSl7cmV0dXJuIE1hdGgubWluKG4sTWF0aC5tYXgodCxlKSl9ZnVuY3Rpb24gR2UoZSx0LHtjaGVja0ZvckRlZmF1bHRQcmV2ZW50ZWQ6bj0hMH09e30pe3JldHVybiBmdW5jdGlvbihvKXtpZihlPT1udWxsfHxlKG8pLG49PT0hMXx8IW8uZGVmYXVsdFByZXZlbnRlZClyZXR1cm4gdD09bnVsbD92b2lkIDA6dChvKX19ZnVuY3Rpb24gV1QoZSx0KXtyZXR1cm4gcC51c2VSZWR1Y2VyKChuLHIpPT57Y29uc3Qgbz10W25dW3JdO3JldHVybiBvPz9ufSxlKX1jb25zdCBCdz0iU2Nyb2xsQXJlYSIsW1d3LGNMXT1OaShCdyksW1VULEtuXT1XdyhCdyksSFQ9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNjcm9sbEFyZWE6bix0eXBlOnI9ImhvdmVyIixkaXI6byxzY3JvbGxIaWRlRGVsYXk6aT02MDAsLi4ubH09ZSxbcyxhXT1wLnVzZVN0YXRlKG51bGwpLFt1LGNdPXAudXNlU3RhdGUobnVsbCksW2QsZl09cC51c2VTdGF0ZShudWxsKSxbaCxtXT1wLnVzZVN0YXRlKG51bGwpLFtnLF9dPXAudXNlU3RhdGUobnVsbCksW3YseV09cC51c2VTdGF0ZSgwKSxbeCxTXT1wLnVzZVN0YXRlKDApLFtrLFRdPXAudXNlU3RhdGUoITEpLFtiLE5dPXAudXNlU3RhdGUoITEpLEQ9WmUodCxqPT5hKGopKSxNPVdnKG8pO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoVVQse3Njb3BlOm4sdHlwZTpyLGRpcjpNLHNjcm9sbEhpZGVEZWxheTppLHNjcm9sbEFyZWE6cyx2aWV3cG9ydDp1LG9uVmlld3BvcnRDaGFuZ2U6Yyxjb250ZW50OmQsb25Db250ZW50Q2hhbmdlOmYsc2Nyb2xsYmFyWDpoLG9uU2Nyb2xsYmFyWENoYW5nZTptLHNjcm9sbGJhclhFbmFibGVkOmssb25TY3JvbGxiYXJYRW5hYmxlZENoYW5nZTpULHNjcm9sbGJhclk6ZyxvblNjcm9sbGJhcllDaGFuZ2U6XyxzY3JvbGxiYXJZRW5hYmxlZDpiLG9uU2Nyb2xsYmFyWUVuYWJsZWRDaGFuZ2U6TixvbkNvcm5lcldpZHRoQ2hhbmdlOnksb25Db3JuZXJIZWlnaHRDaGFuZ2U6U30scC5jcmVhdGVFbGVtZW50KEllLmRpdix0ZSh7ZGlyOk19LGwse3JlZjpELHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLCItLXJhZGl4LXNjcm9sbC1hcmVhLWNvcm5lci13aWR0aCI6disicHgiLCItLXJhZGl4LXNjcm9sbC1hcmVhLWNvcm5lci1oZWlnaHQiOngrInB4IiwuLi5lLnN0eWxlfX0pKSl9KSxWVD0iU2Nyb2xsQXJlYVZpZXdwb3J0IixLVD1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2Nyb2xsQXJlYTpuLGNoaWxkcmVuOnIsLi4ub309ZSxpPUtuKFZULG4pLGw9cC51c2VSZWYobnVsbCkscz1aZSh0LGwsaS5vblZpZXdwb3J0Q2hhbmdlKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KHAuRnJhZ21lbnQsbnVsbCxwLmNyZWF0ZUVsZW1lbnQoInN0eWxlIix7ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDoiW2RhdGEtcmFkaXgtc2Nyb2xsLWFyZWEtdmlld3BvcnRde3Njcm9sbGJhci13aWR0aDpub25lOy1tcy1vdmVyZmxvdy1zdHlsZTpub25lOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO31bZGF0YS1yYWRpeC1zY3JvbGwtYXJlYS12aWV3cG9ydF06Oi13ZWJraXQtc2Nyb2xsYmFye2Rpc3BsYXk6bm9uZX0ifX0pLHAuY3JlYXRlRWxlbWVudChJZS5kaXYsdGUoeyJkYXRhLXJhZGl4LXNjcm9sbC1hcmVhLXZpZXdwb3J0IjoiIn0sbyx7cmVmOnMsc3R5bGU6e292ZXJmbG93WDppLnNjcm9sbGJhclhFbmFibGVkPyJzY3JvbGwiOiJoaWRkZW4iLG92ZXJmbG93WTppLnNjcm9sbGJhcllFbmFibGVkPyJzY3JvbGwiOiJoaWRkZW4iLC4uLmUuc3R5bGV9fSkscC5jcmVhdGVFbGVtZW50KCJkaXYiLHtyZWY6aS5vbkNvbnRlbnRDaGFuZ2Usc3R5bGU6e21pbldpZHRoOiIxMDAlIixkaXNwbGF5OiJ0YWJsZSJ9fSxyKSkpfSkscXI9IlNjcm9sbEFyZWFTY3JvbGxiYXIiLFV3PXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e2ZvcmNlTW91bnQ6biwuLi5yfT1lLG89S24ocXIsZS5fX3Njb3BlU2Nyb2xsQXJlYSkse29uU2Nyb2xsYmFyWEVuYWJsZWRDaGFuZ2U6aSxvblNjcm9sbGJhcllFbmFibGVkQ2hhbmdlOmx9PW8scz1lLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+KHM/aSghMCk6bCghMCksKCk9PntzP2koITEpOmwoITEpfSksW3MsaSxsXSksby50eXBlPT09ImhvdmVyIj9wLmNyZWF0ZUVsZW1lbnQoR1QsdGUoe30scix7cmVmOnQsZm9yY2VNb3VudDpufSkpOm8udHlwZT09PSJzY3JvbGwiP3AuY3JlYXRlRWxlbWVudChZVCx0ZSh7fSxyLHtyZWY6dCxmb3JjZU1vdW50Om59KSk6by50eXBlPT09ImF1dG8iP3AuY3JlYXRlRWxlbWVudChIdyx0ZSh7fSxyLHtyZWY6dCxmb3JjZU1vdW50Om59KSk6by50eXBlPT09ImFsd2F5cyI/cC5jcmVhdGVFbGVtZW50KFVnLHRlKHt9LHIse3JlZjp0fSkpOm51bGx9KSxHVD1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtmb3JjZU1vdW50Om4sLi4ucn09ZSxvPUtuKHFyLGUuX19zY29wZVNjcm9sbEFyZWEpLFtpLGxdPXAudXNlU3RhdGUoITEpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2NvbnN0IHM9by5zY3JvbGxBcmVhO2xldCBhPTA7aWYocyl7Y29uc3QgdT0oKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQoYSksbCghMCl9LGM9KCk9PnthPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT5sKCExKSxvLnNjcm9sbEhpZGVEZWxheSl9O3JldHVybiBzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJlbnRlciIsdSkscy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLGMpLCgpPT57d2luZG93LmNsZWFyVGltZW91dChhKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJlbnRlciIsdSkscy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLGMpfX19LFtvLnNjcm9sbEFyZWEsby5zY3JvbGxIaWRlRGVsYXldKSxwLmNyZWF0ZUVsZW1lbnQoV2wse3ByZXNlbnQ6bnx8aX0scC5jcmVhdGVFbGVtZW50KEh3LHRlKHsiZGF0YS1zdGF0ZSI6aT8idmlzaWJsZSI6ImhpZGRlbiJ9LHIse3JlZjp0fSkpKX0pLFlUPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e2ZvcmNlTW91bnQ6biwuLi5yfT1lLG89S24ocXIsZS5fX3Njb3BlU2Nyb2xsQXJlYSksaT1lLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiLGw9eGQoKCk9PmEoIlNDUk9MTF9FTkQiKSwxMDApLFtzLGFdPVdUKCJoaWRkZW4iLHtoaWRkZW46e1NDUk9MTDoic2Nyb2xsaW5nIn0sc2Nyb2xsaW5nOntTQ1JPTExfRU5EOiJpZGxlIixQT0lOVEVSX0VOVEVSOiJpbnRlcmFjdGluZyJ9LGludGVyYWN0aW5nOntTQ1JPTEw6ImludGVyYWN0aW5nIixQT0lOVEVSX0xFQVZFOiJpZGxlIn0saWRsZTp7SElERToiaGlkZGVuIixTQ1JPTEw6InNjcm9sbGluZyIsUE9JTlRFUl9FTlRFUjoiaW50ZXJhY3RpbmcifX0pO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2lmKHM9PT0iaWRsZSIpe2NvbnN0IHU9d2luZG93LnNldFRpbWVvdXQoKCk9PmEoIkhJREUiKSxvLnNjcm9sbEhpZGVEZWxheSk7cmV0dXJuKCk9PndpbmRvdy5jbGVhclRpbWVvdXQodSl9fSxbcyxvLnNjcm9sbEhpZGVEZWxheSxhXSkscC51c2VFZmZlY3QoKCk9Pntjb25zdCB1PW8udmlld3BvcnQsYz1pPyJzY3JvbGxMZWZ0Ijoic2Nyb2xsVG9wIjtpZih1KXtsZXQgZD11W2NdO2NvbnN0IGY9KCk9Pntjb25zdCBoPXVbY107ZCE9PWgmJihhKCJTQ1JPTEwiKSxsKCkpLGQ9aH07cmV0dXJuIHUuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmKSwoKT0+dS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLGYpfX0sW28udmlld3BvcnQsaSxhLGxdKSxwLmNyZWF0ZUVsZW1lbnQoV2wse3ByZXNlbnQ6bnx8cyE9PSJoaWRkZW4ifSxwLmNyZWF0ZUVsZW1lbnQoVWcsdGUoeyJkYXRhLXN0YXRlIjpzPT09ImhpZGRlbiI/ImhpZGRlbiI6InZpc2libGUifSxyLHtyZWY6dCxvblBvaW50ZXJFbnRlcjpHZShlLm9uUG9pbnRlckVudGVyLCgpPT5hKCJQT0lOVEVSX0VOVEVSIikpLG9uUG9pbnRlckxlYXZlOkdlKGUub25Qb2ludGVyTGVhdmUsKCk9PmEoIlBPSU5URVJfTEVBVkUiKSl9KSkpfSksSHc9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3Qgbj1LbihxcixlLl9fc2NvcGVTY3JvbGxBcmVhKSx7Zm9yY2VNb3VudDpyLC4uLm99PWUsW2ksbF09cC51c2VTdGF0ZSghMSkscz1lLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiLGE9eGQoKCk9PntpZihuLnZpZXdwb3J0KXtjb25zdCB1PW4udmlld3BvcnQub2Zmc2V0V2lkdGg8bi52aWV3cG9ydC5zY3JvbGxXaWR0aCxjPW4udmlld3BvcnQub2Zmc2V0SGVpZ2h0PG4udmlld3BvcnQuc2Nyb2xsSGVpZ2h0O2wocz91OmMpfX0sMTApO3JldHVybiBQbChuLnZpZXdwb3J0LGEpLFBsKG4uY29udGVudCxhKSxwLmNyZWF0ZUVsZW1lbnQoV2wse3ByZXNlbnQ6cnx8aX0scC5jcmVhdGVFbGVtZW50KFVnLHRlKHsiZGF0YS1zdGF0ZSI6aT8idmlzaWJsZSI6ImhpZGRlbiJ9LG8se3JlZjp0fSkpKX0pLFVnPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e29yaWVudGF0aW9uOm49InZlcnRpY2FsIiwuLi5yfT1lLG89S24ocXIsZS5fX3Njb3BlU2Nyb2xsQXJlYSksaT1wLnVzZVJlZihudWxsKSxsPXAudXNlUmVmKDApLFtzLGFdPXAudXNlU3RhdGUoe2NvbnRlbnQ6MCx2aWV3cG9ydDowLHNjcm9sbGJhcjp7c2l6ZTowLHBhZGRpbmdTdGFydDowLHBhZGRpbmdFbmQ6MH19KSx1PVl3KHMudmlld3BvcnQscy5jb250ZW50KSxjPXsuLi5yLHNpemVzOnMsb25TaXplc0NoYW5nZTphLGhhc1RodW1iOnU+MCYmdTwxLG9uVGh1bWJDaGFuZ2U6Zj0+aS5jdXJyZW50PWYsb25UaHVtYlBvaW50ZXJVcDooKT0+bC5jdXJyZW50PTAsb25UaHVtYlBvaW50ZXJEb3duOmY9PmwuY3VycmVudD1mfTtmdW5jdGlvbiBkKGYsaCl7cmV0dXJuIG5OKGYsbC5jdXJyZW50LHMsaCl9cmV0dXJuIG49PT0iaG9yaXpvbnRhbCI/cC5jcmVhdGVFbGVtZW50KFhULHRlKHt9LGMse3JlZjp0LG9uVGh1bWJQb3NpdGlvbkNoYW5nZTooKT0+e2lmKG8udmlld3BvcnQmJmkuY3VycmVudCl7Y29uc3QgZj1vLnZpZXdwb3J0LnNjcm9sbExlZnQsaD15eShmLHMsby5kaXIpO2kuY3VycmVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZTNkKCR7aH1weCwgMCwgMClgfX0sb25XaGVlbFNjcm9sbDpmPT57by52aWV3cG9ydCYmKG8udmlld3BvcnQuc2Nyb2xsTGVmdD1mKX0sb25EcmFnU2Nyb2xsOmY9PntvLnZpZXdwb3J0JiYoby52aWV3cG9ydC5zY3JvbGxMZWZ0PWQoZixvLmRpcikpfX0pKTpuPT09InZlcnRpY2FsIj9wLmNyZWF0ZUVsZW1lbnQoUVQsdGUoe30sYyx7cmVmOnQsb25UaHVtYlBvc2l0aW9uQ2hhbmdlOigpPT57aWYoby52aWV3cG9ydCYmaS5jdXJyZW50KXtjb25zdCBmPW8udmlld3BvcnQuc2Nyb2xsVG9wLGg9eXkoZixzKTtpLmN1cnJlbnQuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUzZCgwLCAke2h9cHgsIDApYH19LG9uV2hlZWxTY3JvbGw6Zj0+e28udmlld3BvcnQmJihvLnZpZXdwb3J0LnNjcm9sbFRvcD1mKX0sb25EcmFnU2Nyb2xsOmY9PntvLnZpZXdwb3J0JiYoby52aWV3cG9ydC5zY3JvbGxUb3A9ZChmKSl9fSkpOm51bGx9KSxYVD1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtzaXplczpuLG9uU2l6ZXNDaGFuZ2U6ciwuLi5vfT1lLGk9S24ocXIsZS5fX3Njb3BlU2Nyb2xsQXJlYSksW2wsc109cC51c2VTdGF0ZSgpLGE9cC51c2VSZWYobnVsbCksdT1aZSh0LGEsaS5vblNjcm9sbGJhclhDaGFuZ2UpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2EuY3VycmVudCYmcyhnZXRDb21wdXRlZFN0eWxlKGEuY3VycmVudCkpfSxbYV0pLHAuY3JlYXRlRWxlbWVudChLdyx0ZSh7ImRhdGEtb3JpZW50YXRpb24iOiJob3Jpem9udGFsIn0sbyx7cmVmOnUsc2l6ZXM6bixzdHlsZTp7Ym90dG9tOjAsbGVmdDppLmRpcj09PSJydGwiPyJ2YXIoLS1yYWRpeC1zY3JvbGwtYXJlYS1jb3JuZXItd2lkdGgpIjowLHJpZ2h0OmkuZGlyPT09Imx0ciI/InZhcigtLXJhZGl4LXNjcm9sbC1hcmVhLWNvcm5lci13aWR0aCkiOjAsIi0tcmFkaXgtc2Nyb2xsLWFyZWEtdGh1bWItd2lkdGgiOnlkKG4pKyJweCIsLi4uZS5zdHlsZX0sb25UaHVtYlBvaW50ZXJEb3duOmM9PmUub25UaHVtYlBvaW50ZXJEb3duKGMueCksb25EcmFnU2Nyb2xsOmM9PmUub25EcmFnU2Nyb2xsKGMueCksb25XaGVlbFNjcm9sbDooYyxkKT0+e2lmKGkudmlld3BvcnQpe2NvbnN0IGY9aS52aWV3cG9ydC5zY3JvbGxMZWZ0K2MuZGVsdGFYO2Uub25XaGVlbFNjcm9sbChmKSxRdyhmLGQpJiZjLnByZXZlbnREZWZhdWx0KCl9fSxvblJlc2l6ZTooKT0+e2EuY3VycmVudCYmaS52aWV3cG9ydCYmbCYmcih7Y29udGVudDppLnZpZXdwb3J0LnNjcm9sbFdpZHRoLHZpZXdwb3J0Omkudmlld3BvcnQub2Zmc2V0V2lkdGgsc2Nyb2xsYmFyOntzaXplOmEuY3VycmVudC5jbGllbnRXaWR0aCxwYWRkaW5nU3RhcnQ6YmMobC5wYWRkaW5nTGVmdCkscGFkZGluZ0VuZDpiYyhsLnBhZGRpbmdSaWdodCl9fSl9fSkpfSksUVQ9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7c2l6ZXM6bixvblNpemVzQ2hhbmdlOnIsLi4ub309ZSxpPUtuKHFyLGUuX19zY29wZVNjcm9sbEFyZWEpLFtsLHNdPXAudXNlU3RhdGUoKSxhPXAudXNlUmVmKG51bGwpLHU9WmUodCxhLGkub25TY3JvbGxiYXJZQ2hhbmdlKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PnthLmN1cnJlbnQmJnMoZ2V0Q29tcHV0ZWRTdHlsZShhLmN1cnJlbnQpKX0sW2FdKSxwLmNyZWF0ZUVsZW1lbnQoS3csdGUoeyJkYXRhLW9yaWVudGF0aW9uIjoidmVydGljYWwifSxvLHtyZWY6dSxzaXplczpuLHN0eWxlOnt0b3A6MCxyaWdodDppLmRpcj09PSJsdHIiPzA6dm9pZCAwLGxlZnQ6aS5kaXI9PT0icnRsIj8wOnZvaWQgMCxib3R0b206InZhcigtLXJhZGl4LXNjcm9sbC1hcmVhLWNvcm5lci1oZWlnaHQpIiwiLS1yYWRpeC1zY3JvbGwtYXJlYS10aHVtYi1oZWlnaHQiOnlkKG4pKyJweCIsLi4uZS5zdHlsZX0sb25UaHVtYlBvaW50ZXJEb3duOmM9PmUub25UaHVtYlBvaW50ZXJEb3duKGMueSksb25EcmFnU2Nyb2xsOmM9PmUub25EcmFnU2Nyb2xsKGMueSksb25XaGVlbFNjcm9sbDooYyxkKT0+e2lmKGkudmlld3BvcnQpe2NvbnN0IGY9aS52aWV3cG9ydC5zY3JvbGxUb3ArYy5kZWx0YVk7ZS5vbldoZWVsU2Nyb2xsKGYpLFF3KGYsZCkmJmMucHJldmVudERlZmF1bHQoKX19LG9uUmVzaXplOigpPT57YS5jdXJyZW50JiZpLnZpZXdwb3J0JiZsJiZyKHtjb250ZW50Omkudmlld3BvcnQuc2Nyb2xsSGVpZ2h0LHZpZXdwb3J0Omkudmlld3BvcnQub2Zmc2V0SGVpZ2h0LHNjcm9sbGJhcjp7c2l6ZTphLmN1cnJlbnQuY2xpZW50SGVpZ2h0LHBhZGRpbmdTdGFydDpiYyhsLnBhZGRpbmdUb3ApLHBhZGRpbmdFbmQ6YmMobC5wYWRkaW5nQm90dG9tKX19KX19KSl9KSxbSlQsVnddPVd3KHFyKSxLdz1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2Nyb2xsQXJlYTpuLHNpemVzOnIsaGFzVGh1bWI6byxvblRodW1iQ2hhbmdlOmksb25UaHVtYlBvaW50ZXJVcDpsLG9uVGh1bWJQb2ludGVyRG93bjpzLG9uVGh1bWJQb3NpdGlvbkNoYW5nZTphLG9uRHJhZ1Njcm9sbDp1LG9uV2hlZWxTY3JvbGw6YyxvblJlc2l6ZTpkLC4uLmZ9PWUsaD1LbihxcixuKSxbbSxnXT1wLnVzZVN0YXRlKG51bGwpLF89WmUodCxEPT5nKEQpKSx2PXAudXNlUmVmKG51bGwpLHk9cC51c2VSZWYoIiIpLHg9aC52aWV3cG9ydCxTPXIuY29udGVudC1yLnZpZXdwb3J0LGs9SHQoYyksVD1IdChhKSxiPXhkKGQsMTApO2Z1bmN0aW9uIE4oRCl7aWYodi5jdXJyZW50KXtjb25zdCBNPUQuY2xpZW50WC12LmN1cnJlbnQubGVmdCxqPUQuY2xpZW50WS12LmN1cnJlbnQudG9wO3Uoe3g6TSx5Omp9KX19cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3QgRD1NPT57Y29uc3Qgaj1NLnRhcmdldDsobT09bnVsbD92b2lkIDA6bS5jb250YWlucyhqKSkmJmsoTSxTKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixELHtwYXNzaXZlOiExfSksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixELHtwYXNzaXZlOiExfSl9LFt4LG0sUyxrXSkscC51c2VFZmZlY3QoVCxbcixUXSksUGwobSxiKSxQbChoLmNvbnRlbnQsYikscC5jcmVhdGVFbGVtZW50KEpULHtzY29wZTpuLHNjcm9sbGJhcjptLGhhc1RodW1iOm8sb25UaHVtYkNoYW5nZTpIdChpKSxvblRodW1iUG9pbnRlclVwOkh0KGwpLG9uVGh1bWJQb3NpdGlvbkNoYW5nZTpULG9uVGh1bWJQb2ludGVyRG93bjpIdChzKX0scC5jcmVhdGVFbGVtZW50KEllLmRpdix0ZSh7fSxmLHtyZWY6XyxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIiwuLi5mLnN0eWxlfSxvblBvaW50ZXJEb3duOkdlKGUub25Qb2ludGVyRG93bixEPT57RC5idXR0b249PT0wJiYoRC50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoRC5wb2ludGVySWQpLHYuY3VycmVudD1tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHkuY3VycmVudD1kb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3QsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIixoLnZpZXdwb3J0JiYoaC52aWV3cG9ydC5zdHlsZS5zY3JvbGxCZWhhdmlvcj0iYXV0byIpLE4oRCkpfSksb25Qb2ludGVyTW92ZTpHZShlLm9uUG9pbnRlck1vdmUsTiksb25Qb2ludGVyVXA6R2UoZS5vblBvaW50ZXJVcCxEPT57Y29uc3QgTT1ELnRhcmdldDtNLmhhc1BvaW50ZXJDYXB0dXJlKEQucG9pbnRlcklkKSYmTS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoRC5wb2ludGVySWQpLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD15LmN1cnJlbnQsaC52aWV3cG9ydCYmKGgudmlld3BvcnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9IiIpLHYuY3VycmVudD1udWxsfSl9KSkpfSksVmg9IlNjcm9sbEFyZWFUaHVtYiIsWlQ9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7Zm9yY2VNb3VudDpuLC4uLnJ9PWUsbz1WdyhWaCxlLl9fc2NvcGVTY3JvbGxBcmVhKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KFdsLHtwcmVzZW50Om58fG8uaGFzVGh1bWJ9LHAuY3JlYXRlRWxlbWVudChxVCx0ZSh7cmVmOnR9LHIpKSl9KSxxVD1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2Nyb2xsQXJlYTpuLHN0eWxlOnIsLi4ub309ZSxpPUtuKFZoLG4pLGw9VncoVmgsbikse29uVGh1bWJQb3NpdGlvbkNoYW5nZTpzfT1sLGE9WmUodCxkPT5sLm9uVGh1bWJDaGFuZ2UoZCkpLHU9cC51c2VSZWYoKSxjPXhkKCgpPT57dS5jdXJyZW50JiYodS5jdXJyZW50KCksdS5jdXJyZW50PXZvaWQgMCl9LDEwMCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3QgZD1pLnZpZXdwb3J0O2lmKGQpe2NvbnN0IGY9KCk9PntpZihjKCksIXUuY3VycmVudCl7Y29uc3QgaD1yTihkLHMpO3UuY3VycmVudD1oLHMoKX19O3JldHVybiBzKCksZC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLGYpLCgpPT5kLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsZil9fSxbaS52aWV3cG9ydCxjLHNdKSxwLmNyZWF0ZUVsZW1lbnQoSWUuZGl2LHRlKHsiZGF0YS1zdGF0ZSI6bC5oYXNUaHVtYj8idmlzaWJsZSI6ImhpZGRlbiJ9LG8se3JlZjphLHN0eWxlOnt3aWR0aDoidmFyKC0tcmFkaXgtc2Nyb2xsLWFyZWEtdGh1bWItd2lkdGgpIixoZWlnaHQ6InZhcigtLXJhZGl4LXNjcm9sbC1hcmVhLXRodW1iLWhlaWdodCkiLC4uLnJ9LG9uUG9pbnRlckRvd25DYXB0dXJlOkdlKGUub25Qb2ludGVyRG93bkNhcHR1cmUsZD0+e2NvbnN0IGg9ZC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbT1kLmNsaWVudFgtaC5sZWZ0LGc9ZC5jbGllbnRZLWgudG9wO2wub25UaHVtYlBvaW50ZXJEb3duKHt4Om0seTpnfSl9KSxvblBvaW50ZXJVcDpHZShlLm9uUG9pbnRlclVwLGwub25UaHVtYlBvaW50ZXJVcCl9KSl9KSxHdz0iU2Nyb2xsQXJlYUNvcm5lciIsZU49cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3Qgbj1LbihHdyxlLl9fc2NvcGVTY3JvbGxBcmVhKSxyPSEhKG4uc2Nyb2xsYmFyWCYmbi5zY3JvbGxiYXJZKTtyZXR1cm4gbi50eXBlIT09InNjcm9sbCImJnI/cC5jcmVhdGVFbGVtZW50KHROLHRlKHt9LGUse3JlZjp0fSkpOm51bGx9KSx0Tj1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2Nyb2xsQXJlYTpuLC4uLnJ9PWUsbz1LbihHdyxuKSxbaSxsXT1wLnVzZVN0YXRlKDApLFtzLGFdPXAudXNlU3RhdGUoMCksdT0hIShpJiZzKTtyZXR1cm4gUGwoby5zY3JvbGxiYXJYLCgpPT57dmFyIGM7Y29uc3QgZD0oKGM9by5zY3JvbGxiYXJYKT09PW51bGx8fGM9PT12b2lkIDA/dm9pZCAwOmMub2Zmc2V0SGVpZ2h0KXx8MDtvLm9uQ29ybmVySGVpZ2h0Q2hhbmdlKGQpLGEoZCl9KSxQbChvLnNjcm9sbGJhclksKCk9Pnt2YXIgYztjb25zdCBkPSgoYz1vLnNjcm9sbGJhclkpPT09bnVsbHx8Yz09PXZvaWQgMD92b2lkIDA6Yy5vZmZzZXRXaWR0aCl8fDA7by5vbkNvcm5lcldpZHRoQ2hhbmdlKGQpLGwoZCl9KSx1P3AuY3JlYXRlRWxlbWVudChJZS5kaXYsdGUoe30scix7cmVmOnQsc3R5bGU6e3dpZHRoOmksaGVpZ2h0OnMscG9zaXRpb246ImFic29sdXRlIixyaWdodDpvLmRpcj09PSJsdHIiPzA6dm9pZCAwLGxlZnQ6by5kaXI9PT0icnRsIj8wOnZvaWQgMCxib3R0b206MCwuLi5lLnN0eWxlfX0pKTpudWxsfSk7ZnVuY3Rpb24gYmMoZSl7cmV0dXJuIGU/cGFyc2VJbnQoZSwxMCk6MH1mdW5jdGlvbiBZdyhlLHQpe2NvbnN0IG49ZS90O3JldHVybiBpc05hTihuKT8wOm59ZnVuY3Rpb24geWQoZSl7Y29uc3QgdD1ZdyhlLnZpZXdwb3J0LGUuY29udGVudCksbj1lLnNjcm9sbGJhci5wYWRkaW5nU3RhcnQrZS5zY3JvbGxiYXIucGFkZGluZ0VuZCxyPShlLnNjcm9sbGJhci5zaXplLW4pKnQ7cmV0dXJuIE1hdGgubWF4KHIsMTgpfWZ1bmN0aW9uIG5OKGUsdCxuLHI9Imx0ciIpe2NvbnN0IG89eWQobiksaT1vLzIsbD10fHxpLHM9by1sLGE9bi5zY3JvbGxiYXIucGFkZGluZ1N0YXJ0K2wsdT1uLnNjcm9sbGJhci5zaXplLW4uc2Nyb2xsYmFyLnBhZGRpbmdFbmQtcyxjPW4uY29udGVudC1uLnZpZXdwb3J0LGQ9cj09PSJsdHIiP1swLGNdOltjKi0xLDBdO3JldHVybiBYdyhbYSx1XSxkKShlKX1mdW5jdGlvbiB5eShlLHQsbj0ibHRyIil7Y29uc3Qgcj15ZCh0KSxvPXQuc2Nyb2xsYmFyLnBhZGRpbmdTdGFydCt0LnNjcm9sbGJhci5wYWRkaW5nRW5kLGk9dC5zY3JvbGxiYXIuc2l6ZS1vLGw9dC5jb250ZW50LXQudmlld3BvcnQscz1pLXIsYT1uPT09Imx0ciI/WzAsbF06W2wqLTEsMF0sdT1IaChlLGEpO3JldHVybiBYdyhbMCxsXSxbMCxzXSkodSl9ZnVuY3Rpb24gWHcoZSx0KXtyZXR1cm4gbj0+e2lmKGVbMF09PT1lWzFdfHx0WzBdPT09dFsxXSlyZXR1cm4gdFswXTtjb25zdCByPSh0WzFdLXRbMF0pLyhlWzFdLWVbMF0pO3JldHVybiB0WzBdK3IqKG4tZVswXSl9fWZ1bmN0aW9uIFF3KGUsdCl7cmV0dXJuIGU+MCYmZTx0fWNvbnN0IHJOPShlLHQ9KCk9Pnt9KT0+e2xldCBuPXtsZWZ0OmUuc2Nyb2xsTGVmdCx0b3A6ZS5zY3JvbGxUb3B9LHI9MDtyZXR1cm4gZnVuY3Rpb24gbygpe2NvbnN0IGk9e2xlZnQ6ZS5zY3JvbGxMZWZ0LHRvcDplLnNjcm9sbFRvcH0sbD1uLmxlZnQhPT1pLmxlZnQscz1uLnRvcCE9PWkudG9wOyhsfHxzKSYmdCgpLG49aSxyPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobyl9KCksKCk9PndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyKX07ZnVuY3Rpb24geGQoZSx0KXtjb25zdCBuPUh0KGUpLHI9cC51c2VSZWYoMCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT4oKT0+d2luZG93LmNsZWFyVGltZW91dChyLmN1cnJlbnQpLFtdKSxwLnVzZUNhbGxiYWNrKCgpPT57d2luZG93LmNsZWFyVGltZW91dChyLmN1cnJlbnQpLHIuY3VycmVudD13aW5kb3cuc2V0VGltZW91dChuLHQpfSxbbix0XSl9ZnVuY3Rpb24gUGwoZSx0KXtjb25zdCBuPUh0KHQpO05uKCgpPT57bGV0IHI9MDtpZihlKXtjb25zdCBvPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e2NhbmNlbEFuaW1hdGlvbkZyYW1lKHIpLHI9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShuKX0pO3JldHVybiBvLm9ic2VydmUoZSksKCk9Pnt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUociksby51bm9ic2VydmUoZSl9fX0sW2Usbl0pfWNvbnN0IEp3PUhULG9OPUtULGlOPWVOO2Z1bmN0aW9uIFp3KGUpe3ZhciB0LG4scj0iIjtpZih0eXBlb2YgZT09InN0cmluZyJ8fHR5cGVvZiBlPT0ibnVtYmVyIilyKz1lO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdJiYobj1adyhlW3RdKSkmJihyJiYocis9IiAiKSxyKz1uKTtlbHNlIGZvcih0IGluIGUpZVt0XSYmKHImJihyKz0iICIpLHIrPXQpO3JldHVybiByfWZ1bmN0aW9uIHF3KCl7Zm9yKHZhciBlLHQsbj0wLHI9IiI7bjxhcmd1bWVudHMubGVuZ3RoOykoZT1hcmd1bWVudHNbbisrXSkmJih0PVp3KGUpKSYmKHImJihyKz0iICIpLHIrPXQpO3JldHVybiByfWNvbnN0IEhnPSItIjtmdW5jdGlvbiBsTihlKXtjb25zdCB0PWFOKGUpLHtjb25mbGljdGluZ0NsYXNzR3JvdXBzOm4sY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzOnJ9PWU7ZnVuY3Rpb24gbyhsKXtjb25zdCBzPWwuc3BsaXQoSGcpO3JldHVybiBzWzBdPT09IiImJnMubGVuZ3RoIT09MSYmcy5zaGlmdCgpLGVfKHMsdCl8fHNOKGwpfWZ1bmN0aW9uIGkobCxzKXtjb25zdCBhPW5bbF18fFtdO3JldHVybiBzJiZyW2xdP1suLi5hLC4uLnJbbF1dOmF9cmV0dXJue2dldENsYXNzR3JvdXBJZDpvLGdldENvbmZsaWN0aW5nQ2xhc3NHcm91cElkczppfX1mdW5jdGlvbiBlXyhlLHQpe3ZhciBsO2lmKGUubGVuZ3RoPT09MClyZXR1cm4gdC5jbGFzc0dyb3VwSWQ7Y29uc3Qgbj1lWzBdLHI9dC5uZXh0UGFydC5nZXQobiksbz1yP2VfKGUuc2xpY2UoMSkscik6dm9pZCAwO2lmKG8pcmV0dXJuIG87aWYodC52YWxpZGF0b3JzLmxlbmd0aD09PTApcmV0dXJuO2NvbnN0IGk9ZS5qb2luKEhnKTtyZXR1cm4obD10LnZhbGlkYXRvcnMuZmluZCgoe3ZhbGlkYXRvcjpzfSk9PnMoaSkpKT09bnVsbD92b2lkIDA6bC5jbGFzc0dyb3VwSWR9Y29uc3QgeHk9L15cWyguKylcXSQvO2Z1bmN0aW9uIHNOKGUpe2lmKHh5LnRlc3QoZSkpe2NvbnN0IHQ9eHkuZXhlYyhlKVsxXSxuPXQ9PW51bGw/dm9pZCAwOnQuc3Vic3RyaW5nKDAsdC5pbmRleE9mKCI6IikpO2lmKG4pcmV0dXJuImFyYml0cmFyeS4uIitufX1mdW5jdGlvbiBhTihlKXtjb25zdHt0aGVtZTp0LHByZWZpeDpufT1lLHI9e25leHRQYXJ0Om5ldyBNYXAsdmFsaWRhdG9yczpbXX07cmV0dXJuIGNOKE9iamVjdC5lbnRyaWVzKGUuY2xhc3NHcm91cHMpLG4pLmZvckVhY2goKFtpLGxdKT0+e0toKGwscixpLHQpfSkscn1mdW5jdGlvbiBLaChlLHQsbixyKXtlLmZvckVhY2gobz0+e2lmKHR5cGVvZiBvPT0ic3RyaW5nIil7Y29uc3QgaT1vPT09IiI/dDp3eSh0LG8pO2kuY2xhc3NHcm91cElkPW47cmV0dXJufWlmKHR5cGVvZiBvPT0iZnVuY3Rpb24iKXtpZih1TihvKSl7S2gobyhyKSx0LG4scik7cmV0dXJufXQudmFsaWRhdG9ycy5wdXNoKHt2YWxpZGF0b3I6byxjbGFzc0dyb3VwSWQ6bn0pO3JldHVybn1PYmplY3QuZW50cmllcyhvKS5mb3JFYWNoKChbaSxsXSk9PntLaChsLHd5KHQsaSksbixyKX0pfSl9ZnVuY3Rpb24gd3koZSx0KXtsZXQgbj1lO3JldHVybiB0LnNwbGl0KEhnKS5mb3JFYWNoKHI9PntuLm5leHRQYXJ0LmhhcyhyKXx8bi5uZXh0UGFydC5zZXQocix7bmV4dFBhcnQ6bmV3IE1hcCx2YWxpZGF0b3JzOltdfSksbj1uLm5leHRQYXJ0LmdldChyKX0pLG59ZnVuY3Rpb24gdU4oZSl7cmV0dXJuIGUuaXNUaGVtZUdldHRlcn1mdW5jdGlvbiBjTihlLHQpe3JldHVybiB0P2UubWFwKChbbixyXSk9Pntjb25zdCBvPXIubWFwKGk9PnR5cGVvZiBpPT0ic3RyaW5nIj90K2k6dHlwZW9mIGk9PSJvYmplY3QiP09iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhpKS5tYXAoKFtsLHNdKT0+W3QrbCxzXSkpOmkpO3JldHVybltuLG9dfSk6ZX1mdW5jdGlvbiBkTihlKXtpZihlPDEpcmV0dXJue2dldDooKT0+e30sc2V0OigpPT57fX07bGV0IHQ9MCxuPW5ldyBNYXAscj1uZXcgTWFwO2Z1bmN0aW9uIG8oaSxsKXtuLnNldChpLGwpLHQrKyx0PmUmJih0PTAscj1uLG49bmV3IE1hcCl9cmV0dXJue2dldChpKXtsZXQgbD1uLmdldChpKTtpZihsIT09dm9pZCAwKXJldHVybiBsO2lmKChsPXIuZ2V0KGkpKSE9PXZvaWQgMClyZXR1cm4gbyhpLGwpLGx9LHNldChpLGwpe24uaGFzKGkpP24uc2V0KGksbCk6byhpLGwpfX19Y29uc3QgdF89IiEiO2Z1bmN0aW9uIGZOKGUpe2NvbnN0IHQ9ZS5zZXBhcmF0b3Isbj10Lmxlbmd0aD09PTEscj10WzBdLG89dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGwpe2NvbnN0IHM9W107bGV0IGE9MCx1PTAsYztmb3IobGV0IGc9MDtnPGwubGVuZ3RoO2crKyl7bGV0IF89bFtnXTtpZihhPT09MCl7aWYoXz09PXImJihufHxsLnNsaWNlKGcsZytvKT09PXQpKXtzLnB1c2gobC5zbGljZSh1LGcpKSx1PWcrbztjb250aW51ZX1pZihfPT09Ii8iKXtjPWc7Y29udGludWV9fV89PT0iWyI/YSsrOl89PT0iXSImJmEtLX1jb25zdCBkPXMubGVuZ3RoPT09MD9sOmwuc3Vic3RyaW5nKHUpLGY9ZC5zdGFydHNXaXRoKHRfKSxoPWY/ZC5zdWJzdHJpbmcoMSk6ZCxtPWMmJmM+dT9jLXU6dm9pZCAwO3JldHVybnttb2RpZmllcnM6cyxoYXNJbXBvcnRhbnRNb2RpZmllcjpmLGJhc2VDbGFzc05hbWU6aCxtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uOm19fX1mdW5jdGlvbiBoTihlKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCB0PVtdO2xldCBuPVtdO3JldHVybiBlLmZvckVhY2gocj0+e3JbMF09PT0iWyI/KHQucHVzaCguLi5uLnNvcnQoKSxyKSxuPVtdKTpuLnB1c2gocil9KSx0LnB1c2goLi4ubi5zb3J0KCkpLHR9ZnVuY3Rpb24gcE4oZSl7cmV0dXJue2NhY2hlOmROKGUuY2FjaGVTaXplKSxzcGxpdE1vZGlmaWVyczpmTihlKSwuLi5sTihlKX19Y29uc3QgZ049L1xzKy87ZnVuY3Rpb24gbU4oZSx0KXtjb25zdHtzcGxpdE1vZGlmaWVyczpuLGdldENsYXNzR3JvdXBJZDpyLGdldENvbmZsaWN0aW5nQ2xhc3NHcm91cElkczpvfT10LGk9bmV3IFNldDtyZXR1cm4gZS50cmltKCkuc3BsaXQoZ04pLm1hcChsPT57Y29uc3R7bW9kaWZpZXJzOnMsaGFzSW1wb3J0YW50TW9kaWZpZXI6YSxiYXNlQ2xhc3NOYW1lOnUsbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvbjpjfT1uKGwpO2xldCBkPXIoYz91LnN1YnN0cmluZygwLGMpOnUpLGY9ISFjO2lmKCFkKXtpZighYylyZXR1cm57aXNUYWlsd2luZENsYXNzOiExLG9yaWdpbmFsQ2xhc3NOYW1lOmx9O2lmKGQ9cih1KSwhZClyZXR1cm57aXNUYWlsd2luZENsYXNzOiExLG9yaWdpbmFsQ2xhc3NOYW1lOmx9O2Y9ITF9Y29uc3QgaD1oTihzKS5qb2luKCI6Iik7cmV0dXJue2lzVGFpbHdpbmRDbGFzczohMCxtb2RpZmllcklkOmE/aCt0XzpoLGNsYXNzR3JvdXBJZDpkLG9yaWdpbmFsQ2xhc3NOYW1lOmwsaGFzUG9zdGZpeE1vZGlmaWVyOmZ9fSkucmV2ZXJzZSgpLmZpbHRlcihsPT57aWYoIWwuaXNUYWlsd2luZENsYXNzKXJldHVybiEwO2NvbnN0e21vZGlmaWVySWQ6cyxjbGFzc0dyb3VwSWQ6YSxoYXNQb3N0Zml4TW9kaWZpZXI6dX09bCxjPXMrYTtyZXR1cm4gaS5oYXMoYyk/ITE6KGkuYWRkKGMpLG8oYSx1KS5mb3JFYWNoKGQ9PmkuYWRkKHMrZCkpLCEwKX0pLnJldmVyc2UoKS5tYXAobD0+bC5vcmlnaW5hbENsYXNzTmFtZSkuam9pbigiICIpfWZ1bmN0aW9uIHZOKCl7bGV0IGU9MCx0LG4scj0iIjtmb3IoO2U8YXJndW1lbnRzLmxlbmd0aDspKHQ9YXJndW1lbnRzW2UrK10pJiYobj1uXyh0KSkmJihyJiYocis9IiAiKSxyKz1uKTtyZXR1cm4gcn1mdW5jdGlvbiBuXyhlKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGU7bGV0IHQsbj0iIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdJiYodD1uXyhlW3JdKSkmJihuJiYobis9IiAiKSxuKz10KTtyZXR1cm4gbn1mdW5jdGlvbiB5TihlLC4uLnQpe2xldCBuLHIsbyxpPWw7ZnVuY3Rpb24gbChhKXtjb25zdCB1PXQucmVkdWNlKChjLGQpPT5kKGMpLGUoKSk7cmV0dXJuIG49cE4odSkscj1uLmNhY2hlLmdldCxvPW4uY2FjaGUuc2V0LGk9cyxzKGEpfWZ1bmN0aW9uIHMoYSl7Y29uc3QgdT1yKGEpO2lmKHUpcmV0dXJuIHU7Y29uc3QgYz1tTihhLG4pO3JldHVybiBvKGEsYyksY31yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaSh2Ti5hcHBseShudWxsLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBIZShlKXtjb25zdCB0PW49Pm5bZV18fFtdO3JldHVybiB0LmlzVGhlbWVHZXR0ZXI9ITAsdH1jb25zdCByXz0vXlxbKD86KFthLXotXSspOik/KC4rKVxdJC9pLHhOPS9eXGQrXC9cZCskLyx3Tj1uZXcgU2V0KFsicHgiLCJmdWxsIiwic2NyZWVuIl0pLF9OPS9eKFxkKyhcLlxkKyk/KT8oeHN8c218bWR8bGd8eGwpJC8sU049L1xkKyglfHB4fHI/ZW18W3NkbF0/dihbaHdpYl18bWlufG1heCl8cHR8cGN8aW58Y218bW18Y2FwfGNofGV4fHI/bGh8Y3Eod3xofGl8YnxtaW58bWF4KSl8XGIoY2FsY3xtaW58bWF4fGNsYW1wKVwoLitcKXxeMCQvLEVOPS9eLT8oKFxkKyk/XC4/KFxkKylbYS16XSt8MClfLT8oKFxkKyk/XC4/KFxkKylbYS16XSt8MCkvLENOPS9eKHVybHxpbWFnZXxpbWFnZS1zZXR8Y3Jvc3MtZmFkZXxlbGVtZW50fChyZXBlYXRpbmctKT8obGluZWFyfHJhZGlhbHxjb25pYyktZ3JhZGllbnQpXCguK1wpJC87ZnVuY3Rpb24gSm4oZSl7cmV0dXJuIGxpKGUpfHx3Ti5oYXMoZSl8fHhOLnRlc3QoZSl9ZnVuY3Rpb24gc28oZSl7cmV0dXJuIFVsKGUsImxlbmd0aCIsT04pfWZ1bmN0aW9uIGxpKGUpe3JldHVybiEhZSYmIU51bWJlci5pc05hTihOdW1iZXIoZSkpfWZ1bmN0aW9uIFN1KGUpe3JldHVybiBVbChlLCJudW1iZXIiLGxpKX1mdW5jdGlvbiBncyhlKXtyZXR1cm4hIWUmJk51bWJlci5pc0ludGVnZXIoTnVtYmVyKGUpKX1mdW5jdGlvbiAkTihlKXtyZXR1cm4gZS5lbmRzV2l0aCgiJSIpJiZsaShlLnNsaWNlKDAsLTEpKX1mdW5jdGlvbiBnZShlKXtyZXR1cm4gcl8udGVzdChlKX1mdW5jdGlvbiBhbyhlKXtyZXR1cm4gX04udGVzdChlKX1jb25zdCBrTj1uZXcgU2V0KFsibGVuZ3RoIiwic2l6ZSIsInBlcmNlbnRhZ2UiXSk7ZnVuY3Rpb24gYk4oZSl7cmV0dXJuIFVsKGUsa04sb18pfWZ1bmN0aW9uIFROKGUpe3JldHVybiBVbChlLCJwb3NpdGlvbiIsb18pfWNvbnN0IE5OPW5ldyBTZXQoWyJpbWFnZSIsInVybCJdKTtmdW5jdGlvbiBSTihlKXtyZXR1cm4gVWwoZSxOTixNTil9ZnVuY3Rpb24gUE4oZSl7cmV0dXJuIFVsKGUsIiIsQU4pfWZ1bmN0aW9uIG1zKCl7cmV0dXJuITB9ZnVuY3Rpb24gVWwoZSx0LG4pe2NvbnN0IHI9cl8uZXhlYyhlKTtyZXR1cm4gcj9yWzFdP3R5cGVvZiB0PT0ic3RyaW5nIj9yWzFdPT09dDp0LmhhcyhyWzFdKTpuKHJbMl0pOiExfWZ1bmN0aW9uIE9OKGUpe3JldHVybiBTTi50ZXN0KGUpfWZ1bmN0aW9uIG9fKCl7cmV0dXJuITF9ZnVuY3Rpb24gQU4oZSl7cmV0dXJuIEVOLnRlc3QoZSl9ZnVuY3Rpb24gTU4oZSl7cmV0dXJuIENOLnRlc3QoZSl9ZnVuY3Rpb24gTE4oKXtjb25zdCBlPUhlKCJjb2xvcnMiKSx0PUhlKCJzcGFjaW5nIiksbj1IZSgiYmx1ciIpLHI9SGUoImJyaWdodG5lc3MiKSxvPUhlKCJib3JkZXJDb2xvciIpLGk9SGUoImJvcmRlclJhZGl1cyIpLGw9SGUoImJvcmRlclNwYWNpbmciKSxzPUhlKCJib3JkZXJXaWR0aCIpLGE9SGUoImNvbnRyYXN0IiksdT1IZSgiZ3JheXNjYWxlIiksYz1IZSgiaHVlUm90YXRlIiksZD1IZSgiaW52ZXJ0IiksZj1IZSgiZ2FwIiksaD1IZSgiZ3JhZGllbnRDb2xvclN0b3BzIiksbT1IZSgiZ3JhZGllbnRDb2xvclN0b3BQb3NpdGlvbnMiKSxnPUhlKCJpbnNldCIpLF89SGUoIm1hcmdpbiIpLHY9SGUoIm9wYWNpdHkiKSx5PUhlKCJwYWRkaW5nIikseD1IZSgic2F0dXJhdGUiKSxTPUhlKCJzY2FsZSIpLGs9SGUoInNlcGlhIiksVD1IZSgic2tldyIpLGI9SGUoInNwYWNlIiksTj1IZSgidHJhbnNsYXRlIiksRD0oKT0+WyJhdXRvIiwiY29udGFpbiIsIm5vbmUiXSxNPSgpPT5bImF1dG8iLCJoaWRkZW4iLCJjbGlwIiwidmlzaWJsZSIsInNjcm9sbCJdLGo9KCk9PlsiYXV0byIsZ2UsdF0sQj0oKT0+W2dlLHRdLHJlPSgpPT5bIiIsSm4sc29dLFY9KCk9PlsiYXV0byIsbGksZ2VdLFk9KCk9PlsiYm90dG9tIiwiY2VudGVyIiwibGVmdCIsImxlZnQtYm90dG9tIiwibGVmdC10b3AiLCJyaWdodCIsInJpZ2h0LWJvdHRvbSIsInJpZ2h0LXRvcCIsInRvcCJdLEM9KCk9Plsic29saWQiLCJkYXNoZWQiLCJkb3R0ZWQiLCJkb3VibGUiLCJub25lIl0sJD0oKT0+WyJub3JtYWwiLCJtdWx0aXBseSIsInNjcmVlbiIsIm92ZXJsYXkiLCJkYXJrZW4iLCJsaWdodGVuIiwiY29sb3ItZG9kZ2UiLCJjb2xvci1idXJuIiwiaGFyZC1saWdodCIsInNvZnQtbGlnaHQiLCJkaWZmZXJlbmNlIiwiZXhjbHVzaW9uIiwiaHVlIiwic2F0dXJhdGlvbiIsImNvbG9yIiwibHVtaW5vc2l0eSIsInBsdXMtbGlnaHRlciJdLEU9KCk9Plsic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJiZXR3ZWVuIiwiYXJvdW5kIiwiZXZlbmx5Iiwic3RyZXRjaCJdLE89KCk9PlsiIiwiMCIsZ2VdLFI9KCk9PlsiYXV0byIsImF2b2lkIiwiYWxsIiwiYXZvaWQtcGFnZSIsInBhZ2UiLCJsZWZ0IiwicmlnaHQiLCJjb2x1bW4iXSxGPSgpPT5bbGksU3VdLEg9KCk9PltsaSxnZV07cmV0dXJue2NhY2hlU2l6ZTo1MDAsc2VwYXJhdG9yOiI6Iix0aGVtZTp7Y29sb3JzOlttc10sc3BhY2luZzpbSm4sc29dLGJsdXI6WyJub25lIiwiIixhbyxnZV0sYnJpZ2h0bmVzczpGKCksYm9yZGVyQ29sb3I6W2VdLGJvcmRlclJhZGl1czpbIm5vbmUiLCIiLCJmdWxsIixhbyxnZV0sYm9yZGVyU3BhY2luZzpCKCksYm9yZGVyV2lkdGg6cmUoKSxjb250cmFzdDpGKCksZ3JheXNjYWxlOk8oKSxodWVSb3RhdGU6SCgpLGludmVydDpPKCksZ2FwOkIoKSxncmFkaWVudENvbG9yU3RvcHM6W2VdLGdyYWRpZW50Q29sb3JTdG9wUG9zaXRpb25zOlskTixzb10saW5zZXQ6aigpLG1hcmdpbjpqKCksb3BhY2l0eTpGKCkscGFkZGluZzpCKCksc2F0dXJhdGU6RigpLHNjYWxlOkYoKSxzZXBpYTpPKCksc2tldzpIKCksc3BhY2U6QigpLHRyYW5zbGF0ZTpCKCl9LGNsYXNzR3JvdXBzOnthc3BlY3Q6W3thc3BlY3Q6WyJhdXRvIiwic3F1YXJlIiwidmlkZW8iLGdlXX1dLGNvbnRhaW5lcjpbImNvbnRhaW5lciJdLGNvbHVtbnM6W3tjb2x1bW5zOlthb119XSwiYnJlYWstYWZ0ZXIiOlt7ImJyZWFrLWFmdGVyIjpSKCl9XSwiYnJlYWstYmVmb3JlIjpbeyJicmVhay1iZWZvcmUiOlIoKX1dLCJicmVhay1pbnNpZGUiOlt7ImJyZWFrLWluc2lkZSI6WyJhdXRvIiwiYXZvaWQiLCJhdm9pZC1wYWdlIiwiYXZvaWQtY29sdW1uIl19XSwiYm94LWRlY29yYXRpb24iOlt7ImJveC1kZWNvcmF0aW9uIjpbInNsaWNlIiwiY2xvbmUiXX1dLGJveDpbe2JveDpbImJvcmRlciIsImNvbnRlbnQiXX1dLGRpc3BsYXk6WyJibG9jayIsImlubGluZS1ibG9jayIsImlubGluZSIsImZsZXgiLCJpbmxpbmUtZmxleCIsInRhYmxlIiwiaW5saW5lLXRhYmxlIiwidGFibGUtY2FwdGlvbiIsInRhYmxlLWNlbGwiLCJ0YWJsZS1jb2x1bW4iLCJ0YWJsZS1jb2x1bW4tZ3JvdXAiLCJ0YWJsZS1mb290ZXItZ3JvdXAiLCJ0YWJsZS1oZWFkZXItZ3JvdXAiLCJ0YWJsZS1yb3ctZ3JvdXAiLCJ0YWJsZS1yb3ciLCJmbG93LXJvb3QiLCJncmlkIiwiaW5saW5lLWdyaWQiLCJjb250ZW50cyIsImxpc3QtaXRlbSIsImhpZGRlbiJdLGZsb2F0Olt7ZmxvYXQ6WyJyaWdodCIsImxlZnQiLCJub25lIl19XSxjbGVhcjpbe2NsZWFyOlsibGVmdCIsInJpZ2h0IiwiYm90aCIsIm5vbmUiXX1dLGlzb2xhdGlvbjpbImlzb2xhdGUiLCJpc29sYXRpb24tYXV0byJdLCJvYmplY3QtZml0Ijpbe29iamVjdDpbImNvbnRhaW4iLCJjb3ZlciIsImZpbGwiLCJub25lIiwic2NhbGUtZG93biJdfV0sIm9iamVjdC1wb3NpdGlvbiI6W3tvYmplY3Q6Wy4uLlkoKSxnZV19XSxvdmVyZmxvdzpbe292ZXJmbG93Ok0oKX1dLCJvdmVyZmxvdy14IjpbeyJvdmVyZmxvdy14IjpNKCl9XSwib3ZlcmZsb3cteSI6W3sib3ZlcmZsb3cteSI6TSgpfV0sb3ZlcnNjcm9sbDpbe292ZXJzY3JvbGw6RCgpfV0sIm92ZXJzY3JvbGwteCI6W3sib3ZlcnNjcm9sbC14IjpEKCl9XSwib3ZlcnNjcm9sbC15IjpbeyJvdmVyc2Nyb2xsLXkiOkQoKX1dLHBvc2l0aW9uOlsic3RhdGljIiwiZml4ZWQiLCJhYnNvbHV0ZSIsInJlbGF0aXZlIiwic3RpY2t5Il0saW5zZXQ6W3tpbnNldDpbZ119XSwiaW5zZXQteCI6W3siaW5zZXQteCI6W2ddfV0sImluc2V0LXkiOlt7Imluc2V0LXkiOltnXX1dLHN0YXJ0Olt7c3RhcnQ6W2ddfV0sZW5kOlt7ZW5kOltnXX1dLHRvcDpbe3RvcDpbZ119XSxyaWdodDpbe3JpZ2h0OltnXX1dLGJvdHRvbTpbe2JvdHRvbTpbZ119XSxsZWZ0Olt7bGVmdDpbZ119XSx2aXNpYmlsaXR5OlsidmlzaWJsZSIsImludmlzaWJsZSIsImNvbGxhcHNlIl0sejpbe3o6WyJhdXRvIixncyxnZV19XSxiYXNpczpbe2Jhc2lzOmooKX1dLCJmbGV4LWRpcmVjdGlvbiI6W3tmbGV4Olsicm93Iiwicm93LXJldmVyc2UiLCJjb2wiLCJjb2wtcmV2ZXJzZSJdfV0sImZsZXgtd3JhcCI6W3tmbGV4Olsid3JhcCIsIndyYXAtcmV2ZXJzZSIsIm5vd3JhcCJdfV0sZmxleDpbe2ZsZXg6WyIxIiwiYXV0byIsImluaXRpYWwiLCJub25lIixnZV19XSxncm93Olt7Z3JvdzpPKCl9XSxzaHJpbms6W3tzaHJpbms6TygpfV0sb3JkZXI6W3tvcmRlcjpbImZpcnN0IiwibGFzdCIsIm5vbmUiLGdzLGdlXX1dLCJncmlkLWNvbHMiOlt7ImdyaWQtY29scyI6W21zXX1dLCJjb2wtc3RhcnQtZW5kIjpbe2NvbDpbImF1dG8iLHtzcGFuOlsiZnVsbCIsZ3MsZ2VdfSxnZV19XSwiY29sLXN0YXJ0IjpbeyJjb2wtc3RhcnQiOlYoKX1dLCJjb2wtZW5kIjpbeyJjb2wtZW5kIjpWKCl9XSwiZ3JpZC1yb3dzIjpbeyJncmlkLXJvd3MiOlttc119XSwicm93LXN0YXJ0LWVuZCI6W3tyb3c6WyJhdXRvIix7c3BhbjpbZ3MsZ2VdfSxnZV19XSwicm93LXN0YXJ0IjpbeyJyb3ctc3RhcnQiOlYoKX1dLCJyb3ctZW5kIjpbeyJyb3ctZW5kIjpWKCl9XSwiZ3JpZC1mbG93IjpbeyJncmlkLWZsb3ciOlsicm93IiwiY29sIiwiZGVuc2UiLCJyb3ctZGVuc2UiLCJjb2wtZGVuc2UiXX1dLCJhdXRvLWNvbHMiOlt7ImF1dG8tY29scyI6WyJhdXRvIiwibWluIiwibWF4IiwiZnIiLGdlXX1dLCJhdXRvLXJvd3MiOlt7ImF1dG8tcm93cyI6WyJhdXRvIiwibWluIiwibWF4IiwiZnIiLGdlXX1dLGdhcDpbe2dhcDpbZl19XSwiZ2FwLXgiOlt7ImdhcC14IjpbZl19XSwiZ2FwLXkiOlt7ImdhcC15IjpbZl19XSwianVzdGlmeS1jb250ZW50Ijpbe2p1c3RpZnk6WyJub3JtYWwiLC4uLkUoKV19XSwianVzdGlmeS1pdGVtcyI6W3sianVzdGlmeS1pdGVtcyI6WyJzdGFydCIsImVuZCIsImNlbnRlciIsInN0cmV0Y2giXX1dLCJqdXN0aWZ5LXNlbGYiOlt7Imp1c3RpZnktc2VsZiI6WyJhdXRvIiwic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJzdHJldGNoIl19XSwiYWxpZ24tY29udGVudCI6W3tjb250ZW50Olsibm9ybWFsIiwuLi5FKCksImJhc2VsaW5lIl19XSwiYWxpZ24taXRlbXMiOlt7aXRlbXM6WyJzdGFydCIsImVuZCIsImNlbnRlciIsImJhc2VsaW5lIiwic3RyZXRjaCJdfV0sImFsaWduLXNlbGYiOlt7c2VsZjpbImF1dG8iLCJzdGFydCIsImVuZCIsImNlbnRlciIsInN0cmV0Y2giLCJiYXNlbGluZSJdfV0sInBsYWNlLWNvbnRlbnQiOlt7InBsYWNlLWNvbnRlbnQiOlsuLi5FKCksImJhc2VsaW5lIl19XSwicGxhY2UtaXRlbXMiOlt7InBsYWNlLWl0ZW1zIjpbInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwiYmFzZWxpbmUiLCJzdHJldGNoIl19XSwicGxhY2Utc2VsZiI6W3sicGxhY2Utc2VsZiI6WyJhdXRvIiwic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJzdHJldGNoIl19XSxwOlt7cDpbeV19XSxweDpbe3B4Olt5XX1dLHB5Olt7cHk6W3ldfV0scHM6W3twczpbeV19XSxwZTpbe3BlOlt5XX1dLHB0Olt7cHQ6W3ldfV0scHI6W3twcjpbeV19XSxwYjpbe3BiOlt5XX1dLHBsOlt7cGw6W3ldfV0sbTpbe206W19dfV0sbXg6W3tteDpbX119XSxteTpbe215OltfXX1dLG1zOlt7bXM6W19dfV0sbWU6W3ttZTpbX119XSxtdDpbe210OltfXX1dLG1yOlt7bXI6W19dfV0sbWI6W3ttYjpbX119XSxtbDpbe21sOltfXX1dLCJzcGFjZS14IjpbeyJzcGFjZS14IjpbYl19XSwic3BhY2UteC1yZXZlcnNlIjpbInNwYWNlLXgtcmV2ZXJzZSJdLCJzcGFjZS15IjpbeyJzcGFjZS15IjpbYl19XSwic3BhY2UteS1yZXZlcnNlIjpbInNwYWNlLXktcmV2ZXJzZSJdLHc6W3t3OlsiYXV0byIsIm1pbiIsIm1heCIsImZpdCIsZ2UsdF19XSwibWluLXciOlt7Im1pbi13IjpbIm1pbiIsIm1heCIsImZpdCIsZ2UsSm5dfV0sIm1heC13IjpbeyJtYXgtdyI6WyIwIiwibm9uZSIsImZ1bGwiLCJtaW4iLCJtYXgiLCJmaXQiLCJwcm9zZSIse3NjcmVlbjpbYW9dfSxhbyxnZV19XSxoOlt7aDpbZ2UsdCwiYXV0byIsIm1pbiIsIm1heCIsImZpdCJdfV0sIm1pbi1oIjpbeyJtaW4taCI6WyJtaW4iLCJtYXgiLCJmaXQiLEpuLGdlXX1dLCJtYXgtaCI6W3sibWF4LWgiOltnZSx0LCJtaW4iLCJtYXgiLCJmaXQiXX1dLCJmb250LXNpemUiOlt7dGV4dDpbImJhc2UiLGFvLHNvXX1dLCJmb250LXNtb290aGluZyI6WyJhbnRpYWxpYXNlZCIsInN1YnBpeGVsLWFudGlhbGlhc2VkIl0sImZvbnQtc3R5bGUiOlsiaXRhbGljIiwibm90LWl0YWxpYyJdLCJmb250LXdlaWdodCI6W3tmb250OlsidGhpbiIsImV4dHJhbGlnaHQiLCJsaWdodCIsIm5vcm1hbCIsIm1lZGl1bSIsInNlbWlib2xkIiwiYm9sZCIsImV4dHJhYm9sZCIsImJsYWNrIixTdV19XSwiZm9udC1mYW1pbHkiOlt7Zm9udDpbbXNdfV0sImZ2bi1ub3JtYWwiOlsibm9ybWFsLW51bXMiXSwiZnZuLW9yZGluYWwiOlsib3JkaW5hbCJdLCJmdm4tc2xhc2hlZC16ZXJvIjpbInNsYXNoZWQtemVybyJdLCJmdm4tZmlndXJlIjpbImxpbmluZy1udW1zIiwib2xkc3R5bGUtbnVtcyJdLCJmdm4tc3BhY2luZyI6WyJwcm9wb3J0aW9uYWwtbnVtcyIsInRhYnVsYXItbnVtcyJdLCJmdm4tZnJhY3Rpb24iOlsiZGlhZ29uYWwtZnJhY3Rpb25zIiwic3RhY2tlZC1mcmFjdG9ucyJdLHRyYWNraW5nOlt7dHJhY2tpbmc6WyJ0aWdodGVyIiwidGlnaHQiLCJub3JtYWwiLCJ3aWRlIiwid2lkZXIiLCJ3aWRlc3QiLGdlXX1dLCJsaW5lLWNsYW1wIjpbeyJsaW5lLWNsYW1wIjpbIm5vbmUiLGxpLFN1XX1dLGxlYWRpbmc6W3tsZWFkaW5nOlsibm9uZSIsInRpZ2h0Iiwic251ZyIsIm5vcm1hbCIsInJlbGF4ZWQiLCJsb29zZSIsSm4sZ2VdfV0sImxpc3QtaW1hZ2UiOlt7Imxpc3QtaW1hZ2UiOlsibm9uZSIsZ2VdfV0sImxpc3Qtc3R5bGUtdHlwZSI6W3tsaXN0Olsibm9uZSIsImRpc2MiLCJkZWNpbWFsIixnZV19XSwibGlzdC1zdHlsZS1wb3NpdGlvbiI6W3tsaXN0OlsiaW5zaWRlIiwib3V0c2lkZSJdfV0sInBsYWNlaG9sZGVyLWNvbG9yIjpbe3BsYWNlaG9sZGVyOltlXX1dLCJwbGFjZWhvbGRlci1vcGFjaXR5IjpbeyJwbGFjZWhvbGRlci1vcGFjaXR5Ijpbdl19XSwidGV4dC1hbGlnbm1lbnQiOlt7dGV4dDpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsImp1c3RpZnkiLCJzdGFydCIsImVuZCJdfV0sInRleHQtY29sb3IiOlt7dGV4dDpbZV19XSwidGV4dC1vcGFjaXR5IjpbeyJ0ZXh0LW9wYWNpdHkiOlt2XX1dLCJ0ZXh0LWRlY29yYXRpb24iOlsidW5kZXJsaW5lIiwib3ZlcmxpbmUiLCJsaW5lLXRocm91Z2giLCJuby11bmRlcmxpbmUiXSwidGV4dC1kZWNvcmF0aW9uLXN0eWxlIjpbe2RlY29yYXRpb246Wy4uLkMoKSwid2F2eSJdfV0sInRleHQtZGVjb3JhdGlvbi10aGlja25lc3MiOlt7ZGVjb3JhdGlvbjpbImF1dG8iLCJmcm9tLWZvbnQiLEpuLHNvXX1dLCJ1bmRlcmxpbmUtb2Zmc2V0IjpbeyJ1bmRlcmxpbmUtb2Zmc2V0IjpbImF1dG8iLEpuLGdlXX1dLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiOlt7ZGVjb3JhdGlvbjpbZV19XSwidGV4dC10cmFuc2Zvcm0iOlsidXBwZXJjYXNlIiwibG93ZXJjYXNlIiwiY2FwaXRhbGl6ZSIsIm5vcm1hbC1jYXNlIl0sInRleHQtb3ZlcmZsb3ciOlsidHJ1bmNhdGUiLCJ0ZXh0LWVsbGlwc2lzIiwidGV4dC1jbGlwIl0saW5kZW50Olt7aW5kZW50OkIoKX1dLCJ2ZXJ0aWNhbC1hbGlnbiI6W3thbGlnbjpbImJhc2VsaW5lIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIiwidGV4dC10b3AiLCJ0ZXh0LWJvdHRvbSIsInN1YiIsInN1cGVyIixnZV19XSx3aGl0ZXNwYWNlOlt7d2hpdGVzcGFjZTpbIm5vcm1hbCIsIm5vd3JhcCIsInByZSIsInByZS1saW5lIiwicHJlLXdyYXAiLCJicmVhay1zcGFjZXMiXX1dLGJyZWFrOlt7YnJlYWs6WyJub3JtYWwiLCJ3b3JkcyIsImFsbCIsImtlZXAiXX1dLGh5cGhlbnM6W3toeXBoZW5zOlsibm9uZSIsIm1hbnVhbCIsImF1dG8iXX1dLGNvbnRlbnQ6W3tjb250ZW50Olsibm9uZSIsZ2VdfV0sImJnLWF0dGFjaG1lbnQiOlt7Ymc6WyJmaXhlZCIsImxvY2FsIiwic2Nyb2xsIl19XSwiYmctY2xpcCI6W3siYmctY2xpcCI6WyJib3JkZXIiLCJwYWRkaW5nIiwiY29udGVudCIsInRleHQiXX1dLCJiZy1vcGFjaXR5IjpbeyJiZy1vcGFjaXR5Ijpbdl19XSwiYmctb3JpZ2luIjpbeyJiZy1vcmlnaW4iOlsiYm9yZGVyIiwicGFkZGluZyIsImNvbnRlbnQiXX1dLCJiZy1wb3NpdGlvbiI6W3tiZzpbLi4uWSgpLFROXX1dLCJiZy1yZXBlYXQiOlt7Ymc6WyJuby1yZXBlYXQiLHtyZXBlYXQ6WyIiLCJ4IiwieSIsInJvdW5kIiwic3BhY2UiXX1dfV0sImJnLXNpemUiOlt7Ymc6WyJhdXRvIiwiY292ZXIiLCJjb250YWluIixiTl19XSwiYmctaW1hZ2UiOlt7Ymc6WyJub25lIix7ImdyYWRpZW50LXRvIjpbInQiLCJ0ciIsInIiLCJiciIsImIiLCJibCIsImwiLCJ0bCJdfSxSTl19XSwiYmctY29sb3IiOlt7Ymc6W2VdfV0sImdyYWRpZW50LWZyb20tcG9zIjpbe2Zyb206W21dfV0sImdyYWRpZW50LXZpYS1wb3MiOlt7dmlhOlttXX1dLCJncmFkaWVudC10by1wb3MiOlt7dG86W21dfV0sImdyYWRpZW50LWZyb20iOlt7ZnJvbTpbaF19XSwiZ3JhZGllbnQtdmlhIjpbe3ZpYTpbaF19XSwiZ3JhZGllbnQtdG8iOlt7dG86W2hdfV0scm91bmRlZDpbe3JvdW5kZWQ6W2ldfV0sInJvdW5kZWQtcyI6W3sicm91bmRlZC1zIjpbaV19XSwicm91bmRlZC1lIjpbeyJyb3VuZGVkLWUiOltpXX1dLCJyb3VuZGVkLXQiOlt7InJvdW5kZWQtdCI6W2ldfV0sInJvdW5kZWQtciI6W3sicm91bmRlZC1yIjpbaV19XSwicm91bmRlZC1iIjpbeyJyb3VuZGVkLWIiOltpXX1dLCJyb3VuZGVkLWwiOlt7InJvdW5kZWQtbCI6W2ldfV0sInJvdW5kZWQtc3MiOlt7InJvdW5kZWQtc3MiOltpXX1dLCJyb3VuZGVkLXNlIjpbeyJyb3VuZGVkLXNlIjpbaV19XSwicm91bmRlZC1lZSI6W3sicm91bmRlZC1lZSI6W2ldfV0sInJvdW5kZWQtZXMiOlt7InJvdW5kZWQtZXMiOltpXX1dLCJyb3VuZGVkLXRsIjpbeyJyb3VuZGVkLXRsIjpbaV19XSwicm91bmRlZC10ciI6W3sicm91bmRlZC10ciI6W2ldfV0sInJvdW5kZWQtYnIiOlt7InJvdW5kZWQtYnIiOltpXX1dLCJyb3VuZGVkLWJsIjpbeyJyb3VuZGVkLWJsIjpbaV19XSwiYm9yZGVyLXciOlt7Ym9yZGVyOltzXX1dLCJib3JkZXItdy14IjpbeyJib3JkZXIteCI6W3NdfV0sImJvcmRlci13LXkiOlt7ImJvcmRlci15Ijpbc119XSwiYm9yZGVyLXctcyI6W3siYm9yZGVyLXMiOltzXX1dLCJib3JkZXItdy1lIjpbeyJib3JkZXItZSI6W3NdfV0sImJvcmRlci13LXQiOlt7ImJvcmRlci10Ijpbc119XSwiYm9yZGVyLXctciI6W3siYm9yZGVyLXIiOltzXX1dLCJib3JkZXItdy1iIjpbeyJib3JkZXItYiI6W3NdfV0sImJvcmRlci13LWwiOlt7ImJvcmRlci1sIjpbc119XSwiYm9yZGVyLW9wYWNpdHkiOlt7ImJvcmRlci1vcGFjaXR5Ijpbdl19XSwiYm9yZGVyLXN0eWxlIjpbe2JvcmRlcjpbLi4uQygpLCJoaWRkZW4iXX1dLCJkaXZpZGUteCI6W3siZGl2aWRlLXgiOltzXX1dLCJkaXZpZGUteC1yZXZlcnNlIjpbImRpdmlkZS14LXJldmVyc2UiXSwiZGl2aWRlLXkiOlt7ImRpdmlkZS15Ijpbc119XSwiZGl2aWRlLXktcmV2ZXJzZSI6WyJkaXZpZGUteS1yZXZlcnNlIl0sImRpdmlkZS1vcGFjaXR5IjpbeyJkaXZpZGUtb3BhY2l0eSI6W3ZdfV0sImRpdmlkZS1zdHlsZSI6W3tkaXZpZGU6QygpfV0sImJvcmRlci1jb2xvciI6W3tib3JkZXI6W29dfV0sImJvcmRlci1jb2xvci14IjpbeyJib3JkZXIteCI6W29dfV0sImJvcmRlci1jb2xvci15IjpbeyJib3JkZXIteSI6W29dfV0sImJvcmRlci1jb2xvci10IjpbeyJib3JkZXItdCI6W29dfV0sImJvcmRlci1jb2xvci1yIjpbeyJib3JkZXItciI6W29dfV0sImJvcmRlci1jb2xvci1iIjpbeyJib3JkZXItYiI6W29dfV0sImJvcmRlci1jb2xvci1sIjpbeyJib3JkZXItbCI6W29dfV0sImRpdmlkZS1jb2xvciI6W3tkaXZpZGU6W29dfV0sIm91dGxpbmUtc3R5bGUiOlt7b3V0bGluZTpbIiIsLi4uQygpXX1dLCJvdXRsaW5lLW9mZnNldCI6W3sib3V0bGluZS1vZmZzZXQiOltKbixnZV19XSwib3V0bGluZS13Ijpbe291dGxpbmU6W0puLHNvXX1dLCJvdXRsaW5lLWNvbG9yIjpbe291dGxpbmU6W2VdfV0sInJpbmctdyI6W3tyaW5nOnJlKCl9XSwicmluZy13LWluc2V0IjpbInJpbmctaW5zZXQiXSwicmluZy1jb2xvciI6W3tyaW5nOltlXX1dLCJyaW5nLW9wYWNpdHkiOlt7InJpbmctb3BhY2l0eSI6W3ZdfV0sInJpbmctb2Zmc2V0LXciOlt7InJpbmctb2Zmc2V0IjpbSm4sc29dfV0sInJpbmctb2Zmc2V0LWNvbG9yIjpbeyJyaW5nLW9mZnNldCI6W2VdfV0sc2hhZG93Olt7c2hhZG93OlsiIiwiaW5uZXIiLCJub25lIixhbyxQTl19XSwic2hhZG93LWNvbG9yIjpbe3NoYWRvdzpbbXNdfV0sb3BhY2l0eTpbe29wYWNpdHk6W3ZdfV0sIm1peC1ibGVuZCI6W3sibWl4LWJsZW5kIjokKCl9XSwiYmctYmxlbmQiOlt7ImJnLWJsZW5kIjokKCl9XSxmaWx0ZXI6W3tmaWx0ZXI6WyIiLCJub25lIl19XSxibHVyOlt7Ymx1cjpbbl19XSxicmlnaHRuZXNzOlt7YnJpZ2h0bmVzczpbcl19XSxjb250cmFzdDpbe2NvbnRyYXN0OlthXX1dLCJkcm9wLXNoYWRvdyI6W3siZHJvcC1zaGFkb3ciOlsiIiwibm9uZSIsYW8sZ2VdfV0sZ3JheXNjYWxlOlt7Z3JheXNjYWxlOlt1XX1dLCJodWUtcm90YXRlIjpbeyJodWUtcm90YXRlIjpbY119XSxpbnZlcnQ6W3tpbnZlcnQ6W2RdfV0sc2F0dXJhdGU6W3tzYXR1cmF0ZTpbeF19XSxzZXBpYTpbe3NlcGlhOltrXX1dLCJiYWNrZHJvcC1maWx0ZXIiOlt7ImJhY2tkcm9wLWZpbHRlciI6WyIiLCJub25lIl19XSwiYmFja2Ryb3AtYmx1ciI6W3siYmFja2Ryb3AtYmx1ciI6W25dfV0sImJhY2tkcm9wLWJyaWdodG5lc3MiOlt7ImJhY2tkcm9wLWJyaWdodG5lc3MiOltyXX1dLCJiYWNrZHJvcC1jb250cmFzdCI6W3siYmFja2Ryb3AtY29udHJhc3QiOlthXX1dLCJiYWNrZHJvcC1ncmF5c2NhbGUiOlt7ImJhY2tkcm9wLWdyYXlzY2FsZSI6W3VdfV0sImJhY2tkcm9wLWh1ZS1yb3RhdGUiOlt7ImJhY2tkcm9wLWh1ZS1yb3RhdGUiOltjXX1dLCJiYWNrZHJvcC1pbnZlcnQiOlt7ImJhY2tkcm9wLWludmVydCI6W2RdfV0sImJhY2tkcm9wLW9wYWNpdHkiOlt7ImJhY2tkcm9wLW9wYWNpdHkiOlt2XX1dLCJiYWNrZHJvcC1zYXR1cmF0ZSI6W3siYmFja2Ryb3Atc2F0dXJhdGUiOlt4XX1dLCJiYWNrZHJvcC1zZXBpYSI6W3siYmFja2Ryb3Atc2VwaWEiOltrXX1dLCJib3JkZXItY29sbGFwc2UiOlt7Ym9yZGVyOlsiY29sbGFwc2UiLCJzZXBhcmF0ZSJdfV0sImJvcmRlci1zcGFjaW5nIjpbeyJib3JkZXItc3BhY2luZyI6W2xdfV0sImJvcmRlci1zcGFjaW5nLXgiOlt7ImJvcmRlci1zcGFjaW5nLXgiOltsXX1dLCJib3JkZXItc3BhY2luZy15IjpbeyJib3JkZXItc3BhY2luZy15IjpbbF19XSwidGFibGUtbGF5b3V0Ijpbe3RhYmxlOlsiYXV0byIsImZpeGVkIl19XSxjYXB0aW9uOlt7Y2FwdGlvbjpbInRvcCIsImJvdHRvbSJdfV0sdHJhbnNpdGlvbjpbe3RyYW5zaXRpb246WyJub25lIiwiYWxsIiwiIiwiY29sb3JzIiwib3BhY2l0eSIsInNoYWRvdyIsInRyYW5zZm9ybSIsZ2VdfV0sZHVyYXRpb246W3tkdXJhdGlvbjpIKCl9XSxlYXNlOlt7ZWFzZTpbImxpbmVhciIsImluIiwib3V0IiwiaW4tb3V0IixnZV19XSxkZWxheTpbe2RlbGF5OkgoKX1dLGFuaW1hdGU6W3thbmltYXRlOlsibm9uZSIsInNwaW4iLCJwaW5nIiwicHVsc2UiLCJib3VuY2UiLGdlXX1dLHRyYW5zZm9ybTpbe3RyYW5zZm9ybTpbIiIsImdwdSIsIm5vbmUiXX1dLHNjYWxlOlt7c2NhbGU6W1NdfV0sInNjYWxlLXgiOlt7InNjYWxlLXgiOltTXX1dLCJzY2FsZS15IjpbeyJzY2FsZS15IjpbU119XSxyb3RhdGU6W3tyb3RhdGU6W2dzLGdlXX1dLCJ0cmFuc2xhdGUteCI6W3sidHJhbnNsYXRlLXgiOltOXX1dLCJ0cmFuc2xhdGUteSI6W3sidHJhbnNsYXRlLXkiOltOXX1dLCJza2V3LXgiOlt7InNrZXcteCI6W1RdfV0sInNrZXcteSI6W3sic2tldy15IjpbVF19XSwidHJhbnNmb3JtLW9yaWdpbiI6W3tvcmlnaW46WyJjZW50ZXIiLCJ0b3AiLCJ0b3AtcmlnaHQiLCJyaWdodCIsImJvdHRvbS1yaWdodCIsImJvdHRvbSIsImJvdHRvbS1sZWZ0IiwibGVmdCIsInRvcC1sZWZ0IixnZV19XSxhY2NlbnQ6W3thY2NlbnQ6WyJhdXRvIixlXX1dLGFwcGVhcmFuY2U6WyJhcHBlYXJhbmNlLW5vbmUiXSxjdXJzb3I6W3tjdXJzb3I6WyJhdXRvIiwiZGVmYXVsdCIsInBvaW50ZXIiLCJ3YWl0IiwidGV4dCIsIm1vdmUiLCJoZWxwIiwibm90LWFsbG93ZWQiLCJub25lIiwiY29udGV4dC1tZW51IiwicHJvZ3Jlc3MiLCJjZWxsIiwiY3Jvc3NoYWlyIiwidmVydGljYWwtdGV4dCIsImFsaWFzIiwiY29weSIsIm5vLWRyb3AiLCJncmFiIiwiZ3JhYmJpbmciLCJhbGwtc2Nyb2xsIiwiY29sLXJlc2l6ZSIsInJvdy1yZXNpemUiLCJuLXJlc2l6ZSIsImUtcmVzaXplIiwicy1yZXNpemUiLCJ3LXJlc2l6ZSIsIm5lLXJlc2l6ZSIsIm53LXJlc2l6ZSIsInNlLXJlc2l6ZSIsInN3LXJlc2l6ZSIsImV3LXJlc2l6ZSIsIm5zLXJlc2l6ZSIsIm5lc3ctcmVzaXplIiwibndzZS1yZXNpemUiLCJ6b29tLWluIiwiem9vbS1vdXQiLGdlXX1dLCJjYXJldC1jb2xvciI6W3tjYXJldDpbZV19XSwicG9pbnRlci1ldmVudHMiOlt7InBvaW50ZXItZXZlbnRzIjpbIm5vbmUiLCJhdXRvIl19XSxyZXNpemU6W3tyZXNpemU6WyJub25lIiwieSIsIngiLCIiXX1dLCJzY3JvbGwtYmVoYXZpb3IiOlt7c2Nyb2xsOlsiYXV0byIsInNtb290aCJdfV0sInNjcm9sbC1tIjpbeyJzY3JvbGwtbSI6QigpfV0sInNjcm9sbC1teCI6W3sic2Nyb2xsLW14IjpCKCl9XSwic2Nyb2xsLW15IjpbeyJzY3JvbGwtbXkiOkIoKX1dLCJzY3JvbGwtbXMiOlt7InNjcm9sbC1tcyI6QigpfV0sInNjcm9sbC1tZSI6W3sic2Nyb2xsLW1lIjpCKCl9XSwic2Nyb2xsLW10IjpbeyJzY3JvbGwtbXQiOkIoKX1dLCJzY3JvbGwtbXIiOlt7InNjcm9sbC1tciI6QigpfV0sInNjcm9sbC1tYiI6W3sic2Nyb2xsLW1iIjpCKCl9XSwic2Nyb2xsLW1sIjpbeyJzY3JvbGwtbWwiOkIoKX1dLCJzY3JvbGwtcCI6W3sic2Nyb2xsLXAiOkIoKX1dLCJzY3JvbGwtcHgiOlt7InNjcm9sbC1weCI6QigpfV0sInNjcm9sbC1weSI6W3sic2Nyb2xsLXB5IjpCKCl9XSwic2Nyb2xsLXBzIjpbeyJzY3JvbGwtcHMiOkIoKX1dLCJzY3JvbGwtcGUiOlt7InNjcm9sbC1wZSI6QigpfV0sInNjcm9sbC1wdCI6W3sic2Nyb2xsLXB0IjpCKCl9XSwic2Nyb2xsLXByIjpbeyJzY3JvbGwtcHIiOkIoKX1dLCJzY3JvbGwtcGIiOlt7InNjcm9sbC1wYiI6QigpfV0sInNjcm9sbC1wbCI6W3sic2Nyb2xsLXBsIjpCKCl9XSwic25hcC1hbGlnbiI6W3tzbmFwOlsic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJhbGlnbi1ub25lIl19XSwic25hcC1zdG9wIjpbe3NuYXA6WyJub3JtYWwiLCJhbHdheXMiXX1dLCJzbmFwLXR5cGUiOlt7c25hcDpbIm5vbmUiLCJ4IiwieSIsImJvdGgiXX1dLCJzbmFwLXN0cmljdG5lc3MiOlt7c25hcDpbIm1hbmRhdG9yeSIsInByb3hpbWl0eSJdfV0sdG91Y2g6W3t0b3VjaDpbImF1dG8iLCJub25lIiwibWFuaXB1bGF0aW9uIl19XSwidG91Y2gteCI6W3sidG91Y2gtcGFuIjpbIngiLCJsZWZ0IiwicmlnaHQiXX1dLCJ0b3VjaC15IjpbeyJ0b3VjaC1wYW4iOlsieSIsInVwIiwiZG93biJdfV0sInRvdWNoLXB6IjpbInRvdWNoLXBpbmNoLXpvb20iXSxzZWxlY3Q6W3tzZWxlY3Q6WyJub25lIiwidGV4dCIsImFsbCIsImF1dG8iXX1dLCJ3aWxsLWNoYW5nZSI6W3sid2lsbC1jaGFuZ2UiOlsiYXV0byIsInNjcm9sbCIsImNvbnRlbnRzIiwidHJhbnNmb3JtIixnZV19XSxmaWxsOlt7ZmlsbDpbZSwibm9uZSJdfV0sInN0cm9rZS13Ijpbe3N0cm9rZTpbSm4sc28sU3VdfV0sc3Ryb2tlOlt7c3Ryb2tlOltlLCJub25lIl19XSxzcjpbInNyLW9ubHkiLCJub3Qtc3Itb25seSJdfSxjb25mbGljdGluZ0NsYXNzR3JvdXBzOntvdmVyZmxvdzpbIm92ZXJmbG93LXgiLCJvdmVyZmxvdy15Il0sb3ZlcnNjcm9sbDpbIm92ZXJzY3JvbGwteCIsIm92ZXJzY3JvbGwteSJdLGluc2V0OlsiaW5zZXQteCIsImluc2V0LXkiLCJzdGFydCIsImVuZCIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLCJpbnNldC14IjpbInJpZ2h0IiwibGVmdCJdLCJpbnNldC15IjpbInRvcCIsImJvdHRvbSJdLGZsZXg6WyJiYXNpcyIsImdyb3ciLCJzaHJpbmsiXSxnYXA6WyJnYXAteCIsImdhcC15Il0scDpbInB4IiwicHkiLCJwcyIsInBlIiwicHQiLCJwciIsInBiIiwicGwiXSxweDpbInByIiwicGwiXSxweTpbInB0IiwicGIiXSxtOlsibXgiLCJteSIsIm1zIiwibWUiLCJtdCIsIm1yIiwibWIiLCJtbCJdLG14OlsibXIiLCJtbCJdLG15OlsibXQiLCJtYiJdLCJmb250LXNpemUiOlsibGVhZGluZyJdLCJmdm4tbm9ybWFsIjpbImZ2bi1vcmRpbmFsIiwiZnZuLXNsYXNoZWQtemVybyIsImZ2bi1maWd1cmUiLCJmdm4tc3BhY2luZyIsImZ2bi1mcmFjdGlvbiJdLCJmdm4tb3JkaW5hbCI6WyJmdm4tbm9ybWFsIl0sImZ2bi1zbGFzaGVkLXplcm8iOlsiZnZuLW5vcm1hbCJdLCJmdm4tZmlndXJlIjpbImZ2bi1ub3JtYWwiXSwiZnZuLXNwYWNpbmciOlsiZnZuLW5vcm1hbCJdLCJmdm4tZnJhY3Rpb24iOlsiZnZuLW5vcm1hbCJdLHJvdW5kZWQ6WyJyb3VuZGVkLXMiLCJyb3VuZGVkLWUiLCJyb3VuZGVkLXQiLCJyb3VuZGVkLXIiLCJyb3VuZGVkLWIiLCJyb3VuZGVkLWwiLCJyb3VuZGVkLXNzIiwicm91bmRlZC1zZSIsInJvdW5kZWQtZWUiLCJyb3VuZGVkLWVzIiwicm91bmRlZC10bCIsInJvdW5kZWQtdHIiLCJyb3VuZGVkLWJyIiwicm91bmRlZC1ibCJdLCJyb3VuZGVkLXMiOlsicm91bmRlZC1zcyIsInJvdW5kZWQtZXMiXSwicm91bmRlZC1lIjpbInJvdW5kZWQtc2UiLCJyb3VuZGVkLWVlIl0sInJvdW5kZWQtdCI6WyJyb3VuZGVkLXRsIiwicm91bmRlZC10ciJdLCJyb3VuZGVkLXIiOlsicm91bmRlZC10ciIsInJvdW5kZWQtYnIiXSwicm91bmRlZC1iIjpbInJvdW5kZWQtYnIiLCJyb3VuZGVkLWJsIl0sInJvdW5kZWQtbCI6WyJyb3VuZGVkLXRsIiwicm91bmRlZC1ibCJdLCJib3JkZXItc3BhY2luZyI6WyJib3JkZXItc3BhY2luZy14IiwiYm9yZGVyLXNwYWNpbmcteSJdLCJib3JkZXItdyI6WyJib3JkZXItdy1zIiwiYm9yZGVyLXctZSIsImJvcmRlci13LXQiLCJib3JkZXItdy1yIiwiYm9yZGVyLXctYiIsImJvcmRlci13LWwiXSwiYm9yZGVyLXcteCI6WyJib3JkZXItdy1yIiwiYm9yZGVyLXctbCJdLCJib3JkZXItdy15IjpbImJvcmRlci13LXQiLCJib3JkZXItdy1iIl0sImJvcmRlci1jb2xvciI6WyJib3JkZXItY29sb3ItdCIsImJvcmRlci1jb2xvci1yIiwiYm9yZGVyLWNvbG9yLWIiLCJib3JkZXItY29sb3ItbCJdLCJib3JkZXItY29sb3IteCI6WyJib3JkZXItY29sb3ItciIsImJvcmRlci1jb2xvci1sIl0sImJvcmRlci1jb2xvci15IjpbImJvcmRlci1jb2xvci10IiwiYm9yZGVyLWNvbG9yLWIiXSwic2Nyb2xsLW0iOlsic2Nyb2xsLW14Iiwic2Nyb2xsLW15Iiwic2Nyb2xsLW1zIiwic2Nyb2xsLW1lIiwic2Nyb2xsLW10Iiwic2Nyb2xsLW1yIiwic2Nyb2xsLW1iIiwic2Nyb2xsLW1sIl0sInNjcm9sbC1teCI6WyJzY3JvbGwtbXIiLCJzY3JvbGwtbWwiXSwic2Nyb2xsLW15IjpbInNjcm9sbC1tdCIsInNjcm9sbC1tYiJdLCJzY3JvbGwtcCI6WyJzY3JvbGwtcHgiLCJzY3JvbGwtcHkiLCJzY3JvbGwtcHMiLCJzY3JvbGwtcGUiLCJzY3JvbGwtcHQiLCJzY3JvbGwtcHIiLCJzY3JvbGwtcGIiLCJzY3JvbGwtcGwiXSwic2Nyb2xsLXB4IjpbInNjcm9sbC1wciIsInNjcm9sbC1wbCJdLCJzY3JvbGwtcHkiOlsic2Nyb2xsLXB0Iiwic2Nyb2xsLXBiIl0sdG91Y2g6WyJ0b3VjaC14IiwidG91Y2gteSIsInRvdWNoLXB6Il0sInRvdWNoLXgiOlsidG91Y2giXSwidG91Y2gteSI6WyJ0b3VjaCJdLCJ0b3VjaC1weiI6WyJ0b3VjaCJdfSxjb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnM6eyJmb250LXNpemUiOlsibGVhZGluZyJdfX19Y29uc3QgRE49eU4oTE4pO2Z1bmN0aW9uIHV0KC4uLmUpe3JldHVybiBETihxdyhlKSl9Y29uc3QgQnM9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsY2hpbGRyZW46dCwuLi5ufSxyKT0+dy5qc3hzKEp3LHtyZWY6cixjbGFzc05hbWU6dXQoInJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiIsZSksLi4ubixjaGlsZHJlbjpbdy5qc3gob04se2NsYXNzTmFtZToiaC1mdWxsIHctZnVsbCByb3VuZGVkLVtpbmhlcml0XSIsY2hpbGRyZW46dH0pLHcuanN4KGlfLHt9KSx3LmpzeChpTix7fSldfSkpO0JzLmRpc3BsYXlOYW1lPUp3LmRpc3BsYXlOYW1lO2NvbnN0IGlfPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLG9yaWVudGF0aW9uOnQ9InZlcnRpY2FsIiwuLi5ufSxyKT0+dy5qc3goVXcse3JlZjpyLG9yaWVudGF0aW9uOnQsY2xhc3NOYW1lOnV0KCJmbGV4IHRvdWNoLW5vbmUgc2VsZWN0LW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMiLHQ9PT0idmVydGljYWwiJiYiaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50IHAtWzFweF0iLHQ9PT0iaG9yaXpvbnRhbCImJiJoLTIuNSBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItdC10cmFuc3BhcmVudCBwLVsxcHhdIixlKSwuLi5uLGNoaWxkcmVuOncuanN4KFpULHtjbGFzc05hbWU6dXQoInJlbGF0aXZlIHJvdW5kZWQtZnVsbCBiZy1ib3JkZXIiLHQ9PT0idmVydGljYWwiJiYiZmxleC0xIil9KX0pKTtpXy5kaXNwbGF5TmFtZT1Vdy5kaXNwbGF5TmFtZTtmdW5jdGlvbiBXcyh7Y2hpbGRyZW46ZX0pe2NvbnN0IHQ9cC51c2VSZWYobnVsbCksbj1wLnVzZVJlZihudWxsKSxyPXAudXNlUmVmKCExKSxvPXAudXNlUmVmKDApLGk9cC51c2VSZWYobnVsbCksbD1wLnVzZVJlZigwKSxzPSgpPT57ci5jdXJyZW50PSExLGkuY3VycmVudD1udWxsLG8uY3VycmVudD0wLGwuY3VycmVudD0wfSxhPV89PntfLnByZXZlbnREZWZhdWx0KCk7Y29uc3Qgdj1pLmN1cnJlbnQ9PT0ibGVmdCI/dDpuO2lmKHYuY3VycmVudCYmci5jdXJyZW50KXtjb25zdCB5PWkuY3VycmVudD09PSJsZWZ0Ij9fLnNjcmVlblgtby5jdXJyZW50Om8uY3VycmVudC1fLnNjcmVlblg7di5jdXJyZW50LnN0eWxlLndpZHRoPWAke01hdGgubWF4KGwuY3VycmVudCt5LDE1MCl9cHhgfX0sdT1fPT52PT57aWYodi50YXJnZXQpe2NvbnN0IHg9Xz09PSJsZWZ0Ij90Ol89PT0icmlnaHQiP246bnVsbDtyLmN1cnJlbnQ9ITAseCYmeC5jdXJyZW50JiYoby5jdXJyZW50PXYuc2NyZWVuWCxpLmN1cnJlbnQ9Xyx4LmN1cnJlbnQmJihsLmN1cnJlbnQ9eC5jdXJyZW50Lm9mZnNldFdpZHRoKSl9fSxbYyxkLGYsaCxtLGddPXAuQ2hpbGRyZW4udG9BcnJheShlKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9Pihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixzKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLGEpLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixhKX0pLFtdKSx3LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBoLXNjcmVlbiIsY2hpbGRyZW46W3cuanN4cygiZGl2Iix7cmVmOnQsY2xhc3NOYW1lOiJyZWxhdGl2ZSBib3JkZXItciBib3JkZXItYm9yZGVyIixzdHlsZTp7d2lkdGg6MzAwfSxjaGlsZHJlbjpbdy5qc3hzKFdzLkNvbHVtbix7Y2hpbGRyZW46W2Msdy5qc3goQnMse3N0eWxlOntoZWlnaHQ6ImNhbGMoMTAwdmggLSA1MHB4KSJ9LGNoaWxkcmVuOmR9KV19KSx3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC15LTAgcmlnaHQtMCBjdXJzb3ItY29sLXJlc2l6ZSB3LVsxcHhdIGhvdmVyOnctWzNweF0gaC1mdWxsIGhvdmVyOmJnLWJvcmRlciIsb25Nb3VzZURvd246dSgibGVmdCIpfSldfSksdy5qc3goImRpdiIse2NsYXNzTmFtZTp2ZCgiIix7InctZnVsbCI6IW0mJiFnfSksY2hpbGRyZW46dy5qc3hzKFdzLkNvbHVtbix7Y2hpbGRyZW46W2Ysdy5qc3goQnMse3N0eWxlOntoZWlnaHQ6ImNhbGMoMTAwdmggLSA1MHB4KSJ9LGNoaWxkcmVuOmh9KV19KX0pLG18fGcmJncuanN4cygiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOiJyZWxhdGl2ZSBoLXNjcmVlbiBib3JkZXItbCBib3JkZXItYm9yZGVyIixzdHlsZTp7d2lkdGg6MzAwfSxjaGlsZHJlbjpbdy5qc3hzKFdzLkNvbHVtbix7Y2hpbGRyZW46W20sdy5qc3goQnMse3N0eWxlOntoZWlnaHQ6ImNhbGMoMTAwdmggLSA1MHB4KSJ9LGNoaWxkcmVuOmd9KV19KSx3LmpzeCgiZGl2Iix7b25Nb3VzZURvd246dSgicmlnaHQiKSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LXktMCBsZWZ0LTAgY3Vyc29yLWNvbC1yZXNpemUgdy1bMXB4XSBiZy1ib3JkZXIgaG92ZXI6dy1bM3B4XSBob3ZlcjpiZy1ib3JkZXIifSldfSldfSl9V3MuQ29sdW1uPSh7Y2hpbGRyZW46ZX0pPT57Y29uc3RbdCxuXT1wLkNoaWxkcmVuLnRvQXJyYXkoZSk7cmV0dXJuIHcuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIixjaGlsZHJlbjpbdy5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyLWIgYm9yZGVyLWJvcmRlciIsY2hpbGRyZW46dH0pLG5dfSl9O2NvbnN0IElOPSh7Y2xhc3NOYW1lOmV9KT0+dy5qc3hzKCJzdmciLHt3aWR0aDoiMTIiLGhlaWdodDoiMTIiLHZpZXdCb3g6IjAgMCA5IDEwIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNsYXNzTmFtZTplLGNoaWxkcmVuOlt3LmpzeHMoImciLHtjbGlwUGF0aDoidXJsKCNjbGlwMF8xMjI1XzE2MzgpIixjaGlsZHJlbjpbdy5qc3goInJlY3QiLHt5OiIwLjUiLHdpZHRoOiI5IixoZWlnaHQ6IjkifSksdy5qc3goInBhdGgiLHtkOiJNMCA3TDguNSA1IixzdHJva2U6ImN1cnJlbnRDb2xvciJ9KSx3LmpzeCgiY2lyY2xlIix7Y3g6IjMiLGN5OiIzLjUiLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciJ9KV19KSx3LmpzeCgicmVjdCIse3g6IjAuNSIseToiMSIsd2lkdGg6IjgiLGhlaWdodDoiOCIsc3Ryb2tlOiJjdXJyZW50Q29sb3IifSksdy5qc3goImRlZnMiLHtjaGlsZHJlbjp3LmpzeCgiY2xpcFBhdGgiLHtpZDoiY2xpcDBfMTIyNV8xNjM4IixjaGlsZHJlbjp3LmpzeCgicmVjdCIse3k6IjAuNSIsd2lkdGg6IjkiLGhlaWdodDoiOSIsZmlsbDoid2hpdGUifSl9KX0pXX0pLGxfPUlOLGpOPSh7Y2xhc3NOYW1lOmV9KT0+dy5qc3hzKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDkgMTAiLGNsYXNzTmFtZTplLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbdy5qc3hzKCJnIix7Y2xpcFBhdGg6InVybCgjY2xpcDBfMTIyMl8xNjE4KSIsY2hpbGRyZW46W3cuanN4KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixkOiJNOSAxLjVIMFYwLjVIOVYxLjVaIixmaWxsOiJjdXJyZW50Q29sb3IifSksdy5qc3goInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsY2xpcFJ1bGU6ImV2ZW5vZGQiLGQ6Ik05IDkuNUgwVjguNUg5VjkuNVoiLGZpbGw6ImN1cnJlbnRDb2xvciJ9KV19KSx3LmpzeCgiZGVmcyIse2NoaWxkcmVuOncuanN4KCJjbGlwUGF0aCIse2lkOiJjbGlwMF8xMjIyXzE2MTgiLGNoaWxkcmVuOncuanN4KCJyZWN0Iix7d2lkdGg6IjkiLGhlaWdodDoiOSIsZmlsbDoid2hpdGUiLHRyYW5zZm9ybToidHJhbnNsYXRlKDAgMC41KSJ9KX0pfSldfSksek49ak4sRk49KHtjbGFzc05hbWU6ZX0pPT53LmpzeCgic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCA5IDEwIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOmUsY2hpbGRyZW46dy5qc3goImciLHtjbGlwUGF0aDoidXJsKCNjbGlwMF8xMjI5XzE2MjUpIixjaGlsZHJlbjp3LmpzeCgicGF0aCIse2Q6Ik0wLjAxNDU1MTMgMC41SDguOTg1NDVMOSAzLjE4NTY5SDguNTcwNzRDOC40MzAwNyAyLjIyNzYgOC4wMjc0OSAxLjU3OTQ4IDcuMzYyOTggMS4yNDEzM0M2Ljk4OTQ5IDEuMDU0OTEgNi40MzE2OSAwLjk1MzAzNSA1LjY4OTU3IDAuOTM1Njk0VjcuOTQ1ODFDNS42ODk1NyA4LjQzNTY5IDUuNzg0MTYgOC43NjA4NCA1Ljk3MzMyIDguOTIxMjRDNi4xNjczNCA5LjA4MTY1IDYuNTY3NSA5LjE2MTg1IDcuMTczODEgOS4xNjE4NVY5LjVIMS44NjI1N1Y5LjE2MTg1QzIuNDQ0NjIgOS4xNjE4NSAyLjgzMDIzIDkuMDgxNjUgMy4wMTk0IDguOTIxMjRDMy4yMTM0MiA4Ljc1NjUgMy4zMTA0MyA4LjQzMTM2IDMuMzEwNDMgNy45NDU4MVYwLjkzNTY5NEMyLjU4Mjg2IDAuOTUzMDM1IDIuMDI1MDYgMS4wNTQ5MSAxLjYzNzAzIDEuMjQxMzNDMC45MjQwMSAxLjU4ODE1IDAuNTIxNDIzIDIuMjM2MjcgMC40MjkyNjQgMy4xODU2OUgwTDAuMDE0NTUxMyAwLjVaIn0pfSl9KSxCTj1GTjtmdW5jdGlvbiBzXyh7Y2hpbGRyZW46ZSxyb290UGF0aDp0fSl7cmV0dXJuIHcuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgdy1mdWxsIHB5LTIgdGV4dC14cyIsY2hpbGRyZW46cC5DaGlsZHJlbi5tYXAoZSxuPT5wLmNsb25lRWxlbWVudChuLHtwYXRoczpbdF19KSl9KX1zXy5Ob2RlPSh7Y2hpbGRyZW46ZSxwYXRoczp0PVtdLHBhdGg6bixsZXZlbDpyPTEsdHlwZTpvLHNldEFjdGl2ZVBhdGg6aX0pPT57Y29uc3QgbD1yKjMwLHM9bz09PSJzdHJpbmciP3cuanN4KEJOLHt9KTpvPT09ImltYWdlIj93LmpzeChsXyx7Y2xhc3NOYW1lOiJoLVs5cHhdIHctWzlweF0ifSk6dy5qc3goek4se30pO3JldHVybiB3LmpzeHMoImRpdiIse2NsYXNzTmFtZToidy1mdWxsIixjaGlsZHJlbjpbdy5qc3goImJ1dHRvbiIse2NsYXNzTmFtZToiZmxleCBqdXN0aWZ5LWJldHdlZW4gdy1mdWxsIGdyb3VwIHB5LTIgdGV4dC14cyBmb250LVs0MDBdIHNocmluay0wIixvbkNsaWNrOigpPT57aSYmaShuKX0sc3R5bGU6e3BhZGRpbmdMZWZ0Omx9LGNoaWxkcmVuOncuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W3Msdy5qc3goInAiLHtjaGlsZHJlbjpufSldfSl9KSxlJiZ3LmpzeCh3LkZyYWdtZW50LHtjaGlsZHJlbjpwLkNoaWxkcmVuLm1hcChlLGE9PnAuY2xvbmVFbGVtZW50KGEse2xldmVsOnIrMSxwYXRoczpbLi4udCxuXX0pKX0pXX0pfTtmdW5jdGlvbiBWZygpe3JldHVybnthc3luYzohMSxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxob29rczpudWxsLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2lsZW50OiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbH19bGV0IFJpPVZnKCk7ZnVuY3Rpb24gYV8oZSl7Umk9ZX1jb25zdCB1Xz0vWyY8PiInXS8sV049bmV3IFJlZ0V4cCh1Xy5zb3VyY2UsImciKSxjXz0vWzw+IiddfCYoPyEoI1xkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFx3Kyk7KS8sVU49bmV3IFJlZ0V4cChjXy5zb3VyY2UsImciKSxITj17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0sX3k9ZT0+SE5bZV07ZnVuY3Rpb24gX24oZSx0KXtpZih0KXtpZih1Xy50ZXN0KGUpKXJldHVybiBlLnJlcGxhY2UoV04sX3kpfWVsc2UgaWYoY18udGVzdChlKSlyZXR1cm4gZS5yZXBsYWNlKFVOLF95KTtyZXR1cm4gZX1jb25zdCBWTj0vJigjKD86XGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XHcrKSk7Py9pZztmdW5jdGlvbiBLTihlKXtyZXR1cm4gZS5yZXBsYWNlKFZOLCh0LG4pPT4obj1uLnRvTG93ZXJDYXNlKCksbj09PSJjb2xvbiI/IjoiOm4uY2hhckF0KDApPT09IiMiP24uY2hhckF0KDEpPT09IngiP1N0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobi5zdWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCtuLnN1YnN0cmluZygxKSk6IiIpKX1jb25zdCBHTj0vKF58W15cW10pXF4vZztmdW5jdGlvbiBPZShlLHQpe2U9dHlwZW9mIGU9PSJzdHJpbmciP2U6ZS5zb3VyY2UsdD10fHwiIjtjb25zdCBuPXtyZXBsYWNlOihyLG8pPT4obz10eXBlb2Ygbz09Im9iamVjdCImJiJzb3VyY2UiaW4gbz9vLnNvdXJjZTpvLG89by5yZXBsYWNlKEdOLCIkMSIpLGU9ZS5yZXBsYWNlKHIsbyksbiksZ2V0UmVnZXg6KCk9Pm5ldyBSZWdFeHAoZSx0KX07cmV0dXJuIG59ZnVuY3Rpb24gU3koZSl7dHJ5e2U9ZW5jb2RlVVJJKGUpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIGV9Y29uc3QgVGM9e2V4ZWM6KCk9Pm51bGx9O2Z1bmN0aW9uIEV5KGUsdCl7Y29uc3Qgbj1lLnJlcGxhY2UoL1x8L2csKGksbCxzKT0+e2xldCBhPSExLHU9bDtmb3IoOy0tdT49MCYmc1t1XT09PSJcXCI7KWE9IWE7cmV0dXJuIGE/InwiOiIgfCJ9KSxyPW4uc3BsaXQoLyBcfC8pO2xldCBvPTA7aWYoclswXS50cmltKCl8fHIuc2hpZnQoKSxyLmxlbmd0aD4wJiYhcltyLmxlbmd0aC0xXS50cmltKCkmJnIucG9wKCksdClpZihyLmxlbmd0aD50KXIuc3BsaWNlKHQpO2Vsc2UgZm9yKDtyLmxlbmd0aDx0OylyLnB1c2goIiIpO2Zvcig7bzxyLmxlbmd0aDtvKyspcltvXT1yW29dLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gcn1mdW5jdGlvbiBFdShlLHQsbil7Y29uc3Qgcj1lLmxlbmd0aDtpZihyPT09MClyZXR1cm4iIjtsZXQgbz0wO2Zvcig7bzxyOyl7Y29uc3QgaT1lLmNoYXJBdChyLW8tMSk7aWYoaT09PXQmJiFuKW8rKztlbHNlIGlmKGkhPT10JiZuKW8rKztlbHNlIGJyZWFrfXJldHVybiBlLnNsaWNlKDAsci1vKX1mdW5jdGlvbiBZTihlLHQpe2lmKGUuaW5kZXhPZih0WzFdKT09PS0xKXJldHVybi0xO2xldCBuPTA7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXT09PSJcXCIpcisrO2Vsc2UgaWYoZVtyXT09PXRbMF0pbisrO2Vsc2UgaWYoZVtyXT09PXRbMV0mJihuLS0sbjwwKSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBDeShlLHQsbixyKXtjb25zdCBvPXQuaHJlZixpPXQudGl0bGU/X24odC50aXRsZSk6bnVsbCxsPWVbMV0ucmVwbGFjZSgvXFwoW1xbXF1dKS9nLCIkMSIpO2lmKGVbMF0uY2hhckF0KDApIT09IiEiKXtyLnN0YXRlLmluTGluaz0hMDtjb25zdCBzPXt0eXBlOiJsaW5rIixyYXc6bixocmVmOm8sdGl0bGU6aSx0ZXh0OmwsdG9rZW5zOnIuaW5saW5lVG9rZW5zKGwpfTtyZXR1cm4gci5zdGF0ZS5pbkxpbms9ITEsc31yZXR1cm57dHlwZToiaW1hZ2UiLHJhdzpuLGhyZWY6byx0aXRsZTppLHRleHQ6X24obCl9fWZ1bmN0aW9uIFhOKGUsdCl7Y29uc3Qgbj1lLm1hdGNoKC9eKFxzKykoPzpgYGApLyk7aWYobj09PW51bGwpcmV0dXJuIHQ7Y29uc3Qgcj1uWzFdO3JldHVybiB0LnNwbGl0KGAKYCkubWFwKG89Pntjb25zdCBpPW8ubWF0Y2goL15ccysvKTtpZihpPT09bnVsbClyZXR1cm4gbztjb25zdFtsXT1pO3JldHVybiBsLmxlbmd0aD49ci5sZW5ndGg/by5zbGljZShyLmxlbmd0aCk6b30pLmpvaW4oYApgKX1jbGFzcyBOY3tjb25zdHJ1Y3Rvcih0KXtVZSh0aGlzLCJvcHRpb25zIik7VWUodGhpcywicnVsZXMiKTtVZSh0aGlzLCJsZXhlciIpO3RoaXMub3B0aW9ucz10fHxSaX1zcGFjZSh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2submV3bGluZS5leGVjKHQpO2lmKG4mJm5bMF0ubGVuZ3RoPjApcmV0dXJue3R5cGU6InNwYWNlIixyYXc6blswXX19Y29kZSh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKHQpO2lmKG4pe2NvbnN0IHI9blswXS5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3Om5bMF0sY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9yOkV1KHIsYApgKX19fWZlbmNlcyh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWModCk7aWYobil7Y29uc3Qgcj1uWzBdLG89WE4ocixuWzNdfHwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpyLGxhbmc6blsyXT9uWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOm5bMl0sdGV4dDpvfX19aGVhZGluZyh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKHQpO2lmKG4pe2xldCByPW5bMl0udHJpbSgpO2lmKC8jJC8udGVzdChyKSl7Y29uc3Qgbz1FdShyLCIjIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8IW98fC8gJC8udGVzdChvKSkmJihyPW8udHJpbSgpKX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3Om5bMF0sZGVwdGg6blsxXS5sZW5ndGgsdGV4dDpyLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShyKX19fWhyKHQpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKHQpO2lmKG4pcmV0dXJue3R5cGU6ImhyIixyYXc6blswXX19YmxvY2txdW90ZSh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKHQpO2lmKG4pe2NvbnN0IHI9RXUoblswXS5yZXBsYWNlKC9eICo+WyBcdF0/L2dtLCIiKSxgCmApLG89dGhpcy5sZXhlci5zdGF0ZS50b3A7dGhpcy5sZXhlci5zdGF0ZS50b3A9ITA7Y29uc3QgaT10aGlzLmxleGVyLmJsb2NrVG9rZW5zKHIpO3JldHVybiB0aGlzLmxleGVyLnN0YXRlLnRvcD1vLHt0eXBlOiJibG9ja3F1b3RlIixyYXc6blswXSx0b2tlbnM6aSx0ZXh0OnJ9fX1saXN0KHQpe2xldCBuPXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKHQpO2lmKG4pe2xldCByPW5bMV0udHJpbSgpO2NvbnN0IG89ci5sZW5ndGg+MSxpPXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDpvLHN0YXJ0Om8/K3Iuc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O3I9bz9gXFxkezEsOX1cXCR7ci5zbGljZSgtMSl9YDpgXFwke3J9YCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihyPW8/cjoiWyorLV0iKTtjb25zdCBsPW5ldyBSZWdFeHAoYF4oIHswLDN9JHtyfSkoKD86WwkgXVteXFxuXSopPyg/OlxcbnwkKSlgKTtsZXQgcz0iIixhPSIiLHU9ITE7Zm9yKDt0Oyl7bGV0IGM9ITE7aWYoIShuPWwuZXhlYyh0KSl8fHRoaXMucnVsZXMuYmxvY2suaHIudGVzdCh0KSlicmVhaztzPW5bMF0sdD10LnN1YnN0cmluZyhzLmxlbmd0aCk7bGV0IGQ9blsyXS5zcGxpdChgCmAsMSlbMF0ucmVwbGFjZSgvXlx0Ky8sdj0+IiAiLnJlcGVhdCgzKnYubGVuZ3RoKSksZj10LnNwbGl0KGAKYCwxKVswXSxoPTA7dGhpcy5vcHRpb25zLnBlZGFudGljPyhoPTIsYT1kLnRyaW1TdGFydCgpKTooaD1uWzJdLnNlYXJjaCgvW14gXS8pLGg9aD40PzE6aCxhPWQuc2xpY2UoaCksaCs9blsxXS5sZW5ndGgpO2xldCBtPSExO2lmKCFkJiYvXiAqJC8udGVzdChmKSYmKHMrPWYrYApgLHQ9dC5zdWJzdHJpbmcoZi5sZW5ndGgrMSksYz0hMCksIWMpe2NvbnN0IHY9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsaC0xKX19KD86WyorLV18XFxkezEsOX1bLildKSgoPzpbIAldW15cXG5dKik/KD86XFxufCQpKWApLHk9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsaC0xKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKWApLHg9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsaC0xKX19KD86XGBcYFxgfH5+filgKSxTPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGgtMSl9fSNgKTtmb3IoO3Q7KXtjb25zdCBrPXQuc3BsaXQoYApgLDEpWzBdO2lmKGY9ayx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihmPWYucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSx4LnRlc3QoZil8fFMudGVzdChmKXx8di50ZXN0KGYpfHx5LnRlc3QodCkpYnJlYWs7aWYoZi5zZWFyY2goL1teIF0vKT49aHx8IWYudHJpbSgpKWErPWAKYCtmLnNsaWNlKGgpO2Vsc2V7aWYobXx8ZC5zZWFyY2goL1teIF0vKT49NHx8eC50ZXN0KGQpfHxTLnRlc3QoZCl8fHkudGVzdChkKSlicmVhazthKz1gCmArZn0hbSYmIWYudHJpbSgpJiYobT0hMCkscys9aytgCmAsdD10LnN1YnN0cmluZyhrLmxlbmd0aCsxKSxkPWYuc2xpY2UoaCl9fWkubG9vc2V8fCh1P2kubG9vc2U9ITA6L1xuICpcbiAqJC8udGVzdChzKSYmKHU9ITApKTtsZXQgZz1udWxsLF87dGhpcy5vcHRpb25zLmdmbSYmKGc9L15cW1sgeFhdXF0gLy5leGVjKGEpLGcmJihfPWdbMF0hPT0iWyBdICIsYT1hLnJlcGxhY2UoL15cW1sgeFhdXF0gKy8sIiIpKSksaS5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzpzLHRhc2s6ISFnLGNoZWNrZWQ6Xyxsb29zZTohMSx0ZXh0OmEsdG9rZW5zOltdfSksaS5yYXcrPXN9aS5pdGVtc1tpLml0ZW1zLmxlbmd0aC0xXS5yYXc9cy50cmltRW5kKCksaS5pdGVtc1tpLml0ZW1zLmxlbmd0aC0xXS50ZXh0PWEudHJpbUVuZCgpLGkucmF3PWkucmF3LnRyaW1FbmQoKTtmb3IobGV0IGM9MDtjPGkuaXRlbXMubGVuZ3RoO2MrKylpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxpLml0ZW1zW2NdLnRva2Vucz10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGkuaXRlbXNbY10udGV4dCxbXSksIWkubG9vc2Upe2NvbnN0IGQ9aS5pdGVtc1tjXS50b2tlbnMuZmlsdGVyKGg9PmgudHlwZT09PSJzcGFjZSIpLGY9ZC5sZW5ndGg+MCYmZC5zb21lKGg9Pi9cbi4qXG4vLnRlc3QoaC5yYXcpKTtpLmxvb3NlPWZ9aWYoaS5sb29zZSlmb3IobGV0IGM9MDtjPGkuaXRlbXMubGVuZ3RoO2MrKylpLml0ZW1zW2NdLmxvb3NlPSEwO3JldHVybiBpfX1odG1sKHQpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5odG1sLmV4ZWModCk7aWYobilyZXR1cm57dHlwZToiaHRtbCIsYmxvY2s6ITAscmF3Om5bMF0scHJlOm5bMV09PT0icHJlInx8blsxXT09PSJzY3JpcHQifHxuWzFdPT09InN0eWxlIix0ZXh0Om5bMF19fWRlZih0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWModCk7aWYobil7Y29uc3Qgcj1uWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxvPW5bMl0/blsyXS5yZXBsYWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKToiIixpPW5bM10/blszXS5zdWJzdHJpbmcoMSxuWzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOm5bM107cmV0dXJue3R5cGU6ImRlZiIsdGFnOnIscmF3Om5bMF0saHJlZjpvLHRpdGxlOml9fX10YWJsZSh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyh0KTtpZihuKXtpZighL1s6fF0vLnRlc3QoblsyXSkpcmV0dXJuO2NvbnN0IHI9e3R5cGU6InRhYmxlIixyYXc6blswXSxoZWFkZXI6RXkoblsxXSkubWFwKG89Pih7dGV4dDpvLHRva2VuczpbXX0pKSxhbGlnbjpuWzJdLnJlcGxhY2UoL15cfHxcfCAqJC9nLCIiKS5zcGxpdCgifCIpLHJvd3M6blszXSYmblszXS50cmltKCk/blszXS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKS5zcGxpdChgCmApOltdfTtpZihyLmhlYWRlci5sZW5ndGg9PT1yLmFsaWduLmxlbmd0aCl7bGV0IG89ci5hbGlnbi5sZW5ndGgsaSxsLHMsYTtmb3IoaT0wO2k8bztpKyspe2NvbnN0IHU9ci5hbGlnbltpXTt1JiYoL14gKi0rOiAqJC8udGVzdCh1KT9yLmFsaWduW2ldPSJyaWdodCI6L14gKjotKzogKiQvLnRlc3QodSk/ci5hbGlnbltpXT0iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KHUpP3IuYWxpZ25baV09ImxlZnQiOnIuYWxpZ25baV09bnVsbCl9Zm9yKG89ci5yb3dzLmxlbmd0aCxpPTA7aTxvO2krKylyLnJvd3NbaV09RXkoci5yb3dzW2ldLHIuaGVhZGVyLmxlbmd0aCkubWFwKHU9Pih7dGV4dDp1LHRva2VuczpbXX0pKTtmb3Iobz1yLmhlYWRlci5sZW5ndGgsbD0wO2w8bztsKyspci5oZWFkZXJbbF0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKHIuaGVhZGVyW2xdLnRleHQpO2ZvcihvPXIucm93cy5sZW5ndGgsbD0wO2w8bztsKyspZm9yKGE9ci5yb3dzW2xdLHM9MDtzPGEubGVuZ3RoO3MrKylhW3NdLnRva2Vucz10aGlzLmxleGVyLmlubGluZShhW3NdLnRleHQpO3JldHVybiByfX19bGhlYWRpbmcodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLmxoZWFkaW5nLmV4ZWModCk7aWYobilyZXR1cm57dHlwZToiaGVhZGluZyIscmF3Om5bMF0sZGVwdGg6blsyXS5jaGFyQXQoMCk9PT0iPSI/MToyLHRleHQ6blsxXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoblsxXSl9fXBhcmFncmFwaCh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2sucGFyYWdyYXBoLmV4ZWModCk7aWYobil7Y29uc3Qgcj1uWzFdLmNoYXJBdChuWzFdLmxlbmd0aC0xKT09PWAKYD9uWzFdLnNsaWNlKDAsLTEpOm5bMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3Om5bMF0sdGV4dDpyLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShyKX19fXRleHQodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyh0KTtpZihuKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6blswXSx0ZXh0Om5bMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG5bMF0pfX1lc2NhcGUodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyh0KTtpZihuKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzpuWzBdLHRleHQ6X24oblsxXSl9fXRhZyh0KXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKHQpO2lmKG4pcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QoblswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KG5bMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoblswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KG5bMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZToiaHRtbCIscmF3Om5bMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3QmxvY2s6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrLGJsb2NrOiExLHRleHQ6blswXX19bGluayh0KXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyh0KTtpZihuKXtjb25zdCByPW5bMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8udGVzdChyKSl7aWYoIS8+JC8udGVzdChyKSlyZXR1cm47Y29uc3QgbD1FdShyLnNsaWNlKDAsLTEpLCJcXCIpO2lmKChyLmxlbmd0aC1sLmxlbmd0aCklMj09PTApcmV0dXJufWVsc2V7Y29uc3QgbD1ZTihuWzJdLCIoKSIpO2lmKGw+LTEpe2NvbnN0IGE9KG5bMF0uaW5kZXhPZigiISIpPT09MD81OjQpK25bMV0ubGVuZ3RoK2w7blsyXT1uWzJdLnN1YnN0cmluZygwLGwpLG5bMF09blswXS5zdWJzdHJpbmcoMCxhKS50cmltKCksblszXT0iIn19bGV0IG89blsyXSxpPSIiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7Y29uc3QgbD0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMobyk7bCYmKG89bFsxXSxpPWxbM10pfWVsc2UgaT1uWzNdP25bM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIG89by50cmltKCksL148Ly50ZXN0KG8pJiYodGhpcy5vcHRpb25zLnBlZGFudGljJiYhLz4kLy50ZXN0KHIpP289by5zbGljZSgxKTpvPW8uc2xpY2UoMSwtMSkpLEN5KG4se2hyZWY6byYmby5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRpdGxlOmkmJmkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKX0sblswXSx0aGlzLmxleGVyKX19cmVmbGluayh0LG4pe2xldCByO2lmKChyPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyh0KSl8fChyPXRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKHQpKSl7bGV0IG89KHJbMl18fHJbMV0pLnJlcGxhY2UoL1xzKy9nLCIgIik7aWYobz1uW28udG9Mb3dlckNhc2UoKV0sIW8pe2NvbnN0IGk9clswXS5jaGFyQXQoMCk7cmV0dXJue3R5cGU6InRleHQiLHJhdzppLHRleHQ6aX19cmV0dXJuIEN5KHIsbyxyWzBdLHRoaXMubGV4ZXIpfX1lbVN0cm9uZyh0LG4scj0iIil7bGV0IG89dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWModCk7aWYoIW98fG9bM10mJnIubWF0Y2goL1tccHtMfVxwe059XS91KSlyZXR1cm47aWYoIShvWzFdfHxvWzJdfHwiIil8fCFyfHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKHIpKXtjb25zdCBsPVsuLi5vWzBdXS5sZW5ndGgtMTtsZXQgcyxhLHU9bCxjPTA7Y29uc3QgZD1vWzBdWzBdPT09IioiP3RoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbUFzdDp0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1VbmQ7Zm9yKGQubGFzdEluZGV4PTAsbj1uLnNsaWNlKC0xKnQubGVuZ3RoK2wpOyhvPWQuZXhlYyhuKSkhPW51bGw7KXtpZihzPW9bMV18fG9bMl18fG9bM118fG9bNF18fG9bNV18fG9bNl0sIXMpY29udGludWU7aWYoYT1bLi4uc10ubGVuZ3RoLG9bM118fG9bNF0pe3UrPWE7Y29udGludWV9ZWxzZSBpZigob1s1XXx8b1s2XSkmJmwlMyYmISgobCthKSUzKSl7Yys9YTtjb250aW51ZX1pZih1LT1hLHU+MCljb250aW51ZTthPU1hdGgubWluKGEsYSt1K2MpO2NvbnN0IGY9Wy4uLm9bMF1dWzBdLmxlbmd0aCxoPXQuc2xpY2UoMCxsK28uaW5kZXgrZithKTtpZihNYXRoLm1pbihsLGEpJTIpe2NvbnN0IGc9aC5zbGljZSgxLC0xKTtyZXR1cm57dHlwZToiZW0iLHJhdzpoLHRleHQ6Zyx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoZyl9fWNvbnN0IG09aC5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6aCx0ZXh0Om0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKG0pfX19fWNvZGVzcGFuKHQpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUuY29kZS5leGVjKHQpO2lmKG4pe2xldCByPW5bMl0ucmVwbGFjZSgvXG4vZywiICIpO2NvbnN0IG89L1teIF0vLnRlc3QociksaT0vXiAvLnRlc3QocikmJi8gJC8udGVzdChyKTtyZXR1cm4gbyYmaSYmKHI9ci5zdWJzdHJpbmcoMSxyLmxlbmd0aC0xKSkscj1fbihyLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzpuWzBdLHRleHQ6cn19fWJyKHQpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyh0KTtpZihuKXJldHVybnt0eXBlOiJiciIscmF3Om5bMF19fWRlbCh0KXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHQpO2lmKG4pcmV0dXJue3R5cGU6ImRlbCIscmF3Om5bMF0sdGV4dDpuWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhuWzJdKX19YXV0b2xpbmsodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKHQpO2lmKG4pe2xldCByLG87cmV0dXJuIG5bMl09PT0iQCI/KHI9X24oblsxXSksbz0ibWFpbHRvOiIrcik6KHI9X24oblsxXSksbz1yKSx7dHlwZToibGluayIscmF3Om5bMF0sdGV4dDpyLGhyZWY6byx0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6cix0ZXh0OnJ9XX19fXVybCh0KXtsZXQgbjtpZihuPXRoaXMucnVsZXMuaW5saW5lLnVybC5leGVjKHQpKXtsZXQgcixvO2lmKG5bMl09PT0iQCIpcj1fbihuWzBdKSxvPSJtYWlsdG86IityO2Vsc2V7bGV0IGk7ZG8gaT1uWzBdLG5bMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKG5bMF0pWzBdO3doaWxlKGkhPT1uWzBdKTtyPV9uKG5bMF0pLG5bMV09PT0id3d3LiI/bz0iaHR0cDovLyIrblswXTpvPW5bMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzpuWzBdLHRleHQ6cixocmVmOm8sdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OnIsdGV4dDpyfV19fX1pbmxpbmVUZXh0KHQpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKHQpO2lmKG4pe2xldCByO3JldHVybiB0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s/cj1uWzBdOnI9X24oblswXSkse3R5cGU6InRleHQiLHJhdzpuWzBdLHRleHQ6cn19fX1jb25zdCBzZT17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6VGMsbGhlYWRpbmc6L14oPyFidWxsICkoKD86Lnxcbig/IVxzKj9cbnxidWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3JhcGg6L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy99O3NlLl9sYWJlbD0vKD8hXHMqXF0pKD86XFwufFteXFtcXVxcXSkrLztzZS5fdGl0bGU9Lyg/OiIoPzpcXCI/fFteIlxcXSkqInwnW14nXG5dKig/OlxuW14nXG5dKykqXG4/J3xcKFteKCldKlwpKS87c2UuZGVmPU9lKHNlLmRlZikucmVwbGFjZSgibGFiZWwiLHNlLl9sYWJlbCkucmVwbGFjZSgidGl0bGUiLHNlLl90aXRsZSkuZ2V0UmVnZXgoKTtzZS5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS87c2UubGlzdEl0ZW1TdGFydD1PZSgvXiggKikoYnVsbCkgKi8pLnJlcGxhY2UoImJ1bGwiLHNlLmJ1bGxldCkuZ2V0UmVnZXgoKTtzZS5saXN0PU9lKHNlLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxzZS5idWxsZXQpLnJlcGxhY2UoImhyIiwiXFxuKyg/PVxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkpIikucmVwbGFjZSgiZGVmIiwiXFxuKyg/PSIrc2UuZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCk7c2UuX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCI7c2UuX2NvbW1lbnQ9LzwhLS0oPyEtPz4pW1xzXFNdKj8oPzotLT58JCkvO3NlLmh0bWw9T2Uoc2UuaHRtbCwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLHNlLl9jb21tZW50KS5yZXBsYWNlKCJ0YWciLHNlLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCk7c2UubGhlYWRpbmc9T2Uoc2UubGhlYWRpbmcpLnJlcGxhY2UoL2J1bGwvZyxzZS5idWxsZXQpLmdldFJlZ2V4KCk7c2UucGFyYWdyYXBoPU9lKHNlLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixzZS5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixzZS5fdGFnKS5nZXRSZWdleCgpO3NlLmJsb2NrcXVvdGU9T2Uoc2UuYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixzZS5wYXJhZ3JhcGgpLmdldFJlZ2V4KCk7c2Uubm9ybWFsPXsuLi5zZX07c2UuZ2ZtPXsuLi5zZS5ub3JtYWwsdGFibGU6Il4gKihbXlxcbiBdLiopXFxuIHswLDN9KCg/OlxcfCAqKT86Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKig/OlxcfCAqKT8pKD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn07c2UuZ2ZtLnRhYmxlPU9lKHNlLmdmbS50YWJsZSkucmVwbGFjZSgiaHIiLHNlLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJjb2RlIiwiIHs0fVteXFxuXSIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsc2UuX3RhZykuZ2V0UmVnZXgoKTtzZS5nZm0ucGFyYWdyYXBoPU9lKHNlLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixzZS5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInRhYmxlIixzZS5nZm0udGFibGUpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixzZS5fdGFnKS5nZXRSZWdleCgpO3NlLnBlZGFudGljPXsuLi5zZS5ub3JtYWwsaHRtbDpPZShgXiAqKD86Y29tbWVudCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86IlteIl0qInwnW14nXSonfFxcc1teJyIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSlgKS5yZXBsYWNlKCJjb21tZW50IixzZS5fY29tbWVudCkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6VGMsbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6T2Uoc2Uubm9ybWFsLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixzZS5ocikucmVwbGFjZSgiaGVhZGluZyIsYCAqI3sxLDZ9ICpbXgpdYCkucmVwbGFjZSgibGhlYWRpbmciLHNlLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgoKX07Y29uc3QgWD17ZXNjYXBlOi9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9AXFtcXVxcXl9ge3x9fl0pLyxhdXRvbGluazovXjwoc2NoZW1lOlteXHNceDAwLVx4MWY8Pl0qfGVtYWlsKT4vLHVybDpUYyx0YWc6Il5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+IixsaW5rOi9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvLHJlZmxpbms6L14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLyxub2xpbms6L14hP1xbKHJlZilcXSg/OlxbXF0pPy8scmVmbGlua1NlYXJjaDoicmVmbGlua3xub2xpbmsoPyFcXCgpIixlbVN0cm9uZzp7bERlbGltOi9eKD86XCorKD86KCg/IVwqKVtwdW5jdF0pfFteXHMqXSkpfF5fKyg/OigoPyFfKVtwdW5jdF0pfChbXlxzX10pKS8sckRlbGltQXN0Oi9eW15fKl0qP19fW15fKl0qP1wqW15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0pfCg/IVwqKVtwdW5jdF0oXCorKSg/PVtcc118JCl8W15wdW5jdFxzXShcKispKD8hXCopKD89W3B1bmN0XHNdfCQpfCg/IVwqKVtwdW5jdFxzXShcKispKD89W15wdW5jdFxzXSl8W1xzXShcKispKD8hXCopKD89W3B1bmN0XSl8KD8hXCopW3B1bmN0XShcKispKD8hXCopKD89W3B1bmN0XSl8W15wdW5jdFxzXShcKispKD89W15wdW5jdFxzXSkvLHJEZWxpbVVuZDovXlteXypdKj9cKlwqW15fKl0qP19bXl8qXSo/KD89XCpcKil8W15fXSsoPz1bXl9dKXwoPyFfKVtwdW5jdF0oXyspKD89W1xzXXwkKXxbXnB1bmN0XHNdKF8rKSg/IV8pKD89W3B1bmN0XHNdfCQpfCg/IV8pW3B1bmN0XHNdKF8rKSg/PVtecHVuY3Rcc10pfFtcc10oXyspKD8hXykoPz1bcHVuY3RdKXwoPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKS99LGNvZGU6L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxicjovXiggezIsfXxcXClcbig/IVxzKiQpLyxkZWw6VGMsdGV4dDovXihgK3xbXmBdKSg/Oig/PSB7Mix9XG4pfFtcc1xTXSo/KD86KD89W1xcPCFcW2AqX118XGJffCQpfFteIF0oPz0gezIsfVxuKSkpLyxwdW5jdHVhdGlvbjovXigoPyFbKl9dKVtcc3B1bmN0dWF0aW9uXSkvfTtYLl9wdW5jdHVhdGlvbj0iXFxwe1B9JCs8PT5gXnx+IjtYLnB1bmN0dWF0aW9uPU9lKFgucHVuY3R1YXRpb24sInUiKS5yZXBsYWNlKC9wdW5jdHVhdGlvbi9nLFguX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpO1guYmxvY2tTa2lwPS9cW1teW1xdXSo/XF1cKFteXChcKV0qP1wpfGBbXmBdKj9gfDxbXjw+XSo/Pi9nO1guYW55UHVuY3R1YXRpb249L1xcW3B1bmN0XS9nO1guX2VzY2FwZXM9L1xcKFtwdW5jdF0pL2c7WC5fY29tbWVudD1PZShzZS5fY29tbWVudCkucmVwbGFjZSgiKD86LS0+fCQpIiwiLS0+IikuZ2V0UmVnZXgoKTtYLmVtU3Ryb25nLmxEZWxpbT1PZShYLmVtU3Ryb25nLmxEZWxpbSwidSIpLnJlcGxhY2UoL3B1bmN0L2csWC5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCk7WC5lbVN0cm9uZy5yRGVsaW1Bc3Q9T2UoWC5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxYLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKTtYLmVtU3Ryb25nLnJEZWxpbVVuZD1PZShYLmVtU3Ryb25nLnJEZWxpbVVuZCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFguX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpO1guYW55UHVuY3R1YXRpb249T2UoWC5hbnlQdW5jdHVhdGlvbiwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFguX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpO1guX2VzY2FwZXM9T2UoWC5fZXNjYXBlcywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFguX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpO1guX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS87WC5fZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLztYLmF1dG9saW5rPU9lKFguYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsWC5fc2NoZW1lKS5yZXBsYWNlKCJlbWFpbCIsWC5fZW1haWwpLmdldFJlZ2V4KCk7WC5fYXR0cmlidXRlPS9ccytbYS16QS1aOl9dW1x3LjotXSooPzpccyo9XHMqIlteIl0qInxccyo9XHMqJ1teJ10qJ3xccyo9XHMqW15ccyInPTw+YF0rKT8vO1gudGFnPU9lKFgudGFnKS5yZXBsYWNlKCJjb21tZW50IixYLl9jb21tZW50KS5yZXBsYWNlKCJhdHRyaWJ1dGUiLFguX2F0dHJpYnV0ZSkuZ2V0UmVnZXgoKTtYLl9sYWJlbD0vKD86XFsoPzpcXC58W15cW1xdXFxdKSpcXXxcXC58YFteYF0qYHxbXlxbXF1cXGBdKSo/LztYLl9ocmVmPS88KD86XFwufFteXG48PlxcXSkrPnxbXlxzXHgwMC1ceDFmXSovO1guX3RpdGxlPS8iKD86XFwiP3xbXiJcXF0pKiJ8Jyg/OlxcJz98W14nXFxdKSonfFwoKD86XFxcKT98W14pXFxdKSpcKS87WC5saW5rPU9lKFgubGluaykucmVwbGFjZSgibGFiZWwiLFguX2xhYmVsKS5yZXBsYWNlKCJocmVmIixYLl9ocmVmKS5yZXBsYWNlKCJ0aXRsZSIsWC5fdGl0bGUpLmdldFJlZ2V4KCk7WC5yZWZsaW5rPU9lKFgucmVmbGluaykucmVwbGFjZSgibGFiZWwiLFguX2xhYmVsKS5yZXBsYWNlKCJyZWYiLHNlLl9sYWJlbCkuZ2V0UmVnZXgoKTtYLm5vbGluaz1PZShYLm5vbGluaykucmVwbGFjZSgicmVmIixzZS5fbGFiZWwpLmdldFJlZ2V4KCk7WC5yZWZsaW5rU2VhcmNoPU9lKFgucmVmbGlua1NlYXJjaCwiZyIpLnJlcGxhY2UoInJlZmxpbmsiLFgucmVmbGluaykucmVwbGFjZSgibm9saW5rIixYLm5vbGluaykuZ2V0UmVnZXgoKTtYLm5vcm1hbD17Li4uWH07WC5wZWRhbnRpYz17Li4uWC5ub3JtYWwsc3Ryb25nOntzdGFydDovXl9ffFwqXCovLG1pZGRsZTovXl9fKD89XFMpKFtcc1xTXSo/XFMpX18oPyFfKXxeXCpcKig/PVxTKShbXHNcU10qP1xTKVwqXCooPyFcKikvLGVuZEFzdDovXCpcKig/IVwqKS9nLGVuZFVuZDovX18oPyFfKS9nfSxlbTp7c3RhcnQ6L15ffFwqLyxtaWRkbGU6L14oKVwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKil8Xl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXykvLGVuZEFzdDovXCooPyFcKikvZyxlbmRVbmQ6L18oPyFfKS9nfSxsaW5rOk9lKC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixYLl9sYWJlbCkuZ2V0UmVnZXgoKSxyZWZsaW5rOk9lKC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJlcGxhY2UoImxhYmVsIixYLl9sYWJlbCkuZ2V0UmVnZXgoKX07WC5nZm09ey4uLlgubm9ybWFsLGVzY2FwZTpPZShYLmVzY2FwZSkucmVwbGFjZSgiXSkiLCJ+fF0pIikuZ2V0UmVnZXgoKSxfZXh0ZW5kZWRfZW1haWw6L1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlwuW2EtekEtWjAtOS1fXSpbYS16QS1aMC05XSkrKD8hWy1fXSkvLHVybDovXigoPzpmdHB8aHR0cHM/KTpcL1wvfHd3d1wuKSg/OlthLXpBLVowLTlcLV0rXC4/KStbXlxzPF0qfF5lbWFpbC8sX2JhY2twZWRhbDovKD86W14/IS4sOjsqXycifigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEtWjAtOV0rOyQpfFs/IS4sOjsqXycifildKyg/ISQpKSsvLGRlbDovXih+fj8pKD89W15cc35dKShbXHNcU10qP1teXHN+XSlcMSg/PVtefl18JCkvLHRleHQ6L14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cbil8KD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCl8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCp+X118XGJffGh0dHBzPzpcL1wvfGZ0cDpcL1wvfHd3d1wufCQpfFteIF0oPz0gezIsfVxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0oPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKSkpL307WC5nZm0udXJsPU9lKFguZ2ZtLnVybCwiaSIpLnJlcGxhY2UoImVtYWlsIixYLmdmbS5fZXh0ZW5kZWRfZW1haWwpLmdldFJlZ2V4KCk7WC5icmVha3M9ey4uLlguZ2ZtLGJyOk9lKFguYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0Ok9lKFguZ2ZtLnRleHQpLnJlcGxhY2UoIlxcYl8iLCJcXGJffCB7Mix9XFxuIikucmVwbGFjZSgvXHsyLFx9L2csIioiKS5nZXRSZWdleCgpfTtjbGFzcyB4cntjb25zdHJ1Y3Rvcih0KXtVZSh0aGlzLCJ0b2tlbnMiKTtVZSh0aGlzLCJvcHRpb25zIik7VWUodGhpcywic3RhdGUiKTtVZSh0aGlzLCJ0b2tlbml6ZXIiKTtVZSh0aGlzLCJpbmxpbmVRdWV1ZSIpO3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW5zLmxpbmtzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5vcHRpb25zPXR8fFJpLHRoaXMub3B0aW9ucy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcnx8bmV3IE5jLHRoaXMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXIsdGhpcy50b2tlbml6ZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50b2tlbml6ZXIubGV4ZXI9dGhpcyx0aGlzLmlubGluZVF1ZXVlPVtdLHRoaXMuc3RhdGU9e2luTGluazohMSxpblJhd0Jsb2NrOiExLHRvcDohMH07Y29uc3Qgbj17YmxvY2s6c2Uubm9ybWFsLGlubGluZTpYLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhuLmJsb2NrPXNlLnBlZGFudGljLG4uaW5saW5lPVgucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0mJihuLmJsb2NrPXNlLmdmbSx0aGlzLm9wdGlvbnMuYnJlYWtzP24uaW5saW5lPVguYnJlYWtzOm4uaW5saW5lPVguZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1ufXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6c2UsaW5saW5lOlh9fXN0YXRpYyBsZXgodCxuKXtyZXR1cm4gbmV3IHhyKG4pLmxleCh0KX1zdGF0aWMgbGV4SW5saW5lKHQsbil7cmV0dXJuIG5ldyB4cihuKS5pbmxpbmVUb2tlbnModCl9bGV4KHQpe3Q9dC5yZXBsYWNlKC9cclxufFxyL2csYApgKSx0aGlzLmJsb2NrVG9rZW5zKHQsdGhpcy50b2tlbnMpO2xldCBuO2Zvcig7bj10aGlzLmlubGluZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKG4uc3JjLG4udG9rZW5zKTtyZXR1cm4gdGhpcy50b2tlbnN9YmxvY2tUb2tlbnModCxuPVtdKXt0aGlzLm9wdGlvbnMucGVkYW50aWM/dD10LnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIiKTp0PXQucmVwbGFjZSgvXiggKikoXHQrKS9nbSwocyxhLHUpPT5hKyIgICAgIi5yZXBlYXQodS5sZW5ndGgpKTtsZXQgcixvLGksbDtmb3IoO3Q7KWlmKCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jay5zb21lKHM9PihyPXMuY2FsbCh7bGV4ZXI6dGhpc30sdCxuKSk/KHQ9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gociksITApOiExKSkpe2lmKHI9dGhpcy50b2tlbml6ZXIuc3BhY2UodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxyLnJhdy5sZW5ndGg9PT0xJiZuLmxlbmd0aD4wP25bbi5sZW5ndGgtMV0ucmF3Kz1gCmA6bi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuY29kZSh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG89bltuLmxlbmd0aC0xXSxvJiYoby50eXBlPT09InBhcmFncmFwaCJ8fG8udHlwZT09PSJ0ZXh0Iik/KG8ucmF3Kz1gCmArci5yYXcsby50ZXh0Kz1gCmArci50ZXh0LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPW8udGV4dCk6bi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuZmVuY2VzKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuaGVhZGluZyh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmhyKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuYmxvY2txdW90ZSh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmxpc3QodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5odG1sKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuZGVmKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbz1uW24ubGVuZ3RoLTFdLG8mJihvLnR5cGU9PT0icGFyYWdyYXBoInx8by50eXBlPT09InRleHQiKT8oby5yYXcrPWAKYCtyLnJhdyxvLnRleHQrPWAKYCtyLnJhdyx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1vLnRleHQpOnRoaXMudG9rZW5zLmxpbmtzW3IudGFnXXx8KHRoaXMudG9rZW5zLmxpbmtzW3IudGFnXT17aHJlZjpyLmhyZWYsdGl0bGU6ci50aXRsZX0pO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIudGFibGUodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5saGVhZGluZyh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihpPXQsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2spe2xldCBzPTEvMDtjb25zdCBhPXQuc2xpY2UoMSk7bGV0IHU7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGM9Pnt1PWMuY2FsbCh7bGV4ZXI6dGhpc30sYSksdHlwZW9mIHU9PSJudW1iZXIiJiZ1Pj0wJiYocz1NYXRoLm1pbihzLHUpKX0pLHM8MS8wJiZzPj0wJiYoaT10LnN1YnN0cmluZygwLHMrMSkpfWlmKHRoaXMuc3RhdGUudG9wJiYocj10aGlzLnRva2VuaXplci5wYXJhZ3JhcGgoaSkpKXtvPW5bbi5sZW5ndGgtMV0sbCYmby50eXBlPT09InBhcmFncmFwaCI/KG8ucmF3Kz1gCmArci5yYXcsby50ZXh0Kz1gCmArci50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9by50ZXh0KTpuLnB1c2gociksbD1pLmxlbmd0aCE9PXQubGVuZ3RoLHQ9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLnRleHQodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxvPW5bbi5sZW5ndGgtMV0sbyYmby50eXBlPT09InRleHQiPyhvLnJhdys9YApgK3IucmF3LG8udGV4dCs9YApgK3IudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPW8udGV4dCk6bi5wdXNoKHIpO2NvbnRpbnVlfWlmKHQpe2NvbnN0IHM9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIit0LmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihzKTticmVha31lbHNlIHRocm93IG5ldyBFcnJvcihzKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEwLG59aW5saW5lKHQsbj1bXSl7cmV0dXJuIHRoaXMuaW5saW5lUXVldWUucHVzaCh7c3JjOnQsdG9rZW5zOm59KSxufWlubGluZVRva2Vucyh0LG49W10pe2xldCByLG8saSxsPXQscyxhLHU7aWYodGhpcy50b2tlbnMubGlua3Mpe2NvbnN0IGM9T2JqZWN0LmtleXModGhpcy50b2tlbnMubGlua3MpO2lmKGMubGVuZ3RoPjApZm9yKDsocz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKGwpKSE9bnVsbDspYy5pbmNsdWRlcyhzWzBdLnNsaWNlKHNbMF0ubGFzdEluZGV4T2YoIlsiKSsxLC0xKSkmJihsPWwuc2xpY2UoMCxzLmluZGV4KSsiWyIrImEiLnJlcGVhdChzWzBdLmxlbmd0aC0yKSsiXSIrbC5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5sYXN0SW5kZXgpKX1mb3IoOyhzPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyhsKSkhPW51bGw7KWw9bC5zbGljZSgwLHMuaW5kZXgpKyJbIisiYSIucmVwZWF0KHNbMF0ubGVuZ3RoLTIpKyJdIitsLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtmb3IoOyhzPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5leGVjKGwpKSE9bnVsbDspbD1sLnNsaWNlKDAscy5pbmRleCkrIisrIitsLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO2Zvcig7dDspaWYoYXx8KHU9IiIpLGE9ITEsISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUuc29tZShjPT4ocj1jLmNhbGwoe2xleGVyOnRoaXN9LHQsbikpPyh0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpLCEwKTohMSkpKXtpZihyPXRoaXMudG9rZW5pemVyLmVzY2FwZSh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLnRhZyh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG89bltuLmxlbmd0aC0xXSxvJiZyLnR5cGU9PT0idGV4dCImJm8udHlwZT09PSJ0ZXh0Ij8oby5yYXcrPXIucmF3LG8udGV4dCs9ci50ZXh0KTpuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5saW5rKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIucmVmbGluayh0LHRoaXMudG9rZW5zLmxpbmtzKSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG89bltuLmxlbmd0aC0xXSxvJiZyLnR5cGU9PT0idGV4dCImJm8udHlwZT09PSJ0ZXh0Ij8oby5yYXcrPXIucmF3LG8udGV4dCs9ci50ZXh0KTpuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5lbVN0cm9uZyh0LGwsdSkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5jb2Rlc3Bhbih0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmJyKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuZGVsKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYoIXRoaXMuc3RhdGUuaW5MaW5rJiYocj10aGlzLnRva2VuaXplci51cmwodCkpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKGk9dCx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUpe2xldCBjPTEvMDtjb25zdCBkPXQuc2xpY2UoMSk7bGV0IGY7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUuZm9yRWFjaChoPT57Zj1oLmNhbGwoe2xleGVyOnRoaXN9LGQpLHR5cGVvZiBmPT0ibnVtYmVyIiYmZj49MCYmKGM9TWF0aC5taW4oYyxmKSl9KSxjPDEvMCYmYz49MCYmKGk9dC5zdWJzdHJpbmcoMCxjKzEpKX1pZihyPXRoaXMudG9rZW5pemVyLmlubGluZVRleHQoaSkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxyLnJhdy5zbGljZSgtMSkhPT0iXyImJih1PXIucmF3LnNsaWNlKC0xKSksYT0hMCxvPW5bbi5sZW5ndGgtMV0sbyYmby50eXBlPT09InRleHQiPyhvLnJhdys9ci5yYXcsby50ZXh0Kz1yLnRleHQpOm4ucHVzaChyKTtjb250aW51ZX1pZih0KXtjb25zdCBjPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrdC5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IoYyk7YnJlYWt9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYyl9fXJldHVybiBufX1jbGFzcyBSY3tjb25zdHJ1Y3Rvcih0KXtVZSh0aGlzLCJvcHRpb25zIik7dGhpcy5vcHRpb25zPXR8fFJpfWNvZGUodCxuLHIpe3ZhciBpO2NvbnN0IG89KGk9KG58fCIiKS5tYXRjaCgvXlxTKi8pKT09bnVsbD92b2lkIDA6aVswXTtyZXR1cm4gdD10LnJlcGxhY2UoL1xuJC8sIiIpK2AKYCxvPyc8cHJlPjxjb2RlIGNsYXNzPSJsYW5ndWFnZS0nK19uKG8pKyciPicrKHI/dDpfbih0LCEwKSkrYDwvY29kZT48L3ByZT4KYDoiPHByZT48Y29kZT4iKyhyP3Q6X24odCwhMCkpK2A8L2NvZGU+PC9wcmU+CmB9YmxvY2txdW90ZSh0KXtyZXR1cm5gPGJsb2NrcXVvdGU+CiR7dH08L2Jsb2NrcXVvdGU+CmB9aHRtbCh0LG4pe3JldHVybiB0fWhlYWRpbmcodCxuLHIpe3JldHVybmA8aCR7bn0+JHt0fTwvaCR7bn0+CmB9aHIoKXtyZXR1cm5gPGhyPgpgfWxpc3QodCxuLHIpe2NvbnN0IG89bj8ib2wiOiJ1bCIsaT1uJiZyIT09MT8nIHN0YXJ0PSInK3IrJyInOiIiO3JldHVybiI8IitvK2krYD4KYCt0KyI8LyIrbytgPgpgfWxpc3RpdGVtKHQsbixyKXtyZXR1cm5gPGxpPiR7dH08L2xpPgpgfWNoZWNrYm94KHQpe3JldHVybiI8aW5wdXQgIisodD8nY2hlY2tlZD0iIiAnOiIiKSsnZGlzYWJsZWQ9IiIgdHlwZT0iY2hlY2tib3giPid9cGFyYWdyYXBoKHQpe3JldHVybmA8cD4ke3R9PC9wPgpgfXRhYmxlKHQsbil7cmV0dXJuIG4mJihuPWA8dGJvZHk+JHtufTwvdGJvZHk+YCksYDx0YWJsZT4KPHRoZWFkPgpgK3QrYDwvdGhlYWQ+CmArbitgPC90YWJsZT4KYH10YWJsZXJvdyh0KXtyZXR1cm5gPHRyPgoke3R9PC90cj4KYH10YWJsZWNlbGwodCxuKXtjb25zdCByPW4uaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4obi5hbGlnbj9gPCR7cn0gYWxpZ249IiR7bi5hbGlnbn0iPmA6YDwke3J9PmApK3QrYDwvJHtyfT4KYH1zdHJvbmcodCl7cmV0dXJuYDxzdHJvbmc+JHt0fTwvc3Ryb25nPmB9ZW0odCl7cmV0dXJuYDxlbT4ke3R9PC9lbT5gfWNvZGVzcGFuKHQpe3JldHVybmA8Y29kZT4ke3R9PC9jb2RlPmB9YnIoKXtyZXR1cm4iPGJyPiJ9ZGVsKHQpe3JldHVybmA8ZGVsPiR7dH08L2RlbD5gfWxpbmsodCxuLHIpe2NvbnN0IG89U3kodCk7aWYobz09PW51bGwpcmV0dXJuIHI7dD1vO2xldCBpPSc8YSBocmVmPSInK3QrJyInO3JldHVybiBuJiYoaSs9JyB0aXRsZT0iJytuKyciJyksaSs9Ij4iK3IrIjwvYT4iLGl9aW1hZ2UodCxuLHIpe2NvbnN0IG89U3kodCk7aWYobz09PW51bGwpcmV0dXJuIHI7dD1vO2xldCBpPWA8aW1nIHNyYz0iJHt0fSIgYWx0PSIke3J9ImA7cmV0dXJuIG4mJihpKz1gIHRpdGxlPSIke259ImApLGkrPSI+IixpfXRleHQodCl7cmV0dXJuIHR9fWNsYXNzIEtne3N0cm9uZyh0KXtyZXR1cm4gdH1lbSh0KXtyZXR1cm4gdH1jb2Rlc3Bhbih0KXtyZXR1cm4gdH1kZWwodCl7cmV0dXJuIHR9aHRtbCh0KXtyZXR1cm4gdH10ZXh0KHQpe3JldHVybiB0fWxpbmsodCxuLHIpe3JldHVybiIiK3J9aW1hZ2UodCxuLHIpe3JldHVybiIiK3J9YnIoKXtyZXR1cm4iIn19Y2xhc3Mgd3J7Y29uc3RydWN0b3IodCl7VWUodGhpcywib3B0aW9ucyIpO1VlKHRoaXMsInJlbmRlcmVyIik7VWUodGhpcywidGV4dFJlbmRlcmVyIik7dGhpcy5vcHRpb25zPXR8fFJpLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBSYyx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRlcmVyPW5ldyBLZ31zdGF0aWMgcGFyc2UodCxuKXtyZXR1cm4gbmV3IHdyKG4pLnBhcnNlKHQpfXN0YXRpYyBwYXJzZUlubGluZSh0LG4pe3JldHVybiBuZXcgd3IobikucGFyc2VJbmxpbmUodCl9cGFyc2UodCxuPSEwKXtsZXQgcj0iIjtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Y29uc3QgaT10W29dO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tpLnR5cGVdKXtjb25zdCBsPWkscz10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbbC50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sbCk7aWYocyE9PSExfHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyhsLnR5cGUpKXtyKz1zfHwiIjtjb250aW51ZX19c3dpdGNoKGkudHlwZSl7Y2FzZSJzcGFjZSI6Y29udGludWU7Y2FzZSJociI6e3IrPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZX1jYXNlImhlYWRpbmciOntjb25zdCBsPWk7cis9dGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMucGFyc2VJbmxpbmUobC50b2tlbnMpLGwuZGVwdGgsS04odGhpcy5wYXJzZUlubGluZShsLnRva2Vucyx0aGlzLnRleHRSZW5kZXJlcikpKTtjb250aW51ZX1jYXNlImNvZGUiOntjb25zdCBsPWk7cis9dGhpcy5yZW5kZXJlci5jb2RlKGwudGV4dCxsLmxhbmcsISFsLmVzY2FwZWQpO2NvbnRpbnVlfWNhc2UidGFibGUiOntjb25zdCBsPWk7bGV0IHM9IiIsYT0iIjtmb3IobGV0IGM9MDtjPGwuaGVhZGVyLmxlbmd0aDtjKyspYSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShsLmhlYWRlcltjXS50b2tlbnMpLHtoZWFkZXI6ITAsYWxpZ246bC5hbGlnbltjXX0pO3MrPXRoaXMucmVuZGVyZXIudGFibGVyb3coYSk7bGV0IHU9IiI7Zm9yKGxldCBjPTA7YzxsLnJvd3MubGVuZ3RoO2MrKyl7Y29uc3QgZD1sLnJvd3NbY107YT0iIjtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylhKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKGRbZl0udG9rZW5zKSx7aGVhZGVyOiExLGFsaWduOmwuYWxpZ25bZl19KTt1Kz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KGEpfXIrPXRoaXMucmVuZGVyZXIudGFibGUocyx1KTtjb250aW51ZX1jYXNlImJsb2NrcXVvdGUiOntjb25zdCBsPWkscz10aGlzLnBhcnNlKGwudG9rZW5zKTtyKz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUocyk7Y29udGludWV9Y2FzZSJsaXN0Ijp7Y29uc3QgbD1pLHM9bC5vcmRlcmVkLGE9bC5zdGFydCx1PWwubG9vc2U7bGV0IGM9IiI7Zm9yKGxldCBkPTA7ZDxsLml0ZW1zLmxlbmd0aDtkKyspe2NvbnN0IGY9bC5pdGVtc1tkXSxoPWYuY2hlY2tlZCxtPWYudGFzaztsZXQgZz0iIjtpZihmLnRhc2spe2NvbnN0IF89dGhpcy5yZW5kZXJlci5jaGVja2JveCghIWgpO3U/Zi50b2tlbnMubGVuZ3RoPjAmJmYudG9rZW5zWzBdLnR5cGU9PT0icGFyYWdyYXBoIj8oZi50b2tlbnNbMF0udGV4dD1fKyIgIitmLnRva2Vuc1swXS50ZXh0LGYudG9rZW5zWzBdLnRva2VucyYmZi50b2tlbnNbMF0udG9rZW5zLmxlbmd0aD4wJiZmLnRva2Vuc1swXS50b2tlbnNbMF0udHlwZT09PSJ0ZXh0IiYmKGYudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PV8rIiAiK2YudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0KSk6Zi50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4dCIsdGV4dDpfKyIgIn0pOmcrPV8rIiAifWcrPXRoaXMucGFyc2UoZi50b2tlbnMsdSksYys9dGhpcy5yZW5kZXJlci5saXN0aXRlbShnLG0sISFoKX1yKz10aGlzLnJlbmRlcmVyLmxpc3QoYyxzLGEpO2NvbnRpbnVlfWNhc2UiaHRtbCI6e2NvbnN0IGw9aTtyKz10aGlzLnJlbmRlcmVyLmh0bWwobC50ZXh0LGwuYmxvY2spO2NvbnRpbnVlfWNhc2UicGFyYWdyYXBoIjp7Y29uc3QgbD1pO3IrPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VJbmxpbmUobC50b2tlbnMpKTtjb250aW51ZX1jYXNlInRleHQiOntsZXQgbD1pLHM9bC50b2tlbnM/dGhpcy5wYXJzZUlubGluZShsLnRva2Vucyk6bC50ZXh0O2Zvcig7bysxPHQubGVuZ3RoJiZ0W28rMV0udHlwZT09PSJ0ZXh0IjspbD10Wysrb10scys9YApgKyhsLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zKTpsLnRleHQpO3IrPW4/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgocyk6cztjb250aW51ZX1kZWZhdWx0Ontjb25zdCBsPSdUb2tlbiB3aXRoICInK2kudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKGwpLCIiO3Rocm93IG5ldyBFcnJvcihsKX19fXJldHVybiByfXBhcnNlSW5saW5lKHQsbil7bj1ufHx0aGlzLnJlbmRlcmVyO2xldCByPSIiO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtjb25zdCBpPXRbb107aWYodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2kudHlwZV0pe2NvbnN0IGw9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2kudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGkpO2lmKGwhPT0hMXx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhpLnR5cGUpKXtyKz1sfHwiIjtjb250aW51ZX19c3dpdGNoKGkudHlwZSl7Y2FzZSJlc2NhcGUiOntjb25zdCBsPWk7cis9bi50ZXh0KGwudGV4dCk7YnJlYWt9Y2FzZSJodG1sIjp7Y29uc3QgbD1pO3IrPW4uaHRtbChsLnRleHQpO2JyZWFrfWNhc2UibGluayI6e2NvbnN0IGw9aTtyKz1uLmxpbmsobC5ocmVmLGwudGl0bGUsdGhpcy5wYXJzZUlubGluZShsLnRva2VucyxuKSk7YnJlYWt9Y2FzZSJpbWFnZSI6e2NvbnN0IGw9aTtyKz1uLmltYWdlKGwuaHJlZixsLnRpdGxlLGwudGV4dCk7YnJlYWt9Y2FzZSJzdHJvbmciOntjb25zdCBsPWk7cis9bi5zdHJvbmcodGhpcy5wYXJzZUlubGluZShsLnRva2VucyxuKSk7YnJlYWt9Y2FzZSJlbSI6e2NvbnN0IGw9aTtyKz1uLmVtKHRoaXMucGFyc2VJbmxpbmUobC50b2tlbnMsbikpO2JyZWFrfWNhc2UiY29kZXNwYW4iOntjb25zdCBsPWk7cis9bi5jb2Rlc3BhbihsLnRleHQpO2JyZWFrfWNhc2UiYnIiOntyKz1uLmJyKCk7YnJlYWt9Y2FzZSJkZWwiOntjb25zdCBsPWk7cis9bi5kZWwodGhpcy5wYXJzZUlubGluZShsLnRva2VucyxuKSk7YnJlYWt9Y2FzZSJ0ZXh0Ijp7Y29uc3QgbD1pO3IrPW4udGV4dChsLnRleHQpO2JyZWFrfWRlZmF1bHQ6e2NvbnN0IGw9J1Rva2VuIHdpdGggIicraS50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IobCksIiI7dGhyb3cgbmV3IEVycm9yKGwpfX19cmV0dXJuIHJ9fWNsYXNzIFVze2NvbnN0cnVjdG9yKHQpe1VlKHRoaXMsIm9wdGlvbnMiKTt0aGlzLm9wdGlvbnM9dHx8Uml9cHJlcHJvY2Vzcyh0KXtyZXR1cm4gdH1wb3N0cHJvY2Vzcyh0KXtyZXR1cm4gdH19VWUoVXMsInBhc3NUaHJvdWdoSG9va3MiLG5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiXSkpO3ZhciBNYSxHaCxlZCxkXztjbGFzcyBRTntjb25zdHJ1Y3RvciguLi50KXtKZCh0aGlzLE1hKTtKZCh0aGlzLGVkKTtVZSh0aGlzLCJkZWZhdWx0cyIsVmcoKSk7VWUodGhpcywib3B0aW9ucyIsdGhpcy5zZXRPcHRpb25zKTtVZSh0aGlzLCJwYXJzZSIsZXUodGhpcyxNYSxHaCkuY2FsbCh0aGlzLHhyLmxleCx3ci5wYXJzZSkpO1VlKHRoaXMsInBhcnNlSW5saW5lIixldSh0aGlzLE1hLEdoKS5jYWxsKHRoaXMseHIubGV4SW5saW5lLHdyLnBhcnNlSW5saW5lKSk7VWUodGhpcywiUGFyc2VyIix3cik7VWUodGhpcywiUmVuZGVyZXIiLFJjKTtVZSh0aGlzLCJUZXh0UmVuZGVyZXIiLEtnKTtVZSh0aGlzLCJMZXhlciIseHIpO1VlKHRoaXMsIlRva2VuaXplciIsTmMpO1VlKHRoaXMsIkhvb2tzIixVcyk7dGhpcy51c2UoLi4udCl9d2Fsa1Rva2Vucyh0LG4pe3ZhciBvLGk7bGV0IHI9W107Zm9yKGNvbnN0IGwgb2YgdClzd2l0Y2gocj1yLmNvbmNhdChuLmNhbGwodGhpcyxsKSksbC50eXBlKXtjYXNlInRhYmxlIjp7Y29uc3Qgcz1sO2Zvcihjb25zdCBhIG9mIHMuaGVhZGVyKXI9ci5jb25jYXQodGhpcy53YWxrVG9rZW5zKGEudG9rZW5zLG4pKTtmb3IoY29uc3QgYSBvZiBzLnJvd3MpZm9yKGNvbnN0IHUgb2YgYSlyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2Vucyh1LnRva2VucyxuKSk7YnJlYWt9Y2FzZSJsaXN0Ijp7Y29uc3Qgcz1sO3I9ci5jb25jYXQodGhpcy53YWxrVG9rZW5zKHMuaXRlbXMsbikpO2JyZWFrfWRlZmF1bHQ6e2NvbnN0IHM9bDsoaT0obz10aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMpPT1udWxsP3ZvaWQgMDpvLmNoaWxkVG9rZW5zKSE9bnVsbCYmaVtzLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1tzLnR5cGVdLmZvckVhY2goYT0+e3I9ci5jb25jYXQodGhpcy53YWxrVG9rZW5zKHNbYV0sbikpfSk6cy50b2tlbnMmJihyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhzLnRva2VucyxuKSkpfX1yZXR1cm4gcn11c2UoLi4udCl7Y29uc3Qgbj10aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnN8fHtyZW5kZXJlcnM6e30sY2hpbGRUb2tlbnM6e319O3JldHVybiB0LmZvckVhY2gocj0+e2NvbnN0IG89ey4uLnJ9O2lmKG8uYXN5bmM9dGhpcy5kZWZhdWx0cy5hc3luY3x8by5hc3luY3x8ITEsci5leHRlbnNpb25zJiYoci5leHRlbnNpb25zLmZvckVhY2goaT0+e2lmKCFpLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbmFtZSByZXF1aXJlZCIpO2lmKCJyZW5kZXJlciJpbiBpKXtjb25zdCBsPW4ucmVuZGVyZXJzW2kubmFtZV07bD9uLnJlbmRlcmVyc1tpLm5hbWVdPWZ1bmN0aW9uKC4uLnMpe2xldCBhPWkucmVuZGVyZXIuYXBwbHkodGhpcyxzKTtyZXR1cm4gYT09PSExJiYoYT1sLmFwcGx5KHRoaXMscykpLGF9Om4ucmVuZGVyZXJzW2kubmFtZV09aS5yZW5kZXJlcn1pZigidG9rZW5pemVyImluIGkpe2lmKCFpLmxldmVsfHxpLmxldmVsIT09ImJsb2NrIiYmaS5sZXZlbCE9PSJpbmxpbmUiKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2NvbnN0IGw9bltpLmxldmVsXTtsP2wudW5zaGlmdChpLnRva2VuaXplcik6bltpLmxldmVsXT1baS50b2tlbml6ZXJdLGkuc3RhcnQmJihpLmxldmVsPT09ImJsb2NrIj9uLnN0YXJ0QmxvY2s/bi5zdGFydEJsb2NrLnB1c2goaS5zdGFydCk6bi5zdGFydEJsb2NrPVtpLnN0YXJ0XTppLmxldmVsPT09ImlubGluZSImJihuLnN0YXJ0SW5saW5lP24uc3RhcnRJbmxpbmUucHVzaChpLnN0YXJ0KTpuLnN0YXJ0SW5saW5lPVtpLnN0YXJ0XSkpfSJjaGlsZFRva2VucyJpbiBpJiZpLmNoaWxkVG9rZW5zJiYobi5jaGlsZFRva2Vuc1tpLm5hbWVdPWkuY2hpbGRUb2tlbnMpfSksby5leHRlbnNpb25zPW4pLHIucmVuZGVyZXIpe2NvbnN0IGk9dGhpcy5kZWZhdWx0cy5yZW5kZXJlcnx8bmV3IFJjKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25zdCBsIGluIHIucmVuZGVyZXIpe2NvbnN0IHM9ci5yZW5kZXJlcltsXSxhPWwsdT1pW2FdO2lbYV09KC4uLmMpPT57bGV0IGQ9cy5hcHBseShpLGMpO3JldHVybiBkPT09ITEmJihkPXUuYXBwbHkoaSxjKSksZHx8IiJ9fW8ucmVuZGVyZXI9aX1pZihyLnRva2VuaXplcil7Y29uc3QgaT10aGlzLmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IE5jKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25zdCBsIGluIHIudG9rZW5pemVyKXtjb25zdCBzPXIudG9rZW5pemVyW2xdLGE9bCx1PWlbYV07aVthXT0oLi4uYyk9PntsZXQgZD1zLmFwcGx5KGksYyk7cmV0dXJuIGQ9PT0hMSYmKGQ9dS5hcHBseShpLGMpKSxkfX1vLnRva2VuaXplcj1pfWlmKHIuaG9va3Mpe2NvbnN0IGk9dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IFVzO2Zvcihjb25zdCBsIGluIHIuaG9va3Mpe2NvbnN0IHM9ci5ob29rc1tsXSxhPWwsdT1pW2FdO1VzLnBhc3NUaHJvdWdoSG9va3MuaGFzKGwpP2lbYV09Yz0+e2lmKHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShzLmNhbGwoaSxjKSkudGhlbihmPT51LmNhbGwoaSxmKSk7Y29uc3QgZD1zLmNhbGwoaSxjKTtyZXR1cm4gdS5jYWxsKGksZCl9OmlbYV09KC4uLmMpPT57bGV0IGQ9cy5hcHBseShpLGMpO3JldHVybiBkPT09ITEmJihkPXUuYXBwbHkoaSxjKSksZH19by5ob29rcz1pfWlmKHIud2Fsa1Rva2Vucyl7Y29uc3QgaT10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnMsbD1yLndhbGtUb2tlbnM7by53YWxrVG9rZW5zPWZ1bmN0aW9uKHMpe2xldCBhPVtdO3JldHVybiBhLnB1c2gobC5jYWxsKHRoaXMscykpLGkmJihhPWEuY29uY2F0KGkuY2FsbCh0aGlzLHMpKSksYX19dGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi5vfX0pLHRoaXN9c2V0T3B0aW9ucyh0KXtyZXR1cm4gdGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi50fSx0aGlzfWxleGVyKHQsbil7cmV0dXJuIHhyLmxleCh0LG4/P3RoaXMuZGVmYXVsdHMpfXBhcnNlcih0LG4pe3JldHVybiB3ci5wYXJzZSh0LG4/P3RoaXMuZGVmYXVsdHMpfX1NYT1uZXcgV2Vha1NldCxHaD1mdW5jdGlvbih0LG4pe3JldHVybihyLG8pPT57Y29uc3QgaT17Li4ub30sbD17Li4udGhpcy5kZWZhdWx0cywuLi5pfTt0aGlzLmRlZmF1bHRzLmFzeW5jPT09ITAmJmkuYXN5bmM9PT0hMSYmKGwuc2lsZW50fHxjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBUaGUgYXN5bmMgb3B0aW9uIHdhcyBzZXQgdG8gdHJ1ZSBieSBhbiBleHRlbnNpb24uIFRoZSBhc3luYzogZmFsc2Ugb3B0aW9uIHNlbnQgdG8gcGFyc2Ugd2lsbCBiZSBpZ25vcmVkLiIpLGwuYXN5bmM9ITApO2NvbnN0IHM9ZXUodGhpcyxlZCxkXykuY2FsbCh0aGlzLCEhbC5zaWxlbnQsISFsLmFzeW5jKTtpZih0eXBlb2Ygcj4idSJ8fHI9PT1udWxsKXJldHVybiBzKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCIpKTtpZih0eXBlb2YgciE9InN0cmluZyIpcmV0dXJuIHMobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgIitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocikrIiwgc3RyaW5nIGV4cGVjdGVkIikpO2lmKGwuaG9va3MmJihsLmhvb2tzLm9wdGlvbnM9bCksbC5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGwuaG9va3M/bC5ob29rcy5wcmVwcm9jZXNzKHIpOnIpLnRoZW4oYT0+dChhLGwpKS50aGVuKGE9Pmwud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoYSxsLndhbGtUb2tlbnMpKS50aGVuKCgpPT5hKTphKS50aGVuKGE9Pm4oYSxsKSkudGhlbihhPT5sLmhvb2tzP2wuaG9va3MucG9zdHByb2Nlc3MoYSk6YSkuY2F0Y2gocyk7dHJ5e2wuaG9va3MmJihyPWwuaG9va3MucHJlcHJvY2VzcyhyKSk7Y29uc3QgYT10KHIsbCk7bC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoYSxsLndhbGtUb2tlbnMpO2xldCB1PW4oYSxsKTtyZXR1cm4gbC5ob29rcyYmKHU9bC5ob29rcy5wb3N0cHJvY2Vzcyh1KSksdX1jYXRjaChhKXtyZXR1cm4gcyhhKX19fSxlZD1uZXcgV2Vha1NldCxkXz1mdW5jdGlvbih0LG4pe3JldHVybiByPT57aWYoci5tZXNzYWdlKz1gClBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLmAsdCl7Y29uc3Qgbz0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+IitfbihyLm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iO3JldHVybiBuP1Byb21pc2UucmVzb2x2ZShvKTpvfWlmKG4pcmV0dXJuIFByb21pc2UucmVqZWN0KHIpO3Rocm93IHJ9fTtjb25zdCB5aT1uZXcgUU47ZnVuY3Rpb24gRGUoZSx0KXtyZXR1cm4geWkucGFyc2UoZSx0KX1EZS5vcHRpb25zPURlLnNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHlpLnNldE9wdGlvbnMoZSksRGUuZGVmYXVsdHM9eWkuZGVmYXVsdHMsYV8oRGUuZGVmYXVsdHMpLERlfTtEZS5nZXREZWZhdWx0cz1WZztEZS5kZWZhdWx0cz1SaTtEZS51c2U9ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIHlpLnVzZSguLi5lKSxEZS5kZWZhdWx0cz15aS5kZWZhdWx0cyxhXyhEZS5kZWZhdWx0cyksRGV9O0RlLndhbGtUb2tlbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4geWkud2Fsa1Rva2VucyhlLHQpfTtEZS5wYXJzZUlubGluZT15aS5wYXJzZUlubGluZTtEZS5QYXJzZXI9d3I7RGUucGFyc2VyPXdyLnBhcnNlO0RlLlJlbmRlcmVyPVJjO0RlLlRleHRSZW5kZXJlcj1LZztEZS5MZXhlcj14cjtEZS5sZXhlcj14ci5sZXg7RGUuVG9rZW5pemVyPU5jO0RlLkhvb2tzPVVzO0RlLnBhcnNlPURlO0RlLm9wdGlvbnM7RGUuc2V0T3B0aW9ucztEZS51c2U7RGUud2Fsa1Rva2VucztEZS5wYXJzZUlubGluZTt3ci5wYXJzZTtjb25zdCBKTj14ci5sZXg7ZnVuY3Rpb24geGEoKXt4YT1mdW5jdGlvbigpe3JldHVybiB0fTt2YXIgZSx0PXt9LG49T2JqZWN0LnByb3RvdHlwZSxyPW4uaGFzT3duUHJvcGVydHksbz1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKEMsJCxFKXtDWyRdPUUudmFsdWV9LGk9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIj9TeW1ib2w6e30sbD1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGE9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHUoQywkLEUpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoQywkLHt2YWx1ZTpFLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksQ1skXX10cnl7dSh7fSwiIil9Y2F0Y2h7dT1mdW5jdGlvbigkLEUsTyl7cmV0dXJuICRbRV09T319ZnVuY3Rpb24gYyhDLCQsRSxPKXt2YXIgUj0kJiYkLnByb3RvdHlwZSBpbnN0YW5jZW9mIHY/JDp2LEY9T2JqZWN0LmNyZWF0ZShSLnByb3RvdHlwZSksSD1uZXcgVihPfHxbXSk7cmV0dXJuIG8oRiwiX2ludm9rZSIse3ZhbHVlOk0oQyxFLEgpfSksRn1mdW5jdGlvbiBkKEMsJCxFKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOkMuY2FsbCgkLEUpfX1jYXRjaChPKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzpPfX19dC53cmFwPWM7dmFyIGY9InN1c3BlbmRlZFN0YXJ0IixoPSJzdXNwZW5kZWRZaWVsZCIsbT0iZXhlY3V0aW5nIixnPSJjb21wbGV0ZWQiLF89e307ZnVuY3Rpb24gdigpe31mdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIHgoKXt9dmFyIFM9e307dShTLGwsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pO3ZhciBrPU9iamVjdC5nZXRQcm90b3R5cGVPZixUPWsmJmsoayhZKFtdKSkpO1QmJlQhPT1uJiZyLmNhbGwoVCxsKSYmKFM9VCk7dmFyIGI9eC5wcm90b3R5cGU9di5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTKTtmdW5jdGlvbiBOKEMpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaChmdW5jdGlvbigkKXt1KEMsJCxmdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5faW52b2tlKCQsRSl9KX0pfWZ1bmN0aW9uIEQoQywkKXtmdW5jdGlvbiBFKFIsRixILGFlKXt2YXIgb2U9ZChDW1JdLEMsRik7aWYob2UudHlwZSE9PSJ0aHJvdyIpe3ZhciAkZT1vZS5hcmcsX2U9JGUudmFsdWU7cmV0dXJuIF9lJiZ0eXBlb2YgX2U9PSJvYmplY3QiJiZyLmNhbGwoX2UsIl9fYXdhaXQiKT8kLnJlc29sdmUoX2UuX19hd2FpdCkudGhlbihmdW5jdGlvbihRKXtFKCJuZXh0IixRLEgsYWUpfSxmdW5jdGlvbihRKXtFKCJ0aHJvdyIsUSxILGFlKX0pOiQucmVzb2x2ZShfZSkudGhlbihmdW5jdGlvbihRKXskZS52YWx1ZT1RLEgoJGUpfSxmdW5jdGlvbihRKXtyZXR1cm4gRSgidGhyb3ciLFEsSCxhZSl9KX1hZShvZS5hcmcpfXZhciBPO28odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKFIsRil7ZnVuY3Rpb24gSCgpe3JldHVybiBuZXcgJChmdW5jdGlvbihhZSxvZSl7RShSLEYsYWUsb2UpfSl9cmV0dXJuIE89Tz9PLnRoZW4oSCxIKTpIKCl9fSl9ZnVuY3Rpb24gTShDLCQsRSl7dmFyIE89ZjtyZXR1cm4gZnVuY3Rpb24oUixGKXtpZihPPT09bSl0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZihPPT09Zyl7aWYoUj09PSJ0aHJvdyIpdGhyb3cgRjtyZXR1cm57dmFsdWU6ZSxkb25lOiEwfX1mb3IoRS5tZXRob2Q9UixFLmFyZz1GOzspe3ZhciBIPUUuZGVsZWdhdGU7aWYoSCl7dmFyIGFlPWooSCxFKTtpZihhZSl7aWYoYWU9PT1fKWNvbnRpbnVlO3JldHVybiBhZX19aWYoRS5tZXRob2Q9PT0ibmV4dCIpRS5zZW50PUUuX3NlbnQ9RS5hcmc7ZWxzZSBpZihFLm1ldGhvZD09PSJ0aHJvdyIpe2lmKE89PT1mKXRocm93IE89ZyxFLmFyZztFLmRpc3BhdGNoRXhjZXB0aW9uKEUuYXJnKX1lbHNlIEUubWV0aG9kPT09InJldHVybiImJkUuYWJydXB0KCJyZXR1cm4iLEUuYXJnKTtPPW07dmFyIG9lPWQoQywkLEUpO2lmKG9lLnR5cGU9PT0ibm9ybWFsIil7aWYoTz1FLmRvbmU/ZzpoLG9lLmFyZz09PV8pY29udGludWU7cmV0dXJue3ZhbHVlOm9lLmFyZyxkb25lOkUuZG9uZX19b2UudHlwZT09PSJ0aHJvdyImJihPPWcsRS5tZXRob2Q9InRocm93IixFLmFyZz1vZS5hcmcpfX19ZnVuY3Rpb24gaihDLCQpe3ZhciBFPSQubWV0aG9kLE89Qy5pdGVyYXRvcltFXTtpZihPPT09ZSlyZXR1cm4gJC5kZWxlZ2F0ZT1udWxsLEU9PT0idGhyb3ciJiZDLml0ZXJhdG9yLnJldHVybiYmKCQubWV0aG9kPSJyZXR1cm4iLCQuYXJnPWUsaihDLCQpLCQubWV0aG9kPT09InRocm93Iil8fEUhPT0icmV0dXJuIiYmKCQubWV0aG9kPSJ0aHJvdyIsJC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIitFKyInIG1ldGhvZCIpKSxfO3ZhciBSPWQoTyxDLml0ZXJhdG9yLCQuYXJnKTtpZihSLnR5cGU9PT0idGhyb3ciKXJldHVybiAkLm1ldGhvZD0idGhyb3ciLCQuYXJnPVIuYXJnLCQuZGVsZWdhdGU9bnVsbCxfO3ZhciBGPVIuYXJnO3JldHVybiBGP0YuZG9uZT8oJFtDLnJlc3VsdE5hbWVdPUYudmFsdWUsJC5uZXh0PUMubmV4dExvYywkLm1ldGhvZCE9PSJyZXR1cm4iJiYoJC5tZXRob2Q9Im5leHQiLCQuYXJnPWUpLCQuZGVsZWdhdGU9bnVsbCxfKTpGOigkLm1ldGhvZD0idGhyb3ciLCQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksJC5kZWxlZ2F0ZT1udWxsLF8pfWZ1bmN0aW9uIEIoQyl7dmFyICQ9e3RyeUxvYzpDWzBdfTsxIGluIEMmJigkLmNhdGNoTG9jPUNbMV0pLDIgaW4gQyYmKCQuZmluYWxseUxvYz1DWzJdLCQuYWZ0ZXJMb2M9Q1szXSksdGhpcy50cnlFbnRyaWVzLnB1c2goJCl9ZnVuY3Rpb24gcmUoQyl7dmFyICQ9Qy5jb21wbGV0aW9ufHx7fTskLnR5cGU9Im5vcm1hbCIsZGVsZXRlICQuYXJnLEMuY29tcGxldGlvbj0kfWZ1bmN0aW9uIFYoQyl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLEMuZm9yRWFjaChCLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFkoQyl7aWYoQ3x8Qz09PSIiKXt2YXIgJD1DW2xdO2lmKCQpcmV0dXJuICQuY2FsbChDKTtpZih0eXBlb2YgQy5uZXh0PT0iZnVuY3Rpb24iKXJldHVybiBDO2lmKCFpc05hTihDLmxlbmd0aCkpe3ZhciBFPS0xLE89ZnVuY3Rpb24gUigpe2Zvcig7KytFPEMubGVuZ3RoOylpZihyLmNhbGwoQyxFKSlyZXR1cm4gUi52YWx1ZT1DW0VdLFIuZG9uZT0hMSxSO3JldHVybiBSLnZhbHVlPWUsUi5kb25lPSEwLFJ9O3JldHVybiBPLm5leHQ9T319dGhyb3cgbmV3IFR5cGVFcnJvcih0eXBlb2YgQysiIGlzIG5vdCBpdGVyYWJsZSIpfXJldHVybiB5LnByb3RvdHlwZT14LG8oYiwiY29uc3RydWN0b3IiLHt2YWx1ZTp4LGNvbmZpZ3VyYWJsZTohMH0pLG8oeCwiY29uc3RydWN0b3IiLHt2YWx1ZTp5LGNvbmZpZ3VyYWJsZTohMH0pLHkuZGlzcGxheU5hbWU9dSh4LGEsIkdlbmVyYXRvckZ1bmN0aW9uIiksdC5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKEMpe3ZhciAkPXR5cGVvZiBDPT0iZnVuY3Rpb24iJiZDLmNvbnN0cnVjdG9yO3JldHVybiEhJCYmKCQ9PT15fHwoJC5kaXNwbGF5TmFtZXx8JC5uYW1lKT09PSJHZW5lcmF0b3JGdW5jdGlvbiIpfSx0Lm1hcms9ZnVuY3Rpb24oQyl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoQyx4KTooQy5fX3Byb3RvX189eCx1KEMsYSwiR2VuZXJhdG9yRnVuY3Rpb24iKSksQy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiKSxDfSx0LmF3cmFwPWZ1bmN0aW9uKEMpe3JldHVybntfX2F3YWl0OkN9fSxOKEQucHJvdG90eXBlKSx1KEQucHJvdG90eXBlLHMsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHQuQXN5bmNJdGVyYXRvcj1ELHQuYXN5bmM9ZnVuY3Rpb24oQywkLEUsTyxSKXtSPT09dm9pZCAwJiYoUj1Qcm9taXNlKTt2YXIgRj1uZXcgRChjKEMsJCxFLE8pLFIpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24oJCk/RjpGLm5leHQoKS50aGVuKGZ1bmN0aW9uKEgpe3JldHVybiBILmRvbmU/SC52YWx1ZTpGLm5leHQoKX0pfSxOKGIpLHUoYixhLCJHZW5lcmF0b3IiKSx1KGIsbCxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksdShiLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pLHQua2V5cz1mdW5jdGlvbihDKXt2YXIgJD1PYmplY3QoQyksRT1bXTtmb3IodmFyIE8gaW4gJClFLnB1c2goTyk7cmV0dXJuIEUucmV2ZXJzZSgpLGZ1bmN0aW9uIFIoKXtmb3IoO0UubGVuZ3RoOyl7dmFyIEY9RS5wb3AoKTtpZihGIGluICQpcmV0dXJuIFIudmFsdWU9RixSLmRvbmU9ITEsUn1yZXR1cm4gUi5kb25lPSEwLFJ9fSx0LnZhbHVlcz1ZLFYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpWLHJlc2V0OmZ1bmN0aW9uKEMpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PWUsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9ZSx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZSksIUMpZm9yKHZhciAkIGluIHRoaXMpJC5jaGFyQXQoMCk9PT0idCImJnIuY2FsbCh0aGlzLCQpJiYhaXNOYU4oKyQuc2xpY2UoMSkpJiYodGhpc1skXT1lKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgQz10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZihDLnR5cGU9PT0idGhyb3ciKXRocm93IEMuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKEMpe2lmKHRoaXMuZG9uZSl0aHJvdyBDO3ZhciAkPXRoaXM7ZnVuY3Rpb24gRShvZSwkZSl7cmV0dXJuIEYudHlwZT0idGhyb3ciLEYuYXJnPUMsJC5uZXh0PW9lLCRlJiYoJC5tZXRob2Q9Im5leHQiLCQuYXJnPWUpLCEhJGV9Zm9yKHZhciBPPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtPPj0wOy0tTyl7dmFyIFI9dGhpcy50cnlFbnRyaWVzW09dLEY9Ui5jb21wbGV0aW9uO2lmKFIudHJ5TG9jPT09InJvb3QiKXJldHVybiBFKCJlbmQiKTtpZihSLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgSD1yLmNhbGwoUiwiY2F0Y2hMb2MiKSxhZT1yLmNhbGwoUiwiZmluYWxseUxvYyIpO2lmKEgmJmFlKXtpZih0aGlzLnByZXY8Ui5jYXRjaExvYylyZXR1cm4gRShSLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8Ui5maW5hbGx5TG9jKXJldHVybiBFKFIuZmluYWxseUxvYyl9ZWxzZSBpZihIKXtpZih0aGlzLnByZXY8Ui5jYXRjaExvYylyZXR1cm4gRShSLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFhZSl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PFIuZmluYWxseUxvYylyZXR1cm4gRShSLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oQywkKXtmb3IodmFyIEU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO0U+PTA7LS1FKXt2YXIgTz10aGlzLnRyeUVudHJpZXNbRV07aWYoTy50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKE8sImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PE8uZmluYWxseUxvYyl7dmFyIFI9TzticmVha319UiYmKEM9PT0iYnJlYWsifHxDPT09ImNvbnRpbnVlIikmJlIudHJ5TG9jPD0kJiYkPD1SLmZpbmFsbHlMb2MmJihSPW51bGwpO3ZhciBGPVI/Ui5jb21wbGV0aW9uOnt9O3JldHVybiBGLnR5cGU9QyxGLmFyZz0kLFI/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9Ui5maW5hbGx5TG9jLF8pOnRoaXMuY29tcGxldGUoRil9LGNvbXBsZXRlOmZ1bmN0aW9uKEMsJCl7aWYoQy50eXBlPT09InRocm93Iil0aHJvdyBDLmFyZztyZXR1cm4gQy50eXBlPT09ImJyZWFrInx8Qy50eXBlPT09ImNvbnRpbnVlIj90aGlzLm5leHQ9Qy5hcmc6Qy50eXBlPT09InJldHVybiI/KHRoaXMucnZhbD10aGlzLmFyZz1DLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOkMudHlwZT09PSJub3JtYWwiJiYkJiYodGhpcy5uZXh0PSQpLF99LGZpbmlzaDpmdW5jdGlvbihDKXtmb3IodmFyICQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xOyQ+PTA7LS0kKXt2YXIgRT10aGlzLnRyeUVudHJpZXNbJF07aWYoRS5maW5hbGx5TG9jPT09QylyZXR1cm4gdGhpcy5jb21wbGV0ZShFLmNvbXBsZXRpb24sRS5hZnRlckxvYykscmUoRSksX319LGNhdGNoOmZ1bmN0aW9uKEMpe2Zvcih2YXIgJD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7JD49MDstLSQpe3ZhciBFPXRoaXMudHJ5RW50cmllc1skXTtpZihFLnRyeUxvYz09PUMpe3ZhciBPPUUuY29tcGxldGlvbjtpZihPLnR5cGU9PT0idGhyb3ciKXt2YXIgUj1PLmFyZztyZShFKX1yZXR1cm4gUn19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihDLCQsRSl7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlkoQykscmVzdWx0TmFtZTokLG5leHRMb2M6RX0sdGhpcy5tZXRob2Q9PT0ibmV4dCImJih0aGlzLmFyZz1lKSxffX0sdH1mdW5jdGlvbiBZaChlLHQpeyh0PT1udWxsfHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIEdnKGUsdCl7aWYoZSl7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBZaChlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihuPT09Ik9iamVjdCImJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksbj09PSJNYXAifHxuPT09IlNldCIpcmV0dXJuIEFycmF5LmZyb20oZSk7aWYobj09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gWWgoZSx0KX19ZnVuY3Rpb24gWk4oZSx0KXt2YXIgbj10eXBlb2YgU3ltYm9sPCJ1IiYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIW4pe2lmKEFycmF5LmlzQXJyYXkoZSl8fChuPUdnKGUpKXx8dCYmZSYmdHlwZW9mIGUubGVuZ3RoPT0ibnVtYmVyIil7biYmKGU9bik7dmFyIHI9MCxvPWZ1bmN0aW9uKCl7fTtyZXR1cm57czpvLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbcisrXX19LGU6ZnVuY3Rpb24oYSl7dGhyb3cgYX0sZjpvfX10aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgaT0hMCxsPSExLHM7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBhPW4ubmV4dCgpO3JldHVybiBpPWEuZG9uZSxhfSxlOmZ1bmN0aW9uKGEpe2w9ITAscz1hfSxmOmZ1bmN0aW9uKCl7dHJ5eyFpJiZuLnJldHVybiE9bnVsbCYmbi5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgc319fX1mdW5jdGlvbiBxTihlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKG4hPT12b2lkIDApe3ZhciByPW4uY2FsbChlLHR8fCJkZWZhdWx0Iik7aWYodHlwZW9mIHIhPSJvYmplY3QiKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKHQ9PT0ic3RyaW5nIj9TdHJpbmc6TnVtYmVyKShlKX1mdW5jdGlvbiBlMihlKXt2YXIgdD1xTihlLCJzdHJpbmciKTtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wiP3Q6U3RyaW5nKHQpfWZ1bmN0aW9uIFV0KGUsdCxuKXtyZXR1cm4gdD1lMih0KSx0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHQyKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9ZnVuY3Rpb24gbjIoZSx0KXt2YXIgbj1lPT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG4hPW51bGwpe3ZhciByLG8saSxsLHM9W10sYT0hMCx1PSExO3RyeXtpZihpPShuPW4uY2FsbChlKSkubmV4dCx0PT09MCl7aWYoT2JqZWN0KG4pIT09bilyZXR1cm47YT0hMX1lbHNlIGZvcig7IShhPShyPWkuY2FsbChuKSkuZG9uZSkmJihzLnB1c2goci52YWx1ZSkscy5sZW5ndGghPT10KTthPSEwKTt9Y2F0Y2goYyl7dT0hMCxvPWN9ZmluYWxseXt0cnl7aWYoIWEmJm4ucmV0dXJuIT1udWxsJiYobD1uLnJldHVybigpLE9iamVjdChsKSE9PWwpKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgb319cmV0dXJuIHN9fWZ1bmN0aW9uIHIyKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIG8yKGUsdCl7cmV0dXJuIHQyKGUpfHxuMihlLHQpfHxHZyhlLHQpfHxyMigpfWZ1bmN0aW9uICR5KGUsdCxuLHIsbyxpLGwpe3RyeXt2YXIgcz1lW2ldKGwpLGE9cy52YWx1ZX1jYXRjaCh1KXtuKHUpO3JldHVybn1zLmRvbmU/dChhKTpQcm9taXNlLnJlc29sdmUoYSkudGhlbihyLG8pfWZ1bmN0aW9uIGZfKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7dmFyIGk9ZS5hcHBseSh0LG4pO2Z1bmN0aW9uIGwoYSl7JHkoaSxyLG8sbCxzLCJuZXh0IixhKX1mdW5jdGlvbiBzKGEpeyR5KGkscixvLGwscywidGhyb3ciLGEpfWwodm9pZCAwKX0pfX1mdW5jdGlvbiBpMihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBZaChlKX1mdW5jdGlvbiBsMihlKXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmZVtTeW1ib2wuaXRlcmF0b3JdIT1udWxsfHxlWyJAQGl0ZXJhdG9yIl0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gczIoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIFhoKGUpe3JldHVybiBpMihlKXx8bDIoZSl8fEdnKGUpfHxzMigpfXZhciBhMj0vXmRhdGE6KGltYWdlXC8ocG5nfGpwZWd8anBnfGdpZnx3ZWJwfGJtcHx0aWZmfGljb3xzdmdcK3htbCkpO2Jhc2U2NCwvO2Z1bmN0aW9uIFlnKGUpe3ZhciB0PWEyLmV4ZWMoZSk7aWYodCYmdFsxXSlyZXR1cm4gdFsxXX1mdW5jdGlvbiBYZyhlKXtyZXR1cm4gZT09PSJpbWFnZS9zdmcreG1sIj8ic3ZnIjplPT09ImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiI/ImljbyI6ZS5zdGFydHNXaXRoKCJpbWFnZS8iKT9lLnNsaWNlKDYpOmV9dmFyIHUyPS9eaChbXGQrXSkkLztmdW5jdGlvbiBjMihlKXt2YXIgdD1lLmNoaWxkcmVuLm1hcChkMik7cmV0dXJuIGYyKHQpfWZ1bmN0aW9uIGQyKGUpe2lmKGUudHlwZT09PSJoZWFkaW5nIil7dmFyIHQsbj0iIixyPU51bWJlcigodD1lLnRhZy5tYXRjaCh1MikpPT09bnVsbHx8dD09PXZvaWQgMD92b2lkIDA6dFsxXSk7aWYoTnVtYmVyLmlzTmFOKHIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBoZWFkZXIgZGVwdGgiKTtmb3IodmFyIG89MDtvPE51bWJlcihyKTtvKyspbis9IiMiO3ZhciBpPVsiIi5jb25jYXQobiwiICIpXTtyZXR1cm57dHlwZToiYmxvY2siLGNoaWxkcmVuOmkuY29uY2F0LmFwcGx5KGksWGgoZS5jaGlsZHJlbi5tYXAoSmgpKSl9fWVsc2V7aWYoZS50eXBlPT09InBhcmFncmFwaCIpcmV0dXJuIGUuY2hpbGRyZW4ubGVuZ3RoPT09MD97dHlwZToiYmxvY2siLGNoaWxkcmVuOlsiPGJyIC8+Il19Ont0eXBlOiJibG9jayIsY2hpbGRyZW46ZS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIEpoKHMpfSl9O2lmKGUudHlwZT09PSJsaXN0IilyZXR1cm57dHlwZToiYmxvY2siLGNoaWxkcmVuOmUuY2hpbGRyZW4uZmxhdE1hcChmdW5jdGlvbihzLGEpe3JldHVybiBwXyhnXyhlKSxzLDAsYT09PTApfSl9O3ZhciBsPWU7dGhyb3cgbmV3IEVycm9yKCJVbmhhbmRsZWQgbm9kZSB0eXBlOiAiLmNvbmNhdCgidHlwZSJpbiBsPyJleGhhdXN0aXZlQ2hlY2sudHlwZSI6InVua25vd24iKSl9fWZ1bmN0aW9uIGYyKGUpe3JldHVybiBRaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUWgoKXtyZXR1cm4gUWg9Zl8oeGEoKS5tYXJrKGZ1bmN0aW9uIGUodCl7dmFyIG4scixvLGksbCxzLGEsdSxjO3JldHVybiB4YSgpLndyYXAoZnVuY3Rpb24oZil7Zm9yKDs7KXN3aXRjaChmLnByZXY9Zi5uZXh0KXtjYXNlIDA6bj1bYApgXSxyPVtdLG89e30saT0wO2Nhc2UgNDppZighKGk8dC5sZW5ndGgpKXtmLm5leHQ9NDQ7YnJlYWt9bD10W2ldLHM9Wk4obC5jaGlsZHJlbiksZi5wcmV2PTcscy5zKCk7Y2FzZSA5OmlmKChhPXMubigpKS5kb25lKXtmLm5leHQ9MzI7YnJlYWt9aWYodT1hLnZhbHVlLHR5cGVvZiB1IT0ic3RyaW5nIil7Zi5uZXh0PTE1O2JyZWFrfW5bbi5sZW5ndGgtMV0rPXUsZi5uZXh0PTMwO2JyZWFrO2Nhc2UgMTU6aWYodS50eXBlIT09ImltYWdlIil7Zi5uZXh0PTIzO2JyZWFrfXJldHVybiBmLnQwPXIsZi5uZXh0PTE5LG0yKHUsbyk7Y2FzZSAxOTpmLnQxPWYuc2VudCxmLnQwLnB1c2guY2FsbChmLnQwLGYudDEpLGYubmV4dD0yOTticmVhaztjYXNlIDIzOmlmKHUudHlwZSE9PSJsaW5rIil7Zi5uZXh0PTI3O2JyZWFrfXIucHVzaCh5Mih1KSksZi5uZXh0PTI5O2JyZWFrO2Nhc2UgMjc6dGhyb3cgYz11LG5ldyBFcnJvcigiVW5leHBlY3RlZCBub2RlIHR5cGU6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGMsbnVsbCwyKSkpO2Nhc2UgMjk6bi5wdXNoKCIiKTtjYXNlIDMwOmYubmV4dD05O2JyZWFrO2Nhc2UgMzI6Zi5uZXh0PTM3O2JyZWFrO2Nhc2UgMzQ6Zi5wcmV2PTM0LGYudDI9Zi5jYXRjaCg3KSxzLmUoZi50Mik7Y2FzZSAzNzpyZXR1cm4gZi5wcmV2PTM3LHMuZigpLGYuZmluaXNoKDM3KTtjYXNlIDQwOmk9PT10Lmxlbmd0aC0xP25bbi5sZW5ndGgtMV0rPWAKYDpuW24ubGVuZ3RoLTFdKz1gCgpgO2Nhc2UgNDE6aSsrLGYubmV4dD00O2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIGYuYWJydXB0KCJyZXR1cm4iLFV0KFV0KFV0KFV0KHt9LEt0LCJyaWNodGV4dCIpLCJ0ZW1wbGF0ZVN0cmluZ3MiLG4pLCJleHBycyIsciksImZpbGVzIixvKSk7Y2FzZSA0NTpjYXNlImVuZCI6cmV0dXJuIGYuc3RvcCgpfX0sZSxudWxsLFtbNywzNCwzNyw0MF1dKX0pKSxRaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gaF8oZSl7dmFyIHQ9dHlwZW9mIGUuZm9ybWF0PT0ibnVtYmVyIj9wMihlLmZvcm1hdCk6W10sbj1lLnRleHQudHJpbVN0YXJ0KCkscj1lLnRleHQubGVuZ3RoLW4ubGVuZ3RoO249bi50cmltRW5kKCk7dmFyIG89ZS50ZXh0Lmxlbmd0aC1uLmxlbmd0aC1yO3JldHVybiB0LmluY2x1ZGVzKCJib2xkIikmJnQuaW5jbHVkZXMoIml0YWxpYyIpP249IioqKiIuY29uY2F0KG4sIioqKiIpOnQuaW5jbHVkZXMoImJvbGQiKT9uPSIqKiIuY29uY2F0KG4sIioqIik6dC5pbmNsdWRlcygiaXRhbGljIikmJihuPSJfIi5jb25jYXQobiwiXyIpKSx0LmluY2x1ZGVzKCJsaW5lLXRocm91Z2giKSYmKG49In5+Ii5jb25jYXQobiwifn4iKSksIiIuY29uY2F0KCIgIi5yZXBlYXQocikpLmNvbmNhdChuKS5jb25jYXQoIiAiLnJlcGVhdChvKSl9ZnVuY3Rpb24gSmgoZSl7cmV0dXJuIGUudHlwZT09PSJ0ZXh0Ij9oXyhlKTplLnR5cGU9PT0ibGluZWJyZWFrIj9gCmA6ZX1mdW5jdGlvbiBwXyhlLHQsbil7dmFyIHIsbz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsaT1vPyIiOmAKYCxsPVsiIi5jb25jYXQoaSkuY29uY2F0KCIgIi5yZXBlYXQobikpLmNvbmNhdChlKV07cmV0dXJuKChyPXQuY2hpbGRyZW4pPT09bnVsbHx8cj09PXZvaWQgMHx8KHI9clswXSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnR5cGUpIT09Imxpc3QiJiZsLnB1c2goIiAiKSxsLmNvbmNhdCh0LmNoaWxkcmVuLmZsYXRNYXAoZnVuY3Rpb24ocyl7cmV0dXJuIHMudHlwZT09PSJsaXN0Ij9zLmNoaWxkcmVuLmZsYXRNYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBfKGdfKHMpLGEsbis0KX0pOltKaChzKV19KSl9ZnVuY3Rpb24gZ18oZSl7aWYoZS5saXN0VHlwZT09PSJidWxsZXQiKXJldHVybiItIjtpZihlLmxpc3RUeXBlPT09Im51bWJlciIpcmV0dXJuIjEuIjt0aHJvdyBuZXcgRXJyb3IoIlVuaGFuZGxlZCBsaXN0IHR5cGU6ICIuY29uY2F0KGUubGlzdFR5cGUpKX12YXIgaDI9e2JvbGQ6MSxpdGFsaWM6MiwibGluZS10aHJvdWdoIjo0fTtmdW5jdGlvbiBwMihlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoaDIpLmZsYXRNYXAoZnVuY3Rpb24odCl7dmFyIG49bzIodCwyKSxyPW5bMF0sbz1uWzFdO3JldHVybihvJmUpPT09bz9bcl06W119KX12YXIgZzI9bmV3IFRleHRFbmNvZGVyO2Z1bmN0aW9uIG0yKGUsdCl7cmV0dXJuIFpoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBaaCgpe3JldHVybiBaaD1mXyh4YSgpLm1hcmsoZnVuY3Rpb24gZSh0LG4pe3ZhciByLG8saSxsLHM7cmV0dXJuIHhhKCkud3JhcChmdW5jdGlvbih1KXtmb3IoOzspc3dpdGNoKHUucHJldj11Lm5leHQpe2Nhc2UgMDppZighdC5zcmMuc3RhcnRzV2l0aCgiZGF0YToiKSl7dS5uZXh0PTEzO2JyZWFrfXJldHVybiB1Lm5leHQ9Mywkbi5nZXRTSEEyNTZIYXNoKGcyLmVuY29kZSh0LnNyYykpO2Nhc2UgMzppZihyPXUuc2VudCxvPVlnKHQuc3JjKSxvIT09dm9pZCAwKXt1Lm5leHQ9NzticmVha310aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBkZXRlY3QgTWltZSBUeXBlIGZvciBpbWFnZTogIi5jb25jYXQodC5zcmMpKTtjYXNlIDc6cmV0dXJuIGk9WGcobyksbD0iL3B1YmxpYy8iLmNvbmNhdChyLCIuIikuY29uY2F0KGkpLG5bbF09dC5zcmMsdS5hYnJ1cHQoInJldHVybiIsVXQoVXQoVXQoe30sS3QsImZpbGUiKSx2bixsKSwibWV0YWRhdGEiLHt3aWR0aDp0LndpZHRofHwwLGhlaWdodDp0LmhlaWdodHx8MCxzaGEyNTY6cnx8IiJ9KSk7Y2FzZSAxMzpyZXR1cm4gcz12Migic2hhMjU2Iix0LnNyYyksdS5hYnJ1cHQoInJldHVybiIsVXQoVXQoVXQoe30sS3QsImZpbGUiKSx2biwiL3B1YmxpYyIuY29uY2F0KHQuc3JjLnNwbGl0KCI/IilbMF0pKSwibWV0YWRhdGEiLHt3aWR0aDp0LndpZHRofHwwLGhlaWdodDp0LmhlaWdodHx8MCxzaGEyNTY6c3x8IiJ9KSk7Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIHUuc3RvcCgpfX0sZSl9KSksWmguYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHYyKGUsdCl7dmFyIG49dC5zcGxpdCgiPyIpO2lmKCEobi5sZW5ndGg8Mikpe3ZhciByPW5bMV0sbz1uZXcgVVJMU2VhcmNoUGFyYW1zKHIpO2lmKG8uaGFzKGUpKXJldHVybiBvLmdldChlKX19ZnVuY3Rpb24geTIoZSl7cmV0dXJuIFV0KFV0KFV0KHt9LEt0LCJsaW5rIiksImhyZWYiLGUudXJsKSwiY2hpbGRyZW4iLGUuY2hpbGRyZW4ubWFwKGhfKSl9ZnVuY3Rpb24ga3koZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKGZ1bmN0aW9uKG8pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbykuZW51bWVyYWJsZX0pKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBKZShlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF0hPW51bGw/YXJndW1lbnRzW3RdOnt9O3QlMj9reShPYmplY3QobiksITApLmZvckVhY2goZnVuY3Rpb24ocil7VXQoZSxyLG5bcl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6a3koT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHIpKX0pfXJldHVybiBlfXZhciBhcj17dmVyc2lvbjoxLGZvcm1hdDoiIixpbmRlbnQ6MCxkaXJlY3Rpb246bnVsbH07ZnVuY3Rpb24gSGwoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gSmUoSmUoe30sYXIpLHt9LHt0eXBlOiJ0ZXh0Iixmb3JtYXQ6IiIsdGV4dDplfSk7aWYoInRhZyJpbiBlKXN3aXRjaChlLnRhZyl7Y2FzZSJoMSI6cmV0dXJuIHppKGUpO2Nhc2UiaDIiOnJldHVybiB6aShlKTtjYXNlImgzIjpyZXR1cm4gemkoZSk7Y2FzZSJoNCI6cmV0dXJuIHppKGUpO2Nhc2UiaDUiOnJldHVybiB6aShlKTtjYXNlImg2IjpyZXR1cm4gemkoZSk7Y2FzZSJsaSI6cmV0dXJuIEMyKGUpO2Nhc2UicCI6cmV0dXJuIFMyKGUpO2Nhc2UidWwiOnJldHVybiBieShlKTtjYXNlIm9sIjpyZXR1cm4gYnkoZSk7Y2FzZSJzcGFuIjpyZXR1cm4gbV8oZSk7Y2FzZSJhIjpyZXR1cm4gdzIoZSk7Y2FzZSJpbWciOnJldHVybiB4MihlKTtjYXNlImJyIjpyZXR1cm4gdD9KZShKZSh7fSxhcikse30se3R5cGU6ImxpbmVicmVhayJ9KTpFMigpO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWQgbm9kZSB0YWc6ICIrSlNPTi5zdHJpbmdpZnkoZSxudWxsLDIpKX1lbHNlIHRocm93IEVycm9yKCJVbmV4cGVjdGVkIG5vZGU6ICIrSlNPTi5zdHJpbmdpZnkoZSxudWxsLDIpKX1mdW5jdGlvbiB4MihlKXt2YXIgdD1lLnNyYztyZXR1cm4gSmUoSmUoe30sYXIpLHt9LHt0eXBlOiJpbWFnZSIsc3JjOnQsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9KX1mdW5jdGlvbiB3MihlKXtyZXR1cm4gSmUoSmUoe30sYXIpLHt9LHt0eXBlOiJsaW5rIix1cmw6ZS5ocmVmLGNoaWxkcmVuOmUuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBIbCh0KX0pfSl9ZnVuY3Rpb24gXzIoZSl7cmV0dXJuIEplKEplKHt9LGFyKSx7fSx7Zm9ybWF0OiIiLHR5cGU6InJvb3QiLGNoaWxkcmVuOmUuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBIbCh0KX0pfSl9ZnVuY3Rpb24gemkoZSl7cmV0dXJuIEplKEplKHt9LGFyKSx7fSx7dHlwZToiaGVhZGluZyIsdGFnOmUudGFnLGNoaWxkcmVuOmUuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBIbCh0KX0pfSl9ZnVuY3Rpb24gUzIoZSl7cmV0dXJuIEplKEplKHt9LGFyKSx7fSx7dHlwZToicGFyYWdyYXBoIixjaGlsZHJlbjplLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gSGwodCwhMCl9KX0pfWZ1bmN0aW9uIEUyKCl7cmV0dXJuIEplKEplKHt9LGFyKSx7fSx7dHlwZToicGFyYWdyYXBoIixjaGlsZHJlbjpbXX0pfWZ1bmN0aW9uIEMyKGUpe3JldHVybiBKZShKZSh7fSxhcikse30se3R5cGU6Imxpc3RpdGVtIixjaGlsZHJlbjplLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gSGwodCwhMCl9KX0pfWZ1bmN0aW9uIGJ5KGUpe3JldHVybiBKZShKZSh7fSxhcikse30se3R5cGU6Imxpc3QiLGxpc3RUeXBlOmUudGFnPT09Im9sIj8ibnVtYmVyIjoiYnVsbGV0IixjaGlsZHJlbjplLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gSGwodCl9KX0sZS5kaXI/e2RpcmVjdGlvbjplLmRpcn06e2RpcmVjdGlvbjpudWxsfSl9dmFyICQyPXtib2xkOjEsaXRhbGljOjIsImxpbmUtdGhyb3VnaCI6NH07ZnVuY3Rpb24gazIoZSl7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHR8JDJbbl19LDApfWZ1bmN0aW9uIG1fKGUpe3ZhciB0PWUuY2hpbGRyZW5bMF07cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj9KZShKZSh7fSxhcikse30se3R5cGU6InRleHQiLHRleHQ6dCxmb3JtYXQ6azIoZS5jbGFzc2VzKX0pOm1fKEplKEplKHt9LHQpLHt9LHtjbGFzc2VzOmUuY2xhc3Nlcy5jb25jYXQodC5jbGFzc2VzKX0pKX12YXIgUGM9Jzx2YWwgdmFsdWU9IicscWg9JyI+JyxlcD0iPC92YWw+IjtmdW5jdGlvbiBabihlLHQsbil7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxvPVtdLGk9ZnVuY3Rpb24oKXt2YXIgYT1lW25dO2lmKGEudHlwZT09PSJoZWFkaW5nIilvLnB1c2goe3RhZzoiaCIuY29uY2F0KGEuZGVwdGgpLGNoaWxkcmVuOlpuKGEudG9rZW5zP2EudG9rZW5zOltdLHQsMCkuY2hpbGRyZW59KTtlbHNlIGlmKGEudHlwZT09PSJwYXJhZ3JhcGgiKW8ucHVzaCh7dGFnOiJwIixjaGlsZHJlbjpabihhLnRva2Vucz9hLnRva2VuczpbXSx0LDApLmNoaWxkcmVufSk7ZWxzZSBpZihhLnR5cGU9PT0ic3Ryb25nIilvLnB1c2goe3RhZzoic3BhbiIsY2xhc3NlczpbImJvbGQiXSxjaGlsZHJlbjpabihhLnRva2Vucz9hLnRva2VuczpbXSx0LDApLmNoaWxkcmVufSk7ZWxzZSBpZihhLnR5cGU9PT0iZW0iKW8ucHVzaCh7dGFnOiJzcGFuIixjbGFzc2VzOlsiaXRhbGljIl0sY2hpbGRyZW46Wm4oYS50b2tlbnM/YS50b2tlbnM6W10sdCwwKS5jaGlsZHJlbn0pO2Vsc2UgaWYoYS50eXBlPT09ImRlbCIpby5wdXNoKHt0YWc6InNwYW4iLGNsYXNzZXM6WyJsaW5lLXRocm91Z2giXSxjaGlsZHJlbjpabihhLnRva2Vucz9hLnRva2VuczpbXSx0LDApLmNoaWxkcmVufSk7ZWxzZSBpZihhLnR5cGU9PT0idGV4dCIpaWYoInRva2VucyJpbiBhJiZBcnJheS5pc0FycmF5KGEudG9rZW5zKSlvLnB1c2guYXBwbHkobyxYaChabihhLnRva2Vucyx0LG4scikuY2hpbGRyZW4pKTtlbHNlIGlmKHImJnR5cGVvZiBhLnJhdz09InN0cmluZyIpe3ZhciB1PWEucmF3LnNwbGl0KGAKYCksYz11LmZsYXRNYXAoZnVuY3Rpb24oUyxrKXtyZXR1cm4gaz09PXUubGVuZ3RoLTE/W1NdOltTLHt0YWc6ImJyIixjaGlsZHJlbjpbXX1dfSk7by5wdXNoLmFwcGx5KG8sWGgoYykpfWVsc2Ugby5wdXNoKGEucmF3KTtlbHNlIGlmKGEudHlwZT09PSJsaXN0IilvLnB1c2goe3RhZzphLm9yZGVyZWQ/Im9sIjoidWwiLGNoaWxkcmVuOlpuKGEuaXRlbXMsdCwwKS5jaGlsZHJlbn0pO2Vsc2UgaWYoYS50eXBlPT09Imxpc3RfaXRlbSIpby5wdXNoKHt0YWc6ImxpIixjaGlsZHJlbjpabihhLnRva2Vucz9hLnRva2VuczpbXSx0LDAsITApLmNoaWxkcmVufSk7ZWxzZSBpZihhLnR5cGUhPT0ic3BhY2UiKWlmKGEudHlwZT09PSJodG1sIil7aWYoYS50ZXh0PT09ZXApcmV0dXJue3Y6e2NoaWxkcmVuOm8sY3Vyc29yOm59fTt2YXIgZD1hLnRleHQuaW5kZXhPZihxaCk7aWYoYS50ZXh0LnN0YXJ0c1dpdGgoUGMpJiZkPi0xKXt2YXIgZj1OdW1iZXIoYS50ZXh0LnNsaWNlKFBjLmxlbmd0aCxkKSk7aWYoTnVtYmVyLmlzTmFOKGYpKXRocm93IEVycm9yKCJJbGxlZ2FsIHZhbCBpbnRlcm1lZGlhdGUgbm9kZTogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYSkpKTt2YXIgaD1abihlLm1hcChmdW5jdGlvbihTKXtyZXR1cm4gUy50eXBlPT09ImxpbmsifHxTLnR5cGU9PT0ibGlzdCI/e3R5cGU6InRleHQiLHJhdzpTLnJhdyx0ZXh0OlMucmF3fTpTfSksdCxuKzEpLG09aC5jaGlsZHJlbixnPWguY3Vyc29yLF89dFtmXTtpZihfLl90eXBlPT09ImxpbmsiKW8ucHVzaCh7dGFnOiJhIixocmVmOl8uaHJlZixjaGlsZHJlbjptfSk7ZWxzZSBpZihfLl90eXBlPT09ImZpbGUiKXt2YXIgdix5O28ucHVzaCh7dGFnOiJpbWciLHNyYzokbi5jb252ZXJ0RmlsZVNvdXJjZShfKS51cmwsd2lkdGg6KHY9Xy5tZXRhZGF0YSk9PT1udWxsfHx2PT09dm9pZCAwP3ZvaWQgMDp2LndpZHRoLGhlaWdodDooeT1fLm1ldGFkYXRhKT09PW51bGx8fHk9PT12b2lkIDA/dm9pZCAwOnkuaGVpZ2h0LGNoaWxkcmVuOltdfSl9bj1nfXZhciB4PS88YnJccypcLz8+L2dpO2EudGV4dC50cmltKCkubWF0Y2goeCkmJm8ucHVzaCh7dGFnOiJiciIsY2hpbGRyZW46W119KX1lbHNlIGEudHlwZT09PSJsaW5rIj9hLnJhdz09PWEuaHJlZj9vLnB1c2goYS5yYXcpOm8ucHVzaCh7dGFnOiJhIixocmVmOmEuaHJlZixjaGlsZHJlbjpabihhLnRva2Vucz9hLnRva2VuczpbXSx0LDApLmNoaWxkcmVufSk6YS50eXBlPT09ImJyIj9vLnB1c2goe3RhZzoiYnIiLGNoaWxkcmVuOltdfSk6Y29uc29sZS5lcnJvcigiQ291bGQgbm90IHBhcnNlIG1hcmtkb3duOiB1bnN1cHBvcnRlZCB0b2tlbiB0eXBlOiAiLmNvbmNhdChhLnR5cGUsIi4gRm91bmQ6ICIpLmNvbmNhdChhLnJhdykpO24rK30sbDtuPGUubGVuZ3RoOylpZihsPWkoKSxsKXJldHVybiBsLnY7cmV0dXJue2NoaWxkcmVuOm8sY3Vyc29yOm59fWZ1bmN0aW9uIHZfKGUpe3ZhciB0PWUudGVtcGxhdGVTdHJpbmdzLG49ZS5leHBycyxyPXQuZmxhdE1hcChmdW5jdGlvbihhLHUpe3ZhciBjPW5bdV07cmV0dXJuIGM/Y1tLdF09PT0ibGluayI/YS5jb25jYXQoIiIuY29uY2F0KFBjKS5jb25jYXQodSkuY29uY2F0KHFoKS5jb25jYXQoYy5jaGlsZHJlblswXSkuY29uY2F0KGVwKSk6YS5jb25jYXQoIiIuY29uY2F0KFBjKS5jb25jYXQodSkuY29uY2F0KHFoKS5jb25jYXQoZXApKTphfSkuam9pbigiIiksbz1KTihyLHtnZm06ITB9KSxpPVpuKG8sbiwwKSxsPWkuY2hpbGRyZW4scz1pLmN1cnNvcjtpZihzIT09by5sZW5ndGgpdGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWRseSB0ZXJtaW5hdGVkIG1hcmtkb3duIHBhcnNpbmcuIFBvc3NpYmxlIHJlYXNvbjogdW5jbG9zZWQgaHRtbCB0YWc/Iik7cmV0dXJuIFV0KFV0KHt9LEt0LCJyaWNodGV4dCIpLCJjaGlsZHJlbiIsbCl9dmFyIHVuPXt9LEk9e307bGV0IHdkPXt9LHlfPXt9LHdhPXt9LEhzPXt9LHRwPXt9LHZsPXt9LFFnPXt9LG5wPXt9LF9hPXt9LFNhPXt9LF9vPXt9LEpnPXt9LFpnPXt9LHhfPXt9LHdfPXt9LF9fPXt9LFNfPXt9LEVfPXt9LENfPXt9LCRfPXt9LE9jPXt9LGtfPXt9LGJfPXt9LFRfPXt9LE5fPXt9LFJfPXt9LFBfPXt9LE9fPXt9LEFfPXt9LE1fPXt9LHFnPXt9LGVtPXt9LHJwPXt9LExfPXt9LERfPXt9LElfPXt9O2Z1bmN0aW9uIEsoZSl7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtczt0LmFwcGVuZCgiY29kZSIsZSk7Zm9yKGxldCBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0LmFwcGVuZCgidiIsYXJndW1lbnRzW25dKTt0aHJvdyBFcnJvcihgTWluaWZpZWQgTGV4aWNhbCBlcnJvciAjJHtlfTsgdmlzaXQgaHR0cHM6Ly9sZXhpY2FsLmRldi9kb2NzL2Vycm9yPyR7dH0gZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLmApfWxldCBlbz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudDwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudDwidSIsYjI9ZW8mJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQ/ZG9jdW1lbnQuZG9jdW1lbnRNb2RlOm51bGwsQnQ9ZW8mJi9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLERvPWVvJiYvXig/IS4qU2VhbW9ua2V5KSg/PS4qRmlyZWZveCkuKi9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQWM9ZW8mJiJJbnB1dEV2ZW50ImluIHdpbmRvdyYmIWIyPyJnZXRUYXJnZXRSYW5nZXMiaW4gbmV3IHdpbmRvdy5JbnB1dEV2ZW50KCJpbnB1dCIpOiExLHRtPWVvJiYvVmVyc2lvblwvW1xkLl0rLipTYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksX2Q9ZW8mJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhd2luZG93Lk1TU3RyZWFtLFQyPWVvJiYvXig/PS4qQ2hyb21lKS4qL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxubT1lbyYmL0FwcGxlV2ViS2l0XC9bXGQuXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiFUMixTZD10bXx8X2R8fG5tPyLCoCI6IuKAiyIsTjI9RG8/IsKgIjpTZCxSMj0vXlteQS1aYS16XHUwMGMwLVx1MDBkNlx1MDBkOC1cdTAwZjZcdTAwZjgtXHUwMmI4XHUwMzAwLVx1MDU5MFx1MDgwMC1cdTFmZmZcdTIwMGVcdTJjMDAtXHVmYjFjXHVmZTAwLVx1ZmU2Zlx1ZmVmZC1cdWZmZmZdKltcdTA1OTEtXHUwN2ZmXHVmYjFkLVx1ZmRmZFx1ZmU3MC1cdWZlZmNdLyxQMj0vXlteXHUwNTkxLVx1MDdmZlx1ZmIxZC1cdWZkZmRcdWZlNzAtXHVmZWZjXSpbQS1aYS16XHUwMGMwLVx1MDBkNlx1MDBkOC1cdTAwZjZcdTAwZjgtXHUwMmI4XHUwMzAwLVx1MDU5MFx1MDgwMC1cdTFmZmZcdTIwMGVcdTJjMDAtXHVmYjFjXHVmZTAwLVx1ZmU2Zlx1ZmVmZC1cdWZmZmZdLyxjaT17Ym9sZDoxLGNvZGU6MTYsaGlnaGxpZ2h0OjEyOCxpdGFsaWM6MixzdHJpa2V0aHJvdWdoOjQsc3Vic2NyaXB0OjMyLHN1cGVyc2NyaXB0OjY0LHVuZGVybGluZTo4fSxPMj17ZGlyZWN0aW9ubGVzczoxLHVubWVyZ2VhYmxlOjJ9LFR5PXtjZW50ZXI6MixlbmQ6NixqdXN0aWZ5OjQsbGVmdDoxLHJpZ2h0OjMsc3RhcnQ6NX0sQTI9ezI6ImNlbnRlciIsNjoiZW5kIiw0OiJqdXN0aWZ5IiwxOiJsZWZ0IiwzOiJyaWdodCIsNToic3RhcnQifSxNMj17bm9ybWFsOjAsc2VnbWVudGVkOjIsdG9rZW46MX0sTDI9ezA6Im5vcm1hbCIsMjoic2VnbWVudGVkIiwxOiJ0b2tlbiJ9LG9wPSExLHJtPTA7ZnVuY3Rpb24gRDIoZSl7cm09ZS50aW1lU3RhbXB9ZnVuY3Rpb24gJGYoZSx0LG4pe3JldHVybiB0Ll9fbGV4aWNhbExpbmVCcmVhaz09PWV8fGVbYF9fbGV4aWNhbEtleV8ke24uX2tleX1gXSE9PXZvaWQgMH1mdW5jdGlvbiBJMihlKXtyZXR1cm4gZS5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCk9PntsZXQgdD1ZZSgpO3JldHVybiB0IT09bnVsbD90LmNsb25lKCk6bnVsbH0pfWZ1bmN0aW9uIGpfKGUsdCxuKXtvcD0hMDtsZXQgcj0xMDA8cGVyZm9ybWFuY2Uubm93KCktcm07dHJ5e1JuKGUsKCk9PntsZXQgbz1ZZSgpfHxJMihlKTt2YXIgaT1uZXcgTWFwLGw9ZS5nZXRSb290RWxlbWVudCgpLHM9ZS5fZWRpdG9yU3RhdGUsYT1lLl9ibG9ja0N1cnNvckVsZW1lbnQ7bGV0IHU9ITEsYz0iIjtmb3IodmFyIGQ9MDtkPHQubGVuZ3RoO2QrKyl7dmFyIGY9dFtkXSxoPWYudHlwZSxtPWYudGFyZ2V0LGc9SGEobSxzKTtpZighKGc9PT1udWxsJiZtIT09bHx8S2UoZykpKXtpZihoPT09ImNoYXJhY3RlckRhdGEiKXtpZihmPXImJlooZykpZTp7Zj1vLGg9bTt2YXIgXz1nO2lmKGZlKGYpKXt2YXIgdj1mLmFuY2hvci5nZXROb2RlKCk7aWYodi5pcyhfKSYmZi5mb3JtYXQhPT12LmdldEZvcm1hdCgpKXtmPSExO2JyZWFrIGV9fWY9aC5ub2RlVHlwZT09PTMmJl8uaXNBdHRhY2hlZCgpfWYmJihfPVByKGUuX3dpbmRvdyksaD1mPW51bGwsXyE9PW51bGwmJl8uYW5jaG9yTm9kZT09PW0mJihmPV8uYW5jaG9yT2Zmc2V0LGg9Xy5mb2N1c09mZnNldCksbT1tLm5vZGVWYWx1ZSxtIT09bnVsbCYmdW0oZyxtLGYsaCwhMSkpfWVsc2UgaWYoaD09PSJjaGlsZExpc3QiKXtmb3IodT0hMCxoPWYuYWRkZWROb2RlcyxfPTA7XzxoLmxlbmd0aDtfKyspe3Y9aFtfXTt2YXIgeT1WXyh2KSx4PXYucGFyZW50Tm9kZTt4PT1udWxsfHx2PT09YXx8eSE9PW51bGx8fHYubm9kZU5hbWU9PT0iQlIiJiYkZih2LHgsZSl8fChEbyYmKHk9di5pbm5lclRleHR8fHYubm9kZVZhbHVlKSYmKGMrPXkpLHgucmVtb3ZlQ2hpbGQodikpfWlmKGY9Zi5yZW1vdmVkTm9kZXMsaD1mLmxlbmd0aCwwPGgpe2ZvcihfPTAsdj0wO3Y8aDt2KyspeD1mW3ZdLCh4Lm5vZGVOYW1lPT09IkJSIiYmJGYoeCxtLGUpfHxhPT09eCkmJihtLmFwcGVuZENoaWxkKHgpLF8rKyk7aCE9PV8mJihtPT09bCYmKGc9cy5fbm9kZU1hcC5nZXQoInJvb3QiKSksaS5zZXQobSxnKSl9fX19aWYoMDxpLnNpemUpZm9yKGxldFtTLGtdb2YgaSlpZihXKGspKWZvcihpPWsuZ2V0Q2hpbGRyZW5LZXlzKCksbD1TLmZpcnN0Q2hpbGQscz0wO3M8aS5sZW5ndGg7cysrKWE9ZS5nZXRFbGVtZW50QnlLZXkoaVtzXSksYSE9PW51bGwmJihsPT1udWxsPyhTLmFwcGVuZENoaWxkKGEpLGw9YSk6bCE9PWEmJlMucmVwbGFjZUNoaWxkKGEsbCksbD1sLm5leHRTaWJsaW5nKTtlbHNlIFooaykmJmsubWFya0RpcnR5KCk7aWYoaT1uLnRha2VSZWNvcmRzKCksMDxpLmxlbmd0aCl7Zm9yKGw9MDtsPGkubGVuZ3RoO2wrKylmb3IoYT1pW2xdLHM9YS5hZGRlZE5vZGVzLGE9YS50YXJnZXQsZD0wO2Q8cy5sZW5ndGg7ZCsrKWc9c1tkXSxtPWcucGFyZW50Tm9kZSxtPT1udWxsfHxnLm5vZGVOYW1lIT09IkJSInx8JGYoZyxhLGUpfHxtLnJlbW92ZUNoaWxkKGcpO24udGFrZVJlY29yZHMoKX1vIT09bnVsbCYmKHUmJihvLmRpcnR5PSEwLGtyKG8pKSxEbyYmWF8oZSkmJm8uaW5zZXJ0UmF3VGV4dChjKSl9KX1maW5hbGx5e29wPSExfX1mdW5jdGlvbiB6XyhlKXtsZXQgdD1lLl9vYnNlcnZlcjtpZih0IT09bnVsbCl7bGV0IG49dC50YWtlUmVjb3JkcygpO2pfKGUsbix0KX19ZnVuY3Rpb24gRl8oZSl7cm09PT0wJiZDZChlKS5hZGRFdmVudExpc3RlbmVyKCJ0ZXh0SW5wdXQiLEQyLCEwKSxlLl9vYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcigodCxuKT0+e2pfKGUsdCxuKX0pfWZ1bmN0aW9uIE55KGUsdCl7bGV0IG49ZS5fX21vZGUscj1lLl9fZm9ybWF0O2U9ZS5fX3N0eWxlO2xldCBvPXQuX19tb2RlLGk9dC5fX2Zvcm1hdDtyZXR1cm4gdD10Ll9fc3R5bGUsKG49PT1udWxsfHxuPT09bykmJihyPT09bnVsbHx8cj09PWkpJiYoZT09PW51bGx8fGU9PT10KX1mdW5jdGlvbiBSeShlLHQpe2xldCBuPWUubWVyZ2VXaXRoU2libGluZyh0KSxyPW90KCkuX25vcm1hbGl6ZWROb2RlcztyZXR1cm4gci5hZGQoZS5fX2tleSksci5hZGQodC5fX2tleSksbn1mdW5jdGlvbiBCXyhlKXtpZihlLl9fdGV4dD09PSIiJiZlLmlzU2ltcGxlVGV4dCgpJiYhZS5pc1VubWVyZ2VhYmxlKCkpZS5yZW1vdmUoKTtlbHNle2Zvcih2YXIgdDsodD1lLmdldFByZXZpb3VzU2libGluZygpKSE9PW51bGwmJloodCkmJnQuaXNTaW1wbGVUZXh0KCkmJiF0LmlzVW5tZXJnZWFibGUoKTspaWYodC5fX3RleHQ9PT0iIil0LnJlbW92ZSgpO2Vsc2V7TnkodCxlKSYmKGU9UnkodCxlKSk7YnJlYWt9Zm9yKHZhciBuOyhuPWUuZ2V0TmV4dFNpYmxpbmcoKSkhPT1udWxsJiZaKG4pJiZuLmlzU2ltcGxlVGV4dCgpJiYhbi5pc1VubWVyZ2VhYmxlKCk7KWlmKG4uX190ZXh0PT09IiIpbi5yZW1vdmUoKTtlbHNle055KGUsbikmJlJ5KGUsbik7YnJlYWt9fX1mdW5jdGlvbiBvbShlKXtyZXR1cm4gUHkoZS5hbmNob3IpLFB5KGUuZm9jdXMpLGV9ZnVuY3Rpb24gUHkoZSl7Zm9yKDtlLnR5cGU9PT0iZWxlbWVudCI7KXt2YXIgdD1lLmdldE5vZGUoKSxuPWUub2Zmc2V0O2lmKG49PT10LmdldENoaWxkcmVuU2l6ZSgpPyh0PXQuZ2V0Q2hpbGRBdEluZGV4KG4tMSksbj0hMCk6KHQ9dC5nZXRDaGlsZEF0SW5kZXgobiksbj0hMSksWih0KSl7ZS5zZXQodC5fX2tleSxuP3QuZ2V0VGV4dENvbnRlbnRTaXplKCk6MCwidGV4dCIpO2JyZWFrfWVsc2UgaWYoIVcodCkpYnJlYWs7ZS5zZXQodC5fX2tleSxuP3QuZ2V0Q2hpbGRyZW5TaXplKCk6MCwiZWxlbWVudCIpfX1sZXQgajI9MSx6Mj10eXBlb2YgcXVldWVNaWNyb3Rhc2s9PSJmdW5jdGlvbiI/cXVldWVNaWNyb3Rhc2s6ZT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oZSl9O2Z1bmN0aW9uIGltKGUpe2xldCB0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYodD09PW51bGwpcmV0dXJuITE7bGV0IG49dC5ub2RlTmFtZTtyZXR1cm4gS2UoSGEoZSkpJiYobj09PSJJTlBVVCJ8fG49PT0iVEVYVEFSRUEifHx0LmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIiYmdC5fX2xleGljYWxFZGl0b3I9PW51bGwpfWZ1bmN0aW9uIFVhKGUsdCxuKXtsZXQgcj1lLmdldFJvb3RFbGVtZW50KCk7dHJ5e3JldHVybiByIT09bnVsbCYmci5jb250YWlucyh0KSYmci5jb250YWlucyhuKSYmdCE9PW51bGwmJiFpbSh0KSYmbG0odCk9PT1lfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBsbShlKXtmb3IoO2UhPW51bGw7KXtsZXQgdD1lLl9fbGV4aWNhbEVkaXRvcjtpZih0IT1udWxsKXJldHVybiB0O2U9RWQoZSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaXAoZSl7cmV0dXJuIGUuaXNUb2tlbigpfHxlLmlzU2VnbWVudGVkKCl9ZnVuY3Rpb24gTWMoZSl7Zm9yKDtlIT1udWxsOyl7aWYoZS5ub2RlVHlwZT09PTMpcmV0dXJuIGU7ZT1lLmZpcnN0Q2hpbGR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gV18oZSx0LG4pe3JldHVybiB0PWNpW3RdLGUmdCYmKG49PT1udWxsfHwhKG4mdCkpP2VedDpuPT09bnVsbHx8biZ0P2V8dDplfWZ1bmN0aW9uIFVfKGUpe3JldHVybiBaKGUpfHxrYShlKXx8S2UoZSl9ZnVuY3Rpb24gSF8oZSx0KXtpZih0IT1udWxsKWUuX19rZXk9dDtlbHNle3RuKCksOTk8YmEmJksoMTQpLHQ9b3QoKTt2YXIgbj1PcigpLHI9IiIrajIrKztuLl9ub2RlTWFwLnNldChyLGUpLFcoZSk/dC5fZGlydHlFbGVtZW50cy5zZXQociwhMCk6dC5fZGlydHlMZWF2ZXMuYWRkKHIpLHQuX2Nsb25lTm90TmVlZGVkLmFkZChyKSx0Ll9kaXJ0eVR5cGU9MSxlLl9fa2V5PXJ9fWZ1bmN0aW9uIGRpKGUpe3ZhciB0PWUuZ2V0UGFyZW50KCk7aWYodCE9PW51bGwpe2xldCBvPWUuZ2V0V3JpdGFibGUoKTt0PXQuZ2V0V3JpdGFibGUoKTt2YXIgbj1lLmdldFByZXZpb3VzU2libGluZygpO2lmKGU9ZS5nZXROZXh0U2libGluZygpLG49PT1udWxsKWlmKGUhPT1udWxsKXt2YXIgcj1lLmdldFdyaXRhYmxlKCk7dC5fX2ZpcnN0PWUuX19rZXksci5fX3ByZXY9bnVsbH1lbHNlIHQuX19maXJzdD1udWxsO2Vsc2V7aWYocj1uLmdldFdyaXRhYmxlKCksZSE9PW51bGwpe2xldCBpPWUuZ2V0V3JpdGFibGUoKTtpLl9fcHJldj1yLl9fa2V5LHIuX19uZXh0PWkuX19rZXl9ZWxzZSByLl9fbmV4dD1udWxsO28uX19wcmV2PW51bGx9ZT09PW51bGw/biE9PW51bGw/KGU9bi5nZXRXcml0YWJsZSgpLHQuX19sYXN0PW4uX19rZXksZS5fX25leHQ9bnVsbCk6dC5fX2xhc3Q9bnVsbDooZT1lLmdldFdyaXRhYmxlKCksbiE9PW51bGw/KG49bi5nZXRXcml0YWJsZSgpLG4uX19uZXh0PWUuX19rZXksZS5fX3ByZXY9bi5fX2tleSk6ZS5fX3ByZXY9bnVsbCxvLl9fbmV4dD1udWxsKSx0Ll9fc2l6ZS0tLG8uX19wYXJlbnQ9bnVsbH19ZnVuY3Rpb24gTGMoZSl7OTk8YmEmJksoMTQpO3ZhciB0PWUuZ2V0TGF0ZXN0KCksbj10Ll9fcGFyZW50LHI9T3IoKTtsZXQgbz1vdCgpLGk9ci5fbm9kZU1hcDtpZihyPW8uX2RpcnR5RWxlbWVudHMsbiE9PW51bGwpZTpmb3IoO24hPT1udWxsOyl7aWYoci5oYXMobikpYnJlYWsgZTtsZXQgbD1pLmdldChuKTtpZihsPT09dm9pZCAwKWJyZWFrO3Iuc2V0KG4sITEpLG49bC5fX3BhcmVudH10PXQuX19rZXksby5fZGlydHlUeXBlPTEsVyhlKT9yLnNldCh0LCEwKTpvLl9kaXJ0eUxlYXZlcy5hZGQodCl9ZnVuY3Rpb24gRHQoZSl7dG4oKTt2YXIgdD1vdCgpO2xldCBuPXQuX2NvbXBvc2l0aW9uS2V5O2UhPT1uJiYodC5fY29tcG9zaXRpb25LZXk9ZSxuIT09bnVsbCYmKHQ9YnQobiksdCE9PW51bGwmJnQuZ2V0V3JpdGFibGUoKSksZSE9PW51bGwmJihlPWJ0KGUpLGUhPT1udWxsJiZlLmdldFdyaXRhYmxlKCkpKX1mdW5jdGlvbiBTbygpe3JldHVybiBYbCgpP251bGw6b3QoKS5fY29tcG9zaXRpb25LZXl9ZnVuY3Rpb24gYnQoZSx0KXtyZXR1cm4gZT0odHx8T3IoKSkuX25vZGVNYXAuZ2V0KGUpLGU9PT12b2lkIDA/bnVsbDplfWZ1bmN0aW9uIFZfKGUsdCl7bGV0IG49b3QoKTtyZXR1cm4gZT1lW2BfX2xleGljYWxLZXlfJHtuLl9rZXl9YF0sZSE9PXZvaWQgMD9idChlLHQpOm51bGx9ZnVuY3Rpb24gSGEoZSx0KXtmb3IoO2UhPW51bGw7KXtsZXQgbj1WXyhlLHQpO2lmKG4hPT1udWxsKXJldHVybiBuO2U9RWQoZSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gS18oZSl7bGV0IHQ9T2JqZWN0LmFzc2lnbih7fSxlLl9kZWNvcmF0b3JzKTtyZXR1cm4gZS5fcGVuZGluZ0RlY29yYXRvcnM9dH1mdW5jdGlvbiBPeShlKXtyZXR1cm4gZS5yZWFkKCgpPT5ScigpLmdldFRleHRDb250ZW50KCkpfWZ1bmN0aW9uIEYyKGUsdCl7Um4oZSwoKT0+e3ZhciBuPU9yKCk7aWYoIW4uaXNFbXB0eSgpKWlmKHQ9PT0icm9vdCIpUnIoKS5tYXJrRGlydHkoKTtlbHNle249bi5fbm9kZU1hcDtmb3IobGV0WyxyXW9mIG4pci5tYXJrRGlydHkoKX19LGUuX3BlbmRpbmdFZGl0b3JTdGF0ZT09PW51bGw/e3RhZzoiaGlzdG9yeS1tZXJnZSJ9OnZvaWQgMCl9ZnVuY3Rpb24gUnIoKXtyZXR1cm4gT3IoKS5fbm9kZU1hcC5nZXQoInJvb3QiKX1mdW5jdGlvbiBrcihlKXt0bigpO2xldCB0PU9yKCk7ZSE9PW51bGwmJihlLmRpcnR5PSEwLGUuX2NhY2hlZE5vZGVzPW51bGwpLHQuX3NlbGVjdGlvbj1lfWZ1bmN0aW9uIHNsKGUpe3ZhciB0PW90KCksbjtlOntmb3Iobj1lO24hPW51bGw7KXtsZXQgcj1uW2BfX2xleGljYWxLZXlfJHt0Ll9rZXl9YF07aWYociE9PXZvaWQgMCl7bj1yO2JyZWFrIGV9bj1FZChuKX1uPW51bGx9cmV0dXJuIG49PT1udWxsPyh0PXQuZ2V0Um9vdEVsZW1lbnQoKSxlPT09dD9idCgicm9vdCIpOm51bGwpOmJ0KG4pfWZ1bmN0aW9uIEdfKGUpe3JldHVybi9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZy50ZXN0KGUpfWZ1bmN0aW9uIHNtKGUpe2xldCB0PVtdO2Zvcig7ZSE9PW51bGw7KXQucHVzaChlKSxlPWUuX3BhcmVudEVkaXRvcjtyZXR1cm4gdH1mdW5jdGlvbiBZXygpe3JldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csIiIpLnN1YnN0cigwLDUpfWZ1bmN0aW9uIGFtKGUsdCxuKXtpZih0PVByKHQuX3dpbmRvdyksdCE9PW51bGwpe3ZhciByPXQuYW5jaG9yTm9kZSx7YW5jaG9yT2Zmc2V0Om8sZm9jdXNPZmZzZXQ6aX09dDtpZihyIT09bnVsbCYmKHQ9ci5ub2RlVHlwZT09PTM/ci5ub2RlVmFsdWU6bnVsbCxyPUhhKHIpLHQhPT1udWxsJiZaKHIpKSl7aWYodD09PVNkJiZuKXtsZXQgbD1uLmxlbmd0aDt0PW4saT1vPWx9dCE9PW51bGwmJnVtKHIsdCxvLGksZSl9fX1mdW5jdGlvbiB1bShlLHQsbixyLG8pe2xldCBpPWU7aWYoaS5pc0F0dGFjaGVkKCkmJihvfHwhaS5pc0RpcnR5KCkpKXtsZXQgdT1pLmlzQ29tcG9zaW5nKCksYz10O2lmKCh1fHxvKSYmdFt0Lmxlbmd0aC0xXT09PVNkJiYoYz10LnNsaWNlKDAsLTEpKSx0PWkuZ2V0VGV4dENvbnRlbnQoKSxvfHxjIT09dClpZihjPT09IiIpaWYoRHQobnVsbCksdG18fF9kfHxubSlpLnJlbW92ZSgpO2Vsc2V7bGV0IGQ9b3QoKTtzZXRUaW1lb3V0KCgpPT57ZC51cGRhdGUoKCk9PntpLmlzQXR0YWNoZWQoKSYmaS5yZW1vdmUoKX0pfSwyMCl9ZWxzZXtvPWkuZ2V0UGFyZW50KCksdD1ZbCgpO3ZhciBsPWkuZ2V0VGV4dENvbnRlbnRTaXplKCkscz1TbygpLGE9aS5nZXRLZXkoKTtpLmlzVG9rZW4oKXx8cyE9PW51bGwmJmE9PT1zJiYhdXx8ZmUodCkmJihvIT09bnVsbCYmIW8uY2FuSW5zZXJ0VGV4dEJlZm9yZSgpJiZ0LmFuY2hvci5vZmZzZXQ9PT0wfHx0LmFuY2hvci5rZXk9PT1lLl9fa2V5JiZ0LmFuY2hvci5vZmZzZXQ9PT0wJiYhaS5jYW5JbnNlcnRUZXh0QmVmb3JlKCl8fHQuZm9jdXMua2V5PT09ZS5fX2tleSYmdC5mb2N1cy5vZmZzZXQ9PT1sJiYhaS5jYW5JbnNlcnRUZXh0QWZ0ZXIoKSk/aS5tYXJrRGlydHkoKTooZT1ZZSgpLGZlKGUpJiZuIT09bnVsbCYmciE9PW51bGwmJihlLnNldFRleHROb2RlUmFuZ2UoaSxuLGksciksaS5pc1NlZ21lbnRlZCgpJiYobj1pLmdldFRleHRDb250ZW50KCksbj0kdChuKSxpLnJlcGxhY2UobiksaT1uKSksaS5zZXRUZXh0Q29udGVudChjKSl9fX1mdW5jdGlvbiBCMihlLHQpe2lmKHQuaXNTZWdtZW50ZWQoKSlyZXR1cm4hMDtpZighZS5pc0NvbGxhcHNlZCgpKXJldHVybiExO2U9ZS5hbmNob3Iub2Zmc2V0O2xldCBuPXQuZ2V0UGFyZW50T3JUaHJvdygpLHI9dC5pc1Rva2VuKCk7cmV0dXJuIGU9PT0wPygoZT0hdC5jYW5JbnNlcnRUZXh0QmVmb3JlKCl8fCFuLmNhbkluc2VydFRleHRCZWZvcmUoKXx8cil8fCh0PXQuZ2V0UHJldmlvdXNTaWJsaW5nKCksZT0oWih0KXx8Vyh0KSYmdC5pc0lubGluZSgpKSYmIXQuY2FuSW5zZXJ0VGV4dEFmdGVyKCkpLGUpOmU9PT10LmdldFRleHRDb250ZW50U2l6ZSgpPyF0LmNhbkluc2VydFRleHRBZnRlcigpfHwhbi5jYW5JbnNlcnRUZXh0QWZ0ZXIoKXx8cjohMX1mdW5jdGlvbiBWcyhlLHQpe2UuX19sZXhpY2FsQ2xhc3NOYW1lQ2FjaGU9PT12b2lkIDAmJihlLl9fbGV4aWNhbENsYXNzTmFtZUNhY2hlPXt9KTtsZXQgbj1lLl9fbGV4aWNhbENsYXNzTmFtZUNhY2hlLHI9blt0XTtyZXR1cm4gciE9PXZvaWQgMD9yOihlPWVbdF0sdHlwZW9mIGU9PSJzdHJpbmciPyhlPWUuc3BsaXQoIiAiKSxuW3RdPWUpOmUpfWZ1bmN0aW9uIGNtKGUsdCxuLHIsbyl7bi5zaXplIT09MCYmKG49ci5fX3R5cGUscj1yLl9fa2V5LHQ9dC5nZXQobiksdD09PXZvaWQgMCYmSygzMyxuKSxuPXQua2xhc3MsdD1lLmdldChuKSx0PT09dm9pZCAwJiYodD1uZXcgTWFwLGUuc2V0KG4sdCkpLGU9dC5nZXQociksbj1lPT09ImRlc3Ryb3llZCImJm89PT0iY3JlYXRlZCIsKGU9PT12b2lkIDB8fG4pJiZ0LnNldChyLG4/InVwZGF0ZWQiOm8pKX1mdW5jdGlvbiBBeShlLHQsbil7bGV0IHI9ZS5nZXRQYXJlbnQoKSxvPW47cmV0dXJuIHIhPT1udWxsJiYodCYmbj09PTA/KG89ZS5nZXRJbmRleFdpdGhpblBhcmVudCgpLGU9cik6dHx8biE9PWUuZ2V0Q2hpbGRyZW5TaXplKCl8fChvPWUuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSsxLGU9cikpLGUuZ2V0Q2hpbGRBdEluZGV4KHQ/by0xOm8pfWZ1bmN0aW9uIGxwKGUsdCl7dmFyIG49ZS5vZmZzZXQ7cmV0dXJuIGUudHlwZT09PSJlbGVtZW50Ij8oZT1lLmdldE5vZGUoKSxBeShlLHQsbikpOihlPWUuZ2V0Tm9kZSgpLHQmJm49PT0wfHwhdCYmbj09PWUuZ2V0VGV4dENvbnRlbnRTaXplKCk/KG49dD9lLmdldFByZXZpb3VzU2libGluZygpOmUuZ2V0TmV4dFNpYmxpbmcoKSxuPT09bnVsbD9BeShlLmdldFBhcmVudE9yVGhyb3coKSx0LGUuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSsodD8wOjEpKTpuKTpudWxsKX1mdW5jdGlvbiBYXyhlKXtyZXR1cm4gZT0oZT1DZChlKS5ldmVudCkmJmUuaW5wdXRUeXBlLGU9PT0iaW5zZXJ0RnJvbVBhc3RlInx8ZT09PSJpbnNlcnRGcm9tUGFzdGVBc1F1b3RhdGlvbiJ9ZnVuY3Rpb24gRGMoZSl7cmV0dXJuIXJuKGUpJiYhZS5pc0xhc3RDaGlsZCgpJiYhZS5pc0lubGluZSgpfWZ1bmN0aW9uIEljKGUsdCl7cmV0dXJuIGU9ZS5fa2V5VG9ET01NYXAuZ2V0KHQpLGU9PT12b2lkIDAmJksoNzUsdCksZX1mdW5jdGlvbiBFZChlKXtyZXR1cm4gZT1lLmFzc2lnbmVkU2xvdHx8ZS5wYXJlbnRFbGVtZW50LGUhPT1udWxsJiZlLm5vZGVUeXBlPT09MTE/ZS5ob3N0OmV9ZnVuY3Rpb24gamMoZSx0KXtmb3IoZT1lLmdldFBhcmVudCgpO2UhPT1udWxsOyl7aWYoZS5pcyh0KSlyZXR1cm4hMDtlPWUuZ2V0UGFyZW50KCl9cmV0dXJuITF9ZnVuY3Rpb24gQ2QoZSl7cmV0dXJuIGU9ZS5fd2luZG93LGU9PT1udWxsJiZLKDc4KSxlfWZ1bmN0aW9uIFFfKGUpe2ZvcihlPWUuZ2V0UGFyZW50T3JUaHJvdygpO2UhPT1udWxsJiYhb3IoZSk7KWU9ZS5nZXRQYXJlbnRPclRocm93KCk7cmV0dXJuIGV9ZnVuY3Rpb24gb3IoZSl7cmV0dXJuIHJuKGUpfHxXKGUpJiZlLmlzU2hhZG93Um9vdCgpfWZ1bmN0aW9uIEpfKGUpe3JldHVybiBlPWUuY29uc3RydWN0b3IuY2xvbmUoZSksSF8oZSxudWxsKSxlfWZ1bmN0aW9uIFZhKGUpe3ZhciB0PW90KCk7bGV0IG49ZS5jb25zdHJ1Y3Rvci5nZXRUeXBlKCk7cmV0dXJuIHQ9dC5fbm9kZXMuZ2V0KG4pLHQ9PT12b2lkIDAmJksoOTcpLHQ9dC5yZXBsYWNlLHQhPT1udWxsPyh0PXQoZSksdCBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3J8fEsoOTgpLHQpOmV9ZnVuY3Rpb24ga2YoZSx0KXtlPWUuZ2V0UGFyZW50KCksIXJuKGUpfHxXKHQpfHxLZSh0KXx8Syg5OSl9ZnVuY3Rpb24gYmYoZSl7cmV0dXJuKEtlKGUpfHxXKGUpJiYhZS5jYW5CZUVtcHR5KCkpJiYhZS5pc0lubGluZSgpfWZ1bmN0aW9uIHNwKGUsdCxuKXtuLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJjYXJldC1jb2xvciIpLHQuX2Jsb2NrQ3Vyc29yRWxlbWVudD1udWxsLHQ9ZS5wYXJlbnRFbGVtZW50LHQhPT1udWxsJiZ0LnJlbW92ZUNoaWxkKGUpfWZ1bmN0aW9uIFByKGUpe3JldHVybiBlbz8oZXx8d2luZG93KS5nZXRTZWxlY3Rpb24oKTpudWxsfWZ1bmN0aW9uIFpfKGUsdCl7bGV0IG49ZS5nZXRDaGlsZEF0SW5kZXgodCk7bj09bnVsbCYmKG49ZSksb3IoZSkmJksoMTAyKTtsZXQgcj1sPT57Y29uc3Qgcz1sLmdldFBhcmVudE9yVGhyb3coKSxhPW9yKHMpLHU9bCE9PW58fGE/Sl8obCk6bDtpZihhKXJldHVybiBsLmluc2VydEFmdGVyKHUpLFtsLHUsdV07Y29uc3RbYyxkLGZdPXIocyk7cmV0dXJuIGw9bC5nZXROZXh0U2libGluZ3MoKSxmLmFwcGVuZCh1LC4uLmwpLFtjLGQsdV19LFtvLGldPXIobik7cmV0dXJuW28saV19ZnVuY3Rpb24gemMoZSx0KXtmb3IoO2UhPT1ScigpJiZlIT1udWxsOyl7aWYodChlKSlyZXR1cm4gZTtlPWUuZ2V0UGFyZW50KCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gVzIoZSl7bGV0IHQ9W10sbj1bZV07Zm9yKDswPG4ubGVuZ3RoOyl7bGV0IHI9bi5wb3AoKTtyPT09dm9pZCAwJiZLKDExMiksVyhyKSYmbi51bnNoaWZ0KC4uLnIuZ2V0Q2hpbGRyZW4oKSksciE9PWUmJnQucHVzaChyKX1yZXR1cm4gdH1mdW5jdGlvbiAkZChlKXtyZXR1cm4gZS5ub2RlVHlwZT09PTF9ZnVuY3Rpb24gcV8oZSx0LG4scixvLGkpe2ZvcihlPWUuZ2V0Rmlyc3RDaGlsZCgpO2UhPT1udWxsOyl7bGV0IGw9ZS5fX2tleTtlLl9fcGFyZW50PT09dCYmKFcoZSkmJnFfKGUsbCxuLHIsbyxpKSxuLmhhcyhsKXx8aS5kZWxldGUobCksby5wdXNoKGwpKSxlPWUuZ2V0TmV4dFNpYmxpbmcoKX19ZnVuY3Rpb24gVTIoZSx0LG4scil7ZT1lLl9ub2RlTWFwLHQ9dC5fbm9kZU1hcDtsZXQgbz1bXTtmb3IobGV0W2ldb2Ygcil7bGV0IGw9dC5nZXQoaSk7bD09PXZvaWQgMHx8bC5pc0F0dGFjaGVkKCl8fChXKGwpJiZxXyhsLGksZSx0LG8sciksZS5oYXMoaSl8fHIuZGVsZXRlKGkpLG8ucHVzaChpKSl9Zm9yKGxldCBpIG9mIG8pdC5kZWxldGUoaSk7Zm9yKGxldCBpIG9mIG4pcj10LmdldChpKSxyPT09dm9pZCAwfHxyLmlzQXR0YWNoZWQoKXx8KGUuaGFzKGkpfHxuLmRlbGV0ZShpKSx0LmRlbGV0ZShpKSl9bGV0IHh0PSIiLGVuPSIiLEZyPSIiLElvLFZ0LEVhLGVTPSExLGRtPSExLGtkLFh1PW51bGwsYXAsdXAseGksam8sY3AsQ2E7ZnVuY3Rpb24gUXUoZSx0KXtsZXQgbj14aS5nZXQoZSk7aWYodCE9PW51bGwpe2xldCByPWhwKGUpO3IucGFyZW50Tm9kZT09PXQmJnQucmVtb3ZlQ2hpbGQocil9am8uaGFzKGUpfHxWdC5fa2V5VG9ET01NYXAuZGVsZXRlKGUpLFcobikmJihlPUZjKG4seGkpLGRwKGUsMCxlLmxlbmd0aC0xLG51bGwpKSxuIT09dm9pZCAwJiZjbShDYSxFYSxrZCxuLCJkZXN0cm95ZWQiKX1mdW5jdGlvbiBkcChlLHQsbixyKXtmb3IoO3Q8PW47Kyt0KXtsZXQgbz1lW3RdO28hPT12b2lkIDAmJlF1KG8scil9fWZ1bmN0aW9uIFpvKGUsdCl7ZS5zZXRQcm9wZXJ0eSgidGV4dC1hbGlnbiIsdCl9ZnVuY3Rpb24gdFMoZSx0KXt2YXIgbj1Jby50aGVtZS5pbmRlbnQ7aWYodHlwZW9mIG49PSJzdHJpbmciKXtsZXQgcj1lLmNsYXNzTGlzdC5jb250YWlucyhuKTswPHQmJiFyP2UuY2xhc3NMaXN0LmFkZChuKToxPnQmJnImJmUuY2xhc3NMaXN0LnJlbW92ZShuKX1uPWdldENvbXB1dGVkU3R5bGUoZSkuZ2V0UHJvcGVydHlWYWx1ZSgiLS1sZXhpY2FsLWluZGVudC1iYXNlLXZhbHVlIil8fCI0MHB4IixlLnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWlubGluZS1zdGFydCIsdD09PTA/IiI6YGNhbGMoJHt0fSAqICR7bn0pYCl9ZnVuY3Rpb24gblMoZSx0KXtlPWUuc3R5bGUsdD09PTA/Wm8oZSwiIik6dD09PTE/Wm8oZSwibGVmdCIpOnQ9PT0yP1pvKGUsImNlbnRlciIpOnQ9PT0zP1pvKGUsInJpZ2h0Iik6dD09PTQ/Wm8oZSwianVzdGlmeSIpOnQ9PT01P1pvKGUsInN0YXJ0Iik6dD09PTYmJlpvKGUsImVuZCIpfWZ1bmN0aW9uIEp1KGUsdCxuKXtsZXQgcj1qby5nZXQoZSk7cj09PXZvaWQgMCYmSyg2MCk7bGV0IG89ci5jcmVhdGVET00oSW8sVnQpO3ZhciBpPVZ0Ll9rZXlUb0RPTU1hcDtpZihvWyJfX2xleGljYWxLZXlfIitWdC5fa2V5XT1lLGkuc2V0KGUsbyksWihyKT9vLnNldEF0dHJpYnV0ZSgiZGF0YS1sZXhpY2FsLXRleHQiLCJ0cnVlIik6S2UocikmJm8uc2V0QXR0cmlidXRlKCJkYXRhLWxleGljYWwtZGVjb3JhdG9yIiwidHJ1ZSIpLFcocikpe2lmKGU9ci5fX2luZGVudCxpPXIuX19zaXplLGUhPT0wJiZ0UyhvLGUpLGkhPT0wKXstLWksZT1GYyhyLGpvKTt2YXIgbD1lbjtlbj0iIixmcChlLHIsMCxpLG8sbnVsbCksb1MocixvKSxlbj1sfWU9ci5fX2Zvcm1hdCxlIT09MCYmblMobyxlKSxyLmlzSW5saW5lKCl8fHJTKG51bGwscixvKSxEYyhyKSYmKHh0Kz1gCgpgLEZyKz1gCgpgKX1lbHNlIGk9ci5nZXRUZXh0Q29udGVudCgpLEtlKHIpPyhsPXIuZGVjb3JhdGUoVnQsSW8pLGwhPT1udWxsJiZpUyhlLGwpLG8uY29udGVudEVkaXRhYmxlPSJmYWxzZSIpOloocikmJihyLmlzRGlyZWN0aW9ubGVzcygpfHwoZW4rPWkpKSx4dCs9aSxGcis9aTtyZXR1cm4gdCE9PW51bGwmJihuIT1udWxsP3QuaW5zZXJ0QmVmb3JlKG8sbik6KG49dC5fX2xleGljYWxMaW5lQnJlYWssbiE9bnVsbD90Lmluc2VydEJlZm9yZShvLG4pOnQuYXBwZW5kQ2hpbGQobykpKSxjbShDYSxFYSxrZCxyLCJjcmVhdGVkIiksb31mdW5jdGlvbiBmcChlLHQsbixyLG8saSl7bGV0IGw9eHQ7Zm9yKHh0PSIiO248PXI7KytuKUp1KGVbbl0sbyxpKTtEYyh0KSYmKHh0Kz1gCgpgKSxvLl9fbGV4aWNhbFRleHRDb250ZW50PXh0LHh0PWwreHR9ZnVuY3Rpb24gTXkoZSx0KXtyZXR1cm4gZT10LmdldChlKSxrYShlKXx8S2UoZSkmJmUuaXNJbmxpbmUoKX1mdW5jdGlvbiByUyhlLHQsbil7ZT1lIT09bnVsbCYmKGUuX19zaXplPT09MHx8TXkoZS5fX2xhc3QseGkpKSx0PXQuX19zaXplPT09MHx8TXkodC5fX2xhc3Qsam8pLGU/dHx8KHQ9bi5fX2xleGljYWxMaW5lQnJlYWssdCE9bnVsbCYmbi5yZW1vdmVDaGlsZCh0KSxuLl9fbGV4aWNhbExpbmVCcmVhaz1udWxsKTp0JiYodD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpLG4uX19sZXhpY2FsTGluZUJyZWFrPXQsbi5hcHBlbmRDaGlsZCh0KSl9ZnVuY3Rpb24gb1MoZSx0KXt2YXIgbj10Ll9fbGV4aWNhbERpcjtpZih0Ll9fbGV4aWNhbERpclRleHRDb250ZW50IT09ZW58fG4hPT1YdSl7bGV0IGk9ZW49PT0iIjtpZihpKXZhciByPVh1O2Vsc2Ugcj1lbixyPVIyLnRlc3Qocik/InJ0bCI6UDIudGVzdChyKT8ibHRyIjpudWxsO2lmKHIhPT1uKXtsZXQgbD10LmNsYXNzTGlzdCxzPUlvLnRoZW1lO3ZhciBvPW4hPT1udWxsP3Nbbl06dm9pZCAwO2xldCBhPXIhPT1udWxsP3Nbcl06dm9pZCAwO28hPT12b2lkIDAmJih0eXBlb2Ygbz09InN0cmluZyImJihvPW8uc3BsaXQoIiAiKSxvPXNbbl09byksbC5yZW1vdmUoLi4ubykpLHI9PT1udWxsfHxpJiZyPT09Imx0ciI/dC5yZW1vdmVBdHRyaWJ1dGUoImRpciIpOihhIT09dm9pZCAwJiYodHlwZW9mIGE9PSJzdHJpbmciJiYobj1hLnNwbGl0KCIgIiksYT1zW3JdPW4pLGEhPT12b2lkIDAmJmwuYWRkKC4uLmEpKSx0LmRpcj1yKSxkbXx8KGUuZ2V0V3JpdGFibGUoKS5fX2Rpcj1yKX1YdT1yLHQuX19sZXhpY2FsRGlyVGV4dENvbnRlbnQ9ZW4sdC5fX2xleGljYWxEaXI9cn19ZnVuY3Rpb24gRmMoZSx0KXtsZXQgbj1bXTtmb3IoZT1lLl9fZmlyc3Q7ZSE9PW51bGw7KXtsZXQgcj10LmdldChlKTtyPT09dm9pZCAwJiZLKDEwMSksbi5wdXNoKGUpLGU9ci5fX25leHR9cmV0dXJuIG59ZnVuY3Rpb24gYnMoZSx0KXt2YXIgbj14aS5nZXQoZSkscj1qby5nZXQoZSk7biE9PXZvaWQgMCYmciE9PXZvaWQgMHx8Syg2MSk7dmFyIG89ZVN8fHVwLmhhcyhlKXx8YXAuaGFzKGUpO2xldCBpPUljKFZ0LGUpO2lmKG49PT1yJiYhbylyZXR1cm4gVyhuKT8ocj1pLl9fbGV4aWNhbFRleHRDb250ZW50LHIhPT12b2lkIDAmJih4dCs9cixGcis9cikscj1pLl9fbGV4aWNhbERpclRleHRDb250ZW50LHIhPT12b2lkIDAmJihlbis9cikpOihyPW4uZ2V0VGV4dENvbnRlbnQoKSxaKG4pJiYhbi5pc0RpcmVjdGlvbmxlc3MoKSYmKGVuKz1yKSxGcis9cix4dCs9ciksaTtpZihuIT09ciYmbyYmY20oQ2EsRWEsa2QsciwidXBkYXRlZCIpLHIudXBkYXRlRE9NKG4saSxJbykpcmV0dXJuIHI9SnUoZSxudWxsLG51bGwpLHQ9PT1udWxsJiZLKDYyKSx0LnJlcGxhY2VDaGlsZChyLGkpLFF1KGUsbnVsbCkscjtpZihXKG4pJiZXKHIpKXtpZihlPXIuX19pbmRlbnQsZSE9PW4uX19pbmRlbnQmJnRTKGksZSksZT1yLl9fZm9ybWF0LGUhPT1uLl9fZm9ybWF0JiZuUyhpLGUpLG8pe2U9cixvPWVuLGVuPSIiLHQ9eHQ7dmFyIGw9bi5fX3NpemUscz1lLl9fc2l6ZTtpZih4dD0iIixsPT09MSYmcz09PTEpe3ZhciBhPW4uX19maXJzdCx1PWUuX19maXJzdDtpZihhPT09dSlicyhhLGkpO2Vsc2V7dmFyIGM9aHAoYSk7dT1KdSh1LG51bGwsbnVsbCksaS5yZXBsYWNlQ2hpbGQodSxjKSxRdShhLG51bGwpfX1lbHNle3U9RmMobix4aSk7dmFyIGQ9RmMoZSxqbyk7aWYobD09PTApcyE9PTAmJmZwKGQsZSwwLHMtMSxpLG51bGwpO2Vsc2UgaWYocz09PTApbCE9PTAmJihhPWkuX19sZXhpY2FsTGluZUJyZWFrPT1udWxsLGRwKHUsMCxsLTEsYT9udWxsOmkpLGEmJihpLnRleHRDb250ZW50PSIiKSk7ZWxzZXt2YXIgZj11O3U9ZCxkPWwtMSxsPXMtMTtsZXQgbT1pLmZpcnN0Q2hpbGQsZz0wO2ZvcihzPTA7Zzw9ZCYmczw9bDspe3ZhciBoPWZbZ107bGV0IF89dVtzXTtpZihoPT09XyltPVRmKGJzKF8saSkpLGcrKyxzKys7ZWxzZXthPT09dm9pZCAwJiYoYT1uZXcgU2V0KGYpKSxjPT09dm9pZCAwJiYoYz1uZXcgU2V0KHUpKTtsZXQgdj1jLmhhcyhoKSx5PWEuaGFzKF8pO3Y/KHk/KGg9SWMoVnQsXyksaD09PW0/bT1UZihicyhfLGkpKToobSE9bnVsbD9pLmluc2VydEJlZm9yZShoLG0pOmkuYXBwZW5kQ2hpbGQoaCksYnMoXyxpKSksZysrKTpKdShfLGksbSkscysrKToobT1UZihocChoKSksUXUoaCxpKSxnKyspfX1hPWc+ZCxjPXM+bCxhJiYhYz8oYT11W2wrMV0sYT1hPT09dm9pZCAwP251bGw6VnQuZ2V0RWxlbWVudEJ5S2V5KGEpLGZwKHUsZSxzLGwsaSxhKSk6YyYmIWEmJmRwKGYsZyxkLGkpfX1EYyhlKSYmKHh0Kz1gCgpgKSxpLl9fbGV4aWNhbFRleHRDb250ZW50PXh0LHh0PXQreHQsb1MoZSxpKSxlbj1vLHJuKHIpfHxyLmlzSW5saW5lKCl8fHJTKG4scixpKX1EYyhyKSYmKHh0Kz1gCgpgLEZyKz1gCgpgKX1lbHNlIG49ci5nZXRUZXh0Q29udGVudCgpLEtlKHIpPyhvPXIuZGVjb3JhdGUoVnQsSW8pLG8hPT1udWxsJiZpUyhlLG8pKTpaKHIpJiYhci5pc0RpcmVjdGlvbmxlc3MoKSYmKGVuKz1uKSx4dCs9bixGcis9bjtyZXR1cm4hZG0mJnJuKHIpJiZyLl9fY2FjaGVkVGV4dCE9PUZyJiYocj1yLmdldFdyaXRhYmxlKCksci5fX2NhY2hlZFRleHQ9RnIpLGl9ZnVuY3Rpb24gaVMoZSx0KXtsZXQgbj1WdC5fcGVuZGluZ0RlY29yYXRvcnMscj1WdC5fZGVjb3JhdG9ycztpZihuPT09bnVsbCl7aWYocltlXT09PXQpcmV0dXJuO249S18oVnQpfW5bZV09dH1mdW5jdGlvbiBUZihlKXtyZXR1cm4gZT1lLm5leHRTaWJsaW5nLGUhPT1udWxsJiZlPT09VnQuX2Jsb2NrQ3Vyc29yRWxlbWVudCYmKGU9ZS5uZXh0U2libGluZyksZX1mdW5jdGlvbiBocChlKXtsZXQgdD1jcC5nZXQoZSk7cmV0dXJuIHQ9PT12b2lkIDAmJksoNzUsZSksdH1sZXQgTHI9T2JqZWN0LmZyZWV6ZSh7fSkscHA9W1sia2V5ZG93biIsSjJdLFsicG9pbnRlcmRvd24iLFYyXSxbImNvbXBvc2l0aW9uc3RhcnQiLFgyXSxbImNvbXBvc2l0aW9uZW5kIixRMl0sWyJpbnB1dCIsWTJdLFsiY2xpY2siLEgyXSxbImN1dCIsTHJdLFsiY29weSIsTHJdLFsiZHJhZ3N0YXJ0IixMcl0sWyJkcmFnb3ZlciIsTHJdLFsiZHJhZ2VuZCIsTHJdLFsicGFzdGUiLExyXSxbImZvY3VzIixMcl0sWyJibHVyIixMcl0sWyJkcm9wIixMcl1dO0FjJiZwcC5wdXNoKFsiYmVmb3JlaW5wdXQiLChlLHQpPT5HMihlLHQpXSk7bGV0ICRhPTAsbFM9MCxzUz0wLFlpPW51bGwsS3M9MCxncD0hMSxtcD0hMSxHcz0hMSxUcz0hMSxhUz1bMCwiIiwwLCJyb290IiwwXTtmdW5jdGlvbiB1UyhlLHQsbixyLG8pe2xldCBpPWUuYW5jaG9yLGw9ZS5mb2N1cyxzPWkuZ2V0Tm9kZSgpO3ZhciBhPW90KCk7bGV0IHU9UHIoYS5fd2luZG93KSxjPXUhPT1udWxsP3UuYW5jaG9yTm9kZTpudWxsLGQ9aS5rZXk7YT1hLmdldEVsZW1lbnRCeUtleShkKTtsZXQgZj1uLmxlbmd0aDtyZXR1cm4gZCE9PWwua2V5fHwhWihzKXx8KCFvJiYoIUFjfHxzUzxyKzUwKXx8cy5pc0RpcnR5KCkmJjI+Znx8R18obikpJiZpLm9mZnNldCE9PWwub2Zmc2V0JiYhcy5pc0NvbXBvc2luZygpfHxpcChzKXx8cy5pc0RpcnR5KCkmJjE8Znx8KG98fCFBYykmJmEhPT1udWxsJiYhcy5pc0NvbXBvc2luZygpJiZjIT09TWMoYSl8fHUhPT1udWxsJiZ0IT09bnVsbCYmKCF0LmNvbGxhcHNlZHx8dC5zdGFydENvbnRhaW5lciE9PXUuYW5jaG9yTm9kZXx8dC5zdGFydE9mZnNldCE9PXUuYW5jaG9yT2Zmc2V0KXx8cy5nZXRGb3JtYXQoKSE9PWUuZm9ybWF0fHxzLmdldFN0eWxlKCkhPT1lLnN0eWxlfHxCMihlLHMpfWZ1bmN0aW9uIEx5KGUsdCl7cmV0dXJuIGUhPT1udWxsJiZlLm5vZGVWYWx1ZSE9PW51bGwmJmUubm9kZVR5cGU9PT0zJiZ0IT09MCYmdCE9PWUubm9kZVZhbHVlLmxlbmd0aH1mdW5jdGlvbiBEeShlLHQsbil7bGV0e2FuY2hvck5vZGU6cixhbmNob3JPZmZzZXQ6byxmb2N1c05vZGU6aSxmb2N1c09mZnNldDpsfT1lO2dwJiYoZ3A9ITEsTHkocixvKSYmTHkoaSxsKSl8fFJuKHQsKCk9PntpZighbilrcihudWxsKTtlbHNlIGlmKFVhKHQscixpKSl7dmFyIHM9WWUoKTtpZihmZShzKSl7dmFyIGE9cy5hbmNob3IsdT1hLmdldE5vZGUoKTtpZihzLmlzQ29sbGFwc2VkKCkpe2UudHlwZT09PSJSYW5nZSImJmUuYW5jaG9yTm9kZT09PWUuZm9jdXNOb2RlJiYocy5kaXJ0eT0hMCk7dmFyIGM9Q2QodCkuZXZlbnQ7Yz1jP2MudGltZVN0YW1wOnBlcmZvcm1hbmNlLm5vdygpO2xldFtkLGYsaCxtLGddPWFTO2M8ZysyMDAmJmEub2Zmc2V0PT09aCYmYS5rZXk9PT1tPyhzLmZvcm1hdD1kLHMuc3R5bGU9Zik6YS50eXBlPT09InRleHQiPyhzLmZvcm1hdD11LmdldEZvcm1hdCgpLHMuc3R5bGU9dS5nZXRTdHlsZSgpKTphLnR5cGU9PT0iZWxlbWVudCImJihzLmZvcm1hdD0wLHMuc3R5bGU9IiIpfWVsc2V7YT0yNTUsdT0hMSxjPXMuZ2V0Tm9kZXMoKTtsZXQgZD1jLmxlbmd0aDtmb3IobGV0IGY9MDtmPGQ7ZisrKXtsZXQgaD1jW2ZdO2lmKFooaCkmJih1PSEwLGEmPWguZ2V0Rm9ybWF0KCksYT09PTApKWJyZWFrfXMuZm9ybWF0PXU/YTowfX1KKHQsd2Qsdm9pZCAwKX19KX1mdW5jdGlvbiBIMihlLHQpe1JuKHQsKCk9PntsZXQgbj1ZZSgpO3ZhciByPVByKHQuX3dpbmRvdyk7bGV0IG89WWwoKTtpZihyKWlmKGZlKG4pKXtsZXQgbD1uLmFuY2hvcjt2YXIgaT1sLmdldE5vZGUoKTtsLnR5cGU9PT0iZWxlbWVudCImJmwub2Zmc2V0PT09MCYmbi5pc0NvbGxhcHNlZCgpJiYhcm4oaSkmJlJyKCkuZ2V0Q2hpbGRyZW5TaXplKCk9PT0xJiZpLmdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKS5pc0VtcHR5KCkmJm8hPT1udWxsJiZuLmlzKG8pPyhyLnJlbW92ZUFsbFJhbmdlcygpLG4uZGlydHk9ITApOmUuZGV0YWlsIT09M3x8bi5pc0NvbGxhcHNlZCgpfHwocj1uLmZvY3VzLmdldE5vZGUoKSxpIT09ciYmKFcoaSk/aS5zZWxlY3QoMCk6aS5nZXRQYXJlbnRPclRocm93KCkuc2VsZWN0KDApKSl9ZWxzZSBlLnBvaW50ZXJUeXBlPT09InRvdWNoIiYmKGk9ci5hbmNob3JOb2RlLGkhPT1udWxsJiYoaT1pLm5vZGVUeXBlLGk9PT0xfHxpPT09MykpJiYocj1obShvLHIsdCksa3IocikpO0oodCx5XyxlKX0pfWZ1bmN0aW9uIFYyKGUsdCl7bGV0IG49ZS50YXJnZXQ7ZT1lLnBvaW50ZXJUeXBlLG4gaW5zdGFuY2VvZiBOb2RlJiZlIT09InRvdWNoIiYmUm4odCwoKT0+e0tlKEhhKG4pKXx8KG1wPSEwKX0pfWZ1bmN0aW9uIGNTKGUpe3JldHVybiBlLmdldFRhcmdldFJhbmdlcz8oZT1lLmdldFRhcmdldFJhbmdlcygpLGUubGVuZ3RoPT09MD9udWxsOmVbMF0pOm51bGx9ZnVuY3Rpb24gSzIoZSx0KXtyZXR1cm4gZSE9PXR8fFcoZSl8fFcodCl8fCFlLmlzVG9rZW4oKXx8IXQuaXNUb2tlbigpfWZ1bmN0aW9uIEcyKGUsdCl7bGV0IG49ZS5pbnB1dFR5cGUscj1jUyhlKTtuPT09ImRlbGV0ZUNvbXBvc2l0aW9uVGV4dCJ8fERvJiZYXyh0KXx8biE9PSJpbnNlcnRDb21wb3NpdGlvblRleHQiJiZSbih0LCgpPT57bGV0IG89WWUoKTtpZihuPT09ImRlbGV0ZUNvbnRlbnRCYWNrd2FyZCIpe2lmKG89PT1udWxsKXt2YXIgaT1ZbCgpO2lmKCFmZShpKSlyZXR1cm47a3IoaS5jbG9uZSgpKX1pZihmZShvKSl7bFM9PT0yMjkmJmUudGltZVN0YW1wPCRhKzMwJiZ0LmlzQ29tcG9zaW5nKCkmJm8uYW5jaG9yLmtleT09PW8uZm9jdXMua2V5PyhEdChudWxsKSwkYT0wLHNldFRpbWVvdXQoKCk9PntSbih0LCgpPT57RHQobnVsbCl9KX0sMzApLGZlKG8pJiYoaT1vLmFuY2hvci5nZXROb2RlKCksaS5tYXJrRGlydHkoKSxvLmZvcm1hdD1pLmdldEZvcm1hdCgpLG8uc3R5bGU9aS5nZXRTdHlsZSgpKSk6KGUucHJldmVudERlZmF1bHQoKSxKKHQsd2EsITApKTtyZXR1cm59fWlmKGZlKG8pKXtpPWUuZGF0YSxZaSE9PW51bGwmJmFtKCExLHQsWWkpLG8uZGlydHkmJllpPT09bnVsbHx8IW8uaXNDb2xsYXBzZWQoKXx8cm4oby5hbmNob3IuZ2V0Tm9kZSgpKXx8cj09PW51bGx8fG8uYXBwbHlET01SYW5nZShyKSxZaT1udWxsO3ZhciBsPW8uZm9jdXMscz1vLmFuY2hvci5nZXROb2RlKCk7aWYobD1sLmdldE5vZGUoKSxuPT09Imluc2VydFRleHQifHxuPT09Imluc2VydFRyYW5zcG9zZSIpaT09PWAKYD8oZS5wcmV2ZW50RGVmYXVsdCgpLEoodCxIcywhMSkpOmk9PT1gCgpgPyhlLnByZXZlbnREZWZhdWx0KCksSih0LHRwLHZvaWQgMCkpOmk9PW51bGwmJmUuZGF0YVRyYW5zZmVyPyhpPWUuZGF0YVRyYW5zZmVyLmdldERhdGEoInRleHQvcGxhaW4iKSxlLnByZXZlbnREZWZhdWx0KCksby5pbnNlcnRSYXdUZXh0KGkpKTppIT1udWxsJiZ1UyhvLHIsaSxlLnRpbWVTdGFtcCwhMCk/KGUucHJldmVudERlZmF1bHQoKSxKKHQsdmwsaSkpOllpPWksc1M9ZS50aW1lU3RhbXA7ZWxzZSBzd2l0Y2goZS5wcmV2ZW50RGVmYXVsdCgpLG4pe2Nhc2UiaW5zZXJ0RnJvbVlhbmsiOmNhc2UiaW5zZXJ0RnJvbURyb3AiOmNhc2UiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0IjpKKHQsdmwsZSk7YnJlYWs7Y2FzZSJpbnNlcnRGcm9tQ29tcG9zaXRpb24iOkR0KG51bGwpLEoodCx2bCxlKTticmVhaztjYXNlImluc2VydExpbmVCcmVhayI6RHQobnVsbCksSih0LEhzLCExKTticmVhaztjYXNlImluc2VydFBhcmFncmFwaCI6RHQobnVsbCksR3MmJiFfZD8oR3M9ITEsSih0LEhzLCExKSk6Sih0LHRwLHZvaWQgMCk7YnJlYWs7Y2FzZSJpbnNlcnRGcm9tUGFzdGUiOmNhc2UiaW5zZXJ0RnJvbVBhc3RlQXNRdW90YXRpb24iOkoodCxRZyxlKTticmVhaztjYXNlImRlbGV0ZUJ5Q29tcG9zaXRpb24iOksyKHMsbCkmJkoodCxucCxlKTticmVhaztjYXNlImRlbGV0ZUJ5RHJhZyI6Y2FzZSJkZWxldGVCeUN1dCI6Sih0LG5wLGUpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudCI6Sih0LHdhLCExKTticmVhaztjYXNlImRlbGV0ZVdvcmRCYWNrd2FyZCI6Sih0LF9hLCEwKTticmVhaztjYXNlImRlbGV0ZVdvcmRGb3J3YXJkIjpKKHQsX2EsITEpO2JyZWFrO2Nhc2UiZGVsZXRlSGFyZExpbmVCYWNrd2FyZCI6Y2FzZSJkZWxldGVTb2Z0TGluZUJhY2t3YXJkIjpKKHQsU2EsITApO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEZvcndhcmQiOmNhc2UiZGVsZXRlSGFyZExpbmVGb3J3YXJkIjpjYXNlImRlbGV0ZVNvZnRMaW5lRm9yd2FyZCI6Sih0LFNhLCExKTticmVhaztjYXNlImZvcm1hdFN0cmlrZVRocm91Z2giOkoodCxfbywic3RyaWtldGhyb3VnaCIpO2JyZWFrO2Nhc2UiZm9ybWF0Qm9sZCI6Sih0LF9vLCJib2xkIik7YnJlYWs7Y2FzZSJmb3JtYXRJdGFsaWMiOkoodCxfbywiaXRhbGljIik7YnJlYWs7Y2FzZSJmb3JtYXRVbmRlcmxpbmUiOkoodCxfbywidW5kZXJsaW5lIik7YnJlYWs7Y2FzZSJoaXN0b3J5VW5kbyI6Sih0LEpnLHZvaWQgMCk7YnJlYWs7Y2FzZSJoaXN0b3J5UmVkbyI6Sih0LFpnLHZvaWQgMCl9fX0pfWZ1bmN0aW9uIFkyKGUsdCl7ZS5zdG9wUHJvcGFnYXRpb24oKSxSbih0LCgpPT57dmFyIG49WWUoKSxyPWUuZGF0YSxvPWNTKGUpO2lmKHIhPW51bGwmJmZlKG4pJiZ1UyhuLG8scixlLnRpbWVTdGFtcCwhMSkpe1RzJiYodnAodCxyKSxUcz0hMSk7dmFyIGk9bi5hbmNob3IsbD1pLmdldE5vZGUoKTtpZihvPVByKHQuX3dpbmRvdyksbz09PW51bGwpcmV0dXJuO2xldCBzPWkub2Zmc2V0OyhpPUFjJiYhbi5pc0NvbGxhcHNlZCgpJiZaKGwpJiZvLmFuY2hvck5vZGUhPT1udWxsKSYmKGw9bC5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAscykrcitsLmdldFRleHRDb250ZW50KCkuc2xpY2UocytuLmZvY3VzLm9mZnNldCksbz1vLmFuY2hvck5vZGUsaT1sPT09KG8ubm9kZVR5cGU9PT0zP28ubm9kZVZhbHVlOm51bGwpKSxpfHxKKHQsdmwscikscj1yLmxlbmd0aCxEbyYmMTxyJiZlLmlucHV0VHlwZT09PSJpbnNlcnRDb21wb3NpdGlvblRleHQiJiYhdC5pc0NvbXBvc2luZygpJiYobi5hbmNob3Iub2Zmc2V0LT1yKSx0bXx8X2R8fG5tfHwhdC5pc0NvbXBvc2luZygpfHwoJGE9MCxEdChudWxsKSl9ZWxzZSBhbSghMSx0LHIhPT1udWxsP3I6dm9pZCAwKSxUcyYmKHZwKHQscnx8dm9pZCAwKSxUcz0hMSk7dG4oKSxuPW90KCksel8obil9KSxZaT1udWxsfWZ1bmN0aW9uIFgyKGUsdCl7Um4odCwoKT0+e2xldCBuPVllKCk7aWYoZmUobikmJiF0LmlzQ29tcG9zaW5nKCkpe2xldCByPW4uYW5jaG9yLG89bi5hbmNob3IuZ2V0Tm9kZSgpO0R0KHIua2V5KSwoZS50aW1lU3RhbXA8JGErMzB8fHIudHlwZT09PSJlbGVtZW50Inx8IW4uaXNDb2xsYXBzZWQoKXx8by5nZXRGb3JtYXQoKSE9PW4uZm9ybWF0fHxvLmdldFN0eWxlKCkhPT1uLnN0eWxlKSYmSih0LHZsLE4yKX19KX1mdW5jdGlvbiB2cChlLHQpe3ZhciBuPWUuX2NvbXBvc2l0aW9uS2V5O2lmKER0KG51bGwpLG4hPT1udWxsJiZ0IT1udWxsKXtpZih0PT09IiIpe3Q9YnQobiksZT1NYyhlLmdldEVsZW1lbnRCeUtleShuKSksZSE9PW51bGwmJmUubm9kZVZhbHVlIT09bnVsbCYmWih0KSYmdW0odCxlLm5vZGVWYWx1ZSxudWxsLG51bGwsITApO3JldHVybn1pZih0W3QubGVuZ3RoLTFdPT09YApgJiYobj1ZZSgpLGZlKG4pKSl7dD1uLmZvY3VzLG4uYW5jaG9yLnNldCh0LmtleSx0Lm9mZnNldCx0LnR5cGUpLEooZSxPYyxudWxsKTtyZXR1cm59fWFtKCEwLGUsdCl9ZnVuY3Rpb24gUTIoZSx0KXtEbz9Ucz0hMDpSbih0LCgpPT57dnAodCxlLmRhdGEpfSl9ZnVuY3Rpb24gSjIoZSx0KXtpZigkYT1lLnRpbWVTdGFtcCxsUz1lLmtleUNvZGUsIXQuaXNDb21wb3NpbmcoKSl7dmFye2tleUNvZGU6bixzaGlmdEtleTpyLGN0cmxLZXk6byxtZXRhS2V5OmksYWx0S2V5Omx9PWU7aWYoIUoodCx4XyxlKSl7aWYobiE9PTM5fHxvfHxpfHxsKWlmKG4hPT0zOXx8bHx8cnx8IW8mJiFpKWlmKG4hPT0zN3x8b3x8aXx8bClpZihuIT09Mzd8fGx8fHJ8fCFvJiYhaSlpZihuIT09Mzh8fG98fGkpaWYobiE9PTQwfHxvfHxpKWlmKG49PT0xMyYmcilHcz0hMCxKKHQsT2MsZSk7ZWxzZSBpZihuPT09MzIpSih0LGtfLGUpO2Vsc2UgaWYoQnQmJm8mJm49PT03OSllLnByZXZlbnREZWZhdWx0KCksR3M9ITAsSih0LEhzLCEwKTtlbHNlIGlmKG4hPT0xM3x8cil7dmFyIHM9QnQ/bHx8aT8hMTpuPT09OHx8bj09PTcyJiZvOm98fGx8fGk/ITE6bj09PTg7cz9uPT09OD9KKHQsYl8sZSk6KGUucHJldmVudERlZmF1bHQoKSxKKHQsd2EsITApKTpuPT09Mjc/Sih0LFRfLGUpOihzPUJ0P3J8fGx8fGk/ITE6bj09PTQ2fHxuPT09NjgmJm86b3x8bHx8aT8hMTpuPT09NDYscz9uPT09NDY/Sih0LE5fLGUpOihlLnByZXZlbnREZWZhdWx0KCksSih0LHdhLCExKSk6bj09PTgmJihCdD9sOm8pPyhlLnByZXZlbnREZWZhdWx0KCksSih0LF9hLCEwKSk6bj09PTQ2JiYoQnQ/bDpvKT8oZS5wcmV2ZW50RGVmYXVsdCgpLEoodCxfYSwhMSkpOkJ0JiZpJiZuPT09OD8oZS5wcmV2ZW50RGVmYXVsdCgpLEoodCxTYSwhMCkpOkJ0JiZpJiZuPT09NDY/KGUucHJldmVudERlZmF1bHQoKSxKKHQsU2EsITEpKTpuPT09NjYmJiFsJiYoQnQ/aTpvKT8oZS5wcmV2ZW50RGVmYXVsdCgpLEoodCxfbywiYm9sZCIpKTpuPT09ODUmJiFsJiYoQnQ/aTpvKT8oZS5wcmV2ZW50RGVmYXVsdCgpLEoodCxfbywidW5kZXJsaW5lIikpOm49PT03MyYmIWwmJihCdD9pOm8pPyhlLnByZXZlbnREZWZhdWx0KCksSih0LF9vLCJpdGFsaWMiKSk6biE9PTl8fGx8fG98fGk/bj09PTkwJiYhciYmKEJ0P2k6byk/KGUucHJldmVudERlZmF1bHQoKSxKKHQsSmcsdm9pZCAwKSk6KHM9QnQ/bj09PTkwJiZpJiZyOm49PT04OSYmb3x8bj09PTkwJiZvJiZyLHM/KGUucHJldmVudERlZmF1bHQoKSxKKHQsWmcsdm9pZCAwKSk6R2wodC5fZWRpdG9yU3RhdGUuX3NlbGVjdGlvbik/KHM9cj8hMTpuPT09Njc/QnQ/aTpvOiExLHM/KGUucHJldmVudERlZmF1bHQoKSxKKHQscWcsZSkpOihzPXI/ITE6bj09PTg4P0J0P2k6bzohMSxzPyhlLnByZXZlbnREZWZhdWx0KCksSih0LGVtLGUpKTpuPT09NjUmJihCdD9pOm8pJiYoZS5wcmV2ZW50RGVmYXVsdCgpLEoodCxycCxlKSkpKTohRG8mJm49PT02NSYmKEJ0P2k6bykmJihlLnByZXZlbnREZWZhdWx0KCksSih0LHJwLGUpKSk6Sih0LFJfLGUpKX1lbHNlIEdzPSExLEoodCxPYyxlKTtlbHNlIEoodCwkXyxlKTtlbHNlIEoodCxDXyxlKTtlbHNlIEoodCxFXyxlKTtlbHNlIEoodCxTXyxlKTtlbHNlIEoodCxfXyxlKTtlbHNlIEoodCx3XyxlKTsob3x8cnx8bHx8aSkmJkoodCxJXyxlKX19fWZ1bmN0aW9uIGRTKGUpe2xldCB0PWUuX19sZXhpY2FsRXZlbnRIYW5kbGVzO3JldHVybiB0PT09dm9pZCAwJiYodD1bXSxlLl9fbGV4aWNhbEV2ZW50SGFuZGxlcz10KSx0fWxldCB5bD1uZXcgTWFwO2Z1bmN0aW9uIGZTKGUpe2U9ZS50YXJnZXQ7bGV0IHQ9UHIoZT09bnVsbD9udWxsOmUubm9kZVR5cGU9PT05P2UuZGVmYXVsdFZpZXc6ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KTtpZih0IT09bnVsbCl7dmFyIG49bG0odC5hbmNob3JOb2RlKTtpZihuIT09bnVsbCl7bXAmJihtcD0hMSxSbihuLCgpPT57dmFyIGw9WWwoKSxzPXQuYW5jaG9yTm9kZTtzIT09bnVsbCYmKHM9cy5ub2RlVHlwZSxzPT09MXx8cz09PTMpJiYobD1obShsLHQsbiksa3IobCkpfSkpLGU9c20obiksZT1lW2UubGVuZ3RoLTFdO3ZhciByPWUuX2tleSxvPXlsLmdldChyKSxpPW98fGU7aSE9PW4mJkR5KHQsaSwhMSksRHkodCxuLCEwKSxuIT09ZT95bC5zZXQocixuKTpvJiZ5bC5kZWxldGUocil9fX1mdW5jdGlvbiBaMihlLHQpe0tzPT09MCYmZS5vd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsZlMpLEtzKyssZS5fX2xleGljYWxFZGl0b3I9dDtsZXQgbj1kUyhlKTtmb3IobGV0IHI9MDtyPHBwLmxlbmd0aDtyKyspe2xldFtvLGldPXBwW3JdLGw9dHlwZW9mIGk9PSJmdW5jdGlvbiI/cz0+e3MuX2xleGljYWxIYW5kbGVkIT09ITAmJihzLl9sZXhpY2FsSGFuZGxlZD0hMCx0LmlzRWRpdGFibGUoKSYmaShzLHQpKX06cz0+e2lmKHMuX2xleGljYWxIYW5kbGVkIT09ITAmJihzLl9sZXhpY2FsSGFuZGxlZD0hMCx0LmlzRWRpdGFibGUoKSkpc3dpdGNoKG8pe2Nhc2UiY3V0IjpyZXR1cm4gSih0LGVtLHMpO2Nhc2UiY29weSI6cmV0dXJuIEoodCxxZyxzKTtjYXNlInBhc3RlIjpyZXR1cm4gSih0LFFnLHMpO2Nhc2UiZHJhZ3N0YXJ0IjpyZXR1cm4gSih0LE9fLHMpO2Nhc2UiZHJhZ292ZXIiOnJldHVybiBKKHQsQV8scyk7Y2FzZSJkcmFnZW5kIjpyZXR1cm4gSih0LE1fLHMpO2Nhc2UiZm9jdXMiOnJldHVybiBKKHQsTF8scyk7Y2FzZSJibHVyIjpyZXR1cm4gSih0LERfLHMpO2Nhc2UiZHJvcCI6cmV0dXJuIEoodCxQXyxzKX19O2UuYWRkRXZlbnRMaXN0ZW5lcihvLGwpLG4ucHVzaCgoKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLGwpfSl9fWZ1bmN0aW9uIHlwKGUsdCxuKXt0bigpO3ZhciByPWUuX19rZXk7bGV0IG89ZS5nZXRQYXJlbnQoKTtpZihvIT09bnVsbCl7dmFyIGk9WWUoKTtpZihmZShpKSYmVyhlKSl7dmFye2FuY2hvcjpsLGZvY3VzOnN9PWksYT1sLmdldE5vZGUoKSx1PXMuZ2V0Tm9kZSgpO2pjKGEsZSkmJmwuc2V0KGUuX19rZXksMCwiZWxlbWVudCIpLGpjKHUsZSkmJnMuc2V0KGUuX19rZXksMCwiZWxlbWVudCIpfWlmKGE9aSx1PSExLGZlKGEpJiZ0KXtpPWEuYW5jaG9yO2xldCBjPWEuZm9jdXM7aS5rZXk9PT1yJiYoV2MoaSxlLG8sZS5nZXRQcmV2aW91c1NpYmxpbmcoKSxlLmdldE5leHRTaWJsaW5nKCkpLHU9ITApLGMua2V5PT09ciYmKFdjKGMsZSxvLGUuZ2V0UHJldmlvdXNTaWJsaW5nKCksZS5nZXROZXh0U2libGluZygpKSx1PSEwKX1lbHNlIEdsKGEpJiZ0JiZlLmlzU2VsZWN0ZWQoKSYmZS5zZWxlY3RQcmV2aW91cygpO2ZlKGEpJiZ0JiYhdT8ocj1lLmdldEluZGV4V2l0aGluUGFyZW50KCksZGkoZSksQmMoYSxvLHIsLTEpKTpkaShlKSxufHxvcihvKXx8by5jYW5CZUVtcHR5KCl8fCFvLmlzRW1wdHkoKXx8eXAobyx0KSx0JiZybihvKSYmby5pc0VtcHR5KCkmJm8uc2VsZWN0RW5kKCl9fWNsYXNzIEthe3N0YXRpYyBnZXRUeXBlKCl7Syg2NCx0aGlzLm5hbWUpfXN0YXRpYyBjbG9uZSgpe0soNjUsdGhpcy5uYW1lKX1jb25zdHJ1Y3Rvcih0KXt0aGlzLl9fdHlwZT10aGlzLmNvbnN0cnVjdG9yLmdldFR5cGUoKSx0aGlzLl9fbmV4dD10aGlzLl9fcHJldj10aGlzLl9fcGFyZW50PW51bGwsSF8odGhpcyx0KX1nZXRUeXBlKCl7cmV0dXJuIHRoaXMuX190eXBlfWlzQXR0YWNoZWQoKXtmb3IodmFyIHQ9dGhpcy5fX2tleTt0IT09bnVsbDspe2lmKHQ9PT0icm9vdCIpcmV0dXJuITA7aWYodD1idCh0KSx0PT09bnVsbClicmVhazt0PXQuX19wYXJlbnR9cmV0dXJuITF9aXNTZWxlY3RlZCh0KXtpZih0PXR8fFllKCksdD09bnVsbClyZXR1cm4hMTtsZXQgbj10LmdldE5vZGVzKCkuc29tZShyPT5yLl9fa2V5PT09dGhpcy5fX2tleSk7cmV0dXJuIFoodGhpcyk/bjpmZSh0KSYmdC5hbmNob3IudHlwZT09PSJlbGVtZW50IiYmdC5mb2N1cy50eXBlPT09ImVsZW1lbnQiJiZ0LmFuY2hvci5rZXk9PT10LmZvY3VzLmtleSYmdC5hbmNob3Iub2Zmc2V0PT09dC5mb2N1cy5vZmZzZXQ/ITE6bn1nZXRLZXkoKXtyZXR1cm4gdGhpcy5fX2tleX1nZXRJbmRleFdpdGhpblBhcmVudCgpe3ZhciB0PXRoaXMuZ2V0UGFyZW50KCk7aWYodD09PW51bGwpcmV0dXJuLTE7dD10LmdldEZpcnN0Q2hpbGQoKTtsZXQgbj0wO2Zvcig7dCE9PW51bGw7KXtpZih0aGlzLmlzKHQpKXJldHVybiBuO24rKyx0PXQuZ2V0TmV4dFNpYmxpbmcoKX1yZXR1cm4tMX1nZXRQYXJlbnQoKXtsZXQgdD10aGlzLmdldExhdGVzdCgpLl9fcGFyZW50O3JldHVybiB0PT09bnVsbD9udWxsOmJ0KHQpfWdldFBhcmVudE9yVGhyb3coKXtsZXQgdD10aGlzLmdldFBhcmVudCgpO3JldHVybiB0PT09bnVsbCYmSyg2Nix0aGlzLl9fa2V5KSx0fWdldFRvcExldmVsRWxlbWVudCgpe2xldCB0PXRoaXM7Zm9yKDt0IT09bnVsbDspe2xldCBuPXQuZ2V0UGFyZW50KCk7aWYob3IobikpcmV0dXJuIHQ7dD1ufXJldHVybiBudWxsfWdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKXtsZXQgdD10aGlzLmdldFRvcExldmVsRWxlbWVudCgpO3JldHVybiB0PT09bnVsbCYmSyg2Nyx0aGlzLl9fa2V5KSx0fWdldFBhcmVudHMoKXtsZXQgdD1bXSxuPXRoaXMuZ2V0UGFyZW50KCk7Zm9yKDtuIT09bnVsbDspdC5wdXNoKG4pLG49bi5nZXRQYXJlbnQoKTtyZXR1cm4gdH1nZXRQYXJlbnRLZXlzKCl7bGV0IHQ9W10sbj10aGlzLmdldFBhcmVudCgpO2Zvcig7biE9PW51bGw7KXQucHVzaChuLl9fa2V5KSxuPW4uZ2V0UGFyZW50KCk7cmV0dXJuIHR9Z2V0UHJldmlvdXNTaWJsaW5nKCl7bGV0IHQ9dGhpcy5nZXRMYXRlc3QoKS5fX3ByZXY7cmV0dXJuIHQ9PT1udWxsP251bGw6YnQodCl9Z2V0UHJldmlvdXNTaWJsaW5ncygpe2xldCB0PVtdO3ZhciBuPXRoaXMuZ2V0UGFyZW50KCk7aWYobj09PW51bGwpcmV0dXJuIHQ7Zm9yKG49bi5nZXRGaXJzdENoaWxkKCk7biE9PW51bGwmJiFuLmlzKHRoaXMpOyl0LnB1c2gobiksbj1uLmdldE5leHRTaWJsaW5nKCk7cmV0dXJuIHR9Z2V0TmV4dFNpYmxpbmcoKXtsZXQgdD10aGlzLmdldExhdGVzdCgpLl9fbmV4dDtyZXR1cm4gdD09PW51bGw/bnVsbDpidCh0KX1nZXROZXh0U2libGluZ3MoKXtsZXQgdD1bXSxuPXRoaXMuZ2V0TmV4dFNpYmxpbmcoKTtmb3IoO24hPT1udWxsOyl0LnB1c2gobiksbj1uLmdldE5leHRTaWJsaW5nKCk7cmV0dXJuIHR9Z2V0Q29tbW9uQW5jZXN0b3IodCl7bGV0IG49dGhpcy5nZXRQYXJlbnRzKCk7dmFyIHI9dC5nZXRQYXJlbnRzKCk7Vyh0aGlzKSYmbi51bnNoaWZ0KHRoaXMpLFcodCkmJnIudW5zaGlmdCh0KSx0PW4ubGVuZ3RoO3ZhciBvPXIubGVuZ3RoO2lmKHQ9PT0wfHxvPT09MHx8blt0LTFdIT09cltvLTFdKXJldHVybiBudWxsO2ZvcihyPW5ldyBTZXQociksbz0wO288dDtvKyspe2xldCBpPW5bb107aWYoci5oYXMoaSkpcmV0dXJuIGl9cmV0dXJuIG51bGx9aXModCl7cmV0dXJuIHQ9PW51bGw/ITE6dGhpcy5fX2tleT09PXQuX19rZXl9aXNCZWZvcmUodCl7aWYodGhpcz09PXQpcmV0dXJuITE7aWYodC5pc1BhcmVudE9mKHRoaXMpKXJldHVybiEwO2lmKHRoaXMuaXNQYXJlbnRPZih0KSlyZXR1cm4hMTt2YXIgbj10aGlzLmdldENvbW1vbkFuY2VzdG9yKHQpO2xldCByPXRoaXM7Zm9yKDs7KXt2YXIgbz1yLmdldFBhcmVudE9yVGhyb3coKTtpZihvPT09bil7bz1yLmdldEluZGV4V2l0aGluUGFyZW50KCk7YnJlYWt9cj1vfWZvcihyPXQ7Oyl7aWYodD1yLmdldFBhcmVudE9yVGhyb3coKSx0PT09bil7bj1yLmdldEluZGV4V2l0aGluUGFyZW50KCk7YnJlYWt9cj10fXJldHVybiBvPG59aXNQYXJlbnRPZih0KXtsZXQgbj10aGlzLl9fa2V5O2lmKG49PT10Ll9fa2V5KXJldHVybiExO2Zvcig7dCE9PW51bGw7KXtpZih0Ll9fa2V5PT09bilyZXR1cm4hMDt0PXQuZ2V0UGFyZW50KCl9cmV0dXJuITF9Z2V0Tm9kZXNCZXR3ZWVuKHQpe2xldCBuPXRoaXMuaXNCZWZvcmUodCkscj1bXSxvPW5ldyBTZXQ7Zm9yKHZhciBpPXRoaXM7Oyl7dmFyIGw9aS5fX2tleTtpZihvLmhhcyhsKXx8KG8uYWRkKGwpLHIucHVzaChpKSksaT09PXQpYnJlYWs7aWYobD1XKGkpP24/aS5nZXRGaXJzdENoaWxkKCk6aS5nZXRMYXN0Q2hpbGQoKTpudWxsLGwhPT1udWxsKWk9bDtlbHNlIGlmKGw9bj9pLmdldE5leHRTaWJsaW5nKCk6aS5nZXRQcmV2aW91c1NpYmxpbmcoKSxsIT09bnVsbClpPWw7ZWxzZXtpZihpPWkuZ2V0UGFyZW50T3JUaHJvdygpLG8uaGFzKGkuX19rZXkpfHxyLnB1c2goaSksaT09PXQpYnJlYWs7bD1pO2RvIGw9PT1udWxsJiZLKDY4KSxpPW4/bC5nZXROZXh0U2libGluZygpOmwuZ2V0UHJldmlvdXNTaWJsaW5nKCksbD1sLmdldFBhcmVudCgpLGwhPT1udWxsJiYoaSE9PW51bGx8fG8uaGFzKGwuX19rZXkpfHxyLnB1c2gobCkpO3doaWxlKGk9PT1udWxsKX19cmV0dXJuIG58fHIucmV2ZXJzZSgpLHJ9aXNEaXJ0eSgpe2xldCB0PW90KCkuX2RpcnR5TGVhdmVzO3JldHVybiB0IT09bnVsbCYmdC5oYXModGhpcy5fX2tleSl9Z2V0TGF0ZXN0KCl7bGV0IHQ9YnQodGhpcy5fX2tleSk7cmV0dXJuIHQ9PT1udWxsJiZLKDExMyksdH1nZXRXcml0YWJsZSgpe3RuKCk7dmFyIHQ9T3IoKSxuPW90KCk7dD10Ll9ub2RlTWFwO2xldCByPXRoaXMuX19rZXksbz10aGlzLmdldExhdGVzdCgpLGk9by5fX3BhcmVudDtuPW4uX2Nsb25lTm90TmVlZGVkO3ZhciBsPVllKCk7cmV0dXJuIGwhPT1udWxsJiYobC5fY2FjaGVkTm9kZXM9bnVsbCksbi5oYXMocik/KExjKG8pLG8pOihsPW8uY29uc3RydWN0b3IuY2xvbmUobyksbC5fX3BhcmVudD1pLGwuX19uZXh0PW8uX19uZXh0LGwuX19wcmV2PW8uX19wcmV2LFcobykmJlcobCk/KGwuX19maXJzdD1vLl9fZmlyc3QsbC5fX2xhc3Q9by5fX2xhc3QsbC5fX3NpemU9by5fX3NpemUsbC5fX2luZGVudD1vLl9faW5kZW50LGwuX19mb3JtYXQ9by5fX2Zvcm1hdCxsLl9fZGlyPW8uX19kaXIpOloobykmJloobCkmJihsLl9fZm9ybWF0PW8uX19mb3JtYXQsbC5fX3N0eWxlPW8uX19zdHlsZSxsLl9fbW9kZT1vLl9fbW9kZSxsLl9fZGV0YWlsPW8uX19kZXRhaWwpLG4uYWRkKHIpLGwuX19rZXk9cixMYyhsKSx0LnNldChyLGwpLGwpfWdldFRleHRDb250ZW50KCl7cmV0dXJuIiJ9Z2V0VGV4dENvbnRlbnRTaXplKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGh9Y3JlYXRlRE9NKCl7Syg3MCl9dXBkYXRlRE9NKCl7Syg3MSl9ZXhwb3J0RE9NKHQpe3JldHVybntlbGVtZW50OnRoaXMuY3JlYXRlRE9NKHQuX2NvbmZpZyx0KX19ZXhwb3J0SlNPTigpe0soNzIpfXN0YXRpYyBpbXBvcnRKU09OKCl7SygxOCx0aGlzLm5hbWUpfXN0YXRpYyB0cmFuc2Zvcm0oKXtyZXR1cm4gbnVsbH1yZW1vdmUodCl7eXAodGhpcywhMCx0KX1yZXBsYWNlKHQsbil7dG4oKTt2YXIgcj1ZZSgpO3IhPT1udWxsJiYocj1yLmNsb25lKCkpLGtmKHRoaXMsdCk7bGV0IG89dGhpcy5nZXRMYXRlc3QoKSxpPXRoaXMuX19rZXksbD10Ll9fa2V5LHM9dC5nZXRXcml0YWJsZSgpO3Q9dGhpcy5nZXRQYXJlbnRPclRocm93KCkuZ2V0V3JpdGFibGUoKTtsZXQgYT10Ll9fc2l6ZTtkaShzKTtsZXQgdT1vLmdldFByZXZpb3VzU2libGluZygpLGM9by5nZXROZXh0U2libGluZygpLGQ9by5fX3ByZXYsZj1vLl9fbmV4dCxoPW8uX19wYXJlbnQ7cmV0dXJuIHlwKG8sITEsITApLHU9PT1udWxsP3QuX19maXJzdD1sOnUuZ2V0V3JpdGFibGUoKS5fX25leHQ9bCxzLl9fcHJldj1kLGM9PT1udWxsP3QuX19sYXN0PWw6Yy5nZXRXcml0YWJsZSgpLl9fcHJldj1sLHMuX19uZXh0PWYscy5fX3BhcmVudD1oLHQuX19zaXplPWEsbiYmdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2gobT0+e3MuYXBwZW5kKG0pfSksZmUocikmJihrcihyKSxuPXIuYW5jaG9yLHI9ci5mb2N1cyxuLmtleT09PWkmJnp5KG4scyksci5rZXk9PT1pJiZ6eShyLHMpKSxTbygpPT09aSYmRHQobCksc31pbnNlcnRBZnRlcih0LG49ITApe3RuKCksa2YodGhpcyx0KTt2YXIgcj10aGlzLmdldFdyaXRhYmxlKCk7bGV0IG89dC5nZXRXcml0YWJsZSgpO3ZhciBpPW8uZ2V0UGFyZW50KCk7bGV0IGw9WWUoKTt2YXIgcz0hMSxhPSExO2lmKGkhPT1udWxsKXt2YXIgdT10LmdldEluZGV4V2l0aGluUGFyZW50KCk7ZGkobyksZmUobCkmJihhPWkuX19rZXkscz1sLmFuY2hvcixpPWwuZm9jdXMscz1zLnR5cGU9PT0iZWxlbWVudCImJnMua2V5PT09YSYmcy5vZmZzZXQ9PT11KzEsYT1pLnR5cGU9PT0iZWxlbWVudCImJmkua2V5PT09YSYmaS5vZmZzZXQ9PT11KzEpfWk9dGhpcy5nZXROZXh0U2libGluZygpLHU9dGhpcy5nZXRQYXJlbnRPclRocm93KCkuZ2V0V3JpdGFibGUoKTtsZXQgYz1vLl9fa2V5LGQ9ci5fX25leHQ7cmV0dXJuIGk9PT1udWxsP3UuX19sYXN0PWM6aS5nZXRXcml0YWJsZSgpLl9fcHJldj1jLHUuX19zaXplKyssci5fX25leHQ9YyxvLl9fbmV4dD1kLG8uX19wcmV2PXIuX19rZXksby5fX3BhcmVudD1yLl9fcGFyZW50LG4mJmZlKGwpJiYobj10aGlzLmdldEluZGV4V2l0aGluUGFyZW50KCksQmMobCx1LG4rMSkscj11Ll9fa2V5LHMmJmwuYW5jaG9yLnNldChyLG4rMiwiZWxlbWVudCIpLGEmJmwuZm9jdXMuc2V0KHIsbisyLCJlbGVtZW50IikpLHR9aW5zZXJ0QmVmb3JlKHQsbj0hMCl7dG4oKSxrZih0aGlzLHQpO3ZhciByPXRoaXMuZ2V0V3JpdGFibGUoKTtsZXQgbz10LmdldFdyaXRhYmxlKCksaT1vLl9fa2V5O2RpKG8pO2xldCBsPXRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCkscz10aGlzLmdldFBhcmVudE9yVGhyb3coKS5nZXRXcml0YWJsZSgpLGE9ci5fX3ByZXYsdT10aGlzLmdldEluZGV4V2l0aGluUGFyZW50KCk7cmV0dXJuIGw9PT1udWxsP3MuX19maXJzdD1pOmwuZ2V0V3JpdGFibGUoKS5fX25leHQ9aSxzLl9fc2l6ZSsrLHIuX19wcmV2PWksby5fX3ByZXY9YSxvLl9fbmV4dD1yLl9fa2V5LG8uX19wYXJlbnQ9ci5fX3BhcmVudCxyPVllKCksbiYmZmUocikmJihuPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpLEJjKHIsbix1KSksdH1pc1BhcmVudFJlcXVpcmVkKCl7cmV0dXJuITF9Y3JlYXRlUGFyZW50RWxlbWVudE5vZGUoKXtyZXR1cm4gd2koKX1zZWxlY3RQcmV2aW91cyh0LG4pe3RuKCk7bGV0IHI9dGhpcy5nZXRQcmV2aW91c1NpYmxpbmcoKSxvPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpO3JldHVybiByPT09bnVsbD9vLnNlbGVjdCgwLDApOlcocik/ci5zZWxlY3QoKTpaKHIpP3Iuc2VsZWN0KHQsbik6KHQ9ci5nZXRJbmRleFdpdGhpblBhcmVudCgpKzEsby5zZWxlY3QodCx0KSl9c2VsZWN0TmV4dCh0LG4pe3RuKCk7bGV0IHI9dGhpcy5nZXROZXh0U2libGluZygpLG89dGhpcy5nZXRQYXJlbnRPclRocm93KCk7cmV0dXJuIHI9PT1udWxsP28uc2VsZWN0KCk6VyhyKT9yLnNlbGVjdCgwLDApOloocik/ci5zZWxlY3QodCxuKToodD1yLmdldEluZGV4V2l0aGluUGFyZW50KCksby5zZWxlY3QodCx0KSl9bWFya0RpcnR5KCl7dGhpcy5nZXRXcml0YWJsZSgpfX1jbGFzcyBWbCBleHRlbmRzIEthe3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuImxpbmVicmVhayJ9c3RhdGljIGNsb25lKHQpe3JldHVybiBuZXcgVmwodC5fX2tleSl9Y29uc3RydWN0b3IodCl7c3VwZXIodCl9Z2V0VGV4dENvbnRlbnQoKXtyZXR1cm5gCmB9Y3JlYXRlRE9NKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIil9dXBkYXRlRE9NKCl7cmV0dXJuITF9c3RhdGljIGltcG9ydERPTSgpe3JldHVybnticjp0PT57bGV0IG49dC5wYXJlbnRFbGVtZW50LHIsbztyZXR1cm4gbiE9PW51bGwmJigocj1uLmZpcnN0Q2hpbGQpPT09dHx8ci5uZXh0U2libGluZz09PXQmJnIubm9kZVR5cGU9PT0zJiYoci50ZXh0Q29udGVudHx8IiIpLm1hdGNoKC9eKCB8XHR8XHI/XG4pKyQvKSE9PW51bGwpJiYoKG89bi5sYXN0Q2hpbGQpPT09dHx8by5wcmV2aW91c1NpYmxpbmc9PT10JiZvLm5vZGVUeXBlPT09MyYmKG8udGV4dENvbnRlbnR8fCIiKS5tYXRjaCgvXiggfFx0fFxyP1xuKSskLykhPT1udWxsKT9udWxsOntjb252ZXJzaW9uOnEyLHByaW9yaXR5OjB9fX19c3RhdGljIGltcG9ydEpTT04oKXtyZXR1cm4gT2woKX1leHBvcnRKU09OKCl7cmV0dXJue3R5cGU6ImxpbmVicmVhayIsdmVyc2lvbjoxfX19ZnVuY3Rpb24gcTIoKXtyZXR1cm57bm9kZTpPbCgpfX1mdW5jdGlvbiBPbCgpe3JldHVybiBWYShuZXcgVmwpfWZ1bmN0aW9uIGthKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVmx9ZnVuY3Rpb24gTmYoZSx0KXtyZXR1cm4gdCYxNj8iY29kZSI6dCYxMjg/Im1hcmsiOnQmMzI/InN1YiI6dCY2ND8ic3VwIjpudWxsfWZ1bmN0aW9uIFJmKGUsdCl7cmV0dXJuIHQmMT8ic3Ryb25nIjp0JjI/ImVtIjoic3BhbiJ9ZnVuY3Rpb24gUGYoZSx0LG4scixvKXtlPXIuY2xhc3NMaXN0LHI9VnMobywiYmFzZSIpLHIhPT12b2lkIDAmJmUuYWRkKC4uLnIpLHI9VnMobywidW5kZXJsaW5lU3RyaWtldGhyb3VnaCIpO2xldCBpPSExLGw9dCY4JiZ0JjQ7dmFyIHM9biY4JiZuJjQ7ciE9PXZvaWQgMCYmKHM/KGk9ITAsbHx8ZS5hZGQoLi4ucikpOmwmJmUucmVtb3ZlKC4uLnIpKTtmb3IobGV0IGEgaW4gY2kpcz1jaVthXSxyPVZzKG8sYSksciE9PXZvaWQgMCYmKG4mcz8haXx8YSE9PSJ1bmRlcmxpbmUiJiZhIT09InN0cmlrZXRocm91Z2giPyghKHQmcyl8fGwmJmE9PT0idW5kZXJsaW5lInx8YT09PSJzdHJpa2V0aHJvdWdoIikmJmUuYWRkKC4uLnIpOnQmcyYmZS5yZW1vdmUoLi4ucik6dCZzJiZlLnJlbW92ZSguLi5yKSl9ZnVuY3Rpb24gT2YoZSx0LG4pe2xldCByPXQuZmlyc3RDaGlsZDtpZihuPW4uaXNDb21wb3NpbmcoKSxlKz1uP1NkOiIiLHI9PW51bGwpdC50ZXh0Q29udGVudD1lO2Vsc2UgaWYodD1yLm5vZGVWYWx1ZSx0IT09ZSlpZihufHxEbyl7bj10Lmxlbmd0aDtsZXQgbz1lLmxlbmd0aCxpPTAsbD0wO2Zvcig7aTxuJiZpPG8mJnRbaV09PT1lW2ldOylpKys7Zm9yKDtsK2k8biYmbCtpPG8mJnRbbi1sLTFdPT09ZVtvLWwtMV07KWwrKztlPVtpLG4taS1sLGUuc2xpY2UoaSxvLWwpXTtsZXRbcyxhLHVdPWU7YSE9PTAmJnIuZGVsZXRlRGF0YShzLGEpLHIuaW5zZXJ0RGF0YShzLHUpfWVsc2Ugci5ub2RlVmFsdWU9ZX1mdW5jdGlvbiBDdShlLHQpe3JldHVybiB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCksdC5hcHBlbmRDaGlsZChlKSx0fWNsYXNzIFBpIGV4dGVuZHMgS2F7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4idGV4dCJ9c3RhdGljIGNsb25lKHQpe3JldHVybiBuZXcgUGkodC5fX3RleHQsdC5fX2tleSl9Y29uc3RydWN0b3IodCxuKXtzdXBlcihuKSx0aGlzLl9fdGV4dD10LHRoaXMuX19mb3JtYXQ9MCx0aGlzLl9fc3R5bGU9IiIsdGhpcy5fX2RldGFpbD10aGlzLl9fbW9kZT0wfWdldEZvcm1hdCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fZm9ybWF0fWdldERldGFpbCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fZGV0YWlsfWdldE1vZGUoKXtsZXQgdD10aGlzLmdldExhdGVzdCgpO3JldHVybiBMMlt0Ll9fbW9kZV19Z2V0U3R5bGUoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX3N0eWxlfWlzVG9rZW4oKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX21vZGU9PT0xfWlzQ29tcG9zaW5nKCl7cmV0dXJuIHRoaXMuX19rZXk9PT1TbygpfWlzU2VnbWVudGVkKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19tb2RlPT09Mn1pc0RpcmVjdGlvbmxlc3MoKXtyZXR1cm4odGhpcy5nZXRMYXRlc3QoKS5fX2RldGFpbCYxKSE9PTB9aXNVbm1lcmdlYWJsZSgpe3JldHVybih0aGlzLmdldExhdGVzdCgpLl9fZGV0YWlsJjIpIT09MH1oYXNGb3JtYXQodCl7cmV0dXJuIHQ9Y2lbdF0sKHRoaXMuZ2V0Rm9ybWF0KCkmdCkhPT0wfWlzU2ltcGxlVGV4dCgpe3JldHVybiB0aGlzLl9fdHlwZT09PSJ0ZXh0IiYmdGhpcy5fX21vZGU9PT0wfWdldFRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX190ZXh0fWdldEZvcm1hdEZsYWdzKHQsbil7bGV0IHI9dGhpcy5nZXRMYXRlc3QoKS5fX2Zvcm1hdDtyZXR1cm4gV18ocix0LG4pfWNyZWF0ZURPTSh0KXt2YXIgbj10aGlzLl9fZm9ybWF0LHI9TmYodGhpcyxuKTtsZXQgbz1SZih0aGlzLG4pLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChyPT09bnVsbD9vOnIpLGw9aTtyZXR1cm4gdGhpcy5oYXNGb3JtYXQoImNvZGUiKSYmaS5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCJmYWxzZSIpLHIhPT1udWxsJiYobD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KG8pLGkuYXBwZW5kQ2hpbGQobCkpLHI9bCxPZih0aGlzLl9fdGV4dCxyLHRoaXMpLHQ9dC50aGVtZS50ZXh0LHQhPT12b2lkIDAmJlBmKG8sMCxuLHIsdCksbj10aGlzLl9fc3R5bGUsbiE9PSIiJiYoaS5zdHlsZS5jc3NUZXh0PW4pLGl9dXBkYXRlRE9NKHQsbixyKXtsZXQgbz10aGlzLl9fdGV4dDt2YXIgaT10Ll9fZm9ybWF0LGw9dGhpcy5fX2Zvcm1hdCxzPU5mKHRoaXMsaSk7bGV0IGE9TmYodGhpcyxsKTt2YXIgdT1SZih0aGlzLGkpO2xldCBjPVJmKHRoaXMsbCk7cmV0dXJuKHM9PT1udWxsP3U6cykhPT0oYT09PW51bGw/YzphKT8hMDpzPT09YSYmdSE9PWM/KGk9bi5maXJzdENoaWxkLGk9PW51bGwmJksoNDgpLHQ9cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGMpLE9mKG8sdCx0aGlzKSxyPXIudGhlbWUudGV4dCxyIT09dm9pZCAwJiZQZihjLDAsbCx0LHIpLG4ucmVwbGFjZUNoaWxkKHMsaSksITEpOih1PW4sYSE9PW51bGwmJnMhPT1udWxsJiYodT1uLmZpcnN0Q2hpbGQsdT09bnVsbCYmSyg0OSkpLE9mKG8sdSx0aGlzKSxyPXIudGhlbWUudGV4dCxyIT09dm9pZCAwJiZpIT09bCYmUGYoYyxpLGwsdSxyKSxsPXRoaXMuX19zdHlsZSx0Ll9fc3R5bGUhPT1sJiYobi5zdHlsZS5jc3NUZXh0PWwpLCExKX1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJueyIjdGV4dCI6KCk9Pih7Y29udmVyc2lvbjpuUixwcmlvcml0eTowfSksYjooKT0+KHtjb252ZXJzaW9uOnRSLHByaW9yaXR5OjB9KSxjb2RlOigpPT4oe2NvbnZlcnNpb246dW8scHJpb3JpdHk6MH0pLGVtOigpPT4oe2NvbnZlcnNpb246dW8scHJpb3JpdHk6MH0pLGk6KCk9Pih7Y29udmVyc2lvbjp1byxwcmlvcml0eTowfSksczooKT0+KHtjb252ZXJzaW9uOnVvLHByaW9yaXR5OjB9KSxzcGFuOigpPT4oe2NvbnZlcnNpb246ZVIscHJpb3JpdHk6MH0pLHN0cm9uZzooKT0+KHtjb252ZXJzaW9uOnVvLHByaW9yaXR5OjB9KSxzdWI6KCk9Pih7Y29udmVyc2lvbjp1byxwcmlvcml0eTowfSksc3VwOigpPT4oe2NvbnZlcnNpb246dW8scHJpb3JpdHk6MH0pLHU6KCk9Pih7Y29udmVyc2lvbjp1byxwcmlvcml0eTowfSl9fXN0YXRpYyBpbXBvcnRKU09OKHQpe2xldCBuPSR0KHQudGV4dCk7cmV0dXJuIG4uc2V0Rm9ybWF0KHQuZm9ybWF0KSxuLnNldERldGFpbCh0LmRldGFpbCksbi5zZXRNb2RlKHQubW9kZSksbi5zZXRTdHlsZSh0LnN0eWxlKSxufWV4cG9ydERPTSh0KXtyZXR1cm57ZWxlbWVudDp0fT1zdXBlci5leHBvcnRET00odCksdCE9PW51bGwmJiRkKHQpfHxLKDEzMiksdC5zdHlsZS53aGl0ZVNwYWNlPSJwcmUtd3JhcCIsdGhpcy5oYXNGb3JtYXQoImJvbGQiKSYmKHQ9Q3UodCwiYiIpKSx0aGlzLmhhc0Zvcm1hdCgiaXRhbGljIikmJih0PUN1KHQsImkiKSksdGhpcy5oYXNGb3JtYXQoInN0cmlrZXRocm91Z2giKSYmKHQ9Q3UodCwicyIpKSx0aGlzLmhhc0Zvcm1hdCgidW5kZXJsaW5lIikmJih0PUN1KHQsInUiKSkse2VsZW1lbnQ6dH19ZXhwb3J0SlNPTigpe3JldHVybntkZXRhaWw6dGhpcy5nZXREZXRhaWwoKSxmb3JtYXQ6dGhpcy5nZXRGb3JtYXQoKSxtb2RlOnRoaXMuZ2V0TW9kZSgpLHN0eWxlOnRoaXMuZ2V0U3R5bGUoKSx0ZXh0OnRoaXMuZ2V0VGV4dENvbnRlbnQoKSx0eXBlOiJ0ZXh0Iix2ZXJzaW9uOjF9fXNlbGVjdGlvblRyYW5zZm9ybSgpe31zZXRGb3JtYXQodCl7bGV0IG49dGhpcy5nZXRXcml0YWJsZSgpO3JldHVybiBuLl9fZm9ybWF0PXR5cGVvZiB0PT0ic3RyaW5nIj9jaVt0XTp0LG59c2V0RGV0YWlsKHQpe2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gbi5fX2RldGFpbD10eXBlb2YgdD09InN0cmluZyI/TzJbdF06dCxufXNldFN0eWxlKHQpe2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gbi5fX3N0eWxlPXQsbn10b2dnbGVGb3JtYXQodCl7cmV0dXJuIHQ9Y2lbdF0sdGhpcy5zZXRGb3JtYXQodGhpcy5nZXRGb3JtYXQoKV50KX10b2dnbGVEaXJlY3Rpb25sZXNzKCl7bGV0IHQ9dGhpcy5nZXRXcml0YWJsZSgpO3JldHVybiB0Ll9fZGV0YWlsXj0xLHR9dG9nZ2xlVW5tZXJnZWFibGUoKXtsZXQgdD10aGlzLmdldFdyaXRhYmxlKCk7cmV0dXJuIHQuX19kZXRhaWxePTIsdH1zZXRNb2RlKHQpe2lmKHQ9TTJbdF0sdGhpcy5fX21vZGU9PT10KXJldHVybiB0aGlzO2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gbi5fX21vZGU9dCxufXNldFRleHRDb250ZW50KHQpe2lmKHRoaXMuX190ZXh0PT09dClyZXR1cm4gdGhpcztsZXQgbj10aGlzLmdldFdyaXRhYmxlKCk7cmV0dXJuIG4uX190ZXh0PXQsbn1zZWxlY3QodCxuKXt0bigpO2xldCByPVllKCk7dmFyIG89dGhpcy5nZXRUZXh0Q29udGVudCgpO2xldCBpPXRoaXMuX19rZXk7aWYodHlwZW9mIG89PSJzdHJpbmciPyhvPW8ubGVuZ3RoLHQ9PT12b2lkIDAmJih0PW8pLG49PT12b2lkIDAmJihuPW8pKTpuPXQ9MCxmZShyKSlvPVNvKCksbyE9PXIuYW5jaG9yLmtleSYmbyE9PXIuZm9jdXMua2V5fHxEdChpKSxyLnNldFRleHROb2RlUmFuZ2UodGhpcyx0LHRoaXMsbik7ZWxzZSByZXR1cm4gZ1MoaSx0LGksbiwidGV4dCIsInRleHQiKTtyZXR1cm4gcn1zcGxpY2VUZXh0KHQsbixyLG8pe2xldCBpPXRoaXMuZ2V0V3JpdGFibGUoKSxsPWkuX190ZXh0LHM9ci5sZW5ndGgsYT10OzA+YSYmKGE9cythLDA+YSYmKGE9MCkpO2xldCB1PVllKCk7cmV0dXJuIG8mJmZlKHUpJiYodCs9cyx1LnNldFRleHROb2RlUmFuZ2UoaSx0LGksdCkpLG49bC5zbGljZSgwLGEpK3IrbC5zbGljZShhK24pLGkuX190ZXh0PW4saX1jYW5JbnNlcnRUZXh0QmVmb3JlKCl7cmV0dXJuITB9Y2FuSW5zZXJ0VGV4dEFmdGVyKCl7cmV0dXJuITB9c3BsaXRUZXh0KC4uLnQpe3RuKCk7dmFyIG49dGhpcy5nZXRMYXRlc3QoKSxyPW4uZ2V0VGV4dENvbnRlbnQoKSxvPW4uX19rZXksaT1TbygpLGw9bmV3IFNldCh0KTt0PVtdO2Zvcih2YXIgcz1yLmxlbmd0aCxhPSIiLHU9MDt1PHM7dSsrKWEhPT0iIiYmbC5oYXModSkmJih0LnB1c2goYSksYT0iIiksYSs9clt1XTtpZihhIT09IiImJnQucHVzaChhKSxsPXQubGVuZ3RoLGw9PT0wKXJldHVybltdO2lmKHRbMF09PT1yKXJldHVybltuXTt2YXIgYz10WzBdO3I9bi5nZXRQYXJlbnRPclRocm93KCksdT1uLmdldEZvcm1hdCgpO2xldCBkPW4uZ2V0U3R5bGUoKSxmPW4uX19kZXRhaWw7cz0hMSxuLmlzU2VnbWVudGVkKCk/KGE9JHQoYyksYS5fX2Zvcm1hdD11LGEuX19zdHlsZT1kLGEuX19kZXRhaWw9ZixzPSEwKTooYT1uLmdldFdyaXRhYmxlKCksYS5fX3RleHQ9Yyksbj1ZZSgpLGE9W2FdLGM9Yy5sZW5ndGg7Zm9yKGxldCBnPTE7ZzxsO2crKyl7dmFyIGg9dFtnXSxtPWgubGVuZ3RoO2g9JHQoaCkuZ2V0V3JpdGFibGUoKSxoLl9fZm9ybWF0PXUsaC5fX3N0eWxlPWQsaC5fX2RldGFpbD1mO2xldCBfPWguX19rZXk7aWYobT1jK20sZmUobikpe2xldCB2PW4uYW5jaG9yLHk9bi5mb2N1czt2LmtleT09PW8mJnYudHlwZT09PSJ0ZXh0IiYmdi5vZmZzZXQ+YyYmdi5vZmZzZXQ8PW0mJih2LmtleT1fLHYub2Zmc2V0LT1jLG4uZGlydHk9ITApLHkua2V5PT09byYmeS50eXBlPT09InRleHQiJiZ5Lm9mZnNldD5jJiZ5Lm9mZnNldDw9bSYmKHkua2V5PV8seS5vZmZzZXQtPWMsbi5kaXJ0eT0hMCl9aT09PW8mJkR0KF8pLGM9bSxhLnB1c2goaCl9cmV0dXJuIG89dGhpcy5nZXRQcmV2aW91c1NpYmxpbmcoKSxpPXRoaXMuZ2V0TmV4dFNpYmxpbmcoKSxvIT09bnVsbCYmTGMobyksaSE9PW51bGwmJkxjKGkpLG89ci5nZXRXcml0YWJsZSgpLGk9dGhpcy5nZXRJbmRleFdpdGhpblBhcmVudCgpLHM/KG8uc3BsaWNlKGksMCxhKSx0aGlzLnJlbW92ZSgpKTpvLnNwbGljZShpLDEsYSksZmUobikmJkJjKG4scixpLGwtMSksYX1tZXJnZVdpdGhTaWJsaW5nKHQpe3ZhciBuPXQ9PT10aGlzLmdldFByZXZpb3VzU2libGluZygpO258fHQ9PT10aGlzLmdldE5leHRTaWJsaW5nKCl8fEsoNTApO3ZhciByPXRoaXMuX19rZXk7bGV0IG89dC5fX2tleSxpPXRoaXMuX190ZXh0LGw9aS5sZW5ndGg7U28oKT09PW8mJkR0KHIpO2xldCBzPVllKCk7aWYoZmUocykpe2xldCBhPXMuYW5jaG9yLHU9cy5mb2N1czthIT09bnVsbCYmYS5rZXk9PT1vJiYoS3koYSxuLHIsdCxsKSxzLmRpcnR5PSEwKSx1IT09bnVsbCYmdS5rZXk9PT1vJiYoS3kodSxuLHIsdCxsKSxzLmRpcnR5PSEwKX1yZXR1cm4gcj10Ll9fdGV4dCx0aGlzLnNldFRleHRDb250ZW50KG4/citpOmkrciksbj10aGlzLmdldFdyaXRhYmxlKCksdC5yZW1vdmUoKSxufWlzVGV4dEVudGl0eSgpe3JldHVybiExfX1mdW5jdGlvbiBlUihlKXtsZXQgdD1lLnN0eWxlLmZvbnRXZWlnaHQ9PT0iNzAwIixuPWUuc3R5bGUudGV4dERlY29yYXRpb249PT0ibGluZS10aHJvdWdoIixyPWUuc3R5bGUuZm9udFN0eWxlPT09Iml0YWxpYyIsbz1lLnN0eWxlLnRleHREZWNvcmF0aW9uPT09InVuZGVybGluZSIsaT1lLnN0eWxlLnZlcnRpY2FsQWxpZ247cmV0dXJue2ZvckNoaWxkOmw9PihaKGwpJiYodCYmbC50b2dnbGVGb3JtYXQoImJvbGQiKSxuJiZsLnRvZ2dsZUZvcm1hdCgic3RyaWtldGhyb3VnaCIpLHImJmwudG9nZ2xlRm9ybWF0KCJpdGFsaWMiKSxvJiZsLnRvZ2dsZUZvcm1hdCgidW5kZXJsaW5lIiksaT09PSJzdWIiJiZsLnRvZ2dsZUZvcm1hdCgic3Vic2NyaXB0IiksaT09PSJzdXBlciImJmwudG9nZ2xlRm9ybWF0KCJzdXBlcnNjcmlwdCIpKSxsKSxub2RlOm51bGx9fWZ1bmN0aW9uIHRSKGUpe2xldCB0PWUuc3R5bGUuZm9udFdlaWdodD09PSJub3JtYWwiO3JldHVybntmb3JDaGlsZDpuPT4oWihuKSYmIXQmJm4udG9nZ2xlRm9ybWF0KCJib2xkIiksbiksbm9kZTpudWxsfX1sZXQgSXk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gblIoZSl7ZS5wYXJlbnRFbGVtZW50PT09bnVsbCYmSygxMjkpO2Zvcih2YXIgdD1lLnRleHRDb250ZW50fHwiIixuLHI9ZS5wYXJlbnROb2RlLG89W2VdO3IhPT1udWxsJiYobj1JeS5nZXQocikpPT09dm9pZCAwJiYhKHIubm9kZU5hbWU9PT0iUFJFInx8ci5ub2RlVHlwZT09PTEmJnIuc3R5bGUud2hpdGVTcGFjZS5zdGFydHNXaXRoKCJwcmUiKSk7KW8ucHVzaChyKSxyPXIucGFyZW50Tm9kZTtmb3Iobj1uPT09dm9pZCAwP3I6bixyPTA7cjxvLmxlbmd0aDtyKyspSXkuc2V0KG9bcl0sbik7aWYobiE9PW51bGwpe2Zvcih0PXQuc3BsaXQoLyhccj9cbnxcdCkvKSxlPVtdLG89dC5sZW5ndGgsbj0wO248bztuKyspcj10W25dLHI9PT1gCmB8fHI9PT1gXHIKYD9lLnB1c2goT2woKSk6cj09PSIJIj9lLnB1c2goYmQoKSk6ciE9PSIiJiZlLnB1c2goJHQocikpO3JldHVybntub2RlOmV9fWlmKHQ9dC5yZXBsYWNlKC9cci9nLCIiKS5yZXBsYWNlKC9bIFx0XG5dKy9nLCIgIiksdD09PSIiKXJldHVybntub2RlOm51bGx9O2lmKHRbMF09PT0iICIpe2ZvcihvPWUsbj0hMDtvIT09bnVsbCYmKG89ankobywhMSkpIT09bnVsbDspaWYocj1vLnRleHRDb250ZW50fHwiIiwwPHIubGVuZ3RoKXsvWyBcdFxuXSQvLnRlc3QocikmJih0PXQuc2xpY2UoMSkpLG49ITE7YnJlYWt9biYmKHQ9dC5zbGljZSgxKSl9aWYodFt0Lmxlbmd0aC0xXT09PSIgIil7Zm9yKG89ITA7ZSE9PW51bGwmJihlPWp5KGUsITApKSE9PW51bGw7KWlmKDA8KGUudGV4dENvbnRlbnR8fCIiKS5yZXBsYWNlKC9eKCB8XHR8XHI/XG4pKy8sIiIpLmxlbmd0aCl7bz0hMTticmVha31vJiYodD10LnNsaWNlKDAsdC5sZW5ndGgtMSkpfXJldHVybiB0PT09IiI/e25vZGU6bnVsbH06e25vZGU6JHQodCl9fWxldCByUj1uZXcgUmVnRXhwKC9eKGF8YWJicnxhY3JvbnltfGJ8Y2l0ZXxjb2RlfGRlbHxlbXxpfGluc3xrYmR8bGFiZWx8b3V0cHV0fHF8cnVieXxzfHNhbXB8c3BhbnxzdHJvbmd8c3VifHN1cHx0aW1lfHV8dHR8dmFyKSQvLCJpIik7ZnVuY3Rpb24gankoZSx0KXtmb3IoOzspe2Zvcih2YXIgbj12b2lkIDA7KG49dD9lLm5leHRTaWJsaW5nOmUucHJldmlvdXNTaWJsaW5nKT09PW51bGw7KWlmKGU9ZS5wYXJlbnRFbGVtZW50LGU9PT1udWxsKXJldHVybiBudWxsO2lmKGU9bixlLm5vZGVUeXBlPT09MSYmKG49ZS5zdHlsZS5kaXNwbGF5LG49PT0iIiYmZS5ub2RlTmFtZS5tYXRjaChyUik9PT1udWxsfHxuIT09IiImJiFuLnN0YXJ0c1dpdGgoImlubGluZSIpKSlyZXR1cm4gbnVsbDtmb3IoOyhuPXQ/ZS5maXJzdENoaWxkOmUubGFzdENoaWxkKSE9PW51bGw7KWU9bjtpZihlLm5vZGVUeXBlPT09MylyZXR1cm4gZTtpZihlLm5vZGVOYW1lPT09IkJSIilyZXR1cm4gbnVsbH19bGV0IG9SPXtjb2RlOiJjb2RlIixlbToiaXRhbGljIixpOiJpdGFsaWMiLHM6InN0cmlrZXRocm91Z2giLHN0cm9uZzoiYm9sZCIsc3ViOiJzdWJzY3JpcHQiLHN1cDoic3VwZXJzY3JpcHQiLHU6InVuZGVybGluZSJ9O2Z1bmN0aW9uIHVvKGUpe2xldCB0PW9SW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07cmV0dXJuIHQ9PT12b2lkIDA/e25vZGU6bnVsbH06e2ZvckNoaWxkOm49PihaKG4pJiYhbi5oYXNGb3JtYXQodCkmJm4udG9nZ2xlRm9ybWF0KHQpLG4pLG5vZGU6bnVsbH19ZnVuY3Rpb24gJHQoZT0iIil7cmV0dXJuIFZhKG5ldyBQaShlKSl9ZnVuY3Rpb24gWihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFBpfWNsYXNzIEtsIGV4dGVuZHMgUGl7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4idGFiIn1zdGF0aWMgY2xvbmUodCl7bGV0IG49bmV3IEtsKHQuX19rZXkpO3JldHVybiBuLl9fdGV4dD10Ll9fdGV4dCxuLl9fZm9ybWF0PXQuX19mb3JtYXQsbi5fX3N0eWxlPXQuX19zdHlsZSxufWNvbnN0cnVjdG9yKHQpe3N1cGVyKCIJIix0KSx0aGlzLl9fZGV0YWlsPTJ9c3RhdGljIGltcG9ydERPTSgpe3JldHVybiBudWxsfXN0YXRpYyBpbXBvcnRKU09OKHQpe2xldCBuPWJkKCk7cmV0dXJuIG4uc2V0Rm9ybWF0KHQuZm9ybWF0KSxuLnNldFN0eWxlKHQuc3R5bGUpLG59ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksdHlwZToidGFiIix2ZXJzaW9uOjF9fXNldFRleHRDb250ZW50KCl7SygxMjYpfXNldERldGFpbCgpe0soMTI3KX1zZXRNb2RlKCl7SygxMjgpfWNhbkluc2VydFRleHRCZWZvcmUoKXtyZXR1cm4hMX1jYW5JbnNlcnRUZXh0QWZ0ZXIoKXtyZXR1cm4hMX19ZnVuY3Rpb24gYmQoKXtyZXR1cm4gVmEobmV3IEtsKX1jbGFzcyBicntjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5fc2VsZWN0aW9uPW51bGwsdGhpcy5rZXk9dCx0aGlzLm9mZnNldD1uLHRoaXMudHlwZT1yfWlzKHQpe3JldHVybiB0aGlzLmtleT09PXQua2V5JiZ0aGlzLm9mZnNldD09PXQub2Zmc2V0JiZ0aGlzLnR5cGU9PT10LnR5cGV9aXNCZWZvcmUodCl7bGV0IG49dGhpcy5nZXROb2RlKCkscj10LmdldE5vZGUoKSxvPXRoaXMub2Zmc2V0O2lmKHQ9dC5vZmZzZXQsVyhuKSl7dmFyIGk9bi5nZXREZXNjZW5kYW50QnlJbmRleChvKTtuPWk/P259cmV0dXJuIFcocikmJihpPXIuZ2V0RGVzY2VuZGFudEJ5SW5kZXgodCkscj1pPz9yKSxuPT09cj9vPHQ6bi5pc0JlZm9yZShyKX1nZXROb2RlKCl7bGV0IHQ9YnQodGhpcy5rZXkpO3JldHVybiB0PT09bnVsbCYmSygyMCksdH1zZXQodCxuLHIpe2xldCBvPXRoaXMuX3NlbGVjdGlvbixpPXRoaXMua2V5O3RoaXMua2V5PXQsdGhpcy5vZmZzZXQ9bix0aGlzLnR5cGU9cixYbCgpfHwoU28oKT09PWkmJkR0KHQpLG8hPT1udWxsJiYoby5fY2FjaGVkTm9kZXM9bnVsbCxvLmRpcnR5PSEwKSl9fWZ1bmN0aW9uIEFmKGUsdCl7bGV0IG49dC5fX2tleSxyPWUub2Zmc2V0LG89ImVsZW1lbnQiO2lmKFoodCkpbz0idGV4dCIsdD10LmdldFRleHRDb250ZW50U2l6ZSgpLHI+dCYmKHI9dCk7ZWxzZSBpZighVyh0KSl7dmFyIGk9dC5nZXROZXh0U2libGluZygpO1ooaSk/KG49aS5fX2tleSxyPTAsbz0idGV4dCIpOihpPXQuZ2V0UGFyZW50KCkpJiYobj1pLl9fa2V5LHI9dC5nZXRJbmRleFdpdGhpblBhcmVudCgpKzEpfWUuc2V0KG4scixvKX1mdW5jdGlvbiB6eShlLHQpe2lmKFcodCkpe2xldCBuPXQuZ2V0TGFzdERlc2NlbmRhbnQoKTtXKG4pfHxaKG4pP0FmKGUsbik6QWYoZSx0KX1lbHNlIEFmKGUsdCl9ZnVuY3Rpb24gRnkoZSx0LG4scil7bGV0IG89ZS5nZXROb2RlKCksaT1vLmdldENoaWxkQXRJbmRleChlLm9mZnNldCksbD0kdCgpLHM9cm4obyk/d2koKS5hcHBlbmQobCk6bDtsLnNldEZvcm1hdChuKSxsLnNldFN0eWxlKHIpLGk9PT1udWxsP28uYXBwZW5kKHMpOihpLmluc2VydEJlZm9yZShzKSx0LnR5cGU9PT0iZWxlbWVudCImJnQua2V5PT09ZS5rZXkmJnQub2Zmc2V0IT09ZS5vZmZzZXQmJnQuc2V0KHQua2V5LHQub2Zmc2V0KzEsImVsZW1lbnQiKSksZS5pcyh0KSYmdC5zZXQobC5fX2tleSwwLCJ0ZXh0IiksZS5zZXQobC5fX2tleSwwLCJ0ZXh0Iil9ZnVuY3Rpb24gZ28oZSx0LG4scil7ZS5rZXk9dCxlLm9mZnNldD1uLGUudHlwZT1yfWNsYXNzIFRke2NvbnN0cnVjdG9yKHQpe3RoaXMuZGlydHk9ITEsdGhpcy5fbm9kZXM9dCx0aGlzLl9jYWNoZWROb2Rlcz1udWxsfWlzKHQpe2lmKCFHbCh0KSlyZXR1cm4hMTtsZXQgbj10aGlzLl9ub2RlcyxyPXQuX25vZGVzO3JldHVybiBuLnNpemU9PT1yLnNpemUmJkFycmF5LmZyb20obikuZXZlcnkobz0+ci5oYXMobykpfWFkZCh0KXt0aGlzLmRpcnR5PSEwLHRoaXMuX25vZGVzLmFkZCh0KSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsfWRlbGV0ZSh0KXt0aGlzLmRpcnR5PSEwLHRoaXMuX25vZGVzLmRlbGV0ZSh0KSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsfWNsZWFyKCl7dGhpcy5kaXJ0eT0hMCx0aGlzLl9ub2Rlcy5jbGVhcigpLHRoaXMuX2NhY2hlZE5vZGVzPW51bGx9aGFzKHQpe3JldHVybiB0aGlzLl9ub2Rlcy5oYXModCl9Y2xvbmUoKXtyZXR1cm4gbmV3IFRkKG5ldyBTZXQodGhpcy5fbm9kZXMpKX1leHRyYWN0KCl7cmV0dXJuIHRoaXMuZ2V0Tm9kZXMoKX1pbnNlcnRSYXdUZXh0KCl7fWluc2VydFRleHQoKXt9aW5zZXJ0Tm9kZXModCxuKXtsZXQgcj10aGlzLmdldE5vZGVzKCksbz1yLmxlbmd0aDt2YXIgaT1yW28tMV07aWYoWihpKSlpPWkuc2VsZWN0KCk7ZWxzZXtsZXQgbD1pLmdldEluZGV4V2l0aGluUGFyZW50KCkrMTtpPWkuZ2V0UGFyZW50T3JUaHJvdygpLnNlbGVjdChsLGwpfWZvcihpLmluc2VydE5vZGVzKHQsbiksdD0wO3Q8bzt0Kyspclt0XS5yZW1vdmUoKTtyZXR1cm4hMH1nZXROb2Rlcygpe3ZhciB0PXRoaXMuX2NhY2hlZE5vZGVzO2lmKHQhPT1udWxsKXJldHVybiB0O3ZhciBuPXRoaXMuX25vZGVzO3Q9W107Zm9yKGxldCByIG9mIG4pbj1idChyKSxuIT09bnVsbCYmdC5wdXNoKG4pO3JldHVybiBYbCgpfHwodGhpcy5fY2FjaGVkTm9kZXM9dCksdH1nZXRUZXh0Q29udGVudCgpe2xldCB0PXRoaXMuZ2V0Tm9kZXMoKSxuPSIiO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKW4rPXRbcl0uZ2V0VGV4dENvbnRlbnQoKTtyZXR1cm4gbn19ZnVuY3Rpb24gZmUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBPaX1mdW5jdGlvbiB4cChlKXtsZXRbdCwsbl09dlMoZSk7ZT1uLmdldENoaWxkcmVuKCk7bGV0IHI9ZS5sZW5ndGg7dmFyIG89ZVswXS5nZXRDaGlsZHJlbigpLmxlbmd0aDtsZXQgaT1BcnJheShyKTtmb3IodmFyIGw9MDtsPHI7bCsrKWlbbF09QXJyYXkobyk7Zm9yKG89MDtvPHI7bysrKXtsPWVbb10uZ2V0Q2hpbGRyZW4oKTtsZXQgcz0wO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKXtmb3IoO2lbb11bc107KXMrKztsZXQgdT1sW2FdLGM9dS5fX3Jvd1NwYW58fDEsZD11Ll9fY29sU3Bhbnx8MTtmb3IobGV0IGY9MDtmPGM7ZisrKWZvcihsZXQgaD0wO2g8ZDtoKyspaVtvK2ZdW3MraF09dTtpZih0PT09dSlyZXR1cm57Y29sU3BhbjpkLGNvbHVtbkluZGV4OnMscm93SW5kZXg6byxyb3dTcGFuOmN9O3MrPWR9fXJldHVybiBudWxsfWNsYXNzIE5ke2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLmdyaWRLZXk9dCx0aGlzLmFuY2hvcj1uLHRoaXMuZm9jdXM9cix0aGlzLmRpcnR5PSExLHRoaXMuX2NhY2hlZE5vZGVzPW51bGwsbi5fc2VsZWN0aW9uPXRoaXMsci5fc2VsZWN0aW9uPXRoaXN9aXModCl7cmV0dXJuIGZtKHQpP3RoaXMuZ3JpZEtleT09PXQuZ3JpZEtleSYmdGhpcy5hbmNob3IuaXModC5hbmNob3IpJiZ0aGlzLmZvY3VzLmlzKHQuZm9jdXMpOiExfXNldCh0LG4scil7dGhpcy5kaXJ0eT0hMCx0aGlzLmdyaWRLZXk9dCx0aGlzLmFuY2hvci5rZXk9bix0aGlzLmZvY3VzLmtleT1yLHRoaXMuX2NhY2hlZE5vZGVzPW51bGx9Y2xvbmUoKXtyZXR1cm4gbmV3IE5kKHRoaXMuZ3JpZEtleSx0aGlzLmFuY2hvcix0aGlzLmZvY3VzKX1pc0NvbGxhcHNlZCgpe3JldHVybiExfWlzQmFja3dhcmQoKXtyZXR1cm4gdGhpcy5mb2N1cy5pc0JlZm9yZSh0aGlzLmFuY2hvcil9Z2V0Q2hhcmFjdGVyT2Zmc2V0cygpe3JldHVybiBadSh0aGlzKX1leHRyYWN0KCl7cmV0dXJuIHRoaXMuZ2V0Tm9kZXMoKX1pbnNlcnRSYXdUZXh0KCl7fWluc2VydFRleHQoKXt9aW5zZXJ0Tm9kZXModCxuKXtsZXQgcj10aGlzLmZvY3VzLmdldE5vZGUoKTtyZXR1cm4gb20oci5zZWxlY3QoMCxyLmdldENoaWxkcmVuU2l6ZSgpKSkuaW5zZXJ0Tm9kZXModCxuKX1nZXRTaGFwZSgpe3ZhciB0PWJ0KHRoaXMuYW5jaG9yLmtleSk7aWYoam4odCl8fEsoMTAzKSx0PXhwKHQpLHQ9PT1udWxsKXRocm93IEVycm9yKCJnZXRDZWxsUmVjdDogZXhwZWN0ZWQgdG8gZmluZCBBbmNob3JOb2RlIik7dmFyIG49YnQodGhpcy5mb2N1cy5rZXkpO2puKG4pfHxLKDEwNCk7bGV0IHI9eHAobik7aWYocj09PW51bGwpdGhyb3cgRXJyb3IoImdldENlbGxSZWN0OiBleHBlY3RlZCB0byBmaW5kIGZvY3VzQ2VsbE5vZGUiKTtuPU1hdGgubWluKHQuY29sdW1uSW5kZXgsci5jb2x1bW5JbmRleCk7bGV0IG89TWF0aC5tYXgodC5jb2x1bW5JbmRleCxyLmNvbHVtbkluZGV4KSxpPU1hdGgubWluKHQucm93SW5kZXgsci5yb3dJbmRleCk7cmV0dXJuIHQ9TWF0aC5tYXgodC5yb3dJbmRleCxyLnJvd0luZGV4KSx7ZnJvbVg6TWF0aC5taW4obixvKSxmcm9tWTpNYXRoLm1pbihpLHQpLHRvWDpNYXRoLm1heChuLG8pLHRvWTpNYXRoLm1heChpLHQpfX1nZXROb2Rlcygpe2Z1bmN0aW9uIHQoXyl7bGV0e2NlbGw6dixzdGFydENvbHVtbjp5LHN0YXJ0Um93Onh9PV87YT1NYXRoLm1pbihhLHkpLHU9TWF0aC5taW4odSx4KSxjPU1hdGgubWF4KGMseSt2Ll9fY29sU3Bhbi0xKSxkPU1hdGgubWF4KGQseCt2Ll9fcm93U3Bhbi0xKX12YXIgbj10aGlzLl9jYWNoZWROb2RlcztpZihuIT09bnVsbClyZXR1cm4gbjt2YXIgcj10aGlzLmFuY2hvci5nZXROb2RlKCk7bj10aGlzLmZvY3VzLmdldE5vZGUoKSxyPXpjKHIsam4pO3ZhciBvPXpjKG4sam4pO2puKHIpfHxLKDEwMyksam4obyl8fEsoMTA0KSxuPXIuZ2V0UGFyZW50KCksVGEobil8fEsoMTA1KSxuPW4uZ2V0UGFyZW50KCksdm0obil8fEsoMTA2KTtsZXRbaSxsLHNdPW1TKG4scixvKSxhPU1hdGgubWluKGwuc3RhcnRDb2x1bW4scy5zdGFydENvbHVtbiksdT1NYXRoLm1pbihsLnN0YXJ0Um93LHMuc3RhcnRSb3cpLGM9TWF0aC5tYXgobC5zdGFydENvbHVtbitsLmNlbGwuX19jb2xTcGFuLTEscy5zdGFydENvbHVtbitzLmNlbGwuX19jb2xTcGFuLTEpLGQ9TWF0aC5tYXgobC5zdGFydFJvdytsLmNlbGwuX19yb3dTcGFuLTEscy5zdGFydFJvdytzLmNlbGwuX19yb3dTcGFuLTEpO3I9YSxvPXU7Zm9yKHZhciBmPWEsaD11O2E8cnx8dTxvfHxjPmZ8fGQ+aDspe2lmKGE8cil7dmFyIG09aC1vOy0tcjtmb3IodmFyIGc9MDtnPD1tO2crKyl0KGlbbytnXVtyXSl9aWYodTxvKWZvcihtPWYtciwtLW8sZz0wO2c8PW07ZysrKXQoaVtvXVtyK2ddKTtpZihjPmYpZm9yKG09aC1vLGYrPTEsZz0wO2c8PW07ZysrKXQoaVtvK2ddW2ZdKTtpZihkPmgpZm9yKG09Zi1yLGgrPTEsZz0wO2c8PW07ZysrKXQoaVtoXVtyK2ddKX1mb3Iobj1bbl0scj1udWxsLG89dTtvPD1kO28rKylmb3IoZj1hO2Y8PWM7ZisrKSh7Y2VsbDpofT1pW29dW2ZdKSxtPWguZ2V0UGFyZW50KCksVGEobSl8fEsoMTA3KSxtIT09ciYmbi5wdXNoKG0pLG4ucHVzaChoLC4uLlcyKGgpKSxyPW07cmV0dXJuIFhsKCl8fCh0aGlzLl9jYWNoZWROb2Rlcz1uKSxufWdldFRleHRDb250ZW50KCl7bGV0IHQ9dGhpcy5nZXROb2RlcygpLG49IiI7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspbis9dFtyXS5nZXRUZXh0Q29udGVudCgpO3JldHVybiBufX1mdW5jdGlvbiBmbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIE5kfWNsYXNzIE9pe2NvbnN0cnVjdG9yKHQsbixyLG8pe3RoaXMuYW5jaG9yPXQsdGhpcy5mb2N1cz1uLHRoaXMuZGlydHk9ITEsdGhpcy5mb3JtYXQ9cix0aGlzLnN0eWxlPW8sdGhpcy5fY2FjaGVkTm9kZXM9bnVsbCx0Ll9zZWxlY3Rpb249dGhpcyxuLl9zZWxlY3Rpb249dGhpc31pcyh0KXtyZXR1cm4gZmUodCk/dGhpcy5hbmNob3IuaXModC5hbmNob3IpJiZ0aGlzLmZvY3VzLmlzKHQuZm9jdXMpJiZ0aGlzLmZvcm1hdD09PXQuZm9ybWF0JiZ0aGlzLnN0eWxlPT09dC5zdHlsZTohMX1pc0JhY2t3YXJkKCl7cmV0dXJuIHRoaXMuZm9jdXMuaXNCZWZvcmUodGhpcy5hbmNob3IpfWlzQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuYW5jaG9yLmlzKHRoaXMuZm9jdXMpfWdldE5vZGVzKCl7dmFyIHQ9dGhpcy5fY2FjaGVkTm9kZXM7aWYodCE9PW51bGwpcmV0dXJuIHQ7dD10aGlzLmFuY2hvcjt2YXIgbj10aGlzLmZvY3VzLHI9dC5pc0JlZm9yZShuKSxvPXI/dDpuO3I9cj9uOnQsdD1vLmdldE5vZGUoKSxuPXIuZ2V0Tm9kZSgpO2xldCBpPW8ub2Zmc2V0O3JldHVybiBvPXIub2Zmc2V0LFcodCkmJihyPXQuZ2V0RGVzY2VuZGFudEJ5SW5kZXgoaSksdD1yPz90KSxXKG4pJiYocj1uLmdldERlc2NlbmRhbnRCeUluZGV4KG8pLHIhPT1udWxsJiZyIT09dCYmbi5nZXRDaGlsZEF0SW5kZXgobyk9PT1yJiYocj1yLmdldFByZXZpb3VzU2libGluZygpKSxuPXI/P24pLHQ9dC5pcyhuKT9XKHQpJiYwPHQuZ2V0Q2hpbGRyZW5TaXplKCk/W106W3RdOnQuZ2V0Tm9kZXNCZXR3ZWVuKG4pLFhsKCl8fCh0aGlzLl9jYWNoZWROb2Rlcz10KSx0fXNldFRleHROb2RlUmFuZ2UodCxuLHIsbyl7Z28odGhpcy5hbmNob3IsdC5fX2tleSxuLCJ0ZXh0IiksZ28odGhpcy5mb2N1cyxyLl9fa2V5LG8sInRleHQiKSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsLHRoaXMuZGlydHk9ITB9Z2V0VGV4dENvbnRlbnQoKXtsZXQgdD10aGlzLmdldE5vZGVzKCk7aWYodC5sZW5ndGg9PT0wKXJldHVybiIiO2xldCBuPXRbMF0scj10W3QubGVuZ3RoLTFdLG89dGhpcy5hbmNob3IsaT10aGlzLmZvY3VzLGw9by5pc0JlZm9yZShpKSxbcyxhXT1adSh0aGlzKSx1PSIiLGM9ITA7Zm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspe2xldCBmPXRbZF07aWYoVyhmKSYmIWYuaXNJbmxpbmUoKSljfHwodSs9YApgKSxjPSFmLmlzRW1wdHkoKTtlbHNlIGlmKGM9ITEsWihmKSl7bGV0IGg9Zi5nZXRUZXh0Q29udGVudCgpO2Y9PT1uP2Y9PT1yPyhvLnR5cGUhPT0iZWxlbWVudCJ8fGkudHlwZSE9PSJlbGVtZW50Inx8aS5vZmZzZXQ9PT1vLm9mZnNldCkmJihoPXM8YT9oLnNsaWNlKHMsYSk6aC5zbGljZShhLHMpKTpoPWw/aC5zbGljZShzKTpoLnNsaWNlKGEpOmY9PT1yJiYoaD1sP2guc2xpY2UoMCxhKTpoLnNsaWNlKDAscykpLHUrPWh9ZWxzZSFLZShmKSYmIWthKGYpfHxmPT09ciYmdGhpcy5pc0NvbGxhcHNlZCgpfHwodSs9Zi5nZXRUZXh0Q29udGVudCgpKX1yZXR1cm4gdX1hcHBseURPTVJhbmdlKHQpe2xldCBuPW90KCkscj1uLmdldEVkaXRvclN0YXRlKCkuX3NlbGVjdGlvbjtpZih0PXBTKHQuc3RhcnRDb250YWluZXIsdC5zdGFydE9mZnNldCx0LmVuZENvbnRhaW5lcix0LmVuZE9mZnNldCxuLHIpLHQhPT1udWxsKXt2YXJbbyxpXT10O2dvKHRoaXMuYW5jaG9yLG8ua2V5LG8ub2Zmc2V0LG8udHlwZSksZ28odGhpcy5mb2N1cyxpLmtleSxpLm9mZnNldCxpLnR5cGUpLHRoaXMuX2NhY2hlZE5vZGVzPW51bGx9fWNsb25lKCl7bGV0IHQ9dGhpcy5hbmNob3Isbj10aGlzLmZvY3VzO3JldHVybiBuZXcgT2kobmV3IGJyKHQua2V5LHQub2Zmc2V0LHQudHlwZSksbmV3IGJyKG4ua2V5LG4ub2Zmc2V0LG4udHlwZSksdGhpcy5mb3JtYXQsdGhpcy5zdHlsZSl9dG9nZ2xlRm9ybWF0KHQpe3RoaXMuZm9ybWF0PVdfKHRoaXMuZm9ybWF0LHQsbnVsbCksdGhpcy5kaXJ0eT0hMH1zZXRTdHlsZSh0KXt0aGlzLnN0eWxlPXQsdGhpcy5kaXJ0eT0hMH1oYXNGb3JtYXQodCl7cmV0dXJuKHRoaXMuZm9ybWF0JmNpW3RdKSE9PTB9aW5zZXJ0UmF3VGV4dCh0KXt0PXQuc3BsaXQoLyhccj9cbnxcdCkvKTtsZXQgbj1bXSxyPXQubGVuZ3RoO2ZvcihsZXQgbz0wO288cjtvKyspe2xldCBpPXRbb107aT09PWAKYHx8aT09PWBccgpgP24ucHVzaChPbCgpKTppPT09IgkiP24ucHVzaChiZCgpKTpuLnB1c2goJHQoaSkpfXRoaXMuaW5zZXJ0Tm9kZXMobil9aW5zZXJ0VGV4dCh0KXt2YXIgbj10aGlzLmFuY2hvcixyPXRoaXMuZm9jdXMsbz10aGlzLmlzQ29sbGFwc2VkKCl8fG4uaXNCZWZvcmUociksaT10aGlzLmZvcm1hdCxsPXRoaXMuc3R5bGU7byYmbi50eXBlPT09ImVsZW1lbnQiP0Z5KG4scixpLGwpOm98fHIudHlwZSE9PSJlbGVtZW50Inx8RnkocixuLGksbCk7dmFyIHM9dGhpcy5nZXROb2RlcygpLGE9cy5sZW5ndGgsdT1vP3I6bjtyPShvP246cikub2Zmc2V0O3ZhciBjPXUub2Zmc2V0O249c1swXSxaKG4pfHxLKDI2KSxvPW4uZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGg7dmFyIGQ9bi5nZXRQYXJlbnRPclRocm93KCksZj1zW2EtMV07aWYodGhpcy5pc0NvbGxhcHNlZCgpJiZyPT09byYmKG4uaXNTZWdtZW50ZWQoKXx8bi5pc1Rva2VuKCl8fCFuLmNhbkluc2VydFRleHRBZnRlcigpfHwhZC5jYW5JbnNlcnRUZXh0QWZ0ZXIoKSYmbi5nZXROZXh0U2libGluZygpPT09bnVsbCkpe3ZhciBoPW4uZ2V0TmV4dFNpYmxpbmcoKTtpZihaKGgpJiZoLmNhbkluc2VydFRleHRCZWZvcmUoKSYmIWlwKGgpfHwoaD0kdCgpLGguc2V0Rm9ybWF0KGkpLGQuY2FuSW5zZXJ0VGV4dEFmdGVyKCk/bi5pbnNlcnRBZnRlcihoKTpkLmluc2VydEFmdGVyKGgpKSxoLnNlbGVjdCgwLDApLG49aCx0IT09IiIpe3RoaXMuaW5zZXJ0VGV4dCh0KTtyZXR1cm59fWVsc2UgaWYodGhpcy5pc0NvbGxhcHNlZCgpJiZyPT09MCYmKG4uaXNTZWdtZW50ZWQoKXx8bi5pc1Rva2VuKCl8fCFuLmNhbkluc2VydFRleHRCZWZvcmUoKXx8IWQuY2FuSW5zZXJ0VGV4dEJlZm9yZSgpJiZuLmdldFByZXZpb3VzU2libGluZygpPT09bnVsbCkpe2lmKGg9bi5nZXRQcmV2aW91c1NpYmxpbmcoKSwoIVooaCl8fGlwKGgpKSYmKGg9JHQoKSxoLnNldEZvcm1hdChpKSxkLmNhbkluc2VydFRleHRCZWZvcmUoKT9uLmluc2VydEJlZm9yZShoKTpkLmluc2VydEJlZm9yZShoKSksaC5zZWxlY3QoKSxuPWgsdCE9PSIiKXt0aGlzLmluc2VydFRleHQodCk7cmV0dXJufX1lbHNlIGlmKG4uaXNTZWdtZW50ZWQoKSYmciE9PW8pZD0kdChuLmdldFRleHRDb250ZW50KCkpLGQuc2V0Rm9ybWF0KGkpLG4ucmVwbGFjZShkKSxuPWQ7ZWxzZSBpZighKHRoaXMuaXNDb2xsYXBzZWQoKXx8dD09PSIifHwoaD1mLmdldFBhcmVudCgpLGQuY2FuSW5zZXJ0VGV4dEJlZm9yZSgpJiZkLmNhbkluc2VydFRleHRBZnRlcigpJiYoIVcoaCl8fGguY2FuSW5zZXJ0VGV4dEJlZm9yZSgpJiZoLmNhbkluc2VydFRleHRBZnRlcigpKSkpKXt0aGlzLmluc2VydFRleHQoIiIpLGhTKHRoaXMuYW5jaG9yLHRoaXMuZm9jdXMsbnVsbCksdGhpcy5pbnNlcnRUZXh0KHQpO3JldHVybn1pZihhPT09MSlpZihuLmlzVG9rZW4oKSl0PSR0KHQpLHQuc2VsZWN0KCksbi5yZXBsYWNlKHQpO2Vsc2V7aWYocz1uLmdldEZvcm1hdCgpLGE9bi5nZXRTdHlsZSgpLHI9PT1jJiYocyE9PWl8fGEhPT1sKSlpZihuLmdldFRleHRDb250ZW50KCk9PT0iIiluLnNldEZvcm1hdChpKSxuLnNldFN0eWxlKGwpO2Vsc2V7cz0kdCh0KSxzLnNldEZvcm1hdChpKSxzLnNldFN0eWxlKGwpLHMuc2VsZWN0KCkscj09PTA/bi5pbnNlcnRCZWZvcmUocywhMSk6KFthXT1uLnNwbGl0VGV4dChyKSxhLmluc2VydEFmdGVyKHMsITEpKSxzLmlzQ29tcG9zaW5nKCkmJnRoaXMuYW5jaG9yLnR5cGU9PT0idGV4dCImJih0aGlzLmFuY2hvci5vZmZzZXQtPXQubGVuZ3RoKTtyZXR1cm59bj1uLnNwbGljZVRleHQocixjLXIsdCwhMCksbi5nZXRUZXh0Q29udGVudCgpPT09IiI/bi5yZW1vdmUoKTp0aGlzLmFuY2hvci50eXBlPT09InRleHQiJiYobi5pc0NvbXBvc2luZygpP3RoaXMuYW5jaG9yLm9mZnNldC09dC5sZW5ndGg6KHRoaXMuZm9ybWF0PXMsdGhpcy5zdHlsZT1hKSl9ZWxzZXtpZihpPW5ldyBTZXQoWy4uLm4uZ2V0UGFyZW50S2V5cygpLC4uLmYuZ2V0UGFyZW50S2V5cygpXSksaD1XKG4pP246bi5nZXRQYXJlbnRPclRocm93KCksbD1XKGYpP2Y6Zi5nZXRQYXJlbnRPclRocm93KCksZD1mLCFoLmlzKGwpJiZsLmlzSW5saW5lKCkpZG8gZD1sLGw9bC5nZXRQYXJlbnRPclRocm93KCk7d2hpbGUobC5pc0lubGluZSgpKTtpZih1LnR5cGU9PT0idGV4dCImJihjIT09MHx8Zi5nZXRUZXh0Q29udGVudCgpPT09IiIpfHx1LnR5cGU9PT0iZWxlbWVudCImJmYuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKTxjKWlmKFooZikmJiFmLmlzVG9rZW4oKSYmYyE9PWYuZ2V0VGV4dENvbnRlbnRTaXplKCkpe2lmKGYuaXNTZWdtZW50ZWQoKSl7dmFyIG09JHQoZi5nZXRUZXh0Q29udGVudCgpKTtmLnJlcGxhY2UobSksZj1tfXJuKHUuZ2V0Tm9kZSgpKXx8KGY9Zi5zcGxpY2VUZXh0KDAsYywiIikpLGkuYWRkKGYuX19rZXkpfWVsc2UgdT1mLmdldFBhcmVudE9yVGhyb3coKSx1LmNhbkJlRW1wdHkoKXx8dS5nZXRDaGlsZHJlblNpemUoKSE9PTE/Zi5yZW1vdmUoKTp1LnJlbW92ZSgpO2Vsc2UgaS5hZGQoZi5fX2tleSk7Zm9yKHU9bC5nZXRDaGlsZHJlbigpLGM9bmV3IFNldChzKSxmPWguaXMobCksaD1oLmlzSW5saW5lKCkmJm4uZ2V0TmV4dFNpYmxpbmcoKT09PW51bGw/aDpuLG09dS5sZW5ndGgtMTswPD1tO20tLSl7bGV0IGc9dVttXTtpZihnLmlzKG4pfHxXKGcpJiZnLmlzUGFyZW50T2YobikpYnJlYWs7Zy5pc0F0dGFjaGVkKCkmJighYy5oYXMoZyl8fGcuaXMoZCk/Znx8aC5pbnNlcnRBZnRlcihnLCExKTpnLnJlbW92ZSgpKX1pZighZilmb3IodT1sLGM9bnVsbDt1IT09bnVsbDspbD11LmdldENoaWxkcmVuKCksZj1sLmxlbmd0aCwoZj09PTB8fGxbZi0xXS5pcyhjKSkmJihpLmRlbGV0ZSh1Ll9fa2V5KSxjPXUpLHU9dS5nZXRQYXJlbnQoKTtmb3Iobi5pc1Rva2VuKCk/cj09PW8/bi5zZWxlY3QoKToodD0kdCh0KSx0LnNlbGVjdCgpLG4ucmVwbGFjZSh0KSk6KG49bi5zcGxpY2VUZXh0KHIsby1yLHQsITApLG4uZ2V0VGV4dENvbnRlbnQoKT09PSIiP24ucmVtb3ZlKCk6bi5pc0NvbXBvc2luZygpJiZ0aGlzLmFuY2hvci50eXBlPT09InRleHQiJiYodGhpcy5hbmNob3Iub2Zmc2V0LT10Lmxlbmd0aCkpLHQ9MTt0PGE7dCsrKW49c1t0XSxpLmhhcyhuLl9fa2V5KXx8bi5yZW1vdmUoKX19cmVtb3ZlVGV4dCgpe3RoaXMuaW5zZXJ0VGV4dCgiIil9Zm9ybWF0VGV4dCh0KXtpZih0aGlzLmlzQ29sbGFwc2VkKCkpdGhpcy50b2dnbGVGb3JtYXQodCksRHQobnVsbCk7ZWxzZXt2YXIgbj10aGlzLmdldE5vZGVzKCkscj1bXTtmb3IodmFyIG8gb2YgbilaKG8pJiZyLnB1c2gobyk7dmFyIGk9ci5sZW5ndGg7aWYoaT09PTApdGhpcy50b2dnbGVGb3JtYXQodCksRHQobnVsbCk7ZWxzZXtvPXRoaXMuYW5jaG9yO3ZhciBsPXRoaXMuZm9jdXMscz10aGlzLmlzQmFja3dhcmQoKTtuPXM/bDpvLG89cz9vOmw7dmFyIGE9MCx1PXJbMF07aWYobD1uLnR5cGU9PT0iZWxlbWVudCI/MDpuLm9mZnNldCxuLnR5cGU9PT0idGV4dCImJmw9PT11LmdldFRleHRDb250ZW50U2l6ZSgpJiYoYT0xLHU9clsxXSxsPTApLHUhPW51bGwpe3M9dS5nZXRGb3JtYXRGbGFncyh0LG51bGwpO3ZhciBjPWktMSxkPXJbY107aWYoaT1vLnR5cGU9PT0idGV4dCI/by5vZmZzZXQ6ZC5nZXRUZXh0Q29udGVudFNpemUoKSx1LmlzKGQpKWwhPT1pJiYobD09PTAmJmk9PT11LmdldFRleHRDb250ZW50U2l6ZSgpP3Uuc2V0Rm9ybWF0KHMpOih0PXUuc3BsaXRUZXh0KGwsaSksdD1sPT09MD90WzBdOnRbMV0sdC5zZXRGb3JtYXQocyksbi50eXBlPT09InRleHQiJiZuLnNldCh0Ll9fa2V5LDAsInRleHQiKSxvLnR5cGU9PT0idGV4dCImJm8uc2V0KHQuX19rZXksaS1sLCJ0ZXh0IikpLHRoaXMuZm9ybWF0PXMpO2Vsc2V7bCE9PTAmJihbLHVdPXUuc3BsaXRUZXh0KGwpLGw9MCksdS5zZXRGb3JtYXQocyk7dmFyIGY9ZC5nZXRGb3JtYXRGbGFncyh0LHMpO2ZvcigwPGkmJihpIT09ZC5nZXRUZXh0Q29udGVudFNpemUoKSYmKFtkXT1kLnNwbGl0VGV4dChpKSksZC5zZXRGb3JtYXQoZikpLGErPTE7YTxjO2ErKyl7bGV0IGg9clthXTtpZighaC5pc1Rva2VuKCkpe2xldCBtPWguZ2V0Rm9ybWF0RmxhZ3ModCxmKTtoLnNldEZvcm1hdChtKX19bi50eXBlPT09InRleHQiJiZuLnNldCh1Ll9fa2V5LGwsInRleHQiKSxvLnR5cGU9PT0idGV4dCImJm8uc2V0KGQuX19rZXksaSwidGV4dCIpLHRoaXMuZm9ybWF0PXN8Zn19fX19aW5zZXJ0Tm9kZXModCxuKXtpZighdGhpcy5pc0NvbGxhcHNlZCgpKXt2YXIgcj10aGlzLmlzQmFja3dhcmQoKT90aGlzLmFuY2hvcjp0aGlzLmZvY3VzLG89ci5nZXROb2RlKCkuZ2V0TmV4dFNpYmxpbmcoKTtpZihvPW8/by5nZXRLZXkoKTpudWxsLHI9KHI9ci5nZXROb2RlKCkuZ2V0UHJldmlvdXNTaWJsaW5nKCkpP3IuZ2V0S2V5KCk6bnVsbCx0aGlzLnJlbW92ZVRleHQoKSx0aGlzLmlzQ29sbGFwc2VkKCkmJnRoaXMuZm9jdXMudHlwZT09PSJlbGVtZW50Iil7aWYodGhpcy5mb2N1cy5rZXk9PT1vJiZ0aGlzLmZvY3VzLm9mZnNldD09PTApe3ZhciBpPSR0KCk7dGhpcy5mb2N1cy5nZXROb2RlKCkuaW5zZXJ0QmVmb3JlKGkpfWVsc2UgdGhpcy5mb2N1cy5rZXk9PT1yJiZ0aGlzLmZvY3VzLm9mZnNldD09PXRoaXMuZm9jdXMuZ2V0Tm9kZSgpLmdldENoaWxkcmVuU2l6ZSgpJiYoaT0kdCgpLHRoaXMuZm9jdXMuZ2V0Tm9kZSgpLmluc2VydEFmdGVyKGkpKTtpJiYodGhpcy5mb2N1cy5zZXQoaS5fX2tleSwwLCJ0ZXh0IiksdGhpcy5hbmNob3Iuc2V0KGkuX19rZXksMCwidGV4dCIpKX19aT10aGlzLmFuY2hvcixyPWkub2Zmc2V0O3ZhciBsPWkuZ2V0Tm9kZSgpO289bCxpLnR5cGU9PT0iZWxlbWVudCImJihpPWkuZ2V0Tm9kZSgpLG89aS5nZXRDaGlsZEF0SW5kZXgoci0xKSxvPW89PT1udWxsP2k6byksaT1bXTt2YXIgcz1sLmdldE5leHRTaWJsaW5ncygpLGE9b3IobCk/bnVsbDpsLmdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKTtpZihaKGwpKWlmKG89bC5nZXRUZXh0Q29udGVudCgpLmxlbmd0aCxyPT09MCYmbyE9PTApbz1sLmdldFByZXZpb3VzU2libGluZygpLG89byE9PW51bGw/bzpsLmdldFBhcmVudE9yVGhyb3coKSxpLnB1c2gobCk7ZWxzZSBpZihyPT09bylvPWw7ZWxzZXtpZihsLmlzVG9rZW4oKSlyZXR1cm4hMTtbbyxsXT1sLnNwbGl0VGV4dChyKSxpLnB1c2gobCl9bD1vLGkucHVzaCguLi5zKSxzPXRbMF07dmFyIHU9ITEsYz1udWxsO2ZvcihsZXQgbT0wO208dC5sZW5ndGg7bSsrKXt2YXIgZD10W21dO2lmKG9yKG8pfHxLZShvKXx8IVcoZCl8fGQuaXNJbmxpbmUoKSl1JiYhVyhkKSYmIUtlKGQpJiZvcihvLmdldFBhcmVudCgpKSYmSygyOCk7ZWxzZXtpZihkLmlzKHMpKXtpZihXKG8pJiZvLmlzRW1wdHkoKSYmby5jYW5SZXBsYWNlV2l0aChkKSl7by5yZXBsYWNlKGQpLG89ZCx1PSEwO2NvbnRpbnVlfWlmKHU9ZC5nZXRGaXJzdERlc2NlbmRhbnQoKSxVXyh1KSl7Zm9yKHZhciBmPXUuZ2V0UGFyZW50T3JUaHJvdygpO2YuaXNJbmxpbmUoKTspZj1mLmdldFBhcmVudE9yVGhyb3coKTtpZihjPWYuZ2V0Q2hpbGRyZW4oKSx1PWMubGVuZ3RoLFcobykpe3ZhciBoPW8uZ2V0Rmlyc3RDaGlsZCgpO2ZvcihsZXQgZz0wO2c8dTtnKyspe2xldCBfPWNbZ107aD09PW51bGw/by5hcHBlbmQoXyk6aC5pbnNlcnRBZnRlcihfKSxoPV99fWVsc2V7Zm9yKGg9dS0xOzA8PWg7aC0tKW8uaW5zZXJ0QWZ0ZXIoY1toXSk7bz1vLmdldFBhcmVudE9yVGhyb3coKX1pZihjPWNbdS0xXSxmLnJlbW92ZSgpLHU9ITAsZi5pcyhkKSljb250aW51ZX19WihvKSYmKGE9PT1udWxsJiZLKDI3KSxvPWEpfXU9ITEsVyhvKSYmIW8uaXNJbmxpbmUoKT8oYz1kLEtlKGQpJiYhZC5pc0lubGluZSgpP289dC5sZW5ndGg9PT0xJiZvLmNhbkJlRW1wdHkoKSYmby5pc0VtcHR5KCk/by5pbnNlcnRCZWZvcmUoZCwhMSk6by5pbnNlcnRBZnRlcihkLCExKTpXKGQpPyhkLmNhbkJlRW1wdHkoKXx8IWQuaXNFbXB0eSgpKSYmKHJuKG8pPyhmPW8uZ2V0Q2hpbGRBdEluZGV4KHIpLGYhPT1udWxsP2YuaW5zZXJ0QmVmb3JlKGQpOm8uYXBwZW5kKGQpLG89ZCk6ZC5pc0lubGluZSgpPyhvLmFwcGVuZChkKSxvPWQpOm89by5pbnNlcnRBZnRlcihkLCExKSk6KGY9by5nZXRGaXJzdENoaWxkKCksZiE9PW51bGw/Zi5pbnNlcnRCZWZvcmUoZCk6by5hcHBlbmQoZCksbz1kKSk6IVcoZCl8fFcoZCkmJmQuaXNJbmxpbmUoKXx8S2UobykmJiFvLmlzSW5saW5lKCk/KGM9ZCxmZSh0aGlzKSYmS2UoZCkmJihXKG8pfHxaKG8pKSYmIWQuaXNJbmxpbmUoKT8oWihvKT8oZj1vLmdldFBhcmVudE9yVGhyb3coKSxbb109by5zcGxpdFRleHQociksbz1vLmdldEluZGV4V2l0aGluUGFyZW50KCkrMSk6KGY9byxvPXIpLFssb109Wl8oZixvKSxvPW8uaW5zZXJ0QmVmb3JlKGQpKTpvPW8uaW5zZXJ0QWZ0ZXIoZCwhMSkpOihkPW8uZ2V0UGFyZW50T3JUaHJvdygpLGthKG8pJiZvLnJlbW92ZSgpLG89ZCxtLS0pfWlmKG4mJihaKGwpP2wuc2VsZWN0KCk6KHQ9by5nZXRQcmV2aW91c1NpYmxpbmcoKSxaKHQpP3Quc2VsZWN0KCk6KHQ9by5nZXRJbmRleFdpdGhpblBhcmVudCgpLG8uZ2V0UGFyZW50T3JUaHJvdygpLnNlbGVjdCh0LHQpKSkpLFcobykpe2lmKHQ9WihjKT9jOlcoYykmJmMuaXNJbmxpbmUoKT9jLmdldExhc3REZXNjZW5kYW50KCk6by5nZXRMYXN0RGVzY2VuZGFudCgpLG58fCh0PT09bnVsbD9vLnNlbGVjdCgpOloodCk/dC5nZXRUZXh0Q29udGVudCgpPT09IiI/dC5zZWxlY3RQcmV2aW91cygpOnQuc2VsZWN0KCk6dC5zZWxlY3ROZXh0KCkpLGkubGVuZ3RoIT09MClmb3Iobj1vLHQ9aS5sZW5ndGgtMTswPD10O3QtLSlyPWlbdF0sYT1yLmdldFBhcmVudE9yVGhyb3coKSwhVyhvKXx8d3Aocil8fEtlKHIpJiYoIXIuaXNJbmxpbmUoKXx8ci5pc0lzb2xhdGVkKCkpP1cobyl8fHdwKHIpP1cocikmJiFyLmNhbkluc2VydEFmdGVyKG8pPyhsPWEuY29uc3RydWN0b3IuY2xvbmUoYSksVyhsKXx8SygyOSksbC5hcHBlbmQociksby5pbnNlcnRBZnRlcihsKSk6by5pbnNlcnRBZnRlcihyKTooby5pbnNlcnRCZWZvcmUociksbz1yKToobj09PW8/by5hcHBlbmQocik6by5pbnNlcnRCZWZvcmUociksbz1yKSxhLmlzRW1wdHkoKSYmIWEuY2FuQmVFbXB0eSgpJiZhLnJlbW92ZSgpfWVsc2Ugbnx8KFoobyk/by5zZWxlY3QoKToobj1vLmdldFBhcmVudE9yVGhyb3coKSx0PW8uZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSsxLG4uc2VsZWN0KHQsdCkpKTtyZXR1cm4hMH1pbnNlcnRQYXJhZ3JhcGgoKXt0aGlzLmlzQ29sbGFwc2VkKCl8fHRoaXMucmVtb3ZlVGV4dCgpO3ZhciB0PXRoaXMuYW5jaG9yLG49dC5vZmZzZXQscj1bXTtpZih0LnR5cGU9PT0idGV4dCIpe3ZhciBvPXQuZ2V0Tm9kZSgpLGk9by5nZXROZXh0U2libGluZ3MoKS5yZXZlcnNlKCksbD1vLmdldFBhcmVudE9yVGhyb3coKSxzPWwuaXNJbmxpbmUoKSxhPXM/bC5nZXRUZXh0Q29udGVudFNpemUoKTpvLmdldFRleHRDb250ZW50U2l6ZSgpO249PT0wP2kucHVzaChvKToocyYmKHI9bC5nZXROZXh0U2libGluZ3MoKSksbj09PWF8fHMmJm49PT1vLmdldFRleHRDb250ZW50U2l6ZSgpfHwoWyxvXT1vLnNwbGl0VGV4dChuKSxpLnB1c2gobykpKX1lbHNle2lmKGw9dC5nZXROb2RlKCksb3IobCkpe2k9d2koKSxyPWwuZ2V0Q2hpbGRBdEluZGV4KG4pLGkuc2VsZWN0KCksciE9PW51bGw/ci5pbnNlcnRCZWZvcmUoaSwhMSk6bC5hcHBlbmQoaSk7cmV0dXJufWk9bC5nZXRDaGlsZHJlbigpLnNsaWNlKG4pLnJldmVyc2UoKX1pZihvPWkubGVuZ3RoLG49PT0wJiYwPG8mJmwuaXNJbmxpbmUoKSl7aWYocj1sLmdldFBhcmVudE9yVGhyb3coKSxpPXIuaW5zZXJ0TmV3QWZ0ZXIodGhpcywhMSksVyhpKSlmb3Iocj1yLmdldENoaWxkcmVuKCksbD0wO2w8ci5sZW5ndGg7bCsrKWkuYXBwZW5kKHJbbF0pfWVsc2UgaWYocz1sLmluc2VydE5ld0FmdGVyKHRoaXMsITEpLHM9PT1udWxsKXRoaXMuaW5zZXJ0TGluZUJyZWFrKCk7ZWxzZSBpZihXKHMpKWlmKGE9bC5nZXRGaXJzdENoaWxkKCksbj09PTAmJihsLmlzKHQuZ2V0Tm9kZSgpKXx8YSYmYS5pcyh0LmdldE5vZGUoKSkpJiYwPG8pbC5pbnNlcnRCZWZvcmUocyk7ZWxzZXtpZihsPW51bGwsbj1yLmxlbmd0aCx0PXMuZ2V0UGFyZW50T3JUaHJvdygpLDA8bilmb3IoYT0wO2E8bjthKyspdC5hcHBlbmQoclthXSk7aWYobyE9PTApZm9yKHI9MDtyPG87cisrKW49aVtyXSxsPT09bnVsbD9zLmFwcGVuZChuKTpsLmluc2VydEJlZm9yZShuKSxsPW47cy5jYW5CZUVtcHR5KCl8fHMuZ2V0Q2hpbGRyZW5TaXplKCkhPT0wP3Muc2VsZWN0U3RhcnQoKToocy5zZWxlY3RQcmV2aW91cygpLHMucmVtb3ZlKCkpfX1pbnNlcnRMaW5lQnJlYWsodCl7bGV0IG49T2woKTt2YXIgcj10aGlzLmFuY2hvcjtyLnR5cGU9PT0iZWxlbWVudCImJihyPXIuZ2V0Tm9kZSgpLHJuKHIpJiZ0aGlzLmluc2VydFBhcmFncmFwaCgpKSx0P3RoaXMuaW5zZXJ0Tm9kZXMoW25dLCEwKTp0aGlzLmluc2VydE5vZGVzKFtuXSkmJm4uc2VsZWN0TmV4dCgwLDApfWdldENoYXJhY3Rlck9mZnNldHMoKXtyZXR1cm4gWnUodGhpcyl9ZXh0cmFjdCgpe3ZhciB0PXRoaXMuZ2V0Tm9kZXMoKSxuPXQubGVuZ3RoLHI9bi0xLG89dGhpcy5hbmNob3I7bGV0IGk9dGhpcy5mb2N1czt2YXIgbD10WzBdO2xldCBzPXRbcl0sW2EsdV09WnUodGhpcyk7cmV0dXJuIG49PT0wP1tdOm49PT0xP1oobCkmJiF0aGlzLmlzQ29sbGFwc2VkKCk/KHQ9YT51P3U6YSxyPWwuc3BsaXRUZXh0KHQsYT51P2E6dSksdD10PT09MD9yWzBdOnJbMV0sdCE9bnVsbD9bdF06W10pOltsXToobj1vLmlzQmVmb3JlKGkpLFoobCkmJihvPW4/YTp1LG89PT1sLmdldFRleHRDb250ZW50U2l6ZSgpP3Quc2hpZnQoKTpvIT09MCYmKFssbF09bC5zcGxpdFRleHQobyksdFswXT1sKSksWihzKSYmKGw9cy5nZXRUZXh0Q29udGVudCgpLmxlbmd0aCxuPW4/dTphLG49PT0wP3QucG9wKCk6biE9PWwmJihbc109cy5zcGxpdFRleHQobiksdFtyXT1zKSksdCl9bW9kaWZ5KHQsbixyKXt2YXIgbz10aGlzLmZvY3VzLGk9dGhpcy5hbmNob3IsbD10PT09Im1vdmUiLHM9bHAobyxuKTtpZihLZShzKSYmIXMuaXNJc29sYXRlZCgpKWwmJnMuaXNLZXlib2FyZFNlbGVjdGFibGUoKT8obj1fcCgpLG4uYWRkKHMuX19rZXkpLGtyKG4pKToodD1uP3MuZ2V0UHJldmlvdXNTaWJsaW5nKCk6cy5nZXROZXh0U2libGluZygpLFoodCk/KHM9dC5fX2tleSxuPW4/dC5nZXRUZXh0Q29udGVudCgpLmxlbmd0aDowLG8uc2V0KHMsbiwidGV4dCIpLGwmJmkuc2V0KHMsbiwidGV4dCIpKToocj1zLmdldFBhcmVudE9yVGhyb3coKSxXKHQpPyhyPXQuX19rZXkscz1uP3QuZ2V0Q2hpbGRyZW5TaXplKCk6MCk6KHM9cy5nZXRJbmRleFdpdGhpblBhcmVudCgpLHI9ci5fX2tleSxufHxzKyspLG8uc2V0KHIscywiZWxlbWVudCIpLGwmJmkuc2V0KHIscywiZWxlbWVudCIpKSk7ZWxzZSBpZihpPW90KCksbz1QcihpLl93aW5kb3cpKXt2YXIgYT1pLl9ibG9ja0N1cnNvckVsZW1lbnQsdT1pLl9yb290RWxlbWVudDtpZih1PT09bnVsbHx8YT09PW51bGx8fCFXKHMpfHxzLmlzSW5saW5lKCl8fHMuY2FuQmVFbXB0eSgpfHxzcChhLGksdSksby5tb2RpZnkodCxuPyJiYWNrd2FyZCI6ImZvcndhcmQiLHIpLDA8by5yYW5nZUNvdW50JiYocz1vLmdldFJhbmdlQXQoMCksaT10aGlzLmFuY2hvci5nZXROb2RlKCksaT1ybihpKT9pOlFfKGkpLHRoaXMuYXBwbHlET01SYW5nZShzKSx0aGlzLmRpcnR5PSEwLCFsKSl7Zm9yKGw9dGhpcy5nZXROb2RlcygpLHQ9W10scj0hMSxhPTA7YTxsLmxlbmd0aDthKyspdT1sW2FdLGpjKHUsaSk/dC5wdXNoKHUpOnI9ITA7ciYmMDx0Lmxlbmd0aCYmKG4/KG49dFswXSxXKG4pP24uc2VsZWN0U3RhcnQoKTpuLmdldFBhcmVudE9yVGhyb3coKS5zZWxlY3RTdGFydCgpKToobj10W3QubGVuZ3RoLTFdLFcobik/bi5zZWxlY3RFbmQoKTpuLmdldFBhcmVudE9yVGhyb3coKS5zZWxlY3RFbmQoKSkpLChvLmFuY2hvck5vZGUhPT1zLnN0YXJ0Q29udGFpbmVyfHxvLmFuY2hvck9mZnNldCE9PXMuc3RhcnRPZmZzZXQpJiYobj10aGlzLmZvY3VzLGw9dGhpcy5hbmNob3Isbz1sLmtleSxzPWwub2Zmc2V0LGk9bC50eXBlLGdvKGwsbi5rZXksbi5vZmZzZXQsbi50eXBlKSxnbyhuLG8scyxpKSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsKX19fWRlbGV0ZUNoYXJhY3Rlcih0KXtsZXQgbj10aGlzLmlzQ29sbGFwc2VkKCk7aWYodGhpcy5pc0NvbGxhcHNlZCgpKXt2YXIgcj10aGlzLmFuY2hvcixvPXRoaXMuZm9jdXMsaT1yLmdldE5vZGUoKTtpZighdCYmKHIudHlwZT09PSJlbGVtZW50IiYmVyhpKSYmci5vZmZzZXQ9PT1pLmdldENoaWxkcmVuU2l6ZSgpfHxyLnR5cGU9PT0idGV4dCImJnIub2Zmc2V0PT09aS5nZXRUZXh0Q29udGVudFNpemUoKSkpe3ZhciBsPWkuZ2V0UGFyZW50KCk7aWYobD1pLmdldE5leHRTaWJsaW5nKCl8fChsPT09bnVsbD9udWxsOmwuZ2V0TmV4dFNpYmxpbmcoKSksVyhsKSYmbC5pc1NoYWRvd1Jvb3QoKSlyZXR1cm59aWYobD1scChvLHQpLEtlKGwpJiYhbC5pc0lzb2xhdGVkKCkpe2wuaXNLZXlib2FyZFNlbGVjdGFibGUoKSYmVyhpKSYmaS5nZXRDaGlsZHJlblNpemUoKT09PTA/KGkucmVtb3ZlKCksdD1fcCgpLHQuYWRkKGwuX19rZXkpLGtyKHQpKToobC5yZW1vdmUoKSxvdCgpLmRpc3BhdGNoQ29tbWFuZCh3ZCx2b2lkIDApKTtyZXR1cm59aWYoIXQmJlcobCkmJlcoaSkmJmkuaXNFbXB0eSgpKXtpLnJlbW92ZSgpLGwuc2VsZWN0U3RhcnQoKTtyZXR1cm59aWYodGhpcy5tb2RpZnkoImV4dGVuZCIsdCwiY2hhcmFjdGVyIiksdGhpcy5pc0NvbGxhcHNlZCgpKXtpZih0JiZyLm9mZnNldD09PTAmJihyLnR5cGU9PT0iZWxlbWVudCI/ci5nZXROb2RlKCk6ci5nZXROb2RlKCkuZ2V0UGFyZW50T3JUaHJvdygpKS5jb2xsYXBzZUF0U3RhcnQodGhpcykpcmV0dXJufWVsc2V7aWYobD1vLnR5cGU9PT0idGV4dCI/by5nZXROb2RlKCk6bnVsbCxpPXIudHlwZT09PSJ0ZXh0Ij9yLmdldE5vZGUoKTpudWxsLGwhPT1udWxsJiZsLmlzU2VnbWVudGVkKCkpe2lmKHI9by5vZmZzZXQsbz1sLmdldFRleHRDb250ZW50U2l6ZSgpLGwuaXMoaSl8fHQmJnIhPT1vfHwhdCYmciE9PTApe1d5KGwsdCxyKTtyZXR1cm59fWVsc2UgaWYoaSE9PW51bGwmJmkuaXNTZWdtZW50ZWQoKSYmKHI9ci5vZmZzZXQsbz1pLmdldFRleHRDb250ZW50U2l6ZSgpLGkuaXMobCl8fHQmJnIhPT0wfHwhdCYmciE9PW8pKXtXeShpLHQscik7cmV0dXJufWlmKGk9dGhpcy5hbmNob3IsbD10aGlzLmZvY3VzLHI9aS5nZXROb2RlKCksbz1sLmdldE5vZGUoKSxyPT09byYmaS50eXBlPT09InRleHQiJiZsLnR5cGU9PT0idGV4dCIpe3ZhciBzPWkub2Zmc2V0LGE9bC5vZmZzZXQ7bGV0IHU9czxhO289dT9zOmEsYT11P2E6cyxzPWEtMSxvIT09cyYmKHI9ci5nZXRUZXh0Q29udGVudCgpLnNsaWNlKG8sYSksR18ocil8fCh0P2wub2Zmc2V0PXM6aS5vZmZzZXQ9cykpfX19dGhpcy5yZW1vdmVUZXh0KCksdCYmIW4mJnRoaXMuaXNDb2xsYXBzZWQoKSYmdGhpcy5hbmNob3IudHlwZT09PSJlbGVtZW50IiYmdGhpcy5hbmNob3Iub2Zmc2V0PT09MCYmKHQ9dGhpcy5hbmNob3IuZ2V0Tm9kZSgpLHQuaXNFbXB0eSgpJiZybih0LmdldFBhcmVudCgpKSYmdC5nZXRJbmRleFdpdGhpblBhcmVudCgpPT09MCYmdC5jb2xsYXBzZUF0U3RhcnQodGhpcykpfWRlbGV0ZUxpbmUodCl7dGhpcy5pc0NvbGxhcHNlZCgpJiYodGhpcy5hbmNob3IudHlwZT09PSJ0ZXh0IiYmdGhpcy5tb2RpZnkoImV4dGVuZCIsdCwibGluZWJvdW5kYXJ5IiksKHQ/dGhpcy5mb2N1czp0aGlzLmFuY2hvcikub2Zmc2V0PT09MCYmdGhpcy5tb2RpZnkoImV4dGVuZCIsdCwiY2hhcmFjdGVyIikpLHRoaXMucmVtb3ZlVGV4dCgpfWRlbGV0ZVdvcmQodCl7dGhpcy5pc0NvbGxhcHNlZCgpJiZ0aGlzLm1vZGlmeSgiZXh0ZW5kIix0LCJ3b3JkIiksdGhpcy5yZW1vdmVUZXh0KCl9fWZ1bmN0aW9uIEdsKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVGR9ZnVuY3Rpb24gQnkoZSl7bGV0IHQ9ZS5vZmZzZXQ7cmV0dXJuIGUudHlwZT09PSJ0ZXh0Ij90OihlPWUuZ2V0Tm9kZSgpLHQ9PT1lLmdldENoaWxkcmVuU2l6ZSgpP2UuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGg6MCl9ZnVuY3Rpb24gWnUoZSl7bGV0IHQ9ZS5hbmNob3I7cmV0dXJuIGU9ZS5mb2N1cyx0LnR5cGU9PT0iZWxlbWVudCImJmUudHlwZT09PSJlbGVtZW50IiYmdC5rZXk9PT1lLmtleSYmdC5vZmZzZXQ9PT1lLm9mZnNldD9bMCwwXTpbQnkodCksQnkoZSldfWZ1bmN0aW9uIFd5KGUsdCxuKXtsZXQgcj1lLmdldFRleHRDb250ZW50KCkuc3BsaXQoLyg/PVxzKS9nKSxvPXIubGVuZ3RoLGk9MCxsPTA7Zm9yKGxldCBzPTA7czxvO3MrKyl7bGV0IGE9cltzXSx1PXM9PT1vLTE7aWYobD1pLGkrPWEubGVuZ3RoLHQmJmk9PT1ufHxpPm58fHUpe3Iuc3BsaWNlKHMsMSksdSYmKGw9dm9pZCAwKTticmVha319dD1yLmpvaW4oIiIpLnRyaW0oKSx0PT09IiI/ZS5yZW1vdmUoKTooZS5zZXRUZXh0Q29udGVudCh0KSxlLnNlbGVjdChsLGwpKX1mdW5jdGlvbiBVeShlLHQsbixyKXt2YXIgbz10O2lmKGUubm9kZVR5cGU9PT0xKXtsZXQgcz0hMTt2YXIgaT1lLmNoaWxkTm9kZXMsbD1pLmxlbmd0aDtvPT09bCYmKHM9ITAsbz1sLTEpO2xldCBhPWlbb107aWYobD0hMSxhPT09ci5fYmxvY2tDdXJzb3JFbGVtZW50PyhhPWlbbysxXSxsPSEwKTpyLl9ibG9ja0N1cnNvckVsZW1lbnQhPT1udWxsJiZvLS0scj1zbChhKSxaKHIpKW89cz9yLmdldFRleHRDb250ZW50U2l6ZSgpOjA7ZWxzZXtpZihpPXNsKGUpLGk9PT1udWxsKXJldHVybiBudWxsO2lmKFcoaSk/KGU9aS5nZXRDaGlsZEF0SW5kZXgobyksKHQ9VyhlKSkmJih0PWUuZ2V0UGFyZW50KCksdD1uPT09bnVsbHx8dD09PW51bGx8fCF0LmNhbkJlRW1wdHkoKXx8dCE9PW4uZ2V0Tm9kZSgpKSx0JiYobj1zP2UuZ2V0TGFzdERlc2NlbmRhbnQoKTplLmdldEZpcnN0RGVzY2VuZGFudCgpLG49PT1udWxsPyhpPWUsbz0wKTooZT1uLGk9VyhlKT9lOmUuZ2V0UGFyZW50T3JUaHJvdygpKSksWihlKT8ocj1lLGk9bnVsbCxvPXM/ZS5nZXRUZXh0Q29udGVudFNpemUoKTowKTplIT09aSYmcyYmIWwmJm8rKyk6KG89aS5nZXRJbmRleFdpdGhpblBhcmVudCgpLG89dD09PTAmJktlKGkpJiZzbChlKT09PWk/bzpvKzEsaT1pLmdldFBhcmVudE9yVGhyb3coKSksVyhpKSlyZXR1cm4gbmV3IGJyKGkuX19rZXksbywiZWxlbWVudCIpfX1lbHNlIHI9c2woZSk7cmV0dXJuIFoocik/bmV3IGJyKHIuX19rZXksbywidGV4dCIpOm51bGx9ZnVuY3Rpb24gSHkoZSx0LG4pe3ZhciByPWUub2Zmc2V0LG89ZS5nZXROb2RlKCk7cj09PTA/KHI9by5nZXRQcmV2aW91c1NpYmxpbmcoKSxvPW8uZ2V0UGFyZW50KCksdD8obnx8IXQpJiZyPT09bnVsbCYmVyhvKSYmby5pc0lubGluZSgpJiYodD1vLmdldFByZXZpb3VzU2libGluZygpLFoodCkmJihlLmtleT10Ll9fa2V5LGUub2Zmc2V0PXQuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGgpKTpXKHIpJiYhbiYmci5pc0lubGluZSgpPyhlLmtleT1yLl9fa2V5LGUub2Zmc2V0PXIuZ2V0Q2hpbGRyZW5TaXplKCksZS50eXBlPSJlbGVtZW50Iik6WihyKSYmKGUua2V5PXIuX19rZXksZS5vZmZzZXQ9ci5nZXRUZXh0Q29udGVudCgpLmxlbmd0aCkpOnI9PT1vLmdldFRleHRDb250ZW50KCkubGVuZ3RoJiYocj1vLmdldE5leHRTaWJsaW5nKCksbz1vLmdldFBhcmVudCgpLHQmJlcocikmJnIuaXNJbmxpbmUoKT8oZS5rZXk9ci5fX2tleSxlLm9mZnNldD0wLGUudHlwZT0iZWxlbWVudCIpOihufHx0KSYmcj09PW51bGwmJlcobykmJm8uaXNJbmxpbmUoKSYmIW8uY2FuSW5zZXJ0VGV4dEFmdGVyKCkmJih0PW8uZ2V0TmV4dFNpYmxpbmcoKSxaKHQpJiYoZS5rZXk9dC5fX2tleSxlLm9mZnNldD0wKSkpfWZ1bmN0aW9uIGhTKGUsdCxuKXtpZihlLnR5cGU9PT0idGV4dCImJnQudHlwZT09PSJ0ZXh0Iil7dmFyIHI9ZS5pc0JlZm9yZSh0KTtsZXQgbz1lLmlzKHQpO0h5KGUscixvKSxIeSh0LCFyLG8pLG8mJih0LmtleT1lLmtleSx0Lm9mZnNldD1lLm9mZnNldCx0LnR5cGU9ZS50eXBlKSxyPW90KCksci5pc0NvbXBvc2luZygpJiZyLl9jb21wb3NpdGlvbktleSE9PWUua2V5JiZmZShuKSYmKHI9bi5hbmNob3Isbj1uLmZvY3VzLGdvKGUsci5rZXksci5vZmZzZXQsci50eXBlKSxnbyh0LG4ua2V5LG4ub2Zmc2V0LG4udHlwZSkpfX1mdW5jdGlvbiBwUyhlLHQsbixyLG8saSl7cmV0dXJuIGU9PT1udWxsfHxuPT09bnVsbHx8IVVhKG8sZSxuKXx8KHQ9VXkoZSx0LGZlKGkpP2kuYW5jaG9yOm51bGwsbyksdD09PW51bGwpfHwocj1VeShuLHIsZmUoaSk/aS5mb2N1czpudWxsLG8pLHI9PT1udWxsfHx0LnR5cGU9PT0iZWxlbWVudCImJnIudHlwZT09PSJlbGVtZW50IiYmKGU9c2woZSksbj1zbChuKSxLZShlKSYmS2UobikpKT9udWxsOihoUyh0LHIsaSksW3Qscl0pfWZ1bmN0aW9uIHdwKGUpe3JldHVybiBXKGUpJiYhZS5pc0lubGluZSgpfWZ1bmN0aW9uIGdTKGUsdCxuLHIsbyxpKXtsZXQgbD1PcigpO3JldHVybiBlPW5ldyBPaShuZXcgYnIoZSx0LG8pLG5ldyBicihuLHIsaSksMCwiIiksZS5kaXJ0eT0hMCxsLl9zZWxlY3Rpb249ZX1mdW5jdGlvbiBfcCgpe3JldHVybiBuZXcgVGQobmV3IFNldCl9ZnVuY3Rpb24gaVIoZSl7bGV0IHQ9ZS5nZXRFZGl0b3JTdGF0ZSgpLl9zZWxlY3Rpb24sbj1QcihlLl93aW5kb3cpO3JldHVybiBHbCh0KXx8Zm0odCk/dC5jbG9uZSgpOmhtKHQsbixlKX1mdW5jdGlvbiBobShlLHQsbil7dmFyIHI9bi5fd2luZG93O2lmKHI9PT1udWxsKXJldHVybiBudWxsO3ZhciBvPXIuZXZlbnQsaT1vP28udHlwZTp2b2lkIDA7cj1pPT09InNlbGVjdGlvbmNoYW5nZSIsbz0hb3AmJihyfHxpPT09ImJlZm9yZWlucHV0Inx8aT09PSJjb21wb3NpdGlvbnN0YXJ0Inx8aT09PSJjb21wb3NpdGlvbmVuZCJ8fGk9PT0iY2xpY2siJiZvJiZvLmRldGFpbD09PTN8fGk9PT0iZHJvcCJ8fGk9PT12b2lkIDApO2xldCBsO2lmKCFmZShlKXx8byl7aWYodD09PW51bGwpcmV0dXJuIG51bGw7aWYobz10LmFuY2hvck5vZGUsaT10LmZvY3VzTm9kZSxsPXQuYW5jaG9yT2Zmc2V0LHQ9dC5mb2N1c09mZnNldCxyJiZmZShlKSYmIVVhKG4sbyxpKSlyZXR1cm4gZS5jbG9uZSgpfWVsc2UgcmV0dXJuIGUuY2xvbmUoKTtpZihuPXBTKG8sbCxpLHQsbixlKSxuPT09bnVsbClyZXR1cm4gbnVsbDtsZXRbcyxhXT1uO3JldHVybiBuZXcgT2kocyxhLGZlKGUpP2UuZm9ybWF0OjAsZmUoZSk/ZS5zdHlsZToiIil9ZnVuY3Rpb24gWWUoKXtyZXR1cm4gT3IoKS5fc2VsZWN0aW9ufWZ1bmN0aW9uIFlsKCl7cmV0dXJuIG90KCkuX2VkaXRvclN0YXRlLl9zZWxlY3Rpb259ZnVuY3Rpb24gQmMoZSx0LG4scj0xKXt2YXIgbz1lLmFuY2hvcixpPWUuZm9jdXMsbD1vLmdldE5vZGUoKSxzPWkuZ2V0Tm9kZSgpO2lmKHQuaXMobCl8fHQuaXMocykpe2lmKGw9dC5fX2tleSxlLmlzQ29sbGFwc2VkKCkpdD1vLm9mZnNldCwobjw9dCYmMDxyfHxuPHQmJjA+cikmJihuPU1hdGgubWF4KDAsdCtyKSxvLnNldChsLG4sImVsZW1lbnQiKSxpLnNldChsLG4sImVsZW1lbnQiKSxWeShlKSk7ZWxzZXtsZXQgdT1lLmlzQmFja3dhcmQoKTtzPXU/aTpvO3ZhciBhPXMuZ2V0Tm9kZSgpO289dT9vOmksaT1vLmdldE5vZGUoKSx0LmlzKGEpJiYoYT1zLm9mZnNldCwobjw9YSYmMDxyfHxuPGEmJjA+cikmJnMuc2V0KGwsTWF0aC5tYXgoMCxhK3IpLCJlbGVtZW50IikpLHQuaXMoaSkmJih0PW8ub2Zmc2V0LChuPD10JiYwPHJ8fG48dCYmMD5yKSYmby5zZXQobCxNYXRoLm1heCgwLHQrciksImVsZW1lbnQiKSl9VnkoZSl9fWZ1bmN0aW9uIFZ5KGUpe3ZhciB0PWUuYW5jaG9yLG49dC5vZmZzZXQ7bGV0IHI9ZS5mb2N1czt2YXIgbz1yLm9mZnNldCxpPXQuZ2V0Tm9kZSgpLGw9ci5nZXROb2RlKCk7aWYoZS5pc0NvbGxhcHNlZCgpKVcoaSkmJihsPWkuZ2V0Q2hpbGRyZW5TaXplKCksbD0obz1uPj1sKT9pLmdldENoaWxkQXRJbmRleChsLTEpOmkuZ2V0Q2hpbGRBdEluZGV4KG4pLFoobCkmJihuPTAsbyYmKG49bC5nZXRUZXh0Q29udGVudFNpemUoKSksdC5zZXQobC5fX2tleSxuLCJ0ZXh0Iiksci5zZXQobC5fX2tleSxuLCJ0ZXh0IikpKTtlbHNle2lmKFcoaSkpe2xldCBzPWkuZ2V0Q2hpbGRyZW5TaXplKCk7bj0oZT1uPj1zKT9pLmdldENoaWxkQXRJbmRleChzLTEpOmkuZ2V0Q2hpbGRBdEluZGV4KG4pLFoobikmJihpPTAsZSYmKGk9bi5nZXRUZXh0Q29udGVudFNpemUoKSksdC5zZXQobi5fX2tleSxpLCJ0ZXh0IikpfVcobCkmJihuPWwuZ2V0Q2hpbGRyZW5TaXplKCksbz0odD1vPj1uKT9sLmdldENoaWxkQXRJbmRleChuLTEpOmwuZ2V0Q2hpbGRBdEluZGV4KG8pLFoobykmJihsPTAsdCYmKGw9by5nZXRUZXh0Q29udGVudFNpemUoKSksci5zZXQoby5fX2tleSxsLCJ0ZXh0IikpKX19ZnVuY3Rpb24gbFIoZSx0KXtpZih0PXQuZ2V0RWRpdG9yU3RhdGUoKS5fc2VsZWN0aW9uLGU9ZS5fc2VsZWN0aW9uLGZlKGUpKXt2YXIgbj1lLmFuY2hvcjtsZXQgcj1lLmZvY3VzLG87bi50eXBlPT09InRleHQiJiYobz1uLmdldE5vZGUoKSxvLnNlbGVjdGlvblRyYW5zZm9ybSh0LGUpKSxyLnR5cGU9PT0idGV4dCImJihuPXIuZ2V0Tm9kZSgpLG8hPT1uJiZuLnNlbGVjdGlvblRyYW5zZm9ybSh0LGUpKX19ZnVuY3Rpb24gV2MoZSx0LG4scixvKXtsZXQgaT1udWxsLGw9MCxzPW51bGw7ciE9PW51bGw/KGk9ci5fX2tleSxaKHIpPyhsPXIuZ2V0VGV4dENvbnRlbnRTaXplKCkscz0idGV4dCIpOlcocikmJihsPXIuZ2V0Q2hpbGRyZW5TaXplKCkscz0iZWxlbWVudCIpKTpvIT09bnVsbCYmKGk9by5fX2tleSxaKG8pP3M9InRleHQiOlcobykmJihzPSJlbGVtZW50IikpLGkhPT1udWxsJiZzIT09bnVsbD9lLnNldChpLGwscyk6KGw9dC5nZXRJbmRleFdpdGhpblBhcmVudCgpLGw9PT0tMSYmKGw9bi5nZXRDaGlsZHJlblNpemUoKSksZS5zZXQobi5fX2tleSxsLCJlbGVtZW50IikpfWZ1bmN0aW9uIEt5KGUsdCxuLHIsbyl7ZS50eXBlPT09InRleHQiPyhlLmtleT1uLHR8fChlLm9mZnNldCs9bykpOmUub2Zmc2V0PnIuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSYmLS1lLm9mZnNldH1mdW5jdGlvbiBtUyhlLHQsbil7bGV0IHI9W10sbz1udWxsLGk9bnVsbDtlPWUuZ2V0Q2hpbGRyZW4oKTtmb3IobGV0IGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIGw9ZVtjXTtUYShsKXx8SygxMDgpO3ZhciBzPWwuZ2V0Q2hpbGRyZW4oKTtsPTA7Zm9yKGxldCBkIG9mIHMpe2ZvcihqbihkKXx8SygxMDkpO3JbY10hPT12b2lkIDAmJnJbY11bbF0hPT12b2lkIDA7KWwrKztzPWM7dmFyIGE9bCx1PWQ7bGV0IGY9e2NlbGw6dSxzdGFydENvbHVtbjphLHN0YXJ0Um93OnN9LGg9dS5fX3Jvd1NwYW4sbT11Ll9fY29sU3Bhbjtmb3IobGV0IGc9MDtnPGg7ZysrKXtyW3MrZ109PT12b2lkIDAmJihyW3MrZ109W10pO2ZvcihsZXQgXz0wO188bTtfKyspcltzK2ddW2ErX109Zn10LmlzKHUpJiYobz1mKSxuLmlzKHUpJiYoaT1mKSxsKz1kLl9fY29sU3Bhbn19cmV0dXJuIG89PT1udWxsJiZLKDExMCksaT09PW51bGwmJksoMTExKSxbcixvLGldfWZ1bmN0aW9uIHZTKGUpe2UgaW5zdGFuY2VvZiBtbXx8KGUgaW5zdGFuY2VvZiBLYT8oZT16YyhlLGpuKSxqbihlKXx8SygxMTQpKTooZT16YyhlLmdldE5vZGUoKSxqbiksam4oZSl8fEsoMTE0KSkpO2xldCB0PWUuZ2V0UGFyZW50KCk7VGEodCl8fEsoMTE1KTtsZXQgbj10LmdldFBhcmVudCgpO3JldHVybiB2bShuKXx8SygxMTYpLFtlLHQsbl19bGV0IFR0PW51bGwsTnQ9bnVsbCx5bj0hMSxNZj0hMSxiYT0wLEd5PXtjaGFyYWN0ZXJEYXRhOiEwLGNoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfTtmdW5jdGlvbiBYbCgpe3JldHVybiB5bnx8VHQhPT1udWxsJiZUdC5fcmVhZE9ubHl9ZnVuY3Rpb24gdG4oKXt5biYmSygxMyl9ZnVuY3Rpb24gT3IoKXtyZXR1cm4gVHQ9PT1udWxsJiZLKDE1KSxUdH1mdW5jdGlvbiBvdCgpe3JldHVybiBOdD09PW51bGwmJksoMTYpLE50fWZ1bmN0aW9uIFl5KGUsdCxuKXt2YXIgcj10Ll9fdHlwZTtsZXQgbz1lLl9ub2Rlcy5nZXQocik7Zm9yKG89PT12b2lkIDAmJksoMzAsciksZT1uLmdldChyKSxlPT09dm9pZCAwJiYoZT1BcnJheS5mcm9tKG8udHJhbnNmb3Jtcyksbi5zZXQocixlKSksbj1lLmxlbmd0aCxyPTA7cjxuJiYoZVtyXSh0KSx0LmlzQXR0YWNoZWQoKSk7cisrKTt9ZnVuY3Rpb24gc1IoZSx0KXt0PXQuX2RpcnR5TGVhdmVzLGU9ZS5fbm9kZU1hcDtmb3IobGV0IG4gb2YgdCl0PWUuZ2V0KG4pLFoodCkmJnQuaXNBdHRhY2hlZCgpJiZ0LmlzU2ltcGxlVGV4dCgpJiYhdC5pc1VubWVyZ2VhYmxlKCkmJkJfKHQpfWZ1bmN0aW9uIGFSKGUsdCl7bGV0IG49dC5fZGlydHlMZWF2ZXMscj10Ll9kaXJ0eUVsZW1lbnRzO2U9ZS5fbm9kZU1hcDtsZXQgbz1TbygpLGk9bmV3IE1hcDt2YXIgbD1uO2xldCBzPWwuc2l6ZTtmb3IodmFyIGE9cix1PWEuc2l6ZTswPHN8fDA8dTspe2lmKDA8cyl7dC5fZGlydHlMZWF2ZXM9bmV3IFNldDtmb3IobGV0IGMgb2YgbClsPWUuZ2V0KGMpLFoobCkmJmwuaXNBdHRhY2hlZCgpJiZsLmlzU2ltcGxlVGV4dCgpJiYhbC5pc1VubWVyZ2VhYmxlKCkmJkJfKGwpLGwhPT12b2lkIDAmJmwhPT12b2lkIDAmJmwuX19rZXkhPT1vJiZsLmlzQXR0YWNoZWQoKSYmWXkodCxsLGkpLG4uYWRkKGMpO2lmKGw9dC5fZGlydHlMZWF2ZXMscz1sLnNpemUsMDxzKXtiYSsrO2NvbnRpbnVlfX10Ll9kaXJ0eUxlYXZlcz1uZXcgU2V0LHQuX2RpcnR5RWxlbWVudHM9bmV3IE1hcDtmb3IobGV0IGMgb2YgYSlhPWNbMF0sdT1jWzFdLChhPT09InJvb3QifHx1KSYmKGw9ZS5nZXQoYSksbCE9PXZvaWQgMCYmbCE9PXZvaWQgMCYmbC5fX2tleSE9PW8mJmwuaXNBdHRhY2hlZCgpJiZZeSh0LGwsaSksci5zZXQoYSx1KSk7bD10Ll9kaXJ0eUxlYXZlcyxzPWwuc2l6ZSxhPXQuX2RpcnR5RWxlbWVudHMsdT1hLnNpemUsYmErK310Ll9kaXJ0eUxlYXZlcz1uLHQuX2RpcnR5RWxlbWVudHM9cn1mdW5jdGlvbiBwbShlLHQpe3ZhciBuPWUudHlwZSxyPXQuZ2V0KG4pO2lmKHI9PT12b2lkIDAmJksoMTcsbiksbj1yLmtsYXNzLGUudHlwZSE9PW4uZ2V0VHlwZSgpJiZLKDE4LG4ubmFtZSksbj1uLmltcG9ydEpTT04oZSksZT1lLmNoaWxkcmVuLFcobikmJkFycmF5LmlzQXJyYXkoZSkpZm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89cG0oZVtyXSx0KTtuLmFwcGVuZChvKX1yZXR1cm4gbn1mdW5jdGlvbiBYeShlLHQpe2xldCBuPVR0LHI9eW4sbz1OdDtUdD1lLHluPSEwLE50PW51bGw7dHJ5e3JldHVybiB0KCl9ZmluYWxseXtUdD1uLHluPXIsTnQ9b319ZnVuY3Rpb24gZmkoZSx0KXtsZXQgbj1lLl9wZW5kaW5nRWRpdG9yU3RhdGUscj1lLl9yb290RWxlbWVudCxvPWUuX2hlYWRsZXNzfHxyPT09bnVsbDtpZihuIT09bnVsbCl7dmFyIGk9ZS5fZWRpdG9yU3RhdGUsbD1pLl9zZWxlY3Rpb24scz1uLl9zZWxlY3Rpb24sYT1lLl9kaXJ0eVR5cGUhPT0wLHU9VHQsYz15bixkPU50LGY9ZS5fdXBkYXRpbmcsaD1lLl9vYnNlcnZlcixtPW51bGw7aWYoZS5fcGVuZGluZ0VkaXRvclN0YXRlPW51bGwsZS5fZWRpdG9yU3RhdGU9biwhbyYmYSYmaCE9PW51bGwpe050PWUsVHQ9bix5bj0hMSxlLl91cGRhdGluZz0hMDt0cnl7bGV0IFJlPWUuX2RpcnR5VHlwZSx5dD1lLl9kaXJ0eUVsZW1lbnRzLHFlPWUuX2RpcnR5TGVhdmVzO2guZGlzY29ubmVjdCgpO3ZhciBnPVJlLF89eXQsdj1xZTtlbj1Gcj14dD0iIixlUz1nPT09MixYdT1udWxsLFZ0PWUsSW89ZS5fY29uZmlnLEVhPWUuX25vZGVzLGtkPVZ0Ll9saXN0ZW5lcnMubXV0YXRpb24sYXA9Xyx1cD12LHhpPWkuX25vZGVNYXAsam89bi5fbm9kZU1hcCxkbT1uLl9yZWFkT25seSxjcD1uZXcgTWFwKGUuX2tleVRvRE9NTWFwKTtsZXQgWXQ9bmV3IE1hcDtDYT1ZdCxicygicm9vdCIsbnVsbCksQ2E9Y3A9SW89am89eGk9dXA9YXA9RWE9VnQ9dm9pZCAwLG09WXR9Y2F0Y2goUmUpe2lmKFJlIGluc3RhbmNlb2YgRXJyb3ImJmUuX29uRXJyb3IoUmUpLE1mKXRocm93IFJlO19TKGUsbnVsbCxyLG4pLEZfKGUpLGUuX2RpcnR5VHlwZT0yLE1mPSEwLGZpKGUsaSksTWY9ITE7cmV0dXJufWZpbmFsbHl7aC5vYnNlcnZlKHIsR3kpLGUuX3VwZGF0aW5nPWYsVHQ9dSx5bj1jLE50PWR9fW4uX3JlYWRPbmx5fHwobi5fcmVhZE9ubHk9ITApO3ZhciB5PWUuX2RpcnR5TGVhdmVzLHg9ZS5fZGlydHlFbGVtZW50cyxTPWUuX25vcm1hbGl6ZWROb2RlcyxrPWUuX3VwZGF0ZVRhZ3MsVD1lLl9kZWZlcnJlZDthJiYoZS5fZGlydHlUeXBlPTAsZS5fY2xvbmVOb3ROZWVkZWQuY2xlYXIoKSxlLl9kaXJ0eUxlYXZlcz1uZXcgU2V0LGUuX2RpcnR5RWxlbWVudHM9bmV3IE1hcCxlLl9ub3JtYWxpemVkTm9kZXM9bmV3IFNldCxlLl91cGRhdGVUYWdzPW5ldyBTZXQpO3ZhciBiPWUuX2RlY29yYXRvcnMsTj1lLl9wZW5kaW5nRGVjb3JhdG9yc3x8YixEPW4uX25vZGVNYXAsTTtmb3IoTSBpbiBOKUQuaGFzKE0pfHwoTj09PWImJihOPUtfKGUpKSxkZWxldGUgTltNXSk7dmFyIGo9bz9udWxsOlByKGUuX3dpbmRvdyk7aWYoZS5fZWRpdGFibGUmJmohPT1udWxsJiYoYXx8cz09PW51bGx8fHMuZGlydHkpKXtOdD1lLFR0PW47dHJ5e2lmKGghPT1udWxsJiZoLmRpc2Nvbm5lY3QoKSxhfHxzPT09bnVsbHx8cy5kaXJ0eSl7bGV0IFJlPWUuX2Jsb2NrQ3Vyc29yRWxlbWVudDtSZSE9PW51bGwmJnNwKFJlLGUscik7ZTp7bGV0IHl0PWouYW5jaG9yTm9kZSxxZT1qLmZvY3VzTm9kZSxZdD1qLmFuY2hvck9mZnNldCxkbj1qLmZvY3VzT2Zmc2V0LGN0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYoIShrLmhhcygiY29sbGFib3JhdGlvbiIpJiZjdCE9PXJ8fGN0IT09bnVsbCYmaW0oY3QpKSlpZihmZShzKSl7dmFyIEI9cy5hbmNob3IscmU9cy5mb2N1cyxWPUIua2V5LFk9cmUua2V5LEM9SWMoZSxWKSwkPUljKGUsWSksRT1CLm9mZnNldCxPPXJlLm9mZnNldCxSPXMuZm9ybWF0LEY9cy5zdHlsZSxIPXMuaXNDb2xsYXBzZWQoKSxhZT1DLG9lPSQsJGU9ITE7aWYoQi50eXBlPT09InRleHQiKXthZT1NYyhDKTtsZXQgRXQ9Qi5nZXROb2RlKCk7JGU9RXQuZ2V0Rm9ybWF0KCkhPT1SfHxFdC5nZXRTdHlsZSgpIT09Rn1lbHNlIGZlKGwpJiZsLmFuY2hvci50eXBlPT09InRleHQiJiYoJGU9ITApO2lmKHJlLnR5cGU9PT0idGV4dCImJihvZT1NYygkKSksYWUhPT1udWxsJiZvZSE9PW51bGwpe2lmKEgmJihsPT09bnVsbHx8JGV8fGZlKGwpJiYobC5mb3JtYXQhPT1SfHxsLnN0eWxlIT09RikpKXt2YXIgX2U9cGVyZm9ybWFuY2Uubm93KCk7YVM9W1IsRixFLFYsX2VdfWlmKFl0PT09RSYmZG49PT1PJiZ5dD09PWFlJiZxZT09PW9lJiYoai50eXBlIT09IlJhbmdlInx8IUgpJiYoY3QhPT1udWxsJiZyLmNvbnRhaW5zKGN0KXx8ci5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLEIudHlwZSE9PSJlbGVtZW50IikpYnJlYWsgZTt0cnl7ai5zZXRCYXNlQW5kRXh0ZW50KGFlLEUsb2UsTyl9Y2F0Y2h7fWlmKCFrLmhhcygic2tpcC1zY3JvbGwtaW50by12aWV3IikmJnMuaXNDb2xsYXBzZWQoKSYmciE9PW51bGwmJnI9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50KXtsZXQgRXQ9cyBpbnN0YW5jZW9mIE9pJiZzLmFuY2hvci50eXBlPT09ImVsZW1lbnQiP2FlLmNoaWxkTm9kZXNbRV18fG51bGw6MDxqLnJhbmdlQ291bnQ/ai5nZXRSYW5nZUF0KDApOm51bGw7aWYoRXQhPT1udWxsKXtsZXQgWHQ7aWYoRXQgaW5zdGFuY2VvZiBUZXh0KXtsZXQgbHQ9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtsdC5zZWxlY3ROb2RlKEV0KSxYdD1sdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1lbHNlIFh0PUV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCB4bj1yLm93bmVyRG9jdW1lbnQsTXI9eG4uZGVmYXVsdFZpZXc7aWYoTXIhPT1udWxsKWZvcih2YXJ7dG9wOlEsYm90dG9tOk5lfT1YdCx5ZSxTZSxwZT1yO3BlIT09bnVsbDspe2xldCBsdD1wZT09PXhuLmJvZHk7aWYobHQpeWU9MCxTZT1DZChlKS5pbm5lckhlaWdodDtlbHNle2xldCBYbz1wZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt5ZT1Yby50b3AsU2U9WG8uYm90dG9tfWxldCBmcj0wO2lmKFE8eWU/ZnI9LSh5ZS1RKTpOZT5TZSYmKGZyPU5lLVNlKSxmciE9PTApaWYobHQpTXIuc2Nyb2xsQnkoMCxmcik7ZWxzZXtsZXQgWG89cGUuc2Nyb2xsVG9wO3BlLnNjcm9sbFRvcCs9ZnI7bGV0IG9zPXBlLnNjcm9sbFRvcC1YbztRLT1vcyxOZS09b3N9aWYobHQpYnJlYWs7cGU9RWQocGUpfX19Z3A9ITB9fWVsc2UgbCE9PW51bGwmJlVhKGUseXQscWUpJiZqLnJlbW92ZUFsbFJhbmdlcygpfX1lOntsZXQgUmU9ZS5fYmxvY2tDdXJzb3JFbGVtZW50O2lmKGZlKHMpJiZzLmlzQ29sbGFwc2VkKCkmJnMuYW5jaG9yLnR5cGU9PT0iZWxlbWVudCImJnIuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpe2xldCB5dD1zLmFuY2hvcixxZT15dC5nZXROb2RlKCksWXQ9eXQub2Zmc2V0LGRuPXFlLmdldENoaWxkcmVuU2l6ZSgpLGN0PSExLEV0PW51bGw7aWYoWXQ9PT1kbil7bGV0IFh0PXFlLmdldENoaWxkQXRJbmRleChZdC0xKTtiZihYdCkmJihjdD0hMCl9ZWxzZXtsZXQgWHQ9cWUuZ2V0Q2hpbGRBdEluZGV4KFl0KTtpZihiZihYdCkpe2xldCB4bj1YdC5nZXRQcmV2aW91c1NpYmxpbmcoKTsoeG49PT1udWxsfHxiZih4bikpJiYoY3Q9ITAsRXQ9ZS5nZXRFbGVtZW50QnlLZXkoWHQuX19rZXkpKX19aWYoY3Qpe2xldCBYdD1lLmdldEVsZW1lbnRCeUtleShxZS5fX2tleSk7aWYoUmU9PT1udWxsKXtsZXQgeG49ZS5fY29uZmlnLnRoZW1lLE1yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO01yLmNvbnRlbnRFZGl0YWJsZT0iZmFsc2UiLE1yLnNldEF0dHJpYnV0ZSgiZGF0YS1sZXhpY2FsLWN1cnNvciIsInRydWUiKTtsZXQgbHQ9eG4uYmxvY2tDdXJzb3I7aWYobHQhPT12b2lkIDApe2lmKHR5cGVvZiBsdD09InN0cmluZyIpe2xldCBmcj1sdC5zcGxpdCgiICIpO2x0PXhuLmJsb2NrQ3Vyc29yPWZyfWx0IT09dm9pZCAwJiZNci5jbGFzc0xpc3QuYWRkKC4uLmx0KX1lLl9ibG9ja0N1cnNvckVsZW1lbnQ9UmU9TXJ9ci5zdHlsZS5jYXJldENvbG9yPSJ0cmFuc3BhcmVudCIsRXQ9PT1udWxsP1h0LmFwcGVuZENoaWxkKFJlKTpYdC5pbnNlcnRCZWZvcmUoUmUsRXQpO2JyZWFrIGV9fVJlIT09bnVsbCYmc3AoUmUsZSxyKX1oIT09bnVsbCYmaC5vYnNlcnZlKHIsR3kpfWZpbmFsbHl7TnQ9ZCxUdD11fX1pZihtIT09bnVsbCl7dmFyIFRlPW07bGV0IFJlPUFycmF5LmZyb20oZS5fbGlzdGVuZXJzLm11dGF0aW9uKSx5dD1SZS5sZW5ndGg7Zm9yKGxldCBxZT0wO3FlPHl0O3FlKyspe2xldFtZdCxkbl09UmVbcWVdLGN0PVRlLmdldChkbik7Y3QhPT12b2lkIDAmJll0KGN0LHtkaXJ0eUxlYXZlczp5LHByZXZFZGl0b3JTdGF0ZTppLHVwZGF0ZVRhZ3M6a30pfX1mZShzKXx8cz09PW51bGx8fGwhPT1udWxsJiZsLmlzKHMpfHxlLmRpc3BhdGNoQ29tbWFuZCh3ZCx2b2lkIDApO3ZhciBXZT1lLl9wZW5kaW5nRGVjb3JhdG9ycztXZSE9PW51bGwmJihlLl9kZWNvcmF0b3JzPVdlLGUuX3BlbmRpbmdEZWNvcmF0b3JzPW51bGwsWXMoImRlY29yYXRvciIsZSwhMCxXZSkpO3ZhciBBdD1PeSh0fHxpKSxjbj1PeShuKTtpZihBdCE9PWNuJiZZcygidGV4dGNvbnRlbnQiLGUsITAsY24pLFlzKCJ1cGRhdGUiLGUsITAse2RpcnR5RWxlbWVudHM6eCxkaXJ0eUxlYXZlczp5LGVkaXRvclN0YXRlOm4sbm9ybWFsaXplZE5vZGVzOlMscHJldkVkaXRvclN0YXRlOnR8fGksdGFnczprfSksZS5fZGVmZXJyZWQ9W10sVC5sZW5ndGghPT0wKXtsZXQgUmU9ZS5fdXBkYXRpbmc7ZS5fdXBkYXRpbmc9ITA7dHJ5e2ZvcihsZXQgeXQ9MDt5dDxULmxlbmd0aDt5dCsrKVRbeXRdKCl9ZmluYWxseXtlLl91cGRhdGluZz1SZX19dmFyIEduPWUuX3VwZGF0ZXM7aWYoR24ubGVuZ3RoIT09MCl7bGV0IFJlPUduLnNoaWZ0KCk7aWYoUmUpe2xldFt5dCxxZV09UmU7eVMoZSx5dCxxZSl9fX19ZnVuY3Rpb24gWXMoZSx0LG4sLi4ucil7bGV0IG89dC5fdXBkYXRpbmc7dC5fdXBkYXRpbmc9bjt0cnl7bGV0IGk9QXJyYXkuZnJvbSh0Ll9saXN0ZW5lcnNbZV0pO2ZvcihlPTA7ZTxpLmxlbmd0aDtlKyspaVtlXS5hcHBseShudWxsLHIpfWZpbmFsbHl7dC5fdXBkYXRpbmc9b319ZnVuY3Rpb24gSihlLHQsbil7aWYoZS5fdXBkYXRpbmc9PT0hMXx8TnQhPT1lKXtsZXQgaT0hMTtyZXR1cm4gZS51cGRhdGUoKCk9PntpPUooZSx0LG4pfSksaX1sZXQgcj1zbShlKTtmb3IobGV0IGk9NDswPD1pO2ktLSlmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIG89cltsXS5fY29tbWFuZHMuZ2V0KHQpO2lmKG8hPT12b2lkIDAmJihvPW9baV0sbyE9PXZvaWQgMCkpe289QXJyYXkuZnJvbShvKTtsZXQgcz1vLmxlbmd0aDtmb3IobGV0IGE9MDthPHM7YSsrKWlmKG9bYV0obixlKT09PSEwKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBReShlLHQpe2xldCBuPWUuX3VwZGF0ZXM7Zm9yKHQ9dHx8ITE7bi5sZW5ndGghPT0wOyl7dmFyIHI9bi5zaGlmdCgpO2lmKHIpe2xldFtvLGldPXIsbDtpIT09dm9pZCAwJiYocj1pLm9uVXBkYXRlLGw9aS50YWcsaS5za2lwVHJhbnNmb3JtcyYmKHQ9ITApLHImJmUuX2RlZmVycmVkLnB1c2gociksbCYmZS5fdXBkYXRlVGFncy5hZGQobCkpLG8oKX19cmV0dXJuIHR9ZnVuY3Rpb24geVMoZSx0LG4pe2xldCByPWUuX3VwZGF0ZVRhZ3M7dmFyIG8saT1vPSExO2lmKG4hPT12b2lkIDApe3ZhciBsPW4ub25VcGRhdGU7bz1uLnRhZyxvIT1udWxsJiZyLmFkZChvKSxvPW4uc2tpcFRyYW5zZm9ybXN8fCExLGk9bi5kaXNjcmV0ZXx8ITF9bCYmZS5fZGVmZXJyZWQucHVzaChsKSxuPWUuX2VkaXRvclN0YXRlLGw9ZS5fcGVuZGluZ0VkaXRvclN0YXRlO2xldCBzPSExOyhsPT09bnVsbHx8bC5fcmVhZE9ubHkpJiYobD1lLl9wZW5kaW5nRWRpdG9yU3RhdGU9bmV3IFJkKG5ldyBNYXAoKGx8fG4pLl9ub2RlTWFwKSkscz0hMCksbC5fZmx1c2hTeW5jPWksaT1UdDtsZXQgYT15bix1PU50LGM9ZS5fdXBkYXRpbmc7VHQ9bCx5bj0hMSxlLl91cGRhdGluZz0hMCxOdD1lO3RyeXtzJiYoZS5faGVhZGxlc3M/bi5fc2VsZWN0aW9uIT1udWxsJiYobC5fc2VsZWN0aW9uPW4uX3NlbGVjdGlvbi5jbG9uZSgpKTpsLl9zZWxlY3Rpb249aVIoZSkpO2xldCBkPWUuX2NvbXBvc2l0aW9uS2V5O3QoKSxvPVF5KGUsbyksbFIobCxlKSxlLl9kaXJ0eVR5cGUhPT0wJiYobz9zUihsLGUpOmFSKGwsZSksUXkoZSksVTIobixsLGUuX2RpcnR5TGVhdmVzLGUuX2RpcnR5RWxlbWVudHMpKSxkIT09ZS5fY29tcG9zaXRpb25LZXkmJihsLl9mbHVzaFN5bmM9ITApO2xldCBmPWwuX3NlbGVjdGlvbjtpZihmZShmKSl7bGV0IGg9bC5fbm9kZU1hcCxtPWYuZm9jdXMua2V5O2guZ2V0KGYuYW5jaG9yLmtleSkhPT12b2lkIDAmJmguZ2V0KG0pIT09dm9pZCAwfHxLKDE5KX1lbHNlIEdsKGYpJiZmLl9ub2Rlcy5zaXplPT09MCYmKGwuX3NlbGVjdGlvbj1udWxsKX1jYXRjaChkKXtkIGluc3RhbmNlb2YgRXJyb3ImJmUuX29uRXJyb3IoZCksZS5fcGVuZGluZ0VkaXRvclN0YXRlPW4sZS5fZGlydHlUeXBlPTIsZS5fY2xvbmVOb3ROZWVkZWQuY2xlYXIoKSxlLl9kaXJ0eUxlYXZlcz1uZXcgU2V0LGUuX2RpcnR5RWxlbWVudHMuY2xlYXIoKSxmaShlKTtyZXR1cm59ZmluYWxseXtUdD1pLHluPWEsTnQ9dSxlLl91cGRhdGluZz1jLGJhPTB9ZS5fZGlydHlUeXBlIT09MHx8dVIobCxlKT9sLl9mbHVzaFN5bmM/KGwuX2ZsdXNoU3luYz0hMSxmaShlKSk6cyYmejIoKCk9PntmaShlKX0pOihsLl9mbHVzaFN5bmM9ITEscyYmKHIuY2xlYXIoKSxlLl9kZWZlcnJlZD1bXSxlLl9wZW5kaW5nRWRpdG9yU3RhdGU9bnVsbCkpfWZ1bmN0aW9uIFJuKGUsdCxuKXtlLl91cGRhdGluZz9lLl91cGRhdGVzLnB1c2goW3Qsbl0pOnlTKGUsdCxuKX1jbGFzcyB4UyBleHRlbmRzIEthe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWRlY29yYXRlKCl7Syg0Nyl9aXNJc29sYXRlZCgpe3JldHVybiExfWlzSW5saW5lKCl7cmV0dXJuITB9aXNLZXlib2FyZFNlbGVjdGFibGUoKXtyZXR1cm4hMH19ZnVuY3Rpb24gS2UoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB4U31jbGFzcyBBaSBleHRlbmRzIEthe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX19sYXN0PXRoaXMuX19maXJzdD1udWxsLHRoaXMuX19pbmRlbnQ9dGhpcy5fX2Zvcm1hdD10aGlzLl9fc2l6ZT0wLHRoaXMuX19kaXI9bnVsbH1nZXRGb3JtYXQoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX2Zvcm1hdH1nZXRGb3JtYXRUeXBlKCl7bGV0IHQ9dGhpcy5nZXRGb3JtYXQoKTtyZXR1cm4gQTJbdF18fCIifWdldEluZGVudCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9faW5kZW50fWdldENoaWxkcmVuKCl7bGV0IHQ9W10sbj10aGlzLmdldEZpcnN0Q2hpbGQoKTtmb3IoO24hPT1udWxsOyl0LnB1c2gobiksbj1uLmdldE5leHRTaWJsaW5nKCk7cmV0dXJuIHR9Z2V0Q2hpbGRyZW5LZXlzKCl7bGV0IHQ9W10sbj10aGlzLmdldEZpcnN0Q2hpbGQoKTtmb3IoO24hPT1udWxsOyl0LnB1c2gobi5fX2tleSksbj1uLmdldE5leHRTaWJsaW5nKCk7cmV0dXJuIHR9Z2V0Q2hpbGRyZW5TaXplKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5nZXRDaGlsZHJlblNpemUoKT09PTB9aXNEaXJ0eSgpe2xldCB0PW90KCkuX2RpcnR5RWxlbWVudHM7cmV0dXJuIHQhPT1udWxsJiZ0Lmhhcyh0aGlzLl9fa2V5KX1pc0xhc3RDaGlsZCgpe2xldCB0PXRoaXMuZ2V0TGF0ZXN0KCksbj10aGlzLmdldFBhcmVudE9yVGhyb3coKS5nZXRMYXN0Q2hpbGQoKTtyZXR1cm4gbiE9PW51bGwmJm4uaXModCl9Z2V0QWxsVGV4dE5vZGVzKCl7bGV0IHQ9W10sbj10aGlzLmdldEZpcnN0Q2hpbGQoKTtmb3IoO24hPT1udWxsOyl7aWYoWihuKSYmdC5wdXNoKG4pLFcobikpe2xldCByPW4uZ2V0QWxsVGV4dE5vZGVzKCk7dC5wdXNoKC4uLnIpfW49bi5nZXROZXh0U2libGluZygpfXJldHVybiB0fWdldEZpcnN0RGVzY2VuZGFudCgpe2xldCB0PXRoaXMuZ2V0Rmlyc3RDaGlsZCgpO2Zvcig7dCE9PW51bGw7KXtpZihXKHQpKXtsZXQgbj10LmdldEZpcnN0Q2hpbGQoKTtpZihuIT09bnVsbCl7dD1uO2NvbnRpbnVlfX1icmVha31yZXR1cm4gdH1nZXRMYXN0RGVzY2VuZGFudCgpe2xldCB0PXRoaXMuZ2V0TGFzdENoaWxkKCk7Zm9yKDt0IT09bnVsbDspe2lmKFcodCkpe2xldCBuPXQuZ2V0TGFzdENoaWxkKCk7aWYobiE9PW51bGwpe3Q9bjtjb250aW51ZX19YnJlYWt9cmV0dXJuIHR9Z2V0RGVzY2VuZGFudEJ5SW5kZXgodCl7bGV0IG49dGhpcy5nZXRDaGlsZHJlbigpLHI9bi5sZW5ndGg7cmV0dXJuIHQ+PXI/KHQ9bltyLTFdLFcodCkmJnQuZ2V0TGFzdERlc2NlbmRhbnQoKXx8dHx8bnVsbCk6KHQ9blt0XSxXKHQpJiZ0LmdldEZpcnN0RGVzY2VuZGFudCgpfHx0fHxudWxsKX1nZXRGaXJzdENoaWxkKCl7bGV0IHQ9dGhpcy5nZXRMYXRlc3QoKS5fX2ZpcnN0O3JldHVybiB0PT09bnVsbD9udWxsOmJ0KHQpfWdldEZpcnN0Q2hpbGRPclRocm93KCl7bGV0IHQ9dGhpcy5nZXRGaXJzdENoaWxkKCk7cmV0dXJuIHQ9PT1udWxsJiZLKDQ1LHRoaXMuX19rZXkpLHR9Z2V0TGFzdENoaWxkKCl7bGV0IHQ9dGhpcy5nZXRMYXRlc3QoKS5fX2xhc3Q7cmV0dXJuIHQ9PT1udWxsP251bGw6YnQodCl9Z2V0TGFzdENoaWxkT3JUaHJvdygpe2xldCB0PXRoaXMuZ2V0TGFzdENoaWxkKCk7cmV0dXJuIHQ9PT1udWxsJiZLKDk2LHRoaXMuX19rZXkpLHR9Z2V0Q2hpbGRBdEluZGV4KHQpe3ZhciBuPXRoaXMuZ2V0Q2hpbGRyZW5TaXplKCk7bGV0IHI7aWYodDxuLzIpe2ZvcihyPXRoaXMuZ2V0Rmlyc3RDaGlsZCgpLG49MDtyIT09bnVsbCYmbjw9dDspe2lmKG49PT10KXJldHVybiByO3I9ci5nZXROZXh0U2libGluZygpLG4rK31yZXR1cm4gbnVsbH1mb3Iocj10aGlzLmdldExhc3RDaGlsZCgpLC0tbjtyIT09bnVsbCYmbj49dDspe2lmKG49PT10KXJldHVybiByO3I9ci5nZXRQcmV2aW91c1NpYmxpbmcoKSxuLS19cmV0dXJuIG51bGx9Z2V0VGV4dENvbnRlbnQoKXtsZXQgdD0iIixuPXRoaXMuZ2V0Q2hpbGRyZW4oKSxyPW4ubGVuZ3RoO2ZvcihsZXQgbz0wO288cjtvKyspe2xldCBpPW5bb107dCs9aS5nZXRUZXh0Q29udGVudCgpLFcoaSkmJm8hPT1yLTEmJiFpLmlzSW5saW5lKCkmJih0Kz1gCgpgKX1yZXR1cm4gdH1nZXRUZXh0Q29udGVudFNpemUoKXtsZXQgdD0wLG49dGhpcy5nZXRDaGlsZHJlbigpLHI9bi5sZW5ndGg7Zm9yKGxldCBvPTA7bzxyO28rKyl7bGV0IGk9bltvXTt0Kz1pLmdldFRleHRDb250ZW50U2l6ZSgpLFcoaSkmJm8hPT1yLTEmJiFpLmlzSW5saW5lKCkmJih0Kz0yKX1yZXR1cm4gdH1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX2Rpcn1oYXNGb3JtYXQodCl7cmV0dXJuIHQhPT0iIj8odD1UeVt0XSwodGhpcy5nZXRGb3JtYXQoKSZ0KSE9PTApOiExfXNlbGVjdCh0LG4pe3RuKCk7bGV0IHI9WWUoKSxvPXQsaT1uO3ZhciBsPXRoaXMuZ2V0Q2hpbGRyZW5TaXplKCk7aWYoIXRoaXMuY2FuQmVFbXB0eSgpKXtpZih0PT09MCYmbj09PTApe2lmKHQ9dGhpcy5nZXRGaXJzdENoaWxkKCksWih0KXx8Vyh0KSlyZXR1cm4gdC5zZWxlY3QoMCwwKX1lbHNlIGlmKCEodCE9PXZvaWQgMCYmdCE9PWx8fG4hPT12b2lkIDAmJm4hPT1sKSYmKHQ9dGhpcy5nZXRMYXN0Q2hpbGQoKSxaKHQpfHxXKHQpKSlyZXR1cm4gdC5zZWxlY3QoKX1pZihvPT09dm9pZCAwJiYobz1sKSxpPT09dm9pZCAwJiYoaT1sKSxsPXRoaXMuX19rZXksZmUocikpci5hbmNob3Iuc2V0KGwsbywiZWxlbWVudCIpLHIuZm9jdXMuc2V0KGwsaSwiZWxlbWVudCIpLHIuZGlydHk9ITA7ZWxzZSByZXR1cm4gZ1MobCxvLGwsaSwiZWxlbWVudCIsImVsZW1lbnQiKTtyZXR1cm4gcn1zZWxlY3RTdGFydCgpe2xldCB0PXRoaXMuZ2V0Rmlyc3REZXNjZW5kYW50KCk7cmV0dXJuIFcodCl8fFoodCk/dC5zZWxlY3QoMCwwKTp0IT09bnVsbD90LnNlbGVjdFByZXZpb3VzKCk6dGhpcy5zZWxlY3QoMCwwKX1zZWxlY3RFbmQoKXtsZXQgdD10aGlzLmdldExhc3REZXNjZW5kYW50KCk7cmV0dXJuIFcodCl8fFoodCk/dC5zZWxlY3QoKTp0IT09bnVsbD90LnNlbGVjdE5leHQoKTp0aGlzLnNlbGVjdCgpfWNsZWFyKCl7bGV0IHQ9dGhpcy5nZXRXcml0YWJsZSgpO3JldHVybiB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaChuPT5uLnJlbW92ZSgpKSx0fWFwcGVuZCguLi50KXtyZXR1cm4gdGhpcy5zcGxpY2UodGhpcy5nZXRDaGlsZHJlblNpemUoKSwwLHQpfXNldERpcmVjdGlvbih0KXtsZXQgbj10aGlzLmdldFdyaXRhYmxlKCk7cmV0dXJuIG4uX19kaXI9dCxufXNldEZvcm1hdCh0KXtyZXR1cm4gdGhpcy5nZXRXcml0YWJsZSgpLl9fZm9ybWF0PXQhPT0iIj9UeVt0XTowLHRoaXN9c2V0SW5kZW50KHQpe3JldHVybiB0aGlzLmdldFdyaXRhYmxlKCkuX19pbmRlbnQ9dCx0aGlzfXNwbGljZSh0LG4scil7bGV0IG89ci5sZW5ndGgsaT10aGlzLmdldENoaWxkcmVuU2l6ZSgpLGw9dGhpcy5nZXRXcml0YWJsZSgpLHM9bC5fX2tleTt2YXIgYT1bXSx1PVtdO2xldCBjPXRoaXMuZ2V0Q2hpbGRBdEluZGV4KHQrbiksZD1udWxsLGY9aS1uK287aWYodCE9PTApaWYodD09PWkpZD10aGlzLmdldExhc3RDaGlsZCgpO2Vsc2V7dmFyIGg9dGhpcy5nZXRDaGlsZEF0SW5kZXgodCk7aCE9PW51bGwmJihkPWguZ2V0UHJldmlvdXNTaWJsaW5nKCkpfWlmKDA8bil7dmFyIG09ZD09PW51bGw/dGhpcy5nZXRGaXJzdENoaWxkKCk6ZC5nZXROZXh0U2libGluZygpO2ZvcihoPTA7aDxuO2grKyl7bT09PW51bGwmJksoMTAwKTt2YXIgZz1tLmdldE5leHRTaWJsaW5nKCksXz1tLl9fa2V5O209bS5nZXRXcml0YWJsZSgpLGRpKG0pLHUucHVzaChfKSxtPWd9fWZvcihoPWQsZz0wO2c8bztnKyspe189cltnXSxoIT09bnVsbCYmXy5pcyhoKSYmKGQ9aD1oLmdldFByZXZpb3VzU2libGluZygpKSxtPV8uZ2V0V3JpdGFibGUoKSxtLl9fcGFyZW50PT09cyYmZi0tLGRpKG0pO2xldCB2PV8uX19rZXk7aD09PW51bGw/KGwuX19maXJzdD12LG0uX19wcmV2PW51bGwpOihoPWguZ2V0V3JpdGFibGUoKSxoLl9fbmV4dD12LG0uX19wcmV2PWguX19rZXkpLF8uX19rZXk9PT1zJiZLKDc2KSxtLl9fcGFyZW50PXMsYS5wdXNoKHYpLGg9X31pZih0K249PT1pP2ghPT1udWxsJiYoaC5nZXRXcml0YWJsZSgpLl9fbmV4dD1udWxsLGwuX19sYXN0PWguX19rZXkpOmMhPT1udWxsJiYodD1jLmdldFdyaXRhYmxlKCksaCE9PW51bGw/KG49aC5nZXRXcml0YWJsZSgpLHQuX19wcmV2PWguX19rZXksbi5fX25leHQ9Yy5fX2tleSk6dC5fX3ByZXY9bnVsbCksbC5fX3NpemU9Zix1Lmxlbmd0aCYmKHQ9WWUoKSxmZSh0KSkpe3U9bmV3IFNldCh1KSxhPW5ldyBTZXQoYSk7bGV0e2FuY2hvcjp2LGZvY3VzOnl9PXQ7Snkodix1LGEpJiZXYyh2LHYuZ2V0Tm9kZSgpLHRoaXMsZCxjKSxKeSh5LHUsYSkmJldjKHkseS5nZXROb2RlKCksdGhpcyxkLGMpLGYhPT0wfHx0aGlzLmNhbkJlRW1wdHkoKXx8b3IodGhpcyl8fHRoaXMucmVtb3ZlKCl9cmV0dXJuIGx9ZXhwb3J0SlNPTigpe3JldHVybntjaGlsZHJlbjpbXSxkaXJlY3Rpb246dGhpcy5nZXREaXJlY3Rpb24oKSxmb3JtYXQ6dGhpcy5nZXRGb3JtYXRUeXBlKCksaW5kZW50OnRoaXMuZ2V0SW5kZW50KCksdHlwZToiZWxlbWVudCIsdmVyc2lvbjoxfX1pbnNlcnROZXdBZnRlcigpe3JldHVybiBudWxsfWNhbkluZGVudCgpe3JldHVybiEwfWNvbGxhcHNlQXRTdGFydCgpe3JldHVybiExfWV4Y2x1ZGVGcm9tQ29weSgpe3JldHVybiExfWNhbkV4dHJhY3RDb250ZW50cygpe3JldHVybiEwfWNhblJlcGxhY2VXaXRoKCl7cmV0dXJuITB9Y2FuSW5zZXJ0QWZ0ZXIoKXtyZXR1cm4hMH1jYW5CZUVtcHR5KCl7cmV0dXJuITB9Y2FuSW5zZXJ0VGV4dEJlZm9yZSgpe3JldHVybiEwfWNhbkluc2VydFRleHRBZnRlcigpe3JldHVybiEwfWlzSW5saW5lKCl7cmV0dXJuITF9aXNTaGFkb3dSb290KCl7cmV0dXJuITF9Y2FuTWVyZ2VXaXRoKCl7cmV0dXJuITF9ZXh0cmFjdFdpdGhDaGlsZCgpe3JldHVybiExfX1mdW5jdGlvbiBXKGUpe3JldHVybiBlIGluc3RhbmNlb2YgQWl9ZnVuY3Rpb24gSnkoZSx0LG4pe2ZvcihlPWUuZ2V0Tm9kZSgpO2U7KXtsZXQgcj1lLl9fa2V5O2lmKHQuaGFzKHIpJiYhbi5oYXMocikpcmV0dXJuITA7ZT1lLmdldFBhcmVudCgpfXJldHVybiExfWNsYXNzIFFsIGV4dGVuZHMgQWl7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4icm9vdCJ9c3RhdGljIGNsb25lKCl7cmV0dXJuIG5ldyBRbH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCJyb290IiksdGhpcy5fX2NhY2hlZFRleHQ9bnVsbH1nZXRUb3BMZXZlbEVsZW1lbnRPclRocm93KCl7Syg1MSl9Z2V0VGV4dENvbnRlbnQoKXtsZXQgdD10aGlzLl9fY2FjaGVkVGV4dDtyZXR1cm4hWGwoKSYmb3QoKS5fZGlydHlUeXBlIT09MHx8dD09PW51bGw/c3VwZXIuZ2V0VGV4dENvbnRlbnQoKTp0fXJlbW92ZSgpe0soNTIpfXJlcGxhY2UoKXtLKDUzKX1pbnNlcnRCZWZvcmUoKXtLKDU0KX1pbnNlcnRBZnRlcigpe0soNTUpfXVwZGF0ZURPTSgpe3JldHVybiExfWFwcGVuZCguLi50KXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7bGV0IHI9dFtuXTtXKHIpfHxLZShyKXx8Syg1Nil9cmV0dXJuIHN1cGVyLmFwcGVuZCguLi50KX1zdGF0aWMgaW1wb3J0SlNPTih0KXtsZXQgbj1ScigpO3JldHVybiBuLnNldEZvcm1hdCh0LmZvcm1hdCksbi5zZXRJbmRlbnQodC5pbmRlbnQpLG4uc2V0RGlyZWN0aW9uKHQuZGlyZWN0aW9uKSxufWV4cG9ydEpTT04oKXtyZXR1cm57Y2hpbGRyZW46W10sZGlyZWN0aW9uOnRoaXMuZ2V0RGlyZWN0aW9uKCksZm9ybWF0OnRoaXMuZ2V0Rm9ybWF0VHlwZSgpLGluZGVudDp0aGlzLmdldEluZGVudCgpLHR5cGU6InJvb3QiLHZlcnNpb246MX19Y29sbGFwc2VBdFN0YXJ0KCl7cmV0dXJuITB9fWZ1bmN0aW9uIHJuKGUpe3JldHVybiBlIGluc3RhbmNlb2YgUWx9ZnVuY3Rpb24gdVIoZSx0KXtpZih0PXQuZ2V0RWRpdG9yU3RhdGUoKS5fc2VsZWN0aW9uLGU9ZS5fc2VsZWN0aW9uLGUhPT1udWxsKXtpZihlLmRpcnR5fHwhZS5pcyh0KSlyZXR1cm4hMH1lbHNlIGlmKHQhPT1udWxsKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGdtKCl7cmV0dXJuIG5ldyBSZChuZXcgTWFwKFtbInJvb3QiLG5ldyBRbF1dKSl9ZnVuY3Rpb24gd1MoZSl7bGV0IHQ9ZS5leHBvcnRKU09OKCk7dmFyIG49ZS5jb25zdHJ1Y3Rvcjt0LnR5cGUhPT1uLmdldFR5cGUoKSYmSygxMzAsbi5uYW1lKTtsZXQgcj10LmNoaWxkcmVuO2lmKFcoZSkpZm9yKEFycmF5LmlzQXJyYXkocil8fEsoNTksbi5uYW1lKSxlPWUuZ2V0Q2hpbGRyZW4oKSxuPTA7bjxlLmxlbmd0aDtuKyspe2xldCBvPXdTKGVbbl0pO3IucHVzaChvKX1yZXR1cm4gdH1jbGFzcyBSZHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuX25vZGVNYXA9dCx0aGlzLl9zZWxlY3Rpb249bnx8bnVsbCx0aGlzLl9yZWFkT25seT10aGlzLl9mbHVzaFN5bmM9ITF9aXNFbXB0eSgpe3JldHVybiB0aGlzLl9ub2RlTWFwLnNpemU9PT0xJiZ0aGlzLl9zZWxlY3Rpb249PT1udWxsfXJlYWQodCl7cmV0dXJuIFh5KHRoaXMsdCl9Y2xvbmUodCl7cmV0dXJuIHQ9bmV3IFJkKHRoaXMuX25vZGVNYXAsdD09PXZvaWQgMD90aGlzLl9zZWxlY3Rpb246dCksdC5fcmVhZE9ubHk9ITAsdH10b0pTT04oKXtyZXR1cm4gWHkodGhpcywoKT0+KHtyb290OndTKFJyKCkpfSkpfX1jbGFzcyBKbCBleHRlbmRzIEFpe3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuInBhcmFncmFwaCJ9c3RhdGljIGNsb25lKHQpe3JldHVybiBuZXcgSmwodC5fX2tleSl9Y3JlYXRlRE9NKHQpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtyZXR1cm4gdD1Wcyh0LnRoZW1lLCJwYXJhZ3JhcGgiKSx0IT09dm9pZCAwJiZuLmNsYXNzTGlzdC5hZGQoLi4udCksbn11cGRhdGVET00oKXtyZXR1cm4hMX1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJue3A6KCk9Pih7Y29udmVyc2lvbjpjUixwcmlvcml0eTowfSl9fWV4cG9ydERPTSh0KXtpZih7ZWxlbWVudDp0fT1zdXBlci5leHBvcnRET00odCksdCYmJGQodCkpe3RoaXMuaXNFbXB0eSgpJiZ0LmFwcGVuZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTt2YXIgbj10aGlzLmdldEZvcm1hdFR5cGUoKTt0LnN0eWxlLnRleHRBbGlnbj1uLChuPXRoaXMuZ2V0RGlyZWN0aW9uKCkpJiYodC5kaXI9biksbj10aGlzLmdldEluZGVudCgpLDA8biYmKHQuc3R5bGUudGV4dEluZGVudD1gJHsyMCpufXB4YCl9cmV0dXJue2VsZW1lbnQ6dH19c3RhdGljIGltcG9ydEpTT04odCl7bGV0IG49d2koKTtyZXR1cm4gbi5zZXRGb3JtYXQodC5mb3JtYXQpLG4uc2V0SW5kZW50KHQuaW5kZW50KSxuLnNldERpcmVjdGlvbih0LmRpcmVjdGlvbiksbn1leHBvcnRKU09OKCl7cmV0dXJuey4uLnN1cGVyLmV4cG9ydEpTT04oKSx0eXBlOiJwYXJhZ3JhcGgiLHZlcnNpb246MX19aW5zZXJ0TmV3QWZ0ZXIodCxuKXt0PXdpKCk7bGV0IHI9dGhpcy5nZXREaXJlY3Rpb24oKTtyZXR1cm4gdC5zZXREaXJlY3Rpb24ociksdGhpcy5pbnNlcnRBZnRlcih0LG4pLHR9Y29sbGFwc2VBdFN0YXJ0KCl7bGV0IHQ9dGhpcy5nZXRDaGlsZHJlbigpO2lmKHQubGVuZ3RoPT09MHx8Wih0WzBdKSYmdFswXS5nZXRUZXh0Q29udGVudCgpLnRyaW0oKT09PSIiKXtpZih0aGlzLmdldE5leHRTaWJsaW5nKCkhPT1udWxsKXJldHVybiB0aGlzLnNlbGVjdE5leHQoKSx0aGlzLnJlbW92ZSgpLCEwO2lmKHRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCkhPT1udWxsKXJldHVybiB0aGlzLnNlbGVjdFByZXZpb3VzKCksdGhpcy5yZW1vdmUoKSwhMH1yZXR1cm4hMX19ZnVuY3Rpb24gY1IoZSl7bGV0IHQ9d2koKTtyZXR1cm4gZS5zdHlsZSYmKHQuc2V0Rm9ybWF0KGUuc3R5bGUudGV4dEFsaWduKSxlPXBhcnNlSW50KGUuc3R5bGUudGV4dEluZGVudCwxMCkvMjAsMDxlJiZ0LnNldEluZGVudChlKSkse25vZGU6dH19ZnVuY3Rpb24gd2koKXtyZXR1cm4gVmEobmV3IEpsKX1mdW5jdGlvbiBfUyhlLHQsbixyKXtsZXQgbz1lLl9rZXlUb0RPTU1hcDtvLmNsZWFyKCksZS5fZWRpdG9yU3RhdGU9Z20oKSxlLl9wZW5kaW5nRWRpdG9yU3RhdGU9cixlLl9jb21wb3NpdGlvbktleT1udWxsLGUuX2RpcnR5VHlwZT0wLGUuX2Nsb25lTm90TmVlZGVkLmNsZWFyKCksZS5fZGlydHlMZWF2ZXM9bmV3IFNldCxlLl9kaXJ0eUVsZW1lbnRzLmNsZWFyKCksZS5fbm9ybWFsaXplZE5vZGVzPW5ldyBTZXQsZS5fdXBkYXRlVGFncz1uZXcgU2V0LGUuX3VwZGF0ZXM9W10sZS5fYmxvY2tDdXJzb3JFbGVtZW50PW51bGwscj1lLl9vYnNlcnZlcixyIT09bnVsbCYmKHIuZGlzY29ubmVjdCgpLGUuX29ic2VydmVyPW51bGwpLHQhPT1udWxsJiYodC50ZXh0Q29udGVudD0iIiksbiE9PW51bGwmJihuLnRleHRDb250ZW50PSIiLG8uc2V0KCJyb290IixuKSl9ZnVuY3Rpb24gZFIoZSl7bGV0IHQ9bmV3IE1hcCxuPW5ldyBTZXQ7cmV0dXJuIGUuZm9yRWFjaChyPT57aWYocj1yLmtsYXNzLmltcG9ydERPTSE9bnVsbD9yLmtsYXNzLmltcG9ydERPTS5iaW5kKHIua2xhc3MpOm51bGwsciE9bnVsbCYmIW4uaGFzKHIpKXtuLmFkZChyKTt2YXIgbz1yKCk7byE9PW51bGwmJk9iamVjdC5rZXlzKG8pLmZvckVhY2goaT0+e2xldCBsPXQuZ2V0KGkpO2w9PT12b2lkIDAmJihsPVtdLHQuc2V0KGksbCkpLGwucHVzaChvW2ldKX0pfX0pLHR9Y2xhc3MgZlJ7Y29uc3RydWN0b3IodCxuLHIsbyxpLGwscyl7dGhpcy5fcGFyZW50RWRpdG9yPW4sdGhpcy5fcm9vdEVsZW1lbnQ9bnVsbCx0aGlzLl9lZGl0b3JTdGF0ZT10LHRoaXMuX2NvbXBvc2l0aW9uS2V5PXRoaXMuX3BlbmRpbmdFZGl0b3JTdGF0ZT1udWxsLHRoaXMuX2RlZmVycmVkPVtdLHRoaXMuX2tleVRvRE9NTWFwPW5ldyBNYXAsdGhpcy5fdXBkYXRlcz1bXSx0aGlzLl91cGRhdGluZz0hMSx0aGlzLl9saXN0ZW5lcnM9e2RlY29yYXRvcjpuZXcgU2V0LGVkaXRhYmxlOm5ldyBTZXQsbXV0YXRpb246bmV3IE1hcCxyb290Om5ldyBTZXQsdGV4dGNvbnRlbnQ6bmV3IFNldCx1cGRhdGU6bmV3IFNldH0sdGhpcy5fY29tbWFuZHM9bmV3IE1hcCx0aGlzLl9jb25maWc9byx0aGlzLl9ub2Rlcz1yLHRoaXMuX2RlY29yYXRvcnM9e30sdGhpcy5fcGVuZGluZ0RlY29yYXRvcnM9bnVsbCx0aGlzLl9kaXJ0eVR5cGU9MCx0aGlzLl9jbG9uZU5vdE5lZWRlZD1uZXcgU2V0LHRoaXMuX2RpcnR5TGVhdmVzPW5ldyBTZXQsdGhpcy5fZGlydHlFbGVtZW50cz1uZXcgTWFwLHRoaXMuX25vcm1hbGl6ZWROb2Rlcz1uZXcgU2V0LHRoaXMuX3VwZGF0ZVRhZ3M9bmV3IFNldCx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX2tleT1ZXygpLHRoaXMuX29uRXJyb3I9aSx0aGlzLl9odG1sQ29udmVyc2lvbnM9bCx0aGlzLl9lZGl0YWJsZT1zLHRoaXMuX2hlYWRsZXNzPW4hPT1udWxsJiZuLl9oZWFkbGVzcyx0aGlzLl9ibG9ja0N1cnNvckVsZW1lbnQ9dGhpcy5fd2luZG93PW51bGx9aXNDb21wb3NpbmcoKXtyZXR1cm4gdGhpcy5fY29tcG9zaXRpb25LZXkhPW51bGx9cmVnaXN0ZXJVcGRhdGVMaXN0ZW5lcih0KXtsZXQgbj10aGlzLl9saXN0ZW5lcnMudXBkYXRlO3JldHVybiBuLmFkZCh0KSwoKT0+e24uZGVsZXRlKHQpfX1yZWdpc3RlckVkaXRhYmxlTGlzdGVuZXIodCl7bGV0IG49dGhpcy5fbGlzdGVuZXJzLmVkaXRhYmxlO3JldHVybiBuLmFkZCh0KSwoKT0+e24uZGVsZXRlKHQpfX1yZWdpc3RlckRlY29yYXRvckxpc3RlbmVyKHQpe2xldCBuPXRoaXMuX2xpc3RlbmVycy5kZWNvcmF0b3I7cmV0dXJuIG4uYWRkKHQpLCgpPT57bi5kZWxldGUodCl9fXJlZ2lzdGVyVGV4dENvbnRlbnRMaXN0ZW5lcih0KXtsZXQgbj10aGlzLl9saXN0ZW5lcnMudGV4dGNvbnRlbnQ7cmV0dXJuIG4uYWRkKHQpLCgpPT57bi5kZWxldGUodCl9fXJlZ2lzdGVyUm9vdExpc3RlbmVyKHQpe2xldCBuPXRoaXMuX2xpc3RlbmVycy5yb290O3JldHVybiB0KHRoaXMuX3Jvb3RFbGVtZW50LG51bGwpLG4uYWRkKHQpLCgpPT57dChudWxsLHRoaXMuX3Jvb3RFbGVtZW50KSxuLmRlbGV0ZSh0KX19cmVnaXN0ZXJDb21tYW5kKHQsbixyKXtyPT09dm9pZCAwJiZLKDM1KTtsZXQgbz10aGlzLl9jb21tYW5kcztvLmhhcyh0KXx8by5zZXQodCxbbmV3IFNldCxuZXcgU2V0LG5ldyBTZXQsbmV3IFNldCxuZXcgU2V0XSk7bGV0IGk9by5nZXQodCk7aT09PXZvaWQgMCYmSygzNixTdHJpbmcodCkpO2xldCBsPWlbcl07cmV0dXJuIGwuYWRkKG4pLCgpPT57bC5kZWxldGUobiksaS5ldmVyeShzPT5zLnNpemU9PT0wKSYmby5kZWxldGUodCl9fXJlZ2lzdGVyTXV0YXRpb25MaXN0ZW5lcih0LG4pe3RoaXMuX25vZGVzLmdldCh0LmdldFR5cGUoKSk9PT12b2lkIDAmJksoMzcsdC5uYW1lKTtsZXQgcj10aGlzLl9saXN0ZW5lcnMubXV0YXRpb247cmV0dXJuIHIuc2V0KG4sdCksKCk9PntyLmRlbGV0ZShuKX19cmVnaXN0ZXJOb2RlVHJhbnNmb3JtVG9LbGFzcyh0LG4pe3ZhciByPXQuZ2V0VHlwZSgpO3JldHVybiByPXRoaXMuX25vZGVzLmdldChyKSxyPT09dm9pZCAwJiZLKDM3LHQubmFtZSksci50cmFuc2Zvcm1zLmFkZChuKSxyfXJlZ2lzdGVyTm9kZVRyYW5zZm9ybSh0LG4pe3ZhciByPXRoaXMucmVnaXN0ZXJOb2RlVHJhbnNmb3JtVG9LbGFzcyh0LG4pO2xldCBvPVtyXTtyZXR1cm4gcj1yLnJlcGxhY2VXaXRoS2xhc3MsciE9bnVsbCYmKHI9dGhpcy5yZWdpc3Rlck5vZGVUcmFuc2Zvcm1Ub0tsYXNzKHIsbiksby5wdXNoKHIpKSxGMih0aGlzLHQuZ2V0VHlwZSgpKSwoKT0+e28uZm9yRWFjaChpPT5pLnRyYW5zZm9ybXMuZGVsZXRlKG4pKX19aGFzTm9kZSh0KXtyZXR1cm4gdGhpcy5fbm9kZXMuaGFzKHQuZ2V0VHlwZSgpKX1oYXNOb2Rlcyh0KXtyZXR1cm4gdC5ldmVyeSh0aGlzLmhhc05vZGUuYmluZCh0aGlzKSl9ZGlzcGF0Y2hDb21tYW5kKHQsbil7cmV0dXJuIEoodGhpcyx0LG4pfWdldERlY29yYXRvcnMoKXtyZXR1cm4gdGhpcy5fZGVjb3JhdG9yc31nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9yb290RWxlbWVudH1nZXRLZXkoKXtyZXR1cm4gdGhpcy5fa2V5fXNldFJvb3RFbGVtZW50KHQpe2xldCBuPXRoaXMuX3Jvb3RFbGVtZW50O2lmKHQhPT1uKXtsZXQgbD1Wcyh0aGlzLl9jb25maWcudGhlbWUsInJvb3QiKTt2YXIgcj10aGlzLl9wZW5kaW5nRWRpdG9yU3RhdGV8fHRoaXMuX2VkaXRvclN0YXRlO2lmKHRoaXMuX3Jvb3RFbGVtZW50PXQsX1ModGhpcyxuLHQsciksbiE9PW51bGwpe2lmKCF0aGlzLl9jb25maWcuZGlzYWJsZUV2ZW50cyl7S3MhPT0wJiYoS3MtLSxLcz09PTAmJm4ub3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLGZTKSk7dmFyIG89bi5fX2xleGljYWxFZGl0b3I7aWYobyE9bnVsbCl7aWYoby5fcGFyZW50RWRpdG9yIT09bnVsbCl7dmFyIGk9c20obyk7aT1pW2kubGVuZ3RoLTFdLl9rZXkseWwuZ2V0KGkpPT09byYmeWwuZGVsZXRlKGkpfWVsc2UgeWwuZGVsZXRlKG8uX2tleSk7bi5fX2xleGljYWxFZGl0b3I9bnVsbH1mb3Iobz1kUyhuKSxpPTA7aTxvLmxlbmd0aDtpKyspb1tpXSgpO24uX19sZXhpY2FsRXZlbnRIYW5kbGVzPVtdfWwhPW51bGwmJm4uY2xhc3NMaXN0LnJlbW92ZSguLi5sKX10IT09bnVsbD8ocj0ocj10Lm93bmVyRG9jdW1lbnQpJiZyLmRlZmF1bHRWaWV3fHxudWxsLG89dC5zdHlsZSxvLnVzZXJTZWxlY3Q9InRleHQiLG8ud2hpdGVTcGFjZT0icHJlLXdyYXAiLG8ud29yZEJyZWFrPSJicmVhay13b3JkIix0LnNldEF0dHJpYnV0ZSgiZGF0YS1sZXhpY2FsLWVkaXRvciIsInRydWUiKSx0aGlzLl93aW5kb3c9cix0aGlzLl9kaXJ0eVR5cGU9MixGXyh0aGlzKSx0aGlzLl91cGRhdGVUYWdzLmFkZCgiaGlzdG9yeS1tZXJnZSIpLGZpKHRoaXMpLHRoaXMuX2NvbmZpZy5kaXNhYmxlRXZlbnRzfHxaMih0LHRoaXMpLGwhPW51bGwmJnQuY2xhc3NMaXN0LmFkZCguLi5sKSk6KHRoaXMuX2VkaXRvclN0YXRlPXIsdGhpcy5fd2luZG93PXRoaXMuX3BlbmRpbmdFZGl0b3JTdGF0ZT1udWxsKSxZcygicm9vdCIsdGhpcywhMSx0LG4pfX1nZXRFbGVtZW50QnlLZXkodCl7cmV0dXJuIHRoaXMuX2tleVRvRE9NTWFwLmdldCh0KXx8bnVsbH1nZXRFZGl0b3JTdGF0ZSgpe3JldHVybiB0aGlzLl9lZGl0b3JTdGF0ZX1zZXRFZGl0b3JTdGF0ZSh0LG4pe3QuaXNFbXB0eSgpJiZLKDM4KSx6Xyh0aGlzKTtsZXQgcj10aGlzLl9wZW5kaW5nRWRpdG9yU3RhdGUsbz10aGlzLl91cGRhdGVUYWdzO249biE9PXZvaWQgMD9uLnRhZzpudWxsLHI9PT1udWxsfHxyLmlzRW1wdHkoKXx8KG4hPW51bGwmJm8uYWRkKG4pLGZpKHRoaXMpKSx0aGlzLl9wZW5kaW5nRWRpdG9yU3RhdGU9dCx0aGlzLl9kaXJ0eVR5cGU9Mix0aGlzLl9kaXJ0eUVsZW1lbnRzLnNldCgicm9vdCIsITEpLHRoaXMuX2NvbXBvc2l0aW9uS2V5PW51bGwsbiE9bnVsbCYmby5hZGQobiksZmkodGhpcyl9cGFyc2VFZGl0b3JTdGF0ZSh0LG4pe3Q9dHlwZW9mIHQ9PSJzdHJpbmciP0pTT04ucGFyc2UodCk6dDtsZXQgcj1nbSgpLG89VHQsaT15bixsPU50LHM9dGhpcy5fZGlydHlFbGVtZW50cyxhPXRoaXMuX2RpcnR5TGVhdmVzLHU9dGhpcy5fY2xvbmVOb3ROZWVkZWQsYz10aGlzLl9kaXJ0eVR5cGU7dGhpcy5fZGlydHlFbGVtZW50cz1uZXcgTWFwLHRoaXMuX2RpcnR5TGVhdmVzPW5ldyBTZXQsdGhpcy5fY2xvbmVOb3ROZWVkZWQ9bmV3IFNldCx0aGlzLl9kaXJ0eVR5cGU9MCxUdD1yLHluPSExLE50PXRoaXM7dHJ5e3BtKHQucm9vdCx0aGlzLl9ub2RlcyksbiYmbigpLHIuX3JlYWRPbmx5PSEwfWNhdGNoKGQpe2QgaW5zdGFuY2VvZiBFcnJvciYmdGhpcy5fb25FcnJvcihkKX1maW5hbGx5e3RoaXMuX2RpcnR5RWxlbWVudHM9cyx0aGlzLl9kaXJ0eUxlYXZlcz1hLHRoaXMuX2Nsb25lTm90TmVlZGVkPXUsdGhpcy5fZGlydHlUeXBlPWMsVHQ9byx5bj1pLE50PWx9cmV0dXJuIHJ9dXBkYXRlKHQsbil7Um4odGhpcyx0LG4pfWZvY3VzKHQsbj17fSl7bGV0IHI9dGhpcy5fcm9vdEVsZW1lbnQ7ciE9PW51bGwmJihyLnNldEF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxpemUiLCJvZmYiKSxSbih0aGlzLCgpPT57bGV0IG89WWUoKSxpPVJyKCk7byE9PW51bGw/by5kaXJ0eT0hMDppLmdldENoaWxkcmVuU2l6ZSgpIT09MCYmKG4uZGVmYXVsdFNlbGVjdGlvbj09PSJyb290U3RhcnQiP2kuc2VsZWN0U3RhcnQoKTppLnNlbGVjdEVuZCgpKX0se29uVXBkYXRlOigpPT57ci5yZW1vdmVBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiksdCYmdCgpfSx0YWc6ImZvY3VzIn0pLHRoaXMuX3BlbmRpbmdFZGl0b3JTdGF0ZT09PW51bGwmJnIucmVtb3ZlQXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIpKX1ibHVyKCl7dmFyIHQ9dGhpcy5fcm9vdEVsZW1lbnQ7dCE9PW51bGwmJnQuYmx1cigpLHQ9UHIodGhpcy5fd2luZG93KSx0IT09bnVsbCYmdC5yZW1vdmVBbGxSYW5nZXMoKX1pc0VkaXRhYmxlKCl7cmV0dXJuIHRoaXMuX2VkaXRhYmxlfXNldEVkaXRhYmxlKHQpe3RoaXMuX2VkaXRhYmxlIT09dCYmKHRoaXMuX2VkaXRhYmxlPXQsWXMoImVkaXRhYmxlIix0aGlzLCEwLHQpKX10b0pTT04oKXtyZXR1cm57ZWRpdG9yU3RhdGU6dGhpcy5fZWRpdG9yU3RhdGUudG9KU09OKCl9fX1jbGFzcyBtbSBleHRlbmRzIEFpe2NvbnN0cnVjdG9yKHQsbil7c3VwZXIobiksdGhpcy5fX2NvbFNwYW49dCx0aGlzLl9fcm93U3Bhbj0xfWV4cG9ydEpTT04oKXtyZXR1cm57Li4uc3VwZXIuZXhwb3J0SlNPTigpLGNvbFNwYW46dGhpcy5fX2NvbFNwYW4scm93U3Bhbjp0aGlzLl9fcm93U3Bhbn19Z2V0Q29sU3Bhbigpe3JldHVybiB0aGlzLl9fY29sU3Bhbn1zZXRDb2xTcGFuKHQpe3JldHVybiB0aGlzLmdldFdyaXRhYmxlKCkuX19jb2xTcGFuPXQsdGhpc31nZXRSb3dTcGFuKCl7cmV0dXJuIHRoaXMuX19yb3dTcGFufXNldFJvd1NwYW4odCl7cmV0dXJuIHRoaXMuZ2V0V3JpdGFibGUoKS5fX3Jvd1NwYW49dCx0aGlzfX1mdW5jdGlvbiBqbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG1tfWNsYXNzIFNTIGV4dGVuZHMgQWl7fWZ1bmN0aW9uIHZtKGUpe3JldHVybiBlIGluc3RhbmNlb2YgU1N9Y2xhc3MgRVMgZXh0ZW5kcyBBaXt9ZnVuY3Rpb24gVGEoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBFU31JLiRhZGRVcGRhdGVUYWc9ZnVuY3Rpb24oZSl7dG4oKSxvdCgpLl91cGRhdGVUYWdzLmFkZChlKX07SS4kYXBwbHlOb2RlUmVwbGFjZW1lbnQ9VmE7SS4kY29weU5vZGU9Sl87SS4kY3JlYXRlTGluZUJyZWFrTm9kZT1PbDtJLiRjcmVhdGVOb2RlU2VsZWN0aW9uPV9wO0kuJGNyZWF0ZVBhcmFncmFwaE5vZGU9d2k7SS4kY3JlYXRlUmFuZ2VTZWxlY3Rpb249ZnVuY3Rpb24oKXtsZXQgZT1uZXcgYnIoInJvb3QiLDAsImVsZW1lbnQiKSx0PW5ldyBicigicm9vdCIsMCwiZWxlbWVudCIpO3JldHVybiBuZXcgT2koZSx0LDAsIiIpfTtJLiRjcmVhdGVUYWJOb2RlPWJkO0kuJGNyZWF0ZVRleHROb2RlPSR0O0kuJGdldEFkamFjZW50Tm9kZT1scDtJLiRnZXROZWFyZXN0Tm9kZUZyb21ET01Ob2RlPUhhO0kuJGdldE5lYXJlc3RSb290T3JTaGFkb3dSb290PVFfO0kuJGdldE5vZGVCeUtleT1idDtJLiRnZXRQcmV2aW91c1NlbGVjdGlvbj1ZbDtJLiRnZXRSb290PVJyO0kuJGdldFNlbGVjdGlvbj1ZZTtJLiRnZXRUZXh0Q29udGVudD1mdW5jdGlvbigpe2xldCBlPVllKCk7cmV0dXJuIGU9PT1udWxsPyIiOmUuZ2V0VGV4dENvbnRlbnQoKX07SS4kaGFzQW5jZXN0b3I9amM7SS4kaGFzVXBkYXRlVGFnPWZ1bmN0aW9uKGUpe3JldHVybiBvdCgpLl91cGRhdGVUYWdzLmhhcyhlKX07SS4kaW5zZXJ0Tm9kZXM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1ZZSgpfHxZbCgpO3JldHVybiBuPT09bnVsbCYmKG49UnIoKS5zZWxlY3RFbmQoKSksbi5pbnNlcnROb2RlcyhlLHQpfTtJLiRpc0Jsb2NrRWxlbWVudE5vZGU9d3A7SS4kaXNEZWNvcmF0b3JOb2RlPUtlO0kuJGlzRWxlbWVudE5vZGU9VztJLiRpc0lubGluZUVsZW1lbnRPckRlY29yYXRvck5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFcoZSkmJmUuaXNJbmxpbmUoKXx8S2UoZSkmJmUuaXNJbmxpbmUoKX07SS4kaXNMZWFmTm9kZT1VXztJLiRpc0xpbmVCcmVha05vZGU9a2E7SS4kaXNOb2RlU2VsZWN0aW9uPUdsO0kuJGlzUGFyYWdyYXBoTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEpsfTtJLiRpc1JhbmdlU2VsZWN0aW9uPWZlO0kuJGlzUm9vdE5vZGU9cm47SS4kaXNSb290T3JTaGFkb3dSb290PW9yO0kuJGlzVGFiTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEtsfTtJLiRpc1RleHROb2RlPVo7SS4kbm9kZXNPZlR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQ9T3IoKTtsZXQgbj10Ll9yZWFkT25seSxyPWUuZ2V0VHlwZSgpO3Q9dC5fbm9kZU1hcDtsZXQgbz1bXTtmb3IobGV0WyxpXW9mIHQpaSBpbnN0YW5jZW9mIGUmJmkuX190eXBlPT09ciYmKG58fGkuaXNBdHRhY2hlZCgpKSYmby5wdXNoKGkpO3JldHVybiBvfTtJLiRub3JtYWxpemVTZWxlY3Rpb25fX0VYUEVSSU1FTlRBTD1vbTtJLiRwYXJzZVNlcmlhbGl6ZWROb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBwbShlLG90KCkuX25vZGVzKX07SS4kc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dmFyIGU9UnIoKTtlPWUuc2VsZWN0KDAsZS5nZXRDaGlsZHJlblNpemUoKSksa3Iob20oZSkpfTtJLiRzZXRDb21wb3NpdGlvbktleT1EdDtJLiRzZXRTZWxlY3Rpb249a3I7SS4kc3BsaXROb2RlPVpfO0kuQkxVUl9DT01NQU5EPURfO0kuQ0FOX1JFRE9fQ09NTUFORD17fTtJLkNBTl9VTkRPX0NPTU1BTkQ9e307SS5DTEVBUl9FRElUT1JfQ09NTUFORD17fTtJLkNMRUFSX0hJU1RPUllfQ09NTUFORD17fTtJLkNMSUNLX0NPTU1BTkQ9eV87SS5DT01NQU5EX1BSSU9SSVRZX0NSSVRJQ0FMPTQ7SS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUj0wO0kuQ09NTUFORF9QUklPUklUWV9ISUdIPTM7SS5DT01NQU5EX1BSSU9SSVRZX0xPVz0xO0kuQ09NTUFORF9QUklPUklUWV9OT1JNQUw9MjtJLkNPTlRST0xMRURfVEVYVF9JTlNFUlRJT05fQ09NTUFORD12bDtJLkNPUFlfQ09NTUFORD1xZztJLkNVVF9DT01NQU5EPWVtO0kuREVMRVRFX0NIQVJBQ1RFUl9DT01NQU5EPXdhO0kuREVMRVRFX0xJTkVfQ09NTUFORD1TYTtJLkRFTEVURV9XT1JEX0NPTU1BTkQ9X2E7SS5ERVBSRUNBVEVEXyRjb21wdXRlR3JpZE1hcD1tUztJLkRFUFJFQ0FURURfJGNyZWF0ZUdyaWRTZWxlY3Rpb249ZnVuY3Rpb24oKXtsZXQgZT1uZXcgYnIoInJvb3QiLDAsImVsZW1lbnQiKSx0PW5ldyBicigicm9vdCIsMCwiZWxlbWVudCIpO3JldHVybiBuZXcgTmQoInJvb3QiLGUsdCl9O0kuREVQUkVDQVRFRF8kZ2V0R3JpZENlbGxOb2RlUmVjdD14cDtJLkRFUFJFQ0FURURfJGdldE5vZGVUcmlwbGV0PXZTO0kuREVQUkVDQVRFRF8kaXNHcmlkQ2VsbE5vZGU9am47SS5ERVBSRUNBVEVEXyRpc0dyaWROb2RlPXZtO0kuREVQUkVDQVRFRF8kaXNHcmlkUm93Tm9kZT1UYTtJLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbj1mbTtJLkRFUFJFQ0FURURfR3JpZENlbGxOb2RlPW1tO0kuREVQUkVDQVRFRF9HcmlkTm9kZT1TUztJLkRFUFJFQ0FURURfR3JpZFJvd05vZGU9RVM7SS5EUkFHRU5EX0NPTU1BTkQ9TV87SS5EUkFHT1ZFUl9DT01NQU5EPUFfO0kuRFJBR1NUQVJUX0NPTU1BTkQ9T187SS5EUk9QX0NPTU1BTkQ9UF87SS5EZWNvcmF0b3JOb2RlPXhTO0kuRWxlbWVudE5vZGU9QWk7SS5GT0NVU19DT01NQU5EPUxfO0kuRk9STUFUX0VMRU1FTlRfQ09NTUFORD17fTtJLkZPUk1BVF9URVhUX0NPTU1BTkQ9X287SS5JTkRFTlRfQ09OVEVOVF9DT01NQU5EPXt9O0kuSU5TRVJUX0xJTkVfQlJFQUtfQ09NTUFORD1IcztJLklOU0VSVF9QQVJBR1JBUEhfQ09NTUFORD10cDtJLklOU0VSVF9UQUJfQ09NTUFORD17fTtJLktFWV9BUlJPV19ET1dOX0NPTU1BTkQ9JF87SS5LRVlfQVJST1dfTEVGVF9DT01NQU5EPVNfO0kuS0VZX0FSUk9XX1JJR0hUX0NPTU1BTkQ9d187SS5LRVlfQVJST1dfVVBfQ09NTUFORD1DXztJLktFWV9CQUNLU1BBQ0VfQ09NTUFORD1iXztJLktFWV9ERUxFVEVfQ09NTUFORD1OXztJLktFWV9ET1dOX0NPTU1BTkQ9eF87SS5LRVlfRU5URVJfQ09NTUFORD1PYztJLktFWV9FU0NBUEVfQ09NTUFORD1UXztJLktFWV9NT0RJRklFUl9DT01NQU5EPUlfO0kuS0VZX1NQQUNFX0NPTU1BTkQ9a187SS5LRVlfVEFCX0NPTU1BTkQ9Ul87SS5MaW5lQnJlYWtOb2RlPVZsO0kuTU9WRV9UT19FTkQ9X187SS5NT1ZFX1RPX1NUQVJUPUVfO0kuT1VUREVOVF9DT05URU5UX0NPTU1BTkQ9e307SS5QQVNURV9DT01NQU5EPVFnO0kuUGFyYWdyYXBoTm9kZT1KbDtJLlJFRE9fQ09NTUFORD1aZztJLlJFTU9WRV9URVhUX0NPTU1BTkQ9bnA7SS5Sb290Tm9kZT1RbDtJLlNFTEVDVElPTl9DSEFOR0VfQ09NTUFORD13ZDtJLlNFTEVDVF9BTExfQ09NTUFORD1ycDtJLlRhYk5vZGU9S2w7SS5UZXh0Tm9kZT1QaTtJLlVORE9fQ09NTUFORD1KZztJLmNyZWF0ZUNvbW1hbmQ9ZnVuY3Rpb24oKXtyZXR1cm57fX07SS5jcmVhdGVFZGl0b3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8e30sbj1OdCxyPXQudGhlbWV8fHt9O2xldCBvPWU9PT12b2lkIDA/bjp0LnBhcmVudEVkaXRvcnx8bnVsbCxpPXQuZGlzYWJsZUV2ZW50c3x8ITEsbD1nbSgpLHM9dC5uYW1lc3BhY2V8fChvIT09bnVsbD9vLl9jb25maWcubmFtZXNwYWNlOllfKCkpLGE9dC5lZGl0b3JTdGF0ZSx1PVtRbCxQaSxWbCxLbCxKbCwuLi50Lm5vZGVzfHxbXV0sYz10Lm9uRXJyb3I7aWYodD10LmVkaXRhYmxlIT09dm9pZCAwP3QuZWRpdGFibGU6ITAsZT09PXZvaWQgMCYmbiE9PW51bGwpZT1uLl9ub2RlcztlbHNlIGZvcihlPW5ldyBNYXAsbj0wO248dS5sZW5ndGg7bisrKXtsZXQgZj11W25dLGg9bnVsbDt2YXIgZD1udWxsO3R5cGVvZiBmIT0iZnVuY3Rpb24iJiYoZD1mLGY9ZC5yZXBsYWNlLGg9ZC53aXRoLGQ9ZC53aXRoS2xhc3M/ZC53aXRoS2xhc3M6bnVsbCk7bGV0IG09Zi5nZXRUeXBlKCksZz1mLnRyYW5zZm9ybSgpLF89bmV3IFNldDtnIT09bnVsbCYmXy5hZGQoZyksZS5zZXQobSx7a2xhc3M6ZixyZXBsYWNlOmgscmVwbGFjZVdpdGhLbGFzczpkLHRyYW5zZm9ybXM6X30pfXJldHVybiByPW5ldyBmUihsLG8sZSx7ZGlzYWJsZUV2ZW50czppLG5hbWVzcGFjZTpzLHRoZW1lOnJ9LGN8fGNvbnNvbGUuZXJyb3IsZFIoZSksdCksYSE9PXZvaWQgMCYmKHIuX3BlbmRpbmdFZGl0b3JTdGF0ZT1hLHIuX2RpcnR5VHlwZT0yKSxyfTtJLmdldE5lYXJlc3RFZGl0b3JGcm9tRE9NTm9kZT1sbTtJLmlzSFRNTEFuY2hvckVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuICRkKGUpJiZlLnRhZ05hbWU9PT0iQSJ9O0kuaXNIVE1MRWxlbWVudD0kZDtJLmlzU2VsZWN0aW9uQ2FwdHVyZWRJbkRlY29yYXRvcklucHV0PWltO0kuaXNTZWxlY3Rpb25XaXRoaW5FZGl0b3I9VWE7Y29uc3QgaFI9STt2YXIgaGU9aFIsdnQ9e30sT3Q9e30saWU9aGU7bGV0IFVjPW5ldyBNYXA7ZnVuY3Rpb24gWnkoZSl7Zm9yKDtlIT1udWxsOyl7aWYoZS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXJldHVybiBlO2U9ZS5maXJzdENoaWxkfXJldHVybiBudWxsfWZ1bmN0aW9uIHF5KGUpe2xldCB0PWUucGFyZW50Tm9kZTtpZih0PT1udWxsKXRocm93IEVycm9yKCJTaG91bGQgbmV2ZXIgaGFwcGVuIik7cmV0dXJuW3QsQXJyYXkuZnJvbSh0LmNoaWxkTm9kZXMpLmluZGV4T2YoZSldfWZ1bmN0aW9uIENTKGUpe2xldCB0PXt9O2U9ZS5zcGxpdCgiOyIpO2ZvcihsZXQgbiBvZiBlKWlmKG4hPT0iIil7bGV0W3Isb109bi5zcGxpdCgvOihbXl0rKS8pO3Rbci50cmltKCldPW8udHJpbSgpfXJldHVybiB0fWZ1bmN0aW9uIEhjKGUpe2xldCB0PVVjLmdldChlKTtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9Q1MoZSksVWMuc2V0KGUsdCkpLHR9ZnVuY3Rpb24gcFIoZSl7bGV0IHQ9IiI7Zm9yKGxldCBuIGluIGUpbiYmKHQrPWAke259OiAke2Vbbl19O2ApO3JldHVybiB0fWZ1bmN0aW9uIEZpKGUsdCl7dmFyIG49SGMoImdldFN0eWxlImluIGU/ZS5nZXRTdHlsZSgpOmUuc3R5bGUpO3Q9T2JqZWN0LmVudHJpZXModCkucmVkdWNlKChyLFtvLGldKT0+KGk9PT1udWxsP2RlbGV0ZSByW29dOnJbb109aSxyKSx7Li4ubn0pLG49cFIodCksZS5zZXRTdHlsZShuKSxVYy5zZXQobix0KX1mdW5jdGlvbiAkUyhlLHQpe3ZhciBuPWUuZ2V0Tm9kZXMoKSxyPW4ubGVuZ3RoO2lmKGllLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihlKSl7Zm9yKHZhciBvPWllLiRjcmVhdGVSYW5nZVNlbGVjdGlvbigpLGk9by5hbmNob3IsbD1vLmZvY3VzLHM9MDtzPHI7cysrKXt2YXIgYT1uW3NdO2llLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKGEpJiYoaS5zZXQoYS5nZXRLZXkoKSwwLCJlbGVtZW50IiksbC5zZXQoYS5nZXRLZXkoKSxhLmdldENoaWxkcmVuU2l6ZSgpLCJlbGVtZW50IiksJFMoaWUuJG5vcm1hbGl6ZVNlbGVjdGlvbl9fRVhQRVJJTUVOVEFMKG8pLHQpKX1pZS4kc2V0U2VsZWN0aW9uKGUpfWVsc2UgaWYoLS1yLG89blswXSxpPW5bcl0sZS5pc0NvbGxhcHNlZCgpKUZpKGUsdCk7ZWxzZXt2YXIgdT1lLmFuY2hvcixjPWUuZm9jdXM7cz1vLmdldFRleHRDb250ZW50KCkubGVuZ3RoLGE9Yy5vZmZzZXQ7dmFyIGQ9dS5vZmZzZXQsZj11LmlzQmVmb3JlKGMpO2w9Zj9kOmEsZT1mP2E6ZDt2YXIgaD1mP3UudHlwZTpjLnR5cGUsbT1mP2MudHlwZTp1LnR5cGU7aWYodT1mP2Mua2V5OnUua2V5LGllLiRpc1RleHROb2RlKG8pJiZsPT09cyYmKGM9by5nZXROZXh0U2libGluZygpLGllLiRpc1RleHROb2RlKGMpJiYobD1kPTAsbz1jKSksbi5sZW5ndGg9PT0xKWllLiRpc1RleHROb2RlKG8pJiYobD1oPT09ImVsZW1lbnQiPzA6ZD5hP2E6ZCxlPW09PT0iZWxlbWVudCI/czpkPmE/ZDphLGwhPT1lJiYobD09PTAmJmU9PT1zPyhGaShvLHQpLG8uc2VsZWN0KGwsZSkpOihuPW8uc3BsaXRUZXh0KGwsZSksbj1sPT09MD9uWzBdOm5bMV0sRmkobix0KSxuLnNlbGVjdCgwLGUtbCkpKSk7ZWxzZSBmb3IoaWUuJGlzVGV4dE5vZGUobykmJmw8by5nZXRUZXh0Q29udGVudFNpemUoKSYmKGwhPT0wJiYobz1vLnNwbGl0VGV4dChsKVsxXSksRmkobyx0KSksaWUuJGlzVGV4dE5vZGUoaSkmJihsPWkuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGgsaS5fX2tleSE9PXUmJmUhPT0wJiYoZT1sKSxlIT09bCYmKFtpXT1pLnNwbGl0VGV4dChlKSksZSE9PTAmJkZpKGksdCkpLGU9MTtlPHI7ZSsrKWw9bltlXSxzPWwuZ2V0S2V5KCksaWUuJGlzVGV4dE5vZGUobCkmJnMhPT1vLmdldEtleSgpJiZzIT09aS5nZXRLZXkoKSYmIWwuaXNUb2tlbigpJiZGaShsLHQpfX1mdW5jdGlvbiBnUihlKXtmb3IoO2UhPT1udWxsJiYhaWUuJGlzUm9vdE9yU2hhZG93Um9vdChlKTspe2xldCB0PWUuZ2V0TGF0ZXN0KCksbj1lLmdldFBhcmVudCgpO3QuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wJiZlLnJlbW92ZSghMCksZT1ufX1mdW5jdGlvbiBMZihlLHQsbixyLG89bnVsbCl7aWYodC5sZW5ndGghPT0wKXt2YXIgaT10WzBdLGw9bmV3IE1hcCxzPVtdO2k9aWUuJGlzRWxlbWVudE5vZGUoaSk/aTppLmdldFBhcmVudE9yVGhyb3coKSxpLmlzSW5saW5lKCkmJihpPWkuZ2V0UGFyZW50T3JUaHJvdygpKTtmb3IodmFyIGE9ITE7aSE9PW51bGw7KXt2YXIgdT1pLmdldFByZXZpb3VzU2libGluZygpO2lmKHUhPT1udWxsKXtpPXUsYT0hMDticmVha31pZihpPWkuZ2V0UGFyZW50T3JUaHJvdygpLGllLiRpc1Jvb3RPclNoYWRvd1Jvb3QoaSkpYnJlYWt9dT1uZXcgU2V0O2Zvcih2YXIgYz0wO2M8bjtjKyspe3ZhciBkPXRbY107aWUuJGlzRWxlbWVudE5vZGUoZCkmJmQuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wJiZ1LmFkZChkLmdldEtleSgpKX12YXIgZj1uZXcgU2V0O2ZvcihjPTA7YzxuO2MrKyl7ZD10W2NdO3ZhciBoPWQuZ2V0UGFyZW50KCk7aWYoaCE9PW51bGwmJmguaXNJbmxpbmUoKSYmKGg9aC5nZXRQYXJlbnQoKSksaCE9PW51bGwmJmllLiRpc0xlYWZOb2RlKGQpJiYhZi5oYXMoZC5nZXRLZXkoKSkpe2lmKGQ9aC5nZXRLZXkoKSxsLmdldChkKT09PXZvaWQgMCl7bGV0IG09cigpO20uc2V0Rm9ybWF0KGguZ2V0Rm9ybWF0VHlwZSgpKSxtLnNldEluZGVudChoLmdldEluZGVudCgpKSxzLnB1c2gobSksbC5zZXQoZCxtKSxoLmdldENoaWxkcmVuKCkuZm9yRWFjaChnPT57bS5hcHBlbmQoZyksZi5hZGQoZy5nZXRLZXkoKSksaWUuJGlzRWxlbWVudE5vZGUoZykmJmcuZ2V0Q2hpbGRyZW5LZXlzKCkuZm9yRWFjaChfPT5mLmFkZChfKSl9KSxnUihoKX19ZWxzZSB1LmhhcyhkLmdldEtleSgpKSYmKGg9cigpLGguc2V0Rm9ybWF0KGQuZ2V0Rm9ybWF0VHlwZSgpKSxoLnNldEluZGVudChkLmdldEluZGVudCgpKSxzLnB1c2goaCksZC5yZW1vdmUoITApKX1pZihvIT09bnVsbClmb3IodD0wO3Q8cy5sZW5ndGg7dCsrKW8uYXBwZW5kKHNbdF0pO2lmKHQ9bnVsbCxpZS4kaXNSb290T3JTaGFkb3dSb290KGkpKWlmKGEpaWYobyE9PW51bGwpaS5pbnNlcnRBZnRlcihvKTtlbHNlIGZvcihvPXMubGVuZ3RoLTE7MDw9bztvLS0paS5pbnNlcnRBZnRlcihzW29dKTtlbHNlIGlmKGE9aS5nZXRGaXJzdENoaWxkKCksaWUuJGlzRWxlbWVudE5vZGUoYSkmJihpPWEpLGE9PT1udWxsKWlmKG8paS5hcHBlbmQobyk7ZWxzZSBmb3Iobz0wO288cy5sZW5ndGg7bysrKWE9c1tvXSxpLmFwcGVuZChhKSx0PWE7ZWxzZSBpZihvIT09bnVsbClhLmluc2VydEJlZm9yZShvKTtlbHNlIGZvcihpPTA7aTxzLmxlbmd0aDtpKyspbz1zW2ldLGEuaW5zZXJ0QmVmb3JlKG8pLHQ9bztlbHNlIGlmKG8paS5pbnNlcnRBZnRlcihvKTtlbHNlIGZvcihvPXMubGVuZ3RoLTE7MDw9bztvLS0pYT1zW29dLGkuaW5zZXJ0QWZ0ZXIoYSksdD1hO3M9aWUuJGdldFByZXZpb3VzU2VsZWN0aW9uKCksaWUuJGlzUmFuZ2VTZWxlY3Rpb24ocykmJnMuYW5jaG9yLmdldE5vZGUoKS5pc0F0dGFjaGVkKCkmJnMuZm9jdXMuZ2V0Tm9kZSgpLmlzQXR0YWNoZWQoKT9pZS4kc2V0U2VsZWN0aW9uKHMuY2xvbmUoKSk6dCE9PW51bGw/dC5zZWxlY3RFbmQoKTplLmRpcnR5PSEwfX1mdW5jdGlvbiBrUyhlLHQsbixyKXtlLm1vZGlmeSh0PyJleHRlbmQiOiJtb3ZlIixuLHIpfWZ1bmN0aW9uIGJTKGUpe3JldHVybiBlPWUuYW5jaG9yLmdldE5vZGUoKSwoaWUuJGlzUm9vdE5vZGUoZSk/ZTplLmdldFBhcmVudE9yVGhyb3coKSkuZ2V0RGlyZWN0aW9uKCk9PT0icnRsIn1PdC4kYWRkTm9kZVN0eWxlPWZ1bmN0aW9uKGUpe2U9ZS5nZXRTdHlsZSgpO2xldCB0PUNTKGUpO1VjLnNldChlLHQpfTtPdC4kY2xvbmVXaXRoUHJvcGVydGllcz1mdW5jdGlvbihlKXtsZXQgdD1lLmNvbnN0cnVjdG9yLmNsb25lKGUpO3JldHVybiB0Ll9fcGFyZW50PWUuX19wYXJlbnQsdC5fX25leHQ9ZS5fX25leHQsdC5fX3ByZXY9ZS5fX3ByZXYsaWUuJGlzRWxlbWVudE5vZGUoZSkmJmllLiRpc0VsZW1lbnROb2RlKHQpPyh0Ll9fZmlyc3Q9ZS5fX2ZpcnN0LHQuX19sYXN0PWUuX19sYXN0LHQuX19zaXplPWUuX19zaXplLHQuX19mb3JtYXQ9ZS5fX2Zvcm1hdCx0Ll9faW5kZW50PWUuX19pbmRlbnQsdC5fX2Rpcj1lLl9fZGlyLHQpOihpZS4kaXNUZXh0Tm9kZShlKSYmaWUuJGlzVGV4dE5vZGUodCkmJih0Ll9fZm9ybWF0PWUuX19mb3JtYXQsdC5fX3N0eWxlPWUuX19zdHlsZSx0Ll9fbW9kZT1lLl9fbW9kZSx0Ll9fZGV0YWlsPWUuX19kZXRhaWwpLHQpfTtPdC4kZ2V0U2VsZWN0aW9uU3R5bGVWYWx1ZUZvclByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuPSIiKXtsZXQgcj1udWxsLG89ZS5nZXROb2RlcygpO3ZhciBpPWUuYW5jaG9yLGw9ZS5mb2N1cyxzPWUuaXNCYWNrd2FyZCgpO2xldCBhPXM/bC5vZmZzZXQ6aS5vZmZzZXQ7aWYoaT1zP2wuZ2V0Tm9kZSgpOmkuZ2V0Tm9kZSgpLGUuc3R5bGUhPT0iIiYmKGU9SGMoZS5zdHlsZSksZSE9PW51bGwmJnQgaW4gZSkpcmV0dXJuIGVbdF07Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyl7dmFyIHU9b1tlXTtpZigoZT09PTB8fGEhPT0wfHwhdS5pcyhpKSkmJmllLiRpc1RleHROb2RlKHUpKXtpZihsPXQscz1uLHU9dS5nZXRTdHlsZSgpLHU9SGModSksbD11IT09bnVsbCYmdVtsXXx8cyxyPT09bnVsbClyPWw7ZWxzZSBpZihyIT09bCl7cj0iIjticmVha319fXJldHVybiByPT09bnVsbD9uOnJ9O090LiRpc0F0Tm9kZUVuZD1mdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09InRleHQiP2Uub2Zmc2V0PT09ZS5nZXROb2RlKCkuZ2V0VGV4dENvbnRlbnRTaXplKCk6ZS5vZmZzZXQ9PT1lLmdldE5vZGUoKS5nZXRDaGlsZHJlblNpemUoKX07T3QuJGlzUGFyZW50RWxlbWVudFJUTD1iUztPdC4kbW92ZUNhcmV0U2VsZWN0aW9uPWtTO090LiRtb3ZlQ2hhcmFjdGVyPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1iUyhlKTtrUyhlLHQsbj8hcjpyLCJjaGFyYWN0ZXIiKX07T3QuJHBhdGNoU3R5bGVUZXh0PSRTO090LiRzZWxlY3RBbGw9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5hbmNob3I7ZT1lLmZvY3VzO3ZhciBuPXQuZ2V0Tm9kZSgpLmdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKS5nZXRQYXJlbnRPclRocm93KCk7bGV0IHI9bi5nZXRGaXJzdERlc2NlbmRhbnQoKTtuPW4uZ2V0TGFzdERlc2NlbmRhbnQoKTtsZXQgbz0iZWxlbWVudCIsaT0iZWxlbWVudCIsbD0wO2llLiRpc1RleHROb2RlKHIpP289InRleHQiOmllLiRpc0VsZW1lbnROb2RlKHIpfHxyPT09bnVsbHx8KHI9ci5nZXRQYXJlbnRPclRocm93KCkpLGllLiRpc1RleHROb2RlKG4pPyhpPSJ0ZXh0IixsPW4uZ2V0VGV4dENvbnRlbnRTaXplKCkpOmllLiRpc0VsZW1lbnROb2RlKG4pfHxuPT09bnVsbHx8KG49bi5nZXRQYXJlbnRPclRocm93KCkpLHImJm4mJih0LnNldChyLmdldEtleSgpLDAsbyksZS5zZXQobi5nZXRLZXkoKSxsLGkpKX07T3QuJHNldEJsb2Nrc1R5cGU9ZnVuY3Rpb24oZSx0KXtpZihlLmFuY2hvci5rZXk9PT0icm9vdCIpe3Q9dCgpO3ZhciBuPWllLiRnZXRSb290KCk7KGU9bi5nZXRGaXJzdENoaWxkKCkpP2UucmVwbGFjZSh0LCEwKTpuLmFwcGVuZCh0KX1lbHNlIGZvcihuPWUuZ2V0Tm9kZXMoKSxlPWUuYW5jaG9yLmdldE5vZGUoKS5nZXRQYXJlbnRPclRocm93KCksbi5pbmRleE9mKGUpPT09LTEmJm4ucHVzaChlKSxlLmlzSW5saW5lKCkmJihlPWUuZ2V0UGFyZW50T3JUaHJvdygpLG4uaW5kZXhPZihlKT09PS0xJiZuLnB1c2goZSkpLGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9bltlXTt2YXIgcj1pO2lmKCFpZS4kaXNFbGVtZW50Tm9kZShyKXx8aWUuJGlzUm9vdE9yU2hhZG93Um9vdChyKSlyPSExO2Vsc2V7dmFyIG89ci5nZXRGaXJzdENoaWxkKCk7bz1vPT09bnVsbHx8aWUuJGlzTGluZUJyZWFrTm9kZShvKXx8aWUuJGlzVGV4dE5vZGUobyl8fG8uaXNJbmxpbmUoKSxyPSFyLmlzSW5saW5lKCkmJnIuY2FuQmVFbXB0eSgpIT09ITEmJm99ciYmKHI9dCgpLHIuc2V0Rm9ybWF0KGkuZ2V0Rm9ybWF0VHlwZSgpKSxyLnNldEluZGVudChpLmdldEluZGVudCgpKSxpLnJlcGxhY2UociwhMCkpfX07T3QuJHNob3VsZE92ZXJyaWRlRGVmYXVsdENoYXJhY3RlclNlbGVjdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiBlPWllLiRnZXRBZGphY2VudE5vZGUoZS5mb2N1cyx0KSxpZS4kaXNEZWNvcmF0b3JOb2RlKGUpJiYhZS5pc0lzb2xhdGVkKCl8fGllLiRpc0VsZW1lbnROb2RlKGUpJiYhZS5pc0lubGluZSgpJiYhZS5jYW5CZUVtcHR5KCl9O090LiRzbGljZVNlbGVjdGVkVGV4dE5vZGVDb250ZW50PWZ1bmN0aW9uKGUsdCl7aWYodC5pc1NlbGVjdGVkKCkmJiF0LmlzU2VnbWVudGVkKCkmJiF0LmlzVG9rZW4oKSYmKGllLiRpc1JhbmdlU2VsZWN0aW9uKGUpfHxpZS5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb24oZSkpKXt2YXIgbj1lLmFuY2hvci5nZXROb2RlKCkscj1lLmZvY3VzLmdldE5vZGUoKSxvPXQuaXMobiksaT10LmlzKHIpO2lmKG98fGkpe289ZS5pc0JhY2t3YXJkKCk7bGV0W2wsc109ZS5nZXRDaGFyYWN0ZXJPZmZzZXRzKCk7ZT1uLmlzKHIpLGk9dC5pcyhvP3I6bikscj10LmlzKG8/bjpyKSxuPTA7bGV0IGE7ZT8obj1sPnM/czpsLGE9bD5zP2w6cyk6aT8obj1vP3M6bCxhPXZvaWQgMCk6ciYmKG89bz9sOnMsbj0wLGE9byksdC5fX3RleHQ9dC5fX3RleHQuc2xpY2UobixhKX19cmV0dXJuIHR9O090LiR3cmFwTm9kZXM9ZnVuY3Rpb24oZSx0LG49bnVsbCl7dmFyIHI9ZS5nZXROb2RlcygpO2xldCBvPXIubGVuZ3RoO3ZhciBpPWUuYW5jaG9yO2lmKG89PT0wfHxvPT09MSYmaS50eXBlPT09ImVsZW1lbnQiJiZpLmdldE5vZGUoKS5nZXRDaGlsZHJlblNpemUoKT09PTApe2U9aS50eXBlPT09InRleHQiP2kuZ2V0Tm9kZSgpLmdldFBhcmVudE9yVGhyb3coKTppLmdldE5vZGUoKSxyPWUuZ2V0Q2hpbGRyZW4oKTtsZXQgcz10KCk7cy5zZXRGb3JtYXQoZS5nZXRGb3JtYXRUeXBlKCkpLHMuc2V0SW5kZW50KGUuZ2V0SW5kZW50KCkpLHIuZm9yRWFjaChhPT5zLmFwcGVuZChhKSksbiYmKHM9bi5hcHBlbmQocykpLGUucmVwbGFjZShzKX1lbHNle2k9bnVsbDt2YXIgbD1bXTtmb3IobGV0IHM9MDtzPG87cysrKXtsZXQgYT1yW3NdO2llLiRpc1Jvb3RPclNoYWRvd1Jvb3QoYSk/KExmKGUsbCxsLmxlbmd0aCx0LG4pLGw9W10saT1hKTppPT09bnVsbHx8aSE9PW51bGwmJmllLiRoYXNBbmNlc3RvcihhLGkpP2wucHVzaChhKTooTGYoZSxsLGwubGVuZ3RoLHQsbiksbD1bYV0pfUxmKGUsbCxsLmxlbmd0aCx0LG4pfX07T3QuY3JlYXRlRE9NUmFuZ2U9ZnVuY3Rpb24oZSx0LG4scixvKXtsZXQgaT10LmdldEtleSgpLGw9ci5nZXRLZXkoKSxzPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksYT1lLmdldEVsZW1lbnRCeUtleShpKTtpZihlPWUuZ2V0RWxlbWVudEJ5S2V5KGwpLGllLiRpc1RleHROb2RlKHQpJiYoYT1aeShhKSksaWUuJGlzVGV4dE5vZGUocikmJihlPVp5KGUpKSx0PT09dm9pZCAwfHxyPT09dm9pZCAwfHxhPT09bnVsbHx8ZT09PW51bGwpcmV0dXJuIG51bGw7YS5ub2RlTmFtZT09PSJCUiImJihbYSxuXT1xeShhKSksZS5ub2RlTmFtZT09PSJCUiImJihbZSxvXT1xeShlKSksdD1hLmZpcnN0Q2hpbGQsYT09PWUmJnQhPW51bGwmJnQubm9kZU5hbWU9PT0iQlIiJiZuPT09MCYmbz09PTAmJihvPTEpO3RyeXtzLnNldFN0YXJ0KGEsbikscy5zZXRFbmQoZSxvKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4hcy5jb2xsYXBzZWR8fG49PT1vJiZpPT09bHx8KHMuc2V0U3RhcnQoZSxvKSxzLnNldEVuZChhLG4pKSxzfTtPdC5jcmVhdGVSZWN0c0Zyb21ET01SYW5nZT1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0Um9vdEVsZW1lbnQoKTtpZihuPT09bnVsbClyZXR1cm5bXTtlPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1nZXRDb21wdXRlZFN0eWxlKG4pLG49cGFyc2VGbG9hdChuLnBhZGRpbmdMZWZ0KStwYXJzZUZsb2F0KG4ucGFkZGluZ1JpZ2h0KSx0PUFycmF5LmZyb20odC5nZXRDbGllbnRSZWN0cygpKTtsZXQgcj10Lmxlbmd0aDt0LnNvcnQoKGksbCk9PntsZXQgcz1pLnRvcC1sLnRvcDtyZXR1cm4gMz49TWF0aC5hYnMocyk/aS5sZWZ0LWwubGVmdDpzfSk7bGV0IG87Zm9yKGxldCBpPTA7aTxyO2krKyl7bGV0IGw9dFtpXSxzPWwud2lkdGgrbj09PWUud2lkdGg7byYmby50b3A8PWwudG9wJiZvLnRvcCtvLmhlaWdodD5sLnRvcCYmby5sZWZ0K28ud2lkdGg+bC5sZWZ0fHxzPyh0LnNwbGljZShpLS0sMSksci0tKTpvPWx9cmV0dXJuIHR9O090LmdldFN0eWxlT2JqZWN0RnJvbUNTUz1IYztPdC50cmltVGV4dENvbnRlbnRGcm9tQW5jaG9yPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj10LmdldE5vZGUoKTtpZihpZS4kaXNFbGVtZW50Tm9kZShyKSl7dmFyIG89ci5nZXREZXNjZW5kYW50QnlJbmRleCh0Lm9mZnNldCk7byE9PW51bGwmJihyPW8pfWZvcig7MDxuJiZyIT09bnVsbDspe3ZhciBpPXIuZ2V0UHJldmlvdXNTaWJsaW5nKCksbD0wO2lmKGk9PT1udWxsKXtvPXIuZ2V0UGFyZW50T3JUaHJvdygpO2Zvcih2YXIgcz1vLmdldFByZXZpb3VzU2libGluZygpO3M9PT1udWxsOyl7aWYobz1vLmdldFBhcmVudCgpLG89PT1udWxsKXtpPW51bGw7YnJlYWt9cz1vLmdldFByZXZpb3VzU2libGluZygpfW8hPT1udWxsJiYobD1vLmlzSW5saW5lKCk/MDoyLGk9aWUuJGlzRWxlbWVudE5vZGUocyk/cy5nZXRMYXN0RGVzY2VuZGFudCgpOnMpfWlmKHM9ci5nZXRUZXh0Q29udGVudCgpLHM9PT0iIiYmaWUuJGlzRWxlbWVudE5vZGUocikmJiFyLmlzSW5saW5lKCkmJihzPWAKCmApLG89cy5sZW5ndGgsIWllLiRpc1RleHROb2RlKHIpfHxuPj1vKXM9ci5nZXRQYXJlbnQoKSxyLnJlbW92ZSgpLHM9PW51bGx8fHMuZ2V0Q2hpbGRyZW5TaXplKCkhPT0wfHxpZS4kaXNSb290Tm9kZShzKXx8cy5yZW1vdmUoKSxuLT1vK2wscj1pO2Vsc2V7bGV0IGE9ci5nZXRLZXkoKTtsPWUuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpPT57Y29uc3QgYz1pZS4kZ2V0Tm9kZUJ5S2V5KGEpO3JldHVybiBpZS4kaXNUZXh0Tm9kZShjKSYmYy5pc1NpbXBsZVRleHQoKT9jLmdldFRleHRDb250ZW50KCk6bnVsbH0pLGk9by1uO2xldCB1PXMuc2xpY2UoMCxpKTtsIT09bnVsbCYmbCE9PXM/KG49aWUuJGdldFByZXZpb3VzU2VsZWN0aW9uKCksbz1yLHIuaXNTaW1wbGVUZXh0KCk/ci5zZXRUZXh0Q29udGVudChsKToobz1pZS4kY3JlYXRlVGV4dE5vZGUobCksci5yZXBsYWNlKG8pKSxpZS4kaXNSYW5nZVNlbGVjdGlvbihuKSYmbi5pc0NvbGxhcHNlZCgpJiYobj1uLmFuY2hvci5vZmZzZXQsby5zZWxlY3QobixuKSkpOnIuaXNTaW1wbGVUZXh0KCk/KGw9dC5rZXk9PT1hLHM9dC5vZmZzZXQsczxuJiYocz1vKSxuPWw/cy1uOjAsbz1sP3M6aSxsJiZuPT09MD8oW25dPXIuc3BsaXRUZXh0KG4sbyksbi5yZW1vdmUoKSk6KFssbl09ci5zcGxpdFRleHQobixvKSxuLnJlbW92ZSgpKSk6KG49aWUuJGNyZWF0ZVRleHROb2RlKHUpLHIucmVwbGFjZShuKSksbj0wfX19O2NvbnN0IG1SPU90O3ZhciB6bz1tUix2Uj16byxodD1oZTtmdW5jdGlvbiB5UihlKXtsZXQgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO3QuYXBwZW5kKCJjb2RlIixlKTtmb3IobGV0IG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXQuYXBwZW5kKCJ2Iixhcmd1bWVudHNbbl0pO3Rocm93IEVycm9yKGBNaW5pZmllZCBMZXhpY2FsIGVycm9yICMke2V9OyB2aXNpdCBodHRwczovL2xleGljYWwuZGV2L2RvY3MvZXJyb3I/JHt0fSBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuYCl9ZnVuY3Rpb24gVFMoZSx0KXtmb3IobGV0IG4gb2YgdClpZihlLnR5cGUuc3RhcnRzV2l0aChuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBOUyhlLHQpe2Zvcig7ZSE9PWh0LiRnZXRSb290KCkmJmUhPW51bGw7KXtpZih0KGUpKXJldHVybiBlO2U9ZS5nZXRQYXJlbnQoKX1yZXR1cm4gbnVsbH12dC4kc3BsaXROb2RlPWh0LiRzcGxpdE5vZGU7dnQuaXNIVE1MQW5jaG9yRWxlbWVudD1odC5pc0hUTUxBbmNob3JFbGVtZW50O3Z0LmlzSFRNTEVsZW1lbnQ9aHQuaXNIVE1MRWxlbWVudDt2dC4kZGZzPWZ1bmN0aW9uKGUsdCl7bGV0IG49W107ZT0oZXx8aHQuJGdldFJvb3QoKSkuZ2V0TGF0ZXN0KCksdD10fHwoaHQuJGlzRWxlbWVudE5vZGUoZSk/ZS5nZXRMYXN0RGVzY2VuZGFudCgpOmUpO2Zvcih2YXIgcj1lLG89MDsocj1yLmdldFBhcmVudCgpKSE9PW51bGw7KW8rKztmb3Iocj1vO2UhPT1udWxsJiYhZS5pcyh0KTspaWYobi5wdXNoKHtkZXB0aDpyLG5vZGU6ZX0pLGh0LiRpc0VsZW1lbnROb2RlKGUpJiYwPGUuZ2V0Q2hpbGRyZW5TaXplKCkpZT1lLmdldEZpcnN0Q2hpbGQoKSxyKys7ZWxzZSBmb3Iobz1udWxsO289PT1udWxsJiZlIT09bnVsbDspbz1lLmdldE5leHRTaWJsaW5nKCksbz09PW51bGw/KGU9ZS5nZXRQYXJlbnQoKSxyLS0pOmU9bztyZXR1cm4gZSE9PW51bGwmJmUuaXModCkmJm4ucHVzaCh7ZGVwdGg6cixub2RlOmV9KSxufTt2dC4kZmlsdGVyPWZ1bmN0aW9uKGUsdCl7bGV0IG49W107Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldCBvPXQoZVtyXSk7byE9PW51bGwmJm4ucHVzaChvKX1yZXR1cm4gbn07dnQuJGZpbmRNYXRjaGluZ1BhcmVudD1OUzt2dC4kZ2V0TmVhcmVzdEJsb2NrRWxlbWVudEFuY2VzdG9yT3JUaHJvdz1mdW5jdGlvbihlKXtsZXQgdD1OUyhlLG49Pmh0LiRpc0VsZW1lbnROb2RlKG4pJiYhbi5pc0lubGluZSgpKTtyZXR1cm4gaHQuJGlzRWxlbWVudE5vZGUodCl8fHlSKDQsZS5fX2tleSksdH07dnQuJGdldE5lYXJlc3ROb2RlT2ZUeXBlPWZ1bmN0aW9uKGUsdCl7Zm9yKDtlIT1udWxsOyl7aWYoZSBpbnN0YW5jZW9mIHQpcmV0dXJuIGU7ZT1lLmdldFBhcmVudCgpfXJldHVybiBudWxsfTt2dC4kaW5zZXJ0Rmlyc3Q9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmdldEZpcnN0Q2hpbGQoKTtuIT09bnVsbD9uLmluc2VydEJlZm9yZSh0KTplLmFwcGVuZCh0KX07dnQuJGluc2VydE5vZGVUb05lYXJlc3RSb290PWZ1bmN0aW9uKGUpe3ZhciB0PWh0LiRnZXRTZWxlY3Rpb24oKXx8aHQuJGdldFByZXZpb3VzU2VsZWN0aW9uKCk7aWYoaHQuJGlzUmFuZ2VTZWxlY3Rpb24odCkpe3Zhcntmb2N1czpufT10O2lmKHQ9bi5nZXROb2RlKCksbj1uLm9mZnNldCxodC4kaXNSb290T3JTaGFkb3dSb290KHQpKW49dC5nZXRDaGlsZEF0SW5kZXgobiksbj09bnVsbD90LmFwcGVuZChlKTpuLmluc2VydEJlZm9yZShlKSxlLnNlbGVjdE5leHQoKTtlbHNle2xldCByLG87aHQuJGlzVGV4dE5vZGUodCk/KHI9dC5nZXRQYXJlbnRPclRocm93KCksbz10LmdldEluZGV4V2l0aGluUGFyZW50KCksMDxuJiYobys9MSx0LnNwbGl0VGV4dChuKSkpOihyPXQsbz1uKSxbLHRdPWh0LiRzcGxpdE5vZGUocixvKSx0Lmluc2VydEJlZm9yZShlKSx0LnNlbGVjdFN0YXJ0KCl9fWVsc2UgaHQuJGlzTm9kZVNlbGVjdGlvbih0KXx8aHQuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKHQpPyh0PXQuZ2V0Tm9kZXMoKSx0W3QubGVuZ3RoLTFdLmdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKS5pbnNlcnRBZnRlcihlKSk6aHQuJGdldFJvb3QoKS5hcHBlbmQoZSksdD1odC4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpLGUuaW5zZXJ0QWZ0ZXIodCksdC5zZWxlY3QoKTtyZXR1cm4gZS5nZXRMYXRlc3QoKX07dnQuJHJlc3RvcmVFZGl0b3JTdGF0ZT1mdW5jdGlvbihlLHQpe2xldCBuPW5ldyBNYXAscj1lLl9wZW5kaW5nRWRpdG9yU3RhdGU7Zm9yKGxldFtvLGldb2YgdC5fbm9kZU1hcCl7bGV0IGw9dlIuJGNsb25lV2l0aFByb3BlcnRpZXMoaSk7aHQuJGlzVGV4dE5vZGUobCkmJihsLl9fdGV4dD1pLl9fdGV4dCksbi5zZXQobyxsKX1yJiYoci5fbm9kZU1hcD1uKSxlLl9kaXJ0eVR5cGU9MixlPXQuX3NlbGVjdGlvbixodC4kc2V0U2VsZWN0aW9uKGU9PT1udWxsP251bGw6ZS5jbG9uZSgpKX07dnQuJHdyYXBOb2RlSW5FbGVtZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dCgpLGUucmVwbGFjZSh0KSx0LmFwcGVuZChlKSx0fTt2dC5hZGRDbGFzc05hbWVzVG9FbGVtZW50PWZ1bmN0aW9uKGUsLi4udCl7dC5mb3JFYWNoKG49Pnt0eXBlb2Ygbj09InN0cmluZyImJihuPW4uc3BsaXQoIiAiKS5maWx0ZXIocj0+ciE9PSIiKSxlLmNsYXNzTGlzdC5hZGQoLi4ubikpfSl9O3Z0LmlzTWltZVR5cGU9VFM7dnQubWVkaWFGaWxlUmVhZGVyPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZVtTeW1ib2wuaXRlcmF0b3JdKCk7cmV0dXJuIG5ldyBQcm9taXNlKChyLG8pPT57bGV0IGk9W10sbD0oKT0+e2NvbnN0e2RvbmU6cyx2YWx1ZTphfT1uLm5leHQoKTtpZihzKXJldHVybiByKGkpO2NvbnN0IHU9bmV3IEZpbGVSZWFkZXI7dS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsbyksdS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoKT0+e2NvbnN0IGM9dS5yZXN1bHQ7dHlwZW9mIGM9PSJzdHJpbmciJiZpLnB1c2goe2ZpbGU6YSxyZXN1bHQ6Y30pLGwoKX0pLFRTKGEsdCk/dS5yZWFkQXNEYXRhVVJMKGEpOmwoKX07bCgpfSl9O3Z0Lm1lcmdlUmVnaXN0ZXI9ZnVuY3Rpb24oLi4uZSl7cmV0dXJuKCk9PntlLmZvckVhY2godD0+dCgpKX19O3Z0Lm9iamVjdEtsYXNzRXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUhPT1udWxsP09iamVjdC5nZXRQcm90b3R5cGVPZihlKS5jb25zdHJ1Y3Rvci5uYW1lPT09dC5uYW1lOiExfTt2dC5yZWdpc3Rlck5lc3RlZEVsZW1lbnRSZXNvbHZlcj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5yZWdpc3Rlck5vZGVUcmFuc2Zvcm0odCxvPT57ZTp7Zm9yKHZhciBpPW8uZ2V0Q2hpbGRyZW4oKSxsPTA7bDxpLmxlbmd0aDtsKyspaWYoaVtsXWluc3RhbmNlb2YgdCl7aT1udWxsO2JyZWFrIGV9Zm9yKGk9bztpIT09bnVsbDspaWYobD1pLGk9aS5nZXRQYXJlbnQoKSxpIGluc3RhbmNlb2YgdCl7aT17Y2hpbGQ6bCxwYXJlbnQ6aX07YnJlYWsgZX1pPW51bGx9aWYoaSE9PW51bGwpe2NvbnN0e2NoaWxkOnMscGFyZW50OmF9PWk7aWYocy5pcyhvKSl7aWYocihhLG8pLG89cy5nZXROZXh0U2libGluZ3MoKSxpPW8ubGVuZ3RoLGEuaW5zZXJ0QWZ0ZXIocyksaSE9PTApe2w9bihhKSxzLmluc2VydEFmdGVyKGwpO2ZvcihsZXQgdT0wO3U8aTt1KyspbC5hcHBlbmQob1t1XSl9YS5jYW5CZUVtcHR5KCl8fGEuZ2V0Q2hpbGRyZW5TaXplKCkhPT0wfHxhLnJlbW92ZSgpfX19KX07dnQucmVtb3ZlQ2xhc3NOYW1lc0Zyb21FbGVtZW50PWZ1bmN0aW9uKGUsLi4udCl7dC5mb3JFYWNoKG49Pnt0eXBlb2Ygbj09InN0cmluZyImJmUuY2xhc3NMaXN0LnJlbW92ZSguLi5uLnNwbGl0KCIgIikpfSl9O2NvbnN0IHhSPXZ0O3ZhciBSdD14UixQZT1oZSxGbz1SdDtmdW5jdGlvbiBBbChlKXtsZXQgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO3QuYXBwZW5kKCJjb2RlIixlKTtmb3IobGV0IG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXQuYXBwZW5kKCJ2Iixhcmd1bWVudHNbbl0pO3Rocm93IEVycm9yKGBNaW5pZmllZCBMZXhpY2FsIGVycm9yICMke2V9OyB2aXNpdCBodHRwczovL2xleGljYWwuZGV2L2RvY3MvZXJyb3I/JHt0fSBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuYCl9ZnVuY3Rpb24gUlMoZSl7bGV0IHQ9MTtmb3IoZT1lLmdldFBhcmVudCgpO2UhPW51bGw7KXtpZihudChlKSl7aWYoZT1lLmdldFBhcmVudCgpLHdlKGUpKXt0KyssZT1lLmdldFBhcmVudCgpO2NvbnRpbnVlfUFsKDQwKX1icmVha31yZXR1cm4gdH1mdW5jdGlvbiBTcChlKXtlPWUuZ2V0UGFyZW50KCksd2UoZSl8fEFsKDQwKTtsZXQgdD1lO2Zvcig7dCE9PW51bGw7KXQ9dC5nZXRQYXJlbnQoKSx3ZSh0KSYmKGU9dCk7cmV0dXJuIGV9ZnVuY3Rpb24gUFMoZSl7bGV0IHQ9W107ZT1lLmdldENoaWxkcmVuKCkuZmlsdGVyKG50KTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXSxvPXIuZ2V0Rmlyc3RDaGlsZCgpO3dlKG8pP3Q9dC5jb25jYXQoUFMobykpOnQucHVzaChyKX1yZXR1cm4gdH1mdW5jdGlvbiBtcihlKXtyZXR1cm4gbnQoZSkmJndlKGUuZ2V0Rmlyc3RDaGlsZCgpKX1mdW5jdGlvbiB3UihlKXtmb3IoO2UuZ2V0TmV4dFNpYmxpbmcoKT09bnVsbCYmZS5nZXRQcmV2aW91c1NpYmxpbmcoKT09bnVsbDspe2xldCB0PWUuZ2V0UGFyZW50KCk7aWYodD09bnVsbHx8IW50KGUpJiYhd2UoZSkpYnJlYWs7ZT10fWUucmVtb3ZlKCl9ZnVuY3Rpb24gZTAoZSl7cmV0dXJuIGtuKCkuYXBwZW5kKGUpfWZ1bmN0aW9uIE9TKGUsdCl7cmV0dXJuIG50KGUpJiYodC5sZW5ndGg9PT0wfHx0Lmxlbmd0aD09PTEmJmUuaXModFswXSkmJmUuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wKX1mdW5jdGlvbiBfaShlLHQpe2Uuc3BsaWNlKGUuZ2V0Q2hpbGRyZW5TaXplKCksMCx0KX1mdW5jdGlvbiB0MChlLHQpe2lmKHdlKGUpKXJldHVybiBlO2xldCBuPWUuZ2V0UHJldmlvdXNTaWJsaW5nKCkscj1lLmdldE5leHRTaWJsaW5nKCksbz1rbigpO3JldHVybiBvLnNldEZvcm1hdChlLmdldEZvcm1hdFR5cGUoKSksby5zZXRJbmRlbnQoZS5nZXRJbmRlbnQoKSksX2kobyxlLmdldENoaWxkcmVuKCkpLHdlKG4pJiZ0PT09bi5nZXRMaXN0VHlwZSgpPyhuLmFwcGVuZChvKSxlLnJlbW92ZSgpLHdlKHIpJiZ0PT09ci5nZXRMaXN0VHlwZSgpJiYoX2kobixyLmdldENoaWxkcmVuKCkpLHIucmVtb3ZlKCkpLG4pOndlKHIpJiZ0PT09ci5nZXRMaXN0VHlwZSgpPyhyLmdldEZpcnN0Q2hpbGRPclRocm93KCkuaW5zZXJ0QmVmb3JlKG8pLGUucmVtb3ZlKCkscik6KHQ9b24odCksdC5hcHBlbmQobyksZS5yZXBsYWNlKHQpLFp0KHQpLHQpfWZ1bmN0aW9uIEFTKGUsdCl7dmFyIG49ZS5nZXRMYXN0Q2hpbGQoKTtsZXQgcj10LmdldEZpcnN0Q2hpbGQoKTtuJiZyJiZtcihuKSYmbXIocikmJihBUyhuLmdldEZpcnN0Q2hpbGQoKSxyLmdldEZpcnN0Q2hpbGQoKSksci5yZW1vdmUoKSksbj10LmdldENoaWxkcmVuKCksMDxuLmxlbmd0aCYmKGUuYXBwZW5kKC4uLm4pLFp0KGUpKSx0LnJlbW92ZSgpfWZ1bmN0aW9uIFp0KGUsdCl7aWYoZT10fHxlLmdldENoaWxkcmVuKCksZSE9PXZvaWQgMClmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgaT1lW3RdO2lmKG50KGkpKXtsZXQgbD1pLmdldFZhbHVlKCk7dmFyIG49aSxyPW4uZ2V0UGFyZW50KCksbz0xO2ZvcihyIT1udWxsJiYod2Uocik/bz1yLmdldFN0YXJ0KCk6QWwoNDQpKSxuPW4uZ2V0UHJldmlvdXNTaWJsaW5ncygpLHI9MDtyPG4ubGVuZ3RoO3IrKyl7bGV0IHM9bltyXTtudChzKSYmIXdlKHMuZ2V0Rmlyc3RDaGlsZCgpKSYmbysrfWwhPT1vJiZpLnNldFZhbHVlKG8pfX19ZnVuY3Rpb24gX1IoZSl7aWYoIW1yKGUpKXt2YXIgdD1lLmdldFBhcmVudCgpLG49dD90LmdldFBhcmVudCgpOnZvaWQgMCxyPW4/bi5nZXRQYXJlbnQoKTp2b2lkIDA7aWYod2UocikmJm50KG4pJiZ3ZSh0KSl7dmFyIG89dD90LmdldEZpcnN0Q2hpbGQoKTp2b2lkIDAsaT10P3QuZ2V0TGFzdENoaWxkKCk6dm9pZCAwO2lmKGUuaXMobykpbi5pbnNlcnRCZWZvcmUoZSksdC5pc0VtcHR5KCkmJm4ucmVtb3ZlKCk7ZWxzZSBpZihlLmlzKGkpKW4uaW5zZXJ0QWZ0ZXIoZSksdC5pc0VtcHR5KCkmJm4ucmVtb3ZlKCk7ZWxzZXt2YXIgbD10LmdldExpc3RUeXBlKCk7bz1rbigpO2xldCBzPW9uKGwpO28uYXBwZW5kKHMpLGUuZ2V0UHJldmlvdXNTaWJsaW5ncygpLmZvckVhY2goYT0+cy5hcHBlbmQoYSkpLGk9a24oKSxsPW9uKGwpLGkuYXBwZW5kKGwpLF9pKGwsZS5nZXROZXh0U2libGluZ3MoKSksbi5pbnNlcnRCZWZvcmUobyksbi5pbnNlcnRBZnRlcihpKSxuLnJlcGxhY2UoZSl9WnQodCksWnQocil9fX1sZXQgUGQ9Y2xhc3MgTVMgZXh0ZW5kcyBQZS5FbGVtZW50Tm9kZXtzdGF0aWMgZ2V0VHlwZSgpe3JldHVybiJsaXN0aXRlbSJ9c3RhdGljIGNsb25lKHQpe3JldHVybiBuZXcgTVModC5fX3ZhbHVlLHQuX19jaGVja2VkLHQuX19rZXkpfWNvbnN0cnVjdG9yKHQsbixyKXtzdXBlcihyKSx0aGlzLl9fdmFsdWU9dD09PXZvaWQgMD8xOnQsdGhpcy5fX2NoZWNrZWQ9bn1jcmVhdGVET00odCl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKSxyPXRoaXMuZ2V0UGFyZW50KCk7cmV0dXJuIHdlKHIpJiZyLmdldExpc3RUeXBlKCk9PT0iY2hlY2siJiZyMChuLHRoaXMsbnVsbCksbi52YWx1ZT10aGlzLl9fdmFsdWUsbjAobix0LnRoZW1lLHRoaXMpLG59dXBkYXRlRE9NKHQsbixyKXtsZXQgbz10aGlzLmdldFBhcmVudCgpO3JldHVybiB3ZShvKSYmby5nZXRMaXN0VHlwZSgpPT09ImNoZWNrIiYmcjAobix0aGlzLHQpLG4udmFsdWU9dGhpcy5fX3ZhbHVlLG4wKG4sci50aGVtZSx0aGlzKSwhMX1zdGF0aWMgdHJhbnNmb3JtKCl7cmV0dXJuIHQ9PntsZXQgbj10LmdldFBhcmVudCgpO3dlKG4pJiYoWnQobiksbi5nZXRMaXN0VHlwZSgpIT09ImNoZWNrIiYmdC5nZXRDaGVja2VkKCkhPW51bGwmJnQuc2V0Q2hlY2tlZCh2b2lkIDApKX19c3RhdGljIGltcG9ydERPTSgpe3JldHVybntsaTooKT0+KHtjb252ZXJzaW9uOlNSLHByaW9yaXR5OjB9KX19c3RhdGljIGltcG9ydEpTT04odCl7bGV0IG49a24oKTtyZXR1cm4gbi5zZXRDaGVja2VkKHQuY2hlY2tlZCksbi5zZXRWYWx1ZSh0LnZhbHVlKSxuLnNldEZvcm1hdCh0LmZvcm1hdCksbi5zZXREaXJlY3Rpb24odC5kaXJlY3Rpb24pLG59ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksY2hlY2tlZDp0aGlzLmdldENoZWNrZWQoKSx0eXBlOiJsaXN0aXRlbSIsdmFsdWU6dGhpcy5nZXRWYWx1ZSgpLHZlcnNpb246MX19YXBwZW5kKC4uLnQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgcj10W25dO2lmKFBlLiRpc0VsZW1lbnROb2RlKHIpJiZ0aGlzLmNhbk1lcmdlV2l0aChyKSl7bGV0IG89ci5nZXRDaGlsZHJlbigpO3RoaXMuYXBwZW5kKC4uLm8pLHIucmVtb3ZlKCl9ZWxzZSBzdXBlci5hcHBlbmQocil9cmV0dXJuIHRoaXN9cmVwbGFjZSh0LG4pe2lmKG50KHQpKXJldHVybiBzdXBlci5yZXBsYWNlKHQpO3RoaXMuc2V0SW5kZW50KDApO2xldCByPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpO2lmKCF3ZShyKSlyZXR1cm4gdDtpZihyLl9fZmlyc3Q9PT10aGlzLmdldEtleSgpKXIuaW5zZXJ0QmVmb3JlKHQpO2Vsc2UgaWYoci5fX2xhc3Q9PT10aGlzLmdldEtleSgpKXIuaW5zZXJ0QWZ0ZXIodCk7ZWxzZXtsZXQgbz1vbihyLmdldExpc3RUeXBlKCkpLGk9dGhpcy5nZXROZXh0U2libGluZygpO2Zvcig7aTspe2xldCBsPWk7aT1pLmdldE5leHRTaWJsaW5nKCksby5hcHBlbmQobCl9ci5pbnNlcnRBZnRlcih0KSx0Lmluc2VydEFmdGVyKG8pfXJldHVybiBuJiZ0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaChvPT57dC5hcHBlbmQobyl9KSx0aGlzLnJlbW92ZSgpLHIuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wJiZyLnJlbW92ZSgpLHR9aW5zZXJ0QWZ0ZXIodCxuPSEwKXt2YXIgcj10aGlzLmdldFBhcmVudE9yVGhyb3coKTt3ZShyKXx8QWwoMzkpO3ZhciBvPXRoaXMuZ2V0TmV4dFNpYmxpbmdzKCk7aWYobnQodCkpcmV0dXJuIG49c3VwZXIuaW5zZXJ0QWZ0ZXIodCxuKSx0PXQuZ2V0UGFyZW50T3JUaHJvdygpLHdlKHQpJiZadCh0KSxuO2lmKHdlKHQpKXtmb3Iocj10LHQ9dC5nZXRDaGlsZHJlbigpLG89dC5sZW5ndGgtMTswPD1vO28tLSlyPXRbb10sdGhpcy5pbnNlcnRBZnRlcihyLG4pO3JldHVybiByfWlmKHIuaW5zZXJ0QWZ0ZXIodCxuKSxvLmxlbmd0aCE9PTApe2xldCBpPW9uKHIuZ2V0TGlzdFR5cGUoKSk7by5mb3JFYWNoKGw9PmkuYXBwZW5kKGwpKSx0Lmluc2VydEFmdGVyKGksbil9cmV0dXJuIHR9cmVtb3ZlKHQpe2xldCBuPXRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCkscj10aGlzLmdldE5leHRTaWJsaW5nKCk7c3VwZXIucmVtb3ZlKHQpLG4mJnImJm1yKG4pJiZtcihyKT8oQVMobi5nZXRGaXJzdENoaWxkKCksci5nZXRGaXJzdENoaWxkKCkpLHIucmVtb3ZlKCkpOnImJih0PXIuZ2V0UGFyZW50KCksd2UodCkmJlp0KHQpKX1pbnNlcnROZXdBZnRlcih0LG49ITApe3JldHVybiB0PWtuKHRoaXMuX19jaGVja2VkPT1udWxsP3ZvaWQgMDohMSksdGhpcy5pbnNlcnRBZnRlcih0LG4pLHR9Y29sbGFwc2VBdFN0YXJ0KHQpe2xldCBuPVBlLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk7dGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2gobD0+bi5hcHBlbmQobCkpO3ZhciByPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpLG89ci5nZXRQYXJlbnRPclRocm93KCk7bGV0IGk9bnQobyk7cmV0dXJuIHIuZ2V0Q2hpbGRyZW5TaXplKCk9PT0xP2k/KHIucmVtb3ZlKCksby5zZWxlY3QoKSk6KHIuaW5zZXJ0QmVmb3JlKG4pLHIucmVtb3ZlKCkscj10LmFuY2hvcix0PXQuZm9jdXMsbz1uLmdldEtleSgpLHIudHlwZT09PSJlbGVtZW50IiYmci5nZXROb2RlKCkuaXModGhpcykmJnIuc2V0KG8sci5vZmZzZXQsImVsZW1lbnQiKSx0LnR5cGU9PT0iZWxlbWVudCImJnQuZ2V0Tm9kZSgpLmlzKHRoaXMpJiZ0LnNldChvLHQub2Zmc2V0LCJlbGVtZW50IikpOihyLmluc2VydEJlZm9yZShuKSx0aGlzLnJlbW92ZSgpKSwhMH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fdmFsdWV9c2V0VmFsdWUodCl7dGhpcy5nZXRXcml0YWJsZSgpLl9fdmFsdWU9dH1nZXRDaGVja2VkKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19jaGVja2VkfXNldENoZWNrZWQodCl7dGhpcy5nZXRXcml0YWJsZSgpLl9fY2hlY2tlZD10fXRvZ2dsZUNoZWNrZWQoKXt0aGlzLnNldENoZWNrZWQoIXRoaXMuX19jaGVja2VkKX1nZXRJbmRlbnQoKXt2YXIgdD10aGlzLmdldFBhcmVudCgpO2lmKHQ9PT1udWxsKXJldHVybiB0aGlzLmdldExhdGVzdCgpLl9faW5kZW50O3Q9dC5nZXRQYXJlbnRPclRocm93KCk7bGV0IG49MDtmb3IoO250KHQpOyl0PXQuZ2V0UGFyZW50T3JUaHJvdygpLmdldFBhcmVudE9yVGhyb3coKSxuKys7cmV0dXJuIG59c2V0SW5kZW50KHQpe3R5cGVvZiB0PT0ibnVtYmVyIiYmLTE8dHx8QWwoMTE3KTtsZXQgbj10aGlzLmdldEluZGVudCgpO2Zvcig7biE9PXQ7KWlmKG48dCl7ZTp7dmFyIHI9bmV3IFNldDtpZihtcih0aGlzKXx8ci5oYXModGhpcy5nZXRLZXkoKSkpYnJlYWsgZTtsZXQgcz10aGlzLmdldFBhcmVudCgpO3ZhciBvPXRoaXMuZ2V0TmV4dFNpYmxpbmcoKSxpPXRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCk7aWYobXIobykmJm1yKGkpKXtpZihpPWkuZ2V0Rmlyc3RDaGlsZCgpLHdlKGkpKXtpLmFwcGVuZCh0aGlzKTt2YXIgbD1vLmdldEZpcnN0Q2hpbGQoKTt3ZShsKSYmKGw9bC5nZXRDaGlsZHJlbigpLF9pKGksbCksby5yZW1vdmUoKSxyLmFkZChvLmdldEtleSgpKSksWnQoaSl9fWVsc2UgbXIobyk/KG89by5nZXRGaXJzdENoaWxkKCksd2UobykmJihyPW8uZ2V0Rmlyc3RDaGlsZCgpLHIhPT1udWxsJiZyLmluc2VydEJlZm9yZSh0aGlzKSxadChvKSkpOm1yKGkpPyhvPWkuZ2V0Rmlyc3RDaGlsZCgpLHdlKG8pJiYoby5hcHBlbmQodGhpcyksWnQobykpKTp3ZShzKSYmKHI9a24oKSxsPW9uKHMuZ2V0TGlzdFR5cGUoKSksci5hcHBlbmQobCksbC5hcHBlbmQodGhpcyksaT9pLmluc2VydEFmdGVyKHIpOm8/by5pbnNlcnRCZWZvcmUocik6cy5hcHBlbmQociksWnQobCkpO3dlKHMpJiZadChzKX1uKyt9ZWxzZSBfUih0aGlzKSxuLS07cmV0dXJuIHRoaXN9aW5zZXJ0QmVmb3JlKHQpe2lmKG50KHQpKXtsZXQgbj10aGlzLmdldFBhcmVudE9yVGhyb3coKTtpZih3ZShuKSl7bGV0IHI9dGhpcy5nZXROZXh0U2libGluZ3MoKTtadChuLHIpfX1yZXR1cm4gc3VwZXIuaW5zZXJ0QmVmb3JlKHQpfWNhbkluc2VydEFmdGVyKHQpe3JldHVybiBudCh0KX1jYW5SZXBsYWNlV2l0aCh0KXtyZXR1cm4gbnQodCl9Y2FuTWVyZ2VXaXRoKHQpe3JldHVybiBQZS4kaXNQYXJhZ3JhcGhOb2RlKHQpfHxudCh0KX1leHRyYWN0V2l0aENoaWxkKHQsbil7aWYoIVBlLiRpc1JhbmdlU2VsZWN0aW9uKG4pKXJldHVybiExO3Q9bi5hbmNob3IuZ2V0Tm9kZSgpO2xldCByPW4uZm9jdXMuZ2V0Tm9kZSgpO3JldHVybiB0aGlzLmlzUGFyZW50T2YodCkmJnRoaXMuaXNQYXJlbnRPZihyKSYmdGhpcy5nZXRUZXh0Q29udGVudCgpLmxlbmd0aD09PW4uZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGh9aXNQYXJlbnRSZXF1aXJlZCgpe3JldHVybiEwfWNyZWF0ZVBhcmVudEVsZW1lbnROb2RlKCl7cmV0dXJuIG9uKCJidWxsZXQiKX19O2Z1bmN0aW9uIG4wKGUsdCxuKXtsZXQgcj1bXSxvPVtdO3ZhciBpPSh0PXQubGlzdCk/dC5saXN0aXRlbTp2b2lkIDA7aWYodCYmdC5uZXN0ZWQpdmFyIGw9dC5uZXN0ZWQubGlzdGl0ZW07aWYoaSE9PXZvaWQgMCYmKGk9aS5zcGxpdCgiICIpLHIucHVzaCguLi5pKSksdCl7aT1uLmdldFBhcmVudCgpLGk9d2UoaSkmJmkuZ2V0TGlzdFR5cGUoKT09PSJjaGVjayI7bGV0IHM9bi5nZXRDaGVja2VkKCk7aSYmIXN8fG8ucHVzaCh0Lmxpc3RpdGVtVW5jaGVja2VkKSxpJiZzfHxvLnB1c2godC5saXN0aXRlbUNoZWNrZWQpLGkmJnIucHVzaChzP3QubGlzdGl0ZW1DaGVja2VkOnQubGlzdGl0ZW1VbmNoZWNrZWQpfWwhPT12b2lkIDAmJihsPWwuc3BsaXQoIiAiKSxuLmdldENoaWxkcmVuKCkuc29tZShzPT53ZShzKSk/ci5wdXNoKC4uLmwpOm8ucHVzaCguLi5sKSksMDxvLmxlbmd0aCYmRm8ucmVtb3ZlQ2xhc3NOYW1lc0Zyb21FbGVtZW50KGUsLi4ubyksMDxyLmxlbmd0aCYmRm8uYWRkQ2xhc3NOYW1lc1RvRWxlbWVudChlLC4uLnIpfWZ1bmN0aW9uIHIwKGUsdCxuKXt3ZSh0LmdldEZpcnN0Q2hpbGQoKSk/KGUucmVtb3ZlQXR0cmlidXRlKCJyb2xlIiksZS5yZW1vdmVBdHRyaWJ1dGUoInRhYkluZGV4IiksZS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIpKTooZS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJjaGVja2JveCIpLGUuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIi0xIiksbiYmdC5fX2NoZWNrZWQ9PT1uLl9fY2hlY2tlZHx8ZS5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsdC5nZXRDaGVja2VkKCk/InRydWUiOiJmYWxzZSIpKX1mdW5jdGlvbiBTUihlKXtyZXR1cm4gZT1Gby5pc0hUTUxFbGVtZW50KGUpJiZlLmdldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIik9PT0idHJ1ZSIse25vZGU6a24oZSl9fWZ1bmN0aW9uIGtuKGUpe3JldHVybiBQZS4kYXBwbHlOb2RlUmVwbGFjZW1lbnQobmV3IFBkKHZvaWQgMCxlKSl9ZnVuY3Rpb24gbnQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBQZH1sZXQgeW09Y2xhc3MgTFMgZXh0ZW5kcyBQZS5FbGVtZW50Tm9kZXtzdGF0aWMgZ2V0VHlwZSgpe3JldHVybiJsaXN0In1zdGF0aWMgY2xvbmUodCl7cmV0dXJuIG5ldyBMUyh0Ll9fbGlzdFR5cGV8fGwwW3QuX190YWddLHQuX19zdGFydCx0Ll9fa2V5KX1jb25zdHJ1Y3Rvcih0LG4scil7c3VwZXIociksdGhpcy5fX2xpc3RUeXBlPXQ9bDBbdF18fHQsdGhpcy5fX3RhZz10PT09Im51bWJlciI/Im9sIjoidWwiLHRoaXMuX19zdGFydD1ufWdldFRhZygpe3JldHVybiB0aGlzLl9fdGFnfXNldExpc3RUeXBlKHQpe2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtuLl9fbGlzdFR5cGU9dCxuLl9fdGFnPXQ9PT0ibnVtYmVyIj8ib2wiOiJ1bCJ9Z2V0TGlzdFR5cGUoKXtyZXR1cm4gdGhpcy5fX2xpc3RUeXBlfWdldFN0YXJ0KCl7cmV0dXJuIHRoaXMuX19zdGFydH1jcmVhdGVET00odCl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLl9fdGFnKTtyZXR1cm4gdGhpcy5fX3N0YXJ0IT09MSYmbi5zZXRBdHRyaWJ1dGUoInN0YXJ0IixTdHJpbmcodGhpcy5fX3N0YXJ0KSksbi5fX2xleGljYWxMaXN0VHlwZT10aGlzLl9fbGlzdFR5cGUsbzAobix0LnRoZW1lLHRoaXMpLG59dXBkYXRlRE9NKHQsbixyKXtyZXR1cm4gdC5fX3RhZyE9PXRoaXMuX190YWc/ITA6KG8wKG4sci50aGVtZSx0aGlzKSwhMSl9c3RhdGljIGltcG9ydERPTSgpe3JldHVybntvbDooKT0+KHtjb252ZXJzaW9uOmkwLHByaW9yaXR5OjB9KSx1bDooKT0+KHtjb252ZXJzaW9uOmkwLHByaW9yaXR5OjB9KX19c3RhdGljIGltcG9ydEpTT04odCl7bGV0IG49b24odC5saXN0VHlwZSx0LnN0YXJ0KTtyZXR1cm4gbi5zZXRGb3JtYXQodC5mb3JtYXQpLG4uc2V0SW5kZW50KHQuaW5kZW50KSxuLnNldERpcmVjdGlvbih0LmRpcmVjdGlvbiksbn1leHBvcnRET00odCl7cmV0dXJue2VsZW1lbnQ6dH09c3VwZXIuZXhwb3J0RE9NKHQpLHQmJkZvLmlzSFRNTEVsZW1lbnQodCkmJih0aGlzLl9fc3RhcnQhPT0xJiZ0LnNldEF0dHJpYnV0ZSgic3RhcnQiLFN0cmluZyh0aGlzLl9fc3RhcnQpKSx0aGlzLl9fbGlzdFR5cGU9PT0iY2hlY2siJiZ0LnNldEF0dHJpYnV0ZSgiX19sZXhpY2FsTGlzdFR5cGUiLCJjaGVjayIpKSx7ZWxlbWVudDp0fX1leHBvcnRKU09OKCl7cmV0dXJuey4uLnN1cGVyLmV4cG9ydEpTT04oKSxsaXN0VHlwZTp0aGlzLmdldExpc3RUeXBlKCksc3RhcnQ6dGhpcy5nZXRTdGFydCgpLHRhZzp0aGlzLmdldFRhZygpLHR5cGU6Imxpc3QiLHZlcnNpb246MX19Y2FuQmVFbXB0eSgpe3JldHVybiExfWNhbkluZGVudCgpe3JldHVybiExfWFwcGVuZCguLi50KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZihudChuKSlzdXBlci5hcHBlbmQobik7ZWxzZXtsZXQgbz1rbigpO3dlKG4pfHxQZS4kaXNFbGVtZW50Tm9kZShuKSYmKG49UGUuJGNyZWF0ZVRleHROb2RlKG4uZ2V0VGV4dENvbnRlbnQoKSkpLG8uYXBwZW5kKG4pLHN1cGVyLmFwcGVuZChvKX19cmV0dXJuIFp0KHRoaXMpLHRoaXN9ZXh0cmFjdFdpdGhDaGlsZCh0KXtyZXR1cm4gbnQodCl9fTtmdW5jdGlvbiBvMChlLHQsbil7bGV0IHI9W10sbz1bXTt2YXIgaT10Lmxpc3Q7aWYoaSE9PXZvaWQgMCl7bGV0IHM9aVtgJHtuLl9fdGFnfURlcHRoYF18fFtdO3Q9UlMobiktMTtsZXQgYT10JXMubGVuZ3RoO3ZhciBsPXNbYV07bGV0IHU9aVtuLl9fdGFnXSxjO2lmKGk9aS5uZXN0ZWQsaSE9PXZvaWQgMCYmaS5saXN0JiYoYz1pLmxpc3QpLHUhPT12b2lkIDAmJnIucHVzaCh1KSxsIT09dm9pZCAwKWZvcihsPWwuc3BsaXQoIiAiKSxyLnB1c2goLi4ubCksbD0wO2w8cy5sZW5ndGg7bCsrKWwhPT1hJiZvLnB1c2gobi5fX3RhZytsKTtjIT09dm9pZCAwJiYobj1jLnNwbGl0KCIgIiksMTx0P3IucHVzaCguLi5uKTpvLnB1c2goLi4ubikpfTA8by5sZW5ndGgmJkZvLnJlbW92ZUNsYXNzTmFtZXNGcm9tRWxlbWVudChlLC4uLm8pLDA8ci5sZW5ndGgmJkZvLmFkZENsYXNzTmFtZXNUb0VsZW1lbnQoZSwuLi5yKX1mdW5jdGlvbiBFUihlKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtudChuKT8odC5wdXNoKG4pLG49bi5nZXRDaGlsZHJlbigpLDE8bi5sZW5ndGgmJm4uZm9yRWFjaChvPT57d2UobykmJnQucHVzaChlMChvKSl9KSk6dC5wdXNoKGUwKG4pKX1yZXR1cm4gdH1mdW5jdGlvbiBpMChlKXtsZXQgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj1udWxsO3JldHVybiB0PT09Im9sIj9uPW9uKCJudW1iZXIiLGUuc3RhcnQpOnQ9PT0idWwiJiYobj1Gby5pc0hUTUxFbGVtZW50KGUpJiZlLmdldEF0dHJpYnV0ZSgiX19sZXhpY2FsbGlzdHR5cGUiKT09PSJjaGVjayI/b24oImNoZWNrIik6b24oImJ1bGxldCIpKSx7YWZ0ZXI6RVIsbm9kZTpufX1sZXQgbDA9e29sOiJudW1iZXIiLHVsOiJidWxsZXQifTtmdW5jdGlvbiBvbihlLHQ9MSl7cmV0dXJuIFBlLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcgeW0oZSx0KSl9ZnVuY3Rpb24gd2UoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB5bX1sZXQgQ1I9UGUuY3JlYXRlQ29tbWFuZCgiSU5TRVJUX1VOT1JERVJFRF9MSVNUX0NPTU1BTkQiKSwkUj1QZS5jcmVhdGVDb21tYW5kKCJJTlNFUlRfT1JERVJFRF9MSVNUX0NPTU1BTkQiKSxrUj1QZS5jcmVhdGVDb21tYW5kKCJJTlNFUlRfQ0hFQ0tfTElTVF9DT01NQU5EIiksYlI9UGUuY3JlYXRlQ29tbWFuZCgiUkVNT1ZFX0xJU1RfQ09NTUFORCIpO3VuLiRjcmVhdGVMaXN0SXRlbU5vZGU9a247dW4uJGNyZWF0ZUxpc3ROb2RlPW9uO3VuLiRnZXRMaXN0RGVwdGg9UlM7dW4uJGhhbmRsZUxpc3RJbnNlcnRQYXJhZ3JhcGg9ZnVuY3Rpb24oKXt2YXIgZT1QZS4kZ2V0U2VsZWN0aW9uKCk7aWYoIVBlLiRpc1JhbmdlU2VsZWN0aW9uKGUpfHwhZS5pc0NvbGxhcHNlZCgpfHwoZT1lLmFuY2hvci5nZXROb2RlKCksIW50KGUpfHxlLmdldENoaWxkcmVuU2l6ZSgpIT09MCkpcmV0dXJuITE7dmFyIHQ9U3AoZSksbj1lLmdldFBhcmVudCgpO3dlKG4pfHxBbCg0MCk7bGV0IHI9bi5nZXRQYXJlbnQoKSxvO2lmKFBlLiRpc1Jvb3RPclNoYWRvd1Jvb3Qocikpbz1QZS4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpLHQuaW5zZXJ0QWZ0ZXIobyk7ZWxzZSBpZihudChyKSlvPWtuKCksci5pbnNlcnRBZnRlcihvKTtlbHNlIHJldHVybiExO2lmKG8uc2VsZWN0KCksdD1lLmdldE5leHRTaWJsaW5ncygpLDA8dC5sZW5ndGgpe2xldCBpPW9uKG4uZ2V0TGlzdFR5cGUoKSk7UGUuJGlzUGFyYWdyYXBoTm9kZShvKT9vLmluc2VydEFmdGVyKGkpOihuPWtuKCksbi5hcHBlbmQoaSksby5pbnNlcnRBZnRlcihuKSksdC5mb3JFYWNoKGw9PntsLnJlbW92ZSgpLGkuYXBwZW5kKGwpfSl9cmV0dXJuIHdSKGUpLCEwfTt1bi4kaXNMaXN0SXRlbU5vZGU9bnQ7dW4uJGlzTGlzdE5vZGU9d2U7dW4uSU5TRVJUX0NIRUNLX0xJU1RfQ09NTUFORD1rUjt1bi5JTlNFUlRfT1JERVJFRF9MSVNUX0NPTU1BTkQ9JFI7dW4uSU5TRVJUX1VOT1JERVJFRF9MSVNUX0NPTU1BTkQ9Q1I7dW4uTGlzdEl0ZW1Ob2RlPVBkO3VuLkxpc3ROb2RlPXltO3VuLlJFTU9WRV9MSVNUX0NPTU1BTkQ9YlI7dW4uaW5zZXJ0TGlzdD1mdW5jdGlvbihlLHQpe2UudXBkYXRlKCgpPT57dmFyIG49UGUuJGdldFNlbGVjdGlvbigpO2lmKFBlLiRpc1JhbmdlU2VsZWN0aW9uKG4pfHxQZS5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb24obikpe3ZhciByPW4uZ2V0Tm9kZXMoKTtuPW4uYW5jaG9yLmdldE5vZGUoKTt2YXIgbz1uLmdldFBhcmVudCgpO2lmKE9TKG4scikpcj1vbih0KSxQZS4kaXNSb290T3JTaGFkb3dSb290KG8pPyhuLnJlcGxhY2Uociksbz1rbigpLFBlLiRpc0VsZW1lbnROb2RlKG4pJiYoby5zZXRGb3JtYXQobi5nZXRGb3JtYXRUeXBlKCkpLG8uc2V0SW5kZW50KG4uZ2V0SW5kZW50KCkpKSxyLmFwcGVuZChvKSk6bnQobikmJihuPW4uZ2V0UGFyZW50T3JUaHJvdygpLF9pKHIsbi5nZXRDaGlsZHJlbigpKSxuLnJlcGxhY2UocikpO2Vsc2UgZm9yKG49bmV3IFNldCxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBpPXJbb107aWYoUGUuJGlzRWxlbWVudE5vZGUoaSkmJmkuaXNFbXB0eSgpJiYhbi5oYXMoaS5nZXRLZXkoKSkpdDAoaSx0KTtlbHNlIGlmKFBlLiRpc0xlYWZOb2RlKGkpKWZvcihpPWkuZ2V0UGFyZW50KCk7aSE9bnVsbDspe2xldCBzPWkuZ2V0S2V5KCk7aWYod2UoaSkpe2lmKCFuLmhhcyhzKSl7dmFyIGw9b24odCk7X2kobCxpLmdldENoaWxkcmVuKCkpLGkucmVwbGFjZShsKSxadChsKSxuLmFkZChzKX1icmVha31lbHNle2lmKGw9aS5nZXRQYXJlbnQoKSxQZS4kaXNSb290T3JTaGFkb3dSb290KGwpJiYhbi5oYXMocykpe24uYWRkKHMpLHQwKGksdCk7YnJlYWt9aT1sfX19fX0pfTt1bi5yZW1vdmVMaXN0PWZ1bmN0aW9uKGUpe2UudXBkYXRlKCgpPT57bGV0IHQ9UGUuJGdldFNlbGVjdGlvbigpO2lmKFBlLiRpc1JhbmdlU2VsZWN0aW9uKHQpKXt2YXIgbj1uZXcgU2V0LHI9dC5nZXROb2RlcygpLG89dC5hbmNob3IuZ2V0Tm9kZSgpO2lmKE9TKG8scikpbi5hZGQoU3AobykpO2Vsc2UgZm9yKG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGk9cltvXTtQZS4kaXNMZWFmTm9kZShpKSYmKGk9Rm8uJGdldE5lYXJlc3ROb2RlT2ZUeXBlKGksUGQpLGkhPW51bGwmJm4uYWRkKFNwKGkpKSl9Zm9yKGxldCBsIG9mIG4pe249bCxyPVBTKGwpO2ZvcihsZXQgcyBvZiByKXI9UGUuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKSxfaShyLHMuZ2V0Q2hpbGRyZW4oKSksbi5pbnNlcnRBZnRlcihyKSxuPXIscy5fX2tleT09PXQuYW5jaG9yLmtleSYmdC5hbmNob3Iuc2V0KHIuZ2V0S2V5KCksMCwiZWxlbWVudCIpLHMuX19rZXk9PT10LmZvY3VzLmtleSYmdC5mb2N1cy5zZXQoci5nZXRLZXkoKSwwLCJlbGVtZW50Iikscy5yZW1vdmUoKTtsLnJlbW92ZSgpfX19KX07Y29uc3QgVFI9dW47dmFyIHlvPVRSLERTPXt9LE9kPXt9LElTPXA7ZnVuY3Rpb24gTlIoZSl7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtczt0LmFwcGVuZCgiY29kZSIsZSk7Zm9yKGxldCBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0LmFwcGVuZCgidiIsYXJndW1lbnRzW25dKTt0aHJvdyBFcnJvcihgTWluaWZpZWQgTGV4aWNhbCBlcnJvciAjJHtlfTsgdmlzaXQgaHR0cHM6Ly9sZXhpY2FsLmRldi9kb2NzL2Vycm9yPyR7dH0gZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLmApfWxldCBqUz1JUy5jcmVhdGVDb250ZXh0KG51bGwpO09kLkxleGljYWxDb21wb3NlckNvbnRleHQ9alM7T2QuY3JlYXRlTGV4aWNhbENvbXBvc2VyQ29udGV4dD1mdW5jdGlvbihlLHQpe2xldCBuPW51bGw7cmV0dXJuIGUhPW51bGwmJihuPWVbMV0pLHtnZXRUaGVtZTpmdW5jdGlvbigpe3JldHVybiB0Pz8obiE9bnVsbD9uLmdldFRoZW1lKCk6bnVsbCl9fX07T2QudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dD1mdW5jdGlvbigpe2xldCBlPUlTLnVzZUNvbnRleHQoalMpO3JldHVybiBlPT1udWxsJiZOUig4KSxlfTtjb25zdCBSUj1PZDt2YXIgZHI9UlIsczA9ZHIsTnM9aGUsVmM9cDtsZXQgelM9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiO3ZhciBQUj16Uz9WYy51c2VMYXlvdXRFZmZlY3Q6VmMudXNlRWZmZWN0O2xldCAkdT17dGFnOiJoaXN0b3J5LW1lcmdlIn07ZnVuY3Rpb24gT1IoZSx0KXtpZih0IT09bnVsbCl7aWYodD09PXZvaWQgMCllLnVwZGF0ZSgoKT0+e3ZhciBuPU5zLiRnZXRSb290KCk7aWYobi5pc0VtcHR5KCkpe2xldCByPU5zLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk7bi5hcHBlbmQociksbj16Uz9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGwsKE5zLiRnZXRTZWxlY3Rpb24oKSE9PW51bGx8fG4hPT1udWxsJiZuPT09ZS5nZXRSb290RWxlbWVudCgpKSYmci5zZWxlY3QoKX19LCR1KTtlbHNlIGlmKHQhPT1udWxsKXN3aXRjaCh0eXBlb2YgdCl7Y2FzZSJzdHJpbmciOmxldCBuPWUucGFyc2VFZGl0b3JTdGF0ZSh0KTtlLnNldEVkaXRvclN0YXRlKG4sJHUpO2JyZWFrO2Nhc2Uib2JqZWN0IjplLnNldEVkaXRvclN0YXRlKHQsJHUpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmUudXBkYXRlKCgpPT57TnMuJGdldFJvb3QoKS5pc0VtcHR5KCkmJnQoZSl9LCR1KX19fURTLkxleGljYWxDb21wb3Nlcj1mdW5jdGlvbih7aW5pdGlhbENvbmZpZzplLGNoaWxkcmVuOnR9KXtsZXQgbj1WYy51c2VNZW1vKCgpPT57Y29uc3R7dGhlbWU6cixuYW1lc3BhY2U6byxlZGl0b3JfX0RFUFJFQ0FURUQ6aSxub2RlczpsLG9uRXJyb3I6cyxlZGl0b3JTdGF0ZTphfT1lLHU9czAuY3JlYXRlTGV4aWNhbENvbXBvc2VyQ29udGV4dChudWxsLHIpO2xldCBjPWl8fG51bGw7aWYoYz09PW51bGwpe2NvbnN0IGQ9TnMuY3JlYXRlRWRpdG9yKHtlZGl0YWJsZTplLmVkaXRhYmxlLG5hbWVzcGFjZTpvLG5vZGVzOmwsb25FcnJvcjpmPT5zKGYsZCksdGhlbWU6cn0pO09SKGQsYSksYz1kfXJldHVybltjLHVdfSxbXSk7cmV0dXJuIFBSKCgpPT57bGV0IHI9ZS5lZGl0YWJsZSxbb109bjtvLnNldEVkaXRhYmxlKHIhPT12b2lkIDA/cjohMCl9LFtdKSxWYy5jcmVhdGVFbGVtZW50KHMwLkxleGljYWxDb21wb3NlckNvbnRleHQuUHJvdmlkZXIse3ZhbHVlOm59LHQpfTtjb25zdCBBUj1EUzt2YXIgTVI9QVIsWHM9cDtmdW5jdGlvbiBFcChlLHQpe3JldHVybiBFcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihuLHIpe3JldHVybiBuLl9fcHJvdG9fXz1yLG59LEVwKGUsdCl9ZnVuY3Rpb24gTFIoZSx0KXtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLEVwKGUsdCl9ZnVuY3Rpb24gRFIoZSx0KXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9W10pLHQ9PT12b2lkIDAmJih0PVtdKSxlLmxlbmd0aCE9PXQubGVuZ3RofHxlLnNvbWUoZnVuY3Rpb24obixyKXtyZXR1cm4hT2JqZWN0LmlzKG4sdFtyXSl9KX12YXIgYTA9e2Vycm9yOm51bGx9LElSPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtmb3IodmFyIHIsbz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkobyksbD0wO2w8bztsKyspaVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIHI9ZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSl8fHRoaXMsci5zdGF0ZT1hMCxyLnJlc2V0RXJyb3JCb3VuZGFyeT1mdW5jdGlvbigpe2Zvcih2YXIgcyxhPWFyZ3VtZW50cy5sZW5ndGgsdT1BcnJheShhKSxjPTA7YzxhO2MrKyl1W2NdPWFyZ3VtZW50c1tjXTtyLnByb3BzLm9uUmVzZXQ9PW51bGx8fChzPXIucHJvcHMpLm9uUmVzZXQuYXBwbHkocyx1KSxyLnJlc2V0KCl9LHJ9TFIodCxlKSx0LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj1mdW5jdGlvbihyKXtyZXR1cm57ZXJyb3I6cn19O3ZhciBuPXQucHJvdG90eXBlO3JldHVybiBuLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5zZXRTdGF0ZShhMCl9LG4uY29tcG9uZW50RGlkQ2F0Y2g9ZnVuY3Rpb24ocixvKXt2YXIgaSxsOyhpPShsPXRoaXMucHJvcHMpLm9uRXJyb3IpPT1udWxsfHxpLmNhbGwobCxyLG8pfSxuLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbihyLG8pe3ZhciBpPXRoaXMucHJvcHMucmVzZXRLZXlzO2lmKHRoaXMuc3RhdGUuZXJyb3IhPT1udWxsJiZvLmVycm9yIT09bnVsbCYmRFIoci5yZXNldEtleXMsaSkpe3ZhciBsLHM7KGw9KHM9dGhpcy5wcm9wcykub25SZXNldEtleXNDaGFuZ2UpPT1udWxsfHxsLmNhbGwocyxyLnJlc2V0S2V5cyxpKSx0aGlzLnJlc2V0KCl9fSxuLnJlbmRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMuc3RhdGUuZXJyb3Isbz10aGlzLnByb3BzLGk9by5mYWxsYmFja1JlbmRlcixsPW8uRmFsbGJhY2tDb21wb25lbnQ7aWYobz1vLmZhbGxiYWNrLHIhPT1udWxsKXtpZihyPXtlcnJvcjpyLHJlc2V0RXJyb3JCb3VuZGFyeTp0aGlzLnJlc2V0RXJyb3JCb3VuZGFyeX0sWHMuaXNWYWxpZEVsZW1lbnQobykpcmV0dXJuIG87aWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpcmV0dXJuIGkocik7aWYobClyZXR1cm4gWHMuY3JlYXRlRWxlbWVudChsLHIpO3Rocm93IEVycm9yKCJyZWFjdC1lcnJvci1ib3VuZGFyeSByZXF1aXJlcyBlaXRoZXIgYSBmYWxsYmFjaywgZmFsbGJhY2tSZW5kZXIsIG9yIEZhbGxiYWNrQ29tcG9uZW50IHByb3AiKX1yZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbn0sdH0oWHMuQ29tcG9uZW50KSxqUj1mdW5jdGlvbih7Y2hpbGRyZW46ZSxvbkVycm9yOnR9KXtyZXR1cm4gWHMuY3JlYXRlRWxlbWVudChJUix7ZmFsbGJhY2s6WHMuY3JlYXRlRWxlbWVudCgiZGl2Iix7c3R5bGU6e2JvcmRlcjoiMXB4IHNvbGlkICNmMDAiLGNvbG9yOiIjZjAwIixwYWRkaW5nOiI4cHgifX0sIkFuIGVycm9yIHdhcyB0aHJvd24uIiksb25FcnJvcjp0fSxlKX07Y29uc3QgelI9alI7dmFyIEZSPXpSO2NvbnN0IEJSPUxhKEZSKTt2YXIgeG09e30sd209e30sV1I9UnQsRmU9aGU7ZnVuY3Rpb24gVVIoZSx0LG4scixvKXtpZihlPT09bnVsbHx8bi5zaXplPT09MCYmci5zaXplPT09MCYmIW8pcmV0dXJuIDA7dmFyIGk9dC5fc2VsZWN0aW9uLGw9ZS5fc2VsZWN0aW9uO2lmKG8pcmV0dXJuIDE7aWYoIShGZS4kaXNSYW5nZVNlbGVjdGlvbihpKSYmRmUuJGlzUmFuZ2VTZWxlY3Rpb24obCkmJmwuaXNDb2xsYXBzZWQoKSYmaS5pc0NvbGxhcHNlZCgpKSlyZXR1cm4gMDtvPXQuX25vZGVNYXA7bGV0IHM9W107Zm9yKGxldCBhIG9mIG4pbj1vLmdldChhKSxuIT09dm9pZCAwJiZzLnB1c2gobik7Zm9yKGxldFthLHVdb2Ygcil1JiYocj1vLmdldChhKSxyPT09dm9pZCAwfHxGZS4kaXNSb290Tm9kZShyKXx8cy5wdXNoKHIpKTtyZXR1cm4gcy5sZW5ndGg9PT0wPzA6MTxzLmxlbmd0aD8ocj10Ll9ub2RlTWFwLHQ9ci5nZXQoaS5hbmNob3Iua2V5KSxsPXIuZ2V0KGwuYW5jaG9yLmtleSksdCYmbCYmIWUuX25vZGVNYXAuaGFzKHQuX19rZXkpJiZGZS4kaXNUZXh0Tm9kZSh0KSYmdC5fX3RleHQubGVuZ3RoPT09MSYmaS5hbmNob3Iub2Zmc2V0PT09MT8yOjApOih0PXNbMF0sZT1lLl9ub2RlTWFwLmdldCh0Ll9fa2V5KSwhRmUuJGlzVGV4dE5vZGUoZSl8fCFGZS4kaXNUZXh0Tm9kZSh0KXx8ZS5fX21vZGUhPT10Ll9fbW9kZXx8KGU9ZS5fX3RleHQsdD10Ll9fdGV4dCxlPT09dCl8fChpPWkuYW5jaG9yLGw9bC5hbmNob3IsaS5rZXkhPT1sLmtleXx8aS50eXBlIT09InRleHQiKT8wOihpPWkub2Zmc2V0LGw9bC5vZmZzZXQsZT10Lmxlbmd0aC1lLmxlbmd0aCxlPT09MSYmbD09PWktMT8yOmU9PT0tMSYmbD09PWkrMT8zOmU9PT0tMSYmbD09PWk/NDowKSl9ZnVuY3Rpb24gSFIoZSx0KXtsZXQgbj1EYXRlLm5vdygpLHI9MDtyZXR1cm4obyxpLGwscyxhLHUpPT57bGV0IGM9RGF0ZS5ub3coKTtpZih1LmhhcygiaGlzdG9yaWMiKSlyZXR1cm4gcj0wLG49YywyO2xldCBkPVVSKG8saSxzLGEsZS5pc0NvbXBvc2luZygpKSxmPSgoKT0+e3ZhciBoPWw9PT1udWxsfHxsLmVkaXRvcj09PWUsbT11LmhhcygiaGlzdG9yeS1wdXNoIik7aWYoIW0mJmgmJnUuaGFzKCJoaXN0b3J5LW1lcmdlIikpcmV0dXJuIDA7aWYobz09PW51bGwpcmV0dXJuIDE7dmFyIGc9aS5fc2VsZWN0aW9uO2lmKCEoMDxzLnNpemV8fDA8YS5zaXplKSlyZXR1cm4gZyE9PW51bGw/MDoyO2lmKG09PT0hMSYmZCE9PTAmJmQ9PT1yJiZjPG4rdCYmaClyZXR1cm4gMDtpZihzLnNpemU9PT0xKXt7bT1BcnJheS5mcm9tKHMpWzBdLGg9by5fbm9kZU1hcC5nZXQobSksbT1pLl9ub2RlTWFwLmdldChtKSxnPW8uX3NlbGVjdGlvbjtsZXQgXz1pLl9zZWxlY3Rpb24sdj0hMTtGZS4kaXNSYW5nZVNlbGVjdGlvbihnKSYmRmUuJGlzUmFuZ2VTZWxlY3Rpb24oXykmJih2PWcuYW5jaG9yLnR5cGU9PT0iZWxlbWVudCImJmcuZm9jdXMudHlwZT09PSJlbGVtZW50IiYmXy5hbmNob3IudHlwZT09PSJ0ZXh0IiYmXy5mb2N1cy50eXBlPT09InRleHQiKSxoPSF2JiZGZS4kaXNUZXh0Tm9kZShoKSYmRmUuJGlzVGV4dE5vZGUobSk/aC5fX3R5cGU9PT1tLl9fdHlwZSYmaC5fX3RleHQ9PT1tLl9fdGV4dCYmaC5fX21vZGU9PT1tLl9fbW9kZSYmaC5fX2RldGFpbD09PW0uX19kZXRhaWwmJmguX19zdHlsZT09PW0uX19zdHlsZSYmaC5fX2Zvcm1hdD09PW0uX19mb3JtYXQmJmguX19wYXJlbnQ9PT1tLl9fcGFyZW50OiExfWlmKGgpcmV0dXJuIDB9cmV0dXJuIDF9KSgpO3JldHVybiBuPWMscj1kLGZ9fXdtLmNyZWF0ZUVtcHR5SGlzdG9yeVN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbCxyZWRvU3RhY2s6W10sdW5kb1N0YWNrOltdfX07d20ucmVnaXN0ZXJIaXN0b3J5PWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1IUihlLG4pO249KHtlZGl0b3JTdGF0ZTpsLHByZXZFZGl0b3JTdGF0ZTpzLGRpcnR5TGVhdmVzOmEsZGlydHlFbGVtZW50czp1LHRhZ3M6Y30pPT57Y29uc3QgZD10LmN1cnJlbnQsZj10LnJlZG9TdGFjayxoPXQudW5kb1N0YWNrLG09ZD09PW51bGw/bnVsbDpkLmVkaXRvclN0YXRlO2lmKGQ9PT1udWxsfHxsIT09bSl7aWYocz1yKHMsbCxkLGEsdSxjKSxzPT09MSlmLmxlbmd0aCE9PTAmJih0LnJlZG9TdGFjaz1bXSxlLmRpc3BhdGNoQ29tbWFuZChGZS5DQU5fUkVET19DT01NQU5ELCExKSksZCE9PW51bGwmJihoLnB1c2goey4uLmR9KSxlLmRpc3BhdGNoQ29tbWFuZChGZS5DQU5fVU5ET19DT01NQU5ELCEwKSk7ZWxzZSBpZihzPT09MilyZXR1cm47dC5jdXJyZW50PXtlZGl0b3I6ZSxlZGl0b3JTdGF0ZTpsfX19O2xldCBvPVdSLm1lcmdlUmVnaXN0ZXIoZS5yZWdpc3RlckNvbW1hbmQoRmUuVU5ET19DT01NQU5ELCgpPT57bGV0IGw9dC5yZWRvU3RhY2sscz10LnVuZG9TdGFjaztpZihzLmxlbmd0aCE9PTApe2xldCBhPXQuY3VycmVudCx1PXMucG9wKCk7YSE9PW51bGwmJihsLnB1c2goYSksZS5kaXNwYXRjaENvbW1hbmQoRmUuQ0FOX1JFRE9fQ09NTUFORCwhMCkpLHMubGVuZ3RoPT09MCYmZS5kaXNwYXRjaENvbW1hbmQoRmUuQ0FOX1VORE9fQ09NTUFORCwhMSksdC5jdXJyZW50PXV8fG51bGwsdSYmdS5lZGl0b3Iuc2V0RWRpdG9yU3RhdGUodS5lZGl0b3JTdGF0ZSx7dGFnOiJoaXN0b3JpYyJ9KX1yZXR1cm4hMH0sRmUuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLGUucmVnaXN0ZXJDb21tYW5kKEZlLlJFRE9fQ09NTUFORCwoKT0+e2xldCBsPXQucmVkb1N0YWNrO3ZhciBzPXQudW5kb1N0YWNrO2lmKGwubGVuZ3RoIT09MCl7bGV0IGE9dC5jdXJyZW50O2EhPT1udWxsJiYocy5wdXNoKGEpLGUuZGlzcGF0Y2hDb21tYW5kKEZlLkNBTl9VTkRPX0NPTU1BTkQsITApKSxzPWwucG9wKCksbC5sZW5ndGg9PT0wJiZlLmRpc3BhdGNoQ29tbWFuZChGZS5DQU5fUkVET19DT01NQU5ELCExKSx0LmN1cnJlbnQ9c3x8bnVsbCxzJiZzLmVkaXRvci5zZXRFZGl0b3JTdGF0ZShzLmVkaXRvclN0YXRlLHt0YWc6Imhpc3RvcmljIn0pfXJldHVybiEwfSxGZS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoRmUuQ0xFQVJfRURJVE9SX0NPTU1BTkQsKCk9Pih0LnVuZG9TdGFjaz1bXSx0LnJlZG9TdGFjaz1bXSx0LmN1cnJlbnQ9bnVsbCwhMSksRmUuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLGUucmVnaXN0ZXJDb21tYW5kKEZlLkNMRUFSX0hJU1RPUllfQ09NTUFORCwoKT0+KHQudW5kb1N0YWNrPVtdLHQucmVkb1N0YWNrPVtdLHQuY3VycmVudD1udWxsLGUuZGlzcGF0Y2hDb21tYW5kKEZlLkNBTl9SRURPX0NPTU1BTkQsITEpLGUuZGlzcGF0Y2hDb21tYW5kKEZlLkNBTl9VTkRPX0NPTU1BTkQsITEpLCEwKSxGZS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlclVwZGF0ZUxpc3RlbmVyKG4pKSxpPWUucmVnaXN0ZXJVcGRhdGVMaXN0ZW5lcihuKTtyZXR1cm4oKT0+e28oKSxpKCl9fTtjb25zdCBWUj13bTt2YXIgS1I9VlIsR1I9ZHIsQ3A9S1IsdTA9cDtmdW5jdGlvbiBZUihlLHQsbj0xZTMpe2xldCByPXUwLnVzZU1lbW8oKCk9PnR8fENwLmNyZWF0ZUVtcHR5SGlzdG9yeVN0YXRlKCksW3RdKTt1MC51c2VFZmZlY3QoKCk9PkNwLnJlZ2lzdGVySGlzdG9yeShlLHIsbiksW24sZSxyXSl9eG0uY3JlYXRlRW1wdHlIaXN0b3J5U3RhdGU9Q3AuY3JlYXRlRW1wdHlIaXN0b3J5U3RhdGU7eG0uSGlzdG9yeVBsdWdpbj1mdW5jdGlvbih7ZXh0ZXJuYWxIaXN0b3J5U3RhdGU6ZX0pe2xldFt0XT1HUi51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCk7cmV0dXJuIFlSKHQsZSksbnVsbH07Y29uc3QgWFI9eG07dmFyIFFSPVhSLEZTPXt9LEpSPWRyLFFzPXAsWlI9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiP1FzLnVzZUxheW91dEVmZmVjdDpRcy51c2VFZmZlY3Q7ZnVuY3Rpb24gcVIoZSl7bGV0W3RdPUpSLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKSxuPVFzLnVzZU1lbW8oKCk9PmUodCksW3QsZV0pLHI9UXMudXNlUmVmKG4uaW5pdGlhbFZhbHVlRm4oKSksW28saV09UXMudXNlU3RhdGUoci5jdXJyZW50KTtyZXR1cm4gWlIoKCk9PntsZXR7aW5pdGlhbFZhbHVlRm46bCxzdWJzY3JpYmU6c309bixhPWwoKTtyZXR1cm4gci5jdXJyZW50IT09YSYmKHIuY3VycmVudD1hLGkoYSkpLHModT0+e3IuY3VycmVudD11LGkodSl9KX0sW24sZV0pLG99ZnVuY3Rpb24gZVAoZSl7cmV0dXJue2luaXRpYWxWYWx1ZUZuOigpPT5lLmlzRWRpdGFibGUoKSxzdWJzY3JpYmU6dD0+ZS5yZWdpc3RlckVkaXRhYmxlTGlzdGVuZXIodCl9fXZhciB0UD1mdW5jdGlvbigpe3JldHVybiBxUihlUCl9O2NvbnN0IG5QPXRQO3ZhciByUD1uUCxHbz17fSxxdD1oZTtmdW5jdGlvbiBfbShlLHQ9ITApe3JldHVybiBlPyExOihlPUJTKCksdCYmKGU9ZS50cmltKCkpLGU9PT0iIil9ZnVuY3Rpb24gQlMoKXtyZXR1cm4gcXQuJGdldFJvb3QoKS5nZXRUZXh0Q29udGVudCgpfWZ1bmN0aW9uIFdTKGUpe2lmKCFfbShlLCExKSlyZXR1cm4hMTtlPXF0LiRnZXRSb290KCkuZ2V0Q2hpbGRyZW4oKTtsZXQgdD1lLmxlbmd0aDtpZigxPHQpcmV0dXJuITE7Zm9yKGxldCByPTA7cjx0O3IrKyl7dmFyIG49ZVtyXTtpZihxdC4kaXNEZWNvcmF0b3JOb2RlKG4pKXJldHVybiExO2lmKHF0LiRpc0VsZW1lbnROb2RlKG4pKXtpZighcXQuJGlzUGFyYWdyYXBoTm9kZShuKXx8bi5fX2luZGVudCE9PTApcmV0dXJuITE7bj1uLmdldENoaWxkcmVuKCk7bGV0IG89bi5sZW5ndGg7Zm9yKGxldCBpPTA7aTxvO2krKylpZighcXQuJGlzVGV4dE5vZGUobltyXSkpcmV0dXJuITF9fXJldHVybiEwfUdvLiRjYW5TaG93UGxhY2Vob2xkZXI9V1M7R28uJGNhblNob3dQbGFjZWhvbGRlckN1cnJ5PWZ1bmN0aW9uKGUpe3JldHVybigpPT5XUyhlKX07R28uJGZpbmRUZXh0SW50ZXJzZWN0aW9uRnJvbUNoYXJhY3RlcnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldEZpcnN0Q2hpbGQoKTtlPTA7ZTpmb3IoO24hPT1udWxsOyl7aWYocXQuJGlzRWxlbWVudE5vZGUobikpe3ZhciByPW4uZ2V0Rmlyc3RDaGlsZCgpO2lmKHIhPT1udWxsKXtuPXI7Y29udGludWV9fWVsc2UgaWYocXQuJGlzVGV4dE5vZGUobikpe2lmKHI9bi5nZXRUZXh0Q29udGVudFNpemUoKSxlK3I+dClyZXR1cm57bm9kZTpuLG9mZnNldDp0LWV9O2UrPXJ9aWYocj1uLmdldE5leHRTaWJsaW5nKCksciE9PW51bGwpbj1yO2Vsc2V7Zm9yKG49bi5nZXRQYXJlbnQoKTtuIT09bnVsbDspe2lmKHI9bi5nZXROZXh0U2libGluZygpLHIhPT1udWxsKXtuPXI7Y29udGludWUgZX1uPW4uZ2V0UGFyZW50KCl9YnJlYWt9fXJldHVybiBudWxsfTtHby4kaXNSb290VGV4dENvbnRlbnRFbXB0eT1fbTtHby4kaXNSb290VGV4dENvbnRlbnRFbXB0eUN1cnJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKCk9Pl9tKGUsdCl9O0dvLiRyb290VGV4dENvbnRlbnQ9QlM7R28ucmVnaXN0ZXJMZXhpY2FsVGV4dEVudGl0eT1mdW5jdGlvbihlLHQsbixyKXtsZXQgbz1sPT57Y29uc3Qgcz1xdC4kY3JlYXRlVGV4dE5vZGUobC5nZXRUZXh0Q29udGVudCgpKTtzLnNldEZvcm1hdChsLmdldEZvcm1hdCgpKSxsLnJlcGxhY2Uocyl9LGk9ZS5yZWdpc3Rlck5vZGVUcmFuc2Zvcm0ocXQuVGV4dE5vZGUsbD0+e2lmKGwuaXNTaW1wbGVUZXh0KCkpe3ZhciBzPWwuZ2V0UHJldmlvdXNTaWJsaW5nKCksYT1sLmdldFRleHRDb250ZW50KCksdT1sO2lmKHF0LiRpc1RleHROb2RlKHMpKXt2YXIgYz1zLmdldFRleHRDb250ZW50KCksZD10KGMrYSk7aWYocyBpbnN0YW5jZW9mIG4pe2lmKGQ9PT1udWxsfHxzLmdldExhdGVzdCgpLl9fbW9kZSE9PTApe28ocyk7cmV0dXJufWlmKGQ9ZC5lbmQtYy5sZW5ndGgsMDxkKXt1PWEuc2xpY2UoMCxkKSx1PWMrdSxzLnNlbGVjdCgpLHMuc2V0VGV4dENvbnRlbnQodSksZD09PWEubGVuZ3RoP2wucmVtb3ZlKCk6KHM9YS5zbGljZShkKSxsLnNldFRleHRDb250ZW50KHMpKTtyZXR1cm59fWVsc2UgaWYoZD09PW51bGx8fGQuc3RhcnQ8Yy5sZW5ndGgpcmV0dXJufWZvcig7Oyl7aWYobD10KGEpLGE9ZD1sPT09bnVsbD8iIjphLnNsaWNlKGwuZW5kKSxkPT09IiIpe2lmKGM9dS5nZXROZXh0U2libGluZygpLHF0LiRpc1RleHROb2RlKGMpKXtpZihkPXUuZ2V0VGV4dENvbnRlbnQoKStjLmdldFRleHRDb250ZW50KCksZD10KGQpLGQ9PT1udWxsKXtjIGluc3RhbmNlb2Ygbj9vKGMpOmMubWFya0RpcnR5KCk7YnJlYWt9ZWxzZSBpZihkLnN0YXJ0IT09MClicmVha319ZWxzZSBpZihjPXQoZCksYyE9PW51bGwmJmMuc3RhcnQ9PT0wKWJyZWFrO2lmKGw9PT1udWxsKWJyZWFrO2lmKGwuc3RhcnQ9PT0wJiZxdC4kaXNUZXh0Tm9kZShzKSYmcy5pc1RleHRFbnRpdHkoKSljb250aW51ZTtsZXQgZjtpZihsLnN0YXJ0PT09MD9bZix1XT11LnNwbGl0VGV4dChsLmVuZCk6WyxmLHVdPXUuc3BsaXRUZXh0KGwuc3RhcnQsbC5lbmQpLGw9cihmKSxsLnNldEZvcm1hdChmLmdldEZvcm1hdCgpKSxmLnJlcGxhY2UobCksdT09bnVsbClicmVha319fSk7cmV0dXJuIGU9ZS5yZWdpc3Rlck5vZGVUcmFuc2Zvcm0obixsPT57dmFyIHM9bC5nZXRUZXh0Q29udGVudCgpO2NvbnN0IGE9dChzKTthPT09bnVsbHx8YS5zdGFydCE9PTA/byhsKTpzLmxlbmd0aD5hLmVuZD9sLnNwbGl0VGV4dChhLmVuZCk6KHM9bC5nZXRQcmV2aW91c1NpYmxpbmcoKSxxdC4kaXNUZXh0Tm9kZShzKSYmcy5pc1RleHRFbnRpdHkoKSYmKG8ocyksbyhsKSkscz1sLmdldE5leHRTaWJsaW5nKCkscXQuJGlzVGV4dE5vZGUocykmJnMuaXNUZXh0RW50aXR5KCkmJihvKHMpLGwgaW5zdGFuY2VvZiBuJiZvKGwpKSl9KSxbaSxlXX07Y29uc3Qgb1A9R287dmFyIGlQPW9QLFVTPXt9LGt1PWhlO1VTLnJlZ2lzdGVyRHJhZ29uU3VwcG9ydD1mdW5jdGlvbihlKXtsZXQgdD13aW5kb3cubG9jYXRpb24ub3JpZ2luLG49cj0+e2lmKHIub3JpZ2luPT09dCl7dmFyIG89ZS5nZXRSb290RWxlbWVudCgpO2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1vJiYobz1yLmRhdGEsdHlwZW9mIG89PSJzdHJpbmciKSl7dHJ5e3ZhciBpPUpTT04ucGFyc2Uobyl9Y2F0Y2h7cmV0dXJufWlmKGkmJmkucHJvdG9jb2w9PT0ibnVhbnJpYV9tZXNzYWdpbmciJiZpLnR5cGU9PT0icmVxdWVzdCImJihpPWkucGF5bG9hZCkmJmkuZnVuY3Rpb25JZD09PSJtYWtlQ2hhbmdlcyImJihpPWkuYXJncykpe2NvbnN0W2wscyxhLHUsY109aTtlLnVwZGF0ZSgoKT0+e2NvbnN0IGQ9a3UuJGdldFNlbGVjdGlvbigpO2lmKGt1LiRpc1JhbmdlU2VsZWN0aW9uKGQpKXt2YXIgZj1kLmFuY2hvcjtsZXQgaD1mLmdldE5vZGUoKSxtPTAsZz0wO2t1LiRpc1RleHROb2RlKGgpJiYwPD1sJiYwPD1zJiYobT1sLGc9bCtzLGQuc2V0VGV4dE5vZGVSYW5nZShoLG0saCxnKSksKG0hPT1nfHxhIT09IiIpJiYoZC5pbnNlcnRSYXdUZXh0KGEpLGg9Zi5nZXROb2RlKCkpLGt1LiRpc1RleHROb2RlKGgpJiYobT11LGc9dStjLGY9aC5nZXRUZXh0Q29udGVudFNpemUoKSxtPW0+Zj9mOm0sZz1nPmY/ZjpnLGQuc2V0VGV4dE5vZGVSYW5nZShoLG0saCxnKSksci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX19KX19fX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuLCEwKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuLCEwKX19O2NvbnN0IGxQPVVTO3ZhciBzUD1sUCxBcj17fSx0bz17fSxTbT17fSxjMD16byxhUD1SdCxhbD1oZTtmdW5jdGlvbiBIUyhlLHQsbixyPW51bGwpe2xldCBvPXIhPW51bGw/dC5pc1NlbGVjdGVkKHIpOiEwLGk9YWwuJGlzRWxlbWVudE5vZGUodCkmJnQuZXhjbHVkZUZyb21Db3B5KCJodG1sIik7dmFyIGw9dDtyIT09bnVsbCYmKGw9YzAuJGNsb25lV2l0aFByb3BlcnRpZXModCksbD1hbC4kaXNUZXh0Tm9kZShsKSYmciE9bnVsbD9jMC4kc2xpY2VTZWxlY3RlZFRleHROb2RlQ29udGVudChyLGwpOmwpO2xldCBzPWFsLiRpc0VsZW1lbnROb2RlKGwpP2wuZ2V0Q2hpbGRyZW4oKTpbXSx7ZWxlbWVudDphLGFmdGVyOnV9PWwuZXhwb3J0RE9NKGUpO2lmKCFhKXJldHVybiExO2xldCBjPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtmb3IobGV0IGQ9MDtkPHMubGVuZ3RoO2QrKyl7bGV0IGY9c1tkXSxoPUhTKGUsZixjLHIpOyFvJiZhbC4kaXNFbGVtZW50Tm9kZSh0KSYmaCYmdC5leHRyYWN0V2l0aENoaWxkKGYsciwiaHRtbCIpJiYobz0hMCl9cmV0dXJuIG8mJiFpPyhhUC5pc0hUTUxFbGVtZW50KGEpJiZhLmFwcGVuZChjKSxuLmFwcGVuZChhKSx1JiYoZT11LmNhbGwobCxhKSkmJmEucmVwbGFjZVdpdGgoZSkpOm4uYXBwZW5kKGMpLG99bGV0IFZTPW5ldyBTZXQoWyJTVFlMRSIsIlNDUklQVCJdKTtmdW5jdGlvbiBLUyhlLHQsbj1uZXcgTWFwLHIpe2xldCBvPVtdO2lmKFZTLmhhcyhlLm5vZGVOYW1lKSlyZXR1cm4gbztsZXQgaT1udWxsO3ZhciBsLHtub2RlTmFtZTpzfT1lLGE9dC5faHRtbENvbnZlcnNpb25zLmdldChzLnRvTG93ZXJDYXNlKCkpO2lmKHM9bnVsbCxhIT09dm9pZCAwKWZvcihsIG9mIGEpYT1sKGUpLGEhPT1udWxsJiYocz09PW51bGx8fHMucHJpb3JpdHk8YS5wcmlvcml0eSkmJihzPWEpO2lmKHM9KGw9cyE9PW51bGw/cy5jb252ZXJzaW9uOm51bGwpP2woZSk6bnVsbCxsPW51bGwscyE9PW51bGwpe2lmKGw9cy5hZnRlcixhPXMubm9kZSxpPUFycmF5LmlzQXJyYXkoYSk/YVthLmxlbmd0aC0xXTphLGkhPT1udWxsKXtmb3IodmFyWyx1XW9mIG4paWYoaT11KGksciksIWkpYnJlYWs7aSYmby5wdXNoKC4uLkFycmF5LmlzQXJyYXkoYSk/YTpbaV0pfXMuZm9yQ2hpbGQhPW51bGwmJm4uc2V0KGUubm9kZU5hbWUscy5mb3JDaGlsZCl9Zm9yKGU9ZS5jaGlsZE5vZGVzLHI9W10sdT0wO3U8ZS5sZW5ndGg7dSsrKXIucHVzaCguLi5LUyhlW3VdLHQsbmV3IE1hcChuKSxpKSk7cmV0dXJuIGwhPW51bGwmJihyPWwocikpLGk9PW51bGw/bz1vLmNvbmNhdChyKTphbC4kaXNFbGVtZW50Tm9kZShpKSYmaS5hcHBlbmQoLi4uciksb31TbS4kZ2VuZXJhdGVIdG1sRnJvbU5vZGVzPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIGRvY3VtZW50PiJ1Inx8dHlwZW9mIHdpbmRvdz4idSIpdGhyb3cgRXJyb3IoIlRvIHVzZSAkZ2VuZXJhdGVIdG1sRnJvbU5vZGVzIGluIGhlYWRsZXNzIG1vZGUgcGxlYXNlIGluaXRpYWxpemUgYSBoZWFkbGVzcyBicm93c2VyIGltcGxlbWVudGF0aW9uIHN1Y2ggYXMgSlNEb20gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4iKTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxyPWFsLiRnZXRSb290KCkuZ2V0Q2hpbGRyZW4oKTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKylIUyhlLHJbb10sbix0KTtyZXR1cm4gbi5pbm5lckhUTUx9O1NtLiRnZW5lcmF0ZU5vZGVzRnJvbURPTT1mdW5jdGlvbihlLHQpe3Q9dC5ib2R5P3QuYm9keS5jaGlsZE5vZGVzOltdO2xldCBuPVtdO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcj10W29dO1ZTLmhhcyhyLm5vZGVOYW1lKXx8KHI9S1MocixlKSxyIT09bnVsbCYmKG49bi5jb25jYXQocikpKX1yZXR1cm4gbn07Y29uc3QgdVA9U207dmFyIGNQPXVQLEdTPWNQLCRwPXpvLHhsPVJ0LGRlPWhlO2Z1bmN0aW9uIEJyKGUpe2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7dC5hcHBlbmQoImNvZGUiLGUpO2ZvcihsZXQgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdC5hcHBlbmQoInYiLGFyZ3VtZW50c1tuXSk7dGhyb3cgRXJyb3IoYE1pbmlmaWVkIExleGljYWwgZXJyb3IgIyR7ZX07IHZpc2l0IGh0dHBzOi8vbGV4aWNhbC5kZXYvZG9jcy9lcnJvcj8ke3R9IGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5gKX1sZXQgWVM9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiO2Z1bmN0aW9uIFhTKGUpe2xldCB0PWRlLiRnZXRTZWxlY3Rpb24oKTtpZih0PT1udWxsKXRocm93IEVycm9yKCJFeHBlY3RlZCB2YWxpZCBMZXhpY2FsU2VsZWN0aW9uIik7cmV0dXJuIGRlLiRpc1JhbmdlU2VsZWN0aW9uKHQpJiZ0LmlzQ29sbGFwc2VkKCl8fHQuZ2V0Tm9kZXMoKS5sZW5ndGg9PT0wPyIiOkdTLiRnZW5lcmF0ZUh0bWxGcm9tTm9kZXMoZSx0KX1mdW5jdGlvbiBRUyhlKXtsZXQgdD1kZS4kZ2V0U2VsZWN0aW9uKCk7aWYodD09bnVsbCl0aHJvdyBFcnJvcigiRXhwZWN0ZWQgdmFsaWQgTGV4aWNhbFNlbGVjdGlvbiIpO3JldHVybiBkZS4kaXNSYW5nZVNlbGVjdGlvbih0KSYmdC5pc0NvbGxhcHNlZCgpfHx0LmdldE5vZGVzKCkubGVuZ3RoPT09MD9udWxsOkpTT04uc3RyaW5naWZ5KFpTKGUsdCkpfWZ1bmN0aW9uIGtwKGUsdCxuKXsoZGUuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKG4pfHx4bC4kZmluZE1hdGNoaW5nUGFyZW50KG4uYW5jaG9yLmdldE5vZGUoKSxyPT5kZS5ERVBSRUNBVEVEXyRpc0dyaWRDZWxsTm9kZShyKSkhPT1udWxsJiZ4bC4kZmluZE1hdGNoaW5nUGFyZW50KG4uZm9jdXMuZ2V0Tm9kZSgpLHI9PmRlLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKHIpKSE9PW51bGwpJiZ0Lmxlbmd0aD09PTEmJmRlLkRFUFJFQ0FURURfJGlzR3JpZE5vZGUodFswXSk/ZlAodCxuLCExLGUpOmRQKHQsbil9ZnVuY3Rpb24gZFAoZSx0KXtsZXQgbj1bXSxyPW51bGw7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2xldCBpPWVbb10sbD1kZS4kaXNMaW5lQnJlYWtOb2RlKGkpO2lmKGx8fGRlLiRpc0RlY29yYXRvck5vZGUoaSkmJmkuaXNJbmxpbmUoKXx8ZGUuJGlzRWxlbWVudE5vZGUoaSkmJmkuaXNJbmxpbmUoKXx8ZGUuJGlzVGV4dE5vZGUoaSl8fGkuaXNQYXJlbnRSZXF1aXJlZCgpKXtpZihyPT09bnVsbCYmKHI9aS5jcmVhdGVQYXJlbnRFbGVtZW50Tm9kZSgpLG4ucHVzaChyKSxsKSljb250aW51ZTtyIT09bnVsbCYmci5hcHBlbmQoaSl9ZWxzZSBuLnB1c2goaSkscj1udWxsfWRlLiRpc1JhbmdlU2VsZWN0aW9uKHQpP3QuaW5zZXJ0Tm9kZXMobik6ZGUuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKHQpJiYoZT10LmFuY2hvci5nZXROb2RlKCksZGUuREVQUkVDQVRFRF8kaXNHcmlkQ2VsbE5vZGUoZSl8fEJyKDQxKSxlLmFwcGVuZCguLi5uKSl9ZnVuY3Rpb24gZlAoZSx0LG4scil7ZS5sZW5ndGg9PT0xJiZkZS5ERVBSRUNBVEVEXyRpc0dyaWROb2RlKGVbMF0pfHxCcig0Mik7dmFyIG89ZVswXTtlPW8uZ2V0Q2hpbGRyZW4oKSxuPW8uZ2V0Rmlyc3RDaGlsZE9yVGhyb3coKS5nZXRDaGlsZHJlblNpemUoKTt2YXIgaT1vLmdldENoaWxkcmVuU2l6ZSgpLGw9eGwuJGZpbmRNYXRjaGluZ1BhcmVudCh0LmFuY2hvci5nZXROb2RlKCksaD0+ZGUuREVQUkVDQVRFRF8kaXNHcmlkQ2VsbE5vZGUoaCkpO3Q9KG89bCYmeGwuJGZpbmRNYXRjaGluZ1BhcmVudChsLGg9PmRlLkRFUFJFQ0FURURfJGlzR3JpZFJvd05vZGUoaCkpKSYmeGwuJGZpbmRNYXRjaGluZ1BhcmVudChvLGg9PmRlLkRFUFJFQ0FURURfJGlzR3JpZE5vZGUoaCkpLGRlLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKGwpJiZkZS5ERVBSRUNBVEVEXyRpc0dyaWRSb3dOb2RlKG8pJiZkZS5ERVBSRUNBVEVEXyRpc0dyaWROb2RlKHQpfHxCcig0Myk7dmFyIHM9by5nZXRJbmRleFdpdGhpblBhcmVudCgpLGE9TWF0aC5taW4odC5nZXRDaGlsZHJlblNpemUoKS0xLHMraS0xKTtpPWwuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSxsPU1hdGgubWluKG8uZ2V0Q2hpbGRyZW5TaXplKCktMSxpK24tMSksbj1NYXRoLm1pbihpLGwpLG89TWF0aC5taW4ocyxhKSxpPU1hdGgubWF4KGksbCkscz1NYXRoLm1heChzLGEpLGE9dC5nZXRDaGlsZHJlbigpLGw9MDtsZXQgdSxjO2ZvcihsZXQgaD1vO2g8PXM7aCsrKXt2YXIgZD1hW2hdO2RlLkRFUFJFQ0FURURfJGlzR3JpZFJvd05vZGUoZCl8fEJyKDI0KTt2YXIgZj1lW2xdO2RlLkRFUFJFQ0FURURfJGlzR3JpZFJvd05vZGUoZil8fEJyKDI0KSxkPWQuZ2V0Q2hpbGRyZW4oKSxmPWYuZ2V0Q2hpbGRyZW4oKTtsZXQgbT0wO2ZvcihsZXQgZz1uO2c8PWk7ZysrKXtsZXQgXz1kW2ddO2RlLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKF8pfHxCcigyNSk7bGV0IHY9ZlttXTtkZS5ERVBSRUNBVEVEXyRpc0dyaWRDZWxsTm9kZSh2KXx8QnIoMjUpLGg9PT1vJiZnPT09bj91PV8uZ2V0S2V5KCk6aD09PXMmJmc9PT1pJiYoYz1fLmdldEtleSgpKTtsZXQgeT1fLmdldENoaWxkcmVuKCk7di5nZXRDaGlsZHJlbigpLmZvckVhY2goeD0+e2RlLiRpc1RleHROb2RlKHgpJiZkZS4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpLmFwcGVuZCh4KSxfLmFwcGVuZCh4KX0pLHkuZm9yRWFjaCh4PT54LnJlbW92ZSgpKSxtKyt9bCsrfXUmJmMmJihlPWRlLkRFUFJFQ0FURURfJGNyZWF0ZUdyaWRTZWxlY3Rpb24oKSxlLnNldCh0LmdldEtleSgpLHUsYyksZGUuJHNldFNlbGVjdGlvbihlKSxyLmRpc3BhdGNoQ29tbWFuZChkZS5TRUxFQ1RJT05fQ0hBTkdFX0NPTU1BTkQsdm9pZCAwKSl9ZnVuY3Rpb24gSlMoZSx0LG4scj1bXSl7bGV0IG89dCE9bnVsbD9uLmlzU2VsZWN0ZWQodCk6ITAsaT1kZS4kaXNFbGVtZW50Tm9kZShuKSYmbi5leGNsdWRlRnJvbUNvcHkoImh0bWwiKTt2YXIgbD1uO2lmKHQhPT1udWxsKXt2YXIgcz0kcC4kY2xvbmVXaXRoUHJvcGVydGllcyhuKTtsPXM9ZGUuJGlzVGV4dE5vZGUocykmJnQhPW51bGw/JHAuJHNsaWNlU2VsZWN0ZWRUZXh0Tm9kZUNvbnRlbnQodCxzKTpzfWxldCBhPWRlLiRpc0VsZW1lbnROb2RlKGwpP2wuZ2V0Q2hpbGRyZW4oKTpbXTt2YXIgdT1sO3M9dS5leHBvcnRKU09OKCk7dmFyIGM9dS5jb25zdHJ1Y3RvcjtzLnR5cGUhPT1jLmdldFR5cGUoKSYmQnIoNTgsYy5uYW1lKTtsZXQgZD1zLmNoaWxkcmVuO2ZvcihkZS4kaXNFbGVtZW50Tm9kZSh1KSYmKEFycmF5LmlzQXJyYXkoZCl8fEJyKDU5LGMubmFtZSkpLGRlLiRpc1RleHROb2RlKGwpJiYobD1sLl9fdGV4dCwwPGwubGVuZ3RoP3MudGV4dD1sOm89ITEpLGw9MDtsPGEubGVuZ3RoO2wrKyl1PWFbbF0sYz1KUyhlLHQsdSxzLmNoaWxkcmVuKSwhbyYmZGUuJGlzRWxlbWVudE5vZGUobikmJmMmJm4uZXh0cmFjdFdpdGhDaGlsZCh1LHQsImNsb25lIikmJihvPSEwKTtpZihvJiYhaSlyLnB1c2gocyk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHMuY2hpbGRyZW4pKWZvcihlPTA7ZTxzLmNoaWxkcmVuLmxlbmd0aDtlKyspci5wdXNoKHMuY2hpbGRyZW5bZV0pO3JldHVybiBvfWZ1bmN0aW9uIFpTKGUsdCl7bGV0IG49W10scj1kZS4kZ2V0Um9vdCgpLmdldENoaWxkcmVuKCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspSlMoZSx0LHJbb10sbik7cmV0dXJue25hbWVzcGFjZTplLl9jb25maWcubmFtZXNwYWNlLG5vZGVzOm59fWZ1bmN0aW9uIHFTKGUpe2xldCB0PVtdO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1kZS4kcGFyc2VTZXJpYWxpemVkTm9kZShlW25dKTtkZS4kaXNUZXh0Tm9kZShyKSYmJHAuJGFkZE5vZGVTdHlsZShyKSx0LnB1c2gocil9cmV0dXJuIHR9bGV0IEJpPW51bGw7ZnVuY3Rpb24gZDAoZSx0KXt2YXIgbj1ZUz8oZS5fd2luZG93fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpOm51bGw7aWYoIW4pcmV0dXJuITE7dmFyIHI9bi5hbmNob3JOb2RlO2lmKG49bi5mb2N1c05vZGUsciE9PW51bGwmJm4hPT1udWxsJiYhZGUuaXNTZWxlY3Rpb25XaXRoaW5FZGl0b3IoZSxyLG4pfHwodC5wcmV2ZW50RGVmYXVsdCgpLHQ9dC5jbGlwYm9hcmREYXRhLHI9ZGUuJGdldFNlbGVjdGlvbigpLHQ9PT1udWxsfHxyPT09bnVsbCkpcmV0dXJuITE7bj1YUyhlKSxlPVFTKGUpO2xldCBvPSIiO3JldHVybiByIT09bnVsbCYmKG89ci5nZXRUZXh0Q29udGVudCgpKSxuIT09bnVsbCYmdC5zZXREYXRhKCJ0ZXh0L2h0bWwiLG4pLGUhPT1udWxsJiZ0LnNldERhdGEoImFwcGxpY2F0aW9uL3gtbGV4aWNhbC1lZGl0b3IiLGUpLHQuc2V0RGF0YSgidGV4dC9wbGFpbiIsbyksITB9dG8uJGdlbmVyYXRlSlNPTkZyb21TZWxlY3RlZE5vZGVzPVpTO3RvLiRnZW5lcmF0ZU5vZGVzRnJvbVNlcmlhbGl6ZWROb2Rlcz1xUzt0by4kZ2V0SHRtbENvbnRlbnQ9WFM7dG8uJGdldExleGljYWxDb250ZW50PVFTO3RvLiRpbnNlcnREYXRhVHJhbnNmZXJGb3JQbGFpblRleHQ9ZnVuY3Rpb24oZSx0KXtlPWUuZ2V0RGF0YSgidGV4dC9wbGFpbiIpfHxlLmdldERhdGEoInRleHQvdXJpLWxpc3QiKSxlIT1udWxsJiZ0Lmluc2VydFJhd1RleHQoZSl9O3RvLiRpbnNlcnREYXRhVHJhbnNmZXJGb3JSaWNoVGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5nZXREYXRhKCJhcHBsaWNhdGlvbi94LWxleGljYWwtZWRpdG9yIik7aWYocil0cnl7bGV0IGw9SlNPTi5wYXJzZShyKTtpZihsLm5hbWVzcGFjZT09PW4uX2NvbmZpZy5uYW1lc3BhY2UmJkFycmF5LmlzQXJyYXkobC5ub2Rlcykpe2xldCBzPXFTKGwubm9kZXMpO3JldHVybiBrcChuLHMsdCl9fWNhdGNoe31pZihyPWUuZ2V0RGF0YSgidGV4dC9odG1sIikpdHJ5e3ZhciBvPW5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcociwidGV4dC9odG1sIiksaT1HUy4kZ2VuZXJhdGVOb2Rlc0Zyb21ET00obixvKTtyZXR1cm4ga3AobixpLHQpfWNhdGNoe31pZihlPWUuZ2V0RGF0YSgidGV4dC9wbGFpbiIpfHxlLmdldERhdGEoInRleHQvdXJpLWxpc3QiKSxlIT1udWxsKWlmKGRlLiRpc1JhbmdlU2VsZWN0aW9uKHQpKWZvcihlPWUuc3BsaXQoLyhccj9cbnxcdCkvKSxuPWUubGVuZ3RoLG89MDtvPG47bysrKWk9ZVtvXSxpPT09YApgfHxpPT09YFxyCmA/dC5pbnNlcnRQYXJhZ3JhcGgoKTppPT09IgkiP3QuaW5zZXJ0Tm9kZXMoW2RlLiRjcmVhdGVUYWJOb2RlKCldKTp0Lmluc2VydFRleHQoaSk7ZWxzZSB0Lmluc2VydFJhd1RleHQoZSl9O3RvLiRpbnNlcnRHZW5lcmF0ZWROb2Rlcz1rcDt0by5jb3B5VG9DbGlwYm9hcmQ9YXN5bmMgZnVuY3Rpb24oZSx0KXtpZihCaSE9PW51bGwpcmV0dXJuITE7aWYodCE9PW51bGwpcmV0dXJuIG5ldyBQcm9taXNlKGw9PntlLnVwZGF0ZSgoKT0+e2woZDAoZSx0KSl9KX0pO3ZhciBuPWUuZ2V0Um9vdEVsZW1lbnQoKTtsZXQgcj1lLl93aW5kb3c9PW51bGw/d2luZG93LmRvY3VtZW50OmUuX3dpbmRvdy5kb2N1bWVudCxvPVlTPyhlLl93aW5kb3d8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKCk6bnVsbDtpZihuPT09bnVsbHx8bz09PW51bGwpcmV0dXJuITE7bGV0IGk9ci5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIGkuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246IGZpeGVkOyB0b3A6IC0xMDAwcHg7IixpLmFwcGVuZChyLmNyZWF0ZVRleHROb2RlKCIjIikpLG4uYXBwZW5kKGkpLG49bmV3IFJhbmdlLG4uc2V0U3RhcnQoaSwwKSxuLnNldEVuZChpLDEpLG8ucmVtb3ZlQWxsUmFuZ2VzKCksby5hZGRSYW5nZShuKSxuZXcgUHJvbWlzZShsPT57bGV0IHM9ZS5yZWdpc3RlckNvbW1hbmQoZGUuQ09QWV9DT01NQU5ELGE9Pih4bC5vYmplY3RLbGFzc0VxdWFscyhhLENsaXBib2FyZEV2ZW50KSYmKHMoKSxCaSE9PW51bGwmJih3aW5kb3cuY2xlYXJUaW1lb3V0KEJpKSxCaT1udWxsKSxsKGQwKGUsYSkpKSwhMCksZGUuQ09NTUFORF9QUklPUklUWV9DUklUSUNBTCk7Qmk9d2luZG93LnNldFRpbWVvdXQoKCk9PntzKCksQmk9bnVsbCxsKCExKX0sNTApLHIuZXhlY0NvbW1hbmQoImNvcHkiKSxpLnJlbW92ZSgpfSl9O2NvbnN0IGhQPXRvO3ZhciBwUD1oUCxLYz1wUCxidT16byxfcj1SdCxBPWhlO2Z1bmN0aW9uIGYwKGUsdCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50PCJ1Ij8oZT1kb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KGUsdCksZT09PW51bGw/bnVsbDp7bm9kZTplLnN0YXJ0Q29udGFpbmVyLG9mZnNldDplLnN0YXJ0T2Zmc2V0fSk6ZG9jdW1lbnQuY2FyZXRQb3NpdGlvbkZyb21Qb2ludCE9PSJ1bmRlZmluZWQiPyhlPWRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQoZSx0KSxlPT09bnVsbD9udWxsOntub2RlOmUub2Zmc2V0Tm9kZSxvZmZzZXQ6ZS5vZmZzZXR9KTpudWxsfWxldCBabD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudDwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudDwidSIsZ1A9WmwmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQ/ZG9jdW1lbnQuZG9jdW1lbnRNb2RlOm51bGwsbVA9WmwmJiJJbnB1dEV2ZW50ImluIHdpbmRvdyYmIWdQPyJnZXRUYXJnZXRSYW5nZXMiaW4gbmV3IHdpbmRvdy5JbnB1dEV2ZW50KCJpbnB1dCIpOiExLHZQPVpsJiYvVmVyc2lvblwvW1xkLl0rLipTYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkseVA9WmwmJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhd2luZG93Lk1TU3RyZWFtLHhQPVpsJiYvXig/PS4qQ2hyb21lKS4qL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx3UD1abCYmL0FwcGxlV2ViS2l0XC9bXGQuXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF4UCxicD1BLmNyZWF0ZUNvbW1hbmQoIkRSQUdfRFJPUF9QQVNURV9GSUxFIiksRW09Y2xhc3MgZUUgZXh0ZW5kcyBBLkVsZW1lbnROb2Rle3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuInF1b3RlIn1zdGF0aWMgY2xvbmUodCl7cmV0dXJuIG5ldyBlRSh0Ll9fa2V5KX1jb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1jcmVhdGVET00odCl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYmxvY2txdW90ZSIpO3JldHVybiBfci5hZGRDbGFzc05hbWVzVG9FbGVtZW50KG4sdC50aGVtZS5xdW90ZSksbn11cGRhdGVET00oKXtyZXR1cm4hMX1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJue2Jsb2NrcXVvdGU6KCk9Pih7Y29udmVyc2lvbjpfUCxwcmlvcml0eTowfSl9fWV4cG9ydERPTSh0KXtpZih7ZWxlbWVudDp0fT1zdXBlci5leHBvcnRET00odCksdCYmX3IuaXNIVE1MRWxlbWVudCh0KSl7dGhpcy5pc0VtcHR5KCkmJnQuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpO3ZhciBuPXRoaXMuZ2V0Rm9ybWF0VHlwZSgpO3Quc3R5bGUudGV4dEFsaWduPW4sKG49dGhpcy5nZXREaXJlY3Rpb24oKSkmJih0LmRpcj1uKX1yZXR1cm57ZWxlbWVudDp0fX1zdGF0aWMgaW1wb3J0SlNPTih0KXtsZXQgbj1DbSgpO3JldHVybiBuLnNldEZvcm1hdCh0LmZvcm1hdCksbi5zZXRJbmRlbnQodC5pbmRlbnQpLG4uc2V0RGlyZWN0aW9uKHQuZGlyZWN0aW9uKSxufWV4cG9ydEpTT04oKXtyZXR1cm57Li4uc3VwZXIuZXhwb3J0SlNPTigpLHR5cGU6InF1b3RlIn19aW5zZXJ0TmV3QWZ0ZXIodCxuKXt0PUEuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKTtsZXQgcj10aGlzLmdldERpcmVjdGlvbigpO3JldHVybiB0LnNldERpcmVjdGlvbihyKSx0aGlzLmluc2VydEFmdGVyKHQsbiksdH1jb2xsYXBzZUF0U3RhcnQoKXtsZXQgdD1BLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKG49PnQuYXBwZW5kKG4pKSx0aGlzLnJlcGxhY2UodCksITB9fTtmdW5jdGlvbiBDbSgpe3JldHVybiBBLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcgRW0pfWxldCAkbT1jbGFzcyB0RSBleHRlbmRzIEEuRWxlbWVudE5vZGV7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4iaGVhZGluZyJ9c3RhdGljIGNsb25lKHQpe3JldHVybiBuZXcgdEUodC5fX3RhZyx0Ll9fa2V5KX1jb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKG4pLHRoaXMuX190YWc9dH1nZXRUYWcoKXtyZXR1cm4gdGhpcy5fX3RhZ31jcmVhdGVET00odCl7bGV0IG49dGhpcy5fX3RhZyxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobik7cmV0dXJuIHQ9dC50aGVtZS5oZWFkaW5nLHQhPT12b2lkIDAmJl9yLmFkZENsYXNzTmFtZXNUb0VsZW1lbnQocix0W25dKSxyfXVwZGF0ZURPTSgpe3JldHVybiExfXN0YXRpYyBpbXBvcnRET00oKXtyZXR1cm57aDE6KCk9Pih7Y29udmVyc2lvbjpXaSxwcmlvcml0eTowfSksaDI6KCk9Pih7Y29udmVyc2lvbjpXaSxwcmlvcml0eTowfSksaDM6KCk9Pih7Y29udmVyc2lvbjpXaSxwcmlvcml0eTowfSksaDQ6KCk9Pih7Y29udmVyc2lvbjpXaSxwcmlvcml0eTowfSksaDU6KCk9Pih7Y29udmVyc2lvbjpXaSxwcmlvcml0eTowfSksaDY6KCk9Pih7Y29udmVyc2lvbjpXaSxwcmlvcml0eTowfSkscDp0PT4odD10LmZpcnN0Q2hpbGQsdCE9PW51bGwmJmgwKHQpP3tjb252ZXJzaW9uOigpPT4oe25vZGU6bnVsbH0pLHByaW9yaXR5OjN9Om51bGwpLHNwYW46dD0+aDAodCk/e2NvbnZlcnNpb246KCk9Pih7bm9kZTp1bCgiaDEiKX0pLHByaW9yaXR5OjN9Om51bGx9fWV4cG9ydERPTSh0KXtpZih7ZWxlbWVudDp0fT1zdXBlci5leHBvcnRET00odCksdCYmX3IuaXNIVE1MRWxlbWVudCh0KSl7dGhpcy5pc0VtcHR5KCkmJnQuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpO3ZhciBuPXRoaXMuZ2V0Rm9ybWF0VHlwZSgpO3Quc3R5bGUudGV4dEFsaWduPW4sKG49dGhpcy5nZXREaXJlY3Rpb24oKSkmJih0LmRpcj1uKX1yZXR1cm57ZWxlbWVudDp0fX1zdGF0aWMgaW1wb3J0SlNPTih0KXtsZXQgbj11bCh0LnRhZyk7cmV0dXJuIG4uc2V0Rm9ybWF0KHQuZm9ybWF0KSxuLnNldEluZGVudCh0LmluZGVudCksbi5zZXREaXJlY3Rpb24odC5kaXJlY3Rpb24pLG59ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksdGFnOnRoaXMuZ2V0VGFnKCksdHlwZToiaGVhZGluZyIsdmVyc2lvbjoxfX1pbnNlcnROZXdBZnRlcih0LG49ITApe3Q9dD90LmFuY2hvci5vZmZzZXQ6MCx0PTA8dCYmdDx0aGlzLmdldFRleHRDb250ZW50U2l6ZSgpP3VsKHRoaXMuZ2V0VGFnKCkpOkEuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKTtsZXQgcj10aGlzLmdldERpcmVjdGlvbigpO3JldHVybiB0LnNldERpcmVjdGlvbihyKSx0aGlzLmluc2VydEFmdGVyKHQsbiksdH1jb2xsYXBzZUF0U3RhcnQoKXtsZXQgdD10aGlzLmlzRW1wdHkoKT9BLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk6dWwodGhpcy5nZXRUYWcoKSk7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKG49PnQuYXBwZW5kKG4pKSx0aGlzLnJlcGxhY2UodCksITB9ZXh0cmFjdFdpdGhDaGlsZCgpe3JldHVybiEwfX07ZnVuY3Rpb24gaDAoZSl7cmV0dXJuIGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJzcGFuIj9lLnN0eWxlLmZvbnRTaXplPT09IjI2cHQiOiExfWZ1bmN0aW9uIFdpKGUpe2xldCB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPW51bGw7cmV0dXJuKHQ9PT0iaDEifHx0PT09ImgyInx8dD09PSJoMyJ8fHQ9PT0iaDQifHx0PT09Img1Inx8dD09PSJoNiIpJiYobj11bCh0KSxlLnN0eWxlIT09bnVsbCYmbi5zZXRGb3JtYXQoZS5zdHlsZS50ZXh0QWxpZ24pKSx7bm9kZTpufX1mdW5jdGlvbiBfUChlKXtsZXQgdD1DbSgpO3JldHVybiBlLnN0eWxlIT09bnVsbCYmdC5zZXRGb3JtYXQoZS5zdHlsZS50ZXh0QWxpZ24pLHtub2RlOnR9fWZ1bmN0aW9uIHVsKGUpe3JldHVybiBBLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcgJG0oZSkpfWZ1bmN0aW9uIFNQKGUsdCl7ZS5wcmV2ZW50RGVmYXVsdCgpLHQudXBkYXRlKCgpPT57bGV0IG49QS4kZ2V0U2VsZWN0aW9uKCkscj1lIGluc3RhbmNlb2YgSW5wdXRFdmVudHx8ZSBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQ/bnVsbDplLmNsaXBib2FyZERhdGE7ciE9bnVsbCYmKEEuJGlzUmFuZ2VTZWxlY3Rpb24obil8fEEuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKG4pKSYmS2MuJGluc2VydERhdGFUcmFuc2ZlckZvclJpY2hUZXh0KHIsbix0KX0se3RhZzoicGFzdGUifSl9YXN5bmMgZnVuY3Rpb24gRVAoZSx0KXthd2FpdCBLYy5jb3B5VG9DbGlwYm9hcmQodCxfci5vYmplY3RLbGFzc0VxdWFscyhlLENsaXBib2FyZEV2ZW50KT9lOm51bGwpLHQudXBkYXRlKCgpPT57bGV0IG49QS4kZ2V0U2VsZWN0aW9uKCk7QS4kaXNSYW5nZVNlbGVjdGlvbihuKT9uLnJlbW92ZVRleHQoKTpBLiRpc05vZGVTZWxlY3Rpb24obikmJm4uZ2V0Tm9kZXMoKS5mb3JFYWNoKHI9PnIucmVtb3ZlKCkpfSl9ZnVuY3Rpb24gUnMoZSl7bGV0IHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgRHJhZ0V2ZW50P3Q9ZS5kYXRhVHJhbnNmZXI6ZSBpbnN0YW5jZW9mIENsaXBib2FyZEV2ZW50JiYodD1lLmNsaXBib2FyZERhdGEpLHQ9PT1udWxsKXJldHVyblshMSxbXSwhMV07dmFyIG49dC50eXBlcztyZXR1cm4gZT1uLmluY2x1ZGVzKCJGaWxlcyIpLG49bi5pbmNsdWRlcygidGV4dC9odG1sIil8fG4uaW5jbHVkZXMoInRleHQvcGxhaW4iKSxbZSxBcnJheS5mcm9tKHQuZmlsZXMpLG5dfWZ1bmN0aW9uIHAwKGUpe3ZhciB0PUEuJGdldFNlbGVjdGlvbigpO2lmKCFBLiRpc1JhbmdlU2VsZWN0aW9uKHQpKXJldHVybiExO2xldCBuPW5ldyBTZXQ7dD10LmdldE5vZGVzKCk7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciByPXRbaV0sbz1yLmdldEtleSgpO24uaGFzKG8pfHwocj1fci4kZ2V0TmVhcmVzdEJsb2NrRWxlbWVudEFuY2VzdG9yT3JUaHJvdyhyKSxvPXIuZ2V0S2V5KCksci5jYW5JbmRlbnQoKSYmIW4uaGFzKG8pJiYobi5hZGQobyksZShyKSkpfXJldHVybiAwPG4uc2l6ZX1mdW5jdGlvbiBUdShlKXtyZXR1cm4gZT1BLiRnZXROZWFyZXN0Tm9kZUZyb21ET01Ob2RlKGUpLEEuJGlzRGVjb3JhdG9yTm9kZShlKX1Bci4kY3JlYXRlSGVhZGluZ05vZGU9dWw7QXIuJGNyZWF0ZVF1b3RlTm9kZT1DbTtBci4kaXNIZWFkaW5nTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mICRtfTtBci4kaXNRdW90ZU5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBFbX07QXIuRFJBR19EUk9QX1BBU1RFPWJwO0FyLkhlYWRpbmdOb2RlPSRtO0FyLlF1b3RlTm9kZT1FbTtBci5ldmVudEZpbGVzPVJzO0FyLnJlZ2lzdGVyUmljaFRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIF9yLm1lcmdlUmVnaXN0ZXIoZS5yZWdpc3RlckNvbW1hbmQoQS5DTElDS19DT01NQU5ELCgpPT57Y29uc3QgdD1BLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gQS4kaXNOb2RlU2VsZWN0aW9uKHQpPyh0LmNsZWFyKCksITApOiExfSwwKSxlLnJlZ2lzdGVyQ29tbWFuZChBLkRFTEVURV9DSEFSQUNURVJfQ09NTUFORCx0PT57Y29uc3Qgbj1BLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gQS4kaXNSYW5nZVNlbGVjdGlvbihuKT8obi5kZWxldGVDaGFyYWN0ZXIodCksITApOiExfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLkRFTEVURV9XT1JEX0NPTU1BTkQsdD0+e2NvbnN0IG49QS4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIEEuJGlzUmFuZ2VTZWxlY3Rpb24obik/KG4uZGVsZXRlV29yZCh0KSwhMCk6ITF9LEEuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLGUucmVnaXN0ZXJDb21tYW5kKEEuREVMRVRFX0xJTkVfQ09NTUFORCx0PT57Y29uc3Qgbj1BLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gQS4kaXNSYW5nZVNlbGVjdGlvbihuKT8obi5kZWxldGVMaW5lKHQpLCEwKTohMX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5DT05UUk9MTEVEX1RFWFRfSU5TRVJUSU9OX0NPTU1BTkQsdD0+e2NvbnN0IG49QS4kZ2V0U2VsZWN0aW9uKCk7aWYodHlwZW9mIHQ9PSJzdHJpbmciKUEuJGlzUmFuZ2VTZWxlY3Rpb24obik/bi5pbnNlcnRUZXh0KHQpOkEuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKG4pO2Vsc2V7aWYoIUEuJGlzUmFuZ2VTZWxlY3Rpb24obikmJiFBLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihuKSlyZXR1cm4hMTtjb25zdCByPXQuZGF0YVRyYW5zZmVyO3IhPW51bGw/S2MuJGluc2VydERhdGFUcmFuc2ZlckZvclJpY2hUZXh0KHIsbixlKTpBLiRpc1JhbmdlU2VsZWN0aW9uKG4pJiYodD10LmRhdGEpJiZuLmluc2VydFRleHQodCl9cmV0dXJuITB9LEEuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLGUucmVnaXN0ZXJDb21tYW5kKEEuUkVNT1ZFX1RFWFRfQ09NTUFORCwoKT0+e2NvbnN0IHQ9QS4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIEEuJGlzUmFuZ2VTZWxlY3Rpb24odCk/KHQucmVtb3ZlVGV4dCgpLCEwKTohMX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5GT1JNQVRfVEVYVF9DT01NQU5ELHQ9Pntjb25zdCBuPUEuJGdldFNlbGVjdGlvbigpO3JldHVybiBBLiRpc1JhbmdlU2VsZWN0aW9uKG4pPyhuLmZvcm1hdFRleHQodCksITApOiExfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLkZPUk1BVF9FTEVNRU5UX0NPTU1BTkQsdD0+e3ZhciBuPUEuJGdldFNlbGVjdGlvbigpO2lmKCFBLiRpc1JhbmdlU2VsZWN0aW9uKG4pJiYhQS4kaXNOb2RlU2VsZWN0aW9uKG4pKXJldHVybiExO249bi5nZXROb2RlcygpO2Zvcihjb25zdCByIG9mIG4pbj1fci4kZmluZE1hdGNoaW5nUGFyZW50KHIsbz0+QS4kaXNFbGVtZW50Tm9kZShvKSYmIW8uaXNJbmxpbmUoKSksbiE9PW51bGwmJm4uc2V0Rm9ybWF0KHQpO3JldHVybiEwfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLklOU0VSVF9MSU5FX0JSRUFLX0NPTU1BTkQsdD0+e2NvbnN0IG49QS4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIEEuJGlzUmFuZ2VTZWxlY3Rpb24obik/KG4uaW5zZXJ0TGluZUJyZWFrKHQpLCEwKTohMX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5JTlNFUlRfUEFSQUdSQVBIX0NPTU1BTkQsKCk9Pntjb25zdCB0PUEuJGdldFNlbGVjdGlvbigpO3JldHVybiBBLiRpc1JhbmdlU2VsZWN0aW9uKHQpPyh0Lmluc2VydFBhcmFncmFwaCgpLCEwKTohMX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5JTlNFUlRfVEFCX0NPTU1BTkQsKCk9PihBLiRpbnNlcnROb2RlcyhbQS4kY3JlYXRlVGFiTm9kZSgpXSksITApLEEuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLGUucmVnaXN0ZXJDb21tYW5kKEEuSU5ERU5UX0NPTlRFTlRfQ09NTUFORCwoKT0+cDAodD0+e2NvbnN0IG49dC5nZXRJbmRlbnQoKTt0LnNldEluZGVudChuKzEpfSksQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5PVVRERU5UX0NPTlRFTlRfQ09NTUFORCwoKT0+cDAodD0+e2NvbnN0IG49dC5nZXRJbmRlbnQoKTswPG4mJnQuc2V0SW5kZW50KG4tMSl9KSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLktFWV9BUlJPV19VUF9DT01NQU5ELHQ9Pnt2YXIgbj1BLiRnZXRTZWxlY3Rpb24oKTtpZihBLiRpc05vZGVTZWxlY3Rpb24obikmJiFUdSh0LnRhcmdldCkpe2lmKHQ9bi5nZXROb2RlcygpLDA8dC5sZW5ndGgpcmV0dXJuIHRbMF0uc2VsZWN0UHJldmlvdXMoKSwhMH1lbHNlIGlmKEEuJGlzUmFuZ2VTZWxlY3Rpb24obikmJihuPUEuJGdldEFkamFjZW50Tm9kZShuLmZvY3VzLCEwKSwhdC5zaGlmdEtleSYmQS4kaXNEZWNvcmF0b3JOb2RlKG4pJiYhbi5pc0lzb2xhdGVkKCkmJiFuLmlzSW5saW5lKCkpKXJldHVybiBuLnNlbGVjdFByZXZpb3VzKCksdC5wcmV2ZW50RGVmYXVsdCgpLCEwO3JldHVybiExfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLktFWV9BUlJPV19ET1dOX0NPTU1BTkQsdD0+e3ZhciBuPUEuJGdldFNlbGVjdGlvbigpO2lmKEEuJGlzTm9kZVNlbGVjdGlvbihuKSl7aWYodD1uLmdldE5vZGVzKCksMDx0Lmxlbmd0aClyZXR1cm4gdFswXS5zZWxlY3ROZXh0KDAsMCksITB9ZWxzZSBpZihBLiRpc1JhbmdlU2VsZWN0aW9uKG4pKXtsZXQgcj1uLmZvY3VzO2lmKHIua2V5PT09InJvb3QiJiZyLm9mZnNldD09PUEuJGdldFJvb3QoKS5nZXRDaGlsZHJlblNpemUoKSlyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLCEwO2lmKG49QS4kZ2V0QWRqYWNlbnROb2RlKG4uZm9jdXMsITEpLCF0LnNoaWZ0S2V5JiZBLiRpc0RlY29yYXRvck5vZGUobikmJiFuLmlzSXNvbGF0ZWQoKSYmIW4uaXNJbmxpbmUoKSlyZXR1cm4gbi5zZWxlY3ROZXh0KCksdC5wcmV2ZW50RGVmYXVsdCgpLCEwfXJldHVybiExfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLktFWV9BUlJPV19MRUZUX0NPTU1BTkQsdD0+e2NvbnN0IG49QS4kZ2V0U2VsZWN0aW9uKCk7aWYoQS4kaXNOb2RlU2VsZWN0aW9uKG4pKXt2YXIgcj1uLmdldE5vZGVzKCk7aWYoMDxyLmxlbmd0aClyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLHJbMF0uc2VsZWN0UHJldmlvdXMoKSwhMH1yZXR1cm4gQS4kaXNSYW5nZVNlbGVjdGlvbihuKSYmYnUuJHNob3VsZE92ZXJyaWRlRGVmYXVsdENoYXJhY3RlclNlbGVjdGlvbihuLCEwKT8ocj10LnNoaWZ0S2V5LHQucHJldmVudERlZmF1bHQoKSxidS4kbW92ZUNoYXJhY3RlcihuLHIsITApLCEwKTohMX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5LRVlfQVJST1dfUklHSFRfQ09NTUFORCx0PT57Y29uc3Qgbj1BLiRnZXRTZWxlY3Rpb24oKTtpZihBLiRpc05vZGVTZWxlY3Rpb24obikmJiFUdSh0LnRhcmdldCkpe3ZhciByPW4uZ2V0Tm9kZXMoKTtpZigwPHIubGVuZ3RoKXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksclswXS5zZWxlY3ROZXh0KDAsMCksITB9cmV0dXJuIEEuJGlzUmFuZ2VTZWxlY3Rpb24obik/KHI9dC5zaGlmdEtleSxidS4kc2hvdWxkT3ZlcnJpZGVEZWZhdWx0Q2hhcmFjdGVyU2VsZWN0aW9uKG4sITEpPyh0LnByZXZlbnREZWZhdWx0KCksYnUuJG1vdmVDaGFyYWN0ZXIobixyLCExKSwhMCk6ITEpOiExfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLktFWV9CQUNLU1BBQ0VfQ09NTUFORCx0PT57aWYoVHUodC50YXJnZXQpKXJldHVybiExO2NvbnN0IG49QS4kZ2V0U2VsZWN0aW9uKCk7aWYoIUEuJGlzUmFuZ2VTZWxlY3Rpb24obikpcmV0dXJuITE7dC5wcmV2ZW50RGVmYXVsdCgpLHthbmNob3I6dH09bjtjb25zdCByPXQuZ2V0Tm9kZSgpO3JldHVybiBuLmlzQ29sbGFwc2VkKCkmJnQub2Zmc2V0PT09MCYmIUEuJGlzUm9vdE5vZGUocikmJjA8X3IuJGdldE5lYXJlc3RCbG9ja0VsZW1lbnRBbmNlc3Rvck9yVGhyb3cocikuZ2V0SW5kZW50KCk/ZS5kaXNwYXRjaENvbW1hbmQoQS5PVVRERU5UX0NPTlRFTlRfQ09NTUFORCx2b2lkIDApOmUuZGlzcGF0Y2hDb21tYW5kKEEuREVMRVRFX0NIQVJBQ1RFUl9DT01NQU5ELCEwKX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5LRVlfREVMRVRFX0NPTU1BTkQsdD0+e2lmKFR1KHQudGFyZ2V0KSlyZXR1cm4hMTtjb25zdCBuPUEuJGdldFNlbGVjdGlvbigpO3JldHVybiBBLiRpc1JhbmdlU2VsZWN0aW9uKG4pPyh0LnByZXZlbnREZWZhdWx0KCksZS5kaXNwYXRjaENvbW1hbmQoQS5ERUxFVEVfQ0hBUkFDVEVSX0NPTU1BTkQsITEpKTohMX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5LRVlfRU5URVJfQ09NTUFORCx0PT57Y29uc3Qgbj1BLiRnZXRTZWxlY3Rpb24oKTtpZighQS4kaXNSYW5nZVNlbGVjdGlvbihuKSlyZXR1cm4hMTtpZih0IT09bnVsbCl7aWYoKHlQfHx2UHx8d1ApJiZtUClyZXR1cm4hMTtpZih0LnByZXZlbnREZWZhdWx0KCksdC5zaGlmdEtleSlyZXR1cm4gZS5kaXNwYXRjaENvbW1hbmQoQS5JTlNFUlRfTElORV9CUkVBS19DT01NQU5ELCExKX1yZXR1cm4gZS5kaXNwYXRjaENvbW1hbmQoQS5JTlNFUlRfUEFSQUdSQVBIX0NPTU1BTkQsdm9pZCAwKX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5LRVlfRVNDQVBFX0NPTU1BTkQsKCk9Pntjb25zdCB0PUEuJGdldFNlbGVjdGlvbigpO3JldHVybiBBLiRpc1JhbmdlU2VsZWN0aW9uKHQpPyhlLmJsdXIoKSwhMCk6ITF9LEEuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLGUucmVnaXN0ZXJDb21tYW5kKEEuRFJPUF9DT01NQU5ELHQ9Pntjb25zdFssbl09UnModCk7aWYoMDxuLmxlbmd0aCl7dmFyIHI9ZjAodC5jbGllbnRYLHQuY2xpZW50WSk7aWYociE9PW51bGwpe2NvbnN0e29mZnNldDppLG5vZGU6bH09cjt2YXIgbz1BLiRnZXROZWFyZXN0Tm9kZUZyb21ET01Ob2RlKGwpO2lmKG8hPT1udWxsKXtpZihyPUEuJGNyZWF0ZVJhbmdlU2VsZWN0aW9uKCksQS4kaXNUZXh0Tm9kZShvKSlyLmFuY2hvci5zZXQoby5nZXRLZXkoKSxpLCJ0ZXh0Iiksci5mb2N1cy5zZXQoby5nZXRLZXkoKSxpLCJ0ZXh0Iik7ZWxzZXtjb25zdCBzPW8uZ2V0UGFyZW50T3JUaHJvdygpLmdldEtleSgpO289by5nZXRJbmRleFdpdGhpblBhcmVudCgpKzEsci5hbmNob3Iuc2V0KHMsbywiZWxlbWVudCIpLHIuZm9jdXMuc2V0KHMsbywiZWxlbWVudCIpfXI9QS4kbm9ybWFsaXplU2VsZWN0aW9uX19FWFBFUklNRU5UQUwociksQS4kc2V0U2VsZWN0aW9uKHIpfWUuZGlzcGF0Y2hDb21tYW5kKGJwLG4pfXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksITB9cmV0dXJuIHQ9QS4kZ2V0U2VsZWN0aW9uKCksISFBLiRpc1JhbmdlU2VsZWN0aW9uKHQpfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLkRSQUdTVEFSVF9DT01NQU5ELHQ9PntbdF09UnModCk7Y29uc3Qgbj1BLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4hKHQmJiFBLiRpc1JhbmdlU2VsZWN0aW9uKG4pKX0sQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5EUkFHT1ZFUl9DT01NQU5ELHQ9Pnt2YXJbbl09UnModCk7Y29uc3Qgcj1BLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gbiYmIUEuJGlzUmFuZ2VTZWxlY3Rpb24ocik/ITE6KG49ZjAodC5jbGllbnRYLHQuY2xpZW50WSksbiE9PW51bGwmJihuPUEuJGdldE5lYXJlc3ROb2RlRnJvbURPTU5vZGUobi5ub2RlKSxBLiRpc0RlY29yYXRvck5vZGUobikmJnQucHJldmVudERlZmF1bHQoKSksITApfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLlNFTEVDVF9BTExfQ09NTUFORCwoKT0+KEEuJHNlbGVjdEFsbCgpLCEwKSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSxlLnJlZ2lzdGVyQ29tbWFuZChBLkNPUFlfQ09NTUFORCx0PT4oS2MuY29weVRvQ2xpcGJvYXJkKGUsX3Iub2JqZWN0S2xhc3NFcXVhbHModCxDbGlwYm9hcmRFdmVudCk/dDpudWxsKSwhMCksQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5DVVRfQ09NTUFORCx0PT4oRVAodCxlKSwhMCksQS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksZS5yZWdpc3RlckNvbW1hbmQoQS5QQVNURV9DT01NQU5ELHQ9Pntjb25zdFssbixyXT1Scyh0KTtpZigwPG4ubGVuZ3RoJiYhcilyZXR1cm4gZS5kaXNwYXRjaENvbW1hbmQoYnAsbiksITA7aWYoQS5pc1NlbGVjdGlvbkNhcHR1cmVkSW5EZWNvcmF0b3JJbnB1dCh0LnRhcmdldCkpcmV0dXJuITE7Y29uc3Qgbz1BLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gQS4kaXNSYW5nZVNlbGVjdGlvbihvKXx8QS5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb24obyk/KFNQKHQsZSksITApOiExfSxBLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSl9O2NvbnN0IENQPUFyO3ZhciBKcz1DUCxuRT1kciwkUD1yUCx6bj1wLGtQPWlQLHJFPVJ0LGcwPU5yLGJQPXNQLFRQPUpzLGttPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50PCJ1Ij96bi51c2VMYXlvdXRFZmZlY3Q6em4udXNlRWZmZWN0O2Z1bmN0aW9uIG0wKGUpe3JldHVybiBlLmdldEVkaXRvclN0YXRlKCkucmVhZChrUC4kY2FuU2hvd1BsYWNlaG9sZGVyQ3VycnkoZS5pc0NvbXBvc2luZygpKSl9ZnVuY3Rpb24gTlAoZSl7bGV0W3Qsbl09em4udXNlU3RhdGUoKCk9Pm0wKGUpKTtyZXR1cm4ga20oKCk9PntmdW5jdGlvbiByKCl7bGV0IG89bTAoZSk7bihvKX1yZXR1cm4gcigpLHJFLm1lcmdlUmVnaXN0ZXIoZS5yZWdpc3RlclVwZGF0ZUxpc3RlbmVyKCgpPT57cigpfSksZS5yZWdpc3RlckVkaXRhYmxlTGlzdGVuZXIoKCk9PntyKCl9KSl9LFtlXSksdH1mdW5jdGlvbiBSUChlLHQpe2xldFtuLHJdPXpuLnVzZVN0YXRlKCgpPT5lLmdldERlY29yYXRvcnMoKSk7cmV0dXJuIGttKCgpPT5lLnJlZ2lzdGVyRGVjb3JhdG9yTGlzdGVuZXIobz0+e2cwLmZsdXNoU3luYygoKT0+e3Iobyl9KX0pLFtlXSksem4udXNlRWZmZWN0KCgpPT57cihlLmdldERlY29yYXRvcnMoKSl9LFtlXSksem4udXNlTWVtbygoKT0+e2xldCBvPVtdLGk9T2JqZWN0LmtleXMobik7Zm9yKGxldCBsPTA7bDxpLmxlbmd0aDtsKyspe2xldCBzPWlbbF0sYT16bi5jcmVhdGVFbGVtZW50KHQse29uRXJyb3I6Yz0+ZS5fb25FcnJvcihjKX0sem4uY3JlYXRlRWxlbWVudCh6bi5TdXNwZW5zZSx7ZmFsbGJhY2s6bnVsbH0sbltzXSkpLHU9ZS5nZXRFbGVtZW50QnlLZXkocyk7dSE9PW51bGwmJm8ucHVzaChnMC5jcmVhdGVQb3J0YWwoYSx1LHMpKX1yZXR1cm4gb30sW3QsbixlXSl9ZnVuY3Rpb24gUFAoZSl7a20oKCk9PnJFLm1lcmdlUmVnaXN0ZXIoVFAucmVnaXN0ZXJSaWNoVGV4dChlKSxiUC5yZWdpc3RlckRyYWdvblN1cHBvcnQoZSkpLFtlXSl9ZnVuY3Rpb24gT1Aoe2NvbnRlbnQ6ZX0pe3Zhclt0XT1uRS51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCk7dD1OUCh0KTtsZXQgbj0kUCgpO3JldHVybiB0P3R5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6ZTpudWxsfUZTLlJpY2hUZXh0UGx1Z2luPWZ1bmN0aW9uKHtjb250ZW50RWRpdGFibGU6ZSxwbGFjZWhvbGRlcjp0LEVycm9yQm91bmRhcnk6bn0pe2xldFtyXT1uRS51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCk7cmV0dXJuIG49UlAocixuKSxQUChyKSx6bi5jcmVhdGVFbGVtZW50KHpuLkZyYWdtZW50LG51bGwsZSx6bi5jcmVhdGVFbGVtZW50KE9QLHtjb250ZW50OnR9KSxuKX07Y29uc3QgQVA9RlM7dmFyIE1QPUFQLG9FPXt9LElyPXlvLExQPWRyLGlFPXAsRFA9UnQsdnM9aGU7ZnVuY3Rpb24gSVAoZSl7aUUudXNlRWZmZWN0KCgpPT5EUC5tZXJnZVJlZ2lzdGVyKGUucmVnaXN0ZXJDb21tYW5kKElyLklOU0VSVF9PUkRFUkVEX0xJU1RfQ09NTUFORCwoKT0+KElyLmluc2VydExpc3QoZSwibnVtYmVyIiksITApLHZzLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSxlLnJlZ2lzdGVyQ29tbWFuZChJci5JTlNFUlRfVU5PUkRFUkVEX0xJU1RfQ09NTUFORCwoKT0+KElyLmluc2VydExpc3QoZSwiYnVsbGV0IiksITApLHZzLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSxlLnJlZ2lzdGVyQ29tbWFuZChJci5SRU1PVkVfTElTVF9DT01NQU5ELCgpPT4oSXIucmVtb3ZlTGlzdChlKSwhMCksdnMuQ09NTUFORF9QUklPUklUWV9MT1cpLGUucmVnaXN0ZXJDb21tYW5kKHZzLklOU0VSVF9QQVJBR1JBUEhfQ09NTUFORCwoKT0+ISFJci4kaGFuZGxlTGlzdEluc2VydFBhcmFncmFwaCgpLHZzLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSksW2VdKX1vRS5MaXN0UGx1Z2luPWZ1bmN0aW9uKCl7bGV0W2VdPUxQLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKTtyZXR1cm4gaUUudXNlRWZmZWN0KCgpPT57aWYoIWUuaGFzTm9kZXMoW0lyLkxpc3ROb2RlLElyLkxpc3RJdGVtTm9kZV0pKXRocm93IEVycm9yKCJMaXN0UGx1Z2luOiBMaXN0Tm9kZSBhbmQvb3IgTGlzdEl0ZW1Ob2RlIG5vdCByZWdpc3RlcmVkIG9uIGVkaXRvciIpfSxbZV0pLElQKGUpLG51bGx9O2NvbnN0IGpQPW9FO3ZhciB6UD1qUCxsRT17fSxubz17fSxzRT1SdCwkcj1oZTtsZXQgRlA9bmV3IFNldChbImh0dHA6IiwiaHR0cHM6IiwibWFpbHRvOiIsInNtczoiLCJ0ZWw6Il0pO2NsYXNzIHFsIGV4dGVuZHMgJHIuRWxlbWVudE5vZGV7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4ibGluayJ9c3RhdGljIGNsb25lKHQpe3JldHVybiBuZXcgcWwodC5fX3VybCx7cmVsOnQuX19yZWwsdGFyZ2V0OnQuX190YXJnZXQsdGl0bGU6dC5fX3RpdGxlfSx0Ll9fa2V5KX1jb25zdHJ1Y3Rvcih0LG49e30scil7c3VwZXIocik7bGV0e3RhcmdldDpvPW51bGwscmVsOmk9bnVsbCx0aXRsZTpsPW51bGx9PW47dGhpcy5fX3VybD10LHRoaXMuX190YXJnZXQ9byx0aGlzLl9fcmVsPWksdGhpcy5fX3RpdGxlPWx9Y3JlYXRlRE9NKHQpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gbi5ocmVmPXRoaXMuc2FuaXRpemVVcmwodGhpcy5fX3VybCksdGhpcy5fX3RhcmdldCE9PW51bGwmJihuLnRhcmdldD10aGlzLl9fdGFyZ2V0KSx0aGlzLl9fcmVsIT09bnVsbCYmKG4ucmVsPXRoaXMuX19yZWwpLHRoaXMuX190aXRsZSE9PW51bGwmJihuLnRpdGxlPXRoaXMuX190aXRsZSksc0UuYWRkQ2xhc3NOYW1lc1RvRWxlbWVudChuLHQudGhlbWUubGluayksbn11cGRhdGVET00odCxuKXtsZXQgcj10aGlzLl9fdXJsLG89dGhpcy5fX3RhcmdldCxpPXRoaXMuX19yZWwsbD10aGlzLl9fdGl0bGU7cmV0dXJuIHIhPT10Ll9fdXJsJiYobi5ocmVmPXIpLG8hPT10Ll9fdGFyZ2V0JiYobz9uLnRhcmdldD1vOm4ucmVtb3ZlQXR0cmlidXRlKCJ0YXJnZXQiKSksaSE9PXQuX19yZWwmJihpP24ucmVsPWk6bi5yZW1vdmVBdHRyaWJ1dGUoInJlbCIpKSxsIT09dC5fX3RpdGxlJiYobD9uLnRpdGxlPWw6bi5yZW1vdmVBdHRyaWJ1dGUoInRpdGxlIikpLCExfXN0YXRpYyBpbXBvcnRET00oKXtyZXR1cm57YTooKT0+KHtjb252ZXJzaW9uOkJQLHByaW9yaXR5OjF9KX19c3RhdGljIGltcG9ydEpTT04odCl7bGV0IG49TmEodC51cmwse3JlbDp0LnJlbCx0YXJnZXQ6dC50YXJnZXQsdGl0bGU6dC50aXRsZX0pO3JldHVybiBuLnNldEZvcm1hdCh0LmZvcm1hdCksbi5zZXRJbmRlbnQodC5pbmRlbnQpLG4uc2V0RGlyZWN0aW9uKHQuZGlyZWN0aW9uKSxufXNhbml0aXplVXJsKHQpe3RyeXtsZXQgbj1uZXcgVVJMKHQpO2lmKCFGUC5oYXMobi5wcm90b2NvbCkpcmV0dXJuImFib3V0OmJsYW5rIn1jYXRjaHt9cmV0dXJuIHR9ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCkscmVsOnRoaXMuZ2V0UmVsKCksdGFyZ2V0OnRoaXMuZ2V0VGFyZ2V0KCksdGl0bGU6dGhpcy5nZXRUaXRsZSgpLHR5cGU6ImxpbmsiLHVybDp0aGlzLmdldFVSTCgpLHZlcnNpb246MX19Z2V0VVJMKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX191cmx9c2V0VVJMKHQpe3RoaXMuZ2V0V3JpdGFibGUoKS5fX3VybD10fWdldFRhcmdldCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fdGFyZ2V0fXNldFRhcmdldCh0KXt0aGlzLmdldFdyaXRhYmxlKCkuX190YXJnZXQ9dH1nZXRSZWwoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX3JlbH1zZXRSZWwodCl7dGhpcy5nZXRXcml0YWJsZSgpLl9fcmVsPXR9Z2V0VGl0bGUoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX3RpdGxlfXNldFRpdGxlKHQpe3RoaXMuZ2V0V3JpdGFibGUoKS5fX3RpdGxlPXR9aW5zZXJ0TmV3QWZ0ZXIodCxuPSEwKXtyZXR1cm4gdD10aGlzLmdldFBhcmVudE9yVGhyb3coKS5pbnNlcnROZXdBZnRlcih0LG4pLCRyLiRpc0VsZW1lbnROb2RlKHQpPyhuPU5hKHRoaXMuX191cmwse3JlbDp0aGlzLl9fcmVsLHRhcmdldDp0aGlzLl9fdGFyZ2V0LHRpdGxlOnRoaXMuX190aXRsZX0pLHQuYXBwZW5kKG4pLG4pOm51bGx9Y2FuSW5zZXJ0VGV4dEJlZm9yZSgpe3JldHVybiExfWNhbkluc2VydFRleHRBZnRlcigpe3JldHVybiExfWNhbkJlRW1wdHkoKXtyZXR1cm4hMX1pc0lubGluZSgpe3JldHVybiEwfWV4dHJhY3RXaXRoQ2hpbGQodCxuKXtpZighJHIuJGlzUmFuZ2VTZWxlY3Rpb24obikpcmV0dXJuITE7dD1uLmFuY2hvci5nZXROb2RlKCk7bGV0IHI9bi5mb2N1cy5nZXROb2RlKCk7cmV0dXJuIHRoaXMuaXNQYXJlbnRPZih0KSYmdGhpcy5pc1BhcmVudE9mKHIpJiYwPG4uZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGh9fWZ1bmN0aW9uIEJQKGUpe2xldCB0PW51bGw7aWYoc0UuaXNIVE1MQW5jaG9yRWxlbWVudChlKSl7bGV0IG49ZS50ZXh0Q29udGVudDtuIT09bnVsbCYmbiE9PSIiJiYodD1OYShlLmdldEF0dHJpYnV0ZSgiaHJlZiIpfHwiIix7cmVsOmUuZ2V0QXR0cmlidXRlKCJyZWwiKSx0YXJnZXQ6ZS5nZXRBdHRyaWJ1dGUoInRhcmdldCIpLHRpdGxlOmUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpfSkpfXJldHVybntub2RlOnR9fWZ1bmN0aW9uIE5hKGUsdCl7cmV0dXJuICRyLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcgcWwoZSx0KSl9ZnVuY3Rpb24gdGkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBxbH1jbGFzcyBHYSBleHRlbmRzIHFse3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuImF1dG9saW5rIn1zdGF0aWMgY2xvbmUodCl7cmV0dXJuIG5ldyBHYSh0Ll9fdXJsLHtyZWw6dC5fX3JlbCx0YXJnZXQ6dC5fX3RhcmdldCx0aXRsZTp0Ll9fdGl0bGV9LHQuX19rZXkpfXN0YXRpYyBpbXBvcnRKU09OKHQpe2xldCBuPVRwKHQudXJsLHtyZWw6dC5yZWwsdGFyZ2V0OnQudGFyZ2V0LHRpdGxlOnQudGl0bGV9KTtyZXR1cm4gbi5zZXRGb3JtYXQodC5mb3JtYXQpLG4uc2V0SW5kZW50KHQuaW5kZW50KSxuLnNldERpcmVjdGlvbih0LmRpcmVjdGlvbiksbn1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJuIG51bGx9ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksdHlwZToiYXV0b2xpbmsiLHZlcnNpb246MX19aW5zZXJ0TmV3QWZ0ZXIodCxuPSEwKXtyZXR1cm4gdD10aGlzLmdldFBhcmVudE9yVGhyb3coKS5pbnNlcnROZXdBZnRlcih0LG4pLCRyLiRpc0VsZW1lbnROb2RlKHQpPyhuPVRwKHRoaXMuX191cmwse3JlbDp0aGlzLl9yZWwsdGFyZ2V0OnRoaXMuX190YXJnZXQsdGl0bGU6dGhpcy5fX3RpdGxlfSksdC5hcHBlbmQobiksbik6bnVsbH19ZnVuY3Rpb24gVHAoZSx0KXtyZXR1cm4gJHIuJGFwcGx5Tm9kZVJlcGxhY2VtZW50KG5ldyBHYShlLHQpKX1sZXQgV1A9JHIuY3JlYXRlQ29tbWFuZCgiVE9HR0xFX0xJTktfQ09NTUFORCIpO2Z1bmN0aW9uIFVQKGUsdCl7Zm9yKDtlIT09bnVsbCYmKGU9ZS5nZXRQYXJlbnQoKSkhPT1udWxsJiYhdChlKTspO3JldHVybiBlfW5vLiRjcmVhdGVBdXRvTGlua05vZGU9VHA7bm8uJGNyZWF0ZUxpbmtOb2RlPU5hO25vLiRpc0F1dG9MaW5rTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEdhfTtuby4kaXNMaW5rTm9kZT10aTtuby5BdXRvTGlua05vZGU9R2E7bm8uTGlua05vZGU9cWw7bm8uVE9HR0xFX0xJTktfQ09NTUFORD1XUDtuby50b2dnbGVMaW5rPWZ1bmN0aW9uKGUsdD17fSl7bGV0e3RhcmdldDpuLHRpdGxlOnJ9PXQsbz10LnJlbD09PXZvaWQgMD8ibm9yZWZlcnJlciI6dC5yZWw7aWYodD0kci4kZ2V0U2VsZWN0aW9uKCksJHIuJGlzUmFuZ2VTZWxlY3Rpb24odCkpaWYodD10LmV4dHJhY3QoKSxlPT09bnVsbCl0LmZvckVhY2gobD0+e2lmKGw9bC5nZXRQYXJlbnQoKSx0aShsKSl7bGV0IHM9bC5nZXRDaGlsZHJlbigpO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKWwuaW5zZXJ0QmVmb3JlKHNbYV0pO2wucmVtb3ZlKCl9fSk7ZWxzZXtpZih0Lmxlbmd0aD09PTEpe3ZhciBpPXRbMF07aWYoaT10aShpKT9pOlVQKGksdGkpLGkhPT1udWxsKXtpLnNldFVSTChlKSxuIT09dm9pZCAwJiZpLnNldFRhcmdldChuKSxvIT09bnVsbCYmaS5zZXRSZWwobyksciE9PXZvaWQgMCYmaS5zZXRUaXRsZShyKTtyZXR1cm59fWxldCBsPW51bGwscz1udWxsO3QuZm9yRWFjaChhPT57dmFyIHU9YS5nZXRQYXJlbnQoKTtpZih1IT09cyYmdSE9PW51bGwmJighJHIuJGlzRWxlbWVudE5vZGUoYSl8fGEuaXNJbmxpbmUoKSkpaWYodGkodSkpcz11LHUuc2V0VVJMKGUpLG4hPT12b2lkIDAmJnUuc2V0VGFyZ2V0KG4pLG8hPT1udWxsJiZzLnNldFJlbChvKSxyIT09dm9pZCAwJiZzLnNldFRpdGxlKHIpO2Vsc2UgaWYodS5pcyhsKXx8KGw9dSxzPU5hKGUse3JlbDpvLHRhcmdldDpufSksdGkodSk/YS5nZXRQcmV2aW91c1NpYmxpbmcoKT09PW51bGw/dS5pbnNlcnRCZWZvcmUocyk6dS5pbnNlcnRBZnRlcihzKTphLmluc2VydEJlZm9yZShzKSksdGkoYSkpe2lmKCFhLmlzKHMpKXtpZihzIT09bnVsbCl7dT1hLmdldENoaWxkcmVuKCk7Zm9yKGxldCBjPTA7Yzx1Lmxlbmd0aDtjKyspcy5hcHBlbmQodVtjXSl9YS5yZW1vdmUoKX19ZWxzZSBzIT09bnVsbCYmcy5hcHBlbmQoYSl9KX19O2NvbnN0IEhQPW5vO3ZhciBNbD1IUCxVaT1NbCxWUD1kcixLUD1SdCxIaT1oZSxHUD1wO2xFLkxpbmtQbHVnaW49ZnVuY3Rpb24oe3ZhbGlkYXRlVXJsOmV9KXtsZXRbdF09VlAudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO3JldHVybiBHUC51c2VFZmZlY3QoKCk9PntpZighdC5oYXNOb2RlcyhbVWkuTGlua05vZGVdKSl0aHJvdyBFcnJvcigiTGlua1BsdWdpbjogTGlua05vZGUgbm90IHJlZ2lzdGVyZWQgb24gZWRpdG9yIik7cmV0dXJuIEtQLm1lcmdlUmVnaXN0ZXIodC5yZWdpc3RlckNvbW1hbmQoVWkuVE9HR0xFX0xJTktfQ09NTUFORCxuPT57aWYobj09PW51bGwpcmV0dXJuIFVpLnRvZ2dsZUxpbmsobiksITA7aWYodHlwZW9mIG49PSJzdHJpbmciKXJldHVybiBlPT09dm9pZCAwfHxlKG4pPyhVaS50b2dnbGVMaW5rKG4pLCEwKTohMTtsZXR7dXJsOnIsdGFyZ2V0Om8scmVsOmksdGl0bGU6bH09bjtyZXR1cm4gVWkudG9nZ2xlTGluayhyLHtyZWw6aSx0YXJnZXQ6byx0aXRsZTpsfSksITB9LEhpLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSxlIT09dm9pZCAwP3QucmVnaXN0ZXJDb21tYW5kKEhpLlBBU1RFX0NPTU1BTkQsbj0+e2xldCByPUhpLiRnZXRTZWxlY3Rpb24oKTtpZighSGkuJGlzUmFuZ2VTZWxlY3Rpb24ocil8fHIuaXNDb2xsYXBzZWQoKXx8IShuIGluc3RhbmNlb2YgQ2xpcGJvYXJkRXZlbnQpfHxuLmNsaXBib2FyZERhdGE9PW51bGwpcmV0dXJuITE7bGV0IG89bi5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQiKTtyZXR1cm4gZShvKT9yLmdldE5vZGVzKCkuc29tZShpPT5IaS4kaXNFbGVtZW50Tm9kZShpKSk/ITE6KHQuZGlzcGF0Y2hDb21tYW5kKFVpLlRPR0dMRV9MSU5LX0NPTU1BTkQsbyksbi5wcmV2ZW50RGVmYXVsdCgpLCEwKTohMX0sSGkuQ09NTUFORF9QUklPUklUWV9MT1cpOigpPT57fSl9LFt0LGVdKSxudWxsfTtjb25zdCBZUD1sRTt2YXIgWFA9WVA7ZnVuY3Rpb24gUVAoe2FyaWFBY3RpdmVEZXNjZW5kYW50OmUsYXJpYUF1dG9Db21wbGV0ZTp0LGFyaWFDb250cm9sczpuLGFyaWFEZXNjcmliZWRCeTpyLGFyaWFFeHBhbmRlZDpvLGFyaWFMYWJlbDppLGFyaWFMYWJlbGxlZEJ5OmwsYXJpYU11bHRpbGluZTpzLGFyaWFPd25zOmEsYXJpYVJlcXVpcmVkOnUsYXV0b0NhcGl0YWxpemU6YyxjbGFzc05hbWU6ZCxpZDpmLHJvbGU6aD0idGV4dGJveCIsc3BlbGxDaGVjazptPSEwLHN0eWxlOmcsdGFiSW5kZXg6XywiZGF0YS10ZXN0aWQiOnYsLi4ueX0pe2NvbnN0W3hdPWRyLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKSxbUyxrXT1wLnVzZVN0YXRlKCExKSxUPXAudXNlQ2FsbGJhY2soYj0+e3ZhciBEO3guc2V0Um9vdEVsZW1lbnQoYik7Y29uc3QgTj0oRD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidmFsLXVpIikpPT1udWxsP3ZvaWQgMDpELnNoYWRvd1Jvb3Q7aWYoTiYmImdldFNlbGVjdGlvbiJpbiBOKXt4Ll93aW5kb3c9TjtyZXR1cm59fSxbeF0pO3JldHVybiBwLnVzZUxheW91dEVmZmVjdCgoKT0+KGsoeC5pc0VkaXRhYmxlKCkpLHgucmVnaXN0ZXJFZGl0YWJsZUxpc3RlbmVyKGI9PntrKGIpfSkpLFt4XSksdy5qc3goImRpdiIsey4uLnksImFyaWEtYWN0aXZlZGVzY2VuZGFudCI6Uz9lOnZvaWQgMCwiYXJpYS1hdXRvY29tcGxldGUiOlM/dDoibm9uZSIsImFyaWEtY29udHJvbHMiOlM/bjp2b2lkIDAsImFyaWEtZGVzY3JpYmVkYnkiOnIsImFyaWEtZXhwYW5kZWQiOlMmJmg9PT0iY29tYm9ib3giPyEhbzp2b2lkIDAsImFyaWEtbGFiZWwiOmksImFyaWEtbGFiZWxsZWRieSI6bCwiYXJpYS1tdWx0aWxpbmUiOnMsImFyaWEtb3ducyI6Uz9hOnZvaWQgMCwiYXJpYS1yZWFkb25seSI6Uz92b2lkIDA6ITAsImFyaWEtcmVxdWlyZWQiOnUsYXV0b0NhcGl0YWxpemU6YyxjbGFzc05hbWU6ZCxjb250ZW50RWRpdGFibGU6UywiZGF0YS10ZXN0aWQiOnYsaWQ6ZixyZWY6VCxyb2xlOmgsc3BlbGxDaGVjazptLHN0eWxlOmcsdGFiSW5kZXg6X30pfWZ1bmN0aW9uIEpQKHtjbGFzc05hbWU6ZX0pe3JldHVybiB3LmpzeChRUCx7Y2xhc3NOYW1lOmV9KX1jbGFzcyBZYSBleHRlbmRzIGhlLkRlY29yYXRvck5vZGV7Y29uc3RydWN0b3IodCxuKXtzdXBlcihuKSx0aGlzLl9fc3JjPXQuc3JjLHRoaXMuX19hbHRUZXh0PXQuYWx0VGV4dCx0aGlzLl9fd2lkdGg9dC53aWR0aCx0aGlzLl9faGVpZ2h0PXQuaGVpZ2h0fXN0YXRpYyBnZXRUeXBlKCl7cmV0dXJuImltYWdlIn1zdGF0aWMgY2xvbmUodCl7cmV0dXJuIG5ldyBZYSh7c3JjOnQuX19zcmMsYWx0VGV4dDp0Ll9fYWx0VGV4dCx3aWR0aDp0Ll9fd2lkdGgsaGVpZ2h0OnQuX19oZWlnaHR9KX1leHBvcnRKU09OKCl7cmV0dXJue2FsdFRleHQ6dGhpcy5fX2FsdFRleHQsaGVpZ2h0OnRoaXMuX193aWR0aCxzcmM6dGhpcy5fX3NyYyx0eXBlOiJpbWFnZSIsdmVyc2lvbjoxLHdpZHRoOnRoaXMuX193aWR0aH19c3RhdGljIGltcG9ydEpTT04odCl7cmV0dXJuIGFFKHQpfWNyZWF0ZURPTSgpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKX11cGRhdGVET00oKXtyZXR1cm4hMX1kZWNvcmF0ZSgpe3JldHVybiB3LmpzeChaUCx7c3JjOnRoaXMuX19zcmMsYWx0VGV4dDp0aGlzLl9fYWx0VGV4dCxlbXB0eTp0aGlzLl9fZW1wdHksaGVpZ2h0OnRoaXMuX19oZWlnaHQsbm9kZUtleTp0aGlzLmdldEtleSgpfSl9fWZ1bmN0aW9uIFpQKGUpe3JldHVybiB3LmpzeCgiaW1nIix7c3JjOmUuc3JjfSl9ZnVuY3Rpb24gYUUoZSl7cmV0dXJuIG5ldyBZYShlKX1mdW5jdGlvbiBxUCgpe2NvbnN0W2VdPWRyLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntlLmZvY3VzKCl9LFtlXSksbnVsbH1jb25zdCB1RT1oZS5jcmVhdGVDb21tYW5kKCJJTlNFUlRfSU1BR0VfQ09NTUFORCIpO2Z1bmN0aW9uIGVPKCl7Y29uc3RbZV09ZHIudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2lmKCFlLmhhc05vZGVzKFtZYV0pKXRocm93IG5ldyBFcnJvcigiSW1hZ2VzUGx1Z2luOiBJbWFnZU5vZGUgbm90IHJlZ2lzdGVyZWQgb24gZWRpdG9yIik7cmV0dXJuIFJ0Lm1lcmdlUmVnaXN0ZXIoZS5yZWdpc3RlckNvbW1hbmQodUUsdD0+e2NvbnN0IG49YUUodCk7cmV0dXJuIGhlLiRpbnNlcnROb2Rlcyhbbl0pLGhlLiRpc1Jvb3RPclNoYWRvd1Jvb3Qobi5nZXRQYXJlbnRPclRocm93KCkpJiZSdC4kd3JhcE5vZGVJbkVsZW1lbnQobixoZS4kY3JlYXRlUGFyYWdyYXBoTm9kZSkuc2VsZWN0RW5kKCksITB9LGhlLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSl9LFtlXSksbnVsbH1jb25zdCB0Tz0oe2NsYXNzTmFtZTplfSk9PncuanN4cygic3ZnIix7aGVpZ2h0OjEyLHdpZHRoOjEyLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZTplLGNoaWxkcmVuOlt3LmpzeCgicGF0aCIse2Q6Ik02IDRoOGE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMS00IDRINnoifSksdy5qc3goInBhdGgiLHtkOiJNNiAxMmg5YTQgNCAwIDAgMSA0IDQgNCA0IDAgMCAxLTQgNEg2eiJ9KV19KSxuTz10TyxyTz0oe2NsYXNzTmFtZTplfSk9PncuanN4cygic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOmUsd2lkdGg6MTIsaGVpZ2h0OjEyLGNoaWxkcmVuOlt3LmpzeCgibGluZSIse3gxOiIxOSIseTE6IjQiLHgyOiIxMCIseTI6IjQifSksdy5qc3goImxpbmUiLHt4MToiMTQiLHkxOiIyMCIseDI6IjUiLHkyOiIyMCJ9KSx3LmpzeCgibGluZSIse3gxOiIxNSIseTE6IjQiLHgyOiI5Iix5MjoiMjAifSldfSksb089ck8saU89KHtjbGFzc05hbWU6ZX0pPT53LmpzeCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjQgMjQiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMSIsY2xhc3NOYW1lOmUsd2lkdGg6MTIsaGVpZ2h0OjEyLGNoaWxkcmVuOncuanN4KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xMywxNSBMMTMsMjEgQzEzLDIxLjU1MjI4NDcgMTIuNTUyMjg0NywyMiAxMiwyMiBDMTEuNDQ3NzE1MywyMiAxMSwyMS41NTIyODQ3IDExLDIxIEwxMSwxNSBMMTMsMTUgWiBNMywxMyBDMi40NDc3MTUyNSwxMyAyLDEyLjU1MjI4NDcgMiwxMiBDMiwxMS40NDc3MTUzIDIuNDQ3NzE1MjUsMTEgMywxMSBMMjEsMTEgQzIxLjU1MjI4NDcsMTEgMjIsMTEuNDQ3NzE1MyAyMiwxMiBDMjIsMTIuNTUyMjg0NyAyMS41NTIyODQ3LDEzIDIxLDEzIEwzLDEzIFogTTE5LDIgQzE5LjU1MjI4NDcsMiAyMCwyLjQ0NzcxNTI1IDIwLDMgQzIwLDMuNTUyMjg0NzUgMTkuNTUyMjg0Nyw0IDE5LDQgTDEzLDQgTDEzLDkgTDExLDkgTDExLDQgTDUsNCBDNC40NDc3MTUyNSw0IDQsMy41NTIyODQ3NSA0LDMgQzQsMi40NDc3MTUyNSA0LjQ0NzcxNTI1LDIgNSwyIEwxOSwyIFoifSl9KSxsTz1pTyxzTz0oe3ZhcmlhbnQ6ZT0icHJpbWFyeSIsb25DbGljazp0LGNoaWxkcmVuOm4saWNvbjpyLGRpc2FibGVkOm89ITF9KT0+dy5qc3goImJ1dHRvbiIse2Rpc2FibGVkOm8sY2xhc3NOYW1lOnZkKCJmb250LXNhbnMgZm9udC1bMTJweF0gdHJhY2tpbmctWzAuMDRlbV0gcHktMSBweC0yIHJvdW5kZWQgd2hpdGVzcGFjZS1ub3dyYXAgZ3JvdXAgcmVsYXRpdmUgdGV4dC1wcmltYXJ5Iix7ImZvbnQtYm9sZCI6ZT09PSJwcmltYXJ5IiwiYmctYmFja2dyb3VuZCBob3ZlcjpiZy1iYWNrZ3JvdW5kIHRleHQtZmlsbCBkaXNhYmxlZDpiZy1maWxsIGRpc2FibGVkOnRleHQtYmFja2dyb3VuZCI6ZT09PSJwcmltYXJ5IiwiYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci1wcmltYXJ5IHRleHQtcHJpbWFyeSBob3Zlcjpib3JkZXItaGlnaGxpZ2h0IGhvdmVyOnRleHQtaGlnaGxpZ2h0IGRpc2FibGVkOmJnLWZpbGwgZGlzYWJsZWQ6dGV4dC1iYWNrZ3JvdW5kIjplIT09InByaW1hcnkifSksb25DbGljazp0LGNoaWxkcmVuOncuanN4cygic3BhbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOltyJiZyLG5dfSl9KSxuaT1zTyxhTz0oe2NsYXNzTmFtZTplfSk9PncuanN4cygic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMTIgMTIiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOmUsY2hpbGRyZW46W3cuanN4KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixkOiJNMy43MDczMyAxLjAwMDE1TDguNzc4NCA2LjA3MTIxTDguMDcxMjkgNi43NzgzMkwzLjAwMDIyIDEuNzA3MjVMMy43MDczMyAxLjAwMDE1WiIsZmlsbDoiY3VycmVudENvbG9yIn0pLHcuanN4KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixkOiJNMy4wMDAxNSAxMC40NzA5TDguMDcxMjEgNS4zOTk4M0w4Ljc3ODMyIDYuMTA2OTNMMy43MDcyNSAxMS4xNzhMMy4wMDAxNSAxMC40NzA5WiIsZmlsbDoiY3VycmVudENvbG9yIn0pXX0pLHVPPWFPLGNFPWVlLmNyZWF0ZUNvbnRleHQoe2dldCBhcGkoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXNzaW9uKCl7dGhyb3cgRXJyb3IoIlZhbE92ZXJsYXlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsT3ZlcmxheVByb3ZpZGVyISIpfSxnZXQgdGhlbWUoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXRUaGVtZSgpe3Rocm93IEVycm9yKCJWYWxPdmVybGF5Q29udGV4dCBub3QgZm91bmQuIEVuc3VyZSBjb21wb25lbnRzIGFyZSB3cmFwcGVkIGJ5IFZhbE92ZXJsYXlQcm92aWRlciEiKX0sZ2V0IGVkaXRNb2RlKCl7dGhyb3cgRXJyb3IoIlZhbE92ZXJsYXlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsT3ZlcmxheVByb3ZpZGVyISIpfSxnZXQgc2V0RWRpdE1vZGUoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBoaWdobGlnaHQoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXRIaWdobGlnaHQoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXRXaW5kb3dTaXplKCl7dGhyb3cgRXJyb3IoIlZhbE92ZXJsYXlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsT3ZlcmxheVByb3ZpZGVyISIpfSxnZXQgd2luZG93U2l6ZSgpe3Rocm93IEVycm9yKCJWYWxPdmVybGF5Q29udGV4dCBub3QgZm91bmQuIEVuc3VyZSBjb21wb25lbnRzIGFyZSB3cmFwcGVkIGJ5IFZhbE92ZXJsYXlQcm92aWRlciEiKX19KTtmdW5jdGlvbiBibSgpe3JldHVybiBlZS51c2VDb250ZXh0KGNFKX1jb25zdCBjTz0oe29wdGlvbnM6ZSxvbkNoYW5nZTp0LGxhYmVsOm4saWNvbjpyfSk9Pntjb25zdFtvLGldPXAudXNlU3RhdGUoITEpLGw9cC51c2VSZWYobnVsbCksW3MsYV09cC51c2VTdGF0ZSgwKSx7d2luZG93U2l6ZTp1fT1ibSgpLGM9KCk9PntpKCFvKX0sZD0oZixoKT0+e2EoaCksdChmKSxpKCExKX07cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3QgZj1oPT57byYmbC5jdXJyZW50JiYhbC5jdXJyZW50LmNvbnRhaW5zKGgudGFyZ2V0KSYmaSghMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZiksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsZil9fSxbXSksdy5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0iLHJlZjpsLGNoaWxkcmVuOncuanN4KG5pLHtvbkNsaWNrOmY9PntmLnByZXZlbnREZWZhdWx0KCksYygpfSxpY29uOncuanN4KHVPLHtjbGFzc05hbWU6YHJvdGF0ZS1bLTkwZGVnXSB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0xNTAgZWFzZS1pbi1vdXQgJHtvPyIiOiJyb3RhdGUtWzkwZGVnXSJ9YH0pLGNoaWxkcmVuOncuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W3cuanN4cygic3BhbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEiLGNoaWxkcmVuOltuLHImJnJdfSksbyYmdy5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgLXRvcC1bNHB4XSBvdmVyZmxvdy1zY3JvbGwgc2hhZG93LWxnIC1sZWZ0LTIgdGV4dC1wcmltYXJ5IGJnLWJvcmRlciB3LWZpdCB6LW92ZXJsYXkiLHN0eWxlOnttYXhIZWlnaHQ6dT09bnVsbD92b2lkIDA6dS5pbm5lckhlaWdodH0sY2hpbGRyZW46dy5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCAiLGNoaWxkcmVuOmU9PW51bGw/dm9pZCAwOmUubWFwKChmLGgpPT53LmpzeCgiYnV0dG9uIix7b25DbGljazptPT57bS5wcmV2ZW50RGVmYXVsdCgpLGQoZixoKX0sY2xhc3NOYW1lOmB0ZXh0LWxlZnQgcHgtMiBweS0xIGhvdmVyOmJnLWJhY2tncm91bmQgaG92ZXI6dGV4dC1oaWdobGlnaHQgICR7aD09PXMmJiJmb250LWJvbGQgYmctYmFja2dyb3VuZCBob3ZlcjpiZy1iYWNrZ3JvdW5kIHRydW5jYXRlIn1gLGNoaWxkcmVuOmZ9LGYpKX0pfSldfSl9KX0pfSxkTz1jTyxmTz1uZXcgVGV4dEVuY29kZXI7ZnVuY3Rpb24gZEUoZSl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57dmFyIGk7Y29uc3Qgcj0oaT1lLmN1cnJlbnRUYXJnZXQuZmlsZXMpPT1udWxsP3ZvaWQgMDppWzBdLG89bmV3IEZpbGVSZWFkZXI7by5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoKT0+e2NvbnN0IGw9by5yZXN1bHQ7aWYodHlwZW9mIGw9PSJzdHJpbmciKXtjb25zdCBzPW5ldyBJbWFnZTtzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGFzeW5jKCk9Pntjb25zdCBhPWF3YWl0ICRuLmdldFNIQTI1Nkhhc2goZk8uZW5jb2RlKGwpKTtpZihzLm5hdHVyYWxXaWR0aCYmcy5uYXR1cmFsSGVpZ2h0KXtjb25zdCB1PVlnKGwpO3Qoe3NyYzpsLHdpZHRoOnMubmF0dXJhbFdpZHRoLGhlaWdodDpzLm5hdHVyYWxIZWlnaHQsZmlsZW5hbWU6cj09bnVsbD92b2lkIDA6ci5uYW1lLHNoYTI1NjphLG1pbWVUeXBlOnUsZmlsZUV4dDp1JiZYZyh1KX0pfWVsc2UgdCh7c3JjOmwsZmlsZW5hbWU6cj09bnVsbD92b2lkIDA6ci5uYW1lLHNoYTI1NjphfSl9KSxzLnNyYz1sfWVsc2UgbihsP3ttZXNzYWdlOiJVbmV4cGVjdGVkIGltYWdlIHJlc3VsdCB0eXBlIixyZXN1bHQ6bH06e21lc3NhZ2U6IkVtcHR5IHJlc3VsdCJ9KX0pLHImJm8ucmVhZEFzRGF0YVVSTChyKX0pfWZ1bmN0aW9uIGZFKGUpe2NvbnN0IHQ9ZS5hbmNob3Isbj1lLmZvY3VzLHI9ZS5hbmNob3IuZ2V0Tm9kZSgpLG89ZS5mb2N1cy5nZXROb2RlKCk7cmV0dXJuIHI9PT1vP3I6ZS5pc0JhY2t3YXJkKCk/em8uJGlzQXROb2RlRW5kKG4pP3I6bzp6by4kaXNBdE5vZGVFbmQodCk/cjpvfWZ1bmN0aW9uIGhPKCl7Y29uc3RbZV09ZHIudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+UnQubWVyZ2VSZWdpc3RlcihlLnJlZ2lzdGVyQ29tbWFuZChoZS5DTElDS19DT01NQU5ELHQ9Pntjb25zdCBuPWhlLiRnZXRTZWxlY3Rpb24oKTtpZihoZS4kaXNSYW5nZVNlbGVjdGlvbihuKSl7Y29uc3Qgcj1mRShuKSxvPVJ0LiRmaW5kTWF0Y2hpbmdQYXJlbnQocixNbC4kaXNMaW5rTm9kZSk7aWYoTWwuJGlzTGlua05vZGUobykmJih0Lm1ldGFLZXl8fHQuY3RybEtleSkpcmV0dXJuIHdpbmRvdy5vcGVuKG8uZ2V0VVJMKCksIl9ibGFuayIpLCEwfXJldHVybiExfSxoZS5DT01NQU5EX1BSSU9SSVRZX0xPVykpLFtdKSxudWxsfXZhciBoRT17ZXhwb3J0czp7fX0scE89IlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEIixnTz1wTyxtTz1nTztmdW5jdGlvbiBwRSgpe31mdW5jdGlvbiBnRSgpe31nRS5yZXNldFdhcm5pbmdDYWNoZT1wRTt2YXIgdk89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHIsbyxpLGwscyxhKXtpZihhIT09bU8pe3ZhciB1PW5ldyBFcnJvcigiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcyIpO3Rocm93IHUubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiIsdX19ZS5pc1JlcXVpcmVkPWU7ZnVuY3Rpb24gdCgpe3JldHVybiBlfXZhciBuPXthcnJheTplLGJpZ2ludDplLGJvb2w6ZSxmdW5jOmUsbnVtYmVyOmUsb2JqZWN0OmUsc3RyaW5nOmUsc3ltYm9sOmUsYW55OmUsYXJyYXlPZjp0LGVsZW1lbnQ6ZSxlbGVtZW50VHlwZTplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnQsZXhhY3Q6dCxjaGVja1Byb3BUeXBlczpnRSxyZXNldFdhcm5pbmdDYWNoZTpwRX07cmV0dXJuIG4uUHJvcFR5cGVzPW4sbn07aEUuZXhwb3J0cz12TygpO3ZhciB5Tz1oRS5leHBvcnRzO2NvbnN0IEJuPUxhKHlPKTtmdW5jdGlvbiBOcCgpe3JldHVybiBOcD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxOcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geE8oZSx0KXtpZihlPT1udWxsKXJldHVybnt9O3ZhciBuPXdPKGUsdCkscixvO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKG89MDtvPGkubGVuZ3RoO28rKylyPWlbb10sISh0LmluZGV4T2Yocik+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmKG5bcl09ZVtyXSl9cmV0dXJuIG59ZnVuY3Rpb24gd08oZSx0KXtpZihlPT1udWxsKXJldHVybnt9O3ZhciBuPXt9LHI9T2JqZWN0LmtleXMoZSksbyxpO2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspbz1yW2ldLCEodC5pbmRleE9mKG8pPj0wKSYmKG5bb109ZVtvXSk7cmV0dXJuIG59dmFyIFRtPXAuZm9yd2FyZFJlZihmdW5jdGlvbihlLHQpe3ZhciBuPWUuY29sb3Iscj1uPT09dm9pZCAwPyJjdXJyZW50Q29sb3IiOm4sbz1lLnNpemUsaT1vPT09dm9pZCAwPzI0Om8sbD14TyhlLFsiY29sb3IiLCJzaXplIl0pO3JldHVybiBlZS5jcmVhdGVFbGVtZW50KCJzdmciLE5wKHtyZWY6dCx4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOmksaGVpZ2h0Omksdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6cixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9LGwpLGVlLmNyZWF0ZUVsZW1lbnQoInBvbHlsaW5lIix7cG9pbnRzOiIyMCA2IDkgMTcgNCAxMiJ9KSl9KTtUbS5wcm9wVHlwZXM9e2NvbG9yOkJuLnN0cmluZyxzaXplOkJuLm9uZU9mVHlwZShbQm4uc3RyaW5nLEJuLm51bWJlcl0pfTtUbS5kaXNwbGF5TmFtZT0iQ2hlY2siO2NvbnN0IF9PPVRtO2Z1bmN0aW9uIFJwKCl7cmV0dXJuIFJwPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFJwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBTTyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49RU8oZSx0KSxyLG87aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobz0wO288aS5sZW5ndGg7bysrKXI9aVtvXSwhKHQuaW5kZXhPZihyKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYobltyXT1lW3JdKX1yZXR1cm4gbn1mdW5jdGlvbiBFTyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49e30scj1PYmplY3Qua2V5cyhlKSxvLGk7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKylvPXJbaV0sISh0LmluZGV4T2Yobyk+PTApJiYobltvXT1lW29dKTtyZXR1cm4gbn12YXIgTm09cC5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jb2xvcixyPW49PT12b2lkIDA/ImN1cnJlbnRDb2xvciI6bixvPWUuc2l6ZSxpPW89PT12b2lkIDA/MjQ6byxsPVNPKGUsWyJjb2xvciIsInNpemUiXSk7cmV0dXJuIGVlLmNyZWF0ZUVsZW1lbnQoInN2ZyIsUnAoe3JlZjp0LHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6aSxoZWlnaHQ6aSx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZTpyLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn0sbCksZWUuY3JlYXRlRWxlbWVudCgicGF0aCIse2Q6Ik0xMCAxM2E1IDUgMCAwIDAgNy41NC41NGwzLTNhNSA1IDAgMCAwLTcuMDctNy4wN2wtMS43MiAxLjcxIn0pLGVlLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtkOiJNMTQgMTFhNSA1IDAgMCAwLTcuNTQtLjU0bC0zIDNhNSA1IDAgMCAwIDcuMDcgNy4wN2wxLjcxLTEuNzEifSkpfSk7Tm0ucHJvcFR5cGVzPXtjb2xvcjpCbi5zdHJpbmcsc2l6ZTpCbi5vbmVPZlR5cGUoW0JuLnN0cmluZyxCbi5udW1iZXJdKX07Tm0uZGlzcGxheU5hbWU9IkxpbmsiO2NvbnN0IENPPU5tO2Z1bmN0aW9uIFBwKCl7cmV0dXJuIFBwPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFBwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiAkTyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49a08oZSx0KSxyLG87aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobz0wO288aS5sZW5ndGg7bysrKXI9aVtvXSwhKHQuaW5kZXhPZihyKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYobltyXT1lW3JdKX1yZXR1cm4gbn1mdW5jdGlvbiBrTyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49e30scj1PYmplY3Qua2V5cyhlKSxvLGk7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKylvPXJbaV0sISh0LmluZGV4T2Yobyk+PTApJiYobltvXT1lW29dKTtyZXR1cm4gbn12YXIgUm09cC5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jb2xvcixyPW49PT12b2lkIDA/ImN1cnJlbnRDb2xvciI6bixvPWUuc2l6ZSxpPW89PT12b2lkIDA/MjQ6byxsPSRPKGUsWyJjb2xvciIsInNpemUiXSk7cmV0dXJuIGVlLmNyZWF0ZUVsZW1lbnQoInN2ZyIsUHAoe3JlZjp0LHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6aSxoZWlnaHQ6aSx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZTpyLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn0sbCksZWUuY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSksZWUuY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSkpfSk7Um0ucHJvcFR5cGVzPXtjb2xvcjpCbi5zdHJpbmcsc2l6ZTpCbi5vbmVPZlR5cGUoW0JuLnN0cmluZyxCbi5udW1iZXJdKX07Um0uZGlzcGxheU5hbWU9IlgiO2NvbnN0IGJPPVJtLFRPPSh7Zm9udFNpemVzOmUsZm9udHNGYW1pbGllczp0LG9uRWRpdG9yOm4sY29sb3JzOnJ9KT0+e2NvbnN0W29dPWRyLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKTtwLnVzZUVmZmVjdCgoKT0+e24mJm4obyl9LFtvXSk7Y29uc3RbaSxsXT1wLnVzZVN0YXRlKG8pLFtzLGFdPXAudXNlU3RhdGUobnVsbCksW3UsY109cC51c2VTdGF0ZSghMSksW2QsZl09cC51c2VTdGF0ZSghMSksW2gsbV09cC51c2VTdGF0ZSghMSksW2csX109cC51c2VTdGF0ZSghMSk7cC51c2VTdGF0ZSgiMTVweCIpLHAudXNlU3RhdGUoIiMwMDAiKSxwLnVzZVN0YXRlKCJTYW5zIik7Y29uc3Rbdix5XT1wLnVzZVN0YXRlKCJwYXJhZ3JhcGgiKTtwLnVzZVN0YXRlKCExKSxwLnVzZVN0YXRlKCExKSxwLnVzZVN0YXRlKCJ1cmwiKSxwLnVzZVN0YXRlKG51bGwpO2NvbnN0W3gsU109cC51c2VTdGF0ZShudWxsKSxrPU09PntvLmRpc3BhdGNoQ29tbWFuZChNbC5UT0dHTEVfTElOS19DT01NQU5ELE0pfSxUPXtwYXJhZ3JhcGg6Ik5vcm1hbCIsaDE6IkhlYWRpbmcgMSIsaDI6IkhlYWRpbmcgMiIsaDM6IkhlYWRpbmcgMyIsaDQ6IkhlYWRpbmcgNCIsaDU6IkhlYWRpbmcgNSIsaDY6IkhlYWRpbmcgNiIsbnVtYmVyOiJOdW1iZXJlZCBMaXN0IixidWxsZXQ6IkJ1bGxldGVkIExpc3QifSxiPXt9O2Zvcihjb25zdCBNIGluIFQpYltUW01dXT1NO2NvbnN0IE49cC51c2VDYWxsYmFjaygoKT0+e2NvbnN0IE09aGUuJGdldFNlbGVjdGlvbigpO2lmKGhlLiRpc1JhbmdlU2VsZWN0aW9uKE0pKXtjb25zdCBqPU0uYW5jaG9yLmdldE5vZGUoKTtsZXQgQj1qLmdldEtleSgpPT09InJvb3QiP2o6UnQuJGZpbmRNYXRjaGluZ1BhcmVudChqLCQ9Pntjb25zdCBFPSQuZ2V0UGFyZW50KCk7cmV0dXJuIEUhPT1udWxsJiZoZS4kaXNSb290T3JTaGFkb3dSb290KEUpfSk7Qj09PW51bGwmJihCPWouZ2V0VG9wTGV2ZWxFbGVtZW50T3JUaHJvdygpKTtjb25zdCByZT1mRShNKSxWPVJ0LiRmaW5kTWF0Y2hpbmdQYXJlbnQocmUsTWwuJGlzTGlua05vZGUpO2lmKFYhPT1udWxsKXtjb25zdCAkPVYuZ2V0VVJMKCk7UygkKX1lbHNlIFMobnVsbCk7Y29uc3QgWT1CLmdldEtleSgpLEM9aS5nZXRFbGVtZW50QnlLZXkoWSk7aWYoYyhNLmhhc0Zvcm1hdCgiYm9sZCIpKSxmKE0uaGFzRm9ybWF0KCJpdGFsaWMiKSksbShNLmhhc0Zvcm1hdCgic3RyaWtldGhyb3VnaCIpKSxfKE0uaGFzRm9ybWF0KCJ1bmRlcmxpbmUiKSksQyE9PW51bGwpaWYoYShZKSx5by4kaXNMaXN0Tm9kZShCKSl7Y29uc3QgJD1SdC4kZ2V0TmVhcmVzdE5vZGVPZlR5cGUoaix5by5MaXN0Tm9kZSksRT0kPyQuZ2V0TGlzdFR5cGUoKTpCLmdldExpc3RUeXBlKCk7eShFKX1lbHNle2NvbnN0ICQ9SnMuJGlzSGVhZGluZ05vZGUoQik/Qi5nZXRUYWcoKTpCLmdldFR5cGUoKTskIGluIFQmJnkoJCl9fX0sW2ldKTtwLnVzZUVmZmVjdCgoKT0+UnQubWVyZ2VSZWdpc3RlcihvLnJlZ2lzdGVyVXBkYXRlTGlzdGVuZXIoKHtlZGl0b3JTdGF0ZTpNfSk9PntNLnJlYWQoKCk9PntOKCl9KX0pKSxbTixpLG9dKSxwLnVzZUVmZmVjdCgoKT0+by5yZWdpc3RlckNvbW1hbmQoaGUuU0VMRUNUSU9OX0NIQU5HRV9DT01NQU5ELChNLGopPT4oTigpLGwoaiksITEpLGhlLkNPTU1BTkRfUFJJT1JJVFlfQ1JJVElDQUwpLFtvLE5dKTtjb25zdCBEPU09PntbImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiJdLmluY2x1ZGVzKE0pP3YhPT1NJiZvLnVwZGF0ZSgoKT0+e2NvbnN0IGo9aGUuJGdldFNlbGVjdGlvbigpO2hlLiRpc1JhbmdlU2VsZWN0aW9uKGopJiZ6by4kc2V0QmxvY2tzVHlwZShqLCgpPT5Kcy4kY3JlYXRlSGVhZGluZ05vZGUoTSkpfSk6TT09PSJwYXJhZ3JhcGgiJiZ2IT09InBhcmFncmFwaCI/by51cGRhdGUoKCk9Pntjb25zdCBqPWhlLiRnZXRTZWxlY3Rpb24oKTsoaGUuJGlzUmFuZ2VTZWxlY3Rpb24oail8fGhlLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihqKSkmJnpvLiRzZXRCbG9ja3NUeXBlKGosKCk9PmhlLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCkpfSk6TT09PSJudW1iZXIiJiZ2IT09Im51bWJlciI/by5kaXNwYXRjaENvbW1hbmQoeW8uSU5TRVJUX09SREVSRURfTElTVF9DT01NQU5ELHZvaWQgMCk6TT09PSJidWxsZXQiJiZ2IT09ImJ1bGxldCI/by5kaXNwYXRjaENvbW1hbmQoeW8uSU5TRVJUX1VOT1JERVJFRF9MSVNUX0NPTU1BTkQsdm9pZCAwKTpvLmRpc3BhdGNoQ29tbWFuZCh5by5SRU1PVkVfTElTVF9DT01NQU5ELHZvaWQgMCl9O3JldHVybiBwLnVzZUNhbGxiYWNrKCgpPT57by51cGRhdGUoKCk9Pntjb25zdCBNPWhlLiRnZXRTZWxlY3Rpb24oKTtpZihoZS4kaXNSYW5nZVNlbGVjdGlvbihNKSl7Y29uc3Qgaj1NLmFuY2hvcixCPU0uZm9jdXMscmU9TS5nZXROb2RlcygpO2lmKGoua2V5PT09Qi5rZXkmJmoub2Zmc2V0PT09Qi5vZmZzZXQpcmV0dXJuO3JlLmZvckVhY2goKFYsWSk9PntoZS4kaXNUZXh0Tm9kZShWKT8oWT09PTAmJmoub2Zmc2V0IT09MCYmKFY9Vi5zcGxpdFRleHQoai5vZmZzZXQpWzFdfHxWKSxZPT09cmUubGVuZ3RoLTEmJihWPVYuc3BsaXRUZXh0KEIub2Zmc2V0KVswXXx8ViksVi5fX3N0eWxlIT09IiImJlYuc2V0U3R5bGUoIiIpLFYuX19mb3JtYXQhPT0wJiYoVi5zZXRGb3JtYXQoMCksUnQuJGdldE5lYXJlc3RCbG9ja0VsZW1lbnRBbmNlc3Rvck9yVGhyb3coVikuc2V0Rm9ybWF0KCIiKSkpOkpzLiRpc0hlYWRpbmdOb2RlKFYpJiZWLnJlcGxhY2UoaGUuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKSwhMCl9KX19KX0sW2ldKSx3LmpzeHMoImRpdiIse2NsYXNzTmFtZToic3RpY2t5IHRvcC0wIGJvcmRlci1iIGJnLWJhY2tncm91bmQgYm9yZGVyLWhpZ2hsaWdodCBmbGV4IGZsZXgtY29sIixjaGlsZHJlbjpbdy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgZ2FwLTEiLGNoaWxkcmVuOlt3LmpzeChkTyx7b3B0aW9uczpPYmplY3QudmFsdWVzKFQpLGxhYmVsOlRbdl0/P3YrIiAobm90IHN1cHBvcnRlZCkiLG9uQ2hhbmdlOk09PntEKGJbTV0pfX0pLHcuanN4KG5pLHt2YXJpYW50OiJwcmltYXJ5IixvbkNsaWNrOk09PntNLnByZXZlbnREZWZhdWx0KCksby5kaXNwYXRjaENvbW1hbmQoaGUuRk9STUFUX1RFWFRfQ09NTUFORCwiYm9sZCIpfSxhY3RpdmU6dSxpY29uOncuanN4KG5PLHtjbGFzc05hbWU6YCR7dSYmInN0cm9rZS1bM3B4XSJ9YH0pfSksdy5qc3gobmkse2FjdGl2ZTpoLG9uQ2xpY2s6TT0+e00ucHJldmVudERlZmF1bHQoKSxvLmRpc3BhdGNoQ29tbWFuZChoZS5GT1JNQVRfVEVYVF9DT01NQU5ELCJzdHJpa2V0aHJvdWdoIil9LGljb246dy5qc3gobE8se2NsYXNzTmFtZTpgJHtoJiYic3Ryb2tlLVsycHhdIn1gfSl9KSx3LmpzeChuaSx7YWN0aXZlOmQsb25DbGljazpNPT57TS5wcmV2ZW50RGVmYXVsdCgpLG8uZGlzcGF0Y2hDb21tYW5kKGhlLkZPUk1BVF9URVhUX0NPTU1BTkQsIml0YWxpYyIpfSxpY29uOncuanN4KG9PLHtjbGFzc05hbWU6YCR7ZCYmInN0cm9rZS1bM3B4XSJ9YH0pfSksdy5qc3gobmkse2FjdGl2ZTp4IT09bnVsbCxvbkNsaWNrOk09PntNLnByZXZlbnREZWZhdWx0KCksUygiIiksaygiIil9LGljb246dy5qc3goQ08se3dpZHRoOjEyLGhlaWdodDoxMixjbGFzc05hbWU6YCR7eCE9PW51bGwmJiJzdHJva2UtWzNweF0ifWB9KX0pLHcuanN4cygibGFiZWwiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGN1cnNvci1wb2ludGVyIixjaGlsZHJlbjpbdy5qc3gobF8se30pLHcuanN4KCJpbnB1dCIse3R5cGU6ImZpbGUiLGhpZGRlbjohMCxvbkNoYW5nZTpNPT57TS5wcmV2ZW50RGVmYXVsdCgpLGRFKE0pLnRoZW4oaj0+e28uZGlzcGF0Y2hDb21tYW5kKHVFLHsuLi5qfSl9KS5jYXRjaChqPT57Y29uc29sZS5lcnJvcigiRXJyb3IgcmVhZGluZyBpbWFnZSIsail9KX19KV19KV19KSx4IT09bnVsbCYmdy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgcC0yIixjaGlsZHJlbjpbdy5qc3goImlucHV0Iix7dHlwZToidGV4dCIscGxhY2Vob2xkZXI6IkVudGVyIFVSTCIsY2xhc3NOYW1lOiJ3LTEvMyB0ZXh0LXByaW1hcnkgYmctYmFja2dyb3VuZCBweC0yIix2YWx1ZTp4LG9uQ2hhbmdlOk09PntNLnByZXZlbnREZWZhdWx0KCksUyhNLnRhcmdldC52YWx1ZSl9fSksdy5qc3gobmkse3ZhcmlhbnQ6InByaW1hcnkiLG9uQ2xpY2s6TT0+e00ucHJldmVudERlZmF1bHQoKSxrKHh8fG51bGwpfSxpY29uOncuanN4KF9PLHtzaXplOjE0fSl9KSx3LmpzeChuaSx7dmFyaWFudDoicHJpbWFyeSIsb25DbGljazpNPT57TS5wcmV2ZW50RGVmYXVsdCgpLGsobnVsbCl9LGljb246dy5qc3goYk8se3NpemU6MTR9KX0pXX0pXX0pfSxOTz1UTztmdW5jdGlvbiBSTyhlKXtjb25zb2xlLmVycm9yKGUpfWNvbnN0IFBPPTI4LE9PPSh7cmljaHRleHQ6ZSxvbkVkaXRvcjp0fSk9Pntjb25zdHt3aW5kb3dTaXplOm59PWJtKCksbz17bmFtZXNwYWNlOiJ2YWwiLGVkaXRvclN0YXRlOmk9PntpLnNldEVkaXRvclN0YXRlKGkucGFyc2VFZGl0b3JTdGF0ZSh7cm9vdDpfMih2XyhlKSl9KSl9LG5vZGVzOltKcy5IZWFkaW5nTm9kZSxZYSx5by5MaXN0Tm9kZSx5by5MaXN0SXRlbU5vZGUsTWwuTGlua05vZGVdLHRoZW1lOnt0ZXh0Ontib2xkOiJmb250LXNlbWlib2xkIix1bmRlcmxpbmU6InVuZGVybGluZSIsaXRhbGljOiJpdGFsaWMiLHN0cmlrZXRocm91Z2g6ImxpbmUtdGhyb3VnaCIsdW5kZXJsaW5lU3RyaWtldGhyb3VnaDoidW5kZXJsaW5lIGxpbmUtdGhyb3VnaCJ9LGxpc3Q6e2xpc3RpdGVtOiJtbC1bMjBweF0iLG9sOiJsaXN0LWRlY2ltYWwiLHVsOiJsaXN0LWRpc2MifSxoZWFkaW5nOntoMToidGV4dC00eGwgZm9udC1ib2xkIixoMjoidGV4dC0zeGwgZm9udC1ib2xkIixoMzoidGV4dC0yeGwgZm9udC1ib2xkIixoNDoidGV4dC14bCBmb250LWJvbGQiLGg1OiJ0ZXh0LWxnIGZvbnQtYm9sZCIsaDY6InRleHQtbWQgZm9udC1ib2xkIn0sbGluazoidGV4dC1oaWdobGlnaHQgdW5kZXJsaW5lIn0sb25FcnJvcjpST307cmV0dXJuIHcuanN4cyhNUi5MZXhpY2FsQ29tcG9zZXIse2luaXRpYWxDb25maWc6byxjaGlsZHJlbjpbdy5qc3gocVAse30pLHcuanN4KE5PLHtvbkVkaXRvcjp0fSksdy5qc3goTVAuUmljaFRleHRQbHVnaW4se2NvbnRlbnRFZGl0YWJsZTp3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmb250LXNhbnMgYm9yZGVyLWIgdGV4dC1wcmltYXJ5IGJvcmRlci1oaWdobGlnaHQiLHN0eWxlOnttaW5IZWlnaHQ6biE9bnVsbCYmbi5pbm5lckhlaWdodD8obj09bnVsbD92b2lkIDA6bi5pbm5lckhlaWdodCktUE86dm9pZCAwfSxjaGlsZHJlbjp3LmpzeChKUCx7Y2xhc3NOYW1lOiJwLTQgb3V0bGluZS1ub25lIGJnLWZpbGwifSl9KSxwbGFjZWhvbGRlcjp3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiIiLGNoaWxkcmVuOiJFbnRlciBzb21lIHRleHQuLi4ifSksRXJyb3JCb3VuZGFyeTpCUn0pLHcuanN4KFhQLkxpbmtQbHVnaW4se30pLHcuanN4KGhPLHt9KSx3LmpzeCh6UC5MaXN0UGx1Z2luLHt9KSx3LmpzeChlTyx7fSksdy5qc3goUVIuSGlzdG9yeVBsdWdpbix7fSldfSl9O3ZhciBBTz17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07Y29uc3QgTU89ZT0+ZS5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCksQW49KGUsdCk9Pntjb25zdCBuPXAuZm9yd2FyZFJlZigoe2NvbG9yOnI9ImN1cnJlbnRDb2xvciIsc2l6ZTpvPTI0LHN0cm9rZVdpZHRoOmk9MixhYnNvbHV0ZVN0cm9rZVdpZHRoOmwsY2hpbGRyZW46cywuLi5hfSx1KT0+cC5jcmVhdGVFbGVtZW50KCJzdmciLHtyZWY6dSwuLi5BTyx3aWR0aDpvLGhlaWdodDpvLHN0cm9rZTpyLHN0cm9rZVdpZHRoOmw/TnVtYmVyKGkpKjI0L051bWJlcihvKTppLGNsYXNzTmFtZTpgbHVjaWRlIGx1Y2lkZS0ke01PKGUpfWAsLi4uYX0sWy4uLnQubWFwKChbYyxkXSk9PnAuY3JlYXRlRWxlbWVudChjLGQpKSwuLi4oQXJyYXkuaXNBcnJheShzKT9zOltzXSl8fFtdXSkpO3JldHVybiBuLmRpc3BsYXlOYW1lPWAke2V9YCxufSxMTz1BbigiQ2hlY2siLFtbInBvbHlsaW5lIix7cG9pbnRzOiIyMCA2IDkgMTcgNCAxMiIsa2V5OiIxMGpqZmoifV1dKSxtRT1BbigiQ2hldnJvbkRvd24iLFtbInBhdGgiLHtkOiJtNiA5IDYgNiA2LTYiLGtleToicXJ1bnNsIn1dXSksRE89QW4oIkNoZXZyb25MZWZ0IixbWyJwYXRoIix7ZDoibTE1IDE4LTYtNiA2LTYiLGtleToiMXduZmczIn1dXSksdjA9QW4oIkxvZ0luIixbWyJwYXRoIix7ZDoiTTE1IDNoNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTQiLGtleToidTUzczZyIn1dLFsicG9seWxpbmUiLHtwb2ludHM6IjEwIDE3IDE1IDEyIDEwIDciLGtleToiMWFpbDBoIn1dLFsibGluZSIse3gxOiIxNSIseDI6IjMiLHkxOiIxMiIseTI6IjEyIixrZXk6InY2Z3J4OCJ9XV0pLElPPUFuKCJNYXhpbWl6ZSIsW1sicGF0aCIse2Q6Ik04IDNINWEyIDIgMCAwIDAtMiAydjMiLGtleToiMWRjbWl0In1dLFsicGF0aCIse2Q6Ik0yMSA4VjVhMiAyIDAgMCAwLTItMmgtMyIsa2V5OiIxZTRndDMifV0sWyJwYXRoIix7ZDoiTTMgMTZ2M2EyIDIgMCAwIDAgMiAyaDMiLGtleToid3NsNXNjIn1dLFsicGF0aCIse2Q6Ik0xNiAyMWgzYTIgMiAwIDAgMCAyLTJ2LTMiLGtleToiMTh0cmVrIn1dXSksak89QW4oIk1pbmltaXplIixbWyJwYXRoIix7ZDoiTTggM3YzYTIgMiAwIDAgMS0yIDJIMyIsa2V5OiJob2hidHIifV0sWyJwYXRoIix7ZDoiTTIxIDhoLTNhMiAyIDAgMCAxLTItMlYzIixrZXk6IjVqdzFmMyJ9XSxbInBhdGgiLHtkOiJNMyAxNmgzYTIgMiAwIDAgMSAyIDJ2MyIsa2V5OiIxOTh0dnIifV0sWyJwYXRoIix7ZDoiTTE2IDIxdi0zYTIgMiAwIDAgMSAyLTJoMyIsa2V5OiJwaDhteHAifV1dKSx6Tz1BbigiTW9vbiIsW1sicGF0aCIse2Q6Ik0xMiAzYTYgNiAwIDAgMCA5IDkgOSA5IDAgMSAxLTktOVoiLGtleToiYTd0bjE4In1dXSksRk89QW4oIlBhdXNlIixbWyJyZWN0Iix7d2lkdGg6IjQiLGhlaWdodDoiMTYiLHg6IjYiLHk6IjQiLGtleToiaWZmaGU0In1dLFsicmVjdCIse3dpZHRoOiI0IixoZWlnaHQ6IjE2Iix4OiIxNCIseToiNCIsa2V5OiJzamluN2oifV1dKSxCTz1BbigiUGxheSIsW1sicG9seWdvbiIse3BvaW50czoiNSAzIDE5IDEyIDUgMjEgNSAzIixrZXk6IjE5MTYzNyJ9XV0pLFdPPUFuKCJQb3dlciIsW1sicGF0aCIse2Q6Ik0xMiAydjEwIixrZXk6Im1uZmJsIn1dLFsicGF0aCIse2Q6Ik0xOC40IDYuNmE5IDkgMCAxIDEtMTIuNzcuMDQiLGtleToib2JvZnU5In1dXSksVU89QW4oIlNlbmQiLFtbInBhdGgiLHtkOiJtMjIgMi03IDIwLTQtOS05LTRaIixrZXk6IjFxM3ZnZyJ9XSxbInBhdGgiLHtkOiJNMjIgMiAxMSAxMyIsa2V5OiJuemJxZWYifV1dKSxITz1BbigiU3VuIixbWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNCIsa2V5OiI0ZXhpcDIifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiIsa2V5OiJ0dXMwM20ifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Im00LjkzIDQuOTMgMS40MSAxLjQxIixrZXk6IjE0OXQ2aiJ9XSxbInBhdGgiLHtkOiJtMTcuNjYgMTcuNjYgMS40MSAxLjQxIixrZXk6InB0Ymd1diJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyIixrZXk6IjF0OGY4biJ9XSxbInBhdGgiLHtkOiJNMjAgMTJoMiIsa2V5OiIxcThtancifV0sWyJwYXRoIix7ZDoibTYuMzQgMTcuNjYtMS40MSAxLjQxIixrZXk6IjFtOHp6NSJ9XSxbInBhdGgiLHtkOiJtMTkuMDcgNC45My0xLjQxIDEuNDEiLGtleToiMXNobGNzIn1dXSksVk89QW4oIlgiLFtbInBhdGgiLHtkOiJNMTggNiA2IDE4IixrZXk6IjFibDVmOCJ9XSxbInBhdGgiLHtkOiJtNiA2IDEyIDEyIixrZXk6ImQ4Yms2diJ9XV0pLFBtPSJwLTEgYm9yZGVyIHJvdW5kZWQtZnVsbCBzaGFkb3cgYm9yZGVyLWFjY2VudCIseTA9InZhbGJ1aWxkOnVybEJlZm9yZU5hdmlnYXRpb24iO2Z1bmN0aW9uIEtPKHthcGk6ZX0pe2NvbnN0e3RoZW1lOnQsc2V0VGhlbWU6bixlZGl0TW9kZTpyLHNldEVkaXRNb2RlOm8sc2Vzc2lvbjppfT1ibSgpO2lmKGkuc3RhdHVzPT09InN1Y2Nlc3MiJiZpLmRhdGEubW9kZT09PSJ1bmF1dGhvcml6ZWQiKXJldHVybiB3LmpzeHMoeDAse2hyZWY6ZS5nZXRMb2dpblVybCh3aW5kb3cubG9jYXRpb24uaHJlZiksY2hpbGRyZW46W3cuanN4KCJzcGFuIix7Y2hpbGRyZW46IkxvZ2luIn0pLHcuanN4KHYwLHtzaXplOjE4fSldfSk7aWYoaS5zdGF0dXM9PT0ic3VjY2VzcyImJiFpLmRhdGEuZW5hYmxlZClyZXR1cm4gdy5qc3hzKHgwLHtocmVmOmUuZ2V0RW5hYmxlVXJsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxjaGlsZHJlbjpbdy5qc3goInNwYW4iLHtjaGlsZHJlbjoiRW5hYmxlIn0pLHcuanN4KHYwLHtzaXplOjE4fSldfSk7Y29uc3RbbCxzXT1wLnVzZVN0YXRlKCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57aS5zdGF0dXM9PT0ic3VjY2VzcyImJmkuZGF0YS5tb2RlPT09InByb3h5IiYmZS5nZXRQYXRjaGVzKHt9KS50aGVuKGE9PntpZihGcy5pc09rKGEpKXtsZXQgdT0wO2Zvcihjb25zdCBjIGluIGEudmFsdWUpdSs9YS52YWx1ZVtjXS5sZW5ndGg7cyh1KX1lbHNlIGNvbnNvbGUuZXJyb3IoIkNvdWxkIG5vdCBsb2FkIHBhdGNoZXMiLGEuZXJyb3IpfSl9LFtpXSksdy5qc3hzKEdPLHtjaGlsZHJlbjpbdy5qc3goTnUse2FjdGl2ZTpyPT09ImhvdmVyIixvbkNsaWNrOigpPT57byhhPT5hPT09ImhvdmVyIj8ib2ZmIjoiaG92ZXIiKX0sY2hpbGRyZW46dy5qc3goImRpdiIse2NsYXNzTmFtZToiaC1bMjRweF0gdy1bMjRweF0gZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOnI9PT0iaG92ZXIiP3cuanN4KEZPLHtzaXplOjE4fSk6dy5qc3goQk8se3NpemU6MTh9KX0pfSksdy5qc3goTnUse29uQ2xpY2s6KCk9PntuKHQ9PT0iZGFyayI/ImxpZ2h0IjoiZGFyayIpfSxjaGlsZHJlbjp3LmpzeHMoImRpdiIse2NsYXNzTmFtZToiaC1bMjRweF0gdy1bMjRweF0gZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOlt0PT09ImRhcmsiJiZ3LmpzeChITyx7c2l6ZToxNX0pLHQ9PT0ibGlnaHQiJiZ3LmpzeCh6Tyx7c2l6ZToxNX0pXX0pfSksdy5qc3goTnUse2FjdGl2ZTpyPT09ImZ1bGwiLG9uQ2xpY2s6KCk9PntpZihyIT09ImZ1bGwiKWxvY2FsU3RvcmFnZS5zZXRJdGVtKHkwLHdpbmRvdy5sb2NhdGlvbi5ocmVmKSx3aW5kb3cubG9jYXRpb24uaHJlZj1lLmdldEVkaXRVcmwoKTtlbHNlIGlmKHI9PT0iZnVsbCIpe2NvbnN0IGE9bG9jYWxTdG9yYWdlLmdldEl0ZW0oeTApO3dpbmRvdy5sb2NhdGlvbi5ocmVmPWF8fCIvIn19LGNoaWxkcmVuOncuanN4KCJkaXYiLHtjbGFzc05hbWU6ImgtWzI0cHhdIHctWzI0cHhdIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIixjaGlsZHJlbjpyPT09ImZ1bGwiP3cuanN4KGpPLHtzaXplOjE1fSk6dy5qc3goSU8se3NpemU6MTV9KX0pfSksbCYmdy5qc3goTnUse29uQ2xpY2s6KCk9Pnt9LGNoaWxkcmVuOncuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBoLVsyNHB4XSB3LVsyNHB4XSBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46W3cuanN4KCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIC1yaWdodC1bMTBweF0gLXRvcC1bMTBweF0gYm9yZGVyIGJvcmRlci1ib3JkZXIgcm91bmRlZC1mdWxsIHB4LTEgZm9udC1zYW5zIHRleHQteHMgYmctY2FyZCB0ZXh0LWFjY2VudCIsY2hpbGRyZW46bH0pLHcuanN4KFVPLHtzaXplOjE4fSldfSl9KSx3LmpzeCgiYSIse2NsYXNzTmFtZTpQbSxocmVmOmUuZ2V0RGlzYWJsZVVybCh3aW5kb3cubG9jYXRpb24uaHJlZiksY2hpbGRyZW46dy5qc3goImRpdiIse2NsYXNzTmFtZToiaC1bMjRweF0gdy1bMjRweF0gZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOncuanN4KFdPLHtzaXplOjE4fSl9KX0pXX0pfWZ1bmN0aW9uIHgwKHtocmVmOmUsY2hpbGRyZW46dH0pe3JldHVybiB3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgaC1mdWxsIGZvbnQtc2FucyBib3JkZXItMiByb3VuZGVkLWZ1bGwgZ2FwLXgtMyB0ZXh0LXByaW1hcnkgYmctYmFja2dyb3VuZCBib3JkZXItZmlsbCIsY2hpbGRyZW46dy5qc3goImEiLHtjbGFzc05hbWU6UG0saHJlZjplLGNoaWxkcmVuOncuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTIgZ2FwLXgtMiIsY2hpbGRyZW46dH0pfSl9KX1mdW5jdGlvbiBHTyh7Y2hpbGRyZW46ZX0pe3JldHVybiB3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgaC1mdWxsIHB4LTIgcHktMiBmb250LXNhbnMgYm9yZGVyLTIgcm91bmRlZC1mdWxsIGdhcC14LTMgdGV4dC1wcmltYXJ5IGJnLWJhY2tncm91bmQgYm9yZGVyLWZpbGwiLGNoaWxkcmVuOmV9KX1mdW5jdGlvbiBOdSh7YWN0aXZlOmUsb25DbGljazp0LGNoaWxkcmVuOm59KXtyZXR1cm4gdy5qc3goImJ1dHRvbiIse2NsYXNzTmFtZTp2ZChQbSx7ImJnLWFjY2VudCBkcm9wLXNoYWRvdy1bMHB4XzBweF8xMnB4X3JnYmEoNTYsMjA1LDE1MiwwLjYwKV0iOmV9KSxvbkNsaWNrOnQsY2hpbGRyZW46bn0pfWNvbnN0IHcwPWU9PnR5cGVvZiBlPT0iYm9vbGVhbiI/IiIuY29uY2F0KGUpOmU9PT0wPyIwIjplLF8wPXF3LFlPPShlLHQpPT5uPT57dmFyIHI7aWYoKHQ9PW51bGw/dm9pZCAwOnQudmFyaWFudHMpPT1udWxsKXJldHVybiBfMChlLG49PW51bGw/dm9pZCAwOm4uY2xhc3Msbj09bnVsbD92b2lkIDA6bi5jbGFzc05hbWUpO2NvbnN0e3ZhcmlhbnRzOm8sZGVmYXVsdFZhcmlhbnRzOml9PXQsbD1PYmplY3Qua2V5cyhvKS5tYXAodT0+e2NvbnN0IGM9bj09bnVsbD92b2lkIDA6blt1XSxkPWk9PW51bGw/dm9pZCAwOmlbdV07aWYoYz09PW51bGwpcmV0dXJuIG51bGw7Y29uc3QgZj13MChjKXx8dzAoZCk7cmV0dXJuIG9bdV1bZl19KSxzPW4mJk9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgodSxjKT0+e2xldFtkLGZdPWM7cmV0dXJuIGY9PT12b2lkIDB8fCh1W2RdPWYpLHV9LHt9KSxhPXQ9PW51bGx8fChyPXQuY29tcG91bmRWYXJpYW50cyk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnJlZHVjZSgodSxjKT0+e2xldHtjbGFzczpkLGNsYXNzTmFtZTpmLC4uLmh9PWM7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGgpLmV2ZXJ5KG09PntsZXRbZyxfXT1tO3JldHVybiBBcnJheS5pc0FycmF5KF8pP18uaW5jbHVkZXMoey4uLmksLi4uc31bZ10pOnsuLi5pLC4uLnN9W2ddPT09X30pP1suLi51LGQsZl06dX0sW10pO3JldHVybiBfMChlLGwsYSxuPT1udWxsP3ZvaWQgMDpuLmNsYXNzLG49PW51bGw/dm9pZCAwOm4uY2xhc3NOYW1lKX0sWE89WU8oImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gcmluZy1vZmZzZXQtYmFja2dyb3VuZCB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIix7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6ImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgaG92ZXI6YmctcHJpbWFyeS85MCIsZGVzdHJ1Y3RpdmU6ImJnLWRlc3RydWN0aXZlIHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCIsb3V0bGluZToiYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIixzZWNvbmRhcnk6ImJnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCIsZ2hvc3Q6ImhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIixsaW5rOiJ0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZSJ9LHNpemU6e2RlZmF1bHQ6ImgtMTAgcHgtNCBweS0yIixzbToiaC05IHJvdW5kZWQtbWQgcHgtMyIsbGc6ImgtMTEgcm91bmRlZC1tZCBweC04IixpY29uOiJoLTEwIHctMTAifX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OiJkZWZhdWx0IixzaXplOiJkZWZhdWx0In19KSxlcz1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSx2YXJpYW50OnQsc2l6ZTpuLGFzQ2hpbGQ6cj0hMSwuLi5vfSxpKT0+e2NvbnN0IGw9cj9SbDoiYnV0dG9uIjtyZXR1cm4gdy5qc3gobCx7Y2xhc3NOYW1lOnV0KFhPKHt2YXJpYW50OnQsc2l6ZTpuLGNsYXNzTmFtZTplfSkpLHJlZjppLC4uLm99KX0pO2VzLmRpc3BsYXlOYW1lPSJCdXR0b24iO2Z1bmN0aW9uIFFPKGU9ImRhcmsiKXtjb25zdFt0LG5dPXAudXNlU3RhdGUoZSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57bG9jYWxTdG9yYWdlLmdldEl0ZW0oInZhbC10aGVtZSIpPT09ImxpZ2h0Ij9uKCJsaWdodCIpOmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2YWwtdGhlbWUiKT09PSJkYXJrInx8d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcz9uKCJkYXJrIik6d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIpLm1hdGNoZXMmJm4oImxpZ2h0Iik7Y29uc3Qgcj1vPT57bG9jYWxTdG9yYWdlLmdldEl0ZW0oInZhbC10aGVtZSIpfHxuKG8ubWF0Y2hlcz8iZGFyayI6ImxpZ2h0Iil9O3JldHVybiB3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsciksKCk9Pnt3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIscil9fSxbXSksW3Qscj0+e2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJ2YWwtdGhlbWUiLHIpLG4ocil9XX1jb25zdCBPbT1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSx0eXBlOnQsLi4ubn0scik9PncuanN4KCJpbnB1dCIse3R5cGU6dCxjbGFzc05hbWU6dXQoImZsZXggaC0xMCB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcHgtMyBweS0yIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmaWxlOmJvcmRlci0wIGZpbGU6YmctdHJhbnNwYXJlbnQgZmlsZTp0ZXh0LXNtIGZpbGU6Zm9udC1tZWRpdW0gcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCIsZSkscmVmOnIsLi4ubn0pKTtPbS5kaXNwbGF5TmFtZT0iSW5wdXQiO2Z1bmN0aW9uIHZFKGUpe2NvbnN0IHQ9ZSsiQ29sbGVjdGlvblByb3ZpZGVyIixbbixyXT1OaSh0KSxbbyxpXT1uKHQse2NvbGxlY3Rpb25SZWY6e2N1cnJlbnQ6bnVsbH0saXRlbU1hcDpuZXcgTWFwfSksbD1oPT57Y29uc3R7c2NvcGU6bSxjaGlsZHJlbjpnfT1oLF89ZWUudXNlUmVmKG51bGwpLHY9ZWUudXNlUmVmKG5ldyBNYXApLmN1cnJlbnQ7cmV0dXJuIGVlLmNyZWF0ZUVsZW1lbnQobyx7c2NvcGU6bSxpdGVtTWFwOnYsY29sbGVjdGlvblJlZjpffSxnKX0scz1lKyJDb2xsZWN0aW9uU2xvdCIsYT1lZS5mb3J3YXJkUmVmKChoLG0pPT57Y29uc3R7c2NvcGU6ZyxjaGlsZHJlbjpffT1oLHY9aShzLGcpLHk9WmUobSx2LmNvbGxlY3Rpb25SZWYpO3JldHVybiBlZS5jcmVhdGVFbGVtZW50KFJsLHtyZWY6eX0sXyl9KSx1PWUrIkNvbGxlY3Rpb25JdGVtU2xvdCIsYz0iZGF0YS1yYWRpeC1jb2xsZWN0aW9uLWl0ZW0iLGQ9ZWUuZm9yd2FyZFJlZigoaCxtKT0+e2NvbnN0e3Njb3BlOmcsY2hpbGRyZW46XywuLi52fT1oLHk9ZWUudXNlUmVmKG51bGwpLHg9WmUobSx5KSxTPWkodSxnKTtyZXR1cm4gZWUudXNlRWZmZWN0KCgpPT4oUy5pdGVtTWFwLnNldCh5LHtyZWY6eSwuLi52fSksKCk9PnZvaWQgUy5pdGVtTWFwLmRlbGV0ZSh5KSkpLGVlLmNyZWF0ZUVsZW1lbnQoUmwse1tjXToiIixyZWY6eH0sXyl9KTtmdW5jdGlvbiBmKGgpe2NvbnN0IG09aShlKyJDb2xsZWN0aW9uQ29uc3VtZXIiLGgpO3JldHVybiBlZS51c2VDYWxsYmFjaygoKT0+e2NvbnN0IF89bS5jb2xsZWN0aW9uUmVmLmN1cnJlbnQ7aWYoIV8pcmV0dXJuW107Y29uc3Qgdj1BcnJheS5mcm9tKF8ucXVlcnlTZWxlY3RvckFsbChgWyR7Y31dYCkpO3JldHVybiBBcnJheS5mcm9tKG0uaXRlbU1hcC52YWx1ZXMoKSkuc29ydCgoUyxrKT0+di5pbmRleE9mKFMucmVmLmN1cnJlbnQpLXYuaW5kZXhPZihrLnJlZi5jdXJyZW50KSl9LFttLmNvbGxlY3Rpb25SZWYsbS5pdGVtTWFwXSl9cmV0dXJuW3tQcm92aWRlcjpsLFNsb3Q6YSxJdGVtU2xvdDpkfSxmLHJdfWZ1bmN0aW9uIEpPKGUsdD1nbG9iYWxUaGlzPT1udWxsP3ZvaWQgMDpnbG9iYWxUaGlzLmRvY3VtZW50KXtjb25zdCBuPUh0KGUpO3AudXNlRWZmZWN0KCgpPT57Y29uc3Qgcj1vPT57by5rZXk9PT0iRXNjYXBlIiYmbihvKX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsciksKCk9PnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscil9LFtuLHRdKX1jb25zdCBPcD0iZGlzbWlzc2FibGVMYXllci51cGRhdGUiLFpPPSJkaXNtaXNzYWJsZUxheWVyLnBvaW50ZXJEb3duT3V0c2lkZSIscU89ImRpc21pc3NhYmxlTGF5ZXIuZm9jdXNPdXRzaWRlIjtsZXQgUzA7Y29uc3QgZTU9cC5jcmVhdGVDb250ZXh0KHtsYXllcnM6bmV3IFNldCxsYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZDpuZXcgU2V0LGJyYW5jaGVzOm5ldyBTZXR9KSx0NT1wLmZvcndhcmRSZWYoKGUsdCk9Pnt2YXIgbjtjb25zdHtkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6cj0hMSxvbkVzY2FwZUtleURvd246byxvblBvaW50ZXJEb3duT3V0c2lkZTppLG9uRm9jdXNPdXRzaWRlOmwsb25JbnRlcmFjdE91dHNpZGU6cyxvbkRpc21pc3M6YSwuLi51fT1lLGM9cC51c2VDb250ZXh0KGU1KSxbZCxmXT1wLnVzZVN0YXRlKG51bGwpLGg9KG49ZD09bnVsbD92b2lkIDA6ZC5vd25lckRvY3VtZW50KSE9PW51bGwmJm4hPT12b2lkIDA/bjpnbG9iYWxUaGlzPT1udWxsP3ZvaWQgMDpnbG9iYWxUaGlzLmRvY3VtZW50LFssbV09cC51c2VTdGF0ZSh7fSksZz1aZSh0LE49PmYoTikpLF89QXJyYXkuZnJvbShjLmxheWVycyksW3ZdPVsuLi5jLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkXS5zbGljZSgtMSkseT1fLmluZGV4T2YodikseD1kP18uaW5kZXhPZihkKTotMSxTPWMubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZT4wLGs9eD49eSxUPW41KE49Pntjb25zdCBEPU4udGFyZ2V0LE09Wy4uLmMuYnJhbmNoZXNdLnNvbWUoaj0+ai5jb250YWlucyhEKSk7IWt8fE18fChpPT1udWxsfHxpKE4pLHM9PW51bGx8fHMoTiksTi5kZWZhdWx0UHJldmVudGVkfHxhPT1udWxsfHxhKCkpfSxoKSxiPXI1KE49Pntjb25zdCBEPU4udGFyZ2V0O1suLi5jLmJyYW5jaGVzXS5zb21lKGo9PmouY29udGFpbnMoRCkpfHwobD09bnVsbHx8bChOKSxzPT1udWxsfHxzKE4pLE4uZGVmYXVsdFByZXZlbnRlZHx8YT09bnVsbHx8YSgpKX0saCk7cmV0dXJuIEpPKE49Pnt4PT09Yy5sYXllcnMuc2l6ZS0xJiYobz09bnVsbHx8byhOKSwhTi5kZWZhdWx0UHJldmVudGVkJiZhJiYoTi5wcmV2ZW50RGVmYXVsdCgpLGEoKSkpfSxoKSxwLnVzZUVmZmVjdCgoKT0+e2lmKGQpcmV0dXJuIHImJihjLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYoUzA9aC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHMsaC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiKSxjLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmFkZChkKSksYy5sYXllcnMuYWRkKGQpLEUwKCksKCk9PntyJiZjLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0xJiYoaC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9UzApfX0sW2QsaCxyLGNdKSxwLnVzZUVmZmVjdCgoKT0+KCk9PntkJiYoYy5sYXllcnMuZGVsZXRlKGQpLGMubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuZGVsZXRlKGQpLEUwKCkpfSxbZCxjXSkscC51c2VFZmZlY3QoKCk9Pntjb25zdCBOPSgpPT5tKHt9KTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihPcCxOKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihPcCxOKX0sW10pLHAuY3JlYXRlRWxlbWVudChJZS5kaXYsdGUoe30sdSx7cmVmOmcsc3R5bGU6e3BvaW50ZXJFdmVudHM6Uz9rPyJhdXRvIjoibm9uZSI6dm9pZCAwLC4uLmUuc3R5bGV9LG9uRm9jdXNDYXB0dXJlOkdlKGUub25Gb2N1c0NhcHR1cmUsYi5vbkZvY3VzQ2FwdHVyZSksb25CbHVyQ2FwdHVyZTpHZShlLm9uQmx1ckNhcHR1cmUsYi5vbkJsdXJDYXB0dXJlKSxvblBvaW50ZXJEb3duQ2FwdHVyZTpHZShlLm9uUG9pbnRlckRvd25DYXB0dXJlLFQub25Qb2ludGVyRG93bkNhcHR1cmUpfSkpfSk7ZnVuY3Rpb24gbjUoZSx0PWdsb2JhbFRoaXM9PW51bGw/dm9pZCAwOmdsb2JhbFRoaXMuZG9jdW1lbnQpe2NvbnN0IG49SHQoZSkscj1wLnVzZVJlZighMSksbz1wLnVzZVJlZigoKT0+e30pO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGk9cz0+e2lmKHMudGFyZ2V0JiYhci5jdXJyZW50KXtsZXQgYz1mdW5jdGlvbigpe3lFKFpPLG4sdSx7ZGlzY3JldGU6ITB9KX07dmFyIGE9Yztjb25zdCB1PXtvcmlnaW5hbEV2ZW50OnN9O3MucG9pbnRlclR5cGU9PT0idG91Y2giPyh0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixvLmN1cnJlbnQpLG8uY3VycmVudD1jLHQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLG8uY3VycmVudCx7b25jZTohMH0pKTpjKCl9ZWxzZSB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixvLmN1cnJlbnQpO3IuY3VycmVudD0hMX0sbD13aW5kb3cuc2V0VGltZW91dCgoKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLGkpfSwwKTtyZXR1cm4oKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQobCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsaSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsby5jdXJyZW50KX19LFt0LG5dKSx7b25Qb2ludGVyRG93bkNhcHR1cmU6KCk9PnIuY3VycmVudD0hMH19ZnVuY3Rpb24gcjUoZSx0PWdsb2JhbFRoaXM9PW51bGw/dm9pZCAwOmdsb2JhbFRoaXMuZG9jdW1lbnQpe2NvbnN0IG49SHQoZSkscj1wLnVzZVJlZighMSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3Qgbz1pPT57aS50YXJnZXQmJiFyLmN1cnJlbnQmJnlFKHFPLG4se29yaWdpbmFsRXZlbnQ6aX0se2Rpc2NyZXRlOiExfSl9O3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLG8pLCgpPT50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLG8pfSxbdCxuXSkse29uRm9jdXNDYXB0dXJlOigpPT5yLmN1cnJlbnQ9ITAsb25CbHVyQ2FwdHVyZTooKT0+ci5jdXJyZW50PSExfX1mdW5jdGlvbiBFMCgpe2NvbnN0IGU9bmV3IEN1c3RvbUV2ZW50KE9wKTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGUpfWZ1bmN0aW9uIHlFKGUsdCxuLHtkaXNjcmV0ZTpyfSl7Y29uc3Qgbz1uLm9yaWdpbmFsRXZlbnQudGFyZ2V0LGk9bmV3IEN1c3RvbUV2ZW50KGUse2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMCxkZXRhaWw6bn0pO3QmJm8uYWRkRXZlbnRMaXN0ZW5lcihlLHQse29uY2U6ITB9KSxyP0lUKG8saSk6by5kaXNwYXRjaEV2ZW50KGkpfWxldCBEZj0wO2Z1bmN0aW9uIG81KCl7cC51c2VFZmZlY3QoKCk9Pnt2YXIgZSx0O2NvbnN0IG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcmFkaXgtZm9jdXMtZ3VhcmRdIik7cmV0dXJuIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJhZnRlcmJlZ2luIiwoZT1uWzBdKSE9PW51bGwmJmUhPT12b2lkIDA/ZTpDMCgpKSxkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudCgiYmVmb3JlZW5kIiwodD1uWzFdKSE9PW51bGwmJnQhPT12b2lkIDA/dDpDMCgpKSxEZisrLCgpPT57RGY9PT0xJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1yYWRpeC1mb2N1cy1ndWFyZF0iKS5mb3JFYWNoKHI9PnIucmVtb3ZlKCkpLERmLS19fSxbXSl9ZnVuY3Rpb24gQzAoKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoImRhdGEtcmFkaXgtZm9jdXMtZ3VhcmQiLCIiKSxlLnRhYkluZGV4PTAsZS5zdHlsZS5jc3NUZXh0PSJvdXRsaW5lOiBub25lOyBvcGFjaXR5OiAwOyBwb3NpdGlvbjogZml4ZWQ7IHBvaW50ZXItZXZlbnRzOiBub25lIixlfWNvbnN0IElmPSJmb2N1c1Njb3BlLmF1dG9Gb2N1c09uTW91bnQiLGpmPSJmb2N1c1Njb3BlLmF1dG9Gb2N1c09uVW5tb3VudCIsJDA9e2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMH0saTU9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7bG9vcDpuPSExLHRyYXBwZWQ6cj0hMSxvbk1vdW50QXV0b0ZvY3VzOm8sb25Vbm1vdW50QXV0b0ZvY3VzOmksLi4ubH09ZSxbcyxhXT1wLnVzZVN0YXRlKG51bGwpLHU9SHQobyksYz1IdChpKSxkPXAudXNlUmVmKG51bGwpLGY9WmUodCxnPT5hKGcpKSxoPXAudXNlUmVmKHtwYXVzZWQ6ITEscGF1c2UoKXt0aGlzLnBhdXNlZD0hMH0scmVzdW1lKCl7dGhpcy5wYXVzZWQ9ITF9fSkuY3VycmVudDtwLnVzZUVmZmVjdCgoKT0+e2lmKHIpe2xldCB5PWZ1bmN0aW9uKFQpe2lmKGgucGF1c2VkfHwhcylyZXR1cm47Y29uc3QgYj1ULnRhcmdldDtzLmNvbnRhaW5zKGIpP2QuY3VycmVudD1iOmNvKGQuY3VycmVudCx7c2VsZWN0OiEwfSl9LHg9ZnVuY3Rpb24oVCl7aWYoaC5wYXVzZWR8fCFzKXJldHVybjtjb25zdCBiPVQucmVsYXRlZFRhcmdldDtiIT09bnVsbCYmKHMuY29udGFpbnMoYil8fGNvKGQuY3VycmVudCx7c2VsZWN0OiEwfSkpfSxTPWZ1bmN0aW9uKFQpe2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1kb2N1bWVudC5ib2R5KWZvcihjb25zdCBOIG9mIFQpTi5yZW1vdmVkTm9kZXMubGVuZ3RoPjAmJmNvKHMpfTt2YXIgZz15LF89eCx2PVM7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIseSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHgpO2NvbnN0IGs9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoUyk7cmV0dXJuIHMmJmsub2JzZXJ2ZShzLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIseSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHgpLGsuZGlzY29ubmVjdCgpfX19LFtyLHMsaC5wYXVzZWRdKSxwLnVzZUVmZmVjdCgoKT0+e2lmKHMpe2IwLmFkZChoKTtjb25zdCBnPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYoIXMuY29udGFpbnMoZykpe2NvbnN0IHY9bmV3IEN1c3RvbUV2ZW50KElmLCQwKTtzLmFkZEV2ZW50TGlzdGVuZXIoSWYsdSkscy5kaXNwYXRjaEV2ZW50KHYpLHYuZGVmYXVsdFByZXZlbnRlZHx8KGw1KGQ1KHhFKHMpKSx7c2VsZWN0OiEwfSksZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWcmJmNvKHMpKX1yZXR1cm4oKT0+e3MucmVtb3ZlRXZlbnRMaXN0ZW5lcihJZix1KSxzZXRUaW1lb3V0KCgpPT57Y29uc3Qgdj1uZXcgQ3VzdG9tRXZlbnQoamYsJDApO3MuYWRkRXZlbnRMaXN0ZW5lcihqZixjKSxzLmRpc3BhdGNoRXZlbnQodiksdi5kZWZhdWx0UHJldmVudGVkfHxjbyhnPz9kb2N1bWVudC5ib2R5LHtzZWxlY3Q6ITB9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoamYsYyksYjAucmVtb3ZlKGgpfSwwKX19fSxbcyx1LGMsaF0pO2NvbnN0IG09cC51c2VDYWxsYmFjayhnPT57aWYoIW4mJiFyfHxoLnBhdXNlZClyZXR1cm47Y29uc3QgXz1nLmtleT09PSJUYWIiJiYhZy5hbHRLZXkmJiFnLmN0cmxLZXkmJiFnLm1ldGFLZXksdj1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKF8mJnYpe2NvbnN0IHk9Zy5jdXJyZW50VGFyZ2V0LFt4LFNdPXM1KHkpO3gmJlM/IWcuc2hpZnRLZXkmJnY9PT1TPyhnLnByZXZlbnREZWZhdWx0KCksbiYmY28oeCx7c2VsZWN0OiEwfSkpOmcuc2hpZnRLZXkmJnY9PT14JiYoZy5wcmV2ZW50RGVmYXVsdCgpLG4mJmNvKFMse3NlbGVjdDohMH0pKTp2PT09eSYmZy5wcmV2ZW50RGVmYXVsdCgpfX0sW24scixoLnBhdXNlZF0pO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoSWUuZGl2LHRlKHt0YWJJbmRleDotMX0sbCx7cmVmOmYsb25LZXlEb3duOm19KSl9KTtmdW5jdGlvbiBsNShlLHtzZWxlY3Q6dD0hMX09e30pe2NvbnN0IG49ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoY29uc3QgciBvZiBlKWlmKGNvKHIse3NlbGVjdDp0fSksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PW4pcmV0dXJufWZ1bmN0aW9uIHM1KGUpe2NvbnN0IHQ9eEUoZSksbj1rMCh0LGUpLHI9azAodC5yZXZlcnNlKCksZSk7cmV0dXJuW24scl19ZnVuY3Rpb24geEUoZSl7Y29uc3QgdD1bXSxuPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCx7YWNjZXB0Tm9kZTpyPT57Y29uc3Qgbz1yLnRhZ05hbWU9PT0iSU5QVVQiJiZyLnR5cGU9PT0iaGlkZGVuIjtyZXR1cm4gci5kaXNhYmxlZHx8ci5oaWRkZW58fG8/Tm9kZUZpbHRlci5GSUxURVJfU0tJUDpyLnRhYkluZGV4Pj0wP05vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDpOb2RlRmlsdGVyLkZJTFRFUl9TS0lQfX0pO2Zvcig7bi5uZXh0Tm9kZSgpOyl0LnB1c2gobi5jdXJyZW50Tm9kZSk7cmV0dXJuIHR9ZnVuY3Rpb24gazAoZSx0KXtmb3IoY29uc3QgbiBvZiBlKWlmKCFhNShuLHt1cFRvOnR9KSlyZXR1cm4gbn1mdW5jdGlvbiBhNShlLHt1cFRvOnR9KXtpZihnZXRDb21wdXRlZFN0eWxlKGUpLnZpc2liaWxpdHk9PT0iaGlkZGVuIilyZXR1cm4hMDtmb3IoO2U7KXtpZih0IT09dm9pZCAwJiZlPT09dClyZXR1cm4hMTtpZihnZXRDb21wdXRlZFN0eWxlKGUpLmRpc3BsYXk9PT0ibm9uZSIpcmV0dXJuITA7ZT1lLnBhcmVudEVsZW1lbnR9cmV0dXJuITF9ZnVuY3Rpb24gdTUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50JiYic2VsZWN0ImluIGV9ZnVuY3Rpb24gY28oZSx7c2VsZWN0OnQ9ITF9PXt9KXtpZihlJiZlLmZvY3VzKXtjb25zdCBuPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7ZS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGUhPT1uJiZ1NShlKSYmdCYmZS5zZWxlY3QoKX19Y29uc3QgYjA9YzUoKTtmdW5jdGlvbiBjNSgpe2xldCBlPVtdO3JldHVybnthZGQodCl7Y29uc3Qgbj1lWzBdO3QhPT1uJiYobj09bnVsbHx8bi5wYXVzZSgpKSxlPVQwKGUsdCksZS51bnNoaWZ0KHQpfSxyZW1vdmUodCl7dmFyIG47ZT1UMChlLHQpLChuPWVbMF0pPT09bnVsbHx8bj09PXZvaWQgMHx8bi5yZXN1bWUoKX19fWZ1bmN0aW9uIFQwKGUsdCl7Y29uc3Qgbj1bLi4uZV0scj1uLmluZGV4T2YodCk7cmV0dXJuIHIhPT0tMSYmbi5zcGxpY2UociwxKSxufWZ1bmN0aW9uIGQ1KGUpe3JldHVybiBlLmZpbHRlcih0PT50LnRhZ05hbWUhPT0iQSIpfWNvbnN0IGY1PUMxLnVzZUlkfHwoKCk9Pnt9KTtsZXQgaDU9MDtmdW5jdGlvbiBBZChlKXtjb25zdFt0LG5dPXAudXNlU3RhdGUoZjUoKSk7cmV0dXJuIE5uKCgpPT57ZXx8bihyPT5yPz9TdHJpbmcoaDUrKykpfSxbZV0pLGV8fCh0P2ByYWRpeC0ke3R9YDoiIil9Y29uc3QgcDU9WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSxCbz1NYXRoLm1pbixTbj1NYXRoLm1heCxHYz1NYXRoLnJvdW5kLFJ1PU1hdGguZmxvb3IsV289ZT0+KHt4OmUseTplfSksZzU9e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsYm90dG9tOiJ0b3AiLHRvcDoiYm90dG9tIn0sbTU9e3N0YXJ0OiJlbmQiLGVuZDoic3RhcnQifTtmdW5jdGlvbiBBcChlLHQsbil7cmV0dXJuIFNuKGUsQm8odCxuKSl9ZnVuY3Rpb24gWHIoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSh0KTplfWZ1bmN0aW9uIFFyKGUpe3JldHVybiBlLnNwbGl0KCItIilbMF19ZnVuY3Rpb24gdHMoZSl7cmV0dXJuIGUuc3BsaXQoIi0iKVsxXX1mdW5jdGlvbiBBbShlKXtyZXR1cm4gZT09PSJ4Ij8ieSI6IngifWZ1bmN0aW9uIE1tKGUpe3JldHVybiBlPT09InkiPyJoZWlnaHQiOiJ3aWR0aCJ9ZnVuY3Rpb24gbnMoZSl7cmV0dXJuWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyhRcihlKSk/InkiOiJ4In1mdW5jdGlvbiBMbShlKXtyZXR1cm4gQW0obnMoZSkpfWZ1bmN0aW9uIHY1KGUsdCxuKXtuPT09dm9pZCAwJiYobj0hMSk7Y29uc3Qgcj10cyhlKSxvPUxtKGUpLGk9TW0obyk7bGV0IGw9bz09PSJ4Ij9yPT09KG4/ImVuZCI6InN0YXJ0Iik/InJpZ2h0IjoibGVmdCI6cj09PSJzdGFydCI/ImJvdHRvbSI6InRvcCI7cmV0dXJuIHQucmVmZXJlbmNlW2ldPnQuZmxvYXRpbmdbaV0mJihsPVljKGwpKSxbbCxZYyhsKV19ZnVuY3Rpb24geTUoZSl7Y29uc3QgdD1ZYyhlKTtyZXR1cm5bTXAoZSksdCxNcCh0KV19ZnVuY3Rpb24gTXAoZSl7cmV0dXJuIGUucmVwbGFjZSgvc3RhcnR8ZW5kL2csdD0+bTVbdF0pfWZ1bmN0aW9uIHg1KGUsdCxuKXtjb25zdCByPVsibGVmdCIsInJpZ2h0Il0sbz1bInJpZ2h0IiwibGVmdCJdLGk9WyJ0b3AiLCJib3R0b20iXSxsPVsiYm90dG9tIiwidG9wIl07c3dpdGNoKGUpe2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6cmV0dXJuIG4/dD9vOnI6dD9yOm87Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpyZXR1cm4gdD9pOmw7ZGVmYXVsdDpyZXR1cm5bXX19ZnVuY3Rpb24gdzUoZSx0LG4scil7Y29uc3Qgbz10cyhlKTtsZXQgaT14NShRcihlKSxuPT09InN0YXJ0IixyKTtyZXR1cm4gbyYmKGk9aS5tYXAobD0+bCsiLSIrbyksdCYmKGk9aS5jb25jYXQoaS5tYXAoTXApKSkpLGl9ZnVuY3Rpb24gWWMoZSl7cmV0dXJuIGUucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csdD0+ZzVbdF0pfWZ1bmN0aW9uIF81KGUpe3JldHVybnt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MCwuLi5lfX1mdW5jdGlvbiB3RShlKXtyZXR1cm4gdHlwZW9mIGUhPSJudW1iZXIiP181KGUpOnt0b3A6ZSxyaWdodDplLGJvdHRvbTplLGxlZnQ6ZX19ZnVuY3Rpb24gWGMoZSl7cmV0dXJuey4uLmUsdG9wOmUueSxsZWZ0OmUueCxyaWdodDplLngrZS53aWR0aCxib3R0b206ZS55K2UuaGVpZ2h0fX1mdW5jdGlvbiBOMChlLHQsbil7bGV0e3JlZmVyZW5jZTpyLGZsb2F0aW5nOm99PWU7Y29uc3QgaT1ucyh0KSxsPUxtKHQpLHM9TW0obCksYT1Rcih0KSx1PWk9PT0ieSIsYz1yLngrci53aWR0aC8yLW8ud2lkdGgvMixkPXIueStyLmhlaWdodC8yLW8uaGVpZ2h0LzIsZj1yW3NdLzItb1tzXS8yO2xldCBoO3N3aXRjaChhKXtjYXNlInRvcCI6aD17eDpjLHk6ci55LW8uaGVpZ2h0fTticmVhaztjYXNlImJvdHRvbSI6aD17eDpjLHk6ci55K3IuaGVpZ2h0fTticmVhaztjYXNlInJpZ2h0IjpoPXt4OnIueCtyLndpZHRoLHk6ZH07YnJlYWs7Y2FzZSJsZWZ0IjpoPXt4OnIueC1vLndpZHRoLHk6ZH07YnJlYWs7ZGVmYXVsdDpoPXt4OnIueCx5OnIueX19c3dpdGNoKHRzKHQpKXtjYXNlInN0YXJ0IjpoW2xdLT1mKihuJiZ1Py0xOjEpO2JyZWFrO2Nhc2UiZW5kIjpoW2xdKz1mKihuJiZ1Py0xOjEpO2JyZWFrfXJldHVybiBofWNvbnN0IFM1PWFzeW5jKGUsdCxuKT0+e2NvbnN0e3BsYWNlbWVudDpyPSJib3R0b20iLHN0cmF0ZWd5Om89ImFic29sdXRlIixtaWRkbGV3YXJlOmk9W10scGxhdGZvcm06bH09bixzPWkuZmlsdGVyKEJvb2xlYW4pLGE9YXdhaXQobC5pc1JUTD09bnVsbD92b2lkIDA6bC5pc1JUTCh0KSk7bGV0IHU9YXdhaXQgbC5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTplLGZsb2F0aW5nOnQsc3RyYXRlZ3k6b30pLHt4OmMseTpkfT1OMCh1LHIsYSksZj1yLGg9e30sbT0wO2ZvcihsZXQgZz0wO2c8cy5sZW5ndGg7ZysrKXtjb25zdHtuYW1lOl8sZm46dn09c1tnXSx7eDp5LHk6eCxkYXRhOlMscmVzZXQ6a309YXdhaXQgdih7eDpjLHk6ZCxpbml0aWFsUGxhY2VtZW50OnIscGxhY2VtZW50OmYsc3RyYXRlZ3k6byxtaWRkbGV3YXJlRGF0YTpoLHJlY3RzOnUscGxhdGZvcm06bCxlbGVtZW50czp7cmVmZXJlbmNlOmUsZmxvYXRpbmc6dH19KTtpZihjPXk/P2MsZD14Pz9kLGg9ey4uLmgsW19dOnsuLi5oW19dLC4uLlN9fSxrJiZtPD01MCl7bSsrLHR5cGVvZiBrPT0ib2JqZWN0IiYmKGsucGxhY2VtZW50JiYoZj1rLnBsYWNlbWVudCksay5yZWN0cyYmKHU9ay5yZWN0cz09PSEwP2F3YWl0IGwuZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6ZSxmbG9hdGluZzp0LHN0cmF0ZWd5Om99KTprLnJlY3RzKSx7eDpjLHk6ZH09TjAodSxmLGEpKSxnPS0xO2NvbnRpbnVlfX1yZXR1cm57eDpjLHk6ZCxwbGFjZW1lbnQ6ZixzdHJhdGVneTpvLG1pZGRsZXdhcmVEYXRhOmh9fTthc3luYyBmdW5jdGlvbiBSYShlLHQpe3ZhciBuO3Q9PT12b2lkIDAmJih0PXt9KTtjb25zdHt4OnIseTpvLHBsYXRmb3JtOmkscmVjdHM6bCxlbGVtZW50czpzLHN0cmF0ZWd5OmF9PWUse2JvdW5kYXJ5OnU9ImNsaXBwaW5nQW5jZXN0b3JzIixyb290Qm91bmRhcnk6Yz0idmlld3BvcnQiLGVsZW1lbnRDb250ZXh0OmQ9ImZsb2F0aW5nIixhbHRCb3VuZGFyeTpmPSExLHBhZGRpbmc6aD0wfT1Ycih0LGUpLG09d0UoaCksXz1zW2Y/ZD09PSJmbG9hdGluZyI/InJlZmVyZW5jZSI6ImZsb2F0aW5nIjpkXSx2PVhjKGF3YWl0IGkuZ2V0Q2xpcHBpbmdSZWN0KHtlbGVtZW50OihuPWF3YWl0KGkuaXNFbGVtZW50PT1udWxsP3ZvaWQgMDppLmlzRWxlbWVudChfKSkpPT1udWxsfHxuP186Xy5jb250ZXh0RWxlbWVudHx8YXdhaXQoaS5nZXREb2N1bWVudEVsZW1lbnQ9PW51bGw/dm9pZCAwOmkuZ2V0RG9jdW1lbnRFbGVtZW50KHMuZmxvYXRpbmcpKSxib3VuZGFyeTp1LHJvb3RCb3VuZGFyeTpjLHN0cmF0ZWd5OmF9KSkseT1kPT09ImZsb2F0aW5nIj97Li4ubC5mbG9hdGluZyx4OnIseTpvfTpsLnJlZmVyZW5jZSx4PWF3YWl0KGkuZ2V0T2Zmc2V0UGFyZW50PT1udWxsP3ZvaWQgMDppLmdldE9mZnNldFBhcmVudChzLmZsb2F0aW5nKSksUz1hd2FpdChpLmlzRWxlbWVudD09bnVsbD92b2lkIDA6aS5pc0VsZW1lbnQoeCkpP2F3YWl0KGkuZ2V0U2NhbGU9PW51bGw/dm9pZCAwOmkuZ2V0U2NhbGUoeCkpfHx7eDoxLHk6MX06e3g6MSx5OjF9LGs9WGMoaS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdD9hd2FpdCBpLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtyZWN0Onksb2Zmc2V0UGFyZW50Ongsc3RyYXRlZ3k6YX0pOnkpO3JldHVybnt0b3A6KHYudG9wLWsudG9wK20udG9wKS9TLnksYm90dG9tOihrLmJvdHRvbS12LmJvdHRvbSttLmJvdHRvbSkvUy55LGxlZnQ6KHYubGVmdC1rLmxlZnQrbS5sZWZ0KS9TLngscmlnaHQ6KGsucmlnaHQtdi5yaWdodCttLnJpZ2h0KS9TLnh9fWNvbnN0IFIwPWU9Pih7bmFtZToiYXJyb3ciLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtjb25zdHt4Om4seTpyLHBsYWNlbWVudDpvLHJlY3RzOmkscGxhdGZvcm06bCxlbGVtZW50czpzLG1pZGRsZXdhcmVEYXRhOmF9PXQse2VsZW1lbnQ6dSxwYWRkaW5nOmM9MH09WHIoZSx0KXx8e307aWYodT09bnVsbClyZXR1cm57fTtjb25zdCBkPXdFKGMpLGY9e3g6bix5OnJ9LGg9TG0obyksbT1NbShoKSxnPWF3YWl0IGwuZ2V0RGltZW5zaW9ucyh1KSxfPWg9PT0ieSIsdj1fPyJ0b3AiOiJsZWZ0Iix5PV8/ImJvdHRvbSI6InJpZ2h0Iix4PV8/ImNsaWVudEhlaWdodCI6ImNsaWVudFdpZHRoIixTPWkucmVmZXJlbmNlW21dK2kucmVmZXJlbmNlW2hdLWZbaF0taS5mbG9hdGluZ1ttXSxrPWZbaF0taS5yZWZlcmVuY2VbaF0sVD1hd2FpdChsLmdldE9mZnNldFBhcmVudD09bnVsbD92b2lkIDA6bC5nZXRPZmZzZXRQYXJlbnQodSkpO2xldCBiPVQ/VFt4XTowOyghYnx8IWF3YWl0KGwuaXNFbGVtZW50PT1udWxsP3ZvaWQgMDpsLmlzRWxlbWVudChUKSkpJiYoYj1zLmZsb2F0aW5nW3hdfHxpLmZsb2F0aW5nW21dKTtjb25zdCBOPVMvMi1rLzIsRD1iLzItZ1ttXS8yLTEsTT1CbyhkW3ZdLEQpLGo9Qm8oZFt5XSxEKSxCPU0scmU9Yi1nW21dLWosVj1iLzItZ1ttXS8yK04sWT1BcChCLFYscmUpLEM9IWEuYXJyb3cmJnRzKG8pIT1udWxsJiZWIT1ZJiZpLnJlZmVyZW5jZVttXS8yLShWPEI/TTpqKS1nW21dLzI8MCwkPUM/VjxCP1YtQjpWLXJlOjA7cmV0dXJue1toXTpmW2hdKyQsZGF0YTp7W2hdOlksY2VudGVyT2Zmc2V0OlYtWS0kLC4uLkMmJnthbGlnbm1lbnRPZmZzZXQ6JH19LHJlc2V0OkN9fX0pLEU1PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6ImZsaXAiLG9wdGlvbnM6ZSxhc3luYyBmbih0KXt2YXIgbixyO2NvbnN0e3BsYWNlbWVudDpvLG1pZGRsZXdhcmVEYXRhOmkscmVjdHM6bCxpbml0aWFsUGxhY2VtZW50OnMscGxhdGZvcm06YSxlbGVtZW50czp1fT10LHttYWluQXhpczpjPSEwLGNyb3NzQXhpczpkPSEwLGZhbGxiYWNrUGxhY2VtZW50czpmLGZhbGxiYWNrU3RyYXRlZ3k6aD0iYmVzdEZpdCIsZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbjptPSJub25lIixmbGlwQWxpZ25tZW50Omc9ITAsLi4uX309WHIoZSx0KTtpZigobj1pLmFycm93KSE9bnVsbCYmbi5hbGlnbm1lbnRPZmZzZXQpcmV0dXJue307Y29uc3Qgdj1RcihvKSx5PVFyKHMpPT09cyx4PWF3YWl0KGEuaXNSVEw9PW51bGw/dm9pZCAwOmEuaXNSVEwodS5mbG9hdGluZykpLFM9Znx8KHl8fCFnP1tZYyhzKV06eTUocykpOyFmJiZtIT09Im5vbmUiJiZTLnB1c2goLi4udzUocyxnLG0seCkpO2NvbnN0IGs9W3MsLi4uU10sVD1hd2FpdCBSYSh0LF8pLGI9W107bGV0IE49KChyPWkuZmxpcCk9PW51bGw/dm9pZCAwOnIub3ZlcmZsb3dzKXx8W107aWYoYyYmYi5wdXNoKFRbdl0pLGQpe2NvbnN0IEI9djUobyxsLHgpO2IucHVzaChUW0JbMF1dLFRbQlsxXV0pfWlmKE49Wy4uLk4se3BsYWNlbWVudDpvLG92ZXJmbG93czpifV0sIWIuZXZlcnkoQj0+Qjw9MCkpe3ZhciBELE07Y29uc3QgQj0oKChEPWkuZmxpcCk9PW51bGw/dm9pZCAwOkQuaW5kZXgpfHwwKSsxLHJlPWtbQl07aWYocmUpcmV0dXJue2RhdGE6e2luZGV4OkIsb3ZlcmZsb3dzOk59LHJlc2V0OntwbGFjZW1lbnQ6cmV9fTtsZXQgVj0oTT1OLmZpbHRlcihZPT5ZLm92ZXJmbG93c1swXTw9MCkuc29ydCgoWSxDKT0+WS5vdmVyZmxvd3NbMV0tQy5vdmVyZmxvd3NbMV0pWzBdKT09bnVsbD92b2lkIDA6TS5wbGFjZW1lbnQ7aWYoIVYpc3dpdGNoKGgpe2Nhc2UiYmVzdEZpdCI6e3ZhciBqO2NvbnN0IFk9KGo9Ti5tYXAoQz0+W0MucGxhY2VtZW50LEMub3ZlcmZsb3dzLmZpbHRlcigkPT4kPjApLnJlZHVjZSgoJCxFKT0+JCtFLDApXSkuc29ydCgoQywkKT0+Q1sxXS0kWzFdKVswXSk9PW51bGw/dm9pZCAwOmpbMF07WSYmKFY9WSk7YnJlYWt9Y2FzZSJpbml0aWFsUGxhY2VtZW50IjpWPXM7YnJlYWt9aWYobyE9PVYpcmV0dXJue3Jlc2V0OntwbGFjZW1lbnQ6Vn19fXJldHVybnt9fX19O2Z1bmN0aW9uIFAwKGUsdCl7cmV0dXJue3RvcDplLnRvcC10LmhlaWdodCxyaWdodDplLnJpZ2h0LXQud2lkdGgsYm90dG9tOmUuYm90dG9tLXQuaGVpZ2h0LGxlZnQ6ZS5sZWZ0LXQud2lkdGh9fWZ1bmN0aW9uIE8wKGUpe3JldHVybiBwNS5zb21lKHQ9PmVbdF0+PTApfWNvbnN0IEM1PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6ImhpZGUiLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtjb25zdHtyZWN0czpufT10LHtzdHJhdGVneTpyPSJyZWZlcmVuY2VIaWRkZW4iLC4uLm99PVhyKGUsdCk7c3dpdGNoKHIpe2Nhc2UicmVmZXJlbmNlSGlkZGVuIjp7Y29uc3QgaT1hd2FpdCBSYSh0LHsuLi5vLGVsZW1lbnRDb250ZXh0OiJyZWZlcmVuY2UifSksbD1QMChpLG4ucmVmZXJlbmNlKTtyZXR1cm57ZGF0YTp7cmVmZXJlbmNlSGlkZGVuT2Zmc2V0czpsLHJlZmVyZW5jZUhpZGRlbjpPMChsKX19fWNhc2UiZXNjYXBlZCI6e2NvbnN0IGk9YXdhaXQgUmEodCx7Li4ubyxhbHRCb3VuZGFyeTohMH0pLGw9UDAoaSxuLmZsb2F0aW5nKTtyZXR1cm57ZGF0YTp7ZXNjYXBlZE9mZnNldHM6bCxlc2NhcGVkOk8wKGwpfX19ZGVmYXVsdDpyZXR1cm57fX19fX07YXN5bmMgZnVuY3Rpb24gJDUoZSx0KXtjb25zdHtwbGFjZW1lbnQ6bixwbGF0Zm9ybTpyLGVsZW1lbnRzOm99PWUsaT1hd2FpdChyLmlzUlRMPT1udWxsP3ZvaWQgMDpyLmlzUlRMKG8uZmxvYXRpbmcpKSxsPVFyKG4pLHM9dHMobiksYT1ucyhuKT09PSJ5Iix1PVsibGVmdCIsInRvcCJdLmluY2x1ZGVzKGwpPy0xOjEsYz1pJiZhPy0xOjEsZD1Ycih0LGUpO2xldHttYWluQXhpczpmLGNyb3NzQXhpczpoLGFsaWdubWVudEF4aXM6bX09dHlwZW9mIGQ9PSJudW1iZXIiP3ttYWluQXhpczpkLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbH06e21haW5BeGlzOjAsY3Jvc3NBeGlzOjAsYWxpZ25tZW50QXhpczpudWxsLC4uLmR9O3JldHVybiBzJiZ0eXBlb2YgbT09Im51bWJlciImJihoPXM9PT0iZW5kIj9tKi0xOm0pLGE/e3g6aCpjLHk6Zip1fTp7eDpmKnUseTpoKmN9fWNvbnN0IGs1PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0wKSx7bmFtZToib2Zmc2V0IixvcHRpb25zOmUsYXN5bmMgZm4odCl7Y29uc3R7eDpuLHk6cn09dCxvPWF3YWl0ICQ1KHQsZSk7cmV0dXJue3g6bitvLngseTpyK28ueSxkYXRhOm99fX19LGI1PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6InNoaWZ0IixvcHRpb25zOmUsYXN5bmMgZm4odCl7Y29uc3R7eDpuLHk6cixwbGFjZW1lbnQ6b309dCx7bWFpbkF4aXM6aT0hMCxjcm9zc0F4aXM6bD0hMSxsaW1pdGVyOnM9e2ZuOl89PntsZXR7eDp2LHl9PV87cmV0dXJue3g6dix5fX19LC4uLmF9PVhyKGUsdCksdT17eDpuLHk6cn0sYz1hd2FpdCBSYSh0LGEpLGQ9bnMoUXIobykpLGY9QW0oZCk7bGV0IGg9dVtmXSxtPXVbZF07aWYoaSl7Y29uc3QgXz1mPT09InkiPyJ0b3AiOiJsZWZ0Iix2PWY9PT0ieSI/ImJvdHRvbSI6InJpZ2h0Iix5PWgrY1tfXSx4PWgtY1t2XTtoPUFwKHksaCx4KX1pZihsKXtjb25zdCBfPWQ9PT0ieSI/InRvcCI6ImxlZnQiLHY9ZD09PSJ5Ij8iYm90dG9tIjoicmlnaHQiLHk9bStjW19dLHg9bS1jW3ZdO209QXAoeSxtLHgpfWNvbnN0IGc9cy5mbih7Li4udCxbZl06aCxbZF06bX0pO3JldHVybnsuLi5nLGRhdGE6e3g6Zy54LW4seTpnLnktcn19fX19LFQ1PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse29wdGlvbnM6ZSxmbih0KXtjb25zdHt4Om4seTpyLHBsYWNlbWVudDpvLHJlY3RzOmksbWlkZGxld2FyZURhdGE6bH09dCx7b2Zmc2V0OnM9MCxtYWluQXhpczphPSEwLGNyb3NzQXhpczp1PSEwfT1YcihlLHQpLGM9e3g6bix5OnJ9LGQ9bnMobyksZj1BbShkKTtsZXQgaD1jW2ZdLG09Y1tkXTtjb25zdCBnPVhyKHMsdCksXz10eXBlb2YgZz09Im51bWJlciI/e21haW5BeGlzOmcsY3Jvc3NBeGlzOjB9OnttYWluQXhpczowLGNyb3NzQXhpczowLC4uLmd9O2lmKGEpe2NvbnN0IHg9Zj09PSJ5Ij8iaGVpZ2h0Ijoid2lkdGgiLFM9aS5yZWZlcmVuY2VbZl0taS5mbG9hdGluZ1t4XStfLm1haW5BeGlzLGs9aS5yZWZlcmVuY2VbZl0raS5yZWZlcmVuY2VbeF0tXy5tYWluQXhpcztoPFM/aD1TOmg+ayYmKGg9ayl9aWYodSl7dmFyIHYseTtjb25zdCB4PWY9PT0ieSI/IndpZHRoIjoiaGVpZ2h0IixTPVsidG9wIiwibGVmdCJdLmluY2x1ZGVzKFFyKG8pKSxrPWkucmVmZXJlbmNlW2RdLWkuZmxvYXRpbmdbeF0rKFMmJigodj1sLm9mZnNldCk9PW51bGw/dm9pZCAwOnZbZF0pfHwwKSsoUz8wOl8uY3Jvc3NBeGlzKSxUPWkucmVmZXJlbmNlW2RdK2kucmVmZXJlbmNlW3hdKyhTPzA6KCh5PWwub2Zmc2V0KT09bnVsbD92b2lkIDA6eVtkXSl8fDApLShTP18uY3Jvc3NBeGlzOjApO208az9tPWs6bT5UJiYobT1UKX1yZXR1cm57W2ZdOmgsW2RdOm19fX19LE41PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6InNpemUiLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtjb25zdHtwbGFjZW1lbnQ6bixyZWN0czpyLHBsYXRmb3JtOm8sZWxlbWVudHM6aX09dCx7YXBwbHk6bD0oKT0+e30sLi4uc309WHIoZSx0KSxhPWF3YWl0IFJhKHQscyksdT1RcihuKSxjPXRzKG4pLGQ9bnMobik9PT0ieSIse3dpZHRoOmYsaGVpZ2h0Omh9PXIuZmxvYXRpbmc7bGV0IG0sZzt1PT09InRvcCJ8fHU9PT0iYm90dG9tIj8obT11LGc9Yz09PShhd2FpdChvLmlzUlRMPT1udWxsP3ZvaWQgMDpvLmlzUlRMKGkuZmxvYXRpbmcpKT8ic3RhcnQiOiJlbmQiKT8ibGVmdCI6InJpZ2h0Iik6KGc9dSxtPWM9PT0iZW5kIj8idG9wIjoiYm90dG9tIik7Y29uc3QgXz1oLWFbbV0sdj1mLWFbZ10seT0hdC5taWRkbGV3YXJlRGF0YS5zaGlmdDtsZXQgeD1fLFM9djtpZihkKXtjb25zdCBUPWYtYS5sZWZ0LWEucmlnaHQ7Uz1jfHx5P0JvKHYsVCk6VH1lbHNle2NvbnN0IFQ9aC1hLnRvcC1hLmJvdHRvbTt4PWN8fHk/Qm8oXyxUKTpUfWlmKHkmJiFjKXtjb25zdCBUPVNuKGEubGVmdCwwKSxiPVNuKGEucmlnaHQsMCksTj1TbihhLnRvcCwwKSxEPVNuKGEuYm90dG9tLDApO2Q/Uz1mLTIqKFQhPT0wfHxiIT09MD9UK2I6U24oYS5sZWZ0LGEucmlnaHQpKTp4PWgtMiooTiE9PTB8fEQhPT0wP04rRDpTbihhLnRvcCxhLmJvdHRvbSkpfWF3YWl0IGwoey4uLnQsYXZhaWxhYmxlV2lkdGg6UyxhdmFpbGFibGVIZWlnaHQ6eH0pO2NvbnN0IGs9YXdhaXQgby5nZXREaW1lbnNpb25zKGkuZmxvYXRpbmcpO3JldHVybiBmIT09ay53aWR0aHx8aCE9PWsuaGVpZ2h0P3tyZXNldDp7cmVjdHM6ITB9fTp7fX19fTtmdW5jdGlvbiBVbyhlKXtyZXR1cm4gX0UoZSk/KGUubm9kZU5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpOiIjZG9jdW1lbnQifWZ1bmN0aW9uIGJuKGUpe3ZhciB0O3JldHVybihlPT1udWxsfHwodD1lLm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDp0LmRlZmF1bHRWaWV3KXx8d2luZG93fWZ1bmN0aW9uIHJvKGUpe3ZhciB0O3JldHVybih0PShfRShlKT9lLm93bmVyRG9jdW1lbnQ6ZS5kb2N1bWVudCl8fHdpbmRvdy5kb2N1bWVudCk9PW51bGw/dm9pZCAwOnQuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIF9FKGUpe3JldHVybiBlIGluc3RhbmNlb2YgTm9kZXx8ZSBpbnN0YW5jZW9mIGJuKGUpLk5vZGV9ZnVuY3Rpb24gSnIoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBFbGVtZW50fHxlIGluc3RhbmNlb2YgYm4oZSkuRWxlbWVudH1mdW5jdGlvbiBUcihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fHxlIGluc3RhbmNlb2YgYm4oZSkuSFRNTEVsZW1lbnR9ZnVuY3Rpb24gQTAoZSl7cmV0dXJuIHR5cGVvZiBTaGFkb3dSb290PiJ1Ij8hMTplIGluc3RhbmNlb2YgU2hhZG93Um9vdHx8ZSBpbnN0YW5jZW9mIGJuKGUpLlNoYWRvd1Jvb3R9ZnVuY3Rpb24gWGEoZSl7Y29uc3R7b3ZlcmZsb3c6dCxvdmVyZmxvd1g6bixvdmVyZmxvd1k6cixkaXNwbGF5Om99PVZuKGUpO3JldHVybi9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KHQrcituKSYmIVsiaW5saW5lIiwiY29udGVudHMiXS5pbmNsdWRlcyhvKX1mdW5jdGlvbiBSNShlKXtyZXR1cm5bInRhYmxlIiwidGQiLCJ0aCJdLmluY2x1ZGVzKFVvKGUpKX1mdW5jdGlvbiBEbShlKXtjb25zdCB0PUltKCksbj1WbihlKTtyZXR1cm4gbi50cmFuc2Zvcm0hPT0ibm9uZSJ8fG4ucGVyc3BlY3RpdmUhPT0ibm9uZSJ8fChuLmNvbnRhaW5lclR5cGU/bi5jb250YWluZXJUeXBlIT09Im5vcm1hbCI6ITEpfHwhdCYmKG4uYmFja2Ryb3BGaWx0ZXI/bi5iYWNrZHJvcEZpbHRlciE9PSJub25lIjohMSl8fCF0JiYobi5maWx0ZXI/bi5maWx0ZXIhPT0ibm9uZSI6ITEpfHxbInRyYW5zZm9ybSIsInBlcnNwZWN0aXZlIiwiZmlsdGVyIl0uc29tZShyPT4obi53aWxsQ2hhbmdlfHwiIikuaW5jbHVkZXMocikpfHxbInBhaW50IiwibGF5b3V0Iiwic3RyaWN0IiwiY29udGVudCJdLnNvbWUocj0+KG4uY29udGFpbnx8IiIpLmluY2x1ZGVzKHIpKX1mdW5jdGlvbiBQNShlKXtsZXQgdD1MbChlKTtmb3IoO1RyKHQpJiYhTWQodCk7KXtpZihEbSh0KSlyZXR1cm4gdDt0PUxsKHQpfXJldHVybiBudWxsfWZ1bmN0aW9uIEltKCl7cmV0dXJuIHR5cGVvZiBDU1M+InUifHwhQ1NTLnN1cHBvcnRzPyExOkNTUy5zdXBwb3J0cygiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIiLCJub25lIil9ZnVuY3Rpb24gTWQoZSl7cmV0dXJuWyJodG1sIiwiYm9keSIsIiNkb2N1bWVudCJdLmluY2x1ZGVzKFVvKGUpKX1mdW5jdGlvbiBWbihlKXtyZXR1cm4gYm4oZSkuZ2V0Q29tcHV0ZWRTdHlsZShlKX1mdW5jdGlvbiBMZChlKXtyZXR1cm4gSnIoZSk/e3Njcm9sbExlZnQ6ZS5zY3JvbGxMZWZ0LHNjcm9sbFRvcDplLnNjcm9sbFRvcH06e3Njcm9sbExlZnQ6ZS5wYWdlWE9mZnNldCxzY3JvbGxUb3A6ZS5wYWdlWU9mZnNldH19ZnVuY3Rpb24gTGwoZSl7aWYoVW8oZSk9PT0iaHRtbCIpcmV0dXJuIGU7Y29uc3QgdD1lLmFzc2lnbmVkU2xvdHx8ZS5wYXJlbnROb2RlfHxBMChlKSYmZS5ob3N0fHxybyhlKTtyZXR1cm4gQTAodCk/dC5ob3N0OnR9ZnVuY3Rpb24gU0UoZSl7Y29uc3QgdD1MbChlKTtyZXR1cm4gTWQodCk/ZS5vd25lckRvY3VtZW50P2Uub3duZXJEb2N1bWVudC5ib2R5OmUuYm9keTpUcih0KSYmWGEodCk/dDpTRSh0KX1mdW5jdGlvbiBQYShlLHQsbil7dmFyIHI7dD09PXZvaWQgMCYmKHQ9W10pLG49PT12b2lkIDAmJihuPSEwKTtjb25zdCBvPVNFKGUpLGk9bz09PSgocj1lLm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDpyLmJvZHkpLGw9Ym4obyk7cmV0dXJuIGk/dC5jb25jYXQobCxsLnZpc3VhbFZpZXdwb3J0fHxbXSxYYShvKT9vOltdLGwuZnJhbWVFbGVtZW50JiZuP1BhKGwuZnJhbWVFbGVtZW50KTpbXSk6dC5jb25jYXQobyxQYShvLFtdLG4pKX1mdW5jdGlvbiBFRShlKXtjb25zdCB0PVZuKGUpO2xldCBuPXBhcnNlRmxvYXQodC53aWR0aCl8fDAscj1wYXJzZUZsb2F0KHQuaGVpZ2h0KXx8MDtjb25zdCBvPVRyKGUpLGk9bz9lLm9mZnNldFdpZHRoOm4sbD1vP2Uub2Zmc2V0SGVpZ2h0OnIscz1HYyhuKSE9PWl8fEdjKHIpIT09bDtyZXR1cm4gcyYmKG49aSxyPWwpLHt3aWR0aDpuLGhlaWdodDpyLCQ6c319ZnVuY3Rpb24gam0oZSl7cmV0dXJuIEpyKGUpP2U6ZS5jb250ZXh0RWxlbWVudH1mdW5jdGlvbiB3bChlKXtjb25zdCB0PWptKGUpO2lmKCFUcih0KSlyZXR1cm4gV28oMSk7Y29uc3Qgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpyLGhlaWdodDpvLCQ6aX09RUUodCk7bGV0IGw9KGk/R2Mobi53aWR0aCk6bi53aWR0aCkvcixzPShpP0djKG4uaGVpZ2h0KTpuLmhlaWdodCkvbztyZXR1cm4oIWx8fCFOdW1iZXIuaXNGaW5pdGUobCkpJiYobD0xKSwoIXN8fCFOdW1iZXIuaXNGaW5pdGUocykpJiYocz0xKSx7eDpsLHk6c319Y29uc3QgTzU9V28oMCk7ZnVuY3Rpb24gQ0UoZSl7Y29uc3QgdD1ibihlKTtyZXR1cm4hSW0oKXx8IXQudmlzdWFsVmlld3BvcnQ/TzU6e3g6dC52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LHk6dC52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3B9fWZ1bmN0aW9uIEE1KGUsdCxuKXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9ITEpLCFufHx0JiZuIT09Ym4oZSk/ITE6dH1mdW5jdGlvbiBTaShlLHQsbixyKXt0PT09dm9pZCAwJiYodD0hMSksbj09PXZvaWQgMCYmKG49ITEpO2NvbnN0IG89ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPWptKGUpO2xldCBsPVdvKDEpO3QmJihyP0pyKHIpJiYobD13bChyKSk6bD13bChlKSk7Y29uc3Qgcz1BNShpLG4scik/Q0UoaSk6V28oMCk7bGV0IGE9KG8ubGVmdCtzLngpL2wueCx1PShvLnRvcCtzLnkpL2wueSxjPW8ud2lkdGgvbC54LGQ9by5oZWlnaHQvbC55O2lmKGkpe2NvbnN0IGY9Ym4oaSksaD1yJiZKcihyKT9ibihyKTpyO2xldCBtPWYuZnJhbWVFbGVtZW50O2Zvcig7bSYmciYmaCE9PWY7KXtjb25zdCBnPXdsKG0pLF89bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PVZuKG0pLHk9Xy5sZWZ0KyhtLmNsaWVudExlZnQrcGFyc2VGbG9hdCh2LnBhZGRpbmdMZWZ0KSkqZy54LHg9Xy50b3ArKG0uY2xpZW50VG9wK3BhcnNlRmxvYXQodi5wYWRkaW5nVG9wKSkqZy55O2EqPWcueCx1Kj1nLnksYyo9Zy54LGQqPWcueSxhKz15LHUrPXgsbT1ibihtKS5mcmFtZUVsZW1lbnR9fXJldHVybiBYYyh7d2lkdGg6YyxoZWlnaHQ6ZCx4OmEseTp1fSl9ZnVuY3Rpb24gTTUoZSl7bGV0e3JlY3Q6dCxvZmZzZXRQYXJlbnQ6bixzdHJhdGVneTpyfT1lO2NvbnN0IG89VHIobiksaT1ybyhuKTtpZihuPT09aSlyZXR1cm4gdDtsZXQgbD17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxzPVdvKDEpO2NvbnN0IGE9V28oMCk7aWYoKG98fCFvJiZyIT09ImZpeGVkIikmJigoVW8obikhPT0iYm9keSJ8fFhhKGkpKSYmKGw9TGQobikpLFRyKG4pKSl7Y29uc3QgdT1TaShuKTtzPXdsKG4pLGEueD11Lngrbi5jbGllbnRMZWZ0LGEueT11Lnkrbi5jbGllbnRUb3B9cmV0dXJue3dpZHRoOnQud2lkdGgqcy54LGhlaWdodDp0LmhlaWdodCpzLnkseDp0Lngqcy54LWwuc2Nyb2xsTGVmdCpzLngrYS54LHk6dC55KnMueS1sLnNjcm9sbFRvcCpzLnkrYS55fX1mdW5jdGlvbiBMNShlKXtyZXR1cm4gQXJyYXkuZnJvbShlLmdldENsaWVudFJlY3RzKCkpfWZ1bmN0aW9uICRFKGUpe3JldHVybiBTaShybyhlKSkubGVmdCtMZChlKS5zY3JvbGxMZWZ0fWZ1bmN0aW9uIEQ1KGUpe2NvbnN0IHQ9cm8oZSksbj1MZChlKSxyPWUub3duZXJEb2N1bWVudC5ib2R5LG89U24odC5zY3JvbGxXaWR0aCx0LmNsaWVudFdpZHRoLHIuc2Nyb2xsV2lkdGgsci5jbGllbnRXaWR0aCksaT1Tbih0LnNjcm9sbEhlaWdodCx0LmNsaWVudEhlaWdodCxyLnNjcm9sbEhlaWdodCxyLmNsaWVudEhlaWdodCk7bGV0IGw9LW4uc2Nyb2xsTGVmdCskRShlKTtjb25zdCBzPS1uLnNjcm9sbFRvcDtyZXR1cm4gVm4ocikuZGlyZWN0aW9uPT09InJ0bCImJihsKz1Tbih0LmNsaWVudFdpZHRoLHIuY2xpZW50V2lkdGgpLW8pLHt3aWR0aDpvLGhlaWdodDppLHg6bCx5OnN9fWZ1bmN0aW9uIEk1KGUsdCl7Y29uc3Qgbj1ibihlKSxyPXJvKGUpLG89bi52aXN1YWxWaWV3cG9ydDtsZXQgaT1yLmNsaWVudFdpZHRoLGw9ci5jbGllbnRIZWlnaHQscz0wLGE9MDtpZihvKXtpPW8ud2lkdGgsbD1vLmhlaWdodDtjb25zdCB1PUltKCk7KCF1fHx1JiZ0PT09ImZpeGVkIikmJihzPW8ub2Zmc2V0TGVmdCxhPW8ub2Zmc2V0VG9wKX1yZXR1cm57d2lkdGg6aSxoZWlnaHQ6bCx4OnMseTphfX1mdW5jdGlvbiBqNShlLHQpe2NvbnN0IG49U2koZSwhMCx0PT09ImZpeGVkIikscj1uLnRvcCtlLmNsaWVudFRvcCxvPW4ubGVmdCtlLmNsaWVudExlZnQsaT1UcihlKT93bChlKTpXbygxKSxsPWUuY2xpZW50V2lkdGgqaS54LHM9ZS5jbGllbnRIZWlnaHQqaS55LGE9byppLngsdT1yKmkueTtyZXR1cm57d2lkdGg6bCxoZWlnaHQ6cyx4OmEseTp1fX1mdW5jdGlvbiBNMChlLHQsbil7bGV0IHI7aWYodD09PSJ2aWV3cG9ydCIpcj1JNShlLG4pO2Vsc2UgaWYodD09PSJkb2N1bWVudCIpcj1ENShybyhlKSk7ZWxzZSBpZihKcih0KSlyPWo1KHQsbik7ZWxzZXtjb25zdCBvPUNFKGUpO3I9ey4uLnQseDp0Lngtby54LHk6dC55LW8ueX19cmV0dXJuIFhjKHIpfWZ1bmN0aW9uIGtFKGUsdCl7Y29uc3Qgbj1MbChlKTtyZXR1cm4gbj09PXR8fCFKcihuKXx8TWQobik/ITE6Vm4obikucG9zaXRpb249PT0iZml4ZWQifHxrRShuLHQpfWZ1bmN0aW9uIHo1KGUsdCl7Y29uc3Qgbj10LmdldChlKTtpZihuKXJldHVybiBuO2xldCByPVBhKGUsW10sITEpLmZpbHRlcihzPT5KcihzKSYmVW8ocykhPT0iYm9keSIpLG89bnVsbDtjb25zdCBpPVZuKGUpLnBvc2l0aW9uPT09ImZpeGVkIjtsZXQgbD1pP0xsKGUpOmU7Zm9yKDtKcihsKSYmIU1kKGwpOyl7Y29uc3Qgcz1WbihsKSxhPURtKGwpOyFhJiZzLnBvc2l0aW9uPT09ImZpeGVkIiYmKG89bnVsbCksKGk/IWEmJiFvOiFhJiZzLnBvc2l0aW9uPT09InN0YXRpYyImJiEhbyYmWyJhYnNvbHV0ZSIsImZpeGVkIl0uaW5jbHVkZXMoby5wb3NpdGlvbil8fFhhKGwpJiYhYSYma0UoZSxsKSk/cj1yLmZpbHRlcihjPT5jIT09bCk6bz1zLGw9TGwobCl9cmV0dXJuIHQuc2V0KGUscikscn1mdW5jdGlvbiBGNShlKXtsZXR7ZWxlbWVudDp0LGJvdW5kYXJ5Om4scm9vdEJvdW5kYXJ5OnIsc3RyYXRlZ3k6b309ZTtjb25zdCBsPVsuLi5uPT09ImNsaXBwaW5nQW5jZXN0b3JzIj96NSh0LHRoaXMuX2MpOltdLmNvbmNhdChuKSxyXSxzPWxbMF0sYT1sLnJlZHVjZSgodSxjKT0+e2NvbnN0IGQ9TTAodCxjLG8pO3JldHVybiB1LnRvcD1TbihkLnRvcCx1LnRvcCksdS5yaWdodD1CbyhkLnJpZ2h0LHUucmlnaHQpLHUuYm90dG9tPUJvKGQuYm90dG9tLHUuYm90dG9tKSx1LmxlZnQ9U24oZC5sZWZ0LHUubGVmdCksdX0sTTAodCxzLG8pKTtyZXR1cm57d2lkdGg6YS5yaWdodC1hLmxlZnQsaGVpZ2h0OmEuYm90dG9tLWEudG9wLHg6YS5sZWZ0LHk6YS50b3B9fWZ1bmN0aW9uIEI1KGUpe3JldHVybiBFRShlKX1mdW5jdGlvbiBXNShlLHQsbil7Y29uc3Qgcj1Ucih0KSxvPXJvKHQpLGk9bj09PSJmaXhlZCIsbD1TaShlLCEwLGksdCk7bGV0IHM9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH07Y29uc3QgYT1XbygwKTtpZihyfHwhciYmIWkpaWYoKFVvKHQpIT09ImJvZHkifHxYYShvKSkmJihzPUxkKHQpKSxyKXtjb25zdCB1PVNpKHQsITAsaSx0KTthLng9dS54K3QuY2xpZW50TGVmdCxhLnk9dS55K3QuY2xpZW50VG9wfWVsc2UgbyYmKGEueD0kRShvKSk7cmV0dXJue3g6bC5sZWZ0K3Muc2Nyb2xsTGVmdC1hLngseTpsLnRvcCtzLnNjcm9sbFRvcC1hLnksd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9fWZ1bmN0aW9uIEwwKGUsdCl7cmV0dXJuIVRyKGUpfHxWbihlKS5wb3NpdGlvbj09PSJmaXhlZCI/bnVsbDp0P3QoZSk6ZS5vZmZzZXRQYXJlbnR9ZnVuY3Rpb24gYkUoZSx0KXtjb25zdCBuPWJuKGUpO2lmKCFUcihlKSlyZXR1cm4gbjtsZXQgcj1MMChlLHQpO2Zvcig7ciYmUjUocikmJlZuKHIpLnBvc2l0aW9uPT09InN0YXRpYyI7KXI9TDAocix0KTtyZXR1cm4gciYmKFVvKHIpPT09Imh0bWwifHxVbyhyKT09PSJib2R5IiYmVm4ocikucG9zaXRpb249PT0ic3RhdGljIiYmIURtKHIpKT9uOnJ8fFA1KGUpfHxufWNvbnN0IFU1PWFzeW5jIGZ1bmN0aW9uKGUpe2xldHtyZWZlcmVuY2U6dCxmbG9hdGluZzpuLHN0cmF0ZWd5OnJ9PWU7Y29uc3Qgbz10aGlzLmdldE9mZnNldFBhcmVudHx8YkUsaT10aGlzLmdldERpbWVuc2lvbnM7cmV0dXJue3JlZmVyZW5jZTpXNSh0LGF3YWl0IG8obiksciksZmxvYXRpbmc6e3g6MCx5OjAsLi4uYXdhaXQgaShuKX19fTtmdW5jdGlvbiBINShlKXtyZXR1cm4gVm4oZSkuZGlyZWN0aW9uPT09InJ0bCJ9Y29uc3QgVjU9e2NvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0Ok01LGdldERvY3VtZW50RWxlbWVudDpybyxnZXRDbGlwcGluZ1JlY3Q6RjUsZ2V0T2Zmc2V0UGFyZW50OmJFLGdldEVsZW1lbnRSZWN0czpVNSxnZXRDbGllbnRSZWN0czpMNSxnZXREaW1lbnNpb25zOkI1LGdldFNjYWxlOndsLGlzRWxlbWVudDpKcixpc1JUTDpINX07ZnVuY3Rpb24gSzUoZSx0KXtsZXQgbj1udWxsLHI7Y29uc3Qgbz1ybyhlKTtmdW5jdGlvbiBpKCl7Y2xlYXJUaW1lb3V0KHIpLG4mJm4uZGlzY29ubmVjdCgpLG49bnVsbH1mdW5jdGlvbiBsKHMsYSl7cz09PXZvaWQgMCYmKHM9ITEpLGE9PT12b2lkIDAmJihhPTEpLGkoKTtjb25zdHtsZWZ0OnUsdG9wOmMsd2lkdGg6ZCxoZWlnaHQ6Zn09ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihzfHx0KCksIWR8fCFmKXJldHVybjtjb25zdCBoPVJ1KGMpLG09UnUoby5jbGllbnRXaWR0aC0odStkKSksZz1SdShvLmNsaWVudEhlaWdodC0oYytmKSksXz1SdSh1KSx5PXtyb290TWFyZ2luOi1oKyJweCAiKy1tKyJweCAiKy1nKyJweCAiKy1fKyJweCIsdGhyZXNob2xkOlNuKDAsQm8oMSxhKSl8fDF9O2xldCB4PSEwO2Z1bmN0aW9uIFMoayl7Y29uc3QgVD1rWzBdLmludGVyc2VjdGlvblJhdGlvO2lmKFQhPT1hKXtpZigheClyZXR1cm4gbCgpO1Q/bCghMSxUKTpyPXNldFRpbWVvdXQoKCk9PntsKCExLDFlLTcpfSwxMDApfXg9ITF9dHJ5e249bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFMsey4uLnkscm9vdDpvLm93bmVyRG9jdW1lbnR9KX1jYXRjaHtuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihTLHkpfW4ub2JzZXJ2ZShlKX1yZXR1cm4gbCghMCksaX1mdW5jdGlvbiBHNShlLHQsbixyKXtyPT09dm9pZCAwJiYocj17fSk7Y29uc3R7YW5jZXN0b3JTY3JvbGw6bz0hMCxhbmNlc3RvclJlc2l6ZTppPSEwLGVsZW1lbnRSZXNpemU6bD10eXBlb2YgUmVzaXplT2JzZXJ2ZXI9PSJmdW5jdGlvbiIsbGF5b3V0U2hpZnQ6cz10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9PSJmdW5jdGlvbiIsYW5pbWF0aW9uRnJhbWU6YT0hMX09cix1PWptKGUpLGM9b3x8aT9bLi4udT9QYSh1KTpbXSwuLi5QYSh0KV06W107Yy5mb3JFYWNoKHY9PntvJiZ2LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsbix7cGFzc2l2ZTohMH0pLGkmJnYuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixuKX0pO2NvbnN0IGQ9dSYmcz9LNSh1LG4pOm51bGw7bGV0IGY9LTEsaD1udWxsO2wmJihoPW5ldyBSZXNpemVPYnNlcnZlcih2PT57bGV0W3ldPXY7eSYmeS50YXJnZXQ9PT11JiZoJiYoaC51bm9ic2VydmUodCksY2FuY2VsQW5pbWF0aW9uRnJhbWUoZiksZj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntoJiZoLm9ic2VydmUodCl9KSksbigpfSksdSYmIWEmJmgub2JzZXJ2ZSh1KSxoLm9ic2VydmUodCkpO2xldCBtLGc9YT9TaShlKTpudWxsO2EmJl8oKTtmdW5jdGlvbiBfKCl7Y29uc3Qgdj1TaShlKTtnJiYodi54IT09Zy54fHx2LnkhPT1nLnl8fHYud2lkdGghPT1nLndpZHRofHx2LmhlaWdodCE9PWcuaGVpZ2h0KSYmbigpLGc9dixtPXJlcXVlc3RBbmltYXRpb25GcmFtZShfKX1yZXR1cm4gbigpLCgpPT57Yy5mb3JFYWNoKHY9PntvJiZ2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsbiksaSYmdi5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLG4pfSksZCYmZCgpLGgmJmguZGlzY29ubmVjdCgpLGg9bnVsbCxhJiZjYW5jZWxBbmltYXRpb25GcmFtZShtKX19Y29uc3QgWTU9KGUsdCxuKT0+e2NvbnN0IHI9bmV3IE1hcCxvPXtwbGF0Zm9ybTpWNSwuLi5ufSxpPXsuLi5vLnBsYXRmb3JtLF9jOnJ9O3JldHVybiBTNShlLHQsey4uLm8scGxhdGZvcm06aX0pfSxYNT1lPT57ZnVuY3Rpb24gdChuKXtyZXR1cm57fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sImN1cnJlbnQiKX1yZXR1cm57bmFtZToiYXJyb3ciLG9wdGlvbnM6ZSxmbihuKXtjb25zdHtlbGVtZW50OnIscGFkZGluZzpvfT10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOmU7cmV0dXJuIHImJnQocik/ci5jdXJyZW50IT1udWxsP1IwKHtlbGVtZW50OnIuY3VycmVudCxwYWRkaW5nOm99KS5mbihuKTp7fTpyP1IwKHtlbGVtZW50OnIscGFkZGluZzpvfSkuZm4obik6e319fX07dmFyIHF1PXR5cGVvZiBkb2N1bWVudDwidSI/cC51c2VMYXlvdXRFZmZlY3Q6cC51c2VFZmZlY3Q7ZnVuY3Rpb24gUWMoZSx0KXtpZihlPT09dClyZXR1cm4hMDtpZih0eXBlb2YgZSE9dHlwZW9mIHQpcmV0dXJuITE7aWYodHlwZW9mIGU9PSJmdW5jdGlvbiImJmUudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4hMDtsZXQgbixyLG87aWYoZSYmdCYmdHlwZW9mIGU9PSJvYmplY3QiKXtpZihBcnJheS5pc0FycmF5KGUpKXtpZihuPWUubGVuZ3RoLG4hPXQubGVuZ3RoKXJldHVybiExO2ZvcihyPW47ci0tIT09MDspaWYoIVFjKGVbcl0sdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9aWYobz1PYmplY3Qua2V5cyhlKSxuPW8ubGVuZ3RoLG4hPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgpcmV0dXJuITE7Zm9yKHI9bjtyLS0hPT0wOylpZighe30uaGFzT3duUHJvcGVydHkuY2FsbCh0LG9bcl0pKXJldHVybiExO2ZvcihyPW47ci0tIT09MDspe2NvbnN0IGk9b1tyXTtpZighKGk9PT0iX293bmVyIiYmZS4kJHR5cGVvZikmJiFRYyhlW2ldLHRbaV0pKXJldHVybiExfXJldHVybiEwfXJldHVybiBlIT09ZSYmdCE9PXR9ZnVuY3Rpb24gVEUoZSl7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiPzE6KGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5kZXZpY2VQaXhlbFJhdGlvfHwxfWZ1bmN0aW9uIEQwKGUsdCl7Y29uc3Qgbj1URShlKTtyZXR1cm4gTWF0aC5yb3VuZCh0Km4pL259ZnVuY3Rpb24gSTAoZSl7Y29uc3QgdD1wLnVzZVJlZihlKTtyZXR1cm4gcXUoKCk9Pnt0LmN1cnJlbnQ9ZX0pLHR9ZnVuY3Rpb24gUTUoZSl7ZT09PXZvaWQgMCYmKGU9e30pO2NvbnN0e3BsYWNlbWVudDp0PSJib3R0b20iLHN0cmF0ZWd5Om49ImFic29sdXRlIixtaWRkbGV3YXJlOnI9W10scGxhdGZvcm06byxlbGVtZW50czp7cmVmZXJlbmNlOmksZmxvYXRpbmc6bH09e30sdHJhbnNmb3JtOnM9ITAsd2hpbGVFbGVtZW50c01vdW50ZWQ6YSxvcGVuOnV9PWUsW2MsZF09cC51c2VTdGF0ZSh7eDowLHk6MCxzdHJhdGVneTpuLHBsYWNlbWVudDp0LG1pZGRsZXdhcmVEYXRhOnt9LGlzUG9zaXRpb25lZDohMX0pLFtmLGhdPXAudXNlU3RhdGUocik7UWMoZixyKXx8aChyKTtjb25zdFttLGddPXAudXNlU3RhdGUobnVsbCksW18sdl09cC51c2VTdGF0ZShudWxsKSx5PXAudXNlQ2FsbGJhY2soQz0+e0MhPVQuY3VycmVudCYmKFQuY3VycmVudD1DLGcoQykpfSxbZ10pLHg9cC51c2VDYWxsYmFjayhDPT57QyE9PWIuY3VycmVudCYmKGIuY3VycmVudD1DLHYoQykpfSxbdl0pLFM9aXx8bSxrPWx8fF8sVD1wLnVzZVJlZihudWxsKSxiPXAudXNlUmVmKG51bGwpLE49cC51c2VSZWYoYyksRD1JMChhKSxNPUkwKG8pLGo9cC51c2VDYWxsYmFjaygoKT0+e2lmKCFULmN1cnJlbnR8fCFiLmN1cnJlbnQpcmV0dXJuO2NvbnN0IEM9e3BsYWNlbWVudDp0LHN0cmF0ZWd5Om4sbWlkZGxld2FyZTpmfTtNLmN1cnJlbnQmJihDLnBsYXRmb3JtPU0uY3VycmVudCksWTUoVC5jdXJyZW50LGIuY3VycmVudCxDKS50aGVuKCQ9Pntjb25zdCBFPXsuLi4kLGlzUG9zaXRpb25lZDohMH07Qi5jdXJyZW50JiYhUWMoTi5jdXJyZW50LEUpJiYoTi5jdXJyZW50PUUsTnIuZmx1c2hTeW5jKCgpPT57ZChFKX0pKX0pfSxbZix0LG4sTV0pO3F1KCgpPT57dT09PSExJiZOLmN1cnJlbnQuaXNQb3NpdGlvbmVkJiYoTi5jdXJyZW50LmlzUG9zaXRpb25lZD0hMSxkKEM9Pih7Li4uQyxpc1Bvc2l0aW9uZWQ6ITF9KSkpfSxbdV0pO2NvbnN0IEI9cC51c2VSZWYoITEpO3F1KCgpPT4oQi5jdXJyZW50PSEwLCgpPT57Qi5jdXJyZW50PSExfSksW10pLHF1KCgpPT57aWYoUyYmKFQuY3VycmVudD1TKSxrJiYoYi5jdXJyZW50PWspLFMmJmspe2lmKEQuY3VycmVudClyZXR1cm4gRC5jdXJyZW50KFMsayxqKTtqKCl9fSxbUyxrLGosRF0pO2NvbnN0IHJlPXAudXNlTWVtbygoKT0+KHtyZWZlcmVuY2U6VCxmbG9hdGluZzpiLHNldFJlZmVyZW5jZTp5LHNldEZsb2F0aW5nOnh9KSxbeSx4XSksVj1wLnVzZU1lbW8oKCk9Pih7cmVmZXJlbmNlOlMsZmxvYXRpbmc6a30pLFtTLGtdKSxZPXAudXNlTWVtbygoKT0+e2NvbnN0IEM9e3Bvc2l0aW9uOm4sbGVmdDowLHRvcDowfTtpZighVi5mbG9hdGluZylyZXR1cm4gQztjb25zdCAkPUQwKFYuZmxvYXRpbmcsYy54KSxFPUQwKFYuZmxvYXRpbmcsYy55KTtyZXR1cm4gcz97Li4uQyx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiKyQrInB4LCAiK0UrInB4KSIsLi4uVEUoVi5mbG9hdGluZyk+PTEuNSYme3dpbGxDaGFuZ2U6InRyYW5zZm9ybSJ9fTp7cG9zaXRpb246bixsZWZ0OiQsdG9wOkV9fSxbbixzLFYuZmxvYXRpbmcsYy54LGMueV0pO3JldHVybiBwLnVzZU1lbW8oKCk9Pih7Li4uYyx1cGRhdGU6aixyZWZzOnJlLGVsZW1lbnRzOlYsZmxvYXRpbmdTdHlsZXM6WX0pLFtjLGoscmUsVixZXSl9ZnVuY3Rpb24gTkUoZSl7Y29uc3RbdCxuXT1wLnVzZVN0YXRlKHZvaWQgMCk7cmV0dXJuIE5uKCgpPT57aWYoZSl7bih7d2lkdGg6ZS5vZmZzZXRXaWR0aCxoZWlnaHQ6ZS5vZmZzZXRIZWlnaHR9KTtjb25zdCByPW5ldyBSZXNpemVPYnNlcnZlcihvPT57aWYoIUFycmF5LmlzQXJyYXkobyl8fCFvLmxlbmd0aClyZXR1cm47Y29uc3QgaT1vWzBdO2xldCBsLHM7aWYoImJvcmRlckJveFNpemUiaW4gaSl7Y29uc3QgYT1pLmJvcmRlckJveFNpemUsdT1BcnJheS5pc0FycmF5KGEpP2FbMF06YTtsPXUuaW5saW5lU2l6ZSxzPXUuYmxvY2tTaXplfWVsc2UgbD1lLm9mZnNldFdpZHRoLHM9ZS5vZmZzZXRIZWlnaHQ7bih7d2lkdGg6bCxoZWlnaHQ6c30pfSk7cmV0dXJuIHIub2JzZXJ2ZShlLHtib3g6ImJvcmRlci1ib3gifSksKCk9PnIudW5vYnNlcnZlKGUpfWVsc2Ugbih2b2lkIDApfSxbZV0pLHR9Y29uc3QgUkU9IlBvcHBlciIsW1BFLE9FXT1OaShSRSksW0o1LEFFXT1QRShSRSksWjU9ZT0+e2NvbnN0e19fc2NvcGVQb3BwZXI6dCxjaGlsZHJlbjpufT1lLFtyLG9dPXAudXNlU3RhdGUobnVsbCk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChKNSx7c2NvcGU6dCxhbmNob3I6cixvbkFuY2hvckNoYW5nZTpvfSxuKX0scTU9IlBvcHBlckFuY2hvciIsZTM9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVBvcHBlcjpuLHZpcnR1YWxSZWY6ciwuLi5vfT1lLGk9QUUocTUsbiksbD1wLnVzZVJlZihudWxsKSxzPVplKHQsbCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57aS5vbkFuY2hvckNoYW5nZSgocj09bnVsbD92b2lkIDA6ci5jdXJyZW50KXx8bC5jdXJyZW50KX0pLHI/bnVsbDpwLmNyZWF0ZUVsZW1lbnQoSWUuZGl2LHRlKHt9LG8se3JlZjpzfSkpfSksTUU9IlBvcHBlckNvbnRlbnQiLFt0MyxkTF09UEUoTUUpLG4zPXAuZm9yd2FyZFJlZigoZSx0KT0+e3ZhciBuLHIsbyxpLGwscyxhLHU7Y29uc3R7X19zY29wZVBvcHBlcjpjLHNpZGU6ZD0iYm90dG9tIixzaWRlT2Zmc2V0OmY9MCxhbGlnbjpoPSJjZW50ZXIiLGFsaWduT2Zmc2V0Om09MCxhcnJvd1BhZGRpbmc6Zz0wLGF2b2lkQ29sbGlzaW9uczpfPSEwLGNvbGxpc2lvbkJvdW5kYXJ5OnY9W10sY29sbGlzaW9uUGFkZGluZzp5PTAsc3RpY2t5Ong9InBhcnRpYWwiLGhpZGVXaGVuRGV0YWNoZWQ6Uz0hMSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Oms9Im9wdGltaXplZCIsb25QbGFjZWQ6VCwuLi5ifT1lLE49QUUoTUUsYyksW0QsTV09cC51c2VTdGF0ZShudWxsKSxqPVplKHQsY249Pk0oY24pKSxbQixyZV09cC51c2VTdGF0ZShudWxsKSxWPU5FKEIpLFk9KG49Vj09bnVsbD92b2lkIDA6Vi53aWR0aCkhPT1udWxsJiZuIT09dm9pZCAwP246MCxDPShyPVY9PW51bGw/dm9pZCAwOlYuaGVpZ2h0KSE9PW51bGwmJnIhPT12b2lkIDA/cjowLCQ9ZCsoaCE9PSJjZW50ZXIiPyItIitoOiIiKSxFPXR5cGVvZiB5PT0ibnVtYmVyIj95Ont0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MCwuLi55fSxPPUFycmF5LmlzQXJyYXkodik/djpbdl0sUj1PLmxlbmd0aD4wLEY9e3BhZGRpbmc6RSxib3VuZGFyeTpPLmZpbHRlcihyMyksYWx0Qm91bmRhcnk6Un0se3JlZnM6SCxmbG9hdGluZ1N0eWxlczphZSxwbGFjZW1lbnQ6b2UsaXNQb3NpdGlvbmVkOiRlLG1pZGRsZXdhcmVEYXRhOl9lfT1RNSh7c3RyYXRlZ3k6ImZpeGVkIixwbGFjZW1lbnQ6JCx3aGlsZUVsZW1lbnRzTW91bnRlZDooLi4uY24pPT5HNSguLi5jbix7YW5pbWF0aW9uRnJhbWU6az09PSJhbHdheXMifSksZWxlbWVudHM6e3JlZmVyZW5jZTpOLmFuY2hvcn0sbWlkZGxld2FyZTpbazUoe21haW5BeGlzOmYrQyxhbGlnbm1lbnRBeGlzOm19KSxfJiZiNSh7bWFpbkF4aXM6ITAsY3Jvc3NBeGlzOiExLGxpbWl0ZXI6eD09PSJwYXJ0aWFsIj9UNSgpOnZvaWQgMCwuLi5GfSksXyYmRTUoey4uLkZ9KSxONSh7Li4uRixhcHBseTooe2VsZW1lbnRzOmNuLHJlY3RzOkduLGF2YWlsYWJsZVdpZHRoOlJlLGF2YWlsYWJsZUhlaWdodDp5dH0pPT57Y29uc3R7d2lkdGg6cWUsaGVpZ2h0Oll0fT1Hbi5yZWZlcmVuY2UsZG49Y24uZmxvYXRpbmcuc3R5bGU7ZG4uc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS13aWR0aCIsYCR7UmV9cHhgKSxkbi5zZXRQcm9wZXJ0eSgiLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodCIsYCR7eXR9cHhgKSxkbi5zZXRQcm9wZXJ0eSgiLS1yYWRpeC1wb3BwZXItYW5jaG9yLXdpZHRoIixgJHtxZX1weGApLGRuLnNldFByb3BlcnR5KCItLXJhZGl4LXBvcHBlci1hbmNob3ItaGVpZ2h0IixgJHtZdH1weGApfX0pLEImJlg1KHtlbGVtZW50OkIscGFkZGluZzpnfSksbzMoe2Fycm93V2lkdGg6WSxhcnJvd0hlaWdodDpDfSksUyYmQzUoe3N0cmF0ZWd5OiJyZWZlcmVuY2VIaWRkZW4iLC4uLkZ9KV19KSxbUSxOZV09TEUob2UpLHllPUh0KFQpO05uKCgpPT57JGUmJih5ZT09bnVsbHx8eWUoKSl9LFskZSx5ZV0pO2NvbnN0IFNlPShvPV9lLmFycm93KT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm8ueCxwZT0oaT1fZS5hcnJvdyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLnksVGU9KChsPV9lLmFycm93KT09PW51bGx8fGw9PT12b2lkIDA/dm9pZCAwOmwuY2VudGVyT2Zmc2V0KSE9PTAsW1dlLEF0XT1wLnVzZVN0YXRlKCk7cmV0dXJuIE5uKCgpPT57RCYmQXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoRCkuekluZGV4KX0sW0RdKSxwLmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjpILnNldEZsb2F0aW5nLCJkYXRhLXJhZGl4LXBvcHBlci1jb250ZW50LXdyYXBwZXIiOiIiLHN0eWxlOnsuLi5hZSx0cmFuc2Zvcm06JGU/YWUudHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTIwMCUpIixtaW5XaWR0aDoibWF4LWNvbnRlbnQiLHpJbmRleDpXZSwiLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbiI6WyhzPV9lLnRyYW5zZm9ybU9yaWdpbik9PT1udWxsfHxzPT09dm9pZCAwP3ZvaWQgMDpzLngsKGE9X2UudHJhbnNmb3JtT3JpZ2luKT09PW51bGx8fGE9PT12b2lkIDA/dm9pZCAwOmEueV0uam9pbigiICIpfSxkaXI6ZS5kaXJ9LHAuY3JlYXRlRWxlbWVudCh0Myx7c2NvcGU6YyxwbGFjZWRTaWRlOlEsb25BcnJvd0NoYW5nZTpyZSxhcnJvd1g6U2UsYXJyb3dZOnBlLHNob3VsZEhpZGVBcnJvdzpUZX0scC5jcmVhdGVFbGVtZW50KEllLmRpdix0ZSh7ImRhdGEtc2lkZSI6USwiZGF0YS1hbGlnbiI6TmV9LGIse3JlZjpqLHN0eWxlOnsuLi5iLnN0eWxlLGFuaW1hdGlvbjokZT92b2lkIDA6Im5vbmUiLG9wYWNpdHk6KHU9X2UuaGlkZSkhPT1udWxsJiZ1IT09dm9pZCAwJiZ1LnJlZmVyZW5jZUhpZGRlbj8wOnZvaWQgMH19KSkpKX0pO2Z1bmN0aW9uIHIzKGUpe3JldHVybiBlIT09bnVsbH1jb25zdCBvMz1lPT4oe25hbWU6InRyYW5zZm9ybU9yaWdpbiIsb3B0aW9uczplLGZuKHQpe3ZhciBuLHIsbyxpLGw7Y29uc3R7cGxhY2VtZW50OnMscmVjdHM6YSxtaWRkbGV3YXJlRGF0YTp1fT10LGQ9KChuPXUuYXJyb3cpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5jZW50ZXJPZmZzZXQpIT09MCxmPWQ/MDplLmFycm93V2lkdGgsaD1kPzA6ZS5hcnJvd0hlaWdodCxbbSxnXT1MRShzKSxfPXtzdGFydDoiMCUiLGNlbnRlcjoiNTAlIixlbmQ6IjEwMCUifVtnXSx2PSgocj0obz11LmFycm93KT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm8ueCkhPT1udWxsJiZyIT09dm9pZCAwP3I6MCkrZi8yLHk9KChpPShsPXUuYXJyb3cpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC55KSE9PW51bGwmJmkhPT12b2lkIDA/aTowKStoLzI7bGV0IHg9IiIsUz0iIjtyZXR1cm4gbT09PSJib3R0b20iPyh4PWQ/XzpgJHt2fXB4YCxTPWAkey1ofXB4YCk6bT09PSJ0b3AiPyh4PWQ/XzpgJHt2fXB4YCxTPWAke2EuZmxvYXRpbmcuaGVpZ2h0K2h9cHhgKTptPT09InJpZ2h0Ij8oeD1gJHstaH1weGAsUz1kP186YCR7eX1weGApOm09PT0ibGVmdCImJih4PWAke2EuZmxvYXRpbmcud2lkdGgraH1weGAsUz1kP186YCR7eX1weGApLHtkYXRhOnt4LHk6U319fX0pO2Z1bmN0aW9uIExFKGUpe2NvbnN0W3Qsbj0iY2VudGVyIl09ZS5zcGxpdCgiLSIpO3JldHVyblt0LG5dfWNvbnN0IGkzPVo1LGwzPWUzLHMzPW4zLGEzPXAuZm9yd2FyZFJlZigoZSx0KT0+e3ZhciBuO2NvbnN0e2NvbnRhaW5lcjpyPWdsb2JhbFRoaXM9PW51bGx8fChuPWdsb2JhbFRoaXMuZG9jdW1lbnQpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5ib2R5LC4uLm99PWU7cmV0dXJuIHI/VHcuY3JlYXRlUG9ydGFsKHAuY3JlYXRlRWxlbWVudChJZS5kaXYsdGUoe30sbyx7cmVmOnR9KSkscik6bnVsbH0pO2Z1bmN0aW9uIERsKHtwcm9wOmUsZGVmYXVsdFByb3A6dCxvbkNoYW5nZTpuPSgpPT57fX0pe2NvbnN0W3Isb109dTMoe2RlZmF1bHRQcm9wOnQsb25DaGFuZ2U6bn0pLGk9ZSE9PXZvaWQgMCxsPWk/ZTpyLHM9SHQobiksYT1wLnVzZUNhbGxiYWNrKHU9PntpZihpKXtjb25zdCBkPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3UoZSk6dTtkIT09ZSYmcyhkKX1lbHNlIG8odSl9LFtpLGUsbyxzXSk7cmV0dXJuW2wsYV19ZnVuY3Rpb24gdTMoe2RlZmF1bHRQcm9wOmUsb25DaGFuZ2U6dH0pe2NvbnN0IG49cC51c2VTdGF0ZShlKSxbcl09bixvPXAudXNlUmVmKHIpLGk9SHQodCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57by5jdXJyZW50IT09ciYmKGkociksby5jdXJyZW50PXIpfSxbcixvLGldKSxufWZ1bmN0aW9uIERFKGUpe2NvbnN0IHQ9cC51c2VSZWYoe3ZhbHVlOmUscHJldmlvdXM6ZX0pO3JldHVybiBwLnVzZU1lbW8oKCk9Pih0LmN1cnJlbnQudmFsdWUhPT1lJiYodC5jdXJyZW50LnByZXZpb3VzPXQuY3VycmVudC52YWx1ZSx0LmN1cnJlbnQudmFsdWU9ZSksdC5jdXJyZW50LnByZXZpb3VzKSxbZV0pfWNvbnN0IGMzPXAuZm9yd2FyZFJlZigoZSx0KT0+cC5jcmVhdGVFbGVtZW50KEllLnNwYW4sdGUoe30sZSx7cmVmOnQsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsYm9yZGVyOjAsd2lkdGg6MSxoZWlnaHQ6MSxwYWRkaW5nOjAsbWFyZ2luOi0xLG92ZXJmbG93OiJoaWRkZW4iLGNsaXA6InJlY3QoMCwgMCwgMCwgMCkiLHdoaXRlU3BhY2U6Im5vd3JhcCIsd29yZFdyYXA6Im5vcm1hbCIsLi4uZS5zdHlsZX19KSkpO3ZhciBkMz1mdW5jdGlvbihlKXtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiBudWxsO3ZhciB0PUFycmF5LmlzQXJyYXkoZSk/ZVswXTplO3JldHVybiB0Lm93bmVyRG9jdW1lbnQuYm9keX0sVmk9bmV3IFdlYWtNYXAsUHU9bmV3IFdlYWtNYXAsT3U9e30semY9MCxJRT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmKGUuaG9zdHx8SUUoZS5wYXJlbnROb2RlKSl9LGYzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKG4pe2lmKGUuY29udGFpbnMobikpcmV0dXJuIG47dmFyIHI9SUUobik7cmV0dXJuIHImJmUuY29udGFpbnMocik/cjooY29uc29sZS5lcnJvcigiYXJpYS1oaWRkZW4iLG4sImluIG5vdCBjb250YWluZWQgaW5zaWRlIixlLCIuIERvaW5nIG5vdGhpbmciKSxudWxsKX0pLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hIW59KX0saDM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ZjModCxBcnJheS5pc0FycmF5KGUpP2U6W2VdKTtPdVtuXXx8KE91W25dPW5ldyBXZWFrTWFwKTt2YXIgaT1PdVtuXSxsPVtdLHM9bmV3IFNldCxhPW5ldyBTZXQobyksdT1mdW5jdGlvbihkKXshZHx8cy5oYXMoZCl8fChzLmFkZChkKSx1KGQucGFyZW50Tm9kZSkpfTtvLmZvckVhY2godSk7dmFyIGM9ZnVuY3Rpb24oZCl7IWR8fGEuaGFzKGQpfHxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGQuY2hpbGRyZW4sZnVuY3Rpb24oZil7aWYocy5oYXMoZikpYyhmKTtlbHNle3ZhciBoPWYuZ2V0QXR0cmlidXRlKHIpLG09aCE9PW51bGwmJmghPT0iZmFsc2UiLGc9KFZpLmdldChmKXx8MCkrMSxfPShpLmdldChmKXx8MCkrMTtWaS5zZXQoZixnKSxpLnNldChmLF8pLGwucHVzaChmKSxnPT09MSYmbSYmUHUuc2V0KGYsITApLF89PT0xJiZmLnNldEF0dHJpYnV0ZShuLCJ0cnVlIiksbXx8Zi5zZXRBdHRyaWJ1dGUociwidHJ1ZSIpfX0pfTtyZXR1cm4gYyh0KSxzLmNsZWFyKCksemYrKyxmdW5jdGlvbigpe2wuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgZj1WaS5nZXQoZCktMSxoPWkuZ2V0KGQpLTE7Vmkuc2V0KGQsZiksaS5zZXQoZCxoKSxmfHwoUHUuaGFzKGQpfHxkLnJlbW92ZUF0dHJpYnV0ZShyKSxQdS5kZWxldGUoZCkpLGh8fGQucmVtb3ZlQXR0cmlidXRlKG4pfSksemYtLSx6Znx8KFZpPW5ldyBXZWFrTWFwLFZpPW5ldyBXZWFrTWFwLFB1PW5ldyBXZWFrTWFwLE91PXt9KX19LHAzPWZ1bmN0aW9uKGUsdCxuKXtuPT09dm9pZCAwJiYobj0iZGF0YS1hcmlhLWhpZGRlbiIpO3ZhciByPUFycmF5LmZyb20oQXJyYXkuaXNBcnJheShlKT9lOltlXSksbz10fHxkMyhlKTtyZXR1cm4gbz8oci5wdXNoLmFwcGx5KHIsQXJyYXkuZnJvbShvLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxpdmVdIikpKSxoMyhyLG8sbiwiYXJpYS1oaWRkZW4iKSk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LHlyPWZ1bmN0aW9uKCl7cmV0dXJuIHlyPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTEsbz1hcmd1bWVudHMubGVuZ3RoO3I8bztyKyspe249YXJndW1lbnRzW3JdO2Zvcih2YXIgaSBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpJiYodFtpXT1uW2ldKX1yZXR1cm4gdH0seXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBqRShlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYoZSE9bnVsbCYmdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM9PSJmdW5jdGlvbiIpZm9yKHZhciBvPTAscj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSk7cmV0dXJuIG59ZnVuY3Rpb24gZzMoZSx0LG4pe2lmKG58fGFyZ3VtZW50cy5sZW5ndGg9PT0yKWZvcih2YXIgcj0wLG89dC5sZW5ndGgsaTtyPG87cisrKShpfHwhKHIgaW4gdCkpJiYoaXx8KGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLHIpKSxpW3JdPXRbcl0pO3JldHVybiBlLmNvbmNhdChpfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9dmFyIGVjPSJyaWdodC1zY3JvbGwtYmFyLXBvc2l0aW9uIix0Yz0id2lkdGgtYmVmb3JlLXNjcm9sbC1iYXIiLG0zPSJ3aXRoLXNjcm9sbC1iYXJzLWhpZGRlbiIsdjM9Ii0tcmVtb3ZlZC1ib2R5LXNjcm9sbC1iYXItc2l6ZSI7ZnVuY3Rpb24geTMoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSh0KTplJiYoZS5jdXJyZW50PXQpLGV9ZnVuY3Rpb24geDMoZSx0KXt2YXIgbj1wLnVzZVN0YXRlKGZ1bmN0aW9uKCl7cmV0dXJue3ZhbHVlOmUsY2FsbGJhY2s6dCxmYWNhZGU6e2dldCBjdXJyZW50KCl7cmV0dXJuIG4udmFsdWV9LHNldCBjdXJyZW50KHIpe3ZhciBvPW4udmFsdWU7byE9PXImJihuLnZhbHVlPXIsbi5jYWxsYmFjayhyLG8pKX19fX0pWzBdO3JldHVybiBuLmNhbGxiYWNrPXQsbi5mYWNhZGV9ZnVuY3Rpb24gdzMoZSx0KXtyZXR1cm4geDModHx8bnVsbCxmdW5jdGlvbihuKXtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiB5MyhyLG4pfSl9KX1mdW5jdGlvbiBfMyhlKXtyZXR1cm4gZX1mdW5jdGlvbiBTMyhlLHQpe3Q9PT12b2lkIDAmJih0PV8zKTt2YXIgbj1bXSxyPSExLG89e3JlYWQ6ZnVuY3Rpb24oKXtpZihyKXRocm93IG5ldyBFcnJvcigiU2lkZWNhcjogY291bGQgbm90IGByZWFkYCBmcm9tIGFuIGBhc3NpZ25lZGAgbWVkaXVtLiBgcmVhZGAgY291bGQgYmUgdXNlZCBvbmx5IHdpdGggYHVzZU1lZGl1bWAuIik7cmV0dXJuIG4ubGVuZ3RoP25bbi5sZW5ndGgtMV06ZX0sdXNlTWVkaXVtOmZ1bmN0aW9uKGkpe3ZhciBsPXQoaSxyKTtyZXR1cm4gbi5wdXNoKGwpLGZ1bmN0aW9uKCl7bj1uLmZpbHRlcihmdW5jdGlvbihzKXtyZXR1cm4gcyE9PWx9KX19LGFzc2lnblN5bmNNZWRpdW06ZnVuY3Rpb24oaSl7Zm9yKHI9ITA7bi5sZW5ndGg7KXt2YXIgbD1uO249W10sbC5mb3JFYWNoKGkpfW49e3B1c2g6ZnVuY3Rpb24ocyl7cmV0dXJuIGkocyl9LGZpbHRlcjpmdW5jdGlvbigpe3JldHVybiBufX19LGFzc2lnbk1lZGl1bTpmdW5jdGlvbihpKXtyPSEwO3ZhciBsPVtdO2lmKG4ubGVuZ3RoKXt2YXIgcz1uO249W10scy5mb3JFYWNoKGkpLGw9bn12YXIgYT1mdW5jdGlvbigpe3ZhciBjPWw7bD1bXSxjLmZvckVhY2goaSl9LHU9ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihhKX07dSgpLG49e3B1c2g6ZnVuY3Rpb24oYyl7bC5wdXNoKGMpLHUoKX0sZmlsdGVyOmZ1bmN0aW9uKGMpe3JldHVybiBsPWwuZmlsdGVyKGMpLG59fX19O3JldHVybiBvfWZ1bmN0aW9uIEUzKGUpe2U9PT12b2lkIDAmJihlPXt9KTt2YXIgdD1TMyhudWxsKTtyZXR1cm4gdC5vcHRpb25zPXlyKHthc3luYzohMCxzc3I6ITF9LGUpLHR9dmFyIHpFPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2lkZUNhcixuPWpFKGUsWyJzaWRlQ2FyIl0pO2lmKCF0KXRocm93IG5ldyBFcnJvcigiU2lkZWNhcjogcGxlYXNlIHByb3ZpZGUgYHNpZGVDYXJgIHByb3BlcnR5IHRvIGltcG9ydCB0aGUgcmlnaHQgY2FyIik7dmFyIHI9dC5yZWFkKCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJTaWRlY2FyIG1lZGl1bSBub3QgZm91bmQiKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KHIseXIoe30sbikpfTt6RS5pc1NpZGVDYXJFeHBvcnQ9ITA7ZnVuY3Rpb24gQzMoZSx0KXtyZXR1cm4gZS51c2VNZWRpdW0odCksekV9dmFyIEZFPUUzKCksRmY9ZnVuY3Rpb24oKXt9LERkPXAuZm9yd2FyZFJlZihmdW5jdGlvbihlLHQpe3ZhciBuPXAudXNlUmVmKG51bGwpLHI9cC51c2VTdGF0ZSh7b25TY3JvbGxDYXB0dXJlOkZmLG9uV2hlZWxDYXB0dXJlOkZmLG9uVG91Y2hNb3ZlQ2FwdHVyZTpGZn0pLG89clswXSxpPXJbMV0sbD1lLmZvcndhcmRQcm9wcyxzPWUuY2hpbGRyZW4sYT1lLmNsYXNzTmFtZSx1PWUucmVtb3ZlU2Nyb2xsQmFyLGM9ZS5lbmFibGVkLGQ9ZS5zaGFyZHMsZj1lLnNpZGVDYXIsaD1lLm5vSXNvbGF0aW9uLG09ZS5pbmVydCxnPWUuYWxsb3dQaW5jaFpvb20sXz1lLmFzLHY9Xz09PXZvaWQgMD8iZGl2IjpfLHk9akUoZSxbImZvcndhcmRQcm9wcyIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwicmVtb3ZlU2Nyb2xsQmFyIiwiZW5hYmxlZCIsInNoYXJkcyIsInNpZGVDYXIiLCJub0lzb2xhdGlvbiIsImluZXJ0IiwiYWxsb3dQaW5jaFpvb20iLCJhcyJdKSx4PWYsUz13Myhbbix0XSksaz15cih5cih7fSx5KSxvKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KHAuRnJhZ21lbnQsbnVsbCxjJiZwLmNyZWF0ZUVsZW1lbnQoeCx7c2lkZUNhcjpGRSxyZW1vdmVTY3JvbGxCYXI6dSxzaGFyZHM6ZCxub0lzb2xhdGlvbjpoLGluZXJ0Om0sc2V0Q2FsbGJhY2tzOmksYWxsb3dQaW5jaFpvb206ISFnLGxvY2tSZWY6bn0pLGw/cC5jbG9uZUVsZW1lbnQocC5DaGlsZHJlbi5vbmx5KHMpLHlyKHlyKHt9LGspLHtyZWY6U30pKTpwLmNyZWF0ZUVsZW1lbnQodix5cih7fSxrLHtjbGFzc05hbWU6YSxyZWY6U30pLHMpKX0pO0RkLmRlZmF1bHRQcm9wcz17ZW5hYmxlZDohMCxyZW1vdmVTY3JvbGxCYXI6ITAsaW5lcnQ6ITF9O0RkLmNsYXNzTmFtZXM9e2Z1bGxXaWR0aDp0Yyx6ZXJvUmlnaHQ6ZWN9O3ZhciBqMCwkMz1mdW5jdGlvbigpe2lmKGowKXJldHVybiBqMDtpZih0eXBlb2YgX193ZWJwYWNrX25vbmNlX188InUiKXJldHVybiBfX3dlYnBhY2tfbm9uY2VfX307ZnVuY3Rpb24gazMoKXtpZighZG9jdW1lbnQpcmV0dXJuIG51bGw7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtlLnR5cGU9InRleHQvY3NzIjt2YXIgdD0kMygpO3JldHVybiB0JiZlLnNldEF0dHJpYnV0ZSgibm9uY2UiLHQpLGV9ZnVuY3Rpb24gYjMoZSx0KXtlLnN0eWxlU2hlZXQ/ZS5zdHlsZVNoZWV0LmNzc1RleHQ9dDplLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpKX1mdW5jdGlvbiBUMyhlKXt2YXIgdD1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdO3QuYXBwZW5kQ2hpbGQoZSl9dmFyIE4zPWZ1bmN0aW9uKCl7dmFyIGU9MCx0PW51bGw7cmV0dXJue2FkZDpmdW5jdGlvbihuKXtlPT0wJiYodD1rMygpKSYmKGIzKHQsbiksVDModCkpLGUrK30scmVtb3ZlOmZ1bmN0aW9uKCl7ZS0tLCFlJiZ0JiYodC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsKX19fSxSMz1mdW5jdGlvbigpe3ZhciBlPU4zKCk7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cC51c2VFZmZlY3QoZnVuY3Rpb24oKXtyZXR1cm4gZS5hZGQodCksZnVuY3Rpb24oKXtlLnJlbW92ZSgpfX0sW3QmJm5dKX19LEJFPWZ1bmN0aW9uKCl7dmFyIGU9UjMoKSx0PWZ1bmN0aW9uKG4pe3ZhciByPW4uc3R5bGVzLG89bi5keW5hbWljO3JldHVybiBlKHIsbyksbnVsbH07cmV0dXJuIHR9LFAzPXtsZWZ0OjAsdG9wOjAscmlnaHQ6MCxnYXA6MH0sQmY9ZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGV8fCIiLDEwKXx8MH0sTzM9ZnVuY3Rpb24oZSl7dmFyIHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSksbj10W2U9PT0icGFkZGluZyI/InBhZGRpbmdMZWZ0IjoibWFyZ2luTGVmdCJdLHI9dFtlPT09InBhZGRpbmciPyJwYWRkaW5nVG9wIjoibWFyZ2luVG9wIl0sbz10W2U9PT0icGFkZGluZyI/InBhZGRpbmdSaWdodCI6Im1hcmdpblJpZ2h0Il07cmV0dXJuW0JmKG4pLEJmKHIpLEJmKG8pXX0sQTM9ZnVuY3Rpb24oZSl7aWYoZT09PXZvaWQgMCYmKGU9Im1hcmdpbiIpLHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBQMzt2YXIgdD1PMyhlKSxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxyPXdpbmRvdy5pbm5lcldpZHRoO3JldHVybntsZWZ0OnRbMF0sdG9wOnRbMV0scmlnaHQ6dFsyXSxnYXA6TWF0aC5tYXgoMCxyLW4rdFsyXS10WzBdKX19LE0zPUJFKCksTDM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ZS5sZWZ0LGk9ZS50b3AsbD1lLnJpZ2h0LHM9ZS5nYXA7cmV0dXJuIG49PT12b2lkIDAmJihuPSJtYXJnaW4iKSxgCiAgLmAuY29uY2F0KG0zLGAgewogICBvdmVyZmxvdzogaGlkZGVuIGApLmNvbmNhdChyLGA7CiAgIHBhZGRpbmctcmlnaHQ6IGApLmNvbmNhdChzLCJweCAiKS5jb25jYXQocixgOwogIH0KICBib2R5IHsKICAgIG92ZXJmbG93OiBoaWRkZW4gYCkuY29uY2F0KHIsYDsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBgKS5jb25jYXQoW3QmJiJwb3NpdGlvbjogcmVsYXRpdmUgIi5jb25jYXQociwiOyIpLG49PT0ibWFyZ2luIiYmYAogICAgcGFkZGluZy1sZWZ0OiBgLmNvbmNhdChvLGBweDsKICAgIHBhZGRpbmctdG9wOiBgKS5jb25jYXQoaSxgcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiBgKS5jb25jYXQobCxgcHg7CiAgICBtYXJnaW4tbGVmdDowOwogICAgbWFyZ2luLXRvcDowOwogICAgbWFyZ2luLXJpZ2h0OiBgKS5jb25jYXQocywicHggIikuY29uY2F0KHIsYDsKICAgIGApLG49PT0icGFkZGluZyImJiJwYWRkaW5nLXJpZ2h0OiAiLmNvbmNhdChzLCJweCAiKS5jb25jYXQociwiOyIpXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIiksYAogIH0KICAKICAuYCkuY29uY2F0KGVjLGAgewogICAgcmlnaHQ6IGApLmNvbmNhdChzLCJweCAiKS5jb25jYXQocixgOwogIH0KICAKICAuYCkuY29uY2F0KHRjLGAgewogICAgbWFyZ2luLXJpZ2h0OiBgKS5jb25jYXQocywicHggIikuY29uY2F0KHIsYDsKICB9CiAgCiAgLmApLmNvbmNhdChlYywiIC4iKS5jb25jYXQoZWMsYCB7CiAgICByaWdodDogMCBgKS5jb25jYXQocixgOwogIH0KICAKICAuYCkuY29uY2F0KHRjLCIgLiIpLmNvbmNhdCh0YyxgIHsKICAgIG1hcmdpbi1yaWdodDogMCBgKS5jb25jYXQocixgOwogIH0KICAKICBib2R5IHsKICAgIGApLmNvbmNhdCh2MywiOiAiKS5jb25jYXQocyxgcHg7CiAgfQpgKX0sRDM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub1JlbGF0aXZlLG49ZS5ub0ltcG9ydGFudCxyPWUuZ2FwTW9kZSxvPXI9PT12b2lkIDA/Im1hcmdpbiI6cixpPXAudXNlTWVtbyhmdW5jdGlvbigpe3JldHVybiBBMyhvKX0sW29dKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KE0zLHtzdHlsZXM6TDMoaSwhdCxvLG4/IiI6IiFpbXBvcnRhbnQiKX0pfSxMcD0hMTtpZih0eXBlb2Ygd2luZG93PCJ1Iil0cnl7dmFyIEF1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBMcD0hMCwhMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsQXUsQXUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixBdSxBdSl9Y2F0Y2h7THA9ITF9dmFyIEtpPUxwP3twYXNzaXZlOiExfTohMSxJMz1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lPT09IlRFWFRBUkVBIn0sV0U9ZnVuY3Rpb24oZSx0KXt2YXIgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKTtyZXR1cm4gblt0XSE9PSJoaWRkZW4iJiYhKG4ub3ZlcmZsb3dZPT09bi5vdmVyZmxvd1gmJiFJMyhlKSYmblt0XT09PSJ2aXNpYmxlIil9LGozPWZ1bmN0aW9uKGUpe3JldHVybiBXRShlLCJvdmVyZmxvd1kiKX0sejM9ZnVuY3Rpb24oZSl7cmV0dXJuIFdFKGUsIm92ZXJmbG93WCIpfSx6MD1mdW5jdGlvbihlLHQpe3ZhciBuPXQ7ZG97dHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZuIGluc3RhbmNlb2YgU2hhZG93Um9vdCYmKG49bi5ob3N0KTt2YXIgcj1VRShlLG4pO2lmKHIpe3ZhciBvPUhFKGUsbiksaT1vWzFdLGw9b1syXTtpZihpPmwpcmV0dXJuITB9bj1uLnBhcmVudE5vZGV9d2hpbGUobiYmbiE9PWRvY3VtZW50LmJvZHkpO3JldHVybiExfSxGMz1mdW5jdGlvbihlKXt2YXIgdD1lLnNjcm9sbFRvcCxuPWUuc2Nyb2xsSGVpZ2h0LHI9ZS5jbGllbnRIZWlnaHQ7cmV0dXJuW3QsbixyXX0sQjM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY3JvbGxMZWZ0LG49ZS5zY3JvbGxXaWR0aCxyPWUuY2xpZW50V2lkdGg7cmV0dXJuW3QsbixyXX0sVUU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PSJ2Ij9qMyh0KTp6Myh0KX0sSEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PSJ2Ij9GMyh0KTpCMyh0KX0sVzM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PSJoIiYmdD09PSJydGwiPy0xOjF9LFUzPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9VzMoZSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXJlY3Rpb24pLGw9aSpyLHM9bi50YXJnZXQsYT10LmNvbnRhaW5zKHMpLHU9ITEsYz1sPjAsZD0wLGY9MDtkb3t2YXIgaD1IRShlLHMpLG09aFswXSxnPWhbMV0sXz1oWzJdLHY9Zy1fLWkqbTsobXx8dikmJlVFKGUscykmJihkKz12LGYrPW0pLHM9cy5wYXJlbnROb2RlfXdoaWxlKCFhJiZzIT09ZG9jdW1lbnQuYm9keXx8YSYmKHQuY29udGFpbnMocyl8fHQ9PT1zKSk7cmV0dXJuKGMmJihvJiZkPT09MHx8IW8mJmw+ZCl8fCFjJiYobyYmZj09PTB8fCFvJiYtbD5mKSkmJih1PSEwKSx1fSxNdT1mdW5jdGlvbihlKXtyZXR1cm4iY2hhbmdlZFRvdWNoZXMiaW4gZT9bZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLGUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WV06WzAsMF19LEYwPWZ1bmN0aW9uKGUpe3JldHVybltlLmRlbHRhWCxlLmRlbHRhWV19LEIwPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiY3VycmVudCJpbiBlP2UuY3VycmVudDplfSxIMz1mdW5jdGlvbihlLHQpe3JldHVybiBlWzBdPT09dFswXSYmZVsxXT09PXRbMV19LFYzPWZ1bmN0aW9uKGUpe3JldHVybmAKICAuYmxvY2staW50ZXJhY3Rpdml0eS1gLmNvbmNhdChlLGAge3BvaW50ZXItZXZlbnRzOiBub25lO30KICAuYWxsb3ctaW50ZXJhY3Rpdml0eS1gKS5jb25jYXQoZSxgIHtwb2ludGVyLWV2ZW50czogYWxsO30KYCl9LEszPTAsR2k9W107ZnVuY3Rpb24gRzMoZSl7dmFyIHQ9cC51c2VSZWYoW10pLG49cC51c2VSZWYoWzAsMF0pLHI9cC51c2VSZWYoKSxvPXAudXNlU3RhdGUoSzMrKylbMF0saT1wLnVzZVN0YXRlKGZ1bmN0aW9uKCl7cmV0dXJuIEJFKCl9KVswXSxsPXAudXNlUmVmKGUpO3AudXNlRWZmZWN0KGZ1bmN0aW9uKCl7bC5jdXJyZW50PWV9LFtlXSkscC51c2VFZmZlY3QoZnVuY3Rpb24oKXtpZihlLmluZXJ0KXtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoImJsb2NrLWludGVyYWN0aXZpdHktIi5jb25jYXQobykpO3ZhciBnPWczKFtlLmxvY2tSZWYuY3VycmVudF0sKGUuc2hhcmRzfHxbXSkubWFwKEIwKSwhMCkuZmlsdGVyKEJvb2xlYW4pO3JldHVybiBnLmZvckVhY2goZnVuY3Rpb24oXyl7cmV0dXJuIF8uY2xhc3NMaXN0LmFkZCgiYWxsb3ctaW50ZXJhY3Rpdml0eS0iLmNvbmNhdChvKSl9KSxmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgiYmxvY2staW50ZXJhY3Rpdml0eS0iLmNvbmNhdChvKSksZy5mb3JFYWNoKGZ1bmN0aW9uKF8pe3JldHVybiBfLmNsYXNzTGlzdC5yZW1vdmUoImFsbG93LWludGVyYWN0aXZpdHktIi5jb25jYXQobykpfSl9fX0sW2UuaW5lcnQsZS5sb2NrUmVmLmN1cnJlbnQsZS5zaGFyZHNdKTt2YXIgcz1wLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKGcsXyl7aWYoInRvdWNoZXMiaW4gZyYmZy50b3VjaGVzLmxlbmd0aD09PTIpcmV0dXJuIWwuY3VycmVudC5hbGxvd1BpbmNoWm9vbTt2YXIgdj1NdShnKSx5PW4uY3VycmVudCx4PSJkZWx0YVgiaW4gZz9nLmRlbHRhWDp5WzBdLXZbMF0sUz0iZGVsdGFZImluIGc/Zy5kZWx0YVk6eVsxXS12WzFdLGssVD1nLnRhcmdldCxiPU1hdGguYWJzKHgpPk1hdGguYWJzKFMpPyJoIjoidiI7aWYoInRvdWNoZXMiaW4gZyYmYj09PSJoIiYmVC50eXBlPT09InJhbmdlIilyZXR1cm4hMTt2YXIgTj16MChiLFQpO2lmKCFOKXJldHVybiEwO2lmKE4/az1iOihrPWI9PT0idiI/ImgiOiJ2IixOPXowKGIsVCkpLCFOKXJldHVybiExO2lmKCFyLmN1cnJlbnQmJiJjaGFuZ2VkVG91Y2hlcyJpbiBnJiYoeHx8UykmJihyLmN1cnJlbnQ9ayksIWspcmV0dXJuITA7dmFyIEQ9ci5jdXJyZW50fHxrO3JldHVybiBVMyhELF8sZyxEPT09ImgiP3g6UywhMCl9LFtdKSxhPXAudXNlQ2FsbGJhY2soZnVuY3Rpb24oZyl7dmFyIF89ZztpZighKCFHaS5sZW5ndGh8fEdpW0dpLmxlbmd0aC0xXSE9PWkpKXt2YXIgdj0iZGVsdGFZImluIF8/RjAoXyk6TXUoXykseT10LmN1cnJlbnQuZmlsdGVyKGZ1bmN0aW9uKGspe3JldHVybiBrLm5hbWU9PT1fLnR5cGUmJmsudGFyZ2V0PT09Xy50YXJnZXQmJkgzKGsuZGVsdGEsdil9KVswXTtpZih5JiZ5LnNob3VsZCl7Xy5jYW5jZWxhYmxlJiZfLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufWlmKCF5KXt2YXIgeD0obC5jdXJyZW50LnNoYXJkc3x8W10pLm1hcChCMCkuZmlsdGVyKEJvb2xlYW4pLmZpbHRlcihmdW5jdGlvbihrKXtyZXR1cm4gay5jb250YWlucyhfLnRhcmdldCl9KSxTPXgubGVuZ3RoPjA/cyhfLHhbMF0pOiFsLmN1cnJlbnQubm9Jc29sYXRpb247UyYmXy5jYW5jZWxhYmxlJiZfLnByZXZlbnREZWZhdWx0KCl9fX0sW10pLHU9cC51c2VDYWxsYmFjayhmdW5jdGlvbihnLF8sdix5KXt2YXIgeD17bmFtZTpnLGRlbHRhOl8sdGFyZ2V0OnYsc2hvdWxkOnl9O3QuY3VycmVudC5wdXNoKHgpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmN1cnJlbnQ9dC5jdXJyZW50LmZpbHRlcihmdW5jdGlvbihTKXtyZXR1cm4gUyE9PXh9KX0sMSl9LFtdKSxjPXAudXNlQ2FsbGJhY2soZnVuY3Rpb24oZyl7bi5jdXJyZW50PU11KGcpLHIuY3VycmVudD12b2lkIDB9LFtdKSxkPXAudXNlQ2FsbGJhY2soZnVuY3Rpb24oZyl7dShnLnR5cGUsRjAoZyksZy50YXJnZXQscyhnLGUubG9ja1JlZi5jdXJyZW50KSl9LFtdKSxmPXAudXNlQ2FsbGJhY2soZnVuY3Rpb24oZyl7dShnLnR5cGUsTXUoZyksZy50YXJnZXQscyhnLGUubG9ja1JlZi5jdXJyZW50KSl9LFtdKTtwLnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiBHaS5wdXNoKGkpLGUuc2V0Q2FsbGJhY2tzKHtvblNjcm9sbENhcHR1cmU6ZCxvbldoZWVsQ2FwdHVyZTpkLG9uVG91Y2hNb3ZlQ2FwdHVyZTpmfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGEsS2kpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsYSxLaSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsYyxLaSksZnVuY3Rpb24oKXtHaT1HaS5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIGchPT1pfSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGEsS2kpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsYSxLaSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsYyxLaSl9fSxbXSk7dmFyIGg9ZS5yZW1vdmVTY3JvbGxCYXIsbT1lLmluZXJ0O3JldHVybiBwLmNyZWF0ZUVsZW1lbnQocC5GcmFnbWVudCxudWxsLG0/cC5jcmVhdGVFbGVtZW50KGkse3N0eWxlczpWMyhvKX0pOm51bGwsaD9wLmNyZWF0ZUVsZW1lbnQoRDMse2dhcE1vZGU6Im1hcmdpbiJ9KTpudWxsKX1jb25zdCBZMz1DMyhGRSxHMyk7dmFyIFZFPXAuZm9yd2FyZFJlZihmdW5jdGlvbihlLHQpe3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoRGQseXIoe30sZSx7cmVmOnQsc2lkZUNhcjpZM30pKX0pO1ZFLmNsYXNzTmFtZXM9RGQuY2xhc3NOYW1lcztjb25zdCBYMz1WRSxRMz1bIiAiLCJFbnRlciIsIkFycm93VXAiLCJBcnJvd0Rvd24iXSxKMz1bIiAiLCJFbnRlciJdLElkPSJTZWxlY3QiLFtqZCx6bSxaM109dkUoSWQpLFtycyxmTF09TmkoSWQsW1ozLE9FXSksRm09T0UoKSxbcTMsTWldPXJzKElkKSxbZUEsdEFdPXJzKElkKSxuQT1lPT57Y29uc3R7X19zY29wZVNlbGVjdDp0LGNoaWxkcmVuOm4sb3BlbjpyLGRlZmF1bHRPcGVuOm8sb25PcGVuQ2hhbmdlOmksdmFsdWU6bCxkZWZhdWx0VmFsdWU6cyxvblZhbHVlQ2hhbmdlOmEsZGlyOnUsbmFtZTpjLGF1dG9Db21wbGV0ZTpkLGRpc2FibGVkOmYscmVxdWlyZWQ6aH09ZSxtPUZtKHQpLFtnLF9dPXAudXNlU3RhdGUobnVsbCksW3YseV09cC51c2VTdGF0ZShudWxsKSxbeCxTXT1wLnVzZVN0YXRlKCExKSxrPVdnKHUpLFtUPSExLGJdPURsKHtwcm9wOnIsZGVmYXVsdFByb3A6byxvbkNoYW5nZTppfSksW04sRF09RGwoe3Byb3A6bCxkZWZhdWx0UHJvcDpzLG9uQ2hhbmdlOmF9KSxNPXAudXNlUmVmKG51bGwpLGo9Zz8hIWcuY2xvc2VzdCgiZm9ybSIpOiEwLFtCLHJlXT1wLnVzZVN0YXRlKG5ldyBTZXQpLFY9QXJyYXkuZnJvbShCKS5tYXAoWT0+WS5wcm9wcy52YWx1ZSkuam9pbigiOyIpO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoaTMsbSxwLmNyZWF0ZUVsZW1lbnQocTMse3JlcXVpcmVkOmgsc2NvcGU6dCx0cmlnZ2VyOmcsb25UcmlnZ2VyQ2hhbmdlOl8sdmFsdWVOb2RlOnYsb25WYWx1ZU5vZGVDaGFuZ2U6eSx2YWx1ZU5vZGVIYXNDaGlsZHJlbjp4LG9uVmFsdWVOb2RlSGFzQ2hpbGRyZW5DaGFuZ2U6Uyxjb250ZW50SWQ6QWQoKSx2YWx1ZTpOLG9uVmFsdWVDaGFuZ2U6RCxvcGVuOlQsb25PcGVuQ2hhbmdlOmIsZGlyOmssdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmOk0sZGlzYWJsZWQ6Zn0scC5jcmVhdGVFbGVtZW50KGpkLlByb3ZpZGVyLHtzY29wZTp0fSxwLmNyZWF0ZUVsZW1lbnQoZUEse3Njb3BlOmUuX19zY29wZVNlbGVjdCxvbk5hdGl2ZU9wdGlvbkFkZDpwLnVzZUNhbGxiYWNrKFk9PntyZShDPT5uZXcgU2V0KEMpLmFkZChZKSl9LFtdKSxvbk5hdGl2ZU9wdGlvblJlbW92ZTpwLnVzZUNhbGxiYWNrKFk9PntyZShDPT57Y29uc3QgJD1uZXcgU2V0KEMpO3JldHVybiAkLmRlbGV0ZShZKSwkfSl9LFtdKX0sbikpLGo/cC5jcmVhdGVFbGVtZW50KFhFLHtrZXk6ViwiYXJpYS1oaWRkZW4iOiEwLHJlcXVpcmVkOmgsdGFiSW5kZXg6LTEsbmFtZTpjLGF1dG9Db21wbGV0ZTpkLHZhbHVlOk4sb25DaGFuZ2U6WT0+RChZLnRhcmdldC52YWx1ZSksZGlzYWJsZWQ6Zn0sTj09PXZvaWQgMD9wLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse3ZhbHVlOiIifSk6bnVsbCxBcnJheS5mcm9tKEIpKTpudWxsKSl9LHJBPSJTZWxlY3RUcmlnZ2VyIixvQT1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sZGlzYWJsZWQ6cj0hMSwuLi5vfT1lLGk9Rm0obiksbD1NaShyQSxuKSxzPWwuZGlzYWJsZWR8fHIsYT1aZSh0LGwub25UcmlnZ2VyQ2hhbmdlKSx1PXptKG4pLFtjLGQsZl09UUUobT0+e2NvbnN0IGc9dSgpLmZpbHRlcih5PT4heS5kaXNhYmxlZCksXz1nLmZpbmQoeT0+eS52YWx1ZT09PWwudmFsdWUpLHY9SkUoZyxtLF8pO3YhPT12b2lkIDAmJmwub25WYWx1ZUNoYW5nZSh2LnZhbHVlKX0pLGg9KCk9PntzfHwobC5vbk9wZW5DaGFuZ2UoITApLGYoKSl9O3JldHVybiBwLmNyZWF0ZUVsZW1lbnQobDMsdGUoe2FzQ2hpbGQ6ITB9LGkpLHAuY3JlYXRlRWxlbWVudChJZS5idXR0b24sdGUoe3R5cGU6ImJ1dHRvbiIscm9sZToiY29tYm9ib3giLCJhcmlhLWNvbnRyb2xzIjpsLmNvbnRlbnRJZCwiYXJpYS1leHBhbmRlZCI6bC5vcGVuLCJhcmlhLXJlcXVpcmVkIjpsLnJlcXVpcmVkLCJhcmlhLWF1dG9jb21wbGV0ZSI6Im5vbmUiLGRpcjpsLmRpciwiZGF0YS1zdGF0ZSI6bC5vcGVuPyJvcGVuIjoiY2xvc2VkIixkaXNhYmxlZDpzLCJkYXRhLWRpc2FibGVkIjpzPyIiOnZvaWQgMCwiZGF0YS1wbGFjZWhvbGRlciI6WUUobC52YWx1ZSk/IiI6dm9pZCAwfSxvLHtyZWY6YSxvbkNsaWNrOkdlKG8ub25DbGljayxtPT57bS5jdXJyZW50VGFyZ2V0LmZvY3VzKCl9KSxvblBvaW50ZXJEb3duOkdlKG8ub25Qb2ludGVyRG93bixtPT57Y29uc3QgZz1tLnRhcmdldDtnLmhhc1BvaW50ZXJDYXB0dXJlKG0ucG9pbnRlcklkKSYmZy5yZWxlYXNlUG9pbnRlckNhcHR1cmUobS5wb2ludGVySWQpLG0uYnV0dG9uPT09MCYmbS5jdHJsS2V5PT09ITEmJihoKCksbC50cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWYuY3VycmVudD17eDpNYXRoLnJvdW5kKG0ucGFnZVgpLHk6TWF0aC5yb3VuZChtLnBhZ2VZKX0sbS5wcmV2ZW50RGVmYXVsdCgpKX0pLG9uS2V5RG93bjpHZShvLm9uS2V5RG93bixtPT57Y29uc3QgZz1jLmN1cnJlbnQhPT0iIjshKG0uY3RybEtleXx8bS5hbHRLZXl8fG0ubWV0YUtleSkmJm0ua2V5Lmxlbmd0aD09PTEmJmQobS5rZXkpLCEoZyYmbS5rZXk9PT0iICIpJiZRMy5pbmNsdWRlcyhtLmtleSkmJihoKCksbS5wcmV2ZW50RGVmYXVsdCgpKX0pfSkpKX0pLGlBPSJTZWxlY3RWYWx1ZSIsbEE9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLGNsYXNzTmFtZTpyLHN0eWxlOm8sY2hpbGRyZW46aSxwbGFjZWhvbGRlcjpsPSIiLC4uLnN9PWUsYT1NaShpQSxuKSx7b25WYWx1ZU5vZGVIYXNDaGlsZHJlbkNoYW5nZTp1fT1hLGM9aSE9PXZvaWQgMCxkPVplKHQsYS5vblZhbHVlTm9kZUNoYW5nZSk7cmV0dXJuIE5uKCgpPT57dShjKX0sW3UsY10pLHAuY3JlYXRlRWxlbWVudChJZS5zcGFuLHRlKHt9LHMse3JlZjpkLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn19KSxZRShhLnZhbHVlKT9wLmNyZWF0ZUVsZW1lbnQocC5GcmFnbWVudCxudWxsLGwpOmkpfSksc0E9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLGNoaWxkcmVuOnIsLi4ub309ZTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KEllLnNwYW4sdGUoeyJhcmlhLWhpZGRlbiI6ITB9LG8se3JlZjp0fSkscnx8IuKWvCIpfSksYUE9ZT0+cC5jcmVhdGVFbGVtZW50KGEzLHRlKHthc0NoaWxkOiEwfSxlKSksSWw9IlNlbGVjdENvbnRlbnQiLHVBPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0IG49TWkoSWwsZS5fX3Njb3BlU2VsZWN0KSxbcixvXT1wLnVzZVN0YXRlKCk7aWYoTm4oKCk9PntvKG5ldyBEb2N1bWVudEZyYWdtZW50KX0sW10pLCFuLm9wZW4pe2NvbnN0IGk9cjtyZXR1cm4gaT9Oci5jcmVhdGVQb3J0YWwocC5jcmVhdGVFbGVtZW50KEtFLHtzY29wZTplLl9fc2NvcGVTZWxlY3R9LHAuY3JlYXRlRWxlbWVudChqZC5TbG90LHtzY29wZTplLl9fc2NvcGVTZWxlY3R9LHAuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLGUuY2hpbGRyZW4pKSksaSk6bnVsbH1yZXR1cm4gcC5jcmVhdGVFbGVtZW50KGNBLHRlKHt9LGUse3JlZjp0fSkpfSksanI9MTAsW0tFLHpkXT1ycyhJbCksY0E9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLHBvc2l0aW9uOnI9Iml0ZW0tYWxpZ25lZCIsb25DbG9zZUF1dG9Gb2N1czpvLG9uRXNjYXBlS2V5RG93bjppLG9uUG9pbnRlckRvd25PdXRzaWRlOmwsc2lkZTpzLHNpZGVPZmZzZXQ6YSxhbGlnbjp1LGFsaWduT2Zmc2V0OmMsYXJyb3dQYWRkaW5nOmQsY29sbGlzaW9uQm91bmRhcnk6Zixjb2xsaXNpb25QYWRkaW5nOmgsc3RpY2t5Om0saGlkZVdoZW5EZXRhY2hlZDpnLGF2b2lkQ29sbGlzaW9uczpfLC4uLnZ9PWUseT1NaShJbCxuKSxbeCxTXT1wLnVzZVN0YXRlKG51bGwpLFtrLFRdPXAudXNlU3RhdGUobnVsbCksYj1aZSh0LFE9PlMoUSkpLFtOLERdPXAudXNlU3RhdGUobnVsbCksW00sal09cC51c2VTdGF0ZShudWxsKSxCPXptKG4pLFtyZSxWXT1wLnVzZVN0YXRlKCExKSxZPXAudXNlUmVmKCExKTtwLnVzZUVmZmVjdCgoKT0+e2lmKHgpcmV0dXJuIHAzKHgpfSxbeF0pLG81KCk7Y29uc3QgQz1wLnVzZUNhbGxiYWNrKFE9Pntjb25zdFtOZSwuLi55ZV09QigpLm1hcChUZT0+VGUucmVmLmN1cnJlbnQpLFtTZV09eWUuc2xpY2UoLTEpLHBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Zm9yKGNvbnN0IFRlIG9mIFEpaWYoVGU9PT1wZXx8KFRlPT1udWxsfHxUZS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QifSksVGU9PT1OZSYmayYmKGsuc2Nyb2xsVG9wPTApLFRlPT09U2UmJmsmJihrLnNjcm9sbFRvcD1rLnNjcm9sbEhlaWdodCksVGU9PW51bGx8fFRlLmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXBlKSlyZXR1cm59LFtCLGtdKSwkPXAudXNlQ2FsbGJhY2soKCk9PkMoW04seF0pLFtDLE4seF0pO3AudXNlRWZmZWN0KCgpPT57cmUmJiQoKX0sW3JlLCRdKTtjb25zdHtvbk9wZW5DaGFuZ2U6RSx0cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWY6T309eTtwLnVzZUVmZmVjdCgoKT0+e2lmKHgpe2xldCBRPXt4OjAseTowfTtjb25zdCBOZT1TZT0+e3ZhciBwZSxUZSxXZSxBdDtRPXt4Ok1hdGguYWJzKE1hdGgucm91bmQoU2UucGFnZVgpLSgocGU9KFRlPU8uY3VycmVudCk9PT1udWxsfHxUZT09PXZvaWQgMD92b2lkIDA6VGUueCkhPT1udWxsJiZwZSE9PXZvaWQgMD9wZTowKSkseTpNYXRoLmFicyhNYXRoLnJvdW5kKFNlLnBhZ2VZKS0oKFdlPShBdD1PLmN1cnJlbnQpPT09bnVsbHx8QXQ9PT12b2lkIDA/dm9pZCAwOkF0LnkpIT09bnVsbCYmV2UhPT12b2lkIDA/V2U6MCkpfX0seWU9U2U9PntRLng8PTEwJiZRLnk8PTEwP1NlLnByZXZlbnREZWZhdWx0KCk6eC5jb250YWlucyhTZS50YXJnZXQpfHxFKCExKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsTmUpLE8uY3VycmVudD1udWxsfTtyZXR1cm4gTy5jdXJyZW50IT09bnVsbCYmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixOZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIix5ZSx7Y2FwdHVyZTohMCxvbmNlOiEwfSkpLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLE5lKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLHllLHtjYXB0dXJlOiEwfSl9fX0sW3gsRSxPXSkscC51c2VFZmZlY3QoKCk9Pntjb25zdCBRPSgpPT5FKCExKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLFEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLFEpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLFEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLFEpfX0sW0VdKTtjb25zdFtSLEZdPVFFKFE9Pntjb25zdCBOZT1CKCkuZmlsdGVyKHBlPT4hcGUuZGlzYWJsZWQpLHllPU5lLmZpbmQocGU9PnBlLnJlZi5jdXJyZW50PT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCksU2U9SkUoTmUsUSx5ZSk7U2UmJnNldFRpbWVvdXQoKCk9PlNlLnJlZi5jdXJyZW50LmZvY3VzKCkpfSksSD1wLnVzZUNhbGxiYWNrKChRLE5lLHllKT0+e2NvbnN0IFNlPSFZLmN1cnJlbnQmJiF5ZTsoeS52YWx1ZSE9PXZvaWQgMCYmeS52YWx1ZT09PU5lfHxTZSkmJihEKFEpLFNlJiYoWS5jdXJyZW50PSEwKSl9LFt5LnZhbHVlXSksYWU9cC51c2VDYWxsYmFjaygoKT0+eD09bnVsbD92b2lkIDA6eC5mb2N1cygpLFt4XSksb2U9cC51c2VDYWxsYmFjaygoUSxOZSx5ZSk9Pntjb25zdCBTZT0hWS5jdXJyZW50JiYheWU7KHkudmFsdWUhPT12b2lkIDAmJnkudmFsdWU9PT1OZXx8U2UpJiZqKFEpfSxbeS52YWx1ZV0pLCRlPXI9PT0icG9wcGVyIj9XMDpkQSxfZT0kZT09PVcwP3tzaWRlOnMsc2lkZU9mZnNldDphLGFsaWduOnUsYWxpZ25PZmZzZXQ6YyxhcnJvd1BhZGRpbmc6ZCxjb2xsaXNpb25Cb3VuZGFyeTpmLGNvbGxpc2lvblBhZGRpbmc6aCxzdGlja3k6bSxoaWRlV2hlbkRldGFjaGVkOmcsYXZvaWRDb2xsaXNpb25zOl99Ont9O3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoS0Use3Njb3BlOm4sY29udGVudDp4LHZpZXdwb3J0Omssb25WaWV3cG9ydENoYW5nZTpULGl0ZW1SZWZDYWxsYmFjazpILHNlbGVjdGVkSXRlbTpOLG9uSXRlbUxlYXZlOmFlLGl0ZW1UZXh0UmVmQ2FsbGJhY2s6b2UsZm9jdXNTZWxlY3RlZEl0ZW06JCxzZWxlY3RlZEl0ZW1UZXh0Ok0scG9zaXRpb246cixpc1Bvc2l0aW9uZWQ6cmUsc2VhcmNoUmVmOlJ9LHAuY3JlYXRlRWxlbWVudChYMyx7YXM6UmwsYWxsb3dQaW5jaFpvb206ITB9LHAuY3JlYXRlRWxlbWVudChpNSx7YXNDaGlsZDohMCx0cmFwcGVkOnkub3Blbixvbk1vdW50QXV0b0ZvY3VzOlE9PntRLnByZXZlbnREZWZhdWx0KCl9LG9uVW5tb3VudEF1dG9Gb2N1czpHZShvLFE9Pnt2YXIgTmU7KE5lPXkudHJpZ2dlcik9PT1udWxsfHxOZT09PXZvaWQgMHx8TmUuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxRLnByZXZlbnREZWZhdWx0KCl9KX0scC5jcmVhdGVFbGVtZW50KHQ1LHthc0NoaWxkOiEwLGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czohMCxvbkVzY2FwZUtleURvd246aSxvblBvaW50ZXJEb3duT3V0c2lkZTpsLG9uRm9jdXNPdXRzaWRlOlE9PlEucHJldmVudERlZmF1bHQoKSxvbkRpc21pc3M6KCk9Pnkub25PcGVuQ2hhbmdlKCExKX0scC5jcmVhdGVFbGVtZW50KCRlLHRlKHtyb2xlOiJsaXN0Ym94IixpZDp5LmNvbnRlbnRJZCwiZGF0YS1zdGF0ZSI6eS5vcGVuPyJvcGVuIjoiY2xvc2VkIixkaXI6eS5kaXIsb25Db250ZXh0TWVudTpRPT5RLnByZXZlbnREZWZhdWx0KCl9LHYsX2Use29uUGxhY2VkOigpPT5WKCEwKSxyZWY6YixzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixvdXRsaW5lOiJub25lIiwuLi52LnN0eWxlfSxvbktleURvd246R2Uodi5vbktleURvd24sUT0+e2NvbnN0IE5lPVEuY3RybEtleXx8US5hbHRLZXl8fFEubWV0YUtleTtpZihRLmtleT09PSJUYWIiJiZRLnByZXZlbnREZWZhdWx0KCksIU5lJiZRLmtleS5sZW5ndGg9PT0xJiZGKFEua2V5KSxbIkFycm93VXAiLCJBcnJvd0Rvd24iLCJIb21lIiwiRW5kIl0uaW5jbHVkZXMoUS5rZXkpKXtsZXQgU2U9QigpLmZpbHRlcihwZT0+IXBlLmRpc2FibGVkKS5tYXAocGU9PnBlLnJlZi5jdXJyZW50KTtpZihbIkFycm93VXAiLCJFbmQiXS5pbmNsdWRlcyhRLmtleSkmJihTZT1TZS5zbGljZSgpLnJldmVyc2UoKSksWyJBcnJvd1VwIiwiQXJyb3dEb3duIl0uaW5jbHVkZXMoUS5rZXkpKXtjb25zdCBwZT1RLnRhcmdldCxUZT1TZS5pbmRleE9mKHBlKTtTZT1TZS5zbGljZShUZSsxKX1zZXRUaW1lb3V0KCgpPT5DKFNlKSksUS5wcmV2ZW50RGVmYXVsdCgpfX0pfSkpKSkpKX0pLGRBPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bixvblBsYWNlZDpyLC4uLm99PWUsaT1NaShJbCxuKSxsPXpkKElsLG4pLFtzLGFdPXAudXNlU3RhdGUobnVsbCksW3UsY109cC51c2VTdGF0ZShudWxsKSxkPVplKHQsYj0+YyhiKSksZj16bShuKSxoPXAudXNlUmVmKCExKSxtPXAudXNlUmVmKCEwKSx7dmlld3BvcnQ6ZyxzZWxlY3RlZEl0ZW06XyxzZWxlY3RlZEl0ZW1UZXh0OnYsZm9jdXNTZWxlY3RlZEl0ZW06eX09bCx4PXAudXNlQ2FsbGJhY2soKCk9PntpZihpLnRyaWdnZXImJmkudmFsdWVOb2RlJiZzJiZ1JiZnJiZfJiZ2KXtjb25zdCBiPWkudHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxOPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRD1pLnZhbHVlTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxNPXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoaS5kaXIhPT0icnRsIil7Y29uc3QgcGU9TS5sZWZ0LU4ubGVmdCxUZT1ELmxlZnQtcGUsV2U9Yi5sZWZ0LVRlLEF0PWIud2lkdGgrV2UsY249TWF0aC5tYXgoQXQsTi53aWR0aCksR249d2luZG93LmlubmVyV2lkdGgtanIsUmU9SGgoVGUsW2pyLEduLWNuXSk7cy5zdHlsZS5taW5XaWR0aD1BdCsicHgiLHMuc3R5bGUubGVmdD1SZSsicHgifWVsc2V7Y29uc3QgcGU9Ti5yaWdodC1NLnJpZ2h0LFRlPXdpbmRvdy5pbm5lcldpZHRoLUQucmlnaHQtcGUsV2U9d2luZG93LmlubmVyV2lkdGgtYi5yaWdodC1UZSxBdD1iLndpZHRoK1dlLGNuPU1hdGgubWF4KEF0LE4ud2lkdGgpLEduPXdpbmRvdy5pbm5lcldpZHRoLWpyLFJlPUhoKFRlLFtqcixHbi1jbl0pO3Muc3R5bGUubWluV2lkdGg9QXQrInB4IixzLnN0eWxlLnJpZ2h0PVJlKyJweCJ9Y29uc3Qgaj1mKCksQj13aW5kb3cuaW5uZXJIZWlnaHQtanIqMixyZT1nLnNjcm9sbEhlaWdodCxWPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHUpLFk9cGFyc2VJbnQoVi5ib3JkZXJUb3BXaWR0aCwxMCksQz1wYXJzZUludChWLnBhZGRpbmdUb3AsMTApLCQ9cGFyc2VJbnQoVi5ib3JkZXJCb3R0b21XaWR0aCwxMCksRT1wYXJzZUludChWLnBhZGRpbmdCb3R0b20sMTApLE89WStDK3JlK0UrJCxSPU1hdGgubWluKF8ub2Zmc2V0SGVpZ2h0KjUsTyksRj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShnKSxIPXBhcnNlSW50KEYucGFkZGluZ1RvcCwxMCksYWU9cGFyc2VJbnQoRi5wYWRkaW5nQm90dG9tLDEwKSxvZT1iLnRvcCtiLmhlaWdodC8yLWpyLCRlPUItb2UsX2U9Xy5vZmZzZXRIZWlnaHQvMixRPV8ub2Zmc2V0VG9wK19lLE5lPVkrQytRLHllPU8tTmU7aWYoTmU8PW9lKXtjb25zdCBwZT1fPT09altqLmxlbmd0aC0xXS5yZWYuY3VycmVudDtzLnN0eWxlLmJvdHRvbT0iMHB4Ijtjb25zdCBUZT11LmNsaWVudEhlaWdodC1nLm9mZnNldFRvcC1nLm9mZnNldEhlaWdodCxXZT1NYXRoLm1heCgkZSxfZSsocGU/YWU6MCkrVGUrJCksQXQ9TmUrV2U7cy5zdHlsZS5oZWlnaHQ9QXQrInB4In1lbHNle2NvbnN0IHBlPV89PT1qWzBdLnJlZi5jdXJyZW50O3Muc3R5bGUudG9wPSIwcHgiO2NvbnN0IFdlPU1hdGgubWF4KG9lLFkrZy5vZmZzZXRUb3ArKHBlP0g6MCkrX2UpK3llO3Muc3R5bGUuaGVpZ2h0PVdlKyJweCIsZy5zY3JvbGxUb3A9TmUtb2UrZy5vZmZzZXRUb3B9cy5zdHlsZS5tYXJnaW49YCR7anJ9cHggMGAscy5zdHlsZS5taW5IZWlnaHQ9UisicHgiLHMuc3R5bGUubWF4SGVpZ2h0PUIrInB4IixyPT1udWxsfHxyKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5oLmN1cnJlbnQ9ITApfX0sW2YsaS50cmlnZ2VyLGkudmFsdWVOb2RlLHMsdSxnLF8sdixpLmRpcixyXSk7Tm4oKCk9PngoKSxbeF0pO2NvbnN0W1Msa109cC51c2VTdGF0ZSgpO05uKCgpPT57dSYmayh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh1KS56SW5kZXgpfSxbdV0pO2NvbnN0IFQ9cC51c2VDYWxsYmFjayhiPT57YiYmbS5jdXJyZW50PT09ITAmJih4KCkseT09bnVsbHx8eSgpLG0uY3VycmVudD0hMSl9LFt4LHldKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KGZBLHtzY29wZTpuLGNvbnRlbnRXcmFwcGVyOnMsc2hvdWxkRXhwYW5kT25TY3JvbGxSZWY6aCxvblNjcm9sbEJ1dHRvbkNoYW5nZTpUfSxwLmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjphLHN0eWxlOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLHBvc2l0aW9uOiJmaXhlZCIsekluZGV4OlN9fSxwLmNyZWF0ZUVsZW1lbnQoSWUuZGl2LHRlKHt9LG8se3JlZjpkLHN0eWxlOntib3hTaXppbmc6ImJvcmRlci1ib3giLG1heEhlaWdodDoiMTAwJSIsLi4uby5zdHlsZX19KSkpKX0pLFcwPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bixhbGlnbjpyPSJzdGFydCIsY29sbGlzaW9uUGFkZGluZzpvPWpyLC4uLml9PWUsbD1GbShuKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KHMzLHRlKHt9LGwsaSx7cmVmOnQsYWxpZ246cixjb2xsaXNpb25QYWRkaW5nOm8sc3R5bGU6e2JveFNpemluZzoiYm9yZGVyLWJveCIsLi4uaS5zdHlsZSwiLS1yYWRpeC1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luIjoidmFyKC0tcmFkaXgtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4pIiwiLS1yYWRpeC1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtd2lkdGgiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLXdpZHRoKSIsIi0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCI6InZhcigtLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtaGVpZ2h0KSIsIi0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGgiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLXdpZHRoKSIsIi0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0IjoidmFyKC0tcmFkaXgtcG9wcGVyLWFuY2hvci1oZWlnaHQpIn19KSl9KSxbZkEsaEFdPXJzKElsLHt9KSxVMD0iU2VsZWN0Vmlld3BvcnQiLHBBPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6biwuLi5yfT1lLG89emQoVTAsbiksaT1oQShVMCxuKSxsPVplKHQsby5vblZpZXdwb3J0Q2hhbmdlKSxzPXAudXNlUmVmKDApO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQocC5GcmFnbWVudCxudWxsLHAuY3JlYXRlRWxlbWVudCgic3R5bGUiLHtkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOiJbZGF0YS1yYWRpeC1zZWxlY3Qtdmlld3BvcnRde3Njcm9sbGJhci13aWR0aDpub25lOy1tcy1vdmVyZmxvdy1zdHlsZTpub25lOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO31bZGF0YS1yYWRpeC1zZWxlY3Qtdmlld3BvcnRdOjotd2Via2l0LXNjcm9sbGJhcntkaXNwbGF5Om5vbmV9In19KSxwLmNyZWF0ZUVsZW1lbnQoamQuU2xvdCx7c2NvcGU6bn0scC5jcmVhdGVFbGVtZW50KEllLmRpdix0ZSh7ImRhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0IjoiIixyb2xlOiJwcmVzZW50YXRpb24ifSxyLHtyZWY6bCxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsb3ZlcmZsb3c6ImF1dG8iLC4uLnIuc3R5bGV9LG9uU2Nyb2xsOkdlKHIub25TY3JvbGwsYT0+e2NvbnN0IHU9YS5jdXJyZW50VGFyZ2V0LHtjb250ZW50V3JhcHBlcjpjLHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmOmR9PWk7aWYoZCE9bnVsbCYmZC5jdXJyZW50JiZjKXtjb25zdCBmPU1hdGguYWJzKHMuY3VycmVudC11LnNjcm9sbFRvcCk7aWYoZj4wKXtjb25zdCBoPXdpbmRvdy5pbm5lckhlaWdodC1qcioyLG09cGFyc2VGbG9hdChjLnN0eWxlLm1pbkhlaWdodCksZz1wYXJzZUZsb2F0KGMuc3R5bGUuaGVpZ2h0KSxfPU1hdGgubWF4KG0sZyk7aWYoXzxoKXtjb25zdCB2PV8rZix5PU1hdGgubWluKGgsdikseD12LXk7Yy5zdHlsZS5oZWlnaHQ9eSsicHgiLGMuc3R5bGUuYm90dG9tPT09IjBweCImJih1LnNjcm9sbFRvcD14PjA/eDowLGMuc3R5bGUuanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIil9fX1zLmN1cnJlbnQ9dS5zY3JvbGxUb3B9KX0pKSkpfSksZ0E9IlNlbGVjdEdyb3VwIixbaEwsbUFdPXJzKGdBKSx2QT0iU2VsZWN0TGFiZWwiLHlBPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6biwuLi5yfT1lLG89bUEodkEsbik7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChJZS5kaXYsdGUoe2lkOm8uaWR9LHIse3JlZjp0fSkpfSksRHA9IlNlbGVjdEl0ZW0iLFt4QSxHRV09cnMoRHApLHdBPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bix2YWx1ZTpyLGRpc2FibGVkOm89ITEsdGV4dFZhbHVlOmksLi4ubH09ZSxzPU1pKERwLG4pLGE9emQoRHAsbiksdT1zLnZhbHVlPT09cixbYyxkXT1wLnVzZVN0YXRlKGk/PyIiKSxbZixoXT1wLnVzZVN0YXRlKCExKSxtPVplKHQsdj0+e3ZhciB5O3JldHVybih5PWEuaXRlbVJlZkNhbGxiYWNrKT09PW51bGx8fHk9PT12b2lkIDA/dm9pZCAwOnkuY2FsbChhLHYscixvKX0pLGc9QWQoKSxfPSgpPT57b3x8KHMub25WYWx1ZUNoYW5nZShyKSxzLm9uT3BlbkNoYW5nZSghMSkpfTtpZihyPT09IiIpdGhyb3cgbmV3IEVycm9yKCJBIDxTZWxlY3QuSXRlbSAvPiBtdXN0IGhhdmUgYSB2YWx1ZSBwcm9wIHRoYXQgaXMgbm90IGFuIGVtcHR5IHN0cmluZy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBTZWxlY3QgdmFsdWUgY2FuIGJlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIHNlbGVjdGlvbiBhbmQgc2hvdyB0aGUgcGxhY2Vob2xkZXIuIik7cmV0dXJuIHAuY3JlYXRlRWxlbWVudCh4QSx7c2NvcGU6bix2YWx1ZTpyLGRpc2FibGVkOm8sdGV4dElkOmcsaXNTZWxlY3RlZDp1LG9uSXRlbVRleHRDaGFuZ2U6cC51c2VDYWxsYmFjayh2PT57ZCh5PT57dmFyIHg7cmV0dXJuIHl8fCgoeD12PT1udWxsP3ZvaWQgMDp2LnRleHRDb250ZW50KSE9PW51bGwmJnghPT12b2lkIDA/eDoiIikudHJpbSgpfSl9LFtdKX0scC5jcmVhdGVFbGVtZW50KGpkLkl0ZW1TbG90LHtzY29wZTpuLHZhbHVlOnIsZGlzYWJsZWQ6byx0ZXh0VmFsdWU6Y30scC5jcmVhdGVFbGVtZW50KEllLmRpdix0ZSh7cm9sZToib3B0aW9uIiwiYXJpYS1sYWJlbGxlZGJ5IjpnLCJkYXRhLWhpZ2hsaWdodGVkIjpmPyIiOnZvaWQgMCwiYXJpYS1zZWxlY3RlZCI6dSYmZiwiZGF0YS1zdGF0ZSI6dT8iY2hlY2tlZCI6InVuY2hlY2tlZCIsImFyaWEtZGlzYWJsZWQiOm98fHZvaWQgMCwiZGF0YS1kaXNhYmxlZCI6bz8iIjp2b2lkIDAsdGFiSW5kZXg6bz92b2lkIDA6LTF9LGwse3JlZjptLG9uRm9jdXM6R2UobC5vbkZvY3VzLCgpPT5oKCEwKSksb25CbHVyOkdlKGwub25CbHVyLCgpPT5oKCExKSksb25Qb2ludGVyVXA6R2UobC5vblBvaW50ZXJVcCxfKSxvblBvaW50ZXJNb3ZlOkdlKGwub25Qb2ludGVyTW92ZSx2PT57aWYobyl7dmFyIHk7KHk9YS5vbkl0ZW1MZWF2ZSk9PT1udWxsfHx5PT09dm9pZCAwfHx5LmNhbGwoYSl9ZWxzZSB2LmN1cnJlbnRUYXJnZXQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX0pLG9uUG9pbnRlckxlYXZlOkdlKGwub25Qb2ludGVyTGVhdmUsdj0+e2lmKHYuY3VycmVudFRhcmdldD09PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpe3ZhciB5Oyh5PWEub25JdGVtTGVhdmUpPT09bnVsbHx8eT09PXZvaWQgMHx8eS5jYWxsKGEpfX0pLG9uS2V5RG93bjpHZShsLm9uS2V5RG93bix2PT57dmFyIHk7KCh5PWEuc2VhcmNoUmVmKT09PW51bGx8fHk9PT12b2lkIDA/dm9pZCAwOnkuY3VycmVudCkhPT0iIiYmdi5rZXk9PT0iICJ8fChKMy5pbmNsdWRlcyh2LmtleSkmJl8oKSx2LmtleT09PSIgIiYmdi5wcmV2ZW50RGVmYXVsdCgpKX0pfSkpKSl9KSxMdT0iU2VsZWN0SXRlbVRleHQiLF9BPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bixjbGFzc05hbWU6cixzdHlsZTpvLC4uLml9PWUsbD1NaShMdSxuKSxzPXpkKEx1LG4pLGE9R0UoTHUsbiksdT10QShMdSxuKSxbYyxkXT1wLnVzZVN0YXRlKG51bGwpLGY9WmUodCx2PT5kKHYpLGEub25JdGVtVGV4dENoYW5nZSx2PT57dmFyIHk7cmV0dXJuKHk9cy5pdGVtVGV4dFJlZkNhbGxiYWNrKT09PW51bGx8fHk9PT12b2lkIDA/dm9pZCAwOnkuY2FsbChzLHYsYS52YWx1ZSxhLmRpc2FibGVkKX0pLGg9Yz09bnVsbD92b2lkIDA6Yy50ZXh0Q29udGVudCxtPXAudXNlTWVtbygoKT0+cC5jcmVhdGVFbGVtZW50KCJvcHRpb24iLHtrZXk6YS52YWx1ZSx2YWx1ZTphLnZhbHVlLGRpc2FibGVkOmEuZGlzYWJsZWR9LGgpLFthLmRpc2FibGVkLGEudmFsdWUsaF0pLHtvbk5hdGl2ZU9wdGlvbkFkZDpnLG9uTmF0aXZlT3B0aW9uUmVtb3ZlOl99PXU7cmV0dXJuIE5uKCgpPT4oZyhtKSwoKT0+XyhtKSksW2csXyxtXSkscC5jcmVhdGVFbGVtZW50KHAuRnJhZ21lbnQsbnVsbCxwLmNyZWF0ZUVsZW1lbnQoSWUuc3Bhbix0ZSh7aWQ6YS50ZXh0SWR9LGkse3JlZjpmfSkpLGEuaXNTZWxlY3RlZCYmbC52YWx1ZU5vZGUmJiFsLnZhbHVlTm9kZUhhc0NoaWxkcmVuP05yLmNyZWF0ZVBvcnRhbChpLmNoaWxkcmVuLGwudmFsdWVOb2RlKTpudWxsKX0pLFNBPSJTZWxlY3RJdGVtSW5kaWNhdG9yIixFQT1wLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sLi4ucn09ZTtyZXR1cm4gR0UoU0EsbikuaXNTZWxlY3RlZD9wLmNyZWF0ZUVsZW1lbnQoSWUuc3Bhbix0ZSh7ImFyaWEtaGlkZGVuIjohMH0scix7cmVmOnR9KSk6bnVsbH0pLENBPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6biwuLi5yfT1lO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoSWUuZGl2LHRlKHsiYXJpYS1oaWRkZW4iOiEwfSxyLHtyZWY6dH0pKX0pO2Z1bmN0aW9uIFlFKGUpe3JldHVybiBlPT09IiJ8fGU9PT12b2lkIDB9Y29uc3QgWEU9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7dmFsdWU6biwuLi5yfT1lLG89cC51c2VSZWYobnVsbCksaT1aZSh0LG8pLGw9REUobik7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3Qgcz1vLmN1cnJlbnQsYT13aW5kb3cuSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLGM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLCJ2YWx1ZSIpLnNldDtpZihsIT09biYmYyl7Y29uc3QgZD1uZXcgRXZlbnQoImNoYW5nZSIse2J1YmJsZXM6ITB9KTtjLmNhbGwocyxuKSxzLmRpc3BhdGNoRXZlbnQoZCl9fSxbbCxuXSkscC5jcmVhdGVFbGVtZW50KGMzLHthc0NoaWxkOiEwfSxwLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIsdGUoe30scix7cmVmOmksZGVmYXVsdFZhbHVlOm59KSkpfSk7WEUuZGlzcGxheU5hbWU9IkJ1YmJsZVNlbGVjdCI7ZnVuY3Rpb24gUUUoZSl7Y29uc3QgdD1IdChlKSxuPXAudXNlUmVmKCIiKSxyPXAudXNlUmVmKDApLG89cC51c2VDYWxsYmFjayhsPT57Y29uc3Qgcz1uLmN1cnJlbnQrbDt0KHMpLGZ1bmN0aW9uIGEodSl7bi5jdXJyZW50PXUsd2luZG93LmNsZWFyVGltZW91dChyLmN1cnJlbnQpLHUhPT0iIiYmKHIuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+YSgiIiksMWUzKSl9KHMpfSxbdF0pLGk9cC51c2VDYWxsYmFjaygoKT0+e24uY3VycmVudD0iIix3aW5kb3cuY2xlYXJUaW1lb3V0KHIuY3VycmVudCl9LFtdKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PigpPT53aW5kb3cuY2xlYXJUaW1lb3V0KHIuY3VycmVudCksW10pLFtuLG8saV19ZnVuY3Rpb24gSkUoZSx0LG4pe2NvbnN0IG89dC5sZW5ndGg+MSYmQXJyYXkuZnJvbSh0KS5ldmVyeSh1PT51PT09dFswXSk/dFswXTp0LGk9bj9lLmluZGV4T2Yobik6LTE7bGV0IGw9JEEoZSxNYXRoLm1heChpLDApKTtvLmxlbmd0aD09PTEmJihsPWwuZmlsdGVyKHU9PnUhPT1uKSk7Y29uc3QgYT1sLmZpbmQodT0+dS50ZXh0VmFsdWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG8udG9Mb3dlckNhc2UoKSkpO3JldHVybiBhIT09bj9hOnZvaWQgMH1mdW5jdGlvbiAkQShlLHQpe3JldHVybiBlLm1hcCgobixyKT0+ZVsodCtyKSVlLmxlbmd0aF0pfWNvbnN0IGtBPW5BLFpFPW9BLGJBPWxBLFRBPXNBLE5BPWFBLHFFPXVBLFJBPXBBLGVDPXlBLHRDPXdBLFBBPV9BLE9BPUVBLG5DPUNBLEFBPWtBLE1BPWJBLHJDPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGNoaWxkcmVuOnQsLi4ubn0scik9PncuanN4cyhaRSx7cmVmOnIsY2xhc3NOYW1lOnV0KCJmbGV4IGgtMTAgdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcHgtMyBweS0yIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXJpbmcgZm9jdXM6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCIsZSksLi4ubixjaGlsZHJlbjpbdCx3LmpzeChUQSx7YXNDaGlsZDohMCxjaGlsZHJlbjp3LmpzeChtRSx7Y2xhc3NOYW1lOiJ3LTQgaC00IG9wYWNpdHktNTAifSl9KV19KSk7ckMuZGlzcGxheU5hbWU9WkUuZGlzcGxheU5hbWU7Y29uc3Qgb0M9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsY2hpbGRyZW46dCxwb3NpdGlvbjpuPSJwb3BwZXIiLC4uLnJ9LG8pPT53LmpzeChOQSx7Y2hpbGRyZW46dy5qc3gocUUse3JlZjpvLGNsYXNzTmFtZTp1dCgicmVsYXRpdmUgei01MCBtaW4tdy1bOHJlbV0gb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgc2hhZG93LW1kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiIsbj09PSJwb3BwZXIiJiYiZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMSIsZSkscG9zaXRpb246biwuLi5yLGNoaWxkcmVuOncuanN4KFJBLHtjbGFzc05hbWU6dXQoInAtMSIsbj09PSJwb3BwZXIiJiYiaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIiksY2hpbGRyZW46dH0pfSl9KSk7b0MuZGlzcGxheU5hbWU9cUUuZGlzcGxheU5hbWU7Y29uc3QgTEE9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsLi4udH0sbik9PncuanN4KGVDLHtyZWY6bixjbGFzc05hbWU6dXQoInB5LTEuNSBwbC04IHByLTIgdGV4dC1zbSBmb250LXNlbWlib2xkIixlKSwuLi50fSkpO0xBLmRpc3BsYXlOYW1lPWVDLmRpc3BsYXlOYW1lO2NvbnN0IGlDPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGNoaWxkcmVuOnQsLi4ubn0scik9PncuanN4cyh0Qyx7cmVmOnIsY2xhc3NOYW1lOnV0KCJyZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItZGVmYXVsdCBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbSBweS0xLjUgcGwtOCBwci0yIHRleHQtc20gb3V0bGluZS1ub25lIGZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhdGEtW2Rpc2FibGVkXTpwb2ludGVyLWV2ZW50cy1ub25lIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwIixlKSwuLi5uLGNoaWxkcmVuOlt3LmpzeCgic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgbGVmdC0yIGZsZXggaC0zLjUgdy0zLjUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjp3LmpzeChPQSx7Y2hpbGRyZW46dy5qc3goTE8se2NsYXNzTmFtZToidy00IGgtNCJ9KX0pfSksdy5qc3goUEEse2NoaWxkcmVuOnR9KV19KSk7aUMuZGlzcGxheU5hbWU9dEMuZGlzcGxheU5hbWU7Y29uc3QgREE9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsLi4udH0sbik9PncuanN4KG5DLHtyZWY6bixjbGFzc05hbWU6dXQoIi1teC0xIG15LTEgaC1weCBiZy1tdXRlZCIsZSksLi4udH0pKTtEQS5kaXNwbGF5TmFtZT1uQy5kaXNwbGF5TmFtZTtmdW5jdGlvbiBsQyh7cGF0aDplLGRpc2FibGVkOnQsc291cmNlOm4sc2NoZW1hOnIscmVnaXN0ZXJQYXRjaENhbGxiYWNrOm8sb25TdWJtaXQ6aX0pe3JldHVybih0eXBlb2Ygbj09InN0cmluZyJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0ic3RyaW5nIj93LmpzeCh6QSx7ZGVmYXVsdFZhbHVlOm4sZGlzYWJsZWQ6dCxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6byxvblN1Ym1pdDppfSk6KHR5cGVvZiBuPT0ibnVtYmVyInx8bj09PW51bGwpJiYocj09bnVsbD92b2lkIDA6ci50eXBlKT09PSJudW1iZXIiP3cuanN4KEcwLHtkZWZhdWx0VmFsdWU6bixkaXNhYmxlZDp0LHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazpvLG9uU3VibWl0Oml9KToodHlwZW9mIG49PSJudW1iZXIifHx0eXBlb2Ygbj09InN0cmluZyJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0ia2V5T2YiP3cuanN4KEswLHtkZWZhdWx0VmFsdWU6bixkaXNhYmxlZDp0LHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazpvLG9uU3VibWl0Omksc2VsZWN0b3I6ci5zZWxlY3Rvcn0pOih0eXBlb2Ygbj09Im51bWJlciJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0ibnVtYmVyIj93LmpzeChHMCx7ZGVmYXVsdFZhbHVlOm4sZGlzYWJsZWQ6dCxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6byxvblN1Ym1pdDppfSk6KHR5cGVvZiBuPT0ibnVtYmVyInx8dHlwZW9mIG49PSJzdHJpbmcifHxuPT09bnVsbCkmJihyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09ImtleU9mIj93LmpzeChLMCx7ZGVmYXVsdFZhbHVlOm4sZGlzYWJsZWQ6dCxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6byxvblN1Ym1pdDppLHNlbGVjdG9yOnIuc2VsZWN0b3J9KToodHlwZW9mIG49PSJvYmplY3QifHxuPT09bnVsbCkmJihyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09InJpY2h0ZXh0Ij93LmpzeChqQSx7cmVnaXN0ZXJQYXRjaENhbGxiYWNrOm8sb25TdWJtaXQ6aSxkZWZhdWx0VmFsdWU6bn0pOih0eXBlb2Ygbj09Im9iamVjdCJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0iaW1hZ2UiP3cuanN4KElBLHtwYXRoOmUscmVnaXN0ZXJQYXRjaENhbGxiYWNrOm8sb25TdWJtaXQ6aSxkZWZhdWx0VmFsdWU6bn0pOncuanN4cygiZGl2Iix7Y2hpbGRyZW46WyJVbnN1cHBvcnRlZCBzY2hlbWE6ICIsci50eXBlXX0pfWZ1bmN0aW9uIEgwKGUsdCxuLHIpe2lmKCF0fHwhcilyZXR1cm5bXTtjb25zdCBvPXIuc2hhMjU2LnNsaWNlKDAsNSksaT1mdW5jdGlvbigpe2NvbnN0IGw9WWcodCk/PyJ1bmtub3duIixzPVhnKGwpO3JldHVybiBuP2AvcHVibGljLyR7bi5zcGxpdCgiLiIpLnNsaWNlKDAsLTEpLmpvaW4oIi4iKXx8bn1fJHtvfS4ke3N9YDpgL3B1YmxpYy8ke3Iuc2hhMjU2fS4ke3N9YH0oKTtyZXR1cm5be3ZhbHVlOntbdm5dOmksW0t0XToiZmlsZSIsbWV0YWRhdGE6cn0sb3A6InJlcGxhY2UiLHBhdGg6ZX0se3ZhbHVlOnQsb3A6ImZpbGUiLHBhdGg6ZSxmaWxlUGF0aDppfV19ZnVuY3Rpb24gSUEoe3BhdGg6ZSxkZWZhdWx0VmFsdWU6dCxvblN1Ym1pdDpuLHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazpyfSl7Y29uc3RbbyxpXT1wLnVzZVN0YXRlKG51bGwpLFtsLHNdPXAudXNlU3RhdGUoITEpLFthLHVdPXAudXNlU3RhdGUoKSxbYyxkXT1wLnVzZVN0YXRlKCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57ZCh0JiYkbi5jb252ZXJ0RmlsZVNvdXJjZSh0KS51cmwpfSxbdF0pLHAudXNlRWZmZWN0KCgpPT57ciYmcihhc3luYyBmPT5IMChmLChvPT1udWxsP3ZvaWQgMDpvLnNyYyk/P251bGwsKG89PW51bGw/dm9pZCAwOm8uZmlsZW5hbWUpPz9udWxsLGEpKX0sW28sdF0pLHcuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtdy00eGwgcC00IixjaGlsZHJlbjpbdy5qc3hzKCJsYWJlbCIse2h0bWxGb3I6YGltZ19pbnB1dDoke2V9YCxjbGFzc05hbWU6IiIsY2hpbGRyZW46W298fGM/dy5qc3goImltZyIse3NyYzoobz09bnVsbD92b2lkIDA6by5zcmMpfHxjfSk6dy5qc3goImRpdiIse2NoaWxkcmVuOiJFbXB0eSJ9KSx3LmpzeCgiaW5wdXQiLHtpZDpgaW1nX2lucHV0OiR7ZX1gLHR5cGU6ImZpbGUiLGhpZGRlbjohMCxvbkNoYW5nZTpmPT57ZEUoZikudGhlbihoPT57aSh7c3JjOmguc3JjLGZpbGVuYW1lOmguZmlsZW5hbWV9KSxoLndpZHRoJiZoLmhlaWdodD91KHtzaGEyNTY6aC5zaGEyNTYsd2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHR9KTp1KHZvaWQgMCl9KS5jYXRjaChoPT57Y29uc29sZS5lcnJvcihoLm1lc3NhZ2UpLGkobnVsbCksdSh2b2lkIDApfSl9fSldfSksbiYmdy5qc3goImRpdiIse2NoaWxkcmVuOm8mJncuanN4KGVzLHtkaXNhYmxlZDpsLG9uQ2xpY2s6KCk9PntzKCEwKSxuKGY9PlByb21pc2UucmVzb2x2ZShIMChmLG8uc3JjLG8uZmlsZW5hbWU/P251bGwsYSkpKS5maW5hbGx5KCgpPT57cyghMSksaShudWxsKSx1KHZvaWQgMCl9KX0sY2hpbGRyZW46bD8iU2F2aW5nLi4uIjoiU3VibWl0In0pfSldfSxlKX1hc3luYyBmdW5jdGlvbiBWMChlLHQpe2NvbnN0e3RlbXBsYXRlU3RyaW5nczpuLGV4cHJzOnIsZmlsZXM6b309dD9hd2FpdCBjMih0LmdldEVkaXRvclN0YXRlKCkudG9KU09OKCkucm9vdCk6e1tLdF06InJpY2h0ZXh0Iix0ZW1wbGF0ZVN0cmluZ3M6WyIiXSxleHByczpbXSxmaWxlczp7fX07cmV0dXJuW3tvcDoicmVwbGFjZSIscGF0aDplLHZhbHVlOnt0ZW1wbGF0ZVN0cmluZ3M6bixleHByczpyLFtLdF06InJpY2h0ZXh0In19LC4uLk9iamVjdC5lbnRyaWVzKG8pLm1hcCgoW2ksbF0pPT4oe29wOiJmaWxlIixwYXRoOmUsZmlsZVBhdGg6aSx2YWx1ZTpsfSkpXX1mdW5jdGlvbiBqQSh7ZGVmYXVsdFZhbHVlOmUsb25TdWJtaXQ6dCxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6bn0pe2NvbnN0W3Isb109cC51c2VTdGF0ZShudWxsKSxbaSxsXT1wLnVzZVN0YXRlKCExKSxbcyxhXT1wLnVzZVN0YXRlKCExKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntyJiYobCghMSksci5yZWdpc3RlclRleHRDb250ZW50TGlzdGVuZXIoKCk9PntsKCEwKX0pLHIucmVnaXN0ZXJEZWNvcmF0b3JMaXN0ZW5lcigoKT0+e2woITApfSkpfSxbcl0pLHAudXNlRWZmZWN0KCgpPT57ciYmbiYmbih1PT5WMCh1LHIpKX0sW3JdKSx3LmpzeHMoImRpdiIse2NsYXNzTmFtZToicC00IGJvcmRlciByb3VuZGVkIGJvcmRlci1jYXJkIixjaGlsZHJlbjpbdy5qc3goT08se29uRWRpdG9yOnU9PntvKHUpfSxyaWNodGV4dDplfHx7Y2hpbGRyZW46W10sW0t0XToicm9vdCJ9fSksdCYmdy5qc3goImRpdiIse2NoaWxkcmVuOmkmJncuanN4KGVzLHtkaXNhYmxlZDpzfHwhcixvbkNsaWNrOigpPT57ciYmKGEoITApLHQodT0+VjAodSxyKSkuZmluYWxseSgoKT0+e2EoITEpLGwoITEpfSkpfSxjaGlsZHJlbjpzPyJTYXZpbmcuLi4iOiJTdWJtaXQifSl9KV19KX1mdW5jdGlvbiBLMCh7ZGlzYWJsZWQ6ZSxkZWZhdWx0VmFsdWU6dCxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6bixvblN1Ym1pdDpyLHNlbGVjdG9yOm99KXtjb25zdCBpPWxNKG8pLHM9KGg9PkFycmF5LmlzQXJyYXkoaC5tb2R1bGVTb3VyY2UpP3t0eXBlOiJudW1iZXIiLHZhbHVlczpPYmplY3Qua2V5cyhoLm1vZHVsZVNvdXJjZSkubWFwKG09PnBhcnNlSW50KG0pKX06e3R5cGU6InN0cmluZyIsdmFsdWVzOk9iamVjdC5rZXlzKGgubW9kdWxlU291cmNlPz9bIkVSUk9SIGZldGNoaW5nIHNvdXJjZSJdKX0pKGkpLFthLHVdPXAudXNlU3RhdGUodHx8cy52YWx1ZXNbMF0pLFtjLGRdPXAudXNlU3RhdGUoITEpO3AudXNlRWZmZWN0KCgpPT57ZChlKX0sW2VdKTtjb25zdCBmPWg9PntpZihzLnR5cGU9PT0ibnVtYmVyIil7aWYoaD09PSIiKXRocm93IG5ldyBFcnJvcigiVmFsdWUgY2Fubm90IGJlIGVtcHR5Iik7aWYoTnVtYmVyLmlzTmFOKE51bWJlcihoKSkpdGhyb3cgbmV3IEVycm9yKCJWYWx1ZSB3YXMgbm90IGEgbnVtYmVyOiAiK0pTT04uc3RyaW5naWZ5KGgpKTtyZXR1cm4gTnVtYmVyKGgpfXJldHVybiBofTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntuJiZuKGFzeW5jIGg9Plt7b3A6InJlcGxhY2UiLHBhdGg6aCx2YWx1ZTphfV0pfSxbYV0pLHcuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBoLWZ1bGwgZ2FwLXktNCIsY2hpbGRyZW46W3cuanN4cyhBQSx7ZGVmYXVsdFZhbHVlOmEudG9TdHJpbmcoKSxkaXNhYmxlZDpjLG9uVmFsdWVDaGFuZ2U6aD0+e3UoZihoKSl9LGNoaWxkcmVuOlt3LmpzeChyQyx7Y2hpbGRyZW46dy5qc3goTUEse3BsYWNlaG9sZGVyOiJTZWxlY3QgYSB2YWx1ZSJ9KX0pLHcuanN4KG9DLHtjaGlsZHJlbjpzLnZhbHVlcy5tYXAoaD0+dy5qc3goaUMse3ZhbHVlOmgudG9TdHJpbmcoKSxjaGlsZHJlbjpoLnRvU3RyaW5nKCl9LGgpKX0pXX0pLHImJncuanN4KCJkaXYiLHtjaGlsZHJlbjp0IT09YSYmdy5qc3goZXMse2Rpc2FibGVkOmMsb25DbGljazooKT0+e2QoITApLHIoYXN5bmMgaD0+W3tvcDoicmVwbGFjZSIscGF0aDpoLHZhbHVlOmF9XSkuZmluYWxseSgoKT0+e2QoITEpfSl9LGNoaWxkcmVuOmM/IlNhdmluZy4uLiI6IlN1Ym1pdCJ9KX0pXX0pfWZ1bmN0aW9uIEcwKHtkaXNhYmxlZDplLGRlZmF1bHRWYWx1ZTp0LHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazpuLG9uU3VibWl0OnJ9KXtjb25zdFtvLGldPXAudXNlU3RhdGUodHx8MCksW2wsc109cC51c2VTdGF0ZSghMSk7cC51c2VFZmZlY3QoKCk9PntzKGUpfSxbZV0pO2NvbnN0IGE9cC51c2VSZWYobnVsbCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57biYmbihhc3luYyB1PT57dmFyIGM7cmV0dXJuW3tvcDoicmVwbGFjZSIscGF0aDp1LHZhbHVlOk51bWJlcigoYz1hLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpjLnZhbHVlKXx8MH1dfSl9LFtdKSx3LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW4gaC1mdWxsIGdhcC15LTQiLGNoaWxkcmVuOlt3LmpzeChPbSx7cmVmOmEsZGlzYWJsZWQ6bCxkZWZhdWx0VmFsdWU6bz8/MCxvbkNoYW5nZTp1PT5pKE51bWJlcih1LnRhcmdldC52YWx1ZSkpLHR5cGU6Im51bWJlciJ9KSxyJiZ3LmpzeCgiZGl2Iix7Y2hpbGRyZW46dCE9PW8mJncuanN4KGVzLHtkaXNhYmxlZDpsLG9uQ2xpY2s6KCk9PntzKCEwKSxyKGFzeW5jIHU9Pnt2YXIgYztyZXR1cm5be29wOiJyZXBsYWNlIixwYXRoOnUsdmFsdWU6TnVtYmVyKChjPWEuY3VycmVudCk9PW51bGw/dm9pZCAwOmMudmFsdWUpfHwwfV19KS5maW5hbGx5KCgpPT57cyghMSl9KX0sY2hpbGRyZW46bD8iU2F2aW5nLi4uIjoiU3VibWl0In0pfSldfSl9ZnVuY3Rpb24gekEoe2Rpc2FibGVkOmUsZGVmYXVsdFZhbHVlOnQscmVnaXN0ZXJQYXRjaENhbGxiYWNrOm4sb25TdWJtaXQ6cn0pe2NvbnN0W28saV09cC51c2VTdGF0ZSh0fHwiIiksW2wsc109cC51c2VTdGF0ZSghMSk7cC51c2VFZmZlY3QoKCk9PntzKGUpfSxbZV0pO2NvbnN0IGE9cC51c2VSZWYobnVsbCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57biYmbihhc3luYyB1PT57dmFyIGM7cmV0dXJuW3tvcDoicmVwbGFjZSIscGF0aDp1LHZhbHVlOigoYz1hLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpjLnZhbHVlKXx8IiJ9XX0pfSxbXSksdy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGgtZnVsbCBnYXAteS00IixjaGlsZHJlbjpbdy5qc3goT20se3JlZjphLGRpc2FibGVkOmwsZGVmYXVsdFZhbHVlOm8/PyIiLG9uQ2hhbmdlOnU9PmkodS50YXJnZXQudmFsdWUpfSksciYmdy5qc3goImRpdiIse2NoaWxkcmVuOnQhPT1vJiZ3LmpzeChlcyx7ZGlzYWJsZWQ6bCxvbkNsaWNrOigpPT57cyghMCkscihhc3luYyB1PT57dmFyIGM7cmV0dXJuW3tvcDoicmVwbGFjZSIscGF0aDp1LHZhbHVlOigoYz1hLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpjLnZhbHVlKXx8IiJ9XX0pLmZpbmFsbHkoKCk9PntzKCExKX0pfSxjaGlsZHJlbjpsPyJTYXZpbmcuLi4iOiJTdWJtaXQifSl9KV19KX1jb25zdCBGQT0oe2NsYXNzTmFtZTplfSk9PncuanN4cygic3ZnIix7d2lkdGg6IjU4IixoZWlnaHQ6IjM0Iix2aWV3Qm94OiIwIDAgNTggMzQiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOmUsY2hpbGRyZW46W3cuanN4KCJnIix7ZmlsdGVyOiJ1cmwoI2ZpbHRlcjBfZF8yMV8xNjc3KSIsY2hpbGRyZW46dy5qc3goInBhdGgiLHtkOiJNNSA1LjM2NDI2QzUgNS4xNjMwOSA1LjE2MzA5IDUgNS4zNjQyNiA1SDE3LjY1ODFDMTcuODU5MyA1IDE4LjAyMjMgNS4xNjMwOSAxOC4wMjIzIDUuMzY0MjZWMjguNDk0OUMxOC4wMjIzIDI4LjY5NiAxNy44NTkzIDI4Ljg1OTEgMTcuNjU4MSAyOC44NTkxSDUuMzY0MjZDNS4xNjMwOSAyOC44NTkxIDUgMjguNjk2IDUgMjguNDk0OVY1LjM2NDI2WiIsZmlsbDoiIzM4Q0Q5OCJ9KX0pLHcuanN4KCJnIix7ZmlsdGVyOiJ1cmwoI2ZpbHRlcjFfaV8yMV8xNjc3KSIsY2hpbGRyZW46dy5qc3goImNpcmNsZSIse2N4OiIxMS40NjU2IixjeToiMjMuNzU5NSIscjoiMi4xODU1NyIsZmlsbDoiY3VycmVudENvbG9yIn0pfSksdy5qc3goInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsY2xpcFJ1bGU6ImV2ZW5vZGQiLGQ6Ik01Mi44NTg4IDIzLjgzOUg0OC43MjU3SDQ4LjUzN0g0OC4xMTI4QzQ3LjY3MTUgMjMuODM5IDQ3LjQ1MDggMjMuNTk0MiA0Ny40NTA4IDIzLjEwNDRWMTMuNzI5M0M0Ny40NTA4IDEzLjU3ODQgNDcuMzI4NSAxMy40NTYxIDQ3LjE3NzcgMTMuNDU2MUg0NS44MTE4QzQ1LjY2MDkgMTMuNDU2MSA0NS41Mzg2IDEzLjU3ODQgNDUuNTM4NiAxMy43MjkzVjE1LjE4MzZDNDUuNTM4NiAxNS4yODQ0IDQ1LjQ1NjkgMTUuMzY2MSA0NS4zNTYxIDE1LjM2NjFDNDUuMjg3NiAxNS4zNjYxIDQ1LjIyNSAxNS4zMjc1IDQ1LjE5MjQgMTUuMjY3MkM0NC44MDUgMTQuNTUwMyA0NC4yODMgMTQuMDIgNDMuNjI2NCAxMy42NzY1QzQyLjk1NjMgMTMuMzAxIDQyLjIwNDUgMTMuMTEzMiA0MS4zNzA5IDEzLjExMzJDNDAuNjAyOCAxMy4xMTMyIDM5Ljg3NTUgMTMuMjUyIDM5LjE4OSAxMy41Mjk1QzM4LjUwMjYgMTMuODA3MSAzNy44OTc5IDE0LjIxNTIgMzcuMzc0OCAxNC43NTM5QzM2Ljg2ODIgMTUuMjc2NCAzNi40Njc4IDE1LjkyMTIgMzYuMTczNiAxNi42ODg1QzM1Ljg3OTQgMTcuNDU1OCAzNS43MzIzIDE4LjMzNzQgMzUuNzMyMyAxOS4zMzMyVjE5LjcyNUMzNS43MzIzIDIwLjczNzIgMzUuODc5NCAyMS42MjcgMzYuMTczNiAyMi4zOTQyQzM2LjQ2NzggMjMuMTYxNSAzNi44NjgyIDIzLjgxNDYgMzcuMzc0OCAyNC4zNTMzQzM3Ljg5NzkgMjQuODc1NyAzOC41MDI2IDI1LjI3NTcgMzkuMTg5IDI1LjU1MzJDMzkuODc1NSAyNS44MTQ0IDQwLjYxOTEgMjUuOTQ1IDQxLjQyIDI1Ljk0NUM0Mi4xODgxIDI1Ljk0NSA0Mi45MTU0IDI1Ljc0OTEgNDMuNjAxOSAyNS4zNTczQzQ0LjI3NTEgMjQuOTgyIDQ0LjgwNTggMjQuNDExOSA0NS4xOTQxIDIzLjY0NzFDNDUuMjI1NSAyMy41ODUyIDQ1LjI4ODYgMjMuNTQ1MiA0NS4zNTggMjMuNTQ1Mkg0NS4zOTE3QzQ1LjQ3MjggMjMuNTQ1MiA0NS41Mzg2IDIzLjYxMSA0NS41Mzg2IDIzLjY5MjFDNDUuNTM4NiAyMy43OTA0IDQ1LjU0NCAyMy44ODU2IDQ1LjU1NDcgMjMuOTc3N1YyNS4xMzkyQzQ1LjU1NDcgMjUuMzkwNCA0NS43NTg0IDI1LjU5NDEgNDYuMDA5NiAyNS41OTQxSDQ3LjIyNjFDNDcuMjkxNCAyNS41OTk1IDQ3LjM1ODEgMjUuNjAyMiA0Ny40MjYzIDI1LjYwMjJINDguNTM3SDQ4LjcyNTdINTcuNzI2OEM1Ny44Nzc3IDI1LjYwMjIgNTggMjUuNDc5OSA1OCAyNS4zMjlWMjQuMTEyMkM1OCAyMy45NjE0IDU3Ljg3NzcgMjMuODM5IDU3LjcyNjggMjMuODM5SDU1LjMxNzRDNTUuMTY2NSAyMy44MzkgNTUuMDQ0MiAyMy43MTY3IDU1LjA0NDIgMjMuNTY1OVY4LjczMzY4QzU1LjA0NDIgOC41ODI3OSA1NC45MjE5IDguNDYwNDggNTQuNzcxIDguNDYwNDhINTAuNTA1NEM1MC4zNTQ1IDguNDYwNDggNTAuMjMyMiA4LjU4Mjc5IDUwLjIzMjIgOC43MzM2OFY5Ljk1MDQzQzUwLjIzMjIgMTAuMTAxMyA1MC4zNTQ1IDEwLjIyMzYgNTAuNTA1NCAxMC4yMjM2SDUyLjg1ODhDNTMuMDA5NyAxMC4yMjM2IDUzLjEzMiAxMC4zNDU5IDUzLjEzMiAxMC40OTY4VjIzLjU2NTlDNTMuMTMyIDIzLjcxNjcgNTMuMDA5NyAyMy44MzkgNTIuODU4OCAyMy44MzlaTTQxLjYxNjEgMjQuMTMyOUM0Mi4xODgxIDI0LjEzMjkgNDIuNzExMSAyNC4wMjY4IDQzLjE4NTEgMjMuODE0NkM0My42NzU0IDIzLjYwMjMgNDQuMDkyMiAyMy4zMDAzIDQ0LjQzNTQgMjIuOTA4NUM0NC43Nzg2IDIyLjUxNjcgNDUuMDQ4MyAyMi4wNTE0IDQ1LjI0NDQgMjEuNTEyN0M0NS40NDA2IDIwLjk1NzYgNDUuNTM4NiAyMC4zNDU0IDQ1LjUzODYgMTkuNjc2MVYxOS4zODIyQzQ1LjUzODYgMTguNzI5MiA0NS40NDA2IDE4LjEzMzMgNDUuMjQ0NCAxNy41OTQ2QzQ1LjA0ODMgMTcuMDM5NSA0NC43NzA1IDE2LjU2NjEgNDQuNDEwOSAxNi4xNzQzQzQ0LjA2NzcgMTUuNzgyNCA0My42NTA5IDE1LjQ4MDQgNDMuMTYwNiAxNS4yNjgyQzQyLjY4NjYgMTUuMDM5NiA0Mi4xNzE4IDE0LjkyNTQgNDEuNjE2MSAxNC45MjU0QzQxLjA0NCAxNC45MjU0IDQwLjUyMSAxNS4wMzE1IDQwLjA0NzEgMTUuMjQzN0MzOS41NzMxIDE1LjQ1NTkgMzkuMTU2MyAxNS43NTggMzguNzk2OCAxNi4xNDk4QzM4LjQ1MzUgMTYuNTI1MiAzOC4xODM5IDE2Ljk5MDUgMzcuOTg3NyAxNy41NDU2QzM3Ljc5MTYgMTguMDg0MyAzNy42OTM2IDE4LjY4MDIgMzcuNjkzNiAxOS4zMzMyVjE5LjcyNUMzNy42OTM2IDIxLjExMjcgMzguMDUzMSAyMi4xOTgzIDM4Ljc3MjIgMjIuOTgyQzM5LjUwNzcgMjMuNzQ5MyA0MC40NTU3IDI0LjEzMjkgNDEuNjE2MSAyNC4xMzI5Wk0zMS4xMTE1IDI1LjQxOTFDMzEuMDczMiAyNS41Mjg3IDMwLjk2OTggMjUuNjAyMiAzMC44NTM2IDI1LjYwMjJIMjcuNDY2MUMyNy4zNSAyNS42MDIyIDI3LjI0NjUgMjUuNTI4NyAyNy4yMDgyIDI1LjQxOTFMMjMuMTU3OCAxMy44MTkzQzIzLjA5NTggMTMuNjQxNyAyMy4yMjc2IDEzLjQ1NjEgMjMuNDE1NyAxMy40NTYxSDI1LjA4OUMyNS4yMDY4IDEzLjQ1NjEgMjUuMzExNCAxMy41MzE2IDI1LjM0ODQgMTMuNjQzNUwyOC45NjY2IDI0LjU4MUMyOC45OTQyIDI0LjY2NDMgMjkuMDcyMSAyNC43MjA2IDI5LjE1OTkgMjQuNzIwNkMyOS4yNDc3IDI0LjcyMDYgMjkuMzI1NiAyNC42NjQzIDI5LjM1MzIgMjQuNTgxTDMyLjk3MTQgMTMuNjQzNUMzMy4wMDg0IDEzLjUzMTYgMzMuMTEyOSAxMy40NTYxIDMzLjIzMDggMTMuNDU2MUgzNC45MDQxQzM1LjA5MjIgMTMuNDU2MSAzNS4yMjQgMTMuNjQxNyAzNS4xNjIgMTMuODE5M0wzMS4xMTE1IDI1LjQxOTFaIixmaWxsOiJjdXJyZW50Q29sb3IifSksdy5qc3hzKCJkZWZzIix7Y2hpbGRyZW46W3cuanN4cygiZmlsdGVyIix7aWQ6ImZpbHRlcjBfZF8yMV8xNjc3Iix4OiIwLjEyNDcyMiIseToiMC4xMjQ3MjIiLHdpZHRoOiIyMi43NzI5IixoZWlnaHQ6IjMzLjYwOTciLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W3cuanN4KCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSx3LmpzeCgiZmVDb2xvck1hdHJpeCIse2luOiJTb3VyY2VBbHBoYSIsdHlwZToibWF0cml4Iix2YWx1ZXM6IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIixyZXN1bHQ6ImhhcmRBbHBoYSJ9KSx3LmpzeCgiZmVPZmZzZXQiLHt9KSx3LmpzeCgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjIuNDM3NjQifSksdy5qc3goImZlQ29tcG9zaXRlIix7aW4yOiJoYXJkQWxwaGEiLG9wZXJhdG9yOiJvdXQifSksdy5qc3goImZlQ29sb3JNYXRyaXgiLHt0eXBlOiJtYXRyaXgiLHZhbHVlczoiMCAwIDAgMCAwLjIxOTYwOCAwIDAgMCAwIDAuODAzOTIyIDAgMCAwIDAgMC41MDE5NjEgMCAwIDAgMC4zIDAifSksdy5qc3goImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6ImVmZmVjdDFfZHJvcFNoYWRvd18yMV8xNjc3In0pLHcuanN4KCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJlZmZlY3QxX2Ryb3BTaGFkb3dfMjFfMTY3NyIscmVzdWx0OiJzaGFwZSJ9KV19KSx3LmpzeHMoImZpbHRlciIse2lkOiJmaWx0ZXIxX2lfMjFfMTY3NyIseDoiOS4yODAwMyIseToiMjEuNTczOSIsd2lkdGg6IjQuMzcxMTIiLGhlaWdodDoiNC4zNzExMiIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbdy5qc3goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLHcuanN4KCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksdy5qc3goImZlQ29sb3JNYXRyaXgiLHtpbjoiU291cmNlQWxwaGEiLHR5cGU6Im1hdHJpeCIsdmFsdWVzOiIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIscmVzdWx0OiJoYXJkQWxwaGEifSksdy5qc3goImZlT2Zmc2V0Iix7fSksdy5qc3goImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjU0NjM5MiJ9KSx3LmpzeCgiZmVDb21wb3NpdGUiLHtpbjI6ImhhcmRBbHBoYSIsb3BlcmF0b3I6ImFyaXRobWV0aWMiLGsyOiItMSIsazM6IjEifSksdy5qc3goImZlQ29sb3JNYXRyaXgiLHt0eXBlOiJtYXRyaXgiLHZhbHVlczoiMCAwIDAgMCAwLjIxOTYwOCAwIDAgMCAwIDAuODAzOTIyIDAgMCAwIDAgMC41MDE5NjEgMCAwIDAgMC4zIDAifSksdy5qc3goImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluMjoic2hhcGUiLHJlc3VsdDoiZWZmZWN0MV9pbm5lclNoYWRvd18yMV8xNjc3In0pXX0pXX0pXX0pLHNDPUZBLGFDPSJTd2l0Y2giLFtCQSxwTF09TmkoYUMpLFtXQSxVQV09QkEoYUMpLEhBPXAuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTd2l0Y2g6bixuYW1lOnIsY2hlY2tlZDpvLGRlZmF1bHRDaGVja2VkOmkscmVxdWlyZWQ6bCxkaXNhYmxlZDpzLHZhbHVlOmE9Im9uIixvbkNoZWNrZWRDaGFuZ2U6dSwuLi5jfT1lLFtkLGZdPXAudXNlU3RhdGUobnVsbCksaD1aZSh0LHk9PmYoeSkpLG09cC51c2VSZWYoITEpLGc9ZD8hIWQuY2xvc2VzdCgiZm9ybSIpOiEwLFtfPSExLHZdPURsKHtwcm9wOm8sZGVmYXVsdFByb3A6aSxvbkNoYW5nZTp1fSk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChXQSx7c2NvcGU6bixjaGVja2VkOl8sZGlzYWJsZWQ6c30scC5jcmVhdGVFbGVtZW50KEllLmJ1dHRvbix0ZSh7dHlwZToiYnV0dG9uIixyb2xlOiJzd2l0Y2giLCJhcmlhLWNoZWNrZWQiOl8sImFyaWEtcmVxdWlyZWQiOmwsImRhdGEtc3RhdGUiOnVDKF8pLCJkYXRhLWRpc2FibGVkIjpzPyIiOnZvaWQgMCxkaXNhYmxlZDpzLHZhbHVlOmF9LGMse3JlZjpoLG9uQ2xpY2s6R2UoZS5vbkNsaWNrLHk9Pnt2KHg9PiF4KSxnJiYobS5jdXJyZW50PXkuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSxtLmN1cnJlbnR8fHkuc3RvcFByb3BhZ2F0aW9uKCkpfSl9KSksZyYmcC5jcmVhdGVFbGVtZW50KEdBLHtjb250cm9sOmQsYnViYmxlczohbS5jdXJyZW50LG5hbWU6cix2YWx1ZTphLGNoZWNrZWQ6XyxyZXF1aXJlZDpsLGRpc2FibGVkOnMsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMTAwJSkifX0pKX0pLFZBPSJTd2l0Y2hUaHVtYiIsS0E9cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVN3aXRjaDpuLC4uLnJ9PWUsbz1VQShWQSxuKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KEllLnNwYW4sdGUoeyJkYXRhLXN0YXRlIjp1QyhvLmNoZWNrZWQpLCJkYXRhLWRpc2FibGVkIjpvLmRpc2FibGVkPyIiOnZvaWQgMH0scix7cmVmOnR9KSl9KSxHQT1lPT57Y29uc3R7Y29udHJvbDp0LGNoZWNrZWQ6bixidWJibGVzOnI9ITAsLi4ub309ZSxpPXAudXNlUmVmKG51bGwpLGw9REUobikscz1ORSh0KTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9Pntjb25zdCBhPWkuY3VycmVudCx1PXdpbmRvdy5IVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSxkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodSwiY2hlY2tlZCIpLnNldDtpZihsIT09biYmZCl7Y29uc3QgZj1uZXcgRXZlbnQoImNsaWNrIix7YnViYmxlczpyfSk7ZC5jYWxsKGEsbiksYS5kaXNwYXRjaEV2ZW50KGYpfX0sW2wsbixyXSkscC5jcmVhdGVFbGVtZW50KCJpbnB1dCIsdGUoe3R5cGU6ImNoZWNrYm94IiwiYXJpYS1oaWRkZW4iOiEwLGRlZmF1bHRDaGVja2VkOm59LG8se3RhYkluZGV4Oi0xLHJlZjppLHN0eWxlOnsuLi5lLnN0eWxlLC4uLnMscG9zaXRpb246ImFic29sdXRlIixwb2ludGVyRXZlbnRzOiJub25lIixvcGFjaXR5OjAsbWFyZ2luOjB9fSkpfTtmdW5jdGlvbiB1QyhlKXtyZXR1cm4gZT8iY2hlY2tlZCI6InVuY2hlY2tlZCJ9Y29uc3QgY0M9SEEsWUE9S0EsSXA9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsLi4udH0sbik9PncuanN4KGNDLHtjbGFzc05hbWU6dXQoInBlZXIgaW5saW5lLWZsZXggaC1bMjJweF0gdy1bNDRweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtYmFja2dyb3VuZCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9dW5jaGVja2VkXTpiZy1wcmltYXJ5IixlKSwuLi50LHJlZjpuLGNoaWxkcmVuOncuanN4KFlBLHtjbGFzc05hbWU6dXQoInBvaW50ZXItZXZlbnRzLW5vbmUgYmxvY2sgaC1bMThweF0gdy01IHJvdW5kZWQtZnVsbCBiZy1iYWNrZ3JvdW5kIHNoYWRvdy1sZyByaW5nLTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZGF0YS1bc3RhdGU9Y2hlY2tlZF06dHJhbnNsYXRlLXgtNSBkYXRhLVtzdGF0ZT11bmNoZWNrZWRdOnRyYW5zbGF0ZS14LTAiKX0pfSkpO0lwLmRpc3BsYXlOYW1lPWNDLmRpc3BsYXlOYW1lO2NvbnN0IEJtPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT53LmpzeCgiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOnV0KCJyb3VuZGVkLWxnIGJvcmRlciBiZy1jYXJkIHRleHQtY2FyZC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSIsZSksLi4udH0pKTtCbS5kaXNwbGF5TmFtZT0iQ2FyZCI7Y29uc3QgWEE9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsLi4udH0sbik9PncuanN4KCJkaXYiLHtyZWY6bixjbGFzc05hbWU6dXQoImZsZXggZmxleC1jb2wgc3BhY2UteS0xLjUgcC02IixlKSwuLi50fSkpO1hBLmRpc3BsYXlOYW1lPSJDYXJkSGVhZGVyIjtjb25zdCBRQT1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+dy5qc3goImgzIix7cmVmOm4sY2xhc3NOYW1lOnV0KCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIGxlYWRpbmctbm9uZSB0cmFja2luZy10aWdodCIsZSksLi4udH0pKTtRQS5kaXNwbGF5TmFtZT0iQ2FyZFRpdGxlIjtjb25zdCBKQT1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+dy5qc3goInAiLHtyZWY6bixjbGFzc05hbWU6dXQoInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIixlKSwuLi50fSkpO0pBLmRpc3BsYXlOYW1lPSJDYXJkRGVzY3JpcHRpb24iO2NvbnN0IFpBPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT53LmpzeCgiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOnV0KCJwLTYgcHQtMCIsZSksLi4udH0pKTtaQS5kaXNwbGF5TmFtZT0iQ2FyZENvbnRlbnQiO2NvbnN0IHFBPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT53LmpzeCgiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOnV0KCJmbGV4IGl0ZW1zLWNlbnRlciBwLTYgcHQtMCIsZSksLi4udH0pKTtxQS5kaXNwbGF5TmFtZT0iQ2FyZEZvb3RlciI7LyoqCiAqIEByZW1peC1ydW4vcm91dGVyIHYxLjEzLjAKICoKICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqCiAqIEBsaWNlbnNlIE1JVAogKi9mdW5jdGlvbiBhdCgpe3JldHVybiBhdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGF0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZHQ7KGZ1bmN0aW9uKGUpe2UuUG9wPSJQT1AiLGUuUHVzaD0iUFVTSCIsZS5SZXBsYWNlPSJSRVBMQUNFIn0pKGR0fHwoZHQ9e30pKTtjb25zdCBZMD0icG9wc3RhdGUiO2Z1bmN0aW9uIGU0KGUpe2U9PT12b2lkIDAmJihlPXt9KTtmdW5jdGlvbiB0KHIsbyl7bGV0e3BhdGhuYW1lOmksc2VhcmNoOmwsaGFzaDpzfT1yLmxvY2F0aW9uO3JldHVybiBPYSgiIix7cGF0aG5hbWU6aSxzZWFyY2g6bCxoYXNoOnN9LG8uc3RhdGUmJm8uc3RhdGUudXNyfHxudWxsLG8uc3RhdGUmJm8uc3RhdGUua2V5fHwiZGVmYXVsdCIpfWZ1bmN0aW9uIG4ocixvKXtyZXR1cm4gdHlwZW9mIG89PSJzdHJpbmciP286UWEobyl9cmV0dXJuIG40KHQsbixudWxsLGUpfWZ1bmN0aW9uIEVlKGUsdCl7aWYoZT09PSExfHxlPT09bnVsbHx8dHlwZW9mIGU+InUiKXRocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiBFaShlLHQpe2lmKCFlKXt0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2Fybih0KTt0cnl7dGhyb3cgbmV3IEVycm9yKHQpfWNhdGNoe319fWZ1bmN0aW9uIHQ0KCl7cmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDgpfWZ1bmN0aW9uIFgwKGUsdCl7cmV0dXJue3VzcjplLnN0YXRlLGtleTplLmtleSxpZHg6dH19ZnVuY3Rpb24gT2EoZSx0LG4scil7cmV0dXJuIG49PT12b2lkIDAmJihuPW51bGwpLGF0KHtwYXRobmFtZTp0eXBlb2YgZT09InN0cmluZyI/ZTplLnBhdGhuYW1lLHNlYXJjaDoiIixoYXNoOiIifSx0eXBlb2YgdD09InN0cmluZyI/b28odCk6dCx7c3RhdGU6bixrZXk6dCYmdC5rZXl8fHJ8fHQ0KCl9KX1mdW5jdGlvbiBRYShlKXtsZXR7cGF0aG5hbWU6dD0iLyIsc2VhcmNoOm49IiIsaGFzaDpyPSIifT1lO3JldHVybiBuJiZuIT09Ij8iJiYodCs9bi5jaGFyQXQoMCk9PT0iPyI/bjoiPyIrbiksciYmciE9PSIjIiYmKHQrPXIuY2hhckF0KDApPT09IiMiP3I6IiMiK3IpLHR9ZnVuY3Rpb24gb28oZSl7bGV0IHQ9e307aWYoZSl7bGV0IG49ZS5pbmRleE9mKCIjIik7bj49MCYmKHQuaGFzaD1lLnN1YnN0cihuKSxlPWUuc3Vic3RyKDAsbikpO2xldCByPWUuaW5kZXhPZigiPyIpO3I+PTAmJih0LnNlYXJjaD1lLnN1YnN0cihyKSxlPWUuc3Vic3RyKDAscikpLGUmJih0LnBhdGhuYW1lPWUpfXJldHVybiB0fWZ1bmN0aW9uIG40KGUsdCxuLHIpe3I9PT12b2lkIDAmJihyPXt9KTtsZXR7d2luZG93Om89ZG9jdW1lbnQuZGVmYXVsdFZpZXcsdjVDb21wYXQ6aT0hMX09cixsPW8uaGlzdG9yeSxzPWR0LlBvcCxhPW51bGwsdT1jKCk7dT09bnVsbCYmKHU9MCxsLnJlcGxhY2VTdGF0ZShhdCh7fSxsLnN0YXRlLHtpZHg6dX0pLCIiKSk7ZnVuY3Rpb24gYygpe3JldHVybihsLnN0YXRlfHx7aWR4Om51bGx9KS5pZHh9ZnVuY3Rpb24gZCgpe3M9ZHQuUG9wO2xldCBfPWMoKSx2PV89PW51bGw/bnVsbDpfLXU7dT1fLGEmJmEoe2FjdGlvbjpzLGxvY2F0aW9uOmcubG9jYXRpb24sZGVsdGE6dn0pfWZ1bmN0aW9uIGYoXyx2KXtzPWR0LlB1c2g7bGV0IHk9T2EoZy5sb2NhdGlvbixfLHYpO24mJm4oeSxfKSx1PWMoKSsxO2xldCB4PVgwKHksdSksUz1nLmNyZWF0ZUhyZWYoeSk7dHJ5e2wucHVzaFN0YXRlKHgsIiIsUyl9Y2F0Y2goayl7aWYoayBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmay5uYW1lPT09IkRhdGFDbG9uZUVycm9yIil0aHJvdyBrO28ubG9jYXRpb24uYXNzaWduKFMpfWkmJmEmJmEoe2FjdGlvbjpzLGxvY2F0aW9uOmcubG9jYXRpb24sZGVsdGE6MX0pfWZ1bmN0aW9uIGgoXyx2KXtzPWR0LlJlcGxhY2U7bGV0IHk9T2EoZy5sb2NhdGlvbixfLHYpO24mJm4oeSxfKSx1PWMoKTtsZXQgeD1YMCh5LHUpLFM9Zy5jcmVhdGVIcmVmKHkpO2wucmVwbGFjZVN0YXRlKHgsIiIsUyksaSYmYSYmYSh7YWN0aW9uOnMsbG9jYXRpb246Zy5sb2NhdGlvbixkZWx0YTowfSl9ZnVuY3Rpb24gbShfKXtsZXQgdj1vLmxvY2F0aW9uLm9yaWdpbiE9PSJudWxsIj9vLmxvY2F0aW9uLm9yaWdpbjpvLmxvY2F0aW9uLmhyZWYseT10eXBlb2YgXz09InN0cmluZyI/XzpRYShfKTtyZXR1cm4gRWUodiwiTm8gd2luZG93LmxvY2F0aW9uLihvcmlnaW58aHJlZikgYXZhaWxhYmxlIHRvIGNyZWF0ZSBVUkwgZm9yIGhyZWY6ICIreSksbmV3IFVSTCh5LHYpfWxldCBnPXtnZXQgYWN0aW9uKCl7cmV0dXJuIHN9LGdldCBsb2NhdGlvbigpe3JldHVybiBlKG8sbCl9LGxpc3RlbihfKXtpZihhKXRocm93IG5ldyBFcnJvcigiQSBoaXN0b3J5IG9ubHkgYWNjZXB0cyBvbmUgYWN0aXZlIGxpc3RlbmVyIik7cmV0dXJuIG8uYWRkRXZlbnRMaXN0ZW5lcihZMCxkKSxhPV8sKCk9PntvLnJlbW92ZUV2ZW50TGlzdGVuZXIoWTAsZCksYT1udWxsfX0sY3JlYXRlSHJlZihfKXtyZXR1cm4gdChvLF8pfSxjcmVhdGVVUkw6bSxlbmNvZGVMb2NhdGlvbihfKXtsZXQgdj1tKF8pO3JldHVybntwYXRobmFtZTp2LnBhdGhuYW1lLHNlYXJjaDp2LnNlYXJjaCxoYXNoOnYuaGFzaH19LHB1c2g6ZixyZXBsYWNlOmgsZ28oXyl7cmV0dXJuIGwuZ28oXyl9fTtyZXR1cm4gZ312YXIgZnQ7KGZ1bmN0aW9uKGUpe2UuZGF0YT0iZGF0YSIsZS5kZWZlcnJlZD0iZGVmZXJyZWQiLGUucmVkaXJlY3Q9InJlZGlyZWN0IixlLmVycm9yPSJlcnJvciJ9KShmdHx8KGZ0PXt9KSk7Y29uc3QgcjQ9bmV3IFNldChbImxhenkiLCJjYXNlU2Vuc2l0aXZlIiwicGF0aCIsImlkIiwiaW5kZXgiLCJjaGlsZHJlbiJdKTtmdW5jdGlvbiBvNChlKXtyZXR1cm4gZS5pbmRleD09PSEwfWZ1bmN0aW9uIGpwKGUsdCxuLHIpe3JldHVybiBuPT09dm9pZCAwJiYobj1bXSkscj09PXZvaWQgMCYmKHI9e30pLGUubWFwKChvLGkpPT57bGV0IGw9Wy4uLm4saV0scz10eXBlb2Ygby5pZD09InN0cmluZyI/by5pZDpsLmpvaW4oIi0iKTtpZihFZShvLmluZGV4IT09ITB8fCFvLmNoaWxkcmVuLCJDYW5ub3Qgc3BlY2lmeSBjaGlsZHJlbiBvbiBhbiBpbmRleCByb3V0ZSIpLEVlKCFyW3NdLCdGb3VuZCBhIHJvdXRlIGlkIGNvbGxpc2lvbiBvbiBpZCAiJytzK2AiLiAgUm91dGUgaWQncyBtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSB3aXRoaW4gRGF0YSBSb3V0ZXIgdXNhZ2VzYCksbzQobykpe2xldCBhPWF0KHt9LG8sdChvKSx7aWQ6c30pO3JldHVybiByW3NdPWEsYX1lbHNle2xldCBhPWF0KHt9LG8sdChvKSx7aWQ6cyxjaGlsZHJlbjp2b2lkIDB9KTtyZXR1cm4gcltzXT1hLG8uY2hpbGRyZW4mJihhLmNoaWxkcmVuPWpwKG8uY2hpbGRyZW4sdCxsLHIpKSxhfX0pfWZ1bmN0aW9uIGNsKGUsdCxuKXtuPT09dm9pZCAwJiYobj0iLyIpO2xldCByPXR5cGVvZiB0PT0ic3RyaW5nIj9vbyh0KTp0LG89SmEoci5wYXRobmFtZXx8Ii8iLG4pO2lmKG89PW51bGwpcmV0dXJuIG51bGw7bGV0IGk9ZEMoZSk7bDQoaSk7bGV0IGw9bnVsbDtmb3IobGV0IHM9MDtsPT1udWxsJiZzPGkubGVuZ3RoOysrcylsPWc0KGlbc10seTQobykpO3JldHVybiBsfWZ1bmN0aW9uIGk0KGUsdCl7bGV0e3JvdXRlOm4scGF0aG5hbWU6cixwYXJhbXM6b309ZTtyZXR1cm57aWQ6bi5pZCxwYXRobmFtZTpyLHBhcmFtczpvLGRhdGE6dFtuLmlkXSxoYW5kbGU6bi5oYW5kbGV9fWZ1bmN0aW9uIGRDKGUsdCxuLHIpe3Q9PT12b2lkIDAmJih0PVtdKSxuPT09dm9pZCAwJiYobj1bXSkscj09PXZvaWQgMCYmKHI9IiIpO2xldCBvPShpLGwscyk9PntsZXQgYT17cmVsYXRpdmVQYXRoOnM9PT12b2lkIDA/aS5wYXRofHwiIjpzLGNhc2VTZW5zaXRpdmU6aS5jYXNlU2Vuc2l0aXZlPT09ITAsY2hpbGRyZW5JbmRleDpsLHJvdXRlOml9O2EucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoIi8iKSYmKEVlKGEucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgociksJ0Fic29sdXRlIHJvdXRlIHBhdGggIicrYS5yZWxhdGl2ZVBhdGgrJyIgbmVzdGVkIHVuZGVyIHBhdGggJysoJyInK3IrJyIgaXMgbm90IHZhbGlkLiBBbiBhYnNvbHV0ZSBjaGlsZCByb3V0ZSBwYXRoICcpKyJtdXN0IHN0YXJ0IHdpdGggdGhlIGNvbWJpbmVkIHBhdGggb2YgYWxsIGl0cyBwYXJlbnQgcm91dGVzLiIpLGEucmVsYXRpdmVQYXRoPWEucmVsYXRpdmVQYXRoLnNsaWNlKHIubGVuZ3RoKSk7bGV0IHU9QW8oW3IsYS5yZWxhdGl2ZVBhdGhdKSxjPW4uY29uY2F0KGEpO2kuY2hpbGRyZW4mJmkuY2hpbGRyZW4ubGVuZ3RoPjAmJihFZShpLmluZGV4IT09ITAsIkluZGV4IHJvdXRlcyBtdXN0IG5vdCBoYXZlIGNoaWxkIHJvdXRlcy4gUGxlYXNlIHJlbW92ZSAiKygnYWxsIGNoaWxkIHJvdXRlcyBmcm9tIHJvdXRlIHBhdGggIicrdSsnIi4nKSksZEMoaS5jaGlsZHJlbix0LGMsdSkpLCEoaS5wYXRoPT1udWxsJiYhaS5pbmRleCkmJnQucHVzaCh7cGF0aDp1LHNjb3JlOmg0KHUsaS5pbmRleCkscm91dGVzTWV0YTpjfSl9O3JldHVybiBlLmZvckVhY2goKGksbCk9Pnt2YXIgcztpZihpLnBhdGg9PT0iInx8ISgocz1pLnBhdGgpIT1udWxsJiZzLmluY2x1ZGVzKCI/IikpKW8oaSxsKTtlbHNlIGZvcihsZXQgYSBvZiBmQyhpLnBhdGgpKW8oaSxsLGEpfSksdH1mdW5jdGlvbiBmQyhlKXtsZXQgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGg9PT0wKXJldHVybltdO2xldFtuLC4uLnJdPXQsbz1uLmVuZHNXaXRoKCI/IiksaT1uLnJlcGxhY2UoL1w/JC8sIiIpO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gbz9baSwiIl06W2ldO2xldCBsPWZDKHIuam9pbigiLyIpKSxzPVtdO3JldHVybiBzLnB1c2goLi4ubC5tYXAoYT0+YT09PSIiP2k6W2ksYV0uam9pbigiLyIpKSksbyYmcy5wdXNoKC4uLmwpLHMubWFwKGE9PmUuc3RhcnRzV2l0aCgiLyIpJiZhPT09IiI/Ii8iOmEpfWZ1bmN0aW9uIGw0KGUpe2Uuc29ydCgodCxuKT0+dC5zY29yZSE9PW4uc2NvcmU/bi5zY29yZS10LnNjb3JlOnA0KHQucm91dGVzTWV0YS5tYXAocj0+ci5jaGlsZHJlbkluZGV4KSxuLnJvdXRlc01ldGEubWFwKHI9PnIuY2hpbGRyZW5JbmRleCkpKX1jb25zdCBzND0vXjpcdyskLyxhND0zLHU0PTIsYzQ9MSxkND0xMCxmND0tMixRMD1lPT5lPT09IioiO2Z1bmN0aW9uIGg0KGUsdCl7bGV0IG49ZS5zcGxpdCgiLyIpLHI9bi5sZW5ndGg7cmV0dXJuIG4uc29tZShRMCkmJihyKz1mNCksdCYmKHIrPXU0KSxuLmZpbHRlcihvPT4hUTAobykpLnJlZHVjZSgobyxpKT0+bysoczQudGVzdChpKT9hNDppPT09IiI/YzQ6ZDQpLHIpfWZ1bmN0aW9uIHA0KGUsdCl7cmV0dXJuIGUubGVuZ3RoPT09dC5sZW5ndGgmJmUuc2xpY2UoMCwtMSkuZXZlcnkoKHIsbyk9PnI9PT10W29dKT9lW2UubGVuZ3RoLTFdLXRbdC5sZW5ndGgtMV06MH1mdW5jdGlvbiBnNChlLHQpe2xldHtyb3V0ZXNNZXRhOm59PWUscj17fSxvPSIvIixpPVtdO2ZvcihsZXQgbD0wO2w8bi5sZW5ndGg7KytsKXtsZXQgcz1uW2xdLGE9bD09PW4ubGVuZ3RoLTEsdT1vPT09Ii8iP3Q6dC5zbGljZShvLmxlbmd0aCl8fCIvIixjPW00KHtwYXRoOnMucmVsYXRpdmVQYXRoLGNhc2VTZW5zaXRpdmU6cy5jYXNlU2Vuc2l0aXZlLGVuZDphfSx1KTtpZighYylyZXR1cm4gbnVsbDtPYmplY3QuYXNzaWduKHIsYy5wYXJhbXMpO2xldCBkPXMucm91dGU7aS5wdXNoKHtwYXJhbXM6cixwYXRobmFtZTpBbyhbbyxjLnBhdGhuYW1lXSkscGF0aG5hbWVCYXNlOlM0KEFvKFtvLGMucGF0aG5hbWVCYXNlXSkpLHJvdXRlOmR9KSxjLnBhdGhuYW1lQmFzZSE9PSIvIiYmKG89QW8oW28sYy5wYXRobmFtZUJhc2VdKSl9cmV0dXJuIGl9ZnVuY3Rpb24gbTQoZSx0KXt0eXBlb2YgZT09InN0cmluZyImJihlPXtwYXRoOmUsY2FzZVNlbnNpdGl2ZTohMSxlbmQ6ITB9KTtsZXRbbixyXT12NChlLnBhdGgsZS5jYXNlU2Vuc2l0aXZlLGUuZW5kKSxvPXQubWF0Y2gobik7aWYoIW8pcmV0dXJuIG51bGw7bGV0IGk9b1swXSxsPWkucmVwbGFjZSgvKC4pXC8rJC8sIiQxIikscz1vLnNsaWNlKDEpO3JldHVybntwYXJhbXM6ci5yZWR1Y2UoKHUsYyxkKT0+e2xldHtwYXJhbU5hbWU6Zixpc09wdGlvbmFsOmh9PWM7aWYoZj09PSIqIil7bGV0IGc9c1tkXXx8IiI7bD1pLnNsaWNlKDAsaS5sZW5ndGgtZy5sZW5ndGgpLnJlcGxhY2UoLyguKVwvKyQvLCIkMSIpfWNvbnN0IG09c1tkXTtyZXR1cm4gaCYmIW0/dVtmXT12b2lkIDA6dVtmXT14NChtfHwiIixmKSx1fSx7fSkscGF0aG5hbWU6aSxwYXRobmFtZUJhc2U6bCxwYXR0ZXJuOmV9fWZ1bmN0aW9uIHY0KGUsdCxuKXt0PT09dm9pZCAwJiYodD0hMSksbj09PXZvaWQgMCYmKG49ITApLEVpKGU9PT0iKiJ8fCFlLmVuZHNXaXRoKCIqIil8fGUuZW5kc1dpdGgoIi8qIiksJ1JvdXRlIHBhdGggIicrZSsnIiB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZSAnKygnIicrZS5yZXBsYWNlKC9cKiQvLCIvKiIpKyciIGJlY2F1c2UgdGhlIGAqYCBjaGFyYWN0ZXIgbXVzdCAnKSsiYWx3YXlzIGZvbGxvdyBhIGAvYCBpbiB0aGUgcGF0dGVybi4gVG8gZ2V0IHJpZCBvZiB0aGlzIHdhcm5pbmcsICIrKCdwbGVhc2UgY2hhbmdlIHRoZSByb3V0ZSBwYXRoIHRvICInK2UucmVwbGFjZSgvXCokLywiLyoiKSsnIi4nKSk7bGV0IHI9W10sbz0iXiIrZS5yZXBsYWNlKC9cLypcKj8kLywiIikucmVwbGFjZSgvXlwvKi8sIi8iKS5yZXBsYWNlKC9bXFwuKiteJHt9fCgpW1xdXS9nLCJcXCQmIikucmVwbGFjZSgvXC86KFx3KykoXD8pPy9nLChsLHMsYSk9PihyLnB1c2goe3BhcmFtTmFtZTpzLGlzT3B0aW9uYWw6YSE9bnVsbH0pLGE/Ii8/KFteXFwvXSspPyI6Ii8oW15cXC9dKykiKSk7cmV0dXJuIGUuZW5kc1dpdGgoIioiKT8oci5wdXNoKHtwYXJhbU5hbWU6IioifSksbys9ZT09PSIqInx8ZT09PSIvKiI/IiguKikkIjoiKD86XFwvKC4rKXxcXC8qKSQiKTpuP28rPSJcXC8qJCI6ZSE9PSIiJiZlIT09Ii8iJiYobys9Iig/Oig/PVxcL3wkKSkiKSxbbmV3IFJlZ0V4cChvLHQ/dm9pZCAwOiJpIikscl19ZnVuY3Rpb24geTQoZSl7dHJ5e3JldHVybiBkZWNvZGVVUkkoZSl9Y2F0Y2godCl7cmV0dXJuIEVpKCExLCdUaGUgVVJMIHBhdGggIicrZSsnIiBjb3VsZCBub3QgYmUgZGVjb2RlZCBiZWNhdXNlIGl0IGlzIGlzIGEgbWFsZm9ybWVkIFVSTCBzZWdtZW50LiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGJhZCBwZXJjZW50ICcrKCJlbmNvZGluZyAoIit0KyIpLiIpKSxlfX1mdW5jdGlvbiB4NChlLHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKG4pe3JldHVybiBFaSghMSwnVGhlIHZhbHVlIGZvciB0aGUgVVJMIHBhcmFtICInK3QrJyIgd2lsbCBub3QgYmUgZGVjb2RlZCBiZWNhdXNlJysoJyB0aGUgc3RyaW5nICInK2UrJyIgaXMgYSBtYWxmb3JtZWQgVVJMIHNlZ21lbnQuIFRoaXMgaXMgcHJvYmFibHknKSsoIiBkdWUgdG8gYSBiYWQgcGVyY2VudCBlbmNvZGluZyAoIituKyIpLiIpKSxlfX1mdW5jdGlvbiBKYShlLHQpe2lmKHQ9PT0iLyIpcmV0dXJuIGU7aWYoIWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHQudG9Mb3dlckNhc2UoKSkpcmV0dXJuIG51bGw7bGV0IG49dC5lbmRzV2l0aCgiLyIpP3QubGVuZ3RoLTE6dC5sZW5ndGgscj1lLmNoYXJBdChuKTtyZXR1cm4gciYmciE9PSIvIj9udWxsOmUuc2xpY2Uobil8fCIvIn1mdW5jdGlvbiB3NChlLHQpe3Q9PT12b2lkIDAmJih0PSIvIik7bGV0e3BhdGhuYW1lOm4sc2VhcmNoOnI9IiIsaGFzaDpvPSIifT10eXBlb2YgZT09InN0cmluZyI/b28oZSk6ZTtyZXR1cm57cGF0aG5hbWU6bj9uLnN0YXJ0c1dpdGgoIi8iKT9uOl80KG4sdCk6dCxzZWFyY2g6RTQociksaGFzaDpDNChvKX19ZnVuY3Rpb24gXzQoZSx0KXtsZXQgbj10LnJlcGxhY2UoL1wvKyQvLCIiKS5zcGxpdCgiLyIpO3JldHVybiBlLnNwbGl0KCIvIikuZm9yRWFjaChvPT57bz09PSIuLiI/bi5sZW5ndGg+MSYmbi5wb3AoKTpvIT09Ii4iJiZuLnB1c2gobyl9KSxuLmxlbmd0aD4xP24uam9pbigiLyIpOiIvIn1mdW5jdGlvbiBXZihlLHQsbixyKXtyZXR1cm4iQ2Fubm90IGluY2x1ZGUgYSAnIitlKyInIGNoYXJhY3RlciBpbiBhIG1hbnVhbGx5IHNwZWNpZmllZCAiKygiYHRvLiIrdCsiYCBmaWVsZCBbIitKU09OLnN0cmluZ2lmeShyKSsiXS4gIFBsZWFzZSBzZXBhcmF0ZSBpdCBvdXQgdG8gdGhlICIpKygiYHRvLiIrbisiYCBmaWVsZC4gQWx0ZXJuYXRpdmVseSB5b3UgbWF5IHByb3ZpZGUgdGhlIGZ1bGwgcGF0aCBhcyAiKSsnYSBzdHJpbmcgaW4gPExpbmsgdG89Ii4uLiI+IGFuZCB0aGUgcm91dGVyIHdpbGwgcGFyc2UgaXQgZm9yIHlvdS4nfWZ1bmN0aW9uIGhDKGUpe3JldHVybiBlLmZpbHRlcigodCxuKT0+bj09PTB8fHQucm91dGUucGF0aCYmdC5yb3V0ZS5wYXRoLmxlbmd0aD4wKX1mdW5jdGlvbiBwQyhlKXtyZXR1cm4gaEMoZSkubWFwKCh0LG4pPT5uPT09ZS5sZW5ndGgtMT90LnBhdGhuYW1lOnQucGF0aG5hbWVCYXNlKX1mdW5jdGlvbiBnQyhlLHQsbixyKXtyPT09dm9pZCAwJiYocj0hMSk7bGV0IG87dHlwZW9mIGU9PSJzdHJpbmciP289b28oZSk6KG89YXQoe30sZSksRWUoIW8ucGF0aG5hbWV8fCFvLnBhdGhuYW1lLmluY2x1ZGVzKCI/IiksV2YoIj8iLCJwYXRobmFtZSIsInNlYXJjaCIsbykpLEVlKCFvLnBhdGhuYW1lfHwhby5wYXRobmFtZS5pbmNsdWRlcygiIyIpLFdmKCIjIiwicGF0aG5hbWUiLCJoYXNoIixvKSksRWUoIW8uc2VhcmNofHwhby5zZWFyY2guaW5jbHVkZXMoIiMiKSxXZigiIyIsInNlYXJjaCIsImhhc2giLG8pKSk7bGV0IGk9ZT09PSIifHxvLnBhdGhuYW1lPT09IiIsbD1pPyIvIjpvLnBhdGhuYW1lLHM7aWYobD09bnVsbClzPW47ZWxzZSBpZihyKXtsZXQgZD10W3QubGVuZ3RoLTFdLnJlcGxhY2UoL15cLy8sIiIpLnNwbGl0KCIvIik7aWYobC5zdGFydHNXaXRoKCIuLiIpKXtsZXQgZj1sLnNwbGl0KCIvIik7Zm9yKDtmWzBdPT09Ii4uIjspZi5zaGlmdCgpLGQucG9wKCk7by5wYXRobmFtZT1mLmpvaW4oIi8iKX1zPSIvIitkLmpvaW4oIi8iKX1lbHNle2xldCBkPXQubGVuZ3RoLTE7aWYobC5zdGFydHNXaXRoKCIuLiIpKXtsZXQgZj1sLnNwbGl0KCIvIik7Zm9yKDtmWzBdPT09Ii4uIjspZi5zaGlmdCgpLGQtPTE7by5wYXRobmFtZT1mLmpvaW4oIi8iKX1zPWQ+PTA/dFtkXToiLyJ9bGV0IGE9dzQobyxzKSx1PWwmJmwhPT0iLyImJmwuZW5kc1dpdGgoIi8iKSxjPShpfHxsPT09Ii4iKSYmbi5lbmRzV2l0aCgiLyIpO3JldHVybiFhLnBhdGhuYW1lLmVuZHNXaXRoKCIvIikmJih1fHxjKSYmKGEucGF0aG5hbWUrPSIvIiksYX1jb25zdCBBbz1lPT5lLmpvaW4oIi8iKS5yZXBsYWNlKC9cL1wvKy9nLCIvIiksUzQ9ZT0+ZS5yZXBsYWNlKC9cLyskLywiIikucmVwbGFjZSgvXlwvKi8sIi8iKSxFND1lPT4hZXx8ZT09PSI/Ij8iIjplLnN0YXJ0c1dpdGgoIj8iKT9lOiI/IitlLEM0PWU9PiFlfHxlPT09IiMiPyIiOmUuc3RhcnRzV2l0aCgiIyIpP2U6IiMiK2U7Y2xhc3MgV217Y29uc3RydWN0b3IodCxuLHIsbyl7bz09PXZvaWQgMCYmKG89ITEpLHRoaXMuc3RhdHVzPXQsdGhpcy5zdGF0dXNUZXh0PW58fCIiLHRoaXMuaW50ZXJuYWw9byxyIGluc3RhbmNlb2YgRXJyb3I/KHRoaXMuZGF0YT1yLnRvU3RyaW5nKCksdGhpcy5lcnJvcj1yKTp0aGlzLmRhdGE9cn19ZnVuY3Rpb24gbUMoZSl7cmV0dXJuIGUhPW51bGwmJnR5cGVvZiBlLnN0YXR1cz09Im51bWJlciImJnR5cGVvZiBlLnN0YXR1c1RleHQ9PSJzdHJpbmciJiZ0eXBlb2YgZS5pbnRlcm5hbD09ImJvb2xlYW4iJiYiZGF0YSJpbiBlfWNvbnN0IHZDPVsicG9zdCIsInB1dCIsInBhdGNoIiwiZGVsZXRlIl0sJDQ9bmV3IFNldCh2QyksazQ9WyJnZXQiLC4uLnZDXSxiND1uZXcgU2V0KGs0KSxUND1uZXcgU2V0KFszMDEsMzAyLDMwMywzMDcsMzA4XSksTjQ9bmV3IFNldChbMzA3LDMwOF0pLFVmPXtzdGF0ZToiaWRsZSIsbG9jYXRpb246dm9pZCAwLGZvcm1NZXRob2Q6dm9pZCAwLGZvcm1BY3Rpb246dm9pZCAwLGZvcm1FbmNUeXBlOnZvaWQgMCxmb3JtRGF0YTp2b2lkIDAsanNvbjp2b2lkIDAsdGV4dDp2b2lkIDB9LFI0PXtzdGF0ZToiaWRsZSIsZGF0YTp2b2lkIDAsZm9ybU1ldGhvZDp2b2lkIDAsZm9ybUFjdGlvbjp2b2lkIDAsZm9ybUVuY1R5cGU6dm9pZCAwLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMH0seXM9e3N0YXRlOiJ1bmJsb2NrZWQiLHByb2NlZWQ6dm9pZCAwLHJlc2V0OnZvaWQgMCxsb2NhdGlvbjp2b2lkIDB9LHlDPS9eKD86W2Etel1bYS16MC05Ky4tXSo6fFwvXC8pL2ksUDQ9ZT0+KHtoYXNFcnJvckJvdW5kYXJ5OiEhZS5oYXNFcnJvckJvdW5kYXJ5fSkseEM9InJlbWl4LXJvdXRlci10cmFuc2l0aW9ucyI7ZnVuY3Rpb24gTzQoZSl7Y29uc3QgdD1lLndpbmRvdz9lLndpbmRvdzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwLG49dHlwZW9mIHQ8InUiJiZ0eXBlb2YgdC5kb2N1bWVudDwidSImJnR5cGVvZiB0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiLHI9IW47RWUoZS5yb3V0ZXMubGVuZ3RoPjAsIllvdSBtdXN0IHByb3ZpZGUgYSBub24tZW1wdHkgcm91dGVzIGFycmF5IHRvIGNyZWF0ZVJvdXRlciIpO2xldCBvO2lmKGUubWFwUm91dGVQcm9wZXJ0aWVzKW89ZS5tYXBSb3V0ZVByb3BlcnRpZXM7ZWxzZSBpZihlLmRldGVjdEVycm9yQm91bmRhcnkpe2xldCBQPWUuZGV0ZWN0RXJyb3JCb3VuZGFyeTtvPUw9Pih7aGFzRXJyb3JCb3VuZGFyeTpQKEwpfSl9ZWxzZSBvPVA0O2xldCBpPXt9LGw9anAoZS5yb3V0ZXMsbyx2b2lkIDAsaSkscyxhPWUuYmFzZW5hbWV8fCIvIix1PWF0KHt2N19mZXRjaGVyUGVyc2lzdDohMSx2N19ub3JtYWxpemVGb3JtTWV0aG9kOiExLHY3X3ByZXBlbmRCYXNlbmFtZTohMX0sZS5mdXR1cmUpLGM9bnVsbCxkPW5ldyBTZXQsZj1udWxsLGg9bnVsbCxtPW51bGwsZz1lLmh5ZHJhdGlvbkRhdGEhPW51bGwsXz1jbChsLGUuaGlzdG9yeS5sb2NhdGlvbixhKSx2PW51bGw7aWYoXz09bnVsbCl7bGV0IFA9TG4oNDA0LHtwYXRobmFtZTplLmhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWV9KSx7bWF0Y2hlczpMLHJvdXRlOnp9PW8xKGwpO189TCx2PXtbei5pZF06UH19bGV0IHk9IV8uc29tZShQPT5QLnJvdXRlLmxhenkpJiYoIV8uc29tZShQPT5QLnJvdXRlLmxvYWRlcil8fGUuaHlkcmF0aW9uRGF0YSE9bnVsbCkseCxTPXtoaXN0b3J5QWN0aW9uOmUuaGlzdG9yeS5hY3Rpb24sbG9jYXRpb246ZS5oaXN0b3J5LmxvY2F0aW9uLG1hdGNoZXM6Xyxpbml0aWFsaXplZDp5LG5hdmlnYXRpb246VWYscmVzdG9yZVNjcm9sbFBvc2l0aW9uOmUuaHlkcmF0aW9uRGF0YSE9bnVsbD8hMTpudWxsLHByZXZlbnRTY3JvbGxSZXNldDohMSxyZXZhbGlkYXRpb246ImlkbGUiLGxvYWRlckRhdGE6ZS5oeWRyYXRpb25EYXRhJiZlLmh5ZHJhdGlvbkRhdGEubG9hZGVyRGF0YXx8e30sYWN0aW9uRGF0YTplLmh5ZHJhdGlvbkRhdGEmJmUuaHlkcmF0aW9uRGF0YS5hY3Rpb25EYXRhfHxudWxsLGVycm9yczplLmh5ZHJhdGlvbkRhdGEmJmUuaHlkcmF0aW9uRGF0YS5lcnJvcnN8fHYsZmV0Y2hlcnM6bmV3IE1hcCxibG9ja2VyczpuZXcgTWFwfSxrPWR0LlBvcCxUPSExLGIsTj0hMSxEPW5ldyBNYXAsTT1udWxsLGo9ITEsQj0hMSxyZT1bXSxWPVtdLFk9bmV3IE1hcCxDPTAsJD0tMSxFPW5ldyBNYXAsTz1uZXcgU2V0LFI9bmV3IE1hcCxGPW5ldyBNYXAsSD1uZXcgU2V0LGFlPW5ldyBNYXAsb2U9bmV3IE1hcCwkZT0hMTtmdW5jdGlvbiBfZSgpe2lmKGM9ZS5oaXN0b3J5Lmxpc3RlbihQPT57bGV0e2FjdGlvbjpMLGxvY2F0aW9uOnosZGVsdGE6R309UDtpZigkZSl7JGU9ITE7cmV0dXJufUVpKG9lLnNpemU9PT0wfHxHIT1udWxsLCJZb3UgYXJlIHRyeWluZyB0byB1c2UgYSBibG9ja2VyIG9uIGEgUE9QIG5hdmlnYXRpb24gdG8gYSBsb2NhdGlvbiB0aGF0IHdhcyBub3QgY3JlYXRlZCBieSBAcmVtaXgtcnVuL3JvdXRlci4gVGhpcyB3aWxsIGZhaWwgc2lsZW50bHkgaW4gcHJvZHVjdGlvbi4gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBhcmUgbmF2aWdhdGluZyBvdXRzaWRlIHRoZSByb3V0ZXIgdmlhIGB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGVgL2B3aW5kb3cubG9jYXRpb24uaGFzaGAgaW5zdGVhZCBvZiB1c2luZyByb3V0ZXIgbmF2aWdhdGlvbiBBUElzLiAgVGhpcyBjYW4gYWxzbyBoYXBwZW4gaWYgeW91IGFyZSB1c2luZyBjcmVhdGVIYXNoUm91dGVyIGFuZCB0aGUgdXNlciBtYW51YWxseSBjaGFuZ2VzIHRoZSBVUkwuIik7bGV0IG5lPVptKHtjdXJyZW50TG9jYXRpb246Uy5sb2NhdGlvbixuZXh0TG9jYXRpb246eixoaXN0b3J5QWN0aW9uOkx9KTtpZihuZSYmRyE9bnVsbCl7JGU9ITAsZS5oaXN0b3J5LmdvKEcqLTEpLFphKG5lLHtzdGF0ZToiYmxvY2tlZCIsbG9jYXRpb246eixwcm9jZWVkKCl7WmEobmUse3N0YXRlOiJwcm9jZWVkaW5nIixwcm9jZWVkOnZvaWQgMCxyZXNldDp2b2lkIDAsbG9jYXRpb246en0pLGUuaGlzdG9yeS5nbyhHKX0scmVzZXQoKXtsZXQgdmU9bmV3IE1hcChTLmJsb2NrZXJzKTt2ZS5zZXQobmUseXMpLHllKHtibG9ja2Vyczp2ZX0pfX0pO3JldHVybn1yZXR1cm4gV2UoTCx6KX0pLG4pe1U0KHQsRCk7bGV0IFA9KCk9Pkg0KHQsRCk7dC5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsUCksTT0oKT0+dC5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsUCl9cmV0dXJuIFMuaW5pdGlhbGl6ZWR8fFdlKGR0LlBvcCxTLmxvY2F0aW9uKSx4fWZ1bmN0aW9uIFEoKXtjJiZjKCksTSYmTSgpLGQuY2xlYXIoKSxiJiZiLmFib3J0KCksUy5mZXRjaGVycy5mb3JFYWNoKChQLEwpPT54bihMKSksUy5ibG9ja2Vycy5mb3JFYWNoKChQLEwpPT5KbShMKSl9ZnVuY3Rpb24gTmUoUCl7cmV0dXJuIGQuYWRkKFApLCgpPT5kLmRlbGV0ZShQKX1mdW5jdGlvbiB5ZShQLEwpe0w9PT12b2lkIDAmJihMPXt9KSxTPWF0KHt9LFMsUCk7bGV0IHo9W10sRz1bXTt1LnY3X2ZldGNoZXJQZXJzaXN0JiZTLmZldGNoZXJzLmZvckVhY2goKG5lLHZlKT0+e25lLnN0YXRlPT09ImlkbGUiJiYoSC5oYXModmUpP0cucHVzaCh2ZSk6ei5wdXNoKHZlKSl9KSxbLi4uZF0uZm9yRWFjaChuZT0+bmUoUyx7ZGVsZXRlZEZldGNoZXJzOkcsdW5zdGFibGVfdmlld1RyYW5zaXRpb25PcHRzOkwudmlld1RyYW5zaXRpb25PcHRzLHVuc3RhYmxlX2ZsdXNoU3luYzpMLmZsdXNoU3luYz09PSEwfSkpLHUudjdfZmV0Y2hlclBlcnNpc3QmJih6LmZvckVhY2gobmU9PlMuZmV0Y2hlcnMuZGVsZXRlKG5lKSksRy5mb3JFYWNoKG5lPT54bihuZSkpKX1mdW5jdGlvbiBTZShQLEwseil7dmFyIEcsbmU7bGV0e2ZsdXNoU3luYzp2ZX09ej09PXZvaWQgMD97fTp6LGNlPVMuYWN0aW9uRGF0YSE9bnVsbCYmUy5uYXZpZ2F0aW9uLmZvcm1NZXRob2QhPW51bGwmJnRyKFMubmF2aWdhdGlvbi5mb3JtTWV0aG9kKSYmUy5uYXZpZ2F0aW9uLnN0YXRlPT09ImxvYWRpbmciJiYoKEc9UC5zdGF0ZSk9PW51bGw/dm9pZCAwOkcuX2lzUmVkaXJlY3QpIT09ITAsdWU7TC5hY3Rpb25EYXRhP09iamVjdC5rZXlzKEwuYWN0aW9uRGF0YSkubGVuZ3RoPjA/dWU9TC5hY3Rpb25EYXRhOnVlPW51bGw6Y2U/dWU9Uy5hY3Rpb25EYXRhOnVlPW51bGw7bGV0IGxlPUwubG9hZGVyRGF0YT9yMShTLmxvYWRlckRhdGEsTC5sb2FkZXJEYXRhLEwubWF0Y2hlc3x8W10sTC5lcnJvcnMpOlMubG9hZGVyRGF0YSxrZT1TLmJsb2NrZXJzO2tlLnNpemU+MCYmKGtlPW5ldyBNYXAoa2UpLGtlLmZvckVhY2goKGplLGV0KT0+a2Uuc2V0KGV0LHlzKSkpO2xldCBNdD1UPT09ITB8fFMubmF2aWdhdGlvbi5mb3JtTWV0aG9kIT1udWxsJiZ0cihTLm5hdmlnYXRpb24uZm9ybU1ldGhvZCkmJigobmU9UC5zdGF0ZSk9PW51bGw/dm9pZCAwOm5lLl9pc1JlZGlyZWN0KSE9PSEwO3MmJihsPXMscz12b2lkIDApLGp8fGs9PT1kdC5Qb3B8fChrPT09ZHQuUHVzaD9lLmhpc3RvcnkucHVzaChQLFAuc3RhdGUpOms9PT1kdC5SZXBsYWNlJiZlLmhpc3RvcnkucmVwbGFjZShQLFAuc3RhdGUpKTtsZXQgeGU7aWYoaz09PWR0LlBvcCl7bGV0IGplPUQuZ2V0KFMubG9jYXRpb24ucGF0aG5hbWUpO2plJiZqZS5oYXMoUC5wYXRobmFtZSk/eGU9e2N1cnJlbnRMb2NhdGlvbjpTLmxvY2F0aW9uLG5leHRMb2NhdGlvbjpQfTpELmhhcyhQLnBhdGhuYW1lKSYmKHhlPXtjdXJyZW50TG9jYXRpb246UCxuZXh0TG9jYXRpb246Uy5sb2NhdGlvbn0pfWVsc2UgaWYoTil7bGV0IGplPUQuZ2V0KFMubG9jYXRpb24ucGF0aG5hbWUpO2plP2plLmFkZChQLnBhdGhuYW1lKTooamU9bmV3IFNldChbUC5wYXRobmFtZV0pLEQuc2V0KFMubG9jYXRpb24ucGF0aG5hbWUsamUpKSx4ZT17Y3VycmVudExvY2F0aW9uOlMubG9jYXRpb24sbmV4dExvY2F0aW9uOlB9fXllKGF0KHt9LEwse2FjdGlvbkRhdGE6dWUsbG9hZGVyRGF0YTpsZSxoaXN0b3J5QWN0aW9uOmssbG9jYXRpb246UCxpbml0aWFsaXplZDohMCxuYXZpZ2F0aW9uOlVmLHJldmFsaWRhdGlvbjoiaWRsZSIscmVzdG9yZVNjcm9sbFBvc2l0aW9uOmV2KFAsTC5tYXRjaGVzfHxTLm1hdGNoZXMpLHByZXZlbnRTY3JvbGxSZXNldDpNdCxibG9ja2VyczprZX0pLHt2aWV3VHJhbnNpdGlvbk9wdHM6eGUsZmx1c2hTeW5jOnZlPT09ITB9KSxrPWR0LlBvcCxUPSExLE49ITEsaj0hMSxCPSExLHJlPVtdLFY9W119YXN5bmMgZnVuY3Rpb24gcGUoUCxMKXtpZih0eXBlb2YgUD09Im51bWJlciIpe2UuaGlzdG9yeS5nbyhQKTtyZXR1cm59bGV0IHo9enAoUy5sb2NhdGlvbixTLm1hdGNoZXMsYSx1LnY3X3ByZXBlbmRCYXNlbmFtZSxQLEw9PW51bGw/dm9pZCAwOkwuZnJvbVJvdXRlSWQsTD09bnVsbD92b2lkIDA6TC5yZWxhdGl2ZSkse3BhdGg6RyxzdWJtaXNzaW9uOm5lLGVycm9yOnZlfT1KMCh1LnY3X25vcm1hbGl6ZUZvcm1NZXRob2QsITEseixMKSxjZT1TLmxvY2F0aW9uLHVlPU9hKFMubG9jYXRpb24sRyxMJiZMLnN0YXRlKTt1ZT1hdCh7fSx1ZSxlLmhpc3RvcnkuZW5jb2RlTG9jYXRpb24odWUpKTtsZXQgbGU9TCYmTC5yZXBsYWNlIT1udWxsP0wucmVwbGFjZTp2b2lkIDAsa2U9ZHQuUHVzaDtsZT09PSEwP2tlPWR0LlJlcGxhY2U6bGU9PT0hMXx8bmUhPW51bGwmJnRyKG5lLmZvcm1NZXRob2QpJiZuZS5mb3JtQWN0aW9uPT09Uy5sb2NhdGlvbi5wYXRobmFtZStTLmxvY2F0aW9uLnNlYXJjaCYmKGtlPWR0LlJlcGxhY2UpO2xldCBNdD1MJiYicHJldmVudFNjcm9sbFJlc2V0ImluIEw/TC5wcmV2ZW50U2Nyb2xsUmVzZXQ9PT0hMDp2b2lkIDAseGU9KEwmJkwudW5zdGFibGVfZmx1c2hTeW5jKT09PSEwLGplPVptKHtjdXJyZW50TG9jYXRpb246Y2UsbmV4dExvY2F0aW9uOnVlLGhpc3RvcnlBY3Rpb246a2V9KTtpZihqZSl7WmEoamUse3N0YXRlOiJibG9ja2VkIixsb2NhdGlvbjp1ZSxwcm9jZWVkKCl7WmEoamUse3N0YXRlOiJwcm9jZWVkaW5nIixwcm9jZWVkOnZvaWQgMCxyZXNldDp2b2lkIDAsbG9jYXRpb246dWV9KSxwZShQLEwpfSxyZXNldCgpe2xldCBldD1uZXcgTWFwKFMuYmxvY2tlcnMpO2V0LnNldChqZSx5cykseWUoe2Jsb2NrZXJzOmV0fSl9fSk7cmV0dXJufXJldHVybiBhd2FpdCBXZShrZSx1ZSx7c3VibWlzc2lvbjpuZSxwZW5kaW5nRXJyb3I6dmUscHJldmVudFNjcm9sbFJlc2V0Ok10LHJlcGxhY2U6TCYmTC5yZXBsYWNlLGVuYWJsZVZpZXdUcmFuc2l0aW9uOkwmJkwudW5zdGFibGVfdmlld1RyYW5zaXRpb24sZmx1c2hTeW5jOnhlfSl9ZnVuY3Rpb24gVGUoKXtpZihkbigpLHllKHtyZXZhbGlkYXRpb246ImxvYWRpbmcifSksUy5uYXZpZ2F0aW9uLnN0YXRlIT09InN1Ym1pdHRpbmciKXtpZihTLm5hdmlnYXRpb24uc3RhdGU9PT0iaWRsZSIpe1dlKFMuaGlzdG9yeUFjdGlvbixTLmxvY2F0aW9uLHtzdGFydFVuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb246ITB9KTtyZXR1cm59V2Uoa3x8Uy5oaXN0b3J5QWN0aW9uLFMubmF2aWdhdGlvbi5sb2NhdGlvbix7b3ZlcnJpZGVOYXZpZ2F0aW9uOlMubmF2aWdhdGlvbn0pfX1hc3luYyBmdW5jdGlvbiBXZShQLEwseil7YiYmYi5hYm9ydCgpLGI9bnVsbCxrPVAsaj0oeiYmei5zdGFydFVuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb24pPT09ITAsUUMoUy5sb2NhdGlvbixTLm1hdGNoZXMpLFQ9KHomJnoucHJldmVudFNjcm9sbFJlc2V0KT09PSEwLE49KHomJnouZW5hYmxlVmlld1RyYW5zaXRpb24pPT09ITA7bGV0IEc9c3x8bCxuZT16JiZ6Lm92ZXJyaWRlTmF2aWdhdGlvbix2ZT1jbChHLEwsYSksY2U9KHomJnouZmx1c2hTeW5jKT09PSEwO2lmKCF2ZSl7bGV0IGV0PUxuKDQwNCx7cGF0aG5hbWU6TC5wYXRobmFtZX0pLHttYXRjaGVzOlF0LHJvdXRlOmhyfT1vMShHKTtLZCgpLFNlKEwse21hdGNoZXM6UXQsbG9hZGVyRGF0YTp7fSxlcnJvcnM6e1toci5pZF06ZXR9fSx7Zmx1c2hTeW5jOmNlfSk7cmV0dXJufWlmKFMuaW5pdGlhbGl6ZWQmJiFCJiZJNChTLmxvY2F0aW9uLEwpJiYhKHomJnouc3VibWlzc2lvbiYmdHIoei5zdWJtaXNzaW9uLmZvcm1NZXRob2QpKSl7U2UoTCx7bWF0Y2hlczp2ZX0se2ZsdXNoU3luYzpjZX0pO3JldHVybn1iPW5ldyBBYm9ydENvbnRyb2xsZXI7bGV0IHVlPXdzKGUuaGlzdG9yeSxMLGIuc2lnbmFsLHomJnouc3VibWlzc2lvbiksbGUsa2U7aWYoeiYmei5wZW5kaW5nRXJyb3Ipa2U9e1tacyh2ZSkucm91dGUuaWRdOnoucGVuZGluZ0Vycm9yfTtlbHNlIGlmKHomJnouc3VibWlzc2lvbiYmdHIoei5zdWJtaXNzaW9uLmZvcm1NZXRob2QpKXtsZXQgZXQ9YXdhaXQgQXQodWUsTCx6LnN1Ym1pc3Npb24sdmUse3JlcGxhY2U6ei5yZXBsYWNlLGZsdXNoU3luYzpjZX0pO2lmKGV0LnNob3J0Q2lyY3VpdGVkKXJldHVybjtsZT1ldC5wZW5kaW5nQWN0aW9uRGF0YSxrZT1ldC5wZW5kaW5nQWN0aW9uRXJyb3IsbmU9SGYoTCx6LnN1Ym1pc3Npb24pLGNlPSExLHVlPW5ldyBSZXF1ZXN0KHVlLnVybCx7c2lnbmFsOnVlLnNpZ25hbH0pfWxldHtzaG9ydENpcmN1aXRlZDpNdCxsb2FkZXJEYXRhOnhlLGVycm9yczpqZX09YXdhaXQgY24odWUsTCx2ZSxuZSx6JiZ6LnN1Ym1pc3Npb24seiYmei5mZXRjaGVyU3VibWlzc2lvbix6JiZ6LnJlcGxhY2UsY2UsbGUsa2UpO010fHwoYj1udWxsLFNlKEwsYXQoe21hdGNoZXM6dmV9LGxlP3thY3Rpb25EYXRhOmxlfTp7fSx7bG9hZGVyRGF0YTp4ZSxlcnJvcnM6amV9KSkpfWFzeW5jIGZ1bmN0aW9uIEF0KFAsTCx6LEcsbmUpe25lPT09dm9pZCAwJiYobmU9e30pLGRuKCk7bGV0IHZlPUI0KEwseik7eWUoe25hdmlnYXRpb246dmV9LHtmbHVzaFN5bmM6bmUuZmx1c2hTeW5jPT09ITB9KTtsZXQgY2UsdWU9QnAoRyxMKTtpZighdWUucm91dGUuYWN0aW9uJiYhdWUucm91dGUubGF6eSljZT17dHlwZTpmdC5lcnJvcixlcnJvcjpMbig0MDUse21ldGhvZDpQLm1ldGhvZCxwYXRobmFtZTpMLnBhdGhuYW1lLHJvdXRlSWQ6dWUucm91dGUuaWR9KX07ZWxzZSBpZihjZT1hd2FpdCB4cygiYWN0aW9uIixQLHVlLEcsaSxvLGEpLFAuc2lnbmFsLmFib3J0ZWQpcmV0dXJue3Nob3J0Q2lyY3VpdGVkOiEwfTtpZihfbChjZSkpe2xldCBsZTtyZXR1cm4gbmUmJm5lLnJlcGxhY2UhPW51bGw/bGU9bmUucmVwbGFjZTpsZT1jZS5sb2NhdGlvbj09PVMubG9jYXRpb24ucGF0aG5hbWUrUy5sb2NhdGlvbi5zZWFyY2gsYXdhaXQgcWUoUyxjZSx7c3VibWlzc2lvbjp6LHJlcGxhY2U6bGV9KSx7c2hvcnRDaXJjdWl0ZWQ6ITB9fWlmKHFzKGNlKSl7bGV0IGxlPVpzKEcsdWUucm91dGUuaWQpO3JldHVybihuZSYmbmUucmVwbGFjZSkhPT0hMCYmKGs9ZHQuUHVzaCkse3BlbmRpbmdBY3Rpb25EYXRhOnt9LHBlbmRpbmdBY3Rpb25FcnJvcjp7W2xlLnJvdXRlLmlkXTpjZS5lcnJvcn19fWlmKHNpKGNlKSl0aHJvdyBMbig0MDAse3R5cGU6ImRlZmVyLWFjdGlvbiJ9KTtyZXR1cm57cGVuZGluZ0FjdGlvbkRhdGE6e1t1ZS5yb3V0ZS5pZF06Y2UuZGF0YX19fWFzeW5jIGZ1bmN0aW9uIGNuKFAsTCx6LEcsbmUsdmUsY2UsdWUsbGUsa2Upe2xldCBNdD1HfHxIZihMLG5lKSx4ZT1uZXx8dmV8fHMxKE10KSxqZT1zfHxsLFtldCxRdF09WjAoZS5oaXN0b3J5LFMseix4ZSxMLEIscmUsVixILFIsTyxqZSxhLGxlLGtlKTtpZihLZCh6ZT0+ISh6JiZ6LnNvbWUoTW49Pk1uLnJvdXRlLmlkPT09emUpKXx8ZXQmJmV0LnNvbWUoTW49Pk1uLnJvdXRlLmlkPT09emUpKSwkPSsrQyxldC5sZW5ndGg9PT0wJiZRdC5sZW5ndGg9PT0wKXtsZXQgemU9WG8oKTtyZXR1cm4gU2UoTCxhdCh7bWF0Y2hlczp6LGxvYWRlckRhdGE6e30sZXJyb3JzOmtlfHxudWxsfSxsZT97YWN0aW9uRGF0YTpsZX06e30semU/e2ZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9Ont9KSx7Zmx1c2hTeW5jOnVlfSkse3Nob3J0Q2lyY3VpdGVkOiEwfX1pZighail7UXQuZm9yRWFjaChNbj0+e2xldCBndD1TLmZldGNoZXJzLmdldChNbi5rZXkpLFFvPV9zKHZvaWQgMCxndD9ndC5kYXRhOnZvaWQgMCk7Uy5mZXRjaGVycy5zZXQoTW4ua2V5LFFvKX0pO2xldCB6ZT1sZXx8Uy5hY3Rpb25EYXRhO3llKGF0KHtuYXZpZ2F0aW9uOk10fSx6ZT9PYmplY3Qua2V5cyh6ZSkubGVuZ3RoPT09MD97YWN0aW9uRGF0YTpudWxsfTp7YWN0aW9uRGF0YTp6ZX06e30sUXQubGVuZ3RoPjA/e2ZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9Ont9KSx7Zmx1c2hTeW5jOnVlfSl9UXQuZm9yRWFjaCh6ZT0+e1kuaGFzKHplLmtleSkmJmx0KHplLmtleSksemUuY29udHJvbGxlciYmWS5zZXQoemUua2V5LHplLmNvbnRyb2xsZXIpfSk7bGV0IGhyPSgpPT5RdC5mb3JFYWNoKHplPT5sdCh6ZS5rZXkpKTtiJiZiLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsaHIpO2xldHtyZXN1bHRzOmlzLGxvYWRlclJlc3VsdHM6R2QsZmV0Y2hlclJlc3VsdHM6RGl9PWF3YWl0IFl0KFMubWF0Y2hlcyx6LGV0LFF0LFApO2lmKFAuc2lnbmFsLmFib3J0ZWQpcmV0dXJue3Nob3J0Q2lyY3VpdGVkOiEwfTtiJiZiLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsaHIpLFF0LmZvckVhY2goemU9PlkuZGVsZXRlKHplLmtleSkpO2xldCBZbj1pMShpcyk7aWYoWW4pe2lmKFluLmlkeD49ZXQubGVuZ3RoKXtsZXQgemU9UXRbWW4uaWR4LWV0Lmxlbmd0aF0ua2V5O08uYWRkKHplKX1yZXR1cm4gYXdhaXQgcWUoUyxZbi5yZXN1bHQse3JlcGxhY2U6Y2V9KSx7c2hvcnRDaXJjdWl0ZWQ6ITB9fWxldHtsb2FkZXJEYXRhOnFhLGVycm9yczpZZH09bjEoUyx6LGV0LEdkLGtlLFF0LERpLGFlKTthZS5mb3JFYWNoKCh6ZSxNbik9Pnt6ZS5zdWJzY3JpYmUoZ3Q9PnsoZ3R8fHplLmRvbmUpJiZhZS5kZWxldGUoTW4pfSl9KTtsZXQgWGQ9WG8oKSxRZD1vcygkKSxJaT1YZHx8UWR8fFF0Lmxlbmd0aD4wO3JldHVybiBhdCh7bG9hZGVyRGF0YTpxYSxlcnJvcnM6WWR9LElpP3tmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfTp7fSl9ZnVuY3Rpb24gR24oUCxMLHosRyl7aWYocil0aHJvdyBuZXcgRXJyb3IoInJvdXRlci5mZXRjaCgpIHdhcyBjYWxsZWQgZHVyaW5nIHRoZSBzZXJ2ZXIgcmVuZGVyLCBidXQgaXQgc2hvdWxkbid0IGJlLiBZb3UgYXJlIGxpa2VseSBjYWxsaW5nIGEgdXNlRmV0Y2hlcigpIG1ldGhvZCBpbiB0aGUgYm9keSBvZiB5b3VyIGNvbXBvbmVudC4gVHJ5IG1vdmluZyBpdCB0byBhIHVzZUVmZmVjdCBvciBhIGNhbGxiYWNrLiIpO1kuaGFzKFApJiZsdChQKTtsZXQgbmU9KEcmJkcudW5zdGFibGVfZmx1c2hTeW5jKT09PSEwLHZlPXN8fGwsY2U9enAoUy5sb2NhdGlvbixTLm1hdGNoZXMsYSx1LnY3X3ByZXBlbmRCYXNlbmFtZSx6LEwsRz09bnVsbD92b2lkIDA6Ry5yZWxhdGl2ZSksdWU9Y2wodmUsY2UsYSk7aWYoIXVlKXtFdChQLEwsTG4oNDA0LHtwYXRobmFtZTpjZX0pLHtmbHVzaFN5bmM6bmV9KTtyZXR1cm59bGV0e3BhdGg6bGUsc3VibWlzc2lvbjprZSxlcnJvcjpNdH09SjAodS52N19ub3JtYWxpemVGb3JtTWV0aG9kLCEwLGNlLEcpO2lmKE10KXtFdChQLEwsTXQse2ZsdXNoU3luYzpuZX0pO3JldHVybn1sZXQgeGU9QnAodWUsbGUpO2lmKFQ9KEcmJkcucHJldmVudFNjcm9sbFJlc2V0KT09PSEwLGtlJiZ0cihrZS5mb3JtTWV0aG9kKSl7UmUoUCxMLGxlLHhlLHVlLG5lLGtlKTtyZXR1cm59Ui5zZXQoUCx7cm91dGVJZDpMLHBhdGg6bGV9KSx5dChQLEwsbGUseGUsdWUsbmUsa2UpfWFzeW5jIGZ1bmN0aW9uIFJlKFAsTCx6LEcsbmUsdmUsY2Upe2lmKGRuKCksUi5kZWxldGUoUCksIUcucm91dGUuYWN0aW9uJiYhRy5yb3V0ZS5sYXp5KXtsZXQgZ3Q9TG4oNDA1LHttZXRob2Q6Y2UuZm9ybU1ldGhvZCxwYXRobmFtZTp6LHJvdXRlSWQ6TH0pO0V0KFAsTCxndCx7Zmx1c2hTeW5jOnZlfSk7cmV0dXJufWxldCB1ZT1TLmZldGNoZXJzLmdldChQKTtjdChQLFc0KGNlLHVlKSx7Zmx1c2hTeW5jOnZlfSk7bGV0IGxlPW5ldyBBYm9ydENvbnRyb2xsZXIsa2U9d3MoZS5oaXN0b3J5LHosbGUuc2lnbmFsLGNlKTtZLnNldChQLGxlKTtsZXQgTXQ9Qyx4ZT1hd2FpdCB4cygiYWN0aW9uIixrZSxHLG5lLGksbyxhKTtpZihrZS5zaWduYWwuYWJvcnRlZCl7WS5nZXQoUCk9PT1sZSYmWS5kZWxldGUoUCk7cmV0dXJufWlmKEguaGFzKFApKXtjdChQLGZvKHZvaWQgMCkpO3JldHVybn1pZihfbCh4ZSkpaWYoWS5kZWxldGUoUCksJD5NdCl7Y3QoUCxmbyh2b2lkIDApKTtyZXR1cm59ZWxzZSByZXR1cm4gTy5hZGQoUCksY3QoUCxfcyhjZSkpLHFlKFMseGUse2ZldGNoZXJTdWJtaXNzaW9uOmNlfSk7aWYocXMoeGUpKXtFdChQLEwseGUuZXJyb3IpO3JldHVybn1pZihzaSh4ZSkpdGhyb3cgTG4oNDAwLHt0eXBlOiJkZWZlci1hY3Rpb24ifSk7bGV0IGplPVMubmF2aWdhdGlvbi5sb2NhdGlvbnx8Uy5sb2NhdGlvbixldD13cyhlLmhpc3RvcnksamUsbGUuc2lnbmFsKSxRdD1zfHxsLGhyPVMubmF2aWdhdGlvbi5zdGF0ZSE9PSJpZGxlIj9jbChRdCxTLm5hdmlnYXRpb24ubG9jYXRpb24sYSk6Uy5tYXRjaGVzO0VlKGhyLCJEaWRuJ3QgZmluZCBhbnkgbWF0Y2hlcyBhZnRlciBmZXRjaGVyIGFjdGlvbiIpO2xldCBpcz0rK0M7RS5zZXQoUCxpcyk7bGV0IEdkPV9zKGNlLHhlLmRhdGEpO1MuZmV0Y2hlcnMuc2V0KFAsR2QpO2xldFtEaSxZbl09WjAoZS5oaXN0b3J5LFMsaHIsY2UsamUsQixyZSxWLEgsUixPLFF0LGEse1tHLnJvdXRlLmlkXTp4ZS5kYXRhfSx2b2lkIDApO1luLmZpbHRlcihndD0+Z3Qua2V5IT09UCkuZm9yRWFjaChndD0+e2xldCBRbz1ndC5rZXksdHY9Uy5mZXRjaGVycy5nZXQoUW8pLFpDPV9zKHZvaWQgMCx0dj90di5kYXRhOnZvaWQgMCk7Uy5mZXRjaGVycy5zZXQoUW8sWkMpLFkuaGFzKFFvKSYmbHQoUW8pLGd0LmNvbnRyb2xsZXImJlkuc2V0KFFvLGd0LmNvbnRyb2xsZXIpfSkseWUoe2ZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9KTtsZXQgcWE9KCk9PlluLmZvckVhY2goZ3Q9Pmx0KGd0LmtleSkpO2xlLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscWEpO2xldHtyZXN1bHRzOllkLGxvYWRlclJlc3VsdHM6WGQsZmV0Y2hlclJlc3VsdHM6UWR9PWF3YWl0IFl0KFMubWF0Y2hlcyxocixEaSxZbixldCk7aWYobGUuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2xlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscWEpLEUuZGVsZXRlKFApLFkuZGVsZXRlKFApLFluLmZvckVhY2goZ3Q9PlkuZGVsZXRlKGd0LmtleSkpO2xldCBJaT1pMShZZCk7aWYoSWkpe2lmKElpLmlkeD49RGkubGVuZ3RoKXtsZXQgZ3Q9WW5bSWkuaWR4LURpLmxlbmd0aF0ua2V5O08uYWRkKGd0KX1yZXR1cm4gcWUoUyxJaS5yZXN1bHQpfWxldHtsb2FkZXJEYXRhOnplLGVycm9yczpNbn09bjEoUyxTLm1hdGNoZXMsRGksWGQsdm9pZCAwLFluLFFkLGFlKTtpZihTLmZldGNoZXJzLmhhcyhQKSl7bGV0IGd0PWZvKHhlLmRhdGEpO1MuZmV0Y2hlcnMuc2V0KFAsZ3QpfW9zKGlzKSxTLm5hdmlnYXRpb24uc3RhdGU9PT0ibG9hZGluZyImJmlzPiQ/KEVlKGssIkV4cGVjdGVkIHBlbmRpbmcgYWN0aW9uIiksYiYmYi5hYm9ydCgpLFNlKFMubmF2aWdhdGlvbi5sb2NhdGlvbix7bWF0Y2hlczpocixsb2FkZXJEYXRhOnplLGVycm9yczpNbixmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfSkpOih5ZSh7ZXJyb3JzOk1uLGxvYWRlckRhdGE6cjEoUy5sb2FkZXJEYXRhLHplLGhyLE1uKSxmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfSksQj0hMSl9YXN5bmMgZnVuY3Rpb24geXQoUCxMLHosRyxuZSx2ZSxjZSl7bGV0IHVlPVMuZmV0Y2hlcnMuZ2V0KFApO2N0KFAsX3MoY2UsdWU/dWUuZGF0YTp2b2lkIDApLHtmbHVzaFN5bmM6dmV9KTtsZXQgbGU9bmV3IEFib3J0Q29udHJvbGxlcixrZT13cyhlLmhpc3RvcnkseixsZS5zaWduYWwpO1kuc2V0KFAsbGUpO2xldCBNdD1DLHhlPWF3YWl0IHhzKCJsb2FkZXIiLGtlLEcsbmUsaSxvLGEpO2lmKHNpKHhlKSYmKHhlPWF3YWl0IFNDKHhlLGtlLnNpZ25hbCwhMCl8fHhlKSxZLmdldChQKT09PWxlJiZZLmRlbGV0ZShQKSwha2Uuc2lnbmFsLmFib3J0ZWQpe2lmKEguaGFzKFApKXtjdChQLGZvKHZvaWQgMCkpO3JldHVybn1pZihfbCh4ZSkpaWYoJD5NdCl7Y3QoUCxmbyh2b2lkIDApKTtyZXR1cm59ZWxzZXtPLmFkZChQKSxhd2FpdCBxZShTLHhlKTtyZXR1cm59aWYocXMoeGUpKXtFdChQLEwseGUuZXJyb3IpO3JldHVybn1FZSghc2koeGUpLCJVbmhhbmRsZWQgZmV0Y2hlciBkZWZlcnJlZCBkYXRhIiksY3QoUCxmbyh4ZS5kYXRhKSl9fWFzeW5jIGZ1bmN0aW9uIHFlKFAsTCx6KXtsZXR7c3VibWlzc2lvbjpHLGZldGNoZXJTdWJtaXNzaW9uOm5lLHJlcGxhY2U6dmV9PXo9PT12b2lkIDA/e306ejtMLnJldmFsaWRhdGUmJihCPSEwKTtsZXQgY2U9T2EoUC5sb2NhdGlvbixMLmxvY2F0aW9uLHtfaXNSZWRpcmVjdDohMH0pO2lmKEVlKGNlLCJFeHBlY3RlZCBhIGxvY2F0aW9uIG9uIHRoZSByZWRpcmVjdCBuYXZpZ2F0aW9uIiksbil7bGV0IGplPSExO2lmKEwucmVsb2FkRG9jdW1lbnQpamU9ITA7ZWxzZSBpZih5Qy50ZXN0KEwubG9jYXRpb24pKXtjb25zdCBldD1lLmhpc3RvcnkuY3JlYXRlVVJMKEwubG9jYXRpb24pO2plPWV0Lm9yaWdpbiE9PXQubG9jYXRpb24ub3JpZ2lufHxKYShldC5wYXRobmFtZSxhKT09bnVsbH1pZihqZSl7dmU/dC5sb2NhdGlvbi5yZXBsYWNlKEwubG9jYXRpb24pOnQubG9jYXRpb24uYXNzaWduKEwubG9jYXRpb24pO3JldHVybn19Yj1udWxsO2xldCB1ZT12ZT09PSEwP2R0LlJlcGxhY2U6ZHQuUHVzaCx7Zm9ybU1ldGhvZDpsZSxmb3JtQWN0aW9uOmtlLGZvcm1FbmNUeXBlOk10fT1QLm5hdmlnYXRpb247IUcmJiFuZSYmbGUmJmtlJiZNdCYmKEc9czEoUC5uYXZpZ2F0aW9uKSk7bGV0IHhlPUd8fG5lO2lmKE40LmhhcyhMLnN0YXR1cykmJnhlJiZ0cih4ZS5mb3JtTWV0aG9kKSlhd2FpdCBXZSh1ZSxjZSx7c3VibWlzc2lvbjphdCh7fSx4ZSx7Zm9ybUFjdGlvbjpMLmxvY2F0aW9ufSkscHJldmVudFNjcm9sbFJlc2V0OlR9KTtlbHNle2xldCBqZT1IZihjZSxHKTthd2FpdCBXZSh1ZSxjZSx7b3ZlcnJpZGVOYXZpZ2F0aW9uOmplLGZldGNoZXJTdWJtaXNzaW9uOm5lLHByZXZlbnRTY3JvbGxSZXNldDpUfSl9fWFzeW5jIGZ1bmN0aW9uIFl0KFAsTCx6LEcsbmUpe2xldCB2ZT1hd2FpdCBQcm9taXNlLmFsbChbLi4uei5tYXAobGU9PnhzKCJsb2FkZXIiLG5lLGxlLEwsaSxvLGEpKSwuLi5HLm1hcChsZT0+bGUubWF0Y2hlcyYmbGUubWF0Y2gmJmxlLmNvbnRyb2xsZXI/eHMoImxvYWRlciIsd3MoZS5oaXN0b3J5LGxlLnBhdGgsbGUuY29udHJvbGxlci5zaWduYWwpLGxlLm1hdGNoLGxlLm1hdGNoZXMsaSxvLGEpOnt0eXBlOmZ0LmVycm9yLGVycm9yOkxuKDQwNCx7cGF0aG5hbWU6bGUucGF0aH0pfSldKSxjZT12ZS5zbGljZSgwLHoubGVuZ3RoKSx1ZT12ZS5zbGljZSh6Lmxlbmd0aCk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFtsMShQLHosY2UsY2UubWFwKCgpPT5uZS5zaWduYWwpLCExLFMubG9hZGVyRGF0YSksbDEoUCxHLm1hcChsZT0+bGUubWF0Y2gpLHVlLEcubWFwKGxlPT5sZS5jb250cm9sbGVyP2xlLmNvbnRyb2xsZXIuc2lnbmFsOm51bGwpLCEwKV0pLHtyZXN1bHRzOnZlLGxvYWRlclJlc3VsdHM6Y2UsZmV0Y2hlclJlc3VsdHM6dWV9fWZ1bmN0aW9uIGRuKCl7Qj0hMCxyZS5wdXNoKC4uLktkKCkpLFIuZm9yRWFjaCgoUCxMKT0+e1kuaGFzKEwpJiYoVi5wdXNoKEwpLGx0KEwpKX0pfWZ1bmN0aW9uIGN0KFAsTCx6KXt6PT09dm9pZCAwJiYoej17fSksUy5mZXRjaGVycy5zZXQoUCxMKSx5ZSh7ZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX0se2ZsdXNoU3luYzooeiYmei5mbHVzaFN5bmMpPT09ITB9KX1mdW5jdGlvbiBFdChQLEwseixHKXtHPT09dm9pZCAwJiYoRz17fSk7bGV0IG5lPVpzKFMubWF0Y2hlcyxMKTt4bihQKSx5ZSh7ZXJyb3JzOntbbmUucm91dGUuaWRdOnp9LGZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9LHtmbHVzaFN5bmM6KEcmJkcuZmx1c2hTeW5jKT09PSEwfSl9ZnVuY3Rpb24gWHQoUCl7cmV0dXJuIHUudjdfZmV0Y2hlclBlcnNpc3QmJihGLnNldChQLChGLmdldChQKXx8MCkrMSksSC5oYXMoUCkmJkguZGVsZXRlKFApKSxTLmZldGNoZXJzLmdldChQKXx8UjR9ZnVuY3Rpb24geG4oUCl7bGV0IEw9Uy5mZXRjaGVycy5nZXQoUCk7WS5oYXMoUCkmJiEoTCYmTC5zdGF0ZT09PSJsb2FkaW5nIiYmRS5oYXMoUCkpJiZsdChQKSxSLmRlbGV0ZShQKSxFLmRlbGV0ZShQKSxPLmRlbGV0ZShQKSxILmRlbGV0ZShQKSxTLmZldGNoZXJzLmRlbGV0ZShQKX1mdW5jdGlvbiBNcihQKXtpZih1LnY3X2ZldGNoZXJQZXJzaXN0KXtsZXQgTD0oRi5nZXQoUCl8fDApLTE7TDw9MD8oRi5kZWxldGUoUCksSC5hZGQoUCkpOkYuc2V0KFAsTCl9ZWxzZSB4bihQKTt5ZSh7ZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX0pfWZ1bmN0aW9uIGx0KFApe2xldCBMPVkuZ2V0KFApO0VlKEwsIkV4cGVjdGVkIGZldGNoIGNvbnRyb2xsZXI6ICIrUCksTC5hYm9ydCgpLFkuZGVsZXRlKFApfWZ1bmN0aW9uIGZyKFApe2ZvcihsZXQgTCBvZiBQKXtsZXQgej1YdChMKSxHPWZvKHouZGF0YSk7Uy5mZXRjaGVycy5zZXQoTCxHKX19ZnVuY3Rpb24gWG8oKXtsZXQgUD1bXSxMPSExO2ZvcihsZXQgeiBvZiBPKXtsZXQgRz1TLmZldGNoZXJzLmdldCh6KTtFZShHLCJFeHBlY3RlZCBmZXRjaGVyOiAiK3opLEcuc3RhdGU9PT0ibG9hZGluZyImJihPLmRlbGV0ZSh6KSxQLnB1c2goeiksTD0hMCl9cmV0dXJuIGZyKFApLEx9ZnVuY3Rpb24gb3MoUCl7bGV0IEw9W107Zm9yKGxldFt6LEddb2YgRSlpZihHPFApe2xldCBuZT1TLmZldGNoZXJzLmdldCh6KTtFZShuZSwiRXhwZWN0ZWQgZmV0Y2hlcjogIit6KSxuZS5zdGF0ZT09PSJsb2FkaW5nIiYmKGx0KHopLEUuZGVsZXRlKHopLEwucHVzaCh6KSl9cmV0dXJuIGZyKEwpLEwubGVuZ3RoPjB9ZnVuY3Rpb24gWUMoUCxMKXtsZXQgej1TLmJsb2NrZXJzLmdldChQKXx8eXM7cmV0dXJuIG9lLmdldChQKSE9PUwmJm9lLnNldChQLEwpLHp9ZnVuY3Rpb24gSm0oUCl7Uy5ibG9ja2Vycy5kZWxldGUoUCksb2UuZGVsZXRlKFApfWZ1bmN0aW9uIFphKFAsTCl7bGV0IHo9Uy5ibG9ja2Vycy5nZXQoUCl8fHlzO0VlKHouc3RhdGU9PT0idW5ibG9ja2VkIiYmTC5zdGF0ZT09PSJibG9ja2VkInx8ei5zdGF0ZT09PSJibG9ja2VkIiYmTC5zdGF0ZT09PSJibG9ja2VkInx8ei5zdGF0ZT09PSJibG9ja2VkIiYmTC5zdGF0ZT09PSJwcm9jZWVkaW5nInx8ei5zdGF0ZT09PSJibG9ja2VkIiYmTC5zdGF0ZT09PSJ1bmJsb2NrZWQifHx6LnN0YXRlPT09InByb2NlZWRpbmciJiZMLnN0YXRlPT09InVuYmxvY2tlZCIsIkludmFsaWQgYmxvY2tlciBzdGF0ZSB0cmFuc2l0aW9uOiAiK3ouc3RhdGUrIiAtPiAiK0wuc3RhdGUpO2xldCBHPW5ldyBNYXAoUy5ibG9ja2Vycyk7Ry5zZXQoUCxMKSx5ZSh7YmxvY2tlcnM6R30pfWZ1bmN0aW9uIFptKFApe2xldHtjdXJyZW50TG9jYXRpb246TCxuZXh0TG9jYXRpb246eixoaXN0b3J5QWN0aW9uOkd9PVA7aWYob2Uuc2l6ZT09PTApcmV0dXJuO29lLnNpemU+MSYmRWkoITEsIkEgcm91dGVyIG9ubHkgc3VwcG9ydHMgb25lIGJsb2NrZXIgYXQgYSB0aW1lIik7bGV0IG5lPUFycmF5LmZyb20ob2UuZW50cmllcygpKSxbdmUsY2VdPW5lW25lLmxlbmd0aC0xXSx1ZT1TLmJsb2NrZXJzLmdldCh2ZSk7aWYoISh1ZSYmdWUuc3RhdGU9PT0icHJvY2VlZGluZyIpJiZjZSh7Y3VycmVudExvY2F0aW9uOkwsbmV4dExvY2F0aW9uOnosaGlzdG9yeUFjdGlvbjpHfSkpcmV0dXJuIHZlfWZ1bmN0aW9uIEtkKFApe2xldCBMPVtdO3JldHVybiBhZS5mb3JFYWNoKCh6LEcpPT57KCFQfHxQKEcpKSYmKHouY2FuY2VsKCksTC5wdXNoKEcpLGFlLmRlbGV0ZShHKSl9KSxMfWZ1bmN0aW9uIFhDKFAsTCx6KXtpZihmPVAsbT1MLGg9enx8bnVsbCwhZyYmUy5uYXZpZ2F0aW9uPT09VWYpe2c9ITA7bGV0IEc9ZXYoUy5sb2NhdGlvbixTLm1hdGNoZXMpO0chPW51bGwmJnllKHtyZXN0b3JlU2Nyb2xsUG9zaXRpb246R30pfXJldHVybigpPT57Zj1udWxsLG09bnVsbCxoPW51bGx9fWZ1bmN0aW9uIHFtKFAsTCl7cmV0dXJuIGgmJmgoUCxMLm1hcChHPT5pNChHLFMubG9hZGVyRGF0YSkpKXx8UC5rZXl9ZnVuY3Rpb24gUUMoUCxMKXtpZihmJiZtKXtsZXQgej1xbShQLEwpO2Zbel09bSgpfX1mdW5jdGlvbiBldihQLEwpe2lmKGYpe2xldCB6PXFtKFAsTCksRz1mW3pdO2lmKHR5cGVvZiBHPT0ibnVtYmVyIilyZXR1cm4gR31yZXR1cm4gbnVsbH1mdW5jdGlvbiBKQyhQKXtpPXt9LHM9anAoUCxvLHZvaWQgMCxpKX1yZXR1cm4geD17Z2V0IGJhc2VuYW1lKCl7cmV0dXJuIGF9LGdldCBzdGF0ZSgpe3JldHVybiBTfSxnZXQgcm91dGVzKCl7cmV0dXJuIGx9LGdldCB3aW5kb3coKXtyZXR1cm4gdH0saW5pdGlhbGl6ZTpfZSxzdWJzY3JpYmU6TmUsZW5hYmxlU2Nyb2xsUmVzdG9yYXRpb246WEMsbmF2aWdhdGU6cGUsZmV0Y2g6R24scmV2YWxpZGF0ZTpUZSxjcmVhdGVIcmVmOlA9PmUuaGlzdG9yeS5jcmVhdGVIcmVmKFApLGVuY29kZUxvY2F0aW9uOlA9PmUuaGlzdG9yeS5lbmNvZGVMb2NhdGlvbihQKSxnZXRGZXRjaGVyOlh0LGRlbGV0ZUZldGNoZXI6TXIsZGlzcG9zZTpRLGdldEJsb2NrZXI6WUMsZGVsZXRlQmxvY2tlcjpKbSxfaW50ZXJuYWxGZXRjaENvbnRyb2xsZXJzOlksX2ludGVybmFsQWN0aXZlRGVmZXJyZWRzOmFlLF9pbnRlcm5hbFNldFJvdXRlczpKQ30seH1mdW5jdGlvbiBBNChlKXtyZXR1cm4gZSE9bnVsbCYmKCJmb3JtRGF0YSJpbiBlJiZlLmZvcm1EYXRhIT1udWxsfHwiYm9keSJpbiBlJiZlLmJvZHkhPT12b2lkIDApfWZ1bmN0aW9uIHpwKGUsdCxuLHIsbyxpLGwpe2xldCBzLGE7aWYoaSl7cz1bXTtmb3IobGV0IGMgb2YgdClpZihzLnB1c2goYyksYy5yb3V0ZS5pZD09PWkpe2E9YzticmVha319ZWxzZSBzPXQsYT10W3QubGVuZ3RoLTFdO2xldCB1PWdDKG98fCIuIixwQyhzKSxKYShlLnBhdGhuYW1lLG4pfHxlLnBhdGhuYW1lLGw9PT0icGF0aCIpO3JldHVybiBvPT1udWxsJiYodS5zZWFyY2g9ZS5zZWFyY2gsdS5oYXNoPWUuaGFzaCksKG89PW51bGx8fG89PT0iInx8bz09PSIuIikmJmEmJmEucm91dGUuaW5kZXgmJiFVbSh1LnNlYXJjaCkmJih1LnNlYXJjaD11LnNlYXJjaD91LnNlYXJjaC5yZXBsYWNlKC9eXD8vLCI/aW5kZXgmIik6Ij9pbmRleCIpLHImJm4hPT0iLyImJih1LnBhdGhuYW1lPXUucGF0aG5hbWU9PT0iLyI/bjpBbyhbbix1LnBhdGhuYW1lXSkpLFFhKHUpfWZ1bmN0aW9uIEowKGUsdCxuLHIpe2lmKCFyfHwhQTQocikpcmV0dXJue3BhdGg6bn07aWYoci5mb3JtTWV0aG9kJiYhRjQoci5mb3JtTWV0aG9kKSlyZXR1cm57cGF0aDpuLGVycm9yOkxuKDQwNSx7bWV0aG9kOnIuZm9ybU1ldGhvZH0pfTtsZXQgbz0oKT0+KHtwYXRoOm4sZXJyb3I6TG4oNDAwLHt0eXBlOiJpbnZhbGlkLWJvZHkifSl9KSxpPXIuZm9ybU1ldGhvZHx8ImdldCIsbD1lP2kudG9VcHBlckNhc2UoKTppLnRvTG93ZXJDYXNlKCkscz1fQyhuKTtpZihyLmJvZHkhPT12b2lkIDApe2lmKHIuZm9ybUVuY1R5cGU9PT0idGV4dC9wbGFpbiIpe2lmKCF0cihsKSlyZXR1cm4gbygpO2xldCBmPXR5cGVvZiByLmJvZHk9PSJzdHJpbmciP3IuYm9keTpyLmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YXx8ci5ib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zP0FycmF5LmZyb20oci5ib2R5LmVudHJpZXMoKSkucmVkdWNlKChoLG0pPT57bGV0W2csX109bTtyZXR1cm4iIitoK2crIj0iK18rYApgfSwiIik6U3RyaW5nKHIuYm9keSk7cmV0dXJue3BhdGg6bixzdWJtaXNzaW9uOntmb3JtTWV0aG9kOmwsZm9ybUFjdGlvbjpzLGZvcm1FbmNUeXBlOnIuZm9ybUVuY1R5cGUsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6Zn19fWVsc2UgaWYoci5mb3JtRW5jVHlwZT09PSJhcHBsaWNhdGlvbi9qc29uIil7aWYoIXRyKGwpKXJldHVybiBvKCk7dHJ5e2xldCBmPXR5cGVvZiByLmJvZHk9PSJzdHJpbmciP0pTT04ucGFyc2Uoci5ib2R5KTpyLmJvZHk7cmV0dXJue3BhdGg6bixzdWJtaXNzaW9uOntmb3JtTWV0aG9kOmwsZm9ybUFjdGlvbjpzLGZvcm1FbmNUeXBlOnIuZm9ybUVuY1R5cGUsZm9ybURhdGE6dm9pZCAwLGpzb246Zix0ZXh0OnZvaWQgMH19fWNhdGNoe3JldHVybiBvKCl9fX1FZSh0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiIsIkZvcm1EYXRhIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCIpO2xldCBhLHU7aWYoci5mb3JtRGF0YSlhPUZwKHIuZm9ybURhdGEpLHU9ci5mb3JtRGF0YTtlbHNlIGlmKHIuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKWE9RnAoci5ib2R5KSx1PXIuYm9keTtlbHNlIGlmKHIuYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcylhPXIuYm9keSx1PXQxKGEpO2Vsc2UgaWYoci5ib2R5PT1udWxsKWE9bmV3IFVSTFNlYXJjaFBhcmFtcyx1PW5ldyBGb3JtRGF0YTtlbHNlIHRyeXthPW5ldyBVUkxTZWFyY2hQYXJhbXMoci5ib2R5KSx1PXQxKGEpfWNhdGNoe3JldHVybiBvKCl9bGV0IGM9e2Zvcm1NZXRob2Q6bCxmb3JtQWN0aW9uOnMsZm9ybUVuY1R5cGU6ciYmci5mb3JtRW5jVHlwZXx8ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsZm9ybURhdGE6dSxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMH07aWYodHIoYy5mb3JtTWV0aG9kKSlyZXR1cm57cGF0aDpuLHN1Ym1pc3Npb246Y307bGV0IGQ9b28obik7cmV0dXJuIHQmJmQuc2VhcmNoJiZVbShkLnNlYXJjaCkmJmEuYXBwZW5kKCJpbmRleCIsIiIpLGQuc2VhcmNoPSI/IithLHtwYXRoOlFhKGQpLHN1Ym1pc3Npb246Y319ZnVuY3Rpb24gTTQoZSx0KXtsZXQgbj1lO2lmKHQpe2xldCByPWUuZmluZEluZGV4KG89Pm8ucm91dGUuaWQ9PT10KTtyPj0wJiYobj1lLnNsaWNlKDAscikpfXJldHVybiBufWZ1bmN0aW9uIFowKGUsdCxuLHIsbyxpLGwscyxhLHUsYyxkLGYsaCxtKXtsZXQgZz1tP09iamVjdC52YWx1ZXMobSlbMF06aD9PYmplY3QudmFsdWVzKGgpWzBdOnZvaWQgMCxfPWUuY3JlYXRlVVJMKHQubG9jYXRpb24pLHY9ZS5jcmVhdGVVUkwobykseT1tP09iamVjdC5rZXlzKG0pWzBdOnZvaWQgMCxTPU00KG4seSkuZmlsdGVyKChULGIpPT57aWYoVC5yb3V0ZS5sYXp5KXJldHVybiEwO2lmKFQucm91dGUubG9hZGVyPT1udWxsKXJldHVybiExO2lmKEw0KHQubG9hZGVyRGF0YSx0Lm1hdGNoZXNbYl0sVCl8fGwuc29tZShNPT5NPT09VC5yb3V0ZS5pZCkpcmV0dXJuITA7bGV0IE49dC5tYXRjaGVzW2JdLEQ9VDtyZXR1cm4gcTAoVCxhdCh7Y3VycmVudFVybDpfLGN1cnJlbnRQYXJhbXM6Ti5wYXJhbXMsbmV4dFVybDp2LG5leHRQYXJhbXM6RC5wYXJhbXN9LHIse2FjdGlvblJlc3VsdDpnLGRlZmF1bHRTaG91bGRSZXZhbGlkYXRlOml8fF8ucGF0aG5hbWUrXy5zZWFyY2g9PT12LnBhdGhuYW1lK3Yuc2VhcmNofHxfLnNlYXJjaCE9PXYuc2VhcmNofHx3QyhOLEQpfSkpfSksaz1bXTtyZXR1cm4gdS5mb3JFYWNoKChULGIpPT57aWYoIW4uc29tZShCPT5CLnJvdXRlLmlkPT09VC5yb3V0ZUlkKXx8YS5oYXMoYikpcmV0dXJuO2xldCBOPWNsKGQsVC5wYXRoLGYpO2lmKCFOKXtrLnB1c2goe2tleTpiLHJvdXRlSWQ6VC5yb3V0ZUlkLHBhdGg6VC5wYXRoLG1hdGNoZXM6bnVsbCxtYXRjaDpudWxsLGNvbnRyb2xsZXI6bnVsbH0pO3JldHVybn1sZXQgRD10LmZldGNoZXJzLmdldChiKSxNPUJwKE4sVC5wYXRoKSxqPSExO2MuaGFzKGIpP2o9ITE6cy5pbmNsdWRlcyhiKT9qPSEwOkQmJkQuc3RhdGUhPT0iaWRsZSImJkQuZGF0YT09PXZvaWQgMD9qPWk6aj1xMChNLGF0KHtjdXJyZW50VXJsOl8sY3VycmVudFBhcmFtczp0Lm1hdGNoZXNbdC5tYXRjaGVzLmxlbmd0aC0xXS5wYXJhbXMsbmV4dFVybDp2LG5leHRQYXJhbXM6bltuLmxlbmd0aC0xXS5wYXJhbXN9LHIse2FjdGlvblJlc3VsdDpnLGRlZmF1bHRTaG91bGRSZXZhbGlkYXRlOml9KSksaiYmay5wdXNoKHtrZXk6Yixyb3V0ZUlkOlQucm91dGVJZCxwYXRoOlQucGF0aCxtYXRjaGVzOk4sbWF0Y2g6TSxjb250cm9sbGVyOm5ldyBBYm9ydENvbnRyb2xsZXJ9KX0pLFtTLGtdfWZ1bmN0aW9uIEw0KGUsdCxuKXtsZXQgcj0hdHx8bi5yb3V0ZS5pZCE9PXQucm91dGUuaWQsbz1lW24ucm91dGUuaWRdPT09dm9pZCAwO3JldHVybiByfHxvfWZ1bmN0aW9uIHdDKGUsdCl7bGV0IG49ZS5yb3V0ZS5wYXRoO3JldHVybiBlLnBhdGhuYW1lIT09dC5wYXRobmFtZXx8biE9bnVsbCYmbi5lbmRzV2l0aCgiKiIpJiZlLnBhcmFtc1siKiJdIT09dC5wYXJhbXNbIioiXX1mdW5jdGlvbiBxMChlLHQpe2lmKGUucm91dGUuc2hvdWxkUmV2YWxpZGF0ZSl7bGV0IG49ZS5yb3V0ZS5zaG91bGRSZXZhbGlkYXRlKHQpO2lmKHR5cGVvZiBuPT0iYm9vbGVhbiIpcmV0dXJuIG59cmV0dXJuIHQuZGVmYXVsdFNob3VsZFJldmFsaWRhdGV9YXN5bmMgZnVuY3Rpb24gZTEoZSx0LG4pe2lmKCFlLmxhenkpcmV0dXJuO2xldCByPWF3YWl0IGUubGF6eSgpO2lmKCFlLmxhenkpcmV0dXJuO2xldCBvPW5bZS5pZF07RWUobywiTm8gcm91dGUgZm91bmQgaW4gbWFuaWZlc3QiKTtsZXQgaT17fTtmb3IobGV0IGwgaW4gcil7bGV0IGE9b1tsXSE9PXZvaWQgMCYmbCE9PSJoYXNFcnJvckJvdW5kYXJ5IjtFaSghYSwnUm91dGUgIicrby5pZCsnIiBoYXMgYSBzdGF0aWMgcHJvcGVydHkgIicrbCsnIiBkZWZpbmVkIGJ1dCBpdHMgbGF6eSBmdW5jdGlvbiBpcyBhbHNvIHJldHVybmluZyBhIHZhbHVlIGZvciB0aGlzIHByb3BlcnR5LiAnKygnVGhlIGxhenkgcm91dGUgcHJvcGVydHkgIicrbCsnIiB3aWxsIGJlIGlnbm9yZWQuJykpLCFhJiYhcjQuaGFzKGwpJiYoaVtsXT1yW2xdKX1PYmplY3QuYXNzaWduKG8saSksT2JqZWN0LmFzc2lnbihvLGF0KHt9LHQobykse2xhenk6dm9pZCAwfSkpfWFzeW5jIGZ1bmN0aW9uIHhzKGUsdCxuLHIsbyxpLGwscyl7cz09PXZvaWQgMCYmKHM9e30pO2xldCBhLHUsYyxkPW09PntsZXQgZyxfPW5ldyBQcm9taXNlKCh2LHkpPT5nPXkpO3JldHVybiBjPSgpPT5nKCksdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLFByb21pc2UucmFjZShbbSh7cmVxdWVzdDp0LHBhcmFtczpuLnBhcmFtcyxjb250ZXh0OnMucmVxdWVzdENvbnRleHR9KSxfXSl9O3RyeXtsZXQgbT1uLnJvdXRlW2VdO2lmKG4ucm91dGUubGF6eSlpZihtKXtsZXQgZyxfPWF3YWl0IFByb21pc2UuYWxsKFtkKG0pLmNhdGNoKHY9PntnPXZ9KSxlMShuLnJvdXRlLGksbyldKTtpZihnKXRocm93IGc7dT1fWzBdfWVsc2UgaWYoYXdhaXQgZTEobi5yb3V0ZSxpLG8pLG09bi5yb3V0ZVtlXSxtKXU9YXdhaXQgZChtKTtlbHNlIGlmKGU9PT0iYWN0aW9uIil7bGV0IGc9bmV3IFVSTCh0LnVybCksXz1nLnBhdGhuYW1lK2cuc2VhcmNoO3Rocm93IExuKDQwNSx7bWV0aG9kOnQubWV0aG9kLHBhdGhuYW1lOl8scm91dGVJZDpuLnJvdXRlLmlkfSl9ZWxzZSByZXR1cm57dHlwZTpmdC5kYXRhLGRhdGE6dm9pZCAwfTtlbHNlIGlmKG0pdT1hd2FpdCBkKG0pO2Vsc2V7bGV0IGc9bmV3IFVSTCh0LnVybCksXz1nLnBhdGhuYW1lK2cuc2VhcmNoO3Rocm93IExuKDQwNCx7cGF0aG5hbWU6X30pfUVlKHUhPT12b2lkIDAsIllvdSBkZWZpbmVkICIrKGU9PT0iYWN0aW9uIj8iYW4gYWN0aW9uIjoiYSBsb2FkZXIiKSsiIGZvciByb3V0ZSAiKygnIicrbi5yb3V0ZS5pZCsiXCIgYnV0IGRpZG4ndCByZXR1cm4gYW55dGhpbmcgZnJvbSB5b3VyIGAiK2UrImAgIikrImZ1bmN0aW9uLiBQbGVhc2UgcmV0dXJuIGEgdmFsdWUgb3IgYG51bGxgLiIpfWNhdGNoKG0pe2E9ZnQuZXJyb3IsdT1tfWZpbmFsbHl7YyYmdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpfWlmKHo0KHUpKXtsZXQgbT11LnN0YXR1cztpZihUNC5oYXMobSkpe2xldCB2PXUuaGVhZGVycy5nZXQoIkxvY2F0aW9uIik7aWYoRWUodiwiUmVkaXJlY3RzIHJldHVybmVkL3Rocm93biBmcm9tIGxvYWRlcnMvYWN0aW9ucyBtdXN0IGhhdmUgYSBMb2NhdGlvbiBoZWFkZXIiKSwheUMudGVzdCh2KSl2PXpwKG5ldyBVUkwodC51cmwpLHIuc2xpY2UoMCxyLmluZGV4T2YobikrMSksbCwhMCx2KTtlbHNlIGlmKCFzLmlzU3RhdGljUmVxdWVzdCl7bGV0IHk9bmV3IFVSTCh0LnVybCkseD12LnN0YXJ0c1dpdGgoIi8vIik/bmV3IFVSTCh5LnByb3RvY29sK3YpOm5ldyBVUkwodiksUz1KYSh4LnBhdGhuYW1lLGwpIT1udWxsO3gub3JpZ2luPT09eS5vcmlnaW4mJlMmJih2PXgucGF0aG5hbWUreC5zZWFyY2greC5oYXNoKX1pZihzLmlzU3RhdGljUmVxdWVzdCl0aHJvdyB1LmhlYWRlcnMuc2V0KCJMb2NhdGlvbiIsdiksdTtyZXR1cm57dHlwZTpmdC5yZWRpcmVjdCxzdGF0dXM6bSxsb2NhdGlvbjp2LHJldmFsaWRhdGU6dS5oZWFkZXJzLmdldCgiWC1SZW1peC1SZXZhbGlkYXRlIikhPT1udWxsLHJlbG9hZERvY3VtZW50OnUuaGVhZGVycy5nZXQoIlgtUmVtaXgtUmVsb2FkLURvY3VtZW50IikhPT1udWxsfX1pZihzLmlzUm91dGVSZXF1ZXN0KXRocm93e3R5cGU6YT09PWZ0LmVycm9yP2Z0LmVycm9yOmZ0LmRhdGEscmVzcG9uc2U6dX07bGV0IGcsXz11LmhlYWRlcnMuZ2V0KCJDb250ZW50LVR5cGUiKTtyZXR1cm4gXyYmL1xiYXBwbGljYXRpb25cL2pzb25cYi8udGVzdChfKT9nPWF3YWl0IHUuanNvbigpOmc9YXdhaXQgdS50ZXh0KCksYT09PWZ0LmVycm9yP3t0eXBlOmEsZXJyb3I6bmV3IFdtKG0sdS5zdGF0dXNUZXh0LGcpLGhlYWRlcnM6dS5oZWFkZXJzfTp7dHlwZTpmdC5kYXRhLGRhdGE6ZyxzdGF0dXNDb2RlOnUuc3RhdHVzLGhlYWRlcnM6dS5oZWFkZXJzfX1pZihhPT09ZnQuZXJyb3IpcmV0dXJue3R5cGU6YSxlcnJvcjp1fTtpZihqNCh1KSl7dmFyIGYsaDtyZXR1cm57dHlwZTpmdC5kZWZlcnJlZCxkZWZlcnJlZERhdGE6dSxzdGF0dXNDb2RlOihmPXUuaW5pdCk9PW51bGw/dm9pZCAwOmYuc3RhdHVzLGhlYWRlcnM6KChoPXUuaW5pdCk9PW51bGw/dm9pZCAwOmguaGVhZGVycykmJm5ldyBIZWFkZXJzKHUuaW5pdC5oZWFkZXJzKX19cmV0dXJue3R5cGU6ZnQuZGF0YSxkYXRhOnV9fWZ1bmN0aW9uIHdzKGUsdCxuLHIpe2xldCBvPWUuY3JlYXRlVVJMKF9DKHQpKS50b1N0cmluZygpLGk9e3NpZ25hbDpufTtpZihyJiZ0cihyLmZvcm1NZXRob2QpKXtsZXR7Zm9ybU1ldGhvZDpsLGZvcm1FbmNUeXBlOnN9PXI7aS5tZXRob2Q9bC50b1VwcGVyQ2FzZSgpLHM9PT0iYXBwbGljYXRpb24vanNvbiI/KGkuaGVhZGVycz1uZXcgSGVhZGVycyh7IkNvbnRlbnQtVHlwZSI6c30pLGkuYm9keT1KU09OLnN0cmluZ2lmeShyLmpzb24pKTpzPT09InRleHQvcGxhaW4iP2kuYm9keT1yLnRleHQ6cz09PSJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiJiZyLmZvcm1EYXRhP2kuYm9keT1GcChyLmZvcm1EYXRhKTppLmJvZHk9ci5mb3JtRGF0YX1yZXR1cm4gbmV3IFJlcXVlc3QobyxpKX1mdW5jdGlvbiBGcChlKXtsZXQgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO2ZvcihsZXRbbixyXW9mIGUuZW50cmllcygpKXQuYXBwZW5kKG4sdHlwZW9mIHI9PSJzdHJpbmciP3I6ci5uYW1lKTtyZXR1cm4gdH1mdW5jdGlvbiB0MShlKXtsZXQgdD1uZXcgRm9ybURhdGE7Zm9yKGxldFtuLHJdb2YgZS5lbnRyaWVzKCkpdC5hcHBlbmQobixyKTtyZXR1cm4gdH1mdW5jdGlvbiBENChlLHQsbixyLG8pe2xldCBpPXt9LGw9bnVsbCxzLGE9ITEsdT17fTtyZXR1cm4gbi5mb3JFYWNoKChjLGQpPT57bGV0IGY9dFtkXS5yb3V0ZS5pZDtpZihFZSghX2woYyksIkNhbm5vdCBoYW5kbGUgcmVkaXJlY3QgcmVzdWx0cyBpbiBwcm9jZXNzTG9hZGVyRGF0YSIpLHFzKGMpKXtsZXQgaD1acyhlLGYpLG09Yy5lcnJvcjtyJiYobT1PYmplY3QudmFsdWVzKHIpWzBdLHI9dm9pZCAwKSxsPWx8fHt9LGxbaC5yb3V0ZS5pZF09PW51bGwmJihsW2gucm91dGUuaWRdPW0pLGlbZl09dm9pZCAwLGF8fChhPSEwLHM9bUMoYy5lcnJvcik/Yy5lcnJvci5zdGF0dXM6NTAwKSxjLmhlYWRlcnMmJih1W2ZdPWMuaGVhZGVycyl9ZWxzZSBzaShjKT8oby5zZXQoZixjLmRlZmVycmVkRGF0YSksaVtmXT1jLmRlZmVycmVkRGF0YS5kYXRhKTppW2ZdPWMuZGF0YSxjLnN0YXR1c0NvZGUhPW51bGwmJmMuc3RhdHVzQ29kZSE9PTIwMCYmIWEmJihzPWMuc3RhdHVzQ29kZSksYy5oZWFkZXJzJiYodVtmXT1jLmhlYWRlcnMpfSksciYmKGw9cixpW09iamVjdC5rZXlzKHIpWzBdXT12b2lkIDApLHtsb2FkZXJEYXRhOmksZXJyb3JzOmwsc3RhdHVzQ29kZTpzfHwyMDAsbG9hZGVySGVhZGVyczp1fX1mdW5jdGlvbiBuMShlLHQsbixyLG8saSxsLHMpe2xldHtsb2FkZXJEYXRhOmEsZXJyb3JzOnV9PUQ0KHQsbixyLG8scyk7Zm9yKGxldCBjPTA7YzxpLmxlbmd0aDtjKyspe2xldHtrZXk6ZCxtYXRjaDpmLGNvbnRyb2xsZXI6aH09aVtjXTtFZShsIT09dm9pZCAwJiZsW2NdIT09dm9pZCAwLCJEaWQgbm90IGZpbmQgY29ycmVzcG9uZGluZyBmZXRjaGVyIHJlc3VsdCIpO2xldCBtPWxbY107aWYoIShoJiZoLnNpZ25hbC5hYm9ydGVkKSlpZihxcyhtKSl7bGV0IGc9WnMoZS5tYXRjaGVzLGY9PW51bGw/dm9pZCAwOmYucm91dGUuaWQpO3UmJnVbZy5yb3V0ZS5pZF18fCh1PWF0KHt9LHUse1tnLnJvdXRlLmlkXTptLmVycm9yfSkpLGUuZmV0Y2hlcnMuZGVsZXRlKGQpfWVsc2UgaWYoX2wobSkpRWUoITEsIlVuaGFuZGxlZCBmZXRjaGVyIHJldmFsaWRhdGlvbiByZWRpcmVjdCIpO2Vsc2UgaWYoc2kobSkpRWUoITEsIlVuaGFuZGxlZCBmZXRjaGVyIGRlZmVycmVkIGRhdGEiKTtlbHNle2xldCBnPWZvKG0uZGF0YSk7ZS5mZXRjaGVycy5zZXQoZCxnKX19cmV0dXJue2xvYWRlckRhdGE6YSxlcnJvcnM6dX19ZnVuY3Rpb24gcjEoZSx0LG4scil7bGV0IG89YXQoe30sdCk7Zm9yKGxldCBpIG9mIG4pe2xldCBsPWkucm91dGUuaWQ7aWYodC5oYXNPd25Qcm9wZXJ0eShsKT90W2xdIT09dm9pZCAwJiYob1tsXT10W2xdKTplW2xdIT09dm9pZCAwJiZpLnJvdXRlLmxvYWRlciYmKG9bbF09ZVtsXSksciYmci5oYXNPd25Qcm9wZXJ0eShsKSlicmVha31yZXR1cm4gb31mdW5jdGlvbiBacyhlLHQpe3JldHVybih0P2Uuc2xpY2UoMCxlLmZpbmRJbmRleChyPT5yLnJvdXRlLmlkPT09dCkrMSk6Wy4uLmVdKS5yZXZlcnNlKCkuZmluZChyPT5yLnJvdXRlLmhhc0Vycm9yQm91bmRhcnk9PT0hMCl8fGVbMF19ZnVuY3Rpb24gbzEoZSl7bGV0IHQ9ZS5sZW5ndGg9PT0xP2VbMF06ZS5maW5kKG49Pm4uaW5kZXh8fCFuLnBhdGh8fG4ucGF0aD09PSIvIil8fHtpZDoiX19zaGltLWVycm9yLXJvdXRlX18ifTtyZXR1cm57bWF0Y2hlczpbe3BhcmFtczp7fSxwYXRobmFtZToiIixwYXRobmFtZUJhc2U6IiIscm91dGU6dH1dLHJvdXRlOnR9fWZ1bmN0aW9uIExuKGUsdCl7bGV0e3BhdGhuYW1lOm4scm91dGVJZDpyLG1ldGhvZDpvLHR5cGU6aX09dD09PXZvaWQgMD97fTp0LGw9IlVua25vd24gU2VydmVyIEVycm9yIixzPSJVbmtub3duIEByZW1peC1ydW4vcm91dGVyIGVycm9yIjtyZXR1cm4gZT09PTQwMD8obD0iQmFkIFJlcXVlc3QiLG8mJm4mJnI/cz0iWW91IG1hZGUgYSAiK28rJyByZXF1ZXN0IHRvICInK24rJyIgYnV0ICcrKCdkaWQgbm90IHByb3ZpZGUgYSBgbG9hZGVyYCBmb3Igcm91dGUgIicrcisnIiwgJykrInNvIHRoZXJlIGlzIG5vIHdheSB0byBoYW5kbGUgdGhlIHJlcXVlc3QuIjppPT09ImRlZmVyLWFjdGlvbiI/cz0iZGVmZXIoKSBpcyBub3Qgc3VwcG9ydGVkIGluIGFjdGlvbnMiOmk9PT0iaW52YWxpZC1ib2R5IiYmKHM9IlVuYWJsZSB0byBlbmNvZGUgc3VibWlzc2lvbiBib2R5IikpOmU9PT00MDM/KGw9IkZvcmJpZGRlbiIscz0nUm91dGUgIicrcisnIiBkb2VzIG5vdCBtYXRjaCBVUkwgIicrbisnIicpOmU9PT00MDQ/KGw9Ik5vdCBGb3VuZCIscz0nTm8gcm91dGUgbWF0Y2hlcyBVUkwgIicrbisnIicpOmU9PT00MDUmJihsPSJNZXRob2QgTm90IEFsbG93ZWQiLG8mJm4mJnI/cz0iWW91IG1hZGUgYSAiK28udG9VcHBlckNhc2UoKSsnIHJlcXVlc3QgdG8gIicrbisnIiBidXQgJysoJ2RpZCBub3QgcHJvdmlkZSBhbiBgYWN0aW9uYCBmb3Igcm91dGUgIicrcisnIiwgJykrInNvIHRoZXJlIGlzIG5vIHdheSB0byBoYW5kbGUgdGhlIHJlcXVlc3QuIjpvJiYocz0nSW52YWxpZCByZXF1ZXN0IG1ldGhvZCAiJytvLnRvVXBwZXJDYXNlKCkrJyInKSksbmV3IFdtKGV8fDUwMCxsLG5ldyBFcnJvcihzKSwhMCl9ZnVuY3Rpb24gaTEoZSl7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDt0LS0pe2xldCBuPWVbdF07aWYoX2wobikpcmV0dXJue3Jlc3VsdDpuLGlkeDp0fX19ZnVuY3Rpb24gX0MoZSl7bGV0IHQ9dHlwZW9mIGU9PSJzdHJpbmciP29vKGUpOmU7cmV0dXJuIFFhKGF0KHt9LHQse2hhc2g6IiJ9KSl9ZnVuY3Rpb24gSTQoZSx0KXtyZXR1cm4gZS5wYXRobmFtZSE9PXQucGF0aG5hbWV8fGUuc2VhcmNoIT09dC5zZWFyY2g/ITE6ZS5oYXNoPT09IiI/dC5oYXNoIT09IiI6ZS5oYXNoPT09dC5oYXNoPyEwOnQuaGFzaCE9PSIifWZ1bmN0aW9uIHNpKGUpe3JldHVybiBlLnR5cGU9PT1mdC5kZWZlcnJlZH1mdW5jdGlvbiBxcyhlKXtyZXR1cm4gZS50eXBlPT09ZnQuZXJyb3J9ZnVuY3Rpb24gX2woZSl7cmV0dXJuKGUmJmUudHlwZSk9PT1mdC5yZWRpcmVjdH1mdW5jdGlvbiBqNChlKXtsZXQgdD1lO3JldHVybiB0JiZ0eXBlb2YgdD09Im9iamVjdCImJnR5cGVvZiB0LmRhdGE9PSJvYmplY3QiJiZ0eXBlb2YgdC5zdWJzY3JpYmU9PSJmdW5jdGlvbiImJnR5cGVvZiB0LmNhbmNlbD09ImZ1bmN0aW9uIiYmdHlwZW9mIHQucmVzb2x2ZURhdGE9PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gejQoZSl7cmV0dXJuIGUhPW51bGwmJnR5cGVvZiBlLnN0YXR1cz09Im51bWJlciImJnR5cGVvZiBlLnN0YXR1c1RleHQ9PSJzdHJpbmciJiZ0eXBlb2YgZS5oZWFkZXJzPT0ib2JqZWN0IiYmdHlwZW9mIGUuYm9keTwidSJ9ZnVuY3Rpb24gRjQoZSl7cmV0dXJuIGI0LmhhcyhlLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIHRyKGUpe3JldHVybiAkNC5oYXMoZS50b0xvd2VyQ2FzZSgpKX1hc3luYyBmdW5jdGlvbiBsMShlLHQsbixyLG8saSl7Zm9yKGxldCBsPTA7bDxuLmxlbmd0aDtsKyspe2xldCBzPW5bbF0sYT10W2xdO2lmKCFhKWNvbnRpbnVlO2xldCB1PWUuZmluZChkPT5kLnJvdXRlLmlkPT09YS5yb3V0ZS5pZCksYz11IT1udWxsJiYhd0ModSxhKSYmKGkmJmlbYS5yb3V0ZS5pZF0pIT09dm9pZCAwO2lmKHNpKHMpJiYob3x8Yykpe2xldCBkPXJbbF07RWUoZCwiRXhwZWN0ZWQgYW4gQWJvcnRTaWduYWwgZm9yIHJldmFsaWRhdGluZyBmZXRjaGVyIGRlZmVycmVkIHJlc3VsdCIpLGF3YWl0IFNDKHMsZCxvKS50aGVuKGY9PntmJiYobltsXT1mfHxuW2xdKX0pfX19YXN5bmMgZnVuY3Rpb24gU0MoZSx0LG4pe2lmKG49PT12b2lkIDAmJihuPSExKSwhYXdhaXQgZS5kZWZlcnJlZERhdGEucmVzb2x2ZURhdGEodCkpe2lmKG4pdHJ5e3JldHVybnt0eXBlOmZ0LmRhdGEsZGF0YTplLmRlZmVycmVkRGF0YS51bndyYXBwZWREYXRhfX1jYXRjaChvKXtyZXR1cm57dHlwZTpmdC5lcnJvcixlcnJvcjpvfX1yZXR1cm57dHlwZTpmdC5kYXRhLGRhdGE6ZS5kZWZlcnJlZERhdGEuZGF0YX19fWZ1bmN0aW9uIFVtKGUpe3JldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKGUpLmdldEFsbCgiaW5kZXgiKS5zb21lKHQ9PnQ9PT0iIil9ZnVuY3Rpb24gQnAoZSx0KXtsZXQgbj10eXBlb2YgdD09InN0cmluZyI/b28odCkuc2VhcmNoOnQuc2VhcmNoO2lmKGVbZS5sZW5ndGgtMV0ucm91dGUuaW5kZXgmJlVtKG58fCIiKSlyZXR1cm4gZVtlLmxlbmd0aC0xXTtsZXQgcj1oQyhlKTtyZXR1cm4gcltyLmxlbmd0aC0xXX1mdW5jdGlvbiBzMShlKXtsZXR7Zm9ybU1ldGhvZDp0LGZvcm1BY3Rpb246bixmb3JtRW5jVHlwZTpyLHRleHQ6byxmb3JtRGF0YTppLGpzb246bH09ZTtpZighKCF0fHwhbnx8IXIpKXtpZihvIT1udWxsKXJldHVybntmb3JtTWV0aG9kOnQsZm9ybUFjdGlvbjpuLGZvcm1FbmNUeXBlOnIsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6b307aWYoaSE9bnVsbClyZXR1cm57Zm9ybU1ldGhvZDp0LGZvcm1BY3Rpb246bixmb3JtRW5jVHlwZTpyLGZvcm1EYXRhOmksanNvbjp2b2lkIDAsdGV4dDp2b2lkIDB9O2lmKGwhPT12b2lkIDApcmV0dXJue2Zvcm1NZXRob2Q6dCxmb3JtQWN0aW9uOm4sZm9ybUVuY1R5cGU6cixmb3JtRGF0YTp2b2lkIDAsanNvbjpsLHRleHQ6dm9pZCAwfX19ZnVuY3Rpb24gSGYoZSx0KXtyZXR1cm4gdD97c3RhdGU6ImxvYWRpbmciLGxvY2F0aW9uOmUsZm9ybU1ldGhvZDp0LmZvcm1NZXRob2QsZm9ybUFjdGlvbjp0LmZvcm1BY3Rpb24sZm9ybUVuY1R5cGU6dC5mb3JtRW5jVHlwZSxmb3JtRGF0YTp0LmZvcm1EYXRhLGpzb246dC5qc29uLHRleHQ6dC50ZXh0fTp7c3RhdGU6ImxvYWRpbmciLGxvY2F0aW9uOmUsZm9ybU1ldGhvZDp2b2lkIDAsZm9ybUFjdGlvbjp2b2lkIDAsZm9ybUVuY1R5cGU6dm9pZCAwLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMH19ZnVuY3Rpb24gQjQoZSx0KXtyZXR1cm57c3RhdGU6InN1Ym1pdHRpbmciLGxvY2F0aW9uOmUsZm9ybU1ldGhvZDp0LmZvcm1NZXRob2QsZm9ybUFjdGlvbjp0LmZvcm1BY3Rpb24sZm9ybUVuY1R5cGU6dC5mb3JtRW5jVHlwZSxmb3JtRGF0YTp0LmZvcm1EYXRhLGpzb246dC5qc29uLHRleHQ6dC50ZXh0fX1mdW5jdGlvbiBfcyhlLHQpe3JldHVybiBlP3tzdGF0ZToibG9hZGluZyIsZm9ybU1ldGhvZDplLmZvcm1NZXRob2QsZm9ybUFjdGlvbjplLmZvcm1BY3Rpb24sZm9ybUVuY1R5cGU6ZS5mb3JtRW5jVHlwZSxmb3JtRGF0YTplLmZvcm1EYXRhLGpzb246ZS5qc29uLHRleHQ6ZS50ZXh0LGRhdGE6dH06e3N0YXRlOiJsb2FkaW5nIixmb3JtTWV0aG9kOnZvaWQgMCxmb3JtQWN0aW9uOnZvaWQgMCxmb3JtRW5jVHlwZTp2b2lkIDAsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6dm9pZCAwLGRhdGE6dH19ZnVuY3Rpb24gVzQoZSx0KXtyZXR1cm57c3RhdGU6InN1Ym1pdHRpbmciLGZvcm1NZXRob2Q6ZS5mb3JtTWV0aG9kLGZvcm1BY3Rpb246ZS5mb3JtQWN0aW9uLGZvcm1FbmNUeXBlOmUuZm9ybUVuY1R5cGUsZm9ybURhdGE6ZS5mb3JtRGF0YSxqc29uOmUuanNvbix0ZXh0OmUudGV4dCxkYXRhOnQ/dC5kYXRhOnZvaWQgMH19ZnVuY3Rpb24gZm8oZSl7cmV0dXJue3N0YXRlOiJpZGxlIixmb3JtTWV0aG9kOnZvaWQgMCxmb3JtQWN0aW9uOnZvaWQgMCxmb3JtRW5jVHlwZTp2b2lkIDAsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6dm9pZCAwLGRhdGE6ZX19ZnVuY3Rpb24gVTQoZSx0KXt0cnl7bGV0IG49ZS5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHhDKTtpZihuKXtsZXQgcj1KU09OLnBhcnNlKG4pO2ZvcihsZXRbbyxpXW9mIE9iamVjdC5lbnRyaWVzKHJ8fHt9KSlpJiZBcnJheS5pc0FycmF5KGkpJiZ0LnNldChvLG5ldyBTZXQoaXx8W10pKX19Y2F0Y2h7fX1mdW5jdGlvbiBINChlLHQpe2lmKHQuc2l6ZT4wKXtsZXQgbj17fTtmb3IobGV0W3Isb11vZiB0KW5bcl09Wy4uLm9dO3RyeXtlLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oeEMsSlNPTi5zdHJpbmdpZnkobikpfWNhdGNoKHIpe0VpKCExLCJGYWlsZWQgdG8gc2F2ZSBhcHBsaWVkIHZpZXcgdHJhbnNpdGlvbnMgaW4gc2Vzc2lvblN0b3JhZ2UgKCIrcisiKS4iKX19fS8qKgogKiBSZWFjdCBSb3V0ZXIgdjYuMjAuMAogKgogKiBDb3B5cmlnaHQgKGMpIFJlbWl4IFNvZnR3YXJlIEluYy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICoKICogQGxpY2Vuc2UgTUlUCiAqL2Z1bmN0aW9uIEpjKCl7cmV0dXJuIEpjPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sSmMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEZkPXAuY3JlYXRlQ29udGV4dChudWxsKSxFQz1wLmNyZWF0ZUNvbnRleHQobnVsbCksQmQ9cC5jcmVhdGVDb250ZXh0KG51bGwpLFdkPXAuY3JlYXRlQ29udGV4dChudWxsKSxMaT1wLmNyZWF0ZUNvbnRleHQoe291dGxldDpudWxsLG1hdGNoZXM6W10saXNEYXRhUm91dGU6ITF9KSxDQz1wLmNyZWF0ZUNvbnRleHQobnVsbCk7ZnVuY3Rpb24gVWQoKXtyZXR1cm4gcC51c2VDb250ZXh0KFdkKSE9bnVsbH1mdW5jdGlvbiAkQygpe3JldHVybiBVZCgpfHxFZSghMSkscC51c2VDb250ZXh0KFdkKS5sb2NhdGlvbn1mdW5jdGlvbiBrQyhlKXtwLnVzZUNvbnRleHQoQmQpLnN0YXRpY3x8cC51c2VMYXlvdXRFZmZlY3QoZSl9ZnVuY3Rpb24gSG0oKXtsZXR7aXNEYXRhUm91dGU6ZX09cC51c2VDb250ZXh0KExpKTtyZXR1cm4gZT9yTSgpOlY0KCl9ZnVuY3Rpb24gVjQoKXtVZCgpfHxFZSghMSk7bGV0IGU9cC51c2VDb250ZXh0KEZkKSx7YmFzZW5hbWU6dCxuYXZpZ2F0b3I6bn09cC51c2VDb250ZXh0KEJkKSx7bWF0Y2hlczpyfT1wLnVzZUNvbnRleHQoTGkpLHtwYXRobmFtZTpvfT0kQygpLGk9SlNPTi5zdHJpbmdpZnkocEMocikpLGw9cC51c2VSZWYoITEpO3JldHVybiBrQygoKT0+e2wuY3VycmVudD0hMH0pLHAudXNlQ2FsbGJhY2soZnVuY3Rpb24oYSx1KXtpZih1PT09dm9pZCAwJiYodT17fSksIWwuY3VycmVudClyZXR1cm47aWYodHlwZW9mIGE9PSJudW1iZXIiKXtuLmdvKGEpO3JldHVybn1sZXQgYz1nQyhhLEpTT04ucGFyc2UoaSksbyx1LnJlbGF0aXZlPT09InBhdGgiKTtlPT1udWxsJiZ0IT09Ii8iJiYoYy5wYXRobmFtZT1jLnBhdGhuYW1lPT09Ii8iP3Q6QW8oW3QsYy5wYXRobmFtZV0pKSwodS5yZXBsYWNlP24ucmVwbGFjZTpuLnB1c2gpKGMsdS5zdGF0ZSx1KX0sW3QsbixpLG8sZV0pfWZ1bmN0aW9uIEs0KCl7bGV0e21hdGNoZXM6ZX09cC51c2VDb250ZXh0KExpKSx0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHQ/dC5wYXJhbXM6e319ZnVuY3Rpb24gRzQoZSx0LG4pe1VkKCl8fEVlKCExKTtsZXR7bmF2aWdhdG9yOnJ9PXAudXNlQ29udGV4dChCZCkse21hdGNoZXM6b309cC51c2VDb250ZXh0KExpKSxpPW9bby5sZW5ndGgtMV0sbD1pP2kucGFyYW1zOnt9O2kmJmkucGF0aG5hbWU7bGV0IHM9aT9pLnBhdGhuYW1lQmFzZToiLyI7aSYmaS5yb3V0ZTtsZXQgYT0kQygpLHU7aWYodCl7dmFyIGM7bGV0IGc9dHlwZW9mIHQ9PSJzdHJpbmciP29vKHQpOnQ7cz09PSIvInx8KGM9Zy5wYXRobmFtZSkhPW51bGwmJmMuc3RhcnRzV2l0aChzKXx8RWUoITEpLHU9Z31lbHNlIHU9YTtsZXQgZD11LnBhdGhuYW1lfHwiLyIsZj1zPT09Ii8iP2Q6ZC5zbGljZShzLmxlbmd0aCl8fCIvIixoPWNsKGUse3BhdGhuYW1lOmZ9KSxtPVo0KGgmJmgubWFwKGc9Pk9iamVjdC5hc3NpZ24oe30sZyx7cGFyYW1zOk9iamVjdC5hc3NpZ24oe30sbCxnLnBhcmFtcykscGF0aG5hbWU6QW8oW3Msci5lbmNvZGVMb2NhdGlvbj9yLmVuY29kZUxvY2F0aW9uKGcucGF0aG5hbWUpLnBhdGhuYW1lOmcucGF0aG5hbWVdKSxwYXRobmFtZUJhc2U6Zy5wYXRobmFtZUJhc2U9PT0iLyI/czpBbyhbcyxyLmVuY29kZUxvY2F0aW9uP3IuZW5jb2RlTG9jYXRpb24oZy5wYXRobmFtZUJhc2UpLnBhdGhuYW1lOmcucGF0aG5hbWVCYXNlXSl9KSksbyxuKTtyZXR1cm4gdCYmbT9wLmNyZWF0ZUVsZW1lbnQoV2QuUHJvdmlkZXIse3ZhbHVlOntsb2NhdGlvbjpKYyh7cGF0aG5hbWU6Ii8iLHNlYXJjaDoiIixoYXNoOiIiLHN0YXRlOm51bGwsa2V5OiJkZWZhdWx0In0sdSksbmF2aWdhdGlvblR5cGU6ZHQuUG9wfX0sbSk6bX1mdW5jdGlvbiBZNCgpe2xldCBlPW5NKCksdD1tQyhlKT9lLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0OmUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6SlNPTi5zdHJpbmdpZnkoZSksbj1lIGluc3RhbmNlb2YgRXJyb3I/ZS5zdGFjazpudWxsLG89e3BhZGRpbmc6IjAuNXJlbSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDIwMCwyMDAsMjAwLCAwLjUpIn0saT1udWxsO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQocC5GcmFnbWVudCxudWxsLHAuY3JlYXRlRWxlbWVudCgiaDIiLG51bGwsIlVuZXhwZWN0ZWQgQXBwbGljYXRpb24gRXJyb3IhIikscC5jcmVhdGVFbGVtZW50KCJoMyIse3N0eWxlOntmb250U3R5bGU6Iml0YWxpYyJ9fSx0KSxuP3AuY3JlYXRlRWxlbWVudCgicHJlIix7c3R5bGU6b30sbik6bnVsbCxpKX1jb25zdCBYND1wLmNyZWF0ZUVsZW1lbnQoWTQsbnVsbCk7Y2xhc3MgUTQgZXh0ZW5kcyBwLkNvbXBvbmVudHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnN0YXRlPXtsb2NhdGlvbjp0LmxvY2F0aW9uLHJldmFsaWRhdGlvbjp0LnJldmFsaWRhdGlvbixlcnJvcjp0LmVycm9yfX1zdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKHQpe3JldHVybntlcnJvcjp0fX1zdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHQsbil7cmV0dXJuIG4ubG9jYXRpb24hPT10LmxvY2F0aW9ufHxuLnJldmFsaWRhdGlvbiE9PSJpZGxlIiYmdC5yZXZhbGlkYXRpb249PT0iaWRsZSI/e2Vycm9yOnQuZXJyb3IsbG9jYXRpb246dC5sb2NhdGlvbixyZXZhbGlkYXRpb246dC5yZXZhbGlkYXRpb259OntlcnJvcjp0LmVycm9yfHxuLmVycm9yLGxvY2F0aW9uOm4ubG9jYXRpb24scmV2YWxpZGF0aW9uOnQucmV2YWxpZGF0aW9ufHxuLnJldmFsaWRhdGlvbn19Y29tcG9uZW50RGlkQ2F0Y2godCxuKXtjb25zb2xlLmVycm9yKCJSZWFjdCBSb3V0ZXIgY2F1Z2h0IHRoZSBmb2xsb3dpbmcgZXJyb3IgZHVyaW5nIHJlbmRlciIsdCxuKX1yZW5kZXIoKXtyZXR1cm4gdGhpcy5zdGF0ZS5lcnJvcj9wLmNyZWF0ZUVsZW1lbnQoTGkuUHJvdmlkZXIse3ZhbHVlOnRoaXMucHJvcHMucm91dGVDb250ZXh0fSxwLmNyZWF0ZUVsZW1lbnQoQ0MuUHJvdmlkZXIse3ZhbHVlOnRoaXMuc3RhdGUuZXJyb3IsY2hpbGRyZW46dGhpcy5wcm9wcy5jb21wb25lbnR9KSk6dGhpcy5wcm9wcy5jaGlsZHJlbn19ZnVuY3Rpb24gSjQoZSl7bGV0e3JvdXRlQ29udGV4dDp0LG1hdGNoOm4sY2hpbGRyZW46cn09ZSxvPXAudXNlQ29udGV4dChGZCk7cmV0dXJuIG8mJm8uc3RhdGljJiZvLnN0YXRpY0NvbnRleHQmJihuLnJvdXRlLmVycm9yRWxlbWVudHx8bi5yb3V0ZS5FcnJvckJvdW5kYXJ5KSYmKG8uc3RhdGljQ29udGV4dC5fZGVlcGVzdFJlbmRlcmVkQm91bmRhcnlJZD1uLnJvdXRlLmlkKSxwLmNyZWF0ZUVsZW1lbnQoTGkuUHJvdmlkZXIse3ZhbHVlOnR9LHIpfWZ1bmN0aW9uIFo0KGUsdCxuKXt2YXIgcjtpZih0PT09dm9pZCAwJiYodD1bXSksbj09PXZvaWQgMCYmKG49bnVsbCksZT09bnVsbCl7dmFyIG87aWYoKG89bikhPW51bGwmJm8uZXJyb3JzKWU9bi5tYXRjaGVzO2Vsc2UgcmV0dXJuIG51bGx9bGV0IGk9ZSxsPShyPW4pPT1udWxsP3ZvaWQgMDpyLmVycm9ycztpZihsIT1udWxsKXtsZXQgcz1pLmZpbmRJbmRleChhPT5hLnJvdXRlLmlkJiYobD09bnVsbD92b2lkIDA6bFthLnJvdXRlLmlkXSkpO3M+PTB8fEVlKCExKSxpPWkuc2xpY2UoMCxNYXRoLm1pbihpLmxlbmd0aCxzKzEpKX1yZXR1cm4gaS5yZWR1Y2VSaWdodCgocyxhLHUpPT57bGV0IGM9YS5yb3V0ZS5pZD9sPT1udWxsP3ZvaWQgMDpsW2Eucm91dGUuaWRdOm51bGwsZD1udWxsO24mJihkPWEucm91dGUuZXJyb3JFbGVtZW50fHxYNCk7bGV0IGY9dC5jb25jYXQoaS5zbGljZSgwLHUrMSkpLGg9KCk9PntsZXQgbTtyZXR1cm4gYz9tPWQ6YS5yb3V0ZS5Db21wb25lbnQ/bT1wLmNyZWF0ZUVsZW1lbnQoYS5yb3V0ZS5Db21wb25lbnQsbnVsbCk6YS5yb3V0ZS5lbGVtZW50P209YS5yb3V0ZS5lbGVtZW50Om09cyxwLmNyZWF0ZUVsZW1lbnQoSjQse21hdGNoOmEscm91dGVDb250ZXh0OntvdXRsZXQ6cyxtYXRjaGVzOmYsaXNEYXRhUm91dGU6biE9bnVsbH0sY2hpbGRyZW46bX0pfTtyZXR1cm4gbiYmKGEucm91dGUuRXJyb3JCb3VuZGFyeXx8YS5yb3V0ZS5lcnJvckVsZW1lbnR8fHU9PT0wKT9wLmNyZWF0ZUVsZW1lbnQoUTQse2xvY2F0aW9uOm4ubG9jYXRpb24scmV2YWxpZGF0aW9uOm4ucmV2YWxpZGF0aW9uLGNvbXBvbmVudDpkLGVycm9yOmMsY2hpbGRyZW46aCgpLHJvdXRlQ29udGV4dDp7b3V0bGV0Om51bGwsbWF0Y2hlczpmLGlzRGF0YVJvdXRlOiEwfX0pOmgoKX0sbnVsbCl9dmFyIGJDPWZ1bmN0aW9uKGUpe3JldHVybiBlLlVzZUJsb2NrZXI9InVzZUJsb2NrZXIiLGUuVXNlUmV2YWxpZGF0b3I9InVzZVJldmFsaWRhdG9yIixlLlVzZU5hdmlnYXRlU3RhYmxlPSJ1c2VOYXZpZ2F0ZSIsZX0oYkN8fHt9KSxaYz1mdW5jdGlvbihlKXtyZXR1cm4gZS5Vc2VCbG9ja2VyPSJ1c2VCbG9ja2VyIixlLlVzZUxvYWRlckRhdGE9InVzZUxvYWRlckRhdGEiLGUuVXNlQWN0aW9uRGF0YT0idXNlQWN0aW9uRGF0YSIsZS5Vc2VSb3V0ZUVycm9yPSJ1c2VSb3V0ZUVycm9yIixlLlVzZU5hdmlnYXRpb249InVzZU5hdmlnYXRpb24iLGUuVXNlUm91dGVMb2FkZXJEYXRhPSJ1c2VSb3V0ZUxvYWRlckRhdGEiLGUuVXNlTWF0Y2hlcz0idXNlTWF0Y2hlcyIsZS5Vc2VSZXZhbGlkYXRvcj0idXNlUmV2YWxpZGF0b3IiLGUuVXNlTmF2aWdhdGVTdGFibGU9InVzZU5hdmlnYXRlIixlLlVzZVJvdXRlSWQ9InVzZVJvdXRlSWQiLGV9KFpjfHx7fSk7ZnVuY3Rpb24gcTQoZSl7bGV0IHQ9cC51c2VDb250ZXh0KEZkKTtyZXR1cm4gdHx8RWUoITEpLHR9ZnVuY3Rpb24gZU0oZSl7bGV0IHQ9cC51c2VDb250ZXh0KEVDKTtyZXR1cm4gdHx8RWUoITEpLHR9ZnVuY3Rpb24gdE0oZSl7bGV0IHQ9cC51c2VDb250ZXh0KExpKTtyZXR1cm4gdHx8RWUoITEpLHR9ZnVuY3Rpb24gVEMoZSl7bGV0IHQ9dE0oKSxuPXQubWF0Y2hlc1t0Lm1hdGNoZXMubGVuZ3RoLTFdO3JldHVybiBuLnJvdXRlLmlkfHxFZSghMSksbi5yb3V0ZS5pZH1mdW5jdGlvbiBuTSgpe3ZhciBlO2xldCB0PXAudXNlQ29udGV4dChDQyksbj1lTShaYy5Vc2VSb3V0ZUVycm9yKSxyPVRDKFpjLlVzZVJvdXRlRXJyb3IpO3JldHVybiB0fHwoKGU9bi5lcnJvcnMpPT1udWxsP3ZvaWQgMDplW3JdKX1mdW5jdGlvbiByTSgpe2xldHtyb3V0ZXI6ZX09cTQoYkMuVXNlTmF2aWdhdGVTdGFibGUpLHQ9VEMoWmMuVXNlTmF2aWdhdGVTdGFibGUpLG49cC51c2VSZWYoITEpO3JldHVybiBrQygoKT0+e24uY3VycmVudD0hMH0pLHAudXNlQ2FsbGJhY2soZnVuY3Rpb24obyxpKXtpPT09dm9pZCAwJiYoaT17fSksbi5jdXJyZW50JiYodHlwZW9mIG89PSJudW1iZXIiP2UubmF2aWdhdGUobyk6ZS5uYXZpZ2F0ZShvLEpjKHtmcm9tUm91dGVJZDp0fSxpKSkpfSxbZSx0XSl9ZnVuY3Rpb24gb00oZSl7bGV0e2Jhc2VuYW1lOnQ9Ii8iLGNoaWxkcmVuOm49bnVsbCxsb2NhdGlvbjpyLG5hdmlnYXRpb25UeXBlOm89ZHQuUG9wLG5hdmlnYXRvcjppLHN0YXRpYzpsPSExfT1lO1VkKCkmJkVlKCExKTtsZXQgcz10LnJlcGxhY2UoL15cLyovLCIvIiksYT1wLnVzZU1lbW8oKCk9Pih7YmFzZW5hbWU6cyxuYXZpZ2F0b3I6aSxzdGF0aWM6bH0pLFtzLGksbF0pO3R5cGVvZiByPT0ic3RyaW5nIiYmKHI9b28ocikpO2xldHtwYXRobmFtZTp1PSIvIixzZWFyY2g6Yz0iIixoYXNoOmQ9IiIsc3RhdGU6Zj1udWxsLGtleTpoPSJkZWZhdWx0In09cixtPXAudXNlTWVtbygoKT0+e2xldCBnPUphKHUscyk7cmV0dXJuIGc9PW51bGw/bnVsbDp7bG9jYXRpb246e3BhdGhuYW1lOmcsc2VhcmNoOmMsaGFzaDpkLHN0YXRlOmYsa2V5Omh9LG5hdmlnYXRpb25UeXBlOm99fSxbcyx1LGMsZCxmLGgsb10pO3JldHVybiBtPT1udWxsP251bGw6cC5jcmVhdGVFbGVtZW50KEJkLlByb3ZpZGVyLHt2YWx1ZTphfSxwLmNyZWF0ZUVsZW1lbnQoV2QuUHJvdmlkZXIse2NoaWxkcmVuOm4sdmFsdWU6bX0pKX1uZXcgUHJvbWlzZSgoKT0+e30pO2Z1bmN0aW9uIGlNKGUpe2xldCB0PXtoYXNFcnJvckJvdW5kYXJ5OmUuRXJyb3JCb3VuZGFyeSE9bnVsbHx8ZS5lcnJvckVsZW1lbnQhPW51bGx9O3JldHVybiBlLkNvbXBvbmVudCYmT2JqZWN0LmFzc2lnbih0LHtlbGVtZW50OnAuY3JlYXRlRWxlbWVudChlLkNvbXBvbmVudCksQ29tcG9uZW50OnZvaWQgMH0pLGUuRXJyb3JCb3VuZGFyeSYmT2JqZWN0LmFzc2lnbih0LHtlcnJvckVsZW1lbnQ6cC5jcmVhdGVFbGVtZW50KGUuRXJyb3JCb3VuZGFyeSksRXJyb3JCb3VuZGFyeTp2b2lkIDB9KSx0fWNvbnN0IE5DPWVlLmNyZWF0ZUNvbnRleHQobnVsbCksbE09ZT0+e3ZhciBzLGE7Y29uc3QgdD1lZS51c2VDb250ZXh0KE5DKSxbbixyXT0kbi5zcGxpdE1vZHVsZUlkQW5kTW9kdWxlUGF0aChlKSxvPShzPXQ9PW51bGw/dm9pZCAwOnRbbl0pPT1udWxsP3ZvaWQgMDpzLnNvdXJjZSxpPShhPXQ9PW51bGw/dm9pZCAwOnRbbl0pPT1udWxsP3ZvaWQgMDphLnNjaGVtYTtpZighb3x8IWkpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG1vZHVsZTogIituKTtjb25zdCBsPSRuLnJlc29sdmVQYXRoKHIsbyxpKTtyZXR1cm57bW9kdWxlSWQ6bixtb2R1bGVTb3VyY2U6bC5zb3VyY2UsbW9kdWxlU2NoZW1hOmwuc2NoZW1hfX0sc009KHt2YWxBcGk6ZX0pPT57dmFyIFMsaztjb25zdHsiKiI6dH09SzQoKSxbbixyXT1wLnVzZVN0YXRlKG51bGwpLFtvLGldPXAudXNlU3RhdGUobnVsbCksW2wsc109cC51c2VTdGF0ZSgpLFthXT1sPyRuLnNwbGl0TW9kdWxlSWRBbmRNb2R1bGVQYXRoKGwpOlt2b2lkIDAsdm9pZCAwXSx1PWEmJigoUz1uPT1udWxsP3ZvaWQgMDpuW2FdKT09bnVsbD92b2lkIDA6Uy5zb3VyY2UpLGM9YSYmKChrPW49PW51bGw/dm9pZCAwOm5bYV0pPT1udWxsP3ZvaWQgMDprLnNjaGVtYSksZD1PYmplY3QuZW50cmllcyhufHx7fSkuZmxhdE1hcCgoWyxUXSk9PlQuZXJyb3JzP1QuZXJyb3JzLmZhdGFsP1QuZXJyb3JzLmZhdGFsOltdOltdKSxmPU9iamVjdC5lbnRyaWVzKG58fHt9KS5mbGF0TWFwKChbLFRdKT0+VC5lcnJvcnMmJlQuZXJyb3JzLnZhbGlkYXRpb24/W1QuZXJyb3JzLnZhbGlkYXRpb25dOltdKTtpZihkJiZkLmxlbmd0aD4wKXtjb25zdCBUPWQubGVuZ3RoPT09MT9kWzBdLm1lc3NhZ2U6YE11bHRpcGxlIGVycm9ycyBkZXRlY3RlZDoKJHtkLm1hcCgoTixEKT0+YCR7RCsxfS4gJHtOLm1lc3NhZ2V9YCkuam9pbihgCmApfQoKU2hvd2luZyBzdGFjayB0cmFjZSBvZjogMC4gJHtkWzBdLm1lc3NhZ2V9YCxiPW5ldyBFcnJvcihUKTt0aHJvdyBiLnN0YWNrPWRbMF0uc3RhY2ssYn1mJiZmLmxlbmd0aD4wJiZjb25zb2xlLndhcm4oIlZhbCBlbmNvdW50ZXJlZCB2YWxpZGF0aW9uIGVycm9yczoiLGYpLHAudXNlRWZmZWN0KCgpPT57cyh0P2AvJHt0fWA6bCl9LFt0XSk7Y29uc3RbaCxtXT1wLnVzZVN0YXRlKG51bGwpO3AudXNlRWZmZWN0KCgpPT57dHJ5e25ldyBXZWJTb2NrZXQoYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbi5yZXBsYWNlKCJodHRwOi8vIiwid3M6Ly8iKX0vX25leHQvd2VicGFjay1obXJgKS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixiPT57bGV0IE47dHJ5e049SlNPTi5wYXJzZShiLmRhdGEpfWNhdGNoe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBwYXJzZSBITVIiKX10eXBlb2YoTj09bnVsbD92b2lkIDA6Ti5oYXNoKT09InN0cmluZyImJihOPT1udWxsP3ZvaWQgMDpOLmFjdGlvbik9PT0iYnVpbHQiJiZtKE4uaGFzaCl9KX1jYXRjaChUKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBpbml0aWFsaXplIEhNUiIsVCl9fSxbXSkscC51c2VFZmZlY3QoKCk9Pntjb25zb2xlLmxvZygiKFJlKS1mZXRjaGluZyBtb2R1bGVzIiksZS5nZXRUcmVlKHtwYXRjaDohMCxpbmNsdWRlU2NoZW1hOiEwLGluY2x1ZGVTb3VyY2U6ITB9KS50aGVuKFQ9PntGcy5pc09rKFQpP3IoVC52YWx1ZS5tb2R1bGVzKTooaSgiQ291bGQgbm90IGxvYWQgbW9kdWxlczogIitULmVycm9yLm1lc3NhZ2UpLGNvbnNvbGUuZXJyb3IoVC5lcnJvcikpfSl9LFtoXSk7Y29uc3QgZz1IbSgpLFtfLHZdPVFPKCk7cC51c2VFZmZlY3QoKCk9Pntjb25zdCBUPWI9Pntjb25zb2xlLmxvZygicG9wc3RhdGUiLGIpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixUKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsVCl9fSxbXSk7Y29uc3QgeT1lZS51c2VSZWYobnVsbCkseD1wLnVzZUNhbGxiYWNrKFQ9PmFzeW5jIGI9Pntjb25zdFtOLERdPSRuLnNwbGl0TW9kdWxlSWRBbmRNb2R1bGVQYXRoKFQpLE09YXdhaXQgYigkbi5jcmVhdGVQYXRjaEpTT05QYXRoKEQpKTtyZXR1cm4gZS5wb3N0UGF0Y2hlcyhOLE0pLnRoZW4oaj0+e2lmKEZzLmlzRXJyKGopKXRocm93IGouZXJyb3I7aWYoIWgpcmV0dXJuIGUuZ2V0VHJlZSh7dHJlZVBhdGg6TixwYXRjaDohMCxpbmNsdWRlU2NoZW1hOiEwLGluY2x1ZGVTb3VyY2U6ITB9KS50aGVuKEI9PntGcy5pc09rKEIpP3IoQi52YWx1ZS5tb2R1bGVzKTooaSgiQ291bGQgbm90IGxvYWQgbW9kdWxlczogIitCLmVycm9yLm1lc3NhZ2UpLGNvbnNvbGUuZXJyb3IoQi5lcnJvcikpfSl9KS5jYXRjaChqPT57Y29uc29sZS5lcnJvcihqKX0pfSxbXSk7cmV0dXJuIHcuanN4KGNFLlByb3ZpZGVyLHt2YWx1ZTp7dGhlbWU6XyxzZXRUaGVtZTp2LGFwaTplLGVkaXRNb2RlOiJmdWxsIixzZXNzaW9uOntzdGF0dXM6Im5vdC1hc2tlZCJ9LGhpZ2hsaWdodDohMSxzZXRIaWdobGlnaHQ6KCk9Pnt9LHNldEVkaXRNb2RlOigpPT57fSxzZXRXaW5kb3dTaXplOigpPT57fX0sY2hpbGRyZW46dy5qc3hzKCJkaXYiLHtpZDoidmFsLWZ1bGxzY3JlZW4tY29udGFpbmVyIixjbGFzc05hbWU6InJlbGF0aXZlIGZvbnQtc2VyaWYgYW50aWFsaWFzZWQiLCJkYXRhLW1vZGUiOl8sY2hpbGRyZW46W3cuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZpeGVkIC10cmFuc2xhdGUteC0xLzIgei1vdmVybGF5IGxlZnQtMS8yIGJvdHRvbS00IixjaGlsZHJlbjp3LmpzeChLTyx7YXBpOmV9KX0pLHcuanN4KCJkaXYiLHtpZDoidmFsLWZ1bGxzY3JlZW4taG92ZXIiLHJlZjp5fSksdy5qc3goUkMuUHJvdmlkZXIse3ZhbHVlOntob3ZlckVsZW06eT09bnVsbD92b2lkIDA6eS5jdXJyZW50fSxjaGlsZHJlbjp3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LXByaW1hcnkgYmctYmFja2dyb3VuZCIsY2hpbGRyZW46dy5qc3hzKFdzLHtjaGlsZHJlbjpbdy5qc3goImRpdiIse2NsYXNzTmFtZToicHgtNCBoLVs1MHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIsY2hpbGRyZW46dy5qc3goc0Mse30pfSksdy5qc3goQnMse2NsYXNzTmFtZToicHgtNCIsY2hpbGRyZW46bj93LmpzeChtTSx7cGF0aHM6T2JqZWN0LmtleXMobiksc2V0U2VsZWN0ZWRNb2R1bGVJZDpUPT57ZyhUKX19KTohbyYmdy5qc3goImRpdiIse2NsYXNzTmFtZToicHktNCIsY2hpbGRyZW46IkxvYWRpbmcuLi4ifSl9KSx3LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCB3LWZ1bGwgaC1bNTBweF0gZ2FwLTIgZm9udC1zZXJpZiB0ZXh0LXhzIixjaGlsZHJlbjpbdy5qc3goImJ1dHRvbiIse29uQ2xpY2s6KCk9PntoaXN0b3J5LmJhY2soKX0sY2hpbGRyZW46dy5qc3goRE8se30pfSksdy5qc3goInAiLHtjaGlsZHJlbjpsfHwiLyJ9KV19KSx3LmpzeHMoImRpdiIse2NsYXNzTmFtZToicC00IixjaGlsZHJlbjpbbyYmdy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InRleHQtbGcgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIixjaGlsZHJlbjpbIkVSUk9SOiAiLG9dfSksbiYmbCYmYSYmdSE9PXZvaWQgMCYmYyE9PXZvaWQgMCYmdy5qc3goTkMuUHJvdmlkZXIse3ZhbHVlOm4sY2hpbGRyZW46dy5qc3godU0se3BhdGg6bCxzb3VyY2U6dSxzY2hlbWE6YyxzZXRTZWxlY3RlZFBhdGg6cyxpbml0T25TdWJtaXQ6eH0pfSldfSldfSl9KX0pXX0pfSl9LFJDPWVlLmNyZWF0ZUNvbnRleHQoe2hvdmVyRWxlbTpudWxsfSksYU09KCk9PmVlLnVzZUNvbnRleHQoUkMpO2Z1bmN0aW9uIHVNKHtwYXRoOmUsc291cmNlOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Om99KXtjb25zdFssaV09JG4uc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGgoZSksbD0kbi5yZXNvbHZlUGF0aChpLHQsbik7aWYoIWwpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCByZXNvbHZlIG1vZHVsZTogIitlKTtyZXR1cm4gdy5qc3goUEMse3BhdGg6ZSxzb3VyY2U6bC5zb3VyY2Usc2NoZW1hOmwuc2NoZW1hLHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDpvLHRvcDohMH0pfWZ1bmN0aW9uIFBDKHtwYXRoOmUsc291cmNlOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnIsZmllbGQ6byxpbml0T25TdWJtaXQ6aSx0b3A6bH0pe3JldHVybiB0PT09bnVsbHx8bi5vcHQ/dy5qc3goaE0se3BhdGg6ZSxzb3VyY2U6dCxzY2hlbWE6bixmaWVsZDpvLGluaXRPblN1Ym1pdDppLHNldFNlbGVjdGVkUGF0aDpyfSk6bi50eXBlPT09Im9iamVjdCI/dHlwZW9mIHQhPSJvYmplY3QifHxlYSh0KT93LmpzeHMoImRpdiIse2NoaWxkcmVuOlsiRVJST1I6IGV4cGVjdGVkIG9iamVjdCwgYnV0IGZvdW5kICIsdHlwZW9mIHRdfSk6dy5qc3goT0Mse3NvdXJjZTp0LHBhdGg6ZSxzY2hlbWE6bixpbml0T25TdWJtaXQ6aSxzZXRTZWxlY3RlZFBhdGg6cix0b3A6bH0pOm4udHlwZT09PSJhcnJheSI/dHlwZW9mIHQhPSJvYmplY3QifHwhZWEodCk/dy5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbIkVSUk9SOiBleHBlY3RlZCBhcnJheSwgYnV0IGZvdW5kICIsdHlwZW9mIHRdfSk6dy5qc3goQUMse3NvdXJjZTp0LHBhdGg6ZSxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cn0pOm4udHlwZT09PSJyZWNvcmQiP3R5cGVvZiB0IT0ib2JqZWN0Ij93LmpzeHMoImRpdiIse2NoaWxkcmVuOlsiRVJST1I6IGV4cGVjdGVkIG9iamVjdCBmb3IgIixuLnR5cGUsIiwgYnV0IGZvdW5kICIsdHlwZW9mIHRdfSk6ZWEodCk/dy5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbIkVSUk9SOiBkaWQgbm90IGV4cGVjdCBhcnJheSBmb3IgIixuLnR5cGVdfSk6dy5qc3goY00se3NvdXJjZTp0LHBhdGg6ZSxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cn0pOncuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJweS0yIGdhcC15LTQiLGNoaWxkcmVuOlt3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWxlZnQiLGNoaWxkcmVuOm98fGV9KSx3LmpzeChsQyx7cGF0aDplLGRpc2FibGVkOiExLHNvdXJjZTp0LHNjaGVtYTpuLG9uU3VibWl0OmkoZSl9KV19KX1mdW5jdGlvbiBPQyh7cGF0aDplLHNvdXJjZTp0LHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDpvLHRvcDppfSl7cmV0dXJuIHcuanN4KCJkaXYiLHtjbGFzc05hbWU6dmQoImZsZXggZmxleC1jb2wgZ2FwLXktOCIseyJib3JkZXItbC0yIGJvcmRlci1ib3JkZXIgcGwtNiI6IWl9KSxjaGlsZHJlbjpPYmplY3QuZW50cmllcyhuLml0ZW1zKS5tYXAoKFtsLHNdKT0+e2NvbnN0IGE9QWEoZSxsKTtyZXR1cm4gdy5qc3goUEMse3BhdGg6YSxzb3VyY2U6dFtsXSxzY2hlbWE6cyxzZXRTZWxlY3RlZFBhdGg6cixmaWVsZDpsLGluaXRPblN1Ym1pdDpvfSxhKX0pfSxlKX1mdW5jdGlvbiBjTSh7cGF0aDplLHNvdXJjZTp0LHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyfSl7Y29uc3Qgbz1IbSgpO3JldHVybiB3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC00IHAtMiIsY2hpbGRyZW46T2JqZWN0LmVudHJpZXModCkubWFwKChbaSxsXSk9Pntjb25zdCBzPUFhKGUsaSk7cmV0dXJuIHcuanN4KCJidXR0b24iLHtvbkNsaWNrOigpPT57cihzKSxvKHMpfSxjaGlsZHJlbjp3LmpzeChkTSx7cmVjb3JkS2V5OmkscGF0aDpzLHNvdXJjZTpsLHNjaGVtYTpuLml0ZW19KX0scyl9KX0sZSl9Y29uc3QgV3A9MTcwO2Z1bmN0aW9uIGRNKHtyZWNvcmRLZXk6ZSxwYXRoOnQsc291cmNlOm4sc2NoZW1hOnJ9KXtjb25zdCBvPWVlLnVzZVJlZihudWxsKSxbaSxsXT1wLnVzZVN0YXRlKCExKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntvLmN1cnJlbnQmJm8uY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ+PVdwJiZsKCEwKX0sW10pLHcuanN4cyhCbSx7cmVmOm8sY2xhc3NOYW1lOiJyZWxhdGl2ZSBweC00IHB0LTIgcGItNCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyIGdhcC15LTIiLHN0eWxlOnttYXhIZWlnaHQ6V3B9LGNoaWxkcmVuOlt3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwYi00IGZvbnQtc2VyaWYgdGV4dC1sZWZ0IHRleHQtYWNjZW50IixjaGlsZHJlbjplfSksdy5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC14cyIsY2hpbGRyZW46dy5qc3goVm0se3BhdGg6dCxzb3VyY2U6bixzY2hlbWE6cn0pfSksaSYmdy5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHctZnVsbCBoLVsyMHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tdHJhbnNwYXJlbnQgdG8tYmFja2dyb3VuZCJ9KV19LHQpfWZ1bmN0aW9uIEFDKHtwYXRoOmUsc291cmNlOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnJ9KXtjb25zdCBvPUhtKCk7cmV0dXJuIHcuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTQgcC0yIixjaGlsZHJlbjp0Lm1hcCgoaSxsKT0+e2NvbnN0IHM9QWEoZSxsKTtyZXR1cm4gdy5qc3goImJ1dHRvbiIse29uQ2xpY2s6KCk9PntyKHMpLG8ocyl9LGNoaWxkcmVuOncuanN4KGZNLHtpbmRleDpsLHBhdGg6cyxzb3VyY2U6aSxzY2hlbWE6bi5pdGVtfSxzKX0scyl9KX0sZSl9Y29uc3QgYTE9V3A7ZnVuY3Rpb24gZk0oe2luZGV4OmUscGF0aDp0LHNvdXJjZTpuLHNjaGVtYTpyfSl7Y29uc3Qgbz1lZS51c2VSZWYobnVsbCksW2ksbF09cC51c2VTdGF0ZSghMSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57by5jdXJyZW50JiZvLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0Pj1hMSYmbCghMCl9LFtdKSx3LmpzeHMoQm0se3JlZjpvLGNsYXNzTmFtZToicmVsYXRpdmUgcHgtNCBwdC0yIHBiLTQgb3ZlcmZsb3ctaGlkZGVuIGJvcmRlciBnYXAteS0yIixzdHlsZTp7bWF4SGVpZ2h0OmExfSxjaGlsZHJlbjpbdy5qc3goImRpdiIse2NsYXNzTmFtZToicGItNCBmb250LXNlcmlmIHRleHQtbGVmdCB1cHBlcmNhc2UgdGV4dC1hY2NlbnQiLGNoaWxkcmVuOmUrMTwxMD9gMCR7ZSsxfWA6ZSsxfSksdy5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC14cyIsY2hpbGRyZW46dy5qc3goVm0se3BhdGg6dCxzb3VyY2U6bixzY2hlbWE6cn0pfSksaSYmdy5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHctZnVsbCBoLVsyMHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tdHJhbnNwYXJlbnQgdG8tYmFja2dyb3VuZCJ9KV19KX1mdW5jdGlvbiBBYShlLHQpe2NvbnN0IG49JG4uY3JlYXRlVmFsUGF0aE9mSXRlbShlLHQpO2lmKCFuKXRocm93IEVycm9yKGBDb3VsZCBub3QgY3JlYXRlIHZhbCBwYXRoOiAke2V9IG9mICR7dD09bnVsbD92b2lkIDA6dC50b1N0cmluZygpfWApO3JldHVybiBufWZ1bmN0aW9uIFZtKHtwYXRoOmUsc291cmNlOnQsc2NoZW1hOm59KXtjb25zdFtyLG9dPXAudXNlU3RhdGUobnVsbCkse2hvdmVyRWxlbTppfT1hTSgpO2lmKG4udHlwZT09PSJvYmplY3QiKXJldHVybiB3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy1bbWluLWNvbnRlbnRfMWZyXSBnYXAtMiB0ZXh0LWxlZnQiLGNoaWxkcmVuOk9iamVjdC5lbnRyaWVzKG4uaXRlbXMpLm1hcCgoW2xdKT0+dy5qc3hzKHAuRnJhZ21lbnQse2NoaWxkcmVuOlt3LmpzeHMoInNwYW4iLHtjbGFzc05hbWU6InRleHQtbXV0ZWQiLGNoaWxkcmVuOltsLCI6Il19KSx3LmpzeCgic3BhbiIse2NoaWxkcmVuOncuanN4KFZtLHtzb3VyY2U6KHQ9PW51bGw/dm9pZCAwOnRbbF0pPz9udWxsLHNjaGVtYTpuLml0ZW1zW2xdLHBhdGg6QWEoZSxsKX0pfSldfSxBYShlLGwpKSl9LGUpO2lmKG4udHlwZT09PSJhcnJheSIpcmV0dXJuIHQ9PT1udWxsP3cuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46IkVtcHR5In0sZSk6QXJyYXkuaXNBcnJheSh0KT93LmpzeHMoInNwYW4iLHtjaGlsZHJlbjpbdy5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjp0Lmxlbmd0aH0pLHcuanN4KCJzcGFuIix7Y2hpbGRyZW46dC5sZW5ndGg9PT0xPyIgaXRlbSI6IiBpdGVtcyJ9KV19LGUpOncuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJweC0yIGJnLWRlc3RydWN0aXZlIHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCIsY2hpbGRyZW46IlVua25vd24gbGVuZ3RoIn0sZSk7aWYobi50eXBlPT09InJpY2h0ZXh0IilyZXR1cm4gdD09PW51bGw/dy5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjoiRW1wdHkifSxlKTp0eXBlb2YgdCE9Im9iamVjdCI/dy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InAtNCB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQgYmctZGVzdHJ1Y3RpdmUiLGNoaWxkcmVuOlsiRVJST1I6ICIsdHlwZW9mIHQsIiBub3QgYW4gb2JqZWN0Il19LGUpOiEoS3QgaW4gdCl8fHRbS3RdIT09InJpY2h0ZXh0Ij93LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGJnLWRlc3RydWN0aXZlIixjaGlsZHJlbjoiRVJST1I6IG9iamVjdCBpcyBub3QgcmljaHRleHQifSxlKTp3LmpzeCh2TSx7Y2hpbGRyZW46dl8odCl9LGUpO2lmKG4udHlwZT09PSJzdHJpbmciKXJldHVybiB0PT09bnVsbD93LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOiJFbXB0eSJ9LGUpOncuanN4KCJzcGFuIix7Y2hpbGRyZW46dH0pO2lmKG4udHlwZT09PSJpbWFnZSIpe2lmKHQ9PT1udWxsKXJldHVybiB3LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOiJFbXB0eSJ9LGUpO2lmKHR5cGVvZiB0IT0ib2JqZWN0IilyZXR1cm4gdy5qc3goImRpdiIse2NsYXNzTmFtZToicC00IHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCBiZy1kZXN0cnVjdGl2ZSIsY2hpbGRyZW46IkVSUk9SOiBub3QgYW4gb2JqZWN0In0sZSk7aWYoISh2biBpbiB0KXx8dHlwZW9mIHRbdm5dIT0ic3RyaW5nIilyZXR1cm4gdy5qc3goImRpdiIse2NsYXNzTmFtZToicC00IHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCBiZy1kZXN0cnVjdGl2ZSIsY2hpbGRyZW46IkVSUk9SOiBvYmplY3QgaXMgbm90IGFuIGltYWdlIn0sZSk7Y29uc3QgbD0kbi5jb252ZXJ0RmlsZVNvdXJjZSh0KS51cmw7cmV0dXJuIHcuanN4cygic3BhbiIse29uTW91c2VPdmVyOnM9PntvKHt4OnMuY2xpZW50WCx5OnMuY2xpZW50WX0pfSxvbk1vdXNlTGVhdmU6KCk9PntvKG51bGwpfSxjbGFzc05hbWU6InJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTEiLGNoaWxkcmVuOlt3LmpzeCgiYSIse2hyZWY6bCxjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB1bmRlcmxpbmUgdHJ1bmNhdGUgIixjaGlsZHJlbjp0W3ZuXX0pLHImJmkmJk5yLmNyZWF0ZVBvcnRhbCh3LmpzeCgiaW1nIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB6LVs1XSBtYXgtdy1bMTB2d10iLHN0eWxlOntsZWZ0OnIueCsxMCx0b3A6ci55KzEwfSxzcmM6bH0pLGkpXX0sZSl9ZWxzZXtpZihuLnR5cGU9PT0iYm9vbGVhbiIpcmV0dXJuIHQ9PT1udWxsP3cuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46IkVtcHR5In0sZSk6dy5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjp0PyJ0cnVlIjoiZmFsc2UifSxlKTtpZihuLnR5cGU9PT0ibnVtYmVyIilyZXR1cm4gdD09PW51bGw/dy5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjoiRW1wdHkifSxlKTp3LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOnQudG9TdHJpbmcoKX0pO2lmKG4udHlwZT09PSJrZXlPZiIpcmV0dXJuIHQ9PT1udWxsP3cuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46IkVtcHR5In0sZSk6dy5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjp0LnRvU3RyaW5nKCl9LGUpfXJldHVybiB3LmpzeHMoImRpdiIse2NoaWxkcmVuOlsiVE9ETzogIixuLnR5cGVdfSxlKX1mdW5jdGlvbiBoTSh7cGF0aDplLHNvdXJjZTp0LHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDpvLGZpZWxkOml9KXtjb25zdFtsLHNdPXAudXNlU3RhdGUodCE9PW51bGwpO3JldHVybiB3LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAteS02IixjaGlsZHJlbjpbaT93LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAteC00IixjaGlsZHJlbjpbdy5qc3goSXAse2NoZWNrZWQ6bCxvbkNsaWNrOigpPT57cyhhPT4hYSl9fSksdy5qc3goInNwYW4iLHtjaGlsZHJlbjppfSldfSk6dy5qc3goSXAse2NoZWNrZWQ6bCxvbkNsaWNrOigpPT57cyhhPT4hYSl9fSksbCYmdy5qc3gocE0se3NvdXJjZTp0LHNjaGVtYTpuLHBhdGg6ZSxzZXRTZWxlY3RlZFBhdGg6cixpbml0T25TdWJtaXQ6b30pXX0sZSl9ZnVuY3Rpb24gcE0oe3NvdXJjZTplLHBhdGg6dCxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cixpbml0T25TdWJtaXQ6b30pe2lmKG4udHlwZT09PSJhcnJheSIpe2lmKHR5cGVvZiBlPT0ib2JqZWN0IiYmKGU9PT1udWxsfHxlYShlKSkpcmV0dXJuIHcuanN4KEFDLHtzb3VyY2U6ZT09PW51bGw/W106ZSxwYXRoOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnJ9KX1lbHNlIGlmKG4udHlwZT09PSJvYmplY3QiKXtpZih0eXBlb2YgZT09Im9iamVjdCImJihlPT09bnVsbHx8IWVhKGUpKSlyZXR1cm4gdy5qc3goT0Mse3NvdXJjZTplLHBhdGg6dCxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cixpbml0T25TdWJtaXQ6b30pfWVsc2UgaWYobi50eXBlPT09InJpY2h0ZXh0Inx8bi50eXBlPT09InN0cmluZyJ8fG4udHlwZT09PSJpbWFnZSJ8fG4udHlwZT09PSJudW1iZXIifHxuLnR5cGU9PT0ia2V5T2YiKXJldHVybiB3LmpzeChsQyx7cGF0aDp0LGRpc2FibGVkOiExLHNvdXJjZTplLHNjaGVtYTpuLG9uU3VibWl0Om8odCl9LHQpO3JldHVybiB3LmpzeHMoImRpdiIse2NsYXNzTmFtZToicC00IGJnLWRlc3RydWN0aXZlIHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCIsY2hpbGRyZW46WyJFUlJPUjogdW5leHBlY3RlZCBzb3VyY2UgdHlwZSAiLHR5cGVvZiBlLCIgZm9yIHNjaGVtYSB0eXBlIiwiICIsbi50eXBlXX0pfWZ1bmN0aW9uIGVhKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIGdNKGUpe2NvbnN0IHQ9e307cmV0dXJuIGUuZm9yRWFjaChuPT57Y29uc3Qgcj1uLnNwbGl0KCIvIikuZmlsdGVyKGk9PmkhPT0iIik7bGV0IG89dDtyLmZvckVhY2goaT0+e29baV18fChvW2ldPXt9KSxvPW9baV19KX0pLHR9ZnVuY3Rpb24gbU0oe3BhdGhzOmUsc2V0U2VsZWN0ZWRNb2R1bGVJZDp0fSl7Y29uc3Qgbj1nTShlKTtyZXR1cm4gdy5qc3goc18se2NoaWxkcmVuOk9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW3Isb10pPT53LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJweC00IHB5LTIiLGNoaWxkcmVuOncuanN4KE1DLHtuYW1lOnIsdHJlZTpvLG1vZHVsZUlkOmAvJHtyfWAsc2V0U2VsZWN0ZWRNb2R1bGVJZDp0fSl9LGAvJHtyfWApKX0pfWZ1bmN0aW9uIE1DKHtuYW1lOmUsdHJlZTp0LG1vZHVsZUlkOm4sc2V0U2VsZWN0ZWRNb2R1bGVJZDpyfSl7cmV0dXJuIHcuanN4cygiZGl2Iix7Y2hpbGRyZW46W3cuanN4KCJidXR0b24iLHtvbkNsaWNrOigpPT57cihuKX0sY2hpbGRyZW46ZX0pLE9iamVjdC5lbnRyaWVzKHQpLm1hcCgoW28saV0pPT53LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJweC00IHB5LTEiLGNoaWxkcmVuOncuanN4KE1DLHtuYW1lOm8sdHJlZTppLG1vZHVsZUlkOmAke259LyR7b31gLHNldFNlbGVjdGVkTW9kdWxlSWQ6cn0pfSxgJHtufS8ke299YCkpXX0pfWNvbnN0IHUxPXt0YWdzOntoMToiZm9udC1ib2xkIixoMjoiZm9udC1ib2xkIixoMzoiZm9udC1ib2xkIixoNDoiZm9udC1ib2xkIixoNToiZm9udC1ib2xkIixoNjoiZm9udC1ib2xkIixwOiIifSxjbGFzc2VzOntib2xkOiJmb250LWJvbGQiLGl0YWxpYzoiaXRhbGljIixsaW5lVGhyb3VnaDoibGluZS10aHJvdWdoIn19O2Z1bmN0aW9uIHZNKHtjaGlsZHJlbjplfSl7Y29uc3QgdD1lO2Z1bmN0aW9uIG4oaSxsKXtjb25zdCBzPXUxLnRhZ3NbaV07cmV0dXJuIHMmJmw/W2wsc10uam9pbigiICIpOnN8fGx9ZnVuY3Rpb24gcihpLGwpe2NvbnN0IHM9dTEuY2xhc3Nlc1tpXTtyZXR1cm4gcyYmbD9bbCxzXS5qb2luKCIgIik6c3x8bH1mdW5jdGlvbiBvKGksbCl7dmFyIHUsYztpZih0eXBlb2YgaT09InN0cmluZyIpcmV0dXJuIGk7aWYoaS50YWc9PT0icCIpcmV0dXJuIHcuanN4KCJwIix7Y2xhc3NOYW1lOm4oInAiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0sbCk7aWYoaS50YWc9PT0iaW1nIilyZXR1cm4gdy5qc3goImltZyIse2NsYXNzTmFtZTpuKCJpbWciKSxzcmM6aS5zcmN9LGwpO2lmKGkudGFnPT09InVsIilyZXR1cm4gdy5qc3goInVsIix7Y2xhc3NOYW1lOm4oInVsIiksY2hpbGRyZW46aS5jaGlsZHJlbi5tYXAoKGQsZik9Pm8oZCxmKSl9LGwpO2lmKGkudGFnPT09Im9sIilyZXR1cm4gdy5qc3goIm9sIix7Y2xhc3NOYW1lOm4oIm9sIiksY2hpbGRyZW46aS5jaGlsZHJlbi5tYXAoKGQsZik9Pm8oZCxmKSl9LGwpO2lmKGkudGFnPT09ImxpIilyZXR1cm4gdy5qc3goImxpIix7Y2xhc3NOYW1lOm4oImxpIiksY2hpbGRyZW46aS5jaGlsZHJlbi5tYXAoKGQsZik9Pm8oZCxmKSl9LGwpO2lmKGkudGFnPT09InNwYW4iKXJldHVybiB3LmpzeCgic3BhbiIse2NsYXNzTmFtZTppLmNsYXNzZXMubWFwKGQ9Pntzd2l0Y2goZCl7Y2FzZSJib2xkIjpyZXR1cm4gcigiYm9sZCIpO2Nhc2UibGluZS10aHJvdWdoIjpyZXR1cm4gcigibGluZVRocm91Z2giKTtjYXNlIml0YWxpYyI6cmV0dXJuIHIoIml0YWxpYyIpfX0pLmpvaW4oIiAiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0sbCk7aWYoaS50YWc9PT0iaDEiKXJldHVybiB3LmpzeCgiaDEiLHtjbGFzc05hbWU6bigiaDEiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0sbCk7aWYoaS50YWc9PT0iaDIiKXJldHVybiB3LmpzeCgiaDIiLHtjbGFzc05hbWU6bigiaDIiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0sbCk7aWYoaS50YWc9PT0iaDMiKXJldHVybiB3LmpzeCgiaDMiLHtjbGFzc05hbWU6bigiaDMiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0sbCk7aWYoaS50YWc9PT0iaDQiKXJldHVybiB3LmpzeCgiaDQiLHtjbGFzc05hbWU6bigiaDQiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0sbCk7aWYoaS50YWc9PT0iaDUiKXJldHVybiB3LmpzeCgiaDUiLHtjbGFzc05hbWU6bigiaDUiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0sbCk7aWYoaS50YWc9PT0iaDYiKXJldHVybiB3LmpzeCgiaDYiLHtjbGFzc05hbWU6bigiaDYiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0sbCk7aWYoaS50YWc9PT0iYnIiKXJldHVybiB3LmpzeCgiYnIiLHt9LGwpO2lmKGkudGFnPT09ImEiKXJldHVybiB3LmpzeCgiYSIse2hyZWY6aS5ocmVmLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxsKTtjb25zb2xlLmVycm9yKCJVbmtub3duIHRhZyIsaS50YWcpO2NvbnN0IGE9aS50YWc7cmV0dXJuIGEhPW51bGwmJmEudGFnP2VlLmNyZWF0ZUVsZW1lbnQoYS50YWcse2tleTpsLGNsYXNzTmFtZToodT1hLmNsYXNzKT09bnVsbD92b2lkIDA6dS5qb2luKCIgIiksY2hpbGRyZW46KGM9YS5jaGlsZHJlbik9PW51bGw/dm9pZCAwOmMubWFwKG8pfSk6bnVsbH1yZXR1cm4gdy5qc3goInNwYW4iLHsiZGF0YS12YWwtcGF0aCI6dC52YWxQYXRoLGNoaWxkcmVuOnQuY2hpbGRyZW4ubWFwKChpLGwpPT5vKGksbCkpfSl9Y29uc3QgeU09cC5jcmVhdGVDb250ZXh0KG51bGwpLFZmPXtkaWRDYXRjaDohMSxlcnJvcjpudWxsfTtjbGFzcyB4TSBleHRlbmRzIHAuQ29tcG9uZW50e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMucmVzZXRFcnJvckJvdW5kYXJ5PXRoaXMucmVzZXRFcnJvckJvdW5kYXJ5LmJpbmQodGhpcyksdGhpcy5zdGF0ZT1WZn1zdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKHQpe3JldHVybntkaWRDYXRjaDohMCxlcnJvcjp0fX1yZXNldEVycm9yQm91bmRhcnkoKXtjb25zdHtlcnJvcjp0fT10aGlzLnN0YXRlO2lmKHQhPT1udWxsKXtmb3IodmFyIG4scixvPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobyksbD0wO2w8bztsKyspaVtsXT1hcmd1bWVudHNbbF07KG49KHI9dGhpcy5wcm9wcykub25SZXNldCk9PT1udWxsfHxuPT09dm9pZCAwfHxuLmNhbGwocix7YXJnczppLHJlYXNvbjoiaW1wZXJhdGl2ZS1hcGkifSksdGhpcy5zZXRTdGF0ZShWZil9fWNvbXBvbmVudERpZENhdGNoKHQsbil7dmFyIHIsbzsocj0obz10aGlzLnByb3BzKS5vbkVycm9yKT09PW51bGx8fHI9PT12b2lkIDB8fHIuY2FsbChvLHQsbil9Y29tcG9uZW50RGlkVXBkYXRlKHQsbil7Y29uc3R7ZGlkQ2F0Y2g6cn09dGhpcy5zdGF0ZSx7cmVzZXRLZXlzOm99PXRoaXMucHJvcHM7aWYociYmbi5lcnJvciE9PW51bGwmJndNKHQucmVzZXRLZXlzLG8pKXt2YXIgaSxsOyhpPShsPXRoaXMucHJvcHMpLm9uUmVzZXQpPT09bnVsbHx8aT09PXZvaWQgMHx8aS5jYWxsKGwse25leHQ6byxwcmV2OnQucmVzZXRLZXlzLHJlYXNvbjoia2V5cyJ9KSx0aGlzLnNldFN0YXRlKFZmKX19cmVuZGVyKCl7Y29uc3R7Y2hpbGRyZW46dCxmYWxsYmFja1JlbmRlcjpuLEZhbGxiYWNrQ29tcG9uZW50OnIsZmFsbGJhY2s6b309dGhpcy5wcm9wcyx7ZGlkQ2F0Y2g6aSxlcnJvcjpsfT10aGlzLnN0YXRlO2xldCBzPXQ7aWYoaSl7Y29uc3QgYT17ZXJyb3I6bCxyZXNldEVycm9yQm91bmRhcnk6dGhpcy5yZXNldEVycm9yQm91bmRhcnl9O2lmKHAuaXNWYWxpZEVsZW1lbnQobykpcz1vO2Vsc2UgaWYodHlwZW9mIG49PSJmdW5jdGlvbiIpcz1uKGEpO2Vsc2UgaWYocilzPXAuY3JlYXRlRWxlbWVudChyLGEpO2Vsc2UgdGhyb3cgbH1yZXR1cm4gcC5jcmVhdGVFbGVtZW50KHlNLlByb3ZpZGVyLHt2YWx1ZTp7ZGlkQ2F0Y2g6aSxlcnJvcjpsLHJlc2V0RXJyb3JCb3VuZGFyeTp0aGlzLnJlc2V0RXJyb3JCb3VuZGFyeX19LHMpfX1mdW5jdGlvbiB3TSgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpbXSx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpbXTtyZXR1cm4gZS5sZW5ndGghPT10Lmxlbmd0aHx8ZS5zb21lKChuLHIpPT4hT2JqZWN0LmlzKG4sdFtyXSkpfWNvbnN0IExDPSJDb2xsYXBzaWJsZSIsW19NLERDXT1OaShMQyksW1NNLEttXT1fTShMQyksRU09cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZUNvbGxhcHNpYmxlOm4sb3BlbjpyLGRlZmF1bHRPcGVuOm8sZGlzYWJsZWQ6aSxvbk9wZW5DaGFuZ2U6bCwuLi5zfT1lLFthPSExLHVdPURsKHtwcm9wOnIsZGVmYXVsdFByb3A6byxvbkNoYW5nZTpsfSk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChTTSx7c2NvcGU6bixkaXNhYmxlZDppLGNvbnRlbnRJZDpBZCgpLG9wZW46YSxvbk9wZW5Ub2dnbGU6cC51c2VDYWxsYmFjaygoKT0+dShjPT4hYyksW3VdKX0scC5jcmVhdGVFbGVtZW50KEllLmRpdix0ZSh7ImRhdGEtc3RhdGUiOkdtKGEpLCJkYXRhLWRpc2FibGVkIjppPyIiOnZvaWQgMH0scyx7cmVmOnR9KSkpfSksQ009IkNvbGxhcHNpYmxlVHJpZ2dlciIsJE09cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZUNvbGxhcHNpYmxlOm4sLi4ucn09ZSxvPUttKENNLG4pO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoSWUuYnV0dG9uLHRlKHt0eXBlOiJidXR0b24iLCJhcmlhLWNvbnRyb2xzIjpvLmNvbnRlbnRJZCwiYXJpYS1leHBhbmRlZCI6by5vcGVufHwhMSwiZGF0YS1zdGF0ZSI6R20oby5vcGVuKSwiZGF0YS1kaXNhYmxlZCI6by5kaXNhYmxlZD8iIjp2b2lkIDAsZGlzYWJsZWQ6by5kaXNhYmxlZH0scix7cmVmOnQsb25DbGljazpHZShlLm9uQ2xpY2ssby5vbk9wZW5Ub2dnbGUpfSkpfSksSUM9IkNvbGxhcHNpYmxlQ29udGVudCIsa009cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7Zm9yY2VNb3VudDpuLC4uLnJ9PWUsbz1LbShJQyxlLl9fc2NvcGVDb2xsYXBzaWJsZSk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChXbCx7cHJlc2VudDpufHxvLm9wZW59LCh7cHJlc2VudDppfSk9PnAuY3JlYXRlRWxlbWVudChiTSx0ZSh7fSxyLHtyZWY6dCxwcmVzZW50Oml9KSkpfSksYk09cC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZUNvbGxhcHNpYmxlOm4scHJlc2VudDpyLGNoaWxkcmVuOm8sLi4uaX09ZSxsPUttKElDLG4pLFtzLGFdPXAudXNlU3RhdGUociksdT1wLnVzZVJlZihudWxsKSxjPVplKHQsdSksZD1wLnVzZVJlZigwKSxmPWQuY3VycmVudCxoPXAudXNlUmVmKDApLG09aC5jdXJyZW50LGc9bC5vcGVufHxzLF89cC51c2VSZWYoZyksdj1wLnVzZVJlZigpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2NvbnN0IHk9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5fLmN1cnJlbnQ9ITEpO3JldHVybigpPT5jYW5jZWxBbmltYXRpb25GcmFtZSh5KX0sW10pLE5uKCgpPT57Y29uc3QgeT11LmN1cnJlbnQ7aWYoeSl7di5jdXJyZW50PXYuY3VycmVudHx8e3RyYW5zaXRpb25EdXJhdGlvbjp5LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbixhbmltYXRpb25OYW1lOnkuc3R5bGUuYW5pbWF0aW9uTmFtZX0seS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249IjBzIix5LnN0eWxlLmFuaW1hdGlvbk5hbWU9Im5vbmUiO2NvbnN0IHg9eS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLmN1cnJlbnQ9eC5oZWlnaHQsaC5jdXJyZW50PXgud2lkdGgsXy5jdXJyZW50fHwoeS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249di5jdXJyZW50LnRyYW5zaXRpb25EdXJhdGlvbix5LnN0eWxlLmFuaW1hdGlvbk5hbWU9di5jdXJyZW50LmFuaW1hdGlvbk5hbWUpLGEocil9fSxbbC5vcGVuLHJdKSxwLmNyZWF0ZUVsZW1lbnQoSWUuZGl2LHRlKHsiZGF0YS1zdGF0ZSI6R20obC5vcGVuKSwiZGF0YS1kaXNhYmxlZCI6bC5kaXNhYmxlZD8iIjp2b2lkIDAsaWQ6bC5jb250ZW50SWQsaGlkZGVuOiFnfSxpLHtyZWY6YyxzdHlsZTp7Ii0tcmFkaXgtY29sbGFwc2libGUtY29udGVudC1oZWlnaHQiOmY/YCR7Zn1weGA6dm9pZCAwLCItLXJhZGl4LWNvbGxhcHNpYmxlLWNvbnRlbnQtd2lkdGgiOm0/YCR7bX1weGA6dm9pZCAwLC4uLmUuc3R5bGV9fSksZyYmbyl9KTtmdW5jdGlvbiBHbShlKXtyZXR1cm4gZT8ib3BlbiI6ImNsb3NlZCJ9Y29uc3QgVE09RU0sTk09JE0sUk09a00sWW89IkFjY29yZGlvbiIsUE09WyJIb21lIiwiRW5kIiwiQXJyb3dEb3duIiwiQXJyb3dVcCIsIkFycm93TGVmdCIsIkFycm93UmlnaHQiXSxbWW0sT00sQU1dPXZFKFlvKSxbSGQsZ0xdPU5pKFlvLFtBTSxEQ10pLFhtPURDKCksakM9ZWUuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e3R5cGU6biwuLi5yfT1lLG89cixpPXI7cmV0dXJuIGVlLmNyZWF0ZUVsZW1lbnQoWW0uUHJvdmlkZXIse3Njb3BlOmUuX19zY29wZUFjY29yZGlvbn0sbj09PSJtdWx0aXBsZSI/ZWUuY3JlYXRlRWxlbWVudChJTSx0ZSh7fSxpLHtyZWY6dH0pKTplZS5jcmVhdGVFbGVtZW50KERNLHRlKHt9LG8se3JlZjp0fSkpKX0pO2pDLnByb3BUeXBlcz17dHlwZShlKXtjb25zdCB0PWUudmFsdWV8fGUuZGVmYXVsdFZhbHVlO3JldHVybiBlLnR5cGUmJiFbInNpbmdsZSIsIm11bHRpcGxlIl0uaW5jbHVkZXMoZS50eXBlKT9uZXcgRXJyb3IoIkludmFsaWQgcHJvcCBgdHlwZWAgc3VwcGxpZWQgdG8gYEFjY29yZGlvbmAuIEV4cGVjdGVkIG9uZSBvZiBgc2luZ2xlIHwgbXVsdGlwbGVgLiIpOmUudHlwZT09PSJtdWx0aXBsZSImJnR5cGVvZiB0PT0ic3RyaW5nIj9uZXcgRXJyb3IoIkludmFsaWQgcHJvcCBgdHlwZWAgc3VwcGxpZWQgdG8gYEFjY29yZGlvbmAuIEV4cGVjdGVkIGBzaW5nbGVgIHdoZW4gYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBpcyB0eXBlIGBzdHJpbmdgLiIpOmUudHlwZT09PSJzaW5nbGUiJiZBcnJheS5pc0FycmF5KHQpP25ldyBFcnJvcigiSW52YWxpZCBwcm9wIGB0eXBlYCBzdXBwbGllZCB0byBgQWNjb3JkaW9uYC4gRXhwZWN0ZWQgYG11bHRpcGxlYCB3aGVuIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgaXMgdHlwZSBgc3RyaW5nW11gLiIpOm51bGx9fTtjb25zdFt6QyxNTV09SGQoWW8pLFtGQyxMTV09SGQoWW8se2NvbGxhcHNpYmxlOiExfSksRE09ZWUuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e3ZhbHVlOm4sZGVmYXVsdFZhbHVlOnIsb25WYWx1ZUNoYW5nZTpvPSgpPT57fSxjb2xsYXBzaWJsZTppPSExLC4uLmx9PWUsW3MsYV09RGwoe3Byb3A6bixkZWZhdWx0UHJvcDpyLG9uQ2hhbmdlOm99KTtyZXR1cm4gZWUuY3JlYXRlRWxlbWVudCh6Qyx7c2NvcGU6ZS5fX3Njb3BlQWNjb3JkaW9uLHZhbHVlOnM/W3NdOltdLG9uSXRlbU9wZW46YSxvbkl0ZW1DbG9zZTplZS51c2VDYWxsYmFjaygoKT0+aSYmYSgiIiksW2ksYV0pfSxlZS5jcmVhdGVFbGVtZW50KEZDLHtzY29wZTplLl9fc2NvcGVBY2NvcmRpb24sY29sbGFwc2libGU6aX0sZWUuY3JlYXRlRWxlbWVudChCQyx0ZSh7fSxsLHtyZWY6dH0pKSkpfSksSU09ZWUuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e3ZhbHVlOm4sZGVmYXVsdFZhbHVlOnIsb25WYWx1ZUNoYW5nZTpvPSgpPT57fSwuLi5pfT1lLFtsPVtdLHNdPURsKHtwcm9wOm4sZGVmYXVsdFByb3A6cixvbkNoYW5nZTpvfSksYT1lZS51c2VDYWxsYmFjayhjPT5zKChkPVtdKT0+Wy4uLmQsY10pLFtzXSksdT1lZS51c2VDYWxsYmFjayhjPT5zKChkPVtdKT0+ZC5maWx0ZXIoZj0+ZiE9PWMpKSxbc10pO3JldHVybiBlZS5jcmVhdGVFbGVtZW50KHpDLHtzY29wZTplLl9fc2NvcGVBY2NvcmRpb24sdmFsdWU6bCxvbkl0ZW1PcGVuOmEsb25JdGVtQ2xvc2U6dX0sZWUuY3JlYXRlRWxlbWVudChGQyx7c2NvcGU6ZS5fX3Njb3BlQWNjb3JkaW9uLGNvbGxhcHNpYmxlOiEwfSxlZS5jcmVhdGVFbGVtZW50KEJDLHRlKHt9LGkse3JlZjp0fSkpKSl9KSxbak0sVmRdPUhkKFlvKSxCQz1lZS5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZUFjY29yZGlvbjpuLGRpc2FibGVkOnIsZGlyOm8sb3JpZW50YXRpb246aT0idmVydGljYWwiLC4uLmx9PWUscz1lZS51c2VSZWYobnVsbCksYT1aZShzLHQpLHU9T00obiksZD1XZyhvKT09PSJsdHIiLGY9R2UoZS5vbktleURvd24saD0+e3ZhciBtO2lmKCFQTS5pbmNsdWRlcyhoLmtleSkpcmV0dXJuO2NvbnN0IGc9aC50YXJnZXQsXz11KCkuZmlsdGVyKEQ9Pnt2YXIgTTtyZXR1cm4hKChNPUQucmVmLmN1cnJlbnQpIT09bnVsbCYmTSE9PXZvaWQgMCYmTS5kaXNhYmxlZCl9KSx2PV8uZmluZEluZGV4KEQ9PkQucmVmLmN1cnJlbnQ9PT1nKSx5PV8ubGVuZ3RoO2lmKHY9PT0tMSlyZXR1cm47aC5wcmV2ZW50RGVmYXVsdCgpO2xldCB4PXY7Y29uc3QgUz0wLGs9eS0xLFQ9KCk9Pnt4PXYrMSx4PmsmJih4PVMpfSxiPSgpPT57eD12LTEseDxTJiYoeD1rKX07c3dpdGNoKGgua2V5KXtjYXNlIkhvbWUiOng9UzticmVhaztjYXNlIkVuZCI6eD1rO2JyZWFrO2Nhc2UiQXJyb3dSaWdodCI6aT09PSJob3Jpem9udGFsIiYmKGQ/VCgpOmIoKSk7YnJlYWs7Y2FzZSJBcnJvd0Rvd24iOmk9PT0idmVydGljYWwiJiZUKCk7YnJlYWs7Y2FzZSJBcnJvd0xlZnQiOmk9PT0iaG9yaXpvbnRhbCImJihkP2IoKTpUKCkpO2JyZWFrO2Nhc2UiQXJyb3dVcCI6aT09PSJ2ZXJ0aWNhbCImJmIoKTticmVha31jb25zdCBOPXgleTsobT1fW05dLnJlZi5jdXJyZW50KT09PW51bGx8fG09PT12b2lkIDB8fG0uZm9jdXMoKX0pO3JldHVybiBlZS5jcmVhdGVFbGVtZW50KGpNLHtzY29wZTpuLGRpc2FibGVkOnIsZGlyZWN0aW9uOm8sb3JpZW50YXRpb246aX0sZWUuY3JlYXRlRWxlbWVudChZbS5TbG90LHtzY29wZTpufSxlZS5jcmVhdGVFbGVtZW50KEllLmRpdix0ZSh7fSxsLHsiZGF0YS1vcmllbnRhdGlvbiI6aSxyZWY6YSxvbktleURvd246cj92b2lkIDA6Zn0pKSkpfSksVXA9IkFjY29yZGlvbkl0ZW0iLFt6TSxRbV09SGQoVXApLEZNPWVlLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlQWNjb3JkaW9uOm4sdmFsdWU6ciwuLi5vfT1lLGk9VmQoVXAsbiksbD1NTShVcCxuKSxzPVhtKG4pLGE9QWQoKSx1PXImJmwudmFsdWUuaW5jbHVkZXMocil8fCExLGM9aS5kaXNhYmxlZHx8ZS5kaXNhYmxlZDtyZXR1cm4gZWUuY3JlYXRlRWxlbWVudCh6TSx7c2NvcGU6bixvcGVuOnUsZGlzYWJsZWQ6Yyx0cmlnZ2VySWQ6YX0sZWUuY3JlYXRlRWxlbWVudChUTSx0ZSh7ImRhdGEtb3JpZW50YXRpb24iOmkub3JpZW50YXRpb24sImRhdGEtc3RhdGUiOldDKHUpfSxzLG8se3JlZjp0LGRpc2FibGVkOmMsb3Blbjp1LG9uT3BlbkNoYW5nZTpkPT57ZD9sLm9uSXRlbU9wZW4ocik6bC5vbkl0ZW1DbG9zZShyKX19KSkpfSksQk09IkFjY29yZGlvbkhlYWRlciIsV009ZWUuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVBY2NvcmRpb246biwuLi5yfT1lLG89VmQoWW8sbiksaT1RbShCTSxuKTtyZXR1cm4gZWUuY3JlYXRlRWxlbWVudChJZS5oMyx0ZSh7ImRhdGEtb3JpZW50YXRpb24iOm8ub3JpZW50YXRpb24sImRhdGEtc3RhdGUiOldDKGkub3BlbiksImRhdGEtZGlzYWJsZWQiOmkuZGlzYWJsZWQ/IiI6dm9pZCAwfSxyLHtyZWY6dH0pKX0pLGMxPSJBY2NvcmRpb25UcmlnZ2VyIixVTT1lZS5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZUFjY29yZGlvbjpuLC4uLnJ9PWUsbz1WZChZbyxuKSxpPVFtKGMxLG4pLGw9TE0oYzEsbikscz1YbShuKTtyZXR1cm4gZWUuY3JlYXRlRWxlbWVudChZbS5JdGVtU2xvdCx7c2NvcGU6bn0sZWUuY3JlYXRlRWxlbWVudChOTSx0ZSh7ImFyaWEtZGlzYWJsZWQiOmkub3BlbiYmIWwuY29sbGFwc2libGV8fHZvaWQgMCwiZGF0YS1vcmllbnRhdGlvbiI6by5vcmllbnRhdGlvbixpZDppLnRyaWdnZXJJZH0scyxyLHtyZWY6dH0pKSl9KSxITT0iQWNjb3JkaW9uQ29udGVudCIsVk09ZWUuZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVBY2NvcmRpb246biwuLi5yfT1lLG89VmQoWW8sbiksaT1RbShITSxuKSxsPVhtKG4pO3JldHVybiBlZS5jcmVhdGVFbGVtZW50KFJNLHRlKHtyb2xlOiJyZWdpb24iLCJhcmlhLWxhYmVsbGVkYnkiOmkudHJpZ2dlcklkLCJkYXRhLW9yaWVudGF0aW9uIjpvLm9yaWVudGF0aW9ufSxsLHIse3JlZjp0LHN0eWxlOnsiLS1yYWRpeC1hY2NvcmRpb24tY29udGVudC1oZWlnaHQiOiJ2YXIoLS1yYWRpeC1jb2xsYXBzaWJsZS1jb250ZW50LWhlaWdodCkiLCItLXJhZGl4LWFjY29yZGlvbi1jb250ZW50LXdpZHRoIjoidmFyKC0tcmFkaXgtY29sbGFwc2libGUtY29udGVudC13aWR0aCkiLC4uLmUuc3R5bGV9fSkpfSk7ZnVuY3Rpb24gV0MoZSl7cmV0dXJuIGU/Im9wZW4iOiJjbG9zZWQifWNvbnN0IEtNPWpDLEdNPUZNLFlNPVdNLFVDPVVNLEhDPVZNLFhNPUtNLFZDPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT53LmpzeChHTSx7cmVmOm4sY2xhc3NOYW1lOnV0KCJib3JkZXItYiIsZSksLi4udH0pKTtWQy5kaXNwbGF5TmFtZT0iQWNjb3JkaW9uSXRlbSI7Y29uc3QgS0M9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsY2hpbGRyZW46dCwuLi5ufSxyKT0+dy5qc3goWU0se2NsYXNzTmFtZToiZmxleCIsY2hpbGRyZW46dy5qc3hzKFVDLHtyZWY6cixjbGFzc05hbWU6dXQoImZsZXggZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHktNCBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBob3Zlcjp1bmRlcmxpbmUgWyZbZGF0YS1zdGF0ZT1vcGVuXT5zdmddOnJvdGF0ZS0xODAiLGUpLC4uLm4sY2hpbGRyZW46W3Qsdy5qc3gobUUse2NsYXNzTmFtZToidy00IGgtNCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0yMDAgc2hyaW5rLTAifSldfSl9KSk7S0MuZGlzcGxheU5hbWU9VUMuZGlzcGxheU5hbWU7Y29uc3QgR0M9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsY2hpbGRyZW46dCwuLi5ufSxyKT0+dy5qc3goSEMse3JlZjpyLGNsYXNzTmFtZTp1dCgib3ZlcmZsb3ctaGlkZGVuIHRleHQtc20gdHJhbnNpdGlvbi1hbGwgZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLWFjY29yZGlvbi11cCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWFjY29yZGlvbi1kb3duIixlKSwuLi5uLGNoaWxkcmVuOncuanN4KCJkaXYiLHtjbGFzc05hbWU6InB0LTAgcGItNCIsY2hpbGRyZW46dH0pfSkpO0dDLmRpc3BsYXlOYW1lPUhDLmRpc3BsYXlOYW1lOy8qKgogKiBSZWFjdCBSb3V0ZXIgRE9NIHY2LjIwLjAKICoKICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqCiAqIEBsaWNlbnNlIE1JVAogKi9mdW5jdGlvbiBxYygpe3JldHVybiBxYz1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHFjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBRTShlLHQpe3JldHVybiBPNCh7YmFzZW5hbWU6dD09bnVsbD92b2lkIDA6dC5iYXNlbmFtZSxmdXR1cmU6cWMoe30sdD09bnVsbD92b2lkIDA6dC5mdXR1cmUse3Y3X3ByZXBlbmRCYXNlbmFtZTohMH0pLGhpc3Rvcnk6ZTQoe3dpbmRvdzp0PT1udWxsP3ZvaWQgMDp0LndpbmRvd30pLGh5ZHJhdGlvbkRhdGE6KHQ9PW51bGw/dm9pZCAwOnQuaHlkcmF0aW9uRGF0YSl8fEpNKCkscm91dGVzOmUsbWFwUm91dGVQcm9wZXJ0aWVzOmlNLHdpbmRvdzp0PT1udWxsP3ZvaWQgMDp0LndpbmRvd30pLmluaXRpYWxpemUoKX1mdW5jdGlvbiBKTSgpe3ZhciBlO2xldCB0PShlPXdpbmRvdyk9PW51bGw/dm9pZCAwOmUuX19zdGF0aWNSb3V0ZXJIeWRyYXRpb25EYXRhO3JldHVybiB0JiZ0LmVycm9ycyYmKHQ9cWMoe30sdCx7ZXJyb3JzOlpNKHQuZXJyb3JzKX0pKSx0fWZ1bmN0aW9uIFpNKGUpe2lmKCFlKXJldHVybiBudWxsO2xldCB0PU9iamVjdC5lbnRyaWVzKGUpLG49e307Zm9yKGxldFtyLG9db2YgdClpZihvJiZvLl9fdHlwZT09PSJSb3V0ZUVycm9yUmVzcG9uc2UiKW5bcl09bmV3IFdtKG8uc3RhdHVzLG8uc3RhdHVzVGV4dCxvLmRhdGEsby5pbnRlcm5hbD09PSEwKTtlbHNlIGlmKG8mJm8uX190eXBlPT09IkVycm9yIil7aWYoby5fX3N1YlR5cGUpe2xldCBpPXdpbmRvd1tvLl9fc3ViVHlwZV07aWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpdHJ5e2xldCBsPW5ldyBpKG8ubWVzc2FnZSk7bC5zdGFjaz0iIixuW3JdPWx9Y2F0Y2h7fX1pZihuW3JdPT1udWxsKXtsZXQgaT1uZXcgRXJyb3Ioby5tZXNzYWdlKTtpLnN0YWNrPSIiLG5bcl09aX19ZWxzZSBuW3JdPW87cmV0dXJuIG59Y29uc3QgcU09cC5jcmVhdGVDb250ZXh0KHtpc1RyYW5zaXRpb25pbmc6ITF9KSxlTD1wLmNyZWF0ZUNvbnRleHQobmV3IE1hcCksdEw9InN0YXJ0VHJhbnNpdGlvbiIsZDE9QzFbdExdLG5MPSJmbHVzaFN5bmMiLGYxPXdiW25MXTtmdW5jdGlvbiByTChlKXtkMT9kMShlKTplKCl9ZnVuY3Rpb24gU3MoZSl7ZjE/ZjEoZSk6ZSgpfWNsYXNzIG9Me2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0dXM9InBlbmRpbmciLHRoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgodCxuKT0+e3RoaXMucmVzb2x2ZT1yPT57dGhpcy5zdGF0dXM9PT0icGVuZGluZyImJih0aGlzLnN0YXR1cz0icmVzb2x2ZWQiLHQocikpfSx0aGlzLnJlamVjdD1yPT57dGhpcy5zdGF0dXM9PT0icGVuZGluZyImJih0aGlzLnN0YXR1cz0icmVqZWN0ZWQiLG4ocikpfX0pfX1mdW5jdGlvbiBpTChlKXtsZXR7ZmFsbGJhY2tFbGVtZW50OnQscm91dGVyOm4sZnV0dXJlOnJ9PWUsW28saV09cC51c2VTdGF0ZShuLnN0YXRlKSxbbCxzXT1wLnVzZVN0YXRlKCksW2EsdV09cC51c2VTdGF0ZSh7aXNUcmFuc2l0aW9uaW5nOiExfSksW2MsZF09cC51c2VTdGF0ZSgpLFtmLGhdPXAudXNlU3RhdGUoKSxbbSxnXT1wLnVzZVN0YXRlKCksXz1wLnVzZVJlZihuZXcgTWFwKSx7djdfc3RhcnRUcmFuc2l0aW9uOnZ9PXJ8fHt9LHk9cC51c2VDYWxsYmFjayhiPT57dj9yTChiKTpiKCl9LFt2XSkseD1wLnVzZUNhbGxiYWNrKChiLE4pPT57bGV0e2RlbGV0ZWRGZXRjaGVyczpELHVuc3RhYmxlX2ZsdXNoU3luYzpNLHVuc3RhYmxlX3ZpZXdUcmFuc2l0aW9uT3B0czpqfT1OO0QuZm9yRWFjaChyZT0+Xy5jdXJyZW50LmRlbGV0ZShyZSkpLGIuZmV0Y2hlcnMuZm9yRWFjaCgocmUsVik9PntyZS5kYXRhIT09dm9pZCAwJiZfLmN1cnJlbnQuc2V0KFYscmUuZGF0YSl9KTtsZXQgQj1uLndpbmRvdz09bnVsbHx8dHlwZW9mIG4ud2luZG93LmRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24hPSJmdW5jdGlvbiI7aWYoIWp8fEIpe00/U3MoKCk9PmkoYikpOnkoKCk9PmkoYikpO3JldHVybn1pZihNKXtTcygoKT0+e2YmJihjJiZjLnJlc29sdmUoKSxmLnNraXBUcmFuc2l0aW9uKCkpLHUoe2lzVHJhbnNpdGlvbmluZzohMCxmbHVzaFN5bmM6ITAsY3VycmVudExvY2F0aW9uOmouY3VycmVudExvY2F0aW9uLG5leHRMb2NhdGlvbjpqLm5leHRMb2NhdGlvbn0pfSk7bGV0IHJlPW4ud2luZG93LmRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oKCk9PntTcygoKT0+aShiKSl9KTtyZS5maW5pc2hlZC5maW5hbGx5KCgpPT57U3MoKCk9PntkKHZvaWQgMCksaCh2b2lkIDApLHModm9pZCAwKSx1KHtpc1RyYW5zaXRpb25pbmc6ITF9KX0pfSksU3MoKCk9PmgocmUpKTtyZXR1cm59Zj8oYyYmYy5yZXNvbHZlKCksZi5za2lwVHJhbnNpdGlvbigpLGcoe3N0YXRlOmIsY3VycmVudExvY2F0aW9uOmouY3VycmVudExvY2F0aW9uLG5leHRMb2NhdGlvbjpqLm5leHRMb2NhdGlvbn0pKToocyhiKSx1KHtpc1RyYW5zaXRpb25pbmc6ITAsZmx1c2hTeW5jOiExLGN1cnJlbnRMb2NhdGlvbjpqLmN1cnJlbnRMb2NhdGlvbixuZXh0TG9jYXRpb246ai5uZXh0TG9jYXRpb259KSl9LFtuLndpbmRvdyxmLGMsXyx5XSk7cC51c2VMYXlvdXRFZmZlY3QoKCk9Pm4uc3Vic2NyaWJlKHgpLFtuLHhdKSxwLnVzZUVmZmVjdCgoKT0+e2EuaXNUcmFuc2l0aW9uaW5nJiYhYS5mbHVzaFN5bmMmJmQobmV3IG9MKX0sW2FdKSxwLnVzZUVmZmVjdCgoKT0+e2lmKGMmJmwmJm4ud2luZG93KXtsZXQgYj1sLE49Yy5wcm9taXNlLEQ9bi53aW5kb3cuZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihhc3luYygpPT57eSgoKT0+aShiKSksYXdhaXQgTn0pO0QuZmluaXNoZWQuZmluYWxseSgoKT0+e2Qodm9pZCAwKSxoKHZvaWQgMCkscyh2b2lkIDApLHUoe2lzVHJhbnNpdGlvbmluZzohMX0pfSksaChEKX19LFt5LGwsYyxuLndpbmRvd10pLHAudXNlRWZmZWN0KCgpPT57YyYmbCYmby5sb2NhdGlvbi5rZXk9PT1sLmxvY2F0aW9uLmtleSYmYy5yZXNvbHZlKCl9LFtjLGYsby5sb2NhdGlvbixsXSkscC51c2VFZmZlY3QoKCk9PnshYS5pc1RyYW5zaXRpb25pbmcmJm0mJihzKG0uc3RhdGUpLHUoe2lzVHJhbnNpdGlvbmluZzohMCxmbHVzaFN5bmM6ITEsY3VycmVudExvY2F0aW9uOm0uY3VycmVudExvY2F0aW9uLG5leHRMb2NhdGlvbjptLm5leHRMb2NhdGlvbn0pLGcodm9pZCAwKSl9LFthLmlzVHJhbnNpdGlvbmluZyxtXSk7bGV0IFM9cC51c2VNZW1vKCgpPT4oe2NyZWF0ZUhyZWY6bi5jcmVhdGVIcmVmLGVuY29kZUxvY2F0aW9uOm4uZW5jb2RlTG9jYXRpb24sZ286Yj0+bi5uYXZpZ2F0ZShiKSxwdXNoOihiLE4sRCk9Pm4ubmF2aWdhdGUoYix7c3RhdGU6TixwcmV2ZW50U2Nyb2xsUmVzZXQ6RD09bnVsbD92b2lkIDA6RC5wcmV2ZW50U2Nyb2xsUmVzZXR9KSxyZXBsYWNlOihiLE4sRCk9Pm4ubmF2aWdhdGUoYix7cmVwbGFjZTohMCxzdGF0ZTpOLHByZXZlbnRTY3JvbGxSZXNldDpEPT1udWxsP3ZvaWQgMDpELnByZXZlbnRTY3JvbGxSZXNldH0pfSksW25dKSxrPW4uYmFzZW5hbWV8fCIvIixUPXAudXNlTWVtbygoKT0+KHtyb3V0ZXI6bixuYXZpZ2F0b3I6UyxzdGF0aWM6ITEsYmFzZW5hbWU6a30pLFtuLFMsa10pO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQocC5GcmFnbWVudCxudWxsLHAuY3JlYXRlRWxlbWVudChGZC5Qcm92aWRlcix7dmFsdWU6VH0scC5jcmVhdGVFbGVtZW50KEVDLlByb3ZpZGVyLHt2YWx1ZTpvfSxwLmNyZWF0ZUVsZW1lbnQoZUwuUHJvdmlkZXIse3ZhbHVlOl8uY3VycmVudH0scC5jcmVhdGVFbGVtZW50KHFNLlByb3ZpZGVyLHt2YWx1ZTphfSxwLmNyZWF0ZUVsZW1lbnQob00se2Jhc2VuYW1lOmssbG9jYXRpb246by5sb2NhdGlvbixuYXZpZ2F0aW9uVHlwZTpvLmhpc3RvcnlBY3Rpb24sbmF2aWdhdG9yOlN9LG8uaW5pdGlhbGl6ZWQ/cC5jcmVhdGVFbGVtZW50KGxMLHtyb3V0ZXM6bi5yb3V0ZXMsc3RhdGU6b30pOnQpKSkpKSxudWxsKX1mdW5jdGlvbiBsTChlKXtsZXR7cm91dGVzOnQsc3RhdGU6bn09ZTtyZXR1cm4gRzQodCx2b2lkIDAsbil9dmFyIGgxOyhmdW5jdGlvbihlKXtlLlVzZVNjcm9sbFJlc3RvcmF0aW9uPSJ1c2VTY3JvbGxSZXN0b3JhdGlvbiIsZS5Vc2VTdWJtaXQ9InVzZVN1Ym1pdCIsZS5Vc2VTdWJtaXRGZXRjaGVyPSJ1c2VTdWJtaXRGZXRjaGVyIixlLlVzZUZldGNoZXI9InVzZUZldGNoZXIiLGUudXNlVmlld1RyYW5zaXRpb25TdGF0ZT0idXNlVmlld1RyYW5zaXRpb25TdGF0ZSJ9KShoMXx8KGgxPXt9KSk7dmFyIHAxOyhmdW5jdGlvbihlKXtlLlVzZUZldGNoZXI9InVzZUZldGNoZXIiLGUuVXNlRmV0Y2hlcnM9InVzZUZldGNoZXJzIixlLlVzZVNjcm9sbFJlc3RvcmF0aW9uPSJ1c2VTY3JvbGxSZXN0b3JhdGlvbiJ9KShwMXx8KHAxPXt9KSk7ZnVuY3Rpb24gc0woe2Vycm9yOmUscmVzZXRFcnJvckJvdW5kYXJ5OnR9KXtyZXR1cm4gY29uc29sZS5lcnJvcihlKSx3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1zY3JlZW4gaC1zY3JlZW4gYmctY2FyZC1mb3JlZ3JvdW5kIixjaGlsZHJlbjp3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIHAtMTAiLGNoaWxkcmVuOncuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIHAtMTAgYmctY2FyZCB0ZXh0LXByaW1hcnkiLGNoaWxkcmVuOlt3LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIixjaGlsZHJlbjpbdy5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC1bMC41ZW1dIHRleHQtbGcgZm9udC1ib2xkIHRleHQtY2VudGVyIHB5LTIiLGNoaWxkcmVuOlt3LmpzeChzQyx7fSksIiBlbmNvdW50ZXJlZCBhbiBlcnJvciJdfSksdy5qc3goImJ1dHRvbiIse29uQ2xpY2s6dCxjaGlsZHJlbjp3LmpzeChWTyx7fSl9KV19KSx3LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LTR4bCBmb250LW5vcm1hbCAiLGNoaWxkcmVuOiJNZXNzYWdlOiJ9KSx3LmpzeCgicHJlIix7Y2hpbGRyZW46ZS5tZXNzYWdlfSksZS5zdGFjayYmdy5qc3goWE0se3R5cGU6InNpbmdsZSIsY2xhc3NOYW1lOiJmb250LXNlcmlmIixjb2xsYXBzaWJsZTohMCxkZWZhdWx0VmFsdWU6ImVycm9yIixjaGlsZHJlbjp3LmpzeHMoVkMse3ZhbHVlOiJlcnJvciIsY2hpbGRyZW46W3cuanN4KEtDLHtjaGlsZHJlbjoiU3RhY2sgdHJhY2U6In0pLHcuanN4KEdDLHtjbGFzc05hbWU6InAtNCBiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIixjaGlsZHJlbjplLnN0YWNrJiZ3LmpzeCgicHJlIix7Y2hpbGRyZW46ZS5zdGFja30pfSldfSl9KV19KX0pfSl9ZnVuY3Rpb24gYUwoKXtjb25zdCBlPVFNKFt7cGF0aDoiLyoiLGVsZW1lbnQ6dy5qc3goeE0se2ZhbGxiYWNrUmVuZGVyOnNMLGNoaWxkcmVuOncuanN4KHNNLHt2YWxBcGk6bmV3IE5UKCIvYXBpL3ZhbCIpfSl9KX1dLHtiYXNlbmFtZToiL2FwaS92YWwvc3RhdGljL2VkaXQifSk7cmV0dXJuIHcuanN4KGlMLHtyb3V0ZXI6ZX0pfUtmLmNyZWF0ZVJvb3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKGVlLmNyZWF0ZUVsZW1lbnQoZWUuU3RyaWN0TW9kZSxudWxsLGVlLmNyZWF0ZUVsZW1lbnQoYUwsbnVsbCkpKTsK","/index.html":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgICA8dGl0bGU+VmFsPC90aXRsZT4KICAgIDxzY3JpcHQgdHlwZT0ibW9kdWxlIiBjcm9zc29yaWdpbiBzcmM9Ii9hcGkvdmFsL3N0YXRpYy9hc3NldHMvaW5kZXgteUYtZXpCaDMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbiBocmVmPSIvYXBpL3ZhbC9zdGF0aWMvYXNzZXRzL2luZGV4LV85QlM4d245LmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBpZD0icm9vdCI+PC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg=="}`
|
|
19
19
|
);
|
|
20
20
|
function createUIRequestHandler() {
|
|
21
21
|
if (typeof files !== "object") {
|