-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathb0xfile__chunk-845d989c.7d4dfe1a.js.go
22 lines (18 loc) · 581 KB
/
b0xfile__chunk-845d989c.7d4dfe1a.js.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package knife4go
import (
"os"
)
func init() {
f, err := FS.OpenFile(CTX, "/chunk-845d989c.7d4dfe1a.js", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
if err != nil {
panic(err)
}
_, err = f.Write([] byte(base64Decoding("KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1siY2h1bmstODQ1ZDk4OWMiXSx7IjAwYzUiOmZ1bmN0aW9uKGUsdCxuKXt0LlNvdXJjZU1hcEdlbmVyYXRvcj1uKCI0YjE1IikuU291cmNlTWFwR2VuZXJhdG9yLHQuU291cmNlTWFwQ29uc3VtZXI9bigiYjU3MCIpLlNvdXJjZU1hcENvbnN1bWVyLHQuU291cmNlTm9kZT1uKCI0M2Y1IikuU291cmNlTm9kZX0sIjAzNmUiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc0lkZW50aWZpZXJDaGFyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5pc0lkZW50aWZpZXJDaGFyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc0lkZW50aWZpZXJOYW1lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5pc0lkZW50aWZpZXJOYW1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc0lkZW50aWZpZXJTdGFydCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuaXNJZGVudGlmaWVyU3RhcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzS2V5d29yZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNLZXl3b3JkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc1Jlc2VydmVkV29yZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNSZXNlcnZlZFdvcmR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzU3RyaWN0QmluZE9ubHlSZXNlcnZlZFdvcmQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmlzU3RyaWN0QmluZE9ubHlSZXNlcnZlZFdvcmR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzU3RyaWN0QmluZFJlc2VydmVkV29yZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNTdHJpY3RCaW5kUmVzZXJ2ZWRXb3JkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc1N0cmljdFJlc2VydmVkV29yZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNTdHJpY3RSZXNlcnZlZFdvcmR9fSk7dmFyIHI9bigiZTJkNCIpLGk9bigiMTE3ZCIpfSwiMDRjYSI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hc3NlcnRBY2Nlc3Nvcj1mdW5jdGlvbihlLHQpe2EoIkFjY2Vzc29yIixlLHQpfSx0LmFzc2VydEFueVR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiQW55VHlwZUFubm90YXRpb24iLGUsdCl9LHQuYXNzZXJ0QXJndW1lbnRQbGFjZWhvbGRlcj1mdW5jdGlvbihlLHQpe2EoIkFyZ3VtZW50UGxhY2Vob2xkZXIiLGUsdCl9LHQuYXNzZXJ0QXJyYXlFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7YSgiQXJyYXlFeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydEFycmF5UGF0dGVybj1mdW5jdGlvbihlLHQpe2EoIkFycmF5UGF0dGVybiIsZSx0KX0sdC5hc3NlcnRBcnJheVR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiQXJyYXlUeXBlQW5ub3RhdGlvbiIsZSx0KX0sdC5hc3NlcnRBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydEFzc2lnbm1lbnRFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7YSgiQXNzaWdubWVudEV4cHJlc3Npb24iLGUsdCl9LHQuYXNzZXJ0QXNzaWdubWVudFBhdHRlcm49ZnVuY3Rpb24oZSx0KXthKCJBc3NpZ25tZW50UGF0dGVybiIsZSx0KX0sdC5hc3NlcnRBd2FpdEV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXthKCJBd2FpdEV4cHJlc3Npb24iLGUsdCl9LHQuYXNzZXJ0QmlnSW50TGl0ZXJhbD1mdW5jdGlvbihlLHQpe2EoIkJpZ0ludExpdGVyYWwiLGUsdCl9LHQuYXNzZXJ0QmluYXJ5PWZ1bmN0aW9uKGUsdCl7YSgiQmluYXJ5IixlLHQpfSx0LmFzc2VydEJpbmFyeUV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXthKCJCaW5hcnlFeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydEJpbmRFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7YSgiQmluZEV4cHJlc3Npb24iLGUsdCl9LHQuYXNzZXJ0QmxvY2s9ZnVuY3Rpb24oZSx0KXthKCJCbG9jayIsZSx0KX0sdC5hc3NlcnRCbG9ja1BhcmVudD1mdW5jdGlvbihlLHQpe2EoIkJsb2NrUGFyZW50IixlLHQpfSx0LmFzc2VydEJsb2NrU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7YSgiQmxvY2tTdGF0ZW1lbnQiLGUsdCl9LHQuYXNzZXJ0Qm9vbGVhbkxpdGVyYWw9ZnVuY3Rpb24oZSx0KXthKCJCb29sZWFuTGl0ZXJhbCIsZSx0KX0sdC5hc3NlcnRCb29sZWFuTGl0ZXJhbFR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiQm9vbGVhbkxpdGVyYWxUeXBlQW5ub3RhdGlvbiIsZSx0KX0sdC5hc3NlcnRCb29sZWFuVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXthKCJCb29sZWFuVHlwZUFubm90YXRpb24iLGUsdCl9LHQuYXNzZXJ0QnJlYWtTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXthKCJCcmVha1N0YXRlbWVudCIsZSx0KX0sdC5hc3NlcnRDYWxsRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIkNhbGxFeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydENhdGNoQ2xhdXNlPWZ1bmN0aW9uKGUsdCl7YSgiQ2F0Y2hDbGF1c2UiLGUsdCl9LHQuYXNzZXJ0Q2xhc3M9ZnVuY3Rpb24oZSx0KXthKCJDbGFzcyIsZSx0KX0sdC5hc3NlcnRDbGFzc0FjY2Vzc29yUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXthKCJDbGFzc0FjY2Vzc29yUHJvcGVydHkiLGUsdCl9LHQuYXNzZXJ0Q2xhc3NCb2R5PWZ1bmN0aW9uKGUsdCl7YSgiQ2xhc3NCb2R5IixlLHQpfSx0LmFzc2VydENsYXNzRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXthKCJDbGFzc0RlY2xhcmF0aW9uIixlLHQpfSx0LmFzc2VydENsYXNzRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIkNsYXNzRXhwcmVzc2lvbiIsZSx0KX0sdC5hc3NlcnRDbGFzc0ltcGxlbWVudHM9ZnVuY3Rpb24oZSx0KXthKCJDbGFzc0ltcGxlbWVudHMiLGUsdCl9LHQuYXNzZXJ0Q2xhc3NNZXRob2Q9ZnVuY3Rpb24oZSx0KXthKCJDbGFzc01ldGhvZCIsZSx0KX0sdC5hc3NlcnRDbGFzc1ByaXZhdGVNZXRob2Q9ZnVuY3Rpb24oZSx0KXthKCJDbGFzc1ByaXZhdGVNZXRob2QiLGUsdCl9LHQuYXNzZXJ0Q2xhc3NQcml2YXRlUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXthKCJDbGFzc1ByaXZhdGVQcm9wZXJ0eSIsZSx0KX0sdC5hc3NlcnRDbGFzc1Byb3BlcnR5PWZ1bmN0aW9uKGUsdCl7YSgiQ2xhc3NQcm9wZXJ0eSIsZSx0KX0sdC5hc3NlcnRDb21wbGV0aW9uU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7YSgiQ29tcGxldGlvblN0YXRlbWVudCIsZSx0KX0sdC5hc3NlcnRDb25kaXRpb25hbD1mdW5jdGlvbihlLHQpe2EoIkNvbmRpdGlvbmFsIixlLHQpfSx0LmFzc2VydENvbmRpdGlvbmFsRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIsZSx0KX0sdC5hc3NlcnRDb250aW51ZVN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2EoIkNvbnRpbnVlU3RhdGVtZW50IixlLHQpfSx0LmFzc2VydERlYnVnZ2VyU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7YSgiRGVidWdnZXJTdGF0ZW1lbnQiLGUsdCl9LHQuYXNzZXJ0RGVjaW1hbExpdGVyYWw9ZnVuY3Rpb24oZSx0KXthKCJEZWNpbWFsTGl0ZXJhbCIsZSx0KX0sdC5hc3NlcnREZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2EoIkRlY2xhcmF0aW9uIixlLHQpfSx0LmFzc2VydERlY2xhcmVDbGFzcz1mdW5jdGlvbihlLHQpe2EoIkRlY2xhcmVDbGFzcyIsZSx0KX0sdC5hc3NlcnREZWNsYXJlRXhwb3J0QWxsRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXthKCJEZWNsYXJlRXhwb3J0QWxsRGVjbGFyYXRpb24iLGUsdCl9LHQuYXNzZXJ0RGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uIixlLHQpfSx0LmFzc2VydERlY2xhcmVGdW5jdGlvbj1mdW5jdGlvbihlLHQpe2EoIkRlY2xhcmVGdW5jdGlvbiIsZSx0KX0sdC5hc3NlcnREZWNsYXJlSW50ZXJmYWNlPWZ1bmN0aW9uKGUsdCl7YSgiRGVjbGFyZUludGVyZmFjZSIsZSx0KX0sdC5hc3NlcnREZWNsYXJlTW9kdWxlPWZ1bmN0aW9uKGUsdCl7YSgiRGVjbGFyZU1vZHVsZSIsZSx0KX0sdC5hc3NlcnREZWNsYXJlTW9kdWxlRXhwb3J0cz1mdW5jdGlvbihlLHQpe2EoIkRlY2xhcmVNb2R1bGVFeHBvcnRzIixlLHQpfSx0LmFzc2VydERlY2xhcmVPcGFxdWVUeXBlPWZ1bmN0aW9uKGUsdCl7YSgiRGVjbGFyZU9wYXF1ZVR5cGUiLGUsdCl9LHQuYXNzZXJ0RGVjbGFyZVR5cGVBbGlhcz1mdW5jdGlvbihlLHQpe2EoIkRlY2xhcmVUeXBlQWxpYXMiLGUsdCl9LHQuYXNzZXJ0RGVjbGFyZVZhcmlhYmxlPWZ1bmN0aW9uKGUsdCl7YSgiRGVjbGFyZVZhcmlhYmxlIixlLHQpfSx0LmFzc2VydERlY2xhcmVkUHJlZGljYXRlPWZ1bmN0aW9uKGUsdCl7YSgiRGVjbGFyZWRQcmVkaWNhdGUiLGUsdCl9LHQuYXNzZXJ0RGVjb3JhdG9yPWZ1bmN0aW9uKGUsdCl7YSgiRGVjb3JhdG9yIixlLHQpfSx0LmFzc2VydERpcmVjdGl2ZT1mdW5jdGlvbihlLHQpe2EoIkRpcmVjdGl2ZSIsZSx0KX0sdC5hc3NlcnREaXJlY3RpdmVMaXRlcmFsPWZ1bmN0aW9uKGUsdCl7YSgiRGlyZWN0aXZlTGl0ZXJhbCIsZSx0KX0sdC5hc3NlcnREb0V4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXthKCJEb0V4cHJlc3Npb24iLGUsdCl9LHQuYXNzZXJ0RG9XaGlsZVN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2EoIkRvV2hpbGVTdGF0ZW1lbnQiLGUsdCl9LHQuYXNzZXJ0RW1wdHlTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXthKCJFbXB0eVN0YXRlbWVudCIsZSx0KX0sdC5hc3NlcnRFbXB0eVR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiRW1wdHlUeXBlQW5ub3RhdGlvbiIsZSx0KX0sdC5hc3NlcnRFbnVtQm9keT1mdW5jdGlvbihlLHQpe2EoIkVudW1Cb2R5IixlLHQpfSx0LmFzc2VydEVudW1Cb29sZWFuQm9keT1mdW5jdGlvbihlLHQpe2EoIkVudW1Cb29sZWFuQm9keSIsZSx0KX0sdC5hc3NlcnRFbnVtQm9vbGVhbk1lbWJlcj1mdW5jdGlvbihlLHQpe2EoIkVudW1Cb29sZWFuTWVtYmVyIixlLHQpfSx0LmFzc2VydEVudW1EZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2EoIkVudW1EZWNsYXJhdGlvbiIsZSx0KX0sdC5hc3NlcnRFbnVtRGVmYXVsdGVkTWVtYmVyPWZ1bmN0aW9uKGUsdCl7YSgiRW51bURlZmF1bHRlZE1lbWJlciIsZSx0KX0sdC5hc3NlcnRFbnVtTWVtYmVyPWZ1bmN0aW9uKGUsdCl7YSgiRW51bU1lbWJlciIsZSx0KX0sdC5hc3NlcnRFbnVtTnVtYmVyQm9keT1mdW5jdGlvbihlLHQpe2EoIkVudW1OdW1iZXJCb2R5IixlLHQpfSx0LmFzc2VydEVudW1OdW1iZXJNZW1iZXI9ZnVuY3Rpb24oZSx0KXthKCJFbnVtTnVtYmVyTWVtYmVyIixlLHQpfSx0LmFzc2VydEVudW1TdHJpbmdCb2R5PWZ1bmN0aW9uKGUsdCl7YSgiRW51bVN0cmluZ0JvZHkiLGUsdCl9LHQuYXNzZXJ0RW51bVN0cmluZ01lbWJlcj1mdW5jdGlvbihlLHQpe2EoIkVudW1TdHJpbmdNZW1iZXIiLGUsdCl9LHQuYXNzZXJ0RW51bVN5bWJvbEJvZHk9ZnVuY3Rpb24oZSx0KXthKCJFbnVtU3ltYm9sQm9keSIsZSx0KX0sdC5hc3NlcnRFeGlzdHNUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2EoIkV4aXN0c1R5cGVBbm5vdGF0aW9uIixlLHQpfSx0LmFzc2VydEV4cG9ydEFsbERlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiRXhwb3J0QWxsRGVjbGFyYXRpb24iLGUsdCl9LHQuYXNzZXJ0RXhwb3J0RGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXthKCJFeHBvcnREZWNsYXJhdGlvbiIsZSx0KX0sdC5hc3NlcnRFeHBvcnREZWZhdWx0RGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXthKCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iLGUsdCl9LHQuYXNzZXJ0RXhwb3J0RGVmYXVsdFNwZWNpZmllcj1mdW5jdGlvbihlLHQpe2EoIkV4cG9ydERlZmF1bHRTcGVjaWZpZXIiLGUsdCl9LHQuYXNzZXJ0RXhwb3J0TmFtZWREZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2EoIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iLGUsdCl9LHQuYXNzZXJ0RXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyPWZ1bmN0aW9uKGUsdCl7YSgiRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyIixlLHQpfSx0LmFzc2VydEV4cG9ydFNwZWNpZmllcj1mdW5jdGlvbihlLHQpe2EoIkV4cG9ydFNwZWNpZmllciIsZSx0KX0sdC5hc3NlcnRFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7YSgiRXhwcmVzc2lvbiIsZSx0KX0sdC5hc3NlcnRFeHByZXNzaW9uU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7YSgiRXhwcmVzc2lvblN0YXRlbWVudCIsZSx0KX0sdC5hc3NlcnRFeHByZXNzaW9uV3JhcHBlcj1mdW5jdGlvbihlLHQpe2EoIkV4cHJlc3Npb25XcmFwcGVyIixlLHQpfSx0LmFzc2VydEZpbGU9ZnVuY3Rpb24oZSx0KXthKCJGaWxlIixlLHQpfSx0LmFzc2VydEZsb3c9ZnVuY3Rpb24oZSx0KXthKCJGbG93IixlLHQpfSx0LmFzc2VydEZsb3dCYXNlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2EoIkZsb3dCYXNlQW5ub3RhdGlvbiIsZSx0KX0sdC5hc3NlcnRGbG93RGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXthKCJGbG93RGVjbGFyYXRpb24iLGUsdCl9LHQuYXNzZXJ0Rmxvd1ByZWRpY2F0ZT1mdW5jdGlvbihlLHQpe2EoIkZsb3dQcmVkaWNhdGUiLGUsdCl9LHQuYXNzZXJ0Rmxvd1R5cGU9ZnVuY3Rpb24oZSx0KXthKCJGbG93VHlwZSIsZSx0KX0sdC5hc3NlcnRGb3I9ZnVuY3Rpb24oZSx0KXthKCJGb3IiLGUsdCl9LHQuYXNzZXJ0Rm9ySW5TdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXthKCJGb3JJblN0YXRlbWVudCIsZSx0KX0sdC5hc3NlcnRGb3JPZlN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2EoIkZvck9mU3RhdGVtZW50IixlLHQpfSx0LmFzc2VydEZvclN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2EoIkZvclN0YXRlbWVudCIsZSx0KX0sdC5hc3NlcnRGb3JYU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7YSgiRm9yWFN0YXRlbWVudCIsZSx0KX0sdC5hc3NlcnRGdW5jdGlvbj1mdW5jdGlvbihlLHQpe2EoIkZ1bmN0aW9uIixlLHQpfSx0LmFzc2VydEZ1bmN0aW9uRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXthKCJGdW5jdGlvbkRlY2xhcmF0aW9uIixlLHQpfSx0LmFzc2VydEZ1bmN0aW9uRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIkZ1bmN0aW9uRXhwcmVzc2lvbiIsZSx0KX0sdC5hc3NlcnRGdW5jdGlvblBhcmVudD1mdW5jdGlvbihlLHQpe2EoIkZ1bmN0aW9uUGFyZW50IixlLHQpfSx0LmFzc2VydEZ1bmN0aW9uVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXthKCJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIixlLHQpfSx0LmFzc2VydEZ1bmN0aW9uVHlwZVBhcmFtPWZ1bmN0aW9uKGUsdCl7YSgiRnVuY3Rpb25UeXBlUGFyYW0iLGUsdCl9LHQuYXNzZXJ0R2VuZXJpY1R5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiR2VuZXJpY1R5cGVBbm5vdGF0aW9uIixlLHQpfSx0LmFzc2VydElkZW50aWZpZXI9ZnVuY3Rpb24oZSx0KXthKCJJZGVudGlmaWVyIixlLHQpfSx0LmFzc2VydElmU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7YSgiSWZTdGF0ZW1lbnQiLGUsdCl9LHQuYXNzZXJ0SW1tdXRhYmxlPWZ1bmN0aW9uKGUsdCl7YSgiSW1tdXRhYmxlIixlLHQpfSx0LmFzc2VydEltcG9ydD1mdW5jdGlvbihlLHQpe2EoIkltcG9ydCIsZSx0KX0sdC5hc3NlcnRJbXBvcnRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0KXthKCJJbXBvcnRBdHRyaWJ1dGUiLGUsdCl9LHQuYXNzZXJ0SW1wb3J0RGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXthKCJJbXBvcnREZWNsYXJhdGlvbiIsZSx0KX0sdC5hc3NlcnRJbXBvcnREZWZhdWx0U3BlY2lmaWVyPWZ1bmN0aW9uKGUsdCl7YSgiSW1wb3J0RGVmYXVsdFNwZWNpZmllciIsZSx0KX0sdC5hc3NlcnRJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI9ZnVuY3Rpb24oZSx0KXthKCJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLGUsdCl9LHQuYXNzZXJ0SW1wb3J0T3JFeHBvcnREZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2EoIkltcG9ydE9yRXhwb3J0RGVjbGFyYXRpb24iLGUsdCl9LHQuYXNzZXJ0SW1wb3J0U3BlY2lmaWVyPWZ1bmN0aW9uKGUsdCl7YSgiSW1wb3J0U3BlY2lmaWVyIixlLHQpfSx0LmFzc2VydEluZGV4ZWRBY2Nlc3NUeXBlPWZ1bmN0aW9uKGUsdCl7YSgiSW5kZXhlZEFjY2Vzc1R5cGUiLGUsdCl9LHQuYXNzZXJ0SW5mZXJyZWRQcmVkaWNhdGU9ZnVuY3Rpb24oZSx0KXthKCJJbmZlcnJlZFByZWRpY2F0ZSIsZSx0KX0sdC5hc3NlcnRJbnRlcmZhY2VEZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2EoIkludGVyZmFjZURlY2xhcmF0aW9uIixlLHQpfSx0LmFzc2VydEludGVyZmFjZUV4dGVuZHM9ZnVuY3Rpb24oZSx0KXthKCJJbnRlcmZhY2VFeHRlbmRzIixlLHQpfSx0LmFzc2VydEludGVyZmFjZVR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiSW50ZXJmYWNlVHlwZUFubm90YXRpb24iLGUsdCl9LHQuYXNzZXJ0SW50ZXJwcmV0ZXJEaXJlY3RpdmU9ZnVuY3Rpb24oZSx0KXthKCJJbnRlcnByZXRlckRpcmVjdGl2ZSIsZSx0KX0sdC5hc3NlcnRJbnRlcnNlY3Rpb25UeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2EoIkludGVyc2VjdGlvblR5cGVBbm5vdGF0aW9uIixlLHQpfSx0LmFzc2VydEpTWD1mdW5jdGlvbihlLHQpe2EoIkpTWCIsZSx0KX0sdC5hc3NlcnRKU1hBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0KXthKCJKU1hBdHRyaWJ1dGUiLGUsdCl9LHQuYXNzZXJ0SlNYQ2xvc2luZ0VsZW1lbnQ9ZnVuY3Rpb24oZSx0KXthKCJKU1hDbG9zaW5nRWxlbWVudCIsZSx0KX0sdC5hc3NlcnRKU1hDbG9zaW5nRnJhZ21lbnQ9ZnVuY3Rpb24oZSx0KXthKCJKU1hDbG9zaW5nRnJhZ21lbnQiLGUsdCl9LHQuYXNzZXJ0SlNYRWxlbWVudD1mdW5jdGlvbihlLHQpe2EoIkpTWEVsZW1lbnQiLGUsdCl9LHQuYXNzZXJ0SlNYRW1wdHlFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7YSgiSlNYRW1wdHlFeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydEpTWEV4cHJlc3Npb25Db250YWluZXI9ZnVuY3Rpb24oZSx0KXthKCJKU1hFeHByZXNzaW9uQ29udGFpbmVyIixlLHQpfSx0LmFzc2VydEpTWEZyYWdtZW50PWZ1bmN0aW9uKGUsdCl7YSgiSlNYRnJhZ21lbnQiLGUsdCl9LHQuYXNzZXJ0SlNYSWRlbnRpZmllcj1mdW5jdGlvbihlLHQpe2EoIkpTWElkZW50aWZpZXIiLGUsdCl9LHQuYXNzZXJ0SlNYTWVtYmVyRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIkpTWE1lbWJlckV4cHJlc3Npb24iLGUsdCl9LHQuYXNzZXJ0SlNYTmFtZXNwYWNlZE5hbWU9ZnVuY3Rpb24oZSx0KXthKCJKU1hOYW1lc3BhY2VkTmFtZSIsZSx0KX0sdC5hc3NlcnRKU1hPcGVuaW5nRWxlbWVudD1mdW5jdGlvbihlLHQpe2EoIkpTWE9wZW5pbmdFbGVtZW50IixlLHQpfSx0LmFzc2VydEpTWE9wZW5pbmdGcmFnbWVudD1mdW5jdGlvbihlLHQpe2EoIkpTWE9wZW5pbmdGcmFnbWVudCIsZSx0KX0sdC5hc3NlcnRKU1hTcHJlYWRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0KXthKCJKU1hTcHJlYWRBdHRyaWJ1dGUiLGUsdCl9LHQuYXNzZXJ0SlNYU3ByZWFkQ2hpbGQ9ZnVuY3Rpb24oZSx0KXthKCJKU1hTcHJlYWRDaGlsZCIsZSx0KX0sdC5hc3NlcnRKU1hUZXh0PWZ1bmN0aW9uKGUsdCl7YSgiSlNYVGV4dCIsZSx0KX0sdC5hc3NlcnRMVmFsPWZ1bmN0aW9uKGUsdCl7YSgiTFZhbCIsZSx0KX0sdC5hc3NlcnRMYWJlbGVkU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7YSgiTGFiZWxlZFN0YXRlbWVudCIsZSx0KX0sdC5hc3NlcnRMaXRlcmFsPWZ1bmN0aW9uKGUsdCl7YSgiTGl0ZXJhbCIsZSx0KX0sdC5hc3NlcnRMb2dpY2FsRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIkxvZ2ljYWxFeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydExvb3A9ZnVuY3Rpb24oZSx0KXthKCJMb29wIixlLHQpfSx0LmFzc2VydE1lbWJlckV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXthKCJNZW1iZXJFeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydE1ldGFQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe2EoIk1ldGFQcm9wZXJ0eSIsZSx0KX0sdC5hc3NlcnRNZXRob2Q9ZnVuY3Rpb24oZSx0KXthKCJNZXRob2QiLGUsdCl9LHQuYXNzZXJ0TWlzY2VsbGFuZW91cz1mdW5jdGlvbihlLHQpe2EoIk1pc2NlbGxhbmVvdXMiLGUsdCl9LHQuYXNzZXJ0TWl4ZWRUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2EoIk1peGVkVHlwZUFubm90YXRpb24iLGUsdCl9LHQuYXNzZXJ0TW9kdWxlRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXsoMCxpLmRlZmF1bHQpKCJhc3NlcnRNb2R1bGVEZWNsYXJhdGlvbiIsImFzc2VydEltcG9ydE9yRXhwb3J0RGVjbGFyYXRpb24iKSxhKCJNb2R1bGVEZWNsYXJhdGlvbiIsZSx0KX0sdC5hc3NlcnRNb2R1bGVFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7YSgiTW9kdWxlRXhwcmVzc2lvbiIsZSx0KX0sdC5hc3NlcnRNb2R1bGVTcGVjaWZpZXI9ZnVuY3Rpb24oZSx0KXthKCJNb2R1bGVTcGVjaWZpZXIiLGUsdCl9LHQuYXNzZXJ0TmV3RXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIk5ld0V4cHJlc3Npb24iLGUsdCl9LHQuYXNzZXJ0Tm9vcD1mdW5jdGlvbihlLHQpe2EoIk5vb3AiLGUsdCl9LHQuYXNzZXJ0TnVsbExpdGVyYWw9ZnVuY3Rpb24oZSx0KXthKCJOdWxsTGl0ZXJhbCIsZSx0KX0sdC5hc3NlcnROdWxsTGl0ZXJhbFR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiTnVsbExpdGVyYWxUeXBlQW5ub3RhdGlvbiIsZSx0KX0sdC5hc3NlcnROdWxsYWJsZVR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiTnVsbGFibGVUeXBlQW5ub3RhdGlvbiIsZSx0KX0sdC5hc3NlcnROdW1iZXJMaXRlcmFsPWZ1bmN0aW9uKGUsdCl7KDAsaS5kZWZhdWx0KSgiYXNzZXJ0TnVtYmVyTGl0ZXJhbCIsImFzc2VydE51bWVyaWNMaXRlcmFsIiksYSgiTnVtYmVyTGl0ZXJhbCIsZSx0KX0sdC5hc3NlcnROdW1iZXJMaXRlcmFsVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXthKCJOdW1iZXJMaXRlcmFsVHlwZUFubm90YXRpb24iLGUsdCl9LHQuYXNzZXJ0TnVtYmVyVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXthKCJOdW1iZXJUeXBlQW5ub3RhdGlvbiIsZSx0KX0sdC5hc3NlcnROdW1lcmljTGl0ZXJhbD1mdW5jdGlvbihlLHQpe2EoIk51bWVyaWNMaXRlcmFsIixlLHQpfSx0LmFzc2VydE9iamVjdEV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXthKCJPYmplY3RFeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydE9iamVjdE1lbWJlcj1mdW5jdGlvbihlLHQpe2EoIk9iamVjdE1lbWJlciIsZSx0KX0sdC5hc3NlcnRPYmplY3RNZXRob2Q9ZnVuY3Rpb24oZSx0KXthKCJPYmplY3RNZXRob2QiLGUsdCl9LHQuYXNzZXJ0T2JqZWN0UGF0dGVybj1mdW5jdGlvbihlLHQpe2EoIk9iamVjdFBhdHRlcm4iLGUsdCl9LHQuYXNzZXJ0T2JqZWN0UHJvcGVydHk9ZnVuY3Rpb24oZSx0KXthKCJPYmplY3RQcm9wZXJ0eSIsZSx0KX0sdC5hc3NlcnRPYmplY3RUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2EoIk9iamVjdFR5cGVBbm5vdGF0aW9uIixlLHQpfSx0LmFzc2VydE9iamVjdFR5cGVDYWxsUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXthKCJPYmplY3RUeXBlQ2FsbFByb3BlcnR5IixlLHQpfSx0LmFzc2VydE9iamVjdFR5cGVJbmRleGVyPWZ1bmN0aW9uKGUsdCl7YSgiT2JqZWN0VHlwZUluZGV4ZXIiLGUsdCl9LHQuYXNzZXJ0T2JqZWN0VHlwZUludGVybmFsU2xvdD1mdW5jdGlvbihlLHQpe2EoIk9iamVjdFR5cGVJbnRlcm5hbFNsb3QiLGUsdCl9LHQuYXNzZXJ0T2JqZWN0VHlwZVByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7YSgiT2JqZWN0VHlwZVByb3BlcnR5IixlLHQpfSx0LmFzc2VydE9iamVjdFR5cGVTcHJlYWRQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe2EoIk9iamVjdFR5cGVTcHJlYWRQcm9wZXJ0eSIsZSx0KX0sdC5hc3NlcnRPcGFxdWVUeXBlPWZ1bmN0aW9uKGUsdCl7YSgiT3BhcXVlVHlwZSIsZSx0KX0sdC5hc3NlcnRPcHRpb25hbENhbGxFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7YSgiT3B0aW9uYWxDYWxsRXhwcmVzc2lvbiIsZSx0KX0sdC5hc3NlcnRPcHRpb25hbEluZGV4ZWRBY2Nlc3NUeXBlPWZ1bmN0aW9uKGUsdCl7YSgiT3B0aW9uYWxJbmRleGVkQWNjZXNzVHlwZSIsZSx0KX0sdC5hc3NlcnRPcHRpb25hbE1lbWJlckV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXthKCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iLGUsdCl9LHQuYXNzZXJ0UGFyZW50aGVzaXplZEV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXthKCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIsZSx0KX0sdC5hc3NlcnRQYXR0ZXJuPWZ1bmN0aW9uKGUsdCl7YSgiUGF0dGVybiIsZSx0KX0sdC5hc3NlcnRQYXR0ZXJuTGlrZT1mdW5jdGlvbihlLHQpe2EoIlBhdHRlcm5MaWtlIixlLHQpfSx0LmFzc2VydFBpcGVsaW5lQmFyZUZ1bmN0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiUGlwZWxpbmVCYXJlRnVuY3Rpb24iLGUsdCl9LHQuYXNzZXJ0UGlwZWxpbmVQcmltYXJ5VG9waWNSZWZlcmVuY2U9ZnVuY3Rpb24oZSx0KXthKCJQaXBlbGluZVByaW1hcnlUb3BpY1JlZmVyZW5jZSIsZSx0KX0sdC5hc3NlcnRQaXBlbGluZVRvcGljRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIlBpcGVsaW5lVG9waWNFeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydFBsYWNlaG9sZGVyPWZ1bmN0aW9uKGUsdCl7YSgiUGxhY2Vob2xkZXIiLGUsdCl9LHQuYXNzZXJ0UHJpdmF0ZT1mdW5jdGlvbihlLHQpe2EoIlByaXZhdGUiLGUsdCl9LHQuYXNzZXJ0UHJpdmF0ZU5hbWU9ZnVuY3Rpb24oZSx0KXthKCJQcml2YXRlTmFtZSIsZSx0KX0sdC5hc3NlcnRQcm9ncmFtPWZ1bmN0aW9uKGUsdCl7YSgiUHJvZ3JhbSIsZSx0KX0sdC5hc3NlcnRQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe2EoIlByb3BlcnR5IixlLHQpfSx0LmFzc2VydFB1cmVpc2g9ZnVuY3Rpb24oZSx0KXthKCJQdXJlaXNoIixlLHQpfSx0LmFzc2VydFF1YWxpZmllZFR5cGVJZGVudGlmaWVyPWZ1bmN0aW9uKGUsdCl7YSgiUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIiLGUsdCl9LHQuYXNzZXJ0UmVjb3JkRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIlJlY29yZEV4cHJlc3Npb24iLGUsdCl9LHQuYXNzZXJ0UmVnRXhwTGl0ZXJhbD1mdW5jdGlvbihlLHQpe2EoIlJlZ0V4cExpdGVyYWwiLGUsdCl9LHQuYXNzZXJ0UmVnZXhMaXRlcmFsPWZ1bmN0aW9uKGUsdCl7KDAsaS5kZWZhdWx0KSgiYXNzZXJ0UmVnZXhMaXRlcmFsIiwiYXNzZXJ0UmVnRXhwTGl0ZXJhbCIpLGEoIlJlZ2V4TGl0ZXJhbCIsZSx0KX0sdC5hc3NlcnRSZXN0RWxlbWVudD1mdW5jdGlvbihlLHQpe2EoIlJlc3RFbGVtZW50IixlLHQpfSx0LmFzc2VydFJlc3RQcm9wZXJ0eT1mdW5jdGlvbihlLHQpeygwLGkuZGVmYXVsdCkoImFzc2VydFJlc3RQcm9wZXJ0eSIsImFzc2VydFJlc3RFbGVtZW50IiksYSgiUmVzdFByb3BlcnR5IixlLHQpfSx0LmFzc2VydFJldHVyblN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2EoIlJldHVyblN0YXRlbWVudCIsZSx0KX0sdC5hc3NlcnRTY29wYWJsZT1mdW5jdGlvbihlLHQpe2EoIlNjb3BhYmxlIixlLHQpfSx0LmFzc2VydFNlcXVlbmNlRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIlNlcXVlbmNlRXhwcmVzc2lvbiIsZSx0KX0sdC5hc3NlcnRTcHJlYWRFbGVtZW50PWZ1bmN0aW9uKGUsdCl7YSgiU3ByZWFkRWxlbWVudCIsZSx0KX0sdC5hc3NlcnRTcHJlYWRQcm9wZXJ0eT1mdW5jdGlvbihlLHQpeygwLGkuZGVmYXVsdCkoImFzc2VydFNwcmVhZFByb3BlcnR5IiwiYXNzZXJ0U3ByZWFkRWxlbWVudCIpLGEoIlNwcmVhZFByb3BlcnR5IixlLHQpfSx0LmFzc2VydFN0YW5kYXJkaXplZD1mdW5jdGlvbihlLHQpe2EoIlN0YW5kYXJkaXplZCIsZSx0KX0sdC5hc3NlcnRTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXthKCJTdGF0ZW1lbnQiLGUsdCl9LHQuYXNzZXJ0U3RhdGljQmxvY2s9ZnVuY3Rpb24oZSx0KXthKCJTdGF0aWNCbG9jayIsZSx0KX0sdC5hc3NlcnRTdHJpbmdMaXRlcmFsPWZ1bmN0aW9uKGUsdCl7YSgiU3RyaW5nTGl0ZXJhbCIsZSx0KX0sdC5hc3NlcnRTdHJpbmdMaXRlcmFsVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXthKCJTdHJpbmdMaXRlcmFsVHlwZUFubm90YXRpb24iLGUsdCl9LHQuYXNzZXJ0U3RyaW5nVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXthKCJTdHJpbmdUeXBlQW5ub3RhdGlvbiIsZSx0KX0sdC5hc3NlcnRTdXBlcj1mdW5jdGlvbihlLHQpe2EoIlN1cGVyIixlLHQpfSx0LmFzc2VydFN3aXRjaENhc2U9ZnVuY3Rpb24oZSx0KXthKCJTd2l0Y2hDYXNlIixlLHQpfSx0LmFzc2VydFN3aXRjaFN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2EoIlN3aXRjaFN0YXRlbWVudCIsZSx0KX0sdC5hc3NlcnRTeW1ib2xUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2EoIlN5bWJvbFR5cGVBbm5vdGF0aW9uIixlLHQpfSx0LmFzc2VydFRTQW55S2V5d29yZD1mdW5jdGlvbihlLHQpe2EoIlRTQW55S2V5d29yZCIsZSx0KX0sdC5hc3NlcnRUU0FycmF5VHlwZT1mdW5jdGlvbihlLHQpe2EoIlRTQXJyYXlUeXBlIixlLHQpfSx0LmFzc2VydFRTQXNFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7YSgiVFNBc0V4cHJlc3Npb24iLGUsdCl9LHQuYXNzZXJ0VFNCYXNlVHlwZT1mdW5jdGlvbihlLHQpe2EoIlRTQmFzZVR5cGUiLGUsdCl9LHQuYXNzZXJ0VFNCaWdJbnRLZXl3b3JkPWZ1bmN0aW9uKGUsdCl7YSgiVFNCaWdJbnRLZXl3b3JkIixlLHQpfSx0LmFzc2VydFRTQm9vbGVhbktleXdvcmQ9ZnVuY3Rpb24oZSx0KXthKCJUU0Jvb2xlYW5LZXl3b3JkIixlLHQpfSx0LmFzc2VydFRTQ2FsbFNpZ25hdHVyZURlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiVFNDYWxsU2lnbmF0dXJlRGVjbGFyYXRpb24iLGUsdCl9LHQuYXNzZXJ0VFNDb25kaXRpb25hbFR5cGU9ZnVuY3Rpb24oZSx0KXthKCJUU0NvbmRpdGlvbmFsVHlwZSIsZSx0KX0sdC5hc3NlcnRUU0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiVFNDb25zdHJ1Y3RTaWduYXR1cmVEZWNsYXJhdGlvbiIsZSx0KX0sdC5hc3NlcnRUU0NvbnN0cnVjdG9yVHlwZT1mdW5jdGlvbihlLHQpe2EoIlRTQ29uc3RydWN0b3JUeXBlIixlLHQpfSx0LmFzc2VydFRTRGVjbGFyZUZ1bmN0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiVFNEZWNsYXJlRnVuY3Rpb24iLGUsdCl9LHQuYXNzZXJ0VFNEZWNsYXJlTWV0aG9kPWZ1bmN0aW9uKGUsdCl7YSgiVFNEZWNsYXJlTWV0aG9kIixlLHQpfSx0LmFzc2VydFRTRW50aXR5TmFtZT1mdW5jdGlvbihlLHQpe2EoIlRTRW50aXR5TmFtZSIsZSx0KX0sdC5hc3NlcnRUU0VudW1EZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2EoIlRTRW51bURlY2xhcmF0aW9uIixlLHQpfSx0LmFzc2VydFRTRW51bU1lbWJlcj1mdW5jdGlvbihlLHQpe2EoIlRTRW51bU1lbWJlciIsZSx0KX0sdC5hc3NlcnRUU0V4cG9ydEFzc2lnbm1lbnQ9ZnVuY3Rpb24oZSx0KXthKCJUU0V4cG9ydEFzc2lnbm1lbnQiLGUsdCl9LHQuYXNzZXJ0VFNFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHM9ZnVuY3Rpb24oZSx0KXthKCJUU0V4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cyIsZSx0KX0sdC5hc3NlcnRUU0V4dGVybmFsTW9kdWxlUmVmZXJlbmNlPWZ1bmN0aW9uKGUsdCl7YSgiVFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSIsZSx0KX0sdC5hc3NlcnRUU0Z1bmN0aW9uVHlwZT1mdW5jdGlvbihlLHQpe2EoIlRTRnVuY3Rpb25UeXBlIixlLHQpfSx0LmFzc2VydFRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXthKCJUU0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uIixlLHQpfSx0LmFzc2VydFRTSW1wb3J0VHlwZT1mdW5jdGlvbihlLHQpe2EoIlRTSW1wb3J0VHlwZSIsZSx0KX0sdC5hc3NlcnRUU0luZGV4U2lnbmF0dXJlPWZ1bmN0aW9uKGUsdCl7YSgiVFNJbmRleFNpZ25hdHVyZSIsZSx0KX0sdC5hc3NlcnRUU0luZGV4ZWRBY2Nlc3NUeXBlPWZ1bmN0aW9uKGUsdCl7YSgiVFNJbmRleGVkQWNjZXNzVHlwZSIsZSx0KX0sdC5hc3NlcnRUU0luZmVyVHlwZT1mdW5jdGlvbihlLHQpe2EoIlRTSW5mZXJUeXBlIixlLHQpfSx0LmFzc2VydFRTSW5zdGFudGlhdGlvbkV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXthKCJUU0luc3RhbnRpYXRpb25FeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydFRTSW50ZXJmYWNlQm9keT1mdW5jdGlvbihlLHQpe2EoIlRTSW50ZXJmYWNlQm9keSIsZSx0KX0sdC5hc3NlcnRUU0ludGVyZmFjZURlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiVFNJbnRlcmZhY2VEZWNsYXJhdGlvbiIsZSx0KX0sdC5hc3NlcnRUU0ludGVyc2VjdGlvblR5cGU9ZnVuY3Rpb24oZSx0KXthKCJUU0ludGVyc2VjdGlvblR5cGUiLGUsdCl9LHQuYXNzZXJ0VFNJbnRyaW5zaWNLZXl3b3JkPWZ1bmN0aW9uKGUsdCl7YSgiVFNJbnRyaW5zaWNLZXl3b3JkIixlLHQpfSx0LmFzc2VydFRTTGl0ZXJhbFR5cGU9ZnVuY3Rpb24oZSx0KXthKCJUU0xpdGVyYWxUeXBlIixlLHQpfSx0LmFzc2VydFRTTWFwcGVkVHlwZT1mdW5jdGlvbihlLHQpe2EoIlRTTWFwcGVkVHlwZSIsZSx0KX0sdC5hc3NlcnRUU01ldGhvZFNpZ25hdHVyZT1mdW5jdGlvbihlLHQpe2EoIlRTTWV0aG9kU2lnbmF0dXJlIixlLHQpfSx0LmFzc2VydFRTTW9kdWxlQmxvY2s9ZnVuY3Rpb24oZSx0KXthKCJUU01vZHVsZUJsb2NrIixlLHQpfSx0LmFzc2VydFRTTW9kdWxlRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXthKCJUU01vZHVsZURlY2xhcmF0aW9uIixlLHQpfSx0LmFzc2VydFRTTmFtZWRUdXBsZU1lbWJlcj1mdW5jdGlvbihlLHQpe2EoIlRTTmFtZWRUdXBsZU1lbWJlciIsZSx0KX0sdC5hc3NlcnRUU05hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbiIsZSx0KX0sdC5hc3NlcnRUU05ldmVyS2V5d29yZD1mdW5jdGlvbihlLHQpe2EoIlRTTmV2ZXJLZXl3b3JkIixlLHQpfSx0LmFzc2VydFRTTm9uTnVsbEV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXthKCJUU05vbk51bGxFeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydFRTTnVsbEtleXdvcmQ9ZnVuY3Rpb24oZSx0KXthKCJUU051bGxLZXl3b3JkIixlLHQpfSx0LmFzc2VydFRTTnVtYmVyS2V5d29yZD1mdW5jdGlvbihlLHQpe2EoIlRTTnVtYmVyS2V5d29yZCIsZSx0KX0sdC5hc3NlcnRUU09iamVjdEtleXdvcmQ9ZnVuY3Rpb24oZSx0KXthKCJUU09iamVjdEtleXdvcmQiLGUsdCl9LHQuYXNzZXJ0VFNPcHRpb25hbFR5cGU9ZnVuY3Rpb24oZSx0KXthKCJUU09wdGlvbmFsVHlwZSIsZSx0KX0sdC5hc3NlcnRUU1BhcmFtZXRlclByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7YSgiVFNQYXJhbWV0ZXJQcm9wZXJ0eSIsZSx0KX0sdC5hc3NlcnRUU1BhcmVudGhlc2l6ZWRUeXBlPWZ1bmN0aW9uKGUsdCl7YSgiVFNQYXJlbnRoZXNpemVkVHlwZSIsZSx0KX0sdC5hc3NlcnRUU1Byb3BlcnR5U2lnbmF0dXJlPWZ1bmN0aW9uKGUsdCl7YSgiVFNQcm9wZXJ0eVNpZ25hdHVyZSIsZSx0KX0sdC5hc3NlcnRUU1F1YWxpZmllZE5hbWU9ZnVuY3Rpb24oZSx0KXthKCJUU1F1YWxpZmllZE5hbWUiLGUsdCl9LHQuYXNzZXJ0VFNSZXN0VHlwZT1mdW5jdGlvbihlLHQpe2EoIlRTUmVzdFR5cGUiLGUsdCl9LHQuYXNzZXJ0VFNTYXRpc2ZpZXNFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7YSgiVFNTYXRpc2ZpZXNFeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydFRTU3RyaW5nS2V5d29yZD1mdW5jdGlvbihlLHQpe2EoIlRTU3RyaW5nS2V5d29yZCIsZSx0KX0sdC5hc3NlcnRUU1N5bWJvbEtleXdvcmQ9ZnVuY3Rpb24oZSx0KXthKCJUU1N5bWJvbEtleXdvcmQiLGUsdCl9LHQuYXNzZXJ0VFNUaGlzVHlwZT1mdW5jdGlvbihlLHQpe2EoIlRTVGhpc1R5cGUiLGUsdCl9LHQuYXNzZXJ0VFNUdXBsZVR5cGU9ZnVuY3Rpb24oZSx0KXthKCJUU1R1cGxlVHlwZSIsZSx0KX0sdC5hc3NlcnRUU1R5cGU9ZnVuY3Rpb24oZSx0KXthKCJUU1R5cGUiLGUsdCl9LHQuYXNzZXJ0VFNUeXBlQWxpYXNEZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2EoIlRTVHlwZUFsaWFzRGVjbGFyYXRpb24iLGUsdCl9LHQuYXNzZXJ0VFNUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2EoIlRTVHlwZUFubm90YXRpb24iLGUsdCl9LHQuYXNzZXJ0VFNUeXBlQXNzZXJ0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiVFNUeXBlQXNzZXJ0aW9uIixlLHQpfSx0LmFzc2VydFRTVHlwZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXthKCJUU1R5cGVFbGVtZW50IixlLHQpfSx0LmFzc2VydFRTVHlwZUxpdGVyYWw9ZnVuY3Rpb24oZSx0KXthKCJUU1R5cGVMaXRlcmFsIixlLHQpfSx0LmFzc2VydFRTVHlwZU9wZXJhdG9yPWZ1bmN0aW9uKGUsdCl7YSgiVFNUeXBlT3BlcmF0b3IiLGUsdCl9LHQuYXNzZXJ0VFNUeXBlUGFyYW1ldGVyPWZ1bmN0aW9uKGUsdCl7YSgiVFNUeXBlUGFyYW1ldGVyIixlLHQpfSx0LmFzc2VydFRTVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iLGUsdCl9LHQuYXNzZXJ0VFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbj1mdW5jdGlvbihlLHQpe2EoIlRTVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iLGUsdCl9LHQuYXNzZXJ0VFNUeXBlUHJlZGljYXRlPWZ1bmN0aW9uKGUsdCl7YSgiVFNUeXBlUHJlZGljYXRlIixlLHQpfSx0LmFzc2VydFRTVHlwZVF1ZXJ5PWZ1bmN0aW9uKGUsdCl7YSgiVFNUeXBlUXVlcnkiLGUsdCl9LHQuYXNzZXJ0VFNUeXBlUmVmZXJlbmNlPWZ1bmN0aW9uKGUsdCl7YSgiVFNUeXBlUmVmZXJlbmNlIixlLHQpfSx0LmFzc2VydFRTVW5kZWZpbmVkS2V5d29yZD1mdW5jdGlvbihlLHQpe2EoIlRTVW5kZWZpbmVkS2V5d29yZCIsZSx0KX0sdC5hc3NlcnRUU1VuaW9uVHlwZT1mdW5jdGlvbihlLHQpe2EoIlRTVW5pb25UeXBlIixlLHQpfSx0LmFzc2VydFRTVW5rbm93bktleXdvcmQ9ZnVuY3Rpb24oZSx0KXthKCJUU1Vua25vd25LZXl3b3JkIixlLHQpfSx0LmFzc2VydFRTVm9pZEtleXdvcmQ9ZnVuY3Rpb24oZSx0KXthKCJUU1ZvaWRLZXl3b3JkIixlLHQpfSx0LmFzc2VydFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiIsZSx0KX0sdC5hc3NlcnRUZW1wbGF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXthKCJUZW1wbGF0ZUVsZW1lbnQiLGUsdCl9LHQuYXNzZXJ0VGVtcGxhdGVMaXRlcmFsPWZ1bmN0aW9uKGUsdCl7YSgiVGVtcGxhdGVMaXRlcmFsIixlLHQpfSx0LmFzc2VydFRlcm1pbmF0b3JsZXNzPWZ1bmN0aW9uKGUsdCl7YSgiVGVybWluYXRvcmxlc3MiLGUsdCl9LHQuYXNzZXJ0VGhpc0V4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXthKCJUaGlzRXhwcmVzc2lvbiIsZSx0KX0sdC5hc3NlcnRUaGlzVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXthKCJUaGlzVHlwZUFubm90YXRpb24iLGUsdCl9LHQuYXNzZXJ0VGhyb3dTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXthKCJUaHJvd1N0YXRlbWVudCIsZSx0KX0sdC5hc3NlcnRUb3BpY1JlZmVyZW5jZT1mdW5jdGlvbihlLHQpe2EoIlRvcGljUmVmZXJlbmNlIixlLHQpfSx0LmFzc2VydFRyeVN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2EoIlRyeVN0YXRlbWVudCIsZSx0KX0sdC5hc3NlcnRUdXBsZUV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXthKCJUdXBsZUV4cHJlc3Npb24iLGUsdCl9LHQuYXNzZXJ0VHVwbGVUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2EoIlR1cGxlVHlwZUFubm90YXRpb24iLGUsdCl9LHQuYXNzZXJ0VHlwZUFsaWFzPWZ1bmN0aW9uKGUsdCl7YSgiVHlwZUFsaWFzIixlLHQpfSx0LmFzc2VydFR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiVHlwZUFubm90YXRpb24iLGUsdCl9LHQuYXNzZXJ0VHlwZUNhc3RFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7YSgiVHlwZUNhc3RFeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydFR5cGVQYXJhbWV0ZXI9ZnVuY3Rpb24oZSx0KXthKCJUeXBlUGFyYW1ldGVyIixlLHQpfSx0LmFzc2VydFR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2EoIlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIsZSx0KX0sdC5hc3NlcnRUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbj1mdW5jdGlvbihlLHQpe2EoIlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIixlLHQpfSx0LmFzc2VydFR5cGVTY3JpcHQ9ZnVuY3Rpb24oZSx0KXthKCJUeXBlU2NyaXB0IixlLHQpfSx0LmFzc2VydFR5cGVvZlR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiVHlwZW9mVHlwZUFubm90YXRpb24iLGUsdCl9LHQuYXNzZXJ0VW5hcnlFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7YSgiVW5hcnlFeHByZXNzaW9uIixlLHQpfSx0LmFzc2VydFVuYXJ5TGlrZT1mdW5jdGlvbihlLHQpe2EoIlVuYXJ5TGlrZSIsZSx0KX0sdC5hc3NlcnRVbmlvblR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiVW5pb25UeXBlQW5ub3RhdGlvbiIsZSx0KX0sdC5hc3NlcnRVcGRhdGVFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7YSgiVXBkYXRlRXhwcmVzc2lvbiIsZSx0KX0sdC5hc3NlcnRVc2VyV2hpdGVzcGFjYWJsZT1mdW5jdGlvbihlLHQpe2EoIlVzZXJXaGl0ZXNwYWNhYmxlIixlLHQpfSx0LmFzc2VydFY4SW50cmluc2ljSWRlbnRpZmllcj1mdW5jdGlvbihlLHQpe2EoIlY4SW50cmluc2ljSWRlbnRpZmllciIsZSx0KX0sdC5hc3NlcnRWYXJpYWJsZURlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7YSgiVmFyaWFibGVEZWNsYXJhdGlvbiIsZSx0KX0sdC5hc3NlcnRWYXJpYWJsZURlY2xhcmF0b3I9ZnVuY3Rpb24oZSx0KXthKCJWYXJpYWJsZURlY2xhcmF0b3IiLGUsdCl9LHQuYXNzZXJ0VmFyaWFuY2U9ZnVuY3Rpb24oZSx0KXthKCJWYXJpYW5jZSIsZSx0KX0sdC5hc3NlcnRWb2lkVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXthKCJWb2lkVHlwZUFubm90YXRpb24iLGUsdCl9LHQuYXNzZXJ0V2hpbGU9ZnVuY3Rpb24oZSx0KXthKCJXaGlsZSIsZSx0KX0sdC5hc3NlcnRXaGlsZVN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2EoIldoaWxlU3RhdGVtZW50IixlLHQpfSx0LmFzc2VydFdpdGhTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXthKCJXaXRoU3RhdGVtZW50IixlLHQpfSx0LmFzc2VydFlpZWxkRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2EoIllpZWxkRXhwcmVzc2lvbiIsZSx0KX07dmFyIHI9bigiMTc3YiIpLGk9bigiYTljNyIpO2Z1bmN0aW9uIGEoZSx0LG4pe2lmKCEoMCxyLmRlZmF1bHQpKGUsdCxuKSl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHR5cGUgIiR7ZX0iIHdpdGggb3B0aW9uICR7SlNPTi5zdHJpbmdpZnkobil9LCBidXQgaW5zdGVhZCBnb3QgIiR7dC50eXBlfSIuYCl9fSwiMDljOCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiNGYzOCIpLl9faW1wb3J0RGVmYXVsdChuKCI0MWJhIikpO3QuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLnVzZShyLmRlZmF1bHQpLG49dC5UeXBlLGk9dC5idWlsdEluVHlwZXMsYT1pLm51bWJlcixvPW4ub3IoaS5zdHJpbmcsaS5udW1iZXIsaS5ib29sZWFuLGkubnVsbCxpLnVuZGVmaW5lZCk7cmV0dXJue2dlcTpmdW5jdGlvbihlKXtyZXR1cm4gbi5mcm9tKChmdW5jdGlvbih0KXtyZXR1cm4gYS5jaGVjayh0KSYmdD49ZX0pLGErIiA+PSAiK2UpfSxkZWZhdWx0czp7bnVsbDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxlbXB0eUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuW119LGZhbHNlOmZ1bmN0aW9uKCl7cmV0dXJuITF9LHRydWU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdW5kZWZpbmVkOmZ1bmN0aW9uKCl7fSwidXNlIHN0cmljdCI6ZnVuY3Rpb24oKXtyZXR1cm4idXNlIHN0cmljdCJ9fSxpc1ByaW1pdGl2ZTpuLmZyb20oKGZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lKXJldHVybiEwO3ZhciB0PXR5cGVvZiBlO3JldHVybiJvYmplY3QiIT09dCYmImZ1bmN0aW9uIiE9PXR9KSxvLnRvU3RyaW5nKCkpfX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sIjBkNmQiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCI5OGU2Iik7dC5lbmNvZGU9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixpPWZ1bmN0aW9uKGUpe3JldHVybiBlPDA/MSsoLWU8PDEpOjArKGU8PDEpfShlKTtkb3t0PTMxJmksKGk+Pj49NSk+MCYmKHR8PTMyKSxuKz1yLmVuY29kZSh0KX13aGlsZShpPjApO3JldHVybiBufSx0LmRlY29kZT1mdW5jdGlvbihlLHQsbil7dmFyIGksYSxvPWUubGVuZ3RoLHM9MCxsPTA7ZG97aWYodD49byl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLiIpO2lmKC0xPT09KGE9ci5kZWNvZGUoZS5jaGFyQ29kZUF0KHQrKykpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYmFzZTY0IGRpZ2l0OiAiK2UuY2hhckF0KHQtMSkpO2k9ISEoMzImYSkscys9KGEmPTMxKTw8bCxsKz01fXdoaWxlKGkpO24udmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT4+MTtyZXR1cm4gMT09KDEmZSk/LXQ6dH0ocyksbi5yZXN0PXR9fSwxMDkzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiEwO2lmKHIuQUxJQVNfS0VZU1t0XSlyZXR1cm4hMTtjb25zdCBuPXIuRkxJUFBFRF9BTElBU19LRVlTW3RdO2lmKG4pe2lmKG5bMF09PT1lKXJldHVybiEwO2Zvcihjb25zdCB0IG9mIG4paWYoZT09PXQpcmV0dXJuITB9cmV0dXJuITF9O3ZhciByPW4oImI5NzgiKX0sIjExN2QiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNLZXl3b3JkPWZ1bmN0aW9uKGUpe3JldHVybiBhLmhhcyhlKX0sdC5pc1Jlc2VydmVkV29yZD1sLHQuaXNTdHJpY3RCaW5kT25seVJlc2VydmVkV29yZD1wLHQuaXNTdHJpY3RCaW5kUmVzZXJ2ZWRXb3JkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0KXx8cChlKX0sdC5pc1N0cmljdFJlc2VydmVkV29yZD11O2NvbnN0IHI9WyJpbXBsZW1lbnRzIiwiaW50ZXJmYWNlIiwibGV0IiwicGFja2FnZSIsInByaXZhdGUiLCJwcm90ZWN0ZWQiLCJwdWJsaWMiLCJzdGF0aWMiLCJ5aWVsZCJdLGk9WyJldmFsIiwiYXJndW1lbnRzIl0sYT1uZXcgU2V0KFsiYnJlYWsiLCJjYXNlIiwiY2F0Y2giLCJjb250aW51ZSIsImRlYnVnZ2VyIiwiZGVmYXVsdCIsImRvIiwiZWxzZSIsImZpbmFsbHkiLCJmb3IiLCJmdW5jdGlvbiIsImlmIiwicmV0dXJuIiwic3dpdGNoIiwidGhyb3ciLCJ0cnkiLCJ2YXIiLCJjb25zdCIsIndoaWxlIiwid2l0aCIsIm5ldyIsInRoaXMiLCJzdXBlciIsImNsYXNzIiwiZXh0ZW5kcyIsImV4cG9ydCIsImltcG9ydCIsIm51bGwiLCJ0cnVlIiwiZmFsc2UiLCJpbiIsImluc3RhbmNlb2YiLCJ0eXBlb2YiLCJ2b2lkIiwiZGVsZXRlIl0pLG89bmV3IFNldChyKSxzPW5ldyBTZXQoaSk7ZnVuY3Rpb24gbChlLHQpe3JldHVybiB0JiYiYXdhaXQiPT09ZXx8ImVudW0iPT09ZX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIGwoZSx0KXx8by5oYXMoZSl9ZnVuY3Rpb24gcChlKXtyZXR1cm4gcy5oYXMoZSl9fSwxMjY3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIjRmMzgiKSxpPXIuX19pbXBvcnREZWZhdWx0KG4oIjNmZTIiKSksYT1yLl9faW1wb3J0RGVmYXVsdChuKCI0MWJhIikpLG89ci5fX2ltcG9ydERlZmF1bHQobigiMDljOCIpKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7ZS51c2UoaS5kZWZhdWx0KTt2YXIgdD1lLnVzZShhLmRlZmF1bHQpLG49ZS51c2Uoby5kZWZhdWx0KS5kZWZhdWx0cyxyPXQuVHlwZS5kZWYscz10LlR5cGUub3I7cigiTm9vcCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgpLHIoIkRvRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImJvZHkiKS5maWVsZCgiYm9keSIsW3IoIlN0YXRlbWVudCIpXSkscigiQmluZEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJvYmplY3QiLCJjYWxsZWUiKS5maWVsZCgib2JqZWN0IixzKHIoIkV4cHJlc3Npb24iKSxudWxsKSkuZmllbGQoImNhbGxlZSIscigiRXhwcmVzc2lvbiIpKSxyKCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImV4cHJlc3Npb24iKS5maWVsZCgiZXhwcmVzc2lvbiIscigiRXhwcmVzc2lvbiIpKSxyKCJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiKS5iYXNlcygiU3BlY2lmaWVyIikuYnVpbGQoImV4cG9ydGVkIikuZmllbGQoImV4cG9ydGVkIixyKCJJZGVudGlmaWVyIikpLHIoIkV4cG9ydERlZmF1bHRTcGVjaWZpZXIiKS5iYXNlcygiU3BlY2lmaWVyIikuYnVpbGQoImV4cG9ydGVkIikuZmllbGQoImV4cG9ydGVkIixyKCJJZGVudGlmaWVyIikpLHIoIkNvbW1lbnRCbG9jayIpLmJhc2VzKCJDb21tZW50IikuYnVpbGQoInZhbHVlIiwibGVhZGluZyIsInRyYWlsaW5nIikscigiQ29tbWVudExpbmUiKS5iYXNlcygiQ29tbWVudCIpLmJ1aWxkKCJ2YWx1ZSIsImxlYWRpbmciLCJ0cmFpbGluZyIpLHIoIkRpcmVjdGl2ZSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInZhbHVlIikuZmllbGQoInZhbHVlIixyKCJEaXJlY3RpdmVMaXRlcmFsIikpLHIoIkRpcmVjdGl2ZUxpdGVyYWwiKS5iYXNlcygiTm9kZSIsIkV4cHJlc3Npb24iKS5idWlsZCgidmFsdWUiKS5maWVsZCgidmFsdWUiLFN0cmluZyxuWyJ1c2Ugc3RyaWN0Il0pLHIoIkludGVycHJldGVyRGlyZWN0aXZlIikuYmFzZXMoIk5vZGUiKS5idWlsZCgidmFsdWUiKS5maWVsZCgidmFsdWUiLFN0cmluZykscigiQmxvY2tTdGF0ZW1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoImJvZHkiKS5maWVsZCgiYm9keSIsW3IoIlN0YXRlbWVudCIpXSkuZmllbGQoImRpcmVjdGl2ZXMiLFtyKCJEaXJlY3RpdmUiKV0sbi5lbXB0eUFycmF5KSxyKCJQcm9ncmFtIikuYmFzZXMoIk5vZGUiKS5idWlsZCgiYm9keSIpLmZpZWxkKCJib2R5IixbcigiU3RhdGVtZW50IildKS5maWVsZCgiZGlyZWN0aXZlcyIsW3IoIkRpcmVjdGl2ZSIpXSxuLmVtcHR5QXJyYXkpLmZpZWxkKCJpbnRlcnByZXRlciIscyhyKCJJbnRlcnByZXRlckRpcmVjdGl2ZSIpLG51bGwpLG4ubnVsbCkscigiU3RyaW5nTGl0ZXJhbCIpLmJhc2VzKCJMaXRlcmFsIikuYnVpbGQoInZhbHVlIikuZmllbGQoInZhbHVlIixTdHJpbmcpLHIoIk51bWVyaWNMaXRlcmFsIikuYmFzZXMoIkxpdGVyYWwiKS5idWlsZCgidmFsdWUiKS5maWVsZCgidmFsdWUiLE51bWJlcikuZmllbGQoInJhdyIscyhTdHJpbmcsbnVsbCksbi5udWxsKS5maWVsZCgiZXh0cmEiLHtyYXdWYWx1ZTpOdW1iZXIscmF3OlN0cmluZ30sKGZ1bmN0aW9uKCl7cmV0dXJue3Jhd1ZhbHVlOnRoaXMudmFsdWUscmF3OnRoaXMudmFsdWUrIiJ9fSkpLHIoIkJpZ0ludExpdGVyYWwiKS5iYXNlcygiTGl0ZXJhbCIpLmJ1aWxkKCJ2YWx1ZSIpLmZpZWxkKCJ2YWx1ZSIscyhTdHJpbmcsTnVtYmVyKSkuZmllbGQoImV4dHJhIix7cmF3VmFsdWU6U3RyaW5nLHJhdzpTdHJpbmd9LChmdW5jdGlvbigpe3JldHVybntyYXdWYWx1ZTpTdHJpbmcodGhpcy52YWx1ZSkscmF3OnRoaXMudmFsdWUrIm4ifX0pKSxyKCJOdWxsTGl0ZXJhbCIpLmJhc2VzKCJMaXRlcmFsIikuYnVpbGQoKS5maWVsZCgidmFsdWUiLG51bGwsbi5udWxsKSxyKCJCb29sZWFuTGl0ZXJhbCIpLmJhc2VzKCJMaXRlcmFsIikuYnVpbGQoInZhbHVlIikuZmllbGQoInZhbHVlIixCb29sZWFuKSxyKCJSZWdFeHBMaXRlcmFsIikuYmFzZXMoIkxpdGVyYWwiKS5idWlsZCgicGF0dGVybiIsImZsYWdzIikuZmllbGQoInBhdHRlcm4iLFN0cmluZykuZmllbGQoImZsYWdzIixTdHJpbmcpLmZpZWxkKCJ2YWx1ZSIsUmVnRXhwLChmdW5jdGlvbigpe3JldHVybiBuZXcgUmVnRXhwKHRoaXMucGF0dGVybix0aGlzLmZsYWdzKX0pKTt2YXIgbD1zKHIoIlByb3BlcnR5IikscigiT2JqZWN0TWV0aG9kIikscigiT2JqZWN0UHJvcGVydHkiKSxyKCJTcHJlYWRQcm9wZXJ0eSIpLHIoIlNwcmVhZEVsZW1lbnQiKSk7cigiT2JqZWN0RXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoInByb3BlcnRpZXMiKS5maWVsZCgicHJvcGVydGllcyIsW2xdKSxyKCJPYmplY3RNZXRob2QiKS5iYXNlcygiTm9kZSIsIkZ1bmN0aW9uIikuYnVpbGQoImtpbmQiLCJrZXkiLCJwYXJhbXMiLCJib2R5IiwiY29tcHV0ZWQiKS5maWVsZCgia2luZCIscygibWV0aG9kIiwiZ2V0Iiwic2V0IikpLmZpZWxkKCJrZXkiLHMocigiTGl0ZXJhbCIpLHIoIklkZW50aWZpZXIiKSxyKCJFeHByZXNzaW9uIikpKS5maWVsZCgicGFyYW1zIixbcigiUGF0dGVybiIpXSkuZmllbGQoImJvZHkiLHIoIkJsb2NrU3RhdGVtZW50IikpLmZpZWxkKCJjb21wdXRlZCIsQm9vbGVhbixuLmZhbHNlKS5maWVsZCgiZ2VuZXJhdG9yIixCb29sZWFuLG4uZmFsc2UpLmZpZWxkKCJhc3luYyIsQm9vbGVhbixuLmZhbHNlKS5maWVsZCgiYWNjZXNzaWJpbGl0eSIscyhyKCJMaXRlcmFsIiksbnVsbCksbi5udWxsKS5maWVsZCgiZGVjb3JhdG9ycyIscyhbcigiRGVjb3JhdG9yIildLG51bGwpLG4ubnVsbCkscigiT2JqZWN0UHJvcGVydHkiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJrZXkiLCJ2YWx1ZSIpLmZpZWxkKCJrZXkiLHMocigiTGl0ZXJhbCIpLHIoIklkZW50aWZpZXIiKSxyKCJFeHByZXNzaW9uIikpKS5maWVsZCgidmFsdWUiLHMocigiRXhwcmVzc2lvbiIpLHIoIlBhdHRlcm4iKSkpLmZpZWxkKCJhY2Nlc3NpYmlsaXR5IixzKHIoIkxpdGVyYWwiKSxudWxsKSxuLm51bGwpLmZpZWxkKCJjb21wdXRlZCIsQm9vbGVhbixuLmZhbHNlKTt2YXIgdT1zKHIoIk1ldGhvZERlZmluaXRpb24iKSxyKCJWYXJpYWJsZURlY2xhcmF0b3IiKSxyKCJDbGFzc1Byb3BlcnR5RGVmaW5pdGlvbiIpLHIoIkNsYXNzUHJvcGVydHkiKSxyKCJDbGFzc1ByaXZhdGVQcm9wZXJ0eSIpLHIoIkNsYXNzTWV0aG9kIikscigiQ2xhc3NQcml2YXRlTWV0aG9kIikpO3IoIkNsYXNzQm9keSIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJib2R5IikuZmllbGQoImJvZHkiLFt1XSkscigiQ2xhc3NNZXRob2QiKS5iYXNlcygiRGVjbGFyYXRpb24iLCJGdW5jdGlvbiIpLmJ1aWxkKCJraW5kIiwia2V5IiwicGFyYW1zIiwiYm9keSIsImNvbXB1dGVkIiwic3RhdGljIikuZmllbGQoImtleSIscyhyKCJMaXRlcmFsIikscigiSWRlbnRpZmllciIpLHIoIkV4cHJlc3Npb24iKSkpLHIoIkNsYXNzUHJpdmF0ZU1ldGhvZCIpLmJhc2VzKCJEZWNsYXJhdGlvbiIsIkZ1bmN0aW9uIikuYnVpbGQoImtleSIsInBhcmFtcyIsImJvZHkiLCJraW5kIiwiY29tcHV0ZWQiLCJzdGF0aWMiKS5maWVsZCgia2V5IixyKCJQcml2YXRlTmFtZSIpKSxbIkNsYXNzTWV0aG9kIiwiQ2xhc3NQcml2YXRlTWV0aG9kIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cihlKS5maWVsZCgia2luZCIscygiZ2V0Iiwic2V0IiwibWV0aG9kIiwiY29uc3RydWN0b3IiKSwoZnVuY3Rpb24oKXtyZXR1cm4ibWV0aG9kIn0pKS5maWVsZCgiYm9keSIscigiQmxvY2tTdGF0ZW1lbnQiKSkuZmllbGQoImNvbXB1dGVkIixCb29sZWFuLG4uZmFsc2UpLmZpZWxkKCJzdGF0aWMiLHMoQm9vbGVhbixudWxsKSxuLm51bGwpLmZpZWxkKCJhYnN0cmFjdCIscyhCb29sZWFuLG51bGwpLG4ubnVsbCkuZmllbGQoImFjY2VzcyIscygicHVibGljIiwicHJpdmF0ZSIsInByb3RlY3RlZCIsbnVsbCksbi5udWxsKS5maWVsZCgiYWNjZXNzaWJpbGl0eSIscygicHVibGljIiwicHJpdmF0ZSIsInByb3RlY3RlZCIsbnVsbCksbi5udWxsKS5maWVsZCgiZGVjb3JhdG9ycyIscyhbcigiRGVjb3JhdG9yIildLG51bGwpLG4ubnVsbCkuZmllbGQoIm9wdGlvbmFsIixzKEJvb2xlYW4sbnVsbCksbi5udWxsKX0pKTt2YXIgcD1zKHIoIlByb3BlcnR5IikscigiUHJvcGVydHlQYXR0ZXJuIikscigiU3ByZWFkUHJvcGVydHlQYXR0ZXJuIikscigiU3ByZWFkUHJvcGVydHkiKSxyKCJPYmplY3RQcm9wZXJ0eSIpLHIoIlJlc3RQcm9wZXJ0eSIpKTtyKCJPYmplY3RQYXR0ZXJuIikuYmFzZXMoIlBhdHRlcm4iKS5idWlsZCgicHJvcGVydGllcyIpLmZpZWxkKCJwcm9wZXJ0aWVzIixbcF0pLmZpZWxkKCJkZWNvcmF0b3JzIixzKFtyKCJEZWNvcmF0b3IiKV0sbnVsbCksbi5udWxsKSxyKCJTcHJlYWRQcm9wZXJ0eSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixyKCJFeHByZXNzaW9uIikpLHIoIlJlc3RQcm9wZXJ0eSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixyKCJFeHByZXNzaW9uIikpLHIoIkZvckF3YWl0U3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJsZWZ0IiwicmlnaHQiLCJib2R5IikuZmllbGQoImxlZnQiLHMocigiVmFyaWFibGVEZWNsYXJhdGlvbiIpLHIoIkV4cHJlc3Npb24iKSkpLmZpZWxkKCJyaWdodCIscigiRXhwcmVzc2lvbiIpKS5maWVsZCgiYm9keSIscigiU3RhdGVtZW50IikpLHIoIkltcG9ydCIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoKX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sMTMxNTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LG4pe3QmJm4mJih0W2VdPUFycmF5LmZyb20obmV3IFNldChbXS5jb25jYXQodFtlXSxuW2VdKS5maWx0ZXIoQm9vbGVhbikpKSl9fSwxNjMzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQpe2NvbnN0IG49ZS52YWx1ZS5zcGxpdCgvXHJcbnxcbnxcci8pO2xldCBhPTA7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspbltlXS5tYXRjaCgvW14gXHRdLykmJihhPWUpO2xldCBvPSIiO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtjb25zdCB0PW5bZV0scj0wPT09ZSxpPWU9PT1uLmxlbmd0aC0xLHM9ZT09PWE7bGV0IGw9dC5yZXBsYWNlKC9cdC9nLCIgIik7cnx8KGw9bC5yZXBsYWNlKC9eWyBdKy8sIiIpKSxpfHwobD1sLnJlcGxhY2UoL1sgXSskLywiIikpLGwmJihzfHwobCs9IiAiKSxvKz1sKX1vJiZ0LnB1c2goKDAsaS5pbmhlcml0cykoKDAsci5zdHJpbmdMaXRlcmFsKShvKSxlKSl9O3ZhciByPW4oImViNWIiKSxpPW4oIjI1MmEiKX0sIjE2ZTYiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTG9naWNhbE9wZXJhdG9ycz10LkFzc2lnbm1lbnRPcGVyYXRvcnM9dC5CaW5hcnlPcGVyYXRvcnM9dm9pZCAwLHQuQmluYXJ5T3BlcmF0b3JzPVsiPT0iLCIhPSIsIj09PSIsIiE9PSIsIjwiLCI8PSIsIj4iLCI+PSIsIjw8IiwiPj4iLCI+Pj4iLCIrIiwiLSIsIioiLCIvIiwiJSIsIiYiLCJ8IiwiXiIsImluIiwiaW5zdGFuY2VvZiJdLHQuQXNzaWdubWVudE9wZXJhdG9ycz1bIj0iLCIrPSIsIi09IiwiKj0iLCIvPSIsIiU9IiwiPDw9IiwiPj49IiwiPj4+PSIsInw9IiwiXj0iLCImPSJdLHQuTG9naWNhbE9wZXJhdG9ycz1bInx8IiwiJiYiXX0sIjE3N2IiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQsbil7aWYoIXQpcmV0dXJuITE7cmV0dXJuKDAsaS5kZWZhdWx0KSh0LnR5cGUsZSk/dm9pZCAwPT09bnx8KDAsci5kZWZhdWx0KSh0LG4pOiFuJiYiUGxhY2Vob2xkZXIiPT09dC50eXBlJiZlIGluIG8uRkxJUFBFRF9BTElBU19LRVlTJiYoMCxhLmRlZmF1bHQpKHQuZXhwZWN0ZWROb2RlLGUpfTt2YXIgcj1uKCIzOTJlIiksaT1uKCIxMDkzIiksYT1uKCJlM2Q4Iiksbz1uKCJiOTc4Iil9LCIxOWZhMyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiNGYzOCIpLGk9ci5fX2ltcG9ydERlZmF1bHQobigiMWUxZiIpKSxhPXIuX19pbXBvcnREZWZhdWx0KG4oIjQxYmEiKSksbz1yLl9faW1wb3J0RGVmYXVsdChuKCIwOWM4IikpO3QuZGVmYXVsdD1mdW5jdGlvbihlKXtlLnVzZShpLmRlZmF1bHQpO3ZhciB0PWUudXNlKGEuZGVmYXVsdCksbj1lLnVzZShvLmRlZmF1bHQpLmRlZmF1bHRzLHI9dC5UeXBlLmRlZixzPXQuVHlwZS5vcjtyKCJWYXJpYWJsZURlY2xhcmF0aW9uIikuZmllbGQoImRlY2xhcmF0aW9ucyIsW3MocigiVmFyaWFibGVEZWNsYXJhdG9yIikscigiSWRlbnRpZmllciIpKV0pLHIoIlByb3BlcnR5IikuZmllbGQoInZhbHVlIixzKHIoIkV4cHJlc3Npb24iKSxyKCJQYXR0ZXJuIikpKSxyKCJBcnJheVBhdHRlcm4iKS5maWVsZCgiZWxlbWVudHMiLFtzKHIoIlBhdHRlcm4iKSxyKCJTcHJlYWRFbGVtZW50IiksbnVsbCldKSxyKCJPYmplY3RQYXR0ZXJuIikuZmllbGQoInByb3BlcnRpZXMiLFtzKHIoIlByb3BlcnR5IikscigiUHJvcGVydHlQYXR0ZXJuIikscigiU3ByZWFkUHJvcGVydHlQYXR0ZXJuIikscigiU3ByZWFkUHJvcGVydHkiKSldKSxyKCJFeHBvcnRTcGVjaWZpZXIiKS5iYXNlcygiTW9kdWxlU3BlY2lmaWVyIikuYnVpbGQoImlkIiwibmFtZSIpLHIoIkV4cG9ydEJhdGNoU3BlY2lmaWVyIikuYmFzZXMoIlNwZWNpZmllciIpLmJ1aWxkKCkscigiRXhwb3J0RGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgiZGVmYXVsdCIsImRlY2xhcmF0aW9uIiwic3BlY2lmaWVycyIsInNvdXJjZSIpLmZpZWxkKCJkZWZhdWx0IixCb29sZWFuKS5maWVsZCgiZGVjbGFyYXRpb24iLHMocigiRGVjbGFyYXRpb24iKSxyKCJFeHByZXNzaW9uIiksbnVsbCkpLmZpZWxkKCJzcGVjaWZpZXJzIixbcyhyKCJFeHBvcnRTcGVjaWZpZXIiKSxyKCJFeHBvcnRCYXRjaFNwZWNpZmllciIpKV0sbi5lbXB0eUFycmF5KS5maWVsZCgic291cmNlIixzKHIoIkxpdGVyYWwiKSxudWxsKSxuLm51bGwpLHIoIkJsb2NrIikuYmFzZXMoIkNvbW1lbnQiKS5idWlsZCgidmFsdWUiLCJsZWFkaW5nIiwidHJhaWxpbmciKSxyKCJMaW5lIikuYmFzZXMoIkNvbW1lbnQiKS5idWlsZCgidmFsdWUiLCJsZWFkaW5nIiwidHJhaWxpbmciKX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sIjFhZmYiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbiBlKHQpe2NvbnN0IG49bmV3IE1hcCxhPW5ldyBNYXAsbz1uZXcgU2V0LHM9W107Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKyspe2NvbnN0IHU9dFtsXTtpZih1JiYhKHMuaW5kZXhPZih1KT49MCkpe2lmKCgwLHIuaXNUU0FueUtleXdvcmQpKHUpKXJldHVyblt1XTtpZigoMCxyLmlzVFNCYXNlVHlwZSkodSkpYS5zZXQodS50eXBlLHUpO2Vsc2UgaWYoKDAsci5pc1RTVW5pb25UeXBlKSh1KSlvLmhhcyh1LnR5cGVzKXx8KHQucHVzaCguLi51LnR5cGVzKSxvLmFkZCh1LnR5cGVzKSk7ZWxzZSBpZigoMCxyLmlzVFNUeXBlUmVmZXJlbmNlKSh1KSYmdS50eXBlUGFyYW1ldGVycyl7Y29uc3QgdD1pKHUudHlwZU5hbWUpO2lmKG4uaGFzKHQpKXtsZXQgcj1uLmdldCh0KTtyLnR5cGVQYXJhbWV0ZXJzP3UudHlwZVBhcmFtZXRlcnMmJihyLnR5cGVQYXJhbWV0ZXJzLnBhcmFtcz1lKHIudHlwZVBhcmFtZXRlcnMucGFyYW1zLmNvbmNhdCh1LnR5cGVQYXJhbWV0ZXJzLnBhcmFtcykpKTpyPXUudHlwZVBhcmFtZXRlcnN9ZWxzZSBuLnNldCh0LHUpfWVsc2Ugcy5wdXNoKHUpfX1mb3IoY29uc3RbLGVdb2YgYSlzLnB1c2goZSk7Zm9yKGNvbnN0WyxlXW9mIG4pcy5wdXNoKGUpO3JldHVybiBzfTt2YXIgcj1uKCJjNDg1Iik7ZnVuY3Rpb24gaShlKXtyZXR1cm4oMCxyLmlzSWRlbnRpZmllcikoZSk/ZS5uYW1lOmAke2UucmlnaHQubmFtZX0uJHtpKGUubGVmdCl9YH19LCIxY2Y4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KShlLCExKX07dmFyIHI9bigiYmY3OCIpfSwiMWUxZiI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiNGYzOCIpLGk9bigiMTZlNiIpLGE9ci5fX2ltcG9ydERlZmF1bHQobigiYzhkYSIpKSxvPXIuX19pbXBvcnREZWZhdWx0KG4oIjQxYmEiKSkscz1yLl9faW1wb3J0RGVmYXVsdChuKCIwOWM4IikpO3QuZGVmYXVsdD1mdW5jdGlvbihlKXtlLnVzZShhLmRlZmF1bHQpO3ZhciB0PWUudXNlKG8uZGVmYXVsdCksbj10LlR5cGUuZGVmLGw9dC5UeXBlLm9yLHU9ZS51c2Uocy5kZWZhdWx0KS5kZWZhdWx0cztuKCJJbXBvcnRFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgic291cmNlIikuZmllbGQoInNvdXJjZSIsbigiRXhwcmVzc2lvbiIpKSxuKCJFeHBvcnRBbGxEZWNsYXJhdGlvbiIpLmJ1aWxkKCJzb3VyY2UiLCJleHBvcnRlZCIpLmZpZWxkKCJzb3VyY2UiLG4oIkxpdGVyYWwiKSkuZmllbGQoImV4cG9ydGVkIixsKG4oIklkZW50aWZpZXIiKSxudWxsKSksbigiQ2hhaW5FbGVtZW50IikuYmFzZXMoIk5vZGUiKS5maWVsZCgib3B0aW9uYWwiLEJvb2xlYW4sdS5mYWxzZSksbigiQ2FsbEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIsIkNoYWluRWxlbWVudCIpLG4oIk1lbWJlckV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIsIkNoYWluRWxlbWVudCIpLG4oIkNoYWluRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImV4cHJlc3Npb24iKS5maWVsZCgiZXhwcmVzc2lvbiIsbigiQ2hhaW5FbGVtZW50IikpLG4oIk9wdGlvbmFsQ2FsbEV4cHJlc3Npb24iKS5iYXNlcygiQ2FsbEV4cHJlc3Npb24iKS5idWlsZCgiY2FsbGVlIiwiYXJndW1lbnRzIiwib3B0aW9uYWwiKS5maWVsZCgib3B0aW9uYWwiLEJvb2xlYW4sdS50cnVlKSxuKCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iKS5iYXNlcygiTWVtYmVyRXhwcmVzc2lvbiIpLmJ1aWxkKCJvYmplY3QiLCJwcm9wZXJ0eSIsImNvbXB1dGVkIiwib3B0aW9uYWwiKS5maWVsZCgib3B0aW9uYWwiLEJvb2xlYW4sdS50cnVlKTt2YXIgcD1sLmFwcGx5KHZvaWQgMCxyLl9fc3ByZWFkQXJyYXlzKGkuTG9naWNhbE9wZXJhdG9ycyxbIj8/Il0pKTtuKCJMb2dpY2FsRXhwcmVzc2lvbiIpLmZpZWxkKCJvcGVyYXRvciIscCl9LGUuZXhwb3J0cz10LmRlZmF1bHR9LCIyMWIxIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCI0ZjM4IikuX19pbXBvcnREZWZhdWx0KG4oIjQxYmEiKSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUudXNlKHIuZGVmYXVsdCksbj10LmdldEZpZWxkTmFtZXMsaT10LmdldEZpZWxkVmFsdWUsYT10LmJ1aWx0SW5UeXBlcy5hcnJheSxvPXQuYnVpbHRJblR5cGVzLm9iamVjdCxzPXQuYnVpbHRJblR5cGVzLkRhdGUsbD10LmJ1aWx0SW5UeXBlcy5SZWdFeHAsdT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHAoZSx0LG4pe3JldHVybiBhLmNoZWNrKG4pP24ubGVuZ3RoPTA6bj1udWxsLGQoZSx0LG4pfWZ1bmN0aW9uIGMoZSl7cmV0dXJuL1tfJGEtel1bXyRhLXowLTldKi9pLnRlc3QoZSk/Ii4iK2U6IlsiK0pTT04uc3RyaW5naWZ5KGUpKyJdIn1mdW5jdGlvbiBkKGUsdCxuKXtyZXR1cm4gZT09PXR8fChhLmNoZWNrKGUpP2Z1bmN0aW9uKGUsdCxuKXthLmFzc2VydChlKTt2YXIgcj1lLmxlbmd0aDtpZighYS5jaGVjayh0KXx8dC5sZW5ndGghPT1yKXJldHVybiBuJiZuLnB1c2goImxlbmd0aCIpLCExO2Zvcih2YXIgaT0wO2k8cjsrK2kpe2lmKG4mJm4ucHVzaChpKSxpIGluIGUhPWkgaW4gdClyZXR1cm4hMTtpZighZChlW2ldLHRbaV0sbikpcmV0dXJuITE7aWYobil7dmFyIG89bi5wb3AoKTtpZihvIT09aSl0aHJvdyBuZXcgRXJyb3IoIiIrbyl9fXJldHVybiEwfShlLHQsbik6by5jaGVjayhlKT9mKGUsdCxuKTpzLmNoZWNrKGUpP3MuY2hlY2sodCkmJitlPT0rdDpsLmNoZWNrKGUpP2wuY2hlY2sodCkmJmUuc291cmNlPT09dC5zb3VyY2UmJmUuZ2xvYmFsPT09dC5nbG9iYWwmJmUubXVsdGlsaW5lPT09dC5tdWx0aWxpbmUmJmUuaWdub3JlQ2FzZT09PXQuaWdub3JlQ2FzZTplPT10KX1mdW5jdGlvbiBmKGUsdCxyKXtpZihvLmFzc2VydChlKSwhby5jaGVjayh0KSlyZXR1cm4hMTtpZihlLnR5cGUhPT10LnR5cGUpcmV0dXJuIHImJnIucHVzaCgidHlwZSIpLCExO3ZhciBhPW4oZSkscz1hLmxlbmd0aCxsPW4odCkscD1sLmxlbmd0aDtpZihzPT09cCl7Zm9yKHZhciBjPTA7YzxzOysrYyl7dmFyIGY9YVtjXSx5PWkoZSxmKSxtPWkodCxmKTtpZihyJiZyLnB1c2goZiksIWQoeSxtLHIpKXJldHVybiExO2lmKHIpe3ZhciBoPXIucG9wKCk7aWYoaCE9PWYpdGhyb3cgbmV3IEVycm9yKCIiK2gpfX1yZXR1cm4hMH1pZighcilyZXR1cm4hMTt2YXIgVD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihjPTA7YzxzOysrYylUW2FbY11dPSEwO2ZvcihjPTA7YzxwOysrYyl7aWYoZj1sW2NdLCF1LmNhbGwoVCxmKSlyZXR1cm4gci5wdXNoKGYpLCExO2RlbGV0ZSBUW2ZdfWZvcihmIGluIFQpe3IucHVzaChmKTticmVha31yZXR1cm4hMX1yZXR1cm4gcC5hc3NlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtpZighcChlLHQsbikpe2lmKDAhPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIGRpZmZlciBpbiB0aGUgZm9sbG93aW5nIHBhdGg6ICIrbi5tYXAoYykuam9pbigiIikpO2lmKGUhPT10KXRocm93IG5ldyBFcnJvcigiTm9kZXMgbXVzdCBiZSBlcXVhbCIpfX0scH0sZS5leHBvcnRzPXQuZGVmYXVsdH0sIjI1MmEiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXtyZWFjdDohMCxhc3NlcnROb2RlOiEwLGNyZWF0ZVR5cGVBbm5vdGF0aW9uQmFzZWRPblR5cGVvZjohMCxjcmVhdGVVbmlvblR5cGVBbm5vdGF0aW9uOiEwLGNyZWF0ZUZsb3dVbmlvblR5cGU6ITAsY3JlYXRlVFNVbmlvblR5cGU6ITAsY2xvbmVOb2RlOiEwLGNsb25lOiEwLGNsb25lRGVlcDohMCxjbG9uZURlZXBXaXRob3V0TG9jOiEwLGNsb25lV2l0aG91dExvYzohMCxhZGRDb21tZW50OiEwLGFkZENvbW1lbnRzOiEwLGluaGVyaXRJbm5lckNvbW1lbnRzOiEwLGluaGVyaXRMZWFkaW5nQ29tbWVudHM6ITAsaW5oZXJpdHNDb21tZW50czohMCxpbmhlcml0VHJhaWxpbmdDb21tZW50czohMCxyZW1vdmVDb21tZW50czohMCxlbnN1cmVCbG9jazohMCx0b0JpbmRpbmdJZGVudGlmaWVyTmFtZTohMCx0b0Jsb2NrOiEwLHRvQ29tcHV0ZWRLZXk6ITAsdG9FeHByZXNzaW9uOiEwLHRvSWRlbnRpZmllcjohMCx0b0tleUFsaWFzOiEwLHRvU2VxdWVuY2VFeHByZXNzaW9uOiEwLHRvU3RhdGVtZW50OiEwLHZhbHVlVG9Ob2RlOiEwLGFwcGVuZFRvTWVtYmVyRXhwcmVzc2lvbjohMCxpbmhlcml0czohMCxwcmVwZW5kVG9NZW1iZXJFeHByZXNzaW9uOiEwLHJlbW92ZVByb3BlcnRpZXM6ITAscmVtb3ZlUHJvcGVydGllc0RlZXA6ITAscmVtb3ZlVHlwZUR1cGxpY2F0ZXM6ITAsZ2V0QmluZGluZ0lkZW50aWZpZXJzOiEwLGdldE91dGVyQmluZGluZ0lkZW50aWZpZXJzOiEwLHRyYXZlcnNlOiEwLHRyYXZlcnNlRmFzdDohMCxzaGFsbG93RXF1YWw6ITAsaXM6ITAsaXNCaW5kaW5nOiEwLGlzQmxvY2tTY29wZWQ6ITAsaXNJbW11dGFibGU6ITAsaXNMZXQ6ITAsaXNOb2RlOiEwLGlzTm9kZXNFcXVpdmFsZW50OiEwLGlzUGxhY2Vob2xkZXJUeXBlOiEwLGlzUmVmZXJlbmNlZDohMCxpc1Njb3BlOiEwLGlzU3BlY2lmaWVyRGVmYXVsdDohMCxpc1R5cGU6ITAsaXNWYWxpZEVTM0lkZW50aWZpZXI6ITAsaXNWYWxpZElkZW50aWZpZXI6ITAsaXNWYXI6ITAsbWF0Y2hlc1BhdHRlcm46ITAsdmFsaWRhdGU6ITAsYnVpbGRNYXRjaE1lbWJlckV4cHJlc3Npb246ITAsX19pbnRlcm5hbF9fZGVwcmVjYXRpb25XYXJuaW5nOiEwfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19pbnRlcm5hbF9fZGVwcmVjYXRpb25XYXJuaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbWUuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYWRkQ29tbWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYWRkQ29tbWVudHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFwcGVuZFRvTWVtYmVyRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXNzZXJ0Tm9kZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYnVpbGRNYXRjaE1lbWJlckV4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmZS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjbG9uZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2xvbmVEZWVwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjbG9uZURlZXBXaXRob3V0TG9jIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjbG9uZU5vZGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNsb25lV2l0aG91dExvYyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGIuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlRmxvd1VuaW9uVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlVFNVbmlvblR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNyZWF0ZVR5cGVBbm5vdGF0aW9uQmFzZWRPblR5cGVvZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlVW5pb25UeXBlQW5ub3RhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZW5zdXJlQmxvY2siLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB3LmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldEJpbmRpbmdJZGVudGlmaWVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFUuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0T3V0ZXJCaW5kaW5nSWRlbnRpZmllcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBxLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImluaGVyaXRJbm5lckNvbW1lbnRzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpbmhlcml0TGVhZGluZ0NvbW1lbnRzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdi5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpbmhlcml0VHJhaWxpbmdDb21tZW50cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHguZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaW5oZXJpdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBLLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImluaGVyaXRzQ29tbWVudHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gJC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc0JpbmRpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBILmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzQmxvY2tTY29wZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBRLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzSW1tdXRhYmxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWi5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc0xldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVlLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzTm9kZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRlLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzTm9kZXNFcXVpdmFsZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmUuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNQbGFjZWhvbGRlclR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByZS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc1JlZmVyZW5jZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpZS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc1Njb3BlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYWUuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNTcGVjaWZpZXJEZWZhdWx0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb2UuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc2UuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNWYWxpZEVTM0lkZW50aWZpZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsZS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc1ZhbGlkSWRlbnRpZmllciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHVlLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzVmFyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcGUuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibWF0Y2hlc1BhdHRlcm4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjZS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcmVwZW5kVG9NZW1iZXJFeHByZXNzaW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVi5kZWZhdWx0fX0pLHQucmVhY3Q9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyZW1vdmVDb21tZW50cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEEuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVtb3ZlUHJvcGVydGllcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFkuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVtb3ZlUHJvcGVydGllc0RlZXAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBKLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlbW92ZVR5cGVEdXBsaWNhdGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFsbG93RXF1YWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBHLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInRvQmluZGluZ0lkZW50aWZpZXJOYW1lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ0b0Jsb2NrIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTi5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ0b0NvbXB1dGVkS2V5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ0b0V4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBqLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInRvSWRlbnRpZmllciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEMuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidG9LZXlBbGlhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidG9TZXF1ZW5jZUV4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInRvU3RhdGVtZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ0cmF2ZXJzZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFcuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidHJhdmVyc2VGYXN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gei5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ2YWxpZGF0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGRlLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZhbHVlVG9Ob2RlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQi5kZWZhdWx0fX0pO3ZhciBpPW4oImRhN2YiKSxhPW4oImUwNGQiKSxvPW4oIjcyZTciKSxzPW4oIjliOTMiKSxsPW4oIjA0Y2EiKTtPYmplY3Qua2V5cyhsKS5mb3JFYWNoKChmdW5jdGlvbihlKXsiZGVmYXVsdCIhPT1lJiYiX19lc01vZHVsZSIhPT1lJiYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsZSl8fGUgaW4gdCYmdFtlXT09PWxbZV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGxbZV19fSkpfSkpO3ZhciB1PW4oIjQ0ZDMiKSxwPW4oIjYyOWYiKSxjPW4oIjYyYTAiKSxkPW4oImViNWIiKTtPYmplY3Qua2V5cyhkKS5mb3JFYWNoKChmdW5jdGlvbihlKXsiZGVmYXVsdCIhPT1lJiYiX19lc01vZHVsZSIhPT1lJiYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsZSl8fGUgaW4gdCYmdFtlXT09PWRbZV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGRbZV19fSkpfSkpO3ZhciBmPW4oIjk2YjkiKTtPYmplY3Qua2V5cyhmKS5mb3JFYWNoKChmdW5jdGlvbihlKXsiZGVmYXVsdCIhPT1lJiYiX19lc01vZHVsZSIhPT1lJiYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsZSl8fGUgaW4gdCYmdFtlXT09PWZbZV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZbZV19fSkpfSkpO3ZhciB5PW4oImJmNzgiKSxtPW4oIjFjZjgiKSxoPW4oImM2NWUiKSxUPW4oImNjYzciKSxiPW4oImVmNWYiKSxTPW4oIjYxMDAiKSxFPW4oIjQ3MDIiKSxnPW4oIjdlNDciKSx2PW4oImZhNWQiKSxQPW4oImE3MGQiKSx4PW4oIjQyODUiKSxBPW4oImRkODciKSxPPW4oIjllODAiKTtPYmplY3Qua2V5cyhPKS5mb3JFYWNoKChmdW5jdGlvbihlKXsiZGVmYXVsdCIhPT1lJiYiX19lc01vZHVsZSIhPT1lJiYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsZSl8fGUgaW4gdCYmdFtlXT09PU9bZV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9bZV19fSkpfSkpO3ZhciBfPW4oIjkwNDYiKTtPYmplY3Qua2V5cyhfKS5mb3JFYWNoKChmdW5jdGlvbihlKXsiZGVmYXVsdCIhPT1lJiYiX19lc01vZHVsZSIhPT1lJiYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsZSl8fGUgaW4gdCYmdFtlXT09PV9bZV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9bZV19fSkpfSkpO3ZhciB3PW4oIjMyZmUiKSxJPW4oIjVhNWMiKSxOPW4oIjdmMGMiKSxEPW4oImJkNmYiKSxqPW4oImQ4N2MiKSxDPW4oIjI3ZjYiKSxMPW4oIjI3YjUiKSxrPW4oImM0OWUiKSxNPW4oIjkxNDkiKSxCPW4oIjkzODgiKSxGPW4oImI5NzgiKTtPYmplY3Qua2V5cyhGKS5mb3JFYWNoKChmdW5jdGlvbihlKXsiZGVmYXVsdCIhPT1lJiYiX19lc01vZHVsZSIhPT1lJiYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsZSl8fGUgaW4gdCYmdFtlXT09PUZbZV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEZbZV19fSkpfSkpO3ZhciBSPW4oIjgwNDIiKSxLPW4oIjJjODYiKSxWPW4oImQxZjQiKSxZPW4oIjVmYWMiKSxKPW4oIjk5NzMiKSxYPW4oImVhZDYiKSxVPW4oImMxZjciKSxxPW4oImFiMDIiKSxXPW4oIjYwODMiKTtPYmplY3Qua2V5cyhXKS5mb3JFYWNoKChmdW5jdGlvbihlKXsiZGVmYXVsdCIhPT1lJiYiX19lc01vZHVsZSIhPT1lJiYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsZSl8fGUgaW4gdCYmdFtlXT09PVdbZV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFdbZV19fSkpfSkpO3ZhciB6PW4oImZhZmQiKSxHPW4oIjM5MmUiKSwkPW4oIjE3N2IiKSxIPW4oIjQ0NTEiKSxRPW4oIjg4MTAiKSxaPW4oIjk1MzkiKSxlZT1uKCJjMTBkIiksdGU9bigiMmY4MiIpLG5lPW4oIjYzMDkiKSxyZT1uKCJlM2Q4IiksaWU9bigiYjIxYSIpLGFlPW4oIjhiNDQiKSxvZT1uKCI5YTNkIiksc2U9bigiMTA5MyIpLGxlPW4oIjlhMDAiKSx1ZT1uKCJiOWMzIikscGU9bigiNDBhMyIpLGNlPW4oImZlMGQiKSxkZT1uKCI2MmVhIiksZmU9bigiNTdmYSIpLHllPW4oImM0ODUiKTtPYmplY3Qua2V5cyh5ZSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImRlZmF1bHQiIT09ZSYmIl9fZXNNb2R1bGUiIT09ZSYmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGUpfHxlIGluIHQmJnRbZV09PT15ZVtlXXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geWVbZV19fSkpfSkpO3ZhciBtZT1uKCJhOWM3Iik7Y29uc3QgaGU9e2lzUmVhY3RDb21wb25lbnQ6aS5kZWZhdWx0LGlzQ29tcGF0VGFnOmEuZGVmYXVsdCxidWlsZENoaWxkcmVuOm8uZGVmYXVsdH07dC5yZWFjdD1oZX0sMjcwMTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCJiOTA0Iik7T2JqZWN0LmtleXMocikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImRlZmF1bHQiIT09ZSYmIl9fZXNNb2R1bGUiIT09ZSYmKGUgaW4gdCYmdFtlXT09PXJbZV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJbZV19fSkpfSkpO3ZhciBpPW4oImQ1YWQiKTtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKChmdW5jdGlvbihlKXsiZGVmYXVsdCIhPT1lJiYiX19lc01vZHVsZSIhPT1lJiYoZSBpbiB0JiZ0W2VdPT09aVtlXXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaVtlXX19KSl9KSk7dmFyIGE9bigiNmFiZCIpO09iamVjdC5rZXlzKGEpLmZvckVhY2goKGZ1bmN0aW9uKGUpeyJkZWZhdWx0IiE9PWUmJiJfX2VzTW9kdWxlIiE9PWUmJihlIGluIHQmJnRbZV09PT1hW2VdfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhW2VdfX0pKX0pKTt2YXIgbz1uKCI1OWJlIik7T2JqZWN0LmtleXMobykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImRlZmF1bHQiIT09ZSYmIl9fZXNNb2R1bGUiIT09ZSYmKGUgaW4gdCYmdFtlXT09PW9bZV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG9bZV19fSkpfSkpO3ZhciBzPW4oImFkNzkiKTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKChmdW5jdGlvbihlKXsiZGVmYXVsdCIhPT1lJiYiX19lc01vZHVsZSIhPT1lJiYoZSBpbiB0JiZ0W2VdPT09c1tlXXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc1tlXX19KSl9KSk7dmFyIGw9bigiMzZjZCIpO09iamVjdC5rZXlzKGwpLmZvckVhY2goKGZ1bmN0aW9uKGUpeyJkZWZhdWx0IiE9PWUmJiJfX2VzTW9kdWxlIiE9PWUmJihlIGluIHQmJnRbZV09PT1sW2VdfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsW2VdfX0pKX0pKTt2YXIgdT1uKCJkMDYyIik7T2JqZWN0LmtleXModSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImRlZmF1bHQiIT09ZSYmIl9fZXNNb2R1bGUiIT09ZSYmKGUgaW4gdCYmdFtlXT09PXVbZV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHVbZV19fSkpfSkpO3ZhciBwPW4oImI0NjllIik7T2JqZWN0LmtleXMocCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImRlZmF1bHQiIT09ZSYmIl9fZXNNb2R1bGUiIT09ZSYmKGUgaW4gdCYmdFtlXT09PXBbZV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHBbZV19fSkpfSkpO3ZhciBjPW4oImIwZDMiKTtPYmplY3Qua2V5cyhjKS5mb3JFYWNoKChmdW5jdGlvbihlKXsiZGVmYXVsdCIhPT1lJiYiX19lc01vZHVsZSIhPT1lJiYoZSBpbiB0JiZ0W2VdPT09Y1tlXXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY1tlXX19KSl9KSk7dmFyIGQ9bigiZDYxZSIpO09iamVjdC5rZXlzKGQpLmZvckVhY2goKGZ1bmN0aW9uKGUpeyJkZWZhdWx0IiE9PWUmJiJfX2VzTW9kdWxlIiE9PWUmJihlIGluIHQmJnRbZV09PT1kW2VdfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkW2VdfX0pKX0pKTt2YXIgZj1uKCJiMGZlIik7T2JqZWN0LmtleXMoZikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImRlZmF1bHQiIT09ZSYmIl9fZXNNb2R1bGUiIT09ZSYmKGUgaW4gdCYmdFtlXT09PWZbZV18fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZbZV19fSkpfSkpfSwiMjdiNSI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PW87dmFyIHI9bigiYzQ4NSIpLGk9bigiYmY3OCIpLGE9bigiOTk3MyIpO2Z1bmN0aW9uIG8oZSx0PWUua2V5KXtsZXQgbjtyZXR1cm4ibWV0aG9kIj09PWUua2luZD9vLmluY3JlbWVudCgpKyIiOihuPSgwLHIuaXNJZGVudGlmaWVyKSh0KT90Lm5hbWU6KDAsci5pc1N0cmluZ0xpdGVyYWwpKHQpP0pTT04uc3RyaW5naWZ5KHQudmFsdWUpOkpTT04uc3RyaW5naWZ5KCgwLGEuZGVmYXVsdCkoKDAsaS5kZWZhdWx0KSh0KSkpLGUuY29tcHV0ZWQmJihuPWBbJHtufV1gKSxlLnN0YXRpYyYmKG49InN0YXRpYzoiK24pLG4pfW8udWlkPTAsby5pbmNyZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gby51aWQ+PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSP28udWlkPTA6by51aWQrK319LCIyN2Y2IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7ZSs9IiI7bGV0IHQ9IiI7Zm9yKGNvbnN0IG4gb2YgZSl0Kz0oMCxpLmlzSWRlbnRpZmllckNoYXIpKG4uY29kZVBvaW50QXQoMCkpP246Ii0iO3JldHVybiB0PXQucmVwbGFjZSgvXlstMC05XSsvLCIiKSx0PXQucmVwbGFjZSgvWy1cc10rKC4pPy9nLChmdW5jdGlvbihlLHQpe3JldHVybiB0P3QudG9VcHBlckNhc2UoKToiIn0pKSwoMCxyLmRlZmF1bHQpKHQpfHwodD0iXyIrdCksdHx8Il8ifTt2YXIgcj1uKCJiOWMzIiksaT1uKCIwMzZlIil9LDI5MDg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiNGYzOCIpLGk9ci5fX2ltcG9ydERlZmF1bHQobigiNGI1MyIpKSxhPXIuX19pbXBvcnREZWZhdWx0KG4oIjQxYmEiKSksbz1yLl9faW1wb3J0RGVmYXVsdChuKCIwOWM4IikpO3QuZGVmYXVsdD1mdW5jdGlvbihlKXtlLnVzZShpLmRlZmF1bHQpO3ZhciB0PWUudXNlKGEuZGVmYXVsdCksbj10LlR5cGUuZGVmLHI9dC5UeXBlLm9yLHM9ZS51c2Uoby5kZWZhdWx0KS5kZWZhdWx0cztuKCJGb3JPZlN0YXRlbWVudCIpLmZpZWxkKCJhd2FpdCIsQm9vbGVhbixzLmZhbHNlKSxuKCJTcHJlYWRQcm9wZXJ0eSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixuKCJFeHByZXNzaW9uIikpLG4oIk9iamVjdEV4cHJlc3Npb24iKS5maWVsZCgicHJvcGVydGllcyIsW3IobigiUHJvcGVydHkiKSxuKCJTcHJlYWRQcm9wZXJ0eSIpLG4oIlNwcmVhZEVsZW1lbnQiKSldKSxuKCJUZW1wbGF0ZUVsZW1lbnQiKS5maWVsZCgidmFsdWUiLHtjb29rZWQ6cihTdHJpbmcsbnVsbCkscmF3OlN0cmluZ30pLG4oIlNwcmVhZFByb3BlcnR5UGF0dGVybiIpLmJhc2VzKCJQYXR0ZXJuIikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixuKCJQYXR0ZXJuIikpLG4oIk9iamVjdFBhdHRlcm4iKS5maWVsZCgicHJvcGVydGllcyIsW3IobigiUHJvcGVydHlQYXR0ZXJuIiksbigiUHJvcGVydHkiKSxuKCJSZXN0RWxlbWVudCIpLG4oIlNwcmVhZFByb3BlcnR5UGF0dGVybiIpKV0pfSxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiMmI5YyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuKCI0NjZhIil9LCIyYzg2IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtpZighZXx8IXQpcmV0dXJuIGU7Zm9yKGNvbnN0IG4gb2Ygci5JTkhFUklUX0tFWVMub3B0aW9uYWwpbnVsbD09ZVtuXSYmKGVbbl09dFtuXSk7Zm9yKGNvbnN0IG4gb2YgT2JqZWN0LmtleXModCkpIl8iPT09blswXSYmIl9fY2xvbmUiIT09biYmKGVbbl09dFtuXSk7Zm9yKGNvbnN0IG4gb2Ygci5JTkhFUklUX0tFWVMuZm9yY2UpZVtuXT10W25dO3JldHVybigwLGkuZGVmYXVsdCkoZSx0KSxlfTt2YXIgcj1uKCI5MDQ2IiksaT1uKCJhNzBkIil9LCIyZjgyIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IXIuVklTSVRPUl9LRVlTW2UudHlwZV0pfTt2YXIgcj1uKCJiOTc4Iil9LDMxMTc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImI5YmQiKTtmdW5jdGlvbiBpKCl7dGhpcy5fYXJyYXk9W10sdGhpcy5fc29ydGVkPSEwLHRoaXMuX2xhc3Q9e2dlbmVyYXRlZExpbmU6LTEsZ2VuZXJhdGVkQ29sdW1uOjB9fWkucHJvdG90eXBlLnVuc29ydGVkRm9yRWFjaD1mdW5jdGlvbihlLHQpe3RoaXMuX2FycmF5LmZvckVhY2goZSx0KX0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2VuZXJhdGVkTGluZSxpPXQuZ2VuZXJhdGVkTGluZSxhPWUuZ2VuZXJhdGVkQ29sdW1uLG89dC5nZW5lcmF0ZWRDb2x1bW47cmV0dXJuIGk+bnx8aT09biYmbz49YXx8ci5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChlLHQpPD0wfSh0aGlzLl9sYXN0LGUpPyh0aGlzLl9zb3J0ZWQ9ITEsdGhpcy5fYXJyYXkucHVzaChlKSk6KHRoaXMuX2xhc3Q9ZSx0aGlzLl9hcnJheS5wdXNoKGUpKX0saS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3J0ZWR8fCh0aGlzLl9hcnJheS5zb3J0KHIuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQpLHRoaXMuX3NvcnRlZD0hMCksdGhpcy5fYXJyYXl9LHQuTWFwcGluZ0xpc3Q9aX0sIjMyZmUiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQ9ImJvZHkiKXtjb25zdCBuPSgwLHIuZGVmYXVsdCkoZVt0XSxlKTtyZXR1cm4gZVt0XT1uLG59O3ZhciByPW4oIjdmMGMiKX0sIjM2Y2QiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSW1wb3J0U3BlY2lmaWVyPWZ1bmN0aW9uKGUpeyJ0eXBlIiE9PWUuaW1wb3J0S2luZCYmInR5cGVvZiIhPT1lLmltcG9ydEtpbmR8fCh0aGlzLndvcmQoZS5pbXBvcnRLaW5kKSx0aGlzLnNwYWNlKCkpLHRoaXMucHJpbnQoZS5pbXBvcnRlZCxlKSxlLmxvY2FsJiZlLmxvY2FsLm5hbWUhPT1lLmltcG9ydGVkLm5hbWUmJih0aGlzLnNwYWNlKCksdGhpcy53b3JkKCJhcyIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUubG9jYWwsZSkpfSx0LkltcG9ydERlZmF1bHRTcGVjaWZpZXI9ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLmxvY2FsLGUpfSx0LkV4cG9ydERlZmF1bHRTcGVjaWZpZXI9ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLmV4cG9ydGVkLGUpfSx0LkV4cG9ydFNwZWNpZmllcj1mdW5jdGlvbihlKXt0aGlzLnByaW50KGUubG9jYWwsZSksZS5leHBvcnRlZCYmZS5sb2NhbC5uYW1lIT09ZS5leHBvcnRlZC5uYW1lJiYodGhpcy5zcGFjZSgpLHRoaXMud29yZCgiYXMiKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLmV4cG9ydGVkLGUpKX0sdC5FeHBvcnROYW1lc3BhY2VTcGVjaWZpZXI9ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigiKiIpLHRoaXMuc3BhY2UoKSx0aGlzLndvcmQoImFzIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5leHBvcnRlZCxlKX0sdC5FeHBvcnRBbGxEZWNsYXJhdGlvbj1mdW5jdGlvbihlKXt0aGlzLndvcmQoImV4cG9ydCIpLHRoaXMuc3BhY2UoKSwidHlwZSI9PT1lLmV4cG9ydEtpbmQmJih0aGlzLndvcmQoInR5cGUiKSx0aGlzLnNwYWNlKCkpLHRoaXMudG9rZW4oIioiKSx0aGlzLnNwYWNlKCksdGhpcy53b3JkKCJmcm9tIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5zb3VyY2UsZSksdGhpcy5wcmludEFzc2VydGlvbnMoZSksdGhpcy5zZW1pY29sb24oKX0sdC5FeHBvcnROYW1lZERlY2xhcmF0aW9uPWZ1bmN0aW9uKGUpe3RoaXMuZm9ybWF0LmRlY29yYXRvcnNCZWZvcmVFeHBvcnQmJmkoZS5kZWNsYXJhdGlvbikmJnRoaXMucHJpbnRKb2luKGUuZGVjbGFyYXRpb24uZGVjb3JhdG9ycyxlKSx0aGlzLndvcmQoImV4cG9ydCIpLHRoaXMuc3BhY2UoKSxwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdC5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb249ZnVuY3Rpb24oZSl7dGhpcy5mb3JtYXQuZGVjb3JhdG9yc0JlZm9yZUV4cG9ydCYmaShlLmRlY2xhcmF0aW9uKSYmdGhpcy5wcmludEpvaW4oZS5kZWNsYXJhdGlvbi5kZWNvcmF0b3JzLGUpLHRoaXMud29yZCgiZXhwb3J0IiksdGhpcy5zcGFjZSgpLHRoaXMud29yZCgiZGVmYXVsdCIpLHRoaXMuc3BhY2UoKSxwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdC5JbXBvcnREZWNsYXJhdGlvbj1mdW5jdGlvbihlKXt0aGlzLndvcmQoImltcG9ydCIpLHRoaXMuc3BhY2UoKSwidHlwZSIhPT1lLmltcG9ydEtpbmQmJiJ0eXBlb2YiIT09ZS5pbXBvcnRLaW5kfHwodGhpcy53b3JkKGUuaW1wb3J0S2luZCksdGhpcy5zcGFjZSgpKTtjb25zdCB0PWUuc3BlY2lmaWVycy5zbGljZSgwKTtpZihudWxsIT10JiZ0Lmxlbmd0aCl7Zm9yKDs7KXtjb25zdCBuPXRbMF07aWYoIXMobikmJiFsKG4pKWJyZWFrO3RoaXMucHJpbnQodC5zaGlmdCgpLGUpLHQubGVuZ3RoJiYodGhpcy50b2tlbigiLCIpLHRoaXMuc3BhY2UoKSl9dC5sZW5ndGgmJih0aGlzLnRva2VuKCJ7IiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnRMaXN0KHQsZSksdGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIn0iKSksdGhpcy5zcGFjZSgpLHRoaXMud29yZCgiZnJvbSIpLHRoaXMuc3BhY2UoKX12YXIgbjt0aGlzLnByaW50KGUuc291cmNlLGUpLHRoaXMucHJpbnRBc3NlcnRpb25zKGUpLG51bGwhPShuPWUuYXR0cmlidXRlcykmJm4ubGVuZ3RoJiYodGhpcy5zcGFjZSgpLHRoaXMud29yZCgid2l0aCIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50TGlzdChlLmF0dHJpYnV0ZXMsZSkpLHRoaXMuc2VtaWNvbG9uKCl9LHQuSW1wb3J0QXR0cmlidXRlPWZ1bmN0aW9uKGUpe3RoaXMucHJpbnQoZS5rZXkpLHRoaXMudG9rZW4oIjoiKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLnZhbHVlKX0sdC5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI9ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigiKiIpLHRoaXMuc3BhY2UoKSx0aGlzLndvcmQoImFzIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5sb2NhbCxlKX07dmFyIHI9bigiMjUyYSIpO2NvbnN0e2lzQ2xhc3NEZWNsYXJhdGlvbjppLGlzRXhwb3J0RGVmYXVsdFNwZWNpZmllcjphLGlzRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyOm8saXNJbXBvcnREZWZhdWx0U3BlY2lmaWVyOnMsaXNJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6bCxpc1N0YXRlbWVudDp1fT1yO2Z1bmN0aW9uIHAoZSl7aWYoZS5kZWNsYXJhdGlvbil7Y29uc3QgdD1lLmRlY2xhcmF0aW9uO3RoaXMucHJpbnQodCxlKSx1KHQpfHx0aGlzLnNlbWljb2xvbigpfWVsc2V7InR5cGUiPT09ZS5leHBvcnRLaW5kJiYodGhpcy53b3JkKCJ0eXBlIiksdGhpcy5zcGFjZSgpKTtjb25zdCB0PWUuc3BlY2lmaWVycy5zbGljZSgwKTtsZXQgbj0hMTtmb3IoOzspe2NvbnN0IHI9dFswXTtpZighYShyKSYmIW8ocikpYnJlYWs7bj0hMCx0aGlzLnByaW50KHQuc2hpZnQoKSxlKSx0Lmxlbmd0aCYmKHRoaXMudG9rZW4oIiwiKSx0aGlzLnNwYWNlKCkpfSh0Lmxlbmd0aHx8IXQubGVuZ3RoJiYhbikmJih0aGlzLnRva2VuKCJ7IiksdC5sZW5ndGgmJih0aGlzLnNwYWNlKCksdGhpcy5wcmludExpc3QodCxlKSx0aGlzLnNwYWNlKCkpLHRoaXMudG9rZW4oIn0iKSksZS5zb3VyY2UmJih0aGlzLnNwYWNlKCksdGhpcy53b3JkKCJmcm9tIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5zb3VyY2UsZSksdGhpcy5wcmludEFzc2VydGlvbnMoZSkpLHRoaXMuc2VtaWNvbG9uKCl9fX0sIjM5MmUiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQpe2NvbnN0IG49T2JqZWN0LmtleXModCk7Zm9yKGNvbnN0IHIgb2YgbilpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH19LCIzZmUyIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCI0ZjM4IiksaT1yLl9faW1wb3J0RGVmYXVsdChuKCI0MWJhIikpLGE9ci5fX2ltcG9ydERlZmF1bHQobigiMDljOCIpKSxvPXIuX19pbXBvcnREZWZhdWx0KG4oIjFlMWYiKSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe2UudXNlKG8uZGVmYXVsdCk7dmFyIHQ9ZS51c2UoaS5kZWZhdWx0KSxuPXQuVHlwZSxyPXQuVHlwZS5kZWYscz1uLm9yLGw9ZS51c2UoYS5kZWZhdWx0KS5kZWZhdWx0cztyKCJBd2FpdEV4cHJlc3Npb24iKS5idWlsZCgiYXJndW1lbnQiLCJhbGwiKS5maWVsZCgiYXJndW1lbnQiLHMocigiRXhwcmVzc2lvbiIpLG51bGwpKS5maWVsZCgiYWxsIixCb29sZWFuLGwuZmFsc2UpLHIoIkRlY29yYXRvciIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImV4cHJlc3Npb24iKS5maWVsZCgiZXhwcmVzc2lvbiIscigiRXhwcmVzc2lvbiIpKSxyKCJQcm9wZXJ0eSIpLmZpZWxkKCJkZWNvcmF0b3JzIixzKFtyKCJEZWNvcmF0b3IiKV0sbnVsbCksbC5udWxsKSxyKCJNZXRob2REZWZpbml0aW9uIikuZmllbGQoImRlY29yYXRvcnMiLHMoW3IoIkRlY29yYXRvciIpXSxudWxsKSxsLm51bGwpLHIoIlByaXZhdGVOYW1lIikuYmFzZXMoIkV4cHJlc3Npb24iLCJQYXR0ZXJuIikuYnVpbGQoImlkIikuZmllbGQoImlkIixyKCJJZGVudGlmaWVyIikpLHIoIkNsYXNzUHJpdmF0ZVByb3BlcnR5IikuYmFzZXMoIkNsYXNzUHJvcGVydHkiKS5idWlsZCgia2V5IiwidmFsdWUiKS5maWVsZCgia2V5IixyKCJQcml2YXRlTmFtZSIpKS5maWVsZCgidmFsdWUiLHMocigiRXhwcmVzc2lvbiIpLG51bGwpLGwubnVsbCl9LGUuZXhwb3J0cz10LmRlZmF1bHR9LCI0MGEzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5pc1ZhcmlhYmxlRGVjbGFyYXRpb24pKGUse2tpbmQ6InZhciJ9KSYmIWVbaS5CTE9DS19TQ09QRURfU1lNQk9MXX07dmFyIHI9bigiYzQ4NSIpLGk9bigiOTA0NiIpfSwiNDFiYSI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EZWY9dm9pZCAwO3ZhciByPW4oIjRmMzgiKSxpPU9iamVjdC5wcm90b3R5cGUsYT1pLnRvU3RyaW5nLG89aS5oYXNPd25Qcm9wZXJ0eSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuYXNzZXJ0PWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuY2hlY2soZSx0KSl7dmFyIG49bShlKTt0aHJvdyBuZXcgRXJyb3IobisiIGRvZXMgbm90IG1hdGNoIHR5cGUgIit0aGlzKX1yZXR1cm4hMH0sZS5wcm90b3R5cGUuYXJyYXlPZj1mdW5jdGlvbigpe3JldHVybiBuZXcgbCh0aGlzKX0sZX0oKSxsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLmVsZW1UeXBlPXQsbi5raW5kPSJBcnJheVR5cGUiLG59cmV0dXJuIHIuX19leHRlbmRzKHQsZSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iWyIrdGhpcy5lbGVtVHlwZSsiXSJ9LHQucHJvdG90eXBlLmNoZWNrPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmZS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIG4uZWxlbVR5cGUuY2hlY2soZSx0KX0pKX0sdH0ocyksdT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi52YWx1ZT10LG4ua2luZD0iSWRlbnRpdHlUeXBlIixufXJldHVybiByLl9fZXh0ZW5kcyh0LGUpLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzLnZhbHVlKX0sdC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lPT09dGhpcy52YWx1ZTtyZXR1cm4gbnx8ImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHQodGhpcyxlKSxufSx0fShzKSxwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLmZpZWxkcz10LG4ua2luZD0iT2JqZWN0VHlwZSIsbn1yZXR1cm4gci5fX2V4dGVuZHModCxlKSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ7ICIrdGhpcy5maWVsZHMuam9pbigiLCAiKSsiIH0ifSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbihlLHQpe3JldHVybiBhLmNhbGwoZSk9PT1hLmNhbGwoe30pJiZ0aGlzLmZpZWxkcy5ldmVyeSgoZnVuY3Rpb24obil7cmV0dXJuIG4udHlwZS5jaGVjayhlW24ubmFtZV0sdCl9KSl9LHR9KHMpLGM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4udHlwZXM9dCxuLmtpbmQ9Ik9yVHlwZSIsbn1yZXR1cm4gci5fX2V4dGVuZHModCxlKSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGVzLmpvaW4oIiB8ICIpfSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnR5cGVzLnNvbWUoKGZ1bmN0aW9uKG4pe3JldHVybiBuLmNoZWNrKGUsdCl9KSl9LHR9KHMpLGQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5uYW1lPXQsci5wcmVkaWNhdGU9bixyLmtpbmQ9IlByZWRpY2F0ZVR5cGUiLHJ9cmV0dXJuIHIuX19leHRlbmRzKHQsZSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lfSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJlZGljYXRlKGUsdCk7cmV0dXJuIG58fCJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0KHRoaXMsZSksbn0sdH0ocyksZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ZSx0aGlzLnR5cGVOYW1lPXQsdGhpcy5iYXNlTmFtZXM9W10sdGhpcy5vd25GaWVsZHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmFsbFN1cGVydHlwZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnN1cGVydHlwZUxpc3Q9W10sdGhpcy5hbGxGaWVsZHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmZpZWxkTmFtZXM9W10sdGhpcy5maW5hbGl6ZWQ9ITEsdGhpcy5idWlsZGFibGU9ITEsdGhpcy5idWlsZFBhcmFtcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuaXNTdXBlcnR5cGVPZj1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZSl7aWYoITAhPT10aGlzLmZpbmFsaXplZHx8ITAhPT10LmZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIiIpO3JldHVybiBvLmNhbGwodC5hbGxTdXBlcnR5cGVzLHRoaXMudHlwZU5hbWUpfXRocm93IG5ldyBFcnJvcih0KyIgaXMgbm90IGEgRGVmIil9LGUucHJvdG90eXBlLmNoZWNrQWxsRmllbGRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5hbGxGaWVsZHM7aWYoITAhPT10aGlzLmZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIiIrdGhpcy50eXBlTmFtZSk7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUmJk9iamVjdC5rZXlzKG4pLmV2ZXJ5KChmdW5jdGlvbihyKXt2YXIgaT1uW3JdLGE9aS50eXBlLG89aS5nZXRWYWx1ZShlKTtyZXR1cm4gYS5jaGVjayhvLHQpfSkpfSxlLnByb3RvdHlwZS5iYXNlcz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgbj10aGlzLmJhc2VOYW1lcztpZih0aGlzLmZpbmFsaXplZCl7aWYoZS5sZW5ndGghPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIiIpO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0hPT1uW3JdKXRocm93IG5ldyBFcnJvcigiIik7cmV0dXJuIHRoaXN9cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bi5pbmRleE9mKGUpPDAmJm4ucHVzaChlKX0pKSx0aGlzfSxlfSgpO3QuRGVmPWY7dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMubmFtZT1lLHRoaXMudHlwZT10LHRoaXMuZGVmYXVsdEZuPW4sdGhpcy5oaWRkZW49ISFyfXJldHVybiBlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLm5hbWUpKyI6ICIrdGhpcy50eXBlfSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMubmFtZV07cmV0dXJuIHZvaWQgMCE9PXR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmRlZmF1bHRGbiYmKHQ9dGhpcy5kZWZhdWx0Rm4uY2FsbChlKSksdH0sZX0oKTtmdW5jdGlvbiBtKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpPyJbIitlLm1hcChtKS5qb2luKCIsICIpKyJdIjplJiYib2JqZWN0Ij09dHlwZW9mIGU/InsgIitPYmplY3Qua2V5cyhlKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KyI6ICIrZVt0XX0pKS5qb2luKCIsICIpKyIgfSI6SlNPTi5zdHJpbmdpZnkoZSl9dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PXtvcjpmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gbmV3IGMoZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmZyb20oZSl9KSkpfSxmcm9tOmZ1bmN0aW9uKGUscil7aWYoZSBpbnN0YW5jZW9mIGx8fGUgaW5zdGFuY2VvZiB1fHxlIGluc3RhbmNlb2YgcHx8ZSBpbnN0YW5jZW9mIGN8fGUgaW5zdGFuY2VvZiBkKXJldHVybiBlO2lmKGUgaW5zdGFuY2VvZiBmKXJldHVybiBlLnR5cGU7aWYoYi5jaGVjayhlKSl7aWYoMSE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigib25seSBvbmUgZWxlbWVudCB0eXBlIGlzIHBlcm1pdHRlZCBmb3IgdHlwZWQgYXJyYXlzIik7cmV0dXJuIG5ldyBsKHQuZnJvbShlWzBdKSl9aWYoUy5jaGVjayhlKSlyZXR1cm4gbmV3IHAoT2JqZWN0LmtleXMoZSkubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gbmV3IHkobix0LmZyb20oZVtuXSxuKSl9KSkpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXt2YXIgYT1uLmluZGV4T2YoZSk7aWYoYT49MClyZXR1cm4gaVthXTtpZigic3RyaW5nIiE9dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIG5hbWUiKTtyZXR1cm4gbmV3IGQocixlKX1yZXR1cm4gbmV3IHUoZSl9LGRlZjpmdW5jdGlvbihlKXtyZXR1cm4gby5jYWxsKF8sZSk/X1tlXTpfW2VdPW5ldyBJKGUpfSxoYXNEZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIG8uY2FsbChfLGUpfX0sbj1bXSxpPVtdO2Z1bmN0aW9uIHMoZSx0KXt2YXIgcj1hLmNhbGwodCksbz1uZXcgZChlLChmdW5jdGlvbihlKXtyZXR1cm4gYS5jYWxsKGUpPT09cn0pKTtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29uc3RydWN0b3ImJihuLnB1c2godC5jb25zdHJ1Y3RvciksaS5wdXNoKG8pKSxvfXZhciBoPXMoInN0cmluZyIsInRydXRoeSIpLFQ9cygiZnVuY3Rpb24iLChmdW5jdGlvbigpe30pKSxiPXMoImFycmF5IixbXSksUz1zKCJvYmplY3QiLHt9KSxFPXMoIlJlZ0V4cCIsLy4vKSxnPXMoIkRhdGUiLG5ldyBEYXRlKSx2PXMoIm51bWJlciIsMyksUD1zKCJib29sZWFuIiwhMCkseD1zKCJudWxsIixudWxsKSxBPXMoInVuZGVmaW5lZCIsdm9pZCAwKSxPPXtzdHJpbmc6aCxmdW5jdGlvbjpULGFycmF5OmIsb2JqZWN0OlMsUmVnRXhwOkUsRGF0ZTpnLG51bWJlcjp2LGJvb2xlYW46UCxudWxsOngsdW5kZWZpbmVkOkF9LF89T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiB3KGUpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7dmFyIHQ9ZS50eXBlO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmby5jYWxsKF8sdCkpe3ZhciBuPV9bdF07aWYobi5maW5hbGl6ZWQpcmV0dXJuIG59fXJldHVybiBudWxsfXZhciBJPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49ZS5jYWxsKHRoaXMsbmV3IGQodCwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jaGVjayhlLHQpfSkpLHQpfHx0aGlzO3JldHVybiBufXJldHVybiByLl9fZXh0ZW5kcyhuLGUpLG4ucHJvdG90eXBlLmNoZWNrPWZ1bmN0aW9uKGUsdCl7aWYoITAhPT10aGlzLmZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoInByZW1hdHVyZWx5IGNoZWNraW5nIHVuZmluYWxpemVkIHR5cGUgIit0aGlzLnR5cGVOYW1lKTtpZihudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlKXJldHVybiExO3ZhciBuPXcoZSk7cmV0dXJuIG4/dCYmbj09PXRoaXM/dGhpcy5jaGVja0FsbEZpZWxkcyhlLHQpOiEhdGhpcy5pc1N1cGVydHlwZU9mKG4pJiYoIXR8fG4uY2hlY2tBbGxGaWVsZHMoZSx0KSYmdGhpcy5jaGVja0FsbEZpZWxkcyhlLCExKSk6KCJTb3VyY2VMb2NhdGlvbiI9PT10aGlzLnR5cGVOYW1lfHwiUG9zaXRpb24iPT09dGhpcy50eXBlTmFtZSkmJnRoaXMuY2hlY2tBbGxGaWVsZHMoZSx0KX0sbi5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcyx0PVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbl09YXJndW1lbnRzW25dO2lmKHRoaXMuYnVpbGRQYXJhbXM9dCx0aGlzLmJ1aWxkYWJsZSlyZXR1cm4gdGhpczt0aGlzLmZpZWxkKCJ0eXBlIixTdHJpbmcsKGZ1bmN0aW9uKCl7cmV0dXJuIGUudHlwZU5hbWV9KSksdGhpcy5idWlsZGFibGU9ITA7dmFyIHI9ZnVuY3Rpb24odCxuLHIsaSl7aWYoIW8uY2FsbCh0LG4pKXt2YXIgYT1lLmFsbEZpZWxkcztpZighby5jYWxsKGEsbikpdGhyb3cgbmV3IEVycm9yKCIiK24pO3ZhciBzLGw9YVtuXSx1PWwudHlwZTtpZihpKXM9cjtlbHNle2lmKCFsLmRlZmF1bHRGbil7dmFyIHA9Im5vIHZhbHVlIG9yIGRlZmF1bHQgZnVuY3Rpb24gZ2l2ZW4gZm9yIGZpZWxkICIrSlNPTi5zdHJpbmdpZnkobikrIiBvZiAiK2UudHlwZU5hbWUrIigiK2UuYnVpbGRQYXJhbXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gYVtlXX0pKS5qb2luKCIsICIpKyIpIjt0aHJvdyBuZXcgRXJyb3IocCl9cz1sLmRlZmF1bHRGbi5jYWxsKHQpfWlmKCF1LmNoZWNrKHMpKXRocm93IG5ldyBFcnJvcihtKHMpKyIgZG9lcyBub3QgbWF0Y2ggZmllbGQgIitsKyIgb2YgdHlwZSAiK2UudHlwZU5hbWUpO3Rbbl09c319LGk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuXT1hcmd1bWVudHNbbl07dmFyIGk9dC5sZW5ndGg7aWYoIWUuZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiYXR0ZW1wdGluZyB0byBpbnN0YW50aWF0ZSB1bmZpbmFsaXplZCB0eXBlICIrZS50eXBlTmFtZSk7dmFyIGE9T2JqZWN0LmNyZWF0ZShEKTtpZihlLmJ1aWxkUGFyYW1zLmZvckVhY2goKGZ1bmN0aW9uKGUsbil7bjxpP3IoYSxlLHRbbl0sITApOnIoYSxlLG51bGwsITEpfSkpLE9iamVjdC5rZXlzKGUuYWxsRmllbGRzKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKGEsZSxudWxsLCExKX0pKSxhLnR5cGUhPT1lLnR5cGVOYW1lKXRocm93IG5ldyBFcnJvcigiIik7cmV0dXJuIGF9O3JldHVybiBpLmZyb209ZnVuY3Rpb24odCl7aWYoIWUuZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiYXR0ZW1wdGluZyB0byBpbnN0YW50aWF0ZSB1bmZpbmFsaXplZCB0eXBlICIrZS50eXBlTmFtZSk7dmFyIG49T2JqZWN0LmNyZWF0ZShEKTtpZihPYmplY3Qua2V5cyhlLmFsbEZpZWxkcykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7by5jYWxsKHQsZSk/cihuLGUsdFtlXSwhMCk6cihuLGUsbnVsbCwhMSl9KSksbi50eXBlIT09ZS50eXBlTmFtZSl0aHJvdyBuZXcgRXJyb3IoIiIpO3JldHVybiBufSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTixqKHRoaXMudHlwZU5hbWUpLHtlbnVtZXJhYmxlOiEwLHZhbHVlOml9KSx0aGlzfSxuLnByb3RvdHlwZS5maWVsZD1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4gdGhpcy5maW5hbGl6ZWR8fCh0aGlzLm93bkZpZWxkc1tlXT1uZXcgeShlLHQuZnJvbShuKSxyLGkpKSx0aGlzfSxuLnByb3RvdHlwZS5maW5hbGl6ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIXRoaXMuZmluYWxpemVkKXt2YXIgdD10aGlzLmFsbEZpZWxkcyxuPXRoaXMuYWxsU3VwZXJ0eXBlcztmb3IodmFyIHIgaW4gdGhpcy5iYXNlTmFtZXMuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9X1tyXTtpZighKGkgaW5zdGFuY2VvZiBmKSl7dmFyIGE9InVua25vd24gc3VwZXJ0eXBlIG5hbWUgIitKU09OLnN0cmluZ2lmeShyKSsiIGZvciBzdWJ0eXBlICIrSlNPTi5zdHJpbmdpZnkoZS50eXBlTmFtZSk7dGhyb3cgbmV3IEVycm9yKGEpfWkuZmluYWxpemUoKSxCKHQsaS5hbGxGaWVsZHMpLEIobixpLmFsbFN1cGVydHlwZXMpfSkpLEIodCx0aGlzLm93bkZpZWxkcyksblt0aGlzLnR5cGVOYW1lXT10aGlzLHRoaXMuZmllbGROYW1lcy5sZW5ndGg9MCx0KW8uY2FsbCh0LHIpJiYhdFtyXS5oaWRkZW4mJnRoaXMuZmllbGROYW1lcy5wdXNoKHIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShMLHRoaXMudHlwZU5hbWUse2VudW1lcmFibGU6ITAsdmFsdWU6dGhpcy50eXBlfSksdGhpcy5maW5hbGl6ZWQ9ITAsZnVuY3Rpb24oZSx0KXt0Lmxlbmd0aD0wLHQucHVzaChlKTtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPTA7cjx0Lmxlbmd0aDsrK3Ipe2U9dFtyXTt2YXIgaT1fW2VdO2lmKCEwIT09aS5maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCIiKTtvLmNhbGwobixlKSYmZGVsZXRlIHRbbltlXV0sbltlXT1yLHQucHVzaC5hcHBseSh0LGkuYmFzZU5hbWVzKX1mb3IodmFyIGE9MCxzPWEsbD10Lmxlbmd0aDtzPGw7KytzKW8uY2FsbCh0LHMpJiYodFthKytdPXRbc10pO3QubGVuZ3RoPWF9KHRoaXMudHlwZU5hbWUsdGhpcy5zdXBlcnR5cGVMaXN0KSx0aGlzLmJ1aWxkYWJsZSYmdGhpcy5zdXBlcnR5cGVMaXN0Lmxhc3RJbmRleE9mKCJFeHByZXNzaW9uIik+PTAmJmZ1bmN0aW9uKGUpe3ZhciB0PUMoZSk7aWYoIU5bdF0pe3ZhciBuPU5baihlKV07aWYobil7dmFyIHI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIE4uZXhwcmVzc2lvblN0YXRlbWVudChuLmFwcGx5KE4sZSkpfTtyLmZyb209ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIE4uZXhwcmVzc2lvblN0YXRlbWVudChuLmZyb20uYXBwbHkoTixlKSl9LE5bdF09cn19fSh0aGlzLnR5cGVOYW1lKX19LG59KGYpLE49T2JqZWN0LmNyZWF0ZShudWxsKSxEPXt9O2Z1bmN0aW9uIGooZSl7cmV0dXJuIGUucmVwbGFjZSgvXltBLVpdKy8sKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIiI7Y2FzZSAxOnJldHVybiBlLnRvTG93ZXJDYXNlKCk7ZGVmYXVsdDpyZXR1cm4gZS5zbGljZSgwLHQtMSkudG9Mb3dlckNhc2UoKStlLmNoYXJBdCh0LTEpfX0pKX1mdW5jdGlvbiBDKGUpe3JldHVybihlPWooZSkpLnJlcGxhY2UoLyhFeHByZXNzaW9uKT8kLywiU3RhdGVtZW50Iil9dmFyIEw9e307ZnVuY3Rpb24gayhlKXt2YXIgdD13KGUpO2lmKHQpcmV0dXJuIHQuZmllbGROYW1lcy5zbGljZSgwKTtpZigidHlwZSJpbiBlKXRocm93IG5ldyBFcnJvcigiZGlkIG5vdCByZWNvZ25pemUgb2JqZWN0IG9mIHR5cGUgIitKU09OLnN0cmluZ2lmeShlLnR5cGUpKTtyZXR1cm4gT2JqZWN0LmtleXMoZSl9ZnVuY3Rpb24gTShlLHQpe3ZhciBuPXcoZSk7aWYobil7dmFyIHI9bi5hbGxGaWVsZHNbdF07aWYocilyZXR1cm4gci5nZXRWYWx1ZShlKX1yZXR1cm4gZSYmZVt0XX1mdW5jdGlvbiBCKGUsdCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSxlfXJldHVybntUeXBlOnQsYnVpbHRJblR5cGVzOk8sZ2V0U3VwZXJ0eXBlTmFtZXM6ZnVuY3Rpb24oZSl7aWYoIW8uY2FsbChfLGUpKXRocm93IG5ldyBFcnJvcigiIik7dmFyIHQ9X1tlXTtpZighMCE9PXQuZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiIik7cmV0dXJuIHQuc3VwZXJ0eXBlTGlzdC5zbGljZSgxKX0sY29tcHV0ZVN1cGVydHlwZUxvb2t1cFRhYmxlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD17fSxuPU9iamVjdC5rZXlzKF8pLHI9bi5sZW5ndGgsaT0wO2k8cjsrK2kpe3ZhciBhPW5baV0scz1fW2FdO2lmKCEwIT09cy5maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCIiK2EpO2Zvcih2YXIgbD0wO2w8cy5zdXBlcnR5cGVMaXN0Lmxlbmd0aDsrK2wpe3ZhciB1PXMuc3VwZXJ0eXBlTGlzdFtsXTtpZihvLmNhbGwoZSx1KSl7dFthXT11O2JyZWFrfX19cmV0dXJuIHR9LGJ1aWxkZXJzOk4sZGVmaW5lTWV0aG9kOmZ1bmN0aW9uKGUsdCl7dmFyIG49RFtlXTtyZXR1cm4gQS5jaGVjayh0KT9kZWxldGUgRFtlXTooVC5hc3NlcnQodCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pKSxufSxnZXRCdWlsZGVyTmFtZTpqLGdldFN0YXRlbWVudEJ1aWxkZXJOYW1lOkMsbmFtZWRUeXBlczpMLGdldEZpZWxkTmFtZXM6ayxnZXRGaWVsZFZhbHVlOk0sZWFjaEZpZWxkOmZ1bmN0aW9uKGUsdCxuKXtrKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3QuY2FsbCh0aGlzLG4sTShlLG4pKX0pLG4pfSxzb21lRmllbGQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBrKGUpLnNvbWUoKGZ1bmN0aW9uKG4pe3JldHVybiB0LmNhbGwodGhpcyxuLE0oZSxuKSl9KSxuKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhfKS5mb3JFYWNoKChmdW5jdGlvbihlKXtfW2VdLmZpbmFsaXplKCl9KSl9fX19LDQyODU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7KDAsci5kZWZhdWx0KSgidHJhaWxpbmdDb21tZW50cyIsZSx0KX07dmFyIHI9bigiMTMxNSIpfSwiNDNmNSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjRiMTUiKS5Tb3VyY2VNYXBHZW5lcmF0b3IsaT1uKCJiOWJkIiksYT0vKFxyP1xuKS8sbz0iJCQkaXNTb3VyY2VOb2RlJCQkIjtmdW5jdGlvbiBzKGUsdCxuLHIsaSl7dGhpcy5jaGlsZHJlbj1bXSx0aGlzLnNvdXJjZUNvbnRlbnRzPXt9LHRoaXMubGluZT1udWxsPT1lP251bGw6ZSx0aGlzLmNvbHVtbj1udWxsPT10P251bGw6dCx0aGlzLnNvdXJjZT1udWxsPT1uP251bGw6bix0aGlzLm5hbWU9bnVsbD09aT9udWxsOmksdGhpc1tvXT0hMCxudWxsIT1yJiZ0aGlzLmFkZChyKX1zLmZyb21TdHJpbmdXaXRoU291cmNlTWFwPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uZXcgcyxvPWUuc3BsaXQoYSksbD0wLHU9ZnVuY3Rpb24oKXtyZXR1cm4gZSgpKyhlKCl8fCIiKTtmdW5jdGlvbiBlKCl7cmV0dXJuIGw8by5sZW5ndGg/b1tsKytdOnZvaWQgMH19LHA9MSxjPTAsZD1udWxsO3JldHVybiB0LmVhY2hNYXBwaW5nKChmdW5jdGlvbihlKXtpZihudWxsIT09ZCl7aWYoIShwPGUuZ2VuZXJhdGVkTGluZSkpe3ZhciB0PW9bbF0sbj10LnN1YnN0cigwLGUuZ2VuZXJhdGVkQ29sdW1uLWMpO3JldHVybiBvW2xdPXQuc3Vic3RyKGUuZ2VuZXJhdGVkQ29sdW1uLWMpLGM9ZS5nZW5lcmF0ZWRDb2x1bW4sZihkLG4pLHZvaWQoZD1lKX1mKGQsdSgpKSxwKyssYz0wfWZvcig7cDxlLmdlbmVyYXRlZExpbmU7KXIuYWRkKHUoKSkscCsrO2M8ZS5nZW5lcmF0ZWRDb2x1bW4mJih0PW9bbF0sci5hZGQodC5zdWJzdHIoMCxlLmdlbmVyYXRlZENvbHVtbikpLG9bbF09dC5zdWJzdHIoZS5nZW5lcmF0ZWRDb2x1bW4pLGM9ZS5nZW5lcmF0ZWRDb2x1bW4pLGQ9ZX0pLHRoaXMpLGw8by5sZW5ndGgmJihkJiZmKGQsdSgpKSxyLmFkZChvLnNwbGljZShsKS5qb2luKCIiKSkpLHQuc291cmNlcy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgYT10LnNvdXJjZUNvbnRlbnRGb3IoZSk7bnVsbCE9YSYmKG51bGwhPW4mJihlPWkuam9pbihuLGUpKSxyLnNldFNvdXJjZUNvbnRlbnQoZSxhKSl9KSkscjtmdW5jdGlvbiBmKGUsdCl7aWYobnVsbD09PWV8fHZvaWQgMD09PWUuc291cmNlKXIuYWRkKHQpO2Vsc2V7dmFyIGE9bj9pLmpvaW4obixlLnNvdXJjZSk6ZS5zb3VyY2U7ci5hZGQobmV3IHMoZS5vcmlnaW5hbExpbmUsZS5vcmlnaW5hbENvbHVtbixhLHQsZS5uYW1lKSl9fX0scy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0aGlzLmFkZChlKX0pLHRoaXMpO2Vsc2V7aWYoIWVbb10mJiJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIFNvdXJjZU5vZGUsIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgU291cmNlTm9kZXMgYW5kIHN0cmluZ3MuIEdvdCAiK2UpO2UmJnRoaXMuY2hpbGRyZW4ucHVzaChlKX1yZXR1cm4gdGhpc30scy5wcm90b3R5cGUucHJlcGVuZD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgdD1lLmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMucHJlcGVuZChlW3RdKTtlbHNle2lmKCFlW29dJiYic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgIitlKTt0aGlzLmNoaWxkcmVuLnVuc2hpZnQoZSl9cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MCxyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO248cjtuKyspKHQ9dGhpcy5jaGlsZHJlbltuXSlbb10/dC53YWxrKGUpOiIiIT09dCYmZSh0LHtzb3VyY2U6dGhpcy5zb3VyY2UsbGluZTp0aGlzLmxpbmUsY29sdW1uOnRoaXMuY29sdW1uLG5hbWU6dGhpcy5uYW1lfSl9LHMucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2lmKHI+MCl7Zm9yKHQ9W10sbj0wO248ci0xO24rKyl0LnB1c2godGhpcy5jaGlsZHJlbltuXSksdC5wdXNoKGUpO3QucHVzaCh0aGlzLmNoaWxkcmVuW25dKSx0aGlzLmNoaWxkcmVuPXR9cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnJlcGxhY2VSaWdodD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGgtMV07cmV0dXJuIG5bb10/bi5yZXBsYWNlUmlnaHQoZSx0KToic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aC0xXT1uLnJlcGxhY2UoZSx0KTp0aGlzLmNoaWxkcmVuLnB1c2goIiIucmVwbGFjZShlLHQpKSx0aGlzfSxzLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50PWZ1bmN0aW9uKGUsdCl7dGhpcy5zb3VyY2VDb250ZW50c1tpLnRvU2V0U3RyaW5nKGUpXT10fSxzLnByb3RvdHlwZS53YWxrU291cmNlQ29udGVudHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj10aGlzLmNoaWxkcmVuLmxlbmd0aDt0PG47dCsrKXRoaXMuY2hpbGRyZW5bdF1bb10mJnRoaXMuY2hpbGRyZW5bdF0ud2Fsa1NvdXJjZUNvbnRlbnRzKGUpO3ZhciByPU9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO2Zvcih0PTAsbj1yLmxlbmd0aDt0PG47dCsrKWUoaS5mcm9tU2V0U3RyaW5nKHJbdF0pLHRoaXMuc291cmNlQ29udGVudHNbclt0XV0pfSxzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLndhbGsoKGZ1bmN0aW9uKHQpe2UrPXR9KSksZX0scy5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwPWZ1bmN0aW9uKGUpe3ZhciB0PXtjb2RlOiIiLGxpbmU6MSxjb2x1bW46MH0sbj1uZXcgcihlKSxpPSExLGE9bnVsbCxvPW51bGwscz1udWxsLGw9bnVsbDtyZXR1cm4gdGhpcy53YWxrKChmdW5jdGlvbihlLHIpe3QuY29kZSs9ZSxudWxsIT09ci5zb3VyY2UmJm51bGwhPT1yLmxpbmUmJm51bGwhPT1yLmNvbHVtbj8oYT09PXIuc291cmNlJiZvPT09ci5saW5lJiZzPT09ci5jb2x1bW4mJmw9PT1yLm5hbWV8fG4uYWRkTWFwcGluZyh7c291cmNlOnIuc291cmNlLG9yaWdpbmFsOntsaW5lOnIubGluZSxjb2x1bW46ci5jb2x1bW59LGdlbmVyYXRlZDp7bGluZTp0LmxpbmUsY29sdW1uOnQuY29sdW1ufSxuYW1lOnIubmFtZX0pLGE9ci5zb3VyY2Usbz1yLmxpbmUscz1yLmNvbHVtbixsPXIubmFtZSxpPSEwKTppJiYobi5hZGRNYXBwaW5nKHtnZW5lcmF0ZWQ6e2xpbmU6dC5saW5lLGNvbHVtbjp0LmNvbHVtbn19KSxhPW51bGwsaT0hMSk7Zm9yKHZhciB1PTAscD1lLmxlbmd0aDt1PHA7dSsrKTEwPT09ZS5jaGFyQ29kZUF0KHUpPyh0LmxpbmUrKyx0LmNvbHVtbj0wLHUrMT09PXA/KGE9bnVsbCxpPSExKTppJiZuLmFkZE1hcHBpbmcoe3NvdXJjZTpyLnNvdXJjZSxvcmlnaW5hbDp7bGluZTpyLmxpbmUsY29sdW1uOnIuY29sdW1ufSxnZW5lcmF0ZWQ6e2xpbmU6dC5saW5lLGNvbHVtbjp0LmNvbHVtbn0sbmFtZTpyLm5hbWV9KSk6dC5jb2x1bW4rK30pKSx0aGlzLndhbGtTb3VyY2VDb250ZW50cygoZnVuY3Rpb24oZSx0KXtuLnNldFNvdXJjZUNvbnRlbnQoZSx0KX0pKSx7Y29kZTp0LmNvZGUsbWFwOm59fSx0LlNvdXJjZU5vZGU9c30sIjQzZmQiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubmVlZHNXaGl0ZXNwYWNlPW0sdC5uZWVkc1doaXRlc3BhY2VCZWZvcmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbShlLHQsImJlZm9yZSIpfSx0Lm5lZWRzV2hpdGVzcGFjZUFmdGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0oZSx0LCJhZnRlciIpfSx0Lm5lZWRzUGFyZW5zPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hIXQmJighKCF1KHQpfHx0LmNhbGxlZSE9PWV8fCFmdW5jdGlvbiBlKHQpe3JldHVybiEhbyh0KXx8bCh0KSYmZSh0Lm9iamVjdCl9KGUpKXx8eShjLGUsdCxuKSl9O3ZhciByPW4oImZiODQiKSxpPW4oImFhNzEiKSxhPW4oIjI1MmEiKTtjb25zdHtpc0NhbGxFeHByZXNzaW9uOm8saXNFeHByZXNzaW9uU3RhdGVtZW50OnMsaXNNZW1iZXJFeHByZXNzaW9uOmwsaXNOZXdFeHByZXNzaW9uOnV9PWE7ZnVuY3Rpb24gcChlKXtjb25zdCB0PXt9O2Z1bmN0aW9uIG4oZSxuKXtjb25zdCByPXRbZV07dFtlXT1yP2Z1bmN0aW9uKGUsdCxpKXtjb25zdCBhPXIoZSx0LGkpO3JldHVybiBudWxsPT1hP24oZSx0LGkpOmF9Om59Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMoZSkpe2NvbnN0IHI9YS5GTElQUEVEX0FMSUFTX0tFWVNbdF07aWYocilmb3IoY29uc3QgaSBvZiByKW4oaSxlW3RdKTtlbHNlIG4odCxlW3RdKX1yZXR1cm4gdH1jb25zdCBjPXAoaSksZD1wKHIubm9kZXMpLGY9cChyLmxpc3QpO2Z1bmN0aW9uIHkoZSx0LG4scil7Y29uc3QgaT1lW3QudHlwZV07cmV0dXJuIGk/aSh0LG4scik6bnVsbH1mdW5jdGlvbiBtKGUsdCxuKXtpZighZSlyZXR1cm4gMDtzKGUpJiYoZT1lLmV4cHJlc3Npb24pO2xldCByPXkoZCxlLHQpO2lmKCFyKXtjb25zdCBpPXkoZixlLHQpO2lmKGkpZm9yKGxldCB0PTA7dDxpLmxlbmd0aCYmKHI9bShpW3RdLGUsbiksIXIpO3QrKyk7fXJldHVybiJvYmplY3QiPT10eXBlb2YgciYmbnVsbCE9PXImJnJbbl18fDB9fSw0NDUxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQsbil7aWYobiYmIklkZW50aWZpZXIiPT09ZS50eXBlJiYiT2JqZWN0UHJvcGVydHkiPT09dC50eXBlJiYiT2JqZWN0RXhwcmVzc2lvbiI9PT1uLnR5cGUpcmV0dXJuITE7Y29uc3QgaT1yLmRlZmF1bHQua2V5c1t0LnR5cGVdO2lmKGkpZm9yKGxldCBuPTA7bjxpLmxlbmd0aDtuKyspe2NvbnN0IHI9aVtuXSxhPXRbcl07aWYoQXJyYXkuaXNBcnJheShhKSl7aWYoYS5pbmRleE9mKGUpPj0wKXJldHVybiEwfWVsc2UgaWYoYT09PWUpcmV0dXJuITB9cmV0dXJuITF9O3ZhciByPW4oImMxZjciKX0sIjQ0ZDMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7dmFyIHI9bigiZWI1YiIpLGk9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4oMCxyLnN0cmluZ1R5cGVBbm5vdGF0aW9uKSgpO2Nhc2UibnVtYmVyIjpyZXR1cm4oMCxyLm51bWJlclR5cGVBbm5vdGF0aW9uKSgpO2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4oMCxyLnZvaWRUeXBlQW5ub3RhdGlvbikoKTtjYXNlImJvb2xlYW4iOnJldHVybigwLHIuYm9vbGVhblR5cGVBbm5vdGF0aW9uKSgpO2Nhc2UiZnVuY3Rpb24iOnJldHVybigwLHIuZ2VuZXJpY1R5cGVBbm5vdGF0aW9uKSgoMCxyLmlkZW50aWZpZXIpKCJGdW5jdGlvbiIpKTtjYXNlIm9iamVjdCI6cmV0dXJuKDAsci5nZW5lcmljVHlwZUFubm90YXRpb24pKCgwLHIuaWRlbnRpZmllcikoIk9iamVjdCIpKTtjYXNlInN5bWJvbCI6cmV0dXJuKDAsci5nZW5lcmljVHlwZUFubm90YXRpb24pKCgwLHIuaWRlbnRpZmllcikoIlN5bWJvbCIpKTtjYXNlImJpZ2ludCI6cmV0dXJuKDAsci5hbnlUeXBlQW5ub3RhdGlvbikoKX10aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdHlwZW9mIHZhbHVlOiAiK2UpfTt0LmRlZmF1bHQ9aX0sIjQ2NmEiOmZ1bmN0aW9uKGUsdCxuKXt9LDQ3MDI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCxuKXtpZighbnx8IWUpcmV0dXJuIGU7Y29uc3Qgcj10KyJDb21tZW50cyI7cmV0dXJuIGVbcl0/ImxlYWRpbmciPT09dD9lW3JdPW4uY29uY2F0KGVbcl0pOmVbcl0ucHVzaCguLi5uKTplW3JdPW4sZX19LCI0YjE1IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMGQ2ZCIpLGk9bigiYjliZCIpLGE9bigiOTI0MSIpLkFycmF5U2V0LG89bigiMzExNyIpLk1hcHBpbmdMaXN0O2Z1bmN0aW9uIHMoZSl7ZXx8KGU9e30pLHRoaXMuX2ZpbGU9aS5nZXRBcmcoZSwiZmlsZSIsbnVsbCksdGhpcy5fc291cmNlUm9vdD1pLmdldEFyZyhlLCJzb3VyY2VSb290IixudWxsKSx0aGlzLl9za2lwVmFsaWRhdGlvbj1pLmdldEFyZyhlLCJza2lwVmFsaWRhdGlvbiIsITEpLHRoaXMuX3NvdXJjZXM9bmV3IGEsdGhpcy5fbmFtZXM9bmV3IGEsdGhpcy5fbWFwcGluZ3M9bmV3IG8sdGhpcy5fc291cmNlc0NvbnRlbnRzPW51bGx9cy5wcm90b3R5cGUuX3ZlcnNpb249MyxzLmZyb21Tb3VyY2VNYXA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zb3VyY2VSb290LG49bmV3IHMoe2ZpbGU6ZS5maWxlLHNvdXJjZVJvb3Q6dH0pO3JldHVybiBlLmVhY2hNYXBwaW5nKChmdW5jdGlvbihlKXt2YXIgcj17Z2VuZXJhdGVkOntsaW5lOmUuZ2VuZXJhdGVkTGluZSxjb2x1bW46ZS5nZW5lcmF0ZWRDb2x1bW59fTtudWxsIT1lLnNvdXJjZSYmKHIuc291cmNlPWUuc291cmNlLG51bGwhPXQmJihyLnNvdXJjZT1pLnJlbGF0aXZlKHQsci5zb3VyY2UpKSxyLm9yaWdpbmFsPXtsaW5lOmUub3JpZ2luYWxMaW5lLGNvbHVtbjplLm9yaWdpbmFsQ29sdW1ufSxudWxsIT1lLm5hbWUmJihyLm5hbWU9ZS5uYW1lKSksbi5hZGRNYXBwaW5nKHIpfSkpLGUuc291cmNlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj1lLnNvdXJjZUNvbnRlbnRGb3IodCk7bnVsbCE9ciYmbi5zZXRTb3VyY2VDb250ZW50KHQscil9KSksbn0scy5wcm90b3R5cGUuYWRkTWFwcGluZz1mdW5jdGlvbihlKXt2YXIgdD1pLmdldEFyZyhlLCJnZW5lcmF0ZWQiKSxuPWkuZ2V0QXJnKGUsIm9yaWdpbmFsIixudWxsKSxyPWkuZ2V0QXJnKGUsInNvdXJjZSIsbnVsbCksYT1pLmdldEFyZyhlLCJuYW1lIixudWxsKTt0aGlzLl9za2lwVmFsaWRhdGlvbnx8dGhpcy5fdmFsaWRhdGVNYXBwaW5nKHQsbixyLGEpLG51bGwhPXImJihyPVN0cmluZyhyKSx0aGlzLl9zb3VyY2VzLmhhcyhyKXx8dGhpcy5fc291cmNlcy5hZGQocikpLG51bGwhPWEmJihhPVN0cmluZyhhKSx0aGlzLl9uYW1lcy5oYXMoYSl8fHRoaXMuX25hbWVzLmFkZChhKSksdGhpcy5fbWFwcGluZ3MuYWRkKHtnZW5lcmF0ZWRMaW5lOnQubGluZSxnZW5lcmF0ZWRDb2x1bW46dC5jb2x1bW4sb3JpZ2luYWxMaW5lOm51bGwhPW4mJm4ubGluZSxvcmlnaW5hbENvbHVtbjpudWxsIT1uJiZuLmNvbHVtbixzb3VyY2U6cixuYW1lOmF9KX0scy5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudD1mdW5jdGlvbihlLHQpe3ZhciBuPWU7bnVsbCE9dGhpcy5fc291cmNlUm9vdCYmKG49aS5yZWxhdGl2ZSh0aGlzLl9zb3VyY2VSb290LG4pKSxudWxsIT10Pyh0aGlzLl9zb3VyY2VzQ29udGVudHN8fCh0aGlzLl9zb3VyY2VzQ29udGVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5fc291cmNlc0NvbnRlbnRzW2kudG9TZXRTdHJpbmcobildPXQpOnRoaXMuX3NvdXJjZXNDb250ZW50cyYmKGRlbGV0ZSB0aGlzLl9zb3VyY2VzQ29udGVudHNbaS50b1NldFN0cmluZyhuKV0sMD09PU9iamVjdC5rZXlzKHRoaXMuX3NvdXJjZXNDb250ZW50cykubGVuZ3RoJiYodGhpcy5fc291cmNlc0NvbnRlbnRzPW51bGwpKX0scy5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXA9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQ7aWYobnVsbD09dCl7aWYobnVsbD09ZS5maWxlKXRocm93IG5ldyBFcnJvcignU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCByZXF1aXJlcyBlaXRoZXIgYW4gZXhwbGljaXQgc291cmNlIGZpbGUsIG9yIHRoZSBzb3VyY2UgbWFwXCdzICJmaWxlIiBwcm9wZXJ0eS4gQm90aCB3ZXJlIG9taXR0ZWQuJyk7cj1lLmZpbGV9dmFyIG89dGhpcy5fc291cmNlUm9vdDtudWxsIT1vJiYocj1pLnJlbGF0aXZlKG8scikpO3ZhciBzPW5ldyBhLGw9bmV3IGE7dGhpcy5fbWFwcGluZ3MudW5zb3J0ZWRGb3JFYWNoKChmdW5jdGlvbih0KXtpZih0LnNvdXJjZT09PXImJm51bGwhPXQub3JpZ2luYWxMaW5lKXt2YXIgYT1lLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe2xpbmU6dC5vcmlnaW5hbExpbmUsY29sdW1uOnQub3JpZ2luYWxDb2x1bW59KTtudWxsIT1hLnNvdXJjZSYmKHQuc291cmNlPWEuc291cmNlLG51bGwhPW4mJih0LnNvdXJjZT1pLmpvaW4obix0LnNvdXJjZSkpLG51bGwhPW8mJih0LnNvdXJjZT1pLnJlbGF0aXZlKG8sdC5zb3VyY2UpKSx0Lm9yaWdpbmFsTGluZT1hLmxpbmUsdC5vcmlnaW5hbENvbHVtbj1hLmNvbHVtbixudWxsIT1hLm5hbWUmJih0Lm5hbWU9YS5uYW1lKSl9dmFyIHU9dC5zb3VyY2U7bnVsbD09dXx8cy5oYXModSl8fHMuYWRkKHUpO3ZhciBwPXQubmFtZTtudWxsPT1wfHxsLmhhcyhwKXx8bC5hZGQocCl9KSx0aGlzKSx0aGlzLl9zb3VyY2VzPXMsdGhpcy5fbmFtZXM9bCxlLnNvdXJjZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9ZS5zb3VyY2VDb250ZW50Rm9yKHQpO251bGwhPXImJihudWxsIT1uJiYodD1pLmpvaW4obix0KSksbnVsbCE9byYmKHQ9aS5yZWxhdGl2ZShvLHQpKSx0aGlzLnNldFNvdXJjZUNvbnRlbnQodCxyKSl9KSx0aGlzKX0scy5wcm90b3R5cGUuX3ZhbGlkYXRlTWFwcGluZz1mdW5jdGlvbihlLHQsbixyKXtpZih0JiYibnVtYmVyIiE9dHlwZW9mIHQubGluZSYmIm51bWJlciIhPXR5cGVvZiB0LmNvbHVtbil0aHJvdyBuZXcgRXJyb3IoIm9yaWdpbmFsLmxpbmUgYW5kIG9yaWdpbmFsLmNvbHVtbiBhcmUgbm90IG51bWJlcnMgLS0geW91IHByb2JhYmx5IG1lYW50IHRvIG9taXQgdGhlIG9yaWdpbmFsIG1hcHBpbmcgZW50aXJlbHkgYW5kIG9ubHkgbWFwIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uIElmIHNvLCBwYXNzIG51bGwgZm9yIHRoZSBvcmlnaW5hbCBtYXBwaW5nIGluc3RlYWQgb2YgYW4gb2JqZWN0IHdpdGggZW1wdHkgb3IgbnVsbCB2YWx1ZXMuIik7aWYoKCEoZSYmImxpbmUiaW4gZSYmImNvbHVtbiJpbiBlJiZlLmxpbmU+MCYmZS5jb2x1bW4+PTApfHx0fHxufHxyKSYmIShlJiYibGluZSJpbiBlJiYiY29sdW1uImluIGUmJnQmJiJsaW5lImluIHQmJiJjb2x1bW4iaW4gdCYmZS5saW5lPjAmJmUuY29sdW1uPj0wJiZ0LmxpbmU+MCYmdC5jb2x1bW4+PTAmJm4pKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtYXBwaW5nOiAiK0pTT04uc3RyaW5naWZ5KHtnZW5lcmF0ZWQ6ZSxzb3VyY2U6bixvcmlnaW5hbDp0LG5hbWU6cn0pKX0scy5wcm90b3R5cGUuX3NlcmlhbGl6ZU1hcHBpbmdzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQsbixhLG89MCxzPTEsbD0wLHU9MCxwPTAsYz0wLGQ9IiIsZj10aGlzLl9tYXBwaW5ncy50b0FycmF5KCkseT0wLG09Zi5sZW5ndGg7eTxtO3krKyl7aWYoZT0iIiwodD1mW3ldKS5nZW5lcmF0ZWRMaW5lIT09cylmb3Iobz0wO3QuZ2VuZXJhdGVkTGluZSE9PXM7KWUrPSI7IixzKys7ZWxzZSBpZih5PjApe2lmKCFpLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKHQsZlt5LTFdKSljb250aW51ZTtlKz0iLCJ9ZSs9ci5lbmNvZGUodC5nZW5lcmF0ZWRDb2x1bW4tbyksbz10LmdlbmVyYXRlZENvbHVtbixudWxsIT10LnNvdXJjZSYmKGE9dGhpcy5fc291cmNlcy5pbmRleE9mKHQuc291cmNlKSxlKz1yLmVuY29kZShhLWMpLGM9YSxlKz1yLmVuY29kZSh0Lm9yaWdpbmFsTGluZS0xLXUpLHU9dC5vcmlnaW5hbExpbmUtMSxlKz1yLmVuY29kZSh0Lm9yaWdpbmFsQ29sdW1uLWwpLGw9dC5vcmlnaW5hbENvbHVtbixudWxsIT10Lm5hbWUmJihuPXRoaXMuX25hbWVzLmluZGV4T2YodC5uYW1lKSxlKz1yLmVuY29kZShuLXApLHA9bikpLGQrPWV9cmV0dXJuIGR9LHMucHJvdG90eXBlLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtpZighdGhpcy5fc291cmNlc0NvbnRlbnRzKXJldHVybiBudWxsO251bGwhPXQmJihlPWkucmVsYXRpdmUodCxlKSk7dmFyIG49aS50b1NldFN0cmluZyhlKTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX3NvdXJjZXNDb250ZW50cyxuKT90aGlzLl9zb3VyY2VzQ29udGVudHNbbl06bnVsbH0pLHRoaXMpfSxzLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT17dmVyc2lvbjp0aGlzLl92ZXJzaW9uLHNvdXJjZXM6dGhpcy5fc291cmNlcy50b0FycmF5KCksbmFtZXM6dGhpcy5fbmFtZXMudG9BcnJheSgpLG1hcHBpbmdzOnRoaXMuX3NlcmlhbGl6ZU1hcHBpbmdzKCl9O3JldHVybiBudWxsIT10aGlzLl9maWxlJiYoZS5maWxlPXRoaXMuX2ZpbGUpLG51bGwhPXRoaXMuX3NvdXJjZVJvb3QmJihlLnNvdXJjZVJvb3Q9dGhpcy5fc291cmNlUm9vdCksdGhpcy5fc291cmNlc0NvbnRlbnRzJiYoZS5zb3VyY2VzQ29udGVudD10aGlzLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KGUuc291cmNlcyxlLnNvdXJjZVJvb3QpKSxlfSxzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKX0sdC5Tb3VyY2VNYXBHZW5lcmF0b3I9c30sIjRiNTMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIjRmMzgiKSxpPXIuX19pbXBvcnREZWZhdWx0KG4oIjllNjEiKSksYT1yLl9faW1wb3J0RGVmYXVsdChuKCI0MWJhIikpLG89ci5fX2ltcG9ydERlZmF1bHQobigiMDljOCIpKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7ZS51c2UoaS5kZWZhdWx0KTt2YXIgdD1lLnVzZShhLmRlZmF1bHQpLlR5cGUuZGVmLG49ZS51c2Uoby5kZWZhdWx0KS5kZWZhdWx0czt0KCJGdW5jdGlvbiIpLmZpZWxkKCJhc3luYyIsQm9vbGVhbixuLmZhbHNlKSx0KCJBd2FpdEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJhcmd1bWVudCIpLmZpZWxkKCJhcmd1bWVudCIsdCgiRXhwcmVzc2lvbiIpKX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sIjRlZTIiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7dmFyIHI9bigiNmRhMCIpLGk9bigiNDNmZCIpLGE9bigiMjUyYSIpLG89bigiMjcwMSIpO2NvbnN0IHM9L2UvaSxsPS9cLjArJC8sdT0vXjBbYm94XS8scD0vXlxzKltAI11fX1BVUkVfX1xzKiQvLHtpc1Byb2dyYW06Yyxpc0ZpbGU6ZCxpc0VtcHR5U3RhdGVtZW50OmZ9PWEse25lZWRzUGFyZW5zOnksbmVlZHNXaGl0ZXNwYWNlQWZ0ZXI6bSxuZWVkc1doaXRlc3BhY2VCZWZvcmU6aH09aTtjbGFzcyBUe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5pbkZvclN0YXRlbWVudEluaXRDb3VudGVyPTAsdGhpcy5fcHJpbnRTdGFjaz1bXSx0aGlzLl9pbmRlbnQ9MCx0aGlzLl9pbnNpZGVBdXg9ITEsdGhpcy5fcGFyZW5QdXNoTmV3bGluZVN0YXRlPW51bGwsdGhpcy5fbm9MaW5lVGVybWluYXRvcj0hMSx0aGlzLl9wcmludEF1eEFmdGVyT25OZXh0VXNlck5vZGU9ITEsdGhpcy5fcHJpbnRlZENvbW1lbnRzPW5ldyBXZWFrU2V0LHRoaXMuX2VuZHNXaXRoSW50ZWdlcj0hMSx0aGlzLl9lbmRzV2l0aFdvcmQ9ITEsdGhpcy5mb3JtYXQ9ZSx0aGlzLl9idWY9bmV3IHIuZGVmYXVsdCh0KX1nZW5lcmF0ZShlKXtyZXR1cm4gdGhpcy5wcmludChlKSx0aGlzLl9tYXliZUFkZEF1eENvbW1lbnQoKSx0aGlzLl9idWYuZ2V0KCl9aW5kZW50KCl7dGhpcy5mb3JtYXQuY29tcGFjdHx8dGhpcy5mb3JtYXQuY29uY2lzZXx8dGhpcy5faW5kZW50Kyt9ZGVkZW50KCl7dGhpcy5mb3JtYXQuY29tcGFjdHx8dGhpcy5mb3JtYXQuY29uY2lzZXx8dGhpcy5faW5kZW50LS19c2VtaWNvbG9uKGU9ITEpe3RoaXMuX21heWJlQWRkQXV4Q29tbWVudCgpLHRoaXMuX2FwcGVuZCgiOyIsIWUpfXJpZ2h0QnJhY2UoKXt0aGlzLmZvcm1hdC5taW5pZmllZCYmdGhpcy5fYnVmLnJlbW92ZUxhc3RTZW1pY29sb24oKSx0aGlzLnRva2VuKCJ9Iil9c3BhY2UoZT0hMSl7aWYoIXRoaXMuZm9ybWF0LmNvbXBhY3QpaWYoZSl0aGlzLl9zcGFjZSgpO2Vsc2UgaWYodGhpcy5fYnVmLmhhc0NvbnRlbnQoKSl7Y29uc3QgZT10aGlzLmdldExhc3RDaGFyKCk7MzIhPT1lJiYxMCE9PWUmJnRoaXMuX3NwYWNlKCl9fXdvcmQoZSl7KHRoaXMuX2VuZHNXaXRoV29yZHx8dGhpcy5lbmRzV2l0aCg0NykmJjQ3PT09ZS5jaGFyQ29kZUF0KDApKSYmdGhpcy5fc3BhY2UoKSx0aGlzLl9tYXliZUFkZEF1eENvbW1lbnQoKSx0aGlzLl9hcHBlbmQoZSksdGhpcy5fZW5kc1dpdGhXb3JkPSEwfW51bWJlcihlKXt0aGlzLndvcmQoZSksdGhpcy5fZW5kc1dpdGhJbnRlZ2VyPU51bWJlci5pc0ludGVnZXIoK2UpJiYhdS50ZXN0KGUpJiYhcy50ZXN0KGUpJiYhbC50ZXN0KGUpJiY0NiE9PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKX10b2tlbihlKXtjb25zdCB0PXRoaXMuZ2V0TGFzdENoYXIoKSxuPWUuY2hhckNvZGVBdCgwKTsoIi0tIj09PWUmJjMzPT09dHx8NDM9PT1uJiY0Mz09PXR8fDQ1PT09biYmNDU9PT10fHw0Nj09PW4mJnRoaXMuX2VuZHNXaXRoSW50ZWdlcikmJnRoaXMuX3NwYWNlKCksdGhpcy5fbWF5YmVBZGRBdXhDb21tZW50KCksdGhpcy5fYXBwZW5kKGUpfW5ld2xpbmUoZT0xKXtpZih0aGlzLmZvcm1hdC5yZXRhaW5MaW5lc3x8dGhpcy5mb3JtYXQuY29tcGFjdClyZXR1cm47aWYodGhpcy5mb3JtYXQuY29uY2lzZSlyZXR1cm4gdm9pZCB0aGlzLnNwYWNlKCk7Y29uc3QgdD10aGlzLmVuZHNXaXRoQ2hhckFuZE5ld2xpbmUoKTtpZigxMCE9PXQmJigxMjMhPT10JiY1OCE9PXR8fGUtLSwhKGU8PTApKSlmb3IobGV0IHQ9MDt0PGU7dCsrKXRoaXMuX25ld2xpbmUoKX1lbmRzV2l0aChlKXtyZXR1cm4gdGhpcy5nZXRMYXN0Q2hhcigpPT09ZX1nZXRMYXN0Q2hhcigpe3JldHVybiB0aGlzLl9idWYuZ2V0TGFzdENoYXIoKX1lbmRzV2l0aENoYXJBbmROZXdsaW5lKCl7cmV0dXJuIHRoaXMuX2J1Zi5lbmRzV2l0aENoYXJBbmROZXdsaW5lKCl9cmVtb3ZlVHJhaWxpbmdOZXdsaW5lKCl7dGhpcy5fYnVmLnJlbW92ZVRyYWlsaW5nTmV3bGluZSgpfWV4YWN0U291cmNlKGUsdCl7dGhpcy5fY2F0Y2hVcCgic3RhcnQiLGUpLHRoaXMuX2J1Zi5leGFjdFNvdXJjZShlLHQpfXNvdXJjZShlLHQpe3RoaXMuX2NhdGNoVXAoZSx0KSx0aGlzLl9idWYuc291cmNlKGUsdCl9d2l0aFNvdXJjZShlLHQsbil7dGhpcy5fY2F0Y2hVcChlLHQpLHRoaXMuX2J1Zi53aXRoU291cmNlKGUsdCxuKX1fc3BhY2UoKXt0aGlzLl9hcHBlbmQoIiAiLCEwKX1fbmV3bGluZSgpe3RoaXMuX2FwcGVuZCgiXG4iLCEwKX1fYXBwZW5kKGUsdD0hMSl7dGhpcy5fbWF5YmVBZGRQYXJlbihlKSx0aGlzLl9tYXliZUluZGVudChlKSx0P3RoaXMuX2J1Zi5xdWV1ZShlKTp0aGlzLl9idWYuYXBwZW5kKGUpLHRoaXMuX2VuZHNXaXRoV29yZD0hMSx0aGlzLl9lbmRzV2l0aEludGVnZXI9ITF9X21heWJlSW5kZW50KGUpe3RoaXMuX2luZGVudCYmdGhpcy5lbmRzV2l0aCgxMCkmJjEwIT09ZS5jaGFyQ29kZUF0KDApJiZ0aGlzLl9idWYucXVldWUodGhpcy5fZ2V0SW5kZW50KCkpfV9tYXliZUFkZFBhcmVuKGUpe2NvbnN0IHQ9dGhpcy5fcGFyZW5QdXNoTmV3bGluZVN0YXRlO2lmKCF0KXJldHVybjtsZXQgbjtmb3Iobj0wO248ZS5sZW5ndGgmJiIgIj09PWVbbl07bisrKWNvbnRpbnVlO2lmKG49PT1lLmxlbmd0aClyZXR1cm47Y29uc3Qgcj1lW25dO2lmKCJcbiIhPT1yKXtpZigiLyIhPT1yfHxuKzE9PT1lLmxlbmd0aClyZXR1cm4gdm9pZCh0aGlzLl9wYXJlblB1c2hOZXdsaW5lU3RhdGU9bnVsbCk7Y29uc3QgdD1lW24rMV07aWYoIioiPT09dCl7aWYocC50ZXN0KGUuc2xpY2UobisyLGUubGVuZ3RoLTIpKSlyZXR1cm59ZWxzZSBpZigiLyIhPT10KXJldHVybiB2b2lkKHRoaXMuX3BhcmVuUHVzaE5ld2xpbmVTdGF0ZT1udWxsKX10aGlzLnRva2VuKCIoIiksdGhpcy5pbmRlbnQoKSx0LnByaW50ZWQ9ITB9X2NhdGNoVXAoZSx0KXtpZighdGhpcy5mb3JtYXQucmV0YWluTGluZXMpcmV0dXJuO2NvbnN0IG49dD90W2VdOm51bGw7aWYobnVsbCE9KG51bGw9PW4/dm9pZCAwOm4ubGluZSkpe2NvbnN0IGU9bi5saW5lLXRoaXMuX2J1Zi5nZXRDdXJyZW50TGluZSgpO2ZvcihsZXQgdD0wO3Q8ZTt0KyspdGhpcy5fbmV3bGluZSgpfX1fZ2V0SW5kZW50KCl7cmV0dXJuIHRoaXMuZm9ybWF0LmluZGVudC5zdHlsZS5yZXBlYXQodGhpcy5faW5kZW50KX1zdGFydFRlcm1pbmF0b3JsZXNzKGU9ITEpe3JldHVybiBlPyh0aGlzLl9ub0xpbmVUZXJtaW5hdG9yPSEwLG51bGwpOnRoaXMuX3BhcmVuUHVzaE5ld2xpbmVTdGF0ZT17cHJpbnRlZDohMX19ZW5kVGVybWluYXRvcmxlc3MoZSl7dGhpcy5fbm9MaW5lVGVybWluYXRvcj0hMSxudWxsIT1lJiZlLnByaW50ZWQmJih0aGlzLmRlZGVudCgpLHRoaXMubmV3bGluZSgpLHRoaXMudG9rZW4oIikiKSl9cHJpbnQoZSx0KXtpZighZSlyZXR1cm47Y29uc3Qgbj10aGlzLmZvcm1hdC5jb25jaXNlO2UuX2NvbXBhY3QmJih0aGlzLmZvcm1hdC5jb25jaXNlPSEwKTtjb25zdCByPXRoaXNbZS50eXBlXTtpZighcil0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoYHVua25vd24gbm9kZSBvZiB0eXBlICR7SlNPTi5zdHJpbmdpZnkoZS50eXBlKX0gd2l0aCBjb25zdHJ1Y3RvciAke0pTT04uc3RyaW5naWZ5KG51bGw9PWU/dm9pZCAwOmUuY29uc3RydWN0b3IubmFtZSl9YCk7dGhpcy5fcHJpbnRTdGFjay5wdXNoKGUpO2NvbnN0IGk9dGhpcy5faW5zaWRlQXV4O3RoaXMuX2luc2lkZUF1eD0hZS5sb2MsdGhpcy5fbWF5YmVBZGRBdXhDb21tZW50KHRoaXMuX2luc2lkZUF1eCYmIWkpO2xldCBhPXkoZSx0LHRoaXMuX3ByaW50U3RhY2spO3RoaXMuZm9ybWF0LnJldGFpbkZ1bmN0aW9uUGFyZW5zJiYiRnVuY3Rpb25FeHByZXNzaW9uIj09PWUudHlwZSYmZS5leHRyYSYmZS5leHRyYS5wYXJlbnRoZXNpemVkJiYoYT0hMCksYSYmdGhpcy50b2tlbigiKCIpLHRoaXMuX3ByaW50TGVhZGluZ0NvbW1lbnRzKGUpO2NvbnN0IG89YyhlKXx8ZChlKT9udWxsOmUubG9jO3RoaXMud2l0aFNvdXJjZSgic3RhcnQiLG8sKCk9PntyLmNhbGwodGhpcyxlLHQpfSksdGhpcy5fcHJpbnRUcmFpbGluZ0NvbW1lbnRzKGUpLGEmJnRoaXMudG9rZW4oIikiKSx0aGlzLl9wcmludFN0YWNrLnBvcCgpLHRoaXMuZm9ybWF0LmNvbmNpc2U9bix0aGlzLl9pbnNpZGVBdXg9aX1fbWF5YmVBZGRBdXhDb21tZW50KGUpe2UmJnRoaXMuX3ByaW50QXV4QmVmb3JlQ29tbWVudCgpLHRoaXMuX2luc2lkZUF1eHx8dGhpcy5fcHJpbnRBdXhBZnRlckNvbW1lbnQoKX1fcHJpbnRBdXhCZWZvcmVDb21tZW50KCl7aWYodGhpcy5fcHJpbnRBdXhBZnRlck9uTmV4dFVzZXJOb2RlKXJldHVybjt0aGlzLl9wcmludEF1eEFmdGVyT25OZXh0VXNlck5vZGU9ITA7Y29uc3QgZT10aGlzLmZvcm1hdC5hdXhpbGlhcnlDb21tZW50QmVmb3JlO2UmJnRoaXMuX3ByaW50Q29tbWVudCh7dHlwZToiQ29tbWVudEJsb2NrIix2YWx1ZTplfSl9X3ByaW50QXV4QWZ0ZXJDb21tZW50KCl7aWYoIXRoaXMuX3ByaW50QXV4QWZ0ZXJPbk5leHRVc2VyTm9kZSlyZXR1cm47dGhpcy5fcHJpbnRBdXhBZnRlck9uTmV4dFVzZXJOb2RlPSExO2NvbnN0IGU9dGhpcy5mb3JtYXQuYXV4aWxpYXJ5Q29tbWVudEFmdGVyO2UmJnRoaXMuX3ByaW50Q29tbWVudCh7dHlwZToiQ29tbWVudEJsb2NrIix2YWx1ZTplfSl9Z2V0UG9zc2libGVSYXcoZSl7Y29uc3QgdD1lLmV4dHJhO2lmKHQmJm51bGwhPXQucmF3JiZudWxsIT10LnJhd1ZhbHVlJiZlLnZhbHVlPT09dC5yYXdWYWx1ZSlyZXR1cm4gdC5yYXd9cHJpbnRKb2luKGUsdCxuPXt9KXtpZihudWxsPT1lfHwhZS5sZW5ndGgpcmV0dXJuO24uaW5kZW50JiZ0aGlzLmluZGVudCgpO2NvbnN0IHI9e2FkZE5ld2xpbmVzOm4uYWRkTmV3bGluZXN9O2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtjb25zdCBhPWVbaV07YSYmKG4uc3RhdGVtZW50JiZ0aGlzLl9wcmludE5ld2xpbmUoITAsYSx0LHIpLHRoaXMucHJpbnQoYSx0KSxuLml0ZXJhdG9yJiZuLml0ZXJhdG9yKGEsaSksbi5zZXBhcmF0b3ImJmk8ZS5sZW5ndGgtMSYmbi5zZXBhcmF0b3IuY2FsbCh0aGlzKSxuLnN0YXRlbWVudCYmdGhpcy5fcHJpbnROZXdsaW5lKCExLGEsdCxyKSl9bi5pbmRlbnQmJnRoaXMuZGVkZW50KCl9cHJpbnRBbmRJbmRlbnRPbkNvbW1lbnRzKGUsdCl7Y29uc3Qgbj1lLmxlYWRpbmdDb21tZW50cyYmZS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoPjA7biYmdGhpcy5pbmRlbnQoKSx0aGlzLnByaW50KGUsdCksbiYmdGhpcy5kZWRlbnQoKX1wcmludEJsb2NrKGUpe2NvbnN0IHQ9ZS5ib2R5O2YodCl8fHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KHQsZSl9X3ByaW50VHJhaWxpbmdDb21tZW50cyhlKXt0aGlzLl9wcmludENvbW1lbnRzKHRoaXMuX2dldENvbW1lbnRzKCExLGUpKX1fcHJpbnRMZWFkaW5nQ29tbWVudHMoZSl7dGhpcy5fcHJpbnRDb21tZW50cyh0aGlzLl9nZXRDb21tZW50cyghMCxlKSwhMCl9cHJpbnRJbm5lckNvbW1lbnRzKGUsdD0hMCl7dmFyIG47bnVsbCE9KG49ZS5pbm5lckNvbW1lbnRzKSYmbi5sZW5ndGgmJih0JiZ0aGlzLmluZGVudCgpLHRoaXMuX3ByaW50Q29tbWVudHMoZS5pbm5lckNvbW1lbnRzKSx0JiZ0aGlzLmRlZGVudCgpKX1wcmludFNlcXVlbmNlKGUsdCxuPXt9KXtyZXR1cm4gbi5zdGF0ZW1lbnQ9ITAsdGhpcy5wcmludEpvaW4oZSx0LG4pfXByaW50TGlzdChlLHQsbj17fSl7cmV0dXJuIG51bGw9PW4uc2VwYXJhdG9yJiYobi5zZXBhcmF0b3I9UyksdGhpcy5wcmludEpvaW4oZSx0LG4pfV9wcmludE5ld2xpbmUoZSx0LG4scil7aWYodGhpcy5mb3JtYXQucmV0YWluTGluZXN8fHRoaXMuZm9ybWF0LmNvbXBhY3QpcmV0dXJuO2lmKHRoaXMuZm9ybWF0LmNvbmNpc2UpcmV0dXJuIHZvaWQgdGhpcy5zcGFjZSgpO2xldCBpPTA7aWYodGhpcy5fYnVmLmhhc0NvbnRlbnQoKSl7ZXx8aSsrLHIuYWRkTmV3bGluZXMmJihpKz1yLmFkZE5ld2xpbmVzKGUsdCl8fDApOyhlP2g6bSkodCxuKSYmaSsrfXRoaXMubmV3bGluZShNYXRoLm1pbigyLGkpKX1fZ2V0Q29tbWVudHMoZSx0KXtyZXR1cm4gdCYmKGU/dC5sZWFkaW5nQ29tbWVudHM6dC50cmFpbGluZ0NvbW1lbnRzKXx8W119X3ByaW50Q29tbWVudChlLHQpe2lmKCF0aGlzLmZvcm1hdC5zaG91bGRQcmludENvbW1lbnQoZS52YWx1ZSkpcmV0dXJuO2lmKGUuaWdub3JlKXJldHVybjtpZih0aGlzLl9wcmludGVkQ29tbWVudHMuaGFzKGUpKXJldHVybjt0aGlzLl9wcmludGVkQ29tbWVudHMuYWRkKGUpO2NvbnN0IG49IkNvbW1lbnRCbG9jayI9PT1lLnR5cGUscj1uJiYhdCYmIXRoaXMuX25vTGluZVRlcm1pbmF0b3I7ciYmdGhpcy5fYnVmLmhhc0NvbnRlbnQoKSYmdGhpcy5uZXdsaW5lKDEpO2NvbnN0IGk9dGhpcy5nZXRMYXN0Q2hhcigpOzkxIT09aSYmMTIzIT09aSYmdGhpcy5zcGFjZSgpO2xldCBhPW58fHRoaXMuX25vTGluZVRlcm1pbmF0b3I/YC8qJHtlLnZhbHVlfSovYDpgLy8ke2UudmFsdWV9XG5gO2lmKG4mJnRoaXMuZm9ybWF0LmluZGVudC5hZGp1c3RNdWx0aWxpbmVDb21tZW50KXt2YXIgbztjb25zdCB0PW51bGw9PShvPWUubG9jKT92b2lkIDA6by5zdGFydC5jb2x1bW47aWYodCl7Y29uc3QgZT1uZXcgUmVnRXhwKCJcXG5cXHN7MSwiK3QrIn0iLCJnIik7YT1hLnJlcGxhY2UoZSwiXG4iKX1jb25zdCBuPU1hdGgubWF4KHRoaXMuX2dldEluZGVudCgpLmxlbmd0aCx0aGlzLmZvcm1hdC5yZXRhaW5MaW5lcz8wOnRoaXMuX2J1Zi5nZXRDdXJyZW50Q29sdW1uKCkpO2E9YS5yZXBsYWNlKC9cbig/ISQpL2csIlxuIisiICIucmVwZWF0KG4pKX10aGlzLmVuZHNXaXRoKDQ3KSYmdGhpcy5fc3BhY2UoKSx0aGlzLndpdGhTb3VyY2UoInN0YXJ0IixlLmxvYywoKT0+e3RoaXMuX2FwcGVuZChhKX0pLHImJnRoaXMubmV3bGluZSgxKX1fcHJpbnRDb21tZW50cyhlLHQpe2lmKG51bGwhPWUmJmUubGVuZ3RoKWlmKHQmJjE9PT1lLmxlbmd0aCYmcC50ZXN0KGVbMF0udmFsdWUpKXRoaXMuX3ByaW50Q29tbWVudChlWzBdLHRoaXMuX2J1Zi5oYXNDb250ZW50KCkmJiF0aGlzLmVuZHNXaXRoKDEwKSk7ZWxzZSBmb3IoY29uc3QgdCBvZiBlKXRoaXMuX3ByaW50Q29tbWVudCh0KX1wcmludEFzc2VydGlvbnMoZSl7dmFyIHQ7bnVsbCE9KHQ9ZS5hc3NlcnRpb25zKSYmdC5sZW5ndGgmJih0aGlzLnNwYWNlKCksdGhpcy53b3JkKCJhc3NlcnQiKSx0aGlzLnNwYWNlKCksdGhpcy50b2tlbigieyIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50TGlzdChlLmFzc2VydGlvbnMsZSksdGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIn0iKSl9fU9iamVjdC5hc3NpZ24oVC5wcm90b3R5cGUsbyksVC5wcm90b3R5cGUuTm9vcD1mdW5jdGlvbigpe307dmFyIGI9VDtmdW5jdGlvbiBTKCl7dGhpcy50b2tlbigiLCIpLHRoaXMuc3BhY2UoKX10LmRlZmF1bHQ9Yn0sIjRmMzgiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5yKHQpLG4uZCh0LCJfX2V4dGVuZHMiLChmdW5jdGlvbigpe3JldHVybiBpfSkpLG4uZCh0LCJfX2Fzc2lnbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSksbi5kKHQsIl9fcmVzdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksbi5kKHQsIl9fZGVjb3JhdGUiLChmdW5jdGlvbigpe3JldHVybiBzfSkpLG4uZCh0LCJfX3BhcmFtIiwoZnVuY3Rpb24oKXtyZXR1cm4gbH0pKSxuLmQodCwiX19lc0RlY29yYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdX0pKSxuLmQodCwiX19ydW5Jbml0aWFsaXplcnMiLChmdW5jdGlvbigpe3JldHVybiBwfSkpLG4uZCh0LCJfX3Byb3BLZXkiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZCh0LCJfX3NldEZ1bmN0aW9uTmFtZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSksbi5kKHQsIl9fbWV0YWRhdGEiLChmdW5jdGlvbigpe3JldHVybiBmfSkpLG4uZCh0LCJfX2F3YWl0ZXIiLChmdW5jdGlvbigpe3JldHVybiB5fSkpLG4uZCh0LCJfX2dlbmVyYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIG19KSksbi5kKHQsIl9fY3JlYXRlQmluZGluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSksbi5kKHQsIl9fZXhwb3J0U3RhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFR9KSksbi5kKHQsIl9fdmFsdWVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gYn0pKSxuLmQodCwiX19yZWFkIiwoZnVuY3Rpb24oKXtyZXR1cm4gU30pKSxuLmQodCwiX19zcHJlYWQiLChmdW5jdGlvbigpe3JldHVybiBFfSkpLG4uZCh0LCJfX3NwcmVhZEFycmF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSksbi5kKHQsIl9fc3ByZWFkQXJyYXkiLChmdW5jdGlvbigpe3JldHVybiB2fSkpLG4uZCh0LCJfX2F3YWl0IiwoZnVuY3Rpb24oKXtyZXR1cm4gUH0pKSxuLmQodCwiX19hc3luY0dlbmVyYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSksbi5kKHQsIl9fYXN5bmNEZWxlZ2F0b3IiLChmdW5jdGlvbigpe3JldHVybiBBfSkpLG4uZCh0LCJfX2FzeW5jVmFsdWVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gT30pKSxuLmQodCwiX19tYWtlVGVtcGxhdGVPYmplY3QiLChmdW5jdGlvbigpe3JldHVybiBffSkpLG4uZCh0LCJfX2ltcG9ydFN0YXIiLChmdW5jdGlvbigpe3JldHVybiBJfSkpLG4uZCh0LCJfX2ltcG9ydERlZmF1bHQiLChmdW5jdGlvbigpe3JldHVybiBOfSkpLG4uZCh0LCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gRH0pKSxuLmQodCwiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSksbi5kKHQsIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSk7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ocj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9KShlLHQpfTtmdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodCkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1yKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfXZhciBhPWZ1bmN0aW9uKCl7cmV0dXJuKGE9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIGkgaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBvKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiYiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2k8ci5sZW5ndGg7aSsrKXQuaW5kZXhPZihyW2ldKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW2ldKSYmKG5bcltpXV09ZVtyW2ldXSl9cmV0dXJuIG59ZnVuY3Rpb24gcyhlLHQsbixyKXt2YXIgaSxhPWFyZ3VtZW50cy5sZW5ndGgsbz1hPDM/dDpudWxsPT09cj9yPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTpyO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxuLHIpO2Vsc2UgZm9yKHZhciBzPWUubGVuZ3RoLTE7cz49MDtzLS0pKGk9ZVtzXSkmJihvPShhPDM/aShvKTphPjM/aSh0LG4sbyk6aSh0LG4pKXx8byk7cmV0dXJuIGE+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixvKSxvfWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt0KG4scixlKX19ZnVuY3Rpb24gdShlLHQsbixyLGksYSl7ZnVuY3Rpb24gbyhlKXtpZih2b2lkIDAhPT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiBlfWZvcih2YXIgcyxsPXIua2luZCx1PSJnZXR0ZXIiPT09bD8iZ2V0Ijoic2V0dGVyIj09PWw/InNldCI6InZhbHVlIixwPSF0JiZlP3Iuc3RhdGljP2U6ZS5wcm90b3R5cGU6bnVsbCxjPXR8fChwP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocCxyLm5hbWUpOnt9KSxkPSExLGY9bi5sZW5ndGgtMTtmPj0wO2YtLSl7dmFyIHk9e307Zm9yKHZhciBtIGluIHIpeVttXT0iYWNjZXNzIj09PW0/e306clttXTtmb3IodmFyIG0gaW4gci5hY2Nlc3MpeS5hY2Nlc3NbbV09ci5hY2Nlc3NbbV07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbihlKXtpZihkKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO2EucHVzaChvKGV8fG51bGwpKX07dmFyIGg9KDAsbltmXSkoImFjY2Vzc29yIj09PWw/e2dldDpjLmdldCxzZXQ6Yy5zZXR9OmNbdV0seSk7aWYoImFjY2Vzc29yIj09PWwpe2lmKHZvaWQgMD09PWgpY29udGludWU7aWYobnVsbD09PWh8fCJvYmplY3QiIT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsocz1vKGguZ2V0KSkmJihjLmdldD1zKSwocz1vKGguc2V0KSkmJihjLnNldD1zKSwocz1vKGguaW5pdCkpJiZpLnB1c2gocyl9ZWxzZShzPW8oaCkpJiYoImZpZWxkIj09PWw/aS5wdXNoKHMpOmNbdV09cyl9cCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsci5uYW1lLGMpLGQ9ITB9ZnVuY3Rpb24gcChlLHQsbil7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTx0Lmxlbmd0aDtpKyspbj1yP3RbaV0uY2FsbChlLG4pOnRbaV0uY2FsbChlKTtyZXR1cm4gcj9uOnZvaWQgMH1mdW5jdGlvbiBjKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZT9lOiIiLmNvbmNhdChlKX1mdW5jdGlvbiBkKGUsdCxuKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQmJih0PXQuZGVzY3JpcHRpb24/IlsiLmNvbmNhdCh0LmRlc2NyaXB0aW9uLCJdIik6IiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJuYW1lIix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOm4/IiIuY29uY2F0KG4sIiAiLHQpOnR9KX1mdW5jdGlvbiBmKGUsdCl7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShlLHQpfWZ1bmN0aW9uIHkoZSx0LG4scil7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbigoZnVuY3Rpb24odCl7dChlKX0pKX1yZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24obixhKXtmdW5jdGlvbiBvKGUpe3RyeXtsKHIubmV4dChlKSl9Y2F0Y2goZSl7YShlKX19ZnVuY3Rpb24gcyhlKXt0cnl7bChyLnRocm93KGUpKX1jYXRjaChlKXthKGUpfX1mdW5jdGlvbiBsKGUpe2UuZG9uZT9uKGUudmFsdWUpOmkoZS52YWx1ZSkudGhlbihvLHMpfWwoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiBtKGUsdCl7dmFyIG4scixpLGEsbz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZpWzBdKXRocm93IGlbMV07cmV0dXJuIGlbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gYT17bmV4dDpzKDApLHRocm93OnMoMSkscmV0dXJuOnMoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihhW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGE7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGwoW2UsdF0pfX1mdW5jdGlvbiBsKHMpe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YSYmKGE9MCxzWzBdJiYobz0wKSksbzspdHJ5e2lmKG49MSxyJiYoaT0yJnNbMF0/ci5yZXR1cm46c1swXT9yLnRocm93fHwoKGk9ci5yZXR1cm4pJiZpLmNhbGwociksMCk6ci5uZXh0KSYmIShpPWkuY2FsbChyLHNbMV0pKS5kb25lKXJldHVybiBpO3N3aXRjaChyPTAsaSYmKHM9WzImc1swXSxpLnZhbHVlXSksc1swXSl7Y2FzZSAwOmNhc2UgMTppPXM7YnJlYWs7Y2FzZSA0OnJldHVybiBvLmxhYmVsKysse3ZhbHVlOnNbMV0sZG9uZTohMX07Y2FzZSA1Om8ubGFiZWwrKyxyPXNbMV0scz1bMF07Y29udGludWU7Y2FzZSA3OnM9by5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShpPShpPW8udHJ5cykubGVuZ3RoPjAmJmlbaS5sZW5ndGgtMV0pJiYoNj09PXNbMF18fDI9PT1zWzBdKSl7bz0wO2NvbnRpbnVlfWlmKDM9PT1zWzBdJiYoIWl8fHNbMV0+aVswXSYmc1sxXTxpWzNdKSl7by5sYWJlbD1zWzFdO2JyZWFrfWlmKDY9PT1zWzBdJiZvLmxhYmVsPGlbMV0pe28ubGFiZWw9aVsxXSxpPXM7YnJlYWt9aWYoaSYmby5sYWJlbDxpWzJdKXtvLmxhYmVsPWlbMl0sby5vcHMucHVzaChzKTticmVha31pWzJdJiZvLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWV9cz10LmNhbGwoZSxvKX1jYXRjaChlKXtzPVs2LGVdLHI9MH1maW5hbGx5e249aT0wfWlmKDUmc1swXSl0aHJvdyBzWzFdO3JldHVybnt2YWx1ZTpzWzBdP3NbMV06dm9pZCAwLGRvbmU6ITB9fX12YXIgaD1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtpJiYhKCJnZXQiaW4gaT8hdC5fX2VzTW9kdWxlOmkud3JpdGFibGV8fGkuY29uZmlndXJhYmxlKXx8KGk9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixpKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfTtmdW5jdGlvbiBUKGUsdCl7Zm9yKHZhciBuIGluIGUpImRlZmF1bHQiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fGgodCxlLG4pfWZ1bmN0aW9uIGIoZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLG49dCYmZVt0XSxyPTA7aWYobilyZXR1cm4gbi5jYWxsKGUpO2lmKGUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSYmcj49ZS5sZW5ndGgmJihlPXZvaWQgMCkse3ZhbHVlOmUmJmVbcisrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9ZnVuY3Rpb24gUyhlLHQpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXTtpZighbilyZXR1cm4gZTt2YXIgcixpLGE9bi5jYWxsKGUpLG89W107dHJ5e2Zvcig7KHZvaWQgMD09PXR8fHQtLSA+MCkmJiEocj1hLm5leHQoKSkuZG9uZTspby5wdXNoKHIudmFsdWUpfWNhdGNoKGUpe2k9e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihuPWEucmV0dXJuKSYmbi5jYWxsKGEpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gb31mdW5jdGlvbiBFKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWU9ZS5jb25jYXQoUyhhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiBnKCl7Zm9yKHZhciBlPTAsdD0wLG49YXJndW1lbnRzLmxlbmd0aDt0PG47dCsrKWUrPWFyZ3VtZW50c1t0XS5sZW5ndGg7dmFyIHI9QXJyYXkoZSksaT0wO2Zvcih0PTA7dDxuO3QrKylmb3IodmFyIGE9YXJndW1lbnRzW3RdLG89MCxzPWEubGVuZ3RoO288cztvKyssaSsrKXJbaV09YVtvXTtyZXR1cm4gcn1mdW5jdGlvbiB2KGUsdCxuKXtpZihufHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHIsaT0wLGE9dC5sZW5ndGg7aTxhO2krKykhciYmaSBpbiB0fHwocnx8KHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLGkpKSxyW2ldPXRbaV0pO3JldHVybiBlLmNvbmNhdChyfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9ZnVuY3Rpb24gUChlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFA/KHRoaXMudj1lLHRoaXMpOm5ldyBQKGUpfWZ1bmN0aW9uIHgoZSx0LG4pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgcixpPW4uYXBwbHkoZSx0fHxbXSksYT1bXTtyZXR1cm4gcj17fSxvKCJuZXh0IiksbygidGhyb3ciKSxvKCJyZXR1cm4iKSxyW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxyO2Z1bmN0aW9uIG8oZSl7aVtlXSYmKHJbZV09ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe2EucHVzaChbZSx0LG4scl0pPjF8fHMoZSx0KX0pKX0pfWZ1bmN0aW9uIHMoZSx0KXt0cnl7IWZ1bmN0aW9uKGUpe2UudmFsdWUgaW5zdGFuY2VvZiBQP1Byb21pc2UucmVzb2x2ZShlLnZhbHVlLnYpLnRoZW4obCx1KTpwKGFbMF1bMl0sZSl9KGlbZV0odCkpfWNhdGNoKGUpe3AoYVswXVszXSxlKX19ZnVuY3Rpb24gbChlKXtzKCJuZXh0IixlKX1mdW5jdGlvbiB1KGUpe3MoInRocm93IixlKX1mdW5jdGlvbiBwKGUsdCl7ZSh0KSxhLnNoaWZ0KCksYS5sZW5ndGgmJnMoYVswXVswXSxhWzBdWzFdKX19ZnVuY3Rpb24gQShlKXt2YXIgdCxuO3JldHVybiB0PXt9LHIoIm5leHQiKSxyKCJ0aHJvdyIsKGZ1bmN0aW9uKGUpe3Rocm93IGV9KSkscigicmV0dXJuIiksdFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQ7ZnVuY3Rpb24gcihyLGkpe3Rbcl09ZVtyXT9mdW5jdGlvbih0KXtyZXR1cm4obj0hbik/e3ZhbHVlOlAoZVtyXSh0KSksZG9uZTohMX06aT9pKHQpOnR9Oml9fWZ1bmN0aW9uIE8oZSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciB0LG49ZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIG4/bi5jYWxsKGUpOihlPWIoZSksdD17fSxyKCJuZXh0IikscigidGhyb3ciKSxyKCJyZXR1cm4iKSx0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0KTtmdW5jdGlvbiByKG4pe3Rbbl09ZVtuXSYmZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLGkpeyhmdW5jdGlvbihlLHQsbixyKXtQcm9taXNlLnJlc29sdmUocikudGhlbigoZnVuY3Rpb24odCl7ZSh7dmFsdWU6dCxkb25lOm59KX0pLHQpfSkocixpLCh0PWVbbl0odCkpLmRvbmUsdC52YWx1ZSl9KSl9fX1mdW5jdGlvbiBfKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX12YXIgdz1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH07ZnVuY3Rpb24gSShlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSkiZGVmYXVsdCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmaCh0LGUsbik7cmV0dXJuIHcodCxlKSx0fWZ1bmN0aW9uIE4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIEQoZSx0LG4scil7aWYoImEiPT09biYmIXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyIik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZSE9PXR8fCFyOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTtyZXR1cm4ibSI9PT1uP3I6ImEiPT09bj9yLmNhbGwoZSk6cj9yLnZhbHVlOnQuZ2V0KGUpfWZ1bmN0aW9uIGooZSx0LG4scixpKXtpZigibSI9PT1yKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpO2lmKCJhIj09PXImJiFpKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlciIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2UhPT10fHwhaTohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTtyZXR1cm4iYSI9PT1yP2kuY2FsbChlLG4pOmk/aS52YWx1ZT1uOnQuc2V0KGUsbiksbn1mdW5jdGlvbiBDKGUsdCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT90PT09ZTplLmhhcyh0KX19LDU2NzM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiNGYzOCIpLGk9ci5fX2ltcG9ydERlZmF1bHQobigiMTI2NyIpKSxhPXIuX19pbXBvcnREZWZhdWx0KG4oImUwNGEiKSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe2UudXNlKGkuZGVmYXVsdCksZS51c2UoYS5kZWZhdWx0KX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sIjU3ZGUiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVklTSVRPUl9LRVlTPXQuTk9ERV9QQVJFTlRfVkFMSURBVElPTlM9dC5OT0RFX0ZJRUxEUz10LkZMSVBQRURfQUxJQVNfS0VZUz10LkRFUFJFQ0FURURfS0VZUz10LkJVSUxERVJfS0VZUz10LkFMSUFTX0tFWVM9dm9pZCAwLHQuYXJyYXlPZj1tLHQuYXJyYXlPZlR5cGU9aCx0LmFzc2VydEVhY2g9VCx0LmFzc2VydE5vZGVPclZhbHVlVHlwZT1mdW5jdGlvbiguLi5lKXtmdW5jdGlvbiB0KHQsbixhKXtmb3IoY29uc3QgbyBvZiBlKWlmKGQoYSk9PT1vfHwoMCxyLmRlZmF1bHQpKG8sYSkpcmV0dXJuIHZvaWQoMCxpLnZhbGlkYXRlQ2hpbGQpKHQsbixhKTt0aHJvdyBuZXcgVHlwZUVycm9yKGBQcm9wZXJ0eSAke259IG9mICR7dC50eXBlfSBleHBlY3RlZCBub2RlIHRvIGJlIG9mIGEgdHlwZSAke0pTT04uc3RyaW5naWZ5KGUpfSBidXQgaW5zdGVhZCBnb3QgJHtKU09OLnN0cmluZ2lmeShudWxsPT1hP3ZvaWQgMDphLnR5cGUpfWApfXJldHVybiB0Lm9uZU9mTm9kZU9yVmFsdWVUeXBlcz1lLHR9LHQuYXNzZXJ0Tm9kZVR5cGU9Yix0LmFzc2VydE9uZU9mPWZ1bmN0aW9uKC4uLmUpe2Z1bmN0aW9uIHQodCxuLHIpe2lmKGUuaW5kZXhPZihyKTwwKXRocm93IG5ldyBUeXBlRXJyb3IoYFByb3BlcnR5ICR7bn0gZXhwZWN0ZWQgdmFsdWUgdG8gYmUgb25lIG9mICR7SlNPTi5zdHJpbmdpZnkoZSl9IGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShyKX1gKX1yZXR1cm4gdC5vbmVPZj1lLHR9LHQuYXNzZXJ0T3B0aW9uYWxDaGFpblN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0O2xldCBuPWU7Zm9yKDtlOyl7Y29uc3R7dHlwZTplfT1uO2lmKCJPcHRpb25hbENhbGxFeHByZXNzaW9uIiE9PWUpe2lmKCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iIT09ZSlicmVhaztpZihuLm9wdGlvbmFsKXJldHVybjtuPW4ub2JqZWN0fWVsc2V7aWYobi5vcHRpb25hbClyZXR1cm47bj1uLmNhbGxlZX19dGhyb3cgbmV3IFR5cGVFcnJvcihgTm9uLW9wdGlvbmFsICR7ZS50eXBlfSBtdXN0IGNoYWluIGZyb20gYW4gb3B0aW9uYWwgT3B0aW9uYWxNZW1iZXJFeHByZXNzaW9uIG9yIE9wdGlvbmFsQ2FsbEV4cHJlc3Npb24uIEZvdW5kIGNoYWluIGZyb20gJHtudWxsPT0odD1uKT92b2lkIDA6dC50eXBlfWApfX0sdC5hc3NlcnRTaGFwZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXtjb25zdCBhPVtdO2Zvcihjb25zdCBuIG9mIE9iamVjdC5rZXlzKGUpKXRyeXsoMCxpLnZhbGlkYXRlRmllbGQpKHQsbixyW25dLGVbbl0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBUeXBlRXJyb3Ipe2EucHVzaChlLm1lc3NhZ2UpO2NvbnRpbnVlfXRocm93IGV9aWYoYS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcihgUHJvcGVydHkgJHtufSBvZiAke3QudHlwZX0gZXhwZWN0ZWQgdG8gaGF2ZSB0aGUgZm9sbG93aW5nOlxuJHthLmpvaW4oIlxuIil9YCl9cmV0dXJuIHQuc2hhcGVPZj1lLHR9LHQuYXNzZXJ0VmFsdWVUeXBlPVMsdC5jaGFpbj1FLHQuZGVmYXVsdD14LHQuZGVmaW5lQWxpYXNlZFR5cGU9ZnVuY3Rpb24oLi4uZSl7cmV0dXJuKHQsbj17fSk9PntsZXQgcj1uLmFsaWFzZXM7dmFyIGk7cnx8KG4uaW5oZXJpdHMmJihyPW51bGw9PShpPVBbbi5pbmhlcml0c10uYWxpYXNlcyk/dm9pZCAwOmkuc2xpY2UoKSksbnVsbCE9cnx8KHI9W10pLG4uYWxpYXNlcz1yKTtjb25zdCBhPWUuZmlsdGVyKGU9PiFyLmluY2x1ZGVzKGUpKTtyLnVuc2hpZnQoLi4uYSkseCh0LG4pfX0sdC50eXBlSXM9eSx0LnZhbGlkYXRlPWYsdC52YWxpZGF0ZUFycmF5T2ZUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiBmKGgoZSkpfSx0LnZhbGlkYXRlT3B0aW9uYWw9ZnVuY3Rpb24oZSl7cmV0dXJue3ZhbGlkYXRlOmUsb3B0aW9uYWw6ITB9fSx0LnZhbGlkYXRlT3B0aW9uYWxUeXBlPWZ1bmN0aW9uKGUpe3JldHVybnt2YWxpZGF0ZTp5KGUpLG9wdGlvbmFsOiEwfX0sdC52YWxpZGF0ZVR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGYoeShlKSl9O3ZhciByPW4oIjE3N2IiKSxpPW4oIjYyZWEiKTtjb25zdCBhPXt9O3QuVklTSVRPUl9LRVlTPWE7Y29uc3Qgbz17fTt0LkFMSUFTX0tFWVM9bztjb25zdCBzPXt9O3QuRkxJUFBFRF9BTElBU19LRVlTPXM7Y29uc3QgbD17fTt0Lk5PREVfRklFTERTPWw7Y29uc3QgdT17fTt0LkJVSUxERVJfS0VZUz11O2NvbnN0IHA9e307dC5ERVBSRUNBVEVEX0tFWVM9cDtjb25zdCBjPXt9O2Z1bmN0aW9uIGQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5IjpudWxsPT09ZT8ibnVsbCI6dHlwZW9mIGV9ZnVuY3Rpb24gZihlKXtyZXR1cm57dmFsaWRhdGU6ZX19ZnVuY3Rpb24geShlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/YihlKTpiKC4uLmUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIEUoUygiYXJyYXkiKSxUKGUpKX1mdW5jdGlvbiBoKGUpe3JldHVybiBtKHkoZSkpfWZ1bmN0aW9uIFQoZSl7ZnVuY3Rpb24gdCh0LG4scil7aWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKyl7Y29uc3Qgbz1gJHtufVske2F9XWAscz1yW2FdO2UodCxvLHMpLE9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLEJBU0VfVVJMOiIifSkuQkFCRUxfVFlQRVNfOF9CUkVBS0lORyYmKDAsaS52YWxpZGF0ZUNoaWxkKSh0LG8scyl9fXJldHVybiB0LmVhY2g9ZSx0fWZ1bmN0aW9uIGIoLi4uZSl7ZnVuY3Rpb24gdCh0LG4sYSl7Zm9yKGNvbnN0IG8gb2YgZSlpZigoMCxyLmRlZmF1bHQpKG8sYSkpcmV0dXJuIHZvaWQoMCxpLnZhbGlkYXRlQ2hpbGQpKHQsbixhKTt0aHJvdyBuZXcgVHlwZUVycm9yKGBQcm9wZXJ0eSAke259IG9mICR7dC50eXBlfSBleHBlY3RlZCBub2RlIHRvIGJlIG9mIGEgdHlwZSAke0pTT04uc3RyaW5naWZ5KGUpfSBidXQgaW5zdGVhZCBnb3QgJHtKU09OLnN0cmluZ2lmeShudWxsPT1hP3ZvaWQgMDphLnR5cGUpfWApfXJldHVybiB0Lm9uZU9mTm9kZVR5cGVzPWUsdH1mdW5jdGlvbiBTKGUpe2Z1bmN0aW9uIHQodCxuLHIpe2lmKCEoZChyKT09PWUpKXRocm93IG5ldyBUeXBlRXJyb3IoYFByb3BlcnR5ICR7bn0gZXhwZWN0ZWQgdHlwZSBvZiAke2V9IGJ1dCBnb3QgJHtkKHIpfWApfXJldHVybiB0LnR5cGU9ZSx0fWZ1bmN0aW9uIEUoLi4uZSl7ZnVuY3Rpb24gdCguLi50KXtmb3IoY29uc3QgbiBvZiBlKW4oLi4udCl9aWYodC5jaGFpbk9mPWUsZS5sZW5ndGg+PTImJiJ0eXBlImluIGVbMF0mJiJhcnJheSI9PT1lWzBdLnR5cGUmJiEoImVhY2giaW4gZVsxXSkpdGhyb3cgbmV3IEVycm9yKCdBbiBhc3NlcnRWYWx1ZVR5cGUoImFycmF5IikgdmFsaWRhdG9yIGNhbiBvbmx5IGJlIGZvbGxvd2VkIGJ5IGFuIGFzc2VydEVhY2goLi4uKSB2YWxpZGF0b3IuJyk7cmV0dXJuIHR9dC5OT0RFX1BBUkVOVF9WQUxJREFUSU9OUz1jO2NvbnN0IGc9WyJhbGlhc2VzIiwiYnVpbGRlciIsImRlcHJlY2F0ZWRBbGlhcyIsImZpZWxkcyIsImluaGVyaXRzIiwidmlzaXRvciIsInZhbGlkYXRlIl0sdj1bImRlZmF1bHQiLCJvcHRpb25hbCIsInZhbGlkYXRlIl0sUD17fTtmdW5jdGlvbiB4KGUsdD17fSl7Y29uc3Qgbj10LmluaGVyaXRzJiZQW3QuaW5oZXJpdHNdfHx7fTtsZXQgcj10LmZpZWxkcztpZighciYmKHI9e30sbi5maWVsZHMpKXtjb25zdCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4uZmllbGRzKTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPW4uZmllbGRzW3RdLGk9ZS5kZWZhdWx0O2lmKEFycmF5LmlzQXJyYXkoaSk/aS5sZW5ndGg+MDppJiYib2JqZWN0Ij09dHlwZW9mIGkpdGhyb3cgbmV3IEVycm9yKCJmaWVsZCBkZWZhdWx0cyBjYW4gb25seSBiZSBwcmltaXRpdmVzIG9yIGVtcHR5IGFycmF5cyBjdXJyZW50bHkiKTtyW3RdPXtkZWZhdWx0OkFycmF5LmlzQXJyYXkoaSk/W106aSxvcHRpb25hbDplLm9wdGlvbmFsLHZhbGlkYXRlOmUudmFsaWRhdGV9fX1jb25zdCBpPXQudmlzaXRvcnx8bi52aXNpdG9yfHxbXSxmPXQuYWxpYXNlc3x8bi5hbGlhc2VzfHxbXSx5PXQuYnVpbGRlcnx8bi5idWlsZGVyfHx0LnZpc2l0b3J8fFtdO2Zvcihjb25zdCBuIG9mIE9iamVjdC5rZXlzKHQpKWlmKC0xPT09Zy5pbmRleE9mKG4pKXRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9wdGlvbiAiJHtufSIgb24gJHtlfWApO3QuZGVwcmVjYXRlZEFsaWFzJiYocFt0LmRlcHJlY2F0ZWRBbGlhc109ZSk7Zm9yKGNvbnN0IGUgb2YgaS5jb25jYXQoeSkpcltlXT1yW2VdfHx7fTtmb3IoY29uc3QgdCBvZiBPYmplY3Qua2V5cyhyKSl7Y29uc3Qgbj1yW3RdO3ZvaWQgMCE9PW4uZGVmYXVsdCYmLTE9PT15LmluZGV4T2YodCkmJihuLm9wdGlvbmFsPSEwKSx2b2lkIDA9PT1uLmRlZmF1bHQ/bi5kZWZhdWx0PW51bGw6bi52YWxpZGF0ZXx8bnVsbD09bi5kZWZhdWx0fHwobi52YWxpZGF0ZT1TKGQobi5kZWZhdWx0KSkpO2Zvcihjb25zdCByIG9mIE9iamVjdC5rZXlzKG4pKWlmKC0xPT09di5pbmRleE9mKHIpKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBmaWVsZCBrZXkgIiR7cn0iIG9uICR7ZX0uJHt0fWApfWFbZV09dC52aXNpdG9yPWksdVtlXT10LmJ1aWxkZXI9eSxsW2VdPXQuZmllbGRzPXIsb1tlXT10LmFsaWFzZXM9ZixmLmZvckVhY2godD0+e3NbdF09c1t0XXx8W10sc1t0XS5wdXNoKGUpfSksdC52YWxpZGF0ZSYmKGNbZV09dC52YWxpZGF0ZSksUFtlXT10fX0sIjU3ZmEiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQpe2NvbnN0IG49ZS5zcGxpdCgiLiIpO3JldHVybiBlPT4oMCxyLmRlZmF1bHQpKGUsbix0KX07dmFyIHI9bigiZmUwZCIpfSwiNTliZSI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DbGFzc0V4cHJlc3Npb249dC5DbGFzc0RlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7dGhpcy5mb3JtYXQuZGVjb3JhdG9yc0JlZm9yZUV4cG9ydCYmKGkodCl8fGEodCkpfHx0aGlzLnByaW50Sm9pbihlLmRlY29yYXRvcnMsZSksZS5kZWNsYXJlJiYodGhpcy53b3JkKCJkZWNsYXJlIiksdGhpcy5zcGFjZSgpKSxlLmFic3RyYWN0JiYodGhpcy53b3JkKCJhYnN0cmFjdCIpLHRoaXMuc3BhY2UoKSksdGhpcy53b3JkKCJjbGFzcyIpLGUuaWQmJih0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLmlkLGUpKSx0aGlzLnByaW50KGUudHlwZVBhcmFtZXRlcnMsZSksZS5zdXBlckNsYXNzJiYodGhpcy5zcGFjZSgpLHRoaXMud29yZCgiZXh0ZW5kcyIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuc3VwZXJDbGFzcyxlKSx0aGlzLnByaW50KGUuc3VwZXJUeXBlUGFyYW1ldGVycyxlKSksZS5pbXBsZW1lbnRzJiYodGhpcy5zcGFjZSgpLHRoaXMud29yZCgiaW1wbGVtZW50cyIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50TGlzdChlLmltcGxlbWVudHMsZSkpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuYm9keSxlKX0sdC5DbGFzc0JvZHk9ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigieyIpLHRoaXMucHJpbnRJbm5lckNvbW1lbnRzKGUpLDA9PT1lLmJvZHkubGVuZ3RoP3RoaXMudG9rZW4oIn0iKToodGhpcy5uZXdsaW5lKCksdGhpcy5pbmRlbnQoKSx0aGlzLnByaW50U2VxdWVuY2UoZS5ib2R5LGUpLHRoaXMuZGVkZW50KCksdGhpcy5lbmRzV2l0aCgxMCl8fHRoaXMubmV3bGluZSgpLHRoaXMucmlnaHRCcmFjZSgpKX0sdC5DbGFzc1Byb3BlcnR5PWZ1bmN0aW9uKGUpe3RoaXMucHJpbnRKb2luKGUuZGVjb3JhdG9ycyxlKSx0aGlzLnNvdXJjZSgiZW5kIixlLmtleS5sb2MpLHRoaXMudHNQcmludENsYXNzTWVtYmVyTW9kaWZpZXJzKGUsITApLGUuY29tcHV0ZWQ/KHRoaXMudG9rZW4oIlsiKSx0aGlzLnByaW50KGUua2V5LGUpLHRoaXMudG9rZW4oIl0iKSk6KHRoaXMuX3ZhcmlhbmNlKGUpLHRoaXMucHJpbnQoZS5rZXksZSkpLGUub3B0aW9uYWwmJnRoaXMudG9rZW4oIj8iKSxlLmRlZmluaXRlJiZ0aGlzLnRva2VuKCIhIiksdGhpcy5wcmludChlLnR5cGVBbm5vdGF0aW9uLGUpLGUudmFsdWUmJih0aGlzLnNwYWNlKCksdGhpcy50b2tlbigiPSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUudmFsdWUsZSkpLHRoaXMuc2VtaWNvbG9uKCl9LHQuQ2xhc3NQcml2YXRlUHJvcGVydHk9ZnVuY3Rpb24oZSl7dGhpcy5wcmludEpvaW4oZS5kZWNvcmF0b3JzLGUpLGUuc3RhdGljJiYodGhpcy53b3JkKCJzdGF0aWMiKSx0aGlzLnNwYWNlKCkpLHRoaXMucHJpbnQoZS5rZXksZSksdGhpcy5wcmludChlLnR5cGVBbm5vdGF0aW9uLGUpLGUudmFsdWUmJih0aGlzLnNwYWNlKCksdGhpcy50b2tlbigiPSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUudmFsdWUsZSkpLHRoaXMuc2VtaWNvbG9uKCl9LHQuQ2xhc3NNZXRob2Q9ZnVuY3Rpb24oZSl7dGhpcy5fY2xhc3NNZXRob2RIZWFkKGUpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuYm9keSxlKX0sdC5DbGFzc1ByaXZhdGVNZXRob2Q9ZnVuY3Rpb24oZSl7dGhpcy5fY2xhc3NNZXRob2RIZWFkKGUpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuYm9keSxlKX0sdC5fY2xhc3NNZXRob2RIZWFkPWZ1bmN0aW9uKGUpe3RoaXMucHJpbnRKb2luKGUuZGVjb3JhdG9ycyxlKSx0aGlzLnNvdXJjZSgiZW5kIixlLmtleS5sb2MpLHRoaXMudHNQcmludENsYXNzTWVtYmVyTW9kaWZpZXJzKGUsITEpLHRoaXMuX21ldGhvZEhlYWQoZSl9LHQuU3RhdGljQmxvY2s9ZnVuY3Rpb24oZSl7dGhpcy53b3JkKCJzdGF0aWMiKSx0aGlzLnNwYWNlKCksdGhpcy50b2tlbigieyIpLDA9PT1lLmJvZHkubGVuZ3RoP3RoaXMudG9rZW4oIn0iKToodGhpcy5uZXdsaW5lKCksdGhpcy5wcmludFNlcXVlbmNlKGUuYm9keSxlLHtpbmRlbnQ6ITB9KSx0aGlzLnJpZ2h0QnJhY2UoKSl9O3ZhciByPW4oIjI1MmEiKTtjb25zdHtpc0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbjppLGlzRXhwb3J0TmFtZWREZWNsYXJhdGlvbjphfT1yfSwiNWE1YyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3JldHVybiJldmFsIiE9PShlPSgwLHIuZGVmYXVsdCkoZSkpJiYiYXJndW1lbnRzIiE9PWV8fChlPSJfIitlKSxlfTt2YXIgcj1uKCIyN2Y2Iil9LCI1ZmFjIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0PXt9KXtjb25zdCBuPXQucHJlc2VydmVDb21tZW50cz9pOmE7Zm9yKGNvbnN0IHQgb2YgbiludWxsIT1lW3RdJiYoZVt0XT12b2lkIDApO2Zvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKGUpKSJfIj09PXRbMF0mJm51bGwhPWVbdF0mJihlW3RdPXZvaWQgMCk7Y29uc3Qgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2Zvcihjb25zdCB0IG9mIHIpZVt0XT1udWxsfTt2YXIgcj1uKCI5MDQ2Iik7Y29uc3QgaT1bInRva2VucyIsInN0YXJ0IiwiZW5kIiwibG9jIiwicmF3IiwicmF3VmFsdWUiXSxhPVsuLi5yLkNPTU1FTlRfS0VZUywiY29tbWVudHMiLC4uLmldfSw2MDgzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQsbil7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PXtlbnRlcjp0fSk7Y29uc3R7ZW50ZXI6cixleGl0OmF9PXQ7aShlLHIsYSxuLFtdKX07dmFyIHI9bigiYjk3OCIpO2Z1bmN0aW9uIGkoZSx0LG4sYSxvKXtjb25zdCBzPXIuVklTSVRPUl9LRVlTW2UudHlwZV07aWYocyl7dCYmdChlLG8sYSk7Zm9yKGNvbnN0IHIgb2Ygcyl7Y29uc3Qgcz1lW3JdO2lmKEFycmF5LmlzQXJyYXkocykpZm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKyspe2NvbnN0IHU9c1tsXTt1JiYoby5wdXNoKHtub2RlOmUsa2V5OnIsaW5kZXg6bH0pLGkodSx0LG4sYSxvKSxvLnBvcCgpKX1lbHNlIHMmJihvLnB1c2goe25vZGU6ZSxrZXk6cn0pLGkocyx0LG4sYSxvKSxvLnBvcCgpKX1uJiZuKGUsbyxhKX19fSw2MTAwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQsbixpKXtyZXR1cm4oMCxyLmRlZmF1bHQpKGUsdCxbe3R5cGU6aT8iQ29tbWVudExpbmUiOiJDb21tZW50QmxvY2siLHZhbHVlOm59XSl9O3ZhciByPW4oIjQ3MDIiKX0sIjYyOWYiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtjb25zdCB0PSgwLGkuZGVmYXVsdCkoZSk7cmV0dXJuIDE9PT10Lmxlbmd0aD90WzBdOigwLHIudW5pb25UeXBlQW5ub3RhdGlvbikodCl9O3ZhciByPW4oImViNWIiKSxpPW4oImVhZDYiKX0sIjYyYTAiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtjb25zdCB0PWUubWFwKGU9PigwLGEuaXNUU1R5cGVBbm5vdGF0aW9uKShlKT9lLnR5cGVBbm5vdGF0aW9uOmUpLG49KDAsaS5kZWZhdWx0KSh0KTtyZXR1cm4gMT09PW4ubGVuZ3RoP25bMF06KDAsci50c1VuaW9uVHlwZSkobil9O3ZhciByPW4oImViNWIiKSxpPW4oIjFhZmYiKSxhPW4oImM0ODUiKX0sIjYyZWEiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQsbil7aWYoIWUpcmV0dXJuO2NvbnN0IG89ci5OT0RFX0ZJRUxEU1tlLnR5cGVdO2lmKCFvKXJldHVybjtjb25zdCBzPW9bdF07aShlLHQsbixzKSxhKGUsdCxuKX0sdC52YWxpZGF0ZUNoaWxkPWEsdC52YWxpZGF0ZUZpZWxkPWk7dmFyIHI9bigiYjk3OCIpO2Z1bmN0aW9uIGkoZSx0LG4scil7bnVsbCE9ciYmci52YWxpZGF0ZSYmKHIub3B0aW9uYWwmJm51bGw9PW58fHIudmFsaWRhdGUoZSx0LG4pKX1mdW5jdGlvbiBhKGUsdCxuKXtpZihudWxsPT1uKXJldHVybjtjb25zdCBpPXIuTk9ERV9QQVJFTlRfVkFMSURBVElPTlNbbi50eXBlXTtpJiZpKGUsdCxuKX19LDYzMDk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uIGUodCxuKXtpZigib2JqZWN0IiE9dHlwZW9mIHR8fCJvYmplY3QiIT10eXBlb2Ygbnx8bnVsbD09dHx8bnVsbD09bilyZXR1cm4gdD09PW47aWYodC50eXBlIT09bi50eXBlKXJldHVybiExO2NvbnN0IGk9T2JqZWN0LmtleXMoci5OT0RFX0ZJRUxEU1t0LnR5cGVdfHx0LnR5cGUpLGE9ci5WSVNJVE9SX0tFWVNbdC50eXBlXTtmb3IoY29uc3QgciBvZiBpKXtjb25zdCBpPXRbcl0sbz1uW3JdO2lmKHR5cGVvZiBpIT10eXBlb2YgbylyZXR1cm4hMTtpZihudWxsIT1pfHxudWxsIT1vKXtpZihudWxsPT1pfHxudWxsPT1vKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoaSkpe2lmKCFBcnJheS5pc0FycmF5KG8pKXJldHVybiExO2lmKGkubGVuZ3RoIT09by5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0KyspaWYoIWUoaVt0XSxvW3RdKSlyZXR1cm4hMX1lbHNlIGlmKCJvYmplY3QiIT10eXBlb2YgaXx8bnVsbCE9YSYmYS5pbmNsdWRlcyhyKSl7aWYoIWUoaSxvKSlyZXR1cm4hMX1lbHNlIGZvcihjb25zdCBlIG9mIE9iamVjdC5rZXlzKGkpKWlmKGlbZV0hPT1vW2VdKXJldHVybiExfX1yZXR1cm4hMH07dmFyIHI9bigiYjk3OCIpfSwiNjNiYiI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCI1N2RlIiksaT1uKCJmMjhkIiksYT1uKCIxNzdiIik7Y29uc3Qgbz0oMCxyLmRlZmluZUFsaWFzZWRUeXBlKSgiVHlwZVNjcmlwdCIpLHM9KDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksbD0oKT0+KHtyZXR1cm5UeXBlOnt2YWxpZGF0ZTooMCxyLmFzc2VydE5vZGVUeXBlKSgiVFNUeXBlQW5ub3RhdGlvbiIsIk5vb3AiKSxvcHRpb25hbDohMH0sdHlwZVBhcmFtZXRlcnM6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJUU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIsIk5vb3AiKSxvcHRpb25hbDohMH19KTtvKCJUU1BhcmFtZXRlclByb3BlcnR5Iix7YWxpYXNlczpbIkxWYWwiXSx2aXNpdG9yOlsicGFyYW1ldGVyIl0sZmllbGRzOnthY2Nlc3NpYmlsaXR5Ont2YWxpZGF0ZTooMCxyLmFzc2VydE9uZU9mKSgicHVibGljIiwicHJpdmF0ZSIsInByb3RlY3RlZCIpLG9wdGlvbmFsOiEwfSxyZWFkb25seTp7dmFsaWRhdGU6KDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksb3B0aW9uYWw6ITB9LHBhcmFtZXRlcjp7dmFsaWRhdGU6KDAsci5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiLCJBc3NpZ25tZW50UGF0dGVybiIpfSxvdmVycmlkZTp7dmFsaWRhdGU6KDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksb3B0aW9uYWw6ITB9LGRlY29yYXRvcnM6e3ZhbGlkYXRlOigwLHIuY2hhaW4pKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxyLmFzc2VydEVhY2gpKCgwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJEZWNvcmF0b3IiKSkpLG9wdGlvbmFsOiEwfX19KSxvKCJUU0RlY2xhcmVGdW5jdGlvbiIse2FsaWFzZXM6WyJTdGF0ZW1lbnQiLCJEZWNsYXJhdGlvbiJdLHZpc2l0b3I6WyJpZCIsInR5cGVQYXJhbWV0ZXJzIiwicGFyYW1zIiwicmV0dXJuVHlwZSJdLGZpZWxkczpPYmplY3QuYXNzaWduKHt9LCgwLGkuZnVuY3Rpb25EZWNsYXJhdGlvbkNvbW1vbikoKSxsKCkpfSksbygiVFNEZWNsYXJlTWV0aG9kIix7dmlzaXRvcjpbImRlY29yYXRvcnMiLCJrZXkiLCJ0eXBlUGFyYW1ldGVycyIsInBhcmFtcyIsInJldHVyblR5cGUiXSxmaWVsZHM6T2JqZWN0LmFzc2lnbih7fSwoMCxpLmNsYXNzTWV0aG9kT3JEZWNsYXJlTWV0aG9kQ29tbW9uKSgpLGwoKSl9KSxvKCJUU1F1YWxpZmllZE5hbWUiLHthbGlhc2VzOlsiVFNFbnRpdHlOYW1lIl0sdmlzaXRvcjpbImxlZnQiLCJyaWdodCJdLGZpZWxkczp7bGVmdDooMCxyLnZhbGlkYXRlVHlwZSkoIlRTRW50aXR5TmFtZSIpLHJpZ2h0OigwLHIudmFsaWRhdGVUeXBlKSgiSWRlbnRpZmllciIpfX0pO2NvbnN0IHU9KCk9Pih7dHlwZVBhcmFtZXRlcnM6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIlRTVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIikscGFyYW1ldGVyczooMCxyLnZhbGlkYXRlQXJyYXlPZlR5cGUpKFsiSWRlbnRpZmllciIsIlJlc3RFbGVtZW50Il0pLHR5cGVBbm5vdGF0aW9uOigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJUU1R5cGVBbm5vdGF0aW9uIil9KSxwPXthbGlhc2VzOlsiVFNUeXBlRWxlbWVudCJdLHZpc2l0b3I6WyJ0eXBlUGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJ0eXBlQW5ub3RhdGlvbiJdLGZpZWxkczp1KCl9O28oIlRTQ2FsbFNpZ25hdHVyZURlY2xhcmF0aW9uIixwKSxvKCJUU0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9uIixwKTtjb25zdCBjPSgpPT4oe2tleTooMCxyLnZhbGlkYXRlVHlwZSkoIkV4cHJlc3Npb24iKSxjb21wdXRlZDp7ZGVmYXVsdDohMX0sb3B0aW9uYWw6KDAsci52YWxpZGF0ZU9wdGlvbmFsKShzKX0pO28oIlRTUHJvcGVydHlTaWduYXR1cmUiLHthbGlhc2VzOlsiVFNUeXBlRWxlbWVudCJdLHZpc2l0b3I6WyJrZXkiLCJ0eXBlQW5ub3RhdGlvbiIsImluaXRpYWxpemVyIl0sZmllbGRzOk9iamVjdC5hc3NpZ24oe30sYygpLHtyZWFkb25seTooMCxyLnZhbGlkYXRlT3B0aW9uYWwpKHMpLHR5cGVBbm5vdGF0aW9uOigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJUU1R5cGVBbm5vdGF0aW9uIiksaW5pdGlhbGl6ZXI6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIkV4cHJlc3Npb24iKSxraW5kOnt2YWxpZGF0ZTooMCxyLmFzc2VydE9uZU9mKSgiZ2V0Iiwic2V0Iil9fSl9KSxvKCJUU01ldGhvZFNpZ25hdHVyZSIse2FsaWFzZXM6WyJUU1R5cGVFbGVtZW50Il0sdmlzaXRvcjpbImtleSIsInR5cGVQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsInR5cGVBbm5vdGF0aW9uIl0sZmllbGRzOk9iamVjdC5hc3NpZ24oe30sdSgpLGMoKSx7a2luZDp7dmFsaWRhdGU6KDAsci5hc3NlcnRPbmVPZikoIm1ldGhvZCIsImdldCIsInNldCIpfX0pfSksbygiVFNJbmRleFNpZ25hdHVyZSIse2FsaWFzZXM6WyJUU1R5cGVFbGVtZW50Il0sdmlzaXRvcjpbInBhcmFtZXRlcnMiLCJ0eXBlQW5ub3RhdGlvbiJdLGZpZWxkczp7cmVhZG9ubHk6KDAsci52YWxpZGF0ZU9wdGlvbmFsKShzKSxzdGF0aWM6KDAsci52YWxpZGF0ZU9wdGlvbmFsKShzKSxwYXJhbWV0ZXJzOigwLHIudmFsaWRhdGVBcnJheU9mVHlwZSkoIklkZW50aWZpZXIiKSx0eXBlQW5ub3RhdGlvbjooMCxyLnZhbGlkYXRlT3B0aW9uYWxUeXBlKSgiVFNUeXBlQW5ub3RhdGlvbiIpfX0pO2NvbnN0IGQ9WyJUU0FueUtleXdvcmQiLCJUU0Jvb2xlYW5LZXl3b3JkIiwiVFNCaWdJbnRLZXl3b3JkIiwiVFNJbnRyaW5zaWNLZXl3b3JkIiwiVFNOZXZlcktleXdvcmQiLCJUU051bGxLZXl3b3JkIiwiVFNOdW1iZXJLZXl3b3JkIiwiVFNPYmplY3RLZXl3b3JkIiwiVFNTdHJpbmdLZXl3b3JkIiwiVFNTeW1ib2xLZXl3b3JkIiwiVFNVbmRlZmluZWRLZXl3b3JkIiwiVFNVbmtub3duS2V5d29yZCIsIlRTVm9pZEtleXdvcmQiXTtmb3IoY29uc3QgZSBvZiBkKW8oZSx7YWxpYXNlczpbIlRTVHlwZSIsIlRTQmFzZVR5cGUiXSx2aXNpdG9yOltdLGZpZWxkczp7fX0pO28oIlRTVGhpc1R5cGUiLHthbGlhc2VzOlsiVFNUeXBlIiwiVFNCYXNlVHlwZSJdLHZpc2l0b3I6W10sZmllbGRzOnt9fSk7Y29uc3QgZj17YWxpYXNlczpbIlRTVHlwZSJdLHZpc2l0b3I6WyJ0eXBlUGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJ0eXBlQW5ub3RhdGlvbiJdfTtvKCJUU0Z1bmN0aW9uVHlwZSIsT2JqZWN0LmFzc2lnbih7fSxmLHtmaWVsZHM6dSgpfSkpLG8oIlRTQ29uc3RydWN0b3JUeXBlIixPYmplY3QuYXNzaWduKHt9LGYse2ZpZWxkczpPYmplY3QuYXNzaWduKHt9LHUoKSx7YWJzdHJhY3Q6KDAsci52YWxpZGF0ZU9wdGlvbmFsKShzKX0pfSkpLG8oIlRTVHlwZVJlZmVyZW5jZSIse2FsaWFzZXM6WyJUU1R5cGUiXSx2aXNpdG9yOlsidHlwZU5hbWUiLCJ0eXBlUGFyYW1ldGVycyJdLGZpZWxkczp7dHlwZU5hbWU6KDAsci52YWxpZGF0ZVR5cGUpKCJUU0VudGl0eU5hbWUiKSx0eXBlUGFyYW1ldGVyczooMCxyLnZhbGlkYXRlT3B0aW9uYWxUeXBlKSgiVFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpfX0pLG8oIlRTVHlwZVByZWRpY2F0ZSIse2FsaWFzZXM6WyJUU1R5cGUiXSx2aXNpdG9yOlsicGFyYW1ldGVyTmFtZSIsInR5cGVBbm5vdGF0aW9uIl0sYnVpbGRlcjpbInBhcmFtZXRlck5hbWUiLCJ0eXBlQW5ub3RhdGlvbiIsImFzc2VydHMiXSxmaWVsZHM6e3BhcmFtZXRlck5hbWU6KDAsci52YWxpZGF0ZVR5cGUpKFsiSWRlbnRpZmllciIsIlRTVGhpc1R5cGUiXSksdHlwZUFubm90YXRpb246KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIlRTVHlwZUFubm90YXRpb24iKSxhc3NlcnRzOigwLHIudmFsaWRhdGVPcHRpb25hbCkocyl9fSksbygiVFNUeXBlUXVlcnkiLHthbGlhc2VzOlsiVFNUeXBlIl0sdmlzaXRvcjpbImV4cHJOYW1lIiwidHlwZVBhcmFtZXRlcnMiXSxmaWVsZHM6e2V4cHJOYW1lOigwLHIudmFsaWRhdGVUeXBlKShbIlRTRW50aXR5TmFtZSIsIlRTSW1wb3J0VHlwZSJdKSx0eXBlUGFyYW1ldGVyczooMCxyLnZhbGlkYXRlT3B0aW9uYWxUeXBlKSgiVFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpfX0pLG8oIlRTVHlwZUxpdGVyYWwiLHthbGlhc2VzOlsiVFNUeXBlIl0sdmlzaXRvcjpbIm1lbWJlcnMiXSxmaWVsZHM6e21lbWJlcnM6KDAsci52YWxpZGF0ZUFycmF5T2ZUeXBlKSgiVFNUeXBlRWxlbWVudCIpfX0pLG8oIlRTQXJyYXlUeXBlIix7YWxpYXNlczpbIlRTVHlwZSJdLHZpc2l0b3I6WyJlbGVtZW50VHlwZSJdLGZpZWxkczp7ZWxlbWVudFR5cGU6KDAsci52YWxpZGF0ZVR5cGUpKCJUU1R5cGUiKX19KSxvKCJUU1R1cGxlVHlwZSIse2FsaWFzZXM6WyJUU1R5cGUiXSx2aXNpdG9yOlsiZWxlbWVudFR5cGVzIl0sZmllbGRzOntlbGVtZW50VHlwZXM6KDAsci52YWxpZGF0ZUFycmF5T2ZUeXBlKShbIlRTVHlwZSIsIlRTTmFtZWRUdXBsZU1lbWJlciJdKX19KSxvKCJUU09wdGlvbmFsVHlwZSIse2FsaWFzZXM6WyJUU1R5cGUiXSx2aXNpdG9yOlsidHlwZUFubm90YXRpb24iXSxmaWVsZHM6e3R5cGVBbm5vdGF0aW9uOigwLHIudmFsaWRhdGVUeXBlKSgiVFNUeXBlIil9fSksbygiVFNSZXN0VHlwZSIse2FsaWFzZXM6WyJUU1R5cGUiXSx2aXNpdG9yOlsidHlwZUFubm90YXRpb24iXSxmaWVsZHM6e3R5cGVBbm5vdGF0aW9uOigwLHIudmFsaWRhdGVUeXBlKSgiVFNUeXBlIil9fSksbygiVFNOYW1lZFR1cGxlTWVtYmVyIix7dmlzaXRvcjpbImxhYmVsIiwiZWxlbWVudFR5cGUiXSxidWlsZGVyOlsibGFiZWwiLCJlbGVtZW50VHlwZSIsIm9wdGlvbmFsIl0sZmllbGRzOntsYWJlbDooMCxyLnZhbGlkYXRlVHlwZSkoIklkZW50aWZpZXIiKSxvcHRpb25hbDp7dmFsaWRhdGU6cyxkZWZhdWx0OiExfSxlbGVtZW50VHlwZTooMCxyLnZhbGlkYXRlVHlwZSkoIlRTVHlwZSIpfX0pO2NvbnN0IHk9e2FsaWFzZXM6WyJUU1R5cGUiXSx2aXNpdG9yOlsidHlwZXMiXSxmaWVsZHM6e3R5cGVzOigwLHIudmFsaWRhdGVBcnJheU9mVHlwZSkoIlRTVHlwZSIpfX07bygiVFNVbmlvblR5cGUiLHkpLG8oIlRTSW50ZXJzZWN0aW9uVHlwZSIseSksbygiVFNDb25kaXRpb25hbFR5cGUiLHthbGlhc2VzOlsiVFNUeXBlIl0sdmlzaXRvcjpbImNoZWNrVHlwZSIsImV4dGVuZHNUeXBlIiwidHJ1ZVR5cGUiLCJmYWxzZVR5cGUiXSxmaWVsZHM6e2NoZWNrVHlwZTooMCxyLnZhbGlkYXRlVHlwZSkoIlRTVHlwZSIpLGV4dGVuZHNUeXBlOigwLHIudmFsaWRhdGVUeXBlKSgiVFNUeXBlIiksdHJ1ZVR5cGU6KDAsci52YWxpZGF0ZVR5cGUpKCJUU1R5cGUiKSxmYWxzZVR5cGU6KDAsci52YWxpZGF0ZVR5cGUpKCJUU1R5cGUiKX19KSxvKCJUU0luZmVyVHlwZSIse2FsaWFzZXM6WyJUU1R5cGUiXSx2aXNpdG9yOlsidHlwZVBhcmFtZXRlciJdLGZpZWxkczp7dHlwZVBhcmFtZXRlcjooMCxyLnZhbGlkYXRlVHlwZSkoIlRTVHlwZVBhcmFtZXRlciIpfX0pLG8oIlRTUGFyZW50aGVzaXplZFR5cGUiLHthbGlhc2VzOlsiVFNUeXBlIl0sdmlzaXRvcjpbInR5cGVBbm5vdGF0aW9uIl0sZmllbGRzOnt0eXBlQW5ub3RhdGlvbjooMCxyLnZhbGlkYXRlVHlwZSkoIlRTVHlwZSIpfX0pLG8oIlRTVHlwZU9wZXJhdG9yIix7YWxpYXNlczpbIlRTVHlwZSJdLHZpc2l0b3I6WyJ0eXBlQW5ub3RhdGlvbiJdLGZpZWxkczp7b3BlcmF0b3I6KDAsci52YWxpZGF0ZSkoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJzdHJpbmciKSksdHlwZUFubm90YXRpb246KDAsci52YWxpZGF0ZVR5cGUpKCJUU1R5cGUiKX19KSxvKCJUU0luZGV4ZWRBY2Nlc3NUeXBlIix7YWxpYXNlczpbIlRTVHlwZSJdLHZpc2l0b3I6WyJvYmplY3RUeXBlIiwiaW5kZXhUeXBlIl0sZmllbGRzOntvYmplY3RUeXBlOigwLHIudmFsaWRhdGVUeXBlKSgiVFNUeXBlIiksaW5kZXhUeXBlOigwLHIudmFsaWRhdGVUeXBlKSgiVFNUeXBlIil9fSksbygiVFNNYXBwZWRUeXBlIix7YWxpYXNlczpbIlRTVHlwZSJdLHZpc2l0b3I6WyJ0eXBlUGFyYW1ldGVyIiwidHlwZUFubm90YXRpb24iLCJuYW1lVHlwZSJdLGZpZWxkczp7cmVhZG9ubHk6KDAsci52YWxpZGF0ZU9wdGlvbmFsKSgoMCxyLmFzc2VydE9uZU9mKSghMCwhMSwiKyIsIi0iKSksdHlwZVBhcmFtZXRlcjooMCxyLnZhbGlkYXRlVHlwZSkoIlRTVHlwZVBhcmFtZXRlciIpLG9wdGlvbmFsOigwLHIudmFsaWRhdGVPcHRpb25hbCkoKDAsci5hc3NlcnRPbmVPZikoITAsITEsIisiLCItIikpLHR5cGVBbm5vdGF0aW9uOigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJUU1R5cGUiKSxuYW1lVHlwZTooMCxyLnZhbGlkYXRlT3B0aW9uYWxUeXBlKSgiVFNUeXBlIil9fSksbygiVFNMaXRlcmFsVHlwZSIse2FsaWFzZXM6WyJUU1R5cGUiLCJUU0Jhc2VUeXBlIl0sdmlzaXRvcjpbImxpdGVyYWwiXSxmaWVsZHM6e2xpdGVyYWw6e3ZhbGlkYXRlOmZ1bmN0aW9uKCl7Y29uc3QgZT0oMCxyLmFzc2VydE5vZGVUeXBlKSgiTnVtZXJpY0xpdGVyYWwiLCJCaWdJbnRMaXRlcmFsIiksdD0oMCxyLmFzc2VydE9uZU9mKSgiLSIpLG49KDAsci5hc3NlcnROb2RlVHlwZSkoIk51bWVyaWNMaXRlcmFsIiwiU3RyaW5nTGl0ZXJhbCIsIkJvb2xlYW5MaXRlcmFsIiwiQmlnSW50TGl0ZXJhbCIsIlRlbXBsYXRlTGl0ZXJhbCIpO2Z1bmN0aW9uIGkocixpLG8peygwLGEuZGVmYXVsdCkoIlVuYXJ5RXhwcmVzc2lvbiIsbyk/KHQobywib3BlcmF0b3IiLG8ub3BlcmF0b3IpLGUobywiYXJndW1lbnQiLG8uYXJndW1lbnQpKTpuKHIsaSxvKX1yZXR1cm4gaS5vbmVPZk5vZGVUeXBlcz1bIk51bWVyaWNMaXRlcmFsIiwiU3RyaW5nTGl0ZXJhbCIsIkJvb2xlYW5MaXRlcmFsIiwiQmlnSW50TGl0ZXJhbCIsIlRlbXBsYXRlTGl0ZXJhbCIsIlVuYXJ5RXhwcmVzc2lvbiJdLGl9KCl9fX0pLG8oIlRTRXhwcmVzc2lvbldpdGhUeXBlQXJndW1lbnRzIix7YWxpYXNlczpbIlRTVHlwZSJdLHZpc2l0b3I6WyJleHByZXNzaW9uIiwidHlwZVBhcmFtZXRlcnMiXSxmaWVsZHM6e2V4cHJlc3Npb246KDAsci52YWxpZGF0ZVR5cGUpKCJUU0VudGl0eU5hbWUiKSx0eXBlUGFyYW1ldGVyczooMCxyLnZhbGlkYXRlT3B0aW9uYWxUeXBlKSgiVFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpfX0pLG8oIlRTSW50ZXJmYWNlRGVjbGFyYXRpb24iLHthbGlhc2VzOlsiU3RhdGVtZW50IiwiRGVjbGFyYXRpb24iXSx2aXNpdG9yOlsiaWQiLCJ0eXBlUGFyYW1ldGVycyIsImV4dGVuZHMiLCJib2R5Il0sZmllbGRzOntkZWNsYXJlOigwLHIudmFsaWRhdGVPcHRpb25hbCkocyksaWQ6KDAsci52YWxpZGF0ZVR5cGUpKCJJZGVudGlmaWVyIiksdHlwZVBhcmFtZXRlcnM6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIlRTVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIiksZXh0ZW5kczooMCxyLnZhbGlkYXRlT3B0aW9uYWwpKCgwLHIuYXJyYXlPZlR5cGUpKCJUU0V4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cyIpKSxib2R5OigwLHIudmFsaWRhdGVUeXBlKSgiVFNJbnRlcmZhY2VCb2R5Iil9fSksbygiVFNJbnRlcmZhY2VCb2R5Iix7dmlzaXRvcjpbImJvZHkiXSxmaWVsZHM6e2JvZHk6KDAsci52YWxpZGF0ZUFycmF5T2ZUeXBlKSgiVFNUeXBlRWxlbWVudCIpfX0pLG8oIlRTVHlwZUFsaWFzRGVjbGFyYXRpb24iLHthbGlhc2VzOlsiU3RhdGVtZW50IiwiRGVjbGFyYXRpb24iXSx2aXNpdG9yOlsiaWQiLCJ0eXBlUGFyYW1ldGVycyIsInR5cGVBbm5vdGF0aW9uIl0sZmllbGRzOntkZWNsYXJlOigwLHIudmFsaWRhdGVPcHRpb25hbCkocyksaWQ6KDAsci52YWxpZGF0ZVR5cGUpKCJJZGVudGlmaWVyIiksdHlwZVBhcmFtZXRlcnM6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIlRTVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIiksdHlwZUFubm90YXRpb246KDAsci52YWxpZGF0ZVR5cGUpKCJUU1R5cGUiKX19KSxvKCJUU0luc3RhbnRpYXRpb25FeHByZXNzaW9uIix7YWxpYXNlczpbIkV4cHJlc3Npb24iXSx2aXNpdG9yOlsiZXhwcmVzc2lvbiIsInR5cGVQYXJhbWV0ZXJzIl0sZmllbGRzOntleHByZXNzaW9uOigwLHIudmFsaWRhdGVUeXBlKSgiRXhwcmVzc2lvbiIpLHR5cGVQYXJhbWV0ZXJzOigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJUU1R5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIil9fSk7Y29uc3QgbT17YWxpYXNlczpbIkV4cHJlc3Npb24iLCJMVmFsIiwiUGF0dGVybkxpa2UiXSx2aXNpdG9yOlsiZXhwcmVzc2lvbiIsInR5cGVBbm5vdGF0aW9uIl0sZmllbGRzOntleHByZXNzaW9uOigwLHIudmFsaWRhdGVUeXBlKSgiRXhwcmVzc2lvbiIpLHR5cGVBbm5vdGF0aW9uOigwLHIudmFsaWRhdGVUeXBlKSgiVFNUeXBlIil9fTtvKCJUU0FzRXhwcmVzc2lvbiIsbSksbygiVFNTYXRpc2ZpZXNFeHByZXNzaW9uIixtKSxvKCJUU1R5cGVBc3NlcnRpb24iLHthbGlhc2VzOlsiRXhwcmVzc2lvbiIsIkxWYWwiLCJQYXR0ZXJuTGlrZSJdLHZpc2l0b3I6WyJ0eXBlQW5ub3RhdGlvbiIsImV4cHJlc3Npb24iXSxmaWVsZHM6e3R5cGVBbm5vdGF0aW9uOigwLHIudmFsaWRhdGVUeXBlKSgiVFNUeXBlIiksZXhwcmVzc2lvbjooMCxyLnZhbGlkYXRlVHlwZSkoIkV4cHJlc3Npb24iKX19KSxvKCJUU0VudW1EZWNsYXJhdGlvbiIse2FsaWFzZXM6WyJTdGF0ZW1lbnQiLCJEZWNsYXJhdGlvbiJdLHZpc2l0b3I6WyJpZCIsIm1lbWJlcnMiXSxmaWVsZHM6e2RlY2xhcmU6KDAsci52YWxpZGF0ZU9wdGlvbmFsKShzKSxjb25zdDooMCxyLnZhbGlkYXRlT3B0aW9uYWwpKHMpLGlkOigwLHIudmFsaWRhdGVUeXBlKSgiSWRlbnRpZmllciIpLG1lbWJlcnM6KDAsci52YWxpZGF0ZUFycmF5T2ZUeXBlKSgiVFNFbnVtTWVtYmVyIiksaW5pdGlhbGl6ZXI6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIkV4cHJlc3Npb24iKX19KSxvKCJUU0VudW1NZW1iZXIiLHt2aXNpdG9yOlsiaWQiLCJpbml0aWFsaXplciJdLGZpZWxkczp7aWQ6KDAsci52YWxpZGF0ZVR5cGUpKFsiSWRlbnRpZmllciIsIlN0cmluZ0xpdGVyYWwiXSksaW5pdGlhbGl6ZXI6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIkV4cHJlc3Npb24iKX19KSxvKCJUU01vZHVsZURlY2xhcmF0aW9uIix7YWxpYXNlczpbIlN0YXRlbWVudCIsIkRlY2xhcmF0aW9uIl0sdmlzaXRvcjpbImlkIiwiYm9keSJdLGZpZWxkczp7ZGVjbGFyZTooMCxyLnZhbGlkYXRlT3B0aW9uYWwpKHMpLGdsb2JhbDooMCxyLnZhbGlkYXRlT3B0aW9uYWwpKHMpLGlkOigwLHIudmFsaWRhdGVUeXBlKShbIklkZW50aWZpZXIiLCJTdHJpbmdMaXRlcmFsIl0pLGJvZHk6KDAsci52YWxpZGF0ZVR5cGUpKFsiVFNNb2R1bGVCbG9jayIsIlRTTW9kdWxlRGVjbGFyYXRpb24iXSl9fSksbygiVFNNb2R1bGVCbG9jayIse2FsaWFzZXM6WyJTY29wYWJsZSIsIkJsb2NrIiwiQmxvY2tQYXJlbnQiLCJGdW5jdGlvblBhcmVudCJdLHZpc2l0b3I6WyJib2R5Il0sZmllbGRzOntib2R5OigwLHIudmFsaWRhdGVBcnJheU9mVHlwZSkoIlN0YXRlbWVudCIpfX0pLG8oIlRTSW1wb3J0VHlwZSIse2FsaWFzZXM6WyJUU1R5cGUiXSx2aXNpdG9yOlsiYXJndW1lbnQiLCJxdWFsaWZpZXIiLCJ0eXBlUGFyYW1ldGVycyJdLGZpZWxkczp7YXJndW1lbnQ6KDAsci52YWxpZGF0ZVR5cGUpKCJTdHJpbmdMaXRlcmFsIikscXVhbGlmaWVyOigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJUU0VudGl0eU5hbWUiKSx0eXBlUGFyYW1ldGVyczooMCxyLnZhbGlkYXRlT3B0aW9uYWxUeXBlKSgiVFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpfX0pLG8oIlRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24iLHthbGlhc2VzOlsiU3RhdGVtZW50Il0sdmlzaXRvcjpbImlkIiwibW9kdWxlUmVmZXJlbmNlIl0sZmllbGRzOntpc0V4cG9ydDooMCxyLnZhbGlkYXRlKShzKSxpZDooMCxyLnZhbGlkYXRlVHlwZSkoIklkZW50aWZpZXIiKSxtb2R1bGVSZWZlcmVuY2U6KDAsci52YWxpZGF0ZVR5cGUpKFsiVFNFbnRpdHlOYW1lIiwiVFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSJdKSxpbXBvcnRLaW5kOnt2YWxpZGF0ZTooMCxyLmFzc2VydE9uZU9mKSgidHlwZSIsInZhbHVlIiksb3B0aW9uYWw6ITB9fX0pLG8oIlRTRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UiLHt2aXNpdG9yOlsiZXhwcmVzc2lvbiJdLGZpZWxkczp7ZXhwcmVzc2lvbjooMCxyLnZhbGlkYXRlVHlwZSkoIlN0cmluZ0xpdGVyYWwiKX19KSxvKCJUU05vbk51bGxFeHByZXNzaW9uIix7YWxpYXNlczpbIkV4cHJlc3Npb24iLCJMVmFsIiwiUGF0dGVybkxpa2UiXSx2aXNpdG9yOlsiZXhwcmVzc2lvbiJdLGZpZWxkczp7ZXhwcmVzc2lvbjooMCxyLnZhbGlkYXRlVHlwZSkoIkV4cHJlc3Npb24iKX19KSxvKCJUU0V4cG9ydEFzc2lnbm1lbnQiLHthbGlhc2VzOlsiU3RhdGVtZW50Il0sdmlzaXRvcjpbImV4cHJlc3Npb24iXSxmaWVsZHM6e2V4cHJlc3Npb246KDAsci52YWxpZGF0ZVR5cGUpKCJFeHByZXNzaW9uIil9fSksbygiVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbiIse2FsaWFzZXM6WyJTdGF0ZW1lbnQiXSx2aXNpdG9yOlsiaWQiXSxmaWVsZHM6e2lkOigwLHIudmFsaWRhdGVUeXBlKSgiSWRlbnRpZmllciIpfX0pLG8oIlRTVHlwZUFubm90YXRpb24iLHt2aXNpdG9yOlsidHlwZUFubm90YXRpb24iXSxmaWVsZHM6e3R5cGVBbm5vdGF0aW9uOnt2YWxpZGF0ZTooMCxyLmFzc2VydE5vZGVUeXBlKSgiVFNUeXBlIil9fX0pLG8oIlRTVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iLHt2aXNpdG9yOlsicGFyYW1zIl0sZmllbGRzOntwYXJhbXM6e3ZhbGlkYXRlOigwLHIuY2hhaW4pKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxyLmFzc2VydEVhY2gpKCgwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJUU1R5cGUiKSkpfX19KSxvKCJUU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIse3Zpc2l0b3I6WyJwYXJhbXMiXSxmaWVsZHM6e3BhcmFtczp7dmFsaWRhdGU6KDAsci5jaGFpbikoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJhcnJheSIpLCgwLHIuYXNzZXJ0RWFjaCkoKDAsci5hc3NlcnROb2RlVHlwZSkoIlRTVHlwZVBhcmFtZXRlciIpKSl9fX0pLG8oIlRTVHlwZVBhcmFtZXRlciIse2J1aWxkZXI6WyJjb25zdHJhaW50IiwiZGVmYXVsdCIsIm5hbWUiXSx2aXNpdG9yOlsiY29uc3RyYWludCIsImRlZmF1bHQiXSxmaWVsZHM6e25hbWU6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0VmFsdWVUeXBlKSgic3RyaW5nIil9LGluOnt2YWxpZGF0ZTooMCxyLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSxvcHRpb25hbDohMH0sb3V0Ont2YWxpZGF0ZTooMCxyLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSxvcHRpb25hbDohMH0sY29uc3Q6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpLG9wdGlvbmFsOiEwfSxjb25zdHJhaW50Ont2YWxpZGF0ZTooMCxyLmFzc2VydE5vZGVUeXBlKSgiVFNUeXBlIiksb3B0aW9uYWw6ITB9LGRlZmF1bHQ6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJUU1R5cGUiKSxvcHRpb25hbDohMH19fSl9LDY3NTk6ZnVuY3Rpb24oZSx0KXt0LkdSRUFURVNUX0xPV0VSX0JPVU5EPTEsdC5MRUFTVF9VUFBFUl9CT1VORD0yLHQuc2VhcmNoPWZ1bmN0aW9uKGUsbixyLGkpe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4tMTt2YXIgYT1mdW5jdGlvbiBlKG4scixpLGEsbyxzKXt2YXIgbD1NYXRoLmZsb29yKChyLW4pLzIpK24sdT1vKGksYVtsXSwhMCk7cmV0dXJuIDA9PT11P2w6dT4wP3ItbD4xP2UobCxyLGksYSxvLHMpOnM9PXQuTEVBU1RfVVBQRVJfQk9VTkQ/cjxhLmxlbmd0aD9yOi0xOmw6bC1uPjE/ZShuLGwsaSxhLG8scyk6cz09dC5MRUFTVF9VUFBFUl9CT1VORD9sOm48MD8tMTpufSgtMSxuLmxlbmd0aCxlLG4scixpfHx0LkdSRUFURVNUX0xPV0VSX0JPVU5EKTtpZihhPDApcmV0dXJuLTE7Zm9yKDthLTE+PTAmJjA9PT1yKG5bYV0sblthLTFdLCEwKTspLS1hO3JldHVybiBhfX0sNjkxMTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCI0ZjM4IiksaT1yLl9faW1wb3J0RGVmYXVsdChuKCI0MWJhIikpLGE9ci5fX2ltcG9ydERlZmF1bHQobigiN2Y0YiIpKSxvPXIuX19pbXBvcnREZWZhdWx0KG4oIjgyNmEiKSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUudXNlKGkuZGVmYXVsdCksbj10Lm5hbWVkVHlwZXMscj10LmJ1aWxkZXJzLHM9dC5idWlsdEluVHlwZXMubnVtYmVyLGw9dC5idWlsdEluVHlwZXMuYXJyYXksdT1lLnVzZShhLmRlZmF1bHQpLHA9ZS51c2Uoby5kZWZhdWx0KSxjPWZ1bmN0aW9uIGUodCxuLHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBFcnJvcigiTm9kZVBhdGggY29uc3RydWN0b3IgY2Fubm90IGJlIGludm9rZWQgd2l0aG91dCAnbmV3JyIpO3UuY2FsbCh0aGlzLHQsbixyKX0sZD1jLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6YyxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KTtmdW5jdGlvbiBmKGUpe3JldHVybiBuLkJpbmFyeUV4cHJlc3Npb24uY2hlY2soZSl8fG4uTG9naWNhbEV4cHJlc3Npb24uY2hlY2soZSl9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZCx7bm9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJub2RlIix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnRoaXMuX2NvbXB1dGVOb2RlKCl9KSx0aGlzLm5vZGV9fSxwYXJlbnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicGFyZW50Iix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnRoaXMuX2NvbXB1dGVQYXJlbnQoKX0pLHRoaXMucGFyZW50fX0sc2NvcGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic2NvcGUiLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dGhpcy5fY29tcHV0ZVNjb3BlKCl9KSx0aGlzLnNjb3BlfX19KSxkLnJlcGxhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZGVsZXRlIHRoaXMubm9kZSxkZWxldGUgdGhpcy5wYXJlbnQsZGVsZXRlIHRoaXMuc2NvcGUsdS5wcm90b3R5cGUucmVwbGFjZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQucHJ1bmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudDtyZXR1cm4gdGhpcy5yZXBsYWNlKCksZnVuY3Rpb24oZSl7aWYobi5WYXJpYWJsZURlY2xhcmF0aW9uLmNoZWNrKGUubm9kZSkpe3ZhciB0PWUuZ2V0KCJkZWNsYXJhdGlvbnMiKS52YWx1ZTtpZighdHx8MD09PXQubGVuZ3RoKXJldHVybiBlLnBydW5lKCl9ZWxzZSBpZihuLkV4cHJlc3Npb25TdGF0ZW1lbnQuY2hlY2soZS5ub2RlKSl7aWYoIWUuZ2V0KCJleHByZXNzaW9uIikudmFsdWUpcmV0dXJuIGUucHJ1bmUoKX1lbHNlIG4uSWZTdGF0ZW1lbnQuY2hlY2soZS5ub2RlKSYmZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXQoInRlc3QiKS52YWx1ZSxpPWUuZ2V0KCJhbHRlcm5hdGUiKS52YWx1ZSxhPWUuZ2V0KCJjb25zZXF1ZW50IikudmFsdWU7aWYoYXx8aSl7aWYoIWEmJmkpe3ZhciBvPXIudW5hcnlFeHByZXNzaW9uKCIhIix0LCEwKTtuLlVuYXJ5RXhwcmVzc2lvbi5jaGVjayh0KSYmIiEiPT09dC5vcGVyYXRvciYmKG89dC5hcmd1bWVudCksZS5nZXQoInRlc3QiKS5yZXBsYWNlKG8pLGUuZ2V0KCJjb25zZXF1ZW50IikucmVwbGFjZShpKSxlLmdldCgiYWx0ZXJuYXRlIikucmVwbGFjZSgpfX1lbHNle3ZhciBzPXIuZXhwcmVzc2lvblN0YXRlbWVudCh0KTtlLnJlcGxhY2Uocyl9fShlKTtyZXR1cm4gZX0oZSl9LGQuX2NvbXB1dGVOb2RlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52YWx1ZTtpZihuLk5vZGUuY2hlY2soZSkpcmV0dXJuIGU7dmFyIHQ9dGhpcy5wYXJlbnRQYXRoO3JldHVybiB0JiZ0Lm5vZGV8fG51bGx9LGQuX2NvbXB1dGVQYXJlbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZhbHVlLHQ9dGhpcy5wYXJlbnRQYXRoO2lmKCFuLk5vZGUuY2hlY2soZSkpe2Zvcig7dCYmIW4uTm9kZS5jaGVjayh0LnZhbHVlKTspdD10LnBhcmVudFBhdGg7dCYmKHQ9dC5wYXJlbnRQYXRoKX1mb3IoO3QmJiFuLk5vZGUuY2hlY2sodC52YWx1ZSk7KXQ9dC5wYXJlbnRQYXRoO3JldHVybiB0fHxudWxsfSxkLl9jb21wdXRlU2NvcGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZhbHVlLHQ9dGhpcy5wYXJlbnRQYXRoLHI9dCYmdC5zY29wZTtyZXR1cm4gbi5Ob2RlLmNoZWNrKGUpJiZwLmlzRXN0YWJsaXNoZWRCeShlKSYmKHI9bmV3IHAodGhpcyxyKSkscnx8bnVsbH0sZC5nZXRWYWx1ZVByb3BlcnR5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmdldEZpZWxkVmFsdWUodGhpcy52YWx1ZSxlKX0sZC5uZWVkc1BhcmVucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBhcmVudFBhdGg7aWYoIXQpcmV0dXJuITE7dmFyIHI9dGhpcy52YWx1ZTtpZighbi5FeHByZXNzaW9uLmNoZWNrKHIpKXJldHVybiExO2lmKCJJZGVudGlmaWVyIj09PXIudHlwZSlyZXR1cm4hMTtmb3IoOyFuLk5vZGUuY2hlY2sodC52YWx1ZSk7KWlmKCEodD10LnBhcmVudFBhdGgpKXJldHVybiExO3ZhciBpPXQudmFsdWU7c3dpdGNoKHIudHlwZSl7Y2FzZSJVbmFyeUV4cHJlc3Npb24iOmNhc2UiU3ByZWFkRWxlbWVudCI6Y2FzZSJTcHJlYWRQcm9wZXJ0eSI6cmV0dXJuIk1lbWJlckV4cHJlc3Npb24iPT09aS50eXBlJiYib2JqZWN0Ij09PXRoaXMubmFtZSYmaS5vYmplY3Q9PT1yO2Nhc2UiQmluYXJ5RXhwcmVzc2lvbiI6Y2FzZSJMb2dpY2FsRXhwcmVzc2lvbiI6c3dpdGNoKGkudHlwZSl7Y2FzZSJDYWxsRXhwcmVzc2lvbiI6cmV0dXJuImNhbGxlZSI9PT10aGlzLm5hbWUmJmkuY2FsbGVlPT09cjtjYXNlIlVuYXJ5RXhwcmVzc2lvbiI6Y2FzZSJTcHJlYWRFbGVtZW50IjpjYXNlIlNwcmVhZFByb3BlcnR5IjpyZXR1cm4hMDtjYXNlIk1lbWJlckV4cHJlc3Npb24iOnJldHVybiJvYmplY3QiPT09dGhpcy5uYW1lJiZpLm9iamVjdD09PXI7Y2FzZSJCaW5hcnlFeHByZXNzaW9uIjpjYXNlIkxvZ2ljYWxFeHByZXNzaW9uIjp2YXIgYT1yLG89aS5vcGVyYXRvcixsPXlbb10sdT1hLm9wZXJhdG9yLHA9eVt1XTtpZihsPnApcmV0dXJuITA7aWYobD09PXAmJiJyaWdodCI9PT10aGlzLm5hbWUpe2lmKGkucmlnaHQhPT1hKXRocm93IG5ldyBFcnJvcigiTm9kZXMgbXVzdCBiZSBlcXVhbCIpO3JldHVybiEwfWRlZmF1bHQ6cmV0dXJuITF9Y2FzZSJTZXF1ZW5jZUV4cHJlc3Npb24iOnN3aXRjaChpLnR5cGUpe2Nhc2UiRm9yU3RhdGVtZW50IjpyZXR1cm4hMTtjYXNlIkV4cHJlc3Npb25TdGF0ZW1lbnQiOnJldHVybiJleHByZXNzaW9uIiE9PXRoaXMubmFtZTtkZWZhdWx0OnJldHVybiEwfWNhc2UiWWllbGRFeHByZXNzaW9uIjpzd2l0Y2goaS50eXBlKXtjYXNlIkJpbmFyeUV4cHJlc3Npb24iOmNhc2UiTG9naWNhbEV4cHJlc3Npb24iOmNhc2UiVW5hcnlFeHByZXNzaW9uIjpjYXNlIlNwcmVhZEVsZW1lbnQiOmNhc2UiU3ByZWFkUHJvcGVydHkiOmNhc2UiQ2FsbEV4cHJlc3Npb24iOmNhc2UiTWVtYmVyRXhwcmVzc2lvbiI6Y2FzZSJOZXdFeHByZXNzaW9uIjpjYXNlIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6Y2FzZSJZaWVsZEV4cHJlc3Npb24iOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9Y2FzZSJMaXRlcmFsIjpyZXR1cm4iTWVtYmVyRXhwcmVzc2lvbiI9PT1pLnR5cGUmJnMuY2hlY2soci52YWx1ZSkmJiJvYmplY3QiPT09dGhpcy5uYW1lJiZpLm9iamVjdD09PXI7Y2FzZSJBc3NpZ25tZW50RXhwcmVzc2lvbiI6Y2FzZSJDb25kaXRpb25hbEV4cHJlc3Npb24iOnN3aXRjaChpLnR5cGUpe2Nhc2UiVW5hcnlFeHByZXNzaW9uIjpjYXNlIlNwcmVhZEVsZW1lbnQiOmNhc2UiU3ByZWFkUHJvcGVydHkiOmNhc2UiQmluYXJ5RXhwcmVzc2lvbiI6Y2FzZSJMb2dpY2FsRXhwcmVzc2lvbiI6cmV0dXJuITA7Y2FzZSJDYWxsRXhwcmVzc2lvbiI6cmV0dXJuImNhbGxlZSI9PT10aGlzLm5hbWUmJmkuY2FsbGVlPT09cjtjYXNlIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6cmV0dXJuInRlc3QiPT09dGhpcy5uYW1lJiZpLnRlc3Q9PT1yO2Nhc2UiTWVtYmVyRXhwcmVzc2lvbiI6cmV0dXJuIm9iamVjdCI9PT10aGlzLm5hbWUmJmkub2JqZWN0PT09cjtkZWZhdWx0OnJldHVybiExfWRlZmF1bHQ6aWYoIk5ld0V4cHJlc3Npb24iPT09aS50eXBlJiYiY2FsbGVlIj09PXRoaXMubmFtZSYmaS5jYWxsZWU9PT1yKXJldHVybiBtKHIpfXJldHVybiEoITA9PT1lfHx0aGlzLmNhbkJlRmlyc3RJblN0YXRlbWVudCgpfHwhdGhpcy5maXJzdEluU3RhdGVtZW50KCkpfTt2YXIgeT17fTtmdW5jdGlvbiBtKGUpe3JldHVybiEhbi5DYWxsRXhwcmVzc2lvbi5jaGVjayhlKXx8KGwuY2hlY2soZSk/ZS5zb21lKG0pOiEhbi5Ob2RlLmNoZWNrKGUpJiZ0LnNvbWVGaWVsZChlLChmdW5jdGlvbihlLHQpe3JldHVybiBtKHQpfSkpKX1yZXR1cm5bWyJ8fCJdLFsiJiYiXSxbInwiXSxbIl4iXSxbIiYiXSxbIj09IiwiPT09IiwiIT0iLCIhPT0iXSxbIjwiLCI+IiwiPD0iLCI+PSIsImluIiwiaW5zdGFuY2VvZiJdLFsiPj4iLCI8PCIsIj4+PiJdLFsiKyIsIi0iXSxbIioiLCIvIiwiJSJdXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7eVtlXT10fSkpfSkpLGQuY2FuQmVGaXJzdEluU3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ub2RlO3JldHVybiFuLkZ1bmN0aW9uRXhwcmVzc2lvbi5jaGVjayhlKSYmIW4uT2JqZWN0RXhwcmVzc2lvbi5jaGVjayhlKX0sZC5maXJzdEluU3RhdGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyO2UucGFyZW50O2U9ZS5wYXJlbnQpe2lmKHQ9ZS5ub2RlLHI9ZS5wYXJlbnQubm9kZSxuLkJsb2NrU3RhdGVtZW50LmNoZWNrKHIpJiYiYm9keSI9PT1lLnBhcmVudC5uYW1lJiYwPT09ZS5uYW1lKXtpZihyLmJvZHlbMF0hPT10KXRocm93IG5ldyBFcnJvcigiTm9kZXMgbXVzdCBiZSBlcXVhbCIpO3JldHVybiEwfWlmKG4uRXhwcmVzc2lvblN0YXRlbWVudC5jaGVjayhyKSYmImV4cHJlc3Npb24iPT09ZS5uYW1lKXtpZihyLmV4cHJlc3Npb24hPT10KXRocm93IG5ldyBFcnJvcigiTm9kZXMgbXVzdCBiZSBlcXVhbCIpO3JldHVybiEwfWlmKG4uU2VxdWVuY2VFeHByZXNzaW9uLmNoZWNrKHIpJiYiZXhwcmVzc2lvbnMiPT09ZS5wYXJlbnQubmFtZSYmMD09PWUubmFtZSl7aWYoci5leHByZXNzaW9uc1swXSE9PXQpdGhyb3cgbmV3IEVycm9yKCJOb2RlcyBtdXN0IGJlIGVxdWFsIil9ZWxzZSBpZihuLkNhbGxFeHByZXNzaW9uLmNoZWNrKHIpJiYiY2FsbGVlIj09PWUubmFtZSl7aWYoci5jYWxsZWUhPT10KXRocm93IG5ldyBFcnJvcigiTm9kZXMgbXVzdCBiZSBlcXVhbCIpfWVsc2UgaWYobi5NZW1iZXJFeHByZXNzaW9uLmNoZWNrKHIpJiYib2JqZWN0Ij09PWUubmFtZSl7aWYoci5vYmplY3QhPT10KXRocm93IG5ldyBFcnJvcigiTm9kZXMgbXVzdCBiZSBlcXVhbCIpfWVsc2UgaWYobi5Db25kaXRpb25hbEV4cHJlc3Npb24uY2hlY2socikmJiJ0ZXN0Ij09PWUubmFtZSl7aWYoci50ZXN0IT09dCl0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIG11c3QgYmUgZXF1YWwiKX1lbHNlIGlmKGYocikmJiJsZWZ0Ij09PWUubmFtZSl7aWYoci5sZWZ0IT09dCl0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIG11c3QgYmUgZXF1YWwiKX1lbHNle2lmKCFuLlVuYXJ5RXhwcmVzc2lvbi5jaGVjayhyKXx8ci5wcmVmaXh8fCJhcmd1bWVudCIhPT1lLm5hbWUpcmV0dXJuITE7aWYoci5hcmd1bWVudCE9PXQpdGhyb3cgbmV3IEVycm9yKCJOb2RlcyBtdXN0IGJlIGVxdWFsIil9fXJldHVybiEwfSh0aGlzKX0sY30sZS5leHBvcnRzPXQuZGVmYXVsdH0sIjZhOWUiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQsbil7dmFyIHI9ZVt0XTtlW3RdPWVbbl0sZVtuXT1yfWZ1bmN0aW9uIHIoZSx0LGksYSl7aWYoaTxhKXt2YXIgbz1pLTE7bihlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgucm91bmQoZStNYXRoLnJhbmRvbSgpKih0LWUpKX0oaSxhKSxhKTtmb3IodmFyIHM9ZVthXSxsPWk7bDxhO2wrKyl0KGVbbF0scyk8PTAmJm4oZSxvKz0xLGwpO24oZSxvKzEsbCk7dmFyIHU9bysxO3IoZSx0LGksdS0xKSxyKGUsdCx1KzEsYSl9fXQucXVpY2tTb3J0PWZ1bmN0aW9uKGUsdCl7cihlLHQsMCxlLmxlbmd0aC0xKX19LCI2YWJkIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LldpdGhTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSl7dGhpcy53b3JkKCJ3aXRoIiksdGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIigiKSx0aGlzLnByaW50KGUub2JqZWN0LGUpLHRoaXMudG9rZW4oIikiKSx0aGlzLnByaW50QmxvY2soZSl9LHQuSWZTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSl7dGhpcy53b3JkKCJpZiIpLHRoaXMuc3BhY2UoKSx0aGlzLnRva2VuKCIoIiksdGhpcy5wcmludChlLnRlc3QsZSksdGhpcy50b2tlbigiKSIpLHRoaXMuc3BhY2UoKTtjb25zdCB0PWUuYWx0ZXJuYXRlJiZvKGZ1bmN0aW9uIGUodCl7cmV0dXJuIHModC5ib2R5KT9lKHQuYm9keSk6dH0oZS5jb25zZXF1ZW50KSk7dCYmKHRoaXMudG9rZW4oInsiKSx0aGlzLm5ld2xpbmUoKSx0aGlzLmluZGVudCgpKSx0aGlzLnByaW50QW5kSW5kZW50T25Db21tZW50cyhlLmNvbnNlcXVlbnQsZSksdCYmKHRoaXMuZGVkZW50KCksdGhpcy5uZXdsaW5lKCksdGhpcy50b2tlbigifSIpKSxlLmFsdGVybmF0ZSYmKHRoaXMuZW5kc1dpdGgoMTI1KSYmdGhpcy5zcGFjZSgpLHRoaXMud29yZCgiZWxzZSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50QW5kSW5kZW50T25Db21tZW50cyhlLmFsdGVybmF0ZSxlKSl9LHQuRm9yU3RhdGVtZW50PWZ1bmN0aW9uKGUpe3RoaXMud29yZCgiZm9yIiksdGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIigiKSx0aGlzLmluRm9yU3RhdGVtZW50SW5pdENvdW50ZXIrKyx0aGlzLnByaW50KGUuaW5pdCxlKSx0aGlzLmluRm9yU3RhdGVtZW50SW5pdENvdW50ZXItLSx0aGlzLnRva2VuKCI7IiksZS50ZXN0JiYodGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS50ZXN0LGUpKSx0aGlzLnRva2VuKCI7IiksZS51cGRhdGUmJih0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLnVwZGF0ZSxlKSksdGhpcy50b2tlbigiKSIpLHRoaXMucHJpbnRCbG9jayhlKX0sdC5XaGlsZVN0YXRlbWVudD1mdW5jdGlvbihlKXt0aGlzLndvcmQoIndoaWxlIiksdGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIigiKSx0aGlzLnByaW50KGUudGVzdCxlKSx0aGlzLnRva2VuKCIpIiksdGhpcy5wcmludEJsb2NrKGUpfSx0LkRvV2hpbGVTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSl7dGhpcy53b3JkKCJkbyIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuYm9keSxlKSx0aGlzLnNwYWNlKCksdGhpcy53b3JkKCJ3aGlsZSIpLHRoaXMuc3BhY2UoKSx0aGlzLnRva2VuKCIoIiksdGhpcy5wcmludChlLnRlc3QsZSksdGhpcy50b2tlbigiKSIpLHRoaXMuc2VtaWNvbG9uKCl9LHQuTGFiZWxlZFN0YXRlbWVudD1mdW5jdGlvbihlKXt0aGlzLnByaW50KGUubGFiZWwsZSksdGhpcy50b2tlbigiOiIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuYm9keSxlKX0sdC5UcnlTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSl7dGhpcy53b3JkKCJ0cnkiKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLmJsb2NrLGUpLHRoaXMuc3BhY2UoKSxlLmhhbmRsZXJzP3RoaXMucHJpbnQoZS5oYW5kbGVyc1swXSxlKTp0aGlzLnByaW50KGUuaGFuZGxlcixlKSxlLmZpbmFsaXplciYmKHRoaXMuc3BhY2UoKSx0aGlzLndvcmQoImZpbmFsbHkiKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLmZpbmFsaXplcixlKSl9LHQuQ2F0Y2hDbGF1c2U9ZnVuY3Rpb24oZSl7dGhpcy53b3JkKCJjYXRjaCIpLHRoaXMuc3BhY2UoKSxlLnBhcmFtJiYodGhpcy50b2tlbigiKCIpLHRoaXMucHJpbnQoZS5wYXJhbSxlKSx0aGlzLnByaW50KGUucGFyYW0udHlwZUFubm90YXRpb24sZSksdGhpcy50b2tlbigiKSIpLHRoaXMuc3BhY2UoKSksdGhpcy5wcmludChlLmJvZHksZSl9LHQuU3dpdGNoU3RhdGVtZW50PWZ1bmN0aW9uKGUpe3RoaXMud29yZCgic3dpdGNoIiksdGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIigiKSx0aGlzLnByaW50KGUuZGlzY3JpbWluYW50LGUpLHRoaXMudG9rZW4oIikiKSx0aGlzLnNwYWNlKCksdGhpcy50b2tlbigieyIpLHRoaXMucHJpbnRTZXF1ZW5jZShlLmNhc2VzLGUse2luZGVudDohMCxhZGROZXdsaW5lcyh0LG4pe2lmKCF0JiZlLmNhc2VzW2UuY2FzZXMubGVuZ3RoLTFdPT09bilyZXR1cm4tMX19KSx0aGlzLnRva2VuKCJ9Iil9LHQuU3dpdGNoQ2FzZT1mdW5jdGlvbihlKXtlLnRlc3Q/KHRoaXMud29yZCgiY2FzZSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUudGVzdCxlKSx0aGlzLnRva2VuKCI6IikpOih0aGlzLndvcmQoImRlZmF1bHQiKSx0aGlzLnRva2VuKCI6IikpLGUuY29uc2VxdWVudC5sZW5ndGgmJih0aGlzLm5ld2xpbmUoKSx0aGlzLnByaW50U2VxdWVuY2UoZS5jb25zZXF1ZW50LGUse2luZGVudDohMH0pKX0sdC5EZWJ1Z2dlclN0YXRlbWVudD1mdW5jdGlvbigpe3RoaXMud29yZCgiZGVidWdnZXIiKSx0aGlzLnNlbWljb2xvbigpfSx0LlZhcmlhYmxlRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXtlLmRlY2xhcmUmJih0aGlzLndvcmQoImRlY2xhcmUiKSx0aGlzLnNwYWNlKCkpLHRoaXMud29yZChlLmtpbmQpLHRoaXMuc3BhY2UoKTtsZXQgbixyPSExO2lmKCFpKHQpKWZvcihjb25zdCB0IG9mIGUuZGVjbGFyYXRpb25zKXQuaW5pdCYmKHI9ITApO2lmKHImJihuPSJjb25zdCI9PT1lLmtpbmQ/VDpoKSx0aGlzLnByaW50TGlzdChlLmRlY2xhcmF0aW9ucyxlLHtzZXBhcmF0b3I6bn0pLGkodCkpaWYoYSh0KSl7aWYodC5pbml0PT09ZSlyZXR1cm59ZWxzZSBpZih0LmxlZnQ9PT1lKXJldHVybjt0aGlzLnNlbWljb2xvbigpfSx0LlZhcmlhYmxlRGVjbGFyYXRvcj1mdW5jdGlvbihlKXt0aGlzLnByaW50KGUuaWQsZSksZS5kZWZpbml0ZSYmdGhpcy50b2tlbigiISIpLHRoaXMucHJpbnQoZS5pZC50eXBlQW5ub3RhdGlvbixlKSxlLmluaXQmJih0aGlzLnNwYWNlKCksdGhpcy50b2tlbigiPSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuaW5pdCxlKSl9LHQuVGhyb3dTdGF0ZW1lbnQ9dC5CcmVha1N0YXRlbWVudD10LlJldHVyblN0YXRlbWVudD10LkNvbnRpbnVlU3RhdGVtZW50PXQuRm9yT2ZTdGF0ZW1lbnQ9dC5Gb3JJblN0YXRlbWVudD12b2lkIDA7dmFyIHI9bigiMjUyYSIpO2NvbnN0e2lzRm9yOmksaXNGb3JTdGF0ZW1lbnQ6YSxpc0lmU3RhdGVtZW50Om8saXNTdGF0ZW1lbnQ6c309cjtjb25zdCBsPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLndvcmQoImZvciIpLHRoaXMuc3BhY2UoKSwib2YiPT09ZSYmdC5hd2FpdCYmKHRoaXMud29yZCgiYXdhaXQiKSx0aGlzLnNwYWNlKCkpLHRoaXMudG9rZW4oIigiKSx0aGlzLnByaW50KHQubGVmdCx0KSx0aGlzLnNwYWNlKCksdGhpcy53b3JkKGUpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KHQucmlnaHQsdCksdGhpcy50b2tlbigiKSIpLHRoaXMucHJpbnRCbG9jayh0KX19LHU9bCgiaW4iKTt0LkZvckluU3RhdGVtZW50PXU7Y29uc3QgcD1sKCJvZiIpO2Z1bmN0aW9uIGMoZSx0PSJsYWJlbCIpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLndvcmQoZSk7Y29uc3Qgcj1uW3RdO2lmKHIpe3RoaXMuc3BhY2UoKTtjb25zdCBlPSJsYWJlbCI9PXQsaT10aGlzLnN0YXJ0VGVybWluYXRvcmxlc3MoZSk7dGhpcy5wcmludChyLG4pLHRoaXMuZW5kVGVybWluYXRvcmxlc3MoaSl9dGhpcy5zZW1pY29sb24oKX19dC5Gb3JPZlN0YXRlbWVudD1wO2NvbnN0IGQ9YygiY29udGludWUiKTt0LkNvbnRpbnVlU3RhdGVtZW50PWQ7Y29uc3QgZj1jKCJyZXR1cm4iLCJhcmd1bWVudCIpO3QuUmV0dXJuU3RhdGVtZW50PWY7Y29uc3QgeT1jKCJicmVhayIpO3QuQnJlYWtTdGF0ZW1lbnQ9eTtjb25zdCBtPWMoInRocm93IiwiYXJndW1lbnQiKTtmdW5jdGlvbiBoKCl7aWYodGhpcy50b2tlbigiLCIpLHRoaXMubmV3bGluZSgpLHRoaXMuZW5kc1dpdGgoMTApKWZvcihsZXQgZT0wO2U8NDtlKyspdGhpcy5zcGFjZSghMCl9ZnVuY3Rpb24gVCgpe2lmKHRoaXMudG9rZW4oIiwiKSx0aGlzLm5ld2xpbmUoKSx0aGlzLmVuZHNXaXRoKDEwKSlmb3IobGV0IGU9MDtlPDY7ZSsrKXRoaXMuc3BhY2UoITApfXQuVGhyb3dTdGF0ZW1lbnQ9bX0sIjZkYTAiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7Y29uc3Qgcj0vXlsgXHRdKyQvO3QuZGVmYXVsdD1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9tYXA9bnVsbCx0aGlzLl9idWY9IiIsdGhpcy5fbGFzdD0wLHRoaXMuX3F1ZXVlPVtdLHRoaXMuX3Bvc2l0aW9uPXtsaW5lOjEsY29sdW1uOjB9LHRoaXMuX3NvdXJjZVBvc2l0aW9uPXtpZGVudGlmaWVyTmFtZTpudWxsLGxpbmU6bnVsbCxjb2x1bW46bnVsbCxmaWxlbmFtZTpudWxsfSx0aGlzLl9kaXNhbGxvd2VkUG9wPW51bGwsdGhpcy5fbWFwPWV9Z2V0KCl7dGhpcy5fZmx1c2goKTtjb25zdCBlPXRoaXMuX21hcCx0PXtjb2RlOnRoaXMuX2J1Zi50cmltUmlnaHQoKSxtYXA6bnVsbCxyYXdNYXBwaW5nczpudWxsPT1lP3ZvaWQgMDplLmdldFJhd01hcHBpbmdzKCl9O3JldHVybiBlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibWFwIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXMubWFwPWUuZ2V0KCl9LHNldChlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibWFwIix7dmFsdWU6ZSx3cml0YWJsZTohMH0pfX0pLHR9YXBwZW5kKGUpe3RoaXMuX2ZsdXNoKCk7Y29uc3R7bGluZTp0LGNvbHVtbjpuLGZpbGVuYW1lOnIsaWRlbnRpZmllck5hbWU6aSxmb3JjZTphfT10aGlzLl9zb3VyY2VQb3NpdGlvbjt0aGlzLl9hcHBlbmQoZSx0LG4saSxyLGEpfXF1ZXVlKGUpe2lmKCJcbiI9PT1lKWZvcig7dGhpcy5fcXVldWUubGVuZ3RoPjAmJnIudGVzdCh0aGlzLl9xdWV1ZVswXVswXSk7KXRoaXMuX3F1ZXVlLnNoaWZ0KCk7Y29uc3R7bGluZTp0LGNvbHVtbjpuLGZpbGVuYW1lOmksaWRlbnRpZmllck5hbWU6YSxmb3JjZTpvfT10aGlzLl9zb3VyY2VQb3NpdGlvbjt0aGlzLl9xdWV1ZS51bnNoaWZ0KFtlLHQsbixhLGksb10pfV9mbHVzaCgpe2xldCBlO2Zvcig7ZT10aGlzLl9xdWV1ZS5wb3AoKTspdGhpcy5fYXBwZW5kKC4uLmUpfV9hcHBlbmQoZSx0LG4scixpLGEpe3RoaXMuX2J1Zis9ZSx0aGlzLl9sYXN0PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKTtsZXQgbz1lLmluZGV4T2YoIlxuIikscz0wO2ZvcigwIT09byYmdGhpcy5fbWFyayh0LG4scixpLGEpOy0xIT09bzspdGhpcy5fcG9zaXRpb24ubGluZSsrLHRoaXMuX3Bvc2l0aW9uLmNvbHVtbj0wLHM9bysxLHM8ZS5sZW5ndGgmJnRoaXMuX21hcmsoKyt0LDAscixpLGEpLG89ZS5pbmRleE9mKCJcbiIscyk7dGhpcy5fcG9zaXRpb24uY29sdW1uKz1lLmxlbmd0aC1zfV9tYXJrKGUsdCxuLHIsaSl7dmFyIGE7bnVsbD09KGE9dGhpcy5fbWFwKXx8YS5tYXJrKHRoaXMuX3Bvc2l0aW9uLmxpbmUsdGhpcy5fcG9zaXRpb24uY29sdW1uLGUsdCxuLHIsaSl9cmVtb3ZlVHJhaWxpbmdOZXdsaW5lKCl7dGhpcy5fcXVldWUubGVuZ3RoPjAmJiJcbiI9PT10aGlzLl9xdWV1ZVswXVswXSYmdGhpcy5fcXVldWUuc2hpZnQoKX1yZW1vdmVMYXN0U2VtaWNvbG9uKCl7dGhpcy5fcXVldWUubGVuZ3RoPjAmJiI7Ij09PXRoaXMuX3F1ZXVlWzBdWzBdJiZ0aGlzLl9xdWV1ZS5zaGlmdCgpfWdldExhc3RDaGFyKCl7bGV0IGU7aWYodGhpcy5fcXVldWUubGVuZ3RoPjApe2U9dGhpcy5fcXVldWVbMF1bMF0uY2hhckNvZGVBdCgwKX1lbHNlIGU9dGhpcy5fbGFzdDtyZXR1cm4gZX1lbmRzV2l0aENoYXJBbmROZXdsaW5lKCl7Y29uc3QgZT10aGlzLl9xdWV1ZTtpZihlLmxlbmd0aD4wKXtpZigxMCE9PWVbMF1bMF0uY2hhckNvZGVBdCgwKSlyZXR1cm47aWYoZS5sZW5ndGg+MSl7cmV0dXJuIGVbMV1bMF0uY2hhckNvZGVBdCgwKX1yZXR1cm4gdGhpcy5fbGFzdH19aGFzQ29udGVudCgpe3JldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg+MHx8ISF0aGlzLl9sYXN0fWV4YWN0U291cmNlKGUsdCl7dGhpcy5zb3VyY2UoInN0YXJ0IixlLCEwKSx0KCksdGhpcy5zb3VyY2UoImVuZCIsZSksdGhpcy5fZGlzYWxsb3dQb3AoInN0YXJ0IixlKX1zb3VyY2UoZSx0LG4pe2UmJiF0fHx0aGlzLl9ub3JtYWxpemVQb3NpdGlvbihlLHQsdGhpcy5fc291cmNlUG9zaXRpb24sbil9d2l0aFNvdXJjZShlLHQsbil7aWYoIXRoaXMuX21hcClyZXR1cm4gbigpO2NvbnN0IHI9dGhpcy5fc291cmNlUG9zaXRpb24ubGluZSxpPXRoaXMuX3NvdXJjZVBvc2l0aW9uLmNvbHVtbixhPXRoaXMuX3NvdXJjZVBvc2l0aW9uLmZpbGVuYW1lLG89dGhpcy5fc291cmNlUG9zaXRpb24uaWRlbnRpZmllck5hbWU7dGhpcy5zb3VyY2UoZSx0KSxuKCksdGhpcy5fc291cmNlUG9zaXRpb24uZm9yY2UmJnRoaXMuX3NvdXJjZVBvc2l0aW9uLmxpbmU9PT1yJiZ0aGlzLl9zb3VyY2VQb3NpdGlvbi5jb2x1bW49PT1pJiZ0aGlzLl9zb3VyY2VQb3NpdGlvbi5maWxlbmFtZT09PWF8fHRoaXMuX2Rpc2FsbG93ZWRQb3AmJnRoaXMuX2Rpc2FsbG93ZWRQb3AubGluZT09PXImJnRoaXMuX2Rpc2FsbG93ZWRQb3AuY29sdW1uPT09aSYmdGhpcy5fZGlzYWxsb3dlZFBvcC5maWxlbmFtZT09PWF8fCh0aGlzLl9zb3VyY2VQb3NpdGlvbi5saW5lPXIsdGhpcy5fc291cmNlUG9zaXRpb24uY29sdW1uPWksdGhpcy5fc291cmNlUG9zaXRpb24uZmlsZW5hbWU9YSx0aGlzLl9zb3VyY2VQb3NpdGlvbi5pZGVudGlmaWVyTmFtZT1vLHRoaXMuX3NvdXJjZVBvc2l0aW9uLmZvcmNlPSExLHRoaXMuX2Rpc2FsbG93ZWRQb3A9bnVsbCl9X2Rpc2FsbG93UG9wKGUsdCl7ZSYmIXR8fCh0aGlzLl9kaXNhbGxvd2VkUG9wPXRoaXMuX25vcm1hbGl6ZVBvc2l0aW9uKGUsdCkpfV9ub3JtYWxpemVQb3NpdGlvbihlLHQsbixyKXtjb25zdCBpPXQ/dFtlXTpudWxsO3ZvaWQgMD09PW4mJihuPXtpZGVudGlmaWVyTmFtZTpudWxsLGxpbmU6bnVsbCxjb2x1bW46bnVsbCxmaWxlbmFtZTpudWxsLGZvcmNlOiExfSk7Y29uc3QgYT1uLmxpbmUsbz1uLmNvbHVtbixzPW4uZmlsZW5hbWU7cmV0dXJuIG4uaWRlbnRpZmllck5hbWU9InN0YXJ0Ij09PWUmJihudWxsPT10P3ZvaWQgMDp0LmlkZW50aWZpZXJOYW1lKXx8bnVsbCxuLmxpbmU9bnVsbD09aT92b2lkIDA6aS5saW5lLG4uY29sdW1uPW51bGw9PWk/dm9pZCAwOmkuY29sdW1uLG4uZmlsZW5hbWU9bnVsbD09dD92b2lkIDA6dC5maWxlbmFtZSwocnx8bi5saW5lIT09YXx8bi5jb2x1bW4hPT1vfHxuLmZpbGVuYW1lIT09cykmJihuLmZvcmNlPXIpLG59Z2V0Q3VycmVudENvbHVtbigpe2NvbnN0IGU9dGhpcy5fcXVldWUucmVkdWNlKChlLHQpPT50WzBdK2UsIiIpLHQ9ZS5sYXN0SW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PXQ/dGhpcy5fcG9zaXRpb24uY29sdW1uK2UubGVuZ3RoOmUubGVuZ3RoLTEtdH1nZXRDdXJyZW50TGluZSgpe2NvbnN0IGU9dGhpcy5fcXVldWUucmVkdWNlKChlLHQpPT50WzBdK2UsIiIpO2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspIlxuIj09PWVbbl0mJnQrKztyZXR1cm4gdGhpcy5fcG9zaXRpb24ubGluZSt0fX19LCI2ZjZlIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIjU3ZGUiKTsoMCxyLmRlZmF1bHQpKCJBcmd1bWVudFBsYWNlaG9sZGVyIix7fSksKDAsci5kZWZhdWx0KSgiQmluZEV4cHJlc3Npb24iLHt2aXNpdG9yOlsib2JqZWN0IiwiY2FsbGVlIl0sYWxpYXNlczpbIkV4cHJlc3Npb24iXSxmaWVsZHM6T2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5CQUJFTF9UWVBFU184X0JSRUFLSU5HP3tvYmplY3Q6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIil9LGNhbGxlZTp7dmFsaWRhdGU6KDAsci5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX19OntvYmplY3Q6e3ZhbGlkYXRlOk9iamVjdC5hc3NpZ24oKCk9Pnt9LHtvbmVPZk5vZGVUeXBlczpbIkV4cHJlc3Npb24iXX0pfSxjYWxsZWU6e3ZhbGlkYXRlOk9iamVjdC5hc3NpZ24oKCk9Pnt9LHtvbmVPZk5vZGVUeXBlczpbIkV4cHJlc3Npb24iXX0pfX19KSwoMCxyLmRlZmF1bHQpKCJJbXBvcnRBdHRyaWJ1dGUiLHt2aXNpdG9yOlsia2V5IiwidmFsdWUiXSxmaWVsZHM6e2tleTp7dmFsaWRhdGU6KDAsci5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiLCJTdHJpbmdMaXRlcmFsIil9LHZhbHVlOnt2YWxpZGF0ZTooMCxyLmFzc2VydE5vZGVUeXBlKSgiU3RyaW5nTGl0ZXJhbCIpfX19KSwoMCxyLmRlZmF1bHQpKCJEZWNvcmF0b3IiLHt2aXNpdG9yOlsiZXhwcmVzc2lvbiJdLGZpZWxkczp7ZXhwcmVzc2lvbjp7dmFsaWRhdGU6KDAsci5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX19fSksKDAsci5kZWZhdWx0KSgiRG9FeHByZXNzaW9uIix7dmlzaXRvcjpbImJvZHkiXSxidWlsZGVyOlsiYm9keSIsImFzeW5jIl0sYWxpYXNlczpbIkV4cHJlc3Npb24iXSxmaWVsZHM6e2JvZHk6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJCbG9ja1N0YXRlbWVudCIpfSxhc3luYzp7dmFsaWRhdGU6KDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksZGVmYXVsdDohMX19fSksKDAsci5kZWZhdWx0KSgiRXhwb3J0RGVmYXVsdFNwZWNpZmllciIse3Zpc2l0b3I6WyJleHBvcnRlZCJdLGFsaWFzZXM6WyJNb2R1bGVTcGVjaWZpZXIiXSxmaWVsZHM6e2V4cG9ydGVkOnt2YWxpZGF0ZTooMCxyLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIpfX19KSwoMCxyLmRlZmF1bHQpKCJSZWNvcmRFeHByZXNzaW9uIix7dmlzaXRvcjpbInByb3BlcnRpZXMiXSxhbGlhc2VzOlsiRXhwcmVzc2lvbiJdLGZpZWxkczp7cHJvcGVydGllczp7dmFsaWRhdGU6KDAsci5jaGFpbikoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJhcnJheSIpLCgwLHIuYXNzZXJ0RWFjaCkoKDAsci5hc3NlcnROb2RlVHlwZSkoIk9iamVjdFByb3BlcnR5IiwiU3ByZWFkRWxlbWVudCIpKSl9fX0pLCgwLHIuZGVmYXVsdCkoIlR1cGxlRXhwcmVzc2lvbiIse2ZpZWxkczp7ZWxlbWVudHM6e3ZhbGlkYXRlOigwLHIuY2hhaW4pKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxyLmFzc2VydEVhY2gpKCgwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIiwiU3ByZWFkRWxlbWVudCIpKSksZGVmYXVsdDpbXX19LHZpc2l0b3I6WyJlbGVtZW50cyJdLGFsaWFzZXM6WyJFeHByZXNzaW9uIl19KSwoMCxyLmRlZmF1bHQpKCJEZWNpbWFsTGl0ZXJhbCIse2J1aWxkZXI6WyJ2YWx1ZSJdLGZpZWxkczp7dmFsdWU6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0VmFsdWVUeXBlKSgic3RyaW5nIil9fSxhbGlhc2VzOlsiRXhwcmVzc2lvbiIsIlB1cmVpc2giLCJMaXRlcmFsIiwiSW1tdXRhYmxlIl19KSwoMCxyLmRlZmF1bHQpKCJNb2R1bGVFeHByZXNzaW9uIix7dmlzaXRvcjpbImJvZHkiXSxmaWVsZHM6e2JvZHk6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJQcm9ncmFtIil9fSxhbGlhc2VzOlsiRXhwcmVzc2lvbiJdfSksKDAsci5kZWZhdWx0KSgiVG9waWNSZWZlcmVuY2UiLHthbGlhc2VzOlsiRXhwcmVzc2lvbiJdfSksKDAsci5kZWZhdWx0KSgiUGlwZWxpbmVUb3BpY0V4cHJlc3Npb24iLHtidWlsZGVyOlsiZXhwcmVzc2lvbiJdLHZpc2l0b3I6WyJleHByZXNzaW9uIl0sZmllbGRzOntleHByZXNzaW9uOnt2YWxpZGF0ZTooMCxyLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpfX0sYWxpYXNlczpbIkV4cHJlc3Npb24iXX0pLCgwLHIuZGVmYXVsdCkoIlBpcGVsaW5lQmFyZUZ1bmN0aW9uIix7YnVpbGRlcjpbImNhbGxlZSJdLHZpc2l0b3I6WyJjYWxsZWUiXSxmaWVsZHM6e2NhbGxlZTp7dmFsaWRhdGU6KDAsci5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX19LGFsaWFzZXM6WyJFeHByZXNzaW9uIl19KSwoMCxyLmRlZmF1bHQpKCJQaXBlbGluZVByaW1hcnlUb3BpY1JlZmVyZW5jZSIse2FsaWFzZXM6WyJFeHByZXNzaW9uIl19KX0sIjcyZTciOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtjb25zdCB0PVtdO2ZvcihsZXQgbj0wO248ZS5jaGlsZHJlbi5sZW5ndGg7bisrKXtsZXQgYT1lLmNoaWxkcmVuW25dOygwLHIuaXNKU1hUZXh0KShhKT8oMCxpLmRlZmF1bHQpKGEsdCk6KCgwLHIuaXNKU1hFeHByZXNzaW9uQ29udGFpbmVyKShhKSYmKGE9YS5leHByZXNzaW9uKSwoMCxyLmlzSlNYRW1wdHlFeHByZXNzaW9uKShhKXx8dC5wdXNoKGEpKX1yZXR1cm4gdH07dmFyIHI9bigiYzQ4NSIpLGk9bigiMTYzMyIpfSwiNzNiZCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uIGUodCxuLHMpe2NvbnN0IGw9W107bGV0IHU9ITA7Zm9yKGNvbnN0IHAgb2YgdClpZigoMCxpLmlzRW1wdHlTdGF0ZW1lbnQpKHApfHwodT0hMSksKDAsaS5pc0V4cHJlc3Npb24pKHApKWwucHVzaChwKTtlbHNlIGlmKCgwLGkuaXNFeHByZXNzaW9uU3RhdGVtZW50KShwKSlsLnB1c2gocC5leHByZXNzaW9uKTtlbHNlIGlmKCgwLGkuaXNWYXJpYWJsZURlY2xhcmF0aW9uKShwKSl7aWYoInZhciIhPT1wLmtpbmQpcmV0dXJuO2Zvcihjb25zdCBlIG9mIHAuZGVjbGFyYXRpb25zKXtjb25zdCB0PSgwLHIuZGVmYXVsdCkoZSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpcy5wdXNoKHtraW5kOnAua2luZCxpZDooMCxvLmRlZmF1bHQpKHRbZV0pfSk7ZS5pbml0JiZsLnB1c2goKDAsYS5hc3NpZ25tZW50RXhwcmVzc2lvbikoIj0iLGUuaWQsZS5pbml0KSl9dT0hMH1lbHNlIGlmKCgwLGkuaXNJZlN0YXRlbWVudCkocCkpe2NvbnN0IHQ9cC5jb25zZXF1ZW50P2UoW3AuY29uc2VxdWVudF0sbixzKTpuLmJ1aWxkVW5kZWZpbmVkTm9kZSgpLHI9cC5hbHRlcm5hdGU/ZShbcC5hbHRlcm5hdGVdLG4scyk6bi5idWlsZFVuZGVmaW5lZE5vZGUoKTtpZighdHx8IXIpcmV0dXJuO2wucHVzaCgoMCxhLmNvbmRpdGlvbmFsRXhwcmVzc2lvbikocC50ZXN0LHQscikpfWVsc2UgaWYoKDAsaS5pc0Jsb2NrU3RhdGVtZW50KShwKSl7Y29uc3QgdD1lKHAuYm9keSxuLHMpO2lmKCF0KXJldHVybjtsLnB1c2godCl9ZWxzZXtpZighKDAsaS5pc0VtcHR5U3RhdGVtZW50KShwKSlyZXR1cm47MD09PXQuaW5kZXhPZihwKSYmKHU9ITApfXJldHVybiB1JiZsLnB1c2gobi5idWlsZFVuZGVmaW5lZE5vZGUoKSksMT09PWwubGVuZ3RoP2xbMF06KDAsYS5zZXF1ZW5jZUV4cHJlc3Npb24pKGwpfTt2YXIgcj1uKCJjMWY3IiksaT1uKCJjNDg1IiksYT1uKCJlYjViIiksbz1uKCJiZjc4Iil9LCI3YmRjIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuZXcgYShlLHQsbikuZ2VuZXJhdGUoKX0sdC5Db2RlR2VuZXJhdG9yPXZvaWQgMDt2YXIgcj1uKCI5YmVlIiksaT1uKCI0ZWUyIik7Y2xhc3MgYSBleHRlbmRzIGkuZGVmYXVsdHtjb25zdHJ1Y3RvcihlLHQ9e30sbil7c3VwZXIoZnVuY3Rpb24oZSx0KXtjb25zdCBuPXthdXhpbGlhcnlDb21tZW50QmVmb3JlOnQuYXV4aWxpYXJ5Q29tbWVudEJlZm9yZSxhdXhpbGlhcnlDb21tZW50QWZ0ZXI6dC5hdXhpbGlhcnlDb21tZW50QWZ0ZXIsc2hvdWxkUHJpbnRDb21tZW50OnQuc2hvdWxkUHJpbnRDb21tZW50LHJldGFpbkxpbmVzOnQucmV0YWluTGluZXMscmV0YWluRnVuY3Rpb25QYXJlbnM6dC5yZXRhaW5GdW5jdGlvblBhcmVucyxjb21tZW50czpudWxsPT10LmNvbW1lbnRzfHx0LmNvbW1lbnRzLGNvbXBhY3Q6dC5jb21wYWN0LG1pbmlmaWVkOnQubWluaWZpZWQsY29uY2lzZTp0LmNvbmNpc2UsaW5kZW50OnthZGp1c3RNdWx0aWxpbmVDb21tZW50OiEwLHN0eWxlOiIgICIsYmFzZTowfSxkZWNvcmF0b3JzQmVmb3JlRXhwb3J0OiEhdC5kZWNvcmF0b3JzQmVmb3JlRXhwb3J0LGpzZXNjT3B0aW9uOk9iamVjdC5hc3NpZ24oe3F1b3RlczoiZG91YmxlIix3cmFwOiEwLG1pbmltYWw6ITF9LHQuanNlc2NPcHRpb24pLHJlY29yZEFuZFR1cGxlU3ludGF4VHlwZTp0LnJlY29yZEFuZFR1cGxlU3ludGF4VHlwZX07cmV0dXJuIG4uanNvbkNvbXBhdGlibGVTdHJpbmdzPXQuanNvbkNvbXBhdGlibGVTdHJpbmdzLG4ubWluaWZpZWQ/KG4uY29tcGFjdD0hMCxuLnNob3VsZFByaW50Q29tbWVudD1uLnNob3VsZFByaW50Q29tbWVudHx8KCgpPT5uLmNvbW1lbnRzKSk6bi5zaG91bGRQcmludENvbW1lbnQ9bi5zaG91bGRQcmludENvbW1lbnR8fChlPT5uLmNvbW1lbnRzfHxlLmluZGV4T2YoIkBsaWNlbnNlIik+PTB8fGUuaW5kZXhPZigiQHByZXNlcnZlIik+PTApLCJhdXRvIj09PW4uY29tcGFjdCYmKG4uY29tcGFjdD1lLmxlbmd0aD41ZTUsbi5jb21wYWN0KSxuLmNvbXBhY3QmJihuLmluZGVudC5hZGp1c3RNdWx0aWxpbmVDb21tZW50PSExKSxufShuLHQpLHQuc291cmNlTWFwcz9uZXcgci5kZWZhdWx0KHQsbik6bnVsbCksdGhpcy5hc3Q9dm9pZCAwLHRoaXMuYXN0PWV9Z2VuZXJhdGUoKXtyZXR1cm4gc3VwZXIuZ2VuZXJhdGUodGhpcy5hc3QpfX10LkNvZGVHZW5lcmF0b3I9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuX2dlbmVyYXRvcj12b2lkIDAsdGhpcy5fZ2VuZXJhdG9yPW5ldyBhKGUsdCxuKX1nZW5lcmF0ZSgpe3JldHVybiB0aGlzLl9nZW5lcmF0b3IuZ2VuZXJhdGUoKX19fSwiN2U0NyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7KDAsci5kZWZhdWx0KSgiaW5uZXJDb21tZW50cyIsZSx0KX07dmFyIHI9bigiMTMxNSIpfSwiN2YwYyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7aWYoKDAsci5pc0Jsb2NrU3RhdGVtZW50KShlKSlyZXR1cm4gZTtsZXQgbj1bXTtyZXR1cm4oMCxyLmlzRW1wdHlTdGF0ZW1lbnQpKGUpP249W106KCgwLHIuaXNTdGF0ZW1lbnQpKGUpfHwoZT0oMCxyLmlzRnVuY3Rpb24pKHQpPygwLGkucmV0dXJuU3RhdGVtZW50KShlKTooMCxpLmV4cHJlc3Npb25TdGF0ZW1lbnQpKGUpKSxuPVtlXSksKDAsaS5ibG9ja1N0YXRlbWVudCkobil9O3ZhciByPW4oImM0ODUiKSxpPW4oImViNWIiKX0sIjdmNGIiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIjRmMzgiKS5fX2ltcG9ydERlZmF1bHQobigiNDFiYSIpKSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUudXNlKHIuZGVmYXVsdCksbj10LmJ1aWx0SW5UeXBlcy5hcnJheSxhPXQuYnVpbHRJblR5cGVzLm51bWJlcixvPWZ1bmN0aW9uIGUodCxuLHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBFcnJvcigiUGF0aCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgaW52b2tlZCB3aXRob3V0ICduZXcnIik7aWYobil7aWYoIShuIGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IEVycm9yKCIiKX1lbHNlIG49bnVsbCxyPW51bGw7dGhpcy52YWx1ZT10LHRoaXMucGFyZW50UGF0aD1uLHRoaXMubmFtZT1yLHRoaXMuX19jaGlsZENhY2hlPW51bGx9LHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS5fX2NoaWxkQ2FjaGV8fChlLl9fY2hpbGRDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpKX1mdW5jdGlvbiB1KGUsdCl7dmFyIG49bChlKSxyPWUuZ2V0VmFsdWVQcm9wZXJ0eSh0KSxhPW5bdF07cmV0dXJuIGkuY2FsbChuLHQpJiZhLnZhbHVlPT09cnx8KGE9blt0XT1uZXcgZS5jb25zdHJ1Y3RvcihyLGUsdCkpLGF9ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBjKGUsdCxyLG8pe2lmKG4uYXNzZXJ0KGUudmFsdWUpLDA9PT10KXJldHVybiBwO3ZhciBzPWUudmFsdWUubGVuZ3RoO2lmKHM8MSlyZXR1cm4gcDt2YXIgdT1hcmd1bWVudHMubGVuZ3RoOzI9PT11PyhyPTAsbz1zKTozPT09dT8ocj1NYXRoLm1heChyLDApLG89cyk6KHI9TWF0aC5tYXgociwwKSxvPU1hdGgubWluKG8scykpLGEuYXNzZXJ0KHIpLGEuYXNzZXJ0KG8pO2Zvcih2YXIgYz1PYmplY3QuY3JlYXRlKG51bGwpLGQ9bChlKSxmPXI7ZjxvOysrZilpZihpLmNhbGwoZS52YWx1ZSxmKSl7dmFyIHk9ZS5nZXQoZik7aWYoeS5uYW1lIT09Zil0aHJvdyBuZXcgRXJyb3IoIiIpO3ZhciBtPWYrdDt5Lm5hbWU9bSxjW21dPXksZGVsZXRlIGRbZl19cmV0dXJuIGRlbGV0ZSBkLmxlbmd0aCxmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBjKXt2YXIgbj1jW3RdO2lmKG4ubmFtZSE9PSt0KXRocm93IG5ldyBFcnJvcigiIik7ZFt0XT1uLGUudmFsdWVbdF09bi52YWx1ZX19fWZ1bmN0aW9uIGQoZSl7aWYoIShlIGluc3RhbmNlb2YgbykpdGhyb3cgbmV3IEVycm9yKCIiKTt2YXIgdD1lLnBhcmVudFBhdGg7aWYoIXQpcmV0dXJuIGU7dmFyIHI9dC52YWx1ZSxpPWwodCk7aWYocltlLm5hbWVdPT09ZS52YWx1ZSlpW2UubmFtZV09ZTtlbHNlIGlmKG4uY2hlY2socikpe3ZhciBhPXIuaW5kZXhPZihlLnZhbHVlKTthPj0wJiYoaVtlLm5hbWU9YV09ZSl9ZWxzZSByW2UubmFtZV09ZS52YWx1ZSxpW2UubmFtZV09ZTtpZihyW2UubmFtZV0hPT1lLnZhbHVlKXRocm93IG5ldyBFcnJvcigiIik7aWYoZS5wYXJlbnRQYXRoLmdldChlLm5hbWUpIT09ZSl0aHJvdyBuZXcgRXJyb3IoIiIpO3JldHVybiBlfXJldHVybiBzLmdldFZhbHVlUHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudmFsdWVbZV19LHMuZ2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgbj10aGlzLHI9ZS5sZW5ndGgsaT0wO2k8cjsrK2kpbj11KG4sZVtpXSk7cmV0dXJuIG59LHMuZWFjaD1mdW5jdGlvbihlLHQpe3ZhciBuPVtdLHI9dGhpcy52YWx1ZS5sZW5ndGgsYT0wO2ZvcihhPTA7YTxyOysrYSlpLmNhbGwodGhpcy52YWx1ZSxhKSYmKG5bYV09dGhpcy5nZXQoYSkpO2Zvcih0PXR8fHRoaXMsYT0wO2E8cjsrK2EpaS5jYWxsKG4sYSkmJmUuY2FsbCh0LG5bYV0pfSxzLm1hcD1mdW5jdGlvbihlLHQpe3ZhciBuPVtdO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe24ucHVzaChlLmNhbGwodGhpcyx0KSl9KSx0KSxufSxzLmZpbHRlcj1mdW5jdGlvbihlLHQpe3ZhciBuPVtdO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2UuY2FsbCh0aGlzLHQpJiZuLnB1c2godCl9KSx0KSxufSxzLnNoaWZ0PWZ1bmN0aW9uKCl7dmFyIGU9Yyh0aGlzLC0xKSx0PXRoaXMudmFsdWUuc2hpZnQoKTtyZXR1cm4gZSgpLHR9LHMudW5zaGlmdD1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgbj1jKHRoaXMsZS5sZW5ndGgpLHI9dGhpcy52YWx1ZS51bnNoaWZ0LmFwcGx5KHRoaXMudmFsdWUsZSk7cmV0dXJuIG4oKSxyfSxzLnB1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIG4uYXNzZXJ0KHRoaXMudmFsdWUpLGRlbGV0ZSBsKHRoaXMpLmxlbmd0aCx0aGlzLnZhbHVlLnB1c2guYXBwbHkodGhpcy52YWx1ZSxlKX0scy5wb3A9ZnVuY3Rpb24oKXtuLmFzc2VydCh0aGlzLnZhbHVlKTt2YXIgZT1sKHRoaXMpO3JldHVybiBkZWxldGUgZVt0aGlzLnZhbHVlLmxlbmd0aC0xXSxkZWxldGUgZS5sZW5ndGgsdGhpcy52YWx1ZS5wb3AoKX0scy5pbnNlcnRBdD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49Yyh0aGlzLHQtMSxlKTtpZihuPT09cCYmdDw9MSlyZXR1cm4gdGhpcztlPU1hdGgubWF4KGUsMCk7Zm9yKHZhciByPTE7cjx0Oysrcil0aGlzLnZhbHVlW2Urci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIG4oKSx0aGlzfSxzLmluc2VydEJlZm9yZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49dGhpcy5wYXJlbnRQYXRoLHI9ZS5sZW5ndGgsaT1bdGhpcy5uYW1lXSxhPTA7YTxyOysrYSlpLnB1c2goZVthXSk7cmV0dXJuIG4uaW5zZXJ0QXQuYXBwbHkobixpKX0scy5pbnNlcnRBZnRlcj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49dGhpcy5wYXJlbnRQYXRoLHI9ZS5sZW5ndGgsaT1bdGhpcy5uYW1lKzFdLGE9MDthPHI7KythKWkucHVzaChlW2FdKTtyZXR1cm4gbi5pbnNlcnRBdC5hcHBseShuLGkpfSxzLnJlcGxhY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9W10scj10aGlzLnBhcmVudFBhdGgudmFsdWUsaT1sKHRoaXMucGFyZW50UGF0aCksYT1hcmd1bWVudHMubGVuZ3RoO2lmKGQodGhpcyksbi5jaGVjayhyKSl7Zm9yKHZhciBvPXIubGVuZ3RoLHM9Yyh0aGlzLnBhcmVudFBhdGgsYS0xLHRoaXMubmFtZSsxKSx1PVt0aGlzLm5hbWUsMV0scD0wO3A8YTsrK3ApdS5wdXNoKGFyZ3VtZW50c1twXSk7dmFyIGY9ci5zcGxpY2UuYXBwbHkocix1KTtpZihmWzBdIT09dGhpcy52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIiIpO2lmKHIubGVuZ3RoIT09by0xK2EpdGhyb3cgbmV3IEVycm9yKCIiKTtpZihzKCksMD09PWEpZGVsZXRlIHRoaXMudmFsdWUsZGVsZXRlIGlbdGhpcy5uYW1lXSx0aGlzLl9fY2hpbGRDYWNoZT1udWxsO2Vsc2V7aWYoclt0aGlzLm5hbWVdIT09ZSl0aHJvdyBuZXcgRXJyb3IoIiIpO2Zvcih0aGlzLnZhbHVlIT09ZSYmKHRoaXMudmFsdWU9ZSx0aGlzLl9fY2hpbGRDYWNoZT1udWxsKSxwPTA7cDxhOysrcCl0LnB1c2godGhpcy5wYXJlbnRQYXRoLmdldCh0aGlzLm5hbWUrcCkpO2lmKHRbMF0hPT10aGlzKXRocm93IG5ldyBFcnJvcigiIil9fWVsc2UgaWYoMT09PWEpdGhpcy52YWx1ZSE9PWUmJih0aGlzLl9fY2hpbGRDYWNoZT1udWxsKSx0aGlzLnZhbHVlPXJbdGhpcy5uYW1lXT1lLHQucHVzaCh0aGlzKTtlbHNle2lmKDAhPT1hKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHJlcGxhY2UgcGF0aCIpO2RlbGV0ZSByW3RoaXMubmFtZV0sZGVsZXRlIHRoaXMudmFsdWUsdGhpcy5fX2NoaWxkQ2FjaGU9bnVsbH1yZXR1cm4gdH0sb30sZS5leHBvcnRzPXQuZGVmYXVsdH0sODA0MjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LG49ITEpe3JldHVybiBlLm9iamVjdD0oMCxyLm1lbWJlckV4cHJlc3Npb24pKGUub2JqZWN0LGUucHJvcGVydHksZS5jb21wdXRlZCksZS5wcm9wZXJ0eT10LGUuY29tcHV0ZWQ9ISFuLGV9O3ZhciByPW4oImViNWIiKX0sIjgyNmEiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIjRmMzgiKS5fX2ltcG9ydERlZmF1bHQobigiNDFiYSIpKSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUudXNlKHIuZGVmYXVsdCksbj10LlR5cGUsYT10Lm5hbWVkVHlwZXMsbz1hLk5vZGUscz1hLkV4cHJlc3Npb24sbD10LmJ1aWx0SW5UeXBlcy5hcnJheSx1PXQuYnVpbGRlcnMscD1mdW5jdGlvbiBlKHQsbil7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IEVycm9yKCJTY29wZSBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgaW52b2tlZCB3aXRob3V0ICduZXcnIik7dmFyIHI7aWYoZC5hc3NlcnQodC52YWx1ZSksbil7aWYoIShuIGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IEVycm9yKCIiKTtyPW4uZGVwdGgrMX1lbHNlIG49bnVsbCxyPTA7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cGF0aDp7dmFsdWU6dH0sbm9kZTp7dmFsdWU6dC52YWx1ZX0saXNHbG9iYWw6e3ZhbHVlOiFuLGVudW1lcmFibGU6ITB9LGRlcHRoOnt2YWx1ZTpyfSxwYXJlbnQ6e3ZhbHVlOm59LGJpbmRpbmdzOnt2YWx1ZTp7fX0sdHlwZXM6e3ZhbHVlOnt9fX0pfSxjPVthLlByb2dyYW0sYS5GdW5jdGlvbixhLkNhdGNoQ2xhdXNlXSxkPW4ub3IuYXBwbHkobixjKTtwLmlzRXN0YWJsaXNoZWRCeT1mdW5jdGlvbihlKXtyZXR1cm4gZC5jaGVjayhlKX07dmFyIGY9cC5wcm90b3R5cGU7ZnVuY3Rpb24geShlLG4scil7dmFyIGk9ZS52YWx1ZTtlLnBhcmVudCYmYS5GdW5jdGlvbkV4cHJlc3Npb24uY2hlY2soZS5wYXJlbnQubm9kZSkmJmUucGFyZW50Lm5vZGUuaWQmJmgoZS5wYXJlbnQuZ2V0KCJpZCIpLG4pLGkmJihsLmNoZWNrKGkpP2UuZWFjaCgoZnVuY3Rpb24oZSl7bShlLG4scil9KSk6YS5GdW5jdGlvbi5jaGVjayhpKT8oZS5nZXQoInBhcmFtcyIpLmVhY2goKGZ1bmN0aW9uKGUpe2goZSxuKX0pKSxtKGUuZ2V0KCJib2R5IiksbixyKSk6YS5UeXBlQWxpYXMmJmEuVHlwZUFsaWFzLmNoZWNrKGkpfHxhLkludGVyZmFjZURlY2xhcmF0aW9uJiZhLkludGVyZmFjZURlY2xhcmF0aW9uLmNoZWNrKGkpfHxhLlRTVHlwZUFsaWFzRGVjbGFyYXRpb24mJmEuVFNUeXBlQWxpYXNEZWNsYXJhdGlvbi5jaGVjayhpKXx8YS5UU0ludGVyZmFjZURlY2xhcmF0aW9uJiZhLlRTSW50ZXJmYWNlRGVjbGFyYXRpb24uY2hlY2soaSk/VChlLmdldCgiaWQiKSxyKTphLlZhcmlhYmxlRGVjbGFyYXRvci5jaGVjayhpKT8oaChlLmdldCgiaWQiKSxuKSxtKGUuZ2V0KCJpbml0IiksbixyKSk6IkltcG9ydFNwZWNpZmllciI9PT1pLnR5cGV8fCJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiPT09aS50eXBlfHwiSW1wb3J0RGVmYXVsdFNwZWNpZmllciI9PT1pLnR5cGU/aChlLmdldChpLmxvY2FsPyJsb2NhbCI6aS5uYW1lPyJuYW1lIjoiaWQiKSxuKTpvLmNoZWNrKGkpJiYhcy5jaGVjayhpKSYmdC5lYWNoRmllbGQoaSwoZnVuY3Rpb24odCxpKXt2YXIgYT1lLmdldCh0KTtpZighZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS52YWx1ZT09PXR8fCEoIUFycmF5LmlzQXJyYXkoZS52YWx1ZSl8fDAhPT1lLnZhbHVlLmxlbmd0aHx8IUFycmF5LmlzQXJyYXkodCl8fDAhPT10Lmxlbmd0aCl9KGEsaSkpdGhyb3cgbmV3IEVycm9yKCIiKTttKGEsbixyKX0pKSl9ZnVuY3Rpb24gbShlLHQsbil7dmFyIHI9ZS52YWx1ZTtpZighcnx8cy5jaGVjayhyKSk7ZWxzZSBpZihhLkZ1bmN0aW9uRGVjbGFyYXRpb24uY2hlY2socikmJm51bGwhPT1yLmlkKWgoZS5nZXQoImlkIiksdCk7ZWxzZSBpZihhLkNsYXNzRGVjbGFyYXRpb24mJmEuQ2xhc3NEZWNsYXJhdGlvbi5jaGVjayhyKSloKGUuZ2V0KCJpZCIpLHQpO2Vsc2UgaWYoZC5jaGVjayhyKSl7aWYoYS5DYXRjaENsYXVzZS5jaGVjayhyKSYmYS5JZGVudGlmaWVyLmNoZWNrKHIucGFyYW0pKXt2YXIgbz1yLnBhcmFtLm5hbWUsbD1pLmNhbGwodCxvKTt5KGUuZ2V0KCJib2R5IiksdCxuKSxsfHxkZWxldGUgdFtvXX19ZWxzZSB5KGUsdCxuKX1mdW5jdGlvbiBoKGUsdCl7dmFyIG49ZS52YWx1ZTthLlBhdHRlcm4uYXNzZXJ0KG4pLGEuSWRlbnRpZmllci5jaGVjayhuKT9pLmNhbGwodCxuLm5hbWUpP3Rbbi5uYW1lXS5wdXNoKGUpOnRbbi5uYW1lXT1bZV06YS5Bc3NpZ25tZW50UGF0dGVybiYmYS5Bc3NpZ25tZW50UGF0dGVybi5jaGVjayhuKT9oKGUuZ2V0KCJsZWZ0IiksdCk6YS5PYmplY3RQYXR0ZXJuJiZhLk9iamVjdFBhdHRlcm4uY2hlY2sobik/ZS5nZXQoInByb3BlcnRpZXMiKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgbj1lLnZhbHVlO2EuUGF0dGVybi5jaGVjayhuKT9oKGUsdCk6YS5Qcm9wZXJ0eS5jaGVjayhuKT9oKGUuZ2V0KCJ2YWx1ZSIpLHQpOmEuU3ByZWFkUHJvcGVydHkmJmEuU3ByZWFkUHJvcGVydHkuY2hlY2sobikmJmgoZS5nZXQoImFyZ3VtZW50IiksdCl9KSk6YS5BcnJheVBhdHRlcm4mJmEuQXJyYXlQYXR0ZXJuLmNoZWNrKG4pP2UuZ2V0KCJlbGVtZW50cyIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPWUudmFsdWU7YS5QYXR0ZXJuLmNoZWNrKG4pP2goZSx0KTphLlNwcmVhZEVsZW1lbnQmJmEuU3ByZWFkRWxlbWVudC5jaGVjayhuKSYmaChlLmdldCgiYXJndW1lbnQiKSx0KX0pKTphLlByb3BlcnR5UGF0dGVybiYmYS5Qcm9wZXJ0eVBhdHRlcm4uY2hlY2sobik/aChlLmdldCgicGF0dGVybiIpLHQpOihhLlNwcmVhZEVsZW1lbnRQYXR0ZXJuJiZhLlNwcmVhZEVsZW1lbnRQYXR0ZXJuLmNoZWNrKG4pfHxhLlJlc3RFbGVtZW50JiZhLlJlc3RFbGVtZW50LmNoZWNrKG4pfHxhLlNwcmVhZFByb3BlcnR5UGF0dGVybiYmYS5TcHJlYWRQcm9wZXJ0eVBhdHRlcm4uY2hlY2sobikpJiZoKGUuZ2V0KCJhcmd1bWVudCIpLHQpfWZ1bmN0aW9uIFQoZSx0KXt2YXIgbj1lLnZhbHVlO2EuUGF0dGVybi5hc3NlcnQobiksYS5JZGVudGlmaWVyLmNoZWNrKG4pJiYoaS5jYWxsKHQsbi5uYW1lKT90W24ubmFtZV0ucHVzaChlKTp0W24ubmFtZV09W2VdKX1yZXR1cm4gZi5kaWRTY2FuPSExLGYuZGVjbGFyZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2NhbigpLGkuY2FsbCh0aGlzLmJpbmRpbmdzLGUpfSxmLmRlY2xhcmVzVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zY2FuKCksaS5jYWxsKHRoaXMudHlwZXMsZSl9LGYuZGVjbGFyZVRlbXBvcmFyeT1mdW5jdGlvbihlKXtpZihlKXtpZighL15bYS16JF9dL2kudGVzdChlKSl0aHJvdyBuZXcgRXJyb3IoIiIpfWVsc2UgZT0idCQiO2UrPXRoaXMuZGVwdGgudG9TdHJpbmcoMzYpKyIkIix0aGlzLnNjYW4oKTtmb3IodmFyIG49MDt0aGlzLmRlY2xhcmVzKGUrbik7KSsrbjt2YXIgcj1lK247cmV0dXJuIHRoaXMuYmluZGluZ3Nbcl09dC5idWlsZGVycy5pZGVudGlmaWVyKHIpfSxmLmluamVjdFRlbXBvcmFyeT1mdW5jdGlvbihlLHQpe2V8fChlPXRoaXMuZGVjbGFyZVRlbXBvcmFyeSgpKTt2YXIgbj10aGlzLnBhdGguZ2V0KCJib2R5Iik7cmV0dXJuIGEuQmxvY2tTdGF0ZW1lbnQuY2hlY2sobi52YWx1ZSkmJihuPW4uZ2V0KCJib2R5IikpLG4udW5zaGlmdCh1LnZhcmlhYmxlRGVjbGFyYXRpb24oInZhciIsW3UudmFyaWFibGVEZWNsYXJhdG9yKGUsdHx8bnVsbCldKSksZX0sZi5zY2FuPWZ1bmN0aW9uKGUpe2lmKGV8fCF0aGlzLmRpZFNjYW4pe2Zvcih2YXIgdCBpbiB0aGlzLmJpbmRpbmdzKWRlbGV0ZSB0aGlzLmJpbmRpbmdzW3RdOyhmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS52YWx1ZTtpZihkLmFzc2VydChyKSxhLkNhdGNoQ2xhdXNlLmNoZWNrKHIpKXt2YXIgaT1lLmdldCgicGFyYW0iKTtpLnZhbHVlJiZoKGksdCl9ZWxzZSB5KGUsdCxuKX0pKHRoaXMucGF0aCx0aGlzLmJpbmRpbmdzLHRoaXMudHlwZXMpLHRoaXMuZGlkU2Nhbj0hMH19LGYuZ2V0QmluZGluZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY2FuKCksdGhpcy5iaW5kaW5nc30sZi5nZXRUeXBlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNjYW4oKSx0aGlzLnR5cGVzfSxmLmxvb2t1cD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpczt0JiYhdC5kZWNsYXJlcyhlKTt0PXQucGFyZW50KTtyZXR1cm4gdH0sZi5sb29rdXBUeXBlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzO3QmJiF0LmRlY2xhcmVzVHlwZShlKTt0PXQucGFyZW50KTtyZXR1cm4gdH0sZi5nZXRHbG9iYWxTY29wZT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzOyFlLmlzR2xvYmFsOyllPWUucGFyZW50O3JldHVybiBlfSxwfSxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiODVhYiI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiNGYzOCIpLGk9ci5fX2ltcG9ydERlZmF1bHQobigiMTI2NyIpKSxhPXIuX19pbXBvcnREZWZhdWx0KG4oImE3MzciKSksbz1yLl9faW1wb3J0RGVmYXVsdChuKCI0MWJhIikpLHM9ci5fX2ltcG9ydERlZmF1bHQobigiMDljOCIpKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7ZS51c2UoaS5kZWZhdWx0KSxlLnVzZShhLmRlZmF1bHQpO3ZhciB0PWUudXNlKG8uZGVmYXVsdCksbj10Lm5hbWVkVHlwZXMscj10LlR5cGUuZGVmLGw9dC5UeXBlLm9yLHU9ZS51c2Uocy5kZWZhdWx0KS5kZWZhdWx0cyxwPXQuVHlwZS5mcm9tKChmdW5jdGlvbihlLHQpe3JldHVybiEoIW4uU3RyaW5nTGl0ZXJhbHx8IW4uU3RyaW5nTGl0ZXJhbC5jaGVjayhlLHQpKXx8ISghbi5MaXRlcmFsfHwhbi5MaXRlcmFsLmNoZWNrKGUsdCl8fCJzdHJpbmciIT10eXBlb2YgZS52YWx1ZSl9KSwiU3RyaW5nTGl0ZXJhbCIpO3IoIlRTVHlwZSIpLmJhc2VzKCJOb2RlIik7dmFyIGM9bChyKCJJZGVudGlmaWVyIikscigiVFNRdWFsaWZpZWROYW1lIikpO3IoIlRTVHlwZVJlZmVyZW5jZSIpLmJhc2VzKCJUU1R5cGUiLCJUU0hhc09wdGlvbmFsVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKS5idWlsZCgidHlwZU5hbWUiLCJ0eXBlUGFyYW1ldGVycyIpLmZpZWxkKCJ0eXBlTmFtZSIsYykscigiVFNIYXNPcHRpb25hbFR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIikuZmllbGQoInR5cGVQYXJhbWV0ZXJzIixsKHIoIlRTVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKSxudWxsKSx1Lm51bGwpLHIoIlRTSGFzT3B0aW9uYWxUeXBlUGFyYW1ldGVycyIpLmZpZWxkKCJ0eXBlUGFyYW1ldGVycyIsbChyKCJUU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIpLG51bGwsdm9pZCAwKSx1Lm51bGwpLHIoIlRTSGFzT3B0aW9uYWxUeXBlQW5ub3RhdGlvbiIpLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIsbChyKCJUU1R5cGVBbm5vdGF0aW9uIiksbnVsbCksdS5udWxsKSxyKCJUU1F1YWxpZmllZE5hbWUiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJsZWZ0IiwicmlnaHQiKS5maWVsZCgibGVmdCIsYykuZmllbGQoInJpZ2h0IixjKSxyKCJUU0FzRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIiwiUGF0dGVybiIpLmJ1aWxkKCJleHByZXNzaW9uIiwidHlwZUFubm90YXRpb24iKS5maWVsZCgiZXhwcmVzc2lvbiIscigiRXhwcmVzc2lvbiIpKS5maWVsZCgidHlwZUFubm90YXRpb24iLHIoIlRTVHlwZSIpKS5maWVsZCgiZXh0cmEiLGwoe3BhcmVudGhlc2l6ZWQ6Qm9vbGVhbn0sbnVsbCksdS5udWxsKSxyKCJUU05vbk51bGxFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iLCJQYXR0ZXJuIikuYnVpbGQoImV4cHJlc3Npb24iKS5maWVsZCgiZXhwcmVzc2lvbiIscigiRXhwcmVzc2lvbiIpKSxbIlRTQW55S2V5d29yZCIsIlRTQmlnSW50S2V5d29yZCIsIlRTQm9vbGVhbktleXdvcmQiLCJUU05ldmVyS2V5d29yZCIsIlRTTnVsbEtleXdvcmQiLCJUU051bWJlcktleXdvcmQiLCJUU09iamVjdEtleXdvcmQiLCJUU1N0cmluZ0tleXdvcmQiLCJUU1N5bWJvbEtleXdvcmQiLCJUU1VuZGVmaW5lZEtleXdvcmQiLCJUU1Vua25vd25LZXl3b3JkIiwiVFNWb2lkS2V5d29yZCIsIlRTVGhpc1R5cGUiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKGUpLmJhc2VzKCJUU1R5cGUiKS5idWlsZCgpfSkpLHIoIlRTQXJyYXlUeXBlIikuYmFzZXMoIlRTVHlwZSIpLmJ1aWxkKCJlbGVtZW50VHlwZSIpLmZpZWxkKCJlbGVtZW50VHlwZSIscigiVFNUeXBlIikpLHIoIlRTTGl0ZXJhbFR5cGUiKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoImxpdGVyYWwiKS5maWVsZCgibGl0ZXJhbCIsbChyKCJOdW1lcmljTGl0ZXJhbCIpLHIoIlN0cmluZ0xpdGVyYWwiKSxyKCJCb29sZWFuTGl0ZXJhbCIpLHIoIlRlbXBsYXRlTGl0ZXJhbCIpLHIoIlVuYXJ5RXhwcmVzc2lvbiIpKSksWyJUU1VuaW9uVHlwZSIsIlRTSW50ZXJzZWN0aW9uVHlwZSJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoZSkuYmFzZXMoIlRTVHlwZSIpLmJ1aWxkKCJ0eXBlcyIpLmZpZWxkKCJ0eXBlcyIsW3IoIlRTVHlwZSIpXSl9KSkscigiVFNDb25kaXRpb25hbFR5cGUiKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoImNoZWNrVHlwZSIsImV4dGVuZHNUeXBlIiwidHJ1ZVR5cGUiLCJmYWxzZVR5cGUiKS5maWVsZCgiY2hlY2tUeXBlIixyKCJUU1R5cGUiKSkuZmllbGQoImV4dGVuZHNUeXBlIixyKCJUU1R5cGUiKSkuZmllbGQoInRydWVUeXBlIixyKCJUU1R5cGUiKSkuZmllbGQoImZhbHNlVHlwZSIscigiVFNUeXBlIikpLHIoIlRTSW5mZXJUeXBlIikuYmFzZXMoIlRTVHlwZSIpLmJ1aWxkKCJ0eXBlUGFyYW1ldGVyIikuZmllbGQoInR5cGVQYXJhbWV0ZXIiLHIoIlRTVHlwZVBhcmFtZXRlciIpKSxyKCJUU1BhcmVudGhlc2l6ZWRUeXBlIikuYmFzZXMoIlRTVHlwZSIpLmJ1aWxkKCJ0eXBlQW5ub3RhdGlvbiIpLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIscigiVFNUeXBlIikpO3ZhciBkPVtsKHIoIklkZW50aWZpZXIiKSxyKCJSZXN0RWxlbWVudCIpLHIoIkFycmF5UGF0dGVybiIpLHIoIk9iamVjdFBhdHRlcm4iKSldO1siVFNGdW5jdGlvblR5cGUiLCJUU0NvbnN0cnVjdG9yVHlwZSJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoZSkuYmFzZXMoIlRTVHlwZSIsIlRTSGFzT3B0aW9uYWxUeXBlUGFyYW1ldGVycyIsIlRTSGFzT3B0aW9uYWxUeXBlQW5ub3RhdGlvbiIpLmJ1aWxkKCJwYXJhbWV0ZXJzIikuZmllbGQoInBhcmFtZXRlcnMiLGQpfSkpLHIoIlRTRGVjbGFyZUZ1bmN0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIiwiVFNIYXNPcHRpb25hbFR5cGVQYXJhbWV0ZXJzIikuYnVpbGQoImlkIiwicGFyYW1zIiwicmV0dXJuVHlwZSIpLmZpZWxkKCJkZWNsYXJlIixCb29sZWFuLHUuZmFsc2UpLmZpZWxkKCJhc3luYyIsQm9vbGVhbix1LmZhbHNlKS5maWVsZCgiZ2VuZXJhdG9yIixCb29sZWFuLHUuZmFsc2UpLmZpZWxkKCJpZCIsbChyKCJJZGVudGlmaWVyIiksbnVsbCksdS5udWxsKS5maWVsZCgicGFyYW1zIixbcigiUGF0dGVybiIpXSkuZmllbGQoInJldHVyblR5cGUiLGwocigiVFNUeXBlQW5ub3RhdGlvbiIpLHIoIk5vb3AiKSxudWxsKSx1Lm51bGwpLHIoIlRTRGVjbGFyZU1ldGhvZCIpLmJhc2VzKCJEZWNsYXJhdGlvbiIsIlRTSGFzT3B0aW9uYWxUeXBlUGFyYW1ldGVycyIpLmJ1aWxkKCJrZXkiLCJwYXJhbXMiLCJyZXR1cm5UeXBlIikuZmllbGQoImFzeW5jIixCb29sZWFuLHUuZmFsc2UpLmZpZWxkKCJnZW5lcmF0b3IiLEJvb2xlYW4sdS5mYWxzZSkuZmllbGQoInBhcmFtcyIsW3IoIlBhdHRlcm4iKV0pLmZpZWxkKCJhYnN0cmFjdCIsQm9vbGVhbix1LmZhbHNlKS5maWVsZCgiYWNjZXNzaWJpbGl0eSIsbCgicHVibGljIiwicHJpdmF0ZSIsInByb3RlY3RlZCIsdm9pZCAwKSx1W3ZvaWQgMF0pLmZpZWxkKCJzdGF0aWMiLEJvb2xlYW4sdS5mYWxzZSkuZmllbGQoImNvbXB1dGVkIixCb29sZWFuLHUuZmFsc2UpLmZpZWxkKCJvcHRpb25hbCIsQm9vbGVhbix1LmZhbHNlKS5maWVsZCgia2V5IixsKHIoIklkZW50aWZpZXIiKSxyKCJTdHJpbmdMaXRlcmFsIikscigiTnVtZXJpY0xpdGVyYWwiKSxyKCJFeHByZXNzaW9uIikpKS5maWVsZCgia2luZCIsbCgiZ2V0Iiwic2V0IiwibWV0aG9kIiwiY29uc3RydWN0b3IiKSwoZnVuY3Rpb24oKXtyZXR1cm4ibWV0aG9kIn0pKS5maWVsZCgiYWNjZXNzIixsKCJwdWJsaWMiLCJwcml2YXRlIiwicHJvdGVjdGVkIix2b2lkIDApLHVbdm9pZCAwXSkuZmllbGQoImRlY29yYXRvcnMiLGwoW3IoIkRlY29yYXRvciIpXSxudWxsKSx1Lm51bGwpLmZpZWxkKCJyZXR1cm5UeXBlIixsKHIoIlRTVHlwZUFubm90YXRpb24iKSxyKCJOb29wIiksbnVsbCksdS5udWxsKSxyKCJUU01hcHBlZFR5cGUiKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoInR5cGVQYXJhbWV0ZXIiLCJ0eXBlQW5ub3RhdGlvbiIpLmZpZWxkKCJyZWFkb25seSIsbChCb29sZWFuLCIrIiwiLSIpLHUuZmFsc2UpLmZpZWxkKCJ0eXBlUGFyYW1ldGVyIixyKCJUU1R5cGVQYXJhbWV0ZXIiKSkuZmllbGQoIm9wdGlvbmFsIixsKEJvb2xlYW4sIisiLCItIiksdS5mYWxzZSkuZmllbGQoInR5cGVBbm5vdGF0aW9uIixsKHIoIlRTVHlwZSIpLG51bGwpLHUubnVsbCkscigiVFNUdXBsZVR5cGUiKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoImVsZW1lbnRUeXBlcyIpLmZpZWxkKCJlbGVtZW50VHlwZXMiLFtsKHIoIlRTVHlwZSIpLHIoIlRTTmFtZWRUdXBsZU1lbWJlciIpKV0pLHIoIlRTTmFtZWRUdXBsZU1lbWJlciIpLmJhc2VzKCJUU1R5cGUiKS5idWlsZCgibGFiZWwiLCJlbGVtZW50VHlwZSIsIm9wdGlvbmFsIikuZmllbGQoImxhYmVsIixyKCJJZGVudGlmaWVyIikpLmZpZWxkKCJvcHRpb25hbCIsQm9vbGVhbix1LmZhbHNlKS5maWVsZCgiZWxlbWVudFR5cGUiLHIoIlRTVHlwZSIpKSxyKCJUU1Jlc3RUeXBlIikuYmFzZXMoIlRTVHlwZSIpLmJ1aWxkKCJ0eXBlQW5ub3RhdGlvbiIpLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIscigiVFNUeXBlIikpLHIoIlRTT3B0aW9uYWxUeXBlIikuYmFzZXMoIlRTVHlwZSIpLmJ1aWxkKCJ0eXBlQW5ub3RhdGlvbiIpLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIscigiVFNUeXBlIikpLHIoIlRTSW5kZXhlZEFjY2Vzc1R5cGUiKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoIm9iamVjdFR5cGUiLCJpbmRleFR5cGUiKS5maWVsZCgib2JqZWN0VHlwZSIscigiVFNUeXBlIikpLmZpZWxkKCJpbmRleFR5cGUiLHIoIlRTVHlwZSIpKSxyKCJUU1R5cGVPcGVyYXRvciIpLmJhc2VzKCJUU1R5cGUiKS5idWlsZCgib3BlcmF0b3IiKS5maWVsZCgib3BlcmF0b3IiLFN0cmluZykuZmllbGQoInR5cGVBbm5vdGF0aW9uIixyKCJUU1R5cGUiKSkscigiVFNUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInR5cGVBbm5vdGF0aW9uIikuZmllbGQoInR5cGVBbm5vdGF0aW9uIixsKHIoIlRTVHlwZSIpLHIoIlRTVHlwZUFubm90YXRpb24iKSkpLHIoIlRTSW5kZXhTaWduYXR1cmUiKS5iYXNlcygiRGVjbGFyYXRpb24iLCJUU0hhc09wdGlvbmFsVHlwZUFubm90YXRpb24iKS5idWlsZCgicGFyYW1ldGVycyIsInR5cGVBbm5vdGF0aW9uIikuZmllbGQoInBhcmFtZXRlcnMiLFtyKCJJZGVudGlmaWVyIildKS5maWVsZCgicmVhZG9ubHkiLEJvb2xlYW4sdS5mYWxzZSkscigiVFNQcm9wZXJ0eVNpZ25hdHVyZSIpLmJhc2VzKCJEZWNsYXJhdGlvbiIsIlRTSGFzT3B0aW9uYWxUeXBlQW5ub3RhdGlvbiIpLmJ1aWxkKCJrZXkiLCJ0eXBlQW5ub3RhdGlvbiIsIm9wdGlvbmFsIikuZmllbGQoImtleSIscigiRXhwcmVzc2lvbiIpKS5maWVsZCgiY29tcHV0ZWQiLEJvb2xlYW4sdS5mYWxzZSkuZmllbGQoInJlYWRvbmx5IixCb29sZWFuLHUuZmFsc2UpLmZpZWxkKCJvcHRpb25hbCIsQm9vbGVhbix1LmZhbHNlKS5maWVsZCgiaW5pdGlhbGl6ZXIiLGwocigiRXhwcmVzc2lvbiIpLG51bGwpLHUubnVsbCkscigiVFNNZXRob2RTaWduYXR1cmUiKS5iYXNlcygiRGVjbGFyYXRpb24iLCJUU0hhc09wdGlvbmFsVHlwZVBhcmFtZXRlcnMiLCJUU0hhc09wdGlvbmFsVHlwZUFubm90YXRpb24iKS5idWlsZCgia2V5IiwicGFyYW1ldGVycyIsInR5cGVBbm5vdGF0aW9uIikuZmllbGQoImtleSIscigiRXhwcmVzc2lvbiIpKS5maWVsZCgiY29tcHV0ZWQiLEJvb2xlYW4sdS5mYWxzZSkuZmllbGQoIm9wdGlvbmFsIixCb29sZWFuLHUuZmFsc2UpLmZpZWxkKCJwYXJhbWV0ZXJzIixkKSxyKCJUU1R5cGVQcmVkaWNhdGUiKS5iYXNlcygiVFNUeXBlQW5ub3RhdGlvbiIsIlRTVHlwZSIpLmJ1aWxkKCJwYXJhbWV0ZXJOYW1lIiwidHlwZUFubm90YXRpb24iLCJhc3NlcnRzIikuZmllbGQoInBhcmFtZXRlck5hbWUiLGwocigiSWRlbnRpZmllciIpLHIoIlRTVGhpc1R5cGUiKSkpLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIsbChyKCJUU1R5cGVBbm5vdGF0aW9uIiksbnVsbCksdS5udWxsKS5maWVsZCgiYXNzZXJ0cyIsQm9vbGVhbix1LmZhbHNlKSxbIlRTQ2FsbFNpZ25hdHVyZURlY2xhcmF0aW9uIiwiVFNDb25zdHJ1Y3RTaWduYXR1cmVEZWNsYXJhdGlvbiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoZSkuYmFzZXMoIkRlY2xhcmF0aW9uIiwiVFNIYXNPcHRpb25hbFR5cGVQYXJhbWV0ZXJzIiwiVFNIYXNPcHRpb25hbFR5cGVBbm5vdGF0aW9uIikuYnVpbGQoInBhcmFtZXRlcnMiLCJ0eXBlQW5ub3RhdGlvbiIpLmZpZWxkKCJwYXJhbWV0ZXJzIixkKX0pKSxyKCJUU0VudW1NZW1iZXIiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJpZCIsImluaXRpYWxpemVyIikuZmllbGQoImlkIixsKHIoIklkZW50aWZpZXIiKSxwKSkuZmllbGQoImluaXRpYWxpemVyIixsKHIoIkV4cHJlc3Npb24iKSxudWxsKSx1Lm51bGwpLHIoIlRTVHlwZVF1ZXJ5IikuYmFzZXMoIlRTVHlwZSIpLmJ1aWxkKCJleHByTmFtZSIpLmZpZWxkKCJleHByTmFtZSIsbChjLHIoIlRTSW1wb3J0VHlwZSIpKSk7dmFyIGY9bChyKCJUU0NhbGxTaWduYXR1cmVEZWNsYXJhdGlvbiIpLHIoIlRTQ29uc3RydWN0U2lnbmF0dXJlRGVjbGFyYXRpb24iKSxyKCJUU0luZGV4U2lnbmF0dXJlIikscigiVFNNZXRob2RTaWduYXR1cmUiKSxyKCJUU1Byb3BlcnR5U2lnbmF0dXJlIikpO3IoIlRTVHlwZUxpdGVyYWwiKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoIm1lbWJlcnMiKS5maWVsZCgibWVtYmVycyIsW2ZdKSxyKCJUU1R5cGVQYXJhbWV0ZXIiKS5iYXNlcygiSWRlbnRpZmllciIpLmJ1aWxkKCJuYW1lIiwiY29uc3RyYWludCIsImRlZmF1bHQiKS5maWVsZCgibmFtZSIsU3RyaW5nKS5maWVsZCgiY29uc3RyYWludCIsbChyKCJUU1R5cGUiKSx2b2lkIDApLHVbdm9pZCAwXSkuZmllbGQoImRlZmF1bHQiLGwocigiVFNUeXBlIiksdm9pZCAwKSx1W3ZvaWQgMF0pLHIoIlRTVHlwZUFzc2VydGlvbiIpLmJhc2VzKCJFeHByZXNzaW9uIiwiUGF0dGVybiIpLmJ1aWxkKCJ0eXBlQW5ub3RhdGlvbiIsImV4cHJlc3Npb24iKS5maWVsZCgidHlwZUFubm90YXRpb24iLHIoIlRTVHlwZSIpKS5maWVsZCgiZXhwcmVzc2lvbiIscigiRXhwcmVzc2lvbiIpKS5maWVsZCgiZXh0cmEiLGwoe3BhcmVudGhlc2l6ZWQ6Qm9vbGVhbn0sbnVsbCksdS5udWxsKSxyKCJUU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJwYXJhbXMiKS5maWVsZCgicGFyYW1zIixbcigiVFNUeXBlUGFyYW1ldGVyIildKSxyKCJUU1R5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIikuYmFzZXMoIk5vZGUiKS5idWlsZCgicGFyYW1zIikuZmllbGQoInBhcmFtcyIsW3IoIlRTVHlwZSIpXSkscigiVFNFbnVtRGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgiaWQiLCJtZW1iZXJzIikuZmllbGQoImlkIixyKCJJZGVudGlmaWVyIikpLmZpZWxkKCJjb25zdCIsQm9vbGVhbix1LmZhbHNlKS5maWVsZCgiZGVjbGFyZSIsQm9vbGVhbix1LmZhbHNlKS5maWVsZCgibWVtYmVycyIsW3IoIlRTRW51bU1lbWJlciIpXSkuZmllbGQoImluaXRpYWxpemVyIixsKHIoIkV4cHJlc3Npb24iKSxudWxsKSx1Lm51bGwpLHIoIlRTVHlwZUFsaWFzRGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iLCJUU0hhc09wdGlvbmFsVHlwZVBhcmFtZXRlcnMiKS5idWlsZCgiaWQiLCJ0eXBlQW5ub3RhdGlvbiIpLmZpZWxkKCJpZCIscigiSWRlbnRpZmllciIpKS5maWVsZCgiZGVjbGFyZSIsQm9vbGVhbix1LmZhbHNlKS5maWVsZCgidHlwZUFubm90YXRpb24iLHIoIlRTVHlwZSIpKSxyKCJUU01vZHVsZUJsb2NrIikuYmFzZXMoIk5vZGUiKS5idWlsZCgiYm9keSIpLmZpZWxkKCJib2R5IixbcigiU3RhdGVtZW50IildKSxyKCJUU01vZHVsZURlY2xhcmF0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImlkIiwiYm9keSIpLmZpZWxkKCJpZCIsbChwLGMpKS5maWVsZCgiZGVjbGFyZSIsQm9vbGVhbix1LmZhbHNlKS5maWVsZCgiZ2xvYmFsIixCb29sZWFuLHUuZmFsc2UpLmZpZWxkKCJib2R5IixsKHIoIlRTTW9kdWxlQmxvY2siKSxyKCJUU01vZHVsZURlY2xhcmF0aW9uIiksbnVsbCksdS5udWxsKSxyKCJUU0ltcG9ydFR5cGUiKS5iYXNlcygiVFNUeXBlIiwiVFNIYXNPcHRpb25hbFR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIikuYnVpbGQoImFyZ3VtZW50IiwicXVhbGlmaWVyIiwidHlwZVBhcmFtZXRlcnMiKS5maWVsZCgiYXJndW1lbnQiLHApLmZpZWxkKCJxdWFsaWZpZXIiLGwoYyx2b2lkIDApLHVbdm9pZCAwXSkscigiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJpZCIsIm1vZHVsZVJlZmVyZW5jZSIpLmZpZWxkKCJpZCIscigiSWRlbnRpZmllciIpKS5maWVsZCgiaXNFeHBvcnQiLEJvb2xlYW4sdS5mYWxzZSkuZmllbGQoIm1vZHVsZVJlZmVyZW5jZSIsbChjLHIoIlRTRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UiKSkpLHIoIlRTRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UiKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgiZXhwcmVzc2lvbiIpLmZpZWxkKCJleHByZXNzaW9uIixwKSxyKCJUU0V4cG9ydEFzc2lnbm1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoImV4cHJlc3Npb24iKS5maWVsZCgiZXhwcmVzc2lvbiIscigiRXhwcmVzc2lvbiIpKSxyKCJUU05hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImlkIikuZmllbGQoImlkIixyKCJJZGVudGlmaWVyIikpLHIoIlRTSW50ZXJmYWNlQm9keSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImJvZHkiKS5maWVsZCgiYm9keSIsW2ZdKSxyKCJUU0V4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cyIpLmJhc2VzKCJUU1R5cGUiLCJUU0hhc09wdGlvbmFsVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKS5idWlsZCgiZXhwcmVzc2lvbiIsInR5cGVQYXJhbWV0ZXJzIikuZmllbGQoImV4cHJlc3Npb24iLGMpLHIoIlRTSW50ZXJmYWNlRGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iLCJUU0hhc09wdGlvbmFsVHlwZVBhcmFtZXRlcnMiKS5idWlsZCgiaWQiLCJib2R5IikuZmllbGQoImlkIixjKS5maWVsZCgiZGVjbGFyZSIsQm9vbGVhbix1LmZhbHNlKS5maWVsZCgiZXh0ZW5kcyIsbChbcigiVFNFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHMiKV0sbnVsbCksdS5udWxsKS5maWVsZCgiYm9keSIscigiVFNJbnRlcmZhY2VCb2R5IikpLHIoIlRTUGFyYW1ldGVyUHJvcGVydHkiKS5iYXNlcygiUGF0dGVybiIpLmJ1aWxkKCJwYXJhbWV0ZXIiKS5maWVsZCgiYWNjZXNzaWJpbGl0eSIsbCgicHVibGljIiwicHJpdmF0ZSIsInByb3RlY3RlZCIsdm9pZCAwKSx1W3ZvaWQgMF0pLmZpZWxkKCJyZWFkb25seSIsQm9vbGVhbix1LmZhbHNlKS5maWVsZCgicGFyYW1ldGVyIixsKHIoIklkZW50aWZpZXIiKSxyKCJBc3NpZ25tZW50UGF0dGVybiIpKSkscigiQ2xhc3NQcm9wZXJ0eSIpLmZpZWxkKCJhY2Nlc3MiLGwoInB1YmxpYyIsInByaXZhdGUiLCJwcm90ZWN0ZWQiLHZvaWQgMCksdVt2b2lkIDBdKSxyKCJDbGFzc0JvZHkiKS5maWVsZCgiYm9keSIsW2wocigiTWV0aG9kRGVmaW5pdGlvbiIpLHIoIlZhcmlhYmxlRGVjbGFyYXRvciIpLHIoIkNsYXNzUHJvcGVydHlEZWZpbml0aW9uIikscigiQ2xhc3NQcm9wZXJ0eSIpLHIoIkNsYXNzUHJpdmF0ZVByb3BlcnR5IikscigiQ2xhc3NNZXRob2QiKSxyKCJDbGFzc1ByaXZhdGVNZXRob2QiKSxyKCJUU0RlY2xhcmVNZXRob2QiKSxmKV0pfSxlLmV4cG9ydHM9dC5kZWZhdWx0fSw4ODEwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmlzRnVuY3Rpb25EZWNsYXJhdGlvbikoZSl8fCgwLHIuaXNDbGFzc0RlY2xhcmF0aW9uKShlKXx8KDAsaS5kZWZhdWx0KShlKX07dmFyIHI9bigiYzQ4NSIpLGk9bigiYzEwZCIpfSwiOGI0NCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKCEoMCxyLmlzQmxvY2tTdGF0ZW1lbnQpKGUpfHwhKDAsci5pc0Z1bmN0aW9uKSh0KSYmISgwLHIuaXNDYXRjaENsYXVzZSkodCkpJiYoISghKDAsci5pc1BhdHRlcm4pKGUpfHwhKDAsci5pc0Z1bmN0aW9uKSh0KSYmISgwLHIuaXNDYXRjaENsYXVzZSkodCkpfHwoMCxyLmlzU2NvcGFibGUpKGUpKX07dmFyIHI9bigiYzQ4NSIpfSwiOGI2MSI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCI1N2RlIik7Y29uc3QgaT0oMCxyLmRlZmluZUFsaWFzZWRUeXBlKSgiRmxvdyIpLGE9ZT0+e2koZSx7YnVpbGRlcjpbImlkIiwidHlwZVBhcmFtZXRlcnMiLCJleHRlbmRzIiwiYm9keSJdLHZpc2l0b3I6WyJpZCIsInR5cGVQYXJhbWV0ZXJzIiwiZXh0ZW5kcyIsIm1peGlucyIsImltcGxlbWVudHMiLCJib2R5Il0sYWxpYXNlczpbIkZsb3dEZWNsYXJhdGlvbiIsIlN0YXRlbWVudCIsIkRlY2xhcmF0aW9uIl0sZmllbGRzOntpZDooMCxyLnZhbGlkYXRlVHlwZSkoIklkZW50aWZpZXIiKSx0eXBlUGFyYW1ldGVyczooMCxyLnZhbGlkYXRlT3B0aW9uYWxUeXBlKSgiVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIiksZXh0ZW5kczooMCxyLnZhbGlkYXRlT3B0aW9uYWwpKCgwLHIuYXJyYXlPZlR5cGUpKCJJbnRlcmZhY2VFeHRlbmRzIikpLG1peGluczooMCxyLnZhbGlkYXRlT3B0aW9uYWwpKCgwLHIuYXJyYXlPZlR5cGUpKCJJbnRlcmZhY2VFeHRlbmRzIikpLGltcGxlbWVudHM6KDAsci52YWxpZGF0ZU9wdGlvbmFsKSgoMCxyLmFycmF5T2ZUeXBlKSgiQ2xhc3NJbXBsZW1lbnRzIikpLGJvZHk6KDAsci52YWxpZGF0ZVR5cGUpKCJPYmplY3RUeXBlQW5ub3RhdGlvbiIpfX0pfTtpKCJBbnlUeXBlQW5ub3RhdGlvbiIse2FsaWFzZXM6WyJGbG93VHlwZSIsIkZsb3dCYXNlQW5ub3RhdGlvbiJdfSksaSgiQXJyYXlUeXBlQW5ub3RhdGlvbiIse3Zpc2l0b3I6WyJlbGVtZW50VHlwZSJdLGFsaWFzZXM6WyJGbG93VHlwZSJdLGZpZWxkczp7ZWxlbWVudFR5cGU6KDAsci52YWxpZGF0ZVR5cGUpKCJGbG93VHlwZSIpfX0pLGkoIkJvb2xlYW5UeXBlQW5ub3RhdGlvbiIse2FsaWFzZXM6WyJGbG93VHlwZSIsIkZsb3dCYXNlQW5ub3RhdGlvbiJdfSksaSgiQm9vbGVhbkxpdGVyYWxUeXBlQW5ub3RhdGlvbiIse2J1aWxkZXI6WyJ2YWx1ZSJdLGFsaWFzZXM6WyJGbG93VHlwZSJdLGZpZWxkczp7dmFsdWU6KDAsci52YWxpZGF0ZSkoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIikpfX0pLGkoIk51bGxMaXRlcmFsVHlwZUFubm90YXRpb24iLHthbGlhc2VzOlsiRmxvd1R5cGUiLCJGbG93QmFzZUFubm90YXRpb24iXX0pLGkoIkNsYXNzSW1wbGVtZW50cyIse3Zpc2l0b3I6WyJpZCIsInR5cGVQYXJhbWV0ZXJzIl0sZmllbGRzOntpZDooMCxyLnZhbGlkYXRlVHlwZSkoIklkZW50aWZpZXIiKSx0eXBlUGFyYW1ldGVyczooMCxyLnZhbGlkYXRlT3B0aW9uYWxUeXBlKSgiVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKX19KSxhKCJEZWNsYXJlQ2xhc3MiKSxpKCJEZWNsYXJlRnVuY3Rpb24iLHt2aXNpdG9yOlsiaWQiXSxhbGlhc2VzOlsiRmxvd0RlY2xhcmF0aW9uIiwiU3RhdGVtZW50IiwiRGVjbGFyYXRpb24iXSxmaWVsZHM6e2lkOigwLHIudmFsaWRhdGVUeXBlKSgiSWRlbnRpZmllciIpLHByZWRpY2F0ZTooMCxyLnZhbGlkYXRlT3B0aW9uYWxUeXBlKSgiRGVjbGFyZWRQcmVkaWNhdGUiKX19KSxhKCJEZWNsYXJlSW50ZXJmYWNlIiksaSgiRGVjbGFyZU1vZHVsZSIse2J1aWxkZXI6WyJpZCIsImJvZHkiLCJraW5kIl0sdmlzaXRvcjpbImlkIiwiYm9keSJdLGFsaWFzZXM6WyJGbG93RGVjbGFyYXRpb24iLCJTdGF0ZW1lbnQiLCJEZWNsYXJhdGlvbiJdLGZpZWxkczp7aWQ6KDAsci52YWxpZGF0ZVR5cGUpKFsiSWRlbnRpZmllciIsIlN0cmluZ0xpdGVyYWwiXSksYm9keTooMCxyLnZhbGlkYXRlVHlwZSkoIkJsb2NrU3RhdGVtZW50Iiksa2luZDooMCxyLnZhbGlkYXRlT3B0aW9uYWwpKCgwLHIuYXNzZXJ0T25lT2YpKCJDb21tb25KUyIsIkVTIikpfX0pLGkoIkRlY2xhcmVNb2R1bGVFeHBvcnRzIix7dmlzaXRvcjpbInR5cGVBbm5vdGF0aW9uIl0sYWxpYXNlczpbIkZsb3dEZWNsYXJhdGlvbiIsIlN0YXRlbWVudCIsIkRlY2xhcmF0aW9uIl0sZmllbGRzOnt0eXBlQW5ub3RhdGlvbjooMCxyLnZhbGlkYXRlVHlwZSkoIlR5cGVBbm5vdGF0aW9uIil9fSksaSgiRGVjbGFyZVR5cGVBbGlhcyIse3Zpc2l0b3I6WyJpZCIsInR5cGVQYXJhbWV0ZXJzIiwicmlnaHQiXSxhbGlhc2VzOlsiRmxvd0RlY2xhcmF0aW9uIiwiU3RhdGVtZW50IiwiRGVjbGFyYXRpb24iXSxmaWVsZHM6e2lkOigwLHIudmFsaWRhdGVUeXBlKSgiSWRlbnRpZmllciIpLHR5cGVQYXJhbWV0ZXJzOigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iKSxyaWdodDooMCxyLnZhbGlkYXRlVHlwZSkoIkZsb3dUeXBlIil9fSksaSgiRGVjbGFyZU9wYXF1ZVR5cGUiLHt2aXNpdG9yOlsiaWQiLCJ0eXBlUGFyYW1ldGVycyIsInN1cGVydHlwZSJdLGFsaWFzZXM6WyJGbG93RGVjbGFyYXRpb24iLCJTdGF0ZW1lbnQiLCJEZWNsYXJhdGlvbiJdLGZpZWxkczp7aWQ6KDAsci52YWxpZGF0ZVR5cGUpKCJJZGVudGlmaWVyIiksdHlwZVBhcmFtZXRlcnM6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIpLHN1cGVydHlwZTooMCxyLnZhbGlkYXRlT3B0aW9uYWxUeXBlKSgiRmxvd1R5cGUiKSxpbXBsdHlwZTooMCxyLnZhbGlkYXRlT3B0aW9uYWxUeXBlKSgiRmxvd1R5cGUiKX19KSxpKCJEZWNsYXJlVmFyaWFibGUiLHt2aXNpdG9yOlsiaWQiXSxhbGlhc2VzOlsiRmxvd0RlY2xhcmF0aW9uIiwiU3RhdGVtZW50IiwiRGVjbGFyYXRpb24iXSxmaWVsZHM6e2lkOigwLHIudmFsaWRhdGVUeXBlKSgiSWRlbnRpZmllciIpfX0pLGkoIkRlY2xhcmVFeHBvcnREZWNsYXJhdGlvbiIse3Zpc2l0b3I6WyJkZWNsYXJhdGlvbiIsInNwZWNpZmllcnMiLCJzb3VyY2UiXSxhbGlhc2VzOlsiRmxvd0RlY2xhcmF0aW9uIiwiU3RhdGVtZW50IiwiRGVjbGFyYXRpb24iXSxmaWVsZHM6e2RlY2xhcmF0aW9uOigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJGbG93Iiksc3BlY2lmaWVyczooMCxyLnZhbGlkYXRlT3B0aW9uYWwpKCgwLHIuYXJyYXlPZlR5cGUpKFsiRXhwb3J0U3BlY2lmaWVyIiwiRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyIl0pKSxzb3VyY2U6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIlN0cmluZ0xpdGVyYWwiKSxkZWZhdWx0OigwLHIudmFsaWRhdGVPcHRpb25hbCkoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIikpfX0pLGkoIkRlY2xhcmVFeHBvcnRBbGxEZWNsYXJhdGlvbiIse3Zpc2l0b3I6WyJzb3VyY2UiXSxhbGlhc2VzOlsiRmxvd0RlY2xhcmF0aW9uIiwiU3RhdGVtZW50IiwiRGVjbGFyYXRpb24iXSxmaWVsZHM6e3NvdXJjZTooMCxyLnZhbGlkYXRlVHlwZSkoIlN0cmluZ0xpdGVyYWwiKSxleHBvcnRLaW5kOigwLHIudmFsaWRhdGVPcHRpb25hbCkoKDAsci5hc3NlcnRPbmVPZikoInR5cGUiLCJ2YWx1ZSIpKX19KSxpKCJEZWNsYXJlZFByZWRpY2F0ZSIse3Zpc2l0b3I6WyJ2YWx1ZSJdLGFsaWFzZXM6WyJGbG93UHJlZGljYXRlIl0sZmllbGRzOnt2YWx1ZTooMCxyLnZhbGlkYXRlVHlwZSkoIkZsb3ciKX19KSxpKCJFeGlzdHNUeXBlQW5ub3RhdGlvbiIse2FsaWFzZXM6WyJGbG93VHlwZSJdfSksaSgiRnVuY3Rpb25UeXBlQW5ub3RhdGlvbiIse3Zpc2l0b3I6WyJ0eXBlUGFyYW1ldGVycyIsInBhcmFtcyIsInJlc3QiLCJyZXR1cm5UeXBlIl0sYWxpYXNlczpbIkZsb3dUeXBlIl0sZmllbGRzOnt0eXBlUGFyYW1ldGVyczooMCxyLnZhbGlkYXRlT3B0aW9uYWxUeXBlKSgiVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIikscGFyYW1zOigwLHIudmFsaWRhdGUpKCgwLHIuYXJyYXlPZlR5cGUpKCJGdW5jdGlvblR5cGVQYXJhbSIpKSxyZXN0OigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJGdW5jdGlvblR5cGVQYXJhbSIpLHRoaXM6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIkZ1bmN0aW9uVHlwZVBhcmFtIikscmV0dXJuVHlwZTooMCxyLnZhbGlkYXRlVHlwZSkoIkZsb3dUeXBlIil9fSksaSgiRnVuY3Rpb25UeXBlUGFyYW0iLHt2aXNpdG9yOlsibmFtZSIsInR5cGVBbm5vdGF0aW9uIl0sZmllbGRzOntuYW1lOigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJJZGVudGlmaWVyIiksdHlwZUFubm90YXRpb246KDAsci52YWxpZGF0ZVR5cGUpKCJGbG93VHlwZSIpLG9wdGlvbmFsOigwLHIudmFsaWRhdGVPcHRpb25hbCkoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIikpfX0pLGkoIkdlbmVyaWNUeXBlQW5ub3RhdGlvbiIse3Zpc2l0b3I6WyJpZCIsInR5cGVQYXJhbWV0ZXJzIl0sYWxpYXNlczpbIkZsb3dUeXBlIl0sZmllbGRzOntpZDooMCxyLnZhbGlkYXRlVHlwZSkoWyJJZGVudGlmaWVyIiwiUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIiXSksdHlwZVBhcmFtZXRlcnM6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIil9fSksaSgiSW5mZXJyZWRQcmVkaWNhdGUiLHthbGlhc2VzOlsiRmxvd1ByZWRpY2F0ZSJdfSksaSgiSW50ZXJmYWNlRXh0ZW5kcyIse3Zpc2l0b3I6WyJpZCIsInR5cGVQYXJhbWV0ZXJzIl0sZmllbGRzOntpZDooMCxyLnZhbGlkYXRlVHlwZSkoWyJJZGVudGlmaWVyIiwiUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIiXSksdHlwZVBhcmFtZXRlcnM6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIil9fSksYSgiSW50ZXJmYWNlRGVjbGFyYXRpb24iKSxpKCJJbnRlcmZhY2VUeXBlQW5ub3RhdGlvbiIse3Zpc2l0b3I6WyJleHRlbmRzIiwiYm9keSJdLGFsaWFzZXM6WyJGbG93VHlwZSJdLGZpZWxkczp7ZXh0ZW5kczooMCxyLnZhbGlkYXRlT3B0aW9uYWwpKCgwLHIuYXJyYXlPZlR5cGUpKCJJbnRlcmZhY2VFeHRlbmRzIikpLGJvZHk6KDAsci52YWxpZGF0ZVR5cGUpKCJPYmplY3RUeXBlQW5ub3RhdGlvbiIpfX0pLGkoIkludGVyc2VjdGlvblR5cGVBbm5vdGF0aW9uIix7dmlzaXRvcjpbInR5cGVzIl0sYWxpYXNlczpbIkZsb3dUeXBlIl0sZmllbGRzOnt0eXBlczooMCxyLnZhbGlkYXRlKSgoMCxyLmFycmF5T2ZUeXBlKSgiRmxvd1R5cGUiKSl9fSksaSgiTWl4ZWRUeXBlQW5ub3RhdGlvbiIse2FsaWFzZXM6WyJGbG93VHlwZSIsIkZsb3dCYXNlQW5ub3RhdGlvbiJdfSksaSgiRW1wdHlUeXBlQW5ub3RhdGlvbiIse2FsaWFzZXM6WyJGbG93VHlwZSIsIkZsb3dCYXNlQW5ub3RhdGlvbiJdfSksaSgiTnVsbGFibGVUeXBlQW5ub3RhdGlvbiIse3Zpc2l0b3I6WyJ0eXBlQW5ub3RhdGlvbiJdLGFsaWFzZXM6WyJGbG93VHlwZSJdLGZpZWxkczp7dHlwZUFubm90YXRpb246KDAsci52YWxpZGF0ZVR5cGUpKCJGbG93VHlwZSIpfX0pLGkoIk51bWJlckxpdGVyYWxUeXBlQW5ub3RhdGlvbiIse2J1aWxkZXI6WyJ2YWx1ZSJdLGFsaWFzZXM6WyJGbG93VHlwZSJdLGZpZWxkczp7dmFsdWU6KDAsci52YWxpZGF0ZSkoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJudW1iZXIiKSl9fSksaSgiTnVtYmVyVHlwZUFubm90YXRpb24iLHthbGlhc2VzOlsiRmxvd1R5cGUiLCJGbG93QmFzZUFubm90YXRpb24iXX0pLGkoIk9iamVjdFR5cGVBbm5vdGF0aW9uIix7dmlzaXRvcjpbInByb3BlcnRpZXMiLCJpbmRleGVycyIsImNhbGxQcm9wZXJ0aWVzIiwiaW50ZXJuYWxTbG90cyJdLGFsaWFzZXM6WyJGbG93VHlwZSJdLGJ1aWxkZXI6WyJwcm9wZXJ0aWVzIiwiaW5kZXhlcnMiLCJjYWxsUHJvcGVydGllcyIsImludGVybmFsU2xvdHMiLCJleGFjdCJdLGZpZWxkczp7cHJvcGVydGllczooMCxyLnZhbGlkYXRlKSgoMCxyLmFycmF5T2ZUeXBlKShbIk9iamVjdFR5cGVQcm9wZXJ0eSIsIk9iamVjdFR5cGVTcHJlYWRQcm9wZXJ0eSJdKSksaW5kZXhlcnM6e3ZhbGlkYXRlOigwLHIuYXJyYXlPZlR5cGUpKCJPYmplY3RUeXBlSW5kZXhlciIpLG9wdGlvbmFsOiEwLGRlZmF1bHQ6W119LGNhbGxQcm9wZXJ0aWVzOnt2YWxpZGF0ZTooMCxyLmFycmF5T2ZUeXBlKSgiT2JqZWN0VHlwZUNhbGxQcm9wZXJ0eSIpLG9wdGlvbmFsOiEwLGRlZmF1bHQ6W119LGludGVybmFsU2xvdHM6e3ZhbGlkYXRlOigwLHIuYXJyYXlPZlR5cGUpKCJPYmplY3RUeXBlSW50ZXJuYWxTbG90Iiksb3B0aW9uYWw6ITAsZGVmYXVsdDpbXX0sZXhhY3Q6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpLGRlZmF1bHQ6ITF9LGluZXhhY3Q6KDAsci52YWxpZGF0ZU9wdGlvbmFsKSgoMCxyLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSl9fSksaSgiT2JqZWN0VHlwZUludGVybmFsU2xvdCIse3Zpc2l0b3I6WyJpZCIsInZhbHVlIiwib3B0aW9uYWwiLCJzdGF0aWMiLCJtZXRob2QiXSxhbGlhc2VzOlsiVXNlcldoaXRlc3BhY2FibGUiXSxmaWVsZHM6e2lkOigwLHIudmFsaWRhdGVUeXBlKSgiSWRlbnRpZmllciIpLHZhbHVlOigwLHIudmFsaWRhdGVUeXBlKSgiRmxvd1R5cGUiKSxvcHRpb25hbDooMCxyLnZhbGlkYXRlKSgoMCxyLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSksc3RhdGljOigwLHIudmFsaWRhdGUpKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpKSxtZXRob2Q6KDAsci52YWxpZGF0ZSkoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIikpfX0pLGkoIk9iamVjdFR5cGVDYWxsUHJvcGVydHkiLHt2aXNpdG9yOlsidmFsdWUiXSxhbGlhc2VzOlsiVXNlcldoaXRlc3BhY2FibGUiXSxmaWVsZHM6e3ZhbHVlOigwLHIudmFsaWRhdGVUeXBlKSgiRmxvd1R5cGUiKSxzdGF0aWM6KDAsci52YWxpZGF0ZSkoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIikpfX0pLGkoIk9iamVjdFR5cGVJbmRleGVyIix7dmlzaXRvcjpbImlkIiwia2V5IiwidmFsdWUiLCJ2YXJpYW5jZSJdLGFsaWFzZXM6WyJVc2VyV2hpdGVzcGFjYWJsZSJdLGZpZWxkczp7aWQ6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIklkZW50aWZpZXIiKSxrZXk6KDAsci52YWxpZGF0ZVR5cGUpKCJGbG93VHlwZSIpLHZhbHVlOigwLHIudmFsaWRhdGVUeXBlKSgiRmxvd1R5cGUiKSxzdGF0aWM6KDAsci52YWxpZGF0ZSkoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIikpLHZhcmlhbmNlOigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJWYXJpYW5jZSIpfX0pLGkoIk9iamVjdFR5cGVQcm9wZXJ0eSIse3Zpc2l0b3I6WyJrZXkiLCJ2YWx1ZSIsInZhcmlhbmNlIl0sYWxpYXNlczpbIlVzZXJXaGl0ZXNwYWNhYmxlIl0sZmllbGRzOntrZXk6KDAsci52YWxpZGF0ZVR5cGUpKFsiSWRlbnRpZmllciIsIlN0cmluZ0xpdGVyYWwiXSksdmFsdWU6KDAsci52YWxpZGF0ZVR5cGUpKCJGbG93VHlwZSIpLGtpbmQ6KDAsci52YWxpZGF0ZSkoKDAsci5hc3NlcnRPbmVPZikoImluaXQiLCJnZXQiLCJzZXQiKSksc3RhdGljOigwLHIudmFsaWRhdGUpKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpKSxwcm90bzooMCxyLnZhbGlkYXRlKSgoMCxyLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSksb3B0aW9uYWw6KDAsci52YWxpZGF0ZSkoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIikpLHZhcmlhbmNlOigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJWYXJpYW5jZSIpLG1ldGhvZDooMCxyLnZhbGlkYXRlKSgoMCxyLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSl9fSksaSgiT2JqZWN0VHlwZVNwcmVhZFByb3BlcnR5Iix7dmlzaXRvcjpbImFyZ3VtZW50Il0sYWxpYXNlczpbIlVzZXJXaGl0ZXNwYWNhYmxlIl0sZmllbGRzOnthcmd1bWVudDooMCxyLnZhbGlkYXRlVHlwZSkoIkZsb3dUeXBlIil9fSksaSgiT3BhcXVlVHlwZSIse3Zpc2l0b3I6WyJpZCIsInR5cGVQYXJhbWV0ZXJzIiwic3VwZXJ0eXBlIiwiaW1wbHR5cGUiXSxhbGlhc2VzOlsiRmxvd0RlY2xhcmF0aW9uIiwiU3RhdGVtZW50IiwiRGVjbGFyYXRpb24iXSxmaWVsZHM6e2lkOigwLHIudmFsaWRhdGVUeXBlKSgiSWRlbnRpZmllciIpLHR5cGVQYXJhbWV0ZXJzOigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iKSxzdXBlcnR5cGU6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIkZsb3dUeXBlIiksaW1wbHR5cGU6KDAsci52YWxpZGF0ZVR5cGUpKCJGbG93VHlwZSIpfX0pLGkoIlF1YWxpZmllZFR5cGVJZGVudGlmaWVyIix7dmlzaXRvcjpbImlkIiwicXVhbGlmaWNhdGlvbiJdLGZpZWxkczp7aWQ6KDAsci52YWxpZGF0ZVR5cGUpKCJJZGVudGlmaWVyIikscXVhbGlmaWNhdGlvbjooMCxyLnZhbGlkYXRlVHlwZSkoWyJJZGVudGlmaWVyIiwiUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIiXSl9fSksaSgiU3RyaW5nTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIix7YnVpbGRlcjpbInZhbHVlIl0sYWxpYXNlczpbIkZsb3dUeXBlIl0sZmllbGRzOnt2YWx1ZTooMCxyLnZhbGlkYXRlKSgoMCxyLmFzc2VydFZhbHVlVHlwZSkoInN0cmluZyIpKX19KSxpKCJTdHJpbmdUeXBlQW5ub3RhdGlvbiIse2FsaWFzZXM6WyJGbG93VHlwZSIsIkZsb3dCYXNlQW5ub3RhdGlvbiJdfSksaSgiU3ltYm9sVHlwZUFubm90YXRpb24iLHthbGlhc2VzOlsiRmxvd1R5cGUiLCJGbG93QmFzZUFubm90YXRpb24iXX0pLGkoIlRoaXNUeXBlQW5ub3RhdGlvbiIse2FsaWFzZXM6WyJGbG93VHlwZSIsIkZsb3dCYXNlQW5ub3RhdGlvbiJdfSksaSgiVHVwbGVUeXBlQW5ub3RhdGlvbiIse3Zpc2l0b3I6WyJ0eXBlcyJdLGFsaWFzZXM6WyJGbG93VHlwZSJdLGZpZWxkczp7dHlwZXM6KDAsci52YWxpZGF0ZSkoKDAsci5hcnJheU9mVHlwZSkoIkZsb3dUeXBlIikpfX0pLGkoIlR5cGVvZlR5cGVBbm5vdGF0aW9uIix7dmlzaXRvcjpbImFyZ3VtZW50Il0sYWxpYXNlczpbIkZsb3dUeXBlIl0sZmllbGRzOnthcmd1bWVudDooMCxyLnZhbGlkYXRlVHlwZSkoIkZsb3dUeXBlIil9fSksaSgiVHlwZUFsaWFzIix7dmlzaXRvcjpbImlkIiwidHlwZVBhcmFtZXRlcnMiLCJyaWdodCJdLGFsaWFzZXM6WyJGbG93RGVjbGFyYXRpb24iLCJTdGF0ZW1lbnQiLCJEZWNsYXJhdGlvbiJdLGZpZWxkczp7aWQ6KDAsci52YWxpZGF0ZVR5cGUpKCJJZGVudGlmaWVyIiksdHlwZVBhcmFtZXRlcnM6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIpLHJpZ2h0OigwLHIudmFsaWRhdGVUeXBlKSgiRmxvd1R5cGUiKX19KSxpKCJUeXBlQW5ub3RhdGlvbiIse3Zpc2l0b3I6WyJ0eXBlQW5ub3RhdGlvbiJdLGZpZWxkczp7dHlwZUFubm90YXRpb246KDAsci52YWxpZGF0ZVR5cGUpKCJGbG93VHlwZSIpfX0pLGkoIlR5cGVDYXN0RXhwcmVzc2lvbiIse3Zpc2l0b3I6WyJleHByZXNzaW9uIiwidHlwZUFubm90YXRpb24iXSxhbGlhc2VzOlsiRXhwcmVzc2lvbldyYXBwZXIiLCJFeHByZXNzaW9uIl0sZmllbGRzOntleHByZXNzaW9uOigwLHIudmFsaWRhdGVUeXBlKSgiRXhwcmVzc2lvbiIpLHR5cGVBbm5vdGF0aW9uOigwLHIudmFsaWRhdGVUeXBlKSgiVHlwZUFubm90YXRpb24iKX19KSxpKCJUeXBlUGFyYW1ldGVyIix7dmlzaXRvcjpbImJvdW5kIiwiZGVmYXVsdCIsInZhcmlhbmNlIl0sZmllbGRzOntuYW1lOigwLHIudmFsaWRhdGUpKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgic3RyaW5nIikpLGJvdW5kOigwLHIudmFsaWRhdGVPcHRpb25hbFR5cGUpKCJUeXBlQW5ub3RhdGlvbiIpLGRlZmF1bHQ6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIkZsb3dUeXBlIiksdmFyaWFuY2U6KDAsci52YWxpZGF0ZU9wdGlvbmFsVHlwZSkoIlZhcmlhbmNlIil9fSksaSgiVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIix7dmlzaXRvcjpbInBhcmFtcyJdLGZpZWxkczp7cGFyYW1zOigwLHIudmFsaWRhdGUpKCgwLHIuYXJyYXlPZlR5cGUpKCJUeXBlUGFyYW1ldGVyIikpfX0pLGkoIlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIix7dmlzaXRvcjpbInBhcmFtcyJdLGZpZWxkczp7cGFyYW1zOigwLHIudmFsaWRhdGUpKCgwLHIuYXJyYXlPZlR5cGUpKCJGbG93VHlwZSIpKX19KSxpKCJVbmlvblR5cGVBbm5vdGF0aW9uIix7dmlzaXRvcjpbInR5cGVzIl0sYWxpYXNlczpbIkZsb3dUeXBlIl0sZmllbGRzOnt0eXBlczooMCxyLnZhbGlkYXRlKSgoMCxyLmFycmF5T2ZUeXBlKSgiRmxvd1R5cGUiKSl9fSksaSgiVmFyaWFuY2UiLHtidWlsZGVyOlsia2luZCJdLGZpZWxkczp7a2luZDooMCxyLnZhbGlkYXRlKSgoMCxyLmFzc2VydE9uZU9mKSgibWludXMiLCJwbHVzIikpfX0pLGkoIlZvaWRUeXBlQW5ub3RhdGlvbiIse2FsaWFzZXM6WyJGbG93VHlwZSIsIkZsb3dCYXNlQW5ub3RhdGlvbiJdfSksaSgiRW51bURlY2xhcmF0aW9uIix7YWxpYXNlczpbIlN0YXRlbWVudCIsIkRlY2xhcmF0aW9uIl0sdmlzaXRvcjpbImlkIiwiYm9keSJdLGZpZWxkczp7aWQ6KDAsci52YWxpZGF0ZVR5cGUpKCJJZGVudGlmaWVyIiksYm9keTooMCxyLnZhbGlkYXRlVHlwZSkoWyJFbnVtQm9vbGVhbkJvZHkiLCJFbnVtTnVtYmVyQm9keSIsIkVudW1TdHJpbmdCb2R5IiwiRW51bVN5bWJvbEJvZHkiXSl9fSksaSgiRW51bUJvb2xlYW5Cb2R5Iix7YWxpYXNlczpbIkVudW1Cb2R5Il0sdmlzaXRvcjpbIm1lbWJlcnMiXSxmaWVsZHM6e2V4cGxpY2l0VHlwZTooMCxyLnZhbGlkYXRlKSgoMCxyLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSksbWVtYmVyczooMCxyLnZhbGlkYXRlQXJyYXlPZlR5cGUpKCJFbnVtQm9vbGVhbk1lbWJlciIpLGhhc1Vua25vd25NZW1iZXJzOigwLHIudmFsaWRhdGUpKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpKX19KSxpKCJFbnVtTnVtYmVyQm9keSIse2FsaWFzZXM6WyJFbnVtQm9keSJdLHZpc2l0b3I6WyJtZW1iZXJzIl0sZmllbGRzOntleHBsaWNpdFR5cGU6KDAsci52YWxpZGF0ZSkoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIikpLG1lbWJlcnM6KDAsci52YWxpZGF0ZUFycmF5T2ZUeXBlKSgiRW51bU51bWJlck1lbWJlciIpLGhhc1Vua25vd25NZW1iZXJzOigwLHIudmFsaWRhdGUpKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpKX19KSxpKCJFbnVtU3RyaW5nQm9keSIse2FsaWFzZXM6WyJFbnVtQm9keSJdLHZpc2l0b3I6WyJtZW1iZXJzIl0sZmllbGRzOntleHBsaWNpdFR5cGU6KDAsci52YWxpZGF0ZSkoKDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIikpLG1lbWJlcnM6KDAsci52YWxpZGF0ZUFycmF5T2ZUeXBlKShbIkVudW1TdHJpbmdNZW1iZXIiLCJFbnVtRGVmYXVsdGVkTWVtYmVyIl0pLGhhc1Vua25vd25NZW1iZXJzOigwLHIudmFsaWRhdGUpKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpKX19KSxpKCJFbnVtU3ltYm9sQm9keSIse2FsaWFzZXM6WyJFbnVtQm9keSJdLHZpc2l0b3I6WyJtZW1iZXJzIl0sZmllbGRzOnttZW1iZXJzOigwLHIudmFsaWRhdGVBcnJheU9mVHlwZSkoIkVudW1EZWZhdWx0ZWRNZW1iZXIiKSxoYXNVbmtub3duTWVtYmVyczooMCxyLnZhbGlkYXRlKSgoMCxyLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSl9fSksaSgiRW51bUJvb2xlYW5NZW1iZXIiLHthbGlhc2VzOlsiRW51bU1lbWJlciJdLHZpc2l0b3I6WyJpZCJdLGZpZWxkczp7aWQ6KDAsci52YWxpZGF0ZVR5cGUpKCJJZGVudGlmaWVyIiksaW5pdDooMCxyLnZhbGlkYXRlVHlwZSkoIkJvb2xlYW5MaXRlcmFsIil9fSksaSgiRW51bU51bWJlck1lbWJlciIse2FsaWFzZXM6WyJFbnVtTWVtYmVyIl0sdmlzaXRvcjpbImlkIiwiaW5pdCJdLGZpZWxkczp7aWQ6KDAsci52YWxpZGF0ZVR5cGUpKCJJZGVudGlmaWVyIiksaW5pdDooMCxyLnZhbGlkYXRlVHlwZSkoIk51bWVyaWNMaXRlcmFsIil9fSksaSgiRW51bVN0cmluZ01lbWJlciIse2FsaWFzZXM6WyJFbnVtTWVtYmVyIl0sdmlzaXRvcjpbImlkIiwiaW5pdCJdLGZpZWxkczp7aWQ6KDAsci52YWxpZGF0ZVR5cGUpKCJJZGVudGlmaWVyIiksaW5pdDooMCxyLnZhbGlkYXRlVHlwZSkoIlN0cmluZ0xpdGVyYWwiKX19KSxpKCJFbnVtRGVmYXVsdGVkTWVtYmVyIix7YWxpYXNlczpbIkVudW1NZW1iZXIiXSx2aXNpdG9yOlsiaWQiXSxmaWVsZHM6e2lkOigwLHIudmFsaWRhdGVUeXBlKSgiSWRlbnRpZmllciIpfX0pLGkoIkluZGV4ZWRBY2Nlc3NUeXBlIix7dmlzaXRvcjpbIm9iamVjdFR5cGUiLCJpbmRleFR5cGUiXSxhbGlhc2VzOlsiRmxvd1R5cGUiXSxmaWVsZHM6e29iamVjdFR5cGU6KDAsci52YWxpZGF0ZVR5cGUpKCJGbG93VHlwZSIpLGluZGV4VHlwZTooMCxyLnZhbGlkYXRlVHlwZSkoIkZsb3dUeXBlIil9fSksaSgiT3B0aW9uYWxJbmRleGVkQWNjZXNzVHlwZSIse3Zpc2l0b3I6WyJvYmplY3RUeXBlIiwiaW5kZXhUeXBlIl0sYWxpYXNlczpbIkZsb3dUeXBlIl0sZmllbGRzOntvYmplY3RUeXBlOigwLHIudmFsaWRhdGVUeXBlKSgiRmxvd1R5cGUiKSxpbmRleFR5cGU6KDAsci52YWxpZGF0ZVR5cGUpKCJGbG93VHlwZSIpLG9wdGlvbmFsOigwLHIudmFsaWRhdGUpKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpKX19KX0sOTA0NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlVQREFURV9PUEVSQVRPUlM9dC5VTkFSWV9PUEVSQVRPUlM9dC5TVFJJTkdfVU5BUllfT1BFUkFUT1JTPXQuU1RBVEVNRU5UX09SX0JMT0NLX0tFWVM9dC5OVU1CRVJfVU5BUllfT1BFUkFUT1JTPXQuTlVNQkVSX0JJTkFSWV9PUEVSQVRPUlM9dC5OT1RfTE9DQUxfQklORElORz10LkxPR0lDQUxfT1BFUkFUT1JTPXQuSU5IRVJJVF9LRVlTPXQuRk9SX0lOSVRfS0VZUz10LkZMQVRURU5BQkxFX0tFWVM9dC5FUVVBTElUWV9CSU5BUllfT1BFUkFUT1JTPXQuQ09NUEFSSVNPTl9CSU5BUllfT1BFUkFUT1JTPXQuQ09NTUVOVF9LRVlTPXQuQk9PTEVBTl9VTkFSWV9PUEVSQVRPUlM9dC5CT09MRUFOX05VTUJFUl9CSU5BUllfT1BFUkFUT1JTPXQuQk9PTEVBTl9CSU5BUllfT1BFUkFUT1JTPXQuQkxPQ0tfU0NPUEVEX1NZTUJPTD10LkJJTkFSWV9PUEVSQVRPUlM9dC5BU1NJR05NRU5UX09QRVJBVE9SUz12b2lkIDA7dC5TVEFURU1FTlRfT1JfQkxPQ0tfS0VZUz1bImNvbnNlcXVlbnQiLCJib2R5IiwiYWx0ZXJuYXRlIl07dC5GTEFUVEVOQUJMRV9LRVlTPVsiYm9keSIsImV4cHJlc3Npb25zIl07dC5GT1JfSU5JVF9LRVlTPVsibGVmdCIsImluaXQiXTt0LkNPTU1FTlRfS0VZUz1bImxlYWRpbmdDb21tZW50cyIsInRyYWlsaW5nQ29tbWVudHMiLCJpbm5lckNvbW1lbnRzIl07Y29uc3Qgcj1bInx8IiwiJiYiLCI/PyJdO3QuTE9HSUNBTF9PUEVSQVRPUlM9cjt0LlVQREFURV9PUEVSQVRPUlM9WyIrKyIsIi0tIl07Y29uc3QgaT1bIj4iLCI8IiwiPj0iLCI8PSJdO3QuQk9PTEVBTl9OVU1CRVJfQklOQVJZX09QRVJBVE9SUz1pO2NvbnN0IGE9WyI9PSIsIj09PSIsIiE9IiwiIT09Il07dC5FUVVBTElUWV9CSU5BUllfT1BFUkFUT1JTPWE7Y29uc3Qgbz1bLi4uYSwiaW4iLCJpbnN0YW5jZW9mIl07dC5DT01QQVJJU09OX0JJTkFSWV9PUEVSQVRPUlM9bztjb25zdCBzPVsuLi5vLC4uLmldO3QuQk9PTEVBTl9CSU5BUllfT1BFUkFUT1JTPXM7Y29uc3QgbD1bIi0iLCIvIiwiJSIsIioiLCIqKiIsIiYiLCJ8IiwiPj4iLCI+Pj4iLCI8PCIsIl4iXTt0Lk5VTUJFUl9CSU5BUllfT1BFUkFUT1JTPWw7Y29uc3QgdT1bIisiLC4uLmwsLi4ucywifD4iXTt0LkJJTkFSWV9PUEVSQVRPUlM9dTtjb25zdCBwPVsiPSIsIis9IiwuLi5sLm1hcChlPT5lKyI9IiksLi4uci5tYXAoZT0+ZSsiPSIpXTt0LkFTU0lHTk1FTlRfT1BFUkFUT1JTPXA7Y29uc3QgYz1bImRlbGV0ZSIsIiEiXTt0LkJPT0xFQU5fVU5BUllfT1BFUkFUT1JTPWM7Y29uc3QgZD1bIisiLCItIiwifiJdO3QuTlVNQkVSX1VOQVJZX09QRVJBVE9SUz1kO2NvbnN0IGY9WyJ0eXBlb2YiXTt0LlNUUklOR19VTkFSWV9PUEVSQVRPUlM9Zjtjb25zdCB5PVsidm9pZCIsInRocm93IiwuLi5jLC4uLmQsLi4uZl07dC5VTkFSWV9PUEVSQVRPUlM9eTt0LklOSEVSSVRfS0VZUz17b3B0aW9uYWw6WyJ0eXBlQW5ub3RhdGlvbiIsInR5cGVQYXJhbWV0ZXJzIiwicmV0dXJuVHlwZSJdLGZvcmNlOlsic3RhcnQiLCJsb2MiLCJlbmQiXX07Y29uc3QgbT1TeW1ib2wuZm9yKCJ2YXIgdXNlZCB0byBiZSBibG9jayBzY29wZWQiKTt0LkJMT0NLX1NDT1BFRF9TWU1CT0w9bTtjb25zdCBoPVN5bWJvbC5mb3IoInNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBhIGxvY2FsIGJpbmRpbmciKTt0Lk5PVF9MT0NBTF9CSU5ESU5HPWh9LDkxNDk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXZvaWQgMDt2YXIgcj1uKCJjNDg1IiksaT1uKCJlYjViIiksYT1mdW5jdGlvbihlLHQpe2lmKCgwLHIuaXNTdGF0ZW1lbnQpKGUpKXJldHVybiBlO2xldCBuLGE9ITE7aWYoKDAsci5pc0NsYXNzKShlKSlhPSEwLG49IkNsYXNzRGVjbGFyYXRpb24iO2Vsc2UgaWYoKDAsci5pc0Z1bmN0aW9uKShlKSlhPSEwLG49IkZ1bmN0aW9uRGVjbGFyYXRpb24iO2Vsc2UgaWYoKDAsci5pc0Fzc2lnbm1lbnRFeHByZXNzaW9uKShlKSlyZXR1cm4oMCxpLmV4cHJlc3Npb25TdGF0ZW1lbnQpKGUpO2lmKGEmJiFlLmlkJiYobj0hMSksIW4pe2lmKHQpcmV0dXJuITE7dGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgdHVybiAke2UudHlwZX0gdG8gYSBzdGF0ZW1lbnRgKX1yZXR1cm4gZS50eXBlPW4sZX07dC5kZWZhdWx0PWF9LDkyNDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImI5YmQiKSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT0idW5kZWZpbmVkIiE9dHlwZW9mIE1hcDtmdW5jdGlvbiBvKCl7dGhpcy5fYXJyYXk9W10sdGhpcy5fc2V0PWE/bmV3IE1hcDpPYmplY3QuY3JlYXRlKG51bGwpfW8uZnJvbUFycmF5PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyBvLHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspbi5hZGQoZVtyXSx0KTtyZXR1cm4gbn0sby5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBhP3RoaXMuX3NldC5zaXplOk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RofSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1hP2U6ci50b1NldFN0cmluZyhlKSxvPWE/dGhpcy5oYXMoZSk6aS5jYWxsKHRoaXMuX3NldCxuKSxzPXRoaXMuX2FycmF5Lmxlbmd0aDtvJiYhdHx8dGhpcy5fYXJyYXkucHVzaChlKSxvfHwoYT90aGlzLl9zZXQuc2V0KGUscyk6dGhpcy5fc2V0W25dPXMpfSxvLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7aWYoYSlyZXR1cm4gdGhpcy5fc2V0LmhhcyhlKTt2YXIgdD1yLnRvU2V0U3RyaW5nKGUpO3JldHVybiBpLmNhbGwodGhpcy5fc2V0LHQpfSxvLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUpe2lmKGEpe3ZhciB0PXRoaXMuX3NldC5nZXQoZSk7aWYodD49MClyZXR1cm4gdH1lbHNle3ZhciBuPXIudG9TZXRTdHJpbmcoZSk7aWYoaS5jYWxsKHRoaXMuX3NldCxuKSlyZXR1cm4gdGhpcy5fc2V0W25dfXRocm93IG5ldyBFcnJvcignIicrZSsnIiBpcyBub3QgaW4gdGhlIHNldC4nKX0sby5wcm90b3R5cGUuYXQ9ZnVuY3Rpb24oZSl7aWYoZT49MCYmZTx0aGlzLl9hcnJheS5sZW5ndGgpcmV0dXJuIHRoaXMuX2FycmF5W2VdO3Rocm93IG5ldyBFcnJvcigiTm8gZWxlbWVudCBpbmRleGVkIGJ5ICIrZSl9LG8ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKX0sdC5BcnJheVNldD1vfSw5Mzg4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7dmFyIHI9bigiYjljMyIpLGk9bigiZWI1YiIpLGE9ZnVuY3Rpb24gZSh0KXtpZih2b2lkIDA9PT10KXJldHVybigwLGkuaWRlbnRpZmllcikoInVuZGVmaW5lZCIpO2lmKCEwPT09dHx8ITE9PT10KXJldHVybigwLGkuYm9vbGVhbkxpdGVyYWwpKHQpO2lmKG51bGw9PT10KXJldHVybigwLGkubnVsbExpdGVyYWwpKCk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybigwLGkuc3RyaW5nTGl0ZXJhbCkodCk7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtsZXQgZTtpZihOdW1iZXIuaXNGaW5pdGUodCkpZT0oMCxpLm51bWVyaWNMaXRlcmFsKShNYXRoLmFicyh0KSk7ZWxzZXtsZXQgbjtuPU51bWJlci5pc05hTih0KT8oMCxpLm51bWVyaWNMaXRlcmFsKSgwKTooMCxpLm51bWVyaWNMaXRlcmFsKSgxKSxlPSgwLGkuYmluYXJ5RXhwcmVzc2lvbikoIi8iLG4sKDAsaS5udW1lcmljTGl0ZXJhbCkoMCkpfXJldHVybih0PDB8fE9iamVjdC5pcyh0LC0wKSkmJihlPSgwLGkudW5hcnlFeHByZXNzaW9uKSgiLSIsZSkpLGV9aWYoZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1vKGUpfSh0KSl7Y29uc3QgZT10LnNvdXJjZSxuPXQudG9TdHJpbmcoKS5tYXRjaCgvXC8oW2Etel0rfCkkLylbMV07cmV0dXJuKDAsaS5yZWdFeHBMaXRlcmFsKShlLG4pfWlmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuKDAsaS5hcnJheUV4cHJlc3Npb24pKHQubWFwKGUpKTtpZihmdW5jdGlvbihlKXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lfHwiW29iamVjdCBPYmplY3RdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4hMTtjb25zdCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9KHQpKXtjb25zdCBuPVtdO2Zvcihjb25zdCBhIG9mIE9iamVjdC5rZXlzKHQpKXtsZXQgbztvPSgwLHIuZGVmYXVsdCkoYSk/KDAsaS5pZGVudGlmaWVyKShhKTooMCxpLnN0cmluZ0xpdGVyYWwpKGEpLG4ucHVzaCgoMCxpLm9iamVjdFByb3BlcnR5KShvLGUodFthXSkpKX1yZXR1cm4oMCxpLm9iamVjdEV4cHJlc3Npb24pKG4pfXRocm93IG5ldyBFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gdHVybiB0aGlzIHZhbHVlIGludG8gYSBub2RlIil9O3QuZGVmYXVsdD1hO2NvbnN0IG89RnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpfSw5NTM5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4hISgwLHIuZGVmYXVsdCkoZS50eXBlLCJJbW11dGFibGUiKXx8ISEoMCxpLmlzSWRlbnRpZmllcikoZSkmJiJ1bmRlZmluZWQiPT09ZS5uYW1lfTt2YXIgcj1uKCIxMDkzIiksaT1uKCJjNDg1Iil9LCI5NmI5IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW55VHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmFueVR5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBcmd1bWVudFBsYWNlaG9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5hcmd1bWVudFBsYWNlaG9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBcnJheUV4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmFycmF5RXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQXJyYXlQYXR0ZXJuIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5hcnJheVBhdHRlcm59fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFycmF5VHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmFycmF5VHlwZUFubm90YXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5hcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQXNzaWdubWVudEV4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmFzc2lnbm1lbnRFeHByZXNzaW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBc3NpZ25tZW50UGF0dGVybiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuYXNzaWdubWVudFBhdHRlcm59fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkF3YWl0RXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuYXdhaXRFeHByZXNzaW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJCaWdJbnRMaXRlcmFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5iaWdJbnRMaXRlcmFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJCaW5hcnlFeHByZXNzaW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5iaW5hcnlFeHByZXNzaW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJCaW5kRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuYmluZEV4cHJlc3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkJsb2NrU3RhdGVtZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5ibG9ja1N0YXRlbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQm9vbGVhbkxpdGVyYWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmJvb2xlYW5MaXRlcmFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJCb29sZWFuTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5ib29sZWFuTGl0ZXJhbFR5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJCb29sZWFuVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmJvb2xlYW5UeXBlQW5ub3RhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQnJlYWtTdGF0ZW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmJyZWFrU3RhdGVtZW50fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDYWxsRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FsbEV4cHJlc3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkNhdGNoQ2xhdXNlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYXRjaENsYXVzZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQ2xhc3NBY2Nlc3NvclByb3BlcnR5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jbGFzc0FjY2Vzc29yUHJvcGVydHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkNsYXNzQm9keSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2xhc3NCb2R5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDbGFzc0RlY2xhcmF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jbGFzc0RlY2xhcmF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDbGFzc0V4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmNsYXNzRXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQ2xhc3NJbXBsZW1lbnRzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jbGFzc0ltcGxlbWVudHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkNsYXNzTWV0aG9kIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jbGFzc01ldGhvZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQ2xhc3NQcml2YXRlTWV0aG9kIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jbGFzc1ByaXZhdGVNZXRob2R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkNsYXNzUHJpdmF0ZVByb3BlcnR5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jbGFzc1ByaXZhdGVQcm9wZXJ0eX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQ2xhc3NQcm9wZXJ0eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2xhc3NQcm9wZXJ0eX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQ29uZGl0aW9uYWxFeHByZXNzaW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jb25kaXRpb25hbEV4cHJlc3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkNvbnRpbnVlU3RhdGVtZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jb250aW51ZVN0YXRlbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRGVidWdnZXJTdGF0ZW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmRlYnVnZ2VyU3RhdGVtZW50fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEZWNpbWFsTGl0ZXJhbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVjaW1hbExpdGVyYWx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRlY2xhcmVDbGFzcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVjbGFyZUNsYXNzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEZWNsYXJlRXhwb3J0QWxsRGVjbGFyYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmRlY2xhcmVFeHBvcnRBbGxEZWNsYXJhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWNsYXJlRXhwb3J0RGVjbGFyYXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRlY2xhcmVGdW5jdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVjbGFyZUZ1bmN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEZWNsYXJlSW50ZXJmYWNlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWNsYXJlSW50ZXJmYWNlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEZWNsYXJlTW9kdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWNsYXJlTW9kdWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEZWNsYXJlTW9kdWxlRXhwb3J0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVjbGFyZU1vZHVsZUV4cG9ydHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRlY2xhcmVPcGFxdWVUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWNsYXJlT3BhcXVlVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRGVjbGFyZVR5cGVBbGlhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVjbGFyZVR5cGVBbGlhc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRGVjbGFyZVZhcmlhYmxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWNsYXJlVmFyaWFibGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRlY2xhcmVkUHJlZGljYXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWNsYXJlZFByZWRpY2F0ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRGVjb3JhdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWNvcmF0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRpcmVjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGlyZWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEaXJlY3RpdmVMaXRlcmFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kaXJlY3RpdmVMaXRlcmFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEb0V4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmRvRXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRG9XaGlsZVN0YXRlbWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZG9XaGlsZVN0YXRlbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW1wdHlTdGF0ZW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmVtcHR5U3RhdGVtZW50fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFbXB0eVR5cGVBbm5vdGF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5lbXB0eVR5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFbnVtQm9vbGVhbkJvZHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmVudW1Cb29sZWFuQm9keX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW51bUJvb2xlYW5NZW1iZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmVudW1Cb29sZWFuTWVtYmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFbnVtRGVjbGFyYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmVudW1EZWNsYXJhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW51bURlZmF1bHRlZE1lbWJlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZW51bURlZmF1bHRlZE1lbWJlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW51bU51bWJlckJvZHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmVudW1OdW1iZXJCb2R5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFbnVtTnVtYmVyTWVtYmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5lbnVtTnVtYmVyTWVtYmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFbnVtU3RyaW5nQm9keSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZW51bVN0cmluZ0JvZHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkVudW1TdHJpbmdNZW1iZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmVudW1TdHJpbmdNZW1iZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkVudW1TeW1ib2xCb2R5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5lbnVtU3ltYm9sQm9keX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRXhpc3RzVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmV4aXN0c1R5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFeHBvcnRBbGxEZWNsYXJhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZXhwb3J0QWxsRGVjbGFyYXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZXhwb3J0RGVmYXVsdERlY2xhcmF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFeHBvcnREZWZhdWx0U3BlY2lmaWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5leHBvcnREZWZhdWx0U3BlY2lmaWVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5leHBvcnROYW1lZERlY2xhcmF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmV4cG9ydE5hbWVzcGFjZVNwZWNpZmllcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRXhwb3J0U3BlY2lmaWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5leHBvcnRTcGVjaWZpZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkV4cHJlc3Npb25TdGF0ZW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmV4cHJlc3Npb25TdGF0ZW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZvckluU3RhdGVtZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5mb3JJblN0YXRlbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRm9yT2ZTdGF0ZW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmZvck9mU3RhdGVtZW50fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJGb3JTdGF0ZW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmZvclN0YXRlbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRnVuY3Rpb25EZWNsYXJhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZnVuY3Rpb25EZWNsYXJhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRnVuY3Rpb25FeHByZXNzaW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5mdW5jdGlvbkV4cHJlc3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZ1bmN0aW9uVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmZ1bmN0aW9uVHlwZUFubm90YXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZ1bmN0aW9uVHlwZVBhcmFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5mdW5jdGlvblR5cGVQYXJhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR2VuZXJpY1R5cGVBbm5vdGF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5nZW5lcmljVHlwZUFubm90YXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIklkZW50aWZpZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmlkZW50aWZpZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIklmU3RhdGVtZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5pZlN0YXRlbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW1wb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5pbXBvcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkltcG9ydEF0dHJpYnV0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuaW1wb3J0QXR0cmlidXRlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbXBvcnREZWNsYXJhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuaW1wb3J0RGVjbGFyYXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkltcG9ydERlZmF1bHRTcGVjaWZpZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmltcG9ydERlZmF1bHRTcGVjaWZpZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuaW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbXBvcnRTcGVjaWZpZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmltcG9ydFNwZWNpZmllcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW5kZXhlZEFjY2Vzc1R5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmluZGV4ZWRBY2Nlc3NUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbmZlcnJlZFByZWRpY2F0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuaW5mZXJyZWRQcmVkaWNhdGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkludGVyZmFjZURlY2xhcmF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5pbnRlcmZhY2VEZWNsYXJhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW50ZXJmYWNlRXh0ZW5kcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuaW50ZXJmYWNlRXh0ZW5kc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW50ZXJmYWNlVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmludGVyZmFjZVR5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbnRlcnByZXRlckRpcmVjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuaW50ZXJwcmV0ZXJEaXJlY3RpdmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkludGVyc2VjdGlvblR5cGVBbm5vdGF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5pbnRlcnNlY3Rpb25UeXBlQW5ub3RhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSlNYQXR0cmlidXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5qc3hBdHRyaWJ1dGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkpTWENsb3NpbmdFbGVtZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5qc3hDbG9zaW5nRWxlbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSlNYQ2xvc2luZ0ZyYWdtZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5qc3hDbG9zaW5nRnJhZ21lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkpTWEVsZW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmpzeEVsZW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkpTWEVtcHR5RXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuanN4RW1wdHlFeHByZXNzaW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJKU1hFeHByZXNzaW9uQ29udGFpbmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5qc3hFeHByZXNzaW9uQ29udGFpbmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJKU1hGcmFnbWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuanN4RnJhZ21lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkpTWElkZW50aWZpZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmpzeElkZW50aWZpZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkpTWE1lbWJlckV4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmpzeE1lbWJlckV4cHJlc3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkpTWE5hbWVzcGFjZWROYW1lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5qc3hOYW1lc3BhY2VkTmFtZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSlNYT3BlbmluZ0VsZW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmpzeE9wZW5pbmdFbGVtZW50fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJKU1hPcGVuaW5nRnJhZ21lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmpzeE9wZW5pbmdGcmFnbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSlNYU3ByZWFkQXR0cmlidXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5qc3hTcHJlYWRBdHRyaWJ1dGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkpTWFNwcmVhZENoaWxkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5qc3hTcHJlYWRDaGlsZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSlNYVGV4dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuanN4VGV4dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTGFiZWxlZFN0YXRlbWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIubGFiZWxlZFN0YXRlbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTG9naWNhbEV4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmxvZ2ljYWxFeHByZXNzaW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJNZW1iZXJFeHByZXNzaW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5tZW1iZXJFeHByZXNzaW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJNZXRhUHJvcGVydHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLm1ldGFQcm9wZXJ0eX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTWl4ZWRUeXBlQW5ub3RhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIubWl4ZWRUeXBlQW5ub3RhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTW9kdWxlRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIubW9kdWxlRXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTmV3RXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIubmV3RXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTm9vcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIubm9vcH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTnVsbExpdGVyYWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLm51bGxMaXRlcmFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOdWxsTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5udWxsTGl0ZXJhbFR5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOdWxsYWJsZVR5cGVBbm5vdGF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5udWxsYWJsZVR5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOdW1iZXJMaXRlcmFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5udW1iZXJMaXRlcmFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOdW1iZXJMaXRlcmFsVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLm51bWJlckxpdGVyYWxUeXBlQW5ub3RhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTnVtYmVyVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLm51bWJlclR5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOdW1lcmljTGl0ZXJhbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIubnVtZXJpY0xpdGVyYWx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk9iamVjdEV4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLm9iamVjdEV4cHJlc3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk9iamVjdE1ldGhvZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIub2JqZWN0TWV0aG9kfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJPYmplY3RQYXR0ZXJuIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5vYmplY3RQYXR0ZXJufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJPYmplY3RQcm9wZXJ0eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIub2JqZWN0UHJvcGVydHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk9iamVjdFR5cGVBbm5vdGF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5vYmplY3RUeXBlQW5ub3RhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiT2JqZWN0VHlwZUNhbGxQcm9wZXJ0eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIub2JqZWN0VHlwZUNhbGxQcm9wZXJ0eX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiT2JqZWN0VHlwZUluZGV4ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLm9iamVjdFR5cGVJbmRleGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJPYmplY3RUeXBlSW50ZXJuYWxTbG90Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5vYmplY3RUeXBlSW50ZXJuYWxTbG90fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJPYmplY3RUeXBlUHJvcGVydHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLm9iamVjdFR5cGVQcm9wZXJ0eX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiT2JqZWN0VHlwZVNwcmVhZFByb3BlcnR5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5vYmplY3RUeXBlU3ByZWFkUHJvcGVydHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk9wYXF1ZVR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLm9wYXF1ZVR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk9wdGlvbmFsQ2FsbEV4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLm9wdGlvbmFsQ2FsbEV4cHJlc3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk9wdGlvbmFsSW5kZXhlZEFjY2Vzc1R5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLm9wdGlvbmFsSW5kZXhlZEFjY2Vzc1R5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk9wdGlvbmFsTWVtYmVyRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIub3B0aW9uYWxNZW1iZXJFeHByZXNzaW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyZW50aGVzaXplZEV4cHJlc3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBpcGVsaW5lQmFyZUZ1bmN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5waXBlbGluZUJhcmVGdW5jdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGlwZWxpbmVQcmltYXJ5VG9waWNSZWZlcmVuY2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnBpcGVsaW5lUHJpbWFyeVRvcGljUmVmZXJlbmNlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQaXBlbGluZVRvcGljRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIucGlwZWxpbmVUb3BpY0V4cHJlc3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBsYWNlaG9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5wbGFjZWhvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUHJpdmF0ZU5hbWUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnByaXZhdGVOYW1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQcm9ncmFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5wcm9ncmFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJRdWFsaWZpZWRUeXBlSWRlbnRpZmllciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIucXVhbGlmaWVkVHlwZUlkZW50aWZpZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlJlY29yZEV4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnJlY29yZEV4cHJlc3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlJlZ0V4cExpdGVyYWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnJlZ0V4cExpdGVyYWx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlJlZ2V4TGl0ZXJhbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIucmVnZXhMaXRlcmFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJSZXN0RWxlbWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIucmVzdEVsZW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlJlc3RQcm9wZXJ0eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIucmVzdFByb3BlcnR5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJSZXR1cm5TdGF0ZW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnJldHVyblN0YXRlbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU2VxdWVuY2VFeHByZXNzaW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zZXF1ZW5jZUV4cHJlc3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNwcmVhZEVsZW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnNwcmVhZEVsZW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNwcmVhZFByb3BlcnR5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zcHJlYWRQcm9wZXJ0eX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU3RhdGljQmxvY2siLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnN0YXRpY0Jsb2NrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTdHJpbmdMaXRlcmFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zdHJpbmdMaXRlcmFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTdHJpbmdMaXRlcmFsVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnN0cmluZ0xpdGVyYWxUeXBlQW5ub3RhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU3RyaW5nVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnN0cmluZ1R5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTdXBlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3VwZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlN3aXRjaENhc2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnN3aXRjaENhc2V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlN3aXRjaFN0YXRlbWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3dpdGNoU3RhdGVtZW50fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTeW1ib2xUeXBlQW5ub3RhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3ltYm9sVHlwZUFubm90YXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTQW55S2V5d29yZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNBbnlLZXl3b3JkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU0FycmF5VHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNBcnJheVR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTQXNFeHByZXNzaW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c0FzRXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNCaWdJbnRLZXl3b3JkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c0JpZ0ludEtleXdvcmR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTQm9vbGVhbktleXdvcmQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzQm9vbGVhbktleXdvcmR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTQ2FsbFNpZ25hdHVyZURlY2xhcmF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c0NhbGxTaWduYXR1cmVEZWNsYXJhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNDb25kaXRpb25hbFR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzQ29uZGl0aW9uYWxUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU0NvbnN0cnVjdG9yVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNDb25zdHJ1Y3RvclR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTRGVjbGFyZUZ1bmN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c0RlY2xhcmVGdW5jdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNEZWNsYXJlTWV0aG9kIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c0RlY2xhcmVNZXRob2R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTRW51bURlY2xhcmF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c0VudW1EZWNsYXJhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNFbnVtTWVtYmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c0VudW1NZW1iZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTRXhwb3J0QXNzaWdubWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNFeHBvcnRBc3NpZ25tZW50fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU0V4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTRnVuY3Rpb25UeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c0Z1bmN0aW9uVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNJbXBvcnRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c0ltcG9ydFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTSW5kZXhTaWduYXR1cmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzSW5kZXhTaWduYXR1cmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTSW5kZXhlZEFjY2Vzc1R5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzSW5kZXhlZEFjY2Vzc1R5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTSW5mZXJUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c0luZmVyVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNJbnN0YW50aWF0aW9uRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNJbnN0YW50aWF0aW9uRXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNJbnRlcmZhY2VCb2R5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c0ludGVyZmFjZUJvZHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTSW50ZXJmYWNlRGVjbGFyYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzSW50ZXJmYWNlRGVjbGFyYXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTSW50ZXJzZWN0aW9uVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNJbnRlcnNlY3Rpb25UeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU0ludHJpbnNpY0tleXdvcmQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzSW50cmluc2ljS2V5d29yZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNMaXRlcmFsVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNMaXRlcmFsVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNNYXBwZWRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c01hcHBlZFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTTWV0aG9kU2lnbmF0dXJlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c01ldGhvZFNpZ25hdHVyZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNNb2R1bGVCbG9jayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNNb2R1bGVCbG9ja319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNNb2R1bGVEZWNsYXJhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNNb2R1bGVEZWNsYXJhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNOYW1lZFR1cGxlTWVtYmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c05hbWVkVHVwbGVNZW1iZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTTmV2ZXJLZXl3b3JkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c05ldmVyS2V5d29yZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNOb25OdWxsRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNOb25OdWxsRXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNOdWxsS2V5d29yZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNOdWxsS2V5d29yZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNOdW1iZXJLZXl3b3JkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c051bWJlcktleXdvcmR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTT2JqZWN0S2V5d29yZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNPYmplY3RLZXl3b3JkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU09wdGlvbmFsVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNPcHRpb25hbFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTUGFyYW1ldGVyUHJvcGVydHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzUGFyYW1ldGVyUHJvcGVydHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTUGFyZW50aGVzaXplZFR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzUGFyZW50aGVzaXplZFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTUHJvcGVydHlTaWduYXR1cmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzUHJvcGVydHlTaWduYXR1cmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTUXVhbGlmaWVkTmFtZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNRdWFsaWZpZWROYW1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU1Jlc3RUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c1Jlc3RUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU1NhdGlzZmllc0V4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzU2F0aXNmaWVzRXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNTdHJpbmdLZXl3b3JkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c1N0cmluZ0tleXdvcmR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTU3ltYm9sS2V5d29yZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNTeW1ib2xLZXl3b3JkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU1RoaXNUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c1RoaXNUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU1R1cGxlVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNUdXBsZVR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTVHlwZUFsaWFzRGVjbGFyYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzVHlwZUFsaWFzRGVjbGFyYXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzVHlwZUFubm90YXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTVHlwZUFzc2VydGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNUeXBlQXNzZXJ0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU1R5cGVMaXRlcmFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c1R5cGVMaXRlcmFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU1R5cGVPcGVyYXRvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNUeXBlT3BlcmF0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTVHlwZVBhcmFtZXRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNUeXBlUGFyYW1ldGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTVHlwZVByZWRpY2F0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNUeXBlUHJlZGljYXRlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU1R5cGVRdWVyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNUeXBlUXVlcnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRTVHlwZVJlZmVyZW5jZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHNUeXBlUmVmZXJlbmNlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU1VuZGVmaW5lZEtleXdvcmQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzVW5kZWZpbmVkS2V5d29yZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVFNVbmlvblR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRzVW5pb25UeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU1Vua25vd25LZXl3b3JkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c1Vua25vd25LZXl3b3JkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUU1ZvaWRLZXl3b3JkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50c1ZvaWRLZXl3b3JkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVGVtcGxhdGVFbGVtZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50ZW1wbGF0ZUVsZW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRlbXBsYXRlTGl0ZXJhbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudGVtcGxhdGVMaXRlcmFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUaGlzRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudGhpc0V4cHJlc3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRoaXNUeXBlQW5ub3RhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudGhpc1R5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUaHJvd1N0YXRlbWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudGhyb3dTdGF0ZW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRvcGljUmVmZXJlbmNlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50b3BpY1JlZmVyZW5jZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVHJ5U3RhdGVtZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50cnlTdGF0ZW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlR1cGxlRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHVwbGVFeHByZXNzaW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUdXBsZVR5cGVBbm5vdGF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50dXBsZVR5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUeXBlQWxpYXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnR5cGVBbGlhc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnR5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUeXBlQ2FzdEV4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnR5cGVDYXN0RXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVHlwZVBhcmFtZXRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHlwZVBhcmFtZXRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50eXBlUGFyYW1ldGVyRGVjbGFyYXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50eXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVHlwZW9mVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnR5cGVvZlR5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVbmFyeUV4cHJlc3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnVuYXJ5RXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVW5pb25UeXBlQW5ub3RhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudW5pb25UeXBlQW5ub3RhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVXBkYXRlRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudXBkYXRlRXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVjhJbnRyaW5zaWNJZGVudGlmaWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci52OEludHJpbnNpY0lkZW50aWZpZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlZhcmlhYmxlRGVjbGFyYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnZhcmlhYmxlRGVjbGFyYXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlZhcmlhYmxlRGVjbGFyYXRvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudmFyaWFibGVEZWNsYXJhdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJWYXJpYW5jZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudmFyaWFuY2V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlZvaWRUeXBlQW5ub3RhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudm9pZFR5cGVBbm5vdGF0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJXaGlsZVN0YXRlbWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIud2hpbGVTdGF0ZW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIldpdGhTdGF0ZW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLndpdGhTdGF0ZW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIllpZWxkRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIueWllbGRFeHByZXNzaW9ufX0pO3ZhciByPW4oImViNWIiKX0sIjk4ZTYiOmZ1bmN0aW9uKGUsdCl7dmFyIG49IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLnNwbGl0KCIiKTt0LmVuY29kZT1mdW5jdGlvbihlKXtpZigwPD1lJiZlPG4ubGVuZ3RoKXJldHVybiBuW2VdO3Rocm93IG5ldyBUeXBlRXJyb3IoIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogIitlKX0sdC5kZWNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIDY1PD1lJiZlPD05MD9lLTY1Ojk3PD1lJiZlPD0xMjI/ZS05NysyNjo0ODw9ZSYmZTw9NTc/ZS00OCs1Mjo0Mz09ZT82Mjo0Nz09ZT82MzotMX19LDk5NzM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KShlLGkuZGVmYXVsdCx0KSxlfTt2YXIgcj1uKCJmYWZkIiksaT1uKCI1ZmFjIil9LCI5YTAwIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KShlKSYmIWkuaGFzKGUpfTt2YXIgcj1uKCJiOWMzIik7Y29uc3QgaT1uZXcgU2V0KFsiYWJzdHJhY3QiLCJib29sZWFuIiwiYnl0ZSIsImNoYXIiLCJkb3VibGUiLCJlbnVtIiwiZmluYWwiLCJmbG9hdCIsImdvdG8iLCJpbXBsZW1lbnRzIiwiaW50IiwiaW50ZXJmYWNlIiwibG9uZyIsIm5hdGl2ZSIsInBhY2thZ2UiLCJwcml2YXRlIiwicHJvdGVjdGVkIiwicHVibGljIiwic2hvcnQiLCJzdGF0aWMiLCJzeW5jaHJvbml6ZWQiLCJ0aHJvd3MiLCJ0cmFuc2llbnQiLCJ2b2xhdGlsZSJdKX0sIjlhM2QiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmlzSW1wb3J0RGVmYXVsdFNwZWNpZmllcikoZSl8fCgwLHIuaXNJZGVudGlmaWVyKShlLmltcG9ydGVkfHxlLmV4cG9ydGVkLHtuYW1lOiJkZWZhdWx0In0pfTt2YXIgcj1uKCJjNDg1Iil9LCI5YTVjIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24ucih0KTt2YXIgcj0obigiZDNiNyIpLG4oIjNjYTMiKSxuKCJkZGIwIiksbigiYjBjMCIpLG4oImExNWIiKSxuKCJkODFkIiksbigiY2FhZCIpLG4oIjI1MzIiKSxuKCIxNGQ5IiksbigiOTlhZiIpLG4oImU5YzQiKSxuKCIyNWYwIiksbigiYWMxZiIpLG4oIjUzMTkiKSxuKCI0NjZkIiksbigiNGRlNCIpLG4oImE0ZDMiKSxuKCJlMDFhIiksbigiZDg3YiIpKSxpPW4oIjdiZGMiKSxhPW4ubihpKTtmdW5jdGlvbiBvKGUpe3JldHVybiBlLnNwbGl0KCJ7IikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmNsdWRlcygifSIpP2Uuc3BsaXQoIn0iKVsxXTplfSkpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHIuYnVpbGRlcnMudGVtcGxhdGVFbGVtZW50KHtyYXc6ZSxjb29rZWQ6ZX0sITApfWZ1bmN0aW9uIGwoZSx0LG4pe3ZhciBpPVtdLGE9W107cmV0dXJuIDA9PT10Lmxlbmd0aCYmMD09PW4ubGVuZ3RoP2UubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaS5wdXNoKHMoZSkpfSkpOnQubGVuZ3RoPjAmJjA9PT1uLmxlbmd0aD8oZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBpLnB1c2gocyhlKSl9KSksdC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBhLnB1c2goci5idWlsZGVycy5pZGVudGlmaWVyKGUubmFtZSkpfSkpKTowPT09dC5sZW5ndGgmJm4ubGVuZ3RoPjA/KGkucHVzaChzKCIiLmNvbmNhdChlWzBdLCI/IikuY29uY2F0KG5bMF0ubmFtZSwiPSIpKSksYS5wdXNoKHIuYnVpbGRlcnMuaWRlbnRpZmllcihuWzBdLm5hbWUpKSxuLm1hcCgoZnVuY3Rpb24oZSx0KXt0PjAmJihpLnB1c2gocygiJiIuY29uY2F0KGUubmFtZSwiPSIpKSksYS5wdXNoKHIuYnVpbGRlcnMuaWRlbnRpZmllcihlLm5hbWUpKSl9KSksaS5wdXNoKHMoIiIpKSk6KGUubWFwKChmdW5jdGlvbih0LHIpe3IrMT09PWUubGVuZ3RoP2kucHVzaChzKCIiLmNvbmNhdCh0LCI/IikuY29uY2F0KG5bMF0ubmFtZSwiPSIpKSk6aS5wdXNoKHModCkpfSkpLHQubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gYS5wdXNoKHIuYnVpbGRlcnMuaWRlbnRpZmllcihlLm5hbWUpKX0pKSxhLnB1c2goci5idWlsZGVycy5pZGVudGlmaWVyKG5bMF0ubmFtZSkpLG4ubWFwKChmdW5jdGlvbihlLHQpe3Q+MCYmKGkucHVzaChzKCImIi5jb25jYXQoZS5uYW1lLCI9IikpKSxhLnB1c2goci5idWlsZGVycy5pZGVudGlmaWVyKGUubmFtZSkpKX0pKSxpLnB1c2gocygiIikpKSxyLmJ1aWxkZXJzLnRlbXBsYXRlTGl0ZXJhbChpLGEpfWZ1bmN0aW9uIHUoZSx0KXt2YXIgbj1bXTtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPXQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT09ZS5zY2hlbWFWYWx1ZX0pKVswXTtyJiYoZS5jaGlsZHJlbj1yLnBhcmFtcyx1KGUuY2hpbGRyZW4sdCkpLG4ucHVzaChlKX0pKSxufWZ1bmN0aW9uIHAoZSl7dmFyIHQ9bnVsbDtzd2l0Y2goZSl7Y2FzZSJzdHJpbmciOnQ9InN0cmluZyI7YnJlYWs7Y2FzZSJib29sZWFuIjp0PSJib29sZWFuIjticmVhaztjYXNlIm51bWJlciI6dD0ibnVtYmVyIjticmVhaztjYXNlImFycmF5Ijp0PSJhcnJheSI7YnJlYWs7Y2FzZSJvYmplY3QiOnQ9Im9iamVjdCI7YnJlYWs7Y2FzZSJpbnRlZ2VyKGludDMyKSI6Y2FzZSJpbnRlZ2VyKGludDY0KSI6dD0ibnVtYmVyIjticmVhaztkZWZhdWx0OnQ9Im9iamVjdCJ9cmV0dXJuIHR9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gci5idWlsZGVycy50c1R5cGVSZWZlcmVuY2Uoci5idWlsZGVycy5pZGVudGlmaWVyKGUpKX1mdW5jdGlvbiBkKCl7cmV0dXJuIHIuYnVpbGRlcnMudHNUeXBlUmVmZXJlbmNlKHIuYnVpbGRlcnMuaWRlbnRpZmllcigiUmVjb3JkIiksci5idWlsZGVycy50c1R5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uKFtyLmJ1aWxkZXJzLnRzU3RyaW5nS2V5d29yZCgpLHIuYnVpbGRlcnMudHNVbmtub3duS2V5d29yZCgpXSkpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiByLmJ1aWxkZXJzLnRzUHJvcGVydHlTaWduYXR1cmUoci5idWlsZGVycy5pZGVudGlmaWVyKGUubmFtZSksci5idWlsZGVycy50c1R5cGVBbm5vdGF0aW9uKGZ1bmN0aW9uKGUsdCxuKXtpZihbImJvb2xlYW4iLCJzdHJpbmciLCJudW1iZXIiXS5pbmNsdWRlcyh0KSlyZXR1cm4gYyh0KTtpZigib2JqZWN0Ij09PXQpe2lmKGUuY2hpbGRyZW4pe3ZhciBpPWYoZS5jaGlsZHJlbixuKTtyZXR1cm4gci5idWlsZGVycy50c1R5cGVMaXRlcmFsKGkpfXJldHVybiBkKCl9aWYoImFycmF5Ij09PXQpe2lmKGUuY2hpbGRyZW4pe3ZhciBhPWYoZS5jaGlsZHJlbixuKTtyZXR1cm4gci5idWlsZGVycy50c0FycmF5VHlwZShyLmJ1aWxkZXJzLnRzVHlwZUxpdGVyYWwoYSkpfXJldHVybiByLmJ1aWxkZXJzLnRzQXJyYXlUeXBlKGQoKSl9cmV0dXJuIGModCl9KGUscChlLnR5cGUpLHQpKSwhIXQmJiFlLnJlcXVpcmUpfSkpfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ZS5zdW1tYXJ5LG49ZS5wYXJhbWV0ZXJzLHI9IiI7cmV0dXJuIHIrPSIvKiogXG4iLHIrPSIgKiAiLmNvbmNhdCh0LCJcbiIpLEFycmF5LmlzQXJyYXkobikmJm4ubWFwKChmdW5jdGlvbihlKXsicGF0aCI9PT1lLmluJiYocis9IiAqIEBwYXJhbSB7c3RyaW5nfSAiLmNvbmNhdChlLm5hbWUsIiAiKS5jb25jYXQoZS5kZXNjcmlwdGlvbiwiXG4gIikpLCJxdWVyeSI9PT1lLmluJiYocis9IiAqIEBwYXJhbSB7c3RyaW5nfSAiLmNvbmNhdChlLm5hbWUsIiAiKS5jb25jYXQoZS5kZXNjcmlwdGlvbiwiXG4gIikpLCJib2R5Ij09PWUuaW4mJihlLmRlZiYmIm9iamVjdCI9PT1lLmRlZi50eXBlfHwib2JqZWN0Ij09PWUudHlwZT9yPWZ1bmN0aW9uIGUodCxuLHIpe3JldHVybiBBcnJheS5pc0FycmF5KG4pJiZuLm1hcCgoZnVuY3Rpb24obil7ZSh0Kz0iICogQHBhcmFtIHsiLmNvbmNhdChwKG4udHlwZSksIn0gIikuY29uY2F0KHIsIi4iKS5jb25jYXQobi5uYW1lLCIgIikuY29uY2F0KG4uZGVzY3JpcHRpb24sIlxuIiksbi5jaGlsZHJlbiwiIi5jb25jYXQociwiLiIpLmNvbmNhdChuLm5hbWUpKX0pKSx0fShyKz0iICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAiLmNvbmNhdChlLmRlc2NyaXB0aW9uLCJcbiIpLGUuY2hpbGRyZW4sInBhcmFtcyIpOihlLmRlZiYmImFycmF5Ij09PWUuZGVmLnR5cGV8fCJhcnJheSI9PT1lLnR5cGUpJiYocis9IiAqIEBwYXJhbSB7YXJyYXl9IHBhcmFtcyAiLmNvbmNhdChlLmRlc2NyaXB0aW9uLCJcbiIpKSl9KSkscis9IiAqIEByZXR1cm5zXG4iLHIrPSIgKi9cbiJ9ZnVuY3Rpb24gbShlKXt2YXIgdD1yLmJ1aWxkZXJzLmlkZW50aWZpZXIoZS5uYW1lKTtyZXR1cm4gdC50eXBlQW5ub3RhdGlvbj1yLmJ1aWxkZXJzLnR5cGVBbm5vdGF0aW9uKHIuYnVpbGRlcnMuZ2VuZXJpY1R5cGVBbm5vdGF0aW9uKHIuYnVpbGRlcnMuaWRlbnRpZmllcihlLnR5cGUpLG51bGwpKSx0fWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZS5uYW1lLG49ZS5tZXRob2QsaT1lLnVybCxzPWUucGF0aFBhcmFtcyx1PWUucXVlcnlQYXJhbXMscD1lLmJvZHlQYXJhbXMsYz1bXSxkPVtdO2QucHVzaChsKG8oaSkscyx1KSksW10uY29uY2F0KHMsdSkubWFwKChmdW5jdGlvbihlKXtjLnB1c2goci5idWlsZGVycy5pZGVudGlmaWVyKGUubmFtZSkpfSkpLHAubWFwKChmdW5jdGlvbihlKXt2YXIgdD1yLmJ1aWxkZXJzLmlkZW50aWZpZXIoZS5uYW1lKTtjLnB1c2godCksZC5wdXNoKHQpfSkpO3ZhciBmPXIuYnVpbGRlcnMuZnVuY3Rpb25EZWNsYXJhdGlvbihyLmJ1aWxkZXJzLmlkZW50aWZpZXIodCksYyxyLmJ1aWxkZXJzLmJsb2NrU3RhdGVtZW50KFtyLmJ1aWxkZXJzLnJldHVyblN0YXRlbWVudChyLmJ1aWxkZXJzLmNhbGxFeHByZXNzaW9uKHIuYnVpbGRlcnMubWVtYmVyRXhwcmVzc2lvbihyLmJ1aWxkZXJzLmlkZW50aWZpZXIoInJlcXVlc3QiKSxyLmJ1aWxkZXJzLmlkZW50aWZpZXIobikpLGQpKV0pKTtyZXR1cm4gYSgpKHIuYnVpbGRlcnMuZXhwb3J0TmFtZWREZWNsYXJhdGlvbihmKSkuY29kZX1mdW5jdGlvbiBUKGUsdCxuKXt2YXIgaT1udWxsO2lmKCJvYmplY3QiPT09ZS50eXBlKXtpZighZS5jaGlsZHJlbilyZXR1cm4iXG4iO3ZhciBvPWYoZS5jaGlsZHJlbixuKTtpPXIuYnVpbGRlcnMudHNJbnRlcmZhY2VEZWNsYXJhdGlvbihyLmJ1aWxkZXJzLmlkZW50aWZpZXIodCksci5idWlsZGVycy50c0ludGVyZmFjZUJvZHkobykpfWVsc2UgaWYoImFycmF5Ij09PWUudHlwZSl7aWYoIWUuY2hpbGRyZW4pcmV0dXJuIlxuIjt2YXIgcz1mKGUuY2hpbGRyZW4sbik7aT1yLmJ1aWxkZXJzLnRzSW50ZXJmYWNlRGVjbGFyYXRpb24oci5idWlsZGVycy5pZGVudGlmaWVyKHQpLHIuYnVpbGRlcnMudHNJbnRlcmZhY2VCb2R5KHMpKX1lbHNlIGk9ci5idWlsZGVycy50c0ludGVyZmFjZURlY2xhcmF0aW9uKHIuYnVpbGRlcnMuaWRlbnRpZmllcih0KSxyLmJ1aWxkZXJzLnRzSW50ZXJmYWNlQm9keShbXSkpO3JldHVybiBhKCkoci5idWlsZGVycy5leHBvcnROYW1lZERlY2xhcmF0aW9uKGkpKS5jb2RlKyJcblxuIn1mdW5jdGlvbiBiKGUsdCl7dmFyIG49ZS5uYW1lLGk9ZS5tZXRob2Qscz1lLnVybCx1PWUucGF0aFBhcmFtcyxwPWUucXVlcnlQYXJhbXMsYz1lLmJvZHlQYXJhbXMsZD1lLnJlc1BhcmFtLGY9W10seT1bXTt5LnB1c2gobChvKHMpLHUscCkpLFtdLmNvbmNhdCh1LHApLm1hcCgoZnVuY3Rpb24oZSl7Zi5wdXNoKG0oZSkpfSkpLGMubWFwKChmdW5jdGlvbihlKXsiYXJyYXkiPT09ZS50eXBlP2YucHVzaChtKHtuYW1lOmUubmFtZSx0eXBlOiJhbnlbXSJ9KSk6Im9iamVjdCI9PT1lLnR5cGUmJmYucHVzaChtKHtuYW1lOmUubmFtZSx0eXBlOiIiLmNvbmNhdCh0LCJQYXJhbXMiKX0pKSx5LnB1c2goci5idWlsZGVycy5pZGVudGlmaWVyKGUubmFtZSkpfSkpO3ZhciBoPXIuYnVpbGRlcnMuZnVuY3Rpb25EZWNsYXJhdGlvbihyLmJ1aWxkZXJzLmlkZW50aWZpZXIobiksZixyLmJ1aWxkZXJzLmJsb2NrU3RhdGVtZW50KFtyLmJ1aWxkZXJzLnJldHVyblN0YXRlbWVudChyLmJ1aWxkZXJzLmNhbGxFeHByZXNzaW9uKHIuYnVpbGRlcnMubWVtYmVyRXhwcmVzc2lvbihyLmJ1aWxkZXJzLmlkZW50aWZpZXIoInJlcXVlc3QiKSxyLmJ1aWxkZXJzLmlkZW50aWZpZXIoaSkpLHkpKV0pKSxUPSJhcnJheSI9PT1kLnR5cGU/IiIuY29uY2F0KHQsIlJlc1tdIik6IiIuY29uY2F0KHQsIlJlcyIpO3JldHVybiBoLnJldHVyblR5cGU9ci5idWlsZGVycy50c1R5cGVBbm5vdGF0aW9uKHIuYnVpbGRlcnMudHNUeXBlUmVmZXJlbmNlKHIuYnVpbGRlcnMuaWRlbnRpZmllcigiUHJvbWlzZSIpLHIuYnVpbGRlcnMudHNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbihbci5idWlsZGVycy50c1R5cGVSZWZlcmVuY2Uoci5idWlsZGVycy5pZGVudGlmaWVyKFQpKV0pKSksYSgpKHIuYnVpbGRlcnMuZXhwb3J0TmFtZWREZWNsYXJhdGlvbihoKSkuY29kZX12YXIgUz17bmFtZToiU2NyaXB0VmlldyIsY29tcG9uZW50czp7RWRpdG9yU2NyaXB0OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UuYWxsKFtuLmUoImNodW5rLTNiODg4YTY1Iiksbi5lKCJjaHVuay0wZmQ2NzcxNiIpLG4uZSgiY2h1bmstMGQxMDJkNWEiKV0pLnRoZW4obi5iaW5kKG51bGwsImNmMDQiKSl9fSxwcm9wczp7YXBpOnt0eXBlOk9iamVjdCxyZXF1aXJlZDohMH0sc3dhZ2dlckluc3RhbmNlOnt0eXBlOk9iamVjdCxyZXF1aXJlZDohMH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57anNDb2RlOiIiLHRzQ29kZToiIn19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXt2YXIgdD17bmFtZTplLm9wZXJhdGlvbklkLnNwbGl0KCJVc2luZyIpWzBdLG1ldGhvZDplLm1ldGhvZFR5cGUudG9Mb3dlckNhc2UoKSx1cmw6ZS51cmwscGF0aFBhcmFtczpbXSxxdWVyeVBhcmFtczpbXSxib2R5UGFyYW1zOltdLHJlc1BhcmFtOnt9fTtpZihBcnJheS5pc0FycmF5KGUucGFyYW1ldGVycykmJmUucGFyYW1ldGVycy5tYXAoKGZ1bmN0aW9uKGUpe3N3aXRjaChlLmluKXtjYXNlInBhdGgiOnQucGF0aFBhcmFtcy5wdXNoKHtuYW1lOmUubmFtZSx0eXBlOnAoZS50eXBlKX0pO2JyZWFrO2Nhc2UicXVlcnkiOnQucXVlcnlQYXJhbXMucHVzaCh7bmFtZTplLm5hbWUsdHlwZTpwKGUudHlwZSl9KTticmVhaztkZWZhdWx0OnQuYm9keVBhcmFtcy5wdXNoKHtuYW1lOiJwYXJhbXMiLHR5cGU6ImFycmF5Ij09PWUudHlwZT8iYXJyYXkiOiJvYmplY3QiLGNoaWxkcmVuOmUuY2hpbGRyZW59KX19KSksQXJyYXkuaXNBcnJheShlLnJlc3BvbnNlQ29kZXMpKXt2YXIgbj0iIjtlLnJlc3BvbnNlSnNvbiBpbnN0YW5jZW9mIEFycmF5P249ImFycmF5IjplLnJlc3BvbnNlSnNvbiBpbnN0YW5jZW9mIE9iamVjdCYmKG49Im9iamVjdCIpLHQucmVzUGFyYW09e25hbWU6InJlcyIsdHlwZTpuLGNoaWxkcmVuOnUoZS5yZXNwb25zZVBhcmFtZXRlcnMsZS5yZXNwb25zZVJlZlBhcmFtZXRlcnMpfX1yZXR1cm4gdH0odGhpcy5hcGkpLHQ9IiIsbj0iIixyPSIiLGk9IiIsYT0iIixvPSIiLHM9IiI7dHJ5e3Q9eSh0aGlzLmFwaSksbj1oKGUpLHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zcGxpdCgiIik7cmV0dXJuIHRbMF09dFswXS50b1VwcGVyQ2FzZSgpLHQuam9pbigiIil9KCIiLmNvbmNhdChlLm5hbWUpKSxpPWUuYm9keVBhcmFtc1swXT8iLy8g5Y+C5pWw5o6l5Y+jXG4iK1QoZS5ib2R5UGFyYW1zWzBdLCIiLmNvbmNhdChyLCJQYXJhbXMiKSwhMCk6IiIsYT1lLnJlc1BhcmFtPyIvLyDlk43lupTmjqXlj6NcbiIrVChlLnJlc1BhcmFtLCIiLmNvbmNhdChyLCJSZXMiKSwhMSk6IiIsbz15KHRoaXMuYXBpKSxzPWIoZSxyKX1jYXRjaChlKXt9dGhpcy5qc0NvZGU9dCtuLHRoaXMudHNDb2RlPWkrYStvK3N9LG1ldGhvZHM6e319LEU9KG4oIjJiOWMiKSxuKCIyODc3IikpLGc9T2JqZWN0KEUuYSkoUywoZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5fc2VsZi5fYztyZXR1cm4gdCgiZGl2Iix7c3RhdGljQ2xhc3M6ImdlbmVyYXRlIn0sW3QoImRpdiIsW3QoImRpdiIse3N0YXRpY0NsYXNzOiJhcGktdGl0bGUiLGRvbVByb3BzOntpbm5lckhUTUw6ZS5fcyhlLiR0KCJzY3JpcHQuSlNFeGFtcGxlIikpfX0pLHQoImVkaXRvci1zY3JpcHQiLHthdHRyczp7dmFsdWU6ZS5qc0NvZGV9fSldLDEpLHQoImRpdiIsW3QoImRpdiIse3N0YXRpY0NsYXNzOiJhcGktdGl0bGUiLGRvbVByb3BzOntpbm5lckhUTUw6ZS5fcyhlLiR0KCJzY3JpcHQuVFNFeGFtcGxlIikpfX0pLHQoImVkaXRvci1zY3JpcHQiLHthdHRyczp7dmFsdWU6ZS50c0NvZGUsdHNNb2RlOiEwfX0pXSwxKV0pfSksW10sITEsbnVsbCwiNWRmNzgwMjAiLG51bGwpO3QuZGVmYXVsdD1nLmV4cG9ydHN9LCI5YjkzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7aWYoISgwLHIuZGVmYXVsdCkoZSkpe3ZhciB0O2NvbnN0IG49bnVsbCE9KHQ9bnVsbD09ZT92b2lkIDA6ZS50eXBlKT90OkpTT04uc3RyaW5naWZ5KGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoYE5vdCBhIHZhbGlkIG5vZGUgb2YgdHlwZSAiJHtufSJgKX19O3ZhciByPW4oIjJmODIiKX0sIjliZWUiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7dmFyIHI9bigiMDBjNSIpO3QuZGVmYXVsdD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2NhY2hlZE1hcD12b2lkIDAsdGhpcy5fY29kZT12b2lkIDAsdGhpcy5fb3B0cz12b2lkIDAsdGhpcy5fcmF3TWFwcGluZ3M9dm9pZCAwLHRoaXMuX2xhc3RHZW5MaW5lPXZvaWQgMCx0aGlzLl9sYXN0U291cmNlTGluZT12b2lkIDAsdGhpcy5fbGFzdFNvdXJjZUNvbHVtbj12b2lkIDAsdGhpcy5fY2FjaGVkTWFwPW51bGwsdGhpcy5fY29kZT10LHRoaXMuX29wdHM9ZSx0aGlzLl9yYXdNYXBwaW5ncz1bXX1nZXQoKXtpZighdGhpcy5fY2FjaGVkTWFwKXtjb25zdCBlPXRoaXMuX2NhY2hlZE1hcD1uZXcgci5Tb3VyY2VNYXBHZW5lcmF0b3Ioe3NvdXJjZVJvb3Q6dGhpcy5fb3B0cy5zb3VyY2VSb290fSksdD10aGlzLl9jb2RlOyJzdHJpbmciPT10eXBlb2YgdD9lLnNldFNvdXJjZUNvbnRlbnQodGhpcy5fb3B0cy5zb3VyY2VGaWxlTmFtZS5yZXBsYWNlKC9cXC9nLCIvIiksdCk6Im9iamVjdCI9PXR5cGVvZiB0JiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG49PntlLnNldFNvdXJjZUNvbnRlbnQobi5yZXBsYWNlKC9cXC9nLCIvIiksdFtuXSl9KSx0aGlzLl9yYXdNYXBwaW5ncy5mb3JFYWNoKHQ9PmUuYWRkTWFwcGluZyh0KSxlKX1yZXR1cm4gdGhpcy5fY2FjaGVkTWFwLnRvSlNPTigpfWdldFJhd01hcHBpbmdzKCl7cmV0dXJuIHRoaXMuX3Jhd01hcHBpbmdzLnNsaWNlKCl9bWFyayhlLHQsbixyLGksYSxvKXt0aGlzLl9sYXN0R2VuTGluZSE9PWUmJm51bGw9PT1ufHwob3x8dGhpcy5fbGFzdEdlbkxpbmUhPT1lfHx0aGlzLl9sYXN0U291cmNlTGluZSE9PW58fHRoaXMuX2xhc3RTb3VyY2VDb2x1bW4hPT1yKSYmKHRoaXMuX2NhY2hlZE1hcD1udWxsLHRoaXMuX2xhc3RHZW5MaW5lPWUsdGhpcy5fbGFzdFNvdXJjZUxpbmU9bix0aGlzLl9sYXN0U291cmNlQ29sdW1uPXIsdGhpcy5fcmF3TWFwcGluZ3MucHVzaCh7bmFtZTppfHx2b2lkIDAsZ2VuZXJhdGVkOntsaW5lOmUsY29sdW1uOnR9LHNvdXJjZTpudWxsPT1uP3ZvaWQgMDooYXx8dGhpcy5fb3B0cy5zb3VyY2VGaWxlTmFtZSkucmVwbGFjZSgvXFwvZywiLyIpLG9yaWdpbmFsOm51bGw9PW4/dm9pZCAwOntsaW5lOm4sY29sdW1uOnJ9fSkpfX19LCI5ZTYxIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCI0ZjM4IiksaT1uKCIxNmU2IiksYT1yLl9faW1wb3J0RGVmYXVsdChuKCJkOTY1IikpLG89ci5fX2ltcG9ydERlZmF1bHQobigiNDFiYSIpKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7ZS51c2UoYS5kZWZhdWx0KTt2YXIgdD1lLnVzZShvLmRlZmF1bHQpLG49dC5UeXBlLmRlZixzPXQuVHlwZS5vcixsPXMuYXBwbHkodm9pZCAwLHIuX19zcHJlYWRBcnJheXMoaS5CaW5hcnlPcGVyYXRvcnMsWyIqKiJdKSk7bigiQmluYXJ5RXhwcmVzc2lvbiIpLmZpZWxkKCJvcGVyYXRvciIsbCk7dmFyIHU9cy5hcHBseSh2b2lkIDAsci5fX3NwcmVhZEFycmF5cyhpLkFzc2lnbm1lbnRPcGVyYXRvcnMsWyIqKj0iXSkpO24oIkFzc2lnbm1lbnRFeHByZXNzaW9uIikuZmllbGQoIm9wZXJhdG9yIix1KX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sIjllODAiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuV0hJTEVfVFlQRVM9dC5VU0VSV0hJVEVTUEFDQUJMRV9UWVBFUz10LlVOQVJZTElLRV9UWVBFUz10LlRZUEVTQ1JJUFRfVFlQRVM9dC5UU1RZUEVfVFlQRVM9dC5UU1RZUEVFTEVNRU5UX1RZUEVTPXQuVFNFTlRJVFlOQU1FX1RZUEVTPXQuVFNCQVNFVFlQRV9UWVBFUz10LlRFUk1JTkFUT1JMRVNTX1RZUEVTPXQuU1RBVEVNRU5UX1RZUEVTPXQuU1RBTkRBUkRJWkVEX1RZUEVTPXQuU0NPUEFCTEVfVFlQRVM9dC5QVVJFSVNIX1RZUEVTPXQuUFJPUEVSVFlfVFlQRVM9dC5QUklWQVRFX1RZUEVTPXQuUEFUVEVSTl9UWVBFUz10LlBBVFRFUk5MSUtFX1RZUEVTPXQuT0JKRUNUTUVNQkVSX1RZUEVTPXQuTU9EVUxFU1BFQ0lGSUVSX1RZUEVTPXQuTU9EVUxFREVDTEFSQVRJT05fVFlQRVM9dC5NSVNDRUxMQU5FT1VTX1RZUEVTPXQuTUVUSE9EX1RZUEVTPXQuTFZBTF9UWVBFUz10LkxPT1BfVFlQRVM9dC5MSVRFUkFMX1RZUEVTPXQuSlNYX1RZUEVTPXQuSU1QT1JUT1JFWFBPUlRERUNMQVJBVElPTl9UWVBFUz10LklNTVVUQUJMRV9UWVBFUz10LkZVTkNUSU9OX1RZUEVTPXQuRlVOQ1RJT05QQVJFTlRfVFlQRVM9dC5GT1JfVFlQRVM9dC5GT1JYU1RBVEVNRU5UX1RZUEVTPXQuRkxPV19UWVBFUz10LkZMT1dUWVBFX1RZUEVTPXQuRkxPV1BSRURJQ0FURV9UWVBFUz10LkZMT1dERUNMQVJBVElPTl9UWVBFUz10LkZMT1dCQVNFQU5OT1RBVElPTl9UWVBFUz10LkVYUFJFU1NJT05fVFlQRVM9dC5FWFBSRVNTSU9OV1JBUFBFUl9UWVBFUz10LkVYUE9SVERFQ0xBUkFUSU9OX1RZUEVTPXQuRU5VTU1FTUJFUl9UWVBFUz10LkVOVU1CT0RZX1RZUEVTPXQuREVDTEFSQVRJT05fVFlQRVM9dC5DT05ESVRJT05BTF9UWVBFUz10LkNPTVBMRVRJT05TVEFURU1FTlRfVFlQRVM9dC5DTEFTU19UWVBFUz10LkJMT0NLX1RZUEVTPXQuQkxPQ0tQQVJFTlRfVFlQRVM9dC5CSU5BUllfVFlQRVM9dC5BQ0NFU1NPUl9UWVBFUz12b2lkIDA7dmFyIHI9bigiYjk3OCIpO2NvbnN0IGk9ci5GTElQUEVEX0FMSUFTX0tFWVMuU3RhbmRhcmRpemVkO3QuU1RBTkRBUkRJWkVEX1RZUEVTPWk7Y29uc3QgYT1yLkZMSVBQRURfQUxJQVNfS0VZUy5FeHByZXNzaW9uO3QuRVhQUkVTU0lPTl9UWVBFUz1hO2NvbnN0IG89ci5GTElQUEVEX0FMSUFTX0tFWVMuQmluYXJ5O3QuQklOQVJZX1RZUEVTPW87Y29uc3Qgcz1yLkZMSVBQRURfQUxJQVNfS0VZUy5TY29wYWJsZTt0LlNDT1BBQkxFX1RZUEVTPXM7Y29uc3QgbD1yLkZMSVBQRURfQUxJQVNfS0VZUy5CbG9ja1BhcmVudDt0LkJMT0NLUEFSRU5UX1RZUEVTPWw7Y29uc3QgdT1yLkZMSVBQRURfQUxJQVNfS0VZUy5CbG9jazt0LkJMT0NLX1RZUEVTPXU7Y29uc3QgcD1yLkZMSVBQRURfQUxJQVNfS0VZUy5TdGF0ZW1lbnQ7dC5TVEFURU1FTlRfVFlQRVM9cDtjb25zdCBjPXIuRkxJUFBFRF9BTElBU19LRVlTLlRlcm1pbmF0b3JsZXNzO3QuVEVSTUlOQVRPUkxFU1NfVFlQRVM9Yztjb25zdCBkPXIuRkxJUFBFRF9BTElBU19LRVlTLkNvbXBsZXRpb25TdGF0ZW1lbnQ7dC5DT01QTEVUSU9OU1RBVEVNRU5UX1RZUEVTPWQ7Y29uc3QgZj1yLkZMSVBQRURfQUxJQVNfS0VZUy5Db25kaXRpb25hbDt0LkNPTkRJVElPTkFMX1RZUEVTPWY7Y29uc3QgeT1yLkZMSVBQRURfQUxJQVNfS0VZUy5Mb29wO3QuTE9PUF9UWVBFUz15O2NvbnN0IG09ci5GTElQUEVEX0FMSUFTX0tFWVMuV2hpbGU7dC5XSElMRV9UWVBFUz1tO2NvbnN0IGg9ci5GTElQUEVEX0FMSUFTX0tFWVMuRXhwcmVzc2lvbldyYXBwZXI7dC5FWFBSRVNTSU9OV1JBUFBFUl9UWVBFUz1oO2NvbnN0IFQ9ci5GTElQUEVEX0FMSUFTX0tFWVMuRm9yO3QuRk9SX1RZUEVTPVQ7Y29uc3QgYj1yLkZMSVBQRURfQUxJQVNfS0VZUy5Gb3JYU3RhdGVtZW50O3QuRk9SWFNUQVRFTUVOVF9UWVBFUz1iO2NvbnN0IFM9ci5GTElQUEVEX0FMSUFTX0tFWVMuRnVuY3Rpb247dC5GVU5DVElPTl9UWVBFUz1TO2NvbnN0IEU9ci5GTElQUEVEX0FMSUFTX0tFWVMuRnVuY3Rpb25QYXJlbnQ7dC5GVU5DVElPTlBBUkVOVF9UWVBFUz1FO2NvbnN0IGc9ci5GTElQUEVEX0FMSUFTX0tFWVMuUHVyZWlzaDt0LlBVUkVJU0hfVFlQRVM9Zztjb25zdCB2PXIuRkxJUFBFRF9BTElBU19LRVlTLkRlY2xhcmF0aW9uO3QuREVDTEFSQVRJT05fVFlQRVM9djtjb25zdCBQPXIuRkxJUFBFRF9BTElBU19LRVlTLlBhdHRlcm5MaWtlO3QuUEFUVEVSTkxJS0VfVFlQRVM9UDtjb25zdCB4PXIuRkxJUFBFRF9BTElBU19LRVlTLkxWYWw7dC5MVkFMX1RZUEVTPXg7Y29uc3QgQT1yLkZMSVBQRURfQUxJQVNfS0VZUy5UU0VudGl0eU5hbWU7dC5UU0VOVElUWU5BTUVfVFlQRVM9QTtjb25zdCBPPXIuRkxJUFBFRF9BTElBU19LRVlTLkxpdGVyYWw7dC5MSVRFUkFMX1RZUEVTPU87Y29uc3QgXz1yLkZMSVBQRURfQUxJQVNfS0VZUy5JbW11dGFibGU7dC5JTU1VVEFCTEVfVFlQRVM9Xztjb25zdCB3PXIuRkxJUFBFRF9BTElBU19LRVlTLlVzZXJXaGl0ZXNwYWNhYmxlO3QuVVNFUldISVRFU1BBQ0FCTEVfVFlQRVM9dztjb25zdCBJPXIuRkxJUFBFRF9BTElBU19LRVlTLk1ldGhvZDt0Lk1FVEhPRF9UWVBFUz1JO2NvbnN0IE49ci5GTElQUEVEX0FMSUFTX0tFWVMuT2JqZWN0TWVtYmVyO3QuT0JKRUNUTUVNQkVSX1RZUEVTPU47Y29uc3QgRD1yLkZMSVBQRURfQUxJQVNfS0VZUy5Qcm9wZXJ0eTt0LlBST1BFUlRZX1RZUEVTPUQ7Y29uc3Qgaj1yLkZMSVBQRURfQUxJQVNfS0VZUy5VbmFyeUxpa2U7dC5VTkFSWUxJS0VfVFlQRVM9ajtjb25zdCBDPXIuRkxJUFBFRF9BTElBU19LRVlTLlBhdHRlcm47dC5QQVRURVJOX1RZUEVTPUM7Y29uc3QgTD1yLkZMSVBQRURfQUxJQVNfS0VZUy5DbGFzczt0LkNMQVNTX1RZUEVTPUw7Y29uc3Qgaz1yLkZMSVBQRURfQUxJQVNfS0VZUy5JbXBvcnRPckV4cG9ydERlY2xhcmF0aW9uO3QuSU1QT1JUT1JFWFBPUlRERUNMQVJBVElPTl9UWVBFUz1rO2NvbnN0IE09ci5GTElQUEVEX0FMSUFTX0tFWVMuRXhwb3J0RGVjbGFyYXRpb247dC5FWFBPUlRERUNMQVJBVElPTl9UWVBFUz1NO2NvbnN0IEI9ci5GTElQUEVEX0FMSUFTX0tFWVMuTW9kdWxlU3BlY2lmaWVyO3QuTU9EVUxFU1BFQ0lGSUVSX1RZUEVTPUI7Y29uc3QgRj1yLkZMSVBQRURfQUxJQVNfS0VZUy5BY2Nlc3Nvcjt0LkFDQ0VTU09SX1RZUEVTPUY7Y29uc3QgUj1yLkZMSVBQRURfQUxJQVNfS0VZUy5Qcml2YXRlO3QuUFJJVkFURV9UWVBFUz1SO2NvbnN0IEs9ci5GTElQUEVEX0FMSUFTX0tFWVMuRmxvdzt0LkZMT1dfVFlQRVM9Sztjb25zdCBWPXIuRkxJUFBFRF9BTElBU19LRVlTLkZsb3dUeXBlO3QuRkxPV1RZUEVfVFlQRVM9Vjtjb25zdCBZPXIuRkxJUFBFRF9BTElBU19LRVlTLkZsb3dCYXNlQW5ub3RhdGlvbjt0LkZMT1dCQVNFQU5OT1RBVElPTl9UWVBFUz1ZO2NvbnN0IEo9ci5GTElQUEVEX0FMSUFTX0tFWVMuRmxvd0RlY2xhcmF0aW9uO3QuRkxPV0RFQ0xBUkFUSU9OX1RZUEVTPUo7Y29uc3QgWD1yLkZMSVBQRURfQUxJQVNfS0VZUy5GbG93UHJlZGljYXRlO3QuRkxPV1BSRURJQ0FURV9UWVBFUz1YO2NvbnN0IFU9ci5GTElQUEVEX0FMSUFTX0tFWVMuRW51bUJvZHk7dC5FTlVNQk9EWV9UWVBFUz1VO2NvbnN0IHE9ci5GTElQUEVEX0FMSUFTX0tFWVMuRW51bU1lbWJlcjt0LkVOVU1NRU1CRVJfVFlQRVM9cTtjb25zdCBXPXIuRkxJUFBFRF9BTElBU19LRVlTLkpTWDt0LkpTWF9UWVBFUz1XO2NvbnN0IHo9ci5GTElQUEVEX0FMSUFTX0tFWVMuTWlzY2VsbGFuZW91czt0Lk1JU0NFTExBTkVPVVNfVFlQRVM9ejtjb25zdCBHPXIuRkxJUFBFRF9BTElBU19LRVlTLlR5cGVTY3JpcHQ7dC5UWVBFU0NSSVBUX1RZUEVTPUc7Y29uc3QgJD1yLkZMSVBQRURfQUxJQVNfS0VZUy5UU1R5cGVFbGVtZW50O3QuVFNUWVBFRUxFTUVOVF9UWVBFUz0kO2NvbnN0IEg9ci5GTElQUEVEX0FMSUFTX0tFWVMuVFNUeXBlO3QuVFNUWVBFX1RZUEVTPUg7Y29uc3QgUT1yLkZMSVBQRURfQUxJQVNfS0VZUy5UU0Jhc2VUeXBlO3QuVFNCQVNFVFlQRV9UWVBFUz1RO2NvbnN0IFo9azt0Lk1PRFVMRURFQ0xBUkFUSU9OX1RZUEVTPVp9LGE3MGQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KShlLHQpLCgwLGkuZGVmYXVsdCkoZSx0KSwoMCxhLmRlZmF1bHQpKGUsdCksZX07dmFyIHI9bigiNDI4NSIpLGk9bigiZmE1ZCIpLGE9bigiN2U0NyIpfSxhNzM3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIjRmMzgiKSxpPXIuX19pbXBvcnREZWZhdWx0KG4oIjQxYmEiKSksYT1yLl9faW1wb3J0RGVmYXVsdChuKCIwOWM4IikpO3QuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLnVzZShpLmRlZmF1bHQpLG49dC5UeXBlLmRlZixyPXQuVHlwZS5vcixvPWUudXNlKGEuZGVmYXVsdCkuZGVmYXVsdHMscz1yKG4oIlR5cGVBbm5vdGF0aW9uIiksbigiVFNUeXBlQW5ub3RhdGlvbiIpLG51bGwpLGw9cihuKCJUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iKSxuKCJUU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIpLG51bGwpO24oIklkZW50aWZpZXIiKS5maWVsZCgidHlwZUFubm90YXRpb24iLHMsby5udWxsKSxuKCJPYmplY3RQYXR0ZXJuIikuZmllbGQoInR5cGVBbm5vdGF0aW9uIixzLG8ubnVsbCksbigiRnVuY3Rpb24iKS5maWVsZCgicmV0dXJuVHlwZSIscyxvLm51bGwpLmZpZWxkKCJ0eXBlUGFyYW1ldGVycyIsbCxvLm51bGwpLG4oIkNsYXNzUHJvcGVydHkiKS5idWlsZCgia2V5IiwidmFsdWUiLCJ0eXBlQW5ub3RhdGlvbiIsInN0YXRpYyIpLmZpZWxkKCJ2YWx1ZSIscihuKCJFeHByZXNzaW9uIiksbnVsbCkpLmZpZWxkKCJzdGF0aWMiLEJvb2xlYW4sby5mYWxzZSkuZmllbGQoInR5cGVBbm5vdGF0aW9uIixzLG8ubnVsbCksWyJDbGFzc0RlY2xhcmF0aW9uIiwiQ2xhc3NFeHByZXNzaW9uIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7bihlKS5maWVsZCgidHlwZVBhcmFtZXRlcnMiLGwsby5udWxsKS5maWVsZCgic3VwZXJUeXBlUGFyYW1ldGVycyIscihuKCJUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpLG4oIlRTVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKSxudWxsKSxvLm51bGwpLmZpZWxkKCJpbXBsZW1lbnRzIixyKFtuKCJDbGFzc0ltcGxlbWVudHMiKV0sW24oIlRTRXhwcmVzc2lvbldpdGhUeXBlQXJndW1lbnRzIildKSxvLmVtcHR5QXJyYXkpfSkpfSxlLmV4cG9ydHM9dC5kZWZhdWx0fSxhOWM3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQsbj0iIil7aWYoci5oYXMoZSkpcmV0dXJuO3IuYWRkKGUpO2NvbnN0e2ludGVybmFsOmksdHJhY2U6YX09ZnVuY3Rpb24oZSx0KXtjb25zdHtzdGFja1RyYWNlTGltaXQ6bixwcmVwYXJlU3RhY2tUcmFjZTpyfT1FcnJvcjtsZXQgaTtpZihFcnJvci5zdGFja1RyYWNlTGltaXQ9MStlK3QsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9ZnVuY3Rpb24oZSx0KXtpPXR9LChuZXcgRXJyb3IpLnN0YWNrLEVycm9yLnN0YWNrVHJhY2VMaW1pdD1uLEVycm9yLnByZXBhcmVTdGFja1RyYWNlPXIsIWkpcmV0dXJue2ludGVybmFsOiExLHRyYWNlOiIifTtjb25zdCBhPWkuc2xpY2UoMStlLDErZSt0KTtyZXR1cm57aW50ZXJuYWw6L1tcXC9dQGJhYmVsW1xcL10vLnRlc3QoYVsxXS5nZXRGaWxlTmFtZSgpKSx0cmFjZTphLm1hcChlPT4iICAgIGF0ICIrZSkuam9pbigiXG4iKX19KDEsMil9O2NvbnN0IHI9bmV3IFNldH0sYWEyMDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCI0ZjM4IiksaT1yLl9faW1wb3J0RGVmYXVsdChuKCI0MWJhIikpLGE9ci5fX2ltcG9ydERlZmF1bHQobigiNjkxMSIpKSxvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUudXNlKGkuZGVmYXVsdCksbj1lLnVzZShhLmRlZmF1bHQpLHI9dC5idWlsdEluVHlwZXMuYXJyYXkscz10LmJ1aWx0SW5UeXBlcy5vYmplY3QsbD10LmJ1aWx0SW5UeXBlcy5mdW5jdGlvbix1PWZ1bmN0aW9uIGUoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgRXJyb3IoIlBhdGhWaXNpdG9yIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBpbnZva2VkIHdpdGhvdXQgJ25ldyciKTt0aGlzLl9yZXVzYWJsZUNvbnRleHRTdGFjaz1bXSx0aGlzLl9tZXRob2ROYW1lVGFibGU9ZnVuY3Rpb24oZSl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIHIgaW4gZSkvXnZpc2l0W0EtWl0vLnRlc3QocikmJihuW3Iuc2xpY2UoInZpc2l0Ii5sZW5ndGgpXT0hMCk7Zm9yKHZhciBpPXQuY29tcHV0ZVN1cGVydHlwZUxvb2t1cFRhYmxlKG4pLGE9T2JqZWN0LmNyZWF0ZShudWxsKSxvPU9iamVjdC5rZXlzKGkpLHM9by5sZW5ndGgsdT0wO3U8czsrK3Upe3ZhciBwPW9bdV07cj0idmlzaXQiK2lbcF0sbC5jaGVjayhlW3JdKSYmKGFbcF09cil9cmV0dXJuIGF9KHRoaXMpLHRoaXMuX3Nob3VsZFZpc2l0Q29tbWVudHM9by5jYWxsKHRoaXMuX21ldGhvZE5hbWVUYWJsZSwiQmxvY2siKXx8by5jYWxsKHRoaXMuX21ldGhvZE5hbWVUYWJsZSwiTGluZSIpLHRoaXMuQ29udGV4dD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBFcnJvcigiIik7aWYoISh0aGlzIGluc3RhbmNlb2YgdSkpdGhyb3cgbmV3IEVycm9yKCIiKTtpZighKHIgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgRXJyb3IoIiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ2aXNpdG9yIix7dmFsdWU6ZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLHRoaXMuY3VycmVudFBhdGg9cix0aGlzLm5lZWRUb0NhbGxUcmF2ZXJzZT0hMCxPYmplY3Quc2VhbCh0aGlzKX1pZighKGUgaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgRXJyb3IoIiIpO3ZhciByPXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSk7cmV0dXJuIHIuY29uc3RydWN0b3I9dCxwKHIsZiksdH0odGhpcyksdGhpcy5fdmlzaXRpbmc9ITEsdGhpcy5fY2hhbmdlUmVwb3J0ZWQ9ITF9O2Z1bmN0aW9uIHAoZSx0KXtmb3IodmFyIG4gaW4gdClvLmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGV9dS5mcm9tTWV0aG9kc09iamVjdD1mdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdSlyZXR1cm4gZTtpZighcy5jaGVjayhlKSlyZXR1cm4gbmV3IHU7dmFyIHQ9ZnVuY3Rpb24gZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBFcnJvcigiVmlzaXRvciBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgaW52b2tlZCB3aXRob3V0ICduZXcnIik7dS5jYWxsKHRoaXMpfSxuPXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyk7cmV0dXJuIG4uY29uc3RydWN0b3I9dCxwKG4sZSkscCh0LHUpLGwuYXNzZXJ0KHQuZnJvbU1ldGhvZHNPYmplY3QpLGwuYXNzZXJ0KHQudmlzaXQpLG5ldyB0fSx1LnZpc2l0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUuZnJvbU1ldGhvZHNPYmplY3QodCkudmlzaXQoZSl9O3ZhciBjPXUucHJvdG90eXBlO2Z1bmN0aW9uIGQoZSxpKXtpZighKGUgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgRXJyb3IoIiIpO2lmKCEoaSBpbnN0YW5jZW9mIHUpKXRocm93IG5ldyBFcnJvcigiIik7dmFyIGE9ZS52YWx1ZTtpZihyLmNoZWNrKGEpKWUuZWFjaChpLnZpc2l0V2l0aG91dFJlc2V0LGkpO2Vsc2UgaWYocy5jaGVjayhhKSl7dmFyIGw9dC5nZXRGaWVsZE5hbWVzKGEpO2kuX3Nob3VsZFZpc2l0Q29tbWVudHMmJmEuY29tbWVudHMmJmwuaW5kZXhPZigiY29tbWVudHMiKTwwJiZsLnB1c2goImNvbW1lbnRzIik7Zm9yKHZhciBwPWwubGVuZ3RoLGM9W10sZD0wO2Q8cDsrK2Qpe3ZhciBmPWxbZF07by5jYWxsKGEsZil8fChhW2ZdPXQuZ2V0RmllbGRWYWx1ZShhLGYpKSxjLnB1c2goZS5nZXQoZikpfWZvcihkPTA7ZDxwOysrZClpLnZpc2l0V2l0aG91dFJlc2V0KGNbZF0pfXJldHVybiBlLnZhbHVlfWMudmlzaXQ9ZnVuY3Rpb24oKXtpZih0aGlzLl92aXNpdGluZyl0aHJvdyBuZXcgRXJyb3IoIlJlY3Vyc2l2ZWx5IGNhbGxpbmcgdmlzaXRvci52aXNpdChwYXRoKSByZXNldHMgdmlzaXRvciBzdGF0ZS4gVHJ5IHRoaXMudmlzaXQocGF0aCkgb3IgdGhpcy50cmF2ZXJzZShwYXRoKSBpbnN0ZWFkLiIpO3RoaXMuX3Zpc2l0aW5nPSEwLHRoaXMuX2NoYW5nZVJlcG9ydGVkPSExLHRoaXMuX2Fib3J0UmVxdWVzdGVkPSExO2Zvcih2YXIgZSx0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodCksaT0wO2k8dDsrK2kpcltpXT1hcmd1bWVudHNbaV07clswXWluc3RhbmNlb2Ygbnx8KHJbMF09bmV3IG4oe3Jvb3Q6clswXX0pLmdldCgicm9vdCIpKSx0aGlzLnJlc2V0LmFwcGx5KHRoaXMscik7dHJ5e3ZhciBhPXRoaXMudmlzaXRXaXRob3V0UmVzZXQoclswXSk7ZT0hMH1maW5hbGx5e2lmKHRoaXMuX3Zpc2l0aW5nPSExLCFlJiZ0aGlzLl9hYm9ydFJlcXVlc3RlZClyZXR1cm4gclswXS52YWx1ZX1yZXR1cm4gYX0sYy5BYm9ydFJlcXVlc3Q9ZnVuY3Rpb24oKXt9LGMuYWJvcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuX2Fib3J0UmVxdWVzdGVkPSEwO3ZhciB0PW5ldyBlLkFib3J0UmVxdWVzdDt0aHJvdyB0LmNhbmNlbD1mdW5jdGlvbigpe2UuX2Fib3J0UmVxdWVzdGVkPSExfSx0fSxjLnJlc2V0PWZ1bmN0aW9uKGUpe30sYy52aXNpdFdpdGhvdXRSZXNldD1mdW5jdGlvbihlKXtpZih0aGlzIGluc3RhbmNlb2YgdGhpcy5Db250ZXh0KXJldHVybiB0aGlzLnZpc2l0b3IudmlzaXRXaXRob3V0UmVzZXQoZSk7aWYoIShlIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IEVycm9yKCIiKTt2YXIgdD1lLnZhbHVlLHI9dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYic3RyaW5nIj09dHlwZW9mIHQudHlwZSYmdGhpcy5fbWV0aG9kTmFtZVRhYmxlW3QudHlwZV07aWYoIXIpcmV0dXJuIGQoZSx0aGlzKTt2YXIgaT10aGlzLmFjcXVpcmVDb250ZXh0KGUpO3RyeXtyZXR1cm4gaS5pbnZva2VWaXNpdG9yTWV0aG9kKHIpfWZpbmFsbHl7dGhpcy5yZWxlYXNlQ29udGV4dChpKX19LGMuYWNxdWlyZUNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT10aGlzLl9yZXVzYWJsZUNvbnRleHRTdGFjay5sZW5ndGg/bmV3IHRoaXMuQ29udGV4dChlKTp0aGlzLl9yZXVzYWJsZUNvbnRleHRTdGFjay5wb3AoKS5yZXNldChlKX0sYy5yZWxlYXNlQ29udGV4dD1mdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiB0aGlzLkNvbnRleHQpKXRocm93IG5ldyBFcnJvcigiIik7dGhpcy5fcmV1c2FibGVDb250ZXh0U3RhY2sucHVzaChlKSxlLmN1cnJlbnRQYXRoPW51bGx9LGMucmVwb3J0Q2hhbmdlZD1mdW5jdGlvbigpe3RoaXMuX2NoYW5nZVJlcG9ydGVkPSEwfSxjLndhc0NoYW5nZVJlcG9ydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoYW5nZVJlcG9ydGVkfTt2YXIgZj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBmLnJlc2V0PWZ1bmN0aW9uKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHRoaXMuQ29udGV4dCkpdGhyb3cgbmV3IEVycm9yKCIiKTtpZighKGUgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgRXJyb3IoIiIpO3JldHVybiB0aGlzLmN1cnJlbnRQYXRoPWUsdGhpcy5uZWVkVG9DYWxsVHJhdmVyc2U9ITAsdGhpc30sZi5pbnZva2VWaXNpdG9yTWV0aG9kPWZ1bmN0aW9uKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHRoaXMuQ29udGV4dCkpdGhyb3cgbmV3IEVycm9yKCIiKTtpZighKHRoaXMuY3VycmVudFBhdGggaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgRXJyb3IoIiIpO3ZhciB0PXRoaXMudmlzaXRvcltlXS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50UGF0aCk7aWYoITE9PT10P3RoaXMubmVlZFRvQ2FsbFRyYXZlcnNlPSExOnZvaWQgMCE9PXQmJih0aGlzLmN1cnJlbnRQYXRoPXRoaXMuY3VycmVudFBhdGgucmVwbGFjZSh0KVswXSx0aGlzLm5lZWRUb0NhbGxUcmF2ZXJzZSYmdGhpcy50cmF2ZXJzZSh0aGlzLmN1cnJlbnRQYXRoKSksITEhPT10aGlzLm5lZWRUb0NhbGxUcmF2ZXJzZSl0aHJvdyBuZXcgRXJyb3IoIk11c3QgZWl0aGVyIGNhbGwgdGhpcy50cmF2ZXJzZSBvciByZXR1cm4gZmFsc2UgaW4gIitlKTt2YXIgcj10aGlzLmN1cnJlbnRQYXRoO3JldHVybiByJiZyLnZhbHVlfSxmLnRyYXZlcnNlPWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgdGhpcy5Db250ZXh0KSl0aHJvdyBuZXcgRXJyb3IoIiIpO2lmKCEoZSBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBFcnJvcigiIik7aWYoISh0aGlzLmN1cnJlbnRQYXRoIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IEVycm9yKCIiKTtyZXR1cm4gdGhpcy5uZWVkVG9DYWxsVHJhdmVyc2U9ITEsZChlLHUuZnJvbU1ldGhvZHNPYmplY3QodHx8dGhpcy52aXNpdG9yKSl9LGYudmlzaXQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB0aGlzLkNvbnRleHQpKXRocm93IG5ldyBFcnJvcigiIik7aWYoIShlIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IEVycm9yKCIiKTtpZighKHRoaXMuY3VycmVudFBhdGggaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgRXJyb3IoIiIpO3JldHVybiB0aGlzLm5lZWRUb0NhbGxUcmF2ZXJzZT0hMSx1LmZyb21NZXRob2RzT2JqZWN0KHR8fHRoaXMudmlzaXRvcikudmlzaXRXaXRob3V0UmVzZXQoZSl9LGYucmVwb3J0Q2hhbmdlZD1mdW5jdGlvbigpe3RoaXMudmlzaXRvci5yZXBvcnRDaGFuZ2VkKCl9LGYuYWJvcnQ9ZnVuY3Rpb24oKXt0aGlzLm5lZWRUb0NhbGxUcmF2ZXJzZT0hMSx0aGlzLnZpc2l0b3IuYWJvcnQoKX0sdX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sYWE3MTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk51bGxhYmxlVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaSh0KX0sdC5GdW5jdGlvblR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVyh0KXx8eCh0KXx8aSh0KXx8VSh0KSYmYShuW24ubGVuZ3RoLTNdKX0sdC5VcGRhdGVFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFooZSx0KXx8UShlLHQpfSx0Lk9iamVjdEV4cHJlc3Npb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuZShuLHtleHByZXNzaW9uU3RhdGVtZW50OiEwLGFycm93Qm9keTohMH0pfSx0LkRvRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIWUuYXN5bmMmJm5lKG4se2V4cHJlc3Npb25TdGF0ZW1lbnQ6ITB9KX0sdC5CaW5hcnk9ZnVuY3Rpb24oZSx0KXtpZigiKioiPT09ZS5vcGVyYXRvciYmdSh0LHtvcGVyYXRvcjoiKioifSkpcmV0dXJuIHQubGVmdD09PWU7aWYoUShlLHQpKXJldHVybiEwO2lmKFooZSx0KXx8cSh0KXx8cyh0KSlyZXR1cm4hMDtpZihsKHQpKXtjb25zdCBuPXQub3BlcmF0b3Iscj1IW25dLGk9ZS5vcGVyYXRvcixhPUhbaV07aWYocj09PWEmJnQucmlnaHQ9PT1lJiYhQSh0KXx8cj5hKXJldHVybiEwfX0sdC5JbnRlcnNlY3Rpb25UeXBlQW5ub3RhdGlvbj10LlVuaW9uVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaSh0KXx8dyh0KXx8eCh0KXx8Vyh0KX0sdC5PcHRpb25hbEluZGV4ZWRBY2Nlc3NUeXBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFAodCx7b2JqZWN0VHlwZTplfSl9LHQuVFNBc0V4cHJlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5UU1R5cGVBc3NlcnRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5UU0ludGVyc2VjdGlvblR5cGU9dC5UU1VuaW9uVHlwZT1mdW5jdGlvbihlLHQpe3JldHVybiBrKHQpfHxSKHQpfHxCKHQpfHxZKHQpfHxLKHQpfSx0LlRTSW5mZXJUeXBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGsodCl8fFIodCl9LHQuQmluYXJ5RXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe3JldHVybiJpbiI9PT1lLm9wZXJhdG9yJiYoeih0KXx8Yih0KSl9LHQuU2VxdWVuY2VFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIShnKHQpfHxYKHQpfHxqKHQpfHx2KHQpJiZ0LnRlc3Q9PT1lfHxHKHQpJiZ0LnRlc3Q9PT1lfHxTKHQpJiZ0LnJpZ2h0PT09ZXx8TCh0KSYmdC5kaXNjcmltaW5hbnQ9PT1lfHxUKHQpJiZ0LmV4cHJlc3Npb249PT1lKX0sdC5Bd2FpdEV4cHJlc3Npb249dC5ZaWVsZEV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbCh0KXx8cSh0KXx8WihlLHQpfHxzKHQpJiYkKGUpfHx5KHQpJiZlPT09dC50ZXN0fHxRKGUsdCl9LHQuQ2xhc3NFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbmUobix7ZXhwcmVzc2lvblN0YXRlbWVudDohMCxleHBvcnREZWZhdWx0OiEwfSl9LHQuVW5hcnlMaWtlPWVlLHQuRnVuY3Rpb25FeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbmUobix7ZXhwcmVzc2lvblN0YXRlbWVudDohMCxleHBvcnREZWZhdWx0OiEwfSl9LHQuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbSh0KXx8dGUoZSx0KX0sdC5Db25kaXRpb25hbEV4cHJlc3Npb249dGUsdC5PcHRpb25hbENhbGxFeHByZXNzaW9uPXQuT3B0aW9uYWxNZW1iZXJFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAodCx7Y2FsbGVlOmV9KXx8Tyh0LHtvYmplY3Q6ZX0pfSx0LkFzc2lnbm1lbnRFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISFJKGUubGVmdCl8fHRlKGUsdCl9LHQuTG9naWNhbEV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZS5vcGVyYXRvcil7Y2FzZSJ8fCI6cmV0dXJuISFBKHQpJiYoIj8/Ij09PXQub3BlcmF0b3J8fCImJiI9PT10Lm9wZXJhdG9yKTtjYXNlIiYmIjpyZXR1cm4gQSh0LHtvcGVyYXRvcjoiPz8ifSk7Y2FzZSI/PyI6cmV0dXJuIEEodCkmJiI/PyIhPT10Lm9wZXJhdG9yfX0sdC5JZGVudGlmaWVyPWZ1bmN0aW9uKGUsdCxuKXtpZigibGV0Ij09PWUubmFtZSl7Y29uc3Qgcj1PKHQse29iamVjdDplLGNvbXB1dGVkOiEwfSl8fEQodCx7b2JqZWN0OmUsY29tcHV0ZWQ6ITAsb3B0aW9uYWw6ITF9KTtyZXR1cm4gbmUobix7ZXhwcmVzc2lvblN0YXRlbWVudDpyLGZvckhlYWQ6cixmb3JJbkhlYWQ6cixmb3JPZkhlYWQ6ITB9KX1yZXR1cm4iYXN5bmMiPT09ZS5uYW1lJiZFKHQpJiZlPT09dC5sZWZ0fTt2YXIgcj1uKCIyNTJhIik7Y29uc3R7aXNBcnJheVR5cGVBbm5vdGF0aW9uOmksaXNBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjphLGlzQXNzaWdubWVudEV4cHJlc3Npb246byxpc0F3YWl0RXhwcmVzc2lvbjpzLGlzQmluYXJ5OmwsaXNCaW5hcnlFeHByZXNzaW9uOnUsaXNDYWxsRXhwcmVzc2lvbjpwLGlzQ2xhc3NEZWNsYXJhdGlvbjpjLGlzQ2xhc3NFeHByZXNzaW9uOmQsaXNDb25kaXRpb25hbDpmLGlzQ29uZGl0aW9uYWxFeHByZXNzaW9uOnksaXNFeHBvcnREZWNsYXJhdGlvbjptLGlzRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOmgsaXNFeHByZXNzaW9uU3RhdGVtZW50OlQsaXNGb3I6Yixpc0ZvckluU3RhdGVtZW50OlMsaXNGb3JPZlN0YXRlbWVudDpFLGlzRm9yU3RhdGVtZW50OmcsaXNJZlN0YXRlbWVudDp2LGlzSW5kZXhlZEFjY2Vzc1R5cGU6UCxpc0ludGVyc2VjdGlvblR5cGVBbm5vdGF0aW9uOngsaXNMb2dpY2FsRXhwcmVzc2lvbjpBLGlzTWVtYmVyRXhwcmVzc2lvbjpPLGlzTmV3RXhwcmVzc2lvbjpfLGlzTnVsbGFibGVUeXBlQW5ub3RhdGlvbjp3LGlzT2JqZWN0UGF0dGVybjpJLGlzT3B0aW9uYWxDYWxsRXhwcmVzc2lvbjpOLGlzT3B0aW9uYWxNZW1iZXJFeHByZXNzaW9uOkQsaXNSZXR1cm5TdGF0ZW1lbnQ6aixpc1NlcXVlbmNlRXhwcmVzc2lvbjpDLGlzU3dpdGNoU3RhdGVtZW50OkwsaXNUU0FycmF5VHlwZTprLGlzVFNBc0V4cHJlc3Npb246TSxpc1RTSW50ZXJzZWN0aW9uVHlwZTpCLGlzVFNOb25OdWxsRXhwcmVzc2lvbjpGLGlzVFNPcHRpb25hbFR5cGU6Uixpc1RTUmVzdFR5cGU6Syxpc1RTVHlwZUFzc2VydGlvbjpWLGlzVFNVbmlvblR5cGU6WSxpc1RhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjpKLGlzVGhyb3dTdGF0ZW1lbnQ6WCxpc1R5cGVBbm5vdGF0aW9uOlUsaXNVbmFyeUxpa2U6cSxpc1VuaW9uVHlwZUFubm90YXRpb246Vyxpc1ZhcmlhYmxlRGVjbGFyYXRvcjp6LGlzV2hpbGVTdGF0ZW1lbnQ6Ryxpc1lpZWxkRXhwcmVzc2lvbjokfT1yLEg9eyJ8fCI6MCwiPz8iOjAsIiYmIjoxLCJ8IjoyLCJeIjozLCImIjo0LCI9PSI6NSwiPT09Ijo1LCIhPSI6NSwiIT09Ijo1LCI8Ijo2LCI+Ijo2LCI8PSI6NiwiPj0iOjYsaW46NixpbnN0YW5jZW9mOjYsIj4+Ijo3LCI8PCI6NywiPj4+Ijo3LCIrIjo4LCItIjo4LCIqIjo5LCIvIjo5LCIlIjo5LCIqKiI6MTB9LFE9KGUsdCk9PihjKHQpfHxkKHQpKSYmdC5zdXBlckNsYXNzPT09ZSxaPShlLHQpPT4oTyh0KXx8RCh0KSkmJnQub2JqZWN0PT09ZXx8KHAodCl8fE4odCl8fF8odCkpJiZ0LmNhbGxlZT09PWV8fEoodCkmJnQudGFnPT09ZXx8Rih0KTtmdW5jdGlvbiBlZShlLHQpe3JldHVybiBaKGUsdCl8fHUodCx7b3BlcmF0b3I6IioqIixsZWZ0OmV9KXx8UShlLHQpfWZ1bmN0aW9uIHRlKGUsdCl7cmV0dXJuISEocSh0KXx8bCh0KXx8eSh0LHt0ZXN0OmV9KXx8cyh0KXx8Vih0KXx8TSh0KSl8fGVlKGUsdCl9ZnVuY3Rpb24gbmUoZSx7ZXhwcmVzc2lvblN0YXRlbWVudDp0PSExLGFycm93Qm9keTpuPSExLGV4cG9ydERlZmF1bHQ6cj0hMSxmb3JIZWFkOmk9ITEsZm9ySW5IZWFkOnM9ITEsZm9yT2ZIZWFkOnU9ITF9KXtsZXQgcD1lLmxlbmd0aC0xLGM9ZVtwXTtwLS07bGV0IGQ9ZVtwXTtmb3IoO3A+PTA7KXtpZih0JiZUKGQse2V4cHJlc3Npb246Y30pfHxyJiZoKGQse2RlY2xhcmF0aW9uOmN9KXx8biYmYShkLHtib2R5OmN9KXx8aSYmZyhkLHtpbml0OmN9KXx8cyYmUyhkLHtsZWZ0OmN9KXx8dSYmRShkLHtsZWZ0OmN9KSlyZXR1cm4hMDtpZighKFooYyxkKSYmIV8oZCl8fEMoZCkmJmQuZXhwcmVzc2lvbnNbMF09PT1jfHxmKGQse3Rlc3Q6Y30pfHxsKGQse2xlZnQ6Y30pfHxvKGQse2xlZnQ6Y30pKSlyZXR1cm4hMTtjPWQscC0tLGQ9ZVtwXX1yZXR1cm4hMX19LGFiMDI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXZvaWQgMDt2YXIgcj1uKCJjMWY3IiksaT1mdW5jdGlvbihlLHQpe3JldHVybigwLHIuZGVmYXVsdCkoZSx0LCEwKX07dC5kZWZhdWx0PWl9LGFiMjM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiNGYzOCIpLGk9bigiMTZlNiIpLGE9ci5fX2ltcG9ydERlZmF1bHQobigiNDFiYSIpKSxvPXIuX19pbXBvcnREZWZhdWx0KG4oIjA5YzgiKSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUudXNlKGEuZGVmYXVsdCkuVHlwZSxuPXQuZGVmLHI9dC5vcixzPWUudXNlKG8uZGVmYXVsdCksbD1zLmRlZmF1bHRzLHU9cy5nZXE7bigiUHJpbnRhYmxlIikuZmllbGQoImxvYyIscihuKCJTb3VyY2VMb2NhdGlvbiIpLG51bGwpLGwubnVsbCwhMCksbigiTm9kZSIpLmJhc2VzKCJQcmludGFibGUiKS5maWVsZCgidHlwZSIsU3RyaW5nKS5maWVsZCgiY29tbWVudHMiLHIoW24oIkNvbW1lbnQiKV0sbnVsbCksbC5udWxsLCEwKSxuKCJTb3VyY2VMb2NhdGlvbiIpLmZpZWxkKCJzdGFydCIsbigiUG9zaXRpb24iKSkuZmllbGQoImVuZCIsbigiUG9zaXRpb24iKSkuZmllbGQoInNvdXJjZSIscihTdHJpbmcsbnVsbCksbC5udWxsKSxuKCJQb3NpdGlvbiIpLmZpZWxkKCJsaW5lIix1KDEpKS5maWVsZCgiY29sdW1uIix1KDApKSxuKCJGaWxlIikuYmFzZXMoIk5vZGUiKS5idWlsZCgicHJvZ3JhbSIsIm5hbWUiKS5maWVsZCgicHJvZ3JhbSIsbigiUHJvZ3JhbSIpKS5maWVsZCgibmFtZSIscihTdHJpbmcsbnVsbCksbC5udWxsKSxuKCJQcm9ncmFtIikuYmFzZXMoIk5vZGUiKS5idWlsZCgiYm9keSIpLmZpZWxkKCJib2R5IixbbigiU3RhdGVtZW50IildKSxuKCJGdW5jdGlvbiIpLmJhc2VzKCJOb2RlIikuZmllbGQoImlkIixyKG4oIklkZW50aWZpZXIiKSxudWxsKSxsLm51bGwpLmZpZWxkKCJwYXJhbXMiLFtuKCJQYXR0ZXJuIildKS5maWVsZCgiYm9keSIsbigiQmxvY2tTdGF0ZW1lbnQiKSkuZmllbGQoImdlbmVyYXRvciIsQm9vbGVhbixsLmZhbHNlKS5maWVsZCgiYXN5bmMiLEJvb2xlYW4sbC5mYWxzZSksbigiU3RhdGVtZW50IikuYmFzZXMoIk5vZGUiKSxuKCJFbXB0eVN0YXRlbWVudCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgpLG4oIkJsb2NrU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJib2R5IikuZmllbGQoImJvZHkiLFtuKCJTdGF0ZW1lbnQiKV0pLG4oIkV4cHJlc3Npb25TdGF0ZW1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoImV4cHJlc3Npb24iKS5maWVsZCgiZXhwcmVzc2lvbiIsbigiRXhwcmVzc2lvbiIpKSxuKCJJZlN0YXRlbWVudCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgidGVzdCIsImNvbnNlcXVlbnQiLCJhbHRlcm5hdGUiKS5maWVsZCgidGVzdCIsbigiRXhwcmVzc2lvbiIpKS5maWVsZCgiY29uc2VxdWVudCIsbigiU3RhdGVtZW50IikpLmZpZWxkKCJhbHRlcm5hdGUiLHIobigiU3RhdGVtZW50IiksbnVsbCksbC5udWxsKSxuKCJMYWJlbGVkU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJsYWJlbCIsImJvZHkiKS5maWVsZCgibGFiZWwiLG4oIklkZW50aWZpZXIiKSkuZmllbGQoImJvZHkiLG4oIlN0YXRlbWVudCIpKSxuKCJCcmVha1N0YXRlbWVudCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgibGFiZWwiKS5maWVsZCgibGFiZWwiLHIobigiSWRlbnRpZmllciIpLG51bGwpLGwubnVsbCksbigiQ29udGludWVTdGF0ZW1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoImxhYmVsIikuZmllbGQoImxhYmVsIixyKG4oIklkZW50aWZpZXIiKSxudWxsKSxsLm51bGwpLG4oIldpdGhTdGF0ZW1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoIm9iamVjdCIsImJvZHkiKS5maWVsZCgib2JqZWN0IixuKCJFeHByZXNzaW9uIikpLmZpZWxkKCJib2R5IixuKCJTdGF0ZW1lbnQiKSksbigiU3dpdGNoU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJkaXNjcmltaW5hbnQiLCJjYXNlcyIsImxleGljYWwiKS5maWVsZCgiZGlzY3JpbWluYW50IixuKCJFeHByZXNzaW9uIikpLmZpZWxkKCJjYXNlcyIsW24oIlN3aXRjaENhc2UiKV0pLmZpZWxkKCJsZXhpY2FsIixCb29sZWFuLGwuZmFsc2UpLG4oIlJldHVyblN0YXRlbWVudCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgiYXJndW1lbnQiKS5maWVsZCgiYXJndW1lbnQiLHIobigiRXhwcmVzc2lvbiIpLG51bGwpKSxuKCJUaHJvd1N0YXRlbWVudCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgiYXJndW1lbnQiKS5maWVsZCgiYXJndW1lbnQiLG4oIkV4cHJlc3Npb24iKSksbigiVHJ5U3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJibG9jayIsImhhbmRsZXIiLCJmaW5hbGl6ZXIiKS5maWVsZCgiYmxvY2siLG4oIkJsb2NrU3RhdGVtZW50IikpLmZpZWxkKCJoYW5kbGVyIixyKG4oIkNhdGNoQ2xhdXNlIiksbnVsbCksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFuZGxlcnMmJnRoaXMuaGFuZGxlcnNbMF18fG51bGx9KSkuZmllbGQoImhhbmRsZXJzIixbbigiQ2F0Y2hDbGF1c2UiKV0sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFuZGxlcj9bdGhpcy5oYW5kbGVyXTpbXX0pLCEwKS5maWVsZCgiZ3VhcmRlZEhhbmRsZXJzIixbbigiQ2F0Y2hDbGF1c2UiKV0sbC5lbXB0eUFycmF5KS5maWVsZCgiZmluYWxpemVyIixyKG4oIkJsb2NrU3RhdGVtZW50IiksbnVsbCksbC5udWxsKSxuKCJDYXRjaENsYXVzZSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInBhcmFtIiwiZ3VhcmQiLCJib2R5IikuZmllbGQoInBhcmFtIixuKCJQYXR0ZXJuIikpLmZpZWxkKCJndWFyZCIscihuKCJFeHByZXNzaW9uIiksbnVsbCksbC5udWxsKS5maWVsZCgiYm9keSIsbigiQmxvY2tTdGF0ZW1lbnQiKSksbigiV2hpbGVTdGF0ZW1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoInRlc3QiLCJib2R5IikuZmllbGQoInRlc3QiLG4oIkV4cHJlc3Npb24iKSkuZmllbGQoImJvZHkiLG4oIlN0YXRlbWVudCIpKSxuKCJEb1doaWxlU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJib2R5IiwidGVzdCIpLmZpZWxkKCJib2R5IixuKCJTdGF0ZW1lbnQiKSkuZmllbGQoInRlc3QiLG4oIkV4cHJlc3Npb24iKSksbigiRm9yU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJpbml0IiwidGVzdCIsInVwZGF0ZSIsImJvZHkiKS5maWVsZCgiaW5pdCIscihuKCJWYXJpYWJsZURlY2xhcmF0aW9uIiksbigiRXhwcmVzc2lvbiIpLG51bGwpKS5maWVsZCgidGVzdCIscihuKCJFeHByZXNzaW9uIiksbnVsbCkpLmZpZWxkKCJ1cGRhdGUiLHIobigiRXhwcmVzc2lvbiIpLG51bGwpKS5maWVsZCgiYm9keSIsbigiU3RhdGVtZW50IikpLG4oIkZvckluU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJsZWZ0IiwicmlnaHQiLCJib2R5IikuZmllbGQoImxlZnQiLHIobigiVmFyaWFibGVEZWNsYXJhdGlvbiIpLG4oIkV4cHJlc3Npb24iKSkpLmZpZWxkKCJyaWdodCIsbigiRXhwcmVzc2lvbiIpKS5maWVsZCgiYm9keSIsbigiU3RhdGVtZW50IikpLG4oIkRlYnVnZ2VyU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCksbigiRGVjbGFyYXRpb24iKS5iYXNlcygiU3RhdGVtZW50IiksbigiRnVuY3Rpb25EZWNsYXJhdGlvbiIpLmJhc2VzKCJGdW5jdGlvbiIsIkRlY2xhcmF0aW9uIikuYnVpbGQoImlkIiwicGFyYW1zIiwiYm9keSIpLmZpZWxkKCJpZCIsbigiSWRlbnRpZmllciIpKSxuKCJGdW5jdGlvbkV4cHJlc3Npb24iKS5iYXNlcygiRnVuY3Rpb24iLCJFeHByZXNzaW9uIikuYnVpbGQoImlkIiwicGFyYW1zIiwiYm9keSIpLG4oIlZhcmlhYmxlRGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgia2luZCIsImRlY2xhcmF0aW9ucyIpLmZpZWxkKCJraW5kIixyKCJ2YXIiLCJsZXQiLCJjb25zdCIpKS5maWVsZCgiZGVjbGFyYXRpb25zIixbbigiVmFyaWFibGVEZWNsYXJhdG9yIildKSxuKCJWYXJpYWJsZURlY2xhcmF0b3IiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJpZCIsImluaXQiKS5maWVsZCgiaWQiLG4oIlBhdHRlcm4iKSkuZmllbGQoImluaXQiLHIobigiRXhwcmVzc2lvbiIpLG51bGwpLGwubnVsbCksbigiRXhwcmVzc2lvbiIpLmJhc2VzKCJOb2RlIiksbigiVGhpc0V4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCksbigiQXJyYXlFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgiZWxlbWVudHMiKS5maWVsZCgiZWxlbWVudHMiLFtyKG4oIkV4cHJlc3Npb24iKSxudWxsKV0pLG4oIk9iamVjdEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJwcm9wZXJ0aWVzIikuZmllbGQoInByb3BlcnRpZXMiLFtuKCJQcm9wZXJ0eSIpXSksbigiUHJvcGVydHkiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJraW5kIiwia2V5IiwidmFsdWUiKS5maWVsZCgia2luZCIscigiaW5pdCIsImdldCIsInNldCIpKS5maWVsZCgia2V5IixyKG4oIkxpdGVyYWwiKSxuKCJJZGVudGlmaWVyIikpKS5maWVsZCgidmFsdWUiLG4oIkV4cHJlc3Npb24iKSksbigiU2VxdWVuY2VFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgiZXhwcmVzc2lvbnMiKS5maWVsZCgiZXhwcmVzc2lvbnMiLFtuKCJFeHByZXNzaW9uIildKTt2YXIgcD1yKCItIiwiKyIsIiEiLCJ+IiwidHlwZW9mIiwidm9pZCIsImRlbGV0ZSIpO24oIlVuYXJ5RXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoIm9wZXJhdG9yIiwiYXJndW1lbnQiLCJwcmVmaXgiKS5maWVsZCgib3BlcmF0b3IiLHApLmZpZWxkKCJhcmd1bWVudCIsbigiRXhwcmVzc2lvbiIpKS5maWVsZCgicHJlZml4IixCb29sZWFuLGwudHJ1ZSk7dmFyIGM9ci5hcHBseSh2b2lkIDAsaS5CaW5hcnlPcGVyYXRvcnMpO24oIkJpbmFyeUV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJvcGVyYXRvciIsImxlZnQiLCJyaWdodCIpLmZpZWxkKCJvcGVyYXRvciIsYykuZmllbGQoImxlZnQiLG4oIkV4cHJlc3Npb24iKSkuZmllbGQoInJpZ2h0IixuKCJFeHByZXNzaW9uIikpO3ZhciBkPXIuYXBwbHkodm9pZCAwLGkuQXNzaWdubWVudE9wZXJhdG9ycyk7bigiQXNzaWdubWVudEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJvcGVyYXRvciIsImxlZnQiLCJyaWdodCIpLmZpZWxkKCJvcGVyYXRvciIsZCkuZmllbGQoImxlZnQiLHIobigiUGF0dGVybiIpLG4oIk1lbWJlckV4cHJlc3Npb24iKSkpLmZpZWxkKCJyaWdodCIsbigiRXhwcmVzc2lvbiIpKTt2YXIgZj1yKCIrKyIsIi0tIik7bigiVXBkYXRlRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoIm9wZXJhdG9yIiwiYXJndW1lbnQiLCJwcmVmaXgiKS5maWVsZCgib3BlcmF0b3IiLGYpLmZpZWxkKCJhcmd1bWVudCIsbigiRXhwcmVzc2lvbiIpKS5maWVsZCgicHJlZml4IixCb29sZWFuKTt2YXIgeT1yLmFwcGx5KHZvaWQgMCxpLkxvZ2ljYWxPcGVyYXRvcnMpO24oIkxvZ2ljYWxFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgib3BlcmF0b3IiLCJsZWZ0IiwicmlnaHQiKS5maWVsZCgib3BlcmF0b3IiLHkpLmZpZWxkKCJsZWZ0IixuKCJFeHByZXNzaW9uIikpLmZpZWxkKCJyaWdodCIsbigiRXhwcmVzc2lvbiIpKSxuKCJDb25kaXRpb25hbEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJ0ZXN0IiwiY29uc2VxdWVudCIsImFsdGVybmF0ZSIpLmZpZWxkKCJ0ZXN0IixuKCJFeHByZXNzaW9uIikpLmZpZWxkKCJjb25zZXF1ZW50IixuKCJFeHByZXNzaW9uIikpLmZpZWxkKCJhbHRlcm5hdGUiLG4oIkV4cHJlc3Npb24iKSksbigiTmV3RXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImNhbGxlZSIsImFyZ3VtZW50cyIpLmZpZWxkKCJjYWxsZWUiLG4oIkV4cHJlc3Npb24iKSkuZmllbGQoImFyZ3VtZW50cyIsW24oIkV4cHJlc3Npb24iKV0pLG4oIkNhbGxFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgiY2FsbGVlIiwiYXJndW1lbnRzIikuZmllbGQoImNhbGxlZSIsbigiRXhwcmVzc2lvbiIpKS5maWVsZCgiYXJndW1lbnRzIixbbigiRXhwcmVzc2lvbiIpXSksbigiTWVtYmVyRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoIm9iamVjdCIsInByb3BlcnR5IiwiY29tcHV0ZWQiKS5maWVsZCgib2JqZWN0IixuKCJFeHByZXNzaW9uIikpLmZpZWxkKCJwcm9wZXJ0eSIscihuKCJJZGVudGlmaWVyIiksbigiRXhwcmVzc2lvbiIpKSkuZmllbGQoImNvbXB1dGVkIixCb29sZWFuLChmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcGVydHkudHlwZTtyZXR1cm4iTGl0ZXJhbCI9PT1lfHwiTWVtYmVyRXhwcmVzc2lvbiI9PT1lfHwiQmluYXJ5RXhwcmVzc2lvbiI9PT1lfSkpLG4oIlBhdHRlcm4iKS5iYXNlcygiTm9kZSIpLG4oIlN3aXRjaENhc2UiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJ0ZXN0IiwiY29uc2VxdWVudCIpLmZpZWxkKCJ0ZXN0IixyKG4oIkV4cHJlc3Npb24iKSxudWxsKSkuZmllbGQoImNvbnNlcXVlbnQiLFtuKCJTdGF0ZW1lbnQiKV0pLG4oIklkZW50aWZpZXIiKS5iYXNlcygiRXhwcmVzc2lvbiIsIlBhdHRlcm4iKS5idWlsZCgibmFtZSIpLmZpZWxkKCJuYW1lIixTdHJpbmcpLmZpZWxkKCJvcHRpb25hbCIsQm9vbGVhbixsLmZhbHNlKSxuKCJMaXRlcmFsIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgidmFsdWUiKS5maWVsZCgidmFsdWUiLHIoU3RyaW5nLEJvb2xlYW4sbnVsbCxOdW1iZXIsUmVnRXhwKSkuZmllbGQoInJlZ2V4IixyKHtwYXR0ZXJuOlN0cmluZyxmbGFnczpTdHJpbmd9LG51bGwpLChmdW5jdGlvbigpe2lmKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApe3ZhciBlPSIiO3JldHVybiB0aGlzLnZhbHVlLmlnbm9yZUNhc2UmJihlKz0iaSIpLHRoaXMudmFsdWUubXVsdGlsaW5lJiYoZSs9Im0iKSx0aGlzLnZhbHVlLmdsb2JhbCYmKGUrPSJnIikse3BhdHRlcm46dGhpcy52YWx1ZS5zb3VyY2UsZmxhZ3M6ZX19cmV0dXJuIG51bGx9KSksbigiQ29tbWVudCIpLmJhc2VzKCJQcmludGFibGUiKS5maWVsZCgidmFsdWUiLFN0cmluZykuZmllbGQoImxlYWRpbmciLEJvb2xlYW4sbC50cnVlKS5maWVsZCgidHJhaWxpbmciLEJvb2xlYW4sbC5mYWxzZSl9LGUuZXhwb3J0cz10LmRlZmF1bHR9LGFkNzk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5fcGFyYW1zPWZ1bmN0aW9uKGUpe3RoaXMucHJpbnQoZS50eXBlUGFyYW1ldGVycyxlKSx0aGlzLnRva2VuKCIoIiksdGhpcy5fcGFyYW1ldGVycyhlLnBhcmFtcyxlKSx0aGlzLnRva2VuKCIpIiksdGhpcy5wcmludChlLnJldHVyblR5cGUsZSl9LHQuX3BhcmFtZXRlcnM9ZnVuY3Rpb24oZSx0KXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0aGlzLl9wYXJhbShlW25dLHQpLG48ZS5sZW5ndGgtMSYmKHRoaXMudG9rZW4oIiwiKSx0aGlzLnNwYWNlKCkpfSx0Ll9wYXJhbT1mdW5jdGlvbihlLHQpe3RoaXMucHJpbnRKb2luKGUuZGVjb3JhdG9ycyxlKSx0aGlzLnByaW50KGUsdCksZS5vcHRpb25hbCYmdGhpcy50b2tlbigiPyIpLHRoaXMucHJpbnQoZS50eXBlQW5ub3RhdGlvbixlKX0sdC5fbWV0aG9kSGVhZD1mdW5jdGlvbihlKXtjb25zdCB0PWUua2luZCxuPWUua2V5OyJnZXQiIT09dCYmInNldCIhPT10fHwodGhpcy53b3JkKHQpLHRoaXMuc3BhY2UoKSksZS5hc3luYyYmKHRoaXMuX2NhdGNoVXAoInN0YXJ0IixuLmxvYyksdGhpcy53b3JkKCJhc3luYyIpLHRoaXMuc3BhY2UoKSksIm1ldGhvZCIhPT10JiYiaW5pdCIhPT10fHxlLmdlbmVyYXRvciYmdGhpcy50b2tlbigiKiIpLGUuY29tcHV0ZWQ/KHRoaXMudG9rZW4oIlsiKSx0aGlzLnByaW50KG4sZSksdGhpcy50b2tlbigiXSIpKTp0aGlzLnByaW50KG4sZSksZS5vcHRpb25hbCYmdGhpcy50b2tlbigiPyIpLHRoaXMuX3BhcmFtcyhlKX0sdC5fcHJlZGljYXRlPWZ1bmN0aW9uKGUpe2UucHJlZGljYXRlJiYoZS5yZXR1cm5UeXBlfHx0aGlzLnRva2VuKCI6IiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5wcmVkaWNhdGUsZSkpfSx0Ll9mdW5jdGlvbkhlYWQ9ZnVuY3Rpb24oZSl7ZS5hc3luYyYmKHRoaXMud29yZCgiYXN5bmMiKSx0aGlzLnNwYWNlKCkpLHRoaXMud29yZCgiZnVuY3Rpb24iKSxlLmdlbmVyYXRvciYmdGhpcy50b2tlbigiKiIpLHRoaXMuc3BhY2UoKSxlLmlkJiZ0aGlzLnByaW50KGUuaWQsZSksdGhpcy5fcGFyYW1zKGUpLHRoaXMuX3ByZWRpY2F0ZShlKX0sdC5GdW5jdGlvbkRlY2xhcmF0aW9uPXQuRnVuY3Rpb25FeHByZXNzaW9uPWZ1bmN0aW9uKGUpe3RoaXMuX2Z1bmN0aW9uSGVhZChlKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLmJvZHksZSl9LHQuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb249ZnVuY3Rpb24oZSl7ZS5hc3luYyYmKHRoaXMud29yZCgiYXN5bmMiKSx0aGlzLnNwYWNlKCkpO2NvbnN0IHQ9ZS5wYXJhbXNbMF07dGhpcy5mb3JtYXQucmV0YWluTGluZXN8fHRoaXMuZm9ybWF0LmF1eGlsaWFyeUNvbW1lbnRCZWZvcmV8fHRoaXMuZm9ybWF0LmF1eGlsaWFyeUNvbW1lbnRBZnRlcnx8MSE9PWUucGFyYW1zLmxlbmd0aHx8IWkodCl8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scjtyZXR1cm4hIShlLnR5cGVQYXJhbWV0ZXJzfHxlLnJldHVyblR5cGV8fGUucHJlZGljYXRlfHx0LnR5cGVBbm5vdGF0aW9ufHx0Lm9wdGlvbmFsfHxudWxsIT0obj10LmxlYWRpbmdDb21tZW50cykmJm4ubGVuZ3RofHxudWxsIT0ocj10LnRyYWlsaW5nQ29tbWVudHMpJiZyLmxlbmd0aCl9KGUsdCk/dGhpcy5fcGFyYW1zKGUpOnRoaXMucHJpbnQodCxlKSx0aGlzLl9wcmVkaWNhdGUoZSksdGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIj0+IiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5ib2R5LGUpfTt2YXIgcj1uKCIyNTJhIik7Y29uc3R7aXNJZGVudGlmaWVyOml9PXJ9LGIwM2Q6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5uYW1lZFR5cGVzPXZvaWQgMCx0Lm5hbWVkVHlwZXN8fCh0Lm5hbWVkVHlwZXM9e30pfSxiMGQzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRmlsZT1mdW5jdGlvbihlKXtlLnByb2dyYW0mJnRoaXMucHJpbnQoZS5wcm9ncmFtLmludGVycHJldGVyLGUpLHRoaXMucHJpbnQoZS5wcm9ncmFtLGUpfSx0LlByb2dyYW09ZnVuY3Rpb24oZSl7dGhpcy5wcmludElubmVyQ29tbWVudHMoZSwhMSksdGhpcy5wcmludFNlcXVlbmNlKGUuZGlyZWN0aXZlcyxlKSxlLmRpcmVjdGl2ZXMmJmUuZGlyZWN0aXZlcy5sZW5ndGgmJnRoaXMubmV3bGluZSgpLHRoaXMucHJpbnRTZXF1ZW5jZShlLmJvZHksZSl9LHQuQmxvY2tTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ7dGhpcy50b2tlbigieyIpLHRoaXMucHJpbnRJbm5lckNvbW1lbnRzKGUpO2NvbnN0IG49bnVsbD09KHQ9ZS5kaXJlY3RpdmVzKT92b2lkIDA6dC5sZW5ndGg7ZS5ib2R5Lmxlbmd0aHx8bj8odGhpcy5uZXdsaW5lKCksdGhpcy5wcmludFNlcXVlbmNlKGUuZGlyZWN0aXZlcyxlLHtpbmRlbnQ6ITB9KSxuJiZ0aGlzLm5ld2xpbmUoKSx0aGlzLnByaW50U2VxdWVuY2UoZS5ib2R5LGUse2luZGVudDohMH0pLHRoaXMucmVtb3ZlVHJhaWxpbmdOZXdsaW5lKCksdGhpcy5zb3VyY2UoImVuZCIsZS5sb2MpLHRoaXMuZW5kc1dpdGgoMTApfHx0aGlzLm5ld2xpbmUoKSx0aGlzLnJpZ2h0QnJhY2UoKSk6KHRoaXMuc291cmNlKCJlbmQiLGUubG9jKSx0aGlzLnRva2VuKCJ9IikpfSx0LkRpcmVjdGl2ZT1mdW5jdGlvbihlKXt0aGlzLnByaW50KGUudmFsdWUsZSksdGhpcy5zZW1pY29sb24oKX0sdC5EaXJlY3RpdmVMaXRlcmFsPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9dGhpcy5nZXRQb3NzaWJsZVJhdyhlKTtpZihudWxsIT10KXJldHVybiB2b2lkIHRoaXMudG9rZW4odCk7Y29uc3R7dmFsdWU6bn09ZTtpZihpLnRlc3Qobikpe2lmKHIudGVzdChuKSl0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBBU1Q6IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwcmludCBhIGRpcmVjdGl2ZSBjb250YWluaW5nIGJvdGggdW5lc2NhcGVkIHNpbmdsZSBhbmQgZG91YmxlIHF1b3Rlcy4iKTt0aGlzLnRva2VuKGAnJHtufSdgKX1lbHNlIHRoaXMudG9rZW4oYCIke259ImApfSx0LkludGVycHJldGVyRGlyZWN0aXZlPWZ1bmN0aW9uKGUpe3RoaXMudG9rZW4oYCMhJHtlLnZhbHVlfVxuYCl9LHQuUGxhY2Vob2xkZXI9ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigiJSUiKSx0aGlzLnByaW50KGUubmFtZSksdGhpcy50b2tlbigiJSUiKSwiU3RhdGVtZW50Ij09PWUuZXhwZWN0ZWROb2RlJiZ0aGlzLnNlbWljb2xvbigpfSxuKCIyNTJhIik7Y29uc3Qgcj0vKD86XnxbXlxcXSkoPzpcXFxcKSonLyxpPS8oPzpefFteXFxdKSg/OlxcXFwpKiIvfSxiMGZlOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpeyEwIT09dCYmZS50b2tlbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UU1R5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUpe3RoaXMudG9rZW4oIjoiKSx0aGlzLnNwYWNlKCksZS5vcHRpb25hbCYmdGhpcy50b2tlbigiPyIpLHRoaXMucHJpbnQoZS50eXBlQW5ub3RhdGlvbixlKX0sdC5UU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbj10LlRTVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb249ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigiPCIpLHRoaXMucHJpbnRMaXN0KGUucGFyYW1zLGUse30pLHRoaXMudG9rZW4oIj4iKX0sdC5UU1R5cGVQYXJhbWV0ZXI9ZnVuY3Rpb24oZSl7dGhpcy53b3JkKGUubmFtZSksZS5jb25zdHJhaW50JiYodGhpcy5zcGFjZSgpLHRoaXMud29yZCgiZXh0ZW5kcyIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuY29uc3RyYWludCxlKSksZS5kZWZhdWx0JiYodGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIj0iKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLmRlZmF1bHQsZSkpfSx0LlRTUGFyYW1ldGVyUHJvcGVydHk9ZnVuY3Rpb24oZSl7ZS5hY2Nlc3NpYmlsaXR5JiYodGhpcy53b3JkKGUuYWNjZXNzaWJpbGl0eSksdGhpcy5zcGFjZSgpKSxlLnJlYWRvbmx5JiYodGhpcy53b3JkKCJyZWFkb25seSIpLHRoaXMuc3BhY2UoKSksdGhpcy5fcGFyYW0oZS5wYXJhbWV0ZXIpfSx0LlRTRGVjbGFyZUZ1bmN0aW9uPWZ1bmN0aW9uKGUpe2UuZGVjbGFyZSYmKHRoaXMud29yZCgiZGVjbGFyZSIpLHRoaXMuc3BhY2UoKSksdGhpcy5fZnVuY3Rpb25IZWFkKGUpLHRoaXMudG9rZW4oIjsiKX0sdC5UU0RlY2xhcmVNZXRob2Q9ZnVuY3Rpb24oZSl7dGhpcy5fY2xhc3NNZXRob2RIZWFkKGUpLHRoaXMudG9rZW4oIjsiKX0sdC5UU1F1YWxpZmllZE5hbWU9ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLmxlZnQsZSksdGhpcy50b2tlbigiLiIpLHRoaXMucHJpbnQoZS5yaWdodCxlKX0sdC5UU0NhbGxTaWduYXR1cmVEZWNsYXJhdGlvbj1mdW5jdGlvbihlKXt0aGlzLnRzUHJpbnRTaWduYXR1cmVEZWNsYXJhdGlvbkJhc2UoZSksdGhpcy50b2tlbigiOyIpfSx0LlRTQ29uc3RydWN0U2lnbmF0dXJlRGVjbGFyYXRpb249ZnVuY3Rpb24oZSl7dGhpcy53b3JkKCJuZXciKSx0aGlzLnNwYWNlKCksdGhpcy50c1ByaW50U2lnbmF0dXJlRGVjbGFyYXRpb25CYXNlKGUpLHRoaXMudG9rZW4oIjsiKX0sdC5UU1Byb3BlcnR5U2lnbmF0dXJlPWZ1bmN0aW9uKGUpe2NvbnN0e3JlYWRvbmx5OnQsaW5pdGlhbGl6ZXI6bn09ZTt0JiYodGhpcy53b3JkKCJyZWFkb25seSIpLHRoaXMuc3BhY2UoKSksdGhpcy50c1ByaW50UHJvcGVydHlPck1ldGhvZE5hbWUoZSksdGhpcy5wcmludChlLnR5cGVBbm5vdGF0aW9uLGUpLG4mJih0aGlzLnNwYWNlKCksdGhpcy50b2tlbigiPSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KG4sZSkpLHRoaXMudG9rZW4oIjsiKX0sdC50c1ByaW50UHJvcGVydHlPck1ldGhvZE5hbWU9ZnVuY3Rpb24oZSl7ZS5jb21wdXRlZCYmdGhpcy50b2tlbigiWyIpLHRoaXMucHJpbnQoZS5rZXksZSksZS5jb21wdXRlZCYmdGhpcy50b2tlbigiXSIpLGUub3B0aW9uYWwmJnRoaXMudG9rZW4oIj8iKX0sdC5UU01ldGhvZFNpZ25hdHVyZT1mdW5jdGlvbihlKXtjb25zdHtraW5kOnR9PWU7InNldCIhPT10JiYiZ2V0IiE9PXR8fCh0aGlzLndvcmQodCksdGhpcy5zcGFjZSgpKSx0aGlzLnRzUHJpbnRQcm9wZXJ0eU9yTWV0aG9kTmFtZShlKSx0aGlzLnRzUHJpbnRTaWduYXR1cmVEZWNsYXJhdGlvbkJhc2UoZSksdGhpcy50b2tlbigiOyIpfSx0LlRTSW5kZXhTaWduYXR1cmU9ZnVuY3Rpb24oZSl7Y29uc3R7cmVhZG9ubHk6dCxzdGF0aWM6bn09ZTtuJiYodGhpcy53b3JkKCJzdGF0aWMiKSx0aGlzLnNwYWNlKCkpLHQmJih0aGlzLndvcmQoInJlYWRvbmx5IiksdGhpcy5zcGFjZSgpKSx0aGlzLnRva2VuKCJbIiksdGhpcy5fcGFyYW1ldGVycyhlLnBhcmFtZXRlcnMsZSksdGhpcy50b2tlbigiXSIpLHRoaXMucHJpbnQoZS50eXBlQW5ub3RhdGlvbixlKSx0aGlzLnRva2VuKCI7Iil9LHQuVFNBbnlLZXl3b3JkPWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJhbnkiKX0sdC5UU0JpZ0ludEtleXdvcmQ9ZnVuY3Rpb24oKXt0aGlzLndvcmQoImJpZ2ludCIpfSx0LlRTVW5rbm93bktleXdvcmQ9ZnVuY3Rpb24oKXt0aGlzLndvcmQoInVua25vd24iKX0sdC5UU051bWJlcktleXdvcmQ9ZnVuY3Rpb24oKXt0aGlzLndvcmQoIm51bWJlciIpfSx0LlRTT2JqZWN0S2V5d29yZD1mdW5jdGlvbigpe3RoaXMud29yZCgib2JqZWN0Iil9LHQuVFNCb29sZWFuS2V5d29yZD1mdW5jdGlvbigpe3RoaXMud29yZCgiYm9vbGVhbiIpfSx0LlRTU3RyaW5nS2V5d29yZD1mdW5jdGlvbigpe3RoaXMud29yZCgic3RyaW5nIil9LHQuVFNTeW1ib2xLZXl3b3JkPWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJzeW1ib2wiKX0sdC5UU1ZvaWRLZXl3b3JkPWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJ2b2lkIil9LHQuVFNVbmRlZmluZWRLZXl3b3JkPWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJ1bmRlZmluZWQiKX0sdC5UU051bGxLZXl3b3JkPWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJudWxsIil9LHQuVFNOZXZlcktleXdvcmQ9ZnVuY3Rpb24oKXt0aGlzLndvcmQoIm5ldmVyIil9LHQuVFNJbnRyaW5zaWNLZXl3b3JkPWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJpbnRyaW5zaWMiKX0sdC5UU1RoaXNUeXBlPWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJ0aGlzIil9LHQuVFNGdW5jdGlvblR5cGU9ZnVuY3Rpb24oZSl7dGhpcy50c1ByaW50RnVuY3Rpb25PckNvbnN0cnVjdG9yVHlwZShlKX0sdC5UU0NvbnN0cnVjdG9yVHlwZT1mdW5jdGlvbihlKXtlLmFic3RyYWN0JiYodGhpcy53b3JkKCJhYnN0cmFjdCIpLHRoaXMuc3BhY2UoKSksdGhpcy53b3JkKCJuZXciKSx0aGlzLnNwYWNlKCksdGhpcy50c1ByaW50RnVuY3Rpb25PckNvbnN0cnVjdG9yVHlwZShlKX0sdC50c1ByaW50RnVuY3Rpb25PckNvbnN0cnVjdG9yVHlwZT1mdW5jdGlvbihlKXtjb25zdHt0eXBlUGFyYW1ldGVyczp0LHBhcmFtZXRlcnM6bn09ZTt0aGlzLnByaW50KHQsZSksdGhpcy50b2tlbigiKCIpLHRoaXMuX3BhcmFtZXRlcnMobixlKSx0aGlzLnRva2VuKCIpIiksdGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIj0+IiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS50eXBlQW5ub3RhdGlvbi50eXBlQW5ub3RhdGlvbixlKX0sdC5UU1R5cGVSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLnR5cGVOYW1lLGUpLHRoaXMucHJpbnQoZS50eXBlUGFyYW1ldGVycyxlKX0sdC5UU1R5cGVQcmVkaWNhdGU9ZnVuY3Rpb24oZSl7ZS5hc3NlcnRzJiYodGhpcy53b3JkKCJhc3NlcnRzIiksdGhpcy5zcGFjZSgpKSx0aGlzLnByaW50KGUucGFyYW1ldGVyTmFtZSksZS50eXBlQW5ub3RhdGlvbiYmKHRoaXMuc3BhY2UoKSx0aGlzLndvcmQoImlzIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS50eXBlQW5ub3RhdGlvbi50eXBlQW5ub3RhdGlvbikpfSx0LlRTVHlwZVF1ZXJ5PWZ1bmN0aW9uKGUpe3RoaXMud29yZCgidHlwZW9mIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5leHByTmFtZSl9LHQuVFNUeXBlTGl0ZXJhbD1mdW5jdGlvbihlKXt0aGlzLnRzUHJpbnRUeXBlTGl0ZXJhbE9ySW50ZXJmYWNlQm9keShlLm1lbWJlcnMsZSl9LHQudHNQcmludFR5cGVMaXRlcmFsT3JJbnRlcmZhY2VCb2R5PWZ1bmN0aW9uKGUsdCl7dGhpcy50c1ByaW50QnJhY2VkKGUsdCl9LHQudHNQcmludEJyYWNlZD1mdW5jdGlvbihlLHQpe2lmKHRoaXMudG9rZW4oInsiKSxlLmxlbmd0aCl7dGhpcy5pbmRlbnQoKSx0aGlzLm5ld2xpbmUoKTtmb3IoY29uc3QgbiBvZiBlKXRoaXMucHJpbnQobix0KSx0aGlzLm5ld2xpbmUoKTt0aGlzLmRlZGVudCgpLHRoaXMucmlnaHRCcmFjZSgpfWVsc2UgdGhpcy50b2tlbigifSIpfSx0LlRTQXJyYXlUeXBlPWZ1bmN0aW9uKGUpe3RoaXMucHJpbnQoZS5lbGVtZW50VHlwZSxlKSx0aGlzLnRva2VuKCJbXSIpfSx0LlRTVHVwbGVUeXBlPWZ1bmN0aW9uKGUpe3RoaXMudG9rZW4oIlsiKSx0aGlzLnByaW50TGlzdChlLmVsZW1lbnRUeXBlcyxlKSx0aGlzLnRva2VuKCJdIil9LHQuVFNPcHRpb25hbFR5cGU9ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLnR5cGVBbm5vdGF0aW9uLGUpLHRoaXMudG9rZW4oIj8iKX0sdC5UU1Jlc3RUeXBlPWZ1bmN0aW9uKGUpe3RoaXMudG9rZW4oIi4uLiIpLHRoaXMucHJpbnQoZS50eXBlQW5ub3RhdGlvbixlKX0sdC5UU05hbWVkVHVwbGVNZW1iZXI9ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLmxhYmVsLGUpLGUub3B0aW9uYWwmJnRoaXMudG9rZW4oIj8iKSx0aGlzLnRva2VuKCI6IiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5lbGVtZW50VHlwZSxlKX0sdC5UU1VuaW9uVHlwZT1mdW5jdGlvbihlKXt0aGlzLnRzUHJpbnRVbmlvbk9ySW50ZXJzZWN0aW9uVHlwZShlLCJ8Iil9LHQuVFNJbnRlcnNlY3Rpb25UeXBlPWZ1bmN0aW9uKGUpe3RoaXMudHNQcmludFVuaW9uT3JJbnRlcnNlY3Rpb25UeXBlKGUsIiYiKX0sdC50c1ByaW50VW5pb25PckludGVyc2VjdGlvblR5cGU9ZnVuY3Rpb24oZSx0KXt0aGlzLnByaW50Sm9pbihlLnR5cGVzLGUse3NlcGFyYXRvcigpe3RoaXMuc3BhY2UoKSx0aGlzLnRva2VuKHQpLHRoaXMuc3BhY2UoKX19KX0sdC5UU0NvbmRpdGlvbmFsVHlwZT1mdW5jdGlvbihlKXt0aGlzLnByaW50KGUuY2hlY2tUeXBlKSx0aGlzLnNwYWNlKCksdGhpcy53b3JkKCJleHRlbmRzIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5leHRlbmRzVHlwZSksdGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIj8iKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLnRydWVUeXBlKSx0aGlzLnNwYWNlKCksdGhpcy50b2tlbigiOiIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuZmFsc2VUeXBlKX0sdC5UU0luZmVyVHlwZT1mdW5jdGlvbihlKXt0aGlzLnRva2VuKCJpbmZlciIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUudHlwZVBhcmFtZXRlcil9LHQuVFNQYXJlbnRoZXNpemVkVHlwZT1mdW5jdGlvbihlKXt0aGlzLnRva2VuKCIoIiksdGhpcy5wcmludChlLnR5cGVBbm5vdGF0aW9uLGUpLHRoaXMudG9rZW4oIikiKX0sdC5UU1R5cGVPcGVyYXRvcj1mdW5jdGlvbihlKXt0aGlzLndvcmQoZS5vcGVyYXRvciksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS50eXBlQW5ub3RhdGlvbixlKX0sdC5UU0luZGV4ZWRBY2Nlc3NUeXBlPWZ1bmN0aW9uKGUpe3RoaXMucHJpbnQoZS5vYmplY3RUeXBlLGUpLHRoaXMudG9rZW4oIlsiKSx0aGlzLnByaW50KGUuaW5kZXhUeXBlLGUpLHRoaXMudG9rZW4oIl0iKX0sdC5UU01hcHBlZFR5cGU9ZnVuY3Rpb24oZSl7Y29uc3R7bmFtZVR5cGU6dCxvcHRpb25hbDpuLHJlYWRvbmx5OmksdHlwZVBhcmFtZXRlcjphfT1lO3RoaXMudG9rZW4oInsiKSx0aGlzLnNwYWNlKCksaSYmKHIodGhpcyxpKSx0aGlzLndvcmQoInJlYWRvbmx5IiksdGhpcy5zcGFjZSgpKSx0aGlzLnRva2VuKCJbIiksdGhpcy53b3JkKGEubmFtZSksdGhpcy5zcGFjZSgpLHRoaXMud29yZCgiaW4iKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChhLmNvbnN0cmFpbnQsYSksdCYmKHRoaXMuc3BhY2UoKSx0aGlzLndvcmQoImFzIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQodCxlKSksdGhpcy50b2tlbigiXSIpLG4mJihyKHRoaXMsbiksdGhpcy50b2tlbigiPyIpKSx0aGlzLnRva2VuKCI6IiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS50eXBlQW5ub3RhdGlvbixlKSx0aGlzLnNwYWNlKCksdGhpcy50b2tlbigifSIpfSx0LlRTTGl0ZXJhbFR5cGU9ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLmxpdGVyYWwsZSl9LHQuVFNFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHM9ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLmV4cHJlc3Npb24sZSksdGhpcy5wcmludChlLnR5cGVQYXJhbWV0ZXJzLGUpfSx0LlRTSW50ZXJmYWNlRGVjbGFyYXRpb249ZnVuY3Rpb24oZSl7Y29uc3R7ZGVjbGFyZTp0LGlkOm4sdHlwZVBhcmFtZXRlcnM6cixleHRlbmRzOmksYm9keTphfT1lO3QmJih0aGlzLndvcmQoImRlY2xhcmUiKSx0aGlzLnNwYWNlKCkpLHRoaXMud29yZCgiaW50ZXJmYWNlIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQobixlKSx0aGlzLnByaW50KHIsZSksbnVsbCE9aSYmaS5sZW5ndGgmJih0aGlzLnNwYWNlKCksdGhpcy53b3JkKCJleHRlbmRzIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnRMaXN0KGksZSkpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGEsZSl9LHQuVFNJbnRlcmZhY2VCb2R5PWZ1bmN0aW9uKGUpe3RoaXMudHNQcmludFR5cGVMaXRlcmFsT3JJbnRlcmZhY2VCb2R5KGUuYm9keSxlKX0sdC5UU1R5cGVBbGlhc0RlY2xhcmF0aW9uPWZ1bmN0aW9uKGUpe2NvbnN0e2RlY2xhcmU6dCxpZDpuLHR5cGVQYXJhbWV0ZXJzOnIsdHlwZUFubm90YXRpb246aX09ZTt0JiYodGhpcy53b3JkKCJkZWNsYXJlIiksdGhpcy5zcGFjZSgpKSx0aGlzLndvcmQoInR5cGUiKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChuLGUpLHRoaXMucHJpbnQocixlKSx0aGlzLnNwYWNlKCksdGhpcy50b2tlbigiPSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGksZSksdGhpcy50b2tlbigiOyIpfSx0LlRTQXNFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe2NvbnN0e2V4cHJlc3Npb246dCx0eXBlQW5ub3RhdGlvbjpufT1lO3RoaXMucHJpbnQodCxlKSx0aGlzLnNwYWNlKCksdGhpcy53b3JkKCJhcyIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KG4sZSl9LHQuVFNUeXBlQXNzZXJ0aW9uPWZ1bmN0aW9uKGUpe2NvbnN0e3R5cGVBbm5vdGF0aW9uOnQsZXhwcmVzc2lvbjpufT1lO3RoaXMudG9rZW4oIjwiKSx0aGlzLnByaW50KHQsZSksdGhpcy50b2tlbigiPiIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KG4sZSl9LHQuVFNFbnVtRGVjbGFyYXRpb249ZnVuY3Rpb24oZSl7Y29uc3R7ZGVjbGFyZTp0LGNvbnN0Om4saWQ6cixtZW1iZXJzOml9PWU7dCYmKHRoaXMud29yZCgiZGVjbGFyZSIpLHRoaXMuc3BhY2UoKSksbiYmKHRoaXMud29yZCgiY29uc3QiKSx0aGlzLnNwYWNlKCkpLHRoaXMud29yZCgiZW51bSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KHIsZSksdGhpcy5zcGFjZSgpLHRoaXMudHNQcmludEJyYWNlZChpLGUpfSx0LlRTRW51bU1lbWJlcj1mdW5jdGlvbihlKXtjb25zdHtpZDp0LGluaXRpYWxpemVyOm59PWU7dGhpcy5wcmludCh0LGUpLG4mJih0aGlzLnNwYWNlKCksdGhpcy50b2tlbigiPSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KG4sZSkpLHRoaXMudG9rZW4oIiwiKX0sdC5UU01vZHVsZURlY2xhcmF0aW9uPWZ1bmN0aW9uKGUpe2NvbnN0e2RlY2xhcmU6dCxpZDpufT1lO2lmKHQmJih0aGlzLndvcmQoImRlY2xhcmUiKSx0aGlzLnNwYWNlKCkpLGUuZ2xvYmFsfHwodGhpcy53b3JkKCJJZGVudGlmaWVyIj09PW4udHlwZT8ibmFtZXNwYWNlIjoibW9kdWxlIiksdGhpcy5zcGFjZSgpKSx0aGlzLnByaW50KG4sZSksIWUuYm9keSlyZXR1cm4gdm9pZCB0aGlzLnRva2VuKCI7Iik7bGV0IHI9ZS5ib2R5O2Zvcig7IlRTTW9kdWxlRGVjbGFyYXRpb24iPT09ci50eXBlOyl0aGlzLnRva2VuKCIuIiksdGhpcy5wcmludChyLmlkLHIpLHI9ci5ib2R5O3RoaXMuc3BhY2UoKSx0aGlzLnByaW50KHIsZSl9LHQuVFNNb2R1bGVCbG9jaz1mdW5jdGlvbihlKXt0aGlzLnRzUHJpbnRCcmFjZWQoZS5ib2R5LGUpfSx0LlRTSW1wb3J0VHlwZT1mdW5jdGlvbihlKXtjb25zdHthcmd1bWVudDp0LHF1YWxpZmllcjpuLHR5cGVQYXJhbWV0ZXJzOnJ9PWU7dGhpcy53b3JkKCJpbXBvcnQiKSx0aGlzLnRva2VuKCIoIiksdGhpcy5wcmludCh0LGUpLHRoaXMudG9rZW4oIikiKSxuJiYodGhpcy50b2tlbigiLiIpLHRoaXMucHJpbnQobixlKSksciYmdGhpcy5wcmludChyLGUpfSx0LlRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb249ZnVuY3Rpb24oZSl7Y29uc3R7aXNFeHBvcnQ6dCxpZDpuLG1vZHVsZVJlZmVyZW5jZTpyfT1lO3QmJih0aGlzLndvcmQoImV4cG9ydCIpLHRoaXMuc3BhY2UoKSksdGhpcy53b3JkKCJpbXBvcnQiKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChuLGUpLHRoaXMuc3BhY2UoKSx0aGlzLnRva2VuKCI9IiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQocixlKSx0aGlzLnRva2VuKCI7Iil9LHQuVFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZT1mdW5jdGlvbihlKXt0aGlzLnRva2VuKCJyZXF1aXJlKCIpLHRoaXMucHJpbnQoZS5leHByZXNzaW9uLGUpLHRoaXMudG9rZW4oIikiKX0sdC5UU05vbk51bGxFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe3RoaXMucHJpbnQoZS5leHByZXNzaW9uLGUpLHRoaXMudG9rZW4oIiEiKX0sdC5UU0V4cG9ydEFzc2lnbm1lbnQ9ZnVuY3Rpb24oZSl7dGhpcy53b3JkKCJleHBvcnQiKSx0aGlzLnNwYWNlKCksdGhpcy50b2tlbigiPSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuZXhwcmVzc2lvbixlKSx0aGlzLnRva2VuKCI7Iil9LHQuVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbj1mdW5jdGlvbihlKXt0aGlzLndvcmQoImV4cG9ydCIpLHRoaXMuc3BhY2UoKSx0aGlzLndvcmQoImFzIiksdGhpcy5zcGFjZSgpLHRoaXMud29yZCgibmFtZXNwYWNlIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5pZCxlKX0sdC50c1ByaW50U2lnbmF0dXJlRGVjbGFyYXRpb25CYXNlPWZ1bmN0aW9uKGUpe2NvbnN0e3R5cGVQYXJhbWV0ZXJzOnQscGFyYW1ldGVyczpufT1lO3RoaXMucHJpbnQodCxlKSx0aGlzLnRva2VuKCIoIiksdGhpcy5fcGFyYW1ldGVycyhuLGUpLHRoaXMudG9rZW4oIikiKSx0aGlzLnByaW50KGUudHlwZUFubm90YXRpb24sZSl9LHQudHNQcmludENsYXNzTWVtYmVyTW9kaWZpZXJzPWZ1bmN0aW9uKGUsdCl7dCYmZS5kZWNsYXJlJiYodGhpcy53b3JkKCJkZWNsYXJlIiksdGhpcy5zcGFjZSgpKSxlLmFjY2Vzc2liaWxpdHkmJih0aGlzLndvcmQoZS5hY2Nlc3NpYmlsaXR5KSx0aGlzLnNwYWNlKCkpLGUuc3RhdGljJiYodGhpcy53b3JkKCJzdGF0aWMiKSx0aGlzLnNwYWNlKCkpLGUub3ZlcnJpZGUmJih0aGlzLndvcmQoIm92ZXJyaWRlIiksdGhpcy5zcGFjZSgpKSxlLmFic3RyYWN0JiYodGhpcy53b3JkKCJhYnN0cmFjdCIpLHRoaXMuc3BhY2UoKSksdCYmZS5yZWFkb25seSYmKHRoaXMud29yZCgicmVhZG9ubHkiKSx0aGlzLnNwYWNlKCkpfSxuKCIyNTJhIil9LGIyMWE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCxuKXtzd2l0Y2godC50eXBlKXtjYXNlIk1lbWJlckV4cHJlc3Npb24iOmNhc2UiT3B0aW9uYWxNZW1iZXJFeHByZXNzaW9uIjpyZXR1cm4gdC5wcm9wZXJ0eT09PWU/ISF0LmNvbXB1dGVkOnQub2JqZWN0PT09ZTtjYXNlIkpTWE1lbWJlckV4cHJlc3Npb24iOnJldHVybiB0Lm9iamVjdD09PWU7Y2FzZSJWYXJpYWJsZURlY2xhcmF0b3IiOnJldHVybiB0LmluaXQ9PT1lO2Nhc2UiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iOnJldHVybiB0LmJvZHk9PT1lO2Nhc2UiUHJpdmF0ZU5hbWUiOnJldHVybiExO2Nhc2UiQ2xhc3NNZXRob2QiOmNhc2UiQ2xhc3NQcml2YXRlTWV0aG9kIjpjYXNlIk9iamVjdE1ldGhvZCI6cmV0dXJuIHQua2V5PT09ZSYmISF0LmNvbXB1dGVkO2Nhc2UiT2JqZWN0UHJvcGVydHkiOnJldHVybiB0LmtleT09PWU/ISF0LmNvbXB1dGVkOiFufHwiT2JqZWN0UGF0dGVybiIhPT1uLnR5cGU7Y2FzZSJDbGFzc1Byb3BlcnR5IjpjYXNlIkNsYXNzQWNjZXNzb3JQcm9wZXJ0eSI6cmV0dXJuIHQua2V5IT09ZXx8ISF0LmNvbXB1dGVkO2Nhc2UiQ2xhc3NQcml2YXRlUHJvcGVydHkiOnJldHVybiB0LmtleSE9PWU7Y2FzZSJDbGFzc0RlY2xhcmF0aW9uIjpjYXNlIkNsYXNzRXhwcmVzc2lvbiI6cmV0dXJuIHQuc3VwZXJDbGFzcz09PWU7Y2FzZSJBc3NpZ25tZW50RXhwcmVzc2lvbiI6Y2FzZSJBc3NpZ25tZW50UGF0dGVybiI6cmV0dXJuIHQucmlnaHQ9PT1lO2Nhc2UiTGFiZWxlZFN0YXRlbWVudCI6Y2FzZSJDYXRjaENsYXVzZSI6Y2FzZSJSZXN0RWxlbWVudCI6cmV0dXJuITE7Y2FzZSJCcmVha1N0YXRlbWVudCI6Y2FzZSJDb250aW51ZVN0YXRlbWVudCI6cmV0dXJuITE7Y2FzZSJGdW5jdGlvbkRlY2xhcmF0aW9uIjpjYXNlIkZ1bmN0aW9uRXhwcmVzc2lvbiI6cmV0dXJuITE7Y2FzZSJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiOmNhc2UiRXhwb3J0RGVmYXVsdFNwZWNpZmllciI6cmV0dXJuITE7Y2FzZSJFeHBvcnRTcGVjaWZpZXIiOnJldHVybihudWxsPT1ufHwhbi5zb3VyY2UpJiZ0LmxvY2FsPT09ZTtjYXNlIkltcG9ydERlZmF1bHRTcGVjaWZpZXIiOmNhc2UiSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyIjpjYXNlIkltcG9ydFNwZWNpZmllciI6Y2FzZSJJbXBvcnRBdHRyaWJ1dGUiOmNhc2UiSlNYQXR0cmlidXRlIjpyZXR1cm4hMTtjYXNlIk9iamVjdFBhdHRlcm4iOmNhc2UiQXJyYXlQYXR0ZXJuIjpjYXNlIk1ldGFQcm9wZXJ0eSI6cmV0dXJuITE7Y2FzZSJPYmplY3RUeXBlUHJvcGVydHkiOnJldHVybiB0LmtleSE9PWU7Y2FzZSJUU0VudW1NZW1iZXIiOnJldHVybiB0LmlkIT09ZTtjYXNlIlRTUHJvcGVydHlTaWduYXR1cmUiOnJldHVybiB0LmtleSE9PWV8fCEhdC5jb21wdXRlZH1yZXR1cm4hMH19LGIyYTI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCI1N2RlIik7Y29uc3QgaT0oMCxyLmRlZmluZUFsaWFzZWRUeXBlKSgiSlNYIik7aSgiSlNYQXR0cmlidXRlIix7dmlzaXRvcjpbIm5hbWUiLCJ2YWx1ZSJdLGFsaWFzZXM6WyJJbW11dGFibGUiXSxmaWVsZHM6e25hbWU6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJKU1hJZGVudGlmaWVyIiwiSlNYTmFtZXNwYWNlZE5hbWUiKX0sdmFsdWU6e29wdGlvbmFsOiEwLHZhbGlkYXRlOigwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJKU1hFbGVtZW50IiwiSlNYRnJhZ21lbnQiLCJTdHJpbmdMaXRlcmFsIiwiSlNYRXhwcmVzc2lvbkNvbnRhaW5lciIpfX19KSxpKCJKU1hDbG9zaW5nRWxlbWVudCIse3Zpc2l0b3I6WyJuYW1lIl0sYWxpYXNlczpbIkltbXV0YWJsZSJdLGZpZWxkczp7bmFtZTp7dmFsaWRhdGU6KDAsci5hc3NlcnROb2RlVHlwZSkoIkpTWElkZW50aWZpZXIiLCJKU1hNZW1iZXJFeHByZXNzaW9uIiwiSlNYTmFtZXNwYWNlZE5hbWUiKX19fSksaSgiSlNYRWxlbWVudCIse2J1aWxkZXI6WyJvcGVuaW5nRWxlbWVudCIsImNsb3NpbmdFbGVtZW50IiwiY2hpbGRyZW4iLCJzZWxmQ2xvc2luZyJdLHZpc2l0b3I6WyJvcGVuaW5nRWxlbWVudCIsImNoaWxkcmVuIiwiY2xvc2luZ0VsZW1lbnQiXSxhbGlhc2VzOlsiSW1tdXRhYmxlIiwiRXhwcmVzc2lvbiJdLGZpZWxkczpPYmplY3QuYXNzaWduKHtvcGVuaW5nRWxlbWVudDp7dmFsaWRhdGU6KDAsci5hc3NlcnROb2RlVHlwZSkoIkpTWE9wZW5pbmdFbGVtZW50Iil9LGNsb3NpbmdFbGVtZW50OntvcHRpb25hbDohMCx2YWxpZGF0ZTooMCxyLmFzc2VydE5vZGVUeXBlKSgiSlNYQ2xvc2luZ0VsZW1lbnQiKX0sY2hpbGRyZW46e3ZhbGlkYXRlOigwLHIuY2hhaW4pKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxyLmFzc2VydEVhY2gpKCgwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJKU1hUZXh0IiwiSlNYRXhwcmVzc2lvbkNvbnRhaW5lciIsIkpTWFNwcmVhZENoaWxkIiwiSlNYRWxlbWVudCIsIkpTWEZyYWdtZW50IikpKX19LHtzZWxmQ2xvc2luZzp7dmFsaWRhdGU6KDAsci5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksb3B0aW9uYWw6ITB9fSl9KSxpKCJKU1hFbXB0eUV4cHJlc3Npb24iLHt9KSxpKCJKU1hFeHByZXNzaW9uQ29udGFpbmVyIix7dmlzaXRvcjpbImV4cHJlc3Npb24iXSxhbGlhc2VzOlsiSW1tdXRhYmxlIl0sZmllbGRzOntleHByZXNzaW9uOnt2YWxpZGF0ZTooMCxyLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIsIkpTWEVtcHR5RXhwcmVzc2lvbiIpfX19KSxpKCJKU1hTcHJlYWRDaGlsZCIse3Zpc2l0b3I6WyJleHByZXNzaW9uIl0sYWxpYXNlczpbIkltbXV0YWJsZSJdLGZpZWxkczp7ZXhwcmVzc2lvbjp7dmFsaWRhdGU6KDAsci5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX19fSksaSgiSlNYSWRlbnRpZmllciIse2J1aWxkZXI6WyJuYW1lIl0sZmllbGRzOntuYW1lOnt2YWxpZGF0ZTooMCxyLmFzc2VydFZhbHVlVHlwZSkoInN0cmluZyIpfX19KSxpKCJKU1hNZW1iZXJFeHByZXNzaW9uIix7dmlzaXRvcjpbIm9iamVjdCIsInByb3BlcnR5Il0sZmllbGRzOntvYmplY3Q6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJKU1hNZW1iZXJFeHByZXNzaW9uIiwiSlNYSWRlbnRpZmllciIpfSxwcm9wZXJ0eTp7dmFsaWRhdGU6KDAsci5hc3NlcnROb2RlVHlwZSkoIkpTWElkZW50aWZpZXIiKX19fSksaSgiSlNYTmFtZXNwYWNlZE5hbWUiLHt2aXNpdG9yOlsibmFtZXNwYWNlIiwibmFtZSJdLGZpZWxkczp7bmFtZXNwYWNlOnt2YWxpZGF0ZTooMCxyLmFzc2VydE5vZGVUeXBlKSgiSlNYSWRlbnRpZmllciIpfSxuYW1lOnt2YWxpZGF0ZTooMCxyLmFzc2VydE5vZGVUeXBlKSgiSlNYSWRlbnRpZmllciIpfX19KSxpKCJKU1hPcGVuaW5nRWxlbWVudCIse2J1aWxkZXI6WyJuYW1lIiwiYXR0cmlidXRlcyIsInNlbGZDbG9zaW5nIl0sdmlzaXRvcjpbIm5hbWUiLCJhdHRyaWJ1dGVzIl0sYWxpYXNlczpbIkltbXV0YWJsZSJdLGZpZWxkczp7bmFtZTp7dmFsaWRhdGU6KDAsci5hc3NlcnROb2RlVHlwZSkoIkpTWElkZW50aWZpZXIiLCJKU1hNZW1iZXJFeHByZXNzaW9uIiwiSlNYTmFtZXNwYWNlZE5hbWUiKX0sc2VsZkNsb3Npbmc6e2RlZmF1bHQ6ITF9LGF0dHJpYnV0ZXM6e3ZhbGlkYXRlOigwLHIuY2hhaW4pKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxyLmFzc2VydEVhY2gpKCgwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJKU1hBdHRyaWJ1dGUiLCJKU1hTcHJlYWRBdHRyaWJ1dGUiKSkpfSx0eXBlUGFyYW1ldGVyczp7dmFsaWRhdGU6KDAsci5hc3NlcnROb2RlVHlwZSkoIlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIiwiVFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpLG9wdGlvbmFsOiEwfX19KSxpKCJKU1hTcHJlYWRBdHRyaWJ1dGUiLHt2aXNpdG9yOlsiYXJndW1lbnQiXSxmaWVsZHM6e2FyZ3VtZW50Ont2YWxpZGF0ZTooMCxyLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpfX19KSxpKCJKU1hUZXh0Iix7YWxpYXNlczpbIkltbXV0YWJsZSJdLGJ1aWxkZXI6WyJ2YWx1ZSJdLGZpZWxkczp7dmFsdWU6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0VmFsdWVUeXBlKSgic3RyaW5nIil9fX0pLGkoIkpTWEZyYWdtZW50Iix7YnVpbGRlcjpbIm9wZW5pbmdGcmFnbWVudCIsImNsb3NpbmdGcmFnbWVudCIsImNoaWxkcmVuIl0sdmlzaXRvcjpbIm9wZW5pbmdGcmFnbWVudCIsImNoaWxkcmVuIiwiY2xvc2luZ0ZyYWdtZW50Il0sYWxpYXNlczpbIkltbXV0YWJsZSIsIkV4cHJlc3Npb24iXSxmaWVsZHM6e29wZW5pbmdGcmFnbWVudDp7dmFsaWRhdGU6KDAsci5hc3NlcnROb2RlVHlwZSkoIkpTWE9wZW5pbmdGcmFnbWVudCIpfSxjbG9zaW5nRnJhZ21lbnQ6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJKU1hDbG9zaW5nRnJhZ21lbnQiKX0sY2hpbGRyZW46e3ZhbGlkYXRlOigwLHIuY2hhaW4pKCgwLHIuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxyLmFzc2VydEVhY2gpKCgwLHIuYXNzZXJ0Tm9kZVR5cGUpKCJKU1hUZXh0IiwiSlNYRXhwcmVzc2lvbkNvbnRhaW5lciIsIkpTWFNwcmVhZENoaWxkIiwiSlNYRWxlbWVudCIsIkpTWEZyYWdtZW50IikpKX19fSksaSgiSlNYT3BlbmluZ0ZyYWdtZW50Iix7YWxpYXNlczpbIkltbXV0YWJsZSJdfSksaSgiSlNYQ2xvc2luZ0ZyYWdtZW50Iix7YWxpYXNlczpbIkltbXV0YWJsZSJdfSl9LGI0NjllOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQW55VHlwZUFubm90YXRpb249ZnVuY3Rpb24oKXt0aGlzLndvcmQoImFueSIpfSx0LkFycmF5VHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLmVsZW1lbnRUeXBlLGUpLHRoaXMudG9rZW4oIlsiKSx0aGlzLnRva2VuKCJdIil9LHQuQm9vbGVhblR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJib29sZWFuIil9LHQuQm9vbGVhbkxpdGVyYWxUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlKXt0aGlzLndvcmQoZS52YWx1ZT8idHJ1ZSI6ImZhbHNlIil9LHQuTnVsbExpdGVyYWxUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbigpe3RoaXMud29yZCgibnVsbCIpfSx0LkRlY2xhcmVDbGFzcz1mdW5jdGlvbihlLHQpe28odCl8fCh0aGlzLndvcmQoImRlY2xhcmUiKSx0aGlzLnNwYWNlKCkpLHRoaXMud29yZCgiY2xhc3MiKSx0aGlzLnNwYWNlKCksdGhpcy5faW50ZXJmYWNlaXNoKGUpfSx0LkRlY2xhcmVGdW5jdGlvbj1mdW5jdGlvbihlLHQpe28odCl8fCh0aGlzLndvcmQoImRlY2xhcmUiKSx0aGlzLnNwYWNlKCkpLHRoaXMud29yZCgiZnVuY3Rpb24iKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLmlkLGUpLHRoaXMucHJpbnQoZS5pZC50eXBlQW5ub3RhdGlvbi50eXBlQW5ub3RhdGlvbixlKSxlLnByZWRpY2F0ZSYmKHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUucHJlZGljYXRlLGUpKSx0aGlzLnNlbWljb2xvbigpfSx0LkluZmVycmVkUHJlZGljYXRlPWZ1bmN0aW9uKCl7dGhpcy50b2tlbigiJSIpLHRoaXMud29yZCgiY2hlY2tzIil9LHQuRGVjbGFyZWRQcmVkaWNhdGU9ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigiJSIpLHRoaXMud29yZCgiY2hlY2tzIiksdGhpcy50b2tlbigiKCIpLHRoaXMucHJpbnQoZS52YWx1ZSxlKSx0aGlzLnRva2VuKCIpIil9LHQuRGVjbGFyZUludGVyZmFjZT1mdW5jdGlvbihlKXt0aGlzLndvcmQoImRlY2xhcmUiKSx0aGlzLnNwYWNlKCksdGhpcy5JbnRlcmZhY2VEZWNsYXJhdGlvbihlKX0sdC5EZWNsYXJlTW9kdWxlPWZ1bmN0aW9uKGUpe3RoaXMud29yZCgiZGVjbGFyZSIpLHRoaXMuc3BhY2UoKSx0aGlzLndvcmQoIm1vZHVsZSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuaWQsZSksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5ib2R5LGUpfSx0LkRlY2xhcmVNb2R1bGVFeHBvcnRzPWZ1bmN0aW9uKGUpe3RoaXMud29yZCgiZGVjbGFyZSIpLHRoaXMuc3BhY2UoKSx0aGlzLndvcmQoIm1vZHVsZSIpLHRoaXMudG9rZW4oIi4iKSx0aGlzLndvcmQoImV4cG9ydHMiKSx0aGlzLnByaW50KGUudHlwZUFubm90YXRpb24sZSl9LHQuRGVjbGFyZVR5cGVBbGlhcz1mdW5jdGlvbihlKXt0aGlzLndvcmQoImRlY2xhcmUiKSx0aGlzLnNwYWNlKCksdGhpcy5UeXBlQWxpYXMoZSl9LHQuRGVjbGFyZU9wYXF1ZVR5cGU9ZnVuY3Rpb24oZSx0KXtvKHQpfHwodGhpcy53b3JkKCJkZWNsYXJlIiksdGhpcy5zcGFjZSgpKSx0aGlzLk9wYXF1ZVR5cGUoZSl9LHQuRGVjbGFyZVZhcmlhYmxlPWZ1bmN0aW9uKGUsdCl7byh0KXx8KHRoaXMud29yZCgiZGVjbGFyZSIpLHRoaXMuc3BhY2UoKSksdGhpcy53b3JkKCJ2YXIiKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLmlkLGUpLHRoaXMucHJpbnQoZS5pZC50eXBlQW5ub3RhdGlvbixlKSx0aGlzLnNlbWljb2xvbigpfSx0LkRlY2xhcmVFeHBvcnREZWNsYXJhdGlvbj1mdW5jdGlvbihlKXt0aGlzLndvcmQoImRlY2xhcmUiKSx0aGlzLnNwYWNlKCksdGhpcy53b3JkKCJleHBvcnQiKSx0aGlzLnNwYWNlKCksZS5kZWZhdWx0JiYodGhpcy53b3JkKCJkZWZhdWx0IiksdGhpcy5zcGFjZSgpKSxjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdC5EZWNsYXJlRXhwb3J0QWxsRGVjbGFyYXRpb249ZnVuY3Rpb24oKXt0aGlzLndvcmQoImRlY2xhcmUiKSx0aGlzLnNwYWNlKCksaS5FeHBvcnRBbGxEZWNsYXJhdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHQuRW51bURlY2xhcmF0aW9uPWZ1bmN0aW9uKGUpe2NvbnN0e2lkOnQsYm9keTpufT1lO3RoaXMud29yZCgiZW51bSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KHQsZSksdGhpcy5wcmludChuLGUpfSx0LkVudW1Cb29sZWFuQm9keT1mdW5jdGlvbihlKXtjb25zdHtleHBsaWNpdFR5cGU6dH09ZTtsKHRoaXMsImJvb2xlYW4iLHQpLHUodGhpcyxlKX0sdC5FbnVtTnVtYmVyQm9keT1mdW5jdGlvbihlKXtjb25zdHtleHBsaWNpdFR5cGU6dH09ZTtsKHRoaXMsIm51bWJlciIsdCksdSh0aGlzLGUpfSx0LkVudW1TdHJpbmdCb2R5PWZ1bmN0aW9uKGUpe2NvbnN0e2V4cGxpY2l0VHlwZTp0fT1lO2wodGhpcywic3RyaW5nIix0KSx1KHRoaXMsZSl9LHQuRW51bVN5bWJvbEJvZHk9ZnVuY3Rpb24oZSl7bCh0aGlzLCJzeW1ib2wiLCEwKSx1KHRoaXMsZSl9LHQuRW51bURlZmF1bHRlZE1lbWJlcj1mdW5jdGlvbihlKXtjb25zdHtpZDp0fT1lO3RoaXMucHJpbnQodCxlKSx0aGlzLnRva2VuKCIsIil9LHQuRW51bUJvb2xlYW5NZW1iZXI9ZnVuY3Rpb24oZSl7cCh0aGlzLGUpfSx0LkVudW1OdW1iZXJNZW1iZXI9ZnVuY3Rpb24oZSl7cCh0aGlzLGUpfSx0LkVudW1TdHJpbmdNZW1iZXI9ZnVuY3Rpb24oZSl7cCh0aGlzLGUpfSx0LkV4aXN0c1R5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy50b2tlbigiKiIpfSx0LkZ1bmN0aW9uVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXt0aGlzLnByaW50KGUudHlwZVBhcmFtZXRlcnMsZSksdGhpcy50b2tlbigiKCIpLGUudGhpcyYmKHRoaXMud29yZCgidGhpcyIpLHRoaXMudG9rZW4oIjoiKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLnRoaXMudHlwZUFubm90YXRpb24sZSksKGUucGFyYW1zLmxlbmd0aHx8ZS5yZXN0KSYmKHRoaXMudG9rZW4oIiwiKSx0aGlzLnNwYWNlKCkpKSx0aGlzLnByaW50TGlzdChlLnBhcmFtcyxlKSxlLnJlc3QmJihlLnBhcmFtcy5sZW5ndGgmJih0aGlzLnRva2VuKCIsIiksdGhpcy5zcGFjZSgpKSx0aGlzLnRva2VuKCIuLi4iKSx0aGlzLnByaW50KGUucmVzdCxlKSksdGhpcy50b2tlbigiKSIpLCJPYmplY3RUeXBlQ2FsbFByb3BlcnR5Ij09PXQudHlwZXx8IkRlY2xhcmVGdW5jdGlvbiI9PT10LnR5cGV8fCJPYmplY3RUeXBlUHJvcGVydHkiPT09dC50eXBlJiZ0Lm1ldGhvZD90aGlzLnRva2VuKCI6Iik6KHRoaXMuc3BhY2UoKSx0aGlzLnRva2VuKCI9PiIpKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLnJldHVyblR5cGUsZSl9LHQuRnVuY3Rpb25UeXBlUGFyYW09ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLm5hbWUsZSksZS5vcHRpb25hbCYmdGhpcy50b2tlbigiPyIpLGUubmFtZSYmKHRoaXMudG9rZW4oIjoiKSx0aGlzLnNwYWNlKCkpLHRoaXMucHJpbnQoZS50eXBlQW5ub3RhdGlvbixlKX0sdC5HZW5lcmljVHlwZUFubm90YXRpb249dC5DbGFzc0ltcGxlbWVudHM9dC5JbnRlcmZhY2VFeHRlbmRzPWZ1bmN0aW9uKGUpe3RoaXMucHJpbnQoZS5pZCxlKSx0aGlzLnByaW50KGUudHlwZVBhcmFtZXRlcnMsZSl9LHQuX2ludGVyZmFjZWlzaD1mdW5jdGlvbihlKXt2YXIgdDt0aGlzLnByaW50KGUuaWQsZSksdGhpcy5wcmludChlLnR5cGVQYXJhbWV0ZXJzLGUpLG51bGwhPSh0PWUuZXh0ZW5kcykmJnQubGVuZ3RoJiYodGhpcy5zcGFjZSgpLHRoaXMud29yZCgiZXh0ZW5kcyIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50TGlzdChlLmV4dGVuZHMsZSkpLGUubWl4aW5zJiZlLm1peGlucy5sZW5ndGgmJih0aGlzLnNwYWNlKCksdGhpcy53b3JkKCJtaXhpbnMiKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludExpc3QoZS5taXhpbnMsZSkpLGUuaW1wbGVtZW50cyYmZS5pbXBsZW1lbnRzLmxlbmd0aCYmKHRoaXMuc3BhY2UoKSx0aGlzLndvcmQoImltcGxlbWVudHMiKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludExpc3QoZS5pbXBsZW1lbnRzLGUpKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLmJvZHksZSl9LHQuX3ZhcmlhbmNlPWZ1bmN0aW9uKGUpe2UudmFyaWFuY2UmJigicGx1cyI9PT1lLnZhcmlhbmNlLmtpbmQ/dGhpcy50b2tlbigiKyIpOiJtaW51cyI9PT1lLnZhcmlhbmNlLmtpbmQmJnRoaXMudG9rZW4oIi0iKSl9LHQuSW50ZXJmYWNlRGVjbGFyYXRpb249ZnVuY3Rpb24oZSl7dGhpcy53b3JkKCJpbnRlcmZhY2UiKSx0aGlzLnNwYWNlKCksdGhpcy5faW50ZXJmYWNlaXNoKGUpfSx0LkludGVyZmFjZVR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUpe3RoaXMud29yZCgiaW50ZXJmYWNlIiksZS5leHRlbmRzJiZlLmV4dGVuZHMubGVuZ3RoJiYodGhpcy5zcGFjZSgpLHRoaXMud29yZCgiZXh0ZW5kcyIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50TGlzdChlLmV4dGVuZHMsZSkpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuYm9keSxlKX0sdC5JbnRlcnNlY3Rpb25UeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlKXt0aGlzLnByaW50Sm9pbihlLnR5cGVzLGUse3NlcGFyYXRvcjpkfSl9LHQuTWl4ZWRUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbigpe3RoaXMud29yZCgibWl4ZWQiKX0sdC5FbXB0eVR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJlbXB0eSIpfSx0Lk51bGxhYmxlVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigiPyIpLHRoaXMucHJpbnQoZS50eXBlQW5ub3RhdGlvbixlKX0sdC5OdW1iZXJUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbigpe3RoaXMud29yZCgibnVtYmVyIil9LHQuU3RyaW5nVHlwZUFubm90YXRpb249ZnVuY3Rpb24oKXt0aGlzLndvcmQoInN0cmluZyIpfSx0LlRoaXNUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbigpe3RoaXMud29yZCgidGhpcyIpfSx0LlR1cGxlVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigiWyIpLHRoaXMucHJpbnRMaXN0KGUudHlwZXMsZSksdGhpcy50b2tlbigiXSIpfSx0LlR5cGVvZlR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUpe3RoaXMud29yZCgidHlwZW9mIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5hcmd1bWVudCxlKX0sdC5UeXBlQWxpYXM9ZnVuY3Rpb24oZSl7dGhpcy53b3JkKCJ0eXBlIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5pZCxlKSx0aGlzLnByaW50KGUudHlwZVBhcmFtZXRlcnMsZSksdGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIj0iKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLnJpZ2h0LGUpLHRoaXMuc2VtaWNvbG9uKCl9LHQuVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigiOiIpLHRoaXMuc3BhY2UoKSxlLm9wdGlvbmFsJiZ0aGlzLnRva2VuKCI/IiksdGhpcy5wcmludChlLnR5cGVBbm5vdGF0aW9uLGUpfSx0LlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbj10LlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uPWZ1bmN0aW9uKGUpe3RoaXMudG9rZW4oIjwiKSx0aGlzLnByaW50TGlzdChlLnBhcmFtcyxlLHt9KSx0aGlzLnRva2VuKCI+Iil9LHQuVHlwZVBhcmFtZXRlcj1mdW5jdGlvbihlKXt0aGlzLl92YXJpYW5jZShlKSx0aGlzLndvcmQoZS5uYW1lKSxlLmJvdW5kJiZ0aGlzLnByaW50KGUuYm91bmQsZSksZS5kZWZhdWx0JiYodGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIj0iKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLmRlZmF1bHQsZSkpfSx0Lk9wYXF1ZVR5cGU9ZnVuY3Rpb24oZSl7dGhpcy53b3JkKCJvcGFxdWUiKSx0aGlzLnNwYWNlKCksdGhpcy53b3JkKCJ0eXBlIiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5pZCxlKSx0aGlzLnByaW50KGUudHlwZVBhcmFtZXRlcnMsZSksZS5zdXBlcnR5cGUmJih0aGlzLnRva2VuKCI6IiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5zdXBlcnR5cGUsZSkpLGUuaW1wbHR5cGUmJih0aGlzLnNwYWNlKCksdGhpcy50b2tlbigiPSIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuaW1wbHR5cGUsZSkpLHRoaXMuc2VtaWNvbG9uKCl9LHQuT2JqZWN0VHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSl7ZS5leGFjdD90aGlzLnRva2VuKCJ7fCIpOnRoaXMudG9rZW4oInsiKTtjb25zdCB0PVsuLi5lLnByb3BlcnRpZXMsLi4uZS5jYWxsUHJvcGVydGllc3x8W10sLi4uZS5pbmRleGVyc3x8W10sLi4uZS5pbnRlcm5hbFNsb3RzfHxbXV07dC5sZW5ndGgmJih0aGlzLnNwYWNlKCksdGhpcy5wcmludEpvaW4odCxlLHthZGROZXdsaW5lcyhlKXtpZihlJiYhdFswXSlyZXR1cm4gMX0saW5kZW50OiEwLHN0YXRlbWVudDohMCxpdGVyYXRvcjooKT0+eygxIT09dC5sZW5ndGh8fGUuaW5leGFjdCkmJih0aGlzLnRva2VuKCIsIiksdGhpcy5zcGFjZSgpKX19KSx0aGlzLnNwYWNlKCkpLGUuaW5leGFjdCYmKHRoaXMuaW5kZW50KCksdGhpcy50b2tlbigiLi4uIiksdC5sZW5ndGgmJnRoaXMubmV3bGluZSgpLHRoaXMuZGVkZW50KCkpLGUuZXhhY3Q/dGhpcy50b2tlbigifH0iKTp0aGlzLnRva2VuKCJ9Iil9LHQuT2JqZWN0VHlwZUludGVybmFsU2xvdD1mdW5jdGlvbihlKXtlLnN0YXRpYyYmKHRoaXMud29yZCgic3RhdGljIiksdGhpcy5zcGFjZSgpKSx0aGlzLnRva2VuKCJbIiksdGhpcy50b2tlbigiWyIpLHRoaXMucHJpbnQoZS5pZCxlKSx0aGlzLnRva2VuKCJdIiksdGhpcy50b2tlbigiXSIpLGUub3B0aW9uYWwmJnRoaXMudG9rZW4oIj8iKSxlLm1ldGhvZHx8KHRoaXMudG9rZW4oIjoiKSx0aGlzLnNwYWNlKCkpLHRoaXMucHJpbnQoZS52YWx1ZSxlKX0sdC5PYmplY3RUeXBlQ2FsbFByb3BlcnR5PWZ1bmN0aW9uKGUpe2Uuc3RhdGljJiYodGhpcy53b3JkKCJzdGF0aWMiKSx0aGlzLnNwYWNlKCkpLHRoaXMucHJpbnQoZS52YWx1ZSxlKX0sdC5PYmplY3RUeXBlSW5kZXhlcj1mdW5jdGlvbihlKXtlLnN0YXRpYyYmKHRoaXMud29yZCgic3RhdGljIiksdGhpcy5zcGFjZSgpKSx0aGlzLl92YXJpYW5jZShlKSx0aGlzLnRva2VuKCJbIiksZS5pZCYmKHRoaXMucHJpbnQoZS5pZCxlKSx0aGlzLnRva2VuKCI6IiksdGhpcy5zcGFjZSgpKSx0aGlzLnByaW50KGUua2V5LGUpLHRoaXMudG9rZW4oIl0iKSx0aGlzLnRva2VuKCI6IiksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS52YWx1ZSxlKX0sdC5PYmplY3RUeXBlUHJvcGVydHk9ZnVuY3Rpb24oZSl7ZS5wcm90byYmKHRoaXMud29yZCgicHJvdG8iKSx0aGlzLnNwYWNlKCkpLGUuc3RhdGljJiYodGhpcy53b3JkKCJzdGF0aWMiKSx0aGlzLnNwYWNlKCkpLCJnZXQiIT09ZS5raW5kJiYic2V0IiE9PWUua2luZHx8KHRoaXMud29yZChlLmtpbmQpLHRoaXMuc3BhY2UoKSksdGhpcy5fdmFyaWFuY2UoZSksdGhpcy5wcmludChlLmtleSxlKSxlLm9wdGlvbmFsJiZ0aGlzLnRva2VuKCI/IiksZS5tZXRob2R8fCh0aGlzLnRva2VuKCI6IiksdGhpcy5zcGFjZSgpKSx0aGlzLnByaW50KGUudmFsdWUsZSl9LHQuT2JqZWN0VHlwZVNwcmVhZFByb3BlcnR5PWZ1bmN0aW9uKGUpe3RoaXMudG9rZW4oIi4uLiIpLHRoaXMucHJpbnQoZS5hcmd1bWVudCxlKX0sdC5RdWFsaWZpZWRUeXBlSWRlbnRpZmllcj1mdW5jdGlvbihlKXt0aGlzLnByaW50KGUucXVhbGlmaWNhdGlvbixlKSx0aGlzLnRva2VuKCIuIiksdGhpcy5wcmludChlLmlkLGUpfSx0LlN5bWJvbFR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJzeW1ib2wiKX0sdC5VbmlvblR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUpe3RoaXMucHJpbnRKb2luKGUudHlwZXMsZSx7c2VwYXJhdG9yOmZ9KX0sdC5UeXBlQ2FzdEV4cHJlc3Npb249ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigiKCIpLHRoaXMucHJpbnQoZS5leHByZXNzaW9uLGUpLHRoaXMucHJpbnQoZS50eXBlQW5ub3RhdGlvbixlKSx0aGlzLnRva2VuKCIpIil9LHQuVmFyaWFuY2U9ZnVuY3Rpb24oZSl7InBsdXMiPT09ZS5raW5kP3RoaXMudG9rZW4oIisiKTp0aGlzLnRva2VuKCItIil9LHQuVm9pZFR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJ2b2lkIil9LHQuSW5kZXhlZEFjY2Vzc1R5cGU9ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLm9iamVjdFR5cGUsZSksdGhpcy50b2tlbigiWyIpLHRoaXMucHJpbnQoZS5pbmRleFR5cGUsZSksdGhpcy50b2tlbigiXSIpfSx0Lk9wdGlvbmFsSW5kZXhlZEFjY2Vzc1R5cGU9ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLm9iamVjdFR5cGUsZSksZS5vcHRpb25hbCYmdGhpcy50b2tlbigiPy4iKSx0aGlzLnRva2VuKCJbIiksdGhpcy5wcmludChlLmluZGV4VHlwZSxlKSx0aGlzLnRva2VuKCJdIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOdW1iZXJMaXRlcmFsVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLk51bWVyaWNMaXRlcmFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTdHJpbmdMaXRlcmFsVHlwZUFubm90YXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLlN0cmluZ0xpdGVyYWx9fSk7dmFyIHI9bigiMjUyYSIpLGk9bigiMzZjZCIpLGE9bigiZDA2MiIpO2NvbnN0e2lzRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uOm8saXNTdGF0ZW1lbnQ6c309cjtmdW5jdGlvbiBsKGUsdCxuKXtuJiYoZS5zcGFjZSgpLGUud29yZCgib2YiKSxlLnNwYWNlKCksZS53b3JkKHQpKSxlLnNwYWNlKCl9ZnVuY3Rpb24gdShlLHQpe2NvbnN0e21lbWJlcnM6bn09dDtlLnRva2VuKCJ7IiksZS5pbmRlbnQoKSxlLm5ld2xpbmUoKTtmb3IoY29uc3QgciBvZiBuKWUucHJpbnQocix0KSxlLm5ld2xpbmUoKTt0Lmhhc1Vua25vd25NZW1iZXJzJiYoZS50b2tlbigiLi4uIiksZS5uZXdsaW5lKCkpLGUuZGVkZW50KCksZS50b2tlbigifSIpfWZ1bmN0aW9uIHAoZSx0KXtjb25zdHtpZDpuLGluaXQ6cn09dDtlLnByaW50KG4sdCksZS5zcGFjZSgpLGUudG9rZW4oIj0iKSxlLnNwYWNlKCksZS5wcmludChyLHQpLGUudG9rZW4oIiwiKX1mdW5jdGlvbiBjKGUpe2lmKGUuZGVjbGFyYXRpb24pe2NvbnN0IHQ9ZS5kZWNsYXJhdGlvbjt0aGlzLnByaW50KHQsZSkscyh0KXx8dGhpcy5zZW1pY29sb24oKX1lbHNlIHRoaXMudG9rZW4oInsiKSxlLnNwZWNpZmllcnMubGVuZ3RoJiYodGhpcy5zcGFjZSgpLHRoaXMucHJpbnRMaXN0KGUuc3BlY2lmaWVycyxlKSx0aGlzLnNwYWNlKCkpLHRoaXMudG9rZW4oIn0iKSxlLnNvdXJjZSYmKHRoaXMuc3BhY2UoKSx0aGlzLndvcmQoImZyb20iKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLnNvdXJjZSxlKSksdGhpcy5zZW1pY29sb24oKX1mdW5jdGlvbiBkKCl7dGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIiYiKSx0aGlzLnNwYWNlKCl9ZnVuY3Rpb24gZigpe3RoaXMuc3BhY2UoKSx0aGlzLnRva2VuKCJ8IiksdGhpcy5zcGFjZSgpfX0sYjU3MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiYjliZCIpLGk9bigiNjc1OSIpLGE9bigiOTI0MSIpLkFycmF5U2V0LG89bigiMGQ2ZCIpLHM9bigiNmE5ZSIpLnF1aWNrU29ydDtmdW5jdGlvbiBsKGUpe3ZhciB0PWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYodD1KU09OLnBhcnNlKGUucmVwbGFjZSgvXlwpXF1cfScvLCIiKSkpLG51bGwhPXQuc2VjdGlvbnM/bmV3IGModCk6bmV3IHUodCl9ZnVuY3Rpb24gdShlKXt2YXIgdD1lOyJzdHJpbmciPT10eXBlb2YgZSYmKHQ9SlNPTi5wYXJzZShlLnJlcGxhY2UoL15cKVxdXH0nLywiIikpKTt2YXIgbj1yLmdldEFyZyh0LCJ2ZXJzaW9uIiksaT1yLmdldEFyZyh0LCJzb3VyY2VzIiksbz1yLmdldEFyZyh0LCJuYW1lcyIsW10pLHM9ci5nZXRBcmcodCwic291cmNlUm9vdCIsbnVsbCksbD1yLmdldEFyZyh0LCJzb3VyY2VzQ29udGVudCIsbnVsbCksdT1yLmdldEFyZyh0LCJtYXBwaW5ncyIpLHA9ci5nZXRBcmcodCwiZmlsZSIsbnVsbCk7aWYobiE9dGhpcy5fdmVyc2lvbil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHZlcnNpb246ICIrbik7aT1pLm1hcChTdHJpbmcpLm1hcChyLm5vcm1hbGl6ZSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gcyYmci5pc0Fic29sdXRlKHMpJiZyLmlzQWJzb2x1dGUoZSk/ci5yZWxhdGl2ZShzLGUpOmV9KSksdGhpcy5fbmFtZXM9YS5mcm9tQXJyYXkoby5tYXAoU3RyaW5nKSwhMCksdGhpcy5fc291cmNlcz1hLmZyb21BcnJheShpLCEwKSx0aGlzLnNvdXJjZVJvb3Q9cyx0aGlzLnNvdXJjZXNDb250ZW50PWwsdGhpcy5fbWFwcGluZ3M9dSx0aGlzLmZpbGU9cH1mdW5jdGlvbiBwKCl7dGhpcy5nZW5lcmF0ZWRMaW5lPTAsdGhpcy5nZW5lcmF0ZWRDb2x1bW49MCx0aGlzLnNvdXJjZT1udWxsLHRoaXMub3JpZ2luYWxMaW5lPW51bGwsdGhpcy5vcmlnaW5hbENvbHVtbj1udWxsLHRoaXMubmFtZT1udWxsfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ZTsic3RyaW5nIj09dHlwZW9mIGUmJih0PUpTT04ucGFyc2UoZS5yZXBsYWNlKC9eXClcXVx9Jy8sIiIpKSk7dmFyIG49ci5nZXRBcmcodCwidmVyc2lvbiIpLGk9ci5nZXRBcmcodCwic2VjdGlvbnMiKTtpZihuIT10aGlzLl92ZXJzaW9uKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmVyc2lvbjogIituKTt0aGlzLl9zb3VyY2VzPW5ldyBhLHRoaXMuX25hbWVzPW5ldyBhO3ZhciBvPXtsaW5lOi0xLGNvbHVtbjowfTt0aGlzLl9zZWN0aW9ucz1pLm1hcCgoZnVuY3Rpb24oZSl7aWYoZS51cmwpdGhyb3cgbmV3IEVycm9yKCJTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLiIpO3ZhciB0PXIuZ2V0QXJnKGUsIm9mZnNldCIpLG49ci5nZXRBcmcodCwibGluZSIpLGk9ci5nZXRBcmcodCwiY29sdW1uIik7aWYobjxvLmxpbmV8fG49PT1vLmxpbmUmJmk8by5jb2x1bW4pdGhyb3cgbmV3IEVycm9yKCJTZWN0aW9uIG9mZnNldHMgbXVzdCBiZSBvcmRlcmVkIGFuZCBub24tb3ZlcmxhcHBpbmcuIik7cmV0dXJuIG89dCx7Z2VuZXJhdGVkT2Zmc2V0OntnZW5lcmF0ZWRMaW5lOm4rMSxnZW5lcmF0ZWRDb2x1bW46aSsxfSxjb25zdW1lcjpuZXcgbChyLmdldEFyZyhlLCJtYXAiKSl9fSkpfWwuZnJvbVNvdXJjZU1hcD1mdW5jdGlvbihlKXtyZXR1cm4gdS5mcm9tU291cmNlTWFwKGUpfSxsLnByb3RvdHlwZS5fdmVyc2lvbj0zLGwucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3M9bnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsIl9nZW5lcmF0ZWRNYXBwaW5ncyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3N8fHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsdGhpcy5zb3VyY2VSb290KSx0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3N9fSksbC5wcm90b3R5cGUuX19vcmlnaW5hbE1hcHBpbmdzPW51bGwsT2JqZWN0LmRlZmluZVByb3BlcnR5KGwucHJvdG90eXBlLCJfb3JpZ2luYWxNYXBwaW5ncyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc3x8dGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncyx0aGlzLnNvdXJjZVJvb3QpLHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzfX0pLGwucHJvdG90eXBlLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jaGFyQXQodCk7cmV0dXJuIjsiPT09bnx8IiwiPT09bn0sbC5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3M9ZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgX3BhcnNlTWFwcGluZ3MiKX0sbC5HRU5FUkFURURfT1JERVI9MSxsLk9SSUdJTkFMX09SREVSPTIsbC5HUkVBVEVTVF9MT1dFUl9CT1VORD0xLGwuTEVBU1RfVVBQRVJfQk9VTkQ9MixsLnByb3RvdHlwZS5lYWNoTWFwcGluZz1mdW5jdGlvbihlLHQsbil7dmFyIGksYT10fHxudWxsO3N3aXRjaChufHxsLkdFTkVSQVRFRF9PUkRFUil7Y2FzZSBsLkdFTkVSQVRFRF9PUkRFUjppPXRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzO2JyZWFrO2Nhc2UgbC5PUklHSU5BTF9PUkRFUjppPXRoaXMuX29yaWdpbmFsTWFwcGluZ3M7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gb3JkZXIgb2YgaXRlcmF0aW9uLiIpfXZhciBvPXRoaXMuc291cmNlUm9vdDtpLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbD09PWUuc291cmNlP251bGw6dGhpcy5fc291cmNlcy5hdChlLnNvdXJjZSk7cmV0dXJuIG51bGwhPXQmJm51bGwhPW8mJih0PXIuam9pbihvLHQpKSx7c291cmNlOnQsZ2VuZXJhdGVkTGluZTplLmdlbmVyYXRlZExpbmUsZ2VuZXJhdGVkQ29sdW1uOmUuZ2VuZXJhdGVkQ29sdW1uLG9yaWdpbmFsTGluZTplLm9yaWdpbmFsTGluZSxvcmlnaW5hbENvbHVtbjplLm9yaWdpbmFsQ29sdW1uLG5hbWU6bnVsbD09PWUubmFtZT9udWxsOnRoaXMuX25hbWVzLmF0KGUubmFtZSl9fSksdGhpcykuZm9yRWFjaChlLGEpfSxsLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5nZXRBcmcoZSwibGluZSIpLG49e3NvdXJjZTpyLmdldEFyZyhlLCJzb3VyY2UiKSxvcmlnaW5hbExpbmU6dCxvcmlnaW5hbENvbHVtbjpyLmdldEFyZyhlLCJjb2x1bW4iLDApfTtpZihudWxsIT10aGlzLnNvdXJjZVJvb3QmJihuLnNvdXJjZT1yLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCxuLnNvdXJjZSkpLCF0aGlzLl9zb3VyY2VzLmhhcyhuLnNvdXJjZSkpcmV0dXJuW107bi5zb3VyY2U9dGhpcy5fc291cmNlcy5pbmRleE9mKG4uc291cmNlKTt2YXIgYT1bXSxvPXRoaXMuX2ZpbmRNYXBwaW5nKG4sdGhpcy5fb3JpZ2luYWxNYXBwaW5ncywib3JpZ2luYWxMaW5lIiwib3JpZ2luYWxDb2x1bW4iLHIuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsaS5MRUFTVF9VUFBFUl9CT1VORCk7aWYobz49MCl7dmFyIHM9dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tvXTtpZih2b2lkIDA9PT1lLmNvbHVtbilmb3IodmFyIGw9cy5vcmlnaW5hbExpbmU7cyYmcy5vcmlnaW5hbExpbmU9PT1sOylhLnB1c2goe2xpbmU6ci5nZXRBcmcocywiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOnIuZ2V0QXJnKHMsImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjpyLmdldEFyZyhzLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX0pLHM9dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK29dO2Vsc2UgZm9yKHZhciB1PXMub3JpZ2luYWxDb2x1bW47cyYmcy5vcmlnaW5hbExpbmU9PT10JiZzLm9yaWdpbmFsQ29sdW1uPT11OylhLnB1c2goe2xpbmU6ci5nZXRBcmcocywiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOnIuZ2V0QXJnKHMsImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjpyLmdldEFyZyhzLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX0pLHM9dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK29dfXJldHVybiBhfSx0LlNvdXJjZU1hcENvbnN1bWVyPWwsdS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsLnByb3RvdHlwZSksdS5wcm90b3R5cGUuY29uc3VtZXI9bCx1LmZyb21Tb3VyY2VNYXA9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSksbj10Ll9uYW1lcz1hLmZyb21BcnJheShlLl9uYW1lcy50b0FycmF5KCksITApLGk9dC5fc291cmNlcz1hLmZyb21BcnJheShlLl9zb3VyY2VzLnRvQXJyYXkoKSwhMCk7dC5zb3VyY2VSb290PWUuX3NvdXJjZVJvb3QsdC5zb3VyY2VzQ29udGVudD1lLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KHQuX3NvdXJjZXMudG9BcnJheSgpLHQuc291cmNlUm9vdCksdC5maWxlPWUuX2ZpbGU7Zm9yKHZhciBvPWUuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpLGw9dC5fX2dlbmVyYXRlZE1hcHBpbmdzPVtdLGM9dC5fX29yaWdpbmFsTWFwcGluZ3M9W10sZD0wLGY9by5sZW5ndGg7ZDxmO2QrKyl7dmFyIHk9b1tkXSxtPW5ldyBwO20uZ2VuZXJhdGVkTGluZT15LmdlbmVyYXRlZExpbmUsbS5nZW5lcmF0ZWRDb2x1bW49eS5nZW5lcmF0ZWRDb2x1bW4seS5zb3VyY2UmJihtLnNvdXJjZT1pLmluZGV4T2YoeS5zb3VyY2UpLG0ub3JpZ2luYWxMaW5lPXkub3JpZ2luYWxMaW5lLG0ub3JpZ2luYWxDb2x1bW49eS5vcmlnaW5hbENvbHVtbix5Lm5hbWUmJihtLm5hbWU9bi5pbmRleE9mKHkubmFtZSkpLGMucHVzaChtKSksbC5wdXNoKG0pfXJldHVybiBzKHQuX19vcmlnaW5hbE1hcHBpbmdzLHIuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpLHR9LHUucHJvdG90eXBlLl92ZXJzaW9uPTMsT2JqZWN0LmRlZmluZVByb3BlcnR5KHUucHJvdG90eXBlLCJzb3VyY2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPXRoaXMuc291cmNlUm9vdD9yLmpvaW4odGhpcy5zb3VyY2VSb290LGUpOmV9KSx0aGlzKX19KSx1LnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixpLGEsbCx1LGM9MSxkPTAsZj0wLHk9MCxtPTAsaD0wLFQ9ZS5sZW5ndGgsYj0wLFM9e30sRT17fSxnPVtdLHY9W107YjxUOylpZigiOyI9PT1lLmNoYXJBdChiKSljKyssYisrLGQ9MDtlbHNlIGlmKCIsIj09PWUuY2hhckF0KGIpKWIrKztlbHNle2Zvcigobj1uZXcgcCkuZ2VuZXJhdGVkTGluZT1jLGw9YjtsPFQmJiF0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGUsbCk7bCsrKTtpZihhPVNbaT1lLnNsaWNlKGIsbCldKWIrPWkubGVuZ3RoO2Vsc2V7Zm9yKGE9W107YjxsOylvLmRlY29kZShlLGIsRSksdT1FLnZhbHVlLGI9RS5yZXN0LGEucHVzaCh1KTtpZigyPT09YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJGb3VuZCBhIHNvdXJjZSwgYnV0IG5vIGxpbmUgYW5kIGNvbHVtbiIpO2lmKDM9PT1hLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uIik7U1tpXT1hfW4uZ2VuZXJhdGVkQ29sdW1uPWQrYVswXSxkPW4uZ2VuZXJhdGVkQ29sdW1uLGEubGVuZ3RoPjEmJihuLnNvdXJjZT1tK2FbMV0sbSs9YVsxXSxuLm9yaWdpbmFsTGluZT1mK2FbMl0sZj1uLm9yaWdpbmFsTGluZSxuLm9yaWdpbmFsTGluZSs9MSxuLm9yaWdpbmFsQ29sdW1uPXkrYVszXSx5PW4ub3JpZ2luYWxDb2x1bW4sYS5sZW5ndGg+NCYmKG4ubmFtZT1oK2FbNF0saCs9YVs0XSkpLHYucHVzaChuKSwibnVtYmVyIj09dHlwZW9mIG4ub3JpZ2luYWxMaW5lJiZnLnB1c2gobil9cyh2LHIuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpLHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncz12LHMoZyxyLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKSx0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncz1nfSx1LnByb3RvdHlwZS5fZmluZE1hcHBpbmc9ZnVuY3Rpb24oZSx0LG4scixhLG8pe2lmKGVbbl08PTApdGhyb3cgbmV3IFR5cGVFcnJvcigiTGluZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLCBnb3QgIitlW25dKTtpZihlW3JdPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAiK2Vbcl0pO3JldHVybiBpLnNlYXJjaChlLHQsYSxvKX0sdS5wcm90b3R5cGUuY29tcHV0ZUNvbHVtblNwYW5zPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7KytlKXt2YXIgdD10aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tlXTtpZihlKzE8dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoKXt2YXIgbj10aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tlKzFdO2lmKHQuZ2VuZXJhdGVkTGluZT09PW4uZ2VuZXJhdGVkTGluZSl7dC5sYXN0R2VuZXJhdGVkQ29sdW1uPW4uZ2VuZXJhdGVkQ29sdW1uLTE7Y29udGludWV9fXQubGFzdEdlbmVyYXRlZENvbHVtbj0xLzB9fSx1LnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yPWZ1bmN0aW9uKGUpe3ZhciB0PXtnZW5lcmF0ZWRMaW5lOnIuZ2V0QXJnKGUsImxpbmUiKSxnZW5lcmF0ZWRDb2x1bW46ci5nZXRBcmcoZSwiY29sdW1uIil9LG49dGhpcy5fZmluZE1hcHBpbmcodCx0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncywiZ2VuZXJhdGVkTGluZSIsImdlbmVyYXRlZENvbHVtbiIsci5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxyLmdldEFyZyhlLCJiaWFzIixsLkdSRUFURVNUX0xPV0VSX0JPVU5EKSk7aWYobj49MCl7dmFyIGk9dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3Nbbl07aWYoaS5nZW5lcmF0ZWRMaW5lPT09dC5nZW5lcmF0ZWRMaW5lKXt2YXIgYT1yLmdldEFyZyhpLCJzb3VyY2UiLG51bGwpO251bGwhPT1hJiYoYT10aGlzLl9zb3VyY2VzLmF0KGEpLG51bGwhPXRoaXMuc291cmNlUm9vdCYmKGE9ci5qb2luKHRoaXMuc291cmNlUm9vdCxhKSkpO3ZhciBvPXIuZ2V0QXJnKGksIm5hbWUiLG51bGwpO3JldHVybiBudWxsIT09byYmKG89dGhpcy5fbmFtZXMuYXQobykpLHtzb3VyY2U6YSxsaW5lOnIuZ2V0QXJnKGksIm9yaWdpbmFsTGluZSIsbnVsbCksY29sdW1uOnIuZ2V0QXJnKGksIm9yaWdpbmFsQ29sdW1uIixudWxsKSxuYW1lOm99fX1yZXR1cm57c291cmNlOm51bGwsbGluZTpudWxsLGNvbHVtbjpudWxsLG5hbWU6bnVsbH19LHUucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnNvdXJjZXNDb250ZW50JiZ0aGlzLnNvdXJjZXNDb250ZW50Lmxlbmd0aD49dGhpcy5fc291cmNlcy5zaXplKCkmJiF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfSkpfSx1LnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yPWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuc291cmNlc0NvbnRlbnQpcmV0dXJuIG51bGw7aWYobnVsbCE9dGhpcy5zb3VyY2VSb290JiYoZT1yLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCxlKSksdGhpcy5fc291cmNlcy5oYXMoZSkpcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGUpXTt2YXIgbjtpZihudWxsIT10aGlzLnNvdXJjZVJvb3QmJihuPXIudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpe3ZhciBpPWUucmVwbGFjZSgvXmZpbGU6XC9cLy8sIiIpO2lmKCJmaWxlIj09bi5zY2hlbWUmJnRoaXMuX3NvdXJjZXMuaGFzKGkpKXJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihpKV07aWYoKCFuLnBhdGh8fCIvIj09bi5wYXRoKSYmdGhpcy5fc291cmNlcy5oYXMoIi8iK2UpKXJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZigiLyIrZSldfWlmKHQpcmV0dXJuIG51bGw7dGhyb3cgbmV3IEVycm9yKCciJytlKyciIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpfSx1LnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvcj1mdW5jdGlvbihlKXt2YXIgdD1yLmdldEFyZyhlLCJzb3VyY2UiKTtpZihudWxsIT10aGlzLnNvdXJjZVJvb3QmJih0PXIucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LHQpKSwhdGhpcy5fc291cmNlcy5oYXModCkpcmV0dXJue2xpbmU6bnVsbCxjb2x1bW46bnVsbCxsYXN0Q29sdW1uOm51bGx9O3ZhciBuPXtzb3VyY2U6dD10aGlzLl9zb3VyY2VzLmluZGV4T2YodCksb3JpZ2luYWxMaW5lOnIuZ2V0QXJnKGUsImxpbmUiKSxvcmlnaW5hbENvbHVtbjpyLmdldEFyZyhlLCJjb2x1bW4iKX0saT10aGlzLl9maW5kTWFwcGluZyhuLHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsIm9yaWdpbmFsTGluZSIsIm9yaWdpbmFsQ29sdW1uIixyLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLHIuZ2V0QXJnKGUsImJpYXMiLGwuR1JFQVRFU1RfTE9XRVJfQk9VTkQpKTtpZihpPj0wKXt2YXIgYT10aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2ldO2lmKGEuc291cmNlPT09bi5zb3VyY2UpcmV0dXJue2xpbmU6ci5nZXRBcmcoYSwiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOnIuZ2V0QXJnKGEsImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjpyLmdldEFyZyhhLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX19cmV0dXJue2xpbmU6bnVsbCxjb2x1bW46bnVsbCxsYXN0Q29sdW1uOm51bGx9fSx0LkJhc2ljU291cmNlTWFwQ29uc3VtZXI9dSxjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlKSxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1sLGMucHJvdG90eXBlLl92ZXJzaW9uPTMsT2JqZWN0LmRlZmluZVByb3BlcnR5KGMucHJvdG90eXBlLCJzb3VyY2VzIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PHRoaXMuX3NlY3Rpb25zLmxlbmd0aDt0KyspZm9yKHZhciBuPTA7bjx0aGlzLl9zZWN0aW9uc1t0XS5jb25zdW1lci5zb3VyY2VzLmxlbmd0aDtuKyspZS5wdXNoKHRoaXMuX3NlY3Rpb25zW3RdLmNvbnN1bWVyLnNvdXJjZXNbbl0pO3JldHVybiBlfX0pLGMucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9e2dlbmVyYXRlZExpbmU6ci5nZXRBcmcoZSwibGluZSIpLGdlbmVyYXRlZENvbHVtbjpyLmdldEFyZyhlLCJjb2x1bW4iKX0sbj1pLnNlYXJjaCh0LHRoaXMuX3NlY3Rpb25zLChmdW5jdGlvbihlLHQpe3JldHVybiBlLmdlbmVyYXRlZExpbmUtdC5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZXx8ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1ufSkpLGE9dGhpcy5fc2VjdGlvbnNbbl07cmV0dXJuIGE/YS5jb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtsaW5lOnQuZ2VuZXJhdGVkTGluZS0oYS5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZS0xKSxjb2x1bW46dC5nZW5lcmF0ZWRDb2x1bW4tKGEuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU9PT10LmdlbmVyYXRlZExpbmU/YS5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uLTE6MCksYmlhczplLmJpYXN9KTp7c291cmNlOm51bGwsbGluZTpudWxsLGNvbHVtbjpudWxsLG5hbWU6bnVsbH19LGMucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3Rpb25zLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gZS5jb25zdW1lci5oYXNDb250ZW50c09mQWxsU291cmNlcygpfSkpfSxjLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0aGlzLl9zZWN0aW9ucy5sZW5ndGg7bisrKXt2YXIgcj10aGlzLl9zZWN0aW9uc1tuXS5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGUsITApO2lmKHIpcmV0dXJuIHJ9aWYodClyZXR1cm4gbnVsbDt0aHJvdyBuZXcgRXJyb3IoJyInK2UrJyIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyl9LGMucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8dGhpcy5fc2VjdGlvbnMubGVuZ3RoO3QrKyl7dmFyIG49dGhpcy5fc2VjdGlvbnNbdF07aWYoLTEhPT1uLmNvbnN1bWVyLnNvdXJjZXMuaW5kZXhPZihyLmdldEFyZyhlLCJzb3VyY2UiKSkpe3ZhciBpPW4uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoZSk7aWYoaSlyZXR1cm57bGluZTppLmxpbmUrKG4uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUtMSksY29sdW1uOmkuY29sdW1uKyhuLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lPT09aS5saW5lP24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbi0xOjApfX19cmV0dXJue2xpbmU6bnVsbCxjb2x1bW46bnVsbH19LGMucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzPWZ1bmN0aW9uKGUsdCl7dGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzPVtdLHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzPVtdO2Zvcih2YXIgbj0wO248dGhpcy5fc2VjdGlvbnMubGVuZ3RoO24rKylmb3IodmFyIGk9dGhpcy5fc2VjdGlvbnNbbl0sYT1pLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncyxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBsPWFbb10sdT1pLmNvbnN1bWVyLl9zb3VyY2VzLmF0KGwuc291cmNlKTtudWxsIT09aS5jb25zdW1lci5zb3VyY2VSb290JiYodT1yLmpvaW4oaS5jb25zdW1lci5zb3VyY2VSb290LHUpKSx0aGlzLl9zb3VyY2VzLmFkZCh1KSx1PXRoaXMuX3NvdXJjZXMuaW5kZXhPZih1KTt2YXIgcD1pLmNvbnN1bWVyLl9uYW1lcy5hdChsLm5hbWUpO3RoaXMuX25hbWVzLmFkZChwKSxwPXRoaXMuX25hbWVzLmluZGV4T2YocCk7dmFyIGM9e3NvdXJjZTp1LGdlbmVyYXRlZExpbmU6bC5nZW5lcmF0ZWRMaW5lKyhpLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lLTEpLGdlbmVyYXRlZENvbHVtbjpsLmdlbmVyYXRlZENvbHVtbisoaS5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZT09PWwuZ2VuZXJhdGVkTGluZT9pLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4tMTowKSxvcmlnaW5hbExpbmU6bC5vcmlnaW5hbExpbmUsb3JpZ2luYWxDb2x1bW46bC5vcmlnaW5hbENvbHVtbixuYW1lOnB9O3RoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGMpLCJudW1iZXIiPT10eXBlb2YgYy5vcmlnaW5hbExpbmUmJnRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYyl9cyh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3Msci5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCkscyh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyxyLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKX0sdC5JbmRleGVkU291cmNlTWFwQ29uc3VtZXI9Y30sYjU5ZDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtjb25zdCBuPXt9LHI9bi5oYXNPd25Qcm9wZXJ0eSxpPShlLHQpPT57Zm9yKGNvbnN0IG4gaW4gZSlyLmNhbGwoZSxuKSYmdChuLGVbbl0pfSxhPW4udG9TdHJpbmcsbz1BcnJheS5pc0FycmF5LHM9dC5pc0J1ZmZlcixsPWU9PiJbb2JqZWN0IE9iamVjdF0iPT1hLmNhbGwoZSksdT1lPT4ic3RyaW5nIj09dHlwZW9mIGV8fCJbb2JqZWN0IFN0cmluZ10iPT1hLmNhbGwoZSkscD1lPT4ibnVtYmVyIj09dHlwZW9mIGV8fCJbb2JqZWN0IE51bWJlcl0iPT1hLmNhbGwoZSksYz1lPT4iW29iamVjdCBNYXBdIj09YS5jYWxsKGUpLGQ9ZT0+IltvYmplY3QgU2V0XSI9PWEuY2FsbChlKSxmPXsnIic6J1xcIicsIiciOiJcXCciLCJcXCI6IlxcXFwiLCJcYiI6IlxcYiIsIlxmIjoiXFxmIiwiXG4iOiJcXG4iLCJcciI6IlxcciIsIlx0IjoiXFx0In0seT0vWyInXFxcYlxmXG5cclx0XS8sbT0vWzAtOV0vLGg9L1sgISMtJlwoLVxbXF0tX2Etfl0vLFQ9KGUsdCk9Pntjb25zdCBuPSgpPT57dj1nLCsrdC5pbmRlbnRMZXZlbCxnPXQuaW5kZW50LnJlcGVhdCh0LmluZGVudExldmVsKX0scj17ZXNjYXBlRXZlcnl0aGluZzohMSxtaW5pbWFsOiExLGlzU2NyaXB0Q29udGV4dDohMSxxdW90ZXM6InNpbmdsZSIsd3JhcDohMSxlczY6ITEsanNvbjohMSxjb21wYWN0OiEwLGxvd2VyY2FzZUhleDohMSxudW1iZXJzOiJkZWNpbWFsIixpbmRlbnQ6Ilx0IixpbmRlbnRMZXZlbDowLF9faW5saW5lMV9fOiExLF9faW5saW5lMl9fOiExfSxhPXQmJnQuanNvbjthJiYoci5xdW90ZXM9ImRvdWJsZSIsci53cmFwPSEwKSwic2luZ2xlIiE9KHQ9KChlLHQpPT50PyhpKHQsKHQsbik9PntlW3RdPW59KSxlKTplKShyLHQpKS5xdW90ZXMmJiJkb3VibGUiIT10LnF1b3RlcyYmImJhY2t0aWNrIiE9dC5xdW90ZXMmJih0LnF1b3Rlcz0ic2luZ2xlIik7Y29uc3QgYj0iZG91YmxlIj09dC5xdW90ZXM/JyInOiJiYWNrdGljayI9PXQucXVvdGVzPyJgIjoiJyIsUz10LmNvbXBhY3QsRT10Lmxvd2VyY2FzZUhleDtsZXQgZz10LmluZGVudC5yZXBlYXQodC5pbmRlbnRMZXZlbCksdj0iIjtjb25zdCBQPXQuX19pbmxpbmUxX18seD10Ll9faW5saW5lMl9fLEE9Uz8iIjoiXG4iO2xldCBPLF89ITA7Y29uc3Qgdz0iYmluYXJ5Ij09dC5udW1iZXJzLEk9Im9jdGFsIj09dC5udW1iZXJzLE49ImRlY2ltYWwiPT10Lm51bWJlcnMsRD0iaGV4YWRlY2ltYWwiPT10Lm51bWJlcnM7aWYoYSYmZSYmKGU9PiJmdW5jdGlvbiI9PXR5cGVvZiBlKShlLnRvSlNPTikmJihlPWUudG9KU09OKCkpLCF1KGUpKXtpZihjKGUpKXJldHVybiAwPT1lLnNpemU/Im5ldyBNYXAoKSI6KFN8fCh0Ll9faW5saW5lMV9fPSEwLHQuX19pbmxpbmUyX189ITEpLCJuZXcgTWFwKCIrVChBcnJheS5mcm9tKGUpLHQpKyIpIik7aWYoZChlKSlyZXR1cm4gMD09ZS5zaXplPyJuZXcgU2V0KCkiOiJuZXcgU2V0KCIrVChBcnJheS5mcm9tKGUpLHQpKyIpIjtpZihzKGUpKXJldHVybiAwPT1lLmxlbmd0aD8iQnVmZmVyLmZyb20oW10pIjoiQnVmZmVyLmZyb20oIitUKEFycmF5LmZyb20oZSksdCkrIikiO2lmKG8oZSkpcmV0dXJuIE89W10sdC53cmFwPSEwLFAmJih0Ll9faW5saW5lMV9fPSExLHQuX19pbmxpbmUyX189ITApLHh8fG4oKSwoKGUsdCk9Pntjb25zdCBuPWUubGVuZ3RoO2xldCByPS0xO2Zvcig7KytyPG47KXQoZVtyXSl9KShlLGU9PntfPSExLHgmJih0Ll9faW5saW5lMl9fPSExKSxPLnB1c2goKFN8fHg/IiI6ZykrVChlLHQpKX0pLF8/IltdIjp4PyJbIitPLmpvaW4oIiwgIikrIl0iOiJbIitBK08uam9pbigiLCIrQSkrQSsoUz8iIjp2KSsiXSI7aWYoIXAoZSkpcmV0dXJuIGwoZSk/KE89W10sdC53cmFwPSEwLG4oKSxpKGUsKGUsbik9PntfPSExLE8ucHVzaCgoUz8iIjpnKStUKGUsdCkrIjoiKyhTPyIiOiIgIikrVChuLHQpKX0pLF8/Int9IjoieyIrQStPLmpvaW4oIiwiK0EpK0ErKFM/IiI6dikrIn0iKTphP0pTT04uc3RyaW5naWZ5KGUpfHwibnVsbCI6U3RyaW5nKGUpO2lmKGEpcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO2lmKE4pcmV0dXJuIFN0cmluZyhlKTtpZihEKXtsZXQgdD1lLnRvU3RyaW5nKDE2KTtyZXR1cm4gRXx8KHQ9dC50b1VwcGVyQ2FzZSgpKSwiMHgiK3R9aWYodylyZXR1cm4iMGIiK2UudG9TdHJpbmcoMik7aWYoSSlyZXR1cm4iMG8iK2UudG9TdHJpbmcoOCl9Y29uc3Qgaj1lO2xldCBDPS0xO2NvbnN0IEw9ai5sZW5ndGg7Zm9yKE89IiI7KytDPEw7KXtjb25zdCBlPWouY2hhckF0KEMpO2lmKHQuZXM2KXtjb25zdCBlPWouY2hhckNvZGVBdChDKTtpZihlPj01NTI5NiYmZTw9NTYzMTkmJkw+QysxKXtjb25zdCB0PWouY2hhckNvZGVBdChDKzEpO2lmKHQ+PTU2MzIwJiZ0PD01NzM0Myl7bGV0IG49KDEwMjQqKGUtNTUyOTYpK3QtNTYzMjArNjU1MzYpLnRvU3RyaW5nKDE2KTtFfHwobj1uLnRvVXBwZXJDYXNlKCkpLE8rPSJcXHV7IituKyJ9IiwrK0M7Y29udGludWV9fX1pZighdC5lc2NhcGVFdmVyeXRoaW5nKXtpZihoLnRlc3QoZSkpe08rPWU7Y29udGludWV9aWYoJyInPT1lKXtPKz1iPT1lPydcXCInOmU7Y29udGludWV9aWYoImAiPT1lKXtPKz1iPT1lPyJcXGAiOmU7Y29udGludWV9aWYoIiciPT1lKXtPKz1iPT1lPyJcXCciOmU7Y29udGludWV9fWlmKCJcMCI9PWUmJiFhJiYhbS50ZXN0KGouY2hhckF0KEMrMSkpKXtPKz0iXFwwIjtjb250aW51ZX1pZih5LnRlc3QoZSkpe08rPWZbZV07Y29udGludWV9Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7aWYodC5taW5pbWFsJiY4MjMyIT1uJiY4MjMzIT1uKXtPKz1lO2NvbnRpbnVlfWxldCByPW4udG9TdHJpbmcoMTYpO0V8fChyPXIudG9VcHBlckNhc2UoKSk7Y29uc3QgaT1yLmxlbmd0aD4yfHxhLG89IlxcIisoaT8idSI6IngiKSsoIjAwMDAiK3IpLnNsaWNlKGk/LTQ6LTIpO08rPW99cmV0dXJuIHQud3JhcCYmKE89YitPK2IpLCJgIj09YiYmKE89Ty5yZXBsYWNlKC9cJFx7L2csIlxcJHsiKSksdC5pc1NjcmlwdENvbnRleHQ/Ty5yZXBsYWNlKC88XC8oc2NyaXB0fHN0eWxlKS9naSwiPFxcLyQxIikucmVwbGFjZSgvPCEtLS9nLGE/IlxcdTAwM0MhLS0iOiJcXHgzQyEtLSIpOk99O1QudmVyc2lvbj0iMi41LjIiLGUuZXhwb3J0cz1UfSkuY2FsbCh0aGlzLG4oImI2MzkiKS5CdWZmZXIpfSxiOTA0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe3RoaXMucHJpbnQoZS50YWcsZSksdGhpcy5wcmludChlLnR5cGVQYXJhbWV0ZXJzLGUpLHRoaXMucHJpbnQoZS5xdWFzaSxlKX0sdC5UZW1wbGF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXQucXVhc2lzWzBdPT09ZSxyPXQucXVhc2lzW3QucXVhc2lzLmxlbmd0aC0xXT09PWUsaT0obj8iYCI6In0iKStlLnZhbHVlLnJhdysocj8iYCI6IiR7Iik7dGhpcy50b2tlbihpKX0sdC5UZW1wbGF0ZUxpdGVyYWw9ZnVuY3Rpb24oZSl7Y29uc3QgdD1lLnF1YXNpcztmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLnByaW50KHRbbl0sZSksbisxPHQubGVuZ3RoJiZ0aGlzLnByaW50KGUuZXhwcmVzc2lvbnNbbl0sZSl9LG4oIjI1MmEiKX0sYjk3ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQUxJQVNfS0VZUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuQUxJQVNfS0VZU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQlVJTERFUl9LRVlTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5CVUlMREVSX0tFWVN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRFUFJFQ0FURURfQUxJQVNFUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uREVQUkVDQVRFRF9BTElBU0VTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJERVBSRUNBVEVEX0tFWVMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkRFUFJFQ0FURURfS0VZU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRkxJUFBFRF9BTElBU19LRVlTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5GTElQUEVEX0FMSUFTX0tFWVN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5PREVfRklFTERTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5OT0RFX0ZJRUxEU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTk9ERV9QQVJFTlRfVkFMSURBVElPTlMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLk5PREVfUEFSRU5UX1ZBTElEQVRJT05TfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQTEFDRUhPTERFUlMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLlBMQUNFSE9MREVSU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUExBQ0VIT0xERVJTX0FMSUFTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5QTEFDRUhPTERFUlNfQUxJQVN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBMQUNFSE9MREVSU19GTElQUEVEX0FMSUFTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5QTEFDRUhPTERFUlNfRkxJUFBFRF9BTElBU319KSx0LlRZUEVTPXZvaWQgMCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVklTSVRPUl9LRVlTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5WSVNJVE9SX0tFWVN9fSk7dmFyIHI9bigiZDE5MiIpO24oImYyOGQiKSxuKCI4YjYxIiksbigiYjJhMiIpLG4oImJlYWEiKSxuKCI2ZjZlIiksbigiNjNiYiIpO3ZhciBpPW4oIjU3ZGUiKSxhPW4oImNmNDQiKSxvPW4oImZmZjgiKTtPYmplY3Qua2V5cyhvLkRFUFJFQ0FURURfQUxJQVNFUykuZm9yRWFjaChlPT57aS5GTElQUEVEX0FMSUFTX0tFWVNbZV09aS5GTElQUEVEX0FMSUFTX0tFWVNbby5ERVBSRUNBVEVEX0FMSUFTRVNbZV1dfSkscihpLlZJU0lUT1JfS0VZUykscihpLkFMSUFTX0tFWVMpLHIoaS5GTElQUEVEX0FMSUFTX0tFWVMpLHIoaS5OT0RFX0ZJRUxEUykscihpLkJVSUxERVJfS0VZUykscihpLkRFUFJFQ0FURURfS0VZUykscihhLlBMQUNFSE9MREVSU19BTElBUykscihhLlBMQUNFSE9MREVSU19GTElQUEVEX0FMSUFTKTtjb25zdCBzPVtdLmNvbmNhdChPYmplY3Qua2V5cyhpLlZJU0lUT1JfS0VZUyksT2JqZWN0LmtleXMoaS5GTElQUEVEX0FMSUFTX0tFWVMpLE9iamVjdC5rZXlzKGkuREVQUkVDQVRFRF9LRVlTKSk7dC5UWVBFUz1zfSxiOWJkOmZ1bmN0aW9uKGUsdCl7dC5nZXRBcmc9ZnVuY3Rpb24oZSx0LG4pe2lmKHQgaW4gZSlyZXR1cm4gZVt0XTtpZigzPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoJyInK3QrJyIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKX07dmFyIG49L14oPzooW1x3K1wtLl0rKTopP1wvXC8oPzooXHcrOlx3KylAKT8oW1x3Ll0qKSg/OjooXGQrKSk/KFxTKikkLyxyPS9eZGF0YTouK1wsLiskLztmdW5jdGlvbiBpKGUpe3ZhciB0PWUubWF0Y2gobik7cmV0dXJuIHQ/e3NjaGVtZTp0WzFdLGF1dGg6dFsyXSxob3N0OnRbM10scG9ydDp0WzRdLHBhdGg6dFs1XX06bnVsbH1mdW5jdGlvbiBhKGUpe3ZhciB0PSIiO3JldHVybiBlLnNjaGVtZSYmKHQrPWUuc2NoZW1lKyI6IiksdCs9Ii8vIixlLmF1dGgmJih0Kz1lLmF1dGgrIkAiKSxlLmhvc3QmJih0Kz1lLmhvc3QpLGUucG9ydCYmKHQrPSI6IitlLnBvcnQpLGUucGF0aCYmKHQrPWUucGF0aCksdH1mdW5jdGlvbiBvKGUpe3ZhciBuPWUscj1pKGUpO2lmKHIpe2lmKCFyLnBhdGgpcmV0dXJuIGU7bj1yLnBhdGh9Zm9yKHZhciBvLHM9dC5pc0Fic29sdXRlKG4pLGw9bi5zcGxpdCgvXC8rLyksdT0wLHA9bC5sZW5ndGgtMTtwPj0wO3AtLSkiLiI9PT0obz1sW3BdKT9sLnNwbGljZShwLDEpOiIuLiI9PT1vP3UrKzp1PjAmJigiIj09PW8/KGwuc3BsaWNlKHArMSx1KSx1PTApOihsLnNwbGljZShwLDIpLHUtLSkpO3JldHVybiIiPT09KG49bC5qb2luKCIvIikpJiYobj1zPyIvIjoiLiIpLHI/KHIucGF0aD1uLGEocikpOm59dC51cmxQYXJzZT1pLHQudXJsR2VuZXJhdGU9YSx0Lm5vcm1hbGl6ZT1vLHQuam9pbj1mdW5jdGlvbihlLHQpeyIiPT09ZSYmKGU9Ii4iKSwiIj09PXQmJih0PSIuIik7dmFyIG49aSh0KSxzPWkoZSk7aWYocyYmKGU9cy5wYXRofHwiLyIpLG4mJiFuLnNjaGVtZSlyZXR1cm4gcyYmKG4uc2NoZW1lPXMuc2NoZW1lKSxhKG4pO2lmKG58fHQubWF0Y2gocikpcmV0dXJuIHQ7aWYocyYmIXMuaG9zdCYmIXMucGF0aClyZXR1cm4gcy5ob3N0PXQsYShzKTt2YXIgbD0iLyI9PT10LmNoYXJBdCgwKT90Om8oZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QpO3JldHVybiBzPyhzLnBhdGg9bCxhKHMpKTpsfSx0LmlzQWJzb2x1dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIi8iPT09ZS5jaGFyQXQoMCl8fCEhZS5tYXRjaChuKX0sdC5yZWxhdGl2ZT1mdW5jdGlvbihlLHQpeyIiPT09ZSYmKGU9Ii4iKSxlPWUucmVwbGFjZSgvXC8kLywiIik7Zm9yKHZhciBuPTA7MCE9PXQuaW5kZXhPZihlKyIvIik7KXt2YXIgcj1lLmxhc3RJbmRleE9mKCIvIik7aWYocjwwKXJldHVybiB0O2lmKChlPWUuc2xpY2UoMCxyKSkubWF0Y2goL14oW15cL10rOlwvKT9cLyokLykpcmV0dXJuIHQ7KytufXJldHVybiBBcnJheShuKzEpLmpvaW4oIi4uLyIpK3Quc3Vic3RyKGUubGVuZ3RoKzEpfTt2YXIgcz0hKCJfX3Byb3RvX18iaW4gT2JqZWN0LmNyZWF0ZShudWxsKSk7ZnVuY3Rpb24gbChlKXtyZXR1cm4gZX1mdW5jdGlvbiB1KGUpe2lmKCFlKXJldHVybiExO3ZhciB0PWUubGVuZ3RoO2lmKHQ8OSlyZXR1cm4hMTtpZig5NSE9PWUuY2hhckNvZGVBdCh0LTEpfHw5NSE9PWUuY2hhckNvZGVBdCh0LTIpfHwxMTEhPT1lLmNoYXJDb2RlQXQodC0zKXx8MTE2IT09ZS5jaGFyQ29kZUF0KHQtNCl8fDExMSE9PWUuY2hhckNvZGVBdCh0LTUpfHwxMTQhPT1lLmNoYXJDb2RlQXQodC02KXx8MTEyIT09ZS5jaGFyQ29kZUF0KHQtNyl8fDk1IT09ZS5jaGFyQ29kZUF0KHQtOCl8fDk1IT09ZS5jaGFyQ29kZUF0KHQtOSkpcmV0dXJuITE7Zm9yKHZhciBuPXQtMTA7bj49MDtuLS0paWYoMzYhPT1lLmNoYXJDb2RlQXQobikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcChlLHQpe3JldHVybiBlPT09dD8wOmU+dD8xOi0xfXQudG9TZXRTdHJpbmc9cz9sOmZ1bmN0aW9uKGUpe3JldHVybiB1KGUpPyIkIitlOmV9LHQuZnJvbVNldFN0cmluZz1zP2w6ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSk/ZS5zbGljZSgxKTplfSx0LmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLnNvdXJjZS10LnNvdXJjZTtyZXR1cm4gMCE9PXI/cjowIT09KHI9ZS5vcmlnaW5hbExpbmUtdC5vcmlnaW5hbExpbmUpP3I6MCE9PShyPWUub3JpZ2luYWxDb2x1bW4tdC5vcmlnaW5hbENvbHVtbil8fG4/cjowIT09KHI9ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRDb2x1bW4pP3I6MCE9PShyPWUuZ2VuZXJhdGVkTGluZS10LmdlbmVyYXRlZExpbmUpP3I6ZS5uYW1lLXQubmFtZX0sdC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5nZW5lcmF0ZWRMaW5lLXQuZ2VuZXJhdGVkTGluZTtyZXR1cm4gMCE9PXI/cjowIT09KHI9ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRDb2x1bW4pfHxuP3I6MCE9PShyPWUuc291cmNlLXQuc291cmNlKT9yOjAhPT0ocj1lLm9yaWdpbmFsTGluZS10Lm9yaWdpbmFsTGluZSk/cjowIT09KHI9ZS5vcmlnaW5hbENvbHVtbi10Lm9yaWdpbmFsQ29sdW1uKT9yOmUubmFtZS10Lm5hbWV9LHQuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdlbmVyYXRlZExpbmUtdC5nZW5lcmF0ZWRMaW5lO3JldHVybiAwIT09bj9uOjAhPT0obj1lLmdlbmVyYXRlZENvbHVtbi10LmdlbmVyYXRlZENvbHVtbik/bjowIT09KG49cChlLnNvdXJjZSx0LnNvdXJjZSkpP246MCE9PShuPWUub3JpZ2luYWxMaW5lLXQub3JpZ2luYWxMaW5lKT9uOjAhPT0obj1lLm9yaWdpbmFsQ29sdW1uLXQub3JpZ2luYWxDb2x1bW4pP246cChlLm5hbWUsdC5uYW1lKX19LGI5YzM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdD0hMCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYoIXR8fCEoMCxyLmlzS2V5d29yZCkoZSkmJiEoMCxyLmlzU3RyaWN0UmVzZXJ2ZWRXb3JkKShlLCEwKSkmJigwLHIuaXNJZGVudGlmaWVyTmFtZSkoZSl9O3ZhciByPW4oIjAzNmUiKX0sYmQ2ZjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0PWUua2V5fHxlLnByb3BlcnR5KXtyZXR1cm4hZS5jb21wdXRlZCYmKDAsci5pc0lkZW50aWZpZXIpKHQpJiYodD0oMCxpLnN0cmluZ0xpdGVyYWwpKHQubmFtZSkpLHR9O3ZhciByPW4oImM0ODUiKSxpPW4oImViNWIiKX0sYmRhOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnJlYWRDb2RlUG9pbnQ9cCx0LnJlYWRJbnQ9dSx0LnJlYWRTdHJpbmdDb250ZW50cz1mdW5jdGlvbihlLHQsbixyLGksYSl7Y29uc3QgbD1uLHU9cixwPWk7bGV0IGM9IiIsZD1udWxsLGY9bjtjb25zdHtsZW5ndGg6eX09dDtmb3IoOzspe2lmKG4+PXkpe2EudW50ZXJtaW5hdGVkKGwsdSxwKSxjKz10LnNsaWNlKGYsbik7YnJlYWt9Y29uc3QgbT10LmNoYXJDb2RlQXQobik7aWYobyhlLG0sdCxuKSl7Yys9dC5zbGljZShmLG4pO2JyZWFrfWlmKDkyPT09bSl7Yys9dC5zbGljZShmLG4pO2NvbnN0IG89cyh0LG4scixpLCJ0ZW1wbGF0ZSI9PT1lLGEpO251bGwhPT1vLmNofHxkP2MrPW8uY2g6ZD17cG9zOm4sbGluZVN0YXJ0OnIsY3VyTGluZTppfSwoe3BvczpuLGxpbmVTdGFydDpyLGN1ckxpbmU6aX09byksZj1ufWVsc2UgODIzMj09PW18fDgyMzM9PT1tPygrK24sKytpLHI9bik6MTA9PT1tfHwxMz09PW0/InRlbXBsYXRlIj09PWU/KGMrPXQuc2xpY2UoZixuKSsiXG4iLCsrbiwxMz09PW0mJjEwPT09dC5jaGFyQ29kZUF0KG4pJiYrK24sKytpLGY9cj1uKTphLnVudGVybWluYXRlZChsLHUscCk6KytufXJldHVybntwb3M6bixzdHI6YyxmaXJzdEludmFsaWRMb2M6ZCxsaW5lU3RhcnQ6cixjdXJMaW5lOmksY29udGFpbnNJbnZhbGlkOiEhZH19O3ZhciByPWZ1bmN0aW9uKGUpe3JldHVybiBlPj00OCYmZTw9NTd9O2NvbnN0IGk9e2RlY0Jpbk9jdDpuZXcgU2V0KFs0Niw2Niw2OSw3OSw5NSw5OCwxMDEsMTExXSksaGV4Om5ldyBTZXQoWzQ2LDg4LDk1LDEyMF0pfSxhPXtiaW46ZT0+NDg9PT1lfHw0OT09PWUsb2N0OmU9PmU+PTQ4JiZlPD01NSxkZWM6ZT0+ZT49NDgmJmU8PTU3LGhleDplPT5lPj00OCYmZTw9NTd8fGU+PTY1JiZlPD03MHx8ZT49OTcmJmU8PTEwMn07ZnVuY3Rpb24gbyhlLHQsbixyKXtyZXR1cm4idGVtcGxhdGUiPT09ZT85Nj09PXR8fDM2PT09dCYmMTIzPT09bi5jaGFyQ29kZUF0KHIrMSk6dD09PSgiZG91YmxlIj09PWU/MzQ6MzkpfWZ1bmN0aW9uIHMoZSx0LG4scixpLGEpe2NvbnN0IG89IWk7dCsrO2NvbnN0IHM9ZT0+KHtwb3M6dCxjaDplLGxpbmVTdGFydDpuLGN1ckxpbmU6cn0pLHU9ZS5jaGFyQ29kZUF0KHQrKyk7c3dpdGNoKHUpe2Nhc2UgMTEwOnJldHVybiBzKCJcbiIpO2Nhc2UgMTE0OnJldHVybiBzKCJcciIpO2Nhc2UgMTIwOntsZXQgaTtyZXR1cm4oe2NvZGU6aSxwb3M6dH09bChlLHQsbixyLDIsITEsbyxhKSkscyhudWxsPT09aT9udWxsOlN0cmluZy5mcm9tQ2hhckNvZGUoaSkpfWNhc2UgMTE3OntsZXQgaTtyZXR1cm4oe2NvZGU6aSxwb3M6dH09cChlLHQsbixyLG8sYSkpLHMobnVsbD09PWk/bnVsbDpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSl9Y2FzZSAxMTY6cmV0dXJuIHMoIlx0Iik7Y2FzZSA5ODpyZXR1cm4gcygiXGIiKTtjYXNlIDExODpyZXR1cm4gcygiXHYiKTtjYXNlIDEwMjpyZXR1cm4gcygiXGYiKTtjYXNlIDEzOjEwPT09ZS5jaGFyQ29kZUF0KHQpJiYrK3Q7Y2FzZSAxMDpuPXQsKytyO2Nhc2UgODIzMjpjYXNlIDgyMzM6cmV0dXJuIHMoIiIpO2Nhc2UgNTY6Y2FzZSA1NzppZihpKXJldHVybiBzKG51bGwpO2Euc3RyaWN0TnVtZXJpY0VzY2FwZSh0LTEsbixyKTtkZWZhdWx0OmlmKHU+PTQ4JiZ1PD01NSl7Y29uc3Qgbz10LTE7bGV0IGw9ZS5zbGljZShvLHQrMikubWF0Y2goL15bMC03XSsvKVswXSx1PXBhcnNlSW50KGwsOCk7dT4yNTUmJihsPWwuc2xpY2UoMCwtMSksdT1wYXJzZUludChsLDgpKSx0Kz1sLmxlbmd0aC0xO2NvbnN0IHA9ZS5jaGFyQ29kZUF0KHQpO2lmKCIwIiE9PWx8fDU2PT09cHx8NTc9PT1wKXtpZihpKXJldHVybiBzKG51bGwpO2Euc3RyaWN0TnVtZXJpY0VzY2FwZShvLG4scil9cmV0dXJuIHMoU3RyaW5nLmZyb21DaGFyQ29kZSh1KSl9cmV0dXJuIHMoU3RyaW5nLmZyb21DaGFyQ29kZSh1KSl9fWZ1bmN0aW9uIGwoZSx0LG4scixpLGEsbyxzKXtjb25zdCBsPXQ7bGV0IHA7cmV0dXJuKHtuOnAscG9zOnR9PXUoZSx0LG4sciwxNixpLGEsITEscywhbykpLG51bGw9PT1wJiYobz9zLmludmFsaWRFc2NhcGVTZXF1ZW5jZShsLG4scik6dD1sLTEpLHtjb2RlOnAscG9zOnR9fWZ1bmN0aW9uIHUoZSx0LG4sbyxzLGwsdSxwLGMsZCl7Y29uc3QgZj10LHk9MTY9PT1zP2kuaGV4OmkuZGVjQmluT2N0LG09MTY9PT1zP2EuaGV4OjEwPT09cz9hLmRlYzo4PT09cz9hLm9jdDphLmJpbjtsZXQgaD0hMSxUPTA7Zm9yKGxldCBpPTAsYT1udWxsPT1sPzEvMDpsO2k8YTsrK2kpe2NvbnN0IGk9ZS5jaGFyQ29kZUF0KHQpO2xldCBhO2lmKDk1IT09aXx8ImJhaWwiPT09cCl7aWYoYT1pPj05Nz9pLTk3KzEwOmk+PTY1P2ktNjUrMTA6cihpKT9pLTQ4OjEvMCxhPj1zKXtpZihhPD05JiZkKXJldHVybntuOm51bGwscG9zOnR9O2lmKGE8PTkmJmMuaW52YWxpZERpZ2l0KHQsbixvLHMpKWE9MDtlbHNle2lmKCF1KWJyZWFrO2E9MCxoPSEwfX0rK3QsVD1UKnMrYX1lbHNle2NvbnN0IHI9ZS5jaGFyQ29kZUF0KHQtMSksaT1lLmNoYXJDb2RlQXQodCsxKTtpZihwKXtpZihOdW1iZXIuaXNOYU4oaSl8fCFtKGkpfHx5LmhhcyhyKXx8eS5oYXMoaSkpe2lmKGQpcmV0dXJue246bnVsbCxwb3M6dH07Yy51bmV4cGVjdGVkTnVtZXJpY1NlcGFyYXRvcih0LG4sbyl9fWVsc2V7aWYoZClyZXR1cm57bjpudWxsLHBvczp0fTtjLm51bWVyaWNTZXBhcmF0b3JJbkVzY2FwZVNlcXVlbmNlKHQsbixvKX0rK3R9fXJldHVybiB0PT09Znx8bnVsbCE9bCYmdC1mIT09bHx8aD97bjpudWxsLHBvczp0fTp7bjpULHBvczp0fX1mdW5jdGlvbiBwKGUsdCxuLHIsaSxhKXtsZXQgbztpZigxMjM9PT1lLmNoYXJDb2RlQXQodCkpe2lmKCsrdCwoe2NvZGU6byxwb3M6dH09bChlLHQsbixyLGUuaW5kZXhPZigifSIsdCktdCwhMCxpLGEpKSwrK3QsbnVsbCE9PW8mJm8+MTExNDExMSl7aWYoIWkpcmV0dXJue2NvZGU6bnVsbCxwb3M6dH07YS5pbnZhbGlkQ29kZVBvaW50KHQsbixyKX19ZWxzZSh7Y29kZTpvLHBvczp0fT1sKGUsdCxuLHIsNCwhMSxpLGEpKTtyZXR1cm57Y29kZTpvLHBvczp0fX19LGJlMDk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9aS5CVUlMREVSX0tFWVNbZS50eXBlXTtmb3IoY29uc3QgbiBvZiB0KSgwLHIuZGVmYXVsdCkoZSxuLGVbbl0pO3JldHVybiBlfTt2YXIgcj1uKCI2MmVhIiksaT1uKCIyNTJhIil9LGJlYWE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCI1N2RlIiksaT1uKCJjZjQ0Iik7Y29uc3QgYT0oMCxyLmRlZmluZUFsaWFzZWRUeXBlKSgiTWlzY2VsbGFuZW91cyIpO2EoIk5vb3AiLHt2aXNpdG9yOltdfSksYSgiUGxhY2Vob2xkZXIiLHt2aXNpdG9yOltdLGJ1aWxkZXI6WyJleHBlY3RlZE5vZGUiLCJuYW1lIl0sZmllbGRzOntuYW1lOnt2YWxpZGF0ZTooMCxyLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIpfSxleHBlY3RlZE5vZGU6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0T25lT2YpKC4uLmkuUExBQ0VIT0xERVJTKX19fSksYSgiVjhJbnRyaW5zaWNJZGVudGlmaWVyIix7YnVpbGRlcjpbIm5hbWUiXSxmaWVsZHM6e25hbWU6e3ZhbGlkYXRlOigwLHIuYXNzZXJ0VmFsdWVUeXBlKSgic3RyaW5nIil9fX0pfSxiZjc4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQ9ITAsbj0hMSl7cmV0dXJuIGwoZSx0LG4sbmV3IE1hcCl9O3ZhciByPW4oImI5NzgiKSxpPW4oImM0ODUiKTtjb25zdCBhPUZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtmdW5jdGlvbiBvKGUsdCxuLHIpe3JldHVybiBlJiYic3RyaW5nIj09dHlwZW9mIGUudHlwZT9sKGUsdCxuLHIpOmV9ZnVuY3Rpb24gcyhlLHQsbixyKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLm1hcChlPT5vKGUsdCxuLHIpKTpvKGUsdCxuLHIpfWZ1bmN0aW9uIGwoZSx0PSEwLG49ITEsbyl7aWYoIWUpcmV0dXJuIGU7Y29uc3R7dHlwZTpsfT1lLHA9e3R5cGU6ZS50eXBlfTtpZigoMCxpLmlzSWRlbnRpZmllcikoZSkpcC5uYW1lPWUubmFtZSxhKGUsIm9wdGlvbmFsIikmJiJib29sZWFuIj09dHlwZW9mIGUub3B0aW9uYWwmJihwLm9wdGlvbmFsPWUub3B0aW9uYWwpLGEoZSwidHlwZUFubm90YXRpb24iKSYmKHAudHlwZUFubm90YXRpb249dD9zKGUudHlwZUFubm90YXRpb24sITAsbixvKTplLnR5cGVBbm5vdGF0aW9uKTtlbHNle2lmKCFhKHIuTk9ERV9GSUVMRFMsbCkpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG5vZGUgdHlwZTogIiR7bH0iYCk7Zm9yKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoci5OT0RFX0ZJRUxEU1tsXSkpYShlLGMpJiYocFtjXT10PygwLGkuaXNGaWxlKShlKSYmImNvbW1lbnRzIj09PWM/dShlLmNvbW1lbnRzLHQsbixvKTpzKGVbY10sITAsbixvKTplW2NdKX1yZXR1cm4gYShlLCJsb2MiKSYmKHAubG9jPW4/bnVsbDplLmxvYyksYShlLCJsZWFkaW5nQ29tbWVudHMiKSYmKHAubGVhZGluZ0NvbW1lbnRzPXUoZS5sZWFkaW5nQ29tbWVudHMsdCxuLG8pKSxhKGUsImlubmVyQ29tbWVudHMiKSYmKHAuaW5uZXJDb21tZW50cz11KGUuaW5uZXJDb21tZW50cyx0LG4sbykpLGEoZSwidHJhaWxpbmdDb21tZW50cyIpJiYocC50cmFpbGluZ0NvbW1lbnRzPXUoZS50cmFpbGluZ0NvbW1lbnRzLHQsbixvKSksYShlLCJleHRyYSIpJiYocC5leHRyYT1PYmplY3QuYXNzaWduKHt9LGUuZXh0cmEpKSxwfWZ1bmN0aW9uIHUoZSx0LG4scil7cmV0dXJuIGUmJnQ/ZS5tYXAoZT0+e2NvbnN0IHQ9ci5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdHt0eXBlOmksdmFsdWU6YSxsb2M6b309ZSxzPXt0eXBlOmksdmFsdWU6YSxsb2M6b307cmV0dXJuIG4mJihzLmxvYz1udWxsKSxyLnNldChlLHMpLHN9KTplfX0sYzEwZDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5pc1ZhcmlhYmxlRGVjbGFyYXRpb24pKGUpJiYoInZhciIhPT1lLmtpbmR8fGVbaS5CTE9DS19TQ09QRURfU1lNQk9MXSl9O3ZhciByPW4oImM0ODUiKSxpPW4oIjkwNDYiKX0sYzFmNzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9aTt2YXIgcj1uKCJjNDg1Iik7ZnVuY3Rpb24gaShlLHQsbil7Y29uc3QgYT1bXS5jb25jYXQoZSksbz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcig7YS5sZW5ndGg7KXtjb25zdCBlPWEuc2hpZnQoKTtpZighZSljb250aW51ZTtjb25zdCBzPWkua2V5c1tlLnR5cGVdO2lmKCgwLHIuaXNJZGVudGlmaWVyKShlKSlpZih0KXsob1tlLm5hbWVdPW9bZS5uYW1lXXx8W10pLnB1c2goZSl9ZWxzZSBvW2UubmFtZV09ZTtlbHNlIGlmKCEoMCxyLmlzRXhwb3J0RGVjbGFyYXRpb24pKGUpfHwoMCxyLmlzRXhwb3J0QWxsRGVjbGFyYXRpb24pKGUpKXtpZihuKXtpZigoMCxyLmlzRnVuY3Rpb25EZWNsYXJhdGlvbikoZSkpe2EucHVzaChlLmlkKTtjb250aW51ZX1pZigoMCxyLmlzRnVuY3Rpb25FeHByZXNzaW9uKShlKSljb250aW51ZX1pZihzKWZvcihsZXQgdD0wO3Q8cy5sZW5ndGg7dCsrKXtjb25zdCBuPWVbc1t0XV07biYmKEFycmF5LmlzQXJyYXkobik/YS5wdXNoKC4uLm4pOmEucHVzaChuKSl9fWVsc2UoMCxyLmlzRGVjbGFyYXRpb24pKGUuZGVjbGFyYXRpb24pJiZhLnB1c2goZS5kZWNsYXJhdGlvbil9cmV0dXJuIG99aS5rZXlzPXtEZWNsYXJlQ2xhc3M6WyJpZCJdLERlY2xhcmVGdW5jdGlvbjpbImlkIl0sRGVjbGFyZU1vZHVsZTpbImlkIl0sRGVjbGFyZVZhcmlhYmxlOlsiaWQiXSxEZWNsYXJlSW50ZXJmYWNlOlsiaWQiXSxEZWNsYXJlVHlwZUFsaWFzOlsiaWQiXSxEZWNsYXJlT3BhcXVlVHlwZTpbImlkIl0sSW50ZXJmYWNlRGVjbGFyYXRpb246WyJpZCJdLFR5cGVBbGlhczpbImlkIl0sT3BhcXVlVHlwZTpbImlkIl0sQ2F0Y2hDbGF1c2U6WyJwYXJhbSJdLExhYmVsZWRTdGF0ZW1lbnQ6WyJsYWJlbCJdLFVuYXJ5RXhwcmVzc2lvbjpbImFyZ3VtZW50Il0sQXNzaWdubWVudEV4cHJlc3Npb246WyJsZWZ0Il0sSW1wb3J0U3BlY2lmaWVyOlsibG9jYWwiXSxJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6WyJsb2NhbCJdLEltcG9ydERlZmF1bHRTcGVjaWZpZXI6WyJsb2NhbCJdLEltcG9ydERlY2xhcmF0aW9uOlsic3BlY2lmaWVycyJdLEV4cG9ydFNwZWNpZmllcjpbImV4cG9ydGVkIl0sRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyOlsiZXhwb3J0ZWQiXSxFeHBvcnREZWZhdWx0U3BlY2lmaWVyOlsiZXhwb3J0ZWQiXSxGdW5jdGlvbkRlY2xhcmF0aW9uOlsiaWQiLCJwYXJhbXMiXSxGdW5jdGlvbkV4cHJlc3Npb246WyJpZCIsInBhcmFtcyJdLEFycm93RnVuY3Rpb25FeHByZXNzaW9uOlsicGFyYW1zIl0sT2JqZWN0TWV0aG9kOlsicGFyYW1zIl0sQ2xhc3NNZXRob2Q6WyJwYXJhbXMiXSxDbGFzc1ByaXZhdGVNZXRob2Q6WyJwYXJhbXMiXSxGb3JJblN0YXRlbWVudDpbImxlZnQiXSxGb3JPZlN0YXRlbWVudDpbImxlZnQiXSxDbGFzc0RlY2xhcmF0aW9uOlsiaWQiXSxDbGFzc0V4cHJlc3Npb246WyJpZCJdLFJlc3RFbGVtZW50OlsiYXJndW1lbnQiXSxVcGRhdGVFeHByZXNzaW9uOlsiYXJndW1lbnQiXSxPYmplY3RQcm9wZXJ0eTpbInZhbHVlIl0sQXNzaWdubWVudFBhdHRlcm46WyJsZWZ0Il0sQXJyYXlQYXR0ZXJuOlsiZWxlbWVudHMiXSxPYmplY3RQYXR0ZXJuOlsicHJvcGVydGllcyJdLFZhcmlhYmxlRGVjbGFyYXRpb246WyJkZWNsYXJhdGlvbnMiXSxWYXJpYWJsZURlY2xhcmF0b3I6WyJpZCJdfX0sYzQ4NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzQWNjZXNzb3I9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iQ2xhc3NBY2Nlc3NvclByb3BlcnR5Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNBbnlUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJBbnlUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzQXJndW1lbnRQbGFjZWhvbGRlcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJBcmd1bWVudFBsYWNlaG9sZGVyIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNBcnJheUV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iQXJyYXlFeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNBcnJheVBhdHRlcm49ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iQXJyYXlQYXR0ZXJuIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNBcnJheVR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkFycmF5VHlwZUFubm90YXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0Fycm93RnVuY3Rpb25FeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNBc3NpZ25tZW50RXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJBc3NpZ25tZW50RXhwcmVzc2lvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzQXNzaWdubWVudFBhdHRlcm49ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iQXNzaWdubWVudFBhdHRlcm4iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0F3YWl0RXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJBd2FpdEV4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0JpZ0ludExpdGVyYWw9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iQmlnSW50TGl0ZXJhbCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzQmluYXJ5PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJCaW5hcnlFeHByZXNzaW9uIj09PW58fCJMb2dpY2FsRXhwcmVzc2lvbiI9PT1uKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNCaW5hcnlFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkJpbmFyeUV4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0JpbmRFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkJpbmRFeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNCbG9jaz1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiQmxvY2tTdGF0ZW1lbnQiPT09bnx8IlByb2dyYW0iPT09bnx8IlRTTW9kdWxlQmxvY2siPT09bnx8IlBsYWNlaG9sZGVyIj09PW4mJiJCbG9ja1N0YXRlbWVudCI9PT1lLmV4cGVjdGVkTm9kZSkmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzQmxvY2tQYXJlbnQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkJsb2NrU3RhdGVtZW50Ij09PW58fCJDYXRjaENsYXVzZSI9PT1ufHwiRG9XaGlsZVN0YXRlbWVudCI9PT1ufHwiRm9ySW5TdGF0ZW1lbnQiPT09bnx8IkZvclN0YXRlbWVudCI9PT1ufHwiRnVuY3Rpb25EZWNsYXJhdGlvbiI9PT1ufHwiRnVuY3Rpb25FeHByZXNzaW9uIj09PW58fCJQcm9ncmFtIj09PW58fCJPYmplY3RNZXRob2QiPT09bnx8IlN3aXRjaFN0YXRlbWVudCI9PT1ufHwiV2hpbGVTdGF0ZW1lbnQiPT09bnx8IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIj09PW58fCJGb3JPZlN0YXRlbWVudCI9PT1ufHwiQ2xhc3NNZXRob2QiPT09bnx8IkNsYXNzUHJpdmF0ZU1ldGhvZCI9PT1ufHwiU3RhdGljQmxvY2siPT09bnx8IlRTTW9kdWxlQmxvY2siPT09bnx8IlBsYWNlaG9sZGVyIj09PW4mJiJCbG9ja1N0YXRlbWVudCI9PT1lLmV4cGVjdGVkTm9kZSkmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzQmxvY2tTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iQmxvY2tTdGF0ZW1lbnQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0Jvb2xlYW5MaXRlcmFsPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkJvb2xlYW5MaXRlcmFsIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNCb29sZWFuTGl0ZXJhbFR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkJvb2xlYW5MaXRlcmFsVHlwZUFubm90YXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0Jvb2xlYW5UeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJCb29sZWFuVHlwZUFubm90YXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0JyZWFrU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkJyZWFrU3RhdGVtZW50Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNDYWxsRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJDYWxsRXhwcmVzc2lvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzQ2F0Y2hDbGF1c2U9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iQ2F0Y2hDbGF1c2UiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0NsYXNzPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJDbGFzc0V4cHJlc3Npb24iPT09bnx8IkNsYXNzRGVjbGFyYXRpb24iPT09bikmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzQ2xhc3NBY2Nlc3NvclByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkNsYXNzQWNjZXNzb3JQcm9wZXJ0eSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzQ2xhc3NCb2R5PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkNsYXNzQm9keSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzQ2xhc3NEZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJDbGFzc0RlY2xhcmF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNDbGFzc0V4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iQ2xhc3NFeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNDbGFzc0ltcGxlbWVudHM9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iQ2xhc3NJbXBsZW1lbnRzIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNDbGFzc01ldGhvZD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJDbGFzc01ldGhvZCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzQ2xhc3NQcml2YXRlTWV0aG9kPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkNsYXNzUHJpdmF0ZU1ldGhvZCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzQ2xhc3NQcml2YXRlUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iQ2xhc3NQcml2YXRlUHJvcGVydHkiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0NsYXNzUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iQ2xhc3NQcm9wZXJ0eSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzQ29tcGxldGlvblN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiQnJlYWtTdGF0ZW1lbnQiPT09bnx8IkNvbnRpbnVlU3RhdGVtZW50Ij09PW58fCJSZXR1cm5TdGF0ZW1lbnQiPT09bnx8IlRocm93U3RhdGVtZW50Ij09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0NvbmRpdGlvbmFsPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJDb25kaXRpb25hbEV4cHJlc3Npb24iPT09bnx8IklmU3RhdGVtZW50Ij09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0NvbmRpdGlvbmFsRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJDb25kaXRpb25hbEV4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0NvbnRpbnVlU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkNvbnRpbnVlU3RhdGVtZW50Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNEZWJ1Z2dlclN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJEZWJ1Z2dlclN0YXRlbWVudCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRGVjaW1hbExpdGVyYWw9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iRGVjaW1hbExpdGVyYWwiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0RlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJGdW5jdGlvbkRlY2xhcmF0aW9uIj09PW58fCJWYXJpYWJsZURlY2xhcmF0aW9uIj09PW58fCJDbGFzc0RlY2xhcmF0aW9uIj09PW58fCJFeHBvcnRBbGxEZWNsYXJhdGlvbiI9PT1ufHwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uIj09PW58fCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIj09PW58fCJJbXBvcnREZWNsYXJhdGlvbiI9PT1ufHwiRGVjbGFyZUNsYXNzIj09PW58fCJEZWNsYXJlRnVuY3Rpb24iPT09bnx8IkRlY2xhcmVJbnRlcmZhY2UiPT09bnx8IkRlY2xhcmVNb2R1bGUiPT09bnx8IkRlY2xhcmVNb2R1bGVFeHBvcnRzIj09PW58fCJEZWNsYXJlVHlwZUFsaWFzIj09PW58fCJEZWNsYXJlT3BhcXVlVHlwZSI9PT1ufHwiRGVjbGFyZVZhcmlhYmxlIj09PW58fCJEZWNsYXJlRXhwb3J0RGVjbGFyYXRpb24iPT09bnx8IkRlY2xhcmVFeHBvcnRBbGxEZWNsYXJhdGlvbiI9PT1ufHwiSW50ZXJmYWNlRGVjbGFyYXRpb24iPT09bnx8Ik9wYXF1ZVR5cGUiPT09bnx8IlR5cGVBbGlhcyI9PT1ufHwiRW51bURlY2xhcmF0aW9uIj09PW58fCJUU0RlY2xhcmVGdW5jdGlvbiI9PT1ufHwiVFNJbnRlcmZhY2VEZWNsYXJhdGlvbiI9PT1ufHwiVFNUeXBlQWxpYXNEZWNsYXJhdGlvbiI9PT1ufHwiVFNFbnVtRGVjbGFyYXRpb24iPT09bnx8IlRTTW9kdWxlRGVjbGFyYXRpb24iPT09bnx8IlBsYWNlaG9sZGVyIj09PW4mJiJEZWNsYXJhdGlvbiI9PT1lLmV4cGVjdGVkTm9kZSkmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRGVjbGFyZUNsYXNzPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkRlY2xhcmVDbGFzcyI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRGVjbGFyZUV4cG9ydEFsbERlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkRlY2xhcmVFeHBvcnRBbGxEZWNsYXJhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkRlY2xhcmVFeHBvcnREZWNsYXJhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRGVjbGFyZUZ1bmN0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkRlY2xhcmVGdW5jdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRGVjbGFyZUludGVyZmFjZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJEZWNsYXJlSW50ZXJmYWNlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNEZWNsYXJlTW9kdWxlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkRlY2xhcmVNb2R1bGUiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0RlY2xhcmVNb2R1bGVFeHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkRlY2xhcmVNb2R1bGVFeHBvcnRzIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNEZWNsYXJlT3BhcXVlVHlwZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJEZWNsYXJlT3BhcXVlVHlwZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRGVjbGFyZVR5cGVBbGlhcz1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJEZWNsYXJlVHlwZUFsaWFzIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNEZWNsYXJlVmFyaWFibGU9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iRGVjbGFyZVZhcmlhYmxlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNEZWNsYXJlZFByZWRpY2F0ZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJEZWNsYXJlZFByZWRpY2F0ZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRGVjb3JhdG9yPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkRlY29yYXRvciI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRGlyZWN0aXZlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkRpcmVjdGl2ZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRGlyZWN0aXZlTGl0ZXJhbD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJEaXJlY3RpdmVMaXRlcmFsIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNEb0V4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iRG9FeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNEb1doaWxlU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkRvV2hpbGVTdGF0ZW1lbnQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0VtcHR5U3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkVtcHR5U3RhdGVtZW50Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNFbXB0eVR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkVtcHR5VHlwZUFubm90YXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0VudW1Cb2R5PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJFbnVtQm9vbGVhbkJvZHkiPT09bnx8IkVudW1OdW1iZXJCb2R5Ij09PW58fCJFbnVtU3RyaW5nQm9keSI9PT1ufHwiRW51bVN5bWJvbEJvZHkiPT09bikmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRW51bUJvb2xlYW5Cb2R5PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkVudW1Cb29sZWFuQm9keSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRW51bUJvb2xlYW5NZW1iZXI9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iRW51bUJvb2xlYW5NZW1iZXIiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0VudW1EZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJFbnVtRGVjbGFyYXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0VudW1EZWZhdWx0ZWRNZW1iZXI9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iRW51bURlZmF1bHRlZE1lbWJlciI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRW51bU1lbWJlcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiRW51bUJvb2xlYW5NZW1iZXIiPT09bnx8IkVudW1OdW1iZXJNZW1iZXIiPT09bnx8IkVudW1TdHJpbmdNZW1iZXIiPT09bnx8IkVudW1EZWZhdWx0ZWRNZW1iZXIiPT09bikmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRW51bU51bWJlckJvZHk9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iRW51bU51bWJlckJvZHkiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0VudW1OdW1iZXJNZW1iZXI9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iRW51bU51bWJlck1lbWJlciI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRW51bVN0cmluZ0JvZHk9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iRW51bVN0cmluZ0JvZHkiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0VudW1TdHJpbmdNZW1iZXI9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iRW51bVN0cmluZ01lbWJlciI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRW51bVN5bWJvbEJvZHk9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iRW51bVN5bWJvbEJvZHkiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0V4aXN0c1R5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkV4aXN0c1R5cGVBbm5vdGF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNFeHBvcnRBbGxEZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJFeHBvcnRBbGxEZWNsYXJhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRXhwb3J0RGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkV4cG9ydEFsbERlY2xhcmF0aW9uIj09PW58fCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iPT09bnx8IkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iPT09bikmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRXhwb3J0RGVmYXVsdFNwZWNpZmllcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJFeHBvcnREZWZhdWx0U3BlY2lmaWVyIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNFeHBvcnROYW1lZERlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0V4cG9ydE5hbWVzcGFjZVNwZWNpZmllcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0V4cG9ydFNwZWNpZmllcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJFeHBvcnRTcGVjaWZpZXIiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0V4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkFycmF5RXhwcmVzc2lvbiI9PT1ufHwiQXNzaWdubWVudEV4cHJlc3Npb24iPT09bnx8IkJpbmFyeUV4cHJlc3Npb24iPT09bnx8IkNhbGxFeHByZXNzaW9uIj09PW58fCJDb25kaXRpb25hbEV4cHJlc3Npb24iPT09bnx8IkZ1bmN0aW9uRXhwcmVzc2lvbiI9PT1ufHwiSWRlbnRpZmllciI9PT1ufHwiU3RyaW5nTGl0ZXJhbCI9PT1ufHwiTnVtZXJpY0xpdGVyYWwiPT09bnx8Ik51bGxMaXRlcmFsIj09PW58fCJCb29sZWFuTGl0ZXJhbCI9PT1ufHwiUmVnRXhwTGl0ZXJhbCI9PT1ufHwiTG9naWNhbEV4cHJlc3Npb24iPT09bnx8Ik1lbWJlckV4cHJlc3Npb24iPT09bnx8Ik5ld0V4cHJlc3Npb24iPT09bnx8Ik9iamVjdEV4cHJlc3Npb24iPT09bnx8IlNlcXVlbmNlRXhwcmVzc2lvbiI9PT1ufHwiUGFyZW50aGVzaXplZEV4cHJlc3Npb24iPT09bnx8IlRoaXNFeHByZXNzaW9uIj09PW58fCJVbmFyeUV4cHJlc3Npb24iPT09bnx8IlVwZGF0ZUV4cHJlc3Npb24iPT09bnx8IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIj09PW58fCJDbGFzc0V4cHJlc3Npb24iPT09bnx8Ik1ldGFQcm9wZXJ0eSI9PT1ufHwiU3VwZXIiPT09bnx8IlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiI9PT1ufHwiVGVtcGxhdGVMaXRlcmFsIj09PW58fCJZaWVsZEV4cHJlc3Npb24iPT09bnx8IkF3YWl0RXhwcmVzc2lvbiI9PT1ufHwiSW1wb3J0Ij09PW58fCJCaWdJbnRMaXRlcmFsIj09PW58fCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iPT09bnx8Ik9wdGlvbmFsQ2FsbEV4cHJlc3Npb24iPT09bnx8IlR5cGVDYXN0RXhwcmVzc2lvbiI9PT1ufHwiSlNYRWxlbWVudCI9PT1ufHwiSlNYRnJhZ21lbnQiPT09bnx8IkJpbmRFeHByZXNzaW9uIj09PW58fCJEb0V4cHJlc3Npb24iPT09bnx8IlJlY29yZEV4cHJlc3Npb24iPT09bnx8IlR1cGxlRXhwcmVzc2lvbiI9PT1ufHwiRGVjaW1hbExpdGVyYWwiPT09bnx8Ik1vZHVsZUV4cHJlc3Npb24iPT09bnx8IlRvcGljUmVmZXJlbmNlIj09PW58fCJQaXBlbGluZVRvcGljRXhwcmVzc2lvbiI9PT1ufHwiUGlwZWxpbmVCYXJlRnVuY3Rpb24iPT09bnx8IlBpcGVsaW5lUHJpbWFyeVRvcGljUmVmZXJlbmNlIj09PW58fCJUU0luc3RhbnRpYXRpb25FeHByZXNzaW9uIj09PW58fCJUU0FzRXhwcmVzc2lvbiI9PT1ufHwiVFNTYXRpc2ZpZXNFeHByZXNzaW9uIj09PW58fCJUU1R5cGVBc3NlcnRpb24iPT09bnx8IlRTTm9uTnVsbEV4cHJlc3Npb24iPT09bnx8IlBsYWNlaG9sZGVyIj09PW4mJigiRXhwcmVzc2lvbiI9PT1lLmV4cGVjdGVkTm9kZXx8IklkZW50aWZpZXIiPT09ZS5leHBlY3RlZE5vZGV8fCJTdHJpbmdMaXRlcmFsIj09PWUuZXhwZWN0ZWROb2RlKSkmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRXhwcmVzc2lvblN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJFeHByZXNzaW9uU3RhdGVtZW50Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNFeHByZXNzaW9uV3JhcHBlcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiRXhwcmVzc2lvblN0YXRlbWVudCI9PT1ufHwiUGFyZW50aGVzaXplZEV4cHJlc3Npb24iPT09bnx8IlR5cGVDYXN0RXhwcmVzc2lvbiI9PT1uKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNGaWxlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkZpbGUiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0Zsb3c9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkFueVR5cGVBbm5vdGF0aW9uIj09PW58fCJBcnJheVR5cGVBbm5vdGF0aW9uIj09PW58fCJCb29sZWFuVHlwZUFubm90YXRpb24iPT09bnx8IkJvb2xlYW5MaXRlcmFsVHlwZUFubm90YXRpb24iPT09bnx8Ik51bGxMaXRlcmFsVHlwZUFubm90YXRpb24iPT09bnx8IkNsYXNzSW1wbGVtZW50cyI9PT1ufHwiRGVjbGFyZUNsYXNzIj09PW58fCJEZWNsYXJlRnVuY3Rpb24iPT09bnx8IkRlY2xhcmVJbnRlcmZhY2UiPT09bnx8IkRlY2xhcmVNb2R1bGUiPT09bnx8IkRlY2xhcmVNb2R1bGVFeHBvcnRzIj09PW58fCJEZWNsYXJlVHlwZUFsaWFzIj09PW58fCJEZWNsYXJlT3BhcXVlVHlwZSI9PT1ufHwiRGVjbGFyZVZhcmlhYmxlIj09PW58fCJEZWNsYXJlRXhwb3J0RGVjbGFyYXRpb24iPT09bnx8IkRlY2xhcmVFeHBvcnRBbGxEZWNsYXJhdGlvbiI9PT1ufHwiRGVjbGFyZWRQcmVkaWNhdGUiPT09bnx8IkV4aXN0c1R5cGVBbm5vdGF0aW9uIj09PW58fCJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIj09PW58fCJGdW5jdGlvblR5cGVQYXJhbSI9PT1ufHwiR2VuZXJpY1R5cGVBbm5vdGF0aW9uIj09PW58fCJJbmZlcnJlZFByZWRpY2F0ZSI9PT1ufHwiSW50ZXJmYWNlRXh0ZW5kcyI9PT1ufHwiSW50ZXJmYWNlRGVjbGFyYXRpb24iPT09bnx8IkludGVyZmFjZVR5cGVBbm5vdGF0aW9uIj09PW58fCJJbnRlcnNlY3Rpb25UeXBlQW5ub3RhdGlvbiI9PT1ufHwiTWl4ZWRUeXBlQW5ub3RhdGlvbiI9PT1ufHwiRW1wdHlUeXBlQW5ub3RhdGlvbiI9PT1ufHwiTnVsbGFibGVUeXBlQW5ub3RhdGlvbiI9PT1ufHwiTnVtYmVyTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIj09PW58fCJOdW1iZXJUeXBlQW5ub3RhdGlvbiI9PT1ufHwiT2JqZWN0VHlwZUFubm90YXRpb24iPT09bnx8Ik9iamVjdFR5cGVJbnRlcm5hbFNsb3QiPT09bnx8Ik9iamVjdFR5cGVDYWxsUHJvcGVydHkiPT09bnx8Ik9iamVjdFR5cGVJbmRleGVyIj09PW58fCJPYmplY3RUeXBlUHJvcGVydHkiPT09bnx8Ik9iamVjdFR5cGVTcHJlYWRQcm9wZXJ0eSI9PT1ufHwiT3BhcXVlVHlwZSI9PT1ufHwiUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIiPT09bnx8IlN0cmluZ0xpdGVyYWxUeXBlQW5ub3RhdGlvbiI9PT1ufHwiU3RyaW5nVHlwZUFubm90YXRpb24iPT09bnx8IlN5bWJvbFR5cGVBbm5vdGF0aW9uIj09PW58fCJUaGlzVHlwZUFubm90YXRpb24iPT09bnx8IlR1cGxlVHlwZUFubm90YXRpb24iPT09bnx8IlR5cGVvZlR5cGVBbm5vdGF0aW9uIj09PW58fCJUeXBlQWxpYXMiPT09bnx8IlR5cGVBbm5vdGF0aW9uIj09PW58fCJUeXBlQ2FzdEV4cHJlc3Npb24iPT09bnx8IlR5cGVQYXJhbWV0ZXIiPT09bnx8IlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiI9PT1ufHwiVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iPT09bnx8IlVuaW9uVHlwZUFubm90YXRpb24iPT09bnx8IlZhcmlhbmNlIj09PW58fCJWb2lkVHlwZUFubm90YXRpb24iPT09bnx8IkVudW1EZWNsYXJhdGlvbiI9PT1ufHwiRW51bUJvb2xlYW5Cb2R5Ij09PW58fCJFbnVtTnVtYmVyQm9keSI9PT1ufHwiRW51bVN0cmluZ0JvZHkiPT09bnx8IkVudW1TeW1ib2xCb2R5Ij09PW58fCJFbnVtQm9vbGVhbk1lbWJlciI9PT1ufHwiRW51bU51bWJlck1lbWJlciI9PT1ufHwiRW51bVN0cmluZ01lbWJlciI9PT1ufHwiRW51bURlZmF1bHRlZE1lbWJlciI9PT1ufHwiSW5kZXhlZEFjY2Vzc1R5cGUiPT09bnx8Ik9wdGlvbmFsSW5kZXhlZEFjY2Vzc1R5cGUiPT09bikmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRmxvd0Jhc2VBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJBbnlUeXBlQW5ub3RhdGlvbiI9PT1ufHwiQm9vbGVhblR5cGVBbm5vdGF0aW9uIj09PW58fCJOdWxsTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIj09PW58fCJNaXhlZFR5cGVBbm5vdGF0aW9uIj09PW58fCJFbXB0eVR5cGVBbm5vdGF0aW9uIj09PW58fCJOdW1iZXJUeXBlQW5ub3RhdGlvbiI9PT1ufHwiU3RyaW5nVHlwZUFubm90YXRpb24iPT09bnx8IlN5bWJvbFR5cGVBbm5vdGF0aW9uIj09PW58fCJUaGlzVHlwZUFubm90YXRpb24iPT09bnx8IlZvaWRUeXBlQW5ub3RhdGlvbiI9PT1uKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNGbG93RGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkRlY2xhcmVDbGFzcyI9PT1ufHwiRGVjbGFyZUZ1bmN0aW9uIj09PW58fCJEZWNsYXJlSW50ZXJmYWNlIj09PW58fCJEZWNsYXJlTW9kdWxlIj09PW58fCJEZWNsYXJlTW9kdWxlRXhwb3J0cyI9PT1ufHwiRGVjbGFyZVR5cGVBbGlhcyI9PT1ufHwiRGVjbGFyZU9wYXF1ZVR5cGUiPT09bnx8IkRlY2xhcmVWYXJpYWJsZSI9PT1ufHwiRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uIj09PW58fCJEZWNsYXJlRXhwb3J0QWxsRGVjbGFyYXRpb24iPT09bnx8IkludGVyZmFjZURlY2xhcmF0aW9uIj09PW58fCJPcGFxdWVUeXBlIj09PW58fCJUeXBlQWxpYXMiPT09bikmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRmxvd1ByZWRpY2F0ZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiRGVjbGFyZWRQcmVkaWNhdGUiPT09bnx8IkluZmVycmVkUHJlZGljYXRlIj09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0Zsb3dUeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJBbnlUeXBlQW5ub3RhdGlvbiI9PT1ufHwiQXJyYXlUeXBlQW5ub3RhdGlvbiI9PT1ufHwiQm9vbGVhblR5cGVBbm5vdGF0aW9uIj09PW58fCJCb29sZWFuTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIj09PW58fCJOdWxsTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIj09PW58fCJFeGlzdHNUeXBlQW5ub3RhdGlvbiI9PT1ufHwiRnVuY3Rpb25UeXBlQW5ub3RhdGlvbiI9PT1ufHwiR2VuZXJpY1R5cGVBbm5vdGF0aW9uIj09PW58fCJJbnRlcmZhY2VUeXBlQW5ub3RhdGlvbiI9PT1ufHwiSW50ZXJzZWN0aW9uVHlwZUFubm90YXRpb24iPT09bnx8Ik1peGVkVHlwZUFubm90YXRpb24iPT09bnx8IkVtcHR5VHlwZUFubm90YXRpb24iPT09bnx8Ik51bGxhYmxlVHlwZUFubm90YXRpb24iPT09bnx8Ik51bWJlckxpdGVyYWxUeXBlQW5ub3RhdGlvbiI9PT1ufHwiTnVtYmVyVHlwZUFubm90YXRpb24iPT09bnx8Ik9iamVjdFR5cGVBbm5vdGF0aW9uIj09PW58fCJTdHJpbmdMaXRlcmFsVHlwZUFubm90YXRpb24iPT09bnx8IlN0cmluZ1R5cGVBbm5vdGF0aW9uIj09PW58fCJTeW1ib2xUeXBlQW5ub3RhdGlvbiI9PT1ufHwiVGhpc1R5cGVBbm5vdGF0aW9uIj09PW58fCJUdXBsZVR5cGVBbm5vdGF0aW9uIj09PW58fCJUeXBlb2ZUeXBlQW5ub3RhdGlvbiI9PT1ufHwiVW5pb25UeXBlQW5ub3RhdGlvbiI9PT1ufHwiVm9pZFR5cGVBbm5vdGF0aW9uIj09PW58fCJJbmRleGVkQWNjZXNzVHlwZSI9PT1ufHwiT3B0aW9uYWxJbmRleGVkQWNjZXNzVHlwZSI9PT1uKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNGb3I9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkZvckluU3RhdGVtZW50Ij09PW58fCJGb3JTdGF0ZW1lbnQiPT09bnx8IkZvck9mU3RhdGVtZW50Ij09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0ZvckluU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkZvckluU3RhdGVtZW50Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNGb3JPZlN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJGb3JPZlN0YXRlbWVudCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRm9yU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkZvclN0YXRlbWVudCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRm9yWFN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiRm9ySW5TdGF0ZW1lbnQiPT09bnx8IkZvck9mU3RhdGVtZW50Ij09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0Z1bmN0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJGdW5jdGlvbkRlY2xhcmF0aW9uIj09PW58fCJGdW5jdGlvbkV4cHJlc3Npb24iPT09bnx8Ik9iamVjdE1ldGhvZCI9PT1ufHwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iPT09bnx8IkNsYXNzTWV0aG9kIj09PW58fCJDbGFzc1ByaXZhdGVNZXRob2QiPT09bikmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzRnVuY3Rpb25EZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJGdW5jdGlvbkRlY2xhcmF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNGdW5jdGlvbkV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iRnVuY3Rpb25FeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNGdW5jdGlvblBhcmVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiRnVuY3Rpb25EZWNsYXJhdGlvbiI9PT1ufHwiRnVuY3Rpb25FeHByZXNzaW9uIj09PW58fCJPYmplY3RNZXRob2QiPT09bnx8IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIj09PW58fCJDbGFzc01ldGhvZCI9PT1ufHwiQ2xhc3NQcml2YXRlTWV0aG9kIj09PW58fCJTdGF0aWNCbG9jayI9PT1ufHwiVFNNb2R1bGVCbG9jayI9PT1uKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNGdW5jdGlvblR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkZ1bmN0aW9uVHlwZUFubm90YXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0Z1bmN0aW9uVHlwZVBhcmFtPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkZ1bmN0aW9uVHlwZVBhcmFtIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNHZW5lcmljVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iR2VuZXJpY1R5cGVBbm5vdGF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNJZGVudGlmaWVyPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIklkZW50aWZpZXIiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0lmU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIklmU3RhdGVtZW50Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNJbW11dGFibGU9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIlN0cmluZ0xpdGVyYWwiPT09bnx8Ik51bWVyaWNMaXRlcmFsIj09PW58fCJOdWxsTGl0ZXJhbCI9PT1ufHwiQm9vbGVhbkxpdGVyYWwiPT09bnx8IkJpZ0ludExpdGVyYWwiPT09bnx8IkpTWEF0dHJpYnV0ZSI9PT1ufHwiSlNYQ2xvc2luZ0VsZW1lbnQiPT09bnx8IkpTWEVsZW1lbnQiPT09bnx8IkpTWEV4cHJlc3Npb25Db250YWluZXIiPT09bnx8IkpTWFNwcmVhZENoaWxkIj09PW58fCJKU1hPcGVuaW5nRWxlbWVudCI9PT1ufHwiSlNYVGV4dCI9PT1ufHwiSlNYRnJhZ21lbnQiPT09bnx8IkpTWE9wZW5pbmdGcmFnbWVudCI9PT1ufHwiSlNYQ2xvc2luZ0ZyYWdtZW50Ij09PW58fCJEZWNpbWFsTGl0ZXJhbCI9PT1ufHwiUGxhY2Vob2xkZXIiPT09biYmIlN0cmluZ0xpdGVyYWwiPT09ZS5leHBlY3RlZE5vZGUpJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0ltcG9ydD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJJbXBvcnQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0ltcG9ydEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJJbXBvcnRBdHRyaWJ1dGUiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0ltcG9ydERlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkltcG9ydERlY2xhcmF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNJbXBvcnREZWZhdWx0U3BlY2lmaWVyPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkltcG9ydERlZmF1bHRTcGVjaWZpZXIiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0ltcG9ydE9yRXhwb3J0RGVjbGFyYXRpb249YSx0LmlzSW1wb3J0U3BlY2lmaWVyPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkltcG9ydFNwZWNpZmllciI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzSW5kZXhlZEFjY2Vzc1R5cGU9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iSW5kZXhlZEFjY2Vzc1R5cGUiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0luZmVycmVkUHJlZGljYXRlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkluZmVycmVkUHJlZGljYXRlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNJbnRlcmZhY2VEZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJJbnRlcmZhY2VEZWNsYXJhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzSW50ZXJmYWNlRXh0ZW5kcz1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJJbnRlcmZhY2VFeHRlbmRzIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNJbnRlcmZhY2VUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJJbnRlcmZhY2VUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzSW50ZXJwcmV0ZXJEaXJlY3RpdmU9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iSW50ZXJwcmV0ZXJEaXJlY3RpdmUiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0ludGVyc2VjdGlvblR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkludGVyc2VjdGlvblR5cGVBbm5vdGF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNKU1g9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkpTWEF0dHJpYnV0ZSI9PT1ufHwiSlNYQ2xvc2luZ0VsZW1lbnQiPT09bnx8IkpTWEVsZW1lbnQiPT09bnx8IkpTWEVtcHR5RXhwcmVzc2lvbiI9PT1ufHwiSlNYRXhwcmVzc2lvbkNvbnRhaW5lciI9PT1ufHwiSlNYU3ByZWFkQ2hpbGQiPT09bnx8IkpTWElkZW50aWZpZXIiPT09bnx8IkpTWE1lbWJlckV4cHJlc3Npb24iPT09bnx8IkpTWE5hbWVzcGFjZWROYW1lIj09PW58fCJKU1hPcGVuaW5nRWxlbWVudCI9PT1ufHwiSlNYU3ByZWFkQXR0cmlidXRlIj09PW58fCJKU1hUZXh0Ij09PW58fCJKU1hGcmFnbWVudCI9PT1ufHwiSlNYT3BlbmluZ0ZyYWdtZW50Ij09PW58fCJKU1hDbG9zaW5nRnJhZ21lbnQiPT09bikmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzSlNYQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkpTWEF0dHJpYnV0ZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzSlNYQ2xvc2luZ0VsZW1lbnQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iSlNYQ2xvc2luZ0VsZW1lbnQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0pTWENsb3NpbmdGcmFnbWVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJKU1hDbG9zaW5nRnJhZ21lbnQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0pTWEVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iSlNYRWxlbWVudCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzSlNYRW1wdHlFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkpTWEVtcHR5RXhwcmVzc2lvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzSlNYRXhwcmVzc2lvbkNvbnRhaW5lcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJKU1hFeHByZXNzaW9uQ29udGFpbmVyIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNKU1hGcmFnbWVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJKU1hGcmFnbWVudCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzSlNYSWRlbnRpZmllcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJKU1hJZGVudGlmaWVyIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNKU1hNZW1iZXJFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkpTWE1lbWJlckV4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0pTWE5hbWVzcGFjZWROYW1lPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkpTWE5hbWVzcGFjZWROYW1lIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNKU1hPcGVuaW5nRWxlbWVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJKU1hPcGVuaW5nRWxlbWVudCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzSlNYT3BlbmluZ0ZyYWdtZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkpTWE9wZW5pbmdGcmFnbWVudCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzSlNYU3ByZWFkQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkpTWFNwcmVhZEF0dHJpYnV0ZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzSlNYU3ByZWFkQ2hpbGQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iSlNYU3ByZWFkQ2hpbGQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0pTWFRleHQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iSlNYVGV4dCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzTFZhbD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiSWRlbnRpZmllciI9PT1ufHwiTWVtYmVyRXhwcmVzc2lvbiI9PT1ufHwiUmVzdEVsZW1lbnQiPT09bnx8IkFzc2lnbm1lbnRQYXR0ZXJuIj09PW58fCJBcnJheVBhdHRlcm4iPT09bnx8Ik9iamVjdFBhdHRlcm4iPT09bnx8IlRTUGFyYW1ldGVyUHJvcGVydHkiPT09bnx8IlRTQXNFeHByZXNzaW9uIj09PW58fCJUU1NhdGlzZmllc0V4cHJlc3Npb24iPT09bnx8IlRTVHlwZUFzc2VydGlvbiI9PT1ufHwiVFNOb25OdWxsRXhwcmVzc2lvbiI9PT1ufHwiUGxhY2Vob2xkZXIiPT09biYmKCJQYXR0ZXJuIj09PWUuZXhwZWN0ZWROb2RlfHwiSWRlbnRpZmllciI9PT1lLmV4cGVjdGVkTm9kZSkpJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0xhYmVsZWRTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iTGFiZWxlZFN0YXRlbWVudCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzTGl0ZXJhbD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiU3RyaW5nTGl0ZXJhbCI9PT1ufHwiTnVtZXJpY0xpdGVyYWwiPT09bnx8Ik51bGxMaXRlcmFsIj09PW58fCJCb29sZWFuTGl0ZXJhbCI9PT1ufHwiUmVnRXhwTGl0ZXJhbCI9PT1ufHwiVGVtcGxhdGVMaXRlcmFsIj09PW58fCJCaWdJbnRMaXRlcmFsIj09PW58fCJEZWNpbWFsTGl0ZXJhbCI9PT1ufHwiUGxhY2Vob2xkZXIiPT09biYmIlN0cmluZ0xpdGVyYWwiPT09ZS5leHBlY3RlZE5vZGUpJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc0xvZ2ljYWxFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIkxvZ2ljYWxFeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNMb29wPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJEb1doaWxlU3RhdGVtZW50Ij09PW58fCJGb3JJblN0YXRlbWVudCI9PT1ufHwiRm9yU3RhdGVtZW50Ij09PW58fCJXaGlsZVN0YXRlbWVudCI9PT1ufHwiRm9yT2ZTdGF0ZW1lbnQiPT09bikmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzTWVtYmVyRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJNZW1iZXJFeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNNZXRhUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iTWV0YVByb3BlcnR5Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNNZXRob2Q9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIk9iamVjdE1ldGhvZCI9PT1ufHwiQ2xhc3NNZXRob2QiPT09bnx8IkNsYXNzUHJpdmF0ZU1ldGhvZCI9PT1uKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNNaXNjZWxsYW5lb3VzPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJOb29wIj09PW58fCJQbGFjZWhvbGRlciI9PT1ufHwiVjhJbnRyaW5zaWNJZGVudGlmaWVyIj09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc01peGVkVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iTWl4ZWRUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzTW9kdWxlRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxpLmRlZmF1bHQpKCJpc01vZHVsZURlY2xhcmF0aW9uIiwiaXNJbXBvcnRPckV4cG9ydERlY2xhcmF0aW9uIiksYShlLHQpfSx0LmlzTW9kdWxlRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJNb2R1bGVFeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNNb2R1bGVTcGVjaWZpZXI9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkV4cG9ydFNwZWNpZmllciI9PT1ufHwiSW1wb3J0RGVmYXVsdFNwZWNpZmllciI9PT1ufHwiSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyIj09PW58fCJJbXBvcnRTcGVjaWZpZXIiPT09bnx8IkV4cG9ydE5hbWVzcGFjZVNwZWNpZmllciI9PT1ufHwiRXhwb3J0RGVmYXVsdFNwZWNpZmllciI9PT1uKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNOZXdFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIk5ld0V4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc05vb3A9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iTm9vcCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzTnVsbExpdGVyYWw9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iTnVsbExpdGVyYWwiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc051bGxMaXRlcmFsVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iTnVsbExpdGVyYWxUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzTnVsbGFibGVUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJOdWxsYWJsZVR5cGVBbm5vdGF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNOdW1iZXJMaXRlcmFsPWZ1bmN0aW9uKGUsdCl7aWYoKDAsaS5kZWZhdWx0KSgiaXNOdW1iZXJMaXRlcmFsIiwiaXNOdW1lcmljTGl0ZXJhbCIpLCFlKXJldHVybiExO3JldHVybiJOdW1iZXJMaXRlcmFsIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNOdW1iZXJMaXRlcmFsVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iTnVtYmVyTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNOdW1iZXJUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJOdW1iZXJUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzTnVtZXJpY0xpdGVyYWw9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iTnVtZXJpY0xpdGVyYWwiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc09iamVjdEV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iT2JqZWN0RXhwcmVzc2lvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzT2JqZWN0TWVtYmVyPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJPYmplY3RNZXRob2QiPT09bnx8Ik9iamVjdFByb3BlcnR5Ij09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc09iamVjdE1ldGhvZD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJPYmplY3RNZXRob2QiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc09iamVjdFBhdHRlcm49ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iT2JqZWN0UGF0dGVybiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzT2JqZWN0UHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iT2JqZWN0UHJvcGVydHkiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc09iamVjdFR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIk9iamVjdFR5cGVBbm5vdGF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNPYmplY3RUeXBlQ2FsbFByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIk9iamVjdFR5cGVDYWxsUHJvcGVydHkiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc09iamVjdFR5cGVJbmRleGVyPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIk9iamVjdFR5cGVJbmRleGVyIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNPYmplY3RUeXBlSW50ZXJuYWxTbG90PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIk9iamVjdFR5cGVJbnRlcm5hbFNsb3QiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc09iamVjdFR5cGVQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJPYmplY3RUeXBlUHJvcGVydHkiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc09iamVjdFR5cGVTcHJlYWRQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJPYmplY3RUeXBlU3ByZWFkUHJvcGVydHkiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc09wYXF1ZVR5cGU9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iT3BhcXVlVHlwZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzT3B0aW9uYWxDYWxsRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJPcHRpb25hbENhbGxFeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNPcHRpb25hbEluZGV4ZWRBY2Nlc3NUeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIk9wdGlvbmFsSW5kZXhlZEFjY2Vzc1R5cGUiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc09wdGlvbmFsTWVtYmVyRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1BhcmVudGhlc2l6ZWRFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNQYXR0ZXJuPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJBc3NpZ25tZW50UGF0dGVybiI9PT1ufHwiQXJyYXlQYXR0ZXJuIj09PW58fCJPYmplY3RQYXR0ZXJuIj09PW58fCJQbGFjZWhvbGRlciI9PT1uJiYiUGF0dGVybiI9PT1lLmV4cGVjdGVkTm9kZSkmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzUGF0dGVybkxpa2U9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIklkZW50aWZpZXIiPT09bnx8IlJlc3RFbGVtZW50Ij09PW58fCJBc3NpZ25tZW50UGF0dGVybiI9PT1ufHwiQXJyYXlQYXR0ZXJuIj09PW58fCJPYmplY3RQYXR0ZXJuIj09PW58fCJUU0FzRXhwcmVzc2lvbiI9PT1ufHwiVFNTYXRpc2ZpZXNFeHByZXNzaW9uIj09PW58fCJUU1R5cGVBc3NlcnRpb24iPT09bnx8IlRTTm9uTnVsbEV4cHJlc3Npb24iPT09bnx8IlBsYWNlaG9sZGVyIj09PW4mJigiUGF0dGVybiI9PT1lLmV4cGVjdGVkTm9kZXx8IklkZW50aWZpZXIiPT09ZS5leHBlY3RlZE5vZGUpKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNQaXBlbGluZUJhcmVGdW5jdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJQaXBlbGluZUJhcmVGdW5jdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzUGlwZWxpbmVQcmltYXJ5VG9waWNSZWZlcmVuY2U9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iUGlwZWxpbmVQcmltYXJ5VG9waWNSZWZlcmVuY2UiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1BpcGVsaW5lVG9waWNFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlBpcGVsaW5lVG9waWNFeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNQbGFjZWhvbGRlcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJQbGFjZWhvbGRlciI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzUHJpdmF0ZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiQ2xhc3NQcml2YXRlUHJvcGVydHkiPT09bnx8IkNsYXNzUHJpdmF0ZU1ldGhvZCI9PT1ufHwiUHJpdmF0ZU5hbWUiPT09bikmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzUHJpdmF0ZU5hbWU9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iUHJpdmF0ZU5hbWUiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1Byb2dyYW09ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iUHJvZ3JhbSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIk9iamVjdFByb3BlcnR5Ij09PW58fCJDbGFzc1Byb3BlcnR5Ij09PW58fCJDbGFzc0FjY2Vzc29yUHJvcGVydHkiPT09bnx8IkNsYXNzUHJpdmF0ZVByb3BlcnR5Ij09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1B1cmVpc2g9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkZ1bmN0aW9uRGVjbGFyYXRpb24iPT09bnx8IkZ1bmN0aW9uRXhwcmVzc2lvbiI9PT1ufHwiU3RyaW5nTGl0ZXJhbCI9PT1ufHwiTnVtZXJpY0xpdGVyYWwiPT09bnx8Ik51bGxMaXRlcmFsIj09PW58fCJCb29sZWFuTGl0ZXJhbCI9PT1ufHwiUmVnRXhwTGl0ZXJhbCI9PT1ufHwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iPT09bnx8IkJpZ0ludExpdGVyYWwiPT09bnx8IkRlY2ltYWxMaXRlcmFsIj09PW58fCJQbGFjZWhvbGRlciI9PT1uJiYiU3RyaW5nTGl0ZXJhbCI9PT1lLmV4cGVjdGVkTm9kZSkmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzUXVhbGlmaWVkVHlwZUlkZW50aWZpZXI9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1JlY29yZEV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iUmVjb3JkRXhwcmVzc2lvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzUmVnRXhwTGl0ZXJhbD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJSZWdFeHBMaXRlcmFsIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNSZWdleExpdGVyYWw9ZnVuY3Rpb24oZSx0KXtpZigoMCxpLmRlZmF1bHQpKCJpc1JlZ2V4TGl0ZXJhbCIsImlzUmVnRXhwTGl0ZXJhbCIpLCFlKXJldHVybiExO3JldHVybiJSZWdleExpdGVyYWwiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1Jlc3RFbGVtZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlJlc3RFbGVtZW50Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNSZXN0UHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtpZigoMCxpLmRlZmF1bHQpKCJpc1Jlc3RQcm9wZXJ0eSIsImlzUmVzdEVsZW1lbnQiKSwhZSlyZXR1cm4hMTtyZXR1cm4iUmVzdFByb3BlcnR5Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNSZXR1cm5TdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iUmV0dXJuU3RhdGVtZW50Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNTY29wYWJsZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiQmxvY2tTdGF0ZW1lbnQiPT09bnx8IkNhdGNoQ2xhdXNlIj09PW58fCJEb1doaWxlU3RhdGVtZW50Ij09PW58fCJGb3JJblN0YXRlbWVudCI9PT1ufHwiRm9yU3RhdGVtZW50Ij09PW58fCJGdW5jdGlvbkRlY2xhcmF0aW9uIj09PW58fCJGdW5jdGlvbkV4cHJlc3Npb24iPT09bnx8IlByb2dyYW0iPT09bnx8Ik9iamVjdE1ldGhvZCI9PT1ufHwiU3dpdGNoU3RhdGVtZW50Ij09PW58fCJXaGlsZVN0YXRlbWVudCI9PT1ufHwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iPT09bnx8IkNsYXNzRXhwcmVzc2lvbiI9PT1ufHwiQ2xhc3NEZWNsYXJhdGlvbiI9PT1ufHwiRm9yT2ZTdGF0ZW1lbnQiPT09bnx8IkNsYXNzTWV0aG9kIj09PW58fCJDbGFzc1ByaXZhdGVNZXRob2QiPT09bnx8IlN0YXRpY0Jsb2NrIj09PW58fCJUU01vZHVsZUJsb2NrIj09PW58fCJQbGFjZWhvbGRlciI9PT1uJiYiQmxvY2tTdGF0ZW1lbnQiPT09ZS5leHBlY3RlZE5vZGUpJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1NlcXVlbmNlRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJTZXF1ZW5jZUV4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1NwcmVhZEVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iU3ByZWFkRWxlbWVudCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzU3ByZWFkUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtpZigoMCxpLmRlZmF1bHQpKCJpc1NwcmVhZFByb3BlcnR5IiwiaXNTcHJlYWRFbGVtZW50IiksIWUpcmV0dXJuITE7cmV0dXJuIlNwcmVhZFByb3BlcnR5Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNTdGFuZGFyZGl6ZWQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkFycmF5RXhwcmVzc2lvbiI9PT1ufHwiQXNzaWdubWVudEV4cHJlc3Npb24iPT09bnx8IkJpbmFyeUV4cHJlc3Npb24iPT09bnx8IkludGVycHJldGVyRGlyZWN0aXZlIj09PW58fCJEaXJlY3RpdmUiPT09bnx8IkRpcmVjdGl2ZUxpdGVyYWwiPT09bnx8IkJsb2NrU3RhdGVtZW50Ij09PW58fCJCcmVha1N0YXRlbWVudCI9PT1ufHwiQ2FsbEV4cHJlc3Npb24iPT09bnx8IkNhdGNoQ2xhdXNlIj09PW58fCJDb25kaXRpb25hbEV4cHJlc3Npb24iPT09bnx8IkNvbnRpbnVlU3RhdGVtZW50Ij09PW58fCJEZWJ1Z2dlclN0YXRlbWVudCI9PT1ufHwiRG9XaGlsZVN0YXRlbWVudCI9PT1ufHwiRW1wdHlTdGF0ZW1lbnQiPT09bnx8IkV4cHJlc3Npb25TdGF0ZW1lbnQiPT09bnx8IkZpbGUiPT09bnx8IkZvckluU3RhdGVtZW50Ij09PW58fCJGb3JTdGF0ZW1lbnQiPT09bnx8IkZ1bmN0aW9uRGVjbGFyYXRpb24iPT09bnx8IkZ1bmN0aW9uRXhwcmVzc2lvbiI9PT1ufHwiSWRlbnRpZmllciI9PT1ufHwiSWZTdGF0ZW1lbnQiPT09bnx8IkxhYmVsZWRTdGF0ZW1lbnQiPT09bnx8IlN0cmluZ0xpdGVyYWwiPT09bnx8Ik51bWVyaWNMaXRlcmFsIj09PW58fCJOdWxsTGl0ZXJhbCI9PT1ufHwiQm9vbGVhbkxpdGVyYWwiPT09bnx8IlJlZ0V4cExpdGVyYWwiPT09bnx8IkxvZ2ljYWxFeHByZXNzaW9uIj09PW58fCJNZW1iZXJFeHByZXNzaW9uIj09PW58fCJOZXdFeHByZXNzaW9uIj09PW58fCJQcm9ncmFtIj09PW58fCJPYmplY3RFeHByZXNzaW9uIj09PW58fCJPYmplY3RNZXRob2QiPT09bnx8Ik9iamVjdFByb3BlcnR5Ij09PW58fCJSZXN0RWxlbWVudCI9PT1ufHwiUmV0dXJuU3RhdGVtZW50Ij09PW58fCJTZXF1ZW5jZUV4cHJlc3Npb24iPT09bnx8IlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uIj09PW58fCJTd2l0Y2hDYXNlIj09PW58fCJTd2l0Y2hTdGF0ZW1lbnQiPT09bnx8IlRoaXNFeHByZXNzaW9uIj09PW58fCJUaHJvd1N0YXRlbWVudCI9PT1ufHwiVHJ5U3RhdGVtZW50Ij09PW58fCJVbmFyeUV4cHJlc3Npb24iPT09bnx8IlVwZGF0ZUV4cHJlc3Npb24iPT09bnx8IlZhcmlhYmxlRGVjbGFyYXRpb24iPT09bnx8IlZhcmlhYmxlRGVjbGFyYXRvciI9PT1ufHwiV2hpbGVTdGF0ZW1lbnQiPT09bnx8IldpdGhTdGF0ZW1lbnQiPT09bnx8IkFzc2lnbm1lbnRQYXR0ZXJuIj09PW58fCJBcnJheVBhdHRlcm4iPT09bnx8IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIj09PW58fCJDbGFzc0JvZHkiPT09bnx8IkNsYXNzRXhwcmVzc2lvbiI9PT1ufHwiQ2xhc3NEZWNsYXJhdGlvbiI9PT1ufHwiRXhwb3J0QWxsRGVjbGFyYXRpb24iPT09bnx8IkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiI9PT1ufHwiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiI9PT1ufHwiRXhwb3J0U3BlY2lmaWVyIj09PW58fCJGb3JPZlN0YXRlbWVudCI9PT1ufHwiSW1wb3J0RGVjbGFyYXRpb24iPT09bnx8IkltcG9ydERlZmF1bHRTcGVjaWZpZXIiPT09bnx8IkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciI9PT1ufHwiSW1wb3J0U3BlY2lmaWVyIj09PW58fCJNZXRhUHJvcGVydHkiPT09bnx8IkNsYXNzTWV0aG9kIj09PW58fCJPYmplY3RQYXR0ZXJuIj09PW58fCJTcHJlYWRFbGVtZW50Ij09PW58fCJTdXBlciI9PT1ufHwiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uIj09PW58fCJUZW1wbGF0ZUVsZW1lbnQiPT09bnx8IlRlbXBsYXRlTGl0ZXJhbCI9PT1ufHwiWWllbGRFeHByZXNzaW9uIj09PW58fCJBd2FpdEV4cHJlc3Npb24iPT09bnx8IkltcG9ydCI9PT1ufHwiQmlnSW50TGl0ZXJhbCI9PT1ufHwiRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyIj09PW58fCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iPT09bnx8Ik9wdGlvbmFsQ2FsbEV4cHJlc3Npb24iPT09bnx8IkNsYXNzUHJvcGVydHkiPT09bnx8IkNsYXNzQWNjZXNzb3JQcm9wZXJ0eSI9PT1ufHwiQ2xhc3NQcml2YXRlUHJvcGVydHkiPT09bnx8IkNsYXNzUHJpdmF0ZU1ldGhvZCI9PT1ufHwiUHJpdmF0ZU5hbWUiPT09bnx8IlN0YXRpY0Jsb2NrIj09PW58fCJQbGFjZWhvbGRlciI9PT1uJiYoIklkZW50aWZpZXIiPT09ZS5leHBlY3RlZE5vZGV8fCJTdHJpbmdMaXRlcmFsIj09PWUuZXhwZWN0ZWROb2RlfHwiQmxvY2tTdGF0ZW1lbnQiPT09ZS5leHBlY3RlZE5vZGV8fCJDbGFzc0JvZHkiPT09ZS5leHBlY3RlZE5vZGUpKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkJsb2NrU3RhdGVtZW50Ij09PW58fCJCcmVha1N0YXRlbWVudCI9PT1ufHwiQ29udGludWVTdGF0ZW1lbnQiPT09bnx8IkRlYnVnZ2VyU3RhdGVtZW50Ij09PW58fCJEb1doaWxlU3RhdGVtZW50Ij09PW58fCJFbXB0eVN0YXRlbWVudCI9PT1ufHwiRXhwcmVzc2lvblN0YXRlbWVudCI9PT1ufHwiRm9ySW5TdGF0ZW1lbnQiPT09bnx8IkZvclN0YXRlbWVudCI9PT1ufHwiRnVuY3Rpb25EZWNsYXJhdGlvbiI9PT1ufHwiSWZTdGF0ZW1lbnQiPT09bnx8IkxhYmVsZWRTdGF0ZW1lbnQiPT09bnx8IlJldHVyblN0YXRlbWVudCI9PT1ufHwiU3dpdGNoU3RhdGVtZW50Ij09PW58fCJUaHJvd1N0YXRlbWVudCI9PT1ufHwiVHJ5U3RhdGVtZW50Ij09PW58fCJWYXJpYWJsZURlY2xhcmF0aW9uIj09PW58fCJXaGlsZVN0YXRlbWVudCI9PT1ufHwiV2l0aFN0YXRlbWVudCI9PT1ufHwiQ2xhc3NEZWNsYXJhdGlvbiI9PT1ufHwiRXhwb3J0QWxsRGVjbGFyYXRpb24iPT09bnx8IkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiI9PT1ufHwiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiI9PT1ufHwiRm9yT2ZTdGF0ZW1lbnQiPT09bnx8IkltcG9ydERlY2xhcmF0aW9uIj09PW58fCJEZWNsYXJlQ2xhc3MiPT09bnx8IkRlY2xhcmVGdW5jdGlvbiI9PT1ufHwiRGVjbGFyZUludGVyZmFjZSI9PT1ufHwiRGVjbGFyZU1vZHVsZSI9PT1ufHwiRGVjbGFyZU1vZHVsZUV4cG9ydHMiPT09bnx8IkRlY2xhcmVUeXBlQWxpYXMiPT09bnx8IkRlY2xhcmVPcGFxdWVUeXBlIj09PW58fCJEZWNsYXJlVmFyaWFibGUiPT09bnx8IkRlY2xhcmVFeHBvcnREZWNsYXJhdGlvbiI9PT1ufHwiRGVjbGFyZUV4cG9ydEFsbERlY2xhcmF0aW9uIj09PW58fCJJbnRlcmZhY2VEZWNsYXJhdGlvbiI9PT1ufHwiT3BhcXVlVHlwZSI9PT1ufHwiVHlwZUFsaWFzIj09PW58fCJFbnVtRGVjbGFyYXRpb24iPT09bnx8IlRTRGVjbGFyZUZ1bmN0aW9uIj09PW58fCJUU0ludGVyZmFjZURlY2xhcmF0aW9uIj09PW58fCJUU1R5cGVBbGlhc0RlY2xhcmF0aW9uIj09PW58fCJUU0VudW1EZWNsYXJhdGlvbiI9PT1ufHwiVFNNb2R1bGVEZWNsYXJhdGlvbiI9PT1ufHwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiI9PT1ufHwiVFNFeHBvcnRBc3NpZ25tZW50Ij09PW58fCJUU05hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uIj09PW58fCJQbGFjZWhvbGRlciI9PT1uJiYoIlN0YXRlbWVudCI9PT1lLmV4cGVjdGVkTm9kZXx8IkRlY2xhcmF0aW9uIj09PWUuZXhwZWN0ZWROb2RlfHwiQmxvY2tTdGF0ZW1lbnQiPT09ZS5leHBlY3RlZE5vZGUpKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNTdGF0aWNCbG9jaz1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJTdGF0aWNCbG9jayI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzU3RyaW5nTGl0ZXJhbD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJTdHJpbmdMaXRlcmFsIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNTdHJpbmdMaXRlcmFsVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iU3RyaW5nTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNTdHJpbmdUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJTdHJpbmdUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzU3VwZXI9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iU3VwZXIiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1N3aXRjaENhc2U9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iU3dpdGNoQ2FzZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzU3dpdGNoU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlN3aXRjaFN0YXRlbWVudCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzU3ltYm9sVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iU3ltYm9sVHlwZUFubm90YXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTQW55S2V5d29yZD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU0FueUtleXdvcmQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTQXJyYXlUeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTQXJyYXlUeXBlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU0FzRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU0FzRXhwcmVzc2lvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNCYXNlVHlwZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiVFNBbnlLZXl3b3JkIj09PW58fCJUU0Jvb2xlYW5LZXl3b3JkIj09PW58fCJUU0JpZ0ludEtleXdvcmQiPT09bnx8IlRTSW50cmluc2ljS2V5d29yZCI9PT1ufHwiVFNOZXZlcktleXdvcmQiPT09bnx8IlRTTnVsbEtleXdvcmQiPT09bnx8IlRTTnVtYmVyS2V5d29yZCI9PT1ufHwiVFNPYmplY3RLZXl3b3JkIj09PW58fCJUU1N0cmluZ0tleXdvcmQiPT09bnx8IlRTU3ltYm9sS2V5d29yZCI9PT1ufHwiVFNVbmRlZmluZWRLZXl3b3JkIj09PW58fCJUU1Vua25vd25LZXl3b3JkIj09PW58fCJUU1ZvaWRLZXl3b3JkIj09PW58fCJUU1RoaXNUeXBlIj09PW58fCJUU0xpdGVyYWxUeXBlIj09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTQmlnSW50S2V5d29yZD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU0JpZ0ludEtleXdvcmQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTQm9vbGVhbktleXdvcmQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNCb29sZWFuS2V5d29yZCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNDYWxsU2lnbmF0dXJlRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNDYWxsU2lnbmF0dXJlRGVjbGFyYXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTQ29uZGl0aW9uYWxUeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTQ29uZGl0aW9uYWxUeXBlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTQ29uc3RydWN0U2lnbmF0dXJlRGVjbGFyYXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTQ29uc3RydWN0b3JUeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTQ29uc3RydWN0b3JUeXBlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU0RlY2xhcmVGdW5jdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU0RlY2xhcmVGdW5jdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNEZWNsYXJlTWV0aG9kPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTRGVjbGFyZU1ldGhvZCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNFbnRpdHlOYW1lPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJJZGVudGlmaWVyIj09PW58fCJUU1F1YWxpZmllZE5hbWUiPT09bnx8IlBsYWNlaG9sZGVyIj09PW4mJiJJZGVudGlmaWVyIj09PWUuZXhwZWN0ZWROb2RlKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU0VudW1EZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU0VudW1EZWNsYXJhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNFbnVtTWVtYmVyPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTRW51bU1lbWJlciI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNFeHBvcnRBc3NpZ25tZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTRXhwb3J0QXNzaWdubWVudCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHM9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHMiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2U9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNGdW5jdGlvblR5cGU9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNGdW5jdGlvblR5cGUiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNJbXBvcnRUeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTSW1wb3J0VHlwZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNJbmRleFNpZ25hdHVyZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU0luZGV4U2lnbmF0dXJlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU0luZGV4ZWRBY2Nlc3NUeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTSW5kZXhlZEFjY2Vzc1R5cGUiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTSW5mZXJUeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTSW5mZXJUeXBlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU0luc3RhbnRpYXRpb25FeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTSW5zdGFudGlhdGlvbkV4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTSW50ZXJmYWNlQm9keT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU0ludGVyZmFjZUJvZHkiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTSW50ZXJmYWNlRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNJbnRlcmZhY2VEZWNsYXJhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNJbnRlcnNlY3Rpb25UeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTSW50ZXJzZWN0aW9uVHlwZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNJbnRyaW5zaWNLZXl3b3JkPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTSW50cmluc2ljS2V5d29yZCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNMaXRlcmFsVHlwZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU0xpdGVyYWxUeXBlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU01hcHBlZFR5cGU9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNNYXBwZWRUeXBlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU01ldGhvZFNpZ25hdHVyZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU01ldGhvZFNpZ25hdHVyZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNNb2R1bGVCbG9jaz1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU01vZHVsZUJsb2NrIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU01vZHVsZURlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTTW9kdWxlRGVjbGFyYXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTTmFtZWRUdXBsZU1lbWJlcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU05hbWVkVHVwbGVNZW1iZXIiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNOZXZlcktleXdvcmQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNOZXZlcktleXdvcmQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTTm9uTnVsbEV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNOb25OdWxsRXhwcmVzc2lvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNOdWxsS2V5d29yZD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU051bGxLZXl3b3JkIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU051bWJlcktleXdvcmQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNOdW1iZXJLZXl3b3JkIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU09iamVjdEtleXdvcmQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNPYmplY3RLZXl3b3JkIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU09wdGlvbmFsVHlwZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU09wdGlvbmFsVHlwZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNQYXJhbWV0ZXJQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU1BhcmFtZXRlclByb3BlcnR5Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU1BhcmVudGhlc2l6ZWRUeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTUGFyZW50aGVzaXplZFR5cGUiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTUHJvcGVydHlTaWduYXR1cmU9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNQcm9wZXJ0eVNpZ25hdHVyZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNRdWFsaWZpZWROYW1lPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTUXVhbGlmaWVkTmFtZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNSZXN0VHlwZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU1Jlc3RUeXBlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU1NhdGlzZmllc0V4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNTYXRpc2ZpZXNFeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU1N0cmluZ0tleXdvcmQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNTdHJpbmdLZXl3b3JkIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU1N5bWJvbEtleXdvcmQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNTeW1ib2xLZXl3b3JkIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU1RoaXNUeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTVGhpc1R5cGUiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTVHVwbGVUeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTVHVwbGVUeXBlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU1R5cGU9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIlRTQW55S2V5d29yZCI9PT1ufHwiVFNCb29sZWFuS2V5d29yZCI9PT1ufHwiVFNCaWdJbnRLZXl3b3JkIj09PW58fCJUU0ludHJpbnNpY0tleXdvcmQiPT09bnx8IlRTTmV2ZXJLZXl3b3JkIj09PW58fCJUU051bGxLZXl3b3JkIj09PW58fCJUU051bWJlcktleXdvcmQiPT09bnx8IlRTT2JqZWN0S2V5d29yZCI9PT1ufHwiVFNTdHJpbmdLZXl3b3JkIj09PW58fCJUU1N5bWJvbEtleXdvcmQiPT09bnx8IlRTVW5kZWZpbmVkS2V5d29yZCI9PT1ufHwiVFNVbmtub3duS2V5d29yZCI9PT1ufHwiVFNWb2lkS2V5d29yZCI9PT1ufHwiVFNUaGlzVHlwZSI9PT1ufHwiVFNGdW5jdGlvblR5cGUiPT09bnx8IlRTQ29uc3RydWN0b3JUeXBlIj09PW58fCJUU1R5cGVSZWZlcmVuY2UiPT09bnx8IlRTVHlwZVByZWRpY2F0ZSI9PT1ufHwiVFNUeXBlUXVlcnkiPT09bnx8IlRTVHlwZUxpdGVyYWwiPT09bnx8IlRTQXJyYXlUeXBlIj09PW58fCJUU1R1cGxlVHlwZSI9PT1ufHwiVFNPcHRpb25hbFR5cGUiPT09bnx8IlRTUmVzdFR5cGUiPT09bnx8IlRTVW5pb25UeXBlIj09PW58fCJUU0ludGVyc2VjdGlvblR5cGUiPT09bnx8IlRTQ29uZGl0aW9uYWxUeXBlIj09PW58fCJUU0luZmVyVHlwZSI9PT1ufHwiVFNQYXJlbnRoZXNpemVkVHlwZSI9PT1ufHwiVFNUeXBlT3BlcmF0b3IiPT09bnx8IlRTSW5kZXhlZEFjY2Vzc1R5cGUiPT09bnx8IlRTTWFwcGVkVHlwZSI9PT1ufHwiVFNMaXRlcmFsVHlwZSI9PT1ufHwiVFNFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHMiPT09bnx8IlRTSW1wb3J0VHlwZSI9PT1uKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU1R5cGVBbGlhc0RlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTVHlwZUFsaWFzRGVjbGFyYXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNUeXBlQXNzZXJ0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTVHlwZUFzc2VydGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNUeXBlRWxlbWVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO2NvbnN0IG49ZS50eXBlO3JldHVybigiVFNDYWxsU2lnbmF0dXJlRGVjbGFyYXRpb24iPT09bnx8IlRTQ29uc3RydWN0U2lnbmF0dXJlRGVjbGFyYXRpb24iPT09bnx8IlRTUHJvcGVydHlTaWduYXR1cmUiPT09bnx8IlRTTWV0aG9kU2lnbmF0dXJlIj09PW58fCJUU0luZGV4U2lnbmF0dXJlIj09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTVHlwZUxpdGVyYWw9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNUeXBlTGl0ZXJhbCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNUeXBlT3BlcmF0b3I9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNUeXBlT3BlcmF0b3IiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTVHlwZVBhcmFtZXRlcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU1R5cGVQYXJhbWV0ZXIiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU1R5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTVHlwZVByZWRpY2F0ZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU1R5cGVQcmVkaWNhdGUiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RTVHlwZVF1ZXJ5PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTVHlwZVF1ZXJ5Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU1R5cGVSZWZlcmVuY2U9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNUeXBlUmVmZXJlbmNlIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU1VuZGVmaW5lZEtleXdvcmQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVFNVbmRlZmluZWRLZXl3b3JkIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU1VuaW9uVHlwZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU1VuaW9uVHlwZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVFNVbmtub3duS2V5d29yZD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUU1Vua25vd25LZXl3b3JkIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUU1ZvaWRLZXl3b3JkPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRTVm9pZEtleXdvcmQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RlbXBsYXRlRWxlbWVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUZW1wbGF0ZUVsZW1lbnQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RlbXBsYXRlTGl0ZXJhbD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUZW1wbGF0ZUxpdGVyYWwiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1Rlcm1pbmF0b3JsZXNzPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJCcmVha1N0YXRlbWVudCI9PT1ufHwiQ29udGludWVTdGF0ZW1lbnQiPT09bnx8IlJldHVyblN0YXRlbWVudCI9PT1ufHwiVGhyb3dTdGF0ZW1lbnQiPT09bnx8IllpZWxkRXhwcmVzc2lvbiI9PT1ufHwiQXdhaXRFeHByZXNzaW9uIj09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RoaXNFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlRoaXNFeHByZXNzaW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUaGlzVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVGhpc1R5cGVBbm5vdGF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUaHJvd1N0YXRlbWVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUaHJvd1N0YXRlbWVudCI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVG9waWNSZWZlcmVuY2U9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVG9waWNSZWZlcmVuY2UiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1RyeVN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUcnlTdGF0ZW1lbnQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1R1cGxlRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUdXBsZUV4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1R1cGxlVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVHVwbGVUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVHlwZUFsaWFzPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlR5cGVBbGlhcyI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVHlwZUFubm90YXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1R5cGVDYXN0RXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUeXBlQ2FzdEV4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1R5cGVQYXJhbWV0ZXI9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVHlwZVBhcmFtZXRlciI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb249ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1R5cGVTY3JpcHQ9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIlRTUGFyYW1ldGVyUHJvcGVydHkiPT09bnx8IlRTRGVjbGFyZUZ1bmN0aW9uIj09PW58fCJUU0RlY2xhcmVNZXRob2QiPT09bnx8IlRTUXVhbGlmaWVkTmFtZSI9PT1ufHwiVFNDYWxsU2lnbmF0dXJlRGVjbGFyYXRpb24iPT09bnx8IlRTQ29uc3RydWN0U2lnbmF0dXJlRGVjbGFyYXRpb24iPT09bnx8IlRTUHJvcGVydHlTaWduYXR1cmUiPT09bnx8IlRTTWV0aG9kU2lnbmF0dXJlIj09PW58fCJUU0luZGV4U2lnbmF0dXJlIj09PW58fCJUU0FueUtleXdvcmQiPT09bnx8IlRTQm9vbGVhbktleXdvcmQiPT09bnx8IlRTQmlnSW50S2V5d29yZCI9PT1ufHwiVFNJbnRyaW5zaWNLZXl3b3JkIj09PW58fCJUU05ldmVyS2V5d29yZCI9PT1ufHwiVFNOdWxsS2V5d29yZCI9PT1ufHwiVFNOdW1iZXJLZXl3b3JkIj09PW58fCJUU09iamVjdEtleXdvcmQiPT09bnx8IlRTU3RyaW5nS2V5d29yZCI9PT1ufHwiVFNTeW1ib2xLZXl3b3JkIj09PW58fCJUU1VuZGVmaW5lZEtleXdvcmQiPT09bnx8IlRTVW5rbm93bktleXdvcmQiPT09bnx8IlRTVm9pZEtleXdvcmQiPT09bnx8IlRTVGhpc1R5cGUiPT09bnx8IlRTRnVuY3Rpb25UeXBlIj09PW58fCJUU0NvbnN0cnVjdG9yVHlwZSI9PT1ufHwiVFNUeXBlUmVmZXJlbmNlIj09PW58fCJUU1R5cGVQcmVkaWNhdGUiPT09bnx8IlRTVHlwZVF1ZXJ5Ij09PW58fCJUU1R5cGVMaXRlcmFsIj09PW58fCJUU0FycmF5VHlwZSI9PT1ufHwiVFNUdXBsZVR5cGUiPT09bnx8IlRTT3B0aW9uYWxUeXBlIj09PW58fCJUU1Jlc3RUeXBlIj09PW58fCJUU05hbWVkVHVwbGVNZW1iZXIiPT09bnx8IlRTVW5pb25UeXBlIj09PW58fCJUU0ludGVyc2VjdGlvblR5cGUiPT09bnx8IlRTQ29uZGl0aW9uYWxUeXBlIj09PW58fCJUU0luZmVyVHlwZSI9PT1ufHwiVFNQYXJlbnRoZXNpemVkVHlwZSI9PT1ufHwiVFNUeXBlT3BlcmF0b3IiPT09bnx8IlRTSW5kZXhlZEFjY2Vzc1R5cGUiPT09bnx8IlRTTWFwcGVkVHlwZSI9PT1ufHwiVFNMaXRlcmFsVHlwZSI9PT1ufHwiVFNFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHMiPT09bnx8IlRTSW50ZXJmYWNlRGVjbGFyYXRpb24iPT09bnx8IlRTSW50ZXJmYWNlQm9keSI9PT1ufHwiVFNUeXBlQWxpYXNEZWNsYXJhdGlvbiI9PT1ufHwiVFNJbnN0YW50aWF0aW9uRXhwcmVzc2lvbiI9PT1ufHwiVFNBc0V4cHJlc3Npb24iPT09bnx8IlRTU2F0aXNmaWVzRXhwcmVzc2lvbiI9PT1ufHwiVFNUeXBlQXNzZXJ0aW9uIj09PW58fCJUU0VudW1EZWNsYXJhdGlvbiI9PT1ufHwiVFNFbnVtTWVtYmVyIj09PW58fCJUU01vZHVsZURlY2xhcmF0aW9uIj09PW58fCJUU01vZHVsZUJsb2NrIj09PW58fCJUU0ltcG9ydFR5cGUiPT09bnx8IlRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24iPT09bnx8IlRTRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UiPT09bnx8IlRTTm9uTnVsbEV4cHJlc3Npb24iPT09bnx8IlRTRXhwb3J0QXNzaWdubWVudCI9PT1ufHwiVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbiI9PT1ufHwiVFNUeXBlQW5ub3RhdGlvbiI9PT1ufHwiVFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiI9PT1ufHwiVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iPT09bnx8IlRTVHlwZVBhcmFtZXRlciI9PT1uKSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNUeXBlb2ZUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJUeXBlb2ZUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVW5hcnlFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlVuYXJ5RXhwcmVzc2lvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVW5hcnlMaWtlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJVbmFyeUV4cHJlc3Npb24iPT09bnx8IlNwcmVhZEVsZW1lbnQiPT09bikmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVW5pb25UeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJVbmlvblR5cGVBbm5vdGF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNVcGRhdGVFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlVwZGF0ZUV4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1VzZXJXaGl0ZXNwYWNhYmxlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7Y29uc3Qgbj1lLnR5cGU7cmV0dXJuKCJPYmplY3RNZXRob2QiPT09bnx8Ik9iamVjdFByb3BlcnR5Ij09PW58fCJPYmplY3RUeXBlSW50ZXJuYWxTbG90Ij09PW58fCJPYmplY3RUeXBlQ2FsbFByb3BlcnR5Ij09PW58fCJPYmplY3RUeXBlSW5kZXhlciI9PT1ufHwiT2JqZWN0VHlwZVByb3BlcnR5Ij09PW58fCJPYmplY3RUeXBlU3ByZWFkUHJvcGVydHkiPT09bikmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVjhJbnRyaW5zaWNJZGVudGlmaWVyPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlY4SW50cmluc2ljSWRlbnRpZmllciI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVmFyaWFibGVEZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJWYXJpYWJsZURlY2xhcmF0aW9uIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNWYXJpYWJsZURlY2xhcmF0b3I9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtyZXR1cm4iVmFyaWFibGVEZWNsYXJhdG9yIj09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNWYXJpYW5jZT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJWYXJpYW5jZSI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzVm9pZFR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIlZvaWRUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGUmJih2b2lkIDA9PT10fHwoMCxyLmRlZmF1bHQpKGUsdCkpfSx0LmlzV2hpbGU9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkRvV2hpbGVTdGF0ZW1lbnQiPT09bnx8IldoaWxlU3RhdGVtZW50Ij09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1doaWxlU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIldoaWxlU3RhdGVtZW50Ij09PWUudHlwZSYmKHZvaWQgMD09PXR8fCgwLHIuZGVmYXVsdCkoZSx0KSl9LHQuaXNXaXRoU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuITE7cmV0dXJuIldpdGhTdGF0ZW1lbnQiPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX0sdC5pc1lpZWxkRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiExO3JldHVybiJZaWVsZEV4cHJlc3Npb24iPT09ZS50eXBlJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX07dmFyIHI9bigiMzkyZSIpLGk9bigiYTljNyIpO2Z1bmN0aW9uIGEoZSx0KXtpZighZSlyZXR1cm4hMTtjb25zdCBuPWUudHlwZTtyZXR1cm4oIkV4cG9ydEFsbERlY2xhcmF0aW9uIj09PW58fCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iPT09bnx8IkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iPT09bnx8IkltcG9ydERlY2xhcmF0aW9uIj09PW4pJiYodm9pZCAwPT09dHx8KDAsci5kZWZhdWx0KShlLHQpKX19LGM0OWU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZXx8IWUubGVuZ3RoKXJldHVybjtjb25zdCBuPVtdLGk9KDAsci5kZWZhdWx0KShlLHQsbik7aWYoaSl7Zm9yKGNvbnN0IGUgb2Ygbil0LnB1c2goZSk7cmV0dXJuIGl9fTt2YXIgcj1uKCI3M2JkIil9LGM2NWU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoZSl9O3ZhciByPW4oImJmNzgiKX0sYzhkYTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCI0ZjM4IiksaT1yLl9faW1wb3J0RGVmYXVsdChuKCIyOTA4IikpLGE9ci5fX2ltcG9ydERlZmF1bHQobigiNDFiYSIpKSxvPXIuX19pbXBvcnREZWZhdWx0KG4oIjA5YzgiKSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe2UudXNlKGkuZGVmYXVsdCk7dmFyIHQ9ZS51c2UoYS5kZWZhdWx0KSxuPXQuVHlwZS5kZWYscj10LlR5cGUub3Iscz1lLnVzZShvLmRlZmF1bHQpLmRlZmF1bHRzO24oIkNhdGNoQ2xhdXNlIikuZmllbGQoInBhcmFtIixyKG4oIlBhdHRlcm4iKSxudWxsKSxzLm51bGwpfSxlLmV4cG9ydHM9dC5kZWZhdWx0fSxjY2M3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKGUsITAsITApfTt2YXIgcj1uKCJiZjc4Iil9LGNmNDQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QTEFDRUhPTERFUlNfRkxJUFBFRF9BTElBUz10LlBMQUNFSE9MREVSU19BTElBUz10LlBMQUNFSE9MREVSUz12b2lkIDA7dmFyIHI9bigiNTdkZSIpO2NvbnN0IGk9WyJJZGVudGlmaWVyIiwiU3RyaW5nTGl0ZXJhbCIsIkV4cHJlc3Npb24iLCJTdGF0ZW1lbnQiLCJEZWNsYXJhdGlvbiIsIkJsb2NrU3RhdGVtZW50IiwiQ2xhc3NCb2R5IiwiUGF0dGVybiJdO3QuUExBQ0VIT0xERVJTPWk7Y29uc3QgYT17RGVjbGFyYXRpb246WyJTdGF0ZW1lbnQiXSxQYXR0ZXJuOlsiUGF0dGVybkxpa2UiLCJMVmFsIl19O3QuUExBQ0VIT0xERVJTX0FMSUFTPWE7Zm9yKGNvbnN0IGUgb2YgaSl7Y29uc3QgdD1yLkFMSUFTX0tFWVNbZV07bnVsbCE9dCYmdC5sZW5ndGgmJihhW2VdPXQpfWNvbnN0IG89e307dC5QTEFDRUhPTERFUlNfRkxJUFBFRF9BTElBUz1vLE9iamVjdC5rZXlzKGEpLmZvckVhY2goZT0+e2FbZV0uZm9yRWFjaCh0PT57T2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobyx0KXx8KG9bdF09W10pLG9bdF0ucHVzaChlKX0pfSl9LGQwNjI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JZGVudGlmaWVyPWZ1bmN0aW9uKGUpe3RoaXMuZXhhY3RTb3VyY2UoZS5sb2MsKCk9Pnt0aGlzLndvcmQoZS5uYW1lKX0pfSx0LkFyZ3VtZW50UGxhY2Vob2xkZXI9ZnVuY3Rpb24oKXt0aGlzLnRva2VuKCI/Iil9LHQuU3ByZWFkRWxlbWVudD10LlJlc3RFbGVtZW50PWZ1bmN0aW9uKGUpe3RoaXMudG9rZW4oIi4uLiIpLHRoaXMucHJpbnQoZS5hcmd1bWVudCxlKX0sdC5PYmplY3RQYXR0ZXJuPXQuT2JqZWN0RXhwcmVzc2lvbj1mdW5jdGlvbihlKXtjb25zdCB0PWUucHJvcGVydGllczt0aGlzLnRva2VuKCJ7IiksdGhpcy5wcmludElubmVyQ29tbWVudHMoZSksdC5sZW5ndGgmJih0aGlzLnNwYWNlKCksdGhpcy5wcmludExpc3QodCxlLHtpbmRlbnQ6ITAsc3RhdGVtZW50OiEwfSksdGhpcy5zcGFjZSgpKSx0aGlzLnRva2VuKCJ9Iil9LHQuT2JqZWN0TWV0aG9kPWZ1bmN0aW9uKGUpe3RoaXMucHJpbnRKb2luKGUuZGVjb3JhdG9ycyxlKSx0aGlzLl9tZXRob2RIZWFkKGUpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuYm9keSxlKX0sdC5PYmplY3RQcm9wZXJ0eT1mdW5jdGlvbihlKXtpZih0aGlzLnByaW50Sm9pbihlLmRlY29yYXRvcnMsZSksZS5jb21wdXRlZCl0aGlzLnRva2VuKCJbIiksdGhpcy5wcmludChlLmtleSxlKSx0aGlzLnRva2VuKCJdIik7ZWxzZXtpZihhKGUudmFsdWUpJiZvKGUua2V5KSYmZS5rZXkubmFtZT09PWUudmFsdWUubGVmdC5uYW1lKXJldHVybiB2b2lkIHRoaXMucHJpbnQoZS52YWx1ZSxlKTtpZih0aGlzLnByaW50KGUua2V5LGUpLGUuc2hvcnRoYW5kJiZvKGUua2V5KSYmbyhlLnZhbHVlKSYmZS5rZXkubmFtZT09PWUudmFsdWUubmFtZSlyZXR1cm59dGhpcy50b2tlbigiOiIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUudmFsdWUsZSl9LHQuQXJyYXlQYXR0ZXJuPXQuQXJyYXlFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5lbGVtZW50cyxuPXQubGVuZ3RoO3RoaXMudG9rZW4oIlsiKSx0aGlzLnByaW50SW5uZXJDb21tZW50cyhlKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7Y29uc3QgaT10W3JdO2k/KHI+MCYmdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoaSxlKSxyPG4tMSYmdGhpcy50b2tlbigiLCIpKTp0aGlzLnRva2VuKCIsIil9dGhpcy50b2tlbigiXSIpfSx0LlJlY29yZEV4cHJlc3Npb249ZnVuY3Rpb24oZSl7Y29uc3QgdD1lLnByb3BlcnRpZXM7bGV0IG4scjtpZigiYmFyIj09PXRoaXMuZm9ybWF0LnJlY29yZEFuZFR1cGxlU3ludGF4VHlwZSluPSJ7fCIscj0ifH0iO2Vsc2V7aWYoImhhc2giIT09dGhpcy5mb3JtYXQucmVjb3JkQW5kVHVwbGVTeW50YXhUeXBlKXRocm93IG5ldyBFcnJvcihgVGhlICJyZWNvcmRBbmRUdXBsZVN5bnRheFR5cGUiIGdlbmVyYXRvciBvcHRpb24gbXVzdCBiZSAiYmFyIiBvciAiaGFzaCIgKCR7SlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtYXQucmVjb3JkQW5kVHVwbGVTeW50YXhUeXBlKX0gcmVjZWl2ZWQpLmApO249IiN7IixyPSJ9In10aGlzLnRva2VuKG4pLHRoaXMucHJpbnRJbm5lckNvbW1lbnRzKGUpLHQubGVuZ3RoJiYodGhpcy5zcGFjZSgpLHRoaXMucHJpbnRMaXN0KHQsZSx7aW5kZW50OiEwLHN0YXRlbWVudDohMH0pLHRoaXMuc3BhY2UoKSksdGhpcy50b2tlbihyKX0sdC5UdXBsZUV4cHJlc3Npb249ZnVuY3Rpb24oZSl7Y29uc3QgdD1lLmVsZW1lbnRzLG49dC5sZW5ndGg7bGV0IHIsaTtpZigiYmFyIj09PXRoaXMuZm9ybWF0LnJlY29yZEFuZFR1cGxlU3ludGF4VHlwZSlyPSJbfCIsaT0ifF0iO2Vsc2V7aWYoImhhc2giIT09dGhpcy5mb3JtYXQucmVjb3JkQW5kVHVwbGVTeW50YXhUeXBlKXRocm93IG5ldyBFcnJvcih0aGlzLmZvcm1hdC5yZWNvcmRBbmRUdXBsZVN5bnRheFR5cGUrIiBpcyBub3QgYSB2YWxpZCByZWNvcmRBbmRUdXBsZSBzeW50YXggdHlwZSIpO3I9IiNbIixpPSJdIn10aGlzLnRva2VuKHIpLHRoaXMucHJpbnRJbm5lckNvbW1lbnRzKGUpO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtjb25zdCBpPXRbcl07aSYmKHI+MCYmdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoaSxlKSxyPG4tMSYmdGhpcy50b2tlbigiLCIpKX10aGlzLnRva2VuKGkpfSx0LlJlZ0V4cExpdGVyYWw9ZnVuY3Rpb24oZSl7dGhpcy53b3JkKGAvJHtlLnBhdHRlcm59LyR7ZS5mbGFnc31gKX0sdC5Cb29sZWFuTGl0ZXJhbD1mdW5jdGlvbihlKXt0aGlzLndvcmQoZS52YWx1ZT8idHJ1ZSI6ImZhbHNlIil9LHQuTnVsbExpdGVyYWw9ZnVuY3Rpb24oKXt0aGlzLndvcmQoIm51bGwiKX0sdC5OdW1lcmljTGl0ZXJhbD1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuZ2V0UG9zc2libGVSYXcoZSksbj10aGlzLmZvcm1hdC5qc2VzY09wdGlvbixyPWUudmFsdWUrIiI7bi5udW1iZXJzP3RoaXMubnVtYmVyKGkoZS52YWx1ZSxuKSk6bnVsbD09dD90aGlzLm51bWJlcihyKTp0aGlzLmZvcm1hdC5taW5pZmllZD90aGlzLm51bWJlcih0Lmxlbmd0aDxyLmxlbmd0aD90OnIpOnRoaXMubnVtYmVyKHQpfSx0LlN0cmluZ0xpdGVyYWw9ZnVuY3Rpb24oZSl7Y29uc3QgdD10aGlzLmdldFBvc3NpYmxlUmF3KGUpO2lmKCF0aGlzLmZvcm1hdC5taW5pZmllZCYmbnVsbCE9dClyZXR1cm4gdm9pZCB0aGlzLnRva2VuKHQpO2NvbnN0IG49aShlLnZhbHVlLE9iamVjdC5hc3NpZ24odGhpcy5mb3JtYXQuanNlc2NPcHRpb24sdGhpcy5mb3JtYXQuanNvbkNvbXBhdGlibGVTdHJpbmdzJiZ7anNvbjohMH0pKTtyZXR1cm4gdGhpcy50b2tlbihuKX0sdC5CaWdJbnRMaXRlcmFsPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9dGhpcy5nZXRQb3NzaWJsZVJhdyhlKTt0aGlzLmZvcm1hdC5taW5pZmllZHx8bnVsbD09dD90aGlzLndvcmQoZS52YWx1ZSsibiIpOnRoaXMud29yZCh0KX0sdC5EZWNpbWFsTGl0ZXJhbD1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuZ2V0UG9zc2libGVSYXcoZSk7dGhpcy5mb3JtYXQubWluaWZpZWR8fG51bGw9PXQ/dGhpcy53b3JkKGUudmFsdWUrIm0iKTp0aGlzLndvcmQodCl9LHQuUGlwZWxpbmVUb3BpY0V4cHJlc3Npb249ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLmV4cHJlc3Npb24sZSl9LHQuUGlwZWxpbmVCYXJlRnVuY3Rpb249ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLmNhbGxlZSxlKX0sdC5QaXBlbGluZVByaW1hcnlUb3BpY1JlZmVyZW5jZT1mdW5jdGlvbigpe3RoaXMudG9rZW4oIiMiKX07dmFyIHI9bigiMjUyYSIpLGk9bigiYjU5ZCIpO2NvbnN0e2lzQXNzaWdubWVudFBhdHRlcm46YSxpc0lkZW50aWZpZXI6b309cn0sZDE5MjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2xldCByPW51bGw7ZnVuY3Rpb24gaShlKXtpZihudWxsIT09ciYmKHIucHJvcGVydHksMSkpe2NvbnN0IGU9cjtyZXR1cm4gcj1pLnByb3RvdHlwZT1udWxsLGV9cmV0dXJuIHI9aS5wcm90b3R5cGU9bnVsbD09ZT9PYmplY3QuY3JlYXRlKG51bGwpOmUsbmV3IGl9aSgpLGUuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaShlKX19LGQxZjQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7aWYoKDAsaS5pc1N1cGVyKShlLm9iamVjdCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcHJlcGVuZCBub2RlIHRvIHN1cGVyIHByb3BlcnR5IGFjY2VzcyAoYHN1cGVyLmZvb2ApLiIpO3JldHVybiBlLm9iamVjdD0oMCxyLm1lbWJlckV4cHJlc3Npb24pKHQsZS5vYmplY3QpLGV9O3ZhciByPW4oImViNWIiKSxpPW4oIjI1MmEiKX0sZDVhZDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlVuYXJ5RXhwcmVzc2lvbj1mdW5jdGlvbihlKXsidm9pZCI9PT1lLm9wZXJhdG9yfHwiZGVsZXRlIj09PWUub3BlcmF0b3J8fCJ0eXBlb2YiPT09ZS5vcGVyYXRvcnx8InRocm93Ij09PWUub3BlcmF0b3I/KHRoaXMud29yZChlLm9wZXJhdG9yKSx0aGlzLnNwYWNlKCkpOnRoaXMudG9rZW4oZS5vcGVyYXRvciksdGhpcy5wcmludChlLmFyZ3VtZW50LGUpfSx0LkRvRXhwcmVzc2lvbj1mdW5jdGlvbihlKXtlLmFzeW5jJiYodGhpcy53b3JkKCJhc3luYyIpLHRoaXMuc3BhY2UoKSksdGhpcy53b3JkKCJkbyIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuYm9keSxlKX0sdC5QYXJlbnRoZXNpemVkRXhwcmVzc2lvbj1mdW5jdGlvbihlKXt0aGlzLnRva2VuKCIoIiksdGhpcy5wcmludChlLmV4cHJlc3Npb24sZSksdGhpcy50b2tlbigiKSIpfSx0LlVwZGF0ZUV4cHJlc3Npb249ZnVuY3Rpb24oZSl7ZS5wcmVmaXg/KHRoaXMudG9rZW4oZS5vcGVyYXRvciksdGhpcy5wcmludChlLmFyZ3VtZW50LGUpKToodGhpcy5zdGFydFRlcm1pbmF0b3JsZXNzKCEwKSx0aGlzLnByaW50KGUuYXJndW1lbnQsZSksdGhpcy5lbmRUZXJtaW5hdG9ybGVzcygpLHRoaXMudG9rZW4oZS5vcGVyYXRvcikpfSx0LkNvbmRpdGlvbmFsRXhwcmVzc2lvbj1mdW5jdGlvbihlKXt0aGlzLnByaW50KGUudGVzdCxlKSx0aGlzLnNwYWNlKCksdGhpcy50b2tlbigiPyIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuY29uc2VxdWVudCxlKSx0aGlzLnNwYWNlKCksdGhpcy50b2tlbigiOiIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuYWx0ZXJuYXRlLGUpfSx0Lk5ld0V4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXt0aGlzLndvcmQoIm5ldyIpLHRoaXMuc3BhY2UoKSx0aGlzLnByaW50KGUuY2FsbGVlLGUpLCghdGhpcy5mb3JtYXQubWluaWZpZWR8fDAhPT1lLmFyZ3VtZW50cy5sZW5ndGh8fGUub3B0aW9uYWx8fGEodCx7Y2FsbGVlOmV9KXx8cyh0KXx8bCh0KSkmJih0aGlzLnByaW50KGUudHlwZUFyZ3VtZW50cyxlKSx0aGlzLnByaW50KGUudHlwZVBhcmFtZXRlcnMsZSksZS5vcHRpb25hbCYmdGhpcy50b2tlbigiPy4iKSx0aGlzLnRva2VuKCIoIiksdGhpcy5wcmludExpc3QoZS5hcmd1bWVudHMsZSksdGhpcy50b2tlbigiKSIpKX0sdC5TZXF1ZW5jZUV4cHJlc3Npb249ZnVuY3Rpb24oZSl7dGhpcy5wcmludExpc3QoZS5leHByZXNzaW9ucyxlKX0sdC5UaGlzRXhwcmVzc2lvbj1mdW5jdGlvbigpe3RoaXMud29yZCgidGhpcyIpfSx0LlN1cGVyPWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJzdXBlciIpfSx0LkRlY29yYXRvcj1mdW5jdGlvbihlKXt0aGlzLnRva2VuKCJAIiksdGhpcy5wcmludChlLmV4cHJlc3Npb24sZSksdGhpcy5uZXdsaW5lKCl9LHQuT3B0aW9uYWxNZW1iZXJFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe2lmKHRoaXMucHJpbnQoZS5vYmplY3QsZSksIWUuY29tcHV0ZWQmJnMoZS5wcm9wZXJ0eSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiR290IGEgTWVtYmVyRXhwcmVzc2lvbiBmb3IgTWVtYmVyRXhwcmVzc2lvbiBwcm9wZXJ0eSIpO2xldCB0PWUuY29tcHV0ZWQ7byhlLnByb3BlcnR5KSYmIm51bWJlciI9PXR5cGVvZiBlLnByb3BlcnR5LnZhbHVlJiYodD0hMCksZS5vcHRpb25hbCYmdGhpcy50b2tlbigiPy4iKSx0Pyh0aGlzLnRva2VuKCJbIiksdGhpcy5wcmludChlLnByb3BlcnR5LGUpLHRoaXMudG9rZW4oIl0iKSk6KGUub3B0aW9uYWx8fHRoaXMudG9rZW4oIi4iKSx0aGlzLnByaW50KGUucHJvcGVydHksZSkpfSx0Lk9wdGlvbmFsQ2FsbEV4cHJlc3Npb249ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLmNhbGxlZSxlKSx0aGlzLnByaW50KGUudHlwZUFyZ3VtZW50cyxlKSx0aGlzLnByaW50KGUudHlwZVBhcmFtZXRlcnMsZSksZS5vcHRpb25hbCYmdGhpcy50b2tlbigiPy4iKSx0aGlzLnRva2VuKCIoIiksdGhpcy5wcmludExpc3QoZS5hcmd1bWVudHMsZSksdGhpcy50b2tlbigiKSIpfSx0LkNhbGxFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe3RoaXMucHJpbnQoZS5jYWxsZWUsZSksdGhpcy5wcmludChlLnR5cGVBcmd1bWVudHMsZSksdGhpcy5wcmludChlLnR5cGVQYXJhbWV0ZXJzLGUpLHRoaXMudG9rZW4oIigiKSx0aGlzLnByaW50TGlzdChlLmFyZ3VtZW50cyxlKSx0aGlzLnRva2VuKCIpIil9LHQuSW1wb3J0PWZ1bmN0aW9uKCl7dGhpcy53b3JkKCJpbXBvcnQiKX0sdC5FbXB0eVN0YXRlbWVudD1mdW5jdGlvbigpe3RoaXMuc2VtaWNvbG9uKCEwKX0sdC5FeHByZXNzaW9uU3RhdGVtZW50PWZ1bmN0aW9uKGUpe3RoaXMucHJpbnQoZS5leHByZXNzaW9uLGUpLHRoaXMuc2VtaWNvbG9uKCl9LHQuQXNzaWdubWVudFBhdHRlcm49ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLmxlZnQsZSksZS5sZWZ0Lm9wdGlvbmFsJiZ0aGlzLnRva2VuKCI/IiksdGhpcy5wcmludChlLmxlZnQudHlwZUFubm90YXRpb24sZSksdGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIj0iKSx0aGlzLnNwYWNlKCksdGhpcy5wcmludChlLnJpZ2h0LGUpfSx0LkxvZ2ljYWxFeHByZXNzaW9uPXQuQmluYXJ5RXhwcmVzc2lvbj10LkFzc2lnbm1lbnRFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj10aGlzLmluRm9yU3RhdGVtZW50SW5pdENvdW50ZXImJiJpbiI9PT1lLm9wZXJhdG9yJiYhaS5uZWVkc1BhcmVucyhlLHQpO24mJnRoaXMudG9rZW4oIigiKSx0aGlzLnByaW50KGUubGVmdCxlKSx0aGlzLnNwYWNlKCksImluIj09PWUub3BlcmF0b3J8fCJpbnN0YW5jZW9mIj09PWUub3BlcmF0b3I/dGhpcy53b3JkKGUub3BlcmF0b3IpOnRoaXMudG9rZW4oZS5vcGVyYXRvciksdGhpcy5zcGFjZSgpLHRoaXMucHJpbnQoZS5yaWdodCxlKSxuJiZ0aGlzLnRva2VuKCIpIil9LHQuQmluZEV4cHJlc3Npb249ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLm9iamVjdCxlKSx0aGlzLnRva2VuKCI6OiIpLHRoaXMucHJpbnQoZS5jYWxsZWUsZSl9LHQuTWVtYmVyRXhwcmVzc2lvbj1mdW5jdGlvbihlKXtpZih0aGlzLnByaW50KGUub2JqZWN0LGUpLCFlLmNvbXB1dGVkJiZzKGUucHJvcGVydHkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkdvdCBhIE1lbWJlckV4cHJlc3Npb24gZm9yIE1lbWJlckV4cHJlc3Npb24gcHJvcGVydHkiKTtsZXQgdD1lLmNvbXB1dGVkO28oZS5wcm9wZXJ0eSkmJiJudW1iZXIiPT10eXBlb2YgZS5wcm9wZXJ0eS52YWx1ZSYmKHQ9ITApLHQ/KHRoaXMudG9rZW4oIlsiKSx0aGlzLnByaW50KGUucHJvcGVydHksZSksdGhpcy50b2tlbigiXSIpKToodGhpcy50b2tlbigiLiIpLHRoaXMucHJpbnQoZS5wcm9wZXJ0eSxlKSl9LHQuTWV0YVByb3BlcnR5PWZ1bmN0aW9uKGUpe3RoaXMucHJpbnQoZS5tZXRhLGUpLHRoaXMudG9rZW4oIi4iKSx0aGlzLnByaW50KGUucHJvcGVydHksZSl9LHQuUHJpdmF0ZU5hbWU9ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigiIyIpLHRoaXMucHJpbnQoZS5pZCxlKX0sdC5WOEludHJpbnNpY0lkZW50aWZpZXI9ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigiJSIpLHRoaXMud29yZChlLm5hbWUpfSx0Lk1vZHVsZUV4cHJlc3Npb249ZnVuY3Rpb24oZSl7dGhpcy53b3JkKCJtb2R1bGUiKSx0aGlzLnNwYWNlKCksdGhpcy50b2tlbigieyIpLDA9PT1lLmJvZHkuYm9keS5sZW5ndGg/dGhpcy50b2tlbigifSIpOih0aGlzLm5ld2xpbmUoKSx0aGlzLnByaW50U2VxdWVuY2UoZS5ib2R5LmJvZHksZSx7aW5kZW50OiEwfSksdGhpcy5yaWdodEJyYWNlKCkpfSx0LkF3YWl0RXhwcmVzc2lvbj10LllpZWxkRXhwcmVzc2lvbj12b2lkIDA7dmFyIHI9bigiMjUyYSIpLGk9bigiNDNmZCIpO2NvbnN0e2lzQ2FsbEV4cHJlc3Npb246YSxpc0xpdGVyYWw6byxpc01lbWJlckV4cHJlc3Npb246cyxpc05ld0V4cHJlc3Npb246bH09cjtmdW5jdGlvbiB1KGUpe3JldHVybiBmdW5jdGlvbih0KXtpZih0aGlzLndvcmQoZSksdC5kZWxlZ2F0ZSYmdGhpcy50b2tlbigiKiIpLHQuYXJndW1lbnQpe3RoaXMuc3BhY2UoKTtjb25zdCBlPXRoaXMuc3RhcnRUZXJtaW5hdG9ybGVzcygpO3RoaXMucHJpbnQodC5hcmd1bWVudCx0KSx0aGlzLmVuZFRlcm1pbmF0b3JsZXNzKGUpfX19Y29uc3QgcD11KCJ5aWVsZCIpO3QuWWllbGRFeHByZXNzaW9uPXA7Y29uc3QgYz11KCJhd2FpdCIpO3QuQXdhaXRFeHByZXNzaW9uPWN9LGQ2MWU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5zcGFjZSgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpTWEF0dHJpYnV0ZT1mdW5jdGlvbihlKXt0aGlzLnByaW50KGUubmFtZSxlKSxlLnZhbHVlJiYodGhpcy50b2tlbigiPSIpLHRoaXMucHJpbnQoZS52YWx1ZSxlKSl9LHQuSlNYSWRlbnRpZmllcj1mdW5jdGlvbihlKXt0aGlzLndvcmQoZS5uYW1lKX0sdC5KU1hOYW1lc3BhY2VkTmFtZT1mdW5jdGlvbihlKXt0aGlzLnByaW50KGUubmFtZXNwYWNlLGUpLHRoaXMudG9rZW4oIjoiKSx0aGlzLnByaW50KGUubmFtZSxlKX0sdC5KU1hNZW1iZXJFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe3RoaXMucHJpbnQoZS5vYmplY3QsZSksdGhpcy50b2tlbigiLiIpLHRoaXMucHJpbnQoZS5wcm9wZXJ0eSxlKX0sdC5KU1hTcHJlYWRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSl7dGhpcy50b2tlbigieyIpLHRoaXMudG9rZW4oIi4uLiIpLHRoaXMucHJpbnQoZS5hcmd1bWVudCxlKSx0aGlzLnRva2VuKCJ9Iil9LHQuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcj1mdW5jdGlvbihlKXt0aGlzLnRva2VuKCJ7IiksdGhpcy5wcmludChlLmV4cHJlc3Npb24sZSksdGhpcy50b2tlbigifSIpfSx0LkpTWFNwcmVhZENoaWxkPWZ1bmN0aW9uKGUpe3RoaXMudG9rZW4oInsiKSx0aGlzLnRva2VuKCIuLi4iKSx0aGlzLnByaW50KGUuZXhwcmVzc2lvbixlKSx0aGlzLnRva2VuKCJ9Iil9LHQuSlNYVGV4dD1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuZ2V0UG9zc2libGVSYXcoZSk7bnVsbCE9dD90aGlzLnRva2VuKHQpOnRoaXMudG9rZW4oZS52YWx1ZSl9LHQuSlNYRWxlbWVudD1mdW5jdGlvbihlKXtjb25zdCB0PWUub3BlbmluZ0VsZW1lbnQ7aWYodGhpcy5wcmludCh0LGUpLCF0LnNlbGZDbG9zaW5nKXt0aGlzLmluZGVudCgpO2Zvcihjb25zdCB0IG9mIGUuY2hpbGRyZW4pdGhpcy5wcmludCh0LGUpO3RoaXMuZGVkZW50KCksdGhpcy5wcmludChlLmNsb3NpbmdFbGVtZW50LGUpfX0sdC5KU1hPcGVuaW5nRWxlbWVudD1mdW5jdGlvbihlKXt0aGlzLnRva2VuKCI8IiksdGhpcy5wcmludChlLm5hbWUsZSksdGhpcy5wcmludChlLnR5cGVQYXJhbWV0ZXJzLGUpLGUuYXR0cmlidXRlcy5sZW5ndGg+MCYmKHRoaXMuc3BhY2UoKSx0aGlzLnByaW50Sm9pbihlLmF0dHJpYnV0ZXMsZSx7c2VwYXJhdG9yOnJ9KSksZS5zZWxmQ2xvc2luZz8odGhpcy5zcGFjZSgpLHRoaXMudG9rZW4oIi8+IikpOnRoaXMudG9rZW4oIj4iKX0sdC5KU1hDbG9zaW5nRWxlbWVudD1mdW5jdGlvbihlKXt0aGlzLnRva2VuKCI8LyIpLHRoaXMucHJpbnQoZS5uYW1lLGUpLHRoaXMudG9rZW4oIj4iKX0sdC5KU1hFbXB0eUV4cHJlc3Npb249ZnVuY3Rpb24oZSl7dGhpcy5wcmludElubmVyQ29tbWVudHMoZSl9LHQuSlNYRnJhZ21lbnQ9ZnVuY3Rpb24oZSl7dGhpcy5wcmludChlLm9wZW5pbmdGcmFnbWVudCxlKSx0aGlzLmluZGVudCgpO2Zvcihjb25zdCB0IG9mIGUuY2hpbGRyZW4pdGhpcy5wcmludCh0LGUpO3RoaXMuZGVkZW50KCksdGhpcy5wcmludChlLmNsb3NpbmdGcmFnbWVudCxlKX0sdC5KU1hPcGVuaW5nRnJhZ21lbnQ9ZnVuY3Rpb24oKXt0aGlzLnRva2VuKCI8IiksdGhpcy50b2tlbigiPiIpfSx0LkpTWENsb3NpbmdGcmFnbWVudD1mdW5jdGlvbigpe3RoaXMudG9rZW4oIjwvIiksdGhpcy50b2tlbigiPiIpfSxuKCIyNTJhIil9LGQ4M2Q6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiNGYzOCIpLGk9ci5fX2ltcG9ydERlZmF1bHQobigiMWUxZiIpKSxhPXIuX19pbXBvcnREZWZhdWx0KG4oIjQxYmEiKSksbz1yLl9faW1wb3J0RGVmYXVsdChuKCIwOWM4IikpO3QuZGVmYXVsdD1mdW5jdGlvbihlKXtlLnVzZShpLmRlZmF1bHQpO3ZhciB0PWUudXNlKGEuZGVmYXVsdCksbj10LlR5cGUuZGVmLHI9dC5UeXBlLm9yLHM9ZS51c2Uoby5kZWZhdWx0KS5kZWZhdWx0cztuKCJKU1hBdHRyaWJ1dGUiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJuYW1lIiwidmFsdWUiKS5maWVsZCgibmFtZSIscihuKCJKU1hJZGVudGlmaWVyIiksbigiSlNYTmFtZXNwYWNlZE5hbWUiKSkpLmZpZWxkKCJ2YWx1ZSIscihuKCJMaXRlcmFsIiksbigiSlNYRXhwcmVzc2lvbkNvbnRhaW5lciIpLG4oIkpTWEVsZW1lbnQiKSxuKCJKU1hGcmFnbWVudCIpLG51bGwpLHMubnVsbCksbigiSlNYSWRlbnRpZmllciIpLmJhc2VzKCJJZGVudGlmaWVyIikuYnVpbGQoIm5hbWUiKS5maWVsZCgibmFtZSIsU3RyaW5nKSxuKCJKU1hOYW1lc3BhY2VkTmFtZSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoIm5hbWVzcGFjZSIsIm5hbWUiKS5maWVsZCgibmFtZXNwYWNlIixuKCJKU1hJZGVudGlmaWVyIikpLmZpZWxkKCJuYW1lIixuKCJKU1hJZGVudGlmaWVyIikpLG4oIkpTWE1lbWJlckV4cHJlc3Npb24iKS5iYXNlcygiTWVtYmVyRXhwcmVzc2lvbiIpLmJ1aWxkKCJvYmplY3QiLCJwcm9wZXJ0eSIpLmZpZWxkKCJvYmplY3QiLHIobigiSlNYSWRlbnRpZmllciIpLG4oIkpTWE1lbWJlckV4cHJlc3Npb24iKSkpLmZpZWxkKCJwcm9wZXJ0eSIsbigiSlNYSWRlbnRpZmllciIpKS5maWVsZCgiY29tcHV0ZWQiLEJvb2xlYW4scy5mYWxzZSk7dmFyIGw9cihuKCJKU1hJZGVudGlmaWVyIiksbigiSlNYTmFtZXNwYWNlZE5hbWUiKSxuKCJKU1hNZW1iZXJFeHByZXNzaW9uIikpO24oIkpTWFNwcmVhZEF0dHJpYnV0ZSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixuKCJFeHByZXNzaW9uIikpO3ZhciB1PVtyKG4oIkpTWEF0dHJpYnV0ZSIpLG4oIkpTWFNwcmVhZEF0dHJpYnV0ZSIpKV07bigiSlNYRXhwcmVzc2lvbkNvbnRhaW5lciIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImV4cHJlc3Npb24iKS5maWVsZCgiZXhwcmVzc2lvbiIscihuKCJFeHByZXNzaW9uIiksbigiSlNYRW1wdHlFeHByZXNzaW9uIikpKTt2YXIgcD1bcihuKCJKU1hUZXh0IiksbigiSlNYRXhwcmVzc2lvbkNvbnRhaW5lciIpLG4oIkpTWFNwcmVhZENoaWxkIiksbigiSlNYRWxlbWVudCIpLG4oIkpTWEZyYWdtZW50IiksbigiTGl0ZXJhbCIpKV07bigiSlNYRWxlbWVudCIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoIm9wZW5pbmdFbGVtZW50IiwiY2xvc2luZ0VsZW1lbnQiLCJjaGlsZHJlbiIpLmZpZWxkKCJvcGVuaW5nRWxlbWVudCIsbigiSlNYT3BlbmluZ0VsZW1lbnQiKSkuZmllbGQoImNsb3NpbmdFbGVtZW50IixyKG4oIkpTWENsb3NpbmdFbGVtZW50IiksbnVsbCkscy5udWxsKS5maWVsZCgiY2hpbGRyZW4iLHAscy5lbXB0eUFycmF5KS5maWVsZCgibmFtZSIsbCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGVuaW5nRWxlbWVudC5uYW1lfSksITApLmZpZWxkKCJzZWxmQ2xvc2luZyIsQm9vbGVhbiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGVuaW5nRWxlbWVudC5zZWxmQ2xvc2luZ30pLCEwKS5maWVsZCgiYXR0cmlidXRlcyIsdSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGVuaW5nRWxlbWVudC5hdHRyaWJ1dGVzfSksITApLG4oIkpTWE9wZW5pbmdFbGVtZW50IikuYmFzZXMoIk5vZGUiKS5idWlsZCgibmFtZSIsImF0dHJpYnV0ZXMiLCJzZWxmQ2xvc2luZyIpLmZpZWxkKCJuYW1lIixsKS5maWVsZCgiYXR0cmlidXRlcyIsdSxzLmVtcHR5QXJyYXkpLmZpZWxkKCJzZWxmQ2xvc2luZyIsQm9vbGVhbixzLmZhbHNlKSxuKCJKU1hDbG9zaW5nRWxlbWVudCIpLmJhc2VzKCJOb2RlIikuYnVpbGQoIm5hbWUiKS5maWVsZCgibmFtZSIsbCksbigiSlNYRnJhZ21lbnQiKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJvcGVuaW5nRnJhZ21lbnQiLCJjbG9zaW5nRnJhZ21lbnQiLCJjaGlsZHJlbiIpLmZpZWxkKCJvcGVuaW5nRnJhZ21lbnQiLG4oIkpTWE9wZW5pbmdGcmFnbWVudCIpKS5maWVsZCgiY2xvc2luZ0ZyYWdtZW50IixuKCJKU1hDbG9zaW5nRnJhZ21lbnQiKSkuZmllbGQoImNoaWxkcmVuIixwLHMuZW1wdHlBcnJheSksbigiSlNYT3BlbmluZ0ZyYWdtZW50IikuYmFzZXMoIk5vZGUiKS5idWlsZCgpLG4oIkpTWENsb3NpbmdGcmFnbWVudCIpLmJhc2VzKCJOb2RlIikuYnVpbGQoKSxuKCJKU1hUZXh0IikuYmFzZXMoIkxpdGVyYWwiKS5idWlsZCgidmFsdWUiLCJyYXciKS5maWVsZCgidmFsdWUiLFN0cmluZykuZmllbGQoInJhdyIsU3RyaW5nLChmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSkpLG4oIkpTWEVtcHR5RXhwcmVzc2lvbiIpLmJhc2VzKCJOb2RlIikuYnVpbGQoKSxuKCJKU1hTcHJlYWRDaGlsZCIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImV4cHJlc3Npb24iKS5maWVsZCgiZXhwcmVzc2lvbiIsbigiRXhwcmVzc2lvbiIpKX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sZDg3YjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnZpc2l0PXQudXNlPXQuVHlwZT10LnNvbWVGaWVsZD10LlBhdGhWaXNpdG9yPXQuUGF0aD10Lk5vZGVQYXRoPXQubmFtZWRUeXBlcz10LmdldFN1cGVydHlwZU5hbWVzPXQuZ2V0RmllbGRWYWx1ZT10LmdldEZpZWxkTmFtZXM9dC5nZXRCdWlsZGVyTmFtZT10LmZpbmFsaXplPXQuZWFjaEZpZWxkPXQuZGVmaW5lTWV0aG9kPXQuYnVpbHRJblR5cGVzPXQuYnVpbGRlcnM9dC5hc3ROb2Rlc0FyZUVxdWl2YWxlbnQ9dm9pZCAwO3ZhciByPW4oIjRmMzgiKSxpPXIuX19pbXBvcnREZWZhdWx0KG4oImZjZWEiKSksYT1yLl9faW1wb3J0RGVmYXVsdChuKCJhYjIzIikpLG89ci5fX2ltcG9ydERlZmF1bHQobigiZDk2NSIpKSxzPXIuX19pbXBvcnREZWZhdWx0KG4oIjllNjEiKSksbD1yLl9faW1wb3J0RGVmYXVsdChuKCI0YjUzIikpLHU9ci5fX2ltcG9ydERlZmF1bHQobigiMjkwOCIpKSxwPXIuX19pbXBvcnREZWZhdWx0KG4oImM4ZGEiKSksYz1yLl9faW1wb3J0RGVmYXVsdChuKCIxZTFmIikpLGQ9ci5fX2ltcG9ydERlZmF1bHQobigiZDgzZCIpKSxmPXIuX19pbXBvcnREZWZhdWx0KG4oImUwNGEiKSkseT1yLl9faW1wb3J0RGVmYXVsdChuKCIxOWZhMyIpKSxtPXIuX19pbXBvcnREZWZhdWx0KG4oIjU2NzMiKSksaD1yLl9faW1wb3J0RGVmYXVsdChuKCI4NWFiIikpLFQ9ci5fX2ltcG9ydERlZmF1bHQobigiM2ZlMiIpKSxiPW4oImIwM2QiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibmFtZWRUeXBlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGIubmFtZWRUeXBlc319KTt2YXIgUz1pLmRlZmF1bHQoW2EuZGVmYXVsdCxvLmRlZmF1bHQscy5kZWZhdWx0LGwuZGVmYXVsdCx1LmRlZmF1bHQscC5kZWZhdWx0LGMuZGVmYXVsdCxkLmRlZmF1bHQsZi5kZWZhdWx0LHkuZGVmYXVsdCxtLmRlZmF1bHQsaC5kZWZhdWx0LFQuZGVmYXVsdF0pLEU9Uy5hc3ROb2Rlc0FyZUVxdWl2YWxlbnQsZz1TLmJ1aWxkZXJzLHY9Uy5idWlsdEluVHlwZXMsUD1TLmRlZmluZU1ldGhvZCx4PVMuZWFjaEZpZWxkLEE9Uy5maW5hbGl6ZSxPPVMuZ2V0QnVpbGRlck5hbWUsXz1TLmdldEZpZWxkTmFtZXMsdz1TLmdldEZpZWxkVmFsdWUsST1TLmdldFN1cGVydHlwZU5hbWVzLE49Uy5uYW1lZFR5cGVzLEQ9Uy5Ob2RlUGF0aCxqPVMuUGF0aCxDPVMuUGF0aFZpc2l0b3IsTD1TLnNvbWVGaWVsZCxrPVMuVHlwZSxNPVMudXNlLEI9Uy52aXNpdDt0LmFzdE5vZGVzQXJlRXF1aXZhbGVudD1FLHQuYnVpbGRlcnM9Zyx0LmJ1aWx0SW5UeXBlcz12LHQuZGVmaW5lTWV0aG9kPVAsdC5lYWNoRmllbGQ9eCx0LmZpbmFsaXplPUEsdC5nZXRCdWlsZGVyTmFtZT1PLHQuZ2V0RmllbGROYW1lcz1fLHQuZ2V0RmllbGRWYWx1ZT13LHQuZ2V0U3VwZXJ0eXBlTmFtZXM9SSx0Lk5vZGVQYXRoPUQsdC5QYXRoPWosdC5QYXRoVmlzaXRvcj1DLHQuc29tZUZpZWxkPUwsdC5UeXBlPWssdC51c2U9TSx0LnZpc2l0PUIsT2JqZWN0LmFzc2lnbihiLm5hbWVkVHlwZXMsTil9LGQ4N2M6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXZvaWQgMDt2YXIgcj1uKCJjNDg1IiksaT1mdW5jdGlvbihlKXtpZigoMCxyLmlzRXhwcmVzc2lvblN0YXRlbWVudCkoZSkmJihlPWUuZXhwcmVzc2lvbiksKDAsci5pc0V4cHJlc3Npb24pKGUpKXJldHVybiBlO2lmKCgwLHIuaXNDbGFzcykoZSk/ZS50eXBlPSJDbGFzc0V4cHJlc3Npb24iOigwLHIuaXNGdW5jdGlvbikoZSkmJihlLnR5cGU9IkZ1bmN0aW9uRXhwcmVzc2lvbiIpLCEoMCxyLmlzRXhwcmVzc2lvbikoZSkpdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgdHVybiAke2UudHlwZX0gdG8gYW4gZXhwcmVzc2lvbmApO3JldHVybiBlfTt0LmRlZmF1bHQ9aX0sZDk2NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCI0ZjM4IiksaT1yLl9faW1wb3J0RGVmYXVsdChuKCJhYjIzIikpLGE9ci5fX2ltcG9ydERlZmF1bHQobigiNDFiYSIpKSxvPXIuX19pbXBvcnREZWZhdWx0KG4oIjA5YzgiKSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe2UudXNlKGkuZGVmYXVsdCk7dmFyIHQ9ZS51c2UoYS5kZWZhdWx0KSxuPXQuVHlwZS5kZWYscj10LlR5cGUub3Iscz1lLnVzZShvLmRlZmF1bHQpLmRlZmF1bHRzO24oIkZ1bmN0aW9uIikuZmllbGQoImdlbmVyYXRvciIsQm9vbGVhbixzLmZhbHNlKS5maWVsZCgiZXhwcmVzc2lvbiIsQm9vbGVhbixzLmZhbHNlKS5maWVsZCgiZGVmYXVsdHMiLFtyKG4oIkV4cHJlc3Npb24iKSxudWxsKV0scy5lbXB0eUFycmF5KS5maWVsZCgicmVzdCIscihuKCJJZGVudGlmaWVyIiksbnVsbCkscy5udWxsKSxuKCJSZXN0RWxlbWVudCIpLmJhc2VzKCJQYXR0ZXJuIikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixuKCJQYXR0ZXJuIikpLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIscihuKCJUeXBlQW5ub3RhdGlvbiIpLG4oIlRTVHlwZUFubm90YXRpb24iKSxudWxsKSxzLm51bGwpLG4oIlNwcmVhZEVsZW1lbnRQYXR0ZXJuIikuYmFzZXMoIlBhdHRlcm4iKS5idWlsZCgiYXJndW1lbnQiKS5maWVsZCgiYXJndW1lbnQiLG4oIlBhdHRlcm4iKSksbigiRnVuY3Rpb25EZWNsYXJhdGlvbiIpLmJ1aWxkKCJpZCIsInBhcmFtcyIsImJvZHkiLCJnZW5lcmF0b3IiLCJleHByZXNzaW9uIikuZmllbGQoImlkIixyKG4oIklkZW50aWZpZXIiKSxudWxsKSksbigiRnVuY3Rpb25FeHByZXNzaW9uIikuYnVpbGQoImlkIiwicGFyYW1zIiwiYm9keSIsImdlbmVyYXRvciIsImV4cHJlc3Npb24iKSxuKCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIpLmJhc2VzKCJGdW5jdGlvbiIsIkV4cHJlc3Npb24iKS5idWlsZCgicGFyYW1zIiwiYm9keSIsImV4cHJlc3Npb24iKS5maWVsZCgiaWQiLG51bGwscy5udWxsKS5maWVsZCgiYm9keSIscihuKCJCbG9ja1N0YXRlbWVudCIpLG4oIkV4cHJlc3Npb24iKSkpLmZpZWxkKCJnZW5lcmF0b3IiLCExLHMuZmFsc2UpLG4oIkZvck9mU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJsZWZ0IiwicmlnaHQiLCJib2R5IikuZmllbGQoImxlZnQiLHIobigiVmFyaWFibGVEZWNsYXJhdGlvbiIpLG4oIlBhdHRlcm4iKSkpLmZpZWxkKCJyaWdodCIsbigiRXhwcmVzc2lvbiIpKS5maWVsZCgiYm9keSIsbigiU3RhdGVtZW50IikpLG4oIllpZWxkRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImFyZ3VtZW50IiwiZGVsZWdhdGUiKS5maWVsZCgiYXJndW1lbnQiLHIobigiRXhwcmVzc2lvbiIpLG51bGwpKS5maWVsZCgiZGVsZWdhdGUiLEJvb2xlYW4scy5mYWxzZSksbigiR2VuZXJhdG9yRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImJvZHkiLCJibG9ja3MiLCJmaWx0ZXIiKS5maWVsZCgiYm9keSIsbigiRXhwcmVzc2lvbiIpKS5maWVsZCgiYmxvY2tzIixbbigiQ29tcHJlaGVuc2lvbkJsb2NrIildKS5maWVsZCgiZmlsdGVyIixyKG4oIkV4cHJlc3Npb24iKSxudWxsKSksbigiQ29tcHJlaGVuc2lvbkV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJib2R5IiwiYmxvY2tzIiwiZmlsdGVyIikuZmllbGQoImJvZHkiLG4oIkV4cHJlc3Npb24iKSkuZmllbGQoImJsb2NrcyIsW24oIkNvbXByZWhlbnNpb25CbG9jayIpXSkuZmllbGQoImZpbHRlciIscihuKCJFeHByZXNzaW9uIiksbnVsbCkpLG4oIkNvbXByZWhlbnNpb25CbG9jayIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImxlZnQiLCJyaWdodCIsImVhY2giKS5maWVsZCgibGVmdCIsbigiUGF0dGVybiIpKS5maWVsZCgicmlnaHQiLG4oIkV4cHJlc3Npb24iKSkuZmllbGQoImVhY2giLEJvb2xlYW4pLG4oIlByb3BlcnR5IikuZmllbGQoImtleSIscihuKCJMaXRlcmFsIiksbigiSWRlbnRpZmllciIpLG4oIkV4cHJlc3Npb24iKSkpLmZpZWxkKCJ2YWx1ZSIscihuKCJFeHByZXNzaW9uIiksbigiUGF0dGVybiIpKSkuZmllbGQoIm1ldGhvZCIsQm9vbGVhbixzLmZhbHNlKS5maWVsZCgic2hvcnRoYW5kIixCb29sZWFuLHMuZmFsc2UpLmZpZWxkKCJjb21wdXRlZCIsQm9vbGVhbixzLmZhbHNlKSxuKCJPYmplY3RQcm9wZXJ0eSIpLmZpZWxkKCJzaG9ydGhhbmQiLEJvb2xlYW4scy5mYWxzZSksbigiUHJvcGVydHlQYXR0ZXJuIikuYmFzZXMoIlBhdHRlcm4iKS5idWlsZCgia2V5IiwicGF0dGVybiIpLmZpZWxkKCJrZXkiLHIobigiTGl0ZXJhbCIpLG4oIklkZW50aWZpZXIiKSxuKCJFeHByZXNzaW9uIikpKS5maWVsZCgicGF0dGVybiIsbigiUGF0dGVybiIpKS5maWVsZCgiY29tcHV0ZWQiLEJvb2xlYW4scy5mYWxzZSksbigiT2JqZWN0UGF0dGVybiIpLmJhc2VzKCJQYXR0ZXJuIikuYnVpbGQoInByb3BlcnRpZXMiKS5maWVsZCgicHJvcGVydGllcyIsW3IobigiUHJvcGVydHlQYXR0ZXJuIiksbigiUHJvcGVydHkiKSldKSxuKCJBcnJheVBhdHRlcm4iKS5iYXNlcygiUGF0dGVybiIpLmJ1aWxkKCJlbGVtZW50cyIpLmZpZWxkKCJlbGVtZW50cyIsW3IobigiUGF0dGVybiIpLG51bGwpXSksbigiU3ByZWFkRWxlbWVudCIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixuKCJFeHByZXNzaW9uIikpLG4oIkFycmF5RXhwcmVzc2lvbiIpLmZpZWxkKCJlbGVtZW50cyIsW3IobigiRXhwcmVzc2lvbiIpLG4oIlNwcmVhZEVsZW1lbnQiKSxuKCJSZXN0RWxlbWVudCIpLG51bGwpXSksbigiTmV3RXhwcmVzc2lvbiIpLmZpZWxkKCJhcmd1bWVudHMiLFtyKG4oIkV4cHJlc3Npb24iKSxuKCJTcHJlYWRFbGVtZW50IikpXSksbigiQ2FsbEV4cHJlc3Npb24iKS5maWVsZCgiYXJndW1lbnRzIixbcihuKCJFeHByZXNzaW9uIiksbigiU3ByZWFkRWxlbWVudCIpKV0pLG4oIkFzc2lnbm1lbnRQYXR0ZXJuIikuYmFzZXMoIlBhdHRlcm4iKS5idWlsZCgibGVmdCIsInJpZ2h0IikuZmllbGQoImxlZnQiLG4oIlBhdHRlcm4iKSkuZmllbGQoInJpZ2h0IixuKCJFeHByZXNzaW9uIikpLG4oIk1ldGhvZERlZmluaXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgia2luZCIsImtleSIsInZhbHVlIiwic3RhdGljIikuZmllbGQoImtpbmQiLHIoImNvbnN0cnVjdG9yIiwibWV0aG9kIiwiZ2V0Iiwic2V0IikpLmZpZWxkKCJrZXkiLG4oIkV4cHJlc3Npb24iKSkuZmllbGQoInZhbHVlIixuKCJGdW5jdGlvbiIpKS5maWVsZCgiY29tcHV0ZWQiLEJvb2xlYW4scy5mYWxzZSkuZmllbGQoInN0YXRpYyIsQm9vbGVhbixzLmZhbHNlKTt2YXIgbD1yKG4oIk1ldGhvZERlZmluaXRpb24iKSxuKCJWYXJpYWJsZURlY2xhcmF0b3IiKSxuKCJDbGFzc1Byb3BlcnR5RGVmaW5pdGlvbiIpLG4oIkNsYXNzUHJvcGVydHkiKSk7bigiQ2xhc3NQcm9wZXJ0eSIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJrZXkiKS5maWVsZCgia2V5IixyKG4oIkxpdGVyYWwiKSxuKCJJZGVudGlmaWVyIiksbigiRXhwcmVzc2lvbiIpKSkuZmllbGQoImNvbXB1dGVkIixCb29sZWFuLHMuZmFsc2UpLG4oIkNsYXNzUHJvcGVydHlEZWZpbml0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImRlZmluaXRpb24iKS5maWVsZCgiZGVmaW5pdGlvbiIsbCksbigiQ2xhc3NCb2R5IikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImJvZHkiKS5maWVsZCgiYm9keSIsW2xdKSxuKCJDbGFzc0RlY2xhcmF0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImlkIiwiYm9keSIsInN1cGVyQ2xhc3MiKS5maWVsZCgiaWQiLHIobigiSWRlbnRpZmllciIpLG51bGwpKS5maWVsZCgiYm9keSIsbigiQ2xhc3NCb2R5IikpLmZpZWxkKCJzdXBlckNsYXNzIixyKG4oIkV4cHJlc3Npb24iKSxudWxsKSxzLm51bGwpLG4oIkNsYXNzRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImlkIiwiYm9keSIsInN1cGVyQ2xhc3MiKS5maWVsZCgiaWQiLHIobigiSWRlbnRpZmllciIpLG51bGwpLHMubnVsbCkuZmllbGQoImJvZHkiLG4oIkNsYXNzQm9keSIpKS5maWVsZCgic3VwZXJDbGFzcyIscihuKCJFeHByZXNzaW9uIiksbnVsbCkscy5udWxsKSxuKCJTdXBlciIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoKSxuKCJTcGVjaWZpZXIiKS5iYXNlcygiTm9kZSIpLG4oIk1vZHVsZVNwZWNpZmllciIpLmJhc2VzKCJTcGVjaWZpZXIiKS5maWVsZCgibG9jYWwiLHIobigiSWRlbnRpZmllciIpLG51bGwpLHMubnVsbCkuZmllbGQoImlkIixyKG4oIklkZW50aWZpZXIiKSxudWxsKSxzLm51bGwpLmZpZWxkKCJuYW1lIixyKG4oIklkZW50aWZpZXIiKSxudWxsKSxzLm51bGwpLG4oIkltcG9ydFNwZWNpZmllciIpLmJhc2VzKCJNb2R1bGVTcGVjaWZpZXIiKS5idWlsZCgiaW1wb3J0ZWQiLCJsb2NhbCIpLmZpZWxkKCJpbXBvcnRlZCIsbigiSWRlbnRpZmllciIpKSxuKCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIikuYmFzZXMoIk1vZHVsZVNwZWNpZmllciIpLmJ1aWxkKCJsb2NhbCIpLG4oIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciIpLmJhc2VzKCJNb2R1bGVTcGVjaWZpZXIiKS5idWlsZCgibG9jYWwiKSxuKCJJbXBvcnREZWNsYXJhdGlvbiIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJzcGVjaWZpZXJzIiwic291cmNlIiwiaW1wb3J0S2luZCIpLmZpZWxkKCJzcGVjaWZpZXJzIixbcihuKCJJbXBvcnRTcGVjaWZpZXIiKSxuKCJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiKSxuKCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIikpXSxzLmVtcHR5QXJyYXkpLmZpZWxkKCJzb3VyY2UiLG4oIkxpdGVyYWwiKSkuZmllbGQoImltcG9ydEtpbmQiLHIoInZhbHVlIiwidHlwZSIpLChmdW5jdGlvbigpe3JldHVybiJ2YWx1ZSJ9KSksbigiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJkZWNsYXJhdGlvbiIsInNwZWNpZmllcnMiLCJzb3VyY2UiKS5maWVsZCgiZGVjbGFyYXRpb24iLHIobigiRGVjbGFyYXRpb24iKSxudWxsKSkuZmllbGQoInNwZWNpZmllcnMiLFtuKCJFeHBvcnRTcGVjaWZpZXIiKV0scy5lbXB0eUFycmF5KS5maWVsZCgic291cmNlIixyKG4oIkxpdGVyYWwiKSxudWxsKSxzLm51bGwpLG4oIkV4cG9ydFNwZWNpZmllciIpLmJhc2VzKCJNb2R1bGVTcGVjaWZpZXIiKS5idWlsZCgibG9jYWwiLCJleHBvcnRlZCIpLmZpZWxkKCJleHBvcnRlZCIsbigiSWRlbnRpZmllciIpKSxuKCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgiZGVjbGFyYXRpb24iKS5maWVsZCgiZGVjbGFyYXRpb24iLHIobigiRGVjbGFyYXRpb24iKSxuKCJFeHByZXNzaW9uIikpKSxuKCJFeHBvcnRBbGxEZWNsYXJhdGlvbiIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJzb3VyY2UiKS5maWVsZCgic291cmNlIixuKCJMaXRlcmFsIikpLG4oIlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoInRhZyIsInF1YXNpIikuZmllbGQoInRhZyIsbigiRXhwcmVzc2lvbiIpKS5maWVsZCgicXVhc2kiLG4oIlRlbXBsYXRlTGl0ZXJhbCIpKSxuKCJUZW1wbGF0ZUxpdGVyYWwiKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJxdWFzaXMiLCJleHByZXNzaW9ucyIpLmZpZWxkKCJxdWFzaXMiLFtuKCJUZW1wbGF0ZUVsZW1lbnQiKV0pLmZpZWxkKCJleHByZXNzaW9ucyIsW24oIkV4cHJlc3Npb24iKV0pLG4oIlRlbXBsYXRlRWxlbWVudCIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInZhbHVlIiwidGFpbCIpLmZpZWxkKCJ2YWx1ZSIse2Nvb2tlZDpTdHJpbmcscmF3OlN0cmluZ30pLmZpZWxkKCJ0YWlsIixCb29sZWFuKSxuKCJNZXRhUHJvcGVydHkiKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJtZXRhIiwicHJvcGVydHkiKS5maWVsZCgibWV0YSIsbigiSWRlbnRpZmllciIpKS5maWVsZCgicHJvcGVydHkiLG4oIklkZW50aWZpZXIiKSl9LGUuZXhwb3J0cz10LmRlZmF1bHR9LGRhN2Y6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXZvaWQgMDt2YXIgcj0oMCxuKCI1N2ZhIikuZGVmYXVsdCkoIlJlYWN0LkNvbXBvbmVudCIpO3QuZGVmYXVsdD1yfSxkZDg3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gci5DT01NRU5UX0tFWVMuZm9yRWFjaCh0PT57ZVt0XT1udWxsfSksZX07dmFyIHI9bigiOTA0NiIpfSxlMDRhOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIjRmMzgiKSxpPXIuX19pbXBvcnREZWZhdWx0KG4oIjNmZTIiKSksYT1yLl9faW1wb3J0RGVmYXVsdChuKCJhNzM3IikpLG89ci5fX2ltcG9ydERlZmF1bHQobigiNDFiYSIpKSxzPXIuX19pbXBvcnREZWZhdWx0KG4oIjA5YzgiKSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe2UudXNlKGkuZGVmYXVsdCksZS51c2UoYS5kZWZhdWx0KTt2YXIgdD1lLnVzZShvLmRlZmF1bHQpLG49dC5UeXBlLmRlZixyPXQuVHlwZS5vcixsPWUudXNlKHMuZGVmYXVsdCkuZGVmYXVsdHM7bigiRmxvdyIpLmJhc2VzKCJOb2RlIiksbigiRmxvd1R5cGUiKS5iYXNlcygiRmxvdyIpLG4oIkFueVR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoKSxuKCJFbXB0eVR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoKSxuKCJNaXhlZFR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoKSxuKCJWb2lkVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgpLG4oIlN5bWJvbFR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoKSxuKCJOdW1iZXJUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCksbigiQmlnSW50VHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgpLG4oIk51bWJlckxpdGVyYWxUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJ2YWx1ZSIsInJhdyIpLmZpZWxkKCJ2YWx1ZSIsTnVtYmVyKS5maWVsZCgicmF3IixTdHJpbmcpLG4oIk51bWVyaWNMaXRlcmFsVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgidmFsdWUiLCJyYXciKS5maWVsZCgidmFsdWUiLE51bWJlcikuZmllbGQoInJhdyIsU3RyaW5nKSxuKCJCaWdJbnRMaXRlcmFsVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgidmFsdWUiLCJyYXciKS5maWVsZCgidmFsdWUiLG51bGwpLmZpZWxkKCJyYXciLFN0cmluZyksbigiU3RyaW5nVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgpLG4oIlN0cmluZ0xpdGVyYWxUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJ2YWx1ZSIsInJhdyIpLmZpZWxkKCJ2YWx1ZSIsU3RyaW5nKS5maWVsZCgicmF3IixTdHJpbmcpLG4oIkJvb2xlYW5UeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCksbigiQm9vbGVhbkxpdGVyYWxUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJ2YWx1ZSIsInJhdyIpLmZpZWxkKCJ2YWx1ZSIsQm9vbGVhbikuZmllbGQoInJhdyIsU3RyaW5nKSxuKCJUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInR5cGVBbm5vdGF0aW9uIikuZmllbGQoInR5cGVBbm5vdGF0aW9uIixuKCJGbG93VHlwZSIpKSxuKCJOdWxsYWJsZVR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoInR5cGVBbm5vdGF0aW9uIikuZmllbGQoInR5cGVBbm5vdGF0aW9uIixuKCJGbG93VHlwZSIpKSxuKCJOdWxsTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoKSxuKCJOdWxsVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgpLG4oIlRoaXNUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCksbigiRXhpc3RzVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgpLG4oIkV4aXN0ZW50aWFsVHlwZVBhcmFtIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoKSxuKCJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoInBhcmFtcyIsInJldHVyblR5cGUiLCJyZXN0IiwidHlwZVBhcmFtZXRlcnMiKS5maWVsZCgicGFyYW1zIixbbigiRnVuY3Rpb25UeXBlUGFyYW0iKV0pLmZpZWxkKCJyZXR1cm5UeXBlIixuKCJGbG93VHlwZSIpKS5maWVsZCgicmVzdCIscihuKCJGdW5jdGlvblR5cGVQYXJhbSIpLG51bGwpKS5maWVsZCgidHlwZVBhcmFtZXRlcnMiLHIobigiVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIiksbnVsbCkpLG4oIkZ1bmN0aW9uVHlwZVBhcmFtIikuYmFzZXMoIk5vZGUiKS5idWlsZCgibmFtZSIsInR5cGVBbm5vdGF0aW9uIiwib3B0aW9uYWwiKS5maWVsZCgibmFtZSIscihuKCJJZGVudGlmaWVyIiksbnVsbCkpLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIsbigiRmxvd1R5cGUiKSkuZmllbGQoIm9wdGlvbmFsIixCb29sZWFuKSxuKCJBcnJheVR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoImVsZW1lbnRUeXBlIikuZmllbGQoImVsZW1lbnRUeXBlIixuKCJGbG93VHlwZSIpKSxuKCJPYmplY3RUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJwcm9wZXJ0aWVzIiwiaW5kZXhlcnMiLCJjYWxsUHJvcGVydGllcyIpLmZpZWxkKCJwcm9wZXJ0aWVzIixbcihuKCJPYmplY3RUeXBlUHJvcGVydHkiKSxuKCJPYmplY3RUeXBlU3ByZWFkUHJvcGVydHkiKSldKS5maWVsZCgiaW5kZXhlcnMiLFtuKCJPYmplY3RUeXBlSW5kZXhlciIpXSxsLmVtcHR5QXJyYXkpLmZpZWxkKCJjYWxsUHJvcGVydGllcyIsW24oIk9iamVjdFR5cGVDYWxsUHJvcGVydHkiKV0sbC5lbXB0eUFycmF5KS5maWVsZCgiaW5leGFjdCIscihCb29sZWFuLHZvaWQgMCksbFt2b2lkIDBdKS5maWVsZCgiZXhhY3QiLEJvb2xlYW4sbC5mYWxzZSkuZmllbGQoImludGVybmFsU2xvdHMiLFtuKCJPYmplY3RUeXBlSW50ZXJuYWxTbG90IildLGwuZW1wdHlBcnJheSksbigiVmFyaWFuY2UiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJraW5kIikuZmllbGQoImtpbmQiLHIoInBsdXMiLCJtaW51cyIpKTt2YXIgdT1yKG4oIlZhcmlhbmNlIiksInBsdXMiLCJtaW51cyIsbnVsbCk7bigiT2JqZWN0VHlwZVByb3BlcnR5IikuYmFzZXMoIk5vZGUiKS5idWlsZCgia2V5IiwidmFsdWUiLCJvcHRpb25hbCIpLmZpZWxkKCJrZXkiLHIobigiTGl0ZXJhbCIpLG4oIklkZW50aWZpZXIiKSkpLmZpZWxkKCJ2YWx1ZSIsbigiRmxvd1R5cGUiKSkuZmllbGQoIm9wdGlvbmFsIixCb29sZWFuKS5maWVsZCgidmFyaWFuY2UiLHUsbC5udWxsKSxuKCJPYmplY3RUeXBlSW5kZXhlciIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImlkIiwia2V5IiwidmFsdWUiKS5maWVsZCgiaWQiLG4oIklkZW50aWZpZXIiKSkuZmllbGQoImtleSIsbigiRmxvd1R5cGUiKSkuZmllbGQoInZhbHVlIixuKCJGbG93VHlwZSIpKS5maWVsZCgidmFyaWFuY2UiLHUsbC5udWxsKS5maWVsZCgic3RhdGljIixCb29sZWFuLGwuZmFsc2UpLG4oIk9iamVjdFR5cGVDYWxsUHJvcGVydHkiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJ2YWx1ZSIpLmZpZWxkKCJ2YWx1ZSIsbigiRnVuY3Rpb25UeXBlQW5ub3RhdGlvbiIpKS5maWVsZCgic3RhdGljIixCb29sZWFuLGwuZmFsc2UpLG4oIlF1YWxpZmllZFR5cGVJZGVudGlmaWVyIikuYmFzZXMoIk5vZGUiKS5idWlsZCgicXVhbGlmaWNhdGlvbiIsImlkIikuZmllbGQoInF1YWxpZmljYXRpb24iLHIobigiSWRlbnRpZmllciIpLG4oIlF1YWxpZmllZFR5cGVJZGVudGlmaWVyIikpKS5maWVsZCgiaWQiLG4oIklkZW50aWZpZXIiKSksbigiR2VuZXJpY1R5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoImlkIiwidHlwZVBhcmFtZXRlcnMiKS5maWVsZCgiaWQiLHIobigiSWRlbnRpZmllciIpLG4oIlF1YWxpZmllZFR5cGVJZGVudGlmaWVyIikpKS5maWVsZCgidHlwZVBhcmFtZXRlcnMiLHIobigiVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKSxudWxsKSksbigiTWVtYmVyVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgib2JqZWN0IiwicHJvcGVydHkiKS5maWVsZCgib2JqZWN0IixuKCJJZGVudGlmaWVyIikpLmZpZWxkKCJwcm9wZXJ0eSIscihuKCJNZW1iZXJUeXBlQW5ub3RhdGlvbiIpLG4oIkdlbmVyaWNUeXBlQW5ub3RhdGlvbiIpKSksbigiVW5pb25UeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJ0eXBlcyIpLmZpZWxkKCJ0eXBlcyIsW24oIkZsb3dUeXBlIildKSxuKCJJbnRlcnNlY3Rpb25UeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJ0eXBlcyIpLmZpZWxkKCJ0eXBlcyIsW24oIkZsb3dUeXBlIildKSxuKCJUeXBlb2ZUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJhcmd1bWVudCIpLmZpZWxkKCJhcmd1bWVudCIsbigiRmxvd1R5cGUiKSksbigiT2JqZWN0VHlwZVNwcmVhZFByb3BlcnR5IikuYmFzZXMoIk5vZGUiKS5idWlsZCgiYXJndW1lbnQiKS5maWVsZCgiYXJndW1lbnQiLG4oIkZsb3dUeXBlIikpLG4oIk9iamVjdFR5cGVJbnRlcm5hbFNsb3QiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJpZCIsInZhbHVlIiwib3B0aW9uYWwiLCJzdGF0aWMiLCJtZXRob2QiKS5maWVsZCgiaWQiLG4oIklkZW50aWZpZXIiKSkuZmllbGQoInZhbHVlIixuKCJGbG93VHlwZSIpKS5maWVsZCgib3B0aW9uYWwiLEJvb2xlYW4pLmZpZWxkKCJzdGF0aWMiLEJvb2xlYW4pLmZpZWxkKCJtZXRob2QiLEJvb2xlYW4pLG4oIlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInBhcmFtcyIpLmZpZWxkKCJwYXJhbXMiLFtuKCJUeXBlUGFyYW1ldGVyIildKSxuKCJUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInBhcmFtcyIpLmZpZWxkKCJwYXJhbXMiLFtuKCJGbG93VHlwZSIpXSksbigiVHlwZVBhcmFtZXRlciIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJuYW1lIiwidmFyaWFuY2UiLCJib3VuZCIsImRlZmF1bHQiKS5maWVsZCgibmFtZSIsU3RyaW5nKS5maWVsZCgidmFyaWFuY2UiLHUsbC5udWxsKS5maWVsZCgiYm91bmQiLHIobigiVHlwZUFubm90YXRpb24iKSxudWxsKSxsLm51bGwpLmZpZWxkKCJkZWZhdWx0IixyKG4oIkZsb3dUeXBlIiksbnVsbCksbC5udWxsKSxuKCJDbGFzc1Byb3BlcnR5IikuZmllbGQoInZhcmlhbmNlIix1LGwubnVsbCksbigiQ2xhc3NJbXBsZW1lbnRzIikuYmFzZXMoIk5vZGUiKS5idWlsZCgiaWQiKS5maWVsZCgiaWQiLG4oIklkZW50aWZpZXIiKSkuZmllbGQoInN1cGVyQ2xhc3MiLHIobigiRXhwcmVzc2lvbiIpLG51bGwpLGwubnVsbCkuZmllbGQoInR5cGVQYXJhbWV0ZXJzIixyKG4oIlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIiksbnVsbCksbC5udWxsKSxuKCJJbnRlcmZhY2VUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJib2R5IiwiZXh0ZW5kcyIpLmZpZWxkKCJib2R5IixuKCJPYmplY3RUeXBlQW5ub3RhdGlvbiIpKS5maWVsZCgiZXh0ZW5kcyIscihbbigiSW50ZXJmYWNlRXh0ZW5kcyIpXSxudWxsKSxsLm51bGwpLG4oIkludGVyZmFjZURlY2xhcmF0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImlkIiwiYm9keSIsImV4dGVuZHMiKS5maWVsZCgiaWQiLG4oIklkZW50aWZpZXIiKSkuZmllbGQoInR5cGVQYXJhbWV0ZXJzIixyKG4oIlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIpLG51bGwpLGwubnVsbCkuZmllbGQoImJvZHkiLG4oIk9iamVjdFR5cGVBbm5vdGF0aW9uIikpLmZpZWxkKCJleHRlbmRzIixbbigiSW50ZXJmYWNlRXh0ZW5kcyIpXSksbigiRGVjbGFyZUludGVyZmFjZSIpLmJhc2VzKCJJbnRlcmZhY2VEZWNsYXJhdGlvbiIpLmJ1aWxkKCJpZCIsImJvZHkiLCJleHRlbmRzIiksbigiSW50ZXJmYWNlRXh0ZW5kcyIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImlkIikuZmllbGQoImlkIixuKCJJZGVudGlmaWVyIikpLmZpZWxkKCJ0eXBlUGFyYW1ldGVycyIscihuKCJUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpLG51bGwpLGwubnVsbCksbigiVHlwZUFsaWFzIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImlkIiwidHlwZVBhcmFtZXRlcnMiLCJyaWdodCIpLmZpZWxkKCJpZCIsbigiSWRlbnRpZmllciIpKS5maWVsZCgidHlwZVBhcmFtZXRlcnMiLHIobigiVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIiksbnVsbCkpLmZpZWxkKCJyaWdodCIsbigiRmxvd1R5cGUiKSksbigiRGVjbGFyZVR5cGVBbGlhcyIpLmJhc2VzKCJUeXBlQWxpYXMiKS5idWlsZCgiaWQiLCJ0eXBlUGFyYW1ldGVycyIsInJpZ2h0IiksbigiT3BhcXVlVHlwZSIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJpZCIsInR5cGVQYXJhbWV0ZXJzIiwiaW1wbHR5cGUiLCJzdXBlcnR5cGUiKS5maWVsZCgiaWQiLG4oIklkZW50aWZpZXIiKSkuZmllbGQoInR5cGVQYXJhbWV0ZXJzIixyKG4oIlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIpLG51bGwpKS5maWVsZCgiaW1wbHR5cGUiLG4oIkZsb3dUeXBlIikpLmZpZWxkKCJzdXBlcnR5cGUiLHIobigiRmxvd1R5cGUiKSxudWxsKSksbigiRGVjbGFyZU9wYXF1ZVR5cGUiKS5iYXNlcygiT3BhcXVlVHlwZSIpLmJ1aWxkKCJpZCIsInR5cGVQYXJhbWV0ZXJzIiwic3VwZXJ0eXBlIikuZmllbGQoImltcGx0eXBlIixyKG4oIkZsb3dUeXBlIiksbnVsbCkpLG4oIlR5cGVDYXN0RXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImV4cHJlc3Npb24iLCJ0eXBlQW5ub3RhdGlvbiIpLmZpZWxkKCJleHByZXNzaW9uIixuKCJFeHByZXNzaW9uIikpLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIsbigiVHlwZUFubm90YXRpb24iKSksbigiVHVwbGVUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJ0eXBlcyIpLmZpZWxkKCJ0eXBlcyIsW24oIkZsb3dUeXBlIildKSxuKCJEZWNsYXJlVmFyaWFibGUiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoImlkIikuZmllbGQoImlkIixuKCJJZGVudGlmaWVyIikpLG4oIkRlY2xhcmVGdW5jdGlvbiIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgiaWQiKS5maWVsZCgiaWQiLG4oIklkZW50aWZpZXIiKSkuZmllbGQoInByZWRpY2F0ZSIscihuKCJGbG93UHJlZGljYXRlIiksbnVsbCksbC5udWxsKSxuKCJEZWNsYXJlQ2xhc3MiKS5iYXNlcygiSW50ZXJmYWNlRGVjbGFyYXRpb24iKS5idWlsZCgiaWQiKSxuKCJEZWNsYXJlTW9kdWxlIikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJpZCIsImJvZHkiKS5maWVsZCgiaWQiLHIobigiSWRlbnRpZmllciIpLG4oIkxpdGVyYWwiKSkpLmZpZWxkKCJib2R5IixuKCJCbG9ja1N0YXRlbWVudCIpKSxuKCJEZWNsYXJlTW9kdWxlRXhwb3J0cyIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgidHlwZUFubm90YXRpb24iKS5maWVsZCgidHlwZUFubm90YXRpb24iLG4oIlR5cGVBbm5vdGF0aW9uIikpLG4oIkRlY2xhcmVFeHBvcnREZWNsYXJhdGlvbiIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJkZWZhdWx0IiwiZGVjbGFyYXRpb24iLCJzcGVjaWZpZXJzIiwic291cmNlIikuZmllbGQoImRlZmF1bHQiLEJvb2xlYW4pLmZpZWxkKCJkZWNsYXJhdGlvbiIscihuKCJEZWNsYXJlVmFyaWFibGUiKSxuKCJEZWNsYXJlRnVuY3Rpb24iKSxuKCJEZWNsYXJlQ2xhc3MiKSxuKCJGbG93VHlwZSIpLG4oIlR5cGVBbGlhcyIpLG4oIkRlY2xhcmVPcGFxdWVUeXBlIiksbigiSW50ZXJmYWNlRGVjbGFyYXRpb24iKSxudWxsKSkuZmllbGQoInNwZWNpZmllcnMiLFtyKG4oIkV4cG9ydFNwZWNpZmllciIpLG4oIkV4cG9ydEJhdGNoU3BlY2lmaWVyIikpXSxsLmVtcHR5QXJyYXkpLmZpZWxkKCJzb3VyY2UiLHIobigiTGl0ZXJhbCIpLG51bGwpLGwubnVsbCksbigiRGVjbGFyZUV4cG9ydEFsbERlY2xhcmF0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoInNvdXJjZSIpLmZpZWxkKCJzb3VyY2UiLHIobigiTGl0ZXJhbCIpLG51bGwpLGwubnVsbCksbigiSW1wb3J0RGVjbGFyYXRpb24iKS5maWVsZCgiaW1wb3J0S2luZCIscigidmFsdWUiLCJ0eXBlIiwidHlwZW9mIiksKGZ1bmN0aW9uKCl7cmV0dXJuInZhbHVlIn0pKSxuKCJGbG93UHJlZGljYXRlIikuYmFzZXMoIkZsb3ciKSxuKCJJbmZlcnJlZFByZWRpY2F0ZSIpLmJhc2VzKCJGbG93UHJlZGljYXRlIikuYnVpbGQoKSxuKCJEZWNsYXJlZFByZWRpY2F0ZSIpLmJhc2VzKCJGbG93UHJlZGljYXRlIikuYnVpbGQoInZhbHVlIikuZmllbGQoInZhbHVlIixuKCJFeHByZXNzaW9uIikpLG4oIkZ1bmN0aW9uIikuZmllbGQoInByZWRpY2F0ZSIscihuKCJGbG93UHJlZGljYXRlIiksbnVsbCksbC5udWxsKSxuKCJDYWxsRXhwcmVzc2lvbiIpLmZpZWxkKCJ0eXBlQXJndW1lbnRzIixyKG51bGwsbigiVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKSksbC5udWxsKSxuKCJOZXdFeHByZXNzaW9uIikuZmllbGQoInR5cGVBcmd1bWVudHMiLHIobnVsbCxuKCJUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpKSxsLm51bGwpLG4oIkVudW1EZWNsYXJhdGlvbiIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJpZCIsImJvZHkiKS5maWVsZCgiaWQiLG4oIklkZW50aWZpZXIiKSkuZmllbGQoImJvZHkiLHIobigiRW51bUJvb2xlYW5Cb2R5IiksbigiRW51bU51bWJlckJvZHkiKSxuKCJFbnVtU3RyaW5nQm9keSIpLG4oIkVudW1TeW1ib2xCb2R5IikpKSxuKCJFbnVtQm9vbGVhbkJvZHkiKS5idWlsZCgibWVtYmVycyIsImV4cGxpY2l0VHlwZSIpLmZpZWxkKCJtZW1iZXJzIixbbigiRW51bUJvb2xlYW5NZW1iZXIiKV0pLmZpZWxkKCJleHBsaWNpdFR5cGUiLEJvb2xlYW4pLG4oIkVudW1OdW1iZXJCb2R5IikuYnVpbGQoIm1lbWJlcnMiLCJleHBsaWNpdFR5cGUiKS5maWVsZCgibWVtYmVycyIsW24oIkVudW1OdW1iZXJNZW1iZXIiKV0pLmZpZWxkKCJleHBsaWNpdFR5cGUiLEJvb2xlYW4pLG4oIkVudW1TdHJpbmdCb2R5IikuYnVpbGQoIm1lbWJlcnMiLCJleHBsaWNpdFR5cGUiKS5maWVsZCgibWVtYmVycyIscihbbigiRW51bVN0cmluZ01lbWJlciIpXSxbbigiRW51bURlZmF1bHRlZE1lbWJlciIpXSkpLmZpZWxkKCJleHBsaWNpdFR5cGUiLEJvb2xlYW4pLG4oIkVudW1TeW1ib2xCb2R5IikuYnVpbGQoIm1lbWJlcnMiKS5maWVsZCgibWVtYmVycyIsW24oIkVudW1EZWZhdWx0ZWRNZW1iZXIiKV0pLG4oIkVudW1Cb29sZWFuTWVtYmVyIikuYnVpbGQoImlkIiwiaW5pdCIpLmZpZWxkKCJpZCIsbigiSWRlbnRpZmllciIpKS5maWVsZCgiaW5pdCIscihuKCJMaXRlcmFsIiksQm9vbGVhbikpLG4oIkVudW1OdW1iZXJNZW1iZXIiKS5idWlsZCgiaWQiLCJpbml0IikuZmllbGQoImlkIixuKCJJZGVudGlmaWVyIikpLmZpZWxkKCJpbml0IixuKCJMaXRlcmFsIikpLG4oIkVudW1TdHJpbmdNZW1iZXIiKS5idWlsZCgiaWQiLCJpbml0IikuZmllbGQoImlkIixuKCJJZGVudGlmaWVyIikpLmZpZWxkKCJpbml0IixuKCJMaXRlcmFsIikpLG4oIkVudW1EZWZhdWx0ZWRNZW1iZXIiKS5idWlsZCgiaWQiKS5maWVsZCgiaWQiLG4oIklkZW50aWZpZXIiKSl9LGUuZXhwb3J0cz10LmRlZmF1bHR9LGUwNGQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3JldHVybiEhZSYmL15bYS16XS8udGVzdChlKX19LGUyZDQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0lkZW50aWZpZXJDaGFyPWMsdC5pc0lkZW50aWZpZXJOYW1lPWZ1bmN0aW9uKGUpe2xldCB0PSEwO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1lLmNoYXJDb2RlQXQobik7aWYoNTUyOTY9PSg2NDUxMiZyKSYmbisxPGUubGVuZ3RoKXtjb25zdCB0PWUuY2hhckNvZGVBdCgrK24pOzU2MzIwPT0oNjQ1MTImdCkmJihyPTY1NTM2KygoMTAyMyZyKTw8MTApKygxMDIzJnQpKX1pZih0KXtpZih0PSExLCFwKHIpKXJldHVybiExfWVsc2UgaWYoIWMocikpcmV0dXJuITF9cmV0dXJuIXR9LHQuaXNJZGVudGlmaWVyU3RhcnQ9cDtsZXQgcj0iwqrCtcK6w4Atw5bDmC3DtsO4LcuBy4Yty5HLoC3LpMusy67NsC3NtM22zbfNui3Nvc2/zobOiC3Ois6Mzo4tzqHOoy3Ptc+3LdKB0oot1K/UsS3VltWZ1aAt1ojXkC3XqtevLdey2KAt2YrZrtmv2bEt25Pbldul26bbrtuv27ot27zbv9yQ3JIt3K/djS3epd6x34ot36rftN+137rgoIAt4KCV4KCa4KCk4KCo4KGALeChmOChoC3goargobAt4KKH4KKJLeCijuCioC3go4ngpIQt4KS54KS94KWQ4KWYLeCloeClsS3gpoDgpoUt4KaM4KaP4KaQ4KaTLeCmqOCmqi3gprDgprLgprYt4Ka54Ka94KeO4Kec4Ked4KefLeCnoeCnsOCnseCnvOCohS3gqIrgqI/gqJDgqJMt4Kio4KiqLeCosOCosuCos+CoteCotuCouOCoueCpmS3gqZzgqZ7gqbIt4Km04KqFLeCqjeCqjy3gqpHgqpMt4Kqo4KqqLeCqsOCqsuCqs+CqtS3gqrngqr3gq5Dgq6Dgq6Hgq7ngrIUt4KyM4KyP4KyQ4KyTLeCsqOCsqi3grLDgrLLgrLPgrLUt4Ky54Ky94K2c4K2d4K2fLeCtoeCtseCug+CuhS3grorgro4t4K6Q4K6SLeCuleCumeCumuCunOCunuCun+Cuo+CupOCuqC3grqrgrq4t4K654K+Q4LCFLeCwjOCwji3gsJDgsJIt4LCo4LCqLeCwueCwveCxmC3gsZrgsZ3gsaDgsaHgsoDgsoUt4LKM4LKOLeCykOCyki3gsqjgsqot4LKz4LK1LeCyueCyveCzneCznuCzoOCzoeCzseCzsuC0hC3gtIzgtI4t4LSQ4LSSLeC0uuC0veC1juC1lC3gtZbgtZ8t4LWh4LW6LeC1v+C2hS3gtpbgtpot4Lax4LazLeC2u+C2veC3gC3gt4bguIEt4Liw4Liy4Liz4LmALeC5huC6geC6guC6hOC6hi3guorguowt4Lqj4Lql4LqnLeC6sOC6suC6s+C6veC7gC3gu4Tgu4bgu5wt4Luf4LyA4L2ALeC9h+C9iS3gvazgvogt4L6M4YCALeGAquGAv+GBkC3hgZXhgZot4YGd4YGh4YGl4YGm4YGuLeGBsOGBtS3hgoHhgo7hgqAt4YOF4YOH4YON4YOQLeGDuuGDvC3hiYjhiYot4YmN4YmQLeGJluGJmOGJmi3hiZ3hiaAt4YqI4YqKLeGKjeGKkC3hirDhirIt4Yq14Yq4LeGKvuGLgOGLgi3hi4Xhi4gt4YuW4YuYLeGMkOGMki3hjJXhjJgt4Y2a4Y6ALeGOj+GOoC3hj7Xhj7gt4Y+94ZCBLeGZrOGZry3hmb/hmoEt4Zqa4ZqgLeGbquGbri3hm7jhnIAt4ZyR4ZyfLeGcseGdgC3hnZHhnaAt4Z2s4Z2uLeGdsOGegC3hnrPhn5fhn5zhoKAt4aG44aKALeGiqOGiquGisC3ho7XhpIAt4aSe4aWQLeGlreGlsC3hpbThpoAt4aar4aawLeGnieGogC3hqJbhqKAt4amU4aqn4ayFLeGss+GthS3hrYzhroMt4a6g4a6u4a6v4a66LeGvpeGwgC3hsKPhsY0t4bGP4bGaLeGxveGygC3hsojhspAt4bK64bK9LeGyv+GzqS3hs6zhs64t4bOz4bO14bO24bO64bSALeG2v+G4gC3hvJXhvJgt4byd4bygLeG9heG9iC3hvY3hvZAt4b2X4b2Z4b2b4b2d4b2fLeG9veG+gC3hvrThvrYt4b684b6+4b+CLeG/hOG/hi3hv4zhv5At4b+T4b+WLeG/m+G/oC3hv6zhv7It4b+04b+2LeG/vOKBseKBv+KCkC3igpzihILihIfihIot4oST4oSV4oSYLeKEneKEpOKEpuKEqOKEqi3ihLnihLwt4oS/4oWFLeKFieKFjuKFoC3ihojisIAt4rOk4rOrLeKzruKzsuKzs+K0gC3itKXitKfitK3itLAt4rWn4rWv4raALeK2luK2oC3itqbitqgt4rau4rawLeK2tuK2uC3itr7it4At4reG4reILeK3juK3kC3it5bit5gt4ree44CFLeOAh+OAoS3jgKnjgLEt44C144C4LeOAvOOBgS3jgpbjgpst44Kf44KhLeODuuODvC3jg7/jhIUt44Sv44SxLeOGjuOGoC3jhr/jh7At44e/45CALeS2v+S4gC3qkozqk5At6pO96pSALeqYjOqYkC3qmJ/qmKrqmKvqmYAt6pmu6pm/LeqaneqaoC3qm6/qnJct6pyf6pyiLeqeiOqeiy3qn4rqn5Dqn5Hqn5Pqn5Ut6p+Z6p+yLeqggeqggy3qoIXqoIct6qCK6qCMLeqgouqhgC3qobPqooIt6qKz6qOyLeqjt+qju+qjveqjvuqkii3qpKXqpLAt6qWG6qWgLeqlvOqmhC3qprLqp4/qp6At6qek6qemLeqnr+qnui3qp77qqIAt6qio6qmALeqpguqphC3qqYvqqaAt6qm26qm66qm+Leqqr+qqseqqteqqtuqquS3qqr3qq4Dqq4Lqq5st6qud6qugLeqrquqrsi3qq7TqrIEt6qyG6qyJLeqsjuqskS3qrJbqrKAt6qym6qyoLeqsruqssC3qrZrqrZwt6q2p6q2wLeqvouqwgC3tnqPtnrAt7Z+G7Z+LLe2fu++kgC3vqa3vqbAt76uZ76yALe+shu+sky3vrJfvrJ3vrJ8t76yo76yqLe+stu+suC3vrLzvrL7vrYDvrYHvrYPvrYTvrYYt766x76+TLe+0ve+1kC3vto/vtpIt77eH77ewLe+3u++5sC3vubTvubYt77u877yhLe+8uu+9gS3vvZrvvaYt776+77+CLe+/h++/ii3vv4/vv5It77+X77+aLe+/nCIsaT0i4oCM4oCNwrfMgC3Nr86H0oMt0ofWkS3Wvda/14HXgteE14XXh9iQLdia2Yst2anZsNuWLduc258t26Tbp9uo26ot263bsC3budyR3LAt3Yrepi3esN+ALd+J36st37PfveCgli3goJngoJst4KCj4KClLeCgp+CgqS3goK3goZkt4KGb4KKYLeCin+Cjii3go6Hgo6Mt4KSD4KS6LeCkvOCkvi3gpY/gpZEt4KWX4KWi4KWj4KWmLeClr+CmgS3gpoPgprzgpr4t4KeE4KeH4KeI4KeLLeCnjeCnl+CnouCno+Cnpi3gp6/gp77gqIEt4KiD4Ki84Ki+LeCpguCph+CpiOCpiy3gqY3gqZHgqaYt4Kmx4Km14KqBLeCqg+CqvOCqvi3gq4Xgq4ct4KuJ4KuLLeCrjeCrouCro+Crpi3gq6/gq7ot4Ku/4KyBLeCsg+CsvOCsvi3grYTgrYfgrYjgrYst4K2N4K2VLeCtl+CtouCto+Ctpi3gra/groLgrr4t4K+C4K+GLeCviOCvii3gr43gr5fgr6Yt4K+v4LCALeCwhOCwvOCwvi3gsYTgsYYt4LGI4LGKLeCxjeCxleCxluCxouCxo+Cxpi3gsa/gsoEt4LKD4LK84LK+LeCzhOCzhi3gs4jgs4ot4LON4LOV4LOW4LOi4LOj4LOmLeCzr+Czs+C0gC3gtIPgtLvgtLzgtL4t4LWE4LWGLeC1iOC1ii3gtY3gtZfgtaLgtaPgtaYt4LWv4LaBLeC2g+C3iuC3jy3gt5Tgt5bgt5gt4Lef4LemLeC3r+C3suC3s+C4seC4tC3guLrguYct4LmO4LmQLeC5meC6seC6tC3gurzgu4gt4LuO4LuQLeC7meC8mOC8meC8oC3gvKngvLXgvLfgvLngvL7gvL/gvbEt4L6E4L6G4L6H4L6NLeC+l+C+mS3gvrzgv4bhgKst4YC+4YGALeGBieGBli3hgZnhgZ4t4YGg4YGiLeGBpOGBpy3hga3hgbEt4YG04YKCLeGCjeGCjy3hgp3hjZ0t4Y2f4Y2pLeGNseGcki3hnJXhnLIt4Zy04Z2S4Z2T4Z2y4Z2z4Z60LeGfk+GfneGfoC3hn6nhoIst4aCN4aCPLeGgmeGiqeGkoC3hpKvhpLAt4aS74aWGLeGlj+GnkC3hp5rhqJct4aib4amVLeGpnuGpoC3hqbzhqb8t4aqJ4aqQLeGqmeGqsC3hqr3hqr8t4auO4ayALeGshOGstC3hrYThrZAt4a2Z4a2rLeGts+GugC3hroLhrqEt4a6t4a6wLeGuueGvpi3hr7PhsKQt4bC34bGALeGxieGxkC3hsZnhs5At4bOS4bOULeGzqOGzreGztOGzty3hs7nht4At4be/4oC/4oGA4oGU4oOQLeKDnOKDoeKDpS3ig7Dis68t4rOx4rW/4regLeK3v+OAqi3jgK/jgpnjgprqmKAt6pip6pmv6pm0LeqZveqanuqan+qbsOqbseqgguqghuqgi+qgoy3qoKfqoKzqooDqooHqorQt6qOF6qOQLeqjmeqjoC3qo7Hqo78t6qSJ6qSmLeqkreqlhy3qpZPqpoAt6qaD6qazLeqngOqnkC3qp5nqp6Xqp7At6qe56qipLeqotuqpg+qpjOqpjeqpkC3qqZnqqbst6qm96qqw6qqyLeqqtOqqt+qquOqqvuqqv+qrgeqrqy3qq6/qq7Xqq7bqr6Mt6q+q6q+s6q+t6q+wLeqvue+snu+4gC3vuI/vuKAt77iv77iz77i077mNLe+5j++8kC3vvJnvvL8iO2NvbnN0IGE9bmV3IFJlZ0V4cCgiWyIrcisiXSIpLG89bmV3IFJlZ0V4cCgiWyIrcitpKyJdIik7cj1pPW51bGw7Y29uc3Qgcz1bMCwxMSwyLDI1LDIsMTgsMiwxLDIsMTQsMywxMywzNSwxMjIsNzAsNTIsMjY4LDI4LDQsNDgsNDgsMzEsMTQsMjksNiwzNywxMSwyOSwzLDM1LDUsNywyLDQsNDMsMTU3LDE5LDM1LDUsMzUsNSwzOSw5LDUxLDEzLDEwLDIsMTQsMiw2LDIsMSwyLDEwLDIsMTQsMiw2LDIsMSw2OCwzMTAsMTAsMjEsMTEsNywyNSw1LDIsNDEsMiw4LDcwLDUsMywwLDIsNDMsMiwxLDQsMCwzLDIyLDExLDIyLDEwLDMwLDY2LDE4LDIsMSwxMSwyMSwxMSwyNSw3MSw1NSw3LDEsNjUsMCwxNiwzLDIsMiwyLDI4LDQzLDI4LDQsMjgsMzYsNywyLDI3LDI4LDUzLDExLDIxLDExLDE4LDE0LDE3LDExMSw3Miw1Niw1MCwxNCw1MCwxNCwzNSwzNDksNDEsNywxLDc5LDI4LDExLDAsOSwyMSw0MywxNyw0NywyMCwyOCwyMiwxMyw1Miw1OCwxLDMsMCwxNCw0NCwzMywyNCwyNywzNSwzMCwwLDMsMCw5LDM0LDQsMCwxMyw0NywxNSwzLDIyLDAsMiwwLDM2LDE3LDIsMjQsMjAsMSw2NCw2LDIsMCwyLDMsMiwxNCwyLDksOCw0NiwzOSw3LDMsMSwzLDIxLDIsNiwyLDEsMiw0LDQsMCwxOSwwLDEzLDQsMTU5LDUyLDE5LDMsMjEsMiwzMSw0NywyMSwxLDIsMCwxODUsNDYsNDIsMywzNyw0NywyMSwwLDYwLDQyLDE0LDAsNzIsMjYsMzgsNiwxODYsNDMsMTE3LDYzLDMyLDcsMywwLDMsNywyLDEsMiwyMywxNiwwLDIsMCw5NSw3LDMsMzgsMTcsMCwyLDAsMjksMCwxMSwzOSw4LDAsMjIsMCwxMiw0NSwyMCwwLDE5LDcyLDI2NCw4LDIsMzYsMTgsMCw1MCwyOSwxMTMsNiwyLDEsMiwzNywyMiwwLDI2LDUsMiwxLDIsMzEsMTUsMCwzMjgsMTgsMTYsMCwyLDEyLDIsMzMsMTI1LDAsODAsOTIxLDEwMywxMTAsMTgsMTk1LDI2MzcsOTYsMTYsMTA3MSwxOCw1LDQwMjYsNTgyLDg2MzQsNTY4LDgsMzAsMTgsNzgsMTgsMjksMTksNDcsMTcsMywzMiwyMCw2LDE4LDY4OSw2MywxMjksNzQsNiwwLDY3LDEyLDY1LDEsMiwwLDI5LDYxMzUsOSwxMjM3LDQzLDgsODkzNiwzLDIsNiwyLDEsMiwyOTAsMTYsMCwzMCwyLDMsMCwxNSwzLDksMzk1LDIzMDksMTA2LDYsMTIsNCw4LDgsOSw1OTkxLDg0LDIsNzAsMiwxLDMsMCwzLDEsMywzLDIsMTEsMiwwLDIsNiwyLDY0LDIsMywzLDcsMiw2LDIsMjcsMiwzLDIsNCwyLDAsNCw2LDIsMzM5LDMsMjQsMiwyNCwyLDMwLDIsMjQsMiwzMCwyLDI0LDIsMzAsMiwyNCwyLDMwLDIsMjQsMiw3LDE4NDUsMzAsNyw1LDI2Miw2MSwxNDcsNDQsMTEsNiwxNywwLDMyMiwyOSwxOSw0Myw0ODUsMjcsNzU3LDYsMiwzLDIsMSwyLDE0LDIsMTk2LDYwLDY3LDgsMCwxMjA1LDMsMiwyNiwyLDEsMiwwLDMsMCwyLDksMiwzLDIsMCwyLDAsNywwLDUsMCwyLDAsMiwwLDIsMiwyLDEsMiwwLDMsMCwyLDAsMiwwLDIsMCwyLDAsMiwxLDIsMCwzLDMsMiw2LDIsMywyLDMsMiwwLDIsOSwyLDE2LDYsMiwyLDQsMiwxNiw0NDIxLDQyNzE5LDMzLDQxNTMsNywyMjEsMyw1NzYxLDE1LDc0NzIsMzEwNCw1NDEsMTUwNyw0OTM4LDYsNDE5MV0sbD1bNTA5LDAsMjI3LDAsMTUwLDQsMjk0LDksMTM2OCwyLDIsMSw2LDMsNDEsMiw1LDAsMTY2LDEsNTc0LDMsOSw5LDM3MCwxLDgxLDIsNzEsMTAsNTAsMywxMjMsMiw1NCwxNCwzMiwxMCwzLDEsMTEsMyw0NiwxMCw4LDAsNDYsOSw3LDIsMzcsMTMsMiw5LDYsMSw0NSwwLDEzLDIsNDksMTMsOSwzLDIsMTEsODMsMTEsNywwLDMsMCwxNTgsMTEsNiw5LDcsMyw1NiwxLDIsNiwzLDEsMywyLDEwLDAsMTEsMSwzLDYsNCw0LDE5MywxNywxMCw5LDUsMCw4MiwxOSwxMyw5LDIxNCw2LDMsOCwyOCwxLDgzLDE2LDE2LDksODIsMTIsOSw5LDg0LDE0LDUsOSwyNDMsMTQsMTY2LDksNzEsNSwyLDEsMywzLDIsMCwyLDEsMTMsOSwxMjAsNiwzLDYsNCwwLDI5LDksNDEsNiwyLDMsOSwwLDEwLDEwLDQ3LDE1LDQwNiw3LDIsNywxNyw5LDU3LDIxLDIsMTMsMTIzLDUsNCwwLDIsMSwyLDYsMiwwLDksOSw0OSw0LDIsMSwyLDQsOSw5LDMzMCwzLDEwLDEsMiwwLDQ5LDYsNCw0LDE0LDksNTM1MSwwLDcsMTQsMTM4MzUsOSw4Nyw5LDM5LDQsNjAsNiwyNiw5LDEwMTQsMCwyLDU0LDgsMyw4MiwwLDEyLDEsMTk2MjgsMSw0NzA2LDQ1LDMsMjIsNTQzLDQsNCw1LDksNywzLDYsMzEsMywxNDksMiwxNDE4LDQ5LDUxMyw1NCw1LDQ5LDksMCwxNSwwLDIzLDQsMiwxNCwxMzYxLDYsMiwxNiwzLDYsMiwxLDIsNCwxMDEsMCwxNjEsNiwxMCw5LDM1NywwLDYyLDEzLDQ5OSwxMyw5ODMsNiwxMTAsNiw2LDksNDc1OSw5LDc4NzcxOSwyMzldO2Z1bmN0aW9uIHUoZSx0KXtsZXQgbj02NTUzNjtmb3IobGV0IHI9MCxpPXQubGVuZ3RoO3I8aTtyKz0yKXtpZihuKz10W3JdLG4+ZSlyZXR1cm4hMTtpZihuKz10W3IrMV0sbj49ZSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBwKGUpe3JldHVybiBlPDY1PzM2PT09ZTplPD05MHx8KGU8OTc/OTU9PT1lOmU8PTEyMnx8KGU8PTY1NTM1P2U+PTE3MCYmYS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpOnUoZSxzKSkpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGU8NDg/MzY9PT1lOmU8NTh8fCEoZTw2NSkmJihlPD05MHx8KGU8OTc/OTU9PT1lOmU8PTEyMnx8KGU8PTY1NTM1P2U+PTE3MCYmby50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpOnUoZSxzKXx8dShlLGwpKSkpfX0sZTNkODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4hMDtjb25zdCBuPXIuUExBQ0VIT0xERVJTX0FMSUFTW2VdO2lmKG4pZm9yKGNvbnN0IGUgb2YgbilpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHI9bigiYjk3OCIpfSxlYWQ2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbiBlKHQpe2NvbnN0IG49bmV3IE1hcCxhPW5ldyBNYXAsbz1uZXcgU2V0LHM9W107Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKyspe2NvbnN0IHU9dFtsXTtpZih1JiYhKHMuaW5kZXhPZih1KT49MCkpe2lmKCgwLHIuaXNBbnlUeXBlQW5ub3RhdGlvbikodSkpcmV0dXJuW3VdO2lmKCgwLHIuaXNGbG93QmFzZUFubm90YXRpb24pKHUpKWEuc2V0KHUudHlwZSx1KTtlbHNlIGlmKCgwLHIuaXNVbmlvblR5cGVBbm5vdGF0aW9uKSh1KSlvLmhhcyh1LnR5cGVzKXx8KHQ9dC5jb25jYXQodS50eXBlcyksby5hZGQodS50eXBlcykpO2Vsc2UgaWYoKDAsci5pc0dlbmVyaWNUeXBlQW5ub3RhdGlvbikodSkpe2NvbnN0IHQ9aSh1LmlkKTtpZihuLmhhcyh0KSl7bGV0IHI9bi5nZXQodCk7ci50eXBlUGFyYW1ldGVycz91LnR5cGVQYXJhbWV0ZXJzJiYoci50eXBlUGFyYW1ldGVycy5wYXJhbXM9ZShyLnR5cGVQYXJhbWV0ZXJzLnBhcmFtcy5jb25jYXQodS50eXBlUGFyYW1ldGVycy5wYXJhbXMpKSk6cj11LnR5cGVQYXJhbWV0ZXJzfWVsc2Ugbi5zZXQodCx1KX1lbHNlIHMucHVzaCh1KX19Zm9yKGNvbnN0WyxlXW9mIGEpcy5wdXNoKGUpO2Zvcihjb25zdFssZV1vZiBuKXMucHVzaChlKTtyZXR1cm4gc307dmFyIHI9bigiYzQ4NSIpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuKDAsci5pc0lkZW50aWZpZXIpKGUpP2UubmFtZTpgJHtlLmlkLm5hbWV9LiR7aShlLnF1YWxpZmljYXRpb24pfWB9fSxlYjViOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYW55VHlwZUFubm90YXRpb249ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQW55VHlwZUFubm90YXRpb24ifX0sdC5hcmd1bWVudFBsYWNlaG9sZGVyPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkFyZ3VtZW50UGxhY2Vob2xkZXIifX0sdC5hcnJheUV4cHJlc3Npb249ZnVuY3Rpb24oZT1bXSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiQXJyYXlFeHByZXNzaW9uIixlbGVtZW50czplfSl9LHQuYXJyYXlQYXR0ZXJuPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkFycmF5UGF0dGVybiIsZWxlbWVudHM6ZX0pfSx0LmFycmF5VHlwZUFubm90YXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiQXJyYXlUeXBlQW5ub3RhdGlvbiIsZWxlbWVudFR5cGU6ZX0pfSx0LmFycm93RnVuY3Rpb25FeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCxuPSExKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIscGFyYW1zOmUsYm9keTp0LGFzeW5jOm4sZXhwcmVzc2lvbjpudWxsfSl9LHQuYXNzaWdubWVudEV4cHJlc3Npb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkFzc2lnbm1lbnRFeHByZXNzaW9uIixvcGVyYXRvcjplLGxlZnQ6dCxyaWdodDpufSl9LHQuYXNzaWdubWVudFBhdHRlcm49ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJBc3NpZ25tZW50UGF0dGVybiIsbGVmdDplLHJpZ2h0OnR9KX0sdC5hd2FpdEV4cHJlc3Npb249ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiQXdhaXRFeHByZXNzaW9uIixhcmd1bWVudDplfSl9LHQuYmlnSW50TGl0ZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJCaWdJbnRMaXRlcmFsIix2YWx1ZTplfSl9LHQuYmluYXJ5RXhwcmVzc2lvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiQmluYXJ5RXhwcmVzc2lvbiIsb3BlcmF0b3I6ZSxsZWZ0OnQscmlnaHQ6bn0pfSx0LmJpbmRFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiQmluZEV4cHJlc3Npb24iLG9iamVjdDplLGNhbGxlZTp0fSl9LHQuYmxvY2tTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0PVtdKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJCbG9ja1N0YXRlbWVudCIsYm9keTplLGRpcmVjdGl2ZXM6dH0pfSx0LmJvb2xlYW5MaXRlcmFsPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkJvb2xlYW5MaXRlcmFsIix2YWx1ZTplfSl9LHQuYm9vbGVhbkxpdGVyYWxUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJCb29sZWFuTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIix2YWx1ZTplfSl9LHQuYm9vbGVhblR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJvb2xlYW5UeXBlQW5ub3RhdGlvbiJ9fSx0LmJyZWFrU3RhdGVtZW50PWZ1bmN0aW9uKGU9bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiQnJlYWtTdGF0ZW1lbnQiLGxhYmVsOmV9KX0sdC5jYWxsRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkNhbGxFeHByZXNzaW9uIixjYWxsZWU6ZSxhcmd1bWVudHM6dH0pfSx0LmNhdGNoQ2xhdXNlPWZ1bmN0aW9uKGU9bnVsbCx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJDYXRjaENsYXVzZSIscGFyYW06ZSxib2R5OnR9KX0sdC5jbGFzc0FjY2Vzc29yUHJvcGVydHk9ZnVuY3Rpb24oZSx0PW51bGwsbj1udWxsLGk9bnVsbCxhPSExLG89ITEpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkNsYXNzQWNjZXNzb3JQcm9wZXJ0eSIsa2V5OmUsdmFsdWU6dCx0eXBlQW5ub3RhdGlvbjpuLGRlY29yYXRvcnM6aSxjb21wdXRlZDphLHN0YXRpYzpvfSl9LHQuY2xhc3NCb2R5PWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkNsYXNzQm9keSIsYm9keTplfSl9LHQuY2xhc3NEZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQ9bnVsbCxuLGk9bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiQ2xhc3NEZWNsYXJhdGlvbiIsaWQ6ZSxzdXBlckNsYXNzOnQsYm9keTpuLGRlY29yYXRvcnM6aX0pfSx0LmNsYXNzRXhwcmVzc2lvbj1mdW5jdGlvbihlPW51bGwsdD1udWxsLG4saT1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJDbGFzc0V4cHJlc3Npb24iLGlkOmUsc3VwZXJDbGFzczp0LGJvZHk6bixkZWNvcmF0b3JzOml9KX0sdC5jbGFzc0ltcGxlbWVudHM9ZnVuY3Rpb24oZSx0PW51bGwpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkNsYXNzSW1wbGVtZW50cyIsaWQ6ZSx0eXBlUGFyYW1ldGVyczp0fSl9LHQuY2xhc3NNZXRob2Q9ZnVuY3Rpb24oZT0ibWV0aG9kIix0LG4saSxhPSExLG89ITEscz0hMSxsPSExKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJDbGFzc01ldGhvZCIsa2luZDplLGtleTp0LHBhcmFtczpuLGJvZHk6aSxjb21wdXRlZDphLHN0YXRpYzpvLGdlbmVyYXRvcjpzLGFzeW5jOmx9KX0sdC5jbGFzc1ByaXZhdGVNZXRob2Q9ZnVuY3Rpb24oZT0ibWV0aG9kIix0LG4saSxhPSExKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJDbGFzc1ByaXZhdGVNZXRob2QiLGtpbmQ6ZSxrZXk6dCxwYXJhbXM6bixib2R5Omksc3RhdGljOmF9KX0sdC5jbGFzc1ByaXZhdGVQcm9wZXJ0eT1mdW5jdGlvbihlLHQ9bnVsbCxuPW51bGwsaT0hMSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiQ2xhc3NQcml2YXRlUHJvcGVydHkiLGtleTplLHZhbHVlOnQsZGVjb3JhdG9yczpuLHN0YXRpYzppfSl9LHQuY2xhc3NQcm9wZXJ0eT1mdW5jdGlvbihlLHQ9bnVsbCxuPW51bGwsaT1udWxsLGE9ITEsbz0hMSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiQ2xhc3NQcm9wZXJ0eSIsa2V5OmUsdmFsdWU6dCx0eXBlQW5ub3RhdGlvbjpuLGRlY29yYXRvcnM6aSxjb21wdXRlZDphLHN0YXRpYzpvfSl9LHQuY29uZGl0aW9uYWxFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJDb25kaXRpb25hbEV4cHJlc3Npb24iLHRlc3Q6ZSxjb25zZXF1ZW50OnQsYWx0ZXJuYXRlOm59KX0sdC5jb250aW51ZVN0YXRlbWVudD1mdW5jdGlvbihlPW51bGwpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkNvbnRpbnVlU3RhdGVtZW50IixsYWJlbDplfSl9LHQuZGVidWdnZXJTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiRGVidWdnZXJTdGF0ZW1lbnQifX0sdC5kZWNpbWFsTGl0ZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJEZWNpbWFsTGl0ZXJhbCIsdmFsdWU6ZX0pfSx0LmRlY2xhcmVDbGFzcz1mdW5jdGlvbihlLHQ9bnVsbCxuPW51bGwsaSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRGVjbGFyZUNsYXNzIixpZDplLHR5cGVQYXJhbWV0ZXJzOnQsZXh0ZW5kczpuLGJvZHk6aX0pfSx0LmRlY2xhcmVFeHBvcnRBbGxEZWNsYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJEZWNsYXJlRXhwb3J0QWxsRGVjbGFyYXRpb24iLHNvdXJjZTplfSl9LHQuZGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uPWZ1bmN0aW9uKGU9bnVsbCx0PW51bGwsbj1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJEZWNsYXJlRXhwb3J0RGVjbGFyYXRpb24iLGRlY2xhcmF0aW9uOmUsc3BlY2lmaWVyczp0LHNvdXJjZTpufSl9LHQuZGVjbGFyZUZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkRlY2xhcmVGdW5jdGlvbiIsaWQ6ZX0pfSx0LmRlY2xhcmVJbnRlcmZhY2U9ZnVuY3Rpb24oZSx0PW51bGwsbj1udWxsLGkpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkRlY2xhcmVJbnRlcmZhY2UiLGlkOmUsdHlwZVBhcmFtZXRlcnM6dCxleHRlbmRzOm4sYm9keTppfSl9LHQuZGVjbGFyZU1vZHVsZT1mdW5jdGlvbihlLHQsbj1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJEZWNsYXJlTW9kdWxlIixpZDplLGJvZHk6dCxraW5kOm59KX0sdC5kZWNsYXJlTW9kdWxlRXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJEZWNsYXJlTW9kdWxlRXhwb3J0cyIsdHlwZUFubm90YXRpb246ZX0pfSx0LmRlY2xhcmVPcGFxdWVUeXBlPWZ1bmN0aW9uKGUsdD1udWxsLG49bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRGVjbGFyZU9wYXF1ZVR5cGUiLGlkOmUsdHlwZVBhcmFtZXRlcnM6dCxzdXBlcnR5cGU6bn0pfSx0LmRlY2xhcmVUeXBlQWxpYXM9ZnVuY3Rpb24oZSx0PW51bGwsbil7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRGVjbGFyZVR5cGVBbGlhcyIsaWQ6ZSx0eXBlUGFyYW1ldGVyczp0LHJpZ2h0Om59KX0sdC5kZWNsYXJlVmFyaWFibGU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRGVjbGFyZVZhcmlhYmxlIixpZDplfSl9LHQuZGVjbGFyZWRQcmVkaWNhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRGVjbGFyZWRQcmVkaWNhdGUiLHZhbHVlOmV9KX0sdC5kZWNvcmF0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRGVjb3JhdG9yIixleHByZXNzaW9uOmV9KX0sdC5kaXJlY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRGlyZWN0aXZlIix2YWx1ZTplfSl9LHQuZGlyZWN0aXZlTGl0ZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJEaXJlY3RpdmVMaXRlcmFsIix2YWx1ZTplfSl9LHQuZG9FeHByZXNzaW9uPWZ1bmN0aW9uKGUsdD0hMSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRG9FeHByZXNzaW9uIixib2R5OmUsYXN5bmM6dH0pfSx0LmRvV2hpbGVTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJEb1doaWxlU3RhdGVtZW50Iix0ZXN0OmUsYm9keTp0fSl9LHQuZW1wdHlTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiRW1wdHlTdGF0ZW1lbnQifX0sdC5lbXB0eVR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkVtcHR5VHlwZUFubm90YXRpb24ifX0sdC5lbnVtQm9vbGVhbkJvZHk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRW51bUJvb2xlYW5Cb2R5IixtZW1iZXJzOmUsZXhwbGljaXRUeXBlOm51bGwsaGFzVW5rbm93bk1lbWJlcnM6bnVsbH0pfSx0LmVudW1Cb29sZWFuTWVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkVudW1Cb29sZWFuTWVtYmVyIixpZDplLGluaXQ6bnVsbH0pfSx0LmVudW1EZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkVudW1EZWNsYXJhdGlvbiIsaWQ6ZSxib2R5OnR9KX0sdC5lbnVtRGVmYXVsdGVkTWVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkVudW1EZWZhdWx0ZWRNZW1iZXIiLGlkOmV9KX0sdC5lbnVtTnVtYmVyQm9keT1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJFbnVtTnVtYmVyQm9keSIsbWVtYmVyczplLGV4cGxpY2l0VHlwZTpudWxsLGhhc1Vua25vd25NZW1iZXJzOm51bGx9KX0sdC5lbnVtTnVtYmVyTWVtYmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRW51bU51bWJlck1lbWJlciIsaWQ6ZSxpbml0OnR9KX0sdC5lbnVtU3RyaW5nQm9keT1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJFbnVtU3RyaW5nQm9keSIsbWVtYmVyczplLGV4cGxpY2l0VHlwZTpudWxsLGhhc1Vua25vd25NZW1iZXJzOm51bGx9KX0sdC5lbnVtU3RyaW5nTWVtYmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRW51bVN0cmluZ01lbWJlciIsaWQ6ZSxpbml0OnR9KX0sdC5lbnVtU3ltYm9sQm9keT1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJFbnVtU3ltYm9sQm9keSIsbWVtYmVyczplLGhhc1Vua25vd25NZW1iZXJzOm51bGx9KX0sdC5leGlzdHNUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJFeGlzdHNUeXBlQW5ub3RhdGlvbiJ9fSx0LmV4cG9ydEFsbERlY2xhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkV4cG9ydEFsbERlY2xhcmF0aW9uIixzb3VyY2U6ZX0pfSx0LmV4cG9ydERlZmF1bHREZWNsYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iLGRlY2xhcmF0aW9uOmV9KX0sdC5leHBvcnREZWZhdWx0U3BlY2lmaWVyPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkV4cG9ydERlZmF1bHRTcGVjaWZpZXIiLGV4cG9ydGVkOmV9KX0sdC5leHBvcnROYW1lZERlY2xhcmF0aW9uPWZ1bmN0aW9uKGU9bnVsbCx0PVtdLG49bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiIsZGVjbGFyYXRpb246ZSxzcGVjaWZpZXJzOnQsc291cmNlOm59KX0sdC5leHBvcnROYW1lc3BhY2VTcGVjaWZpZXI9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyIixleHBvcnRlZDplfSl9LHQuZXhwb3J0U3BlY2lmaWVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRXhwb3J0U3BlY2lmaWVyIixsb2NhbDplLGV4cG9ydGVkOnR9KX0sdC5leHByZXNzaW9uU3RhdGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkV4cHJlc3Npb25TdGF0ZW1lbnQiLGV4cHJlc3Npb246ZX0pfSx0LmZpbGU9ZnVuY3Rpb24oZSx0PW51bGwsbj1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJGaWxlIixwcm9ncmFtOmUsY29tbWVudHM6dCx0b2tlbnM6bn0pfSx0LmZvckluU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJGb3JJblN0YXRlbWVudCIsbGVmdDplLHJpZ2h0OnQsYm9keTpufSl9LHQuZm9yT2ZTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0LG4saT0hMSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRm9yT2ZTdGF0ZW1lbnQiLGxlZnQ6ZSxyaWdodDp0LGJvZHk6bixhd2FpdDppfSl9LHQuZm9yU3RhdGVtZW50PWZ1bmN0aW9uKGU9bnVsbCx0PW51bGwsbj1udWxsLGkpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkZvclN0YXRlbWVudCIsaW5pdDplLHRlc3Q6dCx1cGRhdGU6bixib2R5Oml9KX0sdC5mdW5jdGlvbkRlY2xhcmF0aW9uPWZ1bmN0aW9uKGU9bnVsbCx0LG4saT0hMSxhPSExKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJGdW5jdGlvbkRlY2xhcmF0aW9uIixpZDplLHBhcmFtczp0LGJvZHk6bixnZW5lcmF0b3I6aSxhc3luYzphfSl9LHQuZnVuY3Rpb25FeHByZXNzaW9uPWZ1bmN0aW9uKGU9bnVsbCx0LG4saT0hMSxhPSExKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJGdW5jdGlvbkV4cHJlc3Npb24iLGlkOmUscGFyYW1zOnQsYm9keTpuLGdlbmVyYXRvcjppLGFzeW5jOmF9KX0sdC5mdW5jdGlvblR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGU9bnVsbCx0LG49bnVsbCxpKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIix0eXBlUGFyYW1ldGVyczplLHBhcmFtczp0LHJlc3Q6bixyZXR1cm5UeXBlOml9KX0sdC5mdW5jdGlvblR5cGVQYXJhbT1mdW5jdGlvbihlPW51bGwsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiRnVuY3Rpb25UeXBlUGFyYW0iLG5hbWU6ZSx0eXBlQW5ub3RhdGlvbjp0fSl9LHQuZ2VuZXJpY1R5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdD1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJHZW5lcmljVHlwZUFubm90YXRpb24iLGlkOmUsdHlwZVBhcmFtZXRlcnM6dH0pfSx0LmlkZW50aWZpZXI9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSWRlbnRpZmllciIsbmFtZTplfSl9LHQuaWZTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0LG49bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSWZTdGF0ZW1lbnQiLHRlc3Q6ZSxjb25zZXF1ZW50OnQsYWx0ZXJuYXRlOm59KX0sdC5pbXBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiSW1wb3J0In19LHQuaW1wb3J0QXR0cmlidXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSW1wb3J0QXR0cmlidXRlIixrZXk6ZSx2YWx1ZTp0fSl9LHQuaW1wb3J0RGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJJbXBvcnREZWNsYXJhdGlvbiIsc3BlY2lmaWVyczplLHNvdXJjZTp0fSl9LHQuaW1wb3J0RGVmYXVsdFNwZWNpZmllcj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIixsb2NhbDplfSl9LHQuaW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciIsbG9jYWw6ZX0pfSx0LmltcG9ydFNwZWNpZmllcj1mdW5jdGlvbihlLHQpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkltcG9ydFNwZWNpZmllciIsbG9jYWw6ZSxpbXBvcnRlZDp0fSl9LHQuaW5kZXhlZEFjY2Vzc1R5cGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJJbmRleGVkQWNjZXNzVHlwZSIsb2JqZWN0VHlwZTplLGluZGV4VHlwZTp0fSl9LHQuaW5mZXJyZWRQcmVkaWNhdGU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiSW5mZXJyZWRQcmVkaWNhdGUifX0sdC5pbnRlcmZhY2VEZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQ9bnVsbCxuPW51bGwsaSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSW50ZXJmYWNlRGVjbGFyYXRpb24iLGlkOmUsdHlwZVBhcmFtZXRlcnM6dCxleHRlbmRzOm4sYm9keTppfSl9LHQuaW50ZXJmYWNlRXh0ZW5kcz1mdW5jdGlvbihlLHQ9bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSW50ZXJmYWNlRXh0ZW5kcyIsaWQ6ZSx0eXBlUGFyYW1ldGVyczp0fSl9LHQuaW50ZXJmYWNlVHlwZUFubm90YXRpb249ZnVuY3Rpb24oZT1udWxsLHQpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkludGVyZmFjZVR5cGVBbm5vdGF0aW9uIixleHRlbmRzOmUsYm9keTp0fSl9LHQuaW50ZXJwcmV0ZXJEaXJlY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSW50ZXJwcmV0ZXJEaXJlY3RpdmUiLHZhbHVlOmV9KX0sdC5pbnRlcnNlY3Rpb25UeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJJbnRlcnNlY3Rpb25UeXBlQW5ub3RhdGlvbiIsdHlwZXM6ZX0pfSx0LmpTWEF0dHJpYnV0ZT10LmpzeEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQ9bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSlNYQXR0cmlidXRlIixuYW1lOmUsdmFsdWU6dH0pfSx0LmpTWENsb3NpbmdFbGVtZW50PXQuanN4Q2xvc2luZ0VsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSlNYQ2xvc2luZ0VsZW1lbnQiLG5hbWU6ZX0pfSx0LmpTWENsb3NpbmdGcmFnbWVudD10LmpzeENsb3NpbmdGcmFnbWVudD1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJKU1hDbG9zaW5nRnJhZ21lbnQifX0sdC5qU1hFbGVtZW50PXQuanN4RWxlbWVudD1mdW5jdGlvbihlLHQ9bnVsbCxuLGk9bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSlNYRWxlbWVudCIsb3BlbmluZ0VsZW1lbnQ6ZSxjbG9zaW5nRWxlbWVudDp0LGNoaWxkcmVuOm4sc2VsZkNsb3Npbmc6aX0pfSx0LmpTWEVtcHR5RXhwcmVzc2lvbj10LmpzeEVtcHR5RXhwcmVzc2lvbj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJKU1hFbXB0eUV4cHJlc3Npb24ifX0sdC5qU1hFeHByZXNzaW9uQ29udGFpbmVyPXQuanN4RXhwcmVzc2lvbkNvbnRhaW5lcj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJKU1hFeHByZXNzaW9uQ29udGFpbmVyIixleHByZXNzaW9uOmV9KX0sdC5qU1hGcmFnbWVudD10LmpzeEZyYWdtZW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJKU1hGcmFnbWVudCIsb3BlbmluZ0ZyYWdtZW50OmUsY2xvc2luZ0ZyYWdtZW50OnQsY2hpbGRyZW46bn0pfSx0LmpTWElkZW50aWZpZXI9dC5qc3hJZGVudGlmaWVyPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IkpTWElkZW50aWZpZXIiLG5hbWU6ZX0pfSx0LmpTWE1lbWJlckV4cHJlc3Npb249dC5qc3hNZW1iZXJFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSlNYTWVtYmVyRXhwcmVzc2lvbiIsb2JqZWN0OmUscHJvcGVydHk6dH0pfSx0LmpTWE5hbWVzcGFjZWROYW1lPXQuanN4TmFtZXNwYWNlZE5hbWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJKU1hOYW1lc3BhY2VkTmFtZSIsbmFtZXNwYWNlOmUsbmFtZTp0fSl9LHQualNYT3BlbmluZ0VsZW1lbnQ9dC5qc3hPcGVuaW5nRWxlbWVudD1mdW5jdGlvbihlLHQsbj0hMSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSlNYT3BlbmluZ0VsZW1lbnQiLG5hbWU6ZSxhdHRyaWJ1dGVzOnQsc2VsZkNsb3Npbmc6bn0pfSx0LmpTWE9wZW5pbmdGcmFnbWVudD10LmpzeE9wZW5pbmdGcmFnbWVudD1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJKU1hPcGVuaW5nRnJhZ21lbnQifX0sdC5qU1hTcHJlYWRBdHRyaWJ1dGU9dC5qc3hTcHJlYWRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSlNYU3ByZWFkQXR0cmlidXRlIixhcmd1bWVudDplfSl9LHQualNYU3ByZWFkQ2hpbGQ9dC5qc3hTcHJlYWRDaGlsZD1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJKU1hTcHJlYWRDaGlsZCIsZXhwcmVzc2lvbjplfSl9LHQualNYVGV4dD10LmpzeFRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiSlNYVGV4dCIsdmFsdWU6ZX0pfSx0LmxhYmVsZWRTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJMYWJlbGVkU3RhdGVtZW50IixsYWJlbDplLGJvZHk6dH0pfSx0LmxvZ2ljYWxFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJMb2dpY2FsRXhwcmVzc2lvbiIsb3BlcmF0b3I6ZSxsZWZ0OnQscmlnaHQ6bn0pfSx0Lm1lbWJlckV4cHJlc3Npb249ZnVuY3Rpb24oZSx0LG49ITEsaT1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJNZW1iZXJFeHByZXNzaW9uIixvYmplY3Q6ZSxwcm9wZXJ0eTp0LGNvbXB1dGVkOm4sb3B0aW9uYWw6aX0pfSx0Lm1ldGFQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6Ik1ldGFQcm9wZXJ0eSIsbWV0YTplLHByb3BlcnR5OnR9KX0sdC5taXhlZFR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6Ik1peGVkVHlwZUFubm90YXRpb24ifX0sdC5tb2R1bGVFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6Ik1vZHVsZUV4cHJlc3Npb24iLGJvZHk6ZX0pfSx0Lm5ld0V4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJOZXdFeHByZXNzaW9uIixjYWxsZWU6ZSxhcmd1bWVudHM6dH0pfSx0Lm5vb3A9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiTm9vcCJ9fSx0Lm51bGxMaXRlcmFsPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6Ik51bGxMaXRlcmFsIn19LHQubnVsbExpdGVyYWxUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJOdWxsTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIn19LHQubnVsbGFibGVUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJOdWxsYWJsZVR5cGVBbm5vdGF0aW9uIix0eXBlQW5ub3RhdGlvbjplfSl9LHQubnVtYmVyTGl0ZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4oMCxpLmRlZmF1bHQpKCJOdW1iZXJMaXRlcmFsIiwiTnVtZXJpY0xpdGVyYWwiLCJUaGUgbm9kZSB0eXBlICIpLGEoZSl9LHQubnVtYmVyTGl0ZXJhbFR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6Ik51bWJlckxpdGVyYWxUeXBlQW5ub3RhdGlvbiIsdmFsdWU6ZX0pfSx0Lm51bWJlclR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6Ik51bWJlclR5cGVBbm5vdGF0aW9uIn19LHQubnVtZXJpY0xpdGVyYWw9YSx0Lm9iamVjdEV4cHJlc3Npb249ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiT2JqZWN0RXhwcmVzc2lvbiIscHJvcGVydGllczplfSl9LHQub2JqZWN0TWV0aG9kPWZ1bmN0aW9uKGU9Im1ldGhvZCIsdCxuLGksYT0hMSxvPSExLHM9ITEpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6Ik9iamVjdE1ldGhvZCIsa2luZDplLGtleTp0LHBhcmFtczpuLGJvZHk6aSxjb21wdXRlZDphLGdlbmVyYXRvcjpvLGFzeW5jOnN9KX0sdC5vYmplY3RQYXR0ZXJuPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6Ik9iamVjdFBhdHRlcm4iLHByb3BlcnRpZXM6ZX0pfSx0Lm9iamVjdFByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuPSExLGk9ITEsYT1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJPYmplY3RQcm9wZXJ0eSIsa2V5OmUsdmFsdWU6dCxjb21wdXRlZDpuLHNob3J0aGFuZDppLGRlY29yYXRvcnM6YX0pfSx0Lm9iamVjdFR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdD1bXSxuPVtdLGk9W10sYT0hMSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiT2JqZWN0VHlwZUFubm90YXRpb24iLHByb3BlcnRpZXM6ZSxpbmRleGVyczp0LGNhbGxQcm9wZXJ0aWVzOm4saW50ZXJuYWxTbG90czppLGV4YWN0OmF9KX0sdC5vYmplY3RUeXBlQ2FsbFByb3BlcnR5PWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6Ik9iamVjdFR5cGVDYWxsUHJvcGVydHkiLHZhbHVlOmUsc3RhdGljOm51bGx9KX0sdC5vYmplY3RUeXBlSW5kZXhlcj1mdW5jdGlvbihlPW51bGwsdCxuLGk9bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiT2JqZWN0VHlwZUluZGV4ZXIiLGlkOmUsa2V5OnQsdmFsdWU6bix2YXJpYW5jZTppLHN0YXRpYzpudWxsfSl9LHQub2JqZWN0VHlwZUludGVybmFsU2xvdD1mdW5jdGlvbihlLHQsbixpLGEpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6Ik9iamVjdFR5cGVJbnRlcm5hbFNsb3QiLGlkOmUsdmFsdWU6dCxvcHRpb25hbDpuLHN0YXRpYzppLG1ldGhvZDphfSl9LHQub2JqZWN0VHlwZVByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuPW51bGwpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6Ik9iamVjdFR5cGVQcm9wZXJ0eSIsa2V5OmUsdmFsdWU6dCx2YXJpYW5jZTpuLGtpbmQ6bnVsbCxtZXRob2Q6bnVsbCxvcHRpb25hbDpudWxsLHByb3RvOm51bGwsc3RhdGljOm51bGx9KX0sdC5vYmplY3RUeXBlU3ByZWFkUHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiT2JqZWN0VHlwZVNwcmVhZFByb3BlcnR5Iixhcmd1bWVudDplfSl9LHQub3BhcXVlVHlwZT1mdW5jdGlvbihlLHQ9bnVsbCxuPW51bGwsaSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiT3BhcXVlVHlwZSIsaWQ6ZSx0eXBlUGFyYW1ldGVyczp0LHN1cGVydHlwZTpuLGltcGx0eXBlOml9KX0sdC5vcHRpb25hbENhbGxFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJPcHRpb25hbENhbGxFeHByZXNzaW9uIixjYWxsZWU6ZSxhcmd1bWVudHM6dCxvcHRpb25hbDpufSl9LHQub3B0aW9uYWxJbmRleGVkQWNjZXNzVHlwZT1mdW5jdGlvbihlLHQpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6Ik9wdGlvbmFsSW5kZXhlZEFjY2Vzc1R5cGUiLG9iamVjdFR5cGU6ZSxpbmRleFR5cGU6dCxvcHRpb25hbDpudWxsfSl9LHQub3B0aW9uYWxNZW1iZXJFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCxuPSExLGkpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6Ik9wdGlvbmFsTWVtYmVyRXhwcmVzc2lvbiIsb2JqZWN0OmUscHJvcGVydHk6dCxjb21wdXRlZDpuLG9wdGlvbmFsOml9KX0sdC5wYXJlbnRoZXNpemVkRXhwcmVzc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIsZXhwcmVzc2lvbjplfSl9LHQucGlwZWxpbmVCYXJlRnVuY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiUGlwZWxpbmVCYXJlRnVuY3Rpb24iLGNhbGxlZTplfSl9LHQucGlwZWxpbmVQcmltYXJ5VG9waWNSZWZlcmVuY2U9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUGlwZWxpbmVQcmltYXJ5VG9waWNSZWZlcmVuY2UifX0sdC5waXBlbGluZVRvcGljRXhwcmVzc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJQaXBlbGluZVRvcGljRXhwcmVzc2lvbiIsZXhwcmVzc2lvbjplfSl9LHQucGxhY2Vob2xkZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJQbGFjZWhvbGRlciIsZXhwZWN0ZWROb2RlOmUsbmFtZTp0fSl9LHQucHJpdmF0ZU5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiUHJpdmF0ZU5hbWUiLGlkOmV9KX0sdC5wcm9ncmFtPWZ1bmN0aW9uKGUsdD1bXSxuPSJzY3JpcHQiLGk9bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiUHJvZ3JhbSIsYm9keTplLGRpcmVjdGl2ZXM6dCxzb3VyY2VUeXBlOm4saW50ZXJwcmV0ZXI6aSxzb3VyY2VGaWxlOm51bGx9KX0sdC5xdWFsaWZpZWRUeXBlSWRlbnRpZmllcj1mdW5jdGlvbihlLHQpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlF1YWxpZmllZFR5cGVJZGVudGlmaWVyIixpZDplLHF1YWxpZmljYXRpb246dH0pfSx0LnJlY29yZEV4cHJlc3Npb249ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiUmVjb3JkRXhwcmVzc2lvbiIscHJvcGVydGllczplfSl9LHQucmVnRXhwTGl0ZXJhbD1vLHQucmVnZXhMaXRlcmFsPWZ1bmN0aW9uKGUsdD0iIil7cmV0dXJuKDAsaS5kZWZhdWx0KSgiUmVnZXhMaXRlcmFsIiwiUmVnRXhwTGl0ZXJhbCIsIlRoZSBub2RlIHR5cGUgIiksbyhlLHQpfSx0LnJlc3RFbGVtZW50PXMsdC5yZXN0UHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsaS5kZWZhdWx0KSgiUmVzdFByb3BlcnR5IiwiUmVzdEVsZW1lbnQiLCJUaGUgbm9kZSB0eXBlICIpLHMoZSl9LHQucmV0dXJuU3RhdGVtZW50PWZ1bmN0aW9uKGU9bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiUmV0dXJuU3RhdGVtZW50Iixhcmd1bWVudDplfSl9LHQuc2VxdWVuY2VFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlNlcXVlbmNlRXhwcmVzc2lvbiIsZXhwcmVzc2lvbnM6ZX0pfSx0LnNwcmVhZEVsZW1lbnQ9bCx0LnNwcmVhZFByb3BlcnR5PWZ1bmN0aW9uKGUpe3JldHVybigwLGkuZGVmYXVsdCkoIlNwcmVhZFByb3BlcnR5IiwiU3ByZWFkRWxlbWVudCIsIlRoZSBub2RlIHR5cGUgIiksbChlKX0sdC5zdGF0aWNCbG9jaz1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJTdGF0aWNCbG9jayIsYm9keTplfSl9LHQuc3RyaW5nTGl0ZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJTdHJpbmdMaXRlcmFsIix2YWx1ZTplfSl9LHQuc3RyaW5nTGl0ZXJhbFR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlN0cmluZ0xpdGVyYWxUeXBlQW5ub3RhdGlvbiIsdmFsdWU6ZX0pfSx0LnN0cmluZ1R5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlN0cmluZ1R5cGVBbm5vdGF0aW9uIn19LHQuc3VwZXI9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiU3VwZXIifX0sdC5zd2l0Y2hDYXNlPWZ1bmN0aW9uKGU9bnVsbCx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJTd2l0Y2hDYXNlIix0ZXN0OmUsY29uc2VxdWVudDp0fSl9LHQuc3dpdGNoU3RhdGVtZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiU3dpdGNoU3RhdGVtZW50IixkaXNjcmltaW5hbnQ6ZSxjYXNlczp0fSl9LHQuc3ltYm9sVHlwZUFubm90YXRpb249ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiU3ltYm9sVHlwZUFubm90YXRpb24ifX0sdC50YWdnZWRUZW1wbGF0ZUV4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iLHRhZzplLHF1YXNpOnR9KX0sdC50ZW1wbGF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0PSExKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUZW1wbGF0ZUVsZW1lbnQiLHZhbHVlOmUsdGFpbDp0fSl9LHQudGVtcGxhdGVMaXRlcmFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVGVtcGxhdGVMaXRlcmFsIixxdWFzaXM6ZSxleHByZXNzaW9uczp0fSl9LHQudGhpc0V4cHJlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiVGhpc0V4cHJlc3Npb24ifX0sdC50aGlzVHlwZUFubm90YXRpb249ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiVGhpc1R5cGVBbm5vdGF0aW9uIn19LHQudGhyb3dTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVGhyb3dTdGF0ZW1lbnQiLGFyZ3VtZW50OmV9KX0sdC50b3BpY1JlZmVyZW5jZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJUb3BpY1JlZmVyZW5jZSJ9fSx0LnRyeVN0YXRlbWVudD1mdW5jdGlvbihlLHQ9bnVsbCxuPW51bGwpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRyeVN0YXRlbWVudCIsYmxvY2s6ZSxoYW5kbGVyOnQsZmluYWxpemVyOm59KX0sdC50U0FueUtleXdvcmQ9dC50c0FueUtleXdvcmQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiVFNBbnlLZXl3b3JkIn19LHQudFNBcnJheVR5cGU9dC50c0FycmF5VHlwZT1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU0FycmF5VHlwZSIsZWxlbWVudFR5cGU6ZX0pfSx0LnRTQXNFeHByZXNzaW9uPXQudHNBc0V4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU0FzRXhwcmVzc2lvbiIsZXhwcmVzc2lvbjplLHR5cGVBbm5vdGF0aW9uOnR9KX0sdC50U0JpZ0ludEtleXdvcmQ9dC50c0JpZ0ludEtleXdvcmQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiVFNCaWdJbnRLZXl3b3JkIn19LHQudFNCb29sZWFuS2V5d29yZD10LnRzQm9vbGVhbktleXdvcmQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiVFNCb29sZWFuS2V5d29yZCJ9fSx0LnRTQ2FsbFNpZ25hdHVyZURlY2xhcmF0aW9uPXQudHNDYWxsU2lnbmF0dXJlRGVjbGFyYXRpb249ZnVuY3Rpb24oZT1udWxsLHQsbj1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU0NhbGxTaWduYXR1cmVEZWNsYXJhdGlvbiIsdHlwZVBhcmFtZXRlcnM6ZSxwYXJhbWV0ZXJzOnQsdHlwZUFubm90YXRpb246bn0pfSx0LnRTQ29uZGl0aW9uYWxUeXBlPXQudHNDb25kaXRpb25hbFR5cGU9ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNDb25kaXRpb25hbFR5cGUiLGNoZWNrVHlwZTplLGV4dGVuZHNUeXBlOnQsdHJ1ZVR5cGU6bixmYWxzZVR5cGU6aX0pfSx0LnRTQ29uc3RydWN0U2lnbmF0dXJlRGVjbGFyYXRpb249dC50c0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9uPWZ1bmN0aW9uKGU9bnVsbCx0LG49bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNDb25zdHJ1Y3RTaWduYXR1cmVEZWNsYXJhdGlvbiIsdHlwZVBhcmFtZXRlcnM6ZSxwYXJhbWV0ZXJzOnQsdHlwZUFubm90YXRpb246bn0pfSx0LnRTQ29uc3RydWN0b3JUeXBlPXQudHNDb25zdHJ1Y3RvclR5cGU9ZnVuY3Rpb24oZT1udWxsLHQsbj1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU0NvbnN0cnVjdG9yVHlwZSIsdHlwZVBhcmFtZXRlcnM6ZSxwYXJhbWV0ZXJzOnQsdHlwZUFubm90YXRpb246bn0pfSx0LnRTRGVjbGFyZUZ1bmN0aW9uPXQudHNEZWNsYXJlRnVuY3Rpb249ZnVuY3Rpb24oZT1udWxsLHQ9bnVsbCxuLGk9bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNEZWNsYXJlRnVuY3Rpb24iLGlkOmUsdHlwZVBhcmFtZXRlcnM6dCxwYXJhbXM6bixyZXR1cm5UeXBlOml9KX0sdC50U0RlY2xhcmVNZXRob2Q9dC50c0RlY2xhcmVNZXRob2Q9ZnVuY3Rpb24oZT1udWxsLHQsbj1udWxsLGksYT1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU0RlY2xhcmVNZXRob2QiLGRlY29yYXRvcnM6ZSxrZXk6dCx0eXBlUGFyYW1ldGVyczpuLHBhcmFtczppLHJldHVyblR5cGU6YX0pfSx0LnRTRW51bURlY2xhcmF0aW9uPXQudHNFbnVtRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU0VudW1EZWNsYXJhdGlvbiIsaWQ6ZSxtZW1iZXJzOnR9KX0sdC50U0VudW1NZW1iZXI9dC50c0VudW1NZW1iZXI9ZnVuY3Rpb24oZSx0PW51bGwpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTRW51bU1lbWJlciIsaWQ6ZSxpbml0aWFsaXplcjp0fSl9LHQudFNFeHBvcnRBc3NpZ25tZW50PXQudHNFeHBvcnRBc3NpZ25tZW50PWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTRXhwb3J0QXNzaWdubWVudCIsZXhwcmVzc2lvbjplfSl9LHQudFNFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHM9dC50c0V4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cz1mdW5jdGlvbihlLHQ9bnVsbCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHMiLGV4cHJlc3Npb246ZSx0eXBlUGFyYW1ldGVyczp0fSl9LHQudFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZT10LnRzRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSIsZXhwcmVzc2lvbjplfSl9LHQudFNGdW5jdGlvblR5cGU9dC50c0Z1bmN0aW9uVHlwZT1mdW5jdGlvbihlPW51bGwsdCxuPW51bGwpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTRnVuY3Rpb25UeXBlIix0eXBlUGFyYW1ldGVyczplLHBhcmFtZXRlcnM6dCx0eXBlQW5ub3RhdGlvbjpufSl9LHQudFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbj10LnRzSW1wb3J0RXF1YWxzRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uIixpZDplLG1vZHVsZVJlZmVyZW5jZTp0LGlzRXhwb3J0Om51bGx9KX0sdC50U0ltcG9ydFR5cGU9dC50c0ltcG9ydFR5cGU9ZnVuY3Rpb24oZSx0PW51bGwsbj1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU0ltcG9ydFR5cGUiLGFyZ3VtZW50OmUscXVhbGlmaWVyOnQsdHlwZVBhcmFtZXRlcnM6bn0pfSx0LnRTSW5kZXhTaWduYXR1cmU9dC50c0luZGV4U2lnbmF0dXJlPWZ1bmN0aW9uKGUsdD1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU0luZGV4U2lnbmF0dXJlIixwYXJhbWV0ZXJzOmUsdHlwZUFubm90YXRpb246dH0pfSx0LnRTSW5kZXhlZEFjY2Vzc1R5cGU9dC50c0luZGV4ZWRBY2Nlc3NUeXBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNJbmRleGVkQWNjZXNzVHlwZSIsb2JqZWN0VHlwZTplLGluZGV4VHlwZTp0fSl9LHQudFNJbmZlclR5cGU9dC50c0luZmVyVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU0luZmVyVHlwZSIsdHlwZVBhcmFtZXRlcjplfSl9LHQudFNJbnN0YW50aWF0aW9uRXhwcmVzc2lvbj10LnRzSW5zdGFudGlhdGlvbkV4cHJlc3Npb249ZnVuY3Rpb24oZSx0PW51bGwpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTSW5zdGFudGlhdGlvbkV4cHJlc3Npb24iLGV4cHJlc3Npb246ZSx0eXBlUGFyYW1ldGVyczp0fSl9LHQudFNJbnRlcmZhY2VCb2R5PXQudHNJbnRlcmZhY2VCb2R5PWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTSW50ZXJmYWNlQm9keSIsYm9keTplfSl9LHQudFNJbnRlcmZhY2VEZWNsYXJhdGlvbj10LnRzSW50ZXJmYWNlRGVjbGFyYXRpb249ZnVuY3Rpb24oZSx0PW51bGwsbj1udWxsLGkpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTSW50ZXJmYWNlRGVjbGFyYXRpb24iLGlkOmUsdHlwZVBhcmFtZXRlcnM6dCxleHRlbmRzOm4sYm9keTppfSl9LHQudFNJbnRlcnNlY3Rpb25UeXBlPXQudHNJbnRlcnNlY3Rpb25UeXBlPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTSW50ZXJzZWN0aW9uVHlwZSIsdHlwZXM6ZX0pfSx0LnRTSW50cmluc2ljS2V5d29yZD10LnRzSW50cmluc2ljS2V5d29yZD1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJUU0ludHJpbnNpY0tleXdvcmQifX0sdC50U0xpdGVyYWxUeXBlPXQudHNMaXRlcmFsVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU0xpdGVyYWxUeXBlIixsaXRlcmFsOmV9KX0sdC50U01hcHBlZFR5cGU9dC50c01hcHBlZFR5cGU9ZnVuY3Rpb24oZSx0PW51bGwsbj1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU01hcHBlZFR5cGUiLHR5cGVQYXJhbWV0ZXI6ZSx0eXBlQW5ub3RhdGlvbjp0LG5hbWVUeXBlOm59KX0sdC50U01ldGhvZFNpZ25hdHVyZT10LnRzTWV0aG9kU2lnbmF0dXJlPWZ1bmN0aW9uKGUsdD1udWxsLG4saT1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU01ldGhvZFNpZ25hdHVyZSIsa2V5OmUsdHlwZVBhcmFtZXRlcnM6dCxwYXJhbWV0ZXJzOm4sdHlwZUFubm90YXRpb246aSxraW5kOm51bGx9KX0sdC50U01vZHVsZUJsb2NrPXQudHNNb2R1bGVCbG9jaz1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU01vZHVsZUJsb2NrIixib2R5OmV9KX0sdC50U01vZHVsZURlY2xhcmF0aW9uPXQudHNNb2R1bGVEZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTTW9kdWxlRGVjbGFyYXRpb24iLGlkOmUsYm9keTp0fSl9LHQudFNOYW1lZFR1cGxlTWVtYmVyPXQudHNOYW1lZFR1cGxlTWVtYmVyPWZ1bmN0aW9uKGUsdCxuPSExKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU05hbWVkVHVwbGVNZW1iZXIiLGxhYmVsOmUsZWxlbWVudFR5cGU6dCxvcHRpb25hbDpufSl9LHQudFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbj10LnRzTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbiIsaWQ6ZX0pfSx0LnRTTmV2ZXJLZXl3b3JkPXQudHNOZXZlcktleXdvcmQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiVFNOZXZlcktleXdvcmQifX0sdC50U05vbk51bGxFeHByZXNzaW9uPXQudHNOb25OdWxsRXhwcmVzc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU05vbk51bGxFeHByZXNzaW9uIixleHByZXNzaW9uOmV9KX0sdC50U051bGxLZXl3b3JkPXQudHNOdWxsS2V5d29yZD1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJUU051bGxLZXl3b3JkIn19LHQudFNOdW1iZXJLZXl3b3JkPXQudHNOdW1iZXJLZXl3b3JkPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlRTTnVtYmVyS2V5d29yZCJ9fSx0LnRTT2JqZWN0S2V5d29yZD10LnRzT2JqZWN0S2V5d29yZD1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJUU09iamVjdEtleXdvcmQifX0sdC50U09wdGlvbmFsVHlwZT10LnRzT3B0aW9uYWxUeXBlPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTT3B0aW9uYWxUeXBlIix0eXBlQW5ub3RhdGlvbjplfSl9LHQudFNQYXJhbWV0ZXJQcm9wZXJ0eT10LnRzUGFyYW1ldGVyUHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNQYXJhbWV0ZXJQcm9wZXJ0eSIscGFyYW1ldGVyOmV9KX0sdC50U1BhcmVudGhlc2l6ZWRUeXBlPXQudHNQYXJlbnRoZXNpemVkVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU1BhcmVudGhlc2l6ZWRUeXBlIix0eXBlQW5ub3RhdGlvbjplfSl9LHQudFNQcm9wZXJ0eVNpZ25hdHVyZT10LnRzUHJvcGVydHlTaWduYXR1cmU9ZnVuY3Rpb24oZSx0PW51bGwsbj1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU1Byb3BlcnR5U2lnbmF0dXJlIixrZXk6ZSx0eXBlQW5ub3RhdGlvbjp0LGluaXRpYWxpemVyOm4sa2luZDpudWxsfSl9LHQudFNRdWFsaWZpZWROYW1lPXQudHNRdWFsaWZpZWROYW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNRdWFsaWZpZWROYW1lIixsZWZ0OmUscmlnaHQ6dH0pfSx0LnRTUmVzdFR5cGU9dC50c1Jlc3RUeXBlPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTUmVzdFR5cGUiLHR5cGVBbm5vdGF0aW9uOmV9KX0sdC50U1NhdGlzZmllc0V4cHJlc3Npb249dC50c1NhdGlzZmllc0V4cHJlc3Npb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU1NhdGlzZmllc0V4cHJlc3Npb24iLGV4cHJlc3Npb246ZSx0eXBlQW5ub3RhdGlvbjp0fSl9LHQudFNTdHJpbmdLZXl3b3JkPXQudHNTdHJpbmdLZXl3b3JkPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlRTU3RyaW5nS2V5d29yZCJ9fSx0LnRTU3ltYm9sS2V5d29yZD10LnRzU3ltYm9sS2V5d29yZD1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJUU1N5bWJvbEtleXdvcmQifX0sdC50U1RoaXNUeXBlPXQudHNUaGlzVHlwZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJUU1RoaXNUeXBlIn19LHQudFNUdXBsZVR5cGU9dC50c1R1cGxlVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU1R1cGxlVHlwZSIsZWxlbWVudFR5cGVzOmV9KX0sdC50U1R5cGVBbGlhc0RlY2xhcmF0aW9uPXQudHNUeXBlQWxpYXNEZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQ9bnVsbCxuKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU1R5cGVBbGlhc0RlY2xhcmF0aW9uIixpZDplLHR5cGVQYXJhbWV0ZXJzOnQsdHlwZUFubm90YXRpb246bn0pfSx0LnRTVHlwZUFubm90YXRpb249dC50c1R5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTVHlwZUFubm90YXRpb24iLHR5cGVBbm5vdGF0aW9uOmV9KX0sdC50U1R5cGVBc3NlcnRpb249dC50c1R5cGVBc3NlcnRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU1R5cGVBc3NlcnRpb24iLHR5cGVBbm5vdGF0aW9uOmUsZXhwcmVzc2lvbjp0fSl9LHQudFNUeXBlTGl0ZXJhbD10LnRzVHlwZUxpdGVyYWw9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNUeXBlTGl0ZXJhbCIsbWVtYmVyczplfSl9LHQudFNUeXBlT3BlcmF0b3I9dC50c1R5cGVPcGVyYXRvcj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU1R5cGVPcGVyYXRvciIsdHlwZUFubm90YXRpb246ZSxvcGVyYXRvcjpudWxsfSl9LHQudFNUeXBlUGFyYW1ldGVyPXQudHNUeXBlUGFyYW1ldGVyPWZ1bmN0aW9uKGU9bnVsbCx0PW51bGwsbil7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNUeXBlUGFyYW1ldGVyIixjb25zdHJhaW50OmUsZGVmYXVsdDp0LG5hbWU6bn0pfSx0LnRTVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uPXQudHNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iLHBhcmFtczplfSl9LHQudFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbj10LnRzVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIscGFyYW1zOmV9KX0sdC50U1R5cGVQcmVkaWNhdGU9dC50c1R5cGVQcmVkaWNhdGU9ZnVuY3Rpb24oZSx0PW51bGwsbj1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUU1R5cGVQcmVkaWNhdGUiLHBhcmFtZXRlck5hbWU6ZSx0eXBlQW5ub3RhdGlvbjp0LGFzc2VydHM6bn0pfSx0LnRTVHlwZVF1ZXJ5PXQudHNUeXBlUXVlcnk9ZnVuY3Rpb24oZSx0PW51bGwpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTVHlwZVF1ZXJ5IixleHByTmFtZTplLHR5cGVQYXJhbWV0ZXJzOnR9KX0sdC50U1R5cGVSZWZlcmVuY2U9dC50c1R5cGVSZWZlcmVuY2U9ZnVuY3Rpb24oZSx0PW51bGwpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlRTVHlwZVJlZmVyZW5jZSIsdHlwZU5hbWU6ZSx0eXBlUGFyYW1ldGVyczp0fSl9LHQudFNVbmRlZmluZWRLZXl3b3JkPXQudHNVbmRlZmluZWRLZXl3b3JkPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlRTVW5kZWZpbmVkS2V5d29yZCJ9fSx0LnRTVW5pb25UeXBlPXQudHNVbmlvblR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVFNVbmlvblR5cGUiLHR5cGVzOmV9KX0sdC50U1Vua25vd25LZXl3b3JkPXQudHNVbmtub3duS2V5d29yZD1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJUU1Vua25vd25LZXl3b3JkIn19LHQudFNWb2lkS2V5d29yZD10LnRzVm9pZEtleXdvcmQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiVFNWb2lkS2V5d29yZCJ9fSx0LnR1cGxlRXhwcmVzc2lvbj1mdW5jdGlvbihlPVtdKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUdXBsZUV4cHJlc3Npb24iLGVsZW1lbnRzOmV9KX0sdC50dXBsZVR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlR1cGxlVHlwZUFubm90YXRpb24iLHR5cGVzOmV9KX0sdC50eXBlQWxpYXM9ZnVuY3Rpb24oZSx0PW51bGwsbil7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVHlwZUFsaWFzIixpZDplLHR5cGVQYXJhbWV0ZXJzOnQscmlnaHQ6bn0pfSx0LnR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlR5cGVBbm5vdGF0aW9uIix0eXBlQW5ub3RhdGlvbjplfSl9LHQudHlwZUNhc3RFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVHlwZUNhc3RFeHByZXNzaW9uIixleHByZXNzaW9uOmUsdHlwZUFubm90YXRpb246dH0pfSx0LnR5cGVQYXJhbWV0ZXI9ZnVuY3Rpb24oZT1udWxsLHQ9bnVsbCxuPW51bGwpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlR5cGVQYXJhbWV0ZXIiLGJvdW5kOmUsZGVmYXVsdDp0LHZhcmlhbmNlOm4sbmFtZTpudWxsfSl9LHQudHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIscGFyYW1zOmV9KX0sdC50eXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIscGFyYW1zOmV9KX0sdC50eXBlb2ZUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJUeXBlb2ZUeXBlQW5ub3RhdGlvbiIsYXJndW1lbnQ6ZX0pfSx0LnVuYXJ5RXhwcmVzc2lvbj1mdW5jdGlvbihlLHQsbj0hMCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVW5hcnlFeHByZXNzaW9uIixvcGVyYXRvcjplLGFyZ3VtZW50OnQscHJlZml4Om59KX0sdC51bmlvblR5cGVBbm5vdGF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlVuaW9uVHlwZUFubm90YXRpb24iLHR5cGVzOmV9KX0sdC51cGRhdGVFeHByZXNzaW9uPWZ1bmN0aW9uKGUsdCxuPSExKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJVcGRhdGVFeHByZXNzaW9uIixvcGVyYXRvcjplLGFyZ3VtZW50OnQscHJlZml4Om59KX0sdC52OEludHJpbnNpY0lkZW50aWZpZXI9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVjhJbnRyaW5zaWNJZGVudGlmaWVyIixuYW1lOmV9KX0sdC52YXJpYWJsZURlY2xhcmF0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVmFyaWFibGVEZWNsYXJhdGlvbiIsa2luZDplLGRlY2xhcmF0aW9uczp0fSl9LHQudmFyaWFibGVEZWNsYXJhdG9yPWZ1bmN0aW9uKGUsdD1udWxsKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJWYXJpYWJsZURlY2xhcmF0b3IiLGlkOmUsaW5pdDp0fSl9LHQudmFyaWFuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiVmFyaWFuY2UiLGtpbmQ6ZX0pfSx0LnZvaWRUeXBlQW5ub3RhdGlvbj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJWb2lkVHlwZUFubm90YXRpb24ifX0sdC53aGlsZVN0YXRlbWVudD1mdW5jdGlvbihlLHQpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IldoaWxlU3RhdGVtZW50Iix0ZXN0OmUsYm9keTp0fSl9LHQud2l0aFN0YXRlbWVudD1mdW5jdGlvbihlLHQpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IldpdGhTdGF0ZW1lbnQiLG9iamVjdDplLGJvZHk6dH0pfSx0LnlpZWxkRXhwcmVzc2lvbj1mdW5jdGlvbihlPW51bGwsdD0hMSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiWWllbGRFeHByZXNzaW9uIixhcmd1bWVudDplLGRlbGVnYXRlOnR9KX07dmFyIHI9bigiYmUwOSIpLGk9bigiYTljNyIpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiTnVtZXJpY0xpdGVyYWwiLHZhbHVlOmV9KX1mdW5jdGlvbiBvKGUsdD0iIil7cmV0dXJuKDAsci5kZWZhdWx0KSh7dHlwZToiUmVnRXhwTGl0ZXJhbCIscGF0dGVybjplLGZsYWdzOnR9KX1mdW5jdGlvbiBzKGUpe3JldHVybigwLHIuZGVmYXVsdCkoe3R5cGU6IlJlc3RFbGVtZW50Iixhcmd1bWVudDplfSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKHt0eXBlOiJTcHJlYWRFbGVtZW50Iixhcmd1bWVudDplfSl9fSxlZjVmOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLmRlZmF1bHQpKGUsITEsITApfTt2YXIgcj1uKCJiZjc4Iil9LGYyOGQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5wYXR0ZXJuTGlrZUNvbW1vbj10LmZ1bmN0aW9uVHlwZUFubm90YXRpb25Db21tb249dC5mdW5jdGlvbkRlY2xhcmF0aW9uQ29tbW9uPXQuZnVuY3Rpb25Db21tb249dC5jbGFzc01ldGhvZE9yUHJvcGVydHlDb21tb249dC5jbGFzc01ldGhvZE9yRGVjbGFyZU1ldGhvZENvbW1vbj12b2lkIDA7dmFyIHI9bigiMTc3YiIpLGk9bigiYjljMyIpLGE9bigiMDM2ZSIpLG89bigiYmRhOSIpLHM9bigiOTA0NiIpLGw9bigiNTdkZSIpO2NvbnN0IHU9KDAsbC5kZWZpbmVBbGlhc2VkVHlwZSkoIlN0YW5kYXJkaXplZCIpO3UoIkFycmF5RXhwcmVzc2lvbiIse2ZpZWxkczp7ZWxlbWVudHM6e3ZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxsLmFzc2VydEVhY2gpKCgwLGwuYXNzZXJ0Tm9kZU9yVmFsdWVUeXBlKSgibnVsbCIsIkV4cHJlc3Npb24iLCJTcHJlYWRFbGVtZW50IikpKSxkZWZhdWx0Ok9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLEJBU0VfVVJMOiIifSkuQkFCRUxfVFlQRVNfOF9CUkVBS0lORz92b2lkIDA6W119fSx2aXNpdG9yOlsiZWxlbWVudHMiXSxhbGlhc2VzOlsiRXhwcmVzc2lvbiJdfSksdSgiQXNzaWdubWVudEV4cHJlc3Npb24iLHtmaWVsZHM6e29wZXJhdG9yOnt2YWxpZGF0ZTpmdW5jdGlvbigpe2lmKCFPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixCQVNFX1VSTDoiIn0pLkJBQkVMX1RZUEVTXzhfQlJFQUtJTkcpcmV0dXJuKDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJzdHJpbmciKTtjb25zdCBlPSgwLGwuYXNzZXJ0T25lT2YpKC4uLnMuQVNTSUdOTUVOVF9PUEVSQVRPUlMpLHQ9KDAsbC5hc3NlcnRPbmVPZikoIj0iKTtyZXR1cm4gZnVuY3Rpb24obixpLGEpeygoMCxyLmRlZmF1bHQpKCJQYXR0ZXJuIixuLmxlZnQpP3Q6ZSkobixpLGEpfX0oKX0sbGVmdDp7dmFsaWRhdGU6T2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5CQUJFTF9UWVBFU184X0JSRUFLSU5HPygwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJZGVudGlmaWVyIiwiTWVtYmVyRXhwcmVzc2lvbiIsIkFycmF5UGF0dGVybiIsIk9iamVjdFBhdHRlcm4iLCJUU0FzRXhwcmVzc2lvbiIsIlRTU2F0aXNmaWVzRXhwcmVzc2lvbiIsIlRTVHlwZUFzc2VydGlvbiIsIlRTTm9uTnVsbEV4cHJlc3Npb24iKTooMCxsLmFzc2VydE5vZGVUeXBlKSgiTFZhbCIpfSxyaWdodDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX19LGJ1aWxkZXI6WyJvcGVyYXRvciIsImxlZnQiLCJyaWdodCJdLHZpc2l0b3I6WyJsZWZ0IiwicmlnaHQiXSxhbGlhc2VzOlsiRXhwcmVzc2lvbiJdfSksdSgiQmluYXJ5RXhwcmVzc2lvbiIse2J1aWxkZXI6WyJvcGVyYXRvciIsImxlZnQiLCJyaWdodCJdLGZpZWxkczp7b3BlcmF0b3I6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0T25lT2YpKC4uLnMuQklOQVJZX09QRVJBVE9SUyl9LGxlZnQ6e3ZhbGlkYXRlOmZ1bmN0aW9uKCl7Y29uc3QgZT0oMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpLHQ9KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iLCJQcml2YXRlTmFtZSIpO3JldHVybiBPYmplY3QuYXNzaWduKChmdW5jdGlvbihuLHIsaSl7KCJpbiI9PT1uLm9wZXJhdG9yP3Q6ZSkobixyLGkpfSkse29uZU9mTm9kZVR5cGVzOlsiRXhwcmVzc2lvbiIsIlByaXZhdGVOYW1lIl19KX0oKX0scmlnaHQ6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIil9fSx2aXNpdG9yOlsibGVmdCIsInJpZ2h0Il0sYWxpYXNlczpbIkJpbmFyeSIsIkV4cHJlc3Npb24iXX0pLHUoIkludGVycHJldGVyRGlyZWN0aXZlIix7YnVpbGRlcjpbInZhbHVlIl0sZmllbGRzOnt2YWx1ZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJzdHJpbmciKX19fSksdSgiRGlyZWN0aXZlIix7dmlzaXRvcjpbInZhbHVlIl0sZmllbGRzOnt2YWx1ZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkRpcmVjdGl2ZUxpdGVyYWwiKX19fSksdSgiRGlyZWN0aXZlTGl0ZXJhbCIse2J1aWxkZXI6WyJ2YWx1ZSJdLGZpZWxkczp7dmFsdWU6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0VmFsdWVUeXBlKSgic3RyaW5nIil9fX0pLHUoIkJsb2NrU3RhdGVtZW50Iix7YnVpbGRlcjpbImJvZHkiLCJkaXJlY3RpdmVzIl0sdmlzaXRvcjpbImRpcmVjdGl2ZXMiLCJib2R5Il0sZmllbGRzOntkaXJlY3RpdmVzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiRGlyZWN0aXZlIikpKSxkZWZhdWx0OltdfSxib2R5Ont2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiU3RhdGVtZW50IikpKX19LGFsaWFzZXM6WyJTY29wYWJsZSIsIkJsb2NrUGFyZW50IiwiQmxvY2siLCJTdGF0ZW1lbnQiXX0pLHUoIkJyZWFrU3RhdGVtZW50Iix7dmlzaXRvcjpbImxhYmVsIl0sZmllbGRzOntsYWJlbDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiKSxvcHRpb25hbDohMH19LGFsaWFzZXM6WyJTdGF0ZW1lbnQiLCJUZXJtaW5hdG9ybGVzcyIsIkNvbXBsZXRpb25TdGF0ZW1lbnQiXX0pLHUoIkNhbGxFeHByZXNzaW9uIix7dmlzaXRvcjpbImNhbGxlZSIsImFyZ3VtZW50cyIsInR5cGVQYXJhbWV0ZXJzIiwidHlwZUFyZ3VtZW50cyJdLGJ1aWxkZXI6WyJjYWxsZWUiLCJhcmd1bWVudHMiXSxhbGlhc2VzOlsiRXhwcmVzc2lvbiJdLGZpZWxkczpPYmplY3QuYXNzaWduKHtjYWxsZWU6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIiwiU3VwZXIiLCJWOEludHJpbnNpY0lkZW50aWZpZXIiKX0sYXJndW1lbnRzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIsIlNwcmVhZEVsZW1lbnQiLCJKU1hOYW1lc3BhY2VkTmFtZSIsIkFyZ3VtZW50UGxhY2Vob2xkZXIiKSkpfX0sT2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5CQUJFTF9UWVBFU184X0JSRUFLSU5HP3t9OntvcHRpb25hbDp7dmFsaWRhdGU6KDAsbC5hc3NlcnRPbmVPZikoITAsITEpLG9wdGlvbmFsOiEwfX0se3R5cGVBcmd1bWVudHM6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpLG9wdGlvbmFsOiEwfSx0eXBlUGFyYW1ldGVyczp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIlRTVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKSxvcHRpb25hbDohMH19KX0pLHUoIkNhdGNoQ2xhdXNlIix7dmlzaXRvcjpbInBhcmFtIiwiYm9keSJdLGZpZWxkczp7cGFyYW06e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJZGVudGlmaWVyIiwiQXJyYXlQYXR0ZXJuIiwiT2JqZWN0UGF0dGVybiIpLG9wdGlvbmFsOiEwfSxib2R5Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiQmxvY2tTdGF0ZW1lbnQiKX19LGFsaWFzZXM6WyJTY29wYWJsZSIsIkJsb2NrUGFyZW50Il19KSx1KCJDb25kaXRpb25hbEV4cHJlc3Npb24iLHt2aXNpdG9yOlsidGVzdCIsImNvbnNlcXVlbnQiLCJhbHRlcm5hdGUiXSxmaWVsZHM6e3Rlc3Q6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIil9LGNvbnNlcXVlbnQ6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIil9LGFsdGVybmF0ZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX19LGFsaWFzZXM6WyJFeHByZXNzaW9uIiwiQ29uZGl0aW9uYWwiXX0pLHUoIkNvbnRpbnVlU3RhdGVtZW50Iix7dmlzaXRvcjpbImxhYmVsIl0sZmllbGRzOntsYWJlbDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiKSxvcHRpb25hbDohMH19LGFsaWFzZXM6WyJTdGF0ZW1lbnQiLCJUZXJtaW5hdG9ybGVzcyIsIkNvbXBsZXRpb25TdGF0ZW1lbnQiXX0pLHUoIkRlYnVnZ2VyU3RhdGVtZW50Iix7YWxpYXNlczpbIlN0YXRlbWVudCJdfSksdSgiRG9XaGlsZVN0YXRlbWVudCIse3Zpc2l0b3I6WyJ0ZXN0IiwiYm9keSJdLGZpZWxkczp7dGVzdDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX0sYm9keTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIlN0YXRlbWVudCIpfX0sYWxpYXNlczpbIlN0YXRlbWVudCIsIkJsb2NrUGFyZW50IiwiTG9vcCIsIldoaWxlIiwiU2NvcGFibGUiXX0pLHUoIkVtcHR5U3RhdGVtZW50Iix7YWxpYXNlczpbIlN0YXRlbWVudCJdfSksdSgiRXhwcmVzc2lvblN0YXRlbWVudCIse3Zpc2l0b3I6WyJleHByZXNzaW9uIl0sZmllbGRzOntleHByZXNzaW9uOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpfX0sYWxpYXNlczpbIlN0YXRlbWVudCIsIkV4cHJlc3Npb25XcmFwcGVyIl19KSx1KCJGaWxlIix7YnVpbGRlcjpbInByb2dyYW0iLCJjb21tZW50cyIsInRva2VucyJdLHZpc2l0b3I6WyJwcm9ncmFtIl0sZmllbGRzOntwcm9ncmFtOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiUHJvZ3JhbSIpfSxjb21tZW50czp7dmFsaWRhdGU6T2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5CQUJFTF9UWVBFU184X0JSRUFLSU5HPygwLGwuYXNzZXJ0RWFjaCkoKDAsbC5hc3NlcnROb2RlVHlwZSkoIkNvbW1lbnRCbG9jayIsIkNvbW1lbnRMaW5lIikpOk9iamVjdC5hc3NpZ24oKCk9Pnt9LHtlYWNoOntvbmVPZk5vZGVUeXBlczpbIkNvbW1lbnRCbG9jayIsIkNvbW1lbnRMaW5lIl19fSksb3B0aW9uYWw6ITB9LHRva2Vuczp7dmFsaWRhdGU6KDAsbC5hc3NlcnRFYWNoKShPYmplY3QuYXNzaWduKCgpPT57fSx7dHlwZToiYW55In0pKSxvcHRpb25hbDohMH19fSksdSgiRm9ySW5TdGF0ZW1lbnQiLHt2aXNpdG9yOlsibGVmdCIsInJpZ2h0IiwiYm9keSJdLGFsaWFzZXM6WyJTY29wYWJsZSIsIlN0YXRlbWVudCIsIkZvciIsIkJsb2NrUGFyZW50IiwiTG9vcCIsIkZvclhTdGF0ZW1lbnQiXSxmaWVsZHM6e2xlZnQ6e3ZhbGlkYXRlOk9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLEJBU0VfVVJMOiIifSkuQkFCRUxfVFlQRVNfOF9CUkVBS0lORz8oMCxsLmFzc2VydE5vZGVUeXBlKSgiVmFyaWFibGVEZWNsYXJhdGlvbiIsIklkZW50aWZpZXIiLCJNZW1iZXJFeHByZXNzaW9uIiwiQXJyYXlQYXR0ZXJuIiwiT2JqZWN0UGF0dGVybiIsIlRTQXNFeHByZXNzaW9uIiwiVFNTYXRpc2ZpZXNFeHByZXNzaW9uIiwiVFNUeXBlQXNzZXJ0aW9uIiwiVFNOb25OdWxsRXhwcmVzc2lvbiIpOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJWYXJpYWJsZURlY2xhcmF0aW9uIiwiTFZhbCIpfSxyaWdodDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX0sYm9keTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIlN0YXRlbWVudCIpfX19KSx1KCJGb3JTdGF0ZW1lbnQiLHt2aXNpdG9yOlsiaW5pdCIsInRlc3QiLCJ1cGRhdGUiLCJib2R5Il0sYWxpYXNlczpbIlNjb3BhYmxlIiwiU3RhdGVtZW50IiwiRm9yIiwiQmxvY2tQYXJlbnQiLCJMb29wIl0sZmllbGRzOntpbml0Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiVmFyaWFibGVEZWNsYXJhdGlvbiIsIkV4cHJlc3Npb24iKSxvcHRpb25hbDohMH0sdGVzdDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKSxvcHRpb25hbDohMH0sdXBkYXRlOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpLG9wdGlvbmFsOiEwfSxib2R5Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiU3RhdGVtZW50Iil9fX0pO2NvbnN0IHA9KCk9Pih7cGFyYW1zOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIsIlBhdHRlcm4iLCJSZXN0RWxlbWVudCIpKSl9LGdlbmVyYXRvcjp7ZGVmYXVsdDohMX0sYXN5bmM6e2RlZmF1bHQ6ITF9fSk7dC5mdW5jdGlvbkNvbW1vbj1wO2NvbnN0IGM9KCk9Pih7cmV0dXJuVHlwZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIlR5cGVBbm5vdGF0aW9uIiwiVFNUeXBlQW5ub3RhdGlvbiIsIk5vb3AiKSxvcHRpb25hbDohMH0sdHlwZVBhcmFtZXRlcnM6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iLCJUU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIsIk5vb3AiKSxvcHRpb25hbDohMH19KTt0LmZ1bmN0aW9uVHlwZUFubm90YXRpb25Db21tb249Yztjb25zdCBkPSgpPT5PYmplY3QuYXNzaWduKHt9LHAoKSx7ZGVjbGFyZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksb3B0aW9uYWw6ITB9LGlkOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIpLG9wdGlvbmFsOiEwfX0pO3QuZnVuY3Rpb25EZWNsYXJhdGlvbkNvbW1vbj1kLHUoIkZ1bmN0aW9uRGVjbGFyYXRpb24iLHtidWlsZGVyOlsiaWQiLCJwYXJhbXMiLCJib2R5IiwiZ2VuZXJhdG9yIiwiYXN5bmMiXSx2aXNpdG9yOlsiaWQiLCJwYXJhbXMiLCJib2R5IiwicmV0dXJuVHlwZSIsInR5cGVQYXJhbWV0ZXJzIl0sZmllbGRzOk9iamVjdC5hc3NpZ24oe30sZCgpLGMoKSx7Ym9keTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkJsb2NrU3RhdGVtZW50Iil9LHByZWRpY2F0ZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkRlY2xhcmVkUHJlZGljYXRlIiwiSW5mZXJyZWRQcmVkaWNhdGUiKSxvcHRpb25hbDohMH19KSxhbGlhc2VzOlsiU2NvcGFibGUiLCJGdW5jdGlvbiIsIkJsb2NrUGFyZW50IiwiRnVuY3Rpb25QYXJlbnQiLCJTdGF0ZW1lbnQiLCJQdXJlaXNoIiwiRGVjbGFyYXRpb24iXSx2YWxpZGF0ZTpmdW5jdGlvbigpe2lmKCFPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixCQVNFX1VSTDoiIn0pLkJBQkVMX1RZUEVTXzhfQlJFQUtJTkcpcmV0dXJuKCk9Pnt9O2NvbnN0IGU9KDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiKTtyZXR1cm4gZnVuY3Rpb24odCxuLGkpeygwLHIuZGVmYXVsdCkoIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiIsdCl8fGUoaSwiaWQiLGkuaWQpfX0oKX0pLHUoIkZ1bmN0aW9uRXhwcmVzc2lvbiIse2luaGVyaXRzOiJGdW5jdGlvbkRlY2xhcmF0aW9uIixhbGlhc2VzOlsiU2NvcGFibGUiLCJGdW5jdGlvbiIsIkJsb2NrUGFyZW50IiwiRnVuY3Rpb25QYXJlbnQiLCJFeHByZXNzaW9uIiwiUHVyZWlzaCJdLGZpZWxkczpPYmplY3QuYXNzaWduKHt9LHAoKSxjKCkse2lkOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIpLG9wdGlvbmFsOiEwfSxib2R5Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiQmxvY2tTdGF0ZW1lbnQiKX0scHJlZGljYXRlOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRGVjbGFyZWRQcmVkaWNhdGUiLCJJbmZlcnJlZFByZWRpY2F0ZSIpLG9wdGlvbmFsOiEwfX0pfSk7Y29uc3QgZj0oKT0+KHt0eXBlQW5ub3RhdGlvbjp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIlR5cGVBbm5vdGF0aW9uIiwiVFNUeXBlQW5ub3RhdGlvbiIsIk5vb3AiKSxvcHRpb25hbDohMH0sb3B0aW9uYWw6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpLG9wdGlvbmFsOiEwfSxkZWNvcmF0b3JzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiRGVjb3JhdG9yIikpKSxvcHRpb25hbDohMH19KTt0LnBhdHRlcm5MaWtlQ29tbW9uPWYsdSgiSWRlbnRpZmllciIse2J1aWxkZXI6WyJuYW1lIl0sdmlzaXRvcjpbInR5cGVBbm5vdGF0aW9uIiwiZGVjb3JhdG9ycyJdLGFsaWFzZXM6WyJFeHByZXNzaW9uIiwiUGF0dGVybkxpa2UiLCJMVmFsIiwiVFNFbnRpdHlOYW1lIl0sZmllbGRzOk9iamVjdC5hc3NpZ24oe30sZigpLHtuYW1lOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoInN0cmluZyIpLE9iamVjdC5hc3NpZ24oKGZ1bmN0aW9uKGUsdCxuKXtpZihPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixCQVNFX1VSTDoiIn0pLkJBQkVMX1RZUEVTXzhfQlJFQUtJTkcmJiEoMCxpLmRlZmF1bHQpKG4sITEpKXRocm93IG5ldyBUeXBlRXJyb3IoYCIke259IiBpcyBub3QgYSB2YWxpZCBpZGVudGlmaWVyIG5hbWVgKX0pLHt0eXBlOiJzdHJpbmcifSkpfX0pLHZhbGlkYXRlKGUsdCxuKXtpZighT2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5CQUJFTF9UWVBFU184X0JSRUFLSU5HKXJldHVybjtjb25zdCBpPS9cLihcdyspJC8uZXhlYyh0KTtpZighaSlyZXR1cm47Y29uc3RbLG9dPWkscz17Y29tcHV0ZWQ6ITF9O2lmKCJwcm9wZXJ0eSI9PT1vKXtpZigoMCxyLmRlZmF1bHQpKCJNZW1iZXJFeHByZXNzaW9uIixlLHMpKXJldHVybjtpZigoMCxyLmRlZmF1bHQpKCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iLGUscykpcmV0dXJufWVsc2UgaWYoImtleSI9PT1vKXtpZigoMCxyLmRlZmF1bHQpKCJQcm9wZXJ0eSIsZSxzKSlyZXR1cm47aWYoKDAsci5kZWZhdWx0KSgiTWV0aG9kIixlLHMpKXJldHVybn1lbHNlIGlmKCJleHBvcnRlZCI9PT1vKXtpZigoMCxyLmRlZmF1bHQpKCJFeHBvcnRTcGVjaWZpZXIiLGUpKXJldHVybn1lbHNlIGlmKCJpbXBvcnRlZCI9PT1vKXtpZigoMCxyLmRlZmF1bHQpKCJJbXBvcnRTcGVjaWZpZXIiLGUse2ltcG9ydGVkOm59KSlyZXR1cm59ZWxzZSBpZigibWV0YSI9PT1vJiYoMCxyLmRlZmF1bHQpKCJNZXRhUHJvcGVydHkiLGUse21ldGE6bn0pKXJldHVybjtpZigoKDAsYS5pc0tleXdvcmQpKG4ubmFtZSl8fCgwLGEuaXNSZXNlcnZlZFdvcmQpKG4ubmFtZSwhMSkpJiYidGhpcyIhPT1uLm5hbWUpdGhyb3cgbmV3IFR5cGVFcnJvcihgIiR7bi5uYW1lfSIgaXMgbm90IGEgdmFsaWQgaWRlbnRpZmllcmApfX0pLHUoIklmU3RhdGVtZW50Iix7dmlzaXRvcjpbInRlc3QiLCJjb25zZXF1ZW50IiwiYWx0ZXJuYXRlIl0sYWxpYXNlczpbIlN0YXRlbWVudCIsIkNvbmRpdGlvbmFsIl0sZmllbGRzOnt0ZXN0Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpfSxjb25zZXF1ZW50Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiU3RhdGVtZW50Iil9LGFsdGVybmF0ZTp7b3B0aW9uYWw6ITAsdmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIlN0YXRlbWVudCIpfX19KSx1KCJMYWJlbGVkU3RhdGVtZW50Iix7dmlzaXRvcjpbImxhYmVsIiwiYm9keSJdLGFsaWFzZXM6WyJTdGF0ZW1lbnQiXSxmaWVsZHM6e2xhYmVsOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIpfSxib2R5Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiU3RhdGVtZW50Iil9fX0pLHUoIlN0cmluZ0xpdGVyYWwiLHtidWlsZGVyOlsidmFsdWUiXSxmaWVsZHM6e3ZhbHVlOnt2YWxpZGF0ZTooMCxsLmFzc2VydFZhbHVlVHlwZSkoInN0cmluZyIpfX0sYWxpYXNlczpbIkV4cHJlc3Npb24iLCJQdXJlaXNoIiwiTGl0ZXJhbCIsIkltbXV0YWJsZSJdfSksdSgiTnVtZXJpY0xpdGVyYWwiLHtidWlsZGVyOlsidmFsdWUiXSxkZXByZWNhdGVkQWxpYXM6Ik51bWJlckxpdGVyYWwiLGZpZWxkczp7dmFsdWU6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0VmFsdWVUeXBlKSgibnVtYmVyIil9fSxhbGlhc2VzOlsiRXhwcmVzc2lvbiIsIlB1cmVpc2giLCJMaXRlcmFsIiwiSW1tdXRhYmxlIl19KSx1KCJOdWxsTGl0ZXJhbCIse2FsaWFzZXM6WyJFeHByZXNzaW9uIiwiUHVyZWlzaCIsIkxpdGVyYWwiLCJJbW11dGFibGUiXX0pLHUoIkJvb2xlYW5MaXRlcmFsIix7YnVpbGRlcjpbInZhbHVlIl0sZmllbGRzOnt2YWx1ZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIil9fSxhbGlhc2VzOlsiRXhwcmVzc2lvbiIsIlB1cmVpc2giLCJMaXRlcmFsIiwiSW1tdXRhYmxlIl19KSx1KCJSZWdFeHBMaXRlcmFsIix7YnVpbGRlcjpbInBhdHRlcm4iLCJmbGFncyJdLGRlcHJlY2F0ZWRBbGlhczoiUmVnZXhMaXRlcmFsIixhbGlhc2VzOlsiRXhwcmVzc2lvbiIsIlB1cmVpc2giLCJMaXRlcmFsIl0sZmllbGRzOntwYXR0ZXJuOnt2YWxpZGF0ZTooMCxsLmFzc2VydFZhbHVlVHlwZSkoInN0cmluZyIpfSxmbGFnczp7dmFsaWRhdGU6KDAsbC5jaGFpbikoKDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJzdHJpbmciKSxPYmplY3QuYXNzaWduKChmdW5jdGlvbihlLHQsbil7aWYoIU9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLEJBU0VfVVJMOiIifSkuQkFCRUxfVFlQRVNfOF9CUkVBS0lORylyZXR1cm47Y29uc3Qgcj0vW15naW1zdXldLy5leGVjKG4pO2lmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcihgIiR7clswXX0iIGlzIG5vdCBhIHZhbGlkIFJlZ0V4cCBmbGFnYCl9KSx7dHlwZToic3RyaW5nIn0pKSxkZWZhdWx0OiIifX19KSx1KCJMb2dpY2FsRXhwcmVzc2lvbiIse2J1aWxkZXI6WyJvcGVyYXRvciIsImxlZnQiLCJyaWdodCJdLHZpc2l0b3I6WyJsZWZ0IiwicmlnaHQiXSxhbGlhc2VzOlsiQmluYXJ5IiwiRXhwcmVzc2lvbiJdLGZpZWxkczp7b3BlcmF0b3I6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0T25lT2YpKC4uLnMuTE9HSUNBTF9PUEVSQVRPUlMpfSxsZWZ0Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpfSxyaWdodDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX19fSksdSgiTWVtYmVyRXhwcmVzc2lvbiIse2J1aWxkZXI6WyJvYmplY3QiLCJwcm9wZXJ0eSIsImNvbXB1dGVkIiwuLi5PYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixCQVNFX1VSTDoiIn0pLkJBQkVMX1RZUEVTXzhfQlJFQUtJTkc/W106WyJvcHRpb25hbCJdXSx2aXNpdG9yOlsib2JqZWN0IiwicHJvcGVydHkiXSxhbGlhc2VzOlsiRXhwcmVzc2lvbiIsIkxWYWwiXSxmaWVsZHM6T2JqZWN0LmFzc2lnbih7b2JqZWN0Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIsIlN1cGVyIil9LHByb3BlcnR5Ont2YWxpZGF0ZTpmdW5jdGlvbigpe2NvbnN0IGU9KDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiLCJQcml2YXRlTmFtZSIpLHQ9KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKSxuPWZ1bmN0aW9uKG4scixpKXsobi5jb21wdXRlZD90OmUpKG4scixpKX07cmV0dXJuIG4ub25lT2ZOb2RlVHlwZXM9WyJFeHByZXNzaW9uIiwiSWRlbnRpZmllciIsIlByaXZhdGVOYW1lIl0sbn0oKX0sY29tcHV0ZWQ6e2RlZmF1bHQ6ITF9fSxPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixCQVNFX1VSTDoiIn0pLkJBQkVMX1RZUEVTXzhfQlJFQUtJTkc/e306e29wdGlvbmFsOnt2YWxpZGF0ZTooMCxsLmFzc2VydE9uZU9mKSghMCwhMSksb3B0aW9uYWw6ITB9fSl9KSx1KCJOZXdFeHByZXNzaW9uIix7aW5oZXJpdHM6IkNhbGxFeHByZXNzaW9uIn0pLHUoIlByb2dyYW0iLHt2aXNpdG9yOlsiZGlyZWN0aXZlcyIsImJvZHkiXSxidWlsZGVyOlsiYm9keSIsImRpcmVjdGl2ZXMiLCJzb3VyY2VUeXBlIiwiaW50ZXJwcmV0ZXIiXSxmaWVsZHM6e3NvdXJjZUZpbGU6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0VmFsdWVUeXBlKSgic3RyaW5nIil9LHNvdXJjZVR5cGU6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0T25lT2YpKCJzY3JpcHQiLCJtb2R1bGUiKSxkZWZhdWx0OiJzY3JpcHQifSxpbnRlcnByZXRlcjp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkludGVycHJldGVyRGlyZWN0aXZlIiksZGVmYXVsdDpudWxsLG9wdGlvbmFsOiEwfSxkaXJlY3RpdmVzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiRGlyZWN0aXZlIikpKSxkZWZhdWx0OltdfSxib2R5Ont2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiU3RhdGVtZW50IikpKX19LGFsaWFzZXM6WyJTY29wYWJsZSIsIkJsb2NrUGFyZW50IiwiQmxvY2siXX0pLHUoIk9iamVjdEV4cHJlc3Npb24iLHt2aXNpdG9yOlsicHJvcGVydGllcyJdLGFsaWFzZXM6WyJFeHByZXNzaW9uIl0sZmllbGRzOntwcm9wZXJ0aWVzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiT2JqZWN0TWV0aG9kIiwiT2JqZWN0UHJvcGVydHkiLCJTcHJlYWRFbGVtZW50IikpKX19fSksdSgiT2JqZWN0TWV0aG9kIix7YnVpbGRlcjpbImtpbmQiLCJrZXkiLCJwYXJhbXMiLCJib2R5IiwiY29tcHV0ZWQiLCJnZW5lcmF0b3IiLCJhc3luYyJdLGZpZWxkczpPYmplY3QuYXNzaWduKHt9LHAoKSxjKCkse2tpbmQ6T2JqZWN0LmFzc2lnbih7dmFsaWRhdGU6KDAsbC5hc3NlcnRPbmVPZikoIm1ldGhvZCIsImdldCIsInNldCIpfSxPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixCQVNFX1VSTDoiIn0pLkJBQkVMX1RZUEVTXzhfQlJFQUtJTkc/e306e2RlZmF1bHQ6Im1ldGhvZCJ9KSxjb21wdXRlZDp7ZGVmYXVsdDohMX0sa2V5Ont2YWxpZGF0ZTpmdW5jdGlvbigpe2NvbnN0IGU9KDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiLCJTdHJpbmdMaXRlcmFsIiwiTnVtZXJpY0xpdGVyYWwiLCJCaWdJbnRMaXRlcmFsIiksdD0oMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpLG49ZnVuY3Rpb24obixyLGkpeyhuLmNvbXB1dGVkP3Q6ZSkobixyLGkpfTtyZXR1cm4gbi5vbmVPZk5vZGVUeXBlcz1bIkV4cHJlc3Npb24iLCJJZGVudGlmaWVyIiwiU3RyaW5nTGl0ZXJhbCIsIk51bWVyaWNMaXRlcmFsIiwiQmlnSW50TGl0ZXJhbCJdLG59KCl9LGRlY29yYXRvcnM6e3ZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxsLmFzc2VydEVhY2gpKCgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJEZWNvcmF0b3IiKSkpLG9wdGlvbmFsOiEwfSxib2R5Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiQmxvY2tTdGF0ZW1lbnQiKX19KSx2aXNpdG9yOlsia2V5IiwicGFyYW1zIiwiYm9keSIsImRlY29yYXRvcnMiLCJyZXR1cm5UeXBlIiwidHlwZVBhcmFtZXRlcnMiXSxhbGlhc2VzOlsiVXNlcldoaXRlc3BhY2FibGUiLCJGdW5jdGlvbiIsIlNjb3BhYmxlIiwiQmxvY2tQYXJlbnQiLCJGdW5jdGlvblBhcmVudCIsIk1ldGhvZCIsIk9iamVjdE1lbWJlciJdfSksdSgiT2JqZWN0UHJvcGVydHkiLHtidWlsZGVyOlsia2V5IiwidmFsdWUiLCJjb21wdXRlZCIsInNob3J0aGFuZCIsLi4uT2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5CQUJFTF9UWVBFU184X0JSRUFLSU5HP1tdOlsiZGVjb3JhdG9ycyJdXSxmaWVsZHM6e2NvbXB1dGVkOntkZWZhdWx0OiExfSxrZXk6e3ZhbGlkYXRlOmZ1bmN0aW9uKCl7Y29uc3QgZT0oMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIsIlN0cmluZ0xpdGVyYWwiLCJOdW1lcmljTGl0ZXJhbCIsIkJpZ0ludExpdGVyYWwiLCJEZWNpbWFsTGl0ZXJhbCIsIlByaXZhdGVOYW1lIiksdD0oMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpO3JldHVybiBPYmplY3QuYXNzaWduKChmdW5jdGlvbihuLHIsaSl7KG4uY29tcHV0ZWQ/dDplKShuLHIsaSl9KSx7b25lT2ZOb2RlVHlwZXM6WyJFeHByZXNzaW9uIiwiSWRlbnRpZmllciIsIlN0cmluZ0xpdGVyYWwiLCJOdW1lcmljTGl0ZXJhbCIsIkJpZ0ludExpdGVyYWwiLCJEZWNpbWFsTGl0ZXJhbCIsIlByaXZhdGVOYW1lIl19KX0oKX0sdmFsdWU6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIiwiUGF0dGVybkxpa2UiKX0sc2hvcnRoYW5kOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSxPYmplY3QuYXNzaWduKChmdW5jdGlvbihlLHQsbil7aWYoT2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5CQUJFTF9UWVBFU184X0JSRUFLSU5HJiZuJiZlLmNvbXB1dGVkKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb3BlcnR5IHNob3J0aGFuZCBvZiBPYmplY3RQcm9wZXJ0eSBjYW5ub3QgYmUgdHJ1ZSBpZiBjb21wdXRlZCBpcyB0cnVlIil9KSx7dHlwZToiYm9vbGVhbiJ9KSwoZnVuY3Rpb24oZSx0LG4pe2lmKE9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLEJBU0VfVVJMOiIifSkuQkFCRUxfVFlQRVNfOF9CUkVBS0lORyYmbiYmISgwLHIuZGVmYXVsdCkoIklkZW50aWZpZXIiLGUua2V5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm9wZXJ0eSBzaG9ydGhhbmQgb2YgT2JqZWN0UHJvcGVydHkgY2Fubm90IGJlIHRydWUgaWYga2V5IGlzIG5vdCBhbiBJZGVudGlmaWVyIil9KSksZGVmYXVsdDohMX0sZGVjb3JhdG9yczp7dmFsaWRhdGU6KDAsbC5jaGFpbikoKDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJhcnJheSIpLCgwLGwuYXNzZXJ0RWFjaCkoKDAsbC5hc3NlcnROb2RlVHlwZSkoIkRlY29yYXRvciIpKSksb3B0aW9uYWw6ITB9fSx2aXNpdG9yOlsia2V5IiwidmFsdWUiLCJkZWNvcmF0b3JzIl0sYWxpYXNlczpbIlVzZXJXaGl0ZXNwYWNhYmxlIiwiUHJvcGVydHkiLCJPYmplY3RNZW1iZXIiXSx2YWxpZGF0ZTpmdW5jdGlvbigpe2NvbnN0IGU9KDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiLCJQYXR0ZXJuIiwiVFNBc0V4cHJlc3Npb24iLCJUU1NhdGlzZmllc0V4cHJlc3Npb24iLCJUU05vbk51bGxFeHByZXNzaW9uIiwiVFNUeXBlQXNzZXJ0aW9uIiksdD0oMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpO3JldHVybiBmdW5jdGlvbihuLGksYSl7aWYoIU9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLEJBU0VfVVJMOiIifSkuQkFCRUxfVFlQRVNfOF9CUkVBS0lORylyZXR1cm47KCgwLHIuZGVmYXVsdCkoIk9iamVjdFBhdHRlcm4iLG4pP2U6dCkoYSwidmFsdWUiLGEudmFsdWUpfX0oKX0pLHUoIlJlc3RFbGVtZW50Iix7dmlzaXRvcjpbImFyZ3VtZW50IiwidHlwZUFubm90YXRpb24iXSxidWlsZGVyOlsiYXJndW1lbnQiXSxhbGlhc2VzOlsiTFZhbCIsIlBhdHRlcm5MaWtlIl0sZGVwcmVjYXRlZEFsaWFzOiJSZXN0UHJvcGVydHkiLGZpZWxkczpPYmplY3QuYXNzaWduKHt9LGYoKSx7YXJndW1lbnQ6e3ZhbGlkYXRlOk9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLEJBU0VfVVJMOiIifSkuQkFCRUxfVFlQRVNfOF9CUkVBS0lORz8oMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIsIkFycmF5UGF0dGVybiIsIk9iamVjdFBhdHRlcm4iLCJNZW1iZXJFeHByZXNzaW9uIiwiVFNBc0V4cHJlc3Npb24iLCJUU1NhdGlzZmllc0V4cHJlc3Npb24iLCJUU1R5cGVBc3NlcnRpb24iLCJUU05vbk51bGxFeHByZXNzaW9uIik6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkxWYWwiKX19KSx2YWxpZGF0ZShlLHQpe2lmKCFPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixCQVNFX1VSTDoiIn0pLkJBQkVMX1RZUEVTXzhfQlJFQUtJTkcpcmV0dXJuO2NvbnN0IG49LyhcdyspXFsoXGQrKVxdLy5leGVjKHQpO2lmKCFuKXRocm93IG5ldyBFcnJvcigiSW50ZXJuYWwgQmFiZWwgZXJyb3I6IG1hbGZvcm1lZCBrZXkuIik7Y29uc3RbLHIsaV09bjtpZihlW3JdLmxlbmd0aD4raSsxKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlc3RFbGVtZW50IG11c3QgYmUgbGFzdCBlbGVtZW50IG9mICIrcil9fSksdSgiUmV0dXJuU3RhdGVtZW50Iix7dmlzaXRvcjpbImFyZ3VtZW50Il0sYWxpYXNlczpbIlN0YXRlbWVudCIsIlRlcm1pbmF0b3JsZXNzIiwiQ29tcGxldGlvblN0YXRlbWVudCJdLGZpZWxkczp7YXJndW1lbnQ6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIiksb3B0aW9uYWw6ITB9fX0pLHUoIlNlcXVlbmNlRXhwcmVzc2lvbiIse3Zpc2l0b3I6WyJleHByZXNzaW9ucyJdLGZpZWxkczp7ZXhwcmVzc2lvbnM6e3ZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxsLmFzc2VydEVhY2gpKCgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIikpKX19LGFsaWFzZXM6WyJFeHByZXNzaW9uIl19KSx1KCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIse3Zpc2l0b3I6WyJleHByZXNzaW9uIl0sYWxpYXNlczpbIkV4cHJlc3Npb24iLCJFeHByZXNzaW9uV3JhcHBlciJdLGZpZWxkczp7ZXhwcmVzc2lvbjp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX19fSksdSgiU3dpdGNoQ2FzZSIse3Zpc2l0b3I6WyJ0ZXN0IiwiY29uc2VxdWVudCJdLGZpZWxkczp7dGVzdDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKSxvcHRpb25hbDohMH0sY29uc2VxdWVudDp7dmFsaWRhdGU6KDAsbC5jaGFpbikoKDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJhcnJheSIpLCgwLGwuYXNzZXJ0RWFjaCkoKDAsbC5hc3NlcnROb2RlVHlwZSkoIlN0YXRlbWVudCIpKSl9fX0pLHUoIlN3aXRjaFN0YXRlbWVudCIse3Zpc2l0b3I6WyJkaXNjcmltaW5hbnQiLCJjYXNlcyJdLGFsaWFzZXM6WyJTdGF0ZW1lbnQiLCJCbG9ja1BhcmVudCIsIlNjb3BhYmxlIl0sZmllbGRzOntkaXNjcmltaW5hbnQ6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIil9LGNhc2VzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiU3dpdGNoQ2FzZSIpKSl9fX0pLHUoIlRoaXNFeHByZXNzaW9uIix7YWxpYXNlczpbIkV4cHJlc3Npb24iXX0pLHUoIlRocm93U3RhdGVtZW50Iix7dmlzaXRvcjpbImFyZ3VtZW50Il0sYWxpYXNlczpbIlN0YXRlbWVudCIsIlRlcm1pbmF0b3JsZXNzIiwiQ29tcGxldGlvblN0YXRlbWVudCJdLGZpZWxkczp7YXJndW1lbnQ6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIil9fX0pLHUoIlRyeVN0YXRlbWVudCIse3Zpc2l0b3I6WyJibG9jayIsImhhbmRsZXIiLCJmaW5hbGl6ZXIiXSxhbGlhc2VzOlsiU3RhdGVtZW50Il0sZmllbGRzOntibG9jazp7dmFsaWRhdGU6KDAsbC5jaGFpbikoKDAsbC5hc3NlcnROb2RlVHlwZSkoIkJsb2NrU3RhdGVtZW50IiksT2JqZWN0LmFzc2lnbigoZnVuY3Rpb24oZSl7aWYoT2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5CQUJFTF9UWVBFU184X0JSRUFLSU5HJiYhZS5oYW5kbGVyJiYhZS5maW5hbGl6ZXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVHJ5U3RhdGVtZW50IGV4cGVjdHMgZWl0aGVyIGEgaGFuZGxlciBvciBmaW5hbGl6ZXIsIG9yIGJvdGgiKX0pLHtvbmVPZk5vZGVUeXBlczpbIkJsb2NrU3RhdGVtZW50Il19KSl9LGhhbmRsZXI6e29wdGlvbmFsOiEwLHZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJDYXRjaENsYXVzZSIpfSxmaW5hbGl6ZXI6e29wdGlvbmFsOiEwLHZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJCbG9ja1N0YXRlbWVudCIpfX19KSx1KCJVbmFyeUV4cHJlc3Npb24iLHtidWlsZGVyOlsib3BlcmF0b3IiLCJhcmd1bWVudCIsInByZWZpeCJdLGZpZWxkczp7cHJlZml4OntkZWZhdWx0OiEwfSxhcmd1bWVudDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX0sb3BlcmF0b3I6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0T25lT2YpKC4uLnMuVU5BUllfT1BFUkFUT1JTKX19LHZpc2l0b3I6WyJhcmd1bWVudCJdLGFsaWFzZXM6WyJVbmFyeUxpa2UiLCJFeHByZXNzaW9uIl19KSx1KCJVcGRhdGVFeHByZXNzaW9uIix7YnVpbGRlcjpbIm9wZXJhdG9yIiwiYXJndW1lbnQiLCJwcmVmaXgiXSxmaWVsZHM6e3ByZWZpeDp7ZGVmYXVsdDohMX0sYXJndW1lbnQ6e3ZhbGlkYXRlOk9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLEJBU0VfVVJMOiIifSkuQkFCRUxfVFlQRVNfOF9CUkVBS0lORz8oMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIsIk1lbWJlckV4cHJlc3Npb24iKTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpfSxvcGVyYXRvcjp7dmFsaWRhdGU6KDAsbC5hc3NlcnRPbmVPZikoLi4ucy5VUERBVEVfT1BFUkFUT1JTKX19LHZpc2l0b3I6WyJhcmd1bWVudCJdLGFsaWFzZXM6WyJFeHByZXNzaW9uIl19KSx1KCJWYXJpYWJsZURlY2xhcmF0aW9uIix7YnVpbGRlcjpbImtpbmQiLCJkZWNsYXJhdGlvbnMiXSx2aXNpdG9yOlsiZGVjbGFyYXRpb25zIl0sYWxpYXNlczpbIlN0YXRlbWVudCIsIkRlY2xhcmF0aW9uIl0sZmllbGRzOntkZWNsYXJlOnt2YWxpZGF0ZTooMCxsLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSxvcHRpb25hbDohMH0sa2luZDp7dmFsaWRhdGU6KDAsbC5hc3NlcnRPbmVPZikoInZhciIsImxldCIsImNvbnN0IiwidXNpbmciKX0sZGVjbGFyYXRpb25zOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiVmFyaWFibGVEZWNsYXJhdG9yIikpKX19LHZhbGlkYXRlKGUsdCxuKXtpZihPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixCQVNFX1VSTDoiIn0pLkJBQkVMX1RZUEVTXzhfQlJFQUtJTkcmJigwLHIuZGVmYXVsdCkoIkZvclhTdGF0ZW1lbnQiLGUse2xlZnQ6bn0pJiYxIT09bi5kZWNsYXJhdGlvbnMubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4YWN0bHkgb25lIFZhcmlhYmxlRGVjbGFyYXRvciBpcyByZXF1aXJlZCBpbiB0aGUgVmFyaWFibGVEZWNsYXJhdGlvbiBvZiBhICIrZS50eXBlKX19KSx1KCJWYXJpYWJsZURlY2xhcmF0b3IiLHt2aXNpdG9yOlsiaWQiLCJpbml0Il0sZmllbGRzOntpZDp7dmFsaWRhdGU6ZnVuY3Rpb24oKXtpZighT2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5CQUJFTF9UWVBFU184X0JSRUFLSU5HKXJldHVybigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJMVmFsIik7Y29uc3QgZT0oMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIsIkFycmF5UGF0dGVybiIsIk9iamVjdFBhdHRlcm4iKSx0PSgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJZGVudGlmaWVyIik7cmV0dXJuIGZ1bmN0aW9uKG4scixpKXsobi5pbml0P2U6dCkobixyLGkpfX0oKX0sZGVmaW5pdGU6e29wdGlvbmFsOiEwLHZhbGlkYXRlOigwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpfSxpbml0OntvcHRpb25hbDohMCx2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpfX19KSx1KCJXaGlsZVN0YXRlbWVudCIse3Zpc2l0b3I6WyJ0ZXN0IiwiYm9keSJdLGFsaWFzZXM6WyJTdGF0ZW1lbnQiLCJCbG9ja1BhcmVudCIsIkxvb3AiLCJXaGlsZSIsIlNjb3BhYmxlIl0sZmllbGRzOnt0ZXN0Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpfSxib2R5Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiU3RhdGVtZW50Iil9fX0pLHUoIldpdGhTdGF0ZW1lbnQiLHt2aXNpdG9yOlsib2JqZWN0IiwiYm9keSJdLGFsaWFzZXM6WyJTdGF0ZW1lbnQiXSxmaWVsZHM6e29iamVjdDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX0sYm9keTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIlN0YXRlbWVudCIpfX19KSx1KCJBc3NpZ25tZW50UGF0dGVybiIse3Zpc2l0b3I6WyJsZWZ0IiwicmlnaHQiLCJkZWNvcmF0b3JzIl0sYnVpbGRlcjpbImxlZnQiLCJyaWdodCJdLGFsaWFzZXM6WyJQYXR0ZXJuIiwiUGF0dGVybkxpa2UiLCJMVmFsIl0sZmllbGRzOk9iamVjdC5hc3NpZ24oe30sZigpLHtsZWZ0Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIsIk9iamVjdFBhdHRlcm4iLCJBcnJheVBhdHRlcm4iLCJNZW1iZXJFeHByZXNzaW9uIiwiVFNBc0V4cHJlc3Npb24iLCJUU1NhdGlzZmllc0V4cHJlc3Npb24iLCJUU1R5cGVBc3NlcnRpb24iLCJUU05vbk51bGxFeHByZXNzaW9uIil9LHJpZ2h0Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpfSxkZWNvcmF0b3JzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiRGVjb3JhdG9yIikpKSxvcHRpb25hbDohMH19KX0pLHUoIkFycmF5UGF0dGVybiIse3Zpc2l0b3I6WyJlbGVtZW50cyIsInR5cGVBbm5vdGF0aW9uIl0sYnVpbGRlcjpbImVsZW1lbnRzIl0sYWxpYXNlczpbIlBhdHRlcm4iLCJQYXR0ZXJuTGlrZSIsIkxWYWwiXSxmaWVsZHM6T2JqZWN0LmFzc2lnbih7fSxmKCkse2VsZW1lbnRzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVPclZhbHVlVHlwZSkoIm51bGwiLCJQYXR0ZXJuTGlrZSIsIkxWYWwiKSkpfX0pfSksdSgiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iLHtidWlsZGVyOlsicGFyYW1zIiwiYm9keSIsImFzeW5jIl0sdmlzaXRvcjpbInBhcmFtcyIsImJvZHkiLCJyZXR1cm5UeXBlIiwidHlwZVBhcmFtZXRlcnMiXSxhbGlhc2VzOlsiU2NvcGFibGUiLCJGdW5jdGlvbiIsIkJsb2NrUGFyZW50IiwiRnVuY3Rpb25QYXJlbnQiLCJFeHByZXNzaW9uIiwiUHVyZWlzaCJdLGZpZWxkczpPYmplY3QuYXNzaWduKHt9LHAoKSxjKCkse2V4cHJlc3Npb246e3ZhbGlkYXRlOigwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpfSxib2R5Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiQmxvY2tTdGF0ZW1lbnQiLCJFeHByZXNzaW9uIil9LHByZWRpY2F0ZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkRlY2xhcmVkUHJlZGljYXRlIiwiSW5mZXJyZWRQcmVkaWNhdGUiKSxvcHRpb25hbDohMH19KX0pLHUoIkNsYXNzQm9keSIse3Zpc2l0b3I6WyJib2R5Il0sZmllbGRzOntib2R5Ont2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiQ2xhc3NNZXRob2QiLCJDbGFzc1ByaXZhdGVNZXRob2QiLCJDbGFzc1Byb3BlcnR5IiwiQ2xhc3NQcml2YXRlUHJvcGVydHkiLCJDbGFzc0FjY2Vzc29yUHJvcGVydHkiLCJUU0RlY2xhcmVNZXRob2QiLCJUU0luZGV4U2lnbmF0dXJlIiwiU3RhdGljQmxvY2siKSkpfX19KSx1KCJDbGFzc0V4cHJlc3Npb24iLHtidWlsZGVyOlsiaWQiLCJzdXBlckNsYXNzIiwiYm9keSIsImRlY29yYXRvcnMiXSx2aXNpdG9yOlsiaWQiLCJib2R5Iiwic3VwZXJDbGFzcyIsIm1peGlucyIsInR5cGVQYXJhbWV0ZXJzIiwic3VwZXJUeXBlUGFyYW1ldGVycyIsImltcGxlbWVudHMiLCJkZWNvcmF0b3JzIl0sYWxpYXNlczpbIlNjb3BhYmxlIiwiQ2xhc3MiLCJFeHByZXNzaW9uIl0sZmllbGRzOntpZDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiKSxvcHRpb25hbDohMH0sdHlwZVBhcmFtZXRlcnM6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iLCJUU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIsIk5vb3AiKSxvcHRpb25hbDohMH0sYm9keTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkNsYXNzQm9keSIpfSxzdXBlckNsYXNzOntvcHRpb25hbDohMCx2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpfSxzdXBlclR5cGVQYXJhbWV0ZXJzOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iLCJUU1R5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIiksb3B0aW9uYWw6ITB9LGltcGxlbWVudHM6e3ZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxsLmFzc2VydEVhY2gpKCgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJUU0V4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cyIsIkNsYXNzSW1wbGVtZW50cyIpKSksb3B0aW9uYWw6ITB9LGRlY29yYXRvcnM6e3ZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxsLmFzc2VydEVhY2gpKCgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJEZWNvcmF0b3IiKSkpLG9wdGlvbmFsOiEwfSxtaXhpbnM6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJbnRlcmZhY2VFeHRlbmRzIiksb3B0aW9uYWw6ITB9fX0pLHUoIkNsYXNzRGVjbGFyYXRpb24iLHtpbmhlcml0czoiQ2xhc3NFeHByZXNzaW9uIixhbGlhc2VzOlsiU2NvcGFibGUiLCJDbGFzcyIsIlN0YXRlbWVudCIsIkRlY2xhcmF0aW9uIl0sZmllbGRzOntpZDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiKX0sdHlwZVBhcmFtZXRlcnM6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iLCJUU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIsIk5vb3AiKSxvcHRpb25hbDohMH0sYm9keTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkNsYXNzQm9keSIpfSxzdXBlckNsYXNzOntvcHRpb25hbDohMCx2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpfSxzdXBlclR5cGVQYXJhbWV0ZXJzOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iLCJUU1R5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIiksb3B0aW9uYWw6ITB9LGltcGxlbWVudHM6e3ZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxsLmFzc2VydEVhY2gpKCgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJUU0V4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cyIsIkNsYXNzSW1wbGVtZW50cyIpKSksb3B0aW9uYWw6ITB9LGRlY29yYXRvcnM6e3ZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxsLmFzc2VydEVhY2gpKCgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJEZWNvcmF0b3IiKSkpLG9wdGlvbmFsOiEwfSxtaXhpbnM6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJbnRlcmZhY2VFeHRlbmRzIiksb3B0aW9uYWw6ITB9LGRlY2xhcmU6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpLG9wdGlvbmFsOiEwfSxhYnN0cmFjdDp7dmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksb3B0aW9uYWw6ITB9fSx2YWxpZGF0ZTpmdW5jdGlvbigpe2NvbnN0IGU9KDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiKTtyZXR1cm4gZnVuY3Rpb24odCxuLGkpe09iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLEJBU0VfVVJMOiIifSkuQkFCRUxfVFlQRVNfOF9CUkVBS0lORyYmKCgwLHIuZGVmYXVsdCkoIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiIsdCl8fGUoaSwiaWQiLGkuaWQpKX19KCl9KSx1KCJFeHBvcnRBbGxEZWNsYXJhdGlvbiIse3Zpc2l0b3I6WyJzb3VyY2UiXSxhbGlhc2VzOlsiU3RhdGVtZW50IiwiRGVjbGFyYXRpb24iLCJJbXBvcnRPckV4cG9ydERlY2xhcmF0aW9uIiwiRXhwb3J0RGVjbGFyYXRpb24iXSxmaWVsZHM6e3NvdXJjZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIlN0cmluZ0xpdGVyYWwiKX0sZXhwb3J0S2luZDooMCxsLnZhbGlkYXRlT3B0aW9uYWwpKCgwLGwuYXNzZXJ0T25lT2YpKCJ0eXBlIiwidmFsdWUiKSksYXNzZXJ0aW9uczp7b3B0aW9uYWw6ITAsdmFsaWRhdGU6KDAsbC5jaGFpbikoKDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJhcnJheSIpLCgwLGwuYXNzZXJ0RWFjaCkoKDAsbC5hc3NlcnROb2RlVHlwZSkoIkltcG9ydEF0dHJpYnV0ZSIpKSl9fX0pLHUoIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiIse3Zpc2l0b3I6WyJkZWNsYXJhdGlvbiJdLGFsaWFzZXM6WyJTdGF0ZW1lbnQiLCJEZWNsYXJhdGlvbiIsIkltcG9ydE9yRXhwb3J0RGVjbGFyYXRpb24iLCJFeHBvcnREZWNsYXJhdGlvbiJdLGZpZWxkczp7ZGVjbGFyYXRpb246e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJUU0RlY2xhcmVGdW5jdGlvbiIsIkZ1bmN0aW9uRGVjbGFyYXRpb24iLCJDbGFzc0RlY2xhcmF0aW9uIiwiRXhwcmVzc2lvbiIpfSxleHBvcnRLaW5kOigwLGwudmFsaWRhdGVPcHRpb25hbCkoKDAsbC5hc3NlcnRPbmVPZikoInZhbHVlIikpfX0pLHUoIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iLHt2aXNpdG9yOlsiZGVjbGFyYXRpb24iLCJzcGVjaWZpZXJzIiwic291cmNlIl0sYWxpYXNlczpbIlN0YXRlbWVudCIsIkRlY2xhcmF0aW9uIiwiSW1wb3J0T3JFeHBvcnREZWNsYXJhdGlvbiIsIkV4cG9ydERlY2xhcmF0aW9uIl0sZmllbGRzOntkZWNsYXJhdGlvbjp7b3B0aW9uYWw6ITAsdmFsaWRhdGU6KDAsbC5jaGFpbikoKDAsbC5hc3NlcnROb2RlVHlwZSkoIkRlY2xhcmF0aW9uIiksT2JqZWN0LmFzc2lnbigoZnVuY3Rpb24oZSx0LG4pe2lmKE9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLEJBU0VfVVJMOiIifSkuQkFCRUxfVFlQRVNfOF9CUkVBS0lORyYmbiYmZS5zcGVjaWZpZXJzLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPbmx5IGRlY2xhcmF0aW9uIG9yIHNwZWNpZmllcnMgaXMgYWxsb3dlZCBvbiBFeHBvcnROYW1lZERlY2xhcmF0aW9uIil9KSx7b25lT2ZOb2RlVHlwZXM6WyJEZWNsYXJhdGlvbiJdfSksKGZ1bmN0aW9uKGUsdCxuKXtpZihPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixCQVNFX1VSTDoiIn0pLkJBQkVMX1RZUEVTXzhfQlJFQUtJTkcmJm4mJmUuc291cmNlKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBleHBvcnQgYSBkZWNsYXJhdGlvbiBmcm9tIGEgc291cmNlIil9KSl9LGFzc2VydGlvbnM6e29wdGlvbmFsOiEwLHZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxsLmFzc2VydEVhY2gpKCgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJbXBvcnRBdHRyaWJ1dGUiKSkpfSxzcGVjaWZpZXJzOntkZWZhdWx0OltdLHZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxsLmFzc2VydEVhY2gpKGZ1bmN0aW9uKCl7Y29uc3QgZT0oMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwb3J0U3BlY2lmaWVyIiwiRXhwb3J0RGVmYXVsdFNwZWNpZmllciIsIkV4cG9ydE5hbWVzcGFjZVNwZWNpZmllciIpLHQ9KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cG9ydFNwZWNpZmllciIpO3JldHVybiBPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixCQVNFX1VSTDoiIn0pLkJBQkVMX1RZUEVTXzhfQlJFQUtJTkc/ZnVuY3Rpb24obixyLGkpeyhuLnNvdXJjZT9lOnQpKG4scixpKX06ZX0oKSkpfSxzb3VyY2U6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJTdHJpbmdMaXRlcmFsIiksb3B0aW9uYWw6ITB9LGV4cG9ydEtpbmQ6KDAsbC52YWxpZGF0ZU9wdGlvbmFsKSgoMCxsLmFzc2VydE9uZU9mKSgidHlwZSIsInZhbHVlIikpfX0pLHUoIkV4cG9ydFNwZWNpZmllciIse3Zpc2l0b3I6WyJsb2NhbCIsImV4cG9ydGVkIl0sYWxpYXNlczpbIk1vZHVsZVNwZWNpZmllciJdLGZpZWxkczp7bG9jYWw6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJZGVudGlmaWVyIil9LGV4cG9ydGVkOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIsIlN0cmluZ0xpdGVyYWwiKX0sZXhwb3J0S2luZDp7dmFsaWRhdGU6KDAsbC5hc3NlcnRPbmVPZikoInR5cGUiLCJ2YWx1ZSIpLG9wdGlvbmFsOiEwfX19KSx1KCJGb3JPZlN0YXRlbWVudCIse3Zpc2l0b3I6WyJsZWZ0IiwicmlnaHQiLCJib2R5Il0sYnVpbGRlcjpbImxlZnQiLCJyaWdodCIsImJvZHkiLCJhd2FpdCJdLGFsaWFzZXM6WyJTY29wYWJsZSIsIlN0YXRlbWVudCIsIkZvciIsIkJsb2NrUGFyZW50IiwiTG9vcCIsIkZvclhTdGF0ZW1lbnQiXSxmaWVsZHM6e2xlZnQ6e3ZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIU9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLEJBU0VfVVJMOiIifSkuQkFCRUxfVFlQRVNfOF9CUkVBS0lORylyZXR1cm4oMCxsLmFzc2VydE5vZGVUeXBlKSgiVmFyaWFibGVEZWNsYXJhdGlvbiIsIkxWYWwiKTtjb25zdCBlPSgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJWYXJpYWJsZURlY2xhcmF0aW9uIiksdD0oMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIsIk1lbWJlckV4cHJlc3Npb24iLCJBcnJheVBhdHRlcm4iLCJPYmplY3RQYXR0ZXJuIiwiVFNBc0V4cHJlc3Npb24iLCJUU1NhdGlzZmllc0V4cHJlc3Npb24iLCJUU1R5cGVBc3NlcnRpb24iLCJUU05vbk51bGxFeHByZXNzaW9uIik7cmV0dXJuIGZ1bmN0aW9uKG4saSxhKXsoMCxyLmRlZmF1bHQpKCJWYXJpYWJsZURlY2xhcmF0aW9uIixhKT9lKG4saSxhKTp0KG4saSxhKX19KCl9LHJpZ2h0Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpfSxib2R5Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiU3RhdGVtZW50Iil9LGF3YWl0OntkZWZhdWx0OiExfX19KSx1KCJJbXBvcnREZWNsYXJhdGlvbiIse3Zpc2l0b3I6WyJzcGVjaWZpZXJzIiwic291cmNlIl0sYWxpYXNlczpbIlN0YXRlbWVudCIsIkRlY2xhcmF0aW9uIiwiSW1wb3J0T3JFeHBvcnREZWNsYXJhdGlvbiJdLGZpZWxkczp7YXNzZXJ0aW9uczp7b3B0aW9uYWw6ITAsdmFsaWRhdGU6KDAsbC5jaGFpbikoKDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJhcnJheSIpLCgwLGwuYXNzZXJ0RWFjaCkoKDAsbC5hc3NlcnROb2RlVHlwZSkoIkltcG9ydEF0dHJpYnV0ZSIpKSl9LG1vZHVsZTp7b3B0aW9uYWw6ITAsdmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIil9LHNwZWNpZmllcnM6e3ZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxsLmFzc2VydEVhY2gpKCgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJbXBvcnRTcGVjaWZpZXIiLCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIiwiSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyIikpKX0sc291cmNlOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiU3RyaW5nTGl0ZXJhbCIpfSxpbXBvcnRLaW5kOnt2YWxpZGF0ZTooMCxsLmFzc2VydE9uZU9mKSgidHlwZSIsInR5cGVvZiIsInZhbHVlIiksb3B0aW9uYWw6ITB9fX0pLHUoIkltcG9ydERlZmF1bHRTcGVjaWZpZXIiLHt2aXNpdG9yOlsibG9jYWwiXSxhbGlhc2VzOlsiTW9kdWxlU3BlY2lmaWVyIl0sZmllbGRzOntsb2NhbDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiKX19fSksdSgiSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyIix7dmlzaXRvcjpbImxvY2FsIl0sYWxpYXNlczpbIk1vZHVsZVNwZWNpZmllciJdLGZpZWxkczp7bG9jYWw6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJZGVudGlmaWVyIil9fX0pLHUoIkltcG9ydFNwZWNpZmllciIse3Zpc2l0b3I6WyJsb2NhbCIsImltcG9ydGVkIl0sYWxpYXNlczpbIk1vZHVsZVNwZWNpZmllciJdLGZpZWxkczp7bG9jYWw6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJZGVudGlmaWVyIil9LGltcG9ydGVkOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIsIlN0cmluZ0xpdGVyYWwiKX0saW1wb3J0S2luZDp7dmFsaWRhdGU6KDAsbC5hc3NlcnRPbmVPZikoInR5cGUiLCJ0eXBlb2YiLCJ2YWx1ZSIpLG9wdGlvbmFsOiEwfX19KSx1KCJNZXRhUHJvcGVydHkiLHt2aXNpdG9yOlsibWV0YSIsInByb3BlcnR5Il0sYWxpYXNlczpbIkV4cHJlc3Npb24iXSxmaWVsZHM6e21ldGE6e3ZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJZGVudGlmaWVyIiksT2JqZWN0LmFzc2lnbigoZnVuY3Rpb24oZSx0LG4pe2lmKCFPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixCQVNFX1VSTDoiIn0pLkJBQkVMX1RZUEVTXzhfQlJFQUtJTkcpcmV0dXJuO2xldCBpO3N3aXRjaChuLm5hbWUpe2Nhc2UiZnVuY3Rpb24iOmk9InNlbnQiO2JyZWFrO2Nhc2UibmV3IjppPSJ0YXJnZXQiO2JyZWFrO2Nhc2UiaW1wb3J0IjppPSJtZXRhIn1pZighKDAsci5kZWZhdWx0KSgiSWRlbnRpZmllciIsZS5wcm9wZXJ0eSx7bmFtZTppfSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5yZWNvZ25pc2VkIE1ldGFQcm9wZXJ0eSIpfSkse29uZU9mTm9kZVR5cGVzOlsiSWRlbnRpZmllciJdfSkpfSxwcm9wZXJ0eTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiKX19fSk7Y29uc3QgeT0oKT0+KHthYnN0cmFjdDp7dmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksb3B0aW9uYWw6ITB9LGFjY2Vzc2liaWxpdHk6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0T25lT2YpKCJwdWJsaWMiLCJwcml2YXRlIiwicHJvdGVjdGVkIiksb3B0aW9uYWw6ITB9LHN0YXRpYzp7ZGVmYXVsdDohMX0sb3ZlcnJpZGU6e2RlZmF1bHQ6ITF9LGNvbXB1dGVkOntkZWZhdWx0OiExfSxvcHRpb25hbDp7dmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksb3B0aW9uYWw6ITB9LGtleTp7dmFsaWRhdGU6KDAsbC5jaGFpbikoZnVuY3Rpb24oKXtjb25zdCBlPSgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJZGVudGlmaWVyIiwiU3RyaW5nTGl0ZXJhbCIsIk51bWVyaWNMaXRlcmFsIiksdD0oMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpO3JldHVybiBmdW5jdGlvbihuLHIsaSl7KG4uY29tcHV0ZWQ/dDplKShuLHIsaSl9fSgpLCgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJJZGVudGlmaWVyIiwiU3RyaW5nTGl0ZXJhbCIsIk51bWVyaWNMaXRlcmFsIiwiQmlnSW50TGl0ZXJhbCIsIkV4cHJlc3Npb24iKSl9fSk7dC5jbGFzc01ldGhvZE9yUHJvcGVydHlDb21tb249eTtjb25zdCBtPSgpPT5PYmplY3QuYXNzaWduKHt9LHAoKSx5KCkse3BhcmFtczp7dmFsaWRhdGU6KDAsbC5jaGFpbikoKDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJhcnJheSIpLCgwLGwuYXNzZXJ0RWFjaCkoKDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiLCJQYXR0ZXJuIiwiUmVzdEVsZW1lbnQiLCJUU1BhcmFtZXRlclByb3BlcnR5IikpKX0sa2luZDp7dmFsaWRhdGU6KDAsbC5hc3NlcnRPbmVPZikoImdldCIsInNldCIsIm1ldGhvZCIsImNvbnN0cnVjdG9yIiksZGVmYXVsdDoibWV0aG9kIn0sYWNjZXNzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoInN0cmluZyIpLCgwLGwuYXNzZXJ0T25lT2YpKCJwdWJsaWMiLCJwcml2YXRlIiwicHJvdGVjdGVkIikpLG9wdGlvbmFsOiEwfSxkZWNvcmF0b3JzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiRGVjb3JhdG9yIikpKSxvcHRpb25hbDohMH19KTt0LmNsYXNzTWV0aG9kT3JEZWNsYXJlTWV0aG9kQ29tbW9uPW0sdSgiQ2xhc3NNZXRob2QiLHthbGlhc2VzOlsiRnVuY3Rpb24iLCJTY29wYWJsZSIsIkJsb2NrUGFyZW50IiwiRnVuY3Rpb25QYXJlbnQiLCJNZXRob2QiXSxidWlsZGVyOlsia2luZCIsImtleSIsInBhcmFtcyIsImJvZHkiLCJjb21wdXRlZCIsInN0YXRpYyIsImdlbmVyYXRvciIsImFzeW5jIl0sdmlzaXRvcjpbImtleSIsInBhcmFtcyIsImJvZHkiLCJkZWNvcmF0b3JzIiwicmV0dXJuVHlwZSIsInR5cGVQYXJhbWV0ZXJzIl0sZmllbGRzOk9iamVjdC5hc3NpZ24oe30sbSgpLGMoKSx7Ym9keTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkJsb2NrU3RhdGVtZW50Iil9fSl9KSx1KCJPYmplY3RQYXR0ZXJuIix7dmlzaXRvcjpbInByb3BlcnRpZXMiLCJ0eXBlQW5ub3RhdGlvbiIsImRlY29yYXRvcnMiXSxidWlsZGVyOlsicHJvcGVydGllcyJdLGFsaWFzZXM6WyJQYXR0ZXJuIiwiUGF0dGVybkxpa2UiLCJMVmFsIl0sZmllbGRzOk9iamVjdC5hc3NpZ24oe30sZigpLHtwcm9wZXJ0aWVzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiUmVzdEVsZW1lbnQiLCJPYmplY3RQcm9wZXJ0eSIpKSl9fSl9KSx1KCJTcHJlYWRFbGVtZW50Iix7dmlzaXRvcjpbImFyZ3VtZW50Il0sYWxpYXNlczpbIlVuYXJ5TGlrZSJdLGRlcHJlY2F0ZWRBbGlhczoiU3ByZWFkUHJvcGVydHkiLGZpZWxkczp7YXJndW1lbnQ6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIil9fX0pLHUoIlN1cGVyIix7YWxpYXNlczpbIkV4cHJlc3Npb24iXX0pLHUoIlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiIse3Zpc2l0b3I6WyJ0YWciLCJxdWFzaSIsInR5cGVQYXJhbWV0ZXJzIl0sYnVpbGRlcjpbInRhZyIsInF1YXNpIl0sYWxpYXNlczpbIkV4cHJlc3Npb24iXSxmaWVsZHM6e3RhZzp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX0scXVhc2k6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJUZW1wbGF0ZUxpdGVyYWwiKX0sdHlwZVBhcmFtZXRlcnM6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIsIlRTVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKSxvcHRpb25hbDohMH19fSksdSgiVGVtcGxhdGVFbGVtZW50Iix7YnVpbGRlcjpbInZhbHVlIiwidGFpbCJdLGZpZWxkczp7dmFsdWU6e3ZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0U2hhcGUpKHtyYXc6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0VmFsdWVUeXBlKSgic3RyaW5nIil9LGNvb2tlZDp7dmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJzdHJpbmciKSxvcHRpb25hbDohMH19KSwoZnVuY3Rpb24oZSl7Y29uc3QgdD1lLnZhbHVlLnJhdztsZXQgbj0hMTtjb25zdCByPSgpPT57dGhyb3cgbmV3IEVycm9yKCJJbnRlcm5hbCBAYmFiZWwvdHlwZXMgZXJyb3IuIil9LHtzdHI6aSxmaXJzdEludmFsaWRMb2M6YX09KDAsby5yZWFkU3RyaW5nQ29udGVudHMpKCJ0ZW1wbGF0ZSIsdCwwLDAsMCx7dW50ZXJtaW5hdGVkKCl7bj0hMH0sc3RyaWN0TnVtZXJpY0VzY2FwZTpyLGludmFsaWRFc2NhcGVTZXF1ZW5jZTpyLG51bWVyaWNTZXBhcmF0b3JJbkVzY2FwZVNlcXVlbmNlOnIsdW5leHBlY3RlZE51bWVyaWNTZXBhcmF0b3I6cixpbnZhbGlkRGlnaXQ6cixpbnZhbGlkQ29kZVBvaW50OnJ9KTtpZighbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcmF3Iik7ZS52YWx1ZS5jb29rZWQ9YT9udWxsOml9KSl9LHRhaWw6e2RlZmF1bHQ6ITF9fX0pLHUoIlRlbXBsYXRlTGl0ZXJhbCIse3Zpc2l0b3I6WyJxdWFzaXMiLCJleHByZXNzaW9ucyJdLGFsaWFzZXM6WyJFeHByZXNzaW9uIiwiTGl0ZXJhbCJdLGZpZWxkczp7cXVhc2lzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiVGVtcGxhdGVFbGVtZW50IikpKX0sZXhwcmVzc2lvbnM6e3ZhbGlkYXRlOigwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYXJyYXkiKSwoMCxsLmFzc2VydEVhY2gpKCgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIiwiVFNUeXBlIikpLChmdW5jdGlvbihlLHQsbil7aWYoZS5xdWFzaXMubGVuZ3RoIT09bi5sZW5ndGgrMSl0aHJvdyBuZXcgVHlwZUVycm9yKGBOdW1iZXIgb2YgJHtlLnR5cGV9IHF1YXNpcyBzaG91bGQgYmUgZXhhY3RseSBvbmUgbW9yZSB0aGFuIHRoZSBudW1iZXIgb2YgZXhwcmVzc2lvbnMuXG5FeHBlY3RlZCAke24ubGVuZ3RoKzF9IHF1YXNpcyBidXQgZ290ICR7ZS5xdWFzaXMubGVuZ3RofWApfSkpfX19KSx1KCJZaWVsZEV4cHJlc3Npb24iLHtidWlsZGVyOlsiYXJndW1lbnQiLCJkZWxlZ2F0ZSJdLHZpc2l0b3I6WyJhcmd1bWVudCJdLGFsaWFzZXM6WyJFeHByZXNzaW9uIiwiVGVybWluYXRvcmxlc3MiXSxmaWVsZHM6e2RlbGVnYXRlOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSxPYmplY3QuYXNzaWduKChmdW5jdGlvbihlLHQsbil7aWYoT2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5CQUJFTF9UWVBFU184X0JSRUFLSU5HJiZuJiYhZS5hcmd1bWVudCl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm9wZXJ0eSBkZWxlZ2F0ZSBvZiBZaWVsZEV4cHJlc3Npb24gY2Fubm90IGJlIHRydWUgaWYgdGhlcmUgaXMgbm8gYXJndW1lbnQiKX0pLHt0eXBlOiJib29sZWFuIn0pKSxkZWZhdWx0OiExfSxhcmd1bWVudDp7b3B0aW9uYWw6ITAsdmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX19fSksdSgiQXdhaXRFeHByZXNzaW9uIix7YnVpbGRlcjpbImFyZ3VtZW50Il0sdmlzaXRvcjpbImFyZ3VtZW50Il0sYWxpYXNlczpbIkV4cHJlc3Npb24iLCJUZXJtaW5hdG9ybGVzcyJdLGZpZWxkczp7YXJndW1lbnQ6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIil9fX0pLHUoIkltcG9ydCIse2FsaWFzZXM6WyJFeHByZXNzaW9uIl19KSx1KCJCaWdJbnRMaXRlcmFsIix7YnVpbGRlcjpbInZhbHVlIl0sZmllbGRzOnt2YWx1ZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJzdHJpbmciKX19LGFsaWFzZXM6WyJFeHByZXNzaW9uIiwiUHVyZWlzaCIsIkxpdGVyYWwiLCJJbW11dGFibGUiXX0pLHUoIkV4cG9ydE5hbWVzcGFjZVNwZWNpZmllciIse3Zpc2l0b3I6WyJleHBvcnRlZCJdLGFsaWFzZXM6WyJNb2R1bGVTcGVjaWZpZXIiXSxmaWVsZHM6e2V4cG9ydGVkOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIpfX19KSx1KCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iLHtidWlsZGVyOlsib2JqZWN0IiwicHJvcGVydHkiLCJjb21wdXRlZCIsIm9wdGlvbmFsIl0sdmlzaXRvcjpbIm9iamVjdCIsInByb3BlcnR5Il0sYWxpYXNlczpbIkV4cHJlc3Npb24iXSxmaWVsZHM6e29iamVjdDp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX0scHJvcGVydHk6e3ZhbGlkYXRlOmZ1bmN0aW9uKCl7Y29uc3QgZT0oMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIpLHQ9KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKTtyZXR1cm4gT2JqZWN0LmFzc2lnbigoZnVuY3Rpb24obixyLGkpeyhuLmNvbXB1dGVkP3Q6ZSkobixyLGkpfSkse29uZU9mTm9kZVR5cGVzOlsiRXhwcmVzc2lvbiIsIklkZW50aWZpZXIiXX0pfSgpfSxjb21wdXRlZDp7ZGVmYXVsdDohMX0sb3B0aW9uYWw6e3ZhbGlkYXRlOk9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLEJBU0VfVVJMOiIifSkuQkFCRUxfVFlQRVNfOF9CUkVBS0lORz8oMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSwoMCxsLmFzc2VydE9wdGlvbmFsQ2hhaW5TdGFydCkoKSk6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIil9fX0pLHUoIk9wdGlvbmFsQ2FsbEV4cHJlc3Npb24iLHt2aXNpdG9yOlsiY2FsbGVlIiwiYXJndW1lbnRzIiwidHlwZVBhcmFtZXRlcnMiLCJ0eXBlQXJndW1lbnRzIl0sYnVpbGRlcjpbImNhbGxlZSIsImFyZ3VtZW50cyIsIm9wdGlvbmFsIl0sYWxpYXNlczpbIkV4cHJlc3Npb24iXSxmaWVsZHM6e2NhbGxlZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKX0sYXJndW1lbnRzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIsIlNwcmVhZEVsZW1lbnQiLCJKU1hOYW1lc3BhY2VkTmFtZSIsIkFyZ3VtZW50UGxhY2Vob2xkZXIiKSkpfSxvcHRpb25hbDp7dmFsaWRhdGU6T2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5CQUJFTF9UWVBFU184X0JSRUFLSU5HPygwLGwuY2hhaW4pKCgwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpLCgwLGwuYXNzZXJ0T3B0aW9uYWxDaGFpblN0YXJ0KSgpKTooMCxsLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKX0sdHlwZUFyZ3VtZW50czp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIiksb3B0aW9uYWw6ITB9LHR5cGVQYXJhbWV0ZXJzOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiVFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpLG9wdGlvbmFsOiEwfX19KSx1KCJDbGFzc1Byb3BlcnR5Iix7dmlzaXRvcjpbImtleSIsInZhbHVlIiwidHlwZUFubm90YXRpb24iLCJkZWNvcmF0b3JzIl0sYnVpbGRlcjpbImtleSIsInZhbHVlIiwidHlwZUFubm90YXRpb24iLCJkZWNvcmF0b3JzIiwiY29tcHV0ZWQiLCJzdGF0aWMiXSxhbGlhc2VzOlsiUHJvcGVydHkiXSxmaWVsZHM6T2JqZWN0LmFzc2lnbih7fSx5KCkse3ZhbHVlOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpLG9wdGlvbmFsOiEwfSxkZWZpbml0ZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksb3B0aW9uYWw6ITB9LHR5cGVBbm5vdGF0aW9uOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiVHlwZUFubm90YXRpb24iLCJUU1R5cGVBbm5vdGF0aW9uIiwiTm9vcCIpLG9wdGlvbmFsOiEwfSxkZWNvcmF0b3JzOnt2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiRGVjb3JhdG9yIikpKSxvcHRpb25hbDohMH0scmVhZG9ubHk6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpLG9wdGlvbmFsOiEwfSxkZWNsYXJlOnt2YWxpZGF0ZTooMCxsLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSxvcHRpb25hbDohMH0sdmFyaWFuY2U6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJWYXJpYW5jZSIpLG9wdGlvbmFsOiEwfX0pfSksdSgiQ2xhc3NBY2Nlc3NvclByb3BlcnR5Iix7dmlzaXRvcjpbImtleSIsInZhbHVlIiwidHlwZUFubm90YXRpb24iLCJkZWNvcmF0b3JzIl0sYnVpbGRlcjpbImtleSIsInZhbHVlIiwidHlwZUFubm90YXRpb24iLCJkZWNvcmF0b3JzIiwiY29tcHV0ZWQiLCJzdGF0aWMiXSxhbGlhc2VzOlsiUHJvcGVydHkiLCJBY2Nlc3NvciJdLGZpZWxkczpPYmplY3QuYXNzaWduKHt9LHkoKSx7a2V5Ont2YWxpZGF0ZTooMCxsLmNoYWluKShmdW5jdGlvbigpe2NvbnN0IGU9KDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiLCJTdHJpbmdMaXRlcmFsIiwiTnVtZXJpY0xpdGVyYWwiLCJCaWdJbnRMaXRlcmFsIiwiUHJpdmF0ZU5hbWUiKSx0PSgwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJFeHByZXNzaW9uIik7cmV0dXJuIGZ1bmN0aW9uKG4scixpKXsobi5jb21wdXRlZD90OmUpKG4scixpKX19KCksKDAsbC5hc3NlcnROb2RlVHlwZSkoIklkZW50aWZpZXIiLCJTdHJpbmdMaXRlcmFsIiwiTnVtZXJpY0xpdGVyYWwiLCJCaWdJbnRMaXRlcmFsIiwiRXhwcmVzc2lvbiIsIlByaXZhdGVOYW1lIikpfSx2YWx1ZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIkV4cHJlc3Npb24iKSxvcHRpb25hbDohMH0sZGVmaW5pdGU6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpLG9wdGlvbmFsOiEwfSx0eXBlQW5ub3RhdGlvbjp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIlR5cGVBbm5vdGF0aW9uIiwiVFNUeXBlQW5ub3RhdGlvbiIsIk5vb3AiKSxvcHRpb25hbDohMH0sZGVjb3JhdG9yczp7dmFsaWRhdGU6KDAsbC5jaGFpbikoKDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJhcnJheSIpLCgwLGwuYXNzZXJ0RWFjaCkoKDAsbC5hc3NlcnROb2RlVHlwZSkoIkRlY29yYXRvciIpKSksb3B0aW9uYWw6ITB9LHJlYWRvbmx5Ont2YWxpZGF0ZTooMCxsLmFzc2VydFZhbHVlVHlwZSkoImJvb2xlYW4iKSxvcHRpb25hbDohMH0sZGVjbGFyZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksb3B0aW9uYWw6ITB9LHZhcmlhbmNlOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiVmFyaWFuY2UiKSxvcHRpb25hbDohMH19KX0pLHUoIkNsYXNzUHJpdmF0ZVByb3BlcnR5Iix7dmlzaXRvcjpbImtleSIsInZhbHVlIiwiZGVjb3JhdG9ycyIsInR5cGVBbm5vdGF0aW9uIl0sYnVpbGRlcjpbImtleSIsInZhbHVlIiwiZGVjb3JhdG9ycyIsInN0YXRpYyJdLGFsaWFzZXM6WyJQcm9wZXJ0eSIsIlByaXZhdGUiXSxmaWVsZHM6e2tleTp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIlByaXZhdGVOYW1lIil9LHZhbHVlOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiRXhwcmVzc2lvbiIpLG9wdGlvbmFsOiEwfSx0eXBlQW5ub3RhdGlvbjp7dmFsaWRhdGU6KDAsbC5hc3NlcnROb2RlVHlwZSkoIlR5cGVBbm5vdGF0aW9uIiwiVFNUeXBlQW5ub3RhdGlvbiIsIk5vb3AiKSxvcHRpb25hbDohMH0sZGVjb3JhdG9yczp7dmFsaWRhdGU6KDAsbC5jaGFpbikoKDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJhcnJheSIpLCgwLGwuYXNzZXJ0RWFjaCkoKDAsbC5hc3NlcnROb2RlVHlwZSkoIkRlY29yYXRvciIpKSksb3B0aW9uYWw6ITB9LHN0YXRpYzp7dmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksZGVmYXVsdDohMX0scmVhZG9ubHk6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0VmFsdWVUeXBlKSgiYm9vbGVhbiIpLG9wdGlvbmFsOiEwfSxkZWZpbml0ZTp7dmFsaWRhdGU6KDAsbC5hc3NlcnRWYWx1ZVR5cGUpKCJib29sZWFuIiksb3B0aW9uYWw6ITB9LHZhcmlhbmNlOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiVmFyaWFuY2UiKSxvcHRpb25hbDohMH19fSksdSgiQ2xhc3NQcml2YXRlTWV0aG9kIix7YnVpbGRlcjpbImtpbmQiLCJrZXkiLCJwYXJhbXMiLCJib2R5Iiwic3RhdGljIl0sdmlzaXRvcjpbImtleSIsInBhcmFtcyIsImJvZHkiLCJkZWNvcmF0b3JzIiwicmV0dXJuVHlwZSIsInR5cGVQYXJhbWV0ZXJzIl0sYWxpYXNlczpbIkZ1bmN0aW9uIiwiU2NvcGFibGUiLCJCbG9ja1BhcmVudCIsIkZ1bmN0aW9uUGFyZW50IiwiTWV0aG9kIiwiUHJpdmF0ZSJdLGZpZWxkczpPYmplY3QuYXNzaWduKHt9LG0oKSxjKCkse2tpbmQ6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0T25lT2YpKCJnZXQiLCJzZXQiLCJtZXRob2QiKSxkZWZhdWx0OiJtZXRob2QifSxrZXk6e3ZhbGlkYXRlOigwLGwuYXNzZXJ0Tm9kZVR5cGUpKCJQcml2YXRlTmFtZSIpfSxib2R5Ont2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiQmxvY2tTdGF0ZW1lbnQiKX19KX0pLHUoIlByaXZhdGVOYW1lIix7dmlzaXRvcjpbImlkIl0sYWxpYXNlczpbIlByaXZhdGUiXSxmaWVsZHM6e2lkOnt2YWxpZGF0ZTooMCxsLmFzc2VydE5vZGVUeXBlKSgiSWRlbnRpZmllciIpfX19KSx1KCJTdGF0aWNCbG9jayIse3Zpc2l0b3I6WyJib2R5Il0sZmllbGRzOntib2R5Ont2YWxpZGF0ZTooMCxsLmNoYWluKSgoMCxsLmFzc2VydFZhbHVlVHlwZSkoImFycmF5IiksKDAsbC5hc3NlcnRFYWNoKSgoMCxsLmFzc2VydE5vZGVUeXBlKSgiU3RhdGVtZW50IikpKX19LGFsaWFzZXM6WyJTY29wYWJsZSIsIkJsb2NrUGFyZW50IiwiRnVuY3Rpb25QYXJlbnQiXX0pfSxmYTVkOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQpeygwLHIuZGVmYXVsdCkoImxlYWRpbmdDb21tZW50cyIsZSx0KX07dmFyIHI9bigiMTMxNSIpfSxmYWZkOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbiBlKHQsbixpKXtpZighdClyZXR1cm47Y29uc3QgYT1yLlZJU0lUT1JfS0VZU1t0LnR5cGVdO2lmKGEpe24odCxpPWl8fHt9KTtmb3IoY29uc3QgciBvZiBhKXtjb25zdCBhPXRbcl07aWYoQXJyYXkuaXNBcnJheShhKSlmb3IoY29uc3QgdCBvZiBhKWUodCxuLGkpO2Vsc2UgZShhLG4saSl9fX07dmFyIHI9bigiYjk3OCIpfSxmYjg0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubGlzdD10Lm5vZGVzPXZvaWQgMDt2YXIgcj1uKCIyNTJhIik7Y29uc3R7aXNBcnJheUV4cHJlc3Npb246aSxpc0Fzc2lnbm1lbnRFeHByZXNzaW9uOmEsaXNCaW5hcnk6byxpc0Jsb2NrU3RhdGVtZW50OnMsaXNDYWxsRXhwcmVzc2lvbjpsLGlzRnVuY3Rpb246dSxpc0lkZW50aWZpZXI6cCxpc0xpdGVyYWw6Yyxpc01lbWJlckV4cHJlc3Npb246ZCxpc09iamVjdEV4cHJlc3Npb246Zixpc09wdGlvbmFsQ2FsbEV4cHJlc3Npb246eSxpc09wdGlvbmFsTWVtYmVyRXhwcmVzc2lvbjptLGlzU3RyaW5nTGl0ZXJhbDpofT1yO2Z1bmN0aW9uIFQoZSx0PXt9KXtyZXR1cm4gZChlKXx8bShlKT8oVChlLm9iamVjdCx0KSxlLmNvbXB1dGVkJiZUKGUucHJvcGVydHksdCkpOm8oZSl8fGEoZSk/KFQoZS5sZWZ0LHQpLFQoZS5yaWdodCx0KSk6bChlKXx8eShlKT8odC5oYXNDYWxsPSEwLFQoZS5jYWxsZWUsdCkpOnUoZSk/dC5oYXNGdW5jdGlvbj0hMDpwKGUpJiYodC5oYXNIZWxwZXI9dC5oYXNIZWxwZXJ8fGIoZS5jYWxsZWUpKSx0fWZ1bmN0aW9uIGIoZSl7cmV0dXJuIGQoZSk/YihlLm9iamVjdCl8fGIoZS5wcm9wZXJ0eSk6cChlKT8icmVxdWlyZSI9PT1lLm5hbWV8fCJfIj09PWUubmFtZVswXTpsKGUpP2IoZS5jYWxsZWUpOiEoIW8oZSkmJiFhKGUpKSYmKHAoZS5sZWZ0KSYmYihlLmxlZnQpfHxiKGUucmlnaHQpKX1mdW5jdGlvbiBTKGUpe3JldHVybiBjKGUpfHxmKGUpfHxpKGUpfHxwKGUpfHxkKGUpfWNvbnN0IEU9e0Fzc2lnbm1lbnRFeHByZXNzaW9uKGUpe2NvbnN0IHQ9VChlLnJpZ2h0KTtpZih0Lmhhc0NhbGwmJnQuaGFzSGVscGVyfHx0Lmhhc0Z1bmN0aW9uKXJldHVybntiZWZvcmU6dC5oYXNGdW5jdGlvbixhZnRlcjohMH19LFN3aXRjaENhc2U6KGUsdCk9Pih7YmVmb3JlOiEhZS5jb25zZXF1ZW50Lmxlbmd0aHx8dC5jYXNlc1swXT09PWUsYWZ0ZXI6IWUuY29uc2VxdWVudC5sZW5ndGgmJnQuY2FzZXNbdC5jYXNlcy5sZW5ndGgtMV09PT1lfSksTG9naWNhbEV4cHJlc3Npb24oZSl7aWYodShlLmxlZnQpfHx1KGUucmlnaHQpKXJldHVybnthZnRlcjohMH19LExpdGVyYWwoZSl7aWYoaChlKSYmInVzZSBzdHJpY3QiPT09ZS52YWx1ZSlyZXR1cm57YWZ0ZXI6ITB9fSxDYWxsRXhwcmVzc2lvbihlKXtpZih1KGUuY2FsbGVlKXx8YihlKSlyZXR1cm57YmVmb3JlOiEwLGFmdGVyOiEwfX0sT3B0aW9uYWxDYWxsRXhwcmVzc2lvbihlKXtpZih1KGUuY2FsbGVlKSlyZXR1cm57YmVmb3JlOiEwLGFmdGVyOiEwfX0sVmFyaWFibGVEZWNsYXJhdGlvbihlKXtmb3IobGV0IHQ9MDt0PGUuZGVjbGFyYXRpb25zLmxlbmd0aDt0Kyspe2NvbnN0IG49ZS5kZWNsYXJhdGlvbnNbdF07bGV0IHI9YihuLmlkKSYmIVMobi5pbml0KTtpZighcil7Y29uc3QgZT1UKG4uaW5pdCk7cj1iKG4uaW5pdCkmJmUuaGFzQ2FsbHx8ZS5oYXNGdW5jdGlvbn1pZihyKXJldHVybntiZWZvcmU6ITAsYWZ0ZXI6ITB9fX0sSWZTdGF0ZW1lbnQoZSl7aWYocyhlLmNvbnNlcXVlbnQpKXJldHVybntiZWZvcmU6ITAsYWZ0ZXI6ITB9fX07dC5ub2Rlcz1FLEUuT2JqZWN0UHJvcGVydHk9RS5PYmplY3RUeXBlUHJvcGVydHk9RS5PYmplY3RNZXRob2Q9ZnVuY3Rpb24oZSx0KXtpZih0LnByb3BlcnRpZXNbMF09PT1lKXJldHVybntiZWZvcmU6ITB9fSxFLk9iamVjdFR5cGVDYWxsUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZih0LmNhbGxQcm9wZXJ0aWVzWzBdPT09ZSYmKG51bGw9PShuPXQucHJvcGVydGllcyl8fCFuLmxlbmd0aCkpcmV0dXJue2JlZm9yZTohMH19LEUuT2JqZWN0VHlwZUluZGV4ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbixyO2lmKCEodC5pbmRleGVyc1swXSE9PWV8fG51bGwhPShuPXQucHJvcGVydGllcykmJm4ubGVuZ3RofHxudWxsIT0ocj10LmNhbGxQcm9wZXJ0aWVzKSYmci5sZW5ndGgpKXJldHVybntiZWZvcmU6ITB9fSxFLk9iamVjdFR5cGVJbnRlcm5hbFNsb3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk7aWYoISh0LmludGVybmFsU2xvdHNbMF0hPT1lfHxudWxsIT0obj10LnByb3BlcnRpZXMpJiZuLmxlbmd0aHx8bnVsbCE9KHI9dC5jYWxsUHJvcGVydGllcykmJnIubGVuZ3RofHxudWxsIT0oaT10LmluZGV4ZXJzKSYmaS5sZW5ndGgpKXJldHVybntiZWZvcmU6ITB9fTtjb25zdCBnPXtWYXJpYWJsZURlY2xhcmF0aW9uOmU9PmUuZGVjbGFyYXRpb25zLm1hcChlPT5lLmluaXQpLEFycmF5RXhwcmVzc2lvbjplPT5lLmVsZW1lbnRzLE9iamVjdEV4cHJlc3Npb246ZT0+ZS5wcm9wZXJ0aWVzfTt0Lmxpc3Q9ZyxbWyJGdW5jdGlvbiIsITBdLFsiQ2xhc3MiLCEwXSxbIkxvb3AiLCEwXSxbIkxhYmVsZWRTdGF0ZW1lbnQiLCEwXSxbIlN3aXRjaFN0YXRlbWVudCIsITBdLFsiVHJ5U3RhdGVtZW50IiwhMF1dLmZvckVhY2goKGZ1bmN0aW9uKFtlLHRdKXsiYm9vbGVhbiI9PXR5cGVvZiB0JiYodD17YWZ0ZXI6dCxiZWZvcmU6dH0pLFtlXS5jb25jYXQoci5GTElQUEVEX0FMSUFTX0tFWVNbZV18fFtdKS5mb3JFYWNoKChmdW5jdGlvbihlKXtFW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkpfSkpfSxmY2VhOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIjRmMzgiKSxpPXIuX19pbXBvcnREZWZhdWx0KG4oIjQxYmEiKSksYT1yLl9faW1wb3J0RGVmYXVsdChuKCJhYTIwIikpLG89ci5fX2ltcG9ydERlZmF1bHQobigiMjFiMSIpKSxzPXIuX19pbXBvcnREZWZhdWx0KG4oIjdmNGIiKSksbD1yLl9faW1wb3J0RGVmYXVsdChuKCI2OTExIikpO3QuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe3ZhciBlPVtdLHQ9W107dmFyIG49e3VzZTpmdW5jdGlvbihyKXt2YXIgaT1lLmluZGV4T2Yocik7cmV0dXJuLTE9PT1pJiYoaT1lLmxlbmd0aCxlLnB1c2gociksdFtpXT1yKG4pKSx0W2ldfX07cmV0dXJuIG59KCksbj10LnVzZShpLmRlZmF1bHQpO2UuZm9yRWFjaCh0LnVzZSksbi5maW5hbGl6ZSgpO3ZhciByPXQudXNlKGEuZGVmYXVsdCk7cmV0dXJue1R5cGU6bi5UeXBlLGJ1aWx0SW5UeXBlczpuLmJ1aWx0SW5UeXBlcyxuYW1lZFR5cGVzOm4ubmFtZWRUeXBlcyxidWlsZGVyczpuLmJ1aWxkZXJzLGRlZmluZU1ldGhvZDpuLmRlZmluZU1ldGhvZCxnZXRGaWVsZE5hbWVzOm4uZ2V0RmllbGROYW1lcyxnZXRGaWVsZFZhbHVlOm4uZ2V0RmllbGRWYWx1ZSxlYWNoRmllbGQ6bi5lYWNoRmllbGQsc29tZUZpZWxkOm4uc29tZUZpZWxkLGdldFN1cGVydHlwZU5hbWVzOm4uZ2V0U3VwZXJ0eXBlTmFtZXMsZ2V0QnVpbGRlck5hbWU6bi5nZXRCdWlsZGVyTmFtZSxhc3ROb2Rlc0FyZUVxdWl2YWxlbnQ6dC51c2Uoby5kZWZhdWx0KSxmaW5hbGl6ZTpuLmZpbmFsaXplLFBhdGg6dC51c2Uocy5kZWZhdWx0KSxOb2RlUGF0aDp0LnVzZShsLmRlZmF1bHQpLFBhdGhWaXNpdG9yOnIsdXNlOnQudXNlLHZpc2l0OnIudmlzaXR9fSxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmZTBkOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQsbil7aWYoISgwLHIuaXNNZW1iZXJFeHByZXNzaW9uKShlKSlyZXR1cm4hMTtjb25zdCBpPUFycmF5LmlzQXJyYXkodCk/dDp0LnNwbGl0KCIuIiksYT1bXTtsZXQgbztmb3Iobz1lOygwLHIuaXNNZW1iZXJFeHByZXNzaW9uKShvKTtvPW8ub2JqZWN0KWEucHVzaChvLnByb3BlcnR5KTtpZihhLnB1c2gobyksYS5sZW5ndGg8aS5sZW5ndGgpcmV0dXJuITE7aWYoIW4mJmEubGVuZ3RoPmkubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wLHQ9YS5sZW5ndGgtMTtlPGkubGVuZ3RoO2UrKyx0LS0pe2NvbnN0IG49YVt0XTtsZXQgbztpZigoMCxyLmlzSWRlbnRpZmllcikobikpbz1uLm5hbWU7ZWxzZSBpZigoMCxyLmlzU3RyaW5nTGl0ZXJhbCkobikpbz1uLnZhbHVlO2Vsc2V7aWYoISgwLHIuaXNUaGlzRXhwcmVzc2lvbikobikpcmV0dXJuITE7bz0idGhpcyJ9aWYoaVtlXSE9PW8pcmV0dXJuITF9cmV0dXJuITB9O3ZhciByPW4oImM0ODUiKX0sZmZmODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRFUFJFQ0FURURfQUxJQVNFUz12b2lkIDA7dC5ERVBSRUNBVEVEX0FMSUFTRVM9e01vZHVsZURlY2xhcmF0aW9uOiJJbXBvcnRPckV4cG9ydERlY2xhcmF0aW9uIn19fV0pOw==")))
if err != nil {
panic(err)
}
err = f.Close()
if err != nil {
panic(err)
}
}