declare const content = "LyoqCiogcGxvdGx5LmpzIHYxLjU4LjQKKiBDb3B5cmlnaHQgMjAxMi0yMDIwLCBQbG90bHksIEluYy4KKiBBbGwgcmlnaHRzIHJlc2VydmVkLgoqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwohZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNleygidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpLlBsb3RseT10KCl9fSgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7ZnVuY3Rpb24gaShvLHMpe2lmKCFyW29dKXtpZighZVtvXSl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIXMmJmwpcmV0dXJuIGwobywhMCk7aWYoYSlyZXR1cm4gYShvLCEwKTt2YXIgYz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgYy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixjfXZhciB1PXJbb109e2V4cG9ydHM6e319O2Vbb11bMF0uY2FsbCh1LmV4cG9ydHMsKGZ1bmN0aW9uKHQpe3JldHVybiBpKGVbb11bMV1bdF18fHQpfSksdSx1LmV4cG9ydHMsdCxlLHIsbil9cmV0dXJuIHJbb10uZXhwb3J0c31mb3IodmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsbz0wO288bi5sZW5ndGg7bysrKWkobltvXSk7cmV0dXJuIGl9KHsxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NyYy9saWIiKSxpPXsiWCxYIGRpdiI6ImRpcmVjdGlvbjpsdHI7Zm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDsiLCJYIGlucHV0LFggYnV0dG9uIjoiZm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOyIsIlggaW5wdXQ6Zm9jdXMsWCBidXR0b246Zm9jdXMiOiJvdXRsaW5lOm5vbmU7IiwiWCBhIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCBhOmhvdmVyIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCAuY3Jpc3AiOiJzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC51c2VyLXNlbGVjdC1ub25lIjoiLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7IiwiWCBzdmciOiJvdmVyZmxvdzpoaWRkZW47IiwiWCBzdmcgYSI6ImZpbGw6IzQ0N2FkYjsiLCJYIHN2ZyBhOmhvdmVyIjoiZmlsbDojM2M2ZGM1OyIsIlggLm1haW4tc3ZnIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7IiwiWCAubWFpbi1zdmcgLmRyYWdsYXllciI6InBvaW50ZXItZXZlbnRzOmFsbDsiLCJYIC5jdXJzb3ItZGVmYXVsdCI6ImN1cnNvcjpkZWZhdWx0OyIsIlggLmN1cnNvci1wb2ludGVyIjoiY3Vyc29yOnBvaW50ZXI7IiwiWCAuY3Vyc29yLWNyb3NzaGFpciI6ImN1cnNvcjpjcm9zc2hhaXI7IiwiWCAuY3Vyc29yLW1vdmUiOiJjdXJzb3I6bW92ZTsiLCJYIC5jdXJzb3ItY29sLXJlc2l6ZSI6ImN1cnNvcjpjb2wtcmVzaXplOyIsIlggLmN1cnNvci1yb3ctcmVzaXplIjoiY3Vyc29yOnJvdy1yZXNpemU7IiwiWCAuY3Vyc29yLW5zLXJlc2l6ZSI6ImN1cnNvcjpucy1yZXNpemU7IiwiWCAuY3Vyc29yLWV3LXJlc2l6ZSI6ImN1cnNvcjpldy1yZXNpemU7IiwiWCAuY3Vyc29yLXN3LXJlc2l6ZSI6ImN1cnNvcjpzdy1yZXNpemU7IiwiWCAuY3Vyc29yLXMtcmVzaXplIjoiY3Vyc29yOnMtcmVzaXplOyIsIlggLmN1cnNvci1zZS1yZXNpemUiOiJjdXJzb3I6c2UtcmVzaXplOyIsIlggLmN1cnNvci13LXJlc2l6ZSI6ImN1cnNvcjp3LXJlc2l6ZTsiLCJYIC5jdXJzb3ItZS1yZXNpemUiOiJjdXJzb3I6ZS1yZXNpemU7IiwiWCAuY3Vyc29yLW53LXJlc2l6ZSI6ImN1cnNvcjpudy1yZXNpemU7IiwiWCAuY3Vyc29yLW4tcmVzaXplIjoiY3Vyc29yOm4tcmVzaXplOyIsIlggLmN1cnNvci1uZS1yZXNpemUiOiJjdXJzb3I6bmUtcmVzaXplOyIsIlggLmN1cnNvci1ncmFiIjoiY3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYjsiLCJYIC5tb2RlYmFyIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDtyaWdodDoycHg7IiwiWCAuZWFzZS1iZyI6Ii13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczstbW96LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzOyIsIlggLm1vZGViYXItLWhvdmVyPjpub3QoLndhdGVybWFyaykiOiJvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbXMtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzO3RyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7IiwiWDpob3ZlciAubW9kZWJhci0taG92ZXIgLm1vZGViYXItZ3JvdXAiOiJvcGFjaXR5OjE7IiwiWCAubW9kZWJhci1ncm91cCI6ImZsb2F0OmxlZnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctbGVmdDo4cHg7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDsiLCJYIC5tb2RlYmFyLWJ0biI6InBvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6M3B4IDRweDtoZWlnaHQ6MjJweDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDpub3JtYWw7Ym94LXNpemluZzpib3JkZXItYm94OyIsIlggLm1vZGViYXItYnRuIHN2ZyI6InBvc2l0aW9uOnJlbGF0aXZlO3RvcDoycHg7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCI6ImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOndyYXA7YWxpZ24tY29udGVudDpmbGV4LWVuZDttYXgtaGVpZ2h0OjEwMCU7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCBzdmciOiJ0b3A6LTFweDsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwIjoiZGlzcGxheTpibG9jaztmbG9hdDpub25lO3BhZGRpbmctbGVmdDowcHg7cGFkZGluZy1ib3R0b206OHB4OyIsIlggLm1vZGViYXIudmVydGljYWwgLm1vZGViYXItZ3JvdXAgLm1vZGViYXItYnRuIjoiZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmNlbnRlcjsiLCJYIFtkYXRhLXRpdGxlXTpiZWZvcmUsWCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7ZGlzcGxheTpub25lO29wYWNpdHk6MDt6LWluZGV4OjEwMDE7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MTEwJTtyaWdodDo1MCU7IiwiWCBbZGF0YS10aXRsZV06aG92ZXI6YmVmb3JlLFggW2RhdGEtdGl0bGVdOmhvdmVyOmFmdGVyIjoiZGlzcGxheTpibG9jaztvcGFjaXR5OjE7IiwiWCBbZGF0YS10aXRsZV06YmVmb3JlIjoiY29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7ei1pbmRleDoxMDAyO21hcmdpbi10b3A6LTEycHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNjk3MzhhO21hcmdpbi1yaWdodDotNnB4OyIsIlggW2RhdGEtdGl0bGVdOmFmdGVyIjoiY29udGVudDphdHRyKGRhdGEtdGl0bGUpO2JhY2tncm91bmQ6IzY5NzM4YTtjb2xvcjp3aGl0ZTtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1yaWdodDotMThweDtib3JkZXItcmFkaXVzOjJweDsiLCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlLFggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTphZnRlciI6InRvcDowJTtyaWdodDoyMDAlOyIsIlggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTpiZWZvcmUiOiJib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0LWNvbG9yOiM2OTczOGE7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0Oi0zMHB4OyIsIlggLnNlbGVjdC1vdXRsaW5lIjoiZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnNlbGVjdC1vdXRsaW5lLTEiOiJzdHJva2U6d2hpdGU7IiwiWCAuc2VsZWN0LW91dGxpbmUtMiI6InN0cm9rZTpibGFjaztzdHJva2UtZGFzaGFycmF5OjJweCAycHg7IixZOiJmb250LWZhbWlseTonT3BlbiBTYW5zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7cG9zaXRpb246Zml4ZWQ7dG9wOjUwcHg7cmlnaHQ6MjBweDt6LWluZGV4OjEwMDAwO2ZvbnQtc2l6ZToxMHB0O21heC13aWR0aDoxODBweDsiLCJZIHAiOiJtYXJnaW46MDsiLCJZIC5ub3RpZmllci1ub3RlIjoibWluLXdpZHRoOjE4MHB4O21heC13aWR0aDoyNTBweDtib3JkZXI6MXB4IHNvbGlkICNmZmY7ei1pbmRleDozMDAwO21hcmdpbjowO2JhY2tncm91bmQtY29sb3I6IzhjOTdhZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTQwLDE1MSwxNzUsMC45KTtjb2xvcjojZmZmO3BhZGRpbmc6MTBweDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7d29yZC13cmFwOmJyZWFrLXdvcmQ7LW1zLWh5cGhlbnM6YXV0bzstd2Via2l0LWh5cGhlbnM6YXV0bztoeXBoZW5zOmF1dG87IiwiWSAubm90aWZpZXItY2xvc2UiOiJjb2xvcjojZmZmO29wYWNpdHk6MC44O2Zsb2F0OnJpZ2h0O3BhZGRpbmc6MCA1cHg7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDsiLCJZIC5ub3RpZmllci1jbG9zZTpob3ZlciI6ImNvbG9yOiM0NDQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7In07Zm9yKHZhciBhIGluIGkpe3ZhciBvPWEucmVwbGFjZSgvXiwvLCIgLCIpLnJlcGxhY2UoL1gvZywiLmpzLXBsb3RseS1wbG90IC5wbG90bHkiKS5yZXBsYWNlKC9ZL2csIi5wbG90bHktbm90aWZpZXIiKTtuLmFkZFN0eWxlUnVsZShvLGlbYV0pfX0seyIuLi9zcmMvbGliIjo3Nzh9XSwyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGUiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGUiOjEzNjV9XSwzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JhciIpfSx7Ii4uL3NyYy90cmFjZXMvYmFyIjo5Mjl9XSw0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JhcnBvbGFyIil9LHsiLi4vc3JjL3RyYWNlcy9iYXJwb2xhciI6OTQyfV0sNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9ib3giKX0seyIuLi9zcmMvdHJhY2VzL2JveCI6OTUyfV0sNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzIil9LHsiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzIjo2NDF9XSw3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NhbmRsZXN0aWNrIil9LHsiLi4vc3JjL3RyYWNlcy9jYW5kbGVzdGljayI6OTYxfV0sODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jYXJwZXQiKX0seyIuLi9zcmMvdHJhY2VzL2NhcnBldCI6OTgwfV0sOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRoIil9LHsiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRoIjo5OTR9XSwxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRobWFwYm94Iil9LHsiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRobWFwYm94IjoxMDAxfV0sMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29uZSIpfSx7Ii4uL3NyYy90cmFjZXMvY29uZSI6MTAwN31dLDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NvbnRvdXIiKX0seyIuLi9zcmMvdHJhY2VzL2NvbnRvdXIiOjEwMjJ9XSwxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0Iil9LHsiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0IjoxMDMzfV0sMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy9jb3JlIil9LHsiLi4vc3JjL2NvcmUiOjc1NX1dLDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2RlbnNpdHltYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL2RlbnNpdHltYXBib3giOjEwNDF9XSwxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIjoxMzY2fV0sMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvZnVubmVsIil9LHsiLi4vc3JjL3RyYWNlcy9mdW5uZWwiOjEwNTF9XSwxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9mdW5uZWxhcmVhIil9LHsiLi4vc3JjL3RyYWNlcy9mdW5uZWxhcmVhIjoxMDYwfV0sMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnkiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9ncm91cGJ5IjoxMzY3fV0sMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGVhdG1hcCIpfSx7Ii4uL3NyYy90cmFjZXMvaGVhdG1hcCI6MTA3M31dLDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCIpfSx7Ii4uL3NyYy90cmFjZXMvaGVhdG1hcGdsIjoxMDgzfV0sMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iOjEwOTV9XSwyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZCIpfSx7Ii4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmQiOjExMDF9XSwyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiKX0seyIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkY29udG91ciI6MTEwNX1dLDI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2ltYWdlIil9LHsiLi4vc3JjL3RyYWNlcy9pbWFnZSI6MTExM31dLDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29yZSIpO24ucmVnaXN0ZXIoW3QoIi4vYmFyIiksdCgiLi9ib3giKSx0KCIuL2hlYXRtYXAiKSx0KCIuL2hpc3RvZ3JhbSIpLHQoIi4vaGlzdG9ncmFtMmQiKSx0KCIuL2hpc3RvZ3JhbTJkY29udG91ciIpLHQoIi4vY29udG91ciIpLHQoIi4vc2NhdHRlcnRlcm5hcnkiKSx0KCIuL3Zpb2xpbiIpLHQoIi4vZnVubmVsIiksdCgiLi93YXRlcmZhbGwiKSx0KCIuL2ltYWdlIiksdCgiLi9waWUiKSx0KCIuL3N1bmJ1cnN0IiksdCgiLi90cmVlbWFwIiksdCgiLi9mdW5uZWxhcmVhIiksdCgiLi9zY2F0dGVyM2QiKSx0KCIuL3N1cmZhY2UiKSx0KCIuL2lzb3N1cmZhY2UiKSx0KCIuL3ZvbHVtZSIpLHQoIi4vbWVzaDNkIiksdCgiLi9jb25lIiksdCgiLi9zdHJlYW10dWJlIiksdCgiLi9zY2F0dGVyZ2VvIiksdCgiLi9jaG9yb3BsZXRoIiksdCgiLi9zY2F0dGVyZ2wiKSx0KCIuL3NwbG9tIiksdCgiLi9wb2ludGNsb3VkIiksdCgiLi9oZWF0bWFwZ2wiKSx0KCIuL3BhcmNvb3JkcyIpLHQoIi4vcGFyY2F0cyIpLHQoIi4vc2NhdHRlcm1hcGJveCIpLHQoIi4vY2hvcm9wbGV0aG1hcGJveCIpLHQoIi4vZGVuc2l0eW1hcGJveCIpLHQoIi4vc2Fua2V5IiksdCgiLi9pbmRpY2F0b3IiKSx0KCIuL3RhYmxlIiksdCgiLi9jYXJwZXQiKSx0KCIuL3NjYXR0ZXJjYXJwZXQiKSx0KCIuL2NvbnRvdXJjYXJwZXQiKSx0KCIuL29obGMiKSx0KCIuL2NhbmRsZXN0aWNrIiksdCgiLi9zY2F0dGVycG9sYXIiKSx0KCIuL3NjYXR0ZXJwb2xhcmdsIiksdCgiLi9iYXJwb2xhciIpXSksbi5yZWdpc3RlcihbdCgiLi9hZ2dyZWdhdGUiKSx0KCIuL2ZpbHRlciIpLHQoIi4vZ3JvdXBieSIpLHQoIi4vc29ydCIpXSksbi5yZWdpc3RlcihbdCgiLi9jYWxlbmRhcnMiKV0pLGUuZXhwb3J0cz1ufSx7Ii4vYWdncmVnYXRlIjoyLCIuL2JhciI6MywiLi9iYXJwb2xhciI6NCwiLi9ib3giOjUsIi4vY2FsZW5kYXJzIjo2LCIuL2NhbmRsZXN0aWNrIjo3LCIuL2NhcnBldCI6OCwiLi9jaG9yb3BsZXRoIjo5LCIuL2Nob3JvcGxldGhtYXBib3giOjEwLCIuL2NvbmUiOjExLCIuL2NvbnRvdXIiOjEyLCIuL2NvbnRvdXJjYXJwZXQiOjEzLCIuL2NvcmUiOjE0LCIuL2RlbnNpdHltYXBib3giOjE1LCIuL2ZpbHRlciI6MTYsIi4vZnVubmVsIjoxNywiLi9mdW5uZWxhcmVhIjoxOCwiLi9ncm91cGJ5IjoxOSwiLi9oZWF0bWFwIjoyMCwiLi9oZWF0bWFwZ2wiOjIxLCIuL2hpc3RvZ3JhbSI6MjIsIi4vaGlzdG9ncmFtMmQiOjIzLCIuL2hpc3RvZ3JhbTJkY29udG91ciI6MjQsIi4vaW1hZ2UiOjI1LCIuL2luZGljYXRvciI6MjcsIi4vaXNvc3VyZmFjZSI6MjgsIi4vbWVzaDNkIjoyOSwiLi9vaGxjIjozMCwiLi9wYXJjYXRzIjozMSwiLi9wYXJjb29yZHMiOjMyLCIuL3BpZSI6MzMsIi4vcG9pbnRjbG91ZCI6MzQsIi4vc2Fua2V5IjozNSwiLi9zY2F0dGVyM2QiOjM2LCIuL3NjYXR0ZXJjYXJwZXQiOjM3LCIuL3NjYXR0ZXJnZW8iOjM4LCIuL3NjYXR0ZXJnbCI6MzksIi4vc2NhdHRlcm1hcGJveCI6NDAsIi4vc2NhdHRlcnBvbGFyIjo0MSwiLi9zY2F0dGVycG9sYXJnbCI6NDIsIi4vc2NhdHRlcnRlcm5hcnkiOjQzLCIuL3NvcnQiOjQ0LCIuL3NwbG9tIjo0NSwiLi9zdHJlYW10dWJlIjo0NiwiLi9zdW5idXJzdCI6NDcsIi4vc3VyZmFjZSI6NDgsIi4vdGFibGUiOjQ5LCIuL3RyZWVtYXAiOjUwLCIuL3Zpb2xpbiI6NTEsIi4vdm9sdW1lIjo1MiwiLi93YXRlcmZhbGwiOjUzfV0sMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaW5kaWNhdG9yIil9LHsiLi4vc3JjL3RyYWNlcy9pbmRpY2F0b3IiOjExMjF9XSwyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlIil9LHsiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlIjoxMTI3fV0sMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvbWVzaDNkIil9LHsiLi4vc3JjL3RyYWNlcy9tZXNoM2QiOjExMzJ9XSwzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9vaGxjIil9LHsiLi4vc3JjL3RyYWNlcy9vaGxjIjoxMTM3fV0sMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcGFyY2F0cyIpfSx7Ii4uL3NyYy90cmFjZXMvcGFyY2F0cyI6MTE0Nn1dLDMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BhcmNvb3JkcyIpfSx7Ii4uL3NyYy90cmFjZXMvcGFyY29vcmRzIjoxMTU2fV0sMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcGllIil9LHsiLi4vc3JjL3RyYWNlcy9waWUiOjExNjd9XSwzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9wb2ludGNsb3VkIil9LHsiLi4vc3JjL3RyYWNlcy9wb2ludGNsb3VkIjoxMTc2fV0sMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2Fua2V5Iil9LHsiLi4vc3JjL3RyYWNlcy9zYW5rZXkiOjExODJ9XSwzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyM2QiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXIzZCI6MTIyMH1dLDM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJjYXJwZXQiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJjYXJwZXQiOjEyMjd9XSwzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2VvIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2VvIjoxMjM1fV0sMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdsIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2wiOjEyNDh9XSw0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVybWFwYm94Iil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVybWFwYm94IjoxMjU4fV0sNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXIiOjEyNjZ9XSw0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXJnbCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyZ2wiOjEyNzN9XSw0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVydGVybmFyeSIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnkiOjEyODF9XSw0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvc29ydCIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL3NvcnQiOjEzNjl9XSw0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zcGxvbSIpfSx7Ii4uL3NyYy90cmFjZXMvc3Bsb20iOjEyOTB9XSw0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zdHJlYW10dWJlIil9LHsiLi4vc3JjL3RyYWNlcy9zdHJlYW10dWJlIjoxMjk4fV0sNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3VuYnVyc3QiKX0seyIuLi9zcmMvdHJhY2VzL3N1bmJ1cnN0IjoxMzA2fV0sNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3VyZmFjZSIpfSx7Ii4uL3NyYy90cmFjZXMvc3VyZmFjZSI6MTMxNX1dLDQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3RhYmxlIil9LHsiLi4vc3JjL3RyYWNlcy90YWJsZSI6MTMyM31dLDUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3RyZWVtYXAiKX0seyIuLi9zcmMvdHJhY2VzL3RyZWVtYXAiOjEzMzJ9XSw1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy92aW9saW4iKX0seyIuLi9zcmMvdHJhY2VzL3Zpb2xpbiI6MTM0NH1dLDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3ZvbHVtZSIpfSx7Ii4uL3NyYy90cmFjZXMvdm9sdW1lIjoxMzUyfV0sNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvd2F0ZXJmYWxsIil9LHsiLi4vc3JjL3RyYWNlcy93YXRlcmZhbGwiOjEzNjB9XSw1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLmV5ZXx8WzAsMCwxXSxyPXQuY2VudGVyfHxbMCwwLDBdLHM9dC51cHx8WzAsMSwwXSxsPXQuZGlzdGFuY2VMaW1pdHN8fFswLDEvMF0sYz10Lm1vZGV8fCJ0dXJudGFibGUiLHU9bigpLGY9aSgpLGg9YSgpO3JldHVybiB1LnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksdS5sb29rQXQoMCxlLHIscyksZi5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLGYubG9va0F0KDAsZSxyLHMpLGguc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSxoLmxvb2tBdCgwLGUscixzKSxuZXcgbyh7dHVybnRhYmxlOnUsb3JiaXQ6ZixtYXRyaXg6aH0sYyl9O3ZhciBuPXQoInR1cm50YWJsZS1jYW1lcmEtY29udHJvbGxlciIpLGk9dCgib3JiaXQtY2FtZXJhLWNvbnRyb2xsZXIiKSxhPXQoIm1hdHJpeC1jYW1lcmEtY29udHJvbGxlciIpO2Z1bmN0aW9uIG8odCxlKXt0aGlzLl9jb250cm9sbGVyTmFtZXM9T2JqZWN0LmtleXModCksdGhpcy5fY29udHJvbGxlckxpc3Q9dGhpcy5fY29udHJvbGxlck5hbWVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSksdGhpcy5fbW9kZT1lLHRoaXMuX2FjdGl2ZT10W2VdLHRoaXMuX2FjdGl2ZXx8KHRoaXMuX21vZGU9InR1cm50YWJsZSIsdGhpcy5fYWN0aXZlPXQudHVybnRhYmxlKSx0aGlzLm1vZGVzPXRoaXMuX2NvbnRyb2xsZXJOYW1lcyx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9dmFyIHM9by5wcm90b3R5cGU7W1siZmx1c2giLDFdLFsiaWRsZSIsMV0sWyJsb29rQXQiLDRdLFsicm90YXRlIiw0XSxbInBhbiIsNF0sWyJ0cmFuc2xhdGUiLDRdLFsic2V0TWF0cml4IiwyXSxbInNldERpc3RhbmNlTGltaXRzIiwyXSxbInNldERpc3RhbmNlIiwyXV0uZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0scj1bXSxuPTA7bjx0WzFdOysrbilyLnB1c2goImEiK24pO3ZhciBpPSJ2YXIgY2M9dGhpcy5fY29udHJvbGxlckxpc3Q7Zm9yKHZhciBpPTA7aTxjYy5sZW5ndGg7KytpKXtjY1tpXS4iK3RbMF0rIigiK3Iuam9pbigpKyIpfSI7c1tlXT1GdW5jdGlvbi5hcHBseShudWxsLHIuY29uY2F0KGkpKX0pKSxzLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLl9hY3RpdmUucmVjYWxjTWF0cml4KHQpfSxzLmdldERpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hY3RpdmUuZ2V0RGlzdGFuY2UodCl9LHMuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZUxpbWl0cyh0KX0scy5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmUubGFzdFQoKX0scy5zZXRNb2RlPWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLl9tb2RlKXt2YXIgZT10aGlzLl9jb250cm9sbGVyTmFtZXMuaW5kZXhPZih0KTtpZighKGU8MCkpe3ZhciByPXRoaXMuX2FjdGl2ZSxuPXRoaXMuX2NvbnRyb2xsZXJMaXN0W2VdLGk9TWF0aC5tYXgoci5sYXN0VCgpLG4ubGFzdFQoKSk7ci5yZWNhbGNNYXRyaXgoaSksbi5zZXRNYXRyaXgoaSxyLmNvbXB1dGVkTWF0cml4KSx0aGlzLl9hY3RpdmU9bix0aGlzLl9tb2RlPXQsdGhpcy5jb21wdXRlZE1hdHJpeD10aGlzLl9hY3RpdmUuY29tcHV0ZWRNYXRyaXgsdGhpcy5jb21wdXRlZEV5ZT10aGlzLl9hY3RpdmUuY29tcHV0ZWRFeWUsdGhpcy5jb21wdXRlZFVwPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFVwLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5fYWN0aXZlLmNvbXB1dGVkQ2VudGVyLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5fYWN0aXZlLmNvbXB1dGVkUmFkaXVzfX19LHMuZ2V0TW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RlfX0seyJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiOjQ4MCwib3JiaXQtY2FtZXJhLWNvbnRyb2xsZXIiOjUwMSwidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyIjo1ODF9XSw1NTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2kocix0KCJkMy1hcnJheSIpLHQoImQzLWNvbGxlY3Rpb24iKSx0KCJkMy1zaGFwZSIpLHQoImVsZW1lbnRhcnktY2lyY3VpdHMtZGlyZWN0ZWQtZ3JhcGgiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG51bGwpfSh0aGlzLChmdW5jdGlvbih0LGUscixuLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQuc291cmNlTGlua3MubGVuZ3RoP3QuZGVwdGg6ZS0xfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWk9aSYmaS5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdCIpP2kuZGVmYXVsdDppO3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGYodC5zb3VyY2UsZS5zb3VyY2UpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBmKHQudGFyZ2V0LGUudGFyZ2V0KXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC5wYXJ0T2ZDeWNsZT09PWUucGFydE9mQ3ljbGU/dC55MC1lLnkwOiJ0b3AiPT09dC5jaXJjdWxhckxpbmtUeXBlfHwiYm90dG9tIj09PWUuY2lyY3VsYXJMaW5rVHlwZT8tMToxfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudmFsdWV9ZnVuY3Rpb24gcCh0KXtyZXR1cm4odC55MCt0LnkxKS8yfWZ1bmN0aW9uIGQodCl7cmV0dXJuIHAodC5zb3VyY2UpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHAodC50YXJnZXQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5ub2Rlc31mdW5jdGlvbiB5KHQpe3JldHVybiB0LmxpbmtzfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj10LmdldChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYih0LGUpe3JldHVybiBlKHQpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPTA7aWYobnVsbD09PXIpe2Zvcih2YXIgYT1bXSxvPTA7bzx0LmxpbmtzLmxlbmd0aDtvKyspe3ZhciBzPXQubGlua3Nbb10sbD1zLnNvdXJjZS5pbmRleCxjPXMudGFyZ2V0LmluZGV4O2FbbF18fChhW2xdPVtdKSxhW2NdfHwoYVtjXT1bXSksLTE9PT1hW2xdLmluZGV4T2YoYykmJmFbbF0ucHVzaChjKX12YXIgdT1pKGEpO3Uuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KSk7dmFyIGY9e307Zm9yKG89MDtvPHUubGVuZ3RoO28rKyl7dmFyIGg9dVtvXS5zbGljZSgtMik7ZltoWzBdXXx8KGZbaFswXV09e30pLGZbaFswXV1baFsxXV09ITB9dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldC5pbmRleCxyPXQuc291cmNlLmluZGV4O2U9PT1yfHxmW3JdJiZmW3JdW2VdPyh0LmNpcmN1bGFyPSEwLHQuY2lyY3VsYXJMaW5rSUQ9bixuKz0xKTp0LmNpcmN1bGFyPSExfSkpfWVsc2UgdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNvdXJjZVtyXTx0LnRhcmdldFtyXT90LmNpcmN1bGFyPSExOih0LmNpcmN1bGFyPSEwLHQuY2lyY3VsYXJMaW5rSUQ9bixuKz0xKX0pKX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9MCxuPTA7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbihpKXtpLmNpcmN1bGFyJiYoaS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZXx8aS50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZT9pLmNpcmN1bGFyTGlua1R5cGU9aS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT9pLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlOmkudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU6aS5jaXJjdWxhckxpbmtUeXBlPXI8bj8idG9wIjoiYm90dG9tIiwidG9wIj09aS5jaXJjdWxhckxpbmtUeXBlP3IrPTE6bis9MSx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2IodCxlKSE9YihpLnNvdXJjZSxlKSYmYih0LGUpIT1iKGkudGFyZ2V0LGUpfHwodC5jaXJjdWxhckxpbmtUeXBlPWkuY2lyY3VsYXJMaW5rVHlwZSl9KSkpfSkpLHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuc291cmNlLmNpcmN1bGFyTGlua1R5cGU9PXQudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGUmJih0LmNpcmN1bGFyTGlua1R5cGU9dC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZSksSCh0LGUpJiYodC5jaXJjdWxhckxpbmtUeXBlPXQuc291cmNlLmNpcmN1bGFyTGlua1R5cGUpKX0pKX1mdW5jdGlvbiBUKHQpe3ZhciBlPU1hdGguYWJzKHQueTEtdC55MCkscj1NYXRoLmFicyh0LnRhcmdldC54MC10LnNvdXJjZS54MSk7cmV0dXJuIE1hdGguYXRhbihyL2UpfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj0wO3Quc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7cj10LmNpcmN1bGFyJiYhSCh0LGUpP3IrMTpyfSkpO3ZhciBuPTA7cmV0dXJuIHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7bj10LmNpcmN1bGFyJiYhSCh0LGUpP24rMTpufSkpLHIrbn1mdW5jdGlvbiBNKHQpe3ZhciBlPXQuc291cmNlLnNvdXJjZUxpbmtzLHI9MDtlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3I9dC5jaXJjdWxhcj9yKzE6cn0pKTt2YXIgbj10LnRhcmdldC50YXJnZXRMaW5rcyxpPTA7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7aT10LmNpcmN1bGFyP2krMTppfSkpLCEocj4xfHxpPjEpfWZ1bmN0aW9uIEEodCxlLHIpe3JldHVybiB0LnNvcnQoRSksdC5mb3JFYWNoKChmdW5jdGlvbihuLGkpe3ZhciBhLG8scz0wO2lmKEgobixyKSYmTShuKSluLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXI9cytuLndpZHRoLzI7ZWxzZXtmb3IodmFyIGw9MDtsPGk7bCsrKWlmKGE9dFtpXSxvPXRbbF0sIShhLnNvdXJjZS5jb2x1bW48by50YXJnZXQuY29sdW1ufHxhLnRhcmdldC5jb2x1bW4+by5zb3VyY2UuY29sdW1uKSl7dmFyIGM9dFtsXS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyK3RbbF0ud2lkdGgvMitlO3M9Yz5zP2M6c31uLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXI9cytuLndpZHRoLzJ9fSkpLHR9ZnVuY3Rpb24gUyh0LHIsaSxhKXt2YXIgbz1lLm1pbih0LmxpbmtzLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3VyY2UueTB9KSk7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5jaXJjdWxhclBhdGhEYXRhPXt9KX0pKSxBKHQubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlfSkpLHIsYSksQSh0LmxpbmtzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZX0pKSxyLGEpLHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5jaXJjdWxhcil7aWYoZS5jaXJjdWxhclBhdGhEYXRhLmFyY1JhZGl1cz1lLndpZHRoKzEwLGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcj01LGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXI9NSxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlV2lkdGg9ZS5zb3VyY2UueDEtZS5zb3VyY2UueDAsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVg9ZS5zb3VyY2UueDArZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVdpZHRoLGUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYPWUudGFyZ2V0LngwLGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZPWUueTAsZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk9ZS55MSxIKGUsYSkmJk0oZSkpZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cz0xMCtlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cz0xMCtlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9MTArZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzPTEwK2Uud2lkdGgvMiwiYm90dG9tIj09ZS5jaXJjdWxhckxpbmtUeXBlPyhlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PWUuc291cmNlLnkxKzI1K2UuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk6KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9ZS5zb3VyY2UueTAtMjUtZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTtlbHNle3ZhciBzPWUuc291cmNlLmNvbHVtbixsPWUuY2lyY3VsYXJMaW5rVHlwZSxjPXQubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3VyY2UuY29sdW1uPT1zJiZ0LmNpcmN1bGFyTGlua1R5cGU9PWx9KSk7ImJvdHRvbSI9PWUuY2lyY3VsYXJMaW5rVHlwZT9jLnNvcnQoTCk6Yy5zb3J0KEMpO3ZhciB1PTA7Yy5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3QuY2lyY3VsYXJMaW5rSUQ9PWUuY2lyY3VsYXJMaW5rSUQmJihlLmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzPTEwK2Uud2lkdGgvMit1LGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXM9MTArZS53aWR0aC8yK24qcit1KSx1Kz10LndpZHRofSkpLHM9ZS50YXJnZXQuY29sdW1uLGM9dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldC5jb2x1bW49PXMmJnQuY2lyY3VsYXJMaW5rVHlwZT09bH0pKSwiYm90dG9tIj09ZS5jaXJjdWxhckxpbmtUeXBlP2Muc29ydChQKTpjLnNvcnQoSSksdT0wLGMuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXt0LmNpcmN1bGFyTGlua0lEPT1lLmNpcmN1bGFyTGlua0lEJiYoZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9MTArZS53aWR0aC8yK3UsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXM9MTArZS53aWR0aC8yK24qcit1KSx1Kz10LndpZHRofSkpLCJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9TWF0aC5tYXgoaSxlLnNvdXJjZS55MSxlLnRhcmdldC55MSkrMjUrZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTooZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1vLTI1LWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyl9ZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cy1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHROb2RlQnVmZmVyfWlmKGUuY2lyY3VsYXIpZS5wYXRoPWZ1bmN0aW9uKHQpe3ZhciBlPSIiO2U9InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8iTSIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKyIgMCAwIDAgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrIiAiKyh0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWS10LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgMCAwIDAgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZLXQuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZOiJNIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMrIiAwIDAgMSAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMpKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAwIDAgMSAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIisodC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk7cmV0dXJuIGV9KGUpO2Vsc2V7dmFyIGY9bi5saW5rSG9yaXpvbnRhbCgpLnNvdXJjZSgoZnVuY3Rpb24odCl7cmV0dXJuW3Quc291cmNlLngwKyh0LnNvdXJjZS54MS10LnNvdXJjZS54MCksdC55MF19KSkudGFyZ2V0KChmdW5jdGlvbih0KXtyZXR1cm5bdC50YXJnZXQueDAsdC55MV19KSk7ZS5wYXRoPWYoZSl9fSkpfWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4geih0KT09eihlKT8iYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlP0wodCxlKTpDKHQsZSk6eihlKS16KHQpfWZ1bmN0aW9uIEModCxlKXtyZXR1cm4gdC55MC1lLnkwfWZ1bmN0aW9uIEwodCxlKXtyZXR1cm4gZS55MC10LnkwfWZ1bmN0aW9uIEkodCxlKXtyZXR1cm4gdC55MS1lLnkxfWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gZS55MS10LnkxfWZ1bmN0aW9uIHoodCl7cmV0dXJuIHQudGFyZ2V0LmNvbHVtbi10LnNvdXJjZS5jb2x1bW59ZnVuY3Rpb24gTyh0KXtyZXR1cm4gdC50YXJnZXQueDAtdC5zb3VyY2UueDF9ZnVuY3Rpb24gRCh0LGUpe3ZhciByPVQodCksbj1PKGUpL01hdGgudGFuKHIpO3JldHVybiJ1cCI9PXEodCk/dC55MStuOnQueTEtbn1mdW5jdGlvbiBSKHQsZSl7dmFyIHI9VCh0KSxuPU8oZSkvTWF0aC50YW4ocik7cmV0dXJuInVwIj09cSh0KT90LnkxLW46dC55MStufWZ1bmN0aW9uIEYodCxlLHIsbil7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbihpKXtpZighaS5jaXJjdWxhciYmaS50YXJnZXQuY29sdW1uLWkuc291cmNlLmNvbHVtbj4xKXt2YXIgYT1pLnNvdXJjZS5jb2x1bW4rMSxvPWkudGFyZ2V0LmNvbHVtbi0xLHM9MSxsPW8tYSsxO2ZvcihzPTE7YTw9bzthKysscysrKXQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24obyl7aWYoby5jb2x1bW49PWEpe3ZhciBjLHU9cy8obCsxKSxmPU1hdGgucG93KDEtdSwzKSxoPTMqdSpNYXRoLnBvdygxLXUsMikscD0zKk1hdGgucG93KHUsMikqKDEtdSksZD1NYXRoLnBvdyh1LDMpLGc9ZippLnkwK2gqaS55MCtwKmkueTErZCppLnkxLG09Zy1pLndpZHRoLzIsdj1nK2kud2lkdGgvMjttPm8ueTAmJm08by55MT8oYz1vLnkxLW0rMTAsYz0iYm90dG9tIj09by5jaXJjdWxhckxpbmtUeXBlP2M6LWMsbz1OKG8sYyxlLHIpLHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yih0LG4pIT1iKG8sbikmJnQuY29sdW1uPT1vLmNvbHVtbiYmQihvLHQpJiZOKHQsYyxlLHIpfSkpKToodj5vLnkwJiZ2PG8ueTF8fG08by55MCYmdj5vLnkxKSYmKGM9di1vLnkwKzEwLG89TihvLGMsZSxyKSx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2IodCxuKSE9YihvLG4pJiZ0LmNvbHVtbj09by5jb2x1bW4mJnQueTA8by55MSYmdC55MT5vLnkxJiZOKHQsYyxlLHIpfSkpKX19KSl9fSkpfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdC55MD5lLnkwJiZ0LnkwPGUueTF8fCh0LnkxPmUueTAmJnQueTE8ZS55MXx8dC55MDxlLnkwJiZ0LnkxPmUueTEpfWZ1bmN0aW9uIE4odCxlLHIsbil7cmV0dXJuIHQueTArZT49ciYmdC55MStlPD1uJiYodC55MD10LnkwK2UsdC55MT10LnkxK2UsdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkxPXQueTErZX0pKSx0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTA9dC55MCtlfSkpKSx0fWZ1bmN0aW9uIGoodCxlLHIsbil7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihpKXtuJiZpLnkrKGkueTEtaS55MCk+ZSYmKGkueT1pLnktKGkueSsoaS55MS1pLnkwKS1lKSk7dmFyIGE9dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBiKHQuc291cmNlLHIpPT1iKGkscil9KSksbz1hLmxlbmd0aDtvPjEmJmEuc29ydCgoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQudGFyZ2V0LmNvbHVtbj09ZS50YXJnZXQuY29sdW1uKXJldHVybiB0LnkxLWUueTE7aWYoIVYodCxlKSlyZXR1cm4gdC55MS1lLnkxO2lmKHQudGFyZ2V0LmNvbHVtbj5lLnRhcmdldC5jb2x1bW4pe3ZhciByPVIoZSx0KTtyZXR1cm4gdC55MS1yfWlmKGUudGFyZ2V0LmNvbHVtbj50LnRhcmdldC5jb2x1bW4pcmV0dXJuIFIodCxlKS1lLnkxfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj8idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/InRvcCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3QudGFyZ2V0LmNvbHVtbj09PWUudGFyZ2V0LmNvbHVtbj90LnRhcmdldC55MS1lLnRhcmdldC55MTplLnRhcmdldC5jb2x1bW4tdC50YXJnZXQuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnRhcmdldC5jb2x1bW49PT1lLnRhcmdldC5jb2x1bW4/ZS50YXJnZXQueTEtdC50YXJnZXQueTE6dC50YXJnZXQuY29sdW1uLWUudGFyZ2V0LmNvbHVtbjoidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSkpO3ZhciBzPWkueTA7YS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkwPXMrdC53aWR0aC8yLHMrPXQud2lkdGh9KSksYS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2lmKCJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUpe2Zvcih2YXIgcj1lKzEsbj0wO3I8bztyKyspbis9YVtyXS53aWR0aDt0LnkwPWkueTEtbi10LndpZHRoLzJ9fSkpfSkpfWZ1bmN0aW9uIFUodCxlLHIpe3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBiKHQudGFyZ2V0LHIpPT1iKGUscil9KSksaT1uLmxlbmd0aDtpPjEmJm4uc29ydCgoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQuc291cmNlLmNvbHVtbj09ZS5zb3VyY2UuY29sdW1uKXJldHVybiB0LnkwLWUueTA7aWYoIVYodCxlKSlyZXR1cm4gdC55MC1lLnkwO2lmKGUuc291cmNlLmNvbHVtbjx0LnNvdXJjZS5jb2x1bW4pe3ZhciByPUQoZSx0KTtyZXR1cm4gdC55MC1yfWlmKHQuc291cmNlLmNvbHVtbjxlLnNvdXJjZS5jb2x1bW4pcmV0dXJuIEQodCxlKS1lLnkwfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj8idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/InRvcCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3Quc291cmNlLmNvbHVtbj09PWUuc291cmNlLmNvbHVtbj90LnNvdXJjZS55MS1lLnNvdXJjZS55MTp0LnNvdXJjZS5jb2x1bW4tZS5zb3VyY2UuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnNvdXJjZS5jb2x1bW49PT1lLnNvdXJjZS5jb2x1bW4/dC5zb3VyY2UueTEtZS5zb3VyY2UueTE6ZS5zb3VyY2UuY29sdW1uLXQuc291cmNlLmNvbHVtbjoidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSkpO3ZhciBhPWUueTA7bi5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkxPWErdC53aWR0aC8yLGErPXQud2lkdGh9KSksbi5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2lmKCJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUpe2Zvcih2YXIgYT1yKzEsbz0wO2E8aTthKyspbys9blthXS53aWR0aDt0LnkxPWUueTEtby10LndpZHRoLzJ9fSkpfSkpfWZ1bmN0aW9uIFYodCxlKXtyZXR1cm4gcSh0KT09cShlKX1mdW5jdGlvbiBxKHQpe3JldHVybiB0LnkwLXQueTE+MD8idXAiOiJkb3duIn1mdW5jdGlvbiBIKHQsZSl7cmV0dXJuIGIodC5zb3VyY2UsZSk9PWIodC50YXJnZXQsZSl9ZnVuY3Rpb24gRyh0LHIsbil7dmFyIGk9dC5ub2RlcyxhPXQubGlua3Msbz0hMSxzPSExO2lmKGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9vPSEwOiJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUmJihzPSEwKX0pKSwwPT1vfHwwPT1zKXt2YXIgbD1lLm1pbihpLChmdW5jdGlvbih0KXtyZXR1cm4gdC55MH0pKSxjPShuLXIpLyhlLm1heChpLChmdW5jdGlvbih0KXtyZXR1cm4gdC55MX0pKS1sKTtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnkxLXQueTApKmM7dC55MD0odC55MC1sKSpjLHQueTE9dC55MCtlfSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC55MD0odC55MC1sKSpjLHQueTE9KHQueTEtbCkqYyx0LndpZHRoPXQud2lkdGgqY30pKX19dC5zYW5rZXlDaXJjdWxhcj1mdW5jdGlvbigpe3ZhciB0LG4saT0wLGE9MCxiPTEsVD0xLE09MjQsQT1tLEU9byxDPXYsTD15LEk9MzIsUD0yLHo9bnVsbDtmdW5jdGlvbiBPKCl7dmFyIHQ9e25vZGVzOkMuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOkwuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtEKHQpLF8odCxBLHopLFIodCksQih0KSx3KHQsQSksTih0LEksQSksVih0KTtmb3IodmFyIGU9NCxyPTA7cjxlO3IrKylqKHQsVCxBKSxVKHQsVCxBKSxGKHQsYSxULEEpLGoodCxULEEpLFUodCxULEEpO3JldHVybiBHKHQsYSxUKSxTKHQsUCxULEEpLHR9ZnVuY3Rpb24gRCh0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5pbmRleD1lLHQuc291cmNlTGlua3M9W10sdC50YXJnZXRMaW5rcz1bXX0pKTt2YXIgZT1yLm1hcCh0Lm5vZGVzLEEpO3JldHVybiB0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7Im9iamVjdCIhPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBuPyJ1bmRlZmluZWQiOmwobikpJiYobj10LnNvdXJjZT14KGUsbikpLCJvYmplY3QiIT09KCJ1bmRlZmluZWQiPT10eXBlb2YgaT8idW5kZWZpbmVkIjpsKGkpKSYmKGk9dC50YXJnZXQ9eChlLGkpKSxuLnNvdXJjZUxpbmtzLnB1c2godCksaS50YXJnZXRMaW5rcy5wdXNoKHQpfSkpLHR9ZnVuY3Rpb24gUih0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucGFydE9mQ3ljbGU9ITEsdC52YWx1ZT1NYXRoLm1heChlLnN1bSh0LnNvdXJjZUxpbmtzLGgpLGUuc3VtKHQudGFyZ2V0TGlua3MsaCkpLHQuc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jaXJjdWxhciYmKHQucGFydE9mQ3ljbGU9ITAsdC5jaXJjdWxhckxpbmtUeXBlPWUuY2lyY3VsYXJMaW5rVHlwZSl9KSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNpcmN1bGFyJiYodC5wYXJ0T2ZDeWNsZT0hMCx0LmNpcmN1bGFyTGlua1R5cGU9ZS5jaXJjdWxhckxpbmtUeXBlKX0pKX0pKX1mdW5jdGlvbiBCKHQpe3ZhciBlLHIsbjtmb3IoZT10Lm5vZGVzLHI9W10sbj0wO2UubGVuZ3RoOysrbixlPXIscj1bXSllLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVwdGg9bix0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuaW5kZXhPZih0LnRhcmdldCk8MCYmIXQuY2lyY3VsYXImJnIucHVzaCh0LnRhcmdldCl9KSl9KSk7Zm9yKGU9dC5ub2RlcyxyPVtdLG49MDtlLmxlbmd0aDsrK24sZT1yLHI9W10pZS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmhlaWdodD1uLHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7ci5pbmRleE9mKHQuc291cmNlKTwwJiYhdC5jaXJjdWxhciYmci5wdXNoKHQuc291cmNlKX0pKX0pKTt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY29sdW1uPU1hdGguZmxvb3IoRS5jYWxsKG51bGwsdCxuKSl9KSl9ZnVuY3Rpb24gTihvLHMsbCl7dmFyIGM9ci5uZXN0KCkua2V5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW59KSkuc29ydEtleXMoZS5hc2NlbmRpbmcpLmVudHJpZXMoby5ub2RlcykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZXN9KSk7IWZ1bmN0aW9uKHIpe2lmKG4pe3ZhciBzPTEvMDtjLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPVQqbi8odC5sZW5ndGgrMSk7cz1lPHM/ZTpzfSkpLHQ9c312YXIgbD1lLm1pbihjLChmdW5jdGlvbihyKXtyZXR1cm4oVC1hLShyLmxlbmd0aC0xKSp0KS9lLnN1bShyLGgpfSkpO2wqPS4zLG8ubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC53aWR0aD10LnZhbHVlKmx9KSk7dmFyIHU9ZnVuY3Rpb24odCl7dmFyIHI9MCxuPTAsaT0wLGE9MCxvPWUubWF4KHQubm9kZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pKTtyZXR1cm4gdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYoInRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9yKz10LndpZHRoOm4rPXQud2lkdGgsMD09dC50YXJnZXQuY29sdW1uJiYoYSs9dC53aWR0aCksdC5zb3VyY2UuY29sdW1uPT1vJiYoaSs9dC53aWR0aCkpfSkpLHt0b3A6cj1yPjA/cisyNSsxMDpyLGJvdHRvbTpuPW4+MD9uKzI1KzEwOm4sbGVmdDphPWE+MD9hKzI1KzEwOmEscmlnaHQ6aT1pPjA/aSsyNSsxMDppfX0obyksZj1mdW5jdGlvbih0LHIpe3ZhciBuPWUubWF4KHQubm9kZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pKSxvPWItaSxzPVQtYSxsPW8vKG8rci5yaWdodCtyLmxlZnQpLGM9cy8ocytyLnRvcCtyLmJvdHRvbSk7cmV0dXJuIGk9aSpsK3IubGVmdCxiPTA9PXIucmlnaHQ/YjpiKmwsYT1hKmMrci50b3AsVCo9Yyx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueDA9aSt0LmNvbHVtbiooKGItaS1NKS9uKSx0LngxPXQueDArTX0pKSxjfShvLHUpO2wqPWYsby5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqbH0pKSxjLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3QuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXt0LmRlcHRoPT1jLmxlbmd0aC0xJiYxPT1lfHwwPT10LmRlcHRoJiYxPT1lPyh0LnkwPVQvMi10LnZhbHVlKmwsdC55MT10LnkwK3QudmFsdWUqbCk6dC5wYXJ0T2ZDeWNsZT8wPT1rKHQscik/KHQueTA9VC8yK24sdC55MT10LnkwK3QudmFsdWUqbCk6InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8odC55MD1hK24sdC55MT10LnkwK3QudmFsdWUqbCk6KHQueTA9VC10LnZhbHVlKmwtbix0LnkxPXQueTArdC52YWx1ZSpsKTowPT11LnRvcHx8MD09dS5ib3R0b20/KHQueTA9KFQtYSkvZSpuLHQueTE9dC55MCt0LnZhbHVlKmwpOih0LnkwPShULWEpLzItZS8yK24sdC55MT10LnkwK3QudmFsdWUqbCl9KSl9KSl9KGwpLHkoKTtmb3IodmFyIHU9MSxtPXM7bT4wOy0tbSl2KHUqPS45OSxsKSx5KCk7ZnVuY3Rpb24gdih0LHIpe3ZhciBuPWMubGVuZ3RoO2MuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIGE9aS5sZW5ndGgsbz1pWzBdLmRlcHRoO2kuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIHM7aWYoaS5zb3VyY2VMaW5rcy5sZW5ndGh8fGkudGFyZ2V0TGlua3MubGVuZ3RoKWlmKGkucGFydE9mQ3ljbGUmJmsoaSxyKT4wKTtlbHNlIGlmKDA9PW8mJjE9PWEpcz1pLnkxLWkueTAsaS55MD1ULzItcy8yLGkueTE9VC8yK3MvMjtlbHNlIGlmKG89PW4tMSYmMT09YSlzPWkueTEtaS55MCxpLnkwPVQvMi1zLzIsaS55MT1ULzIrcy8yO2Vsc2V7dmFyIGw9ZS5tZWFuKGkuc291cmNlTGlua3MsZyksYz1lLm1lYW4oaS50YXJnZXRMaW5rcyxkKSx1PSgobCYmYz8obCtjKS8yOmx8fGMpLXAoaSkpKnQ7aS55MCs9dSxpLnkxKz11fX0pKX0pKX1mdW5jdGlvbiB5KCl7Yy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcixuLGksbz1hLHM9ZS5sZW5ndGg7Zm9yKGUuc29ydChmKSxpPTA7aTxzOysraSkobj1vLShyPWVbaV0pLnkwKT4wJiYoci55MCs9bixyLnkxKz1uKSxvPXIueTErdDtpZigobj1vLXQtVCk+MClmb3Iobz1yLnkwLT1uLHIueTEtPW4saT1zLTI7aT49MDstLWkpKG49KHI9ZVtpXSkueTErdC1vKT4wJiYoci55MC09bixyLnkxLT1uKSxvPXIueTB9KSl9fWZ1bmN0aW9uIFYodCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNvdXJjZUxpbmtzLnNvcnQodSksdC50YXJnZXRMaW5rcy5zb3J0KGMpfSkpLHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC55MCxyPWUsbj10LnkxLGk9bjt0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXI/KHQueTA9bi10LndpZHRoLzIsbi09dC53aWR0aCk6KHQueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aCl9KSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyPyh0LnkxPWktdC53aWR0aC8yLGktPXQud2lkdGgpOih0LnkxPXIrdC53aWR0aC8yLHIrPXQud2lkdGgpfSkpfSkpfXJldHVybiBPLm5vZGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCksTyk6QX0sTy5ub2RlQWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzKHQpLE8pOkV9LE8ubm9kZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPSt0LE8pOk19LE8ubm9kZVBhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UsTyk6dH0sTy5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCksTyk6Q30sTy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCksTyk6TH0sTy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9MCxiPSt0WzBdLFQ9K3RbMV0sTyk6W2ItaSxULWFdfSxPLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdFswXVswXSxiPSt0WzFdWzBdLGE9K3RbMF1bMV0sVD0rdFsxXVsxXSxPKTpbW2ksYV0sW2IsVF1dfSxPLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEk9K3QsTyk6SX0sTy5jaXJjdWxhckxpbmtHYXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9K3QsTyk6UH0sTy5ub2RlUGFkZGluZ1JhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LE8pOm59LE8uc29ydE5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh6PXQsTyk6en0sTy51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCxBKSxWKHQpLHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnkwK3QueTE8VD8idG9wIjoiYm90dG9tIix0LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlPXQuY2lyY3VsYXJMaW5rVHlwZSx0LnRhcmdldC5jaXJjdWxhckxpbmtUeXBlPXQuY2lyY3VsYXJMaW5rVHlwZSl9KSksaih0LFQsQSwhMSksVSh0LFQsQSksUyh0LFAsVCxBKSx0fSxPfSx0LnNhbmtleUNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXRMaW5rcy5sZW5ndGg/dC5kZXB0aDp0LnNvdXJjZUxpbmtzLmxlbmd0aD9lLm1pbih0LnNvdXJjZUxpbmtzLGEpLTE6MH0sdC5zYW5rZXlMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlcHRofSx0LnNhbmtleVJpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtMS10LmhlaWdodH0sdC5zYW5rZXlKdXN0aWZ5PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWFycmF5IjoxNTYsImQzLWNvbGxlY3Rpb24iOjE1NywiZDMtc2hhcGUiOjE2NSwiZWxlbWVudGFyeS1jaXJjdWl0cy1kaXJlY3RlZC1ncmFwaCI6MTc5fV0sNTY6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9pKHIsdCgiZDMtYXJyYXkiKSx0KCJkMy1jb2xsZWN0aW9uIiksdCgiZDMtc2hhcGUiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzKX0odGhpcywoZnVuY3Rpb24odCxlLHIsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBjKHQuc291cmNlLGUuc291cmNlKXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gYyh0LnRhcmdldCxlLnRhcmdldCl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiB1KHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIGYodCl7cmV0dXJuKHQueTArdC55MSkvMn1mdW5jdGlvbiBoKHQpe3JldHVybiBmKHQuc291cmNlKSp0LnZhbHVlfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGYodC50YXJnZXQpKnQudmFsdWV9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBnKHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24gdih0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiB5KHQpe3JldHVyblt0LnNvdXJjZS54MSx0LnkwXX1mdW5jdGlvbiB4KHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX10LnNhbmtleT1mdW5jdGlvbigpe3ZhciB0PTAsbj0wLGk9MSx5PTEseD0yNCxiPTgsXz1kLHc9YSxUPWcsaz1tLE09MzI7ZnVuY3Rpb24gQSgpe3ZhciB0PXtub2RlczpULmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczprLmFwcGx5KG51bGwsYXJndW1lbnRzKX07cmV0dXJuIFModCksRSh0KSxDKHQpLEwodCksSSh0KSx0fWZ1bmN0aW9uIFModCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuaW5kZXg9ZSx0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KSk7dmFyIGU9ci5tYXAodC5ub2RlcyxfKTt0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7Im9iamVjdCIhPXR5cGVvZiBuJiYobj10LnNvdXJjZT12KGUsbikpLCJvYmplY3QiIT10eXBlb2YgaSYmKGk9dC50YXJnZXQ9dihlLGkpKSxuLnNvdXJjZUxpbmtzLnB1c2godCksaS50YXJnZXRMaW5rcy5wdXNoKHQpfSkpfWZ1bmN0aW9uIEUodCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnZhbHVlPU1hdGgubWF4KGUuc3VtKHQuc291cmNlTGlua3MsdSksZS5zdW0odC50YXJnZXRMaW5rcyx1KSl9KSl9ZnVuY3Rpb24gQyhlKXt2YXIgcixuLGE7Zm9yKHI9ZS5ub2RlcyxuPVtdLGE9MDtyLmxlbmd0aDsrK2Escj1uLG49W10pci5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlcHRoPWEsdC5zb3VyY2VMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXtuLmluZGV4T2YodC50YXJnZXQpPDAmJm4ucHVzaCh0LnRhcmdldCl9KSl9KSk7Zm9yKHI9ZS5ub2RlcyxuPVtdLGE9MDtyLmxlbmd0aDsrK2Escj1uLG49W10pci5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmhlaWdodD1hLHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7bi5pbmRleE9mKHQuc291cmNlKTwwJiZuLnB1c2godC5zb3VyY2UpfSkpfSkpO3ZhciBvPShpLXQteCkvKGEtMSk7ZS5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLngxPShlLngwPXQrTWF0aC5tYXgoMCxNYXRoLm1pbihhLTEsTWF0aC5mbG9vcih3LmNhbGwobnVsbCxlLGEpKSkpKm8pK3h9KSl9ZnVuY3Rpb24gTCh0KXt2YXIgaT1yLm5lc3QoKS5rZXkoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngwfSkpLnNvcnRLZXlzKGUuYXNjZW5kaW5nKS5lbnRyaWVzKHQubm9kZXMpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSkpOyFmdW5jdGlvbigpe3ZhciByPWUubWF4KGksKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aH0pKSxhPTIvMyooeS1uKS8oci0xKTtiPmEmJihiPWEpO3ZhciBvPWUubWluKGksKGZ1bmN0aW9uKHQpe3JldHVybih5LW4tKHQubGVuZ3RoLTEpKmIpL2Uuc3VtKHQsdSl9KSk7aS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC55MT0odC55MD1lKSt0LnZhbHVlKm99KSl9KSksdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqb30pKX0oKSxkKCk7Zm9yKHZhciBhPTEsbz1NO28+MDstLW8pbChhKj0uOTkpLGQoKSxzKGEpLGQoKTtmdW5jdGlvbiBzKHQpe2kuZm9yRWFjaCgoZnVuY3Rpb24ocil7ci5mb3JFYWNoKChmdW5jdGlvbihyKXtpZihyLnRhcmdldExpbmtzLmxlbmd0aCl7dmFyIG49KGUuc3VtKHIudGFyZ2V0TGlua3MsaCkvZS5zdW0oci50YXJnZXRMaW5rcyx1KS1mKHIpKSp0O3IueTArPW4sci55MSs9bn19KSl9KSl9ZnVuY3Rpb24gbCh0KXtpLnNsaWNlKCkucmV2ZXJzZSgpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3IuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYoci5zb3VyY2VMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnNvdXJjZUxpbmtzLHApL2Uuc3VtKHIuc291cmNlTGlua3MsdSktZihyKSkqdDtyLnkwKz1uLHIueTErPW59fSkpfSkpfWZ1bmN0aW9uIGQoKXtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhPW4sbz10Lmxlbmd0aDtmb3IodC5zb3J0KGMpLGk9MDtpPG87KytpKShyPWEtKGU9dFtpXSkueTApPjAmJihlLnkwKz1yLGUueTErPXIpLGE9ZS55MStiO2lmKChyPWEtYi15KT4wKWZvcihhPWUueTAtPXIsZS55MS09cixpPW8tMjtpPj0wOy0taSkocj0oZT10W2ldKS55MStiLWEpPjAmJihlLnkwLT1yLGUueTEtPXIpLGE9ZS55MH0pKX19ZnVuY3Rpb24gSSh0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc291cmNlTGlua3Muc29ydChsKSx0LnRhcmdldExpbmtzLnNvcnQocyl9KSksdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnkwLHI9ZTt0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aH0pKSx0LnRhcmdldExpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTE9cit0LndpZHRoLzIscis9dC53aWR0aH0pKX0pKX1yZXR1cm4gQS51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIEkodCksdH0sQS5ub2RlSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLEEpOl99LEEubm9kZUFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6byh0KSxBKTp3fSxBLm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0rdCxBKTp4fSxBLm5vZGVQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPSt0LEEpOmJ9LEEubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLEEpOlR9LEEubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLEEpOmt9LEEuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uPTAsaT0rZVswXSx5PStlWzFdLEEpOltpLXQseS1uXX0sQS5leHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2VbMF1bMF0saT0rZVsxXVswXSxuPStlWzBdWzFdLHk9K2VbMV1bMV0sQSk6W1t0LG5dLFtpLHldXX0sQS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPSt0LEEpOk19LEF9LHQuc2Fua2V5Q2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldExpbmtzLmxlbmd0aD90LmRlcHRoOnQuc291cmNlTGlua3MubGVuZ3RoP2UubWluKHQuc291cmNlTGlua3MsaSktMTowfSx0LnNhbmtleUxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVwdGh9LHQuc2Fua2V5UmlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS0xLXQuaGVpZ2h0fSx0LnNhbmtleUp1c3RpZnk9YSx0LnNhbmtleUxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIG4ubGlua0hvcml6b250YWwoKS5zb3VyY2UoeSkudGFyZ2V0KHgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtYXJyYXkiOjE1NiwiZDMtY29sbGVjdGlvbiI6MTU3LCJkMy1zaGFwZSI6MTY1fV0sNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vcXVhZCIpfSx7Ii4vcXVhZCI6NTh9XSw1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgiY2xhbXAiKSxhPXQoInBhcnNlLXJlY3QiKSxvPXQoImFycmF5LWJvdW5kcyIpLHM9dCgicGljay1ieS1hbGlhcyIpLGw9dCgiZGVmaW5lZCIpLGM9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLHU9dCgiaXMtb2JqIiksZj10KCJkdHlwZSIpLGg9dCgibWF0aC1sb2cyIik7ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcj1lWzBdLG49ZVsxXSxhPTEvKGVbMl0tciksbz0xLyhlWzNdLW4pLHM9bmV3IEFycmF5KHQubGVuZ3RoKSxsPTAsYz10Lmxlbmd0aC8yO2w8YztsKyspc1syKmxdPWkoKHRbMipsXS1yKSphLDAsMSksc1syKmwrMV09aSgodFsyKmwrMV0tbikqbywwLDEpO3JldHVybiBzfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXt9KSx0PWModCwiZmxvYXQ2NCIpLGU9cyhlLHtib3VuZHM6InJhbmdlIGJvdW5kcyBkYXRhQm94IGRhdGFib3giLG1heERlcHRoOiJkZXB0aCBtYXhEZXB0aCBtYXhkZXB0aCBsZXZlbCBtYXhMZXZlbCBtYXhsZXZlbCBsZXZlbHMiLGR0eXBlOiJ0eXBlIGR0eXBlIGZvcm1hdCBvdXQgZHN0IG91dHB1dCBkZXN0aW5hdGlvbiJ9KTt2YXIgcj1sKGUubWF4RGVwdGgsMjU1KSxpPWwoZS5ib3VuZHMsbyh0LDIpKTtpWzBdPT09aVsyXSYmaVsyXSsrLGlbMV09PT1pWzNdJiZpWzNdKys7dmFyIGQsZz1wKHQsaSksbT10Lmxlbmd0aD4+PjE7ZS5kdHlwZXx8KGUuZHR5cGU9ImFycmF5IiksInN0cmluZyI9PXR5cGVvZiBlLmR0eXBlP2Q9bmV3KGYoZS5kdHlwZSkpKG0pOmUuZHR5cGUmJihkPWUuZHR5cGUsQXJyYXkuaXNBcnJheShkKSYmKGQubGVuZ3RoPW0pKTtmb3IodmFyIHY9MDt2PG07Kyt2KWRbdl09djt2YXIgeT1bXSx4PVtdLGI9W10sXz1bXTshZnVuY3Rpb24gdChlLG4saSxhLG8scyl7aWYoIWEubGVuZ3RoKXJldHVybiBudWxsO3ZhciBsPXlbb118fCh5W29dPVtdKSxjPWJbb118fChiW29dPVtdKSx1PXhbb118fCh4W29dPVtdKSxmPWwubGVuZ3RoO2lmKCsrbz5yfHxzPjEwNzM3NDE4MjQpe2Zvcih2YXIgaD0wO2g8YS5sZW5ndGg7aCsrKWwucHVzaChhW2hdKSxjLnB1c2gocyksdS5wdXNoKG51bGwsbnVsbCxudWxsLG51bGwpO3JldHVybiBmfWlmKGwucHVzaChhWzBdKSxjLnB1c2gocyksYS5sZW5ndGg8PTEpcmV0dXJuIHUucHVzaChudWxsLG51bGwsbnVsbCxudWxsKSxmO2Zvcih2YXIgcD0uNSppLGQ9ZStwLG09bitwLHY9W10sXz1bXSx3PVtdLFQ9W10saz0xLE09YS5sZW5ndGg7azxNO2srKyl7dmFyIEE9YVtrXSxTPWdbMipBXSxFPWdbMipBKzFdO1M8ZD9FPG0/di5wdXNoKEEpOl8ucHVzaChBKTpFPG0/dy5wdXNoKEEpOlQucHVzaChBKX1yZXR1cm4gczw8PTIsdS5wdXNoKHQoZSxuLHAsdixvLHMpLHQoZSxtLHAsXyxvLHMrMSksdChkLG4scCx3LG8scysyKSx0KGQsbSxwLFQsbyxzKzMpKSxmfSgwLDAsMSxkLDAsMSk7Zm9yKHZhciB3PTAsVD0wO1Q8eS5sZW5ndGg7VCsrKXt2YXIgaz15W1RdO2lmKGQuc2V0KWQuc2V0KGssdyk7ZWxzZSBmb3IodmFyIE09MCxBPWsubGVuZ3RoO008QTtNKyspZFtNK3ddPWtbTV07dmFyIFM9dyt5W1RdLmxlbmd0aDtfW1RdPVt3LFNdLHc9U31yZXR1cm4gZC5yYW5nZT1mdW5jdGlvbigpe3ZhciBlLHI9W10sbj1hcmd1bWVudHMubGVuZ3RoO2Zvcig7bi0tOylyW25dPWFyZ3VtZW50c1tuXTtpZih1KHJbci5sZW5ndGgtMV0pKXt2YXIgbz1yLnBvcCgpO3IubGVuZ3RofHxudWxsPT1vLngmJm51bGw9PW8ubCYmbnVsbD09by5sZWZ0fHwocj1bb10sZT17fSksZT1zKG8se2xldmVsOiJsZXZlbCBtYXhMZXZlbCIsZDoiZCBkaWFtIGRpYW1ldGVyIHIgcmFkaXVzIHB4IHB4U2l6ZSBwaXhlbCBwaXhlbFNpemUgbWF4RCBzaXplIG1pblNpemUiLGxvZDoibG9kIGRldGFpbHMgcmFuZ2VzIG9mZnNldHMifSl9ZWxzZSBlPXt9O3IubGVuZ3RofHwocj1pKTt2YXIgYz1hLmFwcGx5KHZvaWQgMCxyKSxmPVtNYXRoLm1pbihjLngsYy54K2Mud2lkdGgpLE1hdGgubWluKGMueSxjLnkrYy5oZWlnaHQpLE1hdGgubWF4KGMueCxjLngrYy53aWR0aCksTWF0aC5tYXgoYy55LGMueStjLmhlaWdodCldLGQ9ZlswXSxnPWZbMV0sbT1mWzJdLHY9ZlszXSxiPXAoW2QsZyxtLHZdLGkpLF89YlswXSx3PWJbMV0sVD1iWzJdLGs9YlszXSxNPWwoZS5sZXZlbCx5Lmxlbmd0aCk7aWYobnVsbCE9ZS5kKXt2YXIgQTsibnVtYmVyIj09dHlwZW9mIGUuZD9BPVtlLmQsZS5kXTplLmQubGVuZ3RoJiYoQT1lLmQpLE09TWF0aC5taW4oTWF0aC5tYXgoTWF0aC5jZWlsKC1oKE1hdGguYWJzKEFbMF0pLyhpWzJdLWlbMF0pKSksTWF0aC5jZWlsKC1oKE1hdGguYWJzKEFbMV0pLyhpWzNdLWlbMV0pKSkpLE0pfWlmKE09TWF0aC5taW4oTSx5Lmxlbmd0aCksZS5sb2QpcmV0dXJuIEUoXyx3LFQsayxNKTt2YXIgUz1bXTtmdW5jdGlvbiBDKGUscixuLGksYSxvKXtpZihudWxsIT09YSYmbnVsbCE9PW8mJiEoXz5lK258fHc+citufHxUPGV8fGs8cnx8aT49TXx8YT09PW8pKXt2YXIgcz15W2ldO3ZvaWQgMD09PW8mJihvPXMubGVuZ3RoKTtmb3IodmFyIGw9YTtsPG87bCsrKXt2YXIgYz1zW2xdLHU9dFsyKmNdLGY9dFsyKmMrMV07dT49ZCYmdTw9bSYmZj49ZyYmZjw9diYmUy5wdXNoKGMpfXZhciBoPXhbaV0scD1oWzQqYSswXSxiPWhbNCphKzFdLEE9aFs0KmErMl0sRT1oWzQqYSszXSxJPUwoaCxhKzEpLFA9LjUqbix6PWkrMTtDKGUscixQLHoscCxifHxBfHxFfHxJKSxDKGUscitQLFAseixiLEF8fEV8fEkpLEMoZStQLHIsUCx6LEEsRXx8SSksQyhlK1AscitQLFAseixFLEkpfX1mdW5jdGlvbiBMKHQsZSl7Zm9yKHZhciByPW51bGwsbj0wO251bGw9PT1yOylpZihyPXRbNCplK25dLCsrbj50Lmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gcn1yZXR1cm4gQygwLDAsMSwwLDAsMSksU30sZDtmdW5jdGlvbiBFKHQsZSxyLGksYSl7Zm9yKHZhciBvPVtdLHM9MDtzPGE7cysrKXt2YXIgbD1iW3NdLGM9X1tzXVswXSx1PUModCxlLHMpLGY9QyhyLGkscyksaD1uLmdlKGwsdSkscD1uLmd0KGwsZixoLGwubGVuZ3RoLTEpO29bc109W2grYyxwK2NdfXJldHVybiBvfWZ1bmN0aW9uIEModCxlLHIpe2Zvcih2YXIgbj0xLGk9LjUsYT0uNSxvPS41LHM9MDtzPHI7cysrKW48PD0yLG4rPXQ8aT9lPGE/MDoxOmU8YT8yOjMsbyo9LjUsaSs9dDxpPy1vOm8sYSs9ZTxhPy1vOm87cmV0dXJuIG59fX0seyJhcnJheS1ib3VuZHMiOjcwLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6OTYsY2xhbXA6MTIwLGRlZmluZWQ6MTcwLGR0eXBlOjE3NSwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjQ0LCJpcy1vYmoiOjQ2OCwibWF0aC1sb2cyIjo0NzksInBhcnNlLXJlY3QiOjUwNCwicGljay1ieS1hbGlhcyI6NTExfV0sNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXQoIkB0dXJmL21ldGEiKTtmdW5jdGlvbiBpKHQpe3ZhciBlPTA7aWYodCYmdC5sZW5ndGg+MCl7ZSs9TWF0aC5hYnMoYSh0WzBdKSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspZS09TWF0aC5hYnMoYSh0W3JdKSl9cmV0dXJuIGV9ZnVuY3Rpb24gYSh0KXt2YXIgZSxyLG4saSxhLHMsbD0wLGM9dC5sZW5ndGg7aWYoYz4yKXtmb3Iocz0wO3M8YztzKyspcz09PWMtMj8obj1jLTIsaT1jLTEsYT0wKTpzPT09Yy0xPyhuPWMtMSxpPTAsYT0xKToobj1zLGk9cysxLGE9cysyKSxlPXRbbl0scj10W2ldLGwrPShvKHRbYV1bMF0pLW8oZVswXSkpKk1hdGguc2luKG8oclsxXSkpO2w9NjM3ODEzNypsKjYzNzgxMzcvMn1yZXR1cm4gbH1mdW5jdGlvbiBvKHQpe3JldHVybiB0Kk1hdGguUEkvMTgwfXIuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gbi5nZW9tUmVkdWNlKHQsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZnVuY3Rpb24odCl7dmFyIGUscj0wO3N3aXRjaCh0LnR5cGUpe2Nhc2UiUG9seWdvbiI6cmV0dXJuIGkodC5jb29yZGluYXRlcyk7Y2FzZSJNdWx0aVBvbHlnb24iOmZvcihlPTA7ZTx0LmNvb3JkaW5hdGVzLmxlbmd0aDtlKyspcis9aSh0LmNvb3JkaW5hdGVzW2VdKTtyZXR1cm4gcjtjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOmNhc2UiTGluZVN0cmluZyI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiAwfXJldHVybiAwfShlKX0pLDApfX0seyJAdHVyZi9tZXRhIjo2M31dLDYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj10KCJAdHVyZi9tZXRhIik7ci5kZWZhdWx0PWZ1bmN0aW9uKHQpe3ZhciBlPVsxLzAsMS8wLC0xLzAsLTEvMF07cmV0dXJuIG4uY29vcmRFYWNoKHQsKGZ1bmN0aW9uKHQpe2VbMF0+dFswXSYmKGVbMF09dFswXSksZVsxXT50WzFdJiYoZVsxXT10WzFdKSxlWzJdPHRbMF0mJihlWzJdPXRbMF0pLGVbM108dFsxXSYmKGVbM109dFsxXSl9KSksZX19LHsiQHR1cmYvbWV0YSI6NjN9XSw2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49dCgiQHR1cmYvbWV0YSIpLGk9dCgiQHR1cmYvaGVscGVycyIpO3IuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgcj0wLGE9MCxvPTA7cmV0dXJuIG4uY29vcmRFYWNoKHQsKGZ1bmN0aW9uKHQpe3IrPXRbMF0sYSs9dFsxXSxvKyt9KSksaS5wb2ludChbci9vLGEvb10sZS5wcm9wZXJ0aWVzKX19LHsiQHR1cmYvaGVscGVycyI6NjIsIkB0dXJmL21ldGEiOjYzfV0sNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pO3ZhciBuPXt0eXBlOiJGZWF0dXJlIn07cmV0dXJuKDA9PT1yLmlkfHxyLmlkKSYmKG4uaWQ9ci5pZCksci5iYm94JiYobi5iYm94PXIuYmJveCksbi5wcm9wZXJ0aWVzPWV8fHt9LG4uZ2VvbWV0cnk9dCxufWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSksbih7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gYSh0LGUscil7dm9pZCAwPT09ciYmKHI9e30pO2Zvcih2YXIgaT0wLGE9dDtpPGEubGVuZ3RoO2krKyl7dmFyIG89YVtpXTtpZihvLmxlbmd0aDw0KXRocm93IG5ldyBFcnJvcigiRWFjaCBMaW5lYXJSaW5nIG9mIGEgUG9seWdvbiBtdXN0IGhhdmUgNCBvciBtb3JlIFBvc2l0aW9ucy4iKTtmb3IodmFyIHM9MDtzPG9bby5sZW5ndGgtMV0ubGVuZ3RoO3MrKylpZihvW28ubGVuZ3RoLTFdW3NdIT09b1swXVtzXSl0aHJvdyBuZXcgRXJyb3IoIkZpcnN0IGFuZCBsYXN0IFBvc2l0aW9uIGFyZSBub3QgZXF1aXZhbGVudC4iKX1yZXR1cm4gbih7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBvKHQsZSxyKXtpZih2b2lkIDA9PT1yJiYocj17fSksdC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoImNvb3JkaW5hdGVzIG11c3QgYmUgYW4gYXJyYXkgb2YgdHdvIG9yIG1vcmUgcG9zaXRpb25zIik7cmV0dXJuIG4oe3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gcyh0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgcj17dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24ifTtyZXR1cm4gZS5pZCYmKHIuaWQ9ZS5pZCksZS5iYm94JiYoci5iYm94PWUuYmJveCksci5mZWF0dXJlcz10LHJ9ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJNdWx0aVBvaW50Iixjb29yZGluYXRlczp0fSxlLHIpfWZ1bmN0aW9uIHUodCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSksbih7dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp0fSxlLHIpfWZ1bmN0aW9uIGYodCxlKXt2b2lkIDA9PT1lJiYoZT0ia2lsb21ldGVycyIpO3ZhciBuPXIuZmFjdG9yc1tlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoZSsiIHVuaXRzIGlzIGludmFsaWQiKTtyZXR1cm4gdCpufWZ1bmN0aW9uIGgodCxlKXt2b2lkIDA9PT1lJiYoZT0ia2lsb21ldGVycyIpO3ZhciBuPXIuZmFjdG9yc1tlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoZSsiIHVuaXRzIGlzIGludmFsaWQiKTtyZXR1cm4gdC9ufWZ1bmN0aW9uIHAodCl7cmV0dXJuIDE4MCoodCUoMipNYXRoLlBJKSkvTWF0aC5QSX1mdW5jdGlvbiBkKHQpe3JldHVybiFpc05hTih0KSYmbnVsbCE9PXQmJiFBcnJheS5pc0FycmF5KHQpJiYhL15ccyokLy50ZXN0KHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLmVhcnRoUmFkaXVzPTYzNzEwMDguOCxyLmZhY3RvcnM9e2NlbnRpbWV0ZXJzOjEwMCpyLmVhcnRoUmFkaXVzLGNlbnRpbWV0cmVzOjEwMCpyLmVhcnRoUmFkaXVzLGRlZ3JlZXM6ci5lYXJ0aFJhZGl1cy8xMTEzMjUsZmVldDozLjI4MDg0KnIuZWFydGhSYWRpdXMsaW5jaGVzOjM5LjM3KnIuZWFydGhSYWRpdXMsa2lsb21ldGVyczpyLmVhcnRoUmFkaXVzLzFlMyxraWxvbWV0cmVzOnIuZWFydGhSYWRpdXMvMWUzLG1ldGVyczpyLmVhcnRoUmFkaXVzLG1ldHJlczpyLmVhcnRoUmFkaXVzLG1pbGVzOnIuZWFydGhSYWRpdXMvMTYwOS4zNDQsbWlsbGltZXRlcnM6MWUzKnIuZWFydGhSYWRpdXMsbWlsbGltZXRyZXM6MWUzKnIuZWFydGhSYWRpdXMsbmF1dGljYWxtaWxlczpyLmVhcnRoUmFkaXVzLzE4NTIscmFkaWFuczoxLHlhcmRzOnIuZWFydGhSYWRpdXMvMS4wOTM2fSxyLnVuaXRzRmFjdG9ycz17Y2VudGltZXRlcnM6MTAwLGNlbnRpbWV0cmVzOjEwMCxkZWdyZWVzOjEvMTExMzI1LGZlZXQ6My4yODA4NCxpbmNoZXM6MzkuMzcsa2lsb21ldGVyczouMDAxLGtpbG9tZXRyZXM6LjAwMSxtZXRlcnM6MSxtZXRyZXM6MSxtaWxlczoxLzE2MDkuMzQ0LG1pbGxpbWV0ZXJzOjFlMyxtaWxsaW1ldHJlczoxZTMsbmF1dGljYWxtaWxlczoxLzE4NTIscmFkaWFuczoxL3IuZWFydGhSYWRpdXMseWFyZHM6MS8xLjA5MzZ9LHIuYXJlYUZhY3RvcnM9e2FjcmVzOjI0NzEwNWUtOSxjZW50aW1ldGVyczoxZTQsY2VudGltZXRyZXM6MWU0LGZlZXQ6MTAuNzYzOTEwNDE3LGluY2hlczoxNTUwLjAwMzEwMDAwNixraWxvbWV0ZXJzOjFlLTYsa2lsb21ldHJlczoxZS02LG1ldGVyczoxLG1ldHJlczoxLG1pbGVzOjM4NmUtOSxtaWxsaW1ldGVyczoxZTYsbWlsbGltZXRyZXM6MWU2LHlhcmRzOjEuMTk1OTkwMDQ2fSxyLmZlYXR1cmU9bixyLmdlb21ldHJ5PWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2godm9pZCAwPT09ciYmKHI9e30pLHQpe2Nhc2UiUG9pbnQiOnJldHVybiBpKGUpLmdlb21ldHJ5O2Nhc2UiTGluZVN0cmluZyI6cmV0dXJuIG8oZSkuZ2VvbWV0cnk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gYShlKS5nZW9tZXRyeTtjYXNlIk11bHRpUG9pbnQiOnJldHVybiBjKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gbChlKS5nZW9tZXRyeTtjYXNlIk11bHRpUG9seWdvbiI6cmV0dXJuIHUoZSkuZ2VvbWV0cnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IodCsiIGlzIGludmFsaWQiKX19LHIucG9pbnQ9aSxyLnBvaW50cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxzKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gaSh0LGUpfSkpLHIpfSxyLnBvbHlnb249YSxyLnBvbHlnb25zPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLHModC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBhKHQsZSl9KSkscil9LHIubGluZVN0cmluZz1vLHIubGluZVN0cmluZ3M9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSkscyh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG8odCxlKX0pKSxyKX0sci5mZWF0dXJlQ29sbGVjdGlvbj1zLHIubXVsdGlMaW5lU3RyaW5nPWwsci5tdWx0aVBvaW50PWMsci5tdWx0aVBvbHlnb249dSxyLmdlb21ldHJ5Q29sbGVjdGlvbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24iLGdlb21ldHJpZXM6dH0sZSxyKX0sci5yb3VuZD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLGUmJiEoZT49MCkpdGhyb3cgbmV3IEVycm9yKCJwcmVjaXNpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO3ZhciByPU1hdGgucG93KDEwLGV8fDApO3JldHVybiBNYXRoLnJvdW5kKHQqcikvcn0sci5yYWRpYW5zVG9MZW5ndGg9ZixyLmxlbmd0aFRvUmFkaWFucz1oLHIubGVuZ3RoVG9EZWdyZWVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHAoaCh0LGUpKX0sci5iZWFyaW5nVG9BemltdXRoPWZ1bmN0aW9uKHQpe3ZhciBlPXQlMzYwO3JldHVybiBlPDAmJihlKz0zNjApLGV9LHIucmFkaWFuc1RvRGVncmVlcz1wLHIuZGVncmVlc1RvUmFkaWFucz1mdW5jdGlvbih0KXtyZXR1cm4gdCUzNjAqTWF0aC5QSS8xODB9LHIuY29udmVydExlbmd0aD1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09ZSYmKGU9ImtpbG9tZXRlcnMiKSx2b2lkIDA9PT1yJiYocj0ia2lsb21ldGVycyIpLCEodD49MCkpdGhyb3cgbmV3IEVycm9yKCJsZW5ndGggbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO3JldHVybiBmKGgodCxlKSxyKX0sci5jb252ZXJ0QXJlYT1mdW5jdGlvbih0LGUsbil7aWYodm9pZCAwPT09ZSYmKGU9Im1ldGVycyIpLHZvaWQgMD09PW4mJihuPSJraWxvbWV0ZXJzIiksISh0Pj0wKSl0aHJvdyBuZXcgRXJyb3IoImFyZWEgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO3ZhciBpPXIuYXJlYUZhY3RvcnNbZV07aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIG9yaWdpbmFsIHVuaXRzIik7dmFyIGE9ci5hcmVhRmFjdG9yc1tuXTtpZighYSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZmluYWwgdW5pdHMiKTtyZXR1cm4gdC9pKmF9LHIuaXNOdW1iZXI9ZCxyLmlzT2JqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmdC5jb25zdHJ1Y3Rvcj09PU9iamVjdH0sci52YWxpZGF0ZUJCb3g9ZnVuY3Rpb24odCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJiYm94IGlzIHJlcXVpcmVkIik7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJiYm94IG11c3QgYmUgYW4gQXJyYXkiKTtpZig0IT09dC5sZW5ndGgmJjYhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBiZSBhbiBBcnJheSBvZiA0IG9yIDYgbnVtYmVycyIpO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoIWQodCkpdGhyb3cgbmV3IEVycm9yKCJiYm94IG11c3Qgb25seSBjb250YWluIG51bWJlcnMiKX0pKX0sci52YWxpZGF0ZUlkPWZ1bmN0aW9uKHQpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiaWQgaXMgcmVxdWlyZWQiKTtpZigtMT09PVsic3RyaW5nIiwibnVtYmVyIl0uaW5kZXhPZih0eXBlb2YgdCkpdGhyb3cgbmV3IEVycm9yKCJpZCBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nIil9LHIucmFkaWFuczJkZWdyZWVzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgcmFkaWFuc1RvRGVncmVlc2AiKX0sci5kZWdyZWVzMnJhZGlhbnM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBkZWdyZWVzVG9SYWRpYW5zYCIpfSxyLmRpc3RhbmNlVG9EZWdyZWVzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgbGVuZ3RoVG9EZWdyZWVzYCIpfSxyLmRpc3RhbmNlVG9SYWRpYW5zPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgbGVuZ3RoVG9SYWRpYW5zYCIpfSxyLnJhZGlhbnNUb0Rpc3RhbmNlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgcmFkaWFuc1RvTGVuZ3RoYCIpfSxyLmJlYXJpbmdUb0FuZ2xlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgYmVhcmluZ1RvQXppbXV0aGAiKX0sci5jb252ZXJ0RGlzdGFuY2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBjb252ZXJ0TGVuZ3RoYCIpfX0se31dLDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj10KCJAdHVyZi9oZWxwZXJzIik7ZnVuY3Rpb24gaSh0LGUscil7aWYobnVsbCE9PXQpZm9yKHZhciBuLGEsbyxzLGwsYyx1LGYsaD0wLHA9MCxkPXQudHlwZSxnPSJGZWF0dXJlQ29sbGVjdGlvbiI9PT1kLG09IkZlYXR1cmUiPT09ZCx2PWc/dC5mZWF0dXJlcy5sZW5ndGg6MSx5PTA7eTx2O3krKyl7bD0oZj0hISh1PWc/dC5mZWF0dXJlc1t5XS5nZW9tZXRyeTptP3QuZ2VvbWV0cnk6dCkmJiJHZW9tZXRyeUNvbGxlY3Rpb24iPT09dS50eXBlKT91Lmdlb21ldHJpZXMubGVuZ3RoOjE7Zm9yKHZhciB4PTA7eDxsO3grKyl7dmFyIGI9MCxfPTA7aWYobnVsbCE9PShzPWY/dS5nZW9tZXRyaWVzW3hdOnUpKXtjPXMuY29vcmRpbmF0ZXM7dmFyIHc9cy50eXBlO3N3aXRjaChoPSFyfHwiUG9seWdvbiIhPT13JiYiTXVsdGlQb2x5Z29uIiE9PXc/MDoxLHcpe2Nhc2UgbnVsbDpicmVhaztjYXNlIlBvaW50IjppZighMT09PWUoYyxwLHksYixfKSlyZXR1cm4hMTtwKyssYisrO2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6Y2FzZSJNdWx0aVBvaW50Ijpmb3Iobj0wO248Yy5sZW5ndGg7bisrKXtpZighMT09PWUoY1tuXSxwLHksYixfKSlyZXR1cm4hMTtwKyssIk11bHRpUG9pbnQiPT09dyYmYisrfSJMaW5lU3RyaW5nIj09PXcmJmIrKzticmVhaztjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpmb3Iobj0wO248Yy5sZW5ndGg7bisrKXtmb3IoYT0wO2E8Y1tuXS5sZW5ndGgtaDthKyspe2lmKCExPT09ZShjW25dW2FdLHAseSxiLF8pKXJldHVybiExO3ArK30iTXVsdGlMaW5lU3RyaW5nIj09PXcmJmIrKywiUG9seWdvbiI9PT13JiZfKyt9IlBvbHlnb24iPT09dyYmYisrO2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjpmb3Iobj0wO248Yy5sZW5ndGg7bisrKXtmb3IoXz0wLGE9MDthPGNbbl0ubGVuZ3RoO2ErKyl7Zm9yKG89MDtvPGNbbl1bYV0ubGVuZ3RoLWg7bysrKXtpZighMT09PWUoY1tuXVthXVtvXSxwLHksYixfKSlyZXR1cm4hMTtwKyt9XysrfWIrK31icmVhaztjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6Zm9yKG49MDtuPHMuZ2VvbWV0cmllcy5sZW5ndGg7bisrKWlmKCExPT09aShzLmdlb21ldHJpZXNbbl0sZSxyKSlyZXR1cm4hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBHZW9tZXRyeSBUeXBlIil9fX19fWZ1bmN0aW9uIGEodCxlKXt2YXIgcjtzd2l0Y2godC50eXBlKXtjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjpmb3Iocj0wO3I8dC5mZWF0dXJlcy5sZW5ndGgmJiExIT09ZSh0LmZlYXR1cmVzW3JdLnByb3BlcnRpZXMscik7cisrKTticmVhaztjYXNlIkZlYXR1cmUiOmUodC5wcm9wZXJ0aWVzLDApfX1mdW5jdGlvbiBvKHQsZSl7aWYoIkZlYXR1cmUiPT09dC50eXBlKWUodCwwKTtlbHNlIGlmKCJGZWF0dXJlQ29sbGVjdGlvbiI9PT10LnR5cGUpZm9yKHZhciByPTA7cjx0LmZlYXR1cmVzLmxlbmd0aCYmITEhPT1lKHQuZmVhdHVyZXNbcl0scik7cisrKTt9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdSxmLGg9MCxwPSJGZWF0dXJlQ29sbGVjdGlvbiI9PT10LnR5cGUsZD0iRmVhdHVyZSI9PT10LnR5cGUsZz1wP3QuZmVhdHVyZXMubGVuZ3RoOjE7Zm9yKHI9MDtyPGc7cisrKXtmb3Iocz1wP3QuZmVhdHVyZXNbcl0uZ2VvbWV0cnk6ZD90Lmdlb21ldHJ5OnQsYz1wP3QuZmVhdHVyZXNbcl0ucHJvcGVydGllczpkP3QucHJvcGVydGllczp7fSx1PXA/dC5mZWF0dXJlc1tyXS5iYm94OmQ/dC5iYm94OnZvaWQgMCxmPXA/dC5mZWF0dXJlc1tyXS5pZDpkP3QuaWQ6dm9pZCAwLG89KGw9ISFzJiYiR2VvbWV0cnlDb2xsZWN0aW9uIj09PXMudHlwZSk/cy5nZW9tZXRyaWVzLmxlbmd0aDoxLGk9MDtpPG87aSsrKWlmKG51bGwhPT0oYT1sP3MuZ2VvbWV0cmllc1tpXTpzKSlzd2l0Y2goYS50eXBlKXtjYXNlIlBvaW50IjpjYXNlIkxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2ludCI6Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpTGluZVN0cmluZyI6Y2FzZSJNdWx0aVBvbHlnb24iOmlmKCExPT09ZShhLGgsYyx1LGYpKXJldHVybiExO2JyZWFrO2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpmb3Iobj0wO248YS5nZW9tZXRyaWVzLmxlbmd0aDtuKyspaWYoITE9PT1lKGEuZ2VvbWV0cmllc1tuXSxoLGMsdSxmKSlyZXR1cm4hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBHZW9tZXRyeSBUeXBlIil9ZWxzZSBpZighMT09PWUobnVsbCxoLGMsdSxmKSlyZXR1cm4hMTtoKyt9fWZ1bmN0aW9uIGwodCxlKXtzKHQsKGZ1bmN0aW9uKHQscixpLGEsbyl7dmFyIHMsbD1udWxsPT09dD9udWxsOnQudHlwZTtzd2l0Y2gobCl7Y2FzZSBudWxsOmNhc2UiUG9pbnQiOmNhc2UiTGluZVN0cmluZyI6Y2FzZSJQb2x5Z29uIjpyZXR1cm4hMSE9PWUobi5mZWF0dXJlKHQsaSx7YmJveDphLGlkOm99KSxyLDApJiZ2b2lkIDB9c3dpdGNoKGwpe2Nhc2UiTXVsdGlQb2ludCI6cz0iUG9pbnQiO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpzPSJMaW5lU3RyaW5nIjticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cz0iUG9seWdvbiJ9Zm9yKHZhciBjPTA7Yzx0LmNvb3JkaW5hdGVzLmxlbmd0aDtjKyspe3ZhciB1PXt0eXBlOnMsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlc1tjXX07aWYoITE9PT1lKG4uZmVhdHVyZSh1LGkpLHIsYykpcmV0dXJuITF9fSkpfWZ1bmN0aW9uIGModCxlKXtsKHQsKGZ1bmN0aW9uKHQscixhKXt2YXIgbz0wO2lmKHQuZ2VvbWV0cnkpe3ZhciBzPXQuZ2VvbWV0cnkudHlwZTtpZigiUG9pbnQiIT09cyYmIk11bHRpUG9pbnQiIT09cyl7dmFyIGwsYz0wLHU9MCxmPTA7cmV0dXJuITEhPT1pKHQsKGZ1bmN0aW9uKGkscyxoLHAsZCl7aWYodm9pZCAwPT09bHx8cj5jfHxwPnV8fGQ+ZilyZXR1cm4gbD1pLGM9cix1PXAsZj1kLHZvaWQobz0wKTt2YXIgZz1uLmxpbmVTdHJpbmcoW2wsaV0sdC5wcm9wZXJ0aWVzKTtpZighMT09PWUoZyxyLGEsZCxvKSlyZXR1cm4hMTtvKyssbD1pfSkpJiZ2b2lkIDB9fX0pKX1mdW5jdGlvbiB1KHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIHJlcXVpcmVkIik7bCh0LChmdW5jdGlvbih0LHIsaSl7aWYobnVsbCE9PXQuZ2VvbWV0cnkpe3ZhciBhPXQuZ2VvbWV0cnkudHlwZSxvPXQuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7c3dpdGNoKGEpe2Nhc2UiTGluZVN0cmluZyI6aWYoITE9PT1lKHQscixpLDAsMCkpcmV0dXJuITE7YnJlYWs7Y2FzZSJQb2x5Z29uIjpmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKylpZighMT09PWUobi5saW5lU3RyaW5nKG9bc10sdC5wcm9wZXJ0aWVzKSxyLGkscykpcmV0dXJuITF9fX0pKX1yLmNvb3JkRWFjaD1pLHIuY29vcmRSZWR1Y2U9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9cjtyZXR1cm4gaSh0LChmdW5jdGlvbih0LG4saSxvLHMpe2E9MD09PW4mJnZvaWQgMD09PXI/dDplKGEsdCxuLGksbyxzKX0pLG4pLGF9LHIucHJvcEVhY2g9YSxyLnByb3BSZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIGEodCwoZnVuY3Rpb24odCxpKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSl9KSksbn0sci5mZWF0dXJlRWFjaD1vLHIuZmVhdHVyZVJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gbyh0LChmdW5jdGlvbih0LGkpe249MD09PWkmJnZvaWQgMD09PXI/dDplKG4sdCxpKX0pKSxufSxyLmNvb3JkQWxsPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBpKHQsKGZ1bmN0aW9uKHQpe2UucHVzaCh0KX0pKSxlfSxyLmdlb21FYWNoPXMsci5nZW9tUmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yO3JldHVybiBzKHQsKGZ1bmN0aW9uKHQsaSxhLG8scyl7bj0wPT09aSYmdm9pZCAwPT09cj90OmUobix0LGksYSxvLHMpfSkpLG59LHIuZmxhdHRlbkVhY2g9bCxyLmZsYXR0ZW5SZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIGwodCwoZnVuY3Rpb24odCxpLGEpe249MD09PWkmJjA9PT1hJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSxhKX0pKSxufSxyLnNlZ21lbnRFYWNoPWMsci5zZWdtZW50UmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLGk9ITE7cmV0dXJuIGModCwoZnVuY3Rpb24odCxhLG8scyxsKXtuPSExPT09aSYmdm9pZCAwPT09cj90OmUobix0LGEsbyxzLGwpLGk9ITB9KSksbn0sci5saW5lRWFjaD11LHIubGluZVJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gdSh0LChmdW5jdGlvbih0LGksYSxvKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSxhLG8pfSkpLG59LHIuZmluZFNlZ21lbnQ9ZnVuY3Rpb24odCxlKXtpZihlPWV8fHt9LCFuLmlzT2JqZWN0KGUpKXRocm93IG5ldyBFcnJvcigib3B0aW9ucyBpcyBpbnZhbGlkIik7dmFyIHIsaT1lLmZlYXR1cmVJbmRleHx8MCxhPWUubXVsdGlGZWF0dXJlSW5kZXh8fDAsbz1lLmdlb21ldHJ5SW5kZXh8fDAscz1lLnNlZ21lbnRJbmRleHx8MCxsPWUucHJvcGVydGllcztzd2l0Y2godC50eXBlKXtjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjppPDAmJihpPXQuZmVhdHVyZXMubGVuZ3RoK2kpLGw9bHx8dC5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzLHI9dC5mZWF0dXJlc1tpXS5nZW9tZXRyeTticmVhaztjYXNlIkZlYXR1cmUiOmw9bHx8dC5wcm9wZXJ0aWVzLHI9dC5nZW9tZXRyeTticmVhaztjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOnJldHVybiBudWxsO2Nhc2UiTGluZVN0cmluZyI6Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpTGluZVN0cmluZyI6Y2FzZSJNdWx0aVBvbHlnb24iOnI9dDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyBpbnZhbGlkIil9aWYobnVsbD09PXIpcmV0dXJuIG51bGw7dmFyIGM9ci5jb29yZGluYXRlcztzd2l0Y2goci50eXBlKXtjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOnJldHVybiBudWxsO2Nhc2UiTGluZVN0cmluZyI6cmV0dXJuIHM8MCYmKHM9Yy5sZW5ndGgrcy0xKSxuLmxpbmVTdHJpbmcoW2Nbc10sY1tzKzFdXSxsLGUpO2Nhc2UiUG9seWdvbiI6cmV0dXJuIG88MCYmKG89Yy5sZW5ndGgrbyksczwwJiYocz1jW29dLmxlbmd0aCtzLTEpLG4ubGluZVN0cmluZyhbY1tvXVtzXSxjW29dW3MrMV1dLGwsZSk7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLHM8MCYmKHM9Y1thXS5sZW5ndGgrcy0xKSxuLmxpbmVTdHJpbmcoW2NbYV1bc10sY1thXVtzKzFdXSxsLGUpO2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxvPDAmJihvPWNbYV0ubGVuZ3RoK28pLHM8MCYmKHM9Y1thXVtvXS5sZW5ndGgtcy0xKSxuLmxpbmVTdHJpbmcoW2NbYV1bb11bc10sY1thXVtvXVtzKzFdXSxsLGUpfXRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyBpbnZhbGlkIil9LHIuZmluZFBvaW50PWZ1bmN0aW9uKHQsZSl7aWYoZT1lfHx7fSwhbi5pc09iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMgaXMgaW52YWxpZCIpO3ZhciByLGk9ZS5mZWF0dXJlSW5kZXh8fDAsYT1lLm11bHRpRmVhdHVyZUluZGV4fHwwLG89ZS5nZW9tZXRyeUluZGV4fHwwLHM9ZS5jb29yZEluZGV4fHwwLGw9ZS5wcm9wZXJ0aWVzO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOmk8MCYmKGk9dC5mZWF0dXJlcy5sZW5ndGgraSksbD1sfHx0LmZlYXR1cmVzW2ldLnByb3BlcnRpZXMscj10LmZlYXR1cmVzW2ldLmdlb21ldHJ5O2JyZWFrO2Nhc2UiRmVhdHVyZSI6bD1sfHx0LnByb3BlcnRpZXMscj10Lmdlb21ldHJ5O2JyZWFrO2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9seWdvbiI6cj10O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX1pZihudWxsPT09cilyZXR1cm4gbnVsbDt2YXIgYz1yLmNvb3JkaW5hdGVzO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOnJldHVybiBuLnBvaW50KGMsbCxlKTtjYXNlIk11bHRpUG9pbnQiOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLG4ucG9pbnQoY1thXSxsLGUpO2Nhc2UiTGluZVN0cmluZyI6cmV0dXJuIHM8MCYmKHM9Yy5sZW5ndGgrcyksbi5wb2ludChjW3NdLGwsZSk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbzwwJiYobz1jLmxlbmd0aCtvKSxzPDAmJihzPWNbb10ubGVuZ3RoK3MpLG4ucG9pbnQoY1tvXVtzXSxsLGUpO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxzPDAmJihzPWNbYV0ubGVuZ3RoK3MpLG4ucG9pbnQoY1thXVtzXSxsLGUpO2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxvPDAmJihvPWNbYV0ubGVuZ3RoK28pLHM8MCYmKHM9Y1thXVtvXS5sZW5ndGgtcyksbi5wb2ludChjW2FdW29dW3NdLGwsZSl9dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX19LHsiQHR1cmYvaGVscGVycyI6NjJ9XSw2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0idW5kZWZpbmVkIj09dHlwZW9mIFdlYWtNYXA/dCgid2Vhay1tYXAiKTpXZWFrTWFwLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPW5ldyBuO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1vLmdldCh0KSxyPWUmJihlLl90cmlhbmdsZUJ1ZmZlci5oYW5kbGV8fGUuX3RyaWFuZ2xlQnVmZmVyLmJ1ZmZlcik7aWYoIXJ8fCF0LmlzQnVmZmVyKHIpKXt2YXIgbj1pKHQsbmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLTEsNCw0LC0xXSkpOyhlPWEodCxbe2J1ZmZlcjpuLHR5cGU6dC5GTE9BVCxzaXplOjJ9XSkpLl90cmlhbmdsZUJ1ZmZlcj1uLG8uc2V0KHQsZSl9ZS5iaW5kKCksdC5kcmF3QXJyYXlzKHQuVFJJQU5HTEVTLDAsMyksZS51bmJpbmQoKX19LHsiZ2wtYnVmZmVyIjoyNTksImdsLXZhbyI6MzU4LCJ3ZWFrLW1hcCI6NjAyfV0sNjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9MCxyPTAsbj0wLGk9MDtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBhPSh0PXQuc2xpY2UoKSlbMF0sbz1hLnRvVXBwZXJDYXNlKCk7aWYoYSE9bylzd2l0Y2godFswXT1vLGEpe2Nhc2UiYSI6dFs2XSs9bix0WzddKz1pO2JyZWFrO2Nhc2UidiI6dFsxXSs9aTticmVhaztjYXNlImgiOnRbMV0rPW47YnJlYWs7ZGVmYXVsdDpmb3IodmFyIHM9MTtzPHQubGVuZ3RoOyl0W3MrK10rPW4sdFtzKytdKz1pfXN3aXRjaChvKXtjYXNlIloiOm49ZSxpPXI7YnJlYWs7Y2FzZSJIIjpuPXRbMV07YnJlYWs7Y2FzZSJWIjppPXRbMV07YnJlYWs7Y2FzZSJNIjpuPWU9dFsxXSxpPXI9dFsyXTticmVhaztkZWZhdWx0Om49dFt0Lmxlbmd0aC0yXSxpPXRbdC5sZW5ndGgtMV19cmV0dXJuIHR9KSl9fSx7fV0sNjY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJwYWQtbGVmdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT0ibnVtYmVyIj09dHlwZW9mIGU/ZToxLHI9cnx8IjogIjt2YXIgaT10LnNwbGl0KC9ccj9cbi8pLGE9U3RyaW5nKGkubGVuZ3RoK2UtMSkubGVuZ3RoO3JldHVybiBpLm1hcCgoZnVuY3Rpb24odCxpKXt2YXIgbz1pK2Uscz1TdHJpbmcobykubGVuZ3RoO3JldHVybiBuKG8sYS1zKStyK3R9KSkuam9pbigiXG4iKX19LHsicGFkLWxlZnQiOjUwMn1dLDY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTtpZigxPT09ZSlyZXR1cm5bMF07Zm9yKHZhciByPXRbMF0ubGVuZ3RoLG49W3RbMF1dLGE9WzBdLG89MTtvPGU7KytvKWlmKG4ucHVzaCh0W29dKSxpKG4scikpe2lmKGEucHVzaChvKSxhLmxlbmd0aD09PXIrMSlyZXR1cm4gYX1lbHNlIG4ucG9wKCk7cmV0dXJuIGF9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpO2Z1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUrMSksaT0wO2k8dC5sZW5ndGg7KytpKXJbaV09dFtpXTtmb3IoaT0wO2k8PXQubGVuZ3RoOysraSl7Zm9yKHZhciBhPXQubGVuZ3RoO2E8PWU7KythKXtmb3IodmFyIG89bmV3IEFycmF5KGUpLHM9MDtzPGU7KytzKW9bc109TWF0aC5wb3coYSsxLWkscyk7clthXT1vfWlmKG4uYXBwbHkodm9pZCAwLHIpKXJldHVybiEwfXJldHVybiExfX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjU0OH1dLDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKGUpLmZpbHRlcigoZnVuY3Rpb24ocil7Zm9yKHZhciBuPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKW5bYV09ZVtyW2FdXTtyZXR1cm4gaShuKSp0PDF9KSl9O3ZhciBuPXQoImRlbGF1bmF5LXRyaWFuZ3VsYXRlIiksaT10KCJjaXJjdW1yYWRpdXMiKX0se2NpcmN1bXJhZGl1czoxMTksImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNzF9XSw2OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBpKG4odCxlKSl9O3ZhciBuPXQoImFscGhhLWNvbXBsZXgiKSxpPXQoInNpbXBsaWNpYWwtY29tcGxleC1ib3VuZGFyeSIpfSx7ImFscGhhLWNvbXBsZXgiOjY4LCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnkiOjU1NX1dLDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCF0fHxudWxsPT10Lmxlbmd0aCl0aHJvdyBFcnJvcigiQXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Iik7ZT1udWxsPT1lPzE6TWF0aC5mbG9vcihlKTtmb3IodmFyIHI9QXJyYXkoMiplKSxuPTA7bjxlO24rKyl7Zm9yKHZhciBpPS0xLzAsYT0xLzAsbz1uLHM9dC5sZW5ndGg7bzxzO28rPWUpdFtvXT5pJiYoaT10W29dKSx0W29dPGEmJihhPXRbb10pO3Jbbl09YSxyW2Urbl09aX1yZXR1cm4gcn19LHt9XSw3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJhcnJheS1ib3VuZHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCF0fHxudWxsPT10Lmxlbmd0aCl0aHJvdyBFcnJvcigiQXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Iik7bnVsbD09ZSYmKGU9MSk7bnVsbD09ciYmKHI9bih0LGUpKTtmb3IodmFyIGk9MDtpPGU7aSsrKXt2YXIgYT1yW2UraV0sbz1yW2ldLHM9aSxsPXQubGVuZ3RoO2lmKGE9PT0xLzAmJm89PT0tMS8wKWZvcihzPWk7czxsO3MrPWUpdFtzXT10W3NdPT09YT8xOnRbc109PT1vPzA6LjU7ZWxzZSBpZihhPT09MS8wKWZvcihzPWk7czxsO3MrPWUpdFtzXT10W3NdPT09YT8xOjA7ZWxzZSBpZihvPT09LTEvMClmb3Iocz1pO3M8bDtzKz1lKXRbc109dFtzXT09PW8/MDoxO2Vsc2V7dmFyIGM9YS1vO2ZvcihzPWk7czxsO3MrPWUpaXNOYU4odFtzXSl8fCh0W3NdPTA9PT1jPy41Oih0W3NdLW8pL2MpfX1yZXR1cm4gdH19LHsiYXJyYXktYm91bmRzIjo3MH1dLDcyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Im51bWJlciI9PXR5cGVvZiB0LG49Im51bWJlciI9PXR5cGVvZiBlO3ImJiFuPyhlPXQsdD0wKTpyfHxufHwodD0wLGU9MCk7dmFyIGk9KGV8PTApLSh0fD0wKTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJhcnJheSBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZSIpO2Zvcih2YXIgYT1uZXcgQXJyYXkoaSksbz0wLHM9dDtvPGk7bysrLHMrKylhW29dPXM7cmV0dXJuIGF9fSx7fV0sNzM6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm9iamVjdC1hc3NpZ24iKTsKLyohCiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLgogKgogKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi9mdW5jdGlvbiBpKHQsZSl7aWYodD09PWUpcmV0dXJuIDA7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wLGE9TWF0aC5taW4ocixuKTtpPGE7KytpKWlmKHRbaV0hPT1lW2ldKXtyPXRbaV0sbj1lW2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH1mdW5jdGlvbiBhKHQpe3JldHVybiByLkJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIHIuQnVmZmVyLmlzQnVmZmVyP3IuQnVmZmVyLmlzQnVmZmVyKHQpOiEobnVsbD09dHx8IXQuX2lzQnVmZmVyKX12YXIgbz10KCJ1dGlsLyIpLHM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxsPUFycmF5LnByb3RvdHlwZS5zbGljZSxjPSJmb28iPT09ZnVuY3Rpb24oKXt9Lm5hbWU7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIWEodCkmJigiZnVuY3Rpb24iPT10eXBlb2Ygci5BcnJheUJ1ZmZlciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KHQpOiEhdCYmKHQgaW5zdGFuY2VvZiBEYXRhVmlld3x8ISEodC5idWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSkpfXZhciBoPWUuZXhwb3J0cz15LHA9L1xzKmZ1bmN0aW9uXHMrKFteXChcc10qKVxzKi87ZnVuY3Rpb24gZCh0KXtpZihvLmlzRnVuY3Rpb24odCkpe2lmKGMpcmV0dXJuIHQubmFtZTt2YXIgZT10LnRvU3RyaW5nKCkubWF0Y2gocCk7cmV0dXJuIGUmJmVbMV19fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5sZW5ndGg8ZT90OnQuc2xpY2UoMCxlKTp0fWZ1bmN0aW9uIG0odCl7aWYoY3x8IW8uaXNGdW5jdGlvbih0KSlyZXR1cm4gby5pbnNwZWN0KHQpO3ZhciBlPWQodCk7cmV0dXJuIltGdW5jdGlvbiIrKGU/IjogIitlOiIiKSsiXSJ9ZnVuY3Rpb24gdih0LGUscixuLGkpe3Rocm93IG5ldyBoLkFzc2VydGlvbkVycm9yKHttZXNzYWdlOnIsYWN0dWFsOnQsZXhwZWN0ZWQ6ZSxvcGVyYXRvcjpuLHN0YWNrU3RhcnRGdW5jdGlvbjppfSl9ZnVuY3Rpb24geSh0LGUpe3R8fHYodCwhMCxlLCI9PSIsaC5vayl9ZnVuY3Rpb24geCh0LGUscixuKXtpZih0PT09ZSlyZXR1cm4hMDtpZihhKHQpJiZhKGUpKXJldHVybiAwPT09aSh0LGUpO2lmKG8uaXNEYXRlKHQpJiZvLmlzRGF0ZShlKSlyZXR1cm4gdC5nZXRUaW1lKCk9PT1lLmdldFRpbWUoKTtpZihvLmlzUmVnRXhwKHQpJiZvLmlzUmVnRXhwKGUpKXJldHVybiB0LnNvdXJjZT09PWUuc291cmNlJiZ0Lmdsb2JhbD09PWUuZ2xvYmFsJiZ0Lm11bHRpbGluZT09PWUubXVsdGlsaW5lJiZ0Lmxhc3RJbmRleD09PWUubGFzdEluZGV4JiZ0Lmlnbm9yZUNhc2U9PT1lLmlnbm9yZUNhc2U7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8bnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYoZih0KSYmZihlKSYmdSh0KT09PXUoZSkmJiEodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpcmV0dXJuIDA9PT1pKG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpO2lmKGEodCkhPT1hKGUpKXJldHVybiExO3ZhciBzPShuPW58fHthY3R1YWw6W10sZXhwZWN0ZWQ6W119KS5hY3R1YWwuaW5kZXhPZih0KTtyZXR1cm4tMSE9PXMmJnM9PT1uLmV4cGVjdGVkLmluZGV4T2YoZSl8fChuLmFjdHVhbC5wdXNoKHQpLG4uZXhwZWN0ZWQucHVzaChlKSxmdW5jdGlvbih0LGUscixuKXtpZihudWxsPT10fHxudWxsPT1lKXJldHVybiExO2lmKG8uaXNQcmltaXRpdmUodCl8fG8uaXNQcmltaXRpdmUoZSkpcmV0dXJuIHQ9PT1lO2lmKHImJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMTt2YXIgaT1iKHQpLGE9YihlKTtpZihpJiYhYXx8IWkmJmEpcmV0dXJuITE7aWYoaSlyZXR1cm4gdD1sLmNhbGwodCksZT1sLmNhbGwoZSkseCh0LGUscik7dmFyIHMsYyx1PVQodCksZj1UKGUpO2lmKHUubGVuZ3RoIT09Zi5sZW5ndGgpcmV0dXJuITE7Zm9yKHUuc29ydCgpLGYuc29ydCgpLGM9dS5sZW5ndGgtMTtjPj0wO2MtLSlpZih1W2NdIT09ZltjXSlyZXR1cm4hMTtmb3IoYz11Lmxlbmd0aC0xO2M+PTA7Yy0tKWlmKHM9dVtjXSwheCh0W3NdLGVbc10scixuKSlyZXR1cm4hMTtyZXR1cm4hMH0odCxlLHIsbikpfXJldHVybiByP3Q9PT1lOnQ9PWV9ZnVuY3Rpb24gYih0KXtyZXR1cm4iW29iamVjdCBBcmd1bWVudHNdIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF8odCxlKXtpZighdHx8IWUpcmV0dXJuITE7aWYoIltvYmplY3QgUmVnRXhwXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gZS50ZXN0KHQpO3RyeXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4hMH1jYXRjaCh0KXt9cmV0dXJuIUVycm9yLmlzUHJvdG90eXBlT2YoZSkmJiEwPT09ZS5jYWxsKHt9LHQpfWZ1bmN0aW9uIHcodCxlLHIsbil7dmFyIGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignImJsb2NrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTsic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxpPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0KCl9Y2F0Y2godCl7ZT10fXJldHVybiBlfShlKSxuPShyJiZyLm5hbWU/IiAoIityLm5hbWUrIikuIjoiLiIpKyhuPyIgIituOiIuIiksdCYmIWkmJnYoaSxyLCJNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbiIrbik7dmFyIGE9InN0cmluZyI9PXR5cGVvZiBuLHM9IXQmJmkmJiFyO2lmKCghdCYmby5pc0Vycm9yKGkpJiZhJiZfKGkscil8fHMpJiZ2KGksciwiR290IHVud2FudGVkIGV4Y2VwdGlvbiIrbiksdCYmaSYmciYmIV8oaSxyKXx8IXQmJmkpdGhyb3cgaX1oLkFzc2VydGlvbkVycm9yPWZ1bmN0aW9uKHQpe3RoaXMubmFtZT0iQXNzZXJ0aW9uRXJyb3IiLHRoaXMuYWN0dWFsPXQuYWN0dWFsLHRoaXMuZXhwZWN0ZWQ9dC5leHBlY3RlZCx0aGlzLm9wZXJhdG9yPXQub3BlcmF0b3IsdC5tZXNzYWdlPyh0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMSk6KHRoaXMubWVzc2FnZT1mdW5jdGlvbih0KXtyZXR1cm4gZyhtKHQuYWN0dWFsKSwxMjgpKyIgIit0Lm9wZXJhdG9yKyIgIitnKG0odC5leHBlY3RlZCksMTI4KX0odGhpcyksdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSEwKTt2YXIgZT10LnN0YWNrU3RhcnRGdW5jdGlvbnx8djtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGUpO2Vsc2V7dmFyIHI9bmV3IEVycm9yO2lmKHIuc3RhY2spe3ZhciBuPXIuc3RhY2ssaT1kKGUpLGE9bi5pbmRleE9mKCJcbiIraSk7aWYoYT49MCl7dmFyIG89bi5pbmRleE9mKCJcbiIsYSsxKTtuPW4uc3Vic3RyaW5nKG8rMSl9dGhpcy5zdGFjaz1ufX19LG8uaW5oZXJpdHMoaC5Bc3NlcnRpb25FcnJvcixFcnJvciksaC5mYWlsPXYsaC5vaz15LGguZXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPWUmJnYodCxlLHIsIj09IixoLmVxdWFsKX0saC5ub3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09ZSYmdih0LGUsciwiIT0iLGgubm90RXF1YWwpfSxoLmRlZXBFcXVhbD1mdW5jdGlvbih0LGUscil7eCh0LGUsITEpfHx2KHQsZSxyLCJkZWVwRXF1YWwiLGguZGVlcEVxdWFsKX0saC5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3godCxlLCEwKXx8dih0LGUsciwiZGVlcFN0cmljdEVxdWFsIixoLmRlZXBTdHJpY3RFcXVhbCl9LGgubm90RGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt4KHQsZSwhMSkmJnYodCxlLHIsIm5vdERlZXBFcXVhbCIsaC5ub3REZWVwRXF1YWwpfSxoLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiB0KGUscixuKXt4KGUsciwhMCkmJnYoZSxyLG4sIm5vdERlZXBTdHJpY3RFcXVhbCIsdCl9LGguc3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPT1lJiZ2KHQsZSxyLCI9PT0iLGguc3RyaWN0RXF1YWwpfSxoLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT09ZSYmdih0LGUsciwiIT09IixoLm5vdFN0cmljdEVxdWFsKX0saC50aHJvd3M9ZnVuY3Rpb24odCxlLHIpe3coITAsdCxlLHIpfSxoLmRvZXNOb3RUaHJvdz1mdW5jdGlvbih0LGUscil7dyghMSx0LGUscil9LGguaWZFcnJvcj1mdW5jdGlvbih0KXtpZih0KXRocm93IHR9LGguc3RyaWN0PW4oKGZ1bmN0aW9uIHQoZSxyKXtlfHx2KGUsITAsciwiPT0iLHQpfSksaCx7ZXF1YWw6aC5zdHJpY3RFcXVhbCxkZWVwRXF1YWw6aC5kZWVwU3RyaWN0RXF1YWwsbm90RXF1YWw6aC5ub3RTdHJpY3RFcXVhbCxub3REZWVwRXF1YWw6aC5ub3REZWVwU3RyaWN0RXF1YWx9KSxoLnN0cmljdC5zdHJpY3Q9aC5zdHJpY3Q7dmFyIFQ9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KXMuY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIGV9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJvYmplY3QtYXNzaWduIjo0OTksInV0aWwvIjo3Nn1dLDc0OltmdW5jdGlvbih0LGUscil7ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LHt9XSw3NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZWFkVUludDh9fSx7fV0sNzY6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSxuKXsoZnVuY3Rpb24oKXt2YXIgaT0vJVtzZGolXS9nO3IuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKCF2KHQpKXtmb3IodmFyIGU9W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZS5wdXNoKHMoYXJndW1lbnRzW3JdKSk7cmV0dXJuIGUuam9pbigiICIpfXI9MTtmb3IodmFyIG49YXJndW1lbnRzLGE9bi5sZW5ndGgsbz1TdHJpbmcodCkucmVwbGFjZShpLChmdW5jdGlvbih0KXtpZigiJSUiPT09dClyZXR1cm4iJSI7aWYocj49YSlyZXR1cm4gdDtzd2l0Y2godCl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhuW3IrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIobltyKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5bcisrXSl9Y2F0Y2godCl7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIHR9fSkpLGw9bltyXTtyPGE7bD1uWysrcl0pZyhsKXx8IWIobCk/bys9IiAiK2w6bys9IiAiK3MobCk7cmV0dXJuIG99LHIuZGVwcmVjYXRlPWZ1bmN0aW9uKHQsaSl7aWYoeShuLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiByLmRlcHJlY2F0ZSh0LGkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT1lLm5vRGVwcmVjYXRpb24pcmV0dXJuIHQ7dmFyIGE9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWEpe2lmKGUudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IoaSk7ZS50cmFjZURlcHJlY2F0aW9uP2NvbnNvbGUudHJhY2UoaSk6Y29uc29sZS5lcnJvcihpKSxhPSEwfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBhLG89e307ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPXtzZWVuOltdLHN0eWxpemU6Y307cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihuLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKG4uY29sb3JzPWFyZ3VtZW50c1szXSksZChlKT9uLnNob3dIaWRkZW49ZTplJiZyLl9leHRlbmQobixlKSx5KG4uc2hvd0hpZGRlbikmJihuLnNob3dIaWRkZW49ITEpLHkobi5kZXB0aCkmJihuLmRlcHRoPTIpLHkobi5jb2xvcnMpJiYobi5jb2xvcnM9ITEpLHkobi5jdXN0b21JbnNwZWN0KSYmKG4uY3VzdG9tSW5zcGVjdD0hMCksbi5jb2xvcnMmJihuLnN0eWxpemU9bCksdShuLHQsbi5kZXB0aCl9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXMuc3R5bGVzW2VdO3JldHVybiByPyJceDFiWyIrcy5jb2xvcnNbcl1bMF0rIm0iK3QrIlx4MWJbIitzLmNvbG9yc1tyXVsxXSsibSI6dH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHR9ZnVuY3Rpb24gdSh0LGUsbil7aWYodC5jdXN0b21JbnNwZWN0JiZlJiZUKGUuaW5zcGVjdCkmJmUuaW5zcGVjdCE9PXIuaW5zcGVjdCYmKCFlLmNvbnN0cnVjdG9yfHxlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PWUpKXt2YXIgaT1lLmluc3BlY3Qobix0KTtyZXR1cm4gdihpKXx8KGk9dSh0LGksbikpLGl9dmFyIGE9ZnVuY3Rpb24odCxlKXtpZih5KGUpKXJldHVybiB0LnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKHYoZSkpe3ZhciByPSInIitKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiB0LnN0eWxpemUociwic3RyaW5nIil9aWYobShlKSlyZXR1cm4gdC5zdHlsaXplKCIiK2UsIm51bWJlciIpO2lmKGQoZSkpcmV0dXJuIHQuc3R5bGl6ZSgiIitlLCJib29sZWFuIik7aWYoZyhlKSlyZXR1cm4gdC5zdHlsaXplKCJudWxsIiwibnVsbCIpfSh0LGUpO2lmKGEpcmV0dXJuIGE7dmFyIG89T2JqZWN0LmtleXMoZSkscz1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2VbdF09ITB9KSksZX0obyk7aWYodC5zaG93SGlkZGVuJiYobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSksdyhlKSYmKG8uaW5kZXhPZigibWVzc2FnZSIpPj0wfHxvLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBmKGUpO2lmKDA9PT1vLmxlbmd0aCl7aWYoVChlKSl7dmFyIGw9ZS5uYW1lPyI6ICIrZS5uYW1lOiIiO3JldHVybiB0LnN0eWxpemUoIltGdW5jdGlvbiIrbCsiXSIsInNwZWNpYWwiKX1pZih4KGUpKXJldHVybiB0LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJyZWdleHAiKTtpZihfKGUpKXJldHVybiB0LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwiZGF0ZSIpO2lmKHcoZSkpcmV0dXJuIGYoZSl9dmFyIGMsYj0iIixrPSExLE09WyJ7IiwifSJdOyhwKGUpJiYoaz0hMCxNPVsiWyIsIl0iXSksVChlKSkmJihiPSIgW0Z1bmN0aW9uIisoZS5uYW1lPyI6ICIrZS5uYW1lOiIiKSsiXSIpO3JldHVybiB4KGUpJiYoYj0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKSxfKGUpJiYoYj0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChlKSksdyhlKSYmKGI9IiAiK2YoZSkpLDAhPT1vLmxlbmd0aHx8ayYmMCE9ZS5sZW5ndGg/bjwwP3goZSk/dC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwicmVnZXhwIik6dC5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKToodC5zZWVuLnB1c2goZSksYz1rP2Z1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPWUubGVuZ3RoO288czsrK28pRShlLFN0cmluZyhvKSk/YS5wdXNoKGgodCxlLHIsbixTdHJpbmcobyksITApKTphLnB1c2goIiIpO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKGkpe2kubWF0Y2goL15cZCskLyl8fGEucHVzaChoKHQsZSxyLG4saSwhMCkpfSkpLGF9KHQsZSxuLHMsbyk6by5tYXAoKGZ1bmN0aW9uKHIpe3JldHVybiBoKHQsZSxuLHMscixrKX0pKSx0LnNlZW4ucG9wKCksZnVuY3Rpb24odCxlLHIpe2lmKHQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBlLmluZGV4T2YoIlxuIik+PTAmJjAsdCtlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSksMCk+NjApcmV0dXJuIHJbMF0rKCIiPT09ZT8iIjplKyJcbiAiKSsiICIrdC5qb2luKCIsXG4gICIpKyIgIityWzFdO3JldHVybiByWzBdK2UrIiAiK3Quam9pbigiLCAiKSsiICIrclsxXX0oYyxiLE0pKTpNWzBdK2IrTVsxXX1mdW5jdGlvbiBmKHQpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSsiXSJ9ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dmFyIG8scyxsO2lmKChsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxpKXx8e3ZhbHVlOmVbaV19KS5nZXQ/cz1sLnNldD90LnN0eWxpemUoIltHZXR0ZXIvU2V0dGVyXSIsInNwZWNpYWwiKTp0LnN0eWxpemUoIltHZXR0ZXJdIiwic3BlY2lhbCIpOmwuc2V0JiYocz10LnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxFKG4saSl8fChvPSJbIitpKyJdIiksc3x8KHQuc2Vlbi5pbmRleE9mKGwudmFsdWUpPDA/KHM9ZyhyKT91KHQsbC52YWx1ZSxudWxsKTp1KHQsbC52YWx1ZSxyLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYocz1hP3Muc3BsaXQoIlxuIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iICAiK3R9KSkuam9pbigiXG4iKS5zdWJzdHIoMik6IlxuIitzLnNwbGl0KCJcbiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIiAgICIrdH0pKS5qb2luKCJcbiIpKTpzPXQuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSkseShvKSl7aWYoYSYmaS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gczsobz1KU09OLnN0cmluZ2lmeSgiIitpKSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8obz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpLG89dC5zdHlsaXplKG8sIm5hbWUiKSk6KG89by5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksbz10LnN0eWxpemUobywic3RyaW5nIikpfXJldHVybiBvKyI6ICIrc31mdW5jdGlvbiBwKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIGQodCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdH1mdW5jdGlvbiBnKHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiBtKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdH1mdW5jdGlvbiB2KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdH1mdW5jdGlvbiB5KHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIHgodCl7cmV0dXJuIGIodCkmJiJbb2JqZWN0IFJlZ0V4cF0iPT09ayh0KX1mdW5jdGlvbiBiKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gYih0KSYmIltvYmplY3QgRGF0ZV0iPT09ayh0KX1mdW5jdGlvbiB3KHQpe3JldHVybiBiKHQpJiYoIltvYmplY3QgRXJyb3JdIj09PWsodCl8fHQgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gVCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH1mdW5jdGlvbiBrKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdDwxMD8iMCIrdC50b1N0cmluZygxMCk6dC50b1N0cmluZygxMCl9ci5kZWJ1Z2xvZz1mdW5jdGlvbih0KXtpZih5KGEpJiYoYT1lLmVudi5OT0RFX0RFQlVHfHwiIiksdD10LnRvVXBwZXJDYXNlKCksIW9bdF0paWYobmV3IFJlZ0V4cCgiXFxiIit0KyJcXGIiLCJpIikudGVzdChhKSl7dmFyIG49ZS5waWQ7b1t0XT1mdW5jdGlvbigpe3ZhciBlPXIuZm9ybWF0LmFwcGx5KHIsYXJndW1lbnRzKTtjb25zb2xlLmVycm9yKCIlcyAlZDogJXMiLHQsbixlKX19ZWxzZSBvW3RdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gb1t0XX0sci5pbnNwZWN0PXMscy5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LHMuc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sci5pc0FycmF5PXAsci5pc0Jvb2xlYW49ZCxyLmlzTnVsbD1nLHIuaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR9LHIuaXNOdW1iZXI9bSxyLmlzU3RyaW5nPXYsci5pc1N5bWJvbD1mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9LHIuaXNVbmRlZmluZWQ9eSxyLmlzUmVnRXhwPXgsci5pc09iamVjdD1iLHIuaXNEYXRlPV8sci5pc0Vycm9yPXcsci5pc0Z1bmN0aW9uPVQsci5pc1ByaW1pdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXR8fCJib29sZWFuIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdHx8InN0cmluZyI9PXR5cGVvZiB0fHwic3ltYm9sIj09dHlwZW9mIHR8fCJ1bmRlZmluZWQiPT10eXBlb2YgdH0sci5pc0J1ZmZlcj10KCIuL3N1cHBvcnQvaXNCdWZmZXIiKTt2YXIgQT1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIFMoKXt2YXIgdD1uZXcgRGF0ZSxlPVtNKHQuZ2V0SG91cnMoKSksTSh0LmdldE1pbnV0ZXMoKSksTSh0LmdldFNlY29uZHMoKSldLmpvaW4oIjoiKTtyZXR1cm5bdC5nZXREYXRlKCksQVt0LmdldE1vbnRoKCldLGVdLmpvaW4oIiAiKX1mdW5jdGlvbiBFKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXIubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIiVzIC0gJXMiLFMoKSxyLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cykpfSxyLmluaGVyaXRzPXQoImluaGVyaXRzIiksci5fZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7aWYoIWV8fCFiKGUpKXJldHVybiB0O2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPXIubGVuZ3RoO24tLTspdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL3N1cHBvcnQvaXNCdWZmZXIiOjc1LF9wcm9jZXNzOjUyNixpbmhlcml0czo3NH1dLDc3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhdG9iKHQpfX0se31dLDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxhPW5ldyBBcnJheShyKzEpLG89MDtvPHI7KytvKXtmb3IodmFyIHM9bmV3IEFycmF5KHIrMSksbD0wO2w8PXI7KytsKXNbbF09dFtsXVtvXTthW29dPXN9YVtyXT1uZXcgQXJyYXkocisxKTtmb3Iobz0wO288PXI7KytvKWFbcl1bb109MTt2YXIgYz1uZXcgQXJyYXkocisxKTtmb3Iobz0wO288cjsrK28pY1tvXT1lW29dO2Nbcl09MTt2YXIgdT1uKGEsYyksZj1pKHVbcisxXSk7MD09PWYmJihmPTEpO3ZhciBoPW5ldyBBcnJheShyKzEpO2ZvcihvPTA7bzw9cjsrK28paFtvXT1pKHVbb10pL2Y7cmV0dXJuIGh9O3ZhciBuPXQoInJvYnVzdC1saW5lYXItc29sdmUiKTtmdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoOysrcillKz10W3JdO3JldHVybiBlfX0seyJyb2J1c3QtbGluZWFyLXNvbHZlIjo1NDd9XSw3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmJ5dGVMZW5ndGg9ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KSxyPWVbMF0sbj1lWzFdO3JldHVybiAzKihyK24pLzQtbn0sci50b0J5dGVBcnJheT1mdW5jdGlvbih0KXt2YXIgZSxyLG49Yyh0KSxvPW5bMF0scz1uWzFdLGw9bmV3IGEoZnVuY3Rpb24odCxlLHIpe3JldHVybiAzKihlK3IpLzQtcn0oMCxvLHMpKSx1PTAsZj1zPjA/by00Om87Zm9yKHI9MDtyPGY7cis9NCllPWlbdC5jaGFyQ29kZUF0KHIpXTw8MTh8aVt0LmNoYXJDb2RlQXQocisxKV08PDEyfGlbdC5jaGFyQ29kZUF0KHIrMildPDw2fGlbdC5jaGFyQ29kZUF0KHIrMyldLGxbdSsrXT1lPj4xNiYyNTUsbFt1KytdPWU+PjgmMjU1LGxbdSsrXT0yNTUmZTsyPT09cyYmKGU9aVt0LmNoYXJDb2RlQXQocildPDwyfGlbdC5jaGFyQ29kZUF0KHIrMSldPj40LGxbdSsrXT0yNTUmZSk7MT09PXMmJihlPWlbdC5jaGFyQ29kZUF0KHIpXTw8MTB8aVt0LmNoYXJDb2RlQXQocisxKV08PDR8aVt0LmNoYXJDb2RlQXQocisyKV0+PjIsbFt1KytdPWU+PjgmMjU1LGxbdSsrXT0yNTUmZSk7cmV0dXJuIGx9LHIuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxpPXIlMyxhPVtdLG89MCxzPXItaTtvPHM7bys9MTYzODMpYS5wdXNoKHUodCxvLG8rMTYzODM+cz9zOm8rMTYzODMpKTsxPT09aT8oZT10W3ItMV0sYS5wdXNoKG5bZT4+Ml0rbltlPDw0JjYzXSsiPT0iKSk6Mj09PWkmJihlPSh0W3ItMl08PDgpK3Rbci0xXSxhLnB1c2gobltlPj4xMF0rbltlPj40JjYzXStuW2U8PDImNjNdKyI9IikpO3JldHVybiBhLmpvaW4oIiIpfTtmb3IodmFyIG49W10saT1bXSxhPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHM9MCxsPW8ubGVuZ3RoO3M8bDsrK3MpbltzXT1vW3NdLGlbby5jaGFyQ29kZUF0KHMpXT1zO2Z1bmN0aW9uIGModCl7dmFyIGU9dC5sZW5ndGg7aWYoZSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIHI9dC5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1yJiYocj1lKSxbcixyPT09ZT8wOjQtciU0XX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIGksYSxvPVtdLHM9ZTtzPHI7cys9MylpPSh0W3NdPDwxNiYxNjcxMTY4MCkrKHRbcysxXTw8OCY2NTI4MCkrKDI1NSZ0W3MrMl0pLG8ucHVzaChuWyhhPWkpPj4xOCY2M10rblthPj4xMiY2M10rblthPj42JjYzXStuWzYzJmFdKTtyZXR1cm4gby5qb2luKCIiKX1pWyItIi5jaGFyQ29kZUF0KDApXT02MixpWyJfIi5jaGFyQ29kZUF0KDApXT02M30se31dLDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSkuYWRkKGVbMF0ubXVsKHRbMV0pKSx0WzFdLm11bChlWzFdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo5MH1dLDgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLm11bChlWzFdKS5jbXAoZVswXS5tdWwodFsxXSkpfX0se31dLDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSksdFsxXS5tdWwoZVswXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6OTB9XSw4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXJhdCIpLGk9dCgiLi9saWIvaXMtYm4iKSxhPXQoIi4vbGliL251bS10by1ibiIpLG89dCgiLi9saWIvc3RyLXRvLWJuIikscz10KCIuL2xpYi9yYXRpb25hbGl6ZSIpLGw9dCgiLi9kaXYiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIpe2lmKG4oZSkpcmV0dXJuIHI/bChlLHQocikpOltlWzBdLmNsb25lKCksZVsxXS5jbG9uZSgpXTt2YXIgYyx1LGY9MDtpZihpKGUpKWM9ZS5jbG9uZSgpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlKWM9byhlKTtlbHNle2lmKDA9PT1lKXJldHVyblthKDApLGEoMSldO2lmKGU9PT1NYXRoLmZsb29yKGUpKWM9YShlKTtlbHNle2Zvcig7ZSE9PU1hdGguZmxvb3IoZSk7KWUqPU1hdGgucG93KDIsMjU2KSxmLT0yNTY7Yz1hKGUpfX1pZihuKHIpKWMubXVsKHJbMV0pLHU9clswXS5jbG9uZSgpO2Vsc2UgaWYoaShyKSl1PXIuY2xvbmUoKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2Ygcil1PW8ocik7ZWxzZSBpZihyKWlmKHI9PT1NYXRoLmZsb29yKHIpKXU9YShyKTtlbHNle2Zvcig7ciE9PU1hdGguZmxvb3Iocik7KXIqPU1hdGgucG93KDIsMjU2KSxmKz0yNTY7dT1hKHIpfWVsc2UgdT1hKDEpO2Y+MD9jPWMudXNobG4oZik6ZjwwJiYodT11LnVzaGxuKC1mKSk7cmV0dXJuIHMoYyx1KX19LHsiLi9kaXYiOjgyLCIuL2lzLXJhdCI6ODQsIi4vbGliL2lzLWJuIjo4OCwiLi9saWIvbnVtLXRvLWJuIjo4OSwiLi9saWIvcmF0aW9uYWxpemUiOjkwLCIuL2xpYi9zdHItdG8tYm4iOjkxfV0sODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvaXMtYm4iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJjI9PT10Lmxlbmd0aCYmbih0WzBdKSYmbih0WzFdKX19LHsiLi9saWIvaXMtYm4iOjg4fV0sODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYm4uanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY21wKG5ldyBuKDApKX19LHsiYm4uanMiOjk5fV0sODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLHI9dC53b3JkcyxpPTA7aWYoMT09PWUpaT1yWzBdO2Vsc2UgaWYoMj09PWUpaT1yWzBdKzY3MTA4ODY0KnJbMV07ZWxzZSBmb3IodmFyIGE9MDthPGU7YSsrKXt2YXIgbz1yW2FdO2krPW8qTWF0aC5wb3coNjcxMDg4NjQsYSl9cmV0dXJuIG4odCkqaX19LHsiLi9ibi1zaWduIjo4NX1dLDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImRvdWJsZS1iaXRzIiksaT10KCJiaXQtdHdpZGRsZSIpLmNvdW50VHJhaWxpbmdaZXJvcztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aShuLmxvKHQpKTtpZihlPDMyKXJldHVybiBlO3ZhciByPWkobi5oaSh0KSk7aWYocj4yMClyZXR1cm4gNTI7cmV0dXJuIHIrMzJ9fSx7ImJpdC10d2lkZGxlIjo5NywiZG91YmxlLWJpdHMiOjE3M31dLDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3QoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkJvb2xlYW4odC53b3Jkcyl9fSx7ImJuLmpzIjo5OX1dLDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIiksaT10KCJkb3VibGUtYml0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pLmV4cG9uZW50KHQpO3JldHVybiBlPDUyP25ldyBuKHQpOm5ldyBuKHQqTWF0aC5wb3coMiw1Mi1lKSkudXNobG4oZS01Mil9fSx7ImJuLmpzIjo5OSwiZG91YmxlLWJpdHMiOjE3M31dLDkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbnVtLXRvLWJuIiksaT10KCIuL2JuLXNpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKHQpLGE9aShlKTtpZigwPT09cilyZXR1cm5bbigwKSxuKDEpXTtpZigwPT09YSlyZXR1cm5bbigwKSxuKDApXTthPDAmJih0PXQubmVnKCksZT1lLm5lZygpKTt2YXIgbz10LmdjZChlKTtpZihvLmNtcG4oMSkpcmV0dXJuW3QuZGl2KG8pLGUuZGl2KG8pXTtyZXR1cm5bdCxlXX19LHsiLi9ibi1zaWduIjo4NSwiLi9udW0tdG8tYm4iOjg5fV0sOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYm4uanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfX0seyJibi5qcyI6OTl9XSw5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMF0pLHRbMV0ubXVsKGVbMV0pKX19LHsiLi9saWIvcmF0aW9uYWxpemUiOjkwfV0sOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvYm4tc2lnbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbih0WzBdKSpuKHRbMV0pfX0seyIuL2xpYi9ibi1zaWduIjo4NX1dLDk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSkuc3ViKHRbMV0ubXVsKGVbMF0pKSx0WzFdLm11bChlWzFdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo5MH1dLDk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2JuLXRvLW51bSIpLGk9dCgiLi9saWIvY3R6Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdO2lmKDA9PT1lLmNtcG4oMCkpcmV0dXJuIDA7dmFyIGE9ZS5hYnMoKS5kaXZtb2Qoci5hYnMoKSksbz1hLmRpdixzPW4obyksbD1hLm1vZCxjPWUubmVnYXRpdmUhPT1yLm5lZ2F0aXZlPy0xOjE7aWYoMD09PWwuY21wbigwKSlyZXR1cm4gYypzO2lmKHMpe3ZhciB1PWkocykrNCxmPW4obC51c2hsbih1KS5kaXZSb3VuZChyKSk7cmV0dXJuIGMqKHMrZipNYXRoLnBvdygyLC11KSl9dmFyIGg9ci5iaXRMZW5ndGgoKS1sLmJpdExlbmd0aCgpKzUzO2Y9bihsLnVzaGxuKGgpLmRpdlJvdW5kKHIpKTtyZXR1cm4gaDwxMDIzP2MqZipNYXRoLnBvdygyLC1oKTooZio9TWF0aC5wb3coMiwtMTAyMyksYypmKk1hdGgucG93KDIsMTAyMy1oKSl9fSx7Ii4vbGliL2JuLXRvLW51bSI6ODYsIi4vbGliL2N0eiI6ODd9XSw5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSl7dmFyIGE9WyJmdW5jdGlvbiAiLHQsIihhLGwsaCwiLG4uam9pbigiLCIpLCIpeyIsaT8iIjoidmFyIGk9IixyPyJsLTEiOiJoKzEiLCI7d2hpbGUobDw9aCl7dmFyIG09KGwraCk+Pj4xLHg9YVttXSJdO3JldHVybiBpP2UuaW5kZXhPZigiYyIpPDA/YS5wdXNoKCI7aWYoeD09PXkpe3JldHVybiBtfWVsc2UgaWYoeDw9eSl7Iik6YS5wdXNoKCI7dmFyIHA9Yyh4LHkpO2lmKHA9PT0wKXtyZXR1cm4gbX1lbHNlIGlmKHA8PTApeyIpOmEucHVzaCgiO2lmKCIsZSwiKXtpPW07Iikscj9hLnB1c2goImw9bSsxfWVsc2V7aD1tLTF9Iik6YS5wdXNoKCJoPW0tMX1lbHNle2w9bSsxfSIpLGEucHVzaCgifSIpLGk/YS5wdXNoKCJyZXR1cm4gLTF9OyIpOmEucHVzaCgicmV0dXJuIGl9OyIpLGEuam9pbigiIil9ZnVuY3Rpb24gaSh0LGUscixpKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFtuKCJBIiwieCIrdCsieSIsZSxbInkiXSxpKSxuKCJQIiwiYyh4LHkpIit0KyIwIixlLFsieSIsImMiXSxpKSwiZnVuY3Rpb24gZGlzcGF0Y2hCc2VhcmNoIixyLCIoYSx5LGMsbCxoKXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dm9pZCAwKT8wOmx8MCwoaD09PXZvaWQgMCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT12b2lkIDApPzA6Y3wwLChsPT09dm9pZCAwKT9hLmxlbmd0aC0xOmx8MCx5KX19cmV0dXJuIGRpc3BhdGNoQnNlYXJjaCIscl0uam9pbigiIikpKCl9ZS5leHBvcnRzPXtnZTppKCI+PSIsITEsIkdFIiksZ3Q6aSgiPiIsITEsIkdUIiksbHQ6aSgiPCIsITAsIkxUIiksbGU6aSgiPD0iLCEwLCJMRSIpLGVxOmkoIi0iLCEwLCJFUSIsITApfX0se31dLDk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9MzI7cmV0dXJuKHQmPS10KSYmZS0tLDY1NTM1JnQmJihlLT0xNiksMTY3MTE5MzUmdCYmKGUtPTgpLDI1MjY0NTEzNSZ0JiYoZS09NCksODU4OTkzNDU5JnQmJihlLT0yKSwxNDMxNjU1NzY1JnQmJihlLT0xKSxlfXIuSU5UX0JJVFM9MzIsci5JTlRfTUFYPTIxNDc0ODM2NDcsci5JTlRfTUlOPS0xPDwzMSxyLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MCktKHQ8MCl9LHIuYWJzPWZ1bmN0aW9uKHQpe3ZhciBlPXQ+PjMxO3JldHVybih0XmUpLWV9LHIubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVeKHReZSkmLSh0PGUpfSxyLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0Xih0XmUpJi0odDxlKX0sci5pc1BvdzI9ZnVuY3Rpb24odCl7cmV0dXJuISh0JnQtMXx8IXQpfSxyLmxvZzI9ZnVuY3Rpb24odCl7dmFyIGUscjtyZXR1cm4gZT0odD42NTUzNSk8PDQsZXw9cj0oKHQ+Pj49ZSk+MjU1KTw8MyxlfD1yPSgodD4+Pj1yKT4xNSk8PDIsKGV8PXI9KCh0Pj4+PXIpPjMpPDwxKXwodD4+Pj1yKT4+MX0sci5sb2cxMD1mdW5jdGlvbih0KXtyZXR1cm4gdD49MWU5Pzk6dD49MWU4Pzg6dD49MWU3Pzc6dD49MWU2PzY6dD49MWU1PzU6dD49MWU0PzQ6dD49MWUzPzM6dD49MTAwPzI6dD49MTA/MTowfSxyLnBvcENvdW50PWZ1bmN0aW9uKHQpe3JldHVybiAxNjg0MzAwOSooKHQ9KDg1ODk5MzQ1OSYodC09dD4+PjEmMTQzMTY1NTc2NSkpKyh0Pj4+MiY4NTg5OTM0NTkpKSsodD4+PjQpJjI1MjY0NTEzNSk+Pj4yNH0sci5jb3VudFRyYWlsaW5nWmVyb3M9bixyLm5leHRQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0Kz0wPT09dCwtLXQsdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNikrMX0sci5wcmV2UG93Mj1mdW5jdGlvbih0KXtyZXR1cm4gdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNiktKHQ+Pj4xKX0sci5wYXJpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRePXQ+Pj4xNix0Xj10Pj4+OCx0Xj10Pj4+NCwyNzAzMD4+Pih0Jj0xNSkmMX07dmFyIGk9bmV3IEFycmF5KDI1Nik7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MjU2OysrZSl7dmFyIHI9ZSxuPWUsaT03O2ZvcihyPj4+PTE7cjtyPj4+PTEpbjw8PTEsbnw9MSZyLC0taTt0W2VdPW48PGkmMjU1fX0oaSksci5yZXZlcnNlPWZ1bmN0aW9uKHQpe3JldHVybiBpWzI1NSZ0XTw8MjR8aVt0Pj4+OCYyNTVdPDwxNnxpW3Q+Pj4xNiYyNTVdPDw4fGlbdD4+PjI0JjI1NV19LHIuaW50ZXJsZWF2ZTI9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0Jj02NTUzNSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGUmPTY1NTM1KXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9LHIuZGVpbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybih0PTY1NTM1JigodD0xNjcxMTkzNSYoKHQ9MjUyNjQ1MTM1JigodD04NTg5OTM0NTkmKCh0PXQ+Pj5lJjE0MzE2NTU3NjUpfHQ+Pj4xKSl8dD4+PjIpKXx0Pj4+NCkpfHQ+Pj4xNikpPDwxNj4+MTZ9LHIuaW50ZXJsZWF2ZTM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PTEyMjcxMzM1MTMmKCh0PTMyNzIzNTYwMzUmKCh0PTI1MTcxOTY5NSYoKHQ9NDI3ODE5MDMzNSYoKHQmPTEwMjMpfHQ8PDE2KSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSwodHw9KGU9MTIyNzEzMzUxMyYoKGU9MzI3MjM1NjAzNSYoKGU9MjUxNzE5Njk1JigoZT00Mjc4MTkwMzM1JigoZSY9MTAyMyl8ZTw8MTYpKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKTw8MSl8KHI9MTIyNzEzMzUxMyYoKHI9MzI3MjM1NjAzNSYoKHI9MjUxNzE5Njk1Jigocj00Mjc4MTkwMzM1JigociY9MTAyMyl8cjw8MTYpKXxyPDw4KSl8cjw8NCkpfHI8PDIpKTw8Mn0sci5kZWludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9MTAyMyYoKHQ9NDI3ODE5MDMzNSYoKHQ9MjUxNzE5Njk1JigodD0zMjcyMzU2MDM1JigodD10Pj4+ZSYxMjI3MTMzNTEzKXx0Pj4+MikpfHQ+Pj40KSl8dD4+PjgpKXx0Pj4+MTYpKTw8MjI+PjIyfSxyLm5leHRDb21iaW5hdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10fHQtMTtyZXR1cm4gZSsxfCh+ZSYtfmUpLTE+Pj5uKHQpKzF9fSx7fV0sOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY2xhbXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT17fSk7dmFyIHIsbyxzLGwsYyx1LGYsaCxwLGQsZyxtPW51bGw9PWUuY3V0b2ZmPy4yNTplLmN1dG9mZix2PW51bGw9PWUucmFkaXVzPzg6ZS5yYWRpdXMseT1lLmNoYW5uZWx8fDA7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpfHxBcnJheS5pc0FycmF5KHQpKXtpZighZS53aWR0aHx8IWUuaGVpZ2h0KXRocm93IEVycm9yKCJGb3IgcmF3IGRhdGEgd2lkdGggYW5kIGhlaWdodCBzaG91bGQgYmUgcHJvdmlkZWQgYnkgb3B0aW9ucyIpO3I9ZS53aWR0aCxvPWUuaGVpZ2h0LGw9dCx1PWUuc3RyaWRlP2Uuc3RyaWRlOk1hdGguZmxvb3IodC5sZW5ndGgvci9vKX1lbHNlIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudD8oZj0oaD10KS5nZXRDb250ZXh0KCIyZCIpLHI9aC53aWR0aCxvPWguaGVpZ2h0LHA9Zi5nZXRJbWFnZURhdGEoMCwwLHIsbyksbD1wLmRhdGEsdT00KTp3aW5kb3cuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJiZ0IGluc3RhbmNlb2Ygd2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD8oaD10LmNhbnZhcyxmPXQscj1oLndpZHRoLG89aC5oZWlnaHQscD1mLmdldEltYWdlRGF0YSgwLDAscixvKSxsPXAuZGF0YSx1PTQpOndpbmRvdy5JbWFnZURhdGEmJnQgaW5zdGFuY2VvZiB3aW5kb3cuSW1hZ2VEYXRhJiYocD10LHI9dC53aWR0aCxvPXQuaGVpZ2h0LGw9cC5kYXRhLHU9NCk7aWYocz1NYXRoLm1heChyLG8pLHdpbmRvdy5VaW50OENsYW1wZWRBcnJheSYmbCBpbnN0YW5jZW9mIHdpbmRvdy5VaW50OENsYW1wZWRBcnJheXx8d2luZG93LlVpbnQ4QXJyYXkmJmwgaW5zdGFuY2VvZiB3aW5kb3cuVWludDhBcnJheSlmb3IoYz1sLGw9QXJyYXkocipvKSxkPTAsZz1jLmxlbmd0aDtkPGc7ZCsrKWxbZF09Y1tkKnUreV0vMjU1O2Vsc2UgaWYoMSE9PXUpdGhyb3cgRXJyb3IoIlJhdyBkYXRhIGNhbiBoYXZlIG9ubHkgMSB2YWx1ZSBwZXIgcGl4ZWwiKTt2YXIgeD1BcnJheShyKm8pLGI9QXJyYXkocipvKSxfPUFycmF5KHMpLHc9QXJyYXkocyksVD1BcnJheShzKzEpLGs9QXJyYXkocyk7Zm9yKGQ9MCxnPXIqbztkPGc7ZCsrKXt2YXIgTT1sW2RdO3hbZF09MT09PU0/MDowPT09TT9pOk1hdGgucG93KE1hdGgubWF4KDAsLjUtTSksMiksYltkXT0xPT09TT9pOjA9PT1NPzA6TWF0aC5wb3coTWF0aC5tYXgoMCxNLS41KSwyKX1hKHgscixvLF8sdyxrLFQpLGEoYixyLG8sXyx3LGssVCk7dmFyIEE9d2luZG93LkZsb2F0MzJBcnJheT9uZXcgRmxvYXQzMkFycmF5KHIqbyk6bmV3IEFycmF5KHIqbyk7Zm9yKGQ9MCxnPXIqbztkPGc7ZCsrKUFbZF09bigxLSgoeFtkXS1iW2RdKS92K20pLDAsMSk7cmV0dXJuIEF9O3ZhciBpPTFlMjA7ZnVuY3Rpb24gYSh0LGUscixuLGksYSxzKXtmb3IodmFyIGw9MDtsPGU7bCsrKXtmb3IodmFyIGM9MDtjPHI7YysrKW5bY109dFtjKmUrbF07Zm9yKG8obixpLGEscyxyKSxjPTA7YzxyO2MrKyl0W2MqZStsXT1pW2NdfWZvcihjPTA7YzxyO2MrKyl7Zm9yKGw9MDtsPGU7bCsrKW5bbF09dFtjKmUrbF07Zm9yKG8obixpLGEscyxlKSxsPTA7bDxlO2wrKyl0W2MqZStsXT1NYXRoLnNxcnQoaVtsXSl9fWZ1bmN0aW9uIG8odCxlLHIsbixhKXtyWzBdPTAsblswXT0taSxuWzFdPStpO2Zvcih2YXIgbz0xLHM9MDtvPGE7bysrKXtmb3IodmFyIGw9KHRbb10rbypvLSh0W3Jbc11dK3Jbc10qcltzXSkpLygyKm8tMipyW3NdKTtsPD1uW3NdOylzLS0sbD0odFtvXStvKm8tKHRbcltzXV0rcltzXSpyW3NdKSkvKDIqby0yKnJbc10pO3JbKytzXT1vLG5bc109bCxuW3MrMV09K2l9Zm9yKG89MCxzPTA7bzxhO28rKyl7Zm9yKDtuW3MrMV08bzspcysrO2Vbb109KG8tcltzXSkqKG8tcltzXSkrdFtyW3NdXX19fSx7Y2xhbXA6MTIwfV0sOTk6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGkodCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGEodCxlLHIpe2lmKGEuaXNCTih0KSlyZXR1cm4gdDt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09dCYmKCJsZSIhPT1lJiYiYmUiIT09ZXx8KHI9ZSxlPTEwKSx0aGlzLl9pbml0KHR8fDAsZXx8MTAscnx8ImJlIikpfXZhciBvOyJvYmplY3QiPT10eXBlb2YgZT9lLmV4cG9ydHM9YTpyLkJOPWEsYS5CTj1hLGEud29yZFNpemU9MjY7dHJ5e289dCgiYnVmZmVyIikuQnVmZmVyfWNhdGNoKHQpe31mdW5jdGlvbiBzKHQsZSxyKXtmb3IodmFyIG49MCxpPU1hdGgubWluKHQubGVuZ3RoLHIpLGE9ZTthPGk7YSsrKXt2YXIgbz10LmNoYXJDb2RlQXQoYSktNDg7bjw8PTQsbnw9bz49NDkmJm88PTU0P28tNDkrMTA6bz49MTcmJm88PTIyP28tMTcrMTA6MTUmb31yZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO288YTtvKyspe3ZhciBzPXQuY2hhckNvZGVBdChvKS00ODtpKj1uLGkrPXM+PTQ5P3MtNDkrMTA6cz49MTc/cy0xNysxMDpzfXJldHVybiBpfWEuaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGF8fG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQmJnQuY29uc3RydWN0b3Iud29yZFNpemU9PT1hLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHQud29yZHMpfSxhLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKT4wP3Q6ZX0sYS5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk8MD90OmV9LGEucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodCxlLHIpO2lmKCJvYmplY3QiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTsiaGV4Ij09PWUmJihlPTE2KSxuKGU9PT0oMHxlKSYmZT49MiYmZTw9MzYpO3ZhciBpPTA7Ii0iPT09KHQ9dC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJmkrKywxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpKTp0aGlzLl9wYXJzZUJhc2UodCxlLGkpLCItIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSwibGUiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LGEucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXt0PDAmJih0aGlzLm5lZ2F0aXZlPTEsdD0tdCksdDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdF0sdGhpcy5sZW5ndGg9MSk6dDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihuKHQ8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sYS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBhLG8scz0wO2lmKCJiZSI9PT1yKWZvcihpPXQubGVuZ3RoLTEsYT0wO2k+PTA7aS09MylvPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTYsdGhpcy53b3Jkc1thXXw9bzw8cyY2NzEwODg2Myx0aGlzLndvcmRzW2ErMV09bz4+PjI2LXMmNjcxMDg4NjMsKHMrPTI0KT49MjYmJihzLT0yNixhKyspO2Vsc2UgaWYoImxlIj09PXIpZm9yKGk9MCxhPTA7aTx0Lmxlbmd0aDtpKz0zKW89dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW2FdfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGErKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksYT0wO2ZvcihyPXQubGVuZ3RoLTYsbj0wO3I+PWU7ci09NilpPXModCxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8YSY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1hJjQxOTQzMDMsKGErPTI0KT49MjYmJihhLT0yNixuKyspO3IrNiE9PWUmJihpPXModCxlLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8YSY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1hJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBhPXQubGVuZ3RoLXIsbz1hJW4scz1NYXRoLm1pbihhLGEtbykrcixjPTAsdT1yO3U8czt1Kz1uKWM9bCh0LHUsdStuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXStjPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWM6dGhpcy5faWFkZG4oYyk7aWYoMCE9PW8pe3ZhciBmPTE7Zm9yKGM9bCh0LHUsdC5sZW5ndGgsZSksdT0wO3U8bzt1KyspZio9ZTt0aGlzLmltdWxuKGYpLHRoaXMud29yZHNbMF0rYzw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1jOnRoaXMuX2lhZGRuKGMpfX0sYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sYS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LGEucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sYS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LGEucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIGM9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sdT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxmPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGgodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlO3ZhciBuPXQubGVuZ3RoK2UubGVuZ3RofDA7ci5sZW5ndGg9bixuPW4tMXwwO3ZhciBpPTB8dC53b3Jkc1swXSxhPTB8ZS53b3Jkc1swXSxvPWkqYSxzPTY3MTA4ODYzJm8sbD1vLzY3MTA4ODY0fDA7ci53b3Jkc1swXT1zO2Zvcih2YXIgYz0xO2M8bjtjKyspe2Zvcih2YXIgdT1sPj4+MjYsZj02NzEwODg2MyZsLGg9TWF0aC5taW4oYyxlLmxlbmd0aC0xKSxwPU1hdGgubWF4KDAsYy10Lmxlbmd0aCsxKTtwPD1oO3ArKyl7dmFyIGQ9Yy1wfDA7dSs9KG89KGk9MHx0LndvcmRzW2RdKSooYT0wfGUud29yZHNbcF0pK2YpLzY3MTA4ODY0fDAsZj02NzEwODg2MyZvfXIud29yZHNbY109MHxmLGw9MHx1fXJldHVybiAwIT09bD9yLndvcmRzW2NdPTB8bDpyLmxlbmd0aC0tLHIuc3RyaXAoKX1hLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih0LGUpe3ZhciByO2lmKGU9MHxlfHwxLDE2PT09KHQ9dHx8MTApfHwiaGV4Ij09PXQpe3I9IiI7Zm9yKHZhciBpPTAsYT0wLG89MDtvPHRoaXMubGVuZ3RoO28rKyl7dmFyIHM9dGhpcy53b3Jkc1tvXSxsPSgxNjc3NzIxNSYoczw8aXxhKSkudG9TdHJpbmcoMTYpO3I9MCE9PShhPXM+Pj4yNC1pJjE2Nzc3MjE1KXx8byE9PXRoaXMubGVuZ3RoLTE/Y1s2LWwubGVuZ3RoXStsK3I6bCtyLChpKz0yKT49MjYmJihpLT0yNixvLS0pfWZvcigwIT09YSYmKHI9YS50b1N0cmluZygxNikrcik7ci5sZW5ndGglZSE9MDspcj0iMCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPSItIityKSxyfWlmKHQ9PT0oMHx0KSYmdD49MiYmdDw9MzYpe3ZhciBoPXVbdF0scD1mW3RdO3I9IiI7dmFyIGQ9dGhpcy5jbG9uZSgpO2ZvcihkLm5lZ2F0aXZlPTA7IWQuaXNaZXJvKCk7KXt2YXIgZz1kLm1vZG4ocCkudG9TdHJpbmcodCk7cj0oZD1kLmlkaXZuKHApKS5pc1plcm8oKT9nK3I6Y1toLWcubGVuZ3RoXStnK3J9Zm9yKHRoaXMuaXNaZXJvKCkmJihyPSIwIityKTtyLmxlbmd0aCVlIT0wOylyPSIwIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9Ii0iK3IpLHJ9bighMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxhLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD90Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm4oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy10OnR9LGEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sYS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigidW5kZWZpbmVkIiE9dHlwZW9mIG8pLHRoaXMudG9BcnJheUxpa2Uobyx0LGUpfSxhLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sYS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLGE9cnx8TWF0aC5tYXgoMSxpKTtuKGk8PWEsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxuKGE+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBvLHMsbD0ibGUiPT09ZSxjPW5ldyB0KGEpLHU9dGhpcy5jbG9uZSgpO2lmKGwpe2ZvcihzPTA7IXUuaXNaZXJvKCk7cysrKW89dS5hbmRsbigyNTUpLHUuaXVzaHJuKDgpLGNbc109bztmb3IoO3M8YTtzKyspY1tzXT0wfWVsc2V7Zm9yKHM9MDtzPGEtaTtzKyspY1tzXT0wO2ZvcihzPTA7IXUuaXNaZXJvKCk7cysrKW89dS5hbmRsbigyNTUpLHUuaXVzaHJuKDgpLGNbYS1zLTFdPW99cmV0dXJuIGN9LE1hdGguY2x6MzI/YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LGEucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09KDEmZSkmJnIrKyxyfSxhLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sYS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LGEucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGEucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxhLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sYS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sYS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LGEucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LGEucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LGEucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LGEucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LGEucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LGEucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxhLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxhLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxhLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9MHxNYXRoLmNlaWwodC8yNikscj10JTI2O3RoaXMuX2V4cGFuZChlKSxyPjAmJmUtLTtmb3IodmFyIGk9MDtpPGU7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUubm90bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHQpfSxhLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHQsZSl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl09ZT90aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZSxyLG47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gdC5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkrKDB8bi53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmYTxyLmxlbmd0aDthKyspZT0oMHxyLndvcmRzW2FdKStpLHRoaXMud29yZHNbYV09NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO2E8ci5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09ci53b3Jkc1thXTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LGEucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByLG4saT10aGlzLmNtcCh0KTtpZigwPT09aSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7aT4wPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBhPTAsbz0wO288bi5sZW5ndGg7bysrKWE9KGU9KDB8ci53b3Jkc1tvXSktKDB8bi53b3Jkc1tvXSkrYSk+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmZTtmb3IoOzAhPT1hJiZvPHIubGVuZ3RoO28rKylhPShlPSgwfHIud29yZHNbb10pK2EpPj4yNix0aGlzLndvcmRzW29dPTY3MTA4ODYzJmU7aWYoMD09PWEmJm88ci5sZW5ndGgmJnIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxvKSxyIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfTt2YXIgcD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89dC53b3JkcyxzPWUud29yZHMsbD1yLndvcmRzLGM9MCx1PTB8b1swXSxmPTgxOTEmdSxoPXU+Pj4xMyxwPTB8b1sxXSxkPTgxOTEmcCxnPXA+Pj4xMyxtPTB8b1syXSx2PTgxOTEmbSx5PW0+Pj4xMyx4PTB8b1szXSxiPTgxOTEmeCxfPXg+Pj4xMyx3PTB8b1s0XSxUPTgxOTEmdyxrPXc+Pj4xMyxNPTB8b1s1XSxBPTgxOTEmTSxTPU0+Pj4xMyxFPTB8b1s2XSxDPTgxOTEmRSxMPUU+Pj4xMyxJPTB8b1s3XSxQPTgxOTEmSSx6PUk+Pj4xMyxPPTB8b1s4XSxEPTgxOTEmTyxSPU8+Pj4xMyxGPTB8b1s5XSxCPTgxOTEmRixOPUY+Pj4xMyxqPTB8c1swXSxVPTgxOTEmaixWPWo+Pj4xMyxxPTB8c1sxXSxIPTgxOTEmcSxHPXE+Pj4xMyxZPTB8c1syXSxXPTgxOTEmWSxYPVk+Pj4xMyxaPTB8c1szXSxKPTgxOTEmWixLPVo+Pj4xMyxRPTB8c1s0XSwkPTgxOTEmUSx0dD1RPj4+MTMsZXQ9MHxzWzVdLHJ0PTgxOTEmZXQsbnQ9ZXQ+Pj4xMyxpdD0wfHNbNl0sYXQ9ODE5MSZpdCxvdD1pdD4+PjEzLHN0PTB8c1s3XSxsdD04MTkxJnN0LGN0PXN0Pj4+MTMsdXQ9MHxzWzhdLGZ0PTgxOTEmdXQsaHQ9dXQ+Pj4xMyxwdD0wfHNbOV0sZHQ9ODE5MSZwdCxndD1wdD4+PjEzO3IubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPTE5O3ZhciBtdD0oYysobj1NYXRoLmltdWwoZixVKSl8MCkrKCg4MTkxJihpPShpPU1hdGguaW11bChmLFYpKStNYXRoLmltdWwoaCxVKXwwKSk8PDEzKXwwO2M9KChhPU1hdGguaW11bChoLFYpKSsoaT4+PjEzKXwwKSsobXQ+Pj4yNil8MCxtdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoZCxVKSxpPShpPU1hdGguaW11bChkLFYpKStNYXRoLmltdWwoZyxVKXwwLGE9TWF0aC5pbXVsKGcsVik7dmFyIHZ0PShjKyhuPW4rTWF0aC5pbXVsKGYsSCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsRyl8MCkrTWF0aC5pbXVsKGgsSCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLEcpfDApKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bCh2LFUpLGk9KGk9TWF0aC5pbXVsKHYsVikpK01hdGguaW11bCh5LFUpfDAsYT1NYXRoLmltdWwoeSxWKSxuPW4rTWF0aC5pbXVsKGQsSCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsRyl8MCkrTWF0aC5pbXVsKGcsSCl8MCxhPWErTWF0aC5pbXVsKGcsRyl8MDt2YXIgeXQ9KGMrKG49bitNYXRoLmltdWwoZixXKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixYKXwwKStNYXRoLmltdWwoaCxXKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsWCl8MCkrKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGIsVSksaT0oaT1NYXRoLmltdWwoYixWKSkrTWF0aC5pbXVsKF8sVSl8MCxhPU1hdGguaW11bChfLFYpLG49bitNYXRoLmltdWwodixIKXwwLGk9KGk9aStNYXRoLmltdWwodixHKXwwKStNYXRoLmltdWwoeSxIKXwwLGE9YStNYXRoLmltdWwoeSxHKXwwLG49bitNYXRoLmltdWwoZCxXKXwwLGk9KGk9aStNYXRoLmltdWwoZCxYKXwwKStNYXRoLmltdWwoZyxXKXwwLGE9YStNYXRoLmltdWwoZyxYKXwwO3ZhciB4dD0oYysobj1uK01hdGguaW11bChmLEopfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLEspfDApK01hdGguaW11bChoLEopfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxLKXwwKSsoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVCxVKSxpPShpPU1hdGguaW11bChULFYpKStNYXRoLmltdWwoayxVKXwwLGE9TWF0aC5pbXVsKGssViksbj1uK01hdGguaW11bChiLEgpfDAsaT0oaT1pK01hdGguaW11bChiLEcpfDApK01hdGguaW11bChfLEgpfDAsYT1hK01hdGguaW11bChfLEcpfDAsbj1uK01hdGguaW11bCh2LFcpfDAsaT0oaT1pK01hdGguaW11bCh2LFgpfDApK01hdGguaW11bCh5LFcpfDAsYT1hK01hdGguaW11bCh5LFgpfDAsbj1uK01hdGguaW11bChkLEopfDAsaT0oaT1pK01hdGguaW11bChkLEspfDApK01hdGguaW11bChnLEopfDAsYT1hK01hdGguaW11bChnLEspfDA7dmFyIGJ0PShjKyhuPW4rTWF0aC5pbXVsKGYsJCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsdHQpfDApK01hdGguaW11bChoLCQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCx0dCl8MCkrKGk+Pj4xMyl8MCkrKGJ0Pj4+MjYpfDAsYnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEEsVSksaT0oaT1NYXRoLmltdWwoQSxWKSkrTWF0aC5pbXVsKFMsVSl8MCxhPU1hdGguaW11bChTLFYpLG49bitNYXRoLmltdWwoVCxIKXwwLGk9KGk9aStNYXRoLmltdWwoVCxHKXwwKStNYXRoLmltdWwoayxIKXwwLGE9YStNYXRoLmltdWwoayxHKXwwLG49bitNYXRoLmltdWwoYixXKXwwLGk9KGk9aStNYXRoLmltdWwoYixYKXwwKStNYXRoLmltdWwoXyxXKXwwLGE9YStNYXRoLmltdWwoXyxYKXwwLG49bitNYXRoLmltdWwodixKKXwwLGk9KGk9aStNYXRoLmltdWwodixLKXwwKStNYXRoLmltdWwoeSxKKXwwLGE9YStNYXRoLmltdWwoeSxLKXwwLG49bitNYXRoLmltdWwoZCwkKXwwLGk9KGk9aStNYXRoLmltdWwoZCx0dCl8MCkrTWF0aC5pbXVsKGcsJCl8MCxhPWErTWF0aC5pbXVsKGcsdHQpfDA7dmFyIF90PShjKyhuPW4rTWF0aC5pbXVsKGYscnQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLG50KXwwKStNYXRoLmltdWwoaCxydCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLG50KXwwKSsoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQyxVKSxpPShpPU1hdGguaW11bChDLFYpKStNYXRoLmltdWwoTCxVKXwwLGE9TWF0aC5pbXVsKEwsViksbj1uK01hdGguaW11bChBLEgpfDAsaT0oaT1pK01hdGguaW11bChBLEcpfDApK01hdGguaW11bChTLEgpfDAsYT1hK01hdGguaW11bChTLEcpfDAsbj1uK01hdGguaW11bChULFcpfDAsaT0oaT1pK01hdGguaW11bChULFgpfDApK01hdGguaW11bChrLFcpfDAsYT1hK01hdGguaW11bChrLFgpfDAsbj1uK01hdGguaW11bChiLEopfDAsaT0oaT1pK01hdGguaW11bChiLEspfDApK01hdGguaW11bChfLEopfDAsYT1hK01hdGguaW11bChfLEspfDAsbj1uK01hdGguaW11bCh2LCQpfDAsaT0oaT1pK01hdGguaW11bCh2LHR0KXwwKStNYXRoLmltdWwoeSwkKXwwLGE9YStNYXRoLmltdWwoeSx0dCl8MCxuPW4rTWF0aC5pbXVsKGQscnQpfDAsaT0oaT1pK01hdGguaW11bChkLG50KXwwKStNYXRoLmltdWwoZyxydCl8MCxhPWErTWF0aC5pbXVsKGcsbnQpfDA7dmFyIHd0PShjKyhuPW4rTWF0aC5pbXVsKGYsYXQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLG90KXwwKStNYXRoLmltdWwoaCxhdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLG90KXwwKSsoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUCxVKSxpPShpPU1hdGguaW11bChQLFYpKStNYXRoLmltdWwoeixVKXwwLGE9TWF0aC5pbXVsKHosViksbj1uK01hdGguaW11bChDLEgpfDAsaT0oaT1pK01hdGguaW11bChDLEcpfDApK01hdGguaW11bChMLEgpfDAsYT1hK01hdGguaW11bChMLEcpfDAsbj1uK01hdGguaW11bChBLFcpfDAsaT0oaT1pK01hdGguaW11bChBLFgpfDApK01hdGguaW11bChTLFcpfDAsYT1hK01hdGguaW11bChTLFgpfDAsbj1uK01hdGguaW11bChULEopfDAsaT0oaT1pK01hdGguaW11bChULEspfDApK01hdGguaW11bChrLEopfDAsYT1hK01hdGguaW11bChrLEspfDAsbj1uK01hdGguaW11bChiLCQpfDAsaT0oaT1pK01hdGguaW11bChiLHR0KXwwKStNYXRoLmltdWwoXywkKXwwLGE9YStNYXRoLmltdWwoXyx0dCl8MCxuPW4rTWF0aC5pbXVsKHYscnQpfDAsaT0oaT1pK01hdGguaW11bCh2LG50KXwwKStNYXRoLmltdWwoeSxydCl8MCxhPWErTWF0aC5pbXVsKHksbnQpfDAsbj1uK01hdGguaW11bChkLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxvdCl8MCkrTWF0aC5pbXVsKGcsYXQpfDAsYT1hK01hdGguaW11bChnLG90KXwwO3ZhciBUdD0oYysobj1uK01hdGguaW11bChmLGx0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixjdCl8MCkrTWF0aC5pbXVsKGgsbHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxjdCl8MCkrKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEQsVSksaT0oaT1NYXRoLmltdWwoRCxWKSkrTWF0aC5pbXVsKFIsVSl8MCxhPU1hdGguaW11bChSLFYpLG49bitNYXRoLmltdWwoUCxIKXwwLGk9KGk9aStNYXRoLmltdWwoUCxHKXwwKStNYXRoLmltdWwoeixIKXwwLGE9YStNYXRoLmltdWwoeixHKXwwLG49bitNYXRoLmltdWwoQyxXKXwwLGk9KGk9aStNYXRoLmltdWwoQyxYKXwwKStNYXRoLmltdWwoTCxXKXwwLGE9YStNYXRoLmltdWwoTCxYKXwwLG49bitNYXRoLmltdWwoQSxKKXwwLGk9KGk9aStNYXRoLmltdWwoQSxLKXwwKStNYXRoLmltdWwoUyxKKXwwLGE9YStNYXRoLmltdWwoUyxLKXwwLG49bitNYXRoLmltdWwoVCwkKXwwLGk9KGk9aStNYXRoLmltdWwoVCx0dCl8MCkrTWF0aC5pbXVsKGssJCl8MCxhPWErTWF0aC5pbXVsKGssdHQpfDAsbj1uK01hdGguaW11bChiLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoYixudCl8MCkrTWF0aC5pbXVsKF8scnQpfDAsYT1hK01hdGguaW11bChfLG50KXwwLG49bitNYXRoLmltdWwodixhdCl8MCxpPShpPWkrTWF0aC5pbXVsKHYsb3QpfDApK01hdGguaW11bCh5LGF0KXwwLGE9YStNYXRoLmltdWwoeSxvdCl8MCxuPW4rTWF0aC5pbXVsKGQsbHQpfDAsaT0oaT1pK01hdGguaW11bChkLGN0KXwwKStNYXRoLmltdWwoZyxsdCl8MCxhPWErTWF0aC5pbXVsKGcsY3QpfDA7dmFyIGt0PShjKyhuPW4rTWF0aC5pbXVsKGYsZnQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLGh0KXwwKStNYXRoLmltdWwoaCxmdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLGh0KXwwKSsoaT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixVKSxpPShpPU1hdGguaW11bChCLFYpKStNYXRoLmltdWwoTixVKXwwLGE9TWF0aC5pbXVsKE4sViksbj1uK01hdGguaW11bChELEgpfDAsaT0oaT1pK01hdGguaW11bChELEcpfDApK01hdGguaW11bChSLEgpfDAsYT1hK01hdGguaW11bChSLEcpfDAsbj1uK01hdGguaW11bChQLFcpfDAsaT0oaT1pK01hdGguaW11bChQLFgpfDApK01hdGguaW11bCh6LFcpfDAsYT1hK01hdGguaW11bCh6LFgpfDAsbj1uK01hdGguaW11bChDLEopfDAsaT0oaT1pK01hdGguaW11bChDLEspfDApK01hdGguaW11bChMLEopfDAsYT1hK01hdGguaW11bChMLEspfDAsbj1uK01hdGguaW11bChBLCQpfDAsaT0oaT1pK01hdGguaW11bChBLHR0KXwwKStNYXRoLmltdWwoUywkKXwwLGE9YStNYXRoLmltdWwoUyx0dCl8MCxuPW4rTWF0aC5pbXVsKFQscnQpfDAsaT0oaT1pK01hdGguaW11bChULG50KXwwKStNYXRoLmltdWwoayxydCl8MCxhPWErTWF0aC5pbXVsKGssbnQpfDAsbj1uK01hdGguaW11bChiLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoYixvdCl8MCkrTWF0aC5pbXVsKF8sYXQpfDAsYT1hK01hdGguaW11bChfLG90KXwwLG49bitNYXRoLmltdWwodixsdCl8MCxpPShpPWkrTWF0aC5pbXVsKHYsY3QpfDApK01hdGguaW11bCh5LGx0KXwwLGE9YStNYXRoLmltdWwoeSxjdCl8MCxuPW4rTWF0aC5pbXVsKGQsZnQpfDAsaT0oaT1pK01hdGguaW11bChkLGh0KXwwKStNYXRoLmltdWwoZyxmdCl8MCxhPWErTWF0aC5pbXVsKGcsaHQpfDA7dmFyIE10PShjKyhuPW4rTWF0aC5pbXVsKGYsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLGd0KXwwKStNYXRoLmltdWwoaCxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLGd0KXwwKSsoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixIKSxpPShpPU1hdGguaW11bChCLEcpKStNYXRoLmltdWwoTixIKXwwLGE9TWF0aC5pbXVsKE4sRyksbj1uK01hdGguaW11bChELFcpfDAsaT0oaT1pK01hdGguaW11bChELFgpfDApK01hdGguaW11bChSLFcpfDAsYT1hK01hdGguaW11bChSLFgpfDAsbj1uK01hdGguaW11bChQLEopfDAsaT0oaT1pK01hdGguaW11bChQLEspfDApK01hdGguaW11bCh6LEopfDAsYT1hK01hdGguaW11bCh6LEspfDAsbj1uK01hdGguaW11bChDLCQpfDAsaT0oaT1pK01hdGguaW11bChDLHR0KXwwKStNYXRoLmltdWwoTCwkKXwwLGE9YStNYXRoLmltdWwoTCx0dCl8MCxuPW4rTWF0aC5pbXVsKEEscnQpfDAsaT0oaT1pK01hdGguaW11bChBLG50KXwwKStNYXRoLmltdWwoUyxydCl8MCxhPWErTWF0aC5pbXVsKFMsbnQpfDAsbj1uK01hdGguaW11bChULGF0KXwwLGk9KGk9aStNYXRoLmltdWwoVCxvdCl8MCkrTWF0aC5pbXVsKGssYXQpfDAsYT1hK01hdGguaW11bChrLG90KXwwLG49bitNYXRoLmltdWwoYixsdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsY3QpfDApK01hdGguaW11bChfLGx0KXwwLGE9YStNYXRoLmltdWwoXyxjdCl8MCxuPW4rTWF0aC5pbXVsKHYsZnQpfDAsaT0oaT1pK01hdGguaW11bCh2LGh0KXwwKStNYXRoLmltdWwoeSxmdCl8MCxhPWErTWF0aC5pbXVsKHksaHQpfDA7dmFyIEF0PShjKyhuPW4rTWF0aC5pbXVsKGQsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChkLGd0KXwwKStNYXRoLmltdWwoZyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChnLGd0KXwwKSsoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixXKSxpPShpPU1hdGguaW11bChCLFgpKStNYXRoLmltdWwoTixXKXwwLGE9TWF0aC5pbXVsKE4sWCksbj1uK01hdGguaW11bChELEopfDAsaT0oaT1pK01hdGguaW11bChELEspfDApK01hdGguaW11bChSLEopfDAsYT1hK01hdGguaW11bChSLEspfDAsbj1uK01hdGguaW11bChQLCQpfDAsaT0oaT1pK01hdGguaW11bChQLHR0KXwwKStNYXRoLmltdWwoeiwkKXwwLGE9YStNYXRoLmltdWwoeix0dCl8MCxuPW4rTWF0aC5pbXVsKEMscnQpfDAsaT0oaT1pK01hdGguaW11bChDLG50KXwwKStNYXRoLmltdWwoTCxydCl8MCxhPWErTWF0aC5pbXVsKEwsbnQpfDAsbj1uK01hdGguaW11bChBLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoQSxvdCl8MCkrTWF0aC5pbXVsKFMsYXQpfDAsYT1hK01hdGguaW11bChTLG90KXwwLG49bitNYXRoLmltdWwoVCxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKFQsY3QpfDApK01hdGguaW11bChrLGx0KXwwLGE9YStNYXRoLmltdWwoayxjdCl8MCxuPW4rTWF0aC5pbXVsKGIsZnQpfDAsaT0oaT1pK01hdGguaW11bChiLGh0KXwwKStNYXRoLmltdWwoXyxmdCl8MCxhPWErTWF0aC5pbXVsKF8saHQpfDA7dmFyIFN0PShjKyhuPW4rTWF0aC5pbXVsKHYsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bCh2LGd0KXwwKStNYXRoLmltdWwoeSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bCh5LGd0KXwwKSsoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixKKSxpPShpPU1hdGguaW11bChCLEspKStNYXRoLmltdWwoTixKKXwwLGE9TWF0aC5pbXVsKE4sSyksbj1uK01hdGguaW11bChELCQpfDAsaT0oaT1pK01hdGguaW11bChELHR0KXwwKStNYXRoLmltdWwoUiwkKXwwLGE9YStNYXRoLmltdWwoUix0dCl8MCxuPW4rTWF0aC5pbXVsKFAscnQpfDAsaT0oaT1pK01hdGguaW11bChQLG50KXwwKStNYXRoLmltdWwoeixydCl8MCxhPWErTWF0aC5pbXVsKHosbnQpfDAsbj1uK01hdGguaW11bChDLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoQyxvdCl8MCkrTWF0aC5pbXVsKEwsYXQpfDAsYT1hK01hdGguaW11bChMLG90KXwwLG49bitNYXRoLmltdWwoQSxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKEEsY3QpfDApK01hdGguaW11bChTLGx0KXwwLGE9YStNYXRoLmltdWwoUyxjdCl8MCxuPW4rTWF0aC5pbXVsKFQsZnQpfDAsaT0oaT1pK01hdGguaW11bChULGh0KXwwKStNYXRoLmltdWwoayxmdCl8MCxhPWErTWF0aC5pbXVsKGssaHQpfDA7dmFyIEV0PShjKyhuPW4rTWF0aC5pbXVsKGIsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChiLGd0KXwwKStNYXRoLmltdWwoXyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChfLGd0KXwwKSsoaT4+PjEzKXwwKSsoRXQ+Pj4yNil8MCxFdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQiwkKSxpPShpPU1hdGguaW11bChCLHR0KSkrTWF0aC5pbXVsKE4sJCl8MCxhPU1hdGguaW11bChOLHR0KSxuPW4rTWF0aC5pbXVsKEQscnQpfDAsaT0oaT1pK01hdGguaW11bChELG50KXwwKStNYXRoLmltdWwoUixydCl8MCxhPWErTWF0aC5pbXVsKFIsbnQpfDAsbj1uK01hdGguaW11bChQLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoUCxvdCl8MCkrTWF0aC5pbXVsKHosYXQpfDAsYT1hK01hdGguaW11bCh6LG90KXwwLG49bitNYXRoLmltdWwoQyxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsY3QpfDApK01hdGguaW11bChMLGx0KXwwLGE9YStNYXRoLmltdWwoTCxjdCl8MCxuPW4rTWF0aC5pbXVsKEEsZnQpfDAsaT0oaT1pK01hdGguaW11bChBLGh0KXwwKStNYXRoLmltdWwoUyxmdCl8MCxhPWErTWF0aC5pbXVsKFMsaHQpfDA7dmFyIEN0PShjKyhuPW4rTWF0aC5pbXVsKFQsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChULGd0KXwwKStNYXRoLmltdWwoayxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChrLGd0KXwwKSsoaT4+PjEzKXwwKSsoQ3Q+Pj4yNil8MCxDdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixydCksaT0oaT1NYXRoLmltdWwoQixudCkpK01hdGguaW11bChOLHJ0KXwwLGE9TWF0aC5pbXVsKE4sbnQpLG49bitNYXRoLmltdWwoRCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKEQsb3QpfDApK01hdGguaW11bChSLGF0KXwwLGE9YStNYXRoLmltdWwoUixvdCl8MCxuPW4rTWF0aC5pbXVsKFAsbHQpfDAsaT0oaT1pK01hdGguaW11bChQLGN0KXwwKStNYXRoLmltdWwoeixsdCl8MCxhPWErTWF0aC5pbXVsKHosY3QpfDAsbj1uK01hdGguaW11bChDLGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoQyxodCl8MCkrTWF0aC5pbXVsKEwsZnQpfDAsYT1hK01hdGguaW11bChMLGh0KXwwO3ZhciBMdD0oYysobj1uK01hdGguaW11bChBLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoQSxndCl8MCkrTWF0aC5pbXVsKFMsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoUyxndCl8MCkrKGk+Pj4xMyl8MCkrKEx0Pj4+MjYpfDAsTHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsYXQpLGk9KGk9TWF0aC5pbXVsKEIsb3QpKStNYXRoLmltdWwoTixhdCl8MCxhPU1hdGguaW11bChOLG90KSxuPW4rTWF0aC5pbXVsKEQsbHQpfDAsaT0oaT1pK01hdGguaW11bChELGN0KXwwKStNYXRoLmltdWwoUixsdCl8MCxhPWErTWF0aC5pbXVsKFIsY3QpfDAsbj1uK01hdGguaW11bChQLGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoUCxodCl8MCkrTWF0aC5pbXVsKHosZnQpfDAsYT1hK01hdGguaW11bCh6LGh0KXwwO3ZhciBJdD0oYysobj1uK01hdGguaW11bChDLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoQyxndCl8MCkrTWF0aC5pbXVsKEwsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoTCxndCl8MCkrKGk+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsbHQpLGk9KGk9TWF0aC5pbXVsKEIsY3QpKStNYXRoLmltdWwoTixsdCl8MCxhPU1hdGguaW11bChOLGN0KSxuPW4rTWF0aC5pbXVsKEQsZnQpfDAsaT0oaT1pK01hdGguaW11bChELGh0KXwwKStNYXRoLmltdWwoUixmdCl8MCxhPWErTWF0aC5pbXVsKFIsaHQpfDA7dmFyIFB0PShjKyhuPW4rTWF0aC5pbXVsKFAsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChQLGd0KXwwKStNYXRoLmltdWwoeixkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bCh6LGd0KXwwKSsoaT4+PjEzKXwwKSsoUHQ+Pj4yNil8MCxQdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixmdCksaT0oaT1NYXRoLmltdWwoQixodCkpK01hdGguaW11bChOLGZ0KXwwLGE9TWF0aC5pbXVsKE4saHQpO3ZhciB6dD0oYysobj1uK01hdGguaW11bChELGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoRCxndCl8MCkrTWF0aC5pbXVsKFIsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoUixndCl8MCkrKGk+Pj4xMyl8MCkrKHp0Pj4+MjYpfDAsenQmPTY3MTA4ODYzO3ZhciBPdD0oYysobj1NYXRoLmltdWwoQixkdCkpfDApKygoODE5MSYoaT0oaT1NYXRoLmltdWwoQixndCkpK01hdGguaW11bChOLGR0KXwwKSk8PDEzKXwwO3JldHVybiBjPSgoYT1NYXRoLmltdWwoTixndCkpKyhpPj4+MTMpfDApKyhPdD4+PjI2KXwwLE90Jj02NzEwODg2MyxsWzBdPW10LGxbMV09dnQsbFsyXT15dCxsWzNdPXh0LGxbNF09YnQsbFs1XT1fdCxsWzZdPXd0LGxbN109VHQsbFs4XT1rdCxsWzldPU10LGxbMTBdPUF0LGxbMTFdPVN0LGxbMTJdPUV0LGxbMTNdPUN0LGxbMTRdPUx0LGxbMTVdPUl0LGxbMTZdPVB0LGxbMTddPXp0LGxbMThdPU90LDAhPT1jJiYobFsxOV09YyxyLmxlbmd0aCsrKSxyfTtmdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4obmV3IGcpLm11bHAodCxlLHIpfWZ1bmN0aW9uIGcodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1NYXRoLmltdWx8fChwPWgpLGEucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/cCh0aGlzLHQsZSk6cjw2Mz9oKHRoaXMsdCxlKTpyPDEwMjQ/ZnVuY3Rpb24odCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoO2Zvcih2YXIgbj0wLGk9MCxhPTA7YTxyLmxlbmd0aC0xO2ErKyl7dmFyIG89aTtpPTA7Zm9yKHZhciBzPTY3MTA4ODYzJm4sbD1NYXRoLm1pbihhLGUubGVuZ3RoLTEpLGM9TWF0aC5tYXgoMCxhLXQubGVuZ3RoKzEpO2M8PWw7YysrKXt2YXIgdT1hLWMsZj0oMHx0LndvcmRzW3VdKSooMHxlLndvcmRzW2NdKSxoPTY3MTA4ODYzJmY7cz02NzEwODg2MyYoaD1oK3N8MCksaSs9KG89KG89bysoZi82NzEwODg2NHwwKXwwKSsoaD4+PjI2KXwwKT4+PjI2LG8mPTY3MTA4ODYzfXIud29yZHNbYV09cyxuPW8sbz1pfXJldHVybiAwIT09bj9yLndvcmRzW2FdPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9KHRoaXMsdCxlKTpkKHRoaXMsdCxlKX0sZy5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9YS5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxnLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sZy5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxhO28rKyluW29dPWVbdFtvXV0saVtvXT1yW3Rbb11dfSxnLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMucGVybXV0ZShhLHQsZSxyLG4saSk7Zm9yKHZhciBvPTE7bzxpO288PD0xKWZvcih2YXIgcz1vPDwxLGw9TWF0aC5jb3MoMipNYXRoLlBJL3MpLGM9TWF0aC5zaW4oMipNYXRoLlBJL3MpLHU9MDt1PGk7dSs9cylmb3IodmFyIGY9bCxoPWMscD0wO3A8bztwKyspe3ZhciBkPXJbdStwXSxnPW5bdStwXSxtPXJbdStwK29dLHY9blt1K3Arb10seT1mKm0taCp2O3Y9Zip2K2gqbSxtPXksclt1K3BdPWQrbSxuW3UrcF09Zyt2LHJbdStwK29dPWQtbSxuW3UrcCtvXT1nLXYscCE9PXMmJih5PWwqZi1jKmgsaD1sKmgrYypmLGY9eSl9fSxnLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZy5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZy5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZy5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIGE9MCxvPTA7bzxlO28rKylhKz0wfHRbb10sclsyKm9dPTgxOTEmYSxhPj4+PTEzLHJbMipvKzFdPTgxOTEmYSxhPj4+PTEzO2ZvcihvPTIqZTtvPGk7KytvKXJbb109MDtuKDA9PT1hKSxuKDA9PSgtODE5MiZhKSl9LGcucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPTA7cmV0dXJuIGV9LGcucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdGhpcy5ndWVzc0xlbjEzYih0Lmxlbmd0aCxlLmxlbmd0aCksaT10aGlzLm1ha2VSQlQobiksYT10aGlzLnN0dWIobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD1uZXcgQXJyYXkobiksYz1uZXcgQXJyYXkobiksdT1uZXcgQXJyYXkobiksZj1uZXcgQXJyYXkobiksaD1yLndvcmRzO2gubGVuZ3RoPW4sdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsbyxuKSx0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCxjLG4pLHRoaXMudHJhbnNmb3JtKG8sYSxzLGwsbixpKSx0aGlzLnRyYW5zZm9ybShjLGEsdSxmLG4saSk7Zm9yKHZhciBwPTA7cDxuO3ArKyl7dmFyIGQ9c1twXSp1W3BdLWxbcF0qZltwXTtsW3BdPXNbcF0qZltwXStsW3BdKnVbcF0sc1twXT1kfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShzLGwsbiksdGhpcy50cmFuc2Zvcm0ocyxsLGgsYSxuLGkpLHRoaXMuY29uanVnYXRlKGgsYSxuKSx0aGlzLm5vcm1hbGl6ZTEzYihoLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sYS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxhLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksZCh0aGlzLHQsZSl9LGEucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxhLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsYT0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9YT4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmYX1yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sYS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxhLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGEucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGEucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX0odCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgYSgxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxhLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlLHI9dCUyNixpPSh0LXIpLzI2LGE9NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgbz0wO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciBzPXRoaXMud29yZHNbZV0mYSxsPSgwfHRoaXMud29yZHNbZV0pLXM8PHI7dGhpcy53b3Jkc1tlXT1sfG8sbz1zPj4+MjYtcn1vJiYodGhpcy53b3Jkc1tlXT1vLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IoZT10aGlzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMud29yZHNbZStpXT10aGlzLndvcmRzW2VdO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLndvcmRzW2VdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHQpfSxhLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odCxlLHIpe3ZhciBpO24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKSxpPWU/KGUtZSUyNikvMjY6MDt2YXIgYT10JTI2LG89TWF0aC5taW4oKHQtYSkvMjYsdGhpcy5sZW5ndGgpLHM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5hPDxhLGw9cjtpZihpLT1vLGk9TWF0aC5tYXgoMCxpKSxsKXtmb3IodmFyIGM9MDtjPG87YysrKWwud29yZHNbY109dGhpcy53b3Jkc1tjXTtsLmxlbmd0aD1vfWlmKDA9PT1vKTtlbHNlIGlmKHRoaXMubGVuZ3RoPm8pZm9yKHRoaXMubGVuZ3RoLT1vLGM9MDtjPHRoaXMubGVuZ3RoO2MrKyl0aGlzLndvcmRzW2NdPXRoaXMud29yZHNbYytvXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB1PTA7Zm9yKGM9dGhpcy5sZW5ndGgtMTtjPj0wJiYoMCE9PXV8fGM+PWkpO2MtLSl7dmFyIGY9MHx0aGlzLndvcmRzW2NdO3RoaXMud29yZHNbY109dTw8MjYtYXxmPj4+YSx1PWYmc31yZXR1cm4gbCYmMCE9PXUmJihsLndvcmRzW2wubGVuZ3RoKytdPXUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odCxlLHIpfSxhLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odCl9LGEucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHQpfSxhLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odCl9LGEucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHQpfSxhLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtyZXR1cm4hKHRoaXMubGVuZ3RoPD1yKSYmISEodGhpcy53b3Jkc1tyXSZpKX0sYS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LGEucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKCJudW1iZXIiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDA/dGhpcy5pc3VibigtdCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTx0Pyh0aGlzLndvcmRzWzBdPXQtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4odCl9LGEucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih0KXt0aGlzLndvcmRzWzBdKz10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV0+PTY3MTA4ODY0O2UrKyl0aGlzLndvcmRzW2VdLT02NzEwODg2NCxlPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2UrMV09MTp0aGlzLndvcmRzW2UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZSsxKSx0aGlzfSxhLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih0KXtpZihuKCJudW1iZXIiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDApcmV0dXJuIHRoaXMuaWFkZG4oLXQpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT10LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXTwwO2UrKyl0aGlzLndvcmRzW2VdKz02NzEwODg2NCx0aGlzLndvcmRzW2UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHQpfSxhLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odCl9LGEucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGEucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxhLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbz10Lmxlbmd0aCtyO3RoaXMuX2V4cGFuZChvKTt2YXIgcz0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2E9KDB8dGhpcy53b3Jkc1tpK3JdKStzO3ZhciBsPSgwfHQud29yZHNbaV0pKmU7cz0oKGEtPTY3MTA4ODYzJmwpPj4yNiktKGwvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmF9Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKXM9KGE9KDB8dGhpcy53b3Jkc1tpK3JdKStzKT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmE7aWYoMD09PXMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobigtMT09PXMpLHM9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspcz0oYT0tKDB8dGhpcy53b3Jkc1tpXSkrcyk+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmYTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odCxlKXt2YXIgcj0odGhpcy5sZW5ndGgsdC5sZW5ndGgpLG49dGhpcy5jbG9uZSgpLGk9dCxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXTswIT09KHI9MjYtdGhpcy5fY291bnRCaXRzKG8pKSYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsbD1uLmxlbmd0aC1pLmxlbmd0aDtpZigibW9kIiE9PWUpeyhzPW5ldyBhKG51bGwpKS5sZW5ndGg9bCsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2MrKylzLndvcmRzW2NdPTB9dmFyIHU9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsbCk7MD09PXUubmVnYXRpdmUmJihuPXUscyYmKHMud29yZHNbbF09MSkpO2Zvcih2YXIgZj1sLTE7Zj49MDtmLS0pe3ZhciBoPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgrZl0pKygwfG4ud29yZHNbaS5sZW5ndGgrZi0xXSk7Zm9yKGg9TWF0aC5taW4oaC9vfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksaCxmKTswIT09bi5uZWdhdGl2ZTspaC0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsZiksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2ZdPWgpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLCJkaXYiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LGEucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgYSgwKSxtb2Q6bmV3IGEoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8ocz10aGlzLm5lZygpLmRpdm1vZCh0LGUpLCJtb2QiIT09ZSYmKGk9cy5kaXYubmVnKCkpLCJkaXYiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaWFkZCh0KSkse2RpdjppLG1vZDpvfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhzPXRoaXMuZGl2bW9kKHQubmVnKCksZSksIm1vZCIhPT1lJiYoaT1zLmRpdi5uZWcoKSkse2RpdjppLG1vZDpzLm1vZH0pOjAhPSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhzPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksImRpdiIhPT1lJiYobz1zLm1vZC5uZWcoKSxyJiYwIT09by5uZWdhdGl2ZSYmby5pc3ViKHQpKSx7ZGl2OnMuZGl2LG1vZDpvfSk6dC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHQpPDA/e2RpdjpuZXcgYSgwKSxtb2Q6dGhpc306MT09PXQubGVuZ3RoPyJkaXYiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IGEodGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBhKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKTt2YXIgaSxvLHN9LGEucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwiZGl2IiwhMSkuZGl2fSxhLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsIm1vZCIsITEpLm1vZH0sYS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwibW9kIiwhMCkubW9kfSxhLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxhPXIuY21wKG4pO3JldHVybiBhPDB8fDE9PT1pJiYwPT09YT9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LGEucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sYS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxhLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgYSgxKSxvPW5ldyBhKDApLHM9bmV3IGEoMCksbD1uZXcgYSgxKSxjPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKytjO2Zvcih2YXIgdT1yLmNsb25lKCksZj1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGg9MCxwPTE7MD09KGUud29yZHNbMF0mcCkmJmg8MjY7KytoLHA8PD0xKTtpZihoPjApZm9yKGUuaXVzaHJuKGgpO2gtLSA+MDspKGkuaXNPZGQoKXx8by5pc09kZCgpKSYmKGkuaWFkZCh1KSxvLmlzdWIoZikpLGkuaXVzaHJuKDEpLG8uaXVzaHJuKDEpO2Zvcih2YXIgZD0wLGc9MTswPT0oci53b3Jkc1swXSZnKSYmZDwyNjsrK2QsZzw8PTEpO2lmKGQ+MClmb3Ioci5pdXNocm4oZCk7ZC0tID4wOykocy5pc09kZCgpfHxsLmlzT2RkKCkpJiYocy5pYWRkKHUpLGwuaXN1YihmKSkscy5pdXNocm4oMSksbC5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIocyksby5pc3ViKGwpKTooci5pc3ViKGUpLHMuaXN1YihpKSxsLmlzdWIobykpfXJldHVybnthOnMsYjpsLGdjZDpyLml1c2hsbihjKX19LGEucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGksbz1uZXcgYSgxKSxzPW5ldyBhKDApLGw9ci5jbG9uZSgpO2UuY21wbigxKT4wJiZyLmNtcG4oMSk+MDspe2Zvcih2YXIgYz0wLHU9MTswPT0oZS53b3Jkc1swXSZ1KSYmYzwyNjsrK2MsdTw8PTEpO2lmKGM+MClmb3IoZS5pdXNocm4oYyk7Yy0tID4wOylvLmlzT2RkKCkmJm8uaWFkZChsKSxvLml1c2hybigxKTtmb3IodmFyIGY9MCxoPTE7MD09KHIud29yZHNbMF0maCkmJmY8MjY7KytmLGg8PD0xKTtpZihmPjApZm9yKHIuaXVzaHJuKGYpO2YtLSA+MDspcy5pc09kZCgpJiZzLmlhZGQobCkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxvLmlzdWIocykpOihyLmlzdWIoZSkscy5pc3ViKG8pKX1yZXR1cm4oaT0wPT09ZS5jbXBuKDEpP286cykuY21wbigwKTwwJiZpLmlhZGQodCksaX0sYS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHQuYWJzKCk7aWYodC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZT10aGlzLmNsb25lKCkscj10LmNsb25lKCk7ZS5uZWdhdGl2ZT0wLHIubmVnYXRpdmU9MDtmb3IodmFyIG49MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpO24rKyllLml1c2hybigxKSxyLml1c2hybigxKTtmb3IoOzspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pdXNocm4oMSk7Zm9yKDtyLmlzRXZlbigpOylyLml1c2hybigxKTt2YXIgaT1lLmNtcChyKTtpZihpPDApe3ZhciBhPWU7ZT1yLHI9YX1lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pdXNobG4obil9LGEucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWdjZCh0KS5hLnVtb2QodCl9LGEucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sYS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LGEucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LGEucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBhPWksbz1yOzAhPT1hJiZvPHRoaXMubGVuZ3RoO28rKyl7dmFyIHM9MHx0aGlzLndvcmRzW29dO2E9KHMrPWEpPj4+MjYscyY9NjcxMDg4NjMsdGhpcy53b3Jkc1tvXT1zfXJldHVybiAwIT09YSYmKHRoaXMud29yZHNbb109YSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxhLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sYS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZSxyPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpZT0xO2Vsc2V7ciYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO2U9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxhLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LGEucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sYS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxhLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxhLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sYS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sYS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxhLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHcodCl9LGEucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG4oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sYS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LGEucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGEucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sYS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGEucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIG09e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB2KHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5wPW5ldyBhKGUsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBhKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB5KCl7di5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIHgoKXt2LmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gYigpe3YuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBfKCl7di5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHcodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT1hLl9wcmltZSh0KTt0aGlzLm09ZS5wLHRoaXMucHJpbWU9ZX1lbHNlIG4odC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBUKHQpe3cuY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IGEoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9di5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB0PW5ldyBhKG51bGwpO3JldHVybiB0LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdH0sdi5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQ7ZG97dGhpcy5zcGxpdChyLHRoaXMudG1wKSxlPShyPShyPXRoaXMuaW11bEsocikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShlPnRoaXMubik7dmFyIG49ZTx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1uPyhyLndvcmRzWzBdPTAsci5sZW5ndGg9MSk6bj4wP3IuaXN1Yih0aGlzLnApOnIuc3RyaXAoKSxyfSx2LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe3QuaXVzaHJuKHRoaXMubiwwLGUpfSx2LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbXVsKHRoaXMuayl9LGkoeSx2KSx5LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCw5KSxuPTA7bjxyO24rKyllLndvcmRzW25dPXQud29yZHNbbl07aWYoZS5sZW5ndGg9cix0Lmxlbmd0aDw9OSlyZXR1cm4gdC53b3Jkc1swXT0wLHZvaWQodC5sZW5ndGg9MSk7dmFyIGk9dC53b3Jkc1s5XTtmb3IoZS53b3Jkc1tlLmxlbmd0aCsrXT00MTk0MzAzJmksbj0xMDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9MHx0LndvcmRzW25dO3Qud29yZHNbbi0xMF09KDQxOTQzMDMmYSk8PDR8aT4+PjIyLGk9YX1pPj4+PTIyLHQud29yZHNbbi0xMF09aSwwPT09aSYmdC5sZW5ndGg+MTA/dC5sZW5ndGgtPTEwOnQubGVuZ3RoLT05fSx5LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXt0LndvcmRzW3QubGVuZ3RoXT0wLHQud29yZHNbdC5sZW5ndGgrMV09MCx0Lmxlbmd0aCs9Mjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTB8dC53b3Jkc1tyXTtlKz05Nzcqbix0LndvcmRzW3JdPTY3MTA4ODYzJmUsZT02NCpuKyhlLzY3MTA4ODY0fDApfXJldHVybiAwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmKHQubGVuZ3RoLS0sMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJnQubGVuZ3RoLS0pLHR9LGkoeCx2KSxpKGIsdiksaShfLHYpLF8ucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8dC53b3Jkc1tyXSkrZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0sYS5fcHJpbWU9ZnVuY3Rpb24odCl7aWYobVt0XSlyZXR1cm4gbVt0XTt2YXIgZTtpZigiazI1NiI9PT10KWU9bmV3IHk7ZWxzZSBpZigicDIyNCI9PT10KWU9bmV3IHg7ZWxzZSBpZigicDE5MiI9PT10KWU9bmV3IGI7ZWxzZXtpZigicDI1NTE5IiE9PXQpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrdCk7ZT1uZXcgX31yZXR1cm4gbVt0XT1lLGV9LHcucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbih0LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx3LnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbih0LGUpe24oMD09KHQubmVnYXRpdmV8ZS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbih0LnJlZCYmdC5yZWQ9PT1lLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx3LnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNaZXJvKCk/dC5jbG9uZSgpOnRoaXMubS5zdWIodCkuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5hZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaWFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSkscn0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSkscn0sdy5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEodCksdGhpcy5pbW9kKHQudXNobG4oZSkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5pbXVsKGUpKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5tdWwoZSkpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltdWwodCx0LmNsb25lKCkpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubXVsKHQsdCl9LHcucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24odCl7aWYodC5pc1plcm8oKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBlPXRoaXMubS5hbmRsbigzKTtpZihuKGUlMj09MSksMz09PWUpe3ZhciByPXRoaXMubS5hZGQobmV3IGEoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3codCxyKX1mb3IodmFyIGk9dGhpcy5tLnN1Ym4oMSksbz0wOyFpLmlzWmVybygpJiYwPT09aS5hbmRsbigxKTspbysrLGkuaXVzaHJuKDEpO24oIWkuaXNaZXJvKCkpO3ZhciBzPW5ldyBhKDEpLnRvUmVkKHRoaXMpLGw9cy5yZWROZWcoKSxjPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSx1PXRoaXMubS5iaXRMZW5ndGgoKTtmb3IodT1uZXcgYSgyKnUqdSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHUsYykuY21wKGwpOyl1LnJlZElBZGQobCk7Zm9yKHZhciBmPXRoaXMucG93KHUsaSksaD10aGlzLnBvdyh0LGkuYWRkbigxKS5pdXNocm4oMSkpLHA9dGhpcy5wb3codCxpKSxkPW87MCE9PXAuY21wKHMpOyl7Zm9yKHZhciBnPXAsbT0wOzAhPT1nLmNtcChzKTttKyspZz1nLnJlZFNxcigpO24obTxkKTt2YXIgdj10aGlzLnBvdyhmLG5ldyBhKDEpLml1c2hsbihkLW0tMSkpO2g9aC5yZWRNdWwodiksZj12LnJlZFNxcigpLHA9cC5yZWRNdWwoZiksZD1tfXJldHVybiBofSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1lLm5lZ2F0aXZlPyhlLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGUpLnJlZE5lZygpKTp0aGlzLmltb2QoZSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0LGUpe2lmKGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBhKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1lLmNtcG4oMSkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgcj1uZXcgQXJyYXkoMTYpO3JbMF09bmV3IGEoMSkudG9SZWQodGhpcyksclsxXT10O2Zvcih2YXIgbj0yO248ci5sZW5ndGg7bisrKXJbbl09dGhpcy5tdWwocltuLTFdLHQpO3ZhciBpPXJbMF0sbz0wLHM9MCxsPWUuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1sJiYobD0yNiksbj1lLmxlbmd0aC0xO24+PTA7bi0tKXtmb3IodmFyIGM9ZS53b3Jkc1tuXSx1PWwtMTt1Pj0wO3UtLSl7dmFyIGY9Yz4+dSYxO2khPT1yWzBdJiYoaT10aGlzLnNxcihpKSksMCE9PWZ8fDAhPT1vPyhvPDw9MSxvfD1mLCg0PT09KytzfHwwPT09biYmMD09PXUpJiYoaT10aGlzLm11bChpLHJbb10pLHM9MCxvPTApKTpzPTB9bD0yNn1yZXR1cm4gaX0sdy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXQudW1vZCh0aGlzLm0pO3JldHVybiBlPT09dD9lLmNsb25lKCk6ZX0sdy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9uZSgpO3JldHVybiBlLnJlZD1udWxsLGV9LGEubW9udD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFQodCl9LGkoVCx3KSxULnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0LnVzaGxuKHRoaXMuc2hpZnQpKX0sVC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQubXVsKHRoaXMucmludikpO3JldHVybiBlLnJlZD1udWxsLGV9LFQucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiB0LndvcmRzWzBdPTAsdC5sZW5ndGg9MSx0O3ZhciByPXQuaW11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxhPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/YT1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKGE9aS5pYWRkKHRoaXMubSkpLGEuX2ZvcmNlUmVkKHRoaXMpfSxULnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiBuZXcgYSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHI9dC5tdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksbz1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP289aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihvPWkuaWFkZCh0aGlzLm0pKSxvLl9mb3JjZVJlZCh0aGlzKX0sVC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSgidW5kZWZpbmVkIj09dHlwZW9mIGV8fGUsdGhpcyl9LHtidWZmZXI6MTA4fV0sMTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPTA7Zm9yKGU9MDtlPGk7KytlKWErPXRbZV0ubGVuZ3RoO3ZhciBvPW5ldyBBcnJheShhKSxzPTA7Zm9yKGU9MDtlPGk7KytlKXt2YXIgbD10W2VdLGM9bC5sZW5ndGg7Zm9yKHI9MDtyPGM7KytyKXt2YXIgdT1vW3MrK109bmV3IEFycmF5KGMtMSksZj0wO2ZvcihuPTA7bjxjOysrbiluIT09ciYmKHVbZisrXT1sW25dKTtpZigxJnIpe3ZhciBoPXVbMV07dVsxXT11WzBdLHVbMF09aH19fXJldHVybiBvfX0se31dLDEwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGYodCk7Y2FzZSAyOnJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2ModCx0LGUsITApOmgodCxlKTtjYXNlIDM6cmV0dXJuIGModCxlLHIsITEpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJib3gtaW50ZXJzZWN0OiBJbnZhbGlkIGFyZ3VtZW50cyIpfX07dmFyIG4saT10KCJ0eXBlZGFycmF5LXBvb2wiKSxhPXQoIi4vbGliL3N3ZWVwIiksbz10KCIuL2xpYi9pbnRlcnNlY3QiKTtmdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciByPTA7cjx0OysrcilpZighKGVbcl08PWVbcit0XSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbCh0LGUscixuKXtmb3IodmFyIGk9MCxhPTAsbz0wLGw9dC5sZW5ndGg7bzxsOysrbyl7dmFyIGM9dFtvXTtpZighcyhlLGMpKXtmb3IodmFyIHU9MDt1PDIqZTsrK3UpcltpKytdPWNbdV07blthKytdPW99fXJldHVybiBhfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIHM9dC5sZW5ndGgsYz1lLmxlbmd0aDtpZighKHM8PTB8fGM8PTApKXt2YXIgdT10WzBdLmxlbmd0aD4+PjE7aWYoISh1PD0wKSl7dmFyIGYsaD1pLm1hbGxvY0RvdWJsZSgyKnUqcykscD1pLm1hbGxvY0ludDMyKHMpO2lmKChzPWwodCx1LGgscCkpPjApe2lmKDE9PT11JiZuKWEuaW5pdChzKSxmPWEuc3dlZXBDb21wbGV0ZSh1LHIsMCxzLGgscCwwLHMsaCxwKTtlbHNle3ZhciBkPWkubWFsbG9jRG91YmxlKDIqdSpjKSxnPWkubWFsbG9jSW50MzIoYyk7KGM9bChlLHUsZCxnKSk+MCYmKGEuaW5pdChzK2MpLGY9MT09PXU/YS5zd2VlcEJpcGFydGl0ZSh1LHIsMCxzLGgscCwwLGMsZCxnKTpvKHUscixuLHMsaCxwLGMsZCxnKSxpLmZyZWUoZCksaS5mcmVlKGcpKX1pLmZyZWUoaCksaS5mcmVlKHApfXJldHVybiBmfX19ZnVuY3Rpb24gdSh0LGUpe24ucHVzaChbdCxlXSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbj1bXSxjKHQsdCx1LCEwKSxufWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gbj1bXSxjKHQsZSx1LCExKSxufX0seyIuL2xpYi9pbnRlcnNlY3QiOjEwMywiLi9saWIvc3dlZXAiOjEwNywidHlwZWRhcnJheS1wb29sIjo1OTV9XSwxMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49WyJkIiwiYXgiLCJ2diIsInJzIiwicmUiLCJyYiIsInJpIiwiYnMiLCJiZSIsImJiIiwiYmkiXTtmdW5jdGlvbiBpKHQpe3ZhciBlPSJicnV0ZUZvcmNlIisodD8iRnVsbCI6IlBhcnRpYWwiKSxyPVtdLGk9bi5zbGljZSgpO3R8fGkuc3BsaWNlKDMsMCwiZnAiKTt2YXIgYT1bImZ1bmN0aW9uICIrZSsiKCIraS5qb2luKCkrIil7Il07ZnVuY3Rpb24gbyhlLGkpe3ZhciBvPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT0iYnJ1dGVGb3JjZSIrKHQ/IlJlZCI6IkJsdWUiKSsoZT8iRmxpcCI6IiIpKyhyPyJGdWxsIjoiIiksYT1bImZ1bmN0aW9uICIsaSwiKCIsbi5qb2luKCksIil7IiwidmFyICIsImVzIiwiPTIqIiwiZCIsIjsiXSxvPSJmb3IodmFyIGk9cnMscnA9ZXMqcnM7aTxyZTsrK2kscnArPWVzKXt2YXIgeDA9cmJbYXgrcnBdLHgxPXJiW2F4K3JwK2RdLHhpPXJpW2ldOyIscz0iZm9yKHZhciBqPWJzLGJwPWVzKmJzO2o8YmU7KytqLGJwKz1lcyl7dmFyIHkwPWJiW2F4K2JwXSwiKyhyPyJ5MT1iYltheCticCtkXSwiOiIiKSsieWk9Ymlbal07IjtyZXR1cm4gdD9hLnB1c2gobywiUSIsIjoiLHMpOmEucHVzaChzLCJRIiwiOiIsbykscj9hLnB1c2goImlmKHkxPHgwfHx4MTx5MCljb250aW51ZTsiKTplP2EucHVzaCgiaWYoeTA8PXgwfHx4MTx5MCljb250aW51ZTsiKTphLnB1c2goImlmKHkwPHgwfHx4MTx5MCljb250aW51ZTsiKSxhLnB1c2goImZvcih2YXIgaz1heCsxO2s8ZDsrK2spe3ZhciByMD1yYltrK3JwXSxyMT1yYltrK2QrcnBdLGIwPWJiW2srYnBdLGIxPWJiW2srZCticF07aWYocjE8YjB8fGIxPHIwKWNvbnRpbnVlIFE7fXZhciBydj12digiKSxlP2EucHVzaCgieWkseGkiKTphLnB1c2goInhpLHlpIiksYS5wdXNoKCIpO2lmKHJ2IT09dm9pZCAwKXJldHVybiBydjt9fX0iKSx7bmFtZTppLGNvZGU6YS5qb2luKCIiKX19KGUsaSx0KTtyLnB1c2goby5jb2RlKSxhLnB1c2goInJldHVybiAiK28ubmFtZSsiKCIrbi5qb2luKCkrIik7Iil9YS5wdXNoKCJpZihyZS1ycz5iZS1icyl7IiksdD8obyghMCwhMSksYS5wdXNoKCJ9ZWxzZXsiKSxvKCExLCExKSk6KGEucHVzaCgiaWYoZnApeyIpLG8oITAsITApLGEucHVzaCgifWVsc2V7IiksbyghMCwhMSksYS5wdXNoKCJ9fWVsc2V7aWYoZnApeyIpLG8oITEsITApLGEucHVzaCgifWVsc2V7IiksbyghMSwhMSksYS5wdXNoKCJ9IikpLGEucHVzaCgifX1yZXR1cm4gIitlKTt2YXIgcz1yLmpvaW4oIiIpK2Euam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbihzKSgpfXIucGFydGlhbD1pKCExKSxyLmZ1bGw9aSghMCl9LHt9XSwxMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsdSx3LFQsayxNKXshZnVuY3Rpb24odCxlKXt2YXIgcj04KmkubG9nMihlKzEpKih0KzEpfDAsYT1pLm5leHRQb3cyKDYqcik7di5sZW5ndGg8YSYmKG4uZnJlZSh2KSx2PW4ubWFsbG9jSW50MzIoYSkpO3ZhciBvPWkubmV4dFBvdzIoMipyKTt5Lmxlbmd0aDxvJiYobi5mcmVlKHkpLHk9bi5tYWxsb2NEb3VibGUobykpfSh0LGErVCk7dmFyIEEsUz0wLEU9Mip0O3goUysrLDAsMCxhLDAsVCxyPzE2OjAsLTEvMCwxLzApLHJ8fHgoUysrLDAsMCxULDAsYSwxLC0xLzAsMS8wKTtmb3IoO1M+MDspe3ZhciBDPTYqKFMtPTEpLEw9dltDXSxJPXZbQysxXSxQPXZbQysyXSx6PXZbQyszXSxPPXZbQys0XSxEPXZbQys1XSxSPTIqUyxGPXlbUl0sQj15W1IrMV0sTj0xJkQsaj0hISgxNiZEKSxVPXUsVj13LHE9ayxIPU07aWYoTiYmKFU9ayxWPU0scT11LEg9dyksISgyJkQmJihQPXAodCxMLEksUCxVLFYsQiksST49UCl8fDQmRCYmKEk9ZCh0LEwsSSxQLFUsVixGKSk+PVApKXt2YXIgRz1QLUksWT1PLXo7aWYoail7aWYodCpHKihHK1kpPDE8PDIyKXtpZih2b2lkIDAhPT0oQT1sLnNjYW5Db21wbGV0ZSh0LEwsZSxJLFAsVSxWLHosTyxxLEgpKSlyZXR1cm4gQTtjb250aW51ZX19ZWxzZXtpZih0Kk1hdGgubWluKEcsWSk8MTI4KXtpZih2b2lkIDAhPT0oQT1vKHQsTCxlLE4sSSxQLFUsVix6LE8scSxIKSkpcmV0dXJuIEE7Y29udGludWV9aWYodCpHKlk8MTw8MjIpe2lmKHZvaWQgMCE9PShBPWwuc2NhbkJpcGFydGl0ZSh0LEwsZSxOLEksUCxVLFYseixPLHEsSCkpKXJldHVybiBBO2NvbnRpbnVlfX12YXIgVz1mKHQsTCxJLFAsVSxWLEYsQik7aWYoSTxXKWlmKHQqKFctSSk8MTI4KXtpZih2b2lkIDAhPT0oQT1zKHQsTCsxLGUsSSxXLFUsVix6LE8scSxIKSkpcmV0dXJuIEF9ZWxzZSBpZihMPT09dC0yKXtpZih2b2lkIDAhPT0oQT1OP2wuc3dlZXBCaXBhcnRpdGUodCxlLHosTyxxLEgsSSxXLFUsVik6bC5zd2VlcEJpcGFydGl0ZSh0LGUsSSxXLFUsVix6LE8scSxIKSkpcmV0dXJuIEF9ZWxzZSB4KFMrKyxMKzEsSSxXLHosTyxOLC0xLzAsMS8wKSx4KFMrKyxMKzEseixPLEksVywxXk4sLTEvMCwxLzApO2lmKFc8UCl7dmFyIFg9Yyh0LEwseixPLHEsSCksWj1xW0UqWCtMXSxKPWgodCxMLFgsTyxxLEgsWik7aWYoSjxPJiZ4KFMrKyxMLFcsUCxKLE8sKDR8TikrKGo/MTY6MCksWixCKSx6PFgmJngoUysrLEwsVyxQLHosWCwoMnxOKSsoaj8xNjowKSxGLFopLFgrMT09PUope2lmKHZvaWQgMCE9PShBPWo/Xyh0LEwsZSxXLFAsVSxWLFgscSxIW1hdKTpiKHQsTCxlLE4sVyxQLFUsVixYLHEsSFtYXSkpKXJldHVybiBBfWVsc2UgaWYoWDxKKXt2YXIgSztpZihqKXtpZihLPWcodCxMLFcsUCxVLFYsWiksVzxLKXt2YXIgUT1oKHQsTCxXLEssVSxWLFopO2lmKEw9PT10LTIpe2lmKFc8USYmdm9pZCAwIT09KEE9bC5zd2VlcENvbXBsZXRlKHQsZSxXLFEsVSxWLFgsSixxLEgpKSlyZXR1cm4gQTtpZihRPEsmJnZvaWQgMCE9PShBPWwuc3dlZXBCaXBhcnRpdGUodCxlLFEsSyxVLFYsWCxKLHEsSCkpKXJldHVybiBBfWVsc2UgVzxRJiZ4KFMrKyxMKzEsVyxRLFgsSiwxNiwtMS8wLDEvMCksUTxLJiYoeChTKyssTCsxLFEsSyxYLEosMCwtMS8wLDEvMCkseChTKyssTCsxLFgsSixRLEssMSwtMS8wLDEvMCkpfX1lbHNlIEs9Tj9tKHQsTCxXLFAsVSxWLFopOmcodCxMLFcsUCxVLFYsWiksVzxLJiYoTD09PXQtMj9BPU4/bC5zd2VlcEJpcGFydGl0ZSh0LGUsWCxKLHEsSCxXLEssVSxWKTpsLnN3ZWVwQmlwYXJ0aXRlKHQsZSxXLEssVSxWLFgsSixxLEgpOih4KFMrKyxMKzEsVyxLLFgsSixOLC0xLzAsMS8wKSx4KFMrKyxMKzEsWCxKLFcsSywxXk4sLTEvMCwxLzApKSl9fX19fTt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxpPXQoImJpdC10d2lkZGxlIiksYT10KCIuL2JydXRlIiksbz1hLnBhcnRpYWwscz1hLmZ1bGwsbD10KCIuL3N3ZWVwIiksYz10KCIuL21lZGlhbiIpLHU9dCgiLi9wYXJ0aXRpb24iKSxmPXUoIiEobG8+PXAwKSYmIShwMT49aGkpIixbInAwIiwicDEiXSksaD11KCJsbz09PXAwIixbInAwIl0pLHA9dSgibG88cDAiLFsicDAiXSksZD11KCJoaTw9cDAiLFsicDAiXSksZz11KCJsbzw9cDAmJnAwPD1oaSIsWyJwMCJdKSxtPXUoImxvPHAwJiZwMDw9aGkiLFsicDAiXSksdj1uLm1hbGxvY0ludDMyKDEwMjQpLHk9bi5tYWxsb2NEb3VibGUoMTAyNCk7ZnVuY3Rpb24geCh0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9Nip0O3ZbY109ZSx2W2MrMV09cix2W2MrMl09bix2W2MrM109aSx2W2MrNF09YSx2W2MrNV09bzt2YXIgdT0yKnQ7eVt1XT1zLHlbdSsxXT1sfWZ1bmN0aW9uIGIodCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj0yKnQsaD1sKmYscD1jW2grZV07dDpmb3IodmFyIGQ9aSxnPWkqZjtkPGE7KytkLGcrPWYpe3ZhciBtPW9bZytlXSx2PW9bZytlK3RdO2lmKCEocDxtfHx2PHApJiYoIW58fHAhPT1tKSl7Zm9yKHZhciB5LHg9c1tkXSxiPWUrMTtiPHQ7KytiKXttPW9bZytiXSx2PW9bZytiK3RdO3ZhciBfPWNbaCtiXSx3PWNbaCtiK3RdO2lmKHY8X3x8dzxtKWNvbnRpbnVlIHR9aWYodm9pZCAwIT09KHk9bj9yKHUseCk6cih4LHUpKSlyZXR1cm4geX19fWZ1bmN0aW9uIF8odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9Mip0LGY9cyp1LGg9bFtmK2VdO3Q6Zm9yKHZhciBwPW4sZD1uKnU7cDxpOysrcCxkKz11KXt2YXIgZz1vW3BdO2lmKGchPT1jKXt2YXIgbT1hW2QrZV0sdj1hW2QrZSt0XTtpZighKGg8bXx8djxoKSl7Zm9yKHZhciB5PWUrMTt5PHQ7Kyt5KXttPWFbZCt5XSx2PWFbZCt5K3RdO3ZhciB4PWxbZit5XSxiPWxbZit5K3RdO2lmKHY8eHx8YjxtKWNvbnRpbnVlIHR9dmFyIF89cihnLGMpO2lmKHZvaWQgMCE9PV8pcmV0dXJuIF99fX19fSx7Ii4vYnJ1dGUiOjEwMiwiLi9tZWRpYW4iOjEwNCwiLi9wYXJ0aXRpb24iOjEwNSwiLi9zd2VlcCI6MTA3LCJiaXQtdHdpZGRsZSI6OTcsInR5cGVkYXJyYXktcG9vbCI6NTk1fV0sMTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7aWYoYTw9cisxKXJldHVybiByO3ZhciBsPXIsYz1hLHU9YStyPj4+MSxmPTIqdCxoPXUscD1vW2YqdStlXTtmb3IoO2w8Yzspe2lmKGMtbDw4KXtpKHQsZSxsLGMsbyxzKSxwPW9bZip1K2VdO2JyZWFrfXZhciBkPWMtbCxnPU1hdGgucmFuZG9tKCkqZCtsfDAsbT1vW2YqZytlXSx2PU1hdGgucmFuZG9tKCkqZCtsfDAseT1vW2YqditlXSx4PU1hdGgucmFuZG9tKCkqZCtsfDAsYj1vW2YqeCtlXTttPD15P2I+PXk/KGg9dixwPXkpOm0+PWI/KGg9ZyxwPW0pOihoPXgscD1iKTp5Pj1iPyhoPXYscD15KTpiPj1tPyhoPWcscD1tKTooaD14LHA9Yik7Zm9yKHZhciBfPWYqKGMtMSksdz1mKmgsVD0wO1Q8ZjsrK1QsKytfLCsrdyl7dmFyIGs9b1tfXTtvW19dPW9bd10sb1t3XT1rfXZhciBNPXNbYy0xXTtzW2MtMV09c1toXSxzW2hdPU0saD1uKHQsZSxsLGMtMSxvLHMscCk7Zm9yKF89ZiooYy0xKSx3PWYqaCxUPTA7VDxmOysrVCwrK18sKyt3KXtrPW9bX107b1tfXT1vW3ddLG9bd109a31NPXNbYy0xXTtpZihzW2MtMV09c1toXSxzW2hdPU0sdTxoKXtmb3IoYz1oLTE7bDxjJiZvW2YqKGMtMSkrZV09PT1wOyljLT0xO2MrPTF9ZWxzZXtpZighKGg8dSkpYnJlYWs7Zm9yKGw9aCsxO2w8YyYmb1tmKmwrZV09PT1wOylsKz0xfX1yZXR1cm4gbih0LGUscix1LG8scyxvW2YqdStlXSl9O3ZhciBuPXQoIi4vcGFydGl0aW9uIikoImxvPHAwIixbInAwIl0pO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEpe2Zvcih2YXIgbz0yKnQscz1vKihyKzEpK2UsbD1yKzE7bDxuOysrbCxzKz1vKWZvcih2YXIgYz1pW3NdLHU9bCxmPW8qKGwtMSk7dT5yJiZpW2YrZV0+YzstLXUsZi09byl7Zm9yKHZhciBoPWYscD1mK28sZD0wO2Q8bzsrK2QsKytoLCsrcCl7dmFyIGc9aVtoXTtpW2hdPWlbcF0saVtwXT1nfXZhciBtPWFbdV07YVt1XT1hW3UtMV0sYVt1LTFdPW19fX0seyIuL3BhcnRpdGlvbiI6MTA1fV0sMTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPSJhYmNkZWYiLnNwbGl0KCIiKS5jb25jYXQoZSksbj1bXTt0LmluZGV4T2YoImxvIik+PTAmJm4ucHVzaCgibG89ZVtrK25dIik7dC5pbmRleE9mKCJoaSIpPj0wJiZuLnB1c2goImhpPWVbaytvXSIpO3JldHVybiByLnB1c2goImZvcih2YXIgaj0yKmEsaz1qKmMsbD1rLG09YyxuPWIsbz1hK2IscD1jO2Q+cDsrK3Asays9ail7dmFyIF87aWYoJClpZihtPT09cCltKz0xLGwrPWo7ZWxzZXtmb3IodmFyIHM9MDtqPnM7KytzKXt2YXIgdD1lW2src107ZVtrK3NdPWVbbF0sZVtsKytdPXR9dmFyIHU9ZltwXTtmW3BdPWZbbV0sZlttKytdPXV9fXJldHVybiBtIi5yZXBsYWNlKCJfIixuLmpvaW4oKSkucmVwbGFjZSgiJCIsdCkpLEZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxyKX19LHt9XSwxMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZTw9MTI4P24oMCxlLTEsdCk6ZnVuY3Rpb24gdChlLHIsdSl7dmFyIGY9KHItZSsxKS82fDAsaD1lK2YscD1yLWYsZD1lK3I+PjEsZz1kLWYsbT1kK2Ysdj1oLHk9Zyx4PWQsYj1tLF89cCx3PWUrMSxUPXItMSxrPTA7bCh2LHksdSkmJihrPXYsdj15LHk9ayk7bChiLF8sdSkmJihrPWIsYj1fLF89ayk7bCh2LHgsdSkmJihrPXYsdj14LHg9ayk7bCh5LHgsdSkmJihrPXkseT14LHg9ayk7bCh2LGIsdSkmJihrPXYsdj1iLGI9ayk7bCh4LGIsdSkmJihrPXgseD1iLGI9ayk7bCh5LF8sdSkmJihrPXkseT1fLF89ayk7bCh5LHgsdSkmJihrPXkseT14LHg9ayk7bChiLF8sdSkmJihrPWIsYj1fLF89ayk7Zm9yKHZhciBNPXVbMip5XSxBPXVbMip5KzFdLFM9dVsyKmJdLEU9dVsyKmIrMV0sQz0yKnYsTD0yKngsST0yKl8sUD0yKmgsej0yKmQsTz0yKnAsRD0wO0Q8MjsrK0Qpe3ZhciBSPXVbQytEXSxGPXVbTCtEXSxCPXVbSStEXTt1W1ArRF09Uix1W3orRF09Rix1W08rRF09Qn1hKGcsZSx1KSxhKG0scix1KTtmb3IodmFyIE49dztOPD1UOysrTilpZihjKE4sTSxBLHUpKU4hPT13JiZpKE4sdyx1KSwrK3c7ZWxzZSBpZighYyhOLFMsRSx1KSlmb3IoOzspe2lmKGMoVCxTLEUsdSkpe2MoVCxNLEEsdSk/KG8oTix3LFQsdSksKyt3LC0tVCk6KGkoTixULHUpLC0tVCk7YnJlYWt9aWYoLS1UPE4pYnJlYWt9cyhlLHctMSxNLEEsdSkscyhyLFQrMSxTLEUsdSksdy0yLWU8PTMyP24oZSx3LTIsdSk6dChlLHctMix1KTtyLShUKzIpPD0zMj9uKFQrMixyLHUpOnQoVCsyLHIsdSk7VC13PD0zMj9uKHcsVCx1KTp0KHcsVCx1KX0oMCxlLTEsdCl9O2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj0yKih0KzEpLGk9dCsxO2k8PWU7KytpKXtmb3IodmFyIGE9cltuKytdLG89cltuKytdLHM9aSxsPW4tMjtzLS0gPnQ7KXt2YXIgYz1yW2wtMl0sdT1yW2wtMV07aWYoYzxhKWJyZWFrO2lmKGM9PT1hJiZ1PG8pYnJlYWs7cltsXT1jLHJbbCsxXT11LGwtPTJ9cltsXT1hLHJbbCsxXT1vfX1mdW5jdGlvbiBpKHQsZSxyKXtlKj0yO3ZhciBuPXJbdCo9Ml0saT1yW3QrMV07clt0XT1yW2VdLHJbdCsxXT1yW2UrMV0scltlXT1uLHJbZSsxXT1pfWZ1bmN0aW9uIGEodCxlLHIpe2UqPTIsclt0Kj0yXT1yW2VdLHJbdCsxXT1yW2UrMV19ZnVuY3Rpb24gbyh0LGUscixuKXtlKj0yLHIqPTI7dmFyIGk9blt0Kj0yXSxhPW5bdCsxXTtuW3RdPW5bZV0sblt0KzFdPW5bZSsxXSxuW2VdPW5bcl0sbltlKzFdPW5bcisxXSxuW3JdPWksbltyKzFdPWF9ZnVuY3Rpb24gcyh0LGUscixuLGkpe2UqPTIsaVt0Kj0yXT1pW2VdLGlbZV09cixpW3QrMV09aVtlKzFdLGlbZSsxXT1ufWZ1bmN0aW9uIGwodCxlLHIpe2UqPTI7dmFyIG49clt0Kj0yXSxpPXJbZV07cmV0dXJuIShuPGkpJiYobiE9PWl8fHJbdCsxXT5yW2UrMV0pfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGk9blt0Kj0yXTtyZXR1cm4gaTxlfHxpPT09ZSYmblt0KzFdPHJ9fSx7fV0sMTA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT1pLm5leHRQb3cyKHQpO28ubGVuZ3RoPGUmJihuLmZyZWUobyksbz1uLm1hbGxvY0ludDMyKGUpKTtzLmxlbmd0aDxlJiYobi5mcmVlKHMpLHM9bi5tYWxsb2NJbnQzMihlKSk7bC5sZW5ndGg8ZSYmKG4uZnJlZShsKSxsPW4ubWFsbG9jSW50MzIoZSkpO2MubGVuZ3RoPGUmJihuLmZyZWUoYyksYz1uLm1hbGxvY0ludDMyKGUpKTt1Lmxlbmd0aDxlJiYobi5mcmVlKHUpLHU9bi5tYWxsb2NJbnQzMihlKSk7Zi5sZW5ndGg8ZSYmKG4uZnJlZShmKSxmPW4ubWFsbG9jSW50MzIoZSkpO3ZhciByPTgqZTtoLmxlbmd0aDxyJiYobi5mcmVlKGgpLGg9bi5tYWxsb2NEb3VibGUocikpfSxzd2VlcEJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksdSxmLGcsbSx2KXtmb3IodmFyIHk9MCx4PTIqdCxiPXQtMSxfPXgtMSx3PXI7dzxuOysrdyl7dmFyIFQ9dVt3XSxrPXgqdztoW3krK109aVtrK2JdLGhbeSsrXT0tKFQrMSksaFt5KytdPWlbaytfXSxoW3krK109VH1mb3Iodz1mO3c8ZzsrK3cpe1Q9dlt3XSsoMTw8MjgpO3ZhciBNPXgqdztoW3krK109bVtNK2JdLGhbeSsrXT0tVCxoW3krK109bVtNK19dLGhbeSsrXT1UfXZhciBBPXk+Pj4xO2EoaCxBKTt2YXIgUz0wLEU9MDtmb3Iodz0wO3c8QTsrK3cpe3ZhciBDPTB8aFsyKncrMV07aWYoQz49MTw8MjgpcChsLGMsRS0tLEM9Qy0oMTw8MjgpfDApO2Vsc2UgaWYoQz49MClwKG8scyxTLS0sQyk7ZWxzZSBpZihDPD0tKDE8PDI4KSl7Qz0tQy0oMTw8MjgpfDA7Zm9yKHZhciBMPTA7TDxTOysrTCl7aWYodm9pZCAwIT09KEk9ZShvW0xdLEMpKSlyZXR1cm4gSX1kKGwsYyxFKyssQyl9ZWxzZXtDPS1DLTF8MDtmb3IoTD0wO0w8RTsrK0wpe3ZhciBJO2lmKHZvaWQgMCE9PShJPWUoQyxsW0xdKSkpcmV0dXJuIEl9ZChvLHMsUysrLEMpfX19LHN3ZWVwQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLGcsbSx2LHkseCl7Zm9yKHZhciBiPTAsXz0yKnQsdz10LTEsVD1fLTEsaz1yO2s8bjsrK2spe3ZhciBNPWdba10rMTw8MSxBPV8qaztoW2IrK109aVtBK3ddLGhbYisrXT0tTSxoW2IrK109aVtBK1RdLGhbYisrXT1NfWZvcihrPW07azx2Oysrayl7TT14W2tdKzE8PDE7dmFyIFM9XyprO2hbYisrXT15W1Mrd10saFtiKytdPTF8LU0saFtiKytdPXlbUytUXSxoW2IrK109MXxNfXZhciBFPWI+Pj4xO2EoaCxFKTt2YXIgQz0wLEw9MCxJPTA7Zm9yKGs9MDtrPEU7KytrKXt2YXIgUD0wfGhbMiprKzFdLHo9MSZQO2lmKGs8RS0xJiZQPj4xPT1oWzIqayszXT4+MSYmKHo9MixrKz0xKSxQPDApe2Zvcih2YXIgTz0tKFA+PjEpLTEsRD0wO0Q8STsrK0Qpe2lmKHZvaWQgMCE9PShSPWUodVtEXSxPKSkpcmV0dXJuIFJ9aWYoMCE9PXopZm9yKEQ9MDtEPEM7KytEKXtpZih2b2lkIDAhPT0oUj1lKG9bRF0sTykpKXJldHVybiBSfWlmKDEhPT16KWZvcihEPTA7RDxMOysrRCl7dmFyIFI7aWYodm9pZCAwIT09KFI9ZShsW0RdLE8pKSlyZXR1cm4gUn0wPT09ej9kKG8scyxDKyssTyk6MT09PXo/ZChsLGMsTCsrLE8pOjI9PT16JiZkKHUsZixJKyssTyl9ZWxzZXtPPShQPj4xKS0xOzA9PT16P3AobyxzLEMtLSxPKToxPT09ej9wKGwsYyxMLS0sTyk6Mj09PXomJnAodSxmLEktLSxPKX19fSxzY2FuQmlwYXJ0aXRlOmZ1bmN0aW9uKHQsZSxyLG4saSxsLGMsdSxmLGcsbSx2KXt2YXIgeT0wLHg9Mip0LGI9ZSxfPWUrdCx3PTEsVD0xO24/VD0xPDwyODp3PTE8PDI4O2Zvcih2YXIgaz1pO2s8bDsrK2spe3ZhciBNPWsrdyxBPXgqaztoW3krK109Y1tBK2JdLGhbeSsrXT0tTSxoW3krK109Y1tBK19dLGhbeSsrXT1NfWZvcihrPWY7azxnOysrayl7TT1rK1Q7dmFyIFM9eCprO2hbeSsrXT1tW1MrYl0saFt5KytdPS1NfXZhciBFPXk+Pj4xO2EoaCxFKTt2YXIgQz0wO2ZvcihrPTA7azxFOysrayl7dmFyIEw9MHxoWzIqaysxXTtpZihMPDApe3ZhciBJPSExO2lmKChNPS1MKT49MTw8Mjg/KEk9IW4sTS09MTw8MjgpOihJPSEhbixNLT0xKSxJKWQobyxzLEMrKyxNKTtlbHNle3ZhciBQPXZbTV0sej14Kk0sTz1tW3orZSsxXSxEPW1beitlKzErdF07dDpmb3IodmFyIFI9MDtSPEM7KytSKXt2YXIgRj1vW1JdLEI9eCpGO2lmKCEoRDxjW0IrZSsxXXx8Y1tCK2UrMSt0XTxPKSl7Zm9yKHZhciBOPWUrMjtOPHQ7KytOKWlmKG1beitOK3RdPGNbQitOXXx8Y1tCK04rdF08bVt6K05dKWNvbnRpbnVlIHQ7dmFyIGosVT11W0ZdO2lmKHZvaWQgMCE9PShqPW4/cihQLFUpOnIoVSxQKSkpcmV0dXJuIGp9fX19ZWxzZSBwKG8scyxDLS0sTC13KX19LHNjYW5Db21wbGV0ZTpmdW5jdGlvbih0LGUscixuLGkscyxsLGMsdSxmLHApe2Zvcih2YXIgZD0wLGc9Mip0LG09ZSx2PWUrdCx5PW47eTxpOysreSl7dmFyIHg9eSsoMTw8MjgpLGI9Zyp5O2hbZCsrXT1zW2IrbV0saFtkKytdPS14LGhbZCsrXT1zW2Irdl0saFtkKytdPXh9Zm9yKHk9Yzt5PHU7Kyt5KXt4PXkrMTt2YXIgXz1nKnk7aFtkKytdPWZbXyttXSxoW2QrK109LXh9dmFyIHc9ZD4+PjE7YShoLHcpO3ZhciBUPTA7Zm9yKHk9MDt5PHc7Kyt5KXt2YXIgaz0wfGhbMip5KzFdO2lmKGs8MCl7aWYoKHg9LWspPj0xPDwyOClvW1QrK109eC0oMTw8MjgpO2Vsc2V7dmFyIE09cFt4LT0xXSxBPWcqeCxTPWZbQStlKzFdLEU9ZltBK2UrMSt0XTt0OmZvcih2YXIgQz0wO0M8VDsrK0Mpe3ZhciBMPW9bQ10sST1sW0xdO2lmKEk9PT1NKWJyZWFrO3ZhciBQPWcqTDtpZighKEU8c1tQK2UrMV18fHNbUCtlKzErdF08Uykpe2Zvcih2YXIgej1lKzI7ejx0OysreilpZihmW0Ereit0XTxzW1Arel18fHNbUCt6K3RdPGZbQSt6XSljb250aW51ZSB0O3ZhciBPPXIoSSxNKTtpZih2b2lkIDAhPT1PKXJldHVybiBPfX19fWVsc2V7Zm9yKHg9ay0oMTw8MjgpLEM9VC0xO0M+PTA7LS1DKWlmKG9bQ109PT14KXtmb3Ioej1DKzE7ejxUOysreilvW3otMV09b1t6XTticmVha30tLVR9fX19O3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgiYml0LXR3aWRkbGUiKSxhPXQoIi4vc29ydCIpLG89bi5tYWxsb2NJbnQzMigxMDI0KSxzPW4ubWFsbG9jSW50MzIoMTAyNCksbD1uLm1hbGxvY0ludDMyKDEwMjQpLGM9bi5tYWxsb2NJbnQzMigxMDI0KSx1PW4ubWFsbG9jSW50MzIoMTAyNCksZj1uLm1hbGxvY0ludDMyKDEwMjQpLGg9bi5tYWxsb2NEb3VibGUoODE5Mik7ZnVuY3Rpb24gcCh0LGUscixuKXt2YXIgaT1lW25dLGE9dFtyLTFdO3RbaV09YSxlW2FdPWl9ZnVuY3Rpb24gZCh0LGUscixuKXt0W3JdPW4sZVtuXT1yfX0seyIuL3NvcnQiOjEwNiwiYml0LXR3aWRkbGUiOjk3LCJ0eXBlZGFycmF5LXBvb2wiOjU5NX1dLDEwODpbZnVuY3Rpb24odCxlLHIpe30se31dLDEwOTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDhdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDh9XSwxMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLGE9aSYmImZ1bmN0aW9uIj09dHlwZW9mIGkuYXBwbHk/aS5hcHBseTpmdW5jdGlvbih0LGUscil7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHQsZSxyKX07bj1pJiYiZnVuY3Rpb24iPT10eXBlb2YgaS5vd25LZXlzP2kub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KSl9OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KX07dmFyIG89TnVtYmVyLmlzTmFOfHxmdW5jdGlvbih0KXtyZXR1cm4gdCE9dH07ZnVuY3Rpb24gcygpe3MuaW5pdC5jYWxsKHRoaXMpfWUuZXhwb3J0cz1zLGUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2Z1bmN0aW9uIGkoKXt2b2lkIDAhPT1hJiZ0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsYSkscihbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfXZhciBhOyJlcnJvciIhPT1lJiYoYT1mdW5jdGlvbihyKXt0LnJlbW92ZUxpc3RlbmVyKGUsaSksbihyKX0sdC5vbmNlKCJlcnJvciIsYSkpLHQub25jZShlLGkpfSkpfSxzLkV2ZW50RW1pdHRlcj1zLHMucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLHMucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLHMucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBsPTEwO2Z1bmN0aW9uIGModCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHZvaWQgMD09PXQuX21heExpc3RlbmVycz9zLmRlZmF1bHRNYXhMaXN0ZW5lcnM6dC5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIGYodCxlLHIsbil7dmFyIGksYSxvLHM7aWYoYyhyKSx2b2lkIDA9PT0oYT10Ll9ldmVudHMpPyhhPXQuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHQuX2V2ZW50c0NvdW50PTApOih2b2lkIDAhPT1hLm5ld0xpc3RlbmVyJiYodC5lbWl0KCJuZXdMaXN0ZW5lciIsZSxyLmxpc3RlbmVyP3IubGlzdGVuZXI6ciksYT10Ll9ldmVudHMpLG89YVtlXSksdm9pZCAwPT09bylvPWFbZV09ciwrK3QuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIG8/bz1hW2VdPW4/W3Isb106W28scl06bj9vLnVuc2hpZnQocik6by5wdXNoKHIpLChpPXUodCkpPjAmJm8ubGVuZ3RoPmkmJiFvLndhcm5lZCl7by53YXJuZWQ9ITA7dmFyIGw9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrby5sZW5ndGgrIiAiK1N0cmluZyhlKSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTtsLm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIsbC5lbWl0dGVyPXQsbC50eXBlPWUsbC5jb3VudD1vLmxlbmd0aCxzPWwsY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4ocyl9cmV0dXJuIHR9ZnVuY3Rpb24gaCgpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0OnQsdHlwZTplLGxpc3RlbmVyOnJ9LGk9aC5iaW5kKG4pO3JldHVybiBpLmxpc3RlbmVyPXIsbi53cmFwRm49aSxpfWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPXQuX2V2ZW50cztpZih2b2lkIDA9PT1uKXJldHVybltdO3ZhciBpPW5bZV07cmV0dXJuIHZvaWQgMD09PWk/W106ImZ1bmN0aW9uIj09dHlwZW9mIGk/cj9baS5saXN0ZW5lcnx8aV06W2ldOnI/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09dFtyXS5saXN0ZW5lcnx8dFtyXTtyZXR1cm4gZX0oaSk6bShpLGkubGVuZ3RoKX1mdW5jdGlvbiBnKHQpe3ZhciBlPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1lKXt2YXIgcj1lW3RdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXJldHVybiAxO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXTtyZXR1cm4gcn1PYmplY3QuZGVmaW5lUHJvcGVydHkocywiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LHNldDpmdW5jdGlvbih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MHx8byh0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVuZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK3QrIi4iKTtsPXR9fSkscy5pbml0PWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHMhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0scy5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8dDwwfHxvKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrdCsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxzLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzKX0scy5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZS5wdXNoKGFyZ3VtZW50c1tyXSk7dmFyIG49ImVycm9yIj09PXQsaT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09aSluPW4mJnZvaWQgMD09PWkuZXJyb3I7ZWxzZSBpZighbilyZXR1cm4hMTtpZihuKXt2YXIgbztpZihlLmxlbmd0aD4wJiYobz1lWzBdKSxvIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgbzt2YXIgcz1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhvPyIgKCIrby5tZXNzYWdlKyIpIjoiIikpO3Rocm93IHMuY29udGV4dD1vLHN9dmFyIGw9aVt0XTtpZih2b2lkIDA9PT1sKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKWEobCx0aGlzLGUpO2Vsc2V7dmFyIGM9bC5sZW5ndGgsdT1tKGwsYyk7Zm9yKHI9MDtyPGM7KytyKWEodVtyXSx0aGlzLGUpfXJldHVybiEwfSxzLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBmKHRoaXMsdCxlLCExKX0scy5wcm90b3R5cGUub249cy5wcm90b3R5cGUuYWRkTGlzdGVuZXIscy5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodGhpcyx0LGUsITApfSxzLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMoZSksdGhpcy5vbih0LHAodGhpcyx0LGUpKSx0aGlzfSxzLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMoZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIodCxwKHRoaXMsdCxlKSksdGhpc30scy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvO2lmKGMoZSksdm9pZCAwPT09KG49dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0ocj1uW3RdKSlyZXR1cm4gdGhpcztpZihyPT09ZXx8ci5saXN0ZW5lcj09PWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIG5bdF0sbi5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxyLmxpc3RlbmVyfHxlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil7Zm9yKGk9LTEsYT1yLmxlbmd0aC0xO2E+PTA7YS0tKWlmKHJbYV09PT1lfHxyW2FdLmxpc3RlbmVyPT09ZSl7bz1yW2FdLmxpc3RlbmVyLGk9YTticmVha31pZihpPDApcmV0dXJuIHRoaXM7MD09PWk/ci5zaGlmdCgpOmZ1bmN0aW9uKHQsZSl7Zm9yKDtlKzE8dC5sZW5ndGg7ZSsrKXRbZV09dFtlKzFdO3QucG9wKCl9KHIsaSksMT09PXIubGVuZ3RoJiYoblt0XT1yWzBdKSx2b2lkIDAhPT1uLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIix0LG98fGUpfXJldHVybiB0aGlzfSxzLnByb3RvdHlwZS5vZmY9cy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIscy5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbjtpZih2b2lkIDA9PT0ocj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PXIucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1yW3RdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgclt0XSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGksYT1PYmplY3Qua2V5cyhyKTtmb3Iobj0wO248YS5sZW5ndGg7KytuKSJyZW1vdmVMaXN0ZW5lciIhPT0oaT1hW25dKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoaSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBlb2YoZT1yW3RdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKHQsZSk7ZWxzZSBpZih2b2lkIDAhPT1lKWZvcihuPWUubGVuZ3RoLTE7bj49MDtuLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGVbbl0pO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGQodGhpcyx0LCEwKX0scy5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBkKHRoaXMsdCwhMSl9LHMubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0LGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0Lmxpc3RlbmVyQ291bnQ/dC5saXN0ZW5lckNvdW50KGUpOmcuY2FsbCh0LGUpfSxzLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PWcscy5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP24odGhpcy5fZXZlbnRzKTpbXX19LHt9XSwxMTE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7Ci8qIQogKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci4KICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KInVzZSBzdHJpY3QiO3ZhciBlPXQoImJhc2U2NC1qcyIpLG49dCgiaWVlZTc1NCIpO3IuQnVmZmVyPWEsci5TbG93QnVmZmVyPWZ1bmN0aW9uKHQpeyt0IT10JiYodD0wKTtyZXR1cm4gYS5hbGxvYygrdCl9LHIuSU5TUEVDVF9NQVhfQllURVM9NTA7ZnVuY3Rpb24gaSh0KXtpZih0PjIxNDc0ODM2NDcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZS5fX3Byb3RvX189YS5wcm90b3R5cGUsZX1mdW5jdGlvbiBhKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gbCh0KX1yZXR1cm4gbyh0LGUscil9ZnVuY3Rpb24gbyh0LGUscil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBmdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgZSYmIiIhPT1lfHwoZT0idXRmOCIpO2lmKCFhLmlzRW5jb2RpbmcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTt2YXIgcj0wfGYodCxlKSxuPWkociksbz1uLndyaXRlKHQsZSk7byE9PXImJihuPW4uc2xpY2UoMCxvKSk7cmV0dXJuIG59KHQsZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVybiBjKHQpO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiB0KTtpZihCKHQsQXJyYXlCdWZmZXIpfHx0JiZCKHQuYnVmZmVyLEFycmF5QnVmZmVyKSlyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGU8MHx8dC5ieXRlTGVuZ3RoPGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKHQuYnl0ZUxlbmd0aDxlKyhyfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIG47bj12b2lkIDA9PT1lJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxlKTpuZXcgVWludDhBcnJheSh0LGUscik7cmV0dXJuIG4uX19wcm90b19fPWEucHJvdG90eXBlLG59KHQsZSxyKTtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIG49dC52YWx1ZU9mJiZ0LnZhbHVlT2YoKTtpZihudWxsIT1uJiZuIT09dClyZXR1cm4gYS5mcm9tKG4sZSxyKTt2YXIgbz1mdW5jdGlvbih0KXtpZihhLmlzQnVmZmVyKHQpKXt2YXIgZT0wfHUodC5sZW5ndGgpLHI9aShlKTtyZXR1cm4gMD09PXIubGVuZ3RofHx0LmNvcHkociwwLDAsZSkscn1pZih2b2lkIDAhPT10Lmxlbmd0aClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHxOKHQubGVuZ3RoKT9pKDApOmModCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJkFycmF5LmlzQXJyYXkodC5kYXRhKSlyZXR1cm4gYyh0LmRhdGEpfSh0KTtpZihvKXJldHVybiBvO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIGEuZnJvbSh0W1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLGUscik7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgdCl9ZnVuY3Rpb24gcyh0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBsKHQpe3JldHVybiBzKHQpLGkodDwwPzA6MHx1KHQpKX1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDwwPzA6MHx1KHQubGVuZ3RoKSxyPWkoZSksbj0wO248ZTtuKz0xKXJbbl09MjU1JnRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gdSh0KXtpZih0Pj0yMTQ3NDgzNjQ3KXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IisyMTQ3NDgzNjQ3Li50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfHR9ZnVuY3Rpb24gZih0LGUpe2lmKGEuaXNCdWZmZXIodCkpcmV0dXJuIHQubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8Qih0LEFycmF5QnVmZmVyKSlyZXR1cm4gdC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7dmFyIHI9dC5sZW5ndGgsbj1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFuJiYwPT09cilyZXR1cm4gMDtmb3IodmFyIGk9ITE7Oylzd2l0Y2goZSl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBEKHQpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gUih0KS5sZW5ndGg7ZGVmYXVsdDppZihpKXJldHVybiBuPy0xOkQodCkubGVuZ3RoO2U9KCIiK2UpLnRvTG93ZXJDYXNlKCksaT0hMH19ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PWV8fGU8MCkmJihlPTApLGU+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KGU+Pj49MCkpcmV0dXJuIiI7Zm9yKHR8fCh0PSJ1dGY4Iik7Oylzd2l0Y2godCl7Y2FzZSJoZXgiOnJldHVybiBBKHRoaXMsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBUKHRoaXMsZSxyKTtjYXNlImFzY2lpIjpyZXR1cm4gayh0aGlzLGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gTSh0aGlzLGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiB3KHRoaXMsZSxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIFModGhpcyxlLHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3Q9KHQrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIGQodCxlLHIsbixpKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxOKHI9K3IpJiYocj1pPzA6dC5sZW5ndGgtMSkscjwwJiYocj10Lmxlbmd0aCtyKSxyPj10Lmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPXQubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIGUmJihlPWEuZnJvbShlLG4pKSxhLmlzQnVmZmVyKGUpKXJldHVybiAwPT09ZS5sZW5ndGg/LTE6Zyh0LGUscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gZSY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHQsZSxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKHQsZSxyKTpnKHQsW2VdLHIsbixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBnKHQsZSxyLG4saSl7dmFyIGEsbz0xLHM9dC5sZW5ndGgsbD1lLmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoInVjczIiPT09KG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bnx8InV0ZjE2bGUiPT09bnx8InV0Zi0xNmxlIj09PW4pKXtpZih0Lmxlbmd0aDwyfHxlLmxlbmd0aDwyKXJldHVybi0xO289MixzLz0yLGwvPTIsci89Mn1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIDE9PT1vP3RbZV06dC5yZWFkVUludDE2QkUoZSpvKX1pZihpKXt2YXIgdT0tMTtmb3IoYT1yO2E8czthKyspaWYoYyh0LGEpPT09YyhlLC0xPT09dT8wOmEtdSkpe2lmKC0xPT09dSYmKHU9YSksYS11KzE9PT1sKXJldHVybiB1Km99ZWxzZS0xIT09dSYmKGEtPWEtdSksdT0tMX1lbHNlIGZvcihyK2w+cyYmKHI9cy1sKSxhPXI7YT49MDthLS0pe2Zvcih2YXIgZj0hMCxoPTA7aDxsO2grKylpZihjKHQsYStoKSE9PWMoZSxoKSl7Zj0hMTticmVha31pZihmKXJldHVybiBhfXJldHVybi0xfWZ1bmN0aW9uIG0odCxlLHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9dC5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBhPWUubGVuZ3RoO24+YS8yJiYobj1hLzIpO2Zvcih2YXIgbz0wO288bjsrK28pe3ZhciBzPXBhcnNlSW50KGUuc3Vic3RyKDIqbywyKSwxNik7aWYoTihzKSlyZXR1cm4gbzt0W3Irb109c31yZXR1cm4gb31mdW5jdGlvbiB2KHQsZSxyLG4pe3JldHVybiBGKEQoZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24geSh0LGUscixuKXtyZXR1cm4gRihmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCgyNTUmdC5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gZX0oZSksdCxyLG4pfWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuIHkodCxlLHIsbil9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gRihSKGUpLHQscixuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3JldHVybiBGKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saSxhPVtdLG89MDtvPHQubGVuZ3RoJiYhKChlLT0yKTwwKTsrK28pcj10LmNoYXJDb2RlQXQobyksbj1yPj44LGk9ciUyNTYsYS5wdXNoKGkpLGEucHVzaChuKTtyZXR1cm4gYX0oZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24gdyh0LHIsbil7cmV0dXJuIDA9PT1yJiZuPT09dC5sZW5ndGg/ZS5mcm9tQnl0ZUFycmF5KHQpOmUuZnJvbUJ5dGVBcnJheSh0LnNsaWNlKHIsbikpfWZ1bmN0aW9uIFQodCxlLHIpe3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9ZTtpPHI7KXt2YXIgYSxvLHMsbCxjPXRbaV0sdT1udWxsLGY9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihpK2Y8PXIpc3dpdGNoKGYpe2Nhc2UgMTpjPDEyOCYmKHU9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoYT10W2krMV0pKSYmKGw9KDMxJmMpPDw2fDYzJmEpPjEyNyYmKHU9bCk7YnJlYWs7Y2FzZSAzOmE9dFtpKzFdLG89dFtpKzJdLDEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJm8pJiYobD0oMTUmYyk8PDEyfCg2MyZhKTw8Nnw2MyZvKT4yMDQ3JiYobDw1NTI5Nnx8bD41NzM0MykmJih1PWwpO2JyZWFrO2Nhc2UgNDphPXRbaSsxXSxvPXRbaSsyXSxzPXRbaSszXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYobD0oMTUmYyk8PDE4fCg2MyZhKTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjY1NTM1JiZsPDExMTQxMTImJih1PWwpfW51bGw9PT11Pyh1PTY1NTMzLGY9MSk6dT42NTUzNSYmKHUtPTY1NTM2LG4ucHVzaCh1Pj4+MTAmMTAyM3w1NTI5NiksdT01NjMyMHwxMDIzJnUpLG4ucHVzaCh1KSxpKz1mfXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD00MDk2KXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0KTt2YXIgcj0iIixuPTA7Zm9yKDtuPGU7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQuc2xpY2UobixuKz00MDk2KSk7cmV0dXJuIHJ9KG4pfXIua01heExlbmd0aD0yMTQ3NDgzNjQ3LGEuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbigpe3RyeXt2YXIgdD1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gdC5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PXQuZm9vKCl9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGEuVFlQRURfQVJSQVlfU1VQUE9SVHx8InVuZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlfHwiZnVuY3Rpb24iIT10eXBlb2YgY29uc29sZS5lcnJvcnx8Y29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGEuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihhLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC5zcGVjaWVzJiZhW1N5bWJvbC5zcGVjaWVzXT09PWEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExfSksYS5wb29sU2l6ZT04MTkyLGEuZnJvbT1mdW5jdGlvbih0LGUscil7cmV0dXJuIG8odCxlLHIpfSxhLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsYS5fX3Byb3RvX189VWludDhBcnJheSxhLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3JldHVybiBzKHQpLHQ8PTA/aSh0KTp2b2lkIDAhPT1lPyJzdHJpbmciPT10eXBlb2Ygcj9pKHQpLmZpbGwoZSxyKTppKHQpLmZpbGwoZSk6aSh0KX0odCxlLHIpfSxhLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQpfSxhLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0KX0sYS5pc0J1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmITA9PT10Ll9pc0J1ZmZlciYmdCE9PWEucHJvdG90eXBlfSxhLmNvbXBhcmU9ZnVuY3Rpb24odCxlKXtpZihCKHQsVWludDhBcnJheSkmJih0PWEuZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLEIoZSxVaW50OEFycmF5KSYmKGU9YS5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksIWEuaXNCdWZmZXIodCl8fCFhLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LGEuaXNFbmNvZGluZz1mdW5jdGlvbih0KXtzd2l0Y2goU3RyaW5nKHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sYS5jb25jYXQ9ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXQubGVuZ3RoKXJldHVybiBhLmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PWUpZm9yKGU9MCxyPTA7cjx0Lmxlbmd0aDsrK3IpZSs9dFtyXS5sZW5ndGg7dmFyIG49YS5hbGxvY1Vuc2FmZShlKSxpPTA7Zm9yKHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG89dFtyXTtpZihCKG8sVWludDhBcnJheSkmJihvPWEuZnJvbShvKSksIWEuaXNCdWZmZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShuLGkpLGkrPW8ubGVuZ3RofXJldHVybiBufSxhLmJ5dGVMZW5ndGg9ZixhLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsYS5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz0yKXAodGhpcyxlLGUrMSk7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9NClwKHRoaXMsZSxlKzMpLHAodGhpcyxlKzEsZSsyKTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz04KXAodGhpcyxlLGUrNykscCh0aGlzLGUrMSxlKzYpLHAodGhpcyxlKzIsZSs1KSxwKHRoaXMsZSszLGUrNCk7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT10PyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP1QodGhpcywwLHQpOmguYXBwbHkodGhpcyxhcmd1bWVudHMpfSxhLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1hLnByb3RvdHlwZS50b1N0cmluZyxhLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7aWYoIWEuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09dHx8MD09PWEuY29tcGFyZSh0aGlzLHQpfSxhLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9IiIsZT1yLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0PXRoaXMudG9TdHJpbmcoImhleCIsMCxlKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPmUmJih0Kz0iIC4uLiAiKSwiPEJ1ZmZlciAiK3QrIj4ifSxhLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoQih0LFVpbnQ4QXJyYXkpJiYodD1hLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhYS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTtpZih2b2lkIDA9PT1lJiYoZT0wKSx2b2lkIDA9PT1yJiYocj10P3QubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSxlPDB8fHI+dC5sZW5ndGh8fG48MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49aSYmZT49cilyZXR1cm4gMDtpZihuPj1pKXJldHVybi0xO2lmKGU+PXIpcmV0dXJuIDE7aWYodGhpcz09PXQpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShuPj4+PTApLHM9KHI+Pj49MCktKGU+Pj49MCksbD1NYXRoLm1pbihvLHMpLGM9dGhpcy5zbGljZShuLGkpLHU9dC5zbGljZShlLHIpLGY9MDtmPGw7KytmKWlmKGNbZl0hPT11W2ZdKXtvPWNbZl0scz11W2ZdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sYS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHQsZSxyKX0sYS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGQodGhpcyx0LGUsciwhMCl9LGEucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZCh0aGlzLHQsZSxyLCExKX0sYS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09ZSluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLGU9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgZSluPWUscj10aGlzLmxlbmd0aCxlPTA7ZWxzZXtpZighaXNGaW5pdGUoZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2U+Pj49MCxpc0Zpbml0ZShyKT8ocj4+Pj0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLWU7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLHQubGVuZ3RoPjAmJihyPDB8fGU8MCl8fGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIGE9ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBtKHRoaXMsdCxlLHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHYodGhpcyx0LGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIHkodGhpcyx0LGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4geCh0aGlzLHQsZSxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGIodGhpcyx0LGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBfKHRoaXMsdCxlLHIpO2RlZmF1bHQ6aWYoYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksYT0hMH19LGEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07ZnVuY3Rpb24gayh0LGUscil7dmFyIG49IiI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JnRbaV0pO3JldHVybiBufWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPSIiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiBufWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPXQubGVuZ3RoOyghZXx8ZTwwKSYmKGU9MCksKCFyfHxyPDB8fHI+bikmJihyPW4pO2Zvcih2YXIgaT0iIixhPWU7YTxyOysrYSlpKz1PKHRbYV0pO3JldHVybiBpfWZ1bmN0aW9uIFModCxlLHIpe2Zvcih2YXIgbj10LnNsaWNlKGUsciksaT0iIixhPTA7YTxuLmxlbmd0aDthKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUoblthXSsyNTYqblthKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBFKHQsZSxyKXtpZih0JTEhPTB8fHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYodCtlPnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBDKHQsZSxyLG4saSxvKXtpZighYS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoZT5pfHxlPG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gTCh0LGUscixuLGksYSl7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEkodCxlLHIsaSxhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8TCh0LDAsciw0KSxuLndyaXRlKHQsZSxyLGksMjMsNCkscis0fWZ1bmN0aW9uIFAodCxlLHIsaSxhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8TCh0LDAsciw4KSxuLndyaXRlKHQsZSxyLGksNTIsOCkscis4fWEucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7KHQ9fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLChlPXZvaWQgMD09PWU/cjp+fmUpPDA/KGUrPXIpPDAmJihlPTApOmU+ciYmKGU9ciksZTx0JiYoZT10KTt2YXIgbj10aGlzLnN1YmFycmF5KHQsZSk7cmV0dXJuIG4uX19wcm90b19fPWEucHJvdG90eXBlLG59LGEucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RSh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbn0sYS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxFKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdCstLWVdLGk9MTtlPjAmJihpKj0yNTYpOyluKz10aGlzW3QrLS1lXSppO3JldHVybiBufSxhLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwxLHRoaXMubGVuZ3RoKSx0aGlzW3RdfSxhLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OH0sYS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LGEucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsxNjc3NzIxNip0aGlzW3QrM119LGEucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbdF0rKHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXSl9LGEucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxFKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLGE9MDsrK2E8ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCthXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCplKSksbn0sYS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEUodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49ZSxpPTEsYT10aGlzW3QrLS1uXTtuPjAmJihpKj0yNTYpOylhKz10aGlzW3QrLS1uXSppO3JldHVybiBhPj0oaSo9MTI4KSYmKGEtPU1hdGgucG93KDIsOCplKSksYX0sYS5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1t0XT8tMSooMjU1LXRoaXNbdF0rMSk6dGhpc1t0XX0sYS5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8RSh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxhLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxFKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0KzFdfHRoaXNbdF08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGEucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNnx0aGlzW3QrM108PDI0fSxhLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0sYS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyx0LCEwLDIzLDQpfSxhLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLHQsITEsMjMsNCl9LGEucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDgsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLHQsITAsNTIsOCl9LGEucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDgsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLHQsITEsNTIsOCl9LGEucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fEModGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT0xLGE9MDtmb3IodGhpc1tlXT0yNTUmdDsrK2E8ciYmKGkqPTI1Nik7KXRoaXNbZSthXT10L2kmMjU1O3JldHVybiBlK3J9LGEucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fEModGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEsYT0xO2Zvcih0aGlzW2UraV09MjU1JnQ7LS1pPj0wJiYoYSo9MjU2KTspdGhpc1tlK2ldPXQvYSYyNTU7cmV0dXJuIGUrcn0sYS5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEModGhpcyx0LGUsMSwyNTUsMCksdGhpc1tlXT0yNTUmdCxlKzF9LGEucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxDKHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxhLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8Qyh0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0sYS5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEModGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCxlKzR9LGEucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxDKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxhLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtDKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT0wLG89MSxzPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2EtMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxhLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtDKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT1yLTEsbz0xLHM9MDtmb3IodGhpc1tlK2FdPTI1NSZ0Oy0tYT49MCYmKG8qPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UrYSsxXSYmKHM9MSksdGhpc1tlK2FdPSh0L28+PjApLXMmMjU1O3JldHVybiBlK3J9LGEucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEModGhpcyx0LGUsMSwxMjcsLTEyOCksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0sYS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8Qyh0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxhLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxDKHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LGEucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEModGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQsZSs0fSxhLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxDKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdDwwJiYodD00Mjk0OTY3Mjk1K3QrMSksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0sYS5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gSSh0aGlzLHQsZSwhMCxyKX0sYS5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gSSh0aGlzLHQsZSwhMSxyKX0sYS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIFAodGhpcyx0LGUsITAscil9LGEucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBQKHRoaXMsdCxlLCExLHIpfSxhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCFhLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksZT49dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxlfHwoZT0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PXQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSx0Lmxlbmd0aC1lPG4tciYmKG49dC5sZW5ndGgtZStyKTt2YXIgaT1uLXI7aWYodGhpcz09PXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKXRoaXMuY29weVdpdGhpbihlLHIsbik7ZWxzZSBpZih0aGlzPT09dCYmcjxlJiZlPG4pZm9yKHZhciBvPWktMTtvPj0wOy0tbyl0W28rZV09dGhpc1tvK3JdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodCx0aGlzLnN1YmFycmF5KHIsbiksZSk7cmV0dXJuIGl9LGEucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odCxlLHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZigic3RyaW5nIj09dHlwZW9mIGU/KG49ZSxlPTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhYS5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7aWYoMT09PXQubGVuZ3RoKXt2YXIgaT10LmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PW4mJmk8MTI4fHwibGF0aW4xIj09PW4pJiYodD1pKX19ZWxzZSJudW1iZXIiPT10eXBlb2YgdCYmKHQmPTI1NSk7aWYoZTwwfHx0aGlzLmxlbmd0aDxlfHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPD1lKXJldHVybiB0aGlzO3ZhciBvO2lmKGU+Pj49MCxyPXZvaWQgMD09PXI/dGhpcy5sZW5ndGg6cj4+PjAsdHx8KHQ9MCksIm51bWJlciI9PXR5cGVvZiB0KWZvcihvPWU7bzxyOysrbyl0aGlzW29dPXQ7ZWxzZXt2YXIgcz1hLmlzQnVmZmVyKHQpP3Q6YS5mcm9tKHQsbiksbD1zLmxlbmd0aDtpZigwPT09bCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKG89MDtvPHItZTsrK28pdGhpc1tvK2VdPXNbbyVsXX1yZXR1cm4gdGhpc307dmFyIHo9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBPKHQpe3JldHVybiB0PDE2PyIwIit0LnRvU3RyaW5nKDE2KTp0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI7ZT1lfHwxLzA7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bnVsbCxhPVtdLG89MDtvPG47KytvKXtpZigocj10LmNoYXJDb2RlQXQobykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighaSl7aWYocj41NjMxOSl7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKG8rMT09PW4peyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPXI7Y29udGludWV9aWYocjw1NjMyMCl7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpLGk9cjtjb250aW51ZX1yPTY1NTM2KyhpLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGkmJihlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwscjwxMjgpe2lmKChlLT0xKTwwKWJyZWFrO2EucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKGUtPTIpPDApYnJlYWs7YS5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKChlLT0zKTwwKWJyZWFrO2EucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKGUtPTQpPDApYnJlYWs7YS5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gYX1mdW5jdGlvbiBSKHQpe3JldHVybiBlLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKHQpe2lmKCh0PSh0PXQuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoeiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7dC5sZW5ndGglNCE9MDspdCs9Ij0iO3JldHVybiB0fSh0KSl9ZnVuY3Rpb24gRih0LGUscixuKXtmb3IodmFyIGk9MDtpPG4mJiEoaStyPj1lLmxlbmd0aHx8aT49dC5sZW5ndGgpOysraSllW2krcl09dFtpXTtyZXR1cm4gaX1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHxudWxsIT10JiZudWxsIT10LmNvbnN0cnVjdG9yJiZudWxsIT10LmNvbnN0cnVjdG9yLm5hbWUmJnQuY29uc3RydWN0b3IubmFtZT09PWUubmFtZX1mdW5jdGlvbiBOKHQpe3JldHVybiB0IT10fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiYnVmZmVyIikuQnVmZmVyKX0seyJiYXNlNjQtanMiOjc5LGJ1ZmZlcjoxMTEsaWVlZTc1NDo0NDJ9XSwxMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvbW9ub3RvbmUiKSxpPXQoIi4vbGliL3RyaWFuZ3VsYXRpb24iKSxhPXQoIi4vbGliL2RlbGF1bmF5Iiksbz10KCIuL2xpYi9maWx0ZXIiKTtmdW5jdGlvbiBzKHQpe3JldHVybltNYXRoLm1pbih0WzBdLHRbMV0pLE1hdGgubWF4KHRbMF0sdFsxXSldfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtBcnJheS5pc0FycmF5KGUpPyhyPXJ8fHt9LGU9ZXx8W10pOihyPWV8fHt9LGU9W10pO3ZhciB1PSEhYyhyLCJkZWxhdW5heSIsITApLGY9ISFjKHIsImludGVyaW9yIiwhMCksaD0hIWMociwiZXh0ZXJpb3IiLCEwKSxwPSEhYyhyLCJpbmZpbml0eSIsITEpO2lmKCFmJiYhaHx8MD09PXQubGVuZ3RoKXJldHVybltdO3ZhciBkPW4odCxlKTtpZih1fHxmIT09aHx8cCl7Zm9yKHZhciBnPWkodC5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKHMpLnNvcnQobCl9KGUpKSxtPTA7bTxkLmxlbmd0aDsrK20pe3ZhciB2PWRbbV07Zy5hZGRUcmlhbmdsZSh2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIHUmJmEodCxnKSxoP2Y/cD9vKGcsMCxwKTpnLmNlbGxzKCk6byhnLDEscCk6byhnLC0xKX1yZXR1cm4gZH19LHsiLi9saWIvZGVsYXVuYXkiOjExMywiLi9saWIvZmlsdGVyIjoxMTQsIi4vbGliL21vbm90b25lIjoxMTUsIi4vbGliL3RyaWFuZ3VsYXRpb24iOjExNn1dLDExMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyb2J1c3QtaW4tc3BoZXJlIilbNF07dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBpKHQsZSxyLGksYSxvKXt2YXIgcz1lLm9wcG9zaXRlKGksYSk7aWYoIShzPDApKXtpZihhPGkpe3ZhciBsPWk7aT1hLGE9bCxsPW8sbz1zLHM9bH1lLmlzQ29uc3RyYWludChpLGEpfHxuKHRbaV0sdFthXSx0W29dLHRbc10pPDAmJnIucHVzaChpLGEpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10Lmxlbmd0aCxvPWUuc3RhcnMscz0wO3M8YTsrK3MpZm9yKHZhciBsPW9bc10sYz0xO2M8bC5sZW5ndGg7Yys9Mil7aWYoISgocD1sW2NdKTxzKSYmIWUuaXNDb25zdHJhaW50KHMscCkpe2Zvcih2YXIgdT1sW2MtMV0sZj0tMSxoPTE7aDxsLmxlbmd0aDtoKz0yKWlmKGxbaC0xXT09PXApe2Y9bFtoXTticmVha31mPDB8fG4odFtzXSx0W3BdLHRbdV0sdFtmXSk8MCYmci5wdXNoKHMscCl9fWZvcig7ci5sZW5ndGg+MDspe2Zvcih2YXIgcD1yLnBvcCgpLGQ9KHM9ci5wb3AoKSx1PS0xLGY9LTEsbD1vW3NdLDEpO2Q8bC5sZW5ndGg7ZCs9Mil7dmFyIGc9bFtkLTFdLG09bFtkXTtnPT09cD9mPW06bT09PXAmJih1PWcpfXU8MHx8ZjwwfHwobih0W3NdLHRbcF0sdFt1XSx0W2ZdKT49MHx8KGUuZmxpcChzLHApLGkodCxlLHIsdSxzLGYpLGkodCxlLHIscyxmLHUpLGkodCxlLHIsZixwLHUpLGkodCxlLHIscCx1LGYpKSl9fX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6OTYsInJvYnVzdC1pbi1zcGhlcmUiOjU0Nn1dLDExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvKXt0aGlzLmNlbGxzPXQsdGhpcy5uZWlnaGJvcj1lLHRoaXMuZmxhZ3M9bix0aGlzLmNvbnN0cmFpbnQ9cix0aGlzLmFjdGl2ZT1pLHRoaXMubmV4dD1hLHRoaXMuYm91bmRhcnk9b31mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfHx0WzJdLWVbMl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNlbGxzKCksbj1yLmxlbmd0aCxpPTA7aTxuOysraSl7dmFyIHM9KHY9cltpXSlbMF0sbD12WzFdLGM9dlsyXTtsPGM/bDxzJiYodlswXT1sLHZbMV09Yyx2WzJdPXMpOmM8cyYmKHZbMF09Yyx2WzFdPXMsdlsyXT1sKX1yLnNvcnQobyk7dmFyIHU9bmV3IEFycmF5KG4pO2ZvcihpPTA7aTx1Lmxlbmd0aDsrK2kpdVtpXT0wO3ZhciBmPVtdLGg9W10scD1uZXcgQXJyYXkoMypuKSxkPW5ldyBBcnJheSgzKm4pLGc9bnVsbDtlJiYoZz1bXSk7dmFyIG09bmV3IGEocixwLGQsdSxmLGgsZyk7Zm9yKGk9MDtpPG47KytpKWZvcih2YXIgdj1yW2ldLHk9MDt5PDM7Kyt5KXtzPXZbeV0sbD12Wyh5KzEpJTNdO3ZhciB4PXBbMyppK3ldPW0ubG9jYXRlKGwscyx0Lm9wcG9zaXRlKGwscykpLGI9ZFszKmkreV09dC5pc0NvbnN0cmFpbnQocyxsKTt4PDAmJihiP2gucHVzaChpKTooZi5wdXNoKGkpLHVbaV09MSksZSYmZy5wdXNoKFtsLHMsLTFdKSl9cmV0dXJuIG19KHQscik7aWYoMD09PWUpcmV0dXJuIHI/bi5jZWxscy5jb25jYXQobi5ib3VuZGFyeSk6bi5jZWxsczt2YXIgaT0xLHM9bi5hY3RpdmUsbD1uLm5leHQsYz1uLmZsYWdzLHU9bi5jZWxscyxmPW4uY29uc3RyYWludCxoPW4ubmVpZ2hib3I7Zm9yKDtzLmxlbmd0aD4wfHxsLmxlbmd0aD4wOyl7Zm9yKDtzLmxlbmd0aD4wOyl7dmFyIHA9cy5wb3AoKTtpZihjW3BdIT09LWkpe2NbcF09aTt1W3BdO2Zvcih2YXIgZD0wO2Q8MzsrK2Qpe3ZhciBnPWhbMypwK2RdO2c+PTAmJjA9PT1jW2ddJiYoZlszKnArZF0/bC5wdXNoKGcpOihzLnB1c2goZyksY1tnXT1pKSl9fX12YXIgbT1sO2w9cyxzPW0sbC5sZW5ndGg9MCxpPS1pfXZhciB2PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT09PXImJih0W24rK109dFtpXSk7cmV0dXJuIHQubGVuZ3RoPW4sdH0odSxjLGUpO2lmKHIpcmV0dXJuIHYuY29uY2F0KG4uYm91bmRhcnkpO3JldHVybiB2fSxhLnByb3RvdHlwZS5sb2NhdGU9KG49WzAsMCwwXSxmdW5jdGlvbih0LGUscil7dmFyIGE9dCxzPWUsbD1yO3JldHVybiBlPHI/ZTx0JiYoYT1lLHM9cixsPXQpOnI8dCYmKGE9cixzPXQsbD1lKSxhPDA/LTE6KG5bMF09YSxuWzFdPXMsblsyXT1sLGkuZXEodGhpcy5jZWxscyxuLG8pKX0pfSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo5Nn1dLDExNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgicm9idXN0LW9yaWVudGF0aW9uIilbM107ZnVuY3Rpb24gYSh0LGUscixuLGkpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuaWR4PXIsdGhpcy5sb3dlcklkcz1uLHRoaXMudXBwZXJJZHM9aX1mdW5jdGlvbiBvKHQsZSxyLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMudHlwZT1yLHRoaXMuaWR4PW59ZnVuY3Rpb24gcyh0LGUpe3ZhciByPXQuYVswXS1lLmFbMF18fHQuYVsxXS1lLmFbMV18fHQudHlwZS1lLnR5cGU7cmV0dXJuIHJ8fCgwIT09dC50eXBlJiYocj1pKHQuYSx0LmIsZS5iKSk/cjp0LmlkeC1lLmlkeCl9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBpKHQuYSx0LmIsZSl9ZnVuY3Rpb24gYyh0LGUscixhLG8pe2Zvcih2YXIgcz1uLmx0KGUsYSxsKSxjPW4uZ3QoZSxhLGwpLHU9czt1PGM7Kyt1KXtmb3IodmFyIGY9ZVt1XSxoPWYubG93ZXJJZHMscD1oLmxlbmd0aDtwPjEmJmkocltoW3AtMl1dLHJbaFtwLTFdXSxhKT4wOyl0LnB1c2goW2hbcC0xXSxoW3AtMl0sb10pLHAtPTE7aC5sZW5ndGg9cCxoLnB1c2gobyk7dmFyIGQ9Zi51cHBlcklkcztmb3IocD1kLmxlbmd0aDtwPjEmJmkocltkW3AtMl1dLHJbZFtwLTFdXSxhKTwwOyl0LnB1c2goW2RbcC0yXSxkW3AtMV0sb10pLHAtPTE7ZC5sZW5ndGg9cCxkLnB1c2gobyl9fWZ1bmN0aW9uIHUodCxlKXt2YXIgcjtyZXR1cm4ocj10LmFbMF08ZS5hWzBdP2kodC5hLHQuYixlLmEpOmkoZS5iLGUuYSx0LmEpKT9yOihyPWUuYlswXTx0LmJbMF0/aSh0LmEsdC5iLGUuYik6aShlLmIsZS5hLHQuYikpfHx0LmlkeC1lLmlkeH1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgaT1uLmxlKHQscix1KSxvPXRbaV0scz1vLnVwcGVySWRzLGw9c1tzLmxlbmd0aC0xXTtvLnVwcGVySWRzPVtsXSx0LnNwbGljZShpKzEsMCxuZXcgYShyLmEsci5iLHIuaWR4LFtsXSxzKSl9ZnVuY3Rpb24gaCh0LGUscil7dmFyIGk9ci5hO3IuYT1yLmIsci5iPWk7dmFyIGE9bi5lcSh0LHIsdSksbz10W2FdO3RbYS0xXS51cHBlcklkcz1vLnVwcGVySWRzLHQuc3BsaWNlKGEsMSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT1bXSxsPTA7bDxyOysrbClpLnB1c2gobmV3IG8odFtsXSxudWxsLDAsbCkpO2ZvcihsPTA7bDxuOysrbCl7dmFyIHU9ZVtsXSxwPXRbdVswXV0sZD10W3VbMV1dO3BbMF08ZFswXT9pLnB1c2gobmV3IG8ocCxkLDIsbCksbmV3IG8oZCxwLDEsbCkpOnBbMF0+ZFswXSYmaS5wdXNoKG5ldyBvKGQscCwyLGwpLG5ldyBvKHAsZCwxLGwpKX1pLnNvcnQocyk7Zm9yKHZhciBnPWlbMF0uYVswXS0oMStNYXRoLmFicyhpWzBdLmFbMF0pKSpNYXRoLnBvdygyLC01MiksbT1bbmV3IGEoW2csMV0sW2csMF0sLTEsW10sW10sW10sW10pXSx2PVtdLHk9KGw9MCxpLmxlbmd0aCk7bDx5OysrbCl7dmFyIHg9aVtsXSxiPXgudHlwZTswPT09Yj9jKHYsbSx0LHguYSx4LmlkeCk6Mj09PWI/ZihtLHQseCk6aChtLHQseCl9cmV0dXJuIHZ9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo5Niwicm9idXN0LW9yaWVudGF0aW9uIjo1NDh9XSwxMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBpKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09W107cmV0dXJuIG5ldyBpKHIsZSl9O3ZhciBhPWkucHJvdG90eXBlO2Z1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj0xLGk9dC5sZW5ndGg7bjxpO24rPTIpaWYodFtuLTFdPT09ZSYmdFtuXT09PXIpcmV0dXJuIHRbbi0xXT10W2ktMl0sdFtuXT10W2ktMV0sdm9pZCh0Lmxlbmd0aD1pLTIpfWEuaXNDb25zdHJhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF07ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1yZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gdFswXT1NYXRoLm1pbihyLGkpLHRbMV09TWF0aC5tYXgocixpKSxuLmVxKHRoaXMuZWRnZXMsdCxlKT49MH19KCksYS5yZW1vdmVUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztvKG5bdF0sZSxyKSxvKG5bZV0scix0KSxvKG5bcl0sdCxlKX0sYS5hZGRUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztuW3RdLnB1c2goZSxyKSxuW2VdLnB1c2gocix0KSxuW3JdLnB1c2godCxlKX0sYS5vcHBvc2l0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN0YXJzW2VdLG49MSxpPXIubGVuZ3RoO248aTtuKz0yKWlmKHJbbl09PT10KXJldHVybiByW24tMV07cmV0dXJuLTF9LGEuZmxpcD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMub3Bwb3NpdGUodCxlKSxuPXRoaXMub3Bwb3NpdGUoZSx0KTt0aGlzLnJlbW92ZVRyaWFuZ2xlKHQsZSxyKSx0aGlzLnJlbW92ZVRyaWFuZ2xlKGUsdCxuKSx0aGlzLmFkZFRyaWFuZ2xlKHQsbixyKSx0aGlzLmFkZFRyaWFuZ2xlKGUscixuKX0sYS5lZGdlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9MillLnB1c2goW2lbYV0saVthKzFdXSk7cmV0dXJuIGV9LGEuY2VsbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdGFycyxlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvO2ErPTIpe3ZhciBzPWlbYV0sbD1pW2ErMV07cjxNYXRoLm1pbihzLGwpJiZlLnB1c2goW3IscyxsXSl9cmV0dXJuIGV9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo5Nn1dLDExNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTEscj0xO3I8dC5sZW5ndGg7KytyKWZvcih2YXIgbj0wO248cjsrK24paWYodFtyXTx0W25dKWU9LWU7ZWxzZSBpZih0W25dPT09dFtyXSlyZXR1cm4gMDtyZXR1cm4gZX19LHt9XSwxMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZHVwIiksaT10KCJyb2J1c3QtbGluZWFyLXNvbHZlIik7ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgsaT0wO2k8bjsrK2kpcis9dFtpXSplW2ldO3JldHVybiByfWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107dFswXS5sZW5ndGg7dmFyIHI9bihbdC5sZW5ndGgrMSx0Lmxlbmd0aCsxXSwxKSxvPW4oW3QubGVuZ3RoKzFdLDEpO3JbZV1bZV09MDtmb3IodmFyIHM9MDtzPGU7KytzKXtmb3IodmFyIGw9MDtsPD1zOysrbClyW2xdW3NdPXJbc11bbF09MiphKHRbc10sdFtsXSk7b1tzXT1hKHRbc10sdFtzXSl9dmFyIGM9aShyLG8pLHU9MCxmPWNbZSsxXTtmb3Iocz0wO3M8Zi5sZW5ndGg7KytzKXUrPWZbc107dmFyIGg9bmV3IEFycmF5KGUpO2ZvcihzPTA7czxlOysrcyl7Zj1jW3NdO3ZhciBwPTA7Zm9yKGw9MDtsPGYubGVuZ3RoOysrbClwKz1mW2xdO2hbc109cC91fXJldHVybiBofWZ1bmN0aW9uIHModCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgZT10WzBdLmxlbmd0aCxyPW4oW2VdKSxpPW8odCksYT0wO2E8dC5sZW5ndGg7KythKWZvcih2YXIgcz0wO3M8ZTsrK3MpcltzXSs9dFthXVtzXSppW2FdO3JldHVybiByfXMuYmFyeWNlbmV0cmljPW8sZS5leHBvcnRzPXN9LHtkdXA6MTc2LCJyb2J1c3QtbGluZWFyLXNvbHZlIjo1NDd9XSwxMTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4odCkscj0wLGk9MDtpPHQubGVuZ3RoOysraSlmb3IodmFyIGE9dFtpXSxvPTA7bzxlLmxlbmd0aDsrK28pcis9TWF0aC5wb3coYVtvXS1lW29dLDIpO3JldHVybiBNYXRoLnNxcnQoci90Lmxlbmd0aCl9O3ZhciBuPXQoImNpcmN1bWNlbnRlciIpfSx7Y2lyY3VtY2VudGVyOjExOH1dLDEyMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU8cj90PGU/ZTp0PnI/cjp0OnQ8cj9yOnQ+ZT9lOnR9fSx7fV0sMTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG47aWYocil7bj1lO2Zvcih2YXIgaT1uZXcgQXJyYXkoZS5sZW5ndGgpLGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG89ZVthXTtpW2FdPVtvWzBdLG9bMV0sclthXV19ZT1pfXZhciBzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1kKHQsW10scCh0KSk7cmV0dXJuIHYoZSxuLHIpLCEhbn0odCxlLCEhcik7Zm9yKDt5KHQsZSwhIXIpOylzPSEwO2lmKHImJnMpe24ubGVuZ3RoPTAsci5sZW5ndGg9MDtmb3IoYT0wO2E8ZS5sZW5ndGg7KythKXtvPWVbYV07bi5wdXNoKFtvWzBdLG9bMV1dKSxyLnB1c2gob1syXSl9fXJldHVybiBzfTt2YXIgbj10KCJ1bmlvbi1maW5kIiksaT10KCJib3gtaW50ZXJzZWN0IiksYT10KCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiKSxvPXQoImJpZy1yYXQiKSxzPXQoImJpZy1yYXQvY21wIiksbD10KCJiaWctcmF0L3RvLWZsb2F0IiksYz10KCJyYXQtdmVjIiksdT10KCJuZXh0YWZ0ZXIiKSxmPXQoIi4vbGliL3JhdC1zZWctaW50ZXJzZWN0Iik7ZnVuY3Rpb24gaCh0KXt2YXIgZT1sKHQpO3JldHVyblt1KGUsLTEvMCksdShlLDEvMCldfWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2Vbcl09W3UoblswXSwtMS8wKSx1KG5bMV0sLTEvMCksdShuWzBdLDEvMCksdShuWzFdLDEvMCldfXJldHVybiBlfWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPW5ldyBuKGEpLHM9W10sbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgYz1lW2xdLGY9aChjWzBdKSxwPWgoY1sxXSk7cy5wdXNoKFt1KGZbMF0sLTEvMCksdShwWzBdLC0xLzApLHUoZlsxXSwxLzApLHUocFsxXSwxLzApXSl9aShzLChmdW5jdGlvbih0LGUpe28ubGluayh0LGUpfSkpO3ZhciBkPSEwLGc9bmV3IEFycmF5KGEpO2ZvcihsPTA7bDxhOysrbCl7KHY9by5maW5kKGwpKSE9PWwmJihkPSExLHRbdl09W01hdGgubWluKHRbbF1bMF0sdFt2XVswXSksTWF0aC5taW4odFtsXVsxXSx0W3ZdWzFdKV0pfWlmKGQpcmV0dXJuIG51bGw7dmFyIG09MDtmb3IobD0wO2w8YTsrK2wpe3ZhciB2Oyh2PW8uZmluZChsKSk9PT1sPyhnW2xdPW0sdFttKytdPXRbbF0pOmdbbF09LTF9dC5sZW5ndGg9bTtmb3IobD0wO2w8YTsrK2wpZ1tsXTwwJiYoZ1tsXT1nW28uZmluZChsKV0pO3JldHVybiBnfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXRbMF0tZVswXXx8dFsxXS1lWzFdO3JldHVybiByfHwodFsyXTxlWzJdPy0xOnRbMl0+ZVsyXT8xOjApfWZ1bmN0aW9uIHYodCxlLHIpe2lmKDAhPT10Lmxlbmd0aCl7aWYoZSlmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9ZVsobz10W25dKVswXV0sYT1lW29bMV1dO29bMF09TWF0aC5taW4oaSxhKSxvWzFdPU1hdGgubWF4KGksYSl9ZWxzZSBmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgbztpPShvPXRbbl0pWzBdLGE9b1sxXTtvWzBdPU1hdGgubWluKGksYSksb1sxXT1NYXRoLm1heChpLGEpfXI/dC5zb3J0KG0pOnQuc29ydChnKTt2YXIgcz0xO2ZvcihuPTE7bjx0Lmxlbmd0aDsrK24pe3ZhciBsPXRbbi0xXSxjPXRbbl07KGNbMF0hPT1sWzBdfHxjWzFdIT09bFsxXXx8ciYmY1syXSE9PWxbMl0pJiYodFtzKytdPWMpfXQubGVuZ3RoPXN9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgaT1lW25dLGE9dFtpWzBdXSxvPXRbaVsxXV07cltuXT1bdShNYXRoLm1pbihhWzBdLG9bMF0pLC0xLzApLHUoTWF0aC5taW4oYVsxXSxvWzFdKSwtMS8wKSx1KE1hdGgubWF4KGFbMF0sb1swXSksMS8wKSx1KE1hdGgubWF4KGFbMV0sb1sxXSksMS8wKV19cmV0dXJuIHJ9KHQsZSksaD1mdW5jdGlvbih0LGUscil7dmFyIG49W107cmV0dXJuIGkociwoZnVuY3Rpb24ocixpKXt2YXIgbz1lW3JdLHM9ZVtpXTtpZihvWzBdIT09c1swXSYmb1swXSE9PXNbMV0mJm9bMV0hPT1zWzBdJiZvWzFdIT09c1sxXSl7dmFyIGw9dFtvWzBdXSxjPXRbb1sxXV0sdT10W3NbMF1dLGY9dFtzWzFdXTthKGwsYyx1LGYpJiZuLnB1c2goW3IsaV0pfX0pKSxufSh0LGUsbiksZz1wKHQpLG09ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89W107cmV0dXJuIGkocixuLChmdW5jdGlvbihyLG4pe3ZhciBpPWVbcl07aWYoaVswXSE9PW4mJmlbMV0hPT1uKXt2YXIgcz10W25dLGw9dFtpWzBdXSxjPXRbaVsxXV07YShsLGMscyxzKSYmby5wdXNoKFtyLG5dKX19KSksb30odCxlLG4sZykseT1kKHQsZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSx1LGg9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybltvKHRbMF0pLG8odFsxXSldfSkpO2ZvcihhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBwPXJbYV07dT1wWzBdO3ZhciBkPXBbMV0sZz1lW3VdLG09ZVtkXSx2PWYoYyh0W2dbMF1dKSxjKHRbZ1sxXV0pLGModFttWzBdXSksYyh0W21bMV1dKSk7aWYodil7dmFyIHk9dC5sZW5ndGg7dC5wdXNoKFtsKHZbMF0pLGwodlsxXSldKSxoLnB1c2godiksbi5wdXNoKFt1LHldLFtkLHldKX19Zm9yKG4uc29ydCgoZnVuY3Rpb24odCxlKXtpZih0WzBdIT09ZVswXSlyZXR1cm4gdFswXS1lWzBdO3ZhciByPWhbdFsxXV0sbj1oW2VbMV1dO3JldHVybiBzKHJbMF0sblswXSl8fHMoclsxXSxuWzFdKX0pKSxhPW4ubGVuZ3RoLTE7YT49MDstLWEpe3ZhciB4PWVbdT0oUz1uW2FdKVswXV0sYj14WzBdLF89eFsxXSx3PXRbYl0sVD10W19dO2lmKCh3WzBdLVRbMF18fHdbMV0tVFsxXSk8MCl7dmFyIGs9YjtiPV8sXz1rfXhbMF09Yjt2YXIgTSxBPXhbMV09U1sxXTtmb3IoaSYmKE09eFsyXSk7YT4wJiZuW2EtMV1bMF09PT11Oyl7dmFyIFMsRT0oUz1uWy0tYV0pWzFdO2k/ZS5wdXNoKFtBLEUsTV0pOmUucHVzaChbQSxFXSksQT1FfWk/ZS5wdXNoKFtBLF8sTV0pOmUucHVzaChbQSxfXSl9cmV0dXJuIGh9KHQsZSxoLG0scikpO3JldHVybiB2KGUseSxyKSwhIXl8fChoLmxlbmd0aD4wfHxtLmxlbmd0aD4wKX19LHsiLi9saWIvcmF0LXNlZy1pbnRlcnNlY3QiOjEyMiwiYmlnLXJhdCI6ODMsImJpZy1yYXQvY21wIjo4MSwiYmlnLXJhdC90by1mbG9hdCI6OTUsImJveC1pbnRlcnNlY3QiOjEwMSxuZXh0YWZ0ZXI6NDk2LCJyYXQtdmVjIjo1MzAsInJvYnVzdC1zZWdtZW50LWludGVyc2VjdCI6NTUxLCJ1bmlvbi1maW5kIjo1OTZ9XSwxMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXMoZSx0KSxmPXMobixyKSxoPXUoYSxmKTtpZigwPT09byhoKSlyZXR1cm4gbnVsbDt2YXIgcD1zKHQsciksZD11KGYscCksZz1pKGQsaCksbT1jKGEsZyk7cmV0dXJuIGwodCxtKX07dmFyIG49dCgiYmlnLXJhdC9tdWwiKSxpPXQoImJpZy1yYXQvZGl2IiksYT10KCJiaWctcmF0L3N1YiIpLG89dCgiYmlnLXJhdC9zaWduIikscz10KCJyYXQtdmVjL3N1YiIpLGw9dCgicmF0LXZlYy9hZGQiKSxjPXQoInJhdC12ZWMvbXVscyIpO2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gYShuKHRbMF0sZVsxXSksbih0WzFdLGVbMF0pKX19LHsiYmlnLXJhdC9kaXYiOjgyLCJiaWctcmF0L211bCI6OTIsImJpZy1yYXQvc2lnbiI6OTMsImJpZy1yYXQvc3ViIjo5NCwicmF0LXZlYy9hZGQiOjUyOSwicmF0LXZlYy9tdWxzIjo1MzEsInJhdC12ZWMvc3ViIjo1MzJ9XSwxMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY2xhbXAiKTtmdW5jdGlvbiBpKHQsZSl7bnVsbD09ZSYmKGU9ITApO3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM107cmV0dXJuIG51bGw9PW8mJihvPWU/MToyNTUpLGUmJihyKj0yNTUsaSo9MjU1LGEqPTI1NSxvKj0yNTUpLDE2Nzc3MjE2KihyPTI1NSZuKHIsMCwyNTUpKSsoKGk9MjU1Jm4oaSwwLDI1NSkpPDwxNikrKChhPTI1NSZuKGEsMCwyNTUpKTw8OCkrKG89MjU1Jm4obywwLDI1NSkpfWUuZXhwb3J0cz1pLGUuZXhwb3J0cy50bz1pLGUuZXhwb3J0cy5mcm9tPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQ9K3QpPj4+MjQsbj0oMTY3MTE2ODAmdCk+Pj4xNixpPSg2NTI4MCZ0KT4+PjgsYT0yNTUmdDtyZXR1cm4hMT09PWU/W3IsbixpLGFdOltyLzI1NSxuLzI1NSxpLzI1NSxhLzI1NV19fSx7Y2xhbXA6MTIwfV0sMTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YWxpY2VibHVlOlsyNDAsMjQ4LDI1NV0sYW50aXF1ZXdoaXRlOlsyNTAsMjM1LDIxNV0sYXF1YTpbMCwyNTUsMjU1XSxhcXVhbWFyaW5lOlsxMjcsMjU1LDIxMl0sYXp1cmU6WzI0MCwyNTUsMjU1XSxiZWlnZTpbMjQ1LDI0NSwyMjBdLGJpc3F1ZTpbMjU1LDIyOCwxOTZdLGJsYWNrOlswLDAsMF0sYmxhbmNoZWRhbG1vbmQ6WzI1NSwyMzUsMjA1XSxibHVlOlswLDAsMjU1XSxibHVldmlvbGV0OlsxMzgsNDMsMjI2XSxicm93bjpbMTY1LDQyLDQyXSxidXJseXdvb2Q6WzIyMiwxODQsMTM1XSxjYWRldGJsdWU6Wzk1LDE1OCwxNjBdLGNoYXJ0cmV1c2U6WzEyNywyNTUsMF0sY2hvY29sYXRlOlsyMTAsMTA1LDMwXSxjb3JhbDpbMjU1LDEyNyw4MF0sY29ybmZsb3dlcmJsdWU6WzEwMCwxNDksMjM3XSxjb3Juc2lsazpbMjU1LDI0OCwyMjBdLGNyaW1zb246WzIyMCwyMCw2MF0sY3lhbjpbMCwyNTUsMjU1XSxkYXJrYmx1ZTpbMCwwLDEzOV0sZGFya2N5YW46WzAsMTM5LDEzOV0sZGFya2dvbGRlbnJvZDpbMTg0LDEzNCwxMV0sZGFya2dyYXk6WzE2OSwxNjksMTY5XSxkYXJrZ3JlZW46WzAsMTAwLDBdLGRhcmtncmV5OlsxNjksMTY5LDE2OV0sZGFya2toYWtpOlsxODksMTgzLDEwN10sZGFya21hZ2VudGE6WzEzOSwwLDEzOV0sZGFya29saXZlZ3JlZW46Wzg1LDEwNyw0N10sZGFya29yYW5nZTpbMjU1LDE0MCwwXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0XSxkYXJrcmVkOlsxMzksMCwwXSxkYXJrc2FsbW9uOlsyMzMsMTUwLDEyMl0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0M10sZGFya3NsYXRlYmx1ZTpbNzIsNjEsMTM5XSxkYXJrc2xhdGVncmF5Ols0Nyw3OSw3OV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzldLGRhcmt0dXJxdW9pc2U6WzAsMjA2LDIwOV0sZGFya3Zpb2xldDpbMTQ4LDAsMjExXSxkZWVwcGluazpbMjU1LDIwLDE0N10sZGVlcHNreWJsdWU6WzAsMTkxLDI1NV0sZGltZ3JheTpbMTA1LDEwNSwxMDVdLGRpbWdyZXk6WzEwNSwxMDUsMTA1XSxkb2RnZXJibHVlOlszMCwxNDQsMjU1XSxmaXJlYnJpY2s6WzE3OCwzNCwzNF0sZmxvcmFsd2hpdGU6WzI1NSwyNTAsMjQwXSxmb3Jlc3RncmVlbjpbMzQsMTM5LDM0XSxmdWNoc2lhOlsyNTUsMCwyNTVdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjBdLGdob3N0d2hpdGU6WzI0OCwyNDgsMjU1XSxnb2xkOlsyNTUsMjE1LDBdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMl0sZ3JheTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10sZ3JleTpbMTI4LDEyOCwxMjhdLGhvbmV5ZGV3OlsyNDAsMjU1LDI0MF0saG90cGluazpbMjU1LDEwNSwxODBdLGluZGlhbnJlZDpbMjA1LDkyLDkyXSxpbmRpZ286Wzc1LDAsMTMwXSxpdm9yeTpbMjU1LDI1NSwyNDBdLGtoYWtpOlsyNDAsMjMwLDE0MF0sbGF2ZW5kZXI6WzIzMCwyMzAsMjUwXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NV0sbGF3bmdyZWVuOlsxMjQsMjUyLDBdLGxlbW9uY2hpZmZvbjpbMjU1LDI1MCwyMDVdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzBdLGxpZ2h0Y29yYWw6WzI0MCwxMjgsMTI4XSxsaWdodGN5YW46WzIyNCwyNTUsMjU1XSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTBdLGxpZ2h0Z3JheTpbMjExLDIxMSwyMTFdLGxpZ2h0Z3JlZW46WzE0NCwyMzgsMTQ0XSxsaWdodGdyZXk6WzIxMSwyMTEsMjExXSxsaWdodHBpbms6WzI1NSwxODIsMTkzXSxsaWdodHNhbG1vbjpbMjU1LDE2MCwxMjJdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzBdLGxpZ2h0c2t5Ymx1ZTpbMTM1LDIwNiwyNTBdLGxpZ2h0c2xhdGVncmF5OlsxMTksMTM2LDE1M10sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzXSxsaWdodHN0ZWVsYmx1ZTpbMTc2LDE5NiwyMjJdLGxpZ2h0eWVsbG93OlsyNTUsMjU1LDIyNF0sbGltZTpbMCwyNTUsMF0sbGltZWdyZWVuOls1MCwyMDUsNTBdLGxpbmVuOlsyNTAsMjQwLDIzMF0sbWFnZW50YTpbMjU1LDAsMjU1XSxtYXJvb246WzEyOCwwLDBdLG1lZGl1bWFxdWFtYXJpbmU6WzEwMiwyMDUsMTcwXSxtZWRpdW1ibHVlOlswLDAsMjA1XSxtZWRpdW1vcmNoaWQ6WzE4Niw4NSwyMTFdLG1lZGl1bXB1cnBsZTpbMTQ3LDExMiwyMTldLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzXSxtZWRpdW1zbGF0ZWJsdWU6WzEyMywxMDQsMjM4XSxtZWRpdW1zcHJpbmdncmVlbjpbMCwyNTAsMTU0XSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDRdLG1lZGl1bXZpb2xldHJlZDpbMTk5LDIxLDEzM10sbWlkbmlnaHRibHVlOlsyNSwyNSwxMTJdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTBdLG1pc3R5cm9zZTpbMjU1LDIyOCwyMjVdLG1vY2Nhc2luOlsyNTUsMjI4LDE4MV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczXSxuYXZ5OlswLDAsMTI4XSxvbGRsYWNlOlsyNTMsMjQ1LDIzMF0sb2xpdmU6WzEyOCwxMjgsMF0sb2xpdmVkcmFiOlsxMDcsMTQyLDM1XSxvcmFuZ2U6WzI1NSwxNjUsMF0sb3JhbmdlcmVkOlsyNTUsNjksMF0sb3JjaGlkOlsyMTgsMTEyLDIxNF0scGFsZWdvbGRlbnJvZDpbMjM4LDIzMiwxNzBdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTJdLHBhbGV0dXJxdW9pc2U6WzE3NSwyMzgsMjM4XSxwYWxldmlvbGV0cmVkOlsyMTksMTEyLDE0N10scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTNdLHBlYWNocHVmZjpbMjU1LDIxOCwxODVdLHBlcnU6WzIwNSwxMzMsNjNdLHBpbms6WzI1NSwxOTIsMjAzXSxwbHVtOlsyMjEsMTYwLDIyMV0scG93ZGVyYmx1ZTpbMTc2LDIyNCwyMzBdLHB1cnBsZTpbMTI4LDAsMTI4XSxyZWJlY2NhcHVycGxlOlsxMDIsNTEsMTUzXSxyZWQ6WzI1NSwwLDBdLHJvc3licm93bjpbMTg4LDE0MywxNDNdLHJveWFsYmx1ZTpbNjUsMTA1LDIyNV0sc2FkZGxlYnJvd246WzEzOSw2OSwxOV0sc2FsbW9uOlsyNTAsMTI4LDExNF0sc2FuZHlicm93bjpbMjQ0LDE2NCw5Nl0sc2VhZ3JlZW46WzQ2LDEzOSw4N10sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4XSxzaWVubmE6WzE2MCw4Miw0NV0sc2lsdmVyOlsxOTIsMTkyLDE5Ml0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzVdLHNsYXRlYmx1ZTpbMTA2LDkwLDIwNV0sc2xhdGVncmF5OlsxMTIsMTI4LDE0NF0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NF0sc25vdzpbMjU1LDI1MCwyNTBdLHNwcmluZ2dyZWVuOlswLDI1NSwxMjddLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MF0sdGFuOlsyMTAsMTgwLDE0MF0sdGVhbDpbMCwxMjgsMTI4XSx0aGlzdGxlOlsyMTYsMTkxLDIxNl0sdG9tYXRvOlsyNTUsOTksNzFdLHR1cnF1b2lzZTpbNjQsMjI0LDIwOF0sdmlvbGV0OlsyMzgsMTMwLDIzOF0sd2hlYXQ6WzI0NSwyMjIsMTc5XSx3aGl0ZTpbMjU1LDI1NSwyNTVdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1XSx5ZWxsb3c6WzI1NSwyNTUsMF0seWVsbG93Z3JlZW46WzE1NCwyMDUsNTBdfX0se31dLDEyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb2xvci1yZ2JhIiksaT10KCJjbGFtcCIpLGE9dCgiZHR5cGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsiZmxvYXQiIT09ZSYmZXx8KGU9ImFycmF5IiksInVpbnQiPT09ZSYmKGU9InVpbnQ4IiksInVpbnRfY2xhbXBlZCI9PT1lJiYoZT0idWludDhfY2xhbXBlZCIpO3ZhciByPW5ldyhhKGUpKSg0KSxvPSJ1aW50OCIhPT1lJiYidWludDhfY2xhbXBlZCIhPT1lO3JldHVybiB0Lmxlbmd0aCYmInN0cmluZyIhPXR5cGVvZiB0fHwoKHQ9bih0KSlbMF0vPTI1NSx0WzFdLz0yNTUsdFsyXS89MjU1KSxmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8ISEoQXJyYXkuaXNBcnJheSh0KSYmKHRbMF0+MXx8MD09PXRbMF0pJiYodFsxXT4xfHwwPT09dFsxXSkmJih0WzJdPjF8fDA9PT10WzJdKSYmKCF0WzNdfHx0WzNdPjEpKX0odCk/KHJbMF09dFswXSxyWzFdPXRbMV0sclsyXT10WzJdLHJbM109bnVsbCE9dFszXT90WzNdOjI1NSxvJiYoclswXS89MjU1LHJbMV0vPTI1NSxyWzJdLz0yNTUsclszXS89MjU1KSxyKToobz8oclswXT10WzBdLHJbMV09dFsxXSxyWzJdPXRbMl0sclszXT1udWxsIT10WzNdP3RbM106MSk6KHJbMF09aShNYXRoLmZsb29yKDI1NSp0WzBdKSwwLDI1NSksclsxXT1pKE1hdGguZmxvb3IoMjU1KnRbMV0pLDAsMjU1KSxyWzJdPWkoTWF0aC5mbG9vcigyNTUqdFsyXSksMCwyNTUpLHJbM109bnVsbD09dFszXT8yNTU6aShNYXRoLmZsb29yKDI1NSp0WzNdKSwwLDI1NSkpLHIpfX0se2NsYW1wOjEyMCwiY29sb3ItcmdiYSI6MTI3LGR0eXBlOjE3NX1dLDEyNjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItbmFtZSIpLGk9dCgiaXMtcGxhaW4tb2JqIiksYT10KCJkZWZpbmVkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHMsbD1bXSxjPTE7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlmKG5bdF0pbD1uW3RdLnNsaWNlKCkscz0icmdiIjtlbHNlIGlmKCJ0cmFuc3BhcmVudCI9PT10KWM9MCxzPSJyZ2IiLGw9WzAsMCwwXTtlbHNlIGlmKC9eI1tBLUZhLWYwLTldKyQvLnRlc3QodCkpe3ZhciB1PShwPXQuc2xpY2UoMSkpLmxlbmd0aDtjPTEsdTw9ND8obD1bcGFyc2VJbnQocFswXStwWzBdLDE2KSxwYXJzZUludChwWzFdK3BbMV0sMTYpLHBhcnNlSW50KHBbMl0rcFsyXSwxNildLDQ9PT11JiYoYz1wYXJzZUludChwWzNdK3BbM10sMTYpLzI1NSkpOihsPVtwYXJzZUludChwWzBdK3BbMV0sMTYpLHBhcnNlSW50KHBbMl0rcFszXSwxNikscGFyc2VJbnQocFs0XStwWzVdLDE2KV0sOD09PXUmJihjPXBhcnNlSW50KHBbNl0rcFs3XSwxNikvMjU1KSksbFswXXx8KGxbMF09MCksbFsxXXx8KGxbMV09MCksbFsyXXx8KGxbMl09MCkscz0icmdiIn1lbHNlIGlmKGU9L14oKD86cmdifGhzW2x2Yl18aHdifGNteWs/fHh5W3p5XXxncmF5fGxhYnxsY2h1P3Y/fFtseV11dnxsbXMpYT8pXHMqXCgoW15cKV0qKVwpLy5leGVjKHQpKXt2YXIgZj1lWzFdLGg9InJnYiI9PT1mLHA9Zi5yZXBsYWNlKC9hJC8sIiIpO3M9cDt1PSJjbXlrIj09PXA/NDoiZ3JheSI9PT1wPzE6MztsPWVbMl0udHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKChmdW5jdGlvbih0LGUpe2lmKC8lJC8udGVzdCh0KSlyZXR1cm4gZT09PXU/cGFyc2VGbG9hdCh0KS8xMDA6InJnYiI9PT1wPzI1NSpwYXJzZUZsb2F0KHQpLzEwMDpwYXJzZUZsb2F0KHQpO2lmKCJoIj09PXBbZV0pe2lmKC9kZWckLy50ZXN0KHQpKXJldHVybiBwYXJzZUZsb2F0KHQpO2lmKHZvaWQgMCE9PW9bdF0pcmV0dXJuIG9bdF19cmV0dXJuIHBhcnNlRmxvYXQodCl9KSksZj09PXAmJmwucHVzaCgxKSxjPWh8fHZvaWQgMD09PWxbdV0/MTpsW3VdLGw9bC5zbGljZSgwLHUpfWVsc2UgdC5sZW5ndGg+MTAmJi9bMC05XSg/OlxzfFwvKS8udGVzdCh0KSYmKGw9dC5tYXRjaCgvKFswLTldKykvZykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pKSxzPXQubWF0Y2goLyhbYS16XSkvZ2kpLmpvaW4oIiIpLnRvTG93ZXJDYXNlKCkpO2Vsc2UgaWYoaXNOYU4odCkpaWYoaSh0KSl7dmFyIGQ9YSh0LnIsdC5yZWQsdC5SLG51bGwpO251bGwhPT1kPyhzPSJyZ2IiLGw9W2QsYSh0LmcsdC5ncmVlbix0LkcpLGEodC5iLHQuYmx1ZSx0LkIpXSk6KHM9ImhzbCIsbD1bYSh0LmgsdC5odWUsdC5IKSxhKHQucyx0LnNhdHVyYXRpb24sdC5TKSxhKHQubCx0LmxpZ2h0bmVzcyx0LkwsdC5iLHQuYnJpZ2h0bmVzcyldKSxjPWEodC5hLHQuYWxwaGEsdC5vcGFjaXR5LDEpLG51bGwhPXQub3BhY2l0eSYmKGMvPTEwMCl9ZWxzZShBcnJheS5pc0FycmF5KHQpfHxyLkFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyh0KSkmJihsPVt0WzBdLHRbMV0sdFsyXV0scz0icmdiIixjPTQ9PT10Lmxlbmd0aD90WzNdOjEpO2Vsc2Ugcz0icmdiIixsPVt0Pj4+MTYsKDY1MjgwJnQpPj4+OCwyNTUmdF07cmV0dXJue3NwYWNlOnMsdmFsdWVzOmwsYWxwaGE6Y319O3ZhciBvPXtyZWQ6MCxvcmFuZ2U6NjAseWVsbG93OjEyMCxncmVlbjoxODAsYmx1ZToyNDAscHVycGxlOjMwMH19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7ImNvbG9yLW5hbWUiOjEyNCxkZWZpbmVkOjE3MCwiaXMtcGxhaW4tb2JqIjo0Njl9XSwxMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItcGFyc2UiKSxpPXQoImNvbG9yLXNwYWNlL2hzbCIpLGE9dCgiY2xhbXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscj1uKHQpO3JldHVybiByLnNwYWNlPygoZT1BcnJheSgzKSlbMF09YShyLnZhbHVlc1swXSwwLDI1NSksZVsxXT1hKHIudmFsdWVzWzFdLDAsMjU1KSxlWzJdPWEoci52YWx1ZXNbMl0sMCwyNTUpLCJoIj09PXIuc3BhY2VbMF0mJihlPWkucmdiKGUpKSxlLnB1c2goYShyLmFscGhhLDAsMSkpLGUpOltdfX0se2NsYW1wOjEyMCwiY29sb3ItcGFyc2UiOjEyNiwiY29sb3Itc3BhY2UvaHNsIjoxMjh9XSwxMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9yZ2IiKTtlLmV4cG9ydHM9e25hbWU6ImhzbCIsbWluOlswLDAsMF0sbWF4OlszNjAsMTAwLDEwMF0sY2hhbm5lbDpbImh1ZSIsInNhdHVyYXRpb24iLCJsaWdodG5lc3MiXSxhbGlhczpbIkhTTCJdLHJnYjpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dFswXS8zNjAscz10WzFdLzEwMCxsPXRbMl0vMTAwO2lmKDA9PT1zKXJldHVyblthPTI1NSpsLGEsYV07ZT0yKmwtKHI9bDwuNT9sKigxK3MpOmwrcy1sKnMpLGk9WzAsMCwwXTtmb3IodmFyIGM9MDtjPDM7YysrKShuPW8rMS8zKi0oYy0xKSk8MD9uKys6bj4xJiZuLS0sYT02Km48MT9lKzYqKHItZSkqbjoyKm48MT9yOjMqbjwyP2UrKHItZSkqKDIvMy1uKSo2OmUsaVtjXT0yNTUqYTtyZXR1cm4gaX19LG4uaHNsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10WzBdLzI1NSxpPXRbMV0vMjU1LGE9dFsyXS8yNTUsbz1NYXRoLm1pbihuLGksYSkscz1NYXRoLm1heChuLGksYSksbD1zLW87cmV0dXJuIHM9PT1vP2U9MDpuPT09cz9lPShpLWEpL2w6aT09PXM/ZT0yKyhhLW4pL2w6YT09PXMmJihlPTQrKG4taSkvbCksKGU9TWF0aC5taW4oNjAqZSwzNjApKTwwJiYoZSs9MzYwKSxyPShvK3MpLzIsW2UsMTAwKihzPT09bz8wOnI8PS41P2wvKHMrbyk6bC8oMi1zLW8pKSwxMDAqcl19fSx7Ii4vcmdiIjoxMjl9XSwxMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtuYW1lOiJyZ2IiLG1pbjpbMCwwLDBdLG1heDpbMjU1LDI1NSwyNTVdLGNoYW5uZWw6WyJyZWQiLCJncmVlbiIsImJsdWUiXSxhbGlhczpbIlJHQiJdfX0se31dLDEzMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17amV0Olt7aW5kZXg6MCxyZ2I6WzAsMCwxMzFdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsNjAsMTcwXX0se2luZGV4Oi4zNzUscmdiOls1LDI1NSwyNTVdfSx7aW5kZXg6LjYyNSxyZ2I6WzI1NSwyNTUsMF19LHtpbmRleDouODc1LHJnYjpbMjUwLDAsMF19LHtpbmRleDoxLHJnYjpbMTI4LDAsMF19XSxoc3Y6W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDouMTY5LHJnYjpbMjUzLDI1NSwyXX0se2luZGV4Oi4xNzMscmdiOlsyNDcsMjU1LDJdfSx7aW5kZXg6LjMzNyxyZ2I6WzAsMjUyLDRdfSx7aW5kZXg6LjM0MSxyZ2I6WzAsMjUyLDEwXX0se2luZGV4Oi41MDYscmdiOlsxLDI0OSwyNTVdfSx7aW5kZXg6LjY3MSxyZ2I6WzIsMCwyNTNdfSx7aW5kZXg6LjY3NSxyZ2I6WzgsMCwyNTNdfSx7aW5kZXg6LjgzOSxyZ2I6WzI1NSwwLDI1MV19LHtpbmRleDouODQzLHJnYjpbMjU1LDAsMjQ1XX0se2luZGV4OjEscmdiOlsyNTUsMCw2XX1dLGhvdDpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMyxyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjYscmdiOlsyNTUsMjEwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGNvb2w6W3tpbmRleDowLHJnYjpbMCwyNTUsMjU1XX0se2luZGV4OjEscmdiOlsyNTUsMCwyNTVdfV0sc3ByaW5nOlt7aW5kZXg6MCxyZ2I6WzI1NSwwLDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwwXX1dLHN1bW1lcjpbe2luZGV4OjAscmdiOlswLDEyOCwxMDJdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMTAyXX1dLGF1dHVtbjpbe2luZGV4OjAscmdiOlsyNTUsMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDBdfV0sd2ludGVyOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzAsMjU1LDEyOF19XSxib25lOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4zNzYscmdiOls4NCw4NCwxMTZdfSx7aW5kZXg6Ljc1MyxyZ2I6WzE2OSwyMDAsMjAwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxjb3BwZXI6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjgwNCxyZ2I6WzI1NSwxNjAsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMTk5LDEyN119XSxncmV5czpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0seWlnbmJ1Olt7aW5kZXg6MCxyZ2I6WzgsMjksODhdfSx7aW5kZXg6LjEyNSxyZ2I6WzM3LDUyLDE0OF19LHtpbmRleDouMjUscmdiOlszNCw5NCwxNjhdfSx7aW5kZXg6LjM3NSxyZ2I6WzI5LDE0NSwxOTJdfSx7aW5kZXg6LjUscmdiOls2NSwxODIsMTk2XX0se2luZGV4Oi42MjUscmdiOlsxMjcsMjA1LDE4N119LHtpbmRleDouNzUscmdiOlsxOTksMjMzLDE4MF19LHtpbmRleDouODc1LHJnYjpbMjM3LDI0OCwyMTddfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjE3XX1dLGdyZWVuczpbe2luZGV4OjAscmdiOlswLDY4LDI3XX0se2luZGV4Oi4xMjUscmdiOlswLDEwOSw0NF19LHtpbmRleDouMjUscmdiOlszNSwxMzksNjldfSx7aW5kZXg6LjM3NSxyZ2I6WzY1LDE3MSw5M119LHtpbmRleDouNSxyZ2I6WzExNiwxOTYsMTE4XX0se2luZGV4Oi42MjUscmdiOlsxNjEsMjE3LDE1NV19LHtpbmRleDouNzUscmdiOlsxOTksMjMzLDE5Ml19LHtpbmRleDouODc1LHJnYjpbMjI5LDI0NSwyMjRdfSx7aW5kZXg6MSxyZ2I6WzI0NywyNTIsMjQ1XX1dLHlpb3JyZDpbe2luZGV4OjAscmdiOlsxMjgsMCwzOF19LHtpbmRleDouMTI1LHJnYjpbMTg5LDAsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMjI3LDI2LDI4XX0se2luZGV4Oi4zNzUscmdiOlsyNTIsNzgsNDJdfSx7aW5kZXg6LjUscmdiOlsyNTMsMTQxLDYwXX0se2luZGV4Oi42MjUscmdiOlsyNTQsMTc4LDc2XX0se2luZGV4Oi43NSxyZ2I6WzI1NCwyMTcsMTE4XX0se2luZGV4Oi44NzUscmdiOlsyNTUsMjM3LDE2MF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyMDRdfV0sYmx1ZXJlZDpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHJkYnU6W3tpbmRleDowLHJnYjpbNSwxMCwxNzJdfSx7aW5kZXg6LjM1LHJnYjpbMTA2LDEzNywyNDddfSx7aW5kZXg6LjUscmdiOlsxOTAsMTkwLDE5MF19LHtpbmRleDouNixyZ2I6WzIyMCwxNzAsMTMyXX0se2luZGV4Oi43LHJnYjpbMjMwLDE0NSw5MF19LHtpbmRleDoxLHJnYjpbMTc4LDEwLDI4XX1dLHBpY25pYzpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4Oi4xLHJnYjpbNTEsMTUzLDI1NV19LHtpbmRleDouMixyZ2I6WzEwMiwyMDQsMjU1XX0se2luZGV4Oi4zLHJnYjpbMTUzLDIwNCwyNTVdfSx7aW5kZXg6LjQscmdiOlsyMDQsMjA0LDI1NV19LHtpbmRleDouNSxyZ2I6WzI1NSwyNTUsMjU1XX0se2luZGV4Oi42LHJnYjpbMjU1LDIwNCwyNTVdfSx7aW5kZXg6LjcscmdiOlsyNTUsMTUzLDI1NV19LHtpbmRleDouOCxyZ2I6WzI1NSwxMDIsMjA0XX0se2luZGV4Oi45LHJnYjpbMjU1LDEwMiwxMDJdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scmFpbmJvdzpbe2luZGV4OjAscmdiOlsxNTAsMCw5MF19LHtpbmRleDouMTI1LHJnYjpbMCwwLDIwMF19LHtpbmRleDouMjUscmdiOlswLDI1LDI1NV19LHtpbmRleDouMzc1LHJnYjpbMCwxNTIsMjU1XX0se2luZGV4Oi41LHJnYjpbNDQsMjU1LDE1MF19LHtpbmRleDouNjI1LHJnYjpbMTUxLDI1NSwwXX0se2luZGV4Oi43NSxyZ2I6WzI1NSwyMzQsMF19LHtpbmRleDouODc1LHJnYjpbMjU1LDExMSwwXX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHBvcnRsYW5kOlt7aW5kZXg6MCxyZ2I6WzEyLDUxLDEzMV19LHtpbmRleDouMjUscmdiOlsxMCwxMzYsMTg2XX0se2luZGV4Oi41LHJnYjpbMjQyLDIxMSw1Nl19LHtpbmRleDouNzUscmdiOlsyNDIsMTQzLDU2XX0se2luZGV4OjEscmdiOlsyMTcsMzAsMzBdfV0sYmxhY2tib2R5Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4yLHJnYjpbMjMwLDAsMF19LHtpbmRleDouNCxyZ2I6WzIzMCwyMTAsMF19LHtpbmRleDouNyxyZ2I6WzI1NSwyNTUsMjU1XX0se2luZGV4OjEscmdiOlsxNjAsMjAwLDI1NV19XSxlYXJ0aDpbe2luZGV4OjAscmdiOlswLDAsMTMwXX0se2luZGV4Oi4xLHJnYjpbMCwxODAsMTgwXX0se2luZGV4Oi4yLHJnYjpbNDAsMjEwLDQwXX0se2luZGV4Oi40LHJnYjpbMjMwLDIzMCw1MF19LHtpbmRleDouNixyZ2I6WzEyMCw3MCwyMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sZWxlY3RyaWM6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjE1LHJnYjpbMzAsMCwxMDBdfSx7aW5kZXg6LjQscmdiOlsxMjAsMCwxMDBdfSx7aW5kZXg6LjYscmdiOlsxNjAsOTAsMF19LHtpbmRleDouOCxyZ2I6WzIzMCwyMDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1MCwyMjBdfV0sYWxwaGE6W3tpbmRleDowLHJnYjpbMjU1LDI1NSwyNTUsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTUsMV19XSx2aXJpZGlzOlt7aW5kZXg6MCxyZ2I6WzY4LDEsODRdfSx7aW5kZXg6LjEzLHJnYjpbNzEsNDQsMTIyXX0se2luZGV4Oi4yNSxyZ2I6WzU5LDgxLDEzOV19LHtpbmRleDouMzgscmdiOls0NCwxMTMsMTQyXX0se2luZGV4Oi41LHJnYjpbMzMsMTQ0LDE0MV19LHtpbmRleDouNjMscmdiOlszOSwxNzMsMTI5XX0se2luZGV4Oi43NSxyZ2I6WzkyLDIwMCw5OV19LHtpbmRleDouODgscmdiOlsxNzAsMjIwLDUwXX0se2luZGV4OjEscmdiOlsyNTMsMjMxLDM3XX1dLGluZmVybm86W3tpbmRleDowLHJnYjpbMCwwLDRdfSx7aW5kZXg6LjEzLHJnYjpbMzEsMTIsNzJdfSx7aW5kZXg6LjI1LHJnYjpbODUsMTUsMTA5XX0se2luZGV4Oi4zOCxyZ2I6WzEzNiwzNCwxMDZdfSx7aW5kZXg6LjUscmdiOlsxODYsNTQsODVdfSx7aW5kZXg6LjYzLHJnYjpbMjI3LDg5LDUxXX0se2luZGV4Oi43NSxyZ2I6WzI0OSwxNDAsMTBdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDIwMSw1MF19LHtpbmRleDoxLHJnYjpbMjUyLDI1NSwxNjRdfV0sbWFnbWE6W3tpbmRleDowLHJnYjpbMCwwLDRdfSx7aW5kZXg6LjEzLHJnYjpbMjgsMTYsNjhdfSx7aW5kZXg6LjI1LHJnYjpbNzksMTgsMTIzXX0se2luZGV4Oi4zOCxyZ2I6WzEyOSwzNywxMjldfSx7aW5kZXg6LjUscmdiOlsxODEsNTQsMTIyXX0se2luZGV4Oi42MyxyZ2I6WzIyOSw4MCwxMDBdfSx7aW5kZXg6Ljc1LHJnYjpbMjUxLDEzNSw5N119LHtpbmRleDouODgscmdiOlsyNTQsMTk0LDEzNV19LHtpbmRleDoxLHJnYjpbMjUyLDI1MywxOTFdfV0scGxhc21hOlt7aW5kZXg6MCxyZ2I6WzEzLDgsMTM1XX0se2luZGV4Oi4xMyxyZ2I6Wzc1LDMsMTYxXX0se2luZGV4Oi4yNSxyZ2I6WzEyNSwzLDE2OF19LHtpbmRleDouMzgscmdiOlsxNjgsMzQsMTUwXX0se2luZGV4Oi41LHJnYjpbMjAzLDcwLDEyMV19LHtpbmRleDouNjMscmdiOlsyMjksMTA3LDkzXX0se2luZGV4Oi43NSxyZ2I6WzI0OCwxNDgsNjVdfSx7aW5kZXg6Ljg4LHJnYjpbMjUzLDE5NSw0MF19LHtpbmRleDoxLHJnYjpbMjQwLDI0OSwzM119XSx3YXJtOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMTMscmdiOlsxNzIsMCwxODddfSx7aW5kZXg6LjI1LHJnYjpbMjE5LDAsMTcwXX0se2luZGV4Oi4zOCxyZ2I6WzI1NSwwLDEzMF19LHtpbmRleDouNSxyZ2I6WzI1NSw2Myw3NF19LHtpbmRleDouNjMscmdiOlsyNTUsMTIzLDBdfSx7aW5kZXg6Ljc1LHJnYjpbMjM0LDE3NiwwXX0se2luZGV4Oi44OCxyZ2I6WzE5MCwyMjgsMF19LHtpbmRleDoxLHJnYjpbMTQ3LDI1NSwwXX1dLGNvb2w6W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xMyxyZ2I6WzExNiwwLDIxOF19LHtpbmRleDouMjUscmdiOls5OCw3NCwyMzddfSx7aW5kZXg6LjM4LHJnYjpbNjgsMTQ2LDIzMV19LHtpbmRleDouNSxyZ2I6WzAsMjA0LDE5N119LHtpbmRleDouNjMscmdiOlswLDI0NywxNDZdfSx7aW5kZXg6Ljc1LHJnYjpbMCwyNTUsODhdfSx7aW5kZXg6Ljg4LHJnYjpbNDAsMjU1LDhdfSx7aW5kZXg6MSxyZ2I6WzE0NywyNTUsMF19XSwicmFpbmJvdy1zb2Z0Ijpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEscmdiOlsxOTksMCwxODBdfSx7aW5kZXg6LjIscmdiOlsyNTUsMCwxMjFdfSx7aW5kZXg6LjMscmdiOlsyNTUsMTA4LDBdfSx7aW5kZXg6LjQscmdiOlsyMjIsMTk0LDBdfSx7aW5kZXg6LjUscmdiOlsxNTAsMjU1LDBdfSx7aW5kZXg6LjYscmdiOlswLDI1NSw1NV19LHtpbmRleDouNyxyZ2I6WzAsMjQ2LDE1MF19LHtpbmRleDouOCxyZ2I6WzUwLDE2NywyMjJdfSx7aW5kZXg6LjkscmdiOlsxMDMsNTEsMjM1XX0se2luZGV4OjEscmdiOlsxMjQsMCwxODZdfV0sYmF0aHltZXRyeTpbe2luZGV4OjAscmdiOls0MCwyNiw0NF19LHtpbmRleDouMTMscmdiOls1OSw0OSw5MF19LHtpbmRleDouMjUscmdiOls2NCw3NiwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNjMsMTEwLDE1MV19LHtpbmRleDouNSxyZ2I6WzcyLDE0MiwxNThdfSx7aW5kZXg6LjYzLHJnYjpbODUsMTc0LDE2M119LHtpbmRleDouNzUscmdiOlsxMjAsMjA2LDE2M119LHtpbmRleDouODgscmdiOlsxODcsMjMwLDE3Ml19LHtpbmRleDoxLHJnYjpbMjUzLDI1NCwyMDRdfV0sY2RvbTpbe2luZGV4OjAscmdiOls0NywxNSw2Ml19LHtpbmRleDouMTMscmdiOls4NywyMyw4Nl19LHtpbmRleDouMjUscmdiOlsxMzAsMjgsOTldfSx7aW5kZXg6LjM4LHJnYjpbMTcxLDQxLDk2XX0se2luZGV4Oi41LHJnYjpbMjA2LDY3LDg2XX0se2luZGV4Oi42MyxyZ2I6WzIzMCwxMDYsODRdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0OSwxMDNdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5MywxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyMzcsMTc2XX1dLGNobG9yb3BoeWxsOlt7aW5kZXg6MCxyZ2I6WzE4LDM2LDIwXX0se2luZGV4Oi4xMyxyZ2I6WzI1LDYzLDQxXX0se2luZGV4Oi4yNSxyZ2I6WzI0LDkxLDU5XX0se2luZGV4Oi4zOCxyZ2I6WzEzLDExOSw3Ml19LHtpbmRleDouNSxyZ2I6WzE4LDE0OCw4MF19LHtpbmRleDouNjMscmdiOls4MCwxNzMsODldfSx7aW5kZXg6Ljc1LHJnYjpbMTMyLDE5NiwxMjJdfSx7aW5kZXg6Ljg4LHJnYjpbMTc1LDIyMSwxNjJdfSx7aW5kZXg6MSxyZ2I6WzIxNSwyNDksMjA4XX1dLGRlbnNpdHk6W3tpbmRleDowLHJnYjpbNTQsMTQsMzZdfSx7aW5kZXg6LjEzLHJnYjpbODksMjMsODBdfSx7aW5kZXg6LjI1LHJnYjpbMTEwLDQ1LDEzMl19LHtpbmRleDouMzgscmdiOlsxMjAsNzcsMTc4XX0se2luZGV4Oi41LHJnYjpbMTIwLDExMywyMTNdfSx7aW5kZXg6LjYzLHJnYjpbMTE1LDE1MSwyMjhdfSx7aW5kZXg6Ljc1LHJnYjpbMTM0LDE4NSwyMjddfSx7aW5kZXg6Ljg4LHJnYjpbMTc3LDIxNCwyMjddfSx7aW5kZXg6MSxyZ2I6WzIzMCwyNDEsMjQxXX1dLCJmcmVlc3VyZmFjZS1ibHVlIjpbe2luZGV4OjAscmdiOlszMCw0LDExMF19LHtpbmRleDouMTMscmdiOls0NywxNCwxNzZdfSx7aW5kZXg6LjI1LHJnYjpbNDEsNDUsMjM2XX0se2luZGV4Oi4zOCxyZ2I6WzI1LDk5LDIxMl19LHtpbmRleDouNSxyZ2I6WzY4LDEzMSwyMDBdfSx7aW5kZXg6LjYzLHJnYjpbMTE0LDE1NiwxOTddfSx7aW5kZXg6Ljc1LHJnYjpbMTU3LDE4MSwyMDNdfSx7aW5kZXg6Ljg4LHJnYjpbMjAwLDIwOCwyMTZdfSx7aW5kZXg6MSxyZ2I6WzI0MSwyMzcsMjM2XX1dLCJmcmVlc3VyZmFjZS1yZWQiOlt7aW5kZXg6MCxyZ2I6WzYwLDksMThdfSx7aW5kZXg6LjEzLHJnYjpbMTAwLDE3LDI3XX0se2luZGV4Oi4yNSxyZ2I6WzE0MiwyMCwyOV19LHtpbmRleDouMzgscmdiOlsxNzcsNDMsMjddfSx7aW5kZXg6LjUscmdiOlsxOTIsODcsNjNdfSx7aW5kZXg6LjYzLHJnYjpbMjA1LDEyNSwxMDVdfSx7aW5kZXg6Ljc1LHJnYjpbMjE2LDE2MiwxNDhdfSx7aW5kZXg6Ljg4LHJnYjpbMjI3LDE5OSwxOTNdfSx7aW5kZXg6MSxyZ2I6WzI0MSwyMzcsMjM2XX1dLG94eWdlbjpbe2luZGV4OjAscmdiOls2NCw1LDVdfSx7aW5kZXg6LjEzLHJnYjpbMTA2LDYsMTVdfSx7aW5kZXg6LjI1LHJnYjpbMTQ0LDI2LDddfSx7aW5kZXg6LjM4LHJnYjpbMTY4LDY0LDNdfSx7aW5kZXg6LjUscmdiOlsxODgsMTAwLDRdfSx7aW5kZXg6LjYzLHJnYjpbMjA2LDEzNiwxMV19LHtpbmRleDouNzUscmdiOlsyMjAsMTc0LDI1XX0se2luZGV4Oi44OCxyZ2I6WzIzMSwyMTUsNDRdfSx7aW5kZXg6MSxyZ2I6WzI0OCwyNTQsMTA1XX1dLHBhcjpbe2luZGV4OjAscmdiOls1MSwyMCwyNF19LHtpbmRleDouMTMscmdiOls5MCwzMiwzNV19LHtpbmRleDouMjUscmdiOlsxMjksNDQsMzRdfSx7aW5kZXg6LjM4LHJnYjpbMTU5LDY4LDI1XX0se2luZGV4Oi41LHJnYjpbMTgyLDk5LDE5XX0se2luZGV4Oi42MyxyZ2I6WzE5OSwxMzQsMjJdfSx7aW5kZXg6Ljc1LHJnYjpbMjEyLDE3MSwzNV19LHtpbmRleDouODgscmdiOlsyMjEsMjEwLDU0XX0se2luZGV4OjEscmdiOlsyMjUsMjUzLDc1XX1dLHBoYXNlOlt7aW5kZXg6MCxyZ2I6WzE0NSwxMDUsMThdfSx7aW5kZXg6LjEzLHJnYjpbMTg0LDcxLDM4XX0se2luZGV4Oi4yNSxyZ2I6WzE4Niw1OCwxMTVdfSx7aW5kZXg6LjM4LHJnYjpbMTYwLDcxLDE4NV19LHtpbmRleDouNSxyZ2I6WzExMCw5NywyMThdfSx7aW5kZXg6LjYzLHJnYjpbNTAsMTIzLDE2NF19LHtpbmRleDouNzUscmdiOlszMSwxMzEsMTEwXX0se2luZGV4Oi44OCxyZ2I6Wzc3LDEyOSwzNF19LHtpbmRleDoxLHJnYjpbMTQ1LDEwNSwxOF19XSxzYWxpbml0eTpbe2luZGV4OjAscmdiOls0MiwyNCwxMDhdfSx7aW5kZXg6LjEzLHJnYjpbMzMsNTAsMTYyXX0se2luZGV4Oi4yNSxyZ2I6WzE1LDkwLDE0NV19LHtpbmRleDouMzgscmdiOls0MCwxMTgsMTM3XX0se2luZGV4Oi41LHJnYjpbNTksMTQ2LDEzNV19LHtpbmRleDouNjMscmdiOls3OSwxNzUsMTI2XX0se2luZGV4Oi43NSxyZ2I6WzEyMCwyMDMsMTA0XX0se2luZGV4Oi44OCxyZ2I6WzE5MywyMjEsMTAwXX0se2luZGV4OjEscmdiOlsyNTMsMjM5LDE1NF19XSx0ZW1wZXJhdHVyZTpbe2luZGV4OjAscmdiOls0LDM1LDUxXX0se2luZGV4Oi4xMyxyZ2I6WzIzLDUxLDEyMl19LHtpbmRleDouMjUscmdiOls4NSw1OSwxNTddfSx7aW5kZXg6LjM4LHJnYjpbMTI5LDc5LDE0M119LHtpbmRleDouNSxyZ2I6WzE3NSw5NSwxMzBdfSx7aW5kZXg6LjYzLHJnYjpbMjIyLDExMiwxMDFdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ5LDE0Niw2Nl19LHtpbmRleDouODgscmdiOlsyNDksMTk2LDY1XX0se2luZGV4OjEscmdiOlsyMzIsMjUwLDkxXX1dLHR1cmJpZGl0eTpbe2luZGV4OjAscmdiOlszNCwzMSwyN119LHtpbmRleDouMTMscmdiOls2NSw1MCw0MV19LHtpbmRleDouMjUscmdiOls5OCw2OSw1Ml19LHtpbmRleDouMzgscmdiOlsxMzEsODksNTddfSx7aW5kZXg6LjUscmdiOlsxNjEsMTEyLDU5XX0se2luZGV4Oi42MyxyZ2I6WzE4NSwxNDAsNjZdfSx7aW5kZXg6Ljc1LHJnYjpbMjAyLDE3NCw4OF19LHtpbmRleDouODgscmdiOlsyMTYsMjA5LDEyNl19LHtpbmRleDoxLHJnYjpbMjMzLDI0NiwxNzFdfV0sInZlbG9jaXR5LWJsdWUiOlt7aW5kZXg6MCxyZ2I6WzE3LDMyLDY0XX0se2luZGV4Oi4xMyxyZ2I6WzM1LDUyLDExNl19LHtpbmRleDouMjUscmdiOlsyOSw4MSwxNTZdfSx7aW5kZXg6LjM4LHJnYjpbMzEsMTEzLDE2Ml19LHtpbmRleDouNSxyZ2I6WzUwLDE0NCwxNjldfSx7aW5kZXg6LjYzLHJnYjpbODcsMTczLDE3Nl19LHtpbmRleDouNzUscmdiOlsxNDksMTk2LDE4OV19LHtpbmRleDouODgscmdiOlsyMDMsMjIxLDIxMV19LHtpbmRleDoxLHJnYjpbMjU0LDI1MSwyMzBdfV0sInZlbG9jaXR5LWdyZWVuIjpbe2luZGV4OjAscmdiOlsyMywzNSwxOV19LHtpbmRleDouMTMscmdiOlsyNCw2NCwzOF19LHtpbmRleDouMjUscmdiOlsxMSw5NSw0NV19LHtpbmRleDouMzgscmdiOlszOSwxMjMsMzVdfSx7aW5kZXg6LjUscmdiOls5NSwxNDYsMTJdfSx7aW5kZXg6LjYzLHJnYjpbMTUyLDE2NSwxOF19LHtpbmRleDouNzUscmdiOlsyMDEsMTg2LDY5XX0se2luZGV4Oi44OCxyZ2I6WzIzMywyMTYsMTM3XX0se2luZGV4OjEscmdiOlsyNTUsMjUzLDIwNV19XSxjdWJlaGVsaXg6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjA3LHJnYjpbMjIsNSw1OV19LHtpbmRleDouMTMscmdiOls2MCw0LDEwNV19LHtpbmRleDouMixyZ2I6WzEwOSwxLDEzNV19LHtpbmRleDouMjcscmdiOlsxNjEsMCwxNDddfSx7aW5kZXg6LjMzLHJnYjpbMjEwLDIsMTQyXX0se2luZGV4Oi40LHJnYjpbMjUxLDExLDEyM119LHtpbmRleDouNDcscmdiOlsyNTUsMjksOTddfSx7aW5kZXg6LjUzLHJnYjpbMjU1LDU0LDY5XX0se2luZGV4Oi42LHJnYjpbMjU1LDg1LDQ2XX0se2luZGV4Oi42NyxyZ2I6WzI1NSwxMjAsMzRdfSx7aW5kZXg6LjczLHJnYjpbMjU1LDE1NywzN119LHtpbmRleDouOCxyZ2I6WzI0MSwxOTEsNTddfSx7aW5kZXg6Ljg3LHJnYjpbMjI0LDIyMCw5M119LHtpbmRleDouOTMscmdiOlsyMTgsMjQxLDE0Ml19LHtpbmRleDoxLHJnYjpbMjI3LDI1MywxOThdfV19fSx7fV0sMTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29sb3JTY2FsZSIpLGk9dCgibGVycCIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuW3RbMF0vMjU1LHRbMV0vMjU1LHRbMl0vMjU1LHRbM11dfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlLHI9IiMiLG49MDtuPDM7KytuKXIrPSgiMDAiKyhlPShlPXRbbl0pLnRvU3RyaW5nKDE2KSkpLnN1YnN0cihlLmxlbmd0aCk7cmV0dXJuIHJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm4icmdiYSgiK3Quam9pbigiLCIpKyIpIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixsLGMsdSxmLGgscCxkLGc7dHx8KHQ9e30pO3A9KHQubnNoYWRlc3x8NzIpLTEsaD10LmZvcm1hdHx8ImhleCIsKGY9dC5jb2xvcm1hcCl8fChmPSJqZXQiKTtpZigic3RyaW5nIj09dHlwZW9mIGYpe2lmKGY9Zi50b0xvd2VyQ2FzZSgpLCFuW2ZdKXRocm93IEVycm9yKGYrIiBub3QgYSBzdXBwb3J0ZWQgY29sb3JzY2FsZSIpO3U9bltmXX1lbHNle2lmKCFBcnJheS5pc0FycmF5KGYpKXRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCBjb2xvcm1hcCBvcHRpb24iLGYpO3U9Zi5zbGljZSgpfWlmKHUubGVuZ3RoPnArMSl0aHJvdyBuZXcgRXJyb3IoZisiIG1hcCByZXF1aXJlcyBuc2hhZGVzIHRvIGJlIGF0IGxlYXN0IHNpemUgIit1Lmxlbmd0aCk7ZD1BcnJheS5pc0FycmF5KHQuYWxwaGEpPzIhPT10LmFscGhhLmxlbmd0aD9bMSwxXTp0LmFscGhhLnNsaWNlKCk6Im51bWJlciI9PXR5cGVvZiB0LmFscGhhP1t0LmFscGhhLHQuYWxwaGFdOlsxLDFdO2U9dS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQuaW5kZXgqcCl9KSksZFswXT1NYXRoLm1pbihNYXRoLm1heChkWzBdLDApLDEpLGRbMV09TWF0aC5taW4oTWF0aC5tYXgoZFsxXSwwKSwxKTt2YXIgbT11Lm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj11W2VdLmluZGV4LG49dVtlXS5yZ2Iuc2xpY2UoKTtyZXR1cm4gND09PW4ubGVuZ3RoJiZuWzNdPj0wJiZuWzNdPD0xfHwoblszXT1kWzBdKyhkWzFdLWRbMF0pKnIpLG59KSksdj1bXTtmb3IoZz0wO2c8ZS5sZW5ndGgtMTsrK2cpe2M9ZVtnKzFdLWVbZ10scj1tW2ddLGw9bVtnKzFdO2Zvcih2YXIgeT0wO3k8Yzt5Kyspe3ZhciB4PXkvYzt2LnB1c2goW01hdGgucm91bmQoaShyWzBdLGxbMF0seCkpLE1hdGgucm91bmQoaShyWzFdLGxbMV0seCkpLE1hdGgucm91bmQoaShyWzJdLGxbMl0seCkpLGkoclszXSxsWzNdLHgpXSl9fXYucHVzaCh1W3UubGVuZ3RoLTFdLnJnYi5jb25jYXQoZFsxXSkpLCJoZXgiPT09aD92PXYubWFwKG8pOiJyZ2JhU3RyaW5nIj09PWg/dj12Lm1hcChzKToiZmxvYXQiPT09aCYmKHY9di5tYXAoYSkpO3JldHVybiB2fX0seyIuL2NvbG9yU2NhbGUiOjEzMCxsZXJwOjQ3Mn1dLDEzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bihlLHIsYSk7aWYoMD09PW8pe3ZhciBzPWkobih0LGUscikpLGM9aShuKHQsZSxhKSk7aWYocz09PWMpe2lmKDA9PT1zKXt2YXIgdT1sKHQsZSxyKSxmPWwodCxlLGEpO3JldHVybiB1PT09Zj8wOnU/MTotMX1yZXR1cm4gMH1yZXR1cm4gMD09PWM/cz4wfHxsKHQsZSxhKT8tMToxOjA9PT1zP2M+MHx8bCh0LGUscik/MTotMTppKGMtcyl9dmFyIGg9bih0LGUscik7cmV0dXJuIGg+MD9vPjAmJm4odCxlLGEpPjA/MTotMTpoPDA/bz4wfHxuKHQsZSxhKT4wPzE6LTE6bih0LGUsYSk+MHx8bCh0LGUscik/MTotMX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaWdudW0iKSxhPXQoInR3by1zdW0iKSxvPXQoInJvYnVzdC1wcm9kdWN0Iikscz10KCJyb2J1c3Qtc3VtIik7ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49YSh0WzBdLC1lWzBdKSxpPWEodFsxXSwtZVsxXSksbD1hKHJbMF0sLWVbMF0pLGM9YShyWzFdLC1lWzFdKSx1PXMobyhuLGwpLG8oaSxjKSk7cmV0dXJuIHVbdS5sZW5ndGgtMV0+PTB9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTQ4LCJyb2J1c3QtcHJvZHVjdCI6NTQ5LCJyb2J1c3Qtc3VtIjo1NTMsc2lnbnVtOjU1NCwidHdvLXN1bSI6NTgzfV0sMTMzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgsYT10Lmxlbmd0aC1lLmxlbmd0aDtpZihhKXJldHVybiBhO3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiB0WzBdLWVbMF07Y2FzZSAyOnJldHVybiB0WzBdK3RbMV0tZVswXS1lWzFdfHxuKHRbMF0sdFsxXSktbihlWzBdLGVbMV0pO2Nhc2UgMzp2YXIgbz10WzBdK3RbMV0scz1lWzBdK2VbMV07aWYoYT1vK3RbMl0tKHMrZVsyXSkpcmV0dXJuIGE7dmFyIGw9bih0WzBdLHRbMV0pLGM9bihlWzBdLGVbMV0pO3JldHVybiBuKGwsdFsyXSktbihjLGVbMl0pfHxuKGwrdFsyXSxvKS1uKGMrZVsyXSxzKTtjYXNlIDQ6dmFyIHU9dFswXSxmPXRbMV0saD10WzJdLHA9dFszXSxkPWVbMF0sZz1lWzFdLG09ZVsyXSx2PWVbM107cmV0dXJuIHUrZitoK3AtKGQrZyttK3YpfHxuKHUsZixoLHApLW4oZCxnLG0sdixkKXx8bih1K2YsdStoLHUrcCxmK2gsZitwLGgrcCktbihkK2csZCttLGQrdixnK20sZyt2LG0rdil8fG4odStmK2gsdStmK3AsdStoK3AsZitoK3ApLW4oZCtnK20sZCtnK3YsZCttK3YsZyttK3YpO2RlZmF1bHQ6Zm9yKHZhciB5PXQuc2xpY2UoKS5zb3J0KGkpLHg9ZS5zbGljZSgpLnNvcnQoaSksYj0wO2I8cjsrK2IpaWYoYT15W2JdLXhbYl0pcmV0dXJuIGE7cmV0dXJuIDB9fTt2YXIgbj1NYXRoLm1pbjtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQtZX19LHt9XSwxMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29tcGFyZS1jZWxsIiksaT10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKXx8aSh0KS1pKGUpfX0seyJjZWxsLW9yaWVudGF0aW9uIjoxMTcsImNvbXBhcmUtY2VsbCI6MTMzfV0sMTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2NoMWQiKSxpPXQoIi4vbGliL2NoMmQiKSxhPXQoIi4vbGliL2NobmQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuW1swXV07dmFyIHI9dFswXS5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107aWYoMT09PXIpcmV0dXJuIG4odCk7aWYoMj09PXIpcmV0dXJuIGkodCk7cmV0dXJuIGEodCxyKX19LHsiLi9saWIvY2gxZCI6MTM2LCIuL2xpYi9jaDJkIjoxMzcsIi4vbGliL2NobmQiOjEzOH1dLDEzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wLG49MTtuPHQubGVuZ3RoOysrbil0W25dWzBdPHRbZV1bMF0mJihlPW4pLHRbbl1bMF0+dFtyXVswXSYmKHI9bik7cmV0dXJuIGU8cj9bW2VdLFtyXV06ZT5yP1tbcl0sW2VdXTpbW2VdXX19LHt9XSwxMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1lLmxlbmd0aDtpZihyPD0yKXJldHVybltdO2Zvcih2YXIgaT1uZXcgQXJyYXkociksYT1lW3ItMV0sbz0wO288cjsrK28pe3ZhciBzPWVbb107aVtvXT1bYSxzXSxhPXN9cmV0dXJuIGl9O3ZhciBuPXQoIm1vbm90b25lLWNvbnZleC1odWxsLTJkIil9LHsibW9ub3RvbmUtY29udmV4LWh1bGwtMmQiOjQ4Mn1dLDEzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIG4odCwhMCl9Y2F0Y2gobyl7dmFyIHI9aSh0KTtpZihyLmxlbmd0aDw9ZSlyZXR1cm5bXTt2YXIgYT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxlLmxlbmd0aDsrK2kpbltpXT10W2VbaV1dO3ZhciBhPWUubGVuZ3RoO2ZvcihpPTA7aTxyOysraSllLmluZGV4T2YoaSk8MCYmKG5bYSsrXT10W2ldKTtyZXR1cm4gbn0odCxyKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTA7aTxyOysraSlmb3IodmFyIGE9dFtpXSxvPTA7bzxhLmxlbmd0aDsrK28pe3ZhciBzPWFbb107aWYoczxuKWFbb109ZVtzXTtlbHNle3MtPW47Zm9yKHZhciBsPTA7bDxuOysrbClzPj1lW2xdJiYocys9MSk7YVtvXT1zfX1yZXR1cm4gdH0obihhLCEwKSxyKX19O3ZhciBuPXQoImluY3JlbWVudGFsLWNvbnZleC1odWxsIiksaT10KCJhZmZpbmUtaHVsbCIpfSx7ImFmZmluZS1odWxsIjo2NywiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiOjQ1OX1dLDEzOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17QUZHOiJhZmdoYW4iLEFMQToiXFxiXFx3bGFuZCIsQUxCOiJhbGJhbmlhIixEWkE6ImFsZ2VyaWEiLEFTTToiXig/PS4qYW1lcmljKS4qc2Ftb2EiLEFORDoiYW5kb3JyYSIsQUdPOiJhbmdvbGEiLEFJQToiYW5ndWlsbD9hIixBVEE6ImFudGFyY3RpY2EiLEFURzoiYW50aWd1YSIsQVJHOiJhcmdlbnRpbiIsQVJNOiJhcm1lbmlhIixBQlc6Il4oPyEuKmJvbmFpcmUpLipcXGJhcnViYSIsQVVTOiJhdXN0cmFsaWEiLEFVVDoiXig/IS4qaHVuZ2FyeSkuKmF1c3RyaWF8XFxiYXVzdHJpLipcXGJlbXAiLEFaRToiYXplcmJhaWphbiIsQkhTOiJiYWhhbWFzIixCSFI6ImJhaHJhaW4iLEJHRDoiYmFuZ2xhZGVzaHxeKD89LiplYXN0KS4qcGFraT9zdGFuIixCUkI6ImJhcmJhZG9zIixCTFI6ImJlbGFydXN8YnllbG8iLEJFTDoiXig/IS4qbHV4ZW0pLipiZWxnaXVtIixCTFo6ImJlbGl6ZXxeKD89Lipicml0aXNoKS4qaG9uZHVyYXMiLEJFTjoiYmVuaW58ZGFob21lIixCTVU6ImJlcm11ZGEiLEJUTjoiYmh1dGFuIixCT0w6ImJvbGl2aWEiLEJFUzoiXig/PS4qYm9uYWlyZSkuKmV1c3RhdGl1c3xeKD89LipjYXJpYikuKm5ldGhlcmxhbmRzfFxcYmJlcy4/aXNsYW5kcyIsQklIOiJoZXJ6ZWdvdmluYXxib3NuaWEiLEJXQToiYm90c3dhbmF8YmVjaHVhbmEiLEJWVDoiYm91dmV0IixCUkE6ImJyYXppbCIsSU9UOiJicml0aXNoLj9pbmRpYW4uP29jZWFuIixCUk46ImJydW5laSIsQkdSOiJidWxnYXJpYSIsQkZBOiJidXJraW5hfFxcYmZhc298dXBwZXIuP3ZvbHRhIixCREk6ImJ1cnVuZGkiLENQVjoidmVyZGUiLEtITToiY2FtYm9kaWF8a2FtcHVjaGVhfGtobWVyIixDTVI6ImNhbWVyb29uIixDQU46ImNhbmFkYSIsQ1lNOiJjYXltYW4iLENBRjoiXFxiY2VudHJhbC5hZnJpY2FuLnJlcHVibGljIixUQ0Q6IlxcYmNoYWQiLENITDoiXFxiY2hpbGUiLENITjoiXig/IS4qXFxibWFjKSg/IS4qXFxiaG9uZykoPyEuKlxcYnRhaSkoPyEuKlxcYnJlcCkuKmNoaW5hfF4oPz0uKnBlbykoPz0uKnJlcCkuKmNoaW5hIixDWFI6ImNocmlzdG1hcyIsQ0NLOiJcXGJjb2Nvc3xrZWVsaW5nIixDT0w6ImNvbG9tYmlhIixDT006ImNvbW9ybyIsQ09HOiJeKD8hLipcXGJkZW0pKD8hLipcXGJkW1xcLl0/cikoPyEuKmtpbnNoYXNhKSg/IS4qemFpcmUpKD8hLipiZWxnKSg/IS4qbC5vcG9sZHZpbGxlKSg/IS4qZnJlZSkuKlxcYmNvbmdvIixDT0s6IlxcYmNvb2siLENSSToiY29zdGEuP3JpY2EiLENJVjoiaXZvaXJlfGl2b3J5IixIUlY6ImNyb2F0aWEiLENVQjoiXFxiY3ViYSIsQ1VXOiJeKD8hLipib25haXJlKS4qXFxiY3VyYShjfFx4ZTcpYW8iLENZUDoiY3lwcnVzIixDU0s6ImN6ZWNob3Nsb3Zha2lhIixDWkU6Il4oPz0uKnJlcCkuKmN6ZWNofGN6ZWNoaWF8Ym9oZW1pYSIsQ09EOiJcXGJkZW0uKmNvbmdvfGNvbmdvLipcXGJkZW18Y29uZ28uKlxcYmRbXFwuXT9yfFxcYmRbXFwuXT9yLipjb25nb3xiZWxnaWFuLj9jb25nb3xjb25nby4/ZnJlZS4/c3RhdGV8a2luc2hhc2F8emFpcmV8bC5vcG9sZHZpbGxlfGRyY3xkcm9jfHJkYyIsRE5LOiJkZW5tYXJrIixESkk6ImRqaWJvdXRpIixETUE6ImRvbWluaWNhKD8hbikiLERPTToiZG9taW5pY2FuLnJlcCIsRUNVOiJlY3VhZG9yIixFR1k6ImVneXB0IixTTFY6ImVsLj9zYWx2YWRvciIsR05ROiJndWluZS4qZXF8ZXEuKmd1aW5lfF4oPz0uKnNwYW4pLipndWluZWEiLEVSSToiZXJpdHJlYSIsRVNUOiJlc3RvbmlhIixFVEg6ImV0aGlvcGlhfGFieXNzaW5pYSIsRkxLOiJmYWxrbGFuZHxtYWx2aW5hcyIsRlJPOiJmYXJvZXxmYWVyb2UiLEZKSToiZmlqaSIsRklOOiJmaW5sYW5kIixGUkE6Il4oPyEuKlxcYmRlcCkoPyEuKm1hcnRpbmlxdWUpLipmcmFuY2V8ZnJlbmNoLj9yZXB1YmxpY3xcXGJnYXVsIixHVUY6Il4oPz0uKmZyZW5jaCkuKmd1aWFuYSIsUFlGOiJmcmVuY2guP3BvbHluZXNpYXx0YWhpdGkiLEFURjoiZnJlbmNoLj9zb3V0aGVybiIsR0FCOiJnYWJvbiIsR01COiJnYW1iaWEiLEdFTzoiXig/IS4qc291dGgpLipnZW9yZ2lhIixERFI6Imdlcm1hbi4/ZGVtb2NyYXRpYy4/cmVwdWJsaWN8ZGVtb2NyYXRpYy4/cmVwdWJsaWMuKmdlcm1hbnl8ZWFzdC5nZXJtYW55IixERVU6Il4oPyEuKmVhc3QpLipnZXJtYW55fF4oPz0uKlxcYmZlZC4qXFxicmVwKS4qZ2VybWFuIixHSEE6ImdoYW5hfGdvbGQuP2NvYXN0IixHSUI6ImdpYnJhbHRhciIsR1JDOiJncmVlY2V8aGVsbGVuaWN8aGVsbGFzIixHUkw6ImdyZWVubGFuZCIsR1JEOiJncmVuYWRhIixHTFA6Imd1YWRlbG91cGUiLEdVTToiXFxiZ3VhbSIsR1RNOiJndWF0ZW1hbGEiLEdHWToiZ3Vlcm5zZXkiLEdJTjoiXig/IS4qZXEpKD8hLipzcGFuKSg/IS4qYmlzc2F1KSg/IS4qcG9ydHUpKD8hLipuZXcpLipndWluZWEiLEdOQjoiYmlzc2F1fF4oPz0uKnBvcnR1KS4qZ3VpbmVhIixHVVk6Imd1eWFuYXxicml0aXNoLj9ndWlhbmEiLEhUSToiaGFpdGkiLEhNRDoiaGVhcmQuKm1jZG9uYWxkIixWQVQ6ImhvbHkuP3NlZXx2YXRpY2FufHBhcGFsLj9zdCIsSE5EOiJeKD8hLipicml0KS4qaG9uZHVyYXMiLEhLRzoiaG9uZy4/a29uZyIsSFVOOiJeKD8hLiphdXN0cikuKmh1bmdhcnkiLElTTDoiaWNlbGFuZCIsSU5EOiJpbmRpYSg/IS4qb2NlYSkiLElETjoiaW5kb25lc2lhIixJUk46IlxcYmlyYW58cGVyc2lhIixJUlE6IlxcYmlyYXF8bWVzb3BvdGFtaWEiLElSTDoiKF5pcmVsYW5kKXwoXnJlcHVibGljLippcmVsYW5kKSIsSU1OOiJeKD89Lippc2xlKS4qXFxibWFuIixJU1I6ImlzcmFlbCIsSVRBOiJpdGFseSIsSkFNOiJqYW1haWNhIixKUE46ImphcGFuIixKRVk6ImplcnNleSIsSk9SOiJqb3JkYW4iLEtBWjoia2F6YWsiLEtFTjoia2VueWF8YnJpdGlzaC4/ZWFzdC4/YWZyaWNhfGVhc3QuP2FmcmljYS4/cHJvdCIsS0lSOiJraXJpYmF0aSIsUFJLOiJeKD89LipkZW1vY3JhdHxwZW9wbGV8bm9ydGh8ZC4qcC4qLnIpLipcXGJrb3JlYXxkcHJrfGtvcmVhLiooZC4qcC4qcikiLEtXVDoia3V3YWl0IixLR1o6Imt5cmd5enxraXJnaGl6IixMQU86IlxcYmxhb3M/XFxiIixMVkE6ImxhdHZpYSIsTEJOOiJsZWJhbm9uIixMU086Imxlc290aG98YmFzdXRvIixMQlI6ImxpYmVyaWEiLExCWToibGlieWEiLExJRToibGllY2h0ZW5zdGVpbiIsTFRVOiJsaXRodWFuaWEiLExVWDoiXig/IS4qYmVsZykuKmx1eGVtIixNQUM6Im1hY2Eob3x1KSIsTURHOiJtYWRhZ2FzY2FyfG1hbGFnYXN5IixNV0k6Im1hbGF3aXxueWFzYSIsTVlTOiJtYWxheXNpYSIsTURWOiJtYWxkaXZlIixNTEk6IlxcYm1hbGlcXGIiLE1MVDoiXFxibWFsdGEiLE1ITDoibWFyc2hhbGwiLE1UUToibWFydGluaXF1ZSIsTVJUOiJtYXVyaXRhbmlhIixNVVM6Im1hdXJpdGl1cyIsTVlUOiJcXGJtYXlvdHRlIixNRVg6IlxcYm1leGljIixGU006ImZlZC4qbWljcm9uZXNpYXxtaWNyb25lc2lhLipmZWQiLE1DTzoibW9uYWNvIixNTkc6Im1vbmdvbGlhIixNTkU6Il4oPyEuKnNlcmJpYSkuKm1vbnRlbmVncm8iLE1TUjoibW9udHNlcnJhdCIsTUFSOiJtb3JvY2NvfFxcYm1hcm9jIixNT1o6Im1vemFtYmlxdWUiLE1NUjoibXlhbm1hcnxidXJtYSIsTkFNOiJuYW1pYmlhIixOUlU6Im5hdXJ1IixOUEw6Im5lcGFsIixOTEQ6Il4oPyEuKlxcYmFudCkoPyEuKlxcYmNhcmliKS4qbmV0aGVybGFuZHMiLEFOVDoiXig/PS4qXFxiYW50KS4qKG5ldGhlcnxkdXRjaCkiLE5DTDoibmV3Lj9jYWxlZG9uaWEiLE5aTDoibmV3Lj96ZWFsYW5kIixOSUM6Im5pY2FyYWd1YSIsTkVSOiJcXGJuaWdlcig/IWlhKSIsTkdBOiJuaWdlcmlhIixOSVU6Im5pdWUiLE5GSzoibm9yZm9sayIsTU5QOiJtYXJpYW5hIixOT1I6Im5vcndheSIsT01OOiJcXGJvbWFufHRydWNpYWwiLFBBSzoiXig/IS4qZWFzdCkuKnBha2k/c3RhbiIsUExXOiJwYWxhdSIsUFNFOiJwYWxlc3RpbnxcXGJnYXphfHdlc3QuP2JhbmsiLFBBTjoicGFuYW1hIixQTkc6InBhcHVhfG5ldy4/Z3VpbmVhIixQUlk6InBhcmFndWF5IixQRVI6InBlcnUiLFBITDoicGhpbGlwcGluZXMiLFBDTjoicGl0Y2Fpcm4iLFBPTDoicG9sYW5kIixQUlQ6InBvcnR1Z2FsIixQUkk6InB1ZXJ0by4/cmljbyIsUUFUOiJxYXRhciIsS09SOiJeKD8hLipkLipwLipyKSg/IS4qZGVtb2NyYXQpKD8hLipwZW9wbGUpKD8hLipub3J0aCkuKlxcYmtvcmVhKD8hLipkLipwLipyKSIsTURBOiJtb2xkb3Z8YihhfGUpc3NhcmFiaWEiLFJFVToicihlfFx4ZTkpdW5pb24iLFJPVToicihvfHV8b3UpbWFuaWEiLFJVUzoiXFxicnVzc2lhfHNvdmlldC4/dW5pb258dVxcLj9zXFwuP3NcXC4/cnxzb2NpYWxpc3QuP3JlcHVibGljcyIsUldBOiJyd2FuZGEiLEJMTToiYmFydGgoZXxceGU5KWxlbXkiLFNITjoiaGVsZW5hIixLTkE6ImtpdHRzfFxcYm5ldmlzIixMQ0E6IlxcYmx1Y2lhIixNQUY6Il4oPz0uKmNvbGxlY3Rpdml0eSkuKm1hcnRpbnxeKD89LipmcmFuY2UpLiptYXJ0aW4oPyFpcXVlKXxeKD89LipmcmVuY2gpLiptYXJ0aW4oPyFpcXVlKSIsU1BNOiJtaXF1ZWxvbiIsVkNUOiJ2aW5jZW50IixXU006Il4oPyEuKmFtZXIpLipzYW1vYSIsU01SOiJzYW4uP21hcmlubyIsU1RQOiJcXGJzKGF8XHhlMylvLj90b20oZXxceGU5KSIsU0FVOiJcXGJzYVxcdyouP2FyYWJpYSIsU0VOOiJzZW5lZ2FsIixTUkI6Il4oPyEuKm1vbnRlKS4qc2VyYmlhIixTWUM6InNleWNoZWxsIixTTEU6InNpZXJyYSIsU0dQOiJzaW5nYXBvcmUiLFNYTToiXig/IS4qbWFydGluKSg/IS4qc2FiYSkuKm1hYXJ0ZW4iLFNWSzoiXig/IS4qY3plKS4qc2xvdmFrIixTVk46InNsb3ZlbmlhIixTTEI6InNvbG9tb24iLFNPTToic29tYWxpIixaQUY6InNvdXRoLmFmcmljYXxzXFxcXC4uP2FmcmljYSIsU0dTOiJzb3V0aC4/Z2VvcmdpYXxzYW5kd2ljaCIsU1NEOiJcXGJzXFx3Ki4/c3VkYW4iLEVTUDoic3BhaW4iLExLQToic3JpLj9sYW5rYXxjZXlsb24iLFNETjoiXig/IS4qXFxicyg/IXUpKS4qc3VkYW4iLFNVUjoic3VyaW5hbXxkdXRjaC4/Z3VpYW5hIixTSk06InN2YWxiYXJkIixTV1o6InN3YXppbGFuZCIsU1dFOiJzd2VkZW4iLENIRToic3dpdHp8c3dpc3MiLFNZUjoic3lyaWEiLFRXTjoidGFpd2FufHRhaXBlaXxmb3Jtb3NhfF4oPyEuKnBlbykoPz0uKnJlcCkuKmNoaW5hIixUSks6InRhamlrIixUSEE6InRoYWlsYW5kfFxcYnNpYW0iLE1LRDoibWFjZWRvbmlhfGZ5cm9tIixUTFM6Il4oPz0uKmxlc3RlKS4qdGltb3J8Xig/PS4qZWFzdCkuKnRpbW9yIixUR086InRvZ28iLFRLTDoidG9rZWxhdSIsVE9OOiJ0b25nYSIsVFRPOiJ0cmluaWRhZHx0b2JhZ28iLFRVTjoidHVuaXNpYSIsVFVSOiJ0dXJrZXkiLFRLTToidHVya21lbiIsVENBOiJ0dXJrcyIsVFVWOiJ0dXZhbHUiLFVHQToidWdhbmRhIixVS1I6InVrcmFpbiIsQVJFOiJlbWlyYXRlc3xedVxcLj9hXFwuP2VcXC4/JHx1bml0ZWQuP2FyYWIuP2VtIixHQlI6InVuaXRlZC4/a2luZ2RvbXxicml0YWlufF51XFwuP2tcXC4/JCIsVFpBOiJ0YW56YW5pYSIsVVNBOiJ1bml0ZWQuP3N0YXRlc1xcYig/IS4qaXNsYW5kcyl8XFxidVxcLj9zXFwuP2FcXC4/XFxifF5cXHMqdVxcLj9zXFwuP1xcYig/IS4qaXNsYW5kcykiLFVNSToibWlub3IuP291dGx5aW5nLj9pcyIsVVJZOiJ1cnVndWF5IixVWkI6InV6YmVrIixWVVQ6InZhbnVhdHV8bmV3Lj9oZWJyaWRlcyIsVkVOOiJ2ZW5lenVlbGEiLFZOTToiXig/IS4qcmVwdWJsaWMpLip2aWV0Lj9uYW18Xig/PS4qc29jaWFsaXN0KS4qdmlldC4/bmFtIixWR0I6Il4oPz0uKlxcYnVcXC4/XFxzP2spLip2aXJnaW58Xig/PS4qYnJpdCkuKnZpcmdpbnxeKD89LipraW5nZG9tKS4qdmlyZ2luIixWSVI6Il4oPz0uKlxcYnVcXC4/XFxzP3MpLip2aXJnaW58Xig/PS4qc3RhdGVzKS4qdmlyZ2luIixXTEY6ImZ1dHVuYXx3YWxsaXMiLEVTSDoid2VzdGVybi5zYWhhcmEiLFlFTToiXig/IS4qYXJhYikoPyEuKm5vcnRoKSg/IS4qc2FuYSkoPyEuKnBlbykoPyEuKmRlbSkoPyEuKnNvdXRoKSg/IS4qYWRlbikoPyEuKlxcYnBcXC4/ZFxcLj9yKS4qeWVtZW4iLFlNRDoiXig/PS4qcGVvKS4qeWVtZW58Xig/IS4qcmVwKSg/PS4qZGVtKS4qeWVtZW58Xig/PS4qc291dGgpLip5ZW1lbnxeKD89LiphZGVuKS4qeWVtZW58Xig/PS4qXFxicFxcLj9kXFwuP3IpLip5ZW1lbiIsWVVHOiJ5dWdvc2xhdmlhIixaTUI6InphbWJpYXxub3J0aGVybi4/cmhvZGVzaWEiLEVBWjoiemFuemliYXIiLFpXRToiemltYmFid2V8Xig/IS4qbm9ydGhlcm4pLipyaG9kZXNpYSJ9fSx7fV0sMTQwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsieHgtc21hbGwiLCJ4LXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsIngtbGFyZ2UiLCJ4eC1sYXJnZSIsImxhcmdlciIsInNtYWxsZXIiXX0se31dLDE0MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIm5vcm1hbCIsImNvbmRlbnNlZCIsInNlbWktY29uZGVuc2VkIiwiZXh0cmEtY29uZGVuc2VkIiwidWx0cmEtY29uZGVuc2VkIiwiZXhwYW5kZWQiLCJzZW1pLWV4cGFuZGVkIiwiZXh0cmEtZXhwYW5kZWQiLCJ1bHRyYS1leHBhbmRlZCJdfSx7fV0sMTQyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsibm9ybWFsIiwiaXRhbGljIiwib2JsaXF1ZSJdfSx7fV0sMTQzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsibm9ybWFsIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiLCIxMDAiLCIyMDAiLCIzMDAiLCI0MDAiLCI1MDAiLCI2MDAiLCI3MDAiLCI4MDAiLCI5MDAiXX0se31dLDE0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3BhcnNlOnQoIi4vcGFyc2UiKSxzdHJpbmdpZnk6dCgiLi9zdHJpbmdpZnkiKX19LHsiLi9wYXJzZSI6MTQ2LCIuL3N0cmluZ2lmeSI6MTQ3fV0sMTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNzcy1mb250LXNpemUta2V5d29yZHMiKTtlLmV4cG9ydHM9e2lzU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4vXltcZFwuXS8udGVzdCh0KXx8LTEhPT10LmluZGV4T2YoIi8iKXx8LTEhPT1uLmluZGV4T2YodCl9fX0seyJjc3MtZm9udC1zaXplLWtleXdvcmRzIjoxNDB9XSwxNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidW5xdW90ZSIpLGk9dCgiY3NzLWdsb2JhbC1rZXl3b3JkcyIpLGE9dCgiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIiksbz10KCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHMiKSxzPXQoImNzcy1mb250LXN0eWxlLWtleXdvcmRzIiksbD10KCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIiksYz10KCJzdHJpbmctc3BsaXQtYnkiKSx1PXQoIi4vbGliL3V0aWwiKS5pc1NpemU7ZS5leHBvcnRzPWg7dmFyIGY9aC5jYWNoZT17fTtmdW5jdGlvbiBoKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIkZvbnQgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZy4iKTtpZihmW3RdKXJldHVybiBmW3RdO2lmKCIiPT09dCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwYXJzZSBhbiBlbXB0eSBzdHJpbmcuIik7aWYoLTEhPT1hLmluZGV4T2YodCkpcmV0dXJuIGZbdF09e3N5c3RlbTp0fTtmb3IodmFyIGUscj17c3R5bGU6Im5vcm1hbCIsdmFyaWFudDoibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCIsc3RyZXRjaDoibm9ybWFsIixsaW5lSGVpZ2h0OiJub3JtYWwiLHNpemU6IjFyZW0iLGZhbWlseTpbInNlcmlmIl19LGg9Yyh0LC9ccysvKTtlPWguc2hpZnQoKTspe2lmKC0xIT09aS5pbmRleE9mKGUpKXJldHVyblsic3R5bGUiLCJ2YXJpYW50Iiwid2VpZ2h0Iiwic3RyZXRjaCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdF09ZX0pKSxmW3RdPXI7aWYoLTE9PT1zLmluZGV4T2YoZSkpaWYoIm5vcm1hbCIhPT1lJiYic21hbGwtY2FwcyIhPT1lKWlmKC0xPT09bC5pbmRleE9mKGUpKXtpZigtMT09PW8uaW5kZXhPZihlKSl7aWYodShlKSl7dmFyIGQ9YyhlLCIvIik7aWYoci5zaXplPWRbMF0sbnVsbCE9ZFsxXT9yLmxpbmVIZWlnaHQ9cChkWzFdKToiLyI9PT1oWzBdJiYoaC5zaGlmdCgpLHIubGluZUhlaWdodD1wKGguc2hpZnQoKSkpLCFoLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgZm9udC1mYW1pbHkuIik7cmV0dXJuIHIuZmFtaWx5PWMoaC5qb2luKCIgIiksL1xzKixccyovKS5tYXAobiksZlt0XT1yfXRocm93IG5ldyBFcnJvcigiVW5rbm93biBvciB1bnN1cHBvcnRlZCBmb250IHRva2VuOiAiK2UpfXIud2VpZ2h0PWV9ZWxzZSByLnN0cmV0Y2g9ZTtlbHNlIHIudmFyaWFudD1lO2Vsc2Ugci5zdHlsZT1lfXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCBmb250LXNpemUuIil9ZnVuY3Rpb24gcCh0KXt2YXIgZT1wYXJzZUZsb2F0KHQpO3JldHVybiBlLnRvU3RyaW5nKCk9PT10P2U6dH19LHsiLi9saWIvdXRpbCI6MTQ1LCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIjoxNDEsImNzcy1mb250LXN0eWxlLWtleXdvcmRzIjoxNDIsImNzcy1mb250LXdlaWdodC1rZXl3b3JkcyI6MTQzLCJjc3MtZ2xvYmFsLWtleXdvcmRzIjoxNDgsImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyI6MTQ5LCJzdHJpbmctc3BsaXQtYnkiOjU2OCx1bnF1b3RlOjU5OH1dLDE0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwaWNrLWJ5LWFsaWFzIiksaT10KCIuL2xpYi91dGlsIikuaXNTaXplLGE9Zyh0KCJjc3MtZ2xvYmFsLWtleXdvcmRzIikpLG89Zyh0KCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHMiKSkscz1nKHQoImNzcy1mb250LXdlaWdodC1rZXl3b3JkcyIpKSxsPWcodCgiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiKSksYz1nKHQoImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiKSksdT17bm9ybWFsOjEsInNtYWxsLWNhcHMiOjF9LGY9e3NlcmlmOjEsInNhbnMtc2VyaWYiOjEsbW9ub3NwYWNlOjEsY3Vyc2l2ZToxLGZhbnRhc3k6MSwic3lzdGVtLXVpIjoxfSxoPSIxcmVtIixwPSJzZXJpZiI7ZnVuY3Rpb24gZCh0LGUpe2lmKHQmJiFlW3RdJiYhYVt0XSl0aHJvdyBFcnJvcigiVW5rbm93biBrZXl3b3JkIGAiK3QrImAiKTtyZXR1cm4gdH1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT17fSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdXT0xO3JldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigodD1uKHQse3N0eWxlOiJzdHlsZSBmb250c3R5bGUgZm9udFN0eWxlIGZvbnQtc3R5bGUgc2xvcGUgZGlzdGluY3Rpb24iLHZhcmlhbnQ6InZhcmlhbnQgZm9udC12YXJpYW50IGZvbnRWYXJpYW50IGZvbnR2YXJpYW50IHZhciBjYXBpdGFsaXphdGlvbiIsd2VpZ2h0OiJ3ZWlnaHQgdyBmb250LXdlaWdodCBmb250V2VpZ2h0IGZvbnR3ZWlnaHQiLHN0cmV0Y2g6InN0cmV0Y2ggZm9udC1zdHJldGNoIGZvbnRTdHJldGNoIGZvbnRzdHJldGNoIHdpZHRoIixzaXplOiJzaXplIHMgZm9udC1zaXplIGZvbnRTaXplIGZvbnRzaXplIGhlaWdodCBlbSBlbVNpemUiLGxpbmVIZWlnaHQ6ImxoIGxpbmUtaGVpZ2h0IGxpbmVIZWlnaHQgbGluZWhlaWdodCBsZWFkaW5nIixmYW1pbHk6ImZvbnQgZmFtaWx5IGZvbnRGYW1pbHkgZm9udC1mYW1pbHkgZm9udGZhbWlseSB0eXBlIHR5cGVmYWNlIGZhY2UiLHN5c3RlbToic3lzdGVtIHJlc2VydmVkIGRlZmF1bHQgZ2xvYmFsIn0pKS5zeXN0ZW0pcmV0dXJuIHQuc3lzdGVtJiZkKHQuc3lzdGVtLG8pLHQuc3lzdGVtO2lmKGQodC5zdHlsZSxsKSxkKHQudmFyaWFudCx1KSxkKHQud2VpZ2h0LHMpLGQodC5zdHJldGNoLGMpLG51bGw9PXQuc2l6ZSYmKHQuc2l6ZT1oKSwibnVtYmVyIj09dHlwZW9mIHQuc2l6ZSYmKHQuc2l6ZSs9InB4IiksIWkpdGhyb3cgRXJyb3IoIkJhZCBzaXplIHZhbHVlIGAiK3Quc2l6ZSsiYCIpO3QuZmFtaWx5fHwodC5mYW1pbHk9cCksQXJyYXkuaXNBcnJheSh0LmZhbWlseSkmJih0LmZhbWlseS5sZW5ndGh8fCh0LmZhbWlseT1bcF0pLHQuZmFtaWx5PXQuZmFtaWx5Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGZbdF0/dDonIicrdCsnIid9KSkuam9pbigiLCAiKSk7dmFyIGU9W107cmV0dXJuIGUucHVzaCh0LnN0eWxlKSx0LnZhcmlhbnQhPT10LnN0eWxlJiZlLnB1c2godC52YXJpYW50KSx0LndlaWdodCE9PXQudmFyaWFudCYmdC53ZWlnaHQhPT10LnN0eWxlJiZlLnB1c2godC53ZWlnaHQpLHQuc3RyZXRjaCE9PXQud2VpZ2h0JiZ0LnN0cmV0Y2ghPT10LnZhcmlhbnQmJnQuc3RyZXRjaCE9PXQuc3R5bGUmJmUucHVzaCh0LnN0cmV0Y2gpLGUucHVzaCh0LnNpemUrKG51bGw9PXQubGluZUhlaWdodHx8Im5vcm1hbCI9PT10LmxpbmVIZWlnaHR8fHQubGluZUhlaWdodCsiIj09IjEiPyIiOiIvIit0LmxpbmVIZWlnaHQpKSxlLnB1c2godC5mYW1pbHkpLGUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKX19LHsiLi9saWIvdXRpbCI6MTQ1LCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIjoxNDEsImNzcy1mb250LXN0eWxlLWtleXdvcmRzIjoxNDIsImNzcy1mb250LXdlaWdodC1rZXl3b3JkcyI6MTQzLCJjc3MtZ2xvYmFsLWtleXdvcmRzIjoxNDgsImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyI6MTQ5LCJwaWNrLWJ5LWFsaWFzIjo1MTF9XSwxNDg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJpbmhlcml0IiwiaW5pdGlhbCIsInVuc2V0Il19LHt9XSwxNDk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJjYXB0aW9uIiwiaWNvbiIsIm1lbnUiLCJtZXNzYWdlLWJveCIsInNtYWxsLWNhcHRpb24iLCJzdGF0dXMtYmFyIl19LHt9XSwxNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pLTEscz1pKmksbD1vKm8sYz0oMSsyKmkpKmwsdT1pKmwsZj1zKigzLTIqaSksaD1zKm87aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgcD10Lmxlbmd0aC0xO3A+PTA7LS1wKWFbcF09Yyp0W3BdK3UqZVtwXStmKnJbcF0raCpuW3BdO3JldHVybiBhfXJldHVybiBjKnQrdSplK2YqcitoKm59LGUuZXhwb3J0cy5kZXJpdmF0aXZlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz02KmkqaS02Kmkscz0zKmkqaS00KmkrMSxsPS02KmkqaSs2KmksYz0zKmkqaS0yKmk7aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgdT10Lmxlbmd0aC0xO3U+PTA7LS11KWFbdV09byp0W3VdK3MqZVt1XStsKnJbdV0rYypuW3VdO3JldHVybiBhfXJldHVybiBvKnQrcyplK2wqclt1XStjKm59fSx7fV0sMTUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3RodW5rLmpzIik7ZnVuY3Rpb24gaSgpe3RoaXMuYXJnVHlwZXM9W10sdGhpcy5zaGltQXJncz1bXSx0aGlzLmFycmF5QXJncz1bXSx0aGlzLmFycmF5QmxvY2tJbmRpY2VzPVtdLHRoaXMuc2NhbGFyQXJncz1bXSx0aGlzLm9mZnNldEFyZ3M9W10sdGhpcy5vZmZzZXRBcmdJbmRleD1bXSx0aGlzLmluZGV4QXJncz1bXSx0aGlzLnNoYXBlQXJncz1bXSx0aGlzLmZ1bmNOYW1lPSIiLHRoaXMucHJlPW51bGwsdGhpcy5ib2R5PW51bGwsdGhpcy5wb3N0PW51bGwsdGhpcy5kZWJ1Zz0hMX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGk7ZS5wcmU9dC5wcmUsZS5ib2R5PXQuYm9keSxlLnBvc3Q9dC5wb3N0O3ZhciByPXQuYXJncy5zbGljZSgwKTtlLmFyZ1R5cGVzPXI7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBvPXJbYV07aWYoImFycmF5Ij09PW98fCJvYmplY3QiPT10eXBlb2YgbyYmby5ibG9ja0luZGljZXMpe2lmKGUuYXJnVHlwZXNbYV09ImFycmF5IixlLmFycmF5QXJncy5wdXNoKGEpLGUuYXJyYXlCbG9ja0luZGljZXMucHVzaChvLmJsb2NrSW5kaWNlcz9vLmJsb2NrSW5kaWNlczowKSxlLnNoaW1BcmdzLnB1c2goImFycmF5IithKSxhPGUucHJlLmFyZ3MubGVuZ3RoJiZlLnByZS5hcmdzW2FdLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgYXJncyIpO2lmKGE8ZS5wb3N0LmFyZ3MubGVuZ3RoJiZlLnBvc3QuYXJnc1thXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBhcmdzIil9ZWxzZSBpZigic2NhbGFyIj09PW8pZS5zY2FsYXJBcmdzLnB1c2goYSksZS5zaGltQXJncy5wdXNoKCJzY2FsYXIiK2EpO2Vsc2UgaWYoImluZGV4Ij09PW8pe2lmKGUuaW5kZXhBcmdzLnB1c2goYSksYTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1thXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGluZGV4Iik7aWYoYTxlLmJvZHkuYXJncy5sZW5ndGgmJmUuYm9keS5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBib2R5KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBpbmRleCIpO2lmKGE8ZS5wb3N0LmFyZ3MubGVuZ3RoJiZlLnBvc3QuYXJnc1thXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleCIpfWVsc2UgaWYoInNoYXBlIj09PW8pe2lmKGUuc2hhcGVBcmdzLnB1c2goYSksYTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1thXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZSIpO2lmKGE8ZS5ib2R5LmFyZ3MubGVuZ3RoJiZlLmJvZHkuYXJnc1thXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGUiKTtpZihhPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbYV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHdyaXRlIHRvIGFycmF5IHNoYXBlIil9ZWxzZXtpZigib2JqZWN0IiE9dHlwZW9mIG98fCFvLm9mZnNldCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBVbmtub3duIGFyZ3VtZW50IHR5cGUgIityW2FdKTtlLmFyZ1R5cGVzW2FdPSJvZmZzZXQiLGUub2Zmc2V0QXJncy5wdXNoKHthcnJheTpvLmFycmF5LG9mZnNldDpvLm9mZnNldH0pLGUub2Zmc2V0QXJnSW5kZXgucHVzaChhKX19aWYoZS5hcnJheUFyZ3MubGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IE5vIGFycmF5IGFyZ3VtZW50cyBzcGVjaWZpZWQiKTtpZihlLnByZS5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcHJlKCkgYmxvY2siKTtpZihlLmJvZHkuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIGJvZHkoKSBibG9jayIpO2lmKGUucG9zdC5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcG9zdCgpIGJsb2NrIik7cmV0dXJuIGUuZGVidWc9ISF0LnByaW50Q29kZXx8ISF0LmRlYnVnLGUuZnVuY05hbWU9dC5mdW5jTmFtZXx8ImN3aXNlIixlLmJsb2NrU2l6ZT10LmJsb2NrU2l6ZXx8NjQsbihlKX19LHsiLi9saWIvdGh1bmsuanMiOjE1M31dLDE1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ1bmlxIik7ZnVuY3Rpb24gaSh0LGUscil7dmFyIG4saSxhPXQubGVuZ3RoLG89ZS5hcnJheUFyZ3MubGVuZ3RoLHM9ZS5pbmRleEFyZ3MubGVuZ3RoPjAsbD1bXSxjPVtdLHU9MCxmPTA7Zm9yKG49MDtuPGE7KytuKWMucHVzaChbImkiLG4sIj0wIl0uam9pbigiIikpO2ZvcihpPTA7aTxvOysraSlmb3Iobj0wO248YTsrK24pZj11LHU9dFtuXSwwPT09bj9jLnB1c2goWyJkIixpLCJzIixuLCI9dCIsaSwicCIsdV0uam9pbigiIikpOmMucHVzaChbImQiLGksInMiLG4sIj0odCIsaSwicCIsdSwiLXMiLGYsIip0IixpLCJwIixmLCIpIl0uam9pbigiIikpO2ZvcihjLmxlbmd0aD4wJiZsLnB1c2goInZhciAiK2Muam9pbigiLCIpKSxuPWEtMTtuPj0wOy0tbil1PXRbbl0sbC5wdXNoKFsiZm9yKGkiLG4sIj0wO2kiLG4sIjxzIix1LCI7KytpIixuLCIpeyJdLmpvaW4oIiIpKTtmb3IobC5wdXNoKHIpLG49MDtuPGE7KytuKXtmb3IoZj11LHU9dFtuXSxpPTA7aTxvOysraSlsLnB1c2goWyJwIixpLCIrPWQiLGksInMiLG5dLmpvaW4oIiIpKTtzJiYobj4wJiZsLnB1c2goWyJpbmRleFsiLGYsIl0tPXMiLGZdLmpvaW4oIiIpKSxsLnB1c2goWyIrK2luZGV4WyIsdSwiXSJdLmpvaW4oIiIpKSksbC5wdXNoKCJ9Iil9cmV0dXJuIGwuam9pbigiXG4iKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49dC5ib2R5LGk9W10sYT1bXSxvPTA7bzx0LmFyZ3MubGVuZ3RoOysrbyl7dmFyIHM9dC5hcmdzW29dO2lmKCEocy5jb3VudDw9MCkpe3ZhciBsPW5ldyBSZWdFeHAocy5uYW1lLCJnIiksYz0iIix1PWUuYXJyYXlBcmdzLmluZGV4T2Yobyk7c3dpdGNoKGUuYXJnVHlwZXNbb10pe2Nhc2Uib2Zmc2V0Ijp2YXIgZj1lLm9mZnNldEFyZ0luZGV4LmluZGV4T2Yobyk7dT1lLm9mZnNldEFyZ3NbZl0uYXJyYXksYz0iK3EiK2Y7Y2FzZSJhcnJheSI6Yz0icCIrdStjO3ZhciBoPSJsIitvLHA9ImEiK3U7aWYoMD09PWUuYXJyYXlCbG9ja0luZGljZXNbdV0pMT09PXMuY291bnQ/ImdlbmVyaWMiPT09clt1XT9zLmx2YWx1ZT8oaS5wdXNoKFsidmFyICIsaCwiPSIscCwiLmdldCgiLGMsIikiXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxoKSxhLnB1c2goW3AsIi5zZXQoIixjLCIsIixoLCIpIl0uam9pbigiIikpKTpuPW4ucmVwbGFjZShsLFtwLCIuZ2V0KCIsYywiKSJdLmpvaW4oIiIpKTpuPW4ucmVwbGFjZShsLFtwLCJbIixjLCJdIl0uam9pbigiIikpOiJnZW5lcmljIj09PXJbdV0/KGkucHVzaChbInZhciAiLGgsIj0iLHAsIi5nZXQoIixjLCIpIl0uam9pbigiIikpLG49bi5yZXBsYWNlKGwsaCkscy5sdmFsdWUmJmEucHVzaChbcCwiLnNldCgiLGMsIiwiLGgsIikiXS5qb2luKCIiKSkpOihpLnB1c2goWyJ2YXIgIixoLCI9IixwLCJbIixjLCJdIl0uam9pbigiIikpLG49bi5yZXBsYWNlKGwsaCkscy5sdmFsdWUmJmEucHVzaChbcCwiWyIsYywiXT0iLGhdLmpvaW4oIiIpKSk7ZWxzZXtmb3IodmFyIGQ9W3MubmFtZV0sZz1bY10sbT0wO208TWF0aC5hYnMoZS5hcnJheUJsb2NrSW5kaWNlc1t1XSk7bSsrKWQucHVzaCgiXFxzKlxcWyhbXlxcXV0rKVxcXSIpLGcucHVzaCgiJCIrKG0rMSkrIip0Iit1KyJiIittKTtpZihsPW5ldyBSZWdFeHAoZC5qb2luKCIiKSwiZyIpLGM9Zy5qb2luKCIrIiksImdlbmVyaWMiPT09clt1XSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBHZW5lcmljIGFycmF5cyBub3Qgc3VwcG9ydGVkIGluIGNvbWJpbmF0aW9uIHdpdGggYmxvY2tzISIpO249bi5yZXBsYWNlKGwsW3AsIlsiLGMsIl0iXS5qb2luKCIiKSl9YnJlYWs7Y2FzZSJzY2FsYXIiOm49bi5yZXBsYWNlKGwsIlkiK2Uuc2NhbGFyQXJncy5pbmRleE9mKG8pKTticmVhaztjYXNlImluZGV4IjpuPW4ucmVwbGFjZShsLCJpbmRleCIpO2JyZWFrO2Nhc2Uic2hhcGUiOm49bi5yZXBsYWNlKGwsInNoYXBlIil9fX1yZXR1cm5baS5qb2luKCJcbiIpLG4sYS5qb2luKCJcbiIpXS5qb2luKCJcbiIpLnRyaW0oKX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9ITAsbj0wO248dC5sZW5ndGg7KytuKXt2YXIgaT10W25dLGE9aS5tYXRjaCgvXGQrLyk7YT1hP2FbMF06IiIsMD09PWkuY2hhckF0KDApP2Vbbl09InUiK2kuY2hhckF0KDEpK2E6ZVtuXT1pLmNoYXJBdCgwKSthLG4+MCYmKHI9ciYmZVtuXT09PWVbbi0xXSl9cmV0dXJuIHI/ZVswXTplLmpvaW4oIiIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lWzFdLmxlbmd0aC1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKXwwLHM9bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCksbD1uZXcgQXJyYXkodC5hcnJheUFyZ3MubGVuZ3RoKSxjPTA7Yzx0LmFycmF5QXJncy5sZW5ndGg7KytjKWxbY109ZVsyKmNdLHNbY109ZVsyKmMrMV07dmFyIHU9W10sZj1bXSxoPVtdLHA9W10sZD1bXTtmb3IoYz0wO2M8dC5hcnJheUFyZ3MubGVuZ3RoOysrYyl7dC5hcnJheUJsb2NrSW5kaWNlc1tjXTwwPyhoLnB1c2goMCkscC5wdXNoKHIpLHUucHVzaChyKSxmLnB1c2gocit0LmFycmF5QmxvY2tJbmRpY2VzW2NdKSk6KGgucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2NdKSxwLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1tjXStyKSx1LnB1c2goMCksZi5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbY10pKTtmb3IodmFyIGc9W10sbT0wO208c1tjXS5sZW5ndGg7bSsrKWhbY108PXNbY11bbV0mJnNbY11bbV08cFtjXSYmZy5wdXNoKHNbY11bbV0taFtjXSk7ZC5wdXNoKGcpfXZhciB2PVsiU1MiXSx5PVsiJ3VzZSBzdHJpY3QnIl0seD1bXTtmb3IobT0wO208cjsrK20peC5wdXNoKFsicyIsbSwiPVNTWyIsbSwiXSJdLmpvaW4oIiIpKTtmb3IoYz0wO2M8dC5hcnJheUFyZ3MubGVuZ3RoOysrYyl7di5wdXNoKCJhIitjKSx2LnB1c2goInQiK2MpLHYucHVzaCgicCIrYyk7Zm9yKG09MDttPHI7KyttKXgucHVzaChbInQiLGMsInAiLG0sIj10IixjLCJbIixoW2NdK20sIl0iXS5qb2luKCIiKSk7Zm9yKG09MDttPE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbY10pOysrbSl4LnB1c2goWyJ0IixjLCJiIixtLCI9dCIsYywiWyIsdVtjXSttLCJdIl0uam9pbigiIikpfWZvcihjPTA7Yzx0LnNjYWxhckFyZ3MubGVuZ3RoOysrYyl2LnB1c2goIlkiK2MpO2lmKHQuc2hhcGVBcmdzLmxlbmd0aD4wJiZ4LnB1c2goInNoYXBlPVNTLnNsaWNlKDApIiksdC5pbmRleEFyZ3MubGVuZ3RoPjApe3ZhciBiPW5ldyBBcnJheShyKTtmb3IoYz0wO2M8cjsrK2MpYltjXT0iMCI7eC5wdXNoKFsiaW5kZXg9WyIsYi5qb2luKCIsIiksIl0iXS5qb2luKCIiKSl9Zm9yKGM9MDtjPHQub2Zmc2V0QXJncy5sZW5ndGg7KytjKXt2YXIgXz10Lm9mZnNldEFyZ3NbY10sdz1bXTtmb3IobT0wO208Xy5vZmZzZXQubGVuZ3RoOysrbSkwIT09Xy5vZmZzZXRbbV0mJigxPT09Xy5vZmZzZXRbbV0/dy5wdXNoKFsidCIsXy5hcnJheSwicCIsbV0uam9pbigiIikpOncucHVzaChbXy5vZmZzZXRbbV0sIip0IixfLmFycmF5LCJwIixtXS5qb2luKCIiKSkpOzA9PT13Lmxlbmd0aD94LnB1c2goInEiK2MrIj0wIik6eC5wdXNoKFsicSIsYywiPSIsdy5qb2luKCIrIildLmpvaW4oIiIpKX12YXIgVD1uKFtdLmNvbmNhdCh0LnByZS50aGlzVmFycykuY29uY2F0KHQuYm9keS50aGlzVmFycykuY29uY2F0KHQucG9zdC50aGlzVmFycykpO2ZvcigoeD14LmNvbmNhdChUKSkubGVuZ3RoPjAmJnkucHVzaCgidmFyICIreC5qb2luKCIsIikpLGM9MDtjPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2MpeS5wdXNoKCJwIitjKyJ8PTAiKTt0LnByZS5ib2R5Lmxlbmd0aD4zJiZ5LnB1c2goYSh0LnByZSx0LGwpKTt2YXIgaz1hKHQuYm9keSx0LGwpLE09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10WzBdLmxlbmd0aDtlPHI7KXtmb3IodmFyIG49MTtuPHQubGVuZ3RoOysrbilpZih0W25dW2VdIT09dFswXVtlXSlyZXR1cm4gZTsrK2V9cmV0dXJuIGV9KGQpO008cj95LnB1c2goZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPWUubGVuZ3RoLG89ci5hcnJheUFyZ3MubGVuZ3RoLHM9ci5ibG9ja1NpemUsbD1yLmluZGV4QXJncy5sZW5ndGg+MCxjPVtdLHU9MDt1PG87Kyt1KWMucHVzaChbInZhciBvZmZzZXQiLHUsIj1wIix1XS5qb2luKCIiKSk7Zm9yKHU9dDt1PGE7Kyt1KWMucHVzaChbImZvcih2YXIgaiIrdSsiPVNTWyIsZVt1XSwiXXwwO2oiLHUsIj4wOyl7Il0uam9pbigiIikpLGMucHVzaChbImlmKGoiLHUsIjwiLHMsIil7Il0uam9pbigiIikpLGMucHVzaChbInMiLGVbdV0sIj1qIix1XS5qb2luKCIiKSksYy5wdXNoKFsiaiIsdSwiPTAiXS5qb2luKCIiKSksYy5wdXNoKFsifWVsc2V7cyIsZVt1XSwiPSIsc10uam9pbigiIikpLGMucHVzaChbImoiLHUsIi09IixzLCJ9Il0uam9pbigiIikpLGwmJmMucHVzaChbImluZGV4WyIsZVt1XSwiXT1qIix1XS5qb2luKCIiKSk7Zm9yKHU9MDt1PG87Kyt1KXtmb3IodmFyIGY9WyJvZmZzZXQiK3VdLGg9dDtoPGE7KytoKWYucHVzaChbImoiLGgsIip0Iix1LCJwIixlW2hdXS5qb2luKCIiKSk7Yy5wdXNoKFsicCIsdSwiPSgiLGYuam9pbigiKyIpLCIpIl0uam9pbigiIikpfWZvcihjLnB1c2goaShlLHIsbikpLHU9dDt1PGE7Kyt1KWMucHVzaCgifSIpO3JldHVybiBjLmpvaW4oIlxuIil9KE0sZFswXSx0LGspKTp5LnB1c2goaShkWzBdLHQsaykpLHQucG9zdC5ib2R5Lmxlbmd0aD4zJiZ5LnB1c2goYSh0LnBvc3QsdCxsKSksdC5kZWJ1ZyYmY29uc29sZS5sb2coIi0tLS0tR2VuZXJhdGVkIGN3aXNlIHJvdXRpbmUgZm9yICIsZSwiOlxuIit5LmpvaW4oIlxuIikrIlxuLS0tLS0tLS0tLSIpO3ZhciBBPVt0LmZ1bmNOYW1lfHwidW5uYW1lZCIsIl9jd2lzZV9sb29wXyIsc1swXS5qb2luKCJzIiksIm0iLE0sbyhsKV0uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbihbImZ1bmN0aW9uICIsQSwiKCIsdi5qb2luKCIsIiksIil7Iix5LmpvaW4oIlxuIiksIn0gcmV0dXJuICIsQV0uam9pbigiIikpKCl9fSx7dW5pcTo1OTd9XSwxNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb21waWxlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVsiJ3VzZSBzdHJpY3QnIiwidmFyIENBQ0hFRD17fSJdLHI9W10saT10LmZ1bmNOYW1lKyJfY3dpc2VfdGh1bmsiO2UucHVzaChbInJldHVybiBmdW5jdGlvbiAiLGksIigiLHQuc2hpbUFyZ3Muam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIGE9W10sbz1bXSxzPVtbImFycmF5Iix0LmFycmF5QXJnc1swXSwiLnNoYXBlLnNsaWNlKCIsTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSx0LmFycmF5QmxvY2tJbmRpY2VzWzBdPDA/IiwiK3QuYXJyYXlCbG9ja0luZGljZXNbMF0rIikiOiIpIl0uam9pbigiIildLGw9W10sYz1bXSx1PTA7dTx0LmFycmF5QXJncy5sZW5ndGg7Kyt1KXt2YXIgZj10LmFycmF5QXJnc1t1XTtyLnB1c2goWyJ0IixmLCI9YXJyYXkiLGYsIi5kdHlwZSwiLCJyIixmLCI9YXJyYXkiLGYsIi5vcmRlciJdLmpvaW4oIiIpKSxhLnB1c2goInQiK2YpLGEucHVzaCgiciIrZiksby5wdXNoKCJ0IitmKSxvLnB1c2goInIiK2YrIi5qb2luKCkiKSxzLnB1c2goImFycmF5IitmKyIuZGF0YSIpLHMucHVzaCgiYXJyYXkiK2YrIi5zdHJpZGUiKSxzLnB1c2goImFycmF5IitmKyIub2Zmc2V0fDAiKSx1PjAmJihsLnB1c2goImFycmF5Iit0LmFycmF5QXJnc1swXSsiLnNoYXBlLmxlbmd0aD09PWFycmF5IitmKyIuc2hhcGUubGVuZ3RoKyIrKE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbMF0pLU1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbdV0pKSksYy5wdXNoKCJhcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZVtzaGFwZUluZGV4KyIrTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSsiXT09PWFycmF5IitmKyIuc2hhcGVbc2hhcGVJbmRleCsiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1t1XSkrIl0iKSl9Zm9yKHQuYXJyYXlBcmdzLmxlbmd0aD4xJiYoZS5wdXNoKCJpZiAoISgiK2wuam9pbigiICYmICIpKyIpKSB0aHJvdyBuZXcgRXJyb3IoJ2N3aXNlOiBBcnJheXMgZG8gbm90IGFsbCBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbmFsaXR5IScpIiksZS5wdXNoKCJmb3IodmFyIHNoYXBlSW5kZXg9YXJyYXkiK3QuYXJyYXlBcmdzWzBdKyIuc2hhcGUubGVuZ3RoLSIrTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSkrIjsgc2hhcGVJbmRleC0tXHgzZTA7KSB7IiksZS5wdXNoKCJpZiAoISgiK2Muam9pbigiICYmICIpKyIpKSB0aHJvdyBuZXcgRXJyb3IoJ2N3aXNlOiBBcnJheXMgZG8gbm90IGFsbCBoYXZlIHRoZSBzYW1lIHNoYXBlIScpIiksZS5wdXNoKCJ9IikpLHU9MDt1PHQuc2NhbGFyQXJncy5sZW5ndGg7Kyt1KXMucHVzaCgic2NhbGFyIit0LnNjYWxhckFyZ3NbdV0pO3JldHVybiByLnB1c2goWyJ0eXBlPVsiLG8uam9pbigiLCIpLCJdLmpvaW4oKSJdLmpvaW4oIiIpKSxyLnB1c2goInByb2M9Q0FDSEVEW3R5cGVdIiksZS5wdXNoKCJ2YXIgIityLmpvaW4oIiwiKSksZS5wdXNoKFsiaWYoIXByb2MpeyIsIkNBQ0hFRFt0eXBlXT1wcm9jPWNvbXBpbGUoWyIsYS5qb2luKCIsIiksIl0pfSIsInJldHVybiBwcm9jKCIscy5qb2luKCIsIiksIil9Il0uam9pbigiIikpLHQuZGVidWcmJmNvbnNvbGUubG9nKCItLS0tLUdlbmVyYXRlZCB0aHVuazpcbiIrZS5qb2luKCJcbiIpKyJcbi0tLS0tLS0tLS0iKSxuZXcgRnVuY3Rpb24oImNvbXBpbGUiLGUuam9pbigiXG4iKSkobi5iaW5kKHZvaWQgMCx0KSl9fSx7Ii4vY29tcGlsZS5qcyI6MTUyfV0sMTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgidHlwZS92YWx1ZS9pcyIpLGE9dCgidHlwZS92YWx1ZS9lbnN1cmUiKSxvPXQoInR5cGUvcGxhaW4tZnVuY3Rpb24vZW5zdXJlIikscz10KCJlczUtZXh0L29iamVjdC9jb3B5IiksbD10KCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9ucyIpLGM9dCgiZXM1LWV4dC9vYmplY3QvbWFwIiksdT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZCxmPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7bj1mdW5jdGlvbih0LGUscil7dmFyIG4saT1hKGUpJiZvKGUudmFsdWUpO3JldHVybiBkZWxldGUobj1zKGUpKS53cml0YWJsZSxkZWxldGUgbi52YWx1ZSxuLmdldD1mdW5jdGlvbigpe3JldHVybiFyLm92ZXJ3cml0ZURlZmluaXRpb24mJmguY2FsbCh0aGlzLHQpP2k6KGUudmFsdWU9dS5jYWxsKGksci5yZXNvbHZlQ29udGV4dD9yLnJlc29sdmVDb250ZXh0KHRoaXMpOnRoaXMpLGYodGhpcyx0LGUpLHRoaXNbdF0pfSxufSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bChhcmd1bWVudHNbMV0pO3JldHVybiBpKGUucmVzb2x2ZUNvbnRleHQpJiZvKGUucmVzb2x2ZUNvbnRleHQpLGModCwoZnVuY3Rpb24odCxyKXtyZXR1cm4gbihyLHQsZSl9KSl9fSx7ImVzNS1leHQvb2JqZWN0L2NvcHkiOjE5NiwiZXM1LWV4dC9vYmplY3QvbWFwIjoyMDQsImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIjoyMDUsInR5cGUvcGxhaW4tZnVuY3Rpb24vZW5zdXJlIjo1ODksInR5cGUvdmFsdWUvZW5zdXJlIjo1OTMsInR5cGUvdmFsdWUvaXMiOjU5NH1dLDE1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0eXBlL3ZhbHVlL2lzIiksaT10KCJ0eXBlL3BsYWluLWZ1bmN0aW9uL2lzIiksYT10KCJlczUtZXh0L29iamVjdC9hc3NpZ24iKSxvPXQoImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIikscz10KCJlczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zIik7KGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksbCxjLHU7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mnx8InN0cmluZyIhPXR5cGVvZiB0PyhjPWUsZT10LHQ9bnVsbCk6Yz1hcmd1bWVudHNbMl0sbih0KT8ocj1zLmNhbGwodCwiYyIpLGk9cy5jYWxsKHQsImUiKSxsPXMuY2FsbCh0LCJ3IikpOihyPWw9ITAsaT0hMSksdT17dmFsdWU6ZSxjb25maWd1cmFibGU6cixlbnVtZXJhYmxlOmksd3JpdGFibGU6bH0sYz9hKG8oYyksdSk6dX0pLmdzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbCxjLHUsZjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQ/KHU9cixyPWUsZT10LHQ9bnVsbCk6dT1hcmd1bWVudHNbM10sbihlKT9pKGUpP24ocik/aShyKXx8KHU9cixyPXZvaWQgMCk6cj12b2lkIDA6KHU9ZSxlPXI9dm9pZCAwKTplPXZvaWQgMCxuKHQpPyhsPXMuY2FsbCh0LCJjIiksYz1zLmNhbGwodCwiZSIpKToobD0hMCxjPSExKSxmPXtnZXQ6ZSxzZXQ6cixjb25maWd1cmFibGU6bCxlbnVtZXJhYmxlOmN9LHU/YShvKHUpLGYpOmZ9fSx7ImVzNS1leHQvb2JqZWN0L2Fzc2lnbiI6MTkzLCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9ucyI6MjA1LCJlczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zIjoyMTIsInR5cGUvcGxhaW4tZnVuY3Rpb24vaXMiOjU5MCwidHlwZS92YWx1ZS9pcyI6NTk0fV0sMTU2OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7bigib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9yOnQuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiByKHQpe3ZhciByO3JldHVybiAxPT09dC5sZW5ndGgmJihyPXQsdD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHIodCksbil9KSx7bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19dmFyIG49cihlKSxpPW4ucmlnaHQsYT1uLmxlZnQ7ZnVuY3Rpb24gbyh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIHModCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9MCxvPS0xLGw9MCxjPTA7aWYobnVsbD09ZSlmb3IoOysrbzxpOylpc05hTihyPXModFtvXSkpfHwoYys9KG49ci1sKSooci0obCs9bi8rK2EpKSk7ZWxzZSBmb3IoOysrbzxpOylpc05hTihyPXMoZSh0W29dLG8sdCkpKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKythKSkpO2lmKGE+MSlyZXR1cm4gYy8oYS0xKX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9bCh0LGUpO3JldHVybiByP01hdGguc3FydChyKTpyfWZ1bmN0aW9uIHUodCxlKXt2YXIgcixuLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShyPXRbb10pJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9dFtvXSkmJihuPnImJihuPXIpLGk8ciYmKGk9cikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KHI9ZSh0W29dLG8sdCkpJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9ZSh0W29dLG8sdCkpJiYobj5yJiYobj1yKSxpPHImJihpPXIpKTtyZXR1cm5bbixpXX12YXIgZj1BcnJheS5wcm90b3R5cGUsaD1mLnNsaWNlLHA9Zi5tYXA7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdH1mdW5jdGlvbiBtKHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfXZhciB2PU1hdGguc3FydCg1MCkseT1NYXRoLnNxcnQoMTApLHg9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGIodCxlLHIpe3ZhciBuPShlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksYT1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj12PzEwOmE+PXk/NTphPj14PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49dj8xMDphPj15PzU6YT49eD8yOjEpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksYT1uL2k7cmV0dXJuIGE+PXY/aSo9MTA6YT49eT9pKj01OmE+PXgmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiB3KHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIFQodCxlLHIpe2lmKG51bGw9PXImJihyPXMpLG49dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8bjwyKXJldHVybityKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybityKHRbbi0xXSxuLTEsdCk7dmFyIG4saT0obi0xKSplLGE9TWF0aC5mbG9vcihpKSxvPStyKHRbYV0sYSx0KTtyZXR1cm4gbysoK3IodFthKzFdLGErMSx0KS1vKSooaS1hKX19ZnVuY3Rpb24gayh0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZuPnImJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmbj5yJiYobj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBNKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLHI9ayh0LEEpLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGksYT0tMSxvPW5bZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIG59ZnVuY3Rpb24gQSh0KXtyZXR1cm4gdC5sZW5ndGh9dC5iaXNlY3Q9aSx0LmJpc2VjdFJpZ2h0PWksdC5iaXNlY3RMZWZ0PWEsdC5hc2NlbmRpbmc9ZSx0LmJpc2VjdG9yPXIsdC5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLHMsbD10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KGwqYyk7Zm9yKG51bGw9PXImJihyPW8pLG49YT0wO248bDsrK24pZm9yKHM9dFtuXSxpPTA7aTxjOysraSwrK2EpdVthXT1yKHMsZVtpXSk7cmV0dXJuIHV9LHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5kZXZpYXRpb249Yyx0LmV4dGVudD11LHQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIHQ9ZyxlPXUscj13O2Z1bmN0aW9uIG4obil7dmFyIGEsbyxzPW4ubGVuZ3RoLGw9bmV3IEFycmF5KHMpO2ZvcihhPTA7YTxzOysrYSlsW2FdPXQoblthXSxhLG4pO3ZhciBjPWUobCksdT1jWzBdLGY9Y1sxXSxoPXIobCx1LGYpO0FycmF5LmlzQXJyYXkoaCl8fChoPV8odSxmLGgpLGg9bShNYXRoLmNlaWwodS9oKSpoLGYsaCkpO2Zvcih2YXIgcD1oLmxlbmd0aDtoWzBdPD11OyloLnNoaWZ0KCksLS1wO2Zvcig7aFtwLTFdPmY7KWgucG9wKCksLS1wO3ZhciBkLGc9bmV3IEFycmF5KHArMSk7Zm9yKGE9MDthPD1wOysrYSkoZD1nW2FdPVtdKS54MD1hPjA/aFthLTFdOnUsZC54MT1hPHA/aFthXTpmO2ZvcihhPTA7YTxzOysrYSl1PD0obz1sW2FdKSYmbzw9ZiYmZ1tpKGgsbywwLHApXS5wdXNoKG5bYV0pO3JldHVybiBnfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZChlKSxuKTp0fSxuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmQoW3RbMF0sdFsxXV0pLG4pOmV9LG4udGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/ZChoLmNhbGwodCkpOmQodCksbik6cn0sbn0sdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdD1wLmNhbGwodCxzKS5zb3J0KGUpLE1hdGguY2VpbCgobi1yKS8oMiooVCh0LC43NSktVCh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU2NvdHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmNlaWwoKHItZSkvKDMuNSpjKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU3R1cmdlcz13LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJnI+biYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPm4mJihuPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9bixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPG47KWlzTmFOKHI9cyh0W2FdKSk/LS1pOm8rPXI7ZWxzZSBmb3IoOysrYTxuOylpc05hTihyPXMoZSh0W2FdLGEsdCkpKT8tLWk6bys9cjtpZihpKXJldHVybiBvL2l9LHQubWVkaWFuPWZ1bmN0aW9uKHQscil7dmFyIG4saT10Lmxlbmd0aCxhPS0xLG89W107aWYobnVsbD09cilmb3IoOysrYTxpOylpc05hTihuPXModFthXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrYTxpOylpc05hTihuPXMocih0W2FdLGEsdCkpKXx8by5wdXNoKG4pO3JldHVybiBUKG8uc29ydChlKSwuNSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3IoZT0obj10W2ldKS5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn0sdC5taW49ayx0LnBhaXJzPWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9byk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9dFswXSxhPW5ldyBBcnJheShuPDA/MDpuKTtyPG47KWFbcl09ZShpLGk9dFsrK3JdKTtyZXR1cm4gYX0sdC5wZXJtdXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSx0LnF1YW50aWxlPVQsdC5yYW5nZT1tLHQuc2Nhbj1mdW5jdGlvbih0LHIpe2lmKG49dC5sZW5ndGgpe3ZhciBuLGksYT0wLG89MCxzPXRbb107Zm9yKG51bGw9PXImJihyPWUpOysrYTxuOykocihpPXRbYV0scyk8MHx8MCE9PXIocyxzKSkmJihzPWksbz1hKTtyZXR1cm4gMD09PXIocyxzKT9vOnZvaWQgMH19LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0obnVsbD09cj90Lmxlbmd0aDpyKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxuOykocj0rdFtpXSkmJihhKz1yKTtlbHNlIGZvcig7KytpPG47KShyPStlKHRbaV0saSx0KSkmJihhKz1yKTtyZXR1cm4gYX0sdC50aWNrcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scz0tMTtpZihyPStyLCh0PSt0KT09PShlPStlKSYmcj4wKXJldHVyblt0XTtpZigobj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1iKHQsZSxyKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApZm9yKHQ9TWF0aC5jZWlsKHQvbyksZT1NYXRoLmZsb29yKGUvbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpvO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0Km8pLGU9TWF0aC5jZWlsKGUqbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9vO3JldHVybiBuJiZhLnJldmVyc2UoKSxhfSx0LnRpY2tJbmNyZW1lbnQ9Yix0LnRpY2tTdGVwPV8sdC50cmFuc3Bvc2U9TSx0LnZhcmlhbmNlPWwsdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gTShhcmd1bWVudHMpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNTc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXtuKCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP3I6dC5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKCl7fWZ1bmN0aW9uIHIodCxyKXt2YXIgbj1uZXcgZTtpZih0IGluc3RhbmNlb2YgZSl0LmVhY2goKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBpLGE9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1yKWZvcig7KythPG87KW4uc2V0KGEsdFthXSk7ZWxzZSBmb3IoOysrYTxvOyluLnNldChyKGk9dFthXSxhLHQpLGkpfWVsc2UgaWYodClmb3IodmFyIHMgaW4gdCluLnNldChzLHRbc10pO3JldHVybiBufWZ1bmN0aW9uIG4oKXtyZXR1cm57fX1mdW5jdGlvbiBpKHQsZSxyKXt0W2VdPXJ9ZnVuY3Rpb24gYSgpe3JldHVybiByKCl9ZnVuY3Rpb24gbyh0LGUscil7dC5zZXQoZSxyKX1mdW5jdGlvbiBzKCl7fWUucHJvdG90eXBlPXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplLGhhczpmdW5jdGlvbih0KXtyZXR1cm4iJCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1siJCIrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9IiQiK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpIiQiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYoIiQiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBsPXIucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1uZXcgcztpZih0IGluc3RhbmNlb2Ygcyl0LmVhY2goKGZ1bmN0aW9uKHQpe3IuYWRkKHQpfSkpO2Vsc2UgaWYodCl7dmFyIG49LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytuPGk7KXIuYWRkKHRbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQoZSh0W25dLG4sdCkpfXJldHVybiByfXMucHJvdG90eXBlPWMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLGhhczpsLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOmwucmVtb3ZlLGNsZWFyOmwuY2xlYXIsdmFsdWVzOmwua2V5cyxzaXplOmwuc2l6ZSxlbXB0eTpsLmVtcHR5LGVhY2g6bC5lYWNofSx0Lm5lc3Q9ZnVuY3Rpb24oKXt2YXIgdCxlLHMsbD1bXSxjPVtdO2Z1bmN0aW9uIHUobixpLGEsbyl7aWYoaT49bC5sZW5ndGgpcmV0dXJuIG51bGwhPXQmJm4uc29ydCh0KSxudWxsIT1lP2Uobik6bjtmb3IodmFyIHMsYyxmLGg9LTEscD1uLmxlbmd0aCxkPWxbaSsrXSxnPXIoKSxtPWEoKTsrK2g8cDspKGY9Zy5nZXQocz1kKGM9bltoXSkrIiIpKT9mLnB1c2goYyk6Zy5zZXQocyxbY10pO3JldHVybiBnLmVhY2goKGZ1bmN0aW9uKHQsZSl7byhtLGUsdSh0LGksYSxvKSl9KSksbX1yZXR1cm4gcz17b2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMCxuLGkpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHUodCwwLGEsbyl9LGVudHJpZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQocixuKXtpZigrK24+bC5sZW5ndGgpcmV0dXJuIHI7dmFyIGksYT1jW24tMV07cmV0dXJuIG51bGwhPWUmJm4+PWwubGVuZ3RoP2k9ci5lbnRyaWVzKCk6KGk9W10sci5lYWNoKChmdW5jdGlvbihlLHIpe2kucHVzaCh7a2V5OnIsdmFsdWVzOnQoZSxuKX0pfSkpKSxudWxsIT1hP2kuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh0LmtleSxlLmtleSl9KSk6aX0odSh0LDAsYSxvKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiBsLnB1c2godCksc30sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGNbbC5sZW5ndGgtMV09dCxzfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PWUsc30scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsc319fSx0LnNldD1jLHQubWFwPXIsdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX0sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHtrZXk6cix2YWx1ZTp0W3JdfSk7cmV0dXJuIGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE1ODpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSxyKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9dH1mdW5jdGlvbiByKHQsZSl7dmFyIHI9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIG4oKXt9dmFyIGk9IlxccyooWystXT9cXGQrKVxccyoiLGE9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsbz0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIscz0vXiMoWzAtOWEtZl17Myw4fSkkLyxsPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tpLGksaV0rIlxcKSQiKSxjPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvLG8sb10rIlxcKSQiKSx1PW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbaSxpLGksYV0rIlxcKSQiKSxmPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbbyxvLG8sYV0rIlxcKSQiKSxoPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1thLG8sb10rIlxcKSQiKSxwPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbYSxvLG8sYV0rIlxcKSQiKSxkPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIGcoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBtKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gdih0KXt2YXIgZSxyO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1zLmV4ZWModCkpPyhyPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PXI/eShlKTozPT09cj9uZXcgdyhlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PXI/eChlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09cj94KGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9bC5leGVjKHQpKT9uZXcgdyhlWzFdLGVbMl0sZVszXSwxKTooZT1jLmV4ZWModCkpP25ldyB3KDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPXUuZXhlYyh0KSk/eChlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1mLmV4ZWModCkpP3goMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9aC5leGVjKHQpKT9BKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9cC5leGVjKHQpKT9BKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6ZC5oYXNPd25Qcm9wZXJ0eSh0KT95KGRbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyB3KE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbmV3IHcodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuIG48PTAmJih0PWU9cj1OYU4pLG5ldyB3KHQsZSxyLG4pfWZ1bmN0aW9uIGIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBufHwodD12KHQpKSx0P25ldyB3KCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyB3fWZ1bmN0aW9uIF8odCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2IodCk6bmV3IHcodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIHcodCxlLHIsbil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFQoKXtyZXR1cm4iIyIrTSh0aGlzLnIpK00odGhpcy5nKStNKHRoaXMuYil9ZnVuY3Rpb24gaygpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfWZ1bmN0aW9uIE0odCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBBKHQsZSxyLG4pe3JldHVybiBuPD0wP3Q9ZT1yPU5hTjpyPD0wfHxyPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgQyh0LGUscixuKX1mdW5jdGlvbiBTKHQpe2lmKHQgaW5zdGFuY2VvZiBDKXJldHVybiBuZXcgQyh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBufHwodD12KHQpKSwhdClyZXR1cm4gbmV3IEM7aWYodCBpbnN0YW5jZW9mIEMpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUscj10LmcvMjU1LGk9dC5iLzI1NSxhPU1hdGgubWluKGUscixpKSxvPU1hdGgubWF4KGUscixpKSxzPU5hTixsPW8tYSxjPShvK2EpLzI7cmV0dXJuIGw/KHM9ZT09PW8/KHItaSkvbCs2KihyPGkpOnI9PT1vPyhpLWUpL2wrMjooZS1yKS9sKzQsbC89YzwuNT9vK2E6Mi1vLWEscyo9NjApOmw9Yz4wJiZjPDE/MDpzLG5ldyBDKHMsbCxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gRSh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Uyh0KTpuZXcgQyh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gQyh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTCh0LGUscil7cmV0dXJuIDI1NSoodDw2MD9lKyhyLWUpKnQvNjA6dDwxODA/cjp0PDI0MD9lKyhyLWUpKigyNDAtdCkvNjA6ZSl9ZShuLHYse2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6Zyxmb3JtYXRIZXg6Zyxmb3JtYXRIc2w6ZnVuY3Rpb24oKXtyZXR1cm4gUyh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOm0sdG9TdHJpbmc6bX0pLGUodyxfLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IHcodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IHcodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpULGZvcm1hdEhleDpULGZvcm1hdFJnYjprLHRvU3RyaW5nOmt9KSksZShDLEUscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgQyh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBDKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqZSxpPTIqci1uO3JldHVybiBuZXcgdyhMKHQ+PTI0MD90LTI0MDp0KzEyMCxpLG4pLEwodCxpLG4pLEwodDwxMjA/dCsyNDA6dC0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTt2YXIgST1NYXRoLlBJLzE4MCxQPTE4MC9NYXRoLlBJLHo9Ni8yOSxPPTMqeip6O2Z1bmN0aW9uIEQodCl7aWYodCBpbnN0YW5jZW9mIEYpcmV0dXJuIG5ldyBGKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEgpcmV0dXJuIEcodCk7dCBpbnN0YW5jZW9mIHd8fCh0PWIodCkpO3ZhciBlLHIsbj1VKHQuciksaT1VKHQuZyksYT1VKHQuYiksbz1CKCguMjIyNTA0NSpuKy43MTY4Nzg2KmkrLjA2MDYxNjkqYSkvMSk7cmV0dXJuIG49PT1pJiZpPT09YT9lPXI9bzooZT1CKCguNDM2MDc0NypuKy4zODUwNjQ5KmkrLjE0MzA4MDQqYSkvLjk2NDIyKSxyPUIoKC4wMTM5MzIyKm4rLjA5NzEwNDUqaSsuNzE0MTczMyphKS8uODI1MjEpKSxuZXcgRigxMTYqby0xNiw1MDAqKGUtbyksMjAwKihvLXIpLHQub3BhY2l0eSl9ZnVuY3Rpb24gUih0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RCh0KTpuZXcgRih0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gRih0LGUscixuKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gQih0KXtyZXR1cm4gdD4uMDA4ODU2NDUxNjc5MDM1NjMxP01hdGgucG93KHQsMS8zKTp0L08rNC8yOX1mdW5jdGlvbiBOKHQpe3JldHVybiB0Pno/dCp0KnQ6TyoodC00LzI5KX1mdW5jdGlvbiBqKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gVSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBWKHQpe2lmKHQgaW5zdGFuY2VvZiBIKXJldHVybiBuZXcgSCh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBGfHwodD1EKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgSChOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpQO3JldHVybiBuZXcgSChlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBxKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9WKHQpOm5ldyBIKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBIKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBHKHQpe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyBGKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqSTtyZXR1cm4gbmV3IEYodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX1lKEYsUixyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRih0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEYodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IHcoaigzLjEzMzg1NjEqKGU9Ljk2NDIyKk4oZSkpLTEuNjE2ODY2NyoodD0xKk4odCkpLS40OTA2MTQ2KihyPS44MjUyMSpOKHIpKSksaigtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0KnIpLGooLjA3MTk0NTMqZS0uMjI4OTkxNCp0KzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKSxlKEgscSxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSCh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEgodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gRyh0aGlzKS5yZ2IoKX19KSk7dmFyIFk9LS4xNDg2MSxXPTEuNzgyNzcsWD0tLjI5MjI3LFo9LS45MDY0OSxKPTEuOTcyOTQsSz1KKlosUT1KKlcsJD1XKlgtWipZO2Z1bmN0aW9uIHR0KHQpe2lmKHQgaW5zdGFuY2VvZiBydClyZXR1cm4gbmV3IHJ0KHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIHd8fCh0PWIodCkpO3ZhciBlPXQuci8yNTUscj10LmcvMjU1LG49dC5iLzI1NSxpPSgkKm4rSyplLVEqcikvKCQrSy1RKSxhPW4taSxvPShKKihyLWkpLVgqYSkvWixzPU1hdGguc3FydChvKm8rYSphKS8oSippKigxLWkpKSxsPXM/TWF0aC5hdGFuMihvLGEpKlAtMTIwOk5hTjtyZXR1cm4gbmV3IHJ0KGw8MD9sKzM2MDpsLHMsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGV0KHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90dCh0KTpuZXcgcnQodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIHJ0KHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1lKHJ0LGV0LHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IHJ0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IHJ0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpJLGU9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxuPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyB3KDI1NSooZStyKihZKm4rVyppKSksMjU1KihlK3IqKFgqbitaKmkpKSwyNTUqKGUrciooSipuKSksdGhpcy5vcGFjaXR5KX19KSksdC5jb2xvcj12LHQuY3ViZWhlbGl4PWV0LHQuZ3JheT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgRih0LDAsMCxudWxsPT1lPzE6ZSl9LHQuaGNsPXEsdC5oc2w9RSx0LmxhYj1SLHQubGNoPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9WKHQpOm5ldyBIKHIsZSx0LG51bGw9PW4/MTpuKX0sdC5yZ2I9XyxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNTk6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9uKHIpOm4oKHQ9dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gcigpe2Zvcih2YXIgdCxlPTAscj1hcmd1bWVudHMubGVuZ3RoLGk9e307ZTxyOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gaXx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO2lbdF09W119cmV0dXJuIG5ldyBuKGkpfWZ1bmN0aW9uIG4odCl7dGhpcy5fPXR9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7aWYobj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6cn19KSl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcixuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWlmKChyPXRbbl0pLm5hbWU9PT1lKXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIG8odCxyLG4pe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxhOysraSlpZih0W2ldLm5hbWU9PT1yKXt0W2ldPWUsdD10LnNsaWNlKDAsaSkuY29uY2F0KHQuc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTpyLHZhbHVlOm59KSx0fW4ucHJvdG90eXBlPXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLl8scz1pKHQrIiIsbiksbD0tMSxjPXMubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytsPGM7KWlmKHI9KHQ9c1tsXSkudHlwZSluW3JdPW8obltyXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihyIGluIG4pbltyXT1vKG5bcl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytsPGM7KWlmKChyPSh0PXNbbF0pLnR5cGUpJiYocj1hKG5bcl0sdC5uYW1lKSkpcmV0dXJuIHJ9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IG4odCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByLG4saT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAscj0obj10aGlzLl9bdF0pLmxlbmd0aDthPHI7KythKW5bYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBuPXRoaXMuX1t0XSxpPTAsYT1uLmxlbmd0aDtpPGE7KytpKW5baV0udmFsdWUuYXBwbHkoZSxyKX19LHQuZGlzcGF0Y2g9cixPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNjA6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9pKHIsdCgiZDMtcXVhZHRyZWUiKSx0KCJkMy1jb2xsZWN0aW9uIiksdCgiZDMtZGlzcGF0Y2giKSx0KCJkMy10aW1lciIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyxuLmQzLG4uZDMsbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSxyLG4saSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG8oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC55K3Qudnl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9dC5nZXQoZSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiByfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBoKHQpe3JldHVybiB0Lnl9dmFyIHA9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO3QuZm9yY2VDZW50ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcjtmdW5jdGlvbiBuKCl7dmFyIG4saSxhPXIubGVuZ3RoLG89MCxzPTA7Zm9yKG49MDtuPGE7KytuKW8rPShpPXJbbl0pLngscys9aS55O2ZvcihvPW8vYS10LHM9cy9hLWUsbj0wO248YTsrK24pKGk9cltuXSkueC09byxpLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLG4uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXR9LG4ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxuKTp0fSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qsbik6ZX0sbn0sdC5mb3JjZUNvbGxpZGU9ZnVuY3Rpb24odCl7dmFyIHIsbixpPTEsYz0xO2Z1bmN0aW9uIHUoKXtmb3IodmFyIHQsYSx1LGgscCxkLGcsbT1yLmxlbmd0aCx2PTA7djxjOysrdilmb3IoYT1lLnF1YWR0cmVlKHIscyxsKS52aXNpdEFmdGVyKGYpLHQ9MDt0PG07Kyt0KXU9clt0XSxkPW5bdS5pbmRleF0sZz1kKmQsaD11LngrdS52eCxwPXUueSt1LnZ5LGEudmlzaXQoeSk7ZnVuY3Rpb24geSh0LGUscixuLGEpe3ZhciBzPXQuZGF0YSxsPXQucixjPWQrbDtpZighcylyZXR1cm4gZT5oK2N8fG48aC1jfHxyPnArY3x8YTxwLWM7aWYocy5pbmRleD51LmluZGV4KXt2YXIgZj1oLXMueC1zLnZ4LG09cC1zLnktcy52eSx2PWYqZittKm07djxjKmMmJigwPT09ZiYmKHYrPShmPW8oKSkqZiksMD09PW0mJih2Kz0obT1vKCkpKm0pLHY9KGMtKHY9TWF0aC5zcXJ0KHYpKSkvdippLHUudngrPShmKj12KSooYz0obCo9bCkvKGcrbCkpLHUudnkrPShtKj12KSpjLHMudngtPWYqKGM9MS1jKSxzLnZ5LT1tKmMpfX19ZnVuY3Rpb24gZih0KXtpZih0LmRhdGEpcmV0dXJuIHQucj1uW3QuZGF0YS5pbmRleF07Zm9yKHZhciBlPXQucj0wO2U8NDsrK2UpdFtlXSYmdFtlXS5yPnQuciYmKHQucj10W2VdLnIpfWZ1bmN0aW9uIGgoKXtpZihyKXt2YXIgZSxpLGE9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpLGU9MDtlPGE7KytlKWk9cltlXSxuW2kuaW5kZXhdPSt0KGksZSxyKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8xOit0KSksdS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxoKCl9LHUuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCx1KTpjfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LHUpOml9LHUucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSksaCgpLHUpOnR9LHV9LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxzLGwsZj1jLGg9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5taW4oc1t0LnNvdXJjZS5pbmRleF0sc1t0LnRhcmdldC5pbmRleF0pfSxwPWEoMzApLGQ9MTtmdW5jdGlvbiBnKHIpe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxkOysraSlmb3IodmFyIHMsYyx1LGYsaCxwLGcsbT0wO208YTsrK20pYz0ocz10W21dKS5zb3VyY2UsZj0odT1zLnRhcmdldCkueCt1LnZ4LWMueC1jLnZ4fHxvKCksaD11LnkrdS52eS1jLnktYy52eXx8bygpLGYqPXA9KChwPU1hdGguc3FydChmKmYraCpoKSktblttXSkvcCpyKmVbbV0saCo9cCx1LnZ4LT1mKihnPWxbbV0pLHUudnktPWgqZyxjLnZ4Kz1mKihnPTEtZyksYy52eSs9aCpnfWZ1bmN0aW9uIG0oKXtpZihpKXt2YXIgYSxvLGM9aS5sZW5ndGgsaD10Lmxlbmd0aCxwPXIubWFwKGksZik7Zm9yKGE9MCxzPW5ldyBBcnJheShjKTthPGg7KythKShvPXRbYV0pLmluZGV4PWEsIm9iamVjdCIhPXR5cGVvZiBvLnNvdXJjZSYmKG8uc291cmNlPXUocCxvLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2Ygby50YXJnZXQmJihvLnRhcmdldD11KHAsby50YXJnZXQpKSxzW28uc291cmNlLmluZGV4XT0oc1tvLnNvdXJjZS5pbmRleF18fDApKzEsc1tvLnRhcmdldC5pbmRleF09KHNbby50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihhPTAsbD1uZXcgQXJyYXkoaCk7YTxoOysrYSlvPXRbYV0sbFthXT1zW28uc291cmNlLmluZGV4XS8oc1tvLnNvdXJjZS5pbmRleF0rc1tvLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGgpLHYoKSxuPW5ldyBBcnJheShoKSx5KCl9fWZ1bmN0aW9uIHYoKXtpZihpKWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillW3JdPStoKHRbcl0scix0KX1mdW5jdGlvbiB5KCl7aWYoaSlmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpbltlXT0rcCh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxnLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LG0oKX0sZy5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG0oKSxnKTp0fSxnLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXQsZyk6Zn0sZy5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0LGcpOmR9LGcuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSx2KCksZyk6aH0sZy5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmEoK3QpLHkoKSxnKTpwfSxnfSx0LmZvcmNlTWFueUJvZHk9ZnVuY3Rpb24oKXt2YXIgdCxyLG4saSxzPWEoLTMwKSxsPTEsYz0xLzAsdT0uODE7ZnVuY3Rpb24gcChpKXt2YXIgYSxvPXQubGVuZ3RoLHM9ZS5xdWFkdHJlZSh0LGYsaCkudmlzaXRBZnRlcihnKTtmb3Iobj1pLGE9MDthPG87KythKXI9dFthXSxzLnZpc2l0KG0pfWZ1bmN0aW9uIGQoKXtpZih0KXt2YXIgZSxyLG49dC5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKXI9dFtlXSxpW3IuaW5kZXhdPStzKHIsZSx0KX19ZnVuY3Rpb24gZyh0KXt2YXIgZSxyLG4sYSxvLHM9MCxsPTA7aWYodC5sZW5ndGgpe2ZvcihuPWE9bz0wO288NDsrK28pKGU9dFtvXSkmJihyPU1hdGguYWJzKGUudmFsdWUpKSYmKHMrPWUudmFsdWUsbCs9cixuKz1yKmUueCxhKz1yKmUueSk7dC54PW4vbCx0Lnk9YS9sfWVsc2V7KGU9dCkueD1lLmRhdGEueCxlLnk9ZS5kYXRhLnk7ZG97cys9aVtlLmRhdGEuaW5kZXhdfXdoaWxlKGU9ZS5uZXh0KX10LnZhbHVlPXN9ZnVuY3Rpb24gbSh0LGUsYSxzKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgZj10Lngtci54LGg9dC55LXIueSxwPXMtZSxkPWYqZitoKmg7aWYocCpwL3U8ZClyZXR1cm4gZDxjJiYoMD09PWYmJihkKz0oZj1vKCkpKmYpLDA9PT1oJiYoZCs9KGg9bygpKSpoKSxkPGwmJihkPU1hdGguc3FydChsKmQpKSxyLnZ4Kz1mKnQudmFsdWUqbi9kLHIudnkrPWgqdC52YWx1ZSpuL2QpLCEwO2lmKCEodC5sZW5ndGh8fGQ+PWMpKXsodC5kYXRhIT09cnx8dC5uZXh0KSYmKDA9PT1mJiYoZCs9KGY9bygpKSpmKSwwPT09aCYmKGQrPShoPW8oKSkqaCksZDxsJiYoZD1NYXRoLnNxcnQobCpkKSkpO2Rve3QuZGF0YSE9PXImJihwPWlbdC5kYXRhLmluZGV4XSpuL2Qsci52eCs9ZipwLHIudnkrPWgqcCl9d2hpbGUodD10Lm5leHQpfX1yZXR1cm4gcC5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3Q9ZSxkKCl9LHAuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxkKCkscCk6c30scC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10KnQscCk6TWF0aC5zcXJ0KGwpfSxwLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQqdCxwKTpNYXRoLnNxcnQoYyl9LHAudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCp0LHApOk1hdGguc3FydCh1KX0scH0sdC5mb3JjZVJhZGlhbD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLHM9YSguMSk7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2Epe3ZhciBsPW5bYV0sYz1sLngtZXx8MWUtNix1PWwueS1yfHwxZS02LGY9TWF0aC5zcXJ0KGMqYyt1KnUpLGg9KG9bYV0tZikqaVthXSp0L2Y7bC52eCs9YypoLGwudnkrPXUqaH19ZnVuY3Rpb24gYygpe2lmKG4pe3ZhciBlLHI9bi5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGU9MDtlPHI7KytlKW9bZV09K3QobltlXSxlLG4pLGlbZV09aXNOYU4ob1tlXSk/MDorcyhuW2VdLGUsbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09ciYmKHI9MCksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxjKCl9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxjKCksbCk6c30sbC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTphKCtlKSxjKCksbCk6dH0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGwpOmV9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxsKTpyfSxsfSx0LmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxhPTEsbz0uMDAxLHM9MS1NYXRoLnBvdyhvLDEvMzAwKSxsPTAsYz0uNix1PXIubWFwKCksZj1pLnRpbWVyKGQpLGg9bi5kaXNwYXRjaCgidGljayIsImVuZCIpO2Z1bmN0aW9uIGQoKXtnKCksaC5jYWxsKCJ0aWNrIixlKSxhPG8mJihmLnN0b3AoKSxoLmNhbGwoImVuZCIsZSkpfWZ1bmN0aW9uIGcocil7dmFyIG4saSxvPXQubGVuZ3RoO3ZvaWQgMD09PXImJihyPTEpO2Zvcih2YXIgZj0wO2Y8cjsrK2YpZm9yKGErPShsLWEpKnMsdS5lYWNoKChmdW5jdGlvbih0KXt0KGEpfSkpLG49MDtuPG87KytuKW51bGw9PShpPXRbbl0pLmZ4P2kueCs9aS52eCo9YzooaS54PWkuZngsaS52eD0wKSxudWxsPT1pLmZ5P2kueSs9aS52eSo9YzooaS55PWkuZnksaS52eT0wKTtyZXR1cm4gZX1mdW5jdGlvbiBtKCl7Zm9yKHZhciBlLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipe2lmKChlPXRbcl0pLmluZGV4PXIsbnVsbCE9ZS5meCYmKGUueD1lLmZ4KSxudWxsIT1lLmZ5JiYoZS55PWUuZnkpLGlzTmFOKGUueCl8fGlzTmFOKGUueSkpe3ZhciBpPTEwKk1hdGguc3FydChyKSxhPXIqcDtlLng9aSpNYXRoLmNvcyhhKSxlLnk9aSpNYXRoLnNpbihhKX0oaXNOYU4oZS52eCl8fGlzTmFOKGUudnkpKSYmKGUudng9ZS52eT0wKX19ZnVuY3Rpb24gdihlKXtyZXR1cm4gZS5pbml0aWFsaXplJiZlLmluaXRpYWxpemUodCksZX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLG0oKSxlPXt0aWNrOmcscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBmLnJlc3RhcnQoZCksZX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBmLnN0b3AoKSxlfSxub2RlczpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1yLG0oKSx1LmVhY2godiksZSk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsZSk6YX0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsZSk6b30sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxlKTorc30sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3QsZSk6bH0sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0xLXQsZSk6MS1jfSxmb3JjZTpmdW5jdGlvbih0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PXI/dS5yZW1vdmUodCk6dS5zZXQodCx2KHIpKSxlKTp1LmdldCh0KX0sZmluZDpmdW5jdGlvbihlLHIsbil7dmFyIGksYSxvLHMsbCxjPTAsdT10Lmxlbmd0aDtmb3IobnVsbD09bj9uPTEvMDpuKj1uLGM9MDtjPHU7KytjKShvPShpPWUtKHM9dFtjXSkueCkqaSsoYT1yLXMueSkqYSk8biYmKGw9cyxuPW8pO3JldHVybiBsfSxvbjpmdW5jdGlvbih0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGgub24odCxyKSxlKTpoLm9uKHQpfX19LHQuZm9yY2VYPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPWEoLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciBpLGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpKGk9ZVthXSkudngrPShuW2FdLWkueCkqclthXSp0fWZ1bmN0aW9uIHMoKXtpZihlKXt2YXIgYSxvPWUubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKSxuPW5ldyBBcnJheShvKSxhPTA7YTxvOysrYSlyW2FdPWlzTmFOKG5bYV09K3QoZVthXSxhLGUpKT8wOitpKGVbYV0sYSxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxzKCksbyk6aX0sby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSkscygpLG8pOnR9LG99LHQuZm9yY2VZPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPWEoLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciBpLGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpKGk9ZVthXSkudnkrPShuW2FdLWkueSkqclthXSp0fWZ1bmN0aW9uIHMoKXtpZihlKXt2YXIgYSxvPWUubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKSxuPW5ldyBBcnJheShvKSxhPTA7YTxvOysrYSlyW2FdPWlzTmFOKG5bYV09K3QoZVthXSxhLGUpKT8wOitpKGVbYV0sYSxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxzKCksbyk6aX0sby55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSkscygpLG8pOnR9LG99LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0seyJkMy1jb2xsZWN0aW9uIjoxNTcsImQzLWRpc3BhdGNoIjoxNTksImQzLXF1YWR0cmVlIjoxNjQsImQzLXRpbWVyIjoxNjh9XSwxNjE6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9uKHIpOm4oKHQ9dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiByKHQsZSl7cmV0dXJuIHQrZS54fWZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnkpfWZ1bmN0aW9uIGkodCl7dmFyIGU9MCxyPXQuY2hpbGRyZW4sbj1yJiZyLmxlbmd0aDtpZihuKWZvcig7LS1uPj0wOyllKz1yW25dLnZhbHVlO2Vsc2UgZT0xO3QudmFsdWU9ZX1mdW5jdGlvbiBhKHQsZSl7dmFyIHIsbixpLGEscyx1PW5ldyBjKHQpLGY9K3QudmFsdWUmJih1LnZhbHVlPXQudmFsdWUpLGg9W3VdO2ZvcihudWxsPT1lJiYoZT1vKTtyPWgucG9wKCk7KWlmKGYmJihyLnZhbHVlPStyLmRhdGEudmFsdWUpLChpPWUoci5kYXRhKSkmJihzPWkubGVuZ3RoKSlmb3Ioci5jaGlsZHJlbj1uZXcgQXJyYXkocyksYT1zLTE7YT49MDstLWEpaC5wdXNoKG49ci5jaGlsZHJlblthXT1uZXcgYyhpW2FdKSksbi5wYXJlbnQ9cixuLmRlcHRoPXIuZGVwdGgrMTtyZXR1cm4gdS5lYWNoQmVmb3JlKGwpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gcyh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gbCh0KXt2YXIgZT0wO2Rve3QuaGVpZ2h0PWV9d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK2UpfWZ1bmN0aW9uIGModCl7dGhpcy5kYXRhPXQsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9Yy5wcm90b3R5cGU9YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmMsY291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoaSl9LGVhY2g6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10aGlzLG89W2FdO2Rve2ZvcihlPW8ucmV2ZXJzZSgpLG89W107YT1lLnBvcCgpOylpZih0KGEpLHI9YS5jaGlsZHJlbilmb3Iobj0wLGk9ci5sZW5ndGg7bjxpOysrbilvLnB1c2gocltuXSl9d2hpbGUoby5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXRoaXMsYT1baV0sbz1bXTtpPWEucG9wKCk7KWlmKG8ucHVzaChpKSxlPWkuY2hpbGRyZW4pZm9yKHI9MCxuPWUubGVuZ3RoO3I8bjsrK3IpYS5wdXNoKGVbcl0pO2Zvcig7aT1vLnBvcCgpOyl0KGkpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49dGhpcyxpPVtuXTtuPWkucG9wKCk7KWlmKHQobiksZT1uLmNoaWxkcmVuKWZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpaS5wdXNoKGVbcl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKChmdW5jdGlvbihlKXtmb3IodmFyIHI9K3QoZS5kYXRhKXx8MCxuPWUuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7ZS52YWx1ZT1yfSkpfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pKX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIHI9dC5hbmNlc3RvcnMoKSxuPWUuYW5jZXN0b3JzKCksaT1udWxsO3Q9ci5wb3AoKSxlPW4ucG9wKCk7Zm9yKDt0PT09ZTspaT10LHQ9ci5wb3AoKSxlPW4ucG9wKCk7cmV0dXJuIGl9KGUsdCksbj1bZV07ZSE9PXI7KWU9ZS5wYXJlbnQsbi5wdXNoKGUpO2Zvcih2YXIgaT1uLmxlbmd0aDt0IT09cjspbi5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIG59LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKHIpe3IhPT10JiZlLnB1c2goe3NvdXJjZTpyLnBhcmVudCx0YXJnZXQ6cn0pfSkpLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKS5lYWNoQmVmb3JlKHMpfX07dmFyIHU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGYodCl7Zm9yKHZhciBlLHIsbj0wLGk9KHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10Lmxlbmd0aDtuOylyPU1hdGgucmFuZG9tKCkqbi0tfDAsZT10W25dLHRbbl09dFtyXSx0W3JdPWU7cmV0dXJuIHR9KHUuY2FsbCh0KSkpLmxlbmd0aCxhPVtdO248aTspZT10W25dLHImJmQocixlKT8rK246KHI9bShhPWgoYSxlKSksbj0wKTtyZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSl7dmFyIHIsbjtpZihnKGUsdCkpcmV0dXJuW2VdO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3IpaWYocChlLHRbcl0pJiZnKHYodFtyXSxlKSx0KSlyZXR1cm5bdFtyXSxlXTtmb3Iocj0wO3I8dC5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248dC5sZW5ndGg7KytuKWlmKHAodih0W3JdLHRbbl0pLGUpJiZwKHYodFtyXSxlKSx0W25dKSYmcCh2KHRbbl0sZSksdFtyXSkmJmcoeSh0W3JdLHRbbl0sZSksdCkpcmV0dXJuW3Rbcl0sdFtuXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPXQuci1lLnIsbj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gcjwwfHxyKnI8bipuK2kqaX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5yLWUucisxZS02LG49ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWlmKCFkKHQsZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbSh0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm57eDooZT10WzBdKS54LHk6ZS55LHI6ZS5yfTtjYXNlIDI6cmV0dXJuIHYodFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIHkodFswXSx0WzFdLHRbMl0pfXZhciBlfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10Lngsbj10LnksaT10LnIsYT1lLngsbz1lLnkscz1lLnIsbD1hLXIsYz1vLW4sdT1zLWksZj1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrYStsL2YqdSkvMix5OihuK28rYy9mKnUpLzIscjooZitpK3MpLzJ9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXQueCxpPXQueSxhPXQucixvPWUueCxzPWUueSxsPWUucixjPXIueCx1PXIueSxmPXIucixoPW4tbyxwPW4tYyxkPWktcyxnPWktdSxtPWwtYSx2PWYtYSx5PW4qbitpKmktYSphLHg9eS1vKm8tcypzK2wqbCxiPXktYypjLXUqdStmKmYsXz1wKmQtaCpnLHc9KGQqYi1nKngpLygyKl8pLW4sVD0oZyptLWQqdikvXyxrPShwKngtaCpiKS8oMipfKS1pLE09KGgqdi1wKm0pL18sQT1UKlQrTSpNLTEsUz0yKihhK3cqVCtrKk0pLEU9dyp3K2sqay1hKmEsQz0tKEE/KFMrTWF0aC5zcXJ0KFMqUy00KkEqRSkpLygyKkEpOkUvUyk7cmV0dXJue3g6bit3K1QqQyx5OmkraytNKkMscjpDfX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbixpLGEsbyxzPXQueC1lLngsbD10LnktZS55LGM9cypzK2wqbDtjPyhpPWUucityLnIsaSo9aSxvPXQucityLnIsaT4obyo9byk/KG49KGMrby1pKS8oMipjKSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vYy1uKm4pKSxyLng9dC54LW4qcy1hKmwsci55PXQueS1uKmwrYSpzKToobj0oYytpLW8pLygyKmMpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS9jLW4qbikpLHIueD1lLngrbipzLWEqbCxyLnk9ZS55K24qbCthKnMpKTooci54PWUueCtyLnIsci55PWUueSl9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQucitlLnItMWUtNixuPWUueC10LngsaT1lLnktdC55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIF8odCl7dmFyIGU9dC5fLHI9dC5uZXh0Ll8sbj1lLnIrci5yLGk9KGUueCpyLnIrci54KmUucikvbixhPShlLnkqci5yK3IueSplLnIpL247cmV0dXJuIGkqaSthKmF9ZnVuY3Rpb24gdyh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gVCh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGg7aWYoKGU9dFswXSkueD0wLGUueT0wLCEoaT4xKSlyZXR1cm4gZS5yO2lmKHI9dFsxXSxlLng9LXIucixyLng9ZS5yLHIueT0wLCEoaT4yKSlyZXR1cm4gZS5yK3Iucjt4KHIsZSxuPXRbMl0pLGU9bmV3IHcoZSkscj1uZXcgdyhyKSxuPW5ldyB3KG4pLGUubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PWUucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz1lO3Q6Zm9yKHM9MztzPGk7KytzKXt4KGUuXyxyLl8sbj10W3NdKSxuPW5ldyB3KG4pLGw9ci5uZXh0LGM9ZS5wcmV2aW91cyx1PXIuXy5yLGg9ZS5fLnI7ZG97aWYodTw9aCl7aWYoYihsLl8sbi5fKSl7cj1sLGUubmV4dD1yLHIucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGIoYy5fLG4uXykpeyhlPWMpLm5leHQ9cixyLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz1lLG4ubmV4dD1yLGUubmV4dD1yLnByZXZpb3VzPXI9bixhPV8oZSk7KG49bi5uZXh0KSE9PXI7KShvPV8obikpPGEmJihlPW4sYT1vKTtyPWUubmV4dH1mb3IoZT1bci5fXSxuPXI7KG49bi5uZXh0KSE9PXI7KWUucHVzaChuLl8pO2ZvcihuPWYoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09bi54LGUueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gayh0KXtyZXR1cm4gbnVsbD09dD9udWxsOk0odCl9ZnVuY3Rpb24gTSh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gQSgpe3JldHVybiAwfWZ1bmN0aW9uIFModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEUodCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBDKHQpe3JldHVybiBmdW5jdGlvbihlKXtlLmNoaWxkcmVufHwoZS5yPU1hdGgubWF4KDAsK3QoZSl8fDApKX19ZnVuY3Rpb24gTCh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtpZihuPXIuY2hpbGRyZW4pe3ZhciBuLGksYSxvPW4ubGVuZ3RoLHM9dChyKSplfHwwO2lmKHMpZm9yKGk9MDtpPG87KytpKW5baV0ucis9cztpZihhPVQobikscylmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1zO3Iucj1hK3N9fX1mdW5jdGlvbiBJKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lLnBhcmVudDtlLnIqPXQsciYmKGUueD1yLngrdCplLngsZS55PXIueSt0KmUueSl9fWZ1bmN0aW9uIFAodCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfWZ1bmN0aW9uIHoodCxlLHIsbixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsbD1vLmxlbmd0aCxjPXQudmFsdWUmJihuLWUpL3QudmFsdWU7KytzPGw7KShhPW9bc10pLnkwPXIsYS55MT1pLGEueDA9ZSxhLngxPWUrPWEudmFsdWUqY312YXIgTz17ZGVwdGg6LTF9LEQ9e307ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBGKHQpe3JldHVybiB0LnBhcmVudElkfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gTih0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIGoodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lW2UubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiBVKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIFYodCxlLHIpe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOnJ9ZnVuY3Rpb24gcSh0LGUpe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1lfWZ1bmN0aW9uIEgodCxlLHIsbixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsbD1vLmxlbmd0aCxjPXQudmFsdWUmJihpLXIpL3QudmFsdWU7KytzPGw7KShhPW9bc10pLngwPWUsYS54MT1uLGEueTA9cixhLnkxPXIrPWEudmFsdWUqY31xLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKTt2YXIgRz0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gWSh0LGUscixuLGksYSl7Zm9yKHZhciBvLHMsbCxjLHUsZixoLHAsZCxnLG0sdj1bXSx5PWUuY2hpbGRyZW4seD0wLGI9MCxfPXkubGVuZ3RoLHc9ZS52YWx1ZTt4PF87KXtsPWktcixjPWEtbjtkb3t1PXlbYisrXS52YWx1ZX13aGlsZSghdSYmYjxfKTtmb3IoZj1oPXUsbT11KnUqKGc9TWF0aC5tYXgoYy9sLGwvYykvKHcqdCkpLGQ9TWF0aC5tYXgoaC9tLG0vZik7YjxfOysrYil7aWYodSs9cz15W2JdLnZhbHVlLHM8ZiYmKGY9cykscz5oJiYoaD1zKSxtPXUqdSpnLChwPU1hdGgubWF4KGgvbSxtL2YpKT5kKXt1LT1zO2JyZWFrfWQ9cH12LnB1c2gobz17dmFsdWU6dSxkaWNlOmw8YyxjaGlsZHJlbjp5LnNsaWNlKHgsYil9KSxvLmRpY2U/eihvLHIsbixpLHc/bis9Yyp1L3c6YSk6SChvLHIsbix3P3IrPWwqdS93OmksYSksdy09dSx4PWJ9cmV0dXJuIHZ9dmFyIFc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGksYSl7WShlLHQscixuLGksYSl9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyk7dmFyIFg9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGksYSl7aWYoKG89dC5fc3F1YXJpZnkpJiZvLnJhdGlvPT09ZSlmb3IodmFyIG8scyxsLGMsdSxmPS0xLGg9by5sZW5ndGgscD10LnZhbHVlOysrZjxoOyl7Zm9yKGw9KHM9b1tmXSkuY2hpbGRyZW4sYz1zLnZhbHVlPTAsdT1sLmxlbmd0aDtjPHU7KytjKXMudmFsdWUrPWxbY10udmFsdWU7cy5kaWNlP3oocyxyLG4saSxuKz0oYS1uKSpzLnZhbHVlL3ApOkgocyxyLG4scis9KGktcikqcy52YWx1ZS9wLGEpLHAtPXMudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1vPVkoZSx0LHIsbixpLGEpLG8ucmF0aW89ZX1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxyfShHKTt0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1lLGk9MSxhPTEsbz0hMTtmdW5jdGlvbiBzKGUpe3ZhciBzLGw9MDtlLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7dmFyIGk9ZS5jaGlsZHJlbjtpPyhlLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKHIsMCkvdC5sZW5ndGh9KGkpLGUueT1mdW5jdGlvbih0KXtyZXR1cm4gMSt0LnJlZHVjZShuLDApfShpKSk6KGUueD1zP2wrPXQoZSxzKTowLGUueT0wLHM9ZSl9KSk7dmFyIGM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lWzBdO3JldHVybiB0fShlKSx1PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdH0oZSksZj1jLngtdChjLHUpLzIsaD11LngrdCh1LGMpLzI7cmV0dXJuIGUuZWFjaEFmdGVyKG8/ZnVuY3Rpb24odCl7dC54PSh0LngtZS54KSppLHQueT0oZS55LXQueSkqYX06ZnVuY3Rpb24odCl7dC54PSh0LngtZikvKGgtZikqaSx0Lnk9KDEtKGUueT90LnkvZS55OjEpKSphfSl9cmV0dXJuIHMuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHMpOnR9LHMuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0hMSxpPSt0WzBdLGE9K3RbMV0scyk6bz9udWxsOltpLGFdfSxzLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEwLGk9K3RbMF0sYT0rdFsxXSxzKTpvP1tpLGFdOm51bGx9LHN9LHQuaGllcmFyY2h5PWEsdC5wYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxlPTEscj0xLG49QTtmdW5jdGlvbiBpKGkpe3JldHVybiBpLng9ZS8yLGkueT1yLzIsdD9pLmVhY2hCZWZvcmUoQyh0KSkuZWFjaEFmdGVyKEwobiwuNSkpLmVhY2hCZWZvcmUoSSgxKSk6aS5lYWNoQmVmb3JlKEMoRSkpLmVhY2hBZnRlcihMKEEsMSkpLmVhY2hBZnRlcihMKG4saS5yL01hdGgubWluKGUscikpKS5lYWNoQmVmb3JlKEkoTWF0aC5taW4oZSxyKS8oMippLnIpKSksaX1yZXR1cm4gaS5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ayhlKSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxpKTpbZSxyXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UygrdCksaSk6bn0saX0sdC5wYWNrRW5jbG9zZT1mLHQucGFja1NpYmxpbmdzPWZ1bmN0aW9uKHQpe3JldHVybiBUKHQpLHR9LHQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9MSxlPTEscj0wLG49ITE7ZnVuY3Rpb24gaShpKXt2YXIgYT1pLmhlaWdodCsxO3JldHVybiBpLngwPWkueTA9cixpLngxPXQsaS55MT1lL2EsaS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uY2hpbGRyZW4mJnoobixuLngwLHQqKG4uZGVwdGgrMSkvZSxuLngxLHQqKG4uZGVwdGgrMikvZSk7dmFyIGk9bi54MCxhPW4ueTAsbz1uLngxLXIscz1uLnkxLXI7bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxuLngwPWksbi55MD1hLG4ueDE9byxuLnkxPXN9fShlLGEpKSxuJiZpLmVhY2hCZWZvcmUoUCksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hIXQsaSk6bn0saS5zaXplPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStyWzBdLGU9K3JbMV0saSk6W3QsZV19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxpKTpyfSxpfSx0LnN0cmF0aWZ5PWZ1bmN0aW9uKCl7dmFyIHQ9UixlPUY7ZnVuY3Rpb24gcihyKXt2YXIgbixpLGEsbyxzLHUsZixoPXIubGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9e307Zm9yKGk9MDtpPGg7KytpKW49cltpXSxzPXBbaV09bmV3IGMobiksbnVsbCE9KHU9dChuLGkscikpJiYodSs9IiIpJiYoZFtmPSIkIisocy5pZD11KV09ZiBpbiBkP0Q6cyk7Zm9yKGk9MDtpPGg7KytpKWlmKHM9cFtpXSxudWxsIT0odT1lKHJbaV0saSxyKSkmJih1Kz0iIikpe2lmKCEobz1kWyIkIit1XSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK3UpO2lmKG89PT1EKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK3UpO28uY2hpbGRyZW4/by5jaGlsZHJlbi5wdXNoKHMpOm8uY2hpbGRyZW49W3NdLHMucGFyZW50PW99ZWxzZXtpZihhKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTthPXN9aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoYS5wYXJlbnQ9TyxhLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLWh9KSkuZWFjaEJlZm9yZShsKSxhLnBhcmVudD1udWxsLGg+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIGF9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9TShlKSxyKTp0fSxyLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPU0odCkscik6ZX0scn0sdC50cmVlPWZ1bmN0aW9uKCl7dmFyIHQ9QixlPTEscj0xLG49bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG89bmV3IHEodCwwKSxzPVtvXTtlPXMucG9wKCk7KWlmKG49ZS5fLmNoaWxkcmVuKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShhPW4ubGVuZ3RoKSxpPWEtMTtpPj0wOy0taSlzLnB1c2gocj1lLmNoaWxkcmVuW2ldPW5ldyBxKG5baV0saSkpLHIucGFyZW50PWU7cmV0dXJuKG8ucGFyZW50PW5ldyBxKG51bGwsMCkpLmNoaWxkcmVuPVtvXSxvfShpKTtpZihsLmVhY2hBZnRlcihhKSxsLnBhcmVudC5tPS1sLnosbC5lYWNoQmVmb3JlKG8pLG4paS5lYWNoQmVmb3JlKHMpO2Vsc2V7dmFyIGM9aSx1PWksZj1pO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PGMueCYmKGM9dCksdC54PnUueCYmKHU9dCksdC5kZXB0aD5mLmRlcHRoJiYoZj10KX0pKTt2YXIgaD1jPT09dT8xOnQoYyx1KS8yLHA9aC1jLngsZD1lLyh1LngraCtwKSxnPXIvKGYuZGVwdGh8fDEpO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PSh0LngrcCkqZCx0Lnk9dC5kZXB0aCpnfSkpfXJldHVybiBpfWZ1bmN0aW9uIGEoZSl7dmFyIHI9ZS5jaGlsZHJlbixuPWUucGFyZW50LmNoaWxkcmVuLGk9ZS5pP25bZS5pLTFdOm51bGw7aWYocil7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPTAsbj0wLGk9dC5jaGlsZHJlbixhPWkubGVuZ3RoOy0tYT49MDspKGU9aVthXSkueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfShlKTt2YXIgYT0oclswXS56K3Jbci5sZW5ndGgtMV0ueikvMjtpPyhlLno9aS56K3QoZS5fLGkuXyksZS5tPWUuei1hKTplLno9YX1lbHNlIGkmJihlLno9aS56K3QoZS5fLGkuXykpO2UucGFyZW50LkE9ZnVuY3Rpb24oZSxyLG4pe2lmKHIpe2Zvcih2YXIgaSxhPWUsbz1lLHM9cixsPWEucGFyZW50LmNoaWxkcmVuWzBdLGM9YS5tLHU9by5tLGY9cy5tLGg9bC5tO3M9aihzKSxhPU4oYSkscyYmYTspbD1OKGwpLChvPWoobykpLmE9ZSwoaT1zLnorZi1hLnotYyt0KHMuXyxhLl8pKT4wJiYoVShWKHMsZSxuKSxlLGkpLGMrPWksdSs9aSksZis9cy5tLGMrPWEubSxoKz1sLm0sdSs9by5tO3MmJiFqKG8pJiYoby50PXMsby5tKz1mLXUpLGEmJiFOKGwpJiYobC50PWEsbC5tKz1jLWgsbj1lKX1yZXR1cm4gbn0oZSxpLGUucGFyZW50LkF8fG5bMF0pfWZ1bmN0aW9uIG8odCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHModCl7dC54Kj1lLHQueT10LmRlcHRoKnJ9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSxlPSt0WzBdLHI9K3RbMV0saSk6bj9udWxsOltlLHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLGU9K3RbMF0scj0rdFsxXSxpKTpuP1tlLHJdOm51bGx9LGl9LHQudHJlZW1hcD1mdW5jdGlvbigpe3ZhciB0PVcsZT0hMSxyPTEsbj0xLGk9WzBdLGE9QSxvPUEscz1BLGw9QSxjPUE7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC54MD10LnkwPTAsdC54MT1yLHQueTE9bix0LmVhY2hCZWZvcmUoZiksaT1bMF0sZSYmdC5lYWNoQmVmb3JlKFApLHR9ZnVuY3Rpb24gZihlKXt2YXIgcj1pW2UuZGVwdGhdLG49ZS54MCtyLHU9ZS55MCtyLGY9ZS54MS1yLGg9ZS55MS1yO2Y8biYmKG49Zj0obitmKS8yKSxoPHUmJih1PWg9KHUraCkvMiksZS54MD1uLGUueTA9dSxlLngxPWYsZS55MT1oLGUuY2hpbGRyZW4mJihyPWlbZS5kZXB0aCsxXT1hKGUpLzIsbis9YyhlKS1yLHUrPW8oZSktciwoZi09cyhlKS1yKTxuJiYobj1mPShuK2YpLzIpLChoLT1sKGUpLXIpPHUmJih1PWg9KHUraCkvMiksdChlLG4sdSxmLGgpKX1yZXR1cm4gdS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsdSk6ZX0sdS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdLG49K3RbMV0sdSk6W3Isbl19LHUudGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1NKGUpLHUpOnR9LHUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTKCt0KSx1KTphfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AodCkucGFkZGluZ1JpZ2h0KHQpLnBhZGRpbmdCb3R0b20odCkucGFkZGluZ0xlZnQodCk6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLHUpOm99LHUucGFkZGluZ1JpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UygrdCksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UygrdCksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLHUpOmN9LHV9LHQudHJlZW1hcEJpbmFyeT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz10LmNoaWxkcmVuLGw9cy5sZW5ndGgsYz1uZXcgQXJyYXkobCsxKTtmb3IoY1swXT1vPWE9MDthPGw7KythKWNbYSsxXT1vKz1zW2FdLnZhbHVlOyFmdW5jdGlvbiB0KGUscixuLGksYSxvLGwpe2lmKGU+PXItMSl7dmFyIHU9c1tlXTtyZXR1cm4gdS54MD1pLHUueTA9YSx1LngxPW8sdm9pZCh1LnkxPWwpfXZhciBmPWNbZV0saD1uLzIrZixwPWUrMSxkPXItMTtmb3IoO3A8ZDspe3ZhciBnPXArZD4+PjE7Y1tnXTxoP3A9ZysxOmQ9Z31oLWNbcC0xXTxjW3BdLWgmJmUrMTxwJiYtLXA7dmFyIG09Y1twXS1mLHY9bi1tO2lmKG8taT5sLWEpe3ZhciB5PShpKnYrbyptKS9uO3QoZSxwLG0saSxhLHksbCksdChwLHIsdix5LGEsbyxsKX1lbHNle3ZhciB4PShhKnYrbCptKS9uO3QoZSxwLG0saSxhLG8seCksdChwLHIsdixpLHgsbyxsKX19KDAsbCx0LnZhbHVlLGUscixuLGkpfSx0LnRyZWVtYXBEaWNlPXosdC50cmVlbWFwUmVzcXVhcmlmeT1YLHQudHJlZW1hcFNsaWNlPUgsdC50cmVlbWFwU2xpY2VEaWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7KDEmdC5kZXB0aD9IOnopKHQsZSxyLG4saSl9LHQudHJlZW1hcFNxdWFyaWZ5PVcsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTYyOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/aShyLHQoImQzLWNvbG9yIikpOmkoKG49bnx8c2VsZikuZDM9bi5kM3x8e30sbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxlLHIsbixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpyKygxKzMqdCszKmEtMypvKSpuK28qaSkvNn1mdW5jdGlvbiBuKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxhPXRbaV0sbz10W2krMV0scz1pPjA/dFtpLTFdOjIqYS1vLGw9aTxlLTE/dFtpKzJdOjIqby1hO3JldHVybiByKChuLWkvZSkqZSxzLGEsbyxsKX19ZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpLGE9dFsoaStlLTEpJWVdLG89dFtpJWVdLHM9dFsoaSsxKSVlXSxsPXRbKGkrMiklZV07cmV0dXJuIHIoKG4taS9lKSplLGEsbyxzLGwpfX1mdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0K3IqZX19ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj9vKHQscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTphKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gMT09KHQ9K3QpP2M6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gci1lP2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD1NYXRoLnBvdyh0LHIpLGU9TWF0aC5wb3coZSxyKS10LHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyh0K24qZSxyKX19KGUscix0KTphKGlzTmFOKGUpP3I6ZSl9fWZ1bmN0aW9uIGModCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/byh0LHIpOmEoaXNOYU4odCk/ZTp0KX12YXIgdT1mdW5jdGlvbiB0KHIpe3ZhciBuPWwocik7ZnVuY3Rpb24gaSh0LHIpe3ZhciBpPW4oKHQ9ZS5yZ2IodCkpLnIsKHI9ZS5yZ2IocikpLnIpLGE9bih0Lmcsci5nKSxvPW4odC5iLHIuYikscz1jKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPWkoZSksdC5nPWEoZSksdC5iPW8oZSksdC5vcGFjaXR5PXMoZSksdCsiIn19cmV0dXJuIGkuZ2FtbWE9dCxpfSgxKTtmdW5jdGlvbiBmKHQpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbixpLGE9ci5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSk7Zm9yKG49MDtuPGE7KytuKWk9ZS5yZ2IocltuXSksb1tuXT1pLnJ8fDAsc1tuXT1pLmd8fDAsbFtuXT1pLmJ8fDA7cmV0dXJuIG89dChvKSxzPXQocyksbD10KGwpLGkub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiBpLnI9byh0KSxpLmc9cyh0KSxpLmI9bCh0KSxpKyIifX19dmFyIGg9ZihuKSxwPWYoaSk7ZnVuY3Rpb24gZCh0LGUpe2V8fChlPVtdKTt2YXIgcixuPXQ/TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpOjAsaT1lLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKGEpe2ZvcihyPTA7cjxuOysrcilpW3JdPXRbcl0qKDEtYSkrZVtyXSphO3JldHVybiBpfX1mdW5jdGlvbiBnKHQpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBtKHQsZSl7dmFyIHIsbj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKG4sdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkobik7Zm9yKHI9MDtyPGk7KytyKWFbcl09VCh0W3JdLGVbcl0pO2Zvcig7cjxuOysrcilvW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxpOysrcilvW3JdPWFbcl0odCk7cmV0dXJuIG99fWZ1bmN0aW9uIHYodCxlKXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUodCooMS1uKStlKm4pLHJ9fWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiB0KigxLXIpK2Uqcn19ZnVuY3Rpb24geCh0LGUpe3ZhciByLG49e30saT17fTtmb3IociBpbiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZXx8KGU9e30pLGUpciBpbiB0P25bcl09VCh0W3JdLGVbcl0pOmlbcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHIgaW4gbilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fXZhciBiPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxfPW5ldyBSZWdFeHAoYi5zb3VyY2UsImciKTtmdW5jdGlvbiB3KHQsZSl7dmFyIHIsbixpLGE9Yi5sYXN0SW5kZXg9Xy5sYXN0SW5kZXg9MCxvPS0xLHM9W10sbD1bXTtmb3IodCs9IiIsZSs9IiI7KHI9Yi5leGVjKHQpKSYmKG49Xy5leGVjKGUpKTspKGk9bi5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKHI9clswXSk9PT0obj1uWzBdKT9zW29dP3Nbb10rPW46c1srK29dPW46KHNbKytvXT1udWxsLGwucHVzaCh7aTpvLHg6eShyLG4pfSkpLGE9Xy5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2xbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0obFswXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTA7bjxlOysrbilzWyhyPWxbbl0pLmldPXIueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIFQodCxyKXt2YXIgbixpPXR5cGVvZiByO3JldHVybiBudWxsPT1yfHwiYm9vbGVhbiI9PT1pP2Eocik6KCJudW1iZXIiPT09aT95OiJzdHJpbmciPT09aT8obj1lLmNvbG9yKHIpKT8ocj1uLHUpOnc6ciBpbnN0YW5jZW9mIGUuY29sb3I/dTpyIGluc3RhbmNlb2YgRGF0ZT92Omcocik/ZDpBcnJheS5pc0FycmF5KHIpP206ImZ1bmN0aW9uIiE9dHlwZW9mIHIudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIHIudG9TdHJpbmd8fGlzTmFOKHIpP3g6eSkodCxyKX12YXIgayxNLEEsUyxFPTE4MC9NYXRoLlBJLEM9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gTCh0LGUscixuLGksYSl7dmFyIG8scyxsO3JldHVybihvPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1vLGUvPW8pLChsPXQqcitlKm4pJiYoci09dCpsLG4tPWUqbCksKHM9TWF0aC5zcXJ0KHIqcituKm4pKSYmKHIvPXMsbi89cyxsLz1zKSx0Km48ZSpyJiYodD0tdCxlPS1lLGw9LWwsbz0tbykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpFLHNrZXdYOk1hdGguYXRhbihsKSpFLHNjYWxlWDpvLHNjYWxlWTpzfX1mdW5jdGlvbiBJKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGw9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxuLGksYSxvLHMpe2lmKHQhPT1pfHxuIT09YSl7dmFyIGw9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxyKTtzLnB1c2goe2k6bC00LHg6eSh0LGkpfSx7aTpsLTIseDp5KG4sYSl9KX1lbHNlKGl8fGEpJiZvLnB1c2goInRyYW5zbGF0ZSgiK2krZSthK3IpfShhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVkscyxsKSxmdW5jdGlvbih0LGUscixhKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksYS5wdXNoKHtpOnIucHVzaChpKHIpKyJyb3RhdGUoIixudWxsLG4pLTIseDp5KHQsZSl9KSk6ZSYmci5wdXNoKGkocikrInJvdGF0ZSgiK2Urbil9KGEucm90YXRlLG8ucm90YXRlLHMsbCksZnVuY3Rpb24odCxlLHIsYSl7dCE9PWU/YS5wdXNoKHtpOnIucHVzaChpKHIpKyJza2V3WCgiLG51bGwsbiktMix4OnkodCxlKX0pOmUmJnIucHVzaChpKHIpKyJza2V3WCgiK2Urbil9KGEuc2tld1gsby5za2V3WCxzLGwpLGZ1bmN0aW9uKHQsZSxyLG4sYSxvKXtpZih0IT09cnx8ZSE9PW4pe3ZhciBzPWEucHVzaChpKGEpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtvLnB1c2goe2k6cy00LHg6eSh0LHIpfSx7aTpzLTIseDp5KGUsbil9KX1lbHNlIDE9PT1yJiYxPT09bnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrcisiLCIrbisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGwpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPS0xLG49bC5sZW5ndGg7KytyPG47KXNbKGU9bFtyXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIFA9SSgoZnVuY3Rpb24odCl7cmV0dXJuIm5vbmUiPT09dD9DOihrfHwoaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxNPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxrLnN0eWxlLnRyYW5zZm9ybT10LHQ9QS5nZXRDb21wdXRlZFN0eWxlKE0uYXBwZW5kQ2hpbGQoayksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksTS5yZW1vdmVDaGlsZChrKSxMKCsodD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIikpWzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9KSwicHgsICIsInB4KSIsImRlZykiKSx6PUkoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P0M6KFN8fChTPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLFMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PVMudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/TCgodD10Lm1hdHJpeCkuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKTpDKX0pLCIsICIsIikiLCIpIiksTz1NYXRoLlNRUlQyO2Z1bmN0aW9uIEQodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9ZnVuY3Rpb24gUih0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT10KChyPWUuaHNsKHIpKS5oLChuPWUuaHNsKG4pKS5oKSxhPWMoci5zLG4ucyksbz1jKHIubCxuLmwpLHM9YyhyLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1pKHQpLHIucz1hKHQpLHIubD1vKHQpLHIub3BhY2l0eT1zKHQpLHIrIiJ9fX12YXIgRj1SKHMpLEI9UihjKTtmdW5jdGlvbiBOKHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXQoKHI9ZS5oY2wocikpLmgsKG49ZS5oY2wobikpLmgpLGE9YyhyLmMsbi5jKSxvPWMoci5sLG4ubCkscz1jKHIub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5oPWkodCksci5jPWEodCksci5sPW8odCksci5vcGFjaXR5PXModCkscisiIn19fXZhciBqPU4ocyksVT1OKGMpO2Z1bmN0aW9uIFYodCl7cmV0dXJuIGZ1bmN0aW9uIHIobil7ZnVuY3Rpb24gaShyLGkpe3ZhciBhPXQoKHI9ZS5jdWJlaGVsaXgocikpLmgsKGk9ZS5jdWJlaGVsaXgoaSkpLmgpLG89YyhyLnMsaS5zKSxzPWMoci5sLGkubCksbD1jKHIub3BhY2l0eSxpLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5oPWEodCksci5zPW8odCksci5sPXMoTWF0aC5wb3codCxuKSksci5vcGFjaXR5PWwodCkscisiIn19cmV0dXJuIG49K24saS5nYW1tYT1yLGl9KDEpfXZhciBxPVYocyksSD1WKGMpO3QuaW50ZXJwb2xhdGU9VCx0LmludGVycG9sYXRlQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZyhlKT9kOm0pKHQsZSl9LHQuaW50ZXJwb2xhdGVCYXNpcz1uLHQuaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZD1pLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXg9cSx0LmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZz1ILHQuaW50ZXJwb2xhdGVEYXRlPXYsdC5pbnRlcnBvbGF0ZURpc2NyZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKHIqZSkpKV19fSx0LmludGVycG9sYXRlSGNsPWosdC5pbnRlcnBvbGF0ZUhjbExvbmc9VSx0LmludGVycG9sYXRlSHNsPUYsdC5pbnRlcnBvbGF0ZUhzbExvbmc9Qix0LmludGVycG9sYXRlSHVlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9cygrdCwrZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXIodCk7cmV0dXJuIGUtMzYwKk1hdGguZmxvb3IoZS8zNjApfX0sdC5pbnRlcnBvbGF0ZUxhYj1mdW5jdGlvbih0LHIpe3ZhciBuPWMoKHQ9ZS5sYWIodCkpLmwsKHI9ZS5sYWIocikpLmwpLGk9Yyh0LmEsci5hKSxhPWModC5iLHIuYiksbz1jKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5sPW4oZSksdC5hPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19LHQuaW50ZXJwb2xhdGVOdW1iZXI9eSx0LmludGVycG9sYXRlTnVtYmVyQXJyYXk9ZCx0LmludGVycG9sYXRlT2JqZWN0PXgsdC5pbnRlcnBvbGF0ZVJnYj11LHQuaW50ZXJwb2xhdGVSZ2JCYXNpcz1oLHQuaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZD1wLHQuaW50ZXJwb2xhdGVSb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCooMS1yKStlKnIpfX0sdC5pbnRlcnBvbGF0ZVN0cmluZz13LHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M9UCx0LmludGVycG9sYXRlVHJhbnNmb3JtU3ZnPXosdC5pbnRlcnBvbGF0ZVpvb209ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPXRbMV0sbz10WzJdLHM9ZVswXSxsPWVbMV0sYz1lWzJdLHU9cy1pLGY9bC1hLGg9dSp1K2YqZjtpZihoPDFlLTEyKW49TWF0aC5sb2coYy9vKS9PLHI9ZnVuY3Rpb24odCl7cmV0dXJuW2krdCp1LGErdCpmLG8qTWF0aC5leHAoTyp0Km4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoaCksZD0oYypjLW8qbys0KmgpLygyKm8qMipwKSxnPShjKmMtbypvLTQqaCkvKDIqYyoyKnApLG09TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSx2PU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7bj0odi1tKS9PLHI9ZnVuY3Rpb24odCl7dmFyIGUscj10Km4scz1EKG0pLGw9by8oMipwKSoocyooZT1PKnIrbSwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShtKSk7cmV0dXJuW2krbCp1LGErbCpmLG8qcy9EKE8qcittKV19fXJldHVybiByLmR1cmF0aW9uPTFlMypuLHJ9LHQucGllY2V3aXNlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aC0xLGk9ZVswXSxhPW5ldyBBcnJheShuPDA/MDpuKTtyPG47KWFbcl09dChpLGk9ZVsrK3JdKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLm1pbihuLTEsTWF0aC5mbG9vcih0Kj1uKSkpO3JldHVybiBhW2VdKHQtZSl9fSx0LnF1YW50aXplPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXQobi8oZS0xKSk7cmV0dXJuIHJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0seyJkMy1jb2xvciI6MTU4fV0sMTYzOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPU1hdGguUEkscj0yKmUsbj1yLTFlLTY7ZnVuY3Rpb24gaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGEoKXtyZXR1cm4gbmV3IGl9aS5wcm90b3R5cGU9YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmksbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQscixuLGksYSl7dD0rdCxyPStyLG49K24saT0raSxhPSthO3ZhciBvPXRoaXMuX3gxLHM9dGhpcy5feTEsbD1uLXQsYz1pLXIsdT1vLXQsZj1zLXIsaD11KnUrZipmO2lmKGE8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIithKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9cik7ZWxzZSBpZihoPjFlLTYpaWYoTWF0aC5hYnMoZipsLWMqdSk+MWUtNiYmYSl7dmFyIHA9bi1vLGQ9aS1zLGc9bCpsK2MqYyxtPXAqcCtkKmQsdj1NYXRoLnNxcnQoZykseT1NYXRoLnNxcnQoaCkseD1hKk1hdGgudGFuKChlLU1hdGguYWNvcygoZytoLW0pLygyKnYqeSkpKS8yKSxiPXgveSxfPXgvdjtNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisocitiKmYpKSx0aGlzLl8rPSJBIithKyIsIithKyIsMCwwLCIrICsoZipwPnUqZCkrIiwiKyh0aGlzLl94MT10K18qbCkrIiwiKyh0aGlzLl95MT1yK18qYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1yKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsaSxhLG8scyxsKXt0PSt0LGk9K2ksbD0hIWw7dmFyIGM9KGE9K2EpKk1hdGguY29zKG8pLHU9YSpNYXRoLnNpbihvKSxmPXQrYyxoPWkrdSxwPTFebCxkPWw/by1zOnMtbztpZihhPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrYSk7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2YrIiwiK2g6KE1hdGguYWJzKHRoaXMuX3gxLWYpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLWgpPjFlLTYpJiYodGhpcy5fKz0iTCIrZisiLCIraCksYSYmKGQ8MCYmKGQ9ZCVyK3IpLGQ+bj90aGlzLl8rPSJBIithKyIsIithKyIsMCwxLCIrcCsiLCIrKHQtYykrIiwiKyhpLXUpKyJBIithKyIsIithKyIsMCwxLCIrcCsiLCIrKHRoaXMuX3gxPWYpKyIsIisodGhpcy5feTE9aCk6ZD4xZS02JiYodGhpcy5fKz0iQSIrYSsiLCIrYSsiLDAsIisgKyhkPj1lKSsiLCIrcCsiLCIrKHRoaXMuX3gxPXQrYSpNYXRoLmNvcyhzKSkrIiwiKyh0aGlzLl95MT1pK2EqTWF0aC5zaW4ocykpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX0sdC5wYXRoPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTY0OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlLHIsbil7aWYoaXNOYU4oZSl8fGlzTmFOKHIpKXJldHVybiB0O3ZhciBpLGEsbyxzLGwsYyx1LGYsaCxwPXQuX3Jvb3QsZD17ZGF0YTpufSxnPXQuX3gwLG09dC5feTAsdj10Ll94MSx5PXQuX3kxO2lmKCFwKXJldHVybiB0Ll9yb290PWQsdDtmb3IoO3AubGVuZ3RoOylpZigoYz1lPj0oYT0oZyt2KS8yKSk/Zz1hOnY9YSwodT1yPj0obz0obSt5KS8yKSk/bT1vOnk9byxpPXAsIShwPXBbZj11PDwxfGNdKSlyZXR1cm4gaVtmXT1kLHQ7aWYocz0rdC5feC5jYWxsKG51bGwscC5kYXRhKSxsPSt0Ll95LmNhbGwobnVsbCxwLmRhdGEpLGU9PT1zJiZyPT09bClyZXR1cm4gZC5uZXh0PXAsaT9pW2ZdPWQ6dC5fcm9vdD1kLHQ7ZG97aT1pP2lbZl09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChjPWU+PShhPShnK3YpLzIpKT9nPWE6dj1hLCh1PXI+PShvPShtK3kpLzIpKT9tPW86eT1vfXdoaWxlKChmPXU8PDF8Yyk9PShoPShsPj1vKTw8MXxzPj1hKSk7cmV0dXJuIGlbaF09cCxpW2ZdPWQsdH1mdW5jdGlvbiByKHQsZSxyLG4saSl7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9cix0aGlzLngxPW4sdGhpcy55MT1pfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgYT1uZXcgbyhudWxsPT1lP246ZSxudWxsPT1yP2k6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P2E6YS5hZGRBbGwodCl9ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0scj1lO3Q9dC5uZXh0OylyPXIubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBsPWEucHJvdG90eXBlPW8ucHJvdG90eXBlO2wuY29weT1mdW5jdGlvbigpe3ZhciB0LGUscj1uZXcgbyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLG49dGhpcy5fcm9vdDtpZighbilyZXR1cm4gcjtpZighbi5sZW5ndGgpcmV0dXJuIHIuX3Jvb3Q9cyhuKSxyO2Zvcih0PVt7c291cmNlOm4sdGFyZ2V0OnIuX3Jvb3Q9bmV3IEFycmF5KDQpfV07bj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShlPW4uc291cmNlW2ldKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0Om4udGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOm4udGFyZ2V0W2ldPXMoZSkpO3JldHVybiByfSxsLmFkZD1mdW5jdGlvbih0KXt2YXIgcj0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIGUodGhpcy5jb3ZlcihyLG4pLHIsbix0KX0sbC5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIHIsbixpLGEsbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTEvMCx1PTEvMCxmPS0xLzAsaD0tMS8wO2ZvcihuPTA7bjxvOysrbilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCxyPXRbbl0pKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwscikpfHwoc1tuXT1pLGxbbl09YSxpPGMmJihjPWkpLGk+ZiYmKGY9aSksYTx1JiYodT1hKSxhPmgmJihoPWEpKTtpZihjPmZ8fHU+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihjLHUpLmNvdmVyKGYsaCksbj0wO248bzsrK24pZSh0aGlzLHNbbl0sbFtuXSx0W25dKTtyZXR1cm4gdGhpc30sbC5jb3Zlcj1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsYT10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IodCkpKzEsYT0obj1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7Zm9yKHZhciBvLHMsbD1pLXIsYz10aGlzLl9yb290O3I+dHx8dD49aXx8bj5lfHxlPj1hOylzd2l0Y2gocz0oZTxuKTw8MXx0PHIsKG89bmV3IEFycmF5KDQpKVtzXT1jLGM9byxsKj0yLHMpe2Nhc2UgMDppPXIrbCxhPW4rbDticmVhaztjYXNlIDE6cj1pLWwsYT1uK2w7YnJlYWs7Y2FzZSAyOmk9citsLG49YS1sO2JyZWFrO2Nhc2UgMzpyPWktbCxuPWEtbH10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9Yyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpc30sbC5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSksdH0sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LGwuZmluZD1mdW5jdGlvbih0LGUsbil7dmFyIGksYSxvLHMsbCxjLHUsZj10aGlzLl94MCxoPXRoaXMuX3kwLHA9dGhpcy5feDEsZD10aGlzLl95MSxnPVtdLG09dGhpcy5fcm9vdDtmb3IobSYmZy5wdXNoKG5ldyByKG0sZixoLHAsZCkpLG51bGw9PW4/bj0xLzA6KGY9dC1uLGg9ZS1uLHA9dCtuLGQ9ZStuLG4qPW4pO2M9Zy5wb3AoKTspaWYoISghKG09Yy5ub2RlKXx8KGE9Yy54MCk+cHx8KG89Yy55MCk+ZHx8KHM9Yy54MSk8Znx8KGw9Yy55MSk8aCkpaWYobS5sZW5ndGgpe3ZhciB2PShhK3MpLzIseT0obytsKS8yO2cucHVzaChuZXcgcihtWzNdLHYseSxzLGwpLG5ldyByKG1bMl0sYSx5LHYsbCksbmV3IHIobVsxXSx2LG8scyx5KSxuZXcgcihtWzBdLGEsbyx2LHkpKSwodT0oZT49eSk8PDF8dD49dikmJihjPWdbZy5sZW5ndGgtMV0sZ1tnLmxlbmd0aC0xXT1nW2cubGVuZ3RoLTEtdV0sZ1tnLmxlbmd0aC0xLXVdPWMpfWVsc2V7dmFyIHg9dC0rdGhpcy5feC5jYWxsKG51bGwsbS5kYXRhKSxiPWUtK3RoaXMuX3kuY2FsbChudWxsLG0uZGF0YSksXz14KngrYipiO2lmKF88bil7dmFyIHc9TWF0aC5zcXJ0KG49Xyk7Zj10LXcsaD1lLXcscD10K3csZD1lK3csaT1tLmRhdGF9fXJldHVybiBpfSxsLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihhPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscD10aGlzLl9yb290LGQ9dGhpcy5feDAsZz10aGlzLl95MCxtPXRoaXMuX3gxLHY9dGhpcy5feTE7aWYoIXApcmV0dXJuIHRoaXM7aWYocC5sZW5ndGgpZm9yKDs7KXtpZigoYz1hPj0ocz0oZCttKS8yKSk/ZD1zOm09cywodT1vPj0obD0oZyt2KS8yKSk/Zz1sOnY9bCxlPXAsIShwPXBbZj11PDwxfGNdKSlyZXR1cm4gdGhpcztpZighcC5sZW5ndGgpYnJlYWs7KGVbZisxJjNdfHxlW2YrMiYzXXx8ZVtmKzMmM10pJiYocj1lLGg9Zil9Zm9yKDtwLmRhdGEhPT10OylpZihuPXAsIShwPXAubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGk9cC5uZXh0KSYmZGVsZXRlIHAubmV4dCxuPyhpP24ubmV4dD1pOmRlbGV0ZSBuLm5leHQsdGhpcyk6ZT8oaT9lW2ZdPWk6ZGVsZXRlIGVbZl0sKHA9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJnA9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFwLmxlbmd0aCYmKHI/cltoXT1wOnRoaXMuX3Jvb3Q9cCksdGhpcyk6KHRoaXMuX3Jvb3Q9aSx0aGlzKX0sbC5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxsLnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sbC5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSksdH0sbC52aXNpdD1mdW5jdGlvbih0KXt2YXIgZSxuLGksYSxvLHMsbD1bXSxjPXRoaXMuX3Jvb3Q7Zm9yKGMmJmwucHVzaChuZXcgcihjLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1sLnBvcCgpOylpZighdChjPWUubm9kZSxpPWUueDAsYT1lLnkwLG89ZS54MSxzPWUueTEpJiZjLmxlbmd0aCl7dmFyIHU9KGkrbykvMixmPShhK3MpLzI7KG49Y1szXSkmJmwucHVzaChuZXcgcihuLHUsZixvLHMpKSwobj1jWzJdKSYmbC5wdXNoKG5ldyByKG4saSxmLHUscykpLChuPWNbMV0pJiZsLnB1c2gobmV3IHIobix1LGEsbyxmKSksKG49Y1swXSkmJmwucHVzaChuZXcgcihuLGksYSx1LGYpKX1yZXR1cm4gdGhpc30sbC52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLG49W10saT1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyByKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPW4ucG9wKCk7KXt2YXIgYT1lLm5vZGU7aWYoYS5sZW5ndGgpe3ZhciBvLHM9ZS54MCxsPWUueTAsYz1lLngxLHU9ZS55MSxmPShzK2MpLzIsaD0obCt1KS8yOyhvPWFbMF0pJiZuLnB1c2gobmV3IHIobyxzLGwsZixoKSksKG89YVsxXSkmJm4ucHVzaChuZXcgcihvLGYsbCxjLGgpKSwobz1hWzJdKSYmbi5wdXNoKG5ldyByKG8scyxoLGYsdSkpLChvPWFbM10pJiZuLnB1c2gobmV3IHIobyxmLGgsYyx1KSl9aS5wdXNoKGUpfWZvcig7ZT1pLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX0sdC5xdWFkdHJlZT1hLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE2NTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2kocix0KCJkMy1wYXRoIikpOmkoKG49bnx8c2VsZikuZDM9bi5kM3x8e30sbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBuPU1hdGguYWJzLGk9TWF0aC5hdGFuMixhPU1hdGguY29zLG89TWF0aC5tYXgscz1NYXRoLm1pbixsPU1hdGguc2luLGM9TWF0aC5zcXJ0LHU9TWF0aC5QSSxmPXUvMixoPTIqdTtmdW5jdGlvbiBwKHQpe3JldHVybiB0PjE/MDp0PC0xP3U6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIHQ+PTE/Zjp0PD0tMT8tZjpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBtKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiB5KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gYih0LGUscixuLGksYSxvLHMpe3ZhciBsPXItdCxjPW4tZSx1PW8taSxmPXMtYSxoPWYqbC11KmM7aWYoIShoKmg8MWUtMTIpKXJldHVyblt0KyhoPSh1KihlLWEpLWYqKHQtaSkpL2gpKmwsZStoKmNdfWZ1bmN0aW9uIF8odCxlLHIsbixpLGEscyl7dmFyIGw9dC1yLHU9ZS1uLGY9KHM/YTotYSkvYyhsKmwrdSp1KSxoPWYqdSxwPS1mKmwsZD10K2gsZz1lK3AsbT1yK2gsdj1uK3AseT0oZCttKS8yLHg9KGcrdikvMixiPW0tZCxfPXYtZyx3PWIqYitfKl8sVD1pLWEsaz1kKnYtbSpnLE09KF88MD8tMToxKSpjKG8oMCxUKlQqdy1rKmspKSxBPShrKl8tYipNKS93LFM9KC1rKmItXypNKS93LEU9KGsqXytiKk0pL3csQz0oLWsqYitfKk0pL3csTD1BLXksST1TLXgsUD1FLXksej1DLXg7cmV0dXJuIEwqTCtJKkk+UCpQK3oqeiYmKEE9RSxTPUMpLHtjeDpBLGN5OlMseDAxOi1oLHkwMTotcCx4MTE6QSooaS9ULTEpLHkxMTpTKihpL1QtMSl9fWZ1bmN0aW9uIHcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFQodCl7cmV0dXJuIG5ldyB3KHQpfWZ1bmN0aW9uIGsodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBBKCl7dmFyIHQ9ayxuPU0saT1yKCEwKSxhPW51bGwsbz1ULHM9bnVsbDtmdW5jdGlvbiBsKHIpe3ZhciBsLGMsdSxmPXIubGVuZ3RoLGg9ITE7Zm9yKG51bGw9PWEmJihzPW8odT1lLnBhdGgoKSkpLGw9MDtsPD1mOysrbCkhKGw8ZiYmaShjPXJbbF0sbCxyKSk9PT1oJiYoKGg9IWgpP3MubGluZVN0YXJ0KCk6cy5saW5lRW5kKCkpLGgmJnMucG9pbnQoK3QoYyxsLHIpLCtuKGMsbCxyKSk7aWYodSlyZXR1cm4gcz1udWxsLHUrIiJ8fG51bGx9cmV0dXJuIGwueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLGwpOnR9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLGwpOm59LGwuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoISF0KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbnVsbCE9YSYmKHM9byhhKSksbCk6b30sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2E9cz1udWxsOnM9byhhPXQpLGwpOmF9LGx9ZnVuY3Rpb24gUygpe3ZhciB0PWssbj1udWxsLGk9cigwKSxhPU0sbz1yKCEwKSxzPW51bGwsbD1ULGM9bnVsbDtmdW5jdGlvbiB1KHIpe3ZhciB1LGYsaCxwLGQsZz1yLmxlbmd0aCxtPSExLHY9bmV3IEFycmF5KGcpLHk9bmV3IEFycmF5KGcpO2ZvcihudWxsPT1zJiYoYz1sKGQ9ZS5wYXRoKCkpKSx1PTA7dTw9ZzsrK3Upe2lmKCEodTxnJiZvKHA9clt1XSx1LHIpKT09PW0paWYobT0hbSlmPXUsYy5hcmVhU3RhcnQoKSxjLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKGMubGluZUVuZCgpLGMubGluZVN0YXJ0KCksaD11LTE7aD49ZjstLWgpYy5wb2ludCh2W2hdLHlbaF0pO2MubGluZUVuZCgpLGMuYXJlYUVuZCgpfW0mJih2W3VdPSt0KHAsdSxyKSx5W3VdPStpKHAsdSxyKSxjLnBvaW50KG4/K24ocCx1LHIpOnZbdV0sYT8rYShwLHUscik6eVt1XSkpfWlmKGQpcmV0dXJuIGM9bnVsbCxkKyIifHxudWxsfWZ1bmN0aW9uIGYoKXtyZXR1cm4gQSgpLmRlZmluZWQobykuY3VydmUobCkuY29udGV4dChzKX1yZXR1cm4gdS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSksbj1udWxsLHUpOnR9LHUueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSx1KTp0fSx1LngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHUpOm59LHUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLGE9bnVsbCx1KTppfSx1LnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksdSk6aX0sdS55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSx1KTphfSx1LmxpbmVYMD11LmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBmKCkueCh0KS55KGkpfSx1LmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBmKCkueCh0KS55KGEpfSx1LmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBmKCkueChuKS55KGkpfSx1LmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCEhdCksdSk6b30sdS5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LG51bGwhPXMmJihjPWwocykpLHUpOmx9LHUuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9zPWM9bnVsbDpjPWwocz10KSx1KTpzfSx1fWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdH13LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciBMPVAoVCk7ZnVuY3Rpb24gSSh0KXt0aGlzLl9jdXJ2ZT10fWZ1bmN0aW9uIFAodCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gbmV3IEkodChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiB6KHQpe3ZhciBlPXQuY3VydmU7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKFAodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gTygpe3JldHVybiB6KEEoKS5jdXJ2ZShMKSl9ZnVuY3Rpb24gRCgpe3ZhciB0PVMoKS5jdXJ2ZShMKSxlPXQuY3VydmUscj10LmxpbmVYMCxuPXQubGluZVgxLGk9dC5saW5lWTAsYT10LmxpbmVZMTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnN0YXJ0QW5nbGU9dC54MCxkZWxldGUgdC54MCx0LmVuZEFuZ2xlPXQueDEsZGVsZXRlIHQueDEsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5pbm5lclJhZGl1cz10LnkwLGRlbGV0ZSB0LnkwLHQub3V0ZXJSYWRpdXM9dC55MSxkZWxldGUgdC55MSx0LmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHoocigpKX0sZGVsZXRlIHQubGluZVgwLHQubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHoobigpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIHooaSgpKX0sZGVsZXRlIHQubGluZVkwLHQubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIHooYSgpKX0sZGVsZXRlIHQubGluZVkxLHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShQKHQpKTplKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIFIodCxlKXtyZXR1cm5bKGU9K2UpKk1hdGguY29zKHQtPU1hdGguUEkvMiksZSpNYXRoLnNpbih0KV19SS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9jdXJ2ZS5wb2ludChlKk1hdGguc2luKHQpLGUqLU1hdGguY29zKHQpKX19O3ZhciBGPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBCKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBOKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBqKHQpe3ZhciBuPUIsaT1OLGE9ayxvPU0scz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgcixsPUYuY2FsbChhcmd1bWVudHMpLGM9bi5hcHBseSh0aGlzLGwpLHU9aS5hcHBseSh0aGlzLGwpO2lmKHN8fChzPXI9ZS5wYXRoKCkpLHQocywrYS5hcHBseSh0aGlzLChsWzBdPWMsbCkpLCtvLmFwcGx5KHRoaXMsbCksK2EuYXBwbHkodGhpcywobFswXT11LGwpKSwrby5hcHBseSh0aGlzLGwpKSxyKXJldHVybiBzPW51bGwscisiInx8bnVsbH1yZXR1cm4gbC5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxsKTpufSxsLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGwpOml9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLGwpOmF9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLGwpOm99LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxsKTpzfSxsfWZ1bmN0aW9uIFUodCxlLHIsbixpKXt0Lm1vdmVUbyhlLHIpLHQuYmV6aWVyQ3VydmVUbyhlPShlK24pLzIscixlLGksbixpKX1mdW5jdGlvbiBWKHQsZSxyLG4saSl7dC5tb3ZlVG8oZSxyKSx0LmJlemllckN1cnZlVG8oZSxyPShyK2kpLzIsbixyLG4saSl9ZnVuY3Rpb24gcSh0LGUscixuLGkpe3ZhciBhPVIoZSxyKSxvPVIoZSxyPShyK2kpLzIpLHM9UihuLHIpLGw9UihuLGkpO3QubW92ZVRvKGFbMF0sYVsxXSksdC5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sbFswXSxsWzFdKX12YXIgSD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlL3UpO3QubW92ZVRvKHIsMCksdC5hcmMoMCwwLHIsMCxoKX19LEc9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS81KS8yO3QubW92ZVRvKC0zKnIsLXIpLHQubGluZVRvKC1yLC1yKSx0LmxpbmVUbygtciwtMypyKSx0LmxpbmVUbyhyLC0zKnIpLHQubGluZVRvKHIsLXIpLHQubGluZVRvKDMqciwtciksdC5saW5lVG8oMypyLHIpLHQubGluZVRvKHIsciksdC5saW5lVG8ociwzKnIpLHQubGluZVRvKC1yLDMqciksdC5saW5lVG8oLXIsciksdC5saW5lVG8oLTMqcixyKSx0LmNsb3NlUGF0aCgpfX0sWT1NYXRoLnNxcnQoMS8zKSxXPTIqWSxYPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvVyksbj1yKlk7dC5tb3ZlVG8oMCwtciksdC5saW5lVG8obiwwKSx0LmxpbmVUbygwLHIpLHQubGluZVRvKC1uLDApLHQuY2xvc2VQYXRoKCl9fSxaPU1hdGguc2luKHUvMTApL01hdGguc2luKDcqdS8xMCksSj1NYXRoLnNpbihoLzEwKSpaLEs9LU1hdGguY29zKGgvMTApKlosUT17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydCguODkwODEzMDkxNTI5Mjg1MiplKSxuPUoqcixpPUsqcjt0Lm1vdmVUbygwLC1yKSx0LmxpbmVUbyhuLGkpO2Zvcih2YXIgYT0xO2E8NTsrK2Epe3ZhciBvPWgqYS81LHM9TWF0aC5jb3MobyksbD1NYXRoLnNpbihvKTt0LmxpbmVUbyhsKnIsLXMqciksdC5saW5lVG8ocypuLWwqaSxsKm4rcyppKX10LmNsb3NlUGF0aCgpfX0sJD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlKSxuPS1yLzI7dC5yZWN0KG4sbixyLHIpfX0sdHQ9TWF0aC5zcXJ0KDMpLGV0PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9LU1hdGguc3FydChlLygzKnR0KSk7dC5tb3ZlVG8oMCwyKnIpLHQubGluZVRvKC10dCpyLC1yKSx0LmxpbmVUbyh0dCpyLC1yKSx0LmNsb3NlUGF0aCgpfX0scnQ9LS41LG50PU1hdGguc3FydCgzKS8yLGl0PTEvTWF0aC5zcXJ0KDEyKSxhdD0zKihpdC8yKzEpLG90PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvYXQpLG49ci8yLGk9cippdCxhPW4sbz1yKml0K3Iscz0tYSxsPW87dC5tb3ZlVG8obixpKSx0LmxpbmVUbyhhLG8pLHQubGluZVRvKHMsbCksdC5saW5lVG8ocnQqbi1udCppLG50Km4rcnQqaSksdC5saW5lVG8ocnQqYS1udCpvLG50KmErcnQqbyksdC5saW5lVG8ocnQqcy1udCpsLG50KnMrcnQqbCksdC5saW5lVG8ocnQqbitudCppLHJ0KmktbnQqbiksdC5saW5lVG8ocnQqYStudCpvLHJ0Km8tbnQqYSksdC5saW5lVG8ocnQqcytudCpsLHJ0KmwtbnQqcyksdC5jbG9zZVBhdGgoKX19LHN0PVtILEcsWCwkLFEsZXQsb3RdO2Z1bmN0aW9uIGx0KCl7fWZ1bmN0aW9uIGN0KHQsZSxyKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErZSkvNiwodC5feTArNCp0Ll95MStyKS82KX1mdW5jdGlvbiB1dCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gZnQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGh0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBwdCh0LGUpe3RoaXMuX2Jhc2lzPW5ldyB1dCh0KSx0aGlzLl9iZXRhPWV9dXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpjdCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpjdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sZnQucHJvdG90eXBlPXthcmVhU3RhcnQ6bHQsYXJlYUVuZDpsdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6Y3QodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LGh0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MStlKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6Y3QodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LHB0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3kscj10Lmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG4saT10WzBdLGE9ZVswXSxvPXRbcl0taSxzPWVbcl0tYSxsPS0xOysrbDw9cjspbj1sL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSp0W2xdKygxLXRoaXMuX2JldGEpKihpK24qbyksdGhpcy5fYmV0YSplW2xdKygxLXRoaXMuX2JldGEpKihhK24qcykpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fTt2YXIgZHQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiAxPT09ZT9uZXcgdXQodCk6bmV3IHB0KHQsZSl9cmV0dXJuIHIuYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC44NSk7ZnVuY3Rpb24gZ3QodCxlLHIpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLXIpLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBtdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9bXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOmd0KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpndCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIHZ0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbmV3IG10KHQsZSl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KDApO2Z1bmN0aW9uIHl0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn15dC5wcm90b3R5cGU9e2FyZWFTdGFydDpsdCxhcmVhRW5kOmx0LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6Z3QodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciB4dD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyB5dCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiBidCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9YnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6Z3QodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBfdD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyBidCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiB3dCh0LGUscil7dmFyIG49dC5feDEsaT10Ll95MSxhPXQuX3gyLG89dC5feTI7aWYodC5fbDAxX2E+MWUtMTIpe3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGw9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO249KG4qcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9sLGk9KGkqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9sfWlmKHQuX2wyM19hPjFlLTEyKXt2YXIgYz0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSx1PTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTthPShhKmMrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS91LG89KG8qYyt0Ll95MSp0Ll9sMjNfMmEtcip0Ll9sMTJfMmEpL3V9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxhLG8sdC5feDIsdC5feTIpfWZ1bmN0aW9uIFR0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9VHQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDp3dCh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBrdD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/bmV3IFR0KHQsZSk6bmV3IG10KHQsMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguNSk7ZnVuY3Rpb24gTXQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1NdC5wcm90b3R5cGU9e2FyZWFTdGFydDpsdCxhcmVhRW5kOmx0LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0Ond0KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIEF0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgTXQodCxlKTpuZXcgeXQodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBTdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfVN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDp3dCh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBFdD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/bmV3IFN0KHQsZSk6bmV3IGJ0KHQsMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguNSk7ZnVuY3Rpb24gQ3QodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEx0KHQpe3JldHVybiB0PDA/LTE6MX1mdW5jdGlvbiBJdCh0LGUscil7dmFyIG49dC5feDEtdC5feDAsaT1lLXQuX3gxLGE9KHQuX3kxLXQuX3kwKS8obnx8aTwwJiYtMCksbz0oci10Ll95MSkvKGl8fG48MCYmLTApLHM9KGEqaStvKm4pLyhuK2kpO3JldHVybihMdChhKStMdChvKSkqTWF0aC5taW4oTWF0aC5hYnMoYSksTWF0aC5hYnMobyksLjUqTWF0aC5hYnMocykpfHwwfWZ1bmN0aW9uIFB0KHQsZSl7dmFyIHI9dC5feDEtdC5feDA7cmV0dXJuIHI/KDMqKHQuX3kxLXQuX3kwKS9yLWUpLzI6ZX1mdW5jdGlvbiB6dCh0LGUscil7dmFyIG49dC5feDAsaT10Ll95MCxhPXQuX3gxLG89dC5feTEscz0oYS1uKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuK3MsaStzKmUsYS1zLG8tcypyLGEsbyl9ZnVuY3Rpb24gT3QodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIER0KHQpe3RoaXMuX2NvbnRleHQ9bmV3IFJ0KHQpfWZ1bmN0aW9uIFJ0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBGdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gQnQodCl7dmFyIGUscixuPXQubGVuZ3RoLTEsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobik7Zm9yKGlbMF09MCxhWzBdPTIsb1swXT10WzBdKzIqdFsxXSxlPTE7ZTxuLTE7KytlKWlbZV09MSxhW2VdPTQsb1tlXT00KnRbZV0rMip0W2UrMV07Zm9yKGlbbi0xXT0yLGFbbi0xXT03LG9bbi0xXT04KnRbbi0xXSt0W25dLGU9MTtlPG47KytlKXI9aVtlXS9hW2UtMV0sYVtlXS09cixvW2VdLT1yKm9bZS0xXTtmb3IoaVtuLTFdPW9bbi0xXS9hW24tMV0sZT1uLTI7ZT49MDstLWUpaVtlXT0ob1tlXS1pW2UrMV0pL2FbZV07Zm9yKGFbbi0xXT0odFtuXStpW24tMV0pLzIsZT0wO2U8bi0xOysrZSlhW2VdPTIqdFtlKzFdLWlbZSsxXTtyZXR1cm5baSxhXX1mdW5jdGlvbiBOdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl90PWV9ZnVuY3Rpb24ganQodCxlKXtpZigoaT10Lmxlbmd0aCk+MSlmb3IodmFyIHIsbixpLGE9MSxvPXRbZVswXV0scz1vLmxlbmd0aDthPGk7KythKWZvcihuPW8sbz10W2VbYV1dLHI9MDtyPHM7KytyKW9bcl1bMV0rPW9bcl1bMF09aXNOYU4obltyXVsxXSk/bltyXVswXTpuW3JdWzFdfWZ1bmN0aW9uIFV0KHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKTstLWU+PTA7KXJbZV09ZTtyZXR1cm4gcn1mdW5jdGlvbiBWdCh0LGUpe3JldHVybiB0W2VdfWZ1bmN0aW9uIHF0KHQpe3ZhciBlPXQubWFwKEh0KTtyZXR1cm4gVXQodCkuc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gZVt0XS1lW3JdfSkpfWZ1bmN0aW9uIEh0KHQpe2Zvcih2YXIgZSxyPS0xLG49MCxpPXQubGVuZ3RoLGE9LTEvMDsrK3I8aTspKGU9K3Rbcl1bMV0pPmEmJihhPWUsbj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBHdCh0KXt2YXIgZT10Lm1hcChZdCk7cmV0dXJuIFV0KHQpLnNvcnQoKGZ1bmN0aW9uKHQscil7cmV0dXJuIGVbdF0tZVtyXX0pKX1mdW5jdGlvbiBZdCh0KXtmb3IodmFyIGUscj0wLG49LTEsaT10Lmxlbmd0aDsrK248aTspKGU9K3Rbbl1bMV0pJiYocis9ZSk7cmV0dXJuIHJ9Q3QucHJvdG90eXBlPXthcmVhU3RhcnQ6bHQsYXJlYUVuZDpsdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dD0rdCxlPStlLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSl9fSxPdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6enQodGhpcyx0aGlzLl90MCxQdCh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3ZhciByPU5hTjtpZihlPStlLCh0PSt0KSE9PXRoaXMuX3gxfHxlIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsenQodGhpcyxQdCh0aGlzLHI9SXQodGhpcyx0LGUpKSxyKTticmVhaztkZWZhdWx0Onp0KHRoaXMsdGhpcy5fdDAscj1JdCh0aGlzLHQsZSkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZSx0aGlzLl90MD1yfX19LChEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShPdC5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LGUpe090LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsZSx0KX0sUnQucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LG4scixhLGkpfX0sRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3kscj10Lmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLDI9PT1yKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIG49QnQodCksaT1CdChlKSxhPTAsbz0xO288cjsrK2EsKytvKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW2FdLGlbMF1bYV0sblsxXVthXSxpWzFdW2FdLHRbb10sZVtvXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09cikmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX0sTnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJjI9PT10aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OmlmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxlKSx0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2Vsc2V7dmFyIHI9dGhpcy5feCooMS10aGlzLl90KSt0KnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8ocix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhyLGUpfX10aGlzLl94PXQsdGhpcy5feT1lfX0sdC5hcmM9ZnVuY3Rpb24oKXt2YXIgdD1nLG89bSx3PXIoMCksVD1udWxsLGs9dixNPXksQT14LFM9bnVsbDtmdW5jdGlvbiBFKCl7dmFyIHIsZyxtPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2PStvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx5PWsuYXBwbHkodGhpcyxhcmd1bWVudHMpLWYseD1NLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1mLEU9bih4LXkpLEM9eD55O2lmKFN8fChTPXI9ZS5wYXRoKCkpLHY8bSYmKGc9dix2PW0sbT1nKSx2PjFlLTEyKWlmKEU+aC0xZS0xMilTLm1vdmVUbyh2KmEoeSksdipsKHkpKSxTLmFyYygwLDAsdix5LHgsIUMpLG0+MWUtMTImJihTLm1vdmVUbyhtKmEoeCksbSpsKHgpKSxTLmFyYygwLDAsbSx4LHksQykpO2Vsc2V7dmFyIEwsSSxQPXksej14LE89eSxEPXgsUj1FLEY9RSxCPUEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTj1CPjFlLTEyJiYoVD8rVC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YyhtKm0rdip2KSksaj1zKG4odi1tKS8yLCt3LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksVT1qLFY9ajtpZihOPjFlLTEyKXt2YXIgcT1kKE4vbSpsKEIpKSxIPWQoTi92KmwoQikpOyhSLT0yKnEpPjFlLTEyPyhPKz1xKj1DPzE6LTEsRC09cSk6KFI9MCxPPUQ9KHkreCkvMiksKEYtPTIqSCk+MWUtMTI/KFArPUgqPUM/MTotMSx6LT1IKTooRj0wLFA9ej0oeSt4KS8yKX12YXIgRz12KmEoUCksWT12KmwoUCksVz1tKmEoRCksWD1tKmwoRCk7aWYoaj4xZS0xMil7dmFyIFosSj12KmEoeiksSz12KmwoeiksUT1tKmEoTyksJD1tKmwoTyk7aWYoRTx1JiYoWj1iKEcsWSxRLCQsSixLLFcsWCkpKXt2YXIgdHQ9Ry1aWzBdLGV0PVktWlsxXSxydD1KLVpbMF0sbnQ9Sy1aWzFdLGl0PTEvbChwKCh0dCpydCtldCpudCkvKGModHQqdHQrZXQqZXQpKmMocnQqcnQrbnQqbnQpKSkvMiksYXQ9YyhaWzBdKlpbMF0rWlsxXSpaWzFdKTtVPXMoaiwobS1hdCkvKGl0LTEpKSxWPXMoaiwodi1hdCkvKGl0KzEpKX19Rj4xZS0xMj9WPjFlLTEyPyhMPV8oUSwkLEcsWSx2LFYsQyksST1fKEosSyxXLFgsdixWLEMpLFMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksVjxqP1MuYXJjKEwuY3gsTC5jeSxWLGkoTC55MDEsTC54MDEpLGkoSS55MDEsSS54MDEpLCFDKTooUy5hcmMoTC5jeCxMLmN5LFYsaShMLnkwMSxMLngwMSksaShMLnkxMSxMLngxMSksIUMpLFMuYXJjKDAsMCx2LGkoTC5jeStMLnkxMSxMLmN4K0wueDExKSxpKEkuY3krSS55MTEsSS5jeCtJLngxMSksIUMpLFMuYXJjKEkuY3gsSS5jeSxWLGkoSS55MTEsSS54MTEpLGkoSS55MDEsSS54MDEpLCFDKSkpOihTLm1vdmVUbyhHLFkpLFMuYXJjKDAsMCx2LFAseiwhQykpOlMubW92ZVRvKEcsWSksbT4xZS0xMiYmUj4xZS0xMj9VPjFlLTEyPyhMPV8oVyxYLEosSyxtLC1VLEMpLEk9XyhHLFksUSwkLG0sLVUsQyksUy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxVPGo/Uy5hcmMoTC5jeCxMLmN5LFUsaShMLnkwMSxMLngwMSksaShJLnkwMSxJLngwMSksIUMpOihTLmFyYyhMLmN4LEwuY3ksVSxpKEwueTAxLEwueDAxKSxpKEwueTExLEwueDExKSwhQyksUy5hcmMoMCwwLG0saShMLmN5K0wueTExLEwuY3grTC54MTEpLGkoSS5jeStJLnkxMSxJLmN4K0kueDExKSxDKSxTLmFyYyhJLmN4LEkuY3ksVSxpKEkueTExLEkueDExKSxpKEkueTAxLEkueDAxKSwhQykpKTpTLmFyYygwLDAsbSxELE8sQyk6Uy5saW5lVG8oVyxYKX1lbHNlIFMubW92ZVRvKDAsMCk7aWYoUy5jbG9zZVBhdGgoKSxyKXJldHVybiBTPW51bGwscisiInx8bnVsbH1yZXR1cm4gRS5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBlPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgray5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtNLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi11LzI7cmV0dXJuW2EocikqZSxsKHIpKmVdfSxFLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSksRSk6dH0sRS5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLEUpOm99LEUuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksRSk6d30sRS5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksRSk6VH0sRS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksRSk6a30sRS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLEUpOk19LEUucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTpBfSxFLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9bnVsbD09dD9udWxsOnQsRSk6U30sRX0sdC5hcmVhPVMsdC5hcmVhUmFkaWFsPUQsdC5jdXJ2ZUJhc2lzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdXQodCl9LHQuY3VydmVCYXNpc0Nsb3NlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGZ0KHQpfSx0LmN1cnZlQmFzaXNPcGVuPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaHQodCl9LHQuY3VydmVCdW5kbGU9ZHQsdC5jdXJ2ZUNhcmRpbmFsPXZ0LHQuY3VydmVDYXJkaW5hbENsb3NlZD14dCx0LmN1cnZlQ2FyZGluYWxPcGVuPV90LHQuY3VydmVDYXRtdWxsUm9tPWt0LHQuY3VydmVDYXRtdWxsUm9tQ2xvc2VkPUF0LHQuY3VydmVDYXRtdWxsUm9tT3Blbj1FdCx0LmN1cnZlTGluZWFyPVQsdC5jdXJ2ZUxpbmVhckNsb3NlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEN0KHQpfSx0LmN1cnZlTW9ub3RvbmVYPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgT3QodCl9LHQuY3VydmVNb25vdG9uZVk9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEdCh0KX0sdC5jdXJ2ZU5hdHVyYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGdCh0KX0sdC5jdXJ2ZVN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBOdCh0LC41KX0sdC5jdXJ2ZVN0ZXBBZnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE50KHQsMSl9LHQuY3VydmVTdGVwQmVmb3JlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTnQodCwwKX0sdC5saW5lPUEsdC5saW5lUmFkaWFsPU8sdC5saW5rSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiBqKFUpfSx0LmxpbmtSYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1qKHEpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9LHQubGlua1ZlcnRpY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIGooVil9LHQucGllPWZ1bmN0aW9uKCl7dmFyIHQ9QyxlPUUsbj1udWxsLGk9cigwKSxhPXIoaCksbz1yKDApO2Z1bmN0aW9uIHMocil7dmFyIHMsbCxjLHUsZixwPXIubGVuZ3RoLGQ9MCxnPW5ldyBBcnJheShwKSxtPW5ldyBBcnJheShwKSx2PStpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx5PU1hdGgubWluKGgsTWF0aC5tYXgoLWgsYS5hcHBseSh0aGlzLGFyZ3VtZW50cyktdikpLHg9TWF0aC5taW4oTWF0aC5hYnMoeSkvcCxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj14Kih5PDA/LTE6MSk7Zm9yKHM9MDtzPHA7KytzKShmPW1bZ1tzXT1zXT0rdChyW3NdLHMscikpPjAmJihkKz1mKTtmb3IobnVsbCE9ZT9nLnNvcnQoKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUobVt0XSxtW3JdKX0pKTpudWxsIT1uJiZnLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oclt0XSxyW2VdKX0pKSxzPTAsYz1kPyh5LXAqYikvZDowO3M8cDsrK3Msdj11KWw9Z1tzXSx1PXYrKChmPW1bbF0pPjA/ZipjOjApK2IsbVtsXT17ZGF0YTpyW2xdLGluZGV4OnMsdmFsdWU6ZixzdGFydEFuZ2xlOnYsZW5kQW5nbGU6dSxwYWRBbmdsZTp4fTtyZXR1cm4gbX1yZXR1cm4gcy52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLHMpOnR9LHMuc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxzKTplfSxzLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwscyk6bn0scy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCkscyk6aX0scy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHMpOmF9LHMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTpvfSxzfSx0LnBvaW50UmFkaWFsPVIsdC5yYWRpYWxBcmVhPUQsdC5yYWRpYWxMaW5lPU8sdC5zdGFjaz1mdW5jdGlvbigpe3ZhciB0PXIoW10pLGU9VXQsbj1qdCxpPVZ0O2Z1bmN0aW9uIGEocil7dmFyIGEsbyxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGw9ci5sZW5ndGgsYz1zLmxlbmd0aCx1PW5ldyBBcnJheShjKTtmb3IoYT0wO2E8YzsrK2Epe2Zvcih2YXIgZixoPXNbYV0scD11W2FdPW5ldyBBcnJheShsKSxkPTA7ZDxsOysrZClwW2RdPWY9WzAsK2kocltkXSxoLGQscildLGYuZGF0YT1yW2RdO3Aua2V5PWh9Zm9yKGE9MCxvPWUodSk7YTxjOysrYSl1W29bYV1dLmluZGV4PWE7cmV0dXJuIG4odSxvKSx1fXJldHVybiBhLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKEYuY2FsbChlKSksYSk6dH0sYS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLGEpOml9LGEub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9VdDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoRi5jYWxsKHQpKSxhKTplfSxhLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P2p0OnQsYSk6bn0sYX0sdC5zdGFja09mZnNldERpdmVyZ2luZz1mdW5jdGlvbih0LGUpe2lmKChzPXQubGVuZ3RoKT4wKWZvcih2YXIgcixuLGksYSxvLHMsbD0wLGM9dFtlWzBdXS5sZW5ndGg7bDxjOysrbClmb3IoYT1vPTAscj0wO3I8czsrK3IpKGk9KG49dFtlW3JdXVtsXSlbMV0tblswXSk+MD8oblswXT1hLG5bMV09YSs9aSk6aTwwPyhuWzFdPW8sblswXT1vKz1pKTooblswXT0wLG5bMV09aSl9LHQuc3RhY2tPZmZzZXRFeHBhbmQ9ZnVuY3Rpb24odCxlKXtpZigobj10Lmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saSxhPTAsbz10WzBdLmxlbmd0aDthPG87KythKXtmb3IoaT1yPTA7cjxuOysrcilpKz10W3JdW2FdWzFdfHwwO2lmKGkpZm9yKHI9MDtyPG47KytyKXRbcl1bYV1bMV0vPWl9anQodCxlKX19LHQuc3RhY2tPZmZzZXROb25lPWp0LHQuc3RhY2tPZmZzZXRTaWxob3VldHRlPWZ1bmN0aW9uKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjApe2Zvcih2YXIgcixuPTAsaT10W2VbMF1dLGE9aS5sZW5ndGg7bjxhOysrbil7Zm9yKHZhciBvPTAscz0wO288cjsrK28pcys9dFtvXVtuXVsxXXx8MDtpW25dWzFdKz1pW25dWzBdPS1zLzJ9anQodCxlKX19LHQuc3RhY2tPZmZzZXRXaWdnbGU9ZnVuY3Rpb24odCxlKXtpZigoaT10Lmxlbmd0aCk+MCYmKG49KHI9dFtlWzBdXSkubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLGE9MCxvPTE7bzxuOysrbyl7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPGk7KytzKXtmb3IodmFyIHU9dFtlW3NdXSxmPXVbb11bMV18fDAsaD0oZi0odVtvLTFdWzFdfHwwKSkvMixwPTA7cDxzOysrcCl7dmFyIGQ9dFtlW3BdXTtoKz0oZFtvXVsxXXx8MCktKGRbby0xXVsxXXx8MCl9bCs9ZixjKz1oKmZ9cltvLTFdWzFdKz1yW28tMV1bMF09YSxsJiYoYS09Yy9sKX1yW28tMV1bMV0rPXJbby0xXVswXT1hLGp0KHQsZSl9fSx0LnN0YWNrT3JkZXJBcHBlYXJhbmNlPXF0LHQuc3RhY2tPcmRlckFzY2VuZGluZz1HdCx0LnN0YWNrT3JkZXJEZXNjZW5kaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBHdCh0KS5yZXZlcnNlKCl9LHQuc3RhY2tPcmRlckluc2lkZU91dD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dC5sZW5ndGgsaT10Lm1hcChZdCksYT1xdCh0KSxvPTAscz0wLGw9W10sYz1bXTtmb3IoZT0wO2U8bjsrK2Upcj1hW2VdLG88cz8obys9aVtyXSxsLnB1c2gocikpOihzKz1pW3JdLGMucHVzaChyKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX0sdC5zdGFja09yZGVyTm9uZT1VdCx0LnN0YWNrT3JkZXJSZXZlcnNlPWZ1bmN0aW9uKHQpe3JldHVybiBVdCh0KS5yZXZlcnNlKCl9LHQuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9cihIKSxuPXIoNjQpLGk9bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHI7aWYoaXx8KGk9cj1lLnBhdGgoKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhpLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscilyZXR1cm4gaT1udWxsLHIrIiJ8fG51bGx9cmV0dXJuIGEudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoZSksYSk6dH0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksYSk6bn0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDp0LGEpOml9LGF9LHQuc3ltYm9sQ2lyY2xlPUgsdC5zeW1ib2xDcm9zcz1HLHQuc3ltYm9sRGlhbW9uZD1YLHQuc3ltYm9sU3F1YXJlPSQsdC5zeW1ib2xTdGFyPVEsdC5zeW1ib2xUcmlhbmdsZT1ldCx0LnN5bWJvbFd5ZT1vdCx0LnN5bWJvbHM9c3QsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLXBhdGgiOjE2M31dLDE2NjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2kocix0KCJkMy10aW1lIikpOmkoKG49bnx8c2VsZikuZDM9bi5kM3x8e30sbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIG4odCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJue3k6dCxtOmUsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gYSh0KXt2YXIgYT10LmRhdGVUaW1lLG89dC5kYXRlLGw9dC50aW1lLGM9dC5wZXJpb2RzLHU9dC5kYXlzLGY9dC5zaG9ydERheXMsaD10Lm1vbnRocyx5dD10LnNob3J0TW9udGhzLHh0PXAoYyksYnQ9ZChjKSxfdD1wKHUpLHd0PWQodSksVHQ9cChmKSxrdD1kKGYpLE10PXAoaCksQXQ9ZChoKSxTdD1wKHl0KSxFdD1kKHl0KSxDdD17YTpmdW5jdGlvbih0KXtyZXR1cm4gZlt0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4geXRbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gaFt0LmdldE1vbnRoKCldfSxjOm51bGwsZDpELGU6RCxmOmosSDpSLEk6RixqOkIsTDpOLG06VSxNOlYscDpmdW5jdGlvbih0KXtyZXR1cm4gY1srKHQuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldE1vbnRoKCkvMyl9LFE6bXQsczp2dCxTOnEsdTpILFU6RyxWOlksdzpXLFc6WCx4Om51bGwsWDpudWxsLHk6WixZOkosWjpLLCIlIjpndH0sTHQ9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIGZbdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHl0W3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGhbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6USxlOlEsZjpudCxIOiQsSTp0dCxqOmV0LEw6cnQsbTppdCxNOmF0LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGNbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRVVENNb250aCgpLzMpfSxROm10LHM6dnQsUzpvdCx1OnN0LFU6bHQsVjpjdCx3OnV0LFc6ZnQseDpudWxsLFg6bnVsbCx5Omh0LFk6cHQsWjpkdCwiJSI6Z3R9LEl0PXthOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1UdC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9a3RbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUscil7dmFyIG49X3QuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC53PXd0W25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVN0LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT1FdFtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NdC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lm09QXRbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LGUscil7cmV0dXJuIE90KHQsYSxlLHIpfSxkOk0sZTpNLGY6SSxIOlMsSTpTLGo6QSxMOkwsbTprLE06RSxwOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj14dC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LnA9YnRbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0scTpULFE6eixzOk8sUzpDLHU6bSxVOnYsVjp5LHc6ZyxXOngseDpmdW5jdGlvbih0LGUscil7cmV0dXJuIE90KHQsbyxlLHIpfSxYOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gT3QodCxsLGUscil9LHk6XyxZOmIsWjp3LCIlIjpQfTtmdW5jdGlvbiBQdCh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbixpLGEsbz1bXSxsPS0xLGM9MCx1PXQubGVuZ3RoO2ZvcihyIGluc3RhbmNlb2YgRGF0ZXx8KHI9bmV3IERhdGUoK3IpKTsrK2w8dTspMzc9PT10LmNoYXJDb2RlQXQobCkmJihvLnB1c2godC5zbGljZShjLGwpKSxudWxsIT0oaT1zW249dC5jaGFyQXQoKytsKV0pP249dC5jaGFyQXQoKytsKTppPSJlIj09PW4/IiAiOiIwIiwoYT1lW25dKSYmKG49YShyLGkpKSxvLnB1c2gobiksYz1sKzEpO3JldHVybiBvLnB1c2godC5zbGljZShjLGwpKSxvLmpvaW4oIiIpfX1mdW5jdGlvbiB6dCh0LGEpe3JldHVybiBmdW5jdGlvbihvKXt2YXIgcyxsLGM9aSgxOTAwLHZvaWQgMCwxKTtpZihPdChjLHQsbys9IiIsMCkhPW8ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGMpcmV0dXJuIG5ldyBEYXRlKGMuUSk7aWYoInMiaW4gYylyZXR1cm4gbmV3IERhdGUoMWUzKmMucysoIkwiaW4gYz9jLkw6MCkpO2lmKGEmJiEoIloiaW4gYykmJihjLlo9MCksInAiaW4gYyYmKGMuSD1jLkglMTIrMTIqYy5wKSx2b2lkIDA9PT1jLm0mJihjLm09InEiaW4gYz9jLnE6MCksIlYiaW4gYyl7aWYoYy5WPDF8fGMuVj41MylyZXR1cm4gbnVsbDsidyJpbiBjfHwoYy53PTEpLCJaImluIGM/KGw9KHM9bihpKGMueSwwLDEpKSkuZ2V0VVRDRGF5KCkscz1sPjR8fDA9PT1sP2UudXRjTW9uZGF5LmNlaWwocyk6ZS51dGNNb25kYXkocykscz1lLnV0Y0RheS5vZmZzZXQocyw3KihjLlYtMSkpLGMueT1zLmdldFVUQ0Z1bGxZZWFyKCksYy5tPXMuZ2V0VVRDTW9udGgoKSxjLmQ9cy5nZXRVVENEYXRlKCkrKGMudys2KSU3KToobD0ocz1yKGkoYy55LDAsMSkpKS5nZXREYXkoKSxzPWw+NHx8MD09PWw/ZS50aW1lTW9uZGF5LmNlaWwocyk6ZS50aW1lTW9uZGF5KHMpLHM9ZS50aW1lRGF5Lm9mZnNldChzLDcqKGMuVi0xKSksYy55PXMuZ2V0RnVsbFllYXIoKSxjLm09cy5nZXRNb250aCgpLGMuZD1zLmdldERhdGUoKSsoYy53KzYpJTcpfWVsc2UoIlciaW4gY3x8IlUiaW4gYykmJigidyJpbiBjfHwoYy53PSJ1ImluIGM/Yy51JTc6IlciaW4gYz8xOjApLGw9IloiaW4gYz9uKGkoYy55LDAsMSkpLmdldFVUQ0RheSgpOnIoaShjLnksMCwxKSkuZ2V0RGF5KCksYy5tPTAsYy5kPSJXImluIGM/KGMudys2KSU3KzcqYy5XLShsKzUpJTc6Yy53KzcqYy5VLShsKzYpJTcpO3JldHVybiJaImluIGM/KGMuSCs9Yy5aLzEwMHwwLGMuTSs9Yy5aJTEwMCxuKGMpKTpyKGMpfX1mdW5jdGlvbiBPdCh0LGUscixuKXtmb3IodmFyIGksYSxvPTAsbD1lLmxlbmd0aCxjPXIubGVuZ3RoO288bDspe2lmKG4+PWMpcmV0dXJuLTE7aWYoMzc9PT0oaT1lLmNoYXJDb2RlQXQobysrKSkpe2lmKGk9ZS5jaGFyQXQobysrKSwhKGE9SXRbaSBpbiBzP2UuY2hhckF0KG8rKyk6aV0pfHwobj1hKHQscixuKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPXIuY2hhckNvZGVBdChuKyspKXJldHVybi0xfXJldHVybiBufXJldHVybiBDdC54PVB0KG8sQ3QpLEN0Llg9UHQobCxDdCksQ3QuYz1QdChhLEN0KSxMdC54PVB0KG8sTHQpLEx0Llg9UHQobCxMdCksTHQuYz1QdChhLEx0KSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPVB0KHQrPSIiLEN0KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT16dCh0Kz0iIiwhMSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPVB0KHQrPSIiLEx0KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT16dCh0Kz0iIiwhMCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fXZhciBvLHM9eyItIjoiIixfOiIgIiwwOiIwIn0sbD0vXlxzKlxkKy8sYz0vXiUvLHU9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIGYodCxlLHIpe3ZhciBuPXQ8MD8iLSI6IiIsaT0obj8tdDp0KSsiIixhPWkubGVuZ3RoO3JldHVybiBuKyhhPHI/bmV3IEFycmF5KHItYSsxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC5yZXBsYWNlKHUsIlxcJCYiKX1mdW5jdGlvbiBwKHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChoKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9e30scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllW3Rbcl0udG9Mb3dlckNhc2UoKV09cjtyZXR1cm4gZX1mdW5jdGlvbiBnKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC51PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlY9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscis0KSk7cmV0dXJuIG4/KHQueT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBfKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lnk9K25bMF0rKCtuWzBdPjY4PzE5MDA6MmUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KHQuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVCh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC5xPTMqblswXS0zLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQubT0wLHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBTKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuUz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8odC5MPU1hdGguZmxvb3IoblswXS8xZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFAodCxlLHIpe3ZhciBuPWMuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiB6KHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQucz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEKHQsZSl7cmV0dXJuIGYodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuIGYodC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gRih0LGUpe3JldHVybiBmKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBCKHQscil7cmV0dXJuIGYoMStlLnRpbWVEYXkuY291bnQoZS50aW1lWWVhcih0KSx0KSxyLDMpfWZ1bmN0aW9uIE4odCxlKXtyZXR1cm4gZih0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gaih0LGUpe3JldHVybiBOKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gVSh0LGUpe3JldHVybiBmKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gVih0LGUpe3JldHVybiBmKHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gcSh0LGUpe3JldHVybiBmKHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gSCh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gRyh0LHIpe3JldHVybiBmKGUudGltZVN1bmRheS5jb3VudChlLnRpbWVZZWFyKHQpLTEsdCksciwyKX1mdW5jdGlvbiBZKHQscil7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gdD1uPj00fHwwPT09bj9lLnRpbWVUaHVyc2RheSh0KTplLnRpbWVUaHVyc2RheS5jZWlsKHQpLGYoZS50aW1lVGh1cnNkYXkuY291bnQoZS50aW1lWWVhcih0KSx0KSsoND09PWUudGltZVllYXIodCkuZ2V0RGF5KCkpLHIsMil9ZnVuY3Rpb24gVyh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBYKHQscil7cmV0dXJuIGYoZS50aW1lTW9uZGF5LmNvdW50KGUudGltZVllYXIodCktMSx0KSxyLDIpfWZ1bmN0aW9uIFoodCxlKXtyZXR1cm4gZih0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gSih0LGUpe3JldHVybiBmKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBLKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrZihlLzYwfDAsIjAiLDIpK2YoZSU2MCwiMCIsMil9ZnVuY3Rpb24gUSh0LGUpe3JldHVybiBmKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gJCh0LGUpe3JldHVybiBmKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIHR0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIGV0KHQscil7cmV0dXJuIGYoMStlLnV0Y0RheS5jb3VudChlLnV0Y1llYXIodCksdCksciwzKX1mdW5jdGlvbiBydCh0LGUpe3JldHVybiBmKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBudCh0LGUpe3JldHVybiBydCh0LGUpKyIwMDAifWZ1bmN0aW9uIGl0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBhdCh0LGUpe3JldHVybiBmKHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gb3QodCxlKXtyZXR1cm4gZih0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIHN0KHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBsdCh0LHIpe3JldHVybiBmKGUudXRjU3VuZGF5LmNvdW50KGUudXRjWWVhcih0KS0xLHQpLHIsMil9ZnVuY3Rpb24gY3QodCxyKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP2UudXRjVGh1cnNkYXkodCk6ZS51dGNUaHVyc2RheS5jZWlsKHQpLGYoZS51dGNUaHVyc2RheS5jb3VudChlLnV0Y1llYXIodCksdCkrKDQ9PT1lLnV0Y1llYXIodCkuZ2V0VVRDRGF5KCkpLHIsMil9ZnVuY3Rpb24gdXQodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gZnQodCxyKXtyZXR1cm4gZihlLnV0Y01vbmRheS5jb3VudChlLnV0Y1llYXIodCktMSx0KSxyLDIpfWZ1bmN0aW9uIGh0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHB0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIGR0KCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBndCgpe3JldHVybiIlIn1mdW5jdGlvbiBtdCh0KXtyZXR1cm4rdH1mdW5jdGlvbiB2dCh0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfWZ1bmN0aW9uIHl0KGUpe3JldHVybiBvPWEoZSksdC50aW1lRm9ybWF0PW8uZm9ybWF0LHQudGltZVBhcnNlPW8ucGFyc2UsdC51dGNGb3JtYXQ9by51dGNGb3JtYXQsdC51dGNQYXJzZT1vLnV0Y1BhcnNlLG99eXQoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgeHQ9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06dC51dGNGb3JtYXQoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3ZhciBidD0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9OnQudXRjUGFyc2UoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3QuaXNvRm9ybWF0PXh0LHQuaXNvUGFyc2U9YnQsdC50aW1lRm9ybWF0RGVmYXVsdExvY2FsZT15dCx0LnRpbWVGb3JtYXRMb2NhbGU9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtdGltZSI6MTY3fV0sMTY3OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPW5ldyBEYXRlLHI9bmV3IERhdGU7ZnVuY3Rpb24gbih0LGksYSxvKXtmdW5jdGlvbiBzKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBzLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxzLmNlaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZShlLTEpKSxpKGUsMSksdChlKSxlfSxzLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXModCkscj1zLmNlaWwodCk7cmV0dXJuIHQtZTxyLXQ/ZTpyfSxzLm9mZnNldD1mdW5jdGlvbih0LGUpe3JldHVybiBpKHQ9bmV3IERhdGUoK3QpLG51bGw9PWU/MTpNYXRoLmZsb29yKGUpKSx0fSxzLnJhbmdlPWZ1bmN0aW9uKGUscixuKXt2YXIgYSxvPVtdO2lmKGU9cy5jZWlsKGUpLG49bnVsbD09bj8xOk1hdGguZmxvb3IobiksIShlPHImJm4+MCkpcmV0dXJuIG87ZG97by5wdXNoKGE9bmV3IERhdGUoK2UpKSxpKGUsbiksdChlKX13aGlsZShhPGUmJmU8cik7cmV0dXJuIG99LHMuZmlsdGVyPWZ1bmN0aW9uKGUpe3JldHVybiBuKChmdW5jdGlvbihyKXtpZihyPj1yKWZvcig7dChyKSwhZShyKTspci5zZXRUaW1lKHItMSl9KSwoZnVuY3Rpb24odCxyKXtpZih0Pj10KWlmKHI8MClmb3IoOysrcjw9MDspZm9yKDtpKHQsLTEpLCFlKHQpOyk7ZWxzZSBmb3IoOy0tcj49MDspZm9yKDtpKHQsMSksIWUodCk7KTt9KSl9LGEmJihzLmNvdW50PWZ1bmN0aW9uKG4saSl7cmV0dXJuIGUuc2V0VGltZSgrbiksci5zZXRUaW1lKCtpKSx0KGUpLHQociksTWF0aC5mbG9vcihhKGUscikpfSxzLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/cy5maWx0ZXIobz9mdW5jdGlvbihlKXtyZXR1cm4gbyhlKSV0PT0wfTpmdW5jdGlvbihlKXtyZXR1cm4gcy5jb3VudCgwLGUpJXQ9PTB9KTpzOm51bGx9KSxzfXZhciBpPW4oKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pKTtpLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/bigoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0pLChmdW5jdGlvbihlLHIpe2Uuc2V0VGltZSgrZStyKnQpfSksKGZ1bmN0aW9uKGUscil7cmV0dXJuKHItZSkvdH0pKTppOm51bGx9O3ZhciBhPWkucmFuZ2Usbz1uKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCsxZTMqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8xZTN9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSkpLHM9by5yYW5nZSxsPW4oKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktMWUzKnQuZ2V0U2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCs2ZTQqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS82ZTR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSkpLGM9bC5yYW5nZSx1PW4oKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktMWUzKnQuZ2V0U2Vjb25kcygpLTZlNCp0LmdldE1pbnV0ZXMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKSxmPXUucmFuZ2UsaD1uKChmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKSxwPWgucmFuZ2U7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gbigoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS82MDQ4ZTV9KSl9dmFyIGc9ZCgwKSxtPWQoMSksdj1kKDIpLHk9ZCgzKSx4PWQoNCksYj1kKDUpLF89ZCg2KSx3PWcucmFuZ2UsVD1tLnJhbmdlLGs9di5yYW5nZSxNPXkucmFuZ2UsQT14LnJhbmdlLFM9Yi5yYW5nZSxFPV8ucmFuZ2UsQz1uKChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSksTD1DLnJhbmdlLEk9bigoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7SS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP24oKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxyKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStyKnQpfSkpOm51bGx9O3ZhciBQPUkucmFuZ2Usej1uKChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCs2ZTQqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS82ZTR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfSkpLE89ei5yYW5nZSxEPW4oKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pKSxSPUQucmFuZ2UsRj1uKChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvODY0ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSksQj1GLnJhbmdlO2Z1bmN0aW9uIE4odCl7cmV0dXJuIG4oKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzYwNDhlNX0pKX12YXIgaj1OKDApLFU9TigxKSxWPU4oMikscT1OKDMpLEg9Tig0KSxHPU4oNSksWT1OKDYpLFc9ai5yYW5nZSxYPVUucmFuZ2UsWj1WLnJhbmdlLEo9cS5yYW5nZSxLPUgucmFuZ2UsUT1HLnJhbmdlLCQ9WS5yYW5nZSx0dD1uKChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSksZXQ9dHQucmFuZ2UscnQ9bigoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7cnQuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9uKChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUscil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrcip0KX0pKTpudWxsfTt2YXIgbnQ9cnQucmFuZ2U7dC50aW1lRGF5PWgsdC50aW1lRGF5cz1wLHQudGltZUZyaWRheT1iLHQudGltZUZyaWRheXM9Uyx0LnRpbWVIb3VyPXUsdC50aW1lSG91cnM9Zix0LnRpbWVJbnRlcnZhbD1uLHQudGltZU1pbGxpc2Vjb25kPWksdC50aW1lTWlsbGlzZWNvbmRzPWEsdC50aW1lTWludXRlPWwsdC50aW1lTWludXRlcz1jLHQudGltZU1vbmRheT1tLHQudGltZU1vbmRheXM9VCx0LnRpbWVNb250aD1DLHQudGltZU1vbnRocz1MLHQudGltZVNhdHVyZGF5PV8sdC50aW1lU2F0dXJkYXlzPUUsdC50aW1lU2Vjb25kPW8sdC50aW1lU2Vjb25kcz1zLHQudGltZVN1bmRheT1nLHQudGltZVN1bmRheXM9dyx0LnRpbWVUaHVyc2RheT14LHQudGltZVRodXJzZGF5cz1BLHQudGltZVR1ZXNkYXk9dix0LnRpbWVUdWVzZGF5cz1rLHQudGltZVdlZG5lc2RheT15LHQudGltZVdlZG5lc2RheXM9TSx0LnRpbWVXZWVrPWcsdC50aW1lV2Vla3M9dyx0LnRpbWVZZWFyPUksdC50aW1lWWVhcnM9UCx0LnV0Y0RheT1GLHQudXRjRGF5cz1CLHQudXRjRnJpZGF5PUcsdC51dGNGcmlkYXlzPVEsdC51dGNIb3VyPUQsdC51dGNIb3Vycz1SLHQudXRjTWlsbGlzZWNvbmQ9aSx0LnV0Y01pbGxpc2Vjb25kcz1hLHQudXRjTWludXRlPXosdC51dGNNaW51dGVzPU8sdC51dGNNb25kYXk9VSx0LnV0Y01vbmRheXM9WCx0LnV0Y01vbnRoPXR0LHQudXRjTW9udGhzPWV0LHQudXRjU2F0dXJkYXk9WSx0LnV0Y1NhdHVyZGF5cz0kLHQudXRjU2Vjb25kPW8sdC51dGNTZWNvbmRzPXMsdC51dGNTdW5kYXk9aix0LnV0Y1N1bmRheXM9Vyx0LnV0Y1RodXJzZGF5PUgsdC51dGNUaHVyc2RheXM9Syx0LnV0Y1R1ZXNkYXk9Vix0LnV0Y1R1ZXNkYXlzPVosdC51dGNXZWRuZXNkYXk9cSx0LnV0Y1dlZG5lc2RheXM9Six0LnV0Y1dlZWs9aix0LnV0Y1dlZWtzPVcsdC51dGNZZWFyPXJ0LHQudXRjWWVhcnM9bnQsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTY4OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlLHIsbj0wLGk9MCxhPTAsbz0wLHM9MCxsPTAsYz0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx1PSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIGYoKXtyZXR1cm4gc3x8KHUoaCkscz1jLm5vdygpK2wpfWZ1bmN0aW9uIGgoKXtzPTB9ZnVuY3Rpb24gcCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49bmV3IHA7cmV0dXJuIG4ucmVzdGFydCh0LGUsciksbn1mdW5jdGlvbiBnKCl7ZigpLCsrbjtmb3IodmFyIHQscj1lO3I7KSh0PXMtci5fdGltZSk+PTAmJnIuX2NhbGwuY2FsbChudWxsLHQpLHI9ci5fbmV4dDstLW59ZnVuY3Rpb24gbSgpe3M9KG89Yy5ub3coKSkrbCxuPWk9MDt0cnl7ZygpfWZpbmFsbHl7bj0wLGZ1bmN0aW9uKCl7dmFyIHQsbixpPWUsYT0xLzA7Zm9yKDtpOylpLl9jYWxsPyhhPmkuX3RpbWUmJihhPWkuX3RpbWUpLHQ9aSxpPWkuX25leHQpOihuPWkuX25leHQsaS5fbmV4dD1udWxsLGk9dD90Ll9uZXh0PW46ZT1uKTtyPXQseShhKX0oKSxzPTB9fWZ1bmN0aW9uIHYoKXt2YXIgdD1jLm5vdygpLGU9dC1vO2U+MWUzJiYobC09ZSxvPXQpfWZ1bmN0aW9uIHkodCl7bnx8KGkmJihpPWNsZWFyVGltZW91dChpKSksdC1zPjI0Pyh0PDEvMCYmKGk9c2V0VGltZW91dChtLHQtYy5ub3coKS1sKSksYSYmKGE9Y2xlYXJJbnRlcnZhbChhKSkpOihhfHwobz1jLm5vdygpLGE9c2V0SW50ZXJ2YWwodiwxZTMpKSxuPTEsdShtKSkpfXAucHJvdG90eXBlPWQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpwLHJlc3RhcnQ6ZnVuY3Rpb24odCxuLGkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7aT0obnVsbD09aT9mKCk6K2kpKyhudWxsPT1uPzA6K24pLHRoaXMuX25leHR8fHI9PT10aGlzfHwocj9yLl9uZXh0PXRoaXM6ZT10aGlzLHI9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9aSx5KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHkoKSl9fSx0LmludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgcCxpPWU7cmV0dXJuIG51bGw9PWU/KG4ucmVzdGFydCh0LGUsciksbik6KGU9K2Uscj1udWxsPT1yP2YoKTorcixuLnJlc3RhcnQoKGZ1bmN0aW9uIGEobyl7bys9aSxuLnJlc3RhcnQoYSxpKz1lLHIpLHQobyl9KSxlLHIpLG4pfSx0Lm5vdz1mLHQudGltZW91dD1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IHA7cmV0dXJuIGU9bnVsbD09ZT8wOitlLG4ucmVzdGFydCgoZnVuY3Rpb24ocil7bi5zdG9wKCksdChyK2UpfSksZSxyKSxufSx0LnRpbWVyPWQsdC50aW1lckZsdXNoPWcsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTY5OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7dmFyIHQ9e3ZlcnNpb246IjMuNS4xNyJ9LHI9W10uc2xpY2Usbj1mdW5jdGlvbih0KXtyZXR1cm4gci5jYWxsKHQpfSxpPXRoaXMuZG9jdW1lbnQ7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCYmKHQub3duZXJEb2N1bWVudHx8dC5kb2N1bWVudHx8dCkuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlldyl9aWYoaSl0cnl7bihpLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzKVswXS5ub2RlVHlwZX1jYXRjaCh0KXtuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKTtlLS07KXJbZV09dFtlXTtyZXR1cm4gcn19aWYoRGF0ZS5ub3d8fChEYXRlLm5vdz1mdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0pLGkpdHJ5e2kuY3JlYXRlRWxlbWVudCgiRElWIikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKHQpe3ZhciBzPXRoaXMuRWxlbWVudC5wcm90b3R5cGUsbD1zLnNldEF0dHJpYnV0ZSxjPXMuc2V0QXR0cmlidXRlTlMsdT10aGlzLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLGY9dS5zZXRQcm9wZXJ0eTtzLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe2wuY2FsbCh0aGlzLHQsZSsiIil9LHMuc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLHIpe2MuY2FsbCh0aGlzLHQsZSxyKyIiKX0sdS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7Zi5jYWxsKHRoaXMsdCxlKyIiLHIpfX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIHAodCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBkKHQpe3JldHVybiFpc05hTih0KX1mdW5jdGlvbiBnKHQpe3JldHVybntsZWZ0OmZ1bmN0aW9uKGUscixuLGkpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihuPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKT4wP2k9YTpuPWErMX1yZXR1cm4gbn19fXQuYXNjZW5kaW5nPWgsdC5kZXNjZW5kaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSx0Lm1pbj1mdW5jdGlvbih0LGUpe3ZhciByLG4saT0tMSxhPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysraTxhOylpZihudWxsIT0obj10W2ldKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPXRbaV0pJiZyPm4mJihyPW4pfWVsc2V7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmcj5uJiYocj1uKX1yZXR1cm4gcn0sdC5tYXg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49dFtpXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj10W2ldKSYmbj5yJiYocj1uKX1lbHNle2Zvcig7KytpPGE7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJm4+ciYmKHI9bil9cmV0dXJuIHJ9LHQuZXh0ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9LTEsbz10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2E8bzspaWYobnVsbCE9KG49dFthXSkmJm4+PW4pe3I9aT1uO2JyZWFrfWZvcig7KythPG87KW51bGwhPShuPXRbYV0pJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKX1lbHNle2Zvcig7KythPG87KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbYV0sYSkpJiZuPj1uKXtyPWk9bjticmVha31mb3IoOysrYTxvOyludWxsIT0obj1lLmNhbGwodCx0W2FdLGEpKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9cmV0dXJuW3IsaV19LHQuc3VtPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGgsYT0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylkKHI9K3RbYV0pJiYobis9cik7ZWxzZSBmb3IoOysrYTxpOylkKHI9K2UuY2FsbCh0LHRbYV0sYSkpJiYobis9cik7cmV0dXJuIG59LHQubWVhbj1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLGE9LTEsbz1pO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KythPGk7KWQocj1wKHRbYV0pKT9uKz1yOi0tbztlbHNlIGZvcig7KythPGk7KWQocj1wKGUuY2FsbCh0LHRbYV0sYSkpKT9uKz1yOi0tbztpZihvKXJldHVybiBuL299LHQucXVhbnRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj0odC5sZW5ndGgtMSkqZSsxLG49TWF0aC5mbG9vcihyKSxpPSt0W24tMV0sYT1yLW47cmV0dXJuIGE/aSthKih0W25dLWkpOml9LHQubWVkaWFuPWZ1bmN0aW9uKGUscil7dmFyIG4saT1bXSxhPWUubGVuZ3RoLG89LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK288YTspZChuPXAoZVtvXSkpJiZpLnB1c2gobik7ZWxzZSBmb3IoOysrbzxhOylkKG49cChyLmNhbGwoZSxlW29dLG8pKSkmJmkucHVzaChuKTtpZihpLmxlbmd0aClyZXR1cm4gdC5xdWFudGlsZShpLnNvcnQoaCksLjUpfSx0LnZhcmlhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9MCxvPTAscz0tMSxsPTA7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK3M8aTspZChyPXAodFtzXSkpJiYobys9KG49ci1hKSooci0oYSs9bi8rK2wpKSk7ZWxzZSBmb3IoOysrczxpOylkKHI9cChlLmNhbGwodCx0W3NdLHMpKSkmJihvKz0obj1yLWEpKihyLShhKz1uLysrbCkpKTtpZihsPjEpcmV0dXJuIG8vKGwtMSl9LHQuZGV2aWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dC52YXJpYW5jZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGU/TWF0aC5zcXJ0KGUpOmV9O3ZhciBtPWcoaCk7ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5sZW5ndGh9dC5iaXNlY3RMZWZ0PW0ubGVmdCx0LmJpc2VjdD10LmJpc2VjdFJpZ2h0PW0ucmlnaHQsdC5iaXNlY3Rvcj1mdW5jdGlvbih0KXtyZXR1cm4gZygxPT09dC5sZW5ndGg/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gaCh0KGUpLHIpfTp0KX0sdC5zaHVmZmxlPWZ1bmN0aW9uKHQsZSxyKXsoYT1hcmd1bWVudHMubGVuZ3RoKTwzJiYocj10Lmxlbmd0aCxhPDImJihlPTApKTtmb3IodmFyIG4saSxhPXItZTthOylpPU1hdGgucmFuZG9tKCkqYS0tfDAsbj10W2ErZV0sdFthK2VdPXRbaStlXSx0W2krZV09bjtyZXR1cm4gdH0sdC5wZXJtdXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSx0LnBhaXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgtMSxuPXRbMF0saT1uZXcgQXJyYXkocjwwPzA6cik7ZTxyOylpW2VdPVtuLG49dFsrK2VdXTtyZXR1cm4gaX0sdC50cmFuc3Bvc2U9ZnVuY3Rpb24oZSl7aWYoIShhPWUubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIHI9LTEsbj10Lm1pbihlLHYpLGk9bmV3IEFycmF5KG4pOysrcjxuOylmb3IodmFyIGEsbz0tMSxzPWlbcl09bmV3IEFycmF5KGEpOysrbzxhOylzW29dPWVbb11bcl07cmV0dXJuIGl9LHQuemlwPWZ1bmN0aW9uKCl7cmV0dXJuIHQudHJhbnNwb3NlKGFyZ3VtZW50cyl9LHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX0sdC5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh7a2V5OnIsdmFsdWU6dFtyXX0pO3JldHVybiBlfSx0Lm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10Lmxlbmd0aCxhPS0xLG89MDsrK2E8aTspbys9dFthXS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pOy0taT49MDspZm9yKGU9KG49dFtpXSkubGVuZ3RoOy0tZT49MDspclstLW9dPW5bZV07cmV0dXJuIHJ9O3ZhciB5PU1hdGguYWJzO2Z1bmN0aW9uIHgodCl7Zm9yKHZhciBlPTE7dCplJTE7KWUqPTEwO3JldHVybiBlfWZ1bmN0aW9uIGIodCxlKXtmb3IodmFyIHIgaW4gZSlPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUscix7dmFsdWU6ZVtyXSxlbnVtZXJhYmxlOiExfSl9ZnVuY3Rpb24gXygpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfXQucmFuZ2U9ZnVuY3Rpb24odCxlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MSxhcmd1bWVudHMubGVuZ3RoPDImJihlPXQsdD0wKSksKGUtdCkvcj09MS8wKXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgcmFuZ2UiKTt2YXIgbixpPVtdLGE9eCh5KHIpKSxvPS0xO2lmKHQqPWEsZSo9YSwocio9YSk8MClmb3IoOyhuPXQrciorK28pPmU7KWkucHVzaChuL2EpO2Vsc2UgZm9yKDsobj10K3IqKytvKTxlOylpLnB1c2gobi9hKTtyZXR1cm4gaX0sdC5tYXA9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgXztpZih0IGluc3RhbmNlb2YgXyl0LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7ci5zZXQodCxlKX0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTxhOylyLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspci5zZXQoZS5jYWxsKHQsbj10W2ldLGkpLG4pfWVsc2UgZm9yKHZhciBvIGluIHQpci5zZXQobyx0W29dKTtyZXR1cm4gcn07ZnVuY3Rpb24gdyh0KXtyZXR1cm4iX19wcm90b19fIj09KHQrPSIiKXx8IlwwIj09PXRbMF0/IlwwIit0OnR9ZnVuY3Rpb24gVCh0KXtyZXR1cm4iXDAiPT09KHQrPSIiKVswXT90LnNsaWNlKDEpOnR9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdyh0KWluIHRoaXMuX31mdW5jdGlvbiBNKHQpe3JldHVybih0PXcodCkpaW4gdGhpcy5fJiZkZWxldGUgdGhpcy5fW3RdfWZ1bmN0aW9uIEEoKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaChUKGUpKTtyZXR1cm4gdH1mdW5jdGlvbiBTKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcy5fKSsrdDtyZXR1cm4gdH1mdW5jdGlvbiBFKCl7Zm9yKHZhciB0IGluIHRoaXMuXylyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBDKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdH1mdW5jdGlvbiBJKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1yLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gbj09PWU/dDpufX1mdW5jdGlvbiBQKHQsZSl7aWYoZSBpbiB0KXJldHVybiBlO2U9ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO2Zvcih2YXIgcj0wLG49ei5sZW5ndGg7cjxuOysrcil7dmFyIGk9eltyXStlO2lmKGkgaW4gdClyZXR1cm4gaX19YihfLHtoYXM6ayxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX1t3KHQpXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX1t3KHQpXT1lfSxyZW1vdmU6TSxrZXlzOkEsdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2godGhpcy5fW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHtrZXk6VChlKSx2YWx1ZTp0aGlzLl9bZV19KTtyZXR1cm4gdH0sc2l6ZTpTLGVtcHR5OkUsZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fKXQuY2FsbCh0aGlzLFQoZSksdGhpcy5fW2VdKX19KSx0Lm5lc3Q9ZnVuY3Rpb24oKXt2YXIgZSxyLG49e30saT1bXSxhPVtdO2Z1bmN0aW9uIG8odCxhLHMpe2lmKHM+PWkubGVuZ3RoKXJldHVybiByP3IuY2FsbChuLGEpOmU/YS5zb3J0KGUpOmE7Zm9yKHZhciBsLGMsdSxmLGg9LTEscD1hLmxlbmd0aCxkPWlbcysrXSxnPW5ldyBfOysraDxwOykoZj1nLmdldChsPWQoYz1hW2hdKSkpP2YucHVzaChjKTpnLnNldChsLFtjXSk7cmV0dXJuIHQ/KGM9dCgpLHU9ZnVuY3Rpb24oZSxyKXtjLnNldChlLG8odCxyLHMpKX0pOihjPXt9LHU9ZnVuY3Rpb24oZSxyKXtjW2VdPW8odCxyLHMpfSksZy5mb3JFYWNoKHUpLGN9cmV0dXJuIG4ubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8oZSx0LDApfSxuLmVudHJpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXtpZihyPj1pLmxlbmd0aClyZXR1cm4gZTt2YXIgbj1bXSxvPWFbcisrXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLGkpe24ucHVzaCh7a2V5OmUsdmFsdWVzOnQoaSxyKX0pfSkpLG8/bi5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBvKHQua2V5LGUua2V5KX0pKTpufShvKHQubWFwLGUsMCksMCl9LG4ua2V5PWZ1bmN0aW9uKHQpe3JldHVybiBpLnB1c2godCksbn0sbi5zb3J0S2V5cz1mdW5jdGlvbih0KXtyZXR1cm4gYVtpLmxlbmd0aC0xXT10LG59LG4uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gZT10LG59LG4ucm9sbHVwPWZ1bmN0aW9uKHQpe3JldHVybiByPXQsbn0sbn0sdC5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEM7aWYodClmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZS5hZGQodFtyXSk7cmV0dXJuIGV9LGIoQyx7aGFzOmssYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bdyh0Kz0iIildPSEwLHR9LHJlbW92ZTpNLHZhbHVlczpBLHNpemU6UyxlbXB0eTpFLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxUKGUpKX19KSx0LmJlaGF2aW9yPXt9LHQucmViaW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49MSxpPWFyZ3VtZW50cy5sZW5ndGg7KytuPGk7KXRbcj1hcmd1bWVudHNbbl1dPUkodCxlLGVbcl0pO3JldHVybiB0fTt2YXIgej1bIndlYmtpdCIsIm1zIiwibW96IiwiTW96IiwibyIsIk8iXTtmdW5jdGlvbiBPKCl7fWZ1bmN0aW9uIEQoKXt9ZnVuY3Rpb24gUih0KXt2YXIgZT1bXSxyPW5ldyBfO2Z1bmN0aW9uIG4oKXtmb3IodmFyIHIsbj1lLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspKHI9bltpXS5vbikmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0fXJldHVybiBuLm9uPWZ1bmN0aW9uKG4saSl7dmFyIGEsbz1yLmdldChuKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP28mJm8ub246KG8mJihvLm9uPW51bGwsZT1lLnNsaWNlKDAsYT1lLmluZGV4T2YobykpLmNvbmNhdChlLnNsaWNlKGErMSkpLHIucmVtb3ZlKG4pKSxpJiZlLnB1c2goci5zZXQobix7b246aX0pKSx0KX0sbn1mdW5jdGlvbiBGKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIEIoKXtmb3IodmFyIGUscj10LmV2ZW50O2U9ci5zb3VyY2VFdmVudDspcj1lO3JldHVybiByfWZ1bmN0aW9uIE4oZSl7Zm9yKHZhciByPW5ldyBELG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7KytuPGk7KXJbYXJndW1lbnRzW25dXT1SKHIpO3JldHVybiByLm9mPWZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RyeXt2YXIgbz1hLnNvdXJjZUV2ZW50PXQuZXZlbnQ7YS50YXJnZXQ9ZSx0LmV2ZW50PWEsclthLnR5cGVdLmFwcGx5KG4saSl9ZmluYWxseXt0LmV2ZW50PW99fX0scn10LmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBELGU9LTEscj1hcmd1bWVudHMubGVuZ3RoOysrZTxyOyl0W2FyZ3VtZW50c1tlXV09Uih0KTtyZXR1cm4gdH0sRC5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXt2YXIgcj10LmluZGV4T2YoIi4iKSxuPSIiO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdClyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbdF0ub24obik6dGhpc1t0XS5vbihuLGUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT1lKWZvcih0IGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpc1t0XS5vbihuLG51bGwpO3JldHVybiB0aGlzfX0sdC5ldmVudD1udWxsLHQucmVxdW90ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKGosIlxcJCYiKX07dmFyIGo9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLFU9e30uX19wcm90b19fP2Z1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX06ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19O2Z1bmN0aW9uIFYodCl7cmV0dXJuIFUodCxZKSx0fXZhciBxPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucXVlcnlTZWxlY3Rvcih0KX0sSD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3JBbGwodCl9LEc9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hdGNoZXN8fHRbUCh0LCJtYXRjaGVzU2VsZWN0b3IiKV07cmV0dXJuKEc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5jYWxsKHQsZSl9KSh0LGUpfTsiZnVuY3Rpb24iPT10eXBlb2YgU2l6emxlJiYocT1mdW5jdGlvbih0LGUpe3JldHVybiBTaXp6bGUodCxlKVswXXx8bnVsbH0sSD1TaXp6bGUsRz1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yKSx0LnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LnNlbGVjdChpLmRvY3VtZW50RWxlbWVudCl9O3ZhciBZPXQuc2VsZWN0aW9uLnByb3RvdHlwZT1bXTtmdW5jdGlvbiBXKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gcSh0LHRoaXMpfX1mdW5jdGlvbiBYKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gSCh0LHRoaXMpfX1ZLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPVtdO3Q9Vyh0KTtmb3IodmFyIG89LTEscz10aGlzLmxlbmd0aDsrK288czspe2EucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KG49dGhpc1tvXSkucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEsYz1uLmxlbmd0aDsrK2w8YzspKGk9bltsXSk/KGUucHVzaChyPXQuY2FsbChpLGkuX19kYXRhX18sbCxvKSksciYmIl9fZGF0YV9fImluIGkmJihyLl9fZGF0YV9fPWkuX19kYXRhX18pKTplLnB1c2gobnVsbCl9cmV0dXJuIFYoYSl9LFkuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaT1bXTt0PVgodCk7Zm9yKHZhciBhPS0xLG89dGhpcy5sZW5ndGg7KythPG87KWZvcih2YXIgcz10aGlzW2FdLGw9LTEsYz1zLmxlbmd0aDsrK2w8YzspKHI9c1tsXSkmJihpLnB1c2goZT1uKHQuY2FsbChyLHIuX19kYXRhX18sbCxhKSkpLGUucGFyZW50Tm9kZT1yKTtyZXR1cm4gVihpKX07dmFyIFo9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOloseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBLKGUscil7cmV0dXJuIGU9dC5ucy5xdWFsaWZ5KGUpLG51bGw9PXI/ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX06ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX06ImZ1bmN0aW9uIj09dHlwZW9mIHI/ZS5sb2NhbD9mdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfTpmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX06ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfTpmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFEodCl7cmV0dXJuIHQudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIil9ZnVuY3Rpb24gJChlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIrdC5yZXF1b3RlKGUpKyIoPzpcXHMrfCQpIiwiZyIpfWZ1bmN0aW9uIHR0KHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gZXQodCxlKXt2YXIgcj0odD10dCh0KS5tYXAocnQpKS5sZW5ndGg7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXtmb3IodmFyIG49LTEsaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsrK248cjspdFtuXSh0aGlzLGkpfTpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248cjspdFtuXSh0aGlzLGUpfX1mdW5jdGlvbiBydCh0KXt2YXIgZT0kKHQpO3JldHVybiBmdW5jdGlvbihyLG4pe2lmKGk9ci5jbGFzc0xpc3QpcmV0dXJuIG4/aS5hZGQodCk6aS5yZW1vdmUodCk7dmFyIGk9ci5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiO24/KGUubGFzdEluZGV4PTAsZS50ZXN0KGkpfHxyLnNldEF0dHJpYnV0ZSgiY2xhc3MiLFEoaSsiICIrdCkpKTpyLnNldEF0dHJpYnV0ZSgiY2xhc3MiLFEoaS5yZXBsYWNlKGUsIiAiKSkpfX1mdW5jdGlvbiBudCh0LGUscil7cmV0dXJuIG51bGw9PWU/ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfToiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbixyKX06ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxyKX19ZnVuY3Rpb24gaXQodCxlKXtyZXR1cm4gbnVsbD09ZT9mdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfToiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1yfTpmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gYXQoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTooZT10Lm5zLnF1YWxpZnkoZSkpLmxvY2FsP2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX06ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PVomJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVo/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIG90KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gc3QodCl7cmV0dXJue19fZGF0YV9fOnR9fWZ1bmN0aW9uIGx0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBHKHRoaXMsdCl9fWZ1bmN0aW9uIGN0KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwodD1oKSxmdW5jdGlvbihlLHIpe3JldHVybiBlJiZyP3QoZS5fX2RhdGFfXyxyLl9fZGF0YV9fKTohZS0hcn19ZnVuY3Rpb24gdXQodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBpLGE9dFtyXSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKShpPWFbb10pJiZlKGksbyxyKTtyZXR1cm4gdH1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gVSh0LGh0KSx0fXQubnM9e3ByZWZpeDpKLHF1YWxpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCI6Iikscj10O3JldHVybiBlPj0wJiYieG1sbnMiIT09KHI9dC5zbGljZSgwLGUpKSYmKHQ9dC5zbGljZShlKzEpKSxKLmhhc093blByb3BlcnR5KHIpP3tzcGFjZTpKW3JdLGxvY2FsOnR9OnR9fSxZLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIG49dGhpcy5ub2RlKCk7cmV0dXJuKGU9dC5ucy5xdWFsaWZ5KGUpKS5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUoZSl9Zm9yKHIgaW4gZSl0aGlzLmVhY2goSyhyLGVbcl0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKEsoZSxyKSl9LFkuY2xhc3NlZD1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgcj10aGlzLm5vZGUoKSxuPSh0PXR0KHQpKS5sZW5ndGgsaT0tMTtpZihlPXIuY2xhc3NMaXN0KXtmb3IoOysraTxuOylpZighZS5jb250YWlucyh0W2ldKSlyZXR1cm4hMX1lbHNlIGZvcihlPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysraTxuOylpZighJCh0W2ldKS50ZXN0KGUpKXJldHVybiExO3JldHVybiEwfWZvcihlIGluIHQpdGhpcy5lYWNoKGV0KGUsdFtlXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goZXQodCxlKSl9LFkuc3R5bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe2ZvcihyIGluIG48MiYmKGU9IiIpLHQpdGhpcy5lYWNoKG50KHIsdFtyXSxlKSk7cmV0dXJuIHRoaXN9aWYobjwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gbyhpKS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1yPSIifXJldHVybiB0aGlzLmVhY2gobnQodCxlLHIpKX0sWS5wcm9wZXJ0eT1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0aGlzLm5vZGUoKVt0XTtmb3IoZSBpbiB0KXRoaXMuZWFjaChpdChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKGl0KHQsZSkpfSxZLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9Om51bGw9PXQ/ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxZLmh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9IiJ9OmZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH0pOnRoaXMubm9kZSgpLmlubmVySFRNTH0sWS5hcHBlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9YXQodCksdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxZLmluc2VydD1mdW5jdGlvbih0LGUpe3JldHVybiB0PWF0KHQpLGU9VyhlKSx0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUodC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxZLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2gob3QpfSxZLmRhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10aGlzLmxlbmd0aDtpZighYXJndW1lbnRzLmxlbmd0aCl7Zm9yKHQ9bmV3IEFycmF5KGE9KHI9dGhpc1swXSkubGVuZ3RoKTsrK2k8YTspKG49cltpXSkmJih0W2ldPW4uX19kYXRhX18pO3JldHVybiB0fWZ1bmN0aW9uIG8odCxyKXt2YXIgbixpLGEsbz10Lmxlbmd0aCx1PXIubGVuZ3RoLGY9TWF0aC5taW4obyx1KSxoPW5ldyBBcnJheSh1KSxwPW5ldyBBcnJheSh1KSxkPW5ldyBBcnJheShvKTtpZihlKXt2YXIgZyxtPW5ldyBfLHY9bmV3IEFycmF5KG8pO2ZvcihuPS0xOysrbjxvOykoaT10W25dKSYmKG0uaGFzKGc9ZS5jYWxsKGksaS5fX2RhdGFfXyxuKSk/ZFtuXT1pOm0uc2V0KGcsaSksdltuXT1nKTtmb3Iobj0tMTsrK248dTspKGk9bS5nZXQoZz1lLmNhbGwocixhPXJbbl0sbikpKT8hMCE9PWkmJihoW25dPWksaS5fX2RhdGFfXz1hKTpwW25dPXN0KGEpLG0uc2V0KGcsITApO2ZvcihuPS0xOysrbjxvOyluIGluIHYmJiEwIT09bS5nZXQodltuXSkmJihkW25dPXRbbl0pfWVsc2V7Zm9yKG49LTE7KytuPGY7KWk9dFtuXSxhPXJbbl0saT8oaS5fX2RhdGFfXz1hLGhbbl09aSk6cFtuXT1zdChhKTtmb3IoO248dTsrK24pcFtuXT1zdChyW25dKTtmb3IoO248bzsrK24pZFtuXT10W25dfXAudXBkYXRlPWgscC5wYXJlbnROb2RlPWgucGFyZW50Tm9kZT1kLnBhcmVudE5vZGU9dC5wYXJlbnROb2RlLHMucHVzaChwKSxsLnB1c2goaCksYy5wdXNoKGQpfXZhciBzPWZ0KFtdKSxsPVYoW10pLGM9VihbXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKDsrK2k8YTspbyhyPXRoaXNbaV0sdC5jYWxsKHIsci5wYXJlbnROb2RlLl9fZGF0YV9fLGkpKTtlbHNlIGZvcig7KytpPGE7KW8ocj10aGlzW2ldLHQpO3JldHVybiBsLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LGwuZXhpdD1mdW5jdGlvbigpe3JldHVybiBjfSxsfSxZLmRhdHVtPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIpfSxZLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bHQodCkpO2Zvcih2YXIgYT0wLG89dGhpcy5sZW5ndGg7YTxvO2ErKyl7aS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0ocj10aGlzW2FdKS5wYXJlbnROb2RlO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGEpJiZlLnB1c2gobil9cmV0dXJuIFYoaSl9LFkub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciByLG49dGhpc1t0XSxpPW4ubGVuZ3RoLTEsYT1uW2ldOy0taT49MDspKHI9bltpXSkmJihhJiZhIT09ci5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGEpLGE9cik7cmV0dXJuIHRoaXN9LFkuc29ydD1mdW5jdGlvbih0KXt0PWN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIGU9LTEscj10aGlzLmxlbmd0aDsrK2U8cjspdGhpc1tlXS5zb3J0KHQpO3JldHVybiB0aGlzLm9yZGVyKCl9LFkuZWFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdXQodGhpcywoZnVuY3Rpb24oZSxyLG4pe3QuY2FsbChlLGUuX19kYXRhX18scixuKX0pKX0sWS5jYWxsPWZ1bmN0aW9uKHQpe3ZhciBlPW4oYXJndW1lbnRzKTtyZXR1cm4gdC5hcHBseShlWzBdPXRoaXMsZSksdGhpc30sWS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sWS5ub2RlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLmxlbmd0aDt0PGU7dCsrKWZvcih2YXIgcj10aGlzW3RdLG49MCxpPXIubGVuZ3RoO248aTtuKyspe3ZhciBhPXJbbl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sWS5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdXQodGhpcywoZnVuY3Rpb24oKXsrK3R9KSksdH07dmFyIGh0PVtdO2Z1bmN0aW9uIHB0KHQpe3ZhciBlLHI7cmV0dXJuIGZ1bmN0aW9uKG4saSxhKXt2YXIgbyxzPXRbYV0udXBkYXRlLGw9cy5sZW5ndGg7Zm9yKGEhPXImJihyPWEsZT0wKSxpPj1lJiYoZT1pKzEpOyEobz1zW2VdKSYmKytlPGw7KTtyZXR1cm4gb319ZnVuY3Rpb24gZHQoZSxyLGkpe3ZhciBhPSJfX29uIitlLG89ZS5pbmRleE9mKCIuIikscz1tdDtvPjAmJihlPWUuc2xpY2UoMCxvKSk7dmFyIGw9Z3QuZ2V0KGUpO2Z1bmN0aW9uIGMoKXt2YXIgdD10aGlzW2FdO3QmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0LHQuJCksZGVsZXRlIHRoaXNbYV0pfXJldHVybiBsJiYoZT1sLHM9dnQpLG8/cj9mdW5jdGlvbigpe3ZhciB0PXMocixuKGFyZ3VtZW50cykpO2MuY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzW2FdPXQsdC4kPWkpLHQuXz1yfTpjOnI/TzpmdW5jdGlvbigpe3ZhciByLG49bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIit0LnJlcXVvdGUoZSkrIiQiKTtmb3IodmFyIGkgaW4gdGhpcylpZihyPWkubWF0Y2gobikpe3ZhciBhPXRoaXNbaV07dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHJbMV0sYSxhLiQpLGRlbGV0ZSB0aGlzW2ldfX19dC5zZWxlY3Rpb24uZW50ZXI9ZnQsdC5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPWh0LGh0LmFwcGVuZD1ZLmFwcGVuZCxodC5lbXB0eT1ZLmVtcHR5LGh0Lm5vZGU9WS5ub2RlLGh0LmNhbGw9WS5jYWxsLGh0LnNpemU9WS5zaXplLGh0LnNlbGVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPVtdLHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe249KGk9dGhpc1tzXSkudXBkYXRlLG8ucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9aS5wYXJlbnROb2RlO2Zvcih2YXIgYz0tMSx1PWkubGVuZ3RoOysrYzx1OykoYT1pW2NdKT8oZS5wdXNoKG5bY109cj10LmNhbGwoaS5wYXJlbnROb2RlLGEuX19kYXRhX18sYyxzKSksci5fX2RhdGFfXz1hLl9fZGF0YV9fKTplLnB1c2gobnVsbCl9cmV0dXJuIFYobyl9LGh0Lmluc2VydD1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJihlPXB0KHRoaXMpKSxZLmluc2VydC5jYWxsKHRoaXMsdCxlKX0sdC5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0PyhlPVtxKHQsaSldKS5wYXJlbnROb2RlPWkuZG9jdW1lbnRFbGVtZW50OihlPVt0XSkucGFyZW50Tm9kZT1hKHQpLFYoW2VdKX0sdC5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0PyhlPW4oSCh0LGkpKSkucGFyZW50Tm9kZT1pLmRvY3VtZW50RWxlbWVudDooZT1uKHQpKS5wYXJlbnROb2RlPW51bGwsVihbZV0pfSxZLm9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSExKSx0KXRoaXMuZWFjaChkdChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48MilyZXR1cm4obj10aGlzLm5vZGUoKVsiX19vbiIrdF0pJiZuLl87cj0hMX1yZXR1cm4gdGhpcy5lYWNoKGR0KHQsZSxyKSl9O3ZhciBndD10Lm1hcCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KTtmdW5jdGlvbiBtdChlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT10LmV2ZW50O3QuZXZlbnQ9bixyWzBdPXRoaXMuX19kYXRhX187dHJ5e2UuYXBwbHkodGhpcyxyKX1maW5hbGx5e3QuZXZlbnQ9aX19fWZ1bmN0aW9uIHZ0KHQsZSl7dmFyIHI9bXQodCxlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5yZWxhdGVkVGFyZ2V0O2UmJihlPT09dGhpc3x8OCZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8ci5jYWxsKHRoaXMsdCl9fWkmJmd0LmZvckVhY2goKGZ1bmN0aW9uKHQpeyJvbiIrdCBpbiBpJiZndC5yZW1vdmUodCl9KSk7dmFyIHl0LHh0PTA7ZnVuY3Rpb24gYnQoZSl7dmFyIHI9Ii5kcmFnc3VwcHJlc3MtIisgKyt4dCxuPSJjbGljayIrcixpPXQuc2VsZWN0KG8oZSkpLm9uKCJ0b3VjaG1vdmUiK3IsRikub24oImRyYWdzdGFydCIrcixGKS5vbigic2VsZWN0c3RhcnQiK3IsRik7aWYobnVsbD09eXQmJih5dD0hKCJvbnNlbGVjdHN0YXJ0ImluIGUpJiZQKGUuc3R5bGUsInVzZXJTZWxlY3QiKSkseXQpe3ZhciBzPWEoZSkuc3R5bGUsbD1zW3l0XTtzW3l0XT0ibm9uZSJ9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKGkub24ocixudWxsKSx5dCYmKHNbeXRdPWwpLHQpe3ZhciBlPWZ1bmN0aW9uKCl7aS5vbihuLG51bGwpfTtpLm9uKG4sKGZ1bmN0aW9uKCl7RigpLGUoKX0pLCEwKSxzZXRUaW1lb3V0KGUsMCl9fX10Lm1vdXNlPWZ1bmN0aW9uKHQpe3JldHVybiB3dCh0LEIoKSl9O3ZhciBfdD10aGlzLm5hdmlnYXRvciYmL1dlYktpdC8udGVzdCh0aGlzLm5hdmlnYXRvci51c2VyQWdlbnQpPy0xOjA7ZnVuY3Rpb24gd3QoZSxyKXtyLmNoYW5nZWRUb3VjaGVzJiYocj1yLmNoYW5nZWRUb3VjaGVzWzBdKTt2YXIgbj1lLm93bmVyU1ZHRWxlbWVudHx8ZTtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgaT1uLmNyZWF0ZVNWR1BvaW50KCk7aWYoX3Q8MCl7dmFyIGE9byhlKTtpZihhLnNjcm9sbFh8fGEuc2Nyb2xsWSl7dmFyIHM9KG49dC5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpKVswXVswXS5nZXRTY3JlZW5DVE0oKTtfdD0hKHMuZnx8cy5lKSxuLnJlbW92ZSgpfX1yZXR1cm4gX3Q/KGkueD1yLnBhZ2VYLGkueT1yLnBhZ2VZKTooaS54PXIuY2xpZW50WCxpLnk9ci5jbGllbnRZKSxbKGk9aS5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGkueV19dmFyIGw9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bci5jbGllbnRYLWwubGVmdC1lLmNsaWVudExlZnQsci5jbGllbnRZLWwudG9wLWUuY2xpZW50VG9wXX1mdW5jdGlvbiBUdCgpe3JldHVybiB0LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9dC50b3VjaD1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj1lLGU9QigpLmNoYW5nZWRUb3VjaGVzKSxlKWZvcih2YXIgbixpPTAsYT1lLmxlbmd0aDtpPGE7KytpKWlmKChuPWVbaV0pLmlkZW50aWZpZXI9PT1yKXJldHVybiB3dCh0LG4pfSx0LmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXt2YXIgZT1OKGEsImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIikscj1udWxsLG49cyhPLHQubW91c2UsbywibW91c2Vtb3ZlIiwibW91c2V1cCIpLGk9cyhUdCx0LnRvdWNoLEwsInRvdWNobW92ZSIsInRvdWNoZW5kIik7ZnVuY3Rpb24gYSgpe3RoaXMub24oIm1vdXNlZG93bi5kcmFnIixuKS5vbigidG91Y2hzdGFydC5kcmFnIixpKX1mdW5jdGlvbiBzKG4saSxhLG8scyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGwsYz10aGlzLHU9dC5ldmVudC50YXJnZXQuY29ycmVzcG9uZGluZ0VsZW1lbnR8fHQuZXZlbnQudGFyZ2V0LGY9Yy5wYXJlbnROb2RlLGg9ZS5vZihjLGFyZ3VtZW50cykscD0wLGQ9bigpLGc9Ii5kcmFnIisobnVsbD09ZD8iIjoiLSIrZCksbT10LnNlbGVjdChhKHUpKS5vbihvK2cseCkub24ocytnLGIpLHY9YnQodSkseT1pKGYsZCk7ZnVuY3Rpb24geCgpe3ZhciB0LGUscj1pKGYsZCk7ciYmKHQ9clswXS15WzBdLGU9clsxXS15WzFdLHB8PXR8ZSx5PXIsaCh7dHlwZToiZHJhZyIseDpyWzBdK2xbMF0seTpyWzFdK2xbMV0sZHg6dCxkeTplfSkpfWZ1bmN0aW9uIGIoKXtpKGYsZCkmJihtLm9uKG8rZyxudWxsKS5vbihzK2csbnVsbCksdihwKSxoKHt0eXBlOiJkcmFnZW5kIn0pKX1sPXI/WyhsPXIuYXBwbHkoYyxhcmd1bWVudHMpKS54LXlbMF0sbC55LXlbMV1dOlswLDBdLGgoe3R5cGU6ImRyYWdzdGFydCJ9KX19cmV0dXJuIGEub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sdC5yZWJpbmQoYSxlLCJvbiIpfSx0LnRvdWNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1CKCkudG91Y2hlcyksZT9uKGUpLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9d3QodCxlKTtyZXR1cm4gci5pZGVudGlmaWVyPWUuaWRlbnRpZmllcixyfSkpOltdfTt2YXIga3Q9MWUtNixNdD0xZS0xMixBdD1NYXRoLlBJLFN0PTIqQXQsRXQ9U3Qta3QsQ3Q9QXQvMixMdD1BdC8xODAsSXQ9MTgwL0F0O2Z1bmN0aW9uIFB0KHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiB6dCh0LGUscil7cmV0dXJuKGVbMF0tdFswXSkqKHJbMV0tdFsxXSktKGVbMV0tdFsxXSkqKHJbMF0tdFswXSl9ZnVuY3Rpb24gT3QodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/QXQ6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIER0KHQpe3JldHVybiB0PjE/Q3Q6dDwtMT8tQ3Q6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIFJ0KHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIEZ0KHQpe3JldHVybih0PU1hdGguc2luKHQvMikpKnR9dmFyIEJ0PU1hdGguU1FSVDI7dC5pbnRlcnBvbGF0ZVpvb209ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPXRbMV0sbz10WzJdLHM9ZVswXSxsPWVbMV0sYz1lWzJdLHU9cy1pLGY9bC1hLGg9dSp1K2YqZjtpZihoPE10KW49TWF0aC5sb2coYy9vKS9CdCxyPWZ1bmN0aW9uKHQpe3JldHVybltpK3QqdSxhK3QqZixvKk1hdGguZXhwKEJ0KnQqbildfTtlbHNle3ZhciBwPU1hdGguc3FydChoKSxkPShjKmMtbypvKzQqaCkvKDIqbyoyKnApLGc9KGMqYy1vKm8tNCpoKS8oMipjKjIqcCksbT1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHY9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtuPSh2LW0pL0J0LHI9ZnVuY3Rpb24odCl7dmFyIGUscj10Km4scz1SdChtKSxsPW8vKDIqcCkqKHMqKGU9QnQqcittLCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KG0pKTtyZXR1cm5baStsKnUsYStsKmYsbypzL1J0KEJ0KnIrbSldfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqbixyfSx0LmJlaGF2aW9yLnpvb209ZnVuY3Rpb24oKXt2YXIgZSxyLG4sYSxzLGwsYyx1LGYsaD17eDowLHk6MCxrOjF9LHA9Wzk2MCw1MDBdLGQ9VXQsZz0yNTAsbT0wLHY9Im1vdXNlZG93bi56b29tIix5PSJtb3VzZW1vdmUuem9vbSIseD0ibW91c2V1cC56b29tIixiPSJ0b3VjaHN0YXJ0Lnpvb20iLF89Tih3LCJ6b29tc3RhcnQiLCJ6b29tIiwiem9vbWVuZCIpO2Z1bmN0aW9uIHcodCl7dC5vbih2LEkpLm9uKGp0KyIuem9vbSIseikub24oImRibGNsaWNrLnpvb20iLE8pLm9uKGIsUCl9ZnVuY3Rpb24gVCh0KXtyZXR1cm5bKHRbMF0taC54KS9oLmssKHRbMV0taC55KS9oLmtdfWZ1bmN0aW9uIGsodCl7aC5rPU1hdGgubWF4KGRbMF0sTWF0aC5taW4oZFsxXSx0KSl9ZnVuY3Rpb24gTSh0LGUpe2U9ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qaC5rK2gueCx0WzFdKmguaytoLnldfShlKSxoLngrPXRbMF0tZVswXSxoLnkrPXRbMV0tZVsxXX1mdW5jdGlvbiBBKGUsbixpLGEpe2UuX19jaGFydF9fPXt4OmgueCx5OmgueSxrOmgua30sayhNYXRoLnBvdygyLGEpKSxNKHI9bixpKSxlPXQuc2VsZWN0KGUpLGc+MCYmKGU9ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZykpLGUuY2FsbCh3LmV2ZW50KX1mdW5jdGlvbiBTKCl7YyYmYy5kb21haW4obC5yYW5nZSgpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQtaC54KS9oLmt9KSkubWFwKGwuaW52ZXJ0KSksZiYmZi5kb21haW4odS5yYW5nZSgpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQtaC55KS9oLmt9KSkubWFwKHUuaW52ZXJ0KSl9ZnVuY3Rpb24gRSh0KXttKyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBDKHQpe1MoKSx0KHt0eXBlOiJ6b29tIixzY2FsZTpoLmssdHJhbnNsYXRlOltoLngsaC55XX0pfWZ1bmN0aW9uIEwodCl7LS1tfHwodCh7dHlwZToiem9vbWVuZCJ9KSxyPW51bGwpfWZ1bmN0aW9uIEkoKXt2YXIgZT10aGlzLHI9Xy5vZihlLGFyZ3VtZW50cyksbj0wLGk9dC5zZWxlY3QobyhlKSkub24oeSxsKS5vbih4LGMpLGE9VCh0Lm1vdXNlKGUpKSxzPWJ0KGUpO2Z1bmN0aW9uIGwoKXtuPTEsTSh0Lm1vdXNlKGUpLGEpLEMocil9ZnVuY3Rpb24gYygpe2kub24oeSxudWxsKS5vbih4LG51bGwpLHMobiksTChyKX12cy5jYWxsKGUpLEUocil9ZnVuY3Rpb24gUCgpe3ZhciBlLHI9dGhpcyxuPV8ub2Yocixhcmd1bWVudHMpLGk9e30sYT0wLG89Ii56b29tLSIrdC5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyLGw9InRvdWNobW92ZSIrbyxjPSJ0b3VjaGVuZCIrbyx1PVtdLGY9dC5zZWxlY3QocikscD1idChyKTtmdW5jdGlvbiBkKCl7dmFyIG49dC50b3VjaGVzKHIpO3JldHVybiBlPWguayxuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuaWRlbnRpZmllciBpbiBpJiYoaVt0LmlkZW50aWZpZXJdPVQodCkpfSkpLG59ZnVuY3Rpb24gZygpe3ZhciBlPXQuZXZlbnQudGFyZ2V0O3Quc2VsZWN0KGUpLm9uKGwsbSkub24oYyx5KSx1LnB1c2goZSk7Zm9yKHZhciBuPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz0wLGY9bi5sZW5ndGg7bzxmOysrbylpW25bb10uaWRlbnRpZmllcl09bnVsbDt2YXIgcD1kKCksZz1EYXRlLm5vdygpO2lmKDE9PT1wLmxlbmd0aCl7aWYoZy1zPDUwMCl7dmFyIHY9cFswXTtBKHIsdixpW3YuaWRlbnRpZmllcl0sTWF0aC5mbG9vcihNYXRoLmxvZyhoLmspL01hdGguTE4yKSsxKSxGKCl9cz1nfWVsc2UgaWYocC5sZW5ndGg+MSl7dj1wWzBdO3ZhciB4PXBbMV0sYj12WzBdLXhbMF0sXz12WzFdLXhbMV07YT1iKmIrXypffX1mdW5jdGlvbiBtKCl7dmFyIG8sbCxjLHUsZj10LnRvdWNoZXMocik7dnMuY2FsbChyKTtmb3IodmFyIGg9MCxwPWYubGVuZ3RoO2g8cDsrK2gsdT1udWxsKWlmKGM9ZltoXSx1PWlbYy5pZGVudGlmaWVyXSl7aWYobClicmVhaztvPWMsbD11fWlmKHUpe3ZhciBkPShkPWNbMF0tb1swXSkqZCsoZD1jWzFdLW9bMV0pKmQsZz1hJiZNYXRoLnNxcnQoZC9hKTtvPVsob1swXStjWzBdKS8yLChvWzFdK2NbMV0pLzJdLGw9WyhsWzBdK3VbMF0pLzIsKGxbMV0rdVsxXSkvMl0sayhnKmUpfXM9bnVsbCxNKG8sbCksQyhuKX1mdW5jdGlvbiB5KCl7aWYodC5ldmVudC50b3VjaGVzLmxlbmd0aCl7Zm9yKHZhciBlPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMscj0wLGE9ZS5sZW5ndGg7cjxhOysrcilkZWxldGUgaVtlW3JdLmlkZW50aWZpZXJdO2Zvcih2YXIgcyBpbiBpKXJldHVybiB2b2lkIGQoKX10LnNlbGVjdEFsbCh1KS5vbihvLG51bGwpLGYub24odixJKS5vbihiLFApLHAoKSxMKG4pfWcoKSxFKG4pLGYub24odixudWxsKS5vbihiLGcpfWZ1bmN0aW9uIHooKXt2YXIgaT1fLm9mKHRoaXMsYXJndW1lbnRzKTthP2NsZWFyVGltZW91dChhKToodnMuY2FsbCh0aGlzKSxlPVQocj1ufHx0Lm1vdXNlKHRoaXMpKSxFKGkpKSxhPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7YT1udWxsLEwoaSl9KSw1MCksRigpLGsoTWF0aC5wb3coMiwuMDAyKk50KCkpKmguayksTShyLGUpLEMoaSl9ZnVuY3Rpb24gTygpe3ZhciBlPXQubW91c2UodGhpcykscj1NYXRoLmxvZyhoLmspL01hdGguTE4yO0EodGhpcyxlLFQoZSksdC5ldmVudC5zaGlmdEtleT9NYXRoLmNlaWwociktMTpNYXRoLmZsb29yKHIpKzEpfXJldHVybiBqdHx8KGp0PSJvbndoZWVsImluIGk/KE50PWZ1bmN0aW9uKCl7cmV0dXJuLXQuZXZlbnQuZGVsdGFZKih0LmV2ZW50LmRlbHRhTW9kZT8xMjA6MSl9LCJ3aGVlbCIpOiJvbm1vdXNld2hlZWwiaW4gaT8oTnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5ldmVudC53aGVlbERlbHRhfSwibW91c2V3aGVlbCIpOihOdD1mdW5jdGlvbigpe3JldHVybi10LmV2ZW50LmRldGFpbH0sIk1vek1vdXNlUGl4ZWxTY3JvbGwiKSksdy5ldmVudD1mdW5jdGlvbihlKXtlLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9Xy5vZih0aGlzLGFyZ3VtZW50cyksbj1oO2JzP3Quc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC56b29tIiwoZnVuY3Rpb24oKXtoPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LEUoZSl9KSkudHdlZW4oInpvb206em9vbSIsKGZ1bmN0aW9uKCl7dmFyIGk9cFswXSxhPXBbMV0sbz1yP3JbMF06aS8yLHM9cj9yWzFdOmEvMixsPXQuaW50ZXJwb2xhdGVab29tKFsoby1oLngpL2guaywocy1oLnkpL2guayxpL2gua10sWyhvLW4ueCkvbi5rLChzLW4ueSkvbi5rLGkvbi5rXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWwodCksbj1pL3JbMl07dGhpcy5fX2NoYXJ0X189aD17eDpvLXJbMF0qbix5OnMtclsxXSpuLGs6bn0sQyhlKX19KSkuZWFjaCgiaW50ZXJydXB0Lnpvb20iLChmdW5jdGlvbigpe0woZSl9KSkuZWFjaCgiZW5kLnpvb20iLChmdW5jdGlvbigpe0woZSl9KSk6KHRoaXMuX19jaGFydF9fPWgsRShlKSxDKGUpLEwoZSkpfSkpfSx3LnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD17eDordFswXSx5Oit0WzFdLGs6aC5rfSxTKCksdyk6W2gueCxoLnldfSx3LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXt4OmgueCx5OmgueSxrOm51bGx9LGsoK3QpLFMoKSx3KTpoLmt9LHcuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bnVsbD09dD9VdDpbK3RbMF0sK3RbMV1dLHcpOmR9LHcuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQmJlsrdFswXSwrdFsxXV0sdyk6bn0sdy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXQmJlsrdFswXSwrdFsxXV0sdyk6cH0sdy5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rdCx3KTpnfSx3Lng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxsPXQuY29weSgpLGg9e3g6MCx5OjAsazoxfSx3KTpjfSx3Lnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dCx1PXQuY29weSgpLGg9e3g6MCx5OjAsazoxfSx3KTpmfSx0LnJlYmluZCh3LF8sIm9uIil9O3ZhciBOdCxqdCxVdD1bMCwxLzBdO2Z1bmN0aW9uIFZ0KCl7fWZ1bmN0aW9uIHF0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHF0Pyh0aGlzLmg9K3QsdGhpcy5zPStlLHZvaWQodGhpcy5sPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBxdD9uZXcgcXQodC5oLHQucyx0LmwpOmxlKCIiK3QsY2UscXQpOm5ldyBxdCh0LGUscil9dC5jb2xvcj1WdCxWdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn0sdC5oc2w9cXQ7dmFyIEh0PXF0LnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gR3QodCxlLHIpe3ZhciBuLGk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqZnVuY3Rpb24odCl7cmV0dXJuIHQ+MzYwP3QtPTM2MDp0PDAmJih0Kz0zNjApLHQ8NjA/bisoaS1uKSp0LzYwOnQ8MTgwP2k6dDwyNDA/bisoaS1uKSooMjQwLXQpLzYwOm59KHQpKX1yZXR1cm4gdD1pc05hTih0KT8wOih0JT0zNjApPDA/dCszNjA6dCxlPWlzTmFOKGUpfHxlPDA/MDplPjE/MTplLG49Mioocj1yPDA/MDpyPjE/MTpyKS0oaT1yPD0uNT9yKigxK2UpOnIrZS1yKmUpLG5ldyBuZShhKHQrMTIwKSxhKHQpLGEodC0xMjApKX1mdW5jdGlvbiBZdChlLHIsbil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBZdD8odGhpcy5oPStlLHRoaXMuYz0rcix2b2lkKHRoaXMubD0rbikpOmFyZ3VtZW50cy5sZW5ndGg8Mj9lIGluc3RhbmNlb2YgWXQ/bmV3IFl0KGUuaCxlLmMsZS5sKTokdChlIGluc3RhbmNlb2YgWnQ/ZS5sOihlPXVlKChlPXQucmdiKGUpKS5yLGUuZyxlLmIpKS5sLGUuYSxlLmIpOm5ldyBZdChlLHIsbil9SHQuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBxdCh0aGlzLmgsdGhpcy5zLHRoaXMubC90KX0sSHQuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKSxuZXcgcXQodGhpcy5oLHRoaXMucyx0KnRoaXMubCl9LEh0LnJnYj1mdW5jdGlvbigpe3JldHVybiBHdCh0aGlzLmgsdGhpcy5zLHRoaXMubCl9LHQuaGNsPVl0O3ZhciBXdD1ZdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIFh0KHQsZSxyKXtyZXR1cm4gaXNOYU4odCkmJih0PTApLGlzTmFOKGUpJiYoZT0wKSxuZXcgWnQocixNYXRoLmNvcyh0Kj1MdCkqZSxNYXRoLnNpbih0KSplKX1mdW5jdGlvbiBadCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBadD8odGhpcy5sPSt0LHRoaXMuYT0rZSx2b2lkKHRoaXMuYj0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgWnQ/bmV3IFp0KHQubCx0LmEsdC5iKTp0IGluc3RhbmNlb2YgWXQ/WHQodC5oLHQuYyx0LmwpOnVlKCh0PW5lKHQpKS5yLHQuZyx0LmIpOm5ldyBadCh0LGUscil9V3QuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBZdCh0aGlzLmgsdGhpcy5jLE1hdGgubWluKDEwMCx0aGlzLmwrSnQqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSxXdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBZdCh0aGlzLmgsdGhpcy5jLE1hdGgubWF4KDAsdGhpcy5sLUp0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKX0sV3QucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIFh0KHRoaXMuaCx0aGlzLmMsdGhpcy5sKS5yZ2IoKX0sdC5sYWI9WnQ7dmFyIEp0PTE4LEt0PVp0LnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gUXQodCxlLHIpe3ZhciBuPSh0KzE2KS8xMTYsaT1uK2UvNTAwLGE9bi1yLzIwMDtyZXR1cm4gbmV3IG5lKHJlKDMuMjQwNDU0MiooaT0uOTUwNDcqdGUoaSkpLTEuNTM3MTM4NSoobj0xKnRlKG4pKS0uNDk4NTMxNCooYT0xLjA4ODgzKnRlKGEpKSkscmUoLS45NjkyNjYqaSsxLjg3NjAxMDgqbisuMDQxNTU2KmEpLHJlKC4wNTU2NDM0KmktLjIwNDAyNTkqbisxLjA1NzIyNTIqYSkpfWZ1bmN0aW9uICR0KHQsZSxyKXtyZXR1cm4gdD4wP25ldyBZdChNYXRoLmF0YW4yKHIsZSkqSXQsTWF0aC5zcXJ0KGUqZStyKnIpLHQpOm5ldyBZdChOYU4sTmFOLHQpfWZ1bmN0aW9uIHRlKHQpe3JldHVybiB0Pi4yMDY4OTMwMzQ/dCp0KnQ6KHQtNC8yOSkvNy43ODcwMzd9ZnVuY3Rpb24gZWUodCl7cmV0dXJuIHQ+LjAwODg1Nj9NYXRoLnBvdyh0LDEvMyk6Ny43ODcwMzcqdCs0LzI5fWZ1bmN0aW9uIHJlKHQpe3JldHVybiBNYXRoLnJvdW5kKDI1NSoodDw9LjAwMzA0PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSkpfWZ1bmN0aW9uIG5lKHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG5lPyh0aGlzLnI9fn50LHRoaXMuZz1+fmUsdm9pZCh0aGlzLmI9fn5yKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBuZT9uZXcgbmUodC5yLHQuZyx0LmIpOmxlKCIiK3QsbmUsR3QpOm5ldyBuZSh0LGUscil9ZnVuY3Rpb24gaWUodCl7cmV0dXJuIG5ldyBuZSh0Pj4xNix0Pj44JjI1NSwyNTUmdCl9ZnVuY3Rpb24gYWUodCl7cmV0dXJuIGllKHQpKyIifUt0LmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWnQoTWF0aC5taW4oMTAwLHRoaXMubCtKdCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sS3QuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWnQoTWF0aC5tYXgoMCx0aGlzLmwtSnQqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSksdGhpcy5hLHRoaXMuYil9LEt0LnJnYj1mdW5jdGlvbigpe3JldHVybiBRdCh0aGlzLmwsdGhpcy5hLHRoaXMuYil9LHQucmdiPW5lO3ZhciBvZT1uZS5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIHNlKHQpe3JldHVybiB0PDE2PyIwIitNYXRoLm1heCgwLHQpLnRvU3RyaW5nKDE2KTpNYXRoLm1pbigyNTUsdCkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGxlKHQsZSxyKXt2YXIgbixpLGEsbz0wLHM9MCxsPTA7aWYobj0vKFthLXpdKylcKCguKilcKS8uZXhlYyh0PXQudG9Mb3dlckNhc2UoKSkpc3dpdGNoKGk9blsyXS5zcGxpdCgiLCIpLG5bMV0pe2Nhc2UiaHNsIjpyZXR1cm4gcihwYXJzZUZsb2F0KGlbMF0pLHBhcnNlRmxvYXQoaVsxXSkvMTAwLHBhcnNlRmxvYXQoaVsyXSkvMTAwKTtjYXNlInJnYiI6cmV0dXJuIGUoaGUoaVswXSksaGUoaVsxXSksaGUoaVsyXSkpfXJldHVybihhPXBlLmdldCh0KSk/ZShhLnIsYS5nLGEuYik6KG51bGw9PXR8fCIjIiE9PXQuY2hhckF0KDApfHxpc05hTihhPXBhcnNlSW50KHQuc2xpY2UoMSksMTYpKXx8KDQ9PT10Lmxlbmd0aD8obz0oMzg0MCZhKT4+NCxvfD1vPj40LHM9MjQwJmEsc3w9cz4+NCxsPTE1JmEsbHw9bDw8NCk6Nz09PXQubGVuZ3RoJiYobz0oMTY3MTE2ODAmYSk+PjE2LHM9KDY1MjgwJmEpPj44LGw9MjU1JmEpKSxlKG8scyxsKSl9ZnVuY3Rpb24gY2UodCxlLHIpe3ZhciBuLGksYT1NYXRoLm1pbih0Lz0yNTUsZS89MjU1LHIvPTI1NSksbz1NYXRoLm1heCh0LGUscikscz1vLWEsbD0obythKS8yO3JldHVybiBzPyhpPWw8LjU/cy8obythKTpzLygyLW8tYSksbj10PT1vPyhlLXIpL3MrKGU8cj82OjApOmU9PW8/KHItdCkvcysyOih0LWUpL3MrNCxuKj02MCk6KG49TmFOLGk9bD4wJiZsPDE/MDpuKSxuZXcgcXQobixpLGwpfWZ1bmN0aW9uIHVlKHQsZSxyKXt2YXIgbj1lZSgoLjQxMjQ1NjQqKHQ9ZmUodCkpKy4zNTc1NzYxKihlPWZlKGUpKSsuMTgwNDM3NSoocj1mZShyKSkpLy45NTA0NyksaT1lZSgoLjIxMjY3MjkqdCsuNzE1MTUyMiplKy4wNzIxNzUqcikvMSk7cmV0dXJuIFp0KDExNippLTE2LDUwMCoobi1pKSwyMDAqKGktZWUoKC4wMTkzMzM5KnQrLjExOTE5MiplKy45NTAzMDQxKnIpLzEuMDg4ODMpKSl9ZnVuY3Rpb24gZmUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gaGUodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4iJSI9PT10LmNoYXJBdCh0Lmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqZSk6ZX1vZS5icmlnaHRlcj1mdW5jdGlvbih0KXt0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKTt2YXIgZT10aGlzLnIscj10aGlzLmcsbj10aGlzLmIsaT0zMDtyZXR1cm4gZXx8cnx8bj8oZSYmZTxpJiYoZT1pKSxyJiZyPGkmJihyPWkpLG4mJm48aSYmKG49aSksbmV3IG5lKE1hdGgubWluKDI1NSxlL3QpLE1hdGgubWluKDI1NSxyL3QpLE1hdGgubWluKDI1NSxuL3QpKSk6bmV3IG5lKGksaSxpKX0sb2UuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbmUoKHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpKSp0aGlzLnIsdCp0aGlzLmcsdCp0aGlzLmIpfSxvZS5oc2w9ZnVuY3Rpb24oKXtyZXR1cm4gY2UodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxvZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiIjIitzZSh0aGlzLnIpK3NlKHRoaXMuZykrc2UodGhpcy5iKX07dmFyIHBlPXQubWFwKHthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9KTtmdW5jdGlvbiBkZSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGdlKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKG49cixyPW51bGwpLG1lKGUscix0LG4pfX1mdW5jdGlvbiBtZShlLHIsaSxhKXt2YXIgbz17fSxzPXQuZGlzcGF0Y2goImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLGw9e30sYz1uZXcgWE1MSHR0cFJlcXVlc3QsdT1udWxsO2Z1bmN0aW9uIGYoKXt2YXIgdCxlPWMuc3RhdHVzO2lmKCFlJiZmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlVHlwZTtyZXR1cm4gZSYmInRleHQiIT09ZT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0fShjKXx8ZT49MjAwJiZlPDMwMHx8MzA0PT09ZSl7dHJ5e3Q9aS5jYWxsKG8sYyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcy5lcnJvci5jYWxsKG8sdCl9cy5sb2FkLmNhbGwobyx0KX1lbHNlIHMuZXJyb3IuY2FsbChvLGMpfXJldHVybiB0aGlzLlhEb21haW5SZXF1ZXN0JiYhKCJ3aXRoQ3JlZGVudGlhbHMiaW4gYykmJi9eKGh0dHAocyk/Oik/XC9cLy8udGVzdChlKSYmKGM9bmV3IFhEb21haW5SZXF1ZXN0KSwib25sb2FkImluIGM/Yy5vbmxvYWQ9Yy5vbmVycm9yPWY6Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjLnJlYWR5U3RhdGU+MyYmZigpfSxjLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7dmFyIHI9dC5ldmVudDt0LmV2ZW50PWU7dHJ5e3MucHJvZ3Jlc3MuY2FsbChvLGMpfWZpbmFsbHl7dC5ldmVudD1yfX0sby5oZWFkZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0odCsiIikudG9Mb3dlckNhc2UoKSxhcmd1bWVudHMubGVuZ3RoPDI/bFt0XToobnVsbD09ZT9kZWxldGUgbFt0XTpsW3RdPWUrIiIsbyl9LG8ubWltZVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOnQrIiIsbyk6cn0sby5yZXNwb25zZVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxvKTp1fSxvLnJlc3BvbnNlPWZ1bmN0aW9uKHQpe3JldHVybiBpPXQsb30sWyJnZXQiLCJwb3N0Il0uZm9yRWFjaCgoZnVuY3Rpb24odCl7b1t0XT1mdW5jdGlvbigpe3JldHVybiBvLnNlbmQuYXBwbHkobyxbdF0uY29uY2F0KG4oYXJndW1lbnRzKSkpfX0pKSxvLnNlbmQ9ZnVuY3Rpb24odCxuLGkpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKGk9bixuPW51bGwpLGMub3Blbih0LGUsITApLG51bGw9PXJ8fCJhY2NlcHQiaW4gbHx8KGwuYWNjZXB0PXIrIiwqLyoiKSxjLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBhIGluIGwpYy5zZXRSZXF1ZXN0SGVhZGVyKGEsbFthXSk7cmV0dXJuIG51bGwhPXImJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVycmlkZU1pbWVUeXBlKHIpLG51bGwhPXUmJihjLnJlc3BvbnNlVHlwZT11KSxudWxsIT1pJiZvLm9uKCJlcnJvciIsaSkub24oImxvYWQiLChmdW5jdGlvbih0KXtpKG51bGwsdCl9KSkscy5iZWZvcmVzZW5kLmNhbGwobyxjKSxjLnNlbmQobnVsbD09bj9udWxsOm4pLG99LG8uYWJvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5hYm9ydCgpLG99LHQucmViaW5kKG8scywib24iKSxudWxsPT1hP286by5nZXQoZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3QobnVsbD09ZT9yOm51bGwpfTp0fShhKSl9cGUuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtwZS5zZXQodCxpZShlKSl9KSksdC5mdW5jdG9yPWRlLHQueGhyPWdlKEwpLHQuZHN2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IFJlZ0V4cCgnWyInK3QrIlxuXSIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIGkodCxyLG4pe2FyZ3VtZW50cy5sZW5ndGg8MyYmKG49cixyPW51bGwpO3ZhciBpPW1lKHQsZSxudWxsPT1yP2E6byhyKSxuKTtyZXR1cm4gaS5yb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aS5yZXNwb25zZShudWxsPT0ocj10KT9hOm8odCkpOnJ9LGl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaS5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGkucGFyc2UoZS5yZXNwb25zZVRleHQsdCl9fWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUubWFwKGwpLmpvaW4odCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gci50ZXN0KHQpPyciJyt0LnJlcGxhY2UoL1wiL2csJyIiJykrJyInOnR9cmV0dXJuIGkucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gaS5wYXJzZVJvd3ModCwoZnVuY3Rpb24odCxuKXtpZihyKXJldHVybiByKHQsbi0xKTt2YXIgaT1uZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIitlKyJdIn0pKS5qb2luKCIsIikrIn0iKTtyPWU/ZnVuY3Rpb24odCxyKXtyZXR1cm4gZShpKHQpLHIpfTppfSkpfSxpLnBhcnNlUm93cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYT17fSxvPXt9LHM9W10sbD10Lmxlbmd0aCxjPTAsdT0wO2Z1bmN0aW9uIGYoKXtpZihjPj1sKXJldHVybiBvO2lmKGkpcmV0dXJuIGk9ITEsYTt2YXIgZT1jO2lmKDM0PT09dC5jaGFyQ29kZUF0KGUpKXtmb3IodmFyIHI9ZTtyKys8bDspaWYoMzQ9PT10LmNoYXJDb2RlQXQocikpe2lmKDM0IT09dC5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXJldHVybiBjPXIrMiwxMz09PShzPXQuY2hhckNvZGVBdChyKzEpKT8oaT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2MpOjEwPT09cyYmKGk9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2M8bDspe3ZhciBzLHU9MTtpZigxMD09PShzPXQuY2hhckNvZGVBdChjKyspKSlpPSEwO2Vsc2UgaWYoMTM9PT1zKWk9ITAsMTA9PT10LmNoYXJDb2RlQXQoYykmJigrK2MsKyt1KTtlbHNlIGlmKHMhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGUsYy11KX1yZXR1cm4gdC5zbGljZShlKX1mb3IoOyhyPWYoKSkhPT1vOyl7Zm9yKHZhciBoPVtdO3IhPT1hJiZyIT09bzspaC5wdXNoKHIpLHI9ZigpO2UmJm51bGw9PShoPWUoaCx1KyspKXx8cy5wdXNoKGgpfXJldHVybiBzfSxpLmZvcm1hdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGVbMF0pKXJldHVybiBpLmZvcm1hdFJvd3MoZSk7dmFyIHI9bmV3IEMsbj1bXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdClyLmhhcyhlKXx8bi5wdXNoKHIuYWRkKGUpKX0pKSxbbi5tYXAobCkuam9pbih0KV0uY29uY2F0KGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBsKGVbdF0pfSkpLmpvaW4odCl9KSkpLmpvaW4oIlxuIil9LGkuZm9ybWF0Um93cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocykuam9pbigiXG4iKX0saX0sdC5jc3Y9dC5kc3YoIiwiLCJ0ZXh0L2NzdiIpLHQudHN2PXQuZHN2KCJcdCIsInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiKTt2YXIgdmUseWUseGUsYmUsX2U9dGhpc1tQKHRoaXMsInJlcXVlc3RBbmltYXRpb25GcmFtZSIpXXx8ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gd2UodCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7bjwyJiYoZT0wKSxuPDMmJihyPURhdGUubm93KCkpO3ZhciBpPXIrZSxhPXtjOnQsdDppLG46bnVsbH07cmV0dXJuIHllP3llLm49YTp2ZT1hLHllPWEseGV8fChiZT1jbGVhclRpbWVvdXQoYmUpLHhlPTEsX2UoVGUpKSxhfWZ1bmN0aW9uIFRlKCl7dmFyIHQ9a2UoKSxlPU1lKCktdDtlPjI0Pyhpc0Zpbml0ZShlKSYmKGNsZWFyVGltZW91dChiZSksYmU9c2V0VGltZW91dChUZSxlKSkseGU9MCk6KHhlPTEsX2UoVGUpKX1mdW5jdGlvbiBrZSgpe2Zvcih2YXIgdD1EYXRlLm5vdygpLGU9dmU7ZTspdD49ZS50JiZlLmModC1lLnQpJiYoZS5jPW51bGwpLGU9ZS5uO3JldHVybiB0fWZ1bmN0aW9uIE1lKCl7Zm9yKHZhciB0LGU9dmUscj0xLzA7ZTspZS5jPyhlLnQ8ciYmKHI9ZS50KSxlPSh0PWUpLm4pOmU9dD90Lm49ZS5uOnZlPWUubjtyZXR1cm4geWU9dCxyfWZ1bmN0aW9uIEFlKHQsZSl7cmV0dXJuIGUtKHQ/TWF0aC5jZWlsKE1hdGgubG9nKHQpL01hdGguTE4xMCk6MSl9dC50aW1lcj1mdW5jdGlvbigpe3dlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdC50aW1lci5mbHVzaD1mdW5jdGlvbigpe2tlKCksTWUoKX0sdC5yb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiBlP01hdGgucm91bmQodCooZT1NYXRoLnBvdygxMCxlKSkpL2U6TWF0aC5yb3VuZCh0KX07dmFyIFNlPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnBvdygxMCwzKnkoOC1lKSk7cmV0dXJue3NjYWxlOmU+OD9mdW5jdGlvbih0KXtyZXR1cm4gdC9yfTpmdW5jdGlvbih0KXtyZXR1cm4gdCpyfSxzeW1ib2w6dH19KSk7ZnVuY3Rpb24gRWUoZSl7dmFyIHI9ZS5kZWNpbWFsLG49ZS50aG91c2FuZHMsaT1lLmdyb3VwaW5nLGE9ZS5jdXJyZW5jeSxvPWkmJm4/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsYT1bXSxvPTAscz1pWzBdLGw9MDtyPjAmJnM+MCYmKGwrcysxPmUmJihzPU1hdGgubWF4KDEsZS1sKSksYS5wdXNoKHQuc3Vic3RyaW5nKHItPXMscitzKSksISgobCs9cysxKT5lKSk7KXM9aVtvPShvKzEpJWkubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX06TDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49Q2UuZXhlYyhlKSxpPW5bMV18fCIgIixzPW5bMl18fCI+IixsPW5bM118fCItIixjPW5bNF18fCIiLHU9bls1XSxmPStuWzZdLGg9bls3XSxwPW5bOF0sZD1uWzldLGc9MSxtPSIiLHY9IiIseT0hMSx4PSEwO3N3aXRjaChwJiYocD0rcC5zdWJzdHJpbmcoMSkpLCh1fHwiMCI9PT1pJiYiPSI9PT1zKSYmKHU9aT0iMCIscz0iPSIpLGQpe2Nhc2UibiI6aD0hMCxkPSJnIjticmVhaztjYXNlIiUiOmc9MTAwLHY9IiUiLGQ9ImYiO2JyZWFrO2Nhc2UicCI6Zz0xMDAsdj0iJSIsZD0iciI7YnJlYWs7Y2FzZSJiIjpjYXNlIm8iOmNhc2UieCI6Y2FzZSJYIjoiIyI9PT1jJiYobT0iMCIrZC50b0xvd2VyQ2FzZSgpKTtjYXNlImMiOng9ITE7Y2FzZSJkIjp5PSEwLHA9MDticmVhaztjYXNlInMiOmc9LTEsZD0iciJ9IiQiPT09YyYmKG09YVswXSx2PWFbMV0pLCJyIiE9ZHx8cHx8KGQ9ImciKSxudWxsIT1wJiYoImciPT1kP3A9TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwKSk6ImUiIT1kJiYiZiIhPWR8fChwPU1hdGgubWF4KDAsTWF0aC5taW4oMjAscCkpKSksZD1MZS5nZXQoZCl8fEllO3ZhciBiPXUmJmg7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXY7aWYoeSYmZSUxKXJldHVybiIiO3ZhciBhPWU8MHx8MD09PWUmJjEvZTwwPyhlPS1lLCItIik6Ii0iPT09bD8iIjpsO2lmKGc8MCl7dmFyIGM9dC5mb3JtYXRQcmVmaXgoZSxwKTtlPWMuc2NhbGUoZSksbj1jLnN5bWJvbCt2fWVsc2UgZSo9Zzt2YXIgXyx3LFQ9KGU9ZChlLHApKS5sYXN0SW5kZXhPZigiLiIpO2lmKFQ8MCl7dmFyIGs9eD9lLmxhc3RJbmRleE9mKCJlIik6LTE7azwwPyhfPWUsdz0iIik6KF89ZS5zdWJzdHJpbmcoMCxrKSx3PWUuc3Vic3RyaW5nKGspKX1lbHNlIF89ZS5zdWJzdHJpbmcoMCxUKSx3PXIrZS5zdWJzdHJpbmcoVCsxKTshdSYmaCYmKF89byhfLDEvMCkpO3ZhciBNPW0ubGVuZ3RoK18ubGVuZ3RoK3cubGVuZ3RoKyhiPzA6YS5sZW5ndGgpLEE9TTxmP25ldyBBcnJheShNPWYtTSsxKS5qb2luKGkpOiIiO3JldHVybiBiJiYoXz1vKEErXyxBLmxlbmd0aD9mLXcubGVuZ3RoOjEvMCkpLGErPW0sZT1fK3csKCI8Ij09PXM/YStlK0E6Ij4iPT09cz9BK2ErZToiXiI9PT1zP0Euc3Vic3RyaW5nKDAsTT4+PTEpK2ErZStBLnN1YnN0cmluZyhNKTphKyhiP2U6QStlKSkrbn19fXQuZm9ybWF0UHJlZml4PWZ1bmN0aW9uKGUscil7dmFyIG49MDtyZXR1cm4oZT0rZSkmJihlPDAmJihlKj0tMSksciYmKGU9dC5yb3VuZChlLEFlKGUscikpKSxuPTErTWF0aC5mbG9vcigxZS0xMitNYXRoLmxvZyhlKS9NYXRoLkxOMTApLG49TWF0aC5tYXgoLTI0LE1hdGgubWluKDI0LDMqTWF0aC5mbG9vcigobi0xKS8zKSkpKSxTZVs4K24vM119O3ZhciBDZT0vKD86KFtee10pPyhbPD49Xl0pKT8oWytcLSBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC4tP1xkKyk/KFthLXolXSk/L2ksTGU9dC5tYXAoe2I6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoOCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMTYpfSxYOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0scjpmdW5jdGlvbihlLHIpe3JldHVybihlPXQucm91bmQoZSxBZShlLHIpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWluKDIwLEFlKGUqKDErMWUtMTUpLHIpKSkpfX0pO2Z1bmN0aW9uIEllKHQpe3JldHVybiB0KyIifXZhciBQZT10LnRpbWU9e30semU9RGF0ZTtmdW5jdGlvbiBPZSgpe3RoaXMuXz1uZXcgRGF0ZShhcmd1bWVudHMubGVuZ3RoPjE/RGF0ZS5VVEMuYXBwbHkodGhpcyxhcmd1bWVudHMpOmFyZ3VtZW50c1swXSl9T2UucHJvdG90eXBlPXtnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXRlKCl9LGdldERheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRGF5KCl9LGdldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENGdWxsWWVhcigpfSxnZXRIb3VyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDSG91cnMoKX0sZ2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaWxsaXNlY29uZHMoKX0sZ2V0TWludXRlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWludXRlcygpfSxnZXRNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTW9udGgoKX0sZ2V0U2Vjb25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpfSxnZXRUaW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRUaW1lKCl9LGdldFRpbWV6b25lT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLnZhbHVlT2YoKX0sc2V0RGF0ZTpmdW5jdGlvbigpe0RlLnNldFVUQ0RhdGUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldERheTpmdW5jdGlvbigpe0RlLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtEZS5zZXRVVENGdWxsWWVhci5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0SG91cnM6ZnVuY3Rpb24oKXtEZS5zZXRVVENIb3Vycy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7RGUuc2V0VVRDTWlsbGlzZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaW51dGVzOmZ1bmN0aW9uKCl7RGUuc2V0VVRDTWludXRlcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TW9udGg6ZnVuY3Rpb24oKXtEZS5zZXRVVENNb250aC5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0U2Vjb25kczpmdW5jdGlvbigpe0RlLnNldFVUQ1NlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFRpbWU6ZnVuY3Rpb24oKXtEZS5zZXRUaW1lLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfX07dmFyIERlPURhdGUucHJvdG90eXBlO2Z1bmN0aW9uIFJlKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3ZhciByPXQoZSksbj1hKHIsMSk7cmV0dXJuIGUtcjxuLWU/cjpufWZ1bmN0aW9uIGkocil7cmV0dXJuIGUocj10KG5ldyB6ZShyLTEpKSwxKSxyfWZ1bmN0aW9uIGEodCxyKXtyZXR1cm4gZSh0PW5ldyB6ZSgrdCksciksdH1mdW5jdGlvbiBvKHQsbixhKXt2YXIgbz1pKHQpLHM9W107aWYoYT4xKWZvcig7bzxuOylyKG8pJWF8fHMucHVzaChuZXcgRGF0ZSgrbykpLGUobywxKTtlbHNlIGZvcig7bzxuOylzLnB1c2gobmV3IERhdGUoK28pKSxlKG8sMSk7cmV0dXJuIHN9dC5mbG9vcj10LHQucm91bmQ9bix0LmNlaWw9aSx0Lm9mZnNldD1hLHQucmFuZ2U9bzt2YXIgcz10LnV0Yz1GZSh0KTtyZXR1cm4gcy5mbG9vcj1zLHMucm91bmQ9RmUobikscy5jZWlsPUZlKGkpLHMub2Zmc2V0PUZlKGEpLHMucmFuZ2U9ZnVuY3Rpb24odCxlLHIpe3RyeXt6ZT1PZTt2YXIgbj1uZXcgT2U7cmV0dXJuIG4uXz10LG8obixlLHIpfWZpbmFsbHl7emU9RGF0ZX19LHR9ZnVuY3Rpb24gRmUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dHJ5e3plPU9lO3ZhciBuPW5ldyBPZTtyZXR1cm4gbi5fPWUsdChuLHIpLl99ZmluYWxseXt6ZT1EYXRlfX19ZnVuY3Rpb24gQmUoZSl7dmFyIHI9ZS5kYXRlVGltZSxuPWUuZGF0ZSxpPWUudGltZSxhPWUucGVyaW9kcyxvPWUuZGF5cyxzPWUuc2hvcnREYXlzLGw9ZS5tb250aHMsYz1lLnNob3J0TW9udGhzO2Z1bmN0aW9uIHUodCl7dmFyIGU9dC5sZW5ndGg7ZnVuY3Rpb24gcihyKXtmb3IodmFyIG4saSxhLG89W10scz0tMSxsPTA7KytzPGU7KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoby5wdXNoKHQuc2xpY2UobCxzKSksbnVsbCE9KGk9TmVbbj10LmNoYXJBdCgrK3MpXSkmJihuPXQuY2hhckF0KCsrcykpLChhPV9bbl0pJiYobj1hKHIsbnVsbD09aT8iZSI9PT1uPyIgIjoiMCI6aSkpLG8ucHVzaChuKSxsPXMrMSk7cmV0dXJuIG8ucHVzaCh0LnNsaWNlKGwscykpLG8uam9pbigiIil9cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIHI9e3k6MTkwMCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MCxaOm51bGx9O2lmKGYocix0LGUsMCkhPWUubGVuZ3RoKXJldHVybiBudWxsOyJwImluIHImJihyLkg9ci5IJTEyKzEyKnIucCk7dmFyIG49bnVsbCE9ci5aJiZ6ZSE9PU9lLGk9bmV3KG4/T2U6emUpO3JldHVybiJqImluIHI/aS5zZXRGdWxsWWVhcihyLnksMCxyLmopOiJXImluIHJ8fCJVImluIHI/KCJ3ImluIHJ8fChyLnc9IlciaW4gcj8xOjApLGkuc2V0RnVsbFllYXIoci55LDAsMSksaS5zZXRGdWxsWWVhcihyLnksMCwiVyJpbiByPyhyLncrNiklNys3KnIuVy0oaS5nZXREYXkoKSs1KSU3OnIudys3KnIuVS0oaS5nZXREYXkoKSs2KSU3KSk6aS5zZXRGdWxsWWVhcihyLnksci5tLHIuZCksaS5zZXRIb3VycyhyLkgrKHIuWi8xMDB8MCksci5NK3IuWiUxMDAsci5TLHIuTCksbj9pLl86aX0sci50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxyfWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpLGEsbyxzPTAsbD1lLmxlbmd0aCxjPXIubGVuZ3RoO3M8bDspe2lmKG4+PWMpcmV0dXJuLTE7aWYoMzc9PT0oaT1lLmNoYXJDb2RlQXQocysrKSkpe2lmKG89ZS5jaGFyQXQocysrKSwhKGE9d1tvIGluIE5lP2UuY2hhckF0KHMrKyk6b10pfHwobj1hKHQscixuKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPXIuY2hhckNvZGVBdChuKyspKXJldHVybi0xfXJldHVybiBufXUudXRjPWZ1bmN0aW9uKHQpe3ZhciBlPXUodCk7ZnVuY3Rpb24gcih0KXt0cnl7dmFyIHI9bmV3KHplPU9lKTtyZXR1cm4gci5fPXQsZShyKX1maW5hbGx5e3plPURhdGV9fXJldHVybiByLnBhcnNlPWZ1bmN0aW9uKHQpe3RyeXt6ZT1PZTt2YXIgcj1lLnBhcnNlKHQpO3JldHVybiByJiZyLl99ZmluYWxseXt6ZT1EYXRlfX0sci50b1N0cmluZz1lLnRvU3RyaW5nLHJ9LHUubXVsdGk9dS51dGMubXVsdGk9b3I7dmFyIGg9dC5tYXAoKSxwPXFlKG8pLGQ9SGUobyksZz1xZShzKSxtPUhlKHMpLHY9cWUobCkseT1IZShsKSx4PXFlKGMpLGI9SGUoYyk7YS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2guc2V0KHQudG9Mb3dlckNhc2UoKSxlKX0pKTt2YXIgXz17YTpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBsW3QuZ2V0TW9udGgoKV19LGM6dShyKSxkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZlKHQuZ2V0RGF0ZSgpLGUsMil9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmUodC5nZXREYXRlKCksZSwyKX0sSDpmdW5jdGlvbih0LGUpe3JldHVybiBWZSh0LmdldEhvdXJzKCksZSwyKX0sSTpmdW5jdGlvbih0LGUpe3JldHVybiBWZSh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9LGo6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmUoMStQZS5kYXlPZlllYXIodCksZSwzKX0sTDpmdW5jdGlvbih0LGUpe3JldHVybiBWZSh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9LG06ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmUodC5nZXRNb250aCgpKzEsZSwyKX0sTTpmdW5jdGlvbih0LGUpe3JldHVybiBWZSh0LmdldE1pbnV0ZXMoKSxlLDIpfSxwOmZ1bmN0aW9uKHQpe3JldHVybiBhWysodC5nZXRIb3VycygpPj0xMildfSxTOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZlKHQuZ2V0U2Vjb25kcygpLGUsMil9LFU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmUoUGUuc3VuZGF5T2ZZZWFyKHQpLGUsMil9LHc6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCl9LFc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmUoUGUubW9uZGF5T2ZZZWFyKHQpLGUsMil9LHg6dShuKSxYOnUoaSkseTpmdW5jdGlvbih0LGUpe3JldHVybiBWZSh0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9LFk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmUodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfSxaOmlyLCIlIjpmdW5jdGlvbigpe3JldHVybiIlIn19LHc9e2E6ZnVuY3Rpb24odCxlLHIpe2cubGFzdEluZGV4PTA7dmFyIG49Zy5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9bS5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUscil7cC5sYXN0SW5kZXg9MDt2YXIgbj1wLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz1kLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxyKXt4Lmxhc3RJbmRleD0wO3ZhciBuPXguZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPWIuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLHIpe3YubGFzdEluZGV4PTA7dmFyIG49di5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lm09eS5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LGUscil7cmV0dXJuIGYodCxfLmMudG9TdHJpbmcoKSxlLHIpfSxkOlFlLGU6UWUsSDp0cixJOnRyLGo6JGUsTDpucixtOktlLE06ZXIscDpmdW5jdGlvbih0LGUscil7dmFyIG49aC5nZXQoZS5zbGljZShyLHIrPTIpLnRvTG93ZXJDYXNlKCkpO3JldHVybiBudWxsPT1uPy0xOih0LnA9bixyKX0sUzpycixVOlllLHc6R2UsVzpXZSx4OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZih0LF8ueC50b1N0cmluZygpLGUscil9LFg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmKHQsXy5YLnRvU3RyaW5nKCksZSxyKX0seTpaZSxZOlhlLFo6SmUsIiUiOmFyfTtyZXR1cm4gdX1QZS55ZWFyPVJlKChmdW5jdGlvbih0KXtyZXR1cm4odD1QZS5kYXkodCkpLnNldE1vbnRoKDAsMSksdH0pLChmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSksUGUueWVhcnM9UGUueWVhci5yYW5nZSxQZS55ZWFycy51dGM9UGUueWVhci51dGMucmFuZ2UsUGUuZGF5PVJlKChmdW5jdGlvbih0KXt2YXIgZT1uZXcgemUoMmUzLDApO3JldHVybiBlLnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpLGV9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSksUGUuZGF5cz1QZS5kYXkucmFuZ2UsUGUuZGF5cy51dGM9UGUuZGF5LnV0Yy5yYW5nZSxQZS5kYXlPZlllYXI9ZnVuY3Rpb24odCl7dmFyIGU9UGUueWVhcih0KTtyZXR1cm4gTWF0aC5mbG9vcigodC1lLTZlNCoodC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1KX0sWyJzdW5kYXkiLCJtb25kYXkiLCJ0dWVzZGF5Iiwid2VkbmVzZGF5IiwidGh1cnNkYXkiLCJmcmlkYXkiLCJzYXR1cmRheSJdLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7ZT03LWU7dmFyIHI9UGVbdF09UmUoKGZ1bmN0aW9uKHQpe3JldHVybih0PVBlLmRheSh0KSkuc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKStlKSU3KSx0fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqTWF0aC5mbG9vcihlKSl9KSwoZnVuY3Rpb24odCl7dmFyIHI9UGUueWVhcih0KS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoUGUuZGF5T2ZZZWFyKHQpKyhyK2UpJTcpLzcpLShyIT09ZSl9KSk7UGVbdCsicyJdPXIucmFuZ2UsUGVbdCsicyJdLnV0Yz1yLnV0Yy5yYW5nZSxQZVt0KyJPZlllYXIiXT1mdW5jdGlvbih0KXt2YXIgcj1QZS55ZWFyKHQpLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKChQZS5kYXlPZlllYXIodCkrKHIrZSklNykvNyl9fSkpLFBlLndlZWs9UGUuc3VuZGF5LFBlLndlZWtzPVBlLnN1bmRheS5yYW5nZSxQZS53ZWVrcy51dGM9UGUuc3VuZGF5LnV0Yy5yYW5nZSxQZS53ZWVrT2ZZZWFyPVBlLnN1bmRheU9mWWVhcjt2YXIgTmU9eyItIjoiIixfOiIgIiwwOiIwIn0samU9L15ccypcZCsvLFVlPS9eJS87ZnVuY3Rpb24gVmUodCxlLHIpe3ZhciBuPXQ8MD8iLSI6IiIsaT0obj8tdDp0KSsiIixhPWkubGVuZ3RoO3JldHVybiBuKyhhPHI/bmV3IEFycmF5KHItYSsxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKHQucmVxdW90ZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIEhlKHQpe2Zvcih2YXIgZT1uZXcgXyxyPS0xLG49dC5sZW5ndGg7KytyPG47KWUuc2V0KHRbcl0udG9Mb3dlckNhc2UoKSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBHZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Llc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWGUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrNCkpO3JldHVybiBuPyh0Lnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWmUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuLGk9amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIGk/KHQueT0obj0raVswXSkrKG4+Njg/MTkwMDoyZTMpLHIraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEplKHQsZSxyKXtyZXR1cm4vXlsrLV1cZHs0fSQvLnRlc3QoZT1lLnNsaWNlKHIscis1KSk/KHQuWj0tZSxyKzUpOi0xfWZ1bmN0aW9uIEtlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQuaj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB0cih0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBlcih0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBycih0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuUz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBucih0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpcih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCkscj1lPjA/Ii0iOiIrIixuPXkoZSkvNjB8MCxpPXkoZSklNjA7cmV0dXJuIHIrVmUobiwiMCIsMikrVmUoaSwiMCIsMil9ZnVuY3Rpb24gYXIodCxlLHIpe1VlLmxhc3RJbmRleD0wO3ZhciBuPVVlLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuP3IrblswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gb3IodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9LTE7KytyPGU7KXRbcl1bMF09dGhpcyh0W3JdWzBdKTtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciByPTAsbj10W3JdOyFuWzFdKGUpOyluPXRbKytyXTtyZXR1cm4gblswXShlKX19dC5sb2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJue251bWJlckZvcm1hdDpFZSh0KSx0aW1lRm9ybWF0OkJlKHQpfX07dmFyIHNyPXQubG9jYWxlKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxkYXRlVGltZToiJWEgJWIgJWUgJVggJVkiLGRhdGU6IiVtLyVkLyVZIix0aW1lOiIlSDolTTolUyIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtmdW5jdGlvbiBscigpe310LmZvcm1hdD1zci5udW1iZXJGb3JtYXQsdC5nZW89e30sbHIucHJvdG90eXBlPXtzOjAsdDowLGFkZDpmdW5jdGlvbih0KXt1cih0LHRoaXMudCxjciksdXIoY3Iucyx0aGlzLnMsdGhpcyksdGhpcy5zP3RoaXMudCs9Y3IudDp0aGlzLnM9Y3IudH0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIGNyPW5ldyBscjtmdW5jdGlvbiB1cih0LGUscil7dmFyIG49ci5zPXQrZSxpPW4tdCxhPW4taTtyLnQ9dC1hKyhlLWkpfWZ1bmN0aW9uIGZyKHQsZSl7dCYmcHIuaGFzT3duUHJvcGVydHkodC50eXBlKSYmcHJbdC50eXBlXSh0LGUpfXQuZ2VvLnN0cmVhbT1mdW5jdGlvbih0LGUpe3QmJmhyLmhhc093blByb3BlcnR5KHQudHlwZSk/aHJbdC50eXBlXSh0LGUpOmZyKHQsZSl9O3ZhciBocj17RmVhdHVyZTpmdW5jdGlvbih0LGUpe2ZyKHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylmcihyW25dLmdlb21ldHJ5LGUpfX0scHI9e1NwaGVyZTpmdW5jdGlvbih0LGUpe2Uuc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsZSl7dD10LmNvb3JkaW5hdGVzLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyl0PXJbbl0sZS5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtkcih0LmNvb3JkaW5hdGVzLGUsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZHIocltuXSxlLDApfSxQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Z3IodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylncihyW25dLGUpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZnIocltuXSxlKX19O2Z1bmN0aW9uIGRyKHQsZSxyKXt2YXIgbixpPS0xLGE9dC5sZW5ndGgtcjtmb3IoZS5saW5lU3RhcnQoKTsrK2k8YTspbj10W2ldLGUucG9pbnQoblswXSxuWzFdLG5bMl0pO2UubGluZUVuZCgpfWZ1bmN0aW9uIGdyKHQsZSl7dmFyIHI9LTEsbj10Lmxlbmd0aDtmb3IoZS5wb2x5Z29uU3RhcnQoKTsrK3I8bjspZHIodFtyXSxlLDEpO2UucG9seWdvbkVuZCgpfXQuZ2VvLmFyZWE9ZnVuY3Rpb24oZSl7cmV0dXJuIG1yPTAsdC5nZW8uc3RyZWFtKGUsQ3IpLG1yfTt2YXIgbXIsdnIseXIseHIsYnIsX3Isd3IsVHIsa3IsTXIsQXIsU3IsRXI9bmV3IGxyLENyPXtzcGhlcmU6ZnVuY3Rpb24oKXttcis9NCpBdH0scG9pbnQ6TyxsaW5lU3RhcnQ6TyxsaW5lRW5kOk8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7RXIucmVzZXQoKSxDci5saW5lU3RhcnQ9THJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0yKkVyO21yKz10PDA/NCpBdCt0OnQsQ3IubGluZVN0YXJ0PUNyLmxpbmVFbmQ9Q3IucG9pbnQ9T319O2Z1bmN0aW9uIExyKCl7dmFyIHQsZSxyLG4saTtmdW5jdGlvbiBhKHQsZSl7ZT1lKkx0LzIrQXQvNDt2YXIgYT0odCo9THQpLXIsbz1hPj0wPzE6LTEscz1vKmEsbD1NYXRoLmNvcyhlKSxjPU1hdGguc2luKGUpLHU9aSpjLGY9bipsK3UqTWF0aC5jb3MocyksaD11Km8qTWF0aC5zaW4ocyk7RXIuYWRkKE1hdGguYXRhbjIoaCxmKSkscj10LG49bCxpPWN9Q3IucG9pbnQ9ZnVuY3Rpb24obyxzKXtDci5wb2ludD1hLHI9KHQ9bykqTHQsbj1NYXRoLmNvcyhzPShlPXMpKkx0LzIrQXQvNCksaT1NYXRoLnNpbihzKX0sQ3IubGluZUVuZD1mdW5jdGlvbigpe2EodCxlKX19ZnVuY3Rpb24gSXIodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1NYXRoLmNvcyhyKTtyZXR1cm5bbipNYXRoLmNvcyhlKSxuKk1hdGguc2luKGUpLE1hdGguc2luKHIpXX1mdW5jdGlvbiBQcih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX1mdW5jdGlvbiB6cih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24gT3IodCxlKXt0WzBdKz1lWzBdLHRbMV0rPWVbMV0sdFsyXSs9ZVsyXX1mdW5jdGlvbiBEcih0LGUpe3JldHVyblt0WzBdKmUsdFsxXSplLHRbMl0qZV19ZnVuY3Rpb24gUnIodCl7dmFyIGU9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX1mdW5jdGlvbiBGcih0KXtyZXR1cm5bTWF0aC5hdGFuMih0WzFdLHRbMF0pLER0KHRbMl0pXX1mdW5jdGlvbiBCcih0LGUpe3JldHVybiB5KHRbMF0tZVswXSk8a3QmJnkodFsxXS1lWzFdKTxrdH10Lmdlby5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmLGg9e3BvaW50OnAsbGluZVN0YXJ0OmcsbGluZUVuZDptLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2gucG9pbnQ9dixoLmxpbmVTdGFydD14LGgubGluZUVuZD1iLGM9MCxDci5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0NyLnBvbHlnb25FbmQoKSxoLnBvaW50PXAsaC5saW5lU3RhcnQ9ZyxoLmxpbmVFbmQ9bSxFcjwwPyhlPS0obj0xODApLHI9LShpPTkwKSk6Yz5rdD9pPTkwOmM8LWt0JiYocj0tOTApLGZbMF09ZSxmWzFdPW59fTtmdW5jdGlvbiBwKHQsYSl7dS5wdXNoKGY9W2U9dCxuPXRdKSxhPHImJihyPWEpLGE+aSYmKGk9YSl9ZnVuY3Rpb24gZCh0LG8pe3ZhciBzPUlyKFt0Kkx0LG8qTHRdKTtpZihsKXt2YXIgYz16cihsLHMpLHU9enIoW2NbMV0sLWNbMF0sMF0sYyk7UnIodSksdT1Gcih1KTt2YXIgZj10LWEsaD1mPjA/MTotMSxkPXVbMF0qSXQqaCxnPXkoZik+MTgwO2lmKGdeKGgqYTxkJiZkPGgqdCkpKG09dVsxXSpJdCk+aSYmKGk9bSk7ZWxzZSBpZihnXihoKmE8KGQ9KGQrMzYwKSUzNjAtMTgwKSYmZDxoKnQpKXt2YXIgbTsobT0tdVsxXSpJdCk8ciYmKHI9bSl9ZWxzZSBvPHImJihyPW8pLG8+aSYmKGk9byk7Zz90PGE/XyhlLHQpPl8oZSxuKSYmKG49dCk6Xyh0LG4pPl8oZSxuKSYmKGU9dCk6bj49ZT8odDxlJiYoZT10KSx0Pm4mJihuPXQpKTp0PmE/XyhlLHQpPl8oZSxuKSYmKG49dCk6Xyh0LG4pPl8oZSxuKSYmKGU9dCl9ZWxzZSBwKHQsbyk7bD1zLGE9dH1mdW5jdGlvbiBnKCl7aC5wb2ludD1kfWZ1bmN0aW9uIG0oKXtmWzBdPWUsZlsxXT1uLGgucG9pbnQ9cCxsPW51bGx9ZnVuY3Rpb24gdih0LGUpe2lmKGwpe3ZhciByPXQtYTtjKz15KHIpPjE4MD9yKyhyPjA/MzYwOi0zNjApOnJ9ZWxzZSBvPXQscz1lO0NyLnBvaW50KHQsZSksZCh0LGUpfWZ1bmN0aW9uIHgoKXtDci5saW5lU3RhcnQoKX1mdW5jdGlvbiBiKCl7dihvLHMpLENyLmxpbmVFbmQoKSx5KGMpPmt0JiYoZT0tKG49MTgwKSksZlswXT1lLGZbMV09bixsPW51bGx9ZnVuY3Rpb24gXyh0LGUpe3JldHVybihlLT10KTwwP2UrMzYwOmV9ZnVuY3Rpb24gdyh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gVCh0LGUpe3JldHVybiBlWzBdPD1lWzFdP2VbMF08PXQmJnQ8PWVbMV06dDxlWzBdfHxlWzFdPHR9cmV0dXJuIGZ1bmN0aW9uKGEpe2lmKGk9bj0tKGU9cj0xLzApLHU9W10sdC5nZW8uc3RyZWFtKGEsaCksYz11Lmxlbmd0aCl7dS5zb3J0KHcpO2Zvcih2YXIgbz0xLHM9W2c9dVswXV07bzxjOysrbylUKChwPXVbb10pWzBdLGcpfHxUKHBbMV0sZyk/KF8oZ1swXSxwWzFdKT5fKGdbMF0sZ1sxXSkmJihnWzFdPXBbMV0pLF8ocFswXSxnWzFdKT5fKGdbMF0sZ1sxXSkmJihnWzBdPXBbMF0pKTpzLnB1c2goZz1wKTtmb3IodmFyIGwsYyxwLGQ9LTEvMCxnPShvPTAsc1tjPXMubGVuZ3RoLTFdKTtvPD1jO2c9cCwrK28pcD1zW29dLChsPV8oZ1sxXSxwWzBdKSk+ZCYmKGQ9bCxlPXBbMF0sbj1nWzFdKX1yZXR1cm4gdT1mPW51bGwsZT09PTEvMHx8cj09PTEvMD9bW05hTixOYU5dLFtOYU4sTmFOXV06W1tlLHJdLFtuLGldXX19KCksdC5nZW8uY2VudHJvaWQ9ZnVuY3Rpb24oZSl7dnI9eXI9eHI9YnI9X3I9d3I9VHI9a3I9TXI9QXI9U3I9MCx0Lmdlby5zdHJlYW0oZSxOcik7dmFyIHI9TXIsbj1BcixpPVNyLGE9cipyK24qbitpKmk7cmV0dXJuIGE8TXQmJihyPXdyLG49VHIsaT1rcix5cjxrdCYmKHI9eHIsbj1icixpPV9yKSwoYT1yKnIrbipuK2kqaSk8TXQpP1tOYU4sTmFOXTpbTWF0aC5hdGFuMihuLHIpKkl0LER0KGkvTWF0aC5zcXJ0KGEpKSpJdF19O3ZhciBOcj17c3BoZXJlOk8scG9pbnQ6anIsbGluZVN0YXJ0OlZyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7TnIubGluZVN0YXJ0PUhyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7TnIubGluZVN0YXJ0PVZyfX07ZnVuY3Rpb24ganIodCxlKXt0Kj1MdDt2YXIgcj1NYXRoLmNvcyhlKj1MdCk7VXIocipNYXRoLmNvcyh0KSxyKk1hdGguc2luKHQpLE1hdGguc2luKGUpKX1mdW5jdGlvbiBVcih0LGUscil7Kyt2cix4cis9KHQteHIpL3ZyLGJyKz0oZS1icikvdnIsX3IrPShyLV9yKS92cn1mdW5jdGlvbiBWcigpe3ZhciB0LGUscjtmdW5jdGlvbiBuKG4saSl7bio9THQ7dmFyIGE9TWF0aC5jb3MoaSo9THQpLG89YSpNYXRoLmNvcyhuKSxzPWEqTWF0aC5zaW4obiksbD1NYXRoLnNpbihpKSxjPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChjPWUqbC1yKnMpKmMrKGM9cipvLXQqbCkqYysoYz10KnMtZSpvKSpjKSx0Km8rZSpzK3IqbCk7eXIrPWMsd3IrPWMqKHQrKHQ9bykpLFRyKz1jKihlKyhlPXMpKSxrcis9Yyoocisocj1sKSksVXIodCxlLHIpfU5yLnBvaW50PWZ1bmN0aW9uKGksYSl7aSo9THQ7dmFyIG89TWF0aC5jb3MoYSo9THQpO3Q9bypNYXRoLmNvcyhpKSxlPW8qTWF0aC5zaW4oaSkscj1NYXRoLnNpbihhKSxOci5wb2ludD1uLFVyKHQsZSxyKX19ZnVuY3Rpb24gcXIoKXtOci5wb2ludD1qcn1mdW5jdGlvbiBIcigpe3ZhciB0LGUscixuLGk7ZnVuY3Rpb24gYSh0LGUpe3QqPUx0O3ZhciBhPU1hdGguY29zKGUqPUx0KSxvPWEqTWF0aC5jb3ModCkscz1hKk1hdGguc2luKHQpLGw9TWF0aC5zaW4oZSksYz1uKmwtaSpzLHU9aSpvLXIqbCxmPXIqcy1uKm8saD1NYXRoLnNxcnQoYypjK3UqdStmKmYpLHA9cipvK24qcytpKmwsZD1oJiYtT3QocCkvaCxnPU1hdGguYXRhbjIoaCxwKTtNcis9ZCpjLEFyKz1kKnUsU3IrPWQqZix5cis9Zyx3cis9Zyoocisocj1vKSksVHIrPWcqKG4rKG49cykpLGtyKz1nKihpKyhpPWwpKSxVcihyLG4saSl9TnIucG9pbnQ9ZnVuY3Rpb24obyxzKXt0PW8sZT1zLE5yLnBvaW50PWEsbyo9THQ7dmFyIGw9TWF0aC5jb3Mocyo9THQpO3I9bCpNYXRoLmNvcyhvKSxuPWwqTWF0aC5zaW4obyksaT1NYXRoLnNpbihzKSxVcihyLG4saSl9LE5yLmxpbmVFbmQ9ZnVuY3Rpb24oKXthKHQsZSksTnIubGluZUVuZD1xcixOci5wb2ludD1qcn19ZnVuY3Rpb24gR3IodCxlKXtmdW5jdGlvbiByKHIsbil7cmV0dXJuIHI9dChyLG4pLGUoclswXSxyWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYoci5pbnZlcnQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4ocj1lLmludmVydChyLG4pKSYmdC5pbnZlcnQoclswXSxyWzFdKX0pLHJ9ZnVuY3Rpb24gWXIoKXtyZXR1cm4hMH1mdW5jdGlvbiBXcih0LGUscixuLGkpe3ZhciBhPVtdLG89W107aWYodC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighKChlPXQubGVuZ3RoLTEpPD0wKSl7dmFyIGUscj10WzBdLG49dFtlXTtpZihCcihyLG4pKXtpLmxpbmVTdGFydCgpO2Zvcih2YXIgcz0wO3M8ZTsrK3MpaS5wb2ludCgocj10W3NdKVswXSxyWzFdKTtpLmxpbmVFbmQoKX1lbHNle3ZhciBsPW5ldyBacihyLHQsbnVsbCwhMCksYz1uZXcgWnIocixudWxsLGwsITEpO2wubz1jLGEucHVzaChsKSxvLnB1c2goYyksbD1uZXcgWnIobix0LG51bGwsITEpLGM9bmV3IFpyKG4sbnVsbCxsLCEwKSxsLm89YyxhLnB1c2gobCksby5wdXNoKGMpfX19KSksby5zb3J0KGUpLFhyKGEpLFhyKG8pLGEubGVuZ3RoKXtmb3IodmFyIHM9MCxsPXIsYz1vLmxlbmd0aDtzPGM7KytzKW9bc10uZT1sPSFsO2Zvcih2YXIgdSxmLGg9YVswXTs7KXtmb3IodmFyIHA9aCxkPSEwO3AudjspaWYoKHA9cC5uKT09PWgpcmV0dXJuO3U9cC56LGkubGluZVN0YXJ0KCk7ZG97aWYocC52PXAuby52PSEwLHAuZSl7aWYoZClmb3Iocz0wLGM9dS5sZW5ndGg7czxjOysrcylpLnBvaW50KChmPXVbc10pWzBdLGZbMV0pO2Vsc2UgbihwLngscC5uLngsMSxpKTtwPXAubn1lbHNle2lmKGQpZm9yKHM9KHU9cC5wLnopLmxlbmd0aC0xO3M+PTA7LS1zKWkucG9pbnQoKGY9dVtzXSlbMF0sZlsxXSk7ZWxzZSBuKHAueCxwLnAueCwtMSxpKTtwPXAucH11PShwPXAubykueixkPSFkfXdoaWxlKCFwLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gWHIodCl7aWYoZT10Lmxlbmd0aCl7Zm9yKHZhciBlLHIsbj0wLGk9dFswXTsrK248ZTspaS5uPXI9dFtuXSxyLnA9aSxpPXI7aS5uPXI9dFswXSxyLnA9aX19ZnVuY3Rpb24gWnIodCxlLHIsbil7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBKcihlLHIsbixpKXtyZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcyxsPXIobyksYz1hLmludmVydChpWzBdLGlbMV0pLHU9e3BvaW50OmYsbGluZVN0YXJ0OnAsbGluZUVuZDpkLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3UucG9pbnQ9Yix1LmxpbmVTdGFydD1fLHUubGluZUVuZD13LHM9W10sZz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3UucG9pbnQ9Zix1LmxpbmVTdGFydD1wLHUubGluZUVuZD1kLHM9dC5tZXJnZShzKTt2YXIgZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9W01hdGguc2luKHIpLC1NYXRoLmNvcyhyKSwwXSxhPTAsbz0wO0VyLnJlc2V0KCk7Zm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7KytzKXt2YXIgYz1lW3NdLHU9Yy5sZW5ndGg7aWYodSlmb3IodmFyIGY9Y1swXSxoPWZbMF0scD1mWzFdLzIrQXQvNCxkPU1hdGguc2luKHApLGc9TWF0aC5jb3MocCksbT0xOzspe209PT11JiYobT0wKTt2YXIgdj0odD1jW21dKVswXSx5PXRbMV0vMitBdC80LHg9TWF0aC5zaW4oeSksYj1NYXRoLmNvcyh5KSxfPXYtaCx3PV8+PTA/MTotMSxUPXcqXyxrPVQ+QXQsTT1kKng7aWYoRXIuYWRkKE1hdGguYXRhbjIoTSp3Kk1hdGguc2luKFQpLGcqYitNKk1hdGguY29zKFQpKSksYSs9az9fK3cqU3Q6XyxrXmg+PXJedj49cil7dmFyIEE9enIoSXIoZiksSXIodCkpO1JyKEEpO3ZhciBTPXpyKGksQSk7UnIoUyk7dmFyIEU9KGteXz49MD8tMToxKSpEdChTWzJdKTsobj5FfHxuPT09RSYmKEFbMF18fEFbMV0pKSYmKG8rPWteXz49MD8xOi0xKX1pZighbSsrKWJyZWFrO2g9dixkPXgsZz1iLGY9dH19cmV0dXJuKGE8LWt0fHxhPGt0JiZFcjwta3QpXjEmb30oYyxnKTtzLmxlbmd0aD8oeHx8KG8ucG9seWdvblN0YXJ0KCkseD0hMCksV3IocywkcixlLG4sbykpOmUmJih4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxvLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsbyksby5saW5lRW5kKCkpLHgmJihvLnBvbHlnb25FbmQoKSx4PSExKSxzPWc9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7by5wb2x5Z29uU3RhcnQoKSxvLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsbyksby5saW5lRW5kKCksby5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBmKHQscil7dmFyIG49YSh0LHIpO2UodD1uWzBdLHI9blsxXSkmJm8ucG9pbnQodCxyKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9YSh0LGUpO2wucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiBwKCl7dS5wb2ludD1oLGwubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZCgpe3UucG9pbnQ9ZixsLmxpbmVFbmQoKX12YXIgZyxtLHY9UXIoKSx5PXIodikseD0hMTtmdW5jdGlvbiBiKHQsZSl7bS5wdXNoKFt0LGVdKTt2YXIgcj1hKHQsZSk7eS5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIF8oKXt5LmxpbmVTdGFydCgpLG09W119ZnVuY3Rpb24gdygpe2IobVswXVswXSxtWzBdWzFdKSx5LmxpbmVFbmQoKTt2YXIgdCxlPXkuY2xlYW4oKSxyPXYuYnVmZmVyKCksbj1yLmxlbmd0aDtpZihtLnBvcCgpLGcucHVzaChtKSxtPW51bGwsbilpZigxJmUpe3ZhciBpLGE9LTE7aWYoKG49KHQ9clswXSkubGVuZ3RoLTEpPjApe2Zvcih4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxvLmxpbmVTdGFydCgpOysrYTxuOylvLnBvaW50KChpPXRbYV0pWzBdLGlbMV0pO28ubGluZUVuZCgpfX1lbHNlIG4+MSYmMiZlJiZyLnB1c2goci5wb3AoKS5jb25jYXQoci5zaGlmdCgpKSkscy5wdXNoKHIuZmlsdGVyKEtyKSl9cmV0dXJuIHV9fWZ1bmN0aW9uIEtyKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIFFyKCl7dmFyIHQsZT1bXTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxwb2ludDpmdW5jdGlvbihlLHIpe3QucHVzaChbZSxyXSl9LGxpbmVFbmQ6TyxidWZmZXI6ZnVuY3Rpb24oKXt2YXIgcj1lO3JldHVybiBlPVtdLHQ9bnVsbCxyfSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9fX1mdW5jdGlvbiAkcih0LGUpe3JldHVybigodD10LngpWzBdPDA/dFsxXS1DdC1rdDpDdC10WzFdKS0oKGU9ZS54KVswXTwwP2VbMV0tQ3Qta3Q6Q3QtZVsxXSl9dmFyIHRuPUpyKFlyLChmdW5jdGlvbih0KXt2YXIgZSxyPU5hTixuPU5hTixpPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxlPTF9LHBvaW50OmZ1bmN0aW9uKGEsbyl7dmFyIHM9YT4wP0F0Oi1BdCxsPXkoYS1yKTt5KGwtQXQpPGt0Pyh0LnBvaW50KHIsbj0obitvKS8yPjA/Q3Q6LUN0KSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsbiksdC5wb2ludChhLG4pLGU9MCk6aSE9PXMmJmw+PUF0JiYoeShyLWkpPGt0JiYoci09aSprdCkseShhLXMpPGt0JiYoYS09cyprdCksbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG89TWF0aC5zaW4odC1yKTtyZXR1cm4geShvKT5rdD9NYXRoLmF0YW4oKE1hdGguc2luKGUpKihhPU1hdGguY29zKG4pKSpNYXRoLnNpbihyKS1NYXRoLnNpbihuKSooaT1NYXRoLmNvcyhlKSkqTWF0aC5zaW4odCkpLyhpKmEqbykpOihlK24pLzJ9KHIsbixhLG8pLHQucG9pbnQoaSxuKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxuKSxlPTApLHQucG9pbnQocj1hLG49byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCkscj1uPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24odCxlLHIsbil7dmFyIGk7aWYobnVsbD09dClpPXIqQ3Qsbi5wb2ludCgtQXQsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQoQXQsaSksbi5wb2ludChBdCwwKSxuLnBvaW50KEF0LC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLUF0LC1pKSxuLnBvaW50KC1BdCwwKSxuLnBvaW50KC1BdCxpKTtlbHNlIGlmKHkodFswXS1lWzBdKT5rdCl7dmFyIGE9dFswXTxlWzBdP0F0Oi1BdDtpPXIqYS8yLG4ucG9pbnQoLWEsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQoYSxpKX1lbHNlIG4ucG9pbnQoZVswXSxlWzFdKX0pLFstQXQsLUF0LzJdKTtmdW5jdGlvbiBlbih0KXt2YXIgZT1NYXRoLmNvcyh0KSxyPWU+MCxuPXkoZSk+a3Q7cmV0dXJuIEpyKGksKGZ1bmN0aW9uKHQpe3ZhciBlLHMsbCxjLHU7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2M9bD0hMSx1PTF9LHBvaW50OmZ1bmN0aW9uKGYsaCl7dmFyIHAsZD1bZixoXSxnPWkoZixoKSxtPXI/Zz8wOm8oZixoKTpnP28oZisoZjwwP0F0Oi1BdCksaCk6MDtpZighZSYmKGM9bD1nKSYmdC5saW5lU3RhcnQoKSxnIT09bCYmKHA9YShlLGQpLChCcihlLHApfHxCcihkLHApKSYmKGRbMF0rPWt0LGRbMV0rPWt0LGc9aShkWzBdLGRbMV0pKSksZyE9PWwpdT0wLGc/KHQubGluZVN0YXJ0KCkscD1hKGQsZSksdC5wb2ludChwWzBdLHBbMV0pKToocD1hKGUsZCksdC5wb2ludChwWzBdLHBbMV0pLHQubGluZUVuZCgpKSxlPXA7ZWxzZSBpZihuJiZlJiZyXmcpe3ZhciB2O20mc3x8ISh2PWEoZCxlLCEwKSl8fCh1PTAscj8odC5saW5lU3RhcnQoKSx0LnBvaW50KHZbMF1bMF0sdlswXVsxXSksdC5wb2ludCh2WzFdWzBdLHZbMV1bMV0pLHQubGluZUVuZCgpKToodC5wb2ludCh2WzFdWzBdLHZbMV1bMV0pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh2WzBdWzBdLHZbMF1bMV0pKSl9IWd8fGUmJkJyKGUsZCl8fHQucG9pbnQoZFswXSxkWzFdKSxlPWQsbD1nLHM9bX0sbGluZUVuZDpmdW5jdGlvbigpe2wmJnQubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gdXwoYyYmbCk8PDF9fX0pLEJuKHQsNipMdCkscj9bMCwtdF06Wy1BdCx0LUF0XSk7ZnVuY3Rpb24gaSh0LHIpe3JldHVybiBNYXRoLmNvcyh0KSpNYXRoLmNvcyhyKT5lfWZ1bmN0aW9uIGEodCxyLG4pe3ZhciBpPVsxLDAsMF0sYT16cihJcih0KSxJcihyKSksbz1QcihhLGEpLHM9YVswXSxsPW8tcypzO2lmKCFsKXJldHVybiFuJiZ0O3ZhciBjPWUqby9sLHU9LWUqcy9sLGY9enIoaSxhKSxoPURyKGksYyk7T3IoaCxEcihhLHUpKTt2YXIgcD1mLGQ9UHIoaCxwKSxnPVByKHAscCksbT1kKmQtZyooUHIoaCxoKS0xKTtpZighKG08MCkpe3ZhciB2PU1hdGguc3FydChtKSx4PURyKHAsKC1kLXYpL2cpO2lmKE9yKHgsaCkseD1Gcih4KSwhbilyZXR1cm4geDt2YXIgYixfPXRbMF0sdz1yWzBdLFQ9dFsxXSxrPXJbMV07dzxfJiYoYj1fLF89dyx3PWIpO3ZhciBNPXctXyxBPXkoTS1BdCk8a3Q7aWYoIUEmJms8VCYmKGI9VCxUPWssaz1iKSxBfHxNPGt0P0E/VCtrPjBeeFsxXTwoeSh4WzBdLV8pPGt0P1Q6ayk6VDw9eFsxXSYmeFsxXTw9azpNPkF0XihfPD14WzBdJiZ4WzBdPD13KSl7dmFyIFM9RHIocCwoLWQrdikvZyk7cmV0dXJuIE9yKFMsaCksW3gsRnIoUyldfX19ZnVuY3Rpb24gbyhlLG4pe3ZhciBpPXI/dDpBdC10LGE9MDtyZXR1cm4gZTwtaT9hfD0xOmU+aSYmKGF8PTIpLG48LWk/YXw9NDpuPmkmJihhfD04KSxhfX1mdW5jdGlvbiBybih0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIGEsbz1pLmEscz1pLmIsbD1vLngsYz1vLnksdT0wLGY9MSxoPXMueC1sLHA9cy55LWM7aWYoYT10LWwsaHx8IShhPjApKXtpZihhLz1oLGg8MCl7aWYoYTx1KXJldHVybjthPGYmJihmPWEpfWVsc2UgaWYoaD4wKXtpZihhPmYpcmV0dXJuO2E+dSYmKHU9YSl9aWYoYT1yLWwsaHx8IShhPDApKXtpZihhLz1oLGg8MCl7aWYoYT5mKXJldHVybjthPnUmJih1PWEpfWVsc2UgaWYoaD4wKXtpZihhPHUpcmV0dXJuO2E8ZiYmKGY9YSl9aWYoYT1lLWMscHx8IShhPjApKXtpZihhLz1wLHA8MCl7aWYoYTx1KXJldHVybjthPGYmJihmPWEpfWVsc2UgaWYocD4wKXtpZihhPmYpcmV0dXJuO2E+dSYmKHU9YSl9aWYoYT1uLWMscHx8IShhPDApKXtpZihhLz1wLHA8MCl7aWYoYT5mKXJldHVybjthPnUmJih1PWEpfWVsc2UgaWYocD4wKXtpZihhPHUpcmV0dXJuO2E8ZiYmKGY9YSl9cmV0dXJuIHU+MCYmKGkuYT17eDpsK3UqaCx5OmMrdSpwfSksZjwxJiYoaS5iPXt4OmwrZipoLHk6YytmKnB9KSxpfX19fX19ZnVuY3Rpb24gbm4oZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBjLHUsZixoLHAsZCxnLG0sdix5LHgsYj1sLF89UXIoKSx3PXJuKGUscixuLGkpLFQ9e3BvaW50OkEsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7VC5wb2ludD1TLHUmJnUucHVzaChmPVtdKTt5PSEwLHY9ITEsZz1tPU5hTn0sbGluZUVuZDpmdW5jdGlvbigpe2MmJihTKGgscCksZCYmdiYmXy5yZWpvaW4oKSxjLnB1c2goXy5idWZmZXIoKSkpO1QucG9pbnQ9QSx2JiZsLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bD1fLGM9W10sdT1bXSx4PSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bD1iLGM9dC5tZXJnZShjKTt2YXIgcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXUubGVuZ3RoLG49dFsxXSxpPTA7aTxyOysraSlmb3IodmFyIGEsbz0xLHM9dVtpXSxsPXMubGVuZ3RoLGM9c1swXTtvPGw7KytvKWE9c1tvXSxjWzFdPD1uP2FbMV0+biYmenQoYyxhLHQpPjAmJisrZTphWzFdPD1uJiZ6dChjLGEsdCk8MCYmLS1lLGM9YTtyZXR1cm4gMCE9PWV9KFtlLGldKSxuPXgmJnIsYT1jLmxlbmd0aDsobnx8YSkmJihsLnBvbHlnb25TdGFydCgpLG4mJihsLmxpbmVTdGFydCgpLGsobnVsbCxudWxsLDEsbCksbC5saW5lRW5kKCkpLGEmJldyKGMsbyxyLGssbCksbC5wb2x5Z29uRW5kKCkpLGM9dT1mPW51bGx9fTtmdW5jdGlvbiBrKHQsbyxsLGMpe3ZhciB1PTAsZj0wO2lmKG51bGw9PXR8fCh1PWEodCxsKSkhPT0oZj1hKG8sbCkpfHxzKHQsbyk8MF5sPjApZG97Yy5wb2ludCgwPT09dXx8Mz09PXU/ZTpuLHU+MT9pOnIpfXdoaWxlKCh1PSh1K2wrNCklNCkhPT1mKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBNKHQsYSl7cmV0dXJuIGU8PXQmJnQ8PW4mJnI8PWEmJmE8PWl9ZnVuY3Rpb24gQSh0LGUpe00odCxlKSYmbC5wb2ludCh0LGUpfWZ1bmN0aW9uIFModCxlKXt2YXIgcj1NKHQ9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTksdCkpLGU9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTksZSkpKTtpZih1JiZmLnB1c2goW3QsZV0pLHkpaD10LHA9ZSxkPXIseT0hMSxyJiYobC5saW5lU3RhcnQoKSxsLnBvaW50KHQsZSkpO2Vsc2UgaWYociYmdilsLnBvaW50KHQsZSk7ZWxzZXt2YXIgbj17YTp7eDpnLHk6bX0sYjp7eDp0LHk6ZX19O3cobik/KHZ8fChsLmxpbmVTdGFydCgpLGwucG9pbnQobi5hLngsbi5hLnkpKSxsLnBvaW50KG4uYi54LG4uYi55KSxyfHxsLmxpbmVFbmQoKSx4PSExKTpyJiYobC5saW5lU3RhcnQoKSxsLnBvaW50KHQsZSkseD0hMSl9Zz10LG09ZSx2PXJ9cmV0dXJuIFR9O2Z1bmN0aW9uIGEodCxpKXtyZXR1cm4geSh0WzBdLWUpPGt0P2k+MD8wOjM6eSh0WzBdLW4pPGt0P2k+MD8yOjE6eSh0WzFdLXIpPGt0P2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHModC54LGUueCl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWEodCwxKSxuPWEoZSwxKTtyZXR1cm4gciE9PW4/ci1uOjA9PT1yP2VbMV0tdFsxXToxPT09cj90WzBdLWVbMF06Mj09PXI/dFsxXS1lWzFdOmVbMF0tdFswXX19ZnVuY3Rpb24gYW4odCl7dmFyIGU9MCxyPUF0LzMsbj1Mbih0KSxpPW4oZSxyKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihlPXRbMF0qQXQvMTgwLHI9dFsxXSpBdC8xODApOltlL0F0KjE4MCxyL0F0KjE4MF19LGl9ZnVuY3Rpb24gb24odCxlKXt2YXIgcj1NYXRoLnNpbih0KSxuPShyK01hdGguc2luKGUpKS8yLGk9MStyKigyKm4tciksYT1NYXRoLnNxcnQoaSkvbjtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGktMipuKk1hdGguc2luKGUpKS9uO3JldHVybltyKk1hdGguc2luKHQqPW4pLGEtcipNYXRoLmNvcyh0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9YS1lO3JldHVybltNYXRoLmF0YW4yKHQscikvbixEdCgoaS0odCp0K3IqcikqbipuKS8oMipuKSldfSxvfXQuZ2VvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLGEsbz17c3RyZWFtOmZ1bmN0aW9uKHQpe3JldHVybiBpJiYoaS52YWxpZD0hMSksKGk9YSh0KSkudmFsaWQ9ITAsaX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW5uKHQ9K3NbMF1bMF0sZT0rc1swXVsxXSxyPStzWzFdWzBdLG49K3NbMV1bMV0pLGkmJihpLnZhbGlkPSExLGk9bnVsbCksbyk6W1t0LGVdLFtyLG5dXX19O3JldHVybiBvLmV4dGVudChbWzAsMF0sWzk2MCw1MDBdXSl9LCh0Lmdlby5jb25pY0VxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBhbihvbil9KS5yYXc9b24sdC5nZW8uYWxiZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCl9LHQuZ2VvLmFsYmVyc1VzYT1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGE9dC5nZW8uYWxiZXJzKCksbz10Lmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSkscz10Lmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxsPXtwb2ludDpmdW5jdGlvbih0LHIpe2U9W3Qscl19fTtmdW5jdGlvbiBjKHQpe3ZhciBhPXRbMF0sbz10WzFdO3JldHVybiBlPW51bGwscihhLG8pLGV8fChuKGEsbyksZSl8fGkoYSxvKSxlfXJldHVybiBjLmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1hLnNjYWxlKCkscj1hLnRyYW5zbGF0ZSgpLG49KHRbMF0tclswXSkvZSxpPSh0WzFdLXJbMV0pL2U7cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZuPj0tLjQyNSYmbjwtLjIxND9vOmk+PS4xNjYmJmk8LjIzNCYmbj49LS4yMTQmJm48LS4xMTU/czphKS5pbnZlcnQodCl9LGMuc3RyZWFtPWZ1bmN0aW9uKHQpe3ZhciBlPWEuc3RyZWFtKHQpLHI9by5zdHJlYW0odCksbj1zLnN0cmVhbSh0KTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24odCxpKXtlLnBvaW50KHQsaSksci5wb2ludCh0LGkpLG4ucG9pbnQodCxpKX0sc3BoZXJlOmZ1bmN0aW9uKCl7ZS5zcGhlcmUoKSxyLnNwaGVyZSgpLG4uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKSxuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksci5saW5lRW5kKCksbi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKSxuLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksci5wb2x5Z29uRW5kKCksbi5wb2x5Z29uRW5kKCl9fX0sYy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEucHJlY2lzaW9uKHQpLG8ucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGMpOmEucHJlY2lzaW9uKCl9LGMuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuc2NhbGUodCksby5zY2FsZSguMzUqdCkscy5zY2FsZSh0KSxjLnRyYW5zbGF0ZShhLnRyYW5zbGF0ZSgpKSk6YS5zY2FsZSgpfSxjLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS50cmFuc2xhdGUoKTt2YXIgZT1hLnNjYWxlKCksdT0rdFswXSxmPSt0WzFdO3JldHVybiByPWEudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1t1LS40NTUqZSxmLS4yMzgqZV0sW3UrLjQ1NSplLGYrLjIzOCplXV0pLnN0cmVhbShsKS5wb2ludCxuPW8udHJhbnNsYXRlKFt1LS4zMDcqZSxmKy4yMDEqZV0pLmNsaXBFeHRlbnQoW1t1LS40MjUqZStrdCxmKy4xMiplK2t0XSxbdS0uMjE0KmUta3QsZisuMjM0KmUta3RdXSkuc3RyZWFtKGwpLnBvaW50LGk9cy50cmFuc2xhdGUoW3UtLjIwNSplLGYrLjIxMiplXSkuY2xpcEV4dGVudChbW3UtLjIxNCplK2t0LGYrLjE2NiplK2t0XSxbdS0uMTE1KmUta3QsZisuMjM0KmUta3RdXSkuc3RyZWFtKGwpLnBvaW50LGN9LGMuc2NhbGUoMTA3MCl9O3ZhciBzbixsbixjbix1bixmbixobixwbj17cG9pbnQ6TyxsaW5lU3RhcnQ6TyxsaW5lRW5kOk8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bG49MCxwbi5saW5lU3RhcnQ9ZG59LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwbi5saW5lU3RhcnQ9cG4ubGluZUVuZD1wbi5wb2ludD1PLHNuKz15KGxuLzIpfX07ZnVuY3Rpb24gZG4oKXt2YXIgdCxlLHIsbjtmdW5jdGlvbiBpKHQsZSl7bG4rPW4qdC1yKmUscj10LG49ZX1wbi5wb2ludD1mdW5jdGlvbihhLG8pe3BuLnBvaW50PWksdD1yPWEsZT1uPW99LHBuLmxpbmVFbmQ9ZnVuY3Rpb24oKXtpKHQsZSl9fXZhciBnbj17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0PGNuJiYoY249dCk7dD5mbiYmKGZuPXQpO2U8dW4mJih1bj1lKTtlPmhuJiYoaG49ZSl9LGxpbmVTdGFydDpPLGxpbmVFbmQ6Tyxwb2x5Z29uU3RhcnQ6Tyxwb2x5Z29uRW5kOk99O2Z1bmN0aW9uIG1uKCl7dmFyIHQ9dm4oNC41KSxlPVtdLHI9e3BvaW50Om4sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ci5wb2ludD1pfSxsaW5lRW5kOm8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ci5saW5lRW5kPXN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9byxyLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PXZuKGUpLHJ9LHJlc3VsdDpmdW5jdGlvbigpe2lmKGUubGVuZ3RoKXt2YXIgdD1lLmpvaW4oIiIpO3JldHVybiBlPVtdLHR9fX07ZnVuY3Rpb24gbihyLG4pe2UucHVzaCgiTSIsciwiLCIsbix0KX1mdW5jdGlvbiBpKHQsbil7ZS5wdXNoKCJNIix0LCIsIixuKSxyLnBvaW50PWF9ZnVuY3Rpb24gYSh0LHIpe2UucHVzaCgiTCIsdCwiLCIscil9ZnVuY3Rpb24gbygpe3IucG9pbnQ9bn1mdW5jdGlvbiBzKCl7ZS5wdXNoKCJaIil9cmV0dXJuIHJ9ZnVuY3Rpb24gdm4odCl7cmV0dXJuIm0wLCIrdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIistMip0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKzIqdCsieiJ9dmFyIHluLHhuPXtwb2ludDpibixsaW5lU3RhcnQ6X24sbGluZUVuZDp3bixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt4bi5saW5lU3RhcnQ9VG59LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt4bi5wb2ludD1ibix4bi5saW5lU3RhcnQ9X24seG4ubGluZUVuZD13bn19O2Z1bmN0aW9uIGJuKHQsZSl7eHIrPXQsYnIrPWUsKytfcn1mdW5jdGlvbiBfbigpe3ZhciB0LGU7ZnVuY3Rpb24gcihyLG4pe3ZhciBpPXItdCxhPW4tZSxvPU1hdGguc3FydChpKmkrYSphKTt3cis9byoodCtyKS8yLFRyKz1vKihlK24pLzIsa3IrPW8sYm4odD1yLGU9bil9eG4ucG9pbnQ9ZnVuY3Rpb24obixpKXt4bi5wb2ludD1yLGJuKHQ9bixlPWkpfX1mdW5jdGlvbiB3bigpe3huLnBvaW50PWJufWZ1bmN0aW9uIFRuKCl7dmFyIHQsZSxyLG47ZnVuY3Rpb24gaSh0LGUpe3ZhciBpPXQtcixhPWUtbixvPU1hdGguc3FydChpKmkrYSphKTt3cis9byoocit0KS8yLFRyKz1vKihuK2UpLzIsa3IrPW8sTXIrPShvPW4qdC1yKmUpKihyK3QpLEFyKz1vKihuK2UpLFNyKz0zKm8sYm4ocj10LG49ZSl9eG4ucG9pbnQ9ZnVuY3Rpb24oYSxvKXt4bi5wb2ludD1pLGJuKHQ9cj1hLGU9bj1vKX0seG4ubGluZUVuZD1mdW5jdGlvbigpe2kodCxlKX19ZnVuY3Rpb24ga24odCl7dmFyIGU9NC41LHI9e3BvaW50Om4sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ci5wb2ludD1pfSxsaW5lRW5kOm8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ci5saW5lRW5kPXN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9byxyLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQscn0scmVzdWx0Ok99O2Z1bmN0aW9uIG4ocixuKXt0Lm1vdmVUbyhyK2UsbiksdC5hcmMocixuLGUsMCxTdCl9ZnVuY3Rpb24gaShlLG4pe3QubW92ZVRvKGUsbiksci5wb2ludD1hfWZ1bmN0aW9uIGEoZSxyKXt0LmxpbmVUbyhlLHIpfWZ1bmN0aW9uIG8oKXtyLnBvaW50PW59ZnVuY3Rpb24gcygpe3QuY2xvc2VQYXRoKCl9cmV0dXJuIHJ9ZnVuY3Rpb24gTW4odCl7dmFyIGU9LjUscj1NYXRoLmNvcygzMCpMdCksbj0xNjtmdW5jdGlvbiBpKHQpe3JldHVybihuP286YSkodCl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gRW4oZSwoZnVuY3Rpb24ocixuKXtyPXQocixuKSxlLnBvaW50KHJbMF0sclsxXSl9KSl9ZnVuY3Rpb24gbyhlKXt2YXIgcixpLGEsbyxsLGMsdSxmLGgscCxkLGcsbT17cG9pbnQ6dixsaW5lU3RhcnQ6eSxsaW5lRW5kOmIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKSxtLmxpbmVTdGFydD1ffSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksbS5saW5lU3RhcnQ9eX19O2Z1bmN0aW9uIHYocixuKXtyPXQocixuKSxlLnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24geSgpe2Y9TmFOLG0ucG9pbnQ9eCxlLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHgocixpKXt2YXIgYT1JcihbcixpXSksbz10KHIsaSk7cyhmLGgsdSxwLGQsZyxmPW9bMF0saD1vWzFdLHU9cixwPWFbMF0sZD1hWzFdLGc9YVsyXSxuLGUpLGUucG9pbnQoZixoKX1mdW5jdGlvbiBiKCl7bS5wb2ludD12LGUubGluZUVuZCgpfWZ1bmN0aW9uIF8oKXt5KCksbS5wb2ludD13LG0ubGluZUVuZD1UfWZ1bmN0aW9uIHcodCxlKXt4KHI9dCxlKSxpPWYsYT1oLG89cCxsPWQsYz1nLG0ucG9pbnQ9eH1mdW5jdGlvbiBUKCl7cyhmLGgsdSxwLGQsZyxpLGEscixvLGwsYyxuLGUpLG0ubGluZUVuZD1iLGIoKX1yZXR1cm4gbX1mdW5jdGlvbiBzKG4saSxhLG8sbCxjLHUsZixoLHAsZCxnLG0sdil7dmFyIHg9dS1uLGI9Zi1pLF89eCp4K2IqYjtpZihfPjQqZSYmbS0tKXt2YXIgdz1vK3AsVD1sK2Qsaz1jK2csTT1NYXRoLnNxcnQodyp3K1QqVCtrKmspLEE9TWF0aC5hc2luKGsvPU0pLFM9eSh5KGspLTEpPGt0fHx5KGEtaCk8a3Q/KGEraCkvMjpNYXRoLmF0YW4yKFQsdyksRT10KFMsQSksQz1FWzBdLEw9RVsxXSxJPUMtbixQPUwtaSx6PWIqSS14KlA7KHoqei9fPmV8fHkoKHgqSStiKlApL18tLjUpPi4zfHxvKnArbCpkK2MqZzxyKSYmKHMobixpLGEsbyxsLGMsQyxMLFMsdy89TSxULz1NLGssbSx2KSx2LnBvaW50KEMsTCkscyhDLEwsUyx3LFQsayx1LGYsaCxwLGQsZyxtLHYpKX19cmV0dXJuIGkucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPShlPXQqdCk+MCYmMTYsaSk6TWF0aC5zcXJ0KGUpfSxpfWZ1bmN0aW9uIEFuKHQpe3ZhciBlPU1uKChmdW5jdGlvbihlLHIpe3JldHVybiB0KFtlKkl0LHIqSXRdKX0pKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEluKGUodCkpfX1mdW5jdGlvbiBTbih0KXt0aGlzLnN0cmVhbT10fWZ1bmN0aW9uIEVuKHQsZSl7cmV0dXJue3BvaW50OmUsc3BoZXJlOmZ1bmN0aW9uKCl7dC5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dC5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBDbih0KXtyZXR1cm4gTG4oKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSkoKX1mdW5jdGlvbiBMbihlKXt2YXIgcixuLGksYSxvLHMsbD1NbigoZnVuY3Rpb24odCxlKXtyZXR1cm5bKHQ9cih0LGUpKVswXSpjK2Esby10WzFdKmNdfSkpLGM9MTUwLHU9NDgwLGY9MjUwLGg9MCxwPTAsZD0wLGc9MCxtPTAsdj10bix5PUwseD1udWxsLGI9bnVsbDtmdW5jdGlvbiBfKHQpe3JldHVyblsodD1pKHRbMF0qTHQsdFsxXSpMdCkpWzBdKmMrYSxvLXRbMV0qY119ZnVuY3Rpb24gdyh0KXtyZXR1cm4odD1pLmludmVydCgodFswXS1hKS9jLChvLXRbMV0pL2MpKSYmW3RbMF0qSXQsdFsxXSpJdF19ZnVuY3Rpb24gVCgpe2k9R3Iobj1PbihkLGcsbSkscik7dmFyIHQ9cihoLHApO3JldHVybiBhPXUtdFswXSpjLG89Zit0WzFdKmMsaygpfWZ1bmN0aW9uIGsoKXtyZXR1cm4gcyYmKHMudmFsaWQ9ITEscz1udWxsKSxffXJldHVybiBfLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gcyYmKHMudmFsaWQ9ITEpLChzPUluKHYobixsKHkodCkpKSkpLnZhbGlkPSEwLHN9LF8uY2xpcEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PW51bGw9PXQ/KHg9dCx0bik6ZW4oKHg9K3QpKkx0KSxrKCkpOnh9LF8uY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10LHk9dD9ubih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdKTpMLGsoKSk6Yn0sXy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxUKCkpOmN9LF8udHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0WzBdLGY9K3RbMV0sVCgpKTpbdSxmXX0sXy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9dFswXSUzNjAqTHQscD10WzFdJTM2MCpMdCxUKCkpOltoKkl0LHAqSXRdfSxfLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10WzBdJTM2MCpMdCxnPXRbMV0lMzYwKkx0LG09dC5sZW5ndGg+Mj90WzJdJTM2MCpMdDowLFQoKSk6W2QqSXQsZypJdCxtKkl0XX0sdC5yZWJpbmQoXyxsLCJwcmVjaXNpb24iKSxmdW5jdGlvbigpe3JldHVybiByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLF8uaW52ZXJ0PXIuaW52ZXJ0JiZ3LFQoKX19ZnVuY3Rpb24gSW4odCl7cmV0dXJuIEVuKHQsKGZ1bmN0aW9uKGUscil7dC5wb2ludChlKkx0LHIqTHQpfSkpfWZ1bmN0aW9uIFBuKHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gem4odCxlKXtyZXR1cm5bdD5BdD90LVN0OnQ8LUF0P3QrU3Q6dCxlXX1mdW5jdGlvbiBPbih0LGUscil7cmV0dXJuIHQ/ZXx8cj9HcihSbih0KSxGbihlLHIpKTpSbih0KTplfHxyP0ZuKGUscik6em59ZnVuY3Rpb24gRG4odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuWyhlKz10KT5BdD9lLVN0OmU8LUF0P2UrU3Q6ZSxyXX19ZnVuY3Rpb24gUm4odCl7dmFyIGU9RG4odCk7cmV0dXJuIGUuaW52ZXJ0PURuKC10KSxlfWZ1bmN0aW9uIEZuKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KSxpPU1hdGguY29zKGUpLGE9TWF0aC5zaW4oZSk7ZnVuY3Rpb24gbyh0LGUpe3ZhciBvPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqbyxsPU1hdGguc2luKHQpKm8sYz1NYXRoLnNpbihlKSx1PWMqcitzKm47cmV0dXJuW01hdGguYXRhbjIobCppLXUqYSxzKnItYypuKSxEdCh1KmkrbCphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG89TWF0aC5jb3MoZSkscz1NYXRoLmNvcyh0KSpvLGw9TWF0aC5zaW4odCkqbyxjPU1hdGguc2luKGUpLHU9YyppLWwqYTtyZXR1cm5bTWF0aC5hdGFuMihsKmkrYyphLHMqcit1Km4pLER0KHUqci1zKm4pXX0sb31mdW5jdGlvbiBCbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMpe3ZhciBsPW8qZTtudWxsIT1pPyhpPU5uKHIsaSksYT1ObihyLGEpLChvPjA/aTxhOmk+YSkmJihpKz1vKlN0KSk6KGk9dCtvKlN0LGE9dC0uNSpsKTtmb3IodmFyIGMsdT1pO28+MD91PmE6dTxhO3UtPWwpcy5wb2ludCgoYz1GcihbciwtbipNYXRoLmNvcyh1KSwtbipNYXRoLnNpbih1KV0pKVswXSxjWzFdKX19ZnVuY3Rpb24gTm4odCxlKXt2YXIgcj1JcihlKTtyWzBdLT10LFJyKHIpO3ZhciBuPU90KC1yWzFdKTtyZXR1cm4oKC1yWzJdPDA/LW46bikrMipNYXRoLlBJLWt0KSUoMipNYXRoLlBJKX1mdW5jdGlvbiBqbihlLHIsbil7dmFyIGk9dC5yYW5nZShlLHIta3QsbikuY29uY2F0KHIpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSkpfX1mdW5jdGlvbiBVbihlLHIsbil7dmFyIGk9dC5yYW5nZShlLHIta3QsbikuY29uY2F0KHIpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHRdfSkpfX1mdW5jdGlvbiBWbih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gcW4odCl7cmV0dXJuIHQudGFyZ2V0fXQuZ2VvLnBhdGg9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG89NC41O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJigiZnVuY3Rpb24iPT10eXBlb2YgbyYmaS5wb2ludFJhZGl1cygrby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGEmJmEudmFsaWR8fChhPW4oaSkpLHQuZ2VvLnN0cmVhbShlLGEpKSxpLnJlc3VsdCgpfWZ1bmN0aW9uIGwoKXtyZXR1cm4gYT1udWxsLHN9cmV0dXJuIHMuYXJlYT1mdW5jdGlvbihlKXtyZXR1cm4gc249MCx0Lmdlby5zdHJlYW0oZSxuKHBuKSksc259LHMuY2VudHJvaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHhyPWJyPV9yPXdyPVRyPWtyPU1yPUFyPVNyPTAsdC5nZW8uc3RyZWFtKGUsbih4bikpLFNyP1tNci9TcixBci9Tcl06a3I/W3dyL2tyLFRyL2tyXTpfcj9beHIvX3IsYnIvX3JdOltOYU4sTmFOXX0scy5ib3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZuPWhuPS0oY249dW49MS8wKSx0Lmdlby5zdHJlYW0oZSxuKGduKSksW1tjbix1bl0sW2ZuLGhuXV19LHMucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0oZT10KT90LnN0cmVhbXx8QW4odCk6TCxsKCkpOmV9LHMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0ocj10KT9uZXcgbW46bmV3IGtuKHQpLCJmdW5jdGlvbiIhPXR5cGVvZiBvJiZpLnBvaW50UmFkaXVzKG8pLGwoKSk6cn0scy5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OihpLnBvaW50UmFkaXVzKCt0KSwrdCkscyk6b30scy5wcm9qZWN0aW9uKHQuZ2VvLmFsYmVyc1VzYSgpKS5jb250ZXh0KG51bGwpfSx0Lmdlby50cmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJue3N0cmVhbTpmdW5jdGlvbihlKXt2YXIgcj1uZXcgU24oZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfX19LFNuLnByb3RvdHlwZT17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX0sdC5nZW8ucHJvamVjdGlvbj1Dbix0Lmdlby5wcm9qZWN0aW9uTXV0YXRvcj1MbiwodC5nZW8uZXF1aXJlY3Rhbmd1bGFyPWZ1bmN0aW9uKCl7cmV0dXJuIENuKFBuKX0pLnJhdz1Qbi5pbnZlcnQ9UG4sdC5nZW8ucm90YXRpb249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qTHQsZVsxXSpMdCkpWzBdKj1JdCxlWzFdKj1JdCxlfXJldHVybiB0PU9uKHRbMF0lMzYwKkx0LHRbMV0qTHQsdC5sZW5ndGg+Mj90WzJdKkx0OjApLGUuaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybihlPXQuaW52ZXJ0KGVbMF0qTHQsZVsxXSpMdCkpWzBdKj1JdCxlWzFdKj1JdCxlfSxlfSx6bi5pbnZlcnQ9UG4sdC5nZW8uY2lyY2xlPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPVswLDBdLG49NjtmdW5jdGlvbiBpKCl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cixuPU9uKC10WzBdKkx0LC10WzFdKkx0LDApLmludmVydCxpPVtdO3JldHVybiBlKG51bGwsbnVsbCwxLHtwb2ludDpmdW5jdGlvbih0LGUpe2kucHVzaCh0PW4odCxlKSksdFswXSo9SXQsdFsxXSo9SXR9fSkse3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltpXX19cmV0dXJuIGkub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5hbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1CbigodD0rcikqTHQsbipMdCksaSk6dH0saS5wcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Qm4odCpMdCwobj0rcikqTHQpLGkpOm59LGkuYW5nbGUoOTApfSx0Lmdlby5kaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG49KGVbMF0tdFswXSkqTHQsaT10WzFdKkx0LGE9ZVsxXSpMdCxvPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobiksbD1NYXRoLnNpbihpKSxjPU1hdGguY29zKGkpLHU9TWF0aC5zaW4oYSksZj1NYXRoLmNvcyhhKTtyZXR1cm4gTWF0aC5hdGFuMihNYXRoLnNxcnQoKHI9ZipvKSpyKyhyPWMqdS1sKmYqcykqciksbCp1K2MqZipzKX0sdC5nZW8uZ3JhdGljdWxlPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsZixoLHA9MTAsZD1wLGc9OTAsbT0zNjAsdj0yLjU7ZnVuY3Rpb24geCgpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmIoKX19ZnVuY3Rpb24gYigpe3JldHVybiB0LnJhbmdlKE1hdGguY2VpbChpL2cpKmcsbixnKS5tYXAoZikuY29uY2F0KHQucmFuZ2UoTWF0aC5jZWlsKGwvbSkqbSxzLG0pLm1hcChoKSkuY29uY2F0KHQucmFuZ2UoTWF0aC5jZWlsKHIvcCkqcCxlLHApLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHkodCVnKT5rdH0pKS5tYXAoYykpLmNvbmNhdCh0LnJhbmdlKE1hdGguY2VpbChvL2QpKmQsYSxkKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB5KHQlbSk+a3R9KSkubWFwKHUpKX1yZXR1cm4geC5saW5lcz1mdW5jdGlvbigpe3JldHVybiBiKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KSl9LHgub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbZihpKS5jb25jYXQoaChzKS5zbGljZSgxKSxmKG4pLnJldmVyc2UoKS5zbGljZSgxKSxoKGwpLnJldmVyc2UoKS5zbGljZSgxKSldfX0seC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/eC5tYWpvckV4dGVudCh0KS5taW5vckV4dGVudCh0KTp4Lm1pbm9yRXh0ZW50KCl9LHgubWFqb3JFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3RbMF1bMF0sbj0rdFsxXVswXSxsPSt0WzBdWzFdLHM9K3RbMV1bMV0saT5uJiYodD1pLGk9bixuPXQpLGw+cyYmKHQ9bCxsPXMscz10KSx4LnByZWNpc2lvbih2KSk6W1tpLGxdLFtuLHNdXX0seC5taW5vckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXVswXSxlPSt0WzFdWzBdLG89K3RbMF1bMV0sYT0rdFsxXVsxXSxyPmUmJih0PXIscj1lLGU9dCksbz5hJiYodD1vLG89YSxhPXQpLHgucHJlY2lzaW9uKHYpKTpbW3Isb10sW2UsYV1dfSx4LnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/eC5tYWpvclN0ZXAodCkubWlub3JTdGVwKHQpOngubWlub3JTdGVwKCl9LHgubWFqb3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt0WzBdLG09K3RbMV0seCk6W2csbV19LHgubWlub3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLGQ9K3RbMV0seCk6W3AsZF19LHgucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PSt0LGM9am4obyxhLDkwKSx1PVVuKHIsZSx2KSxmPWpuKGwscyw5MCksaD1VbihpLG4sdikseCk6dn0seC5tYWpvckV4dGVudChbWy0xODAsLTkwK2t0XSxbMTgwLDkwLWt0XV0pLm1pbm9yRXh0ZW50KFtbLTE4MCwtODAta3RdLFsxODAsODAra3RdXSl9LHQuZ2VvLmdyZWF0QXJjPWZ1bmN0aW9uKCl7dmFyIGUscixuPVZuLGk9cW47ZnVuY3Rpb24gYSgpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpbZXx8bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscnx8aS5hcHBseSh0aGlzLGFyZ3VtZW50cyldfX1yZXR1cm4gYS5kaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiB0Lmdlby5kaXN0YW5jZShlfHxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyfHxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGEuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZT0iZnVuY3Rpb24iPT10eXBlb2YgdD9udWxsOnQsYSk6bn0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P251bGw6dCxhKTppfSxhLnByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2E6MH0sYX0sdC5nZW8uaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcj10WzBdKkx0LG49dFsxXSpMdCxpPWVbMF0qTHQsYT1lWzFdKkx0LG89TWF0aC5jb3Mobikscz1NYXRoLnNpbihuKSxsPU1hdGguY29zKGEpLGM9TWF0aC5zaW4oYSksdT1vKk1hdGguY29zKHIpLGY9bypNYXRoLnNpbihyKSxoPWwqTWF0aC5jb3MoaSkscD1sKk1hdGguc2luKGkpLGQ9MipNYXRoLmFzaW4oTWF0aC5zcXJ0KEZ0KGEtbikrbypsKkZ0KGktcikpKSxnPTEvTWF0aC5zaW4oZCksKG09ZD9mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNpbih0Kj1kKSpnLHI9TWF0aC5zaW4oZC10KSpnLG49cip1K2UqaCxpPXIqZitlKnAsYT1yKnMrZSpjO3JldHVybltNYXRoLmF0YW4yKGksbikqSXQsTWF0aC5hdGFuMihhLE1hdGguc3FydChuKm4raSppKSkqSXRdfTpmdW5jdGlvbigpe3JldHVybltyKkl0LG4qSXRdfSkuZGlzdGFuY2U9ZCxtO3ZhciByLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLGcsbX0sdC5nZW8ubGVuZ3RoPWZ1bmN0aW9uKGUpe3JldHVybiB5bj0wLHQuZ2VvLnN0cmVhbShlLEhuKSx5bn07dmFyIEhuPXtzcGhlcmU6Tyxwb2ludDpPLGxpbmVTdGFydDpmdW5jdGlvbigpe3ZhciB0LGUscjtmdW5jdGlvbiBuKG4saSl7dmFyIGE9TWF0aC5zaW4oaSo9THQpLG89TWF0aC5jb3MoaSkscz15KChuKj1MdCktdCksbD1NYXRoLmNvcyhzKTt5bis9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHM9bypNYXRoLnNpbihzKSkqcysocz1yKmEtZSpvKmwpKnMpLGUqYStyKm8qbCksdD1uLGU9YSxyPW99SG4ucG9pbnQ9ZnVuY3Rpb24oaSxhKXt0PWkqTHQsZT1NYXRoLnNpbihhKj1MdCkscj1NYXRoLmNvcyhhKSxIbi5wb2ludD1ufSxIbi5saW5lRW5kPWZ1bmN0aW9uKCl7SG4ucG9pbnQ9SG4ubGluZUVuZD1PfX0sbGluZUVuZDpPLHBvbHlnb25TdGFydDpPLHBvbHlnb25FbmQ6T307ZnVuY3Rpb24gR24odCxlKXtmdW5jdGlvbiByKGUscil7dmFyIG49TWF0aC5jb3MoZSksaT1NYXRoLmNvcyhyKSxhPXQobippKTtyZXR1cm5bYSppKk1hdGguc2luKGUpLGEqTWF0aC5zaW4ocildfXJldHVybiByLmludmVydD1mdW5jdGlvbih0LHIpe3ZhciBuPU1hdGguc3FydCh0KnQrcipyKSxpPWUobiksYT1NYXRoLnNpbihpKSxvPU1hdGguY29zKGkpO3JldHVybltNYXRoLmF0YW4yKHQqYSxuKm8pLE1hdGguYXNpbihuJiZyKmEvbildfSxyfXZhciBZbj1HbigoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCgyLygxK3QpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gMipNYXRoLmFzaW4odC8yKX0pKTsodC5nZW8uYXppbXV0aGFsRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIENuKFluKX0pLnJhdz1Zbjt2YXIgV249R24oKGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguYWNvcyh0KTtyZXR1cm4gZSYmZS9NYXRoLnNpbihlKX0pLEwpO2Z1bmN0aW9uIFhuKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC50YW4oQXQvNCt0LzIpfSxpPXQ9PT1lP01hdGguc2luKHQpOk1hdGgubG9nKHIvTWF0aC5jb3MoZSkpL01hdGgubG9nKG4oZSkvbih0KSksYT1yKk1hdGgucG93KG4odCksaSkvaTtpZighaSlyZXR1cm4gS247ZnVuY3Rpb24gbyh0LGUpe2E+MD9lPC1DdCtrdCYmKGU9LUN0K2t0KTplPkN0LWt0JiYoZT1DdC1rdCk7dmFyIHI9YS9NYXRoLnBvdyhuKGUpLGkpO3JldHVybltyKk1hdGguc2luKGkqdCksYS1yKk1hdGguY29zKGkqdCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWEtZSxuPVB0KGkpKk1hdGguc3FydCh0KnQrcipyKTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL2ksMipNYXRoLmF0YW4oTWF0aC5wb3coYS9uLDEvaSkpLUN0XX0sb31mdW5jdGlvbiBabih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49dD09PWU/TWF0aC5zaW4odCk6KHItTWF0aC5jb3MoZSkpLyhlLXQpLGk9ci9uK3Q7aWYoeShuKTxrdClyZXR1cm4gUG47ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWktZTtyZXR1cm5bcipNYXRoLnNpbihuKnQpLGktcipNYXRoLmNvcyhuKnQpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLWU7cmV0dXJuW01hdGguYXRhbjIodCxyKS9uLGktUHQobikqTWF0aC5zcXJ0KHQqdCtyKnIpXX0sYX0odC5nZW8uYXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oV24pfSkucmF3PVduLCh0Lmdlby5jb25pY0NvbmZvcm1hbD1mdW5jdGlvbigpe3JldHVybiBhbihYbil9KS5yYXc9WG4sKHQuZ2VvLmNvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYW4oWm4pfSkucmF3PVpuO3ZhciBKbj1HbigoZnVuY3Rpb24odCl7cmV0dXJuIDEvdH0pLE1hdGguYXRhbik7ZnVuY3Rpb24gS24odCxlKXtyZXR1cm5bdCxNYXRoLmxvZyhNYXRoLnRhbihBdC80K2UvMikpXX1mdW5jdGlvbiBRbih0KXt2YXIgZSxyPUNuKHQpLG49ci5zY2FsZSxpPXIudHJhbnNsYXRlLGE9ci5jbGlwRXh0ZW50O3JldHVybiByLnNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci50cmFuc2xhdGU9ZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gdD09PXI/ZT9yLmNsaXBFeHRlbnQobnVsbCk6cjp0fSxyLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5hcHBseShyLGFyZ3VtZW50cyk7aWYobz09PXIpe2lmKGU9bnVsbD09dCl7dmFyIHM9QXQqbigpLGw9aSgpO2EoW1tsWzBdLXMsbFsxXS1zXSxbbFswXStzLGxbMV0rc11dKX19ZWxzZSBlJiYobz1udWxsKTtyZXR1cm4gb30sci5jbGlwRXh0ZW50KG51bGwpfSh0Lmdlby5nbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBDbihKbil9KS5yYXc9Sm4sS24uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMipNYXRoLmF0YW4oTWF0aC5leHAoZSkpLUN0XX0sKHQuZ2VvLm1lcmNhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIFFuKEtuKX0pLnJhdz1Lbjt2YXIgJG49R24oKGZ1bmN0aW9uKCl7cmV0dXJuIDF9KSxNYXRoLmFzaW4pOyh0Lmdlby5vcnRob2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oJG4pfSkucmF3PSRuO3ZhciB0aT1HbigoZnVuY3Rpb24odCl7cmV0dXJuIDEvKDErdCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIDIqTWF0aC5hdGFuKHQpfSkpO2Z1bmN0aW9uIGVpKHQsZSl7cmV0dXJuW01hdGgubG9nKE1hdGgudGFuKEF0LzQrZS8yKSksLXRdfWZ1bmN0aW9uIHJpKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIG5pKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGlpKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVswLDFdLG49MixpPTI7aTxlO2krKyl7Zm9yKDtuPjEmJnp0KHRbcltuLTJdXSx0W3Jbbi0xXV0sdFtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIGFpKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfSh0Lmdlby5zdGVyZW9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIENuKHRpKX0pLnJhdz10aSxlaS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMipNYXRoLmF0YW4oTWF0aC5leHAodCkpLUN0XX0sKHQuZ2VvLnRyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PVFuKGVpKSxlPXQuY2VudGVyLHI9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0P2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0P3IoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9cigpKVswXSx0WzFdLHRbMl0tOTBdfSxyKFswLDAsOTBdKX0pLnJhdz1laSx0Lmdlb209e30sdC5nZW9tLmh1bGw9ZnVuY3Rpb24odCl7dmFyIGU9cmkscj1uaTtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuKHQpO2Z1bmN0aW9uIG4odCl7aWYodC5sZW5ndGg8MylyZXR1cm5bXTt2YXIgbixpPWRlKGUpLGE9ZGUociksbz10Lmxlbmd0aCxzPVtdLGw9W107Zm9yKG49MDtuPG87bisrKXMucHVzaChbK2kuY2FsbCh0aGlzLHRbbl0sbiksK2EuY2FsbCh0aGlzLHRbbl0sbiksbl0pO2ZvcihzLnNvcnQoYWkpLG49MDtuPG87bisrKWwucHVzaChbc1tuXVswXSwtc1tuXVsxXV0pO3ZhciBjPWlpKHMpLHU9aWkobCksZj11WzBdPT09Y1swXSxoPXVbdS5sZW5ndGgtMV09PT1jW2MubGVuZ3RoLTFdLHA9W107Zm9yKG49Yy5sZW5ndGgtMTtuPj0wOy0tbilwLnB1c2godFtzW2Nbbl1dWzJdXSk7Zm9yKG49K2Y7bjx1Lmxlbmd0aC1oOysrbilwLnB1c2godFtzW3Vbbl1dWzJdXSk7cmV0dXJuIHB9cmV0dXJuIG4ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHQuZ2VvbS5wb2x5Z29uPWZ1bmN0aW9uKHQpe3JldHVybiBVKHQsb2kpLHR9O3ZhciBvaT10Lmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gc2kodCxlLHIpe3JldHVybihyWzBdLWVbMF0pKih0WzFdLWVbMV0pPChyWzFdLWVbMV0pKih0WzBdLWVbMF0pfWZ1bmN0aW9uIGxpKHQsZSxyLG4pe3ZhciBpPXRbMF0sYT1yWzBdLG89ZVswXS1pLHM9blswXS1hLGw9dFsxXSxjPXJbMV0sdT1lWzFdLWwsZj1uWzFdLWMsaD0ocyoobC1jKS1mKihpLWEpKS8oZipvLXMqdSk7cmV0dXJuW2kraCpvLGwraCp1XX1mdW5jdGlvbiBjaSh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4hKGVbMF0tclswXXx8ZVsxXS1yWzFdKX1vaS5hcmVhPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9LTEscj10aGlzLmxlbmd0aCxuPXRoaXNbci0xXSxpPTA7KytlPHI7KXQ9bixuPXRoaXNbZV0saSs9dFsxXSpuWzBdLXRbMF0qblsxXTtyZXR1cm4uNSppfSxvaS5jZW50cm9pZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49LTEsaT10aGlzLmxlbmd0aCxhPTAsbz0wLHM9dGhpc1tpLTFdO2Zvcihhcmd1bWVudHMubGVuZ3RofHwodD0tMS8oNip0aGlzLmFyZWEoKSkpOysrbjxpOyllPXMscz10aGlzW25dLHI9ZVswXSpzWzFdLXNbMF0qZVsxXSxhKz0oZVswXStzWzBdKSpyLG8rPShlWzFdK3NbMV0pKnI7cmV0dXJuW2EqdCxvKnRdfSxvaS5jbGlwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scz1jaSh0KSxsPS0xLGM9dGhpcy5sZW5ndGgtY2kodGhpcyksdT10aGlzW2MtMV07KytsPGM7KXtmb3IoZT10LnNsaWNlKCksdC5sZW5ndGg9MCxpPXRoaXNbbF0sYT1lWyhuPWUubGVuZ3RoLXMpLTFdLHI9LTE7KytyPG47KXNpKG89ZVtyXSx1LGkpPyhzaShhLHUsaSl8fHQucHVzaChsaShhLG8sdSxpKSksdC5wdXNoKG8pKTpzaShhLHUsaSkmJnQucHVzaChsaShhLG8sdSxpKSksYT1vO3MmJnQucHVzaCh0WzBdKSx1PWl9cmV0dXJuIHR9O3ZhciB1aSxmaSxoaSxwaSxkaSxnaT1bXSxtaT1bXTtmdW5jdGlvbiB2aSgpe1JpKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiB5aSh0KXt2YXIgZT1naS5wb3AoKXx8bmV3IHZpO3JldHVybiBlLnNpdGU9dCxlfWZ1bmN0aW9uIHhpKHQpe0VpKHQpLGhpLnJlbW92ZSh0KSxnaS5wdXNoKHQpLFJpKHQpfWZ1bmN0aW9uIGJpKHQpe3ZhciBlPXQuY2lyY2xlLHI9ZS54LG49ZS5jeSxpPXt4OnIseTpufSxhPXQuUCxvPXQuTixzPVt0XTt4aSh0KTtmb3IodmFyIGw9YTtsLmNpcmNsZSYmeShyLWwuY2lyY2xlLngpPGt0JiZ5KG4tbC5jaXJjbGUuY3kpPGt0OylhPWwuUCxzLnVuc2hpZnQobCkseGkobCksbD1hO3MudW5zaGlmdChsKSxFaShsKTtmb3IodmFyIGM9bztjLmNpcmNsZSYmeShyLWMuY2lyY2xlLngpPGt0JiZ5KG4tYy5jaXJjbGUuY3kpPGt0OylvPWMuTixzLnB1c2goYykseGkoYyksYz1vO3MucHVzaChjKSxFaShjKTt2YXIgdSxmPXMubGVuZ3RoO2Zvcih1PTE7dTxmOysrdSljPXNbdV0sbD1zW3UtMV0semkoYy5lZGdlLGwuc2l0ZSxjLnNpdGUsaSk7bD1zWzBdLChjPXNbZi0xXSkuZWRnZT1JaShsLnNpdGUsYy5zaXRlLG51bGwsaSksU2kobCksU2koYyl9ZnVuY3Rpb24gX2kodCl7Zm9yKHZhciBlLHIsbixpLGE9dC54LG89dC55LHM9aGkuXztzOylpZigobj13aShzLG8pLWEpPmt0KXM9cy5MO2Vsc2V7aWYoISgoaT1hLVRpKHMsbykpPmt0KSl7bj4ta3Q/KGU9cy5QLHI9cyk6aT4ta3Q/KGU9cyxyPXMuTik6ZT1yPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfXZhciBsPXlpKHQpO2lmKGhpLmluc2VydChlLGwpLGV8fHIpe2lmKGU9PT1yKXJldHVybiBFaShlKSxyPXlpKGUuc2l0ZSksaGkuaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1JaShlLnNpdGUsbC5zaXRlKSxTaShlKSx2b2lkIFNpKHIpO2lmKHIpe0VpKGUpLEVpKHIpO3ZhciBjPWUuc2l0ZSx1PWMueCxmPWMueSxoPXQueC11LHA9dC55LWYsZD1yLnNpdGUsZz1kLngtdSxtPWQueS1mLHY9MiooaCptLXAqZykseT1oKmgrcCpwLHg9ZypnK20qbSxiPXt4OihtKnktcCp4KS92K3UseTooaCp4LWcqeSkvditmfTt6aShyLmVkZ2UsYyxkLGIpLGwuZWRnZT1JaShjLHQsbnVsbCxiKSxyLmVkZ2U9SWkodCxkLG51bGwsYiksU2koZSksU2kocil9ZWxzZSBsLmVkZ2U9SWkoZS5zaXRlLGwuc2l0ZSl9fWZ1bmN0aW9uIHdpKHQsZSl7dmFyIHI9dC5zaXRlLG49ci54LGk9ci55LGE9aS1lO2lmKCFhKXJldHVybiBuO3ZhciBvPXQuUDtpZighbylyZXR1cm4tMS8wO3ZhciBzPShyPW8uc2l0ZSkueCxsPXIueSxjPWwtZTtpZighYylyZXR1cm4gczt2YXIgdT1zLW4sZj0xL2EtMS9jLGg9dS9jO3JldHVybiBmPygtaCtNYXRoLnNxcnQoaCpoLTIqZioodSp1LygtMipjKS1sK2MvMitpLWEvMikpKS9mK246KG4rcykvMn1mdW5jdGlvbiBUaSh0LGUpe3ZhciByPXQuTjtpZihyKXJldHVybiB3aShyLGUpO3ZhciBuPXQuc2l0ZTtyZXR1cm4gbi55PT09ZT9uLng6MS8wfWZ1bmN0aW9uIGtpKHQpe3RoaXMuc2l0ZT10LHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gTWkodCxlKXtyZXR1cm4gZS5hbmdsZS10LmFuZ2xlfWZ1bmN0aW9uIEFpKCl7UmkodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIFNpKHQpe3ZhciBlPXQuUCxyPXQuTjtpZihlJiZyKXt2YXIgbj1lLnNpdGUsaT10LnNpdGUsYT1yLnNpdGU7aWYobiE9PWEpe3ZhciBvPWkueCxzPWkueSxsPW4ueC1vLGM9bi55LXMsdT1hLngtbyxmPTIqKGwqKG09YS55LXMpLWMqdSk7aWYoIShmPj0tTXQpKXt2YXIgaD1sKmwrYypjLHA9dSp1K20qbSxkPShtKmgtYypwKS9mLGc9KGwqcC11KmgpL2YsbT1nK3Msdj1taS5wb3AoKXx8bmV3IEFpO3YuYXJjPXQsdi5zaXRlPWksdi54PWQrbyx2Lnk9bStNYXRoLnNxcnQoZCpkK2cqZyksdi5jeT1tLHQuY2lyY2xlPXY7Zm9yKHZhciB5PW51bGwseD1kaS5fO3g7KWlmKHYueTx4Lnl8fHYueT09PXgueSYmdi54PD14Lngpe2lmKCF4Lkwpe3k9eC5QO2JyZWFrfXg9eC5MfWVsc2V7aWYoIXguUil7eT14O2JyZWFrfXg9eC5SfWRpLmluc2VydCh5LHYpLHl8fChwaT12KX19fX1mdW5jdGlvbiBFaSh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwocGk9ZS5OKSxkaS5yZW1vdmUoZSksbWkucHVzaChlKSxSaShlKSx0LmNpcmNsZT1udWxsKX1mdW5jdGlvbiBDaSh0LGUpe3ZhciByPXQuYjtpZihyKXJldHVybiEwO3ZhciBuLGksYT10LmEsbz1lWzBdWzBdLHM9ZVsxXVswXSxsPWVbMF1bMV0sYz1lWzFdWzFdLHU9dC5sLGY9dC5yLGg9dS54LHA9dS55LGQ9Zi54LGc9Zi55LG09KGgrZCkvMix2PShwK2cpLzI7aWYoZz09PXApe2lmKG08b3x8bT49cylyZXR1cm47aWYoaD5kKXtpZihhKXtpZihhLnk+PWMpcmV0dXJufWVsc2UgYT17eDptLHk6bH07cj17eDptLHk6Y319ZWxzZXtpZihhKXtpZihhLnk8bClyZXR1cm59ZWxzZSBhPXt4Om0seTpjfTtyPXt4Om0seTpsfX19ZWxzZSBpZihpPXYtKG49KGgtZCkvKGctcCkpKm0sbjwtMXx8bj4xKWlmKGg+ZCl7aWYoYSl7aWYoYS55Pj1jKXJldHVybn1lbHNlIGE9e3g6KGwtaSkvbix5Omx9O3I9e3g6KGMtaSkvbix5OmN9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDooYy1pKS9uLHk6Y307cj17eDoobC1pKS9uLHk6bH19ZWxzZSBpZihwPGcpe2lmKGEpe2lmKGEueD49cylyZXR1cm59ZWxzZSBhPXt4Om8seTpuKm8raX07cj17eDpzLHk6bipzK2l9fWVsc2V7aWYoYSl7aWYoYS54PG8pcmV0dXJufWVsc2UgYT17eDpzLHk6bipzK2l9O3I9e3g6byx5Om4qbytpfX1yZXR1cm4gdC5hPWEsdC5iPXIsITB9ZnVuY3Rpb24gTGkodCxlKXt0aGlzLmw9dCx0aGlzLnI9ZSx0aGlzLmE9dGhpcy5iPW51bGx9ZnVuY3Rpb24gSWkodCxlLHIsbil7dmFyIGk9bmV3IExpKHQsZSk7cmV0dXJuIHVpLnB1c2goaSksciYmemkoaSx0LGUsciksbiYmemkoaSxlLHQsbiksZmlbdC5pXS5lZGdlcy5wdXNoKG5ldyBPaShpLHQsZSkpLGZpW2UuaV0uZWRnZXMucHVzaChuZXcgT2koaSxlLHQpKSxpfWZ1bmN0aW9uIFBpKHQsZSxyKXt2YXIgbj1uZXcgTGkodCxudWxsKTtyZXR1cm4gbi5hPWUsbi5iPXIsdWkucHVzaChuKSxufWZ1bmN0aW9uIHppKHQsZSxyLG4pe3QuYXx8dC5iP3QubD09PXI/dC5iPW46dC5hPW46KHQuYT1uLHQubD1lLHQucj1yKX1mdW5jdGlvbiBPaSh0LGUscil7dmFyIG49dC5hLGk9dC5iO3RoaXMuZWRnZT10LHRoaXMuc2l0ZT1lLHRoaXMuYW5nbGU9cj9NYXRoLmF0YW4yKHIueS1lLnksci54LWUueCk6dC5sPT09ZT9NYXRoLmF0YW4yKGkueC1uLngsbi55LWkueSk6TWF0aC5hdGFuMihuLngtaS54LGkueS1uLnkpfWZ1bmN0aW9uIERpKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gUmkodCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiBGaSh0LGUpe3ZhciByPWUsbj1lLlIsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOnQuXz1uLG4uVT1pLHIuVT1uLHIuUj1uLkwsci5SJiYoci5SLlU9ciksbi5MPXJ9ZnVuY3Rpb24gQmkodCxlKXt2YXIgcj1lLG49ZS5MLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjp0Ll89bixuLlU9aSxyLlU9bixyLkw9bi5SLHIuTCYmKHIuTC5VPXIpLG4uUj1yfWZ1bmN0aW9uIE5pKHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1mdW5jdGlvbiBqaSh0LGUpe3ZhciByLG4saSxhPXQuc29ydChVaSkucG9wKCk7Zm9yKHVpPVtdLGZpPW5ldyBBcnJheSh0Lmxlbmd0aCksaGk9bmV3IERpLGRpPW5ldyBEaTs7KWlmKGk9cGksYSYmKCFpfHxhLnk8aS55fHxhLnk9PT1pLnkmJmEueDxpLngpKWEueD09PXImJmEueT09PW58fChmaVthLmldPW5ldyBraShhKSxfaShhKSxyPWEueCxuPWEueSksYT10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7YmkoaS5hcmMpfWUmJihmdW5jdGlvbih0KXtmb3IodmFyIGUscj11aSxuPXJuKHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0pLGk9ci5sZW5ndGg7aS0tOykoIUNpKGU9cltpXSx0KXx8IW4oZSl8fHkoZS5hLngtZS5iLngpPGt0JiZ5KGUuYS55LWUuYi55KTxrdCkmJihlLmE9ZS5iPW51bGwsci5zcGxpY2UoaSwxKSl9KGUpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmPXRbMF1bMF0saD10WzFdWzBdLHA9dFswXVsxXSxkPXRbMV1bMV0sZz1maSxtPWcubGVuZ3RoO20tLTspaWYoKGE9Z1ttXSkmJmEucHJlcGFyZSgpKWZvcihsPShzPWEuZWRnZXMpLmxlbmd0aCxvPTA7bzxsOyluPSh1PXNbb10uZW5kKCkpLngsaT11LnksZT0oYz1zWysrbyVsXS5zdGFydCgpKS54LHI9Yy55LCh5KG4tZSk+a3R8fHkoaS1yKT5rdCkmJihzLnNwbGljZShvLDAsbmV3IE9pKFBpKGEuc2l0ZSx1LHkobi1mKTxrdCYmZC1pPmt0P3t4OmYseTp5KGUtZik8a3Q/cjpkfTp5KGktZCk8a3QmJmgtbj5rdD97eDp5KHItZCk8a3Q/ZTpoLHk6ZH06eShuLWgpPGt0JiZpLXA+a3Q/e3g6aCx5OnkoZS1oKTxrdD9yOnB9OnkoaS1wKTxrdCYmbi1mPmt0P3t4Onkoci1wKTxrdD9lOmYseTpwfTpudWxsKSxhLnNpdGUsbnVsbCkpLCsrbCl9KGUpKTt2YXIgbz17Y2VsbHM6ZmksZWRnZXM6dWl9O3JldHVybiBoaT1kaT11aT1maT1udWxsLG99ZnVuY3Rpb24gVWkodCxlKXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH1raS5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMuZWRnZXMscj1lLmxlbmd0aDtyLS07KSh0PWVbcl0uZWRnZSkuYiYmdC5hfHxlLnNwbGljZShyLDEpO3JldHVybiBlLnNvcnQoTWkpLGUubGVuZ3RofSxPaS5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9fSxEaS5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbih0LGUpe3ZhciByLG4saTtpZih0KXtpZihlLlA9dCxlLk49dC5OLHQuTiYmKHQuTi5QPWUpLHQuTj1lLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPWV9ZWxzZSB0LlI9ZTtyPXR9ZWxzZSB0aGlzLl8/KHQ9TmkodGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUscj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLHI9bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9cixlLkM9ITAsdD1lO3ImJnIuQzspcj09PShuPXIuVSkuTD8oaT1uLlIpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLHQ9bik6KHQ9PT1yLlImJihGaSh0aGlzLHIpLHI9KHQ9cikuVSksci5DPSExLG4uQz0hMCxCaSh0aGlzLG4pKTooaT1uLkwpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLHQ9bik6KHQ9PT1yLkwmJihCaSh0aGlzLHIpLHI9KHQ9cikuVSksci5DPSExLG4uQz0hMCxGaSh0aGlzLG4pKSxyPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIGUscixuLGk9dC5VLGE9dC5MLG89dC5SO2lmKHI9YT9vP05pKG8pOmE6byxpP2kuTD09PXQ/aS5MPXI6aS5SPXI6dGhpcy5fPXIsYSYmbz8obj1yLkMsci5DPXQuQyxyLkw9YSxhLlU9cixyIT09bz8oaT1yLlUsci5VPXQuVSx0PXIuUixpLkw9dCxyLlI9byxvLlU9cik6KHIuVT1pLGk9cix0PXIuUikpOihuPXQuQyx0PXIpLHQmJih0LlU9aSksIW4paWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PWkuTCl7aWYoKGU9aS5SKS5DJiYoZS5DPSExLGkuQz0hMCxGaSh0aGlzLGkpLGU9aS5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLEJpKHRoaXMsZSksZT1pLlIpLGUuQz1pLkMsaS5DPWUuUi5DPSExLEZpKHRoaXMsaSksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9aS5MKS5DJiYoZS5DPSExLGkuQz0hMCxCaSh0aGlzLGkpLGU9aS5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLEZpKHRoaXMsZSksZT1pLkwpLGUuQz1pLkMsaS5DPWUuTC5DPSExLEJpKHRoaXMsaSksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9aSxpPWkuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fSx0Lmdlb20udm9yb25vaT1mdW5jdGlvbih0KXt2YXIgZT1yaSxyPW5pLG49ZSxpPXIsYT1WaTtpZih0KXJldHVybiBvKHQpO2Z1bmN0aW9uIG8odCl7dmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPWFbMF1bMF0sbj1hWzBdWzFdLGk9YVsxXVswXSxvPWFbMV1bMV07cmV0dXJuIGppKHModCksYSkuY2VsbHMuZm9yRWFjaCgoZnVuY3Rpb24oYSxzKXt2YXIgbD1hLmVkZ2VzLGM9YS5zaXRlOyhlW3NdPWwubGVuZ3RoP2wubWFwKChmdW5jdGlvbih0KXt2YXIgZT10LnN0YXJ0KCk7cmV0dXJuW2UueCxlLnldfSkpOmMueD49ciYmYy54PD1pJiZjLnk+PW4mJmMueTw9bz9bW3Isb10sW2ksb10sW2ksbl0sW3Isbl1dOltdKS5wb2ludD10W3NdfSkpLGV9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3g6TWF0aC5yb3VuZChuKHQsZSkva3QpKmt0LHk6TWF0aC5yb3VuZChpKHQsZSkva3QpKmt0LGk6ZX19KSl9cmV0dXJuIG8ubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGppKHModCkpLmVkZ2VzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubCYmdC5yfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue3NvdXJjZTp0W2UubC5pXSx0YXJnZXQ6dFtlLnIuaV19fSkpfSxvLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gamkocyh0KSkuY2VsbHMuZm9yRWFjaCgoZnVuY3Rpb24ocixuKXtmb3IodmFyIGksYSxvLHMsbD1yLnNpdGUsYz1yLmVkZ2VzLnNvcnQoTWkpLHU9LTEsZj1jLmxlbmd0aCxoPWNbZi0xXS5lZGdlLHA9aC5sPT09bD9oLnI6aC5sOysrdTxmOyloLGk9cCxwPShoPWNbdV0uZWRnZSkubD09PWw/aC5yOmgubCxuPGkuaSYmbjxwLmkmJihvPWkscz1wLCgoYT1sKS54LXMueCkqKG8ueS1hLnkpLShhLngtby54KSoocy55LWEueSk8MCkmJmUucHVzaChbdFtuXSx0W2kuaV0sdFtwLmldXSl9KSksZX0sby54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWRlKGU9dCksbyk6ZX0sby55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWRlKHI9dCksbyk6cn0sby5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/Vmk6dCxvKTphPT09Vmk/bnVsbDphfSxvLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/by5jbGlwRXh0ZW50KHQmJltbMCwwXSx0XSk6YT09PVZpP251bGw6YSYmYVsxXX0sb307dmFyIFZpPVtbLTFlNiwtMWU2XSxbMWU2LDFlNl1dO2Z1bmN0aW9uIHFpKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gSGkodCl7cmV0dXJuIHQueX1mdW5jdGlvbiBHaSh0LGUscixuLGksYSl7aWYoIXQoZSxyLG4saSxhKSl7dmFyIG89LjUqKHIraSkscz0uNSoobithKSxsPWUubm9kZXM7bFswXSYmR2kodCxsWzBdLHIsbixvLHMpLGxbMV0mJkdpKHQsbFsxXSxvLG4saSxzKSxsWzJdJiZHaSh0LGxbMl0scixzLG8sYSksbFszXSYmR2kodCxsWzNdLG8scyxpLGEpfX1mdW5jdGlvbiBZaSh0LGUscixuLGksYSxvKXt2YXIgcyxsPTEvMDtyZXR1cm4gZnVuY3Rpb24gdChjLHUsZixoLHApe2lmKCEodT5hfHxmPm98fGg8bnx8cDxpKSl7aWYoZD1jLnBvaW50KXt2YXIgZCxnPWUtYy54LG09ci1jLnksdj1nKmcrbSptO2lmKHY8bCl7dmFyIHk9TWF0aC5zcXJ0KGw9dik7bj1lLXksaT1yLXksYT1lK3ksbz1yK3kscz1kfX1mb3IodmFyIHg9Yy5ub2RlcyxiPS41Kih1K2gpLF89LjUqKGYrcCksdz0ocj49Xyk8PDF8ZT49YixUPXcrNDt3PFQ7Kyt3KWlmKGM9eFszJnddKXN3aXRjaCgzJncpe2Nhc2UgMDp0KGMsdSxmLGIsXyk7YnJlYWs7Y2FzZSAxOnQoYyxiLGYsaCxfKTticmVhaztjYXNlIDI6dChjLHUsXyxiLHApO2JyZWFrO2Nhc2UgMzp0KGMsYixfLGgscCl9fX0odCxuLGksYSxvKSxzfWZ1bmN0aW9uIFdpKGUscil7ZT10LnJnYihlKSxyPXQucmdiKHIpO3ZhciBuPWUucixpPWUuZyxhPWUuYixvPXIuci1uLHM9ci5nLWksbD1yLmItYTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIiMiK3NlKE1hdGgucm91bmQobitvKnQpKStzZShNYXRoLnJvdW5kKGkrcyp0KSkrc2UoTWF0aC5yb3VuZChhK2wqdCkpfX1mdW5jdGlvbiBYaSh0LGUpe3ZhciByLG49e30saT17fTtmb3IociBpbiB0KXIgaW4gZT9uW3JdPSRpKHRbcl0sZVtyXSk6aVtyXT10W3JdO2ZvcihyIGluIGUpciBpbiB0fHwoaVtyXT1lW3JdKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHIgaW4gbilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fWZ1bmN0aW9uIFppKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gdCooMS1yKStlKnJ9fWZ1bmN0aW9uIEppKHQsZSl7dmFyIHIsbixpLGE9S2kubGFzdEluZGV4PVFpLmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj1LaS5leGVjKHQpKSYmKG49UWkuZXhlYyhlKSk7KShpPW4uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OlppKHIsbil9KSksYT1RaS5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2xbMF0/KGU9bFswXS54LGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gZX06KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9dC5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKGUpe3JldHVybiB0Lmdlb20udm9yb25vaSgpLnRyaWFuZ2xlcyhlKX0sdC5nZW9tLnF1YWR0cmVlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbz1yaSxzPW5pO2lmKGE9YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbz1xaSxzPUhpLDM9PT1hJiYoaT1yLG49ZSxyPWU9MCksbCh0KTtmdW5jdGlvbiBsKHQpe3ZhciBsLGMsdSxmLGgscCxkLGcsbSx2PWRlKG8pLHg9ZGUocyk7aWYobnVsbCE9ZSlwPWUsZD1yLGc9bixtPWk7ZWxzZSBpZihnPW09LShwPWQ9MS8wKSxjPVtdLHU9W10saD10Lmxlbmd0aCxhKWZvcihmPTA7ZjxoOysrZikobD10W2ZdKS54PHAmJihwPWwueCksbC55PGQmJihkPWwueSksbC54PmcmJihnPWwueCksbC55Pm0mJihtPWwueSksYy5wdXNoKGwueCksdS5wdXNoKGwueSk7ZWxzZSBmb3IoZj0wO2Y8aDsrK2Ype3ZhciBiPSt2KGw9dFtmXSxmKSxfPSt4KGwsZik7YjxwJiYocD1iKSxfPGQmJihkPV8pLGI+ZyYmKGc9YiksXz5tJiYobT1fKSxjLnB1c2goYiksdS5wdXNoKF8pfXZhciB3PWctcCxUPW0tZDtmdW5jdGlvbiBrKHQsZSxyLG4saSxhLG8scyl7aWYoIWlzTmFOKHIpJiYhaXNOYU4obikpaWYodC5sZWFmKXt2YXIgbD10LngsYz10Lnk7aWYobnVsbCE9bClpZih5KGwtcikreShjLW4pPC4wMSlNKHQsZSxyLG4saSxhLG8scyk7ZWxzZXt2YXIgdT10LnBvaW50O3QueD10Lnk9dC5wb2ludD1udWxsLE0odCx1LGwsYyxpLGEsbyxzKSxNKHQsZSxyLG4saSxhLG8scyl9ZWxzZSB0Lng9cix0Lnk9bix0LnBvaW50PWV9ZWxzZSBNKHQsZSxyLG4saSxhLG8scyl9ZnVuY3Rpb24gTSh0LGUscixuLGksYSxvLHMpe3ZhciBsPS41KihpK28pLGM9LjUqKGErcyksdT1yPj1sLGY9bj49YyxoPWY8PDF8dTt0LmxlYWY9ITEsdT9pPWw6bz1sLGY/YT1jOnM9YyxrKHQ9dC5ub2Rlc1toXXx8KHQubm9kZXNbaF09e2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsfSksZSxyLG4saSxhLG8scyl9dz5UP209ZCt3Omc9cCtUO3ZhciBBPXtsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbCxhZGQ6ZnVuY3Rpb24odCl7ayhBLHQsK3YodCwrK2YpLCt4KHQsZikscCxkLGcsbSl9LHZpc2l0OmZ1bmN0aW9uKHQpe0dpKHQsQSxwLGQsZyxtKX0sZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gWWkoQSx0WzBdLHRbMV0scCxkLGcsbSl9fTtpZihmPS0xLG51bGw9PWUpe2Zvcig7KytmPGg7KWsoQSx0W2ZdLGNbZl0sdVtmXSxwLGQsZyxtKTstLWZ9ZWxzZSB0LmZvckVhY2goQS5hZGQpO3JldHVybiBjPXU9dD1sPW51bGwsQX1yZXR1cm4gbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbCk6b30sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsbCk6c30sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/ZT1yPW49aT1udWxsOihlPSt0WzBdWzBdLHI9K3RbMF1bMV0sbj0rdFsxXVswXSxpPSt0WzFdWzFdKSxsKTpudWxsPT1lP251bGw6W1tlLHJdLFtuLGldXX0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT1yPTAsbj0rdFswXSxpPSt0WzFdKSxsKTpudWxsPT1lP251bGw6W24tZSxpLXJdfSxsfSx0LmludGVycG9sYXRlUmdiPVdpLHQuaW50ZXJwb2xhdGVPYmplY3Q9WGksdC5pbnRlcnBvbGF0ZU51bWJlcj1aaSx0LmludGVycG9sYXRlU3RyaW5nPUppO3ZhciBLaT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csUWk9bmV3IFJlZ0V4cChLaS5zb3VyY2UsImciKTtmdW5jdGlvbiAkaShlLHIpe2Zvcih2YXIgbixpPXQuaW50ZXJwb2xhdG9ycy5sZW5ndGg7LS1pPj0wJiYhKG49dC5pbnRlcnBvbGF0b3JzW2ldKGUscikpOyk7cmV0dXJuIG59ZnVuY3Rpb24gdGEodCxlKXt2YXIgcixuPVtdLGk9W10sYT10Lmxlbmd0aCxvPWUubGVuZ3RoLHM9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihyPTA7cjxzOysrciluLnB1c2goJGkodFtyXSxlW3JdKSk7Zm9yKDtyPGE7KytyKWlbcl09dFtyXTtmb3IoO3I8bzsrK3IpaVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3I8czsrK3IpaVtyXT1uW3JdKHQpO3JldHVybiBpfX10LmludGVycG9sYXRlPSRpLHQuaW50ZXJwb2xhdG9ycz1bZnVuY3Rpb24odCxlKXt2YXIgcj10eXBlb2YgZTtyZXR1cm4oInN0cmluZyI9PT1yP3BlLmhhcyhlLnRvTG93ZXJDYXNlKCkpfHwvXigjfHJnYlwofGhzbFwoKS9pLnRlc3QoZSk/V2k6Smk6ZSBpbnN0YW5jZW9mIFZ0P1dpOkFycmF5LmlzQXJyYXkoZSk/dGE6Im9iamVjdCI9PT1yJiZpc05hTihlKT9YaTpaaSkodCxlKX1dLHQuaW50ZXJwb2xhdGVBcnJheT10YTt2YXIgZWE9ZnVuY3Rpb24oKXtyZXR1cm4gTH0scmE9dC5tYXAoe2xpbmVhcjplYSxwb2x5OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSx0KX19LHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gc2F9LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIGxhfSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gdWF9LGV4cDpmdW5jdGlvbigpe3JldHVybiBmYX0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIGhhfSxlbGFzdGljOmZ1bmN0aW9uKHQsZSl7dmFyIHI7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0uNDUpO2FyZ3VtZW50cy5sZW5ndGg/cj1lL1N0Kk1hdGguYXNpbigxL3QpOih0PTEscj1lLzQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gMSt0Kk1hdGgucG93KDIsLTEwKm4pKk1hdGguc2luKChuLXIpKlN0L2UpfX0sYmFjazpmdW5jdGlvbih0KXt0fHwodD0xLjcwMTU4KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUqZSooKHQrMSkqZS10KX19LGJvdW5jZTpmdW5jdGlvbigpe3JldHVybiBwYX19KSxuYT10Lm1hcCh7aW46TCxvdXQ6YWEsImluLW91dCI6b2EsIm91dC1pbiI6ZnVuY3Rpb24odCl7cmV0dXJuIG9hKGFhKHQpKX19KTtmdW5jdGlvbiBpYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTA/MDplPj0xPzE6dChlKX19ZnVuY3Rpb24gYWEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAxLXQoMS1lKX19ZnVuY3Rpb24gb2EodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi41KihlPC41P3QoMiplKToyLXQoMi0yKmUpKX19ZnVuY3Rpb24gc2EodCl7cmV0dXJuIHQqdH1mdW5jdGlvbiBsYSh0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gY2EodCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfWZ1bmN0aW9uIHVhKHQpe3JldHVybiAxLU1hdGguY29zKHQqQ3QpfWZ1bmN0aW9uIGZhKHQpe3JldHVybiBNYXRoLnBvdygyLDEwKih0LTEpKX1mdW5jdGlvbiBoYSh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIHBhKHQpe3JldHVybiB0PDEvMi43NT83LjU2MjUqdCp0OnQ8Mi8yLjc1PzcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1OnQ8Mi41LzIuNzU/Ny41NjI1Kih0LT0yLjI1LzIuNzUpKnQrLjkzNzU6Ny41NjI1Kih0LT0yLjYyNS8yLjc1KSp0Ky45ODQzNzV9ZnVuY3Rpb24gZGEodCxlKXtyZXR1cm4gZS09dCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqcil9fWZ1bmN0aW9uIGdhKHQpe3ZhciBlLHIsbixpPVt0LmEsdC5iXSxhPVt0LmMsdC5kXSxvPXZhKGkpLHM9bWEoaSxhKSxsPXZhKCgoZT1hKVswXSs9KG49LXMpKihyPWkpWzBdLGVbMV0rPW4qclsxXSxlKSl8fDA7aVswXSphWzFdPGFbMF0qaVsxXSYmKGlbMF0qPS0xLGlbMV0qPS0xLG8qPS0xLHMqPS0xKSx0aGlzLnJvdGF0ZT0obz9NYXRoLmF0YW4yKGlbMV0saVswXSk6TWF0aC5hdGFuMigtYVswXSxhWzFdKSkqSXQsdGhpcy50cmFuc2xhdGU9W3QuZSx0LmZdLHRoaXMuc2NhbGU9W28sbF0sdGhpcy5za2V3PWw/TWF0aC5hdGFuMihzLGwpKkl0OjB9ZnVuY3Rpb24gbWEodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXX1mdW5jdGlvbiB2YSh0KXt2YXIgZT1NYXRoLnNxcnQobWEodCx0KSk7cmV0dXJuIGUmJih0WzBdLz1lLHRbMV0vPWUpLGV9dC5lYXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLSIpLG49ZT49MD90LnNsaWNlKDAsZSk6dCxpPWU+PTA/dC5zbGljZShlKzEpOiJpbiI7cmV0dXJuIG49cmEuZ2V0KG4pfHxlYSxpYSgoaT1uYS5nZXQoaSl8fEwpKG4uYXBwbHkobnVsbCxyLmNhbGwoYXJndW1lbnRzLDEpKSkpfSx0LmludGVycG9sYXRlSGNsPWZ1bmN0aW9uKGUscil7ZT10LmhjbChlKSxyPXQuaGNsKHIpO3ZhciBuPWUuaCxpPWUuYyxhPWUubCxvPXIuaC1uLHM9ci5jLWksbD1yLmwtYTtpc05hTihzKSYmKHM9MCxpPWlzTmFOKGkpP3IuYzppKTtpc05hTihvKT8obz0wLG49aXNOYU4obik/ci5oOm4pOm8+MTgwP28tPTM2MDpvPC0xODAmJihvKz0zNjApO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gWHQobitvKnQsaStzKnQsYStsKnQpKyIifX0sdC5pbnRlcnBvbGF0ZUhzbD1mdW5jdGlvbihlLHIpe2U9dC5oc2woZSkscj10LmhzbChyKTt2YXIgbj1lLmgsaT1lLnMsYT1lLmwsbz1yLmgtbixzPXIucy1pLGw9ci5sLWE7aXNOYU4ocykmJihzPTAsaT1pc05hTihpKT9yLnM6aSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEd0KG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVMYWI9ZnVuY3Rpb24oZSxyKXtlPXQubGFiKGUpLHI9dC5sYWIocik7dmFyIG49ZS5sLGk9ZS5hLGE9ZS5iLG89ci5sLW4scz1yLmEtaSxsPXIuYi1hO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gUXQobitvKnQsaStzKnQsYStsKnQpKyIifX0sdC5pbnRlcnBvbGF0ZVJvdW5kPWRhLHQudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3ZhciByPWkuY3JlYXRlRWxlbWVudE5TKHQubnMucHJlZml4LnN2ZywiZyIpO3JldHVybih0LnRyYW5zZm9ybT1mdW5jdGlvbih0KXtpZihudWxsIT10KXtyLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KTt2YXIgZT1yLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCl9cmV0dXJuIG5ldyBnYShlP2UubWF0cml4OnlhKX0pKGUpfSxnYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy50cmFuc2xhdGUrIilyb3RhdGUoIit0aGlzLnJvdGF0ZSsiKXNrZXdYKCIrdGhpcy5za2V3KyIpc2NhbGUoIit0aGlzLnNjYWxlKyIpIn07dmFyIHlhPXthOjEsYjowLGM6MCxkOjEsZTowLGY6MH07ZnVuY3Rpb24geGEodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiwiOiIifWZ1bmN0aW9uIGJhKGUscil7dmFyIG49W10saT1bXTtyZXR1cm4gZT10LnRyYW5zZm9ybShlKSxyPXQudHJhbnNmb3JtKHIpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OlppKHRbMF0sZVswXSl9LHtpOmktMix4OlppKHRbMV0sZVsxXSl9KX1lbHNlKGVbMF18fGVbMV0pJiZyLnB1c2goInRyYW5zbGF0ZSgiK2UrIikiKX0oZS50cmFuc2xhdGUsci50cmFuc2xhdGUsbixpKSxmdW5jdGlvbih0LGUscixuKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksbi5wdXNoKHtpOnIucHVzaCh4YShyKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpaaSh0LGUpfSkpOmUmJnIucHVzaCh4YShyKSsicm90YXRlKCIrZSsiKSIpfShlLnJvdGF0ZSxyLnJvdGF0ZSxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe3QhPT1lP24ucHVzaCh7aTpyLnB1c2goeGEocikrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpaaSh0LGUpfSk6ZSYmci5wdXNoKHhhKHIpKyJza2V3WCgiK2UrIikiKX0oZS5za2V3LHIuc2tldyxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKHhhKHIpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtuLnB1c2goe2k6aS00LHg6WmkodFswXSxlWzBdKX0se2k6aS0yLHg6WmkodFsxXSxlWzFdKX0pfWVsc2UgMT09PWVbMF0mJjE9PT1lWzFdfHxyLnB1c2goeGEocikrInNjYWxlKCIrZSsiKSIpfShlLnNjYWxlLHIuc2NhbGUsbixpKSxlPXI9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxhPWkubGVuZ3RoOysrcjxhOyluWyhlPWlbcl0pLmldPWUueCh0KTtyZXR1cm4gbi5qb2luKCIiKX19ZnVuY3Rpb24gX2EodCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4oci10KS9lfX1mdW5jdGlvbiB3YSh0LGUpe3JldHVybiBlPShlLT10PSt0KXx8MS9lLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsKHItdCkvZSkpfX1mdW5jdGlvbiBUYSh0KXtmb3IodmFyIGU9dC5zb3VyY2Uscj10LnRhcmdldCxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIHI9a2EodCksbj1rYShlKSxpPXIucG9wKCksYT1uLnBvcCgpLG89bnVsbDtmb3IoO2k9PT1hOylvPWksaT1yLnBvcCgpLGE9bi5wb3AoKTtyZXR1cm4gb30oZSxyKSxpPVtlXTtlIT09bjspZT1lLnBhcmVudCxpLnB1c2goZSk7Zm9yKHZhciBhPWkubGVuZ3RoO3IhPT1uOylpLnNwbGljZShhLDAscikscj1yLnBhcmVudDtyZXR1cm4gaX1mdW5jdGlvbiBrYSh0KXtmb3IodmFyIGU9W10scj10LnBhcmVudDtudWxsIT1yOyllLnB1c2godCksdD1yLHI9ci5wYXJlbnQ7cmV0dXJuIGUucHVzaCh0KSxlfWZ1bmN0aW9uIE1hKHQpe3QuZml4ZWR8PTJ9ZnVuY3Rpb24gQWEodCl7dC5maXhlZCY9LTd9ZnVuY3Rpb24gU2EodCl7dC5maXhlZHw9NCx0LnB4PXQueCx0LnB5PXQueX1mdW5jdGlvbiBFYSh0KXt0LmZpeGVkJj0tNX10LmludGVycG9sYXRlVHJhbnNmb3JtPWJhLHQubGF5b3V0PXt9LHQubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnB1c2goVGEodFtyXSkpO3JldHVybiBlfX0sdC5sYXlvdXQuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsPXt9LGM9MDtmdW5jdGlvbiB1KCl7dmFyIGwsdSxoLHAsZCxnPXt9LG09W10sdj10LnJhbmdlKGkpLHk9W107Zm9yKGU9W10scj1bXSxsPTAscD0tMTsrK3A8aTspe2Zvcih1PTAsZD0tMTsrK2Q8aTspdSs9bltwXVtkXTttLnB1c2godSkseS5wdXNoKHQucmFuZ2UoaSkpLGwrPXV9Zm9yKGEmJnYuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gYShtW3RdLG1bZV0pfSkpLG8mJnkuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQscil7cmV0dXJuIG8obltlXVt0XSxuW2VdW3JdKX0pKX0pKSxsPShTdC1jKmkpL2wsdT0wLHA9LTE7KytwPGk7KXtmb3IoaD11LGQ9LTE7KytkPGk7KXt2YXIgeD12W3BdLGI9eVt4XVtkXSxfPW5beF1bYl0sdz11LFQ9dSs9XypsO2dbeCsiLSIrYl09e2luZGV4Ongsc3ViaW5kZXg6YixzdGFydEFuZ2xlOncsZW5kQW5nbGU6VCx2YWx1ZTpffX1yW3hdPXtpbmRleDp4LHN0YXJ0QW5nbGU6aCxlbmRBbmdsZTp1LHZhbHVlOm1beF19LHUrPWN9Zm9yKHA9LTE7KytwPGk7KWZvcihkPXAtMTsrK2Q8aTspe3ZhciBrPWdbcCsiLSIrZF0sTT1nW2QrIi0iK3BdOyhrLnZhbHVlfHxNLnZhbHVlKSYmZS5wdXNoKGsudmFsdWU8TS52YWx1ZT97c291cmNlOk0sdGFyZ2V0Omt9Ontzb3VyY2U6ayx0YXJnZXQ6TX0pfXMmJmYoKX1mdW5jdGlvbiBmKCl7ZS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzKCh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSkvMiwoZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUpLzIpfSkpfXJldHVybiBsLm1hdHJpeD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0obj10KSYmbi5sZW5ndGgsZT1yPW51bGwsbCk6bn0sbC5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsZT1yPW51bGwsbCk6Y30sbC5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsZT1yPW51bGwsbCk6YX0sbC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsZT1udWxsLGwpOm99LGwuc29ydENob3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUmJmYoKSxsKTpzfSxsLmNob3Jkcz1mdW5jdGlvbigpe3JldHVybiBlfHx1KCksZX0sbC5ncm91cHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8dSgpLHJ9LGx9LHQubGF5b3V0LmZvcmNlPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHM9e30sbD10LmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxjPVsxLDFdLHU9LjksZj1DYSxoPUxhLHA9LTMwLGQ9SWEsZz0uMSxtPS42NCx2PVtdLHk9W107ZnVuY3Rpb24geCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4saSl7aWYoZS5wb2ludCE9PXQpe3ZhciBhPWUuY3gtdC54LG89ZS5jeS10Lnkscz1pLXIsbD1hKmErbypvO2lmKHMqcy9tPGwpe2lmKGw8ZCl7dmFyIGM9ZS5jaGFyZ2UvbDt0LnB4LT1hKmMsdC5weS09bypjfXJldHVybiEwfWlmKGUucG9pbnQmJmwmJmw8ZCl7Yz1lLnBvaW50Q2hhcmdlL2w7dC5weC09YSpjLHQucHktPW8qY319cmV0dXJuIWUuY2hhcmdlfX1mdW5jdGlvbiBiKGUpe2UucHg9dC5ldmVudC54LGUucHk9dC5ldmVudC55LHMucmVzdW1lKCl9cmV0dXJuIHMudGljaz1mdW5jdGlvbigpe2lmKChuKj0uOTkpPC4wMDUpcmV0dXJuIGU9bnVsbCxsLmVuZCh7dHlwZToiZW5kIixhbHBoYTpuPTB9KSwhMDt2YXIgcixzLGYsaCxkLG0sYixfLHcsVD12Lmxlbmd0aCxrPXkubGVuZ3RoO2ZvcihzPTA7czxrOysrcyloPShmPXlbc10pLnNvdXJjZSwobT0oXz0oZD1mLnRhcmdldCkueC1oLngpKl8rKHc9ZC55LWgueSkqdykmJihfKj1tPW4qYVtzXSooKG09TWF0aC5zcXJ0KG0pKS1pW3NdKS9tLHcqPW0sZC54LT1fKihiPWgud2VpZ2h0K2Qud2VpZ2h0P2gud2VpZ2h0LyhoLndlaWdodCtkLndlaWdodCk6LjUpLGQueS09dypiLGgueCs9XyooYj0xLWIpLGgueSs9dypiKTtpZigoYj1uKmcpJiYoXz1jWzBdLzIsdz1jWzFdLzIscz0tMSxiKSlmb3IoOysrczxUOykoZj12W3NdKS54Kz0oXy1mLngpKmIsZi55Kz0ody1mLnkpKmI7aWYocClmb3IoIWZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPTAsYT0wO2lmKGUuY2hhcmdlPTAsIWUubGVhZilmb3IodmFyIG8scz1lLm5vZGVzLGw9cy5sZW5ndGgsYz0tMTsrK2M8bDspbnVsbCE9KG89c1tjXSkmJih0KG8scixuKSxlLmNoYXJnZSs9by5jaGFyZ2UsaSs9by5jaGFyZ2Uqby5jeCxhKz1vLmNoYXJnZSpvLmN5KTtpZihlLnBvaW50KXtlLmxlYWZ8fChlLnBvaW50LngrPU1hdGgucmFuZG9tKCktLjUsZS5wb2ludC55Kz1NYXRoLnJhbmRvbSgpLS41KTt2YXIgdT1yKm5bZS5wb2ludC5pbmRleF07ZS5jaGFyZ2UrPWUucG9pbnRDaGFyZ2U9dSxpKz11KmUucG9pbnQueCxhKz11KmUucG9pbnQueX1lLmN4PWkvZS5jaGFyZ2UsZS5jeT1hL2UuY2hhcmdlfShyPXQuZ2VvbS5xdWFkdHJlZSh2KSxuLG8pLHM9LTE7KytzPFQ7KShmPXZbc10pLmZpeGVkfHxyLnZpc2l0KHgoZikpO2ZvcihzPS0xOysrczxUOykoZj12W3NdKS5maXhlZD8oZi54PWYucHgsZi55PWYucHkpOihmLngtPShmLnB4LShmLnB4PWYueCkpKnUsZi55LT0oZi5weS0oZi5weT1mLnkpKSp1KTtsLnRpY2soe3R5cGU6InRpY2siLGFscGhhOm59KX0scy5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10LHMpOnZ9LHMubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dCxzKTp5fSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxzKTpjfSxzLmxpbmtEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LHMpOmZ9LHMuZGlzdGFuY2U9cy5saW5rRGlzdGFuY2Uscy5saW5rU3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxzKTpofSxzLmZyaWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LHMpOnV9LHMuY2hhcmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3Qscyk6cH0scy5jaGFyZ2VEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10KnQscyk6TWF0aC5zcXJ0KGQpfSxzLmdyYXZpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3Qscyk6Z30scy50aGV0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10KnQscyk6TWF0aC5zcXJ0KG0pfSxzLmFscGhhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSt0LG4/dD4wP249dDooZS5jPW51bGwsZS50PU5hTixlPW51bGwsbC5lbmQoe3R5cGU6ImVuZCIsYWxwaGE6bj0wfSkpOnQ+MCYmKGwuc3RhcnQoe3R5cGU6InN0YXJ0IixhbHBoYTpuPXR9KSxlPXdlKHMudGljaykpLHMpOm59LHMuc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj12Lmxlbmd0aCxsPXkubGVuZ3RoLHU9Y1swXSxkPWNbMV07Zm9yKHQ9MDt0PG47Kyt0KShyPXZbdF0pLmluZGV4PXQsci53ZWlnaHQ9MDtmb3IodD0wO3Q8bDsrK3QpIm51bWJlciI9PXR5cGVvZihyPXlbdF0pLnNvdXJjZSYmKHIuc291cmNlPXZbci5zb3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9dltyLnRhcmdldF0pLCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zvcih0PTA7dDxuOysrdClyPXZbdF0saXNOYU4oci54KSYmKHIueD1nKCJ4Iix1KSksaXNOYU4oci55KSYmKHIueT1nKCJ5IixkKSksaXNOYU4oci5weCkmJihyLnB4PXIueCksaXNOYU4oci5weSkmJihyLnB5PXIueSk7aWYoaT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZilmb3IodD0wO3Q8bDsrK3QpaVt0XT0rZi5jYWxsKHRoaXMseVt0XSx0KTtlbHNlIGZvcih0PTA7dDxsOysrdClpW3RdPWY7aWYoYT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgaClmb3IodD0wO3Q8bDsrK3QpYVt0XT0raC5jYWxsKHRoaXMseVt0XSx0KTtlbHNlIGZvcih0PTA7dDxsOysrdClhW3RdPWg7aWYobz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgcClmb3IodD0wO3Q8bjsrK3Qpb1t0XT0rcC5jYWxsKHRoaXMsdlt0XSx0KTtlbHNlIGZvcih0PTA7dDxuOysrdClvW3RdPXA7ZnVuY3Rpb24gZyhyLGkpe2lmKCFlKXtmb3IoZT1uZXcgQXJyYXkobiksYz0wO2M8bjsrK2MpZVtjXT1bXTtmb3IoYz0wO2M8bDsrK2Mpe3ZhciBhPXlbY107ZVthLnNvdXJjZS5pbmRleF0ucHVzaChhLnRhcmdldCksZVthLnRhcmdldC5pbmRleF0ucHVzaChhLnNvdXJjZSl9fWZvcih2YXIgbyxzPWVbdF0sYz0tMSx1PXMubGVuZ3RoOysrYzx1OylpZighaXNOYU4obz1zW2NdW3JdKSlyZXR1cm4gbztyZXR1cm4gTWF0aC5yYW5kb20oKSppfXJldHVybiBzLnJlc3VtZSgpfSxzLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiBzLmFscGhhKC4xKX0scy5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHMuYWxwaGEoMCl9LHMuZHJhZz1mdW5jdGlvbigpe2lmKHJ8fChyPXQuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihMKS5vbigiZHJhZ3N0YXJ0LmZvcmNlIixNYSkub24oImRyYWcuZm9yY2UiLGIpLm9uKCJkcmFnZW5kLmZvcmNlIixBYSkpLCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByO3RoaXMub24oIm1vdXNlb3Zlci5mb3JjZSIsU2EpLm9uKCJtb3VzZW91dC5mb3JjZSIsRWEpLmNhbGwocil9LHQucmViaW5kKHMsbCwib24iKX07dmFyIENhPTIwLExhPTEsSWE9MS8wO2Z1bmN0aW9uIFBhKGUscil7cmV0dXJuIHQucmViaW5kKGUsciwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxlLm5vZGVzPWUsZS5saW5rcz1CYSxlfWZ1bmN0aW9uIHphKHQsZSl7Zm9yKHZhciByPVt0XTtudWxsIT0odD1yLnBvcCgpKTspaWYoZSh0KSwoaT10LmNoaWxkcmVuKSYmKG49aS5sZW5ndGgpKWZvcih2YXIgbixpOy0tbj49MDspci5wdXNoKGlbbl0pfWZ1bmN0aW9uIE9hKHQsZSl7Zm9yKHZhciByPVt0XSxuPVtdO251bGwhPSh0PXIucG9wKCkpOylpZihuLnB1c2godCksKGE9dC5jaGlsZHJlbikmJihpPWEubGVuZ3RoKSlmb3IodmFyIGksYSxvPS0xOysrbzxpOylyLnB1c2goYVtvXSk7Zm9yKDtudWxsIT0odD1uLnBvcCgpKTspZSh0KX1mdW5jdGlvbiBEYSh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBSYSh0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBGYSh0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIHQubWVyZ2UoZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0LmNoaWxkcmVufHxbXSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnQsdGFyZ2V0OmV9fSkpfSkpKX10LmxheW91dC5oaWVyYXJjaHk9ZnVuY3Rpb24oKXt2YXIgdD1GYSxlPURhLHI9UmE7ZnVuY3Rpb24gbihpKXt2YXIgYSxvPVtpXSxzPVtdO2ZvcihpLmRlcHRoPTA7bnVsbCE9KGE9by5wb3AoKSk7KWlmKHMucHVzaChhKSwoYz1lLmNhbGwobixhLGEuZGVwdGgpKSYmKGw9Yy5sZW5ndGgpKXtmb3IodmFyIGwsYyx1Oy0tbD49MDspby5wdXNoKHU9Y1tsXSksdS5wYXJlbnQ9YSx1LmRlcHRoPWEuZGVwdGgrMTtyJiYoYS52YWx1ZT0wKSxhLmNoaWxkcmVuPWN9ZWxzZSByJiYoYS52YWx1ZT0rci5jYWxsKG4sYSxhLmRlcHRoKXx8MCksZGVsZXRlIGEuY2hpbGRyZW47cmV0dXJuIE9hKGksKGZ1bmN0aW9uKGUpe3ZhciBuLGk7dCYmKG49ZS5jaGlsZHJlbikmJm4uc29ydCh0KSxyJiYoaT1lLnBhcmVudCkmJihpLnZhbHVlKz1lLnZhbHVlKX0pKSxzfXJldHVybiBuLnNvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG4ucmV2YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gciYmKHphKHQsKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJih0LnZhbHVlPTApfSkpLE9hKHQsKGZ1bmN0aW9uKHQpe3ZhciBlO3QuY2hpbGRyZW58fCh0LnZhbHVlPStyLmNhbGwobix0LHQuZGVwdGgpfHwwKSwoZT10LnBhcmVudCkmJihlLnZhbHVlKz10LnZhbHVlKX0pKSksdH0sbn0sdC5sYXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkscj1bMSwxXTtmdW5jdGlvbiBuKHQsbil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxuKTtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1lLmNoaWxkcmVuO2lmKGUueD1yLGUueT1lLmRlcHRoKmksZS5keD1uLGUuZHk9aSxhJiYobz1hLmxlbmd0aCkpe3ZhciBvLHMsbCxjPS0xO2ZvcihuPWUudmFsdWU/bi9lLnZhbHVlOjA7KytjPG87KXQocz1hW2NdLHIsbD1zLnZhbHVlKm4saSkscis9bH19KGlbMF0sMCxyWzBdLHJbMV0vZnVuY3Rpb24gdChlKXt2YXIgcj1lLmNoaWxkcmVuLG49MDtpZihyJiYoaT1yLmxlbmd0aCkpZm9yKHZhciBpLGE9LTE7KythPGk7KW49TWF0aC5tYXgobix0KHJbYV0pKTtyZXR1cm4gMStufShpWzBdKSksaX1yZXR1cm4gbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sUGEobixlKX0sdC5sYXlvdXQucGllPWZ1bmN0aW9uKCl7dmFyIGU9TnVtYmVyLHI9TmEsbj0wLGk9U3QsYT0wO2Z1bmN0aW9uIG8ocyl7dmFyIGwsYz1zLmxlbmd0aCx1PXMubWFwKChmdW5jdGlvbih0LHIpe3JldHVybitlLmNhbGwobyx0LHIpfSkpLGY9KygiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxoPSgiZnVuY3Rpb24iPT10eXBlb2YgaT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppKS1mLHA9TWF0aC5taW4oTWF0aC5hYnMoaCkvYywrKCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmEpKSxkPXAqKGg8MD8tMToxKSxnPXQuc3VtKHUpLG09Zz8oaC1jKmQpL2c6MCx2PXQucmFuZ2UoYykseT1bXTtyZXR1cm4gbnVsbCE9ciYmdi5zb3J0KHI9PT1OYT9mdW5jdGlvbih0LGUpe3JldHVybiB1W2VdLXVbdF19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIoc1t0XSxzW2VdKX0pLHYuZm9yRWFjaCgoZnVuY3Rpb24odCl7eVt0XT17ZGF0YTpzW3RdLHZhbHVlOmw9dVt0XSxzdGFydEFuZ2xlOmYsZW5kQW5nbGU6Zis9bCptK2QscGFkQW5nbGU6cH19KSkseX1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG8pOnJ9LG8uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxvKTppfSxvLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbyk6YX0sb307dmFyIE5hPXt9O2Z1bmN0aW9uIGphKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gVWEodCl7cmV0dXJuIHQueX1mdW5jdGlvbiBWYSh0LGUscil7dC55MD1lLHQueT1yfXQubGF5b3V0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIGU9TCxyPUdhLG49WWEsaT1WYSxhPWphLG89VWE7ZnVuY3Rpb24gcyhsLGMpe2lmKCEocD1sLmxlbmd0aCkpcmV0dXJuIGw7dmFyIHU9bC5tYXAoKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUuY2FsbChzLHQscil9KSksZj11Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0LGUpe3JldHVyblthLmNhbGwocyx0LGUpLG8uY2FsbChzLHQsZSldfSkpfSkpLGg9ci5jYWxsKHMsZixjKTt1PXQucGVybXV0ZSh1LGgpLGY9dC5wZXJtdXRlKGYsaCk7dmFyIHAsZCxnLG0sdj1uLmNhbGwocyxmLGMpLHk9dVswXS5sZW5ndGg7Zm9yKGc9MDtnPHk7KytnKWZvcihpLmNhbGwocyx1WzBdW2ddLG09dltnXSxmWzBdW2ddWzFdKSxkPTE7ZDxwOysrZClpLmNhbGwocyx1W2RdW2ddLG0rPWZbZC0xXVtnXVsxXSxmW2RdW2ddWzFdKTtyZXR1cm4gbH1yZXR1cm4gcy52YWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxzKTplfSxzLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cWEuZ2V0KHQpfHxHYSxzKTpyfSxzLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhhLmdldCh0KXx8WWEscyk6bn0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQscyk6YX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30scy5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKTppfSxzfTt2YXIgcWE9dC5tYXAoeyJpbnNpZGUtb3V0IjpmdW5jdGlvbihlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1lLm1hcChXYSksbz1lLm1hcChYYSkscz10LnJhbmdlKGkpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFbdF0tYVtlXX0pKSxsPTAsYz0wLHU9W10sZj1bXTtmb3Iocj0wO3I8aTsrK3Ipbj1zW3JdLGw8Yz8obCs9b1tuXSx1LnB1c2gobikpOihjKz1vW25dLGYucHVzaChuKSk7cmV0dXJuIGYucmV2ZXJzZSgpLmNvbmNhdCh1KX0scmV2ZXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5yYW5nZShlLmxlbmd0aCkucmV2ZXJzZSgpfSxkZWZhdWx0OkdhfSksSGE9dC5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsYT10WzBdLmxlbmd0aCxvPVtdLHM9MCxsPVtdO2ZvcihyPTA7cjxhOysrcil7Zm9yKGU9MCxuPTA7ZTxpO2UrKyluKz10W2VdW3JdWzFdO24+cyYmKHM9biksby5wdXNoKG4pfWZvcihyPTA7cjxhOysrcilsW3JdPShzLW9bcl0pLzI7cmV0dXJuIGx9LHdpZ2dsZTpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdT10Lmxlbmd0aCxmPXRbMF0saD1mLmxlbmd0aCxwPVtdO2ZvcihwWzBdPWw9Yz0wLHI9MTtyPGg7KytyKXtmb3IoZT0wLGk9MDtlPHU7KytlKWkrPXRbZV1bcl1bMV07Zm9yKGU9MCxhPTAscz1mW3JdWzBdLWZbci0xXVswXTtlPHU7KytlKXtmb3Iobj0wLG89KHRbZV1bcl1bMV0tdFtlXVtyLTFdWzFdKS8oMipzKTtuPGU7KytuKW8rPSh0W25dW3JdWzFdLXRbbl1bci0xXVsxXSkvczthKz1vKnRbZV1bcl1bMV19cFtyXT1sLT1pP2EvaSpzOjAsbDxjJiYoYz1sKX1mb3Iocj0wO3I8aDsrK3IpcFtyXS09YztyZXR1cm4gcH0sZXhwYW5kOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz0xL2kscz1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtpZihuKWZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdLz1uO2Vsc2UgZm9yKGU9MDtlPGk7ZSsrKXRbZV1bcl1bMV09b31mb3Iocj0wO3I8YTsrK3Ipc1tyXT0wO3JldHVybiBzfSx6ZXJvOllhfSk7ZnVuY3Rpb24gR2EoZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpfWZ1bmN0aW9uIFlhKHQpe2Zvcih2YXIgZT0tMSxyPXRbMF0ubGVuZ3RoLG49W107KytlPHI7KW5bZV09MDtyZXR1cm4gbn1mdW5jdGlvbiBXYSh0KXtmb3IodmFyIGUscj0xLG49MCxpPXRbMF1bMV0sYT10Lmxlbmd0aDtyPGE7KytyKShlPXRbcl1bMV0pPmkmJihuPXIsaT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBYYSh0KXtyZXR1cm4gdC5yZWR1Y2UoWmEsMCl9ZnVuY3Rpb24gWmEodCxlKXtyZXR1cm4gdCtlWzFdfWZ1bmN0aW9uIEphKHQsZSl7cmV0dXJuIEthKHQsTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gS2EodCxlKXtmb3IodmFyIHI9LTEsbj0rdFswXSxpPSh0WzFdLW4pL2UsYT1bXTsrK3I8PWU7KWFbcl09aSpyK247cmV0dXJuIGF9ZnVuY3Rpb24gUWEoZSl7cmV0dXJuW3QubWluKGUpLHQubWF4KGUpXX1mdW5jdGlvbiAkYSh0LGUpe3JldHVybiB0LnZhbHVlLWUudmFsdWV9ZnVuY3Rpb24gdG8odCxlKXt2YXIgcj10Ll9wYWNrX25leHQ7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXQsZS5fcGFja19uZXh0PXIsci5fcGFja19wcmV2PWV9ZnVuY3Rpb24gZW8odCxlKXt0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiBybyh0LGUpe3ZhciByPWUueC10Lngsbj1lLnktdC55LGk9dC5yK2UucjtyZXR1cm4uOTk5KmkqaT5yKnIrbipufWZ1bmN0aW9uIG5vKHQpe2lmKChlPXQuY2hpbGRyZW4pJiYobD1lLmxlbmd0aCkpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xLzAsdT0tMS8wLGY9MS8wLGg9LTEvMDtpZihlLmZvckVhY2goaW8pLChyPWVbMF0pLng9LXIucixyLnk9MCx4KHIpLGw+MSYmKChuPWVbMV0pLng9bi5yLG4ueT0wLHgobiksbD4yKSlmb3Iob28ocixuLGk9ZVsyXSkseChpKSx0byhyLGkpLHIuX3BhY2tfcHJldj1pLHRvKGksbiksbj1yLl9wYWNrX25leHQsYT0zO2E8bDthKyspe29vKHIsbixpPWVbYV0pO3ZhciBwPTAsZD0xLGc9MTtmb3Iobz1uLl9wYWNrX25leHQ7byE9PW47bz1vLl9wYWNrX25leHQsZCsrKWlmKHJvKG8saSkpe3A9MTticmVha31pZigxPT1wKWZvcihzPXIuX3BhY2tfcHJldjtzIT09by5fcGFja19wcmV2JiYhcm8ocyxpKTtzPXMuX3BhY2tfcHJldixnKyspO3A/KGQ8Z3x8ZD09ZyYmbi5yPHIucj9lbyhyLG49byk6ZW8ocj1zLG4pLGEtLSk6KHRvKHIsaSksbj1pLHgoaSkpfXZhciBtPShjK3UpLzIsdj0oZitoKS8yLHk9MDtmb3IoYT0wO2E8bDthKyspKGk9ZVthXSkueC09bSxpLnktPXYseT1NYXRoLm1heCh5LGkucitNYXRoLnNxcnQoaS54KmkueCtpLnkqaS55KSk7dC5yPXksZS5mb3JFYWNoKGFvKX1mdW5jdGlvbiB4KHQpe2M9TWF0aC5taW4odC54LXQucixjKSx1PU1hdGgubWF4KHQueCt0LnIsdSksZj1NYXRoLm1pbih0LnktdC5yLGYpLGg9TWF0aC5tYXgodC55K3QucixoKX19ZnVuY3Rpb24gaW8odCl7dC5fcGFja19uZXh0PXQuX3BhY2tfcHJldj10fWZ1bmN0aW9uIGFvKHQpe2RlbGV0ZSB0Ll9wYWNrX25leHQsZGVsZXRlIHQuX3BhY2tfcHJldn1mdW5jdGlvbiBvbyh0LGUscil7dmFyIG49dC5yK3IucixpPWUueC10LngsYT1lLnktdC55O2lmKG4mJihpfHxhKSl7dmFyIG89ZS5yK3IucixzPWkqaSthKmEsbD0uNSsoKG4qPW4pLShvKj1vKSkvKDIqcyksYz1NYXRoLnNxcnQoTWF0aC5tYXgoMCwyKm8qKG4rcyktKG4tPXMpKm4tbypvKSkvKDIqcyk7ci54PXQueCtsKmkrYyphLHIueT10LnkrbCphLWMqaX1lbHNlIHIueD10LngrbixyLnk9dC55fWZ1bmN0aW9uIHNvKHQsZSl7cmV0dXJuIHQucGFyZW50PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gbG8odCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZS5sZW5ndGg/ZVswXTp0LnR9ZnVuY3Rpb24gY28odCl7dmFyIGUscj10LmNoaWxkcmVuO3JldHVybihlPXIubGVuZ3RoKT9yW2UtMV06dC50fWZ1bmN0aW9uIHVvKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIGZvKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIGhvKHQpe3JldHVybnt4OnQueCx5OnQueSxkeDp0LmR4LGR5OnQuZHl9fWZ1bmN0aW9uIHBvKHQsZSl7dmFyIHI9dC54K2VbM10sbj10LnkrZVswXSxpPXQuZHgtZVsxXS1lWzNdLGE9dC5keS1lWzBdLWVbMl07cmV0dXJuIGk8MCYmKHIrPWkvMixpPTApLGE8MCYmKG4rPWEvMixhPTApLHt4OnIseTpuLGR4OmksZHk6YX19ZnVuY3Rpb24gZ28odCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIGU8cj9bZSxyXTpbcixlXX1mdW5jdGlvbiBtbyh0KXtyZXR1cm4gdC5yYW5nZUV4dGVudD90LnJhbmdlRXh0ZW50KCk6Z28odC5yYW5nZSgpKX1mdW5jdGlvbiB2byh0LGUscixuKXt2YXIgaT1yKHRbMF0sdFsxXSksYT1uKGVbMF0sZVsxXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCkpfX1mdW5jdGlvbiB5byh0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLTEsYT10W25dLG89dFtpXTtyZXR1cm4gbzxhJiYocj1uLG49aSxpPXIscj1hLGE9byxvPXIpLHRbbl09ZS5mbG9vcihhKSx0W2ldPWUuY2VpbChvKSx0fWZ1bmN0aW9uIHhvKHQpe3JldHVybiB0P3tmbG9vcjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5mbG9vcihlL3QpKnR9LGNlaWw6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguY2VpbChlL3QpKnR9fTpib310LmxheW91dC5oaXN0b2dyYW09ZnVuY3Rpb24oKXt2YXIgZT0hMCxyPU51bWJlcixuPVFhLGk9SmE7ZnVuY3Rpb24gYShhLG8pe2Zvcih2YXIgcyxsLGM9W10sdT1hLm1hcChyLHRoaXMpLGY9bi5jYWxsKHRoaXMsdSxvKSxoPWkuY2FsbCh0aGlzLGYsdSxvKSxwPShvPS0xLHUubGVuZ3RoKSxkPWgubGVuZ3RoLTEsZz1lPzE6MS9wOysrbzxkOykocz1jW29dPVtdKS5keD1oW28rMV0tKHMueD1oW29dKSxzLnk9MDtpZihkPjApZm9yKG89LTE7KytvPHA7KShsPXVbb10pPj1mWzBdJiZsPD1mWzFdJiYoKHM9Y1t0LmJpc2VjdChoLGwsMSxkKS0xXSkueSs9ZyxzLnB1c2goYVtvXSkpO3JldHVybiBjfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1kZSh0KSxhKTpufSxhLmJpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Im51bWJlciI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe3JldHVybiBLYShlLHQpfTpkZSh0KSxhKTppfSxhLmZyZXF1ZW5jeT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsYSk6ZX0sYX0sdC5sYXlvdXQucGFjaz1mdW5jdGlvbigpe3ZhciBlLHI9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydCgkYSksbj0wLGk9WzEsMV07ZnVuY3Rpb24gYSh0LGEpe3ZhciBvPXIuY2FsbCh0aGlzLHQsYSkscz1vWzBdLGw9aVswXSxjPWlbMV0sdT1udWxsPT1lP01hdGguc3FydDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9O2lmKHMueD1zLnk9MCxPYShzLChmdW5jdGlvbih0KXt0LnI9K3UodC52YWx1ZSl9KSksT2Eocyxubyksbil7dmFyIGY9biooZT8xOk1hdGgubWF4KDIqcy5yL2wsMipzLnIvYykpLzI7T2EocywoZnVuY3Rpb24odCl7dC5yKz1mfSkpLE9hKHMsbm8pLE9hKHMsKGZ1bmN0aW9uKHQpe3Quci09Zn0pKX1yZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1lLmNoaWxkcmVuO2lmKGUueD1yKz1pKmUueCxlLnk9bis9aSplLnksZS5yKj1pLGEpZm9yKHZhciBvPS0xLHM9YS5sZW5ndGg7KytvPHM7KXQoYVtvXSxyLG4saSl9KHMsbC8yLGMvMixlPzE6MS9NYXRoLm1heCgyKnMuci9sLDIqcy5yL2MpKSxvfXJldHVybiBhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxhKTppfSxhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10fHwiZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LGEpOmV9LGEucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxhKTpufSxQYShhLHIpfSx0LmxheW91dC50cmVlPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxyPXNvLG49WzEsMV0saT1udWxsO2Z1bmN0aW9uIGEodCxhKXt2YXIgYz1lLmNhbGwodGhpcyx0LGEpLHU9Y1swXSxmPWZ1bmN0aW9uKHQpe3ZhciBlLHI9e0E6bnVsbCxjaGlsZHJlbjpbdF19LG49W3JdO2Zvcig7bnVsbCE9KGU9bi5wb3AoKSk7KWZvcih2YXIgaSxhPWUuY2hpbGRyZW4sbz0wLHM9YS5sZW5ndGg7bzxzOysrbyluLnB1c2goKGFbb109aT17XzphW29dLHBhcmVudDplLGNoaWxkcmVuOihpPWFbb10uY2hpbGRyZW4pJiZpLnNsaWNlKCl8fFtdLEE6bnVsbCxhOm51bGwsejowLG06MCxjOjAsczowLHQ6bnVsbCxpOm99KS5hPWkpO3JldHVybiByLmNoaWxkcmVuWzBdfSh1KTtpZihPYShmLG8pLGYucGFyZW50Lm09LWYueix6YShmLHMpLGkpemEodSxsKTtlbHNle3ZhciBoPXUscD11LGQ9dTt6YSh1LChmdW5jdGlvbih0KXt0Lng8aC54JiYoaD10KSx0Lng+cC54JiYocD10KSx0LmRlcHRoPmQuZGVwdGgmJihkPXQpfSkpO3ZhciBnPXIoaCxwKS8yLWgueCxtPW5bMF0vKHAueCtyKHAsaCkvMitnKSx2PW5bMV0vKGQuZGVwdGh8fDEpO3phKHUsKGZ1bmN0aW9uKHQpe3QueD0odC54K2cpKm0sdC55PXQuZGVwdGgqdn0pKX1yZXR1cm4gY31mdW5jdGlvbiBvKHQpe3ZhciBlPXQuY2hpbGRyZW4sbj10LnBhcmVudC5jaGlsZHJlbixpPXQuaT9uW3QuaS0xXTpudWxsO2lmKGUubGVuZ3RoKXshZnVuY3Rpb24odCl7dmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDtmb3IoOy0tYT49MDspKGU9aVthXSkueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfSh0KTt2YXIgYT0oZVswXS56K2VbZS5sZW5ndGgtMV0ueikvMjtpPyh0Lno9aS56K3IodC5fLGkuXyksdC5tPXQuei1hKTp0Lno9YX1lbHNlIGkmJih0Lno9aS56K3IodC5fLGkuXykpO3QucGFyZW50LkE9ZnVuY3Rpb24odCxlLG4pe2lmKGUpe2Zvcih2YXIgaSxhPXQsbz10LHM9ZSxsPWEucGFyZW50LmNoaWxkcmVuWzBdLGM9YS5tLHU9by5tLGY9cy5tLGg9bC5tO3M9Y28ocyksYT1sbyhhKSxzJiZhOylsPWxvKGwpLChvPWNvKG8pKS5hPXQsKGk9cy56K2YtYS56LWMrcihzLl8sYS5fKSk+MCYmKHVvKGZvKHMsdCxuKSx0LGkpLGMrPWksdSs9aSksZis9cy5tLGMrPWEubSxoKz1sLm0sdSs9by5tO3MmJiFjbyhvKSYmKG8udD1zLG8ubSs9Zi11KSxhJiYhbG8obCkmJihsLnQ9YSxsLm0rPWMtaCxuPXQpfXJldHVybiBufSh0LGksdC5wYXJlbnQuQXx8blswXSl9ZnVuY3Rpb24gcyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gbCh0KXt0LngqPW5bMF0sdC55PXQuZGVwdGgqblsxXX1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpP2w6bnVsbCxhKTppP251bGw6bn0sYS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KT9udWxsOmwsYSk6aT9uOm51bGx9LFBhKGEsZSl9LHQubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgZT10LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9c28sbj1bMSwxXSxpPSExO2Z1bmN0aW9uIGEoYSxvKXt2YXIgcyxsPWUuY2FsbCh0aGlzLGEsbyksYz1sWzBdLHU9MDtPYShjLChmdW5jdGlvbihlKXt2YXIgbj1lLmNoaWxkcmVuO24mJm4ubGVuZ3RoPyhlLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2UueH0pLDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIDErdC5tYXgoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKX0obikpOihlLng9cz91Kz1yKGUscyk6MCxlLnk9MCxzPWUpfSkpO3ZhciBmPWZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbjtyZXR1cm4gciYmci5sZW5ndGg/dChyWzBdKTplfShjKSxoPWZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLmNoaWxkcmVuO3JldHVybiBuJiYocj1uLmxlbmd0aCk/dChuW3ItMV0pOmV9KGMpLHA9Zi54LXIoZixoKS8yLGQ9aC54K3IoaCxmKS8yO3JldHVybiBPYShjLGk/ZnVuY3Rpb24odCl7dC54PSh0LngtYy54KSpuWzBdLHQueT0oYy55LXQueSkqblsxXX06ZnVuY3Rpb24odCl7dC54PSh0LngtcCkvKGQtcCkqblswXSx0Lnk9KDEtKGMueT90LnkvYy55OjEpKSpuWzFdfSksbH1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpLGEpOmk/bnVsbDpufSxhLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGwhPShuPXQpLGEpOmk/bjpudWxsfSxQYShhLGUpfSx0LmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7dmFyIGUscj10LmxheW91dC5oaWVyYXJjaHkoKSxuPU1hdGgucm91bmQsaT1bMSwxXSxhPW51bGwsbz1obyxzPSExLGw9InNxdWFyaWZ5IixjPS41KigxK01hdGguc3FydCg1KSk7ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspbj0ocj10W2ldKS52YWx1ZSooZTwwPzA6ZSksci5hcmVhPWlzTmFOKG4pfHxuPD0wPzA6bn1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG4saSxhPW8odCkscz1bXSxjPWUuc2xpY2UoKSxoPTEvMCxnPSJzbGljZSI9PT1sP2EuZHg6ImRpY2UiPT09bD9hLmR5OiJzbGljZS1kaWNlIj09PWw/MSZ0LmRlcHRoP2EuZHk6YS5keDpNYXRoLm1pbihhLmR4LGEuZHkpO2Zvcih1KGMsYS5keCphLmR5L3QudmFsdWUpLHMuYXJlYT0wOyhpPWMubGVuZ3RoKT4wOylzLnB1c2gocj1jW2ktMV0pLHMuYXJlYSs9ci5hcmVhLCJzcXVhcmlmeSIhPT1sfHwobj1wKHMsZykpPD1oPyhjLnBvcCgpLGg9bik6KHMuYXJlYS09cy5wb3AoKS5hcmVhLGQocyxnLGEsITEpLGc9TWF0aC5taW4oYS5keCxhLmR5KSxzLmxlbmd0aD1zLmFyZWE9MCxoPTEvMCk7cy5sZW5ndGgmJihkKHMsZyxhLCEwKSxzLmxlbmd0aD1zLmFyZWE9MCksZS5mb3JFYWNoKGYpfX1mdW5jdGlvbiBoKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG49byh0KSxpPWUuc2xpY2UoKSxhPVtdO2Zvcih1KGksbi5keCpuLmR5L3QudmFsdWUpLGEuYXJlYT0wO3I9aS5wb3AoKTspYS5wdXNoKHIpLGEuYXJlYSs9ci5hcmVhLG51bGwhPXIueiYmKGQoYSxyLno/bi5keDpuLmR5LG4sIWkubGVuZ3RoKSxhLmxlbmd0aD1hLmFyZWE9MCk7ZS5mb3JFYWNoKGgpfX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByLG49dC5hcmVhLGk9MCxhPTEvMCxvPS0xLHM9dC5sZW5ndGg7KytvPHM7KShyPXRbb10uYXJlYSkmJihyPGEmJihhPXIpLHI+aSYmKGk9cikpO3JldHVybiBlKj1lLChuKj1uKT9NYXRoLm1heChlKmkqYy9uLG4vKGUqYSpjKSk6MS8wfWZ1bmN0aW9uIGQodCxlLHIsaSl7dmFyIGEsbz0tMSxzPXQubGVuZ3RoLGw9ci54LGM9ci55LHU9ZT9uKHQuYXJlYS9lKTowO2lmKGU9PXIuZHgpe2ZvcigoaXx8dT5yLmR5KSYmKHU9ci5keSk7KytvPHM7KShhPXRbb10pLng9bCxhLnk9YyxhLmR5PXUsbCs9YS5keD1NYXRoLm1pbihyLngrci5keC1sLHU/bihhLmFyZWEvdSk6MCk7YS56PSEwLGEuZHgrPXIueCtyLmR4LWwsci55Kz11LHIuZHktPXV9ZWxzZXtmb3IoKGl8fHU+ci5keCkmJih1PXIuZHgpOysrbzxzOykoYT10W29dKS54PWwsYS55PWMsYS5keD11LGMrPWEuZHk9TWF0aC5taW4oci55K3IuZHktYyx1P24oYS5hcmVhL3UpOjApO2Euej0hMSxhLmR5Kz1yLnkrci5keS1jLHIueCs9dSxyLmR4LT11fX1mdW5jdGlvbiBnKHQpe3ZhciBuPWV8fHIodCksYT1uWzBdO3JldHVybiBhLng9YS55PTAsYS52YWx1ZT8oYS5keD1pWzBdLGEuZHk9aVsxXSk6YS5keD1hLmR5PTAsZSYmci5yZXZhbHVlKGEpLHUoW2FdLGEuZHgqYS5keS9hLnZhbHVlKSwoZT9oOmYpKGEpLHMmJihlPW4pLG59cmV0dXJuIGcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGcpOml9LGcucGFkZGluZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYTtmdW5jdGlvbiBlKGUpe3ZhciByPXQuY2FsbChnLGUsZS5kZXB0aCk7cmV0dXJuIG51bGw9PXI/aG8oZSk6cG8oZSwibnVtYmVyIj09dHlwZW9mIHI/W3IscixyLHJdOnIpfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIHBvKGUsdCl9dmFyIG47cmV0dXJuIG89bnVsbD09KGE9dCk/aG86ImZ1bmN0aW9uIj09KG49dHlwZW9mIHQpP2U6Im51bWJlciI9PT1uPyh0PVt0LHQsdCx0XSxyKTpyLGd9LGcucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dD9NYXRoLnJvdW5kOk51bWJlcixnKTpuIT1OdW1iZXJ9LGcuc3RpY2t5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZT1udWxsLGcpOnN9LGcucmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxnKTpjfSxnLm1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCsiIixnKTpsfSxQYShnLHIpfSx0LnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcjwyJiYoZT0xKSxyPDEmJih0PTApLGZ1bmN0aW9uKCl7dmFyIHIsbixpO2Rve2k9KHI9MipNYXRoLnJhbmRvbSgpLTEpKnIrKG49MipNYXRoLnJhbmRvbSgpLTEpKm59d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrZSpyKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19LGxvZ05vcm1hbDpmdW5jdGlvbigpe3ZhciBlPXQucmFuZG9tLm5vcm1hbC5hcHBseSh0LGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGUoKSl9fSxiYXRlczpmdW5jdGlvbihlKXt2YXIgcj10LnJhbmRvbS5pcndpbkhhbGwoZSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9lfX0saXJ3aW5IYWxsOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MDtyPHQ7cisrKWUrPU1hdGgucmFuZG9tKCk7cmV0dXJuIGV9fX0sdC5zY2FsZT17fTt2YXIgYm89e2Zsb29yOkwsY2VpbDpMfTtmdW5jdGlvbiBfbyhlLHIsbixpKXt2YXIgYT1bXSxvPVtdLHM9MCxsPU1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKS0xO2ZvcihlW2xdPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCkscj1yLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8PWw7KWEucHVzaChuKGVbcy0xXSxlW3NdKSksby5wdXNoKGkocltzLTFdLHJbc10pKTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dC5iaXNlY3QoZSxyLDEsbCktMTtyZXR1cm4gb1tuXShhW25dKHIpKX19ZnVuY3Rpb24gd28oZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gVG8odCxlKXtyZXR1cm4geW8odCx4byhrbyh0LGUpWzJdKSkseW8odCx4byhrbyh0LGUpWzJdKSksdH1mdW5jdGlvbiBrbyh0LGUpe251bGw9PWUmJihlPTEwKTt2YXIgcj1nbyh0KSxuPXJbMV0tclswXSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobi9lKS9NYXRoLkxOMTApKSxhPWUvbippO3JldHVybiBhPD0uMTU/aSo9MTA6YTw9LjM1P2kqPTU6YTw9Ljc1JiYoaSo9MiksclswXT1NYXRoLmNlaWwoclswXS9pKSppLHJbMV09TWF0aC5mbG9vcihyWzFdL2kpKmkrLjUqaSxyWzJdPWkscn1mdW5jdGlvbiBNbyhlLHIpe3JldHVybiB0LnJhbmdlLmFwcGx5KHQsa28oZSxyKSl9ZnVuY3Rpb24gQW8oZSxyLG4pe3ZhciBpPWtvKGUscik7aWYobil7dmFyIGE9Q2UuZXhlYyhuKTtpZihhLnNoaWZ0KCksInMiPT09YVs4XSl7dmFyIG89dC5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoeShpWzBdKSx5KGlbMV0pKSk7cmV0dXJuIGFbN118fChhWzddPSIuIitFbyhvLnNjYWxlKGlbMl0pKSksYVs4XT0iZiIsbj10LmZvcm1hdChhLmpvaW4oIiIpKSxmdW5jdGlvbih0KXtyZXR1cm4gbihvLnNjYWxlKHQpKStvLnN5bWJvbH19YVs3XXx8KGFbN109Ii4iK2Z1bmN0aW9uKHQsZSl7dmFyIHI9RW8oZVsyXSk7cmV0dXJuIHQgaW4gU28/TWF0aC5hYnMoci1FbyhNYXRoLm1heCh5KGVbMF0pLHkoZVsxXSkpKSkrICsoImUiIT09dCk6ci0yKigiJSI9PT10KX0oYVs4XSxpKSksbj1hLmpvaW4oIiIpfWVsc2Ugbj0iLC4iK0VvKGlbMl0pKyJmIjtyZXR1cm4gdC5mb3JtYXQobil9dC5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYSxvO2Z1bmN0aW9uIHMoKXt2YXIgdD1NYXRoLm1pbihlLmxlbmd0aCxyLmxlbmd0aCk+Mj9fbzp2byxzPWk/d2E6X2E7cmV0dXJuIGE9dChlLHIscyxuKSxvPXQocixlLHMsJGkpLGx9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gYSh0KX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9LGwuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKE51bWJlcikscygpKTplfSxsLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQscygpKTpyfSxsLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwucmFuZ2UodCkuaW50ZXJwb2xhdGUoZGEpfSxsLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscygpKTppfSxsLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscygpKTpufSxsLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBNbyhlLHQpfSxsLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gQW8oZSx0LHIpfSxsLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIFRvKGUsdCkscygpfSxsLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLHIsbixpKX0scygpfShbMCwxXSxbMCwxXSwkaSwhMSl9O3ZhciBTbz17czoxLGc6MSxwOjEscjoxLGU6MX07ZnVuY3Rpb24gRW8odCl7cmV0dXJuLU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKy4wMSl9dC5zY2FsZS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4saSxhKXtmdW5jdGlvbiBvKHQpe3JldHVybihpP01hdGgubG9nKHQ8MD8wOnQpOi1NYXRoLmxvZyh0PjA/MDotdCkpL01hdGgubG9nKG4pfWZ1bmN0aW9uIHModCl7cmV0dXJuIGk/TWF0aC5wb3cobix0KTotTWF0aC5wb3cobiwtdCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gcihvKHQpKX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHMoci5pbnZlcnQodCkpfSxsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10WzBdPj0wLHIuZG9tYWluKChhPXQubWFwKE51bWJlcikpLm1hcChvKSksbCk6YX0sbC5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHIuZG9tYWluKGEubWFwKG8pKSxsKTpufSxsLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD15byhhLm1hcChvKSxpP01hdGg6TG8pO3JldHVybiByLmRvbWFpbih0KSxhPXQubWFwKHMpLGx9LGwudGlja3M9ZnVuY3Rpb24oKXt2YXIgdD1nbyhhKSxlPVtdLHI9dFswXSxsPXRbMV0sYz1NYXRoLmZsb29yKG8ocikpLHU9TWF0aC5jZWlsKG8obCkpLGY9biUxPzI6bjtpZihpc0Zpbml0ZSh1LWMpKXtpZihpKXtmb3IoO2M8dTtjKyspZm9yKHZhciBoPTE7aDxmO2grKyllLnB1c2gocyhjKSpoKTtlLnB1c2gocyhjKSl9ZWxzZSBmb3IoZS5wdXNoKHMoYykpO2MrKzx1Oylmb3IoaD1mLTE7aD4wO2gtLSllLnB1c2gocyhjKSpoKTtmb3IoYz0wO2VbY108cjtjKyspO2Zvcih1PWUubGVuZ3RoO2VbdS0xXT5sO3UtLSk7ZT1lLnNsaWNlKGMsdSl9cmV0dXJuIGV9LGwudGlja0Zvcm1hdD1mdW5jdGlvbihlLHIpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBDbzthcmd1bWVudHMubGVuZ3RoPDI/cj1DbzoiZnVuY3Rpb24iIT10eXBlb2YgciYmKHI9dC5mb3JtYXQocikpO3ZhciBpPU1hdGgubWF4KDEsbiplL2wudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10L3MoTWF0aC5yb3VuZChvKHQpKSk7cmV0dXJuIGUqbjxuLS41JiYoZSo9biksZTw9aT9yKHQpOiIifX0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUoci5jb3B5KCksbixpLGEpfSx3byhsLHIpfSh0LnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCwxXSksMTAsITAsWzEsMTBdKX07dmFyIENvPXQuZm9ybWF0KCIuMGUiKSxMbz17Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuLU1hdGguY2VpbCgtdCl9LGNlaWw6ZnVuY3Rpb24odCl7cmV0dXJuLU1hdGguZmxvb3IoLXQpfX07ZnVuY3Rpb24gSW8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPDA/LU1hdGgucG93KC1lLHQpOk1hdGgucG93KGUsdCl9fXQuc2NhbGUucG93PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPUlvKHIpLGE9SW8oMS9yKTtmdW5jdGlvbiBvKHQpe3JldHVybiBlKGkodCkpfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gYShlLmludmVydCh0KSl9LG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbigobj10Lm1hcChOdW1iZXIpKS5tYXAoaSkpLG8pOm59LG8udGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIE1vKG4sdCl9LG8udGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBBbyhuLHQsZSl9LG8ubmljZT1mdW5jdGlvbih0KXtyZXR1cm4gby5kb21haW4oVG8obix0KSl9LG8uZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9SW8ocj10KSxhPUlvKDEvciksZS5kb21haW4obi5tYXAoaSkpLG8pOnJ9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUuY29weSgpLHIsbil9LHdvKG8sZSl9KHQuc2NhbGUubGluZWFyKCksMSxbMCwxXSl9LHQuc2NhbGUuc3FydD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLnBvdygpLmV4cG9uZW50KC41KX0sdC5zY2FsZS5vcmRpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXt2YXIgaSxhLG87ZnVuY3Rpb24gcyh0KXtyZXR1cm4gYVsoKGkuZ2V0KHQpfHwoInJhbmdlIj09PW4udD9pLnNldCh0LHIucHVzaCh0KSk6TmFOKSktMSklYS5sZW5ndGhdfWZ1bmN0aW9uIGwoZSxuKXtyZXR1cm4gdC5yYW5nZShyLmxlbmd0aCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZStuKnR9KSl9cmV0dXJuIHMuZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByO3I9W10saT1uZXcgXztmb3IodmFyIGUsYT0tMSxvPXQubGVuZ3RoOysrYTxvOylpLmhhcyhlPXRbYV0pfHxpLnNldChlLHIucHVzaChlKSk7cmV0dXJuIHNbbi50XS5hcHBseShzLG4uYSl9LHMucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxvPTAsbj17dDoicmFuZ2UiLGE6YXJndW1lbnRzfSxzKTphfSxzLnJhbmdlUG9pbnRzPWZ1bmN0aW9uKHQsZSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKTt2YXIgaT10WzBdLGM9dFsxXSx1PXIubGVuZ3RoPDI/KGk9KGkrYykvMiwwKTooYy1pKS8oci5sZW5ndGgtMStlKTtyZXR1cm4gYT1sKGkrdSplLzIsdSksbz0wLG49e3Q6InJhbmdlUG9pbnRzIixhOmFyZ3VtZW50c30sc30scy5yYW5nZVJvdW5kUG9pbnRzPWZ1bmN0aW9uKHQsZSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKTt2YXIgaT10WzBdLGM9dFsxXSx1PXIubGVuZ3RoPDI/KGk9Yz1NYXRoLnJvdW5kKChpK2MpLzIpLDApOihjLWkpLyhyLmxlbmd0aC0xK2UpfDA7cmV0dXJuIGE9bChpK01hdGgucm91bmQodSplLzIrKGMtaS0oci5sZW5ndGgtMStlKSp1KS8yKSx1KSxvPTAsbj17dDoicmFuZ2VSb3VuZFBvaW50cyIsYTphcmd1bWVudHN9LHN9LHMucmFuZ2VCYW5kcz1mdW5jdGlvbih0LGUsaSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihpPWUpO3ZhciBjPXRbMV08dFswXSx1PXRbYy0wXSxmPXRbMS1jXSxoPShmLXUpLyhyLmxlbmd0aC1lKzIqaSk7cmV0dXJuIGE9bCh1K2gqaSxoKSxjJiZhLnJldmVyc2UoKSxvPWgqKDEtZSksbj17dDoicmFuZ2VCYW5kcyIsYTphcmd1bWVudHN9LHN9LHMucmFuZ2VSb3VuZEJhbmRzPWZ1bmN0aW9uKHQsZSxpKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGk9ZSk7dmFyIGM9dFsxXTx0WzBdLHU9dFtjLTBdLGY9dFsxLWNdLGg9TWF0aC5mbG9vcigoZi11KS8oci5sZW5ndGgtZSsyKmkpKTtyZXR1cm4gYT1sKHUrTWF0aC5yb3VuZCgoZi11LShyLmxlbmd0aC1lKSpoKS8yKSxoKSxjJiZhLnJldmVyc2UoKSxvPU1hdGgucm91bmQoaCooMS1lKSksbj17dDoicmFuZ2VSb3VuZEJhbmRzIixhOmFyZ3VtZW50c30sc30scy5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gb30scy5yYW5nZUV4dGVudD1mdW5jdGlvbigpe3JldHVybiBnbyhuLmFbMF0pfSxzLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLG4pfSxzLmRvbWFpbihyKX0oW10se3Q6InJhbmdlIixhOltbXV19KX0sdC5zY2FsZS5jYXRlZ29yeTEwPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKFBvKX0sdC5zY2FsZS5jYXRlZ29yeTIwPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKHpvKX0sdC5zY2FsZS5jYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShPbyl9LHQuc2NhbGUuY2F0ZWdvcnkyMGM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoRG8pfTt2YXIgUG89WzIwNjIyNjAsMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDczMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAoYWUpLHpvPVsyMDYyMjYwLDExNDU0NDQwLDE2NzQ0MjA2LDE2NzU5NjcyLDI5MjQ1ODgsMTAwMTg2OTgsMTQwMzQ3MjgsMTY3NTA3NDIsOTcyNTg4NSwxMjk1NTg2MSw5MTk3MTMxLDEyODg1MTQwLDE0OTA3MzMwLDE2MjM0MTk0LDgzNTU3MTEsMTMwOTI4MDcsMTIzNjkxODYsMTQ0MDg1ODksMTU1NjE3NSwxMDQxMDcyNV0ubWFwKGFlKSxPbz1bMzc1MDc3Nyw1Mzk1NjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEzNTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2OSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEzNTI4NTA5LDE0NTg5NjU0XS5tYXAoYWUpLERvPVszMjQ0NzMzLDcwNTcxMTAsMTA0MDY2MjUsMTMwMzI0MzEsMTUwOTUwNTMsMTY2MTY3NjQsMTY2MjUyNTksMTY2MzQwMTgsMzI1MzA3Niw3NjUyNDcwLDEwNjA3MDAzLDEzMTAxNTA0LDc2OTUyODEsMTAzOTQzMTIsMTIzNjkzNzIsMTQzNDI4OTEsNjUxMzUwNyw5ODY4OTUwLDEyNDM0ODc3LDE0Mjc3MDgxXS5tYXAoYWUpO2Z1bmN0aW9uIFJvKCl7cmV0dXJuIDB9dC5zY2FsZS5xdWFudGlsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbil7dmFyIGk7ZnVuY3Rpb24gYSgpe3ZhciBlPTAsYT1uLmxlbmd0aDtmb3IoaT1bXTsrK2U8YTspaVtlLTFdPXQucXVhbnRpbGUocixlL2EpO3JldHVybiBvfWZ1bmN0aW9uIG8oZSl7aWYoIWlzTmFOKGU9K2UpKXJldHVybiBuW3QuYmlzZWN0KGksZSldfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10Lm1hcChwKS5maWx0ZXIoZCkuc29ydChoKSxhKCkpOnJ9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKCkpOm59LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybih0PW4uaW5kZXhPZih0KSk8MD9bTmFOLE5hTl06W3Q+MD9pW3QtMV06clswXSx0PGkubGVuZ3RoP2lbdF06cltyLmxlbmd0aC0xXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9LGEoKX0oW10sW10pfSx0LnNjYWxlLnF1YW50aXplPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpLGE7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbltNYXRoLm1heCgwLE1hdGgubWluKGEsTWF0aC5mbG9vcihpKih0LWUpKSkpXX1mdW5jdGlvbiBzKCl7cmV0dXJuIGk9bi5sZW5ndGgvKHItZSksYT1uLmxlbmd0aC0xLG99cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbdC5sZW5ndGgtMV0scygpKTpbZSxyXX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMoKSk6bn0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuW3Q9KHQ9bi5pbmRleE9mKHQpKTwwP05hTjp0L2krZSx0KzEvaV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUscixuKX0scygpfSgwLDEsWzAsMV0pfSx0LnNjYWxlLnRocmVzaG9sZD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbil7ZnVuY3Rpb24gaShlKXtpZihlPD1lKXJldHVybiBuW3QuYmlzZWN0KHIsZSldfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKTpufSxpLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uLmluZGV4T2YodCksW3JbdC0xXSxyW3RdXX0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX0saX0oWy41XSxbMCwxXSl9LHQuc2NhbGUuaWRlbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybit0fXJldHVybiByLmludmVydD1yLHIuZG9tYWluPXIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dC5tYXAocikscik6ZX0sci50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gTW8oZSx0KX0sci50aWNrRm9ybWF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIEFvKGUsdCxyKX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZSl9LHJ9KFswLDFdKX0sdC5zdmc9e30sdC5zdmcuYXJjPWZ1bmN0aW9uKCl7dmFyIHQ9Qm8sZT1ObyxyPVJvLG49Rm8saT1qbyxhPVVvLG89Vm87ZnVuY3Rpb24gcygpe3ZhciBzPU1hdGgubWF4KDAsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxjPU1hdGgubWF4KDAsK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx1PWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLUN0LGY9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyktQ3QsaD1NYXRoLmFicyhmLXUpLHA9dT5mPzA6MTtpZihjPHMmJihkPWMsYz1zLHM9ZCksaD49RXQpcmV0dXJuIGwoYyxwKSsocz9sKHMsMS1wKToiIikrIloiO3ZhciBkLGcsbSx2LHkseCxiLF8sdyxULGssTSxBPTAsUz0wLEU9W107aWYoKHY9KCtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MCkvMikmJihtPW49PT1Gbz9NYXRoLnNxcnQocypzK2MqYyk6K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLHB8fChTKj0tMSksYyYmKFM9RHQobS9jKk1hdGguc2luKHYpKSkscyYmKEE9RHQobS9zKk1hdGguc2luKHYpKSkpLGMpe3k9YypNYXRoLmNvcyh1K1MpLHg9YypNYXRoLnNpbih1K1MpLGI9YypNYXRoLmNvcyhmLVMpLF89YypNYXRoLnNpbihmLVMpO3ZhciBDPU1hdGguYWJzKGYtdS0yKlMpPD1BdD8wOjE7aWYoUyYmcW8oeSx4LGIsXyk9PT1wXkMpe3ZhciBMPSh1K2YpLzI7eT1jKk1hdGguY29zKEwpLHg9YypNYXRoLnNpbihMKSxiPV89bnVsbH19ZWxzZSB5PXg9MDtpZihzKXt3PXMqTWF0aC5jb3MoZi1BKSxUPXMqTWF0aC5zaW4oZi1BKSxrPXMqTWF0aC5jb3ModStBKSxNPXMqTWF0aC5zaW4odStBKTt2YXIgST1NYXRoLmFicyh1LWYrMipBKTw9QXQ/MDoxO2lmKEEmJnFvKHcsVCxrLE0pPT09MS1wXkkpe3ZhciBQPSh1K2YpLzI7dz1zKk1hdGguY29zKFApLFQ9cypNYXRoLnNpbihQKSxrPU09bnVsbH19ZWxzZSB3PVQ9MDtpZihoPmt0JiYoZD1NYXRoLm1pbihNYXRoLmFicyhjLXMpLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSk+LjAwMSl7Zz1zPGNecD8wOjE7dmFyIHo9ZCxPPWQ7aWYoaDxBdCl7dmFyIEQ9bnVsbD09az9bdyxUXTpudWxsPT1iP1t5LHhdOmxpKFt5LHhdLFtrLE1dLFtiLF9dLFt3LFRdKSxSPXktRFswXSxGPXgtRFsxXSxCPWItRFswXSxOPV8tRFsxXSxqPTEvTWF0aC5zaW4oTWF0aC5hY29zKChSKkIrRipOKS8oTWF0aC5zcXJ0KFIqUitGKkYpKk1hdGguc3FydChCKkIrTipOKSkpLzIpLFU9TWF0aC5zcXJ0KERbMF0qRFswXStEWzFdKkRbMV0pO089TWF0aC5taW4oZCwocy1VKS8oai0xKSksej1NYXRoLm1pbihkLChjLVUpLyhqKzEpKX1pZihudWxsIT1iKXt2YXIgVj1IbyhudWxsPT1rP1t3LFRdOltrLE1dLFt5LHhdLGMseixwKSxxPUhvKFtiLF9dLFt3LFRdLGMseixwKTtkPT09ej9FLnB1c2goIk0iLFZbMF0sIkEiLHosIiwiLHosIiAwIDAsIixnLCIgIixWWzFdLCJBIixjLCIsIixjLCIgMCAiLDEtcF5xbyhWWzFdWzBdLFZbMV1bMV0scVsxXVswXSxxWzFdWzFdKSwiLCIscCwiICIscVsxXSwiQSIseiwiLCIseiwiIDAgMCwiLGcsIiAiLHFbMF0pOkUucHVzaCgiTSIsVlswXSwiQSIseiwiLCIseiwiIDAgMSwiLGcsIiAiLHFbMF0pfWVsc2UgRS5wdXNoKCJNIix5LCIsIix4KTtpZihudWxsIT1rKXt2YXIgSD1IbyhbeSx4XSxbayxNXSxzLC1PLHApLEc9SG8oW3csVF0sbnVsbD09Yj9beSx4XTpbYixfXSxzLC1PLHApO2Q9PT1PP0UucHVzaCgiTCIsR1swXSwiQSIsTywiLCIsTywiIDAgMCwiLGcsIiAiLEdbMV0sIkEiLHMsIiwiLHMsIiAwICIscF5xbyhHWzFdWzBdLEdbMV1bMV0sSFsxXVswXSxIWzFdWzFdKSwiLCIsMS1wLCIgIixIWzFdLCJBIixPLCIsIixPLCIgMCAwLCIsZywiICIsSFswXSk6RS5wdXNoKCJMIixHWzBdLCJBIixPLCIsIixPLCIgMCAwLCIsZywiICIsSFswXSl9ZWxzZSBFLnB1c2goIkwiLHcsIiwiLFQpfWVsc2UgRS5wdXNoKCJNIix5LCIsIix4KSxudWxsIT1iJiZFLnB1c2goIkEiLGMsIiwiLGMsIiAwICIsQywiLCIscCwiICIsYiwiLCIsXyksRS5wdXNoKCJMIix3LCIsIixUKSxudWxsIT1rJiZFLnB1c2goIkEiLHMsIiwiLHMsIiAwICIsSSwiLCIsMS1wLCIgIixrLCIsIixNKTtyZXR1cm4gRS5wdXNoKCJaIiksRS5qb2luKCIiKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIk0wLCIrdCsiQSIrdCsiLCIrdCsiIDAgMSwiK2UrIiAwLCIrLXQrIkEiK3QrIiwiK3QrIiAwIDEsIitlKyIgMCwiK3R9cmV0dXJuIHMuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZGUoZSkscyk6dH0scy5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kZSh0KSxzKTplfSxzLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1kZSh0KSxzKTpyfSxzLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10PT1Gbz9GbzpkZSh0KSxzKTpufSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZGUodCkscyk6aX0scy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1kZSh0KSxzKTphfSxzLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWRlKHQpLHMpOm99LHMuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgcj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsbj0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItQ3Q7cmV0dXJuW01hdGguY29zKG4pKnIsTWF0aC5zaW4obikqcl19LHN9O3ZhciBGbz0iYXV0byI7ZnVuY3Rpb24gQm8odCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gTm8odCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gam8odCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBVbyh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBWbyh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBxbyh0LGUscixuKXtyZXR1cm4odC1yKSplLShlLW4pKnQ+MD8wOjF9ZnVuY3Rpb24gSG8odCxlLHIsbixpKXt2YXIgYT10WzBdLWVbMF0sbz10WzFdLWVbMV0scz0oaT9uOi1uKS9NYXRoLnNxcnQoYSphK28qbyksbD1zKm8sYz0tcyphLHU9dFswXStsLGY9dFsxXStjLGg9ZVswXStsLHA9ZVsxXStjLGQ9KHUraCkvMixnPShmK3ApLzIsbT1oLXUsdj1wLWYseT1tKm0rdip2LHg9ci1uLGI9dSpwLWgqZixfPSh2PDA/LTE6MSkqTWF0aC5zcXJ0KE1hdGgubWF4KDAseCp4KnktYipiKSksdz0oYip2LW0qXykveSxUPSgtYiptLXYqXykveSxrPShiKnYrbSpfKS95LE09KC1iKm0rdipfKS95LEE9dy1kLFM9VC1nLEU9ay1kLEM9TS1nO3JldHVybiBBKkErUypTPkUqRStDKkMmJih3PWssVD1NKSxbW3ctbCxULWNdLFt3KnIveCxUKnIveF1dfWZ1bmN0aW9uIEdvKHQpe3ZhciBlPXJpLHI9bmksbj1ZcixpPVdvLGE9aS5rZXksbz0uNztmdW5jdGlvbiBzKGEpe3ZhciBzLGw9W10sYz1bXSx1PS0xLGY9YS5sZW5ndGgsaD1kZShlKSxwPWRlKHIpO2Z1bmN0aW9uIGQoKXtsLnB1c2goIk0iLGkodChjKSxvKSl9Zm9yKDsrK3U8Zjspbi5jYWxsKHRoaXMscz1hW3VdLHUpP2MucHVzaChbK2guY2FsbCh0aGlzLHMsdSksK3AuY2FsbCh0aGlzLHMsdSldKTpjLmxlbmd0aCYmKGQoKSxjPVtdKTtyZXR1cm4gYy5sZW5ndGgmJmQoKSxsLmxlbmd0aD9sLmpvaW4oIiIpOm51bGx9cmV0dXJuIHMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHMpOnJ9LHMuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMpOm59LHMuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/aT10OihpPVlvLmdldCh0KXx8V28pLmtleSxzKTphfSxzLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxzKTpvfSxzfXQuc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gR28oTCl9O3ZhciBZbz10Lm1hcCh7bGluZWFyOldvLCJsaW5lYXItY2xvc2VkIjpYbyxzdGVwOmZ1bmN0aW9uKHQpe3ZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07Zm9yKDsrK2U8cjspaS5wdXNoKCJIIiwoblswXSsobj10W2VdKVswXSkvMiwiViIsblsxXSk7cj4xJiZpLnB1c2goIkgiLG5bMF0pO3JldHVybiBpLmpvaW4oIiIpfSwic3RlcC1iZWZvcmUiOlpvLCJzdGVwLWFmdGVyIjpKbyxiYXNpczokbywiYmFzaXMtb3BlbiI6ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg8NClyZXR1cm4gV28odCk7dmFyIGUscj1bXSxuPS0xLGk9dC5sZW5ndGgsYT1bMF0sbz1bMF07Zm9yKDsrK248MzspZT10W25dLGEucHVzaChlWzBdKSxvLnB1c2goZVsxXSk7ci5wdXNoKHRzKG5zLGEpKyIsIit0cyhucyxvKSksLS1uO2Zvcig7KytuPGk7KWU9dFtuXSxhLnNoaWZ0KCksYS5wdXNoKGVbMF0pLG8uc2hpZnQoKSxvLnB1c2goZVsxXSksaXMocixhLG8pO3JldHVybiByLmpvaW4oIiIpfSwiYmFzaXMtY2xvc2VkIjpmdW5jdGlvbih0KXt2YXIgZSxyLG49LTEsaT10Lmxlbmd0aCxhPWkrNCxvPVtdLHM9W107Zm9yKDsrK248NDspcj10W24laV0sby5wdXNoKHJbMF0pLHMucHVzaChyWzFdKTtlPVt0cyhucyxvKSwiLCIsdHMobnMscyldLC0tbjtmb3IoOysrbjxhOylyPXRbbiVpXSxvLnNoaWZ0KCksby5wdXNoKHJbMF0pLHMuc2hpZnQoKSxzLnB1c2goclsxXSksaXMoZSxvLHMpO3JldHVybiBlLmpvaW4oIiIpfSxidW5kbGU6ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aC0xO2lmKHIpZm9yKHZhciBuLGksYT10WzBdWzBdLG89dFswXVsxXSxzPXRbcl1bMF0tYSxsPXRbcl1bMV0tbyxjPS0xOysrYzw9cjspbj10W2NdLGk9Yy9yLG5bMF09ZSpuWzBdKygxLWUpKihhK2kqcyksblsxXT1lKm5bMV0rKDEtZSkqKG8raSpsKTtyZXR1cm4gJG8odCl9LGNhcmRpbmFsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/V28odCk6dFswXStLbyh0LFFvKHQsZSkpfSwiY2FyZGluYWwtb3BlbiI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8ND9Xbyh0KTp0WzFdK0tvKHQuc2xpY2UoMSwtMSksUW8odCxlKSl9LCJjYXJkaW5hbC1jbG9zZWQiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/WG8odCk6dFswXStLbygodC5wdXNoKHRbMF0pLHQpLFFvKFt0W3QubGVuZ3RoLTJdXS5jb25jYXQodCxbdFsxXV0pLGUpKX0sbW9ub3RvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPDM/V28odCk6dFswXStLbyh0LGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9W10sbz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9dC5sZW5ndGgtMSxuPVtdLGk9dFswXSxhPXRbMV0sbz1uWzBdPWFzKGksYSk7Zm9yKDsrK2U8cjspbltlXT0obysobz1hcyhpPWEsYT10W2UrMV0pKSkvMjtyZXR1cm4gbltlXT1vLG59KHQpLHM9LTEsbD10Lmxlbmd0aC0xO2Zvcig7KytzPGw7KWU9YXModFtzXSx0W3MrMV0pLHkoZSk8a3Q/b1tzXT1vW3MrMV09MDoocj1vW3NdL2Usbj1vW3MrMV0vZSwoaT1yKnIrbipuKT45JiYoaT0zKmUvTWF0aC5zcXJ0KGkpLG9bc109aSpyLG9bcysxXT1pKm4pKTtzPS0xO2Zvcig7KytzPD1sOylpPSh0W01hdGgubWluKGwscysxKV1bMF0tdFtNYXRoLm1heCgwLHMtMSldWzBdKS8oNiooMStvW3NdKm9bc10pKSxhLnB1c2goW2l8fDAsb1tzXSppfHwwXSk7cmV0dXJuIGF9KHQpKX19KTtmdW5jdGlvbiBXbyh0KXtyZXR1cm4gdC5sZW5ndGg+MT90LmpvaW4oIkwiKTp0KyJaIn1mdW5jdGlvbiBYbyh0KXtyZXR1cm4gdC5qb2luKCJMIikrIloifWZ1bmN0aW9uIFpvKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sIiwiLG5bMV1dOysrZTxyOylpLnB1c2goIlYiLChuPXRbZV0pWzFdLCJIIixuWzBdKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBKbyh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTsrK2U8cjspaS5wdXNoKCJIIiwobj10W2VdKVswXSwiViIsblsxXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gS28odCxlKXtpZihlLmxlbmd0aDwxfHx0Lmxlbmd0aCE9ZS5sZW5ndGgmJnQubGVuZ3RoIT1lLmxlbmd0aCsyKXJldHVybiBXbyh0KTt2YXIgcj10Lmxlbmd0aCE9ZS5sZW5ndGgsbj0iIixpPXRbMF0sYT10WzFdLG89ZVswXSxzPW8sbD0xO2lmKHImJihuKz0iUSIrKGFbMF0tMipvWzBdLzMpKyIsIisoYVsxXS0yKm9bMV0vMykrIiwiK2FbMF0rIiwiK2FbMV0saT10WzFdLGw9MiksZS5sZW5ndGg+MSl7cz1lWzFdLGE9dFtsXSxsKyssbis9IkMiKyhpWzBdK29bMF0pKyIsIisoaVsxXStvWzFdKSsiLCIrKGFbMF0tc1swXSkrIiwiKyhhWzFdLXNbMV0pKyIsIithWzBdKyIsIithWzFdO2Zvcih2YXIgYz0yO2M8ZS5sZW5ndGg7YysrLGwrKylhPXRbbF0scz1lW2NdLG4rPSJTIisoYVswXS1zWzBdKSsiLCIrKGFbMV0tc1sxXSkrIiwiK2FbMF0rIiwiK2FbMV19aWYocil7dmFyIHU9dFtsXTtuKz0iUSIrKGFbMF0rMipzWzBdLzMpKyIsIisoYVsxXSsyKnNbMV0vMykrIiwiK3VbMF0rIiwiK3VbMV19cmV0dXJuIG59ZnVuY3Rpb24gUW8odCxlKXtmb3IodmFyIHIsbj1bXSxpPSgxLWUpLzIsYT10WzBdLG89dFsxXSxzPTEsbD10Lmxlbmd0aDsrK3M8bDspcj1hLGE9byxvPXRbc10sbi5wdXNoKFtpKihvWzBdLXJbMF0pLGkqKG9bMV0tclsxXSldKTtyZXR1cm4gbn1mdW5jdGlvbiAkbyh0KXtpZih0Lmxlbmd0aDwzKXJldHVybiBXbyh0KTt2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9blswXSxhPW5bMV0sbz1baSxpLGksKG49dFsxXSlbMF1dLHM9W2EsYSxhLG5bMV1dLGw9W2ksIiwiLGEsIkwiLHRzKG5zLG8pLCIsIix0cyhucyxzKV07Zm9yKHQucHVzaCh0W3ItMV0pOysrZTw9cjspbj10W2VdLG8uc2hpZnQoKSxvLnB1c2goblswXSkscy5zaGlmdCgpLHMucHVzaChuWzFdKSxpcyhsLG8scyk7cmV0dXJuIHQucG9wKCksbC5wdXNoKCJMIixuKSxsLmpvaW4oIiIpfWZ1bmN0aW9uIHRzKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX1Zby5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2Uua2V5PXQsZS5jbG9zZWQ9Ly1jbG9zZWQkLy50ZXN0KHQpfSkpO3ZhciBlcz1bMCwyLzMsMS8zLDBdLHJzPVswLDEvMywyLzMsMF0sbnM9WzAsMS82LDIvMywxLzZdO2Z1bmN0aW9uIGlzKHQsZSxyKXt0LnB1c2goIkMiLHRzKGVzLGUpLCIsIix0cyhlcyxyKSwiLCIsdHMocnMsZSksIiwiLHRzKHJzLHIpLCIsIix0cyhucyxlKSwiLCIsdHMobnMscikpfWZ1bmN0aW9uIGFzKHQsZSl7cmV0dXJuKGVbMV0tdFsxXSkvKGVbMF0tdFswXSl9ZnVuY3Rpb24gb3ModCl7Zm9yKHZhciBlLHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KXI9KGU9dFtpXSlbMF0sbj1lWzFdLUN0LGVbMF09cipNYXRoLmNvcyhuKSxlWzFdPXIqTWF0aC5zaW4obik7cmV0dXJuIHR9ZnVuY3Rpb24gc3ModCl7dmFyIGU9cmkscj1yaSxuPTAsaT1uaSxhPVlyLG89V28scz1vLmtleSxsPW8sYz0iTCIsdT0uNztmdW5jdGlvbiBmKHMpe3ZhciBmLGgscCxkPVtdLGc9W10sbT1bXSx2PS0xLHk9cy5sZW5ndGgseD1kZShlKSxiPWRlKG4pLF89ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gaH06ZGUociksdz1uPT09aT9mdW5jdGlvbigpe3JldHVybiBwfTpkZShpKTtmdW5jdGlvbiBUKCl7ZC5wdXNoKCJNIixvKHQobSksdSksYyxsKHQoZy5yZXZlcnNlKCkpLHUpLCJaIil9Zm9yKDsrK3Y8eTspYS5jYWxsKHRoaXMsZj1zW3ZdLHYpPyhnLnB1c2goW2g9K3guY2FsbCh0aGlzLGYsdikscD0rYi5jYWxsKHRoaXMsZix2KV0pLG0ucHVzaChbK18uY2FsbCh0aGlzLGYsdiksK3cuY2FsbCh0aGlzLGYsdildKSk6Zy5sZW5ndGgmJihUKCksZz1bXSxtPVtdKTtyZXR1cm4gZy5sZW5ndGgmJlQoKSxkLmxlbmd0aD9kLmpvaW4oIiIpOm51bGx9cmV0dXJuIGYueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yPXQsZik6cn0sZi54MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGYpOmV9LGYueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxmKTpyfSxmLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49aT10LGYpOml9LGYueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxmKTpufSxmLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZik6aX0sZi5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsZik6YX0sZi5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD9vPXQ6KG89WW8uZ2V0KHQpfHxXbykua2V5LGw9by5yZXZlcnNlfHxvLGM9by5jbG9zZWQ/Ik0iOiJMIixmKTpzfSxmLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxmKTp1fSxmfWZ1bmN0aW9uIGxzKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBjcyh0KXtyZXR1cm5bdC54LHQueV19ZnVuY3Rpb24gdXModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykscj1lWzBdLG49ZVsxXS1DdDtyZXR1cm5bcipNYXRoLmNvcyhuKSxyKk1hdGguc2luKG4pXX19ZnVuY3Rpb24gZnMoKXtyZXR1cm4gNjR9ZnVuY3Rpb24gaHMoKXtyZXR1cm4iY2lyY2xlIn1mdW5jdGlvbiBwcyh0KXt2YXIgZT1NYXRoLnNxcnQodC9BdCk7cmV0dXJuIk0wLCIrZSsiQSIrZSsiLCIrZSsiIDAgMSwxIDAsIistZSsiQSIrZSsiLCIrZSsiIDAgMSwxIDAsIitlKyJaIn10LnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PUdvKG9zKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0fSxaby5yZXZlcnNlPUpvLEpvLnJldmVyc2U9Wm8sdC5zdmcuYXJlYT1mdW5jdGlvbigpe3JldHVybiBzcyhMKX0sdC5zdmcuYXJlYS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1zcyhvcyk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuaW5uZXJSYWRpdXM9dC54MCxkZWxldGUgdC54MCx0Lm91dGVyUmFkaXVzPXQueDEsZGVsZXRlIHQueDEsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0LnN0YXJ0QW5nbGU9dC55MCxkZWxldGUgdC55MCx0LmVuZEFuZ2xlPXQueTEsZGVsZXRlIHQueTEsdH0sdC5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgdD1WbixlPXFuLHI9bHMsbj1qbyxpPVVvO2Z1bmN0aW9uIGEocixuKXt2YXIgaSxhLGM9byh0aGlzLHQscixuKSx1PW8odGhpcyxlLHIsbik7cmV0dXJuIk0iK2MucDArcyhjLnIsYy5wMSxjLmExLWMuYTApKyhhPXUsKChpPWMpLmEwPT1hLmEwJiZpLmExPT1hLmExP2woYy5yLGMucDEsYy5yLGMucDApOmwoYy5yLGMucDEsdS5yLHUucDApK3ModS5yLHUucDEsdS5hMS11LmEwKStsKHUucix1LnAxLGMucixjLnAwKSkrIloiKX1mdW5jdGlvbiBvKHQsZSxhLG8pe3ZhciBzPWUuY2FsbCh0LGEsbyksbD1yLmNhbGwodCxzLG8pLGM9bi5jYWxsKHQscyxvKS1DdCx1PWkuY2FsbCh0LHMsbyktQ3Q7cmV0dXJue3I6bCxhMDpjLGExOnUscDA6W2wqTWF0aC5jb3MoYyksbCpNYXRoLnNpbihjKV0scDE6W2wqTWF0aC5jb3ModSksbCpNYXRoLnNpbih1KV19fWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiJBIit0KyIsIit0KyIgMCAiKyArKHI+QXQpKyIsMSAiK2V9ZnVuY3Rpb24gbCh0LGUscixuKXtyZXR1cm4iUSAwLDAgIitufXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1kZSh0KSxhKTpyfSxhLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1kZShlKSxhKTp0fSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kZSh0KSxhKTplfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZGUodCksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1kZSh0KSxhKTppfSxhfSx0LnN2Zy5kaWFnb25hbD1mdW5jdGlvbigpe3ZhciB0PVZuLGU9cW4scj1jcztmdW5jdGlvbiBuKG4saSl7dmFyIGE9dC5jYWxsKHRoaXMsbixpKSxvPWUuY2FsbCh0aGlzLG4saSkscz0oYS55K28ueSkvMixsPVthLHt4OmEueCx5OnN9LHt4Om8ueCx5OnN9LG9dO3JldHVybiJNIisobD1sLm1hcChyKSlbMF0rIkMiK2xbMV0rIiAiK2xbMl0rIiAiK2xbM119cmV0dXJuIG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWRlKGUpLG4pOnR9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWRlKHQpLG4pOmV9LG4ucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHQuc3ZnLmRpYWdvbmFsLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBlPXQuc3ZnLmRpYWdvbmFsKCkscj1jcyxuPWUucHJvamVjdGlvbjtyZXR1cm4gZS5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24odXMocj10KSk6cn0sZX0sdC5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9aHMsZT1mcztmdW5jdGlvbiByKHIsbil7cmV0dXJuKGRzLmdldCh0LmNhbGwodGhpcyxyLG4pKXx8cHMpKGUuY2FsbCh0aGlzLHIsbikpfXJldHVybiByLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZGUoZSkscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWRlKHQpLHIpOmV9LHJ9O3ZhciBkcz10Lm1hcCh7Y2lyY2xlOnBzLGNyb3NzOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LzUpLzI7cmV0dXJuIk0iKy0zKmUrIiwiKy1lKyJIIistZSsiViIrLTMqZSsiSCIrZSsiViIrLWUrIkgiKzMqZSsiViIrZSsiSCIrZSsiViIrMyplKyJIIistZSsiViIrZSsiSCIrLTMqZSsiWiJ9LGRpYW1vbmQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvKDIqbXMpKSxyPWUqbXM7cmV0dXJuIk0wLCIrLWUrIkwiK3IrIiwwIDAsIitlKyIgIistcisiLDBaIn0sc3F1YXJlOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0KS8yO3JldHVybiJNIistZSsiLCIrLWUrIkwiK2UrIiwiKy1lKyIgIitlKyIsIitlKyIgIistZSsiLCIrZSsiWiJ9LCJ0cmlhbmdsZS1kb3duIjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC9ncykscj1lKmdzLzI7cmV0dXJuIk0wLCIrcisiTCIrZSsiLCIrLXIrIiAiKy1lKyIsIistcisiWiJ9LCJ0cmlhbmdsZS11cCI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvZ3MpLHI9ZSpncy8yO3JldHVybiJNMCwiKy1yKyJMIitlKyIsIityKyIgIistZSsiLCIrcisiWiJ9fSk7dC5zdmcuc3ltYm9sVHlwZXM9ZHMua2V5cygpO3ZhciBncz1NYXRoLnNxcnQoMyksbXM9TWF0aC50YW4oMzAqTHQpO1kudHJhbnNpdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuPWJzfHwrK1RzLGk9QXModCksYT1bXSxvPV9zfHx7dGltZTpEYXRlLm5vdygpLGVhc2U6Y2EsZGVsYXk6MCxkdXJhdGlvbjoyNTB9LHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe2EucHVzaChlPVtdKTtmb3IodmFyIGM9dGhpc1tzXSx1PS0xLGY9Yy5sZW5ndGg7Kyt1PGY7KShyPWNbdV0pJiZTcyhyLHUsaSxuLG8pLGUucHVzaChyKX1yZXR1cm4geHMoYSxpLG4pfSxZLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKG51bGw9PXQ/dnM6eXMoQXModCkpKX07dmFyIHZzPXlzKEFzKCkpO2Z1bmN0aW9uIHlzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHIsbjsoZT10aGlzW3RdKSYmKG49ZVtyPWUuYWN0aXZlXSkmJihuLnRpbWVyLmM9bnVsbCxuLnRpbWVyLnQ9TmFOLC0tZS5jb3VudD9kZWxldGUgZVtyXTpkZWxldGUgdGhpc1t0XSxlLmFjdGl2ZSs9LjUsbi5ldmVudCYmbi5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sbi5pbmRleCkpfX1mdW5jdGlvbiB4cyh0LGUscil7cmV0dXJuIFUodCx3cyksdC5uYW1lc3BhY2U9ZSx0LmlkPXIsdH12YXIgYnMsX3Msd3M9W10sVHM9MDtmdW5jdGlvbiBrcyh0LGUscixuKXt2YXIgaT10LmlkLGE9dC5uYW1lc3BhY2U7cmV0dXJuIHV0KHQsImZ1bmN0aW9uIj09dHlwZW9mIHI/ZnVuY3Rpb24odCxvLHMpe3RbYV1baV0udHdlZW4uc2V0KGUsbihyLmNhbGwodCx0Ll9fZGF0YV9fLG8scykpKX06KHI9bihyKSxmdW5jdGlvbih0KXt0W2FdW2ldLnR3ZWVuLnNldChlLHIpfSkpfWZ1bmN0aW9uIE1zKHQpe3JldHVybiBudWxsPT10JiYodD0iIiksZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIEFzKHQpe3JldHVybiBudWxsPT10PyJfX3RyYW5zaXRpb25fXyI6Il9fdHJhbnNpdGlvbl8iK3QrIl9fIn1mdW5jdGlvbiBTcyh0LGUscixuLGkpe3ZhciBhLG8scyxsLGMsdT10W3JdfHwodFtyXT17YWN0aXZlOjAsY291bnQ6MH0pLGY9dVtuXTtmdW5jdGlvbiBoKHIpe3ZhciBpPXUuYWN0aXZlLGg9dVtpXTtmb3IodmFyIGQgaW4gaCYmKGgudGltZXIuYz1udWxsLGgudGltZXIudD1OYU4sLS11LmNvdW50LGRlbGV0ZSB1W2ldLGguZXZlbnQmJmguZXZlbnQuaW50ZXJydXB0LmNhbGwodCx0Ll9fZGF0YV9fLGguaW5kZXgpKSx1KWlmKCtkPG4pe3ZhciBnPXVbZF07Zy50aW1lci5jPW51bGwsZy50aW1lci50PU5hTiwtLXUuY291bnQsZGVsZXRlIHVbZF19by5jPXAsd2UoKGZ1bmN0aW9uKCl7cmV0dXJuIG8uYyYmcChyfHwxKSYmKG8uYz1udWxsLG8udD1OYU4pLDF9KSwwLGEpLHUuYWN0aXZlPW4sZi5ldmVudCYmZi5ldmVudC5zdGFydC5jYWxsKHQsdC5fX2RhdGFfXyxlKSxjPVtdLGYudHdlZW4uZm9yRWFjaCgoZnVuY3Rpb24ocixuKXsobj1uLmNhbGwodCx0Ll9fZGF0YV9fLGUpKSYmYy5wdXNoKG4pfSkpLGw9Zi5lYXNlLHM9Zi5kdXJhdGlvbn1mdW5jdGlvbiBwKGkpe2Zvcih2YXIgYT1pL3Msbz1sKGEpLGg9Yy5sZW5ndGg7aD4wOyljWy0taF0uY2FsbCh0LG8pO2lmKGE+PTEpcmV0dXJuIGYuZXZlbnQmJmYuZXZlbnQuZW5kLmNhbGwodCx0Ll9fZGF0YV9fLGUpLC0tdS5jb3VudD9kZWxldGUgdVtuXTpkZWxldGUgdFtyXSwxfWZ8fChhPWkudGltZSxvPXdlKChmdW5jdGlvbih0KXt2YXIgZT1mLmRlbGF5O2lmKG8udD1lK2EsZTw9dClyZXR1cm4gaCh0LWUpO28uYz1ofSksMCxhKSxmPXVbbl09e3R3ZWVuOm5ldyBfLHRpbWU6YSx0aW1lcjpvLGRlbGF5OmkuZGVsYXksZHVyYXRpb246aS5kdXJhdGlvbixlYXNlOmkuZWFzZSxpbmRleDplfSxpPW51bGwsKyt1LmNvdW50KX13cy5jYWxsPVkuY2FsbCx3cy5lbXB0eT1ZLmVtcHR5LHdzLm5vZGU9WS5ub2RlLHdzLnNpemU9WS5zaXplLHQudHJhbnNpdGlvbj1mdW5jdGlvbihlLHIpe3JldHVybiBlJiZlLnRyYW5zaXRpb24/YnM/ZS50cmFuc2l0aW9uKHIpOmU6dC5zZWxlY3Rpb24oKS50cmFuc2l0aW9uKGUpfSx0LnRyYW5zaXRpb24ucHJvdG90eXBlPXdzLHdzLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT10aGlzLmlkLGE9dGhpcy5uYW1lc3BhY2Usbz1bXTt0PVcodCk7Zm9yKHZhciBzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXtvLnB1c2goZT1bXSk7Zm9yKHZhciBjPXRoaXNbc10sdT0tMSxmPWMubGVuZ3RoOysrdTxmOykobj1jW3VdKSYmKHI9dC5jYWxsKG4sbi5fX2RhdGFfXyx1LHMpKT8oIl9fZGF0YV9fImluIG4mJihyLl9fZGF0YV9fPW4uX19kYXRhX18pLFNzKHIsdSxhLGksblthXVtpXSksZS5wdXNoKHIpKTplLnB1c2gobnVsbCl9cmV0dXJuIHhzKG8sYSxpKX0sd3Muc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbz10aGlzLmlkLHM9dGhpcy5uYW1lc3BhY2UsbD1bXTt0PVgodCk7Zm9yKHZhciBjPS0xLHU9dGhpcy5sZW5ndGg7KytjPHU7KWZvcih2YXIgZj10aGlzW2NdLGg9LTEscD1mLmxlbmd0aDsrK2g8cDspaWYobj1mW2hdKXthPW5bc11bb10scj10LmNhbGwobixuLl9fZGF0YV9fLGgsYyksbC5wdXNoKGU9W10pO2Zvcih2YXIgZD0tMSxnPXIubGVuZ3RoOysrZDxnOykoaT1yW2RdKSYmU3MoaSxkLHMsbyxhKSxlLnB1c2goaSl9cmV0dXJuIHhzKGwscyxvKX0sd3MuZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1bXTsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bHQodCkpO2Zvcih2YXIgaT0wLGE9dGhpcy5sZW5ndGg7aTxhO2krKyl7bi5wdXNoKGU9W10pO2Zvcih2YXIgbyxzPTAsbD0obz10aGlzW2ldKS5sZW5ndGg7czxsO3MrKykocj1vW3NdKSYmdC5jYWxsKHIsci5fX2RhdGFfXyxzLGkpJiZlLnB1c2gocil9cmV0dXJuIHhzKG4sdGhpcy5uYW1lc3BhY2UsdGhpcy5pZCl9LHdzLnR3ZWVuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpcy5ub2RlKClbbl1bcl0udHdlZW4uZ2V0KHQpOnV0KHRoaXMsbnVsbD09ZT9mdW5jdGlvbihlKXtlW25dW3JdLnR3ZWVuLnJlbW92ZSh0KX06ZnVuY3Rpb24oaSl7aVtuXVtyXS50d2Vlbi5zZXQodCxlKX0pfSx3cy5hdHRyPWZ1bmN0aW9uKGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IociBpbiBlKXRoaXMuYXR0cihyLGVbcl0pO3JldHVybiB0aGlzfXZhciBuPSJ0cmFuc2Zvcm0iPT1lP2JhOiRpLGk9dC5ucy5xdWFsaWZ5KGUpO2Z1bmN0aW9uIGEoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShpKX1mdW5jdGlvbiBvKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpfWZ1bmN0aW9uIHModCl7cmV0dXJuIG51bGw9PXQ/YToodCs9IiIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlKGkpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKGksZSh0KSl9KX0pfWZ1bmN0aW9uIGwodCl7cmV0dXJuIG51bGw9PXQ/bzoodCs9IiIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKTtyZXR1cm4gciE9PXQmJihlPW4ocix0KSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxlKHQpKX0pfSl9cmV0dXJuIGtzKHRoaXMsImF0dHIuIitlLHIsaS5sb2NhbD9sOnMpfSx3cy5hdHRyVHdlZW49ZnVuY3Rpb24oZSxyKXt2YXIgbj10Lm5zLnF1YWxpZnkoZSk7cmV0dXJuIHRoaXMudHdlZW4oImF0dHIuIitlLG4ubG9jYWw/ZnVuY3Rpb24odCxlKXt2YXIgaT1yLmNhbGwodGhpcyx0LGUsdGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsaSh0KSl9fTpmdW5jdGlvbih0LGUpe3ZhciBpPXIuY2FsbCh0aGlzLHQsZSx0aGlzLmdldEF0dHJpYnV0ZShuKSk7cmV0dXJuIGkmJmZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKG4saSh0KSl9fSl9LHdzLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSIiKSx0KXRoaXMuc3R5bGUocix0W3JdLGUpO3JldHVybiB0aGlzfXI9IiJ9ZnVuY3Rpb24gaSgpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gbnVsbD09ZT9pOihlKz0iIixmdW5jdGlvbigpe3ZhciBuLGk9byh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KTtyZXR1cm4gaSE9PWUmJihuPSRpKGksZSksZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4oZSkscil9KX0pfXJldHVybiBrcyh0aGlzLCJzdHlsZS4iK3QsZSxhKX0sd3Muc3R5bGVUd2Vlbj1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihuLGkpe3ZhciBhPWUuY2FsbCh0aGlzLG4saSxvKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpKTtyZXR1cm4gYSYmZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGEoZSkscil9fXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDMmJihyPSIiKSx0aGlzLnR3ZWVuKCJzdHlsZS4iK3Qsbil9LHdzLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGtzKHRoaXMsInRleHQiLHQsTXMpfSx3cy5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5hbWVzcGFjZTtyZXR1cm4gdGhpcy5lYWNoKCJlbmQudHJhbnNpdGlvbiIsKGZ1bmN0aW9uKCl7dmFyIGU7dGhpc1t0XS5jb3VudDwyJiYoZT10aGlzLnBhcmVudE5vZGUpJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSkpfSx3cy5lYXNlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW25dW3JdLmVhc2U6KCJmdW5jdGlvbiIhPXR5cGVvZiBlJiYoZT10LmVhc2UuYXBwbHkodCxhcmd1bWVudHMpKSx1dCh0aGlzLChmdW5jdGlvbih0KXt0W25dW3JdLmVhc2U9ZX0pKSl9LHdzLmRlbGF5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW3JdW2VdLmRlbGF5OnV0KHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZGVsYXk9K3QuY2FsbChuLG4uX19kYXRhX18saSxhKX06KHQ9K3QsZnVuY3Rpb24obil7bltyXVtlXS5kZWxheT10fSkpfSx3cy5kdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kdXJhdGlvbjp1dCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4saSxhKXtuW3JdW2VdLmR1cmF0aW9uPU1hdGgubWF4KDEsdC5jYWxsKG4sbi5fX2RhdGFfXyxpLGEpKX06KHQ9TWF0aC5tYXgoMSx0KSxmdW5jdGlvbihuKXtuW3JdW2VdLmR1cmF0aW9uPXR9KSl9LHdzLmVhY2g9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmlkLGk9dGhpcy5uYW1lc3BhY2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgYT1fcyxvPWJzO3RyeXticz1uLHV0KHRoaXMsKGZ1bmN0aW9uKHQscixhKXtfcz10W2ldW25dLGUuY2FsbCh0LHQuX19kYXRhX18scixhKX0pKX1maW5hbGx5e19zPWEsYnM9b319ZWxzZSB1dCh0aGlzLChmdW5jdGlvbihhKXt2YXIgbz1hW2ldW25dOyhvLmV2ZW50fHwoby5ldmVudD10LmRpc3BhdGNoKCJzdGFydCIsImVuZCIsImludGVycnVwdCIpKSkub24oZSxyKX0pKTtyZXR1cm4gdGhpc30sd3MudHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHIsbj10aGlzLmlkLGk9KytUcyxhPXRoaXMubmFtZXNwYWNlLG89W10scz0wLGw9dGhpcy5sZW5ndGg7czxsO3MrKyl7by5wdXNoKHQ9W10pO2Zvcih2YXIgYyx1PTAsZj0oYz10aGlzW3NdKS5sZW5ndGg7dTxmO3UrKykoZT1jW3VdKSYmU3MoZSx1LGEsaSx7dGltZToocj1lW2FdW25dKS50aW1lLGVhc2U6ci5lYXNlLGRlbGF5OnIuZGVsYXkrci5kdXJhdGlvbixkdXJhdGlvbjpyLmR1cmF0aW9ufSksdC5wdXNoKGUpfXJldHVybiB4cyhvLGEsaSl9LHQuc3ZnLmF4aXM9ZnVuY3Rpb24oKXt2YXIgZSxyPXQuc2NhbGUubGluZWFyKCksaT1FcyxhPTYsbz02LHM9MyxsPVsxMF0sYz1udWxsO2Z1bmN0aW9uIHUobil7bi5lYWNoKChmdW5jdGlvbigpe3ZhciBuLHU9dC5zZWxlY3QodGhpcyksZj10aGlzLl9fY2hhcnRfX3x8cixoPXRoaXMuX19jaGFydF9fPXIuY29weSgpLHA9bnVsbD09Yz9oLnRpY2tzP2gudGlja3MuYXBwbHkoaCxsKTpoLmRvbWFpbigpOmMsZD1udWxsPT1lP2gudGlja0Zvcm1hdD9oLnRpY2tGb3JtYXQuYXBwbHkoaCxsKTpMOmUsZz11LnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKHAsaCksbT1nLmVudGVyKCkuaW5zZXJ0KCJnIiwiLmRvbWFpbiIpLmF0dHIoImNsYXNzIiwidGljayIpLnN0eWxlKCJvcGFjaXR5IixrdCksdj10LnRyYW5zaXRpb24oZy5leGl0KCkpLnN0eWxlKCJvcGFjaXR5IixrdCkucmVtb3ZlKCkseT10LnRyYW5zaXRpb24oZy5vcmRlcigpKS5zdHlsZSgib3BhY2l0eSIsMSkseD1NYXRoLm1heChhLDApK3MsYj1tbyhoKSxfPXUuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbMF0pLHc9KF8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLHQudHJhbnNpdGlvbihfKSk7bS5hcHBlbmQoImxpbmUiKSxtLmFwcGVuZCgidGV4dCIpO3ZhciBULGssTSxBLFM9bS5zZWxlY3QoImxpbmUiKSxFPXkuc2VsZWN0KCJsaW5lIiksQz1nLnNlbGVjdCgidGV4dCIpLnRleHQoZCksST1tLnNlbGVjdCgidGV4dCIpLFA9eS5zZWxlY3QoInRleHQiKSx6PSJ0b3AiPT09aXx8ImxlZnQiPT09aT8tMToxO2lmKCJib3R0b20iPT09aXx8InRvcCI9PT1pPyhuPUxzLFQ9IngiLE09InkiLGs9IngyIixBPSJ5MiIsQy5hdHRyKCJkeSIsejwwPyIwZW0iOiIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLHcuYXR0cigiZCIsIk0iK2JbMF0rIiwiK3oqbysiVjBIIitiWzFdKyJWIit6Km8pKToobj1JcyxUPSJ5IixNPSJ4IixrPSJ5MiIsQT0ieDIiLEMuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsejwwPyJlbmQiOiJzdGFydCIpLHcuYXR0cigiZCIsIk0iK3oqbysiLCIrYlswXSsiSDBWIitiWzFdKyJIIit6Km8pKSxTLmF0dHIoQSx6KmEpLEkuYXR0cihNLHoqeCksRS5hdHRyKGssMCkuYXR0cihBLHoqYSksUC5hdHRyKFQsMCkuYXR0cihNLHoqeCksaC5yYW5nZUJhbmQpe3ZhciBPPWgsRD1PLnJhbmdlQmFuZCgpLzI7Zj1oPWZ1bmN0aW9uKHQpe3JldHVybiBPKHQpK0R9fWVsc2UgZi5yYW5nZUJhbmQ/Zj1oOnYuY2FsbChuLGgsZik7bS5jYWxsKG4sZixoKSx5LmNhbGwobixoLGgpfSkpfXJldHVybiB1LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsdSk6cn0sdS5vcmllbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCBpbiBDcz90KyIiOkVzLHUpOml9LHUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1uKGFyZ3VtZW50cyksdSk6bH0sdS50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsdSk6Y30sdS50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsdSk6ZX0sdS50aWNrU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO3JldHVybiBlPyhhPSt0LG89K2FyZ3VtZW50c1tlLTFdLHUpOmF9LHUuaW5uZXJUaWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCx1KTphfSx1Lm91dGVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsdSk6b30sdS50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCx1KTpzfSx1LnRpY2tTdWJkaXZpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmdX0sdX07dmFyIEVzPSJib3R0b20iLENzPXt0b3A6MSxyaWdodDoxLGJvdHRvbToxLGxlZnQ6MX07ZnVuY3Rpb24gTHModCxlLHIpe3QuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm4idHJhbnNsYXRlKCIrKGlzRmluaXRlKG4pP246cih0KSkrIiwwKSJ9KSl9ZnVuY3Rpb24gSXModCxlLHIpe3QuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm4idHJhbnNsYXRlKDAsIisoaXNGaW5pdGUobik/bjpyKHQpKSsiKSJ9KSl9dC5zdmcuYnJ1c2g9ZnVuY3Rpb24oKXt2YXIgZSxyLG49TihoLCJicnVzaHN0YXJ0IiwiYnJ1c2giLCJicnVzaGVuZCIpLGk9bnVsbCxhPW51bGwscz1bMCwwXSxsPVswLDBdLGM9ITAsdT0hMCxmPXpzWzBdO2Z1bmN0aW9uIGgoZSl7ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPXQuc2VsZWN0KHRoaXMpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIsbSkub24oInRvdWNoc3RhcnQuYnJ1c2giLG0pLHI9ZS5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShbMF0pO3IuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhY2tncm91bmQiKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIiKSxlLnNlbGVjdEFsbCgiLmV4dGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgbj1lLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEoZixMKTtuLmV4aXQoKS5yZW1vdmUoKSxuLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4icmVzaXplICIrdH0pKS5zdHlsZSgiY3Vyc29yIiwoZnVuY3Rpb24odCl7cmV0dXJuIFBzW3RdfSkpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4vW2V3XSQvLnRlc3QodCk/LTM6bnVsbH0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuL15bbnNdLy50ZXN0KHQpPy0zOm51bGx9KSkuYXR0cigid2lkdGgiLDYpLmF0dHIoImhlaWdodCIsNikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKSxuLnN0eWxlKCJkaXNwbGF5IixoLmVtcHR5KCk/Im5vbmUiOm51bGwpO3ZhciBvLHM9dC50cmFuc2l0aW9uKGUpLGw9dC50cmFuc2l0aW9uKHIpO2kmJihvPW1vKGkpLGwuYXR0cigieCIsb1swXSkuYXR0cigid2lkdGgiLG9bMV0tb1swXSksZChzKSksYSYmKG89bW8oYSksbC5hdHRyKCJ5IixvWzBdKS5hdHRyKCJoZWlnaHQiLG9bMV0tb1swXSksZyhzKSkscChzKX0pKX1mdW5jdGlvbiBwKHQpe3Quc2VsZWN0QWxsKCIucmVzaXplIikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3NbKy9lJC8udGVzdCh0KV0rIiwiK2xbKy9ecy8udGVzdCh0KV0rIikifSkpfWZ1bmN0aW9uIGQodCl7dC5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ4IixzWzBdKSx0LnNlbGVjdEFsbCgiLmV4dGVudCwubj5yZWN0LC5zPnJlY3QiKS5hdHRyKCJ3aWR0aCIsc1sxXS1zWzBdKX1mdW5jdGlvbiBnKHQpe3Quc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieSIsbFswXSksdC5zZWxlY3RBbGwoIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0IikuYXR0cigiaGVpZ2h0IixsWzFdLWxbMF0pfWZ1bmN0aW9uIG0oKXt2YXIgZixtLHY9dGhpcyx5PXQuc2VsZWN0KHQuZXZlbnQudGFyZ2V0KSx4PW4ub2Yodixhcmd1bWVudHMpLGI9dC5zZWxlY3QodiksXz15LmRhdHVtKCksdz0hL14obnxzKSQvLnRlc3QoXykmJmksVD0hL14oZXx3KSQvLnRlc3QoXykmJmEsaz15LmNsYXNzZWQoImV4dGVudCIpLE09YnQodiksQT10Lm1vdXNlKHYpLFM9dC5zZWxlY3Qobyh2KSkub24oImtleWRvd24uYnJ1c2giLEwpLm9uKCJrZXl1cC5icnVzaCIsSSk7aWYodC5ldmVudC5jaGFuZ2VkVG91Y2hlcz9TLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLFApLm9uKCJ0b3VjaGVuZC5icnVzaCIsTyk6Uy5vbigibW91c2Vtb3ZlLmJydXNoIixQKS5vbigibW91c2V1cC5icnVzaCIsTyksYi5pbnRlcnJ1cHQoKS5zZWxlY3RBbGwoIioiKS5pbnRlcnJ1cHQoKSxrKUFbMF09c1swXS1BWzBdLEFbMV09bFswXS1BWzFdO2Vsc2UgaWYoXyl7dmFyIEU9Ky93JC8udGVzdChfKSxDPSsvXm4vLnRlc3QoXyk7bT1bc1sxLUVdLUFbMF0sbFsxLUNdLUFbMV1dLEFbMF09c1tFXSxBWzFdPWxbQ119ZWxzZSB0LmV2ZW50LmFsdEtleSYmKGY9QS5zbGljZSgpKTtmdW5jdGlvbiBMKCl7MzI9PXQuZXZlbnQua2V5Q29kZSYmKGt8fChmPW51bGwsQVswXS09c1sxXSxBWzFdLT1sWzFdLGs9MiksRigpKX1mdW5jdGlvbiBJKCl7MzI9PXQuZXZlbnQua2V5Q29kZSYmMj09ayYmKEFbMF0rPXNbMV0sQVsxXSs9bFsxXSxrPTAsRigpKX1mdW5jdGlvbiBQKCl7dmFyIGU9dC5tb3VzZSh2KSxyPSExO20mJihlWzBdKz1tWzBdLGVbMV0rPW1bMV0pLGt8fCh0LmV2ZW50LmFsdEtleT8oZnx8KGY9WyhzWzBdK3NbMV0pLzIsKGxbMF0rbFsxXSkvMl0pLEFbMF09c1srKGVbMF08ZlswXSldLEFbMV09bFsrKGVbMV08ZlsxXSldKTpmPW51bGwpLHcmJnooZSxpLDApJiYoZChiKSxyPSEwKSxUJiZ6KGUsYSwxKSYmKGcoYikscj0hMCksciYmKHAoYikseCh7dHlwZToiYnJ1c2giLG1vZGU6az8ibW92ZSI6InJlc2l6ZSJ9KSl9ZnVuY3Rpb24geih0LG4saSl7dmFyIGEsbyxoPW1vKG4pLHA9aFswXSxkPWhbMV0sZz1BW2ldLG09aT9sOnMsdj1tWzFdLW1bMF07aWYoayYmKHAtPWcsZC09ditnKSxhPShpP3U6Yyk/TWF0aC5tYXgocCxNYXRoLm1pbihkLHRbaV0pKTp0W2ldLGs/bz0oYSs9ZykrdjooZiYmKGc9TWF0aC5tYXgocCxNYXRoLm1pbihkLDIqZltpXS1hKSkpLGc8YT8obz1hLGE9Zyk6bz1nKSxtWzBdIT1hfHxtWzFdIT1vKXJldHVybiBpP3I9bnVsbDplPW51bGwsbVswXT1hLG1bMV09bywhMH1mdW5jdGlvbiBPKCl7UCgpLGIuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLGguZW1wdHkoKT8ibm9uZSI6bnVsbCksdC5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxTLm9uKCJtb3VzZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigidG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwpLm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwpLE0oKSx4KHt0eXBlOiJicnVzaGVuZCJ9KX1iLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksdC5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIix5LnN0eWxlKCJjdXJzb3IiKSkseCh7dHlwZToiYnJ1c2hzdGFydCJ9KSxQKCl9cmV0dXJuIGguZXZlbnQ9ZnVuY3Rpb24oaSl7aS5lYWNoKChmdW5jdGlvbigpe3ZhciBpPW4ub2YodGhpcyxhcmd1bWVudHMpLGE9e3g6cyx5OmwsaTplLGo6cn0sbz10aGlzLl9fY2hhcnRfX3x8YTt0aGlzLl9fY2hhcnRfXz1hLGJzP3Quc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKCl7ZT1vLmkscj1vLmoscz1vLngsbD1vLnksaSh7dHlwZToiYnJ1c2hzdGFydCJ9KX0pKS50d2VlbigiYnJ1c2g6YnJ1c2giLChmdW5jdGlvbigpe3ZhciB0PXRhKHMsYS54KSxuPXRhKGwsYS55KTtyZXR1cm4gZT1yPW51bGwsZnVuY3Rpb24oZSl7cz1hLng9dChlKSxsPWEueT1uKGUpLGkoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSl9fSkpLmVhY2goImVuZC5icnVzaCIsKGZ1bmN0aW9uKCl7ZT1hLmkscj1hLmosaSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSxpKHt0eXBlOiJicnVzaGVuZCJ9KX0pKTooaSh7dHlwZToiYnJ1c2hzdGFydCJ9KSxpKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLGkoe3R5cGU6ImJydXNoZW5kIn0pKX0pKX0saC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXpzWyEoaT10KTw8MXwhYV0saCk6aX0saC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXpzWyFpPDwxfCEoYT10KV0saCk6YX0saC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSYmYT8oYz0hIXRbMF0sdT0hIXRbMV0pOmk/Yz0hIXQ6YSYmKHU9ISF0KSxoKTppJiZhP1tjLHVdOmk/YzphP3U6bnVsbH0saC5leHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG4sbyxjLHUsZjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSYmKG49dFswXSxvPXRbMV0sYSYmKG49blswXSxvPW9bMF0pLGU9W24sb10saS5pbnZlcnQmJihuPWkobiksbz1pKG8pKSxvPG4mJihmPW4sbj1vLG89Ziksbj09c1swXSYmbz09c1sxXXx8KHM9W24sb10pKSxhJiYoYz10WzBdLHU9dFsxXSxpJiYoYz1jWzFdLHU9dVsxXSkscj1bYyx1XSxhLmludmVydCYmKGM9YShjKSx1PWEodSkpLHU8YyYmKGY9YyxjPXUsdT1mKSxjPT1sWzBdJiZ1PT1sWzFdfHwobD1bYyx1XSkpLGgpOihpJiYoZT8obj1lWzBdLG89ZVsxXSk6KG49c1swXSxvPXNbMV0saS5pbnZlcnQmJihuPWkuaW52ZXJ0KG4pLG89aS5pbnZlcnQobykpLG88biYmKGY9bixuPW8sbz1mKSkpLGEmJihyPyhjPXJbMF0sdT1yWzFdKTooYz1sWzBdLHU9bFsxXSxhLmludmVydCYmKGM9YS5pbnZlcnQoYyksdT1hLmludmVydCh1KSksdTxjJiYoZj1jLGM9dSx1PWYpKSksaSYmYT9bW24sY10sW28sdV1dOmk/W24sb106YSYmW2MsdV0pfSxoLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGguZW1wdHkoKXx8KHM9WzAsMF0sbD1bMCwwXSxlPXI9bnVsbCksaH0saC5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhaSYmc1swXT09c1sxXXx8ISFhJiZsWzBdPT1sWzFdfSx0LnJlYmluZChoLG4sIm9uIil9O3ZhciBQcz17bjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSx6cz1bWyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXSxbImUiLCJ3Il0sWyJuIiwicyJdLFtdXSxPcz1QZS5mb3JtYXQ9c3IudGltZUZvcm1hdCxEcz1Pcy51dGMsUnM9RHMoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO2Z1bmN0aW9uIEZzKHQpe3JldHVybiB0LnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gQnMoZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUodCl9ZnVuY3Rpb24gYShlLG4pe3ZhciBpPShlWzFdLWVbMF0pL24sYT10LmJpc2VjdChqcyxpKTtyZXR1cm4gYT09anMubGVuZ3RoP1tyLnllYXIsa28oZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LzMxNTM2ZTZ9KSksbilbMl1dOmE/cltpL2pzW2EtMV08anNbYV0vaT9hLTE6YV06W3FzLGtvKGUsbilbMl1dfXJldHVybiBpLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gTnMoZS5pbnZlcnQodCkpfSxpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZS5kb21haW4odCksaSk6ZS5kb21haW4oKS5tYXAoTnMpfSxpLm5pY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLmRvbWFpbigpLG49Z28ociksbz1udWxsPT10P2EobiwxMCk6Im51bWJlciI9PXR5cGVvZiB0JiZhKG4sdCk7ZnVuY3Rpb24gcyhyKXtyZXR1cm4haXNOYU4ocikmJiF0LnJhbmdlKHIsTnMoK3IrMSksZSkubGVuZ3RofXJldHVybiBvJiYodD1vWzBdLGU9b1sxXSksaS5kb21haW4oeW8ocixlPjE/e2Zsb29yOmZ1bmN0aW9uKGUpe2Zvcig7cyhlPXQuZmxvb3IoZSkpOyllPU5zKGUtMSk7cmV0dXJuIGV9LGNlaWw6ZnVuY3Rpb24oZSl7Zm9yKDtzKGU9dC5jZWlsKGUpKTspZT1OcygrZSsxKTtyZXR1cm4gZX19OnQpKX0saS50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciByPWdvKGkuZG9tYWluKCkpLG49bnVsbD09dD9hKHIsMTApOiJudW1iZXIiPT10eXBlb2YgdD9hKHIsdCk6IXQucmFuZ2UmJlt7cmFuZ2U6dH0sZV07cmV0dXJuIG4mJih0PW5bMF0sZT1uWzFdKSx0LnJhbmdlKHJbMF0sTnMoK3JbMV0rMSksZTwxPzE6ZSl9LGkudGlja0Zvcm1hdD1mdW5jdGlvbigpe3JldHVybiBufSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnMoZS5jb3B5KCkscixuKX0sd28oaSxlKX1mdW5jdGlvbiBOcyh0KXtyZXR1cm4gbmV3IERhdGUodCl9T3MuaXNvPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nJiYrbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP0ZzOlJzLEZzLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9LEZzLnRvU3RyaW5nPVJzLnRvU3RyaW5nLFBlLnNlY29uZD1SZSgoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB6ZSgxZTMqTWF0aC5mbG9vcih0LzFlMykpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzFlMypNYXRoLmZsb29yKGUpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRTZWNvbmRzKCl9KSksUGUuc2Vjb25kcz1QZS5zZWNvbmQucmFuZ2UsUGUuc2Vjb25kcy51dGM9UGUuc2Vjb25kLnV0Yy5yYW5nZSxQZS5taW51dGU9UmUoKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgemUoNmU0Kk1hdGguZmxvb3IodC82ZTQpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSh0LmdldFRpbWUoKSs2ZTQqTWF0aC5mbG9vcihlKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSkpLFBlLm1pbnV0ZXM9UGUubWludXRlLnJhbmdlLFBlLm1pbnV0ZXMudXRjPVBlLm1pbnV0ZS51dGMucmFuZ2UsUGUuaG91cj1SZSgoZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpLzYwO3JldHVybiBuZXcgemUoMzZlNSooTWF0aC5mbG9vcih0LzM2ZTUtZSkrZSkpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzM2ZTUqTWF0aC5mbG9vcihlKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKSxQZS5ob3Vycz1QZS5ob3VyLnJhbmdlLFBlLmhvdXJzLnV0Yz1QZS5ob3VyLnV0Yy5yYW5nZSxQZS5tb250aD1SZSgoZnVuY3Rpb24odCl7cmV0dXJuKHQ9UGUuZGF5KHQpKS5zZXREYXRlKDEpLHR9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpLFBlLm1vbnRocz1QZS5tb250aC5yYW5nZSxQZS5tb250aHMudXRjPVBlLm1vbnRoLnV0Yy5yYW5nZTt2YXIganM9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1LDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwzMTUzNmU2XSxVcz1bW1BlLnNlY29uZCwxXSxbUGUuc2Vjb25kLDVdLFtQZS5zZWNvbmQsMTVdLFtQZS5zZWNvbmQsMzBdLFtQZS5taW51dGUsMV0sW1BlLm1pbnV0ZSw1XSxbUGUubWludXRlLDE1XSxbUGUubWludXRlLDMwXSxbUGUuaG91ciwxXSxbUGUuaG91ciwzXSxbUGUuaG91ciw2XSxbUGUuaG91ciwxMl0sW1BlLmRheSwxXSxbUGUuZGF5LDJdLFtQZS53ZWVrLDFdLFtQZS5tb250aCwxXSxbUGUubW9udGgsM10sW1BlLnllYXIsMV1dLFZzPU9zLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0U2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERheSgpJiYxIT10LmdldERhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKHQpe3JldHVybiAxIT10LmdldERhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9XSxbIiVZIixZcl1dKSxxcz17cmFuZ2U6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LnJhbmdlKE1hdGguY2VpbChlL24pKm4sK3IsbikubWFwKE5zKX0sZmxvb3I6TCxjZWlsOkx9O1VzLnllYXI9UGUueWVhcixQZS5zY2FsZT1mdW5jdGlvbigpe3JldHVybiBCcyh0LnNjYWxlLmxpbmVhcigpLFVzLFZzKX07dmFyIEhzPVVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0udXRjLHRbMV1dfSkpLEdzPURzLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RheSgpJiYxIT10LmdldFVUQ0RhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKHQpe3JldHVybiAxIT10LmdldFVUQ0RhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9XSxbIiVZIixZcl1dKTtmdW5jdGlvbiBZcyh0KXtyZXR1cm4gSlNPTi5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gV3ModCl7dmFyIGU9aS5jcmVhdGVSYW5nZSgpO3JldHVybiBlLnNlbGVjdE5vZGUoaS5ib2R5KSxlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0LnJlc3BvbnNlVGV4dCl9SHMueWVhcj1QZS55ZWFyLnV0YyxQZS5zY2FsZS51dGM9ZnVuY3Rpb24oKXtyZXR1cm4gQnModC5zY2FsZS5saW5lYXIoKSxIcyxHcyl9LHQudGV4dD1nZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzcG9uc2VUZXh0fSkpLHQuanNvbj1mdW5jdGlvbih0LGUpe3JldHVybiBtZSh0LCJhcHBsaWNhdGlvbi9qc29uIixZcyxlKX0sdC5odG1sPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG1lKHQsInRleHQvaHRtbCIsV3MsZSl9LHQueG1sPWdlKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVhNTH0pKSwib2JqZWN0Ij09dHlwZW9mIGUmJmUuZXhwb3J0cz9lLmV4cG9ydHM9dDp0aGlzLmQzPXR9KCl9LHt9XSwxNzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWlmKHZvaWQgMCE9PWFyZ3VtZW50c1t0XSlyZXR1cm4gYXJndW1lbnRzW3RdfX0se31dLDE3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCIpLGk9dCgidW5pcSIpO2Z1bmN0aW9uIGEodCxlKXt0aGlzLnBvaW50PXQsdGhpcy5pbmRleD1lfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9dC5wb2ludCxuPWUucG9pbnQsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSl7dmFyIG89blthXS1yW2FdO2lmKG8pcmV0dXJuIG99cmV0dXJuIDB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107dmFyIHM9dFswXS5sZW5ndGg7aWYoczwxKXJldHVybltdO2lmKDE9PT1zKXJldHVybiBmdW5jdGlvbih0LGUscil7aWYoMT09PXQpcmV0dXJuIHI/W1stMSwwXV06W107dmFyIG49ZS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sZV19KSk7bi5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KSk7Zm9yKHZhciBpPW5ldyBBcnJheSh0LTEpLGE9MTthPHQ7KythKXt2YXIgbz1uW2EtMV0scz1uW2FdO2lbYS0xXT1bb1sxXSxzWzFdXX1yJiZpLnB1c2goWy0xLGlbMF1bMV1dLFtpW3QtMV1bMV0sLTFdKTtyZXR1cm4gaX0ocix0LGUpO2Zvcih2YXIgbD1uZXcgQXJyYXkociksYz0xLHU9MDt1PHI7Kyt1KXtmb3IodmFyIGY9dFt1XSxoPW5ldyBBcnJheShzKzEpLHA9MCxkPTA7ZDxzOysrZCl7dmFyIGc9ZltkXTtoW2RdPWcscCs9ZypnfWhbc109cCxsW3VdPW5ldyBhKGgsdSksYz1NYXRoLm1heChwLGMpfWkobCxvKSxyPWwubGVuZ3RoO3ZhciBtPW5ldyBBcnJheShyK3MrMSksdj1uZXcgQXJyYXkocitzKzEpLHk9KHMrMSkqKHMrMSkqYyx4PW5ldyBBcnJheShzKzEpO2Zvcih1PTA7dTw9czsrK3UpeFt1XT0wO3hbc109eSxtWzBdPXguc2xpY2UoKSx2WzBdPS0xO2Zvcih1PTA7dTw9czsrK3UpeyhoPXguc2xpY2UoKSlbdV09MSxtW3UrMV09aCx2W3UrMV09LTF9Zm9yKHU9MDt1PHI7Kyt1KXt2YXIgYj1sW3VdO21bdStzKzFdPWIucG9pbnQsdlt1K3MrMV09Yi5pbmRleH12YXIgXz1uKG0sITEpO189ZT9fLmZpbHRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8PXM7KytyKXt2YXIgbj12W3Rbcl1dO2lmKG48MCYmKytlPj0yKXJldHVybiExO3Rbcl09bn1yZXR1cm4hMH0pKTpfLmZpbHRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTw9czsrK2Upe3ZhciByPXZbdFtlXV07aWYocjwwKXJldHVybiExO3RbZV09cn1yZXR1cm4hMH0pKTtpZigxJnMpZm9yKHU9MDt1PF8ubGVuZ3RoOysrdSl7aD0oYj1fW3VdKVswXTtiWzBdPWJbMV0sYlsxXT1ofXJldHVybiBffX0seyJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCI6NDU5LHVuaXE6NTk3fV0sMTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1hO3ZhciBuPShhLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkuZ2V0Q29udGV4dCgiMmQiKSxpPW8oWzMyLDEyNl0pO2Z1bmN0aW9uIGEodCxlKXtBcnJheS5pc0FycmF5KHQpJiYodD10LmpvaW4oIiwgIikpO3ZhciByLGE9e30scz0xNixsPS4wNTtlJiYoMj09PWUubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIGVbMF0/cj1vKGUpOkFycmF5LmlzQXJyYXkoZSk/cj1lOihlLm8/cj1vKGUubyk6ZS5wYWlycyYmKHI9ZS5wYWlycyksZS5mb250U2l6ZSYmKHM9ZS5mb250U2l6ZSksbnVsbCE9ZS50aHJlc2hvbGQmJihsPWUudGhyZXNob2xkKSkpLHJ8fChyPWkpLG4uZm9udD1zKyJweCAiK3Q7Zm9yKHZhciBjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciB1PXJbY10sZj1uLm1lYXN1cmVUZXh0KHVbMF0pLndpZHRoK24ubWVhc3VyZVRleHQodVsxXSkud2lkdGgsaD1uLm1lYXN1cmVUZXh0KHUpLndpZHRoO2lmKE1hdGguYWJzKGYtaCk+cypsKXt2YXIgcD0oaC1mKS9zO2FbdV09MWUzKnB9fXJldHVybiBhfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVtdLHI9dFswXTtyPD10WzFdO3IrKylmb3IodmFyIG49U3RyaW5nLmZyb21DaGFyQ29kZShyKSxpPXRbMF07aTx0WzFdO2krKyl7dmFyIGE9bitTdHJpbmcuZnJvbUNoYXJDb2RlKGkpO2UucHVzaChhKX1yZXR1cm4gZX1hLmNyZWF0ZVBhaXJzPW8sYS5hc2NpaT1pfSx7fV0sMTczOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe3ZhciByPSExO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQ2NEFycmF5KXt2YXIgbj1uZXcgRmxvYXQ2NEFycmF5KDEpLGk9bmV3IFVpbnQzMkFycmF5KG4uYnVmZmVyKTtpZihuWzBdPTEscj0hMCwxMDcyNjkzMjQ4PT09aVsxXSl7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsW2lbMF0saVsxXV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbMF09dCxpWzFdPWUsblswXX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVswXX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVsxXX19ZWxzZSBpZigxMDcyNjkzMjQ4PT09aVswXSl7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsW2lbMV0saVswXV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbMV09dCxpWzBdPWUsblswXX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVsxXX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVswXX19ZWxzZSByPSExfWlmKCFyKXt2YXIgYT1uZXcgdCg4KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLFthLnJlYWRVSW50MzJMRSgwLCEwKSxhLnJlYWRVSW50MzJMRSg0LCEwKV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEud3JpdGVVSW50MzJMRSh0LDAsITApLGEud3JpdGVVSW50MzJMRShlLDQsITApLGEucmVhZERvdWJsZUxFKDAsITApfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLGEucmVhZFVJbnQzMkxFKDAsITApfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLGEucmVhZFVJbnQzMkxFKDQsITApfX1lLmV4cG9ydHMuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4gZS5leHBvcnRzLmhpKHQpPj4+MzF9LGUuZXhwb3J0cy5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4oZS5leHBvcnRzLmhpKHQpPDwxPj4+MjEpLTEwMjN9LGUuZXhwb3J0cy5mcmFjdGlvbj1mdW5jdGlvbih0KXt2YXIgcj1lLmV4cG9ydHMubG8odCksbj1lLmV4cG9ydHMuaGkodCksaT0xMDQ4NTc1Jm47cmV0dXJuIDIxNDY0MzUwNzImbiYmKGkrPTE8PDIwKSxbcixpXX0sZS5leHBvcnRzLmRlbm9ybWFsaXplZD1mdW5jdGlvbih0KXtyZXR1cm4hKDIxNDY0MzUwNzImZS5leHBvcnRzLmhpKHQpKX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHtidWZmZXI6MTExfV0sMTc0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiYWJzLXN2Zy1wYXRoIiksaT10KCJub3JtYWxpemUtc3ZnLXBhdGgiKSxhPXtNOiJtb3ZlVG8iLEM6ImJlemllckN1cnZlVG8ifTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LmJlZ2luUGF0aCgpLGkobihlKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXSxuPWUuc2xpY2UoMSk7dFthW3JdXS5hcHBseSh0LG4pfSkpLHQuY2xvc2VQYXRoKCl9fSx7ImFicy1zdmctcGF0aCI6NjUsIm5vcm1hbGl6ZS1zdmctcGF0aCI6NDk3fV0sMTc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImludDgiOnJldHVybiBJbnQ4QXJyYXk7Y2FzZSJpbnQxNiI6cmV0dXJuIEludDE2QXJyYXk7Y2FzZSJpbnQzMiI6cmV0dXJuIEludDMyQXJyYXk7Y2FzZSJ1aW50OCI6cmV0dXJuIFVpbnQ4QXJyYXk7Y2FzZSJ1aW50MTYiOnJldHVybiBVaW50MTZBcnJheTtjYXNlInVpbnQzMiI6cmV0dXJuIFVpbnQzMkFycmF5O2Nhc2UiZmxvYXQzMiI6cmV0dXJuIEZsb2F0MzJBcnJheTtjYXNlImZsb2F0NjQiOnJldHVybiBGbG9hdDY0QXJyYXk7Y2FzZSJhcnJheSI6cmV0dXJuIEFycmF5O2Nhc2UidWludDhfY2xhbXBlZCI6cmV0dXJuIFVpbnQ4Q2xhbXBlZEFycmF5fX19LHt9XSwxNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKCJ1bmRlZmluZWQiPT10eXBlb2YgZSYmKGU9MCksdHlwZW9mIHQpe2Nhc2UibnVtYmVyIjppZih0PjApcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtmb3Iocj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfSgwfHQsZSk7YnJlYWs7Y2FzZSJvYmplY3QiOmlmKCJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpcmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPTB8ZVtuXTtpZihpPD0wKXJldHVybltdO3ZhciBhLG89bmV3IEFycmF5KGkpO2lmKG49PT1lLmxlbmd0aC0xKWZvcihhPTA7YTxpOysrYSlvW2FdPXI7ZWxzZSBmb3IoYT0wO2E8aTsrK2Epb1thXT10KGUscixuKzEpO3JldHVybiBvfSh0LGUsMCl9cmV0dXJuW119fSx7fV0sMTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3I9cnx8Mjt2YXIgbixzLGwsYyx1LHAsZCxtPWUmJmUubGVuZ3RoLHY9bT9lWzBdKnI6dC5sZW5ndGgseT1pKHQsMCx2LHIsITApLHg9W107aWYoIXl8fHkubmV4dD09PXkucHJldilyZXR1cm4geDtpZihtJiYoeT1mdW5jdGlvbih0LGUscixuKXt2YXIgbyxzLGwsYyx1LHA9W107Zm9yKG89MCxzPWUubGVuZ3RoO288cztvKyspbD1lW29dKm4sYz1vPHMtMT9lW28rMV0qbjp0Lmxlbmd0aCwodT1pKHQsbCxjLG4sITEpKT09PXUubmV4dCYmKHUuc3RlaW5lcj0hMCkscC5wdXNoKGcodSkpO2ZvcihwLnNvcnQoZiksbz0wO288cC5sZW5ndGg7bysrKWgocFtvXSxyKSxyPWEocixyLm5leHQpO3JldHVybiByfSh0LGUseSxyKSksdC5sZW5ndGg+ODAqcil7bj1sPXRbMF0scz1jPXRbMV07Zm9yKHZhciBiPXI7Yjx2O2IrPXIpKHU9dFtiXSk8biYmKG49dSksKHA9dFtiKzFdKTxzJiYocz1wKSx1PmwmJihsPXUpLHA+YyYmKGM9cCk7ZD0wIT09KGQ9TWF0aC5tYXgobC1uLGMtcykpPzEvZDowfXJldHVybiBvKHkseCxyLG4scyxkKSx4fWZ1bmN0aW9uIGkodCxlLHIsbixpKXt2YXIgYSxvO2lmKGk9PT1FKHQsZSxyLG4pPjApZm9yKGE9ZTthPHI7YSs9bilvPU0oYSx0W2FdLHRbYSsxXSxvKTtlbHNlIGZvcihhPXItbjthPj1lO2EtPW4pbz1NKGEsdFthXSx0W2ErMV0sbyk7cmV0dXJuIG8mJngobyxvLm5leHQpJiYoQShvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBhKHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7dmFyIHIsbj10O2Rve2lmKHI9ITEsbi5zdGVpbmVyfHwheChuLG4ubmV4dCkmJjAhPT15KG4ucHJldixuLG4ubmV4dCkpbj1uLm5leHQ7ZWxzZXtpZihBKG4pLChuPWU9bi5wcmV2KT09PW4ubmV4dClicmVhaztyPSEwfX13aGlsZShyfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0LGUscixuLGksZixoKXtpZih0KXshaCYmZiYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dDtkb3tudWxsPT09aS56JiYoaS56PWQoaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xO2Rve2ZvcihyPXQsdD1udWxsLGE9bnVsbCxvPTA7cjspe2ZvcihvKyssbj1yLHM9MCxlPTA7ZTxjJiYocysrLG49bi5uZXh0Wik7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZuOykwIT09cyYmKDA9PT1sfHwhbnx8ci56PD1uLnopPyhpPXIscj1yLm5leHRaLHMtLSk6KGk9bixuPW4ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKX0oaSl9KHQsbixpLGYpO2Zvcih2YXIgcCxnLG09dDt0LnByZXYhPT10Lm5leHQ7KWlmKHA9dC5wcmV2LGc9dC5uZXh0LGY/bCh0LG4saSxmKTpzKHQpKWUucHVzaChwLmkvciksZS5wdXNoKHQuaS9yKSxlLnB1c2goZy5pL3IpLEEodCksdD1nLm5leHQsbT1nLm5leHQ7ZWxzZSBpZigodD1nKT09PW0pe2g/MT09PWg/byh0PWMoYSh0KSxlLHIpLGUscixuLGksZiwyKToyPT09aCYmdSh0LGUscixuLGksZik6byhhKHQpLGUscixuLGksZiwxKTticmVha319fWZ1bmN0aW9uIHModCl7dmFyIGU9dC5wcmV2LHI9dCxuPXQubmV4dDtpZih5KGUscixuKT49MClyZXR1cm4hMTtmb3IodmFyIGk9dC5uZXh0Lm5leHQ7aSE9PXQucHJldjspe2lmKG0oZS54LGUueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJnkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBpPXQucHJldixhPXQsbz10Lm5leHQ7aWYoeShpLGEsbyk+PTApcmV0dXJuITE7Zm9yKHZhciBzPWkueDxhLng/aS54PG8ueD9pLng6by54OmEueDxvLng/YS54Om8ueCxsPWkueTxhLnk/aS55PG8ueT9pLnk6by55OmEueTxvLnk/YS55Om8ueSxjPWkueD5hLng/aS54Pm8ueD9pLng6by54OmEueD5vLng/YS54Om8ueCx1PWkueT5hLnk/aS55Pm8ueT9pLnk6by55OmEueT5vLnk/YS55Om8ueSxmPWQocyxsLGUscixuKSxoPWQoYyx1LGUscixuKSxwPXQucHJldlosZz10Lm5leHRaO3AmJnAuej49ZiYmZyYmZy56PD1oOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmbShpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmeShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO2lmKHA9cC5wcmV2WixnIT09dC5wcmV2JiZnIT09dC5uZXh0JiZtKGkueCxpLnksYS54LGEueSxvLngsby55LGcueCxnLnkpJiZ5KGcucHJldixnLGcubmV4dCk+PTApcmV0dXJuITE7Zz1nLm5leHRafWZvcig7cCYmcC56Pj1mOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmbShpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmeShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO3A9cC5wcmV2Wn1mb3IoO2cmJmcuejw9aDspe2lmKGchPT10LnByZXYmJmchPT10Lm5leHQmJm0oaS54LGkueSxhLngsYS55LG8ueCxvLnksZy54LGcueSkmJnkoZy5wcmV2LGcsZy5uZXh0KT49MClyZXR1cm4hMTtnPWcubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsbz1uLm5leHQubmV4dDsheChpLG8pJiZiKGksbixuLm5leHQsbykmJlQoaSxvKSYmVChvLGkpJiYoZS5wdXNoKGkuaS9yKSxlLnB1c2gobi5pL3IpLGUucHVzaChvLmkvciksQShuKSxBKG4ubmV4dCksbj10PW8pLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gYShuKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxzKXt2YXIgbD10O2Rve2Zvcih2YXIgYz1sLm5leHQubmV4dDtjIT09bC5wcmV2Oyl7aWYobC5pIT09Yy5pJiZ2KGwsYykpe3ZhciB1PWsobCxjKTtyZXR1cm4gbD1hKGwsbC5uZXh0KSx1PWEodSx1Lm5leHQpLG8obCxlLHIsbixpLHMpLHZvaWQgbyh1LGUscixuLGkscyl9Yz1jLm5leHR9bD1sLm5leHR9d2hpbGUobCE9PXQpfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBoKHQsZSl7aWYoZT1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPXQueCxhPXQueSxvPS0xLzA7ZG97aWYoYTw9bi55JiZhPj1uLm5leHQueSYmbi5uZXh0LnkhPT1uLnkpe3ZhciBzPW4ueCsoYS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHM8PWkmJnM+byl7aWYobz1zLHM9PT1pKXtpZihhPT09bi55KXJldHVybiBuO2lmKGE9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fXI9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIXIpcmV0dXJuIG51bGw7aWYoaT09PW8pcmV0dXJuIHI7dmFyIGwsYz1yLHU9ci54LGY9ci55LGg9MS8wO249cjtkb3tpPj1uLngmJm4ueD49dSYmaSE9PW4ueCYmbShhPGY/aTpvLGEsdSxmLGE8Zj9vOmksYSxuLngsbi55KSYmKGw9TWF0aC5hYnMoYS1uLnkpLyhpLW4ueCksVChuLHQpJiYobDxofHxsPT09aCYmKG4ueD5yLnh8fG4ueD09PXIueCYmcChyLG4pKSkmJihyPW4saD1sKSksbj1uLm5leHR9d2hpbGUobiE9PWMpO3JldHVybiByfSh0LGUpKXt2YXIgcj1rKGUsdCk7YShlLGUubmV4dCksYShyLHIubmV4dCl9fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4geSh0LnByZXYsdCxlLnByZXYpPDAmJnkoZS5uZXh0LHQsdC5uZXh0KTwwfWZ1bmN0aW9uIGQodCxlLHIsbixpKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LXIpKmkpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLW4pKmkpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQscj10O2RveyhlLng8ci54fHxlLng9PT1yLngmJmUueTxyLnkpJiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gbSh0LGUscixuLGksYSxvLHMpe3JldHVybihpLW8pKihlLXMpLSh0LW8pKihhLXMpPj0wJiYodC1vKSoobi1zKS0oci1vKSooZS1zKT49MCYmKHItbykqKGEtcyktKGktbykqKG4tcyk+PTB9ZnVuY3Rpb24gdih0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiFmdW5jdGlvbih0LGUpe3ZhciByPXQ7ZG97aWYoci5pIT09dC5pJiZyLm5leHQuaSE9PXQuaSYmci5pIT09ZS5pJiZyLm5leHQuaSE9PWUuaSYmYihyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmKFQodCxlKSYmVChlLHQpJiZmdW5jdGlvbih0LGUpe3ZhciByPXQsbj0hMSxpPSh0LngrZS54KS8yLGE9KHQueStlLnkpLzI7ZG97ci55PmEhPXIubmV4dC55PmEmJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihhLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiBufSh0LGUpJiYoeSh0LnByZXYsdCxlLnByZXYpfHx5KHQsZS5wcmV2LGUpKXx8eCh0LGUpJiZ5KHQucHJldix0LHQubmV4dCk+MCYmeShlLnByZXYsZSxlLm5leHQpPjApfWZ1bmN0aW9uIHkodCxlLHIpe3JldHVybihlLnktdC55KSooci54LWUueCktKGUueC10LngpKihyLnktZS55KX1mdW5jdGlvbiB4KHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIGIodCxlLHIsbil7dmFyIGk9dyh5KHQsZSxyKSksYT13KHkodCxlLG4pKSxvPXcoeShyLG4sdCkpLHM9dyh5KHIsbixlKSk7cmV0dXJuIGkhPT1hJiZvIT09c3x8KCEoMCE9PWl8fCFfKHQscixlKSl8fCghKDAhPT1hfHwhXyh0LG4sZSkpfHwoISgwIT09b3x8IV8ocix0LG4pKXx8ISgwIT09c3x8IV8ocixlLG4pKSkpKX1mdW5jdGlvbiBfKHQsZSxyKXtyZXR1cm4gZS54PD1NYXRoLm1heCh0Lngsci54KSYmZS54Pj1NYXRoLm1pbih0Lngsci54KSYmZS55PD1NYXRoLm1heCh0Lnksci55KSYmZS55Pj1NYXRoLm1pbih0Lnksci55KX1mdW5jdGlvbiB3KHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuIHkodC5wcmV2LHQsdC5uZXh0KTwwP3kodCxlLHQubmV4dCk+PTAmJnkodCx0LnByZXYsZSk+PTA6eSh0LGUsdC5wcmV2KTwwfHx5KHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gayh0LGUpe3ZhciByPW5ldyBTKHQuaSx0LngsdC55KSxuPW5ldyBTKGUuaSxlLngsZS55KSxpPXQubmV4dCxhPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWksaS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4sYS5uZXh0PW4sbi5wcmV2PWEsbn1mdW5jdGlvbiBNKHQsZSxyLG4pe3ZhciBpPW5ldyBTKHQsZSxyKTtyZXR1cm4gbj8oaS5uZXh0PW4ubmV4dCxpLnByZXY9bixuLm5leHQucHJldj1pLG4ubmV4dD1pKTooaS5wcmV2PWksaS5uZXh0PWkpLGl9ZnVuY3Rpb24gQSh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIFModCxlLHIpe3RoaXMuaT10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIEUodCxlLHIsbil7Zm9yKHZhciBpPTAsYT1lLG89ci1uO2E8cjthKz1uKWkrPSh0W29dLXRbYV0pKih0W2ErMV0rdFtvKzFdKSxvPWE7cmV0dXJuIGl9ZS5leHBvcnRzPW4sZS5leHBvcnRzLmRlZmF1bHQ9bixuLmRldmlhdGlvbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lJiZlLmxlbmd0aCxhPWk/ZVswXSpyOnQubGVuZ3RoLG89TWF0aC5hYnMoRSh0LDAsYSxyKSk7aWYoaSlmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDtzKyspe3ZhciBjPWVbc10qcix1PXM8bC0xP2VbcysxXSpyOnQubGVuZ3RoO28tPU1hdGguYWJzKEUodCxjLHUscikpfXZhciBmPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBoPW5bc10qcixwPW5bcysxXSpyLGQ9bltzKzJdKnI7Zis9TWF0aC5hYnMoKHRbaF0tdFtkXSkqKHRbcCsxXS10W2grMV0pLSh0W2hdLXRbcF0pKih0W2QrMV0tdFtoKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09Zj8wOk1hdGguYWJzKChmLW8pL28pfSxuLmZsYXR0ZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF1bMF0ubGVuZ3RoLHI9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPTA7YTx0W2ldLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxlO28rKylyLnZlcnRpY2VzLnB1c2godFtpXVthXVtvXSk7aT4wJiYobis9dFtpLTFdLmxlbmd0aCxyLmhvbGVzLnB1c2gobikpfXJldHVybiByfX0se31dLDE3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigibnVtYmVyIiE9dHlwZW9mIGUpe2U9MDtmb3IodmFyIGk9MDtpPHI7KytpKXt2YXIgYT10W2ldO2U9TWF0aC5tYXgoZSxhWzBdLGFbMV0pfWU9MSsoMHxlKX1lfD0wO3ZhciBvPW5ldyBBcnJheShlKTtmb3IoaT0wO2k8ZTsrK2kpb1tpXT1bXTtmb3IoaT0wO2k8cjsrK2kpe2E9dFtpXTtvW2FbMF1dLnB1c2goYVsxXSksb1thWzFdXS5wdXNoKGFbMF0pfWZvcih2YXIgcz0wO3M8ZTsrK3MpbihvW3NdLChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7cmV0dXJuIG99O3ZhciBuPXQoInVuaXEiKX0se3VuaXE6NTk3fV0sMTc5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpPVtdLGE9W10sbz1bXSxzPXt9LGw9W107ZnVuY3Rpb24gYyh0KXt2YXIgZSxuLGk9ITE7Zm9yKGEucHVzaCh0KSxvW3RdPSEwLGU9MDtlPGxbdF0ubGVuZ3RoO2UrKykobj1sW3RdW2VdKT09PXI/KHUocixhKSxpPSEwKTpvW25dfHwoaT1jKG4pKTtpZihpKSFmdW5jdGlvbiB0KGUpe29bZV09ITEscy5oYXNPd25Qcm9wZXJ0eShlKSYmT2JqZWN0LmtleXMoc1tlXSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7ZGVsZXRlIHNbZV1bcl0sb1tyXSYmdChyKX0pKX0odCk7ZWxzZSBmb3IoZT0wO2U8bFt0XS5sZW5ndGg7ZSsrKXtuPWxbdF1bZV07dmFyIGY9c1tuXTtmfHwoZj17fSxzW25dPWYpLGZbbl09ITB9cmV0dXJuIGEucG9wKCksaX1mdW5jdGlvbiB1KHQscil7dmFyIG49W10uY29uY2F0KHIpLmNvbmNhdCh0KTtlP2UoYyk6aS5wdXNoKG4pfWZ1bmN0aW9uIGYoZSl7IWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXI8ZSYmKHRbcl09W10pLHRbcl09dFtyXS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj1lfSkpfShlKTtmb3IodmFyIHIsaT1uKHQpLmNvbXBvbmVudHMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MX0pKSxhPTEvMCxvPTA7bzxpLmxlbmd0aDtvKyspZm9yKHZhciBzPTA7czxpW29dLmxlbmd0aDtzKyspaVtvXVtzXTxhJiYoYT1pW29dW3NdLHI9byk7dmFyIGw9aVtyXTtyZXR1cm4hIWwmJntsZWFzdFZlcnRleDphLGFkakxpc3Q6dC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuLTE9PT1sLmluZGV4T2YoZSk/W106dC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybi0xIT09bC5pbmRleE9mKHQpfSkpfSkpfX1yPTA7Zm9yKHZhciBoPXQubGVuZ3RoO3I8aDspe3ZhciBwPWYocik7aWYocj1wLmxlYXN0VmVydGV4LGw9cC5hZGpMaXN0KXtmb3IodmFyIGQ9MDtkPGwubGVuZ3RoO2QrKylmb3IodmFyIGc9MDtnPGxbZF0ubGVuZ3RoO2crKyl7dmFyIG09bFtkXVtnXTtvWyttXT0hMSxzW21dPXt9fWMocikscis9MX1lbHNlIHI9aH1yZXR1cm4gZT92b2lkIDA6aX19LHsic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiOjU2OX1dLDE4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzKS5sZW5ndGg9MCx0aGlzfX0seyIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiOjIxMX1dLDE4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/QXJyYXkuZnJvbTp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxODIsIi4vc2hpbSI6MTgzfV0sMTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUscj1BcnJheS5mcm9tO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByJiYoZT1yKHQ9WyJyYXoiLCJkd2EiXSksQm9vbGVhbihlJiZlIT09dCYmImR3YSI9PT1lWzFdKSl9fSx7fV0sMTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNi1zeW1ib2wiKS5pdGVyYXRvcixpPXQoIi4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGE9dCgiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb24iKSxvPXQoIi4uLy4uL251bWJlci90by1wb3MtaW50ZWdlciIpLHM9dCgiLi4vLi4vb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIiksbD10KCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiKSxjPXQoIi4uLy4uL29iamVjdC9pcy12YWx1ZSIpLHU9dCgiLi4vLi4vc3RyaW5nL2lzLXN0cmluZyIpLGY9QXJyYXkuaXNBcnJheSxoPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLHA9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9LGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGcsbSx2LHkseCxiLF8sdyxUPWFyZ3VtZW50c1sxXSxrPWFyZ3VtZW50c1syXTtpZih0PU9iamVjdChsKHQpKSxjKFQpJiZzKFQpLHRoaXMmJnRoaXMhPT1BcnJheSYmYSh0aGlzKSllPXRoaXM7ZWxzZXtpZighVCl7aWYoaSh0KSlyZXR1cm4gMSE9PSh2PXQubGVuZ3RoKT9BcnJheS5hcHBseShudWxsLHQpOigobT1uZXcgQXJyYXkoMSkpWzBdPXRbMF0sbSk7aWYoZih0KSl7Zm9yKG09bmV3IEFycmF5KHY9dC5sZW5ndGgpLHI9MDtyPHY7KytyKW1bcl09dFtyXTtyZXR1cm4gbX19bT1bXX1pZighZih0KSlpZih2b2lkIDAhPT0oXz10W25dKSl7Zm9yKHg9cyhfKS5jYWxsKHQpLGUmJihtPW5ldyBlKSxiPXgubmV4dCgpLHI9MDshYi5kb25lOyl3PVQ/aC5jYWxsKFQsayxiLnZhbHVlLHIpOmIudmFsdWUsZT8ocC52YWx1ZT13LGQobSxyLHApKTptW3JdPXcsYj14Lm5leHQoKSwrK3I7dj1yfWVsc2UgaWYodSh0KSl7Zm9yKHY9dC5sZW5ndGgsZSYmKG09bmV3IGUpLHI9MCxnPTA7cjx2Oysrcil3PXRbcl0scisxPHYmJih5PXcuY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZ5PD01NjMxOSYmKHcrPXRbKytyXSksdz1UP2guY2FsbChULGssdyxnKTp3LGU/KHAudmFsdWU9dyxkKG0sZyxwKSk6bVtnXT13LCsrZzt2PWd9aWYodm9pZCAwPT09dilmb3Iodj1vKHQubGVuZ3RoKSxlJiYobT1uZXcgZSh2KSkscj0wO3I8djsrK3Ipdz1UP2guY2FsbChULGssdFtyXSxyKTp0W3JdLGU/KHAudmFsdWU9dyxkKG0scixwKSk6bVtyXT13O3JldHVybiBlJiYocC52YWx1ZT1udWxsLG0ubGVuZ3RoPXYpLG19fSx7Ii4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTg0LCIuLi8uLi9mdW5jdGlvbi9pcy1mdW5jdGlvbiI6MTg1LCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXIiOjE5MSwiLi4vLi4vb2JqZWN0L2lzLXZhbHVlIjoyMDAsIi4uLy4uL29iamVjdC92YWxpZC1jYWxsYWJsZSI6MjA5LCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiOjIxMSwiLi4vLi4vc3RyaW5nL2lzLXN0cmluZyI6MjE1LCJlczYtc3ltYm9sIjoyMjV9XSwxODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHQpPT09aX19LHt9XSwxODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPVJlZ0V4cC5wcm90b3R5cGUudGVzdC5iaW5kKC9eW29iamVjdCBbQS1aYS16MC05XSpGdW5jdGlvbl0kLyk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZpKG4uY2FsbCh0KSl9fSx7fV0sMTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP01hdGguc2lnbjp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxODgsIi4vc2hpbSI6MTg5fV0sMTg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PU1hdGguc2lnbjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmKDE9PT10KDEwKSYmLTE9PT10KC0yMCkpfX0se31dLDE4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TnVtYmVyKHQpLGlzTmFOKHQpfHwwPT09dD90OnQ+MD8xOi0xfX0se31dLDE5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9tYXRoL3NpZ24iKSxpPU1hdGguYWJzLGE9TWF0aC5mbG9vcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQpPzA6MCE9PSh0PU51bWJlcih0KSkmJmlzRmluaXRlKHQpP24odCkqYShpKHQpKTp0fX0seyIuLi9tYXRoL3NpZ24iOjE4N31dLDE5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3RvLWludGVnZXIiKSxpPU1hdGgubWF4O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSgwLG4odCkpfX0seyIuL3RvLWludGVnZXIiOjE5MH1dLDE5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3ZhbGlkLWNhbGxhYmxlIiksaT10KCIuL3ZhbGlkLXZhbHVlIiksYT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZCxvPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLHM9T2JqZWN0LmtleXMsbD1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyLGMpe3ZhciB1LGY9YXJndW1lbnRzWzJdLGg9YXJndW1lbnRzWzNdO3JldHVybiByPU9iamVjdChpKHIpKSxuKGMpLHU9cyhyKSxoJiZ1LnNvcnQoImZ1bmN0aW9uIj09dHlwZW9mIGg/YS5jYWxsKGgscik6dm9pZCAwKSwiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9dVt0XSksby5jYWxsKHQsdSwoZnVuY3Rpb24odCxuKXtyZXR1cm4gbC5jYWxsKHIsdCk/by5jYWxsKGMsZixyW3RdLHQscixuKTplfSkpfX19LHsiLi92YWxpZC1jYWxsYWJsZSI6MjA5LCIuL3ZhbGlkLXZhbHVlIjoyMTF9XSwxOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP09iamVjdC5hc3NpZ246dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTk0LCIuL3NoaW0iOjE5NX1dLDE5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPU9iamVjdC5hc3NpZ247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJihlKHQ9e2ZvbzoicmF6In0se2JhcjoiZHdhIn0se3Ryenk6InRyenkifSksdC5mb28rdC5iYXIrdC50cnp5PT09InJhemR3YXRyenkiKX19LHt9XSwxOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4va2V5cyIpLGk9dCgiLi4vdmFsaWQtdmFsdWUiKSxhPU1hdGgubWF4O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG8scyxsPWEoYXJndW1lbnRzLmxlbmd0aCwyKTtmb3IodD1PYmplY3QoaSh0KSkscz1mdW5jdGlvbihuKXt0cnl7dFtuXT1lW25dfWNhdGNoKHQpe3J8fChyPXQpfX0sbz0xO288bDsrK28pbihlPWFyZ3VtZW50c1tvXSkuZm9yRWFjaChzKTtpZih2b2lkIDAhPT1yKXRocm93IHI7cmV0dXJuIHR9fSx7Ii4uL2tleXMiOjIwMSwiLi4vdmFsaWQtdmFsdWUiOjIxMX1dLDE5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hcnJheS9mcm9tIiksaT10KCIuL2Fzc2lnbiIpLGE9dCgiLi92YWxpZC12YWx1ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QoYSh0KSkscj1hcmd1bWVudHNbMV0sbz1PYmplY3QoYXJndW1lbnRzWzJdKTtpZihlIT09dCYmIXIpcmV0dXJuIGU7dmFyIHM9e307cmV0dXJuIHI/bihyLChmdW5jdGlvbihlKXsoby5lbnN1cmV8fGUgaW4gdCkmJihzW2VdPXRbZV0pfSkpOmkocyx0KSxzfX0seyIuLi9hcnJheS9mcm9tIjoxODEsIi4vYXNzaWduIjoxOTMsIi4vdmFsaWQtdmFsdWUiOjIxMX1dLDE5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbyxzPU9iamVjdC5jcmVhdGU7dCgiLi9zZXQtcHJvdG90eXBlLW9mL2lzLWltcGxlbWVudGVkIikoKXx8KG49dCgiLi9zZXQtcHJvdG90eXBlLW9mL3NoaW0iKSksZS5leHBvcnRzPW4/MSE9PW4ubGV2ZWw/czooaT17fSxhPXt9LG89e2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0sT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlwZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7YVt0XT0iX19wcm90b19fIiE9PXQ/bzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJudWxsUG9seWZpbGwiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSx2YWx1ZTppfSksZnVuY3Rpb24odCxlKXtyZXR1cm4gcyhudWxsPT09dD9pOnQsZSl9KTpzfSx7Ii4vc2V0LXByb3RvdHlwZS1vZi9pcy1pbXBsZW1lbnRlZCI6MjA3LCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbSI6MjA4fV0sMTk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL19pdGVyYXRlIikoImZvckVhY2giKX0seyIuL19pdGVyYXRlIjoxOTJ9XSwxOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy12YWx1ZSIpLGk9e2Z1bmN0aW9uOiEwLG9iamVjdDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQpJiZpW3R5cGVvZiB0XXx8ITF9fSx7Ii4vaXMtdmFsdWUiOjIwMH1dLDIwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9mdW5jdGlvbi9ub29wIikoKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1uJiZudWxsIT09dH19LHsiLi4vZnVuY3Rpb24vbm9vcCI6MTg2fV0sMjAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9PYmplY3Qua2V5czp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoyMDIsIi4vc2hpbSI6MjAzfV0sMjAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gT2JqZWN0LmtleXMoInByaW1pdGl2ZSIpLCEwfWNhdGNoKHQpe3JldHVybiExfX19LHt9XSwyMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaXMtdmFsdWUiKSxpPU9iamVjdC5rZXlzO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaShuKHQpP09iamVjdCh0KTp0KX19LHsiLi4vaXMtdmFsdWUiOjIwMH1dLDIwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3ZhbGlkLWNhbGxhYmxlIiksaT10KCIuL2Zvci1lYWNoIiksYT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxvPWFyZ3VtZW50c1syXTtyZXR1cm4gbihlKSxpKHQsKGZ1bmN0aW9uKHQsbixpLHMpe3Jbbl09YS5jYWxsKGUsbyx0LG4saSxzKX0pKSxyfX0seyIuL2Zvci1lYWNoIjoxOTgsIi4vdmFsaWQtY2FsbGFibGUiOjIwOX1dLDIwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIiksaT1BcnJheS5wcm90b3R5cGUuZm9yRWFjaCxhPU9iamVjdC5jcmVhdGUsbz1mdW5jdGlvbih0LGUpe3ZhciByO2ZvcihyIGluIHQpZVtyXT10W3JdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9YShudWxsKTtyZXR1cm4gaS5jYWxsKGFyZ3VtZW50cywoZnVuY3Rpb24odCl7bih0KSYmbyhPYmplY3QodCksZSl9KSksZX19LHsiLi9pcy12YWx1ZSI6MjAwfV0sMjA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9PYmplY3Quc2V0UHJvdG90eXBlT2Y6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MjA3LCIuL3NoaW0iOjIwOH1dLDIwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuY3JlYXRlLGk9T2JqZWN0LmdldFByb3RvdHlwZU9mLGE9e307ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mLGU9YXJndW1lbnRzWzBdfHxuO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZpKHQoZShudWxsKSxhKSk9PT1hfX0se31dLDIwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoIi4uL2lzLW9iamVjdCIpLGE9dCgiLi4vdmFsaWQtdmFsdWUiKSxvPU9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZixzPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxsPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9O249ZnVuY3Rpb24odCxlKXtpZihhKHQpLG51bGw9PT1lfHxpKGUpKXJldHVybiB0O3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3RvdHlwZSBtdXN0IGJlIG51bGwgb3IgYW4gb2JqZWN0Iil9LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiB0PygyPT09dC5sZXZlbD90LnNldD8ocj10LnNldCxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuY2FsbChuKHQsZSksZSksdH0pOmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpLl9fcHJvdG9fXz1lLHR9OmU9ZnVuY3Rpb24gdChlLHIpe3ZhciBpO3JldHVybiBuKGUsciksKGk9by5jYWxsKHQubnVsbFBvbHlmaWxsLGUpKSYmZGVsZXRlIHQubnVsbFBvbHlmaWxsLl9fcHJvdG9fXyxudWxsPT09ciYmKHI9dC5udWxsUG9seWZpbGwpLGUuX19wcm90b19fPXIsaSYmcyh0Lm51bGxQb2x5ZmlsbCwiX19wcm90b19fIixsKSxlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibGV2ZWwiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSx2YWx1ZTp0LmxldmVsfSkpOm51bGx9KGZ1bmN0aW9uKCl7dmFyIHQsZT1PYmplY3QuY3JlYXRlKG51bGwpLHI9e30sbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpO2lmKG4pe3RyeXsodD1uLnNldCkuY2FsbChlLHIpfWNhdGNoKHQpe31pZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yKXJldHVybntzZXQ6dCxsZXZlbDoyfX1yZXR1cm4gZS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yP3tsZXZlbDoyfTooKGU9e30pLl9fcHJvdG9fXz1yLE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PXImJntsZXZlbDoxfSl9KCkpLHQoIi4uL2NyZWF0ZSIpfSx7Ii4uL2NyZWF0ZSI6MTk3LCIuLi9pcy1vYmplY3QiOjE5OSwiLi4vdmFsaWQtdmFsdWUiOjIxMX1dLDIwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gdH19LHt9XSwyMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1vYmplY3QiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGFuIE9iamVjdCIpO3JldHVybiB0fX0seyIuL2lzLW9iamVjdCI6MTk5fV0sMjExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiB0fX0seyIuL2lzLXZhbHVlIjoyMDB9XSwyMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP1N0cmluZy5wcm90b3R5cGUuY29udGFpbnM6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MjEzLCIuL3NoaW0iOjIxNH1dLDIxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0icmF6ZHdhdHJ6eSI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4uY29udGFpbnMmJighMD09PW4uY29udGFpbnMoImR3YSIpJiYhMT09PW4uY29udGFpbnMoImZvbyIpKX19LHt9XSwyMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49U3RyaW5nLnByb3RvdHlwZS5pbmRleE9mO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHRoaXMsdCxhcmd1bWVudHNbMV0pPi0xfX0se31dLDIxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGk9bi5jYWxsKCIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHx0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0IGluc3RhbmNlb2YgU3RyaW5nfHxuLmNhbGwodCk9PT1pKXx8ITF9fSx7fV0sMjE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksaT1NYXRoLnJhbmRvbTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdDtkb3t0PWkoKS50b1N0cmluZygzNikuc2xpY2UoMil9d2hpbGUoblt0XSk7cmV0dXJuIHR9fSx7fV0sMjE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyIpLG89dCgiZCIpLHM9dCgiZXM2LXN5bWJvbCIpLGw9dCgiLi8iKSxjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7bC5jYWxsKHRoaXMsdCksZT1lP2EuY2FsbChlLCJrZXkrdmFsdWUiKT8ia2V5K3ZhbHVlIjphLmNhbGwoZSwia2V5Iik/ImtleSI6InZhbHVlIjoidmFsdWUiLGModGhpcywiX19raW5kX18iLG8oIiIsZSkpfSxpJiZpKG4sbCksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobC5wcm90b3R5cGUse19yZXNvbHZlOm8oKGZ1bmN0aW9uKHQpe3JldHVybiJ2YWx1ZSI9PT10aGlzLl9fa2luZF9fP3RoaXMuX19saXN0X19bdF06ImtleSt2YWx1ZSI9PT10aGlzLl9fa2luZF9fP1t0LHRoaXMuX19saXN0X19bdF1dOnR9KSl9KSxjKG4ucHJvdG90eXBlLHMudG9TdHJpbmdUYWcsbygiYyIsIkFycmF5IEl0ZXJhdG9yIikpfSx7Ii4vIjoyMjAsZDoxNTUsImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiOjIwNiwiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyI6MjEyLCJlczYtc3ltYm9sIjoyMjV9XSwyMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiKSxpPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIiksYT10KCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciKSxvPXQoIi4vZ2V0Iikscz1BcnJheS5pc0FycmF5LGw9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsYz1BcnJheS5wcm90b3R5cGUuc29tZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGYsaCxwLGQsZyxtLHY9YXJndW1lbnRzWzJdO2lmKHModCl8fG4odCk/cj0iYXJyYXkiOmEodCk/cj0ic3RyaW5nIjp0PW8odCksaShlKSxmPWZ1bmN0aW9uKCl7aD0hMH0sImFycmF5IiE9PXIpaWYoInN0cmluZyIhPT1yKWZvcih1PXQubmV4dCgpOyF1LmRvbmU7KXtpZihsLmNhbGwoZSx2LHUudmFsdWUsZiksaClyZXR1cm47dT10Lm5leHQoKX1lbHNlIGZvcihkPXQubGVuZ3RoLHA9MDtwPGQmJihnPXRbcF0scCsxPGQmJihtPWcuY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZtPD01NjMxOSYmKGcrPXRbKytwXSksbC5jYWxsKGUsdixnLGYpLCFoKTsrK3ApO2Vsc2UgYy5jYWxsKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwoZSx2LHQsZiksaH0pKX19LHsiLi9nZXQiOjIxOSwiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiOjE4NCwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUiOjIwOSwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIjoyMTV9XSwyMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiKSxpPXQoImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyIpLGE9dCgiLi9hcnJheSIpLG89dCgiLi9zdHJpbmciKSxzPXQoIi4vdmFsaWQtaXRlcmFibGUiKSxsPXQoImVzNi1zeW1ib2wiKS5pdGVyYXRvcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHModClbbF0/dFtsXSgpOm4odCk/bmV3IGEodCk6aSh0KT9uZXcgbyh0KTpuZXcgYSh0KX19LHsiLi9hcnJheSI6MjE3LCIuL3N0cmluZyI6MjIyLCIuL3ZhbGlkLWl0ZXJhYmxlIjoyMjMsImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIjoxODQsImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyI6MjE1LCJlczYtc3ltYm9sIjoyMjV9XSwyMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJlczUtZXh0L2FycmF5LyMvY2xlYXIiKSxhPXQoImVzNS1leHQvb2JqZWN0L2Fzc2lnbiIpLG89dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUiKSxzPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIiksbD10KCJkIiksYz10KCJkL2F1dG8tYmluZCIpLHU9dCgiZXM2LXN5bWJvbCIpLGY9T2JqZWN0LmRlZmluZVByb3BlcnR5LGg9T2JqZWN0LmRlZmluZVByb3BlcnRpZXM7ZS5leHBvcnRzPW49ZnVuY3Rpb24odCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO2godGhpcyx7X19saXN0X186bCgidyIscyh0KSksX19jb250ZXh0X186bCgidyIsZSksX19uZXh0SW5kZXhfXzpsKCJ3IiwwKX0pLGUmJihvKGUub24pLGUub24oIl9hZGQiLHRoaXMuX29uQWRkKSxlLm9uKCJfZGVsZXRlIix0aGlzLl9vbkRlbGV0ZSksZS5vbigiX2NsZWFyIix0aGlzLl9vbkNsZWFyKSl9LGRlbGV0ZSBuLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixoKG4ucHJvdG90eXBlLGEoe19uZXh0OmwoKGZ1bmN0aW9uKCl7dmFyIHQ7aWYodGhpcy5fX2xpc3RfXylyZXR1cm4gdGhpcy5fX3JlZG9fXyYmdm9pZCAwIT09KHQ9dGhpcy5fX3JlZG9fXy5zaGlmdCgpKT90OnRoaXMuX19uZXh0SW5kZXhfXzx0aGlzLl9fbGlzdF9fLmxlbmd0aD90aGlzLl9fbmV4dEluZGV4X18rKzp2b2lkIHRoaXMuX3VuQmluZCgpfSkpLG5leHQ6bCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlUmVzdWx0KHRoaXMuX25leHQoKSl9KSksX2NyZWF0ZVJlc3VsdDpsKChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD97ZG9uZTohMCx2YWx1ZTp2b2lkIDB9Ontkb25lOiExLHZhbHVlOnRoaXMuX3Jlc29sdmUodCl9fSkpLF9yZXNvbHZlOmwoKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fbGlzdF9fW3RdfSkpLF91bkJpbmQ6bCgoZnVuY3Rpb24oKXt0aGlzLl9fbGlzdF9fPW51bGwsZGVsZXRlIHRoaXMuX19yZWRvX18sdGhpcy5fX2NvbnRleHRfXyYmKHRoaXMuX19jb250ZXh0X18ub2ZmKCJfYWRkIix0aGlzLl9vbkFkZCksdGhpcy5fX2NvbnRleHRfXy5vZmYoIl9kZWxldGUiLHRoaXMuX29uRGVsZXRlKSx0aGlzLl9fY29udGV4dF9fLm9mZigiX2NsZWFyIix0aGlzLl9vbkNsZWFyKSx0aGlzLl9fY29udGV4dF9fPW51bGwpfSkpLHRvU3RyaW5nOmwoKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIisodGhpc1t1LnRvU3RyaW5nVGFnXXx8Ik9iamVjdCIpKyJdIn0pKX0sYyh7X29uQWRkOmwoKGZ1bmN0aW9uKHQpe3Q+PXRoaXMuX19uZXh0SW5kZXhfX3x8KCsrdGhpcy5fX25leHRJbmRleF9fLHRoaXMuX19yZWRvX18/KHRoaXMuX19yZWRvX18uZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtlPj10JiYodGhpcy5fX3JlZG9fX1tyXT0rK2UpfSksdGhpcyksdGhpcy5fX3JlZG9fXy5wdXNoKHQpKTpmKHRoaXMsIl9fcmVkb19fIixsKCJjIixbdF0pKSl9KSksX29uRGVsZXRlOmwoKGZ1bmN0aW9uKHQpe3ZhciBlO3Q+PXRoaXMuX19uZXh0SW5kZXhfX3x8KC0tdGhpcy5fX25leHRJbmRleF9fLHRoaXMuX19yZWRvX18mJigtMSE9PShlPXRoaXMuX19yZWRvX18uaW5kZXhPZih0KSkmJnRoaXMuX19yZWRvX18uc3BsaWNlKGUsMSksdGhpcy5fX3JlZG9fXy5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2U+dCYmKHRoaXMuX19yZWRvX19bcl09LS1lKX0pLHRoaXMpKSl9KSksX29uQ2xlYXI6bCgoZnVuY3Rpb24oKXt0aGlzLl9fcmVkb19fJiZpLmNhbGwodGhpcy5fX3JlZG9fXyksdGhpcy5fX25leHRJbmRleF9fPTB9KSl9KSkpLGYobi5wcm90b3R5cGUsdS5pdGVyYXRvcixsKChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpKX0se2Q6MTU1LCJkL2F1dG8tYmluZCI6MTU0LCJlczUtZXh0L2FycmF5LyMvY2xlYXIiOjE4MCwiZXM1LWV4dC9vYmplY3QvYXNzaWduIjoxOTMsImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIjoyMDksImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIjoyMTEsImVzNi1zeW1ib2wiOjIyNX1dLDIyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGk9dCgiZXM1LWV4dC9vYmplY3QvaXMtdmFsdWUiKSxhPXQoImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyIpLG89dCgiZXM2LXN5bWJvbCIpLml0ZXJhdG9yLHM9QXJyYXkuaXNBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISFpKHQpJiYoISFzKHQpfHwoISFhKHQpfHwoISFuKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdFtvXSkpKX19LHsiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiOjE4NCwiZXM1LWV4dC9vYmplY3QvaXMtdmFsdWUiOjIwMCwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIjoyMTUsImVzNi1zeW1ib2wiOjIyNX1dLDIyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiKSxhPXQoImQiKSxvPXQoImVzNi1zeW1ib2wiKSxzPXQoIi4vIiksbD1PYmplY3QuZGVmaW5lUHJvcGVydHk7bj1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldyciKTt0PVN0cmluZyh0KSxzLmNhbGwodGhpcyx0KSxsKHRoaXMsIl9fbGVuZ3RoX18iLGEoIiIsdC5sZW5ndGgpKX0saSYmaShuLHMpLGRlbGV0ZSBuLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHMucHJvdG90eXBlLHtfbmV4dDphKChmdW5jdGlvbigpe2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19uZXh0SW5kZXhfXzx0aGlzLl9fbGVuZ3RoX18/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pKSxfcmVzb2x2ZTphKChmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX19saXN0X19bdF07cmV0dXJuIHRoaXMuX19uZXh0SW5kZXhfXz09PXRoaXMuX19sZW5ndGhfXz9yOihlPXIuY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZlPD01NjMxOT9yK3RoaXMuX19saXN0X19bdGhpcy5fX25leHRJbmRleF9fKytdOnJ9KSl9KSxsKG4ucHJvdG90eXBlLG8udG9TdHJpbmdUYWcsYSgiYyIsIlN0cmluZyBJdGVyYXRvciIpKX0seyIuLyI6MjIwLGQ6MTU1LCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoyMDYsImVzNi1zeW1ib2wiOjIyNX1dLDIyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLWl0ZXJhYmxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBpdGVyYWJsZSIpO3JldHVybiB0fX0seyIuL2lzLWl0ZXJhYmxlIjoyMjF9XSwyMjQ6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24obixpKXsoZnVuY3Rpb24oKXsKLyohCiAqIEBvdmVydmlldyBlczYtcHJvbWlzZSAtIGEgdGlueSBpbXBsZW1lbnRhdGlvbiBvZiBQcm9taXNlcy9BKy4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMgKENvbnZlcnNpb24gdG8gRVM2IEFQSSBieSBKYWtlIEFyY2hpYmFsZCkKICogQGxpY2Vuc2UgICBMaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZQogKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RlZmFucGVubmVyL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFCiAqIEB2ZXJzaW9uICAgdjQuMi44KzFlNjhkY2U2CiAqLwohZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9lLmV4cG9ydHM9bigpOnQuRVM2UHJvbWlzZT1uKCl9KHRoaXMsKGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9dmFyIHI9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9LGE9MCxvPXZvaWQgMCxzPXZvaWQgMCxsPWZ1bmN0aW9uKHQsZSl7Z1thXT10LGdbYSsxXT1lLDI9PT0oYSs9MikmJihzP3MobSk6XygpKX07dmFyIGM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCx1PWN8fHt9LGY9dS5NdXRhdGlvbk9ic2VydmVyfHx1LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsaD0idW5kZWZpbmVkIj09dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgbiYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChuKSxwPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbDtmdW5jdGlvbiBkKCl7dmFyIHQ9c2V0VGltZW91dDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdChtLDEpfX12YXIgZz1uZXcgQXJyYXkoMWUzKTtmdW5jdGlvbiBtKCl7Zm9yKHZhciB0PTA7dDxhO3QrPTIpeygwLGdbdF0pKGdbdCsxXSksZ1t0XT12b2lkIDAsZ1t0KzFdPXZvaWQgMH1hPTB9dmFyIHYseSx4LGIsXz12b2lkIDA7ZnVuY3Rpb24gdyh0LGUpe3ZhciByPXRoaXMsbj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihNKTt2b2lkIDA9PT1uW2tdJiZEKG4pO3ZhciBpPXIuX3N0YXRlO2lmKGkpe3ZhciBhPWFyZ3VtZW50c1tpLTFdO2woKGZ1bmN0aW9uKCl7cmV0dXJuIHooaSxuLGEsci5fcmVzdWx0KX0pKX1lbHNlIEkocixuLHQsZSk7cmV0dXJuIG59ZnVuY3Rpb24gVCh0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I9PT10aGlzKXJldHVybiB0O3ZhciBlPW5ldyB0aGlzKE0pO3JldHVybiBTKGUsdCksZX1oP189ZnVuY3Rpb24oKXtyZXR1cm4gbi5uZXh0VGljayhtKX06Zj8oeT0wLHg9bmV3IGYobSksYj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikseC5vYnNlcnZlKGIse2NoYXJhY3RlckRhdGE6ITB9KSxfPWZ1bmN0aW9uKCl7Yi5kYXRhPXk9Kyt5JTJ9KTpwPygodj1uZXcgTWVzc2FnZUNoYW5uZWwpLnBvcnQxLm9ubWVzc2FnZT1tLF89ZnVuY3Rpb24oKXtyZXR1cm4gdi5wb3J0Mi5wb3N0TWVzc2FnZSgwKX0pOl89dm9pZCAwPT09YyYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9RnVuY3Rpb24oInJldHVybiB0aGlzIikoKS5yZXF1aXJlKCJ2ZXJ0eCIpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Yobz10LnJ1bk9uTG9vcHx8dC5ydW5PbkNvbnRleHQpP2Z1bmN0aW9uKCl7byhtKX06ZCgpfWNhdGNoKHQpe3JldHVybiBkKCl9fSgpOmQoKTt2YXIgaz1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7ZnVuY3Rpb24gTSgpe31mdW5jdGlvbiBBKHQscixuKXtyLmNvbnN0cnVjdG9yPT09dC5jb25zdHJ1Y3RvciYmbj09PXcmJnIuY29uc3RydWN0b3IucmVzb2x2ZT09PVQ/ZnVuY3Rpb24odCxlKXsxPT09ZS5fc3RhdGU/Qyh0LGUuX3Jlc3VsdCk6Mj09PWUuX3N0YXRlP0wodCxlLl9yZXN1bHQpOkkoZSx2b2lkIDAsKGZ1bmN0aW9uKGUpe3JldHVybiBTKHQsZSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIEwodCxlKX0pKX0odCxyKTp2b2lkIDA9PT1uP0ModCxyKTplKG4pP2Z1bmN0aW9uKHQsZSxyKXtsKChmdW5jdGlvbih0KXt2YXIgbj0hMSxpPWZ1bmN0aW9uKHQsZSxyLG4pe3RyeXt0LmNhbGwoZSxyLG4pfWNhdGNoKHQpe3JldHVybiB0fX0ocixlLChmdW5jdGlvbihyKXtufHwobj0hMCxlIT09cj9TKHQscik6Qyh0LHIpKX0pLChmdW5jdGlvbihlKXtufHwobj0hMCxMKHQsZSkpfSksdC5fbGFiZWwpOyFuJiZpJiYobj0hMCxMKHQsaSkpfSksdCl9KHQscixuKTpDKHQscil9ZnVuY3Rpb24gUyh0LGUpe2lmKHQ9PT1lKUwodCxuZXcgVHlwZUVycm9yKCJZb3UgY2Fubm90IHJlc29sdmUgYSBwcm9taXNlIHdpdGggaXRzZWxmIikpO2Vsc2UgaWYoaT10eXBlb2Yobj1lKSxudWxsPT09bnx8Im9iamVjdCIhPT1pJiYiZnVuY3Rpb24iIT09aSlDKHQsZSk7ZWxzZXt2YXIgcj12b2lkIDA7dHJ5e3I9ZS50aGVufWNhdGNoKGUpe3JldHVybiB2b2lkIEwodCxlKX1BKHQsZSxyKX12YXIgbixpfWZ1bmN0aW9uIEUodCl7dC5fb25lcnJvciYmdC5fb25lcnJvcih0Ll9yZXN1bHQpLFAodCl9ZnVuY3Rpb24gQyh0LGUpe3ZvaWQgMD09PXQuX3N0YXRlJiYodC5fcmVzdWx0PWUsdC5fc3RhdGU9MSwwIT09dC5fc3Vic2NyaWJlcnMubGVuZ3RoJiZsKFAsdCkpfWZ1bmN0aW9uIEwodCxlKXt2b2lkIDA9PT10Ll9zdGF0ZSYmKHQuX3N0YXRlPTIsdC5fcmVzdWx0PWUsbChFLHQpKX1mdW5jdGlvbiBJKHQsZSxyLG4pe3ZhciBpPXQuX3N1YnNjcmliZXJzLGE9aS5sZW5ndGg7dC5fb25lcnJvcj1udWxsLGlbYV09ZSxpW2ErMV09cixpW2ErMl09biwwPT09YSYmdC5fc3RhdGUmJmwoUCx0KX1mdW5jdGlvbiBQKHQpe3ZhciBlPXQuX3N1YnNjcmliZXJzLHI9dC5fc3RhdGU7aWYoMCE9PWUubGVuZ3RoKXtmb3IodmFyIG49dm9pZCAwLGk9dm9pZCAwLGE9dC5fcmVzdWx0LG89MDtvPGUubGVuZ3RoO28rPTMpbj1lW29dLGk9ZVtvK3JdLG4/eihyLG4saSxhKTppKGEpO3QuX3N1YnNjcmliZXJzLmxlbmd0aD0wfX1mdW5jdGlvbiB6KHQscixuLGkpe3ZhciBhPWUobiksbz12b2lkIDAscz12b2lkIDAsbD0hMDtpZihhKXt0cnl7bz1uKGkpfWNhdGNoKHQpe2w9ITEscz10fWlmKHI9PT1vKXJldHVybiB2b2lkIEwocixuZXcgVHlwZUVycm9yKCJBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuIikpfWVsc2Ugbz1pO3ZvaWQgMCE9PXIuX3N0YXRlfHwoYSYmbD9TKHIsbyk6ITE9PT1sP0wocixzKToxPT09dD9DKHIsbyk6Mj09PXQmJkwocixvKSl9dmFyIE89MDtmdW5jdGlvbiBEKHQpe3Rba109TysrLHQuX3N0YXRlPXZvaWQgMCx0Ll9yZXN1bHQ9dm9pZCAwLHQuX3N1YnNjcmliZXJzPVtdfXZhciBSPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I9dCx0aGlzLnByb21pc2U9bmV3IHQoTSksdGhpcy5wcm9taXNlW2tdfHxEKHRoaXMucHJvbWlzZSkscihlKT8odGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fcmVtYWluaW5nPWUubGVuZ3RoLHRoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD9DKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoZSksMD09PXRoaXMuX3JlbWFpbmluZyYmQyh0aGlzLnByb21pc2UsdGhpcy5fcmVzdWx0KSkpOkwodGhpcy5wcm9taXNlLG5ldyBFcnJvcigiQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5IikpfXJldHVybiB0LnByb3RvdHlwZS5fZW51bWVyYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO3ZvaWQgMD09PXRoaXMuX3N0YXRlJiZlPHQubGVuZ3RoO2UrKyl0aGlzLl9lYWNoRW50cnkodFtlXSxlKX0sdC5wcm90b3R5cGUuX2VhY2hFbnRyeT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3Isbj1yLnJlc29sdmU7aWYobj09PVQpe3ZhciBpPXZvaWQgMCxhPXZvaWQgMCxvPSExO3RyeXtpPXQudGhlbn1jYXRjaCh0KXtvPSEwLGE9dH1pZihpPT09dyYmdm9pZCAwIT09dC5fc3RhdGUpdGhpcy5fc2V0dGxlZEF0KHQuX3N0YXRlLGUsdC5fcmVzdWx0KTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBpKXRoaXMuX3JlbWFpbmluZy0tLHRoaXMuX3Jlc3VsdFtlXT10O2Vsc2UgaWYocj09PUYpe3ZhciBzPW5ldyByKE0pO28/TChzLGEpOkEocyx0LGkpLHRoaXMuX3dpbGxTZXR0bGVBdChzLGUpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG5ldyByKChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pKSxlKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuKHQpLGUpfSx0LnByb3RvdHlwZS5fc2V0dGxlZEF0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnByb21pc2U7dm9pZCAwPT09bi5fc3RhdGUmJih0aGlzLl9yZW1haW5pbmctLSwyPT09dD9MKG4scik6dGhpcy5fcmVzdWx0W2VdPXIpLDA9PT10aGlzLl9yZW1haW5pbmcmJkMobix0aGlzLl9yZXN1bHQpfSx0LnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztJKHQsdm9pZCAwLChmdW5jdGlvbih0KXtyZXR1cm4gci5fc2V0dGxlZEF0KDEsZSx0KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gci5fc2V0dGxlZEF0KDIsZSx0KX0pKX0sdH0oKTt2YXIgRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dGhpc1trXT1PKyssdGhpcy5fcmVzdWx0PXRoaXMuX3N0YXRlPXZvaWQgMCx0aGlzLl9zdWJzY3JpYmVycz1bXSxNIT09ZSYmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3IiKX0oKSx0aGlzIGluc3RhbmNlb2YgdD9mdW5jdGlvbih0LGUpe3RyeXtlKChmdW5jdGlvbihlKXtTKHQsZSl9KSwoZnVuY3Rpb24oZSl7TCh0LGUpfSkpfWNhdGNoKGUpe0wodCxlKX19KHRoaXMsZSk6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKX0oKSl9cmV0dXJuIHQucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4obnVsbCx0KX0sdC5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLmNvbnN0cnVjdG9yO3JldHVybiBlKHQpP3RoaXMudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIucmVzb2x2ZSh0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIucmVzb2x2ZSh0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgZX0pKX0pKTp0aGlzLnRoZW4odCx0KX0sdH0oKTtyZXR1cm4gRi5wcm90b3R5cGUudGhlbj13LEYuYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUih0aGlzLHQpLnByb21pc2V9LEYucmFjZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiByKHQpP25ldyBlKChmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPTA7YTxpO2ErKyllLnJlc29sdmUodFthXSkudGhlbihyLG4pfSkpOm5ldyBlKChmdW5jdGlvbih0LGUpe3JldHVybiBlKG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4iKSl9KSl9LEYucmVzb2x2ZT1ULEYucmVqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzKE0pO3JldHVybiBMKGUsdCksZX0sRi5fc2V0U2NoZWR1bGVyPWZ1bmN0aW9uKHQpe3M9dH0sRi5fc2V0QXNhcD1mdW5jdGlvbih0KXtsPXR9LEYuX2FzYXA9bCxGLnBvbHlmaWxsPWZ1bmN0aW9uKCl7dmFyIHQ9dm9pZCAwO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgaSl0PWk7ZWxzZSBpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYpdD1zZWxmO2Vsc2UgdHJ5e3Q9RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoInBvbHlmaWxsIGZhaWxlZCBiZWNhdXNlIGdsb2JhbCBvYmplY3QgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCIpfXZhciBlPXQuUHJvbWlzZTtpZihlKXt2YXIgcj1udWxsO3RyeXtyPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLnJlc29sdmUoKSl9Y2F0Y2godCl7fWlmKCJbb2JqZWN0IFByb21pc2VdIj09PXImJiFlLmNhc3QpcmV0dXJufXQuUHJvbWlzZT1GfSxGLlByb21pc2U9RixGfSkpfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7X3Byb2Nlc3M6NTI2fV0sMjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT90KCJleHQvZ2xvYmFsLXRoaXMiKS5TeW1ib2w6dCgiLi9wb2x5ZmlsbCIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjIyNiwiLi9wb2x5ZmlsbCI6MjMxLCJleHQvZ2xvYmFsLXRoaXMiOjIzOH1dLDIyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJleHQvZ2xvYmFsLXRoaXMiKSxpPXtvYmplY3Q6ITAsc3ltYm9sOiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPW4uU3ltYm9sO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiExO3Q9ZSgidGVzdCBzeW1ib2wiKTt0cnl7U3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEhaVt0eXBlb2YgZS5pdGVyYXRvcl0mJighIWlbdHlwZW9mIGUudG9QcmltaXRpdmVdJiYhIWlbdHlwZW9mIGUudG9TdHJpbmdUYWddKX19LHsiZXh0L2dsb2JhbC10aGlzIjoyMzh9XSwyMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmKCJzeW1ib2wiPT10eXBlb2YgdHx8ISF0LmNvbnN0cnVjdG9yJiYoIlN5bWJvbCI9PT10LmNvbnN0cnVjdG9yLm5hbWUmJiJTeW1ib2wiPT09dFt0LmNvbnN0cnVjdG9yLnRvU3RyaW5nVGFnXSkpfX0se31dLDIyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkIiksaT1PYmplY3QuY3JlYXRlLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5LG89T2JqZWN0LnByb3RvdHlwZSxzPWkobnVsbCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLGk9MDtzW3QrKGl8fCIiKV07KSsraTtyZXR1cm4gc1t0Kz1pfHwiIl09ITAsYShvLGU9IkBAIit0LG4uZ3MobnVsbCwoZnVuY3Rpb24odCl7cnx8KHI9ITAsYSh0aGlzLGUsbih0KSkscj0hMSl9KSkpLGV9fSx7ZDoxNTV9XSwyMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZCIpLGk9dCgiZXh0L2dsb2JhbC10aGlzIikuU3ltYm9sO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModCx7aGFzSW5zdGFuY2U6bigiIixpJiZpLmhhc0luc3RhbmNlfHx0KCJoYXNJbnN0YW5jZSIpKSxpc0NvbmNhdFNwcmVhZGFibGU6bigiIixpJiZpLmlzQ29uY2F0U3ByZWFkYWJsZXx8dCgiaXNDb25jYXRTcHJlYWRhYmxlIikpLGl0ZXJhdG9yOm4oIiIsaSYmaS5pdGVyYXRvcnx8dCgiaXRlcmF0b3IiKSksbWF0Y2g6bigiIixpJiZpLm1hdGNofHx0KCJtYXRjaCIpKSxyZXBsYWNlOm4oIiIsaSYmaS5yZXBsYWNlfHx0KCJyZXBsYWNlIikpLHNlYXJjaDpuKCIiLGkmJmkuc2VhcmNofHx0KCJzZWFyY2giKSksc3BlY2llczpuKCIiLGkmJmkuc3BlY2llc3x8dCgic3BlY2llcyIpKSxzcGxpdDpuKCIiLGkmJmkuc3BsaXR8fHQoInNwbGl0IikpLHRvUHJpbWl0aXZlOm4oIiIsaSYmaS50b1ByaW1pdGl2ZXx8dCgidG9QcmltaXRpdmUiKSksdG9TdHJpbmdUYWc6bigiIixpJiZpLnRvU3RyaW5nVGFnfHx0KCJ0b1N0cmluZ1RhZyIpKSx1bnNjb3BhYmxlczpuKCIiLGkmJmkudW5zY29wYWJsZXN8fHQoInVuc2NvcGFibGVzIikpfSl9fSx7ZDoxNTUsImV4dC9nbG9iYWwtdGhpcyI6MjM4fV0sMjMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQiKSxpPXQoIi4uLy4uLy4uL3ZhbGlkYXRlLXN5bWJvbCIpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQse2ZvcjpuKChmdW5jdGlvbihlKXtyZXR1cm4gYVtlXT9hW2VdOmFbZV09dChTdHJpbmcoZSkpfSkpLGtleUZvcjpuKChmdW5jdGlvbih0KXt2YXIgZTtmb3IoZSBpbiBpKHQpLGEpaWYoYVtlXT09PXQpcmV0dXJuIGV9KSl9KX19LHsiLi4vLi4vLi4vdmFsaWRhdGUtc3ltYm9sIjoyMzIsZDoxNTV9XSwyMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhLG89dCgiZCIpLHM9dCgiLi92YWxpZGF0ZS1zeW1ib2wiKSxsPXQoImV4dC9nbG9iYWwtdGhpcyIpLlN5bWJvbCxjPXQoIi4vbGliL3ByaXZhdGUvZ2VuZXJhdGUtbmFtZSIpLHU9dCgiLi9saWIvcHJpdmF0ZS9zZXR1cC9zdGFuZGFyZC1zeW1ib2xzIiksZj10KCIuL2xpYi9wcml2YXRlL3NldHVwL3N5bWJvbC1yZWdpc3RyeSIpLGg9T2JqZWN0LmNyZWF0ZSxwPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKXRyeXtTdHJpbmcobCgpKSxhPSEwfWNhdGNoKHQpe31lbHNlIGw9bnVsbDtpPWZ1bmN0aW9uKHQpe2lmKHRoaXMgaW5zdGFuY2VvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3JldHVybiBuKHQpfSxlLmV4cG9ydHM9bj1mdW5jdGlvbiB0KGUpe3ZhciByO2lmKHRoaXMgaW5zdGFuY2VvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3JldHVybiBhP2woZSk6KHI9aChpLnByb3RvdHlwZSksZT12b2lkIDA9PT1lPyIiOlN0cmluZyhlKSxwKHIse19fZGVzY3JpcHRpb25fXzpvKCIiLGUpLF9fbmFtZV9fOm8oIiIsYyhlKSl9KSl9LHUobiksZihuKSxwKGkucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpvKG4pLHRvU3RyaW5nOm8oIiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19uYW1lX199KSl9KSxwKG4ucHJvdG90eXBlLHt0b1N0cmluZzpvKChmdW5jdGlvbigpe3JldHVybiJTeW1ib2wgKCIrcyh0aGlzKS5fX2Rlc2NyaXB0aW9uX18rIikifSkpLHZhbHVlT2Y6bygoZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzKX0pKX0pLGQobi5wcm90b3R5cGUsbi50b1ByaW1pdGl2ZSxvKCIiLChmdW5jdGlvbigpe3ZhciB0PXModGhpcyk7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dC50b1N0cmluZygpfSkpKSxkKG4ucHJvdG90eXBlLG4udG9TdHJpbmdUYWcsbygiYyIsIlN5bWJvbCIpKSxkKGkucHJvdG90eXBlLG4udG9TdHJpbmdUYWcsbygiYyIsbi5wcm90b3R5cGVbbi50b1N0cmluZ1RhZ10pKSxkKGkucHJvdG90eXBlLG4udG9QcmltaXRpdmUsbygiYyIsbi5wcm90b3R5cGVbbi50b1ByaW1pdGl2ZV0pKX0seyIuL2xpYi9wcml2YXRlL2dlbmVyYXRlLW5hbWUiOjIyOCwiLi9saWIvcHJpdmF0ZS9zZXR1cC9zdGFuZGFyZC1zeW1ib2xzIjoyMjksIi4vbGliL3ByaXZhdGUvc2V0dXAvc3ltYm9sLXJlZ2lzdHJ5IjoyMzAsIi4vdmFsaWRhdGUtc3ltYm9sIjoyMzIsZDoxNTUsImV4dC9nbG9iYWwtdGhpcyI6MjM4fV0sMjMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtc3ltYm9sIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIHN5bWJvbCIpO3JldHVybiB0fX0seyIuL2lzLXN5bWJvbCI6MjI3fV0sMjMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9XZWFrTWFwOnQoIi4vcG9seWZpbGwiKX0seyIuL2lzLWltcGxlbWVudGVkIjoyMzQsIi4vcG9seWZpbGwiOjIzNn1dLDIzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBXZWFrTWFwKXJldHVybiExO3RyeXt0PW5ldyBXZWFrTWFwKFtbZT17fSwib25lIl0sW3t9LCJ0d28iXSxbe30sInRocmVlIl1dKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1TdHJpbmcodCkmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5zZXQmJih0LnNldCh7fSwxKT09PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWxldGUmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5oYXMmJiJvbmUiPT09dC5nZXQoZSkpKSkpfX0se31dLDIzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXAmJiJbb2JqZWN0IFdlYWtNYXBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgV2Vha01hcCl9LHt9XSwyMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSIpLGE9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLG89dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0Iikscz10KCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSIpLGw9dCgiZXM1LWV4dC9zdHJpbmcvcmFuZG9tLXVuaXEiKSxjPXQoImQiKSx1PXQoImVzNi1pdGVyYXRvci9nZXQiKSxmPXQoImVzNi1pdGVyYXRvci9mb3Itb2YiKSxoPXQoImVzNi1zeW1ib2wiKS50b1N0cmluZ1RhZyxwPXQoIi4vaXMtbmF0aXZlLWltcGxlbWVudGVkIiksZD1BcnJheS5pc0FycmF5LGc9T2JqZWN0LmRlZmluZVByb3BlcnR5LG09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx2PU9iamVjdC5nZXRQcm90b3R5cGVPZjtlLmV4cG9ydHM9bj1mdW5jdGlvbigpe3ZhciB0LGU9YXJndW1lbnRzWzBdO2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7cmV0dXJuIHQ9cCYmYSYmV2Vha01hcCE9PW4/YShuZXcgV2Vha01hcCx2KHRoaXMpKTp0aGlzLGkoZSkmJihkKGUpfHwoZT11KGUpKSksZyh0LCJfX3dlYWtNYXBEYXRhX18iLGMoImMiLCIkd2Vha01hcCQiK2woKSkpLGU/KGYoZSwoZnVuY3Rpb24oZSl7cyhlKSx0LnNldChlWzBdLGVbMV0pfSkpLHQpOnR9LHAmJihhJiZhKG4sV2Vha01hcCksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShXZWFrTWFwLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6YyhuKX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSx7ZGVsZXRlOmMoKGZ1bmN0aW9uKHQpe3JldHVybiEhbS5jYWxsKG8odCksdGhpcy5fX3dlYWtNYXBEYXRhX18pJiYoZGVsZXRlIHRbdGhpcy5fX3dlYWtNYXBEYXRhX19dLCEwKX0pKSxnZXQ6YygoZnVuY3Rpb24odCl7aWYobS5jYWxsKG8odCksdGhpcy5fX3dlYWtNYXBEYXRhX18pKXJldHVybiB0W3RoaXMuX193ZWFrTWFwRGF0YV9fXX0pKSxoYXM6YygoZnVuY3Rpb24odCl7cmV0dXJuIG0uY2FsbChvKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKX0pKSxzZXQ6YygoZnVuY3Rpb24odCxlKXtyZXR1cm4gZyhvKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fLGMoImMiLGUpKSx0aGlzfSkpLHRvU3RyaW5nOmMoKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifSkpfSksZyhuLnByb3RvdHlwZSxoLGMoImMiLCJXZWFrTWFwIikpfSx7Ii4vaXMtbmF0aXZlLWltcGxlbWVudGVkIjoyMzUsZDoxNTUsImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlIjoyMDAsImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiOjIwNiwiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0IjoyMTAsImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIjoyMTEsImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxIjoyMTYsImVzNi1pdGVyYXRvci9mb3Itb2YiOjIxOCwiZXM2LWl0ZXJhdG9yL2dldCI6MjE5LCJlczYtc3ltYm9sIjoyMjV9XSwyMzc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZilyZXR1cm4gc2VsZjtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXJldHVybiB3aW5kb3c7dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSBnbG9iYWwgYHRoaXNgIil9O2UuZXhwb3J0cz1mdW5jdGlvbigpe2lmKHRoaXMpcmV0dXJuIHRoaXM7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCJfX2dsb2JhbF9fIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGNvbmZpZ3VyYWJsZTohMH0pfWNhdGNoKHQpe3JldHVybiBuKCl9dHJ5e3JldHVybiBfX2dsb2JhbF9ffHxuKCl9ZmluYWxseXtkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX2dsb2JhbF9ffX0oKX0se31dLDIzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/Z2xvYmFsVGhpczp0KCIuL2ltcGxlbWVudGF0aW9uIil9LHsiLi9pbXBsZW1lbnRhdGlvbiI6MjM3LCIuL2lzLWltcGxlbWVudGVkIjoyMzl9XSwyMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiYoISFnbG9iYWxUaGlzJiZnbG9iYWxUaGlzLkFycmF5PT09QXJyYXkpfX0se31dLDI0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWV8fDAsaT1yfHwxO3JldHVybltbdFsxMl0rdFswXSx0WzEzXSt0WzFdLHRbMTRdK3RbMl0sdFsxNV0rdFszXV0sW3RbMTJdLXRbMF0sdFsxM10tdFsxXSx0WzE0XS10WzJdLHRbMTVdLXRbM11dLFt0WzEyXSt0WzRdLHRbMTNdK3RbNV0sdFsxNF0rdFs2XSx0WzE1XSt0WzddXSxbdFsxMl0tdFs0XSx0WzEzXS10WzVdLHRbMTRdLXRbNl0sdFsxNV0tdFs3XV0sW24qdFsxMl0rdFs4XSxuKnRbMTNdK3RbOV0sbip0WzE0XSt0WzEwXSxuKnRbMTVdK3RbMTFdXSxbaSp0WzEyXS10WzhdLGkqdFsxM10tdFs5XSxpKnRbMTRdLXRbMTBdLGkqdFsxNV0tdFsxMV1dXX19LHt9XSwyNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaXMtc3RyaW5nLWJsYW5rIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O2lmKCJzdHJpbmciPT09ZSl7dmFyIHI9dDtpZigwPT09KHQ9K3QpJiZuKHIpKXJldHVybiExfWVsc2UgaWYoIm51bWJlciIhPT1lKXJldHVybiExO3JldHVybiB0LXQ8MX19LHsiaXMtc3RyaW5nLWJsYW5rIjo0NzB9XSwyNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgbyhbMF0sWzBdLDApO2Nhc2UgMTpyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/bmV3IG8obj1sKHQpLG4sMCk6bmV3IG8odCxsKHQubGVuZ3RoKSwwKTtjYXNlIDI6aWYoIm51bWJlciI9PXR5cGVvZiBlKXt2YXIgbj1sKHQubGVuZ3RoKTtyZXR1cm4gbmV3IG8odCxuLCtlKX1yPTA7Y2FzZSAzOmlmKHQubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJzdGF0ZSBhbmQgdmVsb2NpdHkgbGVuZ3RocyBtdXN0IG1hdGNoIik7cmV0dXJuIG5ldyBvKHQsZSxyKX19O3ZhciBuPXQoImN1YmljLWhlcm1pdGUiKSxpPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gYSh0LGUscil7cmV0dXJuIE1hdGgubWluKGUsTWF0aC5tYXgodCxyKSl9ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5kaW1lbnNpb249dC5sZW5ndGgsdGhpcy5ib3VuZHM9W25ldyBBcnJheSh0aGlzLmRpbWVuc2lvbiksbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKV07Zm9yKHZhciBuPTA7bjx0aGlzLmRpbWVuc2lvbjsrK24pdGhpcy5ib3VuZHNbMF1bbl09LTEvMCx0aGlzLmJvdW5kc1sxXVtuXT0xLzA7dGhpcy5fc3RhdGU9dC5zbGljZSgpLnJldmVyc2UoKSx0aGlzLl92ZWxvY2l0eT1lLnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3RpbWU9W3JdLHRoaXMuX3NjcmF0Y2g9W3Quc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCldfXZhciBzPW8ucHJvdG90eXBlO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9cy5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1pLmd0KHRoaXMuX3RpbWUsdCktMTtlPD0wfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9zdGF0ZS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSx0aGlzLl92ZWxvY2l0eS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSl9LHMuY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLG89aS5sZShlLHQpLHM9dGhpcy5fc2NyYXRjaFswXSxsPXRoaXMuX3N0YXRlLGM9dGhpcy5fdmVsb2NpdHksdT10aGlzLmRpbWVuc2lvbixmPXRoaXMuYm91bmRzO2lmKG88MClmb3IodmFyIGg9dS0xLHA9MDtwPHU7KytwLC0taClzW3BdPWxbaF07ZWxzZSBpZihvPj1yLTEpe2g9bC5sZW5ndGgtMTt2YXIgZD10LWVbci0xXTtmb3IocD0wO3A8dTsrK3AsLS1oKXNbcF09bFtoXStkKmNbaF19ZWxzZXtoPXUqKG8rMSktMTt2YXIgZz1lW29dLG09ZVtvKzFdLWd8fDEsdj10aGlzLl9zY3JhdGNoWzFdLHk9dGhpcy5fc2NyYXRjaFsyXSx4PXRoaXMuX3NjcmF0Y2hbM10sYj10aGlzLl9zY3JhdGNoWzRdLF89ITA7Zm9yKHA9MDtwPHU7KytwLC0taCl2W3BdPWxbaF0seFtwXT1jW2hdKm0seVtwXT1sW2grdV0sYltwXT1jW2grdV0qbSxfPV8mJnZbcF09PT15W3BdJiZ4W3BdPT09YltwXSYmMD09PXhbcF07aWYoXylmb3IocD0wO3A8dTsrK3Apc1twXT12W3BdO2Vsc2Ugbih2LHgseSxiLCh0LWcpL20scyl9dmFyIHc9ZlswXSxUPWZbMV07Zm9yKHA9MDtwPHU7KytwKXNbcF09YSh3W3BdLFRbcF0sc1twXSk7cmV0dXJuIHN9LHMuZGN1cnZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1lLmxlbmd0aCxhPWkubGUoZSx0KSxvPXRoaXMuX3NjcmF0Y2hbMF0scz10aGlzLl9zdGF0ZSxsPXRoaXMuX3ZlbG9jaXR5LGM9dGhpcy5kaW1lbnNpb247aWYoYT49ci0xKWZvcih2YXIgdT1zLmxlbmd0aC0xLGY9KGVbci0xXSwwKTtmPGM7KytmLC0tdSlvW2ZdPWxbdV07ZWxzZXt1PWMqKGErMSktMTt2YXIgaD1lW2FdLHA9ZVthKzFdLWh8fDEsZD10aGlzLl9zY3JhdGNoWzFdLGc9dGhpcy5fc2NyYXRjaFsyXSxtPXRoaXMuX3NjcmF0Y2hbM10sdj10aGlzLl9zY3JhdGNoWzRdLHk9ITA7Zm9yKGY9MDtmPGM7KytmLC0tdSlkW2ZdPXNbdV0sbVtmXT1sW3VdKnAsZ1tmXT1zW3UrY10sdltmXT1sW3UrY10qcCx5PXkmJmRbZl09PT1nW2ZdJiZtW2ZdPT09dltmXSYmMD09PW1bZl07aWYoeSlmb3IoZj0wO2Y8YzsrK2Ypb1tmXT0wO2Vsc2V7bi5kZXJpdmF0aXZlKGQsbSxnLHYsKHQtaCkvcCxvKTtmb3IoZj0wO2Y8YzsrK2Ypb1tmXS89cH19cmV0dXJuIG99LHMubGFzdFQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aW1lO3JldHVybiB0W3QubGVuZ3RoLTFdfSxzLnN0YWJsZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl92ZWxvY2l0eSxlPXQubGVuZ3RoLHI9dGhpcy5kaW1lbnNpb24tMTtyPj0wOy0tcilpZih0Wy0tZV0pcmV0dXJuITE7cmV0dXJuITB9LHMuanVtcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV07dGhpcy5fdGltZS5wdXNoKGUsdCk7Zm9yKHZhciB1PTA7dTwyOysrdSlmb3IodmFyIGY9MDtmPHI7KytmKW4ucHVzaChuW28rK10pLGkucHVzaCgwKTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKGY9cjtmPjA7LS1mKW4ucHVzaChhKGxbZi0xXSxjW2YtMV0sYXJndW1lbnRzW2ZdKSksaS5wdXNoKDApfX0scy5wdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dC1lLGw9dGhpcy5ib3VuZHMsYz1sWzBdLHU9bFsxXSxmPXM+MWUtNj8xL3M6MDt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBoPXI7aD4wOy0taCl7dmFyIHA9YShjW2gtMV0sdVtoLTFdLGFyZ3VtZW50c1toXSk7bi5wdXNoKHApLGkucHVzaCgocC1uW28rK10pKmYpfX19LHMuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGltZW5zaW9uO2lmKCEodDx0aGlzLmxhc3RUKCl8fGFyZ3VtZW50cy5sZW5ndGghPT1lKzEpKXt2YXIgcj10aGlzLl9zdGF0ZSxuPXRoaXMuX3ZlbG9jaXR5LGk9dGhpcy5ib3VuZHMsbz1pWzBdLHM9aVsxXTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBsPWU7bD4wOy0tbClyLnB1c2goYShvW2wtMV0sc1tsLTFdLGFyZ3VtZW50c1tsXSkpLG4ucHVzaCgwKX19LHMubW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8PWV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lLGY9dT4xZS02PzEvdTowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9cjtoPjA7LS1oKXt2YXIgcD1hcmd1bWVudHNbaF07bi5wdXNoKGEobFtoLTFdLGNbaC0xXSxuW28rK10rcCkpLGkucHVzaChwKmYpfX19LHMuaWRsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCk7aWYoISh0PGUpKXt2YXIgcj10aGlzLmRpbWVuc2lvbixuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC1yLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXSx1PXQtZTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBmPXItMTtmPj0wOy0tZiluLnB1c2goYShsW2ZdLGNbZl0sbltvXSt1Kmlbb10pKSxpLnB1c2goMCksbys9MX19fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjoyNDMsImN1YmljLWhlcm1pdGUiOjE1MH1dLDI0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt2YXIgbz1bImZ1bmN0aW9uICIsdCwiKGEsbCxoLCIsbi5qb2luKCIsIiksIil7IixhPyIiOiJ2YXIgaT0iLHI/ImwtMSI6ImgrMSIsIjt3aGlsZShsPD1oKXt2YXIgbT0obCtoKT4+PjEseD1hIixpPyIuZ2V0KG0pIjoiW21dIl07cmV0dXJuIGE/ZS5pbmRleE9mKCJjIik8MD9vLnB1c2goIjtpZih4PT09eSl7cmV0dXJuIG19ZWxzZSBpZih4PD15KXsiKTpvLnB1c2goIjt2YXIgcD1jKHgseSk7aWYocD09PTApe3JldHVybiBtfWVsc2UgaWYocDw9MCl7Iik6by5wdXNoKCI7aWYoIixlLCIpe2k9bTsiKSxyP28ucHVzaCgibD1tKzF9ZWxzZXtoPW0tMX0iKTpvLnB1c2goImg9bS0xfWVsc2V7bD1tKzF9Iiksby5wdXNoKCJ9IiksYT9vLnB1c2goInJldHVybiAtMX07Iik6by5wdXNoKCJyZXR1cm4gaX07Iiksby5qb2luKCIiKX1mdW5jdGlvbiBpKHQsZSxyLGkpe3JldHVybiBuZXcgRnVuY3Rpb24oW24oIkEiLCJ4Iit0KyJ5IixlLFsieSJdLCExLGkpLG4oIkIiLCJ4Iit0KyJ5IixlLFsieSJdLCEwLGkpLG4oIlAiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLCExLGkpLG4oIlEiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLCEwLGkpLCJmdW5jdGlvbiBkaXNwYXRjaEJzZWFyY2giLHIsIihhLHksYyxsLGgpe2lmKGEuc2hhcGUpe2lmKHR5cGVvZihjKT09PSdmdW5jdGlvbicpe3JldHVybiBRKGEsKGw9PT11bmRlZmluZWQpPzA6bHwwLChoPT09dW5kZWZpbmVkKT9hLnNoYXBlWzBdLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQihhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmx8MCx5KX19ZWxzZXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT11bmRlZmluZWQpPzA6Y3wwLChsPT09dW5kZWZpbmVkKT9hLmxlbmd0aC0xOmx8MCx5KX19fXJldHVybiBkaXNwYXRjaEJzZWFyY2giLHJdLmpvaW4oIiIpKSgpfWUuZXhwb3J0cz17Z2U6aSgiPj0iLCExLCJHRSIpLGd0OmkoIj4iLCExLCJHVCIpLGx0OmkoIjwiLCEwLCJMVCIpLGxlOmkoIjw9IiwhMCwiTEUiKSxlcTppKCItIiwhMCwiRVEiLCEwKX19LHt9XSwyNDQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJkdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBzcGVjaWZ5IGRhdGEgYXMgZmlyc3QgcGFyYW1ldGVyIik7aWYocj0wfCsocnx8MCksQXJyYXkuaXNBcnJheSh0KSYmdFswXSYmIm51bWJlciI9PXR5cGVvZiB0WzBdWzBdKXt2YXIgaSxhLG8scyxsPXRbMF0ubGVuZ3RoLGM9dC5sZW5ndGgqbDtlJiYic3RyaW5nIiE9dHlwZW9mIGV8fChlPW5ldyhuKGV8fCJmbG9hdDMyIikpKGMrcikpO3ZhciB1PWUubGVuZ3RoLXI7aWYoYyE9PXUpdGhyb3cgbmV3IEVycm9yKCJzb3VyY2UgbGVuZ3RoICIrYysiICgiK2wrIngiK3QubGVuZ3RoKyIpIGRvZXMgbm90IG1hdGNoIGRlc3RpbmF0aW9uIGxlbmd0aCAiK3UpO2ZvcihpPTAsbz1yO2k8dC5sZW5ndGg7aSsrKWZvcihhPTA7YTxsO2ErKyllW28rK109bnVsbD09PXRbaV1bYV0/TmFOOnRbaV1bYV19ZWxzZSBpZihlJiYic3RyaW5nIiE9dHlwZW9mIGUpZS5zZXQodCxyKTtlbHNle3ZhciBmPW4oZXx8ImZsb2F0MzIiKTtpZihBcnJheS5pc0FycmF5KHQpfHwiYXJyYXkiPT09ZSlmb3IoZT1uZXcgZih0Lmxlbmd0aCtyKSxpPTAsbz1yLHM9ZS5sZW5ndGg7bzxzO28rKyxpKyspZVtvXT1udWxsPT09dFtpXT9OYU46dFtpXTtlbHNlIDA9PT1yP2U9bmV3IGYodCk6KGU9bmV3IGYodC5sZW5ndGgrcikpLnNldCh0LHIpfXJldHVybiBlfX0se2R0eXBlOjE3NX1dLDI0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udC9zdHJpbmdpZnkiKSxpPVszMiwxMjZdO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuc2hhcGU/dC5zaGFwZTp0LmNhbnZhcz9bdC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0XTpbNTEyLDUxMl0scj10LmNhbnZhc3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksYT10LmZvbnQsbz0ibnVtYmVyIj09dHlwZW9mIHQuc3RlcD9bdC5zdGVwLHQuc3RlcF06dC5zdGVwfHxbMzIsMzJdLHM9dC5jaGFyc3x8aTthJiYic3RyaW5nIiE9dHlwZW9mIGEmJihhPW4oYSkpO2lmKEFycmF5LmlzQXJyYXkocykpe2lmKDI9PT1zLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiBzWzBdJiYibnVtYmVyIj09dHlwZW9mIHNbMV0pe2Zvcih2YXIgbD1bXSxjPXNbMF0sdT0wO2M8PXNbMV07YysrKWxbdSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpO3M9bH19ZWxzZSBzPVN0cmluZyhzKS5zcGxpdCgiIik7ZT1lLnNsaWNlKCksci53aWR0aD1lWzBdLHIuaGVpZ2h0PWVbMV07dmFyIGY9ci5nZXRDb250ZXh0KCIyZCIpO2YuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxSZWN0KDAsMCxyLndpZHRoLHIuaGVpZ2h0KSxmLmZvbnQ9YSxmLnRleHRBbGlnbj0iY2VudGVyIixmLnRleHRCYXNlbGluZT0ibWlkZGxlIixmLmZpbGxTdHlsZT0iI2ZmZiI7dmFyIGg9b1swXS8yLHA9b1sxXS8yO2ZvcihjPTA7YzxzLmxlbmd0aDtjKyspZi5maWxsVGV4dChzW2NdLGgscCksKGgrPW9bMF0pPmVbMF0tb1swXS8yJiYoaD1vWzBdLzIscCs9b1sxXSk7cmV0dXJuIHJ9fSx7ImNzcy1mb250L3N0cmluZ2lmeSI6MTQ3fV0sMjQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtlfHwoZT17fSksKCJzdHJpbmciPT10eXBlb2YgdHx8QXJyYXkuaXNBcnJheSh0KSkmJihlLmZhbWlseT10KTt2YXIgcj1BcnJheS5pc0FycmF5KGUuZmFtaWx5KT9lLmZhbWlseS5qb2luKCIsICIpOmUuZmFtaWx5O2lmKCFyKXRocm93IEVycm9yKCJgZmFtaWx5YCBtdXN0IGJlIGRlZmluZWQiKTt2YXIgcz1lLnNpemV8fGUuZm9udFNpemV8fGUuZW18fDQ4LGw9ZS53ZWlnaHR8fGUuZm9udFdlaWdodHx8IiIsYz0odD1bZS5zdHlsZXx8ZS5mb250U3R5bGV8fCIiLGwsc10uam9pbigiICIpKyJweCAiK3IsZS5vcmlnaW58fCJ0b3AiKTtpZihuLmNhY2hlW3JdJiZzPD1uLmNhY2hlW3JdLmVtKXJldHVybiBpKG4uY2FjaGVbcl0sYyk7dmFyIHU9ZS5jYW52YXN8fG4uY2FudmFzLGY9dS5nZXRDb250ZXh0KCIyZCIpLGg9e3VwcGVyOnZvaWQgMCE9PWUudXBwZXI/ZS51cHBlcjoiSCIsbG93ZXI6dm9pZCAwIT09ZS5sb3dlcj9lLmxvd2VyOiJ4IixkZXNjZW50OnZvaWQgMCE9PWUuZGVzY2VudD9lLmRlc2NlbnQ6InAiLGFzY2VudDp2b2lkIDAhPT1lLmFzY2VudD9lLmFzY2VudDoiaCIsdGl0dGxlOnZvaWQgMCE9PWUudGl0dGxlP2UudGl0dGxlOiJpIixvdmVyc2hvb3Q6dm9pZCAwIT09ZS5vdmVyc2hvb3Q/ZS5vdmVyc2hvb3Q6Ik8ifSxwPU1hdGguY2VpbCgxLjUqcyk7dS5oZWlnaHQ9cCx1LndpZHRoPS41KnAsZi5mb250PXQ7dmFyIGQ9e3RvcDowfTtmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxTdHlsZT0iYmxhY2siLGYuZmlsbFRleHQoIkgiLDAsMCk7dmFyIGc9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSk7Zi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9ImJvdHRvbSIsZi5maWxsVGV4dCgiSCIsMCxwKTt2YXIgbT1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLmxpbmVIZWlnaHQ9ZC5ib3R0b209cC1tK2csZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9ImFscGhhYmV0aWMiLGYuZmlsbFRleHQoIkgiLDAscCk7dmFyIHY9cC1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKS0xK2c7ZC5iYXNlbGluZT1kLmFscGhhYmV0aWM9dixmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0ibWlkZGxlIixmLmZpbGxUZXh0KCJIIiwwLC41KnApO3ZhciB5PWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QubWVkaWFuPWQubWlkZGxlPXAteS0xK2ctLjUqcCxmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0iaGFuZ2luZyIsZi5maWxsVGV4dCgiSCIsMCwuNSpwKTt2YXIgeD1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLmhhbmdpbmc9cC14LTErZy0uNSpwLGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJpZGVvZ3JhcGhpYyIsZi5maWxsVGV4dCgiSCIsMCxwKTt2YXIgYj1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtpZihkLmlkZW9ncmFwaGljPXAtYi0xK2csaC51cHBlciYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC51cHBlciwwLDApLGQudXBwZXI9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSksZC5jYXBIZWlnaHQ9ZC5iYXNlbGluZS1kLnVwcGVyKSxoLmxvd2VyJiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLmxvd2VyLDAsMCksZC5sb3dlcj1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSxkLnhIZWlnaHQ9ZC5iYXNlbGluZS1kLmxvd2VyKSxoLnRpdHRsZSYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC50aXR0bGUsMCwwKSxkLnRpdHRsZT1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksaC5hc2NlbnQmJihmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxUZXh0KGguYXNjZW50LDAsMCksZC5hc2NlbnQ9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGguZGVzY2VudCYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC5kZXNjZW50LDAsMCksZC5kZXNjZW50PW8oZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpKSxoLm92ZXJzaG9vdCl7Zi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLm92ZXJzaG9vdCwwLDApO3ZhciBfPW8oZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2Qub3ZlcnNob290PV8tdn1mb3IodmFyIHcgaW4gZClkW3ddLz1zO3JldHVybiBkLmVtPXMsbi5jYWNoZVtyXT1kLGkoZCxjKX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9e307Zm9yKHZhciBuIGluInN0cmluZyI9PXR5cGVvZiBlJiYoZT10W2VdKSx0KSJlbSIhPT1uJiYocltuXT10W25dLWUpO3JldHVybiByfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPXQuaGVpZ2h0LHI9dC5kYXRhLG49MztuPHIubGVuZ3RoO24rPTQpaWYoMCE9PXJbbl0pcmV0dXJuIE1hdGguZmxvb3IoLjI1KihuLTMpL2UpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXQuaGVpZ2h0LHI9dC5kYXRhLG49ci5sZW5ndGgtMTtuPjA7bi09NClpZigwIT09cltuXSlyZXR1cm4gTWF0aC5mbG9vciguMjUqKG4tMykvZSl9ZS5leHBvcnRzPW4sbi5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbi5jYWNoZT17fX0se31dLDI0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHR8fGcsbnVsbCl9O2Z1bmN0aW9uIG4odCxlLHIsbixpLGEpe3RoaXMuX2NvbG9yPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPXIsdGhpcy5sZWZ0PW4sdGhpcy5yaWdodD1pLHRoaXMuX2NvdW50PWF9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IG4odC5fY29sb3IsdC5rZXksdC52YWx1ZSx0LmxlZnQsdC5yaWdodCx0Ll9jb3VudCl9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBuZXcgbih0LGUua2V5LGUudmFsdWUsZS5sZWZ0LGUucmlnaHQsZS5fY291bnQpfWZ1bmN0aW9uIG8odCl7dC5fY291bnQ9MSsodC5sZWZ0P3QubGVmdC5fY291bnQ6MCkrKHQucmlnaHQ/dC5yaWdodC5fY291bnQ6MCl9ZnVuY3Rpb24gcyh0LGUpe3RoaXMuX2NvbXBhcmU9dCx0aGlzLnJvb3Q9ZX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI7aWYoZS5sZWZ0JiYocj1jKHQsZS5sZWZ0KSkpcmV0dXJuIHI7cmV0dXJuKHI9dChlLmtleSxlLnZhbHVlKSl8fChlLnJpZ2h0P2ModCxlLnJpZ2h0KTp2b2lkIDApfWZ1bmN0aW9uIHUodCxlLHIsbil7aWYoZSh0LG4ua2V5KTw9MCl7dmFyIGk7aWYobi5sZWZ0KWlmKGk9dSh0LGUscixuLmxlZnQpKXJldHVybiBpO2lmKGk9cihuLmtleSxuLnZhbHVlKSlyZXR1cm4gaX1pZihuLnJpZ2h0KXJldHVybiB1KHQsZSxyLG4ucmlnaHQpfWZ1bmN0aW9uIGYodCxlLHIsbixpKXt2YXIgYSxvPXIodCxpLmtleSkscz1yKGUsaS5rZXkpO2lmKG88PTApe2lmKGkubGVmdCYmKGE9Zih0LGUscixuLGkubGVmdCkpKXJldHVybiBhO2lmKHM+MCYmKGE9bihpLmtleSxpLnZhbHVlKSkpcmV0dXJuIGF9aWYocz4wJiZpLnJpZ2h0KXJldHVybiBmKHQsZSxyLG4saS5yaWdodCl9ZnVuY3Rpb24gaCh0LGUpe3RoaXMudHJlZT10LHRoaXMuX3N0YWNrPWV9T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImtleXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3QucHVzaChlKX0pKSx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJ2YWx1ZXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3QucHVzaChyKX0pKSx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5fY291bnQ6MH19KSxsLmluc2VydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb21wYXJlLGk9dGhpcy5yb290LGw9W10sYz1bXTtpOyl7dmFyIHU9cih0LGkua2V5KTtsLnB1c2goaSksYy5wdXNoKHUpLGk9dTw9MD9pLmxlZnQ6aS5yaWdodH1sLnB1c2gobmV3IG4oMCx0LGUsbnVsbCxudWxsLDEpKTtmb3IodmFyIGY9bC5sZW5ndGgtMjtmPj0wOy0tZil7aT1sW2ZdO2NbZl08PTA/bFtmXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLGxbZisxXSxpLnJpZ2h0LGkuX2NvdW50KzEpOmxbZl09bmV3IG4oaS5fY29sb3IsaS5rZXksaS52YWx1ZSxpLmxlZnQsbFtmKzFdLGkuX2NvdW50KzEpfWZvcihmPWwubGVuZ3RoLTE7Zj4xOy0tZil7dmFyIGg9bFtmLTFdO2k9bFtmXTtpZigxPT09aC5fY29sb3J8fDE9PT1pLl9jb2xvcilicmVhazt2YXIgcD1sW2YtMl07aWYocC5sZWZ0PT09aClpZihoLmxlZnQ9PT1pKXtpZighKGQ9cC5yaWdodCl8fDAhPT1kLl9jb2xvcil7aWYocC5fY29sb3I9MCxwLmxlZnQ9aC5yaWdodCxoLl9jb2xvcj0xLGgucmlnaHQ9cCxsW2YtMl09aCxsW2YtMV09aSxvKHApLG8oaCksZj49MykoZz1sW2YtM10pLmxlZnQ9PT1wP2cubGVmdD1oOmcucmlnaHQ9aDticmVha31oLl9jb2xvcj0xLHAucmlnaHQ9YSgxLGQpLHAuX2NvbG9yPTAsZi09MX1lbHNle2lmKCEoZD1wLnJpZ2h0KXx8MCE9PWQuX2NvbG9yKXtpZihoLnJpZ2h0PWkubGVmdCxwLl9jb2xvcj0wLHAubGVmdD1pLnJpZ2h0LGkuX2NvbG9yPTEsaS5sZWZ0PWgsaS5yaWdodD1wLGxbZi0yXT1pLGxbZi0xXT1oLG8ocCksbyhoKSxvKGkpLGY+PTMpKGc9bFtmLTNdKS5sZWZ0PT09cD9nLmxlZnQ9aTpnLnJpZ2h0PWk7YnJlYWt9aC5fY29sb3I9MSxwLnJpZ2h0PWEoMSxkKSxwLl9jb2xvcj0wLGYtPTF9ZWxzZSBpZihoLnJpZ2h0PT09aSl7aWYoIShkPXAubGVmdCl8fDAhPT1kLl9jb2xvcil7aWYocC5fY29sb3I9MCxwLnJpZ2h0PWgubGVmdCxoLl9jb2xvcj0xLGgubGVmdD1wLGxbZi0yXT1oLGxbZi0xXT1pLG8ocCksbyhoKSxmPj0zKShnPWxbZi0zXSkucmlnaHQ9PT1wP2cucmlnaHQ9aDpnLmxlZnQ9aDticmVha31oLl9jb2xvcj0xLHAubGVmdD1hKDEsZCkscC5fY29sb3I9MCxmLT0xfWVsc2V7dmFyIGQ7aWYoIShkPXAubGVmdCl8fDAhPT1kLl9jb2xvcil7dmFyIGc7aWYoaC5sZWZ0PWkucmlnaHQscC5fY29sb3I9MCxwLnJpZ2h0PWkubGVmdCxpLl9jb2xvcj0xLGkucmlnaHQ9aCxpLmxlZnQ9cCxsW2YtMl09aSxsW2YtMV09aCxvKHApLG8oaCksbyhpKSxmPj0zKShnPWxbZi0zXSkucmlnaHQ9PT1wP2cucmlnaHQ9aTpnLmxlZnQ9aTticmVha31oLl9jb2xvcj0xLHAubGVmdD1hKDEsZCkscC5fY29sb3I9MCxmLT0xfX1yZXR1cm4gbFswXS5fY29sb3I9MSxuZXcgcyhyLGxbMF0pfSxsLmZvckVhY2g9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMucm9vdClzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBjKHQsdGhpcy5yb290KTtjYXNlIDI6cmV0dXJuIHUoZSx0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KTtjYXNlIDM6aWYodGhpcy5fY29tcGFyZShlLHIpPj0wKXJldHVybjtyZXR1cm4gZihlLHIsdGhpcy5fY29tcGFyZSx0LHRoaXMucm9vdCl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiYmVnaW4iLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT10aGlzLnJvb3Q7ZTspdC5wdXNoKGUpLGU9ZS5sZWZ0O3JldHVybiBuZXcgaCh0aGlzLHQpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJlbmQiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT10aGlzLnJvb3Q7ZTspdC5wdXNoKGUpLGU9ZS5yaWdodDtyZXR1cm4gbmV3IGgodGhpcyx0KX19KSxsLmF0PWZ1bmN0aW9uKHQpe2lmKHQ8MClyZXR1cm4gbmV3IGgodGhpcyxbXSk7Zm9yKHZhciBlPXRoaXMucm9vdCxyPVtdOzspe2lmKHIucHVzaChlKSxlLmxlZnQpe2lmKHQ8ZS5sZWZ0Ll9jb3VudCl7ZT1lLmxlZnQ7Y29udGludWV9dC09ZS5sZWZ0Ll9jb3VudH1pZighdClyZXR1cm4gbmV3IGgodGhpcyxyKTtpZih0LT0xLCFlLnJpZ2h0KWJyZWFrO2lmKHQ+PWUucmlnaHQuX2NvdW50KWJyZWFrO2U9ZS5yaWdodH1yZXR1cm4gbmV3IGgodGhpcyxbXSl9LGwuZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXSxpPTA7cjspe3ZhciBhPWUodCxyLmtleSk7bi5wdXNoKHIpLGE8PTAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sbC5ndD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTwwJiYoaT1uLmxlbmd0aCkscj1hPDA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sbC5sdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT4wJiYoaT1uLmxlbmd0aCkscj1hPD0wP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LGwubGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXSxpPTA7cjspe3ZhciBhPWUodCxyLmtleSk7bi5wdXNoKHIpLGE+PTAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSxsLmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXTtyOyl7dmFyIGk9ZSh0LHIua2V5KTtpZihuLnB1c2gociksMD09PWkpcmV0dXJuIG5ldyBoKHRoaXMsbik7cj1pPD0wP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuZXcgaCh0aGlzLFtdKX0sbC5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5maW5kKHQpO3JldHVybiBlP2UucmVtb3ZlKCk6dGhpc30sbC5nZXQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Q7cjspe3ZhciBuPWUodCxyLmtleSk7aWYoMD09PW4pcmV0dXJuIHIudmFsdWU7cj1uPD0wP3IubGVmdDpyLnJpZ2h0fX07dmFyIHA9aC5wcm90b3R5cGU7ZnVuY3Rpb24gZCh0LGUpe3Qua2V5PWUua2V5LHQudmFsdWU9ZS52YWx1ZSx0LmxlZnQ9ZS5sZWZ0LHQucmlnaHQ9ZS5yaWdodCx0Ll9jb2xvcj1lLl9jb2xvcix0Ll9jb3VudD1lLl9jb3VudH1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJ2YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFjay5sZW5ndGg+MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCwibm9kZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFjay5sZW5ndGg+MD90aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV06bnVsbH0sZW51bWVyYWJsZTohMH0pLHAuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGgodGhpcy50cmVlLHRoaXMuX3N0YWNrLnNsaWNlKCkpfSxwLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy50cmVlO3ZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj10W3QubGVuZ3RoLTFdO2VbZS5sZW5ndGgtMV09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsci5yaWdodCxyLl9jb3VudCk7Zm9yKHZhciBsPXQubGVuZ3RoLTI7bD49MDstLWwpeyhyPXRbbF0pLmxlZnQ9PT10W2wrMV0/ZVtsXT1uZXcgbihyLl9jb2xvcixyLmtleSxyLnZhbHVlLGVbbCsxXSxyLnJpZ2h0LHIuX2NvdW50KTplW2xdPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LGVbbCsxXSxyLl9jb3VudCl9aWYoKHI9ZVtlLmxlbmd0aC0xXSkubGVmdCYmci5yaWdodCl7dmFyIGM9ZS5sZW5ndGg7Zm9yKHI9ci5sZWZ0O3IucmlnaHQ7KWUucHVzaChyKSxyPXIucmlnaHQ7dmFyIHU9ZVtjLTFdO2UucHVzaChuZXcgbihyLl9jb2xvcix1LmtleSx1LnZhbHVlLHIubGVmdCxyLnJpZ2h0LHIuX2NvdW50KSksZVtjLTFdLmtleT1yLmtleSxlW2MtMV0udmFsdWU9ci52YWx1ZTtmb3IobD1lLmxlbmd0aC0yO2w+PWM7LS1sKXI9ZVtsXSxlW2xdPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LGVbbCsxXSxyLl9jb3VudCk7ZVtjLTFdLmxlZnQ9ZVtjXX1pZigwPT09KHI9ZVtlLmxlbmd0aC0xXSkuX2NvbG9yKXt2YXIgZj1lW2UubGVuZ3RoLTJdO2YubGVmdD09PXI/Zi5sZWZ0PW51bGw6Zi5yaWdodD09PXImJihmLnJpZ2h0PW51bGwpLGUucG9wKCk7Zm9yKGw9MDtsPGUubGVuZ3RoOysrbCllW2xdLl9jb3VudC0tO3JldHVybiBuZXcgcyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9aWYoci5sZWZ0fHxyLnJpZ2h0KXtyLmxlZnQ/ZChyLHIubGVmdCk6ci5yaWdodCYmZChyLHIucmlnaHQpLHIuX2NvbG9yPTE7Zm9yKGw9MDtsPGUubGVuZ3RoLTE7KytsKWVbbF0uX2NvdW50LS07cmV0dXJuIG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX1pZigxPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxudWxsKTtmb3IobD0wO2w8ZS5sZW5ndGg7KytsKWVbbF0uX2NvdW50LS07dmFyIGg9ZVtlLmxlbmd0aC0yXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixzLGw9dC5sZW5ndGgtMTtsPj0wOy0tbCl7aWYoZT10W2xdLDA9PT1sKXJldHVybiB2b2lkKGUuX2NvbG9yPTEpO2lmKChyPXRbbC0xXSkubGVmdD09PWUpe2lmKChuPXIucmlnaHQpLnJpZ2h0JiYwPT09bi5yaWdodC5fY29sb3Ipe2lmKHM9KG49ci5yaWdodD1pKG4pKS5yaWdodD1pKG4ucmlnaHQpLHIucmlnaHQ9bi5sZWZ0LG4ubGVmdD1yLG4ucmlnaHQ9cyxuLl9jb2xvcj1yLl9jb2xvcixlLl9jb2xvcj0xLHIuX2NvbG9yPTEscy5fY29sb3I9MSxvKHIpLG8obiksbD4xKShjPXRbbC0yXSkubGVmdD09PXI/Yy5sZWZ0PW46Yy5yaWdodD1uO3JldHVybiB2b2lkKHRbbC0xXT1uKX1pZihuLmxlZnQmJjA9PT1uLmxlZnQuX2NvbG9yKXtpZihzPShuPXIucmlnaHQ9aShuKSkubGVmdD1pKG4ubGVmdCksci5yaWdodD1zLmxlZnQsbi5sZWZ0PXMucmlnaHQscy5sZWZ0PXIscy5yaWdodD1uLHMuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPTEsbi5fY29sb3I9MSxlLl9jb2xvcj0xLG8ociksbyhuKSxvKHMpLGw+MSkoYz10W2wtMl0pLmxlZnQ9PT1yP2MubGVmdD1zOmMucmlnaHQ9cztyZXR1cm4gdm9pZCh0W2wtMV09cyl9aWYoMT09PW4uX2NvbG9yKXtpZigwPT09ci5fY29sb3IpcmV0dXJuIHIuX2NvbG9yPTEsdm9pZChyLnJpZ2h0PWEoMCxuKSk7ci5yaWdodD1hKDAsbik7Y29udGludWV9bj1pKG4pLHIucmlnaHQ9bi5sZWZ0LG4ubGVmdD1yLG4uX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPTAsbyhyKSxvKG4pLGw+MSYmKChjPXRbbC0yXSkubGVmdD09PXI/Yy5sZWZ0PW46Yy5yaWdodD1uKSx0W2wtMV09bix0W2xdPXIsbCsxPHQubGVuZ3RoP3RbbCsxXT1lOnQucHVzaChlKSxsKz0yfWVsc2V7aWYoKG49ci5sZWZ0KS5sZWZ0JiYwPT09bi5sZWZ0Ll9jb2xvcil7aWYocz0obj1yLmxlZnQ9aShuKSkubGVmdD1pKG4ubGVmdCksci5sZWZ0PW4ucmlnaHQsbi5yaWdodD1yLG4ubGVmdD1zLG4uX2NvbG9yPXIuX2NvbG9yLGUuX2NvbG9yPTEsci5fY29sb3I9MSxzLl9jb2xvcj0xLG8ociksbyhuKSxsPjEpKGM9dFtsLTJdKS5yaWdodD09PXI/Yy5yaWdodD1uOmMubGVmdD1uO3JldHVybiB2b2lkKHRbbC0xXT1uKX1pZihuLnJpZ2h0JiYwPT09bi5yaWdodC5fY29sb3Ipe2lmKHM9KG49ci5sZWZ0PWkobikpLnJpZ2h0PWkobi5yaWdodCksci5sZWZ0PXMucmlnaHQsbi5yaWdodD1zLmxlZnQscy5yaWdodD1yLHMubGVmdD1uLHMuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPTEsbi5fY29sb3I9MSxlLl9jb2xvcj0xLG8ociksbyhuKSxvKHMpLGw+MSkoYz10W2wtMl0pLnJpZ2h0PT09cj9jLnJpZ2h0PXM6Yy5sZWZ0PXM7cmV0dXJuIHZvaWQodFtsLTFdPXMpfWlmKDE9PT1uLl9jb2xvcil7aWYoMD09PXIuX2NvbG9yKXJldHVybiByLl9jb2xvcj0xLHZvaWQoci5sZWZ0PWEoMCxuKSk7ci5sZWZ0PWEoMCxuKTtjb250aW51ZX12YXIgYztuPWkobiksci5sZWZ0PW4ucmlnaHQsbi5yaWdodD1yLG4uX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPTAsbyhyKSxvKG4pLGw+MSYmKChjPXRbbC0yXSkucmlnaHQ9PT1yP2MucmlnaHQ9bjpjLmxlZnQ9biksdFtsLTFdPW4sdFtsXT1yLGwrMTx0Lmxlbmd0aD90W2wrMV09ZTp0LnB1c2goZSksbCs9Mn19fShlKSxoLmxlZnQ9PT1yP2gubGVmdD1udWxsOmgucmlnaHQ9bnVsbCxuZXcgcyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJrZXkiLHtnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdGFjay5sZW5ndGg+MClyZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdLmtleX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0udmFsdWV9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCwiaW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD0wLGU9dGhpcy5fc3RhY2s7aWYoMD09PWUubGVuZ3RoKXt2YXIgcj10aGlzLnRyZWUucm9vdDtyZXR1cm4gcj9yLl9jb3VudDowfWVbZS5sZW5ndGgtMV0ubGVmdCYmKHQ9ZVtlLmxlbmd0aC0xXS5sZWZ0Ll9jb3VudCk7Zm9yKHZhciBuPWUubGVuZ3RoLTI7bj49MDstLW4pZVtuKzFdPT09ZVtuXS5yaWdodCYmKCsrdCxlW25dLmxlZnQmJih0Kz1lW25dLmxlZnQuX2NvdW50KSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxwLm5leHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwIT09dC5sZW5ndGgpe3ZhciBlPXRbdC5sZW5ndGgtMV07aWYoZS5yaWdodClmb3IoZT1lLnJpZ2h0O2U7KXQucHVzaChlKSxlPWUubGVmdDtlbHNlIGZvcih0LnBvcCgpO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0ucmlnaHQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJoYXNOZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiExO2lmKHRbdC5sZW5ndGgtMV0ucmlnaHQpcmV0dXJuITA7Zm9yKHZhciBlPXQubGVuZ3RoLTE7ZT4wOy0tZSlpZih0W2UtMV0ubGVmdD09PXRbZV0pcmV0dXJuITA7cmV0dXJuITF9fSkscC51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhY2s7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgdXBkYXRlIGVtcHR5IG5vZGUhIik7dmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxpPWVbZS5sZW5ndGgtMV07cltyLmxlbmd0aC0xXT1uZXcgbihpLl9jb2xvcixpLmtleSx0LGkubGVmdCxpLnJpZ2h0LGkuX2NvdW50KTtmb3IodmFyIGE9ZS5sZW5ndGgtMjthPj0wOy0tYSkoaT1lW2FdKS5sZWZ0PT09ZVthKzFdP3JbYV09bmV3IG4oaS5fY29sb3IsaS5rZXksaS52YWx1ZSxyW2ErMV0saS5yaWdodCxpLl9jb3VudCk6clthXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLGkubGVmdCxyW2ErMV0saS5fY291bnQpO3JldHVybiBuZXcgcyh0aGlzLnRyZWUuX2NvbXBhcmUsclswXSl9LHAucHJldj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLmxlZnQpZm9yKGU9ZS5sZWZ0O2U7KXQucHVzaChlKSxlPWUucmlnaHQ7ZWxzZSBmb3IodC5wb3AoKTt0Lmxlbmd0aD4wJiZ0W3QubGVuZ3RoLTFdLmxlZnQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJoYXNQcmV2Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiExO2lmKHRbdC5sZW5ndGgtMV0ubGVmdClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5yaWdodD09PXRbZV0pcmV0dXJuITA7cmV0dXJuITF9fSl9LHt9XSwyNDg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1bLjk5OTk5OTk5OTk5OTgwOTksNjc2LjUyMDM2ODEyMTg4NTEsLTEyNTkuMTM5MjE2NzIyNDAyOCw3NzEuMzIzNDI4Nzc3NjUzMSwtMTc2LjYxNTAyOTE2MjE0MDYsMTIuNTA3MzQzMjc4Njg2OTA1LC0uMTM4NTcxMDk1MjY1NzIwMTIsOTk4NDM2OTU3ODAxOTU3MmUtMjEsMS41MDU2MzI3MzUxNDkzMTE2ZS03XSxpPVsuOTk5OTk5OTk5OTk5OTk3MSw1Ny4xNTYyMzU2NjU4NjI5MiwtNTkuNTk3OTYwMzU1NDc1NDksMTQuMTM2MDk3OTc0NzQxNzQ2LC0uNDkxOTEzODE2MDk3NjIwMiwzMzk5NDY0OTk4NDgxMTg5ZS0yMCw0NjUyMzYyODkyNzA0ODU4ZS0yMCwtOTgzNzQ0NzUzMDQ4Nzk1NmUtMjAsLjAwMDE1ODA4ODcwMzIyNDkxMjUsLS4wMDAyMTAyNjQ0NDE3MjQxMDQ4OCwuMDAwMjE3NDM5NjE4MTE1MjEyNjUsLS4wMDAxNjQzMTgxMDY1MzY3NjM5LDg0NDE4MjIzOTgzODUyNzVlLTIwLC0yNjE5MDgzODQwMTU4MTQwOGUtMjEsMzY4OTkxODI2NTk1MzE2MjVlLTIyXTtmdW5jdGlvbiBhKHQpe2lmKHQ8MClyZXR1cm4gTnVtYmVyKCIwLzAiKTtmb3IodmFyIGU9aVswXSxyPWkubGVuZ3RoLTE7cj4wOy0tcillKz1pW3JdLyh0K3IpO3ZhciBuPXQrNjA3LzEyOCsuNTtyZXR1cm4uNSpNYXRoLmxvZygyKk1hdGguUEkpKyh0Ky41KSpNYXRoLmxvZyhuKS1uK01hdGgubG9nKGUpLU1hdGgubG9nKHQpfWUuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe2lmKGU8LjUpcmV0dXJuIE1hdGguUEkvKE1hdGguc2luKE1hdGguUEkqZSkqdCgxLWUpKTtpZihlPjEwMClyZXR1cm4gTWF0aC5leHAoYShlKSk7ZS09MTtmb3IodmFyIHI9blswXSxpPTE7aTw5O2krKylyKz1uW2ldLyhlK2kpO3ZhciBvPWUrNysuNTtyZXR1cm4gTWF0aC5zcXJ0KDIqTWF0aC5QSSkqTWF0aC5wb3cobyxlKy41KSpNYXRoLmV4cCgtbykqcn0sZS5leHBvcnRzLmxvZz1hfSx7fV0sMjQ5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm11c3Qgc3BlY2lmeSB0eXBlIHN0cmluZyIpO2lmKGU9ZXx8e30sInVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudCYmIWUuY2FudmFzKXJldHVybiBudWxsO3ZhciByPWUuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsibnVtYmVyIj09dHlwZW9mIGUud2lkdGgmJihyLndpZHRoPWUud2lkdGgpOyJudW1iZXIiPT10eXBlb2YgZS5oZWlnaHQmJihyLmhlaWdodD1lLmhlaWdodCk7dmFyIG4saT1lO3RyeXt2YXIgYT1bdF07MD09PXQuaW5kZXhPZigid2ViZ2wiKSYmYS5wdXNoKCJleHBlcmltZW50YWwtIit0KTtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZihuPXIuZ2V0Q29udGV4dChhW29dLGkpKXJldHVybiBufWNhdGNoKHQpe249bnVsbH1yZXR1cm4gbnx8bnVsbH19LHt9XSwyNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHUodCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9O3ZhciBuPXQoIi4vbGliL3RleHQuanMiKSxpPXQoIi4vbGliL2xpbmVzLmpzIiksYT10KCIuL2xpYi9iYWNrZ3JvdW5kLmpzIiksbz10KCIuL2xpYi9jdWJlLmpzIikscz10KCIuL2xpYi90aWNrcy5qcyIpLGw9bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pO2Z1bmN0aW9uIGModCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH1mdW5jdGlvbiB1KHQpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx0aGlzLnRpY2tzPVtbXSxbXSxbXV0sdGhpcy5hdXRvVGlja3M9ITAsdGhpcy50aWNrU3BhY2luZz1bMSwxLDFdLHRoaXMudGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMudGlja0ZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aGlzLnRpY2tTaXplPVsxMiwxMiwxMl0sdGhpcy50aWNrQW5nbGU9WzAsMCwwXSx0aGlzLnRpY2tBbGlnbj1bImF1dG8iLCJhdXRvIiwiYXV0byJdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxMCwxMCwxMF0sdGhpcy5sYXN0Q3ViZVByb3BzPXtjdWJlRWRnZXM6WzAsMCwwXSxheGlzOlswLDAsMF19LHRoaXMubGFiZWxzPVsieCIsInkiLCJ6Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITBdLHRoaXMubGFiZWxGb250PSJzYW5zLXNlcmlmIix0aGlzLmxhYmVsU2l6ZT1bMjAsMjAsMjBdLHRoaXMubGFiZWxBbmdsZT1bMCwwLDBdLHRoaXMubGFiZWxBbGlnbj1bImF1dG8iLCJhdXRvIiwiYXV0byJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzEwLDEwLDEwXSx0aGlzLmxpbmVFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMubGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5saW5lVGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMubGluZVRpY2tNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVUaWNrTGVuZ3RoPVswLDAsMF0sdGhpcy5saW5lVGlja1dpZHRoPVsxLDEsMV0sdGhpcy5saW5lVGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5ncmlkV2lkdGg9WzEsMSwxXSx0aGlzLmdyaWRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0VuYWJsZT1bITAsITAsITBdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0xpbmVXaWR0aD1bMiwyLDJdLHRoaXMuYmFja2dyb3VuZEVuYWJsZT1bITEsITEsITFdLHRoaXMuYmFja2dyb3VuZENvbG9yPVtbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV0sWy44LC44LC44LC41XV0sdGhpcy5fZmlyc3RJbml0PSEwLHRoaXMuX3RleHQ9bnVsbCx0aGlzLl9saW5lcz1udWxsLHRoaXMuX2JhY2tncm91bmQ9YSh0KX12YXIgZj11LnByb3RvdHlwZTtmdW5jdGlvbiBoKCl7dGhpcy5wcmltYWxPZmZzZXQ9WzAsMCwwXSx0aGlzLnByaW1hbE1pbm9yPVswLDAsMF0sdGhpcy5taXJyb3JPZmZzZXQ9WzAsMCwwXSx0aGlzLm1pcnJvck1pbm9yPVswLDAsMF19Zi51cGRhdGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7aWYobiBpbiB0KXt2YXIgaSxhPXRbbl0sbz10aGlzW25dOyhlP0FycmF5LmlzQXJyYXkoYSkmJkFycmF5LmlzQXJyYXkoYVswXSk6QXJyYXkuaXNBcnJheShhKSk/dGhpc1tuXT1pPVtyKGFbMF0pLHIoYVsxXSkscihhWzJdKV06dGhpc1tuXT1pPVtyKGEpLHIoYSkscihhKV07Zm9yKHZhciBzPTA7czwzOysrcylpZihpW3NdIT09b1tzXSlyZXR1cm4hMH1yZXR1cm4hMX10PXR8fHt9O3ZhciByLGE9ZS5iaW5kKHRoaXMsITEsTnVtYmVyKSxvPWUuYmluZCh0aGlzLCExLEJvb2xlYW4pLGw9ZS5iaW5kKHRoaXMsITEsU3RyaW5nKSxjPWUuYmluZCh0aGlzLCEwLChmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZigzPT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLDFdO2lmKDQ9PT10Lmxlbmd0aClyZXR1cm5bK3RbMF0sK3RbMV0sK3RbMl0sK3RbM11dfXJldHVyblswLDAsMCwxXX0pKSx1PSExLGY9ITE7aWYoImJvdW5kcyJpbiB0KWZvcih2YXIgaD10LmJvdW5kcyxwPTA7cDwyOysrcClmb3IodmFyIGQ9MDtkPDM7KytkKWhbcF1bZF0hPT10aGlzLmJvdW5kc1twXVtkXSYmKGY9ITApLHRoaXMuYm91bmRzW3BdW2RdPWhbcF1bZF07aWYoInRpY2tzImluIHQpe3I9dC50aWNrcyx1PSEwLHRoaXMuYXV0b1RpY2tzPSExO2ZvcihwPTA7cDwzOysrcCl0aGlzLnRpY2tTcGFjaW5nW3BdPTB9ZWxzZSBhKCJ0aWNrU3BhY2luZyIpJiYodGhpcy5hdXRvVGlja3M9ITAsZj0hMCk7aWYodGhpcy5fZmlyc3RJbml0JiYoInRpY2tzImluIHR8fCJ0aWNrU3BhY2luZyJpbiB0fHwodGhpcy5hdXRvVGlja3M9ITApLGY9ITAsdT0hMCx0aGlzLl9maXJzdEluaXQ9ITEpLGYmJnRoaXMuYXV0b1RpY2tzJiYocj1zLmNyZWF0ZSh0aGlzLmJvdW5kcyx0aGlzLnRpY2tTcGFjaW5nKSx1PSEwKSx1KXtmb3IocD0wO3A8MzsrK3ApcltwXS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LngtZS54fSkpO3MuZXF1YWwocix0aGlzLnRpY2tzKT91PSExOnRoaXMudGlja3M9cn1vKCJ0aWNrRW5hYmxlIiksbCgidGlja0ZvbnQiKSYmKHU9ITApLGEoInRpY2tTaXplIiksYSgidGlja0FuZ2xlIiksYSgidGlja1BhZCIpLGMoInRpY2tDb2xvciIpO3ZhciBnPWwoImxhYmVscyIpO2woImxhYmVsRm9udCIpJiYoZz0hMCksbygibGFiZWxFbmFibGUiKSxhKCJsYWJlbFNpemUiKSxhKCJsYWJlbFBhZCIpLGMoImxhYmVsQ29sb3IiKSxvKCJsaW5lRW5hYmxlIiksbygibGluZU1pcnJvciIpLGEoImxpbmVXaWR0aCIpLGMoImxpbmVDb2xvciIpLG8oImxpbmVUaWNrRW5hYmxlIiksbygibGluZVRpY2tNaXJyb3IiKSxhKCJsaW5lVGlja0xlbmd0aCIpLGEoImxpbmVUaWNrV2lkdGgiKSxjKCJsaW5lVGlja0NvbG9yIiksbygiZ3JpZEVuYWJsZSIpLGEoImdyaWRXaWR0aCIpLGMoImdyaWRDb2xvciIpLG8oInplcm9FbmFibGUiKSxjKCJ6ZXJvTGluZUNvbG9yIiksYSgiemVyb0xpbmVXaWR0aCIpLG8oImJhY2tncm91bmRFbmFibGUiKSxjKCJiYWNrZ3JvdW5kQ29sb3IiKSx0aGlzLl90ZXh0P3RoaXMuX3RleHQmJihnfHx1KSYmdGhpcy5fdGV4dC51cGRhdGUodGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KTp0aGlzLl90ZXh0PW4odGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLmxhYmVscyx0aGlzLmxhYmVsRm9udCx0aGlzLnRpY2tzLHRoaXMudGlja0ZvbnQpLHRoaXMuX2xpbmVzJiZ1JiYodGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwpLHRoaXMuX2xpbmVzfHwodGhpcy5fbGluZXM9aSh0aGlzLmdsLHRoaXMuYm91bmRzLHRoaXMudGlja3MpKX07dmFyIHA9W25ldyBoLG5ldyBoLG5ldyBoXTtmdW5jdGlvbiBkKHQsZSxyLG4saSl7Zm9yKHZhciBhPXQucHJpbWFsT2Zmc2V0LG89dC5wcmltYWxNaW5vcixzPXQubWlycm9yT2Zmc2V0LGw9dC5taXJyb3JNaW5vcixjPW5bZV0sdT0wO3U8MzsrK3UpaWYoZSE9PXUpe3ZhciBmPWEsaD1zLHA9byxkPWw7YyYxPDx1JiYoZj1zLGg9YSxwPWwsZD1vKSxmW3VdPXJbMF1bdV0saFt1XT1yWzFdW3VdLGlbdV0+MD8ocFt1XT0tMSxkW3VdPTApOihwW3VdPTAsZFt1XT0xKX19dmFyIGc9WzAsMCwwXSxtPXttb2RlbDpsLHZpZXc6bCxwcm9qZWN0aW9uOmwsX29ydGhvOiExfTtmLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGYuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiExfSxmLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt9O3ZhciB2PVswLDAsMF0seT1bMCwwLDBdLHg9WzAsMCwwXTtmLmRyYXc9ZnVuY3Rpb24odCl7dD10fHxtO2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bCxuPXQudmlld3x8bCxpPXQucHJvamVjdGlvbnx8bCxhPXRoaXMuYm91bmRzLHM9dC5fb3J0aG98fCExLHU9byhyLG4saSxhLHMpLGY9dS5jdWJlRWRnZXMsaD11LmF4aXMsYj1uWzEyXSxfPW5bMTNdLHc9blsxNF0sVD1uWzE1XSxrPShzPzI6MSkqdGhpcy5waXhlbFJhdGlvKihpWzNdKmIraVs3XSpfK2lbMTFdKncraVsxNV0qVCkvZS5kcmF3aW5nQnVmZmVySGVpZ2h0LE09MDtNPDM7KytNKXRoaXMubGFzdEN1YmVQcm9wcy5jdWJlRWRnZXNbTV09ZltNXSx0aGlzLmxhc3RDdWJlUHJvcHMuYXhpc1tNXT1oW01dO3ZhciBBPXA7Zm9yKE09MDtNPDM7KytNKWQocFtNXSxNLHRoaXMuYm91bmRzLGYsaCk7ZT10aGlzLmdsO3ZhciBTLEU9Zztmb3IoTT0wO008MzsrK00pdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW01dP0VbTV09aFtNXTpFW01dPTA7dGhpcy5fYmFja2dyb3VuZC5kcmF3KHIsbixpLGEsRSx0aGlzLmJhY2tncm91bmRDb2xvciksdGhpcy5fbGluZXMuYmluZChyLG4saSx0aGlzKTtmb3IoTT0wO008MzsrK00pe3ZhciBDPVswLDAsMF07aFtNXT4wP0NbTV09YVsxXVtNXTpDW01dPWFbMF1bTV07Zm9yKHZhciBMPTA7TDwyOysrTCl7dmFyIEk9KE0rMStMKSUzLFA9KE0rMSsoMV5MKSklMzt0aGlzLmdyaWRFbmFibGVbSV0mJnRoaXMuX2xpbmVzLmRyYXdHcmlkKEksUCx0aGlzLmJvdW5kcyxDLHRoaXMuZ3JpZENvbG9yW0ldLHRoaXMuZ3JpZFdpZHRoW0ldKnRoaXMucGl4ZWxSYXRpbyl9Zm9yKEw9MDtMPDI7KytMKXtJPShNKzErTCklMyxQPShNKzErKDFeTCkpJTM7dGhpcy56ZXJvRW5hYmxlW1BdJiZNYXRoLm1pbihhWzBdW1BdLGFbMV1bUF0pPD0wJiZNYXRoLm1heChhWzBdW1BdLGFbMV1bUF0pPj0wJiZ0aGlzLl9saW5lcy5kcmF3WmVybyhJLFAsdGhpcy5ib3VuZHMsQyx0aGlzLnplcm9MaW5lQ29sb3JbUF0sdGhpcy56ZXJvTGluZVdpZHRoW1BdKnRoaXMucGl4ZWxSYXRpbyl9fWZvcihNPTA7TTwzOysrTSl7dGhpcy5saW5lRW5hYmxlW01dJiZ0aGlzLl9saW5lcy5kcmF3QXhpc0xpbmUoTSx0aGlzLmJvdW5kcyxBW01dLnByaW1hbE9mZnNldCx0aGlzLmxpbmVDb2xvcltNXSx0aGlzLmxpbmVXaWR0aFtNXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZU1pcnJvcltNXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKE0sdGhpcy5ib3VuZHMsQVtNXS5taXJyb3JPZmZzZXQsdGhpcy5saW5lQ29sb3JbTV0sdGhpcy5saW5lV2lkdGhbTV0qdGhpcy5waXhlbFJhdGlvKTt2YXIgej1jKHYsQVtNXS5wcmltYWxNaW5vciksTz1jKHksQVtNXS5taXJyb3JNaW5vciksRD10aGlzLmxpbmVUaWNrTGVuZ3RoO2ZvcihMPTA7TDwzOysrTCl7dmFyIFI9ay9yWzUqTF07eltMXSo9RFtMXSpSLE9bTF0qPURbTF0qUn10aGlzLmxpbmVUaWNrRW5hYmxlW01dJiZ0aGlzLl9saW5lcy5kcmF3QXhpc1RpY2tzKE0sQVtNXS5wcmltYWxPZmZzZXQseix0aGlzLmxpbmVUaWNrQ29sb3JbTV0sdGhpcy5saW5lVGlja1dpZHRoW01dKnRoaXMucGl4ZWxSYXRpbyksdGhpcy5saW5lVGlja01pcnJvcltNXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhNLEFbTV0ubWlycm9yT2Zmc2V0LE8sdGhpcy5saW5lVGlja0NvbG9yW01dLHRoaXMubGluZVRpY2tXaWR0aFtNXSp0aGlzLnBpeGVsUmF0aW8pfXRoaXMuX2xpbmVzLnVuYmluZCgpLHRoaXMuX3RleHQuYmluZChyLG4saSx0aGlzLnBpeGVsUmF0aW8pO3ZhciBGLEI7ZnVuY3Rpb24gTih0KXsoQj1bMCwwLDBdKVt0XT0xfWZ1bmN0aW9uIGoodCxlLHIpe3ZhciBuPSh0KzEpJTMsaT0odCsyKSUzLGE9ZVtuXSxvPWVbaV0scz1yW25dLGw9cltpXTthPjAmJmw+MHx8YT4wJiZsPDB8fGE8MCYmbD4wfHxhPDAmJmw8MD9OKG4pOihvPjAmJnM+MHx8bz4wJiZzPDB8fG88MCYmcz4wfHxvPDAmJnM8MCkmJk4oaSl9Zm9yKE09MDtNPDM7KytNKXt2YXIgVT1BW01dLnByaW1hbE1pbm9yLFY9QVtNXS5taXJyb3JNaW5vcixxPWMoeCxBW01dLnByaW1hbE9mZnNldCk7Zm9yKEw9MDtMPDM7KytMKXRoaXMubGluZVRpY2tFbmFibGVbTV0mJihxW0xdKz1rKlVbTF0qTWF0aC5tYXgodGhpcy5saW5lVGlja0xlbmd0aFtMXSwwKS9yWzUqTF0pO3ZhciBIPVswLDAsMF07aWYoSFtNXT0xLHRoaXMudGlja0VuYWJsZVtNXSl7LTM2MDA9PT10aGlzLnRpY2tBbmdsZVtNXT8odGhpcy50aWNrQW5nbGVbTV09MCx0aGlzLnRpY2tBbGlnbltNXT0iYXV0byIpOnRoaXMudGlja0FsaWduW01dPS0xLEY9MSwiYXV0byI9PT0oUz1bdGhpcy50aWNrQWxpZ25bTV0sLjUsRl0pWzBdP1NbMF09MDpTWzBdPXBhcnNlSW50KCIiK1NbMF0pLEI9WzAsMCwwXSxqKE0sVSxWKTtmb3IoTD0wO0w8MzsrK0wpcVtMXSs9aypVW0xdKnRoaXMudGlja1BhZFtMXS9yWzUqTF07dGhpcy5fdGV4dC5kcmF3VGlja3MoTSx0aGlzLnRpY2tTaXplW01dLHRoaXMudGlja0FuZ2xlW01dLHEsdGhpcy50aWNrQ29sb3JbTV0sSCxCLFMpfWlmKHRoaXMubGFiZWxFbmFibGVbTV0pe0Y9MCxCPVswLDAsMF0sdGhpcy5sYWJlbHNbTV0ubGVuZ3RoPjQmJihOKE0pLEY9MSksImF1dG8iPT09KFM9W3RoaXMubGFiZWxBbGlnbltNXSwuNSxGXSlbMF0/U1swXT0wOlNbMF09cGFyc2VJbnQoIiIrU1swXSk7Zm9yKEw9MDtMPDM7KytMKXFbTF0rPWsqVVtMXSp0aGlzLmxhYmVsUGFkW0xdL3JbNSpMXTtxW01dKz0uNSooYVswXVtNXSthWzFdW01dKSx0aGlzLl90ZXh0LmRyYXdMYWJlbChNLHRoaXMubGFiZWxTaXplW01dLHRoaXMubGFiZWxBbmdsZVtNXSxxLHRoaXMubGFiZWxDb2xvcltNXSxbMCwwLDBdLEIsUyl9fXRoaXMuX3RleHQudW5iaW5kKCl9LGYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3RleHQuZGlzcG9zZSgpLHRoaXMuX2xpbmVzLmRpc3Bvc2UoKSx0aGlzLl9iYWNrZ3JvdW5kLmRpc3Bvc2UoKSx0aGlzLl9saW5lcz1udWxsLHRoaXMuX3RleHQ9bnVsbCx0aGlzLl9iYWNrZ3JvdW5kPW51bGwsdGhpcy5nbD1udWxsfX0seyIuL2xpYi9iYWNrZ3JvdW5kLmpzIjoyNTEsIi4vbGliL2N1YmUuanMiOjI1MiwiLi9saWIvbGluZXMuanMiOjI1MywiLi9saWIvdGV4dC5qcyI6MjU1LCIuL2xpYi90aWNrcy5qcyI6MjU2fV0sMjUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1bXSxzPTAsbD0wO2w8MzsrK2wpZm9yKHZhciBjPShsKzEpJTMsdT0obCsyKSUzLGY9WzAsMCwwXSxoPVswLDAsMF0scD0tMTtwPD0xO3ArPTIpe3IucHVzaChzLHMrMixzKzEscysxLHMrMixzKzMpLGZbbF09cCxoW2xdPXA7Zm9yKHZhciBkPS0xO2Q8PTE7ZCs9Mil7ZltjXT1kO2Zvcih2YXIgZz0tMTtnPD0xO2crPTIpZlt1XT1nLGUucHVzaChmWzBdLGZbMV0sZlsyXSxoWzBdLGhbMV0saFsyXSkscys9MX12YXIgbT1jO2M9dSx1PW19dmFyIHY9bih0LG5ldyBGbG9hdDMyQXJyYXkoZSkpLHk9bih0LG5ldyBVaW50MTZBcnJheShyKSx0LkVMRU1FTlRfQVJSQVlfQlVGRkVSKSx4PWkodCxbe2J1ZmZlcjp2LHR5cGU6dC5GTE9BVCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjI0fSx7YnVmZmVyOnYsdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjI0fV0seSksYj1hKHQpO3JldHVybiBiLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxiLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTEsbmV3IG8odCx2LHgsYil9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMiKS5iZztmdW5jdGlvbiBvKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bn12YXIgcz1vLnByb3RvdHlwZTtzLmRyYXc9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0hMSxzPTA7czwzOysrcylvPW98fGlbc107aWYobyl7dmFyIGw9dGhpcy5nbDtsLmVuYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpLGwucG9seWdvbk9mZnNldCgxLDIpLHRoaXMuc2hhZGVyLmJpbmQoKSx0aGlzLnNoYWRlci51bmlmb3Jtcz17bW9kZWw6dCx2aWV3OmUscHJvamVjdGlvbjpyLGJvdW5kczpuLGVuYWJsZTppLGNvbG9yczphfSx0aGlzLnZhby5iaW5kKCksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUywzNiksdGhpcy52YW8udW5iaW5kKCksbC5kaXNhYmxlKGwuUE9MWUdPTl9PRkZTRVRfRklMTCl9fSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoyNTQsImdsLWJ1ZmZlciI6MjU5LCJnbC12YW8iOjM1OH1dLDI1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxwKXtpKHMsZSx0KSxpKHMscixzKTtmb3IodmFyIHk9MCx4PTA7eDwyOysreCl7dVsyXT1hW3hdWzJdO2Zvcih2YXIgYj0wO2I8MjsrK2Ipe3VbMV09YVtiXVsxXTtmb3IodmFyIF89MDtfPDI7KytfKXVbMF09YVtfXVswXSxoKGxbeV0sdSxzKSx5Kz0xfX12YXIgdz0tMTtmb3IoeD0wO3g8ODsrK3gpe2Zvcih2YXIgVD1sW3hdWzNdLGs9MDtrPDM7KytrKWNbeF1ba109bFt4XVtrXS9UO3AmJihjW3hdWzJdKj0tMSksVDwwJiYodzwwfHxjW3hdWzJdPGNbd11bMl0pJiYodz14KX1pZih3PDApe3c9MDtmb3IodmFyIE09MDtNPDM7KytNKXtmb3IodmFyIEE9KE0rMiklMyxTPShNKzEpJTMsRT0tMSxDPS0xLEw9MDtMPDI7KytMKXt2YXIgST0oej1MPDxNKSsoTDw8QSkrKDEtTDw8UyksUD16KygxLUw8PEEpKyhMPDxTKTtvKGNbel0sY1tJXSxjW1BdLGYpPDB8fChMP0U9MTpDPTEpfWlmKEU8MHx8QzwwKUM+RSYmKHd8PTE8PE0pO2Vsc2V7Zm9yKEw9MDtMPDI7KytMKXtJPSh6PUw8PE0pKyhMPDxBKSsoMS1MPDxTKSxQPXorKDEtTDw8QSkrKEw8PFMpO3ZhciB6LE89ZChbbFt6XSxsW0ldLGxbUF0sbFt6KygxPDxBKSsoMTw8UyldXSk7TD9FPU86Qz1PfUM+RSYmKHd8PTE8PE0pfX19dmFyIEQ9N153LFI9LTE7Zm9yKHg9MDt4PDg7Kyt4KXghPT13JiZ4IT09RCYmKFI8MHx8Y1tSXVsxXT5jW3hdWzFdKSYmKFI9eCk7dmFyIEY9LTE7Zm9yKHg9MDt4PDM7Kyt4KXtpZigoTj1SXjE8PHgpIT09dyYmTiE9PUQpRjwwJiYoRj1OKSwoUz1jW05dKVswXTxjW0ZdWzBdJiYoRj1OKX12YXIgQj0tMTtmb3IoeD0wO3g8MzsrK3gpe3ZhciBOO2lmKChOPVJeMTw8eCkhPT13JiZOIT09RCYmTiE9PUYpQjwwJiYoQj1OKSwoUz1jW05dKVswXT5jW0JdWzBdJiYoQj1OKX12YXIgaj1nO2pbMF09alsxXT1qWzJdPTAsaltuLmxvZzIoRl5SKV09UiZGLGpbbi5sb2cyKFJeQildPVImQjt2YXIgVT03XkI7VT09PXd8fFU9PT1EPyhVPTdeRixqW24ubG9nMihCXlUpXT1VJkIpOmpbbi5sb2cyKEZeVSldPVUmRjt2YXIgVj1tLHE9dztmb3IoTT0wO008MzsrK00pVltNXT1xJjE8PE0/LTE6MTtyZXR1cm4gdn07dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxhPXQoInNwbGl0LXBvbHlnb24iKSxvPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLHM9bmV3IEFycmF5KDE2KSxsPW5ldyBBcnJheSg4KSxjPW5ldyBBcnJheSg4KSx1PW5ldyBBcnJheSgzKSxmPVswLDAsMF07ZnVuY3Rpb24gaCh0LGUscil7Zm9yKHZhciBuPTA7bjw0Oysrbil7dFtuXT1yWzEyK25dO2Zvcih2YXIgaT0wO2k8MzsrK2kpdFtuXSs9ZVtpXSpyWzQqaStuXX19IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDw4OysrdClsW3RdPVsxLDEsMSwxXSxjW3RdPVsxLDEsMV19KCk7dmFyIHA9W1swLDAsMSwwLDBdLFswLDAsLTEsMSwwXSxbMCwtMSwwLDEsMF0sWzAsMSwwLDEsMF0sWy0xLDAsMCwxLDBdLFsxLDAsMCwxLDBdXTtmdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT0wO2U8cC5sZW5ndGg7KytlKWlmKCh0PWEucG9zaXRpdmUodCxwW2VdKSkubGVuZ3RoPDMpcmV0dXJuIDA7dmFyIHI9dFswXSxuPXJbMF0vclszXSxpPXJbMV0vclszXSxvPTA7Zm9yKGU9MTtlKzE8dC5sZW5ndGg7KytlKXt2YXIgcz10W2VdLGw9dFtlKzFdLGM9c1swXS9zWzNdLW4sdT1zWzFdL3NbM10taSxmPWxbMF0vbFszXS1uLGg9bFsxXS9sWzNdLWk7bys9TWF0aC5hYnMoYypoLXUqZil9cmV0dXJuIG99dmFyIGc9WzEsMSwxXSxtPVswLDAsMF0sdj17Y3ViZUVkZ2VzOmcsYXhpczptfX0seyJiaXQtdHdpZGRsZSI6OTcsImdsLW1hdDQvbXVsdGlwbHkiOjI5NSwicm9idXN0LW9yaWVudGF0aW9uIjo1NDgsInNwbGl0LXBvbHlnb24iOjU2Nn1dLDI1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPVtdLHM9WzAsMCwwXSxsPVswLDAsMF0sYz1bMCwwLDBdLHU9WzAsMCwwXTtvLnB1c2goMCwwLDEsMCwxLDEsMCwwLC0xLDAsMCwtMSwwLDEsMSwwLDEsLTEpO2Zvcih2YXIgZj0wO2Y8MzsrK2Ype2Zvcih2YXIgaD1vLmxlbmd0aC8zfDAsZD0wO2Q8cltmXS5sZW5ndGg7KytkKXt2YXIgZz0rcltmXVtkXS54O28ucHVzaChnLDAsMSxnLDEsMSxnLDAsLTEsZywwLC0xLGcsMSwxLGcsMSwtMSl9dmFyIG09by5sZW5ndGgvM3wwO3NbZl09aCxsW2ZdPW0taDtoPW8ubGVuZ3RoLzN8MDtmb3IodmFyIHY9MDt2PHJbZl0ubGVuZ3RoOysrdil7Zz0rcltmXVt2XS54O28ucHVzaChnLDAsMSxnLDEsMSxnLDAsLTEsZywwLC0xLGcsMSwxLGcsMSwtMSl9bT1vLmxlbmd0aC8zfDA7Y1tmXT1oLHVbZl09bS1ofXZhciB5PW4odCxuZXcgRmxvYXQzMkFycmF5KG8pKSx4PWkodCxbe2J1ZmZlcjp5LHR5cGU6dC5GTE9BVCxzaXplOjMsc3RyaWRlOjAsb2Zmc2V0OjB9XSksYj1hKHQpO3JldHVybiBiLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxuZXcgcCh0LHkseCxiLGwscyx1LGMpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiLi9zaGFkZXJzIikubGluZSxvPVswLDAsMF0scz1bMCwwLDBdLGw9WzAsMCwwXSxjPVswLDAsMF0sdT1bMSwxXTtmdW5jdGlvbiBmKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0fWZ1bmN0aW9uIHAodCxlLHIsbixpLGEsbyxzKXt0aGlzLmdsPXQsdGhpcy52ZXJ0QnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1uLHRoaXMudGlja0NvdW50PWksdGhpcy50aWNrT2Zmc2V0PWEsdGhpcy5ncmlkQ291bnQ9byx0aGlzLmdyaWRPZmZzZXQ9c312YXIgZD1wLnByb3RvdHlwZTtkLmJpbmQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2hhZGVyLmJpbmQoKSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tb2RlbD10LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnZpZXc9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uPXIsdVswXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCx1WzFdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5TaGFwZT11LHRoaXMudmFvLmJpbmQoKX0sZC51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLnZhby51bmJpbmQoKX0sZC5kcmF3QXhpc0xpbmU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1mKHMpO3RoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1zLGFbdF09ZVsxXVt0XS1lWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1hO3ZhciBvLHU9aChjLHIpO3VbdF0rPWVbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXUsdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9biwobz1mKGwpKVsodCsyKSUzXT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9byx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDYpLChvPWYobCkpWyh0KzEpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNil9LGQuZHJhd0F4aXNUaWNrcz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHRoaXMudGlja0NvdW50W3RdKXt2YXIgYT1mKG8pO2FbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1uLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1pO3ZhciBzPWYobCk7c1t0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSl9fSxkLmRyYXdHcmlkPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZih0aGlzLmdyaWRDb3VudFt0XSl7dmFyIHU9ZihzKTt1W2VdPXJbMV1bZV0tclswXVtlXSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9dTt2YXIgcD1oKGMsbik7cFtlXSs9clswXVtlXSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9cDt2YXIgZD1mKG8pO2RbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9ZDt2YXIgZz1mKGwpO2dbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPWcsdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9aSx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMuZ3JpZENvdW50W3RdLHRoaXMuZ3JpZE9mZnNldFt0XSl9fSxkLmRyYXdaZXJvPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1mKHMpO3RoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1vLG9bdF09clsxXVt0XS1yWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1vO3ZhciB1PWgoYyxuKTt1W3RdKz1yWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD11O3ZhciBwPWYobCk7cFtlXT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9cCx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNil9LGQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLnZlcnRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoyNTQsImdsLWJ1ZmZlciI6MjU5LCJnbC12YW8iOjM1OH1dLDI1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIG9mZnNldCwgbWFqb3JBeGlzLCBtaW5vckF4aXMsIHNjcmVlbkF4aXM7XG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcblxudmVjMyBwcm9qZWN0KHZlYzMgcCkge1xuICB2ZWM0IHBwID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcbiAgcmV0dXJuIHBwLnh5eiAvIG1heChwcC53LCAwLjAwMDEpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbWFqb3IgPSBwb3NpdGlvbi54ICogbWFqb3JBeGlzO1xuICB2ZWMzIG1pbm9yID0gcG9zaXRpb24ueSAqIG1pbm9yQXhpcztcblxuICB2ZWMzIHZQb3NpdGlvbiA9IG1ham9yICsgbWlub3IgKyBvZmZzZXQ7XG4gIHZlYzMgcFBvc2l0aW9uID0gcHJvamVjdCh2UG9zaXRpb24pO1xuICB2ZWMzIG9mZnNldCA9IHByb2plY3QodlBvc2l0aW9uICsgc2NyZWVuQXhpcyAqIHBvc2l0aW9uLnopO1xuXG4gIHZlYzIgc2NyZWVuID0gbm9ybWFsaXplKChvZmZzZXQgLSBwUG9zaXRpb24pLnh5ICogc2NyZWVuU2hhcGUpIC8gc2NyZWVuU2hhcGU7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBQb3NpdGlvbiArIHZlYzMoMC41ICogc2NyZWVuICogbGluZVdpZHRoLCAwKSwgMS4wKTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufSJdKTtyLmxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn1dKX07dmFyIHM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBheGlzLCBhbGlnbkRpciwgYWxpZ25PcHQ7XG51bmlmb3JtIGZsb2F0IHNjYWxlLCBhbmdsZSwgcGl4ZWxTY2FsZTtcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xuXG52ZWMzIHByb2plY3QodmVjMyBwKSB7XG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xuICByZXR1cm4gcHAueHl6IC8gbWF4KHBwLncsIDAuMDAwMSk7XG59XG5cbmZsb2F0IGNvbXB1dGVWaWV3QW5nbGUodmVjMyBhLCB2ZWMzIGIpIHtcbiAgdmVjMyBBID0gcHJvamVjdChhKTtcbiAgdmVjMyBCID0gcHJvamVjdChiKTtcblxuICByZXR1cm4gYXRhbihcbiAgICAoQi55IC0gQS55KSAqIHJlc29sdXRpb24ueSxcbiAgICAoQi54IC0gQS54KSAqIHJlc29sdXRpb24ueFxuICApO1xufVxuXG5jb25zdCBmbG9hdCBQSSA9IDMuMTQxNTkyO1xuY29uc3QgZmxvYXQgVFdPX1BJID0gMi4wICogUEk7XG5jb25zdCBmbG9hdCBIQUxGX1BJID0gMC41ICogUEk7XG5jb25zdCBmbG9hdCBPTkVfQU5EX0hBTEZfUEkgPSAxLjUgKiBQSTtcblxuaW50IG9wdGlvbiA9IGludChmbG9vcihhbGlnbk9wdC54ICsgMC4wMDEpKTtcbmZsb2F0IGh2X3JhdGlvID0gICAgICAgYWxpZ25PcHQueTtcbmJvb2wgZW5hYmxlQWxpZ24gPSAgICAoYWxpZ25PcHQueiAhPSAwLjApO1xuXG5mbG9hdCBtb2RfYW5nbGUoZmxvYXQgYSkge1xuICByZXR1cm4gbW9kKGEsIFBJKTtcbn1cblxuZmxvYXQgcG9zaXRpdmVfYW5nbGUoZmxvYXQgYSkge1xuICByZXR1cm4gbW9kX2FuZ2xlKChhIDwgMC4wKSA/XG4gICAgYSArIFRXT19QSSA6XG4gICAgYVxuICApO1xufVxuXG5mbG9hdCBsb29rX3Vwd2FyZHMoZmxvYXQgYSkge1xuICBmbG9hdCBiID0gcG9zaXRpdmVfYW5nbGUoYSk7XG4gIHJldHVybiAoKGIgPiBIQUxGX1BJKSAmJiAoYiA8PSBPTkVfQU5EX0hBTEZfUEkpKSA/XG4gICAgYiAtIFBJIDpcbiAgICBiO1xufVxuXG5mbG9hdCBsb29rX2hvcml6b250YWxfb3JfdmVydGljYWwoZmxvYXQgYSwgZmxvYXQgcmF0aW8pIHtcbiAgLy8gcmF0aW8gY29udHJvbHMgdGhlIHJhdGlvIGJldHdlZW4gYmVpbmcgaG9yaXpvbnRhbCB0byAodmVydGljYWwgKyBob3Jpem9udGFsKVxuICAvLyBpZiByYXRpbyBpcyBzZXQgdG8gMC41IHRoZW4gaXQgaXMgNTAlLCA1MCUuXG4gIC8vIHdoZW4gdXNpbmcgYSBoaWdoZXIgcmF0aW8gZS5nLiAwLjc1IHRoZSByZXN1bHQgd291bGRcbiAgLy8gbGlrZWx5IGJlIG1vcmUgaG9yaXpvbnRhbCB0aGFuIHZlcnRpY2FsLlxuXG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcblxuICByZXR1cm5cbiAgICAoYiA8ICggICAgICByYXRpbykgKiBIQUxGX1BJKSA/IDAuMCA6XG4gICAgKGIgPCAoMi4wIC0gcmF0aW8pICogSEFMRl9QSSkgPyAtSEFMRl9QSSA6XG4gICAgKGIgPCAoMi4wICsgcmF0aW8pICogSEFMRl9QSSkgPyAwLjAgOlxuICAgIChiIDwgKDQuMCAtIHJhdGlvKSAqIEhBTEZfUEkpID8gSEFMRl9QSSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjA7XG59XG5cbmZsb2F0IHJvdW5kVG8oZmxvYXQgYSwgZmxvYXQgYikge1xuICByZXR1cm4gZmxvYXQoYiAqIGZsb29yKChhICsgMC41ICogYikgLyBiKSk7XG59XG5cbmZsb2F0IGxvb2tfcm91bmRfbl9kaXJlY3Rpb25zKGZsb2F0IGEsIGludCBuKSB7XG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcbiAgZmxvYXQgZGl2ID0gVFdPX1BJIC8gZmxvYXQobik7XG4gIGZsb2F0IGMgPSByb3VuZFRvKGIsIGRpdik7XG4gIHJldHVybiBsb29rX3Vwd2FyZHMoYyk7XG59XG5cbmZsb2F0IGFwcGx5QWxpZ25PcHRpb24oZmxvYXQgcmF3QW5nbGUsIGZsb2F0IGRlbHRhKSB7XG4gIHJldHVyblxuICAgIChvcHRpb24gPiAgMikgPyBsb29rX3JvdW5kX25fZGlyZWN0aW9ucyhyYXdBbmdsZSArIGRlbHRhLCBvcHRpb24pIDogICAgICAgLy8gb3B0aW9uIDMtbjogcm91bmQgdG8gbiBkaXJlY3Rpb25zXG4gICAgKG9wdGlvbiA9PSAyKSA/IGxvb2tfaG9yaXpvbnRhbF9vcl92ZXJ0aWNhbChyYXdBbmdsZSArIGRlbHRhLCBodl9yYXRpbykgOiAvLyBob3Jpem9udGFsIG9yIHZlcnRpY2FsXG4gICAgKG9wdGlvbiA9PSAxKSA/IHJhd0FuZ2xlICsgZGVsdGEgOiAgICAgICAvLyB1c2UgZnJlZSBhbmdsZSwgYW5kIGZsaXAgdG8gYWxpZ24gd2l0aCBvbmUgZGlyZWN0aW9uIG9mIHRoZSBheGlzXG4gICAgKG9wdGlvbiA9PSAwKSA/IGxvb2tfdXB3YXJkcyhyYXdBbmdsZSkgOiAvLyB1c2UgZnJlZSBhbmdsZSwgYW5kIHN0YXkgdXB3YXJkc1xuICAgIChvcHRpb24gPT0tMSkgPyAwLjAgOiAgICAgICAgICAgICAgICAgICAgLy8gdXNlZnVsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBhbGwgdGV4dHMgcmVtYWlucyBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgICAgIHJhd0FuZ2xlOyAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgcmV0dXJuIGJhY2sgcmF3IGlucHV0IGFuZ2xlXG59XG5cbmJvb2wgaXNBeGlzVGl0bGUgPSAoYXhpcy54ID09IDAuMCkgJiZcbiAgICAgICAgICAgICAgICAgICAoYXhpcy55ID09IDAuMCkgJiZcbiAgICAgICAgICAgICAgICAgICAoYXhpcy56ID09IDAuMCk7XG5cbnZvaWQgbWFpbigpIHtcbiAgLy9Db21wdXRlIHdvcmxkIG9mZnNldFxuICBmbG9hdCBheGlzRGlzdGFuY2UgPSBwb3NpdGlvbi56O1xuICB2ZWMzIGRhdGFQb3NpdGlvbiA9IGF4aXNEaXN0YW5jZSAqIGF4aXMgKyBvZmZzZXQ7XG5cbiAgZmxvYXQgYmV0YSA9IGFuZ2xlOyAvLyBpLmUuIHVzZXIgZGVmaW5lZCBhdHRyaWJ1dGVzIGZvciBlYWNoIHRpY2tcblxuICBmbG9hdCBheGlzQW5nbGU7XG4gIGZsb2F0IGNsaXBBbmdsZTtcbiAgZmxvYXQgZmxpcDtcblxuICBpZiAoZW5hYmxlQWxpZ24pIHtcbiAgICBheGlzQW5nbGUgPSAoaXNBeGlzVGl0bGUpID8gSEFMRl9QSSA6XG4gICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVZpZXdBbmdsZShkYXRhUG9zaXRpb24sIGRhdGFQb3NpdGlvbiArIGF4aXMpO1xuICAgIGNsaXBBbmdsZSA9IGNvbXB1dGVWaWV3QW5nbGUoZGF0YVBvc2l0aW9uLCBkYXRhUG9zaXRpb24gKyBhbGlnbkRpcik7XG5cbiAgICBheGlzQW5nbGUgKz0gKHNpbihheGlzQW5nbGUpIDwgMC4wKSA/IFBJIDogMC4wO1xuICAgIGNsaXBBbmdsZSArPSAoc2luKGNsaXBBbmdsZSkgPCAwLjApID8gUEkgOiAwLjA7XG5cbiAgICBmbGlwID0gKGRvdCh2ZWMyKGNvcyhheGlzQW5nbGUpLCBzaW4oYXhpc0FuZ2xlKSksXG4gICAgICAgICAgICAgICAgdmVjMihzaW4oY2xpcEFuZ2xlKSwtY29zKGNsaXBBbmdsZSkpKSA+IDAuMCkgPyAxLjAgOiAwLjA7XG5cbiAgICBiZXRhICs9IGFwcGx5QWxpZ25PcHRpb24oY2xpcEFuZ2xlLCBmbGlwICogUEkpO1xuICB9XG5cbiAgLy9Db21wdXRlIHBsYW5lIG9mZnNldFxuICB2ZWMyIHBsYW5lQ29vcmQgPSBwb3NpdGlvbi54eSAqIHBpeGVsU2NhbGU7XG5cbiAgbWF0MiBwbGFuZVhmb3JtID0gc2NhbGUgKiBtYXQyKFxuICAgICBjb3MoYmV0YSksIHNpbihiZXRhKSxcbiAgICAtc2luKGJldGEpLCBjb3MoYmV0YSlcbiAgKTtcblxuICB2ZWMyIHZpZXdPZmZzZXQgPSAyLjAgKiBwbGFuZVhmb3JtICogcGxhbmVDb29yZCAvIHJlc29sdXRpb247XG5cbiAgLy9Db21wdXRlIGNsaXAgcG9zaXRpb25cbiAgdmVjMyBjbGlwUG9zaXRpb24gPSBwcm9qZWN0KGRhdGFQb3NpdGlvbik7XG5cbiAgLy9BcHBseSB0ZXh0IG9mZnNldCBpbiBjbGlwIGNvb3JkaW5hdGVzXG4gIGNsaXBQb3NpdGlvbiArPSB2ZWMzKHZpZXdPZmZzZXQsIDAuMCk7XG5cbiAgLy9Eb25lXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChjbGlwUG9zaXRpb24sIDEuMCk7XG59Il0pLGw9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59Il0pO3IudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LHMsbCxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV0pfTt2YXIgYz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBlbmFibGU7XG51bmlmb3JtIHZlYzMgYm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xuXG52b2lkIG1haW4oKSB7XG5cbiAgdmVjMyBzaWduQXhpcyA9IHNpZ24oYm91bmRzWzFdIC0gYm91bmRzWzBdKTtcblxuICB2ZWMzIHJlYWxOb3JtYWwgPSBzaWduQXhpcyAqIG5vcm1hbDtcblxuICBpZihkb3QocmVhbE5vcm1hbCwgZW5hYmxlKSA+IDAuMCkge1xuICAgIHZlYzMgbWluUmFuZ2UgPSBtaW4oYm91bmRzWzBdLCBib3VuZHNbMV0pO1xuICAgIHZlYzMgbWF4UmFuZ2UgPSBtYXgoYm91bmRzWzBdLCBib3VuZHNbMV0pO1xuICAgIHZlYzMgblBvc2l0aW9uID0gbWl4KG1pblJhbmdlLCBtYXhSYW5nZSwgMC41ICogKHBvc2l0aW9uICsgMS4wKSk7XG4gICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChuUG9zaXRpb24sIDEuMCk7XG4gIH0gZWxzZSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9XG5cbiAgY29sb3JDaGFubmVsID0gYWJzKHJlYWxOb3JtYWwpO1xufSJdKSx1PW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3JzWzNdO1xuXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yQ2hhbm5lbC54ICogY29sb3JzWzBdICtcbiAgICAgICAgICAgICAgICAgY29sb3JDaGFubmVsLnkgKiBjb2xvcnNbMV0gK1xuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueiAqIGNvbG9yc1syXTtcbn0iXSk7ci5iZz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGMsdSxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKX19LHsiZ2wtc2hhZGVyIjozMzUsZ2xzbGlmeToyNTd9XSwyNTU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHMsbCl7dmFyIHU9bih0KSxmPWkodCxbe2J1ZmZlcjp1LHNpemU6M31dKSxoPW8odCk7aC5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTA7dmFyIHA9bmV3IGModCxoLHUsZik7cmV0dXJuIHAudXBkYXRlKGUscixhLHMsbCkscH07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoInZlY3Rvcml6ZS10ZXh0Iiksbz10KCIuL3NoYWRlcnMiKS50ZXh0LHM9d2luZG93fHxyLmdsb2JhbHx8e30sbD1zLl9fVEVYVF9DQUNIRXx8e307cy5fX1RFWFRfQ0FDSEU9e307ZnVuY3Rpb24gYyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9ZSx0aGlzLmJ1ZmZlcj1yLHRoaXMudmFvPW4sdGhpcy50aWNrT2Zmc2V0PXRoaXMudGlja0NvdW50PXRoaXMubGFiZWxPZmZzZXQ9dGhpcy5sYWJlbENvdW50PW51bGx9dmFyIHU9Yy5wcm90b3R5cGUsZj1bMCwwXTt1LmJpbmQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy52YW8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKTt2YXIgaT10aGlzLnNoYWRlci51bmlmb3JtcztpLm1vZGVsPXQsaS52aWV3PWUsaS5wcm9qZWN0aW9uPXIsaS5waXhlbFNjYWxlPW4sZlswXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxmWzFdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCx0aGlzLnNoYWRlci51bmlmb3Jtcy5yZXNvbHV0aW9uPWZ9LHUudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy52YW8udW5iaW5kKCl9LHUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89W107ZnVuY3Rpb24gcyh0LGUscixuLGkscyl7dmFyIGM9bFtyXTtjfHwoYz1sW3JdPXt9KTt2YXIgdT1jW2VdO3V8fCh1PWNbZV09ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIGEodCxlKX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS53YXJuKCdlcnJvciB2ZWN0b3JpemluZyB0ZXh0OiInK3QrJyIgZXJyb3I6JyxlKSx7Y2VsbHM6W10scG9zaXRpb25zOltdfX19KGUse3RyaWFuZ2xlczohMCxmb250OnIsdGV4dEFsaWduOiJjZW50ZXIiLHRleHRCYXNlbGluZToibWlkZGxlIixsaW5lU3BhY2luZzppLHN0eWxldGFnczpzfSkpO2Zvcih2YXIgZj0obnx8MTIpLzEyLGg9dS5wb3NpdGlvbnMscD11LmNlbGxzLGQ9MCxnPXAubGVuZ3RoO2Q8ZzsrK2QpZm9yKHZhciBtPXBbZF0sdj0yO3Y+PTA7LS12KXt2YXIgeT1oW21bdl1dO28ucHVzaChmKnlbMF0sLWYqeVsxXSx0KX19Zm9yKHZhciBjPVswLDAsMF0sdT1bMCwwLDBdLGY9WzAsMCwwXSxoPVswLDAsMF0scD17YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfSxkPTA7ZDwzOysrZCl7ZltkXT1vLmxlbmd0aC8zfDAscyguNSoodFswXVtkXSt0WzFdW2RdKSxlW2RdLHJbZF0sMTIsMS4yNSxwKSxoW2RdPShvLmxlbmd0aC8zfDApLWZbZF0sY1tkXT1vLmxlbmd0aC8zfDA7Zm9yKHZhciBnPTA7ZzxuW2RdLmxlbmd0aDsrK2cpbltkXVtnXS50ZXh0JiZzKG5bZF1bZ10ueCxuW2RdW2ddLnRleHQsbltkXVtnXS5mb250fHxpLG5bZF1bZ10uZm9udFNpemV8fDEyLDEuMjUscCk7dVtkXT0oby5sZW5ndGgvM3wwKS1jW2RdfXRoaXMuYnVmZmVyLnVwZGF0ZShvKSx0aGlzLnRpY2tPZmZzZXQ9Yyx0aGlzLnRpY2tDb3VudD11LHRoaXMubGFiZWxPZmZzZXQ9Zix0aGlzLmxhYmVsQ291bnQ9aH0sdS5kcmF3VGlja3M9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt0aGlzLnRpY2tDb3VudFt0XSYmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbkRpcj1vLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduT3B0PXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLnRpY2tDb3VudFt0XSx0aGlzLnRpY2tPZmZzZXRbdF0pKX0sdS5kcmF3TGFiZWw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt0aGlzLmxhYmVsQ291bnRbdF0mJih0aGlzLnNoYWRlci51bmlmb3Jtcy5heGlzPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbmdsZT1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjYWxlPWUsdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PW4sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25EaXI9byx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbk9wdD1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5sYWJlbENvdW50W3RdLHRoaXMubGFiZWxPZmZzZXRbdF0pKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0seyIuL3NoYWRlcnMiOjI1NCxfcHJvY2Vzczo1MjYsImdsLWJ1ZmZlciI6MjU5LCJnbC12YW8iOjM1OCwidmVjdG9yaXplLXRleHQiOjYwMH1dLDI1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dCsiIixuPXIuaW5kZXhPZigiLiIpLGk9MDtuPj0wJiYoaT1yLmxlbmd0aC1uLTEpO3ZhciBhPU1hdGgucG93KDEwLGkpLG89TWF0aC5yb3VuZCh0KmUqYSkscz1vKyIiO2lmKHMuaW5kZXhPZigiZSIpPj0wKXJldHVybiBzO3ZhciBsPW8vYSxjPW8lYTtvPDA/KGw9MHwtTWF0aC5jZWlsKGwpLGM9MHwtYyk6KGw9MHxNYXRoLmZsb29yKGwpLGN8PTApO3ZhciB1PSIiK2w7aWYobzwwJiYodT0iLSIrdSksaSl7Zm9yKHZhciBmPSIiK2M7Zi5sZW5ndGg8aTspZj0iMCIrZjtyZXR1cm4gdSsiLiIrZn1yZXR1cm4gdX1yLmNyZWF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTA7aTwzOysraSl7Zm9yKHZhciBhPVtdLG89KHRbMF1baV0sdFsxXVtpXSwwKTtvKmVbaV08PXRbMV1baV07KytvKWEucHVzaCh7eDpvKmVbaV0sdGV4dDpuKGVbaV0sbyl9KTtmb3Iobz0tMTtvKmVbaV0+PXRbMF1baV07LS1vKWEucHVzaCh7eDpvKmVbaV0sdGV4dDpuKGVbaV0sbyl9KTtyLnB1c2goYSl9cmV0dXJuIHJ9LHIuZXF1YWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXtpZih0W3JdLmxlbmd0aCE9PWVbcl0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7KytuKXt2YXIgaT10W3JdW25dLGE9ZVtyXVtuXTtpZihpLnghPT1hLnh8fGkudGV4dCE9PWEudGV4dHx8aS5mb250IT09YS5mb250fHxpLmZvbnRDb2xvciE9PWEuZm9udENvbG9yfHxpLmZvbnRTaXplIT09YS5mb250U2l6ZXx8aS5keCE9PWEuZHh8fGkuZHkhPT1hLmR5KXJldHVybiExfX1yZXR1cm4hMH19LHt9XSwyNTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7InN0cmluZyI9PXR5cGVvZiB0JiYodD1bdF0pO2Zvcih2YXIgZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxyPVtdLG49MDtuPHQubGVuZ3RoLTE7bisrKXIucHVzaCh0W25dLGVbbl18fCIiKTtyZXR1cm4gci5wdXNoKHRbbl0pLHIuam9pbigiIil9fSx7fV0sMjU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsLGYpe3ZhciBoPWUubW9kZWx8fGMscD1lLnZpZXd8fGMsdj1lLnByb2plY3Rpb258fGMseT1lLl9vcnRob3x8ITEseD10LmJvdW5kcyxiPShmPWZ8fGEoaCxwLHYseCx5KSkuYXhpcztvKHUscCxoKSxvKHUsdix1KTtmb3IodmFyIF89Zyx3PTA7dzwzOysrdylfW3ddLmxvPTEvMCxfW3ddLmhpPS0xLzAsX1t3XS5waXhlbHNQZXJEYXRhVW5pdD0xLzA7dmFyIFQ9bihzKHUsdSkpO3ModSx1KTtmb3IodmFyIGs9MDtrPDM7KytrKXt2YXIgTT0oaysxKSUzLEE9KGsrMiklMyxTPW07dDpmb3Iodz0wO3c8MjsrK3cpe3ZhciBFPVtdO2lmKGJba108MCE9ISF3KXtTW2tdPXhbd11ba107Zm9yKHZhciBDPTA7QzwyOysrQyl7U1tNXT14W0Ned11bTV07Zm9yKHZhciBMPTA7TDwyOysrTClTW0FdPXhbTF5DXnddW0FdLEUucHVzaChTLnNsaWNlKCkpfXZhciBJPXk/NTo0O2ZvcihDPUk7Qz09PUk7KytDKXtpZigwPT09RS5sZW5ndGgpY29udGludWUgdDtFPWkucG9zaXRpdmUoRSxUW0NdKX1mb3IoQz0wO0M8RS5sZW5ndGg7KytDKXtBPUVbQ107dmFyIFA9ZChtLHUsQSxyLGwpO2ZvcihMPTA7TDwzOysrTClfW0xdLmxvPU1hdGgubWluKF9bTF0ubG8sQVtMXSksX1tMXS5oaT1NYXRoLm1heChfW0xdLmhpLEFbTF0pLEwhPT1rJiYoX1tMXS5waXhlbHNQZXJEYXRhVW5pdD1NYXRoLm1pbihfW0xdLnBpeGVsc1BlckRhdGFVbml0LE1hdGguYWJzKFBbTF0pKSl9fX19cmV0dXJuIF99O3ZhciBuPXQoImV4dHJhY3QtZnJ1c3R1bS1wbGFuZXMiKSxpPXQoInNwbGl0LXBvbHlnb24iKSxhPXQoIi4vbGliL2N1YmUuanMiKSxvPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxzPXQoImdsLW1hdDQvdHJhbnNwb3NlIiksbD10KCJnbC12ZWM0L3RyYW5zZm9ybU1hdDQiKSxjPW5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKSx1PW5ldyBGbG9hdDMyQXJyYXkoMTYpO2Z1bmN0aW9uIGYodCxlLHIpe3RoaXMubG89dCx0aGlzLmhpPWUsdGhpcy5waXhlbHNQZXJEYXRhVW5pdD1yfXZhciBoPVswLDAsMCwxXSxwPVswLDAsMCwxXTtmdW5jdGlvbiBkKHQsZSxyLG4saSl7Zm9yKHZhciBhPTA7YTwzOysrYSl7Zm9yKHZhciBvPWgscz1wLGM9MDtjPDM7KytjKXNbY109b1tjXT1yW2NdO3NbM109b1szXT0xLHNbYV0rPTEsbChzLHMsZSksc1szXTwwJiYodFthXT0xLzApLG9bYV0tPTEsbChvLG8sZSksb1szXTwwJiYodFthXT0xLzApO3ZhciB1PShvWzBdL29bM10tc1swXS9zWzNdKSpuLGY9KG9bMV0vb1szXS1zWzFdL3NbM10pKmk7dFthXT0uMjUqTWF0aC5zcXJ0KHUqdStmKmYpfXJldHVybiB0fXZhciBnPVtuZXcgZigxLzAsLTEvMCwxLzApLG5ldyBmKDEvMCwtMS8wLDEvMCksbmV3IGYoMS8wLC0xLzAsMS8wKV0sbT1bMCwwLDBdfSx7Ii4vbGliL2N1YmUuanMiOjI1MiwiZXh0cmFjdC1mcnVzdHVtLXBsYW5lcyI6MjQwLCJnbC1tYXQ0L211bHRpcGx5IjoyOTUsImdsLW1hdDQvdHJhbnNwb3NlIjozMDYsImdsLXZlYzQvdHJhbnNmb3JtTWF0NCI6NDI5LCJzcGxpdC1wb2x5Z29uIjo1NjZ9XSwyNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHlwZWRhcnJheS1wb29sIiksaT10KCJuZGFycmF5LW9wcyIpLGE9dCgibmRhcnJheSIpLG89WyJ1aW50OCIsInVpbnQ4X2NsYW1wZWQiLCJ1aW50MTYiLCJ1aW50MzIiLCJpbnQ4IiwiaW50MTYiLCJpbnQzMiIsImZsb2F0MzIiXTtmdW5jdGlvbiBzKHQsZSxyLG4saSl7dGhpcy5nbD10LHRoaXMudHlwZT1lLHRoaXMuaGFuZGxlPXIsdGhpcy5sZW5ndGg9bix0aGlzLnVzYWdlPWl9dmFyIGw9cy5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7dmFyIG89aS5sZW5ndGgqaS5CWVRFU19QRVJfRUxFTUVOVDtpZihhPDApcmV0dXJuIHQuYnVmZmVyRGF0YShlLGksbiksbztpZihvK2E+cil0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSWYgcmVzaXppbmcgYnVmZmVyLCBtdXN0IG5vdCBzcGVjaWZ5IG9mZnNldCIpO3JldHVybiB0LmJ1ZmZlclN1YkRhdGEoZSxhLGkpLHJ9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uLm1hbGxvYyh0Lmxlbmd0aCxlKSxpPXQubGVuZ3RoLGE9MDthPGk7KythKXJbYV09dFthXTtyZXR1cm4gcn1sLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuaGFuZGxlKX0sbC51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLG51bGwpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmhhbmRsZSl9LGwudXBkYXRlPWZ1bmN0aW9uKHQsZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlJiYoZT0tMSksdGhpcy5iaW5kKCksIm9iamVjdCI9PXR5cGVvZiB0JiYidW5kZWZpbmVkIiE9dHlwZW9mIHQuc2hhcGUpe3ZhciByPXQuZHR5cGU7aWYoby5pbmRleE9mKHIpPDAmJihyPSJmbG9hdDMyIiksdGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUilyPWdsLmdldEV4dGVuc2lvbigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpJiYidWludDE2IiE9PXI/InVpbnQzMiI6InVpbnQxNiI7aWYocj09PXQuZHR5cGUmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEsbj1lLmxlbmd0aC0xO24+PTA7LS1uKXtpZihlW25dIT09cilyZXR1cm4hMTtyKj10W25dfXJldHVybiEwfSh0LnNoYXBlLHQuc3RyaWRlKSkwPT09dC5vZmZzZXQmJnQuZGF0YS5sZW5ndGg9PT10LnNoYXBlWzBdP3RoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LmRhdGEsZSk6dGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQuZGF0YS5zdWJhcnJheSh0Lm9mZnNldCx0LnNoYXBlWzBdKSxlKTtlbHNle3ZhciBzPW4ubWFsbG9jKHQuc2l6ZSxyKSxsPWEocyx0LnNoYXBlKTtpLmFzc2lnbihsLHQpLHRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSxlPDA/czpzLnN1YmFycmF5KDAsdC5zaXplKSxlKSxuLmZyZWUocyl9fWVsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGY7Zj10aGlzLnR5cGU9PT10aGlzLmdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSP3UodCwidWludDE2Iik6dSh0LCJmbG9hdDMyIiksdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGU8MD9mOmYuc3ViYXJyYXkoMCx0Lmxlbmd0aCksZSksbi5mcmVlKGYpfWVsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LGUpO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiB0JiZ2b2lkIDAhPT10KXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIGRhdGEgdHlwZSIpO2lmKGU+PTApdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IENhbm5vdCBzcGVjaWZ5IG9mZnNldCB3aGVuIHJlc2l6aW5nIGJ1ZmZlciIpOyh0fD0wKTw9MCYmKHQ9MSksdGhpcy5nbC5idWZmZXJEYXRhKHRoaXMudHlwZSwwfHQsdGhpcy51c2FnZSksdGhpcy5sZW5ndGg9dH19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZihyPXJ8fHQuQVJSQVlfQlVGRkVSLG49bnx8dC5EWU5BTUlDX0RSQVcsciE9PXQuQVJSQVlfQlVGRkVSJiZyIT09dC5FTEVNRU5UX0FSUkFZX0JVRkZFUil0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSW52YWxpZCB0eXBlIGZvciB3ZWJnbCBidWZmZXIsIG11c3QgYmUgZWl0aGVyIGdsLkFSUkFZX0JVRkZFUiBvciBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiIpO2lmKG4hPT10LkRZTkFNSUNfRFJBVyYmbiE9PXQuU1RBVElDX0RSQVcmJm4hPT10LlNUUkVBTV9EUkFXKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIHVzYWdlIGZvciBidWZmZXIsIG11c3QgYmUgZWl0aGVyIGdsLkRZTkFNSUNfRFJBVywgZ2wuU1RBVElDX0RSQVcgb3IgZ2wuU1RSRUFNX0RSQVciKTt2YXIgaT10LmNyZWF0ZUJ1ZmZlcigpLGE9bmV3IHModCxyLGksMCxuKTtyZXR1cm4gYS51cGRhdGUoZSksYX19LHtuZGFycmF5OjQ5NSwibmRhcnJheS1vcHMiOjQ5MCwidHlwZWRhcnJheS1wb29sIjo1OTV9XSwyNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtdmVjMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucG9zaXRpb25zLGk9dC52ZWN0b3JzLGE9e3Bvc2l0aW9uczpbXSx2ZXJ0ZXhJbnRlbnNpdHk6W10sdmVydGV4SW50ZW5zaXR5Qm91bmRzOnQudmVydGV4SW50ZW5zaXR5Qm91bmRzLHZlY3RvcnM6W10sY2VsbHM6W10sY29uZU9mZnNldDp0LmNvbmVPZmZzZXQsY29sb3JtYXA6dC5jb2xvcm1hcH07aWYoMD09PXQucG9zaXRpb25zLmxlbmd0aClyZXR1cm4gZSYmKGVbMF09WzAsMCwwXSxlWzFdPVswLDAsMF0pLGE7Zm9yKHZhciBvPTAscz0xLzAsbD0tMS8wLGM9MS8wLHU9LTEvMCxmPTEvMCxoPS0xLzAscD1udWxsLGQ9bnVsbCxnPVtdLG09MS8wLHY9ITEseT0wO3k8ci5sZW5ndGg7eSsrKXt2YXIgeD1yW3ldO3M9TWF0aC5taW4oeFswXSxzKSxsPU1hdGgubWF4KHhbMF0sbCksYz1NYXRoLm1pbih4WzFdLGMpLHU9TWF0aC5tYXgoeFsxXSx1KSxmPU1hdGgubWluKHhbMl0sZiksaD1NYXRoLm1heCh4WzJdLGgpO3ZhciBiPWlbeV07aWYobi5sZW5ndGgoYik+byYmKG89bi5sZW5ndGgoYikpLHkpe3ZhciBfPTIqbi5kaXN0YW5jZShwLHgpLyhuLmxlbmd0aChkKStuLmxlbmd0aChiKSk7Xz8obT1NYXRoLm1pbihtLF8pLHY9ITEpOnY9ITB9dnx8KHA9eCxkPWIpLGcucHVzaChiKX12YXIgdz1bcyxjLGZdLFQ9W2wsdSxoXTtlJiYoZVswXT13LGVbMV09VCksMD09PW8mJihvPTEpO3ZhciBrPTEvbztpc0Zpbml0ZShtKXx8KG09MSksYS52ZWN0b3JTY2FsZT1tO3ZhciBNPXQuY29uZVNpemV8fC41O3QuYWJzb2x1dGVDb25lU2l6ZSYmKE09dC5hYnNvbHV0ZUNvbmVTaXplKmspLGEuY29uZVNjYWxlPU07eT0wO2Zvcih2YXIgQT0wO3k8ci5sZW5ndGg7eSsrKWZvcih2YXIgUz0oeD1yW3ldKVswXSxFPXhbMV0sQz14WzJdLEw9Z1t5XSxJPW4ubGVuZ3RoKEwpKmssUD0wO1A8ODtQKyspe2EucG9zaXRpb25zLnB1c2goW1MsRSxDLEErK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxDLEErK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxDLEErK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxDLEErK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxDLEErK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxDLEErK10pLGEudmVjdG9ycy5wdXNoKEwpLGEudmVjdG9ycy5wdXNoKEwpLGEudmVjdG9ycy5wdXNoKEwpLGEudmVjdG9ycy5wdXNoKEwpLGEudmVjdG9ycy5wdXNoKEwpLGEudmVjdG9ycy5wdXNoKEwpLGEudmVydGV4SW50ZW5zaXR5LnB1c2goSSxJLEkpLGEudmVydGV4SW50ZW5zaXR5LnB1c2goSSxJLEkpO3ZhciB6PWEucG9zaXRpb25zLmxlbmd0aDthLmNlbGxzLnB1c2goW3otNix6LTUsei00XSxbei0zLHotMix6LTFdKX1yZXR1cm4gYX07dmFyIGk9dCgiLi9saWIvc2hhZGVycyIpO2UuZXhwb3J0cy5jcmVhdGVNZXNoPXQoIi4vY3JlYXRlX21lc2giKSxlLmV4cG9ydHMuY3JlYXRlQ29uZU1lc2g9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5leHBvcnRzLmNyZWF0ZU1lc2godCxyLHtzaGFkZXJzOmksdHJhY2VUeXBlOiJjb25lIn0pfX0seyIuL2NyZWF0ZV9tZXNoIjoyNjEsIi4vbGliL3NoYWRlcnMiOjI2MiwiZ2wtdmVjMyI6Mzc3fV0sMjYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPXQoImdsLXRleHR1cmUyZCIpLHM9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGw9dCgiZ2wtbWF0NC9pbnZlcnQiKSxjPXQoIm5kYXJyYXkiKSx1PXQoImNvbG9ybWFwIiksZj1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gaCh0LGUscixuLGksYSxvLHMsbCxjLHUpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLnBpY2tTaGFkZXI9bix0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWksdGhpcy50cmlhbmdsZVZlY3RvcnM9YSx0aGlzLnRyaWFuZ2xlQ29sb3JzPXMsdGhpcy50cmlhbmdsZVVWcz1sLHRoaXMudHJpYW5nbGVJZHM9byx0aGlzLnRyaWFuZ2xlVkFPPWMsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFjZVR5cGU9dSx0aGlzLnR1YmVTY2FsZT0xLHRoaXMuY29uZVNjYWxlPTIsdGhpcy52ZWN0b3JTY2FsZT0xLHRoaXMuY29uZU9mZnNldD0uMjUsdGhpcy5fbW9kZWw9Zix0aGlzLl92aWV3PWYsdGhpcy5fcHJvamVjdGlvbj1mLHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIHA9aC5wcm90b3R5cGU7ZnVuY3Rpb24gZCh0LGUpe3ZhciByPW4odCxlLm1lc2hTaGFkZXIudmVydGV4LGUubWVzaFNoYWRlci5mcmFnbWVudCxudWxsLGUubWVzaFNoYWRlci5hdHRyaWJ1dGVzKTtyZXR1cm4gci5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsci5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsci5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsci5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj00LHJ9ZnVuY3Rpb24gZyh0LGUpe3ZhciByPW4odCxlLnBpY2tTaGFkZXIudmVydGV4LGUucGlja1NoYWRlci5mcmFnbWVudCxudWxsLGUucGlja1NoYWRlci5hdHRyaWJ1dGVzKTtyZXR1cm4gci5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsci5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsci5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj00LHJ9cC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LHAuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0scC5waWNrU2xvdHM9MSxwLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LHAudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLCJsaWdodFBvc2l0aW9uImluIHQmJih0aGlzLmxpZ2h0UG9zaXRpb249dC5saWdodFBvc2l0aW9uKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksImFtYmllbnQiaW4gdCYmKHRoaXMuYW1iaWVudExpZ2h0PXQuYW1iaWVudCksImRpZmZ1c2UiaW4gdCYmKHRoaXMuZGlmZnVzZUxpZ2h0PXQuZGlmZnVzZSksInNwZWN1bGFyImluIHQmJih0aGlzLnNwZWN1bGFyTGlnaHQ9dC5zcGVjdWxhciksInJvdWdobmVzcyJpbiB0JiYodGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLCJmcmVzbmVsImluIHQmJih0aGlzLmZyZXNuZWw9dC5mcmVzbmVsKSx2b2lkIDAhPT10LnR1YmVTY2FsZSYmKHRoaXMudHViZVNjYWxlPXQudHViZVNjYWxlKSx2b2lkIDAhPT10LnZlY3RvclNjYWxlJiYodGhpcy52ZWN0b3JTY2FsZT10LnZlY3RvclNjYWxlKSx2b2lkIDAhPT10LmNvbmVTY2FsZSYmKHRoaXMuY29uZVNjYWxlPXQuY29uZVNjYWxlKSx2b2lkIDAhPT10LmNvbmVPZmZzZXQmJih0aGlzLmNvbmVPZmZzZXQ9dC5jb25lT2Zmc2V0KSx0LmNvbG9ybWFwJiYodGhpcy50ZXh0dXJlLnNoYXBlPVsyNTYsMjU2XSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUuTElORUFSX01JUE1BUF9MSU5FQVIsdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcj1lLkxJTkVBUix0aGlzLnRleHR1cmUuc2V0UGl4ZWxzKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT11KHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDoicmdiYSJ9KSxyPW5ldyBVaW50OEFycmF5KDEwMjQpLG49MDtuPDI1NjsrK24pe2Zvcih2YXIgaT1lW25dLGE9MDthPDM7KythKXJbNCpuK2FdPWlbYV07cls0Km4rM109MjU1KmlbM119cmV0dXJuIGMocixbMjU2LDI1Niw0XSxbNCwwLDFdKX0odC5jb2xvcm1hcCkpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcCgpKTt2YXIgcj10LmNlbGxzLG49dC5wb3NpdGlvbnMsaT10LnZlY3RvcnM7aWYobiYmciYmaSl7dmFyIGE9W10sbz1bXSxzPVtdLGw9W10sZj1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bix0aGlzLnZlY3RvcnM9aTt2YXIgaD10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLHA9dC52ZXJ0ZXhJbnRlbnNpdHksZD0xLzAsZz0tMS8wO2lmKHApaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpZD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sZz0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIG09MDttPHAubGVuZ3RoOysrbSl7dmFyIHY9cFttXTtkPU1hdGgubWluKGQsdiksZz1NYXRoLm1heChnLHYpfWVsc2UgZm9yKG09MDttPG4ubGVuZ3RoOysrbSl7dj1uW21dWzJdO2Q9TWF0aC5taW4oZCx2KSxnPU1hdGgubWF4KGcsdil9dGhpcy5pbnRlbnNpdHk9cHx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXVsyXTtyZXR1cm4gcn0obiksdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKG09MDttPG4ubGVuZ3RoOysrbSlmb3IodmFyIHk9blttXSx4PTA7eDwzOysreCkhaXNOYU4oeVt4XSkmJmlzRmluaXRlKHlbeF0pJiYodGhpcy5ib3VuZHNbMF1beF09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1beF0seVt4XSksdGhpcy5ib3VuZHNbMV1beF09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1beF0seVt4XSkpO3ZhciBiPTA7dDpmb3IobT0wO208ci5sZW5ndGg7KyttKXt2YXIgXz1yW21dO3N3aXRjaChfLmxlbmd0aCl7Y2FzZSAzOmZvcih4PTA7eDwzOysreCl7eT1uW1Q9X1t4XV07Zm9yKHZhciB3PTA7dzwzOysrdylpZihpc05hTih5W3ddKXx8IWlzRmluaXRlKHlbd10pKWNvbnRpbnVlIHR9Zm9yKHg9MDt4PDM7Kyt4KXt2YXIgVDt5PW5bVD1fWzIteF1dO2EucHVzaCh5WzBdLHlbMV0seVsyXSx5WzNdKTt2YXIgaz1pW1RdO28ucHVzaChrWzBdLGtbMV0sa1syXSxrWzNdfHwwKTt2YXIgTSxBPWg7Mz09PUEubGVuZ3RoP3MucHVzaChBWzBdLEFbMV0sQVsyXSwxKTpzLnB1c2goQVswXSxBWzFdLEFbMl0sQVszXSksTT1wP1socFtUXS1kKS8oZy1kKSwwXTpbKHlbMl0tZCkvKGctZCksMF0sbC5wdXNoKE1bMF0sTVsxXSksZi5wdXNoKG0pfWIrPTF9fXRoaXMudHJpYW5nbGVDb3VudD1iLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMudXBkYXRlKGEpLHRoaXMudHJpYW5nbGVWZWN0b3JzLnVwZGF0ZShvKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLnVwZGF0ZShzKSx0aGlzLnRyaWFuZ2xlVVZzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoZikpfX0scC5kcmF3VHJhbnNwYXJlbnQ9cC5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxmLG49dC52aWV3fHxmLGk9dC5wcm9qZWN0aW9ufHxmLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIGM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6Zi5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxvcGFjaXR5OnRoaXMub3BhY2l0eSx0dWJlU2NhbGU6dGhpcy50dWJlU2NhbGUsdmVjdG9yU2NhbGU6dGhpcy52ZWN0b3JTY2FsZSxjb25lU2NhbGU6dGhpcy5jb25lU2NhbGUsY29uZU9mZnNldDp0aGlzLmNvbmVPZmZzZXQsdGV4dHVyZTowfTtjLmludmVyc2VNb2RlbD1sKGMuaW52ZXJzZU1vZGVsLGMubW9kZWwpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy50ZXh0dXJlLmJpbmQoMCk7dmFyIHU9bmV3IEFycmF5KDE2KTtzKHUsYy52aWV3LGMubW9kZWwpLHModSxjLnByb2plY3Rpb24sdSksbCh1LHUpO2ZvcihvPTA7bzwzOysrbyljLmV5ZVBvc2l0aW9uW29dPXVbMTIrb10vdVsxNV07dmFyIGg9dVsxNV07Zm9yKG89MDtvPDM7KytvKWgrPXRoaXMubGlnaHRQb3NpdGlvbltvXSp1WzQqbyszXTtmb3Iobz0wO288MzsrK28pe2Zvcih2YXIgcD11WzEyK29dLGQ9MDtkPDM7KytkKXArPXVbNCpkK29dKnRoaXMubGlnaHRQb3NpdGlvbltkXTtjLmxpZ2h0UG9zaXRpb25bb109cC9ofWlmKHRoaXMudHJpYW5nbGVDb3VudD4wKXt2YXIgZz10aGlzLnRyaVNoYWRlcjtnLmJpbmQoKSxnLnVuaWZvcm1zPWMsdGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCl9fSxwLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxmLG49dC52aWV3fHxmLGk9dC5wcm9qZWN0aW9ufHxmLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxjbGlwQm91bmRzOmEsdHViZVNjYWxlOnRoaXMudHViZVNjYWxlLHZlY3RvclNjYWxlOnRoaXMudmVjdG9yU2NhbGUsY29uZVNjYWxlOnRoaXMuY29uZVNjYWxlLGNvbmVPZmZzZXQ6dGhpcy5jb25lT2Zmc2V0LHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9LGw9dGhpcy5waWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKX0scC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10LnZhbHVlWzBdKzI1Nip0LnZhbHVlWzFdKzY1NTM2KnQudmFsdWVbMl0scj10aGlzLmNlbGxzW2VdLG49dGhpcy5wb3NpdGlvbnNbclsxXV0uc2xpY2UoMCwzKSxpPXtwb3NpdGlvbjpuLGRhdGFDb29yZGluYXRlOm4saW5kZXg6TWF0aC5mbG9vcihyWzFdLzQ4KX07cmV0dXJuImNvbmUiPT09dGhpcy50cmFjZVR5cGU/aS5pbmRleD1NYXRoLmZsb29yKHJbMV0vNDgpOiJzdHJlYW10dWJlIj09PXRoaXMudHJhY2VUeXBlJiYoaS5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHlbclsxXV0saS52ZWxvY2l0eT10aGlzLnZlY3RvcnNbclsxXV0uc2xpY2UoMCwzKSxpLmRpdmVyZ2VuY2U9dGhpcy52ZWN0b3JzW3JbMV1dWzNdLGkuaW5kZXg9ZSksaX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUlkcy5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ci5zaGFkZXJzOzE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIHM9ZCh0LG4pLGw9Zyh0LG4pLHU9byh0LGMobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTt1LmdlbmVyYXRlTWlwbWFwKCksdS5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUix1Lm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgZj1pKHQpLHA9aSh0KSxtPWkodCksdj1pKHQpLHk9aSh0KSx4PWEodCxbe2J1ZmZlcjpmLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6eSx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjptLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dix0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOnAsdHlwZTp0LkZMT0FULHNpemU6NH1dKSxiPW5ldyBoKHQsdSxzLGwsZixwLHksbSx2LHgsci50cmFjZVR5cGV8fCJjb25lIik7cmV0dXJuIGIudXBkYXRlKGUpLGJ9fSx7Y29sb3JtYXA6MTMxLCJnbC1idWZmZXIiOjI1OSwiZ2wtbWF0NC9pbnZlcnQiOjI5MywiZ2wtbWF0NC9tdWx0aXBseSI6Mjk1LCJnbC1zaGFkZXIiOjMzNSwiZ2wtdGV4dHVyZTJkIjozNTMsImdsLXZhbyI6MzU4LG5kYXJyYXk6NDk1fV0sMjYyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XG4gIH1cbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSBjb25lIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cbi8vXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIGNvbmUgd2l0aCBpdHMgdG9wIGF0IG9yaWdpbiBhbmQgaGVpZ2h0IG9mIDEuMCxcbi8vIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhdHRyaWJ1dGUuXG4vL1xuLy8gRWFjaCBjb25lIGlzIG1hZGUgdXAgb2YgYSB0b3AgdmVydGV4LCBhIGNlbnRlciBiYXNlIHZlcnRleCBhbmQgYmFzZSBwZXJpbWV0ZXIgdmVydGljZXMuXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIGNvbmUgYnkgdGhlIGZvbGxvd2luZzpcbi8vICAgc2VnbWVudCArIDAgdG9wIHZlcnRleFxuLy8gICBzZWdtZW50ICsgMSBwZXJpbWV0ZXIgdmVydGV4IGErMVxuLy8gICBzZWdtZW50ICsgMiBwZXJpbWV0ZXIgdmVydGV4IGFcbi8vICAgc2VnbWVudCArIDMgY2VudGVyIGJhc2UgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyA0IHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgNSBwZXJpbWV0ZXIgdmVydGV4IGErMVxuLy8gV2hlcmUgc2VnbWVudCBpcyB0aGUgbnVtYmVyIG9mIHRoZSByYWRpYWwgc2VnbWVudCAqIDYgYW5kIGEgaXMgdGhlIGFuZ2xlIGF0IHRoYXQgcmFkaWFsIHNlZ21lbnQuXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQsIGZsb29yKGluZGV4IC8gNilcbi8vIFRvIGdvIGZyb20gc2VnbWVudCB0byBhbmdsZSwgMipwaSAqIChzZWdtZW50L3NlZ21lbnRDb3VudClcbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCBpbmRleCwgaW5kZXggLSAoc2VnbWVudCo2KVxuLy9cbnZlYzMgZ2V0Q29uZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgcmF3SW5kZXgsIGZsb2F0IGNvbmVPZmZzZXQsIG91dCB2ZWMzIG5vcm1hbCkge1xuXG4gIGNvbnN0IGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcblxuICBmbG9hdCBpbmRleCA9IHJhd0luZGV4IC0gZmxvb3IocmF3SW5kZXggL1xuICAgIChzZWdtZW50Q291bnQgKiA2LjApKSAqXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCk7XG5cbiAgZmxvYXQgc2VnbWVudCA9IGZsb29yKDAuMDAxICsgaW5kZXgvNi4wKTtcbiAgZmxvYXQgc2VnbWVudEluZGV4ID0gaW5kZXggLSAoc2VnbWVudCo2LjApO1xuXG4gIG5vcm1hbCA9IC1ub3JtYWxpemUoZCk7XG5cbiAgaWYgKHNlZ21lbnRJbmRleCA+IDIuOTkgJiYgc2VnbWVudEluZGV4IDwgMy4wMSkge1xuICAgIHJldHVybiBtaXgodmVjMygwLjApLCAtZCwgY29uZU9mZnNldCk7XG4gIH1cblxuICBmbG9hdCBuZXh0QW5nbGUgPSAoXG4gICAgKHNlZ21lbnRJbmRleCA+IDAuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDEuMDEpIHx8XG4gICAgKHNlZ21lbnRJbmRleCA+IDQuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDUuMDEpXG4gICkgPyAxLjAgOiAwLjA7XG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqICgoc2VnbWVudCArIG5leHRBbmdsZSkgLyBzZWdtZW50Q291bnQpO1xuXG4gIHZlYzMgdjEgPSBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgdmVjMyB2MiA9IHYxIC0gZDtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XG4gIHZlYzMgdjMgPSB2MiArIHggKyB5O1xuICBpZiAoc2VnbWVudEluZGV4IDwgMy4wKSB7XG4gICAgdmVjMyB0eCA9IHUgKiBzaW4oYW5nbGUpO1xuICAgIHZlYzMgdHkgPSB2ICogLWNvcyhhbmdsZSk7XG4gICAgdmVjMyB0YW5nZW50ID0gdHggKyB0eTtcbiAgICBub3JtYWwgPSBub3JtYWxpemUoY3Jvc3ModjMgLSB2MSwgdGFuZ2VudCkpO1xuICB9XG5cbiAgaWYgKHNlZ21lbnRJbmRleCA9PSAwLjApIHtcbiAgICByZXR1cm4gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIH1cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZSwgY29uZVNjYWxlLCBjb25lT2Zmc2V0O1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb24sIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbCwgZl9saWdodERpcmVjdGlvbiwgZl9leWVEaXJlY3Rpb24sIGZfZGF0YSwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gU2NhbGUgdGhlIHZlY3RvciBtYWduaXR1ZGUgdG8gc3RheSBjb25zdGFudCB3aXRoXG4gIC8vIG1vZGVsICYgdmlldyBjaGFuZ2VzLlxuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRDb25lUG9zaXRpb24obWF0Myhtb2RlbCkgKiAoKHZlY3RvclNjYWxlICogY29uZVNjYWxlKSAqIHZlY3RvciksIHBvc2l0aW9uLncsIGNvbmVPZmZzZXQsIG5vcm1hbCk7XG4gIHZlYzQgY29uZVBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKSArIHZlYzQoWFlaLCAwLjApO1xuXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX25vcm1hbCA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsIDAuMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG5cbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNChjb25lUG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdF9wb3NpdGlvbiAgPSB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XG5cbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xuICBmX2RhdGEgICAgICAgICAgID0gY29uZVBvc2l0aW9uLnh5ejtcbiAgZl9wb3NpdGlvbiAgICAgICA9IHBvc2l0aW9uLnh5ejtcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xufVxuIl0pLGE9bihbIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MsXG4gIGZsb2F0IGZyZXNuZWwpIHtcblxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG5cbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcblxuICAvL0dlb21ldHJpYyB0ZXJtXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcbiAgZmxvYXQgVmRvdEggPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcbiAgZmxvYXQgRzIgPSAoMi4wICogTmRvdEggKiBMZG90TikgLyBMZG90SDtcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcbiAgXG4gIC8vRGlzdHJpYnV0aW9uIHRlcm1cbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xuXG4gIC8vRnJlc25lbCB0ZXJtXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xuXG4gIC8vTXVsdGlwbHkgdGVybXMgYW5kIGRvbmVcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbCwgZl9saWdodERpcmVjdGlvbiwgZl9leWVEaXJlY3Rpb24sIGZfZGF0YSwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIGNvbmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgY29uZSB3aXRoIGl0cyB0b3AgYXQgb3JpZ2luIGFuZCBoZWlnaHQgb2YgMS4wLFxuLy8gcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdmVjdG9yIGF0dHJpYnV0ZS5cbi8vXG4vLyBFYWNoIGNvbmUgaXMgbWFkZSB1cCBvZiBhIHRvcCB2ZXJ0ZXgsIGEgY2VudGVyIGJhc2UgdmVydGV4IGFuZCBiYXNlIHBlcmltZXRlciB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgY29uZSBieSB0aGUgZm9sbG93aW5nOlxuLy8gICBzZWdtZW50ICsgMCB0b3AgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyAxIHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyAgIHNlZ21lbnQgKyAyIHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgMyBjZW50ZXIgYmFzZSB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDQgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyA1IHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyBXaGVyZSBzZWdtZW50IGlzIHRoZSBudW1iZXIgb2YgdGhlIHJhZGlhbCBzZWdtZW50ICogNiBhbmQgYSBpcyB0aGUgYW5nbGUgYXQgdGhhdCByYWRpYWwgc2VnbWVudC5cbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCwgZmxvb3IoaW5kZXggLyA2KVxuLy8gVG8gZ28gZnJvbSBzZWdtZW50IHRvIGFuZ2xlLCAyKnBpICogKHNlZ21lbnQvc2VnbWVudENvdW50KVxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50IGluZGV4LCBpbmRleCAtIChzZWdtZW50KjYpXG4vL1xudmVjMyBnZXRDb25lUG9zaXRpb24odmVjMyBkLCBmbG9hdCByYXdJbmRleCwgZmxvYXQgY29uZU9mZnNldCwgb3V0IHZlYzMgbm9ybWFsKSB7XG5cbiAgY29uc3QgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGZsb2F0IGluZGV4ID0gcmF3SW5kZXggLSBmbG9vcihyYXdJbmRleCAvXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCkpICpcbiAgICAoc2VnbWVudENvdW50ICogNi4wKTtcblxuICBmbG9hdCBzZWdtZW50ID0gZmxvb3IoMC4wMDEgKyBpbmRleC82LjApO1xuICBmbG9hdCBzZWdtZW50SW5kZXggPSBpbmRleCAtIChzZWdtZW50KjYuMCk7XG5cbiAgbm9ybWFsID0gLW5vcm1hbGl6ZShkKTtcblxuICBpZiAoc2VnbWVudEluZGV4ID4gMi45OSAmJiBzZWdtZW50SW5kZXggPCAzLjAxKSB7XG4gICAgcmV0dXJuIG1peCh2ZWMzKDAuMCksIC1kLCBjb25lT2Zmc2V0KTtcbiAgfVxuXG4gIGZsb2F0IG5leHRBbmdsZSA9IChcbiAgICAoc2VnbWVudEluZGV4ID4gMC45OSAmJiAgc2VnbWVudEluZGV4IDwgMS4wMSkgfHxcbiAgICAoc2VnbWVudEluZGV4ID4gNC45OSAmJiAgc2VnbWVudEluZGV4IDwgNS4wMSlcbiAgKSA/IDEuMCA6IDAuMDtcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKChzZWdtZW50ICsgbmV4dEFuZ2xlKSAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB2MSA9IG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB2ZWMzIHYyID0gdjEgLSBkO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB2MyA9IHYyICsgeCArIHk7XG4gIGlmIChzZWdtZW50SW5kZXggPCAzLjApIHtcbiAgICB2ZWMzIHR4ID0gdSAqIHNpbihhbmdsZSk7XG4gICAgdmVjMyB0eSA9IHYgKiAtY29zKGFuZ2xlKTtcbiAgICB2ZWMzIHRhbmdlbnQgPSB0eCArIHR5O1xuICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyh2MyAtIHYxLCB0YW5nZW50KSk7XG4gIH1cblxuICBpZiAoc2VnbWVudEluZGV4ID09IDAuMCkge1xuICAgIHJldHVybiBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgfVxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGUsIGNvbmVTY2FsZSwgY29uZU9mZnNldDtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRDb25lUG9zaXRpb24obWF0Myhtb2RlbCkgKiAoKHZlY3RvclNjYWxlICogY29uZVNjYWxlKSAqIHZlY3Rvci54eXopLCBwb3NpdGlvbi53LCBjb25lT2Zmc2V0LCBub3JtYWwpO1xuICB2ZWM0IGNvbmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIGNvbmVQb3NpdGlvbjtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XG59XG4iXSkscz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWMzIn1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWM0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In0se25hbWU6InZlY3RvciIsdHlwZToidmVjMyJ9XX19LHtnbHNsaWZ5OjI2M31dLDI2MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNTddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNTd9XSwyNjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ezA6Ik5PTkUiLDE6Ik9ORSIsMjoiTElORV9MT09QIiwzOiJMSU5FX1NUUklQIiw0OiJUUklBTkdMRVMiLDU6IlRSSUFOR0xFX1NUUklQIiw2OiJUUklBTkdMRV9GQU4iLDI1NjoiREVQVEhfQlVGRkVSX0JJVCIsNTEyOiJORVZFUiIsNTEzOiJMRVNTIiw1MTQ6IkVRVUFMIiw1MTU6IkxFUVVBTCIsNTE2OiJHUkVBVEVSIiw1MTc6Ik5PVEVRVUFMIiw1MTg6IkdFUVVBTCIsNTE5OiJBTFdBWVMiLDc2ODoiU1JDX0NPTE9SIiw3Njk6Ik9ORV9NSU5VU19TUkNfQ09MT1IiLDc3MDoiU1JDX0FMUEhBIiw3NzE6Ik9ORV9NSU5VU19TUkNfQUxQSEEiLDc3MjoiRFNUX0FMUEhBIiw3NzM6Ik9ORV9NSU5VU19EU1RfQUxQSEEiLDc3NDoiRFNUX0NPTE9SIiw3NzU6Ik9ORV9NSU5VU19EU1RfQ09MT1IiLDc3NjoiU1JDX0FMUEhBX1NBVFVSQVRFIiwxMDI0OiJTVEVOQ0lMX0JVRkZFUl9CSVQiLDEwMjg6IkZST05UIiwxMDI5OiJCQUNLIiwxMDMyOiJGUk9OVF9BTkRfQkFDSyIsMTI4MDoiSU5WQUxJRF9FTlVNIiwxMjgxOiJJTlZBTElEX1ZBTFVFIiwxMjgyOiJJTlZBTElEX09QRVJBVElPTiIsMTI4NToiT1VUX09GX01FTU9SWSIsMTI4NjoiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iLDIzMDQ6IkNXIiwyMzA1OiJDQ1ciLDI4NDk6IkxJTkVfV0lEVEgiLDI4ODQ6IkNVTExfRkFDRSIsMjg4NToiQ1VMTF9GQUNFX01PREUiLDI4ODY6IkZST05UX0ZBQ0UiLDI5Mjg6IkRFUFRIX1JBTkdFIiwyOTI5OiJERVBUSF9URVNUIiwyOTMwOiJERVBUSF9XUklURU1BU0siLDI5MzE6IkRFUFRIX0NMRUFSX1ZBTFVFIiwyOTMyOiJERVBUSF9GVU5DIiwyOTYwOiJTVEVOQ0lMX1RFU1QiLDI5NjE6IlNURU5DSUxfQ0xFQVJfVkFMVUUiLDI5NjI6IlNURU5DSUxfRlVOQyIsMjk2MzoiU1RFTkNJTF9WQUxVRV9NQVNLIiwyOTY0OiJTVEVOQ0lMX0ZBSUwiLDI5NjU6IlNURU5DSUxfUEFTU19ERVBUSF9GQUlMIiwyOTY2OiJTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyIsMjk2NzoiU1RFTkNJTF9SRUYiLDI5Njg6IlNURU5DSUxfV1JJVEVNQVNLIiwyOTc4OiJWSUVXUE9SVCIsMzAyNDoiRElUSEVSIiwzMDQyOiJCTEVORCIsMzA4ODoiU0NJU1NPUl9CT1giLDMwODk6IlNDSVNTT1JfVEVTVCIsMzEwNjoiQ09MT1JfQ0xFQVJfVkFMVUUiLDMxMDc6IkNPTE9SX1dSSVRFTUFTSyIsMzMxNzoiVU5QQUNLX0FMSUdOTUVOVCIsMzMzMzoiUEFDS19BTElHTk1FTlQiLDMzNzk6Ik1BWF9URVhUVVJFX1NJWkUiLDMzODY6Ik1BWF9WSUVXUE9SVF9ESU1TIiwzNDA4OiJTVUJQSVhFTF9CSVRTIiwzNDEwOiJSRURfQklUUyIsMzQxMToiR1JFRU5fQklUUyIsMzQxMjoiQkxVRV9CSVRTIiwzNDEzOiJBTFBIQV9CSVRTIiwzNDE0OiJERVBUSF9CSVRTIiwzNDE1OiJTVEVOQ0lMX0JJVFMiLDM1NTM6IlRFWFRVUkVfMkQiLDQzNTI6IkRPTlRfQ0FSRSIsNDM1MzoiRkFTVEVTVCIsNDM1NDoiTklDRVNUIiw1MTIwOiJCWVRFIiw1MTIxOiJVTlNJR05FRF9CWVRFIiw1MTIyOiJTSE9SVCIsNTEyMzoiVU5TSUdORURfU0hPUlQiLDUxMjQ6IklOVCIsNTEyNToiVU5TSUdORURfSU5UIiw1MTI2OiJGTE9BVCIsNTM4NjoiSU5WRVJUIiw1ODkwOiJURVhUVVJFIiw2NDAxOiJTVEVOQ0lMX0lOREVYIiw2NDAyOiJERVBUSF9DT01QT05FTlQiLDY0MDY6IkFMUEhBIiw2NDA3OiJSR0IiLDY0MDg6IlJHQkEiLDY0MDk6IkxVTUlOQU5DRSIsNjQxMDoiTFVNSU5BTkNFX0FMUEhBIiw3NjgwOiJLRUVQIiw3NjgxOiJSRVBMQUNFIiw3NjgyOiJJTkNSIiw3NjgzOiJERUNSIiw3OTM2OiJWRU5ET1IiLDc5Mzc6IlJFTkRFUkVSIiw3OTM4OiJWRVJTSU9OIiw5NzI4OiJORUFSRVNUIiw5NzI5OiJMSU5FQVIiLDk5ODQ6Ik5FQVJFU1RfTUlQTUFQX05FQVJFU1QiLDk5ODU6IkxJTkVBUl9NSVBNQVBfTkVBUkVTVCIsOTk4NjoiTkVBUkVTVF9NSVBNQVBfTElORUFSIiw5OTg3OiJMSU5FQVJfTUlQTUFQX0xJTkVBUiIsMTAyNDA6IlRFWFRVUkVfTUFHX0ZJTFRFUiIsMTAyNDE6IlRFWFRVUkVfTUlOX0ZJTFRFUiIsMTAyNDI6IlRFWFRVUkVfV1JBUF9TIiwxMDI0MzoiVEVYVFVSRV9XUkFQX1QiLDEwNDk3OiJSRVBFQVQiLDEwNzUyOiJQT0xZR09OX09GRlNFVF9VTklUUyIsMTYzODQ6IkNPTE9SX0JVRkZFUl9CSVQiLDMyNzY5OiJDT05TVEFOVF9DT0xPUiIsMzI3NzA6Ik9ORV9NSU5VU19DT05TVEFOVF9DT0xPUiIsMzI3NzE6IkNPTlNUQU5UX0FMUEhBIiwzMjc3MjoiT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIiwzMjc3MzoiQkxFTkRfQ09MT1IiLDMyNzc0OiJGVU5DX0FERCIsMzI3Nzc6IkJMRU5EX0VRVUFUSU9OX1JHQiIsMzI3Nzg6IkZVTkNfU1VCVFJBQ1QiLDMyNzc5OiJGVU5DX1JFVkVSU0VfU1VCVFJBQ1QiLDMyODE5OiJVTlNJR05FRF9TSE9SVF80XzRfNF80IiwzMjgyMDoiVU5TSUdORURfU0hPUlRfNV81XzVfMSIsMzI4MjM6IlBPTFlHT05fT0ZGU0VUX0ZJTEwiLDMyODI0OiJQT0xZR09OX09GRlNFVF9GQUNUT1IiLDMyODU0OiJSR0JBNCIsMzI4NTU6IlJHQjVfQTEiLDMyODczOiJURVhUVVJFX0JJTkRJTkdfMkQiLDMyOTI2OiJTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UiLDMyOTI4OiJTQU1QTEVfQ09WRVJBR0UiLDMyOTM2OiJTQU1QTEVfQlVGRkVSUyIsMzI5Mzc6IlNBTVBMRVMiLDMyOTM4OiJTQU1QTEVfQ09WRVJBR0VfVkFMVUUiLDMyOTM5OiJTQU1QTEVfQ09WRVJBR0VfSU5WRVJUIiwzMjk2ODoiQkxFTkRfRFNUX1JHQiIsMzI5Njk6IkJMRU5EX1NSQ19SR0IiLDMyOTcwOiJCTEVORF9EU1RfQUxQSEEiLDMyOTcxOiJCTEVORF9TUkNfQUxQSEEiLDMzMDcxOiJDTEFNUF9UT19FREdFIiwzMzE3MDoiR0VORVJBVEVfTUlQTUFQX0hJTlQiLDMzMTg5OiJERVBUSF9DT01QT05FTlQxNiIsMzMzMDY6IkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCIsMzM2MzU6IlVOU0lHTkVEX1NIT1JUXzVfNl81IiwzMzY0ODoiTUlSUk9SRURfUkVQRUFUIiwzMzkwMToiQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFIiwzMzkwMjoiQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFIiwzMzk4NDoiVEVYVFVSRTAiLDMzOTg1OiJURVhUVVJFMSIsMzM5ODY6IlRFWFRVUkUyIiwzMzk4NzoiVEVYVFVSRTMiLDMzOTg4OiJURVhUVVJFNCIsMzM5ODk6IlRFWFRVUkU1IiwzMzk5MDoiVEVYVFVSRTYiLDMzOTkxOiJURVhUVVJFNyIsMzM5OTI6IlRFWFRVUkU4IiwzMzk5MzoiVEVYVFVSRTkiLDMzOTk0OiJURVhUVVJFMTAiLDMzOTk1OiJURVhUVVJFMTEiLDMzOTk2OiJURVhUVVJFMTIiLDMzOTk3OiJURVhUVVJFMTMiLDMzOTk4OiJURVhUVVJFMTQiLDMzOTk5OiJURVhUVVJFMTUiLDM0ZTM6IlRFWFRVUkUxNiIsMzQwMDE6IlRFWFRVUkUxNyIsMzQwMDI6IlRFWFRVUkUxOCIsMzQwMDM6IlRFWFRVUkUxOSIsMzQwMDQ6IlRFWFRVUkUyMCIsMzQwMDU6IlRFWFRVUkUyMSIsMzQwMDY6IlRFWFRVUkUyMiIsMzQwMDc6IlRFWFRVUkUyMyIsMzQwMDg6IlRFWFRVUkUyNCIsMzQwMDk6IlRFWFRVUkUyNSIsMzQwMTA6IlRFWFRVUkUyNiIsMzQwMTE6IlRFWFRVUkUyNyIsMzQwMTI6IlRFWFRVUkUyOCIsMzQwMTM6IlRFWFRVUkUyOSIsMzQwMTQ6IlRFWFRVUkUzMCIsMzQwMTU6IlRFWFRVUkUzMSIsMzQwMTY6IkFDVElWRV9URVhUVVJFIiwzNDAyNDoiTUFYX1JFTkRFUkJVRkZFUl9TSVpFIiwzNDA0MToiREVQVEhfU1RFTkNJTCIsMzQwNTU6IklOQ1JfV1JBUCIsMzQwNTY6IkRFQ1JfV1JBUCIsMzQwNjc6IlRFWFRVUkVfQ1VCRV9NQVAiLDM0MDY4OiJURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAiLDM0MDY5OiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1giLDM0MDcwOiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1giLDM0MDcxOiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kiLDM0MDcyOiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kiLDM0MDczOiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1oiLDM0MDc0OiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1oiLDM0MDc2OiJNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFIiwzNDMzODoiVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEIiwzNDMzOToiVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFIiwzNDM0MDoiVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUiLDM0MzQxOiJWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUiLDM0MzQyOiJDVVJSRU5UX1ZFUlRFWF9BVFRSSUIiLDM0MzczOiJWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIiLDM0NDY2OiJOVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMiLDM0NDY3OiJDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIsMzQ2NjA6IkJVRkZFUl9TSVpFIiwzNDY2MToiQlVGRkVSX1VTQUdFIiwzNDgxNjoiU1RFTkNJTF9CQUNLX0ZVTkMiLDM0ODE3OiJTVEVOQ0lMX0JBQ0tfRkFJTCIsMzQ4MTg6IlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwiLDM0ODE5OiJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTIiwzNDg3NzoiQkxFTkRfRVFVQVRJT05fQUxQSEEiLDM0OTIxOiJNQVhfVkVSVEVYX0FUVFJJQlMiLDM0OTIyOiJWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQiLDM0OTMwOiJNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzQ5NjI6IkFSUkFZX0JVRkZFUiIsMzQ5NjM6IkVMRU1FTlRfQVJSQVlfQlVGRkVSIiwzNDk2NDoiQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM0OTY1OiJFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNDk3NToiVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyIsMzUwNDA6IlNUUkVBTV9EUkFXIiwzNTA0NDoiU1RBVElDX0RSQVciLDM1MDQ4OiJEWU5BTUlDX0RSQVciLDM1NjMyOiJGUkFHTUVOVF9TSEFERVIiLDM1NjMzOiJWRVJURVhfU0hBREVSIiwzNTY2MDoiTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNTY2MToiTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM1NjYzOiJTSEFERVJfVFlQRSIsMzU2NjQ6IkZMT0FUX1ZFQzIiLDM1NjY1OiJGTE9BVF9WRUMzIiwzNTY2NjoiRkxPQVRfVkVDNCIsMzU2Njc6IklOVF9WRUMyIiwzNTY2ODoiSU5UX1ZFQzMiLDM1NjY5OiJJTlRfVkVDNCIsMzU2NzA6IkJPT0wiLDM1NjcxOiJCT09MX1ZFQzIiLDM1NjcyOiJCT09MX1ZFQzMiLDM1NjczOiJCT09MX1ZFQzQiLDM1Njc0OiJGTE9BVF9NQVQyIiwzNTY3NToiRkxPQVRfTUFUMyIsMzU2NzY6IkZMT0FUX01BVDQiLDM1Njc4OiJTQU1QTEVSXzJEIiwzNTY4MDoiU0FNUExFUl9DVUJFIiwzNTcxMjoiREVMRVRFX1NUQVRVUyIsMzU3MTM6IkNPTVBJTEVfU1RBVFVTIiwzNTcxNDoiTElOS19TVEFUVVMiLDM1NzE1OiJWQUxJREFURV9TVEFUVVMiLDM1NzE2OiJJTkZPX0xPR19MRU5HVEgiLDM1NzE3OiJBVFRBQ0hFRF9TSEFERVJTIiwzNTcxODoiQUNUSVZFX1VOSUZPUk1TIiwzNTcxOToiQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCIsMzU3MjA6IlNIQURFUl9TT1VSQ0VfTEVOR1RIIiwzNTcyMToiQUNUSVZFX0FUVFJJQlVURVMiLDM1NzIyOiJBQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgiLDM1NzI0OiJTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04iLDM1NzI1OiJDVVJSRU5UX1BST0dSQU0iLDM2MDAzOiJTVEVOQ0lMX0JBQ0tfUkVGIiwzNjAwNDoiU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0siLDM2MDA1OiJTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLIiwzNjAwNjoiRlJBTUVCVUZGRVJfQklORElORyIsMzYwMDc6IlJFTkRFUkJVRkZFUl9CSU5ESU5HIiwzNjA0ODoiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSIsMzYwNDk6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUiLDM2MDUwOiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwiLDM2MDUxOiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSIsMzYwNTM6IkZSQU1FQlVGRkVSX0NPTVBMRVRFIiwzNjA1NDoiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIiwzNjA1NToiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQiLDM2MDU3OiJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMiLDM2MDYxOiJGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCIsMzYwNjQ6IkNPTE9SX0FUVEFDSE1FTlQwIiwzNjA5NjoiREVQVEhfQVRUQUNITUVOVCIsMzYxMjg6IlNURU5DSUxfQVRUQUNITUVOVCIsMzYxNjA6IkZSQU1FQlVGRkVSIiwzNjE2MToiUkVOREVSQlVGRkVSIiwzNjE2MjoiUkVOREVSQlVGRkVSX1dJRFRIIiwzNjE2MzoiUkVOREVSQlVGRkVSX0hFSUdIVCIsMzYxNjQ6IlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQiLDM2MTY4OiJTVEVOQ0lMX0lOREVYOCIsMzYxNzY6IlJFTkRFUkJVRkZFUl9SRURfU0laRSIsMzYxNzc6IlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFIiwzNjE3ODoiUkVOREVSQlVGRkVSX0JMVUVfU0laRSIsMzYxNzk6IlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFIiwzNjE4MDoiUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUiLDM2MTgxOiJSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFIiwzNjE5NDoiUkdCNTY1IiwzNjMzNjoiTE9XX0ZMT0FUIiwzNjMzNzoiTUVESVVNX0ZMT0FUIiwzNjMzODoiSElHSF9GTE9BVCIsMzYzMzk6IkxPV19JTlQiLDM2MzQwOiJNRURJVU1fSU5UIiwzNjM0MToiSElHSF9JTlQiLDM2MzQ2OiJTSEFERVJfQ09NUElMRVIiLDM2MzQ3OiJNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyIsMzYzNDg6Ik1BWF9WQVJZSU5HX1ZFQ1RPUlMiLDM2MzQ5OiJNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTIiwzNzQ0MDoiVU5QQUNLX0ZMSVBfWV9XRUJHTCIsMzc0NDE6IlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCIsMzc0NDI6IkNPTlRFWFRfTE9TVF9XRUJHTCIsMzc0NDM6IlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiLDM3NDQ0OiJCUk9XU0VSX0RFRkFVTFRfV0VCR0wifX0se31dLDI2NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vMS4wL251bWJlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19fSx7Ii4vMS4wL251bWJlcnMiOjI2NH1dLDI2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSksbz1pKGUsW3tidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDowLHN0cmlkZTo0MH0se2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjQsb2Zmc2V0OjEyLHN0cmlkZTo0MH0se2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjMsb2Zmc2V0OjI4LHN0cmlkZTo0MH1dKSxsPWEoZSk7bC5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsbC5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsbC5hdHRyaWJ1dGVzLm9mZnNldC5sb2NhdGlvbj0yO3ZhciBjPW5ldyBzKGUscixvLGwpO3JldHVybiBjLnVwZGF0ZSh0KSxjfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiLi9zaGFkZXJzL2luZGV4Iiksbz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9bix0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5jYXBTaXplPVsxMCwxMCwxMF0sdGhpcy5saW5lQ291bnQ9WzAsMCwwXSx0aGlzLmxpbmVPZmZzZXQ9WzAsMCwwXSx0aGlzLm9wYWNpdHk9MSx0aGlzLmhhc0FscGhhPSExfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXRbMF1bcl09TWF0aC5taW4odFswXVtyXSxlW3JdKSx0WzFdW3JdPU1hdGgubWF4KHRbMV1bcl0sZVtyXSl9bC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSxsLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0sbC5kcmF3VHJhbnNwYXJlbnQ9bC5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlci51bmlmb3Jtczt0aGlzLnNoYWRlci5iaW5kKCk7dmFyIG49ci52aWV3PXQudmlld3x8byxpPXIucHJvamVjdGlvbj10LnByb2plY3Rpb258fG87ci5tb2RlbD10Lm1vZGVsfHxvLHIuY2xpcEJvdW5kcz10aGlzLmNsaXBCb3VuZHMsci5vcGFjaXR5PXRoaXMub3BhY2l0eTt2YXIgYT1uWzEyXSxzPW5bMTNdLGw9blsxNF0sYz1uWzE1XSx1PSh0Ll9vcnRob3x8ITE/MjoxKSp0aGlzLnBpeGVsUmF0aW8qKGlbM10qYStpWzddKnMraVsxMV0qbCtpWzE1XSpjKS9lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7dGhpcy52YW8uYmluZCgpO2Zvcih2YXIgZj0wO2Y8MzsrK2YpZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGhbZl0qdGhpcy5waXhlbFJhdGlvKSxyLmNhcFNpemU9dGhpcy5jYXBTaXplW2ZdKnUsdGhpcy5saW5lQ291bnRbZl0mJmUuZHJhd0FycmF5cyhlLkxJTkVTLHRoaXMubGluZU9mZnNldFtmXSx0aGlzLmxpbmVDb3VudFtmXSk7dGhpcy52YW8udW5iaW5kKCl9O3ZhciB1PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBBcnJheSgzKSxlPTA7ZTwzOysrZSl7Zm9yKHZhciByPVtdLG49MTtuPD0yOysrbilmb3IodmFyIGk9LTE7aTw9MTtpKz0yKXt2YXIgYT1bMCwwLDBdO2FbKG4rZSklM109aSxyLnB1c2goYSl9dFtlXT1yfXJldHVybiB0fSgpO2Z1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPXVbbl0sYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgbz1pW2FdO3QucHVzaChlWzBdLGVbMV0sZVsyXSxyWzBdLHJbMV0sclsyXSxyWzNdLG9bMF0sb1sxXSxvWzJdKX1yZXR1cm4gaS5sZW5ndGh9bC51cGRhdGU9ZnVuY3Rpb24odCl7ImxpbmVXaWR0aCJpbih0PXR8fHt9KSYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoLEFycmF5LmlzQXJyYXkodGhpcy5saW5lV2lkdGgpfHwodGhpcy5saW5lV2lkdGg9W3RoaXMubGluZVdpZHRoLHRoaXMubGluZVdpZHRoLHRoaXMubGluZVdpZHRoXSkpLCJjYXBTaXplImluIHQmJih0aGlzLmNhcFNpemU9dC5jYXBTaXplLEFycmF5LmlzQXJyYXkodGhpcy5jYXBTaXplKXx8KHRoaXMuY2FwU2l6ZT1bdGhpcy5jYXBTaXplLHRoaXMuY2FwU2l6ZSx0aGlzLmNhcFNpemVdKSksdGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PSt0Lm9wYWNpdHksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSk7dmFyIGU9dC5jb2xvcnx8W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxyPXQucG9zaXRpb24sbj10LmVycm9yO2lmKEFycmF5LmlzQXJyYXkoZVswXSl8fChlPVtlLGUsZV0pLHImJm4pe3ZhciBpPVtdLGE9ci5sZW5ndGgsbz0wO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMubGluZUNvdW50PVswLDAsMF07Zm9yKHZhciBzPTA7czwzOysrcyl7dGhpcy5saW5lT2Zmc2V0W3NdPW87dDpmb3IodmFyIGw9MDtsPGE7KytsKXtmb3IodmFyIHU9cltsXSxoPTA7aDwzOysraClpZihpc05hTih1W2hdKXx8IWlzRmluaXRlKHVbaF0pKWNvbnRpbnVlIHQ7dmFyIHA9bltsXSxkPWVbc107aWYoQXJyYXkuaXNBcnJheShkWzBdKSYmKGQ9ZVtsXSksMz09PWQubGVuZ3RoP2Q9W2RbMF0sZFsxXSxkWzJdLDFdOjQ9PT1kLmxlbmd0aCYmKGQ9W2RbMF0sZFsxXSxkWzJdLGRbM11dLCF0aGlzLmhhc0FscGhhJiZkWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksIWlzTmFOKHBbMF1bc10pJiYhaXNOYU4ocFsxXVtzXSkpe3ZhciBnO2lmKHBbMF1bc108MCkoZz11LnNsaWNlKCkpW3NdKz1wWzBdW3NdLGkucHVzaCh1WzBdLHVbMV0sdVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwLGdbMF0sZ1sxXSxnWzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDApLGModGhpcy5ib3VuZHMsZyksbys9MitmKGksZyxkLHMpO2lmKHBbMV1bc10+MCkoZz11LnNsaWNlKCkpW3NdKz1wWzFdW3NdLGkucHVzaCh1WzBdLHVbMV0sdVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwLGdbMF0sZ1sxXSxnWzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDApLGModGhpcy5ib3VuZHMsZyksbys9MitmKGksZyxkLHMpfX10aGlzLmxpbmVDb3VudFtzXT1vLXRoaXMubGluZU9mZnNldFtzXX10aGlzLmJ1ZmZlci51cGRhdGUoaSl9fSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzL2luZGV4IjoyNjgsImdsLWJ1ZmZlciI6MjU5LCJnbC12YW8iOjM1OH1dLDI2NzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNTddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNTd9XSwyNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG9mZnNldDtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCBjYXBTaXplO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uICA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgd29ybGRQb3NpdGlvbiAgICAgICA9ICh3b3JsZFBvc2l0aW9uIC8gd29ybGRQb3NpdGlvbi53KSArIHZlYzQoY2FwU2l6ZSAqIG9mZnNldCwgMC4wKTtcbiAgZ2xfUG9zaXRpb24gICAgICAgICA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZnJhZ0NvbG9yICAgICAgICAgICA9IGNvbG9yO1xuICBmcmFnUG9zaXRpb24gICAgICAgID0gcG9zaXRpb247XG59Il0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZyYWdQb3NpdGlvbikgfHxcbiAgICBmcmFnQ29sb3IuYSAqIG9wYWNpdHkgPT0gMC5cbiAgKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHkgKiBmcmFnQ29sb3I7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToib2Zmc2V0Iix0eXBlOiJ2ZWMzIn1dKX19LHsiZ2wtc2hhZGVyIjozMzUsZ2xzbGlmeToyNjd9XSwyNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtdGV4dHVyZTJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2l8fChpPXQuRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQsYT10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCxvPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TLHM9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCk7dmFyIGM9dC5nZXRFeHRlbnNpb24oIldFQkdMX2RyYXdfYnVmZmVycyIpOyFsJiZjJiZmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2V0UGFyYW1ldGVyKGUuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKTtsPW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbj0wO248PXI7KytuKXtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9MDthPG47KythKWlbYV09dC5DT0xPUl9BVFRBQ0hNRU5UMCthO2ZvcihhPW47YTxyOysrYSlpW2FdPXQuTk9ORTtsW25dPWl9fSh0LGMpO0FycmF5LmlzQXJyYXkoZSkmJihuPXIscj0wfGVbMV0sZT0wfGVbMF0pO2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTWlzc2luZyBzaGFwZSBwYXJhbWV0ZXIiKTt2YXIgdT10LmdldFBhcmFtZXRlcih0Lk1BWF9SRU5ERVJCVUZGRVJfU0laRSk7aWYoZTwwfHxlPnV8fHI8MHx8cj51KXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBQYXJhbWV0ZXJzIGFyZSB0b28gbGFyZ2UgZm9yIEZCTyIpO3ZhciBmPTE7aWYoImNvbG9yImluKG49bnx8e30pKXtpZigoZj1NYXRoLm1heCgwfG4uY29sb3IsMCkpPDApdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE11c3Qgc3BlY2lmeSBhIG5vbm5lZ2F0aXZlIG51bWJlciBvZiBjb2xvcnMiKTtpZihmPjEpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBNdWx0aXBsZSBkcmF3IGJ1ZmZlciBleHRlbnNpb24gbm90IHN1cHBvcnRlZCIpO2lmKGY+dC5nZXRQYXJhbWV0ZXIoYy5NQVhfQ09MT1JfQVRUQUNITUVOVFNfV0VCR0wpKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgIitmKyIgZHJhdyBidWZmZXJzIil9fXZhciBoPXQuVU5TSUdORURfQllURSxwPXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdCIpO2lmKG4uZmxvYXQmJmY+MCl7aWYoIXApdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyIpO2g9dC5GTE9BVH1lbHNlIG4ucHJlZmVyRmxvYXQmJmY+MCYmcCYmKGg9dC5GTE9BVCk7dmFyIGc9ITA7ImRlcHRoImluIG4mJihnPSEhbi5kZXB0aCk7dmFyIG09ITE7InN0ZW5jaWwiaW4gbiYmKG09ISFuLnN0ZW5jaWwpO3JldHVybiBuZXcgZCh0LGUscixoLGYsZyxtLGMpfTt2YXIgaSxhLG8scyxsPW51bGw7ZnVuY3Rpb24gYyh0KXtyZXR1cm5bdC5nZXRQYXJhbWV0ZXIodC5GUkFNRUJVRkZFUl9CSU5ESU5HKSx0LmdldFBhcmFtZXRlcih0LlJFTkRFUkJVRkZFUl9CSU5ESU5HKSx0LmdldFBhcmFtZXRlcih0LlRFWFRVUkVfQklORElOR18yRCldfWZ1bmN0aW9uIHUodCxlKXt0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLGVbMF0pLHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixlWzFdKSx0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlWzJdKX1mdW5jdGlvbiBmKHQpe3N3aXRjaCh0KXtjYXNlIGk6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIHVuc3VwcG9ydGVkIik7Y2FzZSBhOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGF0dGFjaG1lbnQiKTtjYXNlIG86dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgZGltZW5zaW9ucyIpO2Nhc2Ugczp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBtaXNzaW5nIGF0dGFjaG1lbnQiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBmYWlsZWQgZm9yIHVuc3BlY2lmaWVkIHJlYXNvbiIpfX1mdW5jdGlvbiBoKHQsZSxyLGksYSxvKXtpZighaSlyZXR1cm4gbnVsbDt2YXIgcz1uKHQsZSxyLGEsaSk7cmV0dXJuIHMubWFnRmlsdGVyPXQuTkVBUkVTVCxzLm1pbkZpbHRlcj10Lk5FQVJFU1Qscy5taXBTYW1wbGVzPTEscy5iaW5kKCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0LkZSQU1FQlVGRkVSLG8sdC5URVhUVVJFXzJELHMuaGFuZGxlLDApLHN9ZnVuY3Rpb24gcCh0LGUscixuLGkpe3ZhciBhPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCk7cmV0dXJuIHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixhKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UodC5SRU5ERVJCVUZGRVIsbixlLHIpLHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodC5GUkFNRUJVRkZFUixpLHQuUkVOREVSQlVGRkVSLGEpLGF9ZnVuY3Rpb24gZCh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLl9zaGFwZT1bMHxlLDB8cl0sdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2V4dD1zLHRoaXMuY29sb3I9bmV3IEFycmF5KGkpO2Zvcih2YXIgZD0wO2Q8aTsrK2QpdGhpcy5jb2xvcltkXT1udWxsO3RoaXMuX2NvbG9yX3JiPW51bGwsdGhpcy5kZXB0aD1udWxsLHRoaXMuX2RlcHRoX3JiPW51bGwsdGhpcy5fY29sb3JUeXBlPW4sdGhpcy5fdXNlRGVwdGg9YSx0aGlzLl91c2VTdGVuY2lsPW87dmFyIGc9dGhpcyxtPVswfGUsMHxyXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhtLHswOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZy53aWR0aD10fX0sMTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcuaGVpZ2h0PXR9fX0pLHRoaXMuX3NoYXBlVmVjdG9yPW0sZnVuY3Rpb24odCl7dmFyIGU9Yyh0LmdsKSxyPXQuZ2wsbj10LmhhbmRsZT1yLmNyZWF0ZUZyYW1lYnVmZmVyKCksaT10Ll9zaGFwZVswXSxhPXQuX3NoYXBlWzFdLG89dC5jb2xvci5sZW5ndGgscz10Ll9leHQsZD10Ll91c2VTdGVuY2lsLGc9dC5fdXNlRGVwdGgsbT10Ll9jb2xvclR5cGU7ci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixuKTtmb3IodmFyIHY9MDt2PG87Kyt2KXQuY29sb3Jbdl09aChyLGksYSxtLHIuUkdCQSxyLkNPTE9SX0FUVEFDSE1FTlQwK3YpOzA9PT1vPyh0Ll9jb2xvcl9yYj1wKHIsaSxhLHIuUkdCQTQsci5DT0xPUl9BVFRBQ0hNRU5UMCkscyYmcy5kcmF3QnVmZmVyc1dFQkdMKGxbMF0pKTpvPjEmJnMuZHJhd0J1ZmZlcnNXRUJHTChsW29dKTt2YXIgeT1yLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpO3k/ZD90LmRlcHRoPWgocixpLGEseS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCxyLkRFUFRIX1NURU5DSUwsci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOmcmJih0LmRlcHRoPWgocixpLGEsci5VTlNJR05FRF9TSE9SVCxyLkRFUFRIX0NPTVBPTkVOVCxyLkRFUFRIX0FUVEFDSE1FTlQpKTpnJiZkP3QuX2RlcHRoX3JiPXAocixpLGEsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTpnP3QuX2RlcHRoX3JiPXAocixpLGEsci5ERVBUSF9DT01QT05FTlQxNixyLkRFUFRIX0FUVEFDSE1FTlQpOmQmJih0Ll9kZXB0aF9yYj1wKHIsaSxhLHIuU1RFTkNJTF9JTkRFWCxyLlNURU5DSUxfQVRUQUNITUVOVCkpO3ZhciB4PXIuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhyLkZSQU1FQlVGRkVSKTtpZih4IT09ci5GUkFNRUJVRkZFUl9DT01QTEVURSl7dC5fZGVzdHJveWVkPSEwLHIuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbnVsbCksci5kZWxldGVGcmFtZWJ1ZmZlcih0LmhhbmRsZSksdC5oYW5kbGU9bnVsbCx0LmRlcHRoJiYodC5kZXB0aC5kaXNwb3NlKCksdC5kZXB0aD1udWxsKSx0Ll9kZXB0aF9yYiYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHQuX2RlcHRoX3JiKSx0Ll9kZXB0aF9yYj1udWxsKTtmb3Iodj0wO3Y8dC5jb2xvci5sZW5ndGg7Kyt2KXQuY29sb3Jbdl0uZGlzcG9zZSgpLHQuY29sb3Jbdl09bnVsbDt0Ll9jb2xvcl9yYiYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHQuX2NvbG9yX3JiKSx0Ll9jb2xvcl9yYj1udWxsKSx1KHIsZSksZih4KX11KHIsZSl9KHRoaXMpfXZhciBnPWQucHJvdG90eXBlO2Z1bmN0aW9uIG0odCxlLHIpe2lmKHQuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ2FuJ3QgcmVzaXplIGRlc3Ryb3llZCBGQk8iKTtpZih0Ll9zaGFwZVswXSE9PWV8fHQuX3NoYXBlWzFdIT09cil7dmFyIG49dC5nbCxpPW4uZ2V0UGFyYW1ldGVyKG4uTUFYX1JFTkRFUkJVRkZFUl9TSVpFKTtpZihlPDB8fGU+aXx8cjwwfHxyPmkpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENhbid0IHJlc2l6ZSBGQk8sIGludmFsaWQgZGltZW5zaW9ucyIpO3QuX3NoYXBlWzBdPWUsdC5fc2hhcGVbMV09cjtmb3IodmFyIGE9YyhuKSxvPTA7bzx0LmNvbG9yLmxlbmd0aDsrK28pdC5jb2xvcltvXS5zaGFwZT10Ll9zaGFwZTt0Ll9jb2xvcl9yYiYmKG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUix0Ll9jb2xvcl9yYiksbi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uUkdCQTQsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pKSx0LmRlcHRoJiYodC5kZXB0aC5zaGFwZT10Ll9zaGFwZSksdC5fZGVwdGhfcmImJihuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsdC5fZGVwdGhfcmIpLHQuX3VzZURlcHRoJiZ0Ll91c2VTdGVuY2lsP24ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLkRFUFRIX1NURU5DSUwsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pOnQuX3VzZURlcHRoP24ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLkRFUFRIX0NPTVBPTkVOVDE2LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VTdGVuY2lsJiZuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5TVEVOQ0lMX0lOREVYLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUix0LmhhbmRsZSk7dmFyIHM9bi5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKG4uRlJBTUVCVUZGRVIpO3MhPT1uLkZSQU1FQlVGRkVSX0NPTVBMRVRFJiYodC5kaXNwb3NlKCksdShuLGEpLGYocykpLHUobixhKX19T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZyx7c2hhcGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/WzAsMF06dGhpcy5fc2hhcGVWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpfHwodD1bMHx0LDB8dF0pLDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogU2hhcGUgdmVjdG9yIG11c3QgYmUgbGVuZ3RoIDIiKTt2YXIgZT0wfHRbMF0scj0wfHRbMV07cmV0dXJuIG0odGhpcyxlLHIpLFtlLHJdfSxlbnVtZXJhYmxlOiExfSx3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD8wOnRoaXMuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odGhpcyx0fD0wLHRoaXMuX3NoYXBlWzFdKSx0fSxlbnVtZXJhYmxlOiExfSxoZWlnaHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0fD0wLG0odGhpcyx0aGlzLl9zaGFwZVswXSx0KSx0fSxlbnVtZXJhYmxlOiExfX0pLGcuYmluZD1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3ZhciB0PXRoaXMuZ2w7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUix0aGlzLmhhbmRsZSksdC52aWV3cG9ydCgwLDAsdGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV0pfX0sZy5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl7dGhpcy5fZGVzdHJveWVkPSEwO3ZhciB0PXRoaXMuZ2w7dC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmhhbmRsZSksdGhpcy5oYW5kbGU9bnVsbCx0aGlzLmRlcHRoJiYodGhpcy5kZXB0aC5kaXNwb3NlKCksdGhpcy5kZXB0aD1udWxsKSx0aGlzLl9kZXB0aF9yYiYmKHQuZGVsZXRlUmVuZGVyYnVmZmVyKHRoaXMuX2RlcHRoX3JiKSx0aGlzLl9kZXB0aF9yYj1udWxsKTtmb3IodmFyIGU9MDtlPHRoaXMuY29sb3IubGVuZ3RoOysrZSl0aGlzLmNvbG9yW2VdLmRpc3Bvc2UoKSx0aGlzLmNvbG9yW2VdPW51bGw7dGhpcy5fY29sb3JfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9jb2xvcl9yYiksdGhpcy5fY29sb3JfcmI9bnVsbCl9fX0seyJnbC10ZXh0dXJlMmQiOjM1M31dLDI3MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInNwcmludGYtanMiKS5zcHJpbnRmLGk9dCgiZ2wtY29uc3RhbnRzL2xvb2t1cCIpLGE9dCgiZ2xzbC1zaGFkZXItbmFtZSIpLG89dCgiYWRkLWxpbmUtbnVtYmVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBzPWEoZSl8fCJvZiB1bmtub3duIG5hbWUgKHNlZSBucG0gZ2xzbC1zaGFkZXItbmFtZSkiLGw9InVua25vd24gdHlwZSI7dm9pZCAwIT09ciYmKGw9cj09PWkuRlJBR01FTlRfU0hBREVSPyJmcmFnbWVudCI6InZlcnRleCIpO2Zvcih2YXIgYz1uKCJFcnJvciBjb21waWxpbmcgJXMgc2hhZGVyICVzOlxuIixsLHMpLHU9bigiJXMlcyIsYyx0KSxmPXQuc3BsaXQoIlxuIiksaD17fSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBkPWZbcF07aWYoIiIhPT1kJiYiXDAiIT09ZCl7dmFyIGc9cGFyc2VJbnQoZC5zcGxpdCgiOiIpWzJdKTtpZihpc05hTihnKSl0aHJvdyBuZXcgRXJyb3IobigiQ291bGQgbm90IHBhcnNlIGVycm9yOiAlcyIsZCkpO2hbZ109ZH19dmFyIG09byhlKS5zcGxpdCgiXG4iKTtmb3IocD0wO3A8bS5sZW5ndGg7cCsrKWlmKGhbcCszXXx8aFtwKzJdfHxoW3ArMV0pe3ZhciB2PW1bcF07aWYoYys9disiXG4iLGhbcCsxXSl7dmFyIHk9aFtwKzFdO3k9eS5zdWJzdHIoeS5zcGxpdCgiOiIsMykuam9pbigiOiIpLmxlbmd0aCsxKS50cmltKCksYys9bigiXl5eICVzXG5cbiIseSl9fXJldHVybntsb25nOmMudHJpbSgpLHNob3J0OnUudHJpbSgpfX19LHsiYWRkLWxpbmUtbnVtYmVycyI6NjYsImdsLWNvbnN0YW50cy9sb29rdXAiOjI2NSwiZ2xzbC1zaGFkZXItbmFtZSI6NDMxLCJzcHJpbnRmLWpzIjo1Njd9XSwyNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxuPW8ocixsLnZlcnRleCxsLmZyYWdtZW50KSxpPW8ocixsLnBpY2tWZXJ0ZXgsbC5waWNrRnJhZ21lbnQpLGE9cyhyKSx1PXMociksZj1zKHIpLGg9cyhyKSxwPW5ldyBjKHQsbixpLGEsdSxmLGgpO3JldHVybiBwLnVwZGF0ZShlKSx0LmFkZE9iamVjdChwKSxwfTt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgiaW90YS1hcnJheSIpLGE9dCgidHlwZWRhcnJheS1wb29sIiksbz10KCJnbC1zaGFkZXIiKSxzPXQoImdsLWJ1ZmZlciIpLGw9dCgiLi9saWIvc2hhZGVycyIpO2Z1bmN0aW9uIGModCxlLHIsbixpLGEsbyl7dGhpcy5wbG90PXQsdGhpcy5zaGFkZXI9ZSx0aGlzLnBpY2tTaGFkZXI9cix0aGlzLnBvc2l0aW9uQnVmZmVyPW4sdGhpcy53ZWlnaHRCdWZmZXI9aSx0aGlzLmNvbG9yQnVmZmVyPWEsdGhpcy5pZEJ1ZmZlcj1vLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnNoYXBlPVswLDBdLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5waWNrT2Zmc2V0PTB9dmFyIHUsZj1jLnByb3RvdHlwZSxoPVswLDAsMSwwLDAsMSwxLDAsMSwxLDAsMV07Zi5kcmF3PSh1PVsxLDAsMCwwLDEsMCwwLDAsMV0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBsb3QsZT10aGlzLnNoYWRlcixyPXRoaXMuYm91bmRzLG49dGhpcy5udW1WZXJ0aWNlcztpZighKG48PTApKXt2YXIgaT10LmdsLGE9dC5kYXRhQm94LG89clsyXS1yWzBdLHM9clszXS1yWzFdLGw9YVsyXS1hWzBdLGM9YVszXS1hWzFdO3VbMF09MipvL2wsdVs0XT0yKnMvYyx1WzZdPTIqKHJbMF0tYVswXSkvbC0xLHVbN109MiooclsxXS1hWzFdKS9jLTEsZS5iaW5kKCk7dmFyIGY9ZS51bmlmb3JtcztmLnZpZXdUcmFuc2Zvcm09dSxmLnNoYXBlPXRoaXMuc2hhcGU7dmFyIGg9ZS5hdHRyaWJ1dGVzO3RoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLGgucG9zaXRpb24ucG9pbnRlcigpLHRoaXMud2VpZ2h0QnVmZmVyLmJpbmQoKSxoLndlaWdodC5wb2ludGVyKGkuVU5TSUdORURfQllURSwhMSksdGhpcy5jb2xvckJ1ZmZlci5iaW5kKCksaC5jb2xvci5wb2ludGVyKGkuVU5TSUdORURfQllURSwhMCksaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLDAsbil9fSksZi5kcmF3UGljaz1mdW5jdGlvbigpe3ZhciB0PVsxLDAsMCwwLDEsMCwwLDAsMV0sZT1bMCwwLDAsMF07cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMucGxvdCxpPXRoaXMucGlja1NoYWRlcixhPXRoaXMuYm91bmRzLG89dGhpcy5udW1WZXJ0aWNlcztpZighKG88PTApKXt2YXIgcz1uLmdsLGw9bi5kYXRhQm94LGM9YVsyXS1hWzBdLHU9YVszXS1hWzFdLGY9bFsyXS1sWzBdLGg9bFszXS1sWzFdO3RbMF09MipjL2YsdFs0XT0yKnUvaCx0WzZdPTIqKGFbMF0tbFswXSkvZi0xLHRbN109MiooYVsxXS1sWzFdKS9oLTE7Zm9yKHZhciBwPTA7cDw0OysrcCllW3BdPXI+PjgqcCYyNTU7dGhpcy5waWNrT2Zmc2V0PXIsaS5iaW5kKCk7dmFyIGQ9aS51bmlmb3JtcztkLnZpZXdUcmFuc2Zvcm09dCxkLnBpY2tPZmZzZXQ9ZSxkLnNoYXBlPXRoaXMuc2hhcGU7dmFyIGc9aS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxnLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksZy53ZWlnaHQucG9pbnRlcihzLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuaWRCdWZmZXIuYmluZCgpLGcucGlja0lkLnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExKSxzLmRyYXdBcnJheXMocy5UUklBTkdMRVMsMCxvKSxyK3RoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXX19fSgpLGYucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdO2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMueERhdGEscz10aGlzLnlEYXRhO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvW2EldGhpcy5zaGFwZVswXV0sc1thL3RoaXMuc2hhcGVbMF18MF1dfX0sZi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLnNoYXBlfHxbMCwwXSxyPXQueHx8aShlWzBdKSxvPXQueXx8aShlWzFdKSxzPXQuenx8bmV3IEZsb2F0MzJBcnJheShlWzBdKmVbMV0pLGw9ITEhPT10LnpzbW9vdGg7dGhpcy54RGF0YT1yLHRoaXMueURhdGE9bzt2YXIgYyx1LGYscCxkPXQuY29sb3JMZXZlbHN8fFswXSxnPXQuY29sb3JWYWx1ZXN8fFswLDAsMCwxXSxtPWQubGVuZ3RoLHY9dGhpcy5ib3VuZHM7bD8oYz12WzBdPXJbMF0sdT12WzFdPW9bMF0sZj12WzJdPXJbci5sZW5ndGgtMV0scD12WzNdPW9bby5sZW5ndGgtMV0pOihjPXZbMF09clswXSsoclsxXS1yWzBdKS8yLHU9dlsxXT1vWzBdKyhvWzFdLW9bMF0pLzIsZj12WzJdPXJbci5sZW5ndGgtMV0rKHJbci5sZW5ndGgtMV0tcltyLmxlbmd0aC0yXSkvMixwPXZbM109b1tvLmxlbmd0aC0xXSsob1tvLmxlbmd0aC0xXS1vW28ubGVuZ3RoLTJdKS8yKTt2YXIgeT0xLyhmLWMpLHg9MS8ocC11KSxiPWVbMF0sXz1lWzFdO3RoaXMuc2hhcGU9W2IsX107dmFyIHc9KGw/KGItMSkqKF8tMSk6YipfKSooaC5sZW5ndGg+Pj4xKTt0aGlzLm51bVZlcnRpY2VzPXc7Zm9yKHZhciBUPWEubWFsbG9jVWludDgoNCp3KSxrPWEubWFsbG9jRmxvYXQzMigyKncpLE09YS5tYWxsb2NVaW50OCgyKncpLEE9YS5tYWxsb2NVaW50MzIodyksUz0wLEU9bD9iLTE6YixDPWw/Xy0xOl8sTD0wO0w8QzsrK0wpe3ZhciBJLFA7bD8oST14KihvW0xdLXUpLFA9eCoob1tMKzFdLXUpKTooST1MPF8tMT94KihvW0xdLShvW0wrMV0tb1tMXSkvMi11KTp4KihvW0xdLShvW0xdLW9bTC0xXSkvMi11KSxQPUw8Xy0xP3gqKG9bTF0rKG9bTCsxXS1vW0xdKS8yLXUpOngqKG9bTF0rKG9bTF0tb1tMLTFdKS8yLXUpKTtmb3IodmFyIHo9MDt6PEU7Kyt6KXt2YXIgTyxEO2w/KE89eSooclt6XS1jKSxEPXkqKHJbeisxXS1jKSk6KE89ejxiLTE/eSooclt6XS0oclt6KzFdLXJbel0pLzItYyk6eSooclt6XS0oclt6XS1yW3otMV0pLzItYyksRD16PGItMT95KihyW3pdKyhyW3orMV0tclt6XSkvMi1jKTp5KihyW3pdKyhyW3pdLXJbei0xXSkvMi1jKSk7Zm9yKHZhciBSPTA7UjxoLmxlbmd0aDtSKz0yKXt2YXIgRixCLE4saixVPWhbUl0sVj1oW1IrMV0scT1zW2w/KEwrVikqYisoeitVKTpMKmIrel0sSD1uLmxlKGQscSk7aWYoSDwwKUY9Z1swXSxCPWdbMV0sTj1nWzJdLGo9Z1szXTtlbHNlIGlmKEg9PT1tLTEpRj1nWzQqbS00XSxCPWdbNCptLTNdLE49Z1s0Km0tMl0saj1nWzQqbS0xXTtlbHNle3ZhciBHPShxLWRbSF0pLyhkW0grMV0tZFtIXSksWT0xLUcsVz00KkgsWD00KihIKzEpO0Y9WSpnW1ddK0cqZ1tYXSxCPVkqZ1tXKzFdK0cqZ1tYKzFdLE49WSpnW1crMl0rRypnW1grMl0saj1ZKmdbVyszXStHKmdbWCszXX1UWzQqU109MjU1KkYsVFs0KlMrMV09MjU1KkIsVFs0KlMrMl09MjU1Kk4sVFs0KlMrM109MjU1Kmosa1syKlNdPS41Kk8rLjUqRCxrWzIqUysxXT0uNSpJKy41KlAsTVsyKlNdPVUsTVsyKlMrMV09VixBW1NdPUwqYit6LFMrPTF9fX10aGlzLnBvc2l0aW9uQnVmZmVyLnVwZGF0ZShrKSx0aGlzLndlaWdodEJ1ZmZlci51cGRhdGUoTSksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoVCksdGhpcy5pZEJ1ZmZlci51cGRhdGUoQSksYS5mcmVlKGspLGEuZnJlZShUKSxhLmZyZWUoTSksYS5mcmVlKEEpfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvc2l0aW9uQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLndlaWdodEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6MjcyLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6OTYsImdsLWJ1ZmZlciI6MjU5LCJnbC1zaGFkZXIiOjMzNSwiaW90YS1hcnJheSI6NDYzLCJ0eXBlZGFycmF5LXBvb2wiOjU5NX1dLDI3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5Iik7ZS5leHBvcnRzPXtmcmFnbWVudDpuKFsicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiICogZnJhZ0NvbG9yLmEsIGZyYWdDb2xvci5hKTtcbn1cbiJdKSx2ZXJ0ZXg6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcbn1cbiJdKSxwaWNrRnJhZ21lbnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIGQgPSBzdGVwKC41LCB2V2VpZ2h0KTtcbiAgdmVjNCBpZCA9IGZyYWdJZCArIHBpY2tPZmZzZXQ7XG4gIGlkLnggKz0gZC54ICsgZC55KnNoYXBlLng7XG5cbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gaWQvMjU1Ljtcbn1cbiJdKSxwaWNrVmVydGV4Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgcGlja0lkO1xuYXR0cmlidXRlIHZlYzIgd2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIG1hdDMgdmlld1RyYW5zZm9ybTtcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xuXG52b2lkIG1haW4oKSB7XG4gIHZXZWlnaHQgPSB3ZWlnaHQ7XG5cbiAgZnJhZ0lkID0gcGlja0lkO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gdmlld1RyYW5zZm9ybSAqIHZlYzMoIHBvc2l0aW9uICsgKHdlaWdodC0uNSkvKHNoYXBlLTEuKSAsIDEuMCk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcbn1cbiJdKX19LHtnbHNsaWZ5OjI3M31dLDI3MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNTddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNTd9XSwyNzQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbmV4dFBvc2l0aW9uO1xuYXR0cmlidXRlIGZsb2F0IGFyY0xlbmd0aCwgbGluZVdpZHRoO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5cbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcblxudmVjNCBwcm9qZWN0KHZlYzMgcCkge1xuICByZXR1cm4gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWM0IHN0YXJ0UG9pbnQgPSBwcm9qZWN0KHBvc2l0aW9uKTtcbiAgdmVjNCBlbmRQb2ludCAgID0gcHJvamVjdChuZXh0UG9zaXRpb24pO1xuXG4gIHZlYzIgQSA9IHN0YXJ0UG9pbnQueHkgLyBzdGFydFBvaW50Lnc7XG4gIHZlYzIgQiA9ICAgZW5kUG9pbnQueHkgLyAgIGVuZFBvaW50Lnc7XG5cbiAgZmxvYXQgY2xpcEFuZ2xlID0gYXRhbihcbiAgICAoQi55IC0gQS55KSAqIHNjcmVlblNoYXBlLnksXG4gICAgKEIueCAtIEEueCkgKiBzY3JlZW5TaGFwZS54XG4gICk7XG5cbiAgdmVjMiBvZmZzZXQgPSAwLjUgKiBwaXhlbFJhdGlvICogbGluZVdpZHRoICogdmVjMihcbiAgICBzaW4oY2xpcEFuZ2xlKSxcbiAgICAtY29zKGNsaXBBbmdsZSlcbiAgKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzdGFydFBvaW50Lnh5ICsgc3RhcnRQb2ludC53ICogb2Zmc2V0LCBzdGFydFBvaW50Lnp3KTtcblxuICB3b3JsZFBvc2l0aW9uID0gcG9zaXRpb247XG4gIHBpeGVsQXJjTGVuZ3RoID0gYXJjTGVuZ3RoO1xuICBmcmFnQ29sb3IgPSBjb2xvcjtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICAgICAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hUZXh0dXJlO1xudW5pZm9ybSBmbG9hdCAgICAgZGFzaFNjYWxlO1xudW5pZm9ybSBmbG9hdCAgICAgb3BhY2l0eTtcblxudmFyeWluZyB2ZWMzICAgIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0ICAgcGl4ZWxBcmNMZW5ndGg7XG52YXJ5aW5nIHZlYzQgICAgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pIHx8XG4gICAgZnJhZ0NvbG9yLmEgKiBvcGFjaXR5ID09IDAuXG4gICkgZGlzY2FyZDtcblxuICBmbG9hdCBkYXNoV2VpZ2h0ID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKGRhc2hTY2FsZSAqIHBpeGVsQXJjTGVuZ3RoLCAwKSkucjtcbiAgaWYoZGFzaFdlaWdodCA8IDAuNSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG4jZGVmaW5lIEZMT0FUX01BWCAgMS43MDE0MTE4NGUzOFxuI2RlZmluZSBGTE9BVF9NSU4gIDEuMTc1NDk0MzVlLTM4XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWtvbGFseXNlbmtvL2dsc2wtcmVhZC1mbG9hdC9ibG9iL21hc3Rlci9pbmRleC5nbHNsXG52ZWM0IHBhY2tGbG9hdChmbG9hdCB2KSB7XG4gIGZsb2F0IGF2ID0gYWJzKHYpO1xuXG4gIC8vSGFuZGxlIHNwZWNpYWwgY2FzZXNcbiAgaWYoYXYgPCBGTE9BVF9NSU4pIHtcbiAgICByZXR1cm4gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2UgaWYodiA+IEZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDEyNy4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH0gZWxzZSBpZih2IDwgLUZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDI1NS4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH1cblxuICB2ZWM0IGMgPSB2ZWM0KDAsMCwwLDApO1xuXG4gIC8vQ29tcHV0ZSBleHBvbmVudCBhbmQgbWFudGlzc2FcbiAgZmxvYXQgZSA9IGZsb29yKGxvZzIoYXYpKTtcbiAgZmxvYXQgbSA9IGF2ICogcG93KDIuMCwgLWUpIC0gMS4wO1xuXG4gIC8vVW5wYWNrIG1hbnRpc3NhXG4gIGNbMV0gPSBmbG9vcigxMjguMCAqIG0pO1xuICBtIC09IGNbMV0gLyAxMjguMDtcbiAgY1syXSA9IGZsb29yKDMyNzY4LjAgKiBtKTtcbiAgbSAtPSBjWzJdIC8gMzI3NjguMDtcbiAgY1szXSA9IGZsb29yKDgzODg2MDguMCAqIG0pO1xuXG4gIC8vVW5wYWNrIGV4cG9uZW50XG4gIGZsb2F0IGViaWFzID0gZSArIDEyNy4wO1xuICBjWzBdID0gZmxvb3IoZWJpYXMgLyAyLjApO1xuICBlYmlhcyAtPSBjWzBdICogMi4wO1xuICBjWzFdICs9IGZsb29yKGViaWFzKSAqIDEyOC4wO1xuXG4gIC8vVW5wYWNrIHNpZ24gYml0XG4gIGNbMF0gKz0gMTI4LjAgKiBzdGVwKDAuMCwgLXYpO1xuXG4gIC8vU2NhbGUgYmFjayB0byByYW5nZVxuICByZXR1cm4gYyAvIDI1NS4wO1xufVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0IHBpeGVsQXJjTGVuZ3RoO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZFBvc2l0aW9uKSkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZC8yNTUuMCwgcGFja0Zsb2F0KHBpeGVsQXJjTGVuZ3RoKS54eXopO1xufSJdKSxsPVt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToibmV4dFBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImFyY0xlbmd0aCIsdHlwZToiZmxvYXQifSx7bmFtZToibGluZVdpZHRoIix0eXBlOiJmbG9hdCJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9XTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLGwpfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLHMsbnVsbCxsKX19LHsiZ2wtc2hhZGVyIjozMzUsZ2xzbGlmeToyNzZ9XSwyNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2x8fHQuc2NlbmUmJnQuc2NlbmUuZ2wscj1mKGUpO3IuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHIuYXR0cmlidXRlcy5uZXh0UG9zaXRpb24ubG9jYXRpb249MSxyLmF0dHJpYnV0ZXMuYXJjTGVuZ3RoLmxvY2F0aW9uPTIsci5hdHRyaWJ1dGVzLmxpbmVXaWR0aC5sb2NhdGlvbj0zLHIuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj00O3ZhciBvPWgoZSk7by5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsby5hdHRyaWJ1dGVzLm5leHRQb3NpdGlvbi5sb2NhdGlvbj0xLG8uYXR0cmlidXRlcy5hcmNMZW5ndGgubG9jYXRpb249MixvLmF0dHJpYnV0ZXMubGluZVdpZHRoLmxvY2F0aW9uPTMsby5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7Zm9yKHZhciBzPW4oZSksbD1pKGUsW3tidWZmZXI6cyxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MSxvZmZzZXQ6Mjgsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZTo0LG9mZnNldDozMixzdHJpZGU6NDh9XSksdT1jKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pLHA9MDtwPDEwMjQ7KytwKXUuZGF0YVtwXT0yNTU7dmFyIGQ9YShlLHUpO2Qud3JhcD1lLlJFUEVBVDt2YXIgZz1uZXcgdihlLHIsbyxzLGwsZCk7cmV0dXJuIGcudXBkYXRlKHQpLGd9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCJnbC10ZXh0dXJlMmQiKSxvPW5ldyBVaW50OEFycmF5KDQpLHM9bmV3IEZsb2F0MzJBcnJheShvLmJ1ZmZlcik7dmFyIGw9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxjPXQoIm5kYXJyYXkiKSx1PXQoIi4vbGliL3NoYWRlcnMiKSxmPXUuY3JlYXRlU2hhZGVyLGg9dS5jcmVhdGVQaWNrU2hhZGVyLHA9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9MCxuPTA7bjwzOysrbil7dmFyIGk9dFtuXS1lW25dO3IrPWkqaX1yZXR1cm4gTWF0aC5zcXJ0KHIpfWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLHI9MDtyPDM7KytyKWVbMF1bcl09TWF0aC5tYXgodFswXVtyXSxlWzBdW3JdKSxlWzFdW3JdPU1hdGgubWluKHRbMV1bcl0sZVsxXVtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbSh0LGUscixuKXt0aGlzLmFyY0xlbmd0aD10LHRoaXMucG9zaXRpb249ZSx0aGlzLmluZGV4PXIsdGhpcy5kYXRhQ29vcmRpbmF0ZT1ufWZ1bmN0aW9uIHYodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMuYnVmZmVyPW4sdGhpcy52YW89aSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5wb2ludHM9W10sdGhpcy5hcmNMZW5ndGg9W10sdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMuYm91bmRzPVtbMCwwLDBdLFswLDAsMF1dLHRoaXMucGlja0lkPTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLnRleHR1cmU9YSx0aGlzLmRhc2hTY2FsZT0xLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5kaXJ0eT0hMCx0aGlzLnBpeGVsUmF0aW89MX12YXIgeT12LnByb3RvdHlwZTt5LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0seS5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSx5LnBpY2tTbG90cz0xLHkuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0seS5kcmF3VHJhbnNwYXJlbnQ9eS5kcmF3PWZ1bmN0aW9uKHQpe2lmKHRoaXMudmVydGV4Q291bnQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fHAsdmlldzp0LnZpZXd8fHAscHJvamVjdGlvbjp0LnByb2plY3Rpb258fHAsY2xpcEJvdW5kczpnKHRoaXMuY2xpcEJvdW5kcyksZGFzaFRleHR1cmU6dGhpcy50ZXh0dXJlLmJpbmQoKSxkYXNoU2NhbGU6dGhpcy5kYXNoU2NhbGUvdGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfX0seS5kcmF3UGljaz1mdW5jdGlvbih0KXtpZih0aGlzLnZlcnRleENvdW50KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5waWNrU2hhZGVyLG49dGhpcy52YW87ci5iaW5kKCksci51bmlmb3Jtcz17bW9kZWw6dC5tb2RlbHx8cCx2aWV3OnQudmlld3x8cCxwcm9qZWN0aW9uOnQucHJvamVjdGlvbnx8cCxwaWNrSWQ6dGhpcy5waWNrSWQsY2xpcEJvdW5kczpnKHRoaXMuY2xpcEJvdW5kcyksc2NyZWVuU2hhcGU6W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99LG4uYmluZCgpLG4uZHJhdyhlLlRSSUFOR0xFX1NUUklQLHRoaXMudmVydGV4Q291bnQpLG4udW5iaW5kKCl9fSx5LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMuZGlydHk9ITA7dmFyIG49ISF0LmNvbm5lY3RHYXBzOyJkYXNoU2NhbGUiaW4gdCYmKHRoaXMuZGFzaFNjYWxlPXQuZGFzaFNjYWxlKSx0aGlzLmhhc0FscGhhPSExLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9K3Qub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKTt2YXIgaT1bXSxhPVtdLG89W10scz0wLHU9MCxmPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLGg9dC5wb3NpdGlvbnx8dC5wb3NpdGlvbnM7aWYoaCl7dmFyIHA9dC5jb2xvcnx8dC5jb2xvcnN8fFswLDAsMCwxXSxnPXQubGluZVdpZHRofHwxLG09ITE7dDpmb3IoZT0xO2U8aC5sZW5ndGg7KytlKXt2YXIgdix5LHgsYj1oW2UtMV0sXz1oW2VdO2ZvcihhLnB1c2gocyksby5wdXNoKGIuc2xpY2UoKSkscj0wO3I8MzsrK3Ipe2lmKGlzTmFOKGJbcl0pfHxpc05hTihfW3JdKXx8IWlzRmluaXRlKGJbcl0pfHwhaXNGaW5pdGUoX1tyXSkpe2lmKCFuJiZpLmxlbmd0aD4wKXtmb3IodmFyIHc9MDt3PDI0OysrdylpLnB1c2goaVtpLmxlbmd0aC0xMl0pO3UrPTIsbT0hMH1jb250aW51ZSB0fWZbMF1bcl09TWF0aC5taW4oZlswXVtyXSxiW3JdLF9bcl0pLGZbMV1bcl09TWF0aC5tYXgoZlsxXVtyXSxiW3JdLF9bcl0pfUFycmF5LmlzQXJyYXkocFswXSk/KHY9cC5sZW5ndGg+ZS0xP3BbZS0xXTpwLmxlbmd0aD4wP3BbcC5sZW5ndGgtMV06WzAsMCwwLDFdLHk9cC5sZW5ndGg+ZT9wW2VdOnAubGVuZ3RoPjA/cFtwLmxlbmd0aC0xXTpbMCwwLDAsMV0pOnY9eT1wLDM9PT12Lmxlbmd0aCYmKHY9W3ZbMF0sdlsxXSx2WzJdLDFdKSwzPT09eS5sZW5ndGgmJih5PVt5WzBdLHlbMV0seVsyXSwxXSksIXRoaXMuaGFzQWxwaGEmJnZbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApLHg9QXJyYXkuaXNBcnJheShnKT9nLmxlbmd0aD5lLTE/Z1tlLTFdOmcubGVuZ3RoPjA/Z1tnLmxlbmd0aC0xXTpbMCwwLDAsMV06Zzt2YXIgVD1zO2lmKHMrPWQoYixfKSxtKXtmb3Iocj0wO3I8MjsrK3IpaS5wdXNoKGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQseCx2WzBdLHZbMV0sdlsyXSx2WzNdKTt1Kz0yLG09ITF9aS5wdXNoKGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQseCx2WzBdLHZbMV0sdlsyXSx2WzNdLGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQsLXgsdlswXSx2WzFdLHZbMl0sdlszXSxfWzBdLF9bMV0sX1syXSxiWzBdLGJbMV0sYlsyXSxzLC14LHlbMF0seVsxXSx5WzJdLHlbM10sX1swXSxfWzFdLF9bMl0sYlswXSxiWzFdLGJbMl0scyx4LHlbMF0seVsxXSx5WzJdLHlbM10pLHUrPTR9fWlmKHRoaXMuYnVmZmVyLnVwZGF0ZShpKSxhLnB1c2gocyksby5wdXNoKGhbaC5sZW5ndGgtMV0uc2xpY2UoKSksdGhpcy5ib3VuZHM9Zix0aGlzLnZlcnRleENvdW50PXUsdGhpcy5wb2ludHM9byx0aGlzLmFyY0xlbmd0aD1hLCJkYXNoZXMiaW4gdCl7dmFyIGs9dC5kYXNoZXMuc2xpY2UoKTtmb3Ioay51bnNoaWZ0KDApLGU9MTtlPGsubGVuZ3RoOysrZSlrW2VdPWtbZS0xXStrW2VdO3ZhciBNPWMobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSk7Zm9yKGU9MDtlPDI1NjsrK2Upe2ZvcihyPTA7cjw0OysrcilNLnNldChlLDAsciwwKTsxJmwubGUoayxrW2subGVuZ3RoLTFdKmUvMjU1KT9NLnNldChlLDAsMCwwKTpNLnNldChlLDAsMCwyNTUpfXRoaXMudGV4dHVyZS5zZXRQaXhlbHMoTSl9fSx5LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX0seS5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gb1swXT1uLG9bMV09cixvWzJdPWUsb1szXT10LHNbMF19KHQudmFsdWVbMF0sdC52YWx1ZVsxXSx0LnZhbHVlWzJdLDApLHI9bC5sZSh0aGlzLmFyY0xlbmd0aCxlKTtpZihyPDApcmV0dXJuIG51bGw7aWYocj09PXRoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xKXJldHVybiBuZXcgbSh0aGlzLmFyY0xlbmd0aFt0aGlzLmFyY0xlbmd0aC5sZW5ndGgtMV0sdGhpcy5wb2ludHNbdGhpcy5wb2ludHMubGVuZ3RoLTFdLnNsaWNlKCkscik7Zm9yKHZhciBuPXRoaXMucG9pbnRzW3JdLGk9dGhpcy5wb2ludHNbTWF0aC5taW4ocisxLHRoaXMucG9pbnRzLmxlbmd0aC0xKV0sYT0oZS10aGlzLmFyY0xlbmd0aFtyXSkvKHRoaXMuYXJjTGVuZ3RoW3IrMV0tdGhpcy5hcmNMZW5ndGhbcl0pLGM9MS1hLHU9WzAsMCwwXSxmPTA7ZjwzOysrZil1W2ZdPWMqbltmXSthKmlbZl07dmFyIGg9TWF0aC5taW4oYTwuNT9yOnIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG5ldyBtKGUsdSxoLHRoaXMucG9pbnRzW2hdKX19LHsiLi9saWIvc2hhZGVycyI6Mjc0LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6OTYsImdsLWJ1ZmZlciI6MjU5LCJnbC10ZXh0dXJlMmQiOjM1MywiZ2wtdmFvIjozNTgsbmRhcnJheTo0OTV9XSwyNzY6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjU3XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjU3fV0sMjc3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxnPWVbMTNdLG09ZVsxNF0sdj1lWzE1XTtyZXR1cm4gdFswXT1zKihoKnYtcCptKS1mKihsKnYtYyptKStnKihsKnAtYypoKSx0WzFdPS0obiooaCp2LXAqbSktZiooaSp2LWEqbSkrZyooaSpwLWEqaCkpLHRbMl09bioobCp2LWMqbSktcyooaSp2LWEqbSkrZyooaSpjLWEqbCksdFszXT0tKG4qKGwqcC1jKmgpLXMqKGkqcC1hKmgpK2YqKGkqYy1hKmwpKSx0WzRdPS0obyooaCp2LXAqbSktdSoobCp2LWMqbSkrZCoobCpwLWMqaCkpLHRbNV09ciooaCp2LXAqbSktdSooaSp2LWEqbSkrZCooaSpwLWEqaCksdFs2XT0tKHIqKGwqdi1jKm0pLW8qKGkqdi1hKm0pK2QqKGkqYy1hKmwpKSx0WzddPXIqKGwqcC1jKmgpLW8qKGkqcC1hKmgpK3UqKGkqYy1hKmwpLHRbOF09byooZip2LXAqZyktdSoocyp2LWMqZykrZCoocypwLWMqZiksdFs5XT0tKHIqKGYqdi1wKmcpLXUqKG4qdi1hKmcpK2QqKG4qcC1hKmYpKSx0WzEwXT1yKihzKnYtYypnKS1vKihuKnYtYSpnKStkKihuKmMtYSpzKSx0WzExXT0tKHIqKHMqcC1jKmYpLW8qKG4qcC1hKmYpK3UqKG4qYy1hKnMpKSx0WzEyXT0tKG8qKGYqbS1oKmcpLXUqKHMqbS1sKmcpK2QqKHMqaC1sKmYpKSx0WzEzXT1yKihmKm0taCpnKS11KihuKm0taSpnKStkKihuKmgtaSpmKSx0WzE0XT0tKHIqKHMqbS1sKmcpLW8qKG4qbS1pKmcpK2QqKG4qbC1pKnMpKSx0WzE1XT1yKihzKmgtbCpmKS1vKihuKmgtaSpmKSt1KihuKmwtaSpzKSx0fX0se31dLDI3ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdLGV9fSx7fV0sMjc5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fX0se31dLDI4MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyODE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXSxhPXRbNF0sbz10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdLHU9dFs5XSxmPXRbMTBdLGg9dFsxMV0scD10WzEyXSxkPXRbMTNdLGc9dFsxNF0sbT10WzE1XTtyZXR1cm4oZSpvLXIqYSkqKGYqbS1oKmcpLShlKnMtbiphKSoodSptLWgqZCkrKGUqbC1pKmEpKih1KmctZipkKSsocipzLW4qbykqKGMqbS1oKnApLShyKmwtaSpvKSooYypnLWYqcCkrKG4qbC1pKnMpKihjKmQtdSpwKX19LHt9XSwyODI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89cityLHM9bituLGw9aStpLGM9cipvLHU9bipvLGY9bipzLGg9aSpvLHA9aSpzLGQ9aSpsLGc9YSpvLG09YSpzLHY9YSpsO3JldHVybiB0WzBdPTEtZi1kLHRbMV09dSt2LHRbMl09aC1tLHRbM109MCx0WzRdPXUtdix0WzVdPTEtYy1kLHRbNl09cCtnLHRbN109MCx0WzhdPWgrbSx0WzldPXAtZyx0WzEwXT0xLWMtZix0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyODM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPU1hdGguc3FydChvKm8rcypzK2wqbCk7aWYoTWF0aC5hYnMoYyk8MWUtNilyZXR1cm4gbnVsbDtyZXR1cm4gbyo9Yz0xL2Mscyo9YyxsKj1jLG49TWF0aC5zaW4oZSksaT1NYXRoLmNvcyhlKSxhPTEtaSx0WzBdPW8qbyphK2ksdFsxXT1zKm8qYStsKm4sdFsyXT1sKm8qYS1zKm4sdFszXT0wLHRbNF09bypzKmEtbCpuLHRbNV09cypzKmEraSx0WzZdPWwqcyphK28qbix0WzddPTAsdFs4XT1vKmwqYStzKm4sdFs5XT1zKmwqYS1vKm4sdFsxMF09bCpsKmEraSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyODQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1uK24sbD1pK2ksYz1hK2EsdT1uKnMsZj1uKmwsaD1uKmMscD1pKmwsZD1pKmMsZz1hKmMsbT1vKnMsdj1vKmwseT1vKmM7cmV0dXJuIHRbMF09MS0ocCtnKSx0WzFdPWYreSx0WzJdPWgtdix0WzNdPTAsdFs0XT1mLXksdFs1XT0xLSh1K2cpLHRbNl09ZCttLHRbN109MCx0WzhdPWgrdix0WzldPWQtbSx0WzEwXT0xLSh1K3ApLHRbMTFdPTAsdFsxMl09clswXSx0WzEzXT1yWzFdLHRbMTRdPXJbMl0sdFsxNV09MSx0fX0se31dLDI4NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09ZVsxXSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09ZVsyXSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyODY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT1lWzBdLHRbMTNdPWVbMV0sdFsxNF09ZVsyXSx0WzE1XT0xLHR9fSx7fV0sMjg3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPW4sdFs2XT1yLHRbN109MCx0WzhdPTAsdFs5XT0tcix0WzEwXT1uLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDI4ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPTAsdFsyXT0tcix0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09cix0WzldPTAsdFsxMF09bix0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyODk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPW4sdFsxXT1yLHRbMl09MCx0WzNdPTAsdFs0XT0tcix0WzVdPW4sdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjkwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKHItZSksbD0xLyhpLW4pLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0yKmEqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0yKmEqbCx0WzZdPTAsdFs3XT0wLHRbOF09KHIrZSkqcyx0WzldPShpK24pKmwsdFsxMF09KG8rYSkqYyx0WzExXT0tMSx0WzEyXT0wLHRbMTNdPTAsdFsxNF09byphKjIqYyx0WzE1XT0wLHR9fSx7fV0sMjkxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyOTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2NyZWF0ZTp0KCIuL2NyZWF0ZSIpLGNsb25lOnQoIi4vY2xvbmUiKSxjb3B5OnQoIi4vY29weSIpLGlkZW50aXR5OnQoIi4vaWRlbnRpdHkiKSx0cmFuc3Bvc2U6dCgiLi90cmFuc3Bvc2UiKSxpbnZlcnQ6dCgiLi9pbnZlcnQiKSxhZGpvaW50OnQoIi4vYWRqb2ludCIpLGRldGVybWluYW50OnQoIi4vZGV0ZXJtaW5hbnQiKSxtdWx0aXBseTp0KCIuL211bHRpcGx5IiksdHJhbnNsYXRlOnQoIi4vdHJhbnNsYXRlIiksc2NhbGU6dCgiLi9zY2FsZSIpLHJvdGF0ZTp0KCIuL3JvdGF0ZSIpLHJvdGF0ZVg6dCgiLi9yb3RhdGVYIikscm90YXRlWTp0KCIuL3JvdGF0ZVkiKSxyb3RhdGVaOnQoIi4vcm90YXRlWiIpLGZyb21Sb3RhdGlvbjp0KCIuL2Zyb21Sb3RhdGlvbiIpLGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOnQoIi4vZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iKSxmcm9tU2NhbGluZzp0KCIuL2Zyb21TY2FsaW5nIiksZnJvbVRyYW5zbGF0aW9uOnQoIi4vZnJvbVRyYW5zbGF0aW9uIiksZnJvbVhSb3RhdGlvbjp0KCIuL2Zyb21YUm90YXRpb24iKSxmcm9tWVJvdGF0aW9uOnQoIi4vZnJvbVlSb3RhdGlvbiIpLGZyb21aUm90YXRpb246dCgiLi9mcm9tWlJvdGF0aW9uIiksZnJvbVF1YXQ6dCgiLi9mcm9tUXVhdCIpLGZydXN0dW06dCgiLi9mcnVzdHVtIikscGVyc3BlY3RpdmU6dCgiLi9wZXJzcGVjdGl2ZSIpLHBlcnNwZWN0aXZlRnJvbUZpZWxkT2ZWaWV3OnQoIi4vcGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXciKSxvcnRobzp0KCIuL29ydGhvIiksbG9va0F0OnQoIi4vbG9va0F0Iiksc3RyOnQoIi4vc3RyIil9fSx7Ii4vYWRqb2ludCI6Mjc3LCIuL2Nsb25lIjoyNzgsIi4vY29weSI6Mjc5LCIuL2NyZWF0ZSI6MjgwLCIuL2RldGVybWluYW50IjoyODEsIi4vZnJvbVF1YXQiOjI4MiwiLi9mcm9tUm90YXRpb24iOjI4MywiLi9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiI6Mjg0LCIuL2Zyb21TY2FsaW5nIjoyODUsIi4vZnJvbVRyYW5zbGF0aW9uIjoyODYsIi4vZnJvbVhSb3RhdGlvbiI6Mjg3LCIuL2Zyb21ZUm90YXRpb24iOjI4OCwiLi9mcm9tWlJvdGF0aW9uIjoyODksIi4vZnJ1c3R1bSI6MjkwLCIuL2lkZW50aXR5IjoyOTEsIi4vaW52ZXJ0IjoyOTMsIi4vbG9va0F0IjoyOTQsIi4vbXVsdGlwbHkiOjI5NSwiLi9vcnRobyI6Mjk2LCIuL3BlcnNwZWN0aXZlIjoyOTcsIi4vcGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXciOjI5OCwiLi9yb3RhdGUiOjI5OSwiLi9yb3RhdGVYIjozMDAsIi4vcm90YXRlWSI6MzAxLCIuL3JvdGF0ZVoiOjMwMiwiLi9zY2FsZSI6MzAzLCIuL3N0ciI6MzA0LCIuL3RyYW5zbGF0ZSI6MzA1LCIuL3RyYW5zcG9zZSI6MzA2fV0sMjkzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxnPWVbMTNdLG09ZVsxNF0sdj1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLFQ9aSpjLWEqbCxrPXUqZy1mKmQsTT11Km0taCpkLEE9dSp2LXAqZCxTPWYqbS1oKmcsRT1mKnYtcCpnLEM9aCp2LXAqbSxMPXkqQy14KkUrYipTK18qQS13Kk0rVCprO2lmKCFMKXJldHVybiBudWxsO3JldHVybiBMPTEvTCx0WzBdPShzKkMtbCpFK2MqUykqTCx0WzFdPShpKkUtbipDLWEqUykqTCx0WzJdPShnKlQtbSp3K3YqXykqTCx0WzNdPShoKnctZipULXAqXykqTCx0WzRdPShsKkEtbypDLWMqTSkqTCx0WzVdPShyKkMtaSpBK2EqTSkqTCx0WzZdPShtKmItZCpULXYqeCkqTCx0WzddPSh1KlQtaCpiK3AqeCkqTCx0WzhdPShvKkUtcypBK2MqaykqTCx0WzldPShuKkEtcipFLWEqaykqTCx0WzEwXT0oZCp3LWcqYit2KnkpKkwsdFsxMV09KGYqYi11KnctcCp5KSpMLHRbMTJdPShzKk0tbypTLWwqaykqTCx0WzEzXT0ocipTLW4qTStpKmspKkwsdFsxNF09KGcqeC1kKl8tbSp5KSpMLHRbMTVdPSh1Kl8tZip4K2gqeSkqTCx0fX0se31dLDI5NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGwsYyx1LGYsaCxwLGQsZz1lWzBdLG09ZVsxXSx2PWVbMl0seT1pWzBdLHg9aVsxXSxiPWlbMl0sXz1yWzBdLHc9clsxXSxUPXJbMl07aWYoTWF0aC5hYnMoZy1fKTwxZS02JiZNYXRoLmFicyhtLXcpPDFlLTYmJk1hdGguYWJzKHYtVCk8MWUtNilyZXR1cm4gbih0KTtmPWctXyxoPW0tdyxwPXYtVCxkPTEvTWF0aC5zcXJ0KGYqZitoKmgrcCpwKSxhPXgqKHAqPWQpLWIqKGgqPWQpLG89YiooZio9ZCkteSpwLHM9eSpoLXgqZiwoZD1NYXRoLnNxcnQoYSphK28qbytzKnMpKT8oYSo9ZD0xL2Qsbyo9ZCxzKj1kKTooYT0wLG89MCxzPTApO2w9aCpzLXAqbyxjPXAqYS1mKnMsdT1mKm8taCphLChkPU1hdGguc3FydChsKmwrYypjK3UqdSkpPyhsKj1kPTEvZCxjKj1kLHUqPWQpOihsPTAsYz0wLHU9MCk7cmV0dXJuIHRbMF09YSx0WzFdPWwsdFsyXT1mLHRbM109MCx0WzRdPW8sdFs1XT1jLHRbNl09aCx0WzddPTAsdFs4XT1zLHRbOV09dSx0WzEwXT1wLHRbMTFdPTAsdFsxMl09LShhKmcrbyptK3MqdiksdFsxM109LShsKmcrYyptK3UqdiksdFsxNF09LShmKmcraCptK3AqdiksdFsxNV09MSx0fX0seyIuL2lkZW50aXR5IjoyOTF9XSwyOTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0scD1lWzEwXSxkPWVbMTFdLGc9ZVsxMl0sbT1lWzEzXSx2PWVbMTRdLHk9ZVsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPXgqbitiKnMrXypmK3cqZyx0WzFdPXgqaStiKmwrXypoK3cqbSx0WzJdPXgqYStiKmMrXypwK3cqdix0WzNdPXgqbytiKnUrXypkK3cqeSx4PXJbNF0sYj1yWzVdLF89cls2XSx3PXJbN10sdFs0XT14Km4rYipzK18qZit3KmcsdFs1XT14KmkrYipsK18qaCt3Km0sdFs2XT14KmErYipjK18qcCt3KnYsdFs3XT14Km8rYip1K18qZCt3KnkseD1yWzhdLGI9cls5XSxfPXJbMTBdLHc9clsxMV0sdFs4XT14Km4rYipzK18qZit3KmcsdFs5XT14KmkrYipsK18qaCt3Km0sdFsxMF09eCphK2IqYytfKnArdyp2LHRbMTFdPXgqbytiKnUrXypkK3cqeSx4PXJbMTJdLGI9clsxM10sXz1yWzE0XSx3PXJbMTVdLHRbMTJdPXgqbitiKnMrXypmK3cqZyx0WzEzXT14KmkrYipsK18qaCt3Km0sdFsxNF09eCphK2IqYytfKnArdyp2LHRbMTVdPXgqbytiKnUrXypkK3cqeSx0fX0se31dLDI5NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0xLyhlLXIpLGw9MS8obi1pKSxjPTEvKGEtbyk7cmV0dXJuIHRbMF09LTIqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0tMipsLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0yKmMsdFsxMV09MCx0WzEyXT0oZStyKSpzLHRbMTNdPShpK24pKmwsdFsxNF09KG8rYSkqYyx0WzE1XT0xLHR9fSx7fV0sMjk3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9MS9NYXRoLnRhbihlLzIpLG89MS8obi1pKTtyZXR1cm4gdFswXT1hL3IsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09YSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09KGkrbikqbyx0WzExXT0tMSx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MippKm4qbyx0WzE1XT0wLHR9fSx7fV0sMjk4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPU1hdGgudGFuKGUudXBEZWdyZWVzKk1hdGguUEkvMTgwKSxhPU1hdGgudGFuKGUuZG93bkRlZ3JlZXMqTWF0aC5QSS8xODApLG89TWF0aC50YW4oZS5sZWZ0RGVncmVlcypNYXRoLlBJLzE4MCkscz1NYXRoLnRhbihlLnJpZ2h0RGVncmVlcypNYXRoLlBJLzE4MCksbD0yLyhvK3MpLGM9Mi8oaSthKTtyZXR1cm4gdFswXT1sLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWMsdFs2XT0wLHRbN109MCx0WzhdPS0oby1zKSpsKi41LHRbOV09KGktYSkqYyouNSx0WzEwXT1uLyhyLW4pLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT1uKnIvKHItbiksdFsxNV09MCx0fX0se31dLDI5OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscCxkLGcsbSx2LHkseCxiLF8sdyxULGssTSxBLFMsRT1uWzBdLEM9blsxXSxMPW5bMl0sST1NYXRoLnNxcnQoRSpFK0MqQytMKkwpO2lmKE1hdGguYWJzKEkpPDFlLTYpcmV0dXJuIG51bGw7RSo9ST0xL0ksQyo9SSxMKj1JLGk9TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxvPTEtYSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PWVbM10sZj1lWzRdLGg9ZVs1XSxwPWVbNl0sZD1lWzddLGc9ZVs4XSxtPWVbOV0sdj1lWzEwXSx5PWVbMTFdLHg9RSpFKm8rYSxiPUMqRSpvK0wqaSxfPUwqRSpvLUMqaSx3PUUqQypvLUwqaSxUPUMqQypvK2Esaz1MKkMqbytFKmksTT1FKkwqbytDKmksQT1DKkwqby1FKmksUz1MKkwqbythLHRbMF09cyp4K2YqYitnKl8sdFsxXT1sKngraCpiK20qXyx0WzJdPWMqeCtwKmIrdipfLHRbM109dSp4K2QqYit5Kl8sdFs0XT1zKncrZipUK2cqayx0WzVdPWwqdytoKlQrbSprLHRbNl09Yyp3K3AqVCt2KmssdFs3XT11KncrZCpUK3kqayx0WzhdPXMqTStmKkErZypTLHRbOV09bCpNK2gqQSttKlMsdFsxMF09YypNK3AqQSt2KlMsdFsxMV09dSpNK2QqQSt5KlMsZSE9PXQmJih0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHR9fSx7fV0sMzAwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0saD1lWzExXTtlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkrZipuLHRbN109bCppK2gqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWYqaS1zKm4sdFsxMV09aCppLWwqbix0fX0se31dLDMwMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzhdLHU9ZVs5XSxmPWVbMTBdLGg9ZVsxMV07ZSE9PXQmJih0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaS1jKm4sdFsxXT1vKmktdSpuLHRbMl09cyppLWYqbix0WzNdPWwqaS1oKm4sdFs4XT1hKm4rYyppLHRbOV09bypuK3UqaSx0WzEwXT1zKm4rZippLHRbMTFdPWwqbitoKmksdH19LHt9XSwzMDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs0XSx1PWVbNV0sZj1lWzZdLGg9ZVs3XTtlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaStjKm4sdFsxXT1vKmkrdSpuLHRbMl09cyppK2Yqbix0WzNdPWwqaStoKm4sdFs0XT1jKmktYSpuLHRbNV09dSppLW8qbix0WzZdPWYqaS1zKm4sdFs3XT1oKmktbCpuLHR9fSx7fV0sMzAzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXSxhPXJbMl07cmV0dXJuIHRbMF09ZVswXSpuLHRbMV09ZVsxXSpuLHRbMl09ZVsyXSpuLHRbM109ZVszXSpuLHRbNF09ZVs0XSppLHRbNV09ZVs1XSppLHRbNl09ZVs2XSppLHRbN109ZVs3XSppLHRbOF09ZVs4XSphLHRbOV09ZVs5XSphLHRbMTBdPWVbMTBdKmEsdFsxMV09ZVsxMV0qYSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fX0se31dLDMwNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ibWF0NCgiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiLCAiK3RbM10rIiwgIit0WzRdKyIsICIrdFs1XSsiLCAiK3RbNl0rIiwgIit0WzddKyIsICIrdFs4XSsiLCAiK3RbOV0rIiwgIit0WzEwXSsiLCAiK3RbMTFdKyIsICIrdFsxMl0rIiwgIit0WzEzXSsiLCAiK3RbMTRdKyIsICIrdFsxNV0rIikifX0se31dLDMwNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxmLGgscCxkLGc9clswXSxtPXJbMV0sdj1yWzJdO2U9PT10Pyh0WzEyXT1lWzBdKmcrZVs0XSptK2VbOF0qditlWzEyXSx0WzEzXT1lWzFdKmcrZVs1XSptK2VbOV0qditlWzEzXSx0WzE0XT1lWzJdKmcrZVs2XSptK2VbMTBdKnYrZVsxNF0sdFsxNV09ZVszXSpnK2VbN10qbStlWzExXSp2K2VbMTVdKToobj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSx0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWMsdFs3XT11LHRbOF09Zix0WzldPWgsdFsxMF09cCx0WzExXT1kLHRbMTJdPW4qZytzKm0rZip2K2VbMTJdLHRbMTNdPWkqZytsKm0raCp2K2VbMTNdLHRbMTRdPWEqZytjKm0rcCp2K2VbMTRdLHRbMTVdPW8qZyt1Km0rZCp2K2VbMTVdKTtyZXR1cm4gdH19LHt9XSwzMDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXSxuPWVbMl0saT1lWzNdLGE9ZVs2XSxvPWVbN10scz1lWzExXTt0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1yLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09bix0WzldPWEsdFsxMV09ZVsxNF0sdFsxMl09aSx0WzEzXT1vLHRbMTRdPXN9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09ZVsxXSx0WzVdPWVbNV0sdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1lWzJdLHRbOV09ZVs2XSx0WzEwXT1lWzEwXSx0WzExXT1lWzE0XSx0WzEyXT1lWzNdLHRbMTNdPWVbN10sdFsxNF09ZVsxMV0sdFsxNV09ZVsxNV07cmV0dXJuIHR9fSx7fV0sMzA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJhcnljZW50cmljIiksaT10KCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzIik7ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1bMCwwLDAsMF0sbj0wO248NDsrK24pZm9yKHZhciBpPTA7aTw0OysraSlyW2ldKz10WzQqbitpXSplW25dO3JldHVybiByfWZ1bmN0aW9uIG8odCxlLHIsbixpKXtmb3IodmFyIG89YShuLGEocixhKGUsW3RbMF0sdFsxXSx0WzJdLDFdKSkpLHM9MDtzPDM7KytzKW9bc10vPW9bM107cmV0dXJuWy41KmlbMF0qKDErb1swXSksLjUqaVsxXSooMS1vWzFdKV19ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj1bMCwwLDBdLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXSxhPWVbbl0sbz0wO288MzsrK28pcltvXSs9YSppW29dO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGwsYyl7aWYoMT09PXQubGVuZ3RoKXJldHVyblswLHRbMF0uc2xpY2UoKV07Zm9yKHZhciB1PW5ldyBBcnJheSh0Lmxlbmd0aCksZj0wO2Y8dC5sZW5ndGg7KytmKXVbZl09byh0W2ZdLHIsYSxsLGMpO3ZhciBoPTAscD0xLzA7Zm9yKGY9MDtmPHUubGVuZ3RoOysrZil7Zm9yKHZhciBkPTAsZz0wO2c8MjsrK2cpZCs9TWF0aC5wb3codVtmXVtnXS1lW2ddLDIpO2Q8cCYmKHA9ZCxoPWYpfXZhciBtPWZ1bmN0aW9uKHQsZSl7aWYoMj09PXQubGVuZ3RoKXtmb3IodmFyIHI9MCxhPTAsbz0wO288MjsrK28pcis9TWF0aC5wb3coZVtvXS10WzBdW29dLDIpLGErPU1hdGgucG93KGVbb10tdFsxXVtvXSwyKTtyZXR1cm4gcj1NYXRoLnNxcnQociksYT1NYXRoLnNxcnQoYSkscithPDFlLTY/WzEsMF06W2EvKHIrYSksci8oYStyKV19aWYoMz09PXQubGVuZ3RoKXt2YXIgcz1bMCwwXTtyZXR1cm4gaSh0WzBdLHRbMV0sdFsyXSxlLHMpLG4odCxzKX1yZXR1cm5bXX0odSxlKSx2PTA7Zm9yKGY9MDtmPDM7KytmKXtpZihtW2ZdPC0uMDAxfHxtW2ZdPjEuMDAwMSlyZXR1cm4gbnVsbDt2Kz1tW2ZdfWlmKE1hdGguYWJzKHYtMSk+LjAwMSlyZXR1cm4gbnVsbDtyZXR1cm5baCxzKHQsbSksbV19fSx7YmFyeWNlbnRyaWM6NzgsInBvbHl0b3BlLWNsb3Nlc3QtcG9pbnQvbGliL2Nsb3Nlc3RfcG9pbnRfMmQuanMiOjUyNX1dLDMwODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbm9ybWFsO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBtYXQ0IG1vZGVsXG4gICAgICAgICAgICwgdmlld1xuICAgICAgICAgICAsIHByb2plY3Rpb25cbiAgICAgICAgICAgLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb25cbiAgICAgICAgICAgLCBsaWdodFBvc2l0aW9uO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2RhdGE7XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52ZWM0IHByb2plY3QodmVjMyBwKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0KHBvc2l0aW9uKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHZlYzQocG9zaXRpb24gLCAxLjApO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX25vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLCAwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xuXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9kYXRhICAgICAgICAgICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59XG4iXSksYT1uKFsiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcyxcbiAgZmxvYXQgZnJlc25lbCkge1xuXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcblxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xuXG4gIC8vR2VvbWV0cmljIHRlcm1cbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xuICBcbiAgLy9EaXN0cmlidXRpb24gdGVybVxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuLy8jcHJhZ21hIGdsc2xpZnk6IGJlY2ttYW5uID0gcmVxdWlyZShnbHNsLXNwZWN1bGFyLWJlY2ttYW5uKSAvLyB1c2VkIGluIGdsLXN1cmZhY2UzZFxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzc1xuICAgICAgICAgICAgLCBmcmVzbmVsXG4gICAgICAgICAgICAsIGthbWJpZW50XG4gICAgICAgICAgICAsIGtkaWZmdXNlXG4gICAgICAgICAgICAsIGtzcGVjdWxhcjtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKGZfY29sb3IuYSA9PSAwLjAgfHxcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSlcbiAgKSBkaXNjYXJkO1xuXG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICAvL2Zsb2F0IHNwZWN1bGFyID0gbWF4KDAuMCwgYmVja21hbm4oTCwgViwgTiwgcm91Z2huZXNzKSk7IC8vIHVzZWQgaW4gZ2wtc3VyZmFjZTNkXG5cbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSB2ZWM0KGZfY29sb3IucmdiLCAxLjApICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBmX2NvbG9yLmE7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIGZfY29sb3IgPSBjb2xvcjtcbiAgZl9kYXRhICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgID0gdXY7XG59Il0pLHM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSkpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KSAqIG9wYWNpdHk7XG59Il0pLGw9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCAsMC4wICwwLjApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIH1cbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICBmX2NvbG9yID0gY29sb3I7XG4gIGZfdXYgPSB1djtcbn0iXSksYz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvaW50UiA9IGdsX1BvaW50Q29vcmQueHkgLSB2ZWMyKDAuNSwgMC41KTtcbiAgaWYoZG90KHBvaW50UiwgcG9pbnRSKSA+IDAuMjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSJdKSx1PW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbjtcbn0iXSksZj1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pLGg9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyAgcG9zaXRpb247XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuYXR0cmlidXRlIHZlYzQgIGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgfVxuICBmX2lkICAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgID0gcG9zaXRpb247XG59Il0pLHA9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbn0iXSksZD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzIGNvbnRvdXJDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbnRvdXJDb2xvciwgMS4wKTtcbn1cbiJdKTtyLm1lc2hTaGFkZXI9e3ZlcnRleDppLGZyYWdtZW50OmEsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci53aXJlU2hhZGVyPXt2ZXJ0ZXg6byxmcmFnbWVudDpzLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci5wb2ludFNoYWRlcj17dmVydGV4OmwsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToicG9pbnRTaXplIix0eXBlOiJmbG9hdCJ9XX0sci5waWNrU2hhZGVyPXt2ZXJ0ZXg6dSxmcmFnbWVudDpmLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XX0sci5wb2ludFBpY2tTaGFkZXI9e3ZlcnRleDpoLGZyYWdtZW50OmYsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6InBvaW50U2l6ZSIsdHlwZToiZmxvYXQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV19LHIuY29udG91clNoYWRlcj17dmVydGV4OnAsZnJhZ21lbnQ6ZCxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV19fSx7Z2xzbGlmeTozMTB9XSwzMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJub3JtYWxzIiksbD10KCJnbC1tYXQ0L211bHRpcGx5IiksYz10KCJnbC1tYXQ0L2ludmVydCIpLHU9dCgibmRhcnJheSIpLGY9dCgiY29sb3JtYXAiKSxoPXQoInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIikscD10KCJ0eXBlZGFycmF5LXBvb2wiKSxkPXQoIi4vbGliL3NoYWRlcnMiKSxnPXQoIi4vbGliL2Nsb3Nlc3QtcG9pbnQiKSxtPWQubWVzaFNoYWRlcix2PWQud2lyZVNoYWRlcix5PWQucG9pbnRTaGFkZXIseD1kLnBpY2tTaGFkZXIsYj1kLnBvaW50UGlja1NoYWRlcixfPWQuY29udG91clNoYWRlcix3PVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBUKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLGcsbSx2LHkseCxiLF8sVCxrLE0sQSxTKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5saW5lU2hhZGVyPW4sdGhpcy5wb2ludFNoYWRlcj1pLHRoaXMucGlja1NoYWRlcj1hLHRoaXMucG9pbnRQaWNrU2hhZGVyPW8sdGhpcy5jb250b3VyU2hhZGVyPXMsdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1sLHRoaXMudHJpYW5nbGVDb2xvcnM9dSx0aGlzLnRyaWFuZ2xlTm9ybWFscz1oLHRoaXMudHJpYW5nbGVVVnM9Zix0aGlzLnRyaWFuZ2xlSWRzPWMsdGhpcy50cmlhbmdsZVZBTz1wLHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWQsdGhpcy5lZGdlQ29sb3JzPW0sdGhpcy5lZGdlVVZzPXYsdGhpcy5lZGdlSWRzPWcsdGhpcy5lZGdlVkFPPXksdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPXgsdGhpcy5wb2ludENvbG9ycz1fLHRoaXMucG9pbnRVVnM9VCx0aGlzLnBvaW50U2l6ZXM9ayx0aGlzLnBvaW50SWRzPWIsdGhpcy5wb2ludFZBTz1NLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1BLHRoaXMuY29udG91clZBTz1TLHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITAsdGhpcy5waWNrVmVydGV4PSEwLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5vcGFjaXR5c2NhbGU9ITEsdGhpcy5fbW9kZWw9dyx0aGlzLl92aWV3PXcsdGhpcy5fcHJvamVjdGlvbj13LHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIGs9VC5wcm90b3R5cGU7ZnVuY3Rpb24gTSh0LGUpe2lmKCFlKXJldHVybiAxO2lmKCFlLmxlbmd0aClyZXR1cm4gMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil7aWYoZS5sZW5ndGg8MilyZXR1cm4gMTtpZihlW3JdWzBdPT09dClyZXR1cm4gZVtyXVsxXTtpZihlW3JdWzBdPnQmJnI+MCl7dmFyIG49KGVbcl1bMF0tdCkvKGVbcl1bMF0tZVtyLTFdWzBdKTtyZXR1cm4gZVtyXVsxXSooMS1uKStuKmVbci0xXVsxXX19cmV0dXJuIDF9ZnVuY3Rpb24gQSh0KXt2YXIgZT1uKHQsbS52ZXJ0ZXgsbS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249NCxlfWZ1bmN0aW9uIFModCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlfWZ1bmN0aW9uIEUodCl7dmFyIGU9bih0LHkudmVydGV4LHkuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBDKHQpe3ZhciBlPW4odCx4LnZlcnRleCx4LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZX1mdW5jdGlvbiBMKHQpe3ZhciBlPW4odCxiLnZlcnRleCxiLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gSSh0KXt2YXIgZT1uKHQsXy52ZXJ0ZXgsXy5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGV9ay5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSxrLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0say5waWNrU2xvdHM9MSxrLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LGsuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQmJnRoaXMuY29udG91ckVuYWJsZSl7Zm9yKHZhciBlPWgodGhpcy5jZWxscyx0aGlzLmludGVuc2l0eSx0LmludGVuc2l0eSkscj1lLmNlbGxzLG49ZS52ZXJ0ZXhJZHMsaT1lLnZlcnRleFdlaWdodHMsYT1yLmxlbmd0aCxvPXAubWFsbG9jRmxvYXQzMig2KmEpLHM9MCxsPTA7bDxhOysrbClmb3IodmFyIGM9cltsXSx1PTA7dTwyOysrdSl7dmFyIGY9Y1swXTsyPT09Yy5sZW5ndGgmJihmPWNbdV0pO2Zvcih2YXIgZD1uW2ZdWzBdLGc9bltmXVsxXSxtPWlbZl0sdj0xLW0seT10aGlzLnBvc2l0aW9uc1tkXSx4PXRoaXMucG9zaXRpb25zW2ddLGI9MDtiPDM7KytiKW9bcysrXT1tKnlbYl0rdip4W2JdfXRoaXMuY29udG91ckNvdW50PXMvM3wwLHRoaXMuY29udG91clBvc2l0aW9ucy51cGRhdGUoby5zdWJhcnJheSgwLHMpKSxwLmZyZWUobyl9ZWxzZSB0aGlzLmNvbnRvdXJDb3VudD0wfSxrLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5kaXJ0eT0hMCwiY29udG91ckVuYWJsZSJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwibGlnaHRQb3NpdGlvbiJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksdGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKSwib3BhY2l0eXNjYWxlImluIHQmJih0aGlzLm9wYWNpdHlzY2FsZT10Lm9wYWNpdHlzY2FsZSx0aGlzLmhhc0FscGhhPSEwKSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9Zih7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSksbj1uZXcgVWludDhBcnJheSgxMDI0KSxpPTA7aTwyNTY7KytpKXtmb3IodmFyIGE9cltpXSxvPTA7bzwzOysrbyluWzQqaStvXT1hW29dO25bNCppKzNdPWU/MjU1Kk0oaS8yNTUsZSk6MjU1KmFbM119cmV0dXJuIHUobixbMjU2LDI1Niw0XSxbNCwwLDFdKX0odC5jb2xvcm1hcCx0aGlzLm9wYWNpdHlzY2FsZSkpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcCgpKTt2YXIgcj10LmNlbGxzLG49dC5wb3NpdGlvbnM7aWYobiYmcil7dmFyIGk9W10sYT1bXSxsPVtdLGM9W10saD1bXSxwPVtdLGQ9W10sZz1bXSxtPVtdLHY9W10seT1bXSx4PVtdLGI9W10sXz1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bjt2YXIgdz10LnZlcnRleE5vcm1hbHMsVD10LmNlbGxOb3JtYWxzLGs9dm9pZCAwPT09dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbj8xZS02OnQudmVydGV4Tm9ybWFsc0Vwc2lsb24sQT12b2lkIDA9PT10LmZhY2VOb3JtYWxzRXBzaWxvbj8xZS02OnQuZmFjZU5vcm1hbHNFcHNpbG9uO3QudXNlRmFjZXROb3JtYWxzJiYhVCYmKFQ9cy5mYWNlTm9ybWFscyhyLG4sQSkpLFR8fHd8fCh3PXMudmVydGV4Tm9ybWFscyhyLG4saykpO3ZhciBTPXQudmVydGV4Q29sb3JzLEU9dC5jZWxsQ29sb3JzLEM9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSxMPXQudmVydGV4VVZzLEk9dC52ZXJ0ZXhJbnRlbnNpdHksUD10LmNlbGxVVnMsej10LmNlbGxJbnRlbnNpdHksTz0xLzAsRD0tMS8wO2lmKCFMJiYhUClpZihJKWlmKHQudmVydGV4SW50ZW5zaXR5Qm91bmRzKU89K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzBdLEQ9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKHZhciBSPTA7UjxJLmxlbmd0aDsrK1Ipe3ZhciBGPUlbUl07Tz1NYXRoLm1pbihPLEYpLEQ9TWF0aC5tYXgoRCxGKX1lbHNlIGlmKHopaWYodC5jZWxsSW50ZW5zaXR5Qm91bmRzKU89K3QuY2VsbEludGVuc2l0eUJvdW5kc1swXSxEPSt0LmNlbGxJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IoUj0wO1I8ei5sZW5ndGg7KytSKXtGPXpbUl07Tz1NYXRoLm1pbihPLEYpLEQ9TWF0aC5tYXgoRCxGKX1lbHNlIGZvcihSPTA7UjxuLmxlbmd0aDsrK1Ipe0Y9bltSXVsyXTtPPU1hdGgubWluKE8sRiksRD1NYXRoLm1heChELEYpfXRoaXMuaW50ZW5zaXR5PUl8fCh6fHxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dWzJdO3JldHVybiByfShuKSksdGhpcy5waWNrVmVydGV4PSEoenx8RSk7dmFyIEI9dC5wb2ludFNpemVzLE49dC5wb2ludFNpemV8fDE7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKFI9MDtSPG4ubGVuZ3RoOysrUilmb3IodmFyIGo9bltSXSxVPTA7VTwzOysrVSkhaXNOYU4oaltVXSkmJmlzRmluaXRlKGpbVV0pJiYodGhpcy5ib3VuZHNbMF1bVV09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1bVV0saltVXSksdGhpcy5ib3VuZHNbMV1bVV09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1bVV0saltVXSkpO3ZhciBWPTAscT0wLEg9MDt0OmZvcihSPTA7UjxyLmxlbmd0aDsrK1Ipe3ZhciBHPXJbUl07c3dpdGNoKEcubGVuZ3RoKXtjYXNlIDE6Zm9yKGo9bltXPUdbMF1dLFU9MDtVPDM7KytVKWlmKGlzTmFOKGpbVV0pfHwhaXNGaW5pdGUoaltVXSkpY29udGludWUgdDt2LnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpDLHRoaXMub3BhY2l0eXNjYWxlJiZJP2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqTSgoSVtXXS1PKS8oRC1PKSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD95LnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooeS5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSxYWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksWj1MP0xbV106ST9bKElbV10tTykvKEQtTyksMF06UD9QW1JdOno/Wyh6W1JdLU8pLyhELU8pLDBdOlsoalsyXS1PKS8oRC1PKSwwXSx4LnB1c2goWlswXSxaWzFdKSxCP2IucHVzaChCW1ddKTpiLnB1c2goTiksXy5wdXNoKFIpLEgrPTE7YnJlYWs7Y2FzZSAyOmZvcihVPTA7VTwyOysrVSl7aj1uW1c9R1tVXV07Zm9yKHZhciBZPTA7WTwzOysrWSlpZihpc05hTihqW1ldKXx8IWlzRmluaXRlKGpbWV0pKWNvbnRpbnVlIHR9Zm9yKFU9MDtVPDI7KytVKXtqPW5bVz1HW1VdXTtwLnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpDLHRoaXMub3BhY2l0eXNjYWxlJiZJP2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqTSgoSVtXXS1PKS8oRC1PKSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD9kLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooZC5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSxYWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksWj1MP0xbV106ST9bKElbV10tTykvKEQtTyksMF06UD9QW1JdOno/Wyh6W1JdLU8pLyhELU8pLDBdOlsoalsyXS1PKS8oRC1PKSwwXSxnLnB1c2goWlswXSxaWzFdKSxtLnB1c2goUil9cSs9MTticmVhaztjYXNlIDM6Zm9yKFU9MDtVPDM7KytVKWZvcihqPW5bVz1HW1VdXSxZPTA7WTwzOysrWSlpZihpc05hTihqW1ldKXx8IWlzRmluaXRlKGpbWV0pKWNvbnRpbnVlIHQ7Zm9yKFU9MDtVPDM7KytVKXt2YXIgVyxYLFosSjtqPW5bVz1HWzItVV1dO2kucHVzaChqWzBdLGpbMV0salsyXSksKFg9Uz9TW1ddOkU/RVtSXTpDKT90aGlzLm9wYWNpdHlzY2FsZSYmST9hLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5Kk0oKElbV10tTykvKEQtTyksdGhpcy5vcGFjaXR5c2NhbGUpKTozPT09WC5sZW5ndGg/YS5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSk6KGEucHVzaChYWzBdLFhbMV0sWFsyXSxYWzNdKnRoaXMub3BhY2l0eSksWFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpOmEucHVzaCguNSwuNSwuNSwxKSxaPUw/TFtXXTpJP1soSVtXXS1PKS8oRC1PKSwwXTpQP1BbUl06ej9bKHpbUl0tTykvKEQtTyksMF06WyhqWzJdLU8pLyhELU8pLDBdLGMucHVzaChaWzBdLFpbMV0pLEo9dz93W1ddOlRbUl0sbC5wdXNoKEpbMF0sSlsxXSxKWzJdKSxoLnB1c2goUil9Vis9MX19dGhpcy5wb2ludENvdW50PUgsdGhpcy5lZGdlQ291bnQ9cSx0aGlzLnRyaWFuZ2xlQ291bnQ9Vix0aGlzLnBvaW50UG9zaXRpb25zLnVwZGF0ZSh2KSx0aGlzLnBvaW50Q29sb3JzLnVwZGF0ZSh5KSx0aGlzLnBvaW50VVZzLnVwZGF0ZSh4KSx0aGlzLnBvaW50U2l6ZXMudXBkYXRlKGIpLHRoaXMucG9pbnRJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShfKSksdGhpcy5lZGdlUG9zaXRpb25zLnVwZGF0ZShwKSx0aGlzLmVkZ2VDb2xvcnMudXBkYXRlKGQpLHRoaXMuZWRnZVVWcy51cGRhdGUoZyksdGhpcy5lZGdlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkobSkpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMudXBkYXRlKGkpLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKGEpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKGMpLHRoaXMudHJpYW5nbGVOb3JtYWxzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaCkpfX0say5kcmF3VHJhbnNwYXJlbnQ9ay5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6dy5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxjb250b3VyQ29sb3I6dGhpcy5jb250b3VyQ29sb3IsdGV4dHVyZTowfTtzLmludmVyc2VNb2RlbD1jKHMuaW52ZXJzZU1vZGVsLHMubW9kZWwpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy50ZXh0dXJlLmJpbmQoMCk7dmFyIHU9bmV3IEFycmF5KDE2KTtsKHUscy52aWV3LHMubW9kZWwpLGwodSxzLnByb2plY3Rpb24sdSksYyh1LHUpO2ZvcihvPTA7bzwzOysrbylzLmV5ZVBvc2l0aW9uW29dPXVbMTIrb10vdVsxNV07dmFyIGYsaD11WzE1XTtmb3Iobz0wO288MzsrK28paCs9dGhpcy5saWdodFBvc2l0aW9uW29dKnVbNCpvKzNdO2ZvcihvPTA7bzwzOysrbyl7Zm9yKHZhciBwPXVbMTIrb10sZD0wO2Q8MzsrK2QpcCs9dVs0KmQrb10qdGhpcy5saWdodFBvc2l0aW9uW2RdO3MubGlnaHRQb3NpdGlvbltvXT1wL2h9dGhpcy50cmlhbmdsZUNvdW50PjAmJigoZj10aGlzLnRyaVNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSk7dGhpcy5lZGdlQ291bnQ+MCYmdGhpcy5saW5lV2lkdGg+MCYmKChmPXRoaXMubGluZVNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKnRoaXMucGl4ZWxSYXRpbyksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpO3RoaXMucG9pbnRDb3VudD4wJiYoKGY9dGhpcy5wb2ludFNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLnBvaW50VkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLHRoaXMucG9pbnRWQU8udW5iaW5kKCkpO3RoaXMuY29udG91ckVuYWJsZSYmdGhpcy5jb250b3VyQ291bnQ+MCYmdGhpcy5jb250b3VyTGluZVdpZHRoPjAmJigoZj10aGlzLmNvbnRvdXJTaGFkZXIpLmJpbmQoKSxmLnVuaWZvcm1zPXMsdGhpcy5jb250b3VyVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLHRoaXMuY29udG91ckNvdW50KSx0aGlzLmNvbnRvdXJWQU8udW5iaW5kKCkpfSxrLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHMsbD17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fTsoKHM9dGhpcy5waWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMudHJpYW5nbGVDb3VudD4wJiYodGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpLHRoaXMuZWRnZUNvdW50PjAmJih0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKnRoaXMucGl4ZWxSYXRpbyksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpLHRoaXMucG9pbnRDb3VudD4wKSYmKChzPXRoaXMucG9pbnRQaWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSl9LGsucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7Zm9yKHZhciBlPXQudmFsdWVbMF0rMjU2KnQudmFsdWVbMV0rNjU1MzYqdC52YWx1ZVsyXSxyPXRoaXMuY2VsbHNbZV0sbj10aGlzLnBvc2l0aW9ucyxpPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKWlbYV09bltyW2FdXTt2YXIgbz10LmNvb3JkWzBdLHM9dC5jb29yZFsxXTtpZighdGhpcy5waWNrVmVydGV4KXt2YXIgbD10aGlzLnBvc2l0aW9uc1tyWzBdXSxjPXRoaXMucG9zaXRpb25zW3JbMV1dLHU9dGhpcy5wb3NpdGlvbnNbclsyXV0sZj1bKGxbMF0rY1swXSt1WzBdKS8zLChsWzFdK2NbMV0rdVsxXSkvMywobFsyXStjWzJdK3VbMl0pLzNdO3JldHVybntfY2VsbENlbnRlcjohMCxwb3NpdGlvbjpbbyxzXSxpbmRleDplLGNlbGw6cixjZWxsSWQ6ZSxpbnRlbnNpdHk6dGhpcy5pbnRlbnNpdHlbZV0sZGF0YUNvb3JkaW5hdGU6Zn19dmFyIGg9ZyhpLFtvKnRoaXMucGl4ZWxSYXRpbyx0aGlzLl9yZXNvbHV0aW9uWzFdLXMqdGhpcy5waXhlbFJhdGlvXSx0aGlzLl9tb2RlbCx0aGlzLl92aWV3LHRoaXMuX3Byb2plY3Rpb24sdGhpcy5fcmVzb2x1dGlvbik7aWYoIWgpcmV0dXJuIG51bGw7dmFyIHA9aFsyXSxkPTA7Zm9yKGE9MDthPHIubGVuZ3RoOysrYSlkKz1wW2FdKnRoaXMuaW50ZW5zaXR5W3JbYV1dO3JldHVybntwb3NpdGlvbjpoWzFdLGluZGV4OnJbaFswXV0sY2VsbDpyLGNlbGxJZDplLGludGVuc2l0eTpkLGRhdGFDb29yZGluYXRlOnRoaXMucG9zaXRpb25zW3JbaFswXV1dfX0say5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5saW5lU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRQaWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVVZzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUlkcy5kaXNwb3NlKCksdGhpcy5lZGdlVkFPLmRpc3Bvc2UoKSx0aGlzLmVkZ2VQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuZWRnZUNvbG9ycy5kaXNwb3NlKCksdGhpcy5lZGdlVVZzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VJZHMuZGlzcG9zZSgpLHRoaXMucG9pbnRWQU8uZGlzcG9zZSgpLHRoaXMucG9pbnRQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMucG9pbnRDb2xvcnMuZGlzcG9zZSgpLHRoaXMucG9pbnRVVnMuZGlzcG9zZSgpLHRoaXMucG9pbnRTaXplcy5kaXNwb3NlKCksdGhpcy5wb2ludElkcy5kaXNwb3NlKCksdGhpcy5jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuY29udG91clNoYWRlci5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIHI9dC5nZXRFeHRlbnNpb24oIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpO2lmKCFyKXRocm93IG5ldyBFcnJvcigiZGVyaXZhdGl2ZXMgbm90IHN1cHBvcnRlZCIpO3ZhciBuPUEodCkscz1TKHQpLGw9RSh0KSxjPUModCksZj1MKHQpLGg9SSh0KSxwPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7cC5nZW5lcmF0ZU1pcG1hcCgpLHAubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIscC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGQ9aSh0KSxnPWkodCksbT1pKHQpLHY9aSh0KSx5PWkodCkseD1hKHQsW3tidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOnksdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOm0sdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjp2LHR5cGU6dC5GTE9BVCxzaXplOjN9XSksYj1pKHQpLF89aSh0KSx3PWkodCksaz1pKHQpLE09YSh0LFt7YnVmZmVyOmIsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjprLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOl8sdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp3LHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksUD1pKHQpLHo9aSh0KSxPPWkodCksRD1pKHQpLFI9aSh0KSxGPWEodCxbe2J1ZmZlcjpQLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Uix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjp6LHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6Tyx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOkQsdHlwZTp0LkZMT0FULHNpemU6MX1dKSxCPWkodCksTj1hKHQsW3tidWZmZXI6Qix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pLGo9bmV3IFQodCxwLG4scyxsLGMsZixoLGQseSxnLG0sdix4LGIsayxfLHcsTSxQLFIseixPLEQsRixCLE4pO3JldHVybiBqLnVwZGF0ZShlKSxqfX0seyIuL2xpYi9jbG9zZXN0LXBvaW50IjozMDcsIi4vbGliL3NoYWRlcnMiOjMwOCxjb2xvcm1hcDoxMzEsImdsLWJ1ZmZlciI6MjU5LCJnbC1tYXQ0L2ludmVydCI6MjkzLCJnbC1tYXQ0L211bHRpcGx5IjoyOTUsImdsLXNoYWRlciI6MzM1LCJnbC10ZXh0dXJlMmQiOjM1MywiZ2wtdmFvIjozNTgsbmRhcnJheTo0OTUsbm9ybWFsczo0OTgsInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIjo1NTYsInR5cGVkYXJyYXktcG9vbCI6NTk1fV0sMzEwOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzI1N11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjI1N31dLDMxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSxbMCwwLDAsMSwxLDAsMSwxXSkscz1pKGUsYS5ib3hWZXJ0LGEubGluZUZyYWcpO3JldHVybiBuZXcgbyh0LHIscyl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtc2hhZGVyIiksYT10KCIuL3NoYWRlcnMiKTtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXJ9dmFyIHMsbCxjPW8ucHJvdG90eXBlO2MuYmluZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2hhZGVyO3RoaXMudmJvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCksdC5hdHRyaWJ1dGVzLmNvb3JkLnBvaW50ZXIoKSx0LnVuaWZvcm1zLnNjcmVlbkJveD10aGlzLnBsb3Quc2NyZWVuQm94fSxjLmRyYXdCb3g9KHM9WzAsMF0sbD1bMCwwXSxmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMucGxvdCxvPXRoaXMuc2hhZGVyLGM9YS5nbDtzWzBdPXQsc1sxXT1lLGxbMF09cixsWzFdPW4sby51bmlmb3Jtcy5sbz1zLG8udW5pZm9ybXMuaGk9bCxvLnVuaWZvcm1zLmNvbG9yPWksYy5kcmF3QXJyYXlzKGMuVFJJQU5HTEVfU1RSSVAsMCw0KX0pLGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MzE0LCJnbC1idWZmZXIiOjI1OSwiZ2wtc2hhZGVyIjozMzV9XSwzMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLGE9aShlLG8uZ3JpZFZlcnQsby5ncmlkRnJhZyksbD1pKGUsby50aWNrVmVydCxvLmdyaWRGcmFnKTtyZXR1cm4gbmV3IHModCxyLGEsbCl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtc2hhZGVyIiksYT10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLG89dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXIsdGhpcy50aWNrU2hhZGVyPW4sdGhpcy50aWNrcz1bW10sW11dfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdC1lfXZhciBjLHUsZixoLHAsZD1zLnByb3RvdHlwZTtkLmRyYXc9KGM9WzAsMF0sdT1bMCwwXSxmPVswLDBdLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucGxvdCxlPXRoaXMudmJvLHI9dGhpcy5zaGFkZXIsbj10aGlzLnRpY2tzLGk9dC5nbCxhPXQuX3RpY2tCb3VuZHMsbz10LmRhdGFCb3gscz10LnZpZXdCb3gsbD10LmdyaWRMaW5lV2lkdGgsaD10LmdyaWRMaW5lQ29sb3IscD10LmdyaWRMaW5lRW5hYmxlLGQ9dC5waXhlbFJhdGlvLGc9MDtnPDI7KytnKXt2YXIgbT1hW2ddLHY9YVtnKzJdLW0seT0uNSoob1tnKzJdK29bZ10pLHg9b1tnKzJdLW9bZ107dVtnXT0yKnYveCxjW2ddPTIqKG0teSkveH1yLmJpbmQoKSxlLmJpbmQoKSxyLmF0dHJpYnV0ZXMuZGF0YUNvb3JkLnBvaW50ZXIoKSxyLnVuaWZvcm1zLmRhdGFTaGlmdD1jLHIudW5pZm9ybXMuZGF0YVNjYWxlPXU7dmFyIGI9MDtmb3IoZz0wO2c8MjsrK2cpe2ZbMF09ZlsxXT0wLGZbZ109MSxyLnVuaWZvcm1zLmRhdGFBeGlzPWYsci51bmlmb3Jtcy5saW5lV2lkdGg9bFtnXS8oc1tnKzJdLXNbZ10pKmQsci51bmlmb3Jtcy5jb2xvcj1oW2ddO3ZhciBfPTYqbltnXS5sZW5ndGg7cFtnXSYmXyYmaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLGIsXyksYis9X319KSxkLmRyYXdUaWNrTWFya3M9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdLHI9WzEsMF0sbj1bMCwxXSxpPVswLDBdLG89WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBzPXRoaXMucGxvdCxjPXRoaXMudmJvLHU9dGhpcy50aWNrU2hhZGVyLGY9dGhpcy50aWNrcyxoPXMuZ2wscD1zLl90aWNrQm91bmRzLGQ9cy5kYXRhQm94LGc9cy52aWV3Qm94LG09cy5waXhlbFJhdGlvLHY9cy5zY3JlZW5Cb3gseT12WzJdLXZbMF0seD12WzNdLXZbMV0sYj1nWzJdLWdbMF0sXz1nWzNdLWdbMV0sdz0wO3c8MjsrK3cpe3ZhciBUPXBbd10saz1wW3crMl0tVCxNPS41KihkW3crMl0rZFt3XSksQT1kW3crMl0tZFt3XTtlW3ddPTIqay9BLHRbd109MiooVC1NKS9BfWVbMF0qPWIveSx0WzBdKj1iL3ksZVsxXSo9Xy94LHRbMV0qPV8veCx1LmJpbmQoKSxjLmJpbmQoKSx1LmF0dHJpYnV0ZXMuZGF0YUNvb3JkLnBvaW50ZXIoKTt2YXIgUz11LnVuaWZvcm1zO1MuZGF0YVNoaWZ0PXQsUy5kYXRhU2NhbGU9ZTt2YXIgRT1zLnRpY2tNYXJrTGVuZ3RoLEM9cy50aWNrTWFya1dpZHRoLEw9cy50aWNrTWFya0NvbG9yLEk9NipmWzBdLmxlbmd0aCxQPU1hdGgubWluKGEuZ2UoZlswXSwoZFswXS1wWzBdKS8ocFsyXS1wWzBdKSxsKSxmWzBdLmxlbmd0aCksej1NYXRoLm1pbihhLmd0KGZbMF0sKGRbMl0tcFswXSkvKHBbMl0tcFswXSksbCksZlswXS5sZW5ndGgpLE89MCs2KlAsRD02Kk1hdGgubWF4KDAsei1QKSxSPU1hdGgubWluKGEuZ2UoZlsxXSwoZFsxXS1wWzFdKS8ocFszXS1wWzFdKSxsKSxmWzFdLmxlbmd0aCksRj1NYXRoLm1pbihhLmd0KGZbMV0sKGRbM10tcFsxXSkvKHBbM10tcFsxXSksbCksZlsxXS5sZW5ndGgpLEI9SSs2KlIsTj02Kk1hdGgubWF4KDAsRi1SKTtpWzBdPTIqKGdbMF0tRVsxXSkveS0xLGlbMV09KGdbM10rZ1sxXSkveC0xLG9bMF09RVsxXSptL3ksb1sxXT1DWzFdKm0veCxOJiYoUy5jb2xvcj1MWzFdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1uLFMuc2NyZWVuT2Zmc2V0PWksaC5kcmF3QXJyYXlzKGguVFJJQU5HTEVTLEIsTikpLGlbMF09KGdbMl0rZ1swXSkveS0xLGlbMV09MiooZ1sxXS1FWzBdKS94LTEsb1swXT1DWzBdKm0veSxvWzFdPUVbMF0qbS94LEQmJihTLmNvbG9yPUxbMF0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPXIsUy5zY3JlZW5PZmZzZXQ9aSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMsTyxEKSksaVswXT0yKihnWzJdK0VbM10pL3ktMSxpWzFdPShnWzNdK2dbMV0pL3gtMSxvWzBdPUVbM10qbS95LG9bMV09Q1szXSptL3gsTiYmKFMuY29sb3I9TFszXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9bixTLnNjcmVlbk9mZnNldD1pLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUyxCLE4pKSxpWzBdPShnWzJdK2dbMF0pL3ktMSxpWzFdPTIqKGdbM10rRVsyXSkveC0xLG9bMF09Q1syXSptL3ksb1sxXT1FWzJdKm0veCxEJiYoUy5jb2xvcj1MWzJdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1yLFMuc2NyZWVuT2Zmc2V0PWksaC5kcmF3QXJyYXlzKGguVFJJQU5HTEVTLE8sRCkpfX0oKSxkLnVwZGF0ZT0oaD1bMSwxLC0xLC0xLDEsLTFdLHA9WzEsLTEsMSwxLC0xLC0xXSxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC50aWNrcyxyPXQuYm91bmRzLG49bmV3IEZsb2F0MzJBcnJheSgxOCooZVswXS5sZW5ndGgrZVsxXS5sZW5ndGgpKSxpPSh0aGlzLnBsb3QuemVyb0xpbmVFbmFibGUsMCksYT1bW10sW11dLG89MDtvPDI7KytvKWZvcih2YXIgcz1hW29dLGw9ZVtvXSxjPXJbb10sdT1yW28rMl0sZj0wO2Y8bC5sZW5ndGg7KytmKXt2YXIgZD0obFtmXS54LWMpLyh1LWMpO3MucHVzaChkKTtmb3IodmFyIGc9MDtnPDY7KytnKW5baSsrXT1kLG5baSsrXT1oW2ddLG5baSsrXT1wW2ddfXRoaXMudGlja3M9YSx0aGlzLnZiby51cGRhdGUobil9KSxkLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudGlja1NoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MzE0LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6OTYsImdsLWJ1ZmZlciI6MjU5LCJnbC1zaGFkZXIiOjMzNX1dLDMxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSxbLTEsLTEsLTEsMSwxLC0xLDEsMV0pLHM9aShlLGEubGluZVZlcnQsYS5saW5lRnJhZyk7cmV0dXJuIG5ldyBvKHQscixzKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC1zaGFkZXIiKSxhPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn12YXIgcyxsLGM9by5wcm90b3R5cGU7Yy5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaGFkZXI7dGhpcy52Ym8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKSx0LmF0dHJpYnV0ZXMuY29vcmQucG9pbnRlcigpLHQudW5pZm9ybXMuc2NyZWVuQm94PXRoaXMucGxvdC5zY3JlZW5Cb3h9LGMuZHJhd0xpbmU9KHM9WzAsMF0sbD1bMCwwXSxmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5wbG90LGM9dGhpcy5zaGFkZXIsdT1vLmdsO3NbMF09dCxzWzFdPWUsbFswXT1yLGxbMV09bixjLnVuaWZvcm1zLnN0YXJ0PXMsYy51bmlmb3Jtcy5lbmQ9bCxjLnVuaWZvcm1zLndpZHRoPWkqby5waXhlbFJhdGlvLGMudW5pZm9ybXMuY29sb3I9YSx1LmRyYXdBcnJheXModS5UUklBTkdMRV9TVFJJUCwwLDQpfSksYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjozMTQsImdsLWJ1ZmZlciI6MjU5LCJnbC1zaGFkZXIiOjMzNX1dLDMxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnh5eiAqIGNvbG9yLncsIGNvbG9yLncpO1xufVxuIl0pO2UuZXhwb3J0cz17bGluZVZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgY29vcmQ7XG5cbnVuaWZvcm0gdmVjNCBzY3JlZW5Cb3g7XG51bmlmb3JtIHZlYzIgc3RhcnQsIGVuZDtcbnVuaWZvcm0gZmxvYXQgd2lkdGg7XG5cbnZlYzIgcGVycCh2ZWMyIHYpIHtcbiAgcmV0dXJuIHZlYzIodi55LCAtdi54KTtcbn1cblxudmVjMiBzY3JlZW4odmVjMiB2KSB7XG4gIHJldHVybiAyLjAgKiAodiAtIHNjcmVlbkJveC54eSkgLyAoc2NyZWVuQm94Lnp3IC0gc2NyZWVuQm94Lnh5KSAtIDEuMDtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMyIGRlbHRhID0gbm9ybWFsaXplKHBlcnAoc3RhcnQgLSBlbmQpKTtcbiAgdmVjMiBvZmZzZXQgPSBtaXgoc3RhcnQsIGVuZCwgMC41ICogKGNvb3JkLnkrMS4wKSk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW4ob2Zmc2V0ICsgMC41ICogd2lkdGggKiBkZWx0YSAqIGNvb3JkLngpLCAwLCAxKTtcbn1cbiJdKSxsaW5lRnJhZzppLHRleHRWZXJ0Om4oWyIjZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzMgdGV4dENvb3JkaW5hdGU7XG5cbnVuaWZvcm0gdmVjMiBkYXRhU2NhbGUsIGRhdGFTaGlmdCwgZGF0YUF4aXMsIHNjcmVlbk9mZnNldCwgdGV4dFNjYWxlO1xudW5pZm9ybSBmbG9hdCBhbmdsZTtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCBkYXRhT2Zmc2V0ICA9IHRleHRDb29yZGluYXRlLno7XG4gIHZlYzIgZ2x5cGhPZmZzZXQgID0gdGV4dENvb3JkaW5hdGUueHk7XG4gIG1hdDIgZ2x5cGhNYXRyaXggPSBtYXQyKGNvcyhhbmdsZSksIHNpbihhbmdsZSksIC1zaW4oYW5nbGUpLCBjb3MoYW5nbGUpKTtcbiAgdmVjMiBzY3JlZW5Db29yZGluYXRlID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YU9mZnNldCArIGRhdGFTaGlmdCkgK1xuICAgIGdseXBoTWF0cml4ICogZ2x5cGhPZmZzZXQgKiB0ZXh0U2NhbGUgKyBzY3JlZW5PZmZzZXQ7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW5Db29yZGluYXRlLCAwLCAxKTtcbn1cbiJdKSx0ZXh0RnJhZzppLGdyaWRWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcblxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZTtcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xuICBwb3MgKz0gMTAuMCAqIGRhdGFDb29yZC55ICogdmVjMihkYXRhQXhpcy55LCAtZGF0YUF4aXMueCkgKyBkYXRhQ29vcmQueiAqIGxpbmVXaWR0aDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcywgMCwgMSk7XG59XG4iXSksZ3JpZEZyYWc6aSxib3hWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGNvb3JkO1xuXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xudW5pZm9ybSB2ZWMyIGxvLCBoaTtcblxudmVjMiBzY3JlZW4odmVjMiB2KSB7XG4gIHJldHVybiAyLjAgKiAodiAtIHNjcmVlbkJveC54eSkgLyAoc2NyZWVuQm94Lnp3IC0gc2NyZWVuQm94Lnh5KSAtIDEuMDtcbn1cblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuKG1peChsbywgaGksIGNvb3JkKSksIDAsIDEpO1xufVxuIl0pLHRpY2tWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcblxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZSwgc2NyZWVuT2Zmc2V0LCB0aWNrU2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb3MgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhQ29vcmQueCArIGRhdGFTaGlmdCk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKyB0aWNrU2NhbGUqZGF0YUNvb3JkLnl6ICsgc2NyZWVuT2Zmc2V0LCAwLCAxKTtcbn1cbiJdKX19LHtnbHNsaWZ5OjMxNn1dLDMxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSksYT1pKGUscy50ZXh0VmVydCxzLnRleHRGcmFnKTtyZXR1cm4gbmV3IGwodCxyLGEpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgidGV4dC1jYWNoZSIpLG89dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxzPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIGwodCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cix0aGlzLnRpY2tPZmZzZXQ9W1tdLFtdXSx0aGlzLnRpY2tYPVtbXSxbXV0sdGhpcy5sYWJlbE9mZnNldD1bMCwwXSx0aGlzLmxhYmVsQ291bnQ9WzAsMF19dmFyIGMsdSxmLGgscCxkLGc9bC5wcm90b3R5cGU7Zy5kcmF3VGlja3M9KGM9WzAsMF0sdT1bMCwwXSxmPVswLDBdLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxvdCxyPXRoaXMuc2hhZGVyLG49dGhpcy50aWNrWFt0XSxpPXRoaXMudGlja09mZnNldFt0XSxhPWUuZ2wscz1lLnZpZXdCb3gsbD1lLmRhdGFCb3gsaD1lLnNjcmVlbkJveCxwPWUucGl4ZWxSYXRpbyxkPWUudGlja0VuYWJsZSxnPWUudGlja1BhZCxtPWUudGlja0NvbG9yLHY9ZS50aWNrQW5nbGUseT1lLmxhYmVsRW5hYmxlLHg9ZS5sYWJlbFBhZCxiPWUubGFiZWxDb2xvcixfPWUubGFiZWxBbmdsZSx3PXRoaXMubGFiZWxPZmZzZXRbdF0sVD10aGlzLmxhYmVsQ291bnRbdF0saz1vLmx0KG4sbFt0XSksTT1vLmxlKG4sbFt0KzJdKTtjWzBdPWNbMV09MCxjW3RdPTEsdVt0XT0oc1syK3RdK3NbdF0pLyhoWzIrdF0taFt0XSktMTt2YXIgQT0yL2hbMisoMV50KV0taFsxXnRdO3VbMV50XT1BKnNbMV50XS0xLGRbdF0mJih1WzFedF0tPUEqcCpnW3RdLGs8TSYmaVtNXT5pW2tdJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1tW3RdLHIudW5pZm9ybXMuYW5nbGU9dlt0XSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsaVtrXSxpW01dLWlba10pKSkseVt0XSYmVCYmKHVbMV50XS09QSpwKnhbdF0sci51bmlmb3Jtcy5kYXRhQXhpcz1mLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1iW3RdLHIudW5pZm9ybXMuYW5nbGU9X1t0XSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdyxUKSksdVsxXnRdPUEqc1syKygxXnQpXS0xLGRbdCsyXSYmKHVbMV50XSs9QSpwKmdbdCsyXSxrPE0mJmlbTV0+aVtrXSYmKHIudW5pZm9ybXMuZGF0YUF4aXM9YyxyLnVuaWZvcm1zLnNjcmVlbk9mZnNldD11LHIudW5pZm9ybXMuY29sb3I9bVt0KzJdLHIudW5pZm9ybXMuYW5nbGU9dlt0KzJdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxpW2tdLGlbTV0taVtrXSkpKSx5W3QrMl0mJlQmJih1WzFedF0rPUEqcCp4W3QrMl0sci51bmlmb3Jtcy5kYXRhQXhpcz1mLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1iW3QrMl0sci51bmlmb3Jtcy5hbmdsZT1fW3QrMl0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLHcsVCkpfSksZy5kcmF3VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMucGxvdCxuPXRoaXMuc2hhZGVyLGk9ci5nbCxhPXIuc2NyZWVuQm94LG89ci50aXRsZUNlbnRlcixzPXIudGl0bGVBbmdsZSxsPXIudGl0bGVDb2xvcixjPXIucGl4ZWxSYXRpbztpZih0aGlzLnRpdGxlQ291bnQpe2Zvcih2YXIgdT0wO3U8MjsrK3UpZVt1XT0yKihvW3VdKmMtYVt1XSkvKGFbMit1XS1hW3VdKS0xO24uYmluZCgpLG4udW5pZm9ybXMuZGF0YUF4aXM9dCxuLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLG4udW5pZm9ybXMuYW5nbGU9cyxuLnVuaWZvcm1zLmNvbG9yPWwsaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLHRoaXMudGl0bGVPZmZzZXQsdGhpcy50aXRsZUNvdW50KX19fSgpLGcuYmluZD0oaD1bMCwwXSxwPVswLDBdLGQ9WzAsMF0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBsb3QsZT10aGlzLnNoYWRlcixyPXQuX3RpY2tCb3VuZHMsbj10LmRhdGFCb3gsaT10LnNjcmVlbkJveCxhPXQudmlld0JveDtlLmJpbmQoKTtmb3IodmFyIG89MDtvPDI7KytvKXt2YXIgcz1yW29dLGw9cltvKzJdLXMsYz0uNSoobltvKzJdK25bb10pLHU9bltvKzJdLW5bb10sZj1hW29dLGc9YVtvKzJdLWYsbT1pW29dLHY9aVtvKzJdLW07cFtvXT0yKmwvdSpnL3YsaFtvXT0yKihzLWMpL3UqZy92fWRbMV09Mip0LnBpeGVsUmF0aW8vKGlbM10taVsxXSksZFswXT1kWzFdKihpWzNdLWlbMV0pLyhpWzJdLWlbMF0pLGUudW5pZm9ybXMuZGF0YVNjYWxlPXAsZS51bmlmb3Jtcy5kYXRhU2hpZnQ9aCxlLnVuaWZvcm1zLnRleHRTY2FsZT1kLHRoaXMudmJvLmJpbmQoKSxlLmF0dHJpYnV0ZXMudGV4dENvb3JkaW5hdGUucG9pbnRlcigpfSksZy51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksbyxzPVtdLGw9dC50aWNrcyxjPXQuYm91bmRzO2ZvcihvPTA7bzwyOysrbyl7dmFyIHU9W01hdGguZmxvb3Iocy5sZW5ndGgvMyldLGY9Wy0xLzBdLGg9bFtvXTtmb3IoZT0wO2U8aC5sZW5ndGg7KytlKXt2YXIgcD1oW2VdLGQ9cC54LGc9cC50ZXh0LG09cC5mb250fHwic2Fucy1zZXJpZiI7aT1wLmZvbnRTaXplfHwxMjtmb3IodmFyIHY9MS8oY1tvKzJdLWNbb10pLHk9Y1tvXSx4PWcuc3BsaXQoIlxuIiksYj0wO2I8eC5sZW5ndGg7YisrKWZvcihuPWEobSx4W2JdKS5kYXRhLHI9MDtyPG4ubGVuZ3RoO3IrPTIpcy5wdXNoKG5bcl0qaSwtbltyKzFdKmktYippKjEuMiwoZC15KSp2KTt1LnB1c2goTWF0aC5mbG9vcihzLmxlbmd0aC8zKSksZi5wdXNoKGQpfXRoaXMudGlja09mZnNldFtvXT11LHRoaXMudGlja1hbb109Zn1mb3Iobz0wO288MjsrK28pe2Zvcih0aGlzLmxhYmVsT2Zmc2V0W29dPU1hdGguZmxvb3Iocy5sZW5ndGgvMyksbj1hKHQubGFiZWxGb250W29dLHQubGFiZWxzW29dLHt0ZXh0QWxpZ246ImNlbnRlciJ9KS5kYXRhLGk9dC5sYWJlbFNpemVbb10sZT0wO2U8bi5sZW5ndGg7ZSs9MilzLnB1c2gobltlXSppLC1uW2UrMV0qaSwwKTt0aGlzLmxhYmVsQ291bnRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKS10aGlzLmxhYmVsT2Zmc2V0W29dfWZvcih0aGlzLnRpdGxlT2Zmc2V0PU1hdGguZmxvb3Iocy5sZW5ndGgvMyksbj1hKHQudGl0bGVGb250LHQudGl0bGUpLmRhdGEsaT10LnRpdGxlU2l6ZSxlPTA7ZTxuLmxlbmd0aDtlKz0yKXMucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMudGl0bGVDb3VudD1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLXRoaXMudGl0bGVPZmZzZXQsdGhpcy52Ym8udXBkYXRlKHMpfSxnLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjMxNCwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjk2LCJnbC1idWZmZXIiOjI1OSwiZ2wtc2hhZGVyIjozMzUsInRleHQtY2FjaGUiOjU3NX1dLDMxNjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNTddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNTd9XSwzMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsW2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0pLGM9bmV3IGwoZSxyKTtyZXR1cm4gYy5ncmlkPWkoYyksYy50ZXh0PWEoYyksYy5saW5lPW8oYyksYy5ib3g9cyhjKSxjLnVwZGF0ZSh0KSxjfTt2YXIgbj10KCJnbC1zZWxlY3Qtc3RhdGljIiksaT10KCIuL2xpYi9ncmlkIiksYT10KCIuL2xpYi90ZXh0Iiksbz10KCIuL2xpYi9saW5lIikscz10KCIuL2xpYi9ib3giKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5nbD10LHRoaXMucGlja0J1ZmZlcj1lLHRoaXMuc2NyZWVuQm94PVswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSx0aGlzLnZpZXdCb3g9WzAsMCwwLDBdLHRoaXMuZGF0YUJveD1bLTEwLC0xMCwxMCwxMF0sdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLmdyaWRMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGVDZW50ZXI9WzAsMF0sdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVs0LDRdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJMaW5lRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5ib3JkZXJMaW5lV2lkdGg9WzIsMiwyLDJdLHRoaXMuYm9yZGVyTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZD1udWxsLHRoaXMudGV4dD1udWxsLHRoaXMubGluZT1udWxsLHRoaXMuYm94PW51bGwsdGhpcy5vYmplY3RzPVtdLHRoaXMub3ZlcmxheXM9W10sdGhpcy5fdGlja0JvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuc3RhdGljPSExLHRoaXMuZGlydHk9ITEsdGhpcy5waWNrRGlydHk9ITEsdGhpcy5waWNrRGVsYXk9MTIwLHRoaXMucGlja1JhZGl1cz0xMCx0aGlzLl9waWNrVGltZW91dD1udWxsLHRoaXMuX2RyYXdQaWNrPXRoaXMuZHJhd1BpY2suYmluZCh0aGlzKSx0aGlzLl9kZXB0aENvdW50ZXI9MH12YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT10LnNsaWNlKCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09ZVtyXS5zbGljZSgpO3JldHVybiBlfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC54LWUueH1jLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0sYy5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxjLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxjLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsaT10aGlzLnBpeGVsUmF0aW8sYT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7aWYodGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLHQuZGVwdGhNYXNrKCExKSx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRXF1YXRpb24odC5GVU5DX0FERCx0LkZVTkNfQUREKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHRoaXMuYm9yZGVyQ29sb3Ipe3Quc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSk7dmFyIGM9dGhpcy5ib3JkZXJDb2xvcjt0LmNsZWFyQ29sb3IoY1swXSpjWzNdLGNbMV0qY1szXSxjWzJdKmNbM10sY1szXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKX10LnNjaXNzb3IoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pLHQudmlld3BvcnQoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pO3ZhciB1PXRoaXMuYmFja2dyb3VuZENvbG9yO3QuY2xlYXJDb2xvcih1WzBdKnVbM10sdVsxXSp1WzNdLHVbMl0qdVszXSx1WzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVCksYS5kcmF3KCk7dmFyIGY9dGhpcy56ZXJvTGluZUVuYWJsZSxoPXRoaXMuemVyb0xpbmVDb2xvcixwPXRoaXMuemVyb0xpbmVXaWR0aDtpZihmWzBdfHxmWzFdKXtvLmJpbmQoKTtmb3IodmFyIGQ9MDtkPDI7KytkKWlmKGZbZF0mJm5bZF08PTAmJm5bZCsyXT49MCl7dmFyIGc9ZVtkXS1uW2RdKihlW2QrMl0tZVtkXSkvKG5bZCsyXS1uW2RdKTswPT09ZD9vLmRyYXdMaW5lKGcsZVsxXSxnLGVbM10scFtkXSxoW2RdKTpvLmRyYXdMaW5lKGVbMF0sZyxlWzJdLGcscFtkXSxoW2RdKX19Zm9yKGQ9MDtkPGwubGVuZ3RoOysrZClsW2RdLmRyYXcoKTt0LnZpZXdwb3J0KGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHRoaXMuZ3JpZC5kcmF3VGlja01hcmtzKCksby5iaW5kKCk7dmFyIG09dGhpcy5ib3JkZXJMaW5lRW5hYmxlLHY9dGhpcy5ib3JkZXJMaW5lV2lkdGgseT10aGlzLmJvcmRlckxpbmVDb2xvcjtmb3IobVsxXSYmby5kcmF3TGluZShyWzBdLHJbMV0tLjUqdlsxXSppLHJbMF0sclszXSsuNSp2WzNdKmksdlsxXSx5WzFdKSxtWzBdJiZvLmRyYXdMaW5lKHJbMF0tLjUqdlswXSppLHJbMV0sclsyXSsuNSp2WzJdKmksclsxXSx2WzBdLHlbMF0pLG1bM10mJm8uZHJhd0xpbmUoclsyXSxyWzFdLS41KnZbMV0qaSxyWzJdLHJbM10rLjUqdlszXSppLHZbM10seVszXSksbVsyXSYmby5kcmF3TGluZShyWzBdLS41KnZbMF0qaSxyWzNdLHJbMl0rLjUqdlsyXSppLHJbM10sdlsyXSx5WzJdKSxzLmJpbmQoKSxkPTA7ZDwyOysrZClzLmRyYXdUaWNrcyhkKTt0aGlzLnRpdGxlRW5hYmxlJiZzLmRyYXdUaXRsZSgpO3ZhciB4PXRoaXMub3ZlcmxheXM7Zm9yKGQ9MDtkPHgubGVuZ3RoOysrZCl4W2RdLmRyYXcoKTt0LmRpc2FibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkJMRU5EKSx0LmRlcHRoTWFzayghMCl9fSxjLmRyYXdQaWNrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhdGljKXt2YXIgdD10aGlzLnBpY2tCdWZmZXI7dGhpcy5nbCx0aGlzLl9waWNrVGltZW91dD1udWxsLHQuYmVnaW4oKTtmb3IodmFyIGU9MSxyPXRoaXMub2JqZWN0cyxuPTA7bjxyLmxlbmd0aDsrK24pZT1yW25dLmRyYXdQaWNrKGUpO3QuZW5kKCl9fSxjLnBpY2s9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5zdGF0aWMpe3ZhciByPXRoaXMucGl4ZWxSYXRpbyxuPXRoaXMucGlja1BpeGVsUmF0aW8saT10aGlzLnZpZXdCb3gsYT0wfE1hdGgucm91bmQoKHQtaVswXS9yKSpuKSxvPTB8TWF0aC5yb3VuZCgoZS1pWzFdL3IpKm4pLHM9dGhpcy5waWNrQnVmZmVyLnF1ZXJ5KGEsbyx0aGlzLnBpY2tSYWRpdXMpO2lmKCFzKXJldHVybiBudWxsO2Zvcih2YXIgbD1zLmlkKyhzLnZhbHVlWzBdPDw4KSsocy52YWx1ZVsxXTw8MTYpKyhzLnZhbHVlWzJdPDwyNCksYz10aGlzLm9iamVjdHMsdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgZj1jW3VdLnBpY2soYSxvLGwpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9fSxjLnNldFNjcmVlbkJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcmVlbkJveCxyPXRoaXMucGl4ZWxSYXRpbztlWzBdPTB8TWF0aC5yb3VuZCh0WzBdKnIpLGVbMV09MHxNYXRoLnJvdW5kKHRbMV0qciksZVsyXT0wfE1hdGgucm91bmQodFsyXSpyKSxlWzNdPTB8TWF0aC5yb3VuZCh0WzNdKnIpLHRoaXMuc2V0RGlydHkoKX0sYy5zZXREYXRhQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YUJveDsoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdfHxlWzJdIT09dFsyXXx8ZVszXSE9PXRbM10pJiYoZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLHRoaXMuc2V0RGlydHkoKSl9LGMuc2V0Vmlld0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLnZpZXdCb3g7clswXT0wfE1hdGgucm91bmQodFswXSplKSxyWzFdPTB8TWF0aC5yb3VuZCh0WzFdKmUpLHJbMl09MHxNYXRoLnJvdW5kKHRbMl0qZSksclszXT0wfE1hdGgucm91bmQodFszXSplKTt2YXIgbj10aGlzLnBpY2tQaXhlbFJhdGlvO3RoaXMucGlja0J1ZmZlci5zaGFwZT1bMHxNYXRoLnJvdW5kKCh0WzJdLXRbMF0pKm4pLDB8TWF0aC5yb3VuZCgodFszXS10WzFdKSpuKV0sdGhpcy5zZXREaXJ0eSgpfSxjLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpb3x8MTt2YXIgcj10aGlzLnBpeGVsUmF0aW87dGhpcy5waWNrUGl4ZWxSYXRpbz1NYXRoLm1heChyLDEpLHRoaXMuc2V0U2NyZWVuQm94KHQuc2NyZWVuQm94fHxbMCwwLGUuZHJhd2luZ0J1ZmZlcldpZHRoL3IsZS5kcmF3aW5nQnVmZmVySGVpZ2h0L3JdKTt0aGlzLnNjcmVlbkJveDt0aGlzLnNldFZpZXdCb3godC52aWV3Qm94fHxbLjEyNSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjEyNSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3JdKTt2YXIgbj10aGlzLnZpZXdCb3gsaT0oblsyXS1uWzBdKS8oblszXS1uWzFdKTt0aGlzLnNldERhdGFCb3godC5kYXRhQm94fHxbLTEwLC0xMC9pLDEwLDEwL2ldKSx0aGlzLmJvcmRlckNvbG9yPSExIT09dC5ib3JkZXJDb2xvciYmKHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9dSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPXUodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj11KHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKCJ0aXRsZUVuYWJsZSJpbiB0KXx8ISF0LnRpdGxlRW5hYmxlLHRoaXMudGl0bGVBbmdsZT10LnRpdGxlQW5nbGV8fDAsdGhpcy50aXRsZUNvbG9yPSh0LnRpdGxlQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmxhYmVsUGFkPSh0LmxhYmVsUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMubGFiZWxBbmdsZT0odC5sYWJlbEFuZ2xlfHxbMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0pLnNsaWNlKCksdGhpcy5sYWJlbEVuYWJsZT0odC5sYWJlbEVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmxhYmVsQ29sb3I9dSh0LmxhYmVsQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpY2tQYWQ9KHQudGlja1BhZHx8WzE1LDE1LDE1LDE1XSkuc2xpY2UoKSx0aGlzLnRpY2tBbmdsZT0odC50aWNrQW5nbGV8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tFbmFibGU9KHQudGlja0VuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLnRpY2tDb2xvcj11KHQudGlja0NvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy5ib3JkZXJMaW5lRW5hYmxlPSh0LmJvcmRlckxpbmVFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lV2lkdGg9KHQuYm9yZGVyTGluZVdpZHRofHxbMiwyLDIsMl0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lQ29sb3I9dSh0LmJvcmRlckxpbmVDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pO3ZhciBhPXQudGlja3N8fFtbXSxbXV0sbz10aGlzLl90aWNrQm91bmRzO29bMF09b1sxXT0xLzAsb1syXT1vWzNdPS0xLzA7Zm9yKHZhciBzPTA7czwyOysrcyl7dmFyIGw9YVtzXS5zbGljZSgwKTswIT09bC5sZW5ndGgmJihsLnNvcnQoZiksb1tzXT1NYXRoLm1pbihvW3NdLGxbMF0ueCksb1tzKzJdPU1hdGgubWF4KG9bcysyXSxsW2wubGVuZ3RoLTFdLngpKX10aGlzLmdyaWQudXBkYXRlKHtib3VuZHM6byx0aWNrczphfSksdGhpcy50ZXh0LnVwZGF0ZSh7Ym91bmRzOm8sdGlja3M6YSxsYWJlbHM6dC5sYWJlbHN8fFsieCIsInkiXSxsYWJlbFNpemU6dC5sYWJlbFNpemV8fFsxMiwxMl0sbGFiZWxGb250OnQubGFiZWxGb250fHxbInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGl0bGU6dC50aXRsZXx8IiIsdGl0bGVTaXplOnQudGl0bGVTaXplfHwxOCx0aXRsZUZvbnQ6dC50aXRsZUZvbnR8fCJzYW5zLXNlcmlmIn0pLHRoaXMuc3RhdGljPSEhdC5zdGF0aWMsdGhpcy5zZXREaXJ0eSgpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveC5kaXNwb3NlKCksdGhpcy5ncmlkLmRpc3Bvc2UoKSx0aGlzLnRleHQuZGlzcG9zZSgpLHRoaXMubGluZS5kaXNwb3NlKCk7Zm9yKHZhciB0PXRoaXMub2JqZWN0cy5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLm9iamVjdHNbdF0uZGlzcG9zZSgpO3RoaXMub2JqZWN0cy5sZW5ndGg9MDtmb3IodD10aGlzLm92ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub3ZlcmxheXNbdF0uZGlzcG9zZSgpO3RoaXMub3ZlcmxheXMubGVuZ3RoPTAsdGhpcy5nbD1udWxsfSxjLmFkZE9iamVjdD1mdW5jdGlvbih0KXt0aGlzLm9iamVjdHMuaW5kZXhPZih0KTwwJiYodGhpcy5vYmplY3RzLnB1c2godCksdGhpcy5zZXREaXJ0eSgpKX0sYy5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub2JqZWN0cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXREaXJ0eSgpO2JyZWFrfX0sYy5hZGRPdmVybGF5PWZ1bmN0aW9uKHQpe3RoaXMub3ZlcmxheXMuaW5kZXhPZih0KTwwJiYodGhpcy5vdmVybGF5cy5wdXNoKHQpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCkpfSxjLnJlbW92ZU92ZXJsYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCk7YnJlYWt9fX0seyIuL2xpYi9ib3giOjMxMSwiLi9saWIvZ3JpZCI6MzEyLCIuL2xpYi9saW5lIjozMTMsIi4vbGliL3RleHQiOjMxNSwiZ2wtc2VsZWN0LXN0YXRpYyI6MzM0fV0sMzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8ZG9jdW1lbnQuYm9keSxlPWV8fHt9O3ZhciByPVsuMDEsMS8wXTsiZGlzdGFuY2VMaW1pdHMiaW4gZSYmKHJbMF09ZS5kaXN0YW5jZUxpbWl0c1swXSxyWzFdPWUuZGlzdGFuY2VMaW1pdHNbMV0pOyJ6b29tTWluImluIGUmJihyWzBdPWUuem9vbU1pbik7Inpvb21NYXgiaW4gZSYmKHJbMV09ZS56b29tTWF4KTt2YXIgYz1pKHtjZW50ZXI6ZS5jZW50ZXJ8fFswLDAsMF0sdXA6ZS51cHx8WzAsMSwwXSxleWU6ZS5leWV8fFswLDAsMTBdLG1vZGU6ZS5tb2RlfHwib3JiaXQiLGRpc3RhbmNlTGltaXRzOnJ9KSx1PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxmPTAsaD10LmNsaWVudFdpZHRoLHA9dC5jbGllbnRIZWlnaHQsZD17a2V5QmluZGluZ01vZGU6InJvdGF0ZSIsZW5hYmxlV2hlZWw6ITAsdmlldzpjLGVsZW1lbnQ6dCxkZWxheTplLmRlbGF5fHwxNixyb3RhdGVTcGVlZDplLnJvdGF0ZVNwZWVkfHwxLHpvb21TcGVlZDplLnpvb21TcGVlZHx8MSx0cmFuc2xhdGVTcGVlZDplLnRyYW5zbGF0ZVNwZWVkfHwxLGZsaXBYOiEhZS5mbGlwWCxmbGlwWTohIWUuZmxpcFksbW9kZXM6Yy5tb2Rlcyxfb3J0aG86ZS5fb3J0aG98fGUucHJvamVjdGlvbiYmIm9ydGhvZ3JhcGhpYyI9PT1lLnByb2plY3Rpb24udHlwZXx8ITEsdGljazpmdW5jdGlvbigpe3ZhciBlPW4oKSxyPXRoaXMuZGVsYXksaT1lLTIqcjtjLmlkbGUoZS1yKSxjLnJlY2FsY01hdHJpeChpKSxjLmZsdXNoKGUtKDEwMCsyKnIpKTtmb3IodmFyIGE9ITAsbz1jLmNvbXB1dGVkTWF0cml4LHM9MDtzPDE2OysrcylhPWEmJnVbc109PT1vW3NdLHVbc109b1tzXTt2YXIgbD10LmNsaWVudFdpZHRoPT09aCYmdC5jbGllbnRIZWlnaHQ9PT1wO3JldHVybiBoPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxhPyFsOihmPU1hdGguZXhwKGMuY29tcHV0ZWRSYWRpdXNbMF0pLCEwKX0sbG9va0F0OmZ1bmN0aW9uKHQsZSxyKXtjLmxvb2tBdChjLmxhc3RUKCksdCxlLHIpfSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe2Mucm90YXRlKGMubGFzdFQoKSx0LGUscil9LHBhbjpmdW5jdGlvbih0LGUscil7Yy5wYW4oYy5sYXN0VCgpLHQsZSxyKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnRyYW5zbGF0ZShjLmxhc3RUKCksdCxlLHIpfX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGQse21hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRNYXRyaXh9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXRNYXRyaXgoYy5sYXN0VCgpLHQpLGMuY29tcHV0ZWRNYXRyaXh9LGVudW1lcmFibGU6ITB9LG1vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmdldE1vZGUoKX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWMuY29tcHV0ZWRVcC5zbGljZSgpLHI9Yy5jb21wdXRlZEV5ZS5zbGljZSgpLGk9Yy5jb21wdXRlZENlbnRlci5zbGljZSgpO2lmKGMuc2V0TW9kZSh0KSwidHVybnRhYmxlIj09PXQpe3ZhciBhPW4oKTtjLl9hY3RpdmUubG9va0F0KGEscixpLGUpLGMuX2FjdGl2ZS5sb29rQXQoYSs1MDAscixpLFswLDAsMV0pLGMuX2FjdGl2ZS5mbHVzaChhKX1yZXR1cm4gYy5nZXRNb2RlKCl9LGVudW1lcmFibGU6ITB9LGNlbnRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRDZW50ZXJ9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsdCksYy5jb21wdXRlZENlbnRlcn0sZW51bWVyYWJsZTohMH0sZXllOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZEV5ZX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksdCksYy5jb21wdXRlZEV5ZX0sZW51bWVyYWJsZTohMH0sdXA6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkVXB9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsbnVsbCx0KSxjLmNvbXB1dGVkVXB9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlKGMubGFzdFQoKSx0KSx0fSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZUxpbWl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0RGlzdGFuY2VMaW1pdHMocil9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXREaXN0YW5jZUxpbWl0cyh0KSx0fSxlbnVtZXJhYmxlOiEwfX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLCExfSkpLGQuX2xhc3RYPS0xLGQuX2xhc3RZPS0xLGQuX2xhc3RNb2RzPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfSxkLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsaSxhKXt2YXIgbz1kLmtleUJpbmRpbmdNb2RlO2lmKCExIT09byl7dmFyIHM9InJvdGF0ZSI9PT1vLGw9InBhbiI9PT1vLHU9Inpvb20iPT09byxoPSEhYS5jb250cm9sLHA9ISFhLmFsdCxnPSEhYS5zaGlmdCxtPSEhKDEmZSksdj0hISgyJmUpLHk9ISEoNCZlKSx4PTEvdC5jbGllbnRIZWlnaHQsYj14KihyLWQuX2xhc3RYKSxfPXgqKGktZC5fbGFzdFkpLHc9ZC5mbGlwWD8xOi0xLFQ9ZC5mbGlwWT8xOi0xLGs9TWF0aC5QSSpkLnJvdGF0ZVNwZWVkLE09bigpO2lmKC0xIT09ZC5fbGFzdFgmJi0xIT09ZC5fbGFzdFkmJigocyYmbSYmIWgmJiFwJiYhZ3x8bSYmIWgmJiFwJiZnKSYmYy5yb3RhdGUoTSx3KmsqYiwtVCprKl8sMCksKGwmJm0mJiFoJiYhcCYmIWd8fHZ8fG0mJmgmJiFwJiYhZykmJmMucGFuKE0sLWQudHJhbnNsYXRlU3BlZWQqYipmLGQudHJhbnNsYXRlU3BlZWQqXypmLDApLHUmJm0mJiFoJiYhcCYmIWd8fHl8fG0mJiFoJiZwJiYhZykpe3ZhciBBPS1kLnpvb21TcGVlZCpfL3dpbmRvdy5pbm5lckhlaWdodCooTS1jLmxhc3RUKCkpKjEwMDtjLnBhbihNLDAsMCxmKihNYXRoLmV4cChBKS0xKSl9cmV0dXJuIGQuX2xhc3RYPXIsZC5fbGFzdFk9aSxkLl9sYXN0TW9kcz1hLCEwfX1kLm1vdXNlTGlzdGVuZXI9YSh0LGUpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsKGZ1bmN0aW9uKHIpe3ZhciBuPXMoci5jaGFuZ2VkVG91Y2hlc1swXSx0KTtlKDAsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxlKDEsblswXSxuWzFdLGQuX2xhc3RNb2RzKX0pLCEhbCYme3Bhc3NpdmU6ITB9KSx0LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsKGZ1bmN0aW9uKHIpe3ZhciBuPXMoci5jaGFuZ2VkVG91Y2hlc1swXSx0KTtlKDEsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxyLnByZXZlbnREZWZhdWx0KCl9KSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsKGZ1bmN0aW9uKHQpe2UoMCxkLl9sYXN0WCxkLl9sYXN0WSxkLl9sYXN0TW9kcyl9KSwhIWwmJntwYXNzaXZlOiEwfSksZC53aGVlbExpc3RlbmVyPW8odCwoZnVuY3Rpb24odCxlKXtpZighMSE9PWQua2V5QmluZGluZ01vZGUmJmQuZW5hYmxlV2hlZWwpe3ZhciByPWQuZmxpcFg/MTotMSxpPWQuZmxpcFk/MTotMSxhPW4oKTtpZihNYXRoLmFicyh0KT5NYXRoLmFicyhlKSljLnJvdGF0ZShhLDAsMCwtdCpyKk1hdGguUEkqZC5yb3RhdGVTcGVlZC93aW5kb3cuaW5uZXJXaWR0aCk7ZWxzZSBpZighZC5fb3J0aG8pe3ZhciBvPS1kLnpvb21TcGVlZCppKmUvd2luZG93LmlubmVySGVpZ2h0KihhLWMubGFzdFQoKSkvMjA7Yy5wYW4oYSwwLDAsZiooTWF0aC5leHAobyktMSkpfX19KSwhMCl9LGQuZW5hYmxlTW91c2VMaXN0ZW5lcnMoKSxkfTt2YXIgbj10KCJyaWdodC1ub3ciKSxpPXQoIjNkLXZpZXciKSxhPXQoIm1vdXNlLWNoYW5nZSIpLG89dCgibW91c2Utd2hlZWwiKSxzPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGw9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIil9LHsiM2QtdmlldyI6NTQsImhhcy1wYXNzaXZlLWV2ZW50cyI6NDQxLCJtb3VzZS1jaGFuZ2UiOjQ4MywibW91c2UtZXZlbnQtb2Zmc2V0Ijo0ODQsIm1vdXNlLXdoZWVsIjo0ODYsInJpZ2h0LW5vdyI6NTQyfV0sMzE5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG52YXJ5aW5nIHZlYzIgdXY7XG52b2lkIG1haW4oKSB7XG4gIHV2ID0gcG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMCwgMSk7XG59Il0pLG89bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgYWNjdW1CdWZmZXI7XG52YXJ5aW5nIHZlYzIgdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzIifV0pfX0seyJnbC1zaGFkZXIiOjMzNSxnbHNsaWZ5OjMyMH1dLDMyMDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNTddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNTd9XSwzMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jYW1lcmEuanMiKSxpPXQoImdsLWF4ZXMzZCIpLGE9dCgiZ2wtYXhlczNkL3Byb3BlcnRpZXMiKSxvPXQoImdsLXNwaWtlczNkIikscz10KCJnbC1zZWxlY3Qtc3RhdGljIiksbD10KCJnbC1mYm8iKSxjPXQoImEtYmlnLXRyaWFuZ2xlIiksdT10KCJtb3VzZS1jaGFuZ2UiKSxmPXQoImdsLW1hdDQvcGVyc3BlY3RpdmUiKSxoPXQoImdsLW1hdDQvb3J0aG8iKSxwPXQoIi4vbGliL3NoYWRlciIpLGQ9dCgiaXMtbW9iaWxlIikoe3RhYmxldDohMCxmZWF0dXJlRGV0ZWN0OiEwfSk7ZnVuY3Rpb24gZygpe3RoaXMubW91c2U9Wy0xLC0xXSx0aGlzLnNjcmVlbj1udWxsLHRoaXMuZGlzdGFuY2U9MS8wLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmRhdGFDb29yZGluYXRlPW51bGwsdGhpcy5kYXRhUG9zaXRpb249bnVsbCx0aGlzLm9iamVjdD1udWxsLHRoaXMuZGF0YT1udWxsfWZ1bmN0aW9uIG0odCl7dmFyIGU9TWF0aC5yb3VuZChNYXRoLmxvZyhNYXRoLmFicyh0KSkvTWF0aC5sb2coMTApKTtpZihlPDApe3ZhciByPU1hdGgucm91bmQoTWF0aC5wb3coMTAsLWUpKTtyZXR1cm4gTWF0aC5jZWlsKHQqcikvcn1pZihlPjApe3I9TWF0aC5yb3VuZChNYXRoLnBvdygxMCxlKSk7cmV0dXJuIE1hdGguY2VpbCh0L3IpKnJ9cmV0dXJuIE1hdGguY2VpbCh0KX1mdW5jdGlvbiB2KHQpe3JldHVybiJib29sZWFuIiE9dHlwZW9mIHR8fHR9ZS5leHBvcnRzPXtjcmVhdGVTY2VuZTpmdW5jdGlvbih0KXsodD10fHx7fSkuY2FtZXJhPXQuY2FtZXJhfHx7fTt2YXIgZT10LmNhbnZhcztpZighZSl7aWYoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0LmNvbnRhaW5lcil0LmNvbnRhaW5lci5hcHBlbmRDaGlsZChlKTtlbHNlIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSl9dmFyIHI9dC5nbDtyfHwodC5nbE9wdGlvbnMmJihkPSEhdC5nbE9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSxyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbDt0cnl7KHI9dC5nZXRDb250ZXh0KCJ3ZWJnbCIsZSkpfHwocj10LmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsZSkpfWNhdGNoKHQpe3JldHVybiBudWxsfXJldHVybiByfShlLHQuZ2xPcHRpb25zfHx7cHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ZH0pKTtpZighcil0aHJvdyBuZXcgRXJyb3IoIndlYmdsIG5vdCBzdXBwb3J0ZWQiKTt2YXIgeT10LmJvdW5kc3x8W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0seD1uZXcgZyxiPWwocixyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHQse3ByZWZlckZsb2F0OiFkfSksXz1wKHIpLHc9dC5jYW1lcmFPYmplY3QmJiEwPT09dC5jYW1lcmFPYmplY3QuX29ydGhvfHx0LmNhbWVyYS5wcm9qZWN0aW9uJiYib3J0aG9ncmFwaGljIj09PXQuY2FtZXJhLnByb2plY3Rpb24udHlwZXx8ITEsVD17ZXllOnQuY2FtZXJhLmV5ZXx8WzIsMCwwXSxjZW50ZXI6dC5jYW1lcmEuY2VudGVyfHxbMCwwLDBdLHVwOnQuY2FtZXJhLnVwfHxbMCwxLDBdLHpvb21NaW46dC5jYW1lcmEuem9vbU1heHx8LjEsem9vbU1heDp0LmNhbWVyYS56b29tTWlufHwxMDAsbW9kZTp0LmNhbWVyYS5tb2RlfHwidHVybnRhYmxlIixfb3J0aG86d30saz10LmF4ZXN8fHt9LE09aShyLGspO00uZW5hYmxlPSFrLmRpc2FibGU7dmFyIEE9dC5zcGlrZXN8fHt9LFM9byhyLEEpLEU9W10sQz1bXSxMPVtdLEk9W10sUD0hMCx6PSEwLE89bmV3IEFycmF5KDE2KSxEPW5ldyBBcnJheSgxNiksUj17dmlldzpudWxsLHByb2plY3Rpb246Tyxtb2RlbDpELF9vcnRobzohMX0sRj0oej0hMCxbci5kcmF3aW5nQnVmZmVyV2lkdGgsci5kcmF3aW5nQnVmZmVySGVpZ2h0XSksQj10LmNhbWVyYU9iamVjdHx8bihlLFQpLE49e2dsOnIsY29udGV4dExvc3Q6ITEscGl4ZWxSYXRpbzp0LnBpeGVsUmF0aW98fDEsY2FudmFzOmUsc2VsZWN0aW9uOngsY2FtZXJhOkIsYXhlczpNLGF4ZXNQaXhlbHM6bnVsbCxzcGlrZXM6Uyxib3VuZHM6eSxvYmplY3RzOkUsc2hhcGU6Rixhc3BlY3Q6dC5hc3BlY3RSYXRpb3x8WzEsMSwxXSxwaWNrUmFkaXVzOnQucGlja1JhZGl1c3x8MTAsek5lYXI6dC56TmVhcnx8LjAxLHpGYXI6dC56RmFyfHwxZTMsZm92eTp0LmZvdnl8fE1hdGguUEkvNCxjbGVhckNvbG9yOnQuY2xlYXJDb2xvcnx8WzAsMCwwLDBdLGF1dG9SZXNpemU6dih0LmF1dG9SZXNpemUpLGF1dG9Cb3VuZHM6dih0LmF1dG9Cb3VuZHMpLGF1dG9TY2FsZTohIXQuYXV0b1NjYWxlLGF1dG9DZW50ZXI6dih0LmF1dG9DZW50ZXIpLGNsaXBUb0JvdW5kczp2KHQuY2xpcFRvQm91bmRzKSxzbmFwVG9EYXRhOiEhdC5zbmFwVG9EYXRhLG9uc2VsZWN0OnQub25zZWxlY3R8fG51bGwsb25yZW5kZXI6dC5vbnJlbmRlcnx8bnVsbCxvbmNsaWNrOnQub25jbGlja3x8bnVsbCxjYW1lcmFQYXJhbXM6UixvbmNvbnRleHRsb3NzOm51bGwsbW91c2VMaXN0ZW5lcjpudWxsLF9zdG9wcGVkOiExLGdldEFzcGVjdHJhdGlvOmZ1bmN0aW9uKCl7cmV0dXJue3g6dGhpcy5hc3BlY3RbMF0seTp0aGlzLmFzcGVjdFsxXSx6OnRoaXMuYXNwZWN0WzJdfX0sc2V0QXNwZWN0cmF0aW86ZnVuY3Rpb24odCl7dGhpcy5hc3BlY3RbMF09dC54LHRoaXMuYXNwZWN0WzFdPXQueSx0aGlzLmFzcGVjdFsyXT10Lnosej0hMH0sc2V0Qm91bmRzOmZ1bmN0aW9uKHQsZSl7dGhpcy5ib3VuZHNbMF1bdF09ZS5taW4sdGhpcy5ib3VuZHNbMV1bdF09ZS5tYXh9LHNldENsZWFyQ29sb3I6ZnVuY3Rpb24odCl7dGhpcy5jbGVhckNvbG9yPXR9LGNsZWFyUkdCQTpmdW5jdGlvbigpe3RoaXMuZ2wuY2xlYXJDb2xvcih0aGlzLmNsZWFyQ29sb3JbMF0sdGhpcy5jbGVhckNvbG9yWzFdLHRoaXMuY2xlYXJDb2xvclsyXSx0aGlzLmNsZWFyQ29sb3JbM10pLHRoaXMuZ2wuY2xlYXIodGhpcy5nbC5DT0xPUl9CVUZGRVJfQklUfHRoaXMuZ2wuREVQVEhfQlVGRkVSX0JJVCl9fSxqPVtyLmRyYXdpbmdCdWZmZXJXaWR0aC9OLnBpeGVsUmF0aW98MCxyLmRyYXdpbmdCdWZmZXJIZWlnaHQvTi5waXhlbFJhdGlvfDBdO2Z1bmN0aW9uIFUoKXtpZighTi5fc3RvcHBlZCYmTi5hdXRvUmVzaXplKXt2YXIgdD1lLnBhcmVudE5vZGUscj0xLG49MTt0JiZ0IT09ZG9jdW1lbnQuYm9keT8ocj10LmNsaWVudFdpZHRoLG49dC5jbGllbnRIZWlnaHQpOihyPXdpbmRvdy5pbm5lcldpZHRoLG49d2luZG93LmlubmVySGVpZ2h0KTt2YXIgaT0wfE1hdGguY2VpbChyKk4ucGl4ZWxSYXRpbyksYT0wfE1hdGguY2VpbChuKk4ucGl4ZWxSYXRpbyk7aWYoaSE9PWUud2lkdGh8fGEhPT1lLmhlaWdodCl7ZS53aWR0aD1pLGUuaGVpZ2h0PWE7dmFyIG89ZS5zdHlsZTtvLnBvc2l0aW9uPW8ucG9zaXRpb258fCJhYnNvbHV0ZSIsby5sZWZ0PSIwcHgiLG8udG9wPSIwcHgiLG8ud2lkdGg9cisicHgiLG8uaGVpZ2h0PW4rInB4IixQPSEwfX19Ti5hdXRvUmVzaXplJiZVKCk7ZnVuY3Rpb24gVigpe2Zvcih2YXIgdD1FLmxlbmd0aCxlPUkubGVuZ3RoLG49MDtuPGU7KytuKUxbbl09MDt0OmZvcihuPTA7bjx0Oysrbil7dmFyIGk9RVtuXSxhPWkucGlja1Nsb3RzO2lmKGEpe2Zvcih2YXIgbz0wO288ZTsrK28paWYoTFtvXSthPDI1NSl7Q1tuXT1vLGkuc2V0UGlja0Jhc2UoTFtvXSsxKSxMW29dKz1hO2NvbnRpbnVlIHR9dmFyIGw9cyhyLEYpO0Nbbl09ZSxJLnB1c2gobCksTC5wdXNoKGEpLGkuc2V0UGlja0Jhc2UoMSksZSs9MX1lbHNlIENbbl09LTF9Zm9yKDtlPjAmJjA9PT1MW2UtMV07KUwucG9wKCksSS5wb3AoKS5kaXNwb3NlKCl9ZnVuY3Rpb24gcSgpe2lmKE4uY29udGV4dExvc3QpcmV0dXJuITA7ci5pc0NvbnRleHRMb3N0KCkmJihOLmNvbnRleHRMb3N0PSEwLE4ubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLE4uc2VsZWN0aW9uLm9iamVjdD1udWxsLE4ub25jb250ZXh0bG9zcyYmTi5vbmNvbnRleHRsb3NzKCkpfXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLFUpLE4udXBkYXRlPWZ1bmN0aW9uKHQpe04uX3N0b3BwZWR8fCh0PXR8fHt9LFA9ITAsej0hMCl9LE4uYWRkPWZ1bmN0aW9uKHQpe04uX3N0b3BwZWR8fCh0LmF4ZXM9TSxFLnB1c2godCksQy5wdXNoKC0xKSxQPSEwLHo9ITAsVigpKX0sTi5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoIU4uX3N0b3BwZWQpe3ZhciBlPUUuaW5kZXhPZih0KTtlPDB8fChFLnNwbGljZShlLDEpLEMucG9wKCksUD0hMCx6PSEwLFYoKSl9fSxOLmRpc3Bvc2U9ZnVuY3Rpb24oKXtpZighTi5fc3RvcHBlZCYmKE4uX3N0b3BwZWQ9ITAsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsVSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixxKSxOLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSwhTi5jb250ZXh0TG9zdCkpe00uZGlzcG9zZSgpLFMuZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8RS5sZW5ndGg7Kyt0KUVbdF0uZGlzcG9zZSgpO2IuZGlzcG9zZSgpO2Zvcih0PTA7dDxJLmxlbmd0aDsrK3QpSVt0XS5kaXNwb3NlKCk7Xy5kaXNwb3NlKCkscj1udWxsLE09bnVsbCxTPW51bGwsRT1bXX19LE4uX21vdXNlUm90YXRpbmc9ITEsTi5fcHJldkJ1dHRvbnM9MCxOLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7Ti5tb3VzZUxpc3RlbmVyPXUoZSwoZnVuY3Rpb24odCxlLHIpe2lmKCFOLl9zdG9wcGVkKXt2YXIgbj1JLmxlbmd0aCxpPUUubGVuZ3RoLGE9eC5vYmplY3Q7eC5kaXN0YW5jZT0xLzAseC5tb3VzZVswXT1lLHgubW91c2VbMV09cix4Lm9iamVjdD1udWxsLHguc2NyZWVuPW51bGwseC5kYXRhQ29vcmRpbmF0ZT14LmRhdGFQb3NpdGlvbj1udWxsO3ZhciBvPSExO2lmKHQmJk4uX3ByZXZCdXR0b25zKU4uX21vdXNlUm90YXRpbmc9ITA7ZWxzZXtOLl9tb3VzZVJvdGF0aW5nJiYoej0hMCksTi5fbW91c2VSb3RhdGluZz0hMTtmb3IodmFyIHM9MDtzPG47KytzKXt2YXIgbD1JW3NdLnF1ZXJ5KGUsalsxXS1yLTEsTi5waWNrUmFkaXVzKTtpZihsKXtpZihsLmRpc3RhbmNlPnguZGlzdGFuY2UpY29udGludWU7Zm9yKHZhciBjPTA7YzxpOysrYyl7dmFyIHU9RVtjXTtpZihDW2NdPT09cyl7dmFyIGY9dS5waWNrKGwpO2YmJih4LmJ1dHRvbnM9dCx4LnNjcmVlbj1sLmNvb3JkLHguZGlzdGFuY2U9bC5kaXN0YW5jZSx4Lm9iamVjdD11LHguaW5kZXg9Zi5kaXN0YW5jZSx4LmRhdGFQb3NpdGlvbj1mLnBvc2l0aW9uLHguZGF0YUNvb3JkaW5hdGU9Zi5kYXRhQ29vcmRpbmF0ZSx4LmRhdGE9ZixvPSEwKX19fX19YSYmYSE9PXgub2JqZWN0JiYoYS5oaWdobGlnaHQmJmEuaGlnaGxpZ2h0KG51bGwpLFA9ITApLHgub2JqZWN0JiYoeC5vYmplY3QuaGlnaGxpZ2h0JiZ4Lm9iamVjdC5oaWdobGlnaHQoeC5kYXRhKSxQPSEwKSwobz1vfHx4Lm9iamVjdCE9PWEpJiZOLm9uc2VsZWN0JiZOLm9uc2VsZWN0KHgpLDEmdCYmISgxJk4uX3ByZXZCdXR0b25zKSYmTi5vbmNsaWNrJiZOLm9uY2xpY2soeCksTi5fcHJldkJ1dHRvbnM9dH19KSl9LGUuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIscSk7dmFyIEg9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sRz1bSFswXS5zbGljZSgpLEhbMV0uc2xpY2UoKV07ZnVuY3Rpb24gWSgpe2lmKCFxKCkpe1UoKTt2YXIgdD1OLmNhbWVyYS50aWNrKCk7Ui52aWV3PU4uY2FtZXJhLm1hdHJpeCxQPVB8fHQsej16fHx0LE0ucGl4ZWxSYXRpbz1OLnBpeGVsUmF0aW8sUy5waXhlbFJhdGlvPU4ucGl4ZWxSYXRpbzt2YXIgZT1FLmxlbmd0aCxuPUhbMF0saT1IWzFdO25bMF09blsxXT1uWzJdPTEvMCxpWzBdPWlbMV09aVsyXT0tMS8wO2Zvcih2YXIgbz0wO288ZTsrK28peyhMPUVbb10pLnBpeGVsUmF0aW89Ti5waXhlbFJhdGlvLEwuYXhlcz1OLmF4ZXMsUD1QfHwhIUwuZGlydHksej16fHwhIUwuZGlydHk7dmFyIHM9TC5ib3VuZHM7aWYocylmb3IodmFyIGw9c1swXSx1PXNbMV0scD0wO3A8MzsrK3ApbltwXT1NYXRoLm1pbihuW3BdLGxbcF0pLGlbcF09TWF0aC5tYXgoaVtwXSx1W3BdKX12YXIgZD1OLmJvdW5kcztpZihOLmF1dG9Cb3VuZHMpZm9yKHA9MDtwPDM7KytwKXtpZihpW3BdPG5bcF0pbltwXT0tMSxpW3BdPTE7ZWxzZXtuW3BdPT09aVtwXSYmKG5bcF0tPTEsaVtwXSs9MSk7dmFyIGc9LjA1KihpW3BdLW5bcF0pO25bcF09bltwXS1nLGlbcF09aVtwXStnfWRbMF1bcF09bltwXSxkWzFdW3BdPWlbcF19dmFyIHY9ITE7Zm9yKHA9MDtwPDM7KytwKXY9dnx8R1swXVtwXSE9PWRbMF1bcF18fEdbMV1bcF0hPT1kWzFdW3BdLEdbMF1bcF09ZFswXVtwXSxHWzFdW3BdPWRbMV1bcF07aWYoej16fHx2LFA9UHx8dil7aWYodil7dmFyIHk9WzAsMCwwXTtmb3Iobz0wO288MzsrK28peVtvXT1tKChkWzFdW29dLWRbMF1bb10pLzEwKTtNLmF1dG9UaWNrcz9NLnVwZGF0ZSh7Ym91bmRzOmQsdGlja1NwYWNpbmc6eX0pOk0udXBkYXRlKHtib3VuZHM6ZH0pfXZhciBUPXIuZHJhd2luZ0J1ZmZlcldpZHRoLGs9ci5kcmF3aW5nQnVmZmVySGVpZ2h0O0ZbMF09VCxGWzFdPWssalswXT0wfE1hdGgubWF4KFQvTi5waXhlbFJhdGlvLDEpLGpbMV09MHxNYXRoLm1heChrL04ucGl4ZWxSYXRpbywxKSxmdW5jdGlvbih0LGUpe3ZhciByPXQuYm91bmRzLG49dC5jYW1lcmFQYXJhbXMsaT1uLnByb2plY3Rpb24sYT1uLm1vZGVsLG89dC5nbC5kcmF3aW5nQnVmZmVyV2lkdGgscz10LmdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsbD10LnpOZWFyLGM9dC56RmFyLHU9dC5mb3Z5LHA9by9zO2U/KGgoaSwtcCxwLC0xLDEsbCxjKSxuLl9vcnRobz0hMCk6KGYoaSx1LHAsbCxjKSxuLl9vcnRobz0hMSk7Zm9yKHZhciBkPTA7ZDwxNjsrK2QpYVtkXT0wO2FbMTVdPTE7dmFyIGc9MDtmb3IoZD0wO2Q8MzsrK2QpZz1NYXRoLm1heChnLHJbMV1bZF0tclswXVtkXSk7Zm9yKGQ9MDtkPDM7KytkKXQuYXV0b1NjYWxlP2FbNSpkXT10LmFzcGVjdFtkXS8oclsxXVtkXS1yWzBdW2RdKTphWzUqZF09MS9nLHQuYXV0b0NlbnRlciYmKGFbMTIrZF09LjUqLWFbNSpkXSooclswXVtkXStyWzFdW2RdKSl9KE4sdyk7Zm9yKG89MDtvPGU7KytvKXsoTD1FW29dKS5heGVzQm91bmRzPWQsTi5jbGlwVG9Cb3VuZHMmJihMLmNsaXBCb3VuZHM9ZCl9eC5vYmplY3QmJihOLnNuYXBUb0RhdGE/Uy5wb3NpdGlvbj14LmRhdGFDb29yZGluYXRlOlMucG9zaXRpb249eC5kYXRhUG9zaXRpb24sUy5ib3VuZHM9ZCkseiYmKHo9ITEsZnVuY3Rpb24oKXtpZighcSgpKXtyLmNvbG9yTWFzayghMCwhMCwhMCwhMCksci5kZXB0aE1hc2soITApLHIuZGlzYWJsZShyLkJMRU5EKSxyLmVuYWJsZShyLkRFUFRIX1RFU1QpLHIuZGVwdGhGdW5jKHIuTEVRVUFMKTtmb3IodmFyIHQ9RS5sZW5ndGgsZT1JLmxlbmd0aCxuPTA7bjxlOysrbil7dmFyIGk9SVtuXTtpLnNoYXBlPWosaS5iZWdpbigpO2Zvcih2YXIgYT0wO2E8dDsrK2EpaWYoQ1thXT09PW4pe3ZhciBvPUVbYV07by5kcmF3UGljayYmKG8ucGl4ZWxSYXRpbz0xLG8uZHJhd1BpY2soUikpfWkuZW5kKCl9fX0oKSksTi5heGVzUGl4ZWxzPWEoTi5heGVzLFIsVCxrKSxOLm9ucmVuZGVyJiZOLm9ucmVuZGVyKCksci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLnZpZXdwb3J0KDAsMCxULGspLE4uY2xlYXJSR0JBKCksci5kZXB0aE1hc2soITApLHIuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxyLmVuYWJsZShyLkRFUFRIX1RFU1QpLHIuZGVwdGhGdW5jKHIuTEVRVUFMKSxyLmRpc2FibGUoci5CTEVORCksci5kaXNhYmxlKHIuQ1VMTF9GQUNFKTt2YXIgQT0hMTtNLmVuYWJsZSYmKEE9QXx8TS5pc1RyYW5zcGFyZW50KCksTS5kcmF3KFIpKSxTLmF4ZXM9TSx4Lm9iamVjdCYmUy5kcmF3KFIpLHIuZGlzYWJsZShyLkNVTExfRkFDRSk7Zm9yKG89MDtvPGU7KytvKXsoTD1FW29dKS5heGVzPU0sTC5waXhlbFJhdGlvPU4ucGl4ZWxSYXRpbyxMLmlzT3BhcXVlJiZMLmlzT3BhcXVlKCkmJkwuZHJhdyhSKSxMLmlzVHJhbnNwYXJlbnQmJkwuaXNUcmFuc3BhcmVudCgpJiYoQT0hMCl9aWYoQSl7Yi5zaGFwZT1GLGIuYmluZCgpLHIuY2xlYXIoci5ERVBUSF9CVUZGRVJfQklUKSxyLmNvbG9yTWFzayghMSwhMSwhMSwhMSksci5kZXB0aE1hc2soITApLHIuZGVwdGhGdW5jKHIuTEVTUyksTS5lbmFibGUmJk0uaXNUcmFuc3BhcmVudCgpJiZNLmRyYXdUcmFuc3BhcmVudChSKTtmb3Iobz0wO288ZTsrK28peyhMPUVbb10pLmlzT3BhcXVlJiZMLmlzT3BhcXVlKCkmJkwuZHJhdyhSKX1yLmVuYWJsZShyLkJMRU5EKSxyLmJsZW5kRXF1YXRpb24oci5GVU5DX0FERCksci5ibGVuZEZ1bmMoci5PTkUsci5PTkVfTUlOVVNfU1JDX0FMUEhBKSxyLmNvbG9yTWFzayghMCwhMCwhMCwhMCksci5kZXB0aE1hc2soITEpLHIuY2xlYXJDb2xvcigwLDAsMCwwKSxyLmNsZWFyKHIuQ09MT1JfQlVGRkVSX0JJVCksTS5pc1RyYW5zcGFyZW50KCkmJk0uZHJhd1RyYW5zcGFyZW50KFIpO2ZvcihvPTA7bzxlOysrbyl7dmFyIEw7KEw9RVtvXSkuaXNUcmFuc3BhcmVudCYmTC5pc1RyYW5zcGFyZW50KCkmJkwuZHJhd1RyYW5zcGFyZW50KFIpfXIuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbnVsbCksci5ibGVuZEZ1bmMoci5PTkUsci5PTkVfTUlOVVNfU1JDX0FMUEhBKSxyLmRpc2FibGUoci5ERVBUSF9URVNUKSxfLmJpbmQoKSxiLmNvbG9yWzBdLmJpbmQoMCksXy51bmlmb3Jtcy5hY2N1bUJ1ZmZlcj0wLGMociksci5kaXNhYmxlKHIuQkxFTkQpfVA9ITE7Zm9yKG89MDtvPGU7KytvKUVbb10uZGlydHk9ITF9fX1yZXR1cm4gTi5lbmFibGVNb3VzZUxpc3RlbmVycygpLGZ1bmN0aW9uIHQoKXtpZihOLl9zdG9wcGVkfHxOLmNvbnRleHRMb3N0KXJldHVybjtZKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfSgpLE4ucmVkcmF3PWZ1bmN0aW9uKCl7Ti5fc3RvcHBlZHx8KFA9ITAsWSgpKX0sTn0sY3JlYXRlQ2FtZXJhOm59fSx7Ii4vY2FtZXJhLmpzIjozMTgsIi4vbGliL3NoYWRlciI6MzE5LCJhLWJpZy10cmlhbmdsZSI6NjQsImdsLWF4ZXMzZCI6MjUwLCJnbC1heGVzM2QvcHJvcGVydGllcyI6MjU4LCJnbC1mYm8iOjI2OSwiZ2wtbWF0NC9vcnRobyI6Mjk2LCJnbC1tYXQ0L3BlcnNwZWN0aXZlIjoyOTcsImdsLXNlbGVjdC1zdGF0aWMiOjMzNCwiZ2wtc3Bpa2VzM2QiOjM0NSwiaXMtbW9iaWxlIjo0NjcsIm1vdXNlLWNoYW5nZSI6NDgzfV0sMzIyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpO3IucG9pbnRWZXJ0ZXg9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0MyBtYXRyaXg7XG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZTtcbnVuaWZvcm0gZmxvYXQgcG9pbnRDbG91ZDtcblxuaGlnaHAgZmxvYXQgcmFuZCh2ZWMyIGNvKSB7XG4gIGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4O1xuICBoaWdocCBmbG9hdCBiID0gNzguMjMzO1xuICBoaWdocCBmbG9hdCBjID0gNDM3NTguNTQ1MztcbiAgaGlnaHAgZmxvYXQgZCA9IGRvdChjby54eSwgdmVjMihhLCBiKSk7XG4gIGhpZ2hwIGZsb2F0IGUgPSBtb2QoZCwgMy4xNCk7XG4gIHJldHVybiBmcmFjdChzaW4oZSkgKiBjKTtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGhnUG9zaXRpb24gPSBtYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxKTtcbiAgZ2xfUG9zaXRpb24gID0gdmVjNChoZ1Bvc2l0aW9uLnh5LCAwLCBoZ1Bvc2l0aW9uLnopO1xuICAgIC8vIGlmIHdlIGRvbid0IGppdHRlciB0aGUgcG9pbnQgc2l6ZSBhIGJpdCwgb3ZlcmFsbCBwb2ludCBjbG91ZFxuICAgIC8vIHNhdHVyYXRpb24gJ2p1bXBzJyBvbiB6b29taW5nLCB3aGljaCBpcyBkaXN0dXJiaW5nIGFuZCBjb25mdXNpbmdcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplICogKCgxOS41ICsgcmFuZChwb3NpdGlvbikpIC8gMjAuMCk7XG4gIGlmKHBvaW50Q2xvdWQgIT0gMC4wKSB7IC8vIHBvaW50Q2xvdWQgaXMgdHJ1dGh5XG4gICAgLy8gZ2V0IHRoZSBzYW1lIHNxdWFyZSBzdXJmYWNlIGFzIGNpcmNsZSB3b3VsZCBiZVxuICAgIGdsX1BvaW50U2l6ZSAqPSAwLjg4NjtcbiAgfVxufSJdKSxyLnBvaW50RnJhZ21lbnQ9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yLCBib3JkZXJDb2xvcjtcbnVuaWZvcm0gZmxvYXQgY2VudGVyRnJhY3Rpb247XG51bmlmb3JtIGZsb2F0IHBvaW50Q2xvdWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgcmFkaXVzO1xuICB2ZWM0IGJhc2VDb2xvcjtcbiAgaWYocG9pbnRDbG91ZCAhPSAwLjApIHsgLy8gcG9pbnRDbG91ZCBpcyB0cnV0aHlcbiAgICBpZihjZW50ZXJGcmFjdGlvbiA9PSAxLjApIHtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBnbF9GcmFnQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBjZW50ZXJGcmFjdGlvbik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcbiAgICBpZihyYWRpdXMgPiAxLjApIHtcbiAgICAgIGRpc2NhcmQ7XG4gICAgfVxuICAgIGJhc2VDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIHN0ZXAocmFkaXVzLCBjZW50ZXJGcmFjdGlvbikpO1xuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoYmFzZUNvbG9yLnJnYiAqIGJhc2VDb2xvci5hLCBiYXNlQ29sb3IuYSk7XG4gIH1cbn1cbiJdKSxyLnBpY2tWZXJ0ZXg9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBwaWNrSWQ7XG5cbnVuaWZvcm0gbWF0MyBtYXRyaXg7XG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZTtcbnVuaWZvcm0gdmVjNCBwaWNrT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgaGdQb3NpdGlvbiA9IG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEpO1xuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcblxuICB2ZWM0IGlkID0gcGlja0lkICsgcGlja09mZnNldDtcbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZnJhZ0lkID0gaWQ7XG59XG4iXSksci5waWNrRnJhZ21lbnQ9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG4gIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0lkIC8gMjU1LjA7XG59XG4iXSl9LHtnbHNsaWZ5OjMyM31dLDMyMzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNTddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNTd9XSwzMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoInR5cGVkYXJyYXktcG9vbCIpLG89dCgiLi9saWIvc2hhZGVyIik7ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMucGxvdD10LHRoaXMub2Zmc2V0QnVmZmVyPWUsdGhpcy5waWNrQnVmZmVyPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpY2tTaGFkZXI9aSx0aGlzLnNpemVNaW49LjUsdGhpcy5zaXplTWluQ2FwPTIsdGhpcy5zaXplTWF4PTIwLHRoaXMuYXJlYVJhdGlvPTEsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb2xvcj1bMSwwLDAsMV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5ibGVuZD0hMSx0aGlzLnBpY2tPZmZzZXQ9MCx0aGlzLnBvaW50cz1udWxsfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsYT1pKHIpLGw9aShyKSxjPW4ocixvLnBvaW50VmVydGV4LG8ucG9pbnRGcmFnbWVudCksdT1uKHIsby5waWNrVmVydGV4LG8ucGlja0ZyYWdtZW50KSxmPW5ldyBzKHQsYSxsLGMsdSk7cmV0dXJuIGYudXBkYXRlKGUpLHQuYWRkT2JqZWN0KGYpLGZ9O3ZhciBsLGMsdT1zLnByb3RvdHlwZTt1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9mZnNldEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5waWNrQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZTtmdW5jdGlvbiByKGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9dD10fHx7fSx0aGlzLnNpemVNaW49cigic2l6ZU1pbiIsLjUpLHRoaXMuc2l6ZU1heD1yKCJzaXplTWF4IiwyMCksdGhpcy5jb2xvcj1yKCJjb2xvciIsWzEsMCwwLDFdKS5zbGljZSgpLHRoaXMuYXJlYVJhdGlvPXIoImFyZWFSYXRpbyIsMSksdGhpcy5ib3JkZXJDb2xvcj1yKCJib3JkZXJDb2xvciIsWzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYmxlbmQ9cigiYmxlbmQiLCExKTt2YXIgbj10LnBvc2l0aW9ucy5sZW5ndGg+Pj4xLGk9dC5wb3NpdGlvbnMgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXksbz10LmlkVG9JbmRleCBpbnN0YW5jZW9mIEludDMyQXJyYXkmJnQuaWRUb0luZGV4Lmxlbmd0aD49bixzPXQucG9zaXRpb25zLGw9aT9zOmEubWFsbG9jRmxvYXQzMihzLmxlbmd0aCksYz1vP3QuaWRUb0luZGV4OmEubWFsbG9jSW50MzIobik7aWYoaXx8bC5zZXQocyksIW8pZm9yKGwuc2V0KHMpLGU9MDtlPG47ZSsrKWNbZV09ZTt0aGlzLnBvaW50cz1zLHRoaXMub2Zmc2V0QnVmZmVyLnVwZGF0ZShsKSx0aGlzLnBpY2tCdWZmZXIudXBkYXRlKGMpLGl8fGEuZnJlZShsKSxvfHxhLmZyZWUoYyksdGhpcy5wb2ludENvdW50PW4sdGhpcy5waWNrT2Zmc2V0PTB9LHUudW5pZmllZERyYXc9KGw9WzEsMCwwLDAsMSwwLDAsMCwxXSxjPVswLDAsMCwwXSxmdW5jdGlvbih0KXt2YXIgZT12b2lkIDAhPT10LHI9ZT90aGlzLnBpY2tTaGFkZXI6dGhpcy5zaGFkZXIsbj10aGlzLnBsb3QuZ2wsaT10aGlzLnBsb3QuZGF0YUJveDtpZigwPT09dGhpcy5wb2ludENvdW50KXJldHVybiB0O3ZhciBhPWlbMl0taVswXSxvPWlbM10taVsxXSxzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGg+Pj4xO2ZvcihyPTA7cjxpO3IrKyl7dmFyIGE9dFsyKnJdLG89dFsyKnIrMV07YT49ZVswXSYmYTw9ZVsyXSYmbz49ZVsxXSYmbzw9ZVszXSYmbisrfXJldHVybiBufSh0aGlzLnBvaW50cyxpKSx1PXRoaXMucGxvdC5waWNrUGl4ZWxSYXRpbypNYXRoLm1heChNYXRoLm1pbih0aGlzLnNpemVNaW5DYXAsdGhpcy5zaXplTWluKSxNYXRoLm1pbih0aGlzLnNpemVNYXgsdGhpcy5zaXplTWF4L01hdGgucG93KHMsLjMzMzMzKSkpO2xbMF09Mi9hLGxbNF09Mi9vLGxbNl09LTIqaVswXS9hLTEsbFs3XT0tMippWzFdL28tMSx0aGlzLm9mZnNldEJ1ZmZlci5iaW5kKCksci5iaW5kKCksci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnBvaW50ZXIoKSxyLnVuaWZvcm1zLm1hdHJpeD1sLHIudW5pZm9ybXMuY29sb3I9dGhpcy5jb2xvcixyLnVuaWZvcm1zLmJvcmRlckNvbG9yPXRoaXMuYm9yZGVyQ29sb3Isci51bmlmb3Jtcy5wb2ludENsb3VkPXU8NSxyLnVuaWZvcm1zLnBvaW50U2l6ZT11LHIudW5pZm9ybXMuY2VudGVyRnJhY3Rpb249TWF0aC5taW4oMSxNYXRoLm1heCgwLE1hdGguc3FydCgxLXRoaXMuYXJlYVJhdGlvKSkpLGUmJihjWzBdPTI1NSZ0LGNbMV09dD4+OCYyNTUsY1syXT10Pj4xNiYyNTUsY1szXT10Pj4yNCYyNTUsdGhpcy5waWNrQnVmZmVyLmJpbmQoKSxyLmF0dHJpYnV0ZXMucGlja0lkLnBvaW50ZXIobi5VTlNJR05FRF9CWVRFKSxyLnVuaWZvcm1zLnBpY2tPZmZzZXQ9Yyx0aGlzLnBpY2tPZmZzZXQ9dCk7dmFyIGY9bi5nZXRQYXJhbWV0ZXIobi5CTEVORCksaD1uLmdldFBhcmFtZXRlcihuLkRJVEhFUik7cmV0dXJuIGYmJiF0aGlzLmJsZW5kJiZuLmRpc2FibGUobi5CTEVORCksaCYmbi5kaXNhYmxlKG4uRElUSEVSKSxuLmRyYXdBcnJheXMobi5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLGYmJiF0aGlzLmJsZW5kJiZuLmVuYWJsZShuLkJMRU5EKSxoJiZuLmVuYWJsZShuLkRJVEhFUiksdCt0aGlzLnBvaW50Q291bnR9KSx1LmRyYXc9dS51bmlmaWVkRHJhdyx1LmRyYXdQaWNrPXUudW5pZmllZERyYXcsdS5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLnBvaW50Q291bnQ7aWYocjxufHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIGE9ci1uLG89dGhpcy5wb2ludHM7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bMiphXSxvWzIqYSsxXV19fX0seyIuL2xpYi9zaGFkZXIiOjMyMiwiZ2wtYnVmZmVyIjoyNTksImdsLXNoYWRlciI6MzM1LCJ0eXBlZGFycmF5LXBvb2wiOjU5NX1dLDMyNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGM9ZVswXSx1PWVbMV0sZj1lWzJdLGg9ZVszXSxwPXJbMF0sZD1yWzFdLGc9clsyXSxtPXJbM107KGE9YypwK3UqZCtmKmcraCptKTwwJiYoYT0tYSxwPS1wLGQ9LWQsZz0tZyxtPS1tKTsxLWE+MWUtNj8oaT1NYXRoLmFjb3MoYSksbz1NYXRoLnNpbihpKSxzPU1hdGguc2luKCgxLW4pKmkpL28sbD1NYXRoLnNpbihuKmkpL28pOihzPTEtbixsPW4pO3JldHVybiB0WzBdPXMqYytsKnAsdFsxXT1zKnUrbCpkLHRbMl09cypmK2wqZyx0WzNdPXMqaCtsKm0sdH19LHt9XSwzMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dD90LnRvU3RyaW5nKCk6IiJ9fSx7fV0sMzI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInZlY3Rvcml6ZS10ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1pW2VdO2F8fChhPWlbZV09e30pO2lmKHQgaW4gYSlyZXR1cm4gYVt0XTt2YXIgbz17dGV4dEFsaWduOiJjZW50ZXIiLHRleHRCYXNlbGluZToibWlkZGxlIixsaW5lSGVpZ2h0OjEsZm9udDplLGxpbmVTcGFjaW5nOjEuMjUsc3R5bGV0YWdzOnticmVha2xpbmVzOiEwLGJvbGRzOiEwLGl0YWxpY3M6ITAsc3Vic2NyaXB0czohMCxzdXBlcnNjcmlwdHM6ITB9LHRyaWFuZ2xlczohMH0scz1uKHQsbyk7by50cmlhbmdsZXM9ITE7dmFyIGwsYyx1PW4odCxvKTtpZihyJiYxIT09cil7Zm9yKGw9MDtsPHMucG9zaXRpb25zLmxlbmd0aDsrK2wpZm9yKGM9MDtjPHMucG9zaXRpb25zW2xdLmxlbmd0aDsrK2Mpcy5wb3NpdGlvbnNbbF1bY10vPXI7Zm9yKGw9MDtsPHUucG9zaXRpb25zLmxlbmd0aDsrK2wpZm9yKGM9MDtjPHUucG9zaXRpb25zW2xdLmxlbmd0aDsrK2MpdS5wb3NpdGlvbnNbbF1bY10vPXJ9dmFyIGY9W1sxLzAsMS8wXSxbLTEvMCwtMS8wXV0saD11LnBvc2l0aW9ucy5sZW5ndGg7Zm9yKGw9MDtsPGg7KytsKXt2YXIgcD11LnBvc2l0aW9uc1tsXTtmb3IoYz0wO2M8MjsrK2MpZlswXVtjXT1NYXRoLm1pbihmWzBdW2NdLHBbY10pLGZbMV1bY109TWF0aC5tYXgoZlsxXVtjXSxwW2NdKX1yZXR1cm4gYVt0XT1bcyx1LGZdfTt2YXIgaT17fX0seyJ2ZWN0b3JpemUtdGV4dCI6NjAwfV0sMzI4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbHNsaWZ5IiksYT1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgc2NhbGUgPSAxLjA7XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xuICAgICAgc2NhbGUgPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEpO1xuICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gICAgdmlld1Bvc2l0aW9uID0gdmlld1Bvc2l0aW9uIC8gdmlld1Bvc2l0aW9uLnc7XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogKHZpZXdQb3NpdGlvbiArIHNjYWxlICogdmVjNChnbHlwaC54LCAtZ2x5cGgueSwgMCwgMCkpO1xuXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59Il0pLG89aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGUsIHBpeGVsUmF0aW87XG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgc2NhbGUgPSBwaXhlbFJhdGlvO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLmJnciwgaWQuYmdyKSA8IDAuMDAxKSB7XG4gICAgICBzY2FsZSAqPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3UG9zaXRpb247XG4gICAgY2xpcFBvc2l0aW9uIC89IGNsaXBQb3NpdGlvbi53O1xuXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb24gKyB2ZWM0KHNjcmVlblNpemUgKiBzY2FsZSAqIHZlYzIoZ2x5cGgueCwgLWdseXBoLnkpLCAwLjAsIDAuMCk7XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59Il0pLHM9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcbnVuaWZvcm0gdmVjMyBheGVzWzJdO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIHBpeGVsUmF0aW87XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgbHNjYWxlID0gcGl4ZWxSYXRpbyAqIHNjYWxlO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcbiAgICAgIGxzY2FsZSAqPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IGNsaXBDZW50ZXIgICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcbiAgICB2ZWMzIGRhdGFQb3NpdGlvbiA9IHBvc2l0aW9uICsgMC41KmxzY2FsZSooYXhlc1swXSAqIGdseXBoLnggKyBheGVzWzFdICogZ2x5cGgueSkgKiBjbGlwQ2VudGVyLncgKiBzY3JlZW5TaXplLnk7XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChkYXRhUG9zaXRpb24sIDEpO1xuXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IGRhdGFQb3NpdGlvbjtcbiAgfVxufVxuIl0pLGw9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgZnJhZ0NsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZiAoXG4gICAgb3V0T2ZSYW5nZShmcmFnQ2xpcEJvdW5kc1swXSwgZnJhZ0NsaXBCb3VuZHNbMV0sIGRhdGFDb29yZGluYXRlKSB8fFxuICAgIGludGVycENvbG9yLmEgKiBvcGFjaXR5ID09IDAuXG4gICkgZGlzY2FyZDtcbiAgZ2xfRnJhZ0NvbG9yID0gaW50ZXJwQ29sb3IgKiBvcGFjaXR5O1xufVxuIl0pLGM9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgZnJhZ0NsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tHcm91cDtcblxudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShmcmFnQ2xpcEJvdW5kc1swXSwgZnJhZ0NsaXBCb3VuZHNbMV0sIGRhdGFDb29yZGluYXRlKSkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tHcm91cCwgcGlja0lkLmJncik7XG59Il0pLHU9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJnbHlwaCIsdHlwZToidmVjMiJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XSxmPXt2ZXJ0ZXg6YSxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0saD17dmVydGV4Om8sZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LHA9e3ZlcnRleDpzLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxkPXt2ZXJ0ZXg6YSxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX0sZz17dmVydGV4Om8sZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9LG09e3ZlcnRleDpzLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fTtmdW5jdGlvbiB2KHQsZSl7dmFyIHI9bih0LGUpLGk9ci5hdHRyaWJ1dGVzO3JldHVybiBpLnBvc2l0aW9uLmxvY2F0aW9uPTAsaS5jb2xvci5sb2NhdGlvbj0xLGkuZ2x5cGgubG9jYXRpb249MixpLmlkLmxvY2F0aW9uPTMscn1yLmNyZWF0ZVBlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsZil9LHIuY3JlYXRlT3J0aG89ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxoKX0sci5jcmVhdGVQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB2KHQscCl9LHIuY3JlYXRlUGlja1BlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsZCl9LHIuY3JlYXRlUGlja09ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsZyl9LHIuY3JlYXRlUGlja1Byb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxtKX19LHsiZ2wtc2hhZGVyIjozMzUsZ2xzbGlmeTozMjl9XSwzMjk6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjU3XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjU3fV0sMzMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImlzLXN0cmluZy1ibGFuayIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPXQoInR5cGVkYXJyYXktcG9vbCIpLHM9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGw9dCgiLi9saWIvc2hhZGVycyIpLGM9dCgiLi9saWIvZ2x5cGhzIiksdT10KCIuL2xpYi9nZXQtc2ltcGxlLXN0cmluZyIpLGY9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIGgodCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sYT10WzNdO3JldHVybiB0WzBdPWVbMF0qcitlWzRdKm4rZVs4XSppK2VbMTJdKmEsdFsxXT1lWzFdKnIrZVs1XSpuK2VbOV0qaStlWzEzXSphLHRbMl09ZVsyXSpyK2VbNl0qbitlWzEwXSppK2VbMTRdKmEsdFszXT1lWzNdKnIrZVs3XSpuK2VbMTFdKmkrZVsxNV0qYSx0fWZ1bmN0aW9uIHAodCxlLHIsbil7cmV0dXJuIGgobixuKSxoKG4sbiksaChuLG4pfWZ1bmN0aW9uIGQodCxlKXt0aGlzLmluZGV4PXQsdGhpcy5kYXRhQ29vcmRpbmF0ZT10aGlzLnBvc2l0aW9uPWV9ZnVuY3Rpb24gZyh0KXtyZXR1cm4hMD09PXR8fHQ+MT8xOnR9ZnVuY3Rpb24gbSh0LGUscixuLGksYSxvLHMsbCxjLHUsZil7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuc2hhZGVyPWUsdGhpcy5vcnRob1NoYWRlcj1yLHRoaXMucHJvamVjdFNoYWRlcj1uLHRoaXMucG9pbnRCdWZmZXI9aSx0aGlzLmNvbG9yQnVmZmVyPWEsdGhpcy5nbHlwaEJ1ZmZlcj1vLHRoaXMuaWRCdWZmZXI9cyx0aGlzLnZhbz1sLHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmxpbmVWZXJ0ZXhDb3VudD0wLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5saW5lV2lkdGg9MCx0aGlzLnByb2plY3RTY2FsZT1bMi8zLDIvMywyLzNdLHRoaXMucHJvamVjdE9wYWNpdHk9WzEsMSwxXSx0aGlzLnByb2plY3RIYXNBbHBoYT0hMSx0aGlzLnBpY2tJZD0wLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyPWMsdGhpcy5waWNrT3J0aG9TaGFkZXI9dSx0aGlzLnBpY2tQcm9qZWN0U2hhZGVyPWYsdGhpcy5wb2ludHM9W10sdGhpcy5fc2VsZWN0UmVzdWx0PW5ldyBkKDAsWzAsMCwwXSksdGhpcy51c2VPcnRobz0hMCx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmF4ZXNQcm9qZWN0PVshMCwhMCwhMF0sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuaGlnaGxpZ2h0SWQ9WzEsMSwxLDFdLHRoaXMuaGlnaGxpZ2h0U2NhbGU9Mix0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5kaXJ0eT0hMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPWwuY3JlYXRlUGVyc3BlY3RpdmUoZSksbj1sLmNyZWF0ZU9ydGhvKGUpLG89bC5jcmVhdGVQcm9qZWN0KGUpLHM9bC5jcmVhdGVQaWNrUGVyc3BlY3RpdmUoZSksYz1sLmNyZWF0ZVBpY2tPcnRobyhlKSx1PWwuY3JlYXRlUGlja1Byb2plY3QoZSksZj1pKGUpLGg9aShlKSxwPWkoZSksZD1pKGUpLGc9YShlLFt7YnVmZmVyOmYsc2l6ZTozLHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpoLHNpemU6NCx0eXBlOmUuRkxPQVR9LHtidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmQsc2l6ZTo0LHR5cGU6ZS5VTlNJR05FRF9CWVRFLG5vcm1hbGl6ZWQ6ITB9XSksdj1uZXcgbShlLHIsbixvLGYsaCxwLGQsZyxzLGMsdSk7cmV0dXJuIHYudXBkYXRlKHQpLHZ9O3ZhciB2PW0ucHJvdG90eXBlO3YucGlja1Nsb3RzPTEsdi5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSx2LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0FscGhhKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0SGFzQWxwaGEpcmV0dXJuITA7cmV0dXJuITF9LHYuaXNPcGFxdWU9ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNBbHBoYSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PDM7Kyt0KWlmKHRoaXMuYXhlc1Byb2plY3RbdF0mJiF0aGlzLnByb2plY3RIYXNBbHBoYSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHk9WzAsMF0seD1bMCwwLDBdLGI9WzAsMCwwXSxfPVswLDAsMCwxXSx3PVswLDAsMCwxXSxUPWYuc2xpY2UoKSxrPVswLDAsMF0sTT1bWzAsMCwwXSxbMCwwLDBdXTtmdW5jdGlvbiBBKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTEsdH1mdW5jdGlvbiBFKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0W3JdPW4sdH1mdW5jdGlvbiBDKHQsZSxyLG4pe3ZhciBpLGE9ZS5heGVzUHJvamVjdCxvPWUuZ2wsbD10LnVuaWZvcm1zLGM9ci5tb2RlbHx8Zix1PXIudmlld3x8ZixoPXIucHJvamVjdGlvbnx8ZixkPWUuYXhlc0JvdW5kcyxnPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1NLHI9MDtyPDI7KytyKWZvcih2YXIgbj0wO248MzsrK24pZVtyXVtuXT1NYXRoLm1heChNYXRoLm1pbih0W3JdW25dLDFlOCksLTFlOCk7cmV0dXJuIGV9KGUuY2xpcEJvdW5kcyk7aT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzP2UuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXM6WzEsMSwxXSx5WzBdPTIvby5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL28uZHJhd2luZ0J1ZmZlckhlaWdodCx0LmJpbmQoKSxsLnZpZXc9dSxsLnByb2plY3Rpb249aCxsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPWUuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1lLmhpZ2hsaWdodFNjYWxlLGwuY2xpcEJvdW5kcz1nLGwucGlja0dyb3VwPWUucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89bjtmb3IodmFyIG09MDttPDM7KyttKWlmKGFbbV0pe2wuc2NhbGU9ZS5wcm9qZWN0U2NhbGVbbV0sbC5vcGFjaXR5PWUucHJvamVjdE9wYWNpdHlbbV07Zm9yKHZhciB2PVQsQz0wO0M8MTY7KytDKXZbQ109MDtmb3IoQz0wO0M8NDsrK0Mpdls1KkNdPTE7dls1Km1dPTAsaVttXTwwP3ZbMTIrbV09ZFswXVttXTp2WzEyK21dPWRbMV1bbV0scyh2LGMsdiksbC5tb2RlbD12O3ZhciBMPShtKzEpJTMsST0obSsyKSUzLFA9QSh4KSx6PUEoYik7UFtMXT0xLHpbSV09MTt2YXIgTz1wKDAsMCwwLFMoXyxQKSksRD1wKDAsMCwwLFModyx6KSk7aWYoTWF0aC5hYnMoT1sxXSk+TWF0aC5hYnMoRFsxXSkpe3ZhciBSPU87Tz1ELEQ9UixSPVAsUD16LHo9Ujt2YXIgRj1MO0w9SSxJPUZ9T1swXTwwJiYoUFtMXT0tMSksRFsxXT4wJiYoeltJXT0tMSk7dmFyIEI9MCxOPTA7Zm9yKEM9MDtDPDQ7KytDKUIrPU1hdGgucG93KGNbNCpMK0NdLDIpLE4rPU1hdGgucG93KGNbNCpJK0NdLDIpO1BbTF0vPU1hdGguc3FydChCKSx6W0ldLz1NYXRoLnNxcnQoTiksbC5heGVzWzBdPVAsbC5heGVzWzFdPXosbC5mcmFnQ2xpcEJvdW5kc1swXT1FKGssZ1swXSxtLC0xZTgpLGwuZnJhZ0NsaXBCb3VuZHNbMV09RShrLGdbMV0sbSwxZTgpLGUudmFvLmJpbmQoKSxlLnZhby5kcmF3KG8uVFJJQU5HTEVTLGUudmVydGV4Q291bnQpLGUubGluZVdpZHRoPjAmJihvLmxpbmVXaWR0aChlLmxpbmVXaWR0aCpuKSxlLnZhby5kcmF3KG8uTElORVMsZS5saW5lVmVydGV4Q291bnQsZS52ZXJ0ZXhDb3VudCkpLGUudmFvLnVuYmluZCgpfX12YXIgTD1bWy0xZTgsLTFlOCwtMWU4XSxbMWU4LDFlOCwxZThdXTtmdW5jdGlvbiBJKHQsZSxyLG4saSxhLG8pe3ZhciBzPXIuZ2w7aWYoKGE9PT1yLnByb2plY3RIYXNBbHBoYXx8bykmJkMoZSxyLG4saSksYT09PXIuaGFzQWxwaGF8fG8pe3QuYmluZCgpO3ZhciBsPXQudW5pZm9ybXM7bC5tb2RlbD1uLm1vZGVsfHxmLGwudmlldz1uLnZpZXd8fGYsbC5wcm9qZWN0aW9uPW4ucHJvamVjdGlvbnx8Zix5WzBdPTIvcy5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL3MuZHJhd2luZ0J1ZmZlckhlaWdodCxsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPXIuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1yLmhpZ2hsaWdodFNjYWxlLGwuZnJhZ0NsaXBCb3VuZHM9TCxsLmNsaXBCb3VuZHM9ci5heGVzLmJvdW5kcyxsLm9wYWNpdHk9ci5vcGFjaXR5LGwucGlja0dyb3VwPXIucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89aSxyLnZhby5iaW5kKCksci52YW8uZHJhdyhzLlRSSUFOR0xFUyxyLnZlcnRleENvdW50KSxyLmxpbmVXaWR0aD4wJiYocy5saW5lV2lkdGgoci5saW5lV2lkdGgqaSksci52YW8uZHJhdyhzLkxJTkVTLHIubGluZVZlcnRleENvdW50LHIudmVydGV4Q291bnQpKSxyLnZhby51bmJpbmQoKX19ZnVuY3Rpb24gUCh0LGUscixpKXt2YXIgYTthPUFycmF5LmlzQXJyYXkodCk/ZTx0Lmxlbmd0aD90W2VdOnZvaWQgMDp0LGE9dShhKTt2YXIgbz0hMDtuKGEpJiYoYT0iXHUyNWJjIixvPSExKTt2YXIgcz1jKGEscixpKTtyZXR1cm57bWVzaDpzWzBdLGxpbmVzOnNbMV0sYm91bmRzOnNbMl0sdmlzaWJsZTpvfX12LmRyYXc9ZnVuY3Rpb24odCl7SSh0aGlzLnVzZU9ydGhvP3RoaXMub3J0aG9TaGFkZXI6dGhpcy5zaGFkZXIsdGhpcy5wcm9qZWN0U2hhZGVyLHRoaXMsdCx0aGlzLnBpeGVsUmF0aW8sITEsITEpfSx2LmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtJKHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LHRoaXMucGl4ZWxSYXRpbywhMCwhMSl9LHYuZHJhd1BpY2s9ZnVuY3Rpb24odCl7SSh0aGlzLnVzZU9ydGhvP3RoaXMucGlja09ydGhvU2hhZGVyOnRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyLHRoaXMucGlja1Byb2plY3RTaGFkZXIsdGhpcyx0LDEsITAsITApfSx2LnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWVbMl0rKHQudmFsdWVbMV08PDgpKyh0LnZhbHVlWzBdPDwxNik7aWYoZT49dGhpcy5wb2ludENvdW50fHxlPDApcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wb2ludHNbZV0sbj10aGlzLl9zZWxlY3RSZXN1bHQ7bi5pbmRleD1lO2Zvcih2YXIgaT0wO2k8MzsrK2kpbi5wb3NpdGlvbltpXT1uLmRhdGFDb29yZGluYXRlW2ldPXJbaV07cmV0dXJuIG59LHYuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXQuaW5kZXgscj0yNTUmZSxuPWU+PjgmMjU1LGk9ZT4+MTYmMjU1O3RoaXMuaGlnaGxpZ2h0SWQ9W3IvMjU1LG4vMjU1LGkvMjU1LDBdfWVsc2UgdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV19LHYudXBkYXRlPWZ1bmN0aW9uKHQpe2lmKCJwZXJzcGVjdGl2ZSJpbih0PXR8fHt9KSYmKHRoaXMudXNlT3J0aG89IXQucGVyc3BlY3RpdmUpLCJvcnRob2dyYXBoaWMiaW4gdCYmKHRoaXMudXNlT3J0aG89ISF0Lm9ydGhvZ3JhcGhpYyksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJwcm9qZWN0ImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3QpKXRoaXMuYXhlc1Byb2plY3Q9dC5wcm9qZWN0O2Vsc2V7dmFyIGU9ISF0LnByb2plY3Q7dGhpcy5heGVzUHJvamVjdD1bZSxlLGVdfWlmKCJwcm9qZWN0U2NhbGUiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdFNjYWxlKSl0aGlzLnByb2plY3RTY2FsZT10LnByb2plY3RTY2FsZS5zbGljZSgpO2Vsc2V7dmFyIHI9K3QucHJvamVjdFNjYWxlO3RoaXMucHJvamVjdFNjYWxlPVtyLHIscl19aWYodGhpcy5wcm9qZWN0SGFzQWxwaGE9ITEsInByb2plY3RPcGFjaXR5ImluIHQpe2lmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0T3BhY2l0eSkpdGhpcy5wcm9qZWN0T3BhY2l0eT10LnByb2plY3RPcGFjaXR5LnNsaWNlKCk7ZWxzZXtyPSt0LnByb2plY3RPcGFjaXR5O3RoaXMucHJvamVjdE9wYWNpdHk9W3IscixyXX1mb3IodmFyIG49MDtuPDM7KytuKXRoaXMucHJvamVjdE9wYWNpdHlbbl09Zyh0aGlzLnByb2plY3RPcGFjaXR5W25dKSx0aGlzLnByb2plY3RPcGFjaXR5W25dPDEmJih0aGlzLnByb2plY3RIYXNBbHBoYT0hMCl9dGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PWcodC5vcGFjaXR5KSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKSx0aGlzLmRpcnR5PSEwO3ZhciBpLGEscz10LnBvc2l0aW9uLGw9dC5mb250fHwibm9ybWFsIixjPXQuYWxpZ25tZW50fHxbMCwwXTtpZigyPT09Yy5sZW5ndGgpaT1jWzBdLGE9Y1sxXTtlbHNle2k9W10sYT1bXTtmb3Iobj0wO248Yy5sZW5ndGg7KytuKWlbbl09Y1tuXVswXSxhW25dPWNbbl1bMV19dmFyIHU9WzEvMCwxLzAsMS8wXSxmPVstMS8wLC0xLzAsLTEvMF0saD10LmdseXBoLHA9dC5jb2xvcixkPXQuc2l6ZSxtPXQuYW5nbGUsdj10LmxpbmVDb2xvcix5PS0xLHg9MCxiPTAsXz0wO2lmKHMubGVuZ3RoKXtfPXMubGVuZ3RoO3Q6Zm9yKG49MDtuPF87KytuKXtmb3IodmFyIHc9c1tuXSxUPTA7VDwzOysrVClpZihpc05hTih3W1RdKXx8IWlzRmluaXRlKHdbVF0pKWNvbnRpbnVlIHQ7dmFyIGs9KE49UChoLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLE09Ti5saW5lcyxBPU4uYm91bmRzO3grPTMqay5jZWxscy5sZW5ndGgsYis9MipNLmVkZ2VzLmxlbmd0aH19dmFyIFM9eCtiLEU9by5tYWxsb2NGbG9hdCgzKlMpLEM9by5tYWxsb2NGbG9hdCg0KlMpLEw9by5tYWxsb2NGbG9hdCgyKlMpLEk9by5tYWxsb2NVaW50MzIoUyk7aWYoUz4wKXt2YXIgej0wLE89eCxEPVswLDAsMCwxXSxSPVswLDAsMCwxXSxGPUFycmF5LmlzQXJyYXkocCkmJkFycmF5LmlzQXJyYXkocFswXSksQj1BcnJheS5pc0FycmF5KHYpJiZBcnJheS5pc0FycmF5KHZbMF0pO3Q6Zm9yKG49MDtuPF87KytuKXt5Kz0xO2Zvcih3PXNbbl0sVD0wO1Q8MzsrK1Qpe2lmKGlzTmFOKHdbVF0pfHwhaXNGaW5pdGUod1tUXSkpY29udGludWUgdDtmW1RdPU1hdGgubWF4KGZbVF0sd1tUXSksdVtUXT1NYXRoLm1pbih1W1RdLHdbVF0pfWs9KE49UChoLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLE09Ti5saW5lcyxBPU4uYm91bmRzO3ZhciBOLGo9Ti52aXNpYmxlO2lmKGopaWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMz09PShVPUY/bjxwLmxlbmd0aD9wW25dOlswLDAsMCwwXTpwKS5sZW5ndGgpe2ZvcihUPTA7VDwzOysrVClEW1RdPVVbVF07RFszXT0xfWVsc2UgaWYoND09PVUubGVuZ3RoKXtmb3IoVD0wO1Q8NDsrK1QpRFtUXT1VW1RdOyF0aGlzLmhhc0FscGhhJiZVWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBEWzBdPURbMV09RFsyXT0wLERbM109MTtlbHNlIEQ9WzEsMSwxLDBdO2lmKGopaWYoQXJyYXkuaXNBcnJheSh2KSl7dmFyIFU7aWYoMz09PShVPUI/bjx2Lmxlbmd0aD92W25dOlswLDAsMCwwXTp2KS5sZW5ndGgpe2ZvcihUPTA7VDwzOysrVClSW1RdPVVbVF07UltUXT0xfWVsc2UgaWYoND09PVUubGVuZ3RoKXtmb3IoVD0wO1Q8NDsrK1QpUltUXT1VW1RdOyF0aGlzLmhhc0FscGhhJiZVWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBSWzBdPVJbMV09UlsyXT0wLFJbM109MTtlbHNlIFI9WzEsMSwxLDBdO3ZhciBWPS41O2o/QXJyYXkuaXNBcnJheShkKT9WPW48ZC5sZW5ndGg/K2Rbbl06MTI6ZD9WPStkOnRoaXMudXNlT3J0aG8mJihWPTEyKTpWPTA7dmFyIHE9MDtBcnJheS5pc0FycmF5KG0pP3E9bjxtLmxlbmd0aD8rbVtuXTowOm0mJihxPSttKTt2YXIgSD1NYXRoLmNvcyhxKSxHPU1hdGguc2luKHEpO2Zvcih3PXNbbl0sVD0wO1Q8MzsrK1QpZltUXT1NYXRoLm1heChmW1RdLHdbVF0pLHVbVF09TWF0aC5taW4odVtUXSx3W1RdKTt2YXIgWT1pLFc9YTtZPTA7QXJyYXkuaXNBcnJheShpKT9ZPW48aS5sZW5ndGg/aVtuXTowOmkmJihZPWkpO1c9MDtBcnJheS5pc0FycmF5KGEpP1c9bjxhLmxlbmd0aD9hW25dOjA6YSYmKFc9YSk7dmFyIFg9W1kqPVk+MD8xLUFbMF1bMF06WTwwPzErQVsxXVswXToxLFcqPVc+MD8xLUFbMF1bMV06VzwwPzErQVsxXVsxXToxXSxaPWsuY2VsbHN8fFtdLEo9ay5wb3NpdGlvbnN8fFtdO2ZvcihUPTA7VDxaLmxlbmd0aDsrK1QpZm9yKHZhciBLPVpbVF0sUT0wO1E8MzsrK1Epe2Zvcih2YXIgJD0wOyQ8MzsrKyQpRVszKnorJF09d1skXTtmb3IoJD0wOyQ8NDsrKyQpQ1s0KnorJF09RFskXTtJW3pdPXk7dmFyIHR0PUpbS1tRXV07TFsyKnpdPVYqKEgqdHRbMF0tRyp0dFsxXStYWzBdKSxMWzIqeisxXT1WKihHKnR0WzBdK0gqdHRbMV0rWFsxXSkseis9MX1mb3IoWj1NLmVkZ2VzLEo9TS5wb3NpdGlvbnMsVD0wO1Q8Wi5sZW5ndGg7KytUKWZvcihLPVpbVF0sUT0wO1E8MjsrK1Epe2ZvcigkPTA7JDwzOysrJClFWzMqTyskXT13WyRdO2ZvcigkPTA7JDw0OysrJClDWzQqTyskXT1SWyRdO0lbT109eTt0dD1KW0tbUV1dO0xbMipPXT1WKihIKnR0WzBdLUcqdHRbMV0rWFswXSksTFsyKk8rMV09ViooRyp0dFswXStIKnR0WzFdK1hbMV0pLE8rPTF9fX10aGlzLmJvdW5kcz1bdSxmXSx0aGlzLnBvaW50cz1zLHRoaXMucG9pbnRDb3VudD1zLmxlbmd0aCx0aGlzLnZlcnRleENvdW50PXgsdGhpcy5saW5lVmVydGV4Q291bnQ9Yix0aGlzLnBvaW50QnVmZmVyLnVwZGF0ZShFKSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShDKSx0aGlzLmdseXBoQnVmZmVyLnVwZGF0ZShMKSx0aGlzLmlkQnVmZmVyLnVwZGF0ZShJKSxvLmZyZWUoRSksby5mcmVlKEMpLG8uZnJlZShMKSxvLmZyZWUoSSl9LHYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tQZXJzcGVjdGl2ZVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrT3J0aG9TaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLnBvaW50QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmdseXBoQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKX19LHsiLi9saWIvZ2V0LXNpbXBsZS1zdHJpbmciOjMyNiwiLi9saWIvZ2x5cGhzIjozMjcsIi4vbGliL3NoYWRlcnMiOjMyOCwiZ2wtYnVmZmVyIjoyNTksImdsLW1hdDQvbXVsdGlwbHkiOjI5NSwiZ2wtdmFvIjozNTgsImlzLXN0cmluZy1ibGFuayI6NDcwLCJ0eXBlZGFycmF5LXBvb2wiOjU5NX1dLDMzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5Iik7ci5ib3hWZXJ0ZXg9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgdmVydGV4O1xuXG51bmlmb3JtIHZlYzIgY29ybmVyQSwgY29ybmVyQjtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQobWl4KGNvcm5lckEsIGNvcm5lckIsIHZlcnRleCksIDAsIDEpO1xufVxuIl0pLHIuYm94RnJhZ21lbnQ9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pfSx7Z2xzbGlmeTozMzJ9XSwzMzI6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjU3XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjU3fV0sMzMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCIuL2xpYi9zaGFkZXJzIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy5ib3hCdWZmZXI9ZSx0aGlzLmJveFNoYWRlcj1yLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnNlbGVjdEJveD1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDFdLHRoaXMuaW5uZXJGaWxsPSExLHRoaXMuaW5uZXJDb2xvcj1bMCwwLDAsLjI1XSx0aGlzLm91dGVyRmlsbD0hMCx0aGlzLm91dGVyQ29sb3I9WzAsMCwwLC41XSx0aGlzLmJvcmRlcldpZHRoPTEwfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wscz1pKHIsWzAsMCwwLDEsMSwwLDEsMV0pLGw9bihyLGEuYm94VmVydGV4LGEuYm94RnJhZ21lbnQpLGM9bmV3IG8odCxzLGwpO3JldHVybiBjLnVwZGF0ZShlKSx0LmFkZE92ZXJsYXkoYyksY307dmFyIHM9by5wcm90b3R5cGU7cy5kcmF3PWZ1bmN0aW9uKCl7aWYodGhpcy5lbmFibGVkKXt2YXIgdD10aGlzLnBsb3QsZT10aGlzLnNlbGVjdEJveCxyPXRoaXMuYm9yZGVyV2lkdGgsbj0odGhpcy5pbm5lckZpbGwsdGhpcy5pbm5lckNvbG9yKSxpPSh0aGlzLm91dGVyRmlsbCx0aGlzLm91dGVyQ29sb3IpLGE9dGhpcy5ib3JkZXJDb2xvcixvPXQuYm94LHM9dC5zY3JlZW5Cb3gsbD10LmRhdGFCb3gsYz10LnZpZXdCb3gsdT10LnBpeGVsUmF0aW8sZj0oZVswXS1sWzBdKSooY1syXS1jWzBdKS8obFsyXS1sWzBdKStjWzBdLGg9KGVbMV0tbFsxXSkqKGNbM10tY1sxXSkvKGxbM10tbFsxXSkrY1sxXSxwPShlWzJdLWxbMF0pKihjWzJdLWNbMF0pLyhsWzJdLWxbMF0pK2NbMF0sZD0oZVszXS1sWzFdKSooY1szXS1jWzFdKS8obFszXS1sWzFdKStjWzFdO2lmKGY9TWF0aC5tYXgoZixjWzBdKSxoPU1hdGgubWF4KGgsY1sxXSkscD1NYXRoLm1pbihwLGNbMl0pLGQ9TWF0aC5taW4oZCxjWzNdKSwhKHA8Znx8ZDxoKSl7by5iaW5kKCk7dmFyIGc9c1syXS1zWzBdLG09c1szXS1zWzFdO2lmKHRoaXMub3V0ZXJGaWxsJiYoby5kcmF3Qm94KDAsMCxnLGgsaSksby5kcmF3Qm94KDAsaCxmLGQsaSksby5kcmF3Qm94KDAsZCxnLG0saSksby5kcmF3Qm94KHAsaCxnLGQsaSkpLHRoaXMuaW5uZXJGaWxsJiZvLmRyYXdCb3goZixoLHAsZCxuKSxyPjApe3ZhciB2PXIqdTtvLmRyYXdCb3goZi12LGgtdixwK3YsaCt2LGEpLG8uZHJhd0JveChmLXYsZC12LHArdixkK3YsYSksby5kcmF3Qm94KGYtdixoLXYsZit2LGQrdixhKSxvLmRyYXdCb3gocC12LGgtdixwK3YsZCt2LGEpfX19fSxzLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMuaW5uZXJGaWxsPSEhdC5pbm5lckZpbGwsdGhpcy5vdXRlckZpbGw9ISF0Lm91dGVyRmlsbCx0aGlzLmlubmVyQ29sb3I9KHQuaW5uZXJDb2xvcnx8WzAsMCwwLC41XSkuc2xpY2UoKSx0aGlzLm91dGVyQ29sb3I9KHQub3V0ZXJDb2xvcnx8WzAsMCwwLC41XSkuc2xpY2UoKSx0aGlzLmJvcmRlckNvbG9yPSh0LmJvcmRlckNvbG9yfHxbMCwwLDAsMV0pLnNsaWNlKCksdGhpcy5ib3JkZXJXaWR0aD10LmJvcmRlcldpZHRofHwwLHRoaXMuc2VsZWN0Qm94PSh0LnNlbGVjdEJveHx8dGhpcy5zZWxlY3RCb3gpLnNsaWNlKCl9LHMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuYm94QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmJveFNoYWRlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU92ZXJsYXkodGhpcyl9fSx7Ii4vbGliL3NoYWRlcnMiOjMzMSwiZ2wtYnVmZmVyIjoyNTksImdsLXNoYWRlciI6MzM1fV0sMzM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sYT1lWzFdLG89bih0LHIsYSx7fSkscz1pLm1hbGxvY1VpbnQ4KHIqYSo0KTtyZXR1cm4gbmV3IGwodCxvLHMpfTt2YXIgbj10KCJnbC1mYm8iKSxpPXQoInR5cGVkYXJyYXktcG9vbCIpLGE9dCgibmRhcnJheSIpLG89dCgiYml0LXR3aWRkbGUiKS5uZXh0UG93MjtmdW5jdGlvbiBzKHQsZSxyLG4saSl7dGhpcy5jb29yZD1bdCxlXSx0aGlzLmlkPXIsdGhpcy52YWx1ZT1uLHRoaXMuZGlzdGFuY2U9aX1mdW5jdGlvbiBsKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5mYm89ZSx0aGlzLmJ1ZmZlcj1yLHRoaXMuX3JlYWRUaW1lb3V0PW51bGw7dmFyIG49dGhpczt0aGlzLl9yZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtuLmdsJiYoZS5iaW5kKCksdC5yZWFkUGl4ZWxzKDAsMCxlLnNoYXBlWzBdLGUuc2hhcGVbMV0sdC5SR0JBLHQuVU5TSUdORURfQllURSxuLmJ1ZmZlciksbi5fcmVhZFRpbWVvdXQ9bnVsbCl9fXZhciBjPWwucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJzaGFwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdsP3RoaXMuZmJvLnNoYXBlLnNsaWNlKCk6WzAsMF19LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmdsKXt0aGlzLmZiby5zaGFwZT10O3ZhciBlPXRoaXMuZmJvLnNoYXBlWzBdLHI9dGhpcy5mYm8uc2hhcGVbMV07aWYociplKjQ+dGhpcy5idWZmZXIubGVuZ3RoKXtpLmZyZWUodGhpcy5idWZmZXIpO2Zvcih2YXIgbj10aGlzLmJ1ZmZlcj1pLm1hbGxvY1VpbnQ4KG8ociplKjQpKSxhPTA7YTxyKmUqNDsrK2EpblthXT0yNTV9cmV0dXJuIHR9fX0pLGMuYmVnaW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3RoaXMuc2hhcGU7dCYmKHRoaXMuZmJvLmJpbmQoKSx0LmNsZWFyQ29sb3IoMSwxLDEsMSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKSl9LGMuZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0JiYodC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSx0aGlzLl9yZWFkVGltZW91dHx8Y2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSx0aGlzLl9yZWFkVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX3JlYWRDYWxsYmFjaywxKSl9LGMucXVlcnk9ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLmdsKXJldHVybiBudWxsO3ZhciBuPXRoaXMuZmJvLnNoYXBlLnNsaWNlKCk7dHw9MCxlfD0wLCJudW1iZXIiIT10eXBlb2YgciYmKHI9MSk7dmFyIGk9MHxNYXRoLm1pbihNYXRoLm1heCh0LXIsMCksblswXSksbz0wfE1hdGgubWluKE1hdGgubWF4KHQrciwwKSxuWzBdKSxsPTB8TWF0aC5taW4oTWF0aC5tYXgoZS1yLDApLG5bMV0pLGM9MHxNYXRoLm1pbihNYXRoLm1heChlK3IsMCksblsxXSk7aWYobzw9aXx8Yzw9bClyZXR1cm4gbnVsbDt2YXIgdT1bby1pLGMtbF0sZj1hKHRoaXMuYnVmZmVyLFt1WzBdLHVbMV0sNF0sWzQsNCpuWzBdLDFdLDQqKGkrblswXSpsKSksaD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTFlOCxpPS0xLGE9LTEsbz10LnNoYXBlWzBdLHM9dC5zaGFwZVsxXSxsPTA7bDxvO2wrKylmb3IodmFyIGM9MDtjPHM7YysrKXt2YXIgdT10LmdldChsLGMsMCksZj10LmdldChsLGMsMSksaD10LmdldChsLGMsMikscD10LmdldChsLGMsMyk7aWYodTwyNTV8fGY8MjU1fHxoPDI1NXx8cDwyNTUpe3ZhciBkPWUtbCxnPXItYyxtPWQqZCtnKmc7bTxuJiYobj1tLGk9bCxhPWMpfX1yZXR1cm5baSxhLG5dfShmLmhpKHVbMF0sdVsxXSwxKSxyLHIpLHA9aFswXSxkPWhbMV07cmV0dXJuIHA8MHx8TWF0aC5wb3codGhpcy5yYWRpdXMsMik8aFsyXT9udWxsOm5ldyBzKHAraXwwLGQrbHwwLGYuZ2V0KHAsZCwwKSxbZi5nZXQocCxkLDEpLGYuZ2V0KHAsZCwyKSxmLmdldChwLGQsMyldLE1hdGguc3FydChoWzJdKSl9LGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wmJih0aGlzLmZiby5kaXNwb3NlKCksaS5mcmVlKHRoaXMuYnVmZmVyKSx0aGlzLmdsPW51bGwsdGhpcy5fcmVhZFRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl9yZWFkVGltZW91dCkpfX0seyJiaXQtdHdpZGRsZSI6OTcsImdsLWZibyI6MjY5LG5kYXJyYXk6NDk1LCJ0eXBlZGFycmF5LXBvb2wiOjU5NX1dLDMzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiKSxpPXQoIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIiksYT10KCIuL2xpYi9yZWZsZWN0Iiksbz10KCIuL2xpYi9zaGFkZXItY2FjaGUiKSxzPXQoIi4vbGliL3J1bnRpbWUtcmVmbGVjdCIpLGw9dCgiLi9saWIvR0xFcnJvciIpO2Z1bmN0aW9uIGModCl7dGhpcy5nbD10LHRoaXMuZ2wubGFzdEF0dHJpYkNvdW50PTAsdGhpcy5fdnJlZj10aGlzLl9mcmVmPXRoaXMuX3JlbGluaz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLmF0dHJpYnV0ZXM9dGhpcy51bmlmb3Jtcz10aGlzLnR5cGVzPW51bGx9dmFyIHU9Yy5wcm90b3R5cGU7ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0Lm5hbWU8ZS5uYW1lPy0xOjF9dS5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5wcm9ncmFtfHx0aGlzLl9yZWxpbmsoKTt2YXIgZT10aGlzLmdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLHRoaXMuZ2wuQUNUSVZFX0FUVFJJQlVURVMpLHI9dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ7aWYoZT5yKWZvcih0PXI7dDxlO3QrKyl0aGlzLmdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHQpO2Vsc2UgaWYocj5lKWZvcih0PWU7dDxyO3QrKyl0aGlzLmdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh0KTt0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD1lLHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5nbC5sYXN0QXR0cmliQ291bnQsZT0wO2U8dDtlKyspdGhpcy5nbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSk7dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9MCx0aGlzLl9mcmVmJiZ0aGlzLl9mcmVmLmRpc3Bvc2UoKSx0aGlzLl92cmVmJiZ0aGlzLl92cmVmLmRpc3Bvc2UoKSx0aGlzLmF0dHJpYnV0ZXM9dGhpcy50eXBlcz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLl9yZWxpbms9dGhpcy5fZnJlZj10aGlzLl92cmVmPW51bGx9LHUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLGMpe2lmKCFlfHwxPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIHU9dDt0PXUudmVydGV4LGU9dS5mcmFnbWVudCxyPXUudW5pZm9ybXMsYz11LmF0dHJpYnV0ZXN9dmFyIGg9dGhpcyxwPWguZ2wsZD1oLl92cmVmO2guX3ZyZWY9by5zaGFkZXIocCxwLlZFUlRFWF9TSEFERVIsdCksZCYmZC5kaXNwb3NlKCksaC52ZXJ0U2hhZGVyPWguX3ZyZWYuc2hhZGVyO3ZhciBnPXRoaXMuX2ZyZWY7aWYoaC5fZnJlZj1vLnNoYWRlcihwLHAuRlJBR01FTlRfU0hBREVSLGUpLGcmJmcuZGlzcG9zZSgpLGguZnJhZ1NoYWRlcj1oLl9mcmVmLnNoYWRlciwhcnx8IWMpe3ZhciBtPXAuY3JlYXRlUHJvZ3JhbSgpO2lmKHAuYXR0YWNoU2hhZGVyKG0saC5mcmFnU2hhZGVyKSxwLmF0dGFjaFNoYWRlcihtLGgudmVydFNoYWRlcikscC5saW5rUHJvZ3JhbShtKSwhcC5nZXRQcm9ncmFtUGFyYW1ldGVyKG0scC5MSU5LX1NUQVRVUykpe3ZhciB2PXAuZ2V0UHJvZ3JhbUluZm9Mb2cobSk7dGhyb3cgbmV3IGwodiwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiIrdil9cj1yfHxzLnVuaWZvcm1zKHAsbSksYz1jfHxzLmF0dHJpYnV0ZXMocCxtKSxwLmRlbGV0ZVByb2dyYW0obSl9KGM9Yy5zbGljZSgpKS5zb3J0KGYpO3ZhciB5LHg9W10sYj1bXSxfPVtdO2Zvcih5PTA7eTxjLmxlbmd0aDsrK3kpe3ZhciB3PWNbeV07aWYody50eXBlLmluZGV4T2YoIm1hdCIpPj0wKXtmb3IodmFyIFQ9MHx3LnR5cGUuY2hhckF0KHcudHlwZS5sZW5ndGgtMSksaz1uZXcgQXJyYXkoVCksTT0wO008VDsrK00pa1tNXT1fLmxlbmd0aCxiLnB1c2gody5uYW1lKyJbIitNKyJdIiksIm51bWJlciI9PXR5cGVvZiB3LmxvY2F0aW9uP18ucHVzaCh3LmxvY2F0aW9uK00pOkFycmF5LmlzQXJyYXkody5sb2NhdGlvbikmJncubG9jYXRpb24ubGVuZ3RoPT09VCYmIm51bWJlciI9PXR5cGVvZiB3LmxvY2F0aW9uW01dP18ucHVzaCgwfHcubG9jYXRpb25bTV0pOl8ucHVzaCgtMSk7eC5wdXNoKHtuYW1lOncubmFtZSx0eXBlOncudHlwZSxsb2NhdGlvbnM6a30pfWVsc2UgeC5wdXNoKHtuYW1lOncubmFtZSx0eXBlOncudHlwZSxsb2NhdGlvbnM6W18ubGVuZ3RoXX0pLGIucHVzaCh3Lm5hbWUpLCJudW1iZXIiPT10eXBlb2Ygdy5sb2NhdGlvbj9fLnB1c2goMHx3LmxvY2F0aW9uKTpfLnB1c2goLTEpfXZhciBBPTA7Zm9yKHk9MDt5PF8ubGVuZ3RoOysreSlpZihfW3ldPDApe2Zvcig7Xy5pbmRleE9mKEEpPj0wOylBKz0xO19beV09QX12YXIgUz1uZXcgQXJyYXkoci5sZW5ndGgpO2Z1bmN0aW9uIEUoKXtoLnByb2dyYW09by5wcm9ncmFtKHAsaC5fdnJlZixoLl9mcmVmLGIsXyk7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpU1t0XT1wLmdldFVuaWZvcm1Mb2NhdGlvbihoLnByb2dyYW0sclt0XS5uYW1lKX1FKCksaC5fcmVsaW5rPUUsaC50eXBlcz17dW5pZm9ybXM6YShyKSxhdHRyaWJ1dGVzOmEoYyl9LGguYXR0cmlidXRlcz1pKHAsaCx4LF8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ1bmlmb3JtcyIsbihwLGgscixTKSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW5ldyBjKHQpO3JldHVybiBhLnVwZGF0ZShlLHIsbixpKSxhfX0seyIuL2xpYi9HTEVycm9yIjozMzYsIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIjozMzcsIi4vbGliL2NyZWF0ZS11bmlmb3JtcyI6MzM4LCIuL2xpYi9yZWZsZWN0IjozMzksIi4vbGliL3J1bnRpbWUtcmVmbGVjdCI6MzQwLCIuL2xpYi9zaGFkZXItY2FjaGUiOjM0MX1dLDMzNjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuc2hvcnRNZXNzYWdlPWV8fCIiLHRoaXMubG9uZ01lc3NhZ2U9cnx8IiIsdGhpcy5yYXdFcnJvcj10fHwiIix0aGlzLm1lc3NhZ2U9ImdsLXNoYWRlcjogIisoZXx8dHx8IiIpKyhyPyJcbiIrcjoiIiksdGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja31uLnByb3RvdHlwZT1uZXcgRXJyb3Isbi5wcm90b3R5cGUubmFtZT0iR0xFcnJvciIsbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixlLmV4cG9ydHM9bn0se31dLDMzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPXt9LGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpe3ZhciB1PXJbbF0sZj11Lm5hbWUsaD11LnR5cGUscD11LmxvY2F0aW9ucztzd2l0Y2goaCl7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJmbG9hdCI6byh0LGUscFswXSxpLDEsYSxmKTticmVhaztkZWZhdWx0OmlmKGguaW5kZXhPZigidmVjIik+PTApe2lmKChkPWguY2hhckNvZGVBdChoLmxlbmd0aC0xKS00OCk8Mnx8ZD40KXRocm93IG5ldyBuKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO28odCxlLHBbMF0saSxkLGEsZil9ZWxzZXtpZighKGguaW5kZXhPZigibWF0Iik+PTApKXRocm93IG5ldyBuKCIiLCJVbmtub3duIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO3ZhciBkO2lmKChkPWguY2hhckNvZGVBdChoLmxlbmd0aC0xKS00OCk8Mnx8ZD40KXRocm93IG5ldyBuKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO3ModCxlLHAsaSxkLGEsZil9fX1yZXR1cm4gYX07dmFyIG49dCgiLi9HTEVycm9yIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dGhpcy5fZ2w9dCx0aGlzLl93cmFwcGVyPWUsdGhpcy5faW5kZXg9cix0aGlzLl9sb2NhdGlvbnM9bix0aGlzLl9kaW1lbnNpb249aSx0aGlzLl9jb25zdEZ1bmM9YX12YXIgYT1pLnByb3RvdHlwZTtmdW5jdGlvbiBvKHQsZSxyLG4sYSxvLHMpe2Zvcih2YXIgbD1bImdsIiwidiJdLGM9W10sdT0wO3U8YTsrK3UpbC5wdXNoKCJ4Iit1KSxjLnB1c2goIngiK3UpO2wucHVzaCgiaWYoeDAubGVuZ3RoPT09dm9pZCAwKXtyZXR1cm4gZ2wudmVydGV4QXR0cmliIithKyJmKHYsIitjLmpvaW4oKSsiKX1lbHNle3JldHVybiBnbC52ZXJ0ZXhBdHRyaWIiK2ErImZ2KHYseDApfSIpO3ZhciBmPUZ1bmN0aW9uLmFwcGx5KG51bGwsbCksaD1uZXcgaSh0LGUscixuLGEsZik7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8scyx7c2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShuW3JdKSxmKHQsbltyXSxlKSxlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sZW51bWVyYWJsZTohMH0pfWZ1bmN0aW9uIHModCxlLHIsbixpLGEscyl7Zm9yKHZhciBsPW5ldyBBcnJheShpKSxjPW5ldyBBcnJheShpKSx1PTA7dTxpOysrdSlvKHQsZSxyW3VdLG4saSxsLHUpLGNbdV09bFt1XTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibG9jYXRpb24iLHtzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGU9MDtlPGk7KytlKWNbZV0ubG9jYXRpb249dFtlXTtlbHNlIGZvcihlPTA7ZTxpOysrZSljW2VdLmxvY2F0aW9uPXQrZTtyZXR1cm4gdH0sZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBBcnJheShpKSxlPTA7ZTxpOysrZSl0W2VdPW5bcltlXV07cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxsLnBvaW50ZXI9ZnVuY3Rpb24oZSxhLG8scyl7ZT1lfHx0LkZMT0FULGE9ISFhLG89b3x8aSppLHM9c3x8MDtmb3IodmFyIGw9MDtsPGk7KytsKXt2YXIgYz1uW3JbbF1dO3QudmVydGV4QXR0cmliUG9pbnRlcihjLGksZSxhLG8scytsKmkpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYyl9fTt2YXIgZj1uZXcgQXJyYXkoaSksaD10WyJ2ZXJ0ZXhBdHRyaWIiK2krImZ2Il07T2JqZWN0LmRlZmluZVByb3BlcnR5KGEscyx7c2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgYT0wO2E8aTsrK2Epe3ZhciBvPW5bclthXV07aWYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobyksQXJyYXkuaXNBcnJheShlWzBdKSloLmNhbGwodCxvLGVbYV0pO2Vsc2V7Zm9yKHZhciBzPTA7czxpOysrcylmW3NdPWVbaSphK3NdO2guY2FsbCh0LG8sZil9fXJldHVybiBlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sZW51bWVyYWJsZTohMH0pfWEucG9pbnRlcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLl9nbCxhPXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF07aS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsdGhpcy5fZGltZW5zaW9uLHR8fGkuRkxPQVQsISFlLHJ8fDAsbnx8MCksaS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhKX0sYS5zZXQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX2NvbnN0RnVuYyh0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdLHQsZSxyLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwibG9jYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0IT09dGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSYmKHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF09MHx0LHRoaXMuX3dyYXBwZXIucHJvZ3JhbT1udWxsKSwwfHR9fSl9LHsiLi9HTEVycm9yIjozMzZ9XSwzMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9yZWZsZWN0IiksaT10KCIuL0dMRXJyb3IiKTtmdW5jdGlvbiBhKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oInkiLCJyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4geX0iKSh0KX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwodCxlLHIpe3N3aXRjaChyKXtjYXNlImJvb2wiOmNhc2UiaW50IjpjYXNlInNhbXBsZXIyRCI6Y2FzZSJzYW1wbGVyQ3ViZSI6cmV0dXJuImdsLnVuaWZvcm0xaShsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7Y2FzZSJmbG9hdCI6cmV0dXJuImdsLnVuaWZvcm0xZihsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7ZGVmYXVsdDp2YXIgbj1yLmluZGV4T2YoInZlYyIpO2lmKCEoMDw9biYmbjw9MSYmci5sZW5ndGg9PT00K24pKXtpZigwPT09ci5pbmRleE9mKCJtYXQiKSYmND09PXIubGVuZ3RoKXt2YXIgYTtpZigoYT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSktNDgpPDJ8fGE+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCB1bmlmb3JtIGRpbWVuc2lvbiB0eXBlIGZvciBtYXRyaXggIituYW1lKyI6ICIrcik7cmV0dXJuImdsLnVuaWZvcm1NYXRyaXgiK2ErImZ2KGxvY2F0aW9uc1siK2UrIl0sZmFsc2Usb2JqIit0KyIpIn10aHJvdyBuZXcgaSgiIiwiVW5rbm93biB1bmlmb3JtIGRhdGEgdHlwZSBmb3IgIituYW1lKyI6ICIrcil9aWYoKGE9ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpLTQ4KTwyfHxhPjQpdGhyb3cgbmV3IGkoIiIsIkludmFsaWQgZGF0YSB0eXBlIik7c3dpdGNoKHIuY2hhckF0KDApKXtjYXNlImIiOmNhc2UiaSI6cmV0dXJuImdsLnVuaWZvcm0iK2ErIml2KGxvY2F0aW9uc1siK2UrIl0sb2JqIit0KyIpIjtjYXNlInYiOnJldHVybiJnbC51bmlmb3JtIithKyJmdihsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7ZGVmYXVsdDp0aHJvdyBuZXcgaSgiIiwiVW5yZWNvZ25pemVkIGRhdGEgdHlwZSBmb3IgdmVjdG9yICIrbmFtZSsiOiAiK3IpfX19ZnVuY3Rpb24gYyhlKXtmb3IodmFyIG49WyJyZXR1cm4gZnVuY3Rpb24gdXBkYXRlUHJvcGVydHkob2JqKXsiXSxpPWZ1bmN0aW9uIHQoZSxyKXtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuW1tlLHJdXTt2YXIgbj1bXTtmb3IodmFyIGkgaW4gcil7dmFyIGE9cltpXSxvPWU7cGFyc2VJbnQoaSkrIiI9PT1pP28rPSJbIitpKyJdIjpvKz0iLiIraSwib2JqZWN0Ij09dHlwZW9mIGE/bi5wdXNoLmFwcGx5KG4sdChvLGEpKTpuLnB1c2goW28sYV0pfXJldHVybiBufSgiIixlKSxhPTA7YTxpLmxlbmd0aDsrK2Epe3ZhciBvPWlbYV0sYz1vWzBdLHU9b1sxXTtzW3VdJiZuLnB1c2gobChjLHUsclt1XS50eXBlKSl9cmV0dXJuIG4ucHVzaCgicmV0dXJuIG9ian0iKSxuZXcgRnVuY3Rpb24oImdsIiwibG9jYXRpb25zIixuLmpvaW4oIlxuIikpKHQscyl9ZnVuY3Rpb24gdShuLGwsdSl7aWYoIm9iamVjdCI9PXR5cGVvZiB1KXt2YXIgaD1mKHUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGwse2dldDphKGgpLHNldDpjKHUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSl9ZWxzZSBzW3VdP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGwse2dldDoocD11LG5ldyBGdW5jdGlvbigiZ2wiLCJ3cmFwcGVyIiwibG9jYXRpb25zIiwicmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdsLmdldFVuaWZvcm0od3JhcHBlci5wcm9ncmFtLGxvY2F0aW9uc1siK3ArIl0pfSIpKHQsZSxzKSksc2V0OmModSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTpuW2xdPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImJvb2wiOnJldHVybiExO2Nhc2UiaW50IjpjYXNlInNhbXBsZXIyRCI6Y2FzZSJzYW1wbGVyQ3ViZSI6Y2FzZSJmbG9hdCI6cmV0dXJuIDA7ZGVmYXVsdDp2YXIgZT10LmluZGV4T2YoInZlYyIpO2lmKDA8PWUmJmU8PTEmJnQubGVuZ3RoPT09NCtlKXtpZigocj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDgpPDJ8fHI+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtyZXR1cm4iYiI9PT10LmNoYXJBdCgwKT9vKHIsITEpOm8ociwwKX1pZigwPT09dC5pbmRleE9mKCJtYXQiKSYmND09PXQubGVuZ3RoKXt2YXIgcjtpZigocj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDgpPDJ8fHI+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCB1bmlmb3JtIGRpbWVuc2lvbiB0eXBlIGZvciBtYXRyaXggIituYW1lKyI6ICIrdCk7cmV0dXJuIG8ocipyLDApfXRocm93IG5ldyBpKCIiLCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciAiK25hbWUrIjogIit0KX19KHJbdV0udHlwZSk7dmFyIHB9ZnVuY3Rpb24gZih0KXt2YXIgZTtpZihBcnJheS5pc0FycmF5KHQpKXtlPW5ldyBBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdShlLHIsdFtyXSl9ZWxzZSBmb3IodmFyIG4gaW4gZT17fSx0KXUoZSxuLHRbbl0pO3JldHVybiBlfXZhciBoPW4ociwhMCk7cmV0dXJue2dldDphKGYoaCkpLHNldDpjKGgpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfX19LHsiLi9HTEVycm9yIjozMzYsIi4vcmVmbGVjdCI6MzM5fV0sMzM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0ubmFtZS5zcGxpdCgiLiIpLGE9cixvPTA7bzxpLmxlbmd0aDsrK28pe3ZhciBzPWlbb10uc3BsaXQoIlsiKTtpZihzLmxlbmd0aD4xKXtzWzBdaW4gYXx8KGFbc1swXV09W10pLGE9YVtzWzBdXTtmb3IodmFyIGw9MTtsPHMubGVuZ3RoOysrbCl7dmFyIGM9cGFyc2VJbnQoc1tsXSk7bDxzLmxlbmd0aC0xfHxvPGkubGVuZ3RoLTE/KGMgaW4gYXx8KGw8cy5sZW5ndGgtMT9hW2NdPVtdOmFbY109e30pLGE9YVtjXSk6YVtjXT1lP246dFtuXS50eXBlfX1lbHNlIG88aS5sZW5ndGgtMT8oc1swXWluIGF8fChhW3NbMF1dPXt9KSxhPWFbc1swXV0pOmFbc1swXV09ZT9uOnRbbl0udHlwZX1yZXR1cm4gcn19LHt9XSwzNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci51bmlmb3Jtcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9VTklGT1JNUyksbj1bXSxpPTA7aTxyOysraSl7dmFyIG89dC5nZXRBY3RpdmVVbmlmb3JtKGUsaSk7aWYobyl7dmFyIHM9YSh0LG8udHlwZSk7aWYoby5zaXplPjEpZm9yKHZhciBsPTA7bDxvLnNpemU7KytsKW4ucHVzaCh7bmFtZTpvLm5hbWUucmVwbGFjZSgiWzBdIiwiWyIrbCsiXSIpLHR5cGU6c30pO2Vsc2Ugbi5wdXNoKHtuYW1lOm8ubmFtZSx0eXBlOnN9KX19cmV0dXJuIG59LHIuYXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9BVFRSSUJVVEVTKSxuPVtdLGk9MDtpPHI7KytpKXt2YXIgbz10LmdldEFjdGl2ZUF0dHJpYihlLGkpO28mJm4ucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTphKHQsby50eXBlKX0pfXJldHVybiBufTt2YXIgbj17RkxPQVQ6ImZsb2F0IixGTE9BVF9WRUMyOiJ2ZWMyIixGTE9BVF9WRUMzOiJ2ZWMzIixGTE9BVF9WRUM0OiJ2ZWM0IixJTlQ6ImludCIsSU5UX1ZFQzI6Iml2ZWMyIixJTlRfVkVDMzoiaXZlYzMiLElOVF9WRUM0OiJpdmVjNCIsQk9PTDoiYm9vbCIsQk9PTF9WRUMyOiJidmVjMiIsQk9PTF9WRUMzOiJidmVjMyIsQk9PTF9WRUM0OiJidmVjNCIsRkxPQVRfTUFUMjoibWF0MiIsRkxPQVRfTUFUMzoibWF0MyIsRkxPQVRfTUFUNDoibWF0NCIsU0FNUExFUl8yRDoic2FtcGxlcjJEIixTQU1QTEVSX0NVQkU6InNhbXBsZXJDdWJlIn0saT1udWxsO2Z1bmN0aW9uIGEodCxlKXtpZighaSl7dmFyIHI9T2JqZWN0LmtleXMobik7aT17fTtmb3IodmFyIGE9MDthPHIubGVuZ3RoOysrYSl7dmFyIG89clthXTtpW3Rbb11dPW5bb119fXJldHVybiBpW2VdfX0se31dLDM0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnNoYWRlcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHUodCkuZ2V0U2hhZGVyUmVmZXJlbmNlKGUscil9LHIucHJvZ3JhbT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB1KHQpLmdldFByb2dyYW0oZSxyLG4saSl9O3ZhciBuPXQoIi4vR0xFcnJvciIpLGk9dCgiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIiksYT1uZXcoInVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWttYXAtc2hpbSIpOldlYWtNYXApLG89MDtmdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8pe3RoaXMuaWQ9dCx0aGlzLnNyYz1lLHRoaXMudHlwZT1yLHRoaXMuc2hhZGVyPW4sdGhpcy5jb3VudD1hLHRoaXMucHJvZ3JhbXM9W10sdGhpcy5jYWNoZT1vfWZ1bmN0aW9uIGwodCl7dGhpcy5nbD10LHRoaXMuc2hhZGVycz1be30se31dLHRoaXMucHJvZ3JhbXM9e319cy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2lmKDA9PS0tdGhpcy5jb3VudCl7Zm9yKHZhciB0PXRoaXMuY2FjaGUsZT10LmdsLHI9dGhpcy5wcm9ncmFtcyxuPTAsaT1yLmxlbmd0aDtuPGk7KytuKXt2YXIgYT10LnByb2dyYW1zW3Jbbl1dO2EmJihkZWxldGUgdC5wcm9ncmFtc1tuXSxlLmRlbGV0ZVByb2dyYW0oYSkpfWUuZGVsZXRlU2hhZGVyKHRoaXMuc2hhZGVyKSxkZWxldGUgdC5zaGFkZXJzW3RoaXMudHlwZT09PWUuRlJBR01FTlRfU0hBREVSfDBdW3RoaXMuc3JjXX19O3ZhciBjPWwucHJvdG90eXBlO2Z1bmN0aW9uIHUodCl7dmFyIGU9YS5nZXQodCk7cmV0dXJuIGV8fChlPW5ldyBsKHQpLGEuc2V0KHQsZSkpLGV9Yy5nZXRTaGFkZXJSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdsLGE9dGhpcy5zaGFkZXJzW3Q9PT1yLkZSQUdNRU5UX1NIQURFUnwwXSxsPWFbZV07aWYobCYmci5pc1NoYWRlcihsLnNoYWRlcikpbC5jb3VudCs9MTtlbHNle3ZhciBjPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10LmNyZWF0ZVNoYWRlcihlKTtpZih0LnNoYWRlclNvdXJjZShhLHIpLHQuY29tcGlsZVNoYWRlcihhKSwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIoYSx0LkNPTVBJTEVfU1RBVFVTKSl7dmFyIG89dC5nZXRTaGFkZXJJbmZvTG9nKGEpO3RyeXt2YXIgcz1pKG8scixlKX1jYXRjaCh0KXt0aHJvdyBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmb3JtYXQgY29tcGlsZXIgZXJyb3I6ICIrdCksbmV3IG4obywiRXJyb3IgY29tcGlsaW5nIHNoYWRlcjpcbiIrbyl9dGhyb3cgbmV3IG4obyxzLnNob3J0LHMubG9uZyl9cmV0dXJuIGF9KHIsdCxlKTtsPWFbZV09bmV3IHMobysrLGUsdCxjLFtdLDEsdGhpcyl9cmV0dXJuIGx9LGMuZ2V0UHJvZ3JhbT1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1bdC5pZCxlLmlkLHIuam9pbigiOiIpLGkuam9pbigiOiIpXS5qb2luKCJAIiksbz10aGlzLnByb2dyYW1zW2FdO3JldHVybiBvJiZ0aGlzLmdsLmlzUHJvZ3JhbShvKXx8KHRoaXMucHJvZ3JhbXNbYV09bz1mdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPXQuY3JlYXRlUHJvZ3JhbSgpO3QuYXR0YWNoU2hhZGVyKG8sZSksdC5hdHRhY2hTaGFkZXIobyxyKTtmb3IodmFyIHM9MDtzPGkubGVuZ3RoOysrcyl0LmJpbmRBdHRyaWJMb2NhdGlvbihvLGFbc10saVtzXSk7aWYodC5saW5rUHJvZ3JhbShvKSwhdC5nZXRQcm9ncmFtUGFyYW1ldGVyKG8sdC5MSU5LX1NUQVRVUykpe3ZhciBsPXQuZ2V0UHJvZ3JhbUluZm9Mb2cobyk7dGhyb3cgbmV3IG4obCwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiAiK2wpfXJldHVybiBvfSh0aGlzLmdsLHQuc2hhZGVyLGUuc2hhZGVyLHIsaSksdC5wcm9ncmFtcy5wdXNoKGEpLGUucHJvZ3JhbXMucHVzaChhKSksb319LHsiLi9HTEVycm9yIjozMzYsImdsLWZvcm1hdC1jb21waWxlci1lcnJvciI6MjcwLCJ3ZWFrbWFwLXNoaW0iOjYwNX1dLDM0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucGxvdD10LHRoaXMuZW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy53aWR0aD1bMSwxLDEsMV0sdGhpcy5jb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmNlbnRlcj1bMS8wLDEvMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IG4odCk7cmV0dXJuIHIudXBkYXRlKGUpLHQuYWRkT3ZlcmxheShyKSxyfTt2YXIgaT1uLnByb3RvdHlwZTtpLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMuZW5hYmxlPSh0LmVuYWJsZXx8WyEwLCEwLCExLCExXSkuc2xpY2UoKSx0aGlzLndpZHRoPSh0LndpZHRofHxbMSwxLDEsMV0pLnNsaWNlKCksdGhpcy5jb2xvcj0odC5jb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pKSx0aGlzLmNlbnRlcj0odC5jZW50ZXJ8fFsxLzAsMS8wXSkuc2xpY2UoKSx0aGlzLnBsb3Quc2V0T3ZlcmxheURpcnR5KCl9LGkuZHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZW5hYmxlLGU9dGhpcy53aWR0aCxyPXRoaXMuY29sb3Isbj10aGlzLmNlbnRlcixpPXRoaXMucGxvdCxhPWkubGluZSxvPWkuZGF0YUJveCxzPWkudmlld0JveDtpZihhLmJpbmQoKSxvWzBdPD1uWzBdJiZuWzBdPD1vWzJdJiZvWzFdPD1uWzFdJiZuWzFdPD1vWzNdKXt2YXIgbD1zWzBdKyhuWzBdLW9bMF0pLyhvWzJdLW9bMF0pKihzWzJdLXNbMF0pLGM9c1sxXSsoblsxXS1vWzFdKS8ob1szXS1vWzFdKSooc1szXS1zWzFdKTt0WzBdJiZhLmRyYXdMaW5lKGwsYyxzWzBdLGMsZVswXSxyWzBdKSx0WzFdJiZhLmRyYXdMaW5lKGwsYyxsLHNbMV0sZVsxXSxyWzFdKSx0WzJdJiZhLmRyYXdMaW5lKGwsYyxzWzJdLGMsZVsyXSxyWzJdKSx0WzNdJiZhLmRyYXdMaW5lKGwsYyxsLHNbM10sZVszXSxyWzNdKX19LGkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0se31dLDM0MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNTddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNTd9XSwzNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgY29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgd2VpZ2h0O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY29vcmRpbmF0ZXNbM107XG51bmlmb3JtIHZlYzQgY29sb3JzWzNdO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyB2ZXJ0ZXhQb3NpdGlvbiA9IG1peChjb29yZGluYXRlc1swXSxcbiAgICBtaXgoY29vcmRpbmF0ZXNbMl0sIGNvb3JkaW5hdGVzWzFdLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKSwgYWJzKHBvc2l0aW9uKSk7XG5cbiAgdmVjNCBjbGlwUG9zID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQodmVydGV4UG9zaXRpb24sIDEuMCk7XG4gIHZlYzIgY2xpcE9mZnNldCA9IChwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChjb2xvciwgMC4wKSkueHk7XG4gIHZlYzIgZGVsdGEgPSB3ZWlnaHQgKiBjbGlwT2Zmc2V0ICogc2NyZWVuU2hhcGU7XG4gIHZlYzIgbGluZU9mZnNldCA9IG5vcm1hbGl6ZSh2ZWMyKGRlbHRhLnksIC1kZWx0YS54KSkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiAgID0gdmVjNChjbGlwUG9zLnh5ICsgY2xpcFBvcy53ICogMC41ICogbGluZVdpZHRoICogbGluZU9mZnNldCwgY2xpcFBvcy56LCBjbGlwUG9zLncpO1xuICBmcmFnQ29sb3IgICAgID0gY29sb3IueCAqIGNvbG9yc1swXSArIGNvbG9yLnkgKiBjb2xvcnNbMV0gKyBjb2xvci56ICogY29sb3JzWzJdO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzMifSx7bmFtZToid2VpZ2h0Iix0eXBlOiJmbG9hdCJ9XSl9fSx7ImdsLXNoYWRlciI6MzM1LGdsc2xpZnk6MzQzfV0sMzQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMvaW5kZXgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmdW5jdGlvbiBvKHQsZSxuLGksYSxvKXt2YXIgcz1bdCxlLG4sMCwwLDAsMV07c1tpKzNdPTEsc1tpXT1hLHIucHVzaC5hcHBseShyLHMpLHNbNl09LTEsci5wdXNoLmFwcGx5KHIscyksc1tpXT1vLHIucHVzaC5hcHBseShyLHMpLHIucHVzaC5hcHBseShyLHMpLHNbNl09MSxyLnB1c2guYXBwbHkocixzKSxzW2ldPWEsci5wdXNoLmFwcGx5KHIscyl9bygwLDAsMCwwLDAsMSksbygwLDAsMCwxLDAsMSksbygwLDAsMCwyLDAsMSksbygxLDAsMCwxLC0xLDEpLG8oMSwwLDAsMiwtMSwxKSxvKDAsMSwwLDAsLTEsMSksbygwLDEsMCwyLC0xLDEpLG8oMCwwLDEsMCwtMSwxKSxvKDAsMCwxLDEsLTEsMSk7dmFyIGw9bih0LHIpLGM9aSh0LFt7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6Mjh9LHt0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6Mjh9LHt0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZToxLG9mZnNldDoyNCxzdHJpZGU6Mjh9XSksdT1hKHQpO3UuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0xLHUuYXR0cmlidXRlcy53ZWlnaHQubG9jYXRpb249Mjt2YXIgZj1uZXcgcyh0LGwsYyx1KTtyZXR1cm4gZi51cGRhdGUoZSksZn07dmFyIG89WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1uLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbLTFlMywtMWUzLC0xZTNdLFsxZTMsMWUzLDFlM11dLHRoaXMucG9zaXRpb249WzAsMCwwXSx0aGlzLmxpbmVXaWR0aD1bMiwyLDJdLHRoaXMuY29sb3JzPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5lbmFibGVkPVshMCwhMCwhMF0sdGhpcy5kcmF3U2lkZXM9WyEwLCEwLCEwXSx0aGlzLmF4ZXM9bnVsbH12YXIgbD1zLnByb3RvdHlwZSxjPVswLDAsMF0sdT1bMCwwLDBdLGY9WzAsMF07bC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe30sbC5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnZhbyxuPXRoaXMuc2hhZGVyO3IuYmluZCgpLG4uYmluZCgpO3ZhciBpLGE9dC5tb2RlbHx8byxzPXQudmlld3x8byxsPXQucHJvamVjdGlvbnx8bzt0aGlzLmF4ZXMmJihpPXRoaXMuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXMpO2Zvcih2YXIgaD1jLHA9dSxkPTA7ZDwzOysrZClpJiZpW2RdPDA/KGhbZF09dGhpcy5ib3VuZHNbMF1bZF0scFtkXT10aGlzLmJvdW5kc1sxXVtkXSk6KGhbZF09dGhpcy5ib3VuZHNbMV1bZF0scFtkXT10aGlzLmJvdW5kc1swXVtkXSk7ZlswXT1lLmRyYXdpbmdCdWZmZXJXaWR0aCxmWzFdPWUuZHJhd2luZ0J1ZmZlckhlaWdodCxuLnVuaWZvcm1zLm1vZGVsPWEsbi51bmlmb3Jtcy52aWV3PXMsbi51bmlmb3Jtcy5wcm9qZWN0aW9uPWwsbi51bmlmb3Jtcy5jb29yZGluYXRlcz1bdGhpcy5wb3NpdGlvbixoLHBdLG4udW5pZm9ybXMuY29sb3JzPXRoaXMuY29sb3JzLG4udW5pZm9ybXMuc2NyZWVuU2hhcGU9Zjtmb3IoZD0wO2Q8MzsrK2Qpbi51bmlmb3Jtcy5saW5lV2lkdGg9dGhpcy5saW5lV2lkdGhbZF0qdGhpcy5waXhlbFJhdGlvLHRoaXMuZW5hYmxlZFtkXSYmKHIuZHJhdyhlLlRSSUFOR0xFUyw2LDYqZCksdGhpcy5kcmF3U2lkZXNbZF0mJnIuZHJhdyhlLlRSSUFOR0xFUywxMiwxOCsxMipkKSk7ci51bmJpbmQoKX0sbC51cGRhdGU9ZnVuY3Rpb24odCl7dCYmKCJib3VuZHMiaW4gdCYmKHRoaXMuYm91bmRzPXQuYm91bmRzKSwicG9zaXRpb24iaW4gdCYmKHRoaXMucG9zaXRpb249dC5wb3NpdGlvbiksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJjb2xvcnMiaW4gdCYmKHRoaXMuY29sb3JzPXQuY29sb3JzKSwiZW5hYmxlZCJpbiB0JiYodGhpcy5lbmFibGVkPXQuZW5hYmxlZCksImRyYXdTaWRlcyJpbiB0JiYodGhpcy5kcmF3U2lkZXM9dC5kcmF3U2lkZXMpKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycy9pbmRleCI6MzQ0LCJnbC1idWZmZXIiOjI1OSwiZ2wtdmFvIjozNTh9XSwzNDY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHR1YmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cbi8vXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cbi8vIFRoZSBpbmRleGVzIG9mIHR1YmUgc2VnbWVudHMgcnVuIGZyb20gMCB0byA4LlxuLy9cbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xuICBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB2MyA9IHggKyB5O1xuXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XG5cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZSwgdHViZVNjYWxlO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb24sIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbCwgZl9saWdodERpcmVjdGlvbiwgZl9leWVEaXJlY3Rpb24sIGZfZGF0YSwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gU2NhbGUgdGhlIHZlY3RvciBtYWduaXR1ZGUgdG8gc3RheSBjb25zdGFudCB3aXRoXG4gIC8vIG1vZGVsICYgdmlldyBjaGFuZ2VzLlxuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpO1xuICB2ZWM0IHR1YmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcbiAgY2FtZXJhQ29vcmRpbmF0ZS54eXogLz0gY2FtZXJhQ29vcmRpbmF0ZS53O1xuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9ub3JtYWwgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLCAwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xuXG4gIC8vIHZlYzQgbV9wb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQodHViZVBvc2l0aW9uLCAxLjApO1xuICB2ZWM0IHRfcG9zaXRpb24gID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gICAgICA9IHByb2plY3Rpb24gKiB0X3Bvc2l0aW9uO1xuXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9kYXRhICAgICAgICAgICA9IHR1YmVQb3NpdGlvbi54eXo7XG4gIGZfcG9zaXRpb24gICAgICAgPSBwb3NpdGlvbi54eXo7XG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcbn1cbiJdKSxhPW4oWyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbihOZG90SCwgcm91Z2huZXNzKTtcblxuICAvL0ZyZXNuZWwgdGVybVxuICBmbG9hdCBGID0gcG93KDEuMCAtIFZkb3ROLCBmcmVzbmVsKTtcblxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXG4gIHJldHVybiAgRyAqIEYgKiBEIC8gbWF4KDMuMTQxNTkyNjUgKiBWZG90TiwgMC4wMDAwMDEpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcywgZnJlc25lbCwga2FtYmllbnQsIGtkaWZmdXNlLCBrc3BlY3VsYXIsIG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWwsIGZfbGlnaHREaXJlY3Rpb24sIGZfZXllRGlyZWN0aW9uLCBmX2RhdGEsIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xuICB2ZWMzIEwgPSBub3JtYWxpemUoZl9saWdodERpcmVjdGlvbik7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XG5cbiAgaWYoZ2xfRnJvbnRGYWNpbmcpIHtcbiAgICBOID0gLU47XG4gIH1cblxuICBmbG9hdCBzcGVjdWxhciA9IG1pbigxLjAsIG1heCgwLjAsIGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCkpKTtcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBvcGFjaXR5O1xufVxuIl0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XG4gIH1cbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSB0dWJlIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cbi8vXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIHR1YmUgcmluZyB3aXRoIGl0cyBjZW50ZXIgYXQgb3JpZ2luLCByYWRpdXMgb2YgbGVuZ3RoKGQpLCBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIGQuXG4vL1xuLy8gRWFjaCB0dWJlIHNlZ21lbnQgaXMgbWFkZSB1cCBvZiBhIHJpbmcgb2YgdmVydGljZXMuXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIHR1YmUgYnkgY29ubmVjdGluZyB0aGVtIHRvZ2V0aGVyIGluIHRoZSB2ZXJ0ZXggYXJyYXkuXG4vLyBUaGUgaW5kZXhlcyBvZiB0dWJlIHNlZ21lbnRzIHJ1biBmcm9tIDAgdG8gOC5cbi8vXG52ZWMzIGdldFR1YmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IGluZGV4LCBvdXQgdmVjMyBub3JtYWwpIHtcbiAgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqIChpbmRleCAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcblxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCk7XG4gIHZlYzMgdjMgPSB4ICsgeTtcblxuICBub3JtYWwgPSBub3JtYWxpemUodjMpO1xuXG4gIHJldHVybiB2Mztcbn1cblxuYXR0cmlidXRlIHZlYzQgdmVjdG9yO1xuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCB0dWJlU2NhbGU7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBub3JtYWw7XG4gIHZlYzMgWFlaID0gZ2V0VHViZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKHR1YmVTY2FsZSAqIHZlY3Rvci53ICogbm9ybWFsaXplKHZlY3Rvci54eXopKSwgcG9zaXRpb24udywgbm9ybWFsKTtcbiAgdmVjNCB0dWJlUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XG5cbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIHR1YmVQb3NpdGlvbjtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XG59XG4iXSkscz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWM0In1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWM0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In0se25hbWU6InZlY3RvciIsdHlwZToidmVjNCJ9XX19LHtnbHNsaWZ5OjM0N31dLDM0NzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNTddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNTd9XSwzNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtdmVjMyIpLGk9dCgiZ2wtdmVjNCIpLGE9WyJ4eXoiLCJ4enkiLCJ5eHoiLCJ5engiLCJ6eHkiLCJ6eXgiXSxvPWZ1bmN0aW9uKHQsZSxyLGEpe2Zvcih2YXIgbz0wLHM9MDtzPHQubGVuZ3RoO3MrKylmb3IodmFyIGw9dFtzXS52ZWxvY2l0aWVzLGM9MDtjPGwubGVuZ3RoO2MrKylvPU1hdGgubWF4KG8sbi5sZW5ndGgobFtjXSkpO3ZhciB1PXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsYSl7Zm9yKHZhciBvPXQucG9pbnRzLHM9dC52ZWxvY2l0aWVzLGw9dC5kaXZlcmdlbmNlcyxjPVtdLHU9W10sZj1bXSxoPVtdLHA9W10sZD1bXSxnPTAsbT0wLHY9aS5jcmVhdGUoKSx5PWkuY3JlYXRlKCkseD0wO3g8by5sZW5ndGg7eCsrKXt2YXIgYj1vW3hdLF89c1t4XSx3PWxbeF07MD09PWUmJih3PS4wNSpyKSxtPW4ubGVuZ3RoKF8pL2Esdj1pLmNyZWF0ZSgpLG4uY29weSh2LF8pLHZbM109dztmb3IodmFyIFQ9MDtUPDg7VCsrKXBbVF09W2JbMF0sYlsxXSxiWzJdLFRdO2lmKGgubGVuZ3RoPjApZm9yKFQ9MDtUPDg7VCsrKXt2YXIgaz0oVCsxKSU4O2MucHVzaChoW1RdLHBbVF0scFtrXSxwW2tdLGhba10saFtUXSksZi5wdXNoKHksdix2LHYseSx5KSxkLnB1c2goZyxtLG0sbSxnLGcpO3ZhciBNPWMubGVuZ3RoO3UucHVzaChbTS02LE0tNSxNLTRdLFtNLTMsTS0yLE0tMV0pfXZhciBBPWg7aD1wLHA9QTt2YXIgUz15O3k9dix2PVM7dmFyIEU9ZztnPW0sbT1FfXJldHVybntwb3NpdGlvbnM6YyxjZWxsczp1LHZlY3RvcnM6Zix2ZXJ0ZXhJbnRlbnNpdHk6ZH19KHQscixhLG8pfSkpLGY9W10saD1bXSxwPVtdLGQ9W107Zm9yKHM9MDtzPHUubGVuZ3RoO3MrKyl7dmFyIGc9dVtzXSxtPWYubGVuZ3RoO2Y9Zi5jb25jYXQoZy5wb3NpdGlvbnMpLHA9cC5jb25jYXQoZy52ZWN0b3JzKSxkPWQuY29uY2F0KGcudmVydGV4SW50ZW5zaXR5KTtmb3IoYz0wO2M8Zy5jZWxscy5sZW5ndGg7YysrKXt2YXIgdj1nLmNlbGxzW2NdLHk9W107aC5wdXNoKHkpO2Zvcih2YXIgeD0wO3g8di5sZW5ndGg7eCsrKXkucHVzaCh2W3hdK20pfX1yZXR1cm57cG9zaXRpb25zOmYsY2VsbHM6aCx2ZWN0b3JzOnAsdmVydGV4SW50ZW5zaXR5OmQsY29sb3JtYXA6ZX19LHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoO2ZvcihyPTA7cjxuO3IrKyl7dmFyIGk9dFtyXTtpZihpPT09ZSlyZXR1cm4gcjtpZihpPmUpcmV0dXJuIHItMX1yZXR1cm4gcn0sbD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ8ZT9lOnQ+cj9yOnR9LGM9ZnVuY3Rpb24odCl7dmFyIGU9MS8wO3Quc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpO2Zvcih2YXIgcj10Lmxlbmd0aCxuPTE7bjxyO24rKyl7dmFyIGk9TWF0aC5hYnModFtuXS10W24tMV0pO2k8ZSYmKGU9aSl9cmV0dXJuIGV9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhcnRpbmdQb3NpdGlvbnMsaT10Lm1heExlbmd0aHx8MWUzLHU9dC50dWJlU2l6ZXx8MSxmPXQuYWJzb2x1dGVUdWJlU2l6ZSxoPXQuZ3JpZEZpbGx8fCIreCt5K3oiLHA9e307LTEhPT1oLmluZGV4T2YoIi14IikmJihwLnJldmVyc2VkWD0hMCksLTEhPT1oLmluZGV4T2YoIi15IikmJihwLnJldmVyc2VkWT0hMCksLTEhPT1oLmluZGV4T2YoIi16IikmJihwLnJldmVyc2VkWj0hMCkscC5maWxsZWQ9YS5pbmRleE9mKGgucmVwbGFjZSgvLS9nLCIiKS5yZXBsYWNlKC9cKy9nLCIiKSk7dmFyIGQ9dC5nZXRWZWxvY2l0eXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLnZlY3RvcnMsYT1lLm1lc2hncmlkLG89dFswXSxjPXRbMV0sdT10WzJdLGY9YVswXS5sZW5ndGgsaD1hWzFdLmxlbmd0aCxwPWFbMl0ubGVuZ3RoLGQ9cyhhWzBdLG8pLGc9cyhhWzFdLGMpLG09cyhhWzJdLHUpLHY9ZCsxLHk9ZysxLHg9bSsxO2lmKGQ9bChkLDAsZi0xKSx2PWwodiwwLGYtMSksZz1sKGcsMCxoLTEpLHk9bCh5LDAsaC0xKSxtPWwobSwwLHAtMSkseD1sKHgsMCxwLTEpLGQ8MHx8ZzwwfHxtPDB8fHY+Zi0xfHx5PmgtMXx8eD5wLTEpcmV0dXJuIG4uY3JlYXRlKCk7dmFyIGIsXyx3LFQsayxNLEE9YVswXVtkXSxTPWFbMF1bdl0sRT1hWzFdW2ddLEM9YVsxXVt5XSxMPWFbMl1bbV0sST0oby1BKS8oUy1BKSxQPShjLUUpLyhDLUUpLHo9KHUtTCkvKGFbMl1beF0tTCk7c3dpdGNoKGlzRmluaXRlKEkpfHwoST0uNSksaXNGaW5pdGUoUCl8fChQPS41KSxpc0Zpbml0ZSh6KXx8KHo9LjUpLHIucmV2ZXJzZWRYJiYoZD1mLTEtZCx2PWYtMS12KSxyLnJldmVyc2VkWSYmKGc9aC0xLWcseT1oLTEteSksci5yZXZlcnNlZFomJihtPXAtMS1tLHg9cC0xLXgpLHIuZmlsbGVkKXtjYXNlIDU6az1tLE09eCx3PWcqcCxUPXkqcCxiPWQqcCpoLF89dipwKmg7YnJlYWs7Y2FzZSA0Oms9bSxNPXgsYj1kKnAsXz12KnAsdz1nKnAqZixUPXkqcCpmO2JyZWFrO2Nhc2UgMzp3PWcsVD15LGs9bSpoLE09eCpoLGI9ZCpoKnAsXz12KmgqcDticmVhaztjYXNlIDI6dz1nLFQ9eSxiPWQqaCxfPXYqaCxrPW0qaCpmLE09eCpoKmY7YnJlYWs7Y2FzZSAxOmI9ZCxfPXYsaz1tKmYsTT14KmYsdz1nKmYqcCxUPXkqZipwO2JyZWFrO2RlZmF1bHQ6Yj1kLF89dix3PWcqZixUPXkqZixrPW0qZipoLE09eCpmKmh9dmFyIE89aVtiK3cra10sRD1pW2IrdytNXSxSPWlbYitUK2tdLEY9aVtiK1QrTV0sQj1pW18rdytrXSxOPWlbXyt3K01dLGo9aVtfK1Qra10sVT1pW18rVCtNXSxWPW4uY3JlYXRlKCkscT1uLmNyZWF0ZSgpLEg9bi5jcmVhdGUoKSxHPW4uY3JlYXRlKCk7bi5sZXJwKFYsTyxCLEkpLG4ubGVycChxLEQsTixJKSxuLmxlcnAoSCxSLGosSSksbi5sZXJwKEcsRixVLEkpO3ZhciBZPW4uY3JlYXRlKCksVz1uLmNyZWF0ZSgpO24ubGVycChZLFYsSCxQKSxuLmxlcnAoVyxxLEcsUCk7dmFyIFg9bi5jcmVhdGUoKTtyZXR1cm4gbi5sZXJwKFgsWSxXLHopLFh9KGUsdCxwKX0sZz10LmdldERpdmVyZ2VuY2V8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5jcmVhdGUoKSxpPTFlLTQ7bi5hZGQocix0LFtpLDAsMF0pO3ZhciBhPWQocik7bi5zdWJ0cmFjdChhLGEsZSksbi5zY2FsZShhLGEsMS9pKSxuLmFkZChyLHQsWzAsaSwwXSk7dmFyIG89ZChyKTtuLnN1YnRyYWN0KG8sbyxlKSxuLnNjYWxlKG8sbywxL2kpLG4uYWRkKHIsdCxbMCwwLGldKTt2YXIgcz1kKHIpO3JldHVybiBuLnN1YnRyYWN0KHMscyxlKSxuLnNjYWxlKHMscywxL2kpLG4uYWRkKHIsYSxvKSxuLmFkZChyLHIscykscn0sbT1bXSx2PWVbMF1bMF0seT1lWzBdWzFdLHg9ZVswXVsyXSxiPWVbMV1bMF0sXz1lWzFdWzFdLHc9ZVsxXVsyXSxUPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4hKGU8dnx8ZT5ifHxyPHl8fHI+X3x8bjx4fHxuPncpfSxrPTEwKm4uZGlzdGFuY2UoZVswXSxlWzFdKS9pLE09ayprLEE9MSxTPTAsRT1yLmxlbmd0aDtFPjEmJihBPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPVtdLG49W10saT17fSxhPXt9LG89e30scz10Lmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIHU9dFtsXSxmPXVbMF0saD11WzFdLHA9dVsyXTtpW2ZdfHwoZS5wdXNoKGYpLGlbZl09ITApLGFbaF18fChyLnB1c2goaCksYVtoXT0hMCksb1twXXx8KG4ucHVzaChwKSxvW3BdPSEwKX12YXIgZD1jKGUpLGc9YyhyKSxtPWMobiksdj1NYXRoLm1pbihkLGcsbSk7cmV0dXJuIGlzRmluaXRlKHYpP3Y6MX0ocikpO2Zvcih2YXIgQz0wO0M8RTtDKyspe3ZhciBMPW4uY3JlYXRlKCk7bi5jb3B5KEwscltDXSk7dmFyIEk9W0xdLFA9W10sej1kKEwpLE89TDtQLnB1c2goeik7dmFyIEQ9W10sUj1nKEwseiksRj1uLmxlbmd0aChSKTtpc0Zpbml0ZShGKSYmRj5TJiYoUz1GKSxELnB1c2goRiksbS5wdXNoKHtwb2ludHM6SSx2ZWxvY2l0aWVzOlAsZGl2ZXJnZW5jZXM6RH0pO2Zvcih2YXIgQj0wO0I8MTAwKmkmJkkubGVuZ3RoPGkmJlQoTCk7KXtCKys7dmFyIE49bi5jbG9uZSh6KSxqPW4uc3F1YXJlZExlbmd0aChOKTtpZigwPT09ailicmVhaztpZihqPk0mJm4uc2NhbGUoTixOLGsvTWF0aC5zcXJ0KGopKSxuLmFkZChOLE4sTCksej1kKE4pLG4uc3F1YXJlZERpc3RhbmNlKE8sTiktTT4tMWUtNCpNKXtJLnB1c2goTiksTz1OLFAucHVzaCh6KTtSPWcoTix6KSxGPW4ubGVuZ3RoKFIpO2lzRmluaXRlKEYpJiZGPlMmJihTPUYpLEQucHVzaChGKX1MPU59fXZhciBVPW8obSx0LmNvbG9ybWFwLFMsQSk7cmV0dXJuIGY/VS50dWJlU2NhbGU9ZjooMD09PVMmJihTPTEpLFUudHViZVNjYWxlPS41KnUqQS9TKSxVfTt2YXIgdT10KCIuL2xpYi9zaGFkZXJzIiksZj10KCJnbC1jb25lM2QiKS5jcmVhdGVNZXNoO2UuZXhwb3J0cy5jcmVhdGVUdWJlTWVzaD1mdW5jdGlvbih0LGUpe3JldHVybiBmKHQsZSx7c2hhZGVyczp1LHRyYWNlVHlwZToic3RyZWFtdHViZSJ9KX19LHsiLi9saWIvc2hhZGVycyI6MzQ2LCJnbC1jb25lM2QiOjI2MCwiZ2wtdmVjMyI6Mzc3LCJnbC12ZWM0Ijo0MTN9XSwzNDk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsc2xpZnkiKSxhPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCB1djtcbmF0dHJpYnV0ZSB2ZWMzIGY7XG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XG5cbnVuaWZvcm0gdmVjMyBvYmplY3RPZmZzZXQ7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb24sIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uLCBleWVQb3NpdGlvbjtcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9ybWFwO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBsb2NhbENvb3JkaW5hdGUgPSB2ZWMzKHV2Lnp3LCBmLngpO1xuICB3b3JsZENvb3JkaW5hdGUgPSBvYmplY3RPZmZzZXQgKyBsb2NhbENvb3JkaW5hdGU7XG4gIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNCh3b3JsZENvb3JkaW5hdGUsIDEuMCk7XG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAga2lsbCA9IGYueTtcbiAgdmFsdWUgPSBmLno7XG4gIHBsYW5lQ29vcmRpbmF0ZSA9IHV2Lnh5O1xuXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGV5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgc3VyZmFjZU5vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLDApICogaW52ZXJzZU1vZGVsKS54eXopO1xufVxuIl0pLG89aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgYmVja21hbm5TcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcykge1xuICByZXR1cm4gYmVja21hbm5EaXN0cmlidXRpb24oZG90KHN1cmZhY2VOb3JtYWwsIG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pKSwgcm91Z2huZXNzKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBsb3dlckJvdW5kLCB1cHBlckJvdW5kO1xudW5pZm9ybSBmbG9hdCBjb250b3VyVGludDtcbnVuaWZvcm0gdmVjNCBjb250b3VyQ29sb3I7XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MsIGZyZXNuZWwsIGthbWJpZW50LCBrZGlmZnVzZSwga3NwZWN1bGFyLCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCB2ZXJ0ZXhDb2xvcjtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKFxuICAgIGtpbGwgPiAwLjAgfHxcbiAgICB2Q29sb3IuYSA9PSAwLjAgfHxcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkQ29vcmRpbmF0ZSlcbiAgKSBkaXNjYXJkO1xuXG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShzdXJmYWNlTm9ybWFsKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGV5ZURpcmVjdGlvbik7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbik7XG5cbiAgaWYoZ2xfRnJvbnRGYWNpbmcpIHtcbiAgICBOID0gLU47XG4gIH1cblxuICBmbG9hdCBzcGVjdWxhciA9IG1heChiZWNrbWFublNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcyksIDAuKTtcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgLy9kZWNpZGUgaG93IHRvIGludGVycG9sYXRlIGNvbG9yIFx1MjAxNCBpbiB2ZXJ0ZXggb3IgaW4gZnJhZ21lbnRcbiAgdmVjNCBzdXJmYWNlQ29sb3IgPVxuICAgIHN0ZXAodmVydGV4Q29sb3IsIC41KSAqIHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKSArXG4gICAgc3RlcCguNSwgdmVydGV4Q29sb3IpICogdkNvbG9yO1xuXG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBtaXgobGl0Q29sb3IsIGNvbnRvdXJDb2xvciwgY29udG91clRpbnQpICogb3BhY2l0eTtcbn1cbiJdKSxzPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCB1djtcbmF0dHJpYnV0ZSBmbG9hdCBmO1xuXG51bmlmb3JtIHZlYzMgb2JqZWN0T2Zmc2V0O1xudW5pZm9ybSBtYXQzIHBlcm11dGF0aW9uO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCBoZWlnaHQsIHpPZmZzZXQ7XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgZGF0YUNvb3JkaW5hdGUgPSBwZXJtdXRhdGlvbiAqIHZlYzModXYueHksIGhlaWdodCk7XG4gIHdvcmxkQ29vcmRpbmF0ZSA9IG9iamVjdE9mZnNldCArIGRhdGFDb29yZGluYXRlO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xuXG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBjbGlwUG9zaXRpb24ueiArPSB6T2Zmc2V0O1xuXG4gIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICB2YWx1ZSA9IGYgKyBvYmplY3RPZmZzZXQuejtcbiAga2lsbCA9IC0xLjA7XG4gIHBsYW5lQ29vcmRpbmF0ZSA9IHV2Lnp3O1xuXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcblxuICAvL0Rvbid0IGRvIGxpZ2h0aW5nIGZvciBjb250b3Vyc1xuICBzdXJmYWNlTm9ybWFsICAgPSB2ZWMzKDEsMCwwKTtcbiAgZXllRGlyZWN0aW9uICAgID0gdmVjMygwLDEsMCk7XG4gIGxpZ2h0RGlyZWN0aW9uICA9IHZlYzMoMCwwLDEpO1xufVxuIl0pLGw9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgc3VyZmFjZU5vcm1hbDtcblxudmVjMiBzcGxpdEZsb2F0KGZsb2F0IHYpIHtcbiAgZmxvYXQgdmggPSAyNTUuMCAqIHY7XG4gIGZsb2F0IHVwcGVyID0gZmxvb3IodmgpO1xuICBmbG9hdCBsb3dlciA9IGZyYWN0KHZoKTtcbiAgcmV0dXJuIHZlYzIodXBwZXIgLyAyNTUuMCwgZmxvb3IobG93ZXIgKiAxNi4wKSAvIDE2LjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGlmICgoa2lsbCA+IDAuMCkgfHxcbiAgICAgIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkQ29vcmRpbmF0ZSkpKSBkaXNjYXJkO1xuXG4gIHZlYzIgdXggPSBzcGxpdEZsb2F0KHBsYW5lQ29vcmRpbmF0ZS54IC8gc2hhcGUueCk7XG4gIHZlYzIgdXkgPSBzcGxpdEZsb2F0KHBsYW5lQ29vcmRpbmF0ZS55IC8gc2hhcGUueSk7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCB1eC54LCB1eS54LCB1eC55ICsgKHV5LnkvMTYuMCkpO1xufVxuIl0pO3IuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxhLG8sbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxhLGwsbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxzLG8sbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6ImZsb2F0In1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlfSxyLmNyZWF0ZVBpY2tDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxzLGwsbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6ImZsb2F0In1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlfX0seyJnbC1zaGFkZXIiOjMzNSxnbHNsaWZ5OjM1MH1dLDM1MDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNTddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNTd9XSwzNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj15KGUpLG49YihlKSxzPXgoZSksbD1fKGUpLGM9aShlKSx1PWEoZSxbe2J1ZmZlcjpjLHNpemU6NCxzdHJpZGU6NDAsb2Zmc2V0OjB9LHtidWZmZXI6YyxzaXplOjMsc3RyaWRlOjQwLG9mZnNldDoxNn0se2J1ZmZlcjpjLHNpemU6MyxzdHJpZGU6NDAsb2Zmc2V0OjI4fV0pLGY9aShlKSxoPWEoZSxbe2J1ZmZlcjpmLHNpemU6NCxzdHJpZGU6MjAsb2Zmc2V0OjB9LHtidWZmZXI6ZixzaXplOjEsc3RyaWRlOjIwLG9mZnNldDoxNn1dKSxwPWkoZSksZD1hKGUsW3tidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfV0pLGc9byhlLDEsMjU2LGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUpO2cubWluRmlsdGVyPWUuTElORUFSLGcubWFnRmlsdGVyPWUuTElORUFSO3ZhciBtPW5ldyBBKGUsWzAsMF0sW1swLDAsMF0sWzAsMCwwXV0scixuLGMsdSxnLHMsbCxmLGgscCxkLFswLDAsMF0pLHY9e2xldmVsczpbW10sW10sW11dfTtmb3IodmFyIHcgaW4gdCl2W3ddPXRbd107cmV0dXJuIHYuY29sb3JtYXA9di5jb2xvcm1hcHx8ImpldCIsbS51cGRhdGUodiksbX07dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJnbC10ZXh0dXJlMmQiKSxzPXQoInR5cGVkYXJyYXktcG9vbCIpLGw9dCgiY29sb3JtYXAiKSxjPXQoIm5kYXJyYXktb3BzIiksdT10KCJuZGFycmF5LXBhY2siKSxmPXQoIm5kYXJyYXkiKSxoPXQoInN1cmZhY2UtbmV0cyIpLHA9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGQ9dCgiZ2wtbWF0NC9pbnZlcnQiKSxnPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksbT10KCJuZGFycmF5LWdyYWRpZW50Iiksdj10KCIuL2xpYi9zaGFkZXJzIikseT12LmNyZWF0ZVNoYWRlcix4PXYuY3JlYXRlQ29udG91clNoYWRlcixiPXYuY3JlYXRlUGlja1NoYWRlcixfPXYuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXIsdz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sVD1bWzAsMF0sWzAsMV0sWzEsMF0sWzEsMV0sWzEsMF0sWzAsMV1dLGs9W1swLDAsMCwwLDAsMCwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMCwwXSxbMCwwLDAsMCwwLDAsMCwwLDBdXTtmdW5jdGlvbiBNKHQsZSxyLG4saSl7dGhpcy5wb3NpdGlvbj10LHRoaXMuaW5kZXg9ZSx0aGlzLnV2PXIsdGhpcy5sZXZlbD1uLHRoaXMuZGF0YUNvb3JkaW5hdGU9aX0hZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7Kyt0KXt2YXIgZT1rW3RdLHI9KHQrMiklMztlWyh0KzEpJTMrMF09MSxlW3IrM109MSxlW3QrNl09MX19KCk7ZnVuY3Rpb24gQSh0LGUscixuLGksYSxvLGwsYyx1LGgscCxkLGcsbSl7dGhpcy5nbD10LHRoaXMuc2hhcGU9ZSx0aGlzLmJvdW5kcz1yLHRoaXMub2JqZWN0T2Zmc2V0PW0sdGhpcy5pbnRlbnNpdHlCb3VuZHM9W10sdGhpcy5fc2hhZGVyPW4sdGhpcy5fcGlja1NoYWRlcj1pLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXI9YSx0aGlzLl92YW89byx0aGlzLl9jb2xvck1hcD1sLHRoaXMuX2NvbnRvdXJTaGFkZXI9Yyx0aGlzLl9jb250b3VyUGlja1NoYWRlcj11LHRoaXMuX2NvbnRvdXJCdWZmZXI9aCx0aGlzLl9jb250b3VyVkFPPXAsdGhpcy5fY29udG91ck9mZnNldHM9W1tdLFtdLFtdXSx0aGlzLl9jb250b3VyQ291bnRzPVtbXSxbXSxbXV0sdGhpcy5fdmVydGV4Q291bnQ9MCx0aGlzLl9waWNrUmVzdWx0PW5ldyBNKFswLDAsMF0sWzAsMF0sWzAsMF0sWzAsMCwwXSxbMCwwLDBdKSx0aGlzLl9keW5hbWljQnVmZmVyPWQsdGhpcy5fZHluYW1pY1ZBTz1nLHRoaXMuX2R5bmFtaWNPZmZzZXRzPVswLDAsMF0sdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuY29udG91cldpZHRoPVsxLDEsMV0sdGhpcy5jb250b3VyTGV2ZWxzPVtbMV0sWzFdLFsxXV0sdGhpcy5jb250b3VyVGludD1bMCwwLDBdLHRoaXMuY29udG91ckNvbG9yPVtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXV0sdGhpcy5zaG93Q29udG91cj0hMCx0aGlzLnNob3dTdXJmYWNlPSEwLHRoaXMuZW5hYmxlSGlnaGxpZ2h0PVshMCwhMCwhMF0sdGhpcy5oaWdobGlnaHRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuaGlnaGxpZ2h0VGludD1bMSwxLDFdLHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSx0aGlzLmVuYWJsZUR5bmFtaWM9WyEwLCEwLCEwXSx0aGlzLmR5bmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHRoaXMuZHluYW1pY0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5keW5hbWljVGludD1bMSwxLDFdLHRoaXMuZHluYW1pY1dpZHRoPVsxLDEsMV0sdGhpcy5heGVzQm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuc3VyZmFjZVByb2plY3Q9WyExLCExLCExXSx0aGlzLmNvbnRvdXJQcm9qZWN0PVtbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sdGhpcy5jb2xvckJvdW5kcz1bITEsITFdLHRoaXMuX2ZpZWxkPVtmKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pLGYocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksZihzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKV0sdGhpcy5waWNrSWQ9MSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5zbmFwVG9EYXRhPSExLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMub3BhY2l0eT0xLHRoaXMubGlnaHRQb3NpdGlvbj1bMTAsMWU0LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy52ZXJ0ZXhDb2xvcj0wLHRoaXMuZGlydHk9ITB9dmFyIFM9QS5wcm90b3R5cGU7Uy5nZW5Db2xvcm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPSExLG49dShbbCh7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSkubWFwKChmdW5jdGlvbih0LG4pe3ZhciBpPWU/ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gMTtpZighZS5sZW5ndGgpcmV0dXJuIDE7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3Ipe2lmKGUubGVuZ3RoPDIpcmV0dXJuIDE7aWYoZVtyXVswXT09PXQpcmV0dXJuIGVbcl1bMV07aWYoZVtyXVswXT50JiZyPjApe3ZhciBuPShlW3JdWzBdLXQpLyhlW3JdWzBdLWVbci0xXVswXSk7cmV0dXJuIGVbcl1bMV0qKDEtbikrbiplW3ItMV1bMV19fXJldHVybiAxfShuLzI1NSxlKTp0WzNdO3JldHVybiBpPDEmJihyPSEwKSxbdFswXSx0WzFdLHRbMl0sMjU1KmldfSkpXSk7cmV0dXJuIGMuZGl2c2VxKG4sMjU1KSx0aGlzLmhhc0FscGhhU2NhbGU9cixufSxTLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF8fHRoaXMuaGFzQWxwaGFTY2FsZX0sUy5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzVHJhbnNwYXJlbnQoKX0sUy5waWNrU2xvdHM9MSxTLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9O3ZhciBFPVswLDAsMF0sQz17c2hvd1N1cmZhY2U6ITEsc2hvd0NvbnRvdXI6ITEscHJvamVjdGlvbnM6W3cuc2xpY2UoKSx3LnNsaWNlKCksdy5zbGljZSgpXSxjbGlwQm91bmRzOltbWzAsMCwwXSxbMCwwLDBdXSxbWzAsMCwwXSxbMCwwLDBdXSxbWzAsMCwwXSxbMCwwLDBdXV19O2Z1bmN0aW9uIEwodCxlKXt2YXIgcixuLGksYT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXN8fEUsbz1lLnNob3dTdXJmYWNlLHM9ZS5zaG93Q29udG91cjtmb3Iocj0wO3I8MzsrK3IpZm9yKG89b3x8ZS5zdXJmYWNlUHJvamVjdFtyXSxuPTA7bjwzOysrbilzPXN8fGUuY29udG91clByb2plY3Rbcl1bbl07Zm9yKHI9MDtyPDM7KytyKXt2YXIgbD1DLnByb2plY3Rpb25zW3JdO2ZvcihuPTA7bjwxNjsrK24pbFtuXT0wO2ZvcihuPTA7bjw0OysrbilsWzUqbl09MTtsWzUqcl09MCxsWzEyK3JdPWUuYXhlc0JvdW5kc1srKGFbcl0+MCldW3JdLHAobCx0Lm1vZGVsLGwpO3ZhciBjPUMuY2xpcEJvdW5kc1tyXTtmb3IoaT0wO2k8MjsrK2kpZm9yKG49MDtuPDM7KytuKWNbaV1bbl09dC5jbGlwQm91bmRzW2ldW25dO2NbMF1bcl09LTFlOCxjWzFdW3JdPTFlOH1yZXR1cm4gQy5zaG93U3VyZmFjZT1vLEMuc2hvd0NvbnRvdXI9cyxDfXZhciBJPXttb2RlbDp3LHZpZXc6dyxwcm9qZWN0aW9uOncsaW52ZXJzZU1vZGVsOncuc2xpY2UoKSxsb3dlckJvdW5kOlswLDAsMF0sdXBwZXJCb3VuZDpbMCwwLDBdLGNvbG9yTWFwOjAsY2xpcEJvdW5kczpbWzAsMCwwXSxbMCwwLDBdXSxoZWlnaHQ6MCxjb250b3VyVGludDowLGNvbnRvdXJDb2xvcjpbMCwwLDAsMV0scGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSx6T2Zmc2V0Oi0xZS00LG9iamVjdE9mZnNldDpbMCwwLDBdLGthbWJpZW50OjEsa2RpZmZ1c2U6MSxrc3BlY3VsYXI6MSxsaWdodFBvc2l0aW9uOlsxZTMsMWUzLDFlM10sZXllUG9zaXRpb246WzAsMCwwXSxyb3VnaG5lc3M6MSxmcmVzbmVsOjEsb3BhY2l0eToxLHZlcnRleENvbG9yOjB9LFA9dy5zbGljZSgpLHo9WzEsMCwwLDAsMSwwLDAsMCwxXTtmdW5jdGlvbiBPKHQsZSl7dD10fHx7fTt2YXIgcj10aGlzLmdsO3IuZGlzYWJsZShyLkNVTExfRkFDRSksdGhpcy5fY29sb3JNYXAuYmluZCgwKTt2YXIgbj1JO24ubW9kZWw9dC5tb2RlbHx8dyxuLnZpZXc9dC52aWV3fHx3LG4ucHJvamVjdGlvbj10LnByb2plY3Rpb258fHcsbi5sb3dlckJvdW5kPVt0aGlzLmJvdW5kc1swXVswXSx0aGlzLmJvdW5kc1swXVsxXSx0aGlzLmNvbG9yQm91bmRzWzBdfHx0aGlzLmJvdW5kc1swXVsyXV0sbi51cHBlckJvdW5kPVt0aGlzLmJvdW5kc1sxXVswXSx0aGlzLmJvdW5kc1sxXVsxXSx0aGlzLmNvbG9yQm91bmRzWzFdfHx0aGlzLmJvdW5kc1sxXVsyXV0sbi5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsbi5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3JbMF0sbi5pbnZlcnNlTW9kZWw9ZChuLmludmVyc2VNb2RlbCxuLm1vZGVsKTtmb3IodmFyIGk9MDtpPDI7KytpKWZvcih2YXIgYT1uLmNsaXBCb3VuZHNbaV0sbz0wO288MzsrK28pYVtvXT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLmNsaXBCb3VuZHNbaV1bb10sLTFlOCksMWU4KTtuLmthbWJpZW50PXRoaXMuYW1iaWVudExpZ2h0LG4ua2RpZmZ1c2U9dGhpcy5kaWZmdXNlTGlnaHQsbi5rc3BlY3VsYXI9dGhpcy5zcGVjdWxhckxpZ2h0LG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzLG4uZnJlc25lbD10aGlzLmZyZXNuZWwsbi5vcGFjaXR5PXRoaXMub3BhY2l0eSxuLmhlaWdodD0wLG4ucGVybXV0YXRpb249eixuLnZlcnRleENvbG9yPXRoaXMudmVydGV4Q29sb3I7dmFyIHM9UDtmb3IocChzLG4udmlldyxuLm1vZGVsKSxwKHMsbi5wcm9qZWN0aW9uLHMpLGQocyxzKSxpPTA7aTwzOysraSluLmV5ZVBvc2l0aW9uW2ldPXNbMTIraV0vc1sxNV07dmFyIGw9c1sxNV07Zm9yKGk9MDtpPDM7KytpKWwrPXRoaXMubGlnaHRQb3NpdGlvbltpXSpzWzQqaSszXTtmb3IoaT0wO2k8MzsrK2kpe3ZhciBjPXNbMTIraV07Zm9yKG89MDtvPDM7KytvKWMrPXNbNCpvK2ldKnRoaXMubGlnaHRQb3NpdGlvbltvXTtuLmxpZ2h0UG9zaXRpb25baV09Yy9sfXZhciB1PUwobix0aGlzKTtpZih1LnNob3dTdXJmYWNlKXtmb3IodGhpcy5fc2hhZGVyLmJpbmQoKSx0aGlzLl9zaGFkZXIudW5pZm9ybXM9bix0aGlzLl92YW8uYmluZCgpLHRoaXMuc2hvd1N1cmZhY2UmJnRoaXMuX3ZlcnRleENvdW50JiZ0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksaT0wO2k8MzsrK2kpdGhpcy5zdXJmYWNlUHJvamVjdFtpXSYmdGhpcy52ZXJ0ZXhDb3VudCYmKHRoaXMuX3NoYWRlci51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW2ldLHRoaXMuX3NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSx0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZih1LnNob3dDb250b3VyKXt2YXIgZj10aGlzLl9jb250b3VyU2hhZGVyO24ua2FtYmllbnQ9MSxuLmtkaWZmdXNlPTAsbi5rc3BlY3VsYXI9MCxuLm9wYWNpdHk9MSxmLmJpbmQoKSxmLnVuaWZvcm1zPW47dmFyIGg9dGhpcy5fY29udG91clZBTztmb3IoaC5iaW5kKCksaT0wO2k8MzsrK2kpZm9yKGYudW5pZm9ybXMucGVybXV0YXRpb249a1tpXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtpXSp0aGlzLnBpeGVsUmF0aW8pLG89MDtvPHRoaXMuY29udG91ckxldmVsc1tpXS5sZW5ndGg7KytvKW89PT10aGlzLmhpZ2hsaWdodExldmVsW2ldPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W2ldKTowIT09byYmby0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtpXSksdGhpcy5fY29udG91ckNvdW50c1tpXVtvXSYmKGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tpXVtvXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2ldW29dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2ldW29dKSk7Zm9yKGk9MDtpPDM7KytpKWZvcihmLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbaV0sZi51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSxvPTA7bzwzOysrbylpZih0aGlzLmNvbnRvdXJQcm9qZWN0W2ldW29dKXtmLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbb10sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbb10qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIGc9MDtnPHRoaXMuY29udG91ckxldmVsc1tvXS5sZW5ndGg7KytnKWc9PT10aGlzLmhpZ2hsaWdodExldmVsW29dPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW29dLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W29dKTowIT09ZyYmZy0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtvXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW29dLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtvXSksdGhpcy5fY29udG91ckNvdW50c1tvXVtnXSYmKGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tvXVtnXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW29dW2ddLHRoaXMuX2NvbnRvdXJPZmZzZXRzW29dW2ddKSl9Zm9yKGgudW5iaW5kKCksKGg9dGhpcy5fZHluYW1pY1ZBTykuYmluZCgpLGk9MDtpPDM7KytpKWlmKDAhPT10aGlzLl9keW5hbWljQ291bnRzW2ldKWZvcihmLnVuaWZvcm1zLm1vZGVsPW4ubW9kZWwsZi51bmlmb3Jtcy5jbGlwQm91bmRzPW4uY2xpcEJvdW5kcyxmLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbaV0sci5saW5lV2lkdGgodGhpcy5keW5hbWljV2lkdGhbaV0qdGhpcy5waXhlbFJhdGlvKSxmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmR5bmFtaWNDb2xvcltpXSxmLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuZHluYW1pY1RpbnRbaV0sZi51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5keW5hbWljTGV2ZWxbaV0saC5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSksbz0wO288MzsrK28pdGhpcy5jb250b3VyUHJvamVjdFtvXVtpXSYmKGYudW5pZm9ybXMubW9kZWw9dS5wcm9qZWN0aW9uc1tvXSxmLnVuaWZvcm1zLmNsaXBCb3VuZHM9dS5jbGlwQm91bmRzW29dLGguZHJhdyhyLkxJTkVTLHRoaXMuX2R5bmFtaWNDb3VudHNbaV0sdGhpcy5fZHluYW1pY09mZnNldHNbaV0pKTtoLnVuYmluZCgpfX1TLmRyYXc9ZnVuY3Rpb24odCl7cmV0dXJuIE8uY2FsbCh0aGlzLHQsITEpfSxTLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtyZXR1cm4gTy5jYWxsKHRoaXMsdCwhMCl9O3ZhciBEPXttb2RlbDp3LHZpZXc6dyxwcm9qZWN0aW9uOncsaW52ZXJzZU1vZGVsOncsY2xpcEJvdW5kczpbWzAsMCwwXSxbMCwwLDBdXSxoZWlnaHQ6MCxzaGFwZTpbMCwwXSxwaWNrSWQ6MCxsb3dlckJvdW5kOlswLDAsMF0sdXBwZXJCb3VuZDpbMCwwLDBdLHpPZmZzZXQ6MCxvYmplY3RPZmZzZXQ6WzAsMCwwXSxwZXJtdXRhdGlvbjpbMSwwLDAsMCwxLDAsMCwwLDFdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxleWVQb3NpdGlvbjpbMCwwLDBdfTtmdW5jdGlvbiBSKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/W2UodFswXSksZSh0WzFdKSxlKHRbMl0pXTpbZSh0KSxlKHQpLGUodCldfWZ1bmN0aW9uIEYodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Mz09PXQubGVuZ3RoP1t0WzBdLHRbMV0sdFsyXSwxXTpbdFswXSx0WzFdLHRbMl0sdFszXV06WzAsMCwwLDFdfWZ1bmN0aW9uIEIodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm5bRih0WzBdKSxGKHRbMV0pLEYodFsyXSldO3ZhciBlPUYodCk7cmV0dXJuW2Uuc2xpY2UoKSxlLnNsaWNlKCksZS5zbGljZSgpXX19Uy5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKTt2YXIgcj1EO3IubW9kZWw9dC5tb2RlbHx8dyxyLnZpZXc9dC52aWV3fHx3LHIucHJvamVjdGlvbj10LnByb2plY3Rpb258fHcsci5zaGFwZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyLnBpY2tJZD10aGlzLnBpY2tJZC8yNTUsci5sb3dlckJvdW5kPXRoaXMuYm91bmRzWzBdLHIudXBwZXJCb3VuZD10aGlzLmJvdW5kc1sxXSxyLm9iamVjdE9mZnNldD10aGlzLm9iamVjdE9mZnNldCxyLnBlcm11dGF0aW9uPXo7Zm9yKHZhciBuPTA7bjwyOysrbilmb3IodmFyIGk9ci5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlbYV09TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW25dW2FdLC0xZTgpLDFlOCk7dmFyIG89TChyLHRoaXMpO2lmKG8uc2hvd1N1cmZhY2Upe2Zvcih0aGlzLl9waWNrU2hhZGVyLmJpbmQoKSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zPXIsdGhpcy5fdmFvLmJpbmQoKSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksbj0wO248MzsrK24pdGhpcy5zdXJmYWNlUHJvamVjdFtuXSYmKHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMubW9kZWw9by5wcm9qZWN0aW9uc1tuXSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9by5jbGlwQm91bmRzW25dLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKG8uc2hvd0NvbnRvdXIpe3ZhciBzPXRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyO3MuYmluZCgpLHMudW5pZm9ybXM9cjt2YXIgbD10aGlzLl9jb250b3VyVkFPO2ZvcihsLmJpbmQoKSxhPTA7YTwzOysrYSlmb3IoZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKSxzLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbYV0sbj0wO248dGhpcy5jb250b3VyTGV2ZWxzW2FdLmxlbmd0aDsrK24pdGhpcy5fY29udG91ckNvdW50c1thXVtuXSYmKHMudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1thXVtuXSxsLmRyYXcoZS5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2FdW25dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2FdW25dKSk7Zm9yKG49MDtuPDM7KytuKWZvcihzLnVuaWZvcm1zLm1vZGVsPW8ucHJvamVjdGlvbnNbbl0scy51bmlmb3Jtcy5jbGlwQm91bmRzPW8uY2xpcEJvdW5kc1tuXSxhPTA7YTwzOysrYSlpZih0aGlzLmNvbnRvdXJQcm9qZWN0W25dW2FdKXtzLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbYV0sZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIGM9MDtjPHRoaXMuY29udG91ckxldmVsc1thXS5sZW5ndGg7KytjKXRoaXMuX2NvbnRvdXJDb3VudHNbYV1bY10mJihzLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbYV1bY10sbC5kcmF3KGUuTElORVMsdGhpcy5fY29udG91ckNvdW50c1thXVtjXSx0aGlzLl9jb250b3VyT2Zmc2V0c1thXVtjXSkpfWwudW5iaW5kKCl9fSxTLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlLHI9dGhpcy5fcGlja1Jlc3VsdCxuPWVbMF0qKHQudmFsdWVbMF0rKHQudmFsdWVbMl0+PjQpLzE2KS8yNTUsaT1NYXRoLmZsb29yKG4pLGE9bi1pLG89ZVsxXSoodC52YWx1ZVsxXSsoMTUmdC52YWx1ZVsyXSkvMTYpLzI1NSxzPU1hdGguZmxvb3IobyksbD1vLXM7aSs9MSxzKz0xO3ZhciBjPXIucG9zaXRpb247Y1swXT1jWzFdPWNbMl09MDtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgZj11P2E6MS1hLGg9MDtoPDI7KytoKWZvcih2YXIgcD1pK3UsZD1zK2gsbT1mKihoP2w6MS1sKSx2PTA7djwzOysrdiljW3ZdKz10aGlzLl9maWVsZFt2XS5nZXQocCxkKSptO2Zvcih2YXIgeT10aGlzLl9waWNrUmVzdWx0LmxldmVsLHg9MDt4PDM7Kyt4KWlmKHlbeF09Zy5sZSh0aGlzLmNvbnRvdXJMZXZlbHNbeF0sY1t4XSkseVt4XTwwKXRoaXMuY29udG91ckxldmVsc1t4XS5sZW5ndGg+MCYmKHlbeF09MCk7ZWxzZSBpZih5W3hdPHRoaXMuY29udG91ckxldmVsc1t4XS5sZW5ndGgtMSl7dmFyIGI9dGhpcy5jb250b3VyTGV2ZWxzW3hdW3lbeF1dLF89dGhpcy5jb250b3VyTGV2ZWxzW3hdW3lbeF0rMV07TWF0aC5hYnMoYi1jW3hdKT5NYXRoLmFicyhfLWNbeF0pJiYoeVt4XSs9MSl9Zm9yKHIuaW5kZXhbMF09YTwuNT9pOmkrMSxyLmluZGV4WzFdPWw8LjU/czpzKzEsci51dlswXT1uL2VbMF0sci51dlsxXT1vL2VbMV0sdj0wO3Y8MzsrK3Ypci5kYXRhQ29vcmRpbmF0ZVt2XT10aGlzLl9maWVsZFt2XS5nZXQoci5pbmRleFswXSxyLmluZGV4WzFdKTtyZXR1cm4gcn0sUy5wYWRGaWVsZD1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2hhcGUuc2xpY2UoKSxuPXQuc2hhcGUuc2xpY2UoKTtjLmFzc2lnbih0LmxvKDEsMSkuaGkoclswXSxyWzFdKSxlKSxjLmFzc2lnbih0LmxvKDEpLmhpKHJbMF0sMSksZS5oaShyWzBdLDEpKSxjLmFzc2lnbih0LmxvKDEsblsxXS0xKS5oaShyWzBdLDEpLGUubG8oMCxyWzFdLTEpLmhpKHJbMF0sMSkpLGMuYXNzaWduKHQubG8oMCwxKS5oaSgxLHJbMV0pLGUuaGkoMSkpLGMuYXNzaWduKHQubG8oblswXS0xLDEpLmhpKDEsclsxXSksZS5sbyhyWzBdLTEpKSx0LnNldCgwLDAsZS5nZXQoMCwwKSksdC5zZXQoMCxuWzFdLTEsZS5nZXQoMCxyWzFdLTEpKSx0LnNldChuWzBdLTEsMCxlLmdldChyWzBdLTEsMCkpLHQuc2V0KG5bMF0tMSxuWzFdLTEsZS5nZXQoclswXS0xLHJbMV0tMSkpfSxTLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMub2JqZWN0T2Zmc2V0PXQub2JqZWN0T2Zmc2V0fHx0aGlzLm9iamVjdE9mZnNldCx0aGlzLmRpcnR5PSEwLCJjb250b3VyV2lkdGgiaW4gdCYmKHRoaXMuY29udG91cldpZHRoPVIodC5jb250b3VyV2lkdGgsTnVtYmVyKSksInNob3dDb250b3VyImluIHQmJih0aGlzLnNob3dDb250b3VyPVIodC5zaG93Q29udG91cixCb29sZWFuKSksInNob3dTdXJmYWNlImluIHQmJih0aGlzLnNob3dTdXJmYWNlPSEhdC5zaG93U3VyZmFjZSksImNvbnRvdXJUaW50ImluIHQmJih0aGlzLmNvbnRvdXJUaW50PVIodC5jb250b3VyVGludCxCb29sZWFuKSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9Qih0LmNvbnRvdXJDb2xvcikpLCJjb250b3VyUHJvamVjdCJpbiB0JiYodGhpcy5jb250b3VyUHJvamVjdD1SKHQuY29udG91clByb2plY3QsKGZ1bmN0aW9uKHQpe3JldHVybiBSKHQsQm9vbGVhbil9KSkpLCJzdXJmYWNlUHJvamVjdCJpbiB0JiYodGhpcy5zdXJmYWNlUHJvamVjdD10LnN1cmZhY2VQcm9qZWN0KSwiZHluYW1pY0NvbG9yImluIHQmJih0aGlzLmR5bmFtaWNDb2xvcj1CKHQuZHluYW1pY0NvbG9yKSksImR5bmFtaWNUaW50ImluIHQmJih0aGlzLmR5bmFtaWNUaW50PVIodC5keW5hbWljVGludCxOdW1iZXIpKSwiZHluYW1pY1dpZHRoImluIHQmJih0aGlzLmR5bmFtaWNXaWR0aD1SKHQuZHluYW1pY1dpZHRoLE51bWJlcikpLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwib3BhY2l0eXNjYWxlImluIHQmJih0aGlzLm9wYWNpdHlzY2FsZT10Lm9wYWNpdHlzY2FsZSksImNvbG9yQm91bmRzImluIHQmJih0aGlzLmNvbG9yQm91bmRzPXQuY29sb3JCb3VuZHMpLCJ2ZXJ0ZXhDb2xvciJpbiB0JiYodGhpcy52ZXJ0ZXhDb2xvcj10LnZlcnRleENvbG9yPzE6MCksImNvbG9ybWFwImluIHQmJnRoaXMuX2NvbG9yTWFwLnNldFBpeGVscyh0aGlzLmdlbkNvbG9ybWFwKHQuY29sb3JtYXAsdGhpcy5vcGFjaXR5c2NhbGUpKTt2YXIgZT10LmZpZWxkfHx0LmNvb3JkcyYmdC5jb29yZHNbMl18fG51bGwscj0hMTtpZihlfHwoZT10aGlzLl9maWVsZFsyXS5zaGFwZVswXXx8dGhpcy5fZmllbGRbMl0uc2hhcGVbMl0/dGhpcy5fZmllbGRbMl0ubG8oMSwxKS5oaSh0aGlzLl9maWVsZFsyXS5zaGFwZVswXS0yLHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzFdLTIpOnRoaXMuX2ZpZWxkWzJdLmhpKDAsMCkpLCJmaWVsZCJpbiB0fHwiY29vcmRzImluIHQpe3ZhciBpPShlLnNoYXBlWzBdKzIpKihlLnNoYXBlWzFdKzIpO2k+dGhpcy5fZmllbGRbMl0uZGF0YS5sZW5ndGgmJihzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFsyXS5kYXRhKSx0aGlzLl9maWVsZFsyXS5kYXRhPXMubWFsbG9jRmxvYXQobi5uZXh0UG93MihpKSkpLHRoaXMuX2ZpZWxkWzJdPWYodGhpcy5fZmllbGRbMl0uZGF0YSxbZS5zaGFwZVswXSsyLGUuc2hhcGVbMV0rMl0pLHRoaXMucGFkRmllbGQodGhpcy5fZmllbGRbMl0sZSksdGhpcy5zaGFwZT1lLnNoYXBlLnNsaWNlKCk7Zm9yKHZhciBhPXRoaXMuc2hhcGUsbz0wO288MjsrK28pdGhpcy5fZmllbGRbMl0uc2l6ZT50aGlzLl9maWVsZFtvXS5kYXRhLmxlbmd0aCYmKHMuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkW29dLmRhdGEpLHRoaXMuX2ZpZWxkW29dLmRhdGE9cy5tYWxsb2NGbG9hdCh0aGlzLl9maWVsZFsyXS5zaXplKSksdGhpcy5fZmllbGRbb109Zih0aGlzLl9maWVsZFtvXS5kYXRhLFthWzBdKzIsYVsxXSsyXSk7aWYodC5jb29yZHMpe3ZhciBsPXQuY29vcmRzO2lmKCFBcnJheS5pc0FycmF5KGwpfHwzIT09bC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBpbnZhbGlkIGNvb3JkaW5hdGVzIGZvciB4L3kiKTtmb3Iobz0wO288MjsrK28pe3ZhciBjPWxbb107Zm9yKHY9MDt2PDI7Kyt2KWlmKGMuc2hhcGVbdl0hPT1hW3ZdKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogY29vcmRzIGhhdmUgaW5jb3JyZWN0IHNoYXBlIik7dGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFtvXSxjKX19ZWxzZSBpZih0LnRpY2tzKXt2YXIgdT10LnRpY2tzO2lmKCFBcnJheS5pc0FycmF5KHUpfHwyIT09dS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBpbnZhbGlkIHRpY2tzIik7Zm9yKG89MDtvPDI7KytvKXt2YXIgcD11W29dO2lmKChBcnJheS5pc0FycmF5KHApfHxwLmxlbmd0aCkmJihwPWYocCkpLHAuc2hhcGVbMF0hPT1hW29dKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrIGxlbmd0aCIpO3ZhciBkPWYocC5kYXRhLGEpO2Quc3RyaWRlW29dPXAuc3RyaWRlWzBdLGQuc3RyaWRlWzFeb109MCx0aGlzLnBhZEZpZWxkKHRoaXMuX2ZpZWxkW29dLGQpfX1lbHNle2ZvcihvPTA7bzwyOysrbyl7dmFyIGc9WzAsMF07Z1tvXT0xLHRoaXMuX2ZpZWxkW29dPWYodGhpcy5fZmllbGRbb10uZGF0YSxbYVswXSsyLGFbMV0rMl0sZywwKX10aGlzLl9maWVsZFswXS5zZXQoMCwwLDApO2Zvcih2YXIgdj0wO3Y8YVswXTsrK3YpdGhpcy5fZmllbGRbMF0uc2V0KHYrMSwwLHYpO2Zvcih0aGlzLl9maWVsZFswXS5zZXQoYVswXSsxLDAsYVswXS0xKSx0aGlzLl9maWVsZFsxXS5zZXQoMCwwLDApLHY9MDt2PGFbMV07Kyt2KXRoaXMuX2ZpZWxkWzFdLnNldCgwLHYrMSx2KTt0aGlzLl9maWVsZFsxXS5zZXQoMCxhWzFdKzEsYVsxXS0xKX12YXIgeT10aGlzLl9maWVsZCx4PWYocy5tYWxsb2NGbG9hdCgzKnlbMl0uc2l6ZSoyKSxbMyxhWzBdKzIsYVsxXSsyLDJdKTtmb3Iobz0wO288MzsrK28pbSh4LnBpY2sobykseVtvXSwibWlycm9yIik7dmFyIGI9ZihzLm1hbGxvY0Zsb2F0KDMqeVsyXS5zaXplKSxbYVswXSsyLGFbMV0rMiwzXSk7Zm9yKG89MDtvPGFbMF0rMjsrK28pZm9yKHY9MDt2PGFbMV0rMjsrK3Ype3ZhciBfPXguZ2V0KDAsbyx2LDApLHc9eC5nZXQoMCxvLHYsMSksaz14LmdldCgxLG8sdiwwKSxNPXguZ2V0KDEsbyx2LDEpLEE9eC5nZXQoMixvLHYsMCksUz14LmdldCgyLG8sdiwxKSxFPWsqUy1NKkEsQz1BKnctUypfLEw9XypNLXcqayxJPU1hdGguc3FydChFKkUrQypDK0wqTCk7STwxZS04PyhJPU1hdGgubWF4KE1hdGguYWJzKEUpLE1hdGguYWJzKEMpLE1hdGguYWJzKEwpKSk8MWUtOD8oTD0xLEM9RT0wLEk9MSk6ST0xL0k6ST0xL01hdGguc3FydChJKSxiLnNldChvLHYsMCxFKkkpLGIuc2V0KG8sdiwxLEMqSSksYi5zZXQobyx2LDIsTCpJKX1zLmZyZWUoeC5kYXRhKTt2YXIgUD1bMS8wLDEvMCwxLzBdLHo9Wy0xLzAsLTEvMCwtMS8wXSxPPTEvMCxEPS0xLzAsRj0oYVswXS0xKSooYVsxXS0xKSo2LE49cy5tYWxsb2NGbG9hdChuLm5leHRQb3cyKDEwKkYpKSxqPTAsVT0wO2ZvcihvPTA7bzxhWzBdLTE7KytvKXQ6Zm9yKHY9MDt2PGFbMV0tMTsrK3Ype2Zvcih2YXIgVj0wO1Y8MjsrK1YpZm9yKHZhciBxPTA7cTwyOysrcSlmb3IodmFyIEg9MDtIPDM7KytIKXt2YXIgRz10aGlzLl9maWVsZFtIXS5nZXQoMStvK1YsMSt2K3EpO2lmKGlzTmFOKEcpfHwhaXNGaW5pdGUoRykpY29udGludWUgdH1mb3IoSD0wO0g8NjsrK0gpe3ZhciBZPW8rVFtIXVswXSxXPXYrVFtIXVsxXSxYPXRoaXMuX2ZpZWxkWzBdLmdldChZKzEsVysxKSxaPXRoaXMuX2ZpZWxkWzFdLmdldChZKzEsVysxKTtHPXRoaXMuX2ZpZWxkWzJdLmdldChZKzEsVysxKSxFPWIuZ2V0KFkrMSxXKzEsMCksQz1iLmdldChZKzEsVysxLDEpLEw9Yi5nZXQoWSsxLFcrMSwyKSx0LmludGVuc2l0eSYmKEo9dC5pbnRlbnNpdHkuZ2V0KFksVykpO3ZhciBKPXQuaW50ZW5zaXR5P3QuaW50ZW5zaXR5LmdldChZLFcpOkcrdGhpcy5vYmplY3RPZmZzZXRbMl07TltqKytdPVksTltqKytdPVcsTltqKytdPVgsTltqKytdPVosTltqKytdPUcsTltqKytdPTAsTltqKytdPUosTltqKytdPUUsTltqKytdPUMsTltqKytdPUwsUFswXT1NYXRoLm1pbihQWzBdLFgrdGhpcy5vYmplY3RPZmZzZXRbMF0pLFBbMV09TWF0aC5taW4oUFsxXSxaK3RoaXMub2JqZWN0T2Zmc2V0WzFdKSxQWzJdPU1hdGgubWluKFBbMl0sRyt0aGlzLm9iamVjdE9mZnNldFsyXSksTz1NYXRoLm1pbihPLEopLHpbMF09TWF0aC5tYXgoelswXSxYK3RoaXMub2JqZWN0T2Zmc2V0WzBdKSx6WzFdPU1hdGgubWF4KHpbMV0sWit0aGlzLm9iamVjdE9mZnNldFsxXSkselsyXT1NYXRoLm1heCh6WzJdLEcrdGhpcy5vYmplY3RPZmZzZXRbMl0pLEQ9TWF0aC5tYXgoRCxKKSxVKz0xfX1mb3IodC5pbnRlbnNpdHlCb3VuZHMmJihPPSt0LmludGVuc2l0eUJvdW5kc1swXSxEPSt0LmludGVuc2l0eUJvdW5kc1sxXSksbz02O288ajtvKz0xMClOW29dPShOW29dLU8pLyhELU8pO3RoaXMuX3ZlcnRleENvdW50PVUsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci51cGRhdGUoTi5zdWJhcnJheSgwLGopKSxzLmZyZWVGbG9hdChOKSxzLmZyZWUoYi5kYXRhKSx0aGlzLmJvdW5kcz1bUCx6XSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eXx8dGhpcy5fZmllbGRbMl0sdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF09PT1PJiZ0aGlzLmludGVuc2l0eUJvdW5kc1sxXT09PUR8fChyPSEwKSx0aGlzLmludGVuc2l0eUJvdW5kcz1bTyxEXX1pZigibGV2ZWxzImluIHQpe3ZhciBLPXQubGV2ZWxzO2ZvcihLPUFycmF5LmlzQXJyYXkoS1swXSk/Sy5zbGljZSgpOltbXSxbXSxLXSxvPTA7bzwzOysrbylLW29dPUtbb10uc2xpY2UoKSxLW29dLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKTtmb3Iobz0wO288MzsrK28pZm9yKHY9MDt2PEtbb10ubGVuZ3RoOysrdilLW29dW3ZdLT10aGlzLm9iamVjdE9mZnNldFtvXTt0OmZvcihvPTA7bzwzOysrbyl7aWYoS1tvXS5sZW5ndGghPT10aGlzLmNvbnRvdXJMZXZlbHNbb10ubGVuZ3RoKXtyPSEwO2JyZWFrfWZvcih2PTA7djxLW29dLmxlbmd0aDsrK3YpaWYoS1tvXVt2XSE9PXRoaXMuY29udG91ckxldmVsc1tvXVt2XSl7cj0hMDticmVhayB0fX10aGlzLmNvbnRvdXJMZXZlbHM9S31pZihyKXt5PXRoaXMuX2ZpZWxkLGE9dGhpcy5zaGFwZTtmb3IodmFyIFE9W10sJD0wOyQ8MzsrKyQpe3ZhciB0dD10aGlzLmNvbnRvdXJMZXZlbHNbJF0sZXQ9W10scnQ9W10sbnQ9WzAsMCwwXTtmb3Iobz0wO288dHQubGVuZ3RoOysrbyl7dmFyIGl0PWgodGhpcy5fZmllbGRbJF0sdHRbb10pO2V0LnB1c2goUS5sZW5ndGgvNXwwKSxVPTA7dDpmb3Iodj0wO3Y8aXQuY2VsbHMubGVuZ3RoOysrdil7dmFyIGF0PWl0LmNlbGxzW3ZdO2ZvcihIPTA7SDwyOysrSCl7dmFyIG90PWl0LnBvc2l0aW9uc1thdFtIXV0sc3Q9b3RbMF0sbHQ9MHxNYXRoLmZsb29yKHN0KSxjdD1zdC1sdCx1dD1vdFsxXSxmdD0wfE1hdGguZmxvb3IodXQpLGh0PXV0LWZ0LHB0PSExO2U6Zm9yKHZhciBkdD0wO2R0PDM7KytkdCl7bnRbZHRdPTA7dmFyIGd0PSgkK2R0KzEpJTM7Zm9yKFY9MDtWPDI7KytWKXt2YXIgbXQ9Vj9jdDoxLWN0O2ZvcihZPTB8TWF0aC5taW4oTWF0aC5tYXgobHQrViwwKSxhWzBdKSxxPTA7cTwyOysrcSl7dmFyIHZ0PXE/aHQ6MS1odDtpZihXPTB8TWF0aC5taW4oTWF0aC5tYXgoZnQrcSwwKSxhWzFdKSxHPWR0PDI/dGhpcy5fZmllbGRbZ3RdLmdldChZLFcpOih0aGlzLmludGVuc2l0eS5nZXQoWSxXKS10aGlzLmludGVuc2l0eUJvdW5kc1swXSkvKHRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKSwhaXNGaW5pdGUoRyl8fGlzTmFOKEcpKXtwdD0hMDticmVhayBlfXZhciB5dD1tdCp2dDtudFtkdF0rPXl0Kkd9fX1pZihwdCl7aWYoSD4wKXtmb3IodmFyIHh0PTA7eHQ8NTsrK3h0KVEucG9wKCk7VS09MX1jb250aW51ZSB0fVEucHVzaChudFswXSxudFsxXSxvdFswXSxvdFsxXSxudFsyXSksVSs9MX19cnQucHVzaChVKX10aGlzLl9jb250b3VyT2Zmc2V0c1skXT1ldCx0aGlzLl9jb250b3VyQ291bnRzWyRdPXJ0fXZhciBidD1zLm1hbGxvY0Zsb2F0KFEubGVuZ3RoKTtmb3Iobz0wO288US5sZW5ndGg7KytvKWJ0W29dPVFbb107dGhpcy5fY29udG91ckJ1ZmZlci51cGRhdGUoYnQpLHMuZnJlZUZsb2F0KGJ0KX19LFMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3NoYWRlci5kaXNwb3NlKCksdGhpcy5fdmFvLmRpc3Bvc2UoKSx0aGlzLl9jb29yZGluYXRlQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb2xvck1hcC5kaXNwb3NlKCksdGhpcy5fY29udG91ckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5fY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5fY29udG91clNoYWRlci5kaXNwb3NlKCksdGhpcy5fY29udG91clBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNWQU8uZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8MzsrK3Qpcy5mcmVlRmxvYXQodGhpcy5fZmllbGRbdF0uZGF0YSl9LFMuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoIXQpcmV0dXJuIHRoaXMuX2R5bmFtaWNDb3VudHM9WzAsMCwwXSx0aGlzLmR5YW5hbWljTGV2ZWw9W05hTixOYU4sTmFOXSx2b2lkKHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSk7Zm9yKGU9MDtlPDM7KytlKXRoaXMuZW5hYmxlSGlnaGxpZ2h0W2VdP3RoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09dC5sZXZlbFtlXTp0aGlzLmhpZ2hsaWdodExldmVsW2VdPS0xO2ZvcihyPXRoaXMuc25hcFRvRGF0YT90LmRhdGFDb29yZGluYXRlOnQucG9zaXRpb24sZT0wO2U8MzsrK2UpcltlXS09dGhpcy5vYmplY3RPZmZzZXRbZV07aWYodGhpcy5lbmFibGVEeW5hbWljWzBdJiZyWzBdIT09dGhpcy5keW5hbWljTGV2ZWxbMF18fHRoaXMuZW5hYmxlRHluYW1pY1sxXSYmclsxXSE9PXRoaXMuZHluYW1pY0xldmVsWzFdfHx0aGlzLmVuYWJsZUR5bmFtaWNbMl0mJnJbMl0hPT10aGlzLmR5bmFtaWNMZXZlbFsyXSl7Zm9yKHZhciBuPTAsaT10aGlzLnNoYXBlLGE9cy5tYWxsb2NGbG9hdCgxMippWzBdKmlbMV0pLG89MDtvPDM7KytvKWlmKHRoaXMuZW5hYmxlRHluYW1pY1tvXSl7dGhpcy5keW5hbWljTGV2ZWxbb109cltvXTt2YXIgbD0obysxKSUzLGM9KG8rMiklMyx1PXRoaXMuX2ZpZWxkW29dLGY9dGhpcy5fZmllbGRbbF0scD10aGlzLl9maWVsZFtjXSxkPWgodSxyW29dKSxnPWQuY2VsbHMsbT1kLnBvc2l0aW9ucztmb3IodGhpcy5fZHluYW1pY09mZnNldHNbb109bixlPTA7ZTxnLmxlbmd0aDsrK2UpZm9yKHZhciB2PWdbZV0seT0wO3k8MjsrK3kpe3ZhciB4PW1bdlt5XV0sYj0reFswXSxfPTB8Yix3PTB8TWF0aC5taW4oXysxLGlbMF0pLFQ9Yi1fLGs9MS1ULE09K3hbMV0sQT0wfE0sUz0wfE1hdGgubWluKEErMSxpWzFdKSxFPU0tQSxDPTEtRSxMPWsqQyxJPWsqRSxQPVQqQyx6PVQqRSxPPUwqZi5nZXQoXyxBKStJKmYuZ2V0KF8sUykrUCpmLmdldCh3LEEpK3oqZi5nZXQodyxTKSxEPUwqcC5nZXQoXyxBKStJKnAuZ2V0KF8sUykrUCpwLmdldCh3LEEpK3oqcC5nZXQodyxTKTtpZihpc05hTihPKXx8aXNOYU4oRCkpe3kmJihuLT0xKTticmVha31hWzIqbiswXT1PLGFbMipuKzFdPUQsbis9MX10aGlzLl9keW5hbWljQ291bnRzW29dPW4tdGhpcy5fZHluYW1pY09mZnNldHNbb119ZWxzZSB0aGlzLmR5bmFtaWNMZXZlbFtvXT1OYU4sdGhpcy5fZHluYW1pY0NvdW50c1tvXT0wO3RoaXMuX2R5bmFtaWNCdWZmZXIudXBkYXRlKGEuc3ViYXJyYXkoMCwyKm4pKSxzLmZyZWVGbG9hdChhKX19fSx7Ii4vbGliL3NoYWRlcnMiOjM0OSwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjk2LCJiaXQtdHdpZGRsZSI6OTcsY29sb3JtYXA6MTMxLCJnbC1idWZmZXIiOjI1OSwiZ2wtbWF0NC9pbnZlcnQiOjI5MywiZ2wtbWF0NC9tdWx0aXBseSI6Mjk1LCJnbC10ZXh0dXJlMmQiOjM1MywiZ2wtdmFvIjozNTgsbmRhcnJheTo0OTUsIm5kYXJyYXktZ3JhZGllbnQiOjQ4OCwibmRhcnJheS1vcHMiOjQ5MCwibmRhcnJheS1wYWNrIjo0OTEsInN1cmZhY2UtbmV0cyI6NTcwLCJ0eXBlZGFycmF5LXBvb2wiOjU5NX1dLDM1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udCIpLGk9dCgicGljay1ieS1hbGlhcyIpLGE9dCgicmVnbCIpLG89dCgiZ2wtdXRpbC9jb250ZXh0Iikscz10KCJlczYtd2Vhay1tYXAiKSxsPXQoImNvbG9yLW5vcm1hbGl6ZSIpLGM9dCgiZm9udC1hdGxhcyIpLHU9dCgidHlwZWRhcnJheS1wb29sIiksZj10KCJwYXJzZS1yZWN0IiksaD10KCJpcy1wbGFpbi1vYmoiKSxwPXQoInBhcnNlLXVuaXQiKSxkPXQoInRvLXB4IiksZz10KCJkZXRlY3Qta2VybmluZyIpLG09dCgib2JqZWN0LWFzc2lnbiIpLHY9dCgiZm9udC1tZWFzdXJlIikseT10KCJmbGF0dGVuLXZlcnRleC1kYXRhIikseD10KCJiaXQtdHdpZGRsZSIpLm5leHRQb3cyLGI9bmV3IHMsXz0hMTtpZihkb2N1bWVudC5ib2R5KXt2YXIgdz1kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTt3LnN0eWxlLmZvbnQ9Iml0YWxpYyBzbWFsbC1jYXBzIGJvbGQgY29uZGVuc2VkIDE2cHgvMiBjdXJzaXZlIixnZXRDb21wdXRlZFN0eWxlKHcpLmZvbnRTdHJldGNoJiYoXz0hMCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh3KX12YXIgVD1mdW5jdGlvbih0KXshZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX2dsJiZ0LnByb3AmJnQudGV4dHVyZSYmdC5idWZmZXJ9KHQpP3RoaXMuZ2w9byh0KToodD17cmVnbDp0fSx0aGlzLmdsPXQucmVnbC5fZ2wpLHRoaXMuc2hhZGVyPWIuZ2V0KHRoaXMuZ2wpLHRoaXMuc2hhZGVyP3RoaXMucmVnbD10aGlzLnNoYWRlci5yZWdsOnRoaXMucmVnbD10LnJlZ2x8fGEoe2dsOnRoaXMuZ2x9KSx0aGlzLmNoYXJCdWZmZXI9dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZToidWludDgiLHVzYWdlOiJzdHJlYW0ifSksdGhpcy5zaXplQnVmZmVyPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6ImZsb2F0Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2hhZGVyfHwodGhpcy5zaGFkZXI9dGhpcy5jcmVhdGVTaGFkZXIoKSxiLnNldCh0aGlzLmdsLHRoaXMuc2hhZGVyKSksdGhpcy5iYXRjaD1bXSx0aGlzLmZvbnRTaXplPVtdLHRoaXMuZm9udD1bXSx0aGlzLmZvbnRBdGxhcz1bXSx0aGlzLmRyYXc9dGhpcy5zaGFkZXIuZHJhdy5iaW5kKHRoaXMpLHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5yZWdsLl9yZWZyZXNoKCksdGhpcy5kcmF3KHRoaXMuYmF0Y2gpfSx0aGlzLmNhbnZhcz10aGlzLmdsLmNhbnZhcyx0aGlzLnVwZGF0ZShoKHQpP3Q6e30pfTtULnByb3RvdHlwZS5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlZ2wsZT10KHtibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwxXSxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToib25lIG1pbnVzIGRzdCBhbHBoYSIsZHN0QWxwaGE6Im9uZSJ9fSxzdGVuY2lsOntlbmFibGU6ITF9LGRlcHRoOntlbmFibGU6ITF9LGNvdW50OnQucHJvcCgiY291bnQiKSxvZmZzZXQ6dC5wcm9wKCJvZmZzZXQiKSxhdHRyaWJ1dGVzOntjaGFyT2Zmc2V0OntvZmZzZXQ6NCxzdHJpZGU6OCxidWZmZXI6dC50aGlzKCJzaXplQnVmZmVyIil9LHdpZHRoOntvZmZzZXQ6MCxzdHJpZGU6OCxidWZmZXI6dC50aGlzKCJzaXplQnVmZmVyIil9LGNoYXI6dC50aGlzKCJjaGFyQnVmZmVyIikscG9zaXRpb246dC50aGlzKCJwb3NpdGlvbiIpfSx1bmlmb3Jtczp7YXRsYXNTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UuYXRsYXMud2lkdGgsZS5hdGxhcy5oZWlnaHRdfSxhdGxhc0RpbTpmdW5jdGlvbih0LGUpe3JldHVybltlLmF0bGFzLmNvbHMsZS5hdGxhcy5yb3dzXX0sYXRsYXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy50ZXh0dXJlfSxjaGFyU3RlcDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLnN0ZXB9LGVtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMuZW19LGNvbG9yOnQucHJvcCgiY29sb3IiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHZpZXdwb3J0OnQudGhpcygidmlld3BvcnRBcnJheSIpLHNjYWxlOnQudGhpcygic2NhbGUiKSxhbGlnbjp0LnByb3AoImFsaWduIiksYmFzZWxpbmU6dC5wcm9wKCJiYXNlbGluZSIpLHRyYW5zbGF0ZTp0LnRoaXMoInRyYW5zbGF0ZSIpLHBvc2l0aW9uT2Zmc2V0OnQucHJvcCgicG9zaXRpb25PZmZzZXQiKX0scHJpbWl0aXZlOiJwb2ludHMiLHZpZXdwb3J0OnQudGhpcygidmlld3BvcnQiKSx2ZXJ0OiJcblx0XHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblx0XHRcdGF0dHJpYnV0ZSBmbG9hdCB3aWR0aCwgY2hhck9mZnNldCwgY2hhcjtcblx0XHRcdGF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBmb250U2l6ZSwgY2hhclN0ZXAsIGVtLCBhbGlnbiwgYmFzZWxpbmU7XG5cdFx0XHR1bmlmb3JtIHZlYzQgdmlld3BvcnQ7XG5cdFx0XHR1bmlmb3JtIHZlYzQgY29sb3I7XG5cdFx0XHR1bmlmb3JtIHZlYzIgYXRsYXNTaXplLCBhdGxhc0RpbSwgc2NhbGUsIHRyYW5zbGF0ZSwgcG9zaXRpb25PZmZzZXQ7XG5cdFx0XHR2YXJ5aW5nIHZlYzIgY2hhckNvb3JkLCBjaGFySWQ7XG5cdFx0XHR2YXJ5aW5nIGZsb2F0IGNoYXJXaWR0aDtcblx0XHRcdHZhcnlpbmcgdmVjNCBmb250Q29sb3I7XG5cdFx0XHR2b2lkIG1haW4gKCkge1xuXHRcdFx0XHQiKyhULm5vcm1hbFZpZXdwb3J0PyIiOiJ2ZWMyIHBvc2l0aW9uT2Zmc2V0ID0gdmVjMihwb3NpdGlvbk9mZnNldC54LC0gcG9zaXRpb25PZmZzZXQueSk7IikrIlxuXG5cdFx0XHRcdHZlYzIgb2Zmc2V0ID0gZmxvb3IoZW0gKiAodmVjMihhbGlnbiArIGNoYXJPZmZzZXQsIGJhc2VsaW5lKVxuXHRcdFx0XHRcdCsgcG9zaXRpb25PZmZzZXQpKVxuXHRcdFx0XHRcdC8gKHZpZXdwb3J0Lnp3ICogc2NhbGUueHkpO1xuXG5cdFx0XHRcdHZlYzIgcG9zaXRpb24gPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGU7XG5cdFx0XHRcdHBvc2l0aW9uICs9IG9mZnNldCAqIHNjYWxlO1xuXG5cdFx0XHRcdCIrKFQubm9ybWFsVmlld3BvcnQ/InBvc2l0aW9uLnkgPSAxLiAtIHBvc2l0aW9uLnk7IjoiIikrIlxuXG5cdFx0XHRcdGNoYXJDb29yZCA9IHBvc2l0aW9uICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcblxuXHRcdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLiAtIDEuLCAwLCAxKTtcblxuXHRcdFx0XHRnbF9Qb2ludFNpemUgPSBjaGFyU3RlcDtcblxuXHRcdFx0XHRjaGFySWQueCA9IG1vZChjaGFyLCBhdGxhc0RpbS54KTtcblx0XHRcdFx0Y2hhcklkLnkgPSBmbG9vcihjaGFyIC8gYXRsYXNEaW0ueCk7XG5cblx0XHRcdFx0Y2hhcldpZHRoID0gd2lkdGggKiBlbTtcblxuXHRcdFx0XHRmb250Q29sb3IgPSBjb2xvciAvIDI1NS47XG5cdFx0XHR9IixmcmFnOiJcblx0XHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGF0bGFzO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBmb250U2l6ZSwgY2hhclN0ZXAsIG9wYWNpdHk7XG5cdFx0XHR1bmlmb3JtIHZlYzIgYXRsYXNTaXplO1xuXHRcdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdFx0dmFyeWluZyB2ZWM0IGZvbnRDb2xvcjtcblx0XHRcdHZhcnlpbmcgdmVjMiBjaGFyQ29vcmQsIGNoYXJJZDtcblx0XHRcdHZhcnlpbmcgZmxvYXQgY2hhcldpZHRoO1xuXG5cdFx0XHRmbG9hdCBsaWdodG5lc3ModmVjNCBjb2xvcikge1xuXHRcdFx0XHRyZXR1cm4gY29sb3IuciAqIDAuMjk5ICsgY29sb3IuZyAqIDAuNTg3ICsgY29sb3IuYiAqIDAuMTE0O1xuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIG1haW4gKCkge1xuXHRcdFx0XHR2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC0gY2hhckNvb3JkICsgY2hhclN0ZXAgKiAuNTtcblx0XHRcdFx0ZmxvYXQgaGFsZkNoYXJTdGVwID0gZmxvb3IoY2hhclN0ZXAgKiAuNSArIC41KTtcblxuXHRcdFx0XHQvLyBpbnZlcnQgeSBhbmQgc2hpZnQgYnkgMXB4IChGRiBleHBlY2lhbGx5IG5lZWRzIHRoYXQpXG5cdFx0XHRcdHV2LnkgPSBjaGFyU3RlcCAtIHV2Lnk7XG5cblx0XHRcdFx0Ly8gaWdub3JlIHBvaW50cyBvdXRzaWRlIG9mIGNoYXJhY3RlciBib3VuZGluZyBib3hcblx0XHRcdFx0ZmxvYXQgaGFsZkNoYXJXaWR0aCA9IGNlaWwoY2hhcldpZHRoICogLjUpO1xuXHRcdFx0XHRpZiAoZmxvb3IodXYueCkgPiBoYWxmQ2hhclN0ZXAgKyBoYWxmQ2hhcldpZHRoIHx8XG5cdFx0XHRcdFx0Zmxvb3IodXYueCkgPCBoYWxmQ2hhclN0ZXAgLSBoYWxmQ2hhcldpZHRoKSByZXR1cm47XG5cblx0XHRcdFx0dXYgKz0gY2hhcklkICogY2hhclN0ZXA7XG5cdFx0XHRcdHV2ID0gdXYgLyBhdGxhc1NpemU7XG5cblx0XHRcdFx0dmVjNCBjb2xvciA9IGZvbnRDb2xvcjtcblx0XHRcdFx0dmVjNCBtYXNrID0gdGV4dHVyZTJEKGF0bGFzLCB1dik7XG5cblx0XHRcdFx0ZmxvYXQgbWFza1kgPSBsaWdodG5lc3MobWFzayk7XG5cdFx0XHRcdC8vIGZsb2F0IGNvbG9yWSA9IGxpZ2h0bmVzcyhjb2xvcik7XG5cdFx0XHRcdGNvbG9yLmEgKj0gbWFza1k7XG5cdFx0XHRcdGNvbG9yLmEgKj0gb3BhY2l0eTtcblxuXHRcdFx0XHQvLyBjb2xvci5hICs9IC4xO1xuXG5cdFx0XHRcdC8vIGFudGlhbGlhc2luZywgc2VlIHlpcSBjb2xvciBzcGFjZSB5LWNoYW5uZWwgZm9ybXVsYVxuXHRcdFx0XHQvLyBjb2xvci5yZ2IgKz0gKDEuIC0gY29sb3IucmdiKSAqICgxLiAtIG1hc2sucmdiKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcblx0XHRcdH0ifSk7cmV0dXJue3JlZ2w6dCxkcmF3OmUsYXRsYXM6e319fSxULnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigic3RyaW5nIj09dHlwZW9mIHQpdD17dGV4dDp0fTtlbHNlIGlmKCF0KXJldHVybjtudWxsIT0odD1pKHQse3Bvc2l0aW9uOiJwb3NpdGlvbiBwb3NpdGlvbnMgY29vcmQgY29vcmRzIGNvb3JkaW5hdGVzIixmb250OiJmb250IGZvbnRGYWNlIGZvbnRmYWNlIHR5cGVmYWNlIGNzc0ZvbnQgY3NzLWZvbnQgZmFtaWx5IGZvbnRGYW1pbHkiLGZvbnRTaXplOiJmb250U2l6ZSBmb250c2l6ZSBzaXplIGZvbnQtc2l6ZSIsdGV4dDoidGV4dCB0ZXh0cyBjaGFycyBjaGFyYWN0ZXJzIHZhbHVlIHZhbHVlcyBzeW1ib2xzIixhbGlnbjoiYWxpZ24gYWxpZ25tZW50IHRleHRBbGlnbiB0ZXh0YmFzZWxpbmUiLGJhc2VsaW5lOiJiYXNlbGluZSB0ZXh0QmFzZWxpbmUgdGV4dGJhc2VsaW5lIixkaXJlY3Rpb246ImRpciBkaXJlY3Rpb24gdGV4dERpcmVjdGlvbiIsY29sb3I6ImNvbG9yIGNvbG91ciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIHRleHRDb2xvciB0ZXh0Y29sb3IiLGtlcm5pbmc6Imtlcm5pbmcga2VybiIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2cCB2aWV3cG9ydCB2aWV3Qm94IHZpZXdib3ggdmlld1BvcnQiLG9wYWNpdHk6Im9wYWNpdHkgYWxwaGEgdHJhbnNwYXJlbmN5IHZpc2libGUgdmlzaWJpbGl0eSBvcGFxdWUiLG9mZnNldDoib2Zmc2V0IHBvc2l0aW9uT2Zmc2V0IHBhZGRpbmcgc2hpZnQgaW5kZW50IGluZGVudGF0aW9uIn0sITApKS5vcGFjaXR5JiYoQXJyYXkuaXNBcnJheSh0Lm9wYWNpdHkpP3RoaXMub3BhY2l0eT10Lm9wYWNpdHkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pKTp0aGlzLm9wYWNpdHk9cGFyc2VGbG9hdCh0Lm9wYWNpdHkpKSxudWxsIT10LnZpZXdwb3J0JiYodGhpcy52aWV3cG9ydD1mKHQudmlld3BvcnQpLFQubm9ybWFsVmlld3BvcnQmJih0aGlzLnZpZXdwb3J0Lnk9dGhpcy5jYW52YXMuaGVpZ2h0LXRoaXMudmlld3BvcnQueS10aGlzLnZpZXdwb3J0LmhlaWdodCksdGhpcy52aWV3cG9ydEFycmF5PVt0aGlzLnZpZXdwb3J0LngsdGhpcy52aWV3cG9ydC55LHRoaXMudmlld3BvcnQud2lkdGgsdGhpcy52aWV3cG9ydC5oZWlnaHRdKSxudWxsPT10aGlzLnZpZXdwb3J0JiYodGhpcy52aWV3cG9ydD17eDowLHk6MCx3aWR0aDp0aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxoZWlnaHQ6dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0fSx0aGlzLnZpZXdwb3J0QXJyYXk9W3RoaXMudmlld3BvcnQueCx0aGlzLnZpZXdwb3J0LnksdGhpcy52aWV3cG9ydC53aWR0aCx0aGlzLnZpZXdwb3J0LmhlaWdodF0pLG51bGwhPXQua2VybmluZyYmKHRoaXMua2VybmluZz10Lmtlcm5pbmcpLG51bGwhPXQub2Zmc2V0JiYoIm51bWJlciI9PXR5cGVvZiB0Lm9mZnNldCYmKHQub2Zmc2V0PVt0Lm9mZnNldCwwXSksdGhpcy5wb3NpdGlvbk9mZnNldD15KHQub2Zmc2V0KSksdC5kaXJlY3Rpb24mJih0aGlzLmRpcmVjdGlvbj10LmRpcmVjdGlvbiksdC5yYW5nZSYmKHRoaXMucmFuZ2U9dC5yYW5nZSx0aGlzLnNjYWxlPVsxLyh0LnJhbmdlWzJdLXQucmFuZ2VbMF0pLDEvKHQucmFuZ2VbM10tdC5yYW5nZVsxXSldLHRoaXMudHJhbnNsYXRlPVstdC5yYW5nZVswXSwtdC5yYW5nZVsxXV0pLHQuc2NhbGUmJih0aGlzLnNjYWxlPXQuc2NhbGUpLHQudHJhbnNsYXRlJiYodGhpcy50cmFuc2xhdGU9dC50cmFuc2xhdGUpLHRoaXMuc2NhbGV8fCh0aGlzLnNjYWxlPVsxL3RoaXMudmlld3BvcnQud2lkdGgsMS90aGlzLnZpZXdwb3J0LmhlaWdodF0pLHRoaXMudHJhbnNsYXRlfHwodGhpcy50cmFuc2xhdGU9WzAsMF0pLHRoaXMuZm9udC5sZW5ndGh8fHQuZm9udHx8KHQuZm9udD1ULmJhc2VGb250U2l6ZSsicHggc2Fucy1zZXJpZiIpO3ZhciByLGE9ITEsbz0hMTtpZih0LmZvbnQmJihBcnJheS5pc0FycmF5KHQuZm9udCk/dC5mb250Olt0LmZvbnRdKS5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0cnl7dD1uLnBhcnNlKHQpfWNhdGNoKGUpe3Q9bi5wYXJzZShULmJhc2VGb250U2l6ZSsicHggIit0KX1lbHNlIHQ9bi5wYXJzZShuLnN0cmluZ2lmeSh0KSk7dmFyIGk9bi5zdHJpbmdpZnkoe3NpemU6VC5iYXNlRm9udFNpemUsZmFtaWx5OnQuZmFtaWx5LHN0cmV0Y2g6Xz90LnN0cmV0Y2g6dm9pZCAwLHZhcmlhbnQ6dC52YXJpYW50LHdlaWdodDp0LndlaWdodCxzdHlsZTp0LnN0eWxlfSkscz1wKHQuc2l6ZSksbD1NYXRoLnJvdW5kKHNbMF0qZChzWzFdKSk7aWYobCE9PWUuZm9udFNpemVbcl0mJihvPSEwLGUuZm9udFNpemVbcl09bCksIShlLmZvbnRbcl0mJmk9PWUuZm9udFtyXS5iYXNlU3RyaW5nfHwoYT0hMCxlLmZvbnRbcl09VC5mb250c1tpXSxlLmZvbnRbcl0pKSl7dmFyIGM9dC5mYW1pbHkuam9pbigiLCAiKSx1PVt0LnN0eWxlXTt0LnN0eWxlIT10LnZhcmlhbnQmJnUucHVzaCh0LnZhcmlhbnQpLHQudmFyaWFudCE9dC53ZWlnaHQmJnUucHVzaCh0LndlaWdodCksXyYmdC53ZWlnaHQhPXQuc3RyZXRjaCYmdS5wdXNoKHQuc3RyZXRjaCksZS5mb250W3JdPXtiYXNlU3RyaW5nOmksZmFtaWx5OmMsd2VpZ2h0OnQud2VpZ2h0LHN0cmV0Y2g6dC5zdHJldGNoLHN0eWxlOnQuc3R5bGUsdmFyaWFudDp0LnZhcmlhbnQsd2lkdGg6e30sa2VybmluZzp7fSxtZXRyaWNzOnYoYyx7b3JpZ2luOiJ0b3AiLGZvbnRTaXplOlQuYmFzZUZvbnRTaXplLGZvbnRTdHlsZTp1LmpvaW4oIiAiKX0pfSxULmZvbnRzW2ldPWUuZm9udFtyXX19KSksKGF8fG8pJiZ0aGlzLmZvbnQuZm9yRWFjaCgoZnVuY3Rpb24ocixpKXt2YXIgYT1uLnN0cmluZ2lmeSh7c2l6ZTplLmZvbnRTaXplW2ldLGZhbWlseTpyLmZhbWlseSxzdHJldGNoOl8/ci5zdHJldGNoOnZvaWQgMCx2YXJpYW50OnIudmFyaWFudCx3ZWlnaHQ6ci53ZWlnaHQsc3R5bGU6ci5zdHlsZX0pO2lmKGUuZm9udEF0bGFzW2ldPWUuc2hhZGVyLmF0bGFzW2FdLCFlLmZvbnRBdGxhc1tpXSl7dmFyIG89ci5tZXRyaWNzO2Uuc2hhZGVyLmF0bGFzW2FdPWUuZm9udEF0bGFzW2ldPXtmb250U3RyaW5nOmEsc3RlcDoyKk1hdGguY2VpbChlLmZvbnRTaXplW2ldKm8uYm90dG9tKi41KSxlbTplLmZvbnRTaXplW2ldLGNvbHM6MCxyb3dzOjAsaGVpZ2h0OjAsd2lkdGg6MCxjaGFyczpbXSxpZHM6e30sdGV4dHVyZTplLnJlZ2wudGV4dHVyZSgpfX1udWxsPT10LnRleHQmJih0LnRleHQ9ZS50ZXh0KX0pKSwic3RyaW5nIj09dHlwZW9mIHQudGV4dCYmdC5wb3NpdGlvbiYmdC5wb3NpdGlvbi5sZW5ndGg+Mil7Zm9yKHZhciBzPUFycmF5KC41KnQucG9zaXRpb24ubGVuZ3RoKSxoPTA7aDxzLmxlbmd0aDtoKyspc1toXT10LnRleHQ7dC50ZXh0PXN9aWYobnVsbCE9dC50ZXh0fHxhKXtpZih0aGlzLnRleHRPZmZzZXRzPVswXSxBcnJheS5pc0FycmF5KHQudGV4dCkpe3RoaXMuY291bnQ9dC50ZXh0WzBdLmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07Zm9yKHZhciBiPTE7Yjx0LnRleHQubGVuZ3RoO2IrKyl0aGlzLnRleHRPZmZzZXRzW2JdPXRoaXMudGV4dE9mZnNldHNbYi0xXSt0LnRleHRbYi0xXS5sZW5ndGgsdGhpcy5jb3VudCs9dC50ZXh0W2JdLmxlbmd0aCx0aGlzLmNvdW50cy5wdXNoKHQudGV4dFtiXS5sZW5ndGgpO3RoaXMudGV4dD10LnRleHQuam9pbigiIil9ZWxzZSB0aGlzLnRleHQ9dC50ZXh0LHRoaXMuY291bnQ9dGhpcy50ZXh0Lmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07cj1bXSx0aGlzLmZvbnQuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtULmF0bGFzQ29udGV4dC5mb250PXQuYmFzZVN0cmluZztmb3IodmFyIGk9ZS5mb250QXRsYXNbbl0sYT0wO2E8ZS50ZXh0Lmxlbmd0aDthKyspe3ZhciBvPWUudGV4dC5jaGFyQXQoYSk7aWYobnVsbD09aS5pZHNbb10mJihpLmlkc1tvXT1pLmNoYXJzLmxlbmd0aCxpLmNoYXJzLnB1c2gobyksci5wdXNoKG8pKSxudWxsPT10LndpZHRoW29dJiYodC53aWR0aFtvXT1ULmF0bGFzQ29udGV4dC5tZWFzdXJlVGV4dChvKS53aWR0aC9ULmJhc2VGb250U2l6ZSxlLmtlcm5pbmcpKXt2YXIgcz1bXTtmb3IodmFyIGwgaW4gdC53aWR0aClzLnB1c2gobCtvLG8rbCk7bSh0Lmtlcm5pbmcsZyh0LmZhbWlseSx7cGFpcnM6c30pKX19fSkpfWlmKHQucG9zaXRpb24paWYodC5wb3NpdGlvbi5sZW5ndGg+Mil7Zm9yKHZhciB3PSF0LnBvc2l0aW9uWzBdLmxlbmd0aCxrPXUubWFsbG9jRmxvYXQoMip0aGlzLmNvdW50KSxNPTAsQT0wO008dGhpcy5jb3VudHMubGVuZ3RoO00rKyl7dmFyIFM9dGhpcy5jb3VudHNbTV07aWYodylmb3IodmFyIEU9MDtFPFM7RSsrKWtbQSsrXT10LnBvc2l0aW9uWzIqTV0sa1tBKytdPXQucG9zaXRpb25bMipNKzFdO2Vsc2UgZm9yKHZhciBDPTA7QzxTO0MrKylrW0ErK109dC5wb3NpdGlvbltNXVswXSxrW0ErK109dC5wb3NpdGlvbltNXVsxXX10aGlzLnBvc2l0aW9uLmNhbGw/dGhpcy5wb3NpdGlvbih7dHlwZToiZmxvYXQiLGRhdGE6a30pOnRoaXMucG9zaXRpb249dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZToiZmxvYXQiLGRhdGE6a30pLHUuZnJlZUZsb2F0KGspfWVsc2UgdGhpcy5wb3NpdGlvbi5kZXN0cm95JiZ0aGlzLnBvc2l0aW9uLmRlc3Ryb3koKSx0aGlzLnBvc2l0aW9uPXtjb25zdGFudDp0LnBvc2l0aW9ufTtpZih0LnRleHR8fGEpe3ZhciBMPXUubWFsbG9jVWludDgodGhpcy5jb3VudCksST11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCk7dGhpcy50ZXh0V2lkdGg9W107Zm9yKHZhciBQPTAsej0wO1A8dGhpcy5jb3VudHMubGVuZ3RoO1ArKyl7Zm9yKHZhciBPPXRoaXMuY291bnRzW1BdLEQ9dGhpcy5mb250W1BdfHx0aGlzLmZvbnRbMF0sUj10aGlzLmZvbnRBdGxhc1tQXXx8dGhpcy5mb250QXRsYXNbMF0sRj0wO0Y8TztGKyspe3ZhciBCPXRoaXMudGV4dC5jaGFyQXQoeiksTj10aGlzLnRleHQuY2hhckF0KHotMSk7aWYoTFt6XT1SLmlkc1tCXSxJWzIqel09RC53aWR0aFtCXSxGKXt2YXIgaj1JWzIqei0yXSxVPUlbMip6XSxWPUlbMip6LTFdKy41KmorLjUqVTtpZih0aGlzLmtlcm5pbmcpe3ZhciBxPUQua2VybmluZ1tOK0JdO3EmJihWKz0uMDAxKnEpfUlbMip6KzFdPVZ9ZWxzZSBJWzIqeisxXT0uNSpJWzIqel07eisrfXRoaXMudGV4dFdpZHRoLnB1c2goSS5sZW5ndGg/LjUqSVsyKnotMl0rSVsyKnotMV06MCl9dC5hbGlnbnx8KHQuYWxpZ249dGhpcy5hbGlnbiksdGhpcy5jaGFyQnVmZmVyKHtkYXRhOkwsdHlwZToidWludDgiLHVzYWdlOiJzdHJlYW0ifSksdGhpcy5zaXplQnVmZmVyKHtkYXRhOkksdHlwZToiZmxvYXQiLHVzYWdlOiJzdHJlYW0ifSksdS5mcmVlVWludDgoTCksdS5mcmVlRmxvYXQoSSksci5sZW5ndGgmJnRoaXMuZm9udC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZm9udEF0bGFzW3JdLGk9bi5zdGVwLGE9TWF0aC5mbG9vcihULm1heEF0bGFzU2l6ZS9pKSxvPU1hdGgubWluKGEsbi5jaGFycy5sZW5ndGgpLHM9TWF0aC5jZWlsKG4uY2hhcnMubGVuZ3RoL28pLGw9eChvKmkpLHU9eChzKmkpO24ud2lkdGg9bCxuLmhlaWdodD11LG4ucm93cz1zLG4uY29scz1vLG4uZW0mJm4udGV4dHVyZSh7ZGF0YTpjKHtjYW52YXM6VC5hdGxhc0NhbnZhcyxmb250Om4uZm9udFN0cmluZyxjaGFyczpuLmNoYXJzLHNoYXBlOltsLHVdLHN0ZXA6W2ksaV19KX0pfSkpfWlmKHQuYWxpZ24mJih0aGlzLmFsaWduPXQuYWxpZ24sdGhpcy5hbGlnbk9mZnNldD10aGlzLnRleHRXaWR0aC5tYXAoKGZ1bmN0aW9uKHQscil7dmFyIG49QXJyYXkuaXNBcnJheShlLmFsaWduKT9lLmFsaWduLmxlbmd0aD4xP2UuYWxpZ25bcl06ZS5hbGlnblswXTplLmFsaWduO2lmKCJudW1iZXIiPT10eXBlb2YgbilyZXR1cm4gbjtzd2l0Y2gobil7Y2FzZSJyaWdodCI6Y2FzZSJlbmQiOnJldHVybi10O2Nhc2UiY2VudGVyIjpjYXNlImNlbnRyZSI6Y2FzZSJtaWRkbGUiOnJldHVybi41Ki10fXJldHVybiAwfSkpKSxudWxsPT10aGlzLmJhc2VsaW5lJiZudWxsPT10LmJhc2VsaW5lJiYodC5iYXNlbGluZT0wKSxudWxsIT10LmJhc2VsaW5lJiYodGhpcy5iYXNlbGluZT10LmJhc2VsaW5lLEFycmF5LmlzQXJyYXkodGhpcy5iYXNlbGluZSl8fCh0aGlzLmJhc2VsaW5lPVt0aGlzLmJhc2VsaW5lXSksdGhpcy5iYXNlbGluZU9mZnNldD10aGlzLmJhc2VsaW5lLm1hcCgoZnVuY3Rpb24odCxyKXt2YXIgbj0oZS5mb250W3JdfHxlLmZvbnRbMF0pLm1ldHJpY3MsaT0wO3JldHVybiBpKz0uNSpuLmJvdHRvbSxpKz0ibnVtYmVyIj09dHlwZW9mIHQ/dC1uLmJhc2VsaW5lOi1uW3RdLFQubm9ybWFsVmlld3BvcnR8fChpKj0tMSksaX0pKSksbnVsbCE9dC5jb2xvcilpZih0LmNvbG9yfHwodC5jb2xvcj0idHJhbnNwYXJlbnQiKSwic3RyaW5nIiE9dHlwZW9mIHQuY29sb3ImJmlzTmFOKHQuY29sb3IpKXt2YXIgSDtpZigibnVtYmVyIj09dHlwZW9mIHQuY29sb3JbMF0mJnQuY29sb3IubGVuZ3RoPnRoaXMuY291bnRzLmxlbmd0aCl7dmFyIEc9dC5jb2xvci5sZW5ndGg7SD11Lm1hbGxvY1VpbnQ4KEcpO2Zvcih2YXIgWT0odC5jb2xvci5zdWJhcnJheXx8dC5jb2xvci5zbGljZSkuYmluZCh0LmNvbG9yKSxXPTA7VzxHO1crPTQpSC5zZXQobChZKFcsVys0KSwidWludDgiKSxXKX1lbHNle3ZhciBYPXQuY29sb3IubGVuZ3RoO0g9dS5tYWxsb2NVaW50OCg0KlgpO2Zvcih2YXIgWj0wO1o8WDtaKyspSC5zZXQobCh0LmNvbG9yW1pdfHwwLCJ1aW50OCIpLDQqWil9dGhpcy5jb2xvcj1IfWVsc2UgdGhpcy5jb2xvcj1sKHQuY29sb3IsInVpbnQ4Iik7aWYodC5wb3NpdGlvbnx8dC50ZXh0fHx0LmNvbG9yfHx0LmJhc2VsaW5lfHx0LmFsaWdufHx0LmZvbnR8fHQub2Zmc2V0fHx0Lm9wYWNpdHkpaWYodGhpcy5jb2xvci5sZW5ndGg+NHx8dGhpcy5iYXNlbGluZU9mZnNldC5sZW5ndGg+MXx8dGhpcy5hbGlnbiYmdGhpcy5hbGlnbi5sZW5ndGg+MXx8dGhpcy5mb250QXRsYXMubGVuZ3RoPjF8fHRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RoPjIpe3ZhciBKPU1hdGgubWF4KC41KnRoaXMucG9zaXRpb24ubGVuZ3RofHwwLC4yNSp0aGlzLmNvbG9yLmxlbmd0aHx8MCx0aGlzLmJhc2VsaW5lT2Zmc2V0Lmxlbmd0aHx8MCx0aGlzLmFsaWduT2Zmc2V0Lmxlbmd0aHx8MCx0aGlzLmZvbnQubGVuZ3RofHwwLHRoaXMub3BhY2l0eS5sZW5ndGh8fDAsLjUqdGhpcy5wb3NpdGlvbk9mZnNldC5sZW5ndGh8fDApO3RoaXMuYmF0Y2g9QXJyYXkoSik7Zm9yKHZhciBLPTA7Szx0aGlzLmJhdGNoLmxlbmd0aDtLKyspdGhpcy5iYXRjaFtLXT17Y291bnQ6dGhpcy5jb3VudHMubGVuZ3RoPjE/dGhpcy5jb3VudHNbS106dGhpcy5jb3VudHNbMF0sb2Zmc2V0OnRoaXMudGV4dE9mZnNldHMubGVuZ3RoPjE/dGhpcy50ZXh0T2Zmc2V0c1tLXTp0aGlzLnRleHRPZmZzZXRzWzBdLGNvbG9yOnRoaXMuY29sb3I/dGhpcy5jb2xvci5sZW5ndGg8PTQ/dGhpcy5jb2xvcjp0aGlzLmNvbG9yLnN1YmFycmF5KDQqSyw0KksrNCk6WzAsMCwwLDI1NV0sb3BhY2l0eTpBcnJheS5pc0FycmF5KHRoaXMub3BhY2l0eSk/dGhpcy5vcGFjaXR5W0tdOnRoaXMub3BhY2l0eSxiYXNlbGluZTpudWxsIT10aGlzLmJhc2VsaW5lT2Zmc2V0W0tdP3RoaXMuYmFzZWxpbmVPZmZzZXRbS106dGhpcy5iYXNlbGluZU9mZnNldFswXSxhbGlnbjp0aGlzLmFsaWduP251bGwhPXRoaXMuYWxpZ25PZmZzZXRbS10/dGhpcy5hbGlnbk9mZnNldFtLXTp0aGlzLmFsaWduT2Zmc2V0WzBdOjAsYXRsYXM6dGhpcy5mb250QXRsYXNbS118fHRoaXMuZm9udEF0bGFzWzBdLHBvc2l0aW9uT2Zmc2V0OnRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RoPjI/dGhpcy5wb3NpdGlvbk9mZnNldC5zdWJhcnJheSgyKkssMipLKzIpOnRoaXMucG9zaXRpb25PZmZzZXR9fWVsc2UgdGhpcy5jb3VudD90aGlzLmJhdGNoPVt7Y291bnQ6dGhpcy5jb3VudCxvZmZzZXQ6MCxjb2xvcjp0aGlzLmNvbG9yfHxbMCwwLDAsMjU1XSxvcGFjaXR5OkFycmF5LmlzQXJyYXkodGhpcy5vcGFjaXR5KT90aGlzLm9wYWNpdHlbMF06dGhpcy5vcGFjaXR5LGJhc2VsaW5lOnRoaXMuYmFzZWxpbmVPZmZzZXRbMF0sYWxpZ246dGhpcy5hbGlnbk9mZnNldD90aGlzLmFsaWduT2Zmc2V0WzBdOjAsYXRsYXM6dGhpcy5mb250QXRsYXNbMF0scG9zaXRpb25PZmZzZXQ6dGhpcy5wb3NpdGlvbk9mZnNldH1dOnRoaXMuYmF0Y2g9W119LFQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LFQucHJvdG90eXBlLmtlcm5pbmc9ITAsVC5wcm90b3R5cGUucG9zaXRpb249e2NvbnN0YW50Om5ldyBGbG9hdDMyQXJyYXkoMil9LFQucHJvdG90eXBlLnRyYW5zbGF0ZT1udWxsLFQucHJvdG90eXBlLnNjYWxlPW51bGwsVC5wcm90b3R5cGUuZm9udD1udWxsLFQucHJvdG90eXBlLnRleHQ9IiIsVC5wcm90b3R5cGUucG9zaXRpb25PZmZzZXQ9WzAsMF0sVC5wcm90b3R5cGUub3BhY2l0eT0xLFQucHJvdG90eXBlLmNvbG9yPW5ldyBVaW50OEFycmF5KFswLDAsMCwyNTVdKSxULnByb3RvdHlwZS5hbGlnbk9mZnNldD1bMCwwXSxULm5vcm1hbFZpZXdwb3J0PSExLFQubWF4QXRsYXNTaXplPTEwMjQsVC5hdGxhc0NhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxULmF0bGFzQ29udGV4dD1ULmF0bGFzQ2FudmFzLmdldENvbnRleHQoIjJkIix7YWxwaGE6ITF9KSxULmJhc2VGb250U2l6ZT02NCxULmZvbnRzPXt9LGUuZXhwb3J0cz1UfSx7ImJpdC10d2lkZGxlIjo5NywiY29sb3Itbm9ybWFsaXplIjoxMjUsImNzcy1mb250IjoxNDQsImRldGVjdC1rZXJuaW5nIjoxNzIsImVzNi13ZWFrLW1hcCI6MjMzLCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyNDQsImZvbnQtYXRsYXMiOjI0NSwiZm9udC1tZWFzdXJlIjoyNDYsImdsLXV0aWwvY29udGV4dCI6MzU0LCJpcy1wbGFpbi1vYmoiOjQ2OSwib2JqZWN0LWFzc2lnbiI6NDk5LCJwYXJzZS1yZWN0Ijo1MDQsInBhcnNlLXVuaXQiOjUwNiwicGljay1ieS1hbGlhcyI6NTExLHJlZ2w6NTQwLCJ0by1weCI6NTc4LCJ0eXBlZGFycmF5LXBvb2wiOjU5NX1dLDM1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJuZGFycmF5IiksaT10KCJuZGFycmF5LW9wcyIpLGE9dCgidHlwZWRhcnJheS1wb29sIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg8PTEpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IE1pc3NpbmcgYXJndW1lbnRzIGZvciB0ZXh0dXJlMmQgY29uc3RydWN0b3IiKTtvfHxjKHQpO2lmKCJudW1iZXIiPT10eXBlb2YgYXJndW1lbnRzWzFdKXJldHVybiB2KHQsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM118fHQuUkdCQSxhcmd1bWVudHNbNF18fHQuVU5TSUdORURfQllURSk7aWYoQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMV0pKXJldHVybiB2KHQsMHxhcmd1bWVudHNbMV1bMF0sMHxhcmd1bWVudHNbMV1bMV0sYXJndW1lbnRzWzJdfHx0LlJHQkEsYXJndW1lbnRzWzNdfHx0LlVOU0lHTkVEX0JZVEUpO2lmKCJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzWzFdKXt2YXIgZT1hcmd1bWVudHNbMV0scj11KGUpP2U6ZS5yYXc7aWYocilyZXR1cm4geSh0LHIsMHxlLndpZHRoLDB8ZS5oZWlnaHQsYXJndW1lbnRzWzJdfHx0LlJHQkEsYXJndW1lbnRzWzNdfHx0LlVOU0lHTkVEX0JZVEUpO2lmKGUuc2hhcGUmJmUuZGF0YSYmZS5zdHJpZGUpcmV0dXJuIHgodCxlKX10aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvciIpfTt2YXIgbz1udWxsLHM9bnVsbCxsPW51bGw7ZnVuY3Rpb24gYyh0KXtvPVt0LkxJTkVBUix0Lk5FQVJFU1RfTUlQTUFQX0xJTkVBUix0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVCx0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVF0scz1bdC5ORUFSRVNULHQuTElORUFSLHQuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCx0Lk5FQVJFU1RfTUlQTUFQX0xJTkVBUix0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVCx0LkxJTkVBUl9NSVBNQVBfTElORUFSXSxsPVt0LlJFUEVBVCx0LkNMQU1QX1RPX0VER0UsdC5NSVJST1JFRF9SRVBFQVRdfWZ1bmN0aW9uIHUodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxWaWRlb0VsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlRGF0YSYmdCBpbnN0YW5jZW9mIEltYWdlRGF0YX12YXIgZj1mdW5jdGlvbih0LGUpe2kubXVscyh0LGUsMjU1KX07ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49dC5nbCxpPW4uZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfU0laRSk7aWYoZTwwfHxlPml8fHI8MHx8cj5pKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2l6ZSIpO3JldHVybiB0Ll9zaGFwZT1bZSxyXSx0LmJpbmQoKSxuLnRleEltYWdlMkQobi5URVhUVVJFXzJELDAsdC5mb3JtYXQsZSxyLDAsdC5mb3JtYXQsdC50eXBlLG51bGwpLHQuX21pcExldmVscz1bMF0sdH1mdW5jdGlvbiBwKHQsZSxyLG4saSxhKXt0aGlzLmdsPXQsdGhpcy5oYW5kbGU9ZSx0aGlzLmZvcm1hdD1pLHRoaXMudHlwZT1hLHRoaXMuX3NoYXBlPVtyLG5dLHRoaXMuX21pcExldmVscz1bMF0sdGhpcy5fbWFnRmlsdGVyPXQuTkVBUkVTVCx0aGlzLl9taW5GaWx0ZXI9dC5ORUFSRVNULHRoaXMuX3dyYXBTPXQuQ0xBTVBfVE9fRURHRSx0aGlzLl93cmFwVD10LkNMQU1QX1RPX0VER0UsdGhpcy5fYW5pc29TYW1wbGVzPTE7dmFyIG89dGhpcyxzPVt0aGlzLl93cmFwUyx0aGlzLl93cmFwVF07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocyxbe2dldDpmdW5jdGlvbigpe3JldHVybiBvLl93cmFwU30sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndyYXBTPXR9fSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud3JhcFQ9dH19XSksdGhpcy5fd3JhcFZlY3Rvcj1zO3ZhciBsPVt0aGlzLl9zaGFwZVswXSx0aGlzLl9zaGFwZVsxXV07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCxbe2dldDpmdW5jdGlvbigpe3JldHVybiBvLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndpZHRoPXR9fSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8uaGVpZ2h0PXR9fV0pLHRoaXMuX3NoYXBlVmVjdG9yPWx9dmFyIGQ9cC5wcm90b3R5cGU7ZnVuY3Rpb24gZyh0LGUpe3JldHVybiAzPT09dC5sZW5ndGg/MT09PWVbMl0mJmVbMV09PT10WzBdKnRbMl0mJmVbMF09PT10WzJdOjE9PT1lWzBdJiZlWzFdPT09dFswXX1mdW5jdGlvbiBtKHQpe3ZhciBlPXQuY3JlYXRlVGV4dHVyZSgpO3JldHVybiB0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUFHX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfVCx0LkNMQU1QX1RPX0VER0UpLGV9ZnVuY3Rpb24gdih0LGUscixuLGkpe3ZhciBhPXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1RFWFRVUkVfU0laRSk7aWYoZTwwfHxlPmF8fHI8MHx8cj5hKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2hhcGUiKTtpZihpPT09dC5GTE9BVCYmIXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdCIpKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBGbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKTt2YXIgbz1tKHQpO3JldHVybiB0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsbixlLHIsMCxuLGksbnVsbCksbmV3IHAodCxvLGUscixuLGkpfWZ1bmN0aW9uIHkodCxlLHIsbixpLGEpe3ZhciBvPW0odCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxpLGksYSxlKSxuZXcgcCh0LG8scixuLGksYSl9ZnVuY3Rpb24geCh0LGUpe3ZhciByPWUuZHR5cGUsbz1lLnNoYXBlLnNsaWNlKCkscz10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKG9bMF08MHx8b1swXT5zfHxvWzFdPDB8fG9bMV0+cyl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTt2YXIgbD1nKG8sZS5zdHJpZGUuc2xpY2UoKSksYz0wOyJmbG9hdDMyIj09PXI/Yz10LkZMT0FUOiJmbG9hdDY0Ij09PXI/KGM9dC5GTE9BVCxsPSExLHI9ImZsb2F0MzIiKToidWludDgiPT09cj9jPXQuVU5TSUdORURfQllURTooYz10LlVOU0lHTkVEX0JZVEUsbD0hMSxyPSJ1aW50OCIpO3ZhciB1LGgsZD0wO2lmKDI9PT1vLmxlbmd0aClkPXQuTFVNSU5BTkNFLG89W29bMF0sb1sxXSwxXSxlPW4oZS5kYXRhLG8sW2Uuc3RyaWRlWzBdLGUuc3RyaWRlWzFdLDFdLGUub2Zmc2V0KTtlbHNle2lmKDMhPT1vLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgdGV4dHVyZSIpO2lmKDE9PT1vWzJdKWQ9dC5BTFBIQTtlbHNlIGlmKDI9PT1vWzJdKWQ9dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09b1syXSlkPXQuUkdCO2Vsc2V7aWYoNCE9PW9bMl0pdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3JkcyIpO2Q9dC5SR0JBfX1jIT09dC5GTE9BVHx8dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0Iil8fChjPXQuVU5TSUdORURfQllURSxsPSExKTt2YXIgdj1lLnNpemU7aWYobCl1PTA9PT1lLm9mZnNldCYmZS5kYXRhLmxlbmd0aD09PXY/ZS5kYXRhOmUuZGF0YS5zdWJhcnJheShlLm9mZnNldCxlLm9mZnNldCt2KTtlbHNle3ZhciB5PVtvWzJdLG9bMl0qb1swXSwxXTtoPWEubWFsbG9jKHYscik7dmFyIHg9bihoLG8seSwwKTsiZmxvYXQzMiIhPT1yJiYiZmxvYXQ2NCIhPT1yfHxjIT09dC5VTlNJR05FRF9CWVRFP2kuYXNzaWduKHgsZSk6Zih4LGUpLHU9aC5zdWJhcnJheSgwLHYpfXZhciBiPW0odCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxkLG9bMF0sb1sxXSwwLGQsYyx1KSxsfHxhLmZyZWUoaCksbmV3IHAodCxiLG9bMF0sb1sxXSxkLGMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGQse21pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmby5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwodD1lLk5FQVJFU1QpKSxzLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSAiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLHQpLHRoaXMuX21pbkZpbHRlcj10fX0sbWFnRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZvLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fCh0PWUuTkVBUkVTVCkpLHMuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlICIrdCk7cmV0dXJuIGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01BR19GSUxURVIsdCksdGhpcy5fbWFnRmlsdGVyPXR9fSxtaXBTYW1wbGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pc29TYW1wbGVzfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYW5pc29TYW1wbGVzO2lmKHRoaXMuX2FuaXNvU2FtcGxlcz0wfE1hdGgubWF4KHQsMSksZSE9PXRoaXMuX2FuaXNvU2FtcGxlcyl7dmFyIHI9dGhpcy5nbC5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO3ImJnRoaXMuZ2wudGV4UGFyYW1ldGVyZih0aGlzLmdsLlRFWFRVUkVfMkQsci5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCx0aGlzLl9hbmlzb1NhbXBsZXMpfXJldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9fSx3cmFwUzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksbC5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfUyx0KSx0aGlzLl93cmFwUz10fX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGwuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3JldHVybiB0aGlzLmdsLnRleFBhcmFtZXRlcmkodGhpcy5nbC5URVhUVVJFXzJELHRoaXMuZ2wuVEVYVFVSRV9XUkFQX1QsdCksdGhpcy5fd3JhcFQ9dH19LHdyYXA6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9W3QsdF0pLDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogTXVzdCBzcGVjaWZ5IHdyYXAgbW9kZSBmb3Igcm93cyBhbmQgY29sdW1ucyIpO2Zvcih2YXIgZT0wO2U8MjsrK2UpaWYobC5pbmRleE9mKHRbZV0pPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7dGhpcy5fd3JhcFM9dFswXSx0aGlzLl93cmFwVD10WzFdO3ZhciByPXRoaXMuZ2w7cmV0dXJuIHRoaXMuYmluZCgpLHIudGV4UGFyYW1ldGVyaShyLlRFWFRVUkVfMkQsci5URVhUVVJFX1dSQVBfUyx0aGlzLl93cmFwUyksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9ULHRoaXMuX3dyYXBUKSx0fX0sc2hhcGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlIil9ZWxzZSB0PVswfHQsMHx0XTtyZXR1cm4gaCh0aGlzLDB8dFswXSwwfHRbMV0pLFswfHRbMF0sMHx0WzFdXX19LHdpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gaCh0aGlzLHR8PTAsdGhpcy5fc2hhcGVbMV0pLHR9fSxoZWlnaHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0fD0wLGgodGhpcyx0aGlzLl9zaGFwZVswXSx0KSx0fX19KSxkLmJpbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbDtyZXR1cm4gdm9pZCAwIT09dCYmZS5hY3RpdmVUZXh0dXJlKGUuVEVYVFVSRTArKDB8dCkpLGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHRoaXMuaGFuZGxlKSx2b2lkIDAhPT10PzB8dDplLmdldFBhcmFtZXRlcihlLkFDVElWRV9URVhUVVJFKS1lLlRFWFRVUkUwfSxkLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsLmRlbGV0ZVRleHR1cmUodGhpcy5oYW5kbGUpfSxkLmdlbmVyYXRlTWlwbWFwPWZ1bmN0aW9uKCl7dGhpcy5iaW5kKCksdGhpcy5nbC5nZW5lcmF0ZU1pcG1hcCh0aGlzLmdsLlRFWFRVUkVfMkQpO2Zvcih2YXIgdD1NYXRoLm1pbih0aGlzLl9zaGFwZVswXSx0aGlzLl9zaGFwZVsxXSksZT0wO3Q+MDsrK2UsdD4+Pj0xKXRoaXMuX21pcExldmVscy5pbmRleE9mKGUpPDAmJnRoaXMuX21pcExldmVscy5wdXNoKGUpfSxkLnNldFBpeGVscz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz10aGlzLmdsO3RoaXMuYmluZCgpLEFycmF5LmlzQXJyYXkoZSk/KG89cixyPTB8ZVsxXSxlPTB8ZVswXSk6KGU9ZXx8MCxyPXJ8fDApLG89b3x8MDt2YXIgbD11KHQpP3Q6dC5yYXc7aWYobCl7dGhpcy5fbWlwTGV2ZWxzLmluZGV4T2Yobyk8MD8ocy50ZXhJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLHRoaXMuZm9ybWF0LHRoaXMuZm9ybWF0LHRoaXMudHlwZSxsKSx0aGlzLl9taXBMZXZlbHMucHVzaChvKSk6cy50ZXhTdWJJbWFnZTJEKHMuVEVYVFVSRV8yRCxvLGUscix0aGlzLmZvcm1hdCx0aGlzLnR5cGUsbCl9ZWxzZXtpZighKHQuc2hhcGUmJnQuc3RyaWRlJiZ0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbnN1cHBvcnRlZCBkYXRhIHR5cGUiKTtpZih0LnNoYXBlLmxlbmd0aDwyfHxlK3Quc2hhcGVbMV0+dGhpcy5fc2hhcGVbMV0+Pj5vfHxyK3Quc2hhcGVbMF0+dGhpcy5fc2hhcGVbMF0+Pj5vfHxlPDB8fHI8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVGV4dHVyZSBkaW1lbnNpb25zIGFyZSBvdXQgb2YgYm91bmRzIik7IWZ1bmN0aW9uKHQsZSxyLG8scyxsLGMsdSl7dmFyIGg9dS5kdHlwZSxwPXUuc2hhcGUuc2xpY2UoKTtpZihwLmxlbmd0aDwyfHxwLmxlbmd0aD4zKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIG5kYXJyYXksIG11c3QgYmUgMmQgb3IgM2QiKTt2YXIgZD0wLG09MCx2PWcocCx1LnN0cmlkZS5zbGljZSgpKTsiZmxvYXQzMiI9PT1oP2Q9dC5GTE9BVDoiZmxvYXQ2NCI9PT1oPyhkPXQuRkxPQVQsdj0hMSxoPSJmbG9hdDMyIik6InVpbnQ4Ij09PWg/ZD10LlVOU0lHTkVEX0JZVEU6KGQ9dC5VTlNJR05FRF9CWVRFLHY9ITEsaD0idWludDgiKTtpZigyPT09cC5sZW5ndGgpbT10LkxVTUlOQU5DRSxwPVtwWzBdLHBbMV0sMV0sdT1uKHUuZGF0YSxwLFt1LnN0cmlkZVswXSx1LnN0cmlkZVsxXSwxXSx1Lm9mZnNldCk7ZWxzZXtpZigzIT09cC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHRleHR1cmUiKTtpZigxPT09cFsyXSltPXQuQUxQSEE7ZWxzZSBpZigyPT09cFsyXSltPXQuTFVNSU5BTkNFX0FMUEhBO2Vsc2UgaWYoMz09PXBbMl0pbT10LlJHQjtlbHNle2lmKDQhPT1wWzJdKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciBwaXhlbCBjb29yZHMiKTttPXQuUkdCQX1wWzJdfW0hPT10LkxVTUlOQU5DRSYmbSE9PXQuQUxQSEF8fHMhPT10LkxVTUlOQU5DRSYmcyE9PXQuQUxQSEF8fChtPXMpO2lmKG0hPT1zKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbmNvbXBhdGlibGUgdGV4dHVyZSBmb3JtYXQgZm9yIHNldFBpeGVscyIpO3ZhciB5PXUuc2l6ZSx4PWMuaW5kZXhPZihvKTwwO3gmJmMucHVzaChvKTtpZihkPT09bCYmdikwPT09dS5vZmZzZXQmJnUuZGF0YS5sZW5ndGg9PT15P3g/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLHUuZGF0YSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLHUuZGF0YSk6eD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsdS5kYXRhLnN1YmFycmF5KHUub2Zmc2V0LHUub2Zmc2V0K3kpKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsdS5kYXRhLnN1YmFycmF5KHUub2Zmc2V0LHUub2Zmc2V0K3kpKTtlbHNle3ZhciBiO2I9bD09PXQuRkxPQVQ/YS5tYWxsb2NGbG9hdDMyKHkpOmEubWFsbG9jVWludDgoeSk7dmFyIF89bihiLHAsW3BbMl0scFsyXSpwWzBdLDFdKTtkPT09dC5GTE9BVCYmbD09PXQuVU5TSUdORURfQllURT9mKF8sdSk6aS5hc3NpZ24oXyx1KSx4P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCxiLnN1YmFycmF5KDAseSkpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCxiLnN1YmFycmF5KDAseSkpLGw9PT10LkZMT0FUP2EuZnJlZUZsb2F0MzIoYik6YS5mcmVlVWludDgoYil9fShzLGUscixvLHRoaXMuZm9ybWF0LHRoaXMudHlwZSx0aGlzLl9taXBMZXZlbHMsdCl9fX0se25kYXJyYXk6NDk1LCJuZGFycmF5LW9wcyI6NDkwLCJ0eXBlZGFycmF5LXBvb2wiOjU5NX1dLDM1NDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGljay1ieS1hbGlhcyIpO2Z1bmN0aW9uIGkodCl7aWYodC5jb250YWluZXIpaWYodC5jb250YWluZXI9PWRvY3VtZW50LmJvZHkpZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aHx8KHQuY2FudmFzLndpZHRoPXQud2lkdGh8fHQucGl4ZWxSYXRpbypyLmlubmVyV2lkdGgpLGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0fHwodC5jYW52YXMuaGVpZ2h0PXQuaGVpZ2h0fHx0LnBpeGVsUmF0aW8qci5pbm5lckhlaWdodCk7ZWxzZXt2YXIgZT10LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LmNhbnZhcy53aWR0aD10LndpZHRofHxlLnJpZ2h0LWUubGVmdCx0LmNhbnZhcy5oZWlnaHQ9dC5oZWlnaHR8fGUuYm90dG9tLWUudG9wfX1mdW5jdGlvbiBhKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldENvbnRleHQmJiJ3aWR0aCJpbiB0JiYiaGVpZ2h0ImluIHR9ZnVuY3Rpb24gbygpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiB0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5zdHlsZS50b3A9MCx0LnN0eWxlLmxlZnQ9MCx0fWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtpZih0PyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9e2NvbnRhaW5lcjp0fSk6dD17fSxhKHQpP3Q9e2NvbnRhaW5lcjp0fTp0PSJzdHJpbmciPT10eXBlb2YoZT10KS5ub2RlTmFtZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuYXBwZW5kQ2hpbGQmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdD97Y29udGFpbmVyOnR9OmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0LmRyYXdBcnJheXN8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRyYXdFbGVtZW50c30odCk/e2dsOnR9Om4odCx7Y29udGFpbmVyOiJjb250YWluZXIgdGFyZ2V0IGVsZW1lbnQgZWwgY2FudmFzIGhvbGRlciBwYXJlbnQgcGFyZW50Tm9kZSB3cmFwcGVyIHVzZSByZWYgcm9vdCBub2RlIixnbDoiZ2wgY29udGV4dCB3ZWJnbCBnbENvbnRleHQiLGF0dHJzOiJhdHRyaWJ1dGVzIGF0dHJzIGNvbnRleHRBdHRyaWJ1dGVzIixwaXhlbFJhdGlvOiJwaXhlbFJhdGlvIHB4UmF0aW8gcHggcmF0aW8gcHhyYXRpbyBwaXhlbHJhdGlvIix3aWR0aDoidyB3aWR0aCIsaGVpZ2h0OiJoIGhlaWdodCJ9LCEwKSx0LnBpeGVsUmF0aW98fCh0LnBpeGVsUmF0aW89ci5waXhlbFJhdGlvfHwxKSx0LmdsKXJldHVybiB0LmdsO2lmKHQuY2FudmFzJiYodC5jb250YWluZXI9dC5jYW52YXMucGFyZW50Tm9kZSksdC5jb250YWluZXIpe2lmKCJzdHJpbmciPT10eXBlb2YgdC5jb250YWluZXIpe3ZhciBzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodC5jb250YWluZXIpO2lmKCFzKXRocm93IEVycm9yKCJFbGVtZW50ICIrdC5jb250YWluZXIrIiBpcyBub3QgZm91bmQiKTt0LmNvbnRhaW5lcj1zfWEodC5jb250YWluZXIpPyh0LmNhbnZhcz10LmNvbnRhaW5lcix0LmNvbnRhaW5lcj10LmNhbnZhcy5wYXJlbnROb2RlKTp0LmNhbnZhc3x8KHQuY2FudmFzPW8oKSx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmNhbnZhcyksaSh0KSl9ZWxzZSBpZighdC5jYW52YXMpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQpdGhyb3cgRXJyb3IoIk5vdCBET00gZW52aXJvbm1lbnQuIFVzZSBoZWFkbGVzcy1nbC4iKTt0LmNvbnRhaW5lcj1kb2N1bWVudC5ib2R5fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdC5jYW52YXM9bygpLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHQuY2FudmFzKSxpKHQpfWlmKCF0LmdsKXRyeXt0LmdsPXQuY2FudmFzLmdldENvbnRleHQoIndlYmdsIix0LmF0dHJzKX1jYXRjaChlKXt0cnl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLHQuYXR0cnMpfWNhdGNoKGUpe3QuZ2w9dC5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wtZXhwZXJpbWVudGFsIix0LmF0dHJzKX19cmV0dXJuIHQuZ2x9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJwaWNrLWJ5LWFsaWFzIjo1MTF9XSwzNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlP2UuYmluZCgpOnQuYmluZEJ1ZmZlcih0LkVMRU1FTlRfQVJSQVlfQlVGRkVSLG51bGwpO3ZhciBuPTB8dC5nZXRQYXJhbWV0ZXIodC5NQVhfVkVSVEVYX0FUVFJJQlMpO2lmKHIpe2lmKHIubGVuZ3RoPm4pdGhyb3cgbmV3IEVycm9yKCJnbC12YW86IFRvbyBtYW55IHZlcnRleCBhdHRyaWJ1dGVzIik7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBhPXJbaV07aWYoYS5idWZmZXIpe3ZhciBvPWEuYnVmZmVyLHM9YS5zaXplfHw0LGw9YS50eXBlfHx0LkZMT0FULGM9ISFhLm5vcm1hbGl6ZWQsdT1hLnN0cmlkZXx8MCxmPWEub2Zmc2V0fHwwO28uYmluZCgpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkscyxsLGMsdSxmKX1lbHNle2lmKCJudW1iZXIiPT10eXBlb2YgYSl0LnZlcnRleEF0dHJpYjFmKGksYSk7ZWxzZSBpZigxPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIxZihpLGFbMF0pO2Vsc2UgaWYoMj09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliMmYoaSxhWzBdLGFbMV0pO2Vsc2UgaWYoMz09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliM2YoaSxhWzBdLGFbMV0sYVsyXSk7ZWxzZXtpZig0IT09YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC12YW86IEludmFsaWQgdmVydGV4IGF0dHJpYnV0ZSIpO3QudmVydGV4QXR0cmliNGYoaSxhWzBdLGFbMV0sYVsyXSxhWzNdKX10LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19Zm9yKDtpPG47KytpKXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfWVsc2V7dC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLG51bGwpO2ZvcihpPTA7aTxuOysraSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19fSx7fV0sMzU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZG8tYmluZC5qcyIpO2Z1bmN0aW9uIGkodCl7dGhpcy5nbD10LHRoaXMuX2VsZW1lbnRzPW51bGwsdGhpcy5fYXR0cmlidXRlcz1udWxsLHRoaXMuX2VsZW1lbnRzVHlwZT10LlVOU0lHTkVEX1NIT1JUfWkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXtuKHRoaXMuZ2wsdGhpcy5fZWxlbWVudHMsdGhpcy5fYXR0cmlidXRlcyl9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5fZWxlbWVudHM9ZSx0aGlzLl9hdHRyaWJ1dGVzPXQsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGkucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbigpe30saS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fZWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpKHQpfX0seyIuL2RvLWJpbmQuanMiOjM1NX1dLDM1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RvLWJpbmQuanMiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhKXt0aGlzLmxvY2F0aW9uPXQsdGhpcy5kaW1lbnNpb249ZSx0aGlzLmE9cix0aGlzLmI9bix0aGlzLmM9aSx0aGlzLmQ9YX1mdW5jdGlvbiBhKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5fZXh0PWUsdGhpcy5oYW5kbGU9cix0aGlzLl9hdHRyaWJzPVtdLHRoaXMuX3VzZUVsZW1lbnRzPSExLHRoaXMuX2VsZW1lbnRzVHlwZT10LlVOU0lHTkVEX1NIT1JUfWkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuZGltZW5zaW9uKXtjYXNlIDE6dC52ZXJ0ZXhBdHRyaWIxZih0aGlzLmxvY2F0aW9uLHRoaXMuYSk7YnJlYWs7Y2FzZSAyOnQudmVydGV4QXR0cmliMmYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iKTticmVhaztjYXNlIDM6dC52ZXJ0ZXhBdHRyaWIzZih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIsdGhpcy5jKTticmVhaztjYXNlIDQ6dC52ZXJ0ZXhBdHRyaWI0Zih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIsdGhpcy5jLHRoaXMuZCl9fSxhLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSk7Zm9yKHZhciB0PTA7dDx0aGlzLl9hdHRyaWJzLmxlbmd0aDsrK3QpdGhpcy5fYXR0cmlic1t0XS5iaW5kKHRoaXMuZ2wpfSxhLnByb3RvdHlwZS51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLl9leHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpfSxhLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMuaGFuZGxlKX0sYS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmJpbmQoKSxuKHRoaXMuZ2wsZSx0KSx0aGlzLnVuYmluZCgpLHRoaXMuX2F0dHJpYnMubGVuZ3RoPTAsdClmb3IodmFyIGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIG89dFthXTsibnVtYmVyIj09dHlwZW9mIG8/dGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsMSxvKSk6QXJyYXkuaXNBcnJheShvKSYmdGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsby5sZW5ndGgsb1swXSxvWzFdLG9bMl0sb1szXSkpfXRoaXMuX3VzZUVsZW1lbnRzPSEhZSx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0sYS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fdXNlRWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGEodCxlLGUuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSl9fSx7Ii4vZG8tYmluZC5qcyI6MzU1fV0sMzU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3Zhby1uYXRpdmUuanMiKSxpPXQoIi4vbGliL3Zhby1lbXVsYXRlZC5qcyIpO2Z1bmN0aW9uIGEodCl7dGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dC5iaW5kVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmNyZWF0ZVZlcnRleEFycmF5T0VTPXQuY3JlYXRlVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmRlbGV0ZVZlcnRleEFycmF5T0VTPXQuZGVsZXRlVmVydGV4QXJyYXkuYmluZCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbD10LmNyZWF0ZVZlcnRleEFycmF5P25ldyBhKHQpOnQuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpO3JldHVybihzPWw/bih0LGwpOmkodCkpLnVwZGF0ZShlLHIsbyksc319LHsiLi9saWIvdmFvLWVtdWxhdGVkLmpzIjozNTYsIi4vbGliL3Zhby1uYXRpdmUuanMiOjM1N31dLDM1OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHR9fSx7fV0sMzYwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0WzBdLHRbMV0sdFsyXSksbz1uKGVbMF0sZVsxXSxlWzJdKTtpKHIsciksaShvLG8pO3ZhciBzPWEocixvKTtyZXR1cm4gcz4xPzA6TWF0aC5hY29zKHMpfTt2YXIgbj10KCIuL2Zyb21WYWx1ZXMiKSxpPXQoIi4vbm9ybWFsaXplIiksYT10KCIuL2RvdCIpfSx7Ii4vZG90IjozNzAsIi4vZnJvbVZhbHVlcyI6Mzc2LCIuL25vcm1hbGl6ZSI6Mzg3fV0sMzYxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5jZWlsKGVbMF0pLHRbMV09TWF0aC5jZWlsKGVbMV0pLHRbMl09TWF0aC5jZWlsKGVbMl0pLHR9fSx7fV0sMzYyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGV9fSx7fV0sMzYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9fSx7fV0sMzY0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdH19LHt9XSwzNjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH19LHt9XSwzNjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9kaXN0YW5jZSIpfSx7Ii4vZGlzdGFuY2UiOjM2N31dLDM2NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppKX19LHt9XSwzNjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9kaXZpZGUiKX0seyIuL2RpdmlkZSI6MzY5fV0sMzY5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdL3JbMF0sdFsxXT1lWzFdL3JbMV0sdFsyXT1lWzJdL3JbMl0sdH19LHt9XSwzNzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19fSx7fV0sMzcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPTFlLTZ9LHt9XSwzNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz1lWzBdLHM9ZVsxXSxsPWVbMl07cmV0dXJuIE1hdGguYWJzKHItbyk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhvKSkmJk1hdGguYWJzKGktcyk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhpKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGEtbCk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhhKSxNYXRoLmFicyhsKSl9O3ZhciBuPXQoIi4vZXBzaWxvbiIpfSx7Ii4vZXBzaWxvbiI6MzcxfV0sMzczOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl19fSx7fV0sMzc0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5mbG9vcihlWzBdKSx0WzFdPU1hdGguZmxvb3IoZVsxXSksdFsyXT1NYXRoLmZsb29yKGVbMl0pLHR9fSx7fV0sMzc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSxvKXt2YXIgcyxsO2V8fChlPTMpO3J8fChyPTApO2w9aT9NYXRoLm1pbihpKmUrcix0Lmxlbmd0aCk6dC5sZW5ndGg7Zm9yKHM9cjtzPGw7cys9ZSluWzBdPXRbc10sblsxXT10W3MrMV0sblsyXT10W3MrMl0sYShuLG4sbyksdFtzXT1uWzBdLHRbcysxXT1uWzFdLHRbcysyXT1uWzJdO3JldHVybiB0fTt2YXIgbj10KCIuL2NyZWF0ZSIpKCl9LHsiLi9jcmVhdGUiOjM2NH1dLDM3NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gblswXT10LG5bMV09ZSxuWzJdPXIsbn19LHt9XSwzNzc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0VQU0lMT046dCgiLi9lcHNpbG9uIiksY3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGFuZ2xlOnQoIi4vYW5nbGUiKSxmcm9tVmFsdWVzOnQoIi4vZnJvbVZhbHVlcyIpLGNvcHk6dCgiLi9jb3B5Iiksc2V0OnQoIi4vc2V0IiksZXF1YWxzOnQoIi4vZXF1YWxzIiksZXhhY3RFcXVhbHM6dCgiLi9leGFjdEVxdWFscyIpLGFkZDp0KCIuL2FkZCIpLHN1YnRyYWN0OnQoIi4vc3VidHJhY3QiKSxzdWI6dCgiLi9zdWIiKSxtdWx0aXBseTp0KCIuL211bHRpcGx5IiksbXVsOnQoIi4vbXVsIiksZGl2aWRlOnQoIi4vZGl2aWRlIiksZGl2OnQoIi4vZGl2IiksbWluOnQoIi4vbWluIiksbWF4OnQoIi4vbWF4IiksZmxvb3I6dCgiLi9mbG9vciIpLGNlaWw6dCgiLi9jZWlsIikscm91bmQ6dCgiLi9yb3VuZCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLGRpc3Q6dCgiLi9kaXN0Iiksc3F1YXJlZERpc3RhbmNlOnQoIi4vc3F1YXJlZERpc3RhbmNlIiksc3FyRGlzdDp0KCIuL3NxckRpc3QiKSxsZW5ndGg6dCgiLi9sZW5ndGgiKSxsZW46dCgiLi9sZW4iKSxzcXVhcmVkTGVuZ3RoOnQoIi4vc3F1YXJlZExlbmd0aCIpLHNxckxlbjp0KCIuL3NxckxlbiIpLG5lZ2F0ZTp0KCIuL25lZ2F0ZSIpLGludmVyc2U6dCgiLi9pbnZlcnNlIiksbm9ybWFsaXplOnQoIi4vbm9ybWFsaXplIiksZG90OnQoIi4vZG90IiksY3Jvc3M6dCgiLi9jcm9zcyIpLGxlcnA6dCgiLi9sZXJwIikscmFuZG9tOnQoIi4vcmFuZG9tIiksdHJhbnNmb3JtTWF0NDp0KCIuL3RyYW5zZm9ybU1hdDQiKSx0cmFuc2Zvcm1NYXQzOnQoIi4vdHJhbnNmb3JtTWF0MyIpLHRyYW5zZm9ybVF1YXQ6dCgiLi90cmFuc2Zvcm1RdWF0Iikscm90YXRlWDp0KCIuL3JvdGF0ZVgiKSxyb3RhdGVZOnQoIi4vcm90YXRlWSIpLHJvdGF0ZVo6dCgiLi9yb3RhdGVaIiksZm9yRWFjaDp0KCIuL2ZvckVhY2giKX19LHsiLi9hZGQiOjM1OSwiLi9hbmdsZSI6MzYwLCIuL2NlaWwiOjM2MSwiLi9jbG9uZSI6MzYyLCIuL2NvcHkiOjM2MywiLi9jcmVhdGUiOjM2NCwiLi9jcm9zcyI6MzY1LCIuL2Rpc3QiOjM2NiwiLi9kaXN0YW5jZSI6MzY3LCIuL2RpdiI6MzY4LCIuL2RpdmlkZSI6MzY5LCIuL2RvdCI6MzcwLCIuL2Vwc2lsb24iOjM3MSwiLi9lcXVhbHMiOjM3MiwiLi9leGFjdEVxdWFscyI6MzczLCIuL2Zsb29yIjozNzQsIi4vZm9yRWFjaCI6Mzc1LCIuL2Zyb21WYWx1ZXMiOjM3NiwiLi9pbnZlcnNlIjozNzgsIi4vbGVuIjozNzksIi4vbGVuZ3RoIjozODAsIi4vbGVycCI6MzgxLCIuL21heCI6MzgyLCIuL21pbiI6MzgzLCIuL211bCI6Mzg0LCIuL211bHRpcGx5IjozODUsIi4vbmVnYXRlIjozODYsIi4vbm9ybWFsaXplIjozODcsIi4vcmFuZG9tIjozODgsIi4vcm90YXRlWCI6Mzg5LCIuL3JvdGF0ZVkiOjM5MCwiLi9yb3RhdGVaIjozOTEsIi4vcm91bmQiOjM5MiwiLi9zY2FsZSI6MzkzLCIuL3NjYWxlQW5kQWRkIjozOTQsIi4vc2V0IjozOTUsIi4vc3FyRGlzdCI6Mzk2LCIuL3NxckxlbiI6Mzk3LCIuL3NxdWFyZWREaXN0YW5jZSI6Mzk4LCIuL3NxdWFyZWRMZW5ndGgiOjM5OSwiLi9zdWIiOjQwMCwiLi9zdWJ0cmFjdCI6NDAxLCIuL3RyYW5zZm9ybU1hdDMiOjQwMiwiLi90cmFuc2Zvcm1NYXQ0Ijo0MDMsIi4vdHJhbnNmb3JtUXVhdCI6NDA0fV0sMzc4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHR9fSx7fV0sMzc5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vbGVuZ3RoIil9LHsiLi9sZW5ndGgiOjM4MH1dLDM4MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbil9fSx7fV0sMzgxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXTtyZXR1cm4gdFswXT1pK24qKHJbMF0taSksdFsxXT1hK24qKHJbMV0tYSksdFsyXT1vK24qKHJbMl0tbyksdH19LHt9XSwzODI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0fX0se31dLDM4MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5taW4oZVswXSxyWzBdKSx0WzFdPU1hdGgubWluKGVbMV0sclsxXSksdFsyXT1NYXRoLm1pbihlWzJdLHJbMl0pLHR9fSx7fV0sMzg0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vbXVsdGlwbHkiKX0seyIuL211bHRpcGx5IjozODV9XSwzODU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qclswXSx0WzFdPWVbMV0qclsxXSx0WzJdPWVbMl0qclsyXSx0fX0se31dLDM4NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0fX0se31dLDM4NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPXIqcituKm4raSppO2E+MCYmKGE9MS9NYXRoLnNxcnQoYSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEpO3JldHVybiB0fX0se31dLDM4ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8MTt2YXIgcj0yKk1hdGgucmFuZG9tKCkqTWF0aC5QSSxuPTIqTWF0aC5yYW5kb20oKS0xLGk9TWF0aC5zcXJ0KDEtbipuKSplO3JldHVybiB0WzBdPU1hdGguY29zKHIpKmksdFsxXT1NYXRoLnNpbihyKSppLHRbMl09biplLHR9fSx7fV0sMzg5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMV0sYT1yWzJdLG89ZVsxXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1lWzBdLHRbMV09aStvKmMtcypsLHRbMl09YStvKmwrcypjLHR9fSx7fV0sMzkwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzJdLG89ZVswXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK3MqbCtvKmMsdFsxXT1lWzFdLHRbMl09YStzKmMtbypsLHR9fSx7fV0sMzkxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89ZVswXS1pLHM9ZVsxXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK28qYy1zKmwsdFsxXT1hK28qbCtzKmMsdFsyXT1lWzJdLHR9fSx7fV0sMzkyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5yb3VuZChlWzBdKSx0WzFdPU1hdGgucm91bmQoZVsxXSksdFsyXT1NYXRoLnJvdW5kKGVbMl0pLHR9fSx7fV0sMzkzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdH19LHt9XSwzOTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHR9fSx7fV0sMzk1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0fX0se31dLDM5NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3NxdWFyZWREaXN0YW5jZSIpfSx7Ii4vc3F1YXJlZERpc3RhbmNlIjozOTh9XSwzOTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9zcXVhcmVkTGVuZ3RoIil9LHsiLi9zcXVhcmVkTGVuZ3RoIjozOTl9XSwzOTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl07cmV0dXJuIHIqcituKm4raSppfX0se31dLDM5OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIGUqZStyKnIrbipufX0se31dLDQwMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3N1YnRyYWN0Iil9LHsiLi9zdWJ0cmFjdCI6NDAxfV0sNDAxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdH19LHt9XSw0MDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH19LHt9XSw0MDM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XTtyZXR1cm4gbz1vfHwxLHRbMF09KHJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKS9vLHRbMV09KHJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKS9vLHRbMl09KHJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSkvbyx0fX0se31dLDQwNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGY9YyppK2wqbi1vKmEsaD1jKmErbyppLXMqbixwPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrcCotbytmKi1sLWgqLXMsdFsxXT1mKmMrcCotcytoKi1vLXUqLWwsdFsyXT1oKmMrcCotbCt1Ki1zLWYqLW8sdH19LHt9XSw0MDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0WzNdPWVbM10rclszXSx0fX0se31dLDQwNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZX19LHt9XSw0MDc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHR9fSx7fV0sNDA4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdFszXT0wLHR9fSx7fV0sNDA5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiBNYXRoLnNxcnQocipyK24qbitpKmkrYSphKX19LHt9XSw0MTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0WzNdPWVbM10vclszXSx0fX0se31dLDQxMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119fSx7fV0sNDEyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGlbMF09dCxpWzFdPWUsaVsyXT1yLGlbM109bixpfX0se31dLDQxMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGZyb21WYWx1ZXM6dCgiLi9mcm9tVmFsdWVzIiksY29weTp0KCIuL2NvcHkiKSxzZXQ6dCgiLi9zZXQiKSxhZGQ6dCgiLi9hZGQiKSxzdWJ0cmFjdDp0KCIuL3N1YnRyYWN0IiksbXVsdGlwbHk6dCgiLi9tdWx0aXBseSIpLGRpdmlkZTp0KCIuL2RpdmlkZSIpLG1pbjp0KCIuL21pbiIpLG1heDp0KCIuL21heCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLHNxdWFyZWREaXN0YW5jZTp0KCIuL3NxdWFyZWREaXN0YW5jZSIpLGxlbmd0aDp0KCIuL2xlbmd0aCIpLHNxdWFyZWRMZW5ndGg6dCgiLi9zcXVhcmVkTGVuZ3RoIiksbmVnYXRlOnQoIi4vbmVnYXRlIiksaW52ZXJzZTp0KCIuL2ludmVyc2UiKSxub3JtYWxpemU6dCgiLi9ub3JtYWxpemUiKSxkb3Q6dCgiLi9kb3QiKSxsZXJwOnQoIi4vbGVycCIpLHJhbmRvbTp0KCIuL3JhbmRvbSIpLHRyYW5zZm9ybU1hdDQ6dCgiLi90cmFuc2Zvcm1NYXQ0IiksdHJhbnNmb3JtUXVhdDp0KCIuL3RyYW5zZm9ybVF1YXQiKX19LHsiLi9hZGQiOjQwNSwiLi9jbG9uZSI6NDA2LCIuL2NvcHkiOjQwNywiLi9jcmVhdGUiOjQwOCwiLi9kaXN0YW5jZSI6NDA5LCIuL2RpdmlkZSI6NDEwLCIuL2RvdCI6NDExLCIuL2Zyb21WYWx1ZXMiOjQxMiwiLi9pbnZlcnNlIjo0MTQsIi4vbGVuZ3RoIjo0MTUsIi4vbGVycCI6NDE2LCIuL21heCI6NDE3LCIuL21pbiI6NDE4LCIuL211bHRpcGx5Ijo0MTksIi4vbmVnYXRlIjo0MjAsIi4vbm9ybWFsaXplIjo0MjEsIi4vcmFuZG9tIjo0MjIsIi4vc2NhbGUiOjQyMywiLi9zY2FsZUFuZEFkZCI6NDI0LCIuL3NldCI6NDI1LCIuL3NxdWFyZWREaXN0YW5jZSI6NDI2LCIuL3NxdWFyZWRMZW5ndGgiOjQyNywiLi9zdWJ0cmFjdCI6NDI4LCIuL3RyYW5zZm9ybU1hdDQiOjQyOSwiLi90cmFuc2Zvcm1RdWF0Ijo0MzB9XSw0MTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xL2VbMF0sdFsxXT0xL2VbMV0sdFsyXT0xL2VbMl0sdFszXT0xL2VbM10sdH19LHt9XSw0MTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuK2kqaSl9fSx7fV0sNDE2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXSxzPWVbM107cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHRbM109cytuKihyWzNdLXMpLHR9fSx7fV0sNDE3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdFszXT1NYXRoLm1heChlWzNdLHJbM10pLHR9fSx7fV0sNDE4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdFszXT1NYXRoLm1pbihlWzNdLHJbM10pLHR9fSx7fV0sNDE5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdFsyXT1lWzJdKnJbMl0sdFszXT1lWzNdKnJbM10sdH19LHt9XSw0MjA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdFszXT0tZVszXSx0fX0se31dLDQyMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKnIrbipuK2kqaSthKmE7bz4wJiYobz0xL01hdGguc3FydChvKSx0WzBdPXIqbyx0WzFdPW4qbyx0WzJdPWkqbyx0WzNdPWEqbyk7cmV0dXJuIHR9fSx7fV0sNDIyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9ub3JtYWxpemUiKSxpPXQoIi4vc2NhbGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwxLHRbMF09TWF0aC5yYW5kb20oKSx0WzFdPU1hdGgucmFuZG9tKCksdFsyXT1NYXRoLnJhbmRvbSgpLHRbM109TWF0aC5yYW5kb20oKSxuKHQsdCksaSh0LHQsZSksdH19LHsiLi9ub3JtYWxpemUiOjQyMSwiLi9zY2FsZSI6NDIzfV0sNDIzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdH19LHt9XSw0MjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHRbM109ZVszXStyWzNdKm4sdH19LHt9XSw0MjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdFszXT1pLHR9fSx7fV0sNDI2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiByKnIrbipuK2kqaSthKmF9fSx7fV0sNDI3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIGUqZStyKnIrbipuK2kqaX19LHt9XSw0Mjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0fX0se31dLDQyOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH19LHt9XSw0MzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPXJbM10sdT1jKm4rcyphLWwqaSxmPWMqaStsKm4tbyphLGg9YyphK28qaS1zKm4scD0tbypuLXMqaS1sKmE7cmV0dXJuIHRbMF09dSpjK3AqLW8rZiotbC1oKi1zLHRbMV09ZipjK3AqLXMraCotby11Ki1sLHRbMl09aCpjK3AqLWwrdSotcy1mKi1vLHRbM109ZVszXSx0fX0se31dLDQzMTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2wtdG9rZW5pemVyIiksaT10KCJhdG9iLWxpdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUFycmF5LmlzQXJyYXkodCk/dDpuKHQpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGE9ZVtyXTtpZigicHJlcHJvY2Vzc29yIj09PWEudHlwZSl7dmFyIG89YS5kYXRhLm1hdGNoKC9cI2RlZmluZVxzK1NIQURFUl9OQU1FKF9CNjQpP1xzKyguKykkLyk7aWYobyYmb1syXSl7dmFyIHM9b1sxXSxsPW9bMl07cmV0dXJuKHM/aShsKTpsKS50cmltKCl9fX19fSx7ImF0b2ItbGl0ZSI6NzcsImdsc2wtdG9rZW5pemVyIjo0Mzh9XSw0MzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixjLHU9MCxmPTAsaD05OTkscD1bXSxkPVtdLGc9MSxtPTAsdj0wLHk9ITEseD0hMSxiPSIiLF89YSx3PW47IjMwMCBlcyI9PT0odD10fHx7fSkudmVyc2lvbiYmKF89cyx3PW8pO3ZhciBUPXt9LGs9e307Zm9yKHU9MDt1PF8ubGVuZ3RoO3UrKylUW19bdV1dPSEwO2Zvcih1PTA7dTx3Lmxlbmd0aDt1Kyspa1t3W3VdXT0hMDtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGQ9W10sbnVsbCE9PXQ/ZnVuY3Rpb24odCl7dT0wLHQudG9TdHJpbmcmJih0PXQudG9TdHJpbmcoKSk7dmFyIHI7Yis9dC5yZXBsYWNlKC9cclxuL2csIlxuIiksYz1iLmxlbmd0aDtmb3IoO2U9Ylt1XSx1PGM7KXtzd2l0Y2gocj11LGgpe2Nhc2UgMDp1PUMoKTticmVhaztjYXNlIDE6Y2FzZSAyOnU9RSgpO2JyZWFrO2Nhc2UgMzp1PUwoKTticmVhaztjYXNlIDQ6dT16KCk7YnJlYWs7Y2FzZSAxMTp1PVAoKTticmVhaztjYXNlIDU6dT1PKCk7YnJlYWs7Y2FzZSA5OTk5OnU9RCgpO2JyZWFrO2Nhc2UgOTp1PVMoKTticmVhaztjYXNlIDk5OTp1PUEoKX1pZihyIT09dSlzd2l0Y2goYltyXSl7Y2FzZSJcbiI6bT0wLCsrZzticmVhaztkZWZhdWx0OisrbX19cmV0dXJuIGYrPXUsYj1iLnNsaWNlKHUpLGR9KHQpOmZ1bmN0aW9uKHQpe3AubGVuZ3RoJiZNKHAuam9pbigiIikpO3JldHVybiBoPTEwLE0oIihlb2YpIiksZH0oKX07ZnVuY3Rpb24gTSh0KXt0Lmxlbmd0aCYmZC5wdXNoKHt0eXBlOmxbaF0sZGF0YTp0LHBvc2l0aW9uOnYsbGluZTpnLGNvbHVtbjptfSl9ZnVuY3Rpb24gQSgpe3JldHVybiBwPXAubGVuZ3RoP1tdOnAsIi8iPT09ciYmIioiPT09ZT8odj1mK3UtMSxoPTAscj1lLHUrMSk6Ii8iPT09ciYmIi8iPT09ZT8odj1mK3UtMSxoPTEscj1lLHUrMSk6IiMiPT09ZT8oaD0yLHY9Zit1LHUpOi9ccy8udGVzdChlKT8oaD05LHY9Zit1LHUpOih5PS9cZC8udGVzdChlKSx4PS9bXlx3X10vLnRlc3QoZSksdj1mK3UsaD15PzQ6eD8zOjk5OTksdSl9ZnVuY3Rpb24gUygpe3JldHVybi9bXlxzXS9nLnRlc3QoZSk/KE0ocC5qb2luKCIiKSksaD05OTksdSk6KHAucHVzaChlKSxyPWUsdSsxKX1mdW5jdGlvbiBFKCl7cmV0dXJuIlxyIiE9PWUmJiJcbiIhPT1lfHwiXFwiPT09cj8ocC5wdXNoKGUpLHI9ZSx1KzEpOihNKHAuam9pbigiIikpLGg9OTk5LHUpfWZ1bmN0aW9uIEMoKXtyZXR1cm4iLyI9PT1lJiYiKiI9PT1yPyhwLnB1c2goZSksTShwLmpvaW4oIiIpKSxoPTk5OSx1KzEpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24gTCgpe2lmKCIuIj09PXImJi9cZC8udGVzdChlKSlyZXR1cm4gaD01LHU7aWYoIi8iPT09ciYmIioiPT09ZSlyZXR1cm4gaD0wLHU7aWYoIi8iPT09ciYmIi8iPT09ZSlyZXR1cm4gaD0xLHU7aWYoIi4iPT09ZSYmcC5sZW5ndGgpe2Zvcig7SShwKTspO3JldHVybiBoPTUsdX1pZigiOyI9PT1lfHwiKSI9PT1lfHwiKCI9PT1lKXtpZihwLmxlbmd0aClmb3IoO0kocCk7KTtyZXR1cm4gTShlKSxoPTk5OSx1KzF9dmFyIHQ9Mj09PXAubGVuZ3RoJiYiPSIhPT1lO2lmKC9bXHdfXGRcc10vLnRlc3QoZSl8fHQpe2Zvcig7SShwKTspO3JldHVybiBoPTk5OSx1fXJldHVybiBwLnB1c2goZSkscj1lLHUrMX1mdW5jdGlvbiBJKHQpe2Zvcih2YXIgZSxyLG49MDs7KXtpZihlPWkuaW5kZXhPZih0LnNsaWNlKDAsdC5sZW5ndGgrbikuam9pbigiIikpLHI9aVtlXSwtMT09PWUpe2lmKG4tLSt0Lmxlbmd0aD4wKWNvbnRpbnVlO3I9dC5zbGljZSgwLDEpLmpvaW4oIiIpfXJldHVybiBNKHIpLHYrPXIubGVuZ3RoLChwPXAuc2xpY2Uoci5sZW5ndGgpKS5sZW5ndGh9fWZ1bmN0aW9uIFAoKXtyZXR1cm4vW15hLWZBLUYwLTldLy50ZXN0KGUpPyhNKHAuam9pbigiIikpLGg9OTk5LHUpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24geigpe3JldHVybiIuIj09PWV8fC9bZUVdLy50ZXN0KGUpPyhwLnB1c2goZSksaD01LHI9ZSx1KzEpOiJ4Ij09PWUmJjE9PT1wLmxlbmd0aCYmIjAiPT09cFswXT8oaD0xMSxwLnB1c2goZSkscj1lLHUrMSk6L1teXGRdLy50ZXN0KGUpPyhNKHAuam9pbigiIikpLGg9OTk5LHUpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24gTygpe3JldHVybiJmIj09PWUmJihwLnB1c2goZSkscj1lLHUrPTEpLC9bZUVdLy50ZXN0KGUpPyhwLnB1c2goZSkscj1lLHUrMSk6KCItIiE9PWUmJiIrIiE9PWV8fCEvW2VFXS8udGVzdChyKSkmJi9bXlxkXS8udGVzdChlKT8oTShwLmpvaW4oIiIpKSxoPTk5OSx1KToocC5wdXNoKGUpLHI9ZSx1KzEpfWZ1bmN0aW9uIEQoKXtpZigvW15cZFx3X10vLnRlc3QoZSkpe3ZhciB0PXAuam9pbigiIik7cmV0dXJuIGg9a1t0XT84OlRbdF0/Nzo2LE0ocC5qb2luKCIiKSksaD05OTksdX1yZXR1cm4gcC5wdXNoKGUpLHI9ZSx1KzF9fTt2YXIgbj10KCIuL2xpYi9saXRlcmFscyIpLGk9dCgiLi9saWIvb3BlcmF0b3JzIiksYT10KCIuL2xpYi9idWlsdGlucyIpLG89dCgiLi9saWIvbGl0ZXJhbHMtMzAwZXMiKSxzPXQoIi4vbGliL2J1aWx0aW5zLTMwMGVzIiksbD1bImJsb2NrLWNvbW1lbnQiLCJsaW5lLWNvbW1lbnQiLCJwcmVwcm9jZXNzb3IiLCJvcGVyYXRvciIsImludGVnZXIiLCJmbG9hdCIsImlkZW50IiwiYnVpbHRpbiIsImtleXdvcmQiLCJ3aGl0ZXNwYWNlIiwiZW9mIiwiaW50ZWdlciJdfSx7Ii4vbGliL2J1aWx0aW5zIjo0MzQsIi4vbGliL2J1aWx0aW5zLTMwMGVzIjo0MzMsIi4vbGliL2xpdGVyYWxzIjo0MzYsIi4vbGliL2xpdGVyYWxzLTMwMGVzIjo0MzUsIi4vbGliL29wZXJhdG9ycyI6NDM3fV0sNDMzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9idWlsdGlucyIpO249bi5zbGljZSgpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIS9eKGdsXF98dGV4dHVyZSkvLnRlc3QodCl9KSksZS5leHBvcnRzPW4uY29uY2F0KFsiZ2xfVmVydGV4SUQiLCJnbF9JbnN0YW5jZUlEIiwiZ2xfUG9zaXRpb24iLCJnbF9Qb2ludFNpemUiLCJnbF9GcmFnQ29vcmQiLCJnbF9Gcm9udEZhY2luZyIsImdsX0ZyYWdEZXB0aCIsImdsX1BvaW50Q29vcmQiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzIiwiZ2xfTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhEcmF3QnVmZmVycyIsImdsX01pblByb2dyYW1UZXhlbE9mZnNldCIsImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIiwiZ2xfRGVwdGhSYW5nZSIsInRydW5jIiwicm91bmQiLCJyb3VuZEV2ZW4iLCJpc25hbiIsImlzaW5mIiwiZmxvYXRCaXRzVG9JbnQiLCJmbG9hdEJpdHNUb1VpbnQiLCJpbnRCaXRzVG9GbG9hdCIsInVpbnRCaXRzVG9GbG9hdCIsInBhY2tTbm9ybTJ4MTYiLCJ1bnBhY2tTbm9ybTJ4MTYiLCJwYWNrVW5vcm0yeDE2IiwidW5wYWNrVW5vcm0yeDE2IiwicGFja0hhbGYyeDE2IiwidW5wYWNrSGFsZjJ4MTYiLCJvdXRlclByb2R1Y3QiLCJ0cmFuc3Bvc2UiLCJkZXRlcm1pbmFudCIsImludmVyc2UiLCJ0ZXh0dXJlIiwidGV4dHVyZVNpemUiLCJ0ZXh0dXJlUHJvaiIsInRleHR1cmVMb2QiLCJ0ZXh0dXJlT2Zmc2V0IiwidGV4ZWxGZXRjaCIsInRleGVsRmV0Y2hPZmZzZXQiLCJ0ZXh0dXJlUHJvak9mZnNldCIsInRleHR1cmVMb2RPZmZzZXQiLCJ0ZXh0dXJlUHJvakxvZCIsInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwidGV4dHVyZUdyYWQiLCJ0ZXh0dXJlR3JhZE9mZnNldCIsInRleHR1cmVQcm9qR3JhZCIsInRleHR1cmVQcm9qR3JhZE9mZnNldCJdKX0seyIuL2J1aWx0aW5zIjo0MzR9XSw0MzQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJhYnMiLCJhY29zIiwiYWxsIiwiYW55IiwiYXNpbiIsImF0YW4iLCJjZWlsIiwiY2xhbXAiLCJjb3MiLCJjcm9zcyIsImRGZHgiLCJkRmR5IiwiZGVncmVlcyIsImRpc3RhbmNlIiwiZG90IiwiZXF1YWwiLCJleHAiLCJleHAyIiwiZmFjZWZvcndhcmQiLCJmbG9vciIsImZyYWN0IiwiZ2xfQmFja0NvbG9yIiwiZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0IiwiZ2xfQmFja0xpZ2h0UHJvZHVjdCIsImdsX0JhY2tNYXRlcmlhbCIsImdsX0JhY2tTZWNvbmRhcnlDb2xvciIsImdsX0NsaXBQbGFuZSIsImdsX0NsaXBWZXJ0ZXgiLCJnbF9Db2xvciIsImdsX0RlcHRoUmFuZ2UiLCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIsImdsX0V5ZVBsYW5lUSIsImdsX0V5ZVBsYW5lUiIsImdsX0V5ZVBsYW5lUyIsImdsX0V5ZVBsYW5lVCIsImdsX0ZvZyIsImdsX0ZvZ0Nvb3JkIiwiZ2xfRm9nRnJhZ0Nvb3JkIiwiZ2xfRm9nUGFyYW1ldGVycyIsImdsX0ZyYWdDb2xvciIsImdsX0ZyYWdDb29yZCIsImdsX0ZyYWdEYXRhIiwiZ2xfRnJhZ0RlcHRoIiwiZ2xfRnJhZ0RlcHRoRVhUIiwiZ2xfRnJvbnRDb2xvciIsImdsX0Zyb250RmFjaW5nIiwiZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdCIsImdsX0Zyb250TGlnaHRQcm9kdWN0IiwiZ2xfRnJvbnRNYXRlcmlhbCIsImdsX0Zyb250U2Vjb25kYXJ5Q29sb3IiLCJnbF9MaWdodE1vZGVsIiwiZ2xfTGlnaHRNb2RlbFBhcmFtZXRlcnMiLCJnbF9MaWdodE1vZGVsUHJvZHVjdHMiLCJnbF9MaWdodFByb2R1Y3RzIiwiZ2xfTGlnaHRTb3VyY2UiLCJnbF9MaWdodFNvdXJjZVBhcmFtZXRlcnMiLCJnbF9NYXRlcmlhbFBhcmFtZXRlcnMiLCJnbF9NYXhDbGlwUGxhbmVzIiwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heERyYXdCdWZmZXJzIiwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtQ29tcG9uZW50cyIsImdsX01heExpZ2h0cyIsImdsX01heFRleHR1cmVDb29yZHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFRleHR1cmVVbml0cyIsImdsX01heFZhcnlpbmdGbG9hdHMiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhWZXJ0ZXhVbmlmb3JtQ29tcG9uZW50cyIsImdsX01vZGVsVmlld01hdHJpeCIsImdsX01vZGVsVmlld01hdHJpeEludmVyc2UiLCJnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3TWF0cml4VHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlIiwiZ2xfTXVsdGlUZXhDb29yZDAiLCJnbF9NdWx0aVRleENvb3JkMSIsImdsX011bHRpVGV4Q29vcmQyIiwiZ2xfTXVsdGlUZXhDb29yZDMiLCJnbF9NdWx0aVRleENvb3JkNCIsImdsX011bHRpVGV4Q29vcmQ1IiwiZ2xfTXVsdGlUZXhDb29yZDYiLCJnbF9NdWx0aVRleENvb3JkNyIsImdsX05vcm1hbCIsImdsX05vcm1hbE1hdHJpeCIsImdsX05vcm1hbFNjYWxlIiwiZ2xfT2JqZWN0UGxhbmVRIiwiZ2xfT2JqZWN0UGxhbmVSIiwiZ2xfT2JqZWN0UGxhbmVTIiwiZ2xfT2JqZWN0UGxhbmVUIiwiZ2xfUG9pbnQiLCJnbF9Qb2ludENvb3JkIiwiZ2xfUG9pbnRQYXJhbWV0ZXJzIiwiZ2xfUG9pbnRTaXplIiwiZ2xfUG9zaXRpb24iLCJnbF9Qcm9qZWN0aW9uTWF0cml4IiwiZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2UiLCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2UiLCJnbF9TZWNvbmRhcnlDb2xvciIsImdsX1RleENvb3JkIiwiZ2xfVGV4dHVyZUVudkNvbG9yIiwiZ2xfVGV4dHVyZU1hdHJpeCIsImdsX1RleHR1cmVNYXRyaXhJbnZlcnNlIiwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9UZXh0dXJlTWF0cml4VHJhbnNwb3NlIiwiZ2xfVmVydGV4IiwiZ3JlYXRlclRoYW4iLCJncmVhdGVyVGhhbkVxdWFsIiwiaW52ZXJzZXNxcnQiLCJsZW5ndGgiLCJsZXNzVGhhbiIsImxlc3NUaGFuRXF1YWwiLCJsb2ciLCJsb2cyIiwibWF0cml4Q29tcE11bHQiLCJtYXgiLCJtaW4iLCJtaXgiLCJtb2QiLCJub3JtYWxpemUiLCJub3QiLCJub3RFcXVhbCIsInBvdyIsInJhZGlhbnMiLCJyZWZsZWN0IiwicmVmcmFjdCIsInNpZ24iLCJzaW4iLCJzbW9vdGhzdGVwIiwic3FydCIsInN0ZXAiLCJ0YW4iLCJ0ZXh0dXJlMkQiLCJ0ZXh0dXJlMkRMb2QiLCJ0ZXh0dXJlMkRQcm9qIiwidGV4dHVyZTJEUHJvakxvZCIsInRleHR1cmVDdWJlIiwidGV4dHVyZUN1YmVMb2QiLCJ0ZXh0dXJlMkRMb2RFWFQiLCJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwidGV4dHVyZUN1YmVMb2RFWFQiLCJ0ZXh0dXJlMkRHcmFkRVhUIiwidGV4dHVyZTJEUHJvakdyYWRFWFQiLCJ0ZXh0dXJlQ3ViZUdyYWRFWFQiXX0se31dLDQzNTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vbGl0ZXJhbHMiKTtlLmV4cG9ydHM9bi5zbGljZSgpLmNvbmNhdChbImxheW91dCIsImNlbnRyb2lkIiwic21vb3RoIiwiY2FzZSIsIm1hdDJ4MiIsIm1hdDJ4MyIsIm1hdDJ4NCIsIm1hdDN4MiIsIm1hdDN4MyIsIm1hdDN4NCIsIm1hdDR4MiIsIm1hdDR4MyIsIm1hdDR4NCIsInV2ZWMyIiwidXZlYzMiLCJ1dmVjNCIsInNhbXBsZXJDdWJlU2hhZG93Iiwic2FtcGxlcjJEQXJyYXkiLCJzYW1wbGVyMkRBcnJheVNoYWRvdyIsImlzYW1wbGVyMkQiLCJpc2FtcGxlcjNEIiwiaXNhbXBsZXJDdWJlIiwiaXNhbXBsZXIyREFycmF5IiwidXNhbXBsZXIyRCIsInVzYW1wbGVyM0QiLCJ1c2FtcGxlckN1YmUiLCJ1c2FtcGxlcjJEQXJyYXkiLCJjb2hlcmVudCIsInJlc3RyaWN0IiwicmVhZG9ubHkiLCJ3cml0ZW9ubHkiLCJyZXNvdXJjZSIsImF0b21pY191aW50Iiwibm9wZXJzcGVjdGl2ZSIsInBhdGNoIiwic2FtcGxlIiwic3Vicm91dGluZSIsImNvbW1vbiIsInBhcnRpdGlvbiIsImFjdGl2ZSIsImZpbHRlciIsImltYWdlMUQiLCJpbWFnZTJEIiwiaW1hZ2UzRCIsImltYWdlQ3ViZSIsImlpbWFnZTFEIiwiaWltYWdlMkQiLCJpaW1hZ2UzRCIsImlpbWFnZUN1YmUiLCJ1aW1hZ2UxRCIsInVpbWFnZTJEIiwidWltYWdlM0QiLCJ1aW1hZ2VDdWJlIiwiaW1hZ2UxREFycmF5IiwiaW1hZ2UyREFycmF5IiwiaWltYWdlMURBcnJheSIsImlpbWFnZTJEQXJyYXkiLCJ1aW1hZ2UxREFycmF5IiwidWltYWdlMkRBcnJheSIsImltYWdlMURTaGFkb3ciLCJpbWFnZTJEU2hhZG93IiwiaW1hZ2UxREFycmF5U2hhZG93IiwiaW1hZ2UyREFycmF5U2hhZG93IiwiaW1hZ2VCdWZmZXIiLCJpaW1hZ2VCdWZmZXIiLCJ1aW1hZ2VCdWZmZXIiLCJzYW1wbGVyMURBcnJheSIsInNhbXBsZXIxREFycmF5U2hhZG93IiwiaXNhbXBsZXIxRCIsImlzYW1wbGVyMURBcnJheSIsInVzYW1wbGVyMUQiLCJ1c2FtcGxlcjFEQXJyYXkiLCJpc2FtcGxlcjJEUmVjdCIsInVzYW1wbGVyMkRSZWN0Iiwic2FtcGxlckJ1ZmZlciIsImlzYW1wbGVyQnVmZmVyIiwidXNhbXBsZXJCdWZmZXIiLCJzYW1wbGVyMkRNUyIsImlzYW1wbGVyMkRNUyIsInVzYW1wbGVyMkRNUyIsInNhbXBsZXIyRE1TQXJyYXkiLCJpc2FtcGxlcjJETVNBcnJheSIsInVzYW1wbGVyMkRNU0FycmF5Il0pfSx7Ii4vbGl0ZXJhbHMiOjQzNn1dLDQzNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bInByZWNpc2lvbiIsImhpZ2hwIiwibWVkaXVtcCIsImxvd3AiLCJhdHRyaWJ1dGUiLCJjb25zdCIsInVuaWZvcm0iLCJ2YXJ5aW5nIiwiYnJlYWsiLCJjb250aW51ZSIsImRvIiwiZm9yIiwid2hpbGUiLCJpZiIsImVsc2UiLCJpbiIsIm91dCIsImlub3V0IiwiZmxvYXQiLCJpbnQiLCJ1aW50Iiwidm9pZCIsImJvb2wiLCJ0cnVlIiwiZmFsc2UiLCJkaXNjYXJkIiwicmV0dXJuIiwibWF0MiIsIm1hdDMiLCJtYXQ0IiwidmVjMiIsInZlYzMiLCJ2ZWM0IiwiaXZlYzIiLCJpdmVjMyIsIml2ZWM0IiwiYnZlYzIiLCJidmVjMyIsImJ2ZWM0Iiwic2FtcGxlcjFEIiwic2FtcGxlcjJEIiwic2FtcGxlcjNEIiwic2FtcGxlckN1YmUiLCJzYW1wbGVyMURTaGFkb3ciLCJzYW1wbGVyMkRTaGFkb3ciLCJzdHJ1Y3QiLCJhc20iLCJjbGFzcyIsInVuaW9uIiwiZW51bSIsInR5cGVkZWYiLCJ0ZW1wbGF0ZSIsInRoaXMiLCJwYWNrZWQiLCJnb3RvIiwic3dpdGNoIiwiZGVmYXVsdCIsImlubGluZSIsIm5vaW5saW5lIiwidm9sYXRpbGUiLCJwdWJsaWMiLCJzdGF0aWMiLCJleHRlcm4iLCJleHRlcm5hbCIsImludGVyZmFjZSIsImxvbmciLCJzaG9ydCIsImRvdWJsZSIsImhhbGYiLCJmaXhlZCIsInVuc2lnbmVkIiwiaW5wdXQiLCJvdXRwdXQiLCJodmVjMiIsImh2ZWMzIiwiaHZlYzQiLCJkdmVjMiIsImR2ZWMzIiwiZHZlYzQiLCJmdmVjMiIsImZ2ZWMzIiwiZnZlYzQiLCJzYW1wbGVyMkRSZWN0Iiwic2FtcGxlcjNEUmVjdCIsInNhbXBsZXIyRFJlY3RTaGFkb3ciLCJzaXplb2YiLCJjYXN0IiwibmFtZXNwYWNlIiwidXNpbmciXX0se31dLDQzNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIjw8PSIsIj4+PSIsIisrIiwiLS0iLCI8PCIsIj4+IiwiPD0iLCI+PSIsIj09IiwiIT0iLCImJiIsInx8IiwiKz0iLCItPSIsIio9IiwiLz0iLCIlPSIsIiY9IiwiXl4iLCJePSIsInw9IiwiKCIsIikiLCJbIiwiXSIsIi4iLCIhIiwifiIsIioiLCIvIiwiJSIsIisiLCItIiwiPCIsIj4iLCImIiwiXiIsInwiLCI/IiwiOiIsIj0iLCIsIiwiOyIsInsiLCJ9Il19LHt9XSw0Mzg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2luZGV4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKSxpPVtdO3JldHVybiBpPShpPWkuY29uY2F0KHIodCkpKS5jb25jYXQocihudWxsKSl9fSx7Ii4vaW5kZXgiOjQzMn1dLDQzOTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNTddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNTd9XSw0NDA6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiaXMtYnJvd3NlciIpO249ImZ1bmN0aW9uIj09dHlwZW9mIHIubWF0Y2hNZWRpYT8hci5tYXRjaE1lZGlhKCIoaG92ZXI6IG5vbmUpIikubWF0Y2hlczppLGUuZXhwb3J0cz1ufSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJpcy1icm93c2VyIjo0NjR9XSw0NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaXMtYnJvd3NlciIpO2UuZXhwb3J0cz1uJiZmdW5jdGlvbigpe3ZhciB0PSExO3RyeXt2YXIgZT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXt0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe3Q9ITF9cmV0dXJuIHR9KCl9LHsiaXMtYnJvd3NlciI6NDY0fV0sNDQyOltmdW5jdGlvbih0LGUscil7ci5yZWFkPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPTgqaS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxmPXI/aS0xOjAsaD1yPy0xOjEscD10W2UrZl07Zm9yKGYrPWgsYT1wJigxPDwtdSktMSxwPj49LXUsdSs9czt1PjA7YT0yNTYqYSt0W2UrZl0sZis9aCx1LT04KTtmb3Iobz1hJigxPDwtdSktMSxhPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UrZl0sZis9aCx1LT04KTtpZigwPT09YSlhPTEtYztlbHNle2lmKGE9PT1sKXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxhLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixhLW4pfSxyLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz04KmEtaS0xLHU9KDE8PGMpLTEsZj11Pj4xLGg9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPW4/MDphLTEsZD1uPzE6LTEsZz1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KHM9aXNOYU4oZSk/MTowLG89dSk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoobD1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxsKj0yKSwoZSs9bytmPj0xP2gvbDpoKk1hdGgucG93KDIsMS1mKSkqbD49MiYmKG8rKyxsLz0yKSxvK2Y+PXU/KHM9MCxvPXUpOm8rZj49MT8ocz0oZSpsLTEpKk1hdGgucG93KDIsaSksbys9Zik6KHM9ZSpNYXRoLnBvdygyLGYtMSkqTWF0aC5wb3coMixpKSxvPTApKTtpPj04O3RbcitwXT0yNTUmcyxwKz1kLHMvPTI1NixpLT04KTtmb3Iobz1vPDxpfHMsYys9aTtjPjA7dFtyK3BdPTI1NSZvLHArPWQsby89MjU2LGMtPTgpO3RbcitwLWRdfD0xMjgqZ319LHt9XSw0NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi90eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByO2ZvcihyIGluIG4paWYobltyXS5kZXRlY3QodCxlKSlyZXR1cm4gcn19LHsiLi90eXBlcyI6NDQ2fV0sNDQ0OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmcyIpLGk9dCgicGF0aCIpLGE9dCgiLi90eXBlcyIpLG89dCgiLi9kZXRlY3RvciIpO2Z1bmN0aW9uIHModCxlKXt2YXIgcj1vKHQsZSk7aWYociBpbiBhKXt2YXIgbj1hW3JdLmNhbGN1bGF0ZSh0LGUpO2lmKCExIT09bilyZXR1cm4gbi50eXBlPXIsbn10aHJvdyBuZXcgVHlwZUVycm9yKCJ1bnN1cHBvcnRlZCBmaWxlIHR5cGU6ICIrcisiIChmaWxlOiAiK2UrIikiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihyLmlzQnVmZmVyKHQpKXJldHVybiBzKHQpO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGludm9jYXRpb24iKTt2YXIgYT1pLnJlc29sdmUodCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJuIHMoZnVuY3Rpb24odCl7dmFyIGU9bi5vcGVuU3luYyh0LCJyIiksaT1uLmZzdGF0U3luYyhlKS5zaXplLGE9TWF0aC5taW4oaSw1MjQyODgpLG89ci5hbGxvYyhhKTtyZXR1cm4gbi5yZWFkU3luYyhlLG8sMCxhLDApLG4uY2xvc2VTeW5jKGUpLG99KGEpLGEpOyFmdW5jdGlvbih0LGUpe24ub3Blbih0LCJyIiwoZnVuY3Rpb24oaSxhKXtpZihpKXJldHVybiBlKGkpO24uZnN0YXQoYSwoZnVuY3Rpb24oaSxvKXtpZihpKXJldHVybiBlKGkpO3ZhciBzPW8uc2l6ZTtpZihzPD0wKXJldHVybiBlKG5ldyBFcnJvcigiRmlsZSBzaXplIGlzIG5vdCBncmVhdGVyIHRoYW4gMCBcdTIwMTRcdTIwMTQgIit0KSk7dmFyIGw9TWF0aC5taW4ocyw1MjQyODgpLGM9ci5hbGxvYyhsKTtuLnJlYWQoYSxjLDAsbCwwLChmdW5jdGlvbih0KXtpZih0KXJldHVybiBlKHQpO24uY2xvc2UoYSwoZnVuY3Rpb24odCl7ZSh0LGMpfSkpfSkpfSkpfSkpfShhLChmdW5jdGlvbih0LHIpe2lmKHQpcmV0dXJuIGUodCk7dmFyIG47dHJ5e249cyhyLGEpfWNhdGNoKGUpe3Q9ZX1lKHQsbil9KSl9LGUuZXhwb3J0cy50eXBlcz1PYmplY3Qua2V5cyhhKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiYnVmZmVyIikuQnVmZmVyKX0seyIuL2RldGVjdG9yIjo0NDMsIi4vdHlwZXMiOjQ0NixidWZmZXI6MTExLGZzOjEwOSxwYXRoOjUwN31dLDQ0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHI9cnx8MCx0WyJyZWFkVUludCIrZSsobj8iQkUiOiJMRSIpXS5jYWxsKHQscil9fSx7fV0sNDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXtibXA6dCgiLi90eXBlcy9ibXAiKSxjdXI6dCgiLi90eXBlcy9jdXIiKSxkZHM6dCgiLi90eXBlcy9kZHMiKSxnaWY6dCgiLi90eXBlcy9naWYiKSxpY25zOnQoIi4vdHlwZXMvaWNucyIpLGljbzp0KCIuL3R5cGVzL2ljbyIpLGpwZzp0KCIuL3R5cGVzL2pwZyIpLHBuZzp0KCIuL3R5cGVzL3BuZyIpLHBzZDp0KCIuL3R5cGVzL3BzZCIpLHN2Zzp0KCIuL3R5cGVzL3N2ZyIpLHRpZmY6dCgiLi90eXBlcy90aWZmIiksd2VicDp0KCIuL3R5cGVzL3dlYnAiKX07ZS5leHBvcnRzPW59LHsiLi90eXBlcy9ibXAiOjQ0NywiLi90eXBlcy9jdXIiOjQ0OCwiLi90eXBlcy9kZHMiOjQ0OSwiLi90eXBlcy9naWYiOjQ1MCwiLi90eXBlcy9pY25zIjo0NTEsIi4vdHlwZXMvaWNvIjo0NTIsIi4vdHlwZXMvanBnIjo0NTMsIi4vdHlwZXMvcG5nIjo0NTQsIi4vdHlwZXMvcHNkIjo0NTUsIi4vdHlwZXMvc3ZnIjo0NTYsIi4vdHlwZXMvdGlmZiI6NDU3LCIuL3R5cGVzL3dlYnAiOjQ1OH1dLDQ0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2RldGVjdDpmdW5jdGlvbih0KXtyZXR1cm4iQk0iPT09dC50b1N0cmluZygiYXNjaWkiLDAsMil9LGNhbGN1bGF0ZTpmdW5jdGlvbih0KXtyZXR1cm57d2lkdGg6dC5yZWFkVUludDMyTEUoMTgpLGhlaWdodDpNYXRoLmFicyh0LnJlYWRJbnQzMkxFKDIyKSl9fX19LHt9XSw0NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtkZXRlY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10LnJlYWRVSW50MTZMRSgwKSYmMj09PXQucmVhZFVJbnQxNkxFKDIpfSxjYWxjdWxhdGU6dCgiLi9pY28iKS5jYWxjdWxhdGV9fSx7Ii4vaWNvIjo0NTJ9XSw0NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtkZXRlY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIDU0MjMyNzg3Nj09PXQucmVhZFVJbnQzMkxFKDApfSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJue2hlaWdodDp0LnJlYWRVSW50MzJMRSgxMiksd2lkdGg6dC5yZWFkVUludDMyTEUoMTYpfX19fSx7fV0sNDUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPS9eR0lGOFs3OV1hLztlLmV4cG9ydHM9e2RldGVjdDpmdW5jdGlvbih0KXt2YXIgZT10LnRvU3RyaW5nKCJhc2NpaSIsMCw2KTtyZXR1cm4gbi50ZXN0KGUpfSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJue3dpZHRoOnQucmVhZFVJbnQxNkxFKDYpLGhlaWdodDp0LnJlYWRVSW50MTZMRSg4KX19fX0se31dLDQ1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17SUNPTjozMiwiSUNOIyI6MzIsImljbSMiOjE2LGljbTQ6MTYsaWNtODoxNiwiaWNzIyI6MTYsaWNzNDoxNixpY3M4OjE2LGlzMzI6MTYsczhtazoxNixpY3A0OjE2LGljbDQ6MzIsaWNsODozMixpbDMyOjMyLGw4bWs6MzIsaWNwNTozMixpYzExOjMyLGljaDQ6NDgsaWNoODo0OCxpaDMyOjQ4LGg4bWs6NDgsaWNwNjo2NCxpYzEyOjMyLGl0MzI6MTI4LHQ4bWs6MTI4LGljMDc6MTI4LGljMDg6MjU2LGljMTM6MjU2LGljMDk6NTEyLGljMTQ6NTEyLGljMTA6MTAyNH07ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWUrNDtyZXR1cm5bdC50b1N0cmluZygiYXNjaWkiLGUsciksdC5yZWFkVUludDMyQkUocildfWZ1bmN0aW9uIGEodCl7dmFyIGU9blt0XTtyZXR1cm57d2lkdGg6ZSxoZWlnaHQ6ZSx0eXBlOnR9fWUuZXhwb3J0cz17ZGV0ZWN0OmZ1bmN0aW9uKHQpe3JldHVybiJpY25zIj09PXQudG9TdHJpbmcoImFzY2lpIiwwLDQpfSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLG89dC5sZW5ndGgscz04LGw9dC5yZWFkVUludDMyQkUoNCk7aWYocj1hKChlPWkodCxzKSlbMF0pLChzKz1lWzFdKT09PWwpcmV0dXJuIHI7Zm9yKG49e3dpZHRoOnIud2lkdGgsaGVpZ2h0OnIuaGVpZ2h0LGltYWdlczpbcl19O3M8bCYmczxvOylyPWEoKGU9aSh0LHMpKVswXSkscys9ZVsxXSxuLmltYWdlcy5wdXNoKHIpO3JldHVybiBufX19LHt9XSw0NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXQucmVhZFVJbnQ4KGUpO3JldHVybiAwPT09cj8yNTY6cn1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9NisxNiplO3JldHVybnt3aWR0aDpuKHQsciksaGVpZ2h0Om4odCxyKzEpfX1lLmV4cG9ydHM9e2RldGVjdDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQucmVhZFVJbnQxNkxFKDApJiYxPT09dC5yZWFkVUludDE2TEUoMil9LGNhbGN1bGF0ZTpmdW5jdGlvbih0KXt2YXIgZSxyPXQucmVhZFVJbnQxNkxFKDQpLG49aSh0LDApO2lmKDE9PT1yKXJldHVybiBuO2ZvcihuLmltYWdlcz1be3dpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0fV0sZT0xO2U8cjtlKz0xKW4uaW1hZ2VzLnB1c2goaSh0LGUpKTtyZXR1cm4gbn19fSx7fV0sNDUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlYWRVSW50Iik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4iNDU3ODY5NjYiPT09dC50b1N0cmluZygiaGV4IiwyLDYpfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm57aGVpZ2h0OnQucmVhZFVJbnQxNkJFKGUpLHdpZHRoOnQucmVhZFVJbnQxNkJFKGUrMil9fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10LnNsaWNlKDIsZSksaT1yLnRvU3RyaW5nKCJoZXgiLDYsOCksYT0iNGQ0ZCI9PT1pO2lmKGF8fCI0OTQ5Ij09PWkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLGksYT1uKHQsMTYsMTQsZSksbz0wO288YTtvKyspe2lmKGk9KHI9MTYrMTIqbykrMTIscj50Lmxlbmd0aClyZXR1cm47dmFyIHM9dC5zbGljZShyLGkpO2lmKDI3ND09PW4ocywxNiwwLGUpKXtpZigzIT09bihzLDE2LDIsZSkpcmV0dXJuO2lmKDEhPT1uKHMsMzIsNCxlKSlyZXR1cm47cmV0dXJuIG4ocywxNiw4LGUpfX19KHIsYSl9ZnVuY3Rpb24gcyh0LGUpe2lmKGU+dC5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29ycnVwdCBKUEcsIGV4Y2VlZGVkIGJ1ZmZlciBsaW1pdHMiKTtpZigyNTUhPT10W2VdKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgSlBHLCBtYXJrZXIgdGFibGUgY29ycnVwdGVkIil9ZS5leHBvcnRzPXtkZXRlY3Q6ZnVuY3Rpb24odCl7cmV0dXJuImZmZDgiPT09dC50b1N0cmluZygiaGV4IiwwLDIpfSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7dmFyIGUscixuO2Zvcih0PXQuc2xpY2UoNCk7dC5sZW5ndGg7KXtpZihyPXQucmVhZFVJbnQxNkJFKDApLGkodCkmJihlPW8odCxyKSkscyh0LHIpLDE5Mj09PShuPXRbcisxXSl8fDE5Mz09PW58fDE5ND09PW4pe3ZhciBsPWEodCxyKzUpO3JldHVybiBlP3t3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodCxvcmllbnRhdGlvbjplfTpsfXQ9dC5zbGljZShyKzIpfXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgSlBHLCBubyBzaXplIGZvdW5kIil9fX0seyIuLi9yZWFkVUludCI6NDQ1fV0sNDU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZGV0ZWN0OmZ1bmN0aW9uKHQpe2lmKCJQTkdcclxuXHgxYVxuIj09PXQudG9TdHJpbmcoImFzY2lpIiwxLDgpKXt2YXIgZT10LnRvU3RyaW5nKCJhc2NpaSIsMTIsMTYpO2lmKCJDZ0JJIj09PWUmJihlPXQudG9TdHJpbmcoImFzY2lpIiwyOCwzMikpLCJJSERSIiE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBwbmciKTtyZXR1cm4hMH19LGNhbGN1bGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4iQ2dCSSI9PT10LnRvU3RyaW5nKCJhc2NpaSIsMTIsMTYpP3t3aWR0aDp0LnJlYWRVSW50MzJCRSgzMiksaGVpZ2h0OnQucmVhZFVJbnQzMkJFKDM2KX06e3dpZHRoOnQucmVhZFVJbnQzMkJFKDE2KSxoZWlnaHQ6dC5yZWFkVUludDMyQkUoMjApfX19fSx7fV0sNDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZGV0ZWN0OmZ1bmN0aW9uKHQpe3JldHVybiI4QlBTIj09PXQudG9TdHJpbmcoImFzY2lpIiwwLDQpfSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJue3dpZHRoOnQucmVhZFVJbnQzMkJFKDE4KSxoZWlnaHQ6dC5yZWFkVUludDMyQkUoMTQpfX19fSx7fV0sNDU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPS88c3ZnXHMoW14+IiddfCJbXiJdKiJ8J1teJ10qJykqPi87dmFyIGk9e3Jvb3Q6bix3aWR0aDovXHN3aWR0aD0oWyciXSkoW14lXSs/KVwxLyxoZWlnaHQ6L1xzaGVpZ2h0PShbJyJdKShbXiVdKz8pXDEvLHZpZXdib3g6L1xzdmlld0JveD0oWyciXSkoLis/KVwxL30sYT17Y206OTYvMi41NCxtbTo5Ni8yLjU0LzEwLG06OTYvMi41NCoxMDAscHQ6OTYvNzIscGM6OTYvNzIvMTIsZW06MTYsZXg6OH07ZnVuY3Rpb24gbyh0KXt2YXIgZT0vKFswLTkuXSspKFthLXpdKikvLmV4ZWModCk7aWYoZSlyZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGVbMV0pKihhW2VbMl1dfHwxKSl9ZnVuY3Rpb24gcyh0KXt2YXIgZT10LnNwbGl0KCIgIik7cmV0dXJue3dpZHRoOm8oZVsyXSksaGVpZ2h0Om8oZVszXSl9fWUuZXhwb3J0cz17ZGV0ZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBuLnRlc3QodCl9LGNhbGN1bGF0ZTpmdW5jdGlvbih0KXt2YXIgZT10LnRvU3RyaW5nKCJ1dGY4IikubWF0Y2goaS5yb290KTtpZihlKXt2YXIgcj1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKGkud2lkdGgpLHI9dC5tYXRjaChpLmhlaWdodCksbj10Lm1hdGNoKGkudmlld2JveCk7cmV0dXJue3dpZHRoOmUmJm8oZVsyXSksaGVpZ2h0OnImJm8oclsyXSksdmlld2JveDpuJiZzKG5bMl0pfX0oZVswXSk7aWYoci53aWR0aCYmci5oZWlnaHQpcmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybnt3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19KHIpO2lmKHIudmlld2JveClyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC52aWV3Ym94LndpZHRoL3Qudmlld2JveC5oZWlnaHQ7cmV0dXJuIHQud2lkdGg/e3dpZHRoOnQud2lkdGgsaGVpZ2h0Ok1hdGguZmxvb3IodC53aWR0aC9lKX06dC5oZWlnaHQ/e3dpZHRoOk1hdGguZmxvb3IodC5oZWlnaHQqZSksaGVpZ2h0OnQuaGVpZ2h0fTp7d2lkdGg6dC52aWV3Ym94LndpZHRoLGhlaWdodDp0LnZpZXdib3guaGVpZ2h0fX0ocil9dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdmciKX19fSx7fV0sNDU3OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmcyIpLGk9dCgiLi4vcmVhZFVJbnQiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9aSh0LDE2LDgsZSk7cmV0dXJuKGkodCwxNiwxMCxlKTw8MTYpK3J9ZnVuY3Rpb24gbyh0KXtpZih0Lmxlbmd0aD4yNClyZXR1cm4gdC5zbGljZSgxMil9ZS5leHBvcnRzPXtkZXRlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC50b1N0cmluZygiaGV4IiwwLDQpO3JldHVybiI0OTQ5MmEwMCI9PT1lfHwiNGQ0ZDAwMmEiPT09ZX0sY2FsY3VsYXRlOmZ1bmN0aW9uKHQsZSl7aWYoIWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGlmZiBkb2Vzbid0IHN1cHBvcnQgYnVmZmVyIik7dmFyIHM9IkJFIj09PWZ1bmN0aW9uKHQpe3ZhciBlPXQudG9TdHJpbmcoImFzY2lpIiwwLDIpO3JldHVybiJJSSI9PT1lPyJMRSI6Ik1NIj09PWU/IkJFIjp2b2lkIDB9KHQpLGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixzLGw9e307dCYmdC5sZW5ndGgmJihyPWkodCwxNiwwLGUpLG49aSh0LDE2LDIsZSkscz1pKHQsMzIsNCxlKSwwIT09cik7KTEhPT1zfHwzIT09biYmNCE9PW58fChsW3JdPWEodCxlKSksdD1vKHQpO3JldHVybiBsfShmdW5jdGlvbih0LGUsYSl7dmFyIG89aSh0LDMyLDQsYSkscz0xMDI0LGw9bi5zdGF0U3luYyhlKS5zaXplO28rcz5sJiYocz1sLW8tMTApO3ZhciBjPXIuYWxsb2MocyksdT1uLm9wZW5TeW5jKGUsInIiKTtyZXR1cm4gbi5yZWFkU3luYyh1LGMsMCxzLG8pLGMuc2xpY2UoMil9KHQsZSxzKSxzKSxjPWxbMjU2XSx1PWxbMjU3XTtpZighY3x8IXUpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBUaWZmLCBtaXNzaW5nIHRhZ3MiKTtyZXR1cm57d2lkdGg6YyxoZWlnaHQ6dX19fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiYnVmZmVyIikuQnVmZmVyKX0seyIuLi9yZWFkVUludCI6NDQ1LGJ1ZmZlcjoxMTEsZnM6MTA5fV0sNDU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZGV0ZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPSJSSUZGIj09PXQudG9TdHJpbmcoImFzY2lpIiwwLDQpLHI9IldFQlAiPT09dC50b1N0cmluZygiYXNjaWkiLDgsMTIpLG49IlZQOCI9PT10LnRvU3RyaW5nKCJhc2NpaSIsMTIsMTUpO3JldHVybiBlJiZyJiZufSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7dmFyIGU9dC50b1N0cmluZygiYXNjaWkiLDEyLDE2KTtpZih0PXQuc2xpY2UoMjAsMzApLCJWUDhYIj09PWUpe3ZhciByPXRbMF07cmV0dXJuISghKDA9PSgxOTImcikpfHwhKDA9PSgxJnIpKSkmJmZ1bmN0aW9uKHQpe3JldHVybnt3aWR0aDoxK3QucmVhZFVJbnRMRSg0LDMpLGhlaWdodDoxK3QucmVhZFVJbnRMRSg3LDMpfX0odCl9aWYoIlZQOCAiPT09ZSYmNDchPT10WzBdKXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm57d2lkdGg6MTYzODMmdC5yZWFkSW50MTZMRSg2KSxoZWlnaHQ6MTYzODMmdC5yZWFkSW50MTZMRSg4KX19KHQpO3ZhciBuPXQudG9TdHJpbmcoImhleCIsMyw2KTtyZXR1cm4iVlA4TCI9PT1lJiYiOWQwMTJhIiE9PW4mJmZ1bmN0aW9uKHQpe3JldHVybnt3aWR0aDoxKygoNjMmdFsyXSk8PDh8dFsxXSksaGVpZ2h0OjErKCgxNSZ0WzRdKTw8MTB8dFszXTw8MnwoMTkyJnRbMl0pPj42KX19KHQpfX19LHt9XSw0NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3QgZCsxIHBvaW50cyIpO3ZhciBpPXRbMF0ubGVuZ3RoO2lmKHI8PWkpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGlucHV0IGF0IGxlYXN0IGQrMSBwb2ludHMiKTt2YXIgbz10LnNsaWNlKDAsaSsxKSxzPW4uYXBwbHkodm9pZCAwLG8pO2lmKDA9PT1zKXRocm93IG5ldyBFcnJvcigiSW5wdXQgbm90IGluIGdlbmVyYWwgcG9zaXRpb24iKTtmb3IodmFyIGw9bmV3IEFycmF5KGkrMSksdT0wO3U8PWk7Kyt1KWxbdV09dTtzPDAmJihsWzBdPTEsbFsxXT0wKTt2YXIgZj1uZXcgYShsLG5ldyBBcnJheShpKzEpLCExKSxoPWYuYWRqYWNlbnQscD1uZXcgQXJyYXkoaSsyKTtmb3IodT0wO3U8PWk7Kyt1KXtmb3IodmFyIGQ9bC5zbGljZSgpLGc9MDtnPD1pOysrZylnPT09dSYmKGRbZ109LTEpO3ZhciBtPWRbMF07ZFswXT1kWzFdLGRbMV09bTt2YXIgdj1uZXcgYShkLG5ldyBBcnJheShpKzEpLCEwKTtoW3VdPXYscFt1XT12fXBbaSsxXT1mO2Zvcih1PTA7dTw9aTsrK3Upe2Q9aFt1XS52ZXJ0aWNlczt2YXIgeT1oW3VdLmFkamFjZW50O2ZvcihnPTA7Zzw9aTsrK2cpe3ZhciB4PWRbZ107aWYoeDwwKXlbZ109ZjtlbHNlIGZvcih2YXIgYj0wO2I8PWk7KytiKWhbYl0udmVydGljZXMuaW5kZXhPZih4KTwwJiYoeVtnXT1oW2JdKX19dmFyIF89bmV3IGMoaSxvLHApLHc9ISFlO2Zvcih1PWkrMTt1PHI7Kyt1KV8uaW5zZXJ0KHRbdV0sdyk7cmV0dXJuIF8uYm91bmRhcnkoKX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaW1wbGljaWFsLWNvbXBsZXgiKS5jb21wYXJlQ2VsbHM7ZnVuY3Rpb24gYSh0LGUscil7dGhpcy52ZXJ0aWNlcz10LHRoaXMuYWRqYWNlbnQ9ZSx0aGlzLmJvdW5kYXJ5PXIsdGhpcy5sYXN0VmlzaXRlZD0tMX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5jZWxsPWUsdGhpcy5pbmRleD1yfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gaSh0LnZlcnRpY2VzLGUudmVydGljZXMpfWEucHJvdG90eXBlLmZsaXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZlcnRpY2VzWzBdO3RoaXMudmVydGljZXNbMF09dGhpcy52ZXJ0aWNlc1sxXSx0aGlzLnZlcnRpY2VzWzFdPXQ7dmFyIGU9dGhpcy5hZGphY2VudFswXTt0aGlzLmFkamFjZW50WzBdPXRoaXMuYWRqYWNlbnRbMV0sdGhpcy5hZGphY2VudFsxXT1lfTt2YXIgbD1bXTtmdW5jdGlvbiBjKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10LHRoaXMudmVydGljZXM9ZSx0aGlzLnNpbXBsaWNlcz1yLHRoaXMuaW50ZXJpb3I9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LmJvdW5kYXJ5fSkpLHRoaXMudHVwbGU9bmV3IEFycmF5KHQrMSk7Zm9yKHZhciBpPTA7aTw9dDsrK2kpdGhpcy50dXBsZVtpXT10aGlzLnZlcnRpY2VzW2ldO3ZhciBhPWxbdF07YXx8KGE9bFt0XT1mdW5jdGlvbih0KXtmb3IodmFyIGU9WyJmdW5jdGlvbiBvcmllbnQoKXt2YXIgdHVwbGU9dGhpcy50dXBsZTtyZXR1cm4gdGVzdCgiXSxyPTA7cjw9dDsrK3Ipcj4wJiZlLnB1c2goIiwiKSxlLnB1c2goInR1cGxlWyIsciwiXSIpO2UucHVzaCgiKX1yZXR1cm4gb3JpZW50Iik7dmFyIGk9bmV3IEZ1bmN0aW9uKCJ0ZXN0IixlLmpvaW4oIiIpKSxhPW5bdCsxXTtyZXR1cm4gYXx8KGE9biksaShhKX0odCkpLHRoaXMub3JpZW50PWF9dmFyIHU9Yy5wcm90b3R5cGU7dS5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3k9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRpbWVuc2lvbixuPXRoaXMudmVydGljZXMubGVuZ3RoLTEsaT10aGlzLnR1cGxlLGE9dGhpcy52ZXJ0aWNlcyxvPVt0XTtmb3IodC5sYXN0VmlzaXRlZD0tbjtvLmxlbmd0aD4wOyl7KHQ9by5wb3AoKSkudmVydGljZXM7Zm9yKHZhciBzPXQuYWRqYWNlbnQsbD0wO2w8PXI7KytsKXt2YXIgYz1zW2xdO2lmKGMuYm91bmRhcnkmJiEoYy5sYXN0VmlzaXRlZDw9LW4pKXtmb3IodmFyIHU9Yy52ZXJ0aWNlcyxmPTA7Zjw9cjsrK2Ype3ZhciBoPXVbZl07aVtmXT1oPDA/ZTphW2hdfXZhciBwPXRoaXMub3JpZW50KCk7aWYocD4wKXJldHVybiBjO2MubGFzdFZpc2l0ZWQ9LW4sMD09PXAmJm8ucHVzaChjKX19fXJldHVybiBudWxsfSx1LndhbGs9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24saT10aGlzLnZlcnRpY2VzLGE9dGhpcy50dXBsZSxvPWU/dGhpcy5pbnRlcmlvci5sZW5ndGgqTWF0aC5yYW5kb20oKXwwOnRoaXMuaW50ZXJpb3IubGVuZ3RoLTEscz10aGlzLmludGVyaW9yW29dO3Q6Zm9yKDshcy5ib3VuZGFyeTspe2Zvcih2YXIgbD1zLnZlcnRpY2VzLGM9cy5hZGphY2VudCx1PTA7dTw9bjsrK3UpYVt1XT1pW2xbdV1dO3MubGFzdFZpc2l0ZWQ9cjtmb3IodT0wO3U8PW47Kyt1KXt2YXIgZj1jW3VdO2lmKCEoZi5sYXN0VmlzaXRlZD49cikpe3ZhciBoPWFbdV07YVt1XT10O3ZhciBwPXRoaXMub3JpZW50KCk7aWYoYVt1XT1oLHA8MCl7cz1mO2NvbnRpbnVlIHR9Zi5ib3VuZGFyeT9mLmxhc3RWaXNpdGVkPS1yOmYubGFzdFZpc2l0ZWQ9cn19cmV0dXJufXJldHVybiBzfSx1LmFkZFBlYWtzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxuPXRoaXMuZGltZW5zaW9uLGk9dGhpcy52ZXJ0aWNlcyxsPXRoaXMudHVwbGUsYz10aGlzLmludGVyaW9yLHU9dGhpcy5zaW1wbGljZXMsZj1bZV07ZS5sYXN0VmlzaXRlZD1yLGUudmVydGljZXNbZS52ZXJ0aWNlcy5pbmRleE9mKC0xKV09cixlLmJvdW5kYXJ5PSExLGMucHVzaChlKTtmb3IodmFyIGg9W107Zi5sZW5ndGg+MDspe3ZhciBwPShlPWYucG9wKCkpLnZlcnRpY2VzLGQ9ZS5hZGphY2VudCxnPXAuaW5kZXhPZihyKTtpZighKGc8MCkpZm9yKHZhciBtPTA7bTw9bjsrK20paWYobSE9PWcpe3ZhciB2PWRbbV07aWYodi5ib3VuZGFyeSYmISh2Lmxhc3RWaXNpdGVkPj1yKSl7dmFyIHk9di52ZXJ0aWNlcztpZih2Lmxhc3RWaXNpdGVkIT09LXIpe2Zvcih2YXIgeD0wLGI9MDtiPD1uOysrYil5W2JdPDA/KHg9YixsW2JdPXQpOmxbYl09aVt5W2JdXTtpZih0aGlzLm9yaWVudCgpPjApe3lbeF09cix2LmJvdW5kYXJ5PSExLGMucHVzaCh2KSxmLnB1c2godiksdi5sYXN0VmlzaXRlZD1yO2NvbnRpbnVlfXYubGFzdFZpc2l0ZWQ9LXJ9dmFyIF89di5hZGphY2VudCx3PXAuc2xpY2UoKSxUPWQuc2xpY2UoKSxrPW5ldyBhKHcsVCwhMCk7dS5wdXNoKGspO3ZhciBNPV8uaW5kZXhPZihlKTtpZighKE08MCkpe19bTV09ayxUW2ddPXYsd1ttXT0tMSxUW21dPWUsZFttXT1rLGsuZmxpcCgpO2ZvcihiPTA7Yjw9bjsrK2Ipe3ZhciBBPXdbYl07aWYoIShBPDB8fEE9PT1yKSl7Zm9yKHZhciBTPW5ldyBBcnJheShuLTEpLEU9MCxDPTA7Qzw9bjsrK0Mpe3ZhciBMPXdbQ107TDwwfHxDPT09Ynx8KFNbRSsrXT1MKX1oLnB1c2gobmV3IG8oUyxrLGIpKX19fX19fWguc29ydChzKTtmb3IobT0wO20rMTxoLmxlbmd0aDttKz0yKXt2YXIgST1oW21dLFA9aFttKzFdLHo9SS5pbmRleCxPPVAuaW5kZXg7ejwwfHxPPDB8fChJLmNlbGwuYWRqYWNlbnRbSS5pbmRleF09UC5jZWxsLFAuY2VsbC5hZGphY2VudFtQLmluZGV4XT1JLmNlbGwpfX0sdS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzO3IucHVzaCh0KTt2YXIgbj10aGlzLndhbGsodCxlKTtpZihuKXtmb3IodmFyIGk9dGhpcy5kaW1lbnNpb24sYT10aGlzLnR1cGxlLG89MDtvPD1pOysrbyl7dmFyIHM9bi52ZXJ0aWNlc1tvXTthW29dPXM8MD90OnJbc119dmFyIGw9dGhpcy5vcmllbnQoYSk7bDwwfHwoMCE9PWx8fChuPXRoaXMuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5KG4sdCkpKSYmdGhpcy5hZGRQZWFrcyh0LG4pfX0sdS5ib3VuZGFyeT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmRpbWVuc2lvbixlPVtdLHI9dGhpcy5zaW1wbGljZXMsbj1yLmxlbmd0aCxpPTA7aTxuOysraSl7dmFyIGE9cltpXTtpZihhLmJvdW5kYXJ5KXtmb3IodmFyIG89bmV3IEFycmF5KHQpLHM9YS52ZXJ0aWNlcyxsPTAsYz0wLHU9MDt1PD10OysrdSlzW3VdPj0wP29bbCsrXT1zW3VdOmM9MSZ1O2lmKGM9PT0oMSZ0KSl7dmFyIGY9b1swXTtvWzBdPW9bMV0sb1sxXT1mfWUucHVzaChvKX19cmV0dXJuIGV9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTQ4LCJzaW1wbGljaWFsLWNvbXBsZXgiOjU1OH1dLDQ2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGkodCxlLHIsbixpKXt0aGlzLm1pZD10LHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9cix0aGlzLmxlZnRQb2ludHM9bix0aGlzLnJpZ2h0UG9pbnRzPWksdGhpcy5jb3VudD0oZT9lLmNvdW50OjApKyhyP3IuY291bnQ6MCkrbi5sZW5ndGh9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCF0fHwwPT09dC5sZW5ndGgpcmV0dXJuIG5ldyB2KG51bGwpO3JldHVybiBuZXcgdihtKHQpKX07dmFyIGE9aS5wcm90b3R5cGU7ZnVuY3Rpb24gbyh0LGUpe3QubWlkPWUubWlkLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQubGVmdFBvaW50cz1lLmxlZnRQb2ludHMsdC5yaWdodFBvaW50cz1lLnJpZ2h0UG9pbnRzLHQuY291bnQ9ZS5jb3VudH1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9bShlKTt0Lm1pZD1yLm1pZCx0LmxlZnQ9ci5sZWZ0LHQucmlnaHQ9ci5yaWdodCx0LmxlZnRQb2ludHM9ci5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ci5yaWdodFBvaW50cyx0LmNvdW50PXIuY291bnR9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXQuaW50ZXJ2YWxzKFtdKTtyLnB1c2goZSkscyh0LHIpfWZ1bmN0aW9uIGModCxlKXt2YXIgcj10LmludGVydmFscyhbXSksbj1yLmluZGV4T2YoZSk7cmV0dXJuIG48MD8wOihyLnNwbGljZShuLDEpLHModCxyKSwxKX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZ0W25dWzBdPD1lOysrbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgtMTtuPj0wJiZ0W25dWzFdPj1lOy0tbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPWUodFtyXSk7aWYobilyZXR1cm4gbn19ZnVuY3Rpb24gcCh0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXRbMF0tZVswXTtyZXR1cm4gcnx8dFsxXS1lWzFdfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj10WzFdLWVbMV07cmV0dXJuIHJ8fHRbMF0tZVswXX1mdW5jdGlvbiBtKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCh0W3JdWzBdLHRbcl1bMV0pO2Uuc29ydChwKTt2YXIgbj1lW2UubGVuZ3RoPj4xXSxhPVtdLG89W10scz1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbD10W3JdO2xbMV08bj9hLnB1c2gobCk6bjxsWzBdP28ucHVzaChsKTpzLnB1c2gobCl9dmFyIGM9cyx1PXMuc2xpY2UoKTtyZXR1cm4gYy5zb3J0KGQpLHUuc29ydChnKSxuZXcgaShuLG0oYSksbShvKSxjLHUpfWZ1bmN0aW9uIHYodCl7dGhpcy5yb290PXR9YS5pbnRlcnZhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucHVzaC5hcHBseSh0LHRoaXMubGVmdFBvaW50cyksdGhpcy5sZWZ0JiZ0aGlzLmxlZnQuaW50ZXJ2YWxzKHQpLHRoaXMucmlnaHQmJnRoaXMucmlnaHQuaW50ZXJ2YWxzKHQpLHR9LGEuaW5zZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY291bnQtdGhpcy5sZWZ0UG9pbnRzLmxlbmd0aDtpZih0aGlzLmNvdW50Kz0xLHRbMV08dGhpcy5taWQpdGhpcy5sZWZ0PzQqKHRoaXMubGVmdC5jb3VudCsxKT4zKihlKzEpP2wodGhpcyx0KTp0aGlzLmxlZnQuaW5zZXJ0KHQpOnRoaXMubGVmdD1tKFt0XSk7ZWxzZSBpZih0WzBdPnRoaXMubWlkKXRoaXMucmlnaHQ/NCoodGhpcy5yaWdodC5jb3VudCsxKT4zKihlKzEpP2wodGhpcyx0KTp0aGlzLnJpZ2h0Lmluc2VydCh0KTp0aGlzLnJpZ2h0PW0oW3RdKTtlbHNle3ZhciByPW4uZ2UodGhpcy5sZWZ0UG9pbnRzLHQsZCksaT1uLmdlKHRoaXMucmlnaHRQb2ludHMsdCxnKTt0aGlzLmxlZnRQb2ludHMuc3BsaWNlKHIsMCx0KSx0aGlzLnJpZ2h0UG9pbnRzLnNwbGljZShpLDAsdCl9fSxhLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cztpZih0WzFdPHRoaXMubWlkKXJldHVybiB0aGlzLmxlZnQ/NCoodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApPjMqKGUtMSk/Yyh0aGlzLHQpOjI9PT0ocz10aGlzLmxlZnQucmVtb3ZlKHQpKT8odGhpcy5sZWZ0PW51bGwsdGhpcy5jb3VudC09MSwxKTooMT09PXMmJih0aGlzLmNvdW50LT0xKSxzKTowO2lmKHRbMF0+dGhpcy5taWQpcmV0dXJuIHRoaXMucmlnaHQ/NCoodGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKT4zKihlLTEpP2ModGhpcyx0KToyPT09KHM9dGhpcy5yaWdodC5yZW1vdmUodCkpPyh0aGlzLnJpZ2h0PW51bGwsdGhpcy5jb3VudC09MSwxKTooMT09PXMmJih0aGlzLmNvdW50LT0xKSxzKTowO2lmKDE9PT10aGlzLmNvdW50KXJldHVybiB0aGlzLmxlZnRQb2ludHNbMF09PT10PzI6MDtpZigxPT09dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzWzBdPT09dCl7aWYodGhpcy5sZWZ0JiZ0aGlzLnJpZ2h0KXtmb3IodmFyIHI9dGhpcyxpPXRoaXMubGVmdDtpLnJpZ2h0OylyPWksaT1pLnJpZ2h0O2lmKHI9PT10aGlzKWkucmlnaHQ9dGhpcy5yaWdodDtlbHNle3ZhciBhPXRoaXMubGVmdCxzPXRoaXMucmlnaHQ7ci5jb3VudC09aS5jb3VudCxyLnJpZ2h0PWkubGVmdCxpLmxlZnQ9YSxpLnJpZ2h0PXN9byh0aGlzLGkpLHRoaXMuY291bnQ9KHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCkrKHRoaXMucmlnaHQ/dGhpcy5yaWdodC5jb3VudDowKSt0aGlzLmxlZnRQb2ludHMubGVuZ3RofWVsc2UgdGhpcy5sZWZ0P28odGhpcyx0aGlzLmxlZnQpOm8odGhpcyx0aGlzLnJpZ2h0KTtyZXR1cm4gMX1mb3IoYT1uLmdlKHRoaXMubGVmdFBvaW50cyx0LGQpO2E8dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzW2FdWzBdPT09dFswXTsrK2EpaWYodGhpcy5sZWZ0UG9pbnRzW2FdPT09dCl7dGhpcy5jb3VudC09MSx0aGlzLmxlZnRQb2ludHMuc3BsaWNlKGEsMSk7Zm9yKHM9bi5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsZyk7czx0aGlzLnJpZ2h0UG9pbnRzLmxlbmd0aCYmdGhpcy5yaWdodFBvaW50c1tzXVsxXT09PXRbMV07KytzKWlmKHRoaXMucmlnaHRQb2ludHNbc109PT10KXJldHVybiB0aGlzLnJpZ2h0UG9pbnRzLnNwbGljZShzLDEpLDF9cmV0dXJuIDB9LGEucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHQ8dGhpcy5taWQpe2lmKHRoaXMubGVmdClpZihyPXRoaXMubGVmdC5xdWVyeVBvaW50KHQsZSkpcmV0dXJuIHI7cmV0dXJuIHUodGhpcy5sZWZ0UG9pbnRzLHQsZSl9aWYodD50aGlzLm1pZCl7dmFyIHI7aWYodGhpcy5yaWdodClpZihyPXRoaXMucmlnaHQucXVlcnlQb2ludCh0LGUpKXJldHVybiByO3JldHVybiBmKHRoaXMucmlnaHRQb2ludHMsdCxlKX1yZXR1cm4gaCh0aGlzLmxlZnRQb2ludHMsZSl9LGEucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7dmFyIG47aWYodDx0aGlzLm1pZCYmdGhpcy5sZWZ0JiYobj10aGlzLmxlZnQucXVlcnlJbnRlcnZhbCh0LGUscikpKXJldHVybiBuO2lmKGU+dGhpcy5taWQmJnRoaXMucmlnaHQmJihuPXRoaXMucmlnaHQucXVlcnlJbnRlcnZhbCh0LGUscikpKXJldHVybiBuO3JldHVybiBlPHRoaXMubWlkP3UodGhpcy5sZWZ0UG9pbnRzLGUscik6dD50aGlzLm1pZD9mKHRoaXMucmlnaHRQb2ludHMsdCxyKTpoKHRoaXMubGVmdFBvaW50cyxyKX07dmFyIHk9di5wcm90b3R5cGU7eS5pbnNlcnQ9ZnVuY3Rpb24odCl7dGhpcy5yb290P3RoaXMucm9vdC5pbnNlcnQodCk6dGhpcy5yb290PW5ldyBpKHRbMF0sbnVsbCxudWxsLFt0XSxbdF0pfSx5LnJlbW92ZT1mdW5jdGlvbih0KXtpZih0aGlzLnJvb3Qpe3ZhciBlPXRoaXMucm9vdC5yZW1vdmUodCk7cmV0dXJuIDI9PT1lJiYodGhpcy5yb290PW51bGwpLDAhPT1lfXJldHVybiExfSx5LnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeVBvaW50KHQsZSl9LHkucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7aWYodDw9ZSYmdGhpcy5yb290KXJldHVybiB0aGlzLnJvb3QucXVlcnlJbnRlcnZhbCh0LGUscil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJjb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290LmNvdW50OjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksImludGVydmFscyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290LmludGVydmFscyhbXSk6W119fSl9LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjQ2MX1dLDQ2MTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNDNdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNDN9XSw0NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxuZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWVbdFtyXV09cjtyZXR1cm4gZX19LHt9XSw0NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT1yO3JldHVybiBlfX0se31dLDQ2NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0hMH0se31dLDQ2NTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuISF0LmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih0KX0KLyohCiAqIERldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBCdWZmZXIKICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYobih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnNsaWNlJiZuKHQuc2xpY2UoMCwwKSl9KHQpfHwhIXQuX2lzQnVmZmVyKX19LHt9XSw0NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XC8vLnRlc3QobmF2aWdhdG9yLmFwcFZlcnNpb24pKX0se31dLDQ2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9YSxlLmV4cG9ydHMuaXNNb2JpbGU9YSxlLmV4cG9ydHMuZGVmYXVsdD1hO3ZhciBuPS8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllc1s0Nl0wfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm8vaSxpPS8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllc1s0Nl0wfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm98YW5kcm9pZHxpcGFkfHBsYXlib29rfHNpbGsvaTtmdW5jdGlvbiBhKHQpe3R8fCh0PXt9KTt2YXIgZT10LnVhO2lmKGV8fCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwoZT1uYXZpZ2F0b3IudXNlckFnZW50KSxlJiZlLmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgZS5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJihlPWUuaGVhZGVyc1sidXNlci1hZ2VudCJdKSwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuITE7dmFyIHI9dC50YWJsZXQ/aS50ZXN0KGUpOm4udGVzdChlKTtyZXR1cm4hciYmdC50YWJsZXQmJnQuZmVhdHVyZURldGVjdCYmbmF2aWdhdG9yJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MSYmLTEhPT1lLmluZGV4T2YoIk1hY2ludG9zaCIpJiYtMSE9PWUuaW5kZXhPZigiU2FmYXJpIikmJihyPSEwKSxyfX0se31dLDQ2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPT10JiYoIm9iamVjdCI9PT1lfHwiZnVuY3Rpb24iPT09ZSl9fSx7fV0sNDY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09bi5jYWxsKHQpJiYobnVsbD09PShlPU9iamVjdC5nZXRQcm90b3R5cGVPZih0KSl8fGU9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yoe30pKX19LHt9XSw0NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWlmKCgoZT10LmNoYXJDb2RlQXQobikpPDl8fGU+MTMpJiYzMiE9PWUmJjEzMyE9PWUmJjE2MCE9PWUmJjU3NjAhPT1lJiY2MTU4IT09ZSYmKGU8ODE5Mnx8ZT44MjA1KSYmODIzMiE9PWUmJjgyMzMhPT1lJiY4MjM5IT09ZSYmODI4NyE9PWUmJjgyODghPT1lJiYxMjI4OCE9PWUmJjY1Mjc5IT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19LHt9XSw0NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC50cmltKCksISEoL15bbXpsaHZjc3F0YV1ccypbLSsuMC05XVtebWxodnpjc3F0YV0rL2kudGVzdCh0KSYmL1tcZHpdJC9pLnRlc3QodCkmJnQubGVuZ3RoPjQpKX19LHt9XSw0NzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0KigxLXIpK2Uqcn19LHt9XSw0NzM6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9lLmV4cG9ydHM9bigpOih0PXR8fHNlbGYpLm1hcGJveGdsPW4oKX0odGhpcywoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQsZSxyO2Z1bmN0aW9uIG4obixpKXtpZih0KWlmKGUpe3ZhciBhPSJ2YXIgc2hhcmVkQ2h1bmsgPSB7fTsgKCIrdCsiKShzaGFyZWRDaHVuayk7ICgiK2UrIikoc2hhcmVkQ2h1bmspOyIsbz17fTt0KG8pLChyPWkobykpLndvcmtlclVybD13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYV0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSl9ZWxzZSBlPWk7ZWxzZSB0PWl9cmV0dXJuIG4oMCwoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0KGU9e2V4cG9ydHM6e319LGUuZXhwb3J0cyksZS5leHBvcnRzfXZhciByPW47ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLmN4PTMqdCx0aGlzLmJ4PTMqKHItdCktdGhpcy5jeCx0aGlzLmF4PTEtdGhpcy5jeC10aGlzLmJ4LHRoaXMuY3k9MyplLHRoaXMuYnk9Myoobi1lKS10aGlzLmN5LHRoaXMuYXk9MS10aGlzLmN5LXRoaXMuYnksdGhpcy5wMXg9dCx0aGlzLnAxeT1uLHRoaXMucDJ4PXIsdGhpcy5wMnk9bn1uLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKCh0aGlzLmF4KnQrdGhpcy5ieCkqdCt0aGlzLmN4KSp0fSxuLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVk9ZnVuY3Rpb24odCl7cmV0dXJuKCh0aGlzLmF5KnQrdGhpcy5ieSkqdCt0aGlzLmN5KSp0fSxuLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYPWZ1bmN0aW9uKHQpe3JldHVybigzKnRoaXMuYXgqdCsyKnRoaXMuYngpKnQrdGhpcy5jeH0sbi5wcm90b3R5cGUuc29sdmVDdXJ2ZVg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvO2Zvcih2b2lkIDA9PT1lJiYoZT0xZS02KSxpPXQsbz0wO288ODtvKyspe2lmKGE9dGhpcy5zYW1wbGVDdXJ2ZVgoaSktdCxNYXRoLmFicyhhKTxlKXJldHVybiBpO3ZhciBzPXRoaXMuc2FtcGxlQ3VydmVEZXJpdmF0aXZlWChpKTtpZihNYXRoLmFicyhzKTwxZS02KWJyZWFrO2ktPWEvc31pZigoaT10KTwocj0wKSlyZXR1cm4gcjtpZihpPihuPTEpKXJldHVybiBuO2Zvcig7cjxuOyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKSxNYXRoLmFicyhhLXQpPGUpcmV0dXJuIGk7dD5hP3I9aTpuPWksaT0uNSoobi1yKStyfXJldHVybiBpfSxuLnByb3RvdHlwZS5zb2x2ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNhbXBsZUN1cnZlWSh0aGlzLnNvbHZlQ3VydmVYKHQsZSkpfTt2YXIgaT1hO2Z1bmN0aW9uIGEodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1mdW5jdGlvbiBvKHQsZSxuLGkpe3ZhciBhPW5ldyByKHQsZSxuLGkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYS5zb2x2ZSh0KX19YS5wcm90b3R5cGU9e2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhKHRoaXMueCx0aGlzLnkpfSxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHQpfSxzdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKHQpfSxtdWx0QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0QnlQb2ludCh0KX0sZGl2QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXZCeVBvaW50KHQpfSxtdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHQodCl9LGRpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXYodCl9LHJvdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGUodCl9LHJvdGF0ZUFyb3VuZDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZCh0LGUpfSxtYXRNdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX21hdE11bHQodCl9LHVuaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl91bml0KCl9LHBlcnA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9wZXJwKCl9LHJvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKX0sbWFnOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfSxlcXVhbHM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueD09PXQueCYmdGhpcy55PT09dC55fSxkaXN0OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0U3FyKHQpKX0sZGlzdFNxcjpmdW5jdGlvbih0KXt2YXIgZT10LngtdGhpcy54LHI9dC55LXRoaXMueTtyZXR1cm4gZSplK3Iqcn0sYW5nbGU6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLnksdGhpcy54KX0sYW5nbGVUbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLnktdC55LHRoaXMueC10LngpfSxhbmdsZVdpdGg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYW5nbGVXaXRoU2VwKHQueCx0LnkpfSxhbmdsZVdpdGhTZXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLngqZS10aGlzLnkqdCx0aGlzLngqdCt0aGlzLnkqZSl9LF9tYXRNdWx0OmZ1bmN0aW9uKHQpe3ZhciBlPXRbMl0qdGhpcy54K3RbM10qdGhpcy55O3JldHVybiB0aGlzLng9dFswXSp0aGlzLngrdFsxXSp0aGlzLnksdGhpcy55PWUsdGhpc30sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sX3N1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sX211bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc30sX2RpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxfbXVsdEJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9LF9kaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfSxfdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXYodGhpcy5tYWcoKSksdGhpc30sX3BlcnA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnk7cmV0dXJuIHRoaXMueT10aGlzLngsdGhpcy54PS10LHRoaXN9LF9yb3RhdGU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KSxuPXIqdGhpcy54K2UqdGhpcy55O3JldHVybiB0aGlzLng9ZSp0aGlzLngtcip0aGlzLnksdGhpcy55PW4sdGhpc30sX3JvdGF0ZUFyb3VuZDpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT1lLnkrbioodGhpcy54LWUueCkrcioodGhpcy55LWUueSk7cmV0dXJuIHRoaXMueD1lLngrcioodGhpcy54LWUueCktbioodGhpcy55LWUueSksdGhpcy55PWksdGhpc30sX3JvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfX0sYS5jb252ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYT90OkFycmF5LmlzQXJyYXkodCk/bmV3IGEodFswXSx0WzFdKTp0fTt2YXIgcz1vKC4yNSwuMSwuMjUsMSk7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgoZSx0KSl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49ci1lLGk9KCh0LWUpJW4rbiklbitlO3JldHVybiBpPT09ZT9yOml9ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO2Zvcih2YXIgbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07Zm9yKHZhciBvIGluIGEpdFtvXT1hW29dfXJldHVybiB0fXZhciBmPTE7ZnVuY3Rpb24gaCgpe3JldHVybiBmKyt9ZnVuY3Rpb24gcCgpe3JldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlPyhlXjE2Kk1hdGgucmFuZG9tKCk+PmUvNCkudG9TdHJpbmcoMTYpOihbMWU3XSstWzFlM10rLTRlMystOGUzKy0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLHQpfSgpfWZ1bmN0aW9uIGQodCl7cmV0dXJuISF0JiYvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVs0XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfSQvaS50ZXN0KHQpfWZ1bmN0aW9uIGcodCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF0mJihlW3RdPWVbdF0uYmluZChlKSl9KSl9ZnVuY3Rpb24gbSh0LGUpe3JldHVybi0xIT09dC5pbmRleE9mKGUsdC5sZW5ndGgtZS5sZW5ndGgpfWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0KW5baV09ZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpO3JldHVybiBufWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0KWUuY2FsbChyfHx0aGlzLHRbaV0saSx0KSYmKG5baV09dFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Lm1hcCh4KToib2JqZWN0Ij09dHlwZW9mIHQmJnQ/dih0LHgpOnR9dmFyIGI9e307ZnVuY3Rpb24gXyh0KXtiW3RdfHwoInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4odCksYlt0XT0hMCl9ZnVuY3Rpb24gdyh0LGUscil7cmV0dXJuKHIueS10LnkpKihlLngtdC54KT4oZS55LXQueSkqKHIueC10LngpfWZ1bmN0aW9uIFQodCl7Zm9yKHZhciBlPTAscj0wLG49dC5sZW5ndGgsaT1uLTEsYT12b2lkIDAsbz12b2lkIDA7cjxuO2k9cisrKWUrPSgobz10W2ldKS54LShhPXRbcl0pLngpKihhLnkrby55KTtyZXR1cm4gZX1mdW5jdGlvbiBrKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGV9ZnVuY3Rpb24gTSh0KXt2YXIgZT17fTtpZih0LnJlcGxhY2UoLyg/Ol58KD86XHMqXCxccyopKShbXlx4MDAtXHgyMFwoXCk8PkBcLDtcOlxcIlwvXFtcXVw/XD1ce1x9XHg3Rl0rKSg/Olw9KD86KFteXHgwMC1ceDIwXChcKTw+QFwsO1w6XFwiXC9cW1xdXD9cPVx7XH1ceDdGXSspfCg/OlwiKCg/OlteIlxcXXxcXC4pKilcIikpKT8vZywoZnVuY3Rpb24odCxyLG4saSl7dmFyIGE9bnx8aTtyZXR1cm4gZVtyXT0hYXx8YS50b0xvd2VyQ2FzZSgpLCIifSkpLGVbIm1heC1hZ2UiXSl7dmFyIHI9cGFyc2VJbnQoZVsibWF4LWFnZSJdLDEwKTtpc05hTihyKT9kZWxldGUgZVsibWF4LWFnZSJdOmVbIm1heC1hZ2UiXT1yfXJldHVybiBlfXZhciBBPW51bGw7ZnVuY3Rpb24gUyh0KXtpZihudWxsPT1BKXt2YXIgZT10Lm5hdmlnYXRvcj90Lm5hdmlnYXRvci51c2VyQWdlbnQ6bnVsbDtBPSEhdC5zYWZhcml8fCEoIWV8fCEoL1xiKGlQYWR8aVBob25lfGlQb2QpXGIvLnRlc3QoZSl8fGUubWF0Y2goIlNhZmFyaSIpJiYhZS5tYXRjaCgiQ2hyb21lIikpKX1yZXR1cm4gQX1mdW5jdGlvbiBFKHQpe3RyeXt2YXIgZT1zZWxmW3RdO3JldHVybiBlLnNldEl0ZW0oIl9tYXBib3hfdGVzdF8iLDEpLGUucmVtb3ZlSXRlbSgiX21hcGJveF90ZXN0XyIpLCEwfWNhdGNoKHQpe3JldHVybiExfX12YXIgQyxMLEksUCx6PXNlbGYucGVyZm9ybWFuY2UmJnNlbGYucGVyZm9ybWFuY2Uubm93P3NlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQoc2VsZi5wZXJmb3JtYW5jZSk6RGF0ZS5ub3cuYmluZChEYXRlKSxPPXNlbGYucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxzZWxmLm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8c2VsZi53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHNlbGYubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsRD1zZWxmLmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxzZWxmLm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lfHxzZWxmLndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lfHxzZWxmLm1zQ2FuY2VsQW5pbWF0aW9uRnJhbWUsUj17bm93OnosZnJhbWU6ZnVuY3Rpb24odCl7dmFyIGU9Tyh0KTtyZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7cmV0dXJuIEQoZSl9fX0sZ2V0SW1hZ2VEYXRhOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dmFyIHI9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuPXIuZ2V0Q29udGV4dCgiMmQiKTtpZighbil0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBjcmVhdGUgY2FudmFzIDJkIGNvbnRleHQiKTtyZXR1cm4gci53aWR0aD10LndpZHRoLHIuaGVpZ2h0PXQuaGVpZ2h0LG4uZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLG4uZ2V0SW1hZ2VEYXRhKC1lLC1lLHQud2lkdGgrMiplLHQuaGVpZ2h0KzIqZSl9LHJlc29sdmVVUkw6ZnVuY3Rpb24odCl7cmV0dXJuIEN8fChDPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSxDLmhyZWY9dCxDLmhyZWZ9LGhhcmR3YXJlQ29uY3VycmVuY3k6c2VsZi5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeXx8NCxnZXQgZGV2aWNlUGl4ZWxSYXRpbygpe3JldHVybiBzZWxmLmRldmljZVBpeGVsUmF0aW99LGdldCBwcmVmZXJzUmVkdWNlZE1vdGlvbigpe3JldHVybiEhc2VsZi5tYXRjaE1lZGlhJiYobnVsbD09TCYmKEw9c2VsZi5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpKSxMLm1hdGNoZXMpfX0sRj17QVBJX1VSTDoiaHR0cHM6Ly9hcGkubWFwYm94LmNvbSIsZ2V0IEVWRU5UU19VUkwoKXtyZXR1cm4gdGhpcy5BUElfVVJMPzA9PT10aGlzLkFQSV9VUkwuaW5kZXhPZigiaHR0cHM6Ly9hcGkubWFwYm94LmNuIik/Imh0dHBzOi8vZXZlbnRzLm1hcGJveC5jbi9ldmVudHMvdjIiOjA9PT10aGlzLkFQSV9VUkwuaW5kZXhPZigiaHR0cHM6Ly9hcGkubWFwYm94LmNvbSIpPyJodHRwczovL2V2ZW50cy5tYXBib3guY29tL2V2ZW50cy92MiI6bnVsbDpudWxsfSxGRUVEQkFDS19VUkw6Imh0dHBzOi8vYXBwcy5tYXBib3guY29tL2ZlZWRiYWNrIixSRVFVSVJFX0FDQ0VTU19UT0tFTjohMCxBQ0NFU1NfVE9LRU46bnVsbCxNQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFM6MTZ9LEI9e3N1cHBvcnRlZDohMSx0ZXN0U3VwcG9ydDpmdW5jdGlvbih0KXshTiYmUCYmKGo/VSh0KTpJPXQpfX0sTj0hMSxqPSExO2Z1bmN0aW9uIFUodCl7dmFyIGU9dC5jcmVhdGVUZXh0dXJlKCk7dC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZSk7dHJ5e2lmKHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LlJHQkEsdC5SR0JBLHQuVU5TSUdORURfQllURSxQKSx0LmlzQ29udGV4dExvc3QoKSlyZXR1cm47Qi5zdXBwb3J0ZWQ9ITB9Y2F0Y2godCl7fXQuZGVsZXRlVGV4dHVyZShlKSxOPSEwfXNlbGYuZG9jdW1lbnQmJigoUD1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpKS5vbmxvYWQ9ZnVuY3Rpb24oKXtJJiZVKEkpLEk9bnVsbCxqPSEwfSxQLm9uZXJyb3I9ZnVuY3Rpb24oKXtOPSEwLEk9bnVsbH0sUC5zcmM9ImRhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1JoNEFBQUJYUlVKUVZsQTRUQkVBQUFBdkFRQUFBQWZRLy83M3YvK0JpT2gvQUFBPSIpO3ZhciBWPSIwMSIscT1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zZm9ybVJlcXVlc3RGbj10LHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuPWUsdGhpcy5fY3JlYXRlU2t1VG9rZW4oKX07ZnVuY3Rpb24gSCh0KXtyZXR1cm4gMD09PXQuaW5kZXhPZigibWFwYm94OiIpfXEucHJvdG90eXBlLl9jcmVhdGVTa3VUb2tlbj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSIiLGU9MDtlPDEwO2UrKyl0Kz0iMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiW01hdGguZmxvb3IoNjIqTWF0aC5yYW5kb20oKSldO3JldHVybnt0b2tlbjpbIjEiLFYsdF0uam9pbigiIiksdG9rZW5FeHBpcmVzQXQ6RGF0ZS5ub3coKSs0MzJlNX19KCk7dGhpcy5fc2t1VG9rZW49dC50b2tlbix0aGlzLl9za3VUb2tlbkV4cGlyZXNBdD10LnRva2VuRXhwaXJlc0F0fSxxLnByb3RvdHlwZS5faXNTa3VUb2tlbkV4cGlyZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKT50aGlzLl9za3VUb2tlbkV4cGlyZXNBdH0scS5wcm90b3R5cGUudHJhbnNmb3JtUmVxdWVzdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4mJnRoaXMuX3RyYW5zZm9ybVJlcXVlc3RGbih0LGUpfHx7dXJsOnR9fSxxLnByb3RvdHlwZS5ub3JtYWxpemVTdHlsZVVSTD1mdW5jdGlvbih0LGUpe2lmKCFIKHQpKXJldHVybiB0O3ZhciByPVgodCk7cmV0dXJuIHIucGF0aD0iL3N0eWxlcy92MSIrci5wYXRoLHRoaXMuX21ha2VBUElVUkwocix0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8ZSl9LHEucHJvdG90eXBlLm5vcm1hbGl6ZUdseXBoc1VSTD1mdW5jdGlvbih0LGUpe2lmKCFIKHQpKXJldHVybiB0O3ZhciByPVgodCk7cmV0dXJuIHIucGF0aD0iL2ZvbnRzL3YxIityLnBhdGgsdGhpcy5fbWFrZUFQSVVSTChyLHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VufHxlKX0scS5wcm90b3R5cGUubm9ybWFsaXplU291cmNlVVJMPWZ1bmN0aW9uKHQsZSl7aWYoIUgodCkpcmV0dXJuIHQ7dmFyIHI9WCh0KTtyZXR1cm4gci5wYXRoPSIvdjQvIityLmF1dGhvcml0eSsiLmpzb24iLHIucGFyYW1zLnB1c2goInNlY3VyZSIpLHRoaXMuX21ha2VBUElVUkwocix0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8ZSl9LHEucHJvdG90eXBlLm5vcm1hbGl6ZVNwcml0ZVVSTD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1YKHQpO3JldHVybiBIKHQpPyhpLnBhdGg9Ii9zdHlsZXMvdjEiK2kucGF0aCsiL3Nwcml0ZSIrZStyLHRoaXMuX21ha2VBUElVUkwoaSx0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8bikpOihpLnBhdGgrPSIiK2UrcixaKGkpKX0scS5wcm90b3R5cGUubm9ybWFsaXplVGlsZVVSTD1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX2lzU2t1VG9rZW5FeHBpcmVkKCkmJnRoaXMuX2NyZWF0ZVNrdVRva2VuKCksdCYmIUgodCkpcmV0dXJuIHQ7dmFyIHI9WCh0KTtyLnBhdGg9ci5wYXRoLnJlcGxhY2UoLyhcLihwbmd8anBnKVxkKikoPz0kKS8sKFIuZGV2aWNlUGl4ZWxSYXRpbz49Mnx8NTEyPT09ZT8iQDJ4IjoiIikrKEIuc3VwcG9ydGVkPyIud2VicCI6IiQxIikpLHIucGF0aD1yLnBhdGgucmVwbGFjZSgvXi4rXC92NFwvLywiLyIpLHIucGF0aD0iL3Y0IityLnBhdGg7dmFyIG49dGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0ubWF0Y2goL15hY2Nlc3NfdG9rZW49KC4qKSQvKTtpZihuKXJldHVybiBuWzFdfXJldHVybiBudWxsfShyLnBhcmFtcyl8fEYuQUNDRVNTX1RPS0VOO3JldHVybiBGLlJFUVVJUkVfQUNDRVNTX1RPS0VOJiZuJiZ0aGlzLl9za3VUb2tlbiYmci5wYXJhbXMucHVzaCgic2t1PSIrdGhpcy5fc2t1VG9rZW4pLHRoaXMuX21ha2VBUElVUkwocixuKX0scS5wcm90b3R5cGUuY2Fub25pY2FsaXplVGlsZVVSTD1mdW5jdGlvbih0LGUpe3ZhciByPVgodCk7aWYoIXIucGF0aC5tYXRjaCgvKF5cL3Y0XC8pLyl8fCFyLnBhdGgubWF0Y2goL1wuW1x3XSskLykpcmV0dXJuIHQ7dmFyIG49Im1hcGJveDovL3RpbGVzLyI7bis9ci5wYXRoLnJlcGxhY2UoIi92NC8iLCIiKTt2YXIgaT1yLnBhcmFtcztyZXR1cm4gZSYmKGk9aS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0Lm1hdGNoKC9eYWNjZXNzX3Rva2VuPS8pfSkpKSxpLmxlbmd0aCYmKG4rPSI/IitpLmpvaW4oIiYiKSksbn0scS5wcm90b3R5cGUuY2Fub25pY2FsaXplVGlsZXNldD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0hIWUmJkgoZSksbj1bXSxpPTAsYT10LnRpbGVzfHxbXTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07WShvKT9uLnB1c2godGhpcy5jYW5vbmljYWxpemVUaWxlVVJMKG8scikpOm4ucHVzaChvKX1yZXR1cm4gbn0scS5wcm90b3R5cGUuX21ha2VBUElVUkw9ZnVuY3Rpb24odCxlKXt2YXIgcj0iU2VlIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYXBpLWRvY3VtZW50YXRpb24vI2FjY2Vzcy10b2tlbnMtYW5kLXRva2VuLXNjb3BlcyIsbj1YKEYuQVBJX1VSTCk7aWYodC5wcm90b2NvbD1uLnByb3RvY29sLHQuYXV0aG9yaXR5PW4uYXV0aG9yaXR5LCIvIiE9PW4ucGF0aCYmKHQucGF0aD0iIituLnBhdGgrdC5wYXRoKSwhRi5SRVFVSVJFX0FDQ0VTU19UT0tFTilyZXR1cm4gWih0KTtpZighKGU9ZXx8Ri5BQ0NFU1NfVE9LRU4pKXRocm93IG5ldyBFcnJvcigiQW4gQVBJIGFjY2VzcyB0b2tlbiBpcyByZXF1aXJlZCB0byB1c2UgTWFwYm94IEdMLiAiK3IpO2lmKCJzIj09PWVbMF0pdGhyb3cgbmV3IEVycm9yKCJVc2UgYSBwdWJsaWMgYWNjZXNzIHRva2VuIChway4qKSB3aXRoIE1hcGJveCBHTCwgbm90IGEgc2VjcmV0IGFjY2VzcyB0b2tlbiAoc2suKikuICIrcik7cmV0dXJuIHQucGFyYW1zPXQucGFyYW1zLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10LmluZGV4T2YoImFjY2Vzc190b2tlbiIpfSkpLHQucGFyYW1zLnB1c2goImFjY2Vzc190b2tlbj0iK2UpLFoodCl9O3ZhciBHPS9eKChodHRwcz86KT9cL1wvKT8oW15cL10rXC4pP21hcGJveFwuYyhufG9tKShcL3xcP3wkKS9pO2Z1bmN0aW9uIFkodCl7cmV0dXJuIEcudGVzdCh0KX12YXIgVz0vXihcdyspOlwvXC8oW14vP10qKShcL1teP10rKT9cPz8oLispPy87ZnVuY3Rpb24gWCh0KXt2YXIgZT10Lm1hdGNoKFcpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHBhcnNlIFVSTCBvYmplY3QiKTtyZXR1cm57cHJvdG9jb2w6ZVsxXSxhdXRob3JpdHk6ZVsyXSxwYXRoOmVbM118fCIvIixwYXJhbXM6ZVs0XT9lWzRdLnNwbGl0KCImIik6W119fWZ1bmN0aW9uIFoodCl7dmFyIGU9dC5wYXJhbXMubGVuZ3RoPyI/Iit0LnBhcmFtcy5qb2luKCImIik6IiI7cmV0dXJuIHQucHJvdG9jb2wrIjovLyIrdC5hdXRob3JpdHkrdC5wYXRoK2V9ZnVuY3Rpb24gSih0KXtpZighdClyZXR1cm4gbnVsbDt2YXIgZT10LnNwbGl0KCIuIik7aWYoIWV8fDMhPT1lLmxlbmd0aClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHNlbGYuYXRvYihlWzFdKS5zcGxpdCgiIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iJSIrKCIwMCIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfSkpLmpvaW4oIiIpKSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fXZhciBLPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT10LHRoaXMuYW5vbklkPW51bGwsdGhpcy5ldmVudERhdGE9e30sdGhpcy5xdWV1ZT1bXSx0aGlzLnBlbmRpbmdSZXF1ZXN0PW51bGx9O0sucHJvdG90eXBlLmdldFN0b3JhZ2VLZXk9ZnVuY3Rpb24odCl7dmFyIGUscj1KKEYuQUNDRVNTX1RPS0VOKTtyZXR1cm4gZT1yJiZyLnU/c2VsZi5idG9hKGVuY29kZVVSSUNvbXBvbmVudChyLnUpLnJlcGxhY2UoLyUoWzAtOUEtRl17Mn0pL2csKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyKCIweCIrZSkpfSkpKTpGLkFDQ0VTU19UT0tFTnx8IiIsdD8ibWFwYm94LmV2ZW50RGF0YS4iK3QrIjoiK2U6Im1hcGJveC5ldmVudERhdGE6IitlfSxLLnByb3RvdHlwZS5mZXRjaEV2ZW50RGF0YT1mdW5jdGlvbigpe3ZhciB0PUUoImxvY2FsU3RvcmFnZSIpLGU9dGhpcy5nZXRTdG9yYWdlS2V5KCkscj10aGlzLmdldFN0b3JhZ2VLZXkoInV1aWQiKTtpZih0KXRyeXt2YXIgbj1zZWxmLmxvY2FsU3RvcmFnZS5nZXRJdGVtKGUpO24mJih0aGlzLmV2ZW50RGF0YT1KU09OLnBhcnNlKG4pKTt2YXIgaT1zZWxmLmxvY2FsU3RvcmFnZS5nZXRJdGVtKHIpO2kmJih0aGlzLmFub25JZD1pKX1jYXRjaCh0KXtfKCJVbmFibGUgdG8gcmVhZCBmcm9tIExvY2FsU3RvcmFnZSIpfX0sSy5wcm90b3R5cGUuc2F2ZUV2ZW50RGF0YT1mdW5jdGlvbigpe3ZhciB0PUUoImxvY2FsU3RvcmFnZSIpLGU9dGhpcy5nZXRTdG9yYWdlS2V5KCkscj10aGlzLmdldFN0b3JhZ2VLZXkoInV1aWQiKTtpZih0KXRyeXtzZWxmLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHIsdGhpcy5hbm9uSWQpLE9iamVjdC5rZXlzKHRoaXMuZXZlbnREYXRhKS5sZW5ndGg+PTEmJnNlbGYubG9jYWxTdG9yYWdlLnNldEl0ZW0oZSxKU09OLnN0cmluZ2lmeSh0aGlzLmV2ZW50RGF0YSkpfWNhdGNoKHQpe18oIlVuYWJsZSB0byB3cml0ZSB0byBMb2NhbFN0b3JhZ2UiKX19LEsucHJvdG90eXBlLnByb2Nlc3NSZXF1ZXN0cz1mdW5jdGlvbih0KXt9LEsucHJvdG90eXBlLnBvc3RFdmVudD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO2lmKEYuRVZFTlRTX1VSTCl7dmFyIGE9WChGLkVWRU5UU19VUkwpO2EucGFyYW1zLnB1c2goImFjY2Vzc190b2tlbj0iKyhufHxGLkFDQ0VTU19UT0tFTnx8IiIpKTt2YXIgbz17ZXZlbnQ6dGhpcy50eXBlLGNyZWF0ZWQ6bmV3IERhdGUodCkudG9JU09TdHJpbmcoKSxzZGtJZGVudGlmaWVyOiJtYXBib3gtZ2wtanMiLHNka1ZlcnNpb246IjEuMTAuMSIsc2t1SWQ6Vix1c2VySWQ6dGhpcy5hbm9uSWR9LHM9ZT91KG8sZSk6byxsPXt1cmw6WihhKSxoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoW3NdKX07dGhpcy5wZW5kaW5nUmVxdWVzdD14dChsLChmdW5jdGlvbih0KXtpLnBlbmRpbmdSZXF1ZXN0PW51bGwscih0KSxpLnNhdmVFdmVudERhdGEoKSxpLnByb2Nlc3NSZXF1ZXN0cyhuKX0pKX19LEsucHJvdG90eXBlLnF1ZXVlUmVxdWVzdD1mdW5jdGlvbih0LGUpe3RoaXMucXVldWUucHVzaCh0KSx0aGlzLnByb2Nlc3NSZXF1ZXN0cyhlKX07dmFyIFEsJCx0dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5jYWxsKHRoaXMsIm1hcC5sb2FkIiksdGhpcy5zdWNjZXNzPXt9LHRoaXMuc2t1VG9rZW49IiJ9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zdE1hcExvYWRFdmVudD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnNrdVRva2VuPXIsKEYuRVZFTlRTX1VSTCYmbnx8Ri5BQ0NFU1NfVE9LRU4mJkFycmF5LmlzQXJyYXkodCkmJnQuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIEgodCl8fFkodCl9KSkpJiZ0aGlzLnF1ZXVlUmVxdWVzdCh7aWQ6ZSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0sbil9LGUucHJvdG90eXBlLnByb2Nlc3NSZXF1ZXN0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0aGlzLnBlbmRpbmdSZXF1ZXN0JiYwIT09dGhpcy5xdWV1ZS5sZW5ndGgpe3ZhciByPXRoaXMucXVldWUuc2hpZnQoKSxuPXIuaWQsaT1yLnRpbWVzdGFtcDtuJiZ0aGlzLnN1Y2Nlc3Nbbl18fCh0aGlzLmFub25JZHx8dGhpcy5mZXRjaEV2ZW50RGF0YSgpLGQodGhpcy5hbm9uSWQpfHwodGhpcy5hbm9uSWQ9cCgpKSx0aGlzLnBvc3RFdmVudChpLHtza3VUb2tlbjp0aGlzLnNrdVRva2VufSwoZnVuY3Rpb24odCl7dHx8biYmKGUuc3VjY2Vzc1tuXT0hMCl9KSx0KSl9fSxlfShLKSxldD1uZXcoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcywiYXBwVXNlclR1cm5zdGlsZSIpLHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuPWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zdFR1cm5zdGlsZUV2ZW50PWZ1bmN0aW9uKHQsZSl7Ri5FVkVOVFNfVVJMJiZGLkFDQ0VTU19UT0tFTiYmQXJyYXkuaXNBcnJheSh0KSYmdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gSCh0KXx8WSh0KX0pKSYmdGhpcy5xdWV1ZVJlcXVlc3QoRGF0ZS5ub3coKSxlKX0sZS5wcm90b3R5cGUucHJvY2Vzc1JlcXVlc3RzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMucGVuZGluZ1JlcXVlc3QmJjAhPT10aGlzLnF1ZXVlLmxlbmd0aCl7dGhpcy5hbm9uSWQmJnRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzJiZ0aGlzLmV2ZW50RGF0YS50b2tlblV8fHRoaXMuZmV0Y2hFdmVudERhdGEoKTt2YXIgcj1KKEYuQUNDRVNTX1RPS0VOKSxuPXI/ci51OkYuQUNDRVNTX1RPS0VOLGk9biE9PXRoaXMuZXZlbnREYXRhLnRva2VuVTtkKHRoaXMuYW5vbklkKXx8KHRoaXMuYW5vbklkPXAoKSxpPSEwKTt2YXIgYT10aGlzLnF1ZXVlLnNoaWZ0KCk7aWYodGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3Mpe3ZhciBvPW5ldyBEYXRlKHRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKSxzPW5ldyBEYXRlKGEpLGw9KGEtdGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MpLzg2NGU1O2k9aXx8bD49MXx8bDwtMXx8by5nZXREYXRlKCkhPT1zLmdldERhdGUoKX1lbHNlIGk9ITA7aWYoIWkpcmV0dXJuIHRoaXMucHJvY2Vzc1JlcXVlc3RzKCk7dGhpcy5wb3N0RXZlbnQoYSx7ImVuYWJsZWQudGVsZW1ldHJ5IjohMX0sKGZ1bmN0aW9uKHQpe3R8fChlLmV2ZW50RGF0YS5sYXN0U3VjY2Vzcz1hLGUuZXZlbnREYXRhLnRva2VuVT1uKX0pLHQpfX0sZX0oSykpLHJ0PWV0LnBvc3RUdXJuc3RpbGVFdmVudC5iaW5kKGV0KSxudD1uZXcgdHQsaXQ9bnQucG9zdE1hcExvYWRFdmVudC5iaW5kKG50KSxhdD01MDAsb3Q9NTA7ZnVuY3Rpb24gc3QoKXtzZWxmLmNhY2hlcyYmIVEmJihRPXNlbGYuY2FjaGVzLm9wZW4oIm1hcGJveC10aWxlcyIpKX1mdW5jdGlvbiBsdCh0KXt2YXIgZT10LmluZGV4T2YoIj8iKTtyZXR1cm4gZTwwP3Q6dC5zbGljZSgwLGUpfXZhciBjdCx1dD0xLzA7ZnVuY3Rpb24gZnQoKXtyZXR1cm4gbnVsbD09Y3QmJihjdD1zZWxmLk9mZnNjcmVlbkNhbnZhcyYmbmV3IHNlbGYuT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKSYmImZ1bmN0aW9uIj09dHlwZW9mIHNlbGYuY3JlYXRlSW1hZ2VCaXRtYXApLGN0fXZhciBodD17VW5rbm93bjoiVW5rbm93biIsU3R5bGU6IlN0eWxlIixTb3VyY2U6IlNvdXJjZSIsVGlsZToiVGlsZSIsR2x5cGhzOiJHbHlwaHMiLFNwcml0ZUltYWdlOiJTcHJpdGVJbWFnZSIsU3ByaXRlSlNPTjoiU3ByaXRlSlNPTiIsSW1hZ2U6IkltYWdlIn07ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5mcmVlemUmJk9iamVjdC5mcmVlemUoaHQpO3ZhciBwdCxkdCxndD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXs0MDE9PT1yJiZZKG4pJiYoZSs9IjogeW91IG1heSBoYXZlIHByb3ZpZGVkIGFuIGludmFsaWQgTWFwYm94IGFjY2VzcyB0b2tlbi4gU2VlIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYXBpLWRvY3VtZW50YXRpb24vI2FjY2Vzcy10b2tlbnMtYW5kLXRva2VuLXNjb3BlcyIpLHQuY2FsbCh0aGlzLGUpLHRoaXMuc3RhdHVzPXIsdGhpcy51cmw9bix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMubWVzc2FnZT1lfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSsiOiAiK3RoaXMubWVzc2FnZSsiICgiK3RoaXMuc3RhdHVzKyIpOiAiK3RoaXMudXJsfSxlfShFcnJvciksbXQ9aygpP2Z1bmN0aW9uKCl7cmV0dXJuIHNlbGYud29ya2VyJiZzZWxmLndvcmtlci5yZWZlcnJlcn06ZnVuY3Rpb24oKXtyZXR1cm4oImJsb2I6Ij09PXNlbGYubG9jYXRpb24ucHJvdG9jb2w/c2VsZi5wYXJlbnQ6c2VsZikubG9jYXRpb24uaHJlZn0sdnQ9ZnVuY3Rpb24odCxlKXtpZighKC9eZmlsZTovLnRlc3Qocj10LnVybCl8fC9eZmlsZTovLnRlc3QobXQoKSkmJiEvXlx3KzovLnRlc3QocikpKXtpZihzZWxmLmZldGNoJiZzZWxmLlJlcXVlc3QmJnNlbGYuQWJvcnRDb250cm9sbGVyJiZzZWxmLlJlcXVlc3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJzaWduYWwiKSlyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcixuPW5ldyBzZWxmLkFib3J0Q29udHJvbGxlcixpPW5ldyBzZWxmLlJlcXVlc3QodC51cmwse21ldGhvZDp0Lm1ldGhvZHx8IkdFVCIsYm9keTp0LmJvZHksY3JlZGVudGlhbHM6dC5jcmVkZW50aWFscyxoZWFkZXJzOnQuaGVhZGVycyxyZWZlcnJlcjptdCgpLHNpZ25hbDpuLnNpZ25hbH0pLGE9ITEsbz0hMSxzPShyPWkudXJsKS5pbmRleE9mKCJza3U9Iik+MCYmWShyKTsianNvbiI9PT10LnR5cGUmJmkuaGVhZGVycy5zZXQoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24iKTt2YXIgbD1mdW5jdGlvbihyLG4sYSl7aWYoIW8pe2lmKHImJiJTZWN1cml0eUVycm9yIiE9PXIubWVzc2FnZSYmXyhyKSxuJiZhKXJldHVybiBjKG4pO3ZhciBsPURhdGUubm93KCk7c2VsZi5mZXRjaChpKS50aGVuKChmdW5jdGlvbihyKXtpZihyLm9rKXt2YXIgbj1zP3IuY2xvbmUoKTpudWxsO3JldHVybiBjKHIsbixsKX1yZXR1cm4gZShuZXcgZ3Qoci5zdGF0dXNUZXh0LHIuc3RhdHVzLHQudXJsKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpezIwIT09dC5jb2RlJiZlKG5ldyBFcnJvcih0Lm1lc3NhZ2UpKX0pKX19LGM9ZnVuY3Rpb24ocixuLHMpeygiYXJyYXlCdWZmZXIiPT09dC50eXBlP3IuYXJyYXlCdWZmZXIoKToianNvbiI9PT10LnR5cGU/ci5qc29uKCk6ci50ZXh0KCkpLnRoZW4oKGZ1bmN0aW9uKHQpe298fChuJiZzJiZmdW5jdGlvbih0LGUscil7aWYoc3QoKSxRKXt2YXIgbj17c3RhdHVzOmUuc3RhdHVzLHN0YXR1c1RleHQ6ZS5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IHNlbGYuSGVhZGVyc307ZS5oZWFkZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uaGVhZGVycy5zZXQoZSx0KX0pKTt2YXIgaT1NKGUuaGVhZGVycy5nZXQoIkNhY2hlLUNvbnRyb2wiKXx8IiIpO2lbIm5vLXN0b3JlIl18fChpWyJtYXgtYWdlIl0mJm4uaGVhZGVycy5zZXQoIkV4cGlyZXMiLG5ldyBEYXRlKHIrMWUzKmlbIm1heC1hZ2UiXSkudG9VVENTdHJpbmcoKSksbmV3IERhdGUobi5oZWFkZXJzLmdldCgiRXhwaXJlcyIpKS5nZXRUaW1lKCktcjw0MmU0fHxmdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PSQpdHJ5e25ldyBSZXNwb25zZShuZXcgUmVhZGFibGVTdHJlYW0pLCQ9ITB9Y2F0Y2godCl7JD0hMX0kP2UodC5ib2R5KTp0LmJsb2IoKS50aGVuKGUpfShlLChmdW5jdGlvbihlKXt2YXIgcj1uZXcgc2VsZi5SZXNwb25zZShlLG4pO3N0KCksUSYmUS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXQobHQodC51cmwpLHIpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyZXR1cm4gXyh0Lm1lc3NhZ2UpfSkpfSkpKX19KGksbixzKSxhPSEwLGUobnVsbCx0LHIuaGVhZGVycy5nZXQoIkNhY2hlLUNvbnRyb2wiKSxyLmhlYWRlcnMuZ2V0KCJFeHBpcmVzIikpKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7b3x8ZShuZXcgRXJyb3IodC5tZXNzYWdlKSl9KSl9O3JldHVybiBzP2Z1bmN0aW9uKHQsZSl7aWYoc3QoKSwhUSlyZXR1cm4gZShudWxsKTt2YXIgcj1sdCh0LnVybCk7US50aGVuKChmdW5jdGlvbih0KXt0Lm1hdGNoKHIpLnRoZW4oKGZ1bmN0aW9uKG4pe3ZhciBpPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO3ZhciBlPW5ldyBEYXRlKHQuaGVhZGVycy5nZXQoIkV4cGlyZXMiKXx8MCkscj1NKHQuaGVhZGVycy5nZXQoIkNhY2hlLUNvbnRyb2wiKXx8IiIpO3JldHVybiBlPkRhdGUubm93KCkmJiFyWyJuby1jYWNoZSJdfShuKTt0LmRlbGV0ZShyKSxpJiZ0LnB1dChyLG4uY2xvbmUoKSksZShudWxsLG4saSl9KSkuY2F0Y2goZSl9KSkuY2F0Y2goZSl9KGksbCk6bChudWxsLG51bGwpLHtjYW5jZWw6ZnVuY3Rpb24oKXtvPSEwLGF8fG4uYWJvcnQoKX19fSh0LGUpO2lmKGsoKSYmc2VsZi53b3JrZXImJnNlbGYud29ya2VyLmFjdG9yKXJldHVybiBzZWxmLndvcmtlci5hY3Rvci5zZW5kKCJnZXRSZXNvdXJjZSIsdCxlLHZvaWQgMCwhMCl9dmFyIHI7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHNlbGYuWE1MSHR0cFJlcXVlc3Q7Zm9yKHZhciBuIGluIHIub3Blbih0Lm1ldGhvZHx8IkdFVCIsdC51cmwsITApLCJhcnJheUJ1ZmZlciI9PT10LnR5cGUmJihyLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiKSx0LmhlYWRlcnMpci5zZXRSZXF1ZXN0SGVhZGVyKG4sdC5oZWFkZXJzW25dKTtyZXR1cm4ianNvbiI9PT10LnR5cGUmJihyLnJlc3BvbnNlVHlwZT0idGV4dCIsci5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uIikpLHIud2l0aENyZWRlbnRpYWxzPSJpbmNsdWRlIj09PXQuY3JlZGVudGlhbHMsci5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgRXJyb3Ioci5zdGF0dXNUZXh0KSl9LHIub25sb2FkPWZ1bmN0aW9uKCl7aWYoKHIuc3RhdHVzPj0yMDAmJnIuc3RhdHVzPDMwMHx8MD09PXIuc3RhdHVzKSYmbnVsbCE9PXIucmVzcG9uc2Upe3ZhciBuPXIucmVzcG9uc2U7aWYoImpzb24iPT09dC50eXBlKXRyeXtuPUpTT04ucGFyc2Uoci5yZXNwb25zZSl9Y2F0Y2godCl7cmV0dXJuIGUodCl9ZShudWxsLG4sci5nZXRSZXNwb25zZUhlYWRlcigiQ2FjaGUtQ29udHJvbCIpLHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkV4cGlyZXMiKSl9ZWxzZSBlKG5ldyBndChyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0sci5zZW5kKHQuYm9keSkse2NhbmNlbDpmdW5jdGlvbigpe3JldHVybiByLmFib3J0KCl9fX0odCxlKX0seXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdnQodSh0LHt0eXBlOiJhcnJheUJ1ZmZlciJ9KSxlKX0seHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdnQodSh0LHttZXRob2Q6IlBPU1QifSksZSl9O3B0PVtdLGR0PTA7dmFyIGJ0PWZ1bmN0aW9uKHQsZSl7aWYoQi5zdXBwb3J0ZWQmJih0LmhlYWRlcnN8fCh0LmhlYWRlcnM9e30pLHQuaGVhZGVycy5hY2NlcHQ9ImltYWdlL3dlYnAsKi8qIiksZHQ+PUYuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTKXt2YXIgcj17cmVxdWVzdFBhcmFtZXRlcnM6dCxjYWxsYmFjazplLGNhbmNlbGxlZDohMSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGxlZD0hMH19O3JldHVybiBwdC5wdXNoKHIpLHJ9ZHQrKzt2YXIgbj0hMSxpPWZ1bmN0aW9uKCl7aWYoIW4pZm9yKG49ITAsZHQtLTtwdC5sZW5ndGgmJmR0PEYuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOyl7dmFyIHQ9cHQuc2hpZnQoKTt0LmNhbmNlbGxlZHx8KHQuY2FuY2VsPWJ0KHQucmVxdWVzdFBhcmFtZXRlcnMsdC5jYWxsYmFjaykuY2FuY2VsKX19LGE9eXQodCwoZnVuY3Rpb24odCxyLG4sYSl7aSgpLHQ/ZSh0KTpyJiYoZnQoKT9mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBzZWxmLkJsb2IoW25ldyBVaW50OEFycmF5KHQpXSx7dHlwZToiaW1hZ2UvcG5nIn0pO3NlbGYuY3JlYXRlSW1hZ2VCaXRtYXAocikudGhlbigoZnVuY3Rpb24odCl7ZShudWxsLHQpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtlKG5ldyBFcnJvcigiQ291bGQgbm90IGxvYWQgaW1hZ2UgYmVjYXVzZSBvZiAiK3QubWVzc2FnZSsiLiBQbGVhc2UgbWFrZSBzdXJlIHRvIHVzZSBhIHN1cHBvcnRlZCBpbWFnZSB0eXBlIHN1Y2ggYXMgUE5HIG9yIEpQRUcuIE5vdGUgdGhhdCBTVkdzIGFyZSBub3Qgc3VwcG9ydGVkLiIpKX0pKX0ocixlKTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT1uZXcgc2VsZi5JbWFnZSxhPXNlbGYuVVJMO2kub25sb2FkPWZ1bmN0aW9uKCl7ZShudWxsLGkpLGEucmV2b2tlT2JqZWN0VVJMKGkuc3JjKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIGUobmV3IEVycm9yKCJDb3VsZCBub3QgbG9hZCBpbWFnZS4gUGxlYXNlIG1ha2Ugc3VyZSB0byB1c2UgYSBzdXBwb3J0ZWQgaW1hZ2UgdHlwZSBzdWNoIGFzIFBORyBvciBKUEVHLiBOb3RlIHRoYXQgU1ZHcyBhcmUgbm90IHN1cHBvcnRlZC4iKSl9O3ZhciBvPW5ldyBzZWxmLkJsb2IoW25ldyBVaW50OEFycmF5KHQpXSx7dHlwZToiaW1hZ2UvcG5nIn0pO2kuY2FjaGVDb250cm9sPXIsaS5leHBpcmVzPW4saS5zcmM9dC5ieXRlTGVuZ3RoP2EuY3JlYXRlT2JqZWN0VVJMKG8pOiJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQVlBQUFBZkZjU0pBQUFBQzBsRVFWUVlWMk5nQUFJQUFBVUFBYXJWeUZFQUFBQUFTVVZPUks1Q1lJST0ifShyLGUsbixhKSl9KSk7cmV0dXJue2NhbmNlbDpmdW5jdGlvbigpe2EuY2FuY2VsKCksaSgpfX19O2Z1bmN0aW9uIF90KHQsZSxyKXtyW3RdJiYtMSE9PXJbdF0uaW5kZXhPZihlKXx8KHJbdF09clt0XXx8W10sclt0XS5wdXNoKGUpKX1mdW5jdGlvbiB3dCh0LGUscil7aWYociYmclt0XSl7dmFyIG49clt0XS5pbmRleE9mKGUpOy0xIT09biYmclt0XS5zcGxpY2UobiwxKX19dmFyIFR0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pLHUodGhpcyxlKSx0aGlzLnR5cGU9dH0sa3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3ZvaWQgMD09PXImJihyPXt9KSx0LmNhbGwodGhpcywiZXJyb3IiLHUoe2Vycm9yOmV9LHIpKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlfShUdCksTXQ9ZnVuY3Rpb24oKXt9O010LnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9saXN0ZW5lcnM9dGhpcy5fbGlzdGVuZXJzfHx7fSxfdCh0LGUsdGhpcy5fbGlzdGVuZXJzKSx0aGlzfSxNdC5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHd0KHQsZSx0aGlzLl9saXN0ZW5lcnMpLHd0KHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxNdC5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzPXRoaXMuX29uZVRpbWVMaXN0ZW5lcnN8fHt9LF90KHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxNdC5wcm90b3R5cGUuZmlyZT1mdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bmV3IFR0KHQsZXx8e30pKTt2YXIgcj10LnR5cGU7aWYodGhpcy5saXN0ZW5zKHIpKXt0LnRhcmdldD10aGlzO2Zvcih2YXIgbj0wLGk9dGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbcl0/dGhpcy5fbGlzdGVuZXJzW3JdLnNsaWNlKCk6W107bjxpLmxlbmd0aDtuKz0xKWlbbl0uY2FsbCh0aGlzLHQpO2Zvcih2YXIgYT0wLG89dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1tyXT90aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3JdLnNsaWNlKCk6W107YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO3d0KHIscyx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSxzLmNhbGwodGhpcyx0KX12YXIgbD10aGlzLl9ldmVudGVkUGFyZW50O2wmJih1KHQsImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhP3RoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKCk6dGhpcy5fZXZlbnRlZFBhcmVudERhdGEpLGwuZmlyZSh0KSl9ZWxzZSB0IGluc3RhbmNlb2Yga3QmJmNvbnNvbGUuZXJyb3IodC5lcnJvcik7cmV0dXJuIHRoaXN9LE10LnByb3RvdHlwZS5saXN0ZW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVyc1t0XSYmdGhpcy5fbGlzdGVuZXJzW3RdLmxlbmd0aD4wfHx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzJiZ0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3RdJiZ0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3RdLmxlbmd0aD4wfHx0aGlzLl9ldmVudGVkUGFyZW50JiZ0aGlzLl9ldmVudGVkUGFyZW50Lmxpc3RlbnModCl9LE10LnByb3RvdHlwZS5zZXRFdmVudGVkUGFyZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2V2ZW50ZWRQYXJlbnQ9dCx0aGlzLl9ldmVudGVkUGFyZW50RGF0YT1lLHRoaXN9O3ZhciBBdD17JHZlcnNpb246OCwkcm9vdDp7dmVyc2lvbjp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOls4XX0sbmFtZTp7dHlwZToic3RyaW5nIn0sbWV0YWRhdGE6e3R5cGU6IioifSxjZW50ZXI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIn0sem9vbTp7dHlwZToibnVtYmVyIn0sYmVhcmluZzp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyJ9LHBpdGNoOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCx1bml0czoiZGVncmVlcyJ9LGxpZ2h0Ont0eXBlOiJsaWdodCJ9LHNvdXJjZXM6e3JlcXVpcmVkOiEwLHR5cGU6InNvdXJjZXMifSxzcHJpdGU6e3R5cGU6InN0cmluZyJ9LGdseXBoczp7dHlwZToic3RyaW5nIn0sdHJhbnNpdGlvbjp7dHlwZToidHJhbnNpdGlvbiJ9LGxheWVyczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLHZhbHVlOiJsYXllciJ9fSxzb3VyY2VzOnsiKiI6e3R5cGU6InNvdXJjZSJ9fSxzb3VyY2U6WyJzb3VyY2VfdmVjdG9yIiwic291cmNlX3Jhc3RlciIsInNvdXJjZV9yYXN0ZXJfZGVtIiwic291cmNlX2dlb2pzb24iLCJzb3VyY2VfdmlkZW8iLCJzb3VyY2VfaW1hZ2UiXSxzb3VyY2VfdmVjdG9yOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3ZlY3Rvcjp7fX19LHVybDp7dHlwZToic3RyaW5nIn0sdGlsZXM6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sYm91bmRzOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMTI5LDE4MCw4NS4wNTExMjldfSxzY2hlbWU6e3R5cGU6ImVudW0iLHZhbHVlczp7eHl6Ont9LHRtczp7fX0sZGVmYXVsdDoieHl6In0sbWluem9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyMn0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LHByb21vdGVJZDp7dHlwZToicHJvbW90ZUlkIn0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9yYXN0ZXI6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7cmFzdGVyOnt9fX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxib3VuZHM6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlstMTgwLC04NS4wNTExMjksMTgwLDg1LjA1MTEyOV19LG1pbnpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjJ9LHRpbGVTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTEyLHVuaXRzOiJwaXhlbHMifSxzY2hlbWU6e3R5cGU6ImVudW0iLHZhbHVlczp7eHl6Ont9LHRtczp7fX0sZGVmYXVsdDoieHl6In0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfcmFzdGVyX2RlbTp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOnsicmFzdGVyLWRlbSI6e319fSx1cmw6e3R5cGU6InN0cmluZyJ9LHRpbGVzOnt0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyJ9LGJvdW5kczp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEyOSwxODAsODUuMDUxMTI5XX0sbWluem9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyMn0sdGlsZVNpemU6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo1MTIsdW5pdHM6InBpeGVscyJ9LGF0dHJpYnV0aW9uOnt0eXBlOiJzdHJpbmcifSxlbmNvZGluZzp7dHlwZToiZW51bSIsdmFsdWVzOnt0ZXJyYXJpdW06e30sbWFwYm94Ont9fSxkZWZhdWx0OiJtYXBib3gifSwiKiI6e3R5cGU6IioifX0sc291cmNlX2dlb2pzb246e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7Z2VvanNvbjp7fX19LGRhdGE6e3R5cGU6IioifSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTh9LGF0dHJpYnV0aW9uOnt0eXBlOiJzdHJpbmcifSxidWZmZXI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxMjgsbWF4aW11bTo1MTIsbWluaW11bTowfSx0b2xlcmFuY2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDouMzc1fSxjbHVzdGVyOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxjbHVzdGVyUmFkaXVzOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTAsbWluaW11bTowfSxjbHVzdGVyTWF4Wm9vbTp7dHlwZToibnVtYmVyIn0sY2x1c3RlclByb3BlcnRpZXM6e3R5cGU6IioifSxsaW5lTWV0cmljczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sZ2VuZXJhdGVJZDp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0scHJvbW90ZUlkOnt0eXBlOiJwcm9tb3RlSWQifX0sc291cmNlX3ZpZGVvOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3ZpZGVvOnt9fX0sdXJsczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sc291cmNlX2ltYWdlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e2ltYWdlOnt9fX0sdXJsOntyZXF1aXJlZDohMCx0eXBlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sbGF5ZXI6e2lkOnt0eXBlOiJzdHJpbmciLHJlcXVpcmVkOiEwfSx0eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2ZpbGw6e30sbGluZTp7fSxzeW1ib2w6e30sY2lyY2xlOnt9LGhlYXRtYXA6e30sImZpbGwtZXh0cnVzaW9uIjp7fSxyYXN0ZXI6e30saGlsbHNoYWRlOnt9LGJhY2tncm91bmQ6e319LHJlcXVpcmVkOiEwfSxtZXRhZGF0YTp7dHlwZToiKiJ9LHNvdXJjZTp7dHlwZToic3RyaW5nIn0sInNvdXJjZS1sYXllciI6e3R5cGU6InN0cmluZyJ9LG1pbnpvb206e3R5cGU6Im51bWJlciIsbWluaW11bTowLG1heGltdW06MjR9LG1heHpvb206e3R5cGU6Im51bWJlciIsbWluaW11bTowLG1heGltdW06MjR9LGZpbHRlcjp7dHlwZToiZmlsdGVyIn0sbGF5b3V0Ont0eXBlOiJsYXlvdXQifSxwYWludDp7dHlwZToicGFpbnQifX0sbGF5b3V0OlsibGF5b3V0X2ZpbGwiLCJsYXlvdXRfbGluZSIsImxheW91dF9jaXJjbGUiLCJsYXlvdXRfaGVhdG1hcCIsImxheW91dF9maWxsLWV4dHJ1c2lvbiIsImxheW91dF9zeW1ib2wiLCJsYXlvdXRfcmFzdGVyIiwibGF5b3V0X2hpbGxzaGFkZSIsImxheW91dF9iYWNrZ3JvdW5kIl0sbGF5b3V0X2JhY2tncm91bmQ6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9maWxsOnsiZmlsbC1zb3J0LWtleSI6e3R5cGU6Im51bWJlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sdmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X2NpcmNsZTp7ImNpcmNsZS1zb3J0LWtleSI6e3R5cGU6Im51bWJlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sdmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X2hlYXRtYXA6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LCJsYXlvdXRfZmlsbC1leHRydXNpb24iOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfbGluZTp7ImxpbmUtY2FwIjp7dHlwZToiZW51bSIsdmFsdWVzOntidXR0Ont9LHJvdW5kOnt9LHNxdWFyZTp7fX0sZGVmYXVsdDoiYnV0dCIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJsaW5lLWpvaW4iOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2JldmVsOnt9LHJvdW5kOnt9LG1pdGVyOnt9fSxkZWZhdWx0OiJtaXRlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtbWl0ZXItbGltaXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixyZXF1aXJlczpbeyJsaW5lLWpvaW4iOiJtaXRlciJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtcm91bmQtbGltaXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS4wNSxyZXF1aXJlczpbeyJsaW5lLWpvaW4iOiJyb3VuZCJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtc29ydC1rZXkiOnt0eXBlOiJudW1iZXIiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LHZpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9zeW1ib2w6eyJzeW1ib2wtcGxhY2VtZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOntwb2ludDp7fSxsaW5lOnt9LCJsaW5lLWNlbnRlciI6e319LGRlZmF1bHQ6InBvaW50IixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInN5bWJvbC1zcGFjaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjI1MCxtaW5pbXVtOjEsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6W3sic3ltYm9sLXBsYWNlbWVudCI6ImxpbmUifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJzeW1ib2wtYXZvaWQtZWRnZXMiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwic3ltYm9sLXNvcnQta2V5Ijp7dHlwZToibnVtYmVyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwic3ltYm9sLXotb3JkZXIiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2F1dG86e30sInZpZXdwb3J0LXkiOnt9LHNvdXJjZTp7fX0sZGVmYXVsdDoiYXV0byIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLWFsbG93LW92ZXJsYXAiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1pZ25vcmUtcGxhY2VtZW50Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tb3B0aW9uYWwiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLXNpemUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsdW5pdHM6ImZhY3RvciBvZiB0aGUgb3JpZ2luYWwgaWNvbiBzaXplIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi10ZXh0LWZpdCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bm9uZTp7fSx3aWR0aDp7fSxoZWlnaHQ6e30sYm90aDp7fX0sZGVmYXVsdDoibm9uZSIscmVxdWlyZXM6WyJpY29uLWltYWdlIiwidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6WzAsMCwwLDBdLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiLHsiaWNvbi10ZXh0LWZpdCI6WyJib3RoIiwid2lkdGgiLCJoZWlnaHQiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1pbWFnZSI6e3R5cGU6InJlc29sdmVkSW1hZ2UiLHRva2VuczohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1wYWRkaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIsbWluaW11bTowLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1rZWVwLXVwcmlnaHQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIseyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6Im1hcCJ9LHsic3ltYm9sLXBsYWNlbWVudCI6WyJsaW5lIiwibGluZS1jZW50ZXIiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1vZmZzZXQiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2NlbnRlcjp7fSxsZWZ0Ont9LHJpZ2h0Ont9LHRvcDp7fSxib3R0b206e30sInRvcC1sZWZ0Ijp7fSwidG9wLXJpZ2h0Ijp7fSwiYm90dG9tLWxlZnQiOnt9LCJib3R0b20tcmlnaHQiOnt9fSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLXBpdGNoLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1waXRjaC1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OiJhdXRvIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LWZpZWxkIjp7dHlwZToiZm9ybWF0dGVkIixkZWZhdWx0OiIiLHRva2VuczohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1mb250Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmciLGRlZmF1bHQ6WyJPcGVuIFNhbnMgUmVndWxhciIsIkFyaWFsIFVuaWNvZGUgTVMgUmVndWxhciJdLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LXNpemUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTYsbWluaW11bTowLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LW1heC13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxMCxtaW5pbXVtOjAsdW5pdHM6ImVtcyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtbGluZS1oZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS4yLHVuaXRzOiJlbXMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1sZXR0ZXItc3BhY2luZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHVuaXRzOiJlbXMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWp1c3RpZnkiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2F1dG86e30sbGVmdDp7fSxjZW50ZXI6e30scmlnaHQ6e319LGRlZmF1bHQ6ImNlbnRlciIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtcmFkaWFsLW9mZnNldCI6e3R5cGU6Im51bWJlciIsdW5pdHM6ImVtcyIsZGVmYXVsdDowLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4iLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX19LCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciI6e3R5cGU6ImFycmF5Iix2YWx1ZToiZW51bSIsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LCJ0b3AtbGVmdCI6e30sInRvcC1yaWdodCI6e30sImJvdHRvbS1sZWZ0Ijp7fSwiYm90dG9tLXJpZ2h0Ijp7fX0scmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InN5bWJvbC1wbGFjZW1lbnQiOlsicG9pbnQiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2NlbnRlcjp7fSxsZWZ0Ont9LHJpZ2h0Ont9LHRvcDp7fSxib3R0b206e30sInRvcC1sZWZ0Ijp7fSwidG9wLXJpZ2h0Ijp7fSwiYm90dG9tLWxlZnQiOnt9LCJib3R0b20tcmlnaHQiOnt9fSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyIhIjoidGV4dC12YXJpYWJsZS1hbmNob3IifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtbWF4LWFuZ2xlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjQ1LHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbInRleHQtZmllbGQiLHsic3ltYm9sLXBsYWNlbWVudCI6WyJsaW5lIiwibGluZS1jZW50ZXIiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC13cml0aW5nLW1vZGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6ImVudW0iLHZhbHVlczp7aG9yaXpvbnRhbDp7fSx2ZXJ0aWNhbDp7fX0scmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InN5bWJvbC1wbGFjZW1lbnQiOlsicG9pbnQiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1wYWRkaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIsbWluaW11bTowLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1rZWVwLXVwcmlnaHQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCI6Im1hcCJ9LHsic3ltYm9sLXBsYWNlbWVudCI6WyJsaW5lIiwibGluZS1jZW50ZXIiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC10cmFuc2Zvcm0iOnt0eXBlOiJlbnVtIix2YWx1ZXM6e25vbmU6e30sdXBwZXJjYXNlOnt9LGxvd2VyY2FzZTp7fX0sZGVmYXVsdDoibm9uZSIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtb2Zmc2V0Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLHVuaXRzOiJlbXMiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0scmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7IiEiOiJ0ZXh0LXJhZGlhbC1vZmZzZXQifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtYWxsb3ctb3ZlcmxhcCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1vcHRpb25hbCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfcmFzdGVyOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfaGlsbHNoYWRlOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxmaWx0ZXI6e3R5cGU6ImFycmF5Iix2YWx1ZToiKiJ9LGZpbHRlcl9vcGVyYXRvcjp7dHlwZToiZW51bSIsdmFsdWVzOnsiPT0iOnt9LCIhPSI6e30sIj4iOnt9LCI+PSI6e30sIjwiOnt9LCI8PSI6e30saW46e30sIiFpbiI6e30sYWxsOnt9LGFueTp7fSxub25lOnt9LGhhczp7fSwiIWhhcyI6e30sd2l0aGluOnt9fX0sZ2VvbWV0cnlfdHlwZTp7dHlwZToiZW51bSIsdmFsdWVzOntQb2ludDp7fSxMaW5lU3RyaW5nOnt9LFBvbHlnb246e319fSxmdW5jdGlvbjp7ZXhwcmVzc2lvbjp7dHlwZToiZXhwcmVzc2lvbiJ9LHN0b3BzOnt0eXBlOiJhcnJheSIsdmFsdWU6ImZ1bmN0aW9uX3N0b3AifSxiYXNlOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjB9LHByb3BlcnR5Ont0eXBlOiJzdHJpbmciLGRlZmF1bHQ6IiR6b29tIn0sdHlwZTp7dHlwZToiZW51bSIsdmFsdWVzOntpZGVudGl0eTp7fSxleHBvbmVudGlhbDp7fSxpbnRlcnZhbDp7fSxjYXRlZ29yaWNhbDp7fX0sZGVmYXVsdDoiZXhwb25lbnRpYWwifSxjb2xvclNwYWNlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3JnYjp7fSxsYWI6e30saGNsOnt9fSxkZWZhdWx0OiJyZ2IifSxkZWZhdWx0Ont0eXBlOiIqIixyZXF1aXJlZDohMX19LGZ1bmN0aW9uX3N0b3A6e3R5cGU6ImFycmF5IixtaW5pbXVtOjAsbWF4aW11bToyNCx2YWx1ZTpbIm51bWJlciIsImNvbG9yIl0sbGVuZ3RoOjJ9LGV4cHJlc3Npb246e3R5cGU6ImFycmF5Iix2YWx1ZToiKiIsbWluaW11bToxfSxleHByZXNzaW9uX25hbWU6e3R5cGU6ImVudW0iLHZhbHVlczp7bGV0Ontncm91cDoiVmFyaWFibGUgYmluZGluZyJ9LHZhcjp7Z3JvdXA6IlZhcmlhYmxlIGJpbmRpbmcifSxsaXRlcmFsOntncm91cDoiVHlwZXMifSxhcnJheTp7Z3JvdXA6IlR5cGVzIn0sYXQ6e2dyb3VwOiJMb29rdXAifSxpbjp7Z3JvdXA6Ikxvb2t1cCJ9LCJpbmRleC1vZiI6e2dyb3VwOiJMb29rdXAifSxzbGljZTp7Z3JvdXA6Ikxvb2t1cCJ9LGNhc2U6e2dyb3VwOiJEZWNpc2lvbiJ9LG1hdGNoOntncm91cDoiRGVjaXNpb24ifSxjb2FsZXNjZTp7Z3JvdXA6IkRlY2lzaW9uIn0sc3RlcDp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LGludGVycG9sYXRlOntncm91cDoiUmFtcHMsIHNjYWxlcywgY3VydmVzIn0sImludGVycG9sYXRlLWhjbCI6e2dyb3VwOiJSYW1wcywgc2NhbGVzLCBjdXJ2ZXMifSwiaW50ZXJwb2xhdGUtbGFiIjp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LGxuMjp7Z3JvdXA6Ik1hdGgifSxwaTp7Z3JvdXA6Ik1hdGgifSxlOntncm91cDoiTWF0aCJ9LHR5cGVvZjp7Z3JvdXA6IlR5cGVzIn0sc3RyaW5nOntncm91cDoiVHlwZXMifSxudW1iZXI6e2dyb3VwOiJUeXBlcyJ9LGJvb2xlYW46e2dyb3VwOiJUeXBlcyJ9LG9iamVjdDp7Z3JvdXA6IlR5cGVzIn0sY29sbGF0b3I6e2dyb3VwOiJUeXBlcyJ9LGZvcm1hdDp7Z3JvdXA6IlR5cGVzIn0saW1hZ2U6e2dyb3VwOiJUeXBlcyJ9LCJudW1iZXItZm9ybWF0Ijp7Z3JvdXA6IlR5cGVzIn0sInRvLXN0cmluZyI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1udW1iZXIiOntncm91cDoiVHlwZXMifSwidG8tYm9vbGVhbiI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1yZ2JhIjp7Z3JvdXA6IkNvbG9yIn0sInRvLWNvbG9yIjp7Z3JvdXA6IlR5cGVzIn0scmdiOntncm91cDoiQ29sb3IifSxyZ2JhOntncm91cDoiQ29sb3IifSxnZXQ6e2dyb3VwOiJMb29rdXAifSxoYXM6e2dyb3VwOiJMb29rdXAifSxsZW5ndGg6e2dyb3VwOiJMb29rdXAifSxwcm9wZXJ0aWVzOntncm91cDoiRmVhdHVyZSBkYXRhIn0sImZlYXR1cmUtc3RhdGUiOntncm91cDoiRmVhdHVyZSBkYXRhIn0sImdlb21ldHJ5LXR5cGUiOntncm91cDoiRmVhdHVyZSBkYXRhIn0saWQ6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSx6b29tOntncm91cDoiWm9vbSJ9LCJoZWF0bWFwLWRlbnNpdHkiOntncm91cDoiSGVhdG1hcCJ9LCJsaW5lLXByb2dyZXNzIjp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LGFjY3VtdWxhdGVkOntncm91cDoiRmVhdHVyZSBkYXRhIn0sIisiOntncm91cDoiTWF0aCJ9LCIqIjp7Z3JvdXA6Ik1hdGgifSwiLSI6e2dyb3VwOiJNYXRoIn0sIi8iOntncm91cDoiTWF0aCJ9LCIlIjp7Z3JvdXA6Ik1hdGgifSwiXiI6e2dyb3VwOiJNYXRoIn0sc3FydDp7Z3JvdXA6Ik1hdGgifSxsb2cxMDp7Z3JvdXA6Ik1hdGgifSxsbjp7Z3JvdXA6Ik1hdGgifSxsb2cyOntncm91cDoiTWF0aCJ9LHNpbjp7Z3JvdXA6Ik1hdGgifSxjb3M6e2dyb3VwOiJNYXRoIn0sdGFuOntncm91cDoiTWF0aCJ9LGFzaW46e2dyb3VwOiJNYXRoIn0sYWNvczp7Z3JvdXA6Ik1hdGgifSxhdGFuOntncm91cDoiTWF0aCJ9LG1pbjp7Z3JvdXA6Ik1hdGgifSxtYXg6e2dyb3VwOiJNYXRoIn0scm91bmQ6e2dyb3VwOiJNYXRoIn0sYWJzOntncm91cDoiTWF0aCJ9LGNlaWw6e2dyb3VwOiJNYXRoIn0sZmxvb3I6e2dyb3VwOiJNYXRoIn0sZGlzdGFuY2U6e2dyb3VwOiJNYXRoIn0sIj09Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIiE9Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIj4iOntncm91cDoiRGVjaXNpb24ifSwiPCI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI+PSI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI8PSI6e2dyb3VwOiJEZWNpc2lvbiJ9LGFsbDp7Z3JvdXA6IkRlY2lzaW9uIn0sYW55Ontncm91cDoiRGVjaXNpb24ifSwiISI6e2dyb3VwOiJEZWNpc2lvbiJ9LHdpdGhpbjp7Z3JvdXA6IkRlY2lzaW9uIn0sImlzLXN1cHBvcnRlZC1zY3JpcHQiOntncm91cDoiU3RyaW5nIn0sdXBjYXNlOntncm91cDoiU3RyaW5nIn0sZG93bmNhc2U6e2dyb3VwOiJTdHJpbmcifSxjb25jYXQ6e2dyb3VwOiJTdHJpbmcifSwicmVzb2x2ZWQtbG9jYWxlIjp7Z3JvdXA6IlN0cmluZyJ9fX0sbGlnaHQ6e2FuY2hvcjp7dHlwZToiZW51bSIsZGVmYXVsdDoidmlld3BvcnQiLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLHRyYW5zaXRpb246ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19fSxwb3NpdGlvbjp7dHlwZToiYXJyYXkiLGRlZmF1bHQ6WzEuMTUsMjEwLDMwXSxsZW5ndGg6Myx2YWx1ZToibnVtYmVyIiwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19fSxjb2xvcjp7dHlwZToiY29sb3IiLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCIsZGVmYXVsdDoiI2ZmZmZmZiIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LHRyYW5zaXRpb246ITB9LGludGVuc2l0eTp7dHlwZToibnVtYmVyIiwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sdHJhbnNpdGlvbjohMH19LHBhaW50OlsicGFpbnRfZmlsbCIsInBhaW50X2xpbmUiLCJwYWludF9jaXJjbGUiLCJwYWludF9oZWF0bWFwIiwicGFpbnRfZmlsbC1leHRydXNpb24iLCJwYWludF9zeW1ib2wiLCJwYWludF9yYXN0ZXIiLCJwYWludF9oaWxsc2hhZGUiLCJwYWludF9iYWNrZ3JvdW5kIl0scGFpbnRfZmlsbDp7ImZpbGwtYW50aWFsaWFzIjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiZmlsbC1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC1vdXRsaW5lLWNvbG9yIjp7dHlwZToiY29sb3IiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtcGF0dGVybiJ9LHsiZmlsbC1hbnRpYWxpYXMiOiEwfV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImZpbGwtdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLXBhdHRlcm4iOnt0eXBlOiJyZXNvbHZlZEltYWdlIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiJ9fSwicGFpbnRfZmlsbC1leHRydXNpb24iOnsiZmlsbC1leHRydXNpb24tb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtZXh0cnVzaW9uLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4ifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIjp7dHlwZToicmVzb2x2ZWRJbWFnZSIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4ifSwiZmlsbC1leHRydXNpb24taGVpZ2h0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOiJtZXRlcnMiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLWV4dHJ1c2lvbi1iYXNlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOiJtZXRlcnMiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJmaWxsLWV4dHJ1c2lvbi1oZWlnaHQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCx0cmFuc2l0aW9uOiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifX0scGFpbnRfbGluZTp7ImxpbmUtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoibGluZS1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwibGluZS10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJsaW5lLXRyYW5zbGF0ZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwibGluZS13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS1nYXAtd2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtb2Zmc2V0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS1kYXNoYXJyYXkiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6ImxpbmUgd2lkdGhzIixyZXF1aXJlczpbeyIhIjoibGluZS1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkIn0sImxpbmUtcGF0dGVybiI6e3R5cGU6InJlc29sdmVkSW1hZ2UiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIn0sImxpbmUtZ3JhZGllbnQiOnt0eXBlOiJjb2xvciIsdHJhbnNpdGlvbjohMSxyZXF1aXJlczpbeyIhIjoibGluZS1kYXNoYXJyYXkifSx7IiEiOiJsaW5lLXBhdHRlcm4ifSx7c291cmNlOiJnZW9qc29uIixoYXM6e2xpbmVNZXRyaWNzOiEwfX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsibGluZS1wcm9ncmVzcyJdfSwicHJvcGVydHktdHlwZSI6ImNvbG9yLXJhbXAifX0scGFpbnRfY2lyY2xlOnsiY2lyY2xlLXJhZGl1cyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo1LG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImNpcmNsZS10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImNpcmNsZS10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImNpcmNsZS1waXRjaC1zY2FsZSI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiY2lyY2xlLXBpdGNoLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJ2aWV3cG9ydCIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJjaXJjbGUtc3Ryb2tlLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtc3Ryb2tlLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9fSxwYWludF9oZWF0bWFwOnsiaGVhdG1hcC1yYWRpdXMiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAsbWluaW11bToxLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJoZWF0bWFwLXdlaWdodCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCx0cmFuc2l0aW9uOiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaGVhdG1hcC1pbnRlbnNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhlYXRtYXAtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDpbImludGVycG9sYXRlIixbImxpbmVhciJdLFsiaGVhdG1hcC1kZW5zaXR5Il0sMCwicmdiYSgwLCAwLCAyNTUsIDApIiwuMSwicm95YWxibHVlIiwuMywiY3lhbiIsLjUsImxpbWUiLC43LCJ5ZWxsb3ciLDEsInJlZCJdLHRyYW5zaXRpb246ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJoZWF0bWFwLWRlbnNpdHkiXX0sInByb3BlcnR5LXR5cGUiOiJjb2xvci1yYW1wIn0sImhlYXRtYXAtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X3N5bWJvbDp7Imljb24tb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24taGFsby1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiJyZ2JhKDAsIDAsIDAsIDApIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1oYWxvLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLWhhbG8tYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJpY29uLWltYWdlIiwiaWNvbi10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxvdmVycmlkYWJsZTohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtaGFsby1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiJyZ2JhKDAsIDAsIDAsIDApIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1oYWxvLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWhhbG8tYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwidGV4dC10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X3Jhc3Rlcjp7InJhc3Rlci1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWh1ZS1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHRyYW5zaXRpb246ITAsdW5pdHM6ImRlZ3JlZXMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWJyaWdodG5lc3MtbWluIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWJyaWdodG5lc3MtbWF4Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLXNhdHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWNvbnRyYXN0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTotMSxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1yZXNhbXBsaW5nIjp7dHlwZToiZW51bSIsdmFsdWVzOntsaW5lYXI6e30sbmVhcmVzdDp7fX0sZGVmYXVsdDoibGluZWFyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1mYWRlLWR1cmF0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwMCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMSx1bml0czoibWlsbGlzZWNvbmRzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X2hpbGxzaGFkZTp7ImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMzNSxtaW5pbXVtOjAsbWF4aW11bTozNTksdHJhbnNpdGlvbjohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6InZpZXdwb3J0IixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjRkZGRkZGIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLWFjY2VudC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifX0scGFpbnRfYmFja2dyb3VuZDp7ImJhY2tncm91bmQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiYmFja2dyb3VuZC1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiYmFja2dyb3VuZC1wYXR0ZXJuIjp7dHlwZToicmVzb2x2ZWRJbWFnZSIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJjcm9zcy1mYWRlZCJ9LCJiYWNrZ3JvdW5kLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9fSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwMCxtaW5pbXVtOjAsdW5pdHM6Im1pbGxpc2Vjb25kcyJ9LGRlbGF5Ont0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdW5pdHM6Im1pbGxpc2Vjb25kcyJ9fSwicHJvcGVydHktdHlwZSI6eyJkYXRhLWRyaXZlbiI6e3R5cGU6InByb3BlcnR5LXR5cGUifSwiY3Jvc3MtZmFkZWQiOnt0eXBlOiJwcm9wZXJ0eS10eXBlIn0sImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIjp7dHlwZToicHJvcGVydHktdHlwZSJ9LCJjb2xvci1yYW1wIjp7dHlwZToicHJvcGVydHktdHlwZSJ9LCJkYXRhLWNvbnN0YW50Ijp7dHlwZToicHJvcGVydHktdHlwZSJ9LGNvbnN0YW50Ont0eXBlOiJwcm9wZXJ0eS10eXBlIn19LHByb21vdGVJZDp7IioiOnt0eXBlOiJzdHJpbmcifX19LFN0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubWVzc2FnZT0odD90KyI6ICI6IiIpK3IsbiYmKHRoaXMuaWRlbnRpZmllcj1uKSxudWxsIT1lJiZlLl9fbGluZV9fJiYodGhpcy5saW5lPWUuX19saW5lX18pfTtmdW5jdGlvbiBFdCh0KXt2YXIgZT10LnZhbHVlO3JldHVybiBlP1tuZXcgU3QodC5rZXksZSwiY29uc3RhbnRzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFzIG9mIHY4IildOltdfWZ1bmN0aW9uIEN0KHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9ZnVuY3Rpb24gTHQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBCb29sZWFuP3QudmFsdWVPZigpOnR9ZnVuY3Rpb24gSXQodCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5tYXAoSXQpO2lmKHQgaW5zdGFuY2VvZiBPYmplY3QmJiEodCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIEJvb2xlYW4pKXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCllW3JdPUl0KHRbcl0pO3JldHVybiBlfXJldHVybiBMdCh0KX12YXIgUHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLHIpLHRoaXMubWVzc2FnZT1yLHRoaXMua2V5PWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZX0oRXJyb3IpLHp0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9W10pLHRoaXMucGFyZW50PXQsdGhpcy5iaW5kaW5ncz17fTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO3RoaXMuYmluZGluZ3NbaVswXV09aVsxXX19O3p0LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB6dCh0aGlzLHQpfSx6dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZGluZ3NbdF0pcmV0dXJuIHRoaXMuYmluZGluZ3NbdF07aWYodGhpcy5wYXJlbnQpcmV0dXJuIHRoaXMucGFyZW50LmdldCh0KTt0aHJvdyBuZXcgRXJyb3IodCsiIG5vdCBmb3VuZCBpbiBzY29wZS4iKX0senQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMuYmluZGluZ3NbdF18fCEhdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Lmhhcyh0KX07dmFyIE90PXtraW5kOiJudWxsIn0sRHQ9e2tpbmQ6Im51bWJlciJ9LFJ0PXtraW5kOiJzdHJpbmcifSxGdD17a2luZDoiYm9vbGVhbiJ9LEJ0PXtraW5kOiJjb2xvciJ9LE50PXtraW5kOiJvYmplY3QifSxqdD17a2luZDoidmFsdWUifSxVdD17a2luZDoiY29sbGF0b3IifSxWdD17a2luZDoiZm9ybWF0dGVkIn0scXQ9e2tpbmQ6InJlc29sdmVkSW1hZ2UifTtmdW5jdGlvbiBIdCh0LGUpe3JldHVybntraW5kOiJhcnJheSIsaXRlbVR5cGU6dCxOOmV9fWZ1bmN0aW9uIEd0KHQpe2lmKCJhcnJheSI9PT10LmtpbmQpe3ZhciBlPUd0KHQuaXRlbVR5cGUpO3JldHVybiJudW1iZXIiPT10eXBlb2YgdC5OPyJhcnJheTwiK2UrIiwgIit0Lk4rIj4iOiJ2YWx1ZSI9PT10Lml0ZW1UeXBlLmtpbmQ/ImFycmF5IjoiYXJyYXk8IitlKyI+In1yZXR1cm4gdC5raW5kfXZhciBZdD1bT3QsRHQsUnQsRnQsQnQsVnQsTnQsSHQoanQpLHF0XTtmdW5jdGlvbiBXdCh0LGUpe2lmKCJlcnJvciI9PT1lLmtpbmQpcmV0dXJuIG51bGw7aWYoImFycmF5Ij09PXQua2luZCl7aWYoImFycmF5Ij09PWUua2luZCYmKDA9PT1lLk4mJiJ2YWx1ZSI9PT1lLml0ZW1UeXBlLmtpbmR8fCFXdCh0Lml0ZW1UeXBlLGUuaXRlbVR5cGUpKSYmKCJudW1iZXIiIT10eXBlb2YgdC5OfHx0Lk49PT1lLk4pKXJldHVybiBudWxsfWVsc2V7aWYodC5raW5kPT09ZS5raW5kKXJldHVybiBudWxsO2lmKCJ2YWx1ZSI9PT10LmtpbmQpZm9yKHZhciByPTAsbj1ZdDtyPG4ubGVuZ3RoO3IrPTEpaWYoIVd0KG5bcl0sZSkpcmV0dXJuIG51bGx9cmV0dXJuIkV4cGVjdGVkICIrR3QodCkrIiBidXQgZm91bmQgIitHdChlKSsiIGluc3RlYWQuIn1mdW5jdGlvbiBYdCh0LGUpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtpbmQ9PT10LmtpbmR9KSl9ZnVuY3Rpb24gWnQodCxlKXtyZXR1cm4gZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4ibnVsbCI9PT1lP251bGw9PT10OiJhcnJheSI9PT1lP0FycmF5LmlzQXJyYXkodCk6Im9iamVjdCI9PT1lP3QmJiFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHQ6ZT09PXR5cGVvZiB0fSkpfXZhciBKdD1lKChmdW5jdGlvbih0LGUpe3ZhciByPXt0cmFuc3BhcmVudDpbMCwwLDAsMF0sYWxpY2VibHVlOlsyNDAsMjQ4LDI1NSwxXSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1LDFdLGFxdWE6WzAsMjU1LDI1NSwxXSxhcXVhbWFyaW5lOlsxMjcsMjU1LDIxMiwxXSxhenVyZTpbMjQwLDI1NSwyNTUsMV0sYmVpZ2U6WzI0NSwyNDUsMjIwLDFdLGJpc3F1ZTpbMjU1LDIyOCwxOTYsMV0sYmxhY2s6WzAsMCwwLDFdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNSwxXSxibHVlOlswLDAsMjU1LDFdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjYsMV0sYnJvd246WzE2NSw0Miw0MiwxXSxidXJseXdvb2Q6WzIyMiwxODQsMTM1LDFdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MCwxXSxjaGFydHJldXNlOlsxMjcsMjU1LDAsMV0sY2hvY29sYXRlOlsyMTAsMTA1LDMwLDFdLGNvcmFsOlsyNTUsMTI3LDgwLDFdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzNywxXSxjb3Juc2lsazpbMjU1LDI0OCwyMjAsMV0sY3JpbXNvbjpbMjIwLDIwLDYwLDFdLGN5YW46WzAsMjU1LDI1NSwxXSxkYXJrYmx1ZTpbMCwwLDEzOSwxXSxkYXJrY3lhbjpbMCwxMzksMTM5LDFdLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTEsMV0sZGFya2dyYXk6WzE2OSwxNjksMTY5LDFdLGRhcmtncmVlbjpbMCwxMDAsMCwxXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjksMV0sZGFya2toYWtpOlsxODksMTgzLDEwNywxXSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5LDFdLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDcsMV0sZGFya29yYW5nZTpbMjU1LDE0MCwwLDFdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDQsMV0sZGFya3JlZDpbMTM5LDAsMCwxXSxkYXJrc2FsbW9uOlsyMzMsMTUwLDEyMiwxXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzLDFdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOSwxXSxkYXJrc2xhdGVncmF5Ols0Nyw3OSw3OSwxXSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OSwxXSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDksMV0sZGFya3Zpb2xldDpbMTQ4LDAsMjExLDFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3LDFdLGRlZXBza3libHVlOlswLDE5MSwyNTUsMV0sZGltZ3JheTpbMTA1LDEwNSwxMDUsMV0sZGltZ3JleTpbMTA1LDEwNSwxMDUsMV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NSwxXSxmaXJlYnJpY2s6WzE3OCwzNCwzNCwxXSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDAsMV0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNCwxXSxmdWNoc2lhOlsyNTUsMCwyNTUsMV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMCwxXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NSwxXSxnb2xkOlsyNTUsMjE1LDAsMV0sZ29sZGVucm9kOlsyMTgsMTY1LDMyLDFdLGdyYXk6WzEyOCwxMjgsMTI4LDFdLGdyZWVuOlswLDEyOCwwLDFdLGdyZWVueWVsbG93OlsxNzMsMjU1LDQ3LDFdLGdyZXk6WzEyOCwxMjgsMTI4LDFdLGhvbmV5ZGV3OlsyNDAsMjU1LDI0MCwxXSxob3RwaW5rOlsyNTUsMTA1LDE4MCwxXSxpbmRpYW5yZWQ6WzIwNSw5Miw5MiwxXSxpbmRpZ286Wzc1LDAsMTMwLDFdLGl2b3J5OlsyNTUsMjU1LDI0MCwxXSxraGFraTpbMjQwLDIzMCwxNDAsMV0sbGF2ZW5kZXI6WzIzMCwyMzAsMjUwLDFdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1LDFdLGxhd25ncmVlbjpbMTI0LDI1MiwwLDFdLGxlbW9uY2hpZmZvbjpbMjU1LDI1MCwyMDUsMV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMCwxXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOCwxXSxsaWdodGN5YW46WzIyNCwyNTUsMjU1LDFdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMCwxXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0Z3JlZW46WzE0NCwyMzgsMTQ0LDFdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTEsMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5MywxXSxsaWdodHNhbG1vbjpbMjU1LDE2MCwxMjIsMV0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MCwxXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwLDFdLGxpZ2h0c2xhdGVncmF5OlsxMTksMTM2LDE1MywxXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyLDFdLGxpZ2h0eWVsbG93OlsyNTUsMjU1LDIyNCwxXSxsaW1lOlswLDI1NSwwLDFdLGxpbWVncmVlbjpbNTAsMjA1LDUwLDFdLGxpbmVuOlsyNTAsMjQwLDIzMCwxXSxtYWdlbnRhOlsyNTUsMCwyNTUsMV0sbWFyb29uOlsxMjgsMCwwLDFdLG1lZGl1bWFxdWFtYXJpbmU6WzEwMiwyMDUsMTcwLDFdLG1lZGl1bWJsdWU6WzAsMCwyMDUsMV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExLDFdLG1lZGl1bXB1cnBsZTpbMTQ3LDExMiwyMTksMV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTMsMV0sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOCwxXSxtZWRpdW1zcHJpbmdncmVlbjpbMCwyNTAsMTU0LDFdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNCwxXSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzMsMV0sbWlkbmlnaHRibHVlOlsyNSwyNSwxMTIsMV0sbWludGNyZWFtOlsyNDUsMjU1LDI1MCwxXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1LDFdLG1vY2Nhc2luOlsyNTUsMjI4LDE4MSwxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzMsMV0sbmF2eTpbMCwwLDEyOCwxXSxvbGRsYWNlOlsyNTMsMjQ1LDIzMCwxXSxvbGl2ZTpbMTI4LDEyOCwwLDFdLG9saXZlZHJhYjpbMTA3LDE0MiwzNSwxXSxvcmFuZ2U6WzI1NSwxNjUsMCwxXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwLDFdLG9yY2hpZDpbMjE4LDExMiwyMTQsMV0scGFsZWdvbGRlbnJvZDpbMjM4LDIzMiwxNzAsMV0scGFsZWdyZWVuOlsxNTIsMjUxLDE1MiwxXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOCwxXSxwYWxldmlvbGV0cmVkOlsyMTksMTEyLDE0NywxXSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxMywxXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1LDFdLHBlcnU6WzIwNSwxMzMsNjMsMV0scGluazpbMjU1LDE5MiwyMDMsMV0scGx1bTpbMjIxLDE2MCwyMjEsMV0scG93ZGVyYmx1ZTpbMTc2LDIyNCwyMzAsMV0scHVycGxlOlsxMjgsMCwxMjgsMV0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1MywxXSxyZWQ6WzI1NSwwLDAsMV0scm9zeWJyb3duOlsxODgsMTQzLDE0MywxXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjUsMV0sc2FkZGxlYnJvd246WzEzOSw2OSwxOSwxXSxzYWxtb246WzI1MCwxMjgsMTE0LDFdLHNhbmR5YnJvd246WzI0NCwxNjQsOTYsMV0sc2VhZ3JlZW46WzQ2LDEzOSw4NywxXSxzZWFzaGVsbDpbMjU1LDI0NSwyMzgsMV0sc2llbm5hOlsxNjAsODIsNDUsMV0sc2lsdmVyOlsxOTIsMTkyLDE5MiwxXSxza3libHVlOlsxMzUsMjA2LDIzNSwxXSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDUsMV0sc2xhdGVncmF5OlsxMTIsMTI4LDE0NCwxXSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0LDFdLHNub3c6WzI1NSwyNTAsMjUwLDFdLHNwcmluZ2dyZWVuOlswLDI1NSwxMjcsMV0sc3RlZWxibHVlOls3MCwxMzAsMTgwLDFdLHRhbjpbMjEwLDE4MCwxNDAsMV0sdGVhbDpbMCwxMjgsMTI4LDFdLHRoaXN0bGU6WzIxNiwxOTEsMjE2LDFdLHRvbWF0bzpbMjU1LDk5LDcxLDFdLHR1cnF1b2lzZTpbNjQsMjI0LDIwOCwxXSx2aW9sZXQ6WzIzOCwxMzAsMjM4LDFdLHdoZWF0OlsyNDUsMjIyLDE3OSwxXSx3aGl0ZTpbMjU1LDI1NSwyNTUsMV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDUsMV0seWVsbG93OlsyNTUsMjU1LDAsMV0seWVsbG93Z3JlZW46WzE1NCwyMDUsNTAsMV19O2Z1bmN0aW9uIG4odCl7cmV0dXJuKHQ9TWF0aC5yb3VuZCh0KSk8MD8wOnQ+MjU1PzI1NTp0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIG4oIiUiPT09dFt0Lmxlbmd0aC0xXT9wYXJzZUZsb2F0KHQpLzEwMCoyNTU6cGFyc2VJbnQodCkpfWZ1bmN0aW9uIGEodCl7cmV0dXJuKGU9IiUiPT09dFt0Lmxlbmd0aC0xXT9wYXJzZUZsb2F0KHQpLzEwMDpwYXJzZUZsb2F0KHQpKTwwPzA6ZT4xPzE6ZTt2YXIgZX1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gcjwwP3IrPTE6cj4xJiYoci09MSksNipyPDE/dCsoZS10KSpyKjY6MipyPDE/ZTozKnI8Mj90KyhlLXQpKigyLzMtcikqNjp0fXRyeXtlLnBhcnNlQ1NTQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGUscz10LnJlcGxhY2UoLyAvZywiIikudG9Mb3dlckNhc2UoKTtpZihzIGluIHIpcmV0dXJuIHJbc10uc2xpY2UoKTtpZigiIyI9PT1zWzBdKXJldHVybiA0PT09cy5sZW5ndGg/KGU9cGFyc2VJbnQocy5zdWJzdHIoMSksMTYpKT49MCYmZTw9NDA5NT9bKDM4NDAmZSk+PjR8KDM4NDAmZSk+PjgsMjQwJmV8KDI0MCZlKT4+NCwxNSZlfCgxNSZlKTw8NCwxXTpudWxsOjc9PT1zLmxlbmd0aCYmKGU9cGFyc2VJbnQocy5zdWJzdHIoMSksMTYpKT49MCYmZTw9MTY3NzcyMTU/WygxNjcxMTY4MCZlKT4+MTYsKDY1MjgwJmUpPj44LDI1NSZlLDFdOm51bGw7dmFyIGw9cy5pbmRleE9mKCIoIiksYz1zLmluZGV4T2YoIikiKTtpZigtMSE9PWwmJmMrMT09PXMubGVuZ3RoKXt2YXIgdT1zLnN1YnN0cigwLGwpLGY9cy5zdWJzdHIobCsxLGMtKGwrMSkpLnNwbGl0KCIsIiksaD0xO3N3aXRjaCh1KXtjYXNlInJnYmEiOmlmKDQhPT1mLmxlbmd0aClyZXR1cm4gbnVsbDtoPWEoZi5wb3AoKSk7Y2FzZSJyZ2IiOnJldHVybiAzIT09Zi5sZW5ndGg/bnVsbDpbaShmWzBdKSxpKGZbMV0pLGkoZlsyXSksaF07Y2FzZSJoc2xhIjppZig0IT09Zi5sZW5ndGgpcmV0dXJuIG51bGw7aD1hKGYucG9wKCkpO2Nhc2UiaHNsIjppZigzIT09Zi5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHA9KHBhcnNlRmxvYXQoZlswXSklMzYwKzM2MCklMzYwLzM2MCxkPWEoZlsxXSksZz1hKGZbMl0pLG09Zzw9LjU/ZyooZCsxKTpnK2QtZypkLHY9MipnLW07cmV0dXJuW24oMjU1Km8odixtLHArMS8zKSksbigyNTUqbyh2LG0scCkpLG4oMjU1Km8odixtLHAtMS8zKSksaF07ZGVmYXVsdDpyZXR1cm4gbnVsbH19cmV0dXJuIG51bGx9fWNhdGNoKHQpe319KSkucGFyc2VDU1NDb2xvcixLdD1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj0xKSx0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9cix0aGlzLmE9bn07S3QucGFyc2U9ZnVuY3Rpb24odCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIEt0KXJldHVybiB0O2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9SnQodCk7aWYoZSlyZXR1cm4gbmV3IEt0KGVbMF0vMjU1KmVbM10sZVsxXS8yNTUqZVszXSxlWzJdLzI1NSplWzNdLGVbM10pfX19LEt0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudG9BcnJheSgpLGU9dFsxXSxyPXRbMl0sbj10WzNdO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZCh0WzBdKSsiLCIrTWF0aC5yb3VuZChlKSsiLCIrTWF0aC5yb3VuZChyKSsiLCIrbisiKSJ9LEt0LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hO3JldHVybiAwPT09dD9bMCwwLDAsMF06WzI1NSp0aGlzLnIvdCwyNTUqdGhpcy5nL3QsMjU1KnRoaXMuYi90LHRdfSxLdC5ibGFjaz1uZXcgS3QoMCwwLDAsMSksS3Qud2hpdGU9bmV3IEt0KDEsMSwxLDEpLEt0LnRyYW5zcGFyZW50PW5ldyBLdCgwLDAsMCwwKSxLdC5yZWQ9bmV3IEt0KDEsMCwwLDEpO3ZhciBRdD1mdW5jdGlvbih0LGUscil7dGhpcy5zZW5zaXRpdml0eT10P2U/InZhcmlhbnQiOiJjYXNlIjplPyJhY2NlbnQiOiJiYXNlIix0aGlzLmxvY2FsZT1yLHRoaXMuY29sbGF0b3I9bmV3IEludGwuQ29sbGF0b3IodGhpcy5sb2NhbGU/dGhpcy5sb2NhbGU6W10se3NlbnNpdGl2aXR5OnRoaXMuc2Vuc2l0aXZpdHksdXNhZ2U6InNlYXJjaCJ9KX07UXQucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb2xsYXRvci5jb21wYXJlKHQsZSl9LFF0LnByb3RvdHlwZS5yZXNvbHZlZExvY2FsZT1mdW5jdGlvbigpe3JldHVybiBuZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZT90aGlzLmxvY2FsZTpbXSkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlfTt2YXIgJHQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnRleHQ9dCx0aGlzLmltYWdlPWUsdGhpcy5zY2FsZT1yLHRoaXMuZm9udFN0YWNrPW4sdGhpcy50ZXh0Q29sb3I9aX0sdGU9ZnVuY3Rpb24odCl7dGhpcy5zZWN0aW9ucz10fTt0ZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdGUoW25ldyAkdCh0LG51bGwsbnVsbCxudWxsLG51bGwpXSl9LHRlLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnNlY3Rpb25zLmxlbmd0aHx8IXRoaXMuc2VjdGlvbnMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10LnRleHQubGVuZ3RofHx0LmltYWdlJiYwIT09dC5pbWFnZS5uYW1lLmxlbmd0aH0pKX0sdGUuZmFjdG9yeT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRlP3Q6dGUuZnJvbVN0cmluZyh0KX0sdGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnNlY3Rpb25zLmxlbmd0aD8iIjp0aGlzLnNlY3Rpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dH0pKS5qb2luKCIiKX0sdGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bImZvcm1hdCJdLGU9MCxyPXRoaXMuc2VjdGlvbnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKG4uaW1hZ2UpdC5wdXNoKFsiaW1hZ2UiLG4uaW1hZ2UubmFtZV0pO2Vsc2V7dC5wdXNoKG4udGV4dCk7dmFyIGk9e307bi5mb250U3RhY2smJihpWyJ0ZXh0LWZvbnQiXT1bImxpdGVyYWwiLG4uZm9udFN0YWNrLnNwbGl0KCIsIildKSxuLnNjYWxlJiYoaVsiZm9udC1zY2FsZSJdPW4uc2NhbGUpLG4udGV4dENvbG9yJiYoaVsidGV4dC1jb2xvciJdPVsicmdiYSJdLmNvbmNhdChuLnRleHRDb2xvci50b0FycmF5KCkpKSx0LnB1c2goaSl9fXJldHVybiB0fTt2YXIgZWU9ZnVuY3Rpb24odCl7dGhpcy5uYW1lPXQubmFtZSx0aGlzLmF2YWlsYWJsZT10LmF2YWlsYWJsZX07ZnVuY3Rpb24gcmUodCxlLHIsbil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wJiZ0PD0yNTUmJiJudW1iZXIiPT10eXBlb2YgZSYmZT49MCYmZTw9MjU1JiYibnVtYmVyIj09dHlwZW9mIHImJnI+PTAmJnI8PTI1NT92b2lkIDA9PT1ufHwibnVtYmVyIj09dHlwZW9mIG4mJm4+PTAmJm48PTE/bnVsbDoiSW52YWxpZCByZ2JhIHZhbHVlIFsiK1t0LGUscixuXS5qb2luKCIsICIpKyJdOiAnYScgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEuIjoiSW52YWxpZCByZ2JhIHZhbHVlIFsiKygibnVtYmVyIj09dHlwZW9mIG4/W3QsZSxyLG5dOlt0LGUscl0pLmpvaW4oIiwgIikrIl06ICdyJywgJ2cnLCBhbmQgJ2InIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUuIn1mdW5jdGlvbiBuZSh0KXtpZihudWxsPT09dClyZXR1cm4hMDtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuITA7aWYoImJvb2xlYW4iPT10eXBlb2YgdClyZXR1cm4hMDtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIEt0KXJldHVybiEwO2lmKHQgaW5zdGFuY2VvZiBRdClyZXR1cm4hMDtpZih0IGluc3RhbmNlb2YgdGUpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIGVlKXJldHVybiEwO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpaWYoIW5lKHJbZV0pKXJldHVybiExO3JldHVybiEwfWlmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHZhciBuIGluIHQpaWYoIW5lKHRbbl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGllKHQpe2lmKG51bGw9PT10KXJldHVybiBPdDtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIFJ0O2lmKCJib29sZWFuIj09dHlwZW9mIHQpcmV0dXJuIEZ0O2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gRHQ7aWYodCBpbnN0YW5jZW9mIEt0KXJldHVybiBCdDtpZih0IGluc3RhbmNlb2YgUXQpcmV0dXJuIFV0O2lmKHQgaW5zdGFuY2VvZiB0ZSlyZXR1cm4gVnQ7aWYodCBpbnN0YW5jZW9mIGVlKXJldHVybiBxdDtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aWUoaVtuXSk7aWYoZSl7aWYoZT09PWEpY29udGludWU7ZT1qdDticmVha31lPWF9cmV0dXJuIEh0KGV8fGp0LHIpfXJldHVybiBOdH1mdW5jdGlvbiBhZSh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbD09PXQ/IiI6InN0cmluZyI9PT1lfHwibnVtYmVyIj09PWV8fCJib29sZWFuIj09PWU/U3RyaW5nKHQpOnQgaW5zdGFuY2VvZiBLdHx8dCBpbnN0YW5jZW9mIHRlfHx0IGluc3RhbmNlb2YgZWU/dC50b1N0cmluZygpOkpTT04uc3RyaW5naWZ5KHQpfWVlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGVlLmZyb21TdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/bmV3IGVlKHtuYW1lOnQsYXZhaWxhYmxlOiExfSk6bnVsbH0sZWUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiaW1hZ2UiLHRoaXMubmFtZV19O3ZhciBvZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMudmFsdWU9ZX07b2UucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIidsaXRlcmFsJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO2lmKCFuZSh0WzFdKSlyZXR1cm4gZS5lcnJvcigiaW52YWxpZCB2YWx1ZSIpO3ZhciByPXRbMV0sbj1pZShyKSxpPWUuZXhwZWN0ZWRUeXBlO3JldHVybiJhcnJheSIhPT1uLmtpbmR8fDAhPT1uLk58fCFpfHwiYXJyYXkiIT09aS5raW5kfHwibnVtYmVyIj09dHlwZW9mIGkuTiYmMCE9PWkuTnx8KG49aSksbmV3IG9lKG4scil9LG9lLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSxvZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKCl7fSxvZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiEwfSxvZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuImFycmF5Ij09PXRoaXMudHlwZS5raW5kfHwib2JqZWN0Ij09PXRoaXMudHlwZS5raW5kP1sibGl0ZXJhbCIsdGhpcy52YWx1ZV06dGhpcy52YWx1ZSBpbnN0YW5jZW9mIEt0P1sicmdiYSJdLmNvbmNhdCh0aGlzLnZhbHVlLnRvQXJyYXkoKSk6dGhpcy52YWx1ZSBpbnN0YW5jZW9mIHRlP3RoaXMudmFsdWUuc2VyaWFsaXplKCk6dGhpcy52YWx1ZX07dmFyIHNlPWZ1bmN0aW9uKHQpe3RoaXMubmFtZT0iRXhwcmVzc2lvbkV2YWx1YXRpb25FcnJvciIsdGhpcy5tZXNzYWdlPXR9O3NlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlfTt2YXIgbGU9e3N0cmluZzpSdCxudW1iZXI6RHQsYm9vbGVhbjpGdCxvYmplY3Q6TnR9LGNlPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O2NlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByLG49MSxpPXRbMF07aWYoImFycmF5Ij09PWkpe3ZhciBhLG87aWYodC5sZW5ndGg+Mil7dmFyIHM9dFsxXTtpZigic3RyaW5nIiE9dHlwZW9mIHN8fCEocyBpbiBsZSl8fCJvYmplY3QiPT09cylyZXR1cm4gZS5lcnJvcignVGhlIGl0ZW0gdHlwZSBhcmd1bWVudCBvZiAiYXJyYXkiIG11c3QgYmUgb25lIG9mIHN0cmluZywgbnVtYmVyLCBib29sZWFuJywxKTthPWxlW3NdLG4rK31lbHNlIGE9anQ7aWYodC5sZW5ndGg+Myl7aWYobnVsbCE9PXRbMl0mJigibnVtYmVyIiE9dHlwZW9mIHRbMl18fHRbMl08MHx8dFsyXSE9PU1hdGguZmxvb3IodFsyXSkpKXJldHVybiBlLmVycm9yKCdUaGUgbGVuZ3RoIGFyZ3VtZW50IHRvICJhcnJheSIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgbGl0ZXJhbCcsMik7bz10WzJdLG4rK31yPUh0KGEsbyl9ZWxzZSByPWxlW2ldO2Zvcih2YXIgbD1bXTtuPHQubGVuZ3RoO24rKyl7dmFyIGM9ZS5wYXJzZSh0W25dLG4sanQpO2lmKCFjKXJldHVybiBudWxsO2wucHVzaChjKX1yZXR1cm4gbmV3IGNlKHIsbCl9LGNlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuYXJncy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLmFyZ3NbZV0uZXZhbHVhdGUodCk7aWYoIVd0KHRoaXMudHlwZSxpZShyKSkpcmV0dXJuIHI7aWYoZT09PXRoaXMuYXJncy5sZW5ndGgtMSl0aHJvdyBuZXcgc2UoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgIitHdCh0aGlzLnR5cGUpKyIsIGJ1dCBmb3VuZCAiK0d0KGllKHIpKSsiIGluc3RlYWQuIil9cmV0dXJuIG51bGx9LGNlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGNlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXJncy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpfSxjZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50eXBlLGU9W3Qua2luZF07aWYoImFycmF5Ij09PXQua2luZCl7dmFyIHI9dC5pdGVtVHlwZTtpZigic3RyaW5nIj09PXIua2luZHx8Im51bWJlciI9PT1yLmtpbmR8fCJib29sZWFuIj09PXIua2luZCl7ZS5wdXNoKHIua2luZCk7dmFyIG49dC5OOygibnVtYmVyIj09dHlwZW9mIG58fHRoaXMuYXJncy5sZW5ndGg+MSkmJmUucHVzaChuKX19cmV0dXJuIGUuY29uY2F0KHRoaXMuYXJncy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpKX07dmFyIHVlPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1WdCx0aGlzLnNlY3Rpb25zPXR9O3VlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByPXRbMV07aWYoIUFycmF5LmlzQXJyYXkocikmJiJvYmplY3QiPT10eXBlb2YgcilyZXR1cm4gZS5lcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBpbWFnZSBvciB0ZXh0IHNlY3Rpb24uIik7Zm9yKHZhciBuPVtdLGk9ITEsYT0xO2E8PXQubGVuZ3RoLTE7KythKXt2YXIgbz10W2FdO2lmKGkmJiJvYmplY3QiPT10eXBlb2YgbyYmIUFycmF5LmlzQXJyYXkobykpe2k9ITE7dmFyIHM9bnVsbDtpZihvWyJmb250LXNjYWxlIl0mJiEocz1lLnBhcnNlKG9bImZvbnQtc2NhbGUiXSwxLER0KSkpcmV0dXJuIG51bGw7dmFyIGw9bnVsbDtpZihvWyJ0ZXh0LWZvbnQiXSYmIShsPWUucGFyc2Uob1sidGV4dC1mb250Il0sMSxIdChSdCkpKSlyZXR1cm4gbnVsbDt2YXIgYz1udWxsO2lmKG9bInRleHQtY29sb3IiXSYmIShjPWUucGFyc2Uob1sidGV4dC1jb2xvciJdLDEsQnQpKSlyZXR1cm4gbnVsbDt2YXIgdT1uW24ubGVuZ3RoLTFdO3Uuc2NhbGU9cyx1LmZvbnQ9bCx1LnRleHRDb2xvcj1jfWVsc2V7dmFyIGY9ZS5wYXJzZSh0W2FdLDEsanQpO2lmKCFmKXJldHVybiBudWxsO3ZhciBoPWYudHlwZS5raW5kO2lmKCJzdHJpbmciIT09aCYmInZhbHVlIiE9PWgmJiJudWxsIiE9PWgmJiJyZXNvbHZlZEltYWdlIiE9PWgpcmV0dXJuIGUuZXJyb3IoIkZvcm1hdHRlZCB0ZXh0IHR5cGUgbXVzdCBiZSAnc3RyaW5nJywgJ3ZhbHVlJywgJ2ltYWdlJyBvciAnbnVsbCcuIik7aT0hMCxuLnB1c2goe2NvbnRlbnQ6ZixzY2FsZTpudWxsLGZvbnQ6bnVsbCx0ZXh0Q29sb3I6bnVsbH0pfX1yZXR1cm4gbmV3IHVlKG4pfSx1ZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB0ZSh0aGlzLnNlY3Rpb25zLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS5jb250ZW50LmV2YWx1YXRlKHQpO3JldHVybiBpZShyKT09PXF0P25ldyAkdCgiIixyLG51bGwsbnVsbCxudWxsKTpuZXcgJHQoYWUociksbnVsbCxlLnNjYWxlP2Uuc2NhbGUuZXZhbHVhdGUodCk6bnVsbCxlLmZvbnQ/ZS5mb250LmV2YWx1YXRlKHQpLmpvaW4oIiwiKTpudWxsLGUudGV4dENvbG9yP2UudGV4dENvbG9yLmV2YWx1YXRlKHQpOm51bGwpfSkpKX0sdWUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuc2VjdGlvbnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO3Qobi5jb250ZW50KSxuLnNjYWxlJiZ0KG4uc2NhbGUpLG4uZm9udCYmdChuLmZvbnQpLG4udGV4dENvbG9yJiZ0KG4udGV4dENvbG9yKX19LHVlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHVlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9WyJmb3JtYXQiXSxlPTAscj10aGlzLnNlY3Rpb25zO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTt0LnB1c2gobi5jb250ZW50LnNlcmlhbGl6ZSgpKTt2YXIgaT17fTtuLnNjYWxlJiYoaVsiZm9udC1zY2FsZSJdPW4uc2NhbGUuc2VyaWFsaXplKCkpLG4uZm9udCYmKGlbInRleHQtZm9udCJdPW4uZm9udC5zZXJpYWxpemUoKSksbi50ZXh0Q29sb3ImJihpWyJ0ZXh0LWNvbG9yIl09bi50ZXh0Q29sb3Iuc2VyaWFsaXplKCkpLHQucHVzaChpKX1yZXR1cm4gdH07dmFyIGZlPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1xdCx0aGlzLmlucHV0PXR9O2ZlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCB0d28gYXJndW1lbnRzLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLFJ0KTtyZXR1cm4gcj9uZXcgZmUocik6ZS5lcnJvcigiTm8gaW1hZ2UgbmFtZSBwcm92aWRlZC4iKX0sZmUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCkscj1lZS5mcm9tU3RyaW5nKGUpO3JldHVybiByJiZ0LmF2YWlsYWJsZUltYWdlcyYmKHIuYXZhaWxhYmxlPXQuYXZhaWxhYmxlSW1hZ2VzLmluZGV4T2YoZSk+LTEpLHJ9LGZlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KX0sZmUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZmUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiaW1hZ2UiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldfTt2YXIgaGU9eyJ0by1ib29sZWFuIjpGdCwidG8tY29sb3IiOkJ0LCJ0by1udW1iZXIiOkR0LCJ0by1zdHJpbmciOlJ0fSxwZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtwZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKTt2YXIgcj10WzBdO2lmKCgidG8tYm9vbGVhbiI9PT1yfHwidG8tc3RyaW5nIj09PXIpJiYyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIG9uZSBhcmd1bWVudC4iKTtmb3IodmFyIG49aGVbcl0saT1bXSxhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPWUucGFyc2UodFthXSxhLGp0KTtpZighbylyZXR1cm4gbnVsbDtpLnB1c2gobyl9cmV0dXJuIG5ldyBwZShuLGkpfSxwZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iPT09dGhpcy50eXBlLmtpbmQpcmV0dXJuIEJvb2xlYW4odGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKTtpZigiY29sb3IiPT09dGhpcy50eXBlLmtpbmQpe2Zvcih2YXIgZSxyLG49MCxpPXRoaXMuYXJncztuPGkubGVuZ3RoO24rPTEpe2lmKHI9bnVsbCwoZT1pW25dLmV2YWx1YXRlKHQpKWluc3RhbmNlb2YgS3QpcmV0dXJuIGU7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgYT10LnBhcnNlQ29sb3IoZSk7aWYoYSlyZXR1cm4gYX1lbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkmJiEocj1lLmxlbmd0aDwzfHxlLmxlbmd0aD40PyJJbnZhbGlkIHJiZ2EgdmFsdWUgIitKU09OLnN0cmluZ2lmeShlKSsiOiBleHBlY3RlZCBhbiBhcnJheSBjb250YWluaW5nIGVpdGhlciB0aHJlZSBvciBmb3VyIG51bWVyaWMgdmFsdWVzLiI6cmUoZVswXSxlWzFdLGVbMl0sZVszXSkpKXJldHVybiBuZXcgS3QoZVswXS8yNTUsZVsxXS8yNTUsZVsyXS8yNTUsZVszXSl9dGhyb3cgbmV3IHNlKHJ8fCJDb3VsZCBub3QgcGFyc2UgY29sb3IgZnJvbSB2YWx1ZSAnIisoInN0cmluZyI9PXR5cGVvZiBlP2U6U3RyaW5nKEpTT04uc3RyaW5naWZ5KGUpKSkrIiciKX1pZigibnVtYmVyIj09PXRoaXMudHlwZS5raW5kKXtmb3IodmFyIG89bnVsbCxzPTAsbD10aGlzLmFyZ3M7czxsLmxlbmd0aDtzKz0xKXtpZihudWxsPT09KG89bFtzXS5ldmFsdWF0ZSh0KSkpcmV0dXJuIDA7dmFyIGM9TnVtYmVyKG8pO2lmKCFpc05hTihjKSlyZXR1cm4gY310aHJvdyBuZXcgc2UoIkNvdWxkIG5vdCBjb252ZXJ0ICIrSlNPTi5zdHJpbmdpZnkobykrIiB0byBudW1iZXIuIil9cmV0dXJuImZvcm1hdHRlZCI9PT10aGlzLnR5cGUua2luZD90ZS5mcm9tU3RyaW5nKGFlKHRoaXMuYXJnc1swXS5ldmFsdWF0ZSh0KSkpOiJyZXNvbHZlZEltYWdlIj09PXRoaXMudHlwZS5raW5kP2VlLmZyb21TdHJpbmcoYWUodGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKSk6YWUodGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKX0scGUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0scGUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcmdzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5vdXRwdXREZWZpbmVkKCl9KSl9LHBlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtpZigiZm9ybWF0dGVkIj09PXRoaXMudHlwZS5raW5kKXJldHVybiBuZXcgdWUoW3tjb250ZW50OnRoaXMuYXJnc1swXSxzY2FsZTpudWxsLGZvbnQ6bnVsbCx0ZXh0Q29sb3I6bnVsbH1dKS5zZXJpYWxpemUoKTtpZigicmVzb2x2ZWRJbWFnZSI9PT10aGlzLnR5cGUua2luZClyZXR1cm4gbmV3IGZlKHRoaXMuYXJnc1swXSkuc2VyaWFsaXplKCk7dmFyIHQ9WyJ0by0iK3RoaXMudHlwZS5raW5kXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pKSx0fTt2YXIgZGU9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdLGdlPWZ1bmN0aW9uKCl7dGhpcy5nbG9iYWxzPW51bGwsdGhpcy5mZWF0dXJlPW51bGwsdGhpcy5mZWF0dXJlU3RhdGU9bnVsbCx0aGlzLmZvcm1hdHRlZFNlY3Rpb249bnVsbCx0aGlzLl9wYXJzZUNvbG9yQ2FjaGU9e30sdGhpcy5hdmFpbGFibGVJbWFnZXM9bnVsbCx0aGlzLmNhbm9uaWNhbD1udWxsfTtnZS5wcm90b3R5cGUuaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlJiYiaWQiaW4gdGhpcy5mZWF0dXJlP3RoaXMuZmVhdHVyZS5pZDpudWxsfSxnZS5wcm90b3R5cGUuZ2VvbWV0cnlUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZT8ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmVhdHVyZS50eXBlP2RlW3RoaXMuZmVhdHVyZS50eXBlXTp0aGlzLmZlYXR1cmUudHlwZTpudWxsfSxnZS5wcm90b3R5cGUuZ2VvbWV0cnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlJiYiZ2VvbWV0cnkiaW4gdGhpcy5mZWF0dXJlP3RoaXMuZmVhdHVyZS5nZW9tZXRyeTpudWxsfSxnZS5wcm90b3R5cGUuY2Fub25pY2FsSUQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5vbmljYWx9LGdlLnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLnByb3BlcnRpZXN8fHt9fSxnZS5wcm90b3R5cGUucGFyc2VDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJzZUNvbG9yQ2FjaGVbdF07cmV0dXJuIGV8fChlPXRoaXMuX3BhcnNlQ29sb3JDYWNoZVt0XT1LdC5wYXJzZSh0KSksZX07dmFyIG1lPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuX2V2YWx1YXRlPXIsdGhpcy5hcmdzPW59O21lLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZhbHVhdGUodCx0aGlzLmFyZ3MpfSxtZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxtZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxtZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMubmFtZV0uY29uY2F0KHRoaXMuYXJncy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpKX0sbWUucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRbMF0saT1tZS5kZWZpbml0aW9uc1tuXTtpZighaSlyZXR1cm4gZS5lcnJvcignVW5rbm93biBleHByZXNzaW9uICInK24rJyIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCk7Zm9yKHZhciBhPUFycmF5LmlzQXJyYXkoaSk/aVswXTppLnR5cGUsbz1BcnJheS5pc0FycmF5KGkpP1tbaVsxXSxpWzJdXV06aS5vdmVybG9hZHMscz1vLmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXTtyZXR1cm4hQXJyYXkuaXNBcnJheShyKXx8ci5sZW5ndGg9PT10Lmxlbmd0aC0xfSkpLGw9bnVsbCxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPWZbMF0scD1mWzFdO2w9bmV3IEJlKGUucmVnaXN0cnksZS5wYXRoLG51bGwsZS5zY29wZSk7Zm9yKHZhciBkPVtdLGc9ITEsbT0xO208dC5sZW5ndGg7bSsrKXt2YXIgdj10W21dLHk9QXJyYXkuaXNBcnJheShoKT9oW20tMV06aC50eXBlLHg9bC5wYXJzZSh2LDErZC5sZW5ndGgseSk7aWYoIXgpe2c9ITA7YnJlYWt9ZC5wdXNoKHgpfWlmKCFnKWlmKEFycmF5LmlzQXJyYXkoaCkmJmgubGVuZ3RoIT09ZC5sZW5ndGgpbC5lcnJvcigiRXhwZWN0ZWQgIitoLmxlbmd0aCsiIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrZC5sZW5ndGgrIiBpbnN0ZWFkLiIpO2Vsc2V7Zm9yKHZhciBiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciBfPUFycmF5LmlzQXJyYXkoaCk/aFtiXTpoLnR5cGUsdz1kW2JdO2wuY29uY2F0KGIrMSkuY2hlY2tTdWJ0eXBlKF8sdy50eXBlKX1pZigwPT09bC5lcnJvcnMubGVuZ3RoKXJldHVybiBuZXcgbWUobixhLHAsZCl9fWlmKDE9PT1zLmxlbmd0aCkocj1lLmVycm9ycykucHVzaC5hcHBseShyLGwuZXJyb3JzKTtlbHNle2Zvcih2YXIgVD0ocy5sZW5ndGg/czpvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBlPXRbMF0sQXJyYXkuaXNBcnJheShlKT8iKCIrZS5tYXAoR3QpLmpvaW4oIiwgIikrIikiOiIoIitHdChlLnR5cGUpKyIuLi4pIn0pKS5qb2luKCIgfCAiKSxrPVtdLE09MTtNPHQubGVuZ3RoO00rKyl7dmFyIEE9ZS5wYXJzZSh0W01dLDEray5sZW5ndGgpO2lmKCFBKXJldHVybiBudWxsO2sucHVzaChHdChBLnR5cGUpKX1lLmVycm9yKCJFeHBlY3RlZCBhcmd1bWVudHMgb2YgdHlwZSAiK1QrIiwgYnV0IGZvdW5kICgiK2suam9pbigiLCAiKSsiKSBpbnN0ZWFkLiIpfXJldHVybiBudWxsfSxtZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBtZS5kZWZpbml0aW9ucz1lLGUpdFtyXT1tZX07dmFyIHZlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9VXQsdGhpcy5sb2NhbGU9cix0aGlzLmNhc2VTZW5zaXRpdmU9dCx0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZT1lfTtmdW5jdGlvbiB5ZSh0LGUpe3RbMF09TWF0aC5taW4odFswXSxlWzBdKSx0WzFdPU1hdGgubWluKHRbMV0sZVsxXSksdFsyXT1NYXRoLm1heCh0WzJdLGVbMF0pLHRbM109TWF0aC5tYXgodFszXSxlWzFdKX1mdW5jdGlvbiB4ZSh0LGUpe3JldHVybiEodFswXTw9ZVswXXx8dFsyXT49ZVsyXXx8dFsxXTw9ZVsxXXx8dFszXT49ZVszXSl9ZnVuY3Rpb24gYmUodCxlKXt2YXIgcj0oMTgwK3RbMF0pLzM2MCxuPSgxODAtMTgwL01hdGguUEkqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K3RbMV0qTWF0aC5QSS8zNjApKSkvMzYwLGk9TWF0aC5wb3coMixlLnopO3JldHVybltNYXRoLnJvdW5kKHIqaSo4MTkyKSxNYXRoLnJvdW5kKG4qaSo4MTkyKV19ZnVuY3Rpb24gX2UodCxlLHIpe3JldHVybiBlWzFdPnRbMV0hPXJbMV0+dFsxXSYmdFswXTwoclswXS1lWzBdKSoodFsxXS1lWzFdKS8oclsxXS1lWzFdKStlWzBdfWZ1bmN0aW9uIHdlKHQsZSl7Zm9yKHZhciByLG4saSxhLG8scyxsLGM9ITEsdT0wLGY9ZS5sZW5ndGg7dTxmO3UrKylmb3IodmFyIGg9ZVt1XSxwPTAsZD1oLmxlbmd0aDtwPGQtMTtwKyspe2lmKChhPShyPXQpWzBdLShuPWhbcF0pWzBdKSoobD1yWzFdLShpPWhbcCsxXSlbMV0pLShzPXJbMF0taVswXSkqKG89clsxXS1uWzFdKT09MCYmYSpzPD0wJiZvKmw8PTApcmV0dXJuITE7X2UodCxoW3BdLGhbcCsxXSkmJihjPSFjKX1yZXR1cm4gY31mdW5jdGlvbiBUZSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKHdlKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24ga2UodCxlLHIsbil7dmFyIGk9blswXS1yWzBdLGE9blsxXS1yWzFdLG89KHRbMF0tclswXSkqYS1pKih0WzFdLXJbMV0pLHM9KGVbMF0tclswXSkqYS1pKihlWzFdLXJbMV0pO3JldHVybiBvPjAmJnM8MHx8bzwwJiZzPjB9ZnVuY3Rpb24gTWUodCxlLHIpe2Zvcih2YXIgbj0wLGk9cjtuPGkubGVuZ3RoO24rPTEpZm9yKHZhciBhPWlbbl0sbz0wO288YS5sZW5ndGgtMTsrK28paWYoMCE9KGY9Wyh1PWFbbysxXSlbMF0tKGM9YVtvXSlbMF0sdVsxXS1jWzFdXSlbMF0qKGg9WyhsPWUpWzBdLShzPXQpWzBdLGxbMV0tc1sxXV0pWzFdLWZbMV0qaFswXSYma2UocyxsLGMsdSkmJmtlKGMsdSxzLGwpKXJldHVybiEwO3ZhciBzLGwsYyx1LGYsaDtyZXR1cm4hMX1mdW5jdGlvbiBBZSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKCF3ZSh0W3JdLGUpKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGgtMTsrK24paWYoTWUodFtuXSx0W24rMV0sZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gU2UodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZihBZSh0LGVbcl0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEVlKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9W10sbz0wO288dFtpXS5sZW5ndGg7bysrKXt2YXIgcz1iZSh0W2ldW29dLHIpO3llKGUscyksYS5wdXNoKHMpfW4ucHVzaChhKX1yZXR1cm4gbn1mdW5jdGlvbiBDZSh0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9RWUodFtpXSxlLHIpO24ucHVzaChhKX1yZXR1cm4gbn1mdW5jdGlvbiBMZSh0LGUscixuKXtpZih0WzBdPHJbMF18fHRbMF0+clsyXSl7dmFyIGk9LjUqbixhPXRbMF0tclswXT5pPy1uOnJbMF0tdFswXT5pP246MDswPT09YSYmKGE9dFswXS1yWzJdPmk/LW46clsyXS10WzBdPmk/bjowKSx0WzBdKz1hfXllKGUsdCl9ZnVuY3Rpb24gSWUodCxlLHIsbil7Zm9yKHZhciBpPTgxOTIqTWF0aC5wb3coMixuLnopLGE9WzgxOTIqbi54LDgxOTIqbi55XSxvPVtdLHM9MCxsPXQ7czxsLmxlbmd0aDtzKz0xKWZvcih2YXIgYz0wLHU9bFtzXTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY10saD1bZi54K2FbMF0sZi55K2FbMV1dO0xlKGgsZSxyLGkpLG8ucHVzaChoKX1yZXR1cm4gb31mdW5jdGlvbiBQZSh0LGUscixuKXtmb3IodmFyIGksYT04MTkyKk1hdGgucG93KDIsbi56KSxvPVs4MTkyKm4ueCw4MTkyKm4ueV0scz1bXSxsPTAsYz10O2w8Yy5sZW5ndGg7bCs9MSl7Zm9yKHZhciB1PVtdLGY9MCxoPWNbbF07ZjxoLmxlbmd0aDtmKz0xKXt2YXIgcD1oW2ZdLGQ9W3AueCtvWzBdLHAueStvWzFdXTt5ZShlLGQpLHUucHVzaChkKX1zLnB1c2godSl9aWYoZVsyXS1lWzBdPD1hLzIpeyhpPWUpWzBdPWlbMV09MS8wLGlbMl09aVszXT0tMS8wO2Zvcih2YXIgZz0wLG09cztnPG0ubGVuZ3RoO2crPTEpZm9yKHZhciB2PTAseT1tW2ddO3Y8eS5sZW5ndGg7dis9MSlMZSh5W3ZdLGUscixhKX1yZXR1cm4gc312ZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgb25lIGFyZ3VtZW50LiIpO3ZhciByPXRbMV07aWYoIm9iamVjdCIhPXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpKXJldHVybiBlLmVycm9yKCJDb2xsYXRvciBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LiIpO3ZhciBuPWUucGFyc2Uodm9pZCAwIT09clsiY2FzZS1zZW5zaXRpdmUiXSYmclsiY2FzZS1zZW5zaXRpdmUiXSwxLEZ0KTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1lLnBhcnNlKHZvaWQgMCE9PXJbImRpYWNyaXRpYy1zZW5zaXRpdmUiXSYmclsiZGlhY3JpdGljLXNlbnNpdGl2ZSJdLDEsRnQpO2lmKCFpKXJldHVybiBudWxsO3ZhciBhPW51bGw7cmV0dXJuIHIubG9jYWxlJiYhKGE9ZS5wYXJzZShyLmxvY2FsZSwxLFJ0KSk/bnVsbDpuZXcgdmUobixpLGEpfSx2ZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBRdCh0aGlzLmNhc2VTZW5zaXRpdmUuZXZhbHVhdGUodCksdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuZXZhbHVhdGUodCksdGhpcy5sb2NhbGU/dGhpcy5sb2NhbGUuZXZhbHVhdGUodCk6bnVsbCl9LHZlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmNhc2VTZW5zaXRpdmUpLHQodGhpcy5kaWFjcml0aWNTZW5zaXRpdmUpLHRoaXMubG9jYWxlJiZ0KHRoaXMubG9jYWxlKX0sdmUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdmUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0WyJjYXNlLXNlbnNpdGl2ZSJdPXRoaXMuY2FzZVNlbnNpdGl2ZS5zZXJpYWxpemUoKSx0WyJkaWFjcml0aWMtc2Vuc2l0aXZlIl09dGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuc2VyaWFsaXplKCksdGhpcy5sb2NhbGUmJih0LmxvY2FsZT10aGlzLmxvY2FsZS5zZXJpYWxpemUoKSksWyJjb2xsYXRvciIsdF19O3ZhciB6ZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1GdCx0aGlzLmdlb2pzb249dCx0aGlzLmdlb21ldHJpZXM9ZX07ZnVuY3Rpb24gT2UodCl7aWYodCBpbnN0YW5jZW9mIG1lKXtpZigiZ2V0Ij09PXQubmFtZSYmMT09PXQuYXJncy5sZW5ndGgpcmV0dXJuITE7aWYoImZlYXR1cmUtc3RhdGUiPT09dC5uYW1lKXJldHVybiExO2lmKCJoYXMiPT09dC5uYW1lJiYxPT09dC5hcmdzLmxlbmd0aClyZXR1cm4hMTtpZigicHJvcGVydGllcyI9PT10Lm5hbWV8fCJnZW9tZXRyeS10eXBlIj09PXQubmFtZXx8ImlkIj09PXQubmFtZSlyZXR1cm4hMTtpZigvXmZpbHRlci0vLnRlc3QodC5uYW1lKSlyZXR1cm4hMX1pZih0IGluc3RhbmNlb2YgemUpcmV0dXJuITE7dmFyIGU9ITA7cmV0dXJuIHQuZWFjaENoaWxkKChmdW5jdGlvbih0KXtlJiYhT2UodCkmJihlPSExKX0pKSxlfWZ1bmN0aW9uIERlKHQpe2lmKHQgaW5zdGFuY2VvZiBtZSYmImZlYXR1cmUtc3RhdGUiPT09dC5uYW1lKXJldHVybiExO3ZhciBlPSEwO3JldHVybiB0LmVhY2hDaGlsZCgoZnVuY3Rpb24odCl7ZSYmIURlKHQpJiYoZT0hMSl9KSksZX1mdW5jdGlvbiBSZSh0LGUpe2lmKHQgaW5zdGFuY2VvZiBtZSYmZS5pbmRleE9mKHQubmFtZSk+PTApcmV0dXJuITE7dmFyIHI9ITA7cmV0dXJuIHQuZWFjaENoaWxkKChmdW5jdGlvbih0KXtyJiYhUmUodCxlKSYmKHI9ITEpfSkpLHJ9emUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIid3aXRoaW4nIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7aWYobmUodFsxXSkpe3ZhciByPXRbMV07aWYoIkZlYXR1cmVDb2xsZWN0aW9uIj09PXIudHlwZSlmb3IodmFyIG49MDtuPHIuZmVhdHVyZXMubGVuZ3RoOysrbil7dmFyIGk9ci5mZWF0dXJlc1tuXS5nZW9tZXRyeS50eXBlO2lmKCJQb2x5Z29uIj09PWl8fCJNdWx0aVBvbHlnb24iPT09aSlyZXR1cm4gbmV3IHplKHIsci5mZWF0dXJlc1tuXS5nZW9tZXRyeSl9ZWxzZSBpZigiRmVhdHVyZSI9PT1yLnR5cGUpe3ZhciBhPXIuZ2VvbWV0cnkudHlwZTtpZigiUG9seWdvbiI9PT1hfHwiTXVsdGlQb2x5Z29uIj09PWEpcmV0dXJuIG5ldyB6ZShyLHIuZ2VvbWV0cnkpfWVsc2UgaWYoIlBvbHlnb24iPT09ci50eXBlfHwiTXVsdGlQb2x5Z29uIj09PXIudHlwZSlyZXR1cm4gbmV3IHplKHIscil9cmV0dXJuIGUuZXJyb3IoIid3aXRoaW4nIGV4cHJlc3Npb24gcmVxdWlyZXMgdmFsaWQgZ2VvanNvbiBvYmplY3QgdGhhdCBjb250YWlucyBwb2x5Z29uIGdlb21ldHJ5IHR5cGUuIil9LHplLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtpZihudWxsIT10Lmdlb21ldHJ5KCkmJm51bGwhPXQuY2Fub25pY2FsSUQoKSl7aWYoIlBvaW50Ij09PXQuZ2VvbWV0cnlUeXBlKCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9WzEvMCwxLzAsLTEvMCwtMS8wXSxuPVsxLzAsMS8wLC0xLzAsLTEvMF0saT10LmNhbm9uaWNhbElEKCk7aWYoIlBvbHlnb24iPT09ZS50eXBlKXt2YXIgYT1FZShlLmNvb3JkaW5hdGVzLG4saSksbz1JZSh0Lmdlb21ldHJ5KCkscixuLGkpO2lmKCF4ZShyLG4pKXJldHVybiExO2Zvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpaWYoIXdlKGxbc10sYSkpcmV0dXJuITF9aWYoIk11bHRpUG9seWdvbiI9PT1lLnR5cGUpe3ZhciBjPUNlKGUuY29vcmRpbmF0ZXMsbixpKSx1PUllKHQuZ2VvbWV0cnkoKSxyLG4saSk7aWYoIXhlKHIsbikpcmV0dXJuITE7Zm9yKHZhciBmPTAsaD11O2Y8aC5sZW5ndGg7Zis9MSlpZighVGUoaFtmXSxjKSlyZXR1cm4hMX1yZXR1cm4hMH0odCx0aGlzLmdlb21ldHJpZXMpO2lmKCJMaW5lU3RyaW5nIj09PXQuZ2VvbWV0cnlUeXBlKCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9WzEvMCwxLzAsLTEvMCwtMS8wXSxuPVsxLzAsMS8wLC0xLzAsLTEvMF0saT10LmNhbm9uaWNhbElEKCk7aWYoIlBvbHlnb24iPT09ZS50eXBlKXt2YXIgYT1FZShlLmNvb3JkaW5hdGVzLG4saSksbz1QZSh0Lmdlb21ldHJ5KCkscixuLGkpO2lmKCF4ZShyLG4pKXJldHVybiExO2Zvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpaWYoIUFlKGxbc10sYSkpcmV0dXJuITF9aWYoIk11bHRpUG9seWdvbiI9PT1lLnR5cGUpe3ZhciBjPUNlKGUuY29vcmRpbmF0ZXMsbixpKSx1PVBlKHQuZ2VvbWV0cnkoKSxyLG4saSk7aWYoIXhlKHIsbikpcmV0dXJuITE7Zm9yKHZhciBmPTAsaD11O2Y8aC5sZW5ndGg7Zis9MSlpZighU2UoaFtmXSxjKSlyZXR1cm4hMX1yZXR1cm4hMH0odCx0aGlzLmdlb21ldHJpZXMpfXJldHVybiExfSx6ZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKCl7fSx6ZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiEwfSx6ZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuWyJ3aXRoaW4iLHRoaXMuZ2VvanNvbl19O3ZhciBGZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1lLnR5cGUsdGhpcy5uYW1lPXQsdGhpcy5ib3VuZEV4cHJlc3Npb249ZX07RmUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGh8fCJzdHJpbmciIT10eXBlb2YgdFsxXSlyZXR1cm4gZS5lcnJvcigiJ3ZhcicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBzdHJpbmcgbGl0ZXJhbCBhcmd1bWVudC4iKTt2YXIgcj10WzFdO3JldHVybiBlLnNjb3BlLmhhcyhyKT9uZXcgRmUocixlLnNjb3BlLmdldChyKSk6ZS5lcnJvcignVW5rbm93biB2YXJpYWJsZSAiJytyKyciLiBNYWtlIHN1cmUgIicrcisnIiBoYXMgYmVlbiBib3VuZCBpbiBhbiBlbmNsb3NpbmcgImxldCIgZXhwcmVzc2lvbiBiZWZvcmUgdXNpbmcgaXQuJywxKX0sRmUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJvdW5kRXhwcmVzc2lvbi5ldmFsdWF0ZSh0KX0sRmUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30sRmUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRmUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsidmFyIix0aGlzLm5hbWVdfTt2YXIgQmU9ZnVuY3Rpb24odCxlLHIsbixpKXt2b2lkIDA9PT1lJiYoZT1bXSksdm9pZCAwPT09biYmKG49bmV3IHp0KSx2b2lkIDA9PT1pJiYoaT1bXSksdGhpcy5yZWdpc3RyeT10LHRoaXMucGF0aD1lLHRoaXMua2V5PWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iWyIrdCsiXSJ9KSkuam9pbigiIiksdGhpcy5zY29wZT1uLHRoaXMuZXJyb3JzPWksdGhpcy5leHBlY3RlZFR5cGU9cn07ZnVuY3Rpb24gTmUodCxlKXtmb3IodmFyIHIsbj10Lmxlbmd0aC0xLGk9MCxhPW4sbz0wO2k8PWE7KWlmKChyPXRbbz1NYXRoLmZsb29yKChpK2EpLzIpXSk8PWUpe2lmKG89PT1ufHxlPHRbbysxXSlyZXR1cm4gbztpPW8rMX1lbHNle2lmKCEocj5lKSl0aHJvdyBuZXcgc2UoIklucHV0IGlzIG5vdCBhIG51bWJlci4iKTthPW8tMX1yZXR1cm4gMH1CZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30pLGU/dGhpcy5jb25jYXQoZSxyLG4pLl9wYXJzZSh0LGkpOnRoaXMuX3BhcnNlKHQsaSl9LEJlLnByb3RvdHlwZS5fcGFyc2U9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSxyKXtyZXR1cm4iYXNzZXJ0Ij09PXI/bmV3IGNlKGUsW3RdKToiY29lcmNlIj09PXI/bmV3IHBlKGUsW3RdKTp0fWlmKG51bGwhPT10JiYic3RyaW5nIiE9dHlwZW9mIHQmJiJib29sZWFuIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdHx8KHQ9WyJsaXRlcmFsIix0XSksQXJyYXkuaXNBcnJheSh0KSl7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVycm9yKCdFeHBlY3RlZCBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFsibGl0ZXJhbCIsIFtdXS4nKTt2YXIgbj10WzBdO2lmKCJzdHJpbmciIT10eXBlb2YgbilyZXR1cm4gdGhpcy5lcnJvcigiRXhwcmVzc2lvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGJ1dCBmb3VuZCAiK3R5cGVvZiBuKycgaW5zdGVhZC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbLi4uXV0uJywwKSxudWxsO3ZhciBpPXRoaXMucmVnaXN0cnlbbl07aWYoaSl7dmFyIGE9aS5wYXJzZSh0LHRoaXMpO2lmKCFhKXJldHVybiBudWxsO2lmKHRoaXMuZXhwZWN0ZWRUeXBlKXt2YXIgbz10aGlzLmV4cGVjdGVkVHlwZSxzPWEudHlwZTtpZigic3RyaW5nIiE9PW8ua2luZCYmIm51bWJlciIhPT1vLmtpbmQmJiJib29sZWFuIiE9PW8ua2luZCYmIm9iamVjdCIhPT1vLmtpbmQmJiJhcnJheSIhPT1vLmtpbmR8fCJ2YWx1ZSIhPT1zLmtpbmQpaWYoImNvbG9yIiE9PW8ua2luZCYmImZvcm1hdHRlZCIhPT1vLmtpbmQmJiJyZXNvbHZlZEltYWdlIiE9PW8ua2luZHx8InZhbHVlIiE9PXMua2luZCYmInN0cmluZyIhPT1zLmtpbmQpe2lmKHRoaXMuY2hlY2tTdWJ0eXBlKG8scykpcmV0dXJuIG51bGx9ZWxzZSBhPXIoYSxvLGUudHlwZUFubm90YXRpb258fCJjb2VyY2UiKTtlbHNlIGE9cihhLG8sZS50eXBlQW5ub3RhdGlvbnx8ImFzc2VydCIpfWlmKCEoYSBpbnN0YW5jZW9mIG9lKSYmInJlc29sdmVkSW1hZ2UiIT09YS50eXBlLmtpbmQmJmZ1bmN0aW9uIHQoZSl7aWYoZSBpbnN0YW5jZW9mIEZlKXJldHVybiB0KGUuYm91bmRFeHByZXNzaW9uKTtpZihlIGluc3RhbmNlb2YgbWUmJiJlcnJvciI9PT1lLm5hbWUpcmV0dXJuITE7aWYoZSBpbnN0YW5jZW9mIHZlKXJldHVybiExO2lmKGUgaW5zdGFuY2VvZiB6ZSlyZXR1cm4hMTt2YXIgcj1lIGluc3RhbmNlb2YgcGV8fGUgaW5zdGFuY2VvZiBjZSxuPSEwO3JldHVybiBlLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7bj1yP24mJnQoZSk6biYmZSBpbnN0YW5jZW9mIG9lfSkpLCEhbiYmT2UoZSkmJlJlKGUsWyJ6b29tIiwiaGVhdG1hcC1kZW5zaXR5IiwibGluZS1wcm9ncmVzcyIsImFjY3VtdWxhdGVkIiwiaXMtc3VwcG9ydGVkLXNjcmlwdCJdKX0oYSkpe3ZhciBsPW5ldyBnZTt0cnl7YT1uZXcgb2UoYS50eXBlLGEuZXZhbHVhdGUobCkpfWNhdGNoKHQpe3JldHVybiB0aGlzLmVycm9yKHQubWVzc2FnZSksbnVsbH19cmV0dXJuIGF9cmV0dXJuIHRoaXMuZXJyb3IoJ1Vua25vd24gZXhwcmVzc2lvbiAiJytuKyciLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFsibGl0ZXJhbCIsIFsuLi5dXS4nLDApfXJldHVybiB0aGlzLmVycm9yKHZvaWQgMD09PXQ/Iid1bmRlZmluZWQnIHZhbHVlIGludmFsaWQuIFVzZSBudWxsIGluc3RlYWQuIjoib2JqZWN0Ij09dHlwZW9mIHQ/J0JhcmUgb2JqZWN0cyBpbnZhbGlkLiBVc2UgWyJsaXRlcmFsIiwgey4uLn1dIGluc3RlYWQuJzoiRXhwZWN0ZWQgYW4gYXJyYXksIGJ1dCBmb3VuZCAiK3R5cGVvZiB0KyIgaW5zdGVhZC4iKX0sQmUucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbih0LGUscil7dmFyIG49Im51bWJlciI9PXR5cGVvZiB0P3RoaXMucGF0aC5jb25jYXQodCk6dGhpcy5wYXRoLGk9cj90aGlzLnNjb3BlLmNvbmNhdChyKTp0aGlzLnNjb3BlO3JldHVybiBuZXcgQmUodGhpcy5yZWdpc3RyeSxuLGV8fG51bGwsaSx0aGlzLmVycm9ycyl9LEJlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO3ZhciBuPSIiK3RoaXMua2V5K2UubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iWyIrdCsiXSJ9KSkuam9pbigiIik7dGhpcy5lcnJvcnMucHVzaChuZXcgUHQobix0KSl9LEJlLnByb3RvdHlwZS5jaGVja1N1YnR5cGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1XdCh0LGUpO3JldHVybiByJiZ0aGlzLmVycm9yKHIpLHJ9O3ZhciBqZT1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5pbnB1dD1lLHRoaXMubGFiZWxzPVtdLHRoaXMub3V0cHV0cz1bXTtmb3IodmFyIG49MCxpPXI7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YVsxXTt0aGlzLmxhYmVscy5wdXNoKGFbMF0pLHRoaXMub3V0cHV0cy5wdXNoKG8pfX07ZnVuY3Rpb24gVWUodCxlLHIpe3JldHVybiB0KigxLXIpK2Uqcn1qZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoLTE8NClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYoKHQubGVuZ3RoLTEpJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxEdCk7aWYoIXIpcmV0dXJuIG51bGw7dmFyIG49W10saT1udWxsO2UuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKGk9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgYT0xO2E8dC5sZW5ndGg7YSs9Mil7dmFyIG89MT09PWE/LTEvMDp0W2FdLHM9dFthKzFdLGw9YSxjPWErMTtpZigibnVtYmVyIiE9dHlwZW9mIG8pcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgInN0ZXAiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsbCk7aWYobi5sZW5ndGgmJm5bbi5sZW5ndGgtMV1bMF0+PW8pcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgInN0ZXAiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsbCk7dmFyIHU9ZS5wYXJzZShzLGMsaSk7aWYoIXUpcmV0dXJuIG51bGw7aT1pfHx1LnR5cGUsbi5wdXNoKFtvLHVdKX1yZXR1cm4gbmV3IGplKGkscixuKX0samUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFiZWxzLHI9dGhpcy5vdXRwdXRzO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgbj10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKG48PWVbMF0pcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIGk9ZS5sZW5ndGg7cmV0dXJuIG4+PWVbaS0xXT9yW2ktMV0uZXZhbHVhdGUodCk6cltOZShlLG4pXS5ldmFsdWF0ZSh0KX0samUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV0pfSxqZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm91dHB1dHMuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKX0samUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bInN0ZXAiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLGU9MDtlPHRoaXMubGFiZWxzLmxlbmd0aDtlKyspZT4wJiZ0LnB1c2godGhpcy5sYWJlbHNbZV0pLHQucHVzaCh0aGlzLm91dHB1dHNbZV0uc2VyaWFsaXplKCkpO3JldHVybiB0fTt2YXIgVmU9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsbnVtYmVyOlVlLGNvbG9yOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IEt0KFVlKHQucixlLnIsciksVWUodC5nLGUuZyxyKSxVZSh0LmIsZS5iLHIpLFVlKHQuYSxlLmEscikpfSxhcnJheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0LG4pe3JldHVybiBVZSh0LGVbbl0scil9KSl9fSkscWU9Ni8yOSozKig2LzI5KSxIZT1NYXRoLlBJLzE4MCxHZT0xODAvTWF0aC5QSTtmdW5jdGlvbiBZZSh0KXtyZXR1cm4gdD4uMDA4ODU2NDUxNjc5MDM1NjMxP01hdGgucG93KHQsMS8zKTp0L3FlKzQvMjl9ZnVuY3Rpb24gV2UodCl7cmV0dXJuIHQ+Ni8yOT90KnQqdDpxZSoodC00LzI5KX1mdW5jdGlvbiBYZSh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFplKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIEplKHQpe3ZhciBlPVplKHQucikscj1aZSh0LmcpLG49WmUodC5iKSxpPVllKCguNDEyNDU2NCplKy4zNTc1NzYxKnIrLjE4MDQzNzUqbikvLjk1MDQ3KSxhPVllKCguMjEyNjcyOSplKy43MTUxNTIyKnIrLjA3MjE3NSpuKS8xKTtyZXR1cm57bDoxMTYqYS0xNixhOjUwMCooaS1hKSxiOjIwMCooYS1ZZSgoLjAxOTMzMzkqZSsuMTE5MTkyKnIrLjk1MDMwNDEqbikvMS4wODg4MykpLGFscGhhOnQuYX19ZnVuY3Rpb24gS2UodCl7dmFyIGU9KHQubCsxNikvMTE2LHI9aXNOYU4odC5hKT9lOmUrdC5hLzUwMCxuPWlzTmFOKHQuYik/ZTplLXQuYi8yMDA7cmV0dXJuIGU9MSpXZShlKSxyPS45NTA0NypXZShyKSxuPTEuMDg4ODMqV2UobiksbmV3IEt0KFhlKDMuMjQwNDU0MipyLTEuNTM3MTM4NSplLS40OTg1MzE0Km4pLFhlKC0uOTY5MjY2KnIrMS44NzYwMTA4KmUrLjA0MTU1NipuKSxYZSguMDU1NjQzNCpyLS4yMDQwMjU5KmUrMS4wNTcyMjUyKm4pLHQuYWxwaGEpfWZ1bmN0aW9uIFFlKHQsZSxyKXt2YXIgbj1lLXQ7cmV0dXJuIHQrcioobj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKX12YXIgJGU9e2ZvcndhcmQ6SmUscmV2ZXJzZTpLZSxpbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJue2w6VWUodC5sLGUubCxyKSxhOlVlKHQuYSxlLmEsciksYjpVZSh0LmIsZS5iLHIpLGFscGhhOlVlKHQuYWxwaGEsZS5hbHBoYSxyKX19fSx0cj17Zm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgZT1KZSh0KSxyPWUubCxuPWUuYSxpPWUuYixhPU1hdGguYXRhbjIoaSxuKSpHZTtyZXR1cm57aDphPDA/YSszNjA6YSxjOk1hdGguc3FydChuKm4raSppKSxsOnIsYWxwaGE6dC5hfX0scmV2ZXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmgqSGUscj10LmM7cmV0dXJuIEtlKHtsOnQubCxhOk1hdGguY29zKGUpKnIsYjpNYXRoLnNpbihlKSpyLGFscGhhOnQuYWxwaGF9KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybntoOlFlKHQuaCxlLmgsciksYzpVZSh0LmMsZS5jLHIpLGw6VWUodC5sLGUubCxyKSxhbHBoYTpVZSh0LmFscGhhLGUuYWxwaGEscil9fX0sZXI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsbGFiOiRlLGhjbDp0cn0pLHJyPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50eXBlPXQsdGhpcy5vcGVyYXRvcj1lLHRoaXMuaW50ZXJwb2xhdGlvbj1yLHRoaXMuaW5wdXQ9bix0aGlzLmxhYmVscz1bXSx0aGlzLm91dHB1dHM9W107Zm9yKHZhciBhPTAsbz1pO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXNbMV07dGhpcy5sYWJlbHMucHVzaChzWzBdKSx0aGlzLm91dHB1dHMucHVzaChsKX19O2Z1bmN0aW9uIG5yKHQsZSxyLG4pe3ZhciBpPW4tcixhPXQtcjtyZXR1cm4gMD09PWk/MDoxPT09ZT9hL2k6KE1hdGgucG93KGUsYSktMSkvKE1hdGgucG93KGUsaSktMSl9cnIuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0LGUsbixpKXt2YXIgYT0wO2lmKCJleHBvbmVudGlhbCI9PT10Lm5hbWUpYT1ucihlLHQuYmFzZSxuLGkpO2Vsc2UgaWYoImxpbmVhciI9PT10Lm5hbWUpYT1ucihlLDEsbixpKTtlbHNlIGlmKCJjdWJpYy1iZXppZXIiPT09dC5uYW1lKXt2YXIgbz10LmNvbnRyb2xQb2ludHM7YT1uZXcgcihvWzBdLG9bMV0sb1syXSxvWzNdKS5zb2x2ZShucihlLDEsbixpKSl9cmV0dXJuIGF9LHJyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dC5zbGljZSgzKTtpZighQXJyYXkuaXNBcnJheShuKXx8MD09PW4ubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBpbnRlcnBvbGF0aW9uIHR5cGUgZXhwcmVzc2lvbi4iLDEpO2lmKCJsaW5lYXIiPT09blswXSluPXtuYW1lOiJsaW5lYXIifTtlbHNlIGlmKCJleHBvbmVudGlhbCI9PT1uWzBdKXt2YXIgbz1uWzFdO2lmKCJudW1iZXIiIT10eXBlb2YgbylyZXR1cm4gZS5lcnJvcigiRXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBhIG51bWVyaWMgYmFzZS4iLDEsMSk7bj17bmFtZToiZXhwb25lbnRpYWwiLGJhc2U6b319ZWxzZXtpZigiY3ViaWMtYmV6aWVyIiE9PW5bMF0pcmV0dXJuIGUuZXJyb3IoIlVua25vd24gaW50ZXJwb2xhdGlvbiB0eXBlICIrU3RyaW5nKG5bMF0pLDEsMCk7dmFyIHM9bi5zbGljZSgxKTtpZig0IT09cy5sZW5ndGh8fHMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQ+MX0pKSlyZXR1cm4gZS5lcnJvcigiQ3ViaWMgYmV6aWVyIGludGVycG9sYXRpb24gcmVxdWlyZXMgZm91ciBudW1lcmljIGFyZ3VtZW50cyB3aXRoIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEuIiwxKTtuPXtuYW1lOiJjdWJpYy1iZXppZXIiLGNvbnRyb2xQb2ludHM6c319aWYodC5sZW5ndGgtMTw0KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgIisodC5sZW5ndGgtMSkrIi4iKTtpZigodC5sZW5ndGgtMSklMiE9MClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLiIpO2lmKCEoaT1lLnBhcnNlKGksMixEdCkpKXJldHVybiBudWxsO3ZhciBsPVtdLGM9bnVsbDsiaW50ZXJwb2xhdGUtaGNsIj09PXJ8fCJpbnRlcnBvbGF0ZS1sYWIiPT09cj9jPUJ0OmUuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKGM9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSs9Mil7dmFyIGY9YVt1XSxoPWFbdSsxXSxwPXUrMyxkPXUrNDtpZigibnVtYmVyIiE9dHlwZW9mIGYpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgImludGVycG9sYXRlIiBleHByZXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgbGl0ZXJhbCBudW1lcmljIHZhbHVlcyAobm90IGNvbXB1dGVkIGV4cHJlc3Npb25zKSBmb3IgdGhlIGlucHV0IHZhbHVlcy4nLHApO2lmKGwubGVuZ3RoJiZsW2wubGVuZ3RoLTFdWzBdPj1mKXJldHVybiBlLmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJyxwKTt2YXIgZz1lLnBhcnNlKGgsZCxjKTtpZighZylyZXR1cm4gbnVsbDtjPWN8fGcudHlwZSxsLnB1c2goW2YsZ10pfXJldHVybiJudW1iZXIiPT09Yy5raW5kfHwiY29sb3IiPT09Yy5raW5kfHwiYXJyYXkiPT09Yy5raW5kJiYibnVtYmVyIj09PWMuaXRlbVR5cGUua2luZCYmIm51bWJlciI9PXR5cGVvZiBjLk4/bmV3IHJyKGMscixuLGksbCk6ZS5lcnJvcigiVHlwZSAiK0d0KGMpKyIgaXMgbm90IGludGVycG9sYXRhYmxlLiIpfSxyci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYWJlbHMscj10aGlzLm91dHB1dHM7aWYoMT09PWUubGVuZ3RoKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBuPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYobjw9ZVswXSlyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgaT1lLmxlbmd0aDtpZihuPj1lW2ktMV0pcmV0dXJuIHJbaS0xXS5ldmFsdWF0ZSh0KTt2YXIgYT1OZShlLG4pLG89cnIuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb24sbixlW2FdLGVbYSsxXSkscz1yW2FdLmV2YWx1YXRlKHQpLGw9clthKzFdLmV2YWx1YXRlKHQpO3JldHVybiJpbnRlcnBvbGF0ZSI9PT10aGlzLm9wZXJhdG9yP1ZlW3RoaXMudHlwZS5raW5kLnRvTG93ZXJDYXNlKCldKHMsbCxvKToiaW50ZXJwb2xhdGUtaGNsIj09PXRoaXMub3BlcmF0b3I/dHIucmV2ZXJzZSh0ci5pbnRlcnBvbGF0ZSh0ci5mb3J3YXJkKHMpLHRyLmZvcndhcmQobCksbykpOiRlLnJldmVyc2UoJGUuaW50ZXJwb2xhdGUoJGUuZm9yd2FyZChzKSwkZS5mb3J3YXJkKGwpLG8pKX0scnIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV0pfSxyci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm91dHB1dHMuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKX0scnIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0O3Q9ImxpbmVhciI9PT10aGlzLmludGVycG9sYXRpb24ubmFtZT9bImxpbmVhciJdOiJleHBvbmVudGlhbCI9PT10aGlzLmludGVycG9sYXRpb24ubmFtZT8xPT09dGhpcy5pbnRlcnBvbGF0aW9uLmJhc2U/WyJsaW5lYXIiXTpbImV4cG9uZW50aWFsIix0aGlzLmludGVycG9sYXRpb24uYmFzZV06WyJjdWJpYy1iZXppZXIiXS5jb25jYXQodGhpcy5pbnRlcnBvbGF0aW9uLmNvbnRyb2xQb2ludHMpO2Zvcih2YXIgZT1bdGhpcy5vcGVyYXRvcix0LHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLHI9MDtyPHRoaXMubGFiZWxzLmxlbmd0aDtyKyspZS5wdXNoKHRoaXMubGFiZWxzW3JdLHRoaXMub3V0cHV0c1tyXS5zZXJpYWxpemUoKSk7cmV0dXJuIGV9O3ZhciBpcj1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtpci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKTt2YXIgcj1udWxsLG49ZS5leHBlY3RlZFR5cGU7biYmInZhbHVlIiE9PW4ua2luZCYmKHI9bik7Zm9yKHZhciBpPVtdLGE9MCxvPXQuc2xpY2UoMSk7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1lLnBhcnNlKG9bYV0sMStpLmxlbmd0aCxyLHZvaWQgMCx7dHlwZUFubm90YXRpb246Im9taXQifSk7aWYoIXMpcmV0dXJuIG51bGw7cj1yfHxzLnR5cGUsaS5wdXNoKHMpfXZhciBsPW4mJmkuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIFd0KG4sdC50eXBlKX0pKTtyZXR1cm4gbmV3IGlyKGw/anQ6cixpKX0saXIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPW51bGwsbj0wLGk9MCxhPXRoaXMuYXJncztpPGEubGVuZ3RoJiYobisrLChyPWFbaV0uZXZhbHVhdGUodCkpJiZyIGluc3RhbmNlb2YgZWUmJiFyLmF2YWlsYWJsZSYmKGV8fChlPXIubmFtZSkscj1udWxsLG49PT10aGlzLmFyZ3MubGVuZ3RoJiYocj1lKSksbnVsbD09PXIpO2krPTEpO3JldHVybiByfSxpci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxpci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZ3MuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKX0saXIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsiY29hbGVzY2UiXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pKSx0fTt2YXIgYXI9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9ZS50eXBlLHRoaXMuYmluZGluZ3M9W10uY29uY2F0KHQpLHRoaXMucmVzdWx0PWV9O2FyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXN1bHQuZXZhbHVhdGUodCl9LGFyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJpbmRpbmdzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV1bMV0pO3QodGhpcy5yZXN1bHQpfSxhci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO2Zvcih2YXIgcj1bXSxuPTE7bjx0Lmxlbmd0aC0xO24rPTIpe3ZhciBpPXRbbl07aWYoInN0cmluZyIhPXR5cGVvZiBpKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBzdHJpbmcsIGJ1dCBmb3VuZCAiK3R5cGVvZiBpKyIgaW5zdGVhZC4iLG4pO2lmKC9bXmEtekEtWjAtOV9dLy50ZXN0KGkpKXJldHVybiBlLmVycm9yKCJWYXJpYWJsZSBuYW1lcyBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciAnXycuIixuKTt2YXIgYT1lLnBhcnNlKHRbbisxXSxuKzEpO2lmKCFhKXJldHVybiBudWxsO3IucHVzaChbaSxhXSl9dmFyIG89ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEsZS5leHBlY3RlZFR5cGUscik7cmV0dXJuIG8/bmV3IGFyKHIsbyk6bnVsbH0sYXIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXN1bHQub3V0cHV0RGVmaW5lZCgpfSxhci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsibGV0Il0sZT0wLHI9dGhpcy5iaW5kaW5ncztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07dC5wdXNoKG5bMF0sblsxXS5zZXJpYWxpemUoKSl9cmV0dXJuIHQucHVzaCh0aGlzLnJlc3VsdC5zZXJpYWxpemUoKSksdH07dmFyIG9yPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9dCx0aGlzLmluZGV4PWUsdGhpcy5pbnB1dD1yfTtvci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEsRHQpLG49ZS5wYXJzZSh0WzJdLDIsSHQoZS5leHBlY3RlZFR5cGV8fGp0KSk7cmV0dXJuIHImJm4/bmV3IG9yKG4udHlwZS5pdGVtVHlwZSxyLG4pOm51bGx9LG9yLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluZGV4LmV2YWx1YXRlKHQpLHI9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihlPDApdGhyb3cgbmV3IHNlKCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiAiK2UrIiA8IDAuIik7aWYoZT49ci5sZW5ndGgpdGhyb3cgbmV3IHNlKCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiAiK2UrIiA+ICIrKHIubGVuZ3RoLTEpKyIuIik7aWYoZSE9PU1hdGguZmxvb3IoZSkpdGhyb3cgbmV3IHNlKCJBcnJheSBpbmRleCBtdXN0IGJlIGFuIGludGVnZXIsIGJ1dCBmb3VuZCAiK2UrIiBpbnN0ZWFkLiIpO3JldHVybiByW2VdfSxvci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbmRleCksdCh0aGlzLmlucHV0KX0sb3IucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sb3IucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiYXQiLHRoaXMuaW5kZXguc2VyaWFsaXplKCksdGhpcy5pbnB1dC5zZXJpYWxpemUoKV19O3ZhciBzcj1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1GdCx0aGlzLm5lZWRsZT10LHRoaXMuaGF5c3RhY2s9ZX07c3IucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLGp0KSxuPWUucGFyc2UodFsyXSwyLGp0KTtyZXR1cm4gciYmbj9YdChyLnR5cGUsW0Z0LFJ0LER0LE90LGp0XSk/bmV3IHNyKHIsbik6ZS5lcnJvcigiRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBib29sZWFuLCBzdHJpbmcsIG51bWJlciBvciBudWxsLCBidXQgZm91bmQgIitHdChyLnR5cGUpKyIgaW5zdGVhZCIpOm51bGx9LHNyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm5lZWRsZS5ldmFsdWF0ZSh0KSxyPXRoaXMuaGF5c3RhY2suZXZhbHVhdGUodCk7aWYoIXIpcmV0dXJuITE7aWYoIVp0KGUsWyJib29sZWFuIiwic3RyaW5nIiwibnVtYmVyIiwibnVsbCJdKSl0aHJvdyBuZXcgc2UoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICIrR3QoaWUoZSkpKyIgaW5zdGVhZC4iKTtpZighWnQocixbInN0cmluZyIsImFycmF5Il0pKXRocm93IG5ldyBzZSgiRXhwZWN0ZWQgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYXJyYXkgb3Igc3RyaW5nLCBidXQgZm91bmQgIitHdChpZShyKSkrIiBpbnN0ZWFkLiIpO3JldHVybiByLmluZGV4T2YoZSk+PTB9LHNyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLm5lZWRsZSksdCh0aGlzLmhheXN0YWNrKX0sc3IucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sc3IucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiaW4iLHRoaXMubmVlZGxlLnNlcmlhbGl6ZSgpLHRoaXMuaGF5c3RhY2suc2VyaWFsaXplKCldfTt2YXIgbHI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT1EdCx0aGlzLm5lZWRsZT10LHRoaXMuaGF5c3RhY2s9ZSx0aGlzLmZyb21JbmRleD1yfTtsci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPD0yfHx0Lmxlbmd0aD49NSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMyBvciA0IGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxqdCksbj1lLnBhcnNlKHRbMl0sMixqdCk7aWYoIXJ8fCFuKXJldHVybiBudWxsO2lmKCFYdChyLnR5cGUsW0Z0LFJ0LER0LE90LGp0XSkpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICIrR3Qoci50eXBlKSsiIGluc3RlYWQiKTtpZig0PT09dC5sZW5ndGgpe3ZhciBpPWUucGFyc2UodFszXSwzLER0KTtyZXR1cm4gaT9uZXcgbHIocixuLGkpOm51bGx9cmV0dXJuIG5ldyBscihyLG4pfSxsci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5uZWVkbGUuZXZhbHVhdGUodCkscj10aGlzLmhheXN0YWNrLmV2YWx1YXRlKHQpO2lmKCFadChlLFsiYm9vbGVhbiIsInN0cmluZyIsIm51bWJlciIsIm51bGwiXSkpdGhyb3cgbmV3IHNlKCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyIG9yIG51bGwsIGJ1dCBmb3VuZCAiK0d0KGllKGUpKSsiIGluc3RlYWQuIik7aWYoIVp0KHIsWyJzdHJpbmciLCJhcnJheSJdKSl0aHJvdyBuZXcgc2UoIkV4cGVjdGVkIHNlY29uZCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGFycmF5IG9yIHN0cmluZywgYnV0IGZvdW5kICIrR3QoaWUocikpKyIgaW5zdGVhZC4iKTtpZih0aGlzLmZyb21JbmRleCl7dmFyIG49dGhpcy5mcm9tSW5kZXguZXZhbHVhdGUodCk7cmV0dXJuIHIuaW5kZXhPZihlLG4pfXJldHVybiByLmluZGV4T2YoZSl9LGxyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLm5lZWRsZSksdCh0aGlzLmhheXN0YWNrKSx0aGlzLmZyb21JbmRleCYmdCh0aGlzLmZyb21JbmRleCl9LGxyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLmZyb21JbmRleCYmdm9pZCAwIT09dGhpcy5mcm9tSW5kZXgpe3ZhciB0PXRoaXMuZnJvbUluZGV4LnNlcmlhbGl6ZSgpO3JldHVyblsiaW5kZXgtb2YiLHRoaXMubmVlZGxlLnNlcmlhbGl6ZSgpLHRoaXMuaGF5c3RhY2suc2VyaWFsaXplKCksdF19cmV0dXJuWyJpbmRleC1vZiIsdGhpcy5uZWVkbGUuc2VyaWFsaXplKCksdGhpcy5oYXlzdGFjay5zZXJpYWxpemUoKV19O3ZhciBjcj1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5pbnB1dFR5cGU9dCx0aGlzLnR5cGU9ZSx0aGlzLmlucHV0PXIsdGhpcy5jYXNlcz1uLHRoaXMub3V0cHV0cz1pLHRoaXMub3RoZXJ3aXNlPWF9O2NyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYodC5sZW5ndGglMiE9MSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByLG47ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYobj1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBpPXt9LGE9W10sbz0yO288dC5sZW5ndGgtMTtvKz0yKXt2YXIgcz10W29dLGw9dFtvKzFdO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7dmFyIGM9ZS5jb25jYXQobyk7aWYoMD09PXMubGVuZ3RoKXJldHVybiBjLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYnJhbmNoIGxhYmVsLiIpO2Zvcih2YXIgdT0wLGY9czt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV07aWYoIm51bWJlciIhPXR5cGVvZiBoJiYic3RyaW5nIiE9dHlwZW9mIGgpcmV0dXJuIGMuZXJyb3IoIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSBudW1iZXJzIG9yIHN0cmluZ3MuIik7aWYoIm51bWJlciI9PXR5cGVvZiBoJiZNYXRoLmFicyhoKT5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUilyZXR1cm4gYy5lcnJvcigiQnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXJzIG5vIGxhcmdlciB0aGFuICIrTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIrIi4iKTtpZigibnVtYmVyIj09dHlwZW9mIGgmJk1hdGguZmxvb3IoaCkhPT1oKXJldHVybiBjLmVycm9yKCJOdW1lcmljIGJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VyIHZhbHVlcy4iKTtpZihyKXtpZihjLmNoZWNrU3VidHlwZShyLGllKGgpKSlyZXR1cm4gbnVsbH1lbHNlIHI9aWUoaCk7aWYodm9pZCAwIT09aVtTdHJpbmcoaCldKXJldHVybiBjLmVycm9yKCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgdW5pcXVlLiIpO2lbU3RyaW5nKGgpXT1hLmxlbmd0aH12YXIgcD1lLnBhcnNlKGwsbyxuKTtpZighcClyZXR1cm4gbnVsbDtuPW58fHAudHlwZSxhLnB1c2gocCl9dmFyIGQ9ZS5wYXJzZSh0WzFdLDEsanQpO2lmKCFkKXJldHVybiBudWxsO3ZhciBnPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLG4pO3JldHVybiBnPyJ2YWx1ZSIhPT1kLnR5cGUua2luZCYmZS5jb25jYXQoMSkuY2hlY2tTdWJ0eXBlKHIsZC50eXBlKT9udWxsOm5ldyBjcihyLG4sZCxpLGEsZyk6bnVsbH0sY3IucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7cmV0dXJuKGllKGUpPT09dGhpcy5pbnB1dFR5cGUmJnRoaXMub3V0cHV0c1t0aGlzLmNhc2VzW2VdXXx8dGhpcy5vdGhlcndpc2UpLmV2YWx1YXRlKHQpfSxjci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCksdGhpcy5vdXRwdXRzLmZvckVhY2godCksdCh0aGlzLm90aGVyd2lzZSl9LGNyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0cHV0cy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpJiZ0aGlzLm90aGVyd2lzZS5vdXRwdXREZWZpbmVkKCl9LGNyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVsibWF0Y2giLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLHI9W10sbj17fSxpPTAsYT1PYmplY3Qua2V5cyh0aGlzLmNhc2VzKS5zb3J0KCk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3ZvaWQgMD09PShmPW5bdGhpcy5jYXNlc1tvXV0pPyhuW3RoaXMuY2FzZXNbb11dPXIubGVuZ3RoLHIucHVzaChbdGhpcy5jYXNlc1tvXSxbb11dKSk6cltmXVsxXS5wdXNoKG8pfWZvcih2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09PXQuaW5wdXRUeXBlLmtpbmQ/TnVtYmVyKGUpOmV9LGw9MCxjPXI7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGY9dVswXSxoPXVbMV07ZS5wdXNoKDE9PT1oLmxlbmd0aD9zKGhbMF0pOmgubWFwKHMpKSxlLnB1c2godGhpcy5vdXRwdXRzW291dHB1dEluZGV4JDFdLnNlcmlhbGl6ZSgpKX1yZXR1cm4gZS5wdXNoKHRoaXMub3RoZXJ3aXNlLnNlcmlhbGl6ZSgpKSxlfTt2YXIgdXI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuYnJhbmNoZXM9ZSx0aGlzLm90aGVyd2lzZT1yfTt1ci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKHQubGVuZ3RoJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByO2UuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKHI9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgbj1bXSxpPTE7aTx0Lmxlbmd0aC0xO2krPTIpe3ZhciBhPWUucGFyc2UodFtpXSxpLEZ0KTtpZighYSlyZXR1cm4gbnVsbDt2YXIgbz1lLnBhcnNlKHRbaSsxXSxpKzEscik7aWYoIW8pcmV0dXJuIG51bGw7bi5wdXNoKFthLG9dKSxyPXJ8fG8udHlwZX12YXIgcz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxyKTtyZXR1cm4gcz9uZXcgdXIocixuLHMpOm51bGx9LHVyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blsxXTtpZihuWzBdLmV2YWx1YXRlKHQpKXJldHVybiBpLmV2YWx1YXRlKHQpfXJldHVybiB0aGlzLm90aGVyd2lzZS5ldmFsdWF0ZSh0KX0sdXIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blsxXTt0KG5bMF0pLHQoaSl9dCh0aGlzLm90aGVyd2lzZSl9LHVyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnJhbmNoZXMuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzFdLm91dHB1dERlZmluZWQoKX0pKSYmdGhpcy5vdGhlcndpc2Uub3V0cHV0RGVmaW5lZCgpfSx1ci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9WyJjYXNlIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSksdH07dmFyIGZyPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudHlwZT10LHRoaXMuaW5wdXQ9ZSx0aGlzLmJlZ2luSW5kZXg9cix0aGlzLmVuZEluZGV4PW59O2Z1bmN0aW9uIGhyKHQsZSl7cmV0dXJuIj09Ij09PXR8fCIhPSI9PT10PyJib29sZWFuIj09PWUua2luZHx8InN0cmluZyI9PT1lLmtpbmR8fCJudW1iZXIiPT09ZS5raW5kfHwibnVsbCI9PT1lLmtpbmR8fCJ2YWx1ZSI9PT1lLmtpbmQ6InN0cmluZyI9PT1lLmtpbmR8fCJudW1iZXIiPT09ZS5raW5kfHwidmFsdWUiPT09ZS5raW5kfWZ1bmN0aW9uIHByKHQsZSxyLG4pe3JldHVybiAwPT09bi5jb21wYXJlKGUscil9ZnVuY3Rpb24gZHIodCxlLHIpe3ZhciBuPSI9PSIhPT10JiYiIT0iIT09dDtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQsZSxyKXt0aGlzLnR5cGU9RnQsdGhpcy5saHM9dCx0aGlzLnJocz1lLHRoaXMuY29sbGF0b3I9cix0aGlzLmhhc1VudHlwZWRBcmd1bWVudD0idmFsdWUiPT09dC50eXBlLmtpbmR8fCJ2YWx1ZSI9PT1lLnR5cGUua2luZH1yZXR1cm4gaS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aCYmNCE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCB0d28gb3IgdGhyZWUgYXJndW1lbnRzLiIpO3ZhciByPXRbMF0sYT1lLnBhcnNlKHRbMV0sMSxqdCk7aWYoIWEpcmV0dXJuIG51bGw7aWYoIWhyKHIsYS50eXBlKSlyZXR1cm4gZS5jb25jYXQoMSkuZXJyb3IoJyInK3IrIlwiIGNvbXBhcmlzb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0eXBlICciK0d0KGEudHlwZSkrIicuIik7dmFyIG89ZS5wYXJzZSh0WzJdLDIsanQpO2lmKCFvKXJldHVybiBudWxsO2lmKCFocihyLG8udHlwZSkpcmV0dXJuIGUuY29uY2F0KDIpLmVycm9yKCciJytyKyJcIiBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAnIitHdChvLnR5cGUpKyInLiIpO2lmKGEudHlwZS5raW5kIT09by50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1hLnR5cGUua2luZCYmInZhbHVlIiE9PW8udHlwZS5raW5kKXJldHVybiBlLmVycm9yKCJDYW5ub3QgY29tcGFyZSB0eXBlcyAnIitHdChhLnR5cGUpKyInIGFuZCAnIitHdChvLnR5cGUpKyInLiIpO24mJigidmFsdWUiPT09YS50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1vLnR5cGUua2luZD9hPW5ldyBjZShvLnR5cGUsW2FdKToidmFsdWUiIT09YS50eXBlLmtpbmQmJiJ2YWx1ZSI9PT1vLnR5cGUua2luZCYmKG89bmV3IGNlKGEudHlwZSxbb10pKSk7dmFyIHM9bnVsbDtpZig0PT09dC5sZW5ndGgpe2lmKCJzdHJpbmciIT09YS50eXBlLmtpbmQmJiJzdHJpbmciIT09by50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1hLnR5cGUua2luZCYmInZhbHVlIiE9PW8udHlwZS5raW5kKXJldHVybiBlLmVycm9yKCJDYW5ub3QgdXNlIGNvbGxhdG9yIHRvIGNvbXBhcmUgbm9uLXN0cmluZyB0eXBlcy4iKTtpZighKHM9ZS5wYXJzZSh0WzNdLDMsVXQpKSlyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IGkoYSxvLHMpfSxpLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihpKXt2YXIgYT10aGlzLmxocy5ldmFsdWF0ZShpKSxvPXRoaXMucmhzLmV2YWx1YXRlKGkpO2lmKG4mJnRoaXMuaGFzVW50eXBlZEFyZ3VtZW50KXt2YXIgcz1pZShhKSxsPWllKG8pO2lmKHMua2luZCE9PWwua2luZHx8InN0cmluZyIhPT1zLmtpbmQmJiJudW1iZXIiIT09cy5raW5kKXRocm93IG5ldyBzZSgnRXhwZWN0ZWQgYXJndW1lbnRzIGZvciAiJyt0KyciIHRvIGJlIChzdHJpbmcsIHN0cmluZykgb3IgKG51bWJlciwgbnVtYmVyKSwgYnV0IGZvdW5kICgnK3Mua2luZCsiLCAiK2wua2luZCsiKSBpbnN0ZWFkLiIpfWlmKHRoaXMuY29sbGF0b3ImJiFuJiZ0aGlzLmhhc1VudHlwZWRBcmd1bWVudCl7dmFyIGM9aWUoYSksdT1pZShvKTtpZigic3RyaW5nIiE9PWMua2luZHx8InN0cmluZyIhPT11LmtpbmQpcmV0dXJuIGUoaSxhLG8pfXJldHVybiB0aGlzLmNvbGxhdG9yP3IoaSxhLG8sdGhpcy5jb2xsYXRvci5ldmFsdWF0ZShpKSk6ZShpLGEsbyl9LGkucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMubGhzKSx0KHRoaXMucmhzKSx0aGlzLmNvbGxhdG9yJiZ0KHRoaXMuY29sbGF0b3IpfSxpLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGkucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciBlPVt0XTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKHQpe2UucHVzaCh0LnNlcmlhbGl6ZSgpKX0pKSxlfSxpfSgpfWZyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8PTJ8fHQubGVuZ3RoPj01KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAzIG9yIDQgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLGp0KSxuPWUucGFyc2UodFsyXSwyLER0KTtpZighcnx8IW4pcmV0dXJuIG51bGw7aWYoIVh0KHIudHlwZSxbSHQoanQpLFJ0LGp0XSkpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYXJyYXkgb3Igc3RyaW5nLCBidXQgZm91bmQgIitHdChyLnR5cGUpKyIgaW5zdGVhZCIpO2lmKDQ9PT10Lmxlbmd0aCl7dmFyIGk9ZS5wYXJzZSh0WzNdLDMsRHQpO3JldHVybiBpP25ldyBmcihyLnR5cGUscixuLGkpOm51bGx9cmV0dXJuIG5ldyBmcihyLnR5cGUscixuKX0sZnIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCkscj10aGlzLmJlZ2luSW5kZXguZXZhbHVhdGUodCk7aWYoIVp0KGUsWyJzdHJpbmciLCJhcnJheSJdKSl0aHJvdyBuZXcgc2UoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYXJyYXkgb3Igc3RyaW5nLCBidXQgZm91bmQgIitHdChpZShlKSkrIiBpbnN0ZWFkLiIpO2lmKHRoaXMuZW5kSW5kZXgpe3ZhciBuPXRoaXMuZW5kSW5kZXguZXZhbHVhdGUodCk7cmV0dXJuIGUuc2xpY2UocixuKX1yZXR1cm4gZS5zbGljZShyKX0sZnIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpLHQodGhpcy5iZWdpbkluZGV4KSx0aGlzLmVuZEluZGV4JiZ0KHRoaXMuZW5kSW5kZXgpfSxmci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxmci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5lbmRJbmRleCYmdm9pZCAwIT09dGhpcy5lbmRJbmRleCl7dmFyIHQ9dGhpcy5lbmRJbmRleC5zZXJpYWxpemUoKTtyZXR1cm5bInNsaWNlIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpLHRoaXMuYmVnaW5JbmRleC5zZXJpYWxpemUoKSx0XX1yZXR1cm5bInNsaWNlIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpLHRoaXMuYmVnaW5JbmRleC5zZXJpYWxpemUoKV19O3ZhciBncj1kcigiPT0iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGU9PT1yfSkscHIpLG1yPWRyKCIhPSIsKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSE9PXJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIXByKDAsZSxyLG4pfSkpLHZyPWRyKCI8IiwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPHJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uY29tcGFyZShlLHIpPDB9KSkseXI9ZHIoIj4iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGU+cn0pLChmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5jb21wYXJlKGUscik+MH0pKSx4cj1kcigiPD0iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGU8PXJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uY29tcGFyZShlLHIpPD0wfSkpLGJyPWRyKCI+PSIsKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT49cn0pLChmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5jb21wYXJlKGUscik+PTB9KSksX3I9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnR5cGU9UnQsdGhpcy5udW1iZXI9dCx0aGlzLmxvY2FsZT1lLHRoaXMuY3VycmVuY3k9cix0aGlzLm1pbkZyYWN0aW9uRGlnaXRzPW4sdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cz1pfTtfci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cy4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxEdCk7aWYoIXIpcmV0dXJuIG51bGw7dmFyIG49dFsyXTtpZigib2JqZWN0IiE9dHlwZW9mIG58fEFycmF5LmlzQXJyYXkobikpcmV0dXJuIGUuZXJyb3IoIk51bWJlckZvcm1hdCBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LiIpO3ZhciBpPW51bGw7aWYobi5sb2NhbGUmJiEoaT1lLnBhcnNlKG4ubG9jYWxlLDEsUnQpKSlyZXR1cm4gbnVsbDt2YXIgYT1udWxsO2lmKG4uY3VycmVuY3kmJiEoYT1lLnBhcnNlKG4uY3VycmVuY3ksMSxSdCkpKXJldHVybiBudWxsO3ZhciBvPW51bGw7aWYoblsibWluLWZyYWN0aW9uLWRpZ2l0cyJdJiYhKG89ZS5wYXJzZShuWyJtaW4tZnJhY3Rpb24tZGlnaXRzIl0sMSxEdCkpKXJldHVybiBudWxsO3ZhciBzPW51bGw7cmV0dXJuIG5bIm1heC1mcmFjdGlvbi1kaWdpdHMiXSYmIShzPWUucGFyc2UoblsibWF4LWZyYWN0aW9uLWRpZ2l0cyJdLDEsRHQpKT9udWxsOm5ldyBfcihyLGksYSxvLHMpfSxfci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmxvY2FsZT90aGlzLmxvY2FsZS5ldmFsdWF0ZSh0KTpbXSx7c3R5bGU6dGhpcy5jdXJyZW5jeT8iY3VycmVuY3kiOiJkZWNpbWFsIixjdXJyZW5jeTp0aGlzLmN1cnJlbmN5P3RoaXMuY3VycmVuY3kuZXZhbHVhdGUodCk6dm9pZCAwLG1pbmltdW1GcmFjdGlvbkRpZ2l0czp0aGlzLm1pbkZyYWN0aW9uRGlnaXRzP3RoaXMubWluRnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUodCk6dm9pZCAwLG1heGltdW1GcmFjdGlvbkRpZ2l0czp0aGlzLm1heEZyYWN0aW9uRGlnaXRzP3RoaXMubWF4RnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUodCk6dm9pZCAwfSkuZm9ybWF0KHRoaXMubnVtYmVyLmV2YWx1YXRlKHQpKX0sX3IucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMubnVtYmVyKSx0aGlzLmxvY2FsZSYmdCh0aGlzLmxvY2FsZSksdGhpcy5jdXJyZW5jeSYmdCh0aGlzLmN1cnJlbmN5KSx0aGlzLm1pbkZyYWN0aW9uRGlnaXRzJiZ0KHRoaXMubWluRnJhY3Rpb25EaWdpdHMpLHRoaXMubWF4RnJhY3Rpb25EaWdpdHMmJnQodGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyl9LF9yLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LF9yLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5sb2NhbGUmJih0LmxvY2FsZT10aGlzLmxvY2FsZS5zZXJpYWxpemUoKSksdGhpcy5jdXJyZW5jeSYmKHQuY3VycmVuY3k9dGhpcy5jdXJyZW5jeS5zZXJpYWxpemUoKSksdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyYmKHRbIm1pbi1mcmFjdGlvbi1kaWdpdHMiXT10aGlzLm1pbkZyYWN0aW9uRGlnaXRzLnNlcmlhbGl6ZSgpKSx0aGlzLm1heEZyYWN0aW9uRGlnaXRzJiYodFsibWF4LWZyYWN0aW9uLWRpZ2l0cyJdPXRoaXMubWF4RnJhY3Rpb25EaWdpdHMuc2VyaWFsaXplKCkpLFsibnVtYmVyLWZvcm1hdCIsdGhpcy5udW1iZXIuc2VyaWFsaXplKCksdF19O3ZhciB3cj1mdW5jdGlvbih0KXt0aGlzLnR5cGU9RHQsdGhpcy5pbnB1dD10fTt3ci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMSBhcmd1bWVudCwgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSk7cmV0dXJuIHI/ImFycmF5IiE9PXIudHlwZS5raW5kJiYic3RyaW5nIiE9PXIudHlwZS5raW5kJiYidmFsdWUiIT09ci50eXBlLmtpbmQ/ZS5lcnJvcigiRXhwZWN0ZWQgYXJndW1lbnQgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCAiK0d0KHIudHlwZSkrIiBpbnN0ZWFkLiIpOm5ldyB3cihyKTpudWxsfSx3ci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGUubGVuZ3RoO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubGVuZ3RoO3Rocm93IG5ldyBzZSgiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCAiK0d0KGllKGUpKSsiIGluc3RlYWQuIil9LHdyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KX0sd3IucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sd3IucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsibGVuZ3RoIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSksdH07dmFyIFRyPXsiPT0iOmdyLCIhPSI6bXIsIj4iOnlyLCI8Ijp2ciwiPj0iOmJyLCI8PSI6eHIsYXJyYXk6Y2UsYXQ6b3IsYm9vbGVhbjpjZSxjYXNlOnVyLGNvYWxlc2NlOmlyLGNvbGxhdG9yOnZlLGZvcm1hdDp1ZSxpbWFnZTpmZSxpbjpzciwiaW5kZXgtb2YiOmxyLGludGVycG9sYXRlOnJyLCJpbnRlcnBvbGF0ZS1oY2wiOnJyLCJpbnRlcnBvbGF0ZS1sYWIiOnJyLGxlbmd0aDp3cixsZXQ6YXIsbGl0ZXJhbDpvZSxtYXRjaDpjcixudW1iZXI6Y2UsIm51bWJlci1mb3JtYXQiOl9yLG9iamVjdDpjZSxzbGljZTpmcixzdGVwOmplLHN0cmluZzpjZSwidG8tYm9vbGVhbiI6cGUsInRvLWNvbG9yIjpwZSwidG8tbnVtYmVyIjpwZSwidG8tc3RyaW5nIjpwZSx2YXI6RmUsd2l0aGluOnplfTtmdW5jdGlvbiBrcih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM107cj1yLmV2YWx1YXRlKHQpLG49bi5ldmFsdWF0ZSh0KSxpPWkuZXZhbHVhdGUodCk7dmFyIG89YT9hLmV2YWx1YXRlKHQpOjEscz1yZShyLG4saSxvKTtpZihzKXRocm93IG5ldyBzZShzKTtyZXR1cm4gbmV3IEt0KHIvMjU1Km8sbi8yNTUqbyxpLzI1NSpvLG8pfWZ1bmN0aW9uIE1yKHQsZSl7cmV0dXJuIHQgaW4gZX1mdW5jdGlvbiBBcih0LGUpe3ZhciByPWVbdF07cmV0dXJuIHZvaWQgMD09PXI/bnVsbDpyfWZ1bmN0aW9uIFNyKHQpe3JldHVybnt0eXBlOnR9fWZ1bmN0aW9uIEVyKHQpe3JldHVybntyZXN1bHQ6InN1Y2Nlc3MiLHZhbHVlOnR9fWZ1bmN0aW9uIENyKHQpe3JldHVybntyZXN1bHQ6ImVycm9yIix2YWx1ZTp0fX1mdW5jdGlvbiBMcih0KXtyZXR1cm4iZGF0YS1kcml2ZW4iPT09dFsicHJvcGVydHktdHlwZSJdfHwiY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4iPT09dFsicHJvcGVydHktdHlwZSJdfWZ1bmN0aW9uIElyKHQpe3JldHVybiEhdC5leHByZXNzaW9uJiZ0LmV4cHJlc3Npb24ucGFyYW1ldGVycy5pbmRleE9mKCJ6b29tIik+LTF9ZnVuY3Rpb24gUHIodCl7cmV0dXJuISF0LmV4cHJlc3Npb24mJnQuZXhwcmVzc2lvbi5pbnRlcnBvbGF0ZWR9ZnVuY3Rpb24genIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBOdW1iZXI/Im51bWJlciI6dCBpbnN0YW5jZW9mIFN0cmluZz8ic3RyaW5nIjp0IGluc3RhbmNlb2YgQm9vbGVhbj8iYm9vbGVhbiI6QXJyYXkuaXNBcnJheSh0KT8iYXJyYXkiOm51bGw9PT10PyJudWxsIjp0eXBlb2YgdH1mdW5jdGlvbiBPcih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiYhQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBEcih0KXtyZXR1cm4gdH1mdW5jdGlvbiBScih0LGUscil7cmV0dXJuIHZvaWQgMCE9PXQ/dDp2b2lkIDAhPT1lP2U6dm9pZCAwIT09cj9yOnZvaWQgMH1mdW5jdGlvbiBGcih0LGUscixuLGkpe3JldHVybiBScih0eXBlb2Ygcj09PWk/bltyXTp2b2lkIDAsdC5kZWZhdWx0LGUuZGVmYXVsdCl9ZnVuY3Rpb24gQnIodCxlLHIpe2lmKCJudW1iZXIiIT09enIocikpcmV0dXJuIFJyKHQuZGVmYXVsdCxlLmRlZmF1bHQpO3ZhciBuPXQuc3RvcHMubGVuZ3RoO2lmKDE9PT1uKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI8PXQuc3RvcHNbMF1bMF0pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocj49dC5zdG9wc1tuLTFdWzBdKXJldHVybiB0LnN0b3BzW24tMV1bMV07dmFyIGk9TmUodC5zdG9wcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLHIpO3JldHVybiB0LnN0b3BzW2ldWzFdfWZ1bmN0aW9uIE5yKHQsZSxyKXt2YXIgbj12b2lkIDAhPT10LmJhc2U/dC5iYXNlOjE7aWYoIm51bWJlciIhPT16cihyKSlyZXR1cm4gUnIodC5kZWZhdWx0LGUuZGVmYXVsdCk7dmFyIGk9dC5zdG9wcy5sZW5ndGg7aWYoMT09PWkpcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocjw9dC5zdG9wc1swXVswXSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPj10LnN0b3BzW2ktMV1bMF0pcmV0dXJuIHQuc3RvcHNbaS0xXVsxXTt2YXIgYT1OZSh0LnN0b3BzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksciksbz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLXIsYT10LXI7cmV0dXJuIDA9PT1pPzA6MT09PWU/YS9pOihNYXRoLnBvdyhlLGEpLTEpLyhNYXRoLnBvdyhlLGkpLTEpfShyLG4sdC5zdG9wc1thXVswXSx0LnN0b3BzW2ErMV1bMF0pLHM9dC5zdG9wc1thXVsxXSxsPXQuc3RvcHNbYSsxXVsxXSxjPVZlW2UudHlwZV18fERyO2lmKHQuY29sb3JTcGFjZSYmInJnYiIhPT10LmNvbG9yU3BhY2Upe3ZhciB1PWVyW3QuY29sb3JTcGFjZV07Yz1mdW5jdGlvbih0LGUpe3JldHVybiB1LnJldmVyc2UodS5pbnRlcnBvbGF0ZSh1LmZvcndhcmQodCksdS5mb3J3YXJkKGUpLG8pKX19cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHMuZXZhbHVhdGU/e2V2YWx1YXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9YXJndW1lbnRzLmxlbmd0aDtlLS07KXRbZV09YXJndW1lbnRzW2VdO3ZhciByPXMuZXZhbHVhdGUuYXBwbHkodm9pZCAwLHQpLG49bC5ldmFsdWF0ZS5hcHBseSh2b2lkIDAsdCk7aWYodm9pZCAwIT09ciYmdm9pZCAwIT09bilyZXR1cm4gYyhyLG4sbyl9fTpjKHMsbCxvKX1mdW5jdGlvbiBqcih0LGUscil7cmV0dXJuImNvbG9yIj09PWUudHlwZT9yPUt0LnBhcnNlKHIpOiJmb3JtYXR0ZWQiPT09ZS50eXBlP3I9dGUuZnJvbVN0cmluZyhyLnRvU3RyaW5nKCkpOiJyZXNvbHZlZEltYWdlIj09PWUudHlwZT9yPWVlLmZyb21TdHJpbmcoci50b1N0cmluZygpKTp6cihyKT09PWUudHlwZXx8ImVudW0iPT09ZS50eXBlJiZlLnZhbHVlc1tyXXx8KHI9dm9pZCAwKSxScihyLHQuZGVmYXVsdCxlLmRlZmF1bHQpfW1lLnJlZ2lzdGVyKFRyLHtlcnJvcjpbe2tpbmQ6ImVycm9yIn0sW1J0XSxmdW5jdGlvbih0LGUpe3Rocm93IG5ldyBzZShlWzBdLmV2YWx1YXRlKHQpKX1dLHR5cGVvZjpbUnQsW2p0XSxmdW5jdGlvbih0LGUpe3JldHVybiBHdChpZShlWzBdLmV2YWx1YXRlKHQpKSl9XSwidG8tcmdiYSI6W0h0KER0LDQpLFtCdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0FycmF5KCl9XSxyZ2I6W0J0LFtEdCxEdCxEdF0sa3JdLHJnYmE6W0J0LFtEdCxEdCxEdCxEdF0sa3JdLGhhczp7dHlwZTpGdCxvdmVybG9hZHM6W1tbUnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1yKGVbMF0uZXZhbHVhdGUodCksdC5wcm9wZXJ0aWVzKCkpfV0sW1tSdCxOdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzFdO3JldHVybiBNcihlWzBdLmV2YWx1YXRlKHQpLHIuZXZhbHVhdGUodCkpfV1dfSxnZXQ6e3R5cGU6anQsb3ZlcmxvYWRzOltbW1J0XSxmdW5jdGlvbih0LGUpe3JldHVybiBBcihlWzBdLmV2YWx1YXRlKHQpLHQucHJvcGVydGllcygpKX1dLFtbUnQsTnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVsxXTtyZXR1cm4gQXIoZVswXS5ldmFsdWF0ZSh0KSxyLmV2YWx1YXRlKHQpKX1dXX0sImZlYXR1cmUtc3RhdGUiOltqdCxbUnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFyKGVbMF0uZXZhbHVhdGUodCksdC5mZWF0dXJlU3RhdGV8fHt9KX1dLHByb3BlcnRpZXM6W050LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByb3BlcnRpZXMoKX1dLCJnZW9tZXRyeS10eXBlIjpbUnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2VvbWV0cnlUeXBlKCl9XSxpZDpbanQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQoKX1dLHpvb206W0R0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMuem9vbX1dLCJoZWF0bWFwLWRlbnNpdHkiOltEdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLmhlYXRtYXBEZW5zaXR5fHwwfV0sImxpbmUtcHJvZ3Jlc3MiOltEdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLmxpbmVQcm9ncmVzc3x8MH1dLGFjY3VtdWxhdGVkOltqdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dC5nbG9iYWxzLmFjY3VtdWxhdGVkP251bGw6dC5nbG9iYWxzLmFjY3VtdWxhdGVkfV0sIisiOltEdCxTcihEdCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lO248aS5sZW5ndGg7bis9MSlyKz1pW25dLmV2YWx1YXRlKHQpO3JldHVybiByfV0sIioiOltEdCxTcihEdCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSlyKj1pW25dLmV2YWx1YXRlKHQpO3JldHVybiByfV0sIi0iOnt0eXBlOkR0LG92ZXJsb2FkczpbW1tEdCxEdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzFdO3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLXIuZXZhbHVhdGUodCl9XSxbW0R0XSxmdW5jdGlvbih0LGUpe3JldHVybi1lWzBdLmV2YWx1YXRlKHQpfV1dfSwiLyI6W0R0LFtEdCxEdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzFdO3JldHVybiBlWzBdLmV2YWx1YXRlKHQpL3IuZXZhbHVhdGUodCl9XSwiJSI6W0R0LFtEdCxEdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzFdO3JldHVybiBlWzBdLmV2YWx1YXRlKHQpJXIuZXZhbHVhdGUodCl9XSxsbjI6W0R0LFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguTE4yfV0scGk6W0R0LFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguUEl9XSxlOltEdCxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLkV9XSwiXiI6W0R0LFtEdCxEdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzFdO3JldHVybiBNYXRoLnBvdyhlWzBdLmV2YWx1YXRlKHQpLHIuZXZhbHVhdGUodCkpfV0sc3FydDpbRHQsW0R0XSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLnNxcnQoZVswXS5ldmFsdWF0ZSh0KSl9XSxsb2cxMDpbRHQsW0R0XSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmxvZyhlWzBdLmV2YWx1YXRlKHQpKS9NYXRoLkxOMTB9XSxsbjpbRHQsW0R0XSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmxvZyhlWzBdLmV2YWx1YXRlKHQpKX1dLGxvZzI6W0R0LFtEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5sb2coZVswXS5ldmFsdWF0ZSh0KSkvTWF0aC5MTjJ9XSxzaW46W0R0LFtEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5zaW4oZVswXS5ldmFsdWF0ZSh0KSl9XSxjb3M6W0R0LFtEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5jb3MoZVswXS5ldmFsdWF0ZSh0KSl9XSx0YW46W0R0LFtEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC50YW4oZVswXS5ldmFsdWF0ZSh0KSl9XSxhc2luOltEdCxbRHRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYXNpbihlWzBdLmV2YWx1YXRlKHQpKX1dLGFjb3M6W0R0LFtEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hY29zKGVbMF0uZXZhbHVhdGUodCkpfV0sYXRhbjpbRHQsW0R0XSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmF0YW4oZVswXS5ldmFsdWF0ZSh0KSl9XSxtaW46W0R0LFNyKER0KSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbi5hcHBseShNYXRoLGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKSl9XSxtYXg6W0R0LFNyKER0KSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heC5hcHBseShNYXRoLGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKSl9XSxhYnM6W0R0LFtEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnMoZVswXS5ldmFsdWF0ZSh0KSl9XSxyb3VuZDpbRHQsW0R0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0uZXZhbHVhdGUodCk7cmV0dXJuIHI8MD8tTWF0aC5yb3VuZCgtcik6TWF0aC5yb3VuZChyKX1dLGZsb29yOltEdCxbRHRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguZmxvb3IoZVswXS5ldmFsdWF0ZSh0KSl9XSxjZWlsOltEdCxbRHRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguY2VpbChlWzBdLmV2YWx1YXRlKHQpKX1dLCJmaWx0ZXItPT0iOltGdCxbUnQsanRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHQucHJvcGVydGllcygpW3IudmFsdWVdPT09bi52YWx1ZX1dLCJmaWx0ZXItaWQtPT0iOltGdCxbanRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gdC5pZCgpPT09ci52YWx1ZX1dLCJmaWx0ZXItdHlwZS09PSI6W0Z0LFtSdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiB0Lmdlb21ldHJ5VHlwZSgpPT09ci52YWx1ZX1dLCJmaWx0ZXItPCI6W0Z0LFtSdCxqdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPGF9XSwiZmlsdGVyLWlkLTwiOltGdCxbanRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbjxpfV0sImZpbHRlci0+IjpbRnQsW1J0LGp0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk+YX1dLCJmaWx0ZXItaWQtPiI6W0Z0LFtqdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPml9XSwiZmlsdGVyLTw9IjpbRnQsW1J0LGp0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk8PWF9XSwiZmlsdGVyLWlkLTw9IjpbRnQsW2p0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm48PWl9XSwiZmlsdGVyLT49IjpbRnQsW1J0LGp0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk+PWF9XSwiZmlsdGVyLWlkLT49IjpbRnQsW2p0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm4+PWl9XSwiZmlsdGVyLWhhcyI6W0Z0LFtqdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZSBpbiB0LnByb3BlcnRpZXMoKX1dLCJmaWx0ZXItaGFzLWlkIjpbRnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10LmlkKCkmJnZvaWQgMCE9PXQuaWQoKX1dLCJmaWx0ZXItdHlwZS1pbiI6W0Z0LFtIdChSdCldLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0udmFsdWUuaW5kZXhPZih0Lmdlb21ldHJ5VHlwZSgpKT49MH1dLCJmaWx0ZXItaWQtaW4iOltGdCxbSHQoanQpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5pZCgpKT49MH1dLCJmaWx0ZXItaW4tc21hbGwiOltGdCxbUnQsSHQoanQpXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIGVbMV0udmFsdWUuaW5kZXhPZih0LnByb3BlcnRpZXMoKVtyLnZhbHVlXSk+PTB9XSwiZmlsdGVyLWluLWxhcmdlIjpbRnQsW1J0LEh0KGp0KV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKDtyPD1uOyl7dmFyIGk9cituPj4xO2lmKGVbaV09PT10KXJldHVybiEwO2VbaV0+dD9uPWktMTpyPWkrMX1yZXR1cm4hMX0odC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sbi52YWx1ZSwwLG4udmFsdWUubGVuZ3RoLTEpfV0sYWxsOnt0eXBlOkZ0LG92ZXJsb2FkczpbW1tGdCxGdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzFdO3JldHVybiBlWzBdLmV2YWx1YXRlKHQpJiZyLmV2YWx1YXRlKHQpfV0sW1NyKEZ0KSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYoIW5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITE7cmV0dXJuITB9XV19LGFueTp7dHlwZTpGdCxvdmVybG9hZHM6W1tbRnQsRnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVsxXTtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KXx8ci5ldmFsdWF0ZSh0KX1dLFtTcihGdCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKWlmKG5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITA7cmV0dXJuITF9XV19LCIhIjpbRnQsW0Z0XSxmdW5jdGlvbih0LGUpe3JldHVybiFlWzBdLmV2YWx1YXRlKHQpfV0sImlzLXN1cHBvcnRlZC1zY3JpcHQiOltGdCxbUnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbG9iYWxzJiZ0Lmdsb2JhbHMuaXNTdXBwb3J0ZWRTY3JpcHQ7cmV0dXJuIXJ8fHIoZVswXS5ldmFsdWF0ZSh0KSl9XSx1cGNhc2U6W1J0LFtSdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b1VwcGVyQ2FzZSgpfV0sZG93bmNhc2U6W1J0LFtSdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0xvd2VyQ2FzZSgpfV0sY29uY2F0OltSdCxTcihqdCksZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBhZShlLmV2YWx1YXRlKHQpKX0pKS5qb2luKCIiKX1dLCJyZXNvbHZlZC1sb2NhbGUiOltSdCxbVXRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkucmVzb2x2ZWRMb2NhbGUoKX1dfSk7dmFyIFVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5leHByZXNzaW9uPXQsdGhpcy5fd2FybmluZ0hpc3Rvcnk9e30sdGhpcy5fZXZhbHVhdG9yPW5ldyBnZSx0aGlzLl9kZWZhdWx0VmFsdWU9ZT9mdW5jdGlvbih0KXtyZXR1cm4iY29sb3IiPT09dC50eXBlJiZPcih0LmRlZmF1bHQpP25ldyBLdCgwLDAsMCwwKToiY29sb3IiPT09dC50eXBlP0t0LnBhcnNlKHQuZGVmYXVsdCl8fG51bGw6dm9pZCAwPT09dC5kZWZhdWx0P251bGw6dC5kZWZhdWx0fShlKTpudWxsLHRoaXMuX2VudW1WYWx1ZXM9ZSYmImVudW0iPT09ZS50eXBlP2UudmFsdWVzOm51bGx9O2Z1bmN0aW9uIFZyKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD4wJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJnRbMF1pbiBUcn1mdW5jdGlvbiBxcih0LGUpe3ZhciByPW5ldyBCZShUcixbXSxlP2Z1bmN0aW9uKHQpe3ZhciBlPXtjb2xvcjpCdCxzdHJpbmc6UnQsbnVtYmVyOkR0LGVudW06UnQsYm9vbGVhbjpGdCxmb3JtYXR0ZWQ6VnQscmVzb2x2ZWRJbWFnZTpxdH07cmV0dXJuImFycmF5Ij09PXQudHlwZT9IdChlW3QudmFsdWVdfHxqdCx0Lmxlbmd0aCk6ZVt0LnR5cGVdfShlKTp2b2lkIDApLG49ci5wYXJzZSh0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUmJiJzdHJpbmciPT09ZS50eXBlP3t0eXBlQW5ub3RhdGlvbjoiY29lcmNlIn06dm9pZCAwKTtyZXR1cm4gbj9FcihuZXcgVXIobixlKSk6Q3Ioci5lcnJvcnMpfVVyLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fZXZhbHVhdG9yLmdsb2JhbHM9dCx0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZT1lLHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlU3RhdGU9cix0aGlzLl9ldmFsdWF0b3IuY2Fub25pY2FsPW4sdGhpcy5fZXZhbHVhdG9yLmF2YWlsYWJsZUltYWdlcz1pfHxudWxsLHRoaXMuX2V2YWx1YXRvci5mb3JtYXR0ZWRTZWN0aW9uPWEsdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcil9LFVyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fZXZhbHVhdG9yLmdsb2JhbHM9dCx0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZT1lfHxudWxsLHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlU3RhdGU9cnx8bnVsbCx0aGlzLl9ldmFsdWF0b3IuY2Fub25pY2FsPW4sdGhpcy5fZXZhbHVhdG9yLmF2YWlsYWJsZUltYWdlcz1pfHxudWxsLHRoaXMuX2V2YWx1YXRvci5mb3JtYXR0ZWRTZWN0aW9uPWF8fG51bGw7dHJ5e3ZhciBvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO2lmKG51bGw9PW98fCJudW1iZXIiPT10eXBlb2YgbyYmbyE9bylyZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO2lmKHRoaXMuX2VudW1WYWx1ZXMmJiEobyBpbiB0aGlzLl9lbnVtVmFsdWVzKSl0aHJvdyBuZXcgc2UoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9uZSBvZiAiK09iamVjdC5rZXlzKHRoaXMuX2VudW1WYWx1ZXMpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfSkpLmpvaW4oIiwgIikrIiwgYnV0IGZvdW5kICIrSlNPTi5zdHJpbmdpZnkobykrIiBpbnN0ZWFkLiIpO3JldHVybiBvfWNhdGNoKHQpe3JldHVybiB0aGlzLl93YXJuaW5nSGlzdG9yeVt0Lm1lc3NhZ2VdfHwodGhpcy5fd2FybmluZ0hpc3RvcnlbdC5tZXNzYWdlXT0hMCwidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2Fybih0Lm1lc3NhZ2UpKSx0aGlzLl9kZWZhdWx0VmFsdWV9fTt2YXIgSHI9ZnVuY3Rpb24odCxlKXt0aGlzLmtpbmQ9dCx0aGlzLl9zdHlsZUV4cHJlc3Npb249ZSx0aGlzLmlzU3RhdGVEZXBlbmRlbnQ9ImNvbnN0YW50IiE9PXQmJiFEZShlLmV4cHJlc3Npb24pfTtIci5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKHQsZSxyLG4saSxhKX0sSHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSxyLG4saSxhKX07dmFyIEdyPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMua2luZD10LHRoaXMuem9vbVN0b3BzPXIsdGhpcy5fc3R5bGVFeHByZXNzaW9uPWUsdGhpcy5pc1N0YXRlRGVwZW5kZW50PSJjYW1lcmEiIT09dCYmIURlKGUuZXhwcmVzc2lvbiksdGhpcy5pbnRlcnBvbGF0aW9uVHlwZT1ufTtmdW5jdGlvbiBZcih0LGUpe2lmKCJlcnJvciI9PT0odD1xcih0LGUpKS5yZXN1bHQpcmV0dXJuIHQ7dmFyIHI9dC52YWx1ZS5leHByZXNzaW9uLG49T2Uocik7aWYoIW4mJiFMcihlKSlyZXR1cm4gQ3IoW25ldyBQdCgiIiwiZGF0YSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkIildKTt2YXIgaT1SZShyLFsiem9vbSJdKTtpZighaSYmIUlyKGUpKXJldHVybiBDcihbbmV3IFB0KCIiLCJ6b29tIGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWQiKV0pO3ZhciBhPWZ1bmN0aW9uIHQoZSl7dmFyIHI9bnVsbDtpZihlIGluc3RhbmNlb2YgYXIpcj10KGUucmVzdWx0KTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBpcilmb3IodmFyIG49MCxpPWUuYXJncztuPGkubGVuZ3RoJiYhKHI9dChpW25dKSk7bis9MSk7ZWxzZShlIGluc3RhbmNlb2YgamV8fGUgaW5zdGFuY2VvZiBycikmJmUuaW5wdXQgaW5zdGFuY2VvZiBtZSYmInpvb20iPT09ZS5pbnB1dC5uYW1lJiYocj1lKTtyZXR1cm4gciBpbnN0YW5jZW9mIFB0fHxlLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7dmFyIG49dChlKTtuIGluc3RhbmNlb2YgUHQ/cj1uOiFyJiZuP3I9bmV3IFB0KCIiLCciem9vbSIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb24uJyk6ciYmbiYmciE9PW4mJihyPW5ldyBQdCgiIiwnT25seSBvbmUgem9vbS1iYXNlZCAic3RlcCIgb3IgImludGVycG9sYXRlIiBzdWJleHByZXNzaW9uIG1heSBiZSB1c2VkIGluIGFuIGV4cHJlc3Npb24uJykpfSkpLHJ9KHIpO3JldHVybiBhfHxpP2EgaW5zdGFuY2VvZiBQdD9DcihbYV0pOmEgaW5zdGFuY2VvZiByciYmIVByKGUpP0NyKFtuZXcgUHQoIiIsJyJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHByb3BlcnR5JyldKTpFcihhP25ldyBHcihuPyJjYW1lcmEiOiJjb21wb3NpdGUiLHQudmFsdWUsYS5sYWJlbHMsYSBpbnN0YW5jZW9mIHJyP2EuaW50ZXJwb2xhdGlvbjp2b2lkIDApOm5ldyBIcihuPyJjb25zdGFudCI6InNvdXJjZSIsdC52YWx1ZSkpOkNyKFtuZXcgUHQoIiIsJyJ6b29tIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgInN0ZXAiIG9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbi4nKV0pfUdyLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcodCxlLHIsbixpLGEpfSxHci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUodCxlLHIsbixpLGEpfSxHci5wcm90b3R5cGUuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGlvblR5cGU/cnIuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb25UeXBlLHQsZSxyKTowfTt2YXIgV3I9ZnVuY3Rpb24odCxlKXt0aGlzLl9wYXJhbWV0ZXJzPXQsdGhpcy5fc3BlY2lmaWNhdGlvbj1lLEN0KHRoaXMsZnVuY3Rpb24gdChlLHIpe3ZhciBuLGksYSxvPSJjb2xvciI9PT1yLnR5cGUscz1lLnN0b3BzJiYib2JqZWN0Ij09dHlwZW9mIGUuc3RvcHNbMF1bMF0sbD1zfHwhKHN8fHZvaWQgMCE9PWUucHJvcGVydHkpLGM9ZS50eXBlfHwoUHIocik/ImV4cG9uZW50aWFsIjoiaW50ZXJ2YWwiKTtpZihvJiYoKGU9Q3Qoe30sZSkpLnN0b3BzJiYoZS5zdG9wcz1lLnN0b3BzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0sS3QucGFyc2UodFsxXSldfSkpKSxlLmRlZmF1bHQ9S3QucGFyc2UoZS5kZWZhdWx0P2UuZGVmYXVsdDpyLmRlZmF1bHQpKSxlLmNvbG9yU3BhY2UmJiJyZ2IiIT09ZS5jb2xvclNwYWNlJiYhZXJbZS5jb2xvclNwYWNlXSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY29sb3Igc3BhY2U6ICIrZS5jb2xvclNwYWNlKTtpZigiZXhwb25lbnRpYWwiPT09YyluPU5yO2Vsc2UgaWYoImludGVydmFsIj09PWMpbj1CcjtlbHNlIGlmKCJjYXRlZ29yaWNhbCI9PT1jKXtuPUZyLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIHU9MCxmPWUuc3RvcHM7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdO2lbaFswXV09aFsxXX1hPXR5cGVvZiBlLnN0b3BzWzBdWzBdfWVsc2V7aWYoImlkZW50aXR5IiE9PWMpdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGZ1bmN0aW9uIHR5cGUgIicrYysnIicpO249anJ9aWYocyl7Zm9yKHZhciBwPXt9LGQ9W10sZz0wO2c8ZS5zdG9wcy5sZW5ndGg7ZysrKXt2YXIgbT1lLnN0b3BzW2ddLHY9bVswXS56b29tO3ZvaWQgMD09PXBbdl0mJihwW3ZdPXt6b29tOnYsdHlwZTplLnR5cGUscHJvcGVydHk6ZS5wcm9wZXJ0eSxkZWZhdWx0OmUuZGVmYXVsdCxzdG9wczpbXX0sZC5wdXNoKHYpKSxwW3ZdLnN0b3BzLnB1c2goW21bMF0udmFsdWUsbVsxXV0pfWZvcih2YXIgeT1bXSx4PTAsYj1kO3g8Yi5sZW5ndGg7eCs9MSl7dmFyIF89Ylt4XTt5LnB1c2goW3BbX10uem9vbSx0KHBbX10scildKX12YXIgdz17bmFtZToibGluZWFyIn07cmV0dXJue2tpbmQ6ImNvbXBvc2l0ZSIsaW50ZXJwb2xhdGlvblR5cGU6dyxpbnRlcnBvbGF0aW9uRmFjdG9yOnJyLmludGVycG9sYXRpb25GYWN0b3IuYmluZCh2b2lkIDAsdyksem9vbVN0b3BzOnkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKSxldmFsdWF0ZTpmdW5jdGlvbih0LG4pe3ZhciBpPXQuem9vbTtyZXR1cm4gTnIoe3N0b3BzOnksYmFzZTplLmJhc2V9LHIsaSkuZXZhbHVhdGUoaSxuKX19fWlmKGwpe3ZhciBUPSJleHBvbmVudGlhbCI9PT1jP3tuYW1lOiJleHBvbmVudGlhbCIsYmFzZTp2b2lkIDAhPT1lLmJhc2U/ZS5iYXNlOjF9Om51bGw7cmV0dXJue2tpbmQ6ImNhbWVyYSIsaW50ZXJwb2xhdGlvblR5cGU6VCxpbnRlcnBvbGF0aW9uRmFjdG9yOnJyLmludGVycG9sYXRpb25GYWN0b3IuYmluZCh2b2lkIDAsVCksem9vbVN0b3BzOmUuc3RvcHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKSxldmFsdWF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbihlLHIsdC56b29tLGksYSl9fX1yZXR1cm57a2luZDoic291cmNlIixldmFsdWF0ZTpmdW5jdGlvbih0LG8pe3ZhciBzPW8mJm8ucHJvcGVydGllcz9vLnByb3BlcnRpZXNbZS5wcm9wZXJ0eV06dm9pZCAwO3JldHVybiB2b2lkIDA9PT1zP1JyKGUuZGVmYXVsdCxyLmRlZmF1bHQpOm4oZSxyLHMsaSxhKX19fSh0aGlzLl9wYXJhbWV0ZXJzLHRoaXMuX3NwZWNpZmljYXRpb24pKX07ZnVuY3Rpb24gWHIodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWN8fHt9LGk9dC5vYmplY3RFbGVtZW50VmFsaWRhdG9yc3x8e30sYT10LnN0eWxlLG89dC5zdHlsZVNwZWMscz1bXSxsPXpyKHIpO2lmKCJvYmplY3QiIT09bClyZXR1cm5bbmV3IFN0KGUsciwib2JqZWN0IGV4cGVjdGVkLCAiK2wrIiBmb3VuZCIpXTtmb3IodmFyIGMgaW4gcil7dmFyIHU9Yy5zcGxpdCgiLiIpWzBdLGY9blt1XXx8blsiKiJdLGg9dm9pZCAwO2lmKGlbdV0paD1pW3VdO2Vsc2UgaWYoblt1XSloPWJuO2Vsc2UgaWYoaVsiKiJdKWg9aVsiKiJdO2Vsc2V7aWYoIW5bIioiXSl7cy5wdXNoKG5ldyBTdChlLHJbY10sJ3Vua25vd24gcHJvcGVydHkgIicrYysnIicpKTtjb250aW51ZX1oPWJufXM9cy5jb25jYXQoaCh7a2V5OihlP2UrIi4iOmUpK2MsdmFsdWU6cltjXSx2YWx1ZVNwZWM6ZixzdHlsZTphLHN0eWxlU3BlYzpvLG9iamVjdDpyLG9iamVjdEtleTpjfSxyKSl9Zm9yKHZhciBwIGluIG4paVtwXXx8bltwXS5yZXF1aXJlZCYmdm9pZCAwPT09bltwXS5kZWZhdWx0JiZ2b2lkIDA9PT1yW3BdJiZzLnB1c2gobmV3IFN0KGUsciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiJytwKyciJykpO3JldHVybiBzfWZ1bmN0aW9uIFpyKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxuPXQuc3R5bGUsaT10LnN0eWxlU3BlYyxhPXQua2V5LG89dC5hcnJheUVsZW1lbnRWYWxpZGF0b3J8fGJuO2lmKCJhcnJheSIhPT16cihlKSlyZXR1cm5bbmV3IFN0KGEsZSwiYXJyYXkgZXhwZWN0ZWQsICIrenIoZSkrIiBmb3VuZCIpXTtpZihyLmxlbmd0aCYmZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm5bbmV3IFN0KGEsZSwiYXJyYXkgbGVuZ3RoICIrci5sZW5ndGgrIiBleHBlY3RlZCwgbGVuZ3RoICIrZS5sZW5ndGgrIiBmb3VuZCIpXTtpZihyWyJtaW4tbGVuZ3RoIl0mJmUubGVuZ3RoPHJbIm1pbi1sZW5ndGgiXSlyZXR1cm5bbmV3IFN0KGEsZSwiYXJyYXkgbGVuZ3RoIGF0IGxlYXN0ICIrclsibWluLWxlbmd0aCJdKyIgZXhwZWN0ZWQsIGxlbmd0aCAiK2UubGVuZ3RoKyIgZm91bmQiKV07dmFyIHM9e3R5cGU6ci52YWx1ZSx2YWx1ZXM6ci52YWx1ZXN9O2kuJHZlcnNpb248NyYmKHMuZnVuY3Rpb249ci5mdW5jdGlvbiksIm9iamVjdCI9PT16cihyLnZhbHVlKSYmKHM9ci52YWx1ZSk7Zm9yKHZhciBsPVtdLGM9MDtjPGUubGVuZ3RoO2MrKylsPWwuY29uY2F0KG8oe2FycmF5OmUsYXJyYXlJbmRleDpjLHZhbHVlOmVbY10sdmFsdWVTcGVjOnMsc3R5bGU6bixzdHlsZVNwZWM6aSxrZXk6YSsiWyIrYysiXSJ9KSk7cmV0dXJuIGx9ZnVuY3Rpb24gSnIodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsaT16cihyKTtyZXR1cm4ibnVtYmVyIj09PWkmJnIhPXImJihpPSJOYU4iKSwibnVtYmVyIiE9PWk/W25ldyBTdChlLHIsIm51bWJlciBleHBlY3RlZCwgIitpKyIgZm91bmQiKV06Im1pbmltdW0iaW4gbiYmcjxuLm1pbmltdW0/W25ldyBTdChlLHIscisiIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSAiK24ubWluaW11bSldOiJtYXhpbXVtImluIG4mJnI+bi5tYXhpbXVtP1tuZXcgU3QoZSxyLHIrIiBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgIituLm1heGltdW0pXTpbXX1mdW5jdGlvbiBLcih0KXt2YXIgZSxyLG4saT10LnZhbHVlU3BlYyxhPUx0KHQudmFsdWUudHlwZSksbz17fSxzPSJjYXRlZ29yaWNhbCIhPT1hJiZ2b2lkIDA9PT10LnZhbHVlLnByb3BlcnR5LGw9IXMsYz0iYXJyYXkiPT09enIodC52YWx1ZS5zdG9wcykmJiJhcnJheSI9PT16cih0LnZhbHVlLnN0b3BzWzBdKSYmIm9iamVjdCI9PT16cih0LnZhbHVlLnN0b3BzWzBdWzBdKSx1PVhyKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6dC5zdHlsZVNwZWMuZnVuY3Rpb24sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3N0b3BzOmZ1bmN0aW9uKHQpe2lmKCJpZGVudGl0eSI9PT1hKXJldHVybltuZXcgU3QodC5rZXksdC52YWx1ZSwnaWRlbnRpdHkgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGEgInN0b3BzIiBwcm9wZXJ0eScpXTt2YXIgZT1bXSxyPXQudmFsdWU7cmV0dXJuIGU9ZS5jb25jYXQoWnIoe2tleTp0LmtleSx2YWx1ZTpyLHZhbHVlU3BlYzp0LnZhbHVlU3BlYyxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxhcnJheUVsZW1lbnRWYWxpZGF0b3I6Zn0pKSwiYXJyYXkiPT09enIocikmJjA9PT1yLmxlbmd0aCYmZS5wdXNoKG5ldyBTdCh0LmtleSxyLCJhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHN0b3AiKSksZX0sZGVmYXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gYm4oe2tleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHZhbHVlU3BlYzppLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSl9fX0pO3JldHVybiJpZGVudGl0eSI9PT1hJiZzJiZ1LnB1c2gobmV3IFN0KHQua2V5LHQudmFsdWUsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInByb3BlcnR5IicpKSwiaWRlbnRpdHkiPT09YXx8dC52YWx1ZS5zdG9wc3x8dS5wdXNoKG5ldyBTdCh0LmtleSx0LnZhbHVlLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJzdG9wcyInKSksImV4cG9uZW50aWFsIj09PWEmJnQudmFsdWVTcGVjLmV4cHJlc3Npb24mJiFQcih0LnZhbHVlU3BlYykmJnUucHVzaChuZXcgU3QodC5rZXksdC52YWx1ZSwiZXhwb25lbnRpYWwgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSksdC5zdHlsZVNwZWMuJHZlcnNpb24+PTgmJihsJiYhTHIodC52YWx1ZVNwZWMpP3UucHVzaChuZXcgU3QodC5rZXksdC52YWx1ZSwicHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSk6cyYmIUlyKHQudmFsdWVTcGVjKSYmdS5wdXNoKG5ldyBTdCh0LmtleSx0LnZhbHVlLCJ6b29tIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkIikpKSwiY2F0ZWdvcmljYWwiIT09YSYmIWN8fHZvaWQgMCE9PXQudmFsdWUucHJvcGVydHl8fHUucHVzaChuZXcgU3QodC5rZXksdC52YWx1ZSwnInByb3BlcnR5IiBwcm9wZXJ0eSBpcyByZXF1aXJlZCcpKSx1O2Z1bmN0aW9uIGYodCl7dmFyIGU9W10sYT10LnZhbHVlLHM9dC5rZXk7aWYoImFycmF5IiE9PXpyKGEpKXJldHVybltuZXcgU3QocyxhLCJhcnJheSBleHBlY3RlZCwgIit6cihhKSsiIGZvdW5kIildO2lmKDIhPT1hLmxlbmd0aClyZXR1cm5bbmV3IFN0KHMsYSwiYXJyYXkgbGVuZ3RoIDIgZXhwZWN0ZWQsIGxlbmd0aCAiK2EubGVuZ3RoKyIgZm91bmQiKV07aWYoYyl7aWYoIm9iamVjdCIhPT16cihhWzBdKSlyZXR1cm5bbmV3IFN0KHMsYSwib2JqZWN0IGV4cGVjdGVkLCAiK3pyKGFbMF0pKyIgZm91bmQiKV07aWYodm9pZCAwPT09YVswXS56b29tKXJldHVybltuZXcgU3QocyxhLCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHpvb20iKV07aWYodm9pZCAwPT09YVswXS52YWx1ZSlyZXR1cm5bbmV3IFN0KHMsYSwib2JqZWN0IHN0b3Aga2V5IG11c3QgaGF2ZSB2YWx1ZSIpXTtpZihuJiZuPkx0KGFbMF0uem9vbSkpcmV0dXJuW25ldyBTdChzLGFbMF0uem9vbSwic3RvcCB6b29tIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXIiKV07THQoYVswXS56b29tKSE9PW4mJihuPUx0KGFbMF0uem9vbSkscj12b2lkIDAsbz17fSksZT1lLmNvbmNhdChYcih7a2V5OnMrIlswXSIsdmFsdWU6YVswXSx2YWx1ZVNwZWM6e3pvb206e319LHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnt6b29tOkpyLHZhbHVlOmh9fSkpfWVsc2UgZT1lLmNvbmNhdChoKHtrZXk6cysiWzBdIix2YWx1ZTphWzBdLHZhbHVlU3BlYzp7fSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30sYSkpO3JldHVybiBWcihJdChhWzFdKSk/ZS5jb25jYXQoW25ldyBTdChzKyJbMV0iLGFbMV0sImV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiBzdG9wcy4iKV0pOmUuY29uY2F0KGJuKHtrZXk6cysiWzFdIix2YWx1ZTphWzFdLHZhbHVlU3BlYzppLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSkpfWZ1bmN0aW9uIGgodCxuKXt2YXIgcz16cih0LnZhbHVlKSxsPUx0KHQudmFsdWUpLGM9bnVsbCE9PXQudmFsdWU/dC52YWx1ZTpuO2lmKGUpe2lmKHMhPT1lKXJldHVybltuZXcgU3QodC5rZXksYyxzKyIgc3RvcCBkb21haW4gdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3AgZG9tYWluIHR5cGUgIitlKV19ZWxzZSBlPXM7aWYoIm51bWJlciIhPT1zJiYic3RyaW5nIiE9PXMmJiJib29sZWFuIiE9PXMpcmV0dXJuW25ldyBTdCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKV07aWYoIm51bWJlciIhPT1zJiYiY2F0ZWdvcmljYWwiIT09YSl7dmFyIHU9Im51bWJlciBleHBlY3RlZCwgIitzKyIgZm91bmQiO3JldHVybiBMcihpKSYmdm9pZCAwPT09YSYmKHUrPSdcbklmIHlvdSBpbnRlbmRlZCB0byB1c2UgYSBjYXRlZ29yaWNhbCBmdW5jdGlvbiwgc3BlY2lmeSBgInR5cGUiOiAiY2F0ZWdvcmljYWwiYC4nKSxbbmV3IFN0KHQua2V5LGMsdSldfXJldHVybiJjYXRlZ29yaWNhbCIhPT1hfHwibnVtYmVyIiE9PXN8fGlzRmluaXRlKGwpJiZNYXRoLmZsb29yKGwpPT09bD8iY2F0ZWdvcmljYWwiIT09YSYmIm51bWJlciI9PT1zJiZ2b2lkIDAhPT1yJiZsPHI/W25ldyBTdCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIildOihyPWwsImNhdGVnb3JpY2FsIj09PWEmJmwgaW4gbz9bbmV3IFN0KHQua2V5LGMsInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZSIpXToob1tsXT0hMCxbXSkpOltuZXcgU3QodC5rZXksYywiaW50ZWdlciBleHBlY3RlZCwgZm91bmQgIitsKV19fWZ1bmN0aW9uIFFyKHQpe3ZhciBlPSgicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dD9ZcjpxcikoSXQodC52YWx1ZSksdC52YWx1ZVNwZWMpO2lmKCJlcnJvciI9PT1lLnJlc3VsdClyZXR1cm4gZS52YWx1ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU3QoIiIrdC5rZXkrZS5rZXksdC52YWx1ZSxlLm1lc3NhZ2UpfSkpO3ZhciByPWUudmFsdWUuZXhwcmVzc2lvbnx8ZS52YWx1ZS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb247aWYoInByb3BlcnR5Ij09PXQuZXhwcmVzc2lvbkNvbnRleHQmJiJ0ZXh0LWZvbnQiPT09dC5wcm9wZXJ0eUtleSYmIXIub3V0cHV0RGVmaW5lZCgpKXJldHVybltuZXcgU3QodC5rZXksdC52YWx1ZSwnSW52YWxpZCBkYXRhIGV4cHJlc3Npb24gZm9yICInK3QucHJvcGVydHlLZXkrJyIuIE91dHB1dCB2YWx1ZXMgbXVzdCBiZSBjb250YWluZWQgYXMgbGl0ZXJhbHMgd2l0aGluIHRoZSBleHByZXNzaW9uLicpXTtpZigicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dCYmImxheW91dCI9PT10LnByb3BlcnR5VHlwZSYmIURlKHIpKXJldHVybltuZXcgU3QodC5rZXksdC52YWx1ZSwnImZlYXR1cmUtc3RhdGUiIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBsYXlvdXQgcHJvcGVydGllcy4nKV07aWYoImZpbHRlciI9PT10LmV4cHJlc3Npb25Db250ZXh0JiYhRGUocikpcmV0dXJuW25ldyBTdCh0LmtleSx0LnZhbHVlLCciZmVhdHVyZS1zdGF0ZSIgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGZpbHRlcnMuJyldO2lmKHQuZXhwcmVzc2lvbkNvbnRleHQmJjA9PT10LmV4cHJlc3Npb25Db250ZXh0LmluZGV4T2YoImNsdXN0ZXIiKSl7aWYoIVJlKHIsWyJ6b29tIiwiZmVhdHVyZS1zdGF0ZSJdKSlyZXR1cm5bbmV3IFN0KHQua2V5LHQudmFsdWUsJyJ6b29tIiBhbmQgImZlYXR1cmUtc3RhdGUiIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggY2x1c3RlciBwcm9wZXJ0aWVzLicpXTtpZigiY2x1c3Rlci1pbml0aWFsIj09PXQuZXhwcmVzc2lvbkNvbnRleHQmJiFPZShyKSlyZXR1cm5bbmV3IFN0KHQua2V5LHQudmFsdWUsIkZlYXR1cmUgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGluaXRpYWwgZXhwcmVzc2lvbiBwYXJ0IG9mIGNsdXN0ZXIgcHJvcGVydGllcy4iKV19cmV0dXJuW119ZnVuY3Rpb24gJHIodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsaT1bXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuLnZhbHVlcyk/LTE9PT1uLnZhbHVlcy5pbmRleE9mKEx0KHIpKSYmaS5wdXNoKG5ldyBTdChlLHIsImV4cGVjdGVkIG9uZSBvZiBbIituLnZhbHVlcy5qb2luKCIsICIpKyJdLCAiK0pTT04uc3RyaW5naWZ5KHIpKyIgZm91bmQiKSk6LTE9PT1PYmplY3Qua2V5cyhuLnZhbHVlcykuaW5kZXhPZihMdChyKSkmJmkucHVzaChuZXcgU3QoZSxyLCJleHBlY3RlZCBvbmUgb2YgWyIrT2JqZWN0LmtleXMobi52YWx1ZXMpLmpvaW4oIiwgIikrIl0sICIrSlNPTi5zdHJpbmdpZnkocikrIiBmb3VuZCIpKSxpfWZ1bmN0aW9uIHRuKHQpe2lmKCEwPT09dHx8ITE9PT10KXJldHVybiEwO2lmKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGgpcmV0dXJuITE7c3dpdGNoKHRbMF0pe2Nhc2UiaGFzIjpyZXR1cm4gdC5sZW5ndGg+PTImJiIkaWQiIT09dFsxXSYmIiR0eXBlIiE9PXRbMV07Y2FzZSJpbiI6cmV0dXJuIHQubGVuZ3RoPj0zJiYoInN0cmluZyIhPXR5cGVvZiB0WzFdfHxBcnJheS5pc0FycmF5KHRbMl0pKTtjYXNlIiFpbiI6Y2FzZSIhaGFzIjpjYXNlIm5vbmUiOnJldHVybiExO2Nhc2UiPT0iOmNhc2UiIT0iOmNhc2UiPiI6Y2FzZSI+PSI6Y2FzZSI8IjpjYXNlIjw9IjpyZXR1cm4gMyE9PXQubGVuZ3RofHxBcnJheS5pc0FycmF5KHRbMV0pfHxBcnJheS5pc0FycmF5KHRbMl0pO2Nhc2UiYW55IjpjYXNlImFsbCI6Zm9yKHZhciBlPTAscj10LnNsaWNlKDEpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtpZighdG4obikmJiJib29sZWFuIiE9dHlwZW9mIG4pcmV0dXJuITF9cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMH19V3IuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBXcih0Ll9wYXJhbWV0ZXJzLHQuX3NwZWNpZmljYXRpb24pfSxXci5zZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJue19wYXJhbWV0ZXJzOnQuX3BhcmFtZXRlcnMsX3NwZWNpZmljYXRpb246dC5fc3BlY2lmaWNhdGlvbn19O3ZhciBlbj17dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSx0cmFuc2l0aW9uOiExLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4iLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX19O2Z1bmN0aW9uIHJuKHQpe2lmKG51bGw9PXQpcmV0dXJue2ZpbHRlcjpmdW5jdGlvbigpe3JldHVybiEwfSxuZWVkR2VvbWV0cnk6ITF9O3RuKHQpfHwodD1hbih0KSk7dmFyIGU9cXIodCxlbik7aWYoImVycm9yIj09PWUucmVzdWx0KXRocm93IG5ldyBFcnJvcihlLnZhbHVlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5KyI6ICIrdC5tZXNzYWdlfSkpLmpvaW4oIiwgIikpO3JldHVybntmaWx0ZXI6ZnVuY3Rpb24odCxyLG4pe3JldHVybiBlLnZhbHVlLmV2YWx1YXRlKHQscix7fSxuKX0sbmVlZEdlb21ldHJ5OmZ1bmN0aW9uIHQoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuITE7aWYoIndpdGhpbiI9PT1lWzBdKXJldHVybiEwO2Zvcih2YXIgcj0xO3I8ZS5sZW5ndGg7cisrKWlmKHQoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9KHQpfX1mdW5jdGlvbiBubih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiBhbih0KXtpZighdClyZXR1cm4hMDt2YXIgZSxyPXRbMF07cmV0dXJuIHQubGVuZ3RoPD0xPyJhbnkiIT09cjoiPT0iPT09cj9vbih0WzFdLHRbMl0sIj09Iik6IiE9Ij09PXI/Y24ob24odFsxXSx0WzJdLCI9PSIpKToiPCI9PT1yfHwiPiI9PT1yfHwiPD0iPT09cnx8Ij49Ij09PXI/b24odFsxXSx0WzJdLHIpOiJhbnkiPT09cj8oZT10LnNsaWNlKDEpLFsiYW55Il0uY29uY2F0KGUubWFwKGFuKSkpOiJhbGwiPT09cj9bImFsbCJdLmNvbmNhdCh0LnNsaWNlKDEpLm1hcChhbikpOiJub25lIj09PXI/WyJhbGwiXS5jb25jYXQodC5zbGljZSgxKS5tYXAoYW4pLm1hcChjbikpOiJpbiI9PT1yP3NuKHRbMV0sdC5zbGljZSgyKSk6IiFpbiI9PT1yP2NuKHNuKHRbMV0sdC5zbGljZSgyKSkpOiJoYXMiPT09cj9sbih0WzFdKToiIWhhcyI9PT1yP2NuKGxuKHRbMV0pKToid2l0aGluIiE9PXJ8fHR9ZnVuY3Rpb24gb24odCxlLHIpe3N3aXRjaCh0KXtjYXNlIiR0eXBlIjpyZXR1cm5bImZpbHRlci10eXBlLSIrcixlXTtjYXNlIiRpZCI6cmV0dXJuWyJmaWx0ZXItaWQtIityLGVdO2RlZmF1bHQ6cmV0dXJuWyJmaWx0ZXItIityLHQsZV19fWZ1bmN0aW9uIHNuKHQsZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiExO3N3aXRjaCh0KXtjYXNlIiR0eXBlIjpyZXR1cm5bImZpbHRlci10eXBlLWluIixbImxpdGVyYWwiLGVdXTtjYXNlIiRpZCI6cmV0dXJuWyJmaWx0ZXItaWQtaW4iLFsibGl0ZXJhbCIsZV1dO2RlZmF1bHQ6cmV0dXJuIGUubGVuZ3RoPjIwMCYmIWUuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0IT10eXBlb2YgZVswXX0pKT9bImZpbHRlci1pbi1sYXJnZSIsdCxbImxpdGVyYWwiLGUuc29ydChubildXTpbImZpbHRlci1pbi1zbWFsbCIsdCxbImxpdGVyYWwiLGVdXX19ZnVuY3Rpb24gbG4odCl7c3dpdGNoKHQpe2Nhc2UiJHR5cGUiOnJldHVybiEwO2Nhc2UiJGlkIjpyZXR1cm5bImZpbHRlci1oYXMtaWQiXTtkZWZhdWx0OnJldHVyblsiZmlsdGVyLWhhcyIsdF19fWZ1bmN0aW9uIGNuKHQpe3JldHVyblsiISIsdF19ZnVuY3Rpb24gdW4odCl7cmV0dXJuIHRuKEl0KHQudmFsdWUpKT9RcihDdCh7fSx0LHtleHByZXNzaW9uQ29udGV4dDoiZmlsdGVyIix2YWx1ZVNwZWM6e3ZhbHVlOiJib29sZWFuIn19KSk6ZnVuY3Rpb24gdChlKXt2YXIgcj1lLnZhbHVlLG49ZS5rZXk7aWYoImFycmF5IiE9PXpyKHIpKXJldHVybltuZXcgU3QobixyLCJhcnJheSBleHBlY3RlZCwgIit6cihyKSsiIGZvdW5kIildO3ZhciBpLGE9ZS5zdHlsZVNwZWMsbz1bXTtpZihyLmxlbmd0aDwxKXJldHVybltuZXcgU3QobixyLCJmaWx0ZXIgYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IDEgZWxlbWVudCIpXTtzd2l0Y2gobz1vLmNvbmNhdCgkcih7a2V5Om4rIlswXSIsdmFsdWU6clswXSx2YWx1ZVNwZWM6YS5maWx0ZXJfb3BlcmF0b3Isc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSksTHQoclswXSkpe2Nhc2UiPCI6Y2FzZSI8PSI6Y2FzZSI+IjpjYXNlIj49IjpyLmxlbmd0aD49MiYmIiR0eXBlIj09PUx0KHJbMV0pJiZvLnB1c2gobmV3IFN0KG4sciwnIiR0eXBlIiBjYW5ub3QgYmUgdXNlIHdpdGggb3BlcmF0b3IgIicrclswXSsnIicpKTtjYXNlIj09IjpjYXNlIiE9IjozIT09ci5sZW5ndGgmJm8ucHVzaChuZXcgU3QobixyLCdmaWx0ZXIgYXJyYXkgZm9yIG9wZXJhdG9yICInK3JbMF0rJyIgbXVzdCBoYXZlIDMgZWxlbWVudHMnKSk7Y2FzZSJpbiI6Y2FzZSIhaW4iOnIubGVuZ3RoPj0yJiYic3RyaW5nIiE9PShpPXpyKHJbMV0pKSYmby5wdXNoKG5ldyBTdChuKyJbMV0iLHJbMV0sInN0cmluZyBleHBlY3RlZCwgIitpKyIgZm91bmQiKSk7Zm9yKHZhciBzPTI7czxyLmxlbmd0aDtzKyspaT16cihyW3NdKSwiJHR5cGUiPT09THQoclsxXSk/bz1vLmNvbmNhdCgkcih7a2V5Om4rIlsiK3MrIl0iLHZhbHVlOnJbc10sdmFsdWVTcGVjOmEuZ2VvbWV0cnlfdHlwZSxzdHlsZTplLnN0eWxlLHN0eWxlU3BlYzplLnN0eWxlU3BlY30pKToic3RyaW5nIiE9PWkmJiJudW1iZXIiIT09aSYmImJvb2xlYW4iIT09aSYmby5wdXNoKG5ldyBTdChuKyJbIitzKyJdIixyW3NdLCJzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiBleHBlY3RlZCwgIitpKyIgZm91bmQiKSk7YnJlYWs7Y2FzZSJhbnkiOmNhc2UiYWxsIjpjYXNlIm5vbmUiOmZvcih2YXIgbD0xO2w8ci5sZW5ndGg7bCsrKW89by5jb25jYXQodCh7a2V5Om4rIlsiK2wrIl0iLHZhbHVlOnJbbF0sc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk7YnJlYWs7Y2FzZSJoYXMiOmNhc2UiIWhhcyI6aT16cihyWzFdKSwyIT09ci5sZW5ndGg/by5wdXNoKG5ldyBTdChuLHIsJ2ZpbHRlciBhcnJheSBmb3IgIicrclswXSsnIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50cycpKToic3RyaW5nIiE9PWkmJm8ucHVzaChuZXcgU3QobisiWzFdIixyWzFdLCJzdHJpbmcgZXhwZWN0ZWQsICIraSsiIGZvdW5kIikpO2JyZWFrO2Nhc2Uid2l0aGluIjppPXpyKHJbMV0pLDIhPT1yLmxlbmd0aD9vLnB1c2gobmV3IFN0KG4sciwnZmlsdGVyIGFycmF5IGZvciAiJytyWzBdKyciIG9wZXJhdG9yIG11c3QgaGF2ZSAyIGVsZW1lbnRzJykpOiJvYmplY3QiIT09aSYmby5wdXNoKG5ldyBTdChuKyJbMV0iLHJbMV0sIm9iamVjdCBleHBlY3RlZCwgIitpKyIgZm91bmQiKSl9cmV0dXJuIG99KHQpfWZ1bmN0aW9uIGZuKHQsZSl7dmFyIHI9dC5rZXksbj10LnN0eWxlLGk9dC5zdHlsZVNwZWMsYT10LnZhbHVlLG89dC5vYmplY3RLZXkscz1pW2UrIl8iK3QubGF5ZXJUeXBlXTtpZighcylyZXR1cm5bXTt2YXIgbD1vLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2lmKCJwYWludCI9PT1lJiZsJiZzW2xbMV1dJiZzW2xbMV1dLnRyYW5zaXRpb24pcmV0dXJuIGJuKHtrZXk6cix2YWx1ZTphLHZhbHVlU3BlYzppLnRyYW5zaXRpb24sc3R5bGU6bixzdHlsZVNwZWM6aX0pO3ZhciBjLHU9dC52YWx1ZVNwZWN8fHNbb107aWYoIXUpcmV0dXJuW25ldyBTdChyLGEsJ3Vua25vd24gcHJvcGVydHkgIicrbysnIicpXTtpZigic3RyaW5nIj09PXpyKGEpJiZMcih1KSYmIXUudG9rZW5zJiYoYz0vXnsoW159XSspfSQvLmV4ZWMoYSkpKXJldHVybltuZXcgU3QocixhLCciJytvKyciIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJwb2xhdGlvbiBzeW50YXhcblVzZSBhbiBpZGVudGl0eSBwcm9wZXJ0eSBmdW5jdGlvbiBpbnN0ZWFkOiBgeyAidHlwZSI6ICJpZGVudGl0eSIsICJwcm9wZXJ0eSI6ICcrSlNPTi5zdHJpbmdpZnkoY1sxXSkrIiB9YC4iKV07dmFyIGY9W107cmV0dXJuInN5bWJvbCI9PT10LmxheWVyVHlwZSYmKCJ0ZXh0LWZpZWxkIj09PW8mJm4mJiFuLmdseXBocyYmZi5wdXNoKG5ldyBTdChyLGEsJ3VzZSBvZiAidGV4dC1maWVsZCIgcmVxdWlyZXMgYSBzdHlsZSAiZ2x5cGhzIiBwcm9wZXJ0eScpKSwidGV4dC1mb250Ij09PW8mJk9yKEl0KGEpKSYmImlkZW50aXR5Ij09PUx0KGEudHlwZSkmJmYucHVzaChuZXcgU3QocixhLCcidGV4dC1mb250IiBkb2VzIG5vdCBzdXBwb3J0IGlkZW50aXR5IGZ1bmN0aW9ucycpKSksZi5jb25jYXQoYm4oe2tleTp0LmtleSx2YWx1ZTphLHZhbHVlU3BlYzp1LHN0eWxlOm4sc3R5bGVTcGVjOmksZXhwcmVzc2lvbkNvbnRleHQ6InByb3BlcnR5Iixwcm9wZXJ0eVR5cGU6ZSxwcm9wZXJ0eUtleTpvfSkpfWZ1bmN0aW9uIGhuKHQpe3JldHVybiBmbih0LCJwYWludCIpfWZ1bmN0aW9uIHBuKHQpe3JldHVybiBmbih0LCJsYXlvdXQiKX1mdW5jdGlvbiBkbih0KXt2YXIgZT1bXSxyPXQudmFsdWUsbj10LmtleSxpPXQuc3R5bGUsYT10LnN0eWxlU3BlYztyLnR5cGV8fHIucmVmfHxlLnB1c2gobmV3IFN0KG4sciwnZWl0aGVyICJ0eXBlIiBvciAicmVmIiBpcyByZXF1aXJlZCcpKTt2YXIgbyxzPUx0KHIudHlwZSksbD1MdChyLnJlZik7aWYoci5pZClmb3IodmFyIGM9THQoci5pZCksdT0wO3U8dC5hcnJheUluZGV4O3UrKyl7dmFyIGY9aS5sYXllcnNbdV07THQoZi5pZCk9PT1jJiZlLnB1c2gobmV3IFN0KG4sci5pZCwnZHVwbGljYXRlIGxheWVyIGlkICInK3IuaWQrJyIsIHByZXZpb3VzbHkgdXNlZCBhdCBsaW5lICcrZi5pZC5fX2xpbmVfXykpfWlmKCJyZWYiaW4gcilbInR5cGUiLCJzb3VyY2UiLCJzb3VyY2UtbGF5ZXIiLCJmaWx0ZXIiLCJsYXlvdXQiXS5mb3JFYWNoKChmdW5jdGlvbih0KXt0IGluIHImJmUucHVzaChuZXcgU3QobixyW3RdLCciJyt0KyciIGlzIHByb2hpYml0ZWQgZm9yIHJlZiBsYXllcnMnKSl9KSksaS5sYXllcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7THQodC5pZCk9PT1sJiYobz10KX0pKSxvP28ucmVmP2UucHVzaChuZXcgU3QobixyLnJlZiwicmVmIGNhbm5vdCByZWZlcmVuY2UgYW5vdGhlciByZWYgbGF5ZXIiKSk6cz1MdChvLnR5cGUpOmUucHVzaChuZXcgU3QobixyLnJlZiwncmVmIGxheWVyICInK2wrJyIgbm90IGZvdW5kJykpO2Vsc2UgaWYoImJhY2tncm91bmQiIT09cylpZihyLnNvdXJjZSl7dmFyIGg9aS5zb3VyY2VzJiZpLnNvdXJjZXNbci5zb3VyY2VdLHA9aCYmTHQoaC50eXBlKTtoPyJ2ZWN0b3IiPT09cCYmInJhc3RlciI9PT1zP2UucHVzaChuZXcgU3QobixyLnNvdXJjZSwnbGF5ZXIgIicrci5pZCsnIiByZXF1aXJlcyBhIHJhc3RlciBzb3VyY2UnKSk6InJhc3RlciI9PT1wJiYicmFzdGVyIiE9PXM/ZS5wdXNoKG5ldyBTdChuLHIuc291cmNlLCdsYXllciAiJytyLmlkKyciIHJlcXVpcmVzIGEgdmVjdG9yIHNvdXJjZScpKToidmVjdG9yIiE9PXB8fHJbInNvdXJjZS1sYXllciJdPyJyYXN0ZXItZGVtIj09PXAmJiJoaWxsc2hhZGUiIT09cz9lLnB1c2gobmV3IFN0KG4sci5zb3VyY2UsInJhc3Rlci1kZW0gc291cmNlIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBsYXllciB0eXBlICdoaWxsc2hhZGUnLiIpKToibGluZSIhPT1zfHwhci5wYWludHx8IXIucGFpbnRbImxpbmUtZ3JhZGllbnQiXXx8Imdlb2pzb24iPT09cCYmaC5saW5lTWV0cmljc3x8ZS5wdXNoKG5ldyBTdChuLHIsJ2xheWVyICInK3IuaWQrJyIgc3BlY2lmaWVzIGEgbGluZS1ncmFkaWVudCwgd2hpY2ggcmVxdWlyZXMgYSBHZW9KU09OIHNvdXJjZSB3aXRoIGBsaW5lTWV0cmljc2AgZW5hYmxlZC4nKSk6ZS5wdXNoKG5ldyBTdChuLHIsJ2xheWVyICInK3IuaWQrJyIgbXVzdCBzcGVjaWZ5IGEgInNvdXJjZS1sYXllciInKSk6ZS5wdXNoKG5ldyBTdChuLHIuc291cmNlLCdzb3VyY2UgIicrci5zb3VyY2UrJyIgbm90IGZvdW5kJykpfWVsc2UgZS5wdXNoKG5ldyBTdChuLHIsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInNvdXJjZSInKSk7cmV0dXJuIGU9ZS5jb25jYXQoWHIoe2tleTpuLHZhbHVlOnIsdmFsdWVTcGVjOmEubGF5ZXIsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbigpe3JldHVybltdfSx0eXBlOmZ1bmN0aW9uKCl7cmV0dXJuIGJuKHtrZXk6bisiLnR5cGUiLHZhbHVlOnIudHlwZSx2YWx1ZVNwZWM6YS5sYXllci50eXBlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdDpyLG9iamVjdEtleToidHlwZSJ9KX0sZmlsdGVyOnVuLGxheW91dDpmdW5jdGlvbih0KXtyZXR1cm4gWHIoe2xheWVyOnIsa2V5OnQua2V5LHZhbHVlOnQudmFsdWUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbih0KXtyZXR1cm4gcG4oQ3Qoe2xheWVyVHlwZTpzfSx0KSl9fX0pfSxwYWludDpmdW5jdGlvbih0KXtyZXR1cm4gWHIoe2xheWVyOnIsa2V5OnQua2V5LHZhbHVlOnQudmFsdWUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbih0KXtyZXR1cm4gaG4oQ3Qoe2xheWVyVHlwZTpzfSx0KSl9fX0pfX19KSl9ZnVuY3Rpb24gZ24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49enIoZSk7cmV0dXJuInN0cmluZyIhPT1uP1tuZXcgU3QocixlLCJzdHJpbmcgZXhwZWN0ZWQsICIrbisiIGZvdW5kIildOltdfXZhciBtbj17cHJvbW90ZUlkOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZTtpZigic3RyaW5nIj09PXpyKHIpKXJldHVybiBnbih7a2V5OmUsdmFsdWU6cn0pO3ZhciBuPVtdO2Zvcih2YXIgaSBpbiByKW4ucHVzaC5hcHBseShuLGduKHtrZXk6ZSsiLiIraSx2YWx1ZTpyW2ldfSkpO3JldHVybiBufX07ZnVuY3Rpb24gdm4odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49dC5zdHlsZVNwZWMsaT10LnN0eWxlO2lmKCFlLnR5cGUpcmV0dXJuW25ldyBTdChyLGUsJyJ0eXBlIiBpcyByZXF1aXJlZCcpXTt2YXIgYSxvPUx0KGUudHlwZSk7c3dpdGNoKG8pe2Nhc2UidmVjdG9yIjpjYXNlInJhc3RlciI6Y2FzZSJyYXN0ZXItZGVtIjpyZXR1cm4gWHIoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm5bInNvdXJjZV8iK28ucmVwbGFjZSgiLSIsIl8iKV0sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6bixvYmplY3RFbGVtZW50VmFsaWRhdG9yczptbn0pO2Nhc2UiZ2VvanNvbiI6aWYoYT1Ycih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfZ2VvanNvbixzdHlsZTppLHN0eWxlU3BlYzpuLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOm1ufSksZS5jbHVzdGVyKWZvcih2YXIgcyBpbiBlLmNsdXN0ZXJQcm9wZXJ0aWVzKXt2YXIgbD1lLmNsdXN0ZXJQcm9wZXJ0aWVzW3NdLGM9bFswXSx1PSJzdHJpbmciPT10eXBlb2YgYz9bYyxbImFjY3VtdWxhdGVkIl0sWyJnZXQiLHNdXTpjO2EucHVzaC5hcHBseShhLFFyKHtrZXk6cisiLiIrcysiLm1hcCIsdmFsdWU6bFsxXSxleHByZXNzaW9uQ29udGV4dDoiY2x1c3Rlci1tYXAifSkpLGEucHVzaC5hcHBseShhLFFyKHtrZXk6cisiLiIrcysiLnJlZHVjZSIsdmFsdWU6dSxleHByZXNzaW9uQ29udGV4dDoiY2x1c3Rlci1yZWR1Y2UifSkpfXJldHVybiBhO2Nhc2UidmlkZW8iOnJldHVybiBYcih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfdmlkZW8sc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2UiaW1hZ2UiOnJldHVybiBYcih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfaW1hZ2Usc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2UiY2FudmFzIjpyZXR1cm5bbmV3IFN0KHIsbnVsbCwiUGxlYXNlIHVzZSBydW50aW1lIEFQSXMgdG8gYWRkIGNhbnZhcyBzb3VyY2VzLCByYXRoZXIgdGhhbiBpbmNsdWRpbmcgdGhlbSBpbiBzdHlsZXNoZWV0cy4iLCJzb3VyY2UuY2FudmFzIildO2RlZmF1bHQ6cmV0dXJuICRyKHtrZXk6cisiLnR5cGUiLHZhbHVlOmUudHlwZSx2YWx1ZVNwZWM6e3ZhbHVlczpbInZlY3RvciIsInJhc3RlciIsInJhc3Rlci1kZW0iLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSJdfSxzdHlsZTppLHN0eWxlU3BlYzpufSl9fWZ1bmN0aW9uIHluKHQpe3ZhciBlPXQudmFsdWUscj10LnN0eWxlU3BlYyxuPXIubGlnaHQsaT10LnN0eWxlLGE9W10sbz16cihlKTtpZih2b2lkIDA9PT1lKXJldHVybiBhO2lmKCJvYmplY3QiIT09bylyZXR1cm4gYS5jb25jYXQoW25ldyBTdCgibGlnaHQiLGUsIm9iamVjdCBleHBlY3RlZCwgIitvKyIgZm91bmQiKV0pO2Zvcih2YXIgcyBpbiBlKXt2YXIgbD1zLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2E9YS5jb25jYXQobCYmbltsWzFdXSYmbltsWzFdXS50cmFuc2l0aW9uP2JuKHtrZXk6cyx2YWx1ZTplW3NdLHZhbHVlU3BlYzpyLnRyYW5zaXRpb24sc3R5bGU6aSxzdHlsZVNwZWM6cn0pOm5bc10/Ym4oe2tleTpzLHZhbHVlOmVbc10sdmFsdWVTcGVjOm5bc10sc3R5bGU6aSxzdHlsZVNwZWM6cn0pOltuZXcgU3QocyxlW3NdLCd1bmtub3duIHByb3BlcnR5ICInK3MrJyInKV0pfXJldHVybiBhfXZhciB4bj17IioiOmZ1bmN0aW9uKCl7cmV0dXJuW119LGFycmF5OlpyLGJvb2xlYW46ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49enIoZSk7cmV0dXJuImJvb2xlYW4iIT09bj9bbmV3IFN0KHIsZSwiYm9vbGVhbiBleHBlY3RlZCwgIituKyIgZm91bmQiKV06W119LG51bWJlcjpKcixjb2xvcjpmdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj16cihyKTtyZXR1cm4ic3RyaW5nIiE9PW4/W25ldyBTdChlLHIsImNvbG9yIGV4cGVjdGVkLCAiK24rIiBmb3VuZCIpXTpudWxsPT09SnQocik/W25ldyBTdChlLHIsJ2NvbG9yIGV4cGVjdGVkLCAiJytyKyciIGZvdW5kJyldOltdfSxjb25zdGFudHM6RXQsZW51bTokcixmaWx0ZXI6dW4sZnVuY3Rpb246S3IsbGF5ZXI6ZG4sb2JqZWN0OlhyLHNvdXJjZTp2bixsaWdodDp5bixzdHJpbmc6Z24sZm9ybWF0dGVkOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09Z24odCkubGVuZ3RoP1tdOlFyKHQpfSxyZXNvbHZlZEltYWdlOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09Z24odCkubGVuZ3RoP1tdOlFyKHQpfX07ZnVuY3Rpb24gYm4odCl7dmFyIGU9dC52YWx1ZSxyPXQudmFsdWVTcGVjLG49dC5zdHlsZVNwZWM7cmV0dXJuIHIuZXhwcmVzc2lvbiYmT3IoTHQoZSkpP0tyKHQpOnIuZXhwcmVzc2lvbiYmVnIoSXQoZSkpP1FyKHQpOnIudHlwZSYmeG5bci50eXBlXT94bltyLnR5cGVdKHQpOlhyKEN0KHt9LHQse3ZhbHVlU3BlYzpyLnR5cGU/bltyLnR5cGVdOnJ9KSl9ZnVuY3Rpb24gX24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49Z24odCk7cmV0dXJuIG4ubGVuZ3RofHwoLTE9PT1lLmluZGV4T2YoIntmb250c3RhY2t9IikmJm4ucHVzaChuZXcgU3QocixlLCciZ2x5cGhzIiB1cmwgbXVzdCBpbmNsdWRlIGEgIntmb250c3RhY2t9IiB0b2tlbicpKSwtMT09PWUuaW5kZXhPZigie3JhbmdlfSIpJiZuLnB1c2gobmV3IFN0KHIsZSwnImdseXBocyIgdXJsIG11c3QgaW5jbHVkZSBhICJ7cmFuZ2V9IiB0b2tlbicpKSksbn1mdW5jdGlvbiB3bih0LGUpe3ZvaWQgMD09PWUmJihlPUF0KTt2YXIgcj1bXTtyZXR1cm4gcj1yLmNvbmNhdChibih7a2V5OiIiLHZhbHVlOnQsdmFsdWVTcGVjOmUuJHJvb3Qsc3R5bGVTcGVjOmUsc3R5bGU6dCxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7Z2x5cGhzOl9uLCIqIjpmdW5jdGlvbigpe3JldHVybltdfX19KSksdC5jb25zdGFudHMmJihyPXIuY29uY2F0KEV0KHtrZXk6ImNvbnN0YW50cyIsdmFsdWU6dC5jb25zdGFudHMsc3R5bGU6dCxzdHlsZVNwZWM6ZX0pKSksVG4ocil9ZnVuY3Rpb24gVG4odCl7cmV0dXJuW10uY29uY2F0KHQpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluZS1lLmxpbmV9KSl9ZnVuY3Rpb24ga24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO3JldHVybiBUbih0LmFwcGx5KHRoaXMsZSkpfX13bi5zb3VyY2U9a24odm4pLHduLmxpZ2h0PWtuKHluKSx3bi5sYXllcj1rbihkbiksd24uZmlsdGVyPWtuKHVuKSx3bi5wYWludFByb3BlcnR5PWtuKGhuKSx3bi5sYXlvdXRQcm9wZXJ0eT1rbihwbik7dmFyIE1uPXduLEFuPU1uLmxpZ2h0LFNuPU1uLnBhaW50UHJvcGVydHksRW49TW4ubGF5b3V0UHJvcGVydHk7ZnVuY3Rpb24gQ24odCxlKXt2YXIgcj0hMTtpZihlJiZlLmxlbmd0aClmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXQuZmlyZShuZXcga3QobmV3IEVycm9yKGlbbl0ubWVzc2FnZSkpKSxyPSEwO3JldHVybiByfXZhciBMbj1JbjtmdW5jdGlvbiBJbih0LGUscil7dmFyIG49dGhpcy5jZWxscz1bXTtpZih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe3RoaXMuYXJyYXlCdWZmZXI9dDt2YXIgaT1uZXcgSW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTt0PWlbMF0sdGhpcy5kPShlPWlbMV0pKzIqKHI9aVsyXSk7Zm9yKHZhciBhPTA7YTx0aGlzLmQqdGhpcy5kO2ErKyl7dmFyIG89aVszK2FdLHM9aVszK2ErMV07bi5wdXNoKG89PT1zP251bGw6aS5zdWJhcnJheShvLHMpKX12YXIgbD1pWzMrbi5sZW5ndGgrMV07dGhpcy5rZXlzPWkuc3ViYXJyYXkoaVszK24ubGVuZ3RoXSxsKSx0aGlzLmJib3hlcz1pLnN1YmFycmF5KGwpLHRoaXMuaW5zZXJ0PXRoaXMuX2luc2VydFJlYWRvbmx5fWVsc2V7dGhpcy5kPWUrMipyO2Zvcih2YXIgYz0wO2M8dGhpcy5kKnRoaXMuZDtjKyspbi5wdXNoKFtdKTt0aGlzLmtleXM9W10sdGhpcy5iYm94ZXM9W119dGhpcy5uPWUsdGhpcy5leHRlbnQ9dCx0aGlzLnBhZGRpbmc9cix0aGlzLnNjYWxlPWUvdCx0aGlzLnVpZD0wO3ZhciB1PXIvZSp0O3RoaXMubWluPS11LHRoaXMubWF4PXQrdX1Jbi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRDZWxsLHRoaXMudWlkKyspLHRoaXMua2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LEluLnByb3RvdHlwZS5faW5zZXJ0UmVhZG9ubHk9ZnVuY3Rpb24oKXt0aHJvdyJDYW5ub3QgaW5zZXJ0IGludG8gYSBHcmlkSW5kZXggY3JlYXRlZCBmcm9tIGFuIEFycmF5QnVmZmVyLiJ9LEluLnByb3RvdHlwZS5faW5zZXJ0Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jZWxsc1tpXS5wdXNoKGEpfSxJbi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLm1pbixvPXRoaXMubWF4O2lmKHQ8PWEmJmU8PWEmJm88PXImJm88PW4mJiFpKXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmtleXMpO3ZhciBzPVtdO3JldHVybiB0aGlzLl9mb3JFYWNoQ2VsbCh0LGUscixuLHRoaXMuX3F1ZXJ5Q2VsbCxzLHt9LGkpLHN9LEluLnByb3RvdHlwZS5fcXVlcnlDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9dGhpcy5jZWxsc1tpXTtpZihudWxsIT09bClmb3IodmFyIGM9dGhpcy5rZXlzLHU9dGhpcy5iYm94ZXMsZj0wO2Y8bC5sZW5ndGg7ZisrKXt2YXIgaD1sW2ZdO2lmKHZvaWQgMD09PW9baF0pe3ZhciBwPTQqaDsocz9zKHVbcCswXSx1W3ArMV0sdVtwKzJdLHVbcCszXSk6dDw9dVtwKzJdJiZlPD11W3ArM10mJnI+PXVbcCswXSYmbj49dVtwKzFdKT8ob1toXT0hMCxhLnB1c2goY1toXSkpOm9baF09ITF9fX0sSW4ucHJvdG90eXBlLl9mb3JFYWNoQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe2Zvcih2YXIgbD10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQodCksYz10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoZSksdT10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQociksZj10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQobiksaD1sO2g8PXU7aCsrKWZvcih2YXIgcD1jO3A8PWY7cCsrKXt2YXIgZD10aGlzLmQqcCtoO2lmKCghc3x8cyh0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChoKSx0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChwKSx0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChoKzEpLHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHArMSkpKSYmaS5jYWxsKHRoaXMsdCxlLHIsbixkLGEsbyxzKSlyZXR1cm59fSxJbi5wcm90b3R5cGUuX2NvbnZlcnRGcm9tQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMucGFkZGluZykvdGhpcy5zY2FsZX0sSW4ucHJvdG90eXBlLl9jb252ZXJ0VG9DZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5kLTEsTWF0aC5mbG9vcih0KnRoaXMuc2NhbGUpK3RoaXMucGFkZGluZykpfSxJbi5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKHRoaXMuYXJyYXlCdWZmZXIpcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXI7Zm9yKHZhciB0PXRoaXMuY2VsbHMsZT0zK3RoaXMuY2VsbHMubGVuZ3RoKzErMSxyPTAsbj0wO248dGhpcy5jZWxscy5sZW5ndGg7bisrKXIrPXRoaXMuY2VsbHNbbl0ubGVuZ3RoO3ZhciBpPW5ldyBJbnQzMkFycmF5KGUrcit0aGlzLmtleXMubGVuZ3RoK3RoaXMuYmJveGVzLmxlbmd0aCk7aVswXT10aGlzLmV4dGVudCxpWzFdPXRoaXMubixpWzJdPXRoaXMucGFkZGluZztmb3IodmFyIGE9ZSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107aVszK29dPWEsaS5zZXQocyxhKSxhKz1zLmxlbmd0aH1yZXR1cm4gaVszK3QubGVuZ3RoXT1hLGkuc2V0KHRoaXMua2V5cyxhKSxpWzMrdC5sZW5ndGgrMV09YSs9dGhpcy5rZXlzLmxlbmd0aCxpLnNldCh0aGlzLmJib3hlcyxhKSxhKz10aGlzLmJib3hlcy5sZW5ndGgsaS5idWZmZXJ9O3ZhciBQbj1zZWxmLkltYWdlRGF0YSx6bj1zZWxmLkltYWdlQml0bWFwLE9uPXt9O2Z1bmN0aW9uIERuKHQsZSxyKXt2b2lkIDA9PT1yJiYocj17fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9jbGFzc1JlZ2lzdHJ5S2V5Iix7dmFsdWU6dCx3cml0ZWFibGU6ITF9KSxPblt0XT17a2xhc3M6ZSxvbWl0OnIub21pdHx8W10sc2hhbGxvdzpyLnNoYWxsb3d8fFtdfX1mb3IodmFyIFJuIGluIERuKCJPYmplY3QiLE9iamVjdCksTG4uc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50b0FycmF5QnVmZmVyKCk7cmV0dXJuIGUmJmUucHVzaChyKSx7YnVmZmVyOnJ9fSxMbi5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IExuKHQuYnVmZmVyKX0sRG4oIkdyaWQiLExuKSxEbigiQ29sb3IiLEt0KSxEbigiRXJyb3IiLEVycm9yKSxEbigiUmVzb2x2ZWRJbWFnZSIsZWUpLERuKCJTdHlsZVByb3BlcnR5RnVuY3Rpb24iLFdyKSxEbigiU3R5bGVFeHByZXNzaW9uIixVcix7b21pdDpbIl9ldmFsdWF0b3IiXX0pLERuKCJab29tRGVwZW5kZW50RXhwcmVzc2lvbiIsR3IpLERuKCJab29tQ29uc3RhbnRFeHByZXNzaW9uIixIciksRG4oIkNvbXBvdW5kRXhwcmVzc2lvbiIsbWUse29taXQ6WyJfZXZhbHVhdGUiXX0pLFRyKVRyW1JuXS5fY2xhc3NSZWdpc3RyeUtleXx8RG4oIkV4cHJlc3Npb25fIitSbixUcltSbl0pO2Z1bmN0aW9uIEZuKHQpe3JldHVybiB0JiYidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHx0LmNvbnN0cnVjdG9yJiYiQXJyYXlCdWZmZXIiPT09dC5jb25zdHJ1Y3Rvci5uYW1lKX1mdW5jdGlvbiBCbih0KXtyZXR1cm4gem4mJnQgaW5zdGFuY2VvZiB6bn1mdW5jdGlvbiBObih0LGUpe2lmKG51bGw9PXR8fCJib29sZWFuIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdHx8InN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgQm9vbGVhbnx8dCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIERhdGV8fHQgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIHQ7aWYoRm4odCl8fEJuKHQpKXJldHVybiBlJiZlLnB1c2godCksdDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCkpe3ZhciByPXQ7cmV0dXJuIGUmJmUucHVzaChyLmJ1ZmZlcikscn1pZih0IGluc3RhbmNlb2YgUG4pcmV0dXJuIGUmJmUucHVzaCh0LmRhdGEuYnVmZmVyKSx0O2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgbj1bXSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSluLnB1c2goTm4oYVtpXSxlKSk7cmV0dXJuIG59aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgbz10LmNvbnN0cnVjdG9yLHM9by5fY2xhc3NSZWdpc3RyeUtleTtpZighcyl0aHJvdyBuZXcgRXJyb3IoImNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdW5yZWdpc3RlcmVkIGNsYXNzIik7dmFyIGw9by5zZXJpYWxpemU/by5zZXJpYWxpemUodCxlKTp7fTtpZighby5zZXJpYWxpemUpe2Zvcih2YXIgYyBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoYykmJiEoT25bc10ub21pdC5pbmRleE9mKGMpPj0wKSl7dmFyIHU9dFtjXTtsW2NdPU9uW3NdLnNoYWxsb3cuaW5kZXhPZihjKT49MD91Ok5uKHUsZSl9dCBpbnN0YW5jZW9mIEVycm9yJiYobC5tZXNzYWdlPXQubWVzc2FnZSl9aWYobC4kbmFtZSl0aHJvdyBuZXcgRXJyb3IoIiRuYW1lIHByb3BlcnR5IGlzIHJlc2VydmVkIGZvciB3b3JrZXIgc2VyaWFsaXphdGlvbiBsb2dpYy4iKTtyZXR1cm4iT2JqZWN0IiE9PXMmJihsLiRuYW1lPXMpLGx9dGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgIit0eXBlb2YgdCl9ZnVuY3Rpb24gam4odCl7aWYobnVsbD09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0fHwic3RyaW5nIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBCb29sZWFufHx0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgRGF0ZXx8dCBpbnN0YW5jZW9mIFJlZ0V4cHx8Rm4odCl8fEJuKHQpfHxBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fHQgaW5zdGFuY2VvZiBQbilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Lm1hcChqbik7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgZT10LiRuYW1lfHwiT2JqZWN0IixyPU9uW2VdLmtsYXNzO2lmKCFyKXRocm93IG5ldyBFcnJvcigiY2FuJ3QgZGVzZXJpYWxpemUgdW5yZWdpc3RlcmVkIGNsYXNzICIrZSk7aWYoci5kZXNlcmlhbGl6ZSlyZXR1cm4gci5kZXNlcmlhbGl6ZSh0KTtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksaT0wLGE9T2JqZWN0LmtleXModCk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO2lmKCIkbmFtZSIhPT1vKXt2YXIgcz10W29dO25bb109T25bZV0uc2hhbGxvdy5pbmRleE9mKG8pPj0wP3M6am4ocyl9fXJldHVybiBufXRocm93IG5ldyBFcnJvcigiY2FuJ3QgZGVzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgIit0eXBlb2YgdCl9dmFyIFVuPWZ1bmN0aW9uKCl7dGhpcy5maXJzdD0hMH07VW4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguZmxvb3IodCk7cmV0dXJuIHRoaXMuZmlyc3Q/KHRoaXMuZmlyc3Q9ITEsdGhpcy5sYXN0SW50ZWdlclpvb209cix0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9MCx0aGlzLmxhc3Rab29tPXQsdGhpcy5sYXN0Rmxvb3Jab29tPXIsITApOih0aGlzLmxhc3RGbG9vclpvb20+cj8odGhpcy5sYXN0SW50ZWdlclpvb209cisxLHRoaXMubGFzdEludGVnZXJab29tVGltZT1lKTp0aGlzLmxhc3RGbG9vclpvb208ciYmKHRoaXMubGFzdEludGVnZXJab29tPXIsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPWUpLHQhPT10aGlzLmxhc3Rab29tJiYodGhpcy5sYXN0Wm9vbT10LHRoaXMubGFzdEZsb29yWm9vbT1yLCEwKSl9O3ZhciBWbj17IkxhdGluLTEgU3VwcGxlbWVudCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyOCYmdDw9MjU1fSxBcmFiaWM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE1MzYmJnQ8PTE3OTF9LCJBcmFiaWMgU3VwcGxlbWVudCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE4NzImJnQ8PTE5MTl9LCJBcmFiaWMgRXh0ZW5kZWQtQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIyMDgmJnQ8PTIzMDN9LCJIYW5ndWwgSmFtbyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQzNTImJnQ8PTQ2MDd9LCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NTEyMCYmdDw9NTc1OX0sS2htZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYwMTYmJnQ8PTYxNDN9LCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjMyMCYmdDw9NjM5OX0sIkdlbmVyYWwgUHVuY3R1YXRpb24iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04MTkyJiZ0PD04MzAzfSwiTGV0dGVybGlrZSBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODQ0OCYmdDw9ODUyN30sIk51bWJlciBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg1MjgmJnQ8PTg1OTF9LCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg5NjAmJnQ8PTkyMTV9LCJDb250cm9sIFBpY3R1cmVzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTIxNiYmdDw9OTI3OX0sIk9wdGljYWwgQ2hhcmFjdGVyIFJlY29nbml0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTI4MCYmdDw9OTMxMX0sIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05MzEyJiZ0PD05NDcxfSwiR2VvbWV0cmljIFNoYXBlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTk2MzImJnQ8PTk3Mjd9LCJNaXNjZWxsYW5lb3VzIFN5bWJvbHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NzI4JiZ0PD05OTgzfSwiTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMTAwOCYmdDw9MTEyNjN9LCJDSksgUmFkaWNhbHMgU3VwcGxlbWVudCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTExOTA0JiZ0PD0xMjAzMX0sIkthbmd4aSBSYWRpY2FscyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyMDMyJiZ0PD0xMjI1NX0sIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjI3MiYmdDw9MTIyODd9LCJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjI4OCYmdDw9MTIzNTF9LEhpcmFnYW5hOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjM1MiYmdDw9MTI0NDd9LEthdGFrYW5hOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjQ0OCYmdDw9MTI1NDN9LEJvcG9tb2ZvOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjU0NCYmdDw9MTI1OTF9LCJIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1OTImJnQ8PTEyNjg3fSxLYW5idW46ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNjg4JiZ0PD0xMjcwM30sIkJvcG9tb2ZvIEV4dGVuZGVkIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3MDQmJnQ8PTEyNzM1fSwiQ0pLIFN0cm9rZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjczNiYmdDw9MTI3ODN9LCJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3ODQmJnQ8PTEyNzk5fSwiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyODAwJiZ0PD0xMzA1NX0sIkNKSyBDb21wYXRpYmlsaXR5IjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTMwNTYmJnQ8PTEzMzExfSwiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMzEyJiZ0PD0xOTkwM30sIllpamluZyBIZXhhZ3JhbSBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTk5MDQmJnQ8PTE5OTY3fSwiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTY4JiZ0PD00MDk1OX0sIllpIFN5bGxhYmxlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQwOTYwJiZ0PD00MjEyN30sIllpIFJhZGljYWxzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDIxMjgmJnQ8PTQyMTkxfSwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQzMzYwJiZ0PD00MzM5MX0sIkhhbmd1bCBTeWxsYWJsZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00NDAzMiYmdDw9NTUyMTV9LCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1CIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NTUyMTYmJnQ8PTU1Mjk1fSwiUHJpdmF0ZSBVc2UgQXJlYSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU3MzQ0JiZ0PD02Mzc0M30sIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02Mzc0NCYmdDw9NjQyNTV9LCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NDMzNiYmdDw9NjUwMjN9LCJWZXJ0aWNhbCBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MDQwJiZ0PD02NTA1NX0sIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUwNzImJnQ8PTY1MTAzfSwiU21hbGwgRm9ybSBWYXJpYW50cyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MTA0JiZ0PD02NTEzNX0sIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MTM2JiZ0PD02NTI3OX0sIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUyODAmJnQ8PTY1NTE5fX07ZnVuY3Rpb24gcW4odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZihIbihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEhuKHQpe3JldHVybiEoNzQ2IT09dCYmNzQ3IT09dCYmKHQ8NDM1Mnx8IShWblsiQm9wb21vZm8gRXh0ZW5kZWQiXSh0KXx8Vm4uQm9wb21vZm8odCl8fFZuWyJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyJdKHQpJiYhKHQ+PTY1MDk3JiZ0PD02NTEwMyl8fFZuWyJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIl0odCl8fFZuWyJDSksgQ29tcGF0aWJpbGl0eSJdKHQpfHxWblsiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQiXSh0KXx8Vm5bIkNKSyBTdHJva2VzIl0odCl8fCEoIVZuWyJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iXSh0KXx8dD49MTIyOTYmJnQ8PTEyMzA1fHx0Pj0xMjMwOCYmdDw9MTIzMTl8fDEyMzM2PT09dCl8fFZuWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBIl0odCl8fFZuWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIl0odCl8fFZuWyJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIl0odCl8fFZuWyJIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vIl0odCl8fFZuWyJIYW5ndWwgSmFtbyBFeHRlbmRlZC1BIl0odCl8fFZuWyJIYW5ndWwgSmFtbyBFeHRlbmRlZC1CIl0odCl8fFZuWyJIYW5ndWwgSmFtbyJdKHQpfHxWblsiSGFuZ3VsIFN5bGxhYmxlcyJdKHQpfHxWbi5IaXJhZ2FuYSh0KXx8Vm5bIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiXSh0KXx8Vm4uS2FuYnVuKHQpfHxWblsiS2FuZ3hpIFJhZGljYWxzIl0odCl8fFZuWyJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zIl0odCl8fFZuLkthdGFrYW5hKHQpJiYxMjU0MCE9PXR8fCEoIVZuWyJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyJdKHQpfHw2NTI4OD09PXR8fDY1Mjg5PT09dHx8NjUyOTM9PT10fHx0Pj02NTMwNiYmdDw9NjUzMTB8fDY1MzM5PT09dHx8NjUzNDE9PT10fHw2NTM0Mz09PXR8fHQ+PTY1MzcxJiZ0PD02NTUwM3x8NjU1MDc9PT10fHx0Pj02NTUxMiYmdDw9NjU1MTkpfHwhKCFWblsiU21hbGwgRm9ybSBWYXJpYW50cyJdKHQpfHx0Pj02NTExMiYmdDw9NjUxMTh8fHQ+PTY1MTIzJiZ0PD02NTEyNil8fFZuWyJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIl0odCl8fFZuWyJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkIl0odCl8fFZuWyJWZXJ0aWNhbCBGb3JtcyJdKHQpfHxWblsiWWlqaW5nIEhleGFncmFtIFN5bWJvbHMiXSh0KXx8Vm5bIllpIFN5bGxhYmxlcyJdKHQpfHxWblsiWWkgUmFkaWNhbHMiXSh0KSkpKX1mdW5jdGlvbiBHbih0KXtyZXR1cm4hKEhuKHQpfHxmdW5jdGlvbih0KXtyZXR1cm4hIShWblsiTGF0aW4tMSBTdXBwbGVtZW50Il0odCkmJigxNjc9PT10fHwxNjk9PT10fHwxNzQ9PT10fHwxNzc9PT10fHwxODg9PT10fHwxODk9PT10fHwxOTA9PT10fHwyMTU9PT10fHwyNDc9PT10KXx8Vm5bIkdlbmVyYWwgUHVuY3R1YXRpb24iXSh0KSYmKDgyMTQ9PT10fHw4MjI0PT09dHx8ODIyNT09PXR8fDgyNDA9PT10fHw4MjQxPT09dHx8ODI1MT09PXR8fDgyNTI9PT10fHw4MjU4PT09dHx8ODI2Mz09PXR8fDgyNjQ9PT10fHw4MjY1PT09dHx8ODI3Mz09PXQpfHxWblsiTGV0dGVybGlrZSBTeW1ib2xzIl0odCl8fFZuWyJOdW1iZXIgRm9ybXMiXSh0KXx8Vm5bIk1pc2NlbGxhbmVvdXMgVGVjaG5pY2FsIl0odCkmJih0Pj04OTYwJiZ0PD04OTY3fHx0Pj04OTcyJiZ0PD04OTkxfHx0Pj04OTk2JiZ0PD05ZTN8fDkwMDM9PT10fHx0Pj05MDg1JiZ0PD05MTE0fHx0Pj05MTUwJiZ0PD05MTY1fHw5MTY3PT09dHx8dD49OTE2OSYmdDw9OTE3OXx8dD49OTE4NiYmdDw9OTIxNSl8fFZuWyJDb250cm9sIFBpY3R1cmVzIl0odCkmJjkyNTEhPT10fHxWblsiT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24iXSh0KXx8Vm5bIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiXSh0KXx8Vm5bIkdlb21ldHJpYyBTaGFwZXMiXSh0KXx8Vm5bIk1pc2NlbGxhbmVvdXMgU3ltYm9scyJdKHQpJiYhKHQ+PTk3NTQmJnQ8PTk3NTkpfHxWblsiTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MiXSh0KSYmKHQ+PTExMDI2JiZ0PD0xMTA1NXx8dD49MTEwODgmJnQ8PTExMDk3fHx0Pj0xMTE5MiYmdDw9MTEyNDMpfHxWblsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0odCl8fFZuLkthdGFrYW5hKHQpfHxWblsiUHJpdmF0ZSBVc2UgQXJlYSJdKHQpfHxWblsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXSh0KXx8Vm5bIlNtYWxsIEZvcm0gVmFyaWFudHMiXSh0KXx8Vm5bIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIl0odCl8fDg3MzQ9PT10fHw4NzU2PT09dHx8ODc1Nz09PXR8fHQ+PTk5ODQmJnQ8PTEwMDg3fHx0Pj0xMDEwMiYmdDw9MTAxMzF8fDY1NTMyPT09dHx8NjU1MzM9PT10KX0odCkpfWZ1bmN0aW9uIFluKHQpe3JldHVybiB0Pj0xNDI0JiZ0PD0yMzAzfHxWblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIl0odCl8fFZuWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiXSh0KX1mdW5jdGlvbiBXbih0LGUpe3JldHVybiEoIWUmJlluKHQpfHx0Pj0yMzA0JiZ0PD0zNTgzfHx0Pj0zODQwJiZ0PD00MjU1fHxWbi5LaG1lcih0KSl9ZnVuY3Rpb24gWG4odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZihZbihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiEwO3JldHVybiExfXZhciBabj1udWxsLEpuPSJ1bmF2YWlsYWJsZSIsS249bnVsbCxRbj1mdW5jdGlvbih0KXt0JiYic3RyaW5nIj09dHlwZW9mIHQmJnQuaW5kZXhPZigiTmV0d29ya0Vycm9yIik+LTEmJihKbj0iZXJyb3IiKSxabiYmWm4odCl9O2Z1bmN0aW9uICRuKCl7dGkuZmlyZShuZXcgVHQoInBsdWdpblN0YXRlQ2hhbmdlIix7cGx1Z2luU3RhdHVzOkpuLHBsdWdpblVSTDpLbn0pKX12YXIgdGk9bmV3IE10LGVpPWZ1bmN0aW9uKCl7cmV0dXJuIEpufSxyaT1mdW5jdGlvbigpe2lmKCJkZWZlcnJlZCIhPT1Kbnx8IUtuKXRocm93IG5ldyBFcnJvcigicnRsLXRleHQtcGx1Z2luIGNhbm5vdCBiZSBkb3dubG9hZGVkIHVubGVzcyBhIHBsdWdpblVSTCBpcyBzcGVjaWZpZWQiKTtKbj0ibG9hZGluZyIsJG4oKSxLbiYmeXQoe3VybDpLbn0sKGZ1bmN0aW9uKHQpe3Q/UW4odCk6KEpuPSJsb2FkZWQiLCRuKCkpfSkpfSxuaT17YXBwbHlBcmFiaWNTaGFwaW5nOm51bGwscHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0Om51bGwscHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0Om51bGwsaXNMb2FkZWQ6ZnVuY3Rpb24oKXtyZXR1cm4ibG9hZGVkIj09PUpufHxudWxsIT1uaS5hcHBseUFyYWJpY1NoYXBpbmd9LGlzTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiJsb2FkaW5nIj09PUpufSxzZXRTdGF0ZTpmdW5jdGlvbih0KXtKbj10LnBsdWdpblN0YXR1cyxLbj10LnBsdWdpblVSTH0saXNQYXJzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9bmkuYXBwbHlBcmFiaWNTaGFwaW5nJiZudWxsIT1uaS5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQmJm51bGwhPW5pLnByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dH0sZ2V0UGx1Z2luVVJMOmZ1bmN0aW9uKCl7cmV0dXJuIEtufX0saWk9ZnVuY3Rpb24odCxlKXt0aGlzLnpvb209dCxlPyh0aGlzLm5vdz1lLm5vdyx0aGlzLmZhZGVEdXJhdGlvbj1lLmZhZGVEdXJhdGlvbix0aGlzLnpvb21IaXN0b3J5PWUuem9vbUhpc3RvcnksdGhpcy50cmFuc2l0aW9uPWUudHJhbnNpdGlvbik6KHRoaXMubm93PTAsdGhpcy5mYWRlRHVyYXRpb249MCx0aGlzLnpvb21IaXN0b3J5PW5ldyBVbix0aGlzLnRyYW5zaXRpb249e30pfTtpaS5wcm90b3R5cGUuaXNTdXBwb3J0ZWRTY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSlpZighV24obltyXS5jaGFyQ29kZUF0KDApLGUpKXJldHVybiExO3JldHVybiEwfSh0LG5pLmlzTG9hZGVkKCkpfSxpaS5wcm90b3R5cGUuY3Jvc3NGYWRpbmdGYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZmFkZUR1cmF0aW9uPzE6TWF0aC5taW4oKHRoaXMubm93LXRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tVGltZSkvdGhpcy5mYWRlRHVyYXRpb24sMSl9LGlpLnByb3RvdHlwZS5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy56b29tLGU9dC1NYXRoLmZsb29yKHQpLHI9dGhpcy5jcm9zc0ZhZGluZ0ZhY3RvcigpO3JldHVybiB0PnRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tP3tmcm9tU2NhbGU6Mix0b1NjYWxlOjEsdDplKygxLWUpKnJ9Ontmcm9tU2NhbGU6LjUsdG9TY2FsZToxLHQ6MS0oMS1yKSplfX07dmFyIGFpPWZ1bmN0aW9uKHQsZSl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLmV4cHJlc3Npb249ZnVuY3Rpb24odCxlKXtpZihPcih0KSlyZXR1cm4gbmV3IFdyKHQsZSk7aWYoVnIodCkpe3ZhciByPVlyKHQsZSk7aWYoImVycm9yIj09PXIucmVzdWx0KXRocm93IG5ldyBFcnJvcihyLnZhbHVlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5KyI6ICIrdC5tZXNzYWdlfSkpLmpvaW4oIiwgIikpO3JldHVybiByLnZhbHVlfXZhciBuPXQ7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYiY29sb3IiPT09ZS50eXBlJiYobj1LdC5wYXJzZSh0KSkse2tpbmQ6ImNvbnN0YW50IixldmFsdWF0ZTpmdW5jdGlvbigpe3JldHVybiBufX19KHZvaWQgMD09PWU/dC5zcGVjaWZpY2F0aW9uLmRlZmF1bHQ6ZSx0LnNwZWNpZmljYXRpb24pfTthaS5wcm90b3R5cGUuaXNEYXRhRHJpdmVuPWZ1bmN0aW9uKCl7cmV0dXJuInNvdXJjZSI9PT10aGlzLmV4cHJlc3Npb24ua2luZHx8ImNvbXBvc2l0ZSI9PT10aGlzLmV4cHJlc3Npb24ua2luZH0sYWkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnByb3BlcnR5LnBvc3NpYmx5RXZhbHVhdGUodGhpcyx0LGUscil9O3ZhciBvaT1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1uZXcgYWkodCx2b2lkIDApfTtvaS5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBsaSh0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsZSx1KHt9LHQudHJhbnNpdGlvbix0aGlzLnRyYW5zaXRpb24pLHQubm93KX0sb2kucHJvdG90eXBlLnVudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsaSh0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsbnVsbCx7fSwwKX07dmFyIHNpPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzKX07c2kucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS52YWx1ZS52YWx1ZSl9LHNpLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX3ZhbHVlc1t0XT1uZXcgb2kodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5KSksdGhpcy5fdmFsdWVzW3RdLnZhbHVlPW5ldyBhaSh0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHksbnVsbD09PWU/dm9pZCAwOngoZSkpfSxzaS5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbil9LHNpLnByb3RvdHlwZS5zZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5fdmFsdWVzW3RdPW5ldyBvaSh0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHkpKSx0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbj14KGUpfHx2b2lkIDB9LHNpLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT10aGlzLmdldFZhbHVlKG4pO3ZvaWQgMCE9PWkmJih0W25dPWkpO3ZhciBhPXRoaXMuZ2V0VHJhbnNpdGlvbihuKTt2b2lkIDAhPT1hJiYodFtuKyItdHJhbnNpdGlvbiJdPWEpfXJldHVybiB0fSxzaS5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBjaSh0aGlzLl9wcm9wZXJ0aWVzKSxuPTAsaT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtyLl92YWx1ZXNbYV09dGhpcy5fdmFsdWVzW2FdLnRyYW5zaXRpb25lZCh0LGUuX3ZhbHVlc1thXSl9cmV0dXJuIHJ9LHNpLnByb3RvdHlwZS51bnRyYW5zaXRpb25lZD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgY2kodGhpcy5fcHJvcGVydGllcyksZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07dC5fdmFsdWVzW25dPXRoaXMuX3ZhbHVlc1tuXS51bnRyYW5zaXRpb25lZCgpfXJldHVybiB0fTt2YXIgbGk9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuYmVnaW49aStuLmRlbGF5fHwwLHRoaXMuZW5kPXRoaXMuYmVnaW4rbi5kdXJhdGlvbnx8MCx0LnNwZWNpZmljYXRpb24udHJhbnNpdGlvbiYmKG4uZGVsYXl8fG4uZHVyYXRpb24pJiYodGhpcy5wcmlvcj1yKX07bGkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubm93fHwwLGk9dGhpcy52YWx1ZS5wb3NzaWJseUV2YWx1YXRlKHQsZSxyKSxhPXRoaXMucHJpb3I7aWYoYSl7aWYobj50aGlzLmVuZClyZXR1cm4gdGhpcy5wcmlvcj1udWxsLGk7aWYodGhpcy52YWx1ZS5pc0RhdGFEcml2ZW4oKSlyZXR1cm4gdGhpcy5wcmlvcj1udWxsLGk7aWYobjx0aGlzLmJlZ2luKXJldHVybiBhLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpO3ZhciBvPShuLXRoaXMuYmVnaW4pLyh0aGlzLmVuZC10aGlzLmJlZ2luKTtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5pbnRlcnBvbGF0ZShhLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpLGksZnVuY3Rpb24odCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfShvKSl9cmV0dXJuIGl9O3ZhciBjaT1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzKX07Y2kucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1uZXcgaGkodGhpcy5fcHJvcGVydGllcyksaT0wLGE9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07bi5fdmFsdWVzW29dPXRoaXMuX3ZhbHVlc1tvXS5wb3NzaWJseUV2YWx1YXRlKHQsZSxyKX1yZXR1cm4gbn0sY2kucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7dDxlLmxlbmd0aDt0Kz0xKWlmKHRoaXMuX3ZhbHVlc1tlW3RdXS5wcmlvcilyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHVpPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRQcm9wZXJ0eVZhbHVlcyl9O3VpLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udmFsdWUpfSx1aS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLl92YWx1ZXNbdF09bmV3IGFpKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSxudWxsPT09ZT92b2lkIDA6eChlKSl9LHVpLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT10aGlzLmdldFZhbHVlKG4pO3ZvaWQgMCE9PWkmJih0W25dPWkpfXJldHVybiB0fSx1aS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPW5ldyBoaSh0aGlzLl9wcm9wZXJ0aWVzKSxpPTAsYT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtuLl92YWx1ZXNbb109dGhpcy5fdmFsdWVzW29dLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpfXJldHVybiBufTt2YXIgZmk9ZnVuY3Rpb24odCxlLHIpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5wYXJhbWV0ZXJzPXJ9O2ZpLnByb3RvdHlwZS5pc0NvbnN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuImNvbnN0YW50Ij09PXRoaXMudmFsdWUua2luZH0sZmkucHJvdG90eXBlLmNvbnN0YW50T3I9ZnVuY3Rpb24odCl7cmV0dXJuImNvbnN0YW50Ij09PXRoaXMudmFsdWUua2luZD90aGlzLnZhbHVlLnZhbHVlOnR9LGZpLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5ldmFsdWF0ZSh0aGlzLnZhbHVlLHRoaXMucGFyYW1ldGVycyx0LGUscixuKX07dmFyIGhpPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlcyl9O2hpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlc1t0XX07dmFyIHBpPWZ1bmN0aW9uKHQpe3RoaXMuc3BlY2lmaWNhdGlvbj10fTtwaS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LHBpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49VmVbdGhpcy5zcGVjaWZpY2F0aW9uLnR5cGVdO3JldHVybiBuP24odCxlLHIpOnR9O3ZhciBkaT1mdW5jdGlvbih0LGUpe3RoaXMuc3BlY2lmaWNhdGlvbj10LHRoaXMub3ZlcnJpZGVzPWV9O2RpLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuZXcgZmkodGhpcywiY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmR8fCJjYW1lcmEiPT09dC5leHByZXNzaW9uLmtpbmQ/e2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTp0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSxudWxsLHt9LHIsbil9OnQuZXhwcmVzc2lvbixlKX0sZGkucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZigiY29uc3RhbnQiIT09dC52YWx1ZS5raW5kfHwiY29uc3RhbnQiIT09ZS52YWx1ZS5raW5kKXJldHVybiB0O2lmKHZvaWQgMD09PXQudmFsdWUudmFsdWV8fHZvaWQgMD09PWUudmFsdWUudmFsdWUpcmV0dXJuIG5ldyBmaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6dm9pZCAwfSx0LnBhcmFtZXRlcnMpO3ZhciBuPVZlW3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtyZXR1cm4gbj9uZXcgZmkodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOm4odC52YWx1ZS52YWx1ZSxlLnZhbHVlLnZhbHVlLHIpfSx0LnBhcmFtZXRlcnMpOnR9LGRpLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuImNvbnN0YW50Ij09PXQua2luZD90LnZhbHVlOnQuZXZhbHVhdGUoZSxyLG4saSxhKX07dmFyIGdpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PXQudmFsdWUpcmV0dXJuIG5ldyBmaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6dm9pZCAwfSxlKTtpZigiY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmQpe3ZhciBpPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlLG51bGwse30scixuKSxhPSJyZXNvbHZlZEltYWdlIj09PXQucHJvcGVydHkuc3BlY2lmaWNhdGlvbi50eXBlJiYic3RyaW5nIiE9dHlwZW9mIGk/aS5uYW1lOmksbz10aGlzLl9jYWxjdWxhdGUoYSxhLGEsZSk7cmV0dXJuIG5ldyBmaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6b30sZSl9aWYoImNhbWVyYSI9PT10LmV4cHJlc3Npb24ua2luZCl7dmFyIHM9dGhpcy5fY2FsY3VsYXRlKHQuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTplLnpvb20tMX0pLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTplLnpvb219KSx0LmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206ZS56b29tKzF9KSxlKTtyZXR1cm4gbmV3IGZpKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTpzfSxlKX1yZXR1cm4gbmV3IGZpKHRoaXMsdC5leHByZXNzaW9uLGUpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYoInNvdXJjZSI9PT10LmtpbmQpe3ZhciBvPXQuZXZhbHVhdGUoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlKG8sbyxvLGUpfXJldHVybiJjb21wb3NpdGUiPT09dC5raW5kP3RoaXMuX2NhbGN1bGF0ZSh0LmV2YWx1YXRlKHt6b29tOk1hdGguZmxvb3IoZS56b29tKS0xfSxyLG4pLHQuZXZhbHVhdGUoe3pvb206TWF0aC5mbG9vcihlLnpvb20pfSxyLG4pLHQuZXZhbHVhdGUoe3pvb206TWF0aC5mbG9vcihlLnpvb20pKzF9LHIsbiksZSk6dC52YWx1ZX0sZS5wcm90b3R5cGUuX2NhbGN1bGF0ZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi56b29tPm4uem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tP3tmcm9tOnQsdG86ZX06e2Zyb206cix0bzplfX0sZS5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGV9KGRpKSxtaT1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07bWkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwIT09dC52YWx1ZSl7aWYoImNvbnN0YW50Ij09PXQuZXhwcmVzc2lvbi5raW5kKXt2YXIgaT10LmV4cHJlc3Npb24uZXZhbHVhdGUoZSxudWxsLHt9LHIsbik7cmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShpLGksaSxlKX1yZXR1cm4gdGhpcy5fY2FsY3VsYXRlKHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgaWkoTWF0aC5mbG9vcihlLnpvb20tMSksZSkpLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgaWkoTWF0aC5mbG9vcihlLnpvb20pLGUpKSx0LmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IGlpKE1hdGguZmxvb3IoZS56b29tKzEpLGUpKSxlKX19LG1pLnByb3RvdHlwZS5fY2FsY3VsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLnpvb20+bi56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20/e2Zyb206dCx0bzplfTp7ZnJvbTpyLHRvOmV9fSxtaS5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3ZhciB2aT1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07dmkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuISF0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSxudWxsLHt9LHIsbil9LHZpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbigpe3JldHVybiExfTt2YXIgeWk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMucHJvcGVydGllcz10LHRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzPXt9LHRoaXMub3ZlcnJpZGFibGVQcm9wZXJ0aWVzPVtdLHQpe3ZhciByPXRbZV07ci5zcGVjaWZpY2F0aW9uLm92ZXJyaWRhYmxlJiZ0aGlzLm92ZXJyaWRhYmxlUHJvcGVydGllcy5wdXNoKGUpO3ZhciBuPXRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzW2VdPW5ldyBhaShyLHZvaWQgMCksaT10aGlzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzW2VdPW5ldyBvaShyKTt0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXNbZV09aS51bnRyYW5zaXRpb25lZCgpLHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzW2VdPW4ucG9zc2libHlFdmFsdWF0ZSh7fSl9fTtEbigiRGF0YURyaXZlblByb3BlcnR5IixkaSksRG4oIkRhdGFDb25zdGFudFByb3BlcnR5IixwaSksRG4oIkNyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkiLGdpKSxEbigiQ3Jvc3NGYWRlZFByb3BlcnR5IixtaSksRG4oIkNvbG9yUmFtcFByb3BlcnR5Iix2aSk7dmFyIHhpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXtpZih0LmNhbGwodGhpcyksdGhpcy5pZD1lLmlkLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5fZmVhdHVyZUZpbHRlcj17ZmlsdGVyOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5lZWRHZW9tZXRyeTohMX0sImN1c3RvbSIhPT1lLnR5cGUmJih0aGlzLm1ldGFkYXRhPShlPWUpLm1ldGFkYXRhLHRoaXMubWluem9vbT1lLm1pbnpvb20sdGhpcy5tYXh6b29tPWUubWF4em9vbSwiYmFja2dyb3VuZCIhPT1lLnR5cGUmJih0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLnNvdXJjZUxheWVyPWVbInNvdXJjZS1sYXllciJdLHRoaXMuZmlsdGVyPWUuZmlsdGVyKSxyLmxheW91dCYmKHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0PW5ldyB1aShyLmxheW91dCkpLHIucGFpbnQpKXtmb3IodmFyIG4gaW4gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludD1uZXcgc2koci5wYWludCksZS5wYWludCl0aGlzLnNldFBhaW50UHJvcGVydHkobixlLnBhaW50W25dLHt2YWxpZGF0ZTohMX0pO2Zvcih2YXIgaSBpbiBlLmxheW91dCl0aGlzLnNldExheW91dFByb3BlcnR5KGksZS5sYXlvdXRbaV0se3ZhbGlkYXRlOiExfSk7dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQudW50cmFuc2l0aW9uZWQoKSx0aGlzLnBhaW50PW5ldyBoaShyLnBhaW50KX19cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcm9zc2ZhZGVQYXJhbWV0ZXJzfSxlLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4idmlzaWJpbGl0eSI9PT10P3RoaXMudmlzaWJpbGl0eTp0aGlzLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXImJihyPXt9KSxudWxsIT1lJiZ0aGlzLl92YWxpZGF0ZShFbiwibGF5ZXJzLiIrdGhpcy5pZCsiLmxheW91dC4iK3QsdCxlLHIpfHwoInZpc2liaWxpdHkiIT09dD90aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXRWYWx1ZSh0LGUpOnRoaXMudmlzaWJpbGl0eT1lKX0sZS5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LCItdHJhbnNpdGlvbiIpP3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSk6dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5nZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09ciYmKHI9e30pLG51bGwhPWUmJnRoaXMuX3ZhbGlkYXRlKFNuLCJsYXllcnMuIit0aGlzLmlkKyIucGFpbnQuIit0LHQsZSxyKSlyZXR1cm4hMTtpZihtKHQsIi10cmFuc2l0aW9uIikpcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSxlfHx2b2lkIDApLCExO3ZhciBuPXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1t0XSxpPSJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiI9PT1uLnByb3BlcnR5LnNwZWNpZmljYXRpb25bInByb3BlcnR5LXR5cGUiXSxhPW4udmFsdWUuaXNEYXRhRHJpdmVuKCksbz1uLnZhbHVlO3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VmFsdWUodCxlKSx0aGlzLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZSh0KTt2YXIgcz10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbdF0udmFsdWU7cmV0dXJuIHMuaXNEYXRhRHJpdmVuKCl8fGF8fGl8fHRoaXMuX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZSh0LG8scyl9LGUucHJvdG90eXBlLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZT1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLl9oYW5kbGVPdmVycmlkYWJsZVBhaW50UHJvcGVydHlVcGRhdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiExfSxlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbih0KXtyZXR1cm4hISh0aGlzLm1pbnpvb20mJnQ8dGhpcy5taW56b29tKXx8ISEodGhpcy5tYXh6b29tJiZ0Pj10aGlzLm1heHpvb20pfHwibm9uZSI9PT10aGlzLnZpc2liaWxpdHl9LGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3RoaXMuX3RyYW5zaXRpb25pbmdQYWludD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnRyYW5zaXRpb25lZCh0LHRoaXMuX3RyYW5zaXRpb25pbmdQYWludCl9LGUucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Lmhhc1RyYW5zaXRpb24oKX0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24odCxlKXt0LmdldENyb3NzZmFkZVBhcmFtZXRlcnMmJih0aGlzLl9jcm9zc2ZhZGVQYXJhbWV0ZXJzPXQuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpKSx0aGlzLl91bmV2YWx1YXRlZExheW91dCYmKHRoaXMubGF5b3V0PXRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnBvc3NpYmx5RXZhbHVhdGUodCx2b2lkIDAsZSkpLHRoaXMucGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50LnBvc3NpYmx5RXZhbHVhdGUodCx2b2lkIDAsZSl9LGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXtpZDp0aGlzLmlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLnNvdXJjZSwic291cmNlLWxheWVyIjp0aGlzLnNvdXJjZUxheWVyLG1ldGFkYXRhOnRoaXMubWV0YWRhdGEsbWluem9vbTp0aGlzLm1pbnpvb20sbWF4em9vbTp0aGlzLm1heHpvb20sZmlsdGVyOnRoaXMuZmlsdGVyLGxheW91dDp0aGlzLl91bmV2YWx1YXRlZExheW91dCYmdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuc2VyaWFsaXplKCkscGFpbnQ6dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludCYmdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXJpYWxpemUoKX07cmV0dXJuIHRoaXMudmlzaWJpbGl0eSYmKHQubGF5b3V0PXQubGF5b3V0fHx7fSx0LmxheW91dC52aXNpYmlsaXR5PXRoaXMudmlzaWJpbGl0eSkseSh0LChmdW5jdGlvbih0LGUpe3JldHVybiEodm9pZCAwPT09dHx8ImxheW91dCI9PT1lJiYhT2JqZWN0LmtleXModCkubGVuZ3RofHwicGFpbnQiPT09ZSYmIU9iamVjdC5rZXlzKHQpLmxlbmd0aCl9KSl9LGUucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT17fSksKCFpfHwhMSE9PWkudmFsaWRhdGUpJiZDbih0aGlzLHQuY2FsbChNbix7a2V5OmUsbGF5ZXJUeXBlOnRoaXMudHlwZSxvYmplY3RLZXk6cix2YWx1ZTpuLHN0eWxlU3BlYzpBdCxzdHlsZTp7Z2x5cGhzOiEwLHNwcml0ZTohMH19KSl9LGUucHJvdG90eXBlLmlzM0Q9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaXNUaWxlQ2xpcHBlZD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuaXNTdGF0ZURlcGVuZGVudD1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnBhaW50Ll92YWx1ZXMpe3ZhciBlPXRoaXMucGFpbnQuZ2V0KHQpO2lmKGUgaW5zdGFuY2VvZiBmaSYmTHIoZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKSYmKCJzb3VyY2UiPT09ZS52YWx1ZS5raW5kfHwiY29tcG9zaXRlIj09PWUudmFsdWUua2luZCkmJmUudmFsdWUuaXNTdGF0ZURlcGVuZGVudClyZXR1cm4hMH1yZXR1cm4hMX0sZX0oTXQpLGJpPXtJbnQ4OkludDhBcnJheSxVaW50ODpVaW50OEFycmF5LEludDE2OkludDE2QXJyYXksVWludDE2OlVpbnQxNkFycmF5LEludDMyOkludDMyQXJyYXksVWludDMyOlVpbnQzMkFycmF5LEZsb2F0MzI6RmxvYXQzMkFycmF5fSxfaT1mdW5jdGlvbih0LGUpe3RoaXMuX3N0cnVjdEFycmF5PXQsdGhpcy5fcG9zMT1lKnRoaXMuc2l6ZSx0aGlzLl9wb3MyPXRoaXMuX3BvczEvMix0aGlzLl9wb3M0PXRoaXMuX3BvczEvNCx0aGlzLl9wb3M4PXRoaXMuX3BvczEvOH0sd2k9ZnVuY3Rpb24oKXt0aGlzLmlzVHJhbnNmZXJyZWQ9ITEsdGhpcy5jYXBhY2l0eT0tMSx0aGlzLnJlc2l6ZSgwKX07ZnVuY3Rpb24gVGkodCxlKXt2b2lkIDA9PT1lJiYoZT0xKTt2YXIgcj0wLG49MDtyZXR1cm57bWVtYmVyczp0Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGk9YmlbdC50eXBlXS5CWVRFU19QRVJfRUxFTUVOVCxhPXI9a2kocixNYXRoLm1heChlLGkpKSxvPXQuY29tcG9uZW50c3x8MTtyZXR1cm4gbj1NYXRoLm1heChuLGkpLHIrPWkqbyx7bmFtZTp0Lm5hbWUsdHlwZTp0LnR5cGUsY29tcG9uZW50czpvLG9mZnNldDphfX0pKSxzaXplOmtpKHIsTWF0aC5tYXgobixlKSksYWxpZ25tZW50OmV9fWZ1bmN0aW9uIGtpKHQsZSl7cmV0dXJuIE1hdGguY2VpbCh0L2UpKmV9d2kuc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyaW0oKSxlJiYodC5pc1RyYW5zZmVycmVkPSEwLGUucHVzaCh0LmFycmF5QnVmZmVyKSkse2xlbmd0aDp0Lmxlbmd0aCxhcnJheUJ1ZmZlcjp0LmFycmF5QnVmZmVyfX0sd2kuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmNyZWF0ZSh0aGlzLnByb3RvdHlwZSk7cmV0dXJuIGUuYXJyYXlCdWZmZXI9dC5hcnJheUJ1ZmZlcixlLmxlbmd0aD10Lmxlbmd0aCxlLmNhcGFjaXR5PXQuYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aC9lLmJ5dGVzUGVyRWxlbWVudCxlLl9yZWZyZXNoVmlld3MoKSxlfSx3aS5wcm90b3R5cGUuX3RyaW09ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aCE9PXRoaXMuY2FwYWNpdHkmJih0aGlzLmNhcGFjaXR5PXRoaXMubGVuZ3RoLHRoaXMuYXJyYXlCdWZmZXI9dGhpcy5hcnJheUJ1ZmZlci5zbGljZSgwLHRoaXMubGVuZ3RoKnRoaXMuYnl0ZXNQZXJFbGVtZW50KSx0aGlzLl9yZWZyZXNoVmlld3MoKSl9LHdpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubGVuZ3RoPTB9LHdpLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7dGhpcy5yZXNlcnZlKHQpLHRoaXMubGVuZ3RoPXR9LHdpLnByb3RvdHlwZS5yZXNlcnZlPWZ1bmN0aW9uKHQpe2lmKHQ+dGhpcy5jYXBhY2l0eSl7dGhpcy5jYXBhY2l0eT1NYXRoLm1heCh0LE1hdGguZmxvb3IoNSp0aGlzLmNhcGFjaXR5KSwxMjgpLHRoaXMuYXJyYXlCdWZmZXI9bmV3IEFycmF5QnVmZmVyKHRoaXMuY2FwYWNpdHkqdGhpcy5ieXRlc1BlckVsZW1lbnQpO3ZhciBlPXRoaXMudWludDg7dGhpcy5fcmVmcmVzaFZpZXdzKCksZSYmdGhpcy51aW50OC5zZXQoZSl9fSx3aS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3JlZnJlc2hWaWV3cygpIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBjb25jcmV0ZSBTdHJ1Y3RBcnJheSBsYXlvdXQiKX07dmFyIE1pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShyKzEpLHRoaXMuZW1wbGFjZShyLHQsZSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdDtyZXR1cm4gdGhpcy5pbnQxNltuKzBdPWUsdGhpcy5pbnQxNltuKzFdPXIsdH0sZX0od2kpO01pLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxEbigiU3RydWN0QXJyYXlMYXlvdXQyaTQiLE1pKTt2YXIgQWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShpKzEpLHRoaXMuZW1wbGFjZShpLHQsZSxyLG4pfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9NCp0O3JldHVybiB0aGlzLmludDE2W2ErMF09ZSx0aGlzLmludDE2W2ErMV09cix0aGlzLmludDE2W2ErMl09bix0aGlzLmludDE2W2ErM109aSx0fSxlfSh3aSk7QWkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LERuKCJTdHJ1Y3RBcnJheUxheW91dDRpOCIsQWkpO3ZhciBTaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShvKzEpLHRoaXMuZW1wbGFjZShvLHQsZSxyLG4saSxhKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz02KnQ7cmV0dXJuIHRoaXMuaW50MTZbcyswXT1lLHRoaXMuaW50MTZbcysxXT1yLHRoaXMuaW50MTZbcysyXT1uLHRoaXMuaW50MTZbcyszXT1pLHRoaXMuaW50MTZbcys0XT1hLHRoaXMuaW50MTZbcys1XT1vLHR9LGV9KHdpKTtTaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLERuKCJTdHJ1Y3RBcnJheUxheW91dDJpNGkxMiIsU2kpO3ZhciBFaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShvKzEpLHRoaXMuZW1wbGFjZShvLHQsZSxyLG4saSxhKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz00KnQsbD04KnQ7cmV0dXJuIHRoaXMuaW50MTZbcyswXT1lLHRoaXMuaW50MTZbcysxXT1yLHRoaXMudWludDhbbCs0XT1uLHRoaXMudWludDhbbCs1XT1pLHRoaXMudWludDhbbCs2XT1hLHRoaXMudWludDhbbCs3XT1vLHR9LGV9KHdpKTtFaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTgsRG4oIlN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4IixFaSk7dmFyIENpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZSh1KzEpLHRoaXMuZW1wbGFjZSh1LHQsZSxyLG4saSxhLG8scyxsLGMpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGY9OSp0LGg9MTgqdDtyZXR1cm4gdGhpcy51aW50MTZbZiswXT1lLHRoaXMudWludDE2W2YrMV09cix0aGlzLnVpbnQxNltmKzJdPW4sdGhpcy51aW50MTZbZiszXT1pLHRoaXMudWludDE2W2YrNF09YSx0aGlzLnVpbnQxNltmKzVdPW8sdGhpcy51aW50MTZbZis2XT1zLHRoaXMudWludDE2W2YrN109bCx0aGlzLnVpbnQ4W2grMTZdPWMsdGhpcy51aW50OFtoKzE3XT11LHR9LGV9KHdpKTtDaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTE4LERuKCJTdHJ1Y3RBcnJheUxheW91dDh1aTJ1YjE4IixDaSk7dmFyIExpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYpe3ZhciBoPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShoKzEpLHRoaXMuZW1wbGFjZShoLHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoKXt2YXIgcD0xMip0O3JldHVybiB0aGlzLmludDE2W3ArMF09ZSx0aGlzLmludDE2W3ArMV09cix0aGlzLmludDE2W3ArMl09bix0aGlzLmludDE2W3ArM109aSx0aGlzLnVpbnQxNltwKzRdPWEsdGhpcy51aW50MTZbcCs1XT1vLHRoaXMudWludDE2W3ArNl09cyx0aGlzLnVpbnQxNltwKzddPWwsdGhpcy5pbnQxNltwKzhdPWMsdGhpcy5pbnQxNltwKzldPXUsdGhpcy5pbnQxNltwKzEwXT1mLHRoaXMuaW50MTZbcCsxMV09aCx0fSxlfSh3aSk7TGkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0yNCxEbigiU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTRpMjQiLExpKTt2YXIgSWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTMqdDtyZXR1cm4gdGhpcy5mbG9hdDMyW2krMF09ZSx0aGlzLmZsb2F0MzJbaSsxXT1yLHRoaXMuZmxvYXQzMltpKzJdPW4sdH0sZX0od2kpO0lpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIsRG4oIlN0cnVjdEFycmF5TGF5b3V0M2YxMiIsSWkpO3ZhciBQaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoZSsxKSx0aGlzLmVtcGxhY2UoZSx0KX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnVpbnQzMlsxKnQrMF09ZSx0fSxlfSh3aSk7UGkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LERuKCJTdHJ1Y3RBcnJheUxheW91dDF1bDQiLFBpKTt2YXIgemk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShjKzEpLHRoaXMuZW1wbGFjZShjLHQsZSxyLG4saSxhLG8scyxsKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT0xMCp0LGY9NSp0O3JldHVybiB0aGlzLmludDE2W3UrMF09ZSx0aGlzLmludDE2W3UrMV09cix0aGlzLmludDE2W3UrMl09bix0aGlzLmludDE2W3UrM109aSx0aGlzLmludDE2W3UrNF09YSx0aGlzLmludDE2W3UrNV09byx0aGlzLnVpbnQzMltmKzNdPXMsdGhpcy51aW50MTZbdSs4XT1sLHRoaXMudWludDE2W3UrOV09Yyx0fSxlfSh3aSk7emkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0yMCxEbigiU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTIwIix6aSk7dmFyIE9pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG8rMSksdGhpcy5lbXBsYWNlKG8sdCxlLHIsbixpLGEpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTYqdDtyZXR1cm4gdGhpcy5pbnQxNltzKzBdPWUsdGhpcy5pbnQxNltzKzFdPXIsdGhpcy5pbnQxNltzKzJdPW4sdGhpcy5pbnQxNltzKzNdPWksdGhpcy5pbnQxNltzKzRdPWEsdGhpcy5pbnQxNltzKzVdPW8sdH0sZX0od2kpO09pLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIsRG4oIlN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIiLE9pKTt2YXIgRGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGErMSksdGhpcy5lbXBsYWNlKGEsdCxlLHIsbixpKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89NCp0LHM9OCp0O3JldHVybiB0aGlzLmZsb2F0MzJbbyswXT1lLHRoaXMuZmxvYXQzMltvKzFdPXIsdGhpcy5mbG9hdDMyW28rMl09bix0aGlzLmludDE2W3MrNl09aSx0aGlzLmludDE2W3MrN109YSx0fSxlfSh3aSk7RGkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xNixEbigiU3RydWN0QXJyYXlMYXlvdXQyZjFmMmkxNiIsRGkpO3ZhciBSaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShpKzEpLHRoaXMuZW1wbGFjZShpLHQsZSxyLG4pfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9MTIqdCxvPTMqdDtyZXR1cm4gdGhpcy51aW50OFthKzBdPWUsdGhpcy51aW50OFthKzFdPXIsdGhpcy5mbG9hdDMyW28rMV09bix0aGlzLmZsb2F0MzJbbysyXT1pLHR9LGV9KHdpKTtSaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLERuKCJTdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTIiLFJpKTt2YXIgRmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShuKzEpLHRoaXMuZW1wbGFjZShuLHQsZSxyKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0zKnQ7cmV0dXJuIHRoaXMudWludDE2W2krMF09ZSx0aGlzLnVpbnQxNltpKzFdPXIsdGhpcy51aW50MTZbaSsyXT1uLHR9LGV9KHdpKTtGaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTYsRG4oIlN0cnVjdEFycmF5TGF5b3V0M3VpNiIsRmkpO3ZhciBCaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxnLG0pe3ZhciB2PXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZSh2KzEpLHRoaXMuZW1wbGFjZSh2LHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLGcsbSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsZyxtLHYpe3ZhciB5PTI0KnQseD0xMip0LGI9NDgqdDtyZXR1cm4gdGhpcy5pbnQxNlt5KzBdPWUsdGhpcy5pbnQxNlt5KzFdPXIsdGhpcy51aW50MTZbeSsyXT1uLHRoaXMudWludDE2W3krM109aSx0aGlzLnVpbnQzMlt4KzJdPWEsdGhpcy51aW50MzJbeCszXT1vLHRoaXMudWludDMyW3grNF09cyx0aGlzLnVpbnQxNlt5KzEwXT1sLHRoaXMudWludDE2W3krMTFdPWMsdGhpcy51aW50MTZbeSsxMl09dSx0aGlzLmZsb2F0MzJbeCs3XT1mLHRoaXMuZmxvYXQzMlt4KzhdPWgsdGhpcy51aW50OFtiKzM2XT1wLHRoaXMudWludDhbYiszN109ZCx0aGlzLnVpbnQ4W2IrMzhdPWcsdGhpcy51aW50MzJbeCsxMF09bSx0aGlzLmludDE2W3krMjJdPXYsdH0sZX0od2kpO0JpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NDgsRG4oIlN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgiLEJpKTt2YXIgTmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsZyxtLHYseSx4LGIsXyx3LFQsayxNLEEsUyl7dmFyIEU9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKEUrMSksdGhpcy5lbXBsYWNlKEUsdCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsZyxtLHYseSx4LGIsXyx3LFQsayxNLEEsUyl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsZyxtLHYseSx4LGIsXyx3LFQsayxNLEEsUyxFKXt2YXIgQz0zNCp0LEw9MTcqdDtyZXR1cm4gdGhpcy5pbnQxNltDKzBdPWUsdGhpcy5pbnQxNltDKzFdPXIsdGhpcy5pbnQxNltDKzJdPW4sdGhpcy5pbnQxNltDKzNdPWksdGhpcy5pbnQxNltDKzRdPWEsdGhpcy5pbnQxNltDKzVdPW8sdGhpcy5pbnQxNltDKzZdPXMsdGhpcy5pbnQxNltDKzddPWwsdGhpcy51aW50MTZbQys4XT1jLHRoaXMudWludDE2W0MrOV09dSx0aGlzLnVpbnQxNltDKzEwXT1mLHRoaXMudWludDE2W0MrMTFdPWgsdGhpcy51aW50MTZbQysxMl09cCx0aGlzLnVpbnQxNltDKzEzXT1kLHRoaXMudWludDE2W0MrMTRdPWcsdGhpcy51aW50MTZbQysxNV09bSx0aGlzLnVpbnQxNltDKzE2XT12LHRoaXMudWludDE2W0MrMTddPXksdGhpcy51aW50MTZbQysxOF09eCx0aGlzLnVpbnQxNltDKzE5XT1iLHRoaXMudWludDE2W0MrMjBdPV8sdGhpcy51aW50MTZbQysyMV09dyx0aGlzLnVpbnQxNltDKzIyXT1ULHRoaXMudWludDMyW0wrMTJdPWssdGhpcy5mbG9hdDMyW0wrMTNdPU0sdGhpcy5mbG9hdDMyW0wrMTRdPUEsdGhpcy5mbG9hdDMyW0wrMTVdPVMsdGhpcy5mbG9hdDMyW0wrMTZdPUUsdH0sZX0od2kpO05pLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NjgsRG4oIlN0cnVjdEFycmF5TGF5b3V0OGkxNXVpMXVsNGY2OCIsTmkpO3ZhciBqaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShlKzEpLHRoaXMuZW1wbGFjZShlLHQpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZmxvYXQzMlsxKnQrMF09ZSx0fSxlfSh3aSk7amkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LERuKCJTdHJ1Y3RBcnJheUxheW91dDFmNCIsamkpO3ZhciBVaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShuKzEpLHRoaXMuZW1wbGFjZShuLHQsZSxyKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0zKnQ7cmV0dXJuIHRoaXMuaW50MTZbaSswXT1lLHRoaXMuaW50MTZbaSsxXT1yLHRoaXMuaW50MTZbaSsyXT1uLHR9LGV9KHdpKTtVaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTYsRG4oIlN0cnVjdEFycmF5TGF5b3V0M2k2IixVaSk7dmFyIFZpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTQqdDtyZXR1cm4gdGhpcy51aW50MzJbMip0KzBdPWUsdGhpcy51aW50MTZbaSsyXT1yLHRoaXMudWludDE2W2krM109bix0fSxlfSh3aSk7VmkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LERuKCJTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgiLFZpKTt2YXIgcWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUocisxKSx0aGlzLmVtcGxhY2Uocix0LGUpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnQ7cmV0dXJuIHRoaXMudWludDE2W24rMF09ZSx0aGlzLnVpbnQxNltuKzFdPXIsdH0sZX0od2kpO3FpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxEbigiU3RydWN0QXJyYXlMYXlvdXQydWk0IixxaSk7dmFyIEhpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShlKzEpLHRoaXMuZW1wbGFjZShlLHQpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudWludDE2WzEqdCswXT1lLHR9LGV9KHdpKTtIaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTIsRG4oIlN0cnVjdEFycmF5TGF5b3V0MXVpMiIsSGkpO3ZhciBHaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKHIrMSksdGhpcy5lbXBsYWNlKHIsdCxlKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0O3JldHVybiB0aGlzLmZsb2F0MzJbbiswXT1lLHRoaXMuZmxvYXQzMltuKzFdPXIsdH0sZX0od2kpO0dpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxEbigiU3RydWN0QXJyYXlMYXlvdXQyZjgiLEdpKTt2YXIgWWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoaSsxKSx0aGlzLmVtcGxhY2UoaSx0LGUscixuKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTQqdDtyZXR1cm4gdGhpcy5mbG9hdDMyW2ErMF09ZSx0aGlzLmZsb2F0MzJbYSsxXT1yLHRoaXMuZmxvYXQzMlthKzJdPW4sdGhpcy5mbG9hdDMyW2ErM109aSx0fSxlfSh3aSk7WWkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xNixEbigiU3RydWN0QXJyYXlMYXlvdXQ0ZjE2IixZaSk7dmFyIFdpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXthbmNob3JQb2ludFg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnRZOntjb25maWd1cmFibGU6ITB9LHgxOntjb25maWd1cmFibGU6ITB9LHkxOntjb25maWd1cmFibGU6ITB9LHgyOntjb25maWd1cmFibGU6ITB9LHkyOntjb25maWd1cmFibGU6ITB9LGZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxzb3VyY2VMYXllckluZGV4Ontjb25maWd1cmFibGU6ITB9LGJ1Y2tldEluZGV4Ontjb25maWd1cmFibGU6ITB9LGFuY2hvclBvaW50Ontjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JQb2ludFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yUG9pbnRZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLngxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzJdfSxyLnkxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzNdfSxyLngyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdfSxyLnkyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzVdfSxyLmZlYXR1cmVJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM119LHIuc291cmNlTGF5ZXJJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOF19LHIuYnVja2V0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzldfSxyLmFuY2hvclBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgaSh0aGlzLmFuY2hvclBvaW50WCx0aGlzLmFuY2hvclBvaW50WSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KF9pKTtXaS5wcm90b3R5cGUuc2l6ZT0yMDt2YXIgWGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFdpKHRoaXMsdCl9LGV9KHppKTtEbigiQ29sbGlzaW9uQm94QXJyYXkiLFhpKTt2YXIgWmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yWTp7Y29uZmlndXJhYmxlOiEwfSxnbHlwaFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbnVtR2x5cGhzOntjb25maWd1cmFibGU6ITB9LHZlcnRleFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZVN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZUxlbmd0aDp7Y29uZmlndXJhYmxlOiEwfSxzZWdtZW50Ontjb25maWd1cmFibGU6ITB9LGxvd2VyU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSx1cHBlclNpemU6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFk6e2NvbmZpZ3VyYWJsZTohMH0sd3JpdGluZ01vZGU6e2NvbmZpZ3VyYWJsZTohMH0scGxhY2VkT3JpZW50YXRpb246e2NvbmZpZ3VyYWJsZTohMH0saGlkZGVuOntjb25maWd1cmFibGU6ITB9LGNyb3NzVGlsZUlEOntjb25maWd1cmFibGU6ITB9LGFzc29jaWF0ZWRJY29uSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yWS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXX0sci5nbHlwaFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzJdfSxyLm51bUdseXBocy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LHIudmVydGV4U3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMl19LHIubGluZVN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdfSxyLmxpbmVMZW5ndGguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzRdfSxyLnNlZ21lbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXX0sci5sb3dlclNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXX0sci51cHBlclNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEyXX0sci5saW5lT2Zmc2V0WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzddfSxyLmxpbmVPZmZzZXRZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrOF19LHIud3JpdGluZ01vZGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzZdfSxyLnBsYWNlZE9yaWVudGF0aW9uLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM3XX0sci5wbGFjZWRPcmllbnRhdGlvbi5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszN109dH0sci5oaWRkZW4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzhdfSxyLmhpZGRlbi5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszOF09dH0sci5jcm9zc1RpbGVJRC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMTBdfSxyLmNyb3NzVGlsZUlELnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsxMF09dH0sci5hc3NvY2lhdGVkSWNvbkluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzIyXX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oX2kpO1ppLnByb3RvdHlwZS5zaXplPTQ4O3ZhciBKaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWmkodGhpcyx0KX0sZX0oQmkpO0RuKCJQbGFjZWRTeW1ib2xBcnJheSIsSmkpO3ZhciBLaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZTt2YXIgcj17YW5jaG9yWDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JZOntjb25maWd1cmFibGU6ITB9LHJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LGNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LHBsYWNlZEljb25TeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxrZXk6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveEVuZEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxUZXh0Qm94RW5kSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0saWNvbkJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0saWNvbkJveEVuZEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxJY29uQm94RW5kSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sZmVhdHVyZUluZGV4Ontjb25maWd1cmFibGU6ITB9LG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzOntjb25maWd1cmFibGU6ITB9LG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfSxudW1JY29uVmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sbnVtVmVydGljYWxJY29uVmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sdXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXM6e2NvbmZpZ3VyYWJsZTohMH0sY3Jvc3NUaWxlSUQ6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveFNjYWxlOntjb25maWd1cmFibGU6ITB9LHRleHRPZmZzZXQwOntjb25maWd1cmFibGU6ITB9LHRleHRPZmZzZXQxOntjb25maWd1cmFibGU6ITB9LGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl19LHIuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzNdfSxyLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNF19LHIudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV19LHIucGxhY2VkSWNvblN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzZdfSxyLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzddfSxyLmtleS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOF19LHIudGV4dEJveFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzldfSxyLnRleHRCb3hFbmRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTBdfSxyLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXX0sci52ZXJ0aWNhbFRleHRCb3hFbmRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdfSxyLmljb25Cb3hTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxM119LHIuaWNvbkJveEVuZEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxNF19LHIudmVydGljYWxJY29uQm94U3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTVdfSxyLnZlcnRpY2FsSWNvbkJveEVuZEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxNl19LHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxN119LHIubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE4XX0sci5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE5XX0sci5udW1JY29uVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzIwXX0sci5udW1WZXJ0aWNhbEljb25WZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMjFdfSxyLnVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyMl19LHIuY3Jvc3NUaWxlSUQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzEyXX0sci5jcm9zc1RpbGVJRC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMTJdPXR9LHIudGV4dEJveFNjYWxlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTNdfSxyLnRleHRPZmZzZXQwLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTRdfSxyLnRleHRPZmZzZXQxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTVdfSxyLmNvbGxpc2lvbkNpcmNsZURpYW1ldGVyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTZdfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShfaSk7S2kucHJvdG90eXBlLnNpemU9Njg7dmFyIFFpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBLaSh0aGlzLHQpfSxlfShOaSk7RG4oIlN5bWJvbEluc3RhbmNlQXJyYXkiLFFpKTt2YXIgJGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldG9mZnNldFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZmxvYXQzMlsxKnQrMF19LGV9KGppKTtEbigiR2x5cGhPZmZzZXRBcnJheSIsJGkpO3ZhciB0YT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0eD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMF19LGUucHJvdG90eXBlLmdldHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50MTZbMyp0KzFdfSxlLnByb3RvdHlwZS5nZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMl19LGV9KFVpKTtEbigiU3ltYm9sTGluZVZlcnRleEFycmF5Iix0YSk7dmFyIGVhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtmZWF0dXJlSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sc291cmNlTGF5ZXJJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxidWNrZXRJbmRleDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCswXX0sci5zb3VyY2VMYXllckluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXX0sci5idWNrZXRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KF9pKTtlYS5wcm90b3R5cGUuc2l6ZT04O3ZhciByYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZWEodGhpcyx0KX0sZX0oVmkpO0RuKCJGZWF0dXJlSW5kZXhBcnJheSIscmEpO3ZhciBuYT1UaShbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxpYT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zZWdtZW50cz10fTtmdW5jdGlvbiBhYSh0LGUpe3JldHVybiAyNTYqKHQ9bChNYXRoLmZsb29yKHQpLDAsMjU1KSkrbChNYXRoLmZsb29yKGUpLDAsMjU1KX1pYS5wcm90b3R5cGUucHJlcGFyZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5zZWdtZW50c1t0aGlzLnNlZ21lbnRzLmxlbmd0aC0xXTtyZXR1cm4gdD5pYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmXygiTWF4IHZlcnRpY2VzIHBlciBzZWdtZW50IGlzICIraWEuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgrIjogYnVja2V0IHJlcXVlc3RlZCAiK3QpLCghaXx8aS52ZXJ0ZXhMZW5ndGgrdD5pYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSHx8aS5zb3J0S2V5IT09bikmJihpPXt2ZXJ0ZXhPZmZzZXQ6ZS5sZW5ndGgscHJpbWl0aXZlT2Zmc2V0OnIubGVuZ3RoLHZlcnRleExlbmd0aDowLHByaW1pdGl2ZUxlbmd0aDowfSx2b2lkIDAhPT1uJiYoaS5zb3J0S2V5PW4pLHRoaXMuc2VnbWVudHMucHVzaChpKSksaX0saWEucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlZ21lbnRzfSxpYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5zZWdtZW50czt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07Zm9yKHZhciBuIGluIHIudmFvcylyLnZhb3Nbbl0uZGVzdHJveSgpfX0saWEuc2ltcGxlU2VnbWVudD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbmV3IGlhKFt7dmVydGV4T2Zmc2V0OnQscHJpbWl0aXZlT2Zmc2V0OmUsdmVydGV4TGVuZ3RoOnIscHJpbWl0aXZlTGVuZ3RoOm4sdmFvczp7fSxzb3J0S2V5OjB9XSl9LGlhLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIPU1hdGgucG93KDIsMTYpLTEsRG4oIlNlZ21lbnRWZWN0b3IiLGlhKTt2YXIgb2E9VGkoW3tuYW1lOiJhX3BhdHRlcm5fZnJvbSIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQxNiJ9LHtuYW1lOiJhX3BhdHRlcm5fdG8iLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50MTYifSx7bmFtZToiYV9waXhlbF9yYXRpb19mcm9tIixjb21wb25lbnRzOjEsdHlwZToiVWludDgifSx7bmFtZToiYV9waXhlbF9yYXRpb190byIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQ4In1dKSxzYT1lKChmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCxjO2ZvcihuPXQubGVuZ3RoLShyPTMmdC5sZW5ndGgpLGk9ZSxvPTM0MzI5MTgzNTMscz00NjE4NDU5MDcsYz0wO2M8bjspbD0yNTUmdC5jaGFyQ29kZUF0KGMpfCgyNTUmdC5jaGFyQ29kZUF0KCsrYykpPDw4fCgyNTUmdC5jaGFyQ29kZUF0KCsrYykpPDwxNnwoMjU1JnQuY2hhckNvZGVBdCgrK2MpKTw8MjQsKytjLGk9Mjc0OTIrKDY1NTM1JihhPTUqKDY1NTM1JihpPShpXj1sPSg2NTUzNSYobD0obD0oNjU1MzUmbCkqbysoKChsPj4+MTYpKm8mNjU1MzUpPDwxNikmNDI5NDk2NzI5NSk8PDE1fGw+Pj4xNykpKnMrKCgobD4+PjE2KSpzJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTUpPDwxM3xpPj4+MTkpKSsoKDUqKGk+Pj4xNikmNjU1MzUpPDwxNikmNDI5NDk2NzI5NSkpKygoNTg5NjQrKGE+Pj4xNikmNjU1MzUpPDwxNik7c3dpdGNoKGw9MCxyKXtjYXNlIDM6bF49KDI1NSZ0LmNoYXJDb2RlQXQoYysyKSk8PDE2O2Nhc2UgMjpsXj0oMjU1JnQuY2hhckNvZGVBdChjKzEpKTw8ODtjYXNlIDE6aV49bD0oNjU1MzUmKGw9KGw9KDY1NTM1JihsXj0yNTUmdC5jaGFyQ29kZUF0KGMpKSkqbysoKChsPj4+MTYpKm8mNjU1MzUpPDwxNikmNDI5NDk2NzI5NSk8PDE1fGw+Pj4xNykpKnMrKCgobD4+PjE2KSpzJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTV9cmV0dXJuIGlePXQubGVuZ3RoLGk9MjI0NjgyMjUwNyooNjU1MzUmKGlePWk+Pj4xNikpKygoMjI0NjgyMjUwNyooaT4+PjE2KSY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1LGk9MzI2NjQ4OTkwOSooNjU1MzUmKGlePWk+Pj4xMykpKygoMzI2NjQ4OTkwOSooaT4+PjE2KSY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1LChpXj1pPj4+MTYpPj4+MH19KSksbGE9ZSgoZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1lXm4sYT0wO24+PTQ7KXI9MTU0MDQ4MzQ3NyooNjU1MzUmKHI9MjU1JnQuY2hhckNvZGVBdChhKXwoMjU1JnQuY2hhckNvZGVBdCgrK2EpKTw8OHwoMjU1JnQuY2hhckNvZGVBdCgrK2EpKTw8MTZ8KDI1NSZ0LmNoYXJDb2RlQXQoKythKSk8PDI0KSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpLGk9MTU0MDQ4MzQ3NyooNjU1MzUmaSkrKCgxNTQwNDgzNDc3KihpPj4+MTYpJjY1NTM1KTw8MTYpXihyPTE1NDA0ODM0NzcqKDY1NTM1JihyXj1yPj4+MjQpKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNikpLG4tPTQsKythO3N3aXRjaChuKXtjYXNlIDM6aV49KDI1NSZ0LmNoYXJDb2RlQXQoYSsyKSk8PDE2O2Nhc2UgMjppXj0oMjU1JnQuY2hhckNvZGVBdChhKzEpKTw8ODtjYXNlIDE6aT0xNTQwNDgzNDc3Kig2NTUzNSYoaV49MjU1JnQuY2hhckNvZGVBdChhKSkpKygoMTU0MDQ4MzQ3NyooaT4+PjE2KSY2NTUzNSk8PDE2KX1yZXR1cm4gaT0xNTQwNDgzNDc3Kig2NTUzNSYoaV49aT4+PjEzKSkrKCgxNTQwNDgzNDc3KihpPj4+MTYpJjY1NTM1KTw8MTYpLChpXj1pPj4+MTUpPj4+MH19KSksY2E9c2EsdWE9bGE7Y2EubXVybXVyMz1zYSxjYS5tdXJtdXIyPXVhO3ZhciBmYT1mdW5jdGlvbigpe3RoaXMuaWRzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW5kZXhlZD0hMX07ZmEucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmlkcy5wdXNoKHBhKHQpKSx0aGlzLnBvc2l0aW9ucy5wdXNoKGUscixuKX0sZmEucHJvdG90eXBlLmdldFBvc2l0aW9ucz1mdW5jdGlvbih0KXtmb3IodmFyIGU9cGEodCkscj0wLG49dGhpcy5pZHMubGVuZ3RoLTE7cjxuOyl7dmFyIGk9cituPj4xO3RoaXMuaWRzW2ldPj1lP249aTpyPWkrMX1mb3IodmFyIGE9W107dGhpcy5pZHNbcl09PT1lOylhLnB1c2goe2luZGV4OnRoaXMucG9zaXRpb25zWzMqcl0sc3RhcnQ6dGhpcy5wb3NpdGlvbnNbMypyKzFdLGVuZDp0aGlzLnBvc2l0aW9uc1szKnIrMl19KSxyKys7cmV0dXJuIGF9LGZhLnNlcmlhbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBGbG9hdDY0QXJyYXkodC5pZHMpLG49bmV3IFVpbnQzMkFycmF5KHQucG9zaXRpb25zKTtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXtmb3IoO248aTspe2Zvcih2YXIgYT1lW24raT4+MV0sbz1uLTEscz1pKzE7Oyl7ZG97bysrfXdoaWxlKGVbb108YSk7ZG97cy0tfXdoaWxlKGVbc10+YSk7aWYobz49cylicmVhaztkYShlLG8scyksZGEociwzKm8sMypzKSxkYShyLDMqbysxLDMqcysxKSxkYShyLDMqbysyLDMqcysyKX1zLW48aS1zPyh0KGUscixuLHMpLG49cysxKToodChlLHIscysxLGkpLGk9cyl9fShyLG4sMCxyLmxlbmd0aC0xKSxlJiZlLnB1c2goci5idWZmZXIsbi5idWZmZXIpLHtpZHM6cixwb3NpdGlvbnM6bn19LGZhLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBmYTtyZXR1cm4gZS5pZHM9dC5pZHMsZS5wb3NpdGlvbnM9dC5wb3NpdGlvbnMsZS5pbmRleGVkPSEwLGV9O3ZhciBoYT1NYXRoLnBvdygyLDUzKS0xO2Z1bmN0aW9uIHBhKHQpe3ZhciBlPSt0O3JldHVybiFpc05hTihlKSYmZTw9aGE/ZTpjYShTdHJpbmcodCkpfWZ1bmN0aW9uIGRhKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59RG4oIkZlYXR1cmVQb3NpdGlvbk1hcCIsZmEpO3ZhciBnYT1mdW5jdGlvbih0LGUpe3RoaXMuZ2w9dC5nbCx0aGlzLmxvY2F0aW9uPWV9LG1hPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD0wfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtMWkodGhpcy5sb2NhdGlvbix0KSl9LGV9KGdhKSx2YT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9MH1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTFmKHRoaXMubG9jYXRpb24sdCkpfSxlfShnYSkseWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PVswLDBdfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0WzBdPT09dGhpcy5jdXJyZW50WzBdJiZ0WzFdPT09dGhpcy5jdXJyZW50WzFdfHwodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtMmYodGhpcy5sb2NhdGlvbix0WzBdLHRbMV0pKX0sZX0oZ2EpLHhhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD1bMCwwLDBdfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0WzBdPT09dGhpcy5jdXJyZW50WzBdJiZ0WzFdPT09dGhpcy5jdXJyZW50WzFdJiZ0WzJdPT09dGhpcy5jdXJyZW50WzJdfHwodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtM2YodGhpcy5sb2NhdGlvbix0WzBdLHRbMV0sdFsyXSkpfSxlfShnYSksYmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PVswLDAsMCwwXX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dFswXT09PXRoaXMuY3VycmVudFswXSYmdFsxXT09PXRoaXMuY3VycmVudFsxXSYmdFsyXT09PXRoaXMuY3VycmVudFsyXSYmdFszXT09PXRoaXMuY3VycmVudFszXXx8KHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTRmKHRoaXMubG9jYXRpb24sdFswXSx0WzFdLHRbMl0sdFszXSkpfSxlfShnYSksX2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PUt0LnRyYW5zcGFyZW50fXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0LnI9PT10aGlzLmN1cnJlbnQuciYmdC5nPT09dGhpcy5jdXJyZW50LmcmJnQuYj09PXRoaXMuY3VycmVudC5iJiZ0LmE9PT10aGlzLmN1cnJlbnQuYXx8KHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTRmKHRoaXMubG9jYXRpb24sdC5yLHQuZyx0LmIsdC5hKSl9LGV9KGdhKSx3YT1uZXcgRmxvYXQzMkFycmF5KDE2KSxUYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9d2F9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRbMTJdIT09dGhpcy5jdXJyZW50WzEyXXx8dFswXSE9PXRoaXMuY3VycmVudFswXSlyZXR1cm4gdGhpcy5jdXJyZW50PXQsdm9pZCB0aGlzLmdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5sb2NhdGlvbiwhMSx0KTtmb3IodmFyIGU9MTtlPDE2O2UrKylpZih0W2VdIT09dGhpcy5jdXJyZW50W2VdKXt0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5sb2NhdGlvbiwhMSx0KTticmVha319LGV9KGdhKTtmdW5jdGlvbiBrYSh0KXtyZXR1cm5bYWEoMjU1KnQuciwyNTUqdC5nKSxhYSgyNTUqdC5iLDI1NSp0LmEpXX12YXIgTWE9ZnVuY3Rpb24odCxlLHIpe3RoaXMudmFsdWU9dCx0aGlzLnVuaWZvcm1OYW1lcz1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInVfIit0fSkpLHRoaXMudHlwZT1yfTtNYS5wcm90b3R5cGUuc2V0VW5pZm9ybT1mdW5jdGlvbih0LGUscil7dC5zZXQoci5jb25zdGFudE9yKHRoaXMudmFsdWUpKX0sTWEucHJvdG90eXBlLmdldEJpbmRpbmc9ZnVuY3Rpb24odCxlLHIpe3JldHVybiJjb2xvciI9PT10aGlzLnR5cGU/bmV3IF9hKHQsZSk6bmV3IHZhKHQsZSl9O3ZhciBBYT1mdW5jdGlvbih0LGUpe3RoaXMudW5pZm9ybU5hbWVzPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4idV8iK3R9KSksdGhpcy5wYXR0ZXJuRnJvbT1udWxsLHRoaXMucGF0dGVyblRvPW51bGwsdGhpcy5waXhlbFJhdGlvRnJvbT0xLHRoaXMucGl4ZWxSYXRpb1RvPTF9O0FhLnByb3RvdHlwZS5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlKXt0aGlzLnBpeGVsUmF0aW9Gcm9tPWUucGl4ZWxSYXRpbyx0aGlzLnBpeGVsUmF0aW9Ubz10LnBpeGVsUmF0aW8sdGhpcy5wYXR0ZXJuRnJvbT1lLnRsYnIsdGhpcy5wYXR0ZXJuVG89dC50bGJyfSxBYS5wcm90b3R5cGUuc2V0VW5pZm9ybT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0idV9wYXR0ZXJuX3RvIj09PW4/dGhpcy5wYXR0ZXJuVG86InVfcGF0dGVybl9mcm9tIj09PW4/dGhpcy5wYXR0ZXJuRnJvbToidV9waXhlbF9yYXRpb190byI9PT1uP3RoaXMucGl4ZWxSYXRpb1RvOiJ1X3BpeGVsX3JhdGlvX2Zyb20iPT09bj90aGlzLnBpeGVsUmF0aW9Gcm9tOm51bGw7aSYmdC5zZXQoaSl9LEFhLnByb3RvdHlwZS5nZXRCaW5kaW5nPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4idV9wYXR0ZXJuIj09PXIuc3Vic3RyKDAsOSk/bmV3IGJhKHQsZSk6bmV3IHZhKHQsZSl9O3ZhciBTYT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLnR5cGU9cix0aGlzLm1heFZhbHVlPTAsdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntuYW1lOiJhXyIrdCx0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOiJjb2xvciI9PT1yPzI6MSxvZmZzZXQ6MH19KSksdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBufTtTYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5wYWludFZlcnRleEFycmF5Lmxlbmd0aCxvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgaWkoMCksZSx7fSxuLFtdLGkpO3RoaXMucGFpbnRWZXJ0ZXhBcnJheS5yZXNpemUodCksdGhpcy5fc2V0UGFpbnRWYWx1ZShhLHQsbyl9LFNhLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTowfSxyLG4pO3RoaXMuX3NldFBhaW50VmFsdWUodCxlLGkpfSxTYS5wcm90b3R5cGUuX3NldFBhaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe2lmKCJjb2xvciI9PT10aGlzLnR5cGUpZm9yKHZhciBuPWthKHIpLGk9dDtpPGU7aSsrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKGksblswXSxuWzFdKTtlbHNle2Zvcih2YXIgYT10O2E8ZTthKyspdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UoYSxyKTt0aGlzLm1heFZhbHVlPU1hdGgubWF4KHRoaXMubWF4VmFsdWUsTWF0aC5hYnMocikpfX0sU2EucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJnRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyP3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpOnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LFNhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9O3ZhciBFYT1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5leHByZXNzaW9uPXQsdGhpcy51bmlmb3JtTmFtZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJ1XyIrdCsiX3QifSkpLHRoaXMudHlwZT1yLHRoaXMudXNlSW50ZWdlclpvb209bix0aGlzLnpvb209aSx0aGlzLm1heFZhbHVlPTAsdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntuYW1lOiJhXyIrdCx0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOiJjb2xvciI9PT1yPzQ6MixvZmZzZXQ6MH19KSksdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBhfTtFYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBpaSh0aGlzLnpvb20pLGUse30sbixbXSxpKSxvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgaWkodGhpcy56b29tKzEpLGUse30sbixbXSxpKSxzPXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGg7dGhpcy5wYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLl9zZXRQYWludFZhbHVlKHMsdCxhLG8pfSxFYS5wcm90b3R5cGUudXBkYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206dGhpcy56b29tfSxyLG4pLGE9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOnRoaXMuem9vbSsxfSxyLG4pO3RoaXMuX3NldFBhaW50VmFsdWUodCxlLGksYSl9LEVhLnByb3RvdHlwZS5fc2V0UGFpbnRWYWx1ZT1mdW5jdGlvbih0LGUscixuKXtpZigiY29sb3IiPT09dGhpcy50eXBlKWZvcih2YXIgaT1rYShyKSxhPWthKG4pLG89dDtvPGU7bysrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKG8saVswXSxpWzFdLGFbMF0sYVsxXSk7ZWxzZXtmb3IodmFyIHM9dDtzPGU7cysrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKHMscixuKTt0aGlzLm1heFZhbHVlPU1hdGgubWF4KHRoaXMubWF4VmFsdWUsTWF0aC5hYnMociksTWF0aC5hYnMobikpfX0sRWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJnRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyP3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpOnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LEVhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9LEVhLnByb3RvdHlwZS5zZXRVbmlmb3JtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy51c2VJbnRlZ2VyWm9vbT9NYXRoLmZsb29yKGUuem9vbSk6ZS56b29tLG49bCh0aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3RvcihyLHRoaXMuem9vbSx0aGlzLnpvb20rMSksMCwxKTt0LnNldChuKX0sRWEucHJvdG90eXBlLmdldEJpbmRpbmc9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgdmEodCxlKX07dmFyIENhPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLnR5cGU9ZSx0aGlzLnVzZUludGVnZXJab29tPXIsdGhpcy56b29tPW4sdGhpcy5sYXllcklkPWEsdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5PW5ldyBpLHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXk9bmV3IGl9O0NhLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGg7dGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLl9zZXRQYWludFZhbHVlcyhuLHQsZS5wYXR0ZXJucyYmZS5wYXR0ZXJuc1t0aGlzLmxheWVySWRdLHIpfSxDYS5wcm90b3R5cGUudXBkYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuX3NldFBhaW50VmFsdWVzKHQsZSxyLnBhdHRlcm5zJiZyLnBhdHRlcm5zW3RoaXMubGF5ZXJJZF0saSl9LENhLnByb3RvdHlwZS5fc2V0UGFpbnRWYWx1ZXM9ZnVuY3Rpb24odCxlLHIsbil7aWYobiYmcil7dmFyIGk9bltyLm1pbl0sYT1uW3IubWlkXSxvPW5bci5tYXhdO2lmKGkmJmEmJm8pZm9yKHZhciBzPXQ7czxlO3MrKyl0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShzLGEudGxbMF0sYS50bFsxXSxhLmJyWzBdLGEuYnJbMV0saS50bFswXSxpLnRsWzFdLGkuYnJbMF0saS5iclsxXSxhLnBpeGVsUmF0aW8saS5waXhlbFJhdGlvKSx0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LmVtcGxhY2UocyxhLnRsWzBdLGEudGxbMV0sYS5iclswXSxhLmJyWzFdLG8udGxbMF0sby50bFsxXSxvLmJyWzBdLG8uYnJbMV0sYS5waXhlbFJhdGlvLG8ucGl4ZWxSYXRpbyl9fSxDYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheSYmdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyJiZ0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5JiZ0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyJiYodGhpcy56b29tSW5QYWludFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXksb2EubWVtYmVycyx0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCksdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSxvYS5tZW1iZXJzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LENhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKX07dmFyIExhPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuYmluZGVycz17fSx0aGlzLmxheW91dEF0dHJpYnV0ZXM9bix0aGlzLl9idWZmZXJzPVtdO3ZhciBpPVtdO2Zvcih2YXIgYSBpbiB0LnBhaW50Ll92YWx1ZXMpaWYocihhKSl7dmFyIG89dC5wYWludC5nZXQoYSk7aWYobyBpbnN0YW5jZW9mIGZpJiZMcihvLnByb3BlcnR5LnNwZWNpZmljYXRpb24pKXt2YXIgcz1QYShhLHQudHlwZSksbD1vLnZhbHVlLGM9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUsdT1vLnByb3BlcnR5LnVzZUludGVnZXJab29tLGY9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uWyJwcm9wZXJ0eS10eXBlIl0saD0iY3Jvc3MtZmFkZWQiPT09Znx8ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIj09PWY7aWYoImNvbnN0YW50Ij09PWwua2luZCl0aGlzLmJpbmRlcnNbYV09aD9uZXcgQWEobC52YWx1ZSxzKTpuZXcgTWEobC52YWx1ZSxzLGMpLGkucHVzaCgiL3VfIithKTtlbHNlIGlmKCJzb3VyY2UiPT09bC5raW5kfHxoKXt2YXIgcD16YShhLGMsInNvdXJjZSIpO3RoaXMuYmluZGVyc1thXT1oP25ldyBDYShsLGMsdSxlLHAsdC5pZCk6bmV3IFNhKGwscyxjLHApLGkucHVzaCgiL2FfIithKX1lbHNle3ZhciBkPXphKGEsYywiY29tcG9zaXRlIik7dGhpcy5iaW5kZXJzW2FdPW5ldyBFYShsLHMsYyx1LGUsZCksaS5wdXNoKCIvel8iK2EpfX19dGhpcy5jYWNoZUtleT1pLnNvcnQoKS5qb2luKCIiKX07TGEucHJvdG90eXBlLmdldE1heFZhbHVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYmluZGVyc1t0XTtyZXR1cm4gZSBpbnN0YW5jZW9mIFNhfHxlIGluc3RhbmNlb2YgRWE/ZS5tYXhWYWx1ZTowfSxMYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYSBpbiB0aGlzLmJpbmRlcnMpe3ZhciBvPXRoaXMuYmluZGVyc1thXTsobyBpbnN0YW5jZW9mIFNhfHxvIGluc3RhbmNlb2YgRWF8fG8gaW5zdGFuY2VvZiBDYSkmJm8ucG9wdWxhdGVQYWludEFycmF5KHQsZSxyLG4saSl9fSxMYS5wcm90b3R5cGUuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHRoaXMuYmluZGVycyl7dmFyIG49dGhpcy5iaW5kZXJzW3JdO24gaW5zdGFuY2VvZiBBYSYmbi5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnModCxlKX19LExhLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPSExO2Zvcih2YXIgbyBpbiB0KWZvcih2YXIgcz0wLGw9ZS5nZXRQb3NpdGlvbnMobyk7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdLHU9ci5mZWF0dXJlKGMuaW5kZXgpO2Zvcih2YXIgZiBpbiB0aGlzLmJpbmRlcnMpe3ZhciBoPXRoaXMuYmluZGVyc1tmXTtpZigoaCBpbnN0YW5jZW9mIFNhfHxoIGluc3RhbmNlb2YgRWF8fGggaW5zdGFuY2VvZiBDYSkmJiEwPT09aC5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpe3ZhciBwPW4ucGFpbnQuZ2V0KGYpO2guZXhwcmVzc2lvbj1wLnZhbHVlLGgudXBkYXRlUGFpbnRBcnJheShjLnN0YXJ0LGMuZW5kLHUsdFtvXSxpKSxhPSEwfX19cmV0dXJuIGF9LExhLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuYmluZGVycyl7dmFyIHI9dGhpcy5iaW5kZXJzW2VdOyhyIGluc3RhbmNlb2YgTWF8fHIgaW5zdGFuY2VvZiBBYSkmJnQucHVzaC5hcHBseSh0LHIudW5pZm9ybU5hbWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIiNkZWZpbmUgSEFTX1VOSUZPUk1fIit0fSkpKX1yZXR1cm4gdH0sTGEucHJvdG90eXBlLmdldFBhaW50VmVydGV4QnVmZmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9idWZmZXJzfSxMYS5wcm90b3R5cGUuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmb3IodmFyIG4gaW4gdGhpcy5iaW5kZXJzKXt2YXIgaT10aGlzLmJpbmRlcnNbbl07aWYoaSBpbnN0YW5jZW9mIE1hfHxpIGluc3RhbmNlb2YgQWF8fGkgaW5zdGFuY2VvZiBFYSlmb3IodmFyIGE9MCxvPWkudW5pZm9ybU5hbWVzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTtpZihlW3NdKXt2YXIgbD1pLmdldEJpbmRpbmcodCxlW3NdLHMpO3IucHVzaCh7bmFtZTpzLHByb3BlcnR5Om4sYmluZGluZzpsfSl9fX1yZXR1cm4gcn0sTGEucHJvdG90eXBlLnNldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vLm5hbWUsbD1vLnByb3BlcnR5O3RoaXMuYmluZGVyc1tsXS5zZXRVbmlmb3JtKG8uYmluZGluZyxuLHIuZ2V0KGwpLHMpfX0sTGEucHJvdG90eXBlLnVwZGF0ZVBhaW50QnVmZmVycz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fYnVmZmVycz1bXSx0aGlzLmJpbmRlcnMpe3ZhciByPXRoaXMuYmluZGVyc1tlXTtpZih0JiZyIGluc3RhbmNlb2YgQ2Epe3ZhciBuPTI9PT10LmZyb21TY2FsZT9yLnpvb21JblBhaW50VmVydGV4QnVmZmVyOnIuem9vbU91dFBhaW50VmVydGV4QnVmZmVyO24mJnRoaXMuX2J1ZmZlcnMucHVzaChuKX1lbHNlKHIgaW5zdGFuY2VvZiBTYXx8ciBpbnN0YW5jZW9mIEVhKSYmci5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5fYnVmZmVycy5wdXNoKHIucGFpbnRWZXJ0ZXhCdWZmZXIpfX0sTGEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5iaW5kZXJzKXt2YXIgcj10aGlzLmJpbmRlcnNbZV07KHIgaW5zdGFuY2VvZiBTYXx8ciBpbnN0YW5jZW9mIEVhfHxyIGluc3RhbmNlb2YgQ2EpJiZyLnVwbG9hZCh0KX10aGlzLnVwZGF0ZVBhaW50QnVmZmVycygpfSxMYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmJpbmRlcnMpe3ZhciBlPXRoaXMuYmluZGVyc1t0XTsoZSBpbnN0YW5jZW9mIFNhfHxlIGluc3RhbmNlb2YgRWF8fGUgaW5zdGFuY2VvZiBDYSkmJmUuZGVzdHJveSgpfX07dmFyIElhPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPWZ1bmN0aW9uKCl7cmV0dXJuITB9KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz17fTtmb3IodmFyIGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3RoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW28uaWRdPW5ldyBMYShvLHIsbix0KX10aGlzLm5lZWRzVXBsb2FkPSExLHRoaXMuX2ZlYXR1cmVNYXA9bmV3IGZhLHRoaXMuX2J1ZmZlck9mZnNldD0wfTtmdW5jdGlvbiBQYSh0LGUpe3JldHVybnsidGV4dC1vcGFjaXR5IjpbIm9wYWNpdHkiXSwiaWNvbi1vcGFjaXR5IjpbIm9wYWNpdHkiXSwidGV4dC1jb2xvciI6WyJmaWxsX2NvbG9yIl0sImljb24tY29sb3IiOlsiZmlsbF9jb2xvciJdLCJ0ZXh0LWhhbG8tY29sb3IiOlsiaGFsb19jb2xvciJdLCJpY29uLWhhbG8tY29sb3IiOlsiaGFsb19jb2xvciJdLCJ0ZXh0LWhhbG8tYmx1ciI6WyJoYWxvX2JsdXIiXSwiaWNvbi1oYWxvLWJsdXIiOlsiaGFsb19ibHVyIl0sInRleHQtaGFsby13aWR0aCI6WyJoYWxvX3dpZHRoIl0sImljb24taGFsby13aWR0aCI6WyJoYWxvX3dpZHRoIl0sImxpbmUtZ2FwLXdpZHRoIjpbImdhcHdpZHRoIl0sImxpbmUtcGF0dGVybiI6WyJwYXR0ZXJuX3RvIiwicGF0dGVybl9mcm9tIiwicGl4ZWxfcmF0aW9fdG8iLCJwaXhlbF9yYXRpb19mcm9tIl0sImZpbGwtcGF0dGVybiI6WyJwYXR0ZXJuX3RvIiwicGF0dGVybl9mcm9tIiwicGl4ZWxfcmF0aW9fdG8iLCJwaXhlbF9yYXRpb19mcm9tIl0sImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOlsicGF0dGVybl90byIsInBhdHRlcm5fZnJvbSIsInBpeGVsX3JhdGlvX3RvIiwicGl4ZWxfcmF0aW9fZnJvbSJdfVt0XXx8W3QucmVwbGFjZShlKyItIiwiIikucmVwbGFjZSgvLS9nLCJfIildfWZ1bmN0aW9uIHphKHQsZSxyKXt2YXIgbj17Y29sb3I6e3NvdXJjZTpHaSxjb21wb3NpdGU6WWl9LG51bWJlcjp7c291cmNlOmppLGNvbXBvc2l0ZTpHaX19LGk9ZnVuY3Rpb24odCl7cmV0dXJueyJsaW5lLXBhdHRlcm4iOntzb3VyY2U6Q2ksY29tcG9zaXRlOkNpfSwiZmlsbC1wYXR0ZXJuIjp7c291cmNlOkNpLGNvbXBvc2l0ZTpDaX0sImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOntzb3VyY2U6Q2ksY29tcG9zaXRlOkNpfX1bdF19KHQpO3JldHVybiBpJiZpW3JdfHxuW2VdW3JdfUlhLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG8gaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbb10ucG9wdWxhdGVQYWludEFycmF5cyh0LGUsbixpLGEpO3ZvaWQgMCE9PWUuaWQmJnRoaXMuX2ZlYXR1cmVNYXAuYWRkKGUuaWQscix0aGlzLl9idWZmZXJPZmZzZXQsdCksdGhpcy5fYnVmZmVyT2Zmc2V0PXQsdGhpcy5uZWVkc1VwbG9hZD0hMH0sSWEucHJvdG90eXBlLnVwZGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9cjtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07dGhpcy5uZWVkc1VwbG9hZD10aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tvLmlkXS51cGRhdGVQYWludEFycmF5cyh0LHRoaXMuX2ZlYXR1cmVNYXAsZSxvLG4pfHx0aGlzLm5lZWRzVXBsb2FkfX0sSWEucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF19LElhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7aWYodGhpcy5uZWVkc1VwbG9hZCl7Zm9yKHZhciBlIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2VdLnVwbG9hZCh0KTt0aGlzLm5lZWRzVXBsb2FkPSExfX0sSWEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF0uZGVzdHJveSgpfSxEbigiQ29uc3RhbnRCaW5kZXIiLE1hKSxEbigiQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyIixBYSksRG4oIlNvdXJjZUV4cHJlc3Npb25CaW5kZXIiLFNhKSxEbigiQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlciIsQ2EpLERuKCJDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyIixFYSksRG4oIlByb2dyYW1Db25maWd1cmF0aW9uIixMYSx7b21pdDpbIl9idWZmZXJzIl19KSxEbigiUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQiLElhKTt2YXIgT2E9e21pbjotMSpNYXRoLnBvdygyLDE0KSxtYXg6TWF0aC5wb3coMiwxNCktMX07ZnVuY3Rpb24gRGEodCl7Zm9yKHZhciBlPTgxOTIvdC5leHRlbnQscj10LmxvYWRHZW9tZXRyeSgpLG49MDtuPHIubGVuZ3RoO24rKylmb3IodmFyIGk9cltuXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07by54PU1hdGgucm91bmQoby54KmUpLG8ueT1NYXRoLnJvdW5kKG8ueSplKSwoby54PE9hLm1pbnx8by54Pk9hLm1heHx8by55PE9hLm1pbnx8by55Pk9hLm1heCkmJihfKCJHZW9tZXRyeSBleGNlZWRzIGFsbG93ZWQgZXh0ZW50LCByZWR1Y2UgeW91ciB2ZWN0b3IgdGlsZSBidWZmZXIgc2l6ZSIpLG8ueD1sKG8ueCxPYS5taW4sT2EubWF4KSxvLnk9bChvLnksT2EubWluLE9hLm1heCkpfXJldHVybiByfWZ1bmN0aW9uIFJhKHQsZSxyLG4saSl7dC5lbXBsYWNlQmFjaygyKmUrKG4rMSkvMiwyKnIrKGkrMSkvMil9dmFyIEZhPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5oYXNQYXR0ZXJuPSExLHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IE1pLHRoaXMuaW5kZXhBcnJheT1uZXcgRmksdGhpcy5zZWdtZW50cz1uZXcgaWEsdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IElhKG5hLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzPXRoaXMubGF5ZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSl9O2Z1bmN0aW9uIEJhKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoV2EoZSx0W3JdKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihXYSh0LGVbbl0pKXJldHVybiEwO3JldHVybiEhVmEodCxlKX1mdW5jdGlvbiBOYSh0LGUscil7cmV0dXJuISFXYSh0LGUpfHwhIUhhKGUsdCxyKX1mdW5jdGlvbiBqYSh0LGUpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gWWEoZSx0WzBdKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylmb3IodmFyIG49ZVtyXSxpPTA7aTxuLmxlbmd0aDtpKyspaWYoV2EodCxuW2ldKSlyZXR1cm4hMDtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihZYShlLHRbYV0pKXJldHVybiEwO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKWlmKFZhKHQsZVtvXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gVWEodCxlLHIpe2lmKHQubGVuZ3RoPjEpe2lmKFZhKHQsZSkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoSGEoZVtuXSx0LHIpKXJldHVybiEwfWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKEhhKHRbaV0sZSxyKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBWYSh0LGUpe2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGgtMTtyKyspZm9yKHZhciBuPXRbcl0saT10W3IrMV0sYT0wO2E8ZS5sZW5ndGgtMTthKyspaWYocWEobixpLGVbYV0sZVthKzFdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBxYSh0LGUscixuKXtyZXR1cm4gdyh0LHIsbikhPT13KGUscixuKSYmdyh0LGUscikhPT13KHQsZSxuKX1mdW5jdGlvbiBIYSh0LGUscil7dmFyIG49cipyO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gdC5kaXN0U3FyKGVbMF0pPG47Zm9yKHZhciBpPTE7aTxlLmxlbmd0aDtpKyspaWYoR2EodCxlW2ktMV0sZVtpXSk8bilyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBHYSh0LGUscil7dmFyIG49ZS5kaXN0U3FyKHIpO2lmKDA9PT1uKXJldHVybiB0LmRpc3RTcXIoZSk7dmFyIGk9KCh0LngtZS54KSooci54LWUueCkrKHQueS1lLnkpKihyLnktZS55KSkvbjtyZXR1cm4gdC5kaXN0U3FyKGk8MD9lOmk+MT9yOnIuc3ViKGUpLl9tdWx0KGkpLl9hZGQoZSkpfWZ1bmN0aW9uIFlhKHQsZSl7Zm9yKHZhciByLG4saSxhPSExLG89MDtvPHQubGVuZ3RoO28rKylmb3IodmFyIHM9MCxsPShyPXRbb10pLmxlbmd0aC0xO3M8ci5sZW5ndGg7bD1zKyspKG49cltzXSkueT5lLnkhPShpPXJbbF0pLnk+ZS55JiZlLng8KGkueC1uLngpKihlLnktbi55KS8oaS55LW4ueSkrbi54JiYoYT0hYSk7cmV0dXJuIGF9ZnVuY3Rpb24gV2EodCxlKXtmb3IodmFyIHI9ITEsbj0wLGk9dC5sZW5ndGgtMTtuPHQubGVuZ3RoO2k9bisrKXt2YXIgYT10W25dLG89dFtpXTthLnk+ZS55IT1vLnk+ZS55JiZlLng8KG8ueC1hLngpKihlLnktYS55KS8oby55LWEueSkrYS54JiYocj0hcil9cmV0dXJuIHJ9ZnVuY3Rpb24gWGEodCxlLHIpe3ZhciBuPXJbMF0saT1yWzJdO2lmKHQueDxuLngmJmUueDxuLnh8fHQueD5pLngmJmUueD5pLnh8fHQueTxuLnkmJmUueTxuLnl8fHQueT5pLnkmJmUueT5pLnkpcmV0dXJuITE7dmFyIGE9dyh0LGUsclswXSk7cmV0dXJuIGEhPT13KHQsZSxyWzFdKXx8YSE9PXcodCxlLHJbMl0pfHxhIT09dyh0LGUsclszXSl9ZnVuY3Rpb24gWmEodCxlLHIpe3ZhciBuPWUucGFpbnQuZ2V0KHQpLnZhbHVlO3JldHVybiJjb25zdGFudCI9PT1uLmtpbmQ/bi52YWx1ZTpyLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoZS5pZCkuZ2V0TWF4VmFsdWUodCl9ZnVuY3Rpb24gSmEodCl7cmV0dXJuIE1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKX1mdW5jdGlvbiBLYSh0LGUscixuLGEpe2lmKCFlWzBdJiYhZVsxXSlyZXR1cm4gdDt2YXIgbz1pLmNvbnZlcnQoZSkuX211bHQoYSk7InZpZXdwb3J0Ij09PXImJm8uX3JvdGF0ZSgtbik7Zm9yKHZhciBzPVtdLGw9MDtsPHQubGVuZ3RoO2wrKylzLnB1c2godFtsXS5zdWIobykpO3JldHVybiBzfUZhLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sYXllcnNbMF0saT1bXSxhPW51bGw7ImNpcmNsZSI9PT1uLnR5cGUmJihhPW4ubGF5b3V0LmdldCgiY2lyY2xlLXNvcnQta2V5IikpO2Zvcih2YXIgbz0wLHM9dDtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLmZlYXR1cmUsdT1sLmlkLGY9bC5pbmRleCxoPWwuc291cmNlTGF5ZXJJbmRleCxwPXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeSxkPXt0eXBlOmMudHlwZSxpZDp1LHByb3BlcnRpZXM6Yy5wcm9wZXJ0aWVzLGdlb21ldHJ5OnA/RGEoYyk6W119O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihuZXcgaWkodGhpcy56b29tKSxkLHIpKXtwfHwoZC5nZW9tZXRyeT1EYShjKSk7dmFyIGc9YT9hLmV2YWx1YXRlKGQse30scik6dm9pZCAwO2kucHVzaCh7aWQ6dSxwcm9wZXJ0aWVzOmMucHJvcGVydGllcyx0eXBlOmMudHlwZSxzb3VyY2VMYXllckluZGV4OmgsaW5kZXg6ZixnZW9tZXRyeTpkLmdlb21ldHJ5LHBhdHRlcm5zOnt9LHNvcnRLZXk6Z30pfX1hJiZpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSk7Zm9yKHZhciBtPTAsdj1pO208di5sZW5ndGg7bSs9MSl7dmFyIHk9dlttXSx4PXkuZ2VvbWV0cnksYj15LmluZGV4LF89eS5zb3VyY2VMYXllckluZGV4LHc9dFtiXS5mZWF0dXJlO3RoaXMuYWRkRmVhdHVyZSh5LHgsYixyKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQodyx4LGIsXyx0aGlzLmluZGV4KX19LEZhLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5zdGF0ZURlcGVuZGVudExheWVycyxyKX0sRmEucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxGYS5wcm90b3R5cGUudXBsb2FkUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLnVwbG9hZGVkfHx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZH0sRmEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnVwbG9hZGVkfHwodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxuYSksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSkpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KSx0aGlzLnVwbG9hZGVkPSEwfSxGYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LEZhLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpZm9yKHZhciBvPTAscz1hW2ldO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWwueCx1PWwueTtpZighKGM8MHx8Yz49ODE5Mnx8dTwwfHx1Pj04MTkyKSl7dmFyIGY9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5LHQuc29ydEtleSksaD1mLnZlcnRleExlbmd0aDtSYSh0aGlzLmxheW91dFZlcnRleEFycmF5LGMsdSwtMSwtMSksUmEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxjLHUsMSwtMSksUmEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxjLHUsMSwxKSxSYSh0aGlzLmxheW91dFZlcnRleEFycmF5LGMsdSwtMSwxKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaCxoKzEsaCsyKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaCxoKzMsaCsyKSxmLnZlcnRleExlbmd0aCs9NCxmLnByaW1pdGl2ZUxlbmd0aCs9Mn19dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0LHIse30sbil9LERuKCJDaXJjbGVCdWNrZXQiLEZhLHtvbWl0OlsibGF5ZXJzIl19KTt2YXIgUWE9bmV3IHlpKHsiY2lyY2xlLXNvcnQta2V5IjpuZXcgZGkoQXQubGF5b3V0X2NpcmNsZVsiY2lyY2xlLXNvcnQta2V5Il0pfSksJGE9e3BhaW50Om5ldyB5aSh7ImNpcmNsZS1yYWRpdXMiOm5ldyBkaShBdC5wYWludF9jaXJjbGVbImNpcmNsZS1yYWRpdXMiXSksImNpcmNsZS1jb2xvciI6bmV3IGRpKEF0LnBhaW50X2NpcmNsZVsiY2lyY2xlLWNvbG9yIl0pLCJjaXJjbGUtYmx1ciI6bmV3IGRpKEF0LnBhaW50X2NpcmNsZVsiY2lyY2xlLWJsdXIiXSksImNpcmNsZS1vcGFjaXR5IjpuZXcgZGkoQXQucGFpbnRfY2lyY2xlWyJjaXJjbGUtb3BhY2l0eSJdKSwiY2lyY2xlLXRyYW5zbGF0ZSI6bmV3IHBpKEF0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXRyYW5zbGF0ZSJdKSwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyBwaShBdC5wYWludF9jaXJjbGVbImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIl0pLCJjaXJjbGUtcGl0Y2gtc2NhbGUiOm5ldyBwaShBdC5wYWludF9jaXJjbGVbImNpcmNsZS1waXRjaC1zY2FsZSJdKSwiY2lyY2xlLXBpdGNoLWFsaWdubWVudCI6bmV3IHBpKEF0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXBpdGNoLWFsaWdubWVudCJdKSwiY2lyY2xlLXN0cm9rZS13aWR0aCI6bmV3IGRpKEF0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXN0cm9rZS13aWR0aCJdKSwiY2lyY2xlLXN0cm9rZS1jb2xvciI6bmV3IGRpKEF0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXN0cm9rZS1jb2xvciJdKSwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5IjpuZXcgZGkoQXQucGFpbnRfY2lyY2xlWyJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiXSl9KSxsYXlvdXQ6UWF9LHRvPSJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQzMkFycmF5P0Zsb2F0MzJBcnJheTpBcnJheTtmdW5jdGlvbiBlbyh0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9ZnVuY3Rpb24gcm8odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0scD1lWzEwXSxkPWVbMTFdLGc9ZVsxMl0sbT1lWzEzXSx2PWVbMTRdLHk9ZVsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPXgqbitiKnMrXypmK3cqZyx0WzFdPXgqaStiKmwrXypoK3cqbSx0WzJdPXgqYStiKmMrXypwK3cqdix0WzNdPXgqbytiKnUrXypkK3cqeSx0WzRdPSh4PXJbNF0pKm4rKGI9cls1XSkqcysoXz1yWzZdKSpmKyh3PXJbN10pKmcsdFs1XT14KmkrYipsK18qaCt3Km0sdFs2XT14KmErYipjK18qcCt3KnYsdFs3XT14Km8rYip1K18qZCt3KnksdFs4XT0oeD1yWzhdKSpuKyhiPXJbOV0pKnMrKF89clsxMF0pKmYrKHc9clsxMV0pKmcsdFs5XT14KmkrYipsK18qaCt3Km0sdFsxMF09eCphK2IqYytfKnArdyp2LHRbMTFdPXgqbytiKnUrXypkK3cqeSx0WzEyXT0oeD1yWzEyXSkqbisoYj1yWzEzXSkqcysoXz1yWzE0XSkqZisodz1yWzE1XSkqZyx0WzEzXT14KmkrYipsK18qaCt3Km0sdFsxNF09eCphK2IqYytfKnArdyp2LHRbMTVdPXgqbytiKnUrXypkK3cqeSx0fU1hdGguaHlwb3R8fChNYXRoLmh5cG90PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cyxlPTAscj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZSs9dFtyXSp0W3JdO3JldHVybiBNYXRoLnNxcnQoZSl9KTt2YXIgbm8saW89cm87ZnVuY3Rpb24gYW8odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzhdKmErclsxMl0qbyx0WzFdPXJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKm8sdFsyXT1yWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0qbyx0WzNdPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XSpvLHR9bm89bmV3IHRvKDMpLHRvIT1GbG9hdDMyQXJyYXkmJihub1swXT0wLG5vWzFdPTAsbm9bMl09MCksZnVuY3Rpb24oKXt2YXIgdD1uZXcgdG8oNCk7dG8hPUZsb2F0MzJBcnJheSYmKHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MCl9KCk7dmFyIG9vPShmdW5jdGlvbigpe3ZhciB0PW5ldyB0bygyKTt0byE9RmxvYXQzMkFycmF5JiYodFswXT0wLHRbMV09MCl9KCksZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLCRhKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGYSh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24odCl7dmFyIGU9dDtyZXR1cm4gWmEoImNpcmNsZS1yYWRpdXMiLHRoaXMsZSkrWmEoImNpcmNsZS1zdHJva2Utd2lkdGgiLHRoaXMsZSkrSmEodGhpcy5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9S2EodCx0aGlzLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciIpLGEuYW5nbGUsbyksYz10aGlzLnBhaW50LmdldCgiY2lyY2xlLXJhZGl1cyIpLmV2YWx1YXRlKGUscikrdGhpcy5wYWludC5nZXQoImNpcmNsZS1zdHJva2Utd2lkdGgiKS5ldmFsdWF0ZShlLHIpLHU9Im1hcCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpLGY9dT9sOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gc28odCxlKX0pKX0obCxzKSxoPXU/YypvOmMscD0wLGQ9bjtwPGQubGVuZ3RoO3ArPTEpZm9yKHZhciBnPTAsbT1kW3BdO2c8bS5sZW5ndGg7Zys9MSl7dmFyIHY9bVtnXSx5PXU/djpzbyh2LHMpLHg9aCxiPWFvKFtdLFt2Lngsdi55LDAsMV0scyk7aWYoInZpZXdwb3J0Ij09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtc2NhbGUiKSYmIm1hcCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpP3gqPWJbM10vYS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlOiJtYXAiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1zY2FsZSIpJiYidmlld3BvcnQiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiKSYmKHgqPWEuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9iWzNdKSxOYShmLHkseCkpcmV0dXJuITB9cmV0dXJuITF9LGV9KHhpKSk7ZnVuY3Rpb24gc28odCxlKXt2YXIgcj1hbyhbXSxbdC54LHQueSwwLDFdLGUpO3JldHVybiBuZXcgaShyWzBdL3JbM10sclsxXS9yWzNdKX12YXIgbG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGV9KEZhKTtmdW5jdGlvbiBjbyh0LGUscixuKXt2YXIgaT1lLndpZHRoLGE9ZS5oZWlnaHQ7aWYobil7aWYobiBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KW49bmV3IFVpbnQ4QXJyYXkobi5idWZmZXIpO2Vsc2UgaWYobi5sZW5ndGghPT1pKmEqcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigibWlzbWF0Y2hlZCBpbWFnZSBzaXplIil9ZWxzZSBuPW5ldyBVaW50OEFycmF5KGkqYSpyKTtyZXR1cm4gdC53aWR0aD1pLHQuaGVpZ2h0PWEsdC5kYXRhPW4sdH1mdW5jdGlvbiB1byh0LGUscil7dmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0O2lmKG4hPT10LndpZHRofHxpIT09dC5oZWlnaHQpe3ZhciBhPWNvKHt9LHt3aWR0aDpuLGhlaWdodDppfSxyKTtmbyh0LGEse3g6MCx5OjB9LHt4OjAseTowfSx7d2lkdGg6TWF0aC5taW4odC53aWR0aCxuKSxoZWlnaHQ6TWF0aC5taW4odC5oZWlnaHQsaSl9LHIpLHQud2lkdGg9bix0LmhlaWdodD1pLHQuZGF0YT1hLmRhdGF9fWZ1bmN0aW9uIGZvKHQsZSxyLG4saSxhKXtpZigwPT09aS53aWR0aHx8MD09PWkuaGVpZ2h0KXJldHVybiBlO2lmKGkud2lkdGg+dC53aWR0aHx8aS5oZWlnaHQ+dC5oZWlnaHR8fHIueD50LndpZHRoLWkud2lkdGh8fHIueT50LmhlaWdodC1pLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weSIpO2lmKGkud2lkdGg+ZS53aWR0aHx8aS5oZWlnaHQ+ZS5oZWlnaHR8fG4ueD5lLndpZHRoLWkud2lkdGh8fG4ueT5lLmhlaWdodC1pLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5Iik7Zm9yKHZhciBvPXQuZGF0YSxzPWUuZGF0YSxsPTA7bDxpLmhlaWdodDtsKyspZm9yKHZhciBjPSgoci55K2wpKnQud2lkdGgrci54KSphLHU9KChuLnkrbCkqZS53aWR0aCtuLngpKmEsZj0wO2Y8aS53aWR0aCphO2YrKylzW3UrZl09b1tjK2ZdO3JldHVybiBlfURuKCJIZWF0bWFwQnVja2V0Iixsbyx7b21pdDpbImxheWVycyJdfSk7dmFyIGhvPWZ1bmN0aW9uKHQsZSl7Y28odGhpcyx0LDEsZSl9O2hvLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7dW8odGhpcyx0LDEpfSxoby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGhvKHt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSl9LGhvLmNvcHk9ZnVuY3Rpb24odCxlLHIsbixpKXtmbyh0LGUscixuLGksMSl9O3ZhciBwbz1mdW5jdGlvbih0LGUpe2NvKHRoaXMsdCw0LGUpfTtwby5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3VvKHRoaXMsdCw0KX0scG8ucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24odCxlKXtlP3RoaXMuZGF0YS5zZXQodCk6dGhpcy5kYXRhPXQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheT9uZXcgVWludDhBcnJheSh0LmJ1ZmZlcik6dH0scG8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwbyh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9LG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpfSxwby5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm8odCxlLHIsbixpLDQpfSxEbigiQWxwaGFJbWFnZSIsaG8pLERuKCJSR0JBSW1hZ2UiLHBvKTt2YXIgZ289e3BhaW50Om5ldyB5aSh7ImhlYXRtYXAtcmFkaXVzIjpuZXcgZGkoQXQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1yYWRpdXMiXSksImhlYXRtYXAtd2VpZ2h0IjpuZXcgZGkoQXQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC13ZWlnaHQiXSksImhlYXRtYXAtaW50ZW5zaXR5IjpuZXcgcGkoQXQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1pbnRlbnNpdHkiXSksImhlYXRtYXAtY29sb3IiOm5ldyB2aShBdC5wYWludF9oZWF0bWFwWyJoZWF0bWFwLWNvbG9yIl0pLCJoZWF0bWFwLW9wYWNpdHkiOm5ldyBwaShBdC5wYWludF9oZWF0bWFwWyJoZWF0bWFwLW9wYWNpdHkiXSl9KX07ZnVuY3Rpb24gbW8odCxlKXtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj17fSxpPTAsYT0wO2k8MjU2O2krKyxhKz00KXtuW2VdPWkvMjU1O3ZhciBvPXQuZXZhbHVhdGUobik7clthKzBdPU1hdGguZmxvb3IoMjU1Km8uci9vLmEpLHJbYSsxXT1NYXRoLmZsb29yKDI1NSpvLmcvby5hKSxyW2ErMl09TWF0aC5mbG9vcigyNTUqby5iL28uYSksclthKzNdPU1hdGguZmxvb3IoMjU1Km8uYSl9cmV0dXJuIG5ldyBwbyh7d2lkdGg6MjU2LGhlaWdodDoxfSxyKX12YXIgdm89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLGdvKSx0aGlzLl91cGRhdGVDb2xvclJhbXAoKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBsbyh0KX0sZS5wcm90b3R5cGUuX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlPWZ1bmN0aW9uKHQpeyJoZWF0bWFwLWNvbG9yIj09PXQmJnRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlQ29sb3JSYW1wPWZ1bmN0aW9uKCl7dGhpcy5jb2xvclJhbXA9bW8odGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWyJoZWF0bWFwLWNvbG9yIl0udmFsdWUuZXhwcmVzc2lvbiwiaGVhdG1hcERlbnNpdHkiKSx0aGlzLmNvbG9yUmFtcFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwRmJvJiYodGhpcy5oZWF0bWFwRmJvLmRlc3Ryb3koKSx0aGlzLmhlYXRtYXBGYm89bnVsbCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5wYWludC5nZXQoImhlYXRtYXAtb3BhY2l0eSIpJiYibm9uZSIhPT10aGlzLnZpc2liaWxpdHl9LGV9KHhpKSx5bz17cGFpbnQ6bmV3IHlpKHsiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb24iOm5ldyBwaShBdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIl0pLCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvciI6bmV3IHBpKEF0LnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiXSksImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iOm5ldyBwaShBdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iXSksImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiOm5ldyBwaShBdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiXSksImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiOm5ldyBwaShBdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiXSksImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiOm5ldyBwaShBdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiXSl9KX0seG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHlvKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldCgiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiIpJiYibm9uZSIhPT10aGlzLnZpc2liaWxpdHl9LGV9KHhpKSxibz1UaShbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxfbz1Ubyx3bz1UbztmdW5jdGlvbiBUbyh0LGUscil7cj1yfHwyO3ZhciBuLGksYSxvLHMsbCxjLHU9ZSYmZS5sZW5ndGgsZj11P2VbMF0qcjp0Lmxlbmd0aCxoPWtvKHQsMCxmLHIsITApLHA9W107aWYoIWh8fGgubmV4dD09PWgucHJldilyZXR1cm4gcDtpZih1JiYoaD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1bXTtmb3IoaT0wLGE9ZS5sZW5ndGg7aTxhO2krKykobz1rbyh0LGVbaV0qbixpPGEtMT9lW2krMV0qbjp0Lmxlbmd0aCxuLCExKSk9PT1vLm5leHQmJihvLnN0ZWluZXI9ITApLHMucHVzaChEbyhvKSk7Zm9yKHMuc29ydChJbyksaT0wO2k8cy5sZW5ndGg7aSsrKVBvKHNbaV0scikscj1NbyhyLHIubmV4dCk7cmV0dXJuIHJ9KHQsZSxoLHIpKSx0Lmxlbmd0aD44MCpyKXtuPWE9dFswXSxpPW89dFsxXTtmb3IodmFyIGQ9cjtkPGY7ZCs9cikocz10W2RdKTxuJiYobj1zKSwobD10W2QrMV0pPGkmJihpPWwpLHM+YSYmKGE9cyksbD5vJiYobz1sKTtjPTAhPT0oYz1NYXRoLm1heChhLW4sby1pKSk/MS9jOjB9cmV0dXJuIEFvKGgscCxyLG4saSxjKSxwfWZ1bmN0aW9uIGtvKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09WG8odCxlLHIsbik+MClmb3IoYT1lO2E8cjthKz1uKW89R28oYSx0W2FdLHRbYSsxXSxvKTtlbHNlIGZvcihhPXItbjthPj1lO2EtPW4pbz1HbyhhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiZObyhvLG8ubmV4dCkmJihZbyhvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBNbyh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IU5vKG4sbi5uZXh0KSYmMCE9PUJvKG4ucHJldixuLG4ubmV4dCkpbj1uLm5leHQ7ZWxzZXtpZihZbyhuKSwobj1lPW4ucHJldik9PT1uLm5leHQpYnJlYWs7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIEFvKHQsZSxyLG4saSxhLG8pe2lmKHQpeyFvJiZhJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10O2Rve251bGw9PT1pLnomJihpLno9T28oaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xO2Rve2ZvcihyPXQsdD1udWxsLGE9bnVsbCxvPTA7cjspe2ZvcihvKyssbj1yLHM9MCxlPTA7ZTxjJiYocysrLG49bi5uZXh0Wik7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZuOykwIT09cyYmKDA9PT1sfHwhbnx8ci56PD1uLnopPyhpPXIscj1yLm5leHRaLHMtLSk6KGk9bixuPW4ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKX0oaSl9KHQsbixpLGEpO2Zvcih2YXIgcyxsLGM9dDt0LnByZXYhPT10Lm5leHQ7KWlmKHM9dC5wcmV2LGw9dC5uZXh0LGE/RW8odCxuLGksYSk6U28odCkpZS5wdXNoKHMuaS9yKSxlLnB1c2godC5pL3IpLGUucHVzaChsLmkvciksWW8odCksdD1sLm5leHQsYz1sLm5leHQ7ZWxzZSBpZigodD1sKT09PWMpe28/MT09PW8/QW8odD1DbyhNbyh0KSxlLHIpLGUscixuLGksYSwyKToyPT09byYmTG8odCxlLHIsbixpLGEpOkFvKE1vKHQpLGUscixuLGksYSwxKTticmVha319fWZ1bmN0aW9uIFNvKHQpe3ZhciBlPXQucHJldixyPXQsbj10Lm5leHQ7aWYoQm8oZSxyLG4pPj0wKXJldHVybiExO2Zvcih2YXIgaT10Lm5leHQubmV4dDtpIT09dC5wcmV2Oyl7aWYoUm8oZS54LGUueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJkJvKGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gRW8odCxlLHIsbil7dmFyIGk9dC5wcmV2LGE9dCxvPXQubmV4dDtpZihCbyhpLGEsbyk+PTApcmV0dXJuITE7Zm9yKHZhciBzPWkueD5hLng/aS54Pm8ueD9pLng6by54OmEueD5vLng/YS54Om8ueCxsPWkueT5hLnk/aS55Pm8ueT9pLnk6by55OmEueT5vLnk/YS55Om8ueSxjPU9vKGkueDxhLng/aS54PG8ueD9pLng6by54OmEueDxvLng/YS54Om8ueCxpLnk8YS55P2kueTxvLnk/aS55Om8ueTphLnk8by55P2EueTpvLnksZSxyLG4pLHU9T28ocyxsLGUscixuKSxmPXQucHJldlosaD10Lm5leHRaO2YmJmYuej49YyYmaCYmaC56PD11Oyl7aWYoZiE9PXQucHJldiYmZiE9PXQubmV4dCYmUm8oaS54LGkueSxhLngsYS55LG8ueCxvLnksZi54LGYueSkmJkJvKGYucHJldixmLGYubmV4dCk+PTApcmV0dXJuITE7aWYoZj1mLnByZXZaLGghPT10LnByZXYmJmghPT10Lm5leHQmJlJvKGkueCxpLnksYS54LGEueSxvLngsby55LGgueCxoLnkpJiZCbyhoLnByZXYsaCxoLm5leHQpPj0wKXJldHVybiExO2g9aC5uZXh0Wn1mb3IoO2YmJmYuej49Yzspe2lmKGYhPT10LnByZXYmJmYhPT10Lm5leHQmJlJvKGkueCxpLnksYS54LGEueSxvLngsby55LGYueCxmLnkpJiZCbyhmLnByZXYsZixmLm5leHQpPj0wKXJldHVybiExO2Y9Zi5wcmV2Wn1mb3IoO2gmJmguejw9dTspe2lmKGghPT10LnByZXYmJmghPT10Lm5leHQmJlJvKGkueCxpLnksYS54LGEueSxvLngsby55LGgueCxoLnkpJiZCbyhoLnByZXYsaCxoLm5leHQpPj0wKXJldHVybiExO2g9aC5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBDbyh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsYT1uLm5leHQubmV4dDshTm8oaSxhKSYmam8oaSxuLG4ubmV4dCxhKSYmcW8oaSxhKSYmcW8oYSxpKSYmKGUucHVzaChpLmkvciksZS5wdXNoKG4uaS9yKSxlLnB1c2goYS5pL3IpLFlvKG4pLFlvKG4ubmV4dCksbj10PWEpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gTW8obil9ZnVuY3Rpb24gTG8odCxlLHIsbixpLGEpe3ZhciBvPXQ7ZG97Zm9yKHZhciBzPW8ubmV4dC5uZXh0O3MhPT1vLnByZXY7KXtpZihvLmkhPT1zLmkmJkZvKG8scykpe3ZhciBsPUhvKG8scyk7cmV0dXJuIG89TW8obyxvLm5leHQpLGw9TW8obCxsLm5leHQpLEFvKG8sZSxyLG4saSxhKSx2b2lkIEFvKGwsZSxyLG4saSxhKX1zPXMubmV4dH1vPW8ubmV4dH13aGlsZShvIT09dCl9ZnVuY3Rpb24gSW8odCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBQbyh0LGUpe2lmKGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT10LngsYT10Lnksbz0tMS8wO2Rve2lmKGE8PW4ueSYmYT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXt2YXIgcz1uLngrKGEtbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihzPD1pJiZzPm8pe2lmKG89cyxzPT09aSl7aWYoYT09PW4ueSlyZXR1cm4gbjtpZihhPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1yPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFyKXJldHVybiBudWxsO2lmKGk9PT1vKXJldHVybiByO3ZhciBsLGM9cix1PXIueCxmPXIueSxoPTEvMDtuPXI7ZG97aT49bi54JiZuLng+PXUmJmkhPT1uLngmJlJvKGE8Zj9pOm8sYSx1LGYsYTxmP286aSxhLG4ueCxuLnkpJiYobD1NYXRoLmFicyhhLW4ueSkvKGktbi54KSxxbyhuLHQpJiYobDxofHxsPT09aCYmKG4ueD5yLnh8fG4ueD09PXIueCYmem8ocixuKSkpJiYocj1uLGg9bCkpLG49bi5uZXh0fXdoaWxlKG4hPT1jKTtyZXR1cm4gcn0odCxlKSl7dmFyIHI9SG8oZSx0KTtNbyhlLGUubmV4dCksTW8ocixyLm5leHQpfX1mdW5jdGlvbiB6byh0LGUpe3JldHVybiBCbyh0LnByZXYsdCxlLnByZXYpPDAmJkJvKGUubmV4dCx0LHQubmV4dCk8MH1mdW5jdGlvbiBPbyh0LGUscixuLGkpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtcikqaSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGU9MzI3NjcqKGUtbikqaSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfWZ1bmN0aW9uIERvKHQpe3ZhciBlPXQscj10O2RveyhlLng8ci54fHxlLng9PT1yLngmJmUueTxyLnkpJiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gUm8odCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIEZvKHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIWZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZqbyhyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmKHFvKHQsZSkmJnFvKGUsdCkmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPSExLGk9KHQueCtlLngpLzIsYT0odC55K2UueSkvMjtkb3tyLnk+YSE9ci5uZXh0Lnk+YSYmci5uZXh0LnkhPT1yLnkmJmk8KHIubmV4dC54LXIueCkqKGEtci55KS8oci5uZXh0Lnktci55KStyLngmJihuPSFuKSxyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuIG59KHQsZSkmJihCbyh0LnByZXYsdCxlLnByZXYpfHxCbyh0LGUucHJldixlKSl8fE5vKHQsZSkmJkJvKHQucHJldix0LHQubmV4dCk+MCYmQm8oZS5wcmV2LGUsZS5uZXh0KT4wKX1mdW5jdGlvbiBCbyh0LGUscil7cmV0dXJuKGUueS10LnkpKihyLngtZS54KS0oZS54LXQueCkqKHIueS1lLnkpfWZ1bmN0aW9uIE5vKHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIGpvKHQsZSxyLG4pe3ZhciBpPVZvKEJvKHQsZSxyKSksYT1WbyhCbyh0LGUsbikpLG89Vm8oQm8ocixuLHQpKSxzPVZvKEJvKHIsbixlKSk7cmV0dXJuIGkhPT1hJiZvIT09c3x8ISgwIT09aXx8IVVvKHQscixlKSl8fCEoMCE9PWF8fCFVbyh0LG4sZSkpfHwhKDAhPT1vfHwhVW8ocix0LG4pKXx8ISgwIT09c3x8IVVvKHIsZSxuKSl9ZnVuY3Rpb24gVW8odCxlLHIpe3JldHVybiBlLng8PU1hdGgubWF4KHQueCxyLngpJiZlLng+PU1hdGgubWluKHQueCxyLngpJiZlLnk8PU1hdGgubWF4KHQueSxyLnkpJiZlLnk+PU1hdGgubWluKHQueSxyLnkpfWZ1bmN0aW9uIFZvKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBxbyh0LGUpe3JldHVybiBCbyh0LnByZXYsdCx0Lm5leHQpPDA/Qm8odCxlLHQubmV4dCk+PTAmJkJvKHQsdC5wcmV2LGUpPj0wOkJvKHQsZSx0LnByZXYpPDB8fEJvKHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gSG8odCxlKXt2YXIgcj1uZXcgV28odC5pLHQueCx0LnkpLG49bmV3IFdvKGUuaSxlLngsZS55KSxpPXQubmV4dCxhPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWksaS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4sYS5uZXh0PW4sbi5wcmV2PWEsbn1mdW5jdGlvbiBHbyh0LGUscixuKXt2YXIgaT1uZXcgV28odCxlLHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBZbyh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIFdvKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBYbyh0LGUscixuKXtmb3IodmFyIGk9MCxhPWUsbz1yLW47YTxyO2ErPW4paSs9KHRbb10tdFthXSkqKHRbYSsxXSt0W28rMV0pLG89YTtyZXR1cm4gaX1mdW5jdGlvbiBabyh0LGUscixuLGkpeyFmdW5jdGlvbiB0KGUscixuLGksYSl7Zm9yKDtpPm47KXtpZihpLW4+NjAwKXt2YXIgbz1pLW4rMSxzPXItbisxLGw9TWF0aC5sb2cobyksYz0uNSpNYXRoLmV4cCgyKmwvMyksdT0uNSpNYXRoLnNxcnQobCpjKihvLWMpL28pKihzLW8vMjwwPy0xOjEpO3QoZSxyLE1hdGgubWF4KG4sTWF0aC5mbG9vcihyLXMqYy9vK3UpKSxNYXRoLm1pbihpLE1hdGguZmxvb3Iocisoby1zKSpjL28rdSkpLGEpfXZhciBmPWVbcl0saD1uLHA9aTtmb3IoSm8oZSxuLHIpLGEoZVtpXSxmKT4wJiZKbyhlLG4saSk7aDxwOyl7Zm9yKEpvKGUsaCxwKSxoKysscC0tO2EoZVtoXSxmKTwwOyloKys7Zm9yKDthKGVbcF0sZik+MDspcC0tfTA9PT1hKGVbbl0sZik/Sm8oZSxuLHApOkpvKGUsKytwLGkpLHA8PXImJihuPXArMSkscjw9cCYmKGk9cC0xKX19KHQsZSxyfHwwLG58fHQubGVuZ3RoLTEsaXx8S28pfWZ1bmN0aW9uIEpvKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gS28odCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gUW8odCxlKXt2YXIgcj10Lmxlbmd0aDtpZihyPD0xKXJldHVyblt0XTtmb3IodmFyIG4saSxhPVtdLG89MDtvPHI7bysrKXt2YXIgcz1UKHRbb10pOzAhPT1zJiYodFtvXS5hcmVhPU1hdGguYWJzKHMpLHZvaWQgMD09PWkmJihpPXM8MCksaT09PXM8MD8obiYmYS5wdXNoKG4pLG49W3Rbb11dKTpuLnB1c2godFtvXSkpfWlmKG4mJmEucHVzaChuKSxlPjEpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspYVtsXS5sZW5ndGg8PWV8fChabyhhW2xdLGUsMSxhW2xdLmxlbmd0aC0xLCRvKSxhW2xdPWFbbF0uc2xpY2UoMCxlKSk7cmV0dXJuIGF9ZnVuY3Rpb24gJG8odCxlKXtyZXR1cm4gZS5hcmVhLXQuYXJlYX1mdW5jdGlvbiB0cyh0LGUscil7Zm9yKHZhciBuPXIucGF0dGVybkRlcGVuZGVuY2llcyxpPSExLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLnBhaW50LmdldCh0KyItcGF0dGVybiIpO3MuaXNDb25zdGFudCgpfHwoaT0hMCk7dmFyIGw9cy5jb25zdGFudE9yKG51bGwpO2wmJihpPSEwLG5bbC50b109ITAsbltsLmZyb21dPSEwKX1yZXR1cm4gaX1mdW5jdGlvbiBlcyh0LGUscixuLGkpe2Zvcih2YXIgYT1pLnBhdHRlcm5EZXBlbmRlbmNpZXMsbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLnBhaW50LmdldCh0KyItcGF0dGVybiIpLnZhbHVlO2lmKCJjb25zdGFudCIhPT1jLmtpbmQpe3ZhciB1PWMuZXZhbHVhdGUoe3pvb206bi0xfSxyLHt9LGkuYXZhaWxhYmxlSW1hZ2VzKSxmPWMuZXZhbHVhdGUoe3pvb206bn0scix7fSxpLmF2YWlsYWJsZUltYWdlcyksaD1jLmV2YWx1YXRlKHt6b29tOm4rMX0scix7fSxpLmF2YWlsYWJsZUltYWdlcyk7Zj1mJiZmLm5hbWU/Zi5uYW1lOmYsaD1oJiZoLm5hbWU/aC5uYW1lOmgsYVt1PXUmJnUubmFtZT91Lm5hbWU6dV09ITAsYVtmXT0hMCxhW2hdPSEwLHIucGF0dGVybnNbbC5pZF09e21pbjp1LG1pZDpmLG1heDpofX19cmV0dXJuIHJ9VG8uZGV2aWF0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUmJmUubGVuZ3RoLGE9TWF0aC5hYnMoWG8odCwwLGk/ZVswXSpyOnQubGVuZ3RoLHIpKTtpZihpKWZvcih2YXIgbz0wLHM9ZS5sZW5ndGg7bzxzO28rKylhLT1NYXRoLmFicyhYbyh0LGVbb10qcixvPHMtMT9lW28rMV0qcjp0Lmxlbmd0aCxyKSk7dmFyIGw9MDtmb3Iobz0wO288bi5sZW5ndGg7bys9Myl7dmFyIGM9bltvXSpyLHU9bltvKzFdKnIsZj1uW28rMl0qcjtsKz1NYXRoLmFicygodFtjXS10W2ZdKSoodFt1KzFdLXRbYysxXSktKHRbY10tdFt1XSkqKHRbZisxXS10W2MrMV0pKX1yZXR1cm4gMD09PWEmJjA9PT1sPzA6TWF0aC5hYnMoKGwtYSkvYSl9LFRvLmZsYXR0ZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF1bMF0ubGVuZ3RoLHI9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPTA7YTx0W2ldLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxlO28rKylyLnZlcnRpY2VzLnB1c2godFtpXVthXVtvXSk7aT4wJiZyLmhvbGVzLnB1c2gobis9dFtpLTFdLmxlbmd0aCl9cmV0dXJuIHJ9LF9vLmRlZmF1bHQ9d287dmFyIHJzPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5oYXNQYXR0ZXJuPSExLHRoaXMucGF0dGVybkZlYXR1cmVzPVtdLHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IE1pLHRoaXMuaW5kZXhBcnJheT1uZXcgRmksdGhpcy5pbmRleEFycmF5Mj1uZXcgcWksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IElhKGJvLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgaWEsdGhpcy5zZWdtZW50czI9bmV3IGlhLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcz10aGlzLmxheWVycy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpfTtycy5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuaGFzUGF0dGVybj10cygiZmlsbCIsdGhpcy5sYXllcnMsZSk7Zm9yKHZhciBuPXRoaXMubGF5ZXJzWzBdLmxheW91dC5nZXQoImZpbGwtc29ydC1rZXkiKSxpPVtdLGE9MCxvPXQ7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9cy5mZWF0dXJlLGM9cy5pZCx1PXMuaW5kZXgsZj1zLnNvdXJjZUxheWVySW5kZXgsaD10aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnkscD17dHlwZTpsLnR5cGUsaWQ6Yyxwcm9wZXJ0aWVzOmwucHJvcGVydGllcyxnZW9tZXRyeTpoP0RhKGwpOltdfTtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IGlpKHRoaXMuem9vbSkscCxyKSl7aHx8KHAuZ2VvbWV0cnk9RGEobCkpO3ZhciBkPW4/bi5ldmFsdWF0ZShwLHt9LHIsZS5hdmFpbGFibGVJbWFnZXMpOnZvaWQgMDtpLnB1c2goe2lkOmMscHJvcGVydGllczpsLnByb3BlcnRpZXMsdHlwZTpsLnR5cGUsc291cmNlTGF5ZXJJbmRleDpmLGluZGV4OnUsZ2VvbWV0cnk6cC5nZW9tZXRyeSxwYXR0ZXJuczp7fSxzb3J0S2V5OmR9KX19biYmaS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpO2Zvcih2YXIgZz0wLG09aTtnPG0ubGVuZ3RoO2crPTEpe3ZhciB2PW1bZ10seT12Lmdlb21ldHJ5LHg9di5pbmRleCxiPXYuc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmhhc1BhdHRlcm4pe3ZhciBfPWVzKCJmaWxsIix0aGlzLmxheWVycyx2LHRoaXMuem9vbSxlKTt0aGlzLnBhdHRlcm5GZWF0dXJlcy5wdXNoKF8pfWVsc2UgdGhpcy5hZGRGZWF0dXJlKHYseSx4LHIse30pO2UuZmVhdHVyZUluZGV4Lmluc2VydCh0W3hdLmZlYXR1cmUseSx4LGIsdGhpcy5pbmRleCl9fSxycy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCYmdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXModCxlLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMscil9LHJzLnByb3RvdHlwZS5hZGRGZWF0dXJlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLnBhdHRlcm5GZWF0dXJlcztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dGhpcy5hZGRGZWF0dXJlKGEsYS5nZW9tZXRyeSxhLmluZGV4LGUscil9fSxycy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LHJzLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSxycy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudXBsb2FkZWR8fCh0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LGJvKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLmluZGV4QnVmZmVyMj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheTIpKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy51cGxvYWRlZD0hMH0scnMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyMi5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMyLmRlc3Ryb3koKSl9LHJzLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPTAsbz1RbyhlLDUwMCk7YTxvLmxlbmd0aDthKz0xKXtmb3IodmFyIHM9b1thXSxsPTAsYz0wLHU9cztjPHUubGVuZ3RoO2MrPTEpbCs9dVtjXS5sZW5ndGg7Zm9yKHZhciBmPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQobCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksaD1mLnZlcnRleExlbmd0aCxwPVtdLGQ9W10sZz0wLG09cztnPG0ubGVuZ3RoO2crPTEpe3ZhciB2PW1bZ107aWYoMCE9PXYubGVuZ3RoKXt2IT09c1swXSYmZC5wdXNoKHAubGVuZ3RoLzIpO3ZhciB5PXRoaXMuc2VnbWVudHMyLnByZXBhcmVTZWdtZW50KHYubGVuZ3RoLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5MikseD15LnZlcnRleExlbmd0aDt0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHZbMF0ueCx2WzBdLnkpLHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2soeCt2Lmxlbmd0aC0xLHgpLHAucHVzaCh2WzBdLngpLHAucHVzaCh2WzBdLnkpO2Zvcih2YXIgYj0xO2I8di5sZW5ndGg7YisrKXRoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2sodltiXS54LHZbYl0ueSksdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayh4K2ItMSx4K2IpLHAucHVzaCh2W2JdLngpLHAucHVzaCh2W2JdLnkpO3kudmVydGV4TGVuZ3RoKz12Lmxlbmd0aCx5LnByaW1pdGl2ZUxlbmd0aCs9di5sZW5ndGh9fWZvcih2YXIgXz1fbyhwLGQpLHc9MDt3PF8ubGVuZ3RoO3crPTMpdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGgrX1t3XSxoK19bdysxXSxoK19bdysyXSk7Zi52ZXJ0ZXhMZW5ndGgrPWwsZi5wcmltaXRpdmVMZW5ndGgrPV8ubGVuZ3RoLzN9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0LHIsaSxuKX0sRG4oIkZpbGxCdWNrZXQiLHJzLHtvbWl0OlsibGF5ZXJzIiwicGF0dGVybkZlYXR1cmVzIl19KTt2YXIgbnM9bmV3IHlpKHsiZmlsbC1zb3J0LWtleSI6bmV3IGRpKEF0LmxheW91dF9maWxsWyJmaWxsLXNvcnQta2V5Il0pfSksaXM9e3BhaW50Om5ldyB5aSh7ImZpbGwtYW50aWFsaWFzIjpuZXcgcGkoQXQucGFpbnRfZmlsbFsiZmlsbC1hbnRpYWxpYXMiXSksImZpbGwtb3BhY2l0eSI6bmV3IGRpKEF0LnBhaW50X2ZpbGxbImZpbGwtb3BhY2l0eSJdKSwiZmlsbC1jb2xvciI6bmV3IGRpKEF0LnBhaW50X2ZpbGxbImZpbGwtY29sb3IiXSksImZpbGwtb3V0bGluZS1jb2xvciI6bmV3IGRpKEF0LnBhaW50X2ZpbGxbImZpbGwtb3V0bGluZS1jb2xvciJdKSwiZmlsbC10cmFuc2xhdGUiOm5ldyBwaShBdC5wYWludF9maWxsWyJmaWxsLXRyYW5zbGF0ZSJdKSwiZmlsbC10cmFuc2xhdGUtYW5jaG9yIjpuZXcgcGkoQXQucGFpbnRfZmlsbFsiZmlsbC10cmFuc2xhdGUtYW5jaG9yIl0pLCJmaWxsLXBhdHRlcm4iOm5ldyBnaShBdC5wYWludF9maWxsWyJmaWxsLXBhdHRlcm4iXSl9KSxsYXlvdXQ6bnN9LGFzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxpcyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSxyKXt0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZS5jYWxsKHRoaXMsZSxyKTt2YXIgbj10aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtb3V0bGluZS1jb2xvciJdOyJjb25zdGFudCI9PT1uLnZhbHVlLmtpbmQmJnZvaWQgMD09PW4udmFsdWUudmFsdWUmJih0aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtb3V0bGluZS1jb2xvciJdPXRoaXMucGFpbnQuX3ZhbHVlc1siZmlsbC1jb2xvciJdKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcnModCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIEphKHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXtyZXR1cm4gamEoS2EodCx0aGlzLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUtYW5jaG9yIiksYS5hbmdsZSxvKSxuKX0sZS5wcm90b3R5cGUuaXNUaWxlQ2xpcHBlZD1mdW5jdGlvbigpe3JldHVybiEwfSxlfSh4aSksb3M9VGkoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfbm9ybWFsX2VkIixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxzcz1scztmdW5jdGlvbiBscyh0LGUscixuLGkpe3RoaXMucHJvcGVydGllcz17fSx0aGlzLmV4dGVudD1yLHRoaXMudHlwZT0wLHRoaXMuX3BiZj10LHRoaXMuX2dlb21ldHJ5PS0xLHRoaXMuX2tleXM9bix0aGlzLl92YWx1ZXM9aSx0LnJlYWRGaWVsZHMoY3MsdGhpcyxlKX1mdW5jdGlvbiBjcyh0LGUscil7MT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PXQ/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPWUuX2tleXNbdC5yZWFkVmFyaW50KCldLGk9ZS5fdmFsdWVzW3QucmVhZFZhcmludCgpXTtlLnByb3BlcnRpZXNbbl09aX19KHIsZSk6Mz09dD9lLnR5cGU9ci5yZWFkVmFyaW50KCk6ND09dCYmKGUuX2dlb21ldHJ5PXIucG9zKX1mdW5jdGlvbiB1cyh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKW4rPSgocj10W29dKS54LShlPXRbaV0pLngpKihlLnkrci55KTtyZXR1cm4gbn1scy50eXBlcz1bIlVua25vd24iLCJQb2ludCIsIkxpbmVTdHJpbmciLCJQb2x5Z29uIl0sbHMucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGUscj10LnJlYWRWYXJpbnQoKSt0LnBvcyxuPTEsYT0wLG89MCxzPTAsbD1bXTt0LnBvczxyOyl7aWYoYTw9MCl7dmFyIGM9dC5yZWFkVmFyaW50KCk7bj03JmMsYT1jPj4zfWlmKGEtLSwxPT09bnx8Mj09PW4pbys9dC5yZWFkU1ZhcmludCgpLHMrPXQucmVhZFNWYXJpbnQoKSwxPT09biYmKGUmJmwucHVzaChlKSxlPVtdKSxlLnB1c2gobmV3IGkobyxzKSk7ZWxzZXtpZig3IT09bil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY29tbWFuZCAiK24pO2UmJmUucHVzaChlWzBdLmNsb25lKCkpfX1yZXR1cm4gZSYmbC5wdXNoKGUpLGx9LGxzLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZT10LnJlYWRWYXJpbnQoKSt0LnBvcyxyPTEsbj0wLGk9MCxhPTAsbz0xLzAscz0tMS8wLGw9MS8wLGM9LTEvMDt0LnBvczxlOyl7aWYobjw9MCl7dmFyIHU9dC5yZWFkVmFyaW50KCk7cj03JnUsbj11Pj4zfWlmKG4tLSwxPT09cnx8Mj09PXIpKGkrPXQucmVhZFNWYXJpbnQoKSk8byYmKG89aSksaT5zJiYocz1pKSwoYSs9dC5yZWFkU1ZhcmludCgpKTxsJiYobD1hKSxhPmMmJihjPWEpO2Vsc2UgaWYoNyE9PXIpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGNvbW1hbmQgIityKX1yZXR1cm5bbyxsLHMsY119LGxzLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT10aGlzLmV4dGVudCpNYXRoLnBvdygyLHIpLG89dGhpcy5leHRlbnQqdCxzPXRoaXMuZXh0ZW50KmUsbD10aGlzLmxvYWRHZW9tZXRyeSgpLGM9bHMudHlwZXNbdGhpcy50eXBlXTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO3RbZV09WzM2MCooci54K28pL2EtMTgwLDM2MC9NYXRoLlBJKk1hdGguYXRhbihNYXRoLmV4cCgoMTgwLTM2MCooci55K3MpL2EpKk1hdGguUEkvMTgwKSktOTBdfX1zd2l0Y2godGhpcy50eXBlKXtjYXNlIDE6dmFyIGY9W107Zm9yKG49MDtuPGwubGVuZ3RoO24rKylmW25dPWxbbl1bMF07dShsPWYpO2JyZWFrO2Nhc2UgMjpmb3Iobj0wO248bC5sZW5ndGg7bisrKXUobFtuXSk7YnJlYWs7Y2FzZSAzOmZvcihsPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8PTEpcmV0dXJuW3RdO2Zvcih2YXIgcixuLGk9W10sYT0wO2E8ZTthKyspe3ZhciBvPXVzKHRbYV0pOzAhPT1vJiYodm9pZCAwPT09biYmKG49bzwwKSxuPT09bzwwPyhyJiZpLnB1c2gocikscj1bdFthXV0pOnIucHVzaCh0W2FdKSl9cmV0dXJuIHImJmkucHVzaChyKSxpfShsKSxuPTA7bjxsLmxlbmd0aDtuKyspZm9yKGk9MDtpPGxbbl0ubGVuZ3RoO2krKyl1KGxbbl1baV0pfTE9PT1sLmxlbmd0aD9sPWxbMF06Yz0iTXVsdGkiK2M7dmFyIGg9e3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOmMsY29vcmRpbmF0ZXM6bH0scHJvcGVydGllczp0aGlzLnByb3BlcnRpZXN9O3JldHVybiJpZCJpbiB0aGlzJiYoaC5pZD10aGlzLmlkKSxofTt2YXIgZnM9aHM7ZnVuY3Rpb24gaHModCxlKXt0aGlzLnZlcnNpb249MSx0aGlzLm5hbWU9bnVsbCx0aGlzLmV4dGVudD00MDk2LHRoaXMubGVuZ3RoPTAsdGhpcy5fcGJmPXQsdGhpcy5fa2V5cz1bXSx0aGlzLl92YWx1ZXM9W10sdGhpcy5fZmVhdHVyZXM9W10sdC5yZWFkRmllbGRzKHBzLHRoaXMsZSksdGhpcy5sZW5ndGg9dGhpcy5fZmVhdHVyZXMubGVuZ3RofWZ1bmN0aW9uIHBzKHQsZSxyKXsxNT09PXQ/ZS52ZXJzaW9uPXIucmVhZFZhcmludCgpOjE9PT10P2UubmFtZT1yLnJlYWRTdHJpbmcoKTo1PT09dD9lLmV4dGVudD1yLnJlYWRWYXJpbnQoKToyPT09dD9lLl9mZWF0dXJlcy5wdXNoKHIucG9zKTozPT09dD9lLl9rZXlzLnB1c2goci5yZWFkU3RyaW5nKCkpOjQ9PT10JiZlLl92YWx1ZXMucHVzaChmdW5jdGlvbih0KXtmb3IodmFyIGU9bnVsbCxyPXQucmVhZFZhcmludCgpK3QucG9zO3QucG9zPHI7KXt2YXIgbj10LnJlYWRWYXJpbnQoKT4+MztlPTE9PT1uP3QucmVhZFN0cmluZygpOjI9PT1uP3QucmVhZEZsb2F0KCk6Mz09PW4/dC5yZWFkRG91YmxlKCk6ND09PW4/dC5yZWFkVmFyaW50NjQoKTo1PT09bj90LnJlYWRWYXJpbnQoKTo2PT09bj90LnJlYWRTVmFyaW50KCk6Nz09PW4/dC5yZWFkQm9vbGVhbigpOm51bGx9cmV0dXJuIGV9KHIpKX1mdW5jdGlvbiBkcyh0LGUscil7aWYoMz09PXQpe3ZhciBuPW5ldyBmcyhyLHIucmVhZFZhcmludCgpK3IucG9zKTtuLmxlbmd0aCYmKGVbbi5uYW1lXT1uKX19aHMucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7aWYodDwwfHx0Pj10aGlzLl9mZWF0dXJlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJmZWF0dXJlIGluZGV4IG91dCBvZiBib3VuZHMiKTt0aGlzLl9wYmYucG9zPXRoaXMuX2ZlYXR1cmVzW3RdO3ZhciBlPXRoaXMuX3BiZi5yZWFkVmFyaW50KCkrdGhpcy5fcGJmLnBvcztyZXR1cm4gbmV3IHNzKHRoaXMuX3BiZixlLHRoaXMuZXh0ZW50LHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzKX07dmFyIGdzPXtWZWN0b3JUaWxlOmZ1bmN0aW9uKHQsZSl7dGhpcy5sYXllcnM9dC5yZWFkRmllbGRzKGRzLHt9LGUpfSxWZWN0b3JUaWxlRmVhdHVyZTpzcyxWZWN0b3JUaWxlTGF5ZXI6ZnN9LG1zPWdzLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLHZzPU1hdGgucG93KDIsMTMpO2Z1bmN0aW9uIHlzKHQsZSxyLG4saSxhLG8scyl7dC5lbXBsYWNlQmFjayhlLHIsMipNYXRoLmZsb29yKG4qdnMpK28saSp2cyoyLGEqdnMqMixNYXRoLnJvdW5kKHMpKX12YXIgeHM9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgU2ksdGhpcy5pbmRleEFycmF5PW5ldyBGaSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgSWEob3MsdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBpYSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHM9dGhpcy5sYXllcnMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pc1N0YXRlRGVwZW5kZW50KCl9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKX07ZnVuY3Rpb24gYnModCxlKXtyZXR1cm4gdC54PT09ZS54JiYodC54PDB8fHQueD44MTkyKXx8dC55PT09ZS55JiYodC55PDB8fHQueT44MTkyKX14cy5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZmVhdHVyZXM9W10sdGhpcy5oYXNQYXR0ZXJuPXRzKCJmaWxsLWV4dHJ1c2lvbiIsdGhpcy5sYXllcnMsZSk7Zm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEuZmVhdHVyZSxzPWEuaWQsbD1hLmluZGV4LGM9YS5zb3VyY2VMYXllckluZGV4LHU9dGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIubmVlZEdlb21ldHJ5LGY9e3R5cGU6by50eXBlLGlkOnMscHJvcGVydGllczpvLnByb3BlcnRpZXMsZ2VvbWV0cnk6dT9EYShvKTpbXX07aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKG5ldyBpaSh0aGlzLnpvb20pLGYscikpe3ZhciBoPXtpZDpzLHNvdXJjZUxheWVySW5kZXg6YyxpbmRleDpsLGdlb21ldHJ5OnU/Zi5nZW9tZXRyeTpEYShvKSxwcm9wZXJ0aWVzOm8ucHJvcGVydGllcyx0eXBlOm8udHlwZSxwYXR0ZXJuczp7fX07dm9pZCAwIT09by5pZCYmKGguaWQ9by5pZCksdGhpcy5oYXNQYXR0ZXJuP3RoaXMuZmVhdHVyZXMucHVzaChlcygiZmlsbC1leHRydXNpb24iLHRoaXMubGF5ZXJzLGgsdGhpcy56b29tLGUpKTp0aGlzLmFkZEZlYXR1cmUoaCxoLmdlb21ldHJ5LGwscix7fSksZS5mZWF0dXJlSW5kZXguaW5zZXJ0KG8saC5nZW9tZXRyeSxsLGMsdGhpcy5pbmRleCwhMCl9fX0seHMucHJvdG90eXBlLmFkZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPXRoaXMuZmVhdHVyZXM7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3RoaXMuYWRkRmVhdHVyZShhLGEuZ2VvbWV0cnksYS5pbmRleCxlLHIpfX0seHMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJnRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLHIpfSx4cy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LHhzLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSx4cy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudXBsb2FkZWR8fCh0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LG9zKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpLHRoaXMudXBsb2FkZWQ9ITB9LHhzLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0seHMucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9MCxvPVFvKGUsNTAwKTthPG8ubGVuZ3RoO2ErPTEpe2Zvcih2YXIgcz1vW2FdLGw9MCxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSlsKz11W2NdLmxlbmd0aDtmb3IodmFyIGY9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSxoPTAscD1zO2g8cC5sZW5ndGg7aCs9MSl7dmFyIGQ9cFtoXTtpZigwIT09ZC5sZW5ndGgmJiEoKFA9ZCkuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng8MH0pKXx8UC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueD44MTkyfSkpfHxQLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC55PDB9KSl8fFAuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnk+ODE5Mn0pKSkpZm9yKHZhciBnPTAsbT0wO208ZC5sZW5ndGg7bSsrKXt2YXIgdj1kW21dO2lmKG0+PTEpe3ZhciB5PWRbbS0xXTtpZighYnModix5KSl7Zi52ZXJ0ZXhMZW5ndGgrND5pYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmKGY9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSk7dmFyIHg9di5zdWIoeSkuX3BlcnAoKS5fdW5pdCgpLGI9eS5kaXN0KHYpO2crYj4zMjc2OCYmKGc9MCkseXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx2Lngsdi55LHgueCx4LnksMCwwLGcpLHlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdi54LHYueSx4LngseC55LDAsMSxnKSx5cyh0aGlzLmxheW91dFZlcnRleEFycmF5LHkueCx5LnkseC54LHgueSwwLDAsZys9YikseXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx5LngseS55LHgueCx4LnksMCwxLGcpO3ZhciBfPWYudmVydGV4TGVuZ3RoO3RoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhfLF8rMixfKzEpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhfKzEsXysyLF8rMyksZi52ZXJ0ZXhMZW5ndGgrPTQsZi5wcmltaXRpdmVMZW5ndGgrPTJ9fX19aWYoZi52ZXJ0ZXhMZW5ndGgrbD5pYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmKGY9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChsLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSksIlBvbHlnb24iPT09bXNbdC50eXBlXSl7Zm9yKHZhciB3PVtdLFQ9W10saz1mLnZlcnRleExlbmd0aCxNPTAsQT1zO008QS5sZW5ndGg7TSs9MSl7dmFyIFM9QVtNXTtpZigwIT09Uy5sZW5ndGgpe1MhPT1zWzBdJiZULnB1c2gody5sZW5ndGgvMik7Zm9yKHZhciBFPTA7RTxTLmxlbmd0aDtFKyspe3ZhciBDPVNbRV07eXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxDLngsQy55LDAsMCwxLDEsMCksdy5wdXNoKEMueCksdy5wdXNoKEMueSl9fX1mb3IodmFyIEw9X28odyxUKSxJPTA7STxMLmxlbmd0aDtJKz0zKXRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhrK0xbSV0saytMW0krMl0saytMW0krMV0pO2YucHJpbWl0aXZlTGVuZ3RoKz1MLmxlbmd0aC8zLGYudmVydGV4TGVuZ3RoKz1sfX12YXIgUDt0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQscixpLG4pfSxEbigiRmlsbEV4dHJ1c2lvbkJ1Y2tldCIseHMse29taXQ6WyJsYXllcnMiLCJmZWF0dXJlcyJdfSk7dmFyIF9zPXtwYWludDpuZXcgeWkoeyJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5IjpuZXcgcGkoQXRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiXSksImZpbGwtZXh0cnVzaW9uLWNvbG9yIjpuZXcgZGkoQXRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLWNvbG9yIl0pLCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiOm5ldyBwaShBdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIl0pLCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIjpuZXcgcGkoQXRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiXSksImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOm5ldyBnaShBdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tcGF0dGVybiJdKSwiZmlsbC1leHRydXNpb24taGVpZ2h0IjpuZXcgZGkoQXRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLWhlaWdodCJdKSwiZmlsbC1leHRydXNpb24tYmFzZSI6bmV3IGRpKEF0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1iYXNlIl0pLCJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCI6bmV3IHBpKEF0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCJdKX0pfSx3cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsX3MpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHhzKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBKYSh0aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIikpfSxlLnByb3RvdHlwZS5pczNEPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixhLG8scyxsKXt2YXIgYz1LYSh0LHRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciIpLG8uYW5nbGUscyksdT10aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24taGVpZ2h0IikuZXZhbHVhdGUoZSxyKSxmPXRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi1iYXNlIikuZXZhbHVhdGUoZSxyKSxoPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1bXSxvPTAscz10O288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPVtsLngsbC55LDAsMV07YW8oYyxjLGUpLGEucHVzaChuZXcgaShjWzBdL2NbM10sY1sxXS9jWzNdKSl9cmV0dXJuIGF9KGMsbCkscD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9W10sbz1bXSxzPW5bOF0qZSxsPW5bOV0qZSxjPW5bMTBdKmUsdT1uWzExXSplLGY9bls4XSpyLGg9bls5XSpyLHA9blsxMF0qcixkPW5bMTFdKnIsZz0wLG09dDtnPG0ubGVuZ3RoO2crPTEpe2Zvcih2YXIgdj1bXSx5PVtdLHg9MCxiPW1bZ107eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9Xy54LFQ9Xy55LGs9blswXSp3K25bNF0qVCtuWzEyXSxNPW5bMV0qdytuWzVdKlQrblsxM10sQT1uWzJdKncrbls2XSpUK25bMTRdLFM9blszXSp3K25bN10qVCtuWzE1XSxFPUErYyxDPVMrdSxMPWsrZixJPU0raCxQPUErcCx6PVMrZCxPPW5ldyBpKChrK3MpL0MsKE0rbCkvQyk7Ty56PUUvQyx2LnB1c2goTyk7dmFyIEQ9bmV3IGkoTC96LEkveik7RC56PVAveix5LnB1c2goRCl9YS5wdXNoKHYpLG8ucHVzaCh5KX1yZXR1cm5bYSxvXX0obixmLHUsbCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0xLzA7amEocixlKSYmKG49a3MocixlWzBdKSk7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspZm9yKHZhciBhPWVbaV0sbz10W2ldLHM9MDtzPGEubGVuZ3RoLTE7cysrKXt2YXIgbD1hW3NdLGM9W2wsYVtzKzFdLG9bcysxXSxvW3NdLGxdO0JhKHIsYykmJihuPU1hdGgubWluKG4sa3MocixjKSkpfXJldHVybiBuIT09MS8wJiZufShwWzBdLHBbMV0saCl9LGV9KHhpKTtmdW5jdGlvbiBUcyh0LGUpe3JldHVybiB0LngqZS54K3QueSplLnl9ZnVuY3Rpb24ga3ModCxlKXtpZigxPT09dC5sZW5ndGgpe2Zvcih2YXIgcixuPTAsaT1lW24rK107IXJ8fGkuZXF1YWxzKHIpOylpZighKHI9ZVtuKytdKSlyZXR1cm4gMS8wO2Zvcig7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl0sbz10WzBdLHM9ci5zdWIoaSksbD1hLnN1YihpKSxjPW8uc3ViKGkpLHU9VHMocyxzKSxmPVRzKHMsbCksaD1UcyhsLGwpLHA9VHMoYyxzKSxkPVRzKGMsbCksZz11KmgtZipmLG09KGgqcC1mKmQpL2csdj0odSpkLWYqcCkvZyx5PWkueiooMS1tLXYpK3IueiptK2Eueip2O2lmKGlzRmluaXRlKHkpKXJldHVybiB5fXJldHVybiAxLzB9Zm9yKHZhciB4PTEvMCxiPTAsXz1lO2I8Xy5sZW5ndGg7Yis9MSl4PU1hdGgubWluKHgsX1tiXS56KTtyZXR1cm4geH12YXIgTXM9VGkoW3tuYW1lOiJhX3Bvc19ub3JtYWwiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50OCJ9XSw0KS5tZW1iZXJzLEFzPWdzLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLFNzPU1hdGguY29zKE1hdGguUEkvMTgwKjM3LjUpLEVzPU1hdGgucG93KDIsMTQpLy41LENzPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5oYXNQYXR0ZXJuPSExLHRoaXMucGF0dGVybkZlYXR1cmVzPVtdLHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IEVpLHRoaXMuaW5kZXhBcnJheT1uZXcgRmksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IElhKE1zLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgaWEsdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzPXRoaXMubGF5ZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSl9O0NzLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5oYXNQYXR0ZXJuPXRzKCJsaW5lIix0aGlzLmxheWVycyxlKTtmb3IodmFyIG49dGhpcy5sYXllcnNbMF0ubGF5b3V0LmdldCgibGluZS1zb3J0LWtleSIpLGk9W10sYT0wLG89dDthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1zLmZlYXR1cmUsYz1zLmlkLHU9cy5pbmRleCxmPXMuc291cmNlTGF5ZXJJbmRleCxoPXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeSxwPXt0eXBlOmwudHlwZSxpZDpjLHByb3BlcnRpZXM6bC5wcm9wZXJ0aWVzLGdlb21ldHJ5Omg/RGEobCk6W119O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihuZXcgaWkodGhpcy56b29tKSxwLHIpKXtofHwocC5nZW9tZXRyeT1EYShsKSk7dmFyIGQ9bj9uLmV2YWx1YXRlKHAse30scik6dm9pZCAwO2kucHVzaCh7aWQ6Yyxwcm9wZXJ0aWVzOmwucHJvcGVydGllcyx0eXBlOmwudHlwZSxzb3VyY2VMYXllckluZGV4OmYsaW5kZXg6dSxnZW9tZXRyeTpwLmdlb21ldHJ5LHBhdHRlcm5zOnt9LHNvcnRLZXk6ZH0pfX1uJiZpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSk7Zm9yKHZhciBnPTAsbT1pO2c8bS5sZW5ndGg7Zys9MSl7dmFyIHY9bVtnXSx5PXYuZ2VvbWV0cnkseD12LmluZGV4LGI9di5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMuaGFzUGF0dGVybil7dmFyIF89ZXMoImxpbmUiLHRoaXMubGF5ZXJzLHYsdGhpcy56b29tLGUpO3RoaXMucGF0dGVybkZlYXR1cmVzLnB1c2goXyl9ZWxzZSB0aGlzLmFkZEZlYXR1cmUodix5LHgscix7fSk7ZS5mZWF0dXJlSW5kZXguaW5zZXJ0KHRbeF0uZmVhdHVyZSx5LHgsYix0aGlzLmluZGV4KX19LENzLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5zdGF0ZURlcGVuZGVudExheWVycyxyKX0sQ3MucHJvdG90eXBlLmFkZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPXRoaXMucGF0dGVybkZlYXR1cmVzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0aGlzLmFkZEZlYXR1cmUoYSxhLmdlb21ldHJ5LGEuaW5kZXgsZSxyKX19LENzLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sQ3MucHJvdG90eXBlLnVwbG9hZFBlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy51cGxvYWRlZHx8dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR9LENzLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy51cGxvYWRlZHx8KHRoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksTXMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy51cGxvYWRlZD0hMH0sQ3MucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCkpfSxDcy5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT10aGlzLmxheWVyc1swXS5sYXlvdXQsbz1hLmdldCgibGluZS1qb2luIikuZXZhbHVhdGUodCx7fSkscz1hLmdldCgibGluZS1jYXAiKSxsPWEuZ2V0KCJsaW5lLW1pdGVyLWxpbWl0IiksYz1hLmdldCgibGluZS1yb3VuZC1saW1pdCIpLHU9MCxmPWU7dTxmLmxlbmd0aDt1Kz0xKXRoaXMuYWRkTGluZShmW3VdLHQsbyxzLGwsYyk7dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0LHIsaSxuKX0sQ3MucHJvdG90eXBlLmFkZExpbmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHRoaXMuZGlzdGFuY2U9MCx0aGlzLnNjYWxlZERpc3RhbmNlPTAsdGhpcy50b3RhbERpc3RhbmNlPTAsZS5wcm9wZXJ0aWVzJiZlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoIm1hcGJveF9jbGlwX3N0YXJ0IikmJmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgibWFwYm94X2NsaXBfZW5kIikpe3RoaXMuY2xpcFN0YXJ0PStlLnByb3BlcnRpZXMubWFwYm94X2NsaXBfc3RhcnQsdGhpcy5jbGlwRW5kPStlLnByb3BlcnRpZXMubWFwYm94X2NsaXBfZW5kO2Zvcih2YXIgbz0wO288dC5sZW5ndGgtMTtvKyspdGhpcy50b3RhbERpc3RhbmNlKz10W29dLmRpc3QodFtvKzFdKTt0aGlzLnVwZGF0ZVNjYWxlZERpc3RhbmNlKCl9Zm9yKHZhciBzPSJQb2x5Z29uIj09PUFzW2UudHlwZV0sbD10Lmxlbmd0aDtsPj0yJiZ0W2wtMV0uZXF1YWxzKHRbbC0yXSk7KWwtLTtmb3IodmFyIGM9MDtjPGwtMSYmdFtjXS5lcXVhbHModFtjKzFdKTspYysrO2lmKCEobDwocz8zOjIpKSl7ImJldmVsIj09PXImJihpPTEuMDUpO3ZhciB1LGY9dGhpcy5vdmVyc2NhbGluZzw9MTY/MTIyODgwLyg1MTIqdGhpcy5vdmVyc2NhbGluZyk6MCxoPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoMTAqbCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSkscD12b2lkIDAsZD12b2lkIDAsZz12b2lkIDAsbT12b2lkIDA7dGhpcy5lMT10aGlzLmUyPS0xLHMmJihtPXRbY10uc3ViKHU9dFtsLTJdKS5fdW5pdCgpLl9wZXJwKCkpO2Zvcih2YXIgdj1jO3Y8bDt2KyspaWYoIShkPXY9PT1sLTE/cz90W2MrMV06dm9pZCAwOnRbdisxXSl8fCF0W3ZdLmVxdWFscyhkKSl7bSYmKGc9bSksdSYmKHA9dSksdT10W3ZdLG09ZD9kLnN1Yih1KS5fdW5pdCgpLl9wZXJwKCk6Zzt2YXIgeT0oZz1nfHxtKS5hZGQobSk7MD09PXkueCYmMD09PXkueXx8eS5fdW5pdCgpO3ZhciB4PWcueCptLngrZy55Km0ueSxiPXkueCptLngreS55Km0ueSxfPTAhPT1iPzEvYjoxLzAsdz0yKk1hdGguc3FydCgyLTIqYiksVD1iPFNzJiZwJiZkLGs9Zy54Km0ueS1nLnkqbS54PjA7aWYoVCYmdj5jKXt2YXIgTT11LmRpc3QocCk7aWYoTT4yKmYpe3ZhciBBPXUuc3ViKHUuc3ViKHApLl9tdWx0KGYvTSkuX3JvdW5kKCkpO3RoaXMudXBkYXRlRGlzdGFuY2UocCxBKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoQSxnLDAsMCxoKSxwPUF9fXZhciBTPXAmJmQsRT1TP3I6cz8iYnV0dCI6bjtpZihTJiYicm91bmQiPT09RSYmKF88YT9FPSJtaXRlciI6Xzw9MiYmKEU9ImZha2Vyb3VuZCIpKSwibWl0ZXIiPT09RSYmXz5pJiYoRT0iYmV2ZWwiKSwiYmV2ZWwiPT09RSYmKF8+MiYmKEU9ImZsaXBiZXZlbCIpLF88aSYmKEU9Im1pdGVyIikpLHAmJnRoaXMudXBkYXRlRGlzdGFuY2UocCx1KSwibWl0ZXIiPT09RSl5Ll9tdWx0KF8pLHRoaXMuYWRkQ3VycmVudFZlcnRleCh1LHksMCwwLGgpO2Vsc2UgaWYoImZsaXBiZXZlbCI9PT1FKXtpZihfPjEwMCl5PW0ubXVsdCgtMSk7ZWxzZXt2YXIgQz1fKmcuYWRkKG0pLm1hZygpL2cuc3ViKG0pLm1hZygpO3kuX3BlcnAoKS5fbXVsdChDKihrPy0xOjEpKX10aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSx5LDAsMCxoKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSx5Lm11bHQoLTEpLDAsMCxoKX1lbHNlIGlmKCJiZXZlbCI9PT1FfHwiZmFrZXJvdW5kIj09PUUpe3ZhciBMPS1NYXRoLnNxcnQoXypfLTEpLEk9az9MOjAsUD1rPzA6TDtpZihwJiZ0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSxnLEksUCxoKSwiZmFrZXJvdW5kIj09PUUpZm9yKHZhciB6PU1hdGgucm91bmQoMTgwKncvTWF0aC5QSS8yMCksTz0xO088ejtPKyspe3ZhciBEPU8vejtpZiguNSE9PUQpe3ZhciBSPUQtLjU7RCs9RCpSKihELTEpKigoMS4wOTA0K3gqKHgqKDMuNTU2NDUtMS40MzUxOSp4KS0zLjI0NTIpKSpSKlIrKC44NDgwMTMreCooLjIxNTYzOCp4LTEuMDYwMjEpKSl9dmFyIEY9bS5zdWIoZykuX211bHQoRCkuX2FkZChnKS5fdW5pdCgpLl9tdWx0KGs/LTE6MSk7dGhpcy5hZGRIYWxmVmVydGV4KHUsRi54LEYueSwhMSxrLDAsaCl9ZCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KHUsbSwtSSwtUCxoKX1lbHNlIGlmKCJidXR0Ij09PUUpdGhpcy5hZGRDdXJyZW50VmVydGV4KHUseSwwLDAsaCk7ZWxzZSBpZigic3F1YXJlIj09PUUpe3ZhciBCPXA/MTotMTt0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSx5LEIsQixoKX1lbHNlInJvdW5kIj09PUUmJihwJiYodGhpcy5hZGRDdXJyZW50VmVydGV4KHUsZywwLDAsaCksdGhpcy5hZGRDdXJyZW50VmVydGV4KHUsZywxLDEsaCwhMCkpLGQmJih0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSxtLC0xLC0xLGgsITApLHRoaXMuYWRkQ3VycmVudFZlcnRleCh1LG0sMCwwLGgpKSk7aWYoVCYmdjxsLTEpe3ZhciBOPXUuZGlzdChkKTtpZihOPjIqZil7dmFyIGo9dS5hZGQoZC5zdWIodSkuX211bHQoZi9OKS5fcm91bmQoKSk7dGhpcy51cGRhdGVEaXN0YW5jZSh1LGopLHRoaXMuYWRkQ3VycmVudFZlcnRleChqLG0sMCwwLGgpLHU9an19fX19LENzLnByb3RvdHlwZS5hZGRDdXJyZW50VmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT0hMSk7dmFyIG89ZS55Km4tZS54LHM9LWUueS1lLngqbjt0aGlzLmFkZEhhbGZWZXJ0ZXgodCxlLngrZS55KnIsZS55LWUueCpyLGEsITEscixpKSx0aGlzLmFkZEhhbGZWZXJ0ZXgodCxvLHMsYSwhMCwtbixpKSx0aGlzLmRpc3RhbmNlPkVzLzImJjA9PT10aGlzLnRvdGFsRGlzdGFuY2UmJih0aGlzLmRpc3RhbmNlPTAsdGhpcy5hZGRDdXJyZW50VmVydGV4KHQsZSxyLG4saSxhKSl9LENzLnByb3RvdHlwZS5hZGRIYWxmVmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPS41KnRoaXMuc2NhbGVkRGlzdGFuY2U7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjaygodC54PDwxKSsobj8xOjApLCh0Lnk8PDEpKyhpPzE6MCksTWF0aC5yb3VuZCg2MyplKSsxMjgsTWF0aC5yb3VuZCg2MypyKSsxMjgsMSsoMD09PWE/MDphPDA/LTE6MSl8KDYzJnMpPDwyLHM+PjYpO3ZhciBsPW8udmVydGV4TGVuZ3RoKys7dGhpcy5lMT49MCYmdGhpcy5lMj49MCYmKHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsbCksby5wcmltaXRpdmVMZW5ndGgrKyksaT90aGlzLmUyPWw6dGhpcy5lMT1sfSxDcy5wcm90b3R5cGUudXBkYXRlU2NhbGVkRGlzdGFuY2U9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlZERpc3RhbmNlPXRoaXMudG90YWxEaXN0YW5jZT4wPyh0aGlzLmNsaXBTdGFydCsodGhpcy5jbGlwRW5kLXRoaXMuY2xpcFN0YXJ0KSp0aGlzLmRpc3RhbmNlL3RoaXMudG90YWxEaXN0YW5jZSkqKEVzLTEpOnRoaXMuZGlzdGFuY2V9LENzLnByb3RvdHlwZS51cGRhdGVEaXN0YW5jZT1mdW5jdGlvbih0LGUpe3RoaXMuZGlzdGFuY2UrPXQuZGlzdChlKSx0aGlzLnVwZGF0ZVNjYWxlZERpc3RhbmNlKCl9LERuKCJMaW5lQnVja2V0IixDcyx7b21pdDpbImxheWVycyIsInBhdHRlcm5GZWF0dXJlcyJdfSk7dmFyIExzPW5ldyB5aSh7ImxpbmUtY2FwIjpuZXcgcGkoQXQubGF5b3V0X2xpbmVbImxpbmUtY2FwIl0pLCJsaW5lLWpvaW4iOm5ldyBkaShBdC5sYXlvdXRfbGluZVsibGluZS1qb2luIl0pLCJsaW5lLW1pdGVyLWxpbWl0IjpuZXcgcGkoQXQubGF5b3V0X2xpbmVbImxpbmUtbWl0ZXItbGltaXQiXSksImxpbmUtcm91bmQtbGltaXQiOm5ldyBwaShBdC5sYXlvdXRfbGluZVsibGluZS1yb3VuZC1saW1pdCJdKSwibGluZS1zb3J0LWtleSI6bmV3IGRpKEF0LmxheW91dF9saW5lWyJsaW5lLXNvcnQta2V5Il0pfSksSXM9e3BhaW50Om5ldyB5aSh7ImxpbmUtb3BhY2l0eSI6bmV3IGRpKEF0LnBhaW50X2xpbmVbImxpbmUtb3BhY2l0eSJdKSwibGluZS1jb2xvciI6bmV3IGRpKEF0LnBhaW50X2xpbmVbImxpbmUtY29sb3IiXSksImxpbmUtdHJhbnNsYXRlIjpuZXcgcGkoQXQucGFpbnRfbGluZVsibGluZS10cmFuc2xhdGUiXSksImxpbmUtdHJhbnNsYXRlLWFuY2hvciI6bmV3IHBpKEF0LnBhaW50X2xpbmVbImxpbmUtdHJhbnNsYXRlLWFuY2hvciJdKSwibGluZS13aWR0aCI6bmV3IGRpKEF0LnBhaW50X2xpbmVbImxpbmUtd2lkdGgiXSksImxpbmUtZ2FwLXdpZHRoIjpuZXcgZGkoQXQucGFpbnRfbGluZVsibGluZS1nYXAtd2lkdGgiXSksImxpbmUtb2Zmc2V0IjpuZXcgZGkoQXQucGFpbnRfbGluZVsibGluZS1vZmZzZXQiXSksImxpbmUtYmx1ciI6bmV3IGRpKEF0LnBhaW50X2xpbmVbImxpbmUtYmx1ciJdKSwibGluZS1kYXNoYXJyYXkiOm5ldyBtaShBdC5wYWludF9saW5lWyJsaW5lLWRhc2hhcnJheSJdKSwibGluZS1wYXR0ZXJuIjpuZXcgZ2koQXQucGFpbnRfbGluZVsibGluZS1wYXR0ZXJuIl0pLCJsaW5lLWdyYWRpZW50IjpuZXcgdmkoQXQucGFpbnRfbGluZVsibGluZS1ncmFkaWVudCJdKX0pLGxheW91dDpMc30sUHM9bmV3KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHI9bmV3IGlpKE1hdGguZmxvb3Ioci56b29tKSx7bm93OnIubm93LGZhZGVEdXJhdGlvbjpyLmZhZGVEdXJhdGlvbix6b29tSGlzdG9yeTpyLnpvb21IaXN0b3J5LHRyYW5zaXRpb246ci50cmFuc2l0aW9ufSksdC5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZS5jYWxsKHRoaXMsZSxyKX0sZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuIHI9dSh7fSxyLHt6b29tOk1hdGguZmxvb3Ioci56b29tKX0pLHQucHJvdG90eXBlLmV2YWx1YXRlLmNhbGwodGhpcyxlLHIsbixpKX0sZX0oZGkpKShJcy5wYWludC5wcm9wZXJ0aWVzWyJsaW5lLXdpZHRoIl0uc3BlY2lmaWNhdGlvbik7UHMudXNlSW50ZWdlclpvb209ITA7dmFyIHpzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxJcyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlPWZ1bmN0aW9uKHQpeyJsaW5lLWdyYWRpZW50Ij09PXQmJnRoaXMuX3VwZGF0ZUdyYWRpZW50KCl9LGUucHJvdG90eXBlLl91cGRhdGVHcmFkaWVudD1mdW5jdGlvbigpe3RoaXMuZ3JhZGllbnQ9bW8odGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWyJsaW5lLWdyYWRpZW50Il0udmFsdWUuZXhwcmVzc2lvbiwibGluZVByb2dyZXNzIiksdGhpcy5ncmFkaWVudFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSxyKXt0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZS5jYWxsKHRoaXMsZSxyKSx0aGlzLnBhaW50Ll92YWx1ZXNbImxpbmUtZmxvb3J3aWR0aCJdPVBzLnBvc3NpYmx5RXZhbHVhdGUodGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Ll92YWx1ZXNbImxpbmUtd2lkdGgiXS52YWx1ZSxlKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ3ModCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj1PcyhaYSgibGluZS13aWR0aCIsdGhpcyxlKSxaYSgibGluZS1nYXAtd2lkdGgiLHRoaXMsZSkpLG49WmEoImxpbmUtb2Zmc2V0Iix0aGlzLGUpO3JldHVybiByLzIrTWF0aC5hYnMobikrSmEodGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4sYSxvLHMpe3ZhciBsPUthKHQsdGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlIiksdGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlLWFuY2hvciIpLG8uYW5nbGUscyksYz1zLzIqT3ModGhpcy5wYWludC5nZXQoImxpbmUtd2lkdGgiKS5ldmFsdWF0ZShlLHIpLHRoaXMucGFpbnQuZ2V0KCJsaW5lLWdhcC13aWR0aCIpLmV2YWx1YXRlKGUscikpLHU9dGhpcy5wYWludC5nZXQoImxpbmUtb2Zmc2V0IikuZXZhbHVhdGUoZSxyKTtyZXR1cm4gdSYmKG49ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1uZXcgaSgwLDApLGE9MDthPHQubGVuZ3RoO2ErKyl7Zm9yKHZhciBvPXRbYV0scz1bXSxsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciBjPW9bbF0sdT1vW2wrMV0sZj0wPT09bD9uOmMuc3ViKG9bbC0xXSkuX3VuaXQoKS5fcGVycCgpLGg9bD09PW8ubGVuZ3RoLTE/bjp1LnN1YihjKS5fdW5pdCgpLl9wZXJwKCkscD1mLl9hZGQoaCkuX3VuaXQoKTtwLl9tdWx0KDEvKHAueCpoLngrcC55KmgueSkpLHMucHVzaChwLl9tdWx0KGUpLl9hZGQoYykpfXIucHVzaChzKX1yZXR1cm4gcn0obix1KnMpKSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aWYodC5sZW5ndGg+PTMpZm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspaWYoV2EodCxpW2FdKSlyZXR1cm4hMDtpZihVYSh0LGkscikpcmV0dXJuITB9cmV0dXJuITF9KGwsbixjKX0sZS5wcm90b3R5cGUuaXNUaWxlQ2xpcHBlZD1mdW5jdGlvbigpe3JldHVybiEwfSxlfSh4aSk7ZnVuY3Rpb24gT3ModCxlKXtyZXR1cm4gZT4wP2UrMip0OnR9dmFyIERzPVRpKFt7bmFtZToiYV9wb3Nfb2Zmc2V0Iixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifSx7bmFtZToiYV9kYXRhIixjb21wb25lbnRzOjQsdHlwZToiVWludDE2In0se25hbWU6ImFfcGl4ZWxvZmZzZXQiLGNvbXBvbmVudHM6NCx0eXBlOiJJbnQxNiJ9XSw0KSxScz1UaShbe25hbWU6ImFfcHJvamVjdGVkX3BvcyIsY29tcG9uZW50czozLHR5cGU6IkZsb2F0MzIifV0sNCksRnM9KFRpKFt7bmFtZToiYV9mYWRlX29wYWNpdHkiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50MzIifV0sNCksVGkoW3tuYW1lOiJhX3BsYWNlZCIsY29tcG9uZW50czoyLHR5cGU6IlVpbnQ4In0se25hbWU6ImFfc2hpZnQiLGNvbXBvbmVudHM6Mix0eXBlOiJGbG9hdDMyIn1dKSksQnM9KFRpKFt7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yUG9pbnRZIn0se3R5cGU6IkludDE2IixuYW1lOiJ4MSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieTEifSx7dHlwZToiSW50MTYiLG5hbWU6IngyIn0se3R5cGU6IkludDE2IixuYW1lOiJ5MiJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImZlYXR1cmVJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InNvdXJjZUxheWVySW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJidWNrZXRJbmRleCJ9XSksVGkoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfYW5jaG9yX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfZXh0cnVkZSIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpKSxOcz1UaShbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiRmxvYXQzMiJ9LHtuYW1lOiJhX3JhZGl1cyIsY29tcG9uZW50czoxLHR5cGU6IkZsb2F0MzIifSx7bmFtZToiYV9mbGFncyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpO2Z1bmN0aW9uIGpzKHQsZSxyKXtyZXR1cm4gdC5zZWN0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnRleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUubGF5b3V0LmdldCgidGV4dC10cmFuc2Zvcm0iKS5ldmFsdWF0ZShyLHt9KTtyZXR1cm4idXBwZXJjYXNlIj09PW4/dD10LnRvTG9jYWxlVXBwZXJDYXNlKCk6Imxvd2VyY2FzZSI9PT1uJiYodD10LnRvTG9jYWxlTG93ZXJDYXNlKCkpLG5pLmFwcGx5QXJhYmljU2hhcGluZyYmKHQ9bmkuYXBwbHlBcmFiaWNTaGFwaW5nKHQpKSx0fSh0LnRleHQsZSxyKX0pKSx0fVRpKFt7bmFtZToidHJpYW5nbGUiLGNvbXBvbmVudHM6Myx0eXBlOiJVaW50MTYifV0pLFRpKFt7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclkifSx7dHlwZToiVWludDE2IixuYW1lOiJnbHlwaFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1HbHlwaHMifSx7dHlwZToiVWludDMyIixuYW1lOiJ2ZXJ0ZXhTdGFydEluZGV4In0se3R5cGU6IlVpbnQzMiIsbmFtZToibGluZVN0YXJ0SW5kZXgifSx7dHlwZToiVWludDMyIixuYW1lOiJsaW5lTGVuZ3RoIn0se3R5cGU6IlVpbnQxNiIsbmFtZToic2VnbWVudCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Imxvd2VyU2l6ZSJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InVwcGVyU2l6ZSJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJsaW5lT2Zmc2V0WCJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJsaW5lT2Zmc2V0WSJ9LHt0eXBlOiJVaW50OCIsbmFtZToid3JpdGluZ01vZGUifSx7dHlwZToiVWludDgiLG5hbWU6InBsYWNlZE9yaWVudGF0aW9uIn0se3R5cGU6IlVpbnQ4IixuYW1lOiJoaWRkZW4ifSx7dHlwZToiVWludDMyIixuYW1lOiJjcm9zc1RpbGVJRCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYXNzb2NpYXRlZEljb25JbmRleCJ9XSksVGkoW3t0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToicmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6ImNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToibGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6InBsYWNlZEljb25TeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJrZXkifSx7dHlwZToiVWludDE2IixuYW1lOiJ0ZXh0Qm94U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InRleHRCb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJ2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Imljb25Cb3hTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiaWNvbkJveEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToidmVydGljYWxJY29uQm94U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InZlcnRpY2FsSWNvbkJveEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiZmVhdHVyZUluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1WZXJ0aWNhbEdseXBoVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1JY29uVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1WZXJ0aWNhbEljb25WZXJ0aWNlcyJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzIn0se3R5cGU6IlVpbnQzMiIsbmFtZToiY3Jvc3NUaWxlSUQifSx7dHlwZToiRmxvYXQzMiIsbmFtZToidGV4dEJveFNjYWxlIn0se3R5cGU6IkZsb2F0MzIiLGNvbXBvbmVudHM6MixuYW1lOiJ0ZXh0T2Zmc2V0In0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImNvbGxpc2lvbkNpcmNsZURpYW1ldGVyIn1dKSxUaShbe3R5cGU6IkZsb2F0MzIiLG5hbWU6Im9mZnNldFgifV0pLFRpKFt7dHlwZToiSW50MTYiLG5hbWU6IngifSx7dHlwZToiSW50MTYiLG5hbWU6InkifSx7dHlwZToiSW50MTYiLG5hbWU6InRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yIn1dKTt2YXIgVXM9eyIhIjoiXHVmZTE1IiwiIyI6Ilx1ZmYwMyIsJDoiXHVmZjA0IiwiJSI6Ilx1ZmYwNSIsIiYiOiJcdWZmMDYiLCIoIjoiXHVmZTM1IiwiKSI6Ilx1ZmUzNiIsIioiOiJcdWZmMGEiLCIrIjoiXHVmZjBiIiwiLCI6Ilx1ZmUxMCIsIi0iOiJcdWZlMzIiLCIuIjoiXHUzMGZiIiwiLyI6Ilx1ZmYwZiIsIjoiOiJcdWZlMTMiLCI7IjoiXHVmZTE0IiwiPCI6Ilx1ZmUzZiIsIj0iOiJcdWZmMWQiLCI+IjoiXHVmZTQwIiwiPyI6Ilx1ZmUxNiIsIkAiOiJcdWZmMjAiLCJbIjoiXHVmZTQ3IiwiXFwiOiJcdWZmM2MiLCJdIjoiXHVmZTQ4IiwiXiI6Ilx1ZmYzZSIsXzoiXHVmZTMzIiwiYCI6Ilx1ZmY0MCIsInsiOiJcdWZlMzciLCJ8IjoiXHUyMDE1IiwifSI6Ilx1ZmUzOCIsIn4iOiJcdWZmNWUiLCJceGEyIjoiXHVmZmUwIiwiXHhhMyI6Ilx1ZmZlMSIsIlx4YTUiOiJcdWZmZTUiLCJceGE2IjoiXHVmZmU0IiwiXHhhYyI6Ilx1ZmZlMiIsIlx4YWYiOiJcdWZmZTMiLCJcdTIwMTMiOiJcdWZlMzIiLCJcdTIwMTQiOiJcdWZlMzEiLCJcdTIwMTgiOiJcdWZlNDMiLCJcdTIwMTkiOiJcdWZlNDQiLCJcdTIwMWMiOiJcdWZlNDEiLCJcdTIwMWQiOiJcdWZlNDIiLCJcdTIwMjYiOiJcdWZlMTkiLCJcdTIwMjciOiJcdTMwZmIiLCJcdTIwYTkiOiJcdWZmZTYiLCJcdTMwMDEiOiJcdWZlMTEiLCJcdTMwMDIiOiJcdWZlMTIiLCJcdTMwMDgiOiJcdWZlM2YiLCJcdTMwMDkiOiJcdWZlNDAiLCJcdTMwMGEiOiJcdWZlM2QiLCJcdTMwMGIiOiJcdWZlM2UiLCJcdTMwMGMiOiJcdWZlNDEiLCJcdTMwMGQiOiJcdWZlNDIiLCJcdTMwMGUiOiJcdWZlNDMiLCJcdTMwMGYiOiJcdWZlNDQiLCJcdTMwMTAiOiJcdWZlM2IiLCJcdTMwMTEiOiJcdWZlM2MiLCJcdTMwMTQiOiJcdWZlMzkiLCJcdTMwMTUiOiJcdWZlM2EiLCJcdTMwMTYiOiJcdWZlMTciLCJcdTMwMTciOiJcdWZlMTgiLCJcdWZmMDEiOiJcdWZlMTUiLCJcdWZmMDgiOiJcdWZlMzUiLCJcdWZmMDkiOiJcdWZlMzYiLCJcdWZmMGMiOiJcdWZlMTAiLCJcdWZmMGQiOiJcdWZlMzIiLCJcdWZmMGUiOiJcdTMwZmIiLCJcdWZmMWEiOiJcdWZlMTMiLCJcdWZmMWIiOiJcdWZlMTQiLCJcdWZmMWMiOiJcdWZlM2YiLCJcdWZmMWUiOiJcdWZlNDAiLCJcdWZmMWYiOiJcdWZlMTYiLCJcdWZmM2IiOiJcdWZlNDciLCJcdWZmM2QiOiJcdWZlNDgiLCJcdWZmM2YiOiJcdWZlMzMiLCJcdWZmNWIiOiJcdWZlMzciLCJcdWZmNWMiOiJcdTIwMTUiLCJcdWZmNWQiOiJcdWZlMzgiLCJcdWZmNWYiOiJcdWZlMzUiLCJcdWZmNjAiOiJcdWZlMzYiLCJcdWZmNjEiOiJcdWZlMTIiLCJcdWZmNjIiOiJcdWZlNDEiLCJcdWZmNjMiOiJcdWZlNDIifSxWcz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz04Kmktbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsZj1yP2ktMTowLGg9cj8tMToxLHA9dFtlK2ZdO2ZvcihmKz1oLGE9cCYoMTw8LXUpLTEscD4+PS11LHUrPXM7dT4wO2E9MjU2KmErdFtlK2ZdLGYrPWgsdS09OCk7Zm9yKG89YSYoMTw8LXUpLTEsYT4+PS11LHUrPW47dT4wO289MjU2Km8rdFtlK2ZdLGYrPWgsdS09OCk7aWYoMD09PWEpYT0xLWM7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46MS8wKihwPy0xOjEpO28rPU1hdGgucG93KDIsbiksYS09Y31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsYS1uKX0scXM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPTgqYS1pLTEsdT0oMTw8YyktMSxmPXU+PjEsaD0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHA9bj8wOmEtMSxkPW4/MTotMSxnPWU8MHx8MD09PWUmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8ocz1pc05hTihlKT8xOjAsbz11KToobz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihsPU1hdGgucG93KDIsLW8pKTwxJiYoby0tLGwqPTIpLChlKz1vK2Y+PTE/aC9sOmgqTWF0aC5wb3coMiwxLWYpKSpsPj0yJiYobysrLGwvPTIpLG8rZj49dT8ocz0wLG89dSk6bytmPj0xPyhzPShlKmwtMSkqTWF0aC5wb3coMixpKSxvKz1mKToocz1lKk1hdGgucG93KDIsZi0xKSpNYXRoLnBvdygyLGkpLG89MCkpO2k+PTg7dFtyK3BdPTI1NSZzLHArPWQscy89MjU2LGktPTgpO2ZvcihvPW88PGl8cyxjKz1pO2M+MDt0W3IrcF09MjU1Jm8scCs9ZCxvLz0yNTYsYy09OCk7dFtyK3AtZF18PTEyOCpnfSxIcz1HcztmdW5jdGlvbiBHcyh0KXt0aGlzLmJ1Zj1BcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyh0KT90Om5ldyBVaW50OEFycmF5KHR8fDApLHRoaXMucG9zPTAsdGhpcy50eXBlPTAsdGhpcy5sZW5ndGg9dGhpcy5idWYubGVuZ3RofUdzLlZhcmludD0wLEdzLkZpeGVkNjQ9MSxHcy5CeXRlcz0yLEdzLkZpeGVkMzI9NTt2YXIgWXM9InVuZGVmaW5lZCI9PXR5cGVvZiBUZXh0RGVjb2Rlcj9udWxsOm5ldyBUZXh0RGVjb2RlcigidXRmOCIpO2Z1bmN0aW9uIFdzKHQpe3JldHVybiB0LnR5cGU9PT1Hcy5CeXRlcz90LnJlYWRWYXJpbnQoKSt0LnBvczp0LnBvcysxfWZ1bmN0aW9uIFhzKHQsZSxyKXtyZXR1cm4gcj80Mjk0OTY3Mjk2KmUrKHQ+Pj4wKTo0Mjk0OTY3Mjk2KihlPj4+MCkrKHQ+Pj4wKX1mdW5jdGlvbiBacyh0LGUscil7dmFyIG49ZTw9MTYzODM/MTplPD0yMDk3MTUxPzI6ZTw9MjY4NDM1NDU1PzM6TWF0aC5mbG9vcihNYXRoLmxvZyhlKS8oNypNYXRoLkxOMikpO3IucmVhbGxvYyhuKTtmb3IodmFyIGk9ci5wb3MtMTtpPj10O2ktLSlyLmJ1ZltpK25dPXIuYnVmW2ldfWZ1bmN0aW9uIEpzKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVZhcmludCh0W3JdKX1mdW5jdGlvbiBLcyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTVmFyaW50KHRbcl0pfWZ1bmN0aW9uIFFzKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZsb2F0KHRbcl0pfWZ1bmN0aW9uICRzKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZURvdWJsZSh0W3JdKX1mdW5jdGlvbiB0bCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVCb29sZWFuKHRbcl0pfWZ1bmN0aW9uIGVsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkMzIodFtyXSl9ZnVuY3Rpb24gcmwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU0ZpeGVkMzIodFtyXSl9ZnVuY3Rpb24gbmwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRml4ZWQ2NCh0W3JdKX1mdW5jdGlvbiBpbCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQ2NCh0W3JdKX1mdW5jdGlvbiBhbCh0LGUpe3JldHVybih0W2VdfHRbZSsxXTw8OHx0W2UrMl08PDE2KSsxNjc3NzIxNip0W2UrM119ZnVuY3Rpb24gb2wodCxlLHIpe3Rbcl09ZSx0W3IrMV09ZT4+PjgsdFtyKzJdPWU+Pj4xNix0W3IrM109ZT4+PjI0fWZ1bmN0aW9uIHNsKHQsZSl7cmV0dXJuKHRbZV18dFtlKzFdPDw4fHRbZSsyXTw8MTYpKyh0W2UrM108PDI0KX1mdW5jdGlvbiBsbCh0LGUscil7MT09PXQmJnIucmVhZE1lc3NhZ2UoY2wsZSl9ZnVuY3Rpb24gY2wodCxlLHIpe2lmKDM9PT10KXt2YXIgbj1yLnJlYWRNZXNzYWdlKHVsLHt9KSxpPW4ud2lkdGgsYT1uLmhlaWdodCxvPW4ubGVmdCxzPW4udG9wLGw9bi5hZHZhbmNlO2UucHVzaCh7aWQ6bi5pZCxiaXRtYXA6bmV3IGhvKHt3aWR0aDppKzYsaGVpZ2h0OmErNn0sbi5iaXRtYXApLG1ldHJpY3M6e3dpZHRoOmksaGVpZ2h0OmEsbGVmdDpvLHRvcDpzLGFkdmFuY2U6bH19KX19ZnVuY3Rpb24gdWwodCxlLHIpezE9PT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5iaXRtYXA9ci5yZWFkQnl0ZXMoKTozPT09dD9lLndpZHRoPXIucmVhZFZhcmludCgpOjQ9PT10P2UuaGVpZ2h0PXIucmVhZFZhcmludCgpOjU9PT10P2UubGVmdD1yLnJlYWRTVmFyaW50KCk6Nj09PXQ/ZS50b3A9ci5yZWFkU1ZhcmludCgpOjc9PT10JiYoZS5hZHZhbmNlPXIucmVhZFZhcmludCgpKX1mdW5jdGlvbiBmbCh0KXtmb3IodmFyIGU9MCxyPTAsbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07ZSs9YS53KmEuaCxyPU1hdGgubWF4KHIsYS53KX10LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaC10Lmh9KSk7Zm9yKHZhciBvPVt7eDowLHk6MCx3Ok1hdGgubWF4KE1hdGguY2VpbChNYXRoLnNxcnQoZS8uOTUpKSxyKSxoOjEvMH1dLHM9MCxsPTAsYz0wLHU9dDtjPHUubGVuZ3RoO2MrPTEpZm9yKHZhciBmPXVbY10saD1vLmxlbmd0aC0xO2g+PTA7aC0tKXt2YXIgcD1vW2hdO2lmKCEoZi53PnAud3x8Zi5oPnAuaCkpe2lmKGYueD1wLngsZi55PXAueSxsPU1hdGgubWF4KGwsZi55K2YuaCkscz1NYXRoLm1heChzLGYueCtmLncpLGYudz09PXAudyYmZi5oPT09cC5oKXt2YXIgZD1vLnBvcCgpO2g8by5sZW5ndGgmJihvW2hdPWQpfWVsc2UgZi5oPT09cC5oPyhwLngrPWYudyxwLnctPWYudyk6Zi53PT09cC53PyhwLnkrPWYuaCxwLmgtPWYuaCk6KG8ucHVzaCh7eDpwLngrZi53LHk6cC55LHc6cC53LWYudyxoOmYuaH0pLHAueSs9Zi5oLHAuaC09Zi5oKTticmVha319cmV0dXJue3c6cyxoOmwsZmlsbDplLyhzKmwpfHwwfX1Hcy5wcm90b3R5cGU9e2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmJ1Zj1udWxsfSxyZWFkRmllbGRzOmZ1bmN0aW9uKHQsZSxyKXtmb3Iocj1yfHx0aGlzLmxlbmd0aDt0aGlzLnBvczxyOyl7dmFyIG49dGhpcy5yZWFkVmFyaW50KCksaT1uPj4zLGE9dGhpcy5wb3M7dGhpcy50eXBlPTcmbix0KGksZSx0aGlzKSx0aGlzLnBvcz09PWEmJnRoaXMuc2tpcChuKX1yZXR1cm4gZX0scmVhZE1lc3NhZ2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZWFkRmllbGRzKHQsZSx0aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyl9LHJlYWRGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9YWwodGhpcy5idWYsdGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkU0ZpeGVkMzI6ZnVuY3Rpb24oKXt2YXIgdD1zbCh0aGlzLmJ1Zix0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWRGaXhlZDY0OmZ1bmN0aW9uKCl7dmFyIHQ9YWwodGhpcy5idWYsdGhpcy5wb3MpKzQyOTQ5NjcyOTYqYWwodGhpcy5idWYsdGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRTRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PWFsKHRoaXMuYnVmLHRoaXMucG9zKSs0Mjk0OTY3Mjk2KnNsKHRoaXMuYnVmLHRoaXMucG9zKzQpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkRmxvYXQ6ZnVuY3Rpb24oKXt2YXIgdD1Wcyh0aGlzLmJ1Zix0aGlzLnBvcywhMCwyMyw0KTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZERvdWJsZTpmdW5jdGlvbigpe3ZhciB0PVZzKHRoaXMuYnVmLHRoaXMucG9zLCEwLDUyLDgpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkVmFyaW50OmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10aGlzLmJ1ZjtyZXR1cm4gZT0xMjcmKHI9blt0aGlzLnBvcysrXSkscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDcscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDE0LHI8MTI4P2U6KGV8PSgxMjcmKHI9blt0aGlzLnBvcysrXSkpPDwyMSxyPDEyOD9lOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ci5idWY7aWYobj0oMTEyJihpPWFbci5wb3MrK10pKT4+NCxpPDEyOClyZXR1cm4gWHModCxuLGUpO2lmKG58PSgxMjcmKGk9YVtyLnBvcysrXSkpPDwzLGk8MTI4KXJldHVybiBYcyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDEwLGk8MTI4KXJldHVybiBYcyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDE3LGk8MTI4KXJldHVybiBYcyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDI0LGk8MTI4KXJldHVybiBYcyh0LG4sZSk7aWYobnw9KDEmKGk9YVtyLnBvcysrXSkpPDwzMSxpPDEyOClyZXR1cm4gWHModCxuLGUpO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdmFyaW50IG5vdCBtb3JlIHRoYW4gMTAgYnl0ZXMiKX0oZXw9KDE1JihyPW5bdGhpcy5wb3NdKSk8PDI4LHQsdGhpcykpKSl9LHJlYWRWYXJpbnQ2NDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRWYXJpbnQoITApfSxyZWFkU1ZhcmludDpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpO3JldHVybiB0JTI9PTE/KHQrMSkvLTI6dC8yfSxyZWFkQm9vbGVhbjpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMucmVhZFZhcmludCgpKX0scmVhZFN0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5wb3M7cmV0dXJuIHRoaXMucG9zPXQsdC1lPj0xMiYmWXM/ZnVuY3Rpb24odCxlLHIpe3JldHVybiBZcy5kZWNvZGUodC5zdWJhcnJheShlLHIpKX0odGhpcy5idWYsZSx0KTpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPSIiLGk9ZTtpPHI7KXt2YXIgYSxvLHMsbD10W2ldLGM9bnVsbCx1PWw+MjM5PzQ6bD4yMjM/MzpsPjE5MT8yOjE7aWYoaSt1PnIpYnJlYWs7MT09PXU/bDwxMjgmJihjPWwpOjI9PT11PzEyOD09KDE5MiYoYT10W2krMV0pKSYmKGM9KDMxJmwpPDw2fDYzJmEpPD0xMjcmJihjPW51bGwpOjM9PT11PyhvPXRbaSsyXSwxMjg9PSgxOTImKGE9dFtpKzFdKSkmJjEyOD09KDE5MiZvKSYmKChjPSgxNSZsKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPD0yMDQ3fHxjPj01NTI5NiYmYzw9NTczNDMpJiYoYz1udWxsKSk6ND09PXUmJihvPXRbaSsyXSxzPXRbaSszXSwxMjg9PSgxOTImKGE9dFtpKzFdKSkmJjEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYoKGM9KDE1JmwpPDwxOHwoNjMmYSk8PDEyfCg2MyZvKTw8Nnw2MyZzKTw9NjU1MzV8fGM+PTExMTQxMTIpJiYoYz1udWxsKSksbnVsbD09PWM/KGM9NjU1MzMsdT0xKTpjPjY1NTM1JiYoYy09NjU1MzYsbis9U3RyaW5nLmZyb21DaGFyQ29kZShjPj4+MTAmMTAyM3w1NTI5NiksYz01NjMyMHwxMDIzJmMpLG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYyksaSs9dX1yZXR1cm4gbn0odGhpcy5idWYsZSx0KX0scmVhZEJ5dGVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT10aGlzLmJ1Zi5zdWJhcnJheSh0aGlzLnBvcyx0KTtyZXR1cm4gdGhpcy5wb3M9dCxlfSxyZWFkUGFja2VkVmFyaW50OmZ1bmN0aW9uKHQsZSl7aWYodGhpcy50eXBlIT09R3MuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3ZhciByPVdzKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPHI7KXQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3JldHVybiB0fSxyZWFkUGFja2VkU1ZhcmludDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1Hcy5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7dmFyIGU9V3ModGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRCb29sZWFuOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PUdzLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTt2YXIgZT1Xcyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZsb2F0OmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PUdzLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7dmFyIGU9V3ModGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZsb2F0KCkpO3JldHVybiB0fSxyZWFkUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PUdzLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRG91YmxlKCkpO3ZhciBlPVdzKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWREb3VibGUoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGaXhlZDMyOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PUdzLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTt2YXIgZT1Xcyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PUdzLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7dmFyIGU9V3ModGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDMyKCkpO3JldHVybiB0fSxyZWFkUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1Hcy5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7dmFyIGU9V3ModGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1Hcy5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3ZhciBlPVdzKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTRml4ZWQ2NCgpKTtyZXR1cm4gdH0sc2tpcDpmdW5jdGlvbih0KXt2YXIgZT03JnQ7aWYoZT09PUdzLlZhcmludClmb3IoO3RoaXMuYnVmW3RoaXMucG9zKytdPjEyNzspO2Vsc2UgaWYoZT09PUdzLkJ5dGVzKXRoaXMucG9zPXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zO2Vsc2UgaWYoZT09PUdzLkZpeGVkMzIpdGhpcy5wb3MrPTQ7ZWxzZXtpZihlIT09R3MuRml4ZWQ2NCl0aHJvdyBuZXcgRXJyb3IoIlVuaW1wbGVtZW50ZWQgdHlwZTogIitlKTt0aGlzLnBvcys9OH19LHdyaXRlVGFnOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVZhcmludCh0PDwzfGUpfSxyZWFsbG9jOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmxlbmd0aHx8MTY7ZTx0aGlzLnBvcyt0OyllKj0yO2lmKGUhPT10aGlzLmxlbmd0aCl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoZSk7ci5zZXQodGhpcy5idWYpLHRoaXMuYnVmPXIsdGhpcy5sZW5ndGg9ZX19LGZpbmlzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD10aGlzLnBvcyx0aGlzLnBvcz0wLHRoaXMuYnVmLnN1YmFycmF5KDAsdGhpcy5sZW5ndGgpfSx3cml0ZUZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLG9sKHRoaXMuYnVmLHQsdGhpcy5wb3MpLHRoaXMucG9zKz00fSx3cml0ZVNGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxvbCh0aGlzLmJ1Zix0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxvbCh0aGlzLmJ1ZiwtMSZ0LHRoaXMucG9zKSxvbCh0aGlzLmJ1ZixNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVNGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxvbCh0aGlzLmJ1ZiwtMSZ0LHRoaXMucG9zKSxvbCh0aGlzLmJ1ZixNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVZhcmludDpmdW5jdGlvbih0KXsodD0rdHx8MCk+MjY4NDM1NDU1fHx0PDA/ZnVuY3Rpb24odCxlKXt2YXIgcixuO2lmKHQ+PTA/KHI9dCU0Mjk0OTY3Mjk2fDAsbj10LzQyOTQ5NjcyOTZ8MCk6KG49figtdC80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1XihyPX4oLXQlNDI5NDk2NzI5NikpP3I9cisxfDA6KHI9MCxuPW4rMXwwKSksdD49MHgxMDAwMDAwMDAwMDAwMDAwMHx8dDwtMHgxMDAwMDAwMDAwMDAwMDAwMCl0aHJvdyBuZXcgRXJyb3IoIkdpdmVuIHZhcmludCBkb2Vzbid0IGZpdCBpbnRvIDEwIGJ5dGVzIik7ZS5yZWFsbG9jKDEwKSxmdW5jdGlvbih0LGUscil7ci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHIuYnVmW3IucG9zXT0xMjcmKHQ+Pj49Nyl9KHIsMCxlKSxmdW5jdGlvbih0LGUpe3ZhciByPSg3JnQpPDw0O2UuYnVmW2UucG9zKytdfD1yfCgodD4+Pj0zKT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0KSkpKSl9KG4sZSl9KHQsdGhpcyk6KHRoaXMucmVhbGxvYyg0KSx0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmdHwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPXQ+Pj43JjEyNykpKSl9LHdyaXRlU1ZhcmludDpmdW5jdGlvbih0KXt0aGlzLndyaXRlVmFyaW50KHQ8MD8yKi10LTE6Mip0KX0sd3JpdGVCb29sZWFuOmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQoQm9vbGVhbih0KSl9LHdyaXRlU3RyaW5nOmZ1bmN0aW9uKHQpe3Q9U3RyaW5nKHQpLHRoaXMucmVhbGxvYyg0KnQubGVuZ3RoKSx0aGlzLnBvcysrO3ZhciBlPXRoaXMucG9zO3RoaXMucG9zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhPTA7YTxlLmxlbmd0aDthKyspe2lmKChuPWUuY2hhckNvZGVBdChhKSk+NTUyOTUmJm48NTczNDQpe2lmKCFpKXtuPjU2MzE5fHxhKzE9PT1lLmxlbmd0aD8odFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODkpOmk9bjtjb250aW51ZX1pZihuPDU2MzIwKXt0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSxpPW47Y29udGludWV9bj1pLTU1Mjk2PDwxMHxuLTU2MzIwfDY1NTM2LGk9bnVsbH1lbHNlIGkmJih0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSxpPW51bGwpO248MTI4P3RbcisrXT1uOihuPDIwNDg/dFtyKytdPW4+PjZ8MTkyOihuPDY1NTM2P3RbcisrXT1uPj4xMnwyMjQ6KHRbcisrXT1uPj4xOHwyNDAsdFtyKytdPW4+PjEyJjYzfDEyOCksdFtyKytdPW4+PjYmNjN8MTI4KSx0W3IrK109NjMmbnwxMjgpfXJldHVybiByfSh0aGlzLmJ1Zix0LHRoaXMucG9zKTt2YXIgcj10aGlzLnBvcy1lO3I+PTEyOCYmWnMoZSxyLHRoaXMpLHRoaXMucG9zPWUtMSx0aGlzLndyaXRlVmFyaW50KHIpLHRoaXMucG9zKz1yfSx3cml0ZUZsb2F0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxxcyh0aGlzLmJ1Zix0LHRoaXMucG9zLCEwLDIzLDQpLHRoaXMucG9zKz00fSx3cml0ZURvdWJsZTpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCkscXModGhpcy5idWYsdCx0aGlzLnBvcywhMCw1Miw4KSx0aGlzLnBvcys9OH0sd3JpdGVCeXRlczpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDt0aGlzLndyaXRlVmFyaW50KGUpLHRoaXMucmVhbGxvYyhlKTtmb3IodmFyIHI9MDtyPGU7cisrKXRoaXMuYnVmW3RoaXMucG9zKytdPXRbcl19LHdyaXRlUmF3TWVzc2FnZTpmdW5jdGlvbih0LGUpe3RoaXMucG9zKys7dmFyIHI9dGhpcy5wb3M7dChlLHRoaXMpO3ZhciBuPXRoaXMucG9zLXI7bj49MTI4JiZacyhyLG4sdGhpcyksdGhpcy5wb3M9ci0xLHRoaXMud3JpdGVWYXJpbnQobiksdGhpcy5wb3MrPW59LHdyaXRlTWVzc2FnZTpmdW5jdGlvbih0LGUscil7dGhpcy53cml0ZVRhZyh0LEdzLkJ5dGVzKSx0aGlzLndyaXRlUmF3TWVzc2FnZShlLHIpfSx3cml0ZVBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LEpzLGUpfSx3cml0ZVBhY2tlZFNWYXJpbnQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxLcyxlKX0sd3JpdGVQYWNrZWRCb29sZWFuOmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsdGwsZSl9LHdyaXRlUGFja2VkRmxvYXQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxRcyxlKX0sd3JpdGVQYWNrZWREb3VibGU6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCwkcyxlKX0sd3JpdGVQYWNrZWRGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsZWwsZSl9LHdyaXRlUGFja2VkU0ZpeGVkMzI6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxybCxlKX0sd3JpdGVQYWNrZWRGaXhlZDY0OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsbmwsZSl9LHdyaXRlUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxpbCxlKX0sd3JpdGVCeXRlc0ZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LEdzLkJ5dGVzKSx0aGlzLndyaXRlQnl0ZXMoZSl9LHdyaXRlRml4ZWQzMkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LEdzLkZpeGVkMzIpLHRoaXMud3JpdGVGaXhlZDMyKGUpfSx3cml0ZVNGaXhlZDMyRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsR3MuRml4ZWQzMiksdGhpcy53cml0ZVNGaXhlZDMyKGUpfSx3cml0ZUZpeGVkNjRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxHcy5GaXhlZDY0KSx0aGlzLndyaXRlRml4ZWQ2NChlKX0sd3JpdGVTRml4ZWQ2NEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LEdzLkZpeGVkNjQpLHRoaXMud3JpdGVTRml4ZWQ2NChlKX0sd3JpdGVWYXJpbnRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxHcy5WYXJpbnQpLHRoaXMud3JpdGVWYXJpbnQoZSl9LHdyaXRlU1ZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LEdzLlZhcmludCksdGhpcy53cml0ZVNWYXJpbnQoZSl9LHdyaXRlU3RyaW5nRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsR3MuQnl0ZXMpLHRoaXMud3JpdGVTdHJpbmcoZSl9LHdyaXRlRmxvYXRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxHcy5GaXhlZDMyKSx0aGlzLndyaXRlRmxvYXQoZSl9LHdyaXRlRG91YmxlRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsR3MuRml4ZWQ2NCksdGhpcy53cml0ZURvdWJsZShlKX0sd3JpdGVCb29sZWFuRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVmFyaW50RmllbGQodCxCb29sZWFuKGUpKX19O3ZhciBobD1mdW5jdGlvbih0LGUpe3ZhciByPWUucGl4ZWxSYXRpbyxuPWUudmVyc2lvbixpPWUuc3RyZXRjaFgsYT1lLnN0cmV0Y2hZLG89ZS5jb250ZW50O3RoaXMucGFkZGVkUmVjdD10LHRoaXMucGl4ZWxSYXRpbz1yLHRoaXMuc3RyZXRjaFg9aSx0aGlzLnN0cmV0Y2hZPWEsdGhpcy5jb250ZW50PW8sdGhpcy52ZXJzaW9uPW59LHBsPXt0bDp7Y29uZmlndXJhYmxlOiEwfSxicjp7Y29uZmlndXJhYmxlOiEwfSx0bGJyOntjb25maWd1cmFibGU6ITB9LGRpc3BsYXlTaXplOntjb25maWd1cmFibGU6ITB9fTtwbC50bC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5wYWRkZWRSZWN0LngrMSx0aGlzLnBhZGRlZFJlY3QueSsxXX0scGwuYnIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucGFkZGVkUmVjdC54K3RoaXMucGFkZGVkUmVjdC53LTEsdGhpcy5wYWRkZWRSZWN0LnkrdGhpcy5wYWRkZWRSZWN0LmgtMV19LHBsLnRsYnIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGwuY29uY2F0KHRoaXMuYnIpfSxwbC5kaXNwbGF5U2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bKHRoaXMucGFkZGVkUmVjdC53LTIpL3RoaXMucGl4ZWxSYXRpbywodGhpcy5wYWRkZWRSZWN0LmgtMikvdGhpcy5waXhlbFJhdGlvXX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaGwucHJvdG90eXBlLHBsKTt2YXIgZGw9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxuPXt9O3RoaXMuaGF2ZVJlbmRlckNhbGxiYWNrcz1bXTt2YXIgaT1bXTt0aGlzLmFkZEltYWdlcyh0LHIsaSksdGhpcy5hZGRJbWFnZXMoZSxuLGkpO3ZhciBhPWZsKGkpLG89bmV3IHBvKHt3aWR0aDphLnd8fDEsaGVpZ2h0OmEuaHx8MX0pO2Zvcih2YXIgcyBpbiB0KXt2YXIgbD10W3NdLGM9cltzXS5wYWRkZWRSZWN0O3BvLmNvcHkobC5kYXRhLG8se3g6MCx5OjB9LHt4OmMueCsxLHk6Yy55KzF9LGwuZGF0YSl9Zm9yKHZhciB1IGluIGUpe3ZhciBmPWVbdV0saD1uW3VdLnBhZGRlZFJlY3QscD1oLngrMSxkPWgueSsxLGc9Zi5kYXRhLndpZHRoLG09Zi5kYXRhLmhlaWdodDtwby5jb3B5KGYuZGF0YSxvLHt4OjAseTowfSx7eDpwLHk6ZH0sZi5kYXRhKSxwby5jb3B5KGYuZGF0YSxvLHt4OjAseTptLTF9LHt4OnAseTpkLTF9LHt3aWR0aDpnLGhlaWdodDoxfSkscG8uY29weShmLmRhdGEsbyx7eDowLHk6MH0se3g6cCx5OmQrbX0se3dpZHRoOmcsaGVpZ2h0OjF9KSxwby5jb3B5KGYuZGF0YSxvLHt4OmctMSx5OjB9LHt4OnAtMSx5OmR9LHt3aWR0aDoxLGhlaWdodDptfSkscG8uY29weShmLmRhdGEsbyx7eDowLHk6MH0se3g6cCtnLHk6ZH0se3dpZHRoOjEsaGVpZ2h0Om19KX10aGlzLmltYWdlPW8sdGhpcy5pY29uUG9zaXRpb25zPXIsdGhpcy5wYXR0ZXJuUG9zaXRpb25zPW59O2RsLnByb3RvdHlwZS5hZGRJbWFnZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiB0KXt2YXIgaT10W25dLGE9e3g6MCx5OjAsdzppLmRhdGEud2lkdGgrMixoOmkuZGF0YS5oZWlnaHQrMn07ci5wdXNoKGEpLGVbbl09bmV3IGhsKGEsaSksaS5oYXNSZW5kZXJDYWxsYmFjayYmdGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzLnB1c2gobil9fSxkbC5wcm90b3R5cGUucGF0Y2hVcGRhdGVkSW1hZ2VzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQuZGlzcGF0Y2hSZW5kZXJDYWxsYmFja3ModGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzKSx0LnVwZGF0ZWRJbWFnZXMpdGhpcy5wYXRjaFVwZGF0ZWRJbWFnZSh0aGlzLmljb25Qb3NpdGlvbnNbcl0sdC5nZXRJbWFnZShyKSxlKSx0aGlzLnBhdGNoVXBkYXRlZEltYWdlKHRoaXMucGF0dGVyblBvc2l0aW9uc1tyXSx0LmdldEltYWdlKHIpLGUpfSxkbC5wcm90b3R5cGUucGF0Y2hVcGRhdGVkSW1hZ2U9ZnVuY3Rpb24odCxlLHIpe2lmKHQmJmUmJnQudmVyc2lvbiE9PWUudmVyc2lvbil7dC52ZXJzaW9uPWUudmVyc2lvbjt2YXIgbj10LnRsO3IudXBkYXRlKGUuZGF0YSx2b2lkIDAse3g6blswXSx5Om5bMV19KX19LERuKCJJbWFnZVBvc2l0aW9uIixobCksRG4oIkltYWdlQXRsYXMiLGRsKTt2YXIgZ2w9e2hvcml6b250YWw6MSx2ZXJ0aWNhbDoyLGhvcml6b250YWxPbmx5OjN9LG1sPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZT0xLHRoaXMuZm9udFN0YWNrPSIiLHRoaXMuaW1hZ2VOYW1lPW51bGx9O21sLmZvclRleHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbWw7cmV0dXJuIHIuc2NhbGU9dHx8MSxyLmZvbnRTdGFjaz1lLHJ9LG1sLmZvckltYWdlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBtbDtyZXR1cm4gZS5pbWFnZU5hbWU9dCxlfTt2YXIgdmw9ZnVuY3Rpb24oKXt0aGlzLnRleHQ9IiIsdGhpcy5zZWN0aW9uSW5kZXg9W10sdGhpcy5zZWN0aW9ucz1bXSx0aGlzLmltYWdlU2VjdGlvbklEPW51bGx9O2Z1bmN0aW9uIHlsKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLGcpe3ZhciBtLHY9dmwuZnJvbUZlYXR1cmUodCxpKTtmPT09Z2wudmVydGljYWwmJnYudmVydGljYWxpemVQdW5jdHVhdGlvbigpO3ZhciB5PW5pLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCx4PW5pLnByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dDtpZih5JiYxPT09di5zZWN0aW9ucy5sZW5ndGgpe209W107Zm9yKHZhciBiPTAsXz15KHYudG9TdHJpbmcoKSxNbCh2LGMsYSxlLG4scCxkKSk7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdLFQ9bmV3IHZsO1QudGV4dD13LFQuc2VjdGlvbnM9di5zZWN0aW9ucztmb3IodmFyIGs9MDtrPHcubGVuZ3RoO2srKylULnNlY3Rpb25JbmRleC5wdXNoKDApO20ucHVzaChUKX19ZWxzZSBpZih4KXttPVtdO2Zvcih2YXIgTT0wLEE9eCh2LnRleHQsdi5zZWN0aW9uSW5kZXgsTWwodixjLGEsZSxuLHAsZCkpO008QS5sZW5ndGg7TSs9MSl7dmFyIFM9QVtNXSxFPW5ldyB2bDtFLnRleHQ9U1swXSxFLnNlY3Rpb25JbmRleD1TWzFdLEUuc2VjdGlvbnM9di5zZWN0aW9ucyxtLnB1c2goRSl9fWVsc2UgbT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQudGV4dCxpPTAsYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07ci5wdXNoKHQuc3Vic3RyaW5nKGkscykpLGk9c31yZXR1cm4gaTxuLmxlbmd0aCYmci5wdXNoKHQuc3Vic3RyaW5nKGksbi5sZW5ndGgpKSxyfSh2LE1sKHYsYyxhLGUsbixwLGQpKTt2YXIgQz1bXSxMPXtwb3NpdGlvbmVkTGluZXM6Qyx0ZXh0OnYudG9TdHJpbmcoKSx0b3A6dVsxXSxib3R0b206dVsxXSxsZWZ0OnVbMF0scmlnaHQ6dVswXSx3cml0aW5nTW9kZTpmLGljb25zSW5UZXh0OiExLHZlcnRpY2FsaXphYmxlOiExfTtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYpe2Zvcih2YXIgaD0wLHA9LTE3LGQ9MCxnPTAsbT0icmlnaHQiPT09cz8xOiJsZWZ0Ij09PXM/MDouNSx2PTAseT0wLHg9aTt5PHgubGVuZ3RoO3krPTEpe3ZhciBiPXhbeV07Yi50cmltKCk7dmFyIF89Yi5nZXRNYXhTY2FsZSgpLHc9MjQqKF8tMSksVD17cG9zaXRpb25lZEdseXBoczpbXSxsaW5lT2Zmc2V0OjB9O3QucG9zaXRpb25lZExpbmVzW3ZdPVQ7dmFyIGs9VC5wb3NpdGlvbmVkR2x5cGhzLE09MDtpZihiLmxlbmd0aCgpKXtmb3IodmFyIEE9MDtBPGIubGVuZ3RoKCk7QSsrKXt2YXIgUz1iLmdldFNlY3Rpb24oQSksRT1iLmdldFNlY3Rpb25JbmRleChBKSxDPWIuZ2V0Q2hhckNvZGUoQSksTD0wLEk9bnVsbCxQPW51bGwsej1udWxsLE89MjQsRD0hKGw9PT1nbC5ob3Jpem9udGFsfHwhdSYmIUhuKEMpfHx1JiYoeGxbQ118fChIPUMsVm4uQXJhYmljKEgpfHxWblsiQXJhYmljIFN1cHBsZW1lbnQiXShIKXx8Vm5bIkFyYWJpYyBFeHRlbmRlZC1BIl0oSCl8fFZuWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiXShIKXx8Vm5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiJdKEgpKSkpO2lmKFMuaW1hZ2VOYW1lKXt2YXIgUj1uW1MuaW1hZ2VOYW1lXTtpZighUiljb250aW51ZTt6PVMuaW1hZ2VOYW1lLHQuaWNvbnNJblRleHQ9dC5pY29uc0luVGV4dHx8ITAsUD1SLnBhZGRlZFJlY3Q7dmFyIEY9Ui5kaXNwbGF5U2l6ZTtTLnNjYWxlPTI0KlMuc2NhbGUvZixMPXcrKDI0LUZbMV0qUy5zY2FsZSksTz0oST17d2lkdGg6RlswXSxoZWlnaHQ6RlsxXSxsZWZ0OjEsdG9wOi0zLGFkdmFuY2U6RD9GWzFdOkZbMF19KS5hZHZhbmNlO3ZhciBCPUQ/RlswXSpTLnNjYWxlLTI0Kl86RlsxXSpTLnNjYWxlLTI0Kl87Qj4wJiZCPk0mJihNPUIpfWVsc2V7dmFyIE49cltTLmZvbnRTdGFja10saj1OJiZOW0NdO2lmKGomJmoucmVjdClQPWoucmVjdCxJPWoubWV0cmljcztlbHNle3ZhciBVPWVbUy5mb250U3RhY2tdLFY9VSYmVVtDXTtpZighViljb250aW51ZTtJPVYubWV0cmljc31MPTI0KihfLVMuc2NhbGUpfUQ/KHQudmVydGljYWxpemFibGU9ITAsay5wdXNoKHtnbHlwaDpDLGltYWdlTmFtZTp6LHg6aCx5OnArTCx2ZXJ0aWNhbDpELHNjYWxlOlMuc2NhbGUsZm9udFN0YWNrOlMuZm9udFN0YWNrLHNlY3Rpb25JbmRleDpFLG1ldHJpY3M6SSxyZWN0OlB9KSxoKz1PKlMuc2NhbGUrYyk6KGsucHVzaCh7Z2x5cGg6QyxpbWFnZU5hbWU6eix4OmgseTpwK0wsdmVydGljYWw6RCxzY2FsZTpTLnNjYWxlLGZvbnRTdGFjazpTLmZvbnRTdGFjayxzZWN0aW9uSW5kZXg6RSxtZXRyaWNzOkkscmVjdDpQfSksaCs9SS5hZHZhbmNlKlMuc2NhbGUrYyl9MCE9PWsubGVuZ3RoJiYoZD1NYXRoLm1heChoLWMsZCksU2woaywwLGsubGVuZ3RoLTEsbSxNKSksaD0wO3ZhciBxPWEqXytNO1QubGluZU9mZnNldD1NYXRoLm1heChNLHcpLHArPXEsZz1NYXRoLm1heChxLGcpLCsrdn1lbHNlIHArPWEsKyt2fXZhciBILEc9cC0gLTE3LFk9QWwobyksVz1ZLmhvcml6b250YWxBbGlnbixYPVkudmVydGljYWxBbGlnbjsoZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjLHU9KGUtcikqaTtjPWEhPT1vPy1zKm4tIC0xNzooLW4qbCsuNSkqbztmb3IodmFyIGY9MCxoPXQ7ZjxoLmxlbmd0aDtmKz0xKWZvcih2YXIgcD0wLGQ9aFtmXS5wb3NpdGlvbmVkR2x5cGhzO3A8ZC5sZW5ndGg7cCs9MSl7dmFyIGc9ZFtwXTtnLngrPXUsZy55Kz1jfX0pKHQucG9zaXRpb25lZExpbmVzLG0sVyxYLGQsZyxhLEcsaS5sZW5ndGgpLHQudG9wKz0tWCpHLHQuYm90dG9tPXQudG9wK0csdC5sZWZ0Kz0tVypkLHQucmlnaHQ9dC5sZWZ0K2R9KEwsZSxyLG4sbSxvLHMsbCxmLGMsaCxnKSwhZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZigwIT09cltlXS5wb3NpdGlvbmVkR2x5cGhzLmxlbmd0aClyZXR1cm4hMTtyZXR1cm4hMH0oQykmJkx9dmwuZnJvbUZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IHZsLG49MDtuPHQuc2VjdGlvbnMubGVuZ3RoO24rKyl7dmFyIGk9dC5zZWN0aW9uc1tuXTtpLmltYWdlP3IuYWRkSW1hZ2VTZWN0aW9uKGkpOnIuYWRkVGV4dFNlY3Rpb24oaSxlKX1yZXR1cm4gcn0sdmwucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQubGVuZ3RofSx2bC5wcm90b3R5cGUuZ2V0U2VjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWN0aW9uc1t0aGlzLnNlY3Rpb25JbmRleFt0XV19LHZsLnByb3RvdHlwZS5nZXRTZWN0aW9uSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VjdGlvbkluZGV4W3RdfSx2bC5wcm90b3R5cGUuZ2V0Q2hhckNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGV4dC5jaGFyQ29kZUF0KHQpfSx2bC5wcm90b3R5cGUudmVydGljYWxpemVQdW5jdHVhdGlvbj1mdW5jdGlvbigpe3RoaXMudGV4dD1mdW5jdGlvbih0KXtmb3IodmFyIGU9IiIscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10LmNoYXJDb2RlQXQocisxKXx8bnVsbCxpPXQuY2hhckNvZGVBdChyLTEpfHxudWxsO2UrPW4mJkduKG4pJiYhVXNbdFtyKzFdXXx8aSYmR24oaSkmJiFVc1t0W3ItMV1dfHwhVXNbdFtyXV0/dFtyXTpVc1t0W3JdXX1yZXR1cm4gZX0odGhpcy50ZXh0KX0sdmwucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLnRleHQubGVuZ3RoJiZ4bFt0aGlzLnRleHQuY2hhckNvZGVBdChlKV07ZSsrKXQrKztmb3IodmFyIHI9dGhpcy50ZXh0Lmxlbmd0aCxuPXRoaXMudGV4dC5sZW5ndGgtMTtuPj0wJiZuPj10JiZ4bFt0aGlzLnRleHQuY2hhckNvZGVBdChuKV07bi0tKXItLTt0aGlzLnRleHQ9dGhpcy50ZXh0LnN1YnN0cmluZyh0LHIpLHRoaXMuc2VjdGlvbkluZGV4PXRoaXMuc2VjdGlvbkluZGV4LnNsaWNlKHQscil9LHZsLnByb3RvdHlwZS5zdWJzdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgdmw7cmV0dXJuIHIudGV4dD10aGlzLnRleHQuc3Vic3RyaW5nKHQsZSksci5zZWN0aW9uSW5kZXg9dGhpcy5zZWN0aW9uSW5kZXguc2xpY2UodCxlKSxyLnNlY3Rpb25zPXRoaXMuc2VjdGlvbnMscn0sdmwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dH0sdmwucHJvdG90eXBlLmdldE1heFNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5zZWN0aW9uSW5kZXgucmVkdWNlKChmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLm1heChlLHQuc2VjdGlvbnNbcl0uc2NhbGUpfSksMCl9LHZsLnByb3RvdHlwZS5hZGRUZXh0U2VjdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMudGV4dCs9dC50ZXh0LHRoaXMuc2VjdGlvbnMucHVzaChtbC5mb3JUZXh0KHQuc2NhbGUsdC5mb250U3RhY2t8fGUpKTtmb3IodmFyIHI9dGhpcy5zZWN0aW9ucy5sZW5ndGgtMSxuPTA7bjx0LnRleHQubGVuZ3RoOysrbil0aGlzLnNlY3Rpb25JbmRleC5wdXNoKHIpfSx2bC5wcm90b3R5cGUuYWRkSW1hZ2VTZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW1hZ2U/dC5pbWFnZS5uYW1lOiIiO2lmKDAhPT1lLmxlbmd0aCl7dmFyIHI9dGhpcy5nZXROZXh0SW1hZ2VTZWN0aW9uQ2hhckNvZGUoKTtyPyh0aGlzLnRleHQrPVN0cmluZy5mcm9tQ2hhckNvZGUociksdGhpcy5zZWN0aW9ucy5wdXNoKG1sLmZvckltYWdlKGUpKSx0aGlzLnNlY3Rpb25JbmRleC5wdXNoKHRoaXMuc2VjdGlvbnMubGVuZ3RoLTEpKTpfKCJSZWFjaGVkIG1heGltdW0gbnVtYmVyIG9mIGltYWdlcyA2NDAxIil9ZWxzZSBfKCJDYW4ndCBhZGQgRm9ybWF0dGVkU2VjdGlvbiB3aXRoIGFuIGVtcHR5IGltYWdlLiIpfSx2bC5wcm90b3R5cGUuZ2V0TmV4dEltYWdlU2VjdGlvbkNoYXJDb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2VTZWN0aW9uSUQ/dGhpcy5pbWFnZVNlY3Rpb25JRD49NjM3NDM/bnVsbDorK3RoaXMuaW1hZ2VTZWN0aW9uSUQ6KHRoaXMuaW1hZ2VTZWN0aW9uSUQ9NTczNDQsdGhpcy5pbWFnZVNlY3Rpb25JRCl9O3ZhciB4bD17OTohMCwxMDohMCwxMTohMCwxMjohMCwxMzohMCwzMjohMH0sYmw9e307ZnVuY3Rpb24gX2wodCxlLHIsbixpLGEpe2lmKGUuaW1hZ2VOYW1lKXt2YXIgbz1uW2UuaW1hZ2VOYW1lXTtyZXR1cm4gbz9vLmRpc3BsYXlTaXplWzBdKmUuc2NhbGUqMjQvYStpOjB9dmFyIHM9cltlLmZvbnRTdGFja10sbD1zJiZzW3RdO3JldHVybiBsP2wubWV0cmljcy5hZHZhbmNlKmUuc2NhbGUraTowfWZ1bmN0aW9uIHdsKHQsZSxyLG4pe3ZhciBpPU1hdGgucG93KHQtZSwyKTtyZXR1cm4gbj90PGU/aS8yOjIqaTppK01hdGguYWJzKHIpKnJ9ZnVuY3Rpb24gVGwodCxlLHIpe3ZhciBuPTA7cmV0dXJuIDEwPT09dCYmKG4tPTFlNCksciYmKG4rPTE1MCksNDAhPT10JiY2NTI4OCE9PXR8fChuKz01MCksNDEhPT1lJiY2NTI4OSE9PWV8fChuKz01MCksbn1mdW5jdGlvbiBrbCh0LGUscixuLGksYSl7Zm9yKHZhciBvPW51bGwscz13bChlLHIsaSxhKSxsPTAsYz1uO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxmPXdsKGUtdS54LHIsaSxhKSt1LmJhZG5lc3M7Zjw9cyYmKG89dSxzPWYpfXJldHVybntpbmRleDp0LHg6ZSxwcmlvckJyZWFrOm8sYmFkbmVzczpzfX1mdW5jdGlvbiBNbCh0LGUscixuLGksYSxvKXtpZigicG9pbnQiIT09YSlyZXR1cm5bXTtpZighdClyZXR1cm5bXTtmb3IodmFyIHMsbD1bXSxjPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MCxzPTA7czx0Lmxlbmd0aCgpO3MrKyl7dmFyIGw9dC5nZXRTZWN0aW9uKHMpO28rPV9sKHQuZ2V0Q2hhckNvZGUocyksbCxuLGksZSxhKX1yZXR1cm4gby9NYXRoLm1heCgxLE1hdGguY2VpbChvL3IpKX0odCxlLHIsbixpLG8pLHU9dC50ZXh0LmluZGV4T2YoIlx1MjAwYiIpPj0wLGY9MCxoPTA7aDx0Lmxlbmd0aCgpO2grKyl7dmFyIHA9dC5nZXRTZWN0aW9uKGgpLGQ9dC5nZXRDaGFyQ29kZShoKTtpZih4bFtkXXx8KGYrPV9sKGQscCxuLGksZSxvKSksaDx0Lmxlbmd0aCgpLTEpe3ZhciBnPSEoKHM9ZCk8MTE5MDR8fCEoVm5bIkJvcG9tb2ZvIEV4dGVuZGVkIl0ocyl8fFZuLkJvcG9tb2ZvKHMpfHxWblsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXShzKXx8Vm5bIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiXShzKXx8Vm5bIkNKSyBDb21wYXRpYmlsaXR5Il0ocyl8fFZuWyJDSksgUmFkaWNhbHMgU3VwcGxlbWVudCJdKHMpfHxWblsiQ0pLIFN0cm9rZXMiXShzKXx8Vm5bIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiJdKHMpfHxWblsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSJdKHMpfHxWblsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyJdKHMpfHxWblsiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyJdKHMpfHxWblsiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiXShzKXx8Vm4uSGlyYWdhbmEocyl8fFZuWyJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIl0ocyl8fFZuWyJLYW5neGkgUmFkaWNhbHMiXShzKXx8Vm5bIkthdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMiXShzKXx8Vm4uS2F0YWthbmEocyl8fFZuWyJWZXJ0aWNhbCBGb3JtcyJdKHMpfHxWblsiWWkgUmFkaWNhbHMiXShzKXx8Vm5bIllpIFN5bGxhYmxlcyJdKHMpKSk7KGJsW2RdfHxnfHxwLmltYWdlTmFtZSkmJmwucHVzaChrbChoKzEsZixjLGwsVGwoZCx0LmdldENoYXJDb2RlKGgrMSksZyYmdSksITEpKX19cmV0dXJuIGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGU/dChlLnByaW9yQnJlYWspLmNvbmNhdChlLmluZGV4KTpbXX0oa2wodC5sZW5ndGgoKSxmLGMsbCwwLCEwKSl9ZnVuY3Rpb24gQWwodCl7dmFyIGU9LjUscj0uNTtzd2l0Y2godCl7Y2FzZSJyaWdodCI6Y2FzZSJ0b3AtcmlnaHQiOmNhc2UiYm90dG9tLXJpZ2h0IjplPTE7YnJlYWs7Y2FzZSJsZWZ0IjpjYXNlInRvcC1sZWZ0IjpjYXNlImJvdHRvbS1sZWZ0IjplPTB9c3dpdGNoKHQpe2Nhc2UiYm90dG9tIjpjYXNlImJvdHRvbS1yaWdodCI6Y2FzZSJib3R0b20tbGVmdCI6cj0xO2JyZWFrO2Nhc2UidG9wIjpjYXNlInRvcC1yaWdodCI6Y2FzZSJ0b3AtbGVmdCI6cj0wfXJldHVybntob3Jpem9udGFsQWxpZ246ZSx2ZXJ0aWNhbEFsaWduOnJ9fWZ1bmN0aW9uIFNsKHQsZSxyLG4saSl7aWYobnx8aSlmb3IodmFyIGE9dFtyXSxvPSh0W3JdLngrYS5tZXRyaWNzLmFkdmFuY2UqYS5zY2FsZSkqbixzPWU7czw9cjtzKyspdFtzXS54LT1vLHRbc10ueSs9aX1mdW5jdGlvbiBFbCh0LGUscixuLGksYSl7dmFyIG8scz10LmltYWdlO2lmKHMuY29udGVudCl7dmFyIGw9cy5jb250ZW50LGM9cy5waXhlbFJhdGlvfHwxO289W2xbMF0vYyxsWzFdL2Mscy5kaXNwbGF5U2l6ZVswXS1sWzJdL2Mscy5kaXNwbGF5U2l6ZVsxXS1sWzNdL2NdfXZhciB1LGYsaCxwLGQ9ZS5sZWZ0KmEsZz1lLnJpZ2h0KmE7IndpZHRoIj09PXJ8fCJib3RoIj09PXI/KHA9aVswXStkLW5bM10sZj1pWzBdK2crblsxXSk6Zj0ocD1pWzBdKyhkK2ctcy5kaXNwbGF5U2l6ZVswXSkvMikrcy5kaXNwbGF5U2l6ZVswXTt2YXIgbT1lLnRvcCphLHY9ZS5ib3R0b20qYTtyZXR1cm4iaGVpZ2h0Ij09PXJ8fCJib3RoIj09PXI/KHU9aVsxXSttLW5bMF0saD1pWzFdK3YrblsyXSk6aD0odT1pWzFdKyhtK3Ytcy5kaXNwbGF5U2l6ZVsxXSkvMikrcy5kaXNwbGF5U2l6ZVsxXSx7aW1hZ2U6cyx0b3A6dSxyaWdodDpmLGJvdHRvbTpoLGxlZnQ6cCxjb2xsaXNpb25QYWRkaW5nOm99fWJsWzEwXT0hMCxibFszMl09ITAsYmxbMzhdPSEwLGJsWzQwXT0hMCxibFs0MV09ITAsYmxbNDNdPSEwLGJsWzQ1XT0hMCxibFs0N109ITAsYmxbMTczXT0hMCxibFsxODNdPSEwLGJsWzgyMDNdPSEwLGJsWzgyMDhdPSEwLGJsWzgyMTFdPSEwLGJsWzgyMzFdPSEwO3ZhciBDbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuLGkpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5hbmdsZT1uLHZvaWQgMCE9PWkmJih0aGlzLnNlZ21lbnQ9aSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcy54LHRoaXMueSx0aGlzLmFuZ2xlLHRoaXMuc2VnbWVudCl9LGV9KGkpO2Z1bmN0aW9uIExsKHQsZSl7dmFyIHI9ZS5leHByZXNzaW9uO2lmKCJjb25zdGFudCI9PT1yLmtpbmQpcmV0dXJue2tpbmQ6ImNvbnN0YW50IixsYXlvdXRTaXplOnIuZXZhbHVhdGUobmV3IGlpKHQrMSkpfTtpZigic291cmNlIj09PXIua2luZClyZXR1cm57a2luZDoic291cmNlIn07Zm9yKHZhciBuPXIuem9vbVN0b3BzLGk9ci5pbnRlcnBvbGF0aW9uVHlwZSxhPTA7YTxuLmxlbmd0aCYmblthXTw9dDspYSsrO2Zvcih2YXIgbz1hPU1hdGgubWF4KDAsYS0xKTtvPG4ubGVuZ3RoJiZuW29dPHQrMTspbysrO289TWF0aC5taW4obi5sZW5ndGgtMSxvKTt2YXIgcz1uW2FdLGw9bltvXTtyZXR1cm4iY29tcG9zaXRlIj09PXIua2luZD97a2luZDoiY29tcG9zaXRlIixtaW5ab29tOnMsbWF4Wm9vbTpsLGludGVycG9sYXRpb25UeXBlOml9OntraW5kOiJjYW1lcmEiLG1pblpvb206cyxtYXhab29tOmwsbWluU2l6ZTpyLmV2YWx1YXRlKG5ldyBpaShzKSksbWF4U2l6ZTpyLmV2YWx1YXRlKG5ldyBpaShsKSksaW50ZXJwb2xhdGlvblR5cGU6aX19ZnVuY3Rpb24gSWwodCxlLHIpe3ZhciBuPWUudVNpemUsaT1yLmxvd2VyU2l6ZTtyZXR1cm4ic291cmNlIj09PXQua2luZD9pLzEyODoiY29tcG9zaXRlIj09PXQua2luZD9VZShpLzEyOCxyLnVwcGVyU2l6ZS8xMjgsZS51U2l6ZVQpOm59ZnVuY3Rpb24gUGwodCxlKXt2YXIgcj0wLG49MDtpZigiY29uc3RhbnQiPT09dC5raW5kKW49dC5sYXlvdXRTaXplO2Vsc2UgaWYoInNvdXJjZSIhPT10LmtpbmQpe3ZhciBpPXQuaW50ZXJwb2xhdGlvblR5cGUsYT1pP2wocnIuaW50ZXJwb2xhdGlvbkZhY3RvcihpLGUsdC5taW5ab29tLHQubWF4Wm9vbSksMCwxKTowOyJjYW1lcmEiPT09dC5raW5kP249VWUodC5taW5TaXplLHQubWF4U2l6ZSxhKTpyPWF9cmV0dXJue3VTaXplVDpyLHVTaXplOm59fURuKCJBbmNob3IiLENsKTt2YXIgemw9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsZ2V0U2l6ZURhdGE6TGwsZXZhbHVhdGVTaXplRm9yRmVhdHVyZTpJbCxldmFsdWF0ZVNpemVGb3Jab29tOlBsLFNJWkVfUEFDS19GQUNUT1I6MTI4fSk7ZnVuY3Rpb24gT2wodCxlLHIsbixpKXtpZih2b2lkIDA9PT1lLnNlZ21lbnQpcmV0dXJuITA7Zm9yKHZhciBhPWUsbz1lLnNlZ21lbnQrMSxzPTA7cz4tci8yOyl7aWYoLS1vPDApcmV0dXJuITE7cy09dFtvXS5kaXN0KGEpLGE9dFtvXX1zKz10W29dLmRpc3QodFtvKzFdKSxvKys7Zm9yKHZhciBsPVtdLGM9MDtzPHIvMjspe3ZhciB1PXRbb10sZj10W28rMV07aWYoIWYpcmV0dXJuITE7dmFyIGg9dFtvLTFdLmFuZ2xlVG8odSktdS5hbmdsZVRvKGYpO2ZvcihoPU1hdGguYWJzKChoKzMqTWF0aC5QSSklKDIqTWF0aC5QSSktTWF0aC5QSSksbC5wdXNoKHtkaXN0YW5jZTpzLGFuZ2xlRGVsdGE6aH0pLGMrPWg7cy1sWzBdLmRpc3RhbmNlPm47KWMtPWwuc2hpZnQoKS5hbmdsZURlbHRhO2lmKGM+aSlyZXR1cm4hMTtvKysscys9dS5kaXN0KGYpfXJldHVybiEwfWZ1bmN0aW9uIERsKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoLTE7cisrKWUrPXRbcl0uZGlzdCh0W3IrMV0pO3JldHVybiBlfWZ1bmN0aW9uIFJsKHQsZSxyKXtyZXR1cm4gdD8uNiplKnI6MH1mdW5jdGlvbiBGbCh0LGUpe3JldHVybiBNYXRoLm1heCh0P3QucmlnaHQtdC5sZWZ0OjAsZT9lLnJpZ2h0LWUubGVmdDowKX1mdW5jdGlvbiBCbCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVJsKHIsaSxhKSxzPUZsKHIsbikqYSxsPTAsYz1EbCh0KS8yLHU9MDt1PHQubGVuZ3RoLTE7dSsrKXt2YXIgZj10W3VdLGg9dFt1KzFdLHA9Zi5kaXN0KGgpO2lmKGwrcD5jKXt2YXIgZD0oYy1sKS9wLGc9VWUoZi54LGgueCxkKSxtPVVlKGYueSxoLnksZCksdj1uZXcgQ2woZyxtLGguYW5nbGVUbyhmKSx1KTtyZXR1cm4gdi5fcm91bmQoKSwhb3x8T2wodCx2LHMsbyxlKT92OnZvaWQgMH1sKz1wfX1mdW5jdGlvbiBObCh0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9UmwobixhLG8pLHU9RmwobixpKSxmPXUqbyxoPTA9PT10WzBdLnh8fHRbMF0ueD09PWx8fDA9PT10WzBdLnl8fHRbMF0ueT09PWw7cmV0dXJuIGUtZjxlLzQmJihlPWYrZS80KSxmdW5jdGlvbiB0KGUscixuLGksYSxvLHMsbCxjKXtmb3IodmFyIHU9by8yLGY9RGwoZSksaD0wLHA9ci1uLGQ9W10sZz0wO2c8ZS5sZW5ndGgtMTtnKyspe2Zvcih2YXIgbT1lW2ddLHY9ZVtnKzFdLHk9bS5kaXN0KHYpLHg9di5hbmdsZVRvKG0pO3ArbjxoK3k7KXt2YXIgYj0oKHArPW4pLWgpL3ksXz1VZShtLngsdi54LGIpLHc9VWUobS55LHYueSxiKTtpZihfPj0wJiZfPGMmJnc+PTAmJnc8YyYmcC11Pj0wJiZwK3U8PWYpe3ZhciBUPW5ldyBDbChfLHcseCxnKTtULl9yb3VuZCgpLGkmJiFPbChlLFQsbyxpLGEpfHxkLnB1c2goVCl9fWgrPXl9cmV0dXJuIGx8fGQubGVuZ3RofHxzfHwoZD10KGUsaC8yLG4saSxhLG8scywhMCxjKSksZH0odCxoP2UvMipzJWU6KHUvMisyKmEpKm8qcyVlLGUsYyxyLGYsaCwhMSxsKX1mdW5jdGlvbiBqbCh0LGUscixuLGEpe2Zvcih2YXIgbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspZm9yKHZhciBsPXRbc10sYz12b2lkIDAsdT0wO3U8bC5sZW5ndGgtMTt1Kyspe3ZhciBmPWxbdV0saD1sW3UrMV07Zi54PGUmJmgueDxlfHwoZi54PGU/Zj1uZXcgaShlLGYueSsoZS1mLngpLyhoLngtZi54KSooaC55LWYueSkpLl9yb3VuZCgpOmgueDxlJiYoaD1uZXcgaShlLGYueSsoZS1mLngpLyhoLngtZi54KSooaC55LWYueSkpLl9yb3VuZCgpKSxmLnk8ciYmaC55PHJ8fChmLnk8cj9mPW5ldyBpKGYueCsoci1mLnkpLyhoLnktZi55KSooaC54LWYueCkscikuX3JvdW5kKCk6aC55PHImJihoPW5ldyBpKGYueCsoci1mLnkpLyhoLnktZi55KSooaC54LWYueCkscikuX3JvdW5kKCkpLGYueD49biYmaC54Pj1ufHwoZi54Pj1uP2Y9bmV3IGkobixmLnkrKG4tZi54KS8oaC54LWYueCkqKGgueS1mLnkpKS5fcm91bmQoKTpoLng+PW4mJihoPW5ldyBpKG4sZi55KyhuLWYueCkvKGgueC1mLngpKihoLnktZi55KSkuX3JvdW5kKCkpLGYueT49YSYmaC55Pj1hfHwoZi55Pj1hP2Y9bmV3IGkoZi54KyhhLWYueSkvKGgueS1mLnkpKihoLngtZi54KSxhKS5fcm91bmQoKTpoLnk+PWEmJihoPW5ldyBpKGYueCsoYS1mLnkpLyhoLnktZi55KSooaC54LWYueCksYSkuX3JvdW5kKCkpLGMmJmYuZXF1YWxzKGNbYy5sZW5ndGgtMV0pfHxvLnB1c2goYz1bZl0pLGMucHVzaChoKSkpKSl9cmV0dXJuIG99ZnVuY3Rpb24gVWwodCxlLHIsbil7dmFyIGE9W10sbz10LmltYWdlLHM9by5waXhlbFJhdGlvLGw9by5wYWRkZWRSZWN0LnctMixjPW8ucGFkZGVkUmVjdC5oLTIsdT10LnJpZ2h0LXQubGVmdCxmPXQuYm90dG9tLXQudG9wLGg9by5zdHJldGNoWHx8W1swLGxdXSxwPW8uc3RyZXRjaFl8fFtbMCxjXV0sZD1mdW5jdGlvbih0LGUpe3JldHVybiB0K2VbMV0tZVswXX0sZz1oLnJlZHVjZShkLDApLG09cC5yZWR1Y2UoZCwwKSx2PWwtZyx5PWMtbSx4PTAsYj1nLF89MCx3PW0sVD0wLGs9dixNPTAsQT15O2lmKG8uY29udGVudCYmbil7dmFyIFM9by5jb250ZW50O3g9VmwoaCwwLFNbMF0pLF89VmwocCwwLFNbMV0pLGI9VmwoaCxTWzBdLFNbMl0pLHc9VmwocCxTWzFdLFNbM10pLFQ9U1swXS14LE09U1sxXS1fLGs9U1syXS1TWzBdLWIsQT1TWzNdLVNbMV0td312YXIgRT1mdW5jdGlvbihuLGEsbCxjKXt2YXIgaD1IbChuLnN0cmV0Y2gteCxiLHUsdC5sZWZ0KSxwPUdsKG4uZml4ZWQtVCxrLG4uc3RyZXRjaCxnKSxkPUhsKGEuc3RyZXRjaC1fLHcsZix0LnRvcCksdj1HbChhLmZpeGVkLU0sQSxhLnN0cmV0Y2gsbSkseT1IbChsLnN0cmV0Y2gteCxiLHUsdC5sZWZ0KSxTPUdsKGwuZml4ZWQtVCxrLGwuc3RyZXRjaCxnKSxFPUhsKGMuc3RyZXRjaC1fLHcsZix0LnRvcCksQz1HbChjLmZpeGVkLU0sQSxjLnN0cmV0Y2gsbSksTD1uZXcgaShoLGQpLEk9bmV3IGkoeSxkKSxQPW5ldyBpKHksRSksej1uZXcgaShoLEUpLE89bmV3IGkocC9zLHYvcyksRD1uZXcgaShTL3MsQy9zKSxSPWUqTWF0aC5QSS8xODA7aWYoUil7dmFyIEY9TWF0aC5zaW4oUiksQj1NYXRoLmNvcyhSKSxOPVtCLC1GLEYsQl07TC5fbWF0TXVsdChOKSxJLl9tYXRNdWx0KE4pLHouX21hdE11bHQoTiksUC5fbWF0TXVsdChOKX12YXIgaj1uLnN0cmV0Y2grbi5maXhlZCxVPWEuc3RyZXRjaCthLmZpeGVkO3JldHVybnt0bDpMLHRyOkksYmw6eixicjpQLHRleDp7eDpvLnBhZGRlZFJlY3QueCsxK2oseTpvLnBhZGRlZFJlY3QueSsxK1UsdzpsLnN0cmV0Y2grbC5maXhlZC1qLGg6Yy5zdHJldGNoK2MuZml4ZWQtVX0sd3JpdGluZ01vZGU6dm9pZCAwLGdseXBoT2Zmc2V0OlswLDBdLHNlY3Rpb25JbmRleDowLHBpeGVsT2Zmc2V0VEw6TyxwaXhlbE9mZnNldEJSOkQsbWluRm9udFNjYWxlWDprL3MvdSxtaW5Gb250U2NhbGVZOkEvcy9mLGlzU0RGOnJ9fTtpZihuJiYoby5zdHJldGNoWHx8by5zdHJldGNoWSkpZm9yKHZhciBDPXFsKGgsdixnKSxMPXFsKHAseSxtKSxJPTA7STxDLmxlbmd0aC0xO0krKylmb3IodmFyIFA9Q1tJXSx6PUNbSSsxXSxPPTA7TzxMLmxlbmd0aC0xO08rKylhLnB1c2goRShQLExbT10seixMW08rMV0pKTtlbHNlIGEucHVzaChFKHtmaXhlZDowLHN0cmV0Y2g6LTF9LHtmaXhlZDowLHN0cmV0Y2g6LTF9LHtmaXhlZDowLHN0cmV0Y2g6bCsxfSx7Zml4ZWQ6MCxzdHJldGNoOmMrMX0pKTtyZXR1cm4gYX1mdW5jdGlvbiBWbCh0LGUscil7Zm9yKHZhciBuPTAsaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07bis9TWF0aC5tYXgoZSxNYXRoLm1pbihyLG9bMV0pKS1NYXRoLm1heChlLE1hdGgubWluKHIsb1swXSkpfXJldHVybiBufWZ1bmN0aW9uIHFsKHQsZSxyKXtmb3IodmFyIG49W3tmaXhlZDotMSxzdHJldGNoOjB9XSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW9bMF0sbD1vWzFdLGM9bltuLmxlbmd0aC0xXTtuLnB1c2goe2ZpeGVkOnMtYy5zdHJldGNoLHN0cmV0Y2g6Yy5zdHJldGNofSksbi5wdXNoKHtmaXhlZDpzLWMuc3RyZXRjaCxzdHJldGNoOmMuc3RyZXRjaCsobC1zKX0pfXJldHVybiBuLnB1c2goe2ZpeGVkOmUrMSxzdHJldGNoOnJ9KSxufWZ1bmN0aW9uIEhsKHQsZSxyLG4pe3JldHVybiB0L2UqcitufWZ1bmN0aW9uIEdsKHQsZSxyLG4pe3JldHVybiB0LWUqci9ufXZhciBZbD1mdW5jdGlvbih0LGUscixuLGEsbyxzLGwsYyx1KXtpZih0aGlzLmJveFN0YXJ0SW5kZXg9dC5sZW5ndGgsYyl7dmFyIGY9by50b3AsaD1vLmJvdHRvbSxwPW8uY29sbGlzaW9uUGFkZGluZztwJiYoZi09cFsxXSxoKz1wWzNdKTt2YXIgZD1oLWY7ZD4wJiYoZD1NYXRoLm1heCgxMCxkKSx0aGlzLmNpcmNsZURpYW1ldGVyPWQpfWVsc2V7dmFyIGc9by50b3Aqcy1sLG09by5ib3R0b20qcytsLHY9by5sZWZ0KnMtbCx5PW8ucmlnaHQqcytsLHg9by5jb2xsaXNpb25QYWRkaW5nO2lmKHgmJih2LT14WzBdKnMsZy09eFsxXSpzLHkrPXhbMl0qcyxtKz14WzNdKnMpLHUpe3ZhciBiPW5ldyBpKHYsZyksXz1uZXcgaSh5LGcpLHc9bmV3IGkodixtKSxUPW5ldyBpKHksbSksaz11Kk1hdGguUEkvMTgwO2IuX3JvdGF0ZShrKSxfLl9yb3RhdGUoayksdy5fcm90YXRlKGspLFQuX3JvdGF0ZShrKSx2PU1hdGgubWluKGIueCxfLngsdy54LFQueCkseT1NYXRoLm1heChiLngsXy54LHcueCxULngpLGc9TWF0aC5taW4oYi55LF8ueSx3LnksVC55KSxtPU1hdGgubWF4KGIueSxfLnksdy55LFQueSl9dC5lbXBsYWNlQmFjayhlLngsZS55LHYsZyx5LG0scixuLGEpfXRoaXMuYm94RW5kSW5kZXg9dC5sZW5ndGh9LFdsPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPVhsKSx0aGlzLmRhdGE9dCx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuY29tcGFyZT1lLHRoaXMubGVuZ3RoPjApZm9yKHZhciByPSh0aGlzLmxlbmd0aD4+MSktMTtyPj0wO3ItLSl0aGlzLl9kb3duKHIpfTtmdW5jdGlvbiBYbCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiBabCh0LGUscil7dm9pZCAwPT09ZSYmKGU9MSksdm9pZCAwPT09ciYmKHI9ITEpO2Zvcih2YXIgbj0xLzAsYT0xLzAsbz0tMS8wLHM9LTEvMCxsPXRbMF0sYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdOyghY3x8dS54PG4pJiYobj11LngpLCghY3x8dS55PGEpJiYoYT11LnkpLCghY3x8dS54Pm8pJiYobz11LngpLCghY3x8dS55PnMpJiYocz11LnkpfXZhciBmPU1hdGgubWluKG8tbixzLWEpLGg9Zi8yLHA9bmV3IFdsKFtdLEpsKTtpZigwPT09ZilyZXR1cm4gbmV3IGkobixhKTtmb3IodmFyIGQ9bjtkPG87ZCs9Zilmb3IodmFyIGc9YTtnPHM7Zys9ZilwLnB1c2gobmV3IEtsKGQraCxnK2gsaCx0KSk7Zm9yKHZhciBtPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10WzBdLGE9MCxvPWkubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9aVthXSxjPWlbc10sdT1sLngqYy55LWMueCpsLnk7cis9KGwueCtjLngpKnUsbis9KGwueStjLnkpKnUsZSs9Myp1fXJldHVybiBuZXcgS2woci9lLG4vZSwwLHQpfSh0KSx2PXAubGVuZ3RoO3AubGVuZ3RoOyl7dmFyIHk9cC5wb3AoKTsoeS5kPm0uZHx8IW0uZCkmJihtPXksciYmY29uc29sZS5sb2coImZvdW5kIGJlc3QgJWQgYWZ0ZXIgJWQgcHJvYmVzIixNYXRoLnJvdW5kKDFlNCp5LmQpLzFlNCx2KSkseS5tYXgtbS5kPD1lfHwocC5wdXNoKG5ldyBLbCh5LnAueC0oaD15LmgvMikseS5wLnktaCxoLHQpKSxwLnB1c2gobmV3IEtsKHkucC54K2gseS5wLnktaCxoLHQpKSxwLnB1c2gobmV3IEtsKHkucC54LWgseS5wLnkraCxoLHQpKSxwLnB1c2gobmV3IEtsKHkucC54K2gseS5wLnkraCxoLHQpKSx2Kz00KX1yZXR1cm4gciYmKGNvbnNvbGUubG9nKCJudW0gcHJvYmVzOiAiK3YpLGNvbnNvbGUubG9nKCJiZXN0IGRpc3RhbmNlOiAiK20uZCkpLG0ucH1mdW5jdGlvbiBKbCh0LGUpe3JldHVybiBlLm1heC10Lm1heH1mdW5jdGlvbiBLbCh0LGUscixuKXt0aGlzLnA9bmV3IGkodCxlKSx0aGlzLmg9cix0aGlzLmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ITEsbj0xLzAsaT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgYT1lW2ldLG89MCxzPWEubGVuZ3RoLGw9cy0xO288cztsPW8rKyl7dmFyIGM9YVtvXSx1PWFbbF07Yy55PnQueSE9dS55PnQueSYmdC54PCh1LngtYy54KSoodC55LWMueSkvKHUueS1jLnkpK2MueCYmKHI9IXIpLG49TWF0aC5taW4obixHYSh0LGMsdSkpfXJldHVybihyPzE6LTEpKk1hdGguc3FydChuKX0odGhpcy5wLG4pLHRoaXMubWF4PXRoaXMuZCt0aGlzLmgqTWF0aC5TUVJUMn1XbC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0KXt0aGlzLmRhdGEucHVzaCh0KSx0aGlzLmxlbmd0aCsrLHRoaXMuX3VwKHRoaXMubGVuZ3RoLTEpfSxXbC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgdD10aGlzLmRhdGFbMF0sZT10aGlzLmRhdGEucG9wKCk7cmV0dXJuIHRoaXMubGVuZ3RoLS0sdGhpcy5sZW5ndGg+MCYmKHRoaXMuZGF0YVswXT1lLHRoaXMuX2Rvd24oMCkpLHR9fSxXbC5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGFbMF19LFdsLnByb3RvdHlwZS5fdXA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YSxyPXRoaXMuY29tcGFyZSxuPWVbdF07dD4wOyl7dmFyIGk9dC0xPj4xLGE9ZVtpXTtpZihyKG4sYSk+PTApYnJlYWs7ZVt0XT1hLHQ9aX1lW3RdPW59LFdsLnByb3RvdHlwZS5fZG93bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5kYXRhLHI9dGhpcy5jb21wYXJlLG49dGhpcy5sZW5ndGg+PjEsaT1lW3RdO3Q8bjspe3ZhciBhPTErKHQ8PDEpLG89ZVthXSxzPWErMTtpZihzPHRoaXMubGVuZ3RoJiZyKGVbc10sbyk8MCYmKGE9cyxvPWVbc10pLHIobyxpKT49MClicmVhaztlW3RdPW8sdD1hfWVbdF09aX07dmFyIFFsPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtmdW5jdGlvbiAkbCh0LGUpe3JldHVybiBlWzFdIT09UWw/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTAsaT0wO3N3aXRjaChlPU1hdGguYWJzKGUpLHI9TWF0aC5hYnMociksdCl7Y2FzZSJ0b3AtcmlnaHQiOmNhc2UidG9wLWxlZnQiOmNhc2UidG9wIjppPXItNzticmVhaztjYXNlImJvdHRvbS1yaWdodCI6Y2FzZSJib3R0b20tbGVmdCI6Y2FzZSJib3R0b20iOmk9Ny1yfXN3aXRjaCh0KXtjYXNlInRvcC1yaWdodCI6Y2FzZSJib3R0b20tcmlnaHQiOmNhc2UicmlnaHQiOm49LWU7YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJib3R0b20tbGVmdCI6Y2FzZSJsZWZ0IjpuPWV9cmV0dXJuW24saV19KHQsZVswXSxlWzFdKTpmdW5jdGlvbih0LGUpe3ZhciByPTAsbj0wO2U8MCYmKGU9MCk7dmFyIGk9ZS9NYXRoLnNxcnQoMik7c3dpdGNoKHQpe2Nhc2UidG9wLXJpZ2h0IjpjYXNlInRvcC1sZWZ0IjpuPWktNzticmVhaztjYXNlImJvdHRvbS1yaWdodCI6Y2FzZSJib3R0b20tbGVmdCI6bj03LWk7YnJlYWs7Y2FzZSJib3R0b20iOm49Ny1lO2JyZWFrO2Nhc2UidG9wIjpuPWUtN31zd2l0Y2godCl7Y2FzZSJ0b3AtcmlnaHQiOmNhc2UiYm90dG9tLXJpZ2h0IjpyPS1pO2JyZWFrO2Nhc2UidG9wLWxlZnQiOmNhc2UiYm90dG9tLWxlZnQiOnI9aTticmVhaztjYXNlImxlZnQiOnI9ZTticmVhaztjYXNlInJpZ2h0IjpyPS1lfXJldHVybltyLG5dfSh0LGVbMF0pfWZ1bmN0aW9uIHRjKHQpe3N3aXRjaCh0KXtjYXNlInJpZ2h0IjpjYXNlInRvcC1yaWdodCI6Y2FzZSJib3R0b20tcmlnaHQiOnJldHVybiJyaWdodCI7Y2FzZSJsZWZ0IjpjYXNlInRvcC1sZWZ0IjpjYXNlImJvdHRvbS1sZWZ0IjpyZXR1cm4ibGVmdCJ9cmV0dXJuImNlbnRlciJ9ZnVuY3Rpb24gZWModCxlLHIsbixhLG8scyxsLGMsdSxmLGgscCxkLGcpe3ZhciBtPWZ1bmN0aW9uKHQsZSxyLG4sYSxvLHMsbCl7Zm9yKHZhciBjPW4ubGF5b3V0LmdldCgidGV4dC1yb3RhdGUiKS5ldmFsdWF0ZShvLHt9KSpNYXRoLlBJLzE4MCx1PVtdLGY9MCxoPWUucG9zaXRpb25lZExpbmVzO2Y8aC5sZW5ndGg7Zis9MSlmb3IodmFyIHA9aFtmXSxkPTAsZz1wLnBvc2l0aW9uZWRHbHlwaHM7ZDxnLmxlbmd0aDtkKz0xKXt2YXIgbT1nW2RdO2lmKG0ucmVjdCl7dmFyIHY9bS5yZWN0fHx7fSx5PTQseD0hMCxiPTEsXz0wLHc9KGF8fGwpJiZtLnZlcnRpY2FsLFQ9bS5tZXRyaWNzLmFkdmFuY2UqbS5zY2FsZS8yO2lmKGwmJmUudmVydGljYWxpemFibGUmJihfPXAubGluZU9mZnNldC8yLShtLmltYWdlTmFtZT8tKDI0LW0ubWV0cmljcy53aWR0aCptLnNjYWxlKS8yOjI0KihtLnNjYWxlLTEpKSksbS5pbWFnZU5hbWUpe3ZhciBrPXNbbS5pbWFnZU5hbWVdO3g9ay5zZGYseT0xLyhiPWsucGl4ZWxSYXRpbyl9dmFyIE09YT9bbS54K1QsbS55XTpbMCwwXSxBPWE/WzAsMF06W20ueCtUK3JbMF0sbS55K3JbMV0tX10sUz1bMCwwXTt3JiYoUz1BLEE9WzAsMF0pO3ZhciBFPShtLm1ldHJpY3MubGVmdC15KSptLnNjYWxlLVQrQVswXSxDPSgtbS5tZXRyaWNzLnRvcC15KSptLnNjYWxlK0FbMV0sTD1FK3YudyptLnNjYWxlL2IsST1DK3YuaCptLnNjYWxlL2IsUD1uZXcgaShFLEMpLHo9bmV3IGkoTCxDKSxPPW5ldyBpKEUsSSksRD1uZXcgaShMLEkpO2lmKHcpe3ZhciBSPW5ldyBpKC1ULFQtIC0xNyksRj0tTWF0aC5QSS8yLEI9MTItVCxOPW5ldyBpKDIyLUIsLShtLmltYWdlTmFtZT9COjApKSxqPW5ldyhGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShpLFtudWxsXS5jb25jYXQoUykpKTtQLl9yb3RhdGVBcm91bmQoRixSKS5fYWRkKE4pLl9hZGQoaiksei5fcm90YXRlQXJvdW5kKEYsUikuX2FkZChOKS5fYWRkKGopLE8uX3JvdGF0ZUFyb3VuZChGLFIpLl9hZGQoTikuX2FkZChqKSxELl9yb3RhdGVBcm91bmQoRixSKS5fYWRkKE4pLl9hZGQoail9aWYoYyl7dmFyIFU9TWF0aC5zaW4oYyksVj1NYXRoLmNvcyhjKSxxPVtWLC1VLFUsVl07UC5fbWF0TXVsdChxKSx6Ll9tYXRNdWx0KHEpLE8uX21hdE11bHQocSksRC5fbWF0TXVsdChxKX12YXIgSD1uZXcgaSgwLDApLEc9bmV3IGkoMCwwKTt1LnB1c2goe3RsOlAsdHI6eixibDpPLGJyOkQsdGV4OnYsd3JpdGluZ01vZGU6ZS53cml0aW5nTW9kZSxnbHlwaE9mZnNldDpNLHNlY3Rpb25JbmRleDptLnNlY3Rpb25JbmRleCxpc1NERjp4LHBpeGVsT2Zmc2V0VEw6SCxwaXhlbE9mZnNldEJSOkcsbWluRm9udFNjYWxlWDowLG1pbkZvbnRTY2FsZVk6MH0pfX1yZXR1cm4gdX0oMCxyLGwsYSxvLHMsbix0LmFsbG93VmVydGljYWxQbGFjZW1lbnQpLHY9dC50ZXh0U2l6ZURhdGEseT1udWxsOyJzb3VyY2UiPT09di5raW5kPyh5PVsxMjgqYS5sYXlvdXQuZ2V0KCJ0ZXh0LXNpemUiKS5ldmFsdWF0ZShzLHt9KV0pWzBdPjMyNjQwJiZfKHQubGF5ZXJJZHNbMF0rJzogVmFsdWUgZm9yICJ0ZXh0LXNpemUiIGlzID49IDI1NS4gUmVkdWNlIHlvdXIgInRleHQtc2l6ZSIuJyk6ImNvbXBvc2l0ZSI9PT12LmtpbmQmJigoeT1bMTI4KmQuY29tcG9zaXRlVGV4dFNpemVzWzBdLmV2YWx1YXRlKHMse30sZyksMTI4KmQuY29tcG9zaXRlVGV4dFNpemVzWzFdLmV2YWx1YXRlKHMse30sZyldKVswXT4zMjY0MHx8eVsxXT4zMjY0MCkmJl8odC5sYXllcklkc1swXSsnOiBWYWx1ZSBmb3IgInRleHQtc2l6ZSIgaXMgPj0gMjU1LiBSZWR1Y2UgeW91ciAidGV4dC1zaXplIi4nKSx0LmFkZFN5bWJvbHModC50ZXh0LG0seSxsLG8scyx1LGUsYy5saW5lU3RhcnRJbmRleCxjLmxpbmVMZW5ndGgscCxnKTtmb3IodmFyIHg9MCxiPWY7eDxiLmxlbmd0aDt4Kz0xKWhbYlt4XV09dC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aC0xO3JldHVybiA0Km0ubGVuZ3RofWZ1bmN0aW9uIHJjKHQpe2Zvcih2YXIgZSBpbiB0KXJldHVybiB0W2VdO3JldHVybiBudWxsfWZ1bmN0aW9uIG5jKHQsZSxyLG4pe3ZhciBpPXQuY29tcGFyZVRleHQ7aWYoZSBpbiBpKXtmb3IodmFyIGE9aVtlXSxvPWEubGVuZ3RoLTE7bz49MDtvLS0paWYobi5kaXN0KGFbb10pPHIpcmV0dXJuITB9ZWxzZSBpW2VdPVtdO3JldHVybiBpW2VdLnB1c2gobiksITF9dmFyIGljPWdzLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLGFjPVt7bmFtZToiYV9mYWRlX29wYWNpdHkiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50OCIsb2Zmc2V0OjB9XTtmdW5jdGlvbiBvYyh0LGUscixuLGksYSxvLHMsbCxjLHUsZixoKXt2YXIgcD1zP01hdGgubWluKDMyNjQwLE1hdGgucm91bmQoc1swXSkpOjAsZD1zP01hdGgubWluKDMyNjQwLE1hdGgucm91bmQoc1sxXSkpOjA7dC5lbXBsYWNlQmFjayhlLHIsTWF0aC5yb3VuZCgzMipuKSxNYXRoLnJvdW5kKDMyKmkpLGEsbywocDw8MSkrKGw/MTowKSxkLDE2KmMsMTYqdSwyNTYqZiwyNTYqaCl9ZnVuY3Rpb24gc2ModCxlLHIpe3QuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKX1mdW5jdGlvbiBsYyh0KXtmb3IodmFyIGU9MCxyPXQuc2VjdGlvbnM7ZTxyLmxlbmd0aDtlKz0xKWlmKFhuKHJbZV0udGV4dCkpcmV0dXJuITA7cmV0dXJuITF9dmFyIGNjPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IExpLHRoaXMuaW5kZXhBcnJheT1uZXcgRmksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9dCx0aGlzLnNlZ21lbnRzPW5ldyBpYSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheT1uZXcgSWksdGhpcy5vcGFjaXR5VmVydGV4QXJyYXk9bmV3IFBpLHRoaXMucGxhY2VkU3ltYm9sQXJyYXk9bmV3IEppfTtjYy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgmJjA9PT10aGlzLmluZGV4QXJyYXkubGVuZ3RoJiYwPT09dGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoJiYwPT09dGhpcy5vcGFjaXR5VmVydGV4QXJyYXkubGVuZ3RofSxjYy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuaXNFbXB0eSgpfHwociYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksRHMubWVtYmVycyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSxlKSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksUnMubWVtYmVycywhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMub3BhY2l0eVZlcnRleEFycmF5LGFjLCEwKSx0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuaXRlbVNpemU9MSksKHJ8fG4pJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCkpfSxjYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlci5kZXN0cm95KCkpfSxEbigiU3ltYm9sQnVmZmVycyIsY2MpO3ZhciB1Yz1mdW5jdGlvbih0LGUscil7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgdCx0aGlzLmxheW91dEF0dHJpYnV0ZXM9ZSx0aGlzLmluZGV4QXJyYXk9bmV3IHIsdGhpcy5zZWdtZW50cz1uZXcgaWEsdGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheT1uZXcgUml9O3VjLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmxheW91dEF0dHJpYnV0ZXMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXksRnMubWVtYmVycywhMCl9LHVjLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIuZGVzdHJveSgpKX0sRG4oIkNvbGxpc2lvbkJ1ZmZlcnMiLHVjKTt2YXIgZmM9ZnVuY3Rpb24odCl7dGhpcy5jb2xsaXNpb25Cb3hBcnJheT10LmNvbGxpc2lvbkJveEFycmF5LHRoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyx0aGlzLnNvdXJjZUxheWVySW5kZXg9dC5zb3VyY2VMYXllckluZGV4LHRoaXMuaGFzUGF0dGVybj0hMSx0aGlzLmhhc1JUTFRleHQ9ITEsdGhpcy5zb3J0S2V5UmFuZ2VzPVtdLHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXk9W10sdGhpcy5wbGFjZW1lbnRJbnZQcm9qTWF0cml4PWVvKFtdKSx0aGlzLnBsYWNlbWVudFZpZXdwb3J0TWF0cml4PWVvKFtdKTt2YXIgZT10aGlzLmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlczt0aGlzLnRleHRTaXplRGF0YT1MbCh0aGlzLnpvb20sZVsidGV4dC1zaXplIl0pLHRoaXMuaWNvblNpemVEYXRhPUxsKHRoaXMuem9vbSxlWyJpY29uLXNpemUiXSk7dmFyIHI9dGhpcy5sYXllcnNbMF0ubGF5b3V0LG49ci5nZXQoInN5bWJvbC1zb3J0LWtleSIpLGk9ci5nZXQoInN5bWJvbC16LW9yZGVyIik7dGhpcy5zb3J0RmVhdHVyZXNCeUtleT0idmlld3BvcnQteSIhPT1pJiZ2b2lkIDAhPT1uLmNvbnN0YW50T3IoMSksdGhpcy5zb3J0RmVhdHVyZXNCeVk9KCJ2aWV3cG9ydC15Ij09PWl8fCJhdXRvIj09PWkmJiF0aGlzLnNvcnRGZWF0dXJlc0J5S2V5KSYmKHIuZ2V0KCJ0ZXh0LWFsbG93LW92ZXJsYXAiKXx8ci5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpfHxyLmdldCgidGV4dC1pZ25vcmUtcGxhY2VtZW50Iil8fHIuZ2V0KCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiKSksInBvaW50Ij09PXIuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikmJih0aGlzLndyaXRpbmdNb2Rlcz1yLmdldCgidGV4dC13cml0aW5nLW1vZGUiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBnbFt0XX0pKSksdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzPXRoaXMubGF5ZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksdGhpcy5zb3VyY2VJRD10LnNvdXJjZUlEfTtmYy5wcm90b3R5cGUuY3JlYXRlQXJyYXlzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PW5ldyBjYyhuZXcgSWEoRHMubWVtYmVycyx0aGlzLmxheWVycyx0aGlzLnpvb20sKGZ1bmN0aW9uKHQpe3JldHVybi9edGV4dC8udGVzdCh0KX0pKSksdGhpcy5pY29uPW5ldyBjYyhuZXcgSWEoRHMubWVtYmVycyx0aGlzLmxheWVycyx0aGlzLnpvb20sKGZ1bmN0aW9uKHQpe3JldHVybi9eaWNvbi8udGVzdCh0KX0pKSksdGhpcy5nbHlwaE9mZnNldEFycmF5PW5ldyAkaSx0aGlzLmxpbmVWZXJ0ZXhBcnJheT1uZXcgdGEsdGhpcy5zeW1ib2xJbnN0YW5jZXM9bmV3IFFpfSxmYy5wcm90b3R5cGUuY2FsY3VsYXRlR2x5cGhEZXBlbmRlbmNpZXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihlW3QuY2hhckNvZGVBdChhKV09ITAsKHJ8fG4pJiZpKXt2YXIgbz1Vc1t0LmNoYXJBdChhKV07byYmKGVbby5jaGFyQ29kZUF0KDApXT0hMCl9fSxmYy5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGF5ZXJzWzBdLGk9bi5sYXlvdXQsYT1pLmdldCgidGV4dC1mb250Iiksbz1pLmdldCgidGV4dC1maWVsZCIpLHM9aS5nZXQoImljb24taW1hZ2UiKSxsPSgiY29uc3RhbnQiIT09by52YWx1ZS5raW5kfHxvLnZhbHVlLnZhbHVlIGluc3RhbmNlb2YgdGUmJiFvLnZhbHVlLnZhbHVlLmlzRW1wdHkoKXx8by52YWx1ZS52YWx1ZS50b1N0cmluZygpLmxlbmd0aD4wKSYmKCJjb25zdGFudCIhPT1hLnZhbHVlLmtpbmR8fGEudmFsdWUudmFsdWUubGVuZ3RoPjApLGM9ImNvbnN0YW50IiE9PXMudmFsdWUua2luZHx8ISFzLnZhbHVlLnZhbHVlfHxPYmplY3Qua2V5cyhzLnBhcmFtZXRlcnMpLmxlbmd0aD4wLHU9aS5nZXQoInN5bWJvbC1zb3J0LWtleSIpO2lmKHRoaXMuZmVhdHVyZXM9W10sbHx8Yyl7Zm9yKHZhciBmPWUuaWNvbkRlcGVuZGVuY2llcyxoPWUuZ2x5cGhEZXBlbmRlbmNpZXMscD1lLmF2YWlsYWJsZUltYWdlcyxkPW5ldyBpaSh0aGlzLnpvb20pLGc9MCxtPXQ7ZzxtLmxlbmd0aDtnKz0xKXt2YXIgdj1tW2ddLHk9di5mZWF0dXJlLHg9di5pZCxiPXYuaW5kZXgsXz12LnNvdXJjZUxheWVySW5kZXgsdz1uLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeSxUPXt0eXBlOnkudHlwZSxpZDp4LHByb3BlcnRpZXM6eS5wcm9wZXJ0aWVzLGdlb21ldHJ5Onc/RGEoeSk6W119O2lmKG4uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKGQsVCxyKSl7d3x8KFQuZ2VvbWV0cnk9RGEoeSkpO3ZhciBrPXZvaWQgMDtpZihsKXt2YXIgTT1uLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygidGV4dC1maWVsZCIsVCxyLHApLEE9dGUuZmFjdG9yeShNKTtsYyhBKSYmKHRoaXMuaGFzUlRMVGV4dD0hMCksKCF0aGlzLmhhc1JUTFRleHR8fCJ1bmF2YWlsYWJsZSI9PT1laSgpfHx0aGlzLmhhc1JUTFRleHQmJm5pLmlzUGFyc2VkKCkpJiYoaz1qcyhBLG4sVCkpfXZhciBTPXZvaWQgMDtpZihjKXt2YXIgRT1uLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygiaWNvbi1pbWFnZSIsVCxyLHApO1M9RSBpbnN0YW5jZW9mIGVlP0U6ZWUuZnJvbVN0cmluZyhFKX1pZihrfHxTKXt2YXIgQz10aGlzLnNvcnRGZWF0dXJlc0J5S2V5P3UuZXZhbHVhdGUoVCx7fSxyKTp2b2lkIDAsTD17aWQ6eCx0ZXh0OmssaWNvbjpTLGluZGV4OmIsc291cmNlTGF5ZXJJbmRleDpfLGdlb21ldHJ5OkRhKHkpLHByb3BlcnRpZXM6eS5wcm9wZXJ0aWVzLHR5cGU6aWNbeS50eXBlXSxzb3J0S2V5OkN9O2lmKHRoaXMuZmVhdHVyZXMucHVzaChMKSxTJiYoZltTLm5hbWVdPSEwKSxrKXt2YXIgST1hLmV2YWx1YXRlKFQse30scikuam9pbigiLCIpLFA9Im1hcCI9PT1pLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmInBvaW50IiE9PWkuZ2V0KCJzeW1ib2wtcGxhY2VtZW50Iik7dGhpcy5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50PXRoaXMud3JpdGluZ01vZGVzJiZ0aGlzLndyaXRpbmdNb2Rlcy5pbmRleE9mKGdsLnZlcnRpY2FsKT49MDtmb3IodmFyIHo9MCxPPWsuc2VjdGlvbnM7ejxPLmxlbmd0aDt6Kz0xKXt2YXIgRD1PW3pdO2lmKEQuaW1hZ2UpZltELmltYWdlLm5hbWVdPSEwO2Vsc2V7dmFyIFI9cW4oay50b1N0cmluZygpKSxGPUQuZm9udFN0YWNrfHxJLEI9aFtGXT1oW0ZdfHx7fTt0aGlzLmNhbGN1bGF0ZUdseXBoRGVwZW5kZW5jaWVzKEQudGV4dCxCLFAsdGhpcy5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50LFIpfX19fX19ImxpbmUiPT09aS5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSYmKHRoaXMuZmVhdHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj17fSxuPVtdLGk9MDtmdW5jdGlvbiBhKGUpe24ucHVzaCh0W2VdKSxpKyt9ZnVuY3Rpb24gbyh0LGUsaSl7dmFyIGE9clt0XTtyZXR1cm4gZGVsZXRlIHJbdF0scltlXT1hLG5bYV0uZ2VvbWV0cnlbMF0ucG9wKCksblthXS5nZW9tZXRyeVswXT1uW2FdLmdlb21ldHJ5WzBdLmNvbmNhdChpWzBdKSxhfWZ1bmN0aW9uIHModCxyLGkpe3ZhciBhPWVbcl07cmV0dXJuIGRlbGV0ZSBlW3JdLGVbdF09YSxuW2FdLmdlb21ldHJ5WzBdLnNoaWZ0KCksblthXS5nZW9tZXRyeVswXT1pWzBdLmNvbmNhdChuW2FdLmdlb21ldHJ5WzBdKSxhfWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuPXI/ZVswXVtlWzBdLmxlbmd0aC0xXTplWzBdWzBdO3JldHVybiB0KyI6IituLngrIjoiK24ueX1mb3IodmFyIGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIHU9dFtjXSxmPXUuZ2VvbWV0cnksaD11LnRleHQ/dS50ZXh0LnRvU3RyaW5nKCk6bnVsbDtpZihoKXt2YXIgcD1sKGgsZiksZD1sKGgsZiwhMCk7aWYocCBpbiByJiZkIGluIGUmJnJbcF0hPT1lW2RdKXt2YXIgZz1zKHAsZCxmKSxtPW8ocCxkLG5bZ10uZ2VvbWV0cnkpO2RlbGV0ZSBlW3BdLGRlbGV0ZSByW2RdLHJbbChoLG5bbV0uZ2VvbWV0cnksITApXT1tLG5bZ10uZ2VvbWV0cnk9bnVsbH1lbHNlIHAgaW4gcj9vKHAsZCxmKTpkIGluIGU/cyhwLGQsZik6KGEoYyksZVtwXT1pLTEscltkXT1pLTEpfWVsc2UgYShjKX1yZXR1cm4gbi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdlb21ldHJ5fSkpfSh0aGlzLmZlYXR1cmVzKSksdGhpcy5zb3J0RmVhdHVyZXNCeUtleSYmdGhpcy5mZWF0dXJlcy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpfX0sZmMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJih0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLmxheWVycyxyKSx0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLmxheWVycyxyKSl9LGZjLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGgmJiF0aGlzLmhhc1JUTFRleHR9LGZjLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMudGV4dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR8fHRoaXMuaWNvbi5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR9LGZjLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7IXRoaXMudXBsb2FkZWQmJnRoaXMuaGFzRGVidWdEYXRhKCkmJih0aGlzLnRleHRDb2xsaXNpb25Cb3gudXBsb2FkKHQpLHRoaXMuaWNvbkNvbGxpc2lvbkJveC51cGxvYWQodCkpLHRoaXMudGV4dC51cGxvYWQodCx0aGlzLnNvcnRGZWF0dXJlc0J5WSwhdGhpcy51cGxvYWRlZCx0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkKSx0aGlzLmljb24udXBsb2FkKHQsdGhpcy5zb3J0RmVhdHVyZXNCeVksIXRoaXMudXBsb2FkZWQsdGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCksdGhpcy51cGxvYWRlZD0hMH0sZmMucHJvdG90eXBlLmRlc3Ryb3lEZWJ1Z0RhdGE9ZnVuY3Rpb24oKXt0aGlzLnRleHRDb2xsaXNpb25Cb3guZGVzdHJveSgpLHRoaXMuaWNvbkNvbGxpc2lvbkJveC5kZXN0cm95KCl9LGZjLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy50ZXh0LmRlc3Ryb3koKSx0aGlzLmljb24uZGVzdHJveSgpLHRoaXMuaGFzRGVidWdEYXRhKCkmJnRoaXMuZGVzdHJveURlYnVnRGF0YSgpfSxmYy5wcm90b3R5cGUuYWRkVG9MaW5lVmVydGV4QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxpbmVWZXJ0ZXhBcnJheS5sZW5ndGg7aWYodm9pZCAwIT09dC5zZWdtZW50KXtmb3IodmFyIG49dC5kaXN0KGVbdC5zZWdtZW50KzFdKSxpPXQuZGlzdChlW3Quc2VnbWVudF0pLGE9e30sbz10LnNlZ21lbnQrMTtvPGUubGVuZ3RoO28rKylhW29dPXt4OmVbb10ueCx5OmVbb10ueSx0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjpufSxvPGUubGVuZ3RoLTEmJihuKz1lW28rMV0uZGlzdChlW29dKSk7Zm9yKHZhciBzPXQuc2VnbWVudHx8MDtzPj0wO3MtLSlhW3NdPXt4OmVbc10ueCx5OmVbc10ueSx0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjppfSxzPjAmJihpKz1lW3MtMV0uZGlzdChlW3NdKSk7Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBjPWFbbF07dGhpcy5saW5lVmVydGV4QXJyYXkuZW1wbGFjZUJhY2soYy54LGMueSxjLnRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKX19cmV0dXJue2xpbmVTdGFydEluZGV4OnIsbGluZUxlbmd0aDp0aGlzLmxpbmVWZXJ0ZXhBcnJheS5sZW5ndGgtcn19LGZjLnByb3RvdHlwZS5hZGRTeW1ib2xzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKXtmb3IodmFyIGg9dC5pbmRleEFycmF5LHA9dC5sYXlvdXRWZXJ0ZXhBcnJheSxkPXQuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCplLmxlbmd0aCxwLGgsYS5zb3J0S2V5KSxnPXRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGgsbT1kLnZlcnRleExlbmd0aCx2PXRoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmbz09PWdsLnZlcnRpY2FsP01hdGguUEkvMjowLHk9YS50ZXh0JiZhLnRleHQuc2VjdGlvbnMseD0wO3g8ZS5sZW5ndGg7eCsrKXt2YXIgYj1lW3hdLF89Yi50bCx3PWIudHIsVD1iLmJsLGs9Yi5icixNPWIudGV4LEE9Yi5waXhlbE9mZnNldFRMLFM9Yi5waXhlbE9mZnNldEJSLEU9Yi5taW5Gb250U2NhbGVYLEM9Yi5taW5Gb250U2NhbGVZLEw9Yi5nbHlwaE9mZnNldCxJPWIuaXNTREYsUD1iLnNlY3Rpb25JbmRleCx6PWQudmVydGV4TGVuZ3RoLE89TFsxXTtvYyhwLHMueCxzLnksXy54LE8rXy55LE0ueCxNLnkscixJLEEueCxBLnksRSxDKSxvYyhwLHMueCxzLnksdy54LE8rdy55LE0ueCtNLncsTS55LHIsSSxTLngsQS55LEUsQyksb2MocCxzLngscy55LFQueCxPK1QueSxNLngsTS55K00uaCxyLEksQS54LFMueSxFLEMpLG9jKHAscy54LHMueSxrLngsTytrLnksTS54K00udyxNLnkrTS5oLHIsSSxTLngsUy55LEUsQyksc2ModC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXkscyx2KSxoLmVtcGxhY2VCYWNrKHoseisxLHorMiksaC5lbXBsYWNlQmFjayh6KzEseisyLHorMyksZC52ZXJ0ZXhMZW5ndGgrPTQsZC5wcmltaXRpdmVMZW5ndGgrPTIsdGhpcy5nbHlwaE9mZnNldEFycmF5LmVtcGxhY2VCYWNrKExbMF0pLHghPT1lLmxlbmd0aC0xJiZQPT09ZVt4KzFdLnNlY3Rpb25JbmRleHx8dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyhwLmxlbmd0aCxhLGEuaW5kZXgse30sZix5JiZ5W1BdKX10LnBsYWNlZFN5bWJvbEFycmF5LmVtcGxhY2VCYWNrKHMueCxzLnksZyx0aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoLWcsbSxsLGMscy5zZWdtZW50LHI/clswXTowLHI/clsxXTowLG5bMF0sblsxXSxvLDAsITEsMCx1KX0sZmMucHJvdG90eXBlLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIGUuZW1wbGFjZUJhY2soMCwwKSx0LmVtcGxhY2VCYWNrKHIueCxyLnksbixpLE1hdGgucm91bmQoYS54KSxNYXRoLnJvdW5kKGEueSkpfSxmYy5wcm90b3R5cGUuYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcz1mdW5jdGlvbih0LGUscixuLGEsbyxzKXt2YXIgbD1hLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsYS5sYXlvdXRWZXJ0ZXhBcnJheSxhLmluZGV4QXJyYXkpLGM9bC52ZXJ0ZXhMZW5ndGgsdT1hLmxheW91dFZlcnRleEFycmF5LGY9YS5jb2xsaXNpb25WZXJ0ZXhBcnJheSxoPXMuYW5jaG9yWCxwPXMuYW5jaG9yWTt0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleCh1LGYsbyxoLHAsbmV3IGkodCxlKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgodSxmLG8saCxwLG5ldyBpKHIsZSkpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KHUsZixvLGgscCxuZXcgaShyLG4pKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleCh1LGYsbyxoLHAsbmV3IGkodCxuKSksbC52ZXJ0ZXhMZW5ndGgrPTQ7dmFyIGQ9YS5pbmRleEFycmF5O2QuZW1wbGFjZUJhY2soYyxjKzEpLGQuZW1wbGFjZUJhY2soYysxLGMrMiksZC5lbXBsYWNlQmFjayhjKzIsYyszKSxkLmVtcGxhY2VCYWNrKGMrMyxjKSxsLnByaW1pdGl2ZUxlbmd0aCs9NH0sZmMucHJvdG90eXBlLmFkZERlYnVnQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPXQ7aTxlO2krKyl7dmFyIGE9dGhpcy5jb2xsaXNpb25Cb3hBcnJheS5nZXQoaSk7dGhpcy5hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRpY2VzKGEueDEsYS55MSxhLngyLGEueTIsbj90aGlzLnRleHRDb2xsaXNpb25Cb3g6dGhpcy5pY29uQ29sbGlzaW9uQm94LGEuYW5jaG9yUG9pbnQscil9fSxmYy5wcm90b3R5cGUuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnM9ZnVuY3Rpb24oKXt0aGlzLmhhc0RlYnVnRGF0YSgpJiZ0aGlzLmRlc3Ryb3lEZWJ1Z0RhdGEoKSx0aGlzLnRleHRDb2xsaXNpb25Cb3g9bmV3IHVjKE9pLEJzLm1lbWJlcnMscWkpLHRoaXMuaWNvbkNvbGxpc2lvbkJveD1uZXcgdWMoT2ksQnMubWVtYmVycyxxaSk7Zm9yKHZhciB0PTA7dDx0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7dCsrKXt2YXIgZT10aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQodCk7dGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKGUudGV4dEJveFN0YXJ0SW5kZXgsZS50ZXh0Qm94RW5kSW5kZXgsZSwhMCksdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKGUudmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCxlLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LGUsITApLHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhlLmljb25Cb3hTdGFydEluZGV4LGUuaWNvbkJveEVuZEluZGV4LGUsITEpLHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhlLnZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgsZS52ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCxlLCExKX19LGZjLnByb3RvdHlwZS5fZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlc0ZvclN5bWJvbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7Zm9yKHZhciBjPXt9LHU9ZTt1PHI7dSsrKXt2YXIgZj10LmdldCh1KTtjLnRleHRCb3g9e3gxOmYueDEseTE6Zi55MSx4MjpmLngyLHkyOmYueTIsYW5jaG9yUG9pbnRYOmYuYW5jaG9yUG9pbnRYLGFuY2hvclBvaW50WTpmLmFuY2hvclBvaW50WX0sYy50ZXh0RmVhdHVyZUluZGV4PWYuZmVhdHVyZUluZGV4O2JyZWFrfWZvcih2YXIgaD1uO2g8aTtoKyspe3ZhciBwPXQuZ2V0KGgpO2MudmVydGljYWxUZXh0Qm94PXt4MTpwLngxLHkxOnAueTEseDI6cC54Mix5MjpwLnkyLGFuY2hvclBvaW50WDpwLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6cC5hbmNob3JQb2ludFl9LGMudmVydGljYWxUZXh0RmVhdHVyZUluZGV4PXAuZmVhdHVyZUluZGV4O2JyZWFrfWZvcih2YXIgZD1hO2Q8bztkKyspe3ZhciBnPXQuZ2V0KGQpO2MuaWNvbkJveD17eDE6Zy54MSx5MTpnLnkxLHgyOmcueDIseTI6Zy55MixhbmNob3JQb2ludFg6Zy5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOmcuYW5jaG9yUG9pbnRZfSxjLmljb25GZWF0dXJlSW5kZXg9Zy5mZWF0dXJlSW5kZXg7YnJlYWt9Zm9yKHZhciBtPXM7bTxsO20rKyl7dmFyIHY9dC5nZXQobSk7Yy52ZXJ0aWNhbEljb25Cb3g9e3gxOnYueDEseTE6di55MSx4Mjp2LngyLHkyOnYueTIsYW5jaG9yUG9pbnRYOnYuYW5jaG9yUG9pbnRYLGFuY2hvclBvaW50WTp2LmFuY2hvclBvaW50WX0sYy52ZXJ0aWNhbEljb25GZWF0dXJlSW5kZXg9di5mZWF0dXJlSW5kZXg7YnJlYWt9cmV0dXJuIGN9LGZjLnByb3RvdHlwZS5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzPWZ1bmN0aW9uKHQpe3RoaXMuY29sbGlzaW9uQXJyYXlzPVtdO2Zvcih2YXIgZT0wO2U8dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KGUpO3RoaXMuY29sbGlzaW9uQXJyYXlzLnB1c2godGhpcy5fZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlc0ZvclN5bWJvbCh0LHIudGV4dEJveFN0YXJ0SW5kZXgsci50ZXh0Qm94RW5kSW5kZXgsci52ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LHIudmVydGljYWxUZXh0Qm94RW5kSW5kZXgsci5pY29uQm94U3RhcnRJbmRleCxyLmljb25Cb3hFbmRJbmRleCxyLnZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgsci52ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCkpfX0sZmMucHJvdG90eXBlLmhhc1RleHREYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sZmMucHJvdG90eXBlLmhhc0ljb25EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sZmMucHJvdG90eXBlLmhhc0RlYnVnRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHRDb2xsaXNpb25Cb3gmJnRoaXMuaWNvbkNvbGxpc2lvbkJveH0sZmMucHJvdG90eXBlLmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzRGVidWdEYXRhKCkmJnRoaXMudGV4dENvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sZmMucHJvdG90eXBlLmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzRGVidWdEYXRhKCkmJnRoaXMuaWNvbkNvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sZmMucHJvdG90eXBlLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2w9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoZSksbj1yLnZlcnRleFN0YXJ0SW5kZXgrNCpyLm51bUdseXBocyxpPXIudmVydGV4U3RhcnRJbmRleDtpPG47aSs9NCl0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaSxpKzEsaSsyKSx0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaSsxLGkrMixpKzMpfSxmYy5wcm90b3R5cGUuZ2V0U29ydGVkU3ltYm9sSW5kZXhlcz1mdW5jdGlvbih0KXtpZih0aGlzLnNvcnRlZEFuZ2xlPT09dCYmdm9pZCAwIT09dGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXMpcmV0dXJuIHRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzO2Zvcih2YXIgZT1NYXRoLnNpbih0KSxyPU1hdGguY29zKHQpLG49W10saT1bXSxhPVtdLG89MDtvPHRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsrK28pe2EucHVzaChvKTt2YXIgcz10aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQobyk7bi5wdXNoKDB8TWF0aC5yb3VuZChlKnMuYW5jaG9yWCtyKnMuYW5jaG9yWSkpLGkucHVzaChzLmZlYXR1cmVJbmRleCl9cmV0dXJuIGEuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gblt0XS1uW2VdfHxpW2VdLWlbdF19KSksYX0sZmMucHJvdG90eXBlLmFkZFRvU29ydEtleVJhbmdlcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuc29ydEtleVJhbmdlc1t0aGlzLnNvcnRLZXlSYW5nZXMubGVuZ3RoLTFdO3ImJnIuc29ydEtleT09PWU/ci5zeW1ib2xJbnN0YW5jZUVuZD10KzE6dGhpcy5zb3J0S2V5UmFuZ2VzLnB1c2goe3NvcnRLZXk6ZSxzeW1ib2xJbnN0YW5jZVN0YXJ0OnQsc3ltYm9sSW5zdGFuY2VFbmQ6dCsxfSl9LGZjLnByb3RvdHlwZS5zb3J0RmVhdHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLnNvcnRGZWF0dXJlc0J5WSYmdGhpcy5zb3J0ZWRBbmdsZSE9PXQmJiEodGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4xfHx0aGlzLmljb24uc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjEpKXt0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcz10aGlzLmdldFNvcnRlZFN5bWJvbEluZGV4ZXModCksdGhpcy5zb3J0ZWRBbmdsZT10LHRoaXMudGV4dC5pbmRleEFycmF5LmNsZWFyKCksdGhpcy5pY29uLmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmZlYXR1cmVTb3J0T3JkZXI9W107Zm9yKHZhciByPTAsbj10aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcztyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPXRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChuW3JdKTt0aGlzLmZlYXR1cmVTb3J0T3JkZXIucHVzaChpLmZlYXR1cmVJbmRleCksW2kucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsaS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsaS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XS5mb3JFYWNoKChmdW5jdGlvbih0LHIsbil7dD49MCYmbi5pbmRleE9mKHQpPT09ciYmZS5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKGUudGV4dCx0KX0pKSxpLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4Pj0wJiZ0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy50ZXh0LGkudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLGkucGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wJiZ0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy5pY29uLGkucGxhY2VkSWNvblN5bWJvbEluZGV4KSxpLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wJiZ0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy5pY29uLGkudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgpfXRoaXMudGV4dC5pbmRleEJ1ZmZlciYmdGhpcy50ZXh0LmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy50ZXh0LmluZGV4QXJyYXkpLHRoaXMuaWNvbi5pbmRleEJ1ZmZlciYmdGhpcy5pY29uLmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5pY29uLmluZGV4QXJyYXkpfX0sRG4oIlN5bWJvbEJ1Y2tldCIsZmMse29taXQ6WyJsYXllcnMiLCJjb2xsaXNpb25Cb3hBcnJheSIsImZlYXR1cmVzIiwiY29tcGFyZVRleHQiXX0pLGZjLk1BWF9HTFlQSFM9NjU1MzUsZmMuYWRkRHluYW1pY0F0dHJpYnV0ZXM9c2M7dmFyIGhjPW5ldyB5aSh7InN5bWJvbC1wbGFjZW1lbnQiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtcGxhY2VtZW50Il0pLCJzeW1ib2wtc3BhY2luZyI6bmV3IHBpKEF0LmxheW91dF9zeW1ib2xbInN5bWJvbC1zcGFjaW5nIl0pLCJzeW1ib2wtYXZvaWQtZWRnZXMiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtYXZvaWQtZWRnZXMiXSksInN5bWJvbC1zb3J0LWtleSI6bmV3IGRpKEF0LmxheW91dF9zeW1ib2xbInN5bWJvbC1zb3J0LWtleSJdKSwic3ltYm9sLXotb3JkZXIiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtei1vcmRlciJdKSwiaWNvbi1hbGxvdy1vdmVybGFwIjpuZXcgcGkoQXQubGF5b3V0X3N5bWJvbFsiaWNvbi1hbGxvdy1vdmVybGFwIl0pLCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLWlnbm9yZS1wbGFjZW1lbnQiXSksImljb24tb3B0aW9uYWwiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLW9wdGlvbmFsIl0pLCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6bmV3IHBpKEF0LmxheW91dF9zeW1ib2xbImljb24tcm90YXRpb24tYWxpZ25tZW50Il0pLCJpY29uLXNpemUiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLXNpemUiXSksImljb24tdGV4dC1maXQiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0Il0pLCJpY29uLXRleHQtZml0LXBhZGRpbmciOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0LXBhZGRpbmciXSksImljb24taW1hZ2UiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLWltYWdlIl0pLCJpY29uLXJvdGF0ZSI6bmV3IGRpKEF0LmxheW91dF9zeW1ib2xbImljb24tcm90YXRlIl0pLCJpY29uLXBhZGRpbmciOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLXBhZGRpbmciXSksImljb24ta2VlcC11cHJpZ2h0IjpuZXcgcGkoQXQubGF5b3V0X3N5bWJvbFsiaWNvbi1rZWVwLXVwcmlnaHQiXSksImljb24tb2Zmc2V0IjpuZXcgZGkoQXQubGF5b3V0X3N5bWJvbFsiaWNvbi1vZmZzZXQiXSksImljb24tYW5jaG9yIjpuZXcgZGkoQXQubGF5b3V0X3N5bWJvbFsiaWNvbi1hbmNob3IiXSksImljb24tcGl0Y2gtYWxpZ25tZW50IjpuZXcgcGkoQXQubGF5b3V0X3N5bWJvbFsiaWNvbi1waXRjaC1hbGlnbm1lbnQiXSksInRleHQtcGl0Y2gtYWxpZ25tZW50IjpuZXcgcGkoQXQubGF5b3V0X3N5bWJvbFsidGV4dC1waXRjaC1hbGlnbm1lbnQiXSksInRleHQtcm90YXRpb24tYWxpZ25tZW50IjpuZXcgcGkoQXQubGF5b3V0X3N5bWJvbFsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXSksInRleHQtZmllbGQiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWZpZWxkIl0pLCJ0ZXh0LWZvbnQiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWZvbnQiXSksInRleHQtc2l6ZSI6bmV3IGRpKEF0LmxheW91dF9zeW1ib2xbInRleHQtc2l6ZSJdKSwidGV4dC1tYXgtd2lkdGgiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW1heC13aWR0aCJdKSwidGV4dC1saW5lLWhlaWdodCI6bmV3IHBpKEF0LmxheW91dF9zeW1ib2xbInRleHQtbGluZS1oZWlnaHQiXSksInRleHQtbGV0dGVyLXNwYWNpbmciOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWxldHRlci1zcGFjaW5nIl0pLCJ0ZXh0LWp1c3RpZnkiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWp1c3RpZnkiXSksInRleHQtcmFkaWFsLW9mZnNldCI6bmV3IGRpKEF0LmxheW91dF9zeW1ib2xbInRleHQtcmFkaWFsLW9mZnNldCJdKSwidGV4dC12YXJpYWJsZS1hbmNob3IiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXZhcmlhYmxlLWFuY2hvciJdKSwidGV4dC1hbmNob3IiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWFuY2hvciJdKSwidGV4dC1tYXgtYW5nbGUiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW1heC1hbmdsZSJdKSwidGV4dC13cml0aW5nLW1vZGUiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXdyaXRpbmctbW9kZSJdKSwidGV4dC1yb3RhdGUiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXJvdGF0ZSJdKSwidGV4dC1wYWRkaW5nIjpuZXcgcGkoQXQubGF5b3V0X3N5bWJvbFsidGV4dC1wYWRkaW5nIl0pLCJ0ZXh0LWtlZXAtdXByaWdodCI6bmV3IHBpKEF0LmxheW91dF9zeW1ib2xbInRleHQta2VlcC11cHJpZ2h0Il0pLCJ0ZXh0LXRyYW5zZm9ybSI6bmV3IGRpKEF0LmxheW91dF9zeW1ib2xbInRleHQtdHJhbnNmb3JtIl0pLCJ0ZXh0LW9mZnNldCI6bmV3IGRpKEF0LmxheW91dF9zeW1ib2xbInRleHQtb2Zmc2V0Il0pLCJ0ZXh0LWFsbG93LW92ZXJsYXAiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWFsbG93LW92ZXJsYXAiXSksInRleHQtaWdub3JlLXBsYWNlbWVudCI6bmV3IHBpKEF0LmxheW91dF9zeW1ib2xbInRleHQtaWdub3JlLXBsYWNlbWVudCJdKSwidGV4dC1vcHRpb25hbCI6bmV3IHBpKEF0LmxheW91dF9zeW1ib2xbInRleHQtb3B0aW9uYWwiXSl9KSxwYz17cGFpbnQ6bmV3IHlpKHsiaWNvbi1vcGFjaXR5IjpuZXcgZGkoQXQucGFpbnRfc3ltYm9sWyJpY29uLW9wYWNpdHkiXSksImljb24tY29sb3IiOm5ldyBkaShBdC5wYWludF9zeW1ib2xbImljb24tY29sb3IiXSksImljb24taGFsby1jb2xvciI6bmV3IGRpKEF0LnBhaW50X3N5bWJvbFsiaWNvbi1oYWxvLWNvbG9yIl0pLCJpY29uLWhhbG8td2lkdGgiOm5ldyBkaShBdC5wYWludF9zeW1ib2xbImljb24taGFsby13aWR0aCJdKSwiaWNvbi1oYWxvLWJsdXIiOm5ldyBkaShBdC5wYWludF9zeW1ib2xbImljb24taGFsby1ibHVyIl0pLCJpY29uLXRyYW5zbGF0ZSI6bmV3IHBpKEF0LnBhaW50X3N5bWJvbFsiaWNvbi10cmFuc2xhdGUiXSksImljb24tdHJhbnNsYXRlLWFuY2hvciI6bmV3IHBpKEF0LnBhaW50X3N5bWJvbFsiaWNvbi10cmFuc2xhdGUtYW5jaG9yIl0pLCJ0ZXh0LW9wYWNpdHkiOm5ldyBkaShBdC5wYWludF9zeW1ib2xbInRleHQtb3BhY2l0eSJdKSwidGV4dC1jb2xvciI6bmV3IGRpKEF0LnBhaW50X3N5bWJvbFsidGV4dC1jb2xvciJdLHtydW50aW1lVHlwZTpCdCxnZXRPdmVycmlkZTpmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0Q29sb3J9LGhhc092ZXJyaWRlOmZ1bmN0aW9uKHQpe3JldHVybiEhdC50ZXh0Q29sb3J9fSksInRleHQtaGFsby1jb2xvciI6bmV3IGRpKEF0LnBhaW50X3N5bWJvbFsidGV4dC1oYWxvLWNvbG9yIl0pLCJ0ZXh0LWhhbG8td2lkdGgiOm5ldyBkaShBdC5wYWludF9zeW1ib2xbInRleHQtaGFsby13aWR0aCJdKSwidGV4dC1oYWxvLWJsdXIiOm5ldyBkaShBdC5wYWludF9zeW1ib2xbInRleHQtaGFsby1ibHVyIl0pLCJ0ZXh0LXRyYW5zbGF0ZSI6bmV3IHBpKEF0LnBhaW50X3N5bWJvbFsidGV4dC10cmFuc2xhdGUiXSksInRleHQtdHJhbnNsYXRlLWFuY2hvciI6bmV3IHBpKEF0LnBhaW50X3N5bWJvbFsidGV4dC10cmFuc2xhdGUtYW5jaG9yIl0pfSksbGF5b3V0OmhjfSxkYz1mdW5jdGlvbih0KXt0aGlzLnR5cGU9dC5wcm9wZXJ0eS5vdmVycmlkZXM/dC5wcm9wZXJ0eS5vdmVycmlkZXMucnVudGltZVR5cGU6T3QsdGhpcy5kZWZhdWx0VmFsdWU9dH07ZGMucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2lmKHQuZm9ybWF0dGVkU2VjdGlvbil7dmFyIGU9dGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkub3ZlcnJpZGVzO2lmKGUmJmUuaGFzT3ZlcnJpZGUodC5mb3JtYXR0ZWRTZWN0aW9uKSlyZXR1cm4gZS5nZXRPdmVycmlkZSh0LmZvcm1hdHRlZFNlY3Rpb24pfXJldHVybiB0LmZlYXR1cmUmJnQuZmVhdHVyZVN0YXRlP3RoaXMuZGVmYXVsdFZhbHVlLmV2YWx1YXRlKHQuZmVhdHVyZSx0LmZlYXR1cmVTdGF0ZSk6dGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbi5kZWZhdWx0fSxkYy5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuZGVmYXVsdFZhbHVlLmlzQ29uc3RhbnQoKXx8dCh0aGlzLmRlZmF1bHRWYWx1ZS52YWx1ZS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pfSxkYy5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxkYy5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LERuKCJGb3JtYXRTZWN0aW9uT3ZlcnJpZGUiLGRjLHtvbWl0OlsiZGVmYXVsdFZhbHVlIl19KTt2YXIgZ2M9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHBjKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbihlLHIpe2lmKHQucHJvdG90eXBlLnJlY2FsY3VsYXRlLmNhbGwodGhpcyxlLHIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbImljb24tcm90YXRpb24tYWxpZ25tZW50Il09InBvaW50IiE9PXRoaXMubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpPyJtYXAiOiJ2aWV3cG9ydCIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtcm90YXRpb24tYWxpZ25tZW50Il09InBvaW50IiE9PXRoaXMubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpPyJtYXAiOiJ2aWV3cG9ydCIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtcGl0Y2gtYWxpZ25tZW50Il09dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50IikmJih0aGlzLmxheW91dC5fdmFsdWVzWyJpY29uLXBpdGNoLWFsaWdubWVudCJdPXRoaXMubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSksInBvaW50Ij09PXRoaXMubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpKXt2YXIgbj10aGlzLmxheW91dC5nZXQoInRleHQtd3JpdGluZy1tb2RlIik7aWYobil7Zm9yKHZhciBpPVtdLGE9MCxvPW47YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO2kuaW5kZXhPZihzKTwwJiZpLnB1c2gocyl9dGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC13cml0aW5nLW1vZGUiXT1pfWVsc2UgdGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC13cml0aW5nLW1vZGUiXT1bImhvcml6b250YWwiXX10aGlzLl9zZXRQYWludE92ZXJyaWRlcygpfSxlLnByb3RvdHlwZS5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sYXlvdXQuZ2V0KHQpLmV2YWx1YXRlKGUse30scixuKSxhPXRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXNbdF07cmV0dXJuIGEuaXNEYXRhRHJpdmVuKCl8fFZyKGEudmFsdWUpfHwhaT9pOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucmVwbGFjZSgveyhbXnt9XSspfS9nLChmdW5jdGlvbihlLHIpe3JldHVybiByIGluIHQ/U3RyaW5nKHRbcl0pOiIifSkpfShlLnByb3BlcnRpZXMsaSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGZjKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLl9zZXRQYWludE92ZXJyaWRlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLHI9cGMucGFpbnQub3ZlcnJpZGFibGVQcm9wZXJ0aWVzO3Q8ci5sZW5ndGg7dCs9MSl7dmFyIG49clt0XTtpZihlLmhhc1BhaW50T3ZlcnJpZGUodGhpcy5sYXlvdXQsbikpe3ZhciBpLGE9dGhpcy5wYWludC5nZXQobiksbz1uZXcgZGMoYSkscz1uZXcgVXIobyxhLnByb3BlcnR5LnNwZWNpZmljYXRpb24pO2k9ImNvbnN0YW50Ij09PWEudmFsdWUua2luZHx8InNvdXJjZSI9PT1hLnZhbHVlLmtpbmQ/bmV3IEhyKCJzb3VyY2UiLHMpOm5ldyBHcigiY29tcG9zaXRlIixzLGEudmFsdWUuem9vbVN0b3BzLGEudmFsdWUuX2ludGVycG9sYXRpb25UeXBlKSx0aGlzLnBhaW50Ll92YWx1ZXNbbl09bmV3IGZpKGEucHJvcGVydHksaSxhLnBhcmFtZXRlcnMpfX19LGUucHJvdG90eXBlLl9oYW5kbGVPdmVycmlkYWJsZVBhaW50UHJvcGVydHlVcGRhdGU9ZnVuY3Rpb24odCxyLG4pe3JldHVybiEoIXRoaXMubGF5b3V0fHxyLmlzRGF0YURyaXZlbigpfHxuLmlzRGF0YURyaXZlbigpKSYmZS5oYXNQYWludE92ZXJyaWRlKHRoaXMubGF5b3V0LHQpfSxlLmhhc1BhaW50T3ZlcnJpZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdldCgidGV4dC1maWVsZCIpLG49cGMucGFpbnQucHJvcGVydGllc1tlXSxpPSExLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZihuLm92ZXJyaWRlcyYmbi5vdmVycmlkZXMuaGFzT3ZlcnJpZGUocltlXSkpcmV0dXJuIHZvaWQoaT0hMCl9O2lmKCJjb25zdGFudCI9PT1yLnZhbHVlLmtpbmQmJnIudmFsdWUudmFsdWUgaW5zdGFuY2VvZiB0ZSlhKHIudmFsdWUudmFsdWUuc2VjdGlvbnMpO2Vsc2UgaWYoInNvdXJjZSI9PT1yLnZhbHVlLmtpbmQpe3ZhciBvPWZ1bmN0aW9uKHQpe2l8fCh0IGluc3RhbmNlb2Ygb2UmJmllKHQudmFsdWUpPT09VnQ/YSh0LnZhbHVlLnNlY3Rpb25zKTp0IGluc3RhbmNlb2YgdWU/YSh0LnNlY3Rpb25zKTp0LmVhY2hDaGlsZChvKSl9LHM9ci52YWx1ZTtzLl9zdHlsZUV4cHJlc3Npb24mJm8ocy5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pfXJldHVybiBpfSxlfSh4aSksbWM9e3BhaW50Om5ldyB5aSh7ImJhY2tncm91bmQtY29sb3IiOm5ldyBwaShBdC5wYWludF9iYWNrZ3JvdW5kWyJiYWNrZ3JvdW5kLWNvbG9yIl0pLCJiYWNrZ3JvdW5kLXBhdHRlcm4iOm5ldyBtaShBdC5wYWludF9iYWNrZ3JvdW5kWyJiYWNrZ3JvdW5kLXBhdHRlcm4iXSksImJhY2tncm91bmQtb3BhY2l0eSI6bmV3IHBpKEF0LnBhaW50X2JhY2tncm91bmRbImJhY2tncm91bmQtb3BhY2l0eSJdKX0pfSx2Yz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsbWMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGV9KHhpKSx5Yz17cGFpbnQ6bmV3IHlpKHsicmFzdGVyLW9wYWNpdHkiOm5ldyBwaShBdC5wYWludF9yYXN0ZXJbInJhc3Rlci1vcGFjaXR5Il0pLCJyYXN0ZXItaHVlLXJvdGF0ZSI6bmV3IHBpKEF0LnBhaW50X3Jhc3RlclsicmFzdGVyLWh1ZS1yb3RhdGUiXSksInJhc3Rlci1icmlnaHRuZXNzLW1pbiI6bmV3IHBpKEF0LnBhaW50X3Jhc3RlclsicmFzdGVyLWJyaWdodG5lc3MtbWluIl0pLCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiOm5ldyBwaShBdC5wYWludF9yYXN0ZXJbInJhc3Rlci1icmlnaHRuZXNzLW1heCJdKSwicmFzdGVyLXNhdHVyYXRpb24iOm5ldyBwaShBdC5wYWludF9yYXN0ZXJbInJhc3Rlci1zYXR1cmF0aW9uIl0pLCJyYXN0ZXItY29udHJhc3QiOm5ldyBwaShBdC5wYWludF9yYXN0ZXJbInJhc3Rlci1jb250cmFzdCJdKSwicmFzdGVyLXJlc2FtcGxpbmciOm5ldyBwaShBdC5wYWludF9yYXN0ZXJbInJhc3Rlci1yZXNhbXBsaW5nIl0pLCJyYXN0ZXItZmFkZS1kdXJhdGlvbiI6bmV3IHBpKEF0LnBhaW50X3Jhc3RlclsicmFzdGVyLWZhZGUtZHVyYXRpb24iXSl9KX0seGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHljKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlfSh4aSksYmM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHt9KSx0aGlzLmltcGxlbWVudGF0aW9uPWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuaXMzRD1mdW5jdGlvbigpe3JldHVybiIzZCI9PT10aGlzLmltcGxlbWVudGF0aW9uLnJlbmRlcmluZ01vZGV9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5pbXBsZW1lbnRhdGlvbi5wcmVyZW5kZXJ9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkJiZ0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkKHQsdC5wYWludGVyLmNvbnRleHQuZ2wpfSxlLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbih0KXt0aGlzLmltcGxlbWVudGF0aW9uLm9uUmVtb3ZlJiZ0aGlzLmltcGxlbWVudGF0aW9uLm9uUmVtb3ZlKHQsdC5wYWludGVyLmNvbnRleHQuZ2wpfSxlfSh4aSksX2M9e2NpcmNsZTpvbyxoZWF0bWFwOnZvLGhpbGxzaGFkZTp4byxmaWxsOmFzLCJmaWxsLWV4dHJ1c2lvbiI6d3MsbGluZTp6cyxzeW1ib2w6Z2MsYmFja2dyb3VuZDp2YyxyYXN0ZXI6eGN9LHdjPXNlbGYuSFRNTEltYWdlRWxlbWVudCxUYz1zZWxmLkhUTUxDYW52YXNFbGVtZW50LGtjPXNlbGYuSFRNTFZpZGVvRWxlbWVudCxNYz1zZWxmLkltYWdlRGF0YSxBYz1zZWxmLkltYWdlQml0bWFwLFNjPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY29udGV4dD10LHRoaXMuZm9ybWF0PXIsdGhpcy50ZXh0dXJlPXQuZ2wuY3JlYXRlVGV4dHVyZSgpLHRoaXMudXBkYXRlKGUsbil9O1NjLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQud2lkdGgsaT10LmhlaWdodCxhPSEodGhpcy5zaXplJiZ0aGlzLnNpemVbMF09PT1uJiZ0aGlzLnNpemVbMV09PT1pfHxyKSxvPXRoaXMuY29udGV4dCxzPW8uZ2w7aWYodGhpcy51c2VNaXBtYXA9Qm9vbGVhbihlJiZlLnVzZU1pcG1hcCkscy5iaW5kVGV4dHVyZShzLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSxvLnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5zZXQoITEpLG8ucGl4ZWxTdG9yZVVucGFjay5zZXQoMSksby5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQodGhpcy5mb3JtYXQ9PT1zLlJHQkEmJighZXx8ITEhPT1lLnByZW11bHRpcGx5KSksYSl0aGlzLnNpemU9W24saV0sdCBpbnN0YW5jZW9mIHdjfHx0IGluc3RhbmNlb2YgVGN8fHQgaW5zdGFuY2VvZiBrY3x8dCBpbnN0YW5jZW9mIE1jfHxBYyYmdCBpbnN0YW5jZW9mIEFjP3MudGV4SW1hZ2UyRChzLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCx0aGlzLmZvcm1hdCxzLlVOU0lHTkVEX0JZVEUsdCk6cy50ZXhJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLHRoaXMuZm9ybWF0LG4saSwwLHRoaXMuZm9ybWF0LHMuVU5TSUdORURfQllURSx0LmRhdGEpO2Vsc2V7dmFyIGw9cnx8e3g6MCx5OjB9LGM9bC54LHU9bC55O3QgaW5zdGFuY2VvZiB3Y3x8dCBpbnN0YW5jZW9mIFRjfHx0IGluc3RhbmNlb2Yga2N8fHQgaW5zdGFuY2VvZiBNY3x8QWMmJnQgaW5zdGFuY2VvZiBBYz9zLnRleFN1YkltYWdlMkQocy5URVhUVVJFXzJELDAsYyx1LHMuUkdCQSxzLlVOU0lHTkVEX0JZVEUsdCk6cy50ZXhTdWJJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLGMsdSxuLGkscy5SR0JBLHMuVU5TSUdORURfQllURSx0LmRhdGEpfXRoaXMudXNlTWlwbWFwJiZ0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSYmcy5nZW5lcmF0ZU1pcG1hcChzLlRFWFRVUkVfMkQpfSxTYy5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5jb250ZXh0LmdsO24uYmluZFRleHR1cmUobi5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksciE9PW4uTElORUFSX01JUE1BUF9ORUFSRVNUfHx0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKXx8KHI9bi5MSU5FQVIpLHQhPT10aGlzLmZpbHRlciYmKG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsdCksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixyfHx0KSx0aGlzLmZpbHRlcj10KSxlIT09dGhpcy53cmFwJiYobi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLGUpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxlKSx0aGlzLndyYXA9ZSl9LFNjLnByb3RvdHlwZS5pc1NpemVQb3dlck9mVHdvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZVswXT09PXRoaXMuc2l6ZVsxXSYmTWF0aC5sb2codGhpcy5zaXplWzBdKS9NYXRoLkxOMiUxPT0wfSxTYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5nbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSksdGhpcy50ZXh0dXJlPW51bGx9O3ZhciBFYz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2NhbGxiYWNrPXQsdGhpcy5fdHJpZ2dlcmVkPSExLCJ1bmRlZmluZWQiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwmJih0aGlzLl9jaGFubmVsPW5ldyBNZXNzYWdlQ2hhbm5lbCx0aGlzLl9jaGFubmVsLnBvcnQyLm9ubWVzc2FnZT1mdW5jdGlvbigpe2UuX3RyaWdnZXJlZD0hMSxlLl9jYWxsYmFjaygpfSl9O0VjLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl90cmlnZ2VyZWR8fCh0aGlzLl90cmlnZ2VyZWQ9ITAsdGhpcy5fY2hhbm5lbD90aGlzLl9jaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKCEwKTpzZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuX3RyaWdnZXJlZD0hMSx0Ll9jYWxsYmFjaygpfSksMCkpfSxFYy5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX2NoYW5uZWwsdGhpcy5fY2FsbGJhY2s9ZnVuY3Rpb24oKXt9fTt2YXIgQ2M9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGFyZ2V0PXQsdGhpcy5wYXJlbnQ9ZSx0aGlzLm1hcElkPXIsdGhpcy5jYWxsYmFja3M9e30sdGhpcy50YXNrcz17fSx0aGlzLnRhc2tRdWV1ZT1bXSx0aGlzLmNhbmNlbENhbGxiYWNrcz17fSxnKFsicmVjZWl2ZSIsInByb2Nlc3MiXSx0aGlzKSx0aGlzLmludm9rZXI9bmV3IEVjKHRoaXMucHJvY2VzcyksdGhpcy50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5yZWNlaXZlLCExKSx0aGlzLmdsb2JhbFNjb3BlPWsoKT90OnNlbGZ9O2Z1bmN0aW9uIExjKHQsZSxyKXt2YXIgbj0yKk1hdGguUEkqNjM3ODEzNy8yNTYvTWF0aC5wb3coMixyKTtyZXR1cm5bdCpuLTIqTWF0aC5QSSo2Mzc4MTM3LzIsZSpuLTIqTWF0aC5QSSo2Mzc4MTM3LzJdfUNjLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpczt2b2lkIDA9PT1pJiYoaT0hMSk7dmFyIG89TWF0aC5yb3VuZCgxZTE4Kk1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMCwxMCk7ciYmKHRoaXMuY2FsbGJhY2tzW29dPXIpO3ZhciBzPVModGhpcy5nbG9iYWxTY29wZSk/dm9pZCAwOltdO3JldHVybiB0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh7aWQ6byx0eXBlOnQsaGFzQ2FsbGJhY2s6ISFyLHRhcmdldE1hcElkOm4sbXVzdFF1ZXVlOmksc291cmNlTWFwSWQ6dGhpcy5tYXBJZCxkYXRhOk5uKGUscyl9LHMpLHtjYW5jZWw6ZnVuY3Rpb24oKXtyJiZkZWxldGUgYS5jYWxsYmFja3Nbb10sYS50YXJnZXQucG9zdE1lc3NhZ2Uoe2lkOm8sdHlwZToiPGNhbmNlbD4iLHRhcmdldE1hcElkOm4sc291cmNlTWFwSWQ6YS5tYXBJZH0pfX19LENjLnByb3RvdHlwZS5yZWNlaXZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0YSxyPWUuaWQ7aWYociYmKCFlLnRhcmdldE1hcElkfHx0aGlzLm1hcElkPT09ZS50YXJnZXRNYXBJZCkpaWYoIjxjYW5jZWw+Ij09PWUudHlwZSl7ZGVsZXRlIHRoaXMudGFza3Nbcl07dmFyIG49dGhpcy5jYW5jZWxDYWxsYmFja3Nbcl07ZGVsZXRlIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW3JdLG4mJm4oKX1lbHNlIGsoKXx8ZS5tdXN0UXVldWU/KHRoaXMudGFza3Nbcl09ZSx0aGlzLnRhc2tRdWV1ZS5wdXNoKHIpLHRoaXMuaW52b2tlci50cmlnZ2VyKCkpOnRoaXMucHJvY2Vzc1Rhc2socixlKX0sQ2MucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oKXtpZih0aGlzLnRhc2tRdWV1ZS5sZW5ndGgpe3ZhciB0PXRoaXMudGFza1F1ZXVlLnNoaWZ0KCksZT10aGlzLnRhc2tzW3RdO2RlbGV0ZSB0aGlzLnRhc2tzW3RdLHRoaXMudGFza1F1ZXVlLmxlbmd0aCYmdGhpcy5pbnZva2VyLnRyaWdnZXIoKSxlJiZ0aGlzLnByb2Nlc3NUYXNrKHQsZSl9fSxDYy5wcm90b3R5cGUucHJvY2Vzc1Rhc2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO2lmKCI8cmVzcG9uc2U+Ij09PWUudHlwZSl7dmFyIG49dGhpcy5jYWxsYmFja3NbdF07ZGVsZXRlIHRoaXMuY2FsbGJhY2tzW3RdLG4mJihlLmVycm9yP24oam4oZS5lcnJvcikpOm4obnVsbCxqbihlLmRhdGEpKSl9ZWxzZXt2YXIgaT0hMSxhPVModGhpcy5nbG9iYWxTY29wZSk/dm9pZCAwOltdLG89ZS5oYXNDYWxsYmFjaz9mdW5jdGlvbihlLG4pe2k9ITAsZGVsZXRlIHIuY2FuY2VsQ2FsbGJhY2tzW3RdLHIudGFyZ2V0LnBvc3RNZXNzYWdlKHtpZDp0LHR5cGU6IjxyZXNwb25zZT4iLHNvdXJjZU1hcElkOnIubWFwSWQsZXJyb3I6ZT9ObihlKTpudWxsLGRhdGE6Tm4obixhKX0sYSl9OmZ1bmN0aW9uKHQpe2k9ITB9LHM9bnVsbCxsPWpuKGUuZGF0YSk7aWYodGhpcy5wYXJlbnRbZS50eXBlXSlzPXRoaXMucGFyZW50W2UudHlwZV0oZS5zb3VyY2VNYXBJZCxsLG8pO2Vsc2UgaWYodGhpcy5wYXJlbnQuZ2V0V29ya2VyU291cmNlKXt2YXIgYz1lLnR5cGUuc3BsaXQoIi4iKTtzPXRoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZShlLnNvdXJjZU1hcElkLGNbMF0sbC5zb3VyY2UpW2NbMV1dKGwsbyl9ZWxzZSBvKG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgZnVuY3Rpb24gIitlLnR5cGUpKTshaSYmcyYmcy5jYW5jZWwmJih0aGlzLmNhbmNlbENhbGxiYWNrc1t0XT1zLmNhbmNlbCl9fSxDYy5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5pbnZva2VyLnJlbW92ZSgpLHRoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMucmVjZWl2ZSwhMSl9O3ZhciBJYz1mdW5jdGlvbih0LGUpe3QmJihlP3RoaXMuc2V0U291dGhXZXN0KHQpLnNldE5vcnRoRWFzdChlKTo0PT09dC5sZW5ndGg/dGhpcy5zZXRTb3V0aFdlc3QoW3RbMF0sdFsxXV0pLnNldE5vcnRoRWFzdChbdFsyXSx0WzNdXSk6dGhpcy5zZXRTb3V0aFdlc3QodFswXSkuc2V0Tm9ydGhFYXN0KHRbMV0pKX07SWMucHJvdG90eXBlLnNldE5vcnRoRWFzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmU9dCBpbnN0YW5jZW9mIFBjP25ldyBQYyh0LmxuZyx0LmxhdCk6UGMuY29udmVydCh0KSx0aGlzfSxJYy5wcm90b3R5cGUuc2V0U291dGhXZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zdz10IGluc3RhbmNlb2YgUGM/bmV3IFBjKHQubG5nLHQubGF0KTpQYy5jb252ZXJ0KHQpLHRoaXN9LEljLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuX3N3LGk9dGhpcy5fbmU7aWYodCBpbnN0YW5jZW9mIFBjKWU9dCxyPXQ7ZWxzZXtpZighKHQgaW5zdGFuY2VvZiBJYykpcmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ND09PXQubGVuZ3RofHx0LmV2ZXJ5KEFycmF5LmlzQXJyYXkpP3RoaXMuZXh0ZW5kKEljLmNvbnZlcnQodCkpOnRoaXMuZXh0ZW5kKFBjLmNvbnZlcnQodCkpOnRoaXM7aWYocj10Ll9uZSwhKGU9dC5fc3cpfHwhcilyZXR1cm4gdGhpc31yZXR1cm4gbnx8aT8obi5sbmc9TWF0aC5taW4oZS5sbmcsbi5sbmcpLG4ubGF0PU1hdGgubWluKGUubGF0LG4ubGF0KSxpLmxuZz1NYXRoLm1heChyLmxuZyxpLmxuZyksaS5sYXQ9TWF0aC5tYXgoci5sYXQsaS5sYXQpKToodGhpcy5fc3c9bmV3IFBjKGUubG5nLGUubGF0KSx0aGlzLl9uZT1uZXcgUGMoci5sbmcsci5sYXQpKSx0aGlzfSxJYy5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQYygodGhpcy5fc3cubG5nK3RoaXMuX25lLmxuZykvMiwodGhpcy5fc3cubGF0K3RoaXMuX25lLmxhdCkvMil9LEljLnByb3RvdHlwZS5nZXRTb3V0aFdlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3d9LEljLnByb3RvdHlwZS5nZXROb3J0aEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV9LEljLnByb3RvdHlwZS5nZXROb3J0aFdlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBjKHRoaXMuZ2V0V2VzdCgpLHRoaXMuZ2V0Tm9ydGgoKSl9LEljLnByb3RvdHlwZS5nZXRTb3V0aEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBjKHRoaXMuZ2V0RWFzdCgpLHRoaXMuZ2V0U291dGgoKSl9LEljLnByb3RvdHlwZS5nZXRXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxuZ30sSWMucHJvdG90eXBlLmdldFNvdXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxhdH0sSWMucHJvdG90eXBlLmdldEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmUubG5nfSxJYy5wcm90b3R5cGUuZ2V0Tm9ydGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmUubGF0fSxJYy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLl9zdy50b0FycmF5KCksdGhpcy5fbmUudG9BcnJheSgpXX0sSWMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkxuZ0xhdEJvdW5kcygiK3RoaXMuX3N3LnRvU3RyaW5nKCkrIiwgIit0aGlzLl9uZS50b1N0cmluZygpKyIpIn0sSWMucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuX3N3JiZ0aGlzLl9uZSl9LEljLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXt2YXIgZT1QYy5jb252ZXJ0KHQpLHI9ZS5sbmcsbj1lLmxhdCxpPXRoaXMuX3N3LmxuZzw9ciYmcjw9dGhpcy5fbmUubG5nO3JldHVybiB0aGlzLl9zdy5sbmc+dGhpcy5fbmUubG5nJiYoaT10aGlzLl9zdy5sbmc+PXImJnI+PXRoaXMuX25lLmxuZyksdGhpcy5fc3cubGF0PD1uJiZuPD10aGlzLl9uZS5sYXQmJml9LEljLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIXR8fHQgaW5zdGFuY2VvZiBJYz90Om5ldyBJYyh0KX07dmFyIFBjPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBMbmdMYXQgb2JqZWN0OiAoIit0KyIsICIrZSsiKSIpO2lmKHRoaXMubG5nPSt0LHRoaXMubGF0PStlLHRoaXMubGF0PjkwfHx0aGlzLmxhdDwtOTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExuZ0xhdCBsYXRpdHVkZSB2YWx1ZTogbXVzdCBiZSBiZXR3ZWVuIC05MCBhbmQgOTAiKX07UGMucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBjKGModGhpcy5sbmcsLTE4MCwxODApLHRoaXMubGF0KX0sUGMucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5sbmcsdGhpcy5sYXRdfSxQYy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTG5nTGF0KCIrdGhpcy5sbmcrIiwgIit0aGlzLmxhdCsiKSJ9LFBjLnByb3RvdHlwZS5kaXN0YW5jZVRvPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguUEkvMTgwLHI9dGhpcy5sYXQqZSxuPXQubGF0KmUsaT1NYXRoLnNpbihyKSpNYXRoLnNpbihuKStNYXRoLmNvcyhyKSpNYXRoLmNvcyhuKSpNYXRoLmNvcygodC5sbmctdGhpcy5sbmcpKmUpO3JldHVybiA2MzcxMDA4LjgqTWF0aC5hY29zKE1hdGgubWluKGksMSkpfSxQYy5wcm90b3R5cGUudG9Cb3VuZHM9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIGU9MzYwKnQvNDAwNzUwMTcscj1lL01hdGguY29zKE1hdGguUEkvMTgwKnRoaXMubGF0KTtyZXR1cm4gbmV3IEljKG5ldyBQYyh0aGlzLmxuZy1yLHRoaXMubGF0LWUpLG5ldyBQYyh0aGlzLmxuZytyLHRoaXMubGF0K2UpKX0sUGMuY29udmVydD1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgUGMpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSYmKDI9PT10Lmxlbmd0aHx8Mz09PXQubGVuZ3RoKSlyZXR1cm4gbmV3IFBjKE51bWJlcih0WzBdKSxOdW1iZXIodFsxXSkpO2lmKCFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10KXJldHVybiBuZXcgUGMoTnVtYmVyKCJsbmciaW4gdD90LmxuZzp0LmxvbiksTnVtYmVyKHQubGF0KSk7dGhyb3cgbmV3IEVycm9yKCJgTG5nTGF0TGlrZWAgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBMbmdMYXQgaW5zdGFuY2UsIGFuIG9iamVjdCB7bG5nOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIGFuIG9iamVjdCB7bG9uOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIG9yIGFuIGFycmF5IG9mIFs8bG5nPiwgPGxhdD5dIil9O3ZhciB6Yz0yKk1hdGguUEkqNjM3MTAwOC44O2Z1bmN0aW9uIE9jKHQpe3JldHVybiB6YypNYXRoLmNvcyh0Kk1hdGguUEkvMTgwKX1mdW5jdGlvbiBEYyh0KXtyZXR1cm4oMTgwK3QpLzM2MH1mdW5jdGlvbiBSYyh0KXtyZXR1cm4oMTgwLTE4MC9NYXRoLlBJKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0Kk1hdGguUEkvMzYwKSkpLzM2MH1mdW5jdGlvbiBGYyh0LGUpe3JldHVybiB0L09jKGUpfWZ1bmN0aW9uIEJjKHQpe3JldHVybiAzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAoKDE4MC0zNjAqdCkqTWF0aC5QSS8xODApKS05MH12YXIgTmM9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXImJihyPTApLHRoaXMueD0rdCx0aGlzLnk9K2UsdGhpcy56PStyfTtOYy5mcm9tTG5nTGF0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dmFyIHI9UGMuY29udmVydCh0KTtyZXR1cm4gbmV3IE5jKERjKHIubG5nKSxSYyhyLmxhdCksRmMoZSxyLmxhdCkpfSxOYy5wcm90b3R5cGUudG9MbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBjKDM2MCp0aGlzLngtMTgwLEJjKHRoaXMueSkpfSxOYy5wcm90b3R5cGUudG9BbHRpdHVkZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnoqT2MoQmModGhpcy55KSl9LE5jLnByb3RvdHlwZS5tZXRlckluTWVyY2F0b3JDb29yZGluYXRlVW5pdHM9ZnVuY3Rpb24oKXtyZXR1cm4gMS96YyoodD1CYyh0aGlzLnkpLDEvTWF0aC5jb3ModCpNYXRoLlBJLzE4MCkpO3ZhciB0fTt2YXIgamM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuej10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMua2V5PXFjKDAsdCx0LGUscil9O2pjLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuej09PXQueiYmdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LGpjLnByb3RvdHlwZS51cmw9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHM9KG49dGhpcy55LGk9dGhpcy56LGE9TGMoMjU2KihyPXRoaXMueCksMjU2KihuPU1hdGgucG93KDIsaSktbi0xKSxpKSxvPUxjKDI1NioocisxKSwyNTYqKG4rMSksaSksYVswXSsiLCIrYVsxXSsiLCIrb1swXSsiLCIrb1sxXSksbD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9IiIsYT10O2E+MDthLS0paSs9KGUmKG49MTw8YS0xKT8xOjApKyhyJm4/MjowKTtyZXR1cm4gaX0odGhpcy56LHRoaXMueCx0aGlzLnkpO3JldHVybiB0Wyh0aGlzLngrdGhpcy55KSV0Lmxlbmd0aF0ucmVwbGFjZSgie3ByZWZpeH0iLCh0aGlzLnglMTYpLnRvU3RyaW5nKDE2KSsodGhpcy55JTE2KS50b1N0cmluZygxNikpLnJlcGxhY2UoInt6fSIsU3RyaW5nKHRoaXMueikpLnJlcGxhY2UoInt4fSIsU3RyaW5nKHRoaXMueCkpLnJlcGxhY2UoInt5fSIsU3RyaW5nKCJ0bXMiPT09ZT9NYXRoLnBvdygyLHRoaXMueiktdGhpcy55LTE6dGhpcy55KSkucmVwbGFjZSgie3F1YWRrZXl9IixsKS5yZXBsYWNlKCJ7YmJveC1lcHNnLTM4NTd9IixzKX0samMucHJvdG90eXBlLmdldFRpbGVQb2ludD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnBvdygyLHRoaXMueik7cmV0dXJuIG5ldyBpKDgxOTIqKHQueCplLXRoaXMueCksODE5MioodC55KmUtdGhpcy55KSl9LGpjLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnorIi8iK3RoaXMueCsiLyIrdGhpcy55fTt2YXIgVWM9ZnVuY3Rpb24odCxlKXt0aGlzLndyYXA9dCx0aGlzLmNhbm9uaWNhbD1lLHRoaXMua2V5PXFjKHQsZS56LGUueixlLngsZS55KX0sVmM9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLm92ZXJzY2FsZWRaPXQsdGhpcy53cmFwPWUsdGhpcy5jYW5vbmljYWw9bmV3IGpjKHIsK24sK2kpLHRoaXMua2V5PXFjKGUsdCxyLG4saSl9O2Z1bmN0aW9uIHFjKHQsZSxyLG4saSl7KHQqPTIpPDAmJih0PS0xKnQtMSk7dmFyIGE9MTw8cjtyZXR1cm4oYSphKnQrYSppK24pLnRvU3RyaW5nKDM2KStyLnRvU3RyaW5nKDM2KStlLnRvU3RyaW5nKDM2KX1WYy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaPT09dC5vdmVyc2NhbGVkWiYmdGhpcy53cmFwPT09dC53cmFwJiZ0aGlzLmNhbm9uaWNhbC5lcXVhbHModC5jYW5vbmljYWwpfSxWYy5wcm90b3R5cGUuc2NhbGVkVG89ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10O3JldHVybiB0PnRoaXMuY2Fub25pY2FsLno/bmV3IFZjKHQsdGhpcy53cmFwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KTpuZXcgVmModCx0aGlzLndyYXAsdCx0aGlzLmNhbm9uaWNhbC54Pj5lLHRoaXMuY2Fub25pY2FsLnk+PmUpfSxWYy5wcm90b3R5cGUuY2FsY3VsYXRlU2NhbGVkS2V5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jYW5vbmljYWwuei10O3JldHVybiB0PnRoaXMuY2Fub25pY2FsLno/cWModGhpcy53cmFwKitlLHQsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpOnFjKHRoaXMud3JhcCorZSx0LHQsdGhpcy5jYW5vbmljYWwueD4+cix0aGlzLmNhbm9uaWNhbC55Pj5yKX0sVmMucHJvdG90eXBlLmlzQ2hpbGRPZj1mdW5jdGlvbih0KXtpZih0LndyYXAhPT10aGlzLndyYXApcmV0dXJuITE7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10LmNhbm9uaWNhbC56O3JldHVybiAwPT09dC5vdmVyc2NhbGVkWnx8dC5vdmVyc2NhbGVkWjx0aGlzLm92ZXJzY2FsZWRaJiZ0LmNhbm9uaWNhbC54PT09dGhpcy5jYW5vbmljYWwueD4+ZSYmdC5jYW5vbmljYWwueT09PXRoaXMuY2Fub25pY2FsLnk+PmV9LFZjLnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXtpZih0aGlzLm92ZXJzY2FsZWRaPj10KXJldHVybltuZXcgVmModGhpcy5vdmVyc2NhbGVkWisxLHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSldO3ZhciBlPXRoaXMuY2Fub25pY2FsLnorMSxyPTIqdGhpcy5jYW5vbmljYWwueCxuPTIqdGhpcy5jYW5vbmljYWwueTtyZXR1cm5bbmV3IFZjKGUsdGhpcy53cmFwLGUscixuKSxuZXcgVmMoZSx0aGlzLndyYXAsZSxyKzEsbiksbmV3IFZjKGUsdGhpcy53cmFwLGUscixuKzEpLG5ldyBWYyhlLHRoaXMud3JhcCxlLHIrMSxuKzEpXX0sVmMucHJvdG90eXBlLmlzTGVzc1RoYW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud3JhcDx0LndyYXB8fCEodGhpcy53cmFwPnQud3JhcCkmJih0aGlzLm92ZXJzY2FsZWRaPHQub3ZlcnNjYWxlZFp8fCEodGhpcy5vdmVyc2NhbGVkWj50Lm92ZXJzY2FsZWRaKSYmKHRoaXMuY2Fub25pY2FsLng8dC5jYW5vbmljYWwueHx8ISh0aGlzLmNhbm9uaWNhbC54PnQuY2Fub25pY2FsLngpJiZ0aGlzLmNhbm9uaWNhbC55PHQuY2Fub25pY2FsLnkpKX0sVmMucHJvdG90eXBlLndyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZjKHRoaXMub3ZlcnNjYWxlZFosMCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSl9LFZjLnByb3RvdHlwZS51bndyYXBUbz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZjKHRoaXMub3ZlcnNjYWxlZFosdCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSl9LFZjLnByb3RvdHlwZS5vdmVyc2NhbGVGYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5wb3coMix0aGlzLm92ZXJzY2FsZWRaLXRoaXMuY2Fub25pY2FsLnopfSxWYy5wcm90b3R5cGUudG9VbndyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVjKHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbCl9LFZjLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaKyIvIit0aGlzLmNhbm9uaWNhbC54KyIvIit0aGlzLmNhbm9uaWNhbC55fSxWYy5wcm90b3R5cGUuZ2V0VGlsZVBvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNhbm9uaWNhbC5nZXRUaWxlUG9pbnQobmV3IE5jKHQueC10aGlzLndyYXAsdC55KSl9LERuKCJDYW5vbmljYWxUaWxlSUQiLGpjKSxEbigiT3ZlcnNjYWxlZFRpbGVJRCIsVmMse29taXQ6WyJwb3NNYXRyaXgiXX0pO3ZhciBIYz1mdW5jdGlvbih0LGUscil7aWYodGhpcy51aWQ9dCxlLmhlaWdodCE9PWUud2lkdGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRFTSB0aWxlcyBtdXN0IGJlIHNxdWFyZSIpO2lmKHImJiJtYXBib3giIT09ciYmInRlcnJhcml1bSIhPT1yKXJldHVybiBfKCciJytyKyciIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuIFZhbGlkIHR5cGVzIGluY2x1ZGUgIm1hcGJveCIgYW5kICJ0ZXJyYXJpdW0iLicpO3RoaXMuc3RyaWRlPWUuaGVpZ2h0O3ZhciBuPXRoaXMuZGltPWUuaGVpZ2h0LTI7dGhpcy5kYXRhPW5ldyBVaW50MzJBcnJheShlLmRhdGEuYnVmZmVyKSx0aGlzLmVuY29kaW5nPXJ8fCJtYXBib3giO2Zvcih2YXIgaT0wO2k8bjtpKyspdGhpcy5kYXRhW3RoaXMuX2lkeCgtMSxpKV09dGhpcy5kYXRhW3RoaXMuX2lkeCgwLGkpXSx0aGlzLmRhdGFbdGhpcy5faWR4KG4saSldPXRoaXMuZGF0YVt0aGlzLl9pZHgobi0xLGkpXSx0aGlzLmRhdGFbdGhpcy5faWR4KGksLTEpXT10aGlzLmRhdGFbdGhpcy5faWR4KGksMCldLHRoaXMuZGF0YVt0aGlzLl9pZHgoaSxuKV09dGhpcy5kYXRhW3RoaXMuX2lkeChpLG4tMSldO3RoaXMuZGF0YVt0aGlzLl9pZHgoLTEsLTEpXT10aGlzLmRhdGFbdGhpcy5faWR4KDAsMCldLHRoaXMuZGF0YVt0aGlzLl9pZHgobiwtMSldPXRoaXMuZGF0YVt0aGlzLl9pZHgobi0xLDApXSx0aGlzLmRhdGFbdGhpcy5faWR4KC0xLG4pXT10aGlzLmRhdGFbdGhpcy5faWR4KDAsbi0xKV0sdGhpcy5kYXRhW3RoaXMuX2lkeChuLG4pXT10aGlzLmRhdGFbdGhpcy5faWR4KG4tMSxuLTEpXX07SGMucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBVaW50OEFycmF5KHRoaXMuZGF0YS5idWZmZXIpLG49NCp0aGlzLl9pZHgodCxlKTtyZXR1cm4oInRlcnJhcml1bSI9PT10aGlzLmVuY29kaW5nP3RoaXMuX3VucGFja1RlcnJhcml1bTp0aGlzLl91bnBhY2tNYXBib3gpKHJbbl0scltuKzFdLHJbbisyXSl9LEhjLnByb3RvdHlwZS5nZXRVbnBhY2tWZWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4idGVycmFyaXVtIj09PXRoaXMuZW5jb2Rpbmc/WzI1NiwxLDEvMjU2LDMyNzY4XTpbNjU1My42LDI1LjYsLjEsMWU0XX0sSGMucHJvdG90eXBlLl9pZHg9ZnVuY3Rpb24odCxlKXtpZih0PC0xfHx0Pj10aGlzLmRpbSsxfHxlPC0xfHxlPj10aGlzLmRpbSsxKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBERU0gZGF0YSIpO3JldHVybihlKzEpKnRoaXMuc3RyaWRlKyh0KzEpfSxIYy5wcm90b3R5cGUuX3VucGFja01hcGJveD1mdW5jdGlvbih0LGUscil7cmV0dXJuKDI1Nip0KjI1NisyNTYqZStyKS8xMC0xZTR9LEhjLnByb3RvdHlwZS5fdW5wYWNrVGVycmFyaXVtPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMjU2KnQrZStyLzI1Ni0zMjc2OH0sSGMucHJvdG90eXBlLmdldFBpeGVscz1mdW5jdGlvbigpe3JldHVybiBuZXcgcG8oe3dpZHRoOnRoaXMuc3RyaWRlLGhlaWdodDp0aGlzLnN0cmlkZX0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcikpfSxIYy5wcm90b3R5cGUuYmFja2ZpbGxCb3JkZXI9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuZGltIT09dC5kaW0pdGhyb3cgbmV3IEVycm9yKCJkZW0gZGltZW5zaW9uIG1pc21hdGNoIik7dmFyIG49ZSp0aGlzLmRpbSxpPWUqdGhpcy5kaW0rdGhpcy5kaW0sYT1yKnRoaXMuZGltLG89cip0aGlzLmRpbSt0aGlzLmRpbTtzd2l0Y2goZSl7Y2FzZS0xOm49aS0xO2JyZWFrO2Nhc2UgMTppPW4rMX1zd2l0Y2gocil7Y2FzZS0xOmE9by0xO2JyZWFrO2Nhc2UgMTpvPWErMX1mb3IodmFyIHM9LWUqdGhpcy5kaW0sbD0tcip0aGlzLmRpbSxjPWE7YzxvO2MrKylmb3IodmFyIHU9bjt1PGk7dSsrKXRoaXMuZGF0YVt0aGlzLl9pZHgodSxjKV09dC5kYXRhW3RoaXMuX2lkeCh1K3MsYytsKV19LERuKCJERU1EYXRhIixIYyk7dmFyIEdjPWZ1bmN0aW9uKHQpe3RoaXMuX3N0cmluZ1RvTnVtYmVyPXt9LHRoaXMuX251bWJlclRvU3RyaW5nPVtdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO3RoaXMuX3N0cmluZ1RvTnVtYmVyW3JdPWUsdGhpcy5fbnVtYmVyVG9TdHJpbmdbZV09cn19O0djLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3RdfSxHYy5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9udW1iZXJUb1N0cmluZ1t0XX07dmFyIFljPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50eXBlPSJGZWF0dXJlIix0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZT10LHQuX3o9ZSx0Ll94PXIsdC5feT1uLHRoaXMucHJvcGVydGllcz10LnByb3BlcnRpZXMsdGhpcy5pZD1pfSxXYz17Z2VvbWV0cnk6e2NvbmZpZ3VyYWJsZTohMH19O1djLmdlb21ldHJ5LmdldD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLl9nZW9tZXRyeSYmKHRoaXMuX2dlb21ldHJ5PXRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLnRvR2VvSlNPTih0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feCx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feSx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feikuZ2VvbWV0cnkpLHRoaXMuX2dlb21ldHJ5fSxXYy5nZW9tZXRyeS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fZ2VvbWV0cnk9dH0sWWMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciB0PXtnZW9tZXRyeTp0aGlzLmdlb21ldHJ5fTtmb3IodmFyIGUgaW4gdGhpcykiX2dlb21ldHJ5IiE9PWUmJiJfdmVjdG9yVGlsZUZlYXR1cmUiIT09ZSYmKHRbZV09dGhpc1tlXSk7cmV0dXJuIHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFljLnByb3RvdHlwZSxXYyk7dmFyIFhjPWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT17fSx0aGlzLnN0YXRlQ2hhbmdlcz17fSx0aGlzLmRlbGV0ZWRTdGF0ZXM9e319O1hjLnByb3RvdHlwZS51cGRhdGVTdGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49U3RyaW5nKGUpO2lmKHRoaXMuc3RhdGVDaGFuZ2VzW3RdPXRoaXMuc3RhdGVDaGFuZ2VzW3RdfHx7fSx0aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXT10aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXXx8e30sdSh0aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXSxyKSxudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW3RdKWZvcih2YXIgaSBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF09e30sdGhpcy5zdGF0ZVt0XSlpIT09biYmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtpXT1udWxsKTtlbHNlIGlmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XSYmbnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXSlmb3IodmFyIGEgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXt9LHRoaXMuc3RhdGVbdF1bbl0pclthXXx8KHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVthXT1udWxsKTtlbHNlIGZvcih2YXIgbyBpbiByKXRoaXMuZGVsZXRlZFN0YXRlc1t0XSYmdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dJiZudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW29dJiZkZWxldGUgdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW29dfSxYYy5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsIT09dGhpcy5kZWxldGVkU3RhdGVzW3RdKXt2YXIgbj1TdHJpbmcoZSk7aWYodGhpcy5kZWxldGVkU3RhdGVzW3RdPXRoaXMuZGVsZXRlZFN0YXRlc1t0XXx8e30sciYmdm9pZCAwIT09ZSludWxsIT09dGhpcy5kZWxldGVkU3RhdGVzW3RdW25dJiYodGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXXx8e30sdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW3JdPW51bGwpO2Vsc2UgaWYodm9pZCAwIT09ZSlpZih0aGlzLnN0YXRlQ2hhbmdlc1t0XSYmdGhpcy5zdGF0ZUNoYW5nZXNbdF1bbl0pZm9yKHIgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXt9LHRoaXMuc3RhdGVDaGFuZ2VzW3RdW25dKXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVtyXT1udWxsO2Vsc2UgdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPW51bGw7ZWxzZSB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF09bnVsbH19LFhjLnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPVN0cmluZyhlKSxuPXUoe30sKHRoaXMuc3RhdGVbdF18fHt9KVtyXSwodGhpcy5zdGF0ZUNoYW5nZXNbdF18fHt9KVtyXSk7aWYobnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XSlyZXR1cm57fTtpZih0aGlzLmRlbGV0ZWRTdGF0ZXNbdF0pe3ZhciBpPXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtlXTtpZihudWxsPT09aSlyZXR1cm57fTtmb3IodmFyIGEgaW4gaSlkZWxldGUgblthXX1yZXR1cm4gbn0sWGMucHJvdG90eXBlLmluaXRpYWxpemVUaWxlU3RhdGU9ZnVuY3Rpb24odCxlKXt0LnNldEZlYXR1cmVTdGF0ZSh0aGlzLnN0YXRlLGUpfSxYYy5wcm90b3R5cGUuY29hbGVzY2VDaGFuZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307Zm9yKHZhciBuIGluIHRoaXMuc3RhdGVDaGFuZ2VzKXt0aGlzLnN0YXRlW25dPXRoaXMuc3RhdGVbbl18fHt9O3ZhciBpPXt9O2Zvcih2YXIgYSBpbiB0aGlzLnN0YXRlQ2hhbmdlc1tuXSl0aGlzLnN0YXRlW25dW2FdfHwodGhpcy5zdGF0ZVtuXVthXT17fSksdSh0aGlzLnN0YXRlW25dW2FdLHRoaXMuc3RhdGVDaGFuZ2VzW25dW2FdKSxpW2FdPXRoaXMuc3RhdGVbbl1bYV07cltuXT1pfWZvcih2YXIgbyBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXMpe3RoaXMuc3RhdGVbb109dGhpcy5zdGF0ZVtvXXx8e307dmFyIHM9e307aWYobnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1tvXSlmb3IodmFyIGwgaW4gdGhpcy5zdGF0ZVtvXSlzW2xdPXt9LHRoaXMuc3RhdGVbb11bbF09e307ZWxzZSBmb3IodmFyIGMgaW4gdGhpcy5kZWxldGVkU3RhdGVzW29dKXtpZihudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW29dW2NdKXRoaXMuc3RhdGVbb11bY109e307ZWxzZSBmb3IodmFyIGY9MCxoPU9iamVjdC5rZXlzKHRoaXMuZGVsZXRlZFN0YXRlc1tvXVtjXSk7ZjxoLmxlbmd0aDtmKz0xKWRlbGV0ZSB0aGlzLnN0YXRlW29dW2NdW2hbZl1dO3NbY109dGhpcy5zdGF0ZVtvXVtjXX1yW29dPXJbb118fHt9LHUocltvXSxzKX1pZih0aGlzLnN0YXRlQ2hhbmdlcz17fSx0aGlzLmRlbGV0ZWRTdGF0ZXM9e30sMCE9PU9iamVjdC5rZXlzKHIpLmxlbmd0aClmb3IodmFyIHAgaW4gdCl0W3BdLnNldEZlYXR1cmVTdGF0ZShyLGUpfTt2YXIgWmM9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbGVJRD10LHRoaXMueD10LmNhbm9uaWNhbC54LHRoaXMueT10LmNhbm9uaWNhbC55LHRoaXMuej10LmNhbm9uaWNhbC56LHRoaXMuZ3JpZD1uZXcgTG4oODE5MiwxNiwwKSx0aGlzLmdyaWQzRD1uZXcgTG4oODE5MiwxNiwwKSx0aGlzLmZlYXR1cmVJbmRleEFycmF5PW5ldyByYSx0aGlzLnByb21vdGVJZD1lfTtmdW5jdGlvbiBKYyh0LGUscixuLGkpe3JldHVybiB2KHQsKGZ1bmN0aW9uKHQsYSl7dmFyIG89ZSBpbnN0YW5jZW9mIGhpP2UuZ2V0KGEpOm51bGw7cmV0dXJuIG8mJm8uZXZhbHVhdGU/by5ldmFsdWF0ZShyLG4saSk6b30pKX1mdW5jdGlvbiBLYyh0KXtmb3IodmFyIGU9MS8wLHI9MS8wLG49LTEvMCxpPS0xLzAsYT0wLG89dDthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07ZT1NYXRoLm1pbihlLHMueCkscj1NYXRoLm1pbihyLHMueSksbj1NYXRoLm1heChuLHMueCksaT1NYXRoLm1heChpLHMueSl9cmV0dXJue21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX19ZnVuY3Rpb24gUWModCxlKXtyZXR1cm4gZS10fVpjLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMuZmVhdHVyZUluZGV4QXJyYXkubGVuZ3RoO3RoaXMuZmVhdHVyZUluZGV4QXJyYXkuZW1wbGFjZUJhY2socixuLGkpO2Zvcih2YXIgcz1hP3RoaXMuZ3JpZDNEOnRoaXMuZ3JpZCxsPTA7bDxlLmxlbmd0aDtsKyspe2Zvcih2YXIgYz1lW2xdLHU9WzEvMCwxLzAsLTEvMCwtMS8wXSxmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBoPWNbZl07dVswXT1NYXRoLm1pbih1WzBdLGgueCksdVsxXT1NYXRoLm1pbih1WzFdLGgueSksdVsyXT1NYXRoLm1heCh1WzJdLGgueCksdVszXT1NYXRoLm1heCh1WzNdLGgueSl9dVswXTw4MTkyJiZ1WzFdPDgxOTImJnVbMl0+PTAmJnVbM10+PTAmJnMuaW5zZXJ0KG8sdVswXSx1WzFdLHVbMl0sdVszXSl9fSxaYy5wcm90b3R5cGUubG9hZFZUTGF5ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudnRMYXllcnN8fCh0aGlzLnZ0TGF5ZXJzPW5ldyBncy5WZWN0b3JUaWxlKG5ldyBIcyh0aGlzLnJhd1RpbGVEYXRhKSkubGF5ZXJzLHRoaXMuc291cmNlTGF5ZXJDb2Rlcj1uZXcgR2ModGhpcy52dExheWVycz9PYmplY3Qua2V5cyh0aGlzLnZ0TGF5ZXJzKS5zb3J0KCk6WyJfZ2VvanNvblRpbGVMYXllciJdKSksdGhpcy52dExheWVyc30sWmMucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRoaXM7dGhpcy5sb2FkVlRMYXllcnMoKTtmb3IodmFyIG89dC5wYXJhbXN8fHt9LHM9ODE5Mi90LnRpbGVTaXplL3Quc2NhbGUsbD1ybihvLmZpbHRlciksYz10LnF1ZXJ5R2VvbWV0cnksdT10LnF1ZXJ5UGFkZGluZypzLGY9S2MoYyksaD10aGlzLmdyaWQucXVlcnkoZi5taW5YLXUsZi5taW5ZLXUsZi5tYXhYK3UsZi5tYXhZK3UpLHA9S2ModC5jYW1lcmFRdWVyeUdlb21ldHJ5KSxkPTAsZz10aGlzLmdyaWQzRC5xdWVyeShwLm1pblgtdSxwLm1pblktdSxwLm1heFgrdSxwLm1heFkrdSwoZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4sYSl7Zm9yKHZhciBvPTAscz10O288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtpZihlPD1sLngmJnI8PWwueSYmbj49bC54JiZhPj1sLnkpcmV0dXJuITB9dmFyIGM9W25ldyBpKGUsciksbmV3IGkoZSxhKSxuZXcgaShuLGEpLG5ldyBpKG4scildO2lmKHQubGVuZ3RoPjIpZm9yKHZhciB1PTAsZj1jO3U8Zi5sZW5ndGg7dSs9MSlpZihXYSh0LGZbdV0pKXJldHVybiEwO2Zvcih2YXIgaD0wO2g8dC5sZW5ndGgtMTtoKyspaWYoWGEodFtoXSx0W2grMV0sYykpcmV0dXJuITA7cmV0dXJuITF9KHQuY2FtZXJhUXVlcnlHZW9tZXRyeSxlLXUsci11LG4rdSxhK3UpfSkpO2Q8Zy5sZW5ndGg7ZCs9MSloLnB1c2goZ1tkXSk7aC5zb3J0KFFjKTtmb3IodmFyIG0sdj17fSx5PWZ1bmN0aW9uKGkpe3ZhciB1PWhbaV07aWYodSE9PW0pe209dTt2YXIgZj1hLmZlYXR1cmVJbmRleEFycmF5LmdldCh1KSxwPW51bGw7YS5sb2FkTWF0Y2hpbmdGZWF0dXJlKHYsZi5idWNrZXRJbmRleCxmLnNvdXJjZUxheWVySW5kZXgsZi5mZWF0dXJlSW5kZXgsbCxvLmxheWVycyxvLmF2YWlsYWJsZUltYWdlcyxlLHIsbiwoZnVuY3Rpb24oZSxyLG4pe3JldHVybiBwfHwocD1EYShlKSksci5xdWVyeUludGVyc2VjdHNGZWF0dXJlKGMsZSxuLHAsYS56LHQudHJhbnNmb3JtLHMsdC5waXhlbFBvc01hdHJpeCl9KSl9fSx4PTA7eDxoLmxlbmd0aDt4KyspeSh4KTtyZXR1cm4gdn0sWmMucHJvdG90eXBlLmxvYWRNYXRjaGluZ0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj10aGlzLmJ1Y2tldExheWVySURzW2VdO2lmKCFhfHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGUuaW5kZXhPZih0W3JdKT49MClyZXR1cm4hMDtyZXR1cm4hMX0oYSxmKSl7dmFyIGg9dGhpcy5zb3VyY2VMYXllckNvZGVyLmRlY29kZShyKSxwPXRoaXMudnRMYXllcnNbaF0uZmVhdHVyZShuKTtpZihpLmZpbHRlcihuZXcgaWkodGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLHApKWZvcih2YXIgZD10aGlzLmdldElkKHAsaCksZz0wO2c8Zi5sZW5ndGg7ZysrKXt2YXIgbT1mW2ddO2lmKCEoYSYmYS5pbmRleE9mKG0pPDApKXt2YXIgdj1zW21dO2lmKHYpe3ZhciB5PXt9O3ZvaWQgMCE9PWQmJmMmJih5PWMuZ2V0U3RhdGUodi5zb3VyY2VMYXllcnx8Il9nZW9qc29uVGlsZUxheWVyIixkKSk7dmFyIHg9bFttXTt4LnBhaW50PUpjKHgucGFpbnQsdi5wYWludCxwLHksbykseC5sYXlvdXQ9SmMoeC5sYXlvdXQsdi5sYXlvdXQscCx5LG8pO3ZhciBiPSF1fHx1KHAsdix5KTtpZihiKXt2YXIgXz1uZXcgWWMocCx0aGlzLnosdGhpcy54LHRoaXMueSxkKTtfLmxheWVyPXg7dmFyIHc9dFttXTt2b2lkIDA9PT13JiYodz10W21dPVtdKSx3LnB1c2goe2ZlYXR1cmVJbmRleDpuLGZlYXR1cmU6XyxpbnRlcnNlY3Rpb25aOmJ9KX19fX19fSxaYy5wcm90b3R5cGUubG9va3VwU3ltYm9sRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD17fTt0aGlzLmxvYWRWVExheWVycygpO2Zvcih2YXIgYz1ybihpKSx1PTAsZj10O3U8Zi5sZW5ndGg7dSs9MSl0aGlzLmxvYWRNYXRjaGluZ0ZlYXR1cmUobCxyLG4sZlt1XSxjLGEsbyxzLGUpO3JldHVybiBsfSxaYy5wcm90b3R5cGUuaGFzTGF5ZXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJ1Y2tldExheWVySURzO2U8ci5sZW5ndGg7ZSs9MSlmb3IodmFyIG49MCxpPXJbZV07bjxpLmxlbmd0aDtuKz0xKWlmKHQ9PT1pW25dKXJldHVybiEwO3JldHVybiExfSxaYy5wcm90b3R5cGUuZ2V0SWQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmlkO3JldHVybiB0aGlzLnByb21vdGVJZCYmImJvb2xlYW4iPT10eXBlb2Yocj10LnByb3BlcnRpZXNbInN0cmluZyI9PXR5cGVvZiB0aGlzLnByb21vdGVJZD90aGlzLnByb21vdGVJZDp0aGlzLnByb21vdGVJZFtlXV0pJiYocj1OdW1iZXIocikpLHJ9LERuKCJGZWF0dXJlSW5kZXgiLFpjLHtvbWl0OlsicmF3VGlsZURhdGEiLCJzb3VyY2VMYXllckNvZGVyIl19KTt2YXIgJGM9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbGVJRD10LHRoaXMudWlkPWgoKSx0aGlzLnVzZXM9MCx0aGlzLnRpbGVTaXplPWUsdGhpcy5idWNrZXRzPXt9LHRoaXMuZXhwaXJhdGlvblRpbWU9bnVsbCx0aGlzLnF1ZXJ5UGFkZGluZz0wLHRoaXMuaGFzU3ltYm9sQnVja2V0cz0hMSx0aGlzLmhhc1JUTFRleHQ9ITEsdGhpcy5kZXBlbmRlbmNpZXM9e30sdGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTAsdGhpcy5zdGF0ZT0ibG9hZGluZyJ9OyRjLnByb3RvdHlwZS5yZWdpc3RlckZhZGVEdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10K3RoaXMudGltZUFkZGVkO2U8Ui5ub3coKXx8dGhpcy5mYWRlRW5kVGltZSYmZTx0aGlzLmZhZGVFbmRUaW1lfHwodGhpcy5mYWRlRW5kVGltZT1lKX0sJGMucHJvdG90eXBlLndhc1JlcXVlc3RlZD1mdW5jdGlvbigpe3JldHVybiJlcnJvcmVkIj09PXRoaXMuc3RhdGV8fCJsb2FkZWQiPT09dGhpcy5zdGF0ZXx8InJlbG9hZGluZyI9PT10aGlzLnN0YXRlfSwkYy5wcm90b3R5cGUubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuaGFzRGF0YSgpJiZ0aGlzLnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLnN0YXRlPSJsb2FkZWQiLHQpe2Zvcih2YXIgbiBpbiB0LmZlYXR1cmVJbmRleCYmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PXQuZmVhdHVyZUluZGV4LHQucmF3VGlsZURhdGE/KHRoaXMubGF0ZXN0UmF3VGlsZURhdGE9dC5yYXdUaWxlRGF0YSx0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT10LnJhd1RpbGVEYXRhKTp0aGlzLmxhdGVzdFJhd1RpbGVEYXRhJiYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE9dGhpcy5sYXRlc3RSYXdUaWxlRGF0YSkpLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9dC5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLmJ1Y2tldHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtpZighZSlyZXR1cm4gcjtmb3IodmFyIG49ZnVuY3Rpb24oKXt2YXIgdD1hW2ldLG49dC5sYXllcklkcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmdldExheWVyKHQpfSkpLmZpbHRlcihCb29sZWFuKTtpZigwIT09bi5sZW5ndGgpe3QubGF5ZXJzPW4sdC5zdGF0ZURlcGVuZGVudExheWVySWRzJiYodC5zdGF0ZURlcGVuZGVudExheWVycz10LnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dH0pKVswXX0pKSk7Zm9yKHZhciBvPTAscz1uO288cy5sZW5ndGg7bys9MSlyW3Nbb10uaWRdPXR9fSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSluKCk7cmV0dXJuIHJ9KHQuYnVja2V0cyxlLnN0eWxlKSx0aGlzLmhhc1N5bWJvbEJ1Y2tldHM9ITEsdGhpcy5idWNrZXRzKXt2YXIgaT10aGlzLmJ1Y2tldHNbbl07aWYoaSBpbnN0YW5jZW9mIGZjKXtpZih0aGlzLmhhc1N5bWJvbEJ1Y2tldHM9ITAsIXIpYnJlYWs7aS5qdXN0UmVsb2FkZWQ9ITB9fWlmKHRoaXMuaGFzUlRMVGV4dD0hMSx0aGlzLmhhc1N5bWJvbEJ1Y2tldHMpZm9yKHZhciBhIGluIHRoaXMuYnVja2V0cyl7dmFyIG89dGhpcy5idWNrZXRzW2FdO2lmKG8gaW5zdGFuY2VvZiBmYyYmby5oYXNSVExUZXh0KXt0aGlzLmhhc1JUTFRleHQ9ITAsbmkuaXNMb2FkaW5nKCl8fG5pLmlzTG9hZGVkKCl8fCJkZWZlcnJlZCIhPT1laSgpfHxyaSgpO2JyZWFrfX1mb3IodmFyIHMgaW4gdGhpcy5xdWVyeVBhZGRpbmc9MCx0aGlzLmJ1Y2tldHMpe3ZhciBsPXRoaXMuYnVja2V0c1tzXTt0aGlzLnF1ZXJ5UGFkZGluZz1NYXRoLm1heCh0aGlzLnF1ZXJ5UGFkZGluZyxlLnN0eWxlLmdldExheWVyKHMpLnF1ZXJ5UmFkaXVzKGwpKX10LmltYWdlQXRsYXMmJih0aGlzLmltYWdlQXRsYXM9dC5pbWFnZUF0bGFzKSx0LmdseXBoQXRsYXNJbWFnZSYmKHRoaXMuZ2x5cGhBdGxhc0ltYWdlPXQuZ2x5cGhBdGxhc0ltYWdlKX1lbHNlIHRoaXMuY29sbGlzaW9uQm94QXJyYXk9bmV3IFhpfSwkYy5wcm90b3R5cGUudW5sb2FkVmVjdG9yRGF0YT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmJ1Y2tldHMpdGhpcy5idWNrZXRzW3RdLmRlc3Ryb3koKTt0aGlzLmJ1Y2tldHM9e30sdGhpcy5pbWFnZUF0bGFzVGV4dHVyZSYmdGhpcy5pbWFnZUF0bGFzVGV4dHVyZS5kZXN0cm95KCksdGhpcy5pbWFnZUF0bGFzJiYodGhpcy5pbWFnZUF0bGFzPW51bGwpLHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUmJnRoaXMuZ2x5cGhBdGxhc1RleHR1cmUuZGVzdHJveSgpLHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PW51bGwsdGhpcy5zdGF0ZT0idW5sb2FkZWQifSwkYy5wcm90b3R5cGUuZ2V0QnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJ1Y2tldHNbdC5pZF19LCRjLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYnVja2V0cyl7dmFyIHI9dGhpcy5idWNrZXRzW2VdO3IudXBsb2FkUGVuZGluZygpJiZyLnVwbG9hZCh0KX12YXIgbj10LmdsO3RoaXMuaW1hZ2VBdGxhcyYmIXRoaXMuaW1hZ2VBdGxhcy51cGxvYWRlZCYmKHRoaXMuaW1hZ2VBdGxhc1RleHR1cmU9bmV3IFNjKHQsdGhpcy5pbWFnZUF0bGFzLmltYWdlLG4uUkdCQSksdGhpcy5pbWFnZUF0bGFzLnVwbG9hZGVkPSEwKSx0aGlzLmdseXBoQXRsYXNJbWFnZSYmKHRoaXMuZ2x5cGhBdGxhc1RleHR1cmU9bmV3IFNjKHQsdGhpcy5nbHlwaEF0bGFzSW1hZ2Usbi5BTFBIQSksdGhpcy5nbHlwaEF0bGFzSW1hZ2U9bnVsbCl9LCRjLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKHQpe3RoaXMuaW1hZ2VBdGxhcyYmdGhpcy5pbWFnZUF0bGFzLnBhdGNoVXBkYXRlZEltYWdlcyh0LHRoaXMuaW1hZ2VBdGxhc1RleHR1cmUpfSwkYy5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3JldHVybiB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCYmdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE/dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucXVlcnkoe3F1ZXJ5R2VvbWV0cnk6bixjYW1lcmFRdWVyeUdlb21ldHJ5Omksc2NhbGU6YSx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHBpeGVsUG9zTWF0cml4OmMsdHJhbnNmb3JtOnMscGFyYW1zOm8scXVlcnlQYWRkaW5nOnRoaXMucXVlcnlQYWRkaW5nKmx9LHQsZSxyKTp7fX0sJGMucHJvdG90eXBlLnF1ZXJ5U291cmNlRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxhdGVzdEZlYXR1cmVJbmRleDtpZihyJiZyLnJhd1RpbGVEYXRhKXt2YXIgbj1yLmxvYWRWVExheWVycygpLGk9ZT9lLnNvdXJjZUxheWVyOiIiLGE9bi5fZ2VvanNvblRpbGVMYXllcnx8bltpXTtpZihhKWZvcih2YXIgbz1ybihlJiZlLmZpbHRlcikscz10aGlzLnRpbGVJRC5jYW5vbmljYWwsbD1zLnosYz1zLngsdT1zLnksZj17ejpsLHg6Yyx5OnV9LGg9MDtoPGEubGVuZ3RoO2grKyl7dmFyIHA9YS5mZWF0dXJlKGgpO2lmKG8uZmlsdGVyKG5ldyBpaSh0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWikscCkpe3ZhciBkPXIuZ2V0SWQocCxpKSxnPW5ldyBZYyhwLGwsYyx1LGQpO2cudGlsZT1mLHQucHVzaChnKX19fX0sJGMucHJvdG90eXBlLmhhc0RhdGE9ZnVuY3Rpb24oKXtyZXR1cm4ibG9hZGVkIj09PXRoaXMuc3RhdGV8fCJyZWxvYWRpbmciPT09dGhpcy5zdGF0ZXx8ImV4cGlyZWQiPT09dGhpcy5zdGF0ZX0sJGMucHJvdG90eXBlLnBhdHRlcm5zTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2VBdGxhcyYmISFPYmplY3Qua2V5cyh0aGlzLmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9ucykubGVuZ3RofSwkYy5wcm90b3R5cGUuc2V0RXhwaXJ5RGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmV4cGlyYXRpb25UaW1lO2lmKHQuY2FjaGVDb250cm9sKXt2YXIgcj1NKHQuY2FjaGVDb250cm9sKTtyWyJtYXgtYWdlIl0mJih0aGlzLmV4cGlyYXRpb25UaW1lPURhdGUubm93KCkrMWUzKnJbIm1heC1hZ2UiXSl9ZWxzZSB0LmV4cGlyZXMmJih0aGlzLmV4cGlyYXRpb25UaW1lPW5ldyBEYXRlKHQuZXhwaXJlcykuZ2V0VGltZSgpKTtpZih0aGlzLmV4cGlyYXRpb25UaW1lKXt2YXIgbj1EYXRlLm5vdygpLGk9ITE7aWYodGhpcy5leHBpcmF0aW9uVGltZT5uKWk9ITE7ZWxzZSBpZihlKWlmKHRoaXMuZXhwaXJhdGlvblRpbWU8ZSlpPSEwO2Vsc2V7dmFyIGE9dGhpcy5leHBpcmF0aW9uVGltZS1lO2E/dGhpcy5leHBpcmF0aW9uVGltZT1uK01hdGgubWF4KGEsM2U0KTppPSEwfWVsc2UgaT0hMDtpPyh0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQrKyx0aGlzLnN0YXRlPSJleHBpcmVkIik6dGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTB9fSwkYy5wcm90b3R5cGUuZ2V0RXhwaXJ5VGltZW91dD1mdW5jdGlvbigpe2lmKHRoaXMuZXhwaXJhdGlvblRpbWUpcmV0dXJuIHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD8xZTMqKDE8PE1hdGgubWluKHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudC0xLDMxKSk6TWF0aC5taW4odGhpcy5leHBpcmF0aW9uVGltZS0obmV3IERhdGUpLmdldFRpbWUoKSxNYXRoLnBvdygyLDMxKS0xKX0sJGMucHJvdG90eXBlLnNldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUpe2lmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4JiZ0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSYmMCE9PU9iamVjdC5rZXlzKHQpLmxlbmd0aCl7dmFyIHI9dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgubG9hZFZUTGF5ZXJzKCk7Zm9yKHZhciBuIGluIHRoaXMuYnVja2V0cylpZihlLnN0eWxlLmhhc0xheWVyKG4pKXt2YXIgaT10aGlzLmJ1Y2tldHNbbl0sYT1pLmxheWVyc1swXS5zb3VyY2VMYXllcnx8Il9nZW9qc29uVGlsZUxheWVyIixvPXJbYV0scz10W2FdO2lmKG8mJnMmJjAhPT1PYmplY3Qua2V5cyhzKS5sZW5ndGgpe2kudXBkYXRlKHMsbyx0aGlzLmltYWdlQXRsYXMmJnRoaXMuaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zfHx7fSk7dmFyIGw9ZSYmZS5zdHlsZSYmZS5zdHlsZS5nZXRMYXllcihuKTtsJiYodGhpcy5xdWVyeVBhZGRpbmc9TWF0aC5tYXgodGhpcy5xdWVyeVBhZGRpbmcsbC5xdWVyeVJhZGl1cyhpKSkpfX19fSwkYy5wcm90b3R5cGUuaG9sZGluZ0ZvckZhZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsfSwkYy5wcm90b3R5cGUuc3ltYm9sRmFkZUZpbmlzaGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbHx8dGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsPFIubm93KCl9LCRjLnByb3RvdHlwZS5jbGVhckZhZGVIb2xkPWZ1bmN0aW9uKCl7dGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsPXZvaWQgMH0sJGMucHJvdG90eXBlLnNldEhvbGREdXJhdGlvbj1mdW5jdGlvbih0KXt0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWw9Ui5ub3coKSt0fSwkYy5wcm90b3R5cGUuc2V0RGVwZW5kZW5jaWVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXJbaVtuXV09ITA7dGhpcy5kZXBlbmRlbmNpZXNbdF09cn0sJGMucHJvdG90eXBlLmhhc0RlcGVuZGVuY3k9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT10aGlzLmRlcGVuZGVuY2llc1tuW3JdXTtpZihpKWZvcih2YXIgYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpaWYoaVtvW2FdXSlyZXR1cm4hMH1yZXR1cm4hMX07dmFyIHR1PXNlbGYucGVyZm9ybWFuY2UsZXU9ZnVuY3Rpb24odCl7dGhpcy5fbWFya3M9e3N0YXJ0Olt0LnVybCwic3RhcnQiXS5qb2luKCIjIiksZW5kOlt0LnVybCwiZW5kIl0uam9pbigiIyIpLG1lYXN1cmU6dC51cmwudG9TdHJpbmcoKX0sdHUubWFyayh0aGlzLl9tYXJrcy5zdGFydCl9O2V1LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0dS5tYXJrKHRoaXMuX21hcmtzLmVuZCk7dmFyIHQ9dHUuZ2V0RW50cmllc0J5TmFtZSh0aGlzLl9tYXJrcy5tZWFzdXJlKTtyZXR1cm4gMD09PXQubGVuZ3RoJiYodHUubWVhc3VyZSh0aGlzLl9tYXJrcy5tZWFzdXJlLHRoaXMuX21hcmtzLnN0YXJ0LHRoaXMuX21hcmtzLmVuZCksdD10dS5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuX21hcmtzLm1lYXN1cmUpLHR1LmNsZWFyTWFya3ModGhpcy5fbWFya3Muc3RhcnQpLHR1LmNsZWFyTWFya3ModGhpcy5fbWFya3MuZW5kKSx0dS5jbGVhck1lYXN1cmVzKHRoaXMuX21hcmtzLm1lYXN1cmUpKSx0fSx0LkFjdG9yPUNjLHQuQWxwaGFJbWFnZT1obyx0LkNhbm9uaWNhbFRpbGVJRD1qYyx0LkNvbGxpc2lvbkJveEFycmF5PVhpLHQuQ29sb3I9S3QsdC5ERU1EYXRhPUhjLHQuRGF0YUNvbnN0YW50UHJvcGVydHk9cGksdC5EaWN0aW9uYXJ5Q29kZXI9R2MsdC5FWFRFTlQ9ODE5Mix0LkVycm9yRXZlbnQ9a3QsdC5FdmFsdWF0aW9uUGFyYW1ldGVycz1paSx0LkV2ZW50PVR0LHQuRXZlbnRlZD1NdCx0LkZlYXR1cmVJbmRleD1aYyx0LkZpbGxCdWNrZXQ9cnMsdC5GaWxsRXh0cnVzaW9uQnVja2V0PXhzLHQuSW1hZ2VBdGxhcz1kbCx0LkltYWdlUG9zaXRpb249aGwsdC5MaW5lQnVja2V0PUNzLHQuTG5nTGF0PVBjLHQuTG5nTGF0Qm91bmRzPUljLHQuTWVyY2F0b3JDb29yZGluYXRlPU5jLHQuT05FX0VNPTI0LHQuT3ZlcnNjYWxlZFRpbGVJRD1WYyx0LlBvaW50PWksdC5Qb2ludCQxPWksdC5Qcm9wZXJ0aWVzPXlpLHQuUHJvdG9idWY9SHMsdC5SR0JBSW1hZ2U9cG8sdC5SZXF1ZXN0TWFuYWdlcj1xLHQuUmVxdWVzdFBlcmZvcm1hbmNlPWV1LHQuUmVzb3VyY2VUeXBlPWh0LHQuU2VnbWVudFZlY3Rvcj1pYSx0LlNvdXJjZUZlYXR1cmVTdGF0ZT1YYyx0LlN0cnVjdEFycmF5TGF5b3V0MXVpMj1IaSx0LlN0cnVjdEFycmF5TGF5b3V0MmYxZjJpMTY9RGksdC5TdHJ1Y3RBcnJheUxheW91dDJpND1NaSx0LlN0cnVjdEFycmF5TGF5b3V0M3VpNj1GaSx0LlN0cnVjdEFycmF5TGF5b3V0NGk4PUFpLHQuU3ltYm9sQnVja2V0PWZjLHQuVGV4dHVyZT1TYyx0LlRpbGU9JGMsdC5UcmFuc2l0aW9uYWJsZT1zaSx0LlVuaWZvcm0xZj12YSx0LlVuaWZvcm0xaT1tYSx0LlVuaWZvcm0yZj15YSx0LlVuaWZvcm0zZj14YSx0LlVuaWZvcm00Zj1iYSx0LlVuaWZvcm1Db2xvcj1fYSx0LlVuaWZvcm1NYXRyaXg0Zj1UYSx0LlVud3JhcHBlZFRpbGVJRD1VYyx0LlZhbGlkYXRpb25FcnJvcj1TdCx0LldyaXRpbmdNb2RlPWdsLHQuWm9vbUhpc3Rvcnk9VW4sdC5hZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0fSx0LmFkZER5bmFtaWNBdHRyaWJ1dGVzPXNjLHQuYXN5bmNBbGw9ZnVuY3Rpb24odCxlLHIpe2lmKCF0Lmxlbmd0aClyZXR1cm4gcihudWxsLFtdKTt2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheSh0Lmxlbmd0aCksYT1udWxsO3QuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXtlKHQsKGZ1bmN0aW9uKHQsZSl7dCYmKGE9dCksaVtvXT1lLDA9PS0tbiYmcihhLGkpfSkpfSkpfSx0LmJlemllcj1vLHQuYmluZEFsbD1nLHQuYnJvd3Nlcj1SLHQuY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQ9ZnVuY3Rpb24odCl7Kyt1dD5vdCYmKHQuZ2V0QWN0b3IoKS5zZW5kKCJlbmZvcmNlQ2FjaGVTaXplTGltaXQiLGF0KSx1dD0wKX0sdC5jbGFtcD1sLHQuY2xlYXJUaWxlQ2FjaGU9ZnVuY3Rpb24odCl7dmFyIGU9c2VsZi5jYWNoZXMuZGVsZXRlKCJtYXBib3gtdGlsZXMiKTt0JiZlLmNhdGNoKHQpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQoKX0pKX0sdC5jbGlwTGluZT1qbCx0LmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0bygxNik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlfSx0LmNsb25lJDE9eCx0LmNsb25lJDI9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHRvKDMpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlfSx0LmNvbGxpc2lvbkNpcmNsZUxheW91dD1Ocyx0LmNvbmZpZz1GLHQuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHRvKDE2KTtyZXR1cm4gdG8hPUZsb2F0MzJBcnJheSYmKHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCksdFswXT0xLHRbNV09MSx0WzEwXT0xLHRbMTVdPTEsdH0sdC5jcmVhdGUkMT1mdW5jdGlvbigpe3ZhciB0PW5ldyB0byg5KTtyZXR1cm4gdG8hPUZsb2F0MzJBcnJheSYmKHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNV09MCx0WzZdPTAsdFs3XT0wKSx0WzBdPTEsdFs0XT0xLHRbOF09MSx0fSx0LmNyZWF0ZSQyPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHRvKDQpO3JldHVybiB0byE9RmxvYXQzMkFycmF5JiYodFsxXT0wLHRbMl09MCksdFswXT0xLHRbM109MSx0fSx0LmNyZWF0ZUNvbW1vbmpzTW9kdWxlPWUsdC5jcmVhdGVFeHByZXNzaW9uPXFyLHQuY3JlYXRlTGF5b3V0PVRpLHQuY3JlYXRlU3R5bGVMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4iY3VzdG9tIj09PXQudHlwZT9uZXcgYmModCk6bmV3IF9jW3QudHlwZV0odCl9LHQuY3Jvc3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH0sdC5kZWVwRXF1YWw9ZnVuY3Rpb24gdChlLHIpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKCFBcnJheS5pc0FycmF5KHIpfHxlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKCF0KGVbbl0scltuXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9PXIpe2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4hMTtpZihPYmplY3Qua2V5cyhlKS5sZW5ndGghPT1PYmplY3Qua2V5cyhyKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpIGluIGUpaWYoIXQoZVtpXSxyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gZT09PXJ9LHQuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfSx0LmRvdCQxPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX0sdC5lYXNlPXMsdC5lbWl0VmFsaWRhdGlvbkVycm9ycz1Dbix0LmVuZHNXaXRoPW0sdC5lbmZvcmNlQ2FjaGVTaXplTGltaXQ9ZnVuY3Rpb24odCl7c3QoKSxRJiZRLnRoZW4oKGZ1bmN0aW9uKGUpe2Uua2V5cygpLnRoZW4oKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGgtdDtuKyspZS5kZWxldGUocltuXSl9KSl9KSl9LHQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZT1JbCx0LmV2YWx1YXRlU2l6ZUZvclpvb209UGwsdC5ldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0PSRsLHQuZXZlbnRlZD10aSx0LmV4dGVuZD11LHQuZmVhdHVyZUZpbHRlcj1ybix0LmZpbHRlck9iamVjdD15LHQuZnJvbVJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT1uLHRbMV09cix0WzJdPTAsdFszXT0tcix0WzRdPW4sdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LHQuZ2V0QW5jaG9yQWxpZ25tZW50PUFsLHQuZ2V0QW5jaG9ySnVzdGlmaWNhdGlvbj10Yyx0LmdldEFycmF5QnVmZmVyPXl0LHQuZ2V0SW1hZ2U9YnQsdC5nZXRKU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZ0KHUodCx7dHlwZToianNvbiJ9KSxlKX0sdC5nZXRSVExUZXh0UGx1Z2luU3RhdHVzPWVpLHQuZ2V0UmVmZXJyZXI9bXQsdC5nZXRWaWRlbz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7aS5tdXRlZD0hMCxpLm9ubG9hZHN0YXJ0PWZ1bmN0aW9uKCl7ZShudWxsLGkpfTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzb3VyY2UiKTtyPXRbYV0sbj12b2lkIDAsKG49c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLmhyZWY9ciwobi5wcm90b2NvbCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2x8fG4uaG9zdCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24uaG9zdCkmJihpLmNyb3NzT3JpZ2luPSJBbm9ueW1vdXMiKSxvLnNyYz10W2FdLGkuYXBwZW5kQ2hpbGQobyl9cmV0dXJue2NhbmNlbDpmdW5jdGlvbigpe319fSx0LmlkZW50aXR5PWVvLHQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxnPWVbMTNdLG09ZVsxNF0sdj1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLFQ9aSpjLWEqbCxrPXUqZy1mKmQsTT11Km0taCpkLEE9dSp2LXAqZCxTPWYqbS1oKmcsRT1mKnYtcCpnLEM9aCp2LXAqbSxMPXkqQy14KkUrYipTK18qQS13Kk0rVCprO3JldHVybiBMPyh0WzBdPShzKkMtbCpFK2MqUykqKEw9MS9MKSx0WzFdPShpKkUtbipDLWEqUykqTCx0WzJdPShnKlQtbSp3K3YqXykqTCx0WzNdPShoKnctZipULXAqXykqTCx0WzRdPShsKkEtbypDLWMqTSkqTCx0WzVdPShyKkMtaSpBK2EqTSkqTCx0WzZdPShtKmItZCpULXYqeCkqTCx0WzddPSh1KlQtaCpiK3AqeCkqTCx0WzhdPShvKkUtcypBK2MqaykqTCx0WzldPShuKkEtcipFLWEqaykqTCx0WzEwXT0oZCp3LWcqYit2KnkpKkwsdFsxMV09KGYqYi11KnctcCp5KSpMLHRbMTJdPShzKk0tbypTLWwqaykqTCx0WzEzXT0ocipTLW4qTStpKmspKkwsdFsxNF09KGcqeC1kKl8tbSp5KSpMLHRbMTVdPSh1Kl8tZip4K2gqeSkqTCx0KTpudWxsfSx0LmlzQ2hhcj1Wbix0LmlzTWFwYm94VVJMPUgsdC5rZXlzRGlmZmVyZW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2Zvcih2YXIgbiBpbiB0KW4gaW4gZXx8ci5wdXNoKG4pO3JldHVybiByfSx0Lm1ha2VSZXF1ZXN0PXZ0LHQubWFwT2JqZWN0PXYsdC5tZXJjYXRvclhmcm9tTG5nPURjLHQubWVyY2F0b3JZZnJvbUxhdD1SYyx0Lm1lcmNhdG9yWmZyb21BbHRpdHVkZT1GYyx0Lm11bD1pbyx0Lm11bHRpcGx5PXJvLHQubXZ0PWdzLHQubm9ybWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9cipyK24qbitpKmk7cmV0dXJuIGE+MCYmKGE9MS9NYXRoLnNxcnQoYSkpLHRbMF09ZVswXSphLHRbMV09ZVsxXSphLHRbMl09ZVsyXSphLHR9LHQubnVtYmVyPVVlLHQub2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPWZ0LHQub3J0aG89ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9MS8oZS1yKSxsPTEvKG4taSksYz0xLyhhLW8pO3JldHVybiB0WzBdPS0yKnMsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09LTIqbCx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MipjLHRbMTFdPTAsdFsxMl09KGUrcikqcyx0WzEzXT0oaStuKSpsLHRbMTRdPShvK2EpKmMsdFsxNV09MSx0fSx0LnBhcnNlR2x5cGhQQkY9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBIcyh0KS5yZWFkRmllbGRzKGxsLFtdKX0sdC5wYmY9SHMsdC5wZXJmb3JtU3ltYm9sTGF5b3V0PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3QuY3JlYXRlQXJyYXlzKCksdC50aWxlUGl4ZWxSYXRpbz04MTkyLyg1MTIqdC5vdmVyc2NhbGluZyksdC5jb21wYXJlVGV4dD17fSx0Lmljb25zTmVlZExpbmVhcj0hMTt2YXIgcz10LmxheWVyc1swXS5sYXlvdXQsbD10LmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlcyxjPXt9O2lmKCJjb21wb3NpdGUiPT09dC50ZXh0U2l6ZURhdGEua2luZCl7dmFyIHU9dC50ZXh0U2l6ZURhdGEsZj11Lm1heFpvb207Yy5jb21wb3NpdGVUZXh0U2l6ZXM9W2xbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IGlpKHUubWluWm9vbSksbyksbFsidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgaWkoZiksbyldfWlmKCJjb21wb3NpdGUiPT09dC5pY29uU2l6ZURhdGEua2luZCl7dmFyIGg9dC5pY29uU2l6ZURhdGEscD1oLm1heFpvb207Yy5jb21wb3NpdGVJY29uU2l6ZXM9W2xbImljb24tc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IGlpKGgubWluWm9vbSksbyksbFsiaWNvbi1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgaWkocCksbyldfWMubGF5b3V0VGV4dFNpemU9bFsidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgaWkodC56b29tKzEpLG8pLGMubGF5b3V0SWNvblNpemU9bFsiaWNvbi1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgaWkodC56b29tKzEpLG8pLGMudGV4dE1heFNpemU9bFsidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgaWkoMTgpKTtmb3IodmFyIGQ9MjQqcy5nZXQoInRleHQtbGluZS1oZWlnaHQiKSxnPSJtYXAiPT09cy5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJiJwb2ludCIhPT1zLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLG09cy5nZXQoInRleHQta2VlcC11cHJpZ2h0Iiksdj1zLmdldCgidGV4dC1zaXplIikseT1mdW5jdGlvbigpe3ZhciBhPWJbeF0sbD1zLmdldCgidGV4dC1mb250IikuZXZhbHVhdGUoYSx7fSxvKS5qb2luKCIsIiksdT12LmV2YWx1YXRlKGEse30sbyksZj1jLmxheW91dFRleHRTaXplLmV2YWx1YXRlKGEse30sbyksaD1jLmxheW91dEljb25TaXplLmV2YWx1YXRlKGEse30sbykscD17aG9yaXpvbnRhbDp7fSx2ZXJ0aWNhbDp2b2lkIDB9LHk9YS50ZXh0LHc9WzAsMF07aWYoeSl7dmFyIFQ9eS50b1N0cmluZygpLGs9MjQqcy5nZXQoInRleHQtbGV0dGVyLXNwYWNpbmciKS5ldmFsdWF0ZShhLHt9LG8pLE09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZihuPXJbZV0uY2hhckNvZGVBdCgwKSxWbi5BcmFiaWMobil8fFZuWyJBcmFiaWMgU3VwcGxlbWVudCJdKG4pfHxWblsiQXJhYmljIEV4dGVuZGVkLUEiXShuKXx8Vm5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSJdKG4pfHxWblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIl0obikpcmV0dXJuITE7dmFyIG47cmV0dXJuITB9KFQpP2s6MCxBPXMuZ2V0KCJ0ZXh0LWFuY2hvciIpLmV2YWx1YXRlKGEse30sbyksUz1zLmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKTtpZighUyl7dmFyIEU9cy5nZXQoInRleHQtcmFkaWFsLW9mZnNldCIpLmV2YWx1YXRlKGEse30sbyk7dz1FPyRsKEEsWzI0KkUsUWxdKTpzLmdldCgidGV4dC1vZmZzZXQiKS5ldmFsdWF0ZShhLHt9LG8pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIDI0KnR9KSl9dmFyIEM9Zz8iY2VudGVyIjpzLmdldCgidGV4dC1qdXN0aWZ5IikuZXZhbHVhdGUoYSx7fSxvKSxMPXMuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksST0icG9pbnQiPT09TD8yNCpzLmdldCgidGV4dC1tYXgtd2lkdGgiKS5ldmFsdWF0ZShhLHt9LG8pOjAsUD1mdW5jdGlvbigpe3QuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmcW4oVCkmJihwLnZlcnRpY2FsPXlsKHksZSxyLGksbCxJLGQsQSwibGVmdCIsTSx3LGdsLnZlcnRpY2FsLCEwLEwsZix1KSl9O2lmKCFnJiZTKXtmb3IodmFyIHo9ImF1dG8iPT09Qz9TLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRjKHQpfSkpOltDXSxPPSExLEQ9MDtEPHoubGVuZ3RoO0QrKyl7dmFyIFI9eltEXTtpZighcC5ob3Jpem9udGFsW1JdKWlmKE8pcC5ob3Jpem9udGFsW1JdPXAuaG9yaXpvbnRhbFswXTtlbHNle3ZhciBGPXlsKHksZSxyLGksbCxJLGQsImNlbnRlciIsUixNLHcsZ2wuaG9yaXpvbnRhbCwhMSxMLGYsdSk7RiYmKHAuaG9yaXpvbnRhbFtSXT1GLE89MT09PUYucG9zaXRpb25lZExpbmVzLmxlbmd0aCl9fVAoKX1lbHNleyJhdXRvIj09PUMmJihDPXRjKEEpKTt2YXIgQj15bCh5LGUscixpLGwsSSxkLEEsQyxNLHcsZ2wuaG9yaXpvbnRhbCwhMSxMLGYsdSk7QiYmKHAuaG9yaXpvbnRhbFtDXT1CKSxQKCkscW4oVCkmJmcmJm0mJihwLnZlcnRpY2FsPXlsKHksZSxyLGksbCxJLGQsQSxDLE0sdyxnbC52ZXJ0aWNhbCwhMSxMLGYsdSkpfX12YXIgTj12b2lkIDAsaj0hMTtpZihhLmljb24mJmEuaWNvbi5uYW1lKXt2YXIgVT1uW2EuaWNvbi5uYW1lXTtVJiYoTj1mdW5jdGlvbih0LGUscil7dmFyIG49QWwociksaT1lWzBdLXQuZGlzcGxheVNpemVbMF0qbi5ob3Jpem9udGFsQWxpZ24sYT1lWzFdLXQuZGlzcGxheVNpemVbMV0qbi52ZXJ0aWNhbEFsaWduO3JldHVybntpbWFnZTp0LHRvcDphLGJvdHRvbTphK3QuZGlzcGxheVNpemVbMV0sbGVmdDppLHJpZ2h0OmkrdC5kaXNwbGF5U2l6ZVswXX19KGlbYS5pY29uLm5hbWVdLHMuZ2V0KCJpY29uLW9mZnNldCIpLmV2YWx1YXRlKGEse30sbykscy5nZXQoImljb24tYW5jaG9yIikuZXZhbHVhdGUoYSx7fSxvKSksaj1VLnNkZix2b2lkIDA9PT10LnNkZkljb25zP3Quc2RmSWNvbnM9VS5zZGY6dC5zZGZJY29ucyE9PVUuc2RmJiZfKCJTdHlsZSBzaGVldCB3YXJuaW5nOiBDYW5ub3QgbWl4IFNERiBhbmQgbm9uLVNERiBpY29ucyBpbiBvbmUgYnVmZmVyIiksKFUucGl4ZWxSYXRpbyE9PXQucGl4ZWxSYXRpb3x8MCE9PXMuZ2V0KCJpY29uLXJvdGF0ZSIpLmNvbnN0YW50T3IoMSkpJiYodC5pY29uc05lZWRMaW5lYXI9ITApKX12YXIgVj1yYyhwLmhvcml6b250YWwpfHxwLnZlcnRpY2FsO3QuaWNvbnNJblRleHQ9ISFWJiZWLmljb25zSW5UZXh0LChWfHxOKSYmZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj1hLnRleHRNYXhTaXplLmV2YWx1YXRlKGUse30pO3ZvaWQgMD09PWYmJihmPW8pO3ZhciBoLHA9dC5sYXllcnNbMF0ubGF5b3V0LGQ9cC5nZXQoImljb24tb2Zmc2V0IikuZXZhbHVhdGUoZSx7fSx1KSxnPXJjKHIuaG9yaXpvbnRhbCksbT1vLzI0LHY9dC50aWxlUGl4ZWxSYXRpbyptLHk9dC50aWxlUGl4ZWxSYXRpbypmLzI0LHg9dC50aWxlUGl4ZWxSYXRpbypzLGI9dC50aWxlUGl4ZWxSYXRpbypwLmdldCgic3ltYm9sLXNwYWNpbmciKSx3PXAuZ2V0KCJ0ZXh0LXBhZGRpbmciKSp0LnRpbGVQaXhlbFJhdGlvLFQ9cC5nZXQoImljb24tcGFkZGluZyIpKnQudGlsZVBpeGVsUmF0aW8saz1wLmdldCgidGV4dC1tYXgtYW5nbGUiKS8xODAqTWF0aC5QSSxNPSJtYXAiPT09cC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJiJwb2ludCIhPT1wLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLEE9Im1hcCI9PT1wLmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmInBvaW50IiE9PXAuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksUz1wLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLEU9Yi8yLEM9cC5nZXQoImljb24tdGV4dC1maXQiKTtuJiYibm9uZSIhPT1DJiYodC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZyLnZlcnRpY2FsJiYoaD1FbChuLHIudmVydGljYWwsQyxwLmdldCgiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIiksZCxtKSksZyYmKG49RWwobixnLEMscC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpLGQsbSkpKTt2YXIgTD1mdW5jdGlvbihzLGYpe2YueDwwfHxmLng+PTgxOTJ8fGYueTwwfHxmLnk+PTgxOTJ8fGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLGcsbSx2LHkseCxiLHcsVCxrLE0pe3ZhciBBLFMsRSxDLEwsST10LmFkZFRvTGluZVZlcnRleEFycmF5KGUsciksUD0wLHo9MCxPPTAsRD0wLFI9LTEsRj0tMSxCPXt9LE49Y2EoIiIpLGo9MCxVPTA7aWYodm9pZCAwPT09cy5fdW5ldmFsdWF0ZWRMYXlvdXQuZ2V0VmFsdWUoInRleHQtcmFkaWFsLW9mZnNldCIpPyhqPShBPXMubGF5b3V0LmdldCgidGV4dC1vZmZzZXQiKS5ldmFsdWF0ZShiLHt9LGspLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIDI0KnR9KSkpWzBdLFU9QVsxXSk6KGo9MjQqcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJhZGlhbC1vZmZzZXQiKS5ldmFsdWF0ZShiLHt9LGspLFU9UWwpLHQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmbi52ZXJ0aWNhbCl7dmFyIFY9cy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0ZSIpLmV2YWx1YXRlKGIse30saykrOTA7Qz1uZXcgWWwobCxlLGMsdSxmLG4udmVydGljYWwsaCxwLGQsViksbyYmKEw9bmV3IFlsKGwsZSxjLHUsZixvLG0sdixkLFYpKX1pZihpKXt2YXIgcT1zLmxheW91dC5nZXQoImljb24tcm90YXRlIikuZXZhbHVhdGUoYix7fSksSD0ibm9uZSIhPT1zLmxheW91dC5nZXQoImljb24tdGV4dC1maXQiKSxHPVVsKGkscSxULEgpLFk9bz9VbChvLHEsVCxIKTp2b2lkIDA7RT1uZXcgWWwobCxlLGMsdSxmLGksbSx2LCExLHEpLFA9NCpHLmxlbmd0aDt2YXIgVz10Lmljb25TaXplRGF0YSxYPW51bGw7InNvdXJjZSI9PT1XLmtpbmQ/KFg9WzEyOCpzLmxheW91dC5nZXQoImljb24tc2l6ZSIpLmV2YWx1YXRlKGIse30pXSlbMF0+MzI2NDAmJl8odC5sYXllcklkc1swXSsnOiBWYWx1ZSBmb3IgImljb24tc2l6ZSIgaXMgPj0gMjU1LiBSZWR1Y2UgeW91ciAiaWNvbi1zaXplIi4nKToiY29tcG9zaXRlIj09PVcua2luZCYmKChYPVsxMjgqdy5jb21wb3NpdGVJY29uU2l6ZXNbMF0uZXZhbHVhdGUoYix7fSxrKSwxMjgqdy5jb21wb3NpdGVJY29uU2l6ZXNbMV0uZXZhbHVhdGUoYix7fSxrKV0pWzBdPjMyNjQwfHxYWzFdPjMyNjQwKSYmXyh0LmxheWVySWRzWzBdKyc6IFZhbHVlIGZvciAiaWNvbi1zaXplIiBpcyA+PSAyNTUuIFJlZHVjZSB5b3VyICJpY29uLXNpemUiLicpLHQuYWRkU3ltYm9scyh0Lmljb24sRyxYLHgseSxiLCExLGUsSS5saW5lU3RhcnRJbmRleCxJLmxpbmVMZW5ndGgsLTEsayksUj10Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoLTEsWSYmKHo9NCpZLmxlbmd0aCx0LmFkZFN5bWJvbHModC5pY29uLFksWCx4LHksYixnbC52ZXJ0aWNhbCxlLEkubGluZVN0YXJ0SW5kZXgsSS5saW5lTGVuZ3RoLC0xLGspLEY9dC5pY29uLnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aC0xKX1mb3IodmFyIFogaW4gbi5ob3Jpem9udGFsKXt2YXIgSj1uLmhvcml6b250YWxbWl07aWYoIVMpe049Y2EoSi50ZXh0KTt2YXIgSz1zLmxheW91dC5nZXQoInRleHQtcm90YXRlIikuZXZhbHVhdGUoYix7fSxrKTtTPW5ldyBZbChsLGUsYyx1LGYsSixoLHAsZCxLKX12YXIgUT0xPT09Si5wb3NpdGlvbmVkTGluZXMubGVuZ3RoO2lmKE8rPWVjKHQsZSxKLGEscyxkLGIsZyxJLG4udmVydGljYWw/Z2wuaG9yaXpvbnRhbDpnbC5ob3Jpem9udGFsT25seSxRP09iamVjdC5rZXlzKG4uaG9yaXpvbnRhbCk6W1pdLEIsUix3LGspLFEpYnJlYWt9bi52ZXJ0aWNhbCYmKEQrPWVjKHQsZSxuLnZlcnRpY2FsLGEscyxkLGIsZyxJLGdsLnZlcnRpY2FsLFsidmVydGljYWwiXSxCLEYsdyxrKSk7dmFyICQ9Uz9TLmJveFN0YXJ0SW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsdHQ9Uz9TLmJveEVuZEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLGV0PUM/Qy5ib3hTdGFydEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLHJ0PUM/Qy5ib3hFbmRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxudD1FP0UuYm94U3RhcnRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxpdD1FP0UuYm94RW5kSW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsYXQ9TD9MLmJveFN0YXJ0SW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsb3Q9TD9MLmJveEVuZEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLHN0PS0xLGx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnQuY2lyY2xlRGlhbWV0ZXI/TWF0aC5tYXgodC5jaXJjbGVEaWFtZXRlcixlKTplfTtzdD1sdChTLHN0KSxzdD1sdChDLHN0KSxzdD1sdChFLHN0KTt2YXIgY3Q9KHN0PWx0KEwsc3QpKT4tMT8xOjA7Y3QmJihzdCo9TS8yNCksdC5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aD49ZmMuTUFYX0dMWVBIUyYmXygiVG9vIG1hbnkgZ2x5cGhzIGJlaW5nIHJlbmRlcmVkIGluIGEgdGlsZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yOTA3Iiksdm9pZCAwIT09Yi5zb3J0S2V5JiZ0LmFkZFRvU29ydEtleVJhbmdlcyh0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGgsYi5zb3J0S2V5KSx0LnN5bWJvbEluc3RhbmNlcy5lbXBsYWNlQmFjayhlLngsZS55LEIucmlnaHQ+PTA/Qi5yaWdodDotMSxCLmNlbnRlcj49MD9CLmNlbnRlcjotMSxCLmxlZnQ+PTA/Qi5sZWZ0Oi0xLEIudmVydGljYWx8fC0xLFIsRixOLCQsdHQsZXQscnQsbnQsaXQsYXQsb3QsYyxPLEQsUCx6LGN0LDAsaCxqLFUsc3QpfSh0LGYscyxyLG4saSxoLHQubGF5ZXJzWzBdLHQuY29sbGlzaW9uQm94QXJyYXksZS5pbmRleCxlLnNvdXJjZUxheWVySW5kZXgsdC5pbmRleCx2LHcsTSxsLHgsVCxBLGQsZSxhLGMsdSxvKX07aWYoImxpbmUiPT09Uylmb3IodmFyIEk9MCxQPWpsKGUuZ2VvbWV0cnksMCwwLDgxOTIsODE5Mik7STxQLmxlbmd0aDtJKz0xKWZvcih2YXIgej1QW0ldLE89MCxEPU5sKHosYixrLHIudmVydGljYWx8fGcsbiwyNCx5LHQub3ZlcnNjYWxpbmcsODE5Mik7TzxELmxlbmd0aDtPKz0xKXt2YXIgUj1EW09dO2cmJm5jKHQsZy50ZXh0LEUsUil8fEwoeixSKX1lbHNlIGlmKCJsaW5lLWNlbnRlciI9PT1TKWZvcih2YXIgRj0wLEI9ZS5nZW9tZXRyeTtGPEIubGVuZ3RoO0YrPTEpe3ZhciBOPUJbRl07aWYoTi5sZW5ndGg+MSl7dmFyIGo9QmwoTixrLHIudmVydGljYWx8fGcsbiwyNCx5KTtqJiZMKE4sail9fWVsc2UgaWYoIlBvbHlnb24iPT09ZS50eXBlKWZvcih2YXIgVT0wLFY9UW8oZS5nZW9tZXRyeSwwKTtVPFYubGVuZ3RoO1UrPTEpe3ZhciBxPVZbVV0sSD1abChxLDE2KTtMKHFbMF0sbmV3IENsKEgueCxILnksMCkpfWVsc2UgaWYoIkxpbmVTdHJpbmciPT09ZS50eXBlKWZvcih2YXIgRz0wLFk9ZS5nZW9tZXRyeTtHPFkubGVuZ3RoO0crPTEpe3ZhciBXPVlbR107TChXLG5ldyBDbChXWzBdLngsV1swXS55LDApKX1lbHNlIGlmKCJQb2ludCI9PT1lLnR5cGUpZm9yKHZhciBYPTAsWj1lLmdlb21ldHJ5O1g8Wi5sZW5ndGg7WCs9MSlmb3IodmFyIEo9MCxLPVpbWF07SjxLLmxlbmd0aDtKKz0xKXt2YXIgUT1LW0pdO0woW1FdLG5ldyBDbChRLngsUS55LDApKX19KHQsYSxwLE4sbixjLGYsaCx3LGosbyl9LHg9MCxiPXQuZmVhdHVyZXM7eDxiLmxlbmd0aDt4Kz0xKXkoKTthJiZ0LmdlbmVyYXRlQ29sbGlzaW9uRGVidWdCdWZmZXJzKCl9LHQucGVyc3BlY3RpdmU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvPTEvTWF0aC50YW4oZS8yKTtyZXR1cm4gdFswXT1vL3IsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09byx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTVdPTAsbnVsbCE9aSYmaSE9PTEvMD8odFsxMF09KGkrbikqKGE9MS8obi1pKSksdFsxNF09MippKm4qYSk6KHRbMTBdPS0xLHRbMTRdPS0yKm4pLHR9LHQucGljaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aSBpbiB0JiYocltpXT10W2ldKX1yZXR1cm4gcn0sdC5wbHVnaW49bmksdC5wb2x5Z29uSW50ZXJzZWN0c1BvbHlnb249QmEsdC5wb3N0TWFwTG9hZEV2ZW50PWl0LHQucG9zdFR1cm5zdGlsZUV2ZW50PXJ0LHQucG90cGFjaz1mbCx0LnJlZlByb3BlcnRpZXM9WyJ0eXBlIiwic291cmNlIiwic291cmNlLWxheWVyIiwibWluem9vbSIsIm1heHpvb20iLCJmaWx0ZXIiLCJsYXlvdXQiXSx0LnJlZ2lzdGVyPURuLHQucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdCh7cGx1Z2luU3RhdHVzOkpuLHBsdWdpblVSTDpLbn0pLHRpLm9uKCJwbHVnaW5TdGF0ZUNoYW5nZSIsdCksdH0sdC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpO3JldHVybiB0WzBdPW4qbCthKnMsdFsxXT1pKmwrbypzLHRbMl09biotcythKmwsdFszXT1pKi1zK28qbCx0fSx0LnJvdGF0ZVg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzRdLG89ZVs1XSxzPWVbNl0sbD1lWzddLGM9ZVs4XSx1PWVbOV0sZj1lWzEwXSxoPWVbMTFdO3JldHVybiBlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFs0XT1hKmkrYypuLHRbNV09byppK3Uqbix0WzZdPXMqaStmKm4sdFs3XT1sKmkraCpuLHRbOF09YyppLWEqbix0WzldPXUqaS1vKm4sdFsxMF09ZippLXMqbix0WzExXT1oKmktbCpuLHR9LHQucm90YXRlWj1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzRdLHU9ZVs1XSxmPWVbNl0saD1lWzddO3JldHVybiBlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbMF09YSppK2Mqbix0WzFdPW8qaSt1Km4sdFsyXT1zKmkrZipuLHRbM109bCppK2gqbix0WzRdPWMqaS1hKm4sdFs1XT11KmktbypuLHRbNl09ZippLXMqbix0WzddPWgqaS1sKm4sdH0sdC5zY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49clswXSxpPXJbMV0sYT1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qaSx0WzVdPWVbNV0qaSx0WzZdPWVbNl0qaSx0WzddPWVbN10qaSx0WzhdPWVbOF0qYSx0WzldPWVbOV0qYSx0WzEwXT1lWzEwXSphLHRbMTFdPWVbMTFdKmEsdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH0sdC5zY2FsZSQxPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdH0sdC5zY2FsZSQyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdH0sdC5zZXRDYWNoZUxpbWl0cz1mdW5jdGlvbih0LGUpe2F0PXQsb3Q9ZX0sdC5zZXRSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1yJiYocj0hMSksImRlZmVycmVkIj09PUpufHwibG9hZGluZyI9PT1Kbnx8ImxvYWRlZCI9PT1Kbil0aHJvdyBuZXcgRXJyb3IoInNldFJUTFRleHRQbHVnaW4gY2Fubm90IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4iKTtLbj1SLnJlc29sdmVVUkwodCksSm49ImRlZmVycmVkIixabj1lLCRuKCkscnx8cmkoKX0sdC5zcGhlcmljYWxUb0NhcnRlc2lhbj1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIHIrPTkwLHIqPU1hdGguUEkvMTgwLG4qPU1hdGguUEkvMTgwLHt4OmUqTWF0aC5jb3MocikqTWF0aC5zaW4obikseTplKk1hdGguc2luKHIpKk1hdGguc2luKG4pLHo6ZSpNYXRoLmNvcyhuKX19LHQuc3FyTGVuPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdO3JldHVybiBlKmUrcipyfSx0LnN0eWxlU3BlYz1BdCx0LnN1Yj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHR9LHQuc3ltYm9sU2l6ZT16bCx0LnRyYW5zZm9ybU1hdDM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH0sdC50cmFuc2Zvcm1NYXQ0PWFvLHQudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsZz1yWzBdLG09clsxXSx2PXJbMl07cmV0dXJuIGU9PT10Pyh0WzEyXT1lWzBdKmcrZVs0XSptK2VbOF0qditlWzEyXSx0WzEzXT1lWzFdKmcrZVs1XSptK2VbOV0qditlWzEzXSx0WzE0XT1lWzJdKmcrZVs2XSptK2VbMTBdKnYrZVsxNF0sdFsxNV09ZVszXSpnK2VbN10qbStlWzExXSp2K2VbMTVdKTooaT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0scD1lWzEwXSxkPWVbMTFdLHRbMF09bj1lWzBdLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT1jLHRbN109dSx0WzhdPWYsdFs5XT1oLHRbMTBdPXAsdFsxMV09ZCx0WzEyXT1uKmcrcyptK2YqditlWzEyXSx0WzEzXT1pKmcrbCptK2gqditlWzEzXSx0WzE0XT1hKmcrYyptK3AqditlWzE0XSx0WzE1XT1vKmcrdSptK2QqditlWzE1XSksdH0sdC50cmlnZ2VyUGx1Z2luQ29tcGxldGlvbkV2ZW50PVFuLHQudW5pcXVlSWQ9aCx0LnZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcj1mdW5jdGlvbih0KXt2YXIgZT1bXSxyPXQuaWQ7cmV0dXJuIHZvaWQgMD09PXImJmUucHVzaCh7bWVzc2FnZToibGF5ZXJzLiIrcisnOiBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJpZCInfSksdm9pZCAwPT09dC5yZW5kZXImJmUucHVzaCh7bWVzc2FnZToibGF5ZXJzLiIrcisnOiBtaXNzaW5nIHJlcXVpcmVkIG1ldGhvZCAicmVuZGVyIid9KSx0LnJlbmRlcmluZ01vZGUmJiIyZCIhPT10LnJlbmRlcmluZ01vZGUmJiIzZCIhPT10LnJlbmRlcmluZ01vZGUmJmUucHVzaCh7bWVzc2FnZToibGF5ZXJzLiIrcisnOiBwcm9wZXJ0eSAicmVuZGVyaW5nTW9kZSIgbXVzdCBiZSBlaXRoZXIgIjJkIiBvciAiM2QiJ30pLGV9LHQudmFsaWRhdGVMaWdodD1Bbix0LnZhbGlkYXRlU3R5bGU9TW4sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LnZlY3RvclRpbGU9Z3MsdC52ZXJzaW9uPSIxLjEwLjEiLHQud2Fybk9uY2U9Xyx0LndlYnBTdXBwb3J0ZWQ9Qix0LndpbmRvdz1zZWxmLHQud3JhcD1jfSkpLG4oMCwoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj10eXBlb2YgdDtpZigibnVtYmVyIj09PXJ8fCJib29sZWFuIj09PXJ8fCJzdHJpbmciPT09cnx8bnVsbD09dClyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBuPSJbIixpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSluKz1lKGFbaV0pKyIsIjtyZXR1cm4gbisiXSJ9Zm9yKHZhciBvPU9iamVjdC5rZXlzKHQpLnNvcnQoKSxzPSJ7IixsPTA7bDxvLmxlbmd0aDtsKyspcys9SlNPTi5zdHJpbmdpZnkob1tsXSkrIjoiK2UodFtvW2xdXSkrIiwiO3JldHVybiBzKyJ9In1mdW5jdGlvbiByKHIpe2Zvcih2YXIgbj0iIixpPTAsYT10LnJlZlByb3BlcnRpZXM7aTxhLmxlbmd0aDtpKz0xKW4rPSIvIitlKHJbYVtpXV0pO3JldHVybiBufXZhciBuPWZ1bmN0aW9uKHQpe3RoaXMua2V5Q2FjaGU9e30sdCYmdGhpcy5yZXBsYWNlKHQpfTtuLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheWVyQ29uZmlncz17fSx0aGlzLl9sYXllcnM9e30sdGhpcy51cGRhdGUodCxbXSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT10aGlzLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO3RoaXMuX2xheWVyQ29uZmlnc1tzLmlkXT1zO3ZhciBsPXRoaXMuX2xheWVyc1tzLmlkXT10LmNyZWF0ZVN0eWxlTGF5ZXIocyk7bC5fZmVhdHVyZUZpbHRlcj10LmZlYXR1cmVGaWx0ZXIobC5maWx0ZXIpLHRoaXMua2V5Q2FjaGVbcy5pZF0mJmRlbGV0ZSB0aGlzLmtleUNhY2hlW3MuaWRdfWZvcih2YXIgYz0wLHU9bjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY107ZGVsZXRlIHRoaXMua2V5Q2FjaGVbZl0sZGVsZXRlIHRoaXMuX2xheWVyQ29uZmlnc1tmXSxkZWxldGUgdGhpcy5fbGF5ZXJzW2ZdfXRoaXMuZmFtaWxpZXNCeVNvdXJjZT17fTtmb3IodmFyIGg9MCxwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXt9LGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9ZSYmZVt0W2ldLmlkXXx8cih0W2ldKTtlJiYoZVt0W2ldLmlkXT1hKTt2YXIgbz1uW2FdO298fChvPW5bYV09W10pLG8ucHVzaCh0W2ldKX12YXIgcz1bXTtmb3IodmFyIGwgaW4gbilzLnB1c2gobltsXSk7cmV0dXJuIHN9KHQudmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncyksdGhpcy5rZXlDYWNoZSk7aDxwLmxlbmd0aDtoKz0xKXt2YXIgZD1wW2hdLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGkuX2xheWVyc1t0LmlkXX0pKSxnPWRbMF07aWYoIm5vbmUiIT09Zy52aXNpYmlsaXR5KXt2YXIgbT1nLnNvdXJjZXx8IiIsdj10aGlzLmZhbWlsaWVzQnlTb3VyY2VbbV07dnx8KHY9dGhpcy5mYW1pbGllc0J5U291cmNlW21dPXt9KTt2YXIgeT1nLnNvdXJjZUxheWVyfHwiX2dlb2pzb25UaWxlTGF5ZXIiLHg9dlt5XTt4fHwoeD12W3ldPVtdKSx4LnB1c2goZCl9fX07dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHI9e30sbj1bXTtmb3IodmFyIGkgaW4gZSl7dmFyIGE9ZVtpXSxvPXJbaV09e307Zm9yKHZhciBzIGluIGEpe3ZhciBsPWFbK3NdO2lmKGwmJjAhPT1sLmJpdG1hcC53aWR0aCYmMCE9PWwuYml0bWFwLmhlaWdodCl7dmFyIGM9e3g6MCx5OjAsdzpsLmJpdG1hcC53aWR0aCsyLGg6bC5iaXRtYXAuaGVpZ2h0KzJ9O24ucHVzaChjKSxvW3NdPXtyZWN0OmMsbWV0cmljczpsLm1ldHJpY3N9fX19dmFyIHU9dC5wb3RwYWNrKG4pLGY9bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6dS53fHwxLGhlaWdodDp1Lmh8fDF9KTtmb3IodmFyIGggaW4gZSl7dmFyIHA9ZVtoXTtmb3IodmFyIGQgaW4gcCl7dmFyIGc9cFsrZF07aWYoZyYmMCE9PWcuYml0bWFwLndpZHRoJiYwIT09Zy5iaXRtYXAuaGVpZ2h0KXt2YXIgbT1yW2hdW2RdLnJlY3Q7dC5BbHBoYUltYWdlLmNvcHkoZy5iaXRtYXAsZix7eDowLHk6MH0se3g6bS54KzEseTptLnkrMX0sZy5iaXRtYXApfX19dGhpcy5pbWFnZT1mLHRoaXMucG9zaXRpb25zPXJ9O3QucmVnaXN0ZXIoIkdseXBoQXRsYXMiLGkpO3ZhciBhPWZ1bmN0aW9uKGUpe3RoaXMudGlsZUlEPW5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS50aWxlSUQub3ZlcnNjYWxlZFosZS50aWxlSUQud3JhcCxlLnRpbGVJRC5jYW5vbmljYWwueixlLnRpbGVJRC5jYW5vbmljYWwueCxlLnRpbGVJRC5jYW5vbmljYWwueSksdGhpcy51aWQ9ZS51aWQsdGhpcy56b29tPWUuem9vbSx0aGlzLnBpeGVsUmF0aW89ZS5waXhlbFJhdGlvLHRoaXMudGlsZVNpemU9ZS50aWxlU2l6ZSx0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLm92ZXJzY2FsaW5nPXRoaXMudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzPWUuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuY29sbGVjdFJlc291cmNlVGltaW5nPSEhZS5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM9ISFlLnJldHVybkRlcGVuZGVuY2llcyx0aGlzLnByb21vdGVJZD1lLnByb21vdGVJZH07ZnVuY3Rpb24gbyhlLHIsbil7Zm9yKHZhciBpPW5ldyB0LkV2YWx1YXRpb25QYXJhbWV0ZXJzKHIpLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKW9bYV0ucmVjYWxjdWxhdGUoaSxuKX1mdW5jdGlvbiBzKGUscil7dmFyIG49dC5nZXRBcnJheUJ1ZmZlcihlLnJlcXVlc3QsKGZ1bmN0aW9uKGUsbixpLGEpe2U/cihlKTpuJiZyKG51bGwse3ZlY3RvclRpbGU6bmV3IHQudmVjdG9yVGlsZS5WZWN0b3JUaWxlKG5ldyB0LnBiZihuKSkscmF3RGF0YTpuLGNhY2hlQ29udHJvbDppLGV4cGlyZXM6YX0pfSkpO3JldHVybiBmdW5jdGlvbigpe24uY2FuY2VsKCkscigpfX1hLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHIsbixhLHMpe3ZhciBsPXRoaXM7dGhpcy5zdGF0dXM9InBhcnNpbmciLHRoaXMuZGF0YT1lLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9bmV3IHQuQ29sbGlzaW9uQm94QXJyYXk7dmFyIGM9bmV3IHQuRGljdGlvbmFyeUNvZGVyKE9iamVjdC5rZXlzKGUubGF5ZXJzKS5zb3J0KCkpLHU9bmV3IHQuRmVhdHVyZUluZGV4KHRoaXMudGlsZUlELHRoaXMucHJvbW90ZUlkKTt1LmJ1Y2tldExheWVySURzPVtdO3ZhciBmLGgscCxkLGc9e30sbT17ZmVhdHVyZUluZGV4OnUsaWNvbkRlcGVuZGVuY2llczp7fSxwYXR0ZXJuRGVwZW5kZW5jaWVzOnt9LGdseXBoRGVwZW5kZW5jaWVzOnt9LGF2YWlsYWJsZUltYWdlczpufSx2PXIuZmFtaWxpZXNCeVNvdXJjZVt0aGlzLnNvdXJjZV07Zm9yKHZhciB5IGluIHYpe3ZhciB4PWUubGF5ZXJzW3ldO2lmKHgpezE9PT14LnZlcnNpb24mJnQud2Fybk9uY2UoJ1ZlY3RvciB0aWxlIHNvdXJjZSAiJyt0aGlzLnNvdXJjZSsnIiBsYXllciAiJyt5KyciIGRvZXMgbm90IHVzZSB2ZWN0b3IgdGlsZSBzcGVjIHYyIGFuZCB0aGVyZWZvcmUgbWF5IGhhdmUgc29tZSByZW5kZXJpbmcgZXJyb3JzLicpO2Zvcih2YXIgYj1jLmVuY29kZSh5KSxfPVtdLHc9MDt3PHgubGVuZ3RoO3crKyl7dmFyIFQ9eC5mZWF0dXJlKHcpLGs9dS5nZXRJZChULHkpO18ucHVzaCh7ZmVhdHVyZTpULGlkOmssaW5kZXg6dyxzb3VyY2VMYXllckluZGV4OmJ9KX1mb3IodmFyIE09MCxBPXZbeV07TTxBLmxlbmd0aDtNKz0xKXt2YXIgUz1BW01dLEU9U1swXTtFLm1pbnpvb20mJnRoaXMuem9vbTxNYXRoLmZsb29yKEUubWluem9vbSl8fEUubWF4em9vbSYmdGhpcy56b29tPj1FLm1heHpvb218fCJub25lIiE9PUUudmlzaWJpbGl0eSYmKG8oUyx0aGlzLnpvb20sbiksKGdbRS5pZF09RS5jcmVhdGVCdWNrZXQoe2luZGV4OnUuYnVja2V0TGF5ZXJJRHMubGVuZ3RoLGxheWVyczpTLHpvb206dGhpcy56b29tLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvLG92ZXJzY2FsaW5nOnRoaXMub3ZlcnNjYWxpbmcsY29sbGlzaW9uQm94QXJyYXk6dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxzb3VyY2VMYXllckluZGV4OmIsc291cmNlSUQ6dGhpcy5zb3VyY2V9KSkucG9wdWxhdGUoXyxtLHRoaXMudGlsZUlELmNhbm9uaWNhbCksdS5idWNrZXRMYXllcklEcy5wdXNoKFMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSkpfX19dmFyIEM9dC5tYXBPYmplY3QobS5nbHlwaERlcGVuZGVuY2llcywoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChOdW1iZXIpfSkpO09iamVjdC5rZXlzKEMpLmxlbmd0aD9hLnNlbmQoImdldEdseXBocyIse3VpZDp0aGlzLnVpZCxzdGFja3M6Q30sKGZ1bmN0aW9uKHQsZSl7Znx8KGY9dCxoPWUsUC5jYWxsKGwpKX0pKTpoPXt9O3ZhciBMPU9iamVjdC5rZXlzKG0uaWNvbkRlcGVuZGVuY2llcyk7TC5sZW5ndGg/YS5zZW5kKCJnZXRJbWFnZXMiLHtpY29uczpMLHNvdXJjZTp0aGlzLnNvdXJjZSx0aWxlSUQ6dGhpcy50aWxlSUQsdHlwZToiaWNvbnMifSwoZnVuY3Rpb24odCxlKXtmfHwoZj10LHA9ZSxQLmNhbGwobCkpfSkpOnA9e307dmFyIEk9T2JqZWN0LmtleXMobS5wYXR0ZXJuRGVwZW5kZW5jaWVzKTtmdW5jdGlvbiBQKCl7aWYoZilyZXR1cm4gcyhmKTtpZihoJiZwJiZkKXt2YXIgZT1uZXcgaShoKSxyPW5ldyB0LkltYWdlQXRsYXMocCxkKTtmb3IodmFyIGEgaW4gZyl7dmFyIGw9Z1thXTtsIGluc3RhbmNlb2YgdC5TeW1ib2xCdWNrZXQ/KG8obC5sYXllcnMsdGhpcy56b29tLG4pLHQucGVyZm9ybVN5bWJvbExheW91dChsLGgsZS5wb3NpdGlvbnMscCxyLmljb25Qb3NpdGlvbnMsdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy50aWxlSUQuY2Fub25pY2FsKSk6bC5oYXNQYXR0ZXJuJiYobCBpbnN0YW5jZW9mIHQuTGluZUJ1Y2tldHx8bCBpbnN0YW5jZW9mIHQuRmlsbEJ1Y2tldHx8bCBpbnN0YW5jZW9mIHQuRmlsbEV4dHJ1c2lvbkJ1Y2tldCkmJihvKGwubGF5ZXJzLHRoaXMuem9vbSxuKSxsLmFkZEZlYXR1cmVzKG0sdGhpcy50aWxlSUQuY2Fub25pY2FsLHIucGF0dGVyblBvc2l0aW9ucykpfXRoaXMuc3RhdHVzPSJkb25lIixzKG51bGwse2J1Y2tldHM6dC52YWx1ZXMoZykuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5pc0VtcHR5KCl9KSksZmVhdHVyZUluZGV4OnUsY29sbGlzaW9uQm94QXJyYXk6dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxnbHlwaEF0bGFzSW1hZ2U6ZS5pbWFnZSxpbWFnZUF0bGFzOnIsZ2x5cGhNYXA6dGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM/aDpudWxsLGljb25NYXA6dGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM/cDpudWxsLGdseXBoUG9zaXRpb25zOnRoaXMucmV0dXJuRGVwZW5kZW5jaWVzP2UucG9zaXRpb25zOm51bGx9KX19SS5sZW5ndGg/YS5zZW5kKCJnZXRJbWFnZXMiLHtpY29uczpJLHNvdXJjZTp0aGlzLnNvdXJjZSx0aWxlSUQ6dGhpcy50aWxlSUQsdHlwZToicGF0dGVybnMifSwoZnVuY3Rpb24odCxlKXtmfHwoZj10LGQ9ZSxQLmNhbGwobCkpfSkpOmQ9e30sUC5jYWxsKHRoaXMpfTt2YXIgbD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmFjdG9yPXQsdGhpcy5sYXllckluZGV4PWUsdGhpcy5hdmFpbGFibGVJbWFnZXM9cix0aGlzLmxvYWRWZWN0b3JEYXRhPW58fHMsdGhpcy5sb2FkaW5nPXt9LHRoaXMubG9hZGVkPXt9fTtsLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1lLnVpZDt0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9e30pO3ZhciBvPSEhKGUmJmUucmVxdWVzdCYmZS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZykmJm5ldyB0LlJlcXVlc3RQZXJmb3JtYW5jZShlLnJlcXVlc3QpLHM9dGhpcy5sb2FkaW5nW2ldPW5ldyBhKGUpO3MuYWJvcnQ9dGhpcy5sb2FkVmVjdG9yRGF0YShlLChmdW5jdGlvbihlLGEpe2lmKGRlbGV0ZSBuLmxvYWRpbmdbaV0sZXx8IWEpcmV0dXJuIHMuc3RhdHVzPSJkb25lIixuLmxvYWRlZFtpXT1zLHIoZSk7dmFyIGw9YS5yYXdEYXRhLGM9e307YS5leHBpcmVzJiYoYy5leHBpcmVzPWEuZXhwaXJlcyksYS5jYWNoZUNvbnRyb2wmJihjLmNhY2hlQ29udHJvbD1hLmNhY2hlQ29udHJvbCk7dmFyIHU9e307aWYobyl7dmFyIGY9by5maW5pc2goKTtmJiYodS5yZXNvdXJjZVRpbWluZz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGYpKSl9cy52ZWN0b3JUaWxlPWEudmVjdG9yVGlsZSxzLnBhcnNlKGEudmVjdG9yVGlsZSxuLmxheWVySW5kZXgsbi5hdmFpbGFibGVJbWFnZXMsbi5hY3RvciwoZnVuY3Rpb24oZSxuKXtpZihlfHwhbilyZXR1cm4gcihlKTtyKG51bGwsdC5leHRlbmQoe3Jhd1RpbGVEYXRhOmwuc2xpY2UoMCl9LG4sYyx1KSl9KSksbi5sb2FkZWQ9bi5sb2FkZWR8fHt9LG4ubG9hZGVkW2ldPXN9KSl9LGwucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49dGhpcy5sb2FkZWQsaT10LnVpZCxhPXRoaXM7aWYobiYmbltpXSl7dmFyIG89bltpXTtvLnNob3dDb2xsaXNpb25Cb3hlcz10LnNob3dDb2xsaXNpb25Cb3hlczt2YXIgcz1mdW5jdGlvbih0LG4pe3ZhciBpPW8ucmVsb2FkQ2FsbGJhY2s7aSYmKGRlbGV0ZSBvLnJlbG9hZENhbGxiYWNrLG8ucGFyc2Uoby52ZWN0b3JUaWxlLGEubGF5ZXJJbmRleCxyLmF2YWlsYWJsZUltYWdlcyxhLmFjdG9yLGkpKSxlKHQsbil9OyJwYXJzaW5nIj09PW8uc3RhdHVzP28ucmVsb2FkQ2FsbGJhY2s9czoiZG9uZSI9PT1vLnN0YXR1cyYmKG8udmVjdG9yVGlsZT9vLnBhcnNlKG8udmVjdG9yVGlsZSx0aGlzLmxheWVySW5kZXgsdGhpcy5hdmFpbGFibGVJbWFnZXMsdGhpcy5hY3RvcixzKTpzKCkpfX0sbC5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sb2FkaW5nLG49dC51aWQ7ciYmcltuXSYmcltuXS5hYm9ydCYmKHJbbl0uYWJvcnQoKSxkZWxldGUgcltuXSksZSgpfSxsLnByb3RvdHlwZS5yZW1vdmVUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sb2FkZWQsbj10LnVpZDtyJiZyW25dJiZkZWxldGUgcltuXSxlKCl9O3ZhciBjPXQud2luZG93LkltYWdlQml0bWFwLHU9ZnVuY3Rpb24oKXt0aGlzLmxvYWRlZD17fX07ZnVuY3Rpb24gZih0LGUpe2lmKDAhPT10Lmxlbmd0aCl7aCh0WzBdLGUpO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKWgodFtyXSwhZSl9fWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MCxuPTAsaT10Lmxlbmd0aCxhPWktMTtuPGk7YT1uKyspcis9KHRbbl1bMF0tdFthXVswXSkqKHRbYV1bMV0rdFtuXVsxXSk7cj49MCE9ISFlJiZ0LnJldmVyc2UoKX11LnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPWUudWlkLGk9ZS5lbmNvZGluZyxhPWUucmF3SW1hZ2VEYXRhLG89YyYmYSBpbnN0YW5jZW9mIGM/dGhpcy5nZXRJbWFnZURhdGEoYSk6YSxzPW5ldyB0LkRFTURhdGEobixvLGkpO3RoaXMubG9hZGVkPXRoaXMubG9hZGVkfHx7fSx0aGlzLmxvYWRlZFtuXT1zLHIobnVsbCxzKX0sdS5wcm90b3R5cGUuZ2V0SW1hZ2VEYXRhPWZ1bmN0aW9uKGUpe3RoaXMub2Zmc2NyZWVuQ2FudmFzJiZ0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHR8fCh0aGlzLm9mZnNjcmVlbkNhbnZhcz1uZXcgT2Zmc2NyZWVuQ2FudmFzKGUud2lkdGgsZS5oZWlnaHQpLHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dD10aGlzLm9mZnNjcmVlbkNhbnZhcy5nZXRDb250ZXh0KCIyZCIpKSx0aGlzLm9mZnNjcmVlbkNhbnZhcy53aWR0aD1lLndpZHRoLHRoaXMub2Zmc2NyZWVuQ2FudmFzLmhlaWdodD1lLmhlaWdodCx0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQpO3ZhciByPXRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoLTEsLTEsZS53aWR0aCsyLGUuaGVpZ2h0KzIpO3JldHVybiB0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KDAsMCx0aGlzLm9mZnNjcmVlbkNhbnZhcy53aWR0aCx0aGlzLm9mZnNjcmVlbkNhbnZhcy5oZWlnaHQpLG5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6ci53aWR0aCxoZWlnaHQ6ci5oZWlnaHR9LHIuZGF0YSl9LHUucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2FkZWQscj10LnVpZDtlJiZlW3JdJiZkZWxldGUgZVtyXX07dmFyIHA9dC52ZWN0b3JUaWxlLlZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT04sZD1mdW5jdGlvbihlKXt0aGlzLl9mZWF0dXJlPWUsdGhpcy5leHRlbnQ9dC5FWFRFTlQsdGhpcy50eXBlPWUudHlwZSx0aGlzLnByb3BlcnRpZXM9ZS50YWdzLCJpZCJpbiBlJiYhaXNOYU4oZS5pZCkmJih0aGlzLmlkPXBhcnNlSW50KGUuaWQsMTApKX07ZC5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7aWYoMT09PXRoaXMuX2ZlYXR1cmUudHlwZSl7Zm9yKHZhciBlPVtdLHI9MCxuPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2UucHVzaChbbmV3IHQuUG9pbnQkMShpWzBdLGlbMV0pXSl9cmV0dXJuIGV9Zm9yKHZhciBhPVtdLG89MCxzPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7bzxzLmxlbmd0aDtvKz0xKXtmb3IodmFyIGw9W10sYz0wLHU9c1tvXTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY107bC5wdXNoKG5ldyB0LlBvaW50JDEoZlswXSxmWzFdKSl9YS5wdXNoKGwpfXJldHVybiBhfSxkLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3JldHVybiBwLmNhbGwodGhpcyx0LGUscil9O3ZhciBnPWZ1bmN0aW9uKGUpe3RoaXMubGF5ZXJzPXtfZ2VvanNvblRpbGVMYXllcjp0aGlzfSx0aGlzLm5hbWU9Il9nZW9qc29uVGlsZUxheWVyIix0aGlzLmV4dGVudD10LkVYVEVOVCx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLl9mZWF0dXJlcz1lfTtnLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZCh0aGlzLl9mZWF0dXJlc1t0XSl9O3ZhciBtPXQudmVjdG9yVGlsZS5WZWN0b3JUaWxlRmVhdHVyZSx2PXk7ZnVuY3Rpb24geSh0LGUpe3RoaXMub3B0aW9ucz1lfHx7fSx0aGlzLmZlYXR1cmVzPXQsdGhpcy5sZW5ndGg9dC5sZW5ndGh9ZnVuY3Rpb24geCh0LGUpe3RoaXMuaWQ9Im51bWJlciI9PXR5cGVvZiB0LmlkP3QuaWQ6dm9pZCAwLHRoaXMudHlwZT10LnR5cGUsdGhpcy5yYXdHZW9tZXRyeT0xPT09dC50eXBlP1t0Lmdlb21ldHJ5XTp0Lmdlb21ldHJ5LHRoaXMucHJvcGVydGllcz10LnRhZ3MsdGhpcy5leHRlbnQ9ZXx8NDA5Nn15LnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeCh0aGlzLmZlYXR1cmVzW3RdLHRoaXMub3B0aW9ucy5leHRlbnQpfSx4LnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJhd0dlb21ldHJ5O3RoaXMuZ2VvbWV0cnk9W107Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe2Zvcih2YXIgbj1lW3JdLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWkucHVzaChuZXcgdC5Qb2ludCQxKG5bYV1bMF0sblthXVsxXSkpO3RoaXMuZ2VvbWV0cnkucHVzaChpKX1yZXR1cm4gdGhpcy5nZW9tZXRyeX0seC5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnl8fHRoaXMubG9hZEdlb21ldHJ5KCk7Zm9yKHZhciB0PXRoaXMuZ2VvbWV0cnksZT0xLzAscj0tMS8wLG49MS8wLGk9LTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspZm9yKHZhciBvPXRbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2U9TWF0aC5taW4oZSxsLngpLHI9TWF0aC5tYXgocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLnkpfXJldHVybltlLG4scixpXX0seC5wcm90b3R5cGUudG9HZW9KU09OPW0ucHJvdG90eXBlLnRvR2VvSlNPTjt2YXIgYj13LF89djtmdW5jdGlvbiB3KGUpe3ZhciByPW5ldyB0LnBiZjtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdC5sYXllcnMpZS53cml0ZU1lc3NhZ2UoMyxULHQubGF5ZXJzW3JdKX0oZSxyKSxyLmZpbmlzaCgpfWZ1bmN0aW9uIFQodCxlKXt2YXIgcjtlLndyaXRlVmFyaW50RmllbGQoMTUsdC52ZXJzaW9ufHwxKSxlLndyaXRlU3RyaW5nRmllbGQoMSx0Lm5hbWV8fCIiKSxlLndyaXRlVmFyaW50RmllbGQoNSx0LmV4dGVudHx8NDA5Nik7dmFyIG49e2tleXM6W10sdmFsdWVzOltdLGtleWNhY2hlOnt9LHZhbHVlY2FjaGU6e319O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspbi5mZWF0dXJlPXQuZmVhdHVyZShyKSxlLndyaXRlTWVzc2FnZSgyLGssbik7dmFyIGk9bi5rZXlzO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspZS53cml0ZVN0cmluZ0ZpZWxkKDMsaVtyXSk7dmFyIGE9bi52YWx1ZXM7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyllLndyaXRlTWVzc2FnZSg0LEMsYVtyXSl9ZnVuY3Rpb24gayh0LGUpe3ZhciByPXQuZmVhdHVyZTt2b2lkIDAhPT1yLmlkJiZlLndyaXRlVmFyaW50RmllbGQoMSxyLmlkKSxlLndyaXRlTWVzc2FnZSgyLE0sdCksZS53cml0ZVZhcmludEZpZWxkKDMsci50eXBlKSxlLndyaXRlTWVzc2FnZSg0LEUscil9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPXQuZmVhdHVyZSxuPXQua2V5cyxpPXQudmFsdWVzLGE9dC5rZXljYWNoZSxvPXQudmFsdWVjYWNoZTtmb3IodmFyIHMgaW4gci5wcm9wZXJ0aWVzKXt2YXIgbD1hW3NdO3ZvaWQgMD09PWwmJihuLnB1c2gocyksYVtzXT1sPW4ubGVuZ3RoLTEpLGUud3JpdGVWYXJpbnQobCk7dmFyIGM9ci5wcm9wZXJ0aWVzW3NdLHU9dHlwZW9mIGM7InN0cmluZyIhPT11JiYiYm9vbGVhbiIhPT11JiYibnVtYmVyIiE9PXUmJihjPUpTT04uc3RyaW5naWZ5KGMpKTt2YXIgZj11KyI6IitjLGg9b1tmXTt2b2lkIDA9PT1oJiYoaS5wdXNoKGMpLG9bZl09aD1pLmxlbmd0aC0xKSxlLndyaXRlVmFyaW50KGgpfX1mdW5jdGlvbiBBKHQsZSl7cmV0dXJuKGU8PDMpKyg3JnQpfWZ1bmN0aW9uIFModCl7cmV0dXJuIHQ8PDFedD4+MzF9ZnVuY3Rpb24gRSh0LGUpe2Zvcih2YXIgcj10LmxvYWRHZW9tZXRyeSgpLG49dC50eXBlLGk9MCxhPTAsbz1yLmxlbmd0aCxzPTA7czxvO3MrKyl7dmFyIGw9cltzXSxjPTE7MT09PW4mJihjPWwubGVuZ3RoKSxlLndyaXRlVmFyaW50KEEoMSxjKSk7Zm9yKHZhciB1PTM9PT1uP2wubGVuZ3RoLTE6bC5sZW5ndGgsZj0wO2Y8dTtmKyspezE9PT1mJiYxIT09biYmZS53cml0ZVZhcmludChBKDIsdS0xKSk7dmFyIGg9bFtmXS54LWkscD1sW2ZdLnktYTtlLndyaXRlVmFyaW50KFMoaCkpLGUud3JpdGVWYXJpbnQoUyhwKSksaSs9aCxhKz1wfTM9PT1uJiZlLndyaXRlVmFyaW50KEEoNywxKSl9fWZ1bmN0aW9uIEModCxlKXt2YXIgcj10eXBlb2YgdDsic3RyaW5nIj09PXI/ZS53cml0ZVN0cmluZ0ZpZWxkKDEsdCk6ImJvb2xlYW4iPT09cj9lLndyaXRlQm9vbGVhbkZpZWxkKDcsdCk6Im51bWJlciI9PT1yJiYodCUxIT0wP2Uud3JpdGVEb3VibGVGaWVsZCgzLHQpOnQ8MD9lLndyaXRlU1ZhcmludEZpZWxkKDYsdCk6ZS53cml0ZVZhcmludEZpZWxkKDUsdCkpfWZ1bmN0aW9uIEwodCxlLHIsbil7SSh0LHIsbiksSShlLDIqciwyKm4pLEkoZSwyKnIrMSwyKm4rMSl9ZnVuY3Rpb24gSSh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIFAodCxlLHIsbil7dmFyIGk9dC1yLGE9ZS1uO3JldHVybiBpKmkrYSphfWIuZnJvbVZlY3RvclRpbGVKcz13LGIuZnJvbUdlb2pzb25WdD1mdW5jdGlvbih0LGUpe2U9ZXx8e307dmFyIHI9e307Zm9yKHZhciBuIGluIHQpcltuXT1uZXcgdih0W25dLmZlYXR1cmVzLGUpLHJbbl0ubmFtZT1uLHJbbl0udmVyc2lvbj1lLnZlcnNpb24scltuXS5leHRlbnQ9ZS5leHRlbnQ7cmV0dXJuIHcoe2xheWVyczpyfSl9LGIuR2VvSlNPTldyYXBwZXI9Xzt2YXIgej1mdW5jdGlvbih0KXtyZXR1cm4gdFswXX0sTz1mdW5jdGlvbih0KXtyZXR1cm4gdFsxXX0sRD1mdW5jdGlvbih0LGUscixuLGkpe3ZvaWQgMD09PWUmJihlPXopLHZvaWQgMD09PXImJihyPU8pLHZvaWQgMD09PW4mJihuPTY0KSx2b2lkIDA9PT1pJiYoaT1GbG9hdDY0QXJyYXkpLHRoaXMubm9kZVNpemU9bix0aGlzLnBvaW50cz10O2Zvcih2YXIgYT10Lmxlbmd0aDw2NTUzNj9VaW50MTZBcnJheTpVaW50MzJBcnJheSxvPXRoaXMuaWRzPW5ldyBhKHQubGVuZ3RoKSxzPXRoaXMuY29vcmRzPW5ldyBpKDIqdC5sZW5ndGgpLGw9MDtsPHQubGVuZ3RoO2wrKylvW2xdPWwsc1syKmxdPWUodFtsXSksc1syKmwrMV09cih0W2xdKTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7aWYoIShhLWk8PW4pKXt2YXIgcz1pK2E+PjE7IWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8pe2Zvcig7YT5pOyl7aWYoYS1pPjYwMCl7dmFyIHM9YS1pKzEsbD1uLWkrMSxjPU1hdGgubG9nKHMpLHU9LjUqTWF0aC5leHAoMipjLzMpLGY9LjUqTWF0aC5zcXJ0KGMqdSoocy11KS9zKSoobC1zLzI8MD8tMToxKTt0KGUscixuLE1hdGgubWF4KGksTWF0aC5mbG9vcihuLWwqdS9zK2YpKSxNYXRoLm1pbihhLE1hdGguZmxvb3Iobisocy1sKSp1L3MrZikpLG8pfXZhciBoPXJbMipuK29dLHA9aSxkPWE7Zm9yKEwoZSxyLGksbiksclsyKmErb10+aCYmTChlLHIsaSxhKTtwPGQ7KXtmb3IoTChlLHIscCxkKSxwKyssZC0tO3JbMipwK29dPGg7KXArKztmb3IoO3JbMipkK29dPmg7KWQtLX1yWzIqaStvXT09PWg/TChlLHIsaSxkKTpMKGUsciwrK2QsYSksZDw9biYmKGk9ZCsxKSxuPD1kJiYoYT1kLTEpfX0oZSxyLHMsaSxhLG8lMiksdChlLHIsbixpLHMtMSxvKzEpLHQoZSxyLG4scysxLGEsbysxKX19KG8scyxuLDAsby5sZW5ndGgtMSwwKX07RC5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcyxsLGM9WzAsdC5sZW5ndGgtMSwwXSx1PVtdO2MubGVuZ3RoOyl7dmFyIGY9Yy5wb3AoKSxoPWMucG9wKCkscD1jLnBvcCgpO2lmKGgtcDw9bylmb3IodmFyIGQ9cDtkPD1oO2QrKylsPWVbMipkKzFdLChzPWVbMipkXSk+PXImJnM8PWkmJmw+PW4mJmw8PWEmJnUucHVzaCh0W2RdKTtlbHNle3ZhciBnPU1hdGguZmxvb3IoKHAraCkvMik7bD1lWzIqZysxXSwocz1lWzIqZ10pPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFtnXSk7dmFyIG09KGYrMSklMjsoMD09PWY/cjw9czpuPD1sKSYmKGMucHVzaChwKSxjLnB1c2goZy0xKSxjLnB1c2gobSkpLCgwPT09Zj9pPj1zOmE+PWwpJiYoYy5wdXNoKGcrMSksYy5wdXNoKGgpLGMucHVzaChtKSl9fXJldHVybiB1fSh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0LGUscixuLHRoaXMubm9kZVNpemUpfSxELnByb3RvdHlwZS53aXRoaW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPVswLHQubGVuZ3RoLTEsMF0scz1bXSxsPWkqaTtvLmxlbmd0aDspe3ZhciBjPW8ucG9wKCksdT1vLnBvcCgpLGY9by5wb3AoKTtpZih1LWY8PWEpZm9yKHZhciBoPWY7aDw9dTtoKyspUChlWzIqaF0sZVsyKmgrMV0scixuKTw9bCYmcy5wdXNoKHRbaF0pO2Vsc2V7dmFyIHA9TWF0aC5mbG9vcigoZit1KS8yKSxkPWVbMipwXSxnPWVbMipwKzFdO1AoZCxnLHIsbik8PWwmJnMucHVzaCh0W3BdKTt2YXIgbT0oYysxKSUyOygwPT09Yz9yLWk8PWQ6bi1pPD1nKSYmKG8ucHVzaChmKSxvLnB1c2gocC0xKSxvLnB1c2gobSkpLCgwPT09Yz9yK2k+PWQ6bitpPj1nKSYmKG8ucHVzaChwKzEpLG8ucHVzaCh1KSxvLnB1c2gobSkpfX1yZXR1cm4gc30odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsdGhpcy5ub2RlU2l6ZSl9O3ZhciBSPXttaW5ab29tOjAsbWF4Wm9vbToxNixyYWRpdXM6NDAsZXh0ZW50OjUxMixub2RlU2l6ZTo2NCxsb2c6ITEsZ2VuZXJhdGVJZDohMSxyZWR1Y2U6bnVsbCxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxGPWZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz1IKE9iamVjdC5jcmVhdGUoUiksdCksdGhpcy50cmVlcz1uZXcgQXJyYXkodGhpcy5vcHRpb25zLm1heFpvb20rMSl9O2Z1bmN0aW9uIEIodCxlLHIsbixpKXtyZXR1cm57eDp0LHk6ZSx6b29tOjEvMCxpZDpyLHBhcmVudElkOi0xLG51bVBvaW50czpuLHByb3BlcnRpZXM6aX19ZnVuY3Rpb24gTih0LGUpe3ZhciByPXQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsbj1yWzFdO3JldHVybnt4OlYoclswXSkseTpxKG4pLHpvb206MS8wLGluZGV4OmUscGFyZW50SWQ6LTF9fWZ1bmN0aW9uIGoodCl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLGlkOnQuaWQscHJvcGVydGllczpVKHQpLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6WyhuPXQueCwzNjAqKG4tLjUpKSwoZT10Lnkscj0oMTgwLTM2MCplKSpNYXRoLlBJLzE4MCwzNjAqTWF0aC5hdGFuKE1hdGguZXhwKHIpKS9NYXRoLlBJLTkwKV19fTt2YXIgZSxyLG59ZnVuY3Rpb24gVSh0KXt2YXIgZT10Lm51bVBvaW50cyxyPWU+PTFlND9NYXRoLnJvdW5kKGUvMWUzKSsiayI6ZT49MWUzP01hdGgucm91bmQoZS8xMDApLzEwKyJrIjplO3JldHVybiBIKEgoe30sdC5wcm9wZXJ0aWVzKSx7Y2x1c3RlcjohMCxjbHVzdGVyX2lkOnQuaWQscG9pbnRfY291bnQ6ZSxwb2ludF9jb3VudF9hYmJyZXZpYXRlZDpyfSl9ZnVuY3Rpb24gVih0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gcSh0KXt2YXIgZT1NYXRoLnNpbih0Kk1hdGguUEkvMTgwKSxyPS41LS4yNSpNYXRoLmxvZygoMStlKS8oMS1lKSkvTWF0aC5QSTtyZXR1cm4gcjwwPzA6cj4xPzE6cn1mdW5jdGlvbiBIKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fWZ1bmN0aW9uIEcodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBZKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gVyh0LGUscixuLGksYSl7dmFyIG89aS1yLHM9YS1uO2lmKDAhPT1vfHwwIT09cyl7dmFyIGw9KCh0LXIpKm8rKGUtbikqcykvKG8qbytzKnMpO2w+MT8ocj1pLG49YSk6bD4wJiYocis9bypsLG4rPXMqbCl9cmV0dXJuKG89dC1yKSpvKyhzPWUtbikqc31mdW5jdGlvbiBYKHQsZSxyLG4pe3ZhciBpPXtpZDp2b2lkIDA9PT10P251bGw6dCx0eXBlOmUsZ2VvbWV0cnk6cix0YWdzOm4sbWluWDoxLzAsbWluWToxLzAsbWF4WDotMS8wLG1heFk6LTEvMH07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2VvbWV0cnkscj10LnR5cGU7aWYoIlBvaW50Ij09PXJ8fCJNdWx0aVBvaW50Ij09PXJ8fCJMaW5lU3RyaW5nIj09PXIpWih0LGUpO2Vsc2UgaWYoIlBvbHlnb24iPT09cnx8Ik11bHRpTGluZVN0cmluZyI9PT1yKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKVoodCxlW25dKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09cilmb3Iobj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT0wO2k8ZVtuXS5sZW5ndGg7aSsrKVoodCxlW25dW2ldKX0oaSksaX1mdW5jdGlvbiBaKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKz0zKXQubWluWD1NYXRoLm1pbih0Lm1pblgsZVtyXSksdC5taW5ZPU1hdGgubWluKHQubWluWSxlW3IrMV0pLHQubWF4WD1NYXRoLm1heCh0Lm1heFgsZVtyXSksdC5tYXhZPU1hdGgubWF4KHQubWF4WSxlW3IrMV0pfWZ1bmN0aW9uIEoodCxlLHIsbil7aWYoZS5nZW9tZXRyeSl7dmFyIGk9ZS5nZW9tZXRyeS5jb29yZGluYXRlcyxhPWUuZ2VvbWV0cnkudHlwZSxvPU1hdGgucG93KHIudG9sZXJhbmNlLygoMTw8ci5tYXhab29tKSpyLmV4dGVudCksMikscz1bXSxsPWUuaWQ7aWYoci5wcm9tb3RlSWQ/bD1lLnByb3BlcnRpZXNbci5wcm9tb3RlSWRdOnIuZ2VuZXJhdGVJZCYmKGw9bnx8MCksIlBvaW50Ij09PWEpSyhpLHMpO2Vsc2UgaWYoIk11bHRpUG9pbnQiPT09YSlmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKylLKGlbY10scyk7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1hKVEoaSxzLG8sITEpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1hKXtpZihyLmxpbmVNZXRyaWNzKXtmb3IoYz0wO2M8aS5sZW5ndGg7YysrKVEoaVtjXSxzPVtdLG8sITEpLHQucHVzaChYKGwsIkxpbmVTdHJpbmciLHMsZS5wcm9wZXJ0aWVzKSk7cmV0dXJufSQoaSxzLG8sITEpfWVsc2UgaWYoIlBvbHlnb24iPT09YSkkKGkscyxvLCEwKTtlbHNle2lmKCJNdWx0aVBvbHlnb24iIT09YSl7aWYoIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1hKXtmb3IoYz0wO2M8ZS5nZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDtjKyspSih0LHtpZDpsLGdlb21ldHJ5OmUuZ2VvbWV0cnkuZ2VvbWV0cmllc1tjXSxwcm9wZXJ0aWVzOmUucHJvcGVydGllc30scixuKTtyZXR1cm59dGhyb3cgbmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpfWZvcihjPTA7YzxpLmxlbmd0aDtjKyspe3ZhciB1PVtdOyQoaVtjXSx1LG8sITApLHMucHVzaCh1KX19dC5wdXNoKFgobCxhLHMsZS5wcm9wZXJ0aWVzKSl9fWZ1bmN0aW9uIEsodCxlKXtlLnB1c2godHQodFswXSkpLGUucHVzaChldCh0WzFdKSksZS5wdXNoKDApfWZ1bmN0aW9uIFEodCxlLHIsbil7Zm9yKHZhciBpLGEsbz0wLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dHQodFtzXVswXSksYz1ldCh0W3NdWzFdKTtlLnB1c2gobCksZS5wdXNoKGMpLGUucHVzaCgwKSxzPjAmJihvKz1uPyhpKmMtbCphKS8yOk1hdGguc3FydChNYXRoLnBvdyhsLWksMikrTWF0aC5wb3coYy1hLDIpKSksaT1sLGE9Y312YXIgdT1lLmxlbmd0aC0zO2VbMl09MSxmdW5jdGlvbiB0KGUscixuLGkpe2Zvcih2YXIgYSxvPWkscz1uLXI+PjEsbD1uLXIsYz1lW3JdLHU9ZVtyKzFdLGY9ZVtuXSxoPWVbbisxXSxwPXIrMztwPG47cCs9Myl7dmFyIGQ9VyhlW3BdLGVbcCsxXSxjLHUsZixoKTtpZihkPm8pYT1wLG89ZDtlbHNlIGlmKGQ9PT1vKXt2YXIgZz1NYXRoLmFicyhwLXMpO2c8bCYmKGE9cCxsPWcpfX1vPmkmJihhLXI+MyYmdChlLHIsYSxpKSxlW2ErMl09byxuLWE+MyYmdChlLGEsbixpKSl9KGUsMCx1LHIpLGVbdSsyXT0xLGUuc2l6ZT1NYXRoLmFicyhvKSxlLnN0YXJ0PTAsZS5lbmQ9ZS5zaXplfWZ1bmN0aW9uICQodCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPVtdO1EodFtpXSxhLHIsbiksZS5wdXNoKGEpfX1mdW5jdGlvbiB0dCh0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gZXQodCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gcnQodCxlLHIsbixpLGEsbyxzKXtpZihuLz1lLGE+PShyLz1lKSYmbzxuKXJldHVybiB0O2lmKG88cnx8YT49bilyZXR1cm4gbnVsbDtmb3IodmFyIGw9W10sYz0wO2M8dC5sZW5ndGg7YysrKXt2YXIgdT10W2NdLGY9dS5nZW9tZXRyeSxoPXUudHlwZSxwPTA9PT1pP3UubWluWDp1Lm1pblksZD0wPT09aT91Lm1heFg6dS5tYXhZO2lmKHA+PXImJmQ8bilsLnB1c2godSk7ZWxzZSBpZighKGQ8cnx8cD49bikpe3ZhciBnPVtdO2lmKCJQb2ludCI9PT1ofHwiTXVsdGlQb2ludCI9PT1oKW50KGYsZyxyLG4saSk7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1oKWl0KGYsZyxyLG4saSwhMSxzLmxpbmVNZXRyaWNzKTtlbHNlIGlmKCJNdWx0aUxpbmVTdHJpbmciPT09aClvdChmLGcscixuLGksITEpO2Vsc2UgaWYoIlBvbHlnb24iPT09aClvdChmLGcscixuLGksITApO2Vsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1oKWZvcih2YXIgbT0wO208Zi5sZW5ndGg7bSsrKXt2YXIgdj1bXTtvdChmW21dLHYscixuLGksITApLHYubGVuZ3RoJiZnLnB1c2godil9aWYoZy5sZW5ndGgpe2lmKHMubGluZU1ldHJpY3MmJiJMaW5lU3RyaW5nIj09PWgpe2ZvcihtPTA7bTxnLmxlbmd0aDttKyspbC5wdXNoKFgodS5pZCxoLGdbbV0sdS50YWdzKSk7Y29udGludWV9IkxpbmVTdHJpbmciIT09aCYmIk11bHRpTGluZVN0cmluZyIhPT1ofHwoMT09PWcubGVuZ3RoPyhoPSJMaW5lU3RyaW5nIixnPWdbMF0pOmg9Ik11bHRpTGluZVN0cmluZyIpLCJQb2ludCIhPT1oJiYiTXVsdGlQb2ludCIhPT1ofHwoaD0zPT09Zy5sZW5ndGg/IlBvaW50IjoiTXVsdGlQb2ludCIpLGwucHVzaChYKHUuaWQsaCxnLHUudGFncykpfX19cmV0dXJuIGwubGVuZ3RoP2w6bnVsbH1mdW5jdGlvbiBudCh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSs9Myl7dmFyIG89dFthK2ldO28+PXImJm88PW4mJihlLnB1c2godFthXSksZS5wdXNoKHRbYSsxXSksZS5wdXNoKHRbYSsyXSkpfX1mdW5jdGlvbiBpdCh0LGUscixuLGksYSxvKXtmb3IodmFyIHMsbCxjPWF0KHQpLHU9MD09PWk/bHQ6Y3QsZj10LnN0YXJ0LGg9MDtoPHQubGVuZ3RoLTM7aCs9Myl7dmFyIHA9dFtoXSxkPXRbaCsxXSxnPXRbaCsyXSxtPXRbaCszXSx2PXRbaCs0XSx5PTA9PT1pP3A6ZCx4PTA9PT1pP206dixiPSExO28mJihzPU1hdGguc3FydChNYXRoLnBvdyhwLW0sMikrTWF0aC5wb3coZC12LDIpKSkseTxyP3g+ciYmKGw9dShjLHAsZCxtLHYsciksbyYmKGMuc3RhcnQ9ZitzKmwpKTp5Pm4/eDxuJiYobD11KGMscCxkLG0sdixuKSxvJiYoYy5zdGFydD1mK3MqbCkpOnN0KGMscCxkLGcpLHg8ciYmeT49ciYmKGw9dShjLHAsZCxtLHYsciksYj0hMCkseD5uJiZ5PD1uJiYobD11KGMscCxkLG0sdixuKSxiPSEwKSwhYSYmYiYmKG8mJihjLmVuZD1mK3MqbCksZS5wdXNoKGMpLGM9YXQodCkpLG8mJihmKz1zKX12YXIgXz10Lmxlbmd0aC0zO3A9dFtfXSxkPXRbXysxXSxnPXRbXysyXSwoeT0wPT09aT9wOmQpPj1yJiZ5PD1uJiZzdChjLHAsZCxnKSxfPWMubGVuZ3RoLTMsYSYmXz49MyYmKGNbX10hPT1jWzBdfHxjW18rMV0hPT1jWzFdKSYmc3QoYyxjWzBdLGNbMV0sY1syXSksYy5sZW5ndGgmJmUucHVzaChjKX1mdW5jdGlvbiBhdCh0KXt2YXIgZT1bXTtyZXR1cm4gZS5zaXplPXQuc2l6ZSxlLnN0YXJ0PXQuc3RhcnQsZS5lbmQ9dC5lbmQsZX1mdW5jdGlvbiBvdCh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspaXQodFtvXSxlLHIsbixpLGEsITEpfWZ1bmN0aW9uIHN0KHQsZSxyLG4pe3QucHVzaChlKSx0LnB1c2gociksdC5wdXNoKG4pfWZ1bmN0aW9uIGx0KHQsZSxyLG4saSxhKXt2YXIgbz0oYS1lKS8obi1lKTtyZXR1cm4gdC5wdXNoKGEpLHQucHVzaChyKyhpLXIpKm8pLHQucHVzaCgxKSxvfWZ1bmN0aW9uIGN0KHQsZSxyLG4saSxhKXt2YXIgbz0oYS1yKS8oaS1yKTtyZXR1cm4gdC5wdXNoKGUrKG4tZSkqbyksdC5wdXNoKGEpLHQucHVzaCgxKSxvfWZ1bmN0aW9uIHV0KHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGksYT10W25dLG89YS50eXBlO2lmKCJQb2ludCI9PT1vfHwiTXVsdGlQb2ludCI9PT1vfHwiTGluZVN0cmluZyI9PT1vKWk9ZnQoYS5nZW9tZXRyeSxlKTtlbHNlIGlmKCJNdWx0aUxpbmVTdHJpbmciPT09b3x8IlBvbHlnb24iPT09byl7aT1bXTtmb3IodmFyIHM9MDtzPGEuZ2VvbWV0cnkubGVuZ3RoO3MrKylpLnB1c2goZnQoYS5nZW9tZXRyeVtzXSxlKSl9ZWxzZSBpZigiTXVsdGlQb2x5Z29uIj09PW8pZm9yKGk9W10scz0wO3M8YS5nZW9tZXRyeS5sZW5ndGg7cysrKXtmb3IodmFyIGw9W10sYz0wO2M8YS5nZW9tZXRyeVtzXS5sZW5ndGg7YysrKWwucHVzaChmdChhLmdlb21ldHJ5W3NdW2NdLGUpKTtpLnB1c2gobCl9ci5wdXNoKFgoYS5pZCxvLGksYS50YWdzKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gZnQodCxlKXt2YXIgcj1bXTtyLnNpemU9dC5zaXplLHZvaWQgMCE9PXQuc3RhcnQmJihyLnN0YXJ0PXQuc3RhcnQsci5lbmQ9dC5lbmQpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9MylyLnB1c2godFtuXStlLHRbbisxXSx0W24rMl0pO3JldHVybiByfWZ1bmN0aW9uIGh0KHQsZSl7aWYodC50cmFuc2Zvcm1lZClyZXR1cm4gdDt2YXIgcixuLGksYT0xPDx0Lnosbz10Lngscz10Lnk7Zm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoO3IrKyl7dmFyIGw9dC5mZWF0dXJlc1tyXSxjPWwuZ2VvbWV0cnksdT1sLnR5cGU7aWYobC5nZW9tZXRyeT1bXSwxPT09dSlmb3Iobj0wO248Yy5sZW5ndGg7bis9MilsLmdlb21ldHJ5LnB1c2gocHQoY1tuXSxjW24rMV0sZSxhLG8scykpO2Vsc2UgZm9yKG49MDtuPGMubGVuZ3RoO24rKyl7dmFyIGY9W107Zm9yKGk9MDtpPGNbbl0ubGVuZ3RoO2krPTIpZi5wdXNoKHB0KGNbbl1baV0sY1tuXVtpKzFdLGUsYSxvLHMpKTtsLmdlb21ldHJ5LnB1c2goZil9fXJldHVybiB0LnRyYW5zZm9ybWVkPSEwLHR9ZnVuY3Rpb24gcHQodCxlLHIsbixpLGEpe3JldHVybltNYXRoLnJvdW5kKHIqKHQqbi1pKSksTWF0aC5yb3VuZChyKihlKm4tYSkpXX1mdW5jdGlvbiBkdCh0LGUscixuLGkpe2Zvcih2YXIgYT1lPT09aS5tYXhab29tPzA6aS50b2xlcmFuY2UvKCgxPDxlKSppLmV4dGVudCksbz17ZmVhdHVyZXM6W10sbnVtUG9pbnRzOjAsbnVtU2ltcGxpZmllZDowLG51bUZlYXR1cmVzOjAsc291cmNlOm51bGwseDpyLHk6bix6OmUsdHJhbnNmb3JtZWQ6ITEsbWluWDoyLG1pblk6MSxtYXhYOi0xLG1heFk6MH0scz0wO3M8dC5sZW5ndGg7cysrKXtvLm51bUZlYXR1cmVzKyssZ3Qobyx0W3NdLGEsaSk7dmFyIGw9dFtzXS5taW5YLGM9dFtzXS5taW5ZLHU9dFtzXS5tYXhYLGY9dFtzXS5tYXhZO2w8by5taW5YJiYoby5taW5YPWwpLGM8by5taW5ZJiYoby5taW5ZPWMpLHU+by5tYXhYJiYoby5tYXhYPXUpLGY+by5tYXhZJiYoby5tYXhZPWYpfXJldHVybiBvfWZ1bmN0aW9uIGd0KHQsZSxyLG4pe3ZhciBpPWUuZ2VvbWV0cnksYT1lLnR5cGUsbz1bXTtpZigiUG9pbnQiPT09YXx8Ik11bHRpUG9pbnQiPT09YSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrPTMpby5wdXNoKGlbc10pLG8ucHVzaChpW3MrMV0pLHQubnVtUG9pbnRzKyssdC5udW1TaW1wbGlmaWVkKys7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1hKW10KG8saSx0LHIsITEsITEpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1hfHwiUG9seWdvbiI9PT1hKWZvcihzPTA7czxpLmxlbmd0aDtzKyspbXQobyxpW3NdLHQsciwiUG9seWdvbiI9PT1hLDA9PT1zKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09YSlmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXTtmb3Iocz0wO3M8Yy5sZW5ndGg7cysrKW10KG8sY1tzXSx0LHIsITAsMD09PXMpfWlmKG8ubGVuZ3RoKXt2YXIgdT1lLnRhZ3N8fG51bGw7aWYoIkxpbmVTdHJpbmciPT09YSYmbi5saW5lTWV0cmljcyl7Zm9yKHZhciBmIGluIHU9e30sZS50YWdzKXVbZl09ZS50YWdzW2ZdO3UubWFwYm94X2NsaXBfc3RhcnQ9aS5zdGFydC9pLnNpemUsdS5tYXBib3hfY2xpcF9lbmQ9aS5lbmQvaS5zaXplfXZhciBoPXtnZW9tZXRyeTpvLHR5cGU6IlBvbHlnb24iPT09YXx8Ik11bHRpUG9seWdvbiI9PT1hPzM6IkxpbmVTdHJpbmciPT09YXx8Ik11bHRpTGluZVN0cmluZyI9PT1hPzI6MSx0YWdzOnV9O251bGwhPT1lLmlkJiYoaC5pZD1lLmlkKSx0LmZlYXR1cmVzLnB1c2goaCl9fWZ1bmN0aW9uIG10KHQsZSxyLG4saSxhKXt2YXIgbz1uKm47aWYobj4wJiZlLnNpemU8KGk/bzpuKSlyLm51bVBvaW50cys9ZS5sZW5ndGgvMztlbHNle2Zvcih2YXIgcz1bXSxsPTA7bDxlLmxlbmd0aDtsKz0zKSgwPT09bnx8ZVtsKzJdPm8pJiYoci5udW1TaW1wbGlmaWVkKysscy5wdXNoKGVbbF0pLHMucHVzaChlW2wrMV0pKSxyLm51bVBvaW50cysrO2kmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGgsYT1pLTI7bjxpO2E9bixuKz0yKXIrPSh0W25dLXRbYV0pKih0W24rMV0rdFthKzFdKTtpZihyPjA9PT1lKWZvcihuPTAsaT10Lmxlbmd0aDtuPGkvMjtuKz0yKXt2YXIgbz10W25dLHM9dFtuKzFdO3Rbbl09dFtpLTItbl0sdFtuKzFdPXRbaS0xLW5dLHRbaS0yLW5dPW8sdFtpLTEtbl09c319KHMsYSksdC5wdXNoKHMpfX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPShlPXRoaXMub3B0aW9ucz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXTtyZXR1cm4gdH0oT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLGUpKS5kZWJ1ZztpZihyJiZjb25zb2xlLnRpbWUoInByZXByb2Nlc3MgZGF0YSIpLGUubWF4Wm9vbTwwfHxlLm1heFpvb20+MjQpdGhyb3cgbmV3IEVycm9yKCJtYXhab29tIHNob3VsZCBiZSBpbiB0aGUgMC0yNCByYW5nZSIpO2lmKGUucHJvbW90ZUlkJiZlLmdlbmVyYXRlSWQpdGhyb3cgbmV3IEVycm9yKCJwcm9tb3RlSWQgYW5kIGdlbmVyYXRlSWQgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIik7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlKWZvcih2YXIgbj0wO248dC5mZWF0dXJlcy5sZW5ndGg7bisrKUoocix0LmZlYXR1cmVzW25dLGUsbik7ZWxzZSBKKHIsIkZlYXR1cmUiPT09dC50eXBlP3Q6e2dlb21ldHJ5OnR9LGUpO3JldHVybiByfSh0LGUpO3RoaXMudGlsZXM9e30sdGhpcy50aWxlQ29vcmRzPVtdLHImJihjb25zb2xlLnRpbWVFbmQoInByZXByb2Nlc3MgZGF0YSIpLGNvbnNvbGUubG9nKCJpbmRleDogbWF4Wm9vbTogJWQsIG1heFBvaW50czogJWQiLGUuaW5kZXhNYXhab29tLGUuaW5kZXhNYXhQb2ludHMpLGNvbnNvbGUudGltZSgiZ2VuZXJhdGUgdGlsZXMiKSx0aGlzLnN0YXRzPXt9LHRoaXMudG90YWw9MCksKG49ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmJ1ZmZlci9lLmV4dGVudCxuPXQsaT1ydCh0LDEsLTEtcixyLDAsLTEsMixlKSxhPXJ0KHQsMSwxLXIsMityLDAsLTEsMixlKTtyZXR1cm4oaXx8YSkmJihuPXJ0KHQsMSwtciwxK3IsMCwtMSwyLGUpfHxbXSxpJiYobj11dChpLDEpLmNvbmNhdChuKSksYSYmKG49bi5jb25jYXQodXQoYSwtMSkpKSksbn0obixlKSkubGVuZ3RoJiZ0aGlzLnNwbGl0VGlsZShuLDAsMCwwKSxyJiYobi5sZW5ndGgmJmNvbnNvbGUubG9nKCJmZWF0dXJlczogJWQsIHBvaW50czogJWQiLHRoaXMudGlsZXNbMF0ubnVtRmVhdHVyZXMsdGhpcy50aWxlc1swXS5udW1Qb2ludHMpLGNvbnNvbGUudGltZUVuZCgiZ2VuZXJhdGUgdGlsZXMiKSxjb25zb2xlLmxvZygidGlsZXMgZ2VuZXJhdGVkOiIsdGhpcy50b3RhbCxKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRzKSkpfWZ1bmN0aW9uIHl0KHQsZSxyKXtyZXR1cm4gMzIqKCgxPDx0KSpyK2UpK3R9ZnVuY3Rpb24geHQodCxlKXt2YXIgcj10LnRpbGVJRC5jYW5vbmljYWw7aWYoIXRoaXMuX2dlb0pTT05JbmRleClyZXR1cm4gZShudWxsLG51bGwpO3ZhciBuPXRoaXMuX2dlb0pTT05JbmRleC5nZXRUaWxlKHIueixyLngsci55KTtpZighbilyZXR1cm4gZShudWxsLG51bGwpO3ZhciBpPW5ldyBnKG4uZmVhdHVyZXMpLGE9YihpKTswPT09YS5ieXRlT2Zmc2V0JiZhLmJ5dGVMZW5ndGg9PT1hLmJ1ZmZlci5ieXRlTGVuZ3RofHwoYT1uZXcgVWludDhBcnJheShhKSksZShudWxsLHt2ZWN0b3JUaWxlOmkscmF3RGF0YTphLmJ1ZmZlcn0pfUYucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLHI9ZS5sb2csbj1lLm1pblpvb20saT1lLm1heFpvb20sYT1lLm5vZGVTaXplO3ImJmNvbnNvbGUudGltZSgidG90YWwgdGltZSIpO3ZhciBvPSJwcmVwYXJlICIrdC5sZW5ndGgrIiBwb2ludHMiO3ImJmNvbnNvbGUudGltZShvKSx0aGlzLnBvaW50cz10O2Zvcih2YXIgcz1bXSxsPTA7bDx0Lmxlbmd0aDtsKyspdFtsXS5nZW9tZXRyeSYmcy5wdXNoKE4odFtsXSxsKSk7dGhpcy50cmVlc1tpKzFdPW5ldyBEKHMsRyxZLGEsRmxvYXQzMkFycmF5KSxyJiZjb25zb2xlLnRpbWVFbmQobyk7Zm9yKHZhciBjPWk7Yz49bjtjLS0pe3ZhciB1PStEYXRlLm5vdygpO3M9dGhpcy5fY2x1c3RlcihzLGMpLHRoaXMudHJlZXNbY109bmV3IEQocyxHLFksYSxGbG9hdDMyQXJyYXkpLHImJmNvbnNvbGUubG9nKCJ6JWQ6ICVkIGNsdXN0ZXJzIGluICVkbXMiLGMscy5sZW5ndGgsK0RhdGUubm93KCktdSl9cmV0dXJuIHImJmNvbnNvbGUudGltZUVuZCgidG90YWwgdGltZSIpLHRoaXN9LEYucHJvdG90eXBlLmdldENsdXN0ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KCh0WzBdKzE4MCklMzYwKzM2MCklMzYwLTE4MCxuPU1hdGgubWF4KC05MCxNYXRoLm1pbig5MCx0WzFdKSksaT0xODA9PT10WzJdPzE4MDooKHRbMl0rMTgwKSUzNjArMzYwKSUzNjAtMTgwLGE9TWF0aC5tYXgoLTkwLE1hdGgubWluKDkwLHRbM10pKTtpZih0WzJdLXRbMF0+PTM2MClyPS0xODAsaT0xODA7ZWxzZSBpZihyPmkpe3ZhciBvPXRoaXMuZ2V0Q2x1c3RlcnMoW3IsbiwxODAsYV0sZSkscz10aGlzLmdldENsdXN0ZXJzKFstMTgwLG4saSxhXSxlKTtyZXR1cm4gby5jb25jYXQocyl9Zm9yKHZhciBsPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKGUpXSxjPVtdLHU9MCxmPWwucmFuZ2UoVihyKSxxKGEpLFYoaSkscShuKSk7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1sLnBvaW50c1tmW3VdXTtjLnB1c2goaC5udW1Qb2ludHM/aihoKTp0aGlzLnBvaW50c1toLmluZGV4XSl9cmV0dXJuIGN9LEYucHJvdG90eXBlLmdldENoaWxkcmVuPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldE9yaWdpbklkKHQpLHI9dGhpcy5fZ2V0T3JpZ2luWm9vbSh0KSxuPSJObyBjbHVzdGVyIHdpdGggdGhlIHNwZWNpZmllZCBpZC4iLGk9dGhpcy50cmVlc1tyXTtpZighaSl0aHJvdyBuZXcgRXJyb3Iobik7dmFyIGE9aS5wb2ludHNbZV07aWYoIWEpdGhyb3cgbmV3IEVycm9yKG4pO2Zvcih2YXIgbz10aGlzLm9wdGlvbnMucmFkaXVzLyh0aGlzLm9wdGlvbnMuZXh0ZW50Kk1hdGgucG93KDIsci0xKSkscz1bXSxsPTAsYz1pLndpdGhpbihhLngsYS55LG8pO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9aS5wb2ludHNbY1tsXV07dS5wYXJlbnRJZD09PXQmJnMucHVzaCh1Lm51bVBvaW50cz9qKHUpOnRoaXMucG9pbnRzW3UuaW5kZXhdKX1pZigwPT09cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKG4pO3JldHVybiBzfSxGLnByb3RvdHlwZS5nZXRMZWF2ZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdO3JldHVybiB0aGlzLl9hcHBlbmRMZWF2ZXMobix0LGU9ZXx8MTAscj1yfHwwLDApLG59LEYucHJvdG90eXBlLmdldFRpbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKHQpXSxpPU1hdGgucG93KDIsdCksYT10aGlzLm9wdGlvbnMsbz1hLnJhZGl1cy9hLmV4dGVudCxzPShyLW8pL2ksbD0ocisxK28pL2ksYz17ZmVhdHVyZXM6W119O3JldHVybiB0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgoZS1vKS9pLHMsKGUrMStvKS9pLGwpLG4ucG9pbnRzLGUscixpLGMpLDA9PT1lJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgxLW8vaSxzLDEsbCksbi5wb2ludHMsaSxyLGksYyksZT09PWktMSYmdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoMCxzLG8vaSxsKSxuLnBvaW50cywtMSxyLGksYyksYy5mZWF0dXJlcy5sZW5ndGg/YzpudWxsfSxGLnByb3RvdHlwZS5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ2V0T3JpZ2luWm9vbSh0KS0xO2U8PXRoaXMub3B0aW9ucy5tYXhab29tOyl7dmFyIHI9dGhpcy5nZXRDaGlsZHJlbih0KTtpZihlKyssMSE9PXIubGVuZ3RoKWJyZWFrO3Q9clswXS5wcm9wZXJ0aWVzLmNsdXN0ZXJfaWR9cmV0dXJuIGV9LEYucHJvdG90eXBlLl9hcHBlbmRMZWF2ZXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9MCxvPXRoaXMuZ2V0Q2hpbGRyZW4oZSk7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9cy5wcm9wZXJ0aWVzO2lmKGwmJmwuY2x1c3Rlcj9pK2wucG9pbnRfY291bnQ8PW4/aSs9bC5wb2ludF9jb3VudDppPXRoaXMuX2FwcGVuZExlYXZlcyh0LGwuY2x1c3Rlcl9pZCxyLG4saSk6aTxuP2krKzp0LnB1c2gocyksdC5sZW5ndGg9PT1yKWJyZWFrfXJldHVybiBpfSxGLnByb3RvdHlwZS5fYWRkVGlsZUZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MCxzPXQ7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1lW3Nbb11dLGM9bC5udW1Qb2ludHMsdT17dHlwZToxLGdlb21ldHJ5OltbTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50KihsLngqaS1yKSksTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50KihsLnkqaS1uKSldXSx0YWdzOmM/VShsKTp0aGlzLnBvaW50c1tsLmluZGV4XS5wcm9wZXJ0aWVzfSxmPXZvaWQgMDtjP2Y9bC5pZDp0aGlzLm9wdGlvbnMuZ2VuZXJhdGVJZD9mPWwuaW5kZXg6dGhpcy5wb2ludHNbbC5pbmRleF0uaWQmJihmPXRoaXMucG9pbnRzW2wuaW5kZXhdLmlkKSx2b2lkIDAhPT1mJiYodS5pZD1mKSxhLmZlYXR1cmVzLnB1c2godSl9fSxGLnByb3RvdHlwZS5fbGltaXRab29tPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh0aGlzLm9wdGlvbnMubWluWm9vbSxNYXRoLm1pbih0LHRoaXMub3B0aW9ucy5tYXhab29tKzEpKX0sRi5wcm90b3R5cGUuX2NsdXN0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj10aGlzLm9wdGlvbnMsaT1uLnJlZHVjZSxhPW4ucmFkaXVzLyhuLmV4dGVudCpNYXRoLnBvdygyLGUpKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107aWYoIShzLnpvb208PWUpKXtzLnpvb209ZTtmb3IodmFyIGw9dGhpcy50cmVlc1tlKzFdLGM9bC53aXRoaW4ocy54LHMueSxhKSx1PXMubnVtUG9pbnRzfHwxLGY9cy54KnUsaD1zLnkqdSxwPWkmJnU+MT90aGlzLl9tYXAocywhMCk6bnVsbCxkPShvPDw1KSsoZSsxKSt0aGlzLnBvaW50cy5sZW5ndGgsZz0wLG09YztnPG0ubGVuZ3RoO2crPTEpe3ZhciB2PWwucG9pbnRzW21bZ11dO2lmKCEodi56b29tPD1lKSl7di56b29tPWU7dmFyIHk9di5udW1Qb2ludHN8fDE7Zis9di54KnksaCs9di55KnksdSs9eSx2LnBhcmVudElkPWQsaSYmKHB8fChwPXRoaXMuX21hcChzLCEwKSksaShwLHRoaXMuX21hcCh2KSkpfX0xPT09dT9yLnB1c2gocyk6KHMucGFyZW50SWQ9ZCxyLnB1c2goQihmL3UsaC91LGQsdSxwKSkpfX1yZXR1cm4gcn0sRi5wcm90b3R5cGUuX2dldE9yaWdpbklkPWZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMucG9pbnRzLmxlbmd0aD4+NX0sRi5wcm90b3R5cGUuX2dldE9yaWdpblpvb209ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy5wb2ludHMubGVuZ3RoKSUzMn0sRi5wcm90b3R5cGUuX21hcD1mdW5jdGlvbih0LGUpe2lmKHQubnVtUG9pbnRzKXJldHVybiBlP0goe30sdC5wcm9wZXJ0aWVzKTp0LnByb3BlcnRpZXM7dmFyIHI9dGhpcy5wb2ludHNbdC5pbmRleF0ucHJvcGVydGllcyxuPXRoaXMub3B0aW9ucy5tYXAocik7cmV0dXJuIGUmJm49PT1yP0goe30sbik6bn0sdnQucHJvdG90eXBlLm9wdGlvbnM9e21heFpvb206MTQsaW5kZXhNYXhab29tOjUsaW5kZXhNYXhQb2ludHM6MWU1LHRvbGVyYW5jZTozLGV4dGVudDo0MDk2LGJ1ZmZlcjo2NCxsaW5lTWV0cmljczohMSxwcm9tb3RlSWQ6bnVsbCxnZW5lcmF0ZUlkOiExLGRlYnVnOjB9LHZ0LnByb3RvdHlwZS5zcGxpdFRpbGU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPVt0LGUscixuXSxsPXRoaXMub3B0aW9ucyxjPWwuZGVidWc7cy5sZW5ndGg7KXtuPXMucG9wKCkscj1zLnBvcCgpLGU9cy5wb3AoKSx0PXMucG9wKCk7dmFyIHU9MTw8ZSxmPXl0KGUscixuKSxoPXRoaXMudGlsZXNbZl07aWYoIWgmJihjPjEmJmNvbnNvbGUudGltZSgiY3JlYXRpb24iKSxoPXRoaXMudGlsZXNbZl09ZHQodCxlLHIsbixsKSx0aGlzLnRpbGVDb29yZHMucHVzaCh7ejplLHg6cix5Om59KSxjKSl7Yz4xJiYoY29uc29sZS5sb2coInRpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKSIsZSxyLG4saC5udW1GZWF0dXJlcyxoLm51bVBvaW50cyxoLm51bVNpbXBsaWZpZWQpLGNvbnNvbGUudGltZUVuZCgiY3JlYXRpb24iKSk7dmFyIHA9InoiK2U7dGhpcy5zdGF0c1twXT0odGhpcy5zdGF0c1twXXx8MCkrMSx0aGlzLnRvdGFsKyt9aWYoaC5zb3VyY2U9dCxpKXtpZihlPT09bC5tYXhab29tfHxlPT09aSljb250aW51ZTt2YXIgZD0xPDxpLWU7aWYociE9PU1hdGguZmxvb3IoYS9kKXx8biE9PU1hdGguZmxvb3Ioby9kKSljb250aW51ZX1lbHNlIGlmKGU9PT1sLmluZGV4TWF4Wm9vbXx8aC5udW1Qb2ludHM8PWwuaW5kZXhNYXhQb2ludHMpY29udGludWU7aWYoaC5zb3VyY2U9bnVsbCwwIT09dC5sZW5ndGgpe2M+MSYmY29uc29sZS50aW1lKCJjbGlwcGluZyIpO3ZhciBnLG0sdix5LHgsYixfPS41KmwuYnVmZmVyL2wuZXh0ZW50LHc9LjUtXyxUPS41K18saz0xK187Zz1tPXY9eT1udWxsLHg9cnQodCx1LHItXyxyK1QsMCxoLm1pblgsaC5tYXhYLGwpLGI9cnQodCx1LHIrdyxyK2ssMCxoLm1pblgsaC5tYXhYLGwpLHQ9bnVsbCx4JiYoZz1ydCh4LHUsbi1fLG4rVCwxLGgubWluWSxoLm1heFksbCksbT1ydCh4LHUsbit3LG4raywxLGgubWluWSxoLm1heFksbCkseD1udWxsKSxiJiYodj1ydChiLHUsbi1fLG4rVCwxLGgubWluWSxoLm1heFksbCkseT1ydChiLHUsbit3LG4raywxLGgubWluWSxoLm1heFksbCksYj1udWxsKSxjPjEmJmNvbnNvbGUudGltZUVuZCgiY2xpcHBpbmciKSxzLnB1c2goZ3x8W10sZSsxLDIqciwyKm4pLHMucHVzaChtfHxbXSxlKzEsMipyLDIqbisxKSxzLnB1c2godnx8W10sZSsxLDIqcisxLDIqbikscy5wdXNoKHl8fFtdLGUrMSwyKnIrMSwyKm4rMSl9fX0sdnQucHJvdG90eXBlLmdldFRpbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMub3B0aW9ucyxpPW4uZXh0ZW50LGE9bi5kZWJ1ZztpZih0PDB8fHQ+MjQpcmV0dXJuIG51bGw7dmFyIG89MTw8dCxzPXl0KHQsZT0oZSVvK28pJW8scik7aWYodGhpcy50aWxlc1tzXSlyZXR1cm4gaHQodGhpcy50aWxlc1tzXSxpKTthPjEmJmNvbnNvbGUubG9nKCJkcmlsbGluZyBkb3duIHRvIHolZC0lZC0lZCIsdCxlLHIpO2Zvcih2YXIgbCxjPXQsdT1lLGY9cjshbCYmYz4wOyljLS0sdT1NYXRoLmZsb29yKHUvMiksZj1NYXRoLmZsb29yKGYvMiksbD10aGlzLnRpbGVzW3l0KGMsdSxmKV07cmV0dXJuIGwmJmwuc291cmNlPyhhPjEmJmNvbnNvbGUubG9nKCJmb3VuZCBwYXJlbnQgdGlsZSB6JWQtJWQtJWQiLGMsdSxmKSxhPjEmJmNvbnNvbGUudGltZSgiZHJpbGxpbmcgZG93biIpLHRoaXMuc3BsaXRUaWxlKGwuc291cmNlLGMsdSxmLHQsZSxyKSxhPjEmJmNvbnNvbGUudGltZUVuZCgiZHJpbGxpbmcgZG93biIpLHRoaXMudGlsZXNbc10/aHQodGhpcy50aWxlc1tzXSxpKTpudWxsKTpudWxsfTt2YXIgYnQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyx0LHIsbix4dCksaSYmKHRoaXMubG9hZEdlb0pTT049aSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZERhdGE9ZnVuY3Rpb24odCxlKXt0aGlzLl9wZW5kaW5nQ2FsbGJhY2smJnRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLHthYmFuZG9uZWQ6ITB9KSx0aGlzLl9wZW5kaW5nQ2FsbGJhY2s9ZSx0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM9dCx0aGlzLl9zdGF0ZSYmIklkbGUiIT09dGhpcy5fc3RhdGU/dGhpcy5fc3RhdGU9Ik5lZWRzTG9hZERhdGEiOih0aGlzLl9zdGF0ZT0iQ29hbGVzY2luZyIsdGhpcy5fbG9hZERhdGEoKSl9LHIucHJvdG90eXBlLl9sb2FkRGF0YT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXMpe3ZhciByPXRoaXMuX3BlbmRpbmdDYWxsYmFjayxuPXRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztkZWxldGUgdGhpcy5fcGVuZGluZ0NhbGxiYWNrLGRlbGV0ZSB0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM7dmFyIGk9ISEobiYmbi5yZXF1ZXN0JiZuLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKSYmbmV3IHQuUmVxdWVzdFBlcmZvcm1hbmNlKG4ucmVxdWVzdCk7dGhpcy5sb2FkR2VvSlNPTihuLChmdW5jdGlvbihhLG8pe2lmKGF8fCFvKXJldHVybiByKGEpO2lmKCJvYmplY3QiIT10eXBlb2YgbylyZXR1cm4gcihuZXcgRXJyb3IoIklucHV0IGRhdGEgZ2l2ZW4gdG8gJyIrbi5zb3VyY2UrIicgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpOyFmdW5jdGlvbiB0KGUscil7dmFyIG4saT1lJiZlLnR5cGU7aWYoIkZlYXR1cmVDb2xsZWN0aW9uIj09PWkpZm9yKG49MDtuPGUuZmVhdHVyZXMubGVuZ3RoO24rKyl0KGUuZmVhdHVyZXNbbl0scik7ZWxzZSBpZigiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWkpZm9yKG49MDtuPGUuZ2VvbWV0cmllcy5sZW5ndGg7bisrKXQoZS5nZW9tZXRyaWVzW25dLHIpO2Vsc2UgaWYoIkZlYXR1cmUiPT09aSl0KGUuZ2VvbWV0cnkscik7ZWxzZSBpZigiUG9seWdvbiI9PT1pKWYoZS5jb29yZGluYXRlcyxyKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09aSlmb3Iobj0wO248ZS5jb29yZGluYXRlcy5sZW5ndGg7bisrKWYoZS5jb29yZGluYXRlc1tuXSxyKTtyZXR1cm4gZX0obywhMCk7dHJ5e2UuX2dlb0pTT05JbmRleD1uLmNsdXN0ZXI/bmV3IEYoZnVuY3Rpb24oZSl7dmFyIHI9ZS5zdXBlcmNsdXN0ZXJPcHRpb25zLG49ZS5jbHVzdGVyUHJvcGVydGllcztpZighbnx8IXIpcmV0dXJuIHI7Zm9yKHZhciBpPXt9LGE9e30sbz17YWNjdW11bGF0ZWQ6bnVsbCx6b29tOjB9LHM9e3Byb3BlcnRpZXM6bnVsbH0sbD1PYmplY3Qua2V5cyhuKSxjPTAsdT1sO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPW5bZl0scD1oWzBdLGQ9dC5jcmVhdGVFeHByZXNzaW9uKGhbMV0pLGc9dC5jcmVhdGVFeHByZXNzaW9uKCJzdHJpbmciPT10eXBlb2YgcD9bcCxbImFjY3VtdWxhdGVkIl0sWyJnZXQiLGZdXTpwKTtpW2ZdPWQudmFsdWUsYVtmXT1nLnZhbHVlfXJldHVybiByLm1hcD1mdW5jdGlvbih0KXtzLnByb3BlcnRpZXM9dDtmb3IodmFyIGU9e30scj0wLG49bDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBhPW5bcl07ZVthXT1pW2FdLmV2YWx1YXRlKG8scyl9cmV0dXJuIGV9LHIucmVkdWNlPWZ1bmN0aW9uKHQsZSl7cy5wcm9wZXJ0aWVzPWU7Zm9yKHZhciByPTAsbj1sO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtvLmFjY3VtdWxhdGVkPXRbaV0sdFtpXT1hW2ldLmV2YWx1YXRlKG8scyl9fSxyfShuKSkubG9hZChvLmZlYXR1cmVzKTpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgdnQodCxlKX0obyxuLmdlb2pzb25WdE9wdGlvbnMpfWNhdGNoKGEpe3JldHVybiByKGEpfWUubG9hZGVkPXt9O3ZhciBzPXt9O2lmKGkpe3ZhciBsPWkuZmluaXNoKCk7bCYmKHMucmVzb3VyY2VUaW1pbmc9e30scy5yZXNvdXJjZVRpbWluZ1tuLnNvdXJjZV09SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsKSkpfXIobnVsbCxzKX0pKX19LHIucHJvdG90eXBlLmNvYWxlc2NlPWZ1bmN0aW9uKCl7IkNvYWxlc2NpbmciPT09dGhpcy5fc3RhdGU/dGhpcy5fc3RhdGU9IklkbGUiOiJOZWVkc0xvYWREYXRhIj09PXRoaXMuX3N0YXRlJiYodGhpcy5fc3RhdGU9IkNvYWxlc2NpbmciLHRoaXMuX2xvYWREYXRhKCkpfSxyLnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5sb2FkZWQ7cmV0dXJuIG4mJm5bdC51aWRdP2UucHJvdG90eXBlLnJlbG9hZFRpbGUuY2FsbCh0aGlzLHQscik6dGhpcy5sb2FkVGlsZSh0LHIpfSxyLnByb3RvdHlwZS5sb2FkR2VvSlNPTj1mdW5jdGlvbihlLHIpe2lmKGUucmVxdWVzdCl0LmdldEpTT04oZS5yZXF1ZXN0LHIpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBlLmRhdGEpcmV0dXJuIHIobmV3IEVycm9yKCJJbnB1dCBkYXRhIGdpdmVuIHRvICciK2Uuc291cmNlKyInIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKTt0cnl7cmV0dXJuIHIobnVsbCxKU09OLnBhcnNlKGUuZGF0YSkpfWNhdGNoKHQpe3JldHVybiByKG5ldyBFcnJvcigiSW5wdXQgZGF0YSBnaXZlbiB0byAnIitlLnNvdXJjZSsiJyBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKSl9fX0sci5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksZSgpfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbT1mdW5jdGlvbih0LGUpe3RyeXtlKG51bGwsdGhpcy5fZ2VvSlNPTkluZGV4LmdldENsdXN0ZXJFeHBhbnNpb25ab29tKHQuY2x1c3RlcklkKSl9Y2F0Y2godCl7ZSh0KX19LHIucHJvdG90eXBlLmdldENsdXN0ZXJDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3RyeXtlKG51bGwsdGhpcy5fZ2VvSlNPTkluZGV4LmdldENoaWxkcmVuKHQuY2x1c3RlcklkKSl9Y2F0Y2godCl7ZSh0KX19LHIucHJvdG90eXBlLmdldENsdXN0ZXJMZWF2ZXM9ZnVuY3Rpb24odCxlKXt0cnl7ZShudWxsLHRoaXMuX2dlb0pTT05JbmRleC5nZXRMZWF2ZXModC5jbHVzdGVySWQsdC5saW1pdCx0Lm9mZnNldCkpfWNhdGNoKHQpe2UodCl9fSxyfShsKSxfdD1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuc2VsZj1lLHRoaXMuYWN0b3I9bmV3IHQuQWN0b3IoZSx0aGlzKSx0aGlzLmxheWVySW5kZXhlcz17fSx0aGlzLmF2YWlsYWJsZUltYWdlcz17fSx0aGlzLndvcmtlclNvdXJjZVR5cGVzPXt2ZWN0b3I6bCxnZW9qc29uOmJ0fSx0aGlzLndvcmtlclNvdXJjZXM9e30sdGhpcy5kZW1Xb3JrZXJTb3VyY2VzPXt9LHRoaXMuc2VsZi5yZWdpc3RlcldvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUpe2lmKHIud29ya2VyU291cmNlVHlwZXNbdF0pdGhyb3cgbmV3IEVycm9yKCdXb3JrZXIgc291cmNlIHdpdGggbmFtZSAiJyt0KyciIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtyLndvcmtlclNvdXJjZVR5cGVzW3RdPWV9LHRoaXMuc2VsZi5yZWdpc3RlclJUTFRleHRQbHVnaW49ZnVuY3Rpb24oZSl7aWYodC5wbHVnaW4uaXNQYXJzZWQoKSl0aHJvdyBuZXcgRXJyb3IoIlJUTCB0ZXh0IHBsdWdpbiBhbHJlYWR5IHJlZ2lzdGVyZWQuIik7dC5wbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nPWUuYXBwbHlBcmFiaWNTaGFwaW5nLHQucGx1Z2luLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dD1lLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCx0LnBsdWdpbi5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ9ZS5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHR9fTtyZXR1cm4gX3QucHJvdG90eXBlLnNldFJlZmVycmVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWZlcnJlcj1lfSxfdC5wcm90b3R5cGUuc2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gdGhpcy5hdmFpbGFibGVJbWFnZXNbdF09ZSx0aGlzLndvcmtlclNvdXJjZXNbdF0pe3ZhciBpPXRoaXMud29ya2VyU291cmNlc1t0XVtuXTtmb3IodmFyIGEgaW4gaSlpW2FdLmF2YWlsYWJsZUltYWdlcz1lfXIoKX0sX3QucHJvdG90eXBlLnNldExheWVycz1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRMYXllckluZGV4KHQpLnJlcGxhY2UoZSkscigpfSxfdC5wcm90b3R5cGUudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldExheWVySW5kZXgodCkudXBkYXRlKGUubGF5ZXJzLGUucmVtb3ZlZElkcykscigpfSxfdC5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5sb2FkVGlsZShlLHIpfSxfdC5wcm90b3R5cGUubG9hZERFTVRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0REVNV29ya2VyU291cmNlKHQsZS5zb3VyY2UpLmxvYWRUaWxlKGUscil9LF90LnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkucmVsb2FkVGlsZShlLHIpfSxfdC5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkuYWJvcnRUaWxlKGUscil9LF90LnByb3RvdHlwZS5yZW1vdmVUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkucmVtb3ZlVGlsZShlLHIpfSxfdC5wcm90b3R5cGUucmVtb3ZlREVNVGlsZT1mdW5jdGlvbih0LGUpe3RoaXMuZ2V0REVNV29ya2VyU291cmNlKHQsZS5zb3VyY2UpLnJlbW92ZVRpbGUoZSl9LF90LnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMud29ya2VyU291cmNlc1t0XSYmdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV0mJnRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXSl7dmFyIG49dGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdO2RlbGV0ZSB0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV0sdm9pZCAwIT09bi5yZW1vdmVTb3VyY2U/bi5yZW1vdmVTb3VyY2UoZSxyKTpyKCl9fSxfdC5wcm90b3R5cGUubG9hZFdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUscil7dHJ5e3RoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKGUudXJsKSxyKCl9Y2F0Y2godCl7cih0LnRvU3RyaW5nKCkpfX0sX3QucHJvdG90eXBlLnN5bmNSVExQbHVnaW5TdGF0ZT1mdW5jdGlvbihlLHIsbil7dHJ5e3QucGx1Z2luLnNldFN0YXRlKHIpO3ZhciBpPXQucGx1Z2luLmdldFBsdWdpblVSTCgpO2lmKHQucGx1Z2luLmlzTG9hZGVkKCkmJiF0LnBsdWdpbi5pc1BhcnNlZCgpJiZudWxsIT1pKXt0aGlzLnNlbGYuaW1wb3J0U2NyaXB0cyhpKTt2YXIgYT10LnBsdWdpbi5pc1BhcnNlZCgpO24oYT92b2lkIDA6bmV3IEVycm9yKCJSVEwgVGV4dCBQbHVnaW4gZmFpbGVkIHRvIGltcG9ydCBzY3JpcHRzIGZyb20gIitpKSxhKX19Y2F0Y2godCl7bih0LnRvU3RyaW5nKCkpfX0sX3QucHJvdG90eXBlLmdldEF2YWlsYWJsZUltYWdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmF2YWlsYWJsZUltYWdlc1t0XTtyZXR1cm4gZXx8KGU9W10pLGV9LF90LnByb3RvdHlwZS5nZXRMYXllckluZGV4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGF5ZXJJbmRleGVzW3RdO3JldHVybiBlfHwoZT10aGlzLmxheWVySW5kZXhlc1t0XT1uZXcgbiksZX0sX3QucHJvdG90eXBlLmdldFdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcztyZXR1cm4gdGhpcy53b3JrZXJTb3VyY2VzW3RdfHwodGhpcy53b3JrZXJTb3VyY2VzW3RdPXt9KSx0aGlzLndvcmtlclNvdXJjZXNbdF1bZV18fCh0aGlzLndvcmtlclNvdXJjZXNbdF1bZV09e30pLHRoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXXx8KHRoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXT1uZXcgdGhpcy53b3JrZXJTb3VyY2VUeXBlc1tlXSh7c2VuZDpmdW5jdGlvbihlLHIsaSl7bi5hY3Rvci5zZW5kKGUscixpLHQpfX0sdGhpcy5nZXRMYXllckluZGV4KHQpLHRoaXMuZ2V0QXZhaWxhYmxlSW1hZ2VzKHQpKSksdGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdW3JdfSxfdC5wcm90b3R5cGUuZ2V0REVNV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVtV29ya2VyU291cmNlc1t0XXx8KHRoaXMuZGVtV29ya2VyU291cmNlc1t0XT17fSksdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdfHwodGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdPW5ldyB1KSx0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV19LF90LnByb3RvdHlwZS5lbmZvcmNlQ2FjaGVTaXplTGltaXQ9ZnVuY3Rpb24oZSxyKXt0LmVuZm9yY2VDYWNoZVNpemVMaW1pdChyKX0sInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmdm9pZCAwIT09dC53aW5kb3cmJnQud2luZG93IGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJih0LndpbmRvdy53b3JrZXI9bmV3IF90KHQud2luZG93KSksX3R9KSksbigwLChmdW5jdGlvbih0KXt2YXIgZT10LmNyZWF0ZUNvbW1vbmpzTW9kdWxlKChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiFyKHQpfWZ1bmN0aW9uIHIodCl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQ/Im5vdCBhIGJyb3dzZXIiOkFycmF5LnByb3RvdHlwZSYmQXJyYXkucHJvdG90eXBlLmV2ZXJ5JiZBcnJheS5wcm90b3R5cGUuZmlsdGVyJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaCYmQXJyYXkucHJvdG90eXBlLmluZGV4T2YmJkFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiYmQXJyYXkucHJvdG90eXBlLm1hcCYmQXJyYXkucHJvdG90eXBlLnNvbWUmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2UmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCYmQXJyYXkuaXNBcnJheT9GdW5jdGlvbi5wcm90b3R5cGUmJkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kP09iamVjdC5rZXlzJiZPYmplY3QuY3JlYXRlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiZPYmplY3QuaXNTZWFsZWQmJk9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRXh0ZW5zaWJsZSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciYmT2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydGllcyYmT2JqZWN0LnNlYWwmJk9iamVjdC5mcmVlemUmJk9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucz8iSlNPTiJpbiB3aW5kb3cmJiJwYXJzZSJpbiBKU09OJiYic3RyaW5naWZ5ImluIEpTT04/ZnVuY3Rpb24oKXtpZighKCJXb3JrZXIiaW4gd2luZG93JiYiQmxvYiJpbiB3aW5kb3cmJiJVUkwiaW4gd2luZG93KSlyZXR1cm4hMTt2YXIgdCxlLHI9bmV3IEJsb2IoWyIiXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pLG49VVJMLmNyZWF0ZU9iamVjdFVSTChyKTt0cnl7ZT1uZXcgV29ya2VyKG4pLHQ9ITB9Y2F0Y2goZSl7dD0hMX1yZXR1cm4gZSYmZS50ZXJtaW5hdGUoKSxVUkwucmV2b2tlT2JqZWN0VVJMKG4pLHR9KCk/IlVpbnQ4Q2xhbXBlZEFycmF5ImluIHdpbmRvdz9BcnJheUJ1ZmZlci5pc1ZpZXc/ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTt0LndpZHRoPXQuaGVpZ2h0PTE7dmFyIGU9dC5nZXRDb250ZXh0KCIyZCIpO2lmKCFlKXJldHVybiExO3ZhciByPWUuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpO3JldHVybiByJiZyLndpZHRoPT09dC53aWR0aH0oKT8odm9pZCAwPT09bltyPXQmJnQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF0mJihuW3JdPWZ1bmN0aW9uKHQpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG49T2JqZWN0LmNyZWF0ZShlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMpO3JldHVybiBuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9dCxyLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0P3IucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoIndlYmdsIixuKXx8ci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixuKTpyLnN1cHBvcnRzQ29udGV4dD9yLnN1cHBvcnRzQ29udGV4dCgid2ViZ2wiLG4pfHxyLnN1cHBvcnRzQ29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixuKTpyLmdldENvbnRleHQoIndlYmdsIixuKXx8ci5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLG4pfSh0KTtpZighcilyZXR1cm4hMTt2YXIgbj1yLmNyZWF0ZVNoYWRlcihyLlZFUlRFWF9TSEFERVIpO3JldHVybiEoIW58fHIuaXNDb250ZXh0TG9zdCgpKSYmKHIuc2hhZGVyU291cmNlKG4sInZvaWQgbWFpbigpIHt9Iiksci5jb21waWxlU2hhZGVyKG4pLCEwPT09ci5nZXRTaGFkZXJQYXJhbWV0ZXIobixyLkNPTVBJTEVfU1RBVFVTKSl9KHIpKSxuW3JdP3ZvaWQgMDoiaW5zdWZmaWNpZW50IFdlYkdMIHN1cHBvcnQiKToiaW5zdWZmaWNpZW50IENhbnZhcy9nZXRJbWFnZURhdGEgc3VwcG9ydCI6Imluc3VmZmljaWVudCBBcnJheUJ1ZmZlciBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IFVpbnQ4Q2xhbXBlZEFycmF5IHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgd29ya2VyIHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgSlNPTiBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IE9iamVjdCBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IEZ1bmN0aW9uIHN1cHBvcnQiOiJpbnN1ZmZpY2VudCBBcnJheSBzdXBwb3J0Ijt2YXIgcn10LmV4cG9ydHM/dC5leHBvcnRzPWU6d2luZG93JiYod2luZG93Lm1hcGJveGdsPXdpbmRvdy5tYXBib3hnbHx8e30sd2luZG93Lm1hcGJveGdsLnN1cHBvcnRlZD1lLHdpbmRvdy5tYXBib3hnbC5ub3RTdXBwb3J0ZWRSZWFzb249cik7dmFyIG49e307ZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzPXthbnRpYWxpYXM6ITEsYWxwaGE6ITAsc3RlbmNpbDohMCxkZXB0aDohMH19KSkscj17Y3JlYXRlOmZ1bmN0aW9uKGUscixuKXt2YXIgaT10LndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiB2b2lkIDAhPT1yJiYoaS5jbGFzc05hbWU9ciksbiYmbi5hcHBlbmRDaGlsZChpKSxpfSxjcmVhdGVOUzpmdW5jdGlvbihlLHIpe3JldHVybiB0LndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSxyKX19LG49dC53aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlO2Z1bmN0aW9uIGkodCl7aWYoIW4pcmV0dXJuIHRbMF07Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXWluIG4pcmV0dXJuIHRbZV07cmV0dXJuIHRbMF19dmFyIGEsbz1pKFsidXNlclNlbGVjdCIsIk1velVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwibXNVc2VyU2VsZWN0Il0pO3IuZGlzYWJsZURyYWc9ZnVuY3Rpb24oKXtuJiZvJiYoYT1uW29dLG5bb109Im5vbmUiKX0sci5lbmFibGVEcmFnPWZ1bmN0aW9uKCl7biYmbyYmKG5bb109YSl9O3ZhciBzPWkoWyJ0cmFuc2Zvcm0iLCJXZWJraXRUcmFuc2Zvcm0iXSk7ci5zZXRUcmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt0LnN0eWxlW3NdPWV9O3ZhciBsPSExO3RyeXt2YXIgYz1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtsPSEwfX0pO3Qud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGMsYyksdC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsYyxjKX1jYXRjaCh0KXtsPSExfXIuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksdC5hZGRFdmVudExpc3RlbmVyKGUsciwicGFzc2l2ZSJpbiBuJiZsP246bi5jYXB0dXJlKX0sci5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLCJwYXNzaXZlImluIG4mJmw/bjpuLmNhcHR1cmUpfTt2YXIgdT1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdSwhMCl9O2Z1bmN0aW9uIGYodCl7dmFyIGU9dC51c2VySW1hZ2U7cmV0dXJuISEoZSYmZS5yZW5kZXImJmUucmVuZGVyKCkpJiYodC5kYXRhLnJlcGxhY2UobmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmJ1ZmZlcikpLCEwKX1yLnN1cHByZXNzQ2xpY2s9ZnVuY3Rpb24oKXt0LndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdSwhMCksdC53aW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdSwhMCl9KSwwKX0sci5tb3VzZVBvcz1mdW5jdGlvbihlLHIpe3ZhciBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG5ldyB0LlBvaW50KHIuY2xpZW50WC1uLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1uLnRvcC1lLmNsaWVudFRvcCl9LHIudG91Y2hQb3M9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPVtdLGE9MDthPHIubGVuZ3RoO2ErKylpLnB1c2gobmV3IHQuUG9pbnQoclthXS5jbGllbnRYLW4ubGVmdC1lLmNsaWVudExlZnQsclthXS5jbGllbnRZLW4udG9wLWUuY2xpZW50VG9wKSk7cmV0dXJuIGl9LHIubW91c2VCdXR0b249ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXQud2luZG93Lkluc3RhbGxUcmlnZ2VyJiYyPT09ZS5idXR0b24mJmUuY3RybEtleSYmdC53aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiTUFDIik+PTA/MDplLmJ1dHRvbn0sci5yZW1vdmU9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9O3ZhciBoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtlLmNhbGwodGhpcyksdGhpcy5pbWFnZXM9e30sdGhpcy51cGRhdGVkSW1hZ2VzPXt9LHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lPXt9LHRoaXMubG9hZGVkPSExLHRoaXMucmVxdWVzdG9ycz1bXSx0aGlzLnBhdHRlcm5zPXt9LHRoaXMuYXRsYXNJbWFnZT1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLmRpcnR5PSEwfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksKHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmlzTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGVkfSxyLnByb3RvdHlwZS5zZXRMb2FkZWQ9ZnVuY3Rpb24odCl7aWYodGhpcy5sb2FkZWQhPT10JiYodGhpcy5sb2FkZWQ9dCx0KSl7Zm9yKHZhciBlPTAscj10aGlzLnJlcXVlc3RvcnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO3RoaXMuX25vdGlmeShuLmlkcyxuLmNhbGxiYWNrKX10aGlzLnJlcXVlc3RvcnM9W119fSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZXNbdF19LHIucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsaWRhdGUodCxlKSYmKHRoaXMuaW1hZ2VzW3RdPWUpfSxyLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj0hMDtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHJldGNoKHIuc3RyZXRjaFgsci5kYXRhJiZyLmRhdGEud2lkdGgpfHwodGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdJbWFnZSAiJytlKyciIGhhcyBpbnZhbGlkICJzdHJldGNoWCIgdmFsdWUnKSkpLG49ITEpLHRoaXMuX3ZhbGlkYXRlU3RyZXRjaChyLnN0cmV0Y2hZLHIuZGF0YSYmci5kYXRhLmhlaWdodCl8fCh0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0ltYWdlICInK2UrJyIgaGFzIGludmFsaWQgInN0cmV0Y2hZIiB2YWx1ZScpKSksbj0hMSksdGhpcy5fdmFsaWRhdGVDb250ZW50KHIuY29udGVudCxyKXx8KHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignSW1hZ2UgIicrZSsnIiBoYXMgaW52YWxpZCAiY29udGVudCIgdmFsdWUnKSkpLG49ITEpLG59LHIucHJvdG90eXBlLl92YWxpZGF0ZVN0cmV0Y2g9ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4hMDtmb3IodmFyIHI9MCxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtpZihhWzBdPHJ8fGFbMV08YVswXXx8ZTxhWzFdKXJldHVybiExO3I9YVsxXX1yZXR1cm4hMH0sci5wcm90b3R5cGUuX3ZhbGlkYXRlQ29udGVudD1mdW5jdGlvbih0LGUpe3JldHVybiEodCYmKDQhPT10Lmxlbmd0aHx8dFswXTwwfHxlLmRhdGEud2lkdGg8dFswXXx8dFsxXTwwfHxlLmRhdGEuaGVpZ2h0PHRbMV18fHRbMl08MHx8ZS5kYXRhLndpZHRoPHRbMl18fHRbM108MHx8ZS5kYXRhLmhlaWdodDx0WzNdfHx0WzJdPHRbMF18fHRbM108dFsxXSkpfSxyLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbih0LGUpe2UudmVyc2lvbj10aGlzLmltYWdlc1t0XS52ZXJzaW9uKzEsdGhpcy5pbWFnZXNbdF09ZSx0aGlzLnVwZGF0ZWRJbWFnZXNbdF09ITB9LHIucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1hZ2VzW3RdO2RlbGV0ZSB0aGlzLmltYWdlc1t0XSxkZWxldGUgdGhpcy5wYXR0ZXJuc1t0XSxlLnVzZXJJbWFnZSYmZS51c2VySW1hZ2Uub25SZW1vdmUmJmUudXNlckltYWdlLm9uUmVtb3ZlKCl9LHIucHJvdG90eXBlLmxpc3RJbWFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5pbWFnZXMpfSxyLnByb3RvdHlwZS5nZXRJbWFnZXM9ZnVuY3Rpb24odCxlKXt2YXIgcj0hMDtpZighdGhpcy5pc0xvYWRlZCgpKWZvcih2YXIgbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpdGhpcy5pbWFnZXNbaVtuXV18fChyPSExKTt0aGlzLmlzTG9hZGVkKCl8fHI/dGhpcy5fbm90aWZ5KHQsZSk6dGhpcy5yZXF1ZXN0b3JzLnB1c2goe2lkczp0LGNhbGxiYWNrOmV9KX0sci5wcm90b3R5cGUuX25vdGlmeT1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj17fSxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTt0aGlzLmltYWdlc1tvXXx8dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJzdHlsZWltYWdlbWlzc2luZyIse2lkOm99KSk7dmFyIHM9dGhpcy5pbWFnZXNbb107cz9uW29dPXtkYXRhOnMuZGF0YS5jbG9uZSgpLHBpeGVsUmF0aW86cy5waXhlbFJhdGlvLHNkZjpzLnNkZix2ZXJzaW9uOnMudmVyc2lvbixzdHJldGNoWDpzLnN0cmV0Y2hYLHN0cmV0Y2hZOnMuc3RyZXRjaFksY29udGVudDpzLmNvbnRlbnQsaGFzUmVuZGVyQ2FsbGJhY2s6Qm9vbGVhbihzLnVzZXJJbWFnZSYmcy51c2VySW1hZ2UucmVuZGVyKX06dC53YXJuT25jZSgnSW1hZ2UgIicrbysnIiBjb3VsZCBub3QgYmUgbG9hZGVkLiBQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIGFkZGVkIHRoZSBpbWFnZSB3aXRoIG1hcC5hZGRJbWFnZSgpIG9yIGEgInNwcml0ZSIgcHJvcGVydHkgaW4geW91ciBzdHlsZS4gWW91IGNhbiBwcm92aWRlIG1pc3NpbmcgaW1hZ2VzIGJ5IGxpc3RlbmluZyBmb3IgdGhlICJzdHlsZWltYWdlbWlzc2luZyIgbWFwIGV2ZW50LicpfXIobnVsbCxuKX0sci5wcm90b3R5cGUuZ2V0UGl4ZWxTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hdGxhc0ltYWdlO3JldHVybnt3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19LHIucHJvdG90eXBlLmdldFBhdHRlcm49ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5wYXR0ZXJuc1tlXSxuPXRoaXMuZ2V0SW1hZ2UoZSk7aWYoIW4pcmV0dXJuIG51bGw7aWYociYmci5wb3NpdGlvbi52ZXJzaW9uPT09bi52ZXJzaW9uKXJldHVybiByLnBvc2l0aW9uO2lmKHIpci5wb3NpdGlvbi52ZXJzaW9uPW4udmVyc2lvbjtlbHNle3ZhciBpPXt3Om4uZGF0YS53aWR0aCsyLGg6bi5kYXRhLmhlaWdodCsyLHg6MCx5OjB9LGE9bmV3IHQuSW1hZ2VQb3NpdGlvbihpLG4pO3RoaXMucGF0dGVybnNbZV09e2JpbjppLHBvc2l0aW9uOmF9fXJldHVybiB0aGlzLl91cGRhdGVQYXR0ZXJuQXRsYXMoKSx0aGlzLnBhdHRlcm5zW2VdLnBvc2l0aW9ufSxyLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUpe3ZhciByPWUuZ2w7dGhpcy5hdGxhc1RleHR1cmU/dGhpcy5kaXJ0eSYmKHRoaXMuYXRsYXNUZXh0dXJlLnVwZGF0ZSh0aGlzLmF0bGFzSW1hZ2UpLHRoaXMuZGlydHk9ITEpOnRoaXMuYXRsYXNUZXh0dXJlPW5ldyB0LlRleHR1cmUoZSx0aGlzLmF0bGFzSW1hZ2Usci5SR0JBKSx0aGlzLmF0bGFzVGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSl9LHIucHJvdG90eXBlLl91cGRhdGVQYXR0ZXJuQXRsYXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdGhpcy5wYXR0ZXJucyllLnB1c2godGhpcy5wYXR0ZXJuc1tyXS5iaW4pO3ZhciBuPXQucG90cGFjayhlKSxpPW4udyxhPW4uaCxvPXRoaXMuYXRsYXNJbWFnZTtmb3IodmFyIHMgaW4gby5yZXNpemUoe3dpZHRoOml8fDEsaGVpZ2h0OmF8fDF9KSx0aGlzLnBhdHRlcm5zKXt2YXIgbD10aGlzLnBhdHRlcm5zW3NdLmJpbixjPWwueCsxLHU9bC55KzEsZj10aGlzLmltYWdlc1tzXS5kYXRhLGg9Zi53aWR0aCxwPWYuaGVpZ2h0O3QuUkdCQUltYWdlLmNvcHkoZixvLHt4OjAseTowfSx7eDpjLHk6dX0se3dpZHRoOmgsaGVpZ2h0OnB9KSx0LlJHQkFJbWFnZS5jb3B5KGYsbyx7eDowLHk6cC0xfSx7eDpjLHk6dS0xfSx7d2lkdGg6aCxoZWlnaHQ6MX0pLHQuUkdCQUltYWdlLmNvcHkoZixvLHt4OjAseTowfSx7eDpjLHk6dStwfSx7d2lkdGg6aCxoZWlnaHQ6MX0pLHQuUkdCQUltYWdlLmNvcHkoZixvLHt4OmgtMSx5OjB9LHt4OmMtMSx5OnV9LHt3aWR0aDoxLGhlaWdodDpwfSksdC5SR0JBSW1hZ2UuY29weShmLG8se3g6MCx5OjB9LHt4OmMraCx5OnV9LHt3aWR0aDoxLGhlaWdodDpwfSl9dGhpcy5kaXJ0eT0hMH0sci5wcm90b3R5cGUuYmVnaW5GcmFtZT1mdW5jdGlvbigpe3RoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lPXt9fSxyLnByb3RvdHlwZS5kaXNwYXRjaFJlbmRlckNhbGxiYWNrcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKCF0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZVtuXSl7dGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWVbbl09ITA7dmFyIGk9dGhpcy5pbWFnZXNbbl07ZihpKSYmdGhpcy51cGRhdGVJbWFnZShuLGkpfX19LHJ9KHQuRXZlbnRlZCkscD1tLGQ9bSxnPTFlMjA7ZnVuY3Rpb24gbSh0LGUscixuLGksYSl7dGhpcy5mb250U2l6ZT10fHwyNCx0aGlzLmJ1ZmZlcj12b2lkIDA9PT1lPzM6ZSx0aGlzLmN1dG9mZj1ufHwuMjUsdGhpcy5mb250RmFtaWx5PWl8fCJzYW5zLXNlcmlmIix0aGlzLmZvbnRXZWlnaHQ9YXx8Im5vcm1hbCIsdGhpcy5yYWRpdXM9cnx8ODt2YXIgbz10aGlzLnNpemU9dGhpcy5mb250U2l6ZSsyKnRoaXMuYnVmZmVyO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD1vLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksdGhpcy5jdHguZm9udD10aGlzLmZvbnRXZWlnaHQrIiAiK3RoaXMuZm9udFNpemUrInB4ICIrdGhpcy5mb250RmFtaWx5LHRoaXMuY3R4LnRleHRCYXNlbGluZT0ibWlkZGxlIix0aGlzLmN0eC5maWxsU3R5bGU9ImJsYWNrIix0aGlzLmdyaWRPdXRlcj1uZXcgRmxvYXQ2NEFycmF5KG8qbyksdGhpcy5ncmlkSW5uZXI9bmV3IEZsb2F0NjRBcnJheShvKm8pLHRoaXMuZj1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuZD1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuej1uZXcgRmxvYXQ2NEFycmF5KG8rMSksdGhpcy52PW5ldyBJbnQxNkFycmF5KG8pLHRoaXMubWlkZGxlPU1hdGgucm91bmQoby8yKihuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkdlY2tvLyIpPj0wPzEuMjoxKSl9ZnVuY3Rpb24gdih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MDtzPGU7cysrKXtmb3IodmFyIGw9MDtsPHI7bCsrKW5bbF09dFtsKmUrc107Zm9yKHkobixpLGEsbyxyKSxsPTA7bDxyO2wrKyl0W2wqZStzXT1pW2xdfWZvcihsPTA7bDxyO2wrKyl7Zm9yKHM9MDtzPGU7cysrKW5bc109dFtsKmUrc107Zm9yKHkobixpLGEsbyxlKSxzPTA7czxlO3MrKyl0W2wqZStzXT1NYXRoLnNxcnQoaVtzXSl9fWZ1bmN0aW9uIHkodCxlLHIsbixpKXtyWzBdPTAsblswXT0tZyxuWzFdPStnO2Zvcih2YXIgYT0xLG89MDthPGk7YSsrKXtmb3IodmFyIHM9KHRbYV0rYSphLSh0W3Jbb11dK3Jbb10qcltvXSkpLygyKmEtMipyW29dKTtzPD1uW29dOylvLS0scz0odFthXSthKmEtKHRbcltvXV0rcltvXSpyW29dKSkvKDIqYS0yKnJbb10pO3JbKytvXT1hLG5bb109cyxuW28rMV09K2d9Zm9yKGE9MCxvPTA7YTxpO2ErKyl7Zm9yKDtuW28rMV08YTspbysrO2VbYV09KGEtcltvXSkqKGEtcltvXSkrdFtyW29dXX19bS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0KXt0aGlzLmN0eC5jbGVhclJlY3QoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHRoaXMuY3R4LmZpbGxUZXh0KHQsdGhpcy5idWZmZXIsdGhpcy5taWRkbGUpO2Zvcih2YXIgZT10aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRoaXMuc2l6ZSp0aGlzLnNpemUpLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgaT1lLmRhdGFbNCpuKzNdLzI1NTt0aGlzLmdyaWRPdXRlcltuXT0xPT09aT8wOjA9PT1pP2c6TWF0aC5wb3coTWF0aC5tYXgoMCwuNS1pKSwyKSx0aGlzLmdyaWRJbm5lcltuXT0xPT09aT9nOjA9PT1pPzA6TWF0aC5wb3coTWF0aC5tYXgoMCxpLS41KSwyKX1mb3Iodih0aGlzLmdyaWRPdXRlcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksdih0aGlzLmdyaWRJbm5lcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksbj0wO248dGhpcy5zaXplKnRoaXMuc2l6ZTtuKyspcltuXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI1NS0yNTUqKCh0aGlzLmdyaWRPdXRlcltuXS10aGlzLmdyaWRJbm5lcltuXSkvdGhpcy5yYWRpdXMrdGhpcy5jdXRvZmYpKSkpO3JldHVybiByfSxwLmRlZmF1bHQ9ZDt2YXIgeD1mdW5jdGlvbih0LGUpe3RoaXMucmVxdWVzdE1hbmFnZXI9dCx0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1lLHRoaXMuZW50cmllcz17fX07eC5wcm90b3R5cGUuc2V0VVJMPWZ1bmN0aW9uKHQpe3RoaXMudXJsPXR9LHgucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1bXTtmb3IodmFyIGEgaW4gZSlmb3IodmFyIG89MCxzPWVbYV07bzxzLmxlbmd0aDtvKz0xKWkucHVzaCh7c3RhY2s6YSxpZDpzW29dfSk7dC5hc3luY0FsbChpLChmdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhY2ssaT10LmlkLGE9bi5lbnRyaWVzW3JdO2F8fChhPW4uZW50cmllc1tyXT17Z2x5cGhzOnt9LHJlcXVlc3RzOnt9LHJhbmdlczp7fX0pO3ZhciBvPWEuZ2x5cGhzW2ldO2lmKHZvaWQgMD09PW8pe2lmKG89bi5fdGlueVNERihhLHIsaSkpcmV0dXJuIGEuZ2x5cGhzW2ldPW8sdm9pZCBlKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSk7dmFyIHM9TWF0aC5mbG9vcihpLzI1Nik7aWYoMjU2KnM+NjU1MzUpZShuZXcgRXJyb3IoImdseXBocyA+IDY1NTM1IG5vdCBzdXBwb3J0ZWQiKSk7ZWxzZSBpZihhLnJhbmdlc1tzXSllKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSk7ZWxzZXt2YXIgbD1hLnJlcXVlc3RzW3NdO2x8fChsPWEucmVxdWVzdHNbc109W10seC5sb2FkR2x5cGhSYW5nZShyLHMsbi51cmwsbi5yZXF1ZXN0TWFuYWdlciwoZnVuY3Rpb24odCxlKXtpZihlKXtmb3IodmFyIHIgaW4gZSluLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoKCtyKXx8KGEuZ2x5cGhzWytyXT1lWytyXSk7YS5yYW5nZXNbc109ITB9Zm9yKHZhciBpPTAsbz1sO2k8by5sZW5ndGg7aSs9MSkoMCxvW2ldKSh0LGUpO2RlbGV0ZSBhLnJlcXVlc3RzW3NdfSkpKSxsLnB1c2goKGZ1bmN0aW9uKHQsbil7dD9lKHQpOm4mJmUobnVsbCx7c3RhY2s6cixpZDppLGdseXBoOm5baV18fG51bGx9KX0pKX19ZWxzZSBlKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSl9KSwoZnVuY3Rpb24odCxlKXtpZih0KXIodCk7ZWxzZSBpZihlKXtmb3IodmFyIG49e30saT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vLnN0YWNrLGw9by5pZCxjPW8uZ2x5cGg7KG5bc118fChuW3NdPXt9KSlbbF09YyYme2lkOmMuaWQsYml0bWFwOmMuYml0bWFwLmNsb25lKCksbWV0cmljczpjLm1ldHJpY3N9fXIobnVsbCxuKX19KSl9LHgucHJvdG90eXBlLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoPWZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkmJih0LmlzQ2hhclsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyJdKGUpfHx0LmlzQ2hhclsiSGFuZ3VsIFN5bGxhYmxlcyJdKGUpfHx0LmlzQ2hhci5IaXJhZ2FuYShlKXx8dC5pc0NoYXIuS2F0YWthbmEoZSkpfSx4LnByb3RvdHlwZS5fdGlueVNERj1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7aWYoaSYmdGhpcy5fZG9lc0NoYXJTdXBwb3J0TG9jYWxHbHlwaChuKSl7dmFyIGE9ZS50aW55U0RGO2lmKCFhKXt2YXIgbz0iNDAwIjsvYm9sZC9pLnRlc3Qocik/bz0iOTAwIjovbWVkaXVtL2kudGVzdChyKT9vPSI1MDAiOi9saWdodC9pLnRlc3QocikmJihvPSIyMDAiKSxhPWUudGlueVNERj1uZXcgeC5UaW55U0RGKDI0LDMsOCwuMjUsaSxvKX1yZXR1cm57aWQ6bixiaXRtYXA6bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6MzAsaGVpZ2h0OjMwfSxhLmRyYXcoU3RyaW5nLmZyb21DaGFyQ29kZShuKSkpLG1ldHJpY3M6e3dpZHRoOjI0LGhlaWdodDoyNCxsZWZ0OjAsdG9wOi04LGFkdmFuY2U6MjR9fX19LHgubG9hZEdseXBoUmFuZ2U9ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbz0yNTYqcixzPW8rMjU1LGw9aS50cmFuc2Zvcm1SZXF1ZXN0KGkubm9ybWFsaXplR2x5cGhzVVJMKG4pLnJlcGxhY2UoIntmb250c3RhY2t9IixlKS5yZXBsYWNlKCJ7cmFuZ2V9IixvKyItIitzKSx0LlJlc291cmNlVHlwZS5HbHlwaHMpO3QuZ2V0QXJyYXlCdWZmZXIobCwoZnVuY3Rpb24oZSxyKXtpZihlKWEoZSk7ZWxzZSBpZihyKXtmb3IodmFyIG49e30saT0wLG89dC5wYXJzZUdseXBoUEJGKHIpO2k8by5sZW5ndGg7aSs9MSl7dmFyIHM9b1tpXTtuW3MuaWRdPXN9YShudWxsLG4pfX0pKX0seC5UaW55U0RGPXA7dmFyIGI9ZnVuY3Rpb24oKXt0aGlzLnNwZWNpZmljYXRpb249dC5zdHlsZVNwZWMubGlnaHQucG9zaXRpb259O2IucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5zcGhlcmljYWxUb0NhcnRlc2lhbihlLmV4cHJlc3Npb24uZXZhbHVhdGUocikpfSxiLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlLHIsbil7cmV0dXJue3g6dC5udW1iZXIoZS54LHIueCxuKSx5OnQubnVtYmVyKGUueSxyLnksbiksejp0Lm51bWJlcihlLnosci56LG4pfX07dmFyIF89bmV3IHQuUHJvcGVydGllcyh7YW5jaG9yOm5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuc3R5bGVTcGVjLmxpZ2h0LmFuY2hvcikscG9zaXRpb246bmV3IGIsY29sb3I6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5zdHlsZVNwZWMubGlnaHQuY29sb3IpLGludGVuc2l0eTpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LnN0eWxlU3BlYy5saWdodC5pbnRlbnNpdHkpfSksdz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIpe2UuY2FsbCh0aGlzKSx0aGlzLl90cmFuc2l0aW9uYWJsZT1uZXcgdC5UcmFuc2l0aW9uYWJsZShfKSx0aGlzLnNldExpZ2h0KHIpLHRoaXMuX3RyYW5zaXRpb25pbmc9dGhpcy5fdHJhbnNpdGlvbmFibGUudW50cmFuc2l0aW9uZWQoKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLChyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSxyKXtpZih2b2lkIDA9PT1yJiYocj17fSksIXRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVMaWdodCxlLHIpKWZvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dO3QuZW5kc1dpdGgobiwiLXRyYW5zaXRpb24iKT90aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRUcmFuc2l0aW9uKG4uc2xpY2UoMCwtIi10cmFuc2l0aW9uIi5sZW5ndGgpLGkpOnRoaXMuX3RyYW5zaXRpb25hYmxlLnNldFZhbHVlKG4saSl9fSxyLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2l0aW9uaW5nPXRoaXMuX3RyYW5zaXRpb25hYmxlLnRyYW5zaXRpb25lZCh0LHRoaXMuX3RyYW5zaXRpb25pbmcpfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmcuaGFzVHJhbnNpdGlvbigpfSxyLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnRpZXM9dGhpcy5fdHJhbnNpdGlvbmluZy5wb3NzaWJseUV2YWx1YXRlKHQpfSxyLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybighbnx8ITEhPT1uLnZhbGlkYXRlKSYmdC5lbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe3ZhbHVlOnIsc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9LHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pKSl9LHJ9KHQuRXZlbnRlZCksVD1mdW5jdGlvbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMubmV4dFJvdz0wLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0KSx0aGlzLmRhc2hFbnRyeT17fX07VC5wcm90b3R5cGUuZ2V0RGFzaD1mdW5jdGlvbih0LGUpe3ZhciByPXQuam9pbigiLCIpK1N0cmluZyhlKTtyZXR1cm4gdGhpcy5kYXNoRW50cnlbcl18fCh0aGlzLmRhc2hFbnRyeVtyXT10aGlzLmFkZERhc2godCxlKSksdGhpcy5kYXNoRW50cnlbcl19LFQucHJvdG90eXBlLmdldERhc2hSYW5nZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdLGk9dC5sZW5ndGglMj09MT8tdFt0Lmxlbmd0aC0xXSpyOjAsYT10WzBdKnIsbz0hMDtuLnB1c2goe2xlZnQ6aSxyaWdodDphLGlzRGFzaDpvLHplcm9MZW5ndGg6MD09PXRbMF19KTtmb3IodmFyIHM9dFswXSxsPTE7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPXRbbF07bi5wdXNoKHtsZWZ0Omk9cypyLHJpZ2h0OmE9KHMrPWMpKnIsaXNEYXNoOm89IW8semVyb0xlbmd0aDowPT09Y30pfXJldHVybiBufSxULnByb3RvdHlwZS5hZGRSb3VuZERhc2g9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLzIsaT0tcjtpPD1yO2krKylmb3IodmFyIGE9dGhpcy53aWR0aCoodGhpcy5uZXh0Um93K3IraSksbz0wLHM9dFtvXSxsPTA7bDx0aGlzLndpZHRoO2wrKyl7bC9zLnJpZ2h0PjEmJihzPXRbKytvXSk7dmFyIGM9TWF0aC5hYnMobC1zLmxlZnQpLHU9TWF0aC5hYnMobC1zLnJpZ2h0KSxmPU1hdGgubWluKGMsdSksaD12b2lkIDAscD1pL3IqKG4rMSk7aWYocy5pc0Rhc2gpe3ZhciBkPW4tTWF0aC5hYnMocCk7aD1NYXRoLnNxcnQoZipmK2QqZCl9ZWxzZSBoPW4tTWF0aC5zcXJ0KGYqZitwKnApO3RoaXMuZGF0YVthK2xdPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LGgrMTI4KSl9fSxULnByb3RvdHlwZS5hZGRSZWd1bGFyRGFzaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dFtlXSxuPXRbZSsxXTtyLnplcm9MZW5ndGg/dC5zcGxpY2UoZSwxKTpuJiZuLmlzRGFzaD09PXIuaXNEYXNoJiYobi5sZWZ0PXIubGVmdCx0LnNwbGljZShlLDEpKX12YXIgaT10WzBdLGE9dFt0Lmxlbmd0aC0xXTtpLmlzRGFzaD09PWEuaXNEYXNoJiYoaS5sZWZ0PWEubGVmdC10aGlzLndpZHRoLGEucmlnaHQ9aS5yaWdodCt0aGlzLndpZHRoKTtmb3IodmFyIG89dGhpcy53aWR0aCp0aGlzLm5leHRSb3cscz0wLGw9dFtzXSxjPTA7Yzx0aGlzLndpZHRoO2MrKyl7Yy9sLnJpZ2h0PjEmJihsPXRbKytzXSk7dmFyIHU9TWF0aC5hYnMoYy1sLmxlZnQpLGY9TWF0aC5hYnMoYy1sLnJpZ2h0KSxoPU1hdGgubWluKHUsZik7dGhpcy5kYXRhW28rY109TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsKGwuaXNEYXNoP2g6LWgpKzEyOCkpfX0sVC5wcm90b3R5cGUuYWRkRGFzaD1mdW5jdGlvbihlLHIpe3ZhciBuPXI/NzowLGk9MipuKzE7aWYodGhpcy5uZXh0Um93K2k+dGhpcy5oZWlnaHQpcmV0dXJuIHQud2Fybk9uY2UoIkxpbmVBdGxhcyBvdXQgb2Ygc3BhY2UiKSxudWxsO2Zvcih2YXIgYT0wLG89MDtvPGUubGVuZ3RoO28rKylhKz1lW29dO2lmKDAhPT1hKXt2YXIgcz10aGlzLndpZHRoL2EsbD10aGlzLmdldERhc2hSYW5nZXMoZSx0aGlzLndpZHRoLHMpO3I/dGhpcy5hZGRSb3VuZERhc2gobCxzLG4pOnRoaXMuYWRkUmVndWxhckRhc2gobCl9dmFyIGM9e3k6KHRoaXMubmV4dFJvdytuKy41KS90aGlzLmhlaWdodCxoZWlnaHQ6MipuL3RoaXMuaGVpZ2h0LHdpZHRoOmF9O3JldHVybiB0aGlzLm5leHRSb3crPWksdGhpcy5kaXJ0eT0hMCxjfSxULnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2w7dGhpcy50ZXh0dXJlPyhlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLHRoaXMuZGlydHkmJih0aGlzLmRpcnR5PSExLGUudGV4U3ViSW1hZ2UyRChlLlRFWFRVUkVfMkQsMCwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCxlLkFMUEhBLGUuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKSk6KHRoaXMudGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfUyxlLlJFUEVBVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9ULGUuUkVQRUFUKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLGUuTElORUFSKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLGUuTElORUFSKSxlLnRleEltYWdlMkQoZS5URVhUVVJFXzJELDAsZS5BTFBIQSx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsZS5BTFBIQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy5kYXRhKSl9O3ZhciBrPWZ1bmN0aW9uIGUocixuKXt0aGlzLndvcmtlclBvb2w9cix0aGlzLmFjdG9ycz1bXSx0aGlzLmN1cnJlbnRBY3Rvcj0wLHRoaXMuaWQ9dC51bmlxdWVJZCgpO2Zvcih2YXIgaT10aGlzLndvcmtlclBvb2wuYWNxdWlyZSh0aGlzLmlkKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPW5ldyBlLkFjdG9yKGlbYV0sbix0aGlzLmlkKTtvLm5hbWU9IldvcmtlciAiK2EsdGhpcy5hY3RvcnMucHVzaChvKX19O2Z1bmN0aW9uIE0oZSxyLG4pe3ZhciBpPWZ1bmN0aW9uKGksYSl7aWYoaSlyZXR1cm4gbihpKTtpZihhKXt2YXIgbz10LnBpY2sodC5leHRlbmQoYSxlKSxbInRpbGVzIiwibWluem9vbSIsIm1heHpvb20iLCJhdHRyaWJ1dGlvbiIsIm1hcGJveF9sb2dvIiwiYm91bmRzIiwic2NoZW1lIiwidGlsZVNpemUiLCJlbmNvZGluZyJdKTthLnZlY3Rvcl9sYXllcnMmJihvLnZlY3RvckxheWVycz1hLnZlY3Rvcl9sYXllcnMsby52ZWN0b3JMYXllcklkcz1vLnZlY3RvckxheWVycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpKSxvLnRpbGVzPXIuY2Fub25pY2FsaXplVGlsZXNldChvLGUudXJsKSxuKG51bGwsbyl9fTtyZXR1cm4gZS51cmw/dC5nZXRKU09OKHIudHJhbnNmb3JtUmVxdWVzdChyLm5vcm1hbGl6ZVNvdXJjZVVSTChlLnVybCksdC5SZXNvdXJjZVR5cGUuU291cmNlKSxpKTp0LmJyb3dzZXIuZnJhbWUoKGZ1bmN0aW9uKCl7cmV0dXJuIGkobnVsbCxlKX0pKX1rLnByb3RvdHlwZS5icm9hZGNhc3Q9ZnVuY3Rpb24oZSxyLG4pe3QuYXN5bmNBbGwodGhpcy5hY3RvcnMsKGZ1bmN0aW9uKHQsbil7dC5zZW5kKGUscixuKX0pLG49bnx8ZnVuY3Rpb24oKXt9KX0say5wcm90b3R5cGUuZ2V0QWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50QWN0b3I9KHRoaXMuY3VycmVudEFjdG9yKzEpJXRoaXMuYWN0b3JzLmxlbmd0aCx0aGlzLmFjdG9yc1t0aGlzLmN1cnJlbnRBY3Rvcl19LGsucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuYWN0b3JzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucmVtb3ZlKCl9KSksdGhpcy5hY3RvcnM9W10sdGhpcy53b3JrZXJQb29sLnJlbGVhc2UodGhpcy5pZCl9LGsuQWN0b3I9dC5BY3Rvcjt2YXIgQT1mdW5jdGlvbihlLHIsbil7dGhpcy5ib3VuZHM9dC5MbmdMYXRCb3VuZHMuY29udmVydCh0aGlzLnZhbGlkYXRlQm91bmRzKGUpKSx0aGlzLm1pbnpvb209cnx8MCx0aGlzLm1heHpvb209bnx8MjR9O0EucHJvdG90eXBlLnZhbGlkYXRlQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiY0PT09dC5sZW5ndGg/W01hdGgubWF4KC0xODAsdFswXSksTWF0aC5tYXgoLTkwLHRbMV0pLE1hdGgubWluKDE4MCx0WzJdKSxNYXRoLm1pbig5MCx0WzNdKV06Wy0xODAsLTkwLDE4MCw5MF19LEEucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGUpe3ZhciByPU1hdGgucG93KDIsZS56KSxuPU1hdGguZmxvb3IodC5tZXJjYXRvclhmcm9tTG5nKHRoaXMuYm91bmRzLmdldFdlc3QoKSkqciksaT1NYXRoLmZsb29yKHQubWVyY2F0b3JZZnJvbUxhdCh0aGlzLmJvdW5kcy5nZXROb3J0aCgpKSpyKSxhPU1hdGguY2VpbCh0Lm1lcmNhdG9yWGZyb21MbmcodGhpcy5ib3VuZHMuZ2V0RWFzdCgpKSpyKSxvPU1hdGguY2VpbCh0Lm1lcmNhdG9yWWZyb21MYXQodGhpcy5ib3VuZHMuZ2V0U291dGgoKSkqcik7cmV0dXJuIGUueD49biYmZS54PGEmJmUueT49aSYmZS55PG99O3ZhciBTPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7aWYoZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnR5cGU9InZlY3RvciIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMuc2NoZW1lPSJ4eXoiLHRoaXMudGlsZVNpemU9NTEyLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHRoaXMuX2xvYWRlZD0hMSx0LmV4dGVuZCh0aGlzLHQucGljayhuLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiLCJwcm9tb3RlSWQiXSkpLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe3R5cGU6InZlY3RvciJ9LG4pLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1uLmNvbGxlY3RSZXNvdXJjZVRpbWluZyw1MTIhPT10aGlzLnRpbGVTaXplKXRocm93IG5ldyBFcnJvcigidmVjdG9yIHRpbGUgc291cmNlcyBtdXN0IGhhdmUgYSB0aWxlU2l6ZSBvZiA1MTIiKTt0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fbG9hZGVkPSExLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLl90aWxlSlNPTlJlcXVlc3Q9TSh0aGlzLl9vcHRpb25zLHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlciwoZnVuY3Rpb24ocixuKXtlLl90aWxlSlNPTlJlcXVlc3Q9bnVsbCxlLl9sb2FkZWQ9ITAscj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKHQuZXh0ZW5kKGUsbiksbi5ib3VuZHMmJihlLnRpbGVCb3VuZHM9bmV3IEEobi5ib3VuZHMsZS5taW56b29tLGUubWF4em9vbSkpLHQucG9zdFR1cm5zdGlsZUV2ZW50KG4udGlsZXMsZS5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9jdXN0b21BY2Nlc3NUb2tlbiksdC5wb3N0TWFwTG9hZEV2ZW50KG4udGlsZXMsZS5tYXAuX2dldE1hcElkKCksZS5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9za3VUb2tlbixlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VuKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSl9KSl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZWR9LHIucHJvdG90eXBlLmhhc1RpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMudGlsZUJvdW5kc3x8dGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHQuY2Fub25pY2FsKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl90aWxlSlNPTlJlcXVlc3QmJih0aGlzLl90aWxlSlNPTlJlcXVlc3QuY2FuY2VsKCksdGhpcy5fdGlsZUpTT05SZXF1ZXN0PW51bGwpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSksaT17cmVxdWVzdDp0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChuLHQuUmVzb3VyY2VUeXBlLlRpbGUpLHVpZDplLnVpZCx0aWxlSUQ6ZS50aWxlSUQsem9vbTplLnRpbGVJRC5vdmVyc2NhbGVkWix0aWxlU2l6ZTp0aGlzLnRpbGVTaXplKmUudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkLHBpeGVsUmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlcyxwcm9tb3RlSWQ6dGhpcy5wcm9tb3RlSWR9O2Z1bmN0aW9uIGEobixpKXtyZXR1cm4gZGVsZXRlIGUucmVxdWVzdCxlLmFib3J0ZWQ/cihudWxsKTpuJiY0MDQhPT1uLnN0YXR1cz9yKG4pOihpJiZpLnJlc291cmNlVGltaW5nJiYoZS5yZXNvdXJjZVRpbWluZz1pLnJlc291cmNlVGltaW5nKSx0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmaSYmZS5zZXRFeHBpcnlEYXRhKGkpLGUubG9hZFZlY3RvckRhdGEoaSx0aGlzLm1hcC5wYWludGVyKSx0LmNhY2hlRW50cnlQb3NzaWJseUFkZGVkKHRoaXMuZGlzcGF0Y2hlcikscihudWxsKSx2b2lkKGUucmVsb2FkQ2FsbGJhY2smJih0aGlzLmxvYWRUaWxlKGUsZS5yZWxvYWRDYWxsYmFjayksZS5yZWxvYWRDYWxsYmFjaz1udWxsKSkpfWkucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9dGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nLGUuYWN0b3ImJiJleHBpcmVkIiE9PWUuc3RhdGU/ImxvYWRpbmciPT09ZS5zdGF0ZT9lLnJlbG9hZENhbGxiYWNrPXI6ZS5yZXF1ZXN0PWUuYWN0b3Iuc2VuZCgicmVsb2FkVGlsZSIsaSxhLmJpbmQodGhpcykpOihlLmFjdG9yPXRoaXMuZGlzcGF0Y2hlci5nZXRBY3RvcigpLGUucmVxdWVzdD1lLmFjdG9yLnNlbmQoImxvYWRUaWxlIixpLGEuYmluZCh0aGlzKSkpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCl7dC5yZXF1ZXN0JiYodC5yZXF1ZXN0LmNhbmNlbCgpLGRlbGV0ZSB0LnJlcXVlc3QpLHQuYWN0b3ImJnQuYWN0b3Iuc2VuZCgiYWJvcnRUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDApfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QudW5sb2FkVmVjdG9yRGF0YSgpLHQuYWN0b3ImJnQuYWN0b3Iuc2VuZCgicmVtb3ZlVGlsZSIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sdm9pZCAwKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLEU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyksdGhpcy5pZD1yLHRoaXMuZGlzcGF0Y2hlcj1pLHRoaXMuc2V0RXZlbnRlZFBhcmVudChhKSx0aGlzLnR5cGU9InJhc3RlciIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMucm91bmRab29tPSEwLHRoaXMuc2NoZW1lPSJ4eXoiLHRoaXMudGlsZVNpemU9NTEyLHRoaXMuX2xvYWRlZD0hMSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOiJyYXN0ZXIifSxuKSx0LmV4dGVuZCh0aGlzLHQucGljayhuLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiXSkpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksKHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2xvYWRlZD0hMSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdGlsZUpTT05SZXF1ZXN0PU0odGhpcy5fb3B0aW9ucyx0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsKGZ1bmN0aW9uKHIsbil7ZS5fdGlsZUpTT05SZXF1ZXN0PW51bGwsZS5fbG9hZGVkPSEwLHI/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJih0LmV4dGVuZChlLG4pLG4uYm91bmRzJiYoZS50aWxlQm91bmRzPW5ldyBBKG4uYm91bmRzLGUubWluem9vbSxlLm1heHpvb20pKSx0LnBvc3RUdXJuc3RpbGVFdmVudChuLnRpbGVzKSx0LnBvc3RNYXBMb2FkRXZlbnQobi50aWxlcyxlLm1hcC5fZ2V0TWFwSWQoKSxlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX3NrdVRva2VuKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSl9KSl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZWR9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fdGlsZUpTT05SZXF1ZXN0JiYodGhpcy5fdGlsZUpTT05SZXF1ZXN0LmNhbmNlbCgpLHRoaXMuX3RpbGVKU09OUmVxdWVzdD1udWxsKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMpfSxyLnByb3RvdHlwZS5oYXNUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLnRpbGVCb3VuZHN8fHRoaXMudGlsZUJvdW5kcy5jb250YWlucyh0LmNhbm9uaWNhbCl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVUaWxlVVJMKGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcyx0aGlzLnNjaGVtZSksdGhpcy50aWxlU2l6ZSk7ZS5yZXF1ZXN0PXQuZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoaSx0LlJlc291cmNlVHlwZS5UaWxlKSwoZnVuY3Rpb24oaSxhKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPSJ1bmxvYWRlZCIscihudWxsKTtlbHNlIGlmKGkpZS5zdGF0ZT0iZXJyb3JlZCIscihpKTtlbHNlIGlmKGEpe24ubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEoYSksZGVsZXRlIGEuY2FjaGVDb250cm9sLGRlbGV0ZSBhLmV4cGlyZXM7dmFyIG89bi5tYXAucGFpbnRlci5jb250ZXh0LHM9by5nbDtlLnRleHR1cmU9bi5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShhLndpZHRoKSxlLnRleHR1cmU/ZS50ZXh0dXJlLnVwZGF0ZShhLHt1c2VNaXBtYXA6ITB9KTooZS50ZXh0dXJlPW5ldyB0LlRleHR1cmUobyxhLHMuUkdCQSx7dXNlTWlwbWFwOiEwfSksZS50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSxvLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyYmcy50ZXhQYXJhbWV0ZXJmKHMuVEVYVFVSRV8yRCxvLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxvLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heCkpLGUuc3RhdGU9ImxvYWRlZCIsdC5jYWNoZUVudHJ5UG9zc2libHlBZGRlZChuLmRpc3BhdGNoZXIpLHIobnVsbCl9fSkpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlKXt0LnJlcXVlc3QmJih0LnJlcXVlc3QuY2FuY2VsKCksZGVsZXRlIHQucmVxdWVzdCksZSgpfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dC50ZXh0dXJlJiZ0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0LnRleHR1cmUpLGUoKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLEM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyxyLG4saSxhKSx0aGlzLnR5cGU9InJhc3Rlci1kZW0iLHRoaXMubWF4em9vbT0yMix0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOiJyYXN0ZXItZGVtIn0sbiksdGhpcy5lbmNvZGluZz1uLmVuY29kaW5nfHwibWFwYm94In1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLChyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToicmFzdGVyLWRlbSIsdXJsOnRoaXMudXJsLHRpbGVTaXplOnRoaXMudGlsZVNpemUsdGlsZXM6dGhpcy50aWxlcyxib3VuZHM6dGhpcy5ib3VuZHMsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ319LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSx0aGlzLnRpbGVTaXplKTtmdW5jdGlvbiBpKHQsbil7dCYmKGUuc3RhdGU9ImVycm9yZWQiLHIodCkpLG4mJihlLmRlbT1uLGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSEwLGUuc3RhdGU9ImxvYWRlZCIscihudWxsKSl9ZS5yZXF1ZXN0PXQuZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3Qobix0LlJlc291cmNlVHlwZS5UaWxlKSxmdW5jdGlvbihuLGEpe2lmKGRlbGV0ZSBlLnJlcXVlc3QsZS5hYm9ydGVkKWUuc3RhdGU9InVubG9hZGVkIixyKG51bGwpO2Vsc2UgaWYobillLnN0YXRlPSJlcnJvcmVkIixyKG4pO2Vsc2UgaWYoYSl7dGhpcy5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMmJmUuc2V0RXhwaXJ5RGF0YShhKSxkZWxldGUgYS5jYWNoZUNvbnRyb2wsZGVsZXRlIGEuZXhwaXJlczt2YXIgbz10LndpbmRvdy5JbWFnZUJpdG1hcCYmYSBpbnN0YW5jZW9mIHQud2luZG93LkltYWdlQml0bWFwJiZ0Lm9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpP2E6dC5icm93c2VyLmdldEltYWdlRGF0YShhLDEpLHM9e3VpZDplLnVpZCxjb29yZDplLnRpbGVJRCxzb3VyY2U6dGhpcy5pZCxyYXdJbWFnZURhdGE6byxlbmNvZGluZzp0aGlzLmVuY29kaW5nfTtlLmFjdG9yJiYiZXhwaXJlZCIhPT1lLnN0YXRlfHwoZS5hY3Rvcj10aGlzLmRpc3BhdGNoZXIuZ2V0QWN0b3IoKSxlLmFjdG9yLnNlbmQoImxvYWRERU1UaWxlIixzLGkuYmluZCh0aGlzKSkpfX0uYmluZCh0aGlzKSksZS5uZWlnaGJvcmluZ1RpbGVzPXRoaXMuX2dldE5laWdoYm9yaW5nVGlsZXMoZS50aWxlSUQpfSxyLnByb3RvdHlwZS5fZ2V0TmVpZ2hib3JpbmdUaWxlcz1mdW5jdGlvbihlKXt2YXIgcj1lLmNhbm9uaWNhbCxuPU1hdGgucG93KDIsci56KSxpPShyLngtMStuKSVuLGE9MD09PXIueD9lLndyYXAtMTplLndyYXAsbz0oci54KzErbiklbixzPXIueCsxPT09bj9lLndyYXArMTplLndyYXAsbD17fTtyZXR1cm4gbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnkpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55KS5rZXldPXtiYWNrZmlsbGVkOiExfSxyLnk+MCYmKGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGEsci56LGksci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGUud3JhcCxyLnosci54LHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSksci55KzE8biYmKGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGEsci56LGksci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGUud3JhcCxyLnosci54LHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSksbH0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0KXt0LmRlbVRleHR1cmUmJnRoaXMubWFwLnBhaW50ZXIuc2F2ZVRpbGVUZXh0dXJlKHQuZGVtVGV4dHVyZSksdC5mYm8mJih0LmZiby5kZXN0cm95KCksZGVsZXRlIHQuZmJvKSx0LmRlbSYmZGVsZXRlIHQuZGVtLGRlbGV0ZSB0Lm5laWdoYm9yaW5nVGlsZXMsdC5zdGF0ZT0idW5sb2FkZWQiLHQuYWN0b3ImJnQuYWN0b3Iuc2VuZCgicmVtb3ZlREVNVGlsZSIse3VpZDp0LnVpZCxzb3VyY2U6dGhpcy5pZH0pfSxyfShFKSxMPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLnR5cGU9Imdlb2pzb24iLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0xOCx0aGlzLnRpbGVTaXplPTUxMix0aGlzLmlzVGlsZUNsaXBwZWQ9ITAsdGhpcy5yZXBhcnNlT3ZlcnNjYWxlZD0hMCx0aGlzLl9yZW1vdmVkPSExLHRoaXMuX2xvYWRlZD0hMSx0aGlzLmFjdG9yPWkuZ2V0QWN0b3IoKSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSksdGhpcy5fZGF0YT1uLmRhdGEsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSxuKSx0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc9bi5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5fcmVzb3VyY2VUaW1pbmc9W10sdm9pZCAwIT09bi5tYXh6b29tJiYodGhpcy5tYXh6b29tPW4ubWF4em9vbSksbi50eXBlJiYodGhpcy50eXBlPW4udHlwZSksbi5hdHRyaWJ1dGlvbiYmKHRoaXMuYXR0cmlidXRpb249bi5hdHRyaWJ1dGlvbiksdGhpcy5wcm9tb3RlSWQ9bi5wcm9tb3RlSWQ7dmFyIG89dC5FWFRFTlQvdGhpcy50aWxlU2l6ZTt0aGlzLndvcmtlck9wdGlvbnM9dC5leHRlbmQoe3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXI6bi5jbHVzdGVyfHwhMSxnZW9qc29uVnRPcHRpb25zOntidWZmZXI6KHZvaWQgMCE9PW4uYnVmZmVyP24uYnVmZmVyOjEyOCkqbyx0b2xlcmFuY2U6KHZvaWQgMCE9PW4udG9sZXJhbmNlP24udG9sZXJhbmNlOi4zNzUpKm8sZXh0ZW50OnQuRVhURU5ULG1heFpvb206dGhpcy5tYXh6b29tLGxpbmVNZXRyaWNzOm4ubGluZU1ldHJpY3N8fCExLGdlbmVyYXRlSWQ6bi5nZW5lcmF0ZUlkfHwhMX0sc3VwZXJjbHVzdGVyT3B0aW9uczp7bWF4Wm9vbTp2b2lkIDAhPT1uLmNsdXN0ZXJNYXhab29tP01hdGgubWluKG4uY2x1c3Rlck1heFpvb20sdGhpcy5tYXh6b29tLTEpOnRoaXMubWF4em9vbS0xLGV4dGVudDp0LkVYVEVOVCxyYWRpdXM6KG4uY2x1c3RlclJhZGl1c3x8NTApKm8sbG9nOiExLGdlbmVyYXRlSWQ6bi5nZW5lcmF0ZUlkfHwhMX0sY2x1c3RlclByb3BlcnRpZXM6bi5jbHVzdGVyUHJvcGVydGllc30sbi53b3JrZXJPcHRpb25zKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLChyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdXBkYXRlV29ya2VyRGF0YSgoZnVuY3Rpb24ocil7aWYocillLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk7ZWxzZXt2YXIgbj17ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIn07ZS5fY29sbGVjdFJlc291cmNlVGltaW5nJiZlLl9yZXNvdXJjZVRpbWluZyYmZS5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPWUuX3Jlc291cmNlVGltaW5nLGUuX3Jlc291cmNlVGltaW5nPVtdKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLG4pKX19KSl9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fZGF0YT1lLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLl91cGRhdGVXb3JrZXJEYXRhKChmdW5jdGlvbihlKXtpZihlKXIuZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTtlbHNle3ZhciBuPXtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToiY29udGVudCJ9O3IuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyYmci5fcmVzb3VyY2VUaW1pbmcmJnIuX3Jlc291cmNlVGltaW5nLmxlbmd0aD4wJiYobi5yZXNvdXJjZVRpbWluZz1yLl9yZXNvdXJjZVRpbWluZyxyLl9yZXNvdXJjZVRpbWluZz1bXSksci5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIixuKSl9fSkpLHRoaXN9LHIucHJvdG90eXBlLmdldENsdXN0ZXJFeHBhbnNpb25ab29tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWN0b3Iuc2VuZCgiZ2VvanNvbi5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbSIse2NsdXN0ZXJJZDp0LHNvdXJjZTp0aGlzLmlkfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hY3Rvci5zZW5kKCJnZW9qc29uLmdldENsdXN0ZXJDaGlsZHJlbiIse2NsdXN0ZXJJZDp0LHNvdXJjZTp0aGlzLmlkfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyTGVhdmVzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLmFjdG9yLnNlbmQoImdlb2pzb24uZ2V0Q2x1c3RlckxlYXZlcyIse3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXJJZDp0LGxpbWl0OmUsb2Zmc2V0OnJ9LG4pLHRoaXN9LHIucHJvdG90eXBlLl91cGRhdGVXb3JrZXJEYXRhPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5fbG9hZGVkPSExO3ZhciBuPXQuZXh0ZW5kKHt9LHRoaXMud29ya2VyT3B0aW9ucyksaT10aGlzLl9kYXRhOyJzdHJpbmciPT10eXBlb2YgaT8obi5yZXF1ZXN0PXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHQuYnJvd3Nlci5yZXNvbHZlVVJMKGkpLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSksbi5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZz10aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcpOm4uZGF0YT1KU09OLnN0cmluZ2lmeShpKSx0aGlzLmFjdG9yLnNlbmQodGhpcy50eXBlKyIubG9hZERhdGEiLG4sKGZ1bmN0aW9uKHQsaSl7ci5fcmVtb3ZlZHx8aSYmaS5hYmFuZG9uZWR8fChyLl9sb2FkZWQ9ITAsaSYmaS5yZXNvdXJjZVRpbWluZyYmaS5yZXNvdXJjZVRpbWluZ1tyLmlkXSYmKHIuX3Jlc291cmNlVGltaW5nPWkucmVzb3VyY2VUaW1pbmdbci5pZF0uc2xpY2UoMCkpLHIuYWN0b3Iuc2VuZChyLnR5cGUrIi5jb2FsZXNjZSIse3NvdXJjZTpuLnNvdXJjZX0sbnVsbCksZSh0KSl9KSl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZWR9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPWUuYWN0b3I/InJlbG9hZFRpbGUiOiJsb2FkVGlsZSI7ZS5hY3Rvcj10aGlzLmFjdG9yLGUucmVxdWVzdD10aGlzLmFjdG9yLnNlbmQoaSx7dHlwZTp0aGlzLnR5cGUsdWlkOmUudWlkLHRpbGVJRDplLnRpbGVJRCx6b29tOmUudGlsZUlELm92ZXJzY2FsZWRaLG1heFpvb206dGhpcy5tYXh6b29tLHRpbGVTaXplOnRoaXMudGlsZVNpemUsc291cmNlOnRoaXMuaWQscGl4ZWxSYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxzaG93Q29sbGlzaW9uQm94ZXM6dGhpcy5tYXAuc2hvd0NvbGxpc2lvbkJveGVzLHByb21vdGVJZDp0aGlzLnByb21vdGVJZH0sKGZ1bmN0aW9uKHQsYSl7cmV0dXJuIGRlbGV0ZSBlLnJlcXVlc3QsZS51bmxvYWRWZWN0b3JEYXRhKCksZS5hYm9ydGVkP3IobnVsbCk6dD9yKHQpOihlLmxvYWRWZWN0b3JEYXRhKGEsbi5tYXAucGFpbnRlciwicmVsb2FkVGlsZSI9PT1pKSxyKG51bGwpKX0pKX0sci5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5jYW5jZWwoKSxkZWxldGUgdC5yZXF1ZXN0KSx0LmFib3J0ZWQ9ITB9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC51bmxvYWRWZWN0b3JEYXRhKCksdGhpcy5hY3Rvci5zZW5kKCJyZW1vdmVUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlZD0hMCx0aGlzLmFjdG9yLnNlbmQoInJlbW92ZVNvdXJjZSIse3R5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zLHt0eXBlOnRoaXMudHlwZSxkYXRhOnRoaXMuX2RhdGF9KX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLEk9dC5jcmVhdGVMYXlvdXQoW3tuYW1lOiJhX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn0se25hbWU6ImFfdGV4dHVyZV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9XSksUD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuLGkpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXQsdGhpcy5kaXNwYXRjaGVyPW4sdGhpcy5jb29yZGluYXRlcz1yLmNvb3JkaW5hdGVzLHRoaXMudHlwZT0iaW1hZ2UiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnRpbGVTaXplPTUxMix0aGlzLnRpbGVzPXt9LHRoaXMuX2xvYWRlZD0hMSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoaSksdGhpcy5vcHRpb25zPXJ9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5fbG9hZGVkPSExLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLnVybD10aGlzLm9wdGlvbnMudXJsLHQuZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodGhpcy51cmwsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLChmdW5jdGlvbihpLGEpe24uX2xvYWRlZD0hMCxpP24uZmlyZShuZXcgdC5FcnJvckV2ZW50KGkpKTphJiYobi5pbWFnZT1hLGUmJihuLmNvb3JkaW5hdGVzPWUpLHImJnIoKSxuLl9maW5pc2hMb2FkaW5nKCkpfSkpfSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkfSxyLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmltYWdlJiZ0LnVybD8odGhpcy5vcHRpb25zLnVybD10LnVybCx0aGlzLmxvYWQodC5jb29yZGluYXRlcywoZnVuY3Rpb24oKXtlLnRleHR1cmU9bnVsbH0pKSx0aGlzKTp0aGlzfSxyLnByb3RvdHlwZS5fZmluaXNoTG9hZGluZz1mdW5jdGlvbigpe3RoaXMubWFwJiYodGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2V0Q29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLmNvb3JkaW5hdGVzPWU7dmFyIG49ZS5tYXAodC5NZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdCk7dGhpcy50aWxlSUQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPTEvMCxuPTEvMCxpPS0xLzAsYT0tMS8wLG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO3I9TWF0aC5taW4ocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLngpLGE9TWF0aC5tYXgoYSxsLnkpfXZhciBjPU1hdGgubWF4KGktcixhLW4pLHU9TWF0aC5tYXgoMCxNYXRoLmZsb29yKC1NYXRoLmxvZyhjKS9NYXRoLkxOMikpLGY9TWF0aC5wb3coMix1KTtyZXR1cm4gbmV3IHQuQ2Fub25pY2FsVGlsZUlEKHUsTWF0aC5mbG9vcigocitpKS8yKmYpLE1hdGguZmxvb3IoKG4rYSkvMipmKSl9KG4pLHRoaXMubWluem9vbT10aGlzLm1heHpvb209dGhpcy50aWxlSUQuejt2YXIgaT1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHIudGlsZUlELmdldFRpbGVQb2ludCh0KS5fcm91bmQoKX0pKTtyZXR1cm4gdGhpcy5fYm91bmRzQXJyYXk9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQ0aTgsdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soaVswXS54LGlbMF0ueSwwLDApLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGlbMV0ueCxpWzFdLnksdC5FWFRFTlQsMCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soaVszXS54LGlbM10ueSwwLHQuRVhURU5UKSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhpWzJdLngsaVsyXS55LHQuRVhURU5ULHQuRVhURU5UKSx0aGlzLmJvdW5kc0J1ZmZlciYmKHRoaXMuYm91bmRzQnVmZmVyLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5ib3VuZHNCdWZmZXIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSx0aGlzfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7aWYoMCE9PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aCYmdGhpcy5pbWFnZSl7dmFyIGU9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LHI9ZS5nbDtmb3IodmFyIG4gaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxJLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1NlZ21lbnRzfHwodGhpcy5ib3VuZHNTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKSksdGhpcy50ZXh0dXJlfHwodGhpcy50ZXh0dXJlPW5ldyB0LlRleHR1cmUoZSx0aGlzLmltYWdlLHIuUkdCQSksdGhpcy50ZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKSksdGhpcy50aWxlcyl7dmFyIGk9dGhpcy50aWxlc1tuXTsibG9hZGVkIiE9PWkuc3RhdGUmJihpLnN0YXRlPSJsb2FkZWQiLGkudGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy50aWxlSUQmJnRoaXMudGlsZUlELmVxdWFscyh0LnRpbGVJRC5jYW5vbmljYWwpPyh0aGlzLnRpbGVzW1N0cmluZyh0LnRpbGVJRC53cmFwKV09dCx0LmJ1Y2tldHM9e30sZShudWxsKSk6KHQuc3RhdGU9ImVycm9yZWQiLGUobnVsbCkpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiaW1hZ2UiLHVybDp0aGlzLm9wdGlvbnMudXJsLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksej1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuLGkpe2UuY2FsbCh0aGlzLHQscixuLGkpLHRoaXMucm91bmRab29tPSEwLHRoaXMudHlwZT0idmlkZW8iLHRoaXMub3B0aW9ucz1yfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksKHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2xvYWRlZD0hMTt2YXIgcj10aGlzLm9wdGlvbnM7dGhpcy51cmxzPVtdO2Zvcih2YXIgbj0wLGk9ci51cmxzO248aS5sZW5ndGg7bis9MSl0aGlzLnVybHMucHVzaCh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChpW25dLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSkudXJsKTt0LmdldFZpZGVvKHRoaXMudXJscywoZnVuY3Rpb24ocixuKXtlLl9sb2FkZWQ9ITAscj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKGUudmlkZW89bixlLnZpZGVvLmxvb3A9ITAsZS52aWRlby5hZGRFdmVudExpc3RlbmVyKCJwbGF5aW5nIiwoZnVuY3Rpb24oKXtlLm1hcC50cmlnZ2VyUmVwYWludCgpfSkpLGUubWFwJiZlLnZpZGVvLnBsYXkoKSxlLl9maW5pc2hMb2FkaW5nKCkpfSkpfSxyLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMudmlkZW8mJnRoaXMudmlkZW8ucGF1c2UoKX0sci5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMudmlkZW8mJnRoaXMudmlkZW8ucGxheSgpfSxyLnByb3RvdHlwZS5zZWVrPWZ1bmN0aW9uKGUpe2lmKHRoaXMudmlkZW8pe3ZhciByPXRoaXMudmlkZW8uc2Vla2FibGU7ZTxyLnN0YXJ0KDApfHxlPnIuZW5kKDApP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3RoaXMuaWQsbnVsbCwiUGxheWJhY2sgZm9yIHRoaXMgdmlkZW8gY2FuIGJlIHNldCBvbmx5IGJldHdlZW4gdGhlICIrci5zdGFydCgwKSsiIGFuZCAiK3IuZW5kKDApKyItc2Vjb25kIG1hcmsuIikpKTp0aGlzLnZpZGVvLmN1cnJlbnRUaW1lPWV9fSxyLnByb3RvdHlwZS5nZXRWaWRlbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZGVvfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcHx8KHRoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy52aWRlbyYmKHRoaXMudmlkZW8ucGxheSgpLHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcykpKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKCEoMD09PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aHx8dGhpcy52aWRlby5yZWFkeVN0YXRlPDIpKXt2YXIgZT10aGlzLm1hcC5wYWludGVyLmNvbnRleHQscj1lLmdsO2Zvcih2YXIgbiBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LEkubWVtYmVycykpLHRoaXMuYm91bmRzU2VnbWVudHN8fCh0aGlzLmJvdW5kc1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpKSx0aGlzLnRleHR1cmU/dGhpcy52aWRlby5wYXVzZWR8fCh0aGlzLnRleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpLHIudGV4U3ViSW1hZ2UyRChyLlRFWFRVUkVfMkQsMCwwLDAsci5SR0JBLHIuVU5TSUdORURfQllURSx0aGlzLnZpZGVvKSk6KHRoaXMudGV4dHVyZT1uZXcgdC5UZXh0dXJlKGUsdGhpcy52aWRlbyxyLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBpPXRoaXMudGlsZXNbbl07ImxvYWRlZCIhPT1pLnN0YXRlJiYoaS5zdGF0ZT0ibG9hZGVkIixpLnRleHR1cmU9dGhpcy50ZXh0dXJlKX19fSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToidmlkZW8iLHVybHM6dGhpcy51cmxzLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW8mJiF0aGlzLnZpZGVvLnBhdXNlZH0scn0oUCksTz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzLHIsbixpLGEpLG4uY29vcmRpbmF0ZXM/QXJyYXkuaXNBcnJheShuLmNvb3JkaW5hdGVzKSYmND09PW4uY29vcmRpbmF0ZXMubGVuZ3RoJiYhbi5jb29yZGluYXRlcy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4hQXJyYXkuaXNBcnJheSh0KXx8MiE9PXQubGVuZ3RofHx0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdH0pKX0pKXx8dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCciY29vcmRpbmF0ZXMiIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXkgb2YgNCBsb25naXR1ZGUvbGF0aXR1ZGUgYXJyYXkgcGFpcnMnKSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiY29vcmRpbmF0ZXMiJykpKSxuLmFuaW1hdGUmJiJib29sZWFuIiE9dHlwZW9mIG4uYW5pbWF0ZSYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCdvcHRpb25hbCAiYW5pbWF0ZSIgcHJvcGVydHkgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnKSkpLG4uY2FudmFzPyJzdHJpbmciPT10eXBlb2Ygbi5jYW52YXN8fG4uY2FudmFzIGluc3RhbmNlb2YgdC53aW5kb3cuSFRNTENhbnZhc0VsZW1lbnR8fHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnImNhbnZhcyIgbXVzdCBiZSBlaXRoZXIgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGUgY2FudmFzIGVsZW1lbnQgZnJvbSB3aGljaCB0byByZWFkLCBvciBhbiBIVE1MQ2FudmFzRWxlbWVudCBpbnN0YW5jZScpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJjYW52YXMiJykpKSx0aGlzLm9wdGlvbnM9bix0aGlzLmFuaW1hdGU9dm9pZCAwPT09bi5hbmltYXRlfHxuLmFuaW1hdGV9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3RoaXMuX2xvYWRlZD0hMCx0aGlzLmNhbnZhc3x8KHRoaXMuY2FudmFzPXRoaXMub3B0aW9ucy5jYW52YXMgaW5zdGFuY2VvZiB0LndpbmRvdy5IVE1MQ2FudmFzRWxlbWVudD90aGlzLm9wdGlvbnMuY2FudmFzOnQud2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5jYW52YXMpKSx0aGlzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCx0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiQ2FudmFzIGRpbWVuc2lvbnMgY2Fubm90IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLiIpKSk6KHRoaXMucGxheT1mdW5jdGlvbigpe3RoaXMuX3BsYXlpbmc9ITAsdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKX0sdGhpcy5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3BsYXlpbmcmJih0aGlzLnByZXBhcmUoKSx0aGlzLl9wbGF5aW5nPSExKX0sdGhpcy5fZmluaXNoTG9hZGluZygpKX0sci5wcm90b3R5cGUuZ2V0Q2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FudmFzfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpLHRoaXMuY2FudmFzJiZ0aGlzLmFuaW1hdGUmJnRoaXMucGxheSgpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMucGF1c2UoKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe3ZhciBlPSExO2lmKHRoaXMuY2FudmFzLndpZHRoIT09dGhpcy53aWR0aCYmKHRoaXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsZT0hMCksdGhpcy5jYW52YXMuaGVpZ2h0IT09dGhpcy5oZWlnaHQmJih0aGlzLmhlaWdodD10aGlzLmNhbnZhcy5oZWlnaHQsZT0hMCksIXRoaXMuX2hhc0ludmFsaWREaW1lbnNpb25zKCkmJjAhPT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGgpe3ZhciByPXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxuPXIuZ2w7Zm9yKHZhciBpIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9ci5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksSS5tZW1iZXJzKSksdGhpcy5ib3VuZHNTZWdtZW50c3x8KHRoaXMuYm91bmRzU2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsMikpLHRoaXMudGV4dHVyZT8oZXx8dGhpcy5fcGxheWluZykmJnRoaXMudGV4dHVyZS51cGRhdGUodGhpcy5jYW52YXMse3ByZW11bHRpcGx5OiEwfSk6dGhpcy50ZXh0dXJlPW5ldyB0LlRleHR1cmUocix0aGlzLmNhbnZhcyxuLlJHQkEse3ByZW11bHRpcGx5OiEwfSksdGhpcy50aWxlcyl7dmFyIGE9dGhpcy50aWxlc1tpXTsibG9hZGVkIiE9PWEuc3RhdGUmJihhLnN0YXRlPSJsb2FkZWQiLGEudGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJjYW52YXMiLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYXlpbmd9LHIucHJvdG90eXBlLl9oYXNJbnZhbGlkRGltZW5zaW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9W3RoaXMuY2FudmFzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodF07dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO2lmKGlzTmFOKHIpfHxyPD0wKXJldHVybiEwfXJldHVybiExfSxyfShQKSxEPXt2ZWN0b3I6UyxyYXN0ZXI6RSwicmFzdGVyLWRlbSI6QyxnZW9qc29uOkwsdmlkZW86eixpbWFnZTpQLGNhbnZhczpPfTtmdW5jdGlvbiBSKGUscil7dmFyIG49dC5pZGVudGl0eShbXSk7cmV0dXJuIHQudHJhbnNsYXRlKG4sbixbMSwxLDBdKSx0LnNjYWxlKG4sbixbLjUqZS53aWR0aCwuNSplLmhlaWdodCwxXSksdC5tdWx0aXBseShuLG4sZS5jYWxjdWxhdGVQb3NNYXRyaXgoci50b1Vud3JhcHBlZCgpKSl9ZnVuY3Rpb24gRih0LGUscixuLGksYSl7dmFyIG89ZnVuY3Rpb24odCxlLHIpe2lmKHQpZm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9ZVtpW25dXTtpZihhJiZhLnNvdXJjZT09PXImJiJmaWxsLWV4dHJ1c2lvbiI9PT1hLnR5cGUpcmV0dXJuITB9ZWxzZSBmb3IodmFyIG8gaW4gZSl7dmFyIHM9ZVtvXTtpZihzLnNvdXJjZT09PXImJiJmaWxsLWV4dHJ1c2lvbiI9PT1zLnR5cGUpcmV0dXJuITB9cmV0dXJuITF9KGkmJmkubGF5ZXJzLGUsdC5pZCkscz1hLm1heFBpdGNoU2NhbGVGYWN0b3IoKSxsPXQudGlsZXNJbihuLHMsbyk7bC5zb3J0KEIpO2Zvcih2YXIgYz1bXSx1PTAsZj1sO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XTtjLnB1c2goe3dyYXBwZWRUaWxlSUQ6aC50aWxlSUQud3JhcHBlZCgpLmtleSxxdWVyeVJlc3VsdHM6aC50aWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLHIsdC5fc3RhdGUsaC5xdWVyeUdlb21ldHJ5LGguY2FtZXJhUXVlcnlHZW9tZXRyeSxoLnNjYWxlLGksYSxzLFIodC50cmFuc2Zvcm0saC50aWxlSUQpKX0pfXZhciBwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17fSxyPXt9LG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5xdWVyeVJlc3VsdHMscz1hLndyYXBwZWRUaWxlSUQsbD1yW3NdPXJbc118fHt9O2Zvcih2YXIgYyBpbiBvKWZvcih2YXIgdT1vW2NdLGY9bFtjXT1sW2NdfHx7fSxoPWVbY109ZVtjXXx8W10scD0wLGQ9dTtwPGQubGVuZ3RoO3ArPTEpe3ZhciBnPWRbcF07ZltnLmZlYXR1cmVJbmRleF18fChmW2cuZmVhdHVyZUluZGV4XT0hMCxoLnB1c2goZykpfX1yZXR1cm4gZX0oYyk7Zm9yKHZhciBkIGluIHApcFtkXS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lLmZlYXR1cmUsbj10LmdldEZlYXR1cmVTdGF0ZShyLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSxyLmlkKTtyLnNvdXJjZT1yLmxheWVyLnNvdXJjZSxyLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSYmKHIuc291cmNlTGF5ZXI9ci5sYXllclsic291cmNlLWxheWVyIl0pLHIuc3RhdGU9bn0pKTtyZXR1cm4gcH1mdW5jdGlvbiBCKHQsZSl7dmFyIHI9dC50aWxlSUQsbj1lLnRpbGVJRDtyZXR1cm4gci5vdmVyc2NhbGVkWi1uLm92ZXJzY2FsZWRafHxyLmNhbm9uaWNhbC55LW4uY2Fub25pY2FsLnl8fHIud3JhcC1uLndyYXB8fHIuY2Fub25pY2FsLngtbi5jYW5vbmljYWwueH12YXIgTj1mdW5jdGlvbih0LGUpe3RoaXMubWF4PXQsdGhpcy5vblJlbW92ZT1lLHRoaXMucmVzZXQoKX07Ti5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5kYXRhKWZvcih2YXIgZT0wLHI9dGhpcy5kYXRhW3RdO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtuLnRpbWVvdXQmJmNsZWFyVGltZW91dChuLnRpbWVvdXQpLHRoaXMub25SZW1vdmUobi52YWx1ZSl9cmV0dXJuIHRoaXMuZGF0YT17fSx0aGlzLm9yZGVyPVtdLHRoaXN9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPXQud3JhcHBlZCgpLmtleTt2b2lkIDA9PT10aGlzLmRhdGFbaV0mJih0aGlzLmRhdGFbaV09W10pO3ZhciBhPXt2YWx1ZTplLHRpbWVvdXQ6dm9pZCAwfTtpZih2b2lkIDAhPT1yJiYoYS50aW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bi5yZW1vdmUodCxhKX0pLHIpKSx0aGlzLmRhdGFbaV0ucHVzaChhKSx0aGlzLm9yZGVyLnB1c2goaSksdGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXgpe3ZhciBvPXRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO28mJnRoaXMub25SZW1vdmUobyl9cmV0dXJuIHRoaXN9LE4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdC53cmFwcGVkKCkua2V5IGluIHRoaXMuZGF0YX0sTi5wcm90b3R5cGUuZ2V0QW5kUmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0LndyYXBwZWQoKS5rZXkpOm51bGx9LE4ucHJvdG90eXBlLl9nZXRBbmRSZW1vdmVCeUtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRhdGFbdF0uc2hpZnQoKTtyZXR1cm4gZS50aW1lb3V0JiZjbGVhclRpbWVvdXQoZS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3RdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVt0XSx0aGlzLm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YodCksMSksZS52YWx1ZX0sTi5wcm90b3R5cGUuZ2V0QnlLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhW3RdO3JldHVybiBlP2VbMF0udmFsdWU6bnVsbH0sTi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLmRhdGFbdC53cmFwcGVkKCkua2V5XVswXS52YWx1ZTpudWxsfSxOLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXModCkpcmV0dXJuIHRoaXM7dmFyIHI9dC53cmFwcGVkKCkua2V5LG49dm9pZCAwPT09ZT8wOnRoaXMuZGF0YVtyXS5pbmRleE9mKGUpLGk9dGhpcy5kYXRhW3JdW25dO3JldHVybiB0aGlzLmRhdGFbcl0uc3BsaWNlKG4sMSksaS50aW1lb3V0JiZjbGVhclRpbWVvdXQoaS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3JdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVtyXSx0aGlzLm9uUmVtb3ZlKGkudmFsdWUpLHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihyKSwxKSx0aGlzfSxOLnByb3RvdHlwZS5zZXRNYXhTaXplPWZ1bmN0aW9uKHQpe2Zvcih0aGlzLm1heD10O3RoaXMub3JkZXIubGVuZ3RoPnRoaXMubWF4Oyl7dmFyIGU9dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGhpcy5vcmRlclswXSk7ZSYmdGhpcy5vblJlbW92ZShlKX1yZXR1cm4gdGhpc30sTi5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0aGlzLmRhdGEpZm9yKHZhciBuPTAsaT10aGlzLmRhdGFbcl07bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3QoYS52YWx1ZSl8fGUucHVzaChhKX1mb3IodmFyIG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO3RoaXMucmVtb3ZlKGwudmFsdWUudGlsZUlELGwpfX07dmFyIGo9ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29udGV4dD10O3ZhciBuPXQuZ2w7dGhpcy5idWZmZXI9bi5jcmVhdGVCdWZmZXIoKSx0aGlzLmR5bmFtaWNEcmF3PUJvb2xlYW4ociksdGhpcy5jb250ZXh0LnVuYmluZFZBTygpLHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKSxuLmJ1ZmZlckRhdGEobi5FTEVNRU5UX0FSUkFZX0JVRkZFUixlLmFycmF5QnVmZmVyLHRoaXMuZHluYW1pY0RyYXc/bi5EWU5BTUlDX0RSQVc6bi5TVEFUSUNfRFJBVyksdGhpcy5keW5hbWljRHJhd3x8ZGVsZXRlIGUuYXJyYXlCdWZmZXJ9O2oucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0sai5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jb250ZXh0LnVuYmluZFZBTygpLHRoaXMuYmluZCgpLGUuYnVmZmVyU3ViRGF0YShlLkVMRU1FTlRfQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LGoucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlciYmKHRoaXMuY29udGV4dC5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpLGRlbGV0ZSB0aGlzLmJ1ZmZlcil9O3ZhciBVPXtJbnQ4OiJCWVRFIixVaW50ODoiVU5TSUdORURfQllURSIsSW50MTY6IlNIT1JUIixVaW50MTY6IlVOU0lHTkVEX1NIT1JUIixJbnQzMjoiSU5UIixVaW50MzI6IlVOU0lHTkVEX0lOVCIsRmxvYXQzMjoiRkxPQVQifSxWPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuYXR0cmlidXRlcz1yLHRoaXMuaXRlbVNpemU9ZS5ieXRlc1BlckVsZW1lbnQsdGhpcy5keW5hbWljRHJhdz1uLHRoaXMuY29udGV4dD10O3ZhciBpPXQuZ2w7dGhpcy5idWZmZXI9aS5jcmVhdGVCdWZmZXIoKSx0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKSxpLmJ1ZmZlckRhdGEoaS5BUlJBWV9CVUZGRVIsZS5hcnJheUJ1ZmZlcix0aGlzLmR5bmFtaWNEcmF3P2kuRFlOQU1JQ19EUkFXOmkuU1RBVElDX0RSQVcpLHRoaXMuZHluYW1pY0RyYXd8fGRlbGV0ZSBlLmFycmF5QnVmZmVyfTtWLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0sVi5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5iaW5kKCksZS5idWZmZXJTdWJEYXRhKGUuQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LFYucHJvdG90eXBlLmVuYWJsZUF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7cisrKXt2YXIgbj1lLmF0dHJpYnV0ZXNbdGhpcy5hdHRyaWJ1dGVzW3JdLm5hbWVdO3ZvaWQgMCE9PW4mJnQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobil9fSxWLnByb3RvdHlwZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy5hdHRyaWJ1dGVzW25dLGE9ZS5hdHRyaWJ1dGVzW2kubmFtZV07dm9pZCAwIT09YSYmdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsaS5jb21wb25lbnRzLHRbVVtpLnR5cGVdXSwhMSx0aGlzLml0ZW1TaXplLGkub2Zmc2V0K3RoaXMuaXRlbVNpemUqKHJ8fDApKX19LFYucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlciYmKHRoaXMuY29udGV4dC5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpLGRlbGV0ZSB0aGlzLmJ1ZmZlcil9O3ZhciBxPWZ1bmN0aW9uKHQpe3RoaXMuZ2w9dC5nbCx0aGlzLmRlZmF1bHQ9dGhpcy5nZXREZWZhdWx0KCksdGhpcy5jdXJyZW50PXRoaXMuZGVmYXVsdCx0aGlzLmRpcnR5PSExfTtxLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxxLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7fSxxLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdH0scS5wcm90b3R5cGUuc2V0RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuc2V0KHRoaXMuZGVmYXVsdCl9O3ZhciBIPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLChyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuQ29sb3IudHJhbnNwYXJlbnR9LHIucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHQuciE9PWUucnx8dC5nIT09ZS5nfHx0LmIhPT1lLmJ8fHQuYSE9PWUuYXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmNsZWFyQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0scn0ocSksRz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiAxfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5jbGVhckRlcHRoKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxZPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmNsZWFyU3RlbmNpbCh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksVz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVyblshMCwhMCwhMCwhMF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dFsyXSE9PWVbMl18fHRbM10hPT1lWzNdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuY29sb3JNYXNrKHRbMF0sdFsxXSx0WzJdLHRbM10pLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxYPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmRlcHRoTWFzayh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksWj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiAyNTV9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnN0ZW5jaWxNYXNrKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxKPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJue2Z1bmM6dGhpcy5nbC5BTFdBWVMscmVmOjAsbWFzazoyNTV9fSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0LmZ1bmMhPT1lLmZ1bmN8fHQucmVmIT09ZS5yZWZ8fHQubWFzayE9PWUubWFza3x8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnN0ZW5jaWxGdW5jKHQuZnVuYyx0LnJlZix0Lm1hc2spLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxLPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDtyZXR1cm5bdC5LRUVQLHQuS0VFUCx0LktFRVBdfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV18fHRbMl0hPT1lWzJdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuc3RlbmNpbE9wKHRbMF0sdFsxXSx0WzJdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksUT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDt0P2UuZW5hYmxlKGUuU1RFTkNJTF9URVNUKTplLmRpc2FibGUoZS5TVEVOQ0lMX1RFU1QpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShxKSwkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuWzAsMV19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmRlcHRoUmFuZ2UodFswXSx0WzFdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksdHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7dD9lLmVuYWJsZShlLkRFUFRIX1RFU1QpOmUuZGlzYWJsZShlLkRFUFRIX1RFU1QpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShxKSxldD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdsLkxFU1N9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmRlcHRoRnVuYyh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSkscnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7dD9lLmVuYWJsZShlLkJMRU5EKTplLmRpc2FibGUoZS5CTEVORCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KHEpLG50PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDtyZXR1cm5bdC5PTkUsdC5aRVJPXX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYmxlbmRGdW5jKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KHEpLGl0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLChyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuQ29sb3IudHJhbnNwYXJlbnR9LHIucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHQuciE9PWUucnx8dC5nIT09ZS5nfHx0LmIhPT1lLmJ8fHQuYSE9PWUuYXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmJsZW5kQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0scn0ocSksYXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5GVU5DX0FERH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYmxlbmRFcXVhdGlvbih0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksb3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7dD9lLmVuYWJsZShlLkNVTExfRkFDRSk6ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0ocSksc3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5CQUNLfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5jdWxsRmFjZSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksbHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5DQ1d9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmZyb250RmFjZSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksY3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wudXNlUHJvZ3JhbSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksdXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5URVhUVVJFMH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYWN0aXZlVGV4dHVyZSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksZnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3JldHVyblswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdfHx0WzJdIT09ZVsyXXx8dFszXSE9PWVbM118fHRoaXMuZGlydHkpJiYodGhpcy5nbC52aWV3cG9ydCh0WzBdLHRbMV0sdFsyXSx0WzNdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksaHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0ocSkscHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kUmVuZGVyYnVmZmVyKGUuUkVOREVSQlVGRkVSLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShxKSxkdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0ocSksZ3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kQnVmZmVyKGUuQVJSQVlfQlVGRkVSLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShxKSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbDtlLmJpbmRCdWZmZXIoZS5FTEVNRU5UX0FSUkFZX0JVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfSxlfShxKSx2dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUpLHRoaXMudmFvPWUuZXh0VmVydGV4QXJyYXlPYmplY3R9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy52YW8mJih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMudmFvLmJpbmRWZXJ0ZXhBcnJheU9FUyh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSkseXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gNH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19BTElHTk1FTlQsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KHEpLHh0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KHEpLGJ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfRkxJUF9ZX1dFQkdMLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShxKSxfdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSksdGhpcy5jb250ZXh0PWUsdGhpcy5wYXJlbnQ9cn1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGV9KHEpLHd0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9ITB9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCk7dmFyIGU9dGhpcy5nbDtlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGUuRlJBTUVCVUZGRVIsZS5DT0xPUl9BVFRBQ0hNRU5UMCxlLlRFWFRVUkVfMkQsdCwwKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oX3QpLFR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpO3ZhciBlPXRoaXMuZ2w7ZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihlLkZSQU1FQlVGRkVSLGUuREVQVEhfQVRUQUNITUVOVCxlLlJFTkRFUkJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oX3QpLGt0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY29udGV4dD10LHRoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD1yO3ZhciBpPXRoaXMuZnJhbWVidWZmZXI9dC5nbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO3RoaXMuY29sb3JBdHRhY2htZW50PW5ldyB3dCh0LGkpLG4mJih0aGlzLmRlcHRoQXR0YWNobWVudD1uZXcgVHQodCxpKSl9O2t0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsLGU9dGhpcy5jb2xvckF0dGFjaG1lbnQuZ2V0KCk7aWYoZSYmdC5kZWxldGVUZXh0dXJlKGUpLHRoaXMuZGVwdGhBdHRhY2htZW50KXt2YXIgcj10aGlzLmRlcHRoQXR0YWNobWVudC5nZXQoKTtyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyKX10LmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpfTt2YXIgTXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZnVuYz10LHRoaXMubWFzaz1lLHRoaXMucmFuZ2U9cn07TXQuUmVhZE9ubHk9ITEsTXQuUmVhZFdyaXRlPSEwLE10LmRpc2FibGVkPW5ldyBNdCg1MTksTXQuUmVhZE9ubHksWzAsMV0pO3ZhciBBdD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy50ZXN0PXQsdGhpcy5yZWY9ZSx0aGlzLm1hc2s9cix0aGlzLmZhaWw9bix0aGlzLmRlcHRoRmFpbD1pLHRoaXMucGFzcz1hfTtBdC5kaXNhYmxlZD1uZXcgQXQoe2Z1bmM6NTE5LG1hc2s6MH0sMCwwLDc2ODAsNzY4MCw3NjgwKTt2YXIgU3Q9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYmxlbmRGdW5jdGlvbj10LHRoaXMuYmxlbmRDb2xvcj1lLHRoaXMubWFzaz1yfTtTdC5kaXNhYmxlZD1uZXcgU3QoU3QuUmVwbGFjZT1bMSwwXSx0LkNvbG9yLnRyYW5zcGFyZW50LFshMSwhMSwhMSwhMV0pLFN0LnVuYmxlbmRlZD1uZXcgU3QoU3QuUmVwbGFjZSx0LkNvbG9yLnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pLFN0LmFscGhhQmxlbmRlZD1uZXcgU3QoWzEsNzcxXSx0LkNvbG9yLnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pO3ZhciBFdD1mdW5jdGlvbih0LGUscil7dGhpcy5lbmFibGU9dCx0aGlzLm1vZGU9ZSx0aGlzLmZyb250RmFjZT1yfTtFdC5kaXNhYmxlZD1uZXcgRXQoITEsMTAyOSwyMzA1KSxFdC5iYWNrQ0NXPW5ldyBFdCghMCwxMDI5LDIzMDUpO3ZhciBDdD1mdW5jdGlvbih0KXt0aGlzLmdsPXQsdGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdD10aGlzLmdsLmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSx0aGlzLmNsZWFyQ29sb3I9bmV3IEgodGhpcyksdGhpcy5jbGVhckRlcHRoPW5ldyBHKHRoaXMpLHRoaXMuY2xlYXJTdGVuY2lsPW5ldyBZKHRoaXMpLHRoaXMuY29sb3JNYXNrPW5ldyBXKHRoaXMpLHRoaXMuZGVwdGhNYXNrPW5ldyBYKHRoaXMpLHRoaXMuc3RlbmNpbE1hc2s9bmV3IFoodGhpcyksdGhpcy5zdGVuY2lsRnVuYz1uZXcgSih0aGlzKSx0aGlzLnN0ZW5jaWxPcD1uZXcgSyh0aGlzKSx0aGlzLnN0ZW5jaWxUZXN0PW5ldyBRKHRoaXMpLHRoaXMuZGVwdGhSYW5nZT1uZXcgJCh0aGlzKSx0aGlzLmRlcHRoVGVzdD1uZXcgdHQodGhpcyksdGhpcy5kZXB0aEZ1bmM9bmV3IGV0KHRoaXMpLHRoaXMuYmxlbmQ9bmV3IHJ0KHRoaXMpLHRoaXMuYmxlbmRGdW5jPW5ldyBudCh0aGlzKSx0aGlzLmJsZW5kQ29sb3I9bmV3IGl0KHRoaXMpLHRoaXMuYmxlbmRFcXVhdGlvbj1uZXcgYXQodGhpcyksdGhpcy5jdWxsRmFjZT1uZXcgb3QodGhpcyksdGhpcy5jdWxsRmFjZVNpZGU9bmV3IHN0KHRoaXMpLHRoaXMuZnJvbnRGYWNlPW5ldyBsdCh0aGlzKSx0aGlzLnByb2dyYW09bmV3IGN0KHRoaXMpLHRoaXMuYWN0aXZlVGV4dHVyZT1uZXcgdXQodGhpcyksdGhpcy52aWV3cG9ydD1uZXcgZnQodGhpcyksdGhpcy5iaW5kRnJhbWVidWZmZXI9bmV3IGh0KHRoaXMpLHRoaXMuYmluZFJlbmRlcmJ1ZmZlcj1uZXcgcHQodGhpcyksdGhpcy5iaW5kVGV4dHVyZT1uZXcgZHQodGhpcyksdGhpcy5iaW5kVmVydGV4QnVmZmVyPW5ldyBndCh0aGlzKSx0aGlzLmJpbmRFbGVtZW50QnVmZmVyPW5ldyBtdCh0aGlzKSx0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUz10aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0JiZuZXcgdnQodGhpcyksdGhpcy5waXhlbFN0b3JlVW5wYWNrPW5ldyB5dCh0aGlzKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhPW5ldyB4dCh0aGlzKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tGbGlwWT1uZXcgYnQodGhpcyksdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM9dC5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpLHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljJiYodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXg9dC5nZXRQYXJhbWV0ZXIodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKSksdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0PXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0JiYodC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIiksdGhpcy5leHRSZW5kZXJUb1RleHR1cmVIYWxmRmxvYXQ9dC5nZXRFeHRlbnNpb24oIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpKSx0aGlzLmV4dFRpbWVyUXVlcnk9dC5nZXRFeHRlbnNpb24oIkVYVF9kaXNqb2ludF90aW1lcl9xdWVyeSIpfTtDdC5wcm90b3R5cGUuc2V0RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMudW5iaW5kVkFPKCksdGhpcy5jbGVhckNvbG9yLnNldERlZmF1bHQoKSx0aGlzLmNsZWFyRGVwdGguc2V0RGVmYXVsdCgpLHRoaXMuY2xlYXJTdGVuY2lsLnNldERlZmF1bHQoKSx0aGlzLmNvbG9yTWFzay5zZXREZWZhdWx0KCksdGhpcy5kZXB0aE1hc2suc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbE1hc2suc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbEZ1bmMuc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbE9wLnNldERlZmF1bHQoKSx0aGlzLnN0ZW5jaWxUZXN0LnNldERlZmF1bHQoKSx0aGlzLmRlcHRoUmFuZ2Uuc2V0RGVmYXVsdCgpLHRoaXMuZGVwdGhUZXN0LnNldERlZmF1bHQoKSx0aGlzLmRlcHRoRnVuYy5zZXREZWZhdWx0KCksdGhpcy5ibGVuZC5zZXREZWZhdWx0KCksdGhpcy5ibGVuZEZ1bmMuc2V0RGVmYXVsdCgpLHRoaXMuYmxlbmRDb2xvci5zZXREZWZhdWx0KCksdGhpcy5ibGVuZEVxdWF0aW9uLnNldERlZmF1bHQoKSx0aGlzLmN1bGxGYWNlLnNldERlZmF1bHQoKSx0aGlzLmN1bGxGYWNlU2lkZS5zZXREZWZhdWx0KCksdGhpcy5mcm9udEZhY2Uuc2V0RGVmYXVsdCgpLHRoaXMucHJvZ3JhbS5zZXREZWZhdWx0KCksdGhpcy5hY3RpdmVUZXh0dXJlLnNldERlZmF1bHQoKSx0aGlzLmJpbmRGcmFtZWJ1ZmZlci5zZXREZWZhdWx0KCksdGhpcy5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldERlZmF1bHQoKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5zZXREZWZhdWx0KCl9LEN0LnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuY2xlYXJDb2xvci5kaXJ0eT0hMCx0aGlzLmNsZWFyRGVwdGguZGlydHk9ITAsdGhpcy5jbGVhclN0ZW5jaWwuZGlydHk9ITAsdGhpcy5jb2xvck1hc2suZGlydHk9ITAsdGhpcy5kZXB0aE1hc2suZGlydHk9ITAsdGhpcy5zdGVuY2lsTWFzay5kaXJ0eT0hMCx0aGlzLnN0ZW5jaWxGdW5jLmRpcnR5PSEwLHRoaXMuc3RlbmNpbE9wLmRpcnR5PSEwLHRoaXMuc3RlbmNpbFRlc3QuZGlydHk9ITAsdGhpcy5kZXB0aFJhbmdlLmRpcnR5PSEwLHRoaXMuZGVwdGhUZXN0LmRpcnR5PSEwLHRoaXMuZGVwdGhGdW5jLmRpcnR5PSEwLHRoaXMuYmxlbmQuZGlydHk9ITAsdGhpcy5ibGVuZEZ1bmMuZGlydHk9ITAsdGhpcy5ibGVuZENvbG9yLmRpcnR5PSEwLHRoaXMuYmxlbmRFcXVhdGlvbi5kaXJ0eT0hMCx0aGlzLmN1bGxGYWNlLmRpcnR5PSEwLHRoaXMuY3VsbEZhY2VTaWRlLmRpcnR5PSEwLHRoaXMuZnJvbnRGYWNlLmRpcnR5PSEwLHRoaXMucHJvZ3JhbS5kaXJ0eT0hMCx0aGlzLmFjdGl2ZVRleHR1cmUuZGlydHk9ITAsdGhpcy52aWV3cG9ydC5kaXJ0eT0hMCx0aGlzLmJpbmRGcmFtZWJ1ZmZlci5kaXJ0eT0hMCx0aGlzLmJpbmRSZW5kZXJidWZmZXIuZGlydHk9ITAsdGhpcy5iaW5kVGV4dHVyZS5kaXJ0eT0hMCx0aGlzLmJpbmRWZXJ0ZXhCdWZmZXIuZGlydHk9ITAsdGhpcy5iaW5kRWxlbWVudEJ1ZmZlci5kaXJ0eT0hMCx0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0JiYodGhpcy5iaW5kVmVydGV4QXJyYXlPRVMuZGlydHk9ITApLHRoaXMucGl4ZWxTdG9yZVVucGFjay5kaXJ0eT0hMCx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLmRpcnR5PSEwLHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLmRpcnR5PSEwfSxDdC5wcm90b3R5cGUuY3JlYXRlSW5kZXhCdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGoodGhpcyx0LGUpfSxDdC5wcm90b3R5cGUuY3JlYXRlVmVydGV4QnVmZmVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IFYodGhpcyx0LGUscil9LEN0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJidWZmZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2wsaT1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KGkpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUix0LGUsciksdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChudWxsKSxpfSxDdC5wcm90b3R5cGUuY3JlYXRlRnJhbWVidWZmZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcga3QodGhpcyx0LGUscil9LEN0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgZT10LmNvbG9yLHI9dC5kZXB0aCxuPXRoaXMuZ2wsaT0wO2UmJihpfD1uLkNPTE9SX0JVRkZFUl9CSVQsdGhpcy5jbGVhckNvbG9yLnNldChlKSx0aGlzLmNvbG9yTWFzay5zZXQoWyEwLCEwLCEwLCEwXSkpLHZvaWQgMCE9PXImJihpfD1uLkRFUFRIX0JVRkZFUl9CSVQsdGhpcy5kZXB0aFJhbmdlLnNldChbMCwxXSksdGhpcy5jbGVhckRlcHRoLnNldChyKSx0aGlzLmRlcHRoTWFzay5zZXQoITApKSxuLmNsZWFyKGkpfSxDdC5wcm90b3R5cGUuc2V0Q3VsbEZhY2U9ZnVuY3Rpb24odCl7ITE9PT10LmVuYWJsZT90aGlzLmN1bGxGYWNlLnNldCghMSk6KHRoaXMuY3VsbEZhY2Uuc2V0KCEwKSx0aGlzLmN1bGxGYWNlU2lkZS5zZXQodC5tb2RlKSx0aGlzLmZyb250RmFjZS5zZXQodC5mcm9udEZhY2UpKX0sQ3QucHJvdG90eXBlLnNldERlcHRoTW9kZT1mdW5jdGlvbih0KXt0LmZ1bmMhPT10aGlzLmdsLkFMV0FZU3x8dC5tYXNrPyh0aGlzLmRlcHRoVGVzdC5zZXQoITApLHRoaXMuZGVwdGhGdW5jLnNldCh0LmZ1bmMpLHRoaXMuZGVwdGhNYXNrLnNldCh0Lm1hc2spLHRoaXMuZGVwdGhSYW5nZS5zZXQodC5yYW5nZSkpOnRoaXMuZGVwdGhUZXN0LnNldCghMSl9LEN0LnByb3RvdHlwZS5zZXRTdGVuY2lsTW9kZT1mdW5jdGlvbih0KXt0LnRlc3QuZnVuYyE9PXRoaXMuZ2wuQUxXQVlTfHx0Lm1hc2s/KHRoaXMuc3RlbmNpbFRlc3Quc2V0KCEwKSx0aGlzLnN0ZW5jaWxNYXNrLnNldCh0Lm1hc2spLHRoaXMuc3RlbmNpbE9wLnNldChbdC5mYWlsLHQuZGVwdGhGYWlsLHQucGFzc10pLHRoaXMuc3RlbmNpbEZ1bmMuc2V0KHtmdW5jOnQudGVzdC5mdW5jLHJlZjp0LnJlZixtYXNrOnQudGVzdC5tYXNrfSkpOnRoaXMuc3RlbmNpbFRlc3Quc2V0KCExKX0sQ3QucHJvdG90eXBlLnNldENvbG9yTW9kZT1mdW5jdGlvbihlKXt0LmRlZXBFcXVhbChlLmJsZW5kRnVuY3Rpb24sU3QuUmVwbGFjZSk/dGhpcy5ibGVuZC5zZXQoITEpOih0aGlzLmJsZW5kLnNldCghMCksdGhpcy5ibGVuZEZ1bmMuc2V0KGUuYmxlbmRGdW5jdGlvbiksdGhpcy5ibGVuZENvbG9yLnNldChlLmJsZW5kQ29sb3IpKSx0aGlzLmNvbG9yTWFzay5zZXQoZS5tYXNrKX0sQ3QucHJvdG90eXBlLnVuYmluZFZBTz1mdW5jdGlvbigpe3RoaXMuZXh0VmVydGV4QXJyYXlPYmplY3QmJnRoaXMuYmluZFZlcnRleEFycmF5T0VTLnNldChudWxsKX07dmFyIEx0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGkpe3ZhciBhPXRoaXM7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLm9uKCJkYXRhIiwoZnVuY3Rpb24odCl7InNvdXJjZSI9PT10LmRhdGFUeXBlJiYibWV0YWRhdGEiPT09dC5zb3VyY2VEYXRhVHlwZSYmKGEuX3NvdXJjZUxvYWRlZD0hMCksYS5fc291cmNlTG9hZGVkJiYhYS5fcGF1c2VkJiYic291cmNlIj09PXQuZGF0YVR5cGUmJiJjb250ZW50Ij09PXQuc291cmNlRGF0YVR5cGUmJihhLnJlbG9hZCgpLGEudHJhbnNmb3JtJiZhLnVwZGF0ZShhLnRyYW5zZm9ybSkpfSkpLHRoaXMub24oImVycm9yIiwoZnVuY3Rpb24oKXthLl9zb3VyY2VFcnJvcmVkPSEwfSkpLHRoaXMuX3NvdXJjZT1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uZXcgRFtyLnR5cGVdKGUscixuLGkpO2lmKGEuaWQhPT1lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgU291cmNlIGlkIHRvIGJlICIrZSsiIGluc3RlYWQgb2YgIithLmlkKTtyZXR1cm4gdC5iaW5kQWxsKFsibG9hZCIsImFib3J0IiwidW5sb2FkIiwic2VyaWFsaXplIiwicHJlcGFyZSJdLGEpLGF9KHIsbixpLHRoaXMpLHRoaXMuX3RpbGVzPXt9LHRoaXMuX2NhY2hlPW5ldyBOKDAsdGhpcy5fdW5sb2FkVGlsZS5iaW5kKHRoaXMpKSx0aGlzLl90aW1lcnM9e30sdGhpcy5fY2FjaGVUaW1lcnM9e30sdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT1udWxsLHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzPXt9LHRoaXMuX2NvdmVyZWRUaWxlcz17fSx0aGlzLl9zdGF0ZT1uZXcgdC5Tb3VyY2VGZWF0dXJlU3RhdGV9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPXQ/dC5fbWF4VGlsZUNhY2hlU2l6ZTpudWxsLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uQWRkJiZ0aGlzLl9zb3VyY2Uub25BZGQodCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uUmVtb3ZlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUodCl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZUVycm9yZWQpcmV0dXJuITA7aWYoIXRoaXMuX3NvdXJjZUxvYWRlZClyZXR1cm4hMTtpZighdGhpcy5fc291cmNlLmxvYWRlZCgpKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07aWYoImxvYWRlZCIhPT1lLnN0YXRlJiYiZXJyb3JlZCIhPT1lLnN0YXRlKXJldHVybiExfXJldHVybiEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlfSxyLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3BhdXNlZD0hMH0sci5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7aWYodGhpcy5fcGF1c2VkKXt2YXIgdD10aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZTt0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdCYmdGhpcy5yZWxvYWQoKSx0aGlzLnRyYW5zZm9ybSYmdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pfX0sci5wcm90b3R5cGUuX2xvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0LGUpfSxyLnByb3RvdHlwZS5fdW5sb2FkVGlsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLnVubG9hZFRpbGUodCwoZnVuY3Rpb24oKXt9KSl9LHIucHJvdG90eXBlLl9hYm9ydFRpbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc291cmNlLmFib3J0VGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLmFib3J0VGlsZSh0LChmdW5jdGlvbigpe30pKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fc291cmNlLnByZXBhcmUmJnRoaXMuX3NvdXJjZS5wcmVwYXJlKCksdGhpcy5fc3RhdGUuY29hbGVzY2VDaGFuZ2VzKHRoaXMuX3RpbGVzLHRoaXMubWFwP3RoaXMubWFwLnBhaW50ZXI6bnVsbCksdGhpcy5fdGlsZXMpe3ZhciByPXRoaXMuX3RpbGVzW2VdO3IudXBsb2FkKHQpLHIucHJlcGFyZSh0aGlzLm1hcC5zdHlsZS5pbWFnZU1hbmFnZXIpfX0sci5wcm90b3R5cGUuZ2V0SWRzPWZ1bmN0aW9uKCl7cmV0dXJuIHQudmFsdWVzKHRoaXMuX3RpbGVzKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbGVJRH0pKS5zb3J0KEl0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKX0sci5wcm90b3R5cGUuZ2V0UmVuZGVyYWJsZUlkcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzLG49W107Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXRoaXMuX2lzSWRSZW5kZXJhYmxlKGksZSkmJm4ucHVzaCh0aGlzLl90aWxlc1tpXSk7cmV0dXJuIGU/bi5zb3J0KChmdW5jdGlvbihlLG4pe3ZhciBpPWUudGlsZUlELGE9bi50aWxlSUQsbz1uZXcgdC5Qb2ludChpLmNhbm9uaWNhbC54LGkuY2Fub25pY2FsLnkpLl9yb3RhdGUoci50cmFuc2Zvcm0uYW5nbGUpLHM9bmV3IHQuUG9pbnQoYS5jYW5vbmljYWwueCxhLmNhbm9uaWNhbC55KS5fcm90YXRlKHIudHJhbnNmb3JtLmFuZ2xlKTtyZXR1cm4gaS5vdmVyc2NhbGVkWi1hLm92ZXJzY2FsZWRafHxzLnktby55fHxzLngtby54fSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlsZUlELmtleX0pKTpuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlsZUlEfSkpLnNvcnQoSXQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpfSxyLnByb3RvdHlwZS5oYXNSZW5kZXJhYmxlUGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZmluZExvYWRlZFBhcmVudCh0LDApO3JldHVybiEhZSYmdGhpcy5faXNJZFJlbmRlcmFibGUoZS50aWxlSUQua2V5KX0sci5wcm90b3R5cGUuX2lzSWRSZW5kZXJhYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdJiZ0aGlzLl90aWxlc1t0XS5oYXNEYXRhKCkmJiF0aGlzLl9jb3ZlcmVkVGlsZXNbdF0mJihlfHwhdGhpcy5fdGlsZXNbdF0uaG9sZGluZ0ZvckZhZGUoKSl9LHIucHJvdG90eXBlLnJlbG9hZD1mdW5jdGlvbigpe2lmKHRoaXMuX3BhdXNlZCl0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMDtlbHNlIGZvcih2YXIgdCBpbiB0aGlzLl9jYWNoZS5yZXNldCgpLHRoaXMuX3RpbGVzKSJlcnJvcmVkIiE9PXRoaXMuX3RpbGVzW3RdLnN0YXRlJiZ0aGlzLl9yZWxvYWRUaWxlKHQsInJlbG9hZGluZyIpfSxyLnByb3RvdHlwZS5fcmVsb2FkVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3RpbGVzW3RdO3ImJigibG9hZGluZyIhPT1yLnN0YXRlJiYoci5zdGF0ZT1lKSx0aGlzLl9sb2FkVGlsZShyLHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLHIsdCxlKSkpfSxyLnByb3RvdHlwZS5fdGlsZUxvYWRlZD1mdW5jdGlvbihlLHIsbixpKXtpZihpKXJldHVybiBlLnN0YXRlPSJlcnJvcmVkIix2b2lkKDQwNCE9PWkuc3RhdHVzP3RoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkVycm9yRXZlbnQoaSx7dGlsZTplfSkpOnRoaXMudXBkYXRlKHRoaXMudHJhbnNmb3JtKSk7ZS50aW1lQWRkZWQ9dC5icm93c2VyLm5vdygpLCJleHBpcmVkIj09PW4mJihlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPSEwKSx0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIocixlKSwicmFzdGVyLWRlbSI9PT10aGlzLmdldFNvdXJjZSgpLnR5cGUmJmUuZGVtJiZ0aGlzLl9iYWNrZmlsbERFTShlKSx0aGlzLl9zdGF0ZS5pbml0aWFsaXplVGlsZVN0YXRlKGUsdGhpcy5tYXA/dGhpcy5tYXAucGFpbnRlcjpudWxsKSx0aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHRpbGU6ZSxjb29yZDplLnRpbGVJRH0pKX0sci5wcm90b3R5cGUuX2JhY2tmaWxsREVNPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmdldFJlbmRlcmFibGVJZHMoKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYodC5uZWlnaGJvcmluZ1RpbGVzJiZ0Lm5laWdoYm9yaW5nVGlsZXNbbl0pe3ZhciBpPXRoaXMuZ2V0VGlsZUJ5SUQobik7YSh0LGkpLGEoaSx0KX19ZnVuY3Rpb24gYSh0LGUpe3QubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSEwO3ZhciByPWUudGlsZUlELmNhbm9uaWNhbC54LXQudGlsZUlELmNhbm9uaWNhbC54LG49ZS50aWxlSUQuY2Fub25pY2FsLnktdC50aWxlSUQuY2Fub25pY2FsLnksaT1NYXRoLnBvdygyLHQudGlsZUlELmNhbm9uaWNhbC56KSxhPWUudGlsZUlELmtleTswPT09ciYmMD09PW58fE1hdGguYWJzKG4pPjF8fChNYXRoLmFicyhyKT4xJiYoMT09PU1hdGguYWJzKHIraSk/cis9aToxPT09TWF0aC5hYnMoci1pKSYmKHItPWkpKSxlLmRlbSYmdC5kZW0mJih0LmRlbS5iYWNrZmlsbEJvcmRlcihlLmRlbSxyLG4pLHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW2FdJiYodC5uZWlnaGJvcmluZ1RpbGVzW2FdLmJhY2tmaWxsZWQ9ITApKSl9fSxyLnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFRpbGVCeUlEKHQua2V5KX0sci5wcm90b3R5cGUuZ2V0VGlsZUJ5SUQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdfSxyLnByb3RvdHlwZS5fcmV0YWluTG9hZGVkQ2hpbGRyZW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXt2YXIgYT10aGlzLl90aWxlc1tpXTtpZighKG5baV18fCFhLmhhc0RhdGEoKXx8YS50aWxlSUQub3ZlcnNjYWxlZFo8PWV8fGEudGlsZUlELm92ZXJzY2FsZWRaPnIpKXtmb3IodmFyIG89YS50aWxlSUQ7YSYmYS50aWxlSUQub3ZlcnNjYWxlZFo+ZSsxOyl7dmFyIHM9YS50aWxlSUQuc2NhbGVkVG8oYS50aWxlSUQub3ZlcnNjYWxlZFotMSk7KGE9dGhpcy5fdGlsZXNbcy5rZXldKSYmYS5oYXNEYXRhKCkmJihvPXMpfWZvcih2YXIgbD1vO2wub3ZlcnNjYWxlZFo+ZTspaWYodFsobD1sLnNjYWxlZFRvKGwub3ZlcnNjYWxlZFotMSkpLmtleV0pe25bby5rZXldPW87YnJlYWt9fX19LHIucHJvdG90eXBlLmZpbmRMb2FkZWRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtpZih0LmtleSBpbiB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcyl7dmFyIHI9dGhpcy5fbG9hZGVkUGFyZW50VGlsZXNbdC5rZXldO3JldHVybiByJiZyLnRpbGVJRC5vdmVyc2NhbGVkWj49ZT9yOm51bGx9Zm9yKHZhciBuPXQub3ZlcnNjYWxlZFotMTtuPj1lO24tLSl7dmFyIGk9dC5zY2FsZWRUbyhuKSxhPXRoaXMuX2dldExvYWRlZFRpbGUoaSk7aWYoYSlyZXR1cm4gYX19LHIucHJvdG90eXBlLl9nZXRMb2FkZWRUaWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3Qua2V5XTtyZXR1cm4gZSYmZS5oYXNEYXRhKCk/ZTp0aGlzLl9jYWNoZS5nZXRCeUtleSh0LndyYXBwZWQoKS5rZXkpfSxyLnByb3RvdHlwZS51cGRhdGVDYWNoZVNpemU9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jZWlsKHQud2lkdGgvdGhpcy5fc291cmNlLnRpbGVTaXplKSsxLHI9TWF0aC5jZWlsKHQuaGVpZ2h0L3RoaXMuX3NvdXJjZS50aWxlU2l6ZSkrMSxuPU1hdGguZmxvb3IoZSpyKjUpLGk9Im51bWJlciI9PXR5cGVvZiB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplP01hdGgubWluKHRoaXMuX21heFRpbGVDYWNoZVNpemUsbik6bjt0aGlzLl9jYWNoZS5zZXRNYXhTaXplKGkpfSxyLnByb3RvdHlwZS5oYW5kbGVXcmFwSnVtcD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0LSh2b2lkIDA9PT10aGlzLl9wcmV2TG5nP3Q6dGhpcy5fcHJldkxuZykpLzM2MCk7aWYodGhpcy5fcHJldkxuZz10LGUpe3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0aGlzLl90aWxlcyl7dmFyIGk9dGhpcy5fdGlsZXNbbl07aS50aWxlSUQ9aS50aWxlSUQudW53cmFwVG8oaS50aWxlSUQud3JhcCtlKSxyW2kudGlsZUlELmtleV09aX1mb3IodmFyIGEgaW4gdGhpcy5fdGlsZXM9cix0aGlzLl90aW1lcnMpY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1thXSksZGVsZXRlIHRoaXMuX3RpbWVyc1thXTtmb3IodmFyIG8gaW4gdGhpcy5fdGlsZXMpdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKG8sdGhpcy5fdGlsZXNbb10pfX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYodGhpcy50cmFuc2Zvcm09ZSx0aGlzLl9zb3VyY2VMb2FkZWQmJiF0aGlzLl9wYXVzZWQpe3ZhciBpO3RoaXMudXBkYXRlQ2FjaGVTaXplKGUpLHRoaXMuaGFuZGxlV3JhcEp1bXAodGhpcy50cmFuc2Zvcm0uY2VudGVyLmxuZyksdGhpcy5fY292ZXJlZFRpbGVzPXt9LHRoaXMudXNlZD90aGlzLl9zb3VyY2UudGlsZUlEP2k9ZS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGhpcy5fc291cmNlLnRpbGVJRCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLmNhbm9uaWNhbC56LGUud3JhcCxlLmNhbm9uaWNhbC56LGUuY2Fub25pY2FsLngsZS5jYW5vbmljYWwueSl9KSk6KGk9ZS5jb3ZlcmluZ1RpbGVzKHt0aWxlU2l6ZTp0aGlzLl9zb3VyY2UudGlsZVNpemUsbWluem9vbTp0aGlzLl9zb3VyY2UubWluem9vbSxtYXh6b29tOnRoaXMuX3NvdXJjZS5tYXh6b29tLHJvdW5kWm9vbTp0aGlzLl9zb3VyY2Uucm91bmRab29tLHJlcGFyc2VPdmVyc2NhbGVkOnRoaXMuX3NvdXJjZS5yZXBhcnNlT3ZlcnNjYWxlZH0pLHRoaXMuX3NvdXJjZS5oYXNUaWxlJiYoaT1pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIG4uX3NvdXJjZS5oYXNUaWxlKHQpfSkpKSk6aT1bXTt2YXIgYT1lLmNvdmVyaW5nWm9vbUxldmVsKHRoaXMuX3NvdXJjZSksbz1NYXRoLm1heChhLXIubWF4T3Zlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLHM9TWF0aC5tYXgoYStyLm1heFVuZGVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSksbD10aGlzLl91cGRhdGVSZXRhaW5lZFRpbGVzKGksYSk7aWYoUHQodGhpcy5fc291cmNlLnR5cGUpKXtmb3IodmFyIGM9e30sdT17fSxmPTAsaD1PYmplY3Qua2V5cyhsKTtmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl0sZD1sW3BdLGc9dGhpcy5fdGlsZXNbcF07aWYoZyYmIShnLmZhZGVFbmRUaW1lJiZnLmZhZGVFbmRUaW1lPD10LmJyb3dzZXIubm93KCkpKXt2YXIgbT10aGlzLmZpbmRMb2FkZWRQYXJlbnQoZCxvKTttJiYodGhpcy5fYWRkVGlsZShtLnRpbGVJRCksY1ttLnRpbGVJRC5rZXldPW0udGlsZUlEKSx1W3BdPWR9fWZvcih2YXIgdiBpbiB0aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbih1LGEscyxsKSxjKWxbdl18fCh0aGlzLl9jb3ZlcmVkVGlsZXNbdl09ITAsbFt2XT1jW3ZdKX1mb3IodmFyIHkgaW4gbCl0aGlzLl90aWxlc1t5XS5jbGVhckZhZGVIb2xkKCk7Zm9yKHZhciB4PTAsYj10LmtleXNEaWZmZXJlbmNlKHRoaXMuX3RpbGVzLGwpO3g8Yi5sZW5ndGg7eCs9MSl7dmFyIF89Ylt4XSx3PXRoaXMuX3RpbGVzW19dO3cuaGFzU3ltYm9sQnVja2V0cyYmIXcuaG9sZGluZ0ZvckZhZGUoKT93LnNldEhvbGREdXJhdGlvbih0aGlzLm1hcC5fZmFkZUR1cmF0aW9uKTp3Lmhhc1N5bWJvbEJ1Y2tldHMmJiF3LnN5bWJvbEZhZGVGaW5pc2hlZCgpfHx0aGlzLl9yZW1vdmVUaWxlKF8pfXRoaXMuX3VwZGF0ZUxvYWRlZFBhcmVudFRpbGVDYWNoZSgpfX0sci5wcm90b3R5cGUucmVsZWFzZVN5bWJvbEZhZGVUaWxlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1t0XS5ob2xkaW5nRm9yRmFkZSgpJiZ0aGlzLl9yZW1vdmVUaWxlKHQpfSxyLnByb3RvdHlwZS5fdXBkYXRlUmV0YWluZWRUaWxlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj17fSxpPXt9LGE9TWF0aC5tYXgoZS1yLm1heE92ZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxvPU1hdGgubWF4KGUrci5tYXhVbmRlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLHM9e30sbD0wLGM9dDtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0sZj10aGlzLl9hZGRUaWxlKHUpO25bdS5rZXldPXUsZi5oYXNEYXRhKCl8fGU8dGhpcy5fc291cmNlLm1heHpvb20mJihzW3Uua2V5XT11KX10aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihzLGUsbyxuKTtmb3IodmFyIGg9MCxwPXQ7aDxwLmxlbmd0aDtoKz0xKXt2YXIgZD1wW2hdLGc9dGhpcy5fdGlsZXNbZC5rZXldO2lmKCFnLmhhc0RhdGEoKSl7aWYoZSsxPnRoaXMuX3NvdXJjZS5tYXh6b29tKXt2YXIgbT1kLmNoaWxkcmVuKHRoaXMuX3NvdXJjZS5tYXh6b29tKVswXSx2PXRoaXMuZ2V0VGlsZShtKTtpZih2JiZ2Lmhhc0RhdGEoKSl7blttLmtleV09bTtjb250aW51ZX19ZWxzZXt2YXIgeT1kLmNoaWxkcmVuKHRoaXMuX3NvdXJjZS5tYXh6b29tKTtpZihuW3lbMF0ua2V5XSYmblt5WzFdLmtleV0mJm5beVsyXS5rZXldJiZuW3lbM10ua2V5XSljb250aW51ZX1mb3IodmFyIHg9Zy53YXNSZXF1ZXN0ZWQoKSxiPWQub3ZlcnNjYWxlZFotMTtiPj1hOy0tYil7dmFyIF89ZC5zY2FsZWRUbyhiKTtpZihpW18ua2V5XSlicmVhaztpZihpW18ua2V5XT0hMCwhKGc9dGhpcy5nZXRUaWxlKF8pKSYmeCYmKGc9dGhpcy5fYWRkVGlsZShfKSksZyYmKG5bXy5rZXldPV8seD1nLndhc1JlcXVlc3RlZCgpLGcuaGFzRGF0YSgpKSlicmVha319fXJldHVybiBufSxyLnByb3RvdHlwZS5fdXBkYXRlTG9hZGVkUGFyZW50VGlsZUNhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzPXt9LHRoaXMuX3RpbGVzKXtmb3IodmFyIGU9W10scj12b2lkIDAsbj10aGlzLl90aWxlc1t0XS50aWxlSUQ7bi5vdmVyc2NhbGVkWj4wOyl7aWYobi5rZXkgaW4gdGhpcy5fbG9hZGVkUGFyZW50VGlsZXMpe3I9dGhpcy5fbG9hZGVkUGFyZW50VGlsZXNbbi5rZXldO2JyZWFrfWUucHVzaChuLmtleSk7dmFyIGk9bi5zY2FsZWRUbyhuLm92ZXJzY2FsZWRaLTEpO2lmKHI9dGhpcy5fZ2V0TG9hZGVkVGlsZShpKSlicmVhaztuPWl9Zm9yKHZhciBhPTAsbz1lO2E8by5sZW5ndGg7YSs9MSl0aGlzLl9sb2FkZWRQYXJlbnRUaWxlc1tvW2FdXT1yfX0sci5wcm90b3R5cGUuX2FkZFRpbGU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fdGlsZXNbZS5rZXldO2lmKHIpcmV0dXJuIHI7KHI9dGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKGUpKSYmKHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihlLmtleSxyKSxyLnRpbGVJRD1lLHRoaXMuX3N0YXRlLmluaXRpYWxpemVUaWxlU3RhdGUocix0aGlzLm1hcD90aGlzLm1hcC5wYWludGVyOm51bGwpLHRoaXMuX2NhY2hlVGltZXJzW2Uua2V5XSYmKGNsZWFyVGltZW91dCh0aGlzLl9jYWNoZVRpbWVyc1tlLmtleV0pLGRlbGV0ZSB0aGlzLl9jYWNoZVRpbWVyc1tlLmtleV0sdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKGUua2V5LHIpKSk7dmFyIG49Qm9vbGVhbihyKTtyZXR1cm4gbnx8KHI9bmV3IHQuVGlsZShlLHRoaXMuX3NvdXJjZS50aWxlU2l6ZSplLm92ZXJzY2FsZUZhY3RvcigpKSx0aGlzLl9sb2FkVGlsZShyLHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLHIsZS5rZXksci5zdGF0ZSkpKSxyPyhyLnVzZXMrKyx0aGlzLl90aWxlc1tlLmtleV09cixufHx0aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHt0aWxlOnIsY29vcmQ6ci50aWxlSUQsZGF0YVR5cGU6InNvdXJjZSJ9KSkscik6bnVsbH0sci5wcm90b3R5cGUuX3NldFRpbGVSZWxvYWRUaW1lcj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dCBpbiB0aGlzLl90aW1lcnMmJihjbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW3RdKSxkZWxldGUgdGhpcy5fdGltZXJzW3RdKTt2YXIgbj1lLmdldEV4cGlyeVRpbWVvdXQoKTtuJiYodGhpcy5fdGltZXJzW3RdPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5fcmVsb2FkVGlsZSh0LCJleHBpcmVkIiksZGVsZXRlIHIuX3RpbWVyc1t0XX0pLG4pKX0sci5wcm90b3R5cGUuX3JlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZXNbdF07ZSYmKGUudXNlcy0tLGRlbGV0ZSB0aGlzLl90aWxlc1t0XSx0aGlzLl90aW1lcnNbdF0mJihjbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW3RdKSxkZWxldGUgdGhpcy5fdGltZXJzW3RdKSxlLnVzZXM+MHx8KGUuaGFzRGF0YSgpJiYicmVsb2FkaW5nIiE9PWUuc3RhdGU/dGhpcy5fY2FjaGUuYWRkKGUudGlsZUlELGUsZS5nZXRFeHBpcnlUaW1lb3V0KCkpOihlLmFib3J0ZWQ9ITAsdGhpcy5fYWJvcnRUaWxlKGUpLHRoaXMuX3VubG9hZFRpbGUoZSkpKSl9LHIucHJvdG90eXBlLmNsZWFyVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCk7dGhpcy5fY2FjaGUucmVzZXQoKX0sci5wcm90b3R5cGUudGlsZXNJbj1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcyxhPVtdLG89dGhpcy50cmFuc2Zvcm07aWYoIW8pcmV0dXJuIGE7Zm9yKHZhciBzPW4/by5nZXRDYW1lcmFRdWVyeUdlb21ldHJ5KGUpOmUsbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG8ucG9pbnRDb29yZGluYXRlKHQpfSkpLGM9cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50Q29vcmRpbmF0ZSh0KX0pKSx1PXRoaXMuZ2V0SWRzKCksZj0xLzAsaD0xLzAscD0tMS8wLGQ9LTEvMCxnPTAsbT1jO2c8bS5sZW5ndGg7Zys9MSl7dmFyIHY9bVtnXTtmPU1hdGgubWluKGYsdi54KSxoPU1hdGgubWluKGgsdi55KSxwPU1hdGgubWF4KHAsdi54KSxkPU1hdGgubWF4KGQsdi55KX1mb3IodmFyIHk9ZnVuY3Rpb24oZSl7dmFyIG49aS5fdGlsZXNbdVtlXV07aWYoIW4uaG9sZGluZ0ZvckZhZGUoKSl7dmFyIHM9bi50aWxlSUQsZz1NYXRoLnBvdygyLG8uem9vbS1uLnRpbGVJRC5vdmVyc2NhbGVkWiksbT1yKm4ucXVlcnlQYWRkaW5nKnQuRVhURU5UL24udGlsZVNpemUvZyx2PVtzLmdldFRpbGVQb2ludChuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoZixoKSkscy5nZXRUaWxlUG9pbnQobmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKHAsZCkpXTtpZih2WzBdLngtbTx0LkVYVEVOVCYmdlswXS55LW08dC5FWFRFTlQmJnZbMV0ueCttPj0wJiZ2WzFdLnkrbT49MCl7dmFyIHk9bC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBzLmdldFRpbGVQb2ludCh0KX0pKSx4PWMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcy5nZXRUaWxlUG9pbnQodCl9KSk7YS5wdXNoKHt0aWxlOm4sdGlsZUlEOnMscXVlcnlHZW9tZXRyeTp5LGNhbWVyYVF1ZXJ5R2VvbWV0cnk6eCxzY2FsZTpnfSl9fX0seD0wO3g8dS5sZW5ndGg7eCsrKXkoeCk7cmV0dXJuIGF9LHIucHJvdG90eXBlLmdldFZpc2libGVDb29yZGluYXRlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPXRoaXMuZ2V0UmVuZGVyYWJsZUlkcyh0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90aWxlc1t0XS50aWxlSUR9KSksbj0wLGk9cjtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07YS5wb3NNYXRyaXg9dGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGEudG9VbndyYXBwZWQoKSl9cmV0dXJuIHJ9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLl9zb3VyY2UuaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2lmKFB0KHRoaXMuX3NvdXJjZS50eXBlKSlmb3IodmFyIGUgaW4gdGhpcy5fdGlsZXMpe3ZhciByPXRoaXMuX3RpbGVzW2VdO2lmKHZvaWQgMCE9PXIuZmFkZUVuZFRpbWUmJnIuZmFkZUVuZFRpbWU+PXQuYnJvd3Nlci5ub3coKSlyZXR1cm4hMH1yZXR1cm4hMX0sci5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9zdGF0ZS51cGRhdGVTdGF0ZSh0PXR8fCJfZ2VvanNvblRpbGVMYXllciIsZSxyKX0sci5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9zdGF0ZS5yZW1vdmVGZWF0dXJlU3RhdGUodD10fHwiX2dlb2pzb25UaWxlTGF5ZXIiLGUscil9LHIucHJvdG90eXBlLmdldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zdGF0ZS5nZXRTdGF0ZSh0PXR8fCJfZ2VvanNvblRpbGVMYXllciIsZSl9LHIucHJvdG90eXBlLnNldERlcGVuZGVuY2llcz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdGlsZXNbdF07biYmbi5zZXREZXBlbmRlbmNpZXMoZSxyKX0sci5wcm90b3R5cGUucmVsb2FkVGlsZXNGb3JEZXBlbmRlbmNpZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdGhpcy5fdGlsZXMpdGhpcy5fdGlsZXNbcl0uaGFzRGVwZW5kZW5jeSh0LGUpJiZ0aGlzLl9yZWxvYWRUaWxlKHIsInJlbG9hZGluZyIpO3RoaXMuX2NhY2hlLmZpbHRlcigoZnVuY3Rpb24ocil7cmV0dXJuIXIuaGFzRGVwZW5kZW5jeSh0LGUpfSkpfSxyfSh0LkV2ZW50ZWQpO2Z1bmN0aW9uIEl0KHQsZSl7dmFyIHI9TWF0aC5hYnMoMip0LndyYXApLSsodC53cmFwPDApLG49TWF0aC5hYnMoMiplLndyYXApLSsoZS53cmFwPDApO3JldHVybiB0Lm92ZXJzY2FsZWRaLWUub3ZlcnNjYWxlZFp8fG4tcnx8ZS5jYW5vbmljYWwueS10LmNhbm9uaWNhbC55fHxlLmNhbm9uaWNhbC54LXQuY2Fub25pY2FsLnh9ZnVuY3Rpb24gUHQodCl7cmV0dXJuInJhc3RlciI9PT10fHwiaW1hZ2UiPT09dHx8InZpZGVvIj09PXR9ZnVuY3Rpb24genQoKXtyZXR1cm4gbmV3IHQud2luZG93LldvcmtlcihZaS53b3JrZXJVcmwpfUx0Lm1heE92ZXJ6b29taW5nPTEwLEx0Lm1heFVuZGVyem9vbWluZz0zO3ZhciBPdD0ibWFwYm94Z2xfcHJlbG9hZGVkX3dvcmtlcl9wb29sIixEdD1mdW5jdGlvbigpe3RoaXMuYWN0aXZlPXt9fTtEdC5wcm90b3R5cGUuYWNxdWlyZT1mdW5jdGlvbih0KXtpZighdGhpcy53b3JrZXJzKWZvcih0aGlzLndvcmtlcnM9W107dGhpcy53b3JrZXJzLmxlbmd0aDxEdC53b3JrZXJDb3VudDspdGhpcy53b3JrZXJzLnB1c2gobmV3IHp0KTtyZXR1cm4gdGhpcy5hY3RpdmVbdF09ITAsdGhpcy53b3JrZXJzLnNsaWNlKCl9LER0LnByb3RvdHlwZS5yZWxlYXNlPWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLmFjdGl2ZVt0XSwwPT09dGhpcy5udW1BY3RpdmUoKSYmKHRoaXMud29ya2Vycy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnRlcm1pbmF0ZSgpfSkpLHRoaXMud29ya2Vycz1udWxsKX0sRHQucHJvdG90eXBlLmlzUHJlbG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmFjdGl2ZVtPdF19LER0LnByb3RvdHlwZS5udW1BY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5hY3RpdmUpLmxlbmd0aH07dmFyIFJ0LEZ0PU1hdGguZmxvb3IodC5icm93c2VyLmhhcmR3YXJlQ29uY3VycmVuY3kvMik7ZnVuY3Rpb24gQnQoKXtyZXR1cm4gUnR8fChSdD1uZXcgRHQpLFJ0fWZ1bmN0aW9uIE50KGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIGUpInJlZiIhPT1pJiYobltpXT1lW2ldKTtyZXR1cm4gdC5yZWZQcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QgaW4gciYmKG5bdF09clt0XSl9KSksbn1mdW5jdGlvbiBqdCh0KXt0PXQuc2xpY2UoKTtmb3IodmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdLmlkXT10W3JdO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKSJyZWYiaW4gdFtuXSYmKHRbbl09TnQodFtuXSxlW3Rbbl0ucmVmXSkpO3JldHVybiB0fUR0LndvcmtlckNvdW50PU1hdGgubWF4KE1hdGgubWluKEZ0LDYpLDEpO3ZhciBVdD17c2V0U3R5bGU6InNldFN0eWxlIixhZGRMYXllcjoiYWRkTGF5ZXIiLHJlbW92ZUxheWVyOiJyZW1vdmVMYXllciIsc2V0UGFpbnRQcm9wZXJ0eToic2V0UGFpbnRQcm9wZXJ0eSIsc2V0TGF5b3V0UHJvcGVydHk6InNldExheW91dFByb3BlcnR5IixzZXRGaWx0ZXI6InNldEZpbHRlciIsYWRkU291cmNlOiJhZGRTb3VyY2UiLHJlbW92ZVNvdXJjZToicmVtb3ZlU291cmNlIixzZXRHZW9KU09OU291cmNlRGF0YToic2V0R2VvSlNPTlNvdXJjZURhdGEiLHNldExheWVyWm9vbVJhbmdlOiJzZXRMYXllclpvb21SYW5nZSIsc2V0TGF5ZXJQcm9wZXJ0eToic2V0TGF5ZXJQcm9wZXJ0eSIsc2V0Q2VudGVyOiJzZXRDZW50ZXIiLHNldFpvb206InNldFpvb20iLHNldEJlYXJpbmc6InNldEJlYXJpbmciLHNldFBpdGNoOiJzZXRQaXRjaCIsc2V0U3ByaXRlOiJzZXRTcHJpdGUiLHNldEdseXBoczoic2V0R2x5cGhzIixzZXRUcmFuc2l0aW9uOiJzZXRUcmFuc2l0aW9uIixzZXRMaWdodDoic2V0TGlnaHQifTtmdW5jdGlvbiBWdCh0LGUscil7ci5wdXNoKHtjb21tYW5kOlV0LmFkZFNvdXJjZSxhcmdzOlt0LGVbdF1dfSl9ZnVuY3Rpb24gcXQodCxlLHIpe2UucHVzaCh7Y29tbWFuZDpVdC5yZW1vdmVTb3VyY2UsYXJnczpbdF19KSxyW3RdPSEwfWZ1bmN0aW9uIEh0KHQsZSxyLG4pe3F0KHQscixuKSxWdCh0LGUscil9ZnVuY3Rpb24gR3QoZSxyLG4pe3ZhciBpO2ZvcihpIGluIGVbbl0paWYoZVtuXS5oYXNPd25Qcm9wZXJ0eShpKSYmImRhdGEiIT09aSYmIXQuZGVlcEVxdWFsKGVbbl1baV0scltuXVtpXSkpcmV0dXJuITE7Zm9yKGkgaW4gcltuXSlpZihyW25dLmhhc093blByb3BlcnR5KGkpJiYiZGF0YSIhPT1pJiYhdC5kZWVwRXF1YWwoZVtuXVtpXSxyW25dW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBZdChlLHIsbixpLGEsbyl7dmFyIHM7Zm9yKHMgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkocykmJih0LmRlZXBFcXVhbChlW3NdLHJbc10pfHxuLnB1c2goe2NvbW1hbmQ6byxhcmdzOltpLHMscltzXSxhXX0pKTtmb3IocyBpbiByKXIuaGFzT3duUHJvcGVydHkocykmJiFlLmhhc093blByb3BlcnR5KHMpJiYodC5kZWVwRXF1YWwoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbaSxzLHJbc10sYV19KSl9ZnVuY3Rpb24gV3QodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gWHQodCxlKXtyZXR1cm4gdFtlLmlkXT1lLHR9dmFyIFp0PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZXNldCh0LGUpfTtadC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCxlKXt0aGlzLnBvaW50cz10fHxbXSx0aGlzLl9kaXN0YW5jZXM9WzBdO2Zvcih2YXIgcj0xO3I8dGhpcy5wb2ludHMubGVuZ3RoO3IrKyl0aGlzLl9kaXN0YW5jZXNbcl09dGhpcy5fZGlzdGFuY2VzW3ItMV0rdGhpcy5wb2ludHNbcl0uZGlzdCh0aGlzLnBvaW50c1tyLTFdKTt0aGlzLmxlbmd0aD10aGlzLl9kaXN0YW5jZXNbdGhpcy5fZGlzdGFuY2VzLmxlbmd0aC0xXSx0aGlzLnBhZGRpbmc9TWF0aC5taW4oZXx8MCwuNSp0aGlzLmxlbmd0aCksdGhpcy5wYWRkZWRMZW5ndGg9dGhpcy5sZW5ndGgtMip0aGlzLnBhZGRpbmd9LFp0LnByb3RvdHlwZS5sZXJwPWZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLnBvaW50cy5sZW5ndGgpcmV0dXJuIHRoaXMucG9pbnRzWzBdO2U9dC5jbGFtcChlLDAsMSk7Zm9yKHZhciByPTEsbj10aGlzLl9kaXN0YW5jZXNbcl0saT1lKnRoaXMucGFkZGVkTGVuZ3RoK3RoaXMucGFkZGluZztuPGkmJnI8dGhpcy5fZGlzdGFuY2VzLmxlbmd0aDspbj10aGlzLl9kaXN0YW5jZXNbKytyXTt2YXIgYT1yLTEsbz10aGlzLl9kaXN0YW5jZXNbYV0scz1uLW8sbD1zPjA/KGktbykvczowO3JldHVybiB0aGlzLnBvaW50c1thXS5tdWx0KDEtbCkuYWRkKHRoaXMucG9pbnRzW3JdLm11bHQobCkpfTt2YXIgSnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuYm94Q2VsbHM9W10saT10aGlzLmNpcmNsZUNlbGxzPVtdO3RoaXMueENlbGxDb3VudD1NYXRoLmNlaWwodC9yKSx0aGlzLnlDZWxsQ291bnQ9TWF0aC5jZWlsKGUvcik7Zm9yKHZhciBhPTA7YTx0aGlzLnhDZWxsQ291bnQqdGhpcy55Q2VsbENvdW50O2ErKyluLnB1c2goW10pLGkucHVzaChbXSk7dGhpcy5jaXJjbGVLZXlzPVtdLHRoaXMuYm94S2V5cz1bXSx0aGlzLmJib3hlcz1bXSx0aGlzLmNpcmNsZXM9W10sdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy54U2NhbGU9dGhpcy54Q2VsbENvdW50L3QsdGhpcy55U2NhbGU9dGhpcy55Q2VsbENvdW50L2UsdGhpcy5ib3hVaWQ9MCx0aGlzLmNpcmNsZVVpZD0wfTtmdW5jdGlvbiBLdChlLHIsbixpLGEpe3ZhciBvPXQuY3JlYXRlKCk7cmV0dXJuIHI/KHQuc2NhbGUobyxvLFsxL2EsMS9hLDFdKSxufHx0LnJvdGF0ZVoobyxvLGkuYW5nbGUpKTp0Lm11bHRpcGx5KG8saS5sYWJlbFBsYW5lTWF0cml4LGUpLG99ZnVuY3Rpb24gUXQoZSxyLG4saSxhKXtpZihyKXt2YXIgbz10LmNsb25lKGUpO3JldHVybiB0LnNjYWxlKG8sbyxbYSxhLDFdKSxufHx0LnJvdGF0ZVoobyxvLC1pLmFuZ2xlKSxvfXJldHVybiBpLmdsQ29vcmRNYXRyaXh9ZnVuY3Rpb24gJHQoZSxyKXt2YXIgbj1bZS54LGUueSwwLDFdO3VlKG4sbixyKTt2YXIgaT1uWzNdO3JldHVybntwb2ludDpuZXcgdC5Qb2ludChuWzBdL2ksblsxXS9pKSxzaWduZWREaXN0YW5jZUZyb21DYW1lcmE6aX19ZnVuY3Rpb24gdGUodCxlKXtyZXR1cm4uNSt0L2UqLjV9ZnVuY3Rpb24gZWUodCxlKXt2YXIgcj10WzBdL3RbM10sbj10WzFdL3RbM107cmV0dXJuIHI+PS1lWzBdJiZyPD1lWzBdJiZuPj0tZVsxXSYmbjw9ZVsxXX1mdW5jdGlvbiByZShlLHIsbixpLGEsbyxzLGwpe3ZhciBjPWk/ZS50ZXh0U2l6ZURhdGE6ZS5pY29uU2l6ZURhdGEsdT10LmV2YWx1YXRlU2l6ZUZvclpvb20oYyxuLnRyYW5zZm9ybS56b29tKSxmPVsyNTYvbi53aWR0aCoyKzEsMjU2L24uaGVpZ2h0KjIrMV0saD1pP2UudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk6ZS5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtoLmNsZWFyKCk7Zm9yKHZhciBwPWUubGluZVZlcnRleEFycmF5LGQ9aT9lLnRleHQucGxhY2VkU3ltYm9sQXJyYXk6ZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LGc9bi50cmFuc2Zvcm0ud2lkdGgvbi50cmFuc2Zvcm0uaGVpZ2h0LG09ITEsdj0wO3Y8ZC5sZW5ndGg7disrKXt2YXIgeT1kLmdldCh2KTtpZih5LmhpZGRlbnx8eS53cml0aW5nTW9kZT09PXQuV3JpdGluZ01vZGUudmVydGljYWwmJiFtKWNlKHkubnVtR2x5cGhzLGgpO2Vsc2V7bT0hMTt2YXIgeD1beS5hbmNob3JYLHkuYW5jaG9yWSwwLDFdO2lmKHQudHJhbnNmb3JtTWF0NCh4LHgsciksZWUoeCxmKSl7dmFyIGI9dGUobi50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx4WzNdKSxfPXQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShjLHUseSksdz1zP18vYjpfKmIsVD1uZXcgdC5Qb2ludCh5LmFuY2hvclgseS5hbmNob3JZKSxrPSR0KFQsYSkucG9pbnQsTT17fSxBPWFlKHksdywhMSxsLHIsYSxvLGUuZ2x5cGhPZmZzZXRBcnJheSxwLGgsayxULE0sZyk7bT1BLnVzZVZlcnRpY2FsLChBLm5vdEVub3VnaFJvb218fG18fEEubmVlZHNGbGlwcGluZyYmYWUoeSx3LCEwLGwscixhLG8sZS5nbHlwaE9mZnNldEFycmF5LHAsaCxrLFQsTSxnKS5ub3RFbm91Z2hSb29tKSYmY2UoeS5udW1HbHlwaHMsaCl9ZWxzZSBjZSh5Lm51bUdseXBocyxoKX19aT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGgpOmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoaCl9ZnVuY3Rpb24gbmUodCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj1zLmdseXBoU3RhcnRJbmRleCtzLm51bUdseXBocyxoPXMubGluZVN0YXJ0SW5kZXgscD1zLmxpbmVTdGFydEluZGV4K3MubGluZUxlbmd0aCxkPWUuZ2V0b2Zmc2V0WChzLmdseXBoU3RhcnRJbmRleCksZz1lLmdldG9mZnNldFgoZi0xKSxtPXNlKHQqZCxyLG4saSxhLG8scy5zZWdtZW50LGgscCxsLGMsdSk7aWYoIW0pcmV0dXJuIG51bGw7dmFyIHY9c2UodCpnLHIsbixpLGEsbyxzLnNlZ21lbnQsaCxwLGwsYyx1KTtyZXR1cm4gdj97Zmlyc3Q6bSxsYXN0OnZ9Om51bGx9ZnVuY3Rpb24gaWUoZSxyLG4saSl7cmV0dXJuIGU9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWwmJk1hdGguYWJzKG4ueS1yLnkpPk1hdGguYWJzKG4ueC1yLngpKmk/e3VzZVZlcnRpY2FsOiEwfTooZT09PXQuV3JpdGluZ01vZGUudmVydGljYWw/ci55PG4ueTpyLng+bi54KT97bmVlZHNGbGlwcGluZzohMH06bnVsbH1mdW5jdGlvbiBhZShlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQpe3ZhciBnLG09ci8yNCx2PWUubGluZU9mZnNldFgqbSx5PWUubGluZU9mZnNldFkqbTtpZihlLm51bUdseXBocz4xKXt2YXIgeD1lLmdseXBoU3RhcnRJbmRleCtlLm51bUdseXBocyxiPWUubGluZVN0YXJ0SW5kZXgsXz1lLmxpbmVTdGFydEluZGV4K2UubGluZUxlbmd0aCx3PW5lKG0sbCx2LHksbixmLGgsZSxjLG8scCk7aWYoIXcpcmV0dXJue25vdEVub3VnaFJvb206ITB9O3ZhciBUPSR0KHcuZmlyc3QucG9pbnQscykucG9pbnQsaz0kdCh3Lmxhc3QucG9pbnQscykucG9pbnQ7aWYoaSYmIW4pe3ZhciBNPWllKGUud3JpdGluZ01vZGUsVCxrLGQpO2lmKE0pcmV0dXJuIE19Zz1bdy5maXJzdF07Zm9yKHZhciBBPWUuZ2x5cGhTdGFydEluZGV4KzE7QTx4LTE7QSsrKWcucHVzaChzZShtKmwuZ2V0b2Zmc2V0WChBKSx2LHksbixmLGgsZS5zZWdtZW50LGIsXyxjLG8scCkpO2cucHVzaCh3Lmxhc3QpfWVsc2V7aWYoaSYmIW4pe3ZhciBTPSR0KGgsYSkucG9pbnQsRT1lLmxpbmVTdGFydEluZGV4K2Uuc2VnbWVudCsxLEM9bmV3IHQuUG9pbnQoYy5nZXR4KEUpLGMuZ2V0eShFKSksTD0kdChDLGEpLEk9TC5zaWduZWREaXN0YW5jZUZyb21DYW1lcmE+MD9MLnBvaW50Om9lKGgsQyxTLDEsYSksUD1pZShlLndyaXRpbmdNb2RlLFMsSSxkKTtpZihQKXJldHVybiBQfXZhciB6PXNlKG0qbC5nZXRvZmZzZXRYKGUuZ2x5cGhTdGFydEluZGV4KSx2LHksbixmLGgsZS5zZWdtZW50LGUubGluZVN0YXJ0SW5kZXgsZS5saW5lU3RhcnRJbmRleCtlLmxpbmVMZW5ndGgsYyxvLHApO2lmKCF6KXJldHVybntub3RFbm91Z2hSb29tOiEwfTtnPVt6XX1mb3IodmFyIE89MCxEPWc7TzxELmxlbmd0aDtPKz0xKXt2YXIgUj1EW09dO3QuYWRkRHluYW1pY0F0dHJpYnV0ZXModSxSLnBvaW50LFIuYW5nbGUpfXJldHVybnt9fWZ1bmN0aW9uIG9lKHQsZSxyLG4saSl7dmFyIGE9JHQodC5hZGQodC5zdWIoZSkuX3VuaXQoKSksaSkucG9pbnQsbz1yLnN1YihhKTtyZXR1cm4gci5hZGQoby5fbXVsdChuL28ubWFnKCkpKX1mdW5jdGlvbiBzZShlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCl7dmFyIHA9aT9lLXI6ZStyLGQ9cD4wPzE6LTEsZz0wO2kmJihkKj0tMSxnPU1hdGguUEkpLGQ8MCYmKGcrPU1hdGguUEkpO2Zvcih2YXIgbT1kPjA/bCtzOmwrcysxLHY9YSx5PWEseD0wLGI9MCxfPU1hdGguYWJzKHApLHc9W107eCtiPD1fOyl7aWYoKG0rPWQpPGx8fG0+PWMpcmV0dXJuIG51bGw7aWYoeT12LHcucHVzaCh2KSx2b2lkIDA9PT0odj1oW21dKSl7dmFyIFQ9bmV3IHQuUG9pbnQodS5nZXR4KG0pLHUuZ2V0eShtKSksaz0kdChULGYpO2lmKGsuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPjApdj1oW21dPWsucG9pbnQ7ZWxzZXt2YXIgTT1tLWQ7dj1vZSgwPT09eD9vOm5ldyB0LlBvaW50KHUuZ2V0eChNKSx1LmdldHkoTSkpLFQseSxfLXgrMSxmKX19eCs9YixiPXkuZGlzdCh2KX12YXIgQT0oXy14KS9iLFM9di5zdWIoeSksRT1TLm11bHQoQSkuX2FkZCh5KTtFLl9hZGQoUy5fdW5pdCgpLl9wZXJwKCkuX211bHQobipkKSk7dmFyIEM9ZytNYXRoLmF0YW4yKHYueS15Lnksdi54LXkueCk7cmV0dXJuIHcucHVzaChFKSx7cG9pbnQ6RSxhbmdsZTpDLHBhdGg6d319SnQucHJvdG90eXBlLmtleXNMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3hLZXlzLmxlbmd0aCt0aGlzLmNpcmNsZUtleXMubGVuZ3RofSxKdC5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRCb3hDZWxsLHRoaXMuYm94VWlkKyspLHRoaXMuYm94S2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LEp0LnByb3RvdHlwZS5pbnNlcnRDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fZm9yRWFjaENlbGwoZS1uLHItbixlK24scituLHRoaXMuX2luc2VydENpcmNsZUNlbGwsdGhpcy5jaXJjbGVVaWQrKyksdGhpcy5jaXJjbGVLZXlzLnB1c2godCksdGhpcy5jaXJjbGVzLnB1c2goZSksdGhpcy5jaXJjbGVzLnB1c2gociksdGhpcy5jaXJjbGVzLnB1c2gobil9LEp0LnByb3RvdHlwZS5faW5zZXJ0Qm94Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5ib3hDZWxsc1tpXS5wdXNoKGEpfSxKdC5wcm90b3R5cGUuX2luc2VydENpcmNsZUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY2lyY2xlQ2VsbHNbaV0ucHVzaChhKX0sSnQucHJvdG90eXBlLl9xdWVyeT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYocjwwfHx0PnRoaXMud2lkdGh8fG48MHx8ZT50aGlzLmhlaWdodClyZXR1cm4haSYmW107dmFyIG89W107aWYodDw9MCYmZTw9MCYmdGhpcy53aWR0aDw9ciYmdGhpcy5oZWlnaHQ8PW4pe2lmKGkpcmV0dXJuITA7Zm9yKHZhciBzPTA7czx0aGlzLmJveEtleXMubGVuZ3RoO3MrKylvLnB1c2goe2tleTp0aGlzLmJveEtleXNbc10seDE6dGhpcy5iYm94ZXNbNCpzXSx5MTp0aGlzLmJib3hlc1s0KnMrMV0seDI6dGhpcy5iYm94ZXNbNCpzKzJdLHkyOnRoaXMuYmJveGVzWzQqcyszXX0pO2Zvcih2YXIgbD0wO2w8dGhpcy5jaXJjbGVLZXlzLmxlbmd0aDtsKyspe3ZhciBjPXRoaXMuY2lyY2xlc1szKmxdLHU9dGhpcy5jaXJjbGVzWzMqbCsxXSxmPXRoaXMuY2lyY2xlc1szKmwrMl07by5wdXNoKHtrZXk6dGhpcy5jaXJjbGVLZXlzW2xdLHgxOmMtZix5MTp1LWYseDI6YytmLHkyOnUrZn0pfXJldHVybiBhP28uZmlsdGVyKGEpOm99cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKHQsZSxyLG4sdGhpcy5fcXVlcnlDZWxsLG8se2hpdFRlc3Q6aSxzZWVuVWlkczp7Ym94Ont9LGNpcmNsZTp7fX19LGEpLGk/by5sZW5ndGg+MDpvfSxKdC5wcm90b3R5cGUuX3F1ZXJ5Q2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dC1yLG89dCtyLHM9ZS1yLGw9ZStyO2lmKG88MHx8YT50aGlzLndpZHRofHxsPDB8fHM+dGhpcy5oZWlnaHQpcmV0dXJuIW4mJltdO3ZhciBjPVtdO3JldHVybiB0aGlzLl9mb3JFYWNoQ2VsbChhLHMsbyxsLHRoaXMuX3F1ZXJ5Q2VsbENpcmNsZSxjLHtoaXRUZXN0Om4sY2lyY2xlOnt4OnQseTplLHJhZGl1czpyfSxzZWVuVWlkczp7Ym94Ont9LGNpcmNsZTp7fX19LGkpLG4/Yy5sZW5ndGg+MDpjfSxKdC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdGhpcy5fcXVlcnkodCxlLHIsbiwhMSxpKX0sSnQucHJvdG90eXBlLmhpdFRlc3Q9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdGhpcy5fcXVlcnkodCxlLHIsbiwhMCxpKX0sSnQucHJvdG90eXBlLmhpdFRlc3RDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX3F1ZXJ5Q2lyY2xlKHQsZSxyLCEwLG4pfSxKdC5wcm90b3R5cGUuX3F1ZXJ5Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPW8uc2VlblVpZHMsYz10aGlzLmJveENlbGxzW2ldO2lmKG51bGwhPT1jKWZvcih2YXIgdT10aGlzLmJib3hlcyxmPTAsaD1jO2Y8aC5sZW5ndGg7Zis9MSl7dmFyIHA9aFtmXTtpZighbC5ib3hbcF0pe2wuYm94W3BdPSEwO3ZhciBkPTQqcDtpZih0PD11W2QrMl0mJmU8PXVbZCszXSYmcj49dVtkKzBdJiZuPj11W2QrMV0mJighc3x8cyh0aGlzLmJveEtleXNbcF0pKSl7aWYoby5oaXRUZXN0KXJldHVybiBhLnB1c2goITApLCEwO2EucHVzaCh7a2V5OnRoaXMuYm94S2V5c1twXSx4MTp1W2RdLHkxOnVbZCsxXSx4Mjp1W2QrMl0seTI6dVtkKzNdfSl9fX12YXIgZz10aGlzLmNpcmNsZUNlbGxzW2ldO2lmKG51bGwhPT1nKWZvcih2YXIgbT10aGlzLmNpcmNsZXMsdj0wLHk9Zzt2PHkubGVuZ3RoO3YrPTEpe3ZhciB4PXlbdl07aWYoIWwuY2lyY2xlW3hdKXtsLmNpcmNsZVt4XT0hMDt2YXIgYj0zKng7aWYodGhpcy5fY2lyY2xlQW5kUmVjdENvbGxpZGUobVtiXSxtW2IrMV0sbVtiKzJdLHQsZSxyLG4pJiYoIXN8fHModGhpcy5jaXJjbGVLZXlzW3hdKSkpe2lmKG8uaGl0VGVzdClyZXR1cm4gYS5wdXNoKCEwKSwhMDt2YXIgXz1tW2JdLHc9bVtiKzFdLFQ9bVtiKzJdO2EucHVzaCh7a2V5OnRoaXMuY2lyY2xlS2V5c1t4XSx4MTpfLVQseTE6dy1ULHgyOl8rVCx5Mjp3K1R9KX19fX0sSnQucHJvdG90eXBlLl9xdWVyeUNlbGxDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD1vLmNpcmNsZSxjPW8uc2VlblVpZHMsdT10aGlzLmJveENlbGxzW2ldO2lmKG51bGwhPT11KWZvcih2YXIgZj10aGlzLmJib3hlcyxoPTAscD11O2g8cC5sZW5ndGg7aCs9MSl7dmFyIGQ9cFtoXTtpZighYy5ib3hbZF0pe2MuYm94W2RdPSEwO3ZhciBnPTQqZDtpZih0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShsLngsbC55LGwucmFkaXVzLGZbZyswXSxmW2crMV0sZltnKzJdLGZbZyszXSkmJighc3x8cyh0aGlzLmJveEtleXNbZF0pKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19dmFyIG09dGhpcy5jaXJjbGVDZWxsc1tpXTtpZihudWxsIT09bSlmb3IodmFyIHY9dGhpcy5jaXJjbGVzLHk9MCx4PW07eTx4Lmxlbmd0aDt5Kz0xKXt2YXIgYj14W3ldO2lmKCFjLmNpcmNsZVtiXSl7Yy5jaXJjbGVbYl09ITA7dmFyIF89MypiO2lmKHRoaXMuX2NpcmNsZXNDb2xsaWRlKHZbX10sdltfKzFdLHZbXysyXSxsLngsbC55LGwucmFkaXVzKSYmKCFzfHxzKHRoaXMuY2lyY2xlS2V5c1tiXSkpKXJldHVybiBhLnB1c2goITApLCEwfX19LEp0LnByb3RvdHlwZS5fZm9yRWFjaENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9dGhpcy5fY29udmVydFRvWENlbGxDb29yZCh0KSxjPXRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQoZSksdT10aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHIpLGY9dGhpcy5fY29udmVydFRvWUNlbGxDb29yZChuKSxoPWw7aDw9dTtoKyspZm9yKHZhciBwPWM7cDw9ZjtwKyspaWYoaS5jYWxsKHRoaXMsdCxlLHIsbix0aGlzLnhDZWxsQ291bnQqcCtoLGEsbyxzKSlyZXR1cm59LEp0LnByb3RvdHlwZS5fY29udmVydFRvWENlbGxDb29yZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLnhDZWxsQ291bnQtMSxNYXRoLmZsb29yKHQqdGhpcy54U2NhbGUpKSl9LEp0LnByb3RvdHlwZS5fY29udmVydFRvWUNlbGxDb29yZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLnlDZWxsQ291bnQtMSxNYXRoLmZsb29yKHQqdGhpcy55U2NhbGUpKSl9LEp0LnByb3RvdHlwZS5fY2lyY2xlc0NvbGxpZGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPW4tdCxzPWktZSxsPXIrYTtyZXR1cm4gbCpsPm8qbytzKnN9LEp0LnByb3RvdHlwZS5fY2lyY2xlQW5kUmVjdENvbGxpZGU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9KGEtbikvMixsPU1hdGguYWJzKHQtKG4rcykpO2lmKGw+cytyKXJldHVybiExO3ZhciBjPShvLWkpLzIsdT1NYXRoLmFicyhlLShpK2MpKTtpZih1PmMrcilyZXR1cm4hMTtpZihsPD1zfHx1PD1jKXJldHVybiEwO3ZhciBmPWwtcyxoPXUtYztyZXR1cm4gZipmK2gqaDw9cipyfTt2YXIgbGU9bmV3IEZsb2F0MzJBcnJheShbLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDBdKTtmdW5jdGlvbiBjZSh0LGUpe2Zvcih2YXIgcj0wO3I8dDtyKyspe3ZhciBuPWUubGVuZ3RoO2UucmVzaXplKG4rNCksZS5mbG9hdDMyLnNldChsZSwzKm4pfX1mdW5jdGlvbiB1ZSh0LGUscil7dmFyIG49ZVswXSxpPWVbMV07cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzEyXSx0WzFdPXJbMV0qbityWzVdKmkrclsxM10sdFszXT1yWzNdKm4rcls3XSppK3JbMTVdLHR9dmFyIGZlPWZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT1lJiYoZT1uZXcgSnQodC53aWR0aCsyMDAsdC5oZWlnaHQrMjAwLDI1KSksdm9pZCAwPT09ciYmKHI9bmV3IEp0KHQud2lkdGgrMjAwLHQuaGVpZ2h0KzIwMCwyNSkpLHRoaXMudHJhbnNmb3JtPXQsdGhpcy5ncmlkPWUsdGhpcy5pZ25vcmVkR3JpZD1yLHRoaXMucGl0Y2hmYWN0b3I9TWF0aC5jb3ModC5fcGl0Y2gpKnQuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx0aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnk9dC53aWR0aCsxMDAsdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeT10LmhlaWdodCsxMDAsdGhpcy5ncmlkUmlnaHRCb3VuZGFyeT10LndpZHRoKzIwMCx0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeT10LmhlaWdodCsyMDB9O2Z1bmN0aW9uIGhlKGUscixuKXtyZXR1cm4gcioodC5FWFRFTlQvKGUudGlsZVNpemUqTWF0aC5wb3coMixuLWUudGlsZUlELm92ZXJzY2FsZWRaKSkpfWZlLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkJveD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW8obix0LmFuY2hvclBvaW50WCx0LmFuY2hvclBvaW50WSksbz1yKmEucGVyc3BlY3RpdmVSYXRpbyxzPXQueDEqbythLnBvaW50LngsbD10LnkxKm8rYS5wb2ludC55LGM9dC54MipvK2EucG9pbnQueCx1PXQueTIqbythLnBvaW50Lnk7cmV0dXJuIXRoaXMuaXNJbnNpZGVHcmlkKHMsbCxjLHUpfHwhZSYmdGhpcy5ncmlkLmhpdFRlc3QocyxsLGMsdSxpKT97Ym94OltdLG9mZnNjcmVlbjohMX06e2JveDpbcyxsLGMsdV0sb2Zmc2NyZWVuOnRoaXMuaXNPZmZzY3JlZW4ocyxsLGMsdSl9fSxmZS5wcm90b3R5cGUucGxhY2VDb2xsaXNpb25DaXJjbGVzPWZ1bmN0aW9uKGUscixuLGksYSxvLHMsbCxjLHUsZixoLHApe3ZhciBkPVtdLGc9bmV3IHQuUG9pbnQoci5hbmNob3JYLHIuYW5jaG9yWSksbT0kdChnLG8pLHY9dGUodGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxtLnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSkseT0odT9hL3Y6YSp2KS90Lk9ORV9FTSx4PSR0KGcscykucG9pbnQsYj1uZSh5LGksci5saW5lT2Zmc2V0WCp5LHIubGluZU9mZnNldFkqeSwhMSx4LGcscixuLHMse30pLF89ITEsdz0hMSxUPSEwO2lmKGIpe2Zvcih2YXIgaz0uNSpoKnYrcCxNPW5ldyB0LlBvaW50KC0xMDAsLTEwMCksQT1uZXcgdC5Qb2ludCh0aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnksdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeSksUz1uZXcgWnQsRT1iLmZpcnN0LEM9Yi5sYXN0LEw9W10sST1FLnBhdGgubGVuZ3RoLTE7ST49MTtJLS0pTC5wdXNoKEUucGF0aFtJXSk7Zm9yKHZhciBQPTE7UDxDLnBhdGgubGVuZ3RoO1ArKylMLnB1c2goQy5wYXRoW1BdKTt2YXIgej0yLjUqaztpZihsKXt2YXIgTz1MLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuICR0KHQsbCl9KSk7TD1PLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYTw9MH0pKT9bXTpPLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9pbnR9KSl9dmFyIEQ9W107aWYoTC5sZW5ndGg+MCl7Zm9yKHZhciBSPUxbMF0uY2xvbmUoKSxGPUxbMF0uY2xvbmUoKSxCPTE7QjxMLmxlbmd0aDtCKyspUi54PU1hdGgubWluKFIueCxMW0JdLngpLFIueT1NYXRoLm1pbihSLnksTFtCXS55KSxGLng9TWF0aC5tYXgoRi54LExbQl0ueCksRi55PU1hdGgubWF4KEYueSxMW0JdLnkpO0Q9Ui54Pj1NLngmJkYueDw9QS54JiZSLnk+PU0ueSYmRi55PD1BLnk/W0xdOkYueDxNLnh8fFIueD5BLnh8fEYueTxNLnl8fFIueT5BLnk/W106dC5jbGlwTGluZShbTF0sTS54LE0ueSxBLngsQS55KX1mb3IodmFyIE49MCxqPUQ7TjxqLmxlbmd0aDtOKz0xKXt2YXIgVTtTLnJlc2V0KGpbTl0sLjI1KmspLFU9Uy5sZW5ndGg8PS41Kms/MTpNYXRoLmNlaWwoUy5wYWRkZWRMZW5ndGgveikrMTtmb3IodmFyIFY9MDtWPFU7VisrKXt2YXIgcT1WL01hdGgubWF4KFUtMSwxKSxIPVMubGVycChxKSxHPUgueCsxMDAsWT1ILnkrMTAwO2QucHVzaChHLFksaywwKTt2YXIgVz1HLWssWD1ZLWssWj1HK2ssSj1ZK2s7aWYoVD1UJiZ0aGlzLmlzT2Zmc2NyZWVuKFcsWCxaLEopLHc9d3x8dGhpcy5pc0luc2lkZUdyaWQoVyxYLFosSiksIWUmJnRoaXMuZ3JpZC5oaXRUZXN0Q2lyY2xlKEcsWSxrLGYpJiYoXz0hMCwhYykpcmV0dXJue2NpcmNsZXM6W10sb2Zmc2NyZWVuOiExLGNvbGxpc2lvbkRldGVjdGVkOl99fX19cmV0dXJue2NpcmNsZXM6IWMmJl98fCF3P1tdOmQsb2Zmc2NyZWVuOlQsY29sbGlzaW9uRGV0ZWN0ZWQ6X319LGZlLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkU3ltYm9scz1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmdyaWQua2V5c0xlbmd0aCgpJiYwPT09dGhpcy5pZ25vcmVkR3JpZC5rZXlzTGVuZ3RoKCkpcmV0dXJue307Zm9yKHZhciByPVtdLG49MS8wLGk9MS8wLGE9LTEvMCxvPS0xLzAscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc10sdT1uZXcgdC5Qb2ludChjLngrMTAwLGMueSsxMDApO249TWF0aC5taW4obix1LngpLGk9TWF0aC5taW4oaSx1LnkpLGE9TWF0aC5tYXgoYSx1LngpLG89TWF0aC5tYXgobyx1LnkpLHIucHVzaCh1KX1mb3IodmFyIGY9e30saD17fSxwPTAsZD10aGlzLmdyaWQucXVlcnkobixpLGEsbykuY29uY2F0KHRoaXMuaWdub3JlZEdyaWQucXVlcnkobixpLGEsbykpO3A8ZC5sZW5ndGg7cCs9MSl7dmFyIGc9ZFtwXSxtPWcua2V5O2lmKHZvaWQgMD09PWZbbS5idWNrZXRJbnN0YW5jZUlkXSYmKGZbbS5idWNrZXRJbnN0YW5jZUlkXT17fSksIWZbbS5idWNrZXRJbnN0YW5jZUlkXVttLmZlYXR1cmVJbmRleF0pe3ZhciB2PVtuZXcgdC5Qb2ludChnLngxLGcueTEpLG5ldyB0LlBvaW50KGcueDIsZy55MSksbmV3IHQuUG9pbnQoZy54MixnLnkyKSxuZXcgdC5Qb2ludChnLngxLGcueTIpXTt0LnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihyLHYpJiYoZlttLmJ1Y2tldEluc3RhbmNlSWRdW20uZmVhdHVyZUluZGV4XT0hMCx2b2lkIDA9PT1oW20uYnVja2V0SW5zdGFuY2VJZF0mJihoW20uYnVja2V0SW5zdGFuY2VJZF09W10pLGhbbS5idWNrZXRJbnN0YW5jZUlkXS5wdXNoKG0uZmVhdHVyZUluZGV4KSl9fXJldHVybiBofSxmZS5wcm90b3R5cGUuaW5zZXJ0Q29sbGlzaW9uQm94PWZ1bmN0aW9uKHQsZSxyLG4saSl7KGU/dGhpcy5pZ25vcmVkR3JpZDp0aGlzLmdyaWQpLmluc2VydCh7YnVja2V0SW5zdGFuY2VJZDpyLGZlYXR1cmVJbmRleDpuLGNvbGxpc2lvbkdyb3VwSUQ6aX0sdFswXSx0WzFdLHRbMl0sdFszXSl9LGZlLnByb3RvdHlwZS5pbnNlcnRDb2xsaXNpb25DaXJjbGVzPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPWU/dGhpcy5pZ25vcmVkR3JpZDp0aGlzLmdyaWQsbz17YnVja2V0SW5zdGFuY2VJZDpyLGZlYXR1cmVJbmRleDpuLGNvbGxpc2lvbkdyb3VwSUQ6aX0scz0wO3M8dC5sZW5ndGg7cys9NClhLmluc2VydENpcmNsZShvLHRbc10sdFtzKzFdLHRbcysyXSl9LGZlLnByb3RvdHlwZS5wcm9qZWN0QW5kR2V0UGVyc3BlY3RpdmVSYXRpbz1mdW5jdGlvbihlLHIsbil7dmFyIGk9W3IsbiwwLDFdO3JldHVybiB1ZShpLGksZSkse3BvaW50Om5ldyB0LlBvaW50KChpWzBdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS53aWR0aCsxMDAsKC1pWzFdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS5oZWlnaHQrMTAwKSxwZXJzcGVjdGl2ZVJhdGlvOi41K3RoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvaVszXSouNX19LGZlLnByb3RvdHlwZS5pc09mZnNjcmVlbj1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gcjwxMDB8fHQ+PXRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeXx8bjwxMDB8fGU+dGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeX0sZmUucHJvdG90eXBlLmlzSW5zaWRlR3JpZD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gcj49MCYmdDx0aGlzLmdyaWRSaWdodEJvdW5kYXJ5JiZuPj0wJiZlPHRoaXMuZ3JpZEJvdHRvbUJvdW5kYXJ5fSxmZS5wcm90b3R5cGUuZ2V0Vmlld3BvcnRNYXRyaXg9ZnVuY3Rpb24oKXt2YXIgZT10LmlkZW50aXR5KFtdKTtyZXR1cm4gdC50cmFuc2xhdGUoZSxlLFstMTAwLC0xMDAsMF0pLGV9O3ZhciBwZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLm9wYWNpdHk9dD9NYXRoLm1heCgwLE1hdGgubWluKDEsdC5vcGFjaXR5Kyh0LnBsYWNlZD9lOi1lKSkpOm4mJnI/MTowLHRoaXMucGxhY2VkPXJ9O3BlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5vcGFjaXR5JiYhdGhpcy5wbGFjZWR9O3ZhciBkZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMudGV4dD1uZXcgcGUodD90LnRleHQ6bnVsbCxlLHIsaSksdGhpcy5pY29uPW5ldyBwZSh0P3QuaWNvbjpudWxsLGUsbixpKX07ZGUucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dC5pc0hpZGRlbigpJiZ0aGlzLmljb24uaXNIaWRkZW4oKX07dmFyIGdlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCx0aGlzLmljb249ZSx0aGlzLnNraXBGYWRlPXJ9LG1lPWZ1bmN0aW9uKCl7dGhpcy5pbnZQcm9qTWF0cml4PXQuY3JlYXRlKCksdGhpcy52aWV3cG9ydE1hdHJpeD10LmNyZWF0ZSgpLHRoaXMuY2lyY2xlcz1bXX0sdmU9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLmJ1Y2tldEluc3RhbmNlSWQ9dCx0aGlzLmZlYXR1cmVJbmRleD1lLHRoaXMuc291cmNlTGF5ZXJJbmRleD1yLHRoaXMuYnVja2V0SW5kZXg9bix0aGlzLnRpbGVJRD1pfSx5ZT1mdW5jdGlvbih0KXt0aGlzLmNyb3NzU291cmNlQ29sbGlzaW9ucz10LHRoaXMubWF4R3JvdXBJRD0wLHRoaXMuY29sbGlzaW9uR3JvdXBzPXt9fTtmdW5jdGlvbiB4ZShlLHIsbixpLGEpe3ZhciBvPXQuZ2V0QW5jaG9yQWxpZ25tZW50KGUpLHM9LShvLmhvcml6b250YWxBbGlnbi0uNSkqcixsPS0oby52ZXJ0aWNhbEFsaWduLS41KSpuLGM9dC5ldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGUsaSk7cmV0dXJuIG5ldyB0LlBvaW50KHMrY1swXSphLGwrY1sxXSphKX1mdW5jdGlvbiBiZShlLHIsbixpLGEsbyl7dmFyIHM9ZS54MSxsPWUueDIsYz1lLnkxLHU9ZS55MixmPWUuYW5jaG9yUG9pbnRYLGg9ZS5hbmNob3JQb2ludFkscD1uZXcgdC5Qb2ludChyLG4pO3JldHVybiBpJiZwLl9yb3RhdGUoYT9vOi1vKSx7eDE6cytwLngseTE6YytwLnkseDI6bCtwLngseTI6dStwLnksYW5jaG9yUG9pbnRYOmYsYW5jaG9yUG9pbnRZOmh9fXllLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jcm9zc1NvdXJjZUNvbGxpc2lvbnMpcmV0dXJue0lEOjAscHJlZGljYXRlOm51bGx9O2lmKCF0aGlzLmNvbGxpc2lvbkdyb3Vwc1t0XSl7dmFyIGU9Kyt0aGlzLm1heEdyb3VwSUQ7dGhpcy5jb2xsaXNpb25Hcm91cHNbdF09e0lEOmUscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbGxpc2lvbkdyb3VwSUQ9PT1lfX19cmV0dXJuIHRoaXMuY29sbGlzaW9uR3JvdXBzW3RdfTt2YXIgX2U9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy50cmFuc2Zvcm09dC5jbG9uZSgpLHRoaXMuY29sbGlzaW9uSW5kZXg9bmV3IGZlKHRoaXMudHJhbnNmb3JtKSx0aGlzLnBsYWNlbWVudHM9e30sdGhpcy5vcGFjaXRpZXM9e30sdGhpcy52YXJpYWJsZU9mZnNldHM9e30sdGhpcy5zdGFsZT0hMSx0aGlzLmNvbW1pdFRpbWU9MCx0aGlzLmZhZGVEdXJhdGlvbj1lLHRoaXMucmV0YWluZWRRdWVyeURhdGE9e30sdGhpcy5jb2xsaXNpb25Hcm91cHM9bmV3IHllKHIpLHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzPXt9LHRoaXMucHJldlBsYWNlbWVudD1uLG4mJihuLnByZXZQbGFjZW1lbnQ9dm9pZCAwKSx0aGlzLnBsYWNlZE9yaWVudGF0aW9ucz17fX07ZnVuY3Rpb24gd2UodCxlLHIsbixpKXt0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowLG58fDAsaXx8MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCxufHwwLGl8fDApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjAsbnx8MCxpfHwwKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowLG58fDAsaXx8MCl9X2UucHJvdG90eXBlLmdldEJ1Y2tldFBhcnRzPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW4uZ2V0QnVja2V0KHIpLG89bi5sYXRlc3RGZWF0dXJlSW5kZXg7aWYoYSYmbyYmci5pZD09PWEubGF5ZXJJZHNbMF0pe3ZhciBzPW4uY29sbGlzaW9uQm94QXJyYXksbD1hLmxheWVyc1swXS5sYXlvdXQsYz1NYXRoLnBvdygyLHRoaXMudHJhbnNmb3JtLnpvb20tbi50aWxlSUQub3ZlcnNjYWxlZFopLHU9bi50aWxlU2l6ZS90LkVYVEVOVCxmPXRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChuLnRpbGVJRC50b1Vud3JhcHBlZCgpKSxoPSJtYXAiPT09bC5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50IikscD0ibWFwIj09PWwuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLGQ9aGUobiwxLHRoaXMudHJhbnNmb3JtLnpvb20pLGc9S3QoZixoLHAsdGhpcy50cmFuc2Zvcm0sZCksbT1udWxsO2lmKGgpe3ZhciB2PVF0KGYsaCxwLHRoaXMudHJhbnNmb3JtLGQpO209dC5tdWx0aXBseShbXSx0aGlzLnRyYW5zZm9ybS5sYWJlbFBsYW5lTWF0cml4LHYpfXRoaXMucmV0YWluZWRRdWVyeURhdGFbYS5idWNrZXRJbnN0YW5jZUlkXT1uZXcgdmUoYS5idWNrZXRJbnN0YW5jZUlkLG8sYS5zb3VyY2VMYXllckluZGV4LGEuaW5kZXgsbi50aWxlSUQpO3ZhciB5PXtidWNrZXQ6YSxsYXlvdXQ6bCxwb3NNYXRyaXg6Zix0ZXh0TGFiZWxQbGFuZU1hdHJpeDpnLGxhYmVsVG9TY3JlZW5NYXRyaXg6bSxzY2FsZTpjLHRleHRQaXhlbFJhdGlvOnUsaG9sZGluZ0ZvckZhZGU6bi5ob2xkaW5nRm9yRmFkZSgpLGNvbGxpc2lvbkJveEFycmF5OnMscGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemU6dC5ldmFsdWF0ZVNpemVGb3Jab29tKGEudGV4dFNpemVEYXRhLHRoaXMudHJhbnNmb3JtLnpvb20pLGNvbGxpc2lvbkdyb3VwOnRoaXMuY29sbGlzaW9uR3JvdXBzLmdldChhLnNvdXJjZUlEKX07aWYoaSlmb3IodmFyIHg9MCxiPWEuc29ydEtleVJhbmdlczt4PGIubGVuZ3RoO3grPTEpe3ZhciBfPWJbeF07ZS5wdXNoKHtzb3J0S2V5Ol8uc29ydEtleSxzeW1ib2xJbnN0YW5jZVN0YXJ0Ol8uc3ltYm9sSW5zdGFuY2VTdGFydCxzeW1ib2xJbnN0YW5jZUVuZDpfLnN5bWJvbEluc3RhbmNlRW5kLHBhcmFtZXRlcnM6eX0pfWVsc2UgZS5wdXNoKHtzeW1ib2xJbnN0YW5jZVN0YXJ0OjAsc3ltYm9sSW5zdGFuY2VFbmQ6YS5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoLHBhcmFtZXRlcnM6eX0pfX0sX2UucHJvdG90eXBlLmF0dGVtcHRBbmNob3JQbGFjZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQpe3ZhciBnLG09W2YudGV4dE9mZnNldDAsZi50ZXh0T2Zmc2V0MV0sdj14ZSh0LHIsbixtLGkpLHk9dGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChiZShlLHYueCx2LnksYSxvLHRoaXMudHJhbnNmb3JtLmFuZ2xlKSx1LHMsbCxjLnByZWRpY2F0ZSk7aWYoIWR8fDAhPT10aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KGJlKGQsdi54LHYueSxhLG8sdGhpcy50cmFuc2Zvcm0uYW5nbGUpLHUscyxsLGMucHJlZGljYXRlKS5ib3gubGVuZ3RoKXJldHVybiB5LmJveC5sZW5ndGg+MD8odGhpcy5wcmV2UGxhY2VtZW50JiZ0aGlzLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW2YuY3Jvc3NUaWxlSURdJiZ0aGlzLnByZXZQbGFjZW1lbnQucGxhY2VtZW50c1tmLmNyb3NzVGlsZUlEXSYmdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlbWVudHNbZi5jcm9zc1RpbGVJRF0udGV4dCYmKGc9dGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tmLmNyb3NzVGlsZUlEXS5hbmNob3IpLHRoaXMudmFyaWFibGVPZmZzZXRzW2YuY3Jvc3NUaWxlSURdPXt0ZXh0T2Zmc2V0Om0sd2lkdGg6cixoZWlnaHQ6bixhbmNob3I6dCx0ZXh0Qm94U2NhbGU6aSxwcmV2QW5jaG9yOmd9LHRoaXMubWFya1VzZWRKdXN0aWZpY2F0aW9uKGgsdCxmLHApLGguYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmKHRoaXMubWFya1VzZWRPcmllbnRhdGlvbihoLHAsZiksdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbZi5jcm9zc1RpbGVJRF09cCkse3NoaWZ0OnYscGxhY2VkR2x5cGhCb3hlczp5fSk6dm9pZCAwfSxfZS5wcm90b3R5cGUucGxhY2VMYXllckJ1Y2tldFBhcnQ9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXMsYT1lLnBhcmFtZXRlcnMsbz1hLmJ1Y2tldCxzPWEubGF5b3V0LGw9YS5wb3NNYXRyaXgsYz1hLnRleHRMYWJlbFBsYW5lTWF0cml4LHU9YS5sYWJlbFRvU2NyZWVuTWF0cml4LGY9YS50ZXh0UGl4ZWxSYXRpbyxoPWEuaG9sZGluZ0ZvckZhZGUscD1hLmNvbGxpc2lvbkJveEFycmF5LGQ9YS5wYXJ0aWFsbHlFdmFsdWF0ZWRUZXh0U2l6ZSxnPWEuY29sbGlzaW9uR3JvdXAsbT1zLmdldCgidGV4dC1vcHRpb25hbCIpLHY9cy5nZXQoImljb24tb3B0aW9uYWwiKSx5PXMuZ2V0KCJ0ZXh0LWFsbG93LW92ZXJsYXAiKSx4PXMuZ2V0KCJpY29uLWFsbG93LW92ZXJsYXAiKSxiPSJtYXAiPT09cy5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IiksXz0ibWFwIj09PXMuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLHc9Im5vbmUiIT09cy5nZXQoImljb24tdGV4dC1maXQiKSxUPSJ2aWV3cG9ydC15Ij09PXMuZ2V0KCJzeW1ib2wtei1vcmRlciIpLGs9eSYmKHh8fCFvLmhhc0ljb25EYXRhKCl8fHYpLE09eCYmKHl8fCFvLmhhc1RleHREYXRhKCl8fG0pOyFvLmNvbGxpc2lvbkFycmF5cyYmcCYmby5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKHApO3ZhciBBPWZ1bmN0aW9uKGUsYSl7aWYoIXJbZS5jcm9zc1RpbGVJRF0paWYoaClpLnBsYWNlbWVudHNbZS5jcm9zc1RpbGVJRF09bmV3IGdlKCExLCExLCExKTtlbHNle3ZhciBwLFQ9ITEsQT0hMSxTPSEwLEU9bnVsbCxDPXtib3g6bnVsbCxvZmZzY3JlZW46bnVsbH0sTD17Ym94Om51bGwsb2Zmc2NyZWVuOm51bGx9LEk9bnVsbCxQPW51bGwsej0wLE89MCxEPTA7YS50ZXh0RmVhdHVyZUluZGV4P3o9YS50ZXh0RmVhdHVyZUluZGV4OmUudXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXMmJih6PWUuZmVhdHVyZUluZGV4KSxhLnZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCYmKE89YS52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXgpO3ZhciBSPWEudGV4dEJveDtpZihSKXt2YXIgRj1mdW5jdGlvbihyKXt2YXIgbj10LldyaXRpbmdNb2RlLmhvcml6b250YWw7aWYoby5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiYhciYmaS5wcmV2UGxhY2VtZW50KXt2YXIgYT1pLnByZXZQbGFjZW1lbnQucGxhY2VkT3JpZW50YXRpb25zW2UuY3Jvc3NUaWxlSURdO2EmJihpLnBsYWNlZE9yaWVudGF0aW9uc1tlLmNyb3NzVGlsZUlEXT1hLGkubWFya1VzZWRPcmllbnRhdGlvbihvLG49YSxlKSl9cmV0dXJuIG59LEI9ZnVuY3Rpb24ocixuKXtpZihvLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJmUubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzPjAmJmEudmVydGljYWxUZXh0Qm94KWZvcih2YXIgaT0wLHM9by53cml0aW5nTW9kZXM7aTxzLmxlbmd0aCYmKHNbaV09PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsPyhDPW4oKSxMPUMpOkM9cigpLCEoQyYmQy5ib3gmJkMuYm94Lmxlbmd0aCkpO2krPTEpO2Vsc2UgQz1yKCl9O2lmKHMuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpKXt2YXIgTj1zLmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKTtpZihpLnByZXZQbGFjZW1lbnQmJmkucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbZS5jcm9zc1RpbGVJRF0pe3ZhciBqPWkucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbZS5jcm9zc1RpbGVJRF07Ti5pbmRleE9mKGouYW5jaG9yKT4wJiYoTj1OLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1qLmFuY2hvcn0pKSkudW5zaGlmdChqLmFuY2hvcil9dmFyIFU9ZnVuY3Rpb24odCxyLG4pe2Zvcih2YXIgYT10LngyLXQueDEscz10LnkyLXQueTEsYz1lLnRleHRCb3hTY2FsZSx1PXcmJiF4P3I6bnVsbCxoPXtib3g6W10sb2Zmc2NyZWVuOiExfSxwPXk/MipOLmxlbmd0aDpOLmxlbmd0aCxkPTA7ZDxwOysrZCl7dmFyIG09aS5hdHRlbXB0QW5jaG9yUGxhY2VtZW50KE5bZCVOLmxlbmd0aF0sdCxhLHMsYyxiLF8sZixsLGcsZD49Ti5sZW5ndGgsZSxvLG4sdSk7aWYobSYmKGg9bS5wbGFjZWRHbHlwaEJveGVzKSYmaC5ib3gmJmguYm94Lmxlbmd0aCl7VD0hMCxFPW0uc2hpZnQ7YnJlYWt9fXJldHVybiBofTtCKChmdW5jdGlvbigpe3JldHVybiBVKFIsYS5pY29uQm94LHQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbCl9KSwoZnVuY3Rpb24oKXt2YXIgcj1hLnZlcnRpY2FsVGV4dEJveDtyZXR1cm4gby5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiYhKEMmJkMuYm94JiZDLmJveC5sZW5ndGgpJiZlLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcz4wJiZyP1UocixhLnZlcnRpY2FsSWNvbkJveCx0LldyaXRpbmdNb2RlLnZlcnRpY2FsKTp7Ym94Om51bGwsb2Zmc2NyZWVuOm51bGx9fSkpLEMmJihUPUMuYm94LFM9Qy5vZmZzY3JlZW4pO3ZhciBWPUYoQyYmQy5ib3gpO2lmKCFUJiZpLnByZXZQbGFjZW1lbnQpe3ZhciBxPWkucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbZS5jcm9zc1RpbGVJRF07cSYmKGkudmFyaWFibGVPZmZzZXRzW2UuY3Jvc3NUaWxlSURdPXEsaS5tYXJrVXNlZEp1c3RpZmljYXRpb24obyxxLmFuY2hvcixlLFYpKX19ZWxzZXt2YXIgSD1mdW5jdGlvbih0LHIpe3ZhciBuPWkuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3godCx5LGYsbCxnLnByZWRpY2F0ZSk7cmV0dXJuIG4mJm4uYm94JiZuLmJveC5sZW5ndGgmJihpLm1hcmtVc2VkT3JpZW50YXRpb24obyxyLGUpLGkucGxhY2VkT3JpZW50YXRpb25zW2UuY3Jvc3NUaWxlSURdPXIpLG59O0IoKGZ1bmN0aW9uKCl7cmV0dXJuIEgoUix0LldyaXRpbmdNb2RlLmhvcml6b250YWwpfSksKGZ1bmN0aW9uKCl7dmFyIHI9YS52ZXJ0aWNhbFRleHRCb3g7cmV0dXJuIG8uYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXM+MCYmcj9IKHIsdC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCk6e2JveDpudWxsLG9mZnNjcmVlbjpudWxsfX0pKSxGKEMmJkMuYm94JiZDLmJveC5sZW5ndGgpfX1pZihUPShwPUMpJiZwLmJveCYmcC5ib3gubGVuZ3RoPjAsUz1wJiZwLm9mZnNjcmVlbixlLnVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzKXt2YXIgRz1vLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGUuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4KSxZPXQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShvLnRleHRTaXplRGF0YSxkLEcpLFc9cy5nZXQoInRleHQtcGFkZGluZyIpO0k9aS5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkNpcmNsZXMoeSxHLG8ubGluZVZlcnRleEFycmF5LG8uZ2x5cGhPZmZzZXRBcnJheSxZLGwsYyx1LG4sXyxnLnByZWRpY2F0ZSxlLmNvbGxpc2lvbkNpcmNsZURpYW1ldGVyLFcpLFQ9eXx8SS5jaXJjbGVzLmxlbmd0aD4wJiYhSS5jb2xsaXNpb25EZXRlY3RlZCxTPVMmJkkub2Zmc2NyZWVufWlmKGEuaWNvbkZlYXR1cmVJbmRleCYmKEQ9YS5pY29uRmVhdHVyZUluZGV4KSxhLmljb25Cb3gpe3ZhciBYPWZ1bmN0aW9uKHQpe3ZhciBlPXcmJkU/YmUodCxFLngsRS55LGIsXyxpLnRyYW5zZm9ybS5hbmdsZSk6dDtyZXR1cm4gaS5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChlLHgsZixsLGcucHJlZGljYXRlKX07QT1MJiZMLmJveCYmTC5ib3gubGVuZ3RoJiZhLnZlcnRpY2FsSWNvbkJveD8oUD1YKGEudmVydGljYWxJY29uQm94KSkuYm94Lmxlbmd0aD4wOihQPVgoYS5pY29uQm94KSkuYm94Lmxlbmd0aD4wLFM9UyYmUC5vZmZzY3JlZW59dmFyIFo9bXx8MD09PWUubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMmJjA9PT1lLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyxKPXZ8fDA9PT1lLm51bUljb25WZXJ0aWNlcztpZihafHxKP0o/Wnx8KEE9QSYmVCk6VD1BJiZUOkE9VD1BJiZULFQmJnAmJnAuYm94JiZpLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChwLmJveCxzLmdldCgidGV4dC1pZ25vcmUtcGxhY2VtZW50Iiksby5idWNrZXRJbnN0YW5jZUlkLEwmJkwuYm94JiZPP086eixnLklEKSxBJiZQJiZpLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChQLmJveCxzLmdldCgiaWNvbi1pZ25vcmUtcGxhY2VtZW50Iiksby5idWNrZXRJbnN0YW5jZUlkLEQsZy5JRCksSSYmKFQmJmkuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhJLmNpcmNsZXMscy5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpLG8uYnVja2V0SW5zdGFuY2VJZCx6LGcuSUQpLG4pKXt2YXIgSz1vLmJ1Y2tldEluc3RhbmNlSWQsUT1pLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tLXTt2b2lkIDA9PT1RJiYoUT1pLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tLXT1uZXcgbWUpO2Zvcih2YXIgJD0wOyQ8SS5jaXJjbGVzLmxlbmd0aDskKz00KVEuY2lyY2xlcy5wdXNoKEkuY2lyY2xlc1skKzBdKSxRLmNpcmNsZXMucHVzaChJLmNpcmNsZXNbJCsxXSksUS5jaXJjbGVzLnB1c2goSS5jaXJjbGVzWyQrMl0pLFEuY2lyY2xlcy5wdXNoKEkuY29sbGlzaW9uRGV0ZWN0ZWQ/MTowKX1pLnBsYWNlbWVudHNbZS5jcm9zc1RpbGVJRF09bmV3IGdlKFR8fGssQXx8TSxTfHxvLmp1c3RSZWxvYWRlZCkscltlLmNyb3NzVGlsZUlEXT0hMH19O2lmKFQpZm9yKHZhciBTPW8uZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSksRT1TLmxlbmd0aC0xO0U+PTA7LS1FKXt2YXIgQz1TW0VdO0Eoby5zeW1ib2xJbnN0YW5jZXMuZ2V0KEMpLG8uY29sbGlzaW9uQXJyYXlzW0NdKX1lbHNlIGZvcih2YXIgTD1lLnN5bWJvbEluc3RhbmNlU3RhcnQ7TDxlLnN5bWJvbEluc3RhbmNlRW5kO0wrKylBKG8uc3ltYm9sSW5zdGFuY2VzLmdldChMKSxvLmNvbGxpc2lvbkFycmF5c1tMXSk7aWYobiYmby5idWNrZXRJbnN0YW5jZUlkIGluIHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzKXt2YXIgST10aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tvLmJ1Y2tldEluc3RhbmNlSWRdO3QuaW52ZXJ0KEkuaW52UHJvak1hdHJpeCxsKSxJLnZpZXdwb3J0TWF0cml4PXRoaXMuY29sbGlzaW9uSW5kZXguZ2V0Vmlld3BvcnRNYXRyaXgoKX1vLmp1c3RSZWxvYWRlZD0hMX0sX2UucHJvdG90eXBlLm1hcmtVc2VkSnVzdGlmaWNhdGlvbj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYTthPWk9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsP24udmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg6e2xlZnQ6bi5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LGNlbnRlcjpuLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxyaWdodDpuLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4fVt0LmdldEFuY2hvckp1c3RpZmljYXRpb24ocildO2Zvcih2YXIgbz0wLHM9W24ubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LG4udmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXhdO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtsPj0wJiYoZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChsKS5jcm9zc1RpbGVJRD1hPj0wJiZsIT09YT8wOm4uY3Jvc3NUaWxlSUQpfX0sX2UucHJvdG90eXBlLm1hcmtVc2VkT3JpZW50YXRpb249ZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1yPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsfHxyPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsT25seT9yOjAsYT1yPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD9yOjAsbz0wLHM9W24ubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XTtvPHMubGVuZ3RoO28rPTEpZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChzW29dKS5wbGFjZWRPcmllbnRhdGlvbj1pO24udmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgmJihlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KG4udmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLnBsYWNlZE9yaWVudGF0aW9uPWEpfSxfZS5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uKHQpe3RoaXMuY29tbWl0VGltZT10LHRoaXMuem9vbUF0TGFzdFJlY2VuY3lDaGVjaz10aGlzLnRyYW5zZm9ybS56b29tO3ZhciBlPXRoaXMucHJldlBsYWNlbWVudCxyPSExO3RoaXMucHJldlpvb21BZGp1c3RtZW50PWU/ZS56b29tQWRqdXN0bWVudCh0aGlzLnRyYW5zZm9ybS56b29tKTowO3ZhciBuPWU/ZS5zeW1ib2xGYWRlQ2hhbmdlKHQpOjEsaT1lP2Uub3BhY2l0aWVzOnt9LGE9ZT9lLnZhcmlhYmxlT2Zmc2V0czp7fSxvPWU/ZS5wbGFjZWRPcmllbnRhdGlvbnM6e307Zm9yKHZhciBzIGluIHRoaXMucGxhY2VtZW50cyl7dmFyIGw9dGhpcy5wbGFjZW1lbnRzW3NdLGM9aVtzXTtjPyh0aGlzLm9wYWNpdGllc1tzXT1uZXcgZGUoYyxuLGwudGV4dCxsLmljb24pLHI9cnx8bC50ZXh0IT09Yy50ZXh0LnBsYWNlZHx8bC5pY29uIT09Yy5pY29uLnBsYWNlZCk6KHRoaXMub3BhY2l0aWVzW3NdPW5ldyBkZShudWxsLG4sbC50ZXh0LGwuaWNvbixsLnNraXBGYWRlKSxyPXJ8fGwudGV4dHx8bC5pY29uKX1mb3IodmFyIHUgaW4gaSl7dmFyIGY9aVt1XTtpZighdGhpcy5vcGFjaXRpZXNbdV0pe3ZhciBoPW5ldyBkZShmLG4sITEsITEpO2guaXNIaWRkZW4oKXx8KHRoaXMub3BhY2l0aWVzW3VdPWgscj1yfHxmLnRleHQucGxhY2VkfHxmLmljb24ucGxhY2VkKX19Zm9yKHZhciBwIGluIGEpdGhpcy52YXJpYWJsZU9mZnNldHNbcF18fCF0aGlzLm9wYWNpdGllc1twXXx8dGhpcy5vcGFjaXRpZXNbcF0uaXNIaWRkZW4oKXx8KHRoaXMudmFyaWFibGVPZmZzZXRzW3BdPWFbcF0pO2Zvcih2YXIgZCBpbiBvKXRoaXMucGxhY2VkT3JpZW50YXRpb25zW2RdfHwhdGhpcy5vcGFjaXRpZXNbZF18fHRoaXMub3BhY2l0aWVzW2RdLmlzSGlkZGVuKCl8fCh0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tkXT1vW2RdKTtyP3RoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU9dDoibnVtYmVyIiE9dHlwZW9mIHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWUmJih0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPWU/ZS5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZTp0KX0sX2UucHJvdG90eXBlLnVwZGF0ZUxheWVyT3BhY2l0aWVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5nZXRCdWNrZXQodCk7byYmYS5sYXRlc3RGZWF0dXJlSW5kZXgmJnQuaWQ9PT1vLmxheWVySWRzWzBdJiZ0aGlzLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcyhvLHIsYS5jb2xsaXNpb25Cb3hBcnJheSl9fSxfZS5wcm90b3R5cGUudXBkYXRlQnVja2V0T3BhY2l0aWVzPWZ1bmN0aW9uKGUscixuKXt2YXIgaT10aGlzO2UuaGFzVGV4dERhdGEoKSYmZS50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLGUuaGFzSWNvbkRhdGEoKSYmZS5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLGUuaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKSYmZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCksZS5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpJiZlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKTt2YXIgYT1lLmxheWVyc1swXS5sYXlvdXQsbz1uZXcgZGUobnVsbCwwLCExLCExLCEwKSxzPWEuZ2V0KCJ0ZXh0LWFsbG93LW92ZXJsYXAiKSxsPWEuZ2V0KCJpY29uLWFsbG93LW92ZXJsYXAiKSxjPWEuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpLHU9Im1hcCI9PT1hLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSxmPSJtYXAiPT09YS5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50IiksaD0ibm9uZSIhPT1hLmdldCgiaWNvbi10ZXh0LWZpdCIpLHA9bmV3IGRlKG51bGwsMCxzJiYobHx8IWUuaGFzSWNvbkRhdGEoKXx8YS5nZXQoImljb24tb3B0aW9uYWwiKSksbCYmKHN8fCFlLmhhc1RleHREYXRhKCl8fGEuZ2V0KCJ0ZXh0LW9wdGlvbmFsIikpLCEwKTshZS5jb2xsaXNpb25BcnJheXMmJm4mJihlLmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCl8fGUuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSkmJmUuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhuKTtmb3IodmFyIGQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ZS80O24rKyl0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhyKX0sZz1mdW5jdGlvbihuKXt2YXIgYT1lLnN5bWJvbEluc3RhbmNlcy5nZXQobikscz1hLm51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzLGw9YS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMsZz1hLmNyb3NzVGlsZUlELG09aS5vcGFjaXRpZXNbZ107cltnXT9tPW86bXx8KGkub3BhY2l0aWVzW2ddPW09cCkscltnXT0hMDt2YXIgdj1hLm51bUljb25WZXJ0aWNlcz4wLHk9aS5wbGFjZWRPcmllbnRhdGlvbnNbYS5jcm9zc1RpbGVJRF0seD15PT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCxiPXk9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWx8fHk9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5O2lmKHM+MHx8bD4wKXt2YXIgXz1MZShtLnRleHQpO2QoZS50ZXh0LHMseD9JZTpfKSxkKGUudGV4dCxsLGI/SWU6Xyk7dmFyIHc9bS50ZXh0LmlzSGlkZGVuKCk7W2EucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsYS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsYS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XS5mb3JFYWNoKChmdW5jdGlvbih0KXt0Pj0wJiYoZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldCh0KS5oaWRkZW49d3x8eD8xOjApfSkpLGEudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg+PTAmJihlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGEudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLmhpZGRlbj13fHxiPzE6MCk7dmFyIFQ9aS52YXJpYWJsZU9mZnNldHNbYS5jcm9zc1RpbGVJRF07VCYmaS5tYXJrVXNlZEp1c3RpZmljYXRpb24oZSxULmFuY2hvcixhLHkpO3ZhciBrPWkucGxhY2VkT3JpZW50YXRpb25zW2EuY3Jvc3NUaWxlSURdO2smJihpLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihlLCJsZWZ0IixhLGspLGkubWFya1VzZWRPcmllbnRhdGlvbihlLGssYSkpfWlmKHYpe3ZhciBNPUxlKG0uaWNvbiksQT0hKGgmJmEudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgmJngpO2EucGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wJiYoZChlLmljb24sYS5udW1JY29uVmVydGljZXMsQT9NOkllKSxlLmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGEucGxhY2VkSWNvblN5bWJvbEluZGV4KS5oaWRkZW49bS5pY29uLmlzSGlkZGVuKCkpLGEudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXg+PTAmJihkKGUuaWNvbixhLm51bVZlcnRpY2FsSWNvblZlcnRpY2VzLEE/SWU6TSksZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChhLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4KS5oaWRkZW49bS5pY29uLmlzSGlkZGVuKCkpfWlmKGUuaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKXx8ZS5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpKXt2YXIgUz1lLmNvbGxpc2lvbkFycmF5c1tuXTtpZihTKXt2YXIgRT1uZXcgdC5Qb2ludCgwLDApO2lmKFMudGV4dEJveHx8Uy52ZXJ0aWNhbFRleHRCb3gpe3ZhciBDPSEwO2lmKGMpe3ZhciBMPWkudmFyaWFibGVPZmZzZXRzW2ddO0w/KEU9eGUoTC5hbmNob3IsTC53aWR0aCxMLmhlaWdodCxMLnRleHRPZmZzZXQsTC50ZXh0Qm94U2NhbGUpLHUmJkUuX3JvdGF0ZShmP2kudHJhbnNmb3JtLmFuZ2xlOi1pLnRyYW5zZm9ybS5hbmdsZSkpOkM9ITF9Uy50ZXh0Qm94JiZ3ZShlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksbS50ZXh0LnBsYWNlZCwhQ3x8eCxFLngsRS55KSxTLnZlcnRpY2FsVGV4dEJveCYmd2UoZS50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LG0udGV4dC5wbGFjZWQsIUN8fGIsRS54LEUueSl9dmFyIEk9Qm9vbGVhbighYiYmUy52ZXJ0aWNhbEljb25Cb3gpO1MuaWNvbkJveCYmd2UoZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LG0uaWNvbi5wbGFjZWQsSSxoP0UueDowLGg/RS55OjApLFMudmVydGljYWxJY29uQm94JiZ3ZShlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksbS5pY29uLnBsYWNlZCwhSSxoP0UueDowLGg/RS55OjApfX19LG09MDttPGUuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDttKyspZyhtKTtpZihlLnNvcnRGZWF0dXJlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSksdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtlLmJ1Y2tldEluc3RhbmNlSWRdJiYodGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtlLmJ1Y2tldEluc3RhbmNlSWRdLmZlYXR1cmVTb3J0T3JkZXI9ZS5mZWF0dXJlU29ydE9yZGVyKSxlLmhhc1RleHREYXRhKCkmJmUudGV4dC5vcGFjaXR5VmVydGV4QnVmZmVyJiZlLnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGUudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkpLGUuaGFzSWNvbkRhdGEoKSYmZS5pY29uLm9wYWNpdHlWZXJ0ZXhCdWZmZXImJmUuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZS5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheSksZS5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpJiZlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyJiZlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5KSxlLmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkmJmUudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXImJmUudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkpLGUuYnVja2V0SW5zdGFuY2VJZCBpbiB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5cyl7dmFyIHY9dGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXNbZS5idWNrZXRJbnN0YW5jZUlkXTtlLnBsYWNlbWVudEludlByb2pNYXRyaXg9di5pbnZQcm9qTWF0cml4LGUucGxhY2VtZW50Vmlld3BvcnRNYXRyaXg9di52aWV3cG9ydE1hdHJpeCxlLmNvbGxpc2lvbkNpcmNsZUFycmF5PXYuY2lyY2xlcyxkZWxldGUgdGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXNbZS5idWNrZXRJbnN0YW5jZUlkXX19LF9lLnByb3RvdHlwZS5zeW1ib2xGYWRlQ2hhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MToodC10aGlzLmNvbW1pdFRpbWUpL3RoaXMuZmFkZUR1cmF0aW9uK3RoaXMucHJldlpvb21BZGp1c3RtZW50fSxfZS5wcm90b3R5cGUuem9vbUFkanVzdG1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsKHRoaXMudHJhbnNmb3JtLnpvb20tdCkvMS41KX0sX2UucHJvdG90eXBlLmhhc1RyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0YWxlfHx0LXRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU8dGhpcy5mYWRlRHVyYXRpb259LF9lLnByb3RvdHlwZS5zdGlsbFJlY2VudD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuem9vbUF0TGFzdFJlY2VuY3lDaGVjaz09PWU/MS10aGlzLnpvb21BZGp1c3RtZW50KGUpOjE7cmV0dXJuIHRoaXMuem9vbUF0TGFzdFJlY2VuY3lDaGVjaz1lLHRoaXMuY29tbWl0VGltZSt0aGlzLmZhZGVEdXJhdGlvbipyPnR9LF9lLnByb3RvdHlwZS5zZXRTdGFsZT1mdW5jdGlvbigpe3RoaXMuc3RhbGU9ITB9O3ZhciBUZT1NYXRoLnBvdygyLDI1KSxrZT1NYXRoLnBvdygyLDI0KSxNZT1NYXRoLnBvdygyLDE3KSxBZT1NYXRoLnBvdygyLDE2KSxTZT1NYXRoLnBvdygyLDkpLEVlPU1hdGgucG93KDIsOCksQ2U9TWF0aC5wb3coMiwxKTtmdW5jdGlvbiBMZSh0KXtpZigwPT09dC5vcGFjaXR5JiYhdC5wbGFjZWQpcmV0dXJuIDA7aWYoMT09PXQub3BhY2l0eSYmdC5wbGFjZWQpcmV0dXJuIDQyOTQ5NjcyOTU7dmFyIGU9dC5wbGFjZWQ/MTowLHI9TWF0aC5mbG9vcigxMjcqdC5vcGFjaXR5KTtyZXR1cm4gcipUZStlKmtlK3IqTWUrZSpBZStyKlNlK2UqRWUrcipDZStlfXZhciBJZT0wLFBlPWZ1bmN0aW9uKHQpe3RoaXMuX3NvcnRBY3Jvc3NUaWxlcz0idmlld3BvcnQteSIhPT10LmxheW91dC5nZXQoInN5bWJvbC16LW9yZGVyIikmJnZvaWQgMCE9PXQubGF5b3V0LmdldCgic3ltYm9sLXNvcnQta2V5IikuY29uc3RhbnRPcigxKSx0aGlzLl9jdXJyZW50VGlsZUluZGV4PTAsdGhpcy5fY3VycmVudFBhcnRJbmRleD0wLHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHM9e30sdGhpcy5fYnVja2V0UGFydHM9W119O1BlLnByb3RvdHlwZS5jb250aW51ZVBsYWNlbWVudD1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT10aGlzLl9idWNrZXRQYXJ0czt0aGlzLl9jdXJyZW50VGlsZUluZGV4PHQubGVuZ3RoOylpZihlLmdldEJ1Y2tldFBhcnRzKGEsbix0W3RoaXMuX2N1cnJlbnRUaWxlSW5kZXhdLHRoaXMuX3NvcnRBY3Jvc3NUaWxlcyksdGhpcy5fY3VycmVudFRpbGVJbmRleCsrLGkoKSlyZXR1cm4hMDtmb3IodGhpcy5fc29ydEFjcm9zc1RpbGVzJiYodGhpcy5fc29ydEFjcm9zc1RpbGVzPSExLGEuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKSk7dGhpcy5fY3VycmVudFBhcnRJbmRleDxhLmxlbmd0aDspaWYoZS5wbGFjZUxheWVyQnVja2V0UGFydChhW3RoaXMuX2N1cnJlbnRQYXJ0SW5kZXhdLHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHMsciksdGhpcy5fY3VycmVudFBhcnRJbmRleCsrLGkoKSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHplPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3RoaXMucGxhY2VtZW50PW5ldyBfZSh0LGksYSxvKSx0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXg9ZS5sZW5ndGgtMSx0aGlzLl9mb3JjZUZ1bGxQbGFjZW1lbnQ9cix0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM9bix0aGlzLl9kb25lPSExfTt6ZS5wcm90b3R5cGUuaXNEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvbmV9LHplLnByb3RvdHlwZS5jb250aW51ZVBsYWNlbWVudD1mdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPXRoaXMsYT10LmJyb3dzZXIubm93KCksbz1mdW5jdGlvbigpe3ZhciBlPXQuYnJvd3Nlci5ub3coKS1hO3JldHVybiFpLl9mb3JjZUZ1bGxQbGFjZW1lbnQmJmU+Mn07dGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4Pj0wOyl7dmFyIHM9cltlW3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleF1dLGw9dGhpcy5wbGFjZW1lbnQuY29sbGlzaW9uSW5kZXgudHJhbnNmb3JtLnpvb207aWYoInN5bWJvbCI9PT1zLnR5cGUmJighcy5taW56b29tfHxzLm1pbnpvb208PWwpJiYoIXMubWF4em9vbXx8cy5tYXh6b29tPmwpKXtpZih0aGlzLl9pblByb2dyZXNzTGF5ZXJ8fCh0aGlzLl9pblByb2dyZXNzTGF5ZXI9bmV3IFBlKHMpKSx0aGlzLl9pblByb2dyZXNzTGF5ZXIuY29udGludWVQbGFjZW1lbnQobltzLnNvdXJjZV0sdGhpcy5wbGFjZW1lbnQsdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzLHMsbykpcmV0dXJuO2RlbGV0ZSB0aGlzLl9pblByb2dyZXNzTGF5ZXJ9dGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4LS19dGhpcy5fZG9uZT0hMH0semUucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wbGFjZW1lbnQuY29tbWl0KHQpLHRoaXMucGxhY2VtZW50fTt2YXIgT2U9NTEyL3QuRVhURU5ULzIsRGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGlsZUlEPXQsdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzPXt9LHRoaXMuYnVja2V0SW5zdGFuY2VJZD1yO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lLmdldChuKSxhPWkua2V5O3RoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1thXXx8KHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1thXT1bXSksdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2FdLnB1c2goe2Nyb3NzVGlsZUlEOmkuY3Jvc3NUaWxlSUQsY29vcmQ6dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhpLHQpfSl9fTtEZS5wcm90b3R5cGUuZ2V0U2NhbGVkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSxyKXt2YXIgbj1PZS9NYXRoLnBvdygyLHIuY2Fub25pY2FsLnotdGhpcy50aWxlSUQuY2Fub25pY2FsLnopO3JldHVybnt4Ok1hdGguZmxvb3IoKHIuY2Fub25pY2FsLngqdC5FWFRFTlQrZS5hbmNob3JYKSpuKSx5Ok1hdGguZmxvb3IoKHIuY2Fub25pY2FsLnkqdC5FWFRFTlQrZS5hbmNob3JZKSpuKX19LERlLnByb3RvdHlwZS5maW5kTWF0Y2hlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMudGlsZUlELmNhbm9uaWNhbC56PGUuY2Fub25pY2FsLno/MTpNYXRoLnBvdygyLHRoaXMudGlsZUlELmNhbm9uaWNhbC56LWUuY2Fub25pY2FsLnopLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dC5nZXQoaSk7aWYoIWEuY3Jvc3NUaWxlSUQpe3ZhciBvPXRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1thLmtleV07aWYobylmb3IodmFyIHM9dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhhLGUpLGw9MCxjPW87bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO2lmKE1hdGguYWJzKHUuY29vcmQueC1zLngpPD1uJiZNYXRoLmFicyh1LmNvb3JkLnktcy55KTw9biYmIXJbdS5jcm9zc1RpbGVJRF0pe3JbdS5jcm9zc1RpbGVJRF09ITAsYS5jcm9zc1RpbGVJRD11LmNyb3NzVGlsZUlEO2JyZWFrfX19fX07dmFyIFJlPWZ1bmN0aW9uKCl7dGhpcy5tYXhDcm9zc1RpbGVJRD0wfTtSZS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMubWF4Q3Jvc3NUaWxlSUR9O3ZhciBGZT1mdW5jdGlvbigpe3RoaXMuaW5kZXhlcz17fSx0aGlzLnVzZWRDcm9zc1RpbGVJRHM9e30sdGhpcy5sbmc9MH07RmUucHJvdG90eXBlLmhhbmRsZVdyYXBKdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQoKHQtdGhpcy5sbmcpLzM2MCk7aWYoMCE9PWUpZm9yKHZhciByIGluIHRoaXMuaW5kZXhlcyl7dmFyIG49dGhpcy5pbmRleGVzW3JdLGk9e307Zm9yKHZhciBhIGluIG4pe3ZhciBvPW5bYV07by50aWxlSUQ9by50aWxlSUQudW53cmFwVG8oby50aWxlSUQud3JhcCtlKSxpW28udGlsZUlELmtleV09b310aGlzLmluZGV4ZXNbcl09aX10aGlzLmxuZz10fSxGZS5wcm90b3R5cGUuYWRkQnVja2V0PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJnRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pe2lmKHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0uYnVja2V0SW5zdGFuY2VJZD09PWUuYnVja2V0SW5zdGFuY2VJZClyZXR1cm4hMTt0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh0Lm92ZXJzY2FsZWRaLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pfWZvcih2YXIgbj0wO248ZS5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO24rKyllLnN5bWJvbEluc3RhbmNlcy5nZXQobikuY3Jvc3NUaWxlSUQ9MDt0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl18fCh0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl09e30pO3ZhciBpPXRoaXMudXNlZENyb3NzVGlsZUlEc1t0Lm92ZXJzY2FsZWRaXTtmb3IodmFyIGEgaW4gdGhpcy5pbmRleGVzKXt2YXIgbz10aGlzLmluZGV4ZXNbYV07aWYoTnVtYmVyKGEpPnQub3ZlcnNjYWxlZFopZm9yKHZhciBzIGluIG8pe3ZhciBsPW9bc107bC50aWxlSUQuaXNDaGlsZE9mKHQpJiZsLmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsaSl9ZWxzZXt2YXIgYz1vW3Quc2NhbGVkVG8oTnVtYmVyKGEpKS5rZXldO2MmJmMuZmluZE1hdGNoZXMoZS5zeW1ib2xJbnN0YW5jZXMsdCxpKX19Zm9yKHZhciB1PTA7dTxlLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7dSsrKXt2YXIgZj1lLnN5bWJvbEluc3RhbmNlcy5nZXQodSk7Zi5jcm9zc1RpbGVJRHx8KGYuY3Jvc3NUaWxlSUQ9ci5nZW5lcmF0ZSgpLGlbZi5jcm9zc1RpbGVJRF09ITApfXJldHVybiB2b2lkIDA9PT10aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl09e30pLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV09bmV3IERlKHQsZS5zeW1ib2xJbnN0YW5jZXMsZS5idWNrZXRJbnN0YW5jZUlkKSwhMH0sRmUucHJvdG90eXBlLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXMpZm9yKHZhciBuPTAsaT1lLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbcl07bjxpLmxlbmd0aDtuKz0xKWRlbGV0ZSB0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdF1baVtuXS5jcm9zc1RpbGVJRF19LEZlLnByb3RvdHlwZS5yZW1vdmVTdGFsZUJ1Y2tldHM9ZnVuY3Rpb24odCl7dmFyIGU9ITE7Zm9yKHZhciByIGluIHRoaXMuaW5kZXhlcyl7dmFyIG49dGhpcy5pbmRleGVzW3JdO2Zvcih2YXIgaSBpbiBuKXRbbltpXS5idWNrZXRJbnN0YW5jZUlkXXx8KHRoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHIsbltpXSksZGVsZXRlIG5baV0sZT0hMCl9cmV0dXJuIGV9O3ZhciBCZT1mdW5jdGlvbigpe3RoaXMubGF5ZXJJbmRleGVzPXt9LHRoaXMuY3Jvc3NUaWxlSURzPW5ldyBSZSx0aGlzLm1heEJ1Y2tldEluc3RhbmNlSWQ9MCx0aGlzLmJ1Y2tldHNJbkN1cnJlbnRQbGFjZW1lbnQ9e319O0JlLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sYXllckluZGV4ZXNbdC5pZF07dm9pZCAwPT09biYmKG49dGhpcy5sYXllckluZGV4ZXNbdC5pZF09bmV3IEZlKTt2YXIgaT0hMSxhPXt9O24uaGFuZGxlV3JhcEp1bXAocik7Zm9yKHZhciBvPTAscz1lO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWwuZ2V0QnVja2V0KHQpO2MmJnQuaWQ9PT1jLmxheWVySWRzWzBdJiYoYy5idWNrZXRJbnN0YW5jZUlkfHwoYy5idWNrZXRJbnN0YW5jZUlkPSsrdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkKSxuLmFkZEJ1Y2tldChsLnRpbGVJRCxjLHRoaXMuY3Jvc3NUaWxlSURzKSYmKGk9ITApLGFbYy5idWNrZXRJbnN0YW5jZUlkXT0hMCl9cmV0dXJuIG4ucmVtb3ZlU3RhbGVCdWNrZXRzKGEpJiYoaT0hMCksaX0sQmUucHJvdG90eXBlLnBydW5lVW51c2VkTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09ITB9KSksdGhpcy5sYXllckluZGV4ZXMpZVtyXXx8ZGVsZXRlIHRoaXMubGF5ZXJJbmRleGVzW3JdfTt2YXIgTmU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5lbWl0VmFsaWRhdGlvbkVycm9ycyhlLHImJnIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4ic291cmNlLmNhbnZhcyIhPT10LmlkZW50aWZpZXJ9KSkpfSxqZT10LnBpY2soVXQsWyJhZGRMYXllciIsInJlbW92ZUxheWVyIiwic2V0UGFpbnRQcm9wZXJ0eSIsInNldExheW91dFByb3BlcnR5Iiwic2V0RmlsdGVyIiwiYWRkU291cmNlIiwicmVtb3ZlU291cmNlIiwic2V0TGF5ZXJab29tUmFuZ2UiLCJzZXRMaWdodCIsInNldFRyYW5zaXRpb24iLCJzZXRHZW9KU09OU291cmNlRGF0YSJdKSxVZT10LnBpY2soVXQsWyJzZXRDZW50ZXIiLCJzZXRab29tIiwic2V0QmVhcmluZyIsInNldFBpdGNoIl0pLFZlPWZ1bmN0aW9uKCl7dmFyIGU9e30scj10LnN0eWxlU3BlYy4kdmVyc2lvbjtmb3IodmFyIG4gaW4gdC5zdHlsZVNwZWMuJHJvb3Qpe3ZhciBpLGE9dC5zdHlsZVNwZWMuJHJvb3Rbbl07YS5yZXF1aXJlZCYmbnVsbCE9KGk9InZlcnNpb24iPT09bj9yOiJhcnJheSI9PT1hLnR5cGU/W106e30pJiYoZVtuXT1pKX1yZXR1cm4gZX0oKSxxZT1mdW5jdGlvbihlKXtmdW5jdGlvbiByKG4saSl7dmFyIGE9dGhpczt2b2lkIDA9PT1pJiYoaT17fSksZS5jYWxsKHRoaXMpLHRoaXMubWFwPW4sdGhpcy5kaXNwYXRjaGVyPW5ldyBrKEJ0KCksdGhpcyksdGhpcy5pbWFnZU1hbmFnZXI9bmV3IGgsdGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudCh0aGlzKSx0aGlzLmdseXBoTWFuYWdlcj1uZXcgeChuLl9yZXF1ZXN0TWFuYWdlcixpLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSksdGhpcy5saW5lQXRsYXM9bmV3IFQoMjU2LDUxMiksdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgQmUsdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX3NlcmlhbGl6ZWRMYXllcnM9e30sdGhpcy5fb3JkZXI9W10sdGhpcy5zb3VyY2VDYWNoZXM9e30sdGhpcy56b29tSGlzdG9yeT1uZXcgdC5ab29tSGlzdG9yeSx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5fYXZhaWxhYmxlSW1hZ2VzPVtdLHRoaXMuX3Jlc2V0VXBkYXRlcygpLHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoInNldFJlZmVycmVyIix0LmdldFJlZmVycmVyKCkpO3ZhciBvPXRoaXM7dGhpcy5fcnRsVGV4dFBsdWdpbkNhbGxiYWNrPXIucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZSgoZnVuY3Rpb24oZSl7by5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic3luY1JUTFBsdWdpblN0YXRlIix7cGx1Z2luU3RhdHVzOmUucGx1Z2luU3RhdHVzLHBsdWdpblVSTDplLnBsdWdpblVSTH0sKGZ1bmN0aW9uKGUscil7aWYodC50cmlnZ2VyUGx1Z2luQ29tcGxldGlvbkV2ZW50KGUpLHImJnIuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpKWZvcih2YXIgbiBpbiBvLnNvdXJjZUNhY2hlcylvLnNvdXJjZUNhY2hlc1tuXS5yZWxvYWQoKX0pKX0pKSx0aGlzLm9uKCJkYXRhIiwoZnVuY3Rpb24odCl7aWYoInNvdXJjZSI9PT10LmRhdGFUeXBlJiYibWV0YWRhdGEiPT09dC5zb3VyY2VEYXRhVHlwZSl7dmFyIGU9YS5zb3VyY2VDYWNoZXNbdC5zb3VyY2VJZF07aWYoZSl7dmFyIHI9ZS5nZXRTb3VyY2UoKTtpZihyJiZyLnZlY3RvckxheWVySWRzKWZvcih2YXIgbiBpbiBhLl9sYXllcnMpe3ZhciBpPWEuX2xheWVyc1tuXTtpLnNvdXJjZT09PXIuaWQmJmEuX3ZhbGlkYXRlTGF5ZXIoaSl9fX19KSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZFVSTD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic3R5bGUifSkpO3ZhciBpPSJib29sZWFuIj09dHlwZW9mIHIudmFsaWRhdGU/ci52YWxpZGF0ZTohdC5pc01hcGJveFVSTChlKTtlPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTChlLHIuYWNjZXNzVG9rZW4pO3ZhciBhPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGUsdC5SZXNvdXJjZVR5cGUuU3R5bGUpO3RoaXMuX3JlcXVlc3Q9dC5nZXRKU09OKGEsKGZ1bmN0aW9uKGUscil7bi5fcmVxdWVzdD1udWxsLGU/bi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpOnImJm4uX2xvYWQocixpKX0pKX0sci5wcm90b3R5cGUubG9hZEpTT049ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InN0eWxlIn0pKSx0aGlzLl9yZXF1ZXN0PXQuYnJvd3Nlci5mcmFtZSgoZnVuY3Rpb24oKXtuLl9yZXF1ZXN0PW51bGwsbi5fbG9hZChlLCExIT09ci52YWxpZGF0ZSl9KSl9LHIucHJvdG90eXBlLmxvYWRFbXB0eT1mdW5jdGlvbigpe3RoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic3R5bGUifSkpLHRoaXMuX2xvYWQoVmUsITEpfSxyLnByb3RvdHlwZS5fbG9hZD1mdW5jdGlvbihlLHIpe2lmKCFyfHwhTmUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXtmb3IodmFyIG4gaW4gdGhpcy5fbG9hZGVkPSEwLHRoaXMuc3R5bGVzaGVldD1lLGUuc291cmNlcyl0aGlzLmFkZFNvdXJjZShuLGUuc291cmNlc1tuXSx7dmFsaWRhdGU6ITF9KTtlLnNwcml0ZT90aGlzLl9sb2FkU3ByaXRlKGUuc3ByaXRlKTp0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLHRoaXMuZ2x5cGhNYW5hZ2VyLnNldFVSTChlLmdseXBocyk7dmFyIGk9anQodGhpcy5zdHlsZXNoZWV0LmxheWVycyk7dGhpcy5fb3JkZXI9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuX2xheWVycz17fSx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzPXt9O2Zvcih2YXIgYT0wLG89aTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07KHM9dC5jcmVhdGVTdHlsZUxheWVyKHMpKS5zZXRFdmVudGVkUGFyZW50KHRoaXMse2xheWVyOntpZDpzLmlkfX0pLHRoaXMuX2xheWVyc1tzLmlkXT1zLHRoaXMuX3NlcmlhbGl6ZWRMYXllcnNbcy5pZF09cy5zZXJpYWxpemUoKX10aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJzZXRMYXllcnMiLHRoaXMuX3NlcmlhbGl6ZUxheWVycyh0aGlzLl9vcmRlcikpLHRoaXMubGlnaHQ9bmV3IHcodGhpcy5zdHlsZXNoZWV0LmxpZ2h0KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgic3R5bGUubG9hZCIpKX19LHIucHJvdG90eXBlLl9sb2FkU3ByaXRlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5fc3ByaXRlUmVxdWVzdD1mdW5jdGlvbihlLHIsbil7dmFyIGksYSxvLHM9dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8+MT8iQDJ4IjoiIixsPXQuZ2V0SlNPTihyLnRyYW5zZm9ybVJlcXVlc3Qoci5ub3JtYWxpemVTcHJpdGVVUkwoZSxzLCIuanNvbiIpLHQuUmVzb3VyY2VUeXBlLlNwcml0ZUpTT04pLChmdW5jdGlvbih0LGUpe2w9bnVsbCxvfHwobz10LGk9ZSx1KCkpfSkpLGM9dC5nZXRJbWFnZShyLnRyYW5zZm9ybVJlcXVlc3Qoci5ub3JtYWxpemVTcHJpdGVVUkwoZSxzLCIucG5nIiksdC5SZXNvdXJjZVR5cGUuU3ByaXRlSW1hZ2UpLChmdW5jdGlvbih0LGUpe2M9bnVsbCxvfHwobz10LGE9ZSx1KCkpfSkpO2Z1bmN0aW9uIHUoKXtpZihvKW4obyk7ZWxzZSBpZihpJiZhKXt2YXIgZT10LmJyb3dzZXIuZ2V0SW1hZ2VEYXRhKGEpLHI9e307Zm9yKHZhciBzIGluIGkpe3ZhciBsPWlbc10sYz1sLndpZHRoLHU9bC5oZWlnaHQsZj1sLngsaD1sLnkscD1sLnNkZixkPWwucGl4ZWxSYXRpbyxnPWwuc3RyZXRjaFgsbT1sLnN0cmV0Y2hZLHY9bC5jb250ZW50LHk9bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpjLGhlaWdodDp1fSk7dC5SR0JBSW1hZ2UuY29weShlLHkse3g6Zix5Omh9LHt4OjAseTowfSx7d2lkdGg6YyxoZWlnaHQ6dX0pLHJbc109e2RhdGE6eSxwaXhlbFJhdGlvOmQsc2RmOnAsc3RyZXRjaFg6ZyxzdHJldGNoWTptLGNvbnRlbnQ6dn19bihudWxsLHIpfX1yZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7bCYmKGwuY2FuY2VsKCksbD1udWxsKSxjJiYoYy5jYW5jZWwoKSxjPW51bGwpfX19KGUsdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLChmdW5jdGlvbihlLG4pe2lmKHIuX3Nwcml0ZVJlcXVlc3Q9bnVsbCxlKXIuZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTtlbHNlIGlmKG4pZm9yKHZhciBpIGluIG4pci5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoaSxuW2ldKTtyLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLHIuX2F2YWlsYWJsZUltYWdlcz1yLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCksci5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic2V0SW1hZ2VzIixyLl9hdmFpbGFibGVJbWFnZXMpLHIuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9KSl9LHIucHJvdG90eXBlLl92YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc291cmNlQ2FjaGVzW2Uuc291cmNlXTtpZihyKXt2YXIgbj1lLnNvdXJjZUxheWVyO2lmKG4pe3ZhciBpPXIuZ2V0U291cmNlKCk7KCJnZW9qc29uIj09PWkudHlwZXx8aS52ZWN0b3JMYXllcklkcyYmLTE9PT1pLnZlY3RvckxheWVySWRzLmluZGV4T2YobikpJiZ0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ1NvdXJjZSBsYXllciAiJytuKyciIGRvZXMgbm90IGV4aXN0IG9uIHNvdXJjZSAiJytpLmlkKyciIGFzIHNwZWNpZmllZCBieSBzdHlsZSBsYXllciAiJytlLmlkKyciJykpKX19fSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXJldHVybiExO2lmKE9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRTb3VyY2VzKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKWlmKCF0aGlzLnNvdXJjZUNhY2hlc1t0XS5sb2FkZWQoKSlyZXR1cm4hMTtyZXR1cm4hIXRoaXMuaW1hZ2VNYW5hZ2VyLmlzTG9hZGVkKCl9LHIucHJvdG90eXBlLl9zZXJpYWxpemVMYXllcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT10aGlzLl9sYXllcnNbbltyXV07ImN1c3RvbSIhPT1pLnR5cGUmJmUucHVzaChpLnNlcmlhbGl6ZSgpKX1yZXR1cm4gZX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbnM9ZnVuY3Rpb24oKXtpZih0aGlzLmxpZ2h0JiZ0aGlzLmxpZ2h0Lmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpaWYodGhpcy5zb3VyY2VDYWNoZXNbdF0uaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpaWYodGhpcy5fbGF5ZXJzW2VdLmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtyZXR1cm4hMX0sci5wcm90b3R5cGUuX2NoZWNrTG9hZGVkPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZCl0aHJvdyBuZXcgRXJyb3IoIlN0eWxlIGlzIG5vdCBkb25lIGxvYWRpbmciKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xvYWRlZCl7dmFyIHI9dGhpcy5fY2hhbmdlZDtpZih0aGlzLl9jaGFuZ2VkKXt2YXIgbj1PYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkTGF5ZXJzKSxpPU9iamVjdC5rZXlzKHRoaXMuX3JlbW92ZWRMYXllcnMpO2Zvcih2YXIgYSBpbihuLmxlbmd0aHx8aS5sZW5ndGgpJiZ0aGlzLl91cGRhdGVXb3JrZXJMYXllcnMobixpKSx0aGlzLl91cGRhdGVkU291cmNlcyl7dmFyIG89dGhpcy5fdXBkYXRlZFNvdXJjZXNbYV07InJlbG9hZCI9PT1vP3RoaXMuX3JlbG9hZFNvdXJjZShhKToiY2xlYXIiPT09byYmdGhpcy5fY2xlYXJTb3VyY2UoYSl9Zm9yKHZhciBzIGluIHRoaXMuX3VwZGF0ZVRpbGVzRm9yQ2hhbmdlZEltYWdlcygpLHRoaXMuX3VwZGF0ZWRQYWludFByb3BzKXRoaXMuX2xheWVyc1tzXS51cGRhdGVUcmFuc2l0aW9ucyhlKTt0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKGUpLHRoaXMuX3Jlc2V0VXBkYXRlcygpfWZvcih2YXIgbCBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tsXS51c2VkPSExO2Zvcih2YXIgYz0wLHU9dGhpcy5fb3JkZXI7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj10aGlzLl9sYXllcnNbdVtjXV07Zi5yZWNhbGN1bGF0ZShlLHRoaXMuX2F2YWlsYWJsZUltYWdlcyksIWYuaXNIaWRkZW4oZS56b29tKSYmZi5zb3VyY2UmJih0aGlzLnNvdXJjZUNhY2hlc1tmLnNvdXJjZV0udXNlZD0hMCl9dGhpcy5saWdodC5yZWNhbGN1bGF0ZShlKSx0aGlzLno9ZS56b29tLHImJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9fSxyLnByb3RvdHlwZS5fdXBkYXRlVGlsZXNGb3JDaGFuZ2VkSW1hZ2VzPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmtleXModGhpcy5fY2hhbmdlZEltYWdlcyk7aWYodC5sZW5ndGgpe2Zvcih2YXIgZSBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tlXS5yZWxvYWRUaWxlc0ZvckRlcGVuZGVuY2llcyhbImljb25zIiwicGF0dGVybnMiXSx0KTt0aGlzLl9jaGFuZ2VkSW1hZ2VzPXt9fX0sci5wcm90b3R5cGUuX3VwZGF0ZVdvcmtlckxheWVycz1mdW5jdGlvbih0LGUpe3RoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoInVwZGF0ZUxheWVycyIse2xheWVyczp0aGlzLl9zZXJpYWxpemVMYXllcnModCkscmVtb3ZlZElkczplfSl9LHIucHJvdG90eXBlLl9yZXNldFVwZGF0ZXM9ZnVuY3Rpb24oKXt0aGlzLl9jaGFuZ2VkPSExLHRoaXMuX3VwZGF0ZWRMYXllcnM9e30sdGhpcy5fcmVtb3ZlZExheWVycz17fSx0aGlzLl91cGRhdGVkU291cmNlcz17fSx0aGlzLl91cGRhdGVkUGFpbnRQcm9wcz17fSx0aGlzLl9jaGFuZ2VkSW1hZ2VzPXt9fSxyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksTmUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXJldHVybiExOyhlPXQuY2xvbmUkMShlKSkubGF5ZXJzPWp0KGUubGF5ZXJzKTt2YXIgbj1mdW5jdGlvbihlLHIpe2lmKCFlKXJldHVyblt7Y29tbWFuZDpVdC5zZXRTdHlsZSxhcmdzOltyXX1dO3ZhciBuPVtdO3RyeXtpZighdC5kZWVwRXF1YWwoZS52ZXJzaW9uLHIudmVyc2lvbikpcmV0dXJuW3tjb21tYW5kOlV0LnNldFN0eWxlLGFyZ3M6W3JdfV07dC5kZWVwRXF1YWwoZS5jZW50ZXIsci5jZW50ZXIpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0Q2VudGVyLGFyZ3M6W3IuY2VudGVyXX0pLHQuZGVlcEVxdWFsKGUuem9vbSxyLnpvb20pfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0Wm9vbSxhcmdzOltyLnpvb21dfSksdC5kZWVwRXF1YWwoZS5iZWFyaW5nLHIuYmVhcmluZyl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRCZWFyaW5nLGFyZ3M6W3IuYmVhcmluZ119KSx0LmRlZXBFcXVhbChlLnBpdGNoLHIucGl0Y2gpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0UGl0Y2gsYXJnczpbci5waXRjaF19KSx0LmRlZXBFcXVhbChlLnNwcml0ZSxyLnNwcml0ZSl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRTcHJpdGUsYXJnczpbci5zcHJpdGVdfSksdC5kZWVwRXF1YWwoZS5nbHlwaHMsci5nbHlwaHMpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0R2x5cGhzLGFyZ3M6W3IuZ2x5cGhzXX0pLHQuZGVlcEVxdWFsKGUudHJhbnNpdGlvbixyLnRyYW5zaXRpb24pfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0VHJhbnNpdGlvbixhcmdzOltyLnRyYW5zaXRpb25dfSksdC5kZWVwRXF1YWwoZS5saWdodCxyLmxpZ2h0KXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExpZ2h0LGFyZ3M6W3IubGlnaHRdfSk7dmFyIGk9e30sYT1bXTshZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE7Zm9yKGEgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkoYSkmJihyLmhhc093blByb3BlcnR5KGEpfHxxdChhLG4saSkpO2ZvcihhIGluIHIpci5oYXNPd25Qcm9wZXJ0eShhKSYmKGUuaGFzT3duUHJvcGVydHkoYSk/dC5kZWVwRXF1YWwoZVthXSxyW2FdKXx8KCJnZW9qc29uIj09PWVbYV0udHlwZSYmImdlb2pzb24iPT09clthXS50eXBlJiZHdChlLHIsYSk/bi5wdXNoKHtjb21tYW5kOlV0LnNldEdlb0pTT05Tb3VyY2VEYXRhLGFyZ3M6W2EsclthXS5kYXRhXX0pOkh0KGEscixuLGkpKTpWdChhLHIsbikpfShlLnNvdXJjZXMsci5zb3VyY2VzLGEsaSk7dmFyIG89W107ZS5sYXllcnMmJmUubGF5ZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lbdC5zb3VyY2VdP24ucHVzaCh7Y29tbWFuZDpVdC5yZW1vdmVMYXllcixhcmdzOlt0LmlkXX0pOm8ucHVzaCh0KX0pKSxuPW4uY29uY2F0KGEpLGZ1bmN0aW9uKGUscixuKXtyPXJ8fFtdO3ZhciBpLGEsbyxzLGwsYyx1LGY9KGU9ZXx8W10pLm1hcChXdCksaD1yLm1hcChXdCkscD1lLnJlZHVjZShYdCx7fSksZD1yLnJlZHVjZShYdCx7fSksZz1mLnNsaWNlKCksbT1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihpPTAsYT0wO2k8Zi5sZW5ndGg7aSsrKWQuaGFzT3duUHJvcGVydHkobz1mW2ldKT9hKys6KG4ucHVzaCh7Y29tbWFuZDpVdC5yZW1vdmVMYXllcixhcmdzOltvXX0pLGcuc3BsaWNlKGcuaW5kZXhPZihvLGEpLDEpKTtmb3IoaT0wLGE9MDtpPGgubGVuZ3RoO2krKylnW2cubGVuZ3RoLTEtaV0hPT0obz1oW2gubGVuZ3RoLTEtaV0pJiYocC5oYXNPd25Qcm9wZXJ0eShvKT8obi5wdXNoKHtjb21tYW5kOlV0LnJlbW92ZUxheWVyLGFyZ3M6W29dfSksZy5zcGxpY2UoZy5sYXN0SW5kZXhPZihvLGcubGVuZ3RoLWEpLDEpKTphKyssbi5wdXNoKHtjb21tYW5kOlV0LmFkZExheWVyLGFyZ3M6W2Rbb10sYz1nW2cubGVuZ3RoLWldXX0pLGcuc3BsaWNlKGcubGVuZ3RoLWksMCxvKSxtW29dPSEwKTtmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKWlmKHM9cFtvPWhbaV1dLGw9ZFtvXSwhbVtvXSYmIXQuZGVlcEVxdWFsKHMsbCkpaWYodC5kZWVwRXF1YWwocy5zb3VyY2UsbC5zb3VyY2UpJiZ0LmRlZXBFcXVhbChzWyJzb3VyY2UtbGF5ZXIiXSxsWyJzb3VyY2UtbGF5ZXIiXSkmJnQuZGVlcEVxdWFsKHMudHlwZSxsLnR5cGUpKXtmb3IodSBpbiBZdChzLmxheW91dCxsLmxheW91dCxuLG8sbnVsbCxVdC5zZXRMYXlvdXRQcm9wZXJ0eSksWXQocy5wYWludCxsLnBhaW50LG4sbyxudWxsLFV0LnNldFBhaW50UHJvcGVydHkpLHQuZGVlcEVxdWFsKHMuZmlsdGVyLGwuZmlsdGVyKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldEZpbHRlcixhcmdzOltvLGwuZmlsdGVyXX0pLHQuZGVlcEVxdWFsKHMubWluem9vbSxsLm1pbnpvb20pJiZ0LmRlZXBFcXVhbChzLm1heHpvb20sbC5tYXh6b29tKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExheWVyWm9vbVJhbmdlLGFyZ3M6W28sbC5taW56b29tLGwubWF4em9vbV19KSxzKXMuaGFzT3duUHJvcGVydHkodSkmJiJsYXlvdXQiIT09dSYmInBhaW50IiE9PXUmJiJmaWx0ZXIiIT09dSYmIm1ldGFkYXRhIiE9PXUmJiJtaW56b29tIiE9PXUmJiJtYXh6b29tIiE9PXUmJigwPT09dS5pbmRleE9mKCJwYWludC4iKT9ZdChzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksVXQuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWVwRXF1YWwoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpO2Zvcih1IGluIGwpbC5oYXNPd25Qcm9wZXJ0eSh1KSYmIXMuaGFzT3duUHJvcGVydHkodSkmJiJsYXlvdXQiIT09dSYmInBhaW50IiE9PXUmJiJmaWx0ZXIiIT09dSYmIm1ldGFkYXRhIiE9PXUmJiJtaW56b29tIiE9PXUmJiJtYXh6b29tIiE9PXUmJigwPT09dS5pbmRleE9mKCJwYWludC4iKT9ZdChzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksVXQuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWVwRXF1YWwoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpfWVsc2Ugbi5wdXNoKHtjb21tYW5kOlV0LnJlbW92ZUxheWVyLGFyZ3M6W29dfSksYz1nW2cubGFzdEluZGV4T2YobykrMV0sbi5wdXNoKHtjb21tYW5kOlV0LmFkZExheWVyLGFyZ3M6W2wsY119KX0obyxyLmxheWVycyxuKX1jYXRjaCh0KXtjb25zb2xlLndhcm4oIlVuYWJsZSB0byBjb21wdXRlIHN0eWxlIGRpZmY6Iix0KSxuPVt7Y29tbWFuZDpVdC5zZXRTdHlsZSxhcmdzOltyXX1dfXJldHVybiBufSh0aGlzLnNlcmlhbGl6ZSgpLGUpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gVWUpfSkpO2lmKDA9PT1uLmxlbmd0aClyZXR1cm4hMTt2YXIgaT1uLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gamUpfSkpO2lmKGkubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCJVbmltcGxlbWVudGVkOiAiK2kubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21tYW5kfSkpLmpvaW4oIiwgIikrIi4iKTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbih0KXsic2V0VHJhbnNpdGlvbiIhPT10LmNvbW1hbmQmJnJbdC5jb21tYW5kXS5hcHBseShyLHQuYXJncyl9KSksdGhpcy5zdHlsZXNoZWV0PWUsITB9LHIucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKGUscil7aWYodGhpcy5nZXRJbWFnZShlKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJBbiBpbWFnZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLmFkZEltYWdlKGUsciksdGhpcy5fYXZhaWxhYmxlSW1hZ2VzPXRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKSx0aGlzLl9jaGFuZ2VkSW1hZ2VzW2VdPSEwLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKX0sci5wcm90b3R5cGUudXBkYXRlSW1hZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLmltYWdlTWFuYWdlci51cGRhdGVJbWFnZSh0LGUpfSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2UodCl9LHIucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIk5vIGltYWdlIHdpdGggdGhpcyBuYW1lIGV4aXN0cy4iKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLnJlbW92ZUltYWdlKGUpLHRoaXMuX2F2YWlsYWJsZUltYWdlcz10aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCksdGhpcy5fY2hhbmdlZEltYWdlc1tlXT0hMCx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9LHIucHJvdG90eXBlLmxpc3RJbWFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tMb2FkZWQoKSx0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCl9LHIucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcztpZih2b2lkIDA9PT1uJiYobj17fSksdGhpcy5fY2hlY2tMb2FkZWQoKSx2b2lkIDAhPT10aGlzLnNvdXJjZUNhY2hlc1tlXSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIGFscmVhZHkgYSBzb3VyY2Ugd2l0aCB0aGlzIElEIik7aWYoIXIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0eXBlIHByb3BlcnR5IG11c3QgYmUgZGVmaW5lZCwgYnV0IHRoZSBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB3ZXJlIGdpdmVuOiAiK09iamVjdC5rZXlzKHIpLmpvaW4oIiwgIikrIi4iKTtpZighKFsidmVjdG9yIiwicmFzdGVyIiwiZ2VvanNvbiIsInZpZGVvIiwiaW1hZ2UiXS5pbmRleE9mKHIudHlwZSk+PTAmJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5zb3VyY2UsInNvdXJjZXMuIitlLHIsbnVsbCxuKSkpe3RoaXMubWFwJiZ0aGlzLm1hcC5fY29sbGVjdFJlc291cmNlVGltaW5nJiYoci5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9ITApO3ZhciBhPXRoaXMuc291cmNlQ2FjaGVzW2VdPW5ldyBMdChlLHIsdGhpcy5kaXNwYXRjaGVyKTthLnN0eWxlPXRoaXMsYS5zZXRFdmVudGVkUGFyZW50KHRoaXMsKGZ1bmN0aW9uKCl7cmV0dXJue2lzU291cmNlTG9hZGVkOmkubG9hZGVkKCksc291cmNlOmEuc2VyaWFsaXplKCksc291cmNlSWQ6ZX19KSksYS5vbkFkZCh0aGlzLm1hcCksdGhpcy5fY2hhbmdlZD0hMH19LHIucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbihlKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMD09PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRCIpO2Zvcih2YXIgciBpbiB0aGlzLl9sYXllcnMpaWYodGhpcy5fbGF5ZXJzW3JdLnNvdXJjZT09PWUpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignU291cmNlICInK2UrJyIgY2Fubm90IGJlIHJlbW92ZWQgd2hpbGUgbGF5ZXIgIicrcisnIiBpcyB1c2luZyBpdC4nKSkpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2VdO2RlbGV0ZSB0aGlzLnNvdXJjZUNhY2hlc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFNvdXJjZXNbZV0sbi5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7c291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIixkYXRhVHlwZToic291cmNlIixzb3VyY2VJZDplfSkpLG4uc2V0RXZlbnRlZFBhcmVudChudWxsKSxuLmNsZWFyVGlsZXMoKSxuLm9uUmVtb3ZlJiZuLm9uUmVtb3ZlKHRoaXMubWFwKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5zZXRHZW9KU09OU291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0uZ2V0U291cmNlKCkuc2V0RGF0YShlKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlQ2FjaGVzW3RdJiZ0aGlzLnNvdXJjZUNhY2hlc1t0XS5nZXRTb3VyY2UoKX0sci5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPWUuaWQ7aWYodGhpcy5nZXRMYXllcihpKSl0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgIicraSsnIiBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG1hcCcpKSk7ZWxzZXt2YXIgYTtpZigiY3VzdG9tIj09PWUudHlwZSl7aWYoTmUodGhpcyx0LnZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcihlKSkpcmV0dXJuO2E9dC5jcmVhdGVTdHlsZUxheWVyKGUpfWVsc2V7aWYoIm9iamVjdCI9PXR5cGVvZiBlLnNvdXJjZSYmKHRoaXMuYWRkU291cmNlKGksZS5zb3VyY2UpLGU9dC5jbG9uZSQxKGUpLGU9dC5leHRlbmQoZSx7c291cmNlOml9KSksdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmxheWVyLCJsYXllcnMuIitpLGUse2FycmF5SW5kZXg6LTF9LG4pKXJldHVybjthPXQuY3JlYXRlU3R5bGVMYXllcihlKSx0aGlzLl92YWxpZGF0ZUxheWVyKGEpLGEuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtsYXllcjp7aWQ6aX19KSx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzW2EuaWRdPWEuc2VyaWFsaXplKCl9dmFyIG89cj90aGlzLl9vcmRlci5pbmRleE9mKHIpOnRoaXMuX29yZGVyLmxlbmd0aDtpZihyJiYtMT09PW8pdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkICInK3IrJyIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuJykpKTtlbHNle2lmKHRoaXMuX29yZGVyLnNwbGljZShvLDAsaSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITAsdGhpcy5fbGF5ZXJzW2ldPWEsdGhpcy5fcmVtb3ZlZExheWVyc1tpXSYmYS5zb3VyY2UmJiJjdXN0b20iIT09YS50eXBlKXt2YXIgcz10aGlzLl9yZW1vdmVkTGF5ZXJzW2ldO2RlbGV0ZSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2ldLHMudHlwZSE9PWEudHlwZT90aGlzLl91cGRhdGVkU291cmNlc1thLnNvdXJjZV09ImNsZWFyIjoodGhpcy5fdXBkYXRlZFNvdXJjZXNbYS5zb3VyY2VdPSJyZWxvYWQiLHRoaXMuc291cmNlQ2FjaGVzW2Euc291cmNlXS5wYXVzZSgpKX10aGlzLl91cGRhdGVMYXllcihhKSxhLm9uQWRkJiZhLm9uQWRkKHRoaXMubWFwKX19fSxyLnByb3RvdHlwZS5tb3ZlTGF5ZXI9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5fbGF5ZXJzW2VdKXtpZihlIT09cil7dmFyIG49dGhpcy5fb3JkZXIuaW5kZXhPZihlKTt0aGlzLl9vcmRlci5zcGxpY2UobiwxKTt2YXIgaT1yP3RoaXMuX29yZGVyLmluZGV4T2Yocik6dGhpcy5fb3JkZXIubGVuZ3RoO3ImJi0xPT09aT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgIicrcisnIiBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIG1hcC4nKSkpOih0aGlzLl9vcmRlci5zcGxpY2UoaSwwLGUpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwKX19ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIG1vdmVkLiIpKSl9LHIucHJvdG90eXBlLnJlbW92ZUxheWVyPWZ1bmN0aW9uKGUpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIHI9dGhpcy5fbGF5ZXJzW2VdO2lmKHIpe3Iuc2V0RXZlbnRlZFBhcmVudChudWxsKTt2YXIgbj10aGlzLl9vcmRlci5pbmRleE9mKGUpO3RoaXMuX29yZGVyLnNwbGljZShuLDEpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5fcmVtb3ZlZExheWVyc1tlXT1yLGRlbGV0ZSB0aGlzLl9sYXllcnNbZV0sZGVsZXRlIHRoaXMuX3NlcmlhbGl6ZWRMYXllcnNbZV0sZGVsZXRlIHRoaXMuX3VwZGF0ZWRMYXllcnNbZV0sZGVsZXRlIHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2VdLHIub25SZW1vdmUmJnIub25SZW1vdmUodGhpcy5tYXApfWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSByZW1vdmVkLiIpKSl9LHIucHJvdG90eXBlLmdldExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXllcnNbdF19LHIucHJvdG90eXBlLmhhc0xheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluIHRoaXMuX2xheWVyc30sci5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9dGhpcy5nZXRMYXllcihlKTtpP2kubWluem9vbT09PXImJmkubWF4em9vbT09PW58fChudWxsIT1yJiYoaS5taW56b29tPXIpLG51bGwhPW4mJihpLm1heHpvb209biksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgaGF2ZSB6b29tIGV4dGVudC4iKSkpfSxyLnByb3RvdHlwZS5zZXRGaWx0ZXI9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aWYoaSl7aWYoIXQuZGVlcEVxdWFsKGkuZmlsdGVyLHIpKXJldHVybiBudWxsPT1yPyhpLmZpbHRlcj12b2lkIDAsdm9pZCB0aGlzLl91cGRhdGVMYXllcihpKSk6dm9pZCh0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJsYXllcnMuIitpLmlkKyIuZmlsdGVyIixyLG51bGwsbil8fChpLmZpbHRlcj10LmNsb25lJDEociksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgZmlsdGVyZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0RmlsdGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0LmNsb25lJDEodGhpcy5nZXRMYXllcihlKS5maWx0ZXIpfSxyLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbixpKXt2b2lkIDA9PT1pJiYoaT17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgYT10aGlzLmdldExheWVyKGUpO2E/dC5kZWVwRXF1YWwoYS5nZXRMYXlvdXRQcm9wZXJ0eShyKSxuKXx8KGEuc2V0TGF5b3V0UHJvcGVydHkocixuLGkpLHRoaXMuX3VwZGF0ZUxheWVyKGEpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC4iKSkpfSxyLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuZ2V0TGF5ZXIoZSk7aWYobilyZXR1cm4gbi5nZXRMYXlvdXRQcm9wZXJ0eShyKTt0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKGUscixuLGkpe3ZvaWQgMD09PWkmJihpPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBhPXRoaXMuZ2V0TGF5ZXIoZSk7YT90LmRlZXBFcXVhbChhLmdldFBhaW50UHJvcGVydHkociksbil8fChhLnNldFBhaW50UHJvcGVydHkocixuLGkpJiZ0aGlzLl91cGRhdGVMYXllcihhKSx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2VdPSEwKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC4iKSkpfSxyLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0TGF5ZXIodCkuZ2V0UGFpbnRQcm9wZXJ0eShlKX0sci5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKGUscil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj1lLnNvdXJjZSxpPWUuc291cmNlTGF5ZXIsYT10aGlzLnNvdXJjZUNhY2hlc1tuXTtpZih2b2lkIDAhPT1hKXt2YXIgbz1hLmdldFNvdXJjZSgpLnR5cGU7Imdlb2pzb24iPT09byYmaT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkdlb0pTT04gc291cmNlcyBjYW5ub3QgaGF2ZSBhIHNvdXJjZUxheWVyIHBhcmFtZXRlci4iKSkpOiJ2ZWN0b3IiIT09b3x8aT8odm9pZCAwPT09ZS5pZCYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgZmVhdHVyZSBpZCBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZC4iKSkpLGEuc2V0RmVhdHVyZVN0YXRlKGksZS5pZCxyKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlTGF5ZXIgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIHZlY3RvciBzb3VyY2UgdHlwZXMuIikpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZSAnIituKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5yZW1vdmVGZWF0dXJlU3RhdGU9ZnVuY3Rpb24oZSxyKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBuPWUuc291cmNlLGk9dGhpcy5zb3VyY2VDYWNoZXNbbl07aWYodm9pZCAwIT09aSl7dmFyIGE9aS5nZXRTb3VyY2UoKS50eXBlLG89InZlY3RvciI9PT1hP2Uuc291cmNlTGF5ZXI6dm9pZCAwOyJ2ZWN0b3IiIT09YXx8bz9yJiYic3RyaW5nIiE9dHlwZW9mIGUuaWQmJiJudW1iZXIiIT10eXBlb2YgZS5pZD90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkEgZmVhdHVyZSBpZCBpcyByZXF1cmVkIHRvIHJlbW92ZSBpdHMgc3BlY2lmaWMgc3RhdGUgcHJvcGVydHkuIikpKTppLnJlbW92ZUZlYXR1cmVTdGF0ZShvLGUuaWQscik6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlTGF5ZXIgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIHZlY3RvciBzb3VyY2UgdHlwZXMuIikpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZSAnIituKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5nZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgcj1lLnNvdXJjZSxuPWUuc291cmNlTGF5ZXIsaT10aGlzLnNvdXJjZUNhY2hlc1tyXTtpZih2b2lkIDAhPT1pKXtpZigidmVjdG9yIiE9PWkuZ2V0U291cmNlKCkudHlwZXx8bilyZXR1cm4gdm9pZCAwPT09ZS5pZCYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgZmVhdHVyZSBpZCBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZC4iKSkpLGkuZ2V0RmVhdHVyZVN0YXRlKG4sZS5pZCk7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlTGF5ZXIgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIHZlY3RvciBzb3VyY2UgdHlwZXMuIikpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZSAnIityKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHtkdXJhdGlvbjozMDAsZGVsYXk6MH0sdGhpcy5zdHlsZXNoZWV0JiZ0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbil9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmZpbHRlck9iamVjdCh7dmVyc2lvbjp0aGlzLnN0eWxlc2hlZXQudmVyc2lvbixuYW1lOnRoaXMuc3R5bGVzaGVldC5uYW1lLG1ldGFkYXRhOnRoaXMuc3R5bGVzaGVldC5tZXRhZGF0YSxsaWdodDp0aGlzLnN0eWxlc2hlZXQubGlnaHQsY2VudGVyOnRoaXMuc3R5bGVzaGVldC5jZW50ZXIsem9vbTp0aGlzLnN0eWxlc2hlZXQuem9vbSxiZWFyaW5nOnRoaXMuc3R5bGVzaGVldC5iZWFyaW5nLHBpdGNoOnRoaXMuc3R5bGVzaGVldC5waXRjaCxzcHJpdGU6dGhpcy5zdHlsZXNoZWV0LnNwcml0ZSxnbHlwaHM6dGhpcy5zdHlsZXNoZWV0LmdseXBocyx0cmFuc2l0aW9uOnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uLHNvdXJjZXM6dC5tYXBPYmplY3QodGhpcy5zb3VyY2VDYWNoZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpLGxheWVyczp0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpfSwoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXR9KSl9LHIucHJvdG90eXBlLl91cGRhdGVMYXllcj1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGVkTGF5ZXJzW3QuaWRdPSEwLHQuc291cmNlJiYhdGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdJiYicmFzdGVyIiE9PXRoaXMuc291cmNlQ2FjaGVzW3Quc291cmNlXS5nZXRTb3VyY2UoKS50eXBlJiYodGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdPSJyZWxvYWQiLHRoaXMuc291cmNlQ2FjaGVzW3Quc291cmNlXS5wYXVzZSgpKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5fZmxhdHRlbkFuZFNvcnRSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9ZnVuY3Rpb24odCl7cmV0dXJuImZpbGwtZXh0cnVzaW9uIj09PWUuX2xheWVyc1t0XS50eXBlfSxuPXt9LGk9W10sYT10aGlzLl9vcmRlci5sZW5ndGgtMTthPj0wO2EtLSl7dmFyIG89dGhpcy5fb3JkZXJbYV07aWYocihvKSl7bltvXT1hO2Zvcih2YXIgcz0wLGw9dDtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc11bb107aWYoYylmb3IodmFyIHU9MCxmPWM7dTxmLmxlbmd0aDt1Kz0xKWkucHVzaChmW3VdKX19fWkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5pbnRlcnNlY3Rpb25aLXQuaW50ZXJzZWN0aW9uWn0pKTtmb3IodmFyIGg9W10scD10aGlzLl9vcmRlci5sZW5ndGgtMTtwPj0wO3AtLSl7dmFyIGQ9dGhpcy5fb3JkZXJbcF07aWYocihkKSlmb3IodmFyIGc9aS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIG09aVtnXS5mZWF0dXJlO2lmKG5bbS5sYXllci5pZF08cClicmVhaztoLnB1c2gobSksaS5wb3AoKX1lbHNlIGZvcih2YXIgdj0wLHk9dDt2PHkubGVuZ3RoO3YrPTEpe3ZhciB4PXlbdl1bZF07aWYoeClmb3IodmFyIGI9MCxfPXg7YjxfLmxlbmd0aDtiKz0xKWgucHVzaChfW2JdLmZlYXR1cmUpfX1yZXR1cm4gaH0sci5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKGUscixuKXtyJiZyLmZpbHRlciYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmZpbHRlciwicXVlcnlSZW5kZXJlZEZlYXR1cmVzLmZpbHRlciIsci5maWx0ZXIsbnVsbCxyKTt2YXIgaT17fTtpZihyJiZyLmxheWVycyl7aWYoIUFycmF5LmlzQXJyYXkoci5sYXllcnMpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoInBhcmFtZXRlcnMubGF5ZXJzIG11c3QgYmUgYW4gQXJyYXkuIikpKSxbXTtmb3IodmFyIGE9MCxvPXIubGF5ZXJzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXRoaXMuX2xheWVyc1tzXTtpZighbClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrcysiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBxdWVyaWVkIGZvciBmZWF0dXJlcy4iKSkpLFtdO2lbbC5zb3VyY2VdPSEwfX12YXIgYz1bXTtmb3IodmFyIHUgaW4gci5hdmFpbGFibGVJbWFnZXM9dGhpcy5fYXZhaWxhYmxlSW1hZ2VzLHRoaXMuc291cmNlQ2FjaGVzKXIubGF5ZXJzJiYhaVt1XXx8Yy5wdXNoKEYodGhpcy5zb3VyY2VDYWNoZXNbdV0sdGhpcy5fbGF5ZXJzLHRoaXMuX3NlcmlhbGl6ZWRMYXllcnMsZSxyLG4pKTtyZXR1cm4gdGhpcy5wbGFjZW1lbnQmJmMucHVzaChmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9e30sbD1hLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKG4pLGM9W10sdT0wLGY9T2JqZWN0LmtleXMobCkubWFwKE51bWJlcik7dTxmLmxlbmd0aDt1Kz0xKWMucHVzaChvW2ZbdV1dKTtjLnNvcnQoQik7Zm9yKHZhciBoPWZ1bmN0aW9uKCl7dmFyIHI9ZFtwXSxuPXIuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKGxbci5idWNrZXRJbnN0YW5jZUlkXSxlLHIuYnVja2V0SW5kZXgsci5zb3VyY2VMYXllckluZGV4LGkuZmlsdGVyLGkubGF5ZXJzLGkuYXZhaWxhYmxlSW1hZ2VzLHQpO2Zvcih2YXIgYSBpbiBuKXt2YXIgbz1zW2FdPXNbYV18fFtdLGM9blthXTtjLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ci5mZWF0dXJlU29ydE9yZGVyO2lmKG4pe3ZhciBpPW4uaW5kZXhPZih0LmZlYXR1cmVJbmRleCk7cmV0dXJuIG4uaW5kZXhPZihlLmZlYXR1cmVJbmRleCktaX1yZXR1cm4gZS5mZWF0dXJlSW5kZXgtdC5mZWF0dXJlSW5kZXh9KSk7Zm9yKHZhciB1PTAsZj1jO3U8Zi5sZW5ndGg7dSs9MSlvLnB1c2goZlt1XSl9fSxwPTAsZD1jO3A8ZC5sZW5ndGg7cCs9MSloKCk7dmFyIGc9ZnVuY3Rpb24oZSl7c1tlXS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1uLmZlYXR1cmUsYT1yW3RbZV0uc291cmNlXS5nZXRGZWF0dXJlU3RhdGUoaS5sYXllclsic291cmNlLWxheWVyIl0saS5pZCk7aS5zb3VyY2U9aS5sYXllci5zb3VyY2UsaS5sYXllclsic291cmNlLWxheWVyIl0mJihpLnNvdXJjZUxheWVyPWkubGF5ZXJbInNvdXJjZS1sYXllciJdKSxpLnN0YXRlPWF9KSl9O2Zvcih2YXIgbSBpbiBzKWcobSk7cmV0dXJuIHN9KHRoaXMuX2xheWVycyx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzLHRoaXMuc291cmNlQ2FjaGVzLGUscix0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleCx0aGlzLnBsYWNlbWVudC5yZXRhaW5lZFF1ZXJ5RGF0YSkpLHRoaXMuX2ZsYXR0ZW5BbmRTb3J0UmVuZGVyZWRGZWF0dXJlcyhjKX0sci5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbihlLHIpe3ImJnIuZmlsdGVyJiZ0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJxdWVyeVNvdXJjZUZlYXR1cmVzLmZpbHRlciIsci5maWx0ZXIsbnVsbCxyKTt2YXIgbj10aGlzLnNvdXJjZUNhY2hlc1tlXTtyZXR1cm4gbj9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFJlbmRlcmFibGVJZHMoKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmdldFRpbGVCeUlEKGUpfSkpLG49W10saT17fSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz1vLnRpbGVJRC5jYW5vbmljYWwua2V5O2lbc118fChpW3NdPSEwLG8ucXVlcnlTb3VyY2VGZWF0dXJlcyhuLGUpKX1yZXR1cm4gbn0obixyKTpbXX0sci5wcm90b3R5cGUuYWRkU291cmNlVHlwZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuZ2V0U291cmNlVHlwZSh0KT9uKG5ldyBFcnJvcignQSBzb3VyY2UgdHlwZSBjYWxsZWQgIicrdCsnIiBhbHJlYWR5IGV4aXN0cy4nKSk6KHIuc2V0U291cmNlVHlwZSh0LGUpLGUud29ya2VyU291cmNlVVJMP3ZvaWQgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgibG9hZFdvcmtlclNvdXJjZSIse25hbWU6dCx1cmw6ZS53b3JrZXJTb3VyY2VVUkx9LG4pOm4obnVsbCxudWxsKSl9LHIucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGlnaHQuZ2V0TGlnaHQoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSxyKXt2b2lkIDA9PT1yJiYocj17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj10aGlzLmxpZ2h0LmdldExpZ2h0KCksaT0hMTtmb3IodmFyIGEgaW4gZSlpZighdC5kZWVwRXF1YWwoZVthXSxuW2FdKSl7aT0hMDticmVha31pZihpKXt2YXIgbz17bm93OnQuYnJvd3Nlci5ub3coKSx0cmFuc2l0aW9uOnQuZXh0ZW5kKHtkdXJhdGlvbjozMDAsZGVsYXk6MH0sdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24pfTt0aGlzLmxpZ2h0LnNldExpZ2h0KGUsciksdGhpcy5saWdodC51cGRhdGVUcmFuc2l0aW9ucyhvKX19LHIucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiB2b2lkIDA9PT1hJiYoYT17fSksKCFhfHwhMSE9PWEudmFsaWRhdGUpJiZOZSh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe2tleTpyLHN0eWxlOnRoaXMuc2VyaWFsaXplKCksdmFsdWU6bixzdHlsZVNwZWM6dC5zdHlsZVNwZWN9LGkpKSl9LHIucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5fcmVxdWVzdCYmKHRoaXMuX3JlcXVlc3QuY2FuY2VsKCksdGhpcy5fcmVxdWVzdD1udWxsKSx0aGlzLl9zcHJpdGVSZXF1ZXN0JiYodGhpcy5fc3ByaXRlUmVxdWVzdC5jYW5jZWwoKSx0aGlzLl9zcHJpdGVSZXF1ZXN0PW51bGwpLHQuZXZlbnRlZC5vZmYoInBsdWdpblN0YXRlQ2hhbmdlIix0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2spLHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbZV0uc2V0RXZlbnRlZFBhcmVudChudWxsKTtmb3IodmFyIHIgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbcl0uY2xlYXJUaWxlcygpLHRoaXMuc291cmNlQ2FjaGVzW3JdLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7dGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQobnVsbCksdGhpcy5kaXNwYXRjaGVyLnJlbW92ZSgpfSxyLnByb3RvdHlwZS5fY2xlYXJTb3VyY2U9ZnVuY3Rpb24odCl7dGhpcy5zb3VyY2VDYWNoZXNbdF0uY2xlYXJUaWxlcygpfSxyLnByb3RvdHlwZS5fcmVsb2FkU291cmNlPWZ1bmN0aW9uKHQpe3RoaXMuc291cmNlQ2FjaGVzW3RdLnJlc3VtZSgpLHRoaXMuc291cmNlQ2FjaGVzW3RdLnJlbG9hZCgpfSxyLnByb3RvdHlwZS5fdXBkYXRlU291cmNlcz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbZV0udXBkYXRlKHQpfSxyLnByb3RvdHlwZS5fZ2VuZXJhdGVDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLl9yZWxvYWRTb3VyY2UodCl9LHIucHJvdG90eXBlLl91cGRhdGVQbGFjZW1lbnQ9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT0hMSk7Zm9yKHZhciBvPSExLHM9ITEsbD17fSxjPTAsdT10aGlzLl9vcmRlcjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXRoaXMuX2xheWVyc1t1W2NdXTtpZigic3ltYm9sIj09PWYudHlwZSl7aWYoIWxbZi5zb3VyY2VdKXt2YXIgaD10aGlzLnNvdXJjZUNhY2hlc1tmLnNvdXJjZV07bFtmLnNvdXJjZV09aC5nZXRSZW5kZXJhYmxlSWRzKCEwKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBoLmdldFRpbGVCeUlEKHQpfSkpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudGlsZUlELm92ZXJzY2FsZWRaLXQudGlsZUlELm92ZXJzY2FsZWRafHwodC50aWxlSUQuaXNMZXNzVGhhbihlLnRpbGVJRCk/LTE6MSl9KSl9dmFyIHA9dGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5hZGRMYXllcihmLGxbZi5zb3VyY2VdLGUuY2VudGVyLmxuZyk7bz1vfHxwfX1pZih0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4LnBydW5lVW51c2VkTGF5ZXJzKHRoaXMuX29yZGVyKSwoKGE9YXx8dGhpcy5fbGF5ZXJPcmRlckNoYW5nZWR8fDA9PT1uKXx8IXRoaXMucGF1c2VhYmxlUGxhY2VtZW50fHx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSYmIXRoaXMucGxhY2VtZW50LnN0aWxsUmVjZW50KHQuYnJvd3Nlci5ub3coKSxlLnpvb20pKSYmKHRoaXMucGF1c2VhYmxlUGxhY2VtZW50PW5ldyB6ZShlLHRoaXMuX29yZGVyLGEscixuLGksdGhpcy5wbGFjZW1lbnQpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSExKSx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKT90aGlzLnBsYWNlbWVudC5zZXRTdGFsZSgpOih0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5jb250aW51ZVBsYWNlbWVudCh0aGlzLl9vcmRlcix0aGlzLl9sYXllcnMsbCksdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkmJih0aGlzLnBsYWNlbWVudD10aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5jb21taXQodC5icm93c2VyLm5vdygpKSxzPSEwKSxvJiZ0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5wbGFjZW1lbnQuc2V0U3RhbGUoKSksc3x8bylmb3IodmFyIGQ9MCxnPXRoaXMuX29yZGVyO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIG09dGhpcy5fbGF5ZXJzW2dbZF1dOyJzeW1ib2wiPT09bS50eXBlJiZ0aGlzLnBsYWNlbWVudC51cGRhdGVMYXllck9wYWNpdGllcyhtLGxbbS5zb3VyY2VdKX1yZXR1cm4hdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCl8fHRoaXMucGxhY2VtZW50Lmhhc1RyYW5zaXRpb25zKHQuYnJvd3Nlci5ub3coKSl9LHIucHJvdG90eXBlLl9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW3RdLnJlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKX0sci5wcm90b3R5cGUuZ2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmltYWdlTWFuYWdlci5nZXRJbWFnZXMoZS5pY29ucyxyKSx0aGlzLl91cGRhdGVUaWxlc0ZvckNoYW5nZWRJbWFnZXMoKTt2YXIgbj10aGlzLnNvdXJjZUNhY2hlc1tlLnNvdXJjZV07biYmbi5zZXREZXBlbmRlbmNpZXMoZS50aWxlSUQua2V5LGUudHlwZSxlLmljb25zKX0sci5wcm90b3R5cGUuZ2V0R2x5cGhzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdseXBoTWFuYWdlci5nZXRHbHlwaHMoZS5zdGFja3Mscil9LHIucHJvdG90eXBlLmdldFJlc291cmNlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5tYWtlUmVxdWVzdChyLG4pfSxyfSh0LkV2ZW50ZWQpO3FlLmdldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIERbdF19LHFlLnNldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlKXtEW3RdPWV9LHFlLnJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2U9dC5yZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlO3ZhciBIZT10LmNyZWF0ZUxheW91dChbe25hbWU6ImFfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfV0pLEdlPXZyKCIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNpZiAhZGVmaW5lZChsb3dwKVxuI2RlZmluZSBsb3dwXG4jZW5kaWZcbiNpZiAhZGVmaW5lZChtZWRpdW1wKVxuI2RlZmluZSBtZWRpdW1wXG4jZW5kaWZcbiNpZiAhZGVmaW5lZChoaWdocClcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuI2VuZGlmIiwiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2lmICFkZWZpbmVkKGxvd3ApXG4jZGVmaW5lIGxvd3BcbiNlbmRpZlxuI2lmICFkZWZpbmVkKG1lZGl1bXApXG4jZGVmaW5lIG1lZGl1bXBcbiNlbmRpZlxuI2lmICFkZWZpbmVkKGhpZ2hwKVxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG4jZW5kaWZcbnZlYzIgdW5wYWNrX2Zsb2F0KGNvbnN0IGZsb2F0IHBhY2tlZFZhbHVlKSB7aW50IHBhY2tlZEludFZhbHVlPWludChwYWNrZWRWYWx1ZSk7aW50IHYwPXBhY2tlZEludFZhbHVlLzI1NjtyZXR1cm4gdmVjMih2MCxwYWNrZWRJbnRWYWx1ZS12MCoyNTYpO312ZWMyIHVucGFja19vcGFjaXR5KGNvbnN0IGZsb2F0IHBhY2tlZE9wYWNpdHkpIHtpbnQgaW50T3BhY2l0eT1pbnQocGFja2VkT3BhY2l0eSkvMjtyZXR1cm4gdmVjMihmbG9hdChpbnRPcGFjaXR5KS8xMjcuMCxtb2QocGFja2VkT3BhY2l0eSwyLjApKTt9dmVjNCBkZWNvZGVfY29sb3IoY29uc3QgdmVjMiBlbmNvZGVkQ29sb3IpIHtyZXR1cm4gdmVjNCh1bnBhY2tfZmxvYXQoZW5jb2RlZENvbG9yWzBdKS8yNTUuMCx1bnBhY2tfZmxvYXQoZW5jb2RlZENvbG9yWzFdKS8yNTUuMFxuKTt9ZmxvYXQgdW5wYWNrX21peF92ZWMyKGNvbnN0IHZlYzIgcGFja2VkVmFsdWUsY29uc3QgZmxvYXQgdCkge3JldHVybiBtaXgocGFja2VkVmFsdWVbMF0scGFja2VkVmFsdWVbMV0sdCk7fXZlYzQgdW5wYWNrX21peF9jb2xvcihjb25zdCB2ZWM0IHBhY2tlZENvbG9ycyxjb25zdCBmbG9hdCB0KSB7dmVjNCBtaW5Db2xvcj1kZWNvZGVfY29sb3IodmVjMihwYWNrZWRDb2xvcnNbMF0scGFja2VkQ29sb3JzWzFdKSk7dmVjNCBtYXhDb2xvcj1kZWNvZGVfY29sb3IodmVjMihwYWNrZWRDb2xvcnNbMl0scGFja2VkQ29sb3JzWzNdKSk7cmV0dXJuIG1peChtaW5Db2xvcixtYXhDb2xvcix0KTt9dmVjMiBnZXRfcGF0dGVybl9wb3MoY29uc3QgdmVjMiBwaXhlbF9jb29yZF91cHBlcixjb25zdCB2ZWMyIHBpeGVsX2Nvb3JkX2xvd2VyLGNvbnN0IHZlYzIgcGF0dGVybl9zaXplLGNvbnN0IGZsb2F0IHRpbGVfdW5pdHNfdG9fcGl4ZWxzLGNvbnN0IHZlYzIgcG9zKSB7dmVjMiBvZmZzZXQ9bW9kKG1vZChtb2QocGl4ZWxfY29vcmRfdXBwZXIscGF0dGVybl9zaXplKSoyNTYuMCxwYXR0ZXJuX3NpemUpKjI1Ni4wK3BpeGVsX2Nvb3JkX2xvd2VyLHBhdHRlcm5fc2l6ZSk7cmV0dXJuICh0aWxlX3VuaXRzX3RvX3BpeGVscypwb3Mrb2Zmc2V0KS9wYXR0ZXJuX3NpemU7fSIpLFllPXZyKCJ1bmlmb3JtIHZlYzQgdV9jb2xvcjt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt2b2lkIG1haW4oKSB7Z2xfRnJhZ0NvbG9yPXVfY29sb3IqdV9vcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO30iKSxXZT12cigidW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9hO3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9iO3VuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBmbG9hdCB1X21peDt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO3ZvaWQgbWFpbigpIHt2ZWMyIGltYWdlY29vcmQ9bW9kKHZfcG9zX2EsMS4wKTt2ZWMyIHBvcz1taXgodV9wYXR0ZXJuX3RsX2EvdV90ZXhzaXplLHVfcGF0dGVybl9icl9hL3VfdGV4c2l6ZSxpbWFnZWNvb3JkKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZSxwb3MpO3ZlYzIgaW1hZ2Vjb29yZF9iPW1vZCh2X3Bvc19iLDEuMCk7dmVjMiBwb3MyPW1peCh1X3BhdHRlcm5fdGxfYi91X3RleHNpemUsdV9wYXR0ZXJuX2JyX2IvdV90ZXhzaXplLGltYWdlY29vcmRfYik7dmVjNCBjb2xvcjI9dGV4dHVyZTJEKHVfaW1hZ2UscG9zMik7Z2xfRnJhZ0NvbG9yPW1peChjb2xvcjEsY29sb3IyLHVfbWl4KSp1X29wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO3VuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO3VuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO3VuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVsczthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zX2E9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix1X3NjYWxlX2EqdV9wYXR0ZXJuX3NpemVfYSx1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLGFfcG9zKTt2X3Bvc19iPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdV9zY2FsZV9iKnVfcGF0dGVybl9zaXplX2IsdV90aWxlX3VuaXRzX3RvX3BpeGVscyxhX3Bvcyk7fSIpLFhlPXZyKCJ2YXJ5aW5nIHZlYzMgdl9kYXRhO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcbnZlYzIgZXh0cnVkZT12X2RhdGEueHk7ZmxvYXQgZXh0cnVkZV9sZW5ndGg9bGVuZ3RoKGV4dHJ1ZGUpO2xvd3AgZmxvYXQgYW50aWFsaWFzYmx1cj12X2RhdGEuejtmbG9hdCBhbnRpYWxpYXNlZF9ibHVyPS1tYXgoYmx1cixhbnRpYWxpYXNibHVyKTtmbG9hdCBvcGFjaXR5X3Q9c21vb3Roc3RlcCgwLjAsYW50aWFsaWFzZWRfYmx1cixleHRydWRlX2xlbmd0aC0xLjApO2Zsb2F0IGNvbG9yX3Q9c3Ryb2tlX3dpZHRoIDwgMC4wMSA/IDAuMCA6IHNtb290aHN0ZXAoYW50aWFsaWFzZWRfYmx1ciwwLjAsZXh0cnVkZV9sZW5ndGgtcmFkaXVzLyhyYWRpdXMrc3Ryb2tlX3dpZHRoKSk7Z2xfRnJhZ0NvbG9yPW9wYWNpdHlfdCptaXgoY29sb3Iqb3BhY2l0eSxzdHJva2VfY29sb3Iqc3Ryb2tlX29wYWNpdHksY29sb3JfdCk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gYm9vbCB1X3NjYWxlX3dpdGhfbWFwO3VuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO3VuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMyB2X2RhdGE7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG52b2lkIG1haW4odm9pZCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcbnZlYzIgZXh0cnVkZT12ZWMyKG1vZChhX3BvcywyLjApKjIuMC0xLjApO3ZlYzIgY2lyY2xlX2NlbnRlcj1mbG9vcihhX3BvcyowLjUpO2lmICh1X3BpdGNoX3dpdGhfbWFwKSB7dmVjMiBjb3JuZXJfcG9zaXRpb249Y2lyY2xlX2NlbnRlcjtpZiAodV9zY2FsZV93aXRoX21hcCkge2Nvcm5lcl9wb3NpdGlvbis9ZXh0cnVkZSoocmFkaXVzK3N0cm9rZV93aWR0aCkqdV9leHRydWRlX3NjYWxlO30gZWxzZSB7dmVjNCBwcm9qZWN0ZWRfY2VudGVyPXVfbWF0cml4KnZlYzQoY2lyY2xlX2NlbnRlciwwLDEpO2Nvcm5lcl9wb3NpdGlvbis9ZXh0cnVkZSoocmFkaXVzK3N0cm9rZV93aWR0aCkqdV9leHRydWRlX3NjYWxlKihwcm9qZWN0ZWRfY2VudGVyLncvdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKTt9Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChjb3JuZXJfcG9zaXRpb24sMCwxKTt9IGVsc2Uge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoY2lyY2xlX2NlbnRlciwwLDEpO2lmICh1X3NjYWxlX3dpdGhfbWFwKSB7Z2xfUG9zaXRpb24ueHkrPWV4dHJ1ZGUqKHJhZGl1cytzdHJva2Vfd2lkdGgpKnVfZXh0cnVkZV9zY2FsZSp1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7fSBlbHNlIHtnbF9Qb3NpdGlvbi54eSs9ZXh0cnVkZSoocmFkaXVzK3N0cm9rZV93aWR0aCkqdV9leHRydWRlX3NjYWxlKmdsX1Bvc2l0aW9uLnc7fX1sb3dwIGZsb2F0IGFudGlhbGlhc2JsdXI9MS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvLyhyYWRpdXMrc3Ryb2tlX3dpZHRoKTt2X2RhdGE9dmVjMyhleHRydWRlLngsZXh0cnVkZS55LGFudGlhbGlhc2JsdXIpO30iKSxaZT12cigidm9pZCBtYWluKCkge2dsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7fSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO30iKSxKZT12cigidW5pZm9ybSBoaWdocCBmbG9hdCB1X2ludGVuc2l0eTt2YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCB3ZWlnaHRcbiNkZWZpbmUgR0FVU1NfQ09FRiAwLjM5ODk0MjI4MDQwMTQzMjdcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IHdlaWdodFxuZmxvYXQgZD0tMC41KjMuMCozLjAqZG90KHZfZXh0cnVkZSx2X2V4dHJ1ZGUpO2Zsb2F0IHZhbD13ZWlnaHQqdV9pbnRlbnNpdHkqR0FVU1NfQ09FRipleHAoZCk7Z2xfRnJhZ0NvbG9yPXZlYzQodmFsLDEuMCwxLjAsMS4wKTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBmbG9hdCB1X2V4dHJ1ZGVfc2NhbGU7dW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7dW5pZm9ybSBmbG9hdCB1X2ludGVuc2l0eTthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCB3ZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbmNvbnN0IGhpZ2hwIGZsb2F0IFpFUk89MS4wLzI1NS4wLzE2LjA7XG4jZGVmaW5lIEdBVVNTX0NPRUYgMC4zOTg5NDIyODA0MDE0MzI3XG52b2lkIG1haW4odm9pZCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgZmxvYXQgd2VpZ2h0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xudmVjMiB1bnNjYWxlZF9leHRydWRlPXZlYzIobW9kKGFfcG9zLDIuMCkqMi4wLTEuMCk7ZmxvYXQgUz1zcXJ0KC0yLjAqbG9nKFpFUk8vd2VpZ2h0L3VfaW50ZW5zaXR5L0dBVVNTX0NPRUYpKS8zLjA7dl9leHRydWRlPVMqdW5zY2FsZWRfZXh0cnVkZTt2ZWMyIGV4dHJ1ZGU9dl9leHRydWRlKnJhZGl1cyp1X2V4dHJ1ZGVfc2NhbGU7dmVjNCBwb3M9dmVjNChmbG9vcihhX3BvcyowLjUpK2V4dHJ1ZGUsMCwxKTtnbF9Qb3NpdGlvbj11X21hdHJpeCpwb3M7fSIpLEtlPXZyKCJ1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3VuaWZvcm0gc2FtcGxlcjJEIHVfY29sb3JfcmFtcDt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt2YXJ5aW5nIHZlYzIgdl9wb3M7dm9pZCBtYWluKCkge2Zsb2F0IHQ9dGV4dHVyZTJEKHVfaW1hZ2Usdl9wb3MpLnI7dmVjNCBjb2xvcj10ZXh0dXJlMkQodV9jb2xvcl9yYW1wLHZlYzIodCwwLjUpKTtnbF9GcmFnQ29sb3I9Y29sb3IqdV9vcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMC4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV93b3JsZDthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3M7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MqdV93b3JsZCwwLDEpO3ZfcG9zLng9YV9wb3MueDt2X3Bvcy55PTEuMC1hX3Bvcy55O30iKSxRZT12cigidmFyeWluZyBmbG9hdCB2X3BsYWNlZDt2YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDt2b2lkIG1haW4oKSB7ZmxvYXQgYWxwaGE9MC41O2dsX0ZyYWdDb2xvcj12ZWM0KDEuMCwwLjAsMC4wLDEuMCkqYWxwaGE7aWYgKHZfcGxhY2VkID4gMC41KSB7Z2xfRnJhZ0NvbG9yPXZlYzQoMC4wLDAuMCwxLjAsMC41KSphbHBoYTt9aWYgKHZfbm90VXNlZCA+IDAuNSkge2dsX0ZyYWdDb2xvcio9LjE7fX0iLCJhdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX2FuY2hvcl9wb3M7YXR0cmlidXRlIHZlYzIgYV9leHRydWRlO2F0dHJpYnV0ZSB2ZWMyIGFfcGxhY2VkO2F0dHJpYnV0ZSB2ZWMyIGFfc2hpZnQ7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7dW5pZm9ybSBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7dmFyeWluZyBmbG9hdCB2X3BsYWNlZDt2YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDt2b2lkIG1haW4oKSB7dmVjNCBwcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfYW5jaG9yX3BvcywwLDEpO2hpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U9cHJvamVjdGVkUG9pbnQudztoaWdocCBmbG9hdCBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW89Y2xhbXAoMC41KzAuNSoodV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlL2NhbWVyYV90b19hbmNob3JfZGlzdGFuY2UpLDAuMCw0LjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMC4wLDEuMCk7Z2xfUG9zaXRpb24ueHkrPShhX2V4dHJ1ZGUrYV9zaGlmdCkqdV9leHRydWRlX3NjYWxlKmdsX1Bvc2l0aW9uLncqY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO3ZfcGxhY2VkPWFfcGxhY2VkLng7dl9ub3RVc2VkPWFfcGxhY2VkLnk7fSIpLCRlPXZyKCJ2YXJ5aW5nIGZsb2F0IHZfcmFkaXVzO3ZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7dmFyeWluZyBmbG9hdCB2X3BlcnNwZWN0aXZlX3JhdGlvO3ZhcnlpbmcgZmxvYXQgdl9jb2xsaXNpb247dm9pZCBtYWluKCkge2Zsb2F0IGFscGhhPTAuNSptaW4odl9wZXJzcGVjdGl2ZV9yYXRpbywxLjApO2Zsb2F0IHN0cm9rZV9yYWRpdXM9MC45Km1heCh2X3BlcnNwZWN0aXZlX3JhdGlvLDEuMCk7ZmxvYXQgZGlzdGFuY2VfdG9fY2VudGVyPWxlbmd0aCh2X2V4dHJ1ZGUpO2Zsb2F0IGRpc3RhbmNlX3RvX2VkZ2U9YWJzKGRpc3RhbmNlX3RvX2NlbnRlci12X3JhZGl1cyk7ZmxvYXQgb3BhY2l0eV90PXNtb290aHN0ZXAoLXN0cm9rZV9yYWRpdXMsMC4wLC1kaXN0YW5jZV90b19lZGdlKTt2ZWM0IGNvbG9yPW1peCh2ZWM0KDAuMCwwLjAsMS4wLDAuNSksdmVjNCgxLjAsMC4wLDAuMCwxLjApLHZfY29sbGlzaW9uKTtnbF9GcmFnQ29sb3I9Y29sb3IqYWxwaGEqb3BhY2l0eV90O30iLCJhdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgZmxvYXQgYV9yYWRpdXM7YXR0cmlidXRlIHZlYzIgYV9mbGFnczt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfaW52X21hdHJpeDt1bmlmb3JtIHZlYzIgdV92aWV3cG9ydF9zaXplO3VuaWZvcm0gZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3ZhcnlpbmcgZmxvYXQgdl9yYWRpdXM7dmFyeWluZyB2ZWMyIHZfZXh0cnVkZTt2YXJ5aW5nIGZsb2F0IHZfcGVyc3BlY3RpdmVfcmF0aW87dmFyeWluZyBmbG9hdCB2X2NvbGxpc2lvbjt2ZWMzIHRvVGlsZVBvc2l0aW9uKHZlYzIgc2NyZWVuUG9zKSB7dmVjNCByYXlTdGFydD11X2ludl9tYXRyaXgqdmVjNChzY3JlZW5Qb3MsLTEuMCwxLjApO3ZlYzQgcmF5RW5kICA9dV9pbnZfbWF0cml4KnZlYzQoc2NyZWVuUG9zLCAxLjAsMS4wKTtyYXlTdGFydC54eXovPXJheVN0YXJ0Lnc7cmF5RW5kLnh5eiAgLz1yYXlFbmQudztoaWdocCBmbG9hdCB0PSgwLjAtcmF5U3RhcnQueikvKHJheUVuZC56LXJheVN0YXJ0LnopO3JldHVybiBtaXgocmF5U3RhcnQueHl6LHJheUVuZC54eXosdCk7fXZvaWQgbWFpbigpIHt2ZWMyIHF1YWRDZW50ZXJQb3M9YV9wb3M7ZmxvYXQgcmFkaXVzPWFfcmFkaXVzO2Zsb2F0IGNvbGxpc2lvbj1hX2ZsYWdzLng7ZmxvYXQgdmVydGV4SWR4PWFfZmxhZ3MueTt2ZWMyIHF1YWRWZXJ0ZXhPZmZzZXQ9dmVjMihtaXgoLTEuMCwxLjAsZmxvYXQodmVydGV4SWR4ID49Mi4wKSksbWl4KC0xLjAsMS4wLGZsb2F0KHZlcnRleElkeCA+PTEuMCAmJiB2ZXJ0ZXhJZHggPD0yLjApKSk7dmVjMiBxdWFkVmVydGV4RXh0ZW50PXF1YWRWZXJ0ZXhPZmZzZXQqcmFkaXVzO3ZlYzMgdGlsZVBvcz10b1RpbGVQb3NpdGlvbihxdWFkQ2VudGVyUG9zKTt2ZWM0IGNsaXBQb3M9dV9tYXRyaXgqdmVjNCh0aWxlUG9zLDEuMCk7aGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZT1jbGlwUG9zLnc7aGlnaHAgZmxvYXQgY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvPWNsYW1wKDAuNSswLjUqKHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZS9jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSwwLjAsNC4wKTtmbG9hdCBwYWRkaW5nX2ZhY3Rvcj0xLjI7dl9yYWRpdXM9cmFkaXVzO3ZfZXh0cnVkZT1xdWFkVmVydGV4RXh0ZW50KnBhZGRpbmdfZmFjdG9yO3ZfcGVyc3BlY3RpdmVfcmF0aW89Y29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO3ZfY29sbGlzaW9uPWNvbGxpc2lvbjtnbF9Qb3NpdGlvbj12ZWM0KGNsaXBQb3MueHl6L2NsaXBQb3MudywxLjApK3ZlYzQocXVhZFZlcnRleEV4dGVudCpwYWRkaW5nX2ZhY3Rvci91X3ZpZXdwb3J0X3NpemUqMi4wLDAuMCwwLjApO30iKSx0cj12cigidW5pZm9ybSBoaWdocCB2ZWM0IHVfY29sb3I7dW5pZm9ybSBzYW1wbGVyMkQgdV9vdmVybGF5O3ZhcnlpbmcgdmVjMiB2X3V2O3ZvaWQgbWFpbigpIHt2ZWM0IG92ZXJsYXlfY29sb3I9dGV4dHVyZTJEKHVfb3ZlcmxheSx2X3V2KTtnbF9GcmFnQ29sb3I9bWl4KHVfY29sb3Isb3ZlcmxheV9jb2xvcixvdmVybGF5X2NvbG9yLmEpO30iLCJhdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl91djt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBmbG9hdCB1X292ZXJsYXlfc2NhbGU7dm9pZCBtYWluKCkge3ZfdXY9YV9wb3MvODE5Mi4wO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MqdV9vdmVybGF5X3NjYWxlLDAsMSk7fSIpLGVyPXZyKCIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmdsX0ZyYWdDb2xvcj1jb2xvcipvcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3VuaWZvcm0gbWF0NCB1X21hdHJpeDtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZ2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO30iKSxycj12cigidmFyeWluZyB2ZWMyIHZfcG9zO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZmxvYXQgZGlzdD1sZW5ndGgodl9wb3MtZ2xfRnJhZ0Nvb3JkLnh5KTtmbG9hdCBhbHBoYT0xLjAtc21vb3Roc3RlcCgwLjAsMS4wLGRpc3QpO2dsX0ZyYWdDb2xvcj1vdXRsaW5lX2NvbG9yKihhbHBoYSpvcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJhdHRyaWJ1dGUgdmVjMiBhX3Bvczt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfd29ybGQ7dmFyeWluZyB2ZWMyIHZfcG9zO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZ2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zPShnbF9Qb3NpdGlvbi54eS9nbF9Qb3NpdGlvbi53KzEuMCkvMi4wKnVfd29ybGQ7fSIpLG5yPXZyKCJ1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dW5pZm9ybSBmbG9hdCB1X2ZhZGU7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dmFyeWluZyB2ZWMyIHZfcG9zO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7dmVjMiBpbWFnZWNvb3JkPW1vZCh2X3Bvc19hLDEuMCk7dmVjMiBwb3M9bWl4KHBhdHRlcm5fdGxfYS91X3RleHNpemUscGF0dGVybl9icl9hL3VfdGV4c2l6ZSxpbWFnZWNvb3JkKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZSxwb3MpO3ZlYzIgaW1hZ2Vjb29yZF9iPW1vZCh2X3Bvc19iLDEuMCk7dmVjMiBwb3MyPW1peChwYXR0ZXJuX3RsX2IvdV90ZXhzaXplLHBhdHRlcm5fYnJfYi91X3RleHNpemUsaW1hZ2Vjb29yZF9iKTt2ZWM0IGNvbG9yMj10ZXh0dXJlMkQodV9pbWFnZSxwb3MyKTtmbG9hdCBkaXN0PWxlbmd0aCh2X3Bvcy1nbF9GcmFnQ29vcmQueHkpO2Zsb2F0IGFscGhhPTEuMC1zbW9vdGhzdGVwKDAuMCwxLjAsZGlzdCk7Z2xfRnJhZ0NvbG9yPW1peChjb2xvcjEsY29sb3IyLHVfZmFkZSkqYWxwaGEqb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfd29ybGQ7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7dW5pZm9ybSB2ZWMzIHVfc2NhbGU7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dmFyeWluZyB2ZWMyIHZfcG9zO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dztmbG9hdCB0aWxlUmF0aW89dV9zY2FsZS54O2Zsb2F0IGZyb21TY2FsZT11X3NjYWxlLnk7ZmxvYXQgdG9TY2FsZT11X3NjYWxlLno7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZlYzIgZGlzcGxheV9zaXplX2E9KHBhdHRlcm5fYnJfYS1wYXR0ZXJuX3RsX2EpL3BpeGVsX3JhdGlvX2Zyb207dmVjMiBkaXNwbGF5X3NpemVfYj0ocGF0dGVybl9icl9iLXBhdHRlcm5fdGxfYikvcGl4ZWxfcmF0aW9fdG87dl9wb3NfYT1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLGZyb21TY2FsZSpkaXNwbGF5X3NpemVfYSx0aWxlUmF0aW8sYV9wb3MpO3ZfcG9zX2I9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix0b1NjYWxlKmRpc3BsYXlfc2l6ZV9iLHRpbGVSYXRpbyxhX3Bvcyk7dl9wb3M9KGdsX1Bvc2l0aW9uLnh5L2dsX1Bvc2l0aW9uLncrMS4wKS8yLjAqdV93b3JsZDt9IiksaXI9dnIoInVuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBmbG9hdCB1X2ZhZGU7dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O3ZlYzIgaW1hZ2Vjb29yZD1tb2Qodl9wb3NfYSwxLjApO3ZlYzIgcG9zPW1peChwYXR0ZXJuX3RsX2EvdV90ZXhzaXplLHBhdHRlcm5fYnJfYS91X3RleHNpemUsaW1hZ2Vjb29yZCk7dmVjNCBjb2xvcjE9dGV4dHVyZTJEKHVfaW1hZ2UscG9zKTt2ZWMyIGltYWdlY29vcmRfYj1tb2Qodl9wb3NfYiwxLjApO3ZlYzIgcG9zMj1taXgocGF0dGVybl90bF9iL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2IvdV90ZXhzaXplLGltYWdlY29vcmRfYik7dmVjNCBjb2xvcjI9dGV4dHVyZTJEKHVfaW1hZ2UscG9zMik7Z2xfRnJhZ0NvbG9yPW1peChjb2xvcjEsY29sb3IyLHVfZmFkZSkqb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7dW5pZm9ybSB2ZWMzIHVfc2NhbGU7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHRpbGVab29tUmF0aW89dV9zY2FsZS54O2Zsb2F0IGZyb21TY2FsZT11X3NjYWxlLnk7ZmxvYXQgdG9TY2FsZT11X3NjYWxlLno7dmVjMiBkaXNwbGF5X3NpemVfYT0ocGF0dGVybl9icl9hLXBhdHRlcm5fdGxfYSkvcGl4ZWxfcmF0aW9fZnJvbTt2ZWMyIGRpc3BsYXlfc2l6ZV9iPShwYXR0ZXJuX2JyX2ItcGF0dGVybl90bF9iKS9waXhlbF9yYXRpb190bztnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dl9wb3NfYT1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLGZyb21TY2FsZSpkaXNwbGF5X3NpemVfYSx0aWxlWm9vbVJhdGlvLGFfcG9zKTt2X3Bvc19iPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdG9TY2FsZSpkaXNwbGF5X3NpemVfYix0aWxlWm9vbVJhdGlvLGFfcG9zKTt9IiksYXI9dnIoInZhcnlpbmcgdmVjNCB2X2NvbG9yO3ZvaWQgbWFpbigpIHtnbF9GcmFnQ29sb3I9dl9jb2xvcjtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMzIHVfbGlnaHRjb2xvcjt1bmlmb3JtIGxvd3AgdmVjMyB1X2xpZ2h0cG9zO3VuaWZvcm0gbG93cCBmbG9hdCB1X2xpZ2h0aW50ZW5zaXR5O3VuaWZvcm0gZmxvYXQgdV92ZXJ0aWNhbF9ncmFkaWVudDt1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5O2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWM0IGFfbm9ybWFsX2VkO3ZhcnlpbmcgdmVjNCB2X2NvbG9yO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbnZlYzMgbm9ybWFsPWFfbm9ybWFsX2VkLnh5ejtiYXNlPW1heCgwLjAsYmFzZSk7aGVpZ2h0PW1heCgwLjAsaGVpZ2h0KTtmbG9hdCB0PW1vZChub3JtYWwueCwyLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsdCA+IDAuMCA/IGhlaWdodCA6IGJhc2UsMSk7ZmxvYXQgY29sb3J2YWx1ZT1jb2xvci5yKjAuMjEyNitjb2xvci5nKjAuNzE1Mitjb2xvci5iKjAuMDcyMjt2X2NvbG9yPXZlYzQoMC4wLDAuMCwwLjAsMS4wKTt2ZWM0IGFtYmllbnRsaWdodD12ZWM0KDAuMDMsMC4wMywwLjAzLDEuMCk7Y29sb3IrPWFtYmllbnRsaWdodDtmbG9hdCBkaXJlY3Rpb25hbD1jbGFtcChkb3Qobm9ybWFsLzE2Mzg0LjAsdV9saWdodHBvcyksMC4wLDEuMCk7ZGlyZWN0aW9uYWw9bWl4KCgxLjAtdV9saWdodGludGVuc2l0eSksbWF4KCgxLjAtY29sb3J2YWx1ZSt1X2xpZ2h0aW50ZW5zaXR5KSwxLjApLGRpcmVjdGlvbmFsKTtpZiAobm9ybWFsLnkgIT0wLjApIHtkaXJlY3Rpb25hbCo9KCgxLjAtdV92ZXJ0aWNhbF9ncmFkaWVudCkrKHVfdmVydGljYWxfZ3JhZGllbnQqY2xhbXAoKHQrYmFzZSkqcG93KGhlaWdodC8xNTAuMCwwLjUpLG1peCgwLjcsMC45OCwxLjAtdV9saWdodGludGVuc2l0eSksMS4wKSkpO312X2NvbG9yLnIrPWNsYW1wKGNvbG9yLnIqZGlyZWN0aW9uYWwqdV9saWdodGNvbG9yLnIsbWl4KDAuMCwwLjMsMS4wLXVfbGlnaHRjb2xvci5yKSwxLjApO3ZfY29sb3IuZys9Y2xhbXAoY29sb3IuZypkaXJlY3Rpb25hbCp1X2xpZ2h0Y29sb3IuZyxtaXgoMC4wLDAuMywxLjAtdV9saWdodGNvbG9yLmcpLDEuMCk7dl9jb2xvci5iKz1jbGFtcChjb2xvci5iKmRpcmVjdGlvbmFsKnVfbGlnaHRjb2xvci5iLG1peCgwLjAsMC4zLDEuMC11X2xpZ2h0Y29sb3IuYiksMS4wKTt2X2NvbG9yKj11X29wYWNpdHk7fSIpLG9yPXZyKCJ1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gZmxvYXQgdV9mYWRlO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dzt2ZWMyIGltYWdlY29vcmQ9bW9kKHZfcG9zX2EsMS4wKTt2ZWMyIHBvcz1taXgocGF0dGVybl90bF9hL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2EvdV90ZXhzaXplLGltYWdlY29vcmQpO3ZlYzQgY29sb3IxPXRleHR1cmUyRCh1X2ltYWdlLHBvcyk7dmVjMiBpbWFnZWNvb3JkX2I9bW9kKHZfcG9zX2IsMS4wKTt2ZWMyIHBvczI9bWl4KHBhdHRlcm5fdGxfYi91X3RleHNpemUscGF0dGVybl9icl9iL3VfdGV4c2l6ZSxpbWFnZWNvb3JkX2IpO3ZlYzQgY29sb3IyPXRleHR1cmUyRCh1X2ltYWdlLHBvczIpO3ZlYzQgbWl4ZWRDb2xvcj1taXgoY29sb3IxLGNvbG9yMix1X2ZhZGUpO2dsX0ZyYWdDb2xvcj1taXhlZENvbG9yKnZfbGlnaHRpbmc7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO3VuaWZvcm0gZmxvYXQgdV9oZWlnaHRfZmFjdG9yO3VuaWZvcm0gdmVjMyB1X3NjYWxlO3VuaWZvcm0gZmxvYXQgdV92ZXJ0aWNhbF9ncmFkaWVudDt1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5O3VuaWZvcm0gdmVjMyB1X2xpZ2h0Y29sb3I7dW5pZm9ybSBsb3dwIHZlYzMgdV9saWdodHBvczt1bmlmb3JtIGxvd3AgZmxvYXQgdV9saWdodGludGVuc2l0eTthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjNCBhX25vcm1hbF9lZDt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2YXJ5aW5nIHZlYzQgdl9saWdodGluZztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHRpbGVSYXRpbz11X3NjYWxlLng7ZmxvYXQgZnJvbVNjYWxlPXVfc2NhbGUueTtmbG9hdCB0b1NjYWxlPXVfc2NhbGUuejt2ZWMzIG5vcm1hbD1hX25vcm1hbF9lZC54eXo7ZmxvYXQgZWRnZWRpc3RhbmNlPWFfbm9ybWFsX2VkLnc7dmVjMiBkaXNwbGF5X3NpemVfYT0ocGF0dGVybl9icl9hLXBhdHRlcm5fdGxfYSkvcGl4ZWxfcmF0aW9fZnJvbTt2ZWMyIGRpc3BsYXlfc2l6ZV9iPShwYXR0ZXJuX2JyX2ItcGF0dGVybl90bF9iKS9waXhlbF9yYXRpb190bztiYXNlPW1heCgwLjAsYmFzZSk7aGVpZ2h0PW1heCgwLjAsaGVpZ2h0KTtmbG9hdCB0PW1vZChub3JtYWwueCwyLjApO2Zsb2F0IHo9dCA+IDAuMCA/IGhlaWdodCA6IGJhc2U7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3Bvcyx6LDEpO3ZlYzIgcG9zPW5vcm1hbC54PT0xLjAgJiYgbm9ybWFsLnk9PTAuMCAmJiBub3JtYWwuej09MTYzODQuMFxuPyBhX3Bvc1xuOiB2ZWMyKGVkZ2VkaXN0YW5jZSx6KnVfaGVpZ2h0X2ZhY3Rvcik7dl9wb3NfYT1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLGZyb21TY2FsZSpkaXNwbGF5X3NpemVfYSx0aWxlUmF0aW8scG9zKTt2X3Bvc19iPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdG9TY2FsZSpkaXNwbGF5X3NpemVfYix0aWxlUmF0aW8scG9zKTt2X2xpZ2h0aW5nPXZlYzQoMC4wLDAuMCwwLjAsMS4wKTtmbG9hdCBkaXJlY3Rpb25hbD1jbGFtcChkb3Qobm9ybWFsLzE2MzgzLjAsdV9saWdodHBvcyksMC4wLDEuMCk7ZGlyZWN0aW9uYWw9bWl4KCgxLjAtdV9saWdodGludGVuc2l0eSksbWF4KCgwLjUrdV9saWdodGludGVuc2l0eSksMS4wKSxkaXJlY3Rpb25hbCk7aWYgKG5vcm1hbC55ICE9MC4wKSB7ZGlyZWN0aW9uYWwqPSgoMS4wLXVfdmVydGljYWxfZ3JhZGllbnQpKyh1X3ZlcnRpY2FsX2dyYWRpZW50KmNsYW1wKCh0K2Jhc2UpKnBvdyhoZWlnaHQvMTUwLjAsMC41KSxtaXgoMC43LDAuOTgsMS4wLXVfbGlnaHRpbnRlbnNpdHkpLDEuMCkpKTt9dl9saWdodGluZy5yZ2IrPWNsYW1wKGRpcmVjdGlvbmFsKnVfbGlnaHRjb2xvcixtaXgodmVjMygwLjApLHZlYzMoMC4zKSwxLjAtdV9saWdodGNvbG9yKSx2ZWMzKDEuMCkpO3ZfbGlnaHRpbmcqPXVfb3BhY2l0eTt9Iiksc3I9dnIoIiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3Bvczt1bmlmb3JtIHZlYzIgdV9kaW1lbnNpb247dW5pZm9ybSBmbG9hdCB1X3pvb207dW5pZm9ybSBmbG9hdCB1X21heHpvb207dW5pZm9ybSB2ZWM0IHVfdW5wYWNrO2Zsb2F0IGdldEVsZXZhdGlvbih2ZWMyIGNvb3JkLGZsb2F0IGJpYXMpIHt2ZWM0IGRhdGE9dGV4dHVyZTJEKHVfaW1hZ2UsY29vcmQpKjI1NS4wO2RhdGEuYT0tMS4wO3JldHVybiBkb3QoZGF0YSx1X3VucGFjaykvNC4wO312b2lkIG1haW4oKSB7dmVjMiBlcHNpbG9uPTEuMC91X2RpbWVuc2lvbjtmbG9hdCBhPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKC1lcHNpbG9uLngsLWVwc2lsb24ueSksMC4wKTtmbG9hdCBiPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKDAsLWVwc2lsb24ueSksMC4wKTtmbG9hdCBjPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKGVwc2lsb24ueCwtZXBzaWxvbi55KSwwLjApO2Zsb2F0IGQ9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoLWVwc2lsb24ueCwwKSwwLjApO2Zsb2F0IGU9Z2V0RWxldmF0aW9uKHZfcG9zLDAuMCk7ZmxvYXQgZj1nZXRFbGV2YXRpb24odl9wb3MrdmVjMihlcHNpbG9uLngsMCksMC4wKTtmbG9hdCBnPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKC1lcHNpbG9uLngsZXBzaWxvbi55KSwwLjApO2Zsb2F0IGg9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoMCxlcHNpbG9uLnkpLDAuMCk7ZmxvYXQgaT1nZXRFbGV2YXRpb24odl9wb3MrdmVjMihlcHNpbG9uLngsZXBzaWxvbi55KSwwLjApO2Zsb2F0IGV4YWdnZXJhdGlvbj11X3pvb20gPCAyLjAgPyAwLjQgOiB1X3pvb20gPCA0LjUgPyAwLjM1IDogMC4zO3ZlYzIgZGVyaXY9dmVjMigoYytmK2YraSktKGErZCtkK2cpLChnK2graCtpKS0oYStiK2IrYykpLyBwb3coMi4wLCh1X3pvb20tdV9tYXh6b29tKSpleGFnZ2VyYXRpb24rMTkuMjU2Mi11X3pvb20pO2dsX0ZyYWdDb2xvcj1jbGFtcCh2ZWM0KGRlcml2LngvMi4wKzAuNSxkZXJpdi55LzIuMCswLjUsMS4wLDEuMCksMC4wLDEuMCk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X2RpbWVuc2lvbjthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvczt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO2hpZ2hwIHZlYzIgZXBzaWxvbj0xLjAvdV9kaW1lbnNpb247ZmxvYXQgc2NhbGU9KHVfZGltZW5zaW9uLngtMi4wKS91X2RpbWVuc2lvbi54O3ZfcG9zPShhX3RleHR1cmVfcG9zLzgxOTIuMCkqc2NhbGUrZXBzaWxvbjt9IiksbHI9dnIoInVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zO3VuaWZvcm0gdmVjMiB1X2xhdHJhbmdlO3VuaWZvcm0gdmVjMiB1X2xpZ2h0O3VuaWZvcm0gdmVjNCB1X3NoYWRvdzt1bmlmb3JtIHZlYzQgdV9oaWdobGlnaHQ7dW5pZm9ybSB2ZWM0IHVfYWNjZW50O1xuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xudm9pZCBtYWluKCkge3ZlYzQgcGl4ZWw9dGV4dHVyZTJEKHVfaW1hZ2Usdl9wb3MpO3ZlYzIgZGVyaXY9KChwaXhlbC5yZyoyLjApLTEuMCk7ZmxvYXQgc2NhbGVGYWN0b3I9Y29zKHJhZGlhbnMoKHVfbGF0cmFuZ2VbMF0tdV9sYXRyYW5nZVsxXSkqKDEuMC12X3Bvcy55KSt1X2xhdHJhbmdlWzFdKSk7ZmxvYXQgc2xvcGU9YXRhbigxLjI1Kmxlbmd0aChkZXJpdikvc2NhbGVGYWN0b3IpO2Zsb2F0IGFzcGVjdD1kZXJpdi54ICE9MC4wID8gYXRhbihkZXJpdi55LC1kZXJpdi54KSA6IFBJLzIuMCooZGVyaXYueSA+IDAuMCA/IDEuMCA6LTEuMCk7ZmxvYXQgaW50ZW5zaXR5PXVfbGlnaHQueDtmbG9hdCBhemltdXRoPXVfbGlnaHQueStQSTtmbG9hdCBiYXNlPTEuODc1LWludGVuc2l0eSoxLjc1O2Zsb2F0IG1heFZhbHVlPTAuNSpQSTtmbG9hdCBzY2FsZWRTbG9wZT1pbnRlbnNpdHkgIT0wLjUgPyAoKHBvdyhiYXNlLHNsb3BlKS0xLjApLyhwb3coYmFzZSxtYXhWYWx1ZSktMS4wKSkqbWF4VmFsdWUgOiBzbG9wZTtmbG9hdCBhY2NlbnQ9Y29zKHNjYWxlZFNsb3BlKTt2ZWM0IGFjY2VudF9jb2xvcj0oMS4wLWFjY2VudCkqdV9hY2NlbnQqY2xhbXAoaW50ZW5zaXR5KjIuMCwwLjAsMS4wKTtmbG9hdCBzaGFkZT1hYnMobW9kKChhc3BlY3QrYXppbXV0aCkvUEkrMC41LDIuMCktMS4wKTt2ZWM0IHNoYWRlX2NvbG9yPW1peCh1X3NoYWRvdyx1X2hpZ2hsaWdodCxzaGFkZSkqc2luKHNjYWxlZFNsb3BlKSpjbGFtcChpbnRlbnNpdHkqMi4wLDAuMCwxLjApO2dsX0ZyYWdDb2xvcj1hY2NlbnRfY29sb3IqKDEuMC1zaGFkZV9jb2xvci5hKStzaGFkZV9jb2xvcjtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7YXR0cmlidXRlIHZlYzIgYV9wb3M7YXR0cmlidXRlIHZlYzIgYV90ZXh0dXJlX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3M7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt2X3Bvcz1hX3RleHR1cmVfcG9zLzgxOTIuMDt9IiksY3I9dnIoInVuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZmxvYXQgZGlzdD1sZW5ndGgodl9ub3JtYWwpKnZfd2lkdGgyLnM7ZmxvYXQgYmx1cjI9KGJsdXIrMS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvKSp2X2dhbW1hX3NjYWxlO2Zsb2F0IGFscGhhPWNsYW1wKG1pbihkaXN0LSh2X3dpZHRoMi50LWJsdXIyKSx2X3dpZHRoMi5zLWRpc3QpL2JsdXIyLDAuMCwxLjApO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbzt1bmlmb3JtIHZlYzIgdV91bml0c190b19waXhlbHM7dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO3ZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lc29mYXI7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuZmxvYXQgQU5USUFMSUFTSU5HPTEuMC91X2RldmljZV9waXhlbF9yYXRpby8yLjA7dmVjMiBhX2V4dHJ1ZGU9YV9kYXRhLnh5LTEyOC4wO2Zsb2F0IGFfZGlyZWN0aW9uPW1vZChhX2RhdGEueiw0LjApLTEuMDt2X2xpbmVzb2Zhcj0oZmxvb3IoYV9kYXRhLnovNC4wKSthX2RhdGEudyo2NC4wKSoyLjA7dmVjMiBwb3M9Zmxvb3IoYV9wb3Nfbm9ybWFsKjAuNSk7bWVkaXVtcCB2ZWMyIG5vcm1hbD1hX3Bvc19ub3JtYWwtMi4wKnBvcztub3JtYWwueT1ub3JtYWwueSoyLjAtMS4wO3Zfbm9ybWFsPW5vcm1hbDtnYXB3aWR0aD1nYXB3aWR0aC8yLjA7ZmxvYXQgaGFsZndpZHRoPXdpZHRoLzIuMDtvZmZzZXQ9LTEuMCpvZmZzZXQ7ZmxvYXQgaW5zZXQ9Z2Fwd2lkdGgrKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtmbG9hdCBvdXRzZXQ9Z2Fwd2lkdGgraGFsZndpZHRoKihnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkrKGhhbGZ3aWR0aD09MC4wID8gMC4wIDogQU5USUFMSUFTSU5HKTttZWRpdW1wIHZlYzIgZGlzdD1vdXRzZXQqYV9leHRydWRlKnNjYWxlO21lZGl1bXAgZmxvYXQgdT0wLjUqYV9kaXJlY3Rpb247bWVkaXVtcCBmbG9hdCB0PTEuMC1hYnModSk7bWVkaXVtcCB2ZWMyIG9mZnNldDI9b2Zmc2V0KmFfZXh0cnVkZSpzY2FsZSpub3JtYWwueSptYXQyKHQsLXUsdSx0KTt2ZWM0IHByb2plY3RlZF9leHRydWRlPXVfbWF0cml4KnZlYzQoZGlzdC91X3JhdGlvLDAuMCwwLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQocG9zK29mZnNldDIvdV9yYXRpbywwLjAsMS4wKStwcm9qZWN0ZWRfZXh0cnVkZTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlPWxlbmd0aChkaXN0KTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlPWxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eS9nbF9Qb3NpdGlvbi53KnVfdW5pdHNfdG9fcGl4ZWxzKTt2X2dhbW1hX3NjYWxlPWV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUvZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTt2X3dpZHRoMj12ZWMyKG91dHNldCxpbnNldCk7fSIpLHVyPXZyKCJ1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTt2YXJ5aW5nIGhpZ2hwIGZsb2F0IHZfbGluZXByb2dyZXNzO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZmxvYXQgZGlzdD1sZW5ndGgodl9ub3JtYWwpKnZfd2lkdGgyLnM7ZmxvYXQgYmx1cjI9KGJsdXIrMS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvKSp2X2dhbW1hX3NjYWxlO2Zsb2F0IGFscGhhPWNsYW1wKG1pbihkaXN0LSh2X3dpZHRoMi50LWJsdXIyKSx2X3dpZHRoMi5zLWRpc3QpL2JsdXIyLDAuMCwxLjApO3ZlYzQgY29sb3I9dGV4dHVyZTJEKHVfaW1hZ2UsdmVjMih2X2xpbmVwcm9ncmVzcywwLjUpKTtnbF9GcmFnQ29sb3I9Y29sb3IqKGFscGhhKm9wYWNpdHkpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsIlxuI2RlZmluZSBNQVhfTElORV9ESVNUQU5DRSAzMjc2Ny4wXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbzt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSB2ZWMyIHVfdW5pdHNfdG9fcGl4ZWxzO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO3ZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lcHJvZ3Jlc3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcbmZsb2F0IEFOVElBTElBU0lORz0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vMi4wO3ZlYzIgYV9leHRydWRlPWFfZGF0YS54eS0xMjguMDtmbG9hdCBhX2RpcmVjdGlvbj1tb2QoYV9kYXRhLnosNC4wKS0xLjA7dl9saW5lcHJvZ3Jlc3M9KGZsb29yKGFfZGF0YS56LzQuMCkrYV9kYXRhLncqNjQuMCkqMi4wL01BWF9MSU5FX0RJU1RBTkNFO3ZlYzIgcG9zPWZsb29yKGFfcG9zX25vcm1hbCowLjUpO21lZGl1bXAgdmVjMiBub3JtYWw9YV9wb3Nfbm9ybWFsLTIuMCpwb3M7bm9ybWFsLnk9bm9ybWFsLnkqMi4wLTEuMDt2X25vcm1hbD1ub3JtYWw7Z2Fwd2lkdGg9Z2Fwd2lkdGgvMi4wO2Zsb2F0IGhhbGZ3aWR0aD13aWR0aC8yLjA7b2Zmc2V0PS0xLjAqb2Zmc2V0O2Zsb2F0IGluc2V0PWdhcHdpZHRoKyhnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7ZmxvYXQgb3V0c2V0PWdhcHdpZHRoK2hhbGZ3aWR0aCooZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApKyhoYWxmd2lkdGg9PTAuMCA/IDAuMCA6IEFOVElBTElBU0lORyk7bWVkaXVtcCB2ZWMyIGRpc3Q9b3V0c2V0KmFfZXh0cnVkZSpzY2FsZTttZWRpdW1wIGZsb2F0IHU9MC41KmFfZGlyZWN0aW9uO21lZGl1bXAgZmxvYXQgdD0xLjAtYWJzKHUpO21lZGl1bXAgdmVjMiBvZmZzZXQyPW9mZnNldCphX2V4dHJ1ZGUqc2NhbGUqbm9ybWFsLnkqbWF0Mih0LC11LHUsdCk7dmVjNCBwcm9qZWN0ZWRfZXh0cnVkZT11X21hdHJpeCp2ZWM0KGRpc3QvdV9yYXRpbywwLjAsMC4wKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KHBvcytvZmZzZXQyL3VfcmF0aW8sMC4wLDEuMCkrcHJvamVjdGVkX2V4dHJ1ZGU7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZT1sZW5ndGgoZGlzdCk7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZT1sZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkvZ2xfUG9zaXRpb24udyp1X3VuaXRzX3RvX3BpeGVscyk7dl9nYW1tYV9zY2FsZT1leHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlL2V4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7dl93aWR0aDI9dmVjMihvdXRzZXQsaW5zZXQpO30iKSxmcj12cigidW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3VuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBmbG9hdCB1X2ZhZGU7dW5pZm9ybSBtZWRpdW1wIHZlYzMgdV9zY2FsZTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyBmbG9hdCB2X2xpbmVzb2Zhcjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBmbG9hdCB2X3dpZHRoO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dztmbG9hdCB0aWxlWm9vbVJhdGlvPXVfc2NhbGUueDtmbG9hdCBmcm9tU2NhbGU9dV9zY2FsZS55O2Zsb2F0IHRvU2NhbGU9dV9zY2FsZS56O3ZlYzIgZGlzcGxheV9zaXplX2E9KHBhdHRlcm5fYnJfYS1wYXR0ZXJuX3RsX2EpL3BpeGVsX3JhdGlvX2Zyb207dmVjMiBkaXNwbGF5X3NpemVfYj0ocGF0dGVybl9icl9iLXBhdHRlcm5fdGxfYikvcGl4ZWxfcmF0aW9fdG87dmVjMiBwYXR0ZXJuX3NpemVfYT12ZWMyKGRpc3BsYXlfc2l6ZV9hLngqZnJvbVNjYWxlL3RpbGVab29tUmF0aW8sZGlzcGxheV9zaXplX2EueSk7dmVjMiBwYXR0ZXJuX3NpemVfYj12ZWMyKGRpc3BsYXlfc2l6ZV9iLngqdG9TY2FsZS90aWxlWm9vbVJhdGlvLGRpc3BsYXlfc2l6ZV9iLnkpO2Zsb2F0IGFzcGVjdF9hPWRpc3BsYXlfc2l6ZV9hLnkvdl93aWR0aDtmbG9hdCBhc3BlY3RfYj1kaXNwbGF5X3NpemVfYi55L3Zfd2lkdGg7ZmxvYXQgZGlzdD1sZW5ndGgodl9ub3JtYWwpKnZfd2lkdGgyLnM7ZmxvYXQgYmx1cjI9KGJsdXIrMS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvKSp2X2dhbW1hX3NjYWxlO2Zsb2F0IGFscGhhPWNsYW1wKG1pbihkaXN0LSh2X3dpZHRoMi50LWJsdXIyKSx2X3dpZHRoMi5zLWRpc3QpL2JsdXIyLDAuMCwxLjApO2Zsb2F0IHhfYT1tb2Qodl9saW5lc29mYXIvcGF0dGVybl9zaXplX2EueCphc3BlY3RfYSwxLjApO2Zsb2F0IHhfYj1tb2Qodl9saW5lc29mYXIvcGF0dGVybl9zaXplX2IueCphc3BlY3RfYiwxLjApO2Zsb2F0IHk9MC41KnZfbm9ybWFsLnkrMC41O3ZlYzIgdGV4ZWxfc2l6ZT0xLjAvdV90ZXhzaXplO3ZlYzIgcG9zX2E9bWl4KHBhdHRlcm5fdGxfYSp0ZXhlbF9zaXplLXRleGVsX3NpemUscGF0dGVybl9icl9hKnRleGVsX3NpemUrdGV4ZWxfc2l6ZSx2ZWMyKHhfYSx5KSk7dmVjMiBwb3NfYj1taXgocGF0dGVybl90bF9iKnRleGVsX3NpemUtdGV4ZWxfc2l6ZSxwYXR0ZXJuX2JyX2IqdGV4ZWxfc2l6ZSt0ZXhlbF9zaXplLHZlYzIoeF9iLHkpKTt2ZWM0IGNvbG9yPW1peCh0ZXh0dXJlMkQodV9pbWFnZSxwb3NfYSksdGV4dHVyZTJEKHVfaW1hZ2UscG9zX2IpLHVfZmFkZSk7Z2xfRnJhZ0NvbG9yPWNvbG9yKmFscGhhKm9wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV91bml0c190b19waXhlbHM7dW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyBmbG9hdCB2X2xpbmVzb2Zhcjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBmbG9hdCB2X3dpZHRoO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbmZsb2F0IEFOVElBTElBU0lORz0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vMi4wO3ZlYzIgYV9leHRydWRlPWFfZGF0YS54eS0xMjguMDtmbG9hdCBhX2RpcmVjdGlvbj1tb2QoYV9kYXRhLnosNC4wKS0xLjA7ZmxvYXQgYV9saW5lc29mYXI9KGZsb29yKGFfZGF0YS56LzQuMCkrYV9kYXRhLncqNjQuMCkqTElORV9ESVNUQU5DRV9TQ0FMRTt2ZWMyIHBvcz1mbG9vcihhX3Bvc19ub3JtYWwqMC41KTttZWRpdW1wIHZlYzIgbm9ybWFsPWFfcG9zX25vcm1hbC0yLjAqcG9zO25vcm1hbC55PW5vcm1hbC55KjIuMC0xLjA7dl9ub3JtYWw9bm9ybWFsO2dhcHdpZHRoPWdhcHdpZHRoLzIuMDtmbG9hdCBoYWxmd2lkdGg9d2lkdGgvMi4wO29mZnNldD0tMS4wKm9mZnNldDtmbG9hdCBpbnNldD1nYXB3aWR0aCsoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO2Zsb2F0IG91dHNldD1nYXB3aWR0aCtoYWxmd2lkdGgqKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSsoaGFsZndpZHRoPT0wLjAgPyAwLjAgOiBBTlRJQUxJQVNJTkcpO21lZGl1bXAgdmVjMiBkaXN0PW91dHNldCphX2V4dHJ1ZGUqc2NhbGU7bWVkaXVtcCBmbG9hdCB1PTAuNSphX2RpcmVjdGlvbjttZWRpdW1wIGZsb2F0IHQ9MS4wLWFicyh1KTttZWRpdW1wIHZlYzIgb2Zmc2V0Mj1vZmZzZXQqYV9leHRydWRlKnNjYWxlKm5vcm1hbC55Km1hdDIodCwtdSx1LHQpO3ZlYzQgcHJvamVjdGVkX2V4dHJ1ZGU9dV9tYXRyaXgqdmVjNChkaXN0L3VfcmF0aW8sMC4wLDAuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChwb3Mrb2Zmc2V0Mi91X3JhdGlvLDAuMCwxLjApK3Byb2plY3RlZF9leHRydWRlO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmU9bGVuZ3RoKGRpc3QpO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU9bGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5L2dsX1Bvc2l0aW9uLncqdV91bml0c190b19waXhlbHMpO3ZfZ2FtbWFfc2NhbGU9ZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZS9leHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO3ZfbGluZXNvZmFyPWFfbGluZXNvZmFyO3Zfd2lkdGgyPXZlYzIob3V0c2V0LGluc2V0KTt2X3dpZHRoPWZsb29yd2lkdGg7fSIpLGhyPXZyKCJ1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt1bmlmb3JtIGZsb2F0IHVfc2RmZ2FtbWE7dW5pZm9ybSBmbG9hdCB1X21peDt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyB2ZWMyIHZfd2lkdGgyO3ZhcnlpbmcgdmVjMiB2X3RleF9hO3ZhcnlpbmcgdmVjMiB2X3RleF9iO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG5mbG9hdCBkaXN0PWxlbmd0aCh2X25vcm1hbCkqdl93aWR0aDIucztmbG9hdCBibHVyMj0oYmx1cisxLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8pKnZfZ2FtbWFfc2NhbGU7ZmxvYXQgYWxwaGE9Y2xhbXAobWluKGRpc3QtKHZfd2lkdGgyLnQtYmx1cjIpLHZfd2lkdGgyLnMtZGlzdCkvYmx1cjIsMC4wLDEuMCk7ZmxvYXQgc2RmZGlzdF9hPXRleHR1cmUyRCh1X2ltYWdlLHZfdGV4X2EpLmE7ZmxvYXQgc2RmZGlzdF9iPXRleHR1cmUyRCh1X2ltYWdlLHZfdGV4X2IpLmE7ZmxvYXQgc2RmZGlzdD1taXgoc2RmZGlzdF9hLHNkZmRpc3RfYix1X21peCk7YWxwaGEqPXNtb290aHN0ZXAoMC41LXVfc2RmZ2FtbWEvZmxvb3J3aWR0aCwwLjUrdV9zZGZnYW1tYS9mbG9vcndpZHRoLHNkZmRpc3QpO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbzt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2E7dW5pZm9ybSBmbG9hdCB1X3RleF95X2E7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2I7dW5pZm9ybSBmbG9hdCB1X3RleF95X2I7dW5pZm9ybSB2ZWMyIHVfdW5pdHNfdG9fcGl4ZWxzO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyB2ZWMyIHZfdGV4X2E7dmFyeWluZyB2ZWMyIHZfdGV4X2I7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbmZsb2F0IEFOVElBTElBU0lORz0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vMi4wO3ZlYzIgYV9leHRydWRlPWFfZGF0YS54eS0xMjguMDtmbG9hdCBhX2RpcmVjdGlvbj1tb2QoYV9kYXRhLnosNC4wKS0xLjA7ZmxvYXQgYV9saW5lc29mYXI9KGZsb29yKGFfZGF0YS56LzQuMCkrYV9kYXRhLncqNjQuMCkqTElORV9ESVNUQU5DRV9TQ0FMRTt2ZWMyIHBvcz1mbG9vcihhX3Bvc19ub3JtYWwqMC41KTttZWRpdW1wIHZlYzIgbm9ybWFsPWFfcG9zX25vcm1hbC0yLjAqcG9zO25vcm1hbC55PW5vcm1hbC55KjIuMC0xLjA7dl9ub3JtYWw9bm9ybWFsO2dhcHdpZHRoPWdhcHdpZHRoLzIuMDtmbG9hdCBoYWxmd2lkdGg9d2lkdGgvMi4wO29mZnNldD0tMS4wKm9mZnNldDtmbG9hdCBpbnNldD1nYXB3aWR0aCsoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO2Zsb2F0IG91dHNldD1nYXB3aWR0aCtoYWxmd2lkdGgqKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSsoaGFsZndpZHRoPT0wLjAgPyAwLjAgOiBBTlRJQUxJQVNJTkcpO21lZGl1bXAgdmVjMiBkaXN0PW91dHNldCphX2V4dHJ1ZGUqc2NhbGU7bWVkaXVtcCBmbG9hdCB1PTAuNSphX2RpcmVjdGlvbjttZWRpdW1wIGZsb2F0IHQ9MS4wLWFicyh1KTttZWRpdW1wIHZlYzIgb2Zmc2V0Mj1vZmZzZXQqYV9leHRydWRlKnNjYWxlKm5vcm1hbC55Km1hdDIodCwtdSx1LHQpO3ZlYzQgcHJvamVjdGVkX2V4dHJ1ZGU9dV9tYXRyaXgqdmVjNChkaXN0L3VfcmF0aW8sMC4wLDAuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChwb3Mrb2Zmc2V0Mi91X3JhdGlvLDAuMCwxLjApK3Byb2plY3RlZF9leHRydWRlO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmU9bGVuZ3RoKGRpc3QpO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU9bGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5L2dsX1Bvc2l0aW9uLncqdV91bml0c190b19waXhlbHMpO3ZfZ2FtbWFfc2NhbGU9ZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZS9leHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO3ZfdGV4X2E9dmVjMihhX2xpbmVzb2Zhcip1X3BhdHRlcm5zY2FsZV9hLngvZmxvb3J3aWR0aCxub3JtYWwueSp1X3BhdHRlcm5zY2FsZV9hLnkrdV90ZXhfeV9hKTt2X3RleF9iPXZlYzIoYV9saW5lc29mYXIqdV9wYXR0ZXJuc2NhbGVfYi54L2Zsb29yd2lkdGgsbm9ybWFsLnkqdV9wYXR0ZXJuc2NhbGVfYi55K3VfdGV4X3lfYik7dl93aWR0aDI9dmVjMihvdXRzZXQsaW5zZXQpO30iKSxwcj12cigidW5pZm9ybSBmbG9hdCB1X2ZhZGVfdDt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMDt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMTt2YXJ5aW5nIHZlYzIgdl9wb3MwO3ZhcnlpbmcgdmVjMiB2X3BvczE7dW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfbG93O3VuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2hpZ2g7dW5pZm9ybSBmbG9hdCB1X3NhdHVyYXRpb25fZmFjdG9yO3VuaWZvcm0gZmxvYXQgdV9jb250cmFzdF9mYWN0b3I7dW5pZm9ybSB2ZWMzIHVfc3Bpbl93ZWlnaHRzO3ZvaWQgbWFpbigpIHt2ZWM0IGNvbG9yMD10ZXh0dXJlMkQodV9pbWFnZTAsdl9wb3MwKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZTEsdl9wb3MxKTtpZiAoY29sb3IwLmEgPiAwLjApIHtjb2xvcjAucmdiPWNvbG9yMC5yZ2IvY29sb3IwLmE7fWlmIChjb2xvcjEuYSA+IDAuMCkge2NvbG9yMS5yZ2I9Y29sb3IxLnJnYi9jb2xvcjEuYTt9dmVjNCBjb2xvcj1taXgoY29sb3IwLGNvbG9yMSx1X2ZhZGVfdCk7Y29sb3IuYSo9dV9vcGFjaXR5O3ZlYzMgcmdiPWNvbG9yLnJnYjtyZ2I9dmVjMyhkb3QocmdiLHVfc3Bpbl93ZWlnaHRzLnh5eiksZG90KHJnYix1X3NwaW5fd2VpZ2h0cy56eHkpLGRvdChyZ2IsdV9zcGluX3dlaWdodHMueXp4KSk7ZmxvYXQgYXZlcmFnZT0oY29sb3Iucitjb2xvci5nK2NvbG9yLmIpLzMuMDtyZ2IrPShhdmVyYWdlLXJnYikqdV9zYXR1cmF0aW9uX2ZhY3RvcjtyZ2I9KHJnYi0wLjUpKnVfY29udHJhc3RfZmFjdG9yKzAuNTt2ZWMzIHVfaGlnaF92ZWM9dmVjMyh1X2JyaWdodG5lc3NfbG93LHVfYnJpZ2h0bmVzc19sb3csdV9icmlnaHRuZXNzX2xvdyk7dmVjMyB1X2xvd192ZWM9dmVjMyh1X2JyaWdodG5lc3NfaGlnaCx1X2JyaWdodG5lc3NfaGlnaCx1X2JyaWdodG5lc3NfaGlnaCk7Z2xfRnJhZ0NvbG9yPXZlYzQobWl4KHVfaGlnaF92ZWMsdV9sb3dfdmVjLHJnYikqY29sb3IuYSxjb2xvci5hKTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfdGxfcGFyZW50O3VuaWZvcm0gZmxvYXQgdV9zY2FsZV9wYXJlbnQ7dW5pZm9ybSBmbG9hdCB1X2J1ZmZlcl9zY2FsZTthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO3ZhcnlpbmcgdmVjMiB2X3BvczA7dmFyeWluZyB2ZWMyIHZfcG9zMTt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zMD0oKChhX3RleHR1cmVfcG9zLzgxOTIuMCktMC41KS91X2J1ZmZlcl9zY2FsZSApKzAuNTt2X3BvczE9KHZfcG9zMCp1X3NjYWxlX3BhcmVudCkrdV90bF9wYXJlbnQ7fSIpLGRyPXZyKCJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7dmFyeWluZyB2ZWMyIHZfdGV4O3ZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5sb3dwIGZsb2F0IGFscGhhPW9wYWNpdHkqdl9mYWRlX29wYWNpdHk7Z2xfRnJhZ0NvbG9yPXRleHR1cmUyRCh1X3RleHR1cmUsdl90ZXgpKmFscGhhO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImNvbnN0IGZsb2F0IFBJPTMuMTQxNTkyNjUzNTg5NzkzO2F0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7YXR0cmlidXRlIHZlYzQgYV9waXhlbG9mZnNldDthdHRyaWJ1dGUgdmVjMyBhX3Byb2plY3RlZF9wb3M7YXR0cmlidXRlIGZsb2F0IGFfZmFkZV9vcGFjaXR5O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfem9vbV9jb25zdGFudDt1bmlmb3JtIGJvb2wgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemVfdDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZTt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7dW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO3VuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfbGFiZWxfcGxhbmVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2Nvb3JkX21hdHJpeDt1bmlmb3JtIGJvb2wgdV9pc190ZXh0O3VuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO3VuaWZvcm0gdmVjMiB1X3RleHNpemU7dmFyeWluZyB2ZWMyIHZfdGV4O3ZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG52ZWMyIGFfcG9zPWFfcG9zX29mZnNldC54eTt2ZWMyIGFfb2Zmc2V0PWFfcG9zX29mZnNldC56dzt2ZWMyIGFfdGV4PWFfZGF0YS54eTt2ZWMyIGFfc2l6ZT1hX2RhdGEuenc7ZmxvYXQgYV9zaXplX21pbj1mbG9vcihhX3NpemVbMF0qMC41KTt2ZWMyIGFfcHhvZmZzZXQ9YV9waXhlbG9mZnNldC54eTt2ZWMyIGFfbWluRm9udFNjYWxlPWFfcGl4ZWxvZmZzZXQuencvMjU2LjA7aGlnaHAgZmxvYXQgc2VnbWVudF9hbmdsZT0tYV9wcm9qZWN0ZWRfcG9zWzJdO2Zsb2F0IHNpemU7aWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtzaXplPW1peChhX3NpemVfbWluLGFfc2l6ZVsxXSx1X3NpemVfdCkvMTI4LjA7fSBlbHNlIGlmICh1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtzaXplPWFfc2l6ZV9taW4vMTI4LjA7fSBlbHNlIHtzaXplPXVfc2l6ZTt9dmVjNCBwcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7aGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZT1wcm9qZWN0ZWRQb2ludC53O2hpZ2hwIGZsb2F0IGRpc3RhbmNlX3JhdGlvPXVfcGl0Y2hfd2l0aF9tYXAgP1xuY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZS91X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgOlxudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlL2NhbWVyYV90b19hbmNob3JfZGlzdGFuY2U7aGlnaHAgZmxvYXQgcGVyc3BlY3RpdmVfcmF0aW89Y2xhbXAoMC41KzAuNSpkaXN0YW5jZV9yYXRpbywwLjAsNC4wKTtzaXplKj1wZXJzcGVjdGl2ZV9yYXRpbztmbG9hdCBmb250U2NhbGU9dV9pc190ZXh0ID8gc2l6ZS8yNC4wIDogc2l6ZTtoaWdocCBmbG9hdCBzeW1ib2xfcm90YXRpb249MC4wO2lmICh1X3JvdGF0ZV9zeW1ib2wpIHt2ZWM0IG9mZnNldFByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MrdmVjMigxLDApLDAsMSk7dmVjMiBhPXByb2plY3RlZFBvaW50Lnh5L3Byb2plY3RlZFBvaW50Lnc7dmVjMiBiPW9mZnNldFByb2plY3RlZFBvaW50Lnh5L29mZnNldFByb2plY3RlZFBvaW50Lnc7c3ltYm9sX3JvdGF0aW9uPWF0YW4oKGIueS1hLnkpL3VfYXNwZWN0X3JhdGlvLGIueC1hLngpO31oaWdocCBmbG9hdCBhbmdsZV9zaW49c2luKHNlZ21lbnRfYW5nbGUrc3ltYm9sX3JvdGF0aW9uKTtoaWdocCBmbG9hdCBhbmdsZV9jb3M9Y29zKHNlZ21lbnRfYW5nbGUrc3ltYm9sX3JvdGF0aW9uKTttYXQyIHJvdGF0aW9uX21hdHJpeD1tYXQyKGFuZ2xlX2NvcywtMS4wKmFuZ2xlX3NpbixhbmdsZV9zaW4sYW5nbGVfY29zKTt2ZWM0IHByb2plY3RlZF9wb3M9dV9sYWJlbF9wbGFuZV9tYXRyaXgqdmVjNChhX3Byb2plY3RlZF9wb3MueHksMC4wLDEuMCk7Z2xfUG9zaXRpb249dV9jb29yZF9tYXRyaXgqdmVjNChwcm9qZWN0ZWRfcG9zLnh5L3Byb2plY3RlZF9wb3Mudytyb3RhdGlvbl9tYXRyaXgqKGFfb2Zmc2V0LzMyLjAqbWF4KGFfbWluRm9udFNjYWxlLGZvbnRTY2FsZSkrYV9weG9mZnNldC8xNi4wKSwwLjAsMS4wKTt2X3RleD1hX3RleC91X3RleHNpemU7dmVjMiBmYWRlX29wYWNpdHk9dW5wYWNrX29wYWNpdHkoYV9mYWRlX29wYWNpdHkpO2Zsb2F0IGZhZGVfY2hhbmdlPWZhZGVfb3BhY2l0eVsxXSA+IDAuNSA/IHVfZmFkZV9jaGFuZ2UgOi11X2ZhZGVfY2hhbmdlO3ZfZmFkZV9vcGFjaXR5PW1heCgwLjAsbWluKDEuMCxmYWRlX29wYWNpdHlbMF0rZmFkZV9jaGFuZ2UpKTt9IiksZ3I9dnIoIiNkZWZpbmUgU0RGX1BYIDguMFxudW5pZm9ybSBib29sIHVfaXNfaGFsbzt1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2dhbW1hX3NjYWxlO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIGJvb2wgdV9pc190ZXh0O3ZhcnlpbmcgdmVjMiB2X2RhdGEwO3ZhcnlpbmcgdmVjMyB2X2RhdGExO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbmZsb2F0IEVER0VfR0FNTUE9MC4xMDUvdV9kZXZpY2VfcGl4ZWxfcmF0aW87dmVjMiB0ZXg9dl9kYXRhMC54eTtmbG9hdCBnYW1tYV9zY2FsZT12X2RhdGExLng7ZmxvYXQgc2l6ZT12X2RhdGExLnk7ZmxvYXQgZmFkZV9vcGFjaXR5PXZfZGF0YTFbMl07ZmxvYXQgZm9udFNjYWxlPXVfaXNfdGV4dCA/IHNpemUvMjQuMCA6IHNpemU7bG93cCB2ZWM0IGNvbG9yPWZpbGxfY29sb3I7aGlnaHAgZmxvYXQgZ2FtbWE9RURHRV9HQU1NQS8oZm9udFNjYWxlKnVfZ2FtbWFfc2NhbGUpO2xvd3AgZmxvYXQgYnVmZj0oMjU2LjAtNjQuMCkvMjU2LjA7aWYgKHVfaXNfaGFsbykge2NvbG9yPWhhbG9fY29sb3I7Z2FtbWE9KGhhbG9fYmx1cioxLjE5L1NERl9QWCtFREdFX0dBTU1BKS8oZm9udFNjYWxlKnVfZ2FtbWFfc2NhbGUpO2J1ZmY9KDYuMC1oYWxvX3dpZHRoL2ZvbnRTY2FsZSkvU0RGX1BYO31sb3dwIGZsb2F0IGRpc3Q9dGV4dHVyZTJEKHVfdGV4dHVyZSx0ZXgpLmE7aGlnaHAgZmxvYXQgZ2FtbWFfc2NhbGVkPWdhbW1hKmdhbW1hX3NjYWxlO2hpZ2hwIGZsb2F0IGFscGhhPXNtb290aHN0ZXAoYnVmZi1nYW1tYV9zY2FsZWQsYnVmZitnYW1tYV9zY2FsZWQsZGlzdCk7Z2xfRnJhZ0NvbG9yPWNvbG9yKihhbHBoYSpvcGFjaXR5KmZhZGVfb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiY29uc3QgZmxvYXQgUEk9My4xNDE1OTI2NTM1ODk3OTM7YXR0cmlidXRlIHZlYzQgYV9wb3Nfb2Zmc2V0O2F0dHJpYnV0ZSB2ZWM0IGFfZGF0YTthdHRyaWJ1dGUgdmVjNCBhX3BpeGVsb2Zmc2V0O2F0dHJpYnV0ZSB2ZWMzIGFfcHJvamVjdGVkX3BvczthdHRyaWJ1dGUgZmxvYXQgYV9mYWRlX29wYWNpdHk7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV96b29tX2NvbnN0YW50O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZV90O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1hdDQgdV9sYWJlbF9wbGFuZV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfY29vcmRfbWF0cml4O3VuaWZvcm0gYm9vbCB1X2lzX3RleHQ7dW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3BpdGNoO3VuaWZvcm0gYm9vbCB1X3JvdGF0ZV9zeW1ib2w7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2FzcGVjdF9yYXRpbzt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt1bmlmb3JtIGZsb2F0IHVfZmFkZV9jaGFuZ2U7dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt2YXJ5aW5nIHZlYzIgdl9kYXRhMDt2YXJ5aW5nIHZlYzMgdl9kYXRhMTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52ZWMyIGFfcG9zPWFfcG9zX29mZnNldC54eTt2ZWMyIGFfb2Zmc2V0PWFfcG9zX29mZnNldC56dzt2ZWMyIGFfdGV4PWFfZGF0YS54eTt2ZWMyIGFfc2l6ZT1hX2RhdGEuenc7ZmxvYXQgYV9zaXplX21pbj1mbG9vcihhX3NpemVbMF0qMC41KTt2ZWMyIGFfcHhvZmZzZXQ9YV9waXhlbG9mZnNldC54eTtoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlPS1hX3Byb2plY3RlZF9wb3NbMl07ZmxvYXQgc2l6ZTtpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9bWl4KGFfc2l6ZV9taW4sYV9zaXplWzFdLHVfc2l6ZV90KS8xMjguMDt9IGVsc2UgaWYgKHVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9YV9zaXplX21pbi8xMjguMDt9IGVsc2Uge3NpemU9dV9zaXplO312ZWM0IHByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPXByb2plY3RlZFBvaW50Lnc7aGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW89dV9waXRjaF93aXRoX21hcCA/XG5jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlL3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XG51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UvY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbz1jbGFtcCgwLjUrMC41KmRpc3RhbmNlX3JhdGlvLDAuMCw0LjApO3NpemUqPXBlcnNwZWN0aXZlX3JhdGlvO2Zsb2F0IGZvbnRTY2FsZT11X2lzX3RleHQgPyBzaXplLzI0LjAgOiBzaXplO2hpZ2hwIGZsb2F0IHN5bWJvbF9yb3RhdGlvbj0wLjA7aWYgKHVfcm90YXRlX3N5bWJvbCkge3ZlYzQgb2Zmc2V0UHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3Bvcyt2ZWMyKDEsMCksMCwxKTt2ZWMyIGE9cHJvamVjdGVkUG9pbnQueHkvcHJvamVjdGVkUG9pbnQudzt2ZWMyIGI9b2Zmc2V0UHJvamVjdGVkUG9pbnQueHkvb2Zmc2V0UHJvamVjdGVkUG9pbnQudztzeW1ib2xfcm90YXRpb249YXRhbigoYi55LWEueSkvdV9hc3BlY3RfcmF0aW8sYi54LWEueCk7fWhpZ2hwIGZsb2F0IGFuZ2xlX3Npbj1zaW4oc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO2hpZ2hwIGZsb2F0IGFuZ2xlX2Nvcz1jb3Moc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO21hdDIgcm90YXRpb25fbWF0cml4PW1hdDIoYW5nbGVfY29zLC0xLjAqYW5nbGVfc2luLGFuZ2xlX3NpbixhbmdsZV9jb3MpO3ZlYzQgcHJvamVjdGVkX3Bvcz11X2xhYmVsX3BsYW5lX21hdHJpeCp2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwwLjAsMS4wKTtnbF9Qb3NpdGlvbj11X2Nvb3JkX21hdHJpeCp2ZWM0KHByb2plY3RlZF9wb3MueHkvcHJvamVjdGVkX3Bvcy53K3JvdGF0aW9uX21hdHJpeCooYV9vZmZzZXQvMzIuMCpmb250U2NhbGUrYV9weG9mZnNldCksMC4wLDEuMCk7ZmxvYXQgZ2FtbWFfc2NhbGU9Z2xfUG9zaXRpb24udzt2ZWMyIGZhZGVfb3BhY2l0eT11bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7ZmxvYXQgZmFkZV9jaGFuZ2U9ZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6LXVfZmFkZV9jaGFuZ2U7ZmxvYXQgaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eT1tYXgoMC4wLG1pbigxLjAsZmFkZV9vcGFjaXR5WzBdK2ZhZGVfY2hhbmdlKSk7dl9kYXRhMD1hX3RleC91X3RleHNpemU7dl9kYXRhMT12ZWMzKGdhbW1hX3NjYWxlLHNpemUsaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eSk7fSIpLG1yPXZyKCIjZGVmaW5lIFNERl9QWCA4LjBcbiNkZWZpbmUgU0RGIDEuMFxuI2RlZmluZSBJQ09OIDAuMFxudW5pZm9ybSBib29sIHVfaXNfaGFsbzt1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7dW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlX2ljb247dW5pZm9ybSBoaWdocCBmbG9hdCB1X2dhbW1hX3NjYWxlO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt2YXJ5aW5nIHZlYzQgdl9kYXRhMDt2YXJ5aW5nIHZlYzQgdl9kYXRhMTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG5mbG9hdCBmYWRlX29wYWNpdHk9dl9kYXRhMVsyXTtpZiAodl9kYXRhMS53PT1JQ09OKSB7dmVjMiB0ZXhfaWNvbj12X2RhdGEwLnp3O2xvd3AgZmxvYXQgYWxwaGE9b3BhY2l0eSpmYWRlX29wYWNpdHk7Z2xfRnJhZ0NvbG9yPXRleHR1cmUyRCh1X3RleHR1cmVfaWNvbix0ZXhfaWNvbikqYWxwaGE7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG5yZXR1cm47fXZlYzIgdGV4PXZfZGF0YTAueHk7ZmxvYXQgRURHRV9HQU1NQT0wLjEwNS91X2RldmljZV9waXhlbF9yYXRpbztmbG9hdCBnYW1tYV9zY2FsZT12X2RhdGExLng7ZmxvYXQgc2l6ZT12X2RhdGExLnk7ZmxvYXQgZm9udFNjYWxlPXNpemUvMjQuMDtsb3dwIHZlYzQgY29sb3I9ZmlsbF9jb2xvcjtoaWdocCBmbG9hdCBnYW1tYT1FREdFX0dBTU1BLyhmb250U2NhbGUqdV9nYW1tYV9zY2FsZSk7bG93cCBmbG9hdCBidWZmPSgyNTYuMC02NC4wKS8yNTYuMDtpZiAodV9pc19oYWxvKSB7Y29sb3I9aGFsb19jb2xvcjtnYW1tYT0oaGFsb19ibHVyKjEuMTkvU0RGX1BYK0VER0VfR0FNTUEpLyhmb250U2NhbGUqdV9nYW1tYV9zY2FsZSk7YnVmZj0oNi4wLWhhbG9fd2lkdGgvZm9udFNjYWxlKS9TREZfUFg7fWxvd3AgZmxvYXQgZGlzdD10ZXh0dXJlMkQodV90ZXh0dXJlLHRleCkuYTtoaWdocCBmbG9hdCBnYW1tYV9zY2FsZWQ9Z2FtbWEqZ2FtbWFfc2NhbGU7aGlnaHAgZmxvYXQgYWxwaGE9c21vb3Roc3RlcChidWZmLWdhbW1hX3NjYWxlZCxidWZmK2dhbW1hX3NjYWxlZCxkaXN0KTtnbF9GcmFnQ29sb3I9Y29sb3IqKGFscGhhKm9wYWNpdHkqZmFkZV9vcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJjb25zdCBmbG9hdCBQST0zLjE0MTU5MjY1MzU4OTc5MzthdHRyaWJ1dGUgdmVjNCBhX3Bvc19vZmZzZXQ7YXR0cmlidXRlIHZlYzQgYV9kYXRhO2F0dHJpYnV0ZSB2ZWMzIGFfcHJvamVjdGVkX3BvczthdHRyaWJ1dGUgZmxvYXQgYV9mYWRlX29wYWNpdHk7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV96b29tX2NvbnN0YW50O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZV90O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1hdDQgdV9sYWJlbF9wbGFuZV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfY29vcmRfbWF0cml4O3VuaWZvcm0gYm9vbCB1X2lzX3RleHQ7dW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3BpdGNoO3VuaWZvcm0gYm9vbCB1X3JvdGF0ZV9zeW1ib2w7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2FzcGVjdF9yYXRpbzt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt1bmlmb3JtIGZsb2F0IHVfZmFkZV9jaGFuZ2U7dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIHZlYzIgdV90ZXhzaXplX2ljb247dmFyeWluZyB2ZWM0IHZfZGF0YTA7dmFyeWluZyB2ZWM0IHZfZGF0YTE7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxudmVjMiBhX3Bvcz1hX3Bvc19vZmZzZXQueHk7dmVjMiBhX29mZnNldD1hX3Bvc19vZmZzZXQuenc7dmVjMiBhX3RleD1hX2RhdGEueHk7dmVjMiBhX3NpemU9YV9kYXRhLnp3O2Zsb2F0IGFfc2l6ZV9taW49Zmxvb3IoYV9zaXplWzBdKjAuNSk7ZmxvYXQgaXNfc2RmPWFfc2l6ZVswXS0yLjAqYV9zaXplX21pbjtoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlPS1hX3Byb2plY3RlZF9wb3NbMl07ZmxvYXQgc2l6ZTtpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9bWl4KGFfc2l6ZV9taW4sYV9zaXplWzFdLHVfc2l6ZV90KS8xMjguMDt9IGVsc2UgaWYgKHVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9YV9zaXplX21pbi8xMjguMDt9IGVsc2Uge3NpemU9dV9zaXplO312ZWM0IHByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPXByb2plY3RlZFBvaW50Lnc7aGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW89dV9waXRjaF93aXRoX21hcCA/XG5jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlL3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XG51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UvY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbz1jbGFtcCgwLjUrMC41KmRpc3RhbmNlX3JhdGlvLDAuMCw0LjApO3NpemUqPXBlcnNwZWN0aXZlX3JhdGlvO2Zsb2F0IGZvbnRTY2FsZT1zaXplLzI0LjA7aGlnaHAgZmxvYXQgc3ltYm9sX3JvdGF0aW9uPTAuMDtpZiAodV9yb3RhdGVfc3ltYm9sKSB7dmVjNCBvZmZzZXRQcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfcG9zK3ZlYzIoMSwwKSwwLDEpO3ZlYzIgYT1wcm9qZWN0ZWRQb2ludC54eS9wcm9qZWN0ZWRQb2ludC53O3ZlYzIgYj1vZmZzZXRQcm9qZWN0ZWRQb2ludC54eS9vZmZzZXRQcm9qZWN0ZWRQb2ludC53O3N5bWJvbF9yb3RhdGlvbj1hdGFuKChiLnktYS55KS91X2FzcGVjdF9yYXRpbyxiLngtYS54KTt9aGlnaHAgZmxvYXQgYW5nbGVfc2luPXNpbihzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7aGlnaHAgZmxvYXQgYW5nbGVfY29zPWNvcyhzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7bWF0MiByb3RhdGlvbl9tYXRyaXg9bWF0MihhbmdsZV9jb3MsLTEuMCphbmdsZV9zaW4sYW5nbGVfc2luLGFuZ2xlX2Nvcyk7dmVjNCBwcm9qZWN0ZWRfcG9zPXVfbGFiZWxfcGxhbmVfbWF0cml4KnZlYzQoYV9wcm9qZWN0ZWRfcG9zLnh5LDAuMCwxLjApO2dsX1Bvc2l0aW9uPXVfY29vcmRfbWF0cml4KnZlYzQocHJvamVjdGVkX3Bvcy54eS9wcm9qZWN0ZWRfcG9zLncrcm90YXRpb25fbWF0cml4KihhX29mZnNldC8zMi4wKmZvbnRTY2FsZSksMC4wLDEuMCk7ZmxvYXQgZ2FtbWFfc2NhbGU9Z2xfUG9zaXRpb24udzt2ZWMyIGZhZGVfb3BhY2l0eT11bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7ZmxvYXQgZmFkZV9jaGFuZ2U9ZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6LXVfZmFkZV9jaGFuZ2U7ZmxvYXQgaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eT1tYXgoMC4wLG1pbigxLjAsZmFkZV9vcGFjaXR5WzBdK2ZhZGVfY2hhbmdlKSk7dl9kYXRhMC54eT1hX3RleC91X3RleHNpemU7dl9kYXRhMC56dz1hX3RleC91X3RleHNpemVfaWNvbjt2X2RhdGExPXZlYzQoZ2FtbWFfc2NhbGUsc2l6ZSxpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5LGlzX3NkZik7fSIpO2Z1bmN0aW9uIHZyKHQsZSl7dmFyIHI9LyNwcmFnbWEgbWFwYm94OiAoW1x3XSspIChbXHddKykgKFtcd10rKSAoW1x3XSspL2csbj17fTtyZXR1cm57ZnJhZ21lbnRTb3VyY2U6dD10LnJlcGxhY2UociwoZnVuY3Rpb24odCxlLHIsaSxhKXtyZXR1cm4gblthXT0hMCwiZGVmaW5lIj09PWU/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG52YXJ5aW5nICIrcisiICIraSsiICIrYSsiO1xuI2Vsc2VcbnVuaWZvcm0gIityKyIgIitpKyIgdV8iK2ErIjtcbiNlbmRpZlxuIjoiXG4jaWZkZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxuICAgICIrcisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIn0pKSx2ZXJ0ZXhTb3VyY2U6ZT1lLnJlcGxhY2UociwoZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz0iZmxvYXQiPT09aT8idmVjMiI6InZlYzQiLHM9YS5tYXRjaCgvY29sb3IvKT8iY29sb3IiOm87cmV0dXJuIG5bYV0/ImRlZmluZSI9PT1lPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxudW5pZm9ybSBsb3dwIGZsb2F0IHVfIithKyJfdDtcbmF0dHJpYnV0ZSAiK3IrIiAiK28rIiBhXyIrYSsiO1xudmFyeWluZyAiK3IrIiAiK2krIiAiK2ErIjtcbiNlbHNlXG51bmlmb3JtICIrcisiICIraSsiIHVfIithKyI7XG4jZW5kaWZcbiI6InZlYzQiPT09cz8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK2ErIiA9IGFfIithKyI7XG4jZWxzZVxuICAgICIrcisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIjoiXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK2ErIiA9IHVucGFja19taXhfIitzKyIoYV8iK2ErIiwgdV8iK2ErIl90KTtcbiNlbHNlXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4iOiJkZWZpbmUiPT09ZT8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbnVuaWZvcm0gbG93cCBmbG9hdCB1XyIrYSsiX3Q7XG5hdHRyaWJ1dGUgIityKyIgIitvKyIgYV8iK2ErIjtcbiNlbHNlXG51bmlmb3JtICIrcisiICIraSsiIHVfIithKyI7XG4jZW5kaWZcbiI6InZlYzQiPT09cz8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IGFfIithKyI7XG4jZWxzZVxuICAgICIrcisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIjoiXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IHVucGFja19taXhfIitzKyIoYV8iK2ErIiwgdV8iK2ErIl90KTtcbiNlbHNlXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4ifSkpfX12YXIgeXI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwscHJlbHVkZTpHZSxiYWNrZ3JvdW5kOlllLGJhY2tncm91bmRQYXR0ZXJuOldlLGNpcmNsZTpYZSxjbGlwcGluZ01hc2s6WmUsaGVhdG1hcDpKZSxoZWF0bWFwVGV4dHVyZTpLZSxjb2xsaXNpb25Cb3g6UWUsY29sbGlzaW9uQ2lyY2xlOiRlLGRlYnVnOnRyLGZpbGw6ZXIsZmlsbE91dGxpbmU6cnIsZmlsbE91dGxpbmVQYXR0ZXJuOm5yLGZpbGxQYXR0ZXJuOmlyLGZpbGxFeHRydXNpb246YXIsZmlsbEV4dHJ1c2lvblBhdHRlcm46b3IsaGlsbHNoYWRlUHJlcGFyZTpzcixoaWxsc2hhZGU6bHIsbGluZTpjcixsaW5lR3JhZGllbnQ6dXIsbGluZVBhdHRlcm46ZnIsbGluZVNERjpocixyYXN0ZXI6cHIsc3ltYm9sSWNvbjpkcixzeW1ib2xTREY6Z3Isc3ltYm9sVGV4dEFuZEljb246bXJ9KSx4cj1mdW5jdGlvbigpe3RoaXMuYm91bmRQcm9ncmFtPW51bGwsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1udWxsLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9W10sdGhpcy5ib3VuZEluZGV4QnVmZmVyPW51bGwsdGhpcy5ib3VuZFZlcnRleE9mZnNldD1udWxsLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyPW51bGwsdGhpcy52YW89bnVsbH07eHIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt0aGlzLmNvbnRleHQ9dDtmb3IodmFyIGw9dGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycy5sZW5ndGghPT1uLmxlbmd0aCxjPTA7IWwmJmM8bi5sZW5ndGg7YysrKXRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnNbY10hPT1uW2NdJiYobD0hMCk7dC5leHRWZXJ0ZXhBcnJheU9iamVjdCYmdGhpcy52YW8mJnRoaXMuYm91bmRQcm9ncmFtPT09ZSYmdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj09PXImJiFsJiZ0aGlzLmJvdW5kSW5kZXhCdWZmZXI9PT1pJiZ0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PT09YSYmdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9PT1vJiZ0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjI9PT1zPyh0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pLG8mJm8uYmluZCgpLGkmJmkuZHluYW1pY0RyYXcmJmkuYmluZCgpLHMmJnMuYmluZCgpKTp0aGlzLmZyZXNoQmluZChlLHIsbixpLGEsbyxzKX0seHIucHJvdG90eXBlLmZyZXNoQmluZD1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsPXQubnVtQXR0cmlidXRlcyxjPXRoaXMuY29udGV4dCx1PWMuZ2w7aWYoYy5leHRWZXJ0ZXhBcnJheU9iamVjdCl0aGlzLnZhbyYmdGhpcy5kZXN0cm95KCksdGhpcy52YW89Yy5leHRWZXJ0ZXhBcnJheU9iamVjdC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpLGMuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbykscz0wLHRoaXMuYm91bmRQcm9ncmFtPXQsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1lLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9cix0aGlzLmJvdW5kSW5kZXhCdWZmZXI9bix0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PWksdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9YSx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjI9bztlbHNle3M9Yy5jdXJyZW50TnVtQXR0cmlidXRlc3x8MDtmb3IodmFyIGY9bDtmPHM7ZisrKXUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGYpfWUuZW5hYmxlQXR0cmlidXRlcyh1LHQpO2Zvcih2YXIgaD0wLHA9cjtoPHAubGVuZ3RoO2grPTEpcFtoXS5lbmFibGVBdHRyaWJ1dGVzKHUsdCk7YSYmYS5lbmFibGVBdHRyaWJ1dGVzKHUsdCksbyYmby5lbmFibGVBdHRyaWJ1dGVzKHUsdCksZS5iaW5kKCksZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSk7Zm9yKHZhciBkPTAsZz1yO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIG09Z1tkXTttLmJpbmQoKSxtLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKX1hJiYoYS5iaW5kKCksYS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSkpLG4mJm4uYmluZCgpLG8mJihvLmJpbmQoKSxvLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKSksYy5jdXJyZW50TnVtQXR0cmlidXRlcz1sfSx4ci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudmFvJiYodGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMudmFvKSx0aGlzLnZhbz1udWxsKX07dmFyIGJyPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dC5nbDt0aGlzLnByb2dyYW09YS5jcmVhdGVQcm9ncmFtKCk7dmFyIG89cj9yLmRlZmluZXMoKTpbXTtpJiZvLnB1c2goIiNkZWZpbmUgT1ZFUkRSQVdfSU5TUEVDVE9SOyIpO3ZhciBzPW8uY29uY2F0KEdlLmZyYWdtZW50U291cmNlLGUuZnJhZ21lbnRTb3VyY2UpLmpvaW4oIlxuIiksbD1vLmNvbmNhdChHZS52ZXJ0ZXhTb3VyY2UsZS52ZXJ0ZXhTb3VyY2UpLmpvaW4oIlxuIiksYz1hLmNyZWF0ZVNoYWRlcihhLkZSQUdNRU5UX1NIQURFUik7aWYoYS5pc0NvbnRleHRMb3N0KCkpdGhpcy5mYWlsZWRUb0NyZWF0ZT0hMDtlbHNle2Euc2hhZGVyU291cmNlKGMscyksYS5jb21waWxlU2hhZGVyKGMpLGEuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSxjKTt2YXIgdT1hLmNyZWF0ZVNoYWRlcihhLlZFUlRFWF9TSEFERVIpO2lmKGEuaXNDb250ZXh0TG9zdCgpKXRoaXMuZmFpbGVkVG9DcmVhdGU9ITA7ZWxzZXthLnNoYWRlclNvdXJjZSh1LGwpLGEuY29tcGlsZVNoYWRlcih1KSxhLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sdSk7Zm9yKHZhciBmPXI/ci5sYXlvdXRBdHRyaWJ1dGVzOltdLGg9MDtoPGYubGVuZ3RoO2grKylhLmJpbmRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0saCxmW2hdLm5hbWUpO2EubGlua1Byb2dyYW0odGhpcy5wcm9ncmFtKSxhLmRlbGV0ZVNoYWRlcih1KSxhLmRlbGV0ZVNoYWRlcihjKSx0aGlzLm51bUF0dHJpYnV0ZXM9YS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSxhLkFDVElWRV9BVFRSSUJVVEVTKSx0aGlzLmF0dHJpYnV0ZXM9e307Zm9yKHZhciBwPXt9LGQ9MDtkPHRoaXMubnVtQXR0cmlidXRlcztkKyspe3ZhciBnPWEuZ2V0QWN0aXZlQXR0cmliKHRoaXMucHJvZ3JhbSxkKTtnJiYodGhpcy5hdHRyaWJ1dGVzW2cubmFtZV09YS5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sZy5uYW1lKSl9Zm9yKHZhciBtPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sYS5BQ1RJVkVfVU5JRk9STVMpLHY9MDt2PG07disrKXt2YXIgeT1hLmdldEFjdGl2ZVVuaWZvcm0odGhpcy5wcm9ncmFtLHYpO3kmJihwW3kubmFtZV09YS5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLHkubmFtZSkpfXRoaXMuZml4ZWRVbmlmb3Jtcz1uKHQscCksdGhpcy5iaW5kZXJVbmlmb3Jtcz1yP3IuZ2V0VW5pZm9ybXModCxwKTpbXX19fTtmdW5jdGlvbiBfcih0LGUscil7dmFyIG49MS9oZShyLDEsZS50cmFuc2Zvcm0udGlsZVpvb20pLGk9TWF0aC5wb3coMixyLnRpbGVJRC5vdmVyc2NhbGVkWiksYT1yLnRpbGVTaXplKk1hdGgucG93KDIsZS50cmFuc2Zvcm0udGlsZVpvb20pL2ksbz1hKihyLnRpbGVJRC5jYW5vbmljYWwueCtyLnRpbGVJRC53cmFwKmkpLHM9YSpyLnRpbGVJRC5jYW5vbmljYWwueTtyZXR1cm57dV9pbWFnZTowLHVfdGV4c2l6ZTpyLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsdV9zY2FsZTpbbix0LmZyb21TY2FsZSx0LnRvU2NhbGVdLHVfZmFkZTp0LnQsdV9waXhlbF9jb29yZF91cHBlcjpbbz4+MTYscz4+MTZdLHVfcGl4ZWxfY29vcmRfbG93ZXI6WzY1NTM1Jm8sNjU1MzUmc119fWJyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLGcpe3ZhciBtLHY9dC5nbDtpZighdGhpcy5mYWlsZWRUb0NyZWF0ZSl7Zm9yKHZhciB5IGluIHQucHJvZ3JhbS5zZXQodGhpcy5wcm9ncmFtKSx0LnNldERlcHRoTW9kZShyKSx0LnNldFN0ZW5jaWxNb2RlKG4pLHQuc2V0Q29sb3JNb2RlKGkpLHQuc2V0Q3VsbEZhY2UoYSksdGhpcy5maXhlZFVuaWZvcm1zKXRoaXMuZml4ZWRVbmlmb3Jtc1t5XS5zZXQob1t5XSk7cCYmcC5zZXRVbmlmb3Jtcyh0LHRoaXMuYmluZGVyVW5pZm9ybXMsZix7em9vbTpofSk7Zm9yKHZhciB4PShtPXt9LG1bdi5MSU5FU109MixtW3YuVFJJQU5HTEVTXT0zLG1bdi5MSU5FX1NUUklQXT0xLG0pW2VdLGI9MCxfPXUuZ2V0KCk7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdLFQ9dy52YW9zfHwody52YW9zPXt9KTsoVFtzXXx8KFRbc109bmV3IHhyKSkuYmluZCh0LHRoaXMsbCxwP3AuZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCk6W10sYyx3LnZlcnRleE9mZnNldCxkLGcpLHYuZHJhd0VsZW1lbnRzKGUsdy5wcmltaXRpdmVMZW5ndGgqeCx2LlVOU0lHTkVEX1NIT1JULHcucHJpbWl0aXZlT2Zmc2V0KngqMil9fX07dmFyIHdyPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXIuc3R5bGUubGlnaHQsbz1hLnByb3BlcnRpZXMuZ2V0KCJwb3NpdGlvbiIpLHM9W28ueCxvLnksby56XSxsPXQuY3JlYXRlJDEoKTsidmlld3BvcnQiPT09YS5wcm9wZXJ0aWVzLmdldCgiYW5jaG9yIikmJnQuZnJvbVJvdGF0aW9uKGwsLXIudHJhbnNmb3JtLmFuZ2xlKSx0LnRyYW5zZm9ybU1hdDMocyxzLGwpO3ZhciBjPWEucHJvcGVydGllcy5nZXQoImNvbG9yIik7cmV0dXJue3VfbWF0cml4OmUsdV9saWdodHBvczpzLHVfbGlnaHRpbnRlbnNpdHk6YS5wcm9wZXJ0aWVzLmdldCgiaW50ZW5zaXR5IiksdV9saWdodGNvbG9yOltjLnIsYy5nLGMuYl0sdV92ZXJ0aWNhbF9ncmFkaWVudDorbix1X29wYWNpdHk6aX19LFRyPWZ1bmN0aW9uKGUscixuLGksYSxvLHMpe3JldHVybiB0LmV4dGVuZCh3cihlLHIsbixpKSxfcihvLHIscykse3VfaGVpZ2h0X2ZhY3RvcjotTWF0aC5wb3coMixhLm92ZXJzY2FsZWRaKS9zLnRpbGVTaXplLzh9KX0sa3I9ZnVuY3Rpb24odCl7cmV0dXJue3VfbWF0cml4OnR9fSxNcj1mdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gdC5leHRlbmQoa3IoZSksX3IobixyLGkpKX0sQXI9ZnVuY3Rpb24odCxlKXtyZXR1cm57dV9tYXRyaXg6dCx1X3dvcmxkOmV9fSxTcj1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiB0LmV4dGVuZChNcihlLHIsbixpKSx7dV93b3JsZDphfSl9LEVyPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhLG8scz1lLnRyYW5zZm9ybTtpZigibWFwIj09PWkucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50Iikpe3ZhciBsPWhlKG4sMSxzLnpvb20pO2E9ITAsbz1bbCxsXX1lbHNlIGE9ITEsbz1zLnBpeGVsc1RvR0xVbml0cztyZXR1cm57dV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOnMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx1X3NjYWxlX3dpdGhfbWFwOisoIm1hcCI9PT1pLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLXNjYWxlIikpLHVfbWF0cml4OmUudHJhbnNsYXRlUG9zTWF0cml4KHIucG9zTWF0cml4LG4saS5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSxpLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiKSksdV9waXRjaF93aXRoX21hcDorYSx1X2RldmljZV9waXhlbF9yYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx1X2V4dHJ1ZGVfc2NhbGU6b319LENyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1oZShyLDEsZS56b29tKSxpPU1hdGgucG93KDIsZS56b29tLXIudGlsZUlELm92ZXJzY2FsZWRaKSxhPXIudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpO3JldHVybnt1X21hdHJpeDp0LHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTplLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV9waXhlbHNfdG9fdGlsZV91bml0czpuLHVfZXh0cnVkZV9zY2FsZTpbZS5waXhlbHNUb0dMVW5pdHNbMF0vKG4qaSksZS5waXhlbHNUb0dMVW5pdHNbMV0vKG4qaSldLHVfb3ZlcnNjYWxlX2ZhY3RvcjphfX0sTHI9ZnVuY3Rpb24odCxlLHIpe3JldHVybnt1X21hdHJpeDp0LHVfaW52X21hdHJpeDplLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpyLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV92aWV3cG9ydF9zaXplOltyLndpZHRoLHIuaGVpZ2h0XX19LElyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9MSkse3VfbWF0cml4OnQsdV9jb2xvcjplLHVfb3ZlcmxheTowLHVfb3ZlcmxheV9zY2FsZTpyfX0sUHI9ZnVuY3Rpb24odCl7cmV0dXJue3VfbWF0cml4OnR9fSx6cj1mdW5jdGlvbih0LGUscixuKXtyZXR1cm57dV9tYXRyaXg6dCx1X2V4dHJ1ZGVfc2NhbGU6aGUoZSwxLHIpLHVfaW50ZW5zaXR5Om59fSxPcj1mdW5jdGlvbihlLHIsbil7dmFyIGk9ZS50cmFuc2Zvcm07cmV0dXJue3VfbWF0cml4Ok5yKGUscixuKSx1X3JhdGlvOjEvaGUociwxLGkuem9vbSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdV91bml0c190b19waXhlbHM6WzEvaS5waXhlbHNUb0dMVW5pdHNbMF0sMS9pLnBpeGVsc1RvR0xVbml0c1sxXV19fSxEcj1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuZXh0ZW5kKE9yKGUscixuKSx7dV9pbWFnZTowfSl9LFJyPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPWUudHJhbnNmb3JtLG89QnIocixhKTtyZXR1cm57dV9tYXRyaXg6TnIoZSxyLG4pLHVfdGV4c2l6ZTpyLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsdV9yYXRpbzoxL2hlKHIsMSxhLnpvb20pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHVfaW1hZ2U6MCx1X3NjYWxlOltvLGkuZnJvbVNjYWxlLGkudG9TY2FsZV0sdV9mYWRlOmkudCx1X3VuaXRzX3RvX3BpeGVsczpbMS9hLnBpeGVsc1RvR0xVbml0c1swXSwxL2EucGl4ZWxzVG9HTFVuaXRzWzFdXX19LEZyPWZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG89ZS5saW5lQXRsYXMscz1CcihyLGUudHJhbnNmb3JtKSxsPSJyb3VuZCI9PT1uLmxheW91dC5nZXQoImxpbmUtY2FwIiksYz1vLmdldERhc2goaS5mcm9tLGwpLHU9by5nZXREYXNoKGkudG8sbCksZj1jLndpZHRoKmEuZnJvbVNjYWxlLGg9dS53aWR0aCphLnRvU2NhbGU7cmV0dXJuIHQuZXh0ZW5kKE9yKGUscixuKSx7dV9wYXR0ZXJuc2NhbGVfYTpbcy9mLC1jLmhlaWdodC8yXSx1X3BhdHRlcm5zY2FsZV9iOltzL2gsLXUuaGVpZ2h0LzJdLHVfc2RmZ2FtbWE6by53aWR0aC8oMjU2Kk1hdGgubWluKGYsaCkqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8pLzIsdV9pbWFnZTowLHVfdGV4X3lfYTpjLnksdV90ZXhfeV9iOnUueSx1X21peDphLnR9KX07ZnVuY3Rpb24gQnIodCxlKXtyZXR1cm4gMS9oZSh0LDEsZS50aWxlWm9vbSl9ZnVuY3Rpb24gTnIodCxlLHIpe3JldHVybiB0LnRyYW5zbGF0ZVBvc01hdHJpeChlLnRpbGVJRC5wb3NNYXRyaXgsZSxyLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUiKSxyLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUtYW5jaG9yIikpfXZhciBqcj1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybnt1X21hdHJpeDp0LHVfdGxfcGFyZW50OmUsdV9zY2FsZV9wYXJlbnQ6cix1X2J1ZmZlcl9zY2FsZToxLHVfZmFkZV90Om4ubWl4LHVfb3BhY2l0eTpuLm9wYWNpdHkqaS5wYWludC5nZXQoInJhc3Rlci1vcGFjaXR5IiksdV9pbWFnZTA6MCx1X2ltYWdlMToxLHVfYnJpZ2h0bmVzc19sb3c6aS5wYWludC5nZXQoInJhc3Rlci1icmlnaHRuZXNzLW1pbiIpLHVfYnJpZ2h0bmVzc19oaWdoOmkucGFpbnQuZ2V0KCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiKSx1X3NhdHVyYXRpb25fZmFjdG9yOihvPWkucGFpbnQuZ2V0KCJyYXN0ZXItc2F0dXJhdGlvbiIpLG8+MD8xLTEvKDEuMDAxLW8pOi1vKSx1X2NvbnRyYXN0X2ZhY3RvcjooYT1pLnBhaW50LmdldCgicmFzdGVyLWNvbnRyYXN0IiksYT4wPzEvKDEtYSk6MSthKSx1X3NwaW5fd2VpZ2h0czpVcihpLnBhaW50LmdldCgicmFzdGVyLWh1ZS1yb3RhdGUiKSl9O3ZhciBhLG99O2Z1bmN0aW9uIFVyKHQpe3QqPU1hdGguUEkvMTgwO3ZhciBlPU1hdGguc2luKHQpLHI9TWF0aC5jb3ModCk7cmV0dXJuWygyKnIrMSkvMywoLU1hdGguc3FydCgzKSplLXIrMSkvMywoTWF0aC5zcXJ0KDMpKmUtcisxKS8zXX12YXIgVnIscXI9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9aS50cmFuc2Zvcm07cmV0dXJue3VfaXNfc2l6ZV96b29tX2NvbnN0YW50OisoImNvbnN0YW50Ij09PXR8fCJzb3VyY2UiPT09dCksdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ6KygiY29uc3RhbnQiPT09dHx8ImNhbWVyYSI9PT10KSx1X3NpemVfdDplP2UudVNpemVUOjAsdV9zaXplOmU/ZS51U2l6ZTowLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTp1LmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV9waXRjaDp1LnBpdGNoLzM2MCoyKk1hdGguUEksdV9yb3RhdGVfc3ltYm9sOityLHVfYXNwZWN0X3JhdGlvOnUud2lkdGgvdS5oZWlnaHQsdV9mYWRlX2NoYW5nZTppLm9wdGlvbnMuZmFkZUR1cmF0aW9uP2kuc3ltYm9sRmFkZUNoYW5nZToxLHVfbWF0cml4OmEsdV9sYWJlbF9wbGFuZV9tYXRyaXg6byx1X2Nvb3JkX21hdHJpeDpzLHVfaXNfdGV4dDorbCx1X3BpdGNoX3dpdGhfbWFwOituLHVfdGV4c2l6ZTpjLHVfdGV4dHVyZTowfX0sSHI9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMsdSxmKXt2YXIgaD1hLnRyYW5zZm9ybTtyZXR1cm4gdC5leHRlbmQocXIoZSxyLG4saSxhLG8scyxsLGMsdSkse3VfZ2FtbWFfc2NhbGU6aT9NYXRoLmNvcyhoLl9waXRjaCkqaC5jYW1lcmFUb0NlbnRlckRpc3RhbmNlOjEsdV9kZXZpY2VfcGl4ZWxfcmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdV9pc19oYWxvOitmfSl9LEdyPWZ1bmN0aW9uKGUscixuLGksYSxvLHMsbCxjLHUpe3JldHVybiB0LmV4dGVuZChIcihlLHIsbixpLGEsbyxzLGwsITAsYywhMCkse3VfdGV4c2l6ZV9pY29uOnUsdV90ZXh0dXJlX2ljb246MX0pfSxZcj1mdW5jdGlvbih0LGUscil7cmV0dXJue3VfbWF0cml4OnQsdV9vcGFjaXR5OmUsdV9jb2xvcjpyfX0sV3I9ZnVuY3Rpb24oZSxyLG4saSxhLG8pe3JldHVybiB0LmV4dGVuZChmdW5jdGlvbih0LGUscixuKXt2YXIgaT1yLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQuZnJvbS50b1N0cmluZygpKSxhPXIuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odC50by50b1N0cmluZygpKSxvPXIuaW1hZ2VNYW5hZ2VyLmdldFBpeGVsU2l6ZSgpLHM9by53aWR0aCxsPW8uaGVpZ2h0LGM9TWF0aC5wb3coMixuLnRpbGVJRC5vdmVyc2NhbGVkWiksdT1uLnRpbGVTaXplKk1hdGgucG93KDIsci50cmFuc2Zvcm0udGlsZVpvb20pL2MsZj11KihuLnRpbGVJRC5jYW5vbmljYWwueCtuLnRpbGVJRC53cmFwKmMpLGg9dSpuLnRpbGVJRC5jYW5vbmljYWwueTtyZXR1cm57dV9pbWFnZTowLHVfcGF0dGVybl90bF9hOmkudGwsdV9wYXR0ZXJuX2JyX2E6aS5icix1X3BhdHRlcm5fdGxfYjphLnRsLHVfcGF0dGVybl9icl9iOmEuYnIsdV90ZXhzaXplOltzLGxdLHVfbWl4OmUudCx1X3BhdHRlcm5fc2l6ZV9hOmkuZGlzcGxheVNpemUsdV9wYXR0ZXJuX3NpemVfYjphLmRpc3BsYXlTaXplLHVfc2NhbGVfYTplLmZyb21TY2FsZSx1X3NjYWxlX2I6ZS50b1NjYWxlLHVfdGlsZV91bml0c190b19waXhlbHM6MS9oZShuLDEsci50cmFuc2Zvcm0udGlsZVpvb20pLHVfcGl4ZWxfY29vcmRfdXBwZXI6W2Y+PjE2LGg+PjE2XSx1X3BpeGVsX2Nvb3JkX2xvd2VyOls2NTUzNSZmLDY1NTM1JmhdfX0oaSxvLG4sYSkse3VfbWF0cml4OmUsdV9vcGFjaXR5OnJ9KX0sWHI9e2ZpbGxFeHRydXNpb246ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9saWdodHBvczpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfbGlnaHRwb3MpLHVfbGlnaHRpbnRlbnNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X2xpZ2h0aW50ZW5zaXR5KSx1X2xpZ2h0Y29sb3I6bmV3IHQuVW5pZm9ybTNmKGUsci51X2xpZ2h0Y29sb3IpLHVfdmVydGljYWxfZ3JhZGllbnQ6bmV3IHQuVW5pZm9ybTFmKGUsci51X3ZlcnRpY2FsX2dyYWRpZW50KSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpfX0sZmlsbEV4dHJ1c2lvblBhdHRlcm46ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9saWdodHBvczpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfbGlnaHRwb3MpLHVfbGlnaHRpbnRlbnNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X2xpZ2h0aW50ZW5zaXR5KSx1X2xpZ2h0Y29sb3I6bmV3IHQuVW5pZm9ybTNmKGUsci51X2xpZ2h0Y29sb3IpLHVfdmVydGljYWxfZ3JhZGllbnQ6bmV3IHQuVW5pZm9ybTFmKGUsci51X3ZlcnRpY2FsX2dyYWRpZW50KSx1X2hlaWdodF9mYWN0b3I6bmV3IHQuVW5pZm9ybTFmKGUsci51X2hlaWdodF9mYWN0b3IpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV9zY2FsZTpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc2NhbGUpLHVfZmFkZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZSksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KX19LGZpbGw6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCl9fSxmaWxsUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X3BpeGVsX2Nvb3JkX3VwcGVyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF91cHBlciksdV9waXhlbF9jb29yZF9sb3dlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfbG93ZXIpLHVfc2NhbGU6bmV3IHQuVW5pZm9ybTNmKGUsci51X3NjYWxlKSx1X2ZhZGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGUpfX0sZmlsbE91dGxpbmU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV93b3JsZDpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfd29ybGQpfX0sZmlsbE91dGxpbmVQYXR0ZXJuOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfd29ybGQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X3dvcmxkKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X3BpeGVsX2Nvb3JkX3VwcGVyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF91cHBlciksdV9waXhlbF9jb29yZF9sb3dlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfbG93ZXIpLHVfc2NhbGU6bmV3IHQuVW5pZm9ybTNmKGUsci51X3NjYWxlKSx1X2ZhZGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGUpfX0sY2lyY2xlOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9zY2FsZV93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfc2NhbGVfd2l0aF9tYXApLHVfcGl0Y2hfd2l0aF9tYXA6bmV3IHQuVW5pZm9ybTFpKGUsci51X3BpdGNoX3dpdGhfbWFwKSx1X2V4dHJ1ZGVfc2NhbGU6bmV3IHQuVW5pZm9ybTJmKGUsci51X2V4dHJ1ZGVfc2NhbGUpLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpfX0sY29sbGlzaW9uQm94OmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9waXhlbHNfdG9fdGlsZV91bml0czpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcGl4ZWxzX3RvX3RpbGVfdW5pdHMpLHVfZXh0cnVkZV9zY2FsZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfZXh0cnVkZV9zY2FsZSksdV9vdmVyc2NhbGVfZmFjdG9yOm5ldyB0LlVuaWZvcm0xZihlLHIudV9vdmVyc2NhbGVfZmFjdG9yKX19LGNvbGxpc2lvbkNpcmNsZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2ludl9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X2ludl9tYXRyaXgpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV92aWV3cG9ydF9zaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV92aWV3cG9ydF9zaXplKX19LGRlYnVnOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfY29sb3I6bmV3IHQuVW5pZm9ybUNvbG9yKGUsci51X2NvbG9yKSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X292ZXJsYXk6bmV3IHQuVW5pZm9ybTFpKGUsci51X292ZXJsYXkpLHVfb3ZlcmxheV9zY2FsZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3ZlcmxheV9zY2FsZSl9fSxjbGlwcGluZ01hc2s6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCl9fSxoZWF0bWFwOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfZXh0cnVkZV9zY2FsZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZXh0cnVkZV9zY2FsZSksdV9pbnRlbnNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ludGVuc2l0eSksdV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCl9fSxoZWF0bWFwVGV4dHVyZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3dvcmxkOm5ldyB0LlVuaWZvcm0yZihlLHIudV93b3JsZCksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfY29sb3JfcmFtcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfY29sb3JfcmFtcCksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KX19LGhpbGxzaGFkZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV9sYXRyYW5nZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfbGF0cmFuZ2UpLHVfbGlnaHQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X2xpZ2h0KSx1X3NoYWRvdzpuZXcgdC5Vbmlmb3JtQ29sb3IoZSxyLnVfc2hhZG93KSx1X2hpZ2hsaWdodDpuZXcgdC5Vbmlmb3JtQ29sb3IoZSxyLnVfaGlnaGxpZ2h0KSx1X2FjY2VudDpuZXcgdC5Vbmlmb3JtQ29sb3IoZSxyLnVfYWNjZW50KX19LGhpbGxzaGFkZVByZXBhcmU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfZGltZW5zaW9uOm5ldyB0LlVuaWZvcm0yZihlLHIudV9kaW1lbnNpb24pLHVfem9vbTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfem9vbSksdV9tYXh6b29tOm5ldyB0LlVuaWZvcm0xZihlLHIudV9tYXh6b29tKSx1X3VucGFjazpuZXcgdC5Vbmlmb3JtNGYoZSxyLnVfdW5wYWNrKX19LGxpbmU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcmF0aW8pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfdW5pdHNfdG9fcGl4ZWxzOm5ldyB0LlVuaWZvcm0yZihlLHIudV91bml0c190b19waXhlbHMpfX0sbGluZUdyYWRpZW50OmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X3JhdGlvKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdW5pdHNfdG9fcGl4ZWxzKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSl9fSxsaW5lUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X3JhdGlvKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV91bml0c190b19waXhlbHM6bmV3IHQuVW5pZm9ybTJmKGUsci51X3VuaXRzX3RvX3BpeGVscyksdV9zY2FsZTpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc2NhbGUpLHVfZmFkZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZSl9fSxsaW5lU0RGOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X3JhdGlvKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdW5pdHNfdG9fcGl4ZWxzKSx1X3BhdHRlcm5zY2FsZV9hOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuc2NhbGVfYSksdV9wYXR0ZXJuc2NhbGVfYjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybnNjYWxlX2IpLHVfc2RmZ2FtbWE6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NkZmdhbW1hKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV90ZXhfeV9hOm5ldyB0LlVuaWZvcm0xZihlLHIudV90ZXhfeV9hKSx1X3RleF95X2I6bmV3IHQuVW5pZm9ybTFmKGUsci51X3RleF95X2IpLHVfbWl4Om5ldyB0LlVuaWZvcm0xZihlLHIudV9taXgpfX0scmFzdGVyOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfdGxfcGFyZW50Om5ldyB0LlVuaWZvcm0yZihlLHIudV90bF9wYXJlbnQpLHVfc2NhbGVfcGFyZW50Om5ldyB0LlVuaWZvcm0xZihlLHIudV9zY2FsZV9wYXJlbnQpLHVfYnVmZmVyX3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9idWZmZXJfc2NhbGUpLHVfZmFkZV90Om5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlX3QpLHVfb3BhY2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3BhY2l0eSksdV9pbWFnZTA6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlMCksdV9pbWFnZTE6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlMSksdV9icmlnaHRuZXNzX2xvdzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfYnJpZ2h0bmVzc19sb3cpLHVfYnJpZ2h0bmVzc19oaWdoOm5ldyB0LlVuaWZvcm0xZihlLHIudV9icmlnaHRuZXNzX2hpZ2gpLHVfc2F0dXJhdGlvbl9mYWN0b3I6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NhdHVyYXRpb25fZmFjdG9yKSx1X2NvbnRyYXN0X2ZhY3RvcjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY29udHJhc3RfZmFjdG9yKSx1X3NwaW5fd2VpZ2h0czpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc3Bpbl93ZWlnaHRzKX19LHN5bWJvbEljb246ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9pc19zaXplX3pvb21fY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfem9vbV9jb25zdGFudCksdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksdV9zaXplX3Q6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemVfdCksdV9zaXplOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zaXplKSx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLHVfcGl0Y2g6bmV3IHQuVW5pZm9ybTFmKGUsci51X3BpdGNoKSx1X3JvdGF0ZV9zeW1ib2w6bmV3IHQuVW5pZm9ybTFpKGUsci51X3JvdGF0ZV9zeW1ib2wpLHVfYXNwZWN0X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9hc3BlY3RfcmF0aW8pLHVfZmFkZV9jaGFuZ2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGVfY2hhbmdlKSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xhYmVsX3BsYW5lX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbGFiZWxfcGxhbmVfbWF0cml4KSx1X2Nvb3JkX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfY29vcmRfbWF0cml4KSx1X2lzX3RleHQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3RleHQpLHVfcGl0Y2hfd2l0aF9tYXA6bmV3IHQuVW5pZm9ybTFpKGUsci51X3BpdGNoX3dpdGhfbWFwKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfdGV4dHVyZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfdGV4dHVyZSl9fSxzeW1ib2xTREY6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9pc19zaXplX3pvb21fY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfem9vbV9jb25zdGFudCksdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksdV9zaXplX3Q6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemVfdCksdV9zaXplOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zaXplKSx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLHVfcGl0Y2g6bmV3IHQuVW5pZm9ybTFmKGUsci51X3BpdGNoKSx1X3JvdGF0ZV9zeW1ib2w6bmV3IHQuVW5pZm9ybTFpKGUsci51X3JvdGF0ZV9zeW1ib2wpLHVfYXNwZWN0X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9hc3BlY3RfcmF0aW8pLHVfZmFkZV9jaGFuZ2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGVfY2hhbmdlKSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xhYmVsX3BsYW5lX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbGFiZWxfcGxhbmVfbWF0cml4KSx1X2Nvb3JkX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfY29vcmRfbWF0cml4KSx1X2lzX3RleHQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3RleHQpLHVfcGl0Y2hfd2l0aF9tYXA6bmV3IHQuVW5pZm9ybTFpKGUsci51X3BpdGNoX3dpdGhfbWFwKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfdGV4dHVyZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfdGV4dHVyZSksdV9nYW1tYV9zY2FsZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZ2FtbWFfc2NhbGUpLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfaXNfaGFsbzpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfaGFsbyl9fSxzeW1ib2xUZXh0QW5kSWNvbjpmdW5jdGlvbihlLHIpe3JldHVybnt1X2lzX3NpemVfem9vbV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSx1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSx1X3NpemVfdDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZV90KSx1X3NpemU6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemUpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9waXRjaDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcGl0Y2gpLHVfcm90YXRlX3N5bWJvbDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcm90YXRlX3N5bWJvbCksdV9hc3BlY3RfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2FzcGVjdF9yYXRpbyksdV9mYWRlX2NoYW5nZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZV9jaGFuZ2UpLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfbGFiZWxfcGxhbmVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9sYWJlbF9wbGFuZV9tYXRyaXgpLHVfY29vcmRfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9jb29yZF9tYXRyaXgpLHVfaXNfdGV4dDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfdGV4dCksdV9waXRjaF93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcGl0Y2hfd2l0aF9tYXApLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV90ZXhzaXplX2ljb246bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemVfaWNvbiksdV90ZXh0dXJlOm5ldyB0LlVuaWZvcm0xaShlLHIudV90ZXh0dXJlKSx1X3RleHR1cmVfaWNvbjpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfdGV4dHVyZV9pY29uKSx1X2dhbW1hX3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9nYW1tYV9zY2FsZSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV9pc19oYWxvOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19oYWxvKX19LGJhY2tncm91bmQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KSx1X2NvbG9yOm5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9jb2xvcil9fSxiYWNrZ3JvdW5kUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3BhdHRlcm5fdGxfYTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl90bF9hKSx1X3BhdHRlcm5fYnJfYTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl9icl9hKSx1X3BhdHRlcm5fdGxfYjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl90bF9iKSx1X3BhdHRlcm5fYnJfYjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl9icl9iKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfbWl4Om5ldyB0LlVuaWZvcm0xZihlLHIudV9taXgpLHVfcGF0dGVybl9zaXplX2E6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5fc2l6ZV9hKSx1X3BhdHRlcm5fc2l6ZV9iOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX3NpemVfYiksdV9zY2FsZV9hOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zY2FsZV9hKSx1X3NjYWxlX2I6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NjYWxlX2IpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV90aWxlX3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdGlsZV91bml0c190b19waXhlbHMpfX19O2Z1bmN0aW9uIFpyKGUscixuLGksYSxvLHMpe2Zvcih2YXIgbD1lLmNvbnRleHQsYz1sLmdsLHU9ZS51c2VQcm9ncmFtKCJjb2xsaXNpb25Cb3giKSxmPVtdLGg9MCxwPTAsZD0wO2Q8aS5sZW5ndGg7ZCsrKXt2YXIgZz1pW2RdLG09ci5nZXRUaWxlKGcpLHY9bS5nZXRCdWNrZXQobik7aWYodil7dmFyIHk9Zy5wb3NNYXRyaXg7MD09PWFbMF0mJjA9PT1hWzFdfHwoeT1lLnRyYW5zbGF0ZVBvc01hdHJpeChnLnBvc01hdHJpeCxtLGEsbykpO3ZhciB4PXM/di50ZXh0Q29sbGlzaW9uQm94OnYuaWNvbkNvbGxpc2lvbkJveCxiPXYuY29sbGlzaW9uQ2lyY2xlQXJyYXk7aWYoYi5sZW5ndGg+MCl7dmFyIF89dC5jcmVhdGUoKSx3PXk7dC5tdWwoXyx2LnBsYWNlbWVudEludlByb2pNYXRyaXgsZS50cmFuc2Zvcm0uZ2xDb29yZE1hdHJpeCksdC5tdWwoXyxfLHYucGxhY2VtZW50Vmlld3BvcnRNYXRyaXgpLGYucHVzaCh7Y2lyY2xlQXJyYXk6YixjaXJjbGVPZmZzZXQ6cCx0cmFuc2Zvcm06dyxpbnZUcmFuc2Zvcm06X30pLHA9aCs9Yi5sZW5ndGgvNH14JiZ1LmRyYXcobCxjLkxJTkVTLE10LmRpc2FibGVkLEF0LmRpc2FibGVkLGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLEV0LmRpc2FibGVkLENyKHksZS50cmFuc2Zvcm0sbSksbi5pZCx4LmxheW91dFZlcnRleEJ1ZmZlcix4LmluZGV4QnVmZmVyLHguc2VnbWVudHMsbnVsbCxlLnRyYW5zZm9ybS56b29tLG51bGwsbnVsbCx4LmNvbGxpc2lvblZlcnRleEJ1ZmZlcil9fWlmKHMmJmYubGVuZ3RoKXt2YXIgVD1lLnVzZVByb2dyYW0oImNvbGxpc2lvbkNpcmNsZSIpLGs9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQyZjFmMmkxNjtrLnJlc2l6ZSg0KmgpLGsuX3RyaW0oKTtmb3IodmFyIE09MCxBPTAsUz1mO0E8Uy5sZW5ndGg7QSs9MSlmb3IodmFyIEU9U1tBXSxDPTA7QzxFLmNpcmNsZUFycmF5Lmxlbmd0aC80O0MrKyl7dmFyIEw9NCpDLEk9RS5jaXJjbGVBcnJheVtMKzBdLFA9RS5jaXJjbGVBcnJheVtMKzFdLHo9RS5jaXJjbGVBcnJheVtMKzJdLE89RS5jaXJjbGVBcnJheVtMKzNdO2suZW1wbGFjZShNKyssSSxQLHosTywwKSxrLmVtcGxhY2UoTSsrLEksUCx6LE8sMSksay5lbXBsYWNlKE0rKyxJLFAseixPLDIpLGsuZW1wbGFjZShNKyssSSxQLHosTywzKX0oIVZyfHxWci5sZW5ndGg8MipoKSYmKFZyPWZ1bmN0aW9uKGUpe3ZhciByPTIqZSxuPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0M3VpNjtuLnJlc2l6ZShyKSxuLl90cmltKCk7Zm9yKHZhciBpPTA7aTxyO2krKyl7dmFyIGE9NippO24udWludDE2W2ErMF09NCppKzAsbi51aW50MTZbYSsxXT00KmkrMSxuLnVpbnQxNlthKzJdPTQqaSsyLG4udWludDE2W2ErM109NCppKzIsbi51aW50MTZbYSs0XT00KmkrMyxuLnVpbnQxNlthKzVdPTQqaSswfXJldHVybiBufShoKSk7Zm9yKHZhciBEPWwuY3JlYXRlSW5kZXhCdWZmZXIoVnIsITApLFI9bC5jcmVhdGVWZXJ0ZXhCdWZmZXIoayx0LmNvbGxpc2lvbkNpcmNsZUxheW91dC5tZW1iZXJzLCEwKSxGPTAsQj1mO0Y8Qi5sZW5ndGg7Ris9MSl7dmFyIE49QltGXSxqPUxyKE4udHJhbnNmb3JtLE4uaW52VHJhbnNmb3JtLGUudHJhbnNmb3JtKTtULmRyYXcobCxjLlRSSUFOR0xFUyxNdC5kaXNhYmxlZCxBdC5kaXNhYmxlZCxlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxFdC5kaXNhYmxlZCxqLG4uaWQsUixELHQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMipOLmNpcmNsZU9mZnNldCxOLmNpcmNsZUFycmF5Lmxlbmd0aCxOLmNpcmNsZUFycmF5Lmxlbmd0aC8yKSxudWxsLGUudHJhbnNmb3JtLnpvb20sbnVsbCxudWxsLG51bGwpfVIuZGVzdHJveSgpLEQuZGVzdHJveSgpfX12YXIgSnI9dC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSk7ZnVuY3Rpb24gS3IoZSxyLG4saSxhLG8pe3ZhciBzPXQuZ2V0QW5jaG9yQWxpZ25tZW50KGUpLGw9LShzLmhvcml6b250YWxBbGlnbi0uNSkqcixjPS0ocy52ZXJ0aWNhbEFsaWduLS41KSpuLHU9dC5ldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGUsaSk7cmV0dXJuIG5ldyB0LlBvaW50KChsL2ErdVswXSkqbywoYy9hK3VbMV0pKm8pfWZ1bmN0aW9uIFFyKGUscixuLGksYSxvLHMsbCxjLHUsZil7dmFyIGg9ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LHA9ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSxkPWUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksZz17fTtwLmNsZWFyKCk7Zm9yKHZhciBtPTA7bTxoLmxlbmd0aDttKyspe3ZhciB2PWguZ2V0KG0pLHk9di5oaWRkZW58fCF2LmNyb3NzVGlsZUlEfHxlLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJiF2LnBsYWNlZE9yaWVudGF0aW9uP251bGw6aVt2LmNyb3NzVGlsZUlEXTtpZih5KXt2YXIgeD1uZXcgdC5Qb2ludCh2LmFuY2hvclgsdi5hbmNob3JZKSxiPSR0KHgsbj9sOnMpLF89dGUoby5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLGIuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhKSx3PWEuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShlLnRleHRTaXplRGF0YSx1LHYpKl8vdC5PTkVfRU07biYmKHcqPWUudGlsZVBpeGVsUmF0aW8vYyk7Zm9yKHZhciBUPUtyKHkuYW5jaG9yLHkud2lkdGgseS5oZWlnaHQseS50ZXh0T2Zmc2V0LHkudGV4dEJveFNjYWxlLHcpLGs9bj8kdCh4LmFkZChUKSxzKS5wb2ludDpiLnBvaW50LmFkZChyP1Qucm90YXRlKC1vLmFuZ2xlKTpUKSxNPWUuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmdi5wbGFjZWRPcmllbnRhdGlvbj09PXQuV3JpdGluZ01vZGUudmVydGljYWw/TWF0aC5QSS8yOjAsQT0wO0E8di5udW1HbHlwaHM7QSsrKXQuYWRkRHluYW1pY0F0dHJpYnV0ZXMocCxrLE0pO2YmJnYuYXNzb2NpYXRlZEljb25JbmRleD49MCYmKGdbdi5hc3NvY2lhdGVkSWNvbkluZGV4XT17c2hpZnRlZEFuY2hvcjprLGFuZ2xlOk19KX1lbHNlIGNlKHYubnVtR2x5cGhzLHApfWlmKGYpe2QuY2xlYXIoKTtmb3IodmFyIFM9ZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LEU9MDtFPFMubGVuZ3RoO0UrKyl7dmFyIEM9Uy5nZXQoRSk7aWYoQy5oaWRkZW4pY2UoQy5udW1HbHlwaHMsZCk7ZWxzZXt2YXIgTD1nW0VdO2lmKEwpZm9yKHZhciBJPTA7STxDLm51bUdseXBocztJKyspdC5hZGREeW5hbWljQXR0cmlidXRlcyhkLEwuc2hpZnRlZEFuY2hvcixMLmFuZ2xlKTtlbHNlIGNlKEMubnVtR2x5cGhzLGQpfX1lLmljb24uZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGQpfWUudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEocCl9ZnVuY3Rpb24gJHIodCxlLHIpe3JldHVybiByLmljb25zSW5UZXh0JiZlPyJzeW1ib2xUZXh0QW5kSWNvbiI6dD8ic3ltYm9sU0RGIjoic3ltYm9sSWNvbiJ9ZnVuY3Rpb24gdG4oZSxyLG4saSxhLG8scyxsLGMsdSxmLGgpe2Zvcih2YXIgcD1lLmNvbnRleHQsZD1wLmdsLGc9ZS50cmFuc2Zvcm0sbT0ibWFwIj09PWwsdj0ibWFwIj09PWMseT1tJiYicG9pbnQiIT09bi5sYXlvdXQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikseD1tJiYhdiYmIXksYj12b2lkIDAhPT1uLmxheW91dC5nZXQoInN5bWJvbC1zb3J0LWtleSIpLmNvbnN0YW50T3IoMSksXz1lLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsTXQuUmVhZE9ubHkpLHc9bi5sYXlvdXQuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpLFQ9W10saz0wLE09aTtrPE0ubGVuZ3RoO2srPTEpe3ZhciBBPU1ba10sUz1yLmdldFRpbGUoQSksRT1TLmdldEJ1Y2tldChuKTtpZihFKXt2YXIgQz1hP0UudGV4dDpFLmljb247aWYoQyYmQy5zZWdtZW50cy5nZXQoKS5sZW5ndGgpe3ZhciBMPUMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxJPWF8fEUuc2RmSWNvbnMsUD1hP0UudGV4dFNpemVEYXRhOkUuaWNvblNpemVEYXRhLHo9dnx8MCE9PWcucGl0Y2gsTz1lLnVzZVByb2dyYW0oJHIoSSxhLEUpLEwpLEQ9dC5ldmFsdWF0ZVNpemVGb3Jab29tKFAsZy56b29tKSxSPXZvaWQgMCxGPVswLDBdLEI9dm9pZCAwLE49dm9pZCAwLGo9bnVsbCxVPXZvaWQgMDtpZihhKUI9Uy5nbHlwaEF0bGFzVGV4dHVyZSxOPWQuTElORUFSLFI9Uy5nbHlwaEF0bGFzVGV4dHVyZS5zaXplLEUuaWNvbnNJblRleHQmJihGPVMuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZSxqPVMuaW1hZ2VBdGxhc1RleHR1cmUsVT16fHxlLm9wdGlvbnMucm90YXRpbmd8fGUub3B0aW9ucy56b29taW5nfHwiY29tcG9zaXRlIj09PVAua2luZHx8ImNhbWVyYSI9PT1QLmtpbmQ/ZC5MSU5FQVI6ZC5ORUFSRVNUKTtlbHNle3ZhciBWPTEhPT1uLmxheW91dC5nZXQoImljb24tc2l6ZSIpLmNvbnN0YW50T3IoMCl8fEUuaWNvbnNOZWVkTGluZWFyO0I9Uy5pbWFnZUF0bGFzVGV4dHVyZSxOPUl8fGUub3B0aW9ucy5yb3RhdGluZ3x8ZS5vcHRpb25zLnpvb21pbmd8fFZ8fHo/ZC5MSU5FQVI6ZC5ORUFSRVNULFI9Uy5pbWFnZUF0bGFzVGV4dHVyZS5zaXplfXZhciBxPWhlKFMsMSxlLnRyYW5zZm9ybS56b29tKSxIPUt0KEEucG9zTWF0cml4LHYsbSxlLnRyYW5zZm9ybSxxKSxHPVF0KEEucG9zTWF0cml4LHYsbSxlLnRyYW5zZm9ybSxxKSxZPXcmJkUuaGFzVGV4dERhdGEoKSxXPSJub25lIiE9PW4ubGF5b3V0LmdldCgiaWNvbi10ZXh0LWZpdCIpJiZZJiZFLmhhc0ljb25EYXRhKCk7eSYmcmUoRSxBLnBvc01hdHJpeCxlLGEsSCxHLHYsdSk7dmFyIFg9ZS50cmFuc2xhdGVQb3NNYXRyaXgoQS5wb3NNYXRyaXgsUyxvLHMpLFo9eXx8YSYmd3x8Vz9KcjpILEo9ZS50cmFuc2xhdGVQb3NNYXRyaXgoRyxTLG8scywhMCksSz1JJiYwIT09bi5wYWludC5nZXQoYT8idGV4dC1oYWxvLXdpZHRoIjoiaWNvbi1oYWxvLXdpZHRoIikuY29uc3RhbnRPcigxKSxRPXtwcm9ncmFtOk8sYnVmZmVyczpDLHVuaWZvcm1WYWx1ZXM6ST9FLmljb25zSW5UZXh0P0dyKFAua2luZCxELHgsdixlLFgsWixKLFIsRik6SHIoUC5raW5kLEQseCx2LGUsWCxaLEosYSxSLCEwKTpxcihQLmtpbmQsRCx4LHYsZSxYLFosSixhLFIpLGF0bGFzVGV4dHVyZTpCLGF0bGFzVGV4dHVyZUljb246aixhdGxhc0ludGVycG9sYXRpb246TixhdGxhc0ludGVycG9sYXRpb25JY29uOlUsaXNTREY6SSxoYXNIYWxvOkt9O2lmKGIpZm9yKHZhciAkPTAsdHQ9Qy5zZWdtZW50cy5nZXQoKTskPHR0Lmxlbmd0aDskKz0xKXt2YXIgZXQ9dHRbJF07VC5wdXNoKHtzZWdtZW50czpuZXcgdC5TZWdtZW50VmVjdG9yKFtldF0pLHNvcnRLZXk6ZXQuc29ydEtleSxzdGF0ZTpRfSl9ZWxzZSBULnB1c2goe3NlZ21lbnRzOkMuc2VnbWVudHMsc29ydEtleTowLHN0YXRlOlF9KX19fWImJlQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKTtmb3IodmFyIHJ0PTAsbnQ9VDtydDxudC5sZW5ndGg7cnQrPTEpe3ZhciBpdD1udFtydF0sYXQ9aXQuc3RhdGU7aWYocC5hY3RpdmVUZXh0dXJlLnNldChkLlRFWFRVUkUwKSxhdC5hdGxhc1RleHR1cmUuYmluZChhdC5hdGxhc0ludGVycG9sYXRpb24sZC5DTEFNUF9UT19FREdFKSxhdC5hdGxhc1RleHR1cmVJY29uJiYocC5hY3RpdmVUZXh0dXJlLnNldChkLlRFWFRVUkUxKSxhdC5hdGxhc1RleHR1cmVJY29uJiZhdC5hdGxhc1RleHR1cmVJY29uLmJpbmQoYXQuYXRsYXNJbnRlcnBvbGF0aW9uSWNvbixkLkNMQU1QX1RPX0VER0UpKSxhdC5pc1NERil7dmFyIG90PWF0LnVuaWZvcm1WYWx1ZXM7YXQuaGFzSGFsbyYmKG90LnVfaXNfaGFsbz0xLGVuKGF0LmJ1ZmZlcnMsaXQuc2VnbWVudHMsbixlLGF0LnByb2dyYW0sXyxmLGgsb3QpKSxvdC51X2lzX2hhbG89MH1lbihhdC5idWZmZXJzLGl0LnNlZ21lbnRzLG4sZSxhdC5wcm9ncmFtLF8sZixoLGF0LnVuaWZvcm1WYWx1ZXMpfX1mdW5jdGlvbiBlbih0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9bi5jb250ZXh0O2kuZHJhdyhjLGMuZ2wuVFJJQU5HTEVTLGEsbyxzLEV0LmRpc2FibGVkLGwsci5pZCx0LmxheW91dFZlcnRleEJ1ZmZlcix0LmluZGV4QnVmZmVyLGUsci5wYWludCxuLnRyYW5zZm9ybS56b29tLHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIsdC5vcGFjaXR5VmVydGV4QnVmZmVyKX1mdW5jdGlvbiBybih0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxmLGg9dC5jb250ZXh0LmdsLHA9ci5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpLGQ9cCYmcC5jb25zdGFudE9yKDEpLGc9ci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7bz8obD1kJiYhci5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT8iZmlsbE91dGxpbmVQYXR0ZXJuIjoiZmlsbE91dGxpbmUiLHM9aC5MSU5FUyk6KGw9ZD8iZmlsbFBhdHRlcm4iOiJmaWxsIixzPWguVFJJQU5HTEVTKTtmb3IodmFyIG09MCx2PW47bTx2Lmxlbmd0aDttKz0xKXt2YXIgeT12W21dLHg9ZS5nZXRUaWxlKHkpO2lmKCFkfHx4LnBhdHRlcm5zTG9hZGVkKCkpe3ZhciBiPXguZ2V0QnVja2V0KHIpO2lmKGIpe3ZhciBfPWIucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx3PXQudXNlUHJvZ3JhbShsLF8pO2QmJih0LmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoaC5URVhUVVJFMCkseC5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGguTElORUFSLGguQ0xBTVBfVE9fRURHRSksXy51cGRhdGVQYWludEJ1ZmZlcnMoZykpO3ZhciBUPXAuY29uc3RhbnRPcihudWxsKTtpZihUJiZ4LmltYWdlQXRsYXMpe3ZhciBrPXguaW1hZ2VBdGxhcyxNPWsucGF0dGVyblBvc2l0aW9uc1tULnRvLnRvU3RyaW5nKCldLEE9ay5wYXR0ZXJuUG9zaXRpb25zW1QuZnJvbS50b1N0cmluZygpXTtNJiZBJiZfLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhNLEEpfXZhciBTPXQudHJhbnNsYXRlUG9zTWF0cml4KHkucG9zTWF0cml4LHgsci5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlIiksci5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlLWFuY2hvciIpKTtpZihvKXt1PWIuaW5kZXhCdWZmZXIyLGY9Yi5zZWdtZW50czI7dmFyIEU9W2guZHJhd2luZ0J1ZmZlcldpZHRoLGguZHJhd2luZ0J1ZmZlckhlaWdodF07Yz0iZmlsbE91dGxpbmVQYXR0ZXJuIj09PWwmJmQ/U3IoUyx0LGcseCxFKTpBcihTLEUpfWVsc2UgdT1iLmluZGV4QnVmZmVyLGY9Yi5zZWdtZW50cyxjPWQ/TXIoUyx0LGcseCk6a3IoUyk7dy5kcmF3KHQuY29udGV4dCxzLGksdC5zdGVuY2lsTW9kZUZvckNsaXBwaW5nKHkpLGEsRXQuZGlzYWJsZWQsYyxyLmlkLGIubGF5b3V0VmVydGV4QnVmZmVyLHUsZixyLnBhaW50LHQudHJhbnNmb3JtLnpvb20sXyl9fX19ZnVuY3Rpb24gbm4odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXQuY29udGV4dCxsPXMuZ2wsYz1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tcGF0dGVybiIpLHU9Yy5jb25zdGFudE9yKDEpLGY9ci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCksaD1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tb3BhY2l0eSIpLHA9MCxkPW47cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdLG09ZS5nZXRUaWxlKGcpLHY9bS5nZXRCdWNrZXQocik7aWYodil7dmFyIHk9di5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLHg9dC51c2VQcm9ncmFtKHU/ImZpbGxFeHRydXNpb25QYXR0ZXJuIjoiZmlsbEV4dHJ1c2lvbiIseSk7dSYmKHQuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChsLlRFWFRVUkUwKSxtLmltYWdlQXRsYXNUZXh0dXJlLmJpbmQobC5MSU5FQVIsbC5DTEFNUF9UT19FREdFKSx5LnVwZGF0ZVBhaW50QnVmZmVycyhmKSk7dmFyIGI9Yy5jb25zdGFudE9yKG51bGwpO2lmKGImJm0uaW1hZ2VBdGxhcyl7dmFyIF89bS5pbWFnZUF0bGFzLHc9Xy5wYXR0ZXJuUG9zaXRpb25zW2IudG8udG9TdHJpbmcoKV0sVD1fLnBhdHRlcm5Qb3NpdGlvbnNbYi5mcm9tLnRvU3RyaW5nKCldO3cmJlQmJnkuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHcsVCl9dmFyIGs9dC50cmFuc2xhdGVQb3NNYXRyaXgoZy5wb3NNYXRyaXgsbSxyLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIiksci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiKSksTT1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnQiKSxBPXU/VHIoayx0LE0saCxnLGYsbSk6d3Ioayx0LE0saCk7eC5kcmF3KHMscy5nbC5UUklBTkdMRVMsaSxhLG8sRXQuYmFja0NDVyxBLHIuaWQsdi5sYXlvdXRWZXJ0ZXhCdWZmZXIsdi5pbmRleEJ1ZmZlcix2LnNlZ21lbnRzLHIucGFpbnQsdC50cmFuc2Zvcm0uem9vbSx5KX19fWZ1bmN0aW9uIGFuKGUscixuLGksYSxvKXt2YXIgcz1lLmNvbnRleHQsbD1zLmdsLGM9ci5mYm87aWYoYyl7dmFyIHU9ZS51c2VQcm9ncmFtKCJoaWxsc2hhZGUiKTtzLmFjdGl2ZVRleHR1cmUuc2V0KGwuVEVYVFVSRTApLGwuYmluZFRleHR1cmUobC5URVhUVVJFXzJELGMuY29sb3JBdHRhY2htZW50LmdldCgpKTt2YXIgZj1mdW5jdGlvbihlLHIsbil7dmFyIGk9bi5wYWludC5nZXQoImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiKSxhPW4ucGFpbnQuZ2V0KCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIiksbz1uLnBhaW50LmdldCgiaGlsbHNoYWRlLWFjY2VudC1jb2xvciIpLHM9bi5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIikqKE1hdGguUEkvMTgwKTsidmlld3BvcnQiPT09bi5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIikmJihzLT1lLnRyYW5zZm9ybS5hbmdsZSk7dmFyIGwsYyx1LGY9IWUub3B0aW9ucy5tb3Zpbmc7cmV0dXJue3VfbWF0cml4OmUudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChyLnRpbGVJRC50b1Vud3JhcHBlZCgpLGYpLHVfaW1hZ2U6MCx1X2xhdHJhbmdlOihsPXIudGlsZUlELGM9TWF0aC5wb3coMixsLmNhbm9uaWNhbC56KSx1PWwuY2Fub25pY2FsLnksW25ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZSgwLHUvYykudG9MbmdMYXQoKS5sYXQsbmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKDAsKHUrMSkvYykudG9MbmdMYXQoKS5sYXRdKSx1X2xpZ2h0OltuLnBhaW50LmdldCgiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiIpLHNdLHVfc2hhZG93OmksdV9oaWdobGlnaHQ6YSx1X2FjY2VudDpvfX0oZSxyLG4pO3UuZHJhdyhzLGwuVFJJQU5HTEVTLGksYSxvLEV0LmRpc2FibGVkLGYsbi5pZCxlLnJhc3RlckJvdW5kc0J1ZmZlcixlLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLGUucmFzdGVyQm91bmRzU2VnbWVudHMpfX1mdW5jdGlvbiBvbihlLHIsbixpLGEsbyxzKXt2YXIgbD1lLmNvbnRleHQsYz1sLmdsLHU9ci5kZW07aWYodSYmdS5kYXRhKXt2YXIgZj11LmRpbSxoPXUuc3RyaWRlLHA9dS5nZXRQaXhlbHMoKTtpZihsLmFjdGl2ZVRleHR1cmUuc2V0KGMuVEVYVFVSRTEpLGwucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KCExKSxyLmRlbVRleHR1cmU9ci5kZW1UZXh0dXJlfHxlLmdldFRpbGVUZXh0dXJlKGgpLHIuZGVtVGV4dHVyZSl7dmFyIGQ9ci5kZW1UZXh0dXJlO2QudXBkYXRlKHAse3ByZW11bHRpcGx5OiExfSksZC5iaW5kKGMuTkVBUkVTVCxjLkNMQU1QX1RPX0VER0UpfWVsc2Ugci5kZW1UZXh0dXJlPW5ldyB0LlRleHR1cmUobCxwLGMuUkdCQSx7cHJlbXVsdGlwbHk6ITF9KSxyLmRlbVRleHR1cmUuYmluZChjLk5FQVJFU1QsYy5DTEFNUF9UT19FREdFKTtsLmFjdGl2ZVRleHR1cmUuc2V0KGMuVEVYVFVSRTApO3ZhciBnPXIuZmJvO2lmKCFnKXt2YXIgbT1uZXcgdC5UZXh0dXJlKGwse3dpZHRoOmYsaGVpZ2h0OmYsZGF0YTpudWxsfSxjLlJHQkEpO20uYmluZChjLkxJTkVBUixjLkNMQU1QX1RPX0VER0UpLChnPXIuZmJvPWwuY3JlYXRlRnJhbWVidWZmZXIoZixmLCEwKSkuY29sb3JBdHRhY2htZW50LnNldChtLnRleHR1cmUpfWwuYmluZEZyYW1lYnVmZmVyLnNldChnLmZyYW1lYnVmZmVyKSxsLnZpZXdwb3J0LnNldChbMCwwLGYsZl0pLGUudXNlUHJvZ3JhbSgiaGlsbHNoYWRlUHJlcGFyZSIpLmRyYXcobCxjLlRSSUFOR0xFUyxhLG8scyxFdC5kaXNhYmxlZCxmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5zdHJpZGUsYT10LmNyZWF0ZSgpO3JldHVybiB0Lm9ydGhvKGEsMCx0LkVYVEVOVCwtdC5FWFRFTlQsMCwwLDEpLHQudHJhbnNsYXRlKGEsYSxbMCwtdC5FWFRFTlQsMF0pLHt1X21hdHJpeDphLHVfaW1hZ2U6MSx1X2RpbWVuc2lvbjpbaSxpXSx1X3pvb206ZS5vdmVyc2NhbGVkWix1X21heHpvb206bix1X3VucGFjazpyLmdldFVucGFja1ZlY3RvcigpfX0oci50aWxlSUQsdSxpKSxuLmlkLGUucmFzdGVyQm91bmRzQnVmZmVyLGUucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsZS5yYXN0ZXJCb3VuZHNTZWdtZW50cyksci5uZWVkc0hpbGxzaGFkZVByZXBhcmU9ITF9fWZ1bmN0aW9uIHNuKGUscixuLGksYSl7dmFyIG89aS5wYWludC5nZXQoInJhc3Rlci1mYWRlLWR1cmF0aW9uIik7aWYobz4wKXt2YXIgcz10LmJyb3dzZXIubm93KCksbD0ocy1lLnRpbWVBZGRlZCkvbyxjPXI/KHMtci50aW1lQWRkZWQpL286LTEsdT1uLmdldFNvdXJjZSgpLGY9YS5jb3ZlcmluZ1pvb21MZXZlbCh7dGlsZVNpemU6dS50aWxlU2l6ZSxyb3VuZFpvb206dS5yb3VuZFpvb219KSxoPSFyfHxNYXRoLmFicyhyLnRpbGVJRC5vdmVyc2NhbGVkWi1mKT5NYXRoLmFicyhlLnRpbGVJRC5vdmVyc2NhbGVkWi1mKSxwPWgmJmUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24/MTp0LmNsYW1wKGg/bDoxLWMsMCwxKTtyZXR1cm4gZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbiYmbD49MSYmKGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb249ITEpLHI/e29wYWNpdHk6MSxtaXg6MS1wfTp7b3BhY2l0eTpwLG1peDowfX1yZXR1cm57b3BhY2l0eToxLG1peDowfX12YXIgbG49bmV3IHQuQ29sb3IoMSwwLDAsMSksY249bmV3IHQuQ29sb3IoMCwxLDAsMSksdW49bmV3IHQuQ29sb3IoMCwwLDEsMSksZm49bmV3IHQuQ29sb3IoMSwwLDEsMSksaG49bmV3IHQuQ29sb3IoMCwxLDEsMSk7ZnVuY3Rpb24gcG4odCxlLHIsbil7Z24odCwwLGUrci8yLHQudHJhbnNmb3JtLndpZHRoLHIsbil9ZnVuY3Rpb24gZG4odCxlLHIsbil7Z24odCxlLXIvMiwwLHIsdC50cmFuc2Zvcm0uaGVpZ2h0LG4pfWZ1bmN0aW9uIGduKGUscixuLGksYSxvKXt2YXIgcz1lLmNvbnRleHQsbD1zLmdsO2wuZW5hYmxlKGwuU0NJU1NPUl9URVNUKSxsLnNjaXNzb3Iocip0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxuKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLGkqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sYSp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbykscy5jbGVhcih7Y29sb3I6b30pLGwuZGlzYWJsZShsLlNDSVNTT1JfVEVTVCl9ZnVuY3Rpb24gbW4oZSxyLG4pe3ZhciBpPWUuY29udGV4dCxhPWkuZ2wsbz1uLnBvc01hdHJpeCxzPWUudXNlUHJvZ3JhbSgiZGVidWciKSxsPU10LmRpc2FibGVkLGM9QXQuZGlzYWJsZWQsdT1lLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApLGUuZW1wdHlUZXh0dXJlLmJpbmQoYS5MSU5FQVIsYS5DTEFNUF9UT19FREdFKSxzLmRyYXcoaSxhLkxJTkVfU1RSSVAsbCxjLHUsRXQuZGlzYWJsZWQsSXIobyx0LkNvbG9yLnJlZCksIiRkZWJ1ZyIsZS5kZWJ1Z0J1ZmZlcixlLnRpbGVCb3JkZXJJbmRleEJ1ZmZlcixlLmRlYnVnU2VnbWVudHMpO3ZhciBmPXIuZ2V0VGlsZUJ5SUQobi5rZXkpLmxhdGVzdFJhd1RpbGVEYXRhLGg9TWF0aC5mbG9vcigoZiYmZi5ieXRlTGVuZ3RofHwwKS8xMDI0KSxwPXIuZ2V0VGlsZShuKS50aWxlU2l6ZSxkPTUxMi9NYXRoLm1pbihwLDUxMikqKG4ub3ZlcnNjYWxlZFovZS50cmFuc2Zvcm0uem9vbSkqLjUsZz1uLmNhbm9uaWNhbC50b1N0cmluZygpO24ub3ZlcnNjYWxlZFohPT1uLmNhbm9uaWNhbC56JiYoZys9IiA9PiAiK24ub3ZlcnNjYWxlZFopLGZ1bmN0aW9uKHQsZSl7dC5pbml0RGVidWdPdmVybGF5Q2FudmFzKCk7dmFyIHI9dC5kZWJ1Z092ZXJsYXlDYW52YXMsbj10LmNvbnRleHQuZ2wsaT10LmRlYnVnT3ZlcmxheUNhbnZhcy5nZXRDb250ZXh0KCIyZCIpO2kuY2xlYXJSZWN0KDAsMCxyLndpZHRoLHIuaGVpZ2h0KSxpLnNoYWRvd0NvbG9yPSJ3aGl0ZSIsaS5zaGFkb3dCbHVyPTIsaS5saW5lV2lkdGg9MS41LGkuc3Ryb2tlU3R5bGU9IndoaXRlIixpLnRleHRCYXNlbGluZT0idG9wIixpLmZvbnQ9ImJvbGQgMzZweCBPcGVuIFNhbnMsIHNhbnMtc2VyaWYiLGkuZmlsbFRleHQoZSw1LDUpLGkuc3Ryb2tlVGV4dChlLDUsNSksdC5kZWJ1Z092ZXJsYXlUZXh0dXJlLnVwZGF0ZShyKSx0LmRlYnVnT3ZlcmxheVRleHR1cmUuYmluZChuLkxJTkVBUixuLkNMQU1QX1RPX0VER0UpfShlLGcrIiAiK2grImtiIikscy5kcmF3KGksYS5UUklBTkdMRVMsbCxjLFN0LmFscGhhQmxlbmRlZCxFdC5kaXNhYmxlZCxJcihvLHQuQ29sb3IudHJhbnNwYXJlbnQsZCksIiRkZWJ1ZyIsZS5kZWJ1Z0J1ZmZlcixlLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLGUuZGVidWdTZWdtZW50cyl9dmFyIHZuPXtzeW1ib2w6ZnVuY3Rpb24oZSxyLG4saSxhKXtpZigidHJhbnNsdWNlbnQiPT09ZS5yZW5kZXJQYXNzKXt2YXIgbz1BdC5kaXNhYmxlZCxzPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO24ubGF5b3V0LmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKSYmZnVuY3Rpb24oZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPXIudHJhbnNmb3JtLGM9Im1hcCI9PT1hLHU9Im1hcCI9PT1vLGY9MCxoPWU7ZjxoLmxlbmd0aDtmKz0xKXt2YXIgcD1oW2ZdLGQ9aS5nZXRUaWxlKHApLGc9ZC5nZXRCdWNrZXQobik7aWYoZyYmZy50ZXh0JiZnLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoKXt2YXIgbT10LmV2YWx1YXRlU2l6ZUZvclpvb20oZy50ZXh0U2l6ZURhdGEsbC56b29tKSx2PWhlKGQsMSxyLnRyYW5zZm9ybS56b29tKSx5PUt0KHAucG9zTWF0cml4LHUsYyxyLnRyYW5zZm9ybSx2KSx4PSJub25lIiE9PW4ubGF5b3V0LmdldCgiaWNvbi10ZXh0LWZpdCIpJiZnLmhhc0ljb25EYXRhKCk7aWYobSl7dmFyIGI9TWF0aC5wb3coMixsLnpvb20tZC50aWxlSUQub3ZlcnNjYWxlZFopO1FyKGcsYyx1LHMsdC5zeW1ib2xTaXplLGwseSxwLnBvc01hdHJpeCxiLG0seCl9fX19KGksZSxuLHIsbi5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLG4ubGF5b3V0LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSxhKSwwIT09bi5wYWludC5nZXQoImljb24tb3BhY2l0eSIpLmNvbnN0YW50T3IoMSkmJnRuKGUscixuLGksITEsbi5wYWludC5nZXQoImljb24tdHJhbnNsYXRlIiksbi5wYWludC5nZXQoImljb24tdHJhbnNsYXRlLWFuY2hvciIpLG4ubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSxuLmxheW91dC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50Iiksbi5sYXlvdXQuZ2V0KCJpY29uLWtlZXAtdXByaWdodCIpLG8scyksMCE9PW4ucGFpbnQuZ2V0KCJ0ZXh0LW9wYWNpdHkiKS5jb25zdGFudE9yKDEpJiZ0bihlLHIsbixpLCEwLG4ucGFpbnQuZ2V0KCJ0ZXh0LXRyYW5zbGF0ZSIpLG4ucGFpbnQuZ2V0KCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiKSxuLmxheW91dC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50Iiksbi5sYXlvdXQuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLG4ubGF5b3V0LmdldCgidGV4dC1rZWVwLXVwcmlnaHQiKSxvLHMpLHIubWFwLnNob3dDb2xsaXNpb25Cb3hlcyYmKFpyKGUscixuLGksbi5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlIiksbi5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlLWFuY2hvciIpLCEwKSxacihlLHIsbixpLG4ucGFpbnQuZ2V0KCJpY29uLXRyYW5zbGF0ZSIpLG4ucGFpbnQuZ2V0KCJpY29uLXRyYW5zbGF0ZS1hbmNob3IiKSwhMSkpfX0sY2lyY2xlOmZ1bmN0aW9uKGUscixuLGkpe2lmKCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3Mpe3ZhciBhPW4ucGFpbnQuZ2V0KCJjaXJjbGUtb3BhY2l0eSIpLG89bi5wYWludC5nZXQoImNpcmNsZS1zdHJva2Utd2lkdGgiKSxzPW4ucGFpbnQuZ2V0KCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiKSxsPXZvaWQgMCE9PW4ubGF5b3V0LmdldCgiY2lyY2xlLXNvcnQta2V5IikuY29uc3RhbnRPcigxKTtpZigwIT09YS5jb25zdGFudE9yKDEpfHwwIT09by5jb25zdGFudE9yKDEpJiYwIT09cy5jb25zdGFudE9yKDEpKXtmb3IodmFyIGM9ZS5jb250ZXh0LHU9Yy5nbCxmPWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxNdC5SZWFkT25seSksaD1BdC5kaXNhYmxlZCxwPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGQ9W10sZz0wO2c8aS5sZW5ndGg7ZysrKXt2YXIgbT1pW2ddLHY9ci5nZXRUaWxlKG0pLHk9di5nZXRCdWNrZXQobik7aWYoeSl7dmFyIHg9eS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KG4uaWQpLGI9e3Byb2dyYW1Db25maWd1cmF0aW9uOngscHJvZ3JhbTplLnVzZVByb2dyYW0oImNpcmNsZSIseCksbGF5b3V0VmVydGV4QnVmZmVyOnkubGF5b3V0VmVydGV4QnVmZmVyLGluZGV4QnVmZmVyOnkuaW5kZXhCdWZmZXIsdW5pZm9ybVZhbHVlczpFcihlLG0sdixuKX07aWYobClmb3IodmFyIF89MCx3PXkuc2VnbWVudHMuZ2V0KCk7Xzx3Lmxlbmd0aDtfKz0xKXt2YXIgVD13W19dO2QucHVzaCh7c2VnbWVudHM6bmV3IHQuU2VnbWVudFZlY3RvcihbVF0pLHNvcnRLZXk6VC5zb3J0S2V5LHN0YXRlOmJ9KX1lbHNlIGQucHVzaCh7c2VnbWVudHM6eS5zZWdtZW50cyxzb3J0S2V5OjAsc3RhdGU6Yn0pfX1sJiZkLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSk7Zm9yKHZhciBrPTAsTT1kO2s8TS5sZW5ndGg7ays9MSl7dmFyIEE9TVtrXSxTPUEuc3RhdGU7Uy5wcm9ncmFtLmRyYXcoYyx1LlRSSUFOR0xFUyxmLGgscCxFdC5kaXNhYmxlZCxTLnVuaWZvcm1WYWx1ZXMsbi5pZCxTLmxheW91dFZlcnRleEJ1ZmZlcixTLmluZGV4QnVmZmVyLEEuc2VnbWVudHMsbi5wYWludCxlLnRyYW5zZm9ybS56b29tLFMucHJvZ3JhbUNvbmZpZ3VyYXRpb24pfX19fSxoZWF0bWFwOmZ1bmN0aW9uKGUscixuLGkpe2lmKDAhPT1uLnBhaW50LmdldCgiaGVhdG1hcC1vcGFjaXR5IikpaWYoIm9mZnNjcmVlbiI9PT1lLnJlbmRlclBhc3Mpe3ZhciBhPWUuY29udGV4dCxvPWEuZ2wscz1BdC5kaXNhYmxlZCxsPW5ldyBTdChbby5PTkUsby5PTkVdLHQuQ29sb3IudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSk7IWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmdsO3QuYWN0aXZlVGV4dHVyZS5zZXQobi5URVhUVVJFMSksdC52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLzQsZS5oZWlnaHQvNF0pO3ZhciBpPXIuaGVhdG1hcEZibztpZihpKW4uYmluZFRleHR1cmUobi5URVhUVVJFXzJELGkuY29sb3JBdHRhY2htZW50LmdldCgpKSx0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoaS5mcmFtZWJ1ZmZlcik7ZWxzZXt2YXIgYT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxhKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Msbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Qsbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTElORUFSKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLG4uTElORUFSKSxpPXIuaGVhdG1hcEZibz10LmNyZWF0ZUZyYW1lYnVmZmVyKGUud2lkdGgvNCxlLmhlaWdodC80LCExKSxmdW5jdGlvbih0LGUscixuKXt2YXIgaT10LmdsO2kudGV4SW1hZ2UyRChpLlRFWFRVUkVfMkQsMCxpLlJHQkEsZS53aWR0aC80LGUuaGVpZ2h0LzQsMCxpLlJHQkEsdC5leHRSZW5kZXJUb1RleHR1cmVIYWxmRmxvYXQ/dC5leHRUZXh0dXJlSGFsZkZsb2F0LkhBTEZfRkxPQVRfT0VTOmkuVU5TSUdORURfQllURSxudWxsKSxuLmNvbG9yQXR0YWNobWVudC5zZXQocil9KHQsZSxhLGkpfX0oYSxlLG4pLGEuY2xlYXIoe2NvbG9yOnQuQ29sb3IudHJhbnNwYXJlbnR9KTtmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXTtpZighci5oYXNSZW5kZXJhYmxlUGFyZW50KHUpKXt2YXIgZj1yLmdldFRpbGUodSksaD1mLmdldEJ1Y2tldChuKTtpZihoKXt2YXIgcD1oLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobi5pZCk7ZS51c2VQcm9ncmFtKCJoZWF0bWFwIixwKS5kcmF3KGEsby5UUklBTkdMRVMsTXQuZGlzYWJsZWQscyxsLEV0LmRpc2FibGVkLHpyKHUucG9zTWF0cml4LGYsZS50cmFuc2Zvcm0uem9vbSxuLnBhaW50LmdldCgiaGVhdG1hcC1pbnRlbnNpdHkiKSksbi5pZCxoLmxheW91dFZlcnRleEJ1ZmZlcixoLmluZGV4QnVmZmVyLGguc2VnbWVudHMsbi5wYWludCxlLnRyYW5zZm9ybS56b29tLHApfX19YS52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLGUuaGVpZ2h0XSl9ZWxzZSJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3MmJihlLmNvbnRleHQuc2V0Q29sb3JNb2RlKGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxmdW5jdGlvbihlLHIpe3ZhciBuPWUuY29udGV4dCxpPW4uZ2wsYT1yLmhlYXRtYXBGYm87aWYoYSl7bi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSxpLmJpbmRUZXh0dXJlKGkuVEVYVFVSRV8yRCxhLmNvbG9yQXR0YWNobWVudC5nZXQoKSksbi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUxKTt2YXIgbz1yLmNvbG9yUmFtcFRleHR1cmU7b3x8KG89ci5jb2xvclJhbXBUZXh0dXJlPW5ldyB0LlRleHR1cmUobixyLmNvbG9yUmFtcCxpLlJHQkEpKSxvLmJpbmQoaS5MSU5FQVIsaS5DTEFNUF9UT19FREdFKSxlLnVzZVByb2dyYW0oImhlYXRtYXBUZXh0dXJlIikuZHJhdyhuLGkuVFJJQU5HTEVTLE10LmRpc2FibGVkLEF0LmRpc2FibGVkLGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLEV0LmRpc2FibGVkLGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuY3JlYXRlKCk7dC5vcnRobyhhLDAsZS53aWR0aCxlLmhlaWdodCwwLDAsMSk7dmFyIG89ZS5jb250ZXh0LmdsO3JldHVybnt1X21hdHJpeDphLHVfd29ybGQ6W28uZHJhd2luZ0J1ZmZlcldpZHRoLG8uZHJhd2luZ0J1ZmZlckhlaWdodF0sdV9pbWFnZTowLHVfY29sb3JfcmFtcDoxLHVfb3BhY2l0eTpyLnBhaW50LmdldCgiaGVhdG1hcC1vcGFjaXR5Iil9fShlLHIpLHIuaWQsZS52aWV3cG9ydEJ1ZmZlcixlLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLGUudmlld3BvcnRTZWdtZW50cyxyLnBhaW50LGUudHJhbnNmb3JtLnpvb20pfX0oZSxuKSl9LGxpbmU6ZnVuY3Rpb24oZSxyLG4saSl7aWYoInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyl7dmFyIGE9bi5wYWludC5nZXQoImxpbmUtb3BhY2l0eSIpLG89bi5wYWludC5nZXQoImxpbmUtd2lkdGgiKTtpZigwIT09YS5jb25zdGFudE9yKDEpJiYwIT09by5jb25zdGFudE9yKDEpKXt2YXIgcz1lLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsTXQuUmVhZE9ubHkpLGw9ZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksYz1uLnBhaW50LmdldCgibGluZS1kYXNoYXJyYXkiKSx1PW4ucGFpbnQuZ2V0KCJsaW5lLXBhdHRlcm4iKSxmPXUuY29uc3RhbnRPcigxKSxoPW4ucGFpbnQuZ2V0KCJsaW5lLWdyYWRpZW50IikscD1uLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKSxkPWY/ImxpbmVQYXR0ZXJuIjpjPyJsaW5lU0RGIjpoPyJsaW5lR3JhZGllbnQiOiJsaW5lIixnPWUuY29udGV4dCxtPWcuZ2wsdj0hMDtpZihoKXtnLmFjdGl2ZVRleHR1cmUuc2V0KG0uVEVYVFVSRTApO3ZhciB5PW4uZ3JhZGllbnRUZXh0dXJlO2lmKCFuLmdyYWRpZW50KXJldHVybjt5fHwoeT1uLmdyYWRpZW50VGV4dHVyZT1uZXcgdC5UZXh0dXJlKGcsbi5ncmFkaWVudCxtLlJHQkEpKSx5LmJpbmQobS5MSU5FQVIsbS5DTEFNUF9UT19FREdFKX1mb3IodmFyIHg9MCxiPWk7eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9ci5nZXRUaWxlKF8pO2lmKCFmfHx3LnBhdHRlcm5zTG9hZGVkKCkpe3ZhciBUPXcuZ2V0QnVja2V0KG4pO2lmKFQpe3ZhciBrPVQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxNPWUuY29udGV4dC5wcm9ncmFtLmdldCgpLEE9ZS51c2VQcm9ncmFtKGQsayksUz12fHxBLnByb2dyYW0hPT1NLEU9dS5jb25zdGFudE9yKG51bGwpO2lmKEUmJncuaW1hZ2VBdGxhcyl7dmFyIEM9dy5pbWFnZUF0bGFzLEw9Qy5wYXR0ZXJuUG9zaXRpb25zW0UudG8udG9TdHJpbmcoKV0sST1DLnBhdHRlcm5Qb3NpdGlvbnNbRS5mcm9tLnRvU3RyaW5nKCldO0wmJkkmJmsuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKEwsSSl9dmFyIFA9Zj9ScihlLHcsbixwKTpjP0ZyKGUsdyxuLGMscCk6aD9EcihlLHcsbik6T3IoZSx3LG4pO2Y/KGcuYWN0aXZlVGV4dHVyZS5zZXQobS5URVhUVVJFMCksdy5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKG0uTElORUFSLG0uQ0xBTVBfVE9fRURHRSksay51cGRhdGVQYWludEJ1ZmZlcnMocCkpOmMmJihTfHxlLmxpbmVBdGxhcy5kaXJ0eSkmJihnLmFjdGl2ZVRleHR1cmUuc2V0KG0uVEVYVFVSRTApLGUubGluZUF0bGFzLmJpbmQoZykpLEEuZHJhdyhnLG0uVFJJQU5HTEVTLHMsZS5zdGVuY2lsTW9kZUZvckNsaXBwaW5nKF8pLGwsRXQuZGlzYWJsZWQsUCxuLmlkLFQubGF5b3V0VmVydGV4QnVmZmVyLFQuaW5kZXhCdWZmZXIsVC5zZWdtZW50cyxuLnBhaW50LGUudHJhbnNmb3JtLnpvb20sayksdj0hMX19fX19fSxmaWxsOmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW4ucGFpbnQuZ2V0KCJmaWxsLWNvbG9yIiksbz1uLnBhaW50LmdldCgiZmlsbC1vcGFjaXR5Iik7aWYoMCE9PW8uY29uc3RhbnRPcigxKSl7dmFyIHM9ZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksbD1uLnBhaW50LmdldCgiZmlsbC1wYXR0ZXJuIiksYz1lLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSYmIWwuY29uc3RhbnRPcigxKSYmMT09PWEuY29uc3RhbnRPcih0LkNvbG9yLnRyYW5zcGFyZW50KS5hJiYxPT09by5jb25zdGFudE9yKDApPyJvcGFxdWUiOiJ0cmFuc2x1Y2VudCI7aWYoZS5yZW5kZXJQYXNzPT09Yyl7dmFyIHU9ZS5kZXB0aE1vZGVGb3JTdWJsYXllcigxLCJvcGFxdWUiPT09ZS5yZW5kZXJQYXNzP010LlJlYWRXcml0ZTpNdC5SZWFkT25seSk7cm4oZSxyLG4saSx1LHMsITEpfWlmKCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3MmJm4ucGFpbnQuZ2V0KCJmaWxsLWFudGlhbGlhcyIpKXt2YXIgZj1lLmRlcHRoTW9kZUZvclN1YmxheWVyKG4uZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik/MjowLE10LlJlYWRPbmx5KTtybihlLHIsbixpLGYscywhMCl9fX0sImZpbGwtZXh0cnVzaW9uIjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tb3BhY2l0eSIpO2lmKDAhPT1pJiYidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzKXt2YXIgYT1uZXcgTXQodC5jb250ZXh0LmdsLkxFUVVBTCxNdC5SZWFkV3JpdGUsdC5kZXB0aFJhbmdlRm9yM0QpO2lmKDEhPT1pfHxyLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tcGF0dGVybiIpLmNvbnN0YW50T3IoMSkpbm4odCxlLHIsbixhLEF0LmRpc2FibGVkLFN0LmRpc2FibGVkKSxubih0LGUscixuLGEsdC5zdGVuY2lsTW9kZUZvcjNEKCksdC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO2Vsc2V7dmFyIG89dC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7bm4odCxlLHIsbixhLEF0LmRpc2FibGVkLG8pfX19LGhpbGxzaGFkZTpmdW5jdGlvbih0LGUscixuKXtpZigib2Zmc2NyZWVuIj09PXQucmVuZGVyUGFzc3x8InRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyl7Zm9yKHZhciBpPXQuY29udGV4dCxhPWUuZ2V0U291cmNlKCkubWF4em9vbSxvPXQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxNdC5SZWFkT25seSkscz10LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxsPSJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3M/dC5zdGVuY2lsQ29uZmlnRm9yT3ZlcmxhcChuKTpbe30sbl0sYz1sWzBdLHU9MCxmPWxbMV07dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdLHA9ZS5nZXRUaWxlKGgpO3AubmVlZHNIaWxsc2hhZGVQcmVwYXJlJiYib2Zmc2NyZWVuIj09PXQucmVuZGVyUGFzcz9vbih0LHAscixhLG8sQXQuZGlzYWJsZWQscyk6InRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyYmYW4odCxwLHIsbyxjW2gub3ZlcnNjYWxlZFpdLHMpfWkudmlld3BvcnQuc2V0KFswLDAsdC53aWR0aCx0LmhlaWdodF0pfX0scmFzdGVyOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3MmJjAhPT1yLnBhaW50LmdldCgicmFzdGVyLW9wYWNpdHkiKSYmbi5sZW5ndGgpZm9yKHZhciBpPXQuY29udGV4dCxhPWkuZ2wsbz1lLmdldFNvdXJjZSgpLHM9dC51c2VQcm9ncmFtKCJyYXN0ZXIiKSxsPXQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGM9byBpbnN0YW5jZW9mIFA/W3t9LG5dOnQuc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXAobiksdT1jWzBdLGY9Y1sxXSxoPWZbZi5sZW5ndGgtMV0ub3ZlcnNjYWxlZFoscD0hdC5vcHRpb25zLm1vdmluZyxkPTAsZz1mO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIG09Z1tkXSx2PXQuZGVwdGhNb2RlRm9yU3VibGF5ZXIobS5vdmVyc2NhbGVkWi1oLDE9PT1yLnBhaW50LmdldCgicmFzdGVyLW9wYWNpdHkiKT9NdC5SZWFkV3JpdGU6TXQuUmVhZE9ubHksYS5MRVNTKSx5PWUuZ2V0VGlsZShtKSx4PXQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChtLnRvVW53cmFwcGVkKCkscCk7eS5yZWdpc3RlckZhZGVEdXJhdGlvbihyLnBhaW50LmdldCgicmFzdGVyLWZhZGUtZHVyYXRpb24iKSk7dmFyIGI9ZS5maW5kTG9hZGVkUGFyZW50KG0sMCksXz1zbih5LGIsZSxyLHQudHJhbnNmb3JtKSx3PXZvaWQgMCxUPXZvaWQgMCxrPSJuZWFyZXN0Ij09PXIucGFpbnQuZ2V0KCJyYXN0ZXItcmVzYW1wbGluZyIpP2EuTkVBUkVTVDphLkxJTkVBUjtpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApLHkudGV4dHVyZS5iaW5kKGssYS5DTEFNUF9UT19FREdFLGEuTElORUFSX01JUE1BUF9ORUFSRVNUKSxpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTEpLGI/KGIudGV4dHVyZS5iaW5kKGssYS5DTEFNUF9UT19FREdFLGEuTElORUFSX01JUE1BUF9ORUFSRVNUKSx3PU1hdGgucG93KDIsYi50aWxlSUQub3ZlcnNjYWxlZFoteS50aWxlSUQub3ZlcnNjYWxlZFopLFQ9W3kudGlsZUlELmNhbm9uaWNhbC54KnclMSx5LnRpbGVJRC5jYW5vbmljYWwueSp3JTFdKTp5LnRleHR1cmUuYmluZChrLGEuQ0xBTVBfVE9fRURHRSxhLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7dmFyIE09anIoeCxUfHxbMCwwXSx3fHwxLF8scik7byBpbnN0YW5jZW9mIFA/cy5kcmF3KGksYS5UUklBTkdMRVMsdixBdC5kaXNhYmxlZCxsLEV0LmRpc2FibGVkLE0sci5pZCxvLmJvdW5kc0J1ZmZlcix0LnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLG8uYm91bmRzU2VnbWVudHMpOnMuZHJhdyhpLGEuVFJJQU5HTEVTLHYsdVttLm92ZXJzY2FsZWRaXSxsLEV0LmRpc2FibGVkLE0sci5pZCx0LnJhc3RlckJvdW5kc0J1ZmZlcix0LnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLHQucmFzdGVyQm91bmRzU2VnbWVudHMpfX0sYmFja2dyb3VuZDpmdW5jdGlvbih0LGUscil7dmFyIG49ci5wYWludC5nZXQoImJhY2tncm91bmQtY29sb3IiKSxpPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLW9wYWNpdHkiKTtpZigwIT09aSl7dmFyIGE9dC5jb250ZXh0LG89YS5nbCxzPXQudHJhbnNmb3JtLGw9cy50aWxlU2l6ZSxjPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLXBhdHRlcm4iKTtpZighdC5pc1BhdHRlcm5NaXNzaW5nKGMpKXt2YXIgdT0hYyYmMT09PW4uYSYmMT09PWkmJnQub3BhcXVlUGFzc0VuYWJsZWRGb3JMYXllcigpPyJvcGFxdWUiOiJ0cmFuc2x1Y2VudCI7aWYodC5yZW5kZXJQYXNzPT09dSl7dmFyIGY9QXQuZGlzYWJsZWQsaD10LmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIm9wYXF1ZSI9PT11P010LlJlYWRXcml0ZTpNdC5SZWFkT25seSkscD10LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxkPXQudXNlUHJvZ3JhbShjPyJiYWNrZ3JvdW5kUGF0dGVybiI6ImJhY2tncm91bmQiKSxnPXMuY292ZXJpbmdUaWxlcyh7dGlsZVNpemU6bH0pO2MmJihhLmFjdGl2ZVRleHR1cmUuc2V0KG8uVEVYVFVSRTApLHQuaW1hZ2VNYW5hZ2VyLmJpbmQodC5jb250ZXh0KSk7Zm9yKHZhciBtPXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpLHY9MCx5PWc7djx5Lmxlbmd0aDt2Kz0xKXt2YXIgeD15W3ZdLGI9dC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHgudG9VbndyYXBwZWQoKSksXz1jP1dyKGIsaSx0LGMse3RpbGVJRDp4LHRpbGVTaXplOmx9LG0pOllyKGIsaSxuKTtkLmRyYXcoYSxvLlRSSUFOR0xFUyxoLGYscCxFdC5kaXNhYmxlZCxfLHIuaWQsdC50aWxlRXh0ZW50QnVmZmVyLHQucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsdC50aWxlRXh0ZW50U2VnbWVudHMpfX19fX0sZGVidWc6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKW1uKHQsZSxyW25dKX0sY3VzdG9tOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmNvbnRleHQsaT1yLmltcGxlbWVudGF0aW9uO2lmKCJvZmZzY3JlZW4iPT09dC5yZW5kZXJQYXNzKXt2YXIgYT1pLnByZXJlbmRlcjthJiYodC5zZXRDdXN0b21MYXllckRlZmF1bHRzKCksbi5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLGEuY2FsbChpLG4uZ2wsdC50cmFuc2Zvcm0uY3VzdG9tTGF5ZXJNYXRyaXgoKSksbi5zZXREaXJ0eSgpLHQuc2V0QmFzZVN0YXRlKCkpfWVsc2UgaWYoInRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyl7dC5zZXRDdXN0b21MYXllckRlZmF1bHRzKCksbi5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLG4uc2V0U3RlbmNpbE1vZGUoQXQuZGlzYWJsZWQpO3ZhciBvPSIzZCI9PT1pLnJlbmRlcmluZ01vZGU/bmV3IE10KHQuY29udGV4dC5nbC5MRVFVQUwsTXQuUmVhZFdyaXRlLHQuZGVwdGhSYW5nZUZvcjNEKTp0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAsTXQuUmVhZE9ubHkpO24uc2V0RGVwdGhNb2RlKG8pLGkucmVuZGVyKG4uZ2wsdC50cmFuc2Zvcm0uY3VzdG9tTGF5ZXJNYXRyaXgoKSksbi5zZXREaXJ0eSgpLHQuc2V0QmFzZVN0YXRlKCksbi5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpfX19LHluPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb250ZXh0PW5ldyBDdCh0KSx0aGlzLnRyYW5zZm9ybT1lLHRoaXMuX3RpbGVUZXh0dXJlcz17fSx0aGlzLnNldHVwKCksdGhpcy5udW1TdWJsYXllcnM9THQubWF4VW5kZXJ6b29taW5nK0x0Lm1heE92ZXJ6b29taW5nKzEsdGhpcy5kZXB0aEVwc2lsb249MS9NYXRoLnBvdygyLDE2KSx0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4PW5ldyBCZSx0aGlzLmdwdVRpbWVycz17fX07eW4ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlLHIpe2lmKHRoaXMud2lkdGg9ZSp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmhlaWdodD1yKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuY29udGV4dC52aWV3cG9ydC5zZXQoWzAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XSksdGhpcy5zdHlsZSlmb3IodmFyIG49MCxpPXRoaXMuc3R5bGUuX29yZGVyO248aS5sZW5ndGg7bis9MSl0aGlzLnN0eWxlLl9sYXllcnNbaVtuXV0ucmVzaXplKCl9LHluLnByb3RvdHlwZS5zZXR1cD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dCxyPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0Mmk0O3IuZW1wbGFjZUJhY2soMCwwKSxyLmVtcGxhY2VCYWNrKHQuRVhURU5ULDApLHIuZW1wbGFjZUJhY2soMCx0LkVYVEVOVCksci5lbXBsYWNlQmFjayh0LkVYVEVOVCx0LkVYVEVOVCksdGhpcy50aWxlRXh0ZW50QnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHIsSGUubWVtYmVycyksdGhpcy50aWxlRXh0ZW50U2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsMik7dmFyIG49bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQyaTQ7bi5lbXBsYWNlQmFjaygwLDApLG4uZW1wbGFjZUJhY2sodC5FWFRFTlQsMCksbi5lbXBsYWNlQmFjaygwLHQuRVhURU5UKSxuLmVtcGxhY2VCYWNrKHQuRVhURU5ULHQuRVhURU5UKSx0aGlzLmRlYnVnQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKG4sSGUubWVtYmVycyksdGhpcy5kZWJ1Z1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDUpO3ZhciBpPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0NGk4O2kuZW1wbGFjZUJhY2soMCwwLDAsMCksaS5lbXBsYWNlQmFjayh0LkVYVEVOVCwwLHQuRVhURU5ULDApLGkuZW1wbGFjZUJhY2soMCx0LkVYVEVOVCwwLHQuRVhURU5UKSxpLmVtcGxhY2VCYWNrKHQuRVhURU5ULHQuRVhURU5ULHQuRVhURU5ULHQuRVhURU5UKSx0aGlzLnJhc3RlckJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihpLEkubWVtYmVycyksdGhpcy5yYXN0ZXJCb3VuZHNTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKTt2YXIgYT1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDJpNDthLmVtcGxhY2VCYWNrKDAsMCksYS5lbXBsYWNlQmFjaygxLDApLGEuZW1wbGFjZUJhY2soMCwxKSxhLmVtcGxhY2VCYWNrKDEsMSksdGhpcy52aWV3cG9ydEJ1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihhLEhlLm1lbWJlcnMpLHRoaXMudmlld3BvcnRTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKTt2YXIgbz1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDF1aTI7by5lbXBsYWNlQmFjaygwKSxvLmVtcGxhY2VCYWNrKDEpLG8uZW1wbGFjZUJhY2soMyksby5lbXBsYWNlQmFjaygyKSxvLmVtcGxhY2VCYWNrKDApLHRoaXMudGlsZUJvcmRlckluZGV4QnVmZmVyPWUuY3JlYXRlSW5kZXhCdWZmZXIobyk7dmFyIHM9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQzdWk2O3MuZW1wbGFjZUJhY2soMCwxLDIpLHMuZW1wbGFjZUJhY2soMiwxLDMpLHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXI9ZS5jcmVhdGVJbmRleEJ1ZmZlcihzKSx0aGlzLmVtcHR5VGV4dHVyZT1uZXcgdC5UZXh0dXJlKGUse3dpZHRoOjEsaGVpZ2h0OjEsZGF0YTpuZXcgVWludDhBcnJheShbMCwwLDAsMF0pfSxlLmdsLlJHQkEpO3ZhciBsPXRoaXMuY29udGV4dC5nbDt0aGlzLnN0ZW5jaWxDbGVhck1vZGU9bmV3IEF0KHtmdW5jOmwuQUxXQVlTLG1hc2s6MH0sMCwyNTUsbC5aRVJPLGwuWkVSTyxsLlpFUk8pfSx5bi5wcm90b3R5cGUuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LHI9ZS5nbDt0aGlzLm5leHRTdGVuY2lsSUQ9MSx0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlPXZvaWQgMDt2YXIgbj10LmNyZWF0ZSgpO3Qub3J0aG8obiwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCwwLDEpLHQuc2NhbGUobixuLFtyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHQsMF0pLHRoaXMudXNlUHJvZ3JhbSgiY2xpcHBpbmdNYXNrIikuZHJhdyhlLHIuVFJJQU5HTEVTLE10LmRpc2FibGVkLHRoaXMuc3RlbmNpbENsZWFyTW9kZSxTdC5kaXNhYmxlZCxFdC5kaXNhYmxlZCxQcihuKSwiJGNsaXBwaW5nIix0aGlzLnZpZXdwb3J0QnVmZmVyLHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsdGhpcy52aWV3cG9ydFNlZ21lbnRzKX0seW4ucHJvdG90eXBlLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcz1mdW5jdGlvbih0LGUpe2lmKHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2UhPT10LnNvdXJjZSYmdC5pc1RpbGVDbGlwcGVkKCkmJmUmJmUubGVuZ3RoKXt0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlPXQuc291cmNlO3ZhciByPXRoaXMuY29udGV4dCxuPXIuZ2w7dGhpcy5uZXh0U3RlbmNpbElEK2UubGVuZ3RoPjI1NiYmdGhpcy5jbGVhclN0ZW5jaWwoKSxyLnNldENvbG9yTW9kZShTdC5kaXNhYmxlZCksci5zZXREZXB0aE1vZGUoTXQuZGlzYWJsZWQpO3ZhciBpPXRoaXMudXNlUHJvZ3JhbSgiY2xpcHBpbmdNYXNrIik7dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEcz17fTtmb3IodmFyIGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1tzLmtleV09dGhpcy5uZXh0U3RlbmNpbElEKys7aS5kcmF3KHIsbi5UUklBTkdMRVMsTXQuZGlzYWJsZWQsbmV3IEF0KHtmdW5jOm4uQUxXQVlTLG1hc2s6MH0sbCwyNTUsbi5LRUVQLG4uS0VFUCxuLlJFUExBQ0UpLFN0LmRpc2FibGVkLEV0LmRpc2FibGVkLFByKHMucG9zTWF0cml4KSwiJGNsaXBwaW5nIix0aGlzLnRpbGVFeHRlbnRCdWZmZXIsdGhpcy5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcix0aGlzLnRpbGVFeHRlbnRTZWdtZW50cyl9fX0seW4ucHJvdG90eXBlLnN0ZW5jaWxNb2RlRm9yM0Q9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlPXZvaWQgMCx0aGlzLm5leHRTdGVuY2lsSUQrMT4yNTYmJnRoaXMuY2xlYXJTdGVuY2lsKCk7dmFyIHQ9dGhpcy5uZXh0U3RlbmNpbElEKyssZT10aGlzLmNvbnRleHQuZ2w7cmV0dXJuIG5ldyBBdCh7ZnVuYzplLk5PVEVRVUFMLG1hc2s6MjU1fSx0LDI1NSxlLktFRVAsZS5LRUVQLGUuUkVQTEFDRSl9LHluLnByb3RvdHlwZS5zdGVuY2lsTW9kZUZvckNsaXBwaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gbmV3IEF0KHtmdW5jOmUuRVFVQUwsbWFzazoyNTV9LHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdC5rZXldLDAsZS5LRUVQLGUuS0VFUCxlLlJFUExBQ0UpfSx5bi5wcm90b3R5cGUuc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXA9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmNvbnRleHQuZ2wsbj10LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUub3ZlcnNjYWxlZFotdC5vdmVyc2NhbGVkWn0pKSxpPW5bbi5sZW5ndGgtMV0ub3ZlcnNjYWxlZFosYT1uWzBdLm92ZXJzY2FsZWRaLWkrMTtpZihhPjEpe3RoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2U9dm9pZCAwLHRoaXMubmV4dFN0ZW5jaWxJRCthPjI1NiYmdGhpcy5jbGVhclN0ZW5jaWwoKTtmb3IodmFyIG89e30scz0wO3M8YTtzKyspb1tzK2ldPW5ldyBBdCh7ZnVuYzpyLkdFUVVBTCxtYXNrOjI1NX0scyt0aGlzLm5leHRTdGVuY2lsSUQsMjU1LHIuS0VFUCxyLktFRVAsci5SRVBMQUNFKTtyZXR1cm4gdGhpcy5uZXh0U3RlbmNpbElEKz1hLFtvLG5dfXJldHVyblsoZT17fSxlW2ldPUF0LmRpc2FibGVkLGUpLG5dfSx5bi5wcm90b3R5cGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yP25ldyBTdChbZS5DT05TVEFOVF9DT0xPUixlLk9ORV0sbmV3IHQuQ29sb3IoMS84LDEvOCwxLzgsMCksWyEwLCEwLCEwLCEwXSk6Im9wYXF1ZSI9PT10aGlzLnJlbmRlclBhc3M/U3QudW5ibGVuZGVkOlN0LmFscGhhQmxlbmRlZH0seW4ucHJvdG90eXBlLmRlcHRoTW9kZUZvclN1YmxheWVyPWZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkpcmV0dXJuIE10LmRpc2FibGVkO3ZhciBuPTEtKCgxK3RoaXMuY3VycmVudExheWVyKSp0aGlzLm51bVN1YmxheWVycyt0KSp0aGlzLmRlcHRoRXBzaWxvbjtyZXR1cm4gbmV3IE10KHJ8fHRoaXMuY29udGV4dC5nbC5MRVFVQUwsZSxbbixuXSl9LHluLnByb3RvdHlwZS5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudExheWVyPHRoaXMub3BhcXVlUGFzc0N1dG9mZn0seW4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5zdHlsZT1lLHRoaXMub3B0aW9ucz1yLHRoaXMubGluZUF0bGFzPWUubGluZUF0bGFzLHRoaXMuaW1hZ2VNYW5hZ2VyPWUuaW1hZ2VNYW5hZ2VyLHRoaXMuZ2x5cGhNYW5hZ2VyPWUuZ2x5cGhNYW5hZ2VyLHRoaXMuc3ltYm9sRmFkZUNoYW5nZT1lLnBsYWNlbWVudC5zeW1ib2xGYWRlQ2hhbmdlKHQuYnJvd3Nlci5ub3coKSksdGhpcy5pbWFnZU1hbmFnZXIuYmVnaW5GcmFtZSgpO3ZhciBpPXRoaXMuc3R5bGUuX29yZGVyLGE9dGhpcy5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBvIGluIGEpe3ZhciBzPWFbb107cy51c2VkJiZzLnByZXBhcmUodGhpcy5jb250ZXh0KX12YXIgbCxjLHU9e30sZj17fSxoPXt9O2Zvcih2YXIgcCBpbiBhKXt2YXIgZD1hW3BdO3VbcF09ZC5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSxmW3BdPXVbcF0uc2xpY2UoKS5yZXZlcnNlKCksaFtwXT1kLmdldFZpc2libGVDb29yZGluYXRlcyghMCkucmV2ZXJzZSgpfXRoaXMub3BhcXVlUGFzc0N1dG9mZj0xLzA7Zm9yKHZhciBnPTA7ZzxpLmxlbmd0aDtnKyspaWYodGhpcy5zdHlsZS5fbGF5ZXJzW2lbZ11dLmlzM0QoKSl7dGhpcy5vcGFxdWVQYXNzQ3V0b2ZmPWc7YnJlYWt9dGhpcy5yZW5kZXJQYXNzPSJvZmZzY3JlZW4iO2Zvcih2YXIgbT0wLHY9aTttPHYubGVuZ3RoO20rPTEpe3ZhciB5PXRoaXMuc3R5bGUuX2xheWVyc1t2W21dXTtpZih5Lmhhc09mZnNjcmVlblBhc3MoKSYmIXkuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSkpe3ZhciB4PWZbeS5zb3VyY2VdOygiY3VzdG9tIj09PXkudHlwZXx8eC5sZW5ndGgpJiZ0aGlzLnJlbmRlckxheWVyKHRoaXMsYVt5LnNvdXJjZV0seSx4KX19Zm9yKHRoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpLHRoaXMuY29udGV4dC5jbGVhcih7Y29sb3I6ci5zaG93T3ZlcmRyYXdJbnNwZWN0b3I/dC5Db2xvci5ibGFjazp0LkNvbG9yLnRyYW5zcGFyZW50LGRlcHRoOjF9KSx0aGlzLmNsZWFyU3RlbmNpbCgpLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj1yLnNob3dPdmVyZHJhd0luc3BlY3Rvcix0aGlzLmRlcHRoUmFuZ2VGb3IzRD1bMCwxLShlLl9vcmRlci5sZW5ndGgrMikqdGhpcy5udW1TdWJsYXllcnMqdGhpcy5kZXB0aEVwc2lsb25dLHRoaXMucmVuZGVyUGFzcz0ib3BhcXVlIix0aGlzLmN1cnJlbnRMYXllcj1pLmxlbmd0aC0xO3RoaXMuY3VycmVudExheWVyPj0wO3RoaXMuY3VycmVudExheWVyLS0pe3ZhciBiPXRoaXMuc3R5bGUuX2xheWVyc1tpW3RoaXMuY3VycmVudExheWVyXV0sXz1hW2Iuc291cmNlXSx3PXVbYi5zb3VyY2VdO3RoaXMuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKGIsdyksdGhpcy5yZW5kZXJMYXllcih0aGlzLF8sYix3KX1mb3IodGhpcy5yZW5kZXJQYXNzPSJ0cmFuc2x1Y2VudCIsdGhpcy5jdXJyZW50TGF5ZXI9MDt0aGlzLmN1cnJlbnRMYXllcjxpLmxlbmd0aDt0aGlzLmN1cnJlbnRMYXllcisrKXt2YXIgVD10aGlzLnN0eWxlLl9sYXllcnNbaVt0aGlzLmN1cnJlbnRMYXllcl1dLGs9YVtULnNvdXJjZV0sTT0oInN5bWJvbCI9PT1ULnR5cGU/aDpmKVtULnNvdXJjZV07dGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MoVCx1W1Quc291cmNlXSksdGhpcy5yZW5kZXJMYXllcih0aGlzLGssVCxNKX10aGlzLm9wdGlvbnMuc2hvd1RpbGVCb3VuZGFyaWVzJiYodC52YWx1ZXModGhpcy5zdHlsZS5fbGF5ZXJzKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNvdXJjZSYmIXQuaXNIaWRkZW4obi50cmFuc2Zvcm0uem9vbSkmJih0LnNvdXJjZSE9PShjJiZjLmlkKSYmKGM9bi5zdHlsZS5zb3VyY2VDYWNoZXNbdC5zb3VyY2VdKSwoIWx8fGwuZ2V0U291cmNlKCkubWF4em9vbTxjLmdldFNvdXJjZSgpLm1heHpvb20pJiYobD1jKSl9KSksbCYmdm4uZGVidWcodGhpcyxsLGwuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpKSx0aGlzLm9wdGlvbnMuc2hvd1BhZGRpbmcmJmZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhbnNmb3JtLnBhZGRpbmc7cG4odCx0LnRyYW5zZm9ybS5oZWlnaHQtKGUudG9wfHwwKSwzLGxuKSxwbih0LGUuYm90dG9tfHwwLDMsY24pLGRuKHQsZS5sZWZ0fHwwLDMsdW4pLGRuKHQsdC50cmFuc2Zvcm0ud2lkdGgtKGUucmlnaHR8fDApLDMsZm4pO3ZhciByPXQudHJhbnNmb3JtLmNlbnRlclBvaW50OyFmdW5jdGlvbih0LGUscixuKXtnbih0LGUtMSxyLTEwLDIsMjAsbiksZ24odCxlLTEwLHItMSwyMCwyLG4pfSh0LHIueCx0LnRyYW5zZm9ybS5oZWlnaHQtci55LGhuKX0odGhpcyksdGhpcy5jb250ZXh0LnNldERlZmF1bHQoKX0seW4ucHJvdG90eXBlLnJlbmRlckxheWVyPWZ1bmN0aW9uKHQsZSxyLG4pe3IuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSl8fCgiYmFja2dyb3VuZCI9PT1yLnR5cGV8fCJjdXN0b20iPT09ci50eXBlfHxuLmxlbmd0aCkmJih0aGlzLmlkPXIuaWQsdGhpcy5ncHVUaW1pbmdTdGFydChyKSx2bltyLnR5cGVdKHQsZSxyLG4sdGhpcy5zdHlsZS5wbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzKSx0aGlzLmdwdVRpbWluZ0VuZCgpKX0seW4ucHJvdG90eXBlLmdwdVRpbWluZ1N0YXJ0PWZ1bmN0aW9uKHQpe2lmKHRoaXMub3B0aW9ucy5ncHVUaW1pbmcpe3ZhciBlPXRoaXMuY29udGV4dC5leHRUaW1lclF1ZXJ5LHI9dGhpcy5ncHVUaW1lcnNbdC5pZF07cnx8KHI9dGhpcy5ncHVUaW1lcnNbdC5pZF09e2NhbGxzOjAsY3B1VGltZTowLHF1ZXJ5OmUuY3JlYXRlUXVlcnlFWFQoKX0pLHIuY2FsbHMrKyxlLmJlZ2luUXVlcnlFWFQoZS5USU1FX0VMQVBTRURfRVhULHIucXVlcnkpfX0seW4ucHJvdG90eXBlLmdwdVRpbWluZ0VuZD1mdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5ncHVUaW1pbmcpe3ZhciB0PXRoaXMuY29udGV4dC5leHRUaW1lclF1ZXJ5O3QuZW5kUXVlcnlFWFQodC5USU1FX0VMQVBTRURfRVhUKX19LHluLnByb3RvdHlwZS5jb2xsZWN0R3B1VGltZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncHVUaW1lcnM7cmV0dXJuIHRoaXMuZ3B1VGltZXJzPXt9LHR9LHluLnByb3RvdHlwZS5xdWVyeUdwdVRpbWVycz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCl7dmFyIG49dFtyXSxpPXRoaXMuY29udGV4dC5leHRUaW1lclF1ZXJ5LGE9aS5nZXRRdWVyeU9iamVjdEVYVChuLnF1ZXJ5LGkuUVVFUllfUkVTVUxUX0VYVCkvMWU2O2kuZGVsZXRlUXVlcnlFWFQobi5xdWVyeSksZVtyXT1hfXJldHVybiBlfSx5bi5wcm90b3R5cGUudHJhbnNsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscixuLGksYSl7aWYoIW5bMF0mJiFuWzFdKXJldHVybiBlO3ZhciBvPWE/Im1hcCI9PT1pP3RoaXMudHJhbnNmb3JtLmFuZ2xlOjA6InZpZXdwb3J0Ij09PWk/LXRoaXMudHJhbnNmb3JtLmFuZ2xlOjA7aWYobyl7dmFyIHM9TWF0aC5zaW4obyksbD1NYXRoLmNvcyhvKTtuPVtuWzBdKmwtblsxXSpzLG5bMF0qcytuWzFdKmxdfXZhciBjPVthP25bMF06aGUocixuWzBdLHRoaXMudHJhbnNmb3JtLnpvb20pLGE/blsxXTpoZShyLG5bMV0sdGhpcy50cmFuc2Zvcm0uem9vbSksMF0sdT1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdC50cmFuc2xhdGUodSxlLGMpLHV9LHluLnByb3RvdHlwZS5zYXZlVGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV07ZT9lLnB1c2godCk6dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV09W3RdfSx5bi5wcm90b3R5cGUuZ2V0VGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3RdO3JldHVybiBlJiZlLmxlbmd0aD4wP2UucG9wKCk6bnVsbH0seW4ucHJvdG90eXBlLmlzUGF0dGVybk1pc3Npbmc9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7aWYoIXQuZnJvbXx8IXQudG8pcmV0dXJuITA7dmFyIGU9dGhpcy5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20udG9TdHJpbmcoKSkscj10aGlzLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQudG8udG9TdHJpbmcoKSk7cmV0dXJuIWV8fCFyfSx5bi5wcm90b3R5cGUudXNlUHJvZ3JhbT1mdW5jdGlvbih0LGUpe3RoaXMuY2FjaGU9dGhpcy5jYWNoZXx8e307dmFyIHI9IiIrdCsoZT9lLmNhY2hlS2V5OiIiKSsodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yPyIvb3ZlcmRyYXciOiIiKTtyZXR1cm4gdGhpcy5jYWNoZVtyXXx8KHRoaXMuY2FjaGVbcl09bmV3IGJyKHRoaXMuY29udGV4dCx5clt0XSxlLFhyW3RdLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvcikpLHRoaXMuY2FjaGVbcl19LHluLnByb3RvdHlwZS5zZXRDdXN0b21MYXllckRlZmF1bHRzPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LnVuYmluZFZBTygpLHRoaXMuY29udGV4dC5jdWxsRmFjZS5zZXREZWZhdWx0KCksdGhpcy5jb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0RGVmYXVsdCgpLHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKSx0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0RGVmYXVsdCgpLHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0RGVmYXVsdCgpfSx5bi5wcm90b3R5cGUuc2V0QmFzZVN0YXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsO3RoaXMuY29udGV4dC5jdWxsRmFjZS5zZXQoITEpLHRoaXMuY29udGV4dC52aWV3cG9ydC5zZXQoWzAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XSksdGhpcy5jb250ZXh0LmJsZW5kRXF1YXRpb24uc2V0KHQuRlVOQ19BREQpfSx5bi5wcm90b3R5cGUuaW5pdERlYnVnT3ZlcmxheUNhbnZhcz1mdW5jdGlvbigpe251bGw9PXRoaXMuZGVidWdPdmVybGF5Q2FudmFzJiYodGhpcy5kZWJ1Z092ZXJsYXlDYW52YXM9dC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5kZWJ1Z092ZXJsYXlDYW52YXMud2lkdGg9NTEyLHRoaXMuZGVidWdPdmVybGF5Q2FudmFzLmhlaWdodD01MTIsdGhpcy5kZWJ1Z092ZXJsYXlUZXh0dXJlPW5ldyB0LlRleHR1cmUodGhpcy5jb250ZXh0LHRoaXMuZGVidWdPdmVybGF5Q2FudmFzLHRoaXMuY29udGV4dC5nbC5SR0JBKSl9LHluLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5lbXB0eVRleHR1cmUuZGVzdHJveSgpLHRoaXMuZGVidWdPdmVybGF5VGV4dHVyZSYmdGhpcy5kZWJ1Z092ZXJsYXlUZXh0dXJlLmRlc3Ryb3koKX07dmFyIHhuPWZ1bmN0aW9uKHQsZSl7dGhpcy5wb2ludHM9dCx0aGlzLnBsYW5lcz1lfTt4bi5mcm9tSW52UHJvamVjdGlvbk1hdHJpeD1mdW5jdGlvbihlLHIsbil7dmFyIGk9TWF0aC5wb3coMixuKSxhPVtbLTEsMSwtMSwxXSxbMSwxLC0xLDFdLFsxLC0xLC0xLDFdLFstMSwtMSwtMSwxXSxbLTEsMSwxLDFdLFsxLDEsMSwxXSxbMSwtMSwxLDFdLFstMSwtMSwxLDFdXS5tYXAoKGZ1bmN0aW9uKHIpe3JldHVybiB0LnRyYW5zZm9ybU1hdDQoW10scixlKX0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjYWxlJDEoW10sZSwxL2VbM10vcippKX0pKSxvPVtbMCwxLDJdLFs2LDUsNF0sWzAsMyw3XSxbMiwxLDVdLFszLDIsNl0sWzAsNCw1XV0ubWFwKChmdW5jdGlvbihlKXt2YXIgcj10LnN1YihbXSxhW2VbMF1dLGFbZVsxXV0pLG49dC5zdWIoW10sYVtlWzJdXSxhW2VbMV1dKSxpPXQubm9ybWFsaXplKFtdLHQuY3Jvc3MoW10scixuKSksbz0tdC5kb3QoaSxhW2VbMV1dKTtyZXR1cm4gaS5jb25jYXQobyl9KSk7cmV0dXJuIG5ldyB4bihhLG8pfTt2YXIgYm49ZnVuY3Rpb24oZSxyKXt0aGlzLm1pbj1lLHRoaXMubWF4PXIsdGhpcy5jZW50ZXI9dC5zY2FsZSQyKFtdLHQuYWRkKFtdLHRoaXMubWluLHRoaXMubWF4KSwuNSl9O2JuLnByb3RvdHlwZS5xdWFkcmFudD1mdW5jdGlvbihlKXtmb3IodmFyIHI9W2UlMj09MCxlPDJdLG49dC5jbG9uZSQyKHRoaXMubWluKSxpPXQuY2xvbmUkMih0aGlzLm1heCksYT0wO2E8ci5sZW5ndGg7YSsrKW5bYV09clthXT90aGlzLm1pblthXTp0aGlzLmNlbnRlclthXSxpW2FdPXJbYV0/dGhpcy5jZW50ZXJbYV06dGhpcy5tYXhbYV07cmV0dXJuIGlbMl09dGhpcy5tYXhbMl0sbmV3IGJuKG4saSl9LGJuLnByb3RvdHlwZS5kaXN0YW5jZVg9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHRoaXMubWF4WzBdLHRbMF0pLHRoaXMubWluWzBdKS10WzBdfSxibi5wcm90b3R5cGUuZGlzdGFuY2VZPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heFsxXSx0WzFdKSx0aGlzLm1pblsxXSktdFsxXX0sYm4ucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPVtbdGhpcy5taW5bMF0sdGhpcy5taW5bMV0sMCwxXSxbdGhpcy5tYXhbMF0sdGhpcy5taW5bMV0sMCwxXSxbdGhpcy5tYXhbMF0sdGhpcy5tYXhbMV0sMCwxXSxbdGhpcy5taW5bMF0sdGhpcy5tYXhbMV0sMCwxXV0sbj0hMCxpPTA7aTxlLnBsYW5lcy5sZW5ndGg7aSsrKXtmb3IodmFyIGE9ZS5wbGFuZXNbaV0sbz0wLHM9MDtzPHIubGVuZ3RoO3MrKylvKz10LmRvdCQxKGEscltzXSk+PTA7aWYoMD09PW8pcmV0dXJuIDA7byE9PXIubGVuZ3RoJiYobj0hMSl9aWYobilyZXR1cm4gMjtmb3IodmFyIGw9MDtsPDM7bCsrKXtmb3IodmFyIGM9TnVtYmVyLk1BWF9WQUxVRSx1PS1OdW1iZXIuTUFYX1ZBTFVFLGY9MDtmPGUucG9pbnRzLmxlbmd0aDtmKyspe3ZhciBoPWUucG9pbnRzW2ZdW2xdLXRoaXMubWluW2xdO2M9TWF0aC5taW4oYyxoKSx1PU1hdGgubWF4KHUsaCl9aWYodTwwfHxjPnRoaXMubWF4W2xdLXRoaXMubWluW2xdKXJldHVybiAwfXJldHVybiAxfTt2YXIgX249ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09ciYmKHI9MCksdm9pZCAwPT09biYmKG49MCksaXNOYU4odCl8fHQ8MHx8aXNOYU4oZSl8fGU8MHx8aXNOYU4ocil8fHI8MHx8aXNOYU4obil8fG48MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWUgZm9yIGVkZ2UtaW5zZXRzLCB0b3AsIGJvdHRvbSwgbGVmdCBhbmQgcmlnaHQgbXVzdCBhbGwgYmUgbnVtYmVycyIpO3RoaXMudG9wPXQsdGhpcy5ib3R0b209ZSx0aGlzLmxlZnQ9cix0aGlzLnJpZ2h0PW59O19uLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIG51bGwhPXIudG9wJiZudWxsIT1lLnRvcCYmKHRoaXMudG9wPXQubnVtYmVyKGUudG9wLHIudG9wLG4pKSxudWxsIT1yLmJvdHRvbSYmbnVsbCE9ZS5ib3R0b20mJih0aGlzLmJvdHRvbT10Lm51bWJlcihlLmJvdHRvbSxyLmJvdHRvbSxuKSksbnVsbCE9ci5sZWZ0JiZudWxsIT1lLmxlZnQmJih0aGlzLmxlZnQ9dC5udW1iZXIoZS5sZWZ0LHIubGVmdCxuKSksbnVsbCE9ci5yaWdodCYmbnVsbCE9ZS5yaWdodCYmKHRoaXMucmlnaHQ9dC5udW1iZXIoZS5yaWdodCxyLnJpZ2h0LG4pKSx0aGlzfSxfbi5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKGUscil7dmFyIG49dC5jbGFtcCgodGhpcy5sZWZ0K2UtdGhpcy5yaWdodCkvMiwwLGUpLGk9dC5jbGFtcCgodGhpcy50b3Arci10aGlzLmJvdHRvbSkvMiwwLHIpO3JldHVybiBuZXcgdC5Qb2ludChuLGkpfSxfbi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRvcD09PXQudG9wJiZ0aGlzLmJvdHRvbT09PXQuYm90dG9tJiZ0aGlzLmxlZnQ9PT10LmxlZnQmJnRoaXMucmlnaHQ9PT10LnJpZ2h0fSxfbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMudG9wLHRoaXMuYm90dG9tLHRoaXMubGVmdCx0aGlzLnJpZ2h0KX0sX24ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0b3A6dGhpcy50b3AsYm90dG9tOnRoaXMuYm90dG9tLGxlZnQ6dGhpcy5sZWZ0LHJpZ2h0OnRoaXMucmlnaHR9fTt2YXIgd249ZnVuY3Rpb24oZSxyLG4saSxhKXt0aGlzLnRpbGVTaXplPTUxMix0aGlzLm1heFZhbGlkTGF0aXR1ZGU9ODUuMDUxMTI5LHRoaXMuX3JlbmRlcldvcmxkQ29waWVzPXZvaWQgMD09PWF8fGEsdGhpcy5fbWluWm9vbT1lfHwwLHRoaXMuX21heFpvb209cnx8MjIsdGhpcy5fbWluUGl0Y2g9bnVsbD09bj8wOm4sdGhpcy5fbWF4UGl0Y2g9bnVsbD09aT82MDppLHRoaXMuc2V0TWF4Qm91bmRzKCksdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsdGhpcy5fY2VudGVyPW5ldyB0LkxuZ0xhdCgwLDApLHRoaXMuem9vbT0wLHRoaXMuYW5nbGU9MCx0aGlzLl9mb3Y9LjY0MzUwMTEwODc5MzI4NDQsdGhpcy5fcGl0Y2g9MCx0aGlzLl91bm1vZGlmaWVkPSEwLHRoaXMuX2VkZ2VJbnNldHM9bmV3IF9uLHRoaXMuX3Bvc01hdHJpeENhY2hlPXt9LHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZT17fX0sVG49e21pblpvb206e2NvbmZpZ3VyYWJsZTohMH0sbWF4Wm9vbTp7Y29uZmlndXJhYmxlOiEwfSxtaW5QaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxtYXhQaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxyZW5kZXJXb3JsZENvcGllczp7Y29uZmlndXJhYmxlOiEwfSx3b3JsZFNpemU6e2NvbmZpZ3VyYWJsZTohMH0sY2VudGVyT2Zmc2V0Ontjb25maWd1cmFibGU6ITB9LHNpemU6e2NvbmZpZ3VyYWJsZTohMH0sYmVhcmluZzp7Y29uZmlndXJhYmxlOiEwfSxwaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxmb3Y6e2NvbmZpZ3VyYWJsZTohMH0sem9vbTp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXI6e2NvbmZpZ3VyYWJsZTohMH0scGFkZGluZzp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXJQb2ludDp7Y29uZmlndXJhYmxlOiEwfSx1bm1vZGlmaWVkOntjb25maWd1cmFibGU6ITB9LHBvaW50Ontjb25maWd1cmFibGU6ITB9fTt3bi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgd24odGhpcy5fbWluWm9vbSx0aGlzLl9tYXhab29tLHRoaXMuX21pblBpdGNoLHRoaXMubWF4UGl0Y2gsdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpO3JldHVybiB0LnRpbGVTaXplPXRoaXMudGlsZVNpemUsdC5sYXRSYW5nZT10aGlzLmxhdFJhbmdlLHQud2lkdGg9dGhpcy53aWR0aCx0LmhlaWdodD10aGlzLmhlaWdodCx0Ll9jZW50ZXI9dGhpcy5fY2VudGVyLHQuem9vbT10aGlzLnpvb20sdC5hbmdsZT10aGlzLmFuZ2xlLHQuX2Zvdj10aGlzLl9mb3YsdC5fcGl0Y2g9dGhpcy5fcGl0Y2gsdC5fdW5tb2RpZmllZD10aGlzLl91bm1vZGlmaWVkLHQuX2VkZ2VJbnNldHM9dGhpcy5fZWRnZUluc2V0cy5jbG9uZSgpLHQuX2NhbGNNYXRyaWNlcygpLHR9LFRuLm1pblpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pblpvb219LFRuLm1pblpvb20uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21pblpvb20hPT10JiYodGhpcy5fbWluWm9vbT10LHRoaXMuem9vbT1NYXRoLm1heCh0aGlzLnpvb20sdCkpfSxUbi5tYXhab29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhab29tfSxUbi5tYXhab29tLnNldD1mdW5jdGlvbih0KXt0aGlzLl9tYXhab29tIT09dCYmKHRoaXMuX21heFpvb209dCx0aGlzLnpvb209TWF0aC5taW4odGhpcy56b29tLHQpKX0sVG4ubWluUGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pblBpdGNofSxUbi5taW5QaXRjaC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWluUGl0Y2ghPT10JiYodGhpcy5fbWluUGl0Y2g9dCx0aGlzLnBpdGNoPU1hdGgubWF4KHRoaXMucGl0Y2gsdCkpfSxUbi5tYXhQaXRjaC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4UGl0Y2h9LFRuLm1heFBpdGNoLnNldD1mdW5jdGlvbih0KXt0aGlzLl9tYXhQaXRjaCE9PXQmJih0aGlzLl9tYXhQaXRjaD10LHRoaXMucGl0Y2g9TWF0aC5taW4odGhpcy5waXRjaCx0KSl9LFRuLnJlbmRlcldvcmxkQ29waWVzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJXb3JsZENvcGllc30sVG4ucmVuZGVyV29ybGRDb3BpZXMuc2V0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQ/dD0hMDpudWxsPT09dCYmKHQ9ITEpLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzPXR9LFRuLndvcmxkU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aWxlU2l6ZSp0aGlzLnNjYWxlfSxUbi5jZW50ZXJPZmZzZXQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2VudGVyUG9pbnQuX3N1Yih0aGlzLnNpemUuX2RpdigyKSl9LFRuLnNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0LlBvaW50KHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxUbi5iZWFyaW5nLmdldD1mdW5jdGlvbigpe3JldHVybi10aGlzLmFuZ2xlL01hdGguUEkqMTgwfSxUbi5iZWFyaW5nLnNldD1mdW5jdGlvbihlKXt2YXIgcj0tdC53cmFwKGUsLTE4MCwxODApKk1hdGguUEkvMTgwO3RoaXMuYW5nbGUhPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLmFuZ2xlPXIsdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5yb3RhdGlvbk1hdHJpeD10LmNyZWF0ZSQyKCksdC5yb3RhdGUodGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLnJvdGF0aW9uTWF0cml4LHRoaXMuYW5nbGUpKX0sVG4ucGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BpdGNoL01hdGguUEkqMTgwfSxUbi5waXRjaC5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9dC5jbGFtcChlLHRoaXMubWluUGl0Y2gsdGhpcy5tYXhQaXRjaCkvMTgwKk1hdGguUEk7dGhpcy5fcGl0Y2ghPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9waXRjaD1yLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sVG4uZm92LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3YvTWF0aC5QSSoxODB9LFRuLmZvdi5zZXQ9ZnVuY3Rpb24odCl7dD1NYXRoLm1heCguMDEsTWF0aC5taW4oNjAsdCkpLHRoaXMuX2ZvdiE9PXQmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2Zvdj10LzE4MCpNYXRoLlBJLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sVG4uem9vbS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9vbX0sVG4uem9vbS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5taW4oTWF0aC5tYXgodCx0aGlzLm1pblpvb20pLHRoaXMubWF4Wm9vbSk7dGhpcy5fem9vbSE9PWUmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX3pvb209ZSx0aGlzLnNjYWxlPXRoaXMuem9vbVNjYWxlKGUpLHRoaXMudGlsZVpvb209TWF0aC5mbG9vcihlKSx0aGlzLnpvb21GcmFjdGlvbj1lLXRoaXMudGlsZVpvb20sdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxUbi5jZW50ZXIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NlbnRlcn0sVG4uY2VudGVyLnNldD1mdW5jdGlvbih0KXt0LmxhdD09PXRoaXMuX2NlbnRlci5sYXQmJnQubG5nPT09dGhpcy5fY2VudGVyLmxuZ3x8KHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fY2VudGVyPXQsdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxUbi5wYWRkaW5nLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lZGdlSW5zZXRzLnRvSlNPTigpfSxUbi5wYWRkaW5nLnNldD1mdW5jdGlvbih0KXt0aGlzLl9lZGdlSW5zZXRzLmVxdWFscyh0KXx8KHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fZWRnZUluc2V0cy5pbnRlcnBvbGF0ZSh0aGlzLl9lZGdlSW5zZXRzLHQsMSksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxUbi5jZW50ZXJQb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUluc2V0cy5nZXRDZW50ZXIodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9LHduLnByb3RvdHlwZS5pc1BhZGRpbmdFcXVhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZWRnZUluc2V0cy5lcXVhbHModCl9LHduLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVBhZGRpbmc9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fZWRnZUluc2V0cy5pbnRlcnBvbGF0ZSh0LGUsciksdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCl9LHduLnByb3RvdHlwZS5jb3ZlcmluZ1pvb21MZXZlbD1mdW5jdGlvbih0KXt2YXIgZT0odC5yb3VuZFpvb20/TWF0aC5yb3VuZDpNYXRoLmZsb29yKSh0aGlzLnpvb20rdGhpcy5zY2FsZVpvb20odGhpcy50aWxlU2l6ZS90LnRpbGVTaXplKSk7cmV0dXJuIE1hdGgubWF4KDAsZSl9LHduLnByb3RvdHlwZS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSl7dmFyIHI9W25ldyB0LlVud3JhcHBlZFRpbGVJRCgwLGUpXTtpZih0aGlzLl9yZW5kZXJXb3JsZENvcGllcylmb3IodmFyIG49dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuUG9pbnQoMCwwKSksaT10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCh0aGlzLndpZHRoLDApKSxhPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSxvPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KDAsdGhpcy5oZWlnaHQpKSxzPU1hdGguZmxvb3IoTWF0aC5taW4obi54LGkueCxhLngsby54KSksbD1NYXRoLmZsb29yKE1hdGgubWF4KG4ueCxpLngsYS54LG8ueCkpLGM9cy0xO2M8PWwrMTtjKyspMCE9PWMmJnIucHVzaChuZXcgdC5VbndyYXBwZWRUaWxlSUQoYyxlKSk7cmV0dXJuIHJ9LHduLnByb3RvdHlwZS5jb3ZlcmluZ1RpbGVzPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY292ZXJpbmdab29tTGV2ZWwoZSksbj1yO2lmKHZvaWQgMCE9PWUubWluem9vbSYmcjxlLm1pbnpvb20pcmV0dXJuW107dm9pZCAwIT09ZS5tYXh6b29tJiZyPmUubWF4em9vbSYmKHI9ZS5tYXh6b29tKTt2YXIgaT10Lk1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KHRoaXMuY2VudGVyKSxhPU1hdGgucG93KDIsciksbz1bYSppLngsYSppLnksMF0scz14bi5mcm9tSW52UHJvamVjdGlvbk1hdHJpeCh0aGlzLmludlByb2pNYXRyaXgsdGhpcy53b3JsZFNpemUsciksbD1lLm1pbnpvb218fDA7dGhpcy5waXRjaDw9NjAmJnRoaXMuX2VkZ2VJbnNldHMudG9wPC4xJiYobD1yKTt2YXIgYz1mdW5jdGlvbih0KXtyZXR1cm57YWFiYjpuZXcgYm4oW3QqYSwwLDBdLFsodCsxKSphLGEsMF0pLHpvb206MCx4OjAseTowLHdyYXA6dCxmdWxseVZpc2libGU6ITF9fSx1PVtdLGY9W10saD1yLHA9ZS5yZXBhcnNlT3ZlcnNjYWxlZD9uOnI7aWYodGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpZm9yKHZhciBkPTE7ZDw9MztkKyspdS5wdXNoKGMoLWQpKSx1LnB1c2goYyhkKSk7Zm9yKHUucHVzaChjKDApKTt1Lmxlbmd0aD4wOyl7dmFyIGc9dS5wb3AoKSxtPWcueCx2PWcueSx5PWcuZnVsbHlWaXNpYmxlO2lmKCF5KXt2YXIgeD1nLmFhYmIuaW50ZXJzZWN0cyhzKTtpZigwPT09eCljb250aW51ZTt5PTI9PT14fXZhciBiPWcuYWFiYi5kaXN0YW5jZVgobyksXz1nLmFhYmIuZGlzdGFuY2VZKG8pLHc9TWF0aC5tYXgoTWF0aC5hYnMoYiksTWF0aC5hYnMoXykpO2lmKGcuem9vbT09PWh8fHc+MysoMTw8aC1nLnpvb20pLTImJmcuem9vbT49bClmLnB1c2goe3RpbGVJRDpuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGcuem9vbT09PWg/cDpnLnpvb20sZy53cmFwLGcuem9vbSxtLHYpLGRpc3RhbmNlU3E6dC5zcXJMZW4oW29bMF0tLjUtbSxvWzFdLS41LXZdKX0pO2Vsc2UgZm9yKHZhciBUPTA7VDw0O1QrKyl7dmFyIGs9KG08PDEpK1QlMixNPSh2PDwxKSsoVD4+MSk7dS5wdXNoKHthYWJiOmcuYWFiYi5xdWFkcmFudChUKSx6b29tOmcuem9vbSsxLHg6ayx5Ok0sd3JhcDpnLndyYXAsZnVsbHlWaXNpYmxlOnl9KX19cmV0dXJuIGYuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXN0YW5jZVNxLWUuZGlzdGFuY2VTcX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbGVJRH0pKX0sd24ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMucGl4ZWxzVG9HTFVuaXRzPVsyL3QsLTIvZV0sdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCl9LFRuLnVubW9kaWZpZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VubW9kaWZpZWR9LHduLnByb3RvdHlwZS56b29tU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsdCl9LHduLnByb3RvdHlwZS5zY2FsZVpvb209ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4yfSx3bi5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbihlKXt2YXIgcj10LmNsYW1wKGUubGF0LC10aGlzLm1heFZhbGlkTGF0aXR1ZGUsdGhpcy5tYXhWYWxpZExhdGl0dWRlKTtyZXR1cm4gbmV3IHQuUG9pbnQodC5tZXJjYXRvclhmcm9tTG5nKGUubG5nKSp0aGlzLndvcmxkU2l6ZSx0Lm1lcmNhdG9yWWZyb21MYXQocikqdGhpcy53b3JsZFNpemUpfSx3bi5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoZS54L3RoaXMud29ybGRTaXplLGUueS90aGlzLndvcmxkU2l6ZSkudG9MbmdMYXQoKX0sVG4ucG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvamVjdCh0aGlzLmNlbnRlcil9LHduLnByb3RvdHlwZS5zZXRMb2NhdGlvbkF0UG9pbnQ9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLnBvaW50Q29vcmRpbmF0ZShyKSxpPXRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQpLGE9dGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUoZSksbz1uZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoYS54LShuLngtaS54KSxhLnktKG4ueS1pLnkpKTt0aGlzLmNlbnRlcj10aGlzLmNvb3JkaW5hdGVMb2NhdGlvbihvKSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuY2VudGVyPXRoaXMuY2VudGVyLndyYXAoKSl9LHduLnByb3RvdHlwZS5sb2NhdGlvblBvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVQb2ludCh0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZSh0KSl9LHduLnByb3RvdHlwZS5wb2ludExvY2F0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVMb2NhdGlvbih0aGlzLnBvaW50Q29vcmRpbmF0ZSh0KSl9LHduLnByb3RvdHlwZS5sb2NhdGlvbkNvb3JkaW5hdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQoZSl9LHduLnByb3RvdHlwZS5jb29yZGluYXRlTG9jYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9MbmdMYXQoKX0sd24ucHJvdG90eXBlLnBvaW50Q29vcmRpbmF0ZT1mdW5jdGlvbihlKXt2YXIgcj1bZS54LGUueSwwLDFdLG49W2UueCxlLnksMSwxXTt0LnRyYW5zZm9ybU1hdDQocixyLHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKSx0LnRyYW5zZm9ybU1hdDQobixuLHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKTt2YXIgaT1yWzNdLGE9blszXSxvPXJbMV0vaSxzPW5bMV0vYSxsPXJbMl0vaSxjPW5bMl0vYSx1PWw9PT1jPzA6KDAtbCkvKGMtbCk7cmV0dXJuIG5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZSh0Lm51bWJlcihyWzBdL2ksblswXS9hLHUpL3RoaXMud29ybGRTaXplLHQubnVtYmVyKG8scyx1KS90aGlzLndvcmxkU2l6ZSl9LHduLnByb3RvdHlwZS5jb29yZGluYXRlUG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHI9W2UueCp0aGlzLndvcmxkU2l6ZSxlLnkqdGhpcy53b3JsZFNpemUsMCwxXTtyZXR1cm4gdC50cmFuc2Zvcm1NYXQ0KHIscix0aGlzLnBpeGVsTWF0cml4KSxuZXcgdC5Qb2ludChyWzBdL3JbM10sclsxXS9yWzNdKX0sd24ucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbigpe3JldHVybihuZXcgdC5MbmdMYXRCb3VuZHMpLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IHQuUG9pbnQoMCwwKSkpLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IHQuUG9pbnQodGhpcy53aWR0aCwwKSkpLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IHQuUG9pbnQodGhpcy53aWR0aCx0aGlzLmhlaWdodCkpKS5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyB0LlBvaW50KDAsdGhpcy5oZWlnaHQpKSl9LHduLnByb3RvdHlwZS5nZXRNYXhCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXRSYW5nZSYmMj09PXRoaXMubGF0UmFuZ2UubGVuZ3RoJiZ0aGlzLmxuZ1JhbmdlJiYyPT09dGhpcy5sbmdSYW5nZS5sZW5ndGg/bmV3IHQuTG5nTGF0Qm91bmRzKFt0aGlzLmxuZ1JhbmdlWzBdLHRoaXMubGF0UmFuZ2VbMF1dLFt0aGlzLmxuZ1JhbmdlWzFdLHRoaXMubGF0UmFuZ2VbMV1dKTpudWxsfSx3bi5wcm90b3R5cGUuc2V0TWF4Qm91bmRzPWZ1bmN0aW9uKHQpe3Q/KHRoaXMubG5nUmFuZ2U9W3QuZ2V0V2VzdCgpLHQuZ2V0RWFzdCgpXSx0aGlzLmxhdFJhbmdlPVt0LmdldFNvdXRoKCksdC5nZXROb3J0aCgpXSx0aGlzLl9jb25zdHJhaW4oKSk6KHRoaXMubG5nUmFuZ2U9bnVsbCx0aGlzLmxhdFJhbmdlPVstdGhpcy5tYXhWYWxpZExhdGl0dWRlLHRoaXMubWF4VmFsaWRMYXRpdHVkZV0pfSx3bi5wcm90b3R5cGUuY2FsY3VsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscil7dm9pZCAwPT09ciYmKHI9ITEpO3ZhciBuPWUua2V5LGk9cj90aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU6dGhpcy5fcG9zTWF0cml4Q2FjaGU7aWYoaVtuXSlyZXR1cm4gaVtuXTt2YXIgYT1lLmNhbm9uaWNhbCxvPXRoaXMud29ybGRTaXplL3RoaXMuem9vbVNjYWxlKGEueikscz1hLngrTWF0aC5wb3coMixhLnopKmUud3JhcCxsPXQuaWRlbnRpdHkobmV3IEZsb2F0NjRBcnJheSgxNikpO3JldHVybiB0LnRyYW5zbGF0ZShsLGwsW3MqbyxhLnkqbywwXSksdC5zY2FsZShsLGwsW28vdC5FWFRFTlQsby90LkVYVEVOVCwxXSksdC5tdWx0aXBseShsLHI/dGhpcy5hbGlnbmVkUHJvak1hdHJpeDp0aGlzLnByb2pNYXRyaXgsbCksaVtuXT1uZXcgRmxvYXQzMkFycmF5KGwpLGlbbl19LHduLnByb3RvdHlwZS5jdXN0b21MYXllck1hdHJpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lcmNhdG9yTWF0cml4LnNsaWNlKCl9LHduLnByb3RvdHlwZS5fY29uc3RyYWluPWZ1bmN0aW9uKCl7aWYodGhpcy5jZW50ZXImJnRoaXMud2lkdGgmJnRoaXMuaGVpZ2h0JiYhdGhpcy5fY29uc3RyYWluaW5nKXt0aGlzLl9jb25zdHJhaW5pbmc9ITA7dmFyIGUscixuLGksYT0tOTAsbz05MCxzPS0xODAsbD0xODAsYz10aGlzLnNpemUsdT10aGlzLl91bm1vZGlmaWVkO2lmKHRoaXMubGF0UmFuZ2Upe3ZhciBmPXRoaXMubGF0UmFuZ2U7YT10Lm1lcmNhdG9yWWZyb21MYXQoZlsxXSkqdGhpcy53b3JsZFNpemUsZT0obz10Lm1lcmNhdG9yWWZyb21MYXQoZlswXSkqdGhpcy53b3JsZFNpemUpLWE8Yy55P2MueS8oby1hKTowfWlmKHRoaXMubG5nUmFuZ2Upe3ZhciBoPXRoaXMubG5nUmFuZ2U7cz10Lm1lcmNhdG9yWGZyb21MbmcoaFswXSkqdGhpcy53b3JsZFNpemUscj0obD10Lm1lcmNhdG9yWGZyb21MbmcoaFsxXSkqdGhpcy53b3JsZFNpemUpLXM8Yy54P2MueC8obC1zKTowfXZhciBwPXRoaXMucG9pbnQsZD1NYXRoLm1heChyfHwwLGV8fDApO2lmKGQpcmV0dXJuIHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LlBvaW50KHI/KGwrcykvMjpwLngsZT8obythKS8yOnAueSkpLHRoaXMuem9vbSs9dGhpcy5zY2FsZVpvb20oZCksdGhpcy5fdW5tb2RpZmllZD11LHZvaWQodGhpcy5fY29uc3RyYWluaW5nPSExKTtpZih0aGlzLmxhdFJhbmdlKXt2YXIgZz1wLnksbT1jLnkvMjtnLW08YSYmKGk9YSttKSxnK20+byYmKGk9by1tKX1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgdj1wLngseT1jLngvMjt2LXk8cyYmKG49cyt5KSx2K3k+bCYmKG49bC15KX12b2lkIDA9PT1uJiZ2b2lkIDA9PT1pfHwodGhpcy5jZW50ZXI9dGhpcy51bnByb2plY3QobmV3IHQuUG9pbnQodm9pZCAwIT09bj9uOnAueCx2b2lkIDAhPT1pP2k6cC55KSkpLHRoaXMuX3VubW9kaWZpZWQ9dSx0aGlzLl9jb25zdHJhaW5pbmc9ITF9fSx3bi5wcm90b3R5cGUuX2NhbGNNYXRyaWNlcz1mdW5jdGlvbigpe2lmKHRoaXMuaGVpZ2h0KXt2YXIgZT10aGlzLmNlbnRlck9mZnNldDt0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U9LjUvTWF0aC50YW4odGhpcy5fZm92LzIpKnRoaXMuaGVpZ2h0O3ZhciByPU1hdGguUEkvMit0aGlzLl9waXRjaCxuPXRoaXMuX2ZvdiooLjUrZS55L3RoaXMuaGVpZ2h0KSxpPU1hdGguc2luKG4pKnRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9NYXRoLnNpbih0LmNsYW1wKE1hdGguUEktci1uLC4wMSxNYXRoLlBJLS4wMSkpLGE9dGhpcy5wb2ludCxvPWEueCxzPWEueSxsPTEuMDEqKE1hdGguY29zKE1hdGguUEkvMi10aGlzLl9waXRjaCkqaSt0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpLGM9dGhpcy5oZWlnaHQvNTAsdT1uZXcgRmxvYXQ2NEFycmF5KDE2KTt0LnBlcnNwZWN0aXZlKHUsdGhpcy5fZm92LHRoaXMud2lkdGgvdGhpcy5oZWlnaHQsYyxsKSx1WzhdPTIqLWUueC90aGlzLndpZHRoLHVbOV09MiplLnkvdGhpcy5oZWlnaHQsdC5zY2FsZSh1LHUsWzEsLTEsMV0pLHQudHJhbnNsYXRlKHUsdSxbMCwwLC10aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2VdKSx0LnJvdGF0ZVgodSx1LHRoaXMuX3BpdGNoKSx0LnJvdGF0ZVoodSx1LHRoaXMuYW5nbGUpLHQudHJhbnNsYXRlKHUsdSxbLW8sLXMsMF0pLHRoaXMubWVyY2F0b3JNYXRyaXg9dC5zY2FsZShbXSx1LFt0aGlzLndvcmxkU2l6ZSx0aGlzLndvcmxkU2l6ZSx0aGlzLndvcmxkU2l6ZV0pLHQuc2NhbGUodSx1LFsxLDEsdC5tZXJjYXRvclpmcm9tQWx0aXR1ZGUoMSx0aGlzLmNlbnRlci5sYXQpKnRoaXMud29ybGRTaXplLDFdKSx0aGlzLnByb2pNYXRyaXg9dSx0aGlzLmludlByb2pNYXRyaXg9dC5pbnZlcnQoW10sdGhpcy5wcm9qTWF0cml4KTt2YXIgZj10aGlzLndpZHRoJTIvMixoPXRoaXMuaGVpZ2h0JTIvMixwPU1hdGguY29zKHRoaXMuYW5nbGUpLGQ9TWF0aC5zaW4odGhpcy5hbmdsZSksZz1vLU1hdGgucm91bmQobykrcCpmK2QqaCxtPXMtTWF0aC5yb3VuZChzKStwKmgrZCpmLHY9bmV3IEZsb2F0NjRBcnJheSh1KTtpZih0LnRyYW5zbGF0ZSh2LHYsW2c+LjU/Zy0xOmcsbT4uNT9tLTE6bSwwXSksdGhpcy5hbGlnbmVkUHJvak1hdHJpeD12LHU9dC5jcmVhdGUoKSx0LnNjYWxlKHUsdSxbdGhpcy53aWR0aC8yLC10aGlzLmhlaWdodC8yLDFdKSx0LnRyYW5zbGF0ZSh1LHUsWzEsLTEsMF0pLHRoaXMubGFiZWxQbGFuZU1hdHJpeD11LHU9dC5jcmVhdGUoKSx0LnNjYWxlKHUsdSxbMSwtMSwxXSksdC50cmFuc2xhdGUodSx1LFstMSwtMSwwXSksdC5zY2FsZSh1LHUsWzIvdGhpcy53aWR0aCwyL3RoaXMuaGVpZ2h0LDFdKSx0aGlzLmdsQ29vcmRNYXRyaXg9dSx0aGlzLnBpeGVsTWF0cml4PXQubXVsdGlwbHkobmV3IEZsb2F0NjRBcnJheSgxNiksdGhpcy5sYWJlbFBsYW5lTWF0cml4LHRoaXMucHJvak1hdHJpeCksISh1PXQuaW52ZXJ0KG5ldyBGbG9hdDY0QXJyYXkoMTYpLHRoaXMucGl4ZWxNYXRyaXgpKSl0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBpbnZlcnQgbWF0cml4Iik7dGhpcy5waXhlbE1hdHJpeEludmVyc2U9dSx0aGlzLl9wb3NNYXRyaXhDYWNoZT17fSx0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU9e319fSx3bi5wcm90b3R5cGUubWF4UGl0Y2hTY2FsZUZhY3Rvcj1mdW5jdGlvbigpe2lmKCF0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSlyZXR1cm4gMTt2YXIgZT10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCgwLDApKSxyPVtlLngqdGhpcy53b3JsZFNpemUsZS55KnRoaXMud29ybGRTaXplLDAsMV07cmV0dXJuIHQudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeClbM10vdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlfSx3bi5wcm90b3R5cGUuZ2V0Q2FtZXJhUG9pbnQ9ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLnRhbih0aGlzLl9waXRjaCkqKHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZXx8MSk7cmV0dXJuIHRoaXMuY2VudGVyUG9pbnQuYWRkKG5ldyB0LlBvaW50KDAsZSkpfSx3bi5wcm90b3R5cGUuZ2V0Q2FtZXJhUXVlcnlHZW9tZXRyeT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmdldENhbWVyYVBvaW50KCk7aWYoMT09PWUubGVuZ3RoKXJldHVybltlWzBdLHJdO2Zvcih2YXIgbj1yLngsaT1yLnksYT1yLngsbz1yLnkscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107bj1NYXRoLm1pbihuLGMueCksaT1NYXRoLm1pbihpLGMueSksYT1NYXRoLm1heChhLGMueCksbz1NYXRoLm1heChvLGMueSl9cmV0dXJuW25ldyB0LlBvaW50KG4saSksbmV3IHQuUG9pbnQoYSxpKSxuZXcgdC5Qb2ludChhLG8pLG5ldyB0LlBvaW50KG4sbyksbmV3IHQuUG9pbnQobixpKV19LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHduLnByb3RvdHlwZSxUbik7dmFyIGtuPWZ1bmN0aW9uKGUpe3ZhciByLG4saSxhO3RoaXMuX2hhc2hOYW1lPWUmJmVuY29kZVVSSUNvbXBvbmVudChlKSx0LmJpbmRBbGwoWyJfZ2V0Q3VycmVudEhhc2giLCJfb25IYXNoQ2hhbmdlIiwiX3VwZGF0ZUhhc2giXSx0aGlzKSx0aGlzLl91cGRhdGVIYXNoPShyPXRoaXMuX3VwZGF0ZUhhc2hVbnRocm90dGxlZC5iaW5kKHRoaXMpLG49ITEsaT1udWxsLGE9ZnVuY3Rpb24oKXtpPW51bGwsbiYmKHIoKSxpPXNldFRpbWVvdXQoYSwzMDApLG49ITEpfSxmdW5jdGlvbigpe3JldHVybiBuPSEwLGl8fGEoKSxpfSl9O2tuLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5fb25IYXNoQ2hhbmdlLCExKSx0aGlzLl9tYXAub24oIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUhhc2gpLHRoaXN9LGtuLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5fb25IYXNoQ2hhbmdlLCExKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVIYXNoKSxjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlSGFzaCgpKSxkZWxldGUgdGhpcy5fbWFwLHRoaXN9LGtuLnByb3RvdHlwZS5nZXRIYXNoU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX21hcC5nZXRDZW50ZXIoKSxuPU1hdGgucm91bmQoMTAwKnRoaXMuX21hcC5nZXRab29tKCkpLzEwMCxpPU1hdGguY2VpbCgobipNYXRoLkxOMitNYXRoLmxvZyg1MTIvMzYwLy41KSkvTWF0aC5MTjEwKSxhPU1hdGgucG93KDEwLGkpLG89TWF0aC5yb3VuZChyLmxuZyphKS9hLHM9TWF0aC5yb3VuZChyLmxhdCphKS9hLGw9dGhpcy5fbWFwLmdldEJlYXJpbmcoKSxjPXRoaXMuX21hcC5nZXRQaXRjaCgpLHU9IiI7aWYodSs9ZT8iLyIrbysiLyIrcysiLyIrbjpuKyIvIitzKyIvIitvLChsfHxjKSYmKHUrPSIvIitNYXRoLnJvdW5kKDEwKmwpLzEwKSxjJiYodSs9Ii8iK01hdGgucm91bmQoYykpLHRoaXMuX2hhc2hOYW1lKXt2YXIgZj10aGlzLl9oYXNoTmFtZSxoPSExLHA9dC53aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKS5zcGxpdCgiJiIpLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dC5zcGxpdCgiPSIpWzBdO3JldHVybiBlPT09Zj8oaD0hMCxlKyI9Iit1KTp0fSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSk7cmV0dXJuIGh8fHAucHVzaChmKyI9Iit1KSwiIyIrcC5qb2luKCImIil9cmV0dXJuIiMiK3V9LGtuLnByb3RvdHlwZS5fZ2V0Q3VycmVudEhhc2g9ZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMsbj10LndpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoIiMiLCIiKTtyZXR1cm4gdGhpcy5faGFzaE5hbWU/KG4uc3BsaXQoIiYiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KCI9Iil9KSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dFswXT09PXIuX2hhc2hOYW1lJiYoZT10KX0pKSwoZSYmZVsxXXx8IiIpLnNwbGl0KCIvIikpOm4uc3BsaXQoIi8iKX0sa24ucHJvdG90eXBlLl9vbkhhc2hDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRDdXJyZW50SGFzaCgpO2lmKHQubGVuZ3RoPj0zJiYhdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odCl9KSkpe3ZhciBlPXRoaXMuX21hcC5kcmFnUm90YXRlLmlzRW5hYmxlZCgpJiZ0aGlzLl9tYXAudG91Y2hab29tUm90YXRlLmlzRW5hYmxlZCgpPysodFszXXx8MCk6dGhpcy5fbWFwLmdldEJlYXJpbmcoKTtyZXR1cm4gdGhpcy5fbWFwLmp1bXBUbyh7Y2VudGVyOlsrdFsyXSwrdFsxXV0sem9vbTordFswXSxiZWFyaW5nOmUscGl0Y2g6Kyh0WzRdfHwwKX0pLCEwfXJldHVybiExfSxrbi5wcm90b3R5cGUuX3VwZGF0ZUhhc2hVbnRocm90dGxlZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0SGFzaFN0cmluZygpO3RyeXt0LndpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh0LndpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLGUpfWNhdGNoKHQpe319O3ZhciBNbj17bGluZWFyaXR5Oi4zLGVhc2luZzp0LmJlemllcigwLDAsLjMsMSl9LEFuPXQuZXh0ZW5kKHtkZWNlbGVyYXRpb246MjUwMCxtYXhTcGVlZDoxNDAwfSxNbiksU249dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoyMCxtYXhTcGVlZDoxNDAwfSxNbiksRW49dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoxZTMsbWF4U3BlZWQ6MzYwfSxNbiksQ249dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoxZTMsbWF4U3BlZWQ6OTB9LE1uKSxMbj1mdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLmNsZWFyKCl9O2Z1bmN0aW9uIEluKHQsZSl7KCF0LmR1cmF0aW9ufHx0LmR1cmF0aW9uPGUuZHVyYXRpb24pJiYodC5kdXJhdGlvbj1lLmR1cmF0aW9uLHQuZWFzaW5nPWUuZWFzaW5nKX1mdW5jdGlvbiBQbihlLHIsbil7dmFyIGk9bi5tYXhTcGVlZCxhPW4ubGluZWFyaXR5LG89bi5kZWNlbGVyYXRpb24scz10LmNsYW1wKGUqYS8oci8xZTMpLC1pLGkpLGw9TWF0aC5hYnMocykvKG8qYSk7cmV0dXJue2Vhc2luZzpuLmVhc2luZyxkdXJhdGlvbjoxZTMqbCxhbW91bnQ6cyoobC8yKX19TG4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5faW5lcnRpYUJ1ZmZlcj1bXX0sTG4ucHJvdG90eXBlLnJlY29yZD1mdW5jdGlvbihlKXt0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSx0aGlzLl9pbmVydGlhQnVmZmVyLnB1c2goe3RpbWU6dC5icm93c2VyLm5vdygpLHNldHRpbmdzOmV9KX0sTG4ucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5faW5lcnRpYUJ1ZmZlcixyPXQuYnJvd3Nlci5ub3coKTtlLmxlbmd0aD4wJiZyLWVbMF0udGltZT4xNjA7KWUuc2hpZnQoKX0sTG4ucHJvdG90eXBlLl9vbk1vdmVFbmQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCksISh0aGlzLl9pbmVydGlhQnVmZmVyLmxlbmd0aDwyKSl7Zm9yKHZhciByPXt6b29tOjAsYmVhcmluZzowLHBpdGNoOjAscGFuOm5ldyB0LlBvaW50KDAsMCkscGluY2hBcm91bmQ6dm9pZCAwLGFyb3VuZDp2b2lkIDB9LG49MCxpPXRoaXMuX2luZXJ0aWFCdWZmZXI7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLnNldHRpbmdzO3Iuem9vbSs9YS56b29tRGVsdGF8fDAsci5iZWFyaW5nKz1hLmJlYXJpbmdEZWx0YXx8MCxyLnBpdGNoKz1hLnBpdGNoRGVsdGF8fDAsYS5wYW5EZWx0YSYmci5wYW4uX2FkZChhLnBhbkRlbHRhKSxhLmFyb3VuZCYmKHIuYXJvdW5kPWEuYXJvdW5kKSxhLnBpbmNoQXJvdW5kJiYoci5waW5jaEFyb3VuZD1hLnBpbmNoQXJvdW5kKX12YXIgbz10aGlzLl9pbmVydGlhQnVmZmVyW3RoaXMuX2luZXJ0aWFCdWZmZXIubGVuZ3RoLTFdLnRpbWUtdGhpcy5faW5lcnRpYUJ1ZmZlclswXS50aW1lLHM9e307aWYoci5wYW4ubWFnKCkpe3ZhciBsPVBuKHIucGFuLm1hZygpLG8sdC5leHRlbmQoe30sQW4sZXx8e30pKTtzLm9mZnNldD1yLnBhbi5tdWx0KGwuYW1vdW50L3IucGFuLm1hZygpKSxzLmNlbnRlcj10aGlzLl9tYXAudHJhbnNmb3JtLmNlbnRlcixJbihzLGwpfWlmKHIuem9vbSl7dmFyIGM9UG4oci56b29tLG8sU24pO3Muem9vbT10aGlzLl9tYXAudHJhbnNmb3JtLnpvb20rYy5hbW91bnQsSW4ocyxjKX1pZihyLmJlYXJpbmcpe3ZhciB1PVBuKHIuYmVhcmluZyxvLEVuKTtzLmJlYXJpbmc9dGhpcy5fbWFwLnRyYW5zZm9ybS5iZWFyaW5nK3QuY2xhbXAodS5hbW91bnQsLTE3OSwxNzkpLEluKHMsdSl9aWYoci5waXRjaCl7dmFyIGY9UG4oci5waXRjaCxvLENuKTtzLnBpdGNoPXRoaXMuX21hcC50cmFuc2Zvcm0ucGl0Y2grZi5hbW91bnQsSW4ocyxmKX1pZihzLnpvb218fHMuYmVhcmluZyl7dmFyIGg9dm9pZCAwPT09ci5waW5jaEFyb3VuZD9yLmFyb3VuZDpyLnBpbmNoQXJvdW5kO3MuYXJvdW5kPWg/dGhpcy5fbWFwLnVucHJvamVjdChoKTp0aGlzLl9tYXAuZ2V0Q2VudGVyKCl9cmV0dXJuIHRoaXMuY2xlYXIoKSx0LmV4dGVuZChzLHtub01vdmVTdGFydDohMH0pfX07dmFyIHpuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpLGEsbyl7dm9pZCAwPT09byYmKG89e30pO3ZhciBzPXIubW91c2VQb3MoaS5nZXRDYW52YXNDb250YWluZXIoKSxhKSxsPWkudW5wcm9qZWN0KHMpO2UuY2FsbCh0aGlzLG4sdC5leHRlbmQoe3BvaW50OnMsbG5nTGF0Omwsb3JpZ2luYWxFdmVudDphfSxvKSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLnRhcmdldD1pfWUmJihuLl9fcHJvdG9fXz1lKSwobi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW47dmFyIGk9e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBuLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LGkuZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobi5wcm90b3R5cGUsaSksbn0odC5FdmVudCksT249ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLGksYSl7dmFyIG89InRvdWNoZW5kIj09PW4/YS5jaGFuZ2VkVG91Y2hlczphLnRvdWNoZXMscz1yLnRvdWNoUG9zKGkuZ2V0Q2FudmFzQ29udGFpbmVyKCksbyksbD1zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGkudW5wcm9qZWN0KHQpfSkpLGM9cy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmFkZChlLmRpdihuLmxlbmd0aCkpfSksbmV3IHQuUG9pbnQoMCwwKSksdT1pLnVucHJvamVjdChjKTtlLmNhbGwodGhpcyxuLHtwb2ludHM6cyxwb2ludDpjLGxuZ0xhdHM6bCxsbmdMYXQ6dSxvcmlnaW5hbEV2ZW50OmF9KSx0aGlzLl9kZWZhdWx0UHJldmVudGVkPSExfWUmJihuLl9fcHJvdG9fXz1lKSwobi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW47dmFyIGk9e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBuLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LGkuZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobi5wcm90b3R5cGUsaSksbn0odC5FdmVudCksRG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7dC5jYWxsKHRoaXMsZSx7b3JpZ2luYWxFdmVudDpufSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMX10JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gZS5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxyLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KHQuRXZlbnQpLFJuPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbWFwPXQsdGhpcy5fY2xpY2tUb2xlcmFuY2U9ZS5jbGlja1RvbGVyYW5jZX07Um4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX21vdXNlZG93blBvc30sUm4ucHJvdG90eXBlLndoZWVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9maXJlUHJldmVudGFibGUobmV3IERuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxSbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX21vdXNlZG93blBvcz1lLHRoaXMuX2ZpcmVQcmV2ZW50YWJsZShuZXcgem4odC50eXBlLHRoaXMuX21hcCx0KSl9LFJuLnByb3RvdHlwZS5tb3VzZXVwPWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyB6bih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sUm4ucHJvdG90eXBlLmNsaWNrPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbW91c2Vkb3duUG9zJiZ0aGlzLl9tb3VzZWRvd25Qb3MuZGlzdChlKT49dGhpcy5fY2xpY2tUb2xlcmFuY2V8fHRoaXMuX21hcC5maXJlKG5ldyB6bih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sUm4ucHJvdG90eXBlLmRibGNsaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9maXJlUHJldmVudGFibGUobmV3IHpuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxSbi5wcm90b3R5cGUubW91c2VvdmVyPWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyB6bih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sUm4ucHJvdG90eXBlLm1vdXNlb3V0PWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyB6bih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sUm4ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZpcmVQcmV2ZW50YWJsZShuZXcgT24odC50eXBlLHRoaXMuX21hcCx0KSl9LFJuLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IE9uKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxSbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IE9uKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxSbi5wcm90b3R5cGUudG91Y2hjYW5jZWw9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IE9uKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxSbi5wcm90b3R5cGUuX2ZpcmVQcmV2ZW50YWJsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9tYXAuZmlyZSh0KSx0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJue319LFJuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUm4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFJuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt9LFJuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7fTt2YXIgRm49ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXR9O0ZuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2RlbGF5Q29udGV4dE1lbnU9ITEsZGVsZXRlIHRoaXMuX2NvbnRleHRNZW51RXZlbnR9LEZuLnByb3RvdHlwZS5tb3VzZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IHpuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxGbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKCl7dGhpcy5fZGVsYXlDb250ZXh0TWVudT0hMH0sRm4ucHJvdG90eXBlLm1vdXNldXA9ZnVuY3Rpb24oKXt0aGlzLl9kZWxheUNvbnRleHRNZW51PSExLHRoaXMuX2NvbnRleHRNZW51RXZlbnQmJih0aGlzLl9tYXAuZmlyZShuZXcgem4oImNvbnRleHRtZW51Iix0aGlzLl9tYXAsdGhpcy5fY29udGV4dE1lbnVFdmVudCkpLGRlbGV0ZSB0aGlzLl9jb250ZXh0TWVudUV2ZW50KX0sRm4ucHJvdG90eXBlLmNvbnRleHRtZW51PWZ1bmN0aW9uKHQpe3RoaXMuX2RlbGF5Q29udGV4dE1lbnU/dGhpcy5fY29udGV4dE1lbnVFdmVudD10OnRoaXMuX21hcC5maXJlKG5ldyB6bih0LnR5cGUsdGhpcy5fbWFwLHQpKSx0aGlzLl9tYXAubGlzdGVucygiY29udGV4dG1lbnUiKSYmdC5wcmV2ZW50RGVmYXVsdCgpfSxGbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEZuLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiExfSxGbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7fSxGbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe307dmFyIEJuPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbWFwPXQsdGhpcy5fZWw9dC5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9jb250YWluZXI9dC5nZXRDb250YWluZXIoKSx0aGlzLl9jbGlja1RvbGVyYW5jZT1lLmNsaWNrVG9sZXJhbmNlfHwxfTtmdW5jdGlvbiBObih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDtuKyspclt0W25dLmlkZW50aWZpZXJdPWVbbl07cmV0dXJuIHJ9Qm4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sQm4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hY3RpdmV9LEJuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCl9LEJuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxCbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKHQsZSl7dGhpcy5pc0VuYWJsZWQoKSYmdC5zaGlmdEtleSYmMD09PXQuYnV0dG9uJiYoci5kaXNhYmxlRHJhZygpLHRoaXMuX3N0YXJ0UG9zPXRoaXMuX2xhc3RQb3M9ZSx0aGlzLl9hY3RpdmU9ITApfSxCbi5wcm90b3R5cGUubW91c2Vtb3ZlV2luZG93PWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fYWN0aXZlKXt2YXIgbj1lO2lmKCEodGhpcy5fbGFzdFBvcy5lcXVhbHMobil8fCF0aGlzLl9ib3gmJm4uZGlzdCh0aGlzLl9zdGFydFBvcyk8dGhpcy5fY2xpY2tUb2xlcmFuY2UpKXt2YXIgaT10aGlzLl9zdGFydFBvczt0aGlzLl9sYXN0UG9zPW4sdGhpcy5fYm94fHwodGhpcy5fYm94PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1ib3h6b29tIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jcm9zc2hhaXIiKSx0aGlzLl9maXJlRXZlbnQoImJveHpvb21zdGFydCIsdCkpO3ZhciBhPU1hdGgubWluKGkueCxuLngpLG89TWF0aC5tYXgoaS54LG4ueCkscz1NYXRoLm1pbihpLnksbi55KSxsPU1hdGgubWF4KGkueSxuLnkpO3Iuc2V0VHJhbnNmb3JtKHRoaXMuX2JveCwidHJhbnNsYXRlKCIrYSsicHgsIitzKyJweCkiKSx0aGlzLl9ib3guc3R5bGUud2lkdGg9by1hKyJweCIsdGhpcy5fYm94LnN0eWxlLmhlaWdodD1sLXMrInB4In19fSxCbi5wcm90b3R5cGUubW91c2V1cFdpbmRvdz1mdW5jdGlvbihlLG4pe3ZhciBpPXRoaXM7aWYodGhpcy5fYWN0aXZlJiYwPT09ZS5idXR0b24pe3ZhciBhPXRoaXMuX3N0YXJ0UG9zLG89bjtpZih0aGlzLnJlc2V0KCksci5zdXBwcmVzc0NsaWNrKCksYS54IT09by54fHxhLnkhPT1vLnkpcmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJib3h6b29tZW5kIix7b3JpZ2luYWxFdmVudDplfSkpLHtjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQuZml0U2NyZWVuQ29vcmRpbmF0ZXMoYSxvLGkuX21hcC5nZXRCZWFyaW5nKCkse2xpbmVhcjohMH0pfX07dGhpcy5fZmlyZUV2ZW50KCJib3h6b29tY2FuY2VsIixlKX19LEJuLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZSYmMjc9PT10LmtleUNvZGUmJih0aGlzLnJlc2V0KCksdGhpcy5fZmlyZUV2ZW50KCJib3h6b29tY2FuY2VsIix0KSl9LEJuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fYm94JiYoci5yZW1vdmUodGhpcy5fYm94KSx0aGlzLl9ib3g9bnVsbCksci5lbmFibGVEcmFnKCksZGVsZXRlIHRoaXMuX3N0YXJ0UG9zLGRlbGV0ZSB0aGlzLl9sYXN0UG9zfSxCbi5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHtvcmlnaW5hbEV2ZW50OnJ9KSl9O3ZhciBqbj1mdW5jdGlvbih0KXt0aGlzLnJlc2V0KCksdGhpcy5udW1Ub3VjaGVzPXQubnVtVG91Y2hlc307am4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2VudHJvaWQsZGVsZXRlIHRoaXMuc3RhcnRUaW1lLGRlbGV0ZSB0aGlzLnRvdWNoZXMsdGhpcy5hYm9ydGVkPSExfSxqbi5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbihlLHIsbil7KHRoaXMuY2VudHJvaWR8fG4ubGVuZ3RoPnRoaXMubnVtVG91Y2hlcykmJih0aGlzLmFib3J0ZWQ9ITApLHRoaXMuYWJvcnRlZHx8KHZvaWQgMD09PXRoaXMuc3RhcnRUaW1lJiYodGhpcy5zdGFydFRpbWU9ZS50aW1lU3RhbXApLG4ubGVuZ3RoPT09dGhpcy5udW1Ub3VjaGVzJiYodGhpcy5jZW50cm9pZD1mdW5jdGlvbihlKXtmb3IodmFyIHI9bmV3IHQuUG9pbnQoMCwwKSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSlyLl9hZGQoaVtuXSk7cmV0dXJuIHIuZGl2KGUubGVuZ3RoKX0ociksdGhpcy50b3VjaGVzPU5uKG4scikpKX0sam4ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuYWJvcnRlZCYmdGhpcy5jZW50cm9pZCl7dmFyIG49Tm4ocixlKTtmb3IodmFyIGkgaW4gdGhpcy50b3VjaGVzKXt2YXIgYT1uW2ldOyghYXx8YS5kaXN0KHRoaXMudG91Y2hlc1tpXSk+MzApJiYodGhpcy5hYm9ydGVkPSEwKX19fSxqbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLHIpe2lmKCghdGhpcy5jZW50cm9pZHx8dC50aW1lU3RhbXAtdGhpcy5zdGFydFRpbWU+NTAwKSYmKHRoaXMuYWJvcnRlZD0hMCksMD09PXIubGVuZ3RoKXt2YXIgbj0hdGhpcy5hYm9ydGVkJiZ0aGlzLmNlbnRyb2lkO2lmKHRoaXMucmVzZXQoKSxuKXJldHVybiBufX07dmFyIFVuPWZ1bmN0aW9uKHQpe3RoaXMuc2luZ2xlVGFwPW5ldyBqbih0KSx0aGlzLm51bVRhcHM9dC5udW1UYXBzLHRoaXMucmVzZXQoKX07VW4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5sYXN0VGltZT0xLzAsZGVsZXRlIHRoaXMubGFzdFRhcCx0aGlzLmNvdW50PTAsdGhpcy5zaW5nbGVUYXAucmVzZXQoKX0sVW4ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2luZ2xlVGFwLnRvdWNoc3RhcnQodCxlLHIpfSxVbi5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNpbmdsZVRhcC50b3VjaG1vdmUodCxlLHIpfSxVbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuc2luZ2xlVGFwLnRvdWNoZW5kKHQsZSxyKTtpZihuKXt2YXIgaT10LnRpbWVTdGFtcC10aGlzLmxhc3RUaW1lPDUwMCxhPSF0aGlzLmxhc3RUYXB8fHRoaXMubGFzdFRhcC5kaXN0KG4pPDMwO2lmKGkmJmF8fHRoaXMucmVzZXQoKSx0aGlzLmNvdW50KyssdGhpcy5sYXN0VGltZT10LnRpbWVTdGFtcCx0aGlzLmxhc3RUYXA9bix0aGlzLmNvdW50PT09dGhpcy5udW1UYXBzKXJldHVybiB0aGlzLnJlc2V0KCksbn19O3ZhciBWbj1mdW5jdGlvbigpe3RoaXMuX3pvb21Jbj1uZXcgVW4oe251bVRvdWNoZXM6MSxudW1UYXBzOjJ9KSx0aGlzLl96b29tT3V0PW5ldyBVbih7bnVtVG91Y2hlczoyLG51bVRhcHM6MX0pLHRoaXMucmVzZXQoKX07Vm4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLHRoaXMuX3pvb21Jbi5yZXNldCgpLHRoaXMuX3pvb21PdXQucmVzZXQoKX0sVm4ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3pvb21Jbi50b3VjaHN0YXJ0KHQsZSxyKSx0aGlzLl96b29tT3V0LnRvdWNoc3RhcnQodCxlLHIpfSxWbi5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl96b29tSW4udG91Y2htb3ZlKHQsZSxyKSx0aGlzLl96b29tT3V0LnRvdWNobW92ZSh0LGUscil9LFZuLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPXRoaXMuX3pvb21Jbi50b3VjaGVuZCh0LGUsciksYT10aGlzLl96b29tT3V0LnRvdWNoZW5kKHQsZSxyKTtyZXR1cm4gaT8odGhpcy5fYWN0aXZlPSEwLHQucHJldmVudERlZmF1bHQoKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBuLnJlc2V0KCl9KSwwKSx7Y2FtZXJhQW5pbWF0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLmVhc2VUbyh7ZHVyYXRpb246MzAwLHpvb206ZS5nZXRab29tKCkrMSxhcm91bmQ6ZS51bnByb2plY3QoaSl9LHtvcmlnaW5hbEV2ZW50OnR9KX19KTphPyh0aGlzLl9hY3RpdmU9ITAsdC5wcmV2ZW50RGVmYXVsdCgpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVzZXQoKX0pLDApLHtjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZWFzZVRvKHtkdXJhdGlvbjozMDAsem9vbTplLmdldFpvb20oKS0xLGFyb3VuZDplLnVucHJvamVjdChhKX0se29yaWdpbmFsRXZlbnQ6dH0pfX0pOnZvaWQgMH0sVm4ucHJvdG90eXBlLnRvdWNoY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpfSxWbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMH0sVm4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSExLHRoaXMucmVzZXQoKX0sVm4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxWbi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfTt2YXIgcW49ZnVuY3Rpb24odCl7dGhpcy5yZXNldCgpLHRoaXMuX2NsaWNrVG9sZXJhbmNlPXQuY2xpY2tUb2xlcmFuY2V8fDF9O3FuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9tb3ZlZD0hMSxkZWxldGUgdGhpcy5fbGFzdFBvaW50LGRlbGV0ZSB0aGlzLl9ldmVudEJ1dHRvbn0scW4ucHJvdG90eXBlLl9jb3JyZWN0QnV0dG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LHFuLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUpe3JldHVybnt9fSxxbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX2xhc3RQb2ludCl7dmFyIG49ci5tb3VzZUJ1dHRvbih0KTt0aGlzLl9jb3JyZWN0QnV0dG9uKHQsbikmJih0aGlzLl9sYXN0UG9pbnQ9ZSx0aGlzLl9ldmVudEJ1dHRvbj1uKX19LHFuLnByb3RvdHlwZS5tb3VzZW1vdmVXaW5kb3c9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9sYXN0UG9pbnQ7aWYociYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9tb3ZlZHx8IShlLmRpc3Qocik8dGhpcy5fY2xpY2tUb2xlcmFuY2UpKSlyZXR1cm4gdGhpcy5fbW92ZWQ9ITAsdGhpcy5fbGFzdFBvaW50PWUsdGhpcy5fbW92ZShyLGUpfSxxbi5wcm90b3R5cGUubW91c2V1cFdpbmRvdz1mdW5jdGlvbih0KXtyLm1vdXNlQnV0dG9uKHQpPT09dGhpcy5fZXZlbnRCdXR0b24mJih0aGlzLl9tb3ZlZCYmci5zdXBwcmVzc0NsaWNrKCksdGhpcy5yZXNldCgpKX0scW4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LHFuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LHFuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0scW4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIEhuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5tb3VzZWRvd249ZnVuY3Rpb24oZSxyKXt0LnByb3RvdHlwZS5tb3VzZWRvd24uY2FsbCh0aGlzLGUsciksdGhpcy5fbGFzdFBvaW50JiYodGhpcy5fYWN0aXZlPSEwKX0sZS5wcm90b3R5cGUuX2NvcnJlY3RCdXR0b249ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PWUmJiF0LmN0cmxLZXl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2Fyb3VuZDplLHBhbkRlbHRhOmUuc3ViKHQpfX0sZX0ocW4pLEduPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fY29ycmVjdEJ1dHRvbj1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZSYmdC5jdHJsS2V5fHwyPT09ZX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj0uOCooZS54LXQueCk7aWYocilyZXR1cm4gdGhpcy5fYWN0aXZlPSEwLHtiZWFyaW5nRGVsdGE6cn19LGUucHJvdG90eXBlLmNvbnRleHRtZW51PWZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sZX0ocW4pLFluPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fY29ycmVjdEJ1dHRvbj1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZSYmdC5jdHJsS2V5fHwyPT09ZX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj0tLjUqKGUueS10LnkpO2lmKHIpcmV0dXJuIHRoaXMuX2FjdGl2ZT0hMCx7cGl0Y2hEZWx0YTpyfX0sZS5wcm90b3R5cGUuY29udGV4dG1lbnU9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfSxlfShxbiksV249ZnVuY3Rpb24odCl7dGhpcy5fbWluVG91Y2hlcz0xLHRoaXMuX2NsaWNrVG9sZXJhbmNlPXQuY2xpY2tUb2xlcmFuY2V8fDEsdGhpcy5yZXNldCgpfTtXbi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fdG91Y2hlcz17fSx0aGlzLl9zdW09bmV3IHQuUG9pbnQoMCwwKX0sV24ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxjdWxhdGVUcmFuc2Zvcm0odCxlLHIpfSxXbi5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9hY3RpdmUpcmV0dXJuIHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9jYWxjdWxhdGVUcmFuc2Zvcm0odCxlLHIpfSxXbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2NhbGN1bGF0ZVRyYW5zZm9ybSh0LGUsciksdGhpcy5fYWN0aXZlJiZyLmxlbmd0aDx0aGlzLl9taW5Ub3VjaGVzJiZ0aGlzLnJlc2V0KCl9LFduLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sV24ucHJvdG90eXBlLl9jYWxjdWxhdGVUcmFuc2Zvcm09ZnVuY3Rpb24oZSxyLG4pe24ubGVuZ3RoPjAmJih0aGlzLl9hY3RpdmU9ITApO3ZhciBpPU5uKG4sciksYT1uZXcgdC5Qb2ludCgwLDApLG89bmV3IHQuUG9pbnQoMCwwKSxzPTA7Zm9yKHZhciBsIGluIGkpe3ZhciBjPWlbbF0sdT10aGlzLl90b3VjaGVzW2xdO3UmJihhLl9hZGQoYyksby5fYWRkKGMuc3ViKHUpKSxzKyssaVtsXT1jKX1pZih0aGlzLl90b3VjaGVzPWksIShzPHRoaXMuX21pblRvdWNoZXMpJiZvLm1hZygpKXt2YXIgZj1vLmRpdihzKTtpZih0aGlzLl9zdW0uX2FkZChmKSwhKHRoaXMuX3N1bS5tYWcoKTx0aGlzLl9jbGlja1RvbGVyYW5jZSkpcmV0dXJue2Fyb3VuZDphLmRpdihzKSxwYW5EZWx0YTpmfX19LFduLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSxXbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxXbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LFduLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O3ZhciBYbj1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX07ZnVuY3Rpb24gWm4odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaWRlbnRpZmllcj09PXIpcmV0dXJuIGVbbl19ZnVuY3Rpb24gSm4odCxlKXtyZXR1cm4gTWF0aC5sb2codC9lKS9NYXRoLkxOMn1Ybi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsZGVsZXRlIHRoaXMuX2ZpcnN0VHdvVG91Y2hlc30sWG4ucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbih0KXt9LFhuLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUscil7cmV0dXJue319LFhuLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9maXJzdFR3b1RvdWNoZXN8fHIubGVuZ3RoPDJ8fCh0aGlzLl9maXJzdFR3b1RvdWNoZXM9W3JbMF0uaWRlbnRpZmllcixyWzFdLmlkZW50aWZpZXJdLHRoaXMuX3N0YXJ0KFtlWzBdLGVbMV1dKSl9LFhuLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX2ZpcnN0VHdvVG91Y2hlcyl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPXRoaXMuX2ZpcnN0VHdvVG91Y2hlcyxpPW5bMV0sYT1abihyLGUsblswXSksbz1abihyLGUsaSk7aWYoYSYmbyl7dmFyIHM9dGhpcy5fYXJvdW5kQ2VudGVyP251bGw6YS5hZGQobykuZGl2KDIpO3JldHVybiB0aGlzLl9tb3ZlKFthLG9dLHMsdCl9fX0sWG4ucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQsZSxuKXtpZih0aGlzLl9maXJzdFR3b1RvdWNoZXMpe3ZhciBpPXRoaXMuX2ZpcnN0VHdvVG91Y2hlcyxhPWlbMV0sbz1abihuLGUsaVswXSkscz1abihuLGUsYSk7byYmc3x8KHRoaXMuX2FjdGl2ZSYmci5zdXBwcmVzc0NsaWNrKCksdGhpcy5yZXNldCgpKX19LFhuLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sWG4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLl9lbmFibGVkPSEwLHRoaXMuX2Fyb3VuZENlbnRlcj0hIXQmJiJjZW50ZXIiPT09dC5hcm91bmR9LFhuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LFhuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sWG4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIEtuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3QucHJvdG90eXBlLnJlc2V0LmNhbGwodGhpcyksZGVsZXRlIHRoaXMuX2Rpc3RhbmNlLGRlbGV0ZSB0aGlzLl9zdGFydERpc3RhbmNlfSxlLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RhcnREaXN0YW5jZT10aGlzLl9kaXN0YW5jZT10WzBdLmRpc3QodFsxXSl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fZGlzdGFuY2U7aWYodGhpcy5fZGlzdGFuY2U9dFswXS5kaXN0KHRbMV0pLHRoaXMuX2FjdGl2ZXx8IShNYXRoLmFicyhKbih0aGlzLl9kaXN0YW5jZSx0aGlzLl9zdGFydERpc3RhbmNlKSk8LjEpKXJldHVybiB0aGlzLl9hY3RpdmU9ITAse3pvb21EZWx0YTpKbih0aGlzLl9kaXN0YW5jZSxyKSxwaW5jaEFyb3VuZDplfX0sZX0oWG4pO2Z1bmN0aW9uIFFuKHQsZSl7cmV0dXJuIDE4MCp0LmFuZ2xlV2l0aChlKS9NYXRoLlBJfXZhciAkbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpLGRlbGV0ZSB0aGlzLl9taW5EaWFtZXRlcixkZWxldGUgdGhpcy5fc3RhcnRWZWN0b3IsZGVsZXRlIHRoaXMuX3ZlY3Rvcn0sZS5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0YXJ0VmVjdG9yPXRoaXMuX3ZlY3Rvcj10WzBdLnN1Yih0WzFdKSx0aGlzLl9taW5EaWFtZXRlcj10WzBdLmRpc3QodFsxXSl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmVjdG9yO2lmKHRoaXMuX3ZlY3Rvcj10WzBdLnN1Yih0WzFdKSx0aGlzLl9hY3RpdmV8fCF0aGlzLl9pc0JlbG93VGhyZXNob2xkKHRoaXMuX3ZlY3RvcikpcmV0dXJuIHRoaXMuX2FjdGl2ZT0hMCx7YmVhcmluZ0RlbHRhOlFuKHRoaXMuX3ZlY3RvcixyKSxwaW5jaEFyb3VuZDplfX0sZS5wcm90b3R5cGUuX2lzQmVsb3dUaHJlc2hvbGQ9ZnVuY3Rpb24odCl7dGhpcy5fbWluRGlhbWV0ZXI9TWF0aC5taW4odGhpcy5fbWluRGlhbWV0ZXIsdC5tYWcoKSk7dmFyIGU9MjUvKE1hdGguUEkqdGhpcy5fbWluRGlhbWV0ZXIpKjM2MCxyPVFuKHQsdGhpcy5fc3RhcnRWZWN0b3IpO3JldHVybiBNYXRoLmFicyhyKTxlfSxlfShYbik7ZnVuY3Rpb24gdGkodCl7cmV0dXJuIE1hdGguYWJzKHQueSk+TWF0aC5hYnModC54KX12YXIgZWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKSx0aGlzLl92YWxpZD12b2lkIDAsZGVsZXRlIHRoaXMuX2ZpcnN0TW92ZSxkZWxldGUgdGhpcy5fbGFzdFBvaW50c30sZS5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2xhc3RQb2ludHM9dCx0aSh0WzBdLnN1Yih0WzFdKSkmJih0aGlzLl92YWxpZD0hMSl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10WzBdLnN1Yih0aGlzLl9sYXN0UG9pbnRzWzBdKSxpPXRbMV0uc3ViKHRoaXMuX2xhc3RQb2ludHNbMV0pO2lmKHRoaXMuX3ZhbGlkPXRoaXMuZ2VzdHVyZUJlZ2luc1ZlcnRpY2FsbHkobixpLHIudGltZVN0YW1wKSx0aGlzLl92YWxpZClyZXR1cm4gdGhpcy5fbGFzdFBvaW50cz10LHRoaXMuX2FjdGl2ZT0hMCx7cGl0Y2hEZWx0YToobi55K2kueSkvMiotLjV9fSxlLnByb3RvdHlwZS5nZXN0dXJlQmVnaW5zVmVydGljYWxseT1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwIT09dGhpcy5fdmFsaWQpcmV0dXJuIHRoaXMuX3ZhbGlkO3ZhciBuPXQubWFnKCk+PTIsaT1lLm1hZygpPj0yO2lmKG58fGkpe2lmKCFufHwhaSlyZXR1cm4gdm9pZCAwPT09dGhpcy5fZmlyc3RNb3ZlJiYodGhpcy5fZmlyc3RNb3ZlPXIpLHItdGhpcy5fZmlyc3RNb3ZlPDEwMCYmdm9pZCAwO3ZhciBhPXQueT4wPT1lLnk+MDtyZXR1cm4gdGkodCkmJnRpKGUpJiZhfX0sZX0oWG4pLHJpPXtwYW5TdGVwOjEwMCxiZWFyaW5nU3RlcDoxNSxwaXRjaFN0ZXA6MTB9LG5pPWZ1bmN0aW9uKCl7dmFyIHQ9cmk7dGhpcy5fcGFuU3RlcD10LnBhblN0ZXAsdGhpcy5fYmVhcmluZ1N0ZXA9dC5iZWFyaW5nU3RlcCx0aGlzLl9waXRjaFN0ZXA9dC5waXRjaFN0ZXB9O2Z1bmN0aW9uIGlpKHQpe3JldHVybiB0KigyLXQpfW5pLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMX0sbmkucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighKHQuYWx0S2V5fHx0LmN0cmxLZXl8fHQubWV0YUtleSkpe3ZhciByPTAsbj0wLGk9MCxhPTAsbz0wO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgNjE6Y2FzZSAxMDc6Y2FzZSAxNzE6Y2FzZSAxODc6cj0xO2JyZWFrO2Nhc2UgMTg5OmNhc2UgMTA5OmNhc2UgMTczOnI9LTE7YnJlYWs7Y2FzZSAzNzp0LnNoaWZ0S2V5P249LTE6KHQucHJldmVudERlZmF1bHQoKSxhPS0xKTticmVhaztjYXNlIDM5OnQuc2hpZnRLZXk/bj0xOih0LnByZXZlbnREZWZhdWx0KCksYT0xKTticmVhaztjYXNlIDM4OnQuc2hpZnRLZXk/aT0xOih0LnByZXZlbnREZWZhdWx0KCksbz0tMSk7YnJlYWs7Y2FzZSA0MDp0LnNoaWZ0S2V5P2k9LTE6KHQucHJldmVudERlZmF1bHQoKSxvPTEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXJldHVybntjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24ocyl7dmFyIGw9cy5nZXRab29tKCk7cy5lYXNlVG8oe2R1cmF0aW9uOjMwMCxlYXNlSWQ6ImtleWJvYXJkSGFuZGxlciIsZWFzaW5nOmlpLHpvb206cj9NYXRoLnJvdW5kKGwpK3IqKHQuc2hpZnRLZXk/MjoxKTpsLGJlYXJpbmc6cy5nZXRCZWFyaW5nKCkrbiplLl9iZWFyaW5nU3RlcCxwaXRjaDpzLmdldFBpdGNoKCkraSplLl9waXRjaFN0ZXAsb2Zmc2V0OlstYSplLl9wYW5TdGVwLC1vKmUuX3BhblN0ZXBdLGNlbnRlcjpzLmdldENlbnRlcigpfSx7b3JpZ2luYWxFdmVudDp0fSl9fX19LG5pLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSxuaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxuaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LG5pLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O3ZhciBhaT1mdW5jdGlvbihlLHIpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5faGFuZGxlcj1yLHRoaXMuX2RlbHRhPTAsdGhpcy5fZGVmYXVsdFpvb21SYXRlPS4wMSx0aGlzLl93aGVlbFpvb21SYXRlPTEvNDUwLHQuYmluZEFsbChbIl9vbldoZWVsIiwiX29uVGltZW91dCIsIl9vblNjcm9sbEZyYW1lIiwiX29uU2Nyb2xsRmluaXNoZWQiXSx0aGlzKX07YWkucHJvdG90eXBlLnNldFpvb21SYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX2RlZmF1bHRab29tUmF0ZT10fSxhaS5wcm90b3R5cGUuc2V0V2hlZWxab29tUmF0ZT1mdW5jdGlvbih0KXt0aGlzLl93aGVlbFpvb21SYXRlPXR9LGFpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LGFpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYWN0aXZlfHx2b2lkIDAhPT10aGlzLl9maW5pc2hUaW1lb3V0fSxhaS5wcm90b3R5cGUuaXNab29taW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl96b29taW5nfSxhaS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwLHRoaXMuX2Fyb3VuZENlbnRlcj10JiYiY2VudGVyIj09PXQuYXJvdW5kKX0sYWkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LGFpLnByb3RvdHlwZS53aGVlbD1mdW5jdGlvbihlKXtpZih0aGlzLmlzRW5hYmxlZCgpKXt2YXIgcj1lLmRlbHRhTW9kZT09PXQud2luZG93LldoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/NDAqZS5kZWx0YVk6ZS5kZWx0YVksbj10LmJyb3dzZXIubm93KCksaT1uLSh0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWV8fDApO3RoaXMuX2xhc3RXaGVlbEV2ZW50VGltZT1uLDAhPT1yJiZyJTQuMDAwMjQ0MTQwNjI1PT0wP3RoaXMuX3R5cGU9IndoZWVsIjowIT09ciYmTWF0aC5hYnMocik8ND90aGlzLl90eXBlPSJ0cmFja3BhZCI6aT40MDA/KHRoaXMuX3R5cGU9bnVsbCx0aGlzLl9sYXN0VmFsdWU9cix0aGlzLl90aW1lb3V0PXNldFRpbWVvdXQodGhpcy5fb25UaW1lb3V0LDQwLGUpKTp0aGlzLl90eXBlfHwodGhpcy5fdHlwZT1NYXRoLmFicyhpKnIpPDIwMD8idHJhY2twYWQiOiJ3aGVlbCIsdGhpcy5fdGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSx0aGlzLl90aW1lb3V0PW51bGwscis9dGhpcy5fbGFzdFZhbHVlKSksZS5zaGlmdEtleSYmciYmKHIvPTQpLHRoaXMuX3R5cGUmJih0aGlzLl9sYXN0V2hlZWxFdmVudD1lLHRoaXMuX2RlbHRhLT1yLHRoaXMuX2FjdGl2ZXx8dGhpcy5fc3RhcnQoZSkpLGUucHJldmVudERlZmF1bHQoKX19LGFpLnByb3RvdHlwZS5fb25UaW1lb3V0PWZ1bmN0aW9uKHQpe3RoaXMuX3R5cGU9IndoZWVsIix0aGlzLl9kZWx0YS09dGhpcy5fbGFzdFZhbHVlLHRoaXMuX2FjdGl2ZXx8dGhpcy5fc3RhcnQodCl9LGFpLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZGVsdGEpe3RoaXMuX2ZyYW1lSWQmJih0aGlzLl9mcmFtZUlkPW51bGwpLHRoaXMuX2FjdGl2ZT0hMCx0aGlzLmlzWm9vbWluZygpfHwodGhpcy5fem9vbWluZz0hMCksdGhpcy5fZmluaXNoVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl9maW5pc2hUaW1lb3V0KSxkZWxldGUgdGhpcy5fZmluaXNoVGltZW91dCk7dmFyIG49ci5tb3VzZVBvcyh0aGlzLl9lbCxlKTt0aGlzLl9hcm91bmQ9dC5MbmdMYXQuY29udmVydCh0aGlzLl9hcm91bmRDZW50ZXI/dGhpcy5fbWFwLmdldENlbnRlcigpOnRoaXMuX21hcC51bnByb2plY3QobikpLHRoaXMuX2Fyb3VuZFBvaW50PXRoaXMuX21hcC50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludCh0aGlzLl9hcm91bmQpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPSEwLHRoaXMuX2hhbmRsZXIuX3RyaWdnZXJSZW5kZXJGcmFtZSgpKX19LGFpLnByb3RvdHlwZS5yZW5kZXJGcmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblNjcm9sbEZyYW1lKCl9LGFpLnByb3RvdHlwZS5fb25TY3JvbGxGcmFtZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5fZnJhbWVJZCYmKHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLmlzQWN0aXZlKCkpKXt2YXIgcj10aGlzLl9tYXAudHJhbnNmb3JtO2lmKDAhPT10aGlzLl9kZWx0YSl7dmFyIG49IndoZWVsIj09PXRoaXMuX3R5cGUmJk1hdGguYWJzKHRoaXMuX2RlbHRhKT40LjAwMDI0NDE0MDYyNT90aGlzLl93aGVlbFpvb21SYXRlOnRoaXMuX2RlZmF1bHRab29tUmF0ZSxpPTIvKDErTWF0aC5leHAoLU1hdGguYWJzKHRoaXMuX2RlbHRhKm4pKSk7dGhpcy5fZGVsdGE8MCYmMCE9PWkmJihpPTEvaSk7dmFyIGE9Im51bWJlciI9PXR5cGVvZiB0aGlzLl90YXJnZXRab29tP3Iuem9vbVNjYWxlKHRoaXMuX3RhcmdldFpvb20pOnIuc2NhbGU7dGhpcy5fdGFyZ2V0Wm9vbT1NYXRoLm1pbihyLm1heFpvb20sTWF0aC5tYXgoci5taW5ab29tLHIuc2NhbGVab29tKGEqaSkpKSwid2hlZWwiPT09dGhpcy5fdHlwZSYmKHRoaXMuX3N0YXJ0Wm9vbT1yLnpvb20sdGhpcy5fZWFzaW5nPXRoaXMuX3Ntb290aE91dEVhc2luZygyMDApKSx0aGlzLl9kZWx0YT0wfXZhciBvLHM9Im51bWJlciI9PXR5cGVvZiB0aGlzLl90YXJnZXRab29tP3RoaXMuX3RhcmdldFpvb206ci56b29tLGw9dGhpcy5fc3RhcnRab29tLGM9dGhpcy5fZWFzaW5nLHU9ITE7aWYoIndoZWVsIj09PXRoaXMuX3R5cGUmJmwmJmMpe3ZhciBmPU1hdGgubWluKCh0LmJyb3dzZXIubm93KCktdGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lKS8yMDAsMSksaD1jKGYpO289dC5udW1iZXIobCxzLGgpLGY8MT90aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD0hMCk6dT0hMH1lbHNlIG89cyx1PSEwO3JldHVybiB0aGlzLl9hY3RpdmU9ITAsdSYmKHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9maW5pc2hUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5fem9vbWluZz0hMSxlLl9oYW5kbGVyLl90cmlnZ2VyUmVuZGVyRnJhbWUoKSxkZWxldGUgZS5fdGFyZ2V0Wm9vbSxkZWxldGUgZS5fZmluaXNoVGltZW91dH0pLDIwMCkpLHtub0luZXJ0aWE6ITAsbmVlZHNSZW5kZXJGcmFtZTohdSx6b29tRGVsdGE6by1yLnpvb20sYXJvdW5kOnRoaXMuX2Fyb3VuZFBvaW50LG9yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFdoZWVsRXZlbnR9fX0sYWkucHJvdG90eXBlLl9zbW9vdGhPdXRFYXNpbmc9ZnVuY3Rpb24oZSl7dmFyIHI9dC5lYXNlO2lmKHRoaXMuX3ByZXZFYXNlKXt2YXIgbj10aGlzLl9wcmV2RWFzZSxpPSh0LmJyb3dzZXIubm93KCktbi5zdGFydCkvbi5kdXJhdGlvbixhPW4uZWFzaW5nKGkrLjAxKS1uLmVhc2luZyhpKSxvPS4yNy9NYXRoLnNxcnQoYSphKzFlLTQpKi4wMSxzPU1hdGguc3FydCguMDcyOS1vKm8pO3I9dC5iZXppZXIobyxzLC4yNSwxKX1yZXR1cm4gdGhpcy5fcHJldkVhc2U9e3N0YXJ0OnQuYnJvd3Nlci5ub3coKSxkdXJhdGlvbjplLGVhc2luZzpyfSxyfSxhaS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITF9O3ZhciBvaT1mdW5jdGlvbih0LGUpe3RoaXMuX2NsaWNrWm9vbT10LHRoaXMuX3RhcFpvb209ZX07b2kucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2NsaWNrWm9vbS5lbmFibGUoKSx0aGlzLl90YXBab29tLmVuYWJsZSgpfSxvaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2NsaWNrWm9vbS5kaXNhYmxlKCksdGhpcy5fdGFwWm9vbS5kaXNhYmxlKCl9LG9pLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2xpY2tab29tLmlzRW5hYmxlZCgpJiZ0aGlzLl90YXBab29tLmlzRW5hYmxlZCgpfSxvaS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2xpY2tab29tLmlzQWN0aXZlKCl8fHRoaXMuX3RhcFpvb20uaXNBY3RpdmUoKX07dmFyIHNpPWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpfTtzaS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITF9LHNpLnByb3RvdHlwZS5kYmxjbGljaz1mdW5jdGlvbih0LGUpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCkse2NhbWVyYUFuaW1hdGlvbjpmdW5jdGlvbihyKXtyLmVhc2VUbyh7ZHVyYXRpb246MzAwLHpvb206ci5nZXRab29tKCkrKHQuc2hpZnRLZXk/LTE6MSksYXJvdW5kOnIudW5wcm9qZWN0KGUpfSx7b3JpZ2luYWxFdmVudDp0fSl9fX0sc2kucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LHNpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LHNpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sc2kucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIGxpPWZ1bmN0aW9uKCl7dGhpcy5fdGFwPW5ldyBVbih7bnVtVG91Y2hlczoxLG51bVRhcHM6MX0pLHRoaXMucmVzZXQoKX07bGkucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLGRlbGV0ZSB0aGlzLl9zd2lwZVBvaW50LGRlbGV0ZSB0aGlzLl9zd2lwZVRvdWNoLGRlbGV0ZSB0aGlzLl90YXBUaW1lLHRoaXMuX3RhcC5yZXNldCgpfSxsaS5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbih0LGUscil7dGhpcy5fc3dpcGVQb2ludHx8KHRoaXMuX3RhcFRpbWUmJnQudGltZVN0YW1wLXRoaXMuX3RhcFRpbWU+NTAwJiZ0aGlzLnJlc2V0KCksdGhpcy5fdGFwVGltZT9yLmxlbmd0aD4wJiYodGhpcy5fc3dpcGVQb2ludD1lWzBdLHRoaXMuX3N3aXBlVG91Y2g9clswXS5pZGVudGlmaWVyKTp0aGlzLl90YXAudG91Y2hzdGFydCh0LGUscikpfSxsaS5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl90YXBUaW1lKXtpZih0aGlzLl9zd2lwZVBvaW50KXtpZihyWzBdLmlkZW50aWZpZXIhPT10aGlzLl9zd2lwZVRvdWNoKXJldHVybjt2YXIgbj1lWzBdLGk9bi55LXRoaXMuX3N3aXBlUG9pbnQueTtyZXR1cm4gdGhpcy5fc3dpcGVQb2ludD1uLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9hY3RpdmU9ITAse3pvb21EZWx0YTppLzEyOH19fWVsc2UgdGhpcy5fdGFwLnRvdWNobW92ZSh0LGUscil9LGxpLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0LGUscil7dGhpcy5fdGFwVGltZT90aGlzLl9zd2lwZVBvaW50JiYwPT09ci5sZW5ndGgmJnRoaXMucmVzZXQoKTp0aGlzLl90YXAudG91Y2hlbmQodCxlLHIpJiYodGhpcy5fdGFwVGltZT10LnRpbWVTdGFtcCl9LGxpLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sbGkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LGxpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LGxpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sbGkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIGNpPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9lbD10LHRoaXMuX21vdXNlUGFuPWUsdGhpcy5fdG91Y2hQYW49cn07Y2kucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLl9pbmVydGlhT3B0aW9ucz10fHx7fSx0aGlzLl9tb3VzZVBhbi5lbmFibGUoKSx0aGlzLl90b3VjaFBhbi5lbmFibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10b3VjaC1kcmFnLXBhbiIpfSxjaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX21vdXNlUGFuLmRpc2FibGUoKSx0aGlzLl90b3VjaFBhbi5kaXNhYmxlKCksdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdG91Y2gtZHJhZy1wYW4iKX0sY2kucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3VzZVBhbi5pc0VuYWJsZWQoKSYmdGhpcy5fdG91Y2hQYW4uaXNFbmFibGVkKCl9LGNpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3VzZVBhbi5pc0FjdGl2ZSgpfHx0aGlzLl90b3VjaFBhbi5pc0FjdGl2ZSgpfTt2YXIgdWk9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3BpdGNoV2l0aFJvdGF0ZT10LnBpdGNoV2l0aFJvdGF0ZSx0aGlzLl9tb3VzZVJvdGF0ZT1lLHRoaXMuX21vdXNlUGl0Y2g9cn07dWkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX21vdXNlUm90YXRlLmVuYWJsZSgpLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmdGhpcy5fbW91c2VQaXRjaC5lbmFibGUoKX0sdWkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZVJvdGF0ZS5kaXNhYmxlKCksdGhpcy5fbW91c2VQaXRjaC5kaXNhYmxlKCl9LHVpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW91c2VSb3RhdGUuaXNFbmFibGVkKCkmJighdGhpcy5fcGl0Y2hXaXRoUm90YXRlfHx0aGlzLl9tb3VzZVBpdGNoLmlzRW5hYmxlZCgpKX0sdWkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdXNlUm90YXRlLmlzQWN0aXZlKCl8fHRoaXMuX21vdXNlUGl0Y2guaXNBY3RpdmUoKX07dmFyIGZpPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuX2VsPXQsdGhpcy5fdG91Y2hab29tPWUsdGhpcy5fdG91Y2hSb3RhdGU9cix0aGlzLl90YXBEcmFnWm9vbT1uLHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITEsdGhpcy5fZW5hYmxlZD0hMH07ZmkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLl90b3VjaFpvb20uZW5hYmxlKHQpLHRoaXMuX3JvdGF0aW9uRGlzYWJsZWR8fHRoaXMuX3RvdWNoUm90YXRlLmVuYWJsZSh0KSx0aGlzLl90YXBEcmFnWm9vbS5lbmFibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZSIpfSxmaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX3RvdWNoWm9vbS5kaXNhYmxlKCksdGhpcy5fdG91Y2hSb3RhdGUuZGlzYWJsZSgpLHRoaXMuX3RhcERyYWdab29tLmRpc2FibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZSIpfSxmaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RvdWNoWm9vbS5pc0VuYWJsZWQoKSYmKHRoaXMuX3JvdGF0aW9uRGlzYWJsZWR8fHRoaXMuX3RvdWNoUm90YXRlLmlzRW5hYmxlZCgpKSYmdGhpcy5fdGFwRHJhZ1pvb20uaXNFbmFibGVkKCl9LGZpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90b3VjaFpvb20uaXNBY3RpdmUoKXx8dGhpcy5fdG91Y2hSb3RhdGUuaXNBY3RpdmUoKXx8dGhpcy5fdGFwRHJhZ1pvb20uaXNBY3RpdmUoKX0sZmkucHJvdG90eXBlLmRpc2FibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITAsdGhpcy5fdG91Y2hSb3RhdGUuZGlzYWJsZSgpfSxmaS5wcm90b3R5cGUuZW5hYmxlUm90YXRpb249ZnVuY3Rpb24oKXt0aGlzLl9yb3RhdGlvbkRpc2FibGVkPSExLHRoaXMuX3RvdWNoWm9vbS5pc0VuYWJsZWQoKSYmdGhpcy5fdG91Y2hSb3RhdGUuZW5hYmxlKCl9O3ZhciBoaT1mdW5jdGlvbih0KXtyZXR1cm4gdC56b29tfHx0LmRyYWd8fHQucGl0Y2h8fHQucm90YXRlfSxwaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZX0odC5FdmVudCk7ZnVuY3Rpb24gZGkodCl7cmV0dXJuIHQucGFuRGVsdGEmJnQucGFuRGVsdGEubWFnKCl8fHQuem9vbURlbHRhfHx0LmJlYXJpbmdEZWx0YXx8dC5waXRjaERlbHRhfXZhciBnaT1mdW5jdGlvbihlLG4pe3RoaXMuX21hcD1lLHRoaXMuX2VsPXRoaXMuX21hcC5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9oYW5kbGVycz1bXSx0aGlzLl9oYW5kbGVyc0J5SWQ9e30sdGhpcy5fY2hhbmdlcz1bXSx0aGlzLl9pbmVydGlhPW5ldyBMbihlKSx0aGlzLl9iZWFyaW5nU25hcD1uLmJlYXJpbmdTbmFwLHRoaXMuX3ByZXZpb3VzQWN0aXZlSGFuZGxlcnM9e30sdGhpcy5fZXZlbnRzSW5Qcm9ncmVzcz17fSx0aGlzLl9hZGREZWZhdWx0SGFuZGxlcnMobiksdC5iaW5kQWxsKFsiaGFuZGxlRXZlbnQiLCJoYW5kbGVXaW5kb3dFdmVudCJdLHRoaXMpO3ZhciBpPXRoaXMuX2VsO3RoaXMuX2xpc3RlbmVycz1bW2ksInRvdWNoc3RhcnQiLHtwYXNzaXZlOiExfV0sW2ksInRvdWNobW92ZSIse3Bhc3NpdmU6ITF9XSxbaSwidG91Y2hlbmQiLHZvaWQgMF0sW2ksInRvdWNoY2FuY2VsIix2b2lkIDBdLFtpLCJtb3VzZWRvd24iLHZvaWQgMF0sW2ksIm1vdXNlbW92ZSIsdm9pZCAwXSxbaSwibW91c2V1cCIsdm9pZCAwXSxbdC53aW5kb3cuZG9jdW1lbnQsIm1vdXNlbW92ZSIse2NhcHR1cmU6ITB9XSxbdC53aW5kb3cuZG9jdW1lbnQsIm1vdXNldXAiLHZvaWQgMF0sW2ksIm1vdXNlb3ZlciIsdm9pZCAwXSxbaSwibW91c2VvdXQiLHZvaWQgMF0sW2ksImRibGNsaWNrIix2b2lkIDBdLFtpLCJjbGljayIsdm9pZCAwXSxbaSwia2V5ZG93biIse2NhcHR1cmU6ITF9XSxbaSwia2V5dXAiLHZvaWQgMF0sW2ksIndoZWVsIix7cGFzc2l2ZTohMX1dLFtpLCJjb250ZXh0bWVudSIsdm9pZCAwXSxbdC53aW5kb3csImJsdXIiLHZvaWQgMF1dO2Zvcih2YXIgYT0wLG89dGhpcy5fbGlzdGVuZXJzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXNbMF07ci5hZGRFdmVudExpc3RlbmVyKGwsc1sxXSxsPT09dC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5oYW5kbGVXaW5kb3dFdmVudDp0aGlzLmhhbmRsZUV2ZW50LHNbMl0pfX07Z2kucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxuPXRoaXMuX2xpc3RlbmVycztlPG4ubGVuZ3RoO2UrPTEpe3ZhciBpPW5bZV0sYT1pWzBdO3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGlbMV0sYT09PXQud2luZG93LmRvY3VtZW50P3RoaXMuaGFuZGxlV2luZG93RXZlbnQ6dGhpcy5oYW5kbGVFdmVudCxpWzJdKX19LGdpLnByb3RvdHlwZS5fYWRkRGVmYXVsdEhhbmRsZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxyPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCk7dGhpcy5fYWRkKCJtYXBFdmVudCIsbmV3IFJuKGUsdCkpO3ZhciBuPWUuYm94Wm9vbT1uZXcgQm4oZSx0KTt0aGlzLl9hZGQoImJveFpvb20iLG4pO3ZhciBpPW5ldyBWbixhPW5ldyBzaTtlLmRvdWJsZUNsaWNrWm9vbT1uZXcgb2koYSxpKSx0aGlzLl9hZGQoInRhcFpvb20iLGkpLHRoaXMuX2FkZCgiY2xpY2tab29tIixhKTt2YXIgbz1uZXcgbGk7dGhpcy5fYWRkKCJ0YXBEcmFnWm9vbSIsbyk7dmFyIHM9ZS50b3VjaFBpdGNoPW5ldyBlaTt0aGlzLl9hZGQoInRvdWNoUGl0Y2giLHMpO3ZhciBsPW5ldyBHbih0KSxjPW5ldyBZbih0KTtlLmRyYWdSb3RhdGU9bmV3IHVpKHQsbCxjKSx0aGlzLl9hZGQoIm1vdXNlUm90YXRlIixsLFsibW91c2VQaXRjaCJdKSx0aGlzLl9hZGQoIm1vdXNlUGl0Y2giLGMsWyJtb3VzZVJvdGF0ZSJdKTt2YXIgdT1uZXcgSG4odCksZj1uZXcgV24odCk7ZS5kcmFnUGFuPW5ldyBjaShyLHUsZiksdGhpcy5fYWRkKCJtb3VzZVBhbiIsdSksdGhpcy5fYWRkKCJ0b3VjaFBhbiIsZixbInRvdWNoWm9vbSIsInRvdWNoUm90YXRlIl0pO3ZhciBoPW5ldyAkbixwPW5ldyBLbjtlLnRvdWNoWm9vbVJvdGF0ZT1uZXcgZmkocixwLGgsbyksdGhpcy5fYWRkKCJ0b3VjaFJvdGF0ZSIsaCxbInRvdWNoUGFuIiwidG91Y2hab29tIl0pLHRoaXMuX2FkZCgidG91Y2hab29tIixwLFsidG91Y2hQYW4iLCJ0b3VjaFJvdGF0ZSJdKTt2YXIgZD1lLnNjcm9sbFpvb209bmV3IGFpKGUsdGhpcyk7dGhpcy5fYWRkKCJzY3JvbGxab29tIixkLFsibW91c2VQYW4iXSk7dmFyIGc9ZS5rZXlib2FyZD1uZXcgbmk7dGhpcy5fYWRkKCJrZXlib2FyZCIsZyksdGhpcy5fYWRkKCJibG9ja2FibGVNYXBFdmVudCIsbmV3IEZuKGUpKTtmb3IodmFyIG09MCx2PVsiYm94Wm9vbSIsImRvdWJsZUNsaWNrWm9vbSIsInRhcERyYWdab29tIiwidG91Y2hQaXRjaCIsImRyYWdSb3RhdGUiLCJkcmFnUGFuIiwidG91Y2hab29tUm90YXRlIiwic2Nyb2xsWm9vbSIsImtleWJvYXJkIl07bTx2Lmxlbmd0aDttKz0xKXt2YXIgeT12W21dO3QuaW50ZXJhY3RpdmUmJnRbeV0mJmVbeV0uZW5hYmxlKHRbeV0pfX0sZ2kucHJvdG90eXBlLl9hZGQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2hhbmRsZXJzLnB1c2goe2hhbmRsZXJOYW1lOnQsaGFuZGxlcjplLGFsbG93ZWQ6cn0pLHRoaXMuX2hhbmRsZXJzQnlJZFt0XT1lfSxnaS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe2lmKCF0aGlzLl91cGRhdGluZ0NhbWVyYSl7Zm9yKHZhciB0PTAsZT10aGlzLl9oYW5kbGVyczt0PGUubGVuZ3RoO3QrPTEpZVt0XS5oYW5kbGVyLnJlc2V0KCk7dGhpcy5faW5lcnRpYS5jbGVhcigpLHRoaXMuX2ZpcmVFdmVudHMoe30se30pLHRoaXMuX2NoYW5nZXM9W119fSxnaS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuX2hhbmRsZXJzO3Q8ZS5sZW5ndGg7dCs9MSlpZihlW3RdLmhhbmRsZXIuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX0sZ2kucHJvdG90eXBlLmlzWm9vbWluZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZXZlbnRzSW5Qcm9ncmVzcy56b29tfHx0aGlzLl9tYXAuc2Nyb2xsWm9vbS5pc1pvb21pbmcoKX0sZ2kucHJvdG90eXBlLmlzUm90YXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2V2ZW50c0luUHJvZ3Jlc3Mucm90YXRlfSxnaS5wcm90b3R5cGUuaXNNb3Zpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihoaSh0aGlzLl9ldmVudHNJblByb2dyZXNzKSl8fHRoaXMuaXNab29taW5nKCl9LGdpLnByb3RvdHlwZS5fYmxvY2tlZEJ5QWN0aXZlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gdClpZihuIT09ciYmKCFlfHxlLmluZGV4T2Yobik8MCkpcmV0dXJuITA7cmV0dXJuITF9LGdpLnByb3RvdHlwZS5oYW5kbGVXaW5kb3dFdmVudD1mdW5jdGlvbih0KXt0aGlzLmhhbmRsZUV2ZW50KHQsdC50eXBlKyJXaW5kb3ciKX0sZ2kucHJvdG90eXBlLl9nZXRNYXBUb3VjaGVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTt0aGlzLl9lbC5jb250YWlucyhpLnRhcmdldCkmJmUucHVzaChpKX1yZXR1cm4gZX0sZ2kucHJvdG90eXBlLmhhbmRsZUV2ZW50PWZ1bmN0aW9uKHQsZSl7aWYoImJsdXIiIT09dC50eXBlKXt0aGlzLl91cGRhdGluZ0NhbWVyYT0hMDtmb3IodmFyIG49InJlbmRlckZyYW1lIj09PXQudHlwZT92b2lkIDA6dCxpPXtuZWVkc1JlbmRlckZyYW1lOiExfSxhPXt9LG89e30scz10LnRvdWNoZXM/dGhpcy5fZ2V0TWFwVG91Y2hlcyh0LnRvdWNoZXMpOnZvaWQgMCxsPXM/ci50b3VjaFBvcyh0aGlzLl9lbCxzKTpyLm1vdXNlUG9zKHRoaXMuX2VsLHQpLGM9MCx1PXRoaXMuX2hhbmRsZXJzO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPWYuaGFuZGxlck5hbWUscD1mLmhhbmRsZXIsZD1mLmFsbG93ZWQ7aWYocC5pc0VuYWJsZWQoKSl7dmFyIGc9dm9pZCAwO3RoaXMuX2Jsb2NrZWRCeUFjdGl2ZShvLGQsaCk/cC5yZXNldCgpOnBbZXx8dC50eXBlXSYmKGc9cFtlfHx0LnR5cGVdKHQsbCxzKSx0aGlzLm1lcmdlSGFuZGxlclJlc3VsdChpLGEsZyxoLG4pLGcmJmcubmVlZHNSZW5kZXJGcmFtZSYmdGhpcy5fdHJpZ2dlclJlbmRlckZyYW1lKCkpLChnfHxwLmlzQWN0aXZlKCkpJiYob1toXT1wKX19dmFyIG09e307Zm9yKHZhciB2IGluIHRoaXMuX3ByZXZpb3VzQWN0aXZlSGFuZGxlcnMpb1t2XXx8KG1bdl09bik7dGhpcy5fcHJldmlvdXNBY3RpdmVIYW5kbGVycz1vLChPYmplY3Qua2V5cyhtKS5sZW5ndGh8fGRpKGkpKSYmKHRoaXMuX2NoYW5nZXMucHVzaChbaSxhLG1dKSx0aGlzLl90cmlnZ2VyUmVuZGVyRnJhbWUoKSksKE9iamVjdC5rZXlzKG8pLmxlbmd0aHx8ZGkoaSkpJiZ0aGlzLl9tYXAuX3N0b3AoITApLHRoaXMuX3VwZGF0aW5nQ2FtZXJhPSExO3ZhciB5PWkuY2FtZXJhQW5pbWF0aW9uO3kmJih0aGlzLl9pbmVydGlhLmNsZWFyKCksdGhpcy5fZmlyZUV2ZW50cyh7fSx7fSksdGhpcy5fY2hhbmdlcz1bXSx5KHRoaXMuX21hcCkpfWVsc2UgdGhpcy5zdG9wKCl9LGdpLnByb3RvdHlwZS5tZXJnZUhhbmRsZXJSZXN1bHQ9ZnVuY3Rpb24oZSxyLG4saSxhKXtpZihuKXt0LmV4dGVuZChlLG4pO3ZhciBvPXtoYW5kbGVyTmFtZTppLG9yaWdpbmFsRXZlbnQ6bi5vcmlnaW5hbEV2ZW50fHxhfTt2b2lkIDAhPT1uLnpvb21EZWx0YSYmKHIuem9vbT1vKSx2b2lkIDAhPT1uLnBhbkRlbHRhJiYoci5kcmFnPW8pLHZvaWQgMCE9PW4ucGl0Y2hEZWx0YSYmKHIucGl0Y2g9byksdm9pZCAwIT09bi5iZWFyaW5nRGVsdGEmJihyLnJvdGF0ZT1vKX19LGdpLnByb3RvdHlwZS5fYXBwbHlDaGFuZ2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXt9LHI9e30sbj17fSxpPTAsYT10aGlzLl9jaGFuZ2VzO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW9bMF0sbD1vWzFdLGM9b1syXTtzLnBhbkRlbHRhJiYoZS5wYW5EZWx0YT0oZS5wYW5EZWx0YXx8bmV3IHQuUG9pbnQoMCwwKSkuX2FkZChzLnBhbkRlbHRhKSkscy56b29tRGVsdGEmJihlLnpvb21EZWx0YT0oZS56b29tRGVsdGF8fDApK3Muem9vbURlbHRhKSxzLmJlYXJpbmdEZWx0YSYmKGUuYmVhcmluZ0RlbHRhPShlLmJlYXJpbmdEZWx0YXx8MCkrcy5iZWFyaW5nRGVsdGEpLHMucGl0Y2hEZWx0YSYmKGUucGl0Y2hEZWx0YT0oZS5waXRjaERlbHRhfHwwKStzLnBpdGNoRGVsdGEpLHZvaWQgMCE9PXMuYXJvdW5kJiYoZS5hcm91bmQ9cy5hcm91bmQpLHZvaWQgMCE9PXMucGluY2hBcm91bmQmJihlLnBpbmNoQXJvdW5kPXMucGluY2hBcm91bmQpLHMubm9JbmVydGlhJiYoZS5ub0luZXJ0aWE9cy5ub0luZXJ0aWEpLHQuZXh0ZW5kKHIsbCksdC5leHRlbmQobixjKX10aGlzLl91cGRhdGVNYXBUcmFuc2Zvcm0oZSxyLG4pLHRoaXMuX2NoYW5nZXM9W119LGdpLnByb3RvdHlwZS5fdXBkYXRlTWFwVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9tYXAsaT1uLnRyYW5zZm9ybTtpZighZGkodCkpcmV0dXJuIHRoaXMuX2ZpcmVFdmVudHMoZSxyKTt2YXIgYT10LnBhbkRlbHRhLG89dC56b29tRGVsdGEscz10LmJlYXJpbmdEZWx0YSxsPXQucGl0Y2hEZWx0YSxjPXQuYXJvdW5kLHU9dC5waW5jaEFyb3VuZDt2b2lkIDAhPT11JiYoYz11KSxuLl9zdG9wKCEwKSxjPWN8fG4udHJhbnNmb3JtLmNlbnRlclBvaW50O3ZhciBmPWkucG9pbnRMb2NhdGlvbihhP2Muc3ViKGEpOmMpO3MmJihpLmJlYXJpbmcrPXMpLGwmJihpLnBpdGNoKz1sKSxvJiYoaS56b29tKz1vKSxpLnNldExvY2F0aW9uQXRQb2ludChmLGMpLHRoaXMuX21hcC5fdXBkYXRlKCksdC5ub0luZXJ0aWF8fHRoaXMuX2luZXJ0aWEucmVjb3JkKHQpLHRoaXMuX2ZpcmVFdmVudHMoZSxyKX0sZ2kucHJvdG90eXBlLl9maXJlRXZlbnRzPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPWhpKHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3MpLGE9aGkoZSksbz17fTtmb3IodmFyIHMgaW4gZSl0aGlzLl9ldmVudHNJblByb2dyZXNzW3NdfHwob1tzKyJzdGFydCJdPWVbc10ub3JpZ2luYWxFdmVudCksdGhpcy5fZXZlbnRzSW5Qcm9ncmVzc1tzXT1lW3NdO2Zvcih2YXIgbCBpbiFpJiZhJiZ0aGlzLl9maXJlRXZlbnQoIm1vdmVzdGFydCIsYS5vcmlnaW5hbEV2ZW50KSxvKXRoaXMuX2ZpcmVFdmVudChsLG9bbF0pO2Zvcih2YXIgYyBpbiBlLnJvdGF0ZSYmKHRoaXMuX2JlYXJpbmdDaGFuZ2VkPSEwKSxhJiZ0aGlzLl9maXJlRXZlbnQoIm1vdmUiLGEub3JpZ2luYWxFdmVudCksZSl0aGlzLl9maXJlRXZlbnQoYyxlW2NdLm9yaWdpbmFsRXZlbnQpO3ZhciB1LGY9e307Zm9yKHZhciBoIGluIHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3Mpe3ZhciBwPXRoaXMuX2V2ZW50c0luUHJvZ3Jlc3NbaF0sZD1wLmhhbmRsZXJOYW1lLGc9cC5vcmlnaW5hbEV2ZW50O3RoaXMuX2hhbmRsZXJzQnlJZFtkXS5pc0FjdGl2ZSgpfHwoZGVsZXRlIHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3NbaF0sZltoKyJlbmQiXT11PXJbZF18fGcpfWZvcih2YXIgbSBpbiBmKXRoaXMuX2ZpcmVFdmVudChtLGZbbV0pO3ZhciB2PWhpKHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3MpO2lmKChpfHxhKSYmIXYpe3RoaXMuX3VwZGF0aW5nQ2FtZXJhPSEwO3ZhciB5PXRoaXMuX2luZXJ0aWEuX29uTW92ZUVuZCh0aGlzLl9tYXAuZHJhZ1Bhbi5faW5lcnRpYU9wdGlvbnMpLHg9ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10JiYtbi5fYmVhcmluZ1NuYXA8dCYmdDxuLl9iZWFyaW5nU25hcH07eT8oeCh5LmJlYXJpbmd8fHRoaXMuX21hcC5nZXRCZWFyaW5nKCkpJiYoeS5iZWFyaW5nPTApLHRoaXMuX21hcC5lYXNlVG8oeSx7b3JpZ2luYWxFdmVudDp1fSkpOih0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIse29yaWdpbmFsRXZlbnQ6dX0pKSx4KHRoaXMuX21hcC5nZXRCZWFyaW5nKCkpJiZ0aGlzLl9tYXAucmVzZXROb3J0aCgpKSx0aGlzLl9iZWFyaW5nQ2hhbmdlZD0hMSx0aGlzLl91cGRhdGluZ0NhbWVyYT0hMX19LGdpLnByb3RvdHlwZS5fZmlyZUV2ZW50PWZ1bmN0aW9uKGUscil7dGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSxyP3tvcmlnaW5hbEV2ZW50OnJ9Ont9KSl9LGdpLnByb3RvdHlwZS5fdHJpZ2dlclJlbmRlckZyYW1lPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt2b2lkIDA9PT10aGlzLl9mcmFtZUlkJiYodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSgoZnVuY3Rpb24oZSl7ZGVsZXRlIHQuX2ZyYW1lSWQsdC5oYW5kbGVFdmVudChuZXcgcGkoInJlbmRlckZyYW1lIix7dGltZVN0YW1wOmV9KSksdC5fYXBwbHlDaGFuZ2VzKCl9KSkpfTt2YXIgbWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4pe2UuY2FsbCh0aGlzKSx0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLnRyYW5zZm9ybT1yLHRoaXMuX2JlYXJpbmdTbmFwPW4uYmVhcmluZ1NuYXAsdC5iaW5kQWxsKFsiX3JlbmRlckZyYW1lQ2FsbGJhY2siXSx0aGlzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLChyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQuTG5nTGF0KHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcsdGhpcy50cmFuc2Zvcm0uY2VudGVyLmxhdCl9LHIucHJvdG90eXBlLnNldENlbnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7Y2VudGVyOnR9LGUpfSxyLnByb3RvdHlwZS5wYW5CeT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9dC5Qb2ludC5jb252ZXJ0KGUpLm11bHQoLTEpLHRoaXMucGFuVG8odGhpcy50cmFuc2Zvcm0uY2VudGVyLHQuZXh0ZW5kKHtvZmZzZXQ6ZX0sciksbil9LHIucHJvdG90eXBlLnBhblRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2NlbnRlcjplfSxyKSxuKX0sci5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS56b29tfSxyLnByb3RvdHlwZS5zZXRab29tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHt6b29tOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21Ubz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHt6b29tOmV9LHIpLG4pfSxyLnByb3RvdHlwZS56b29tSW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkrMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21PdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCktMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldEJlYXJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZ30sci5wcm90b3R5cGUuc2V0QmVhcmluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7YmVhcmluZzp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRQYWRkaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBhZGRpbmd9LHIucHJvdG90eXBlLnNldFBhZGRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe3BhZGRpbmc6dH0sZSksdGhpc30sci5wcm90b3R5cGUucm90YXRlVG89ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVhc2VUbyh0LmV4dGVuZCh7YmVhcmluZzplfSxyKSxuKX0sci5wcm90b3R5cGUucmVzZXROb3J0aD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLnJvdGF0ZVRvKDAsdC5leHRlbmQoe2R1cmF0aW9uOjFlM30sZSksciksdGhpc30sci5wcm90b3R5cGUucmVzZXROb3J0aFBpdGNoPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHtiZWFyaW5nOjAscGl0Y2g6MCxkdXJhdGlvbjoxZTN9LGUpLHIpLHRoaXN9LHIucHJvdG90eXBlLnNuYXBUb05vcnRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKHRoaXMuZ2V0QmVhcmluZygpKTx0aGlzLl9iZWFyaW5nU25hcD90aGlzLnJlc2V0Tm9ydGgodCxlKTp0aGlzfSxyLnByb3RvdHlwZS5nZXRQaXRjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5waXRjaH0sci5wcm90b3R5cGUuc2V0UGl0Y2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe3BpdGNoOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLmNhbWVyYUZvckJvdW5kcz1mdW5jdGlvbihlLHIpe3JldHVybiBlPXQuTG5nTGF0Qm91bmRzLmNvbnZlcnQoZSksdGhpcy5fY2FtZXJhRm9yQm94QW5kQmVhcmluZyhlLmdldE5vcnRoV2VzdCgpLGUuZ2V0U291dGhFYXN0KCksMCxyKX0sci5wcm90b3R5cGUuX2NhbWVyYUZvckJveEFuZEJlYXJpbmc9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9e3RvcDowLGJvdHRvbTowLHJpZ2h0OjAsbGVmdDowfTtpZigibnVtYmVyIj09dHlwZW9mKGk9dC5leHRlbmQoe3BhZGRpbmc6YSxvZmZzZXQ6WzAsMF0sbWF4Wm9vbTp0aGlzLnRyYW5zZm9ybS5tYXhab29tfSxpKSkucGFkZGluZyl7dmFyIG89aS5wYWRkaW5nO2kucGFkZGluZz17dG9wOm8sYm90dG9tOm8scmlnaHQ6byxsZWZ0Om99fWkucGFkZGluZz10LmV4dGVuZChhLGkucGFkZGluZyk7dmFyIHM9dGhpcy50cmFuc2Zvcm0sbD1zLnBhZGRpbmcsYz1zLnByb2plY3QodC5MbmdMYXQuY29udmVydChlKSksdT1zLnByb2plY3QodC5MbmdMYXQuY29udmVydChyKSksZj1jLnJvdGF0ZSgtbipNYXRoLlBJLzE4MCksaD11LnJvdGF0ZSgtbipNYXRoLlBJLzE4MCkscD1uZXcgdC5Qb2ludChNYXRoLm1heChmLngsaC54KSxNYXRoLm1heChmLnksaC55KSksZD1uZXcgdC5Qb2ludChNYXRoLm1pbihmLngsaC54KSxNYXRoLm1pbihmLnksaC55KSksZz1wLnN1YihkKSxtPShzLndpZHRoLShsLmxlZnQrbC5yaWdodCtpLnBhZGRpbmcubGVmdCtpLnBhZGRpbmcucmlnaHQpKS9nLngsdj0ocy5oZWlnaHQtKGwudG9wK2wuYm90dG9tK2kucGFkZGluZy50b3AraS5wYWRkaW5nLmJvdHRvbSkpL2cueTtpZighKHY8MHx8bTwwKSl7dmFyIHk9TWF0aC5taW4ocy5zY2FsZVpvb20ocy5zY2FsZSpNYXRoLm1pbihtLHYpKSxpLm1heFpvb20pLHg9dC5Qb2ludC5jb252ZXJ0KGkub2Zmc2V0KSxiPW5ldyB0LlBvaW50KHgueCsoaS5wYWRkaW5nLmxlZnQtaS5wYWRkaW5nLnJpZ2h0KS8yLHgueSsoaS5wYWRkaW5nLnRvcC1pLnBhZGRpbmcuYm90dG9tKS8yKS5tdWx0KHMuc2NhbGUvcy56b29tU2NhbGUoeSkpO3JldHVybntjZW50ZXI6cy51bnByb2plY3QoYy5hZGQodSkuZGl2KDIpLnN1YihiKSksem9vbTp5LGJlYXJpbmc6bn19dC53YXJuT25jZSgiTWFwIGNhbm5vdCBmaXQgd2l0aGluIGNhbnZhcyB3aXRoIHRoZSBnaXZlbiBib3VuZHMsIHBhZGRpbmcsIGFuZC9vciBvZmZzZXQuIil9LHIucHJvdG90eXBlLmZpdEJvdW5kcz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2ZpdEludGVybmFsKHRoaXMuY2FtZXJhRm9yQm91bmRzKHQsZSksZSxyKX0sci5wcm90b3R5cGUuZml0U2NyZWVuQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fZml0SW50ZXJuYWwodGhpcy5fY2FtZXJhRm9yQm94QW5kQmVhcmluZyh0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHQuUG9pbnQuY29udmVydChlKSksdGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbih0LlBvaW50LmNvbnZlcnQocikpLG4saSksaSxhKX0sci5wcm90b3R5cGUuX2ZpdEludGVybmFsPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT8oZGVsZXRlKHI9dC5leHRlbmQoZSxyKSkucGFkZGluZyxyLmxpbmVhcj90aGlzLmVhc2VUbyhyLG4pOnRoaXMuZmx5VG8ocixuKSk6dGhpc30sci5wcm90b3R5cGUuanVtcFRvPWZ1bmN0aW9uKGUscil7dGhpcy5zdG9wKCk7dmFyIG49dGhpcy50cmFuc2Zvcm0saT0hMSxhPSExLG89ITE7cmV0dXJuInpvb20iaW4gZSYmbi56b29tIT09K2Uuem9vbSYmKGk9ITAsbi56b29tPStlLnpvb20pLHZvaWQgMCE9PWUuY2VudGVyJiYobi5jZW50ZXI9dC5MbmdMYXQuY29udmVydChlLmNlbnRlcikpLCJiZWFyaW5nImluIGUmJm4uYmVhcmluZyE9PStlLmJlYXJpbmcmJihhPSEwLG4uYmVhcmluZz0rZS5iZWFyaW5nKSwicGl0Y2giaW4gZSYmbi5waXRjaCE9PStlLnBpdGNoJiYobz0hMCxuLnBpdGNoPStlLnBpdGNoKSxudWxsPT1lLnBhZGRpbmd8fG4uaXNQYWRkaW5nRXF1YWwoZS5wYWRkaW5nKXx8KG4ucGFkZGluZz1lLnBhZGRpbmcpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgibW92ZSIscikpLGkmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbXN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgiem9vbSIscikpLmZpcmUobmV3IHQuRXZlbnQoInpvb21lbmQiLHIpKSxhJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZXN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgicm90YXRlIixyKSkuZmlyZShuZXcgdC5FdmVudCgicm90YXRlZW5kIixyKSksbyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaHN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgicGl0Y2giLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaGVuZCIscikpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIscikpfSxyLnByb3RvdHlwZS5lYXNlVG89ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3RoaXMuX3N0b3AoITEsZS5lYXNlSWQpLCghMT09PShlPXQuZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sZHVyYXRpb246NTAwLGVhc2luZzp0LmVhc2V9LGUpKS5hbmltYXRlfHwhZS5lc3NlbnRpYWwmJnQuYnJvd3Nlci5wcmVmZXJzUmVkdWNlZE1vdGlvbikmJihlLmR1cmF0aW9uPTApO3ZhciBpPXRoaXMudHJhbnNmb3JtLGE9dGhpcy5nZXRab29tKCksbz10aGlzLmdldEJlYXJpbmcoKSxzPXRoaXMuZ2V0UGl0Y2goKSxsPXRoaXMuZ2V0UGFkZGluZygpLGM9Inpvb20iaW4gZT8rZS56b29tOmEsdT0iYmVhcmluZyJpbiBlP3RoaXMuX25vcm1hbGl6ZUJlYXJpbmcoZS5iZWFyaW5nLG8pOm8sZj0icGl0Y2giaW4gZT8rZS5waXRjaDpzLGg9InBhZGRpbmciaW4gZT9lLnBhZGRpbmc6aS5wYWRkaW5nLHA9dC5Qb2ludC5jb252ZXJ0KGUub2Zmc2V0KSxkPWkuY2VudGVyUG9pbnQuYWRkKHApLGc9aS5wb2ludExvY2F0aW9uKGQpLG09dC5MbmdMYXQuY29udmVydChlLmNlbnRlcnx8Zyk7dGhpcy5fbm9ybWFsaXplQ2VudGVyKG0pO3ZhciB2LHkseD1pLnByb2plY3QoZyksYj1pLnByb2plY3QobSkuc3ViKHgpLF89aS56b29tU2NhbGUoYy1hKTtlLmFyb3VuZCYmKHY9dC5MbmdMYXQuY29udmVydChlLmFyb3VuZCkseT1pLmxvY2F0aW9uUG9pbnQodikpO3ZhciB3PXttb3Zpbmc6dGhpcy5fbW92aW5nLHpvb21pbmc6dGhpcy5fem9vbWluZyxyb3RhdGluZzp0aGlzLl9yb3RhdGluZyxwaXRjaGluZzp0aGlzLl9waXRjaGluZ307cmV0dXJuIHRoaXMuX3pvb21pbmc9dGhpcy5fem9vbWluZ3x8YyE9PWEsdGhpcy5fcm90YXRpbmc9dGhpcy5fcm90YXRpbmd8fG8hPT11LHRoaXMuX3BpdGNoaW5nPXRoaXMuX3BpdGNoaW5nfHxmIT09cyx0aGlzLl9wYWRkaW5nPSFpLmlzUGFkZGluZ0VxdWFsKGgpLHRoaXMuX2Vhc2VJZD1lLmVhc2VJZCx0aGlzLl9wcmVwYXJlRWFzZShyLGUubm9Nb3ZlU3RhcnQsdyksY2xlYXJUaW1lb3V0KHRoaXMuX2Vhc2VFbmRUaW1lb3V0SUQpLHRoaXMuX2Vhc2UoKGZ1bmN0aW9uKGUpe2lmKG4uX3pvb21pbmcmJihpLnpvb209dC5udW1iZXIoYSxjLGUpKSxuLl9yb3RhdGluZyYmKGkuYmVhcmluZz10Lm51bWJlcihvLHUsZSkpLG4uX3BpdGNoaW5nJiYoaS5waXRjaD10Lm51bWJlcihzLGYsZSkpLG4uX3BhZGRpbmcmJihpLmludGVycG9sYXRlUGFkZGluZyhsLGgsZSksZD1pLmNlbnRlclBvaW50LmFkZChwKSksdilpLnNldExvY2F0aW9uQXRQb2ludCh2LHkpO2Vsc2V7dmFyIGc9aS56b29tU2NhbGUoaS56b29tLWEpLG09Yz5hP01hdGgubWluKDIsXyk6TWF0aC5tYXgoLjUsXyksdz1NYXRoLnBvdyhtLDEtZSksVD1pLnVucHJvamVjdCh4LmFkZChiLm11bHQoZSp3KSkubXVsdChnKSk7aS5zZXRMb2NhdGlvbkF0UG9pbnQoaS5yZW5kZXJXb3JsZENvcGllcz9ULndyYXAoKTpULGQpfW4uX2ZpcmVNb3ZlRXZlbnRzKHIpfSksKGZ1bmN0aW9uKHQpe24uX2FmdGVyRWFzZShyLHQpfSksZSksdGhpc30sci5wcm90b3R5cGUuX3ByZXBhcmVFYXNlPWZ1bmN0aW9uKGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksdGhpcy5fbW92aW5nPSEwLHJ8fG4ubW92aW5nfHx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVzdGFydCIsZSkpLHRoaXMuX3pvb21pbmcmJiFuLnpvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbXN0YXJ0IixlKSksdGhpcy5fcm90YXRpbmcmJiFuLnJvdGF0aW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZXN0YXJ0IixlKSksdGhpcy5fcGl0Y2hpbmcmJiFuLnBpdGNoaW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoc3RhcnQiLGUpKX0sci5wcm90b3R5cGUuX2ZpcmVNb3ZlRXZlbnRzPWZ1bmN0aW9uKGUpe3RoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZSIsZSkpLHRoaXMuX3pvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbSIsZSkpLHRoaXMuX3JvdGF0aW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZSIsZSkpLHRoaXMuX3BpdGNoaW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoIixlKSl9LHIucHJvdG90eXBlLl9hZnRlckVhc2U9ZnVuY3Rpb24oZSxyKXtpZighdGhpcy5fZWFzZUlkfHwhcnx8dGhpcy5fZWFzZUlkIT09cil7ZGVsZXRlIHRoaXMuX2Vhc2VJZDt2YXIgbj10aGlzLl96b29taW5nLGk9dGhpcy5fcm90YXRpbmcsYT10aGlzLl9waXRjaGluZzt0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLl9yb3RhdGluZz0hMSx0aGlzLl9waXRjaGluZz0hMSx0aGlzLl9wYWRkaW5nPSExLG4mJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbWVuZCIsZSkpLGkmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicm90YXRlZW5kIixlKSksYSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaGVuZCIsZSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIsZSkpfX0sci5wcm90b3R5cGUuZmx5VG89ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2lmKCFlLmVzc2VudGlhbCYmdC5icm93c2VyLnByZWZlcnNSZWR1Y2VkTW90aW9uKXt2YXIgaT10LnBpY2soZSxbImNlbnRlciIsInpvb20iLCJiZWFyaW5nIiwicGl0Y2giLCJhcm91bmQiXSk7cmV0dXJuIHRoaXMuanVtcFRvKGkscil9dGhpcy5zdG9wKCksZT10LmV4dGVuZCh7b2Zmc2V0OlswLDBdLHNwZWVkOjEuMixjdXJ2ZToxLjQyLGVhc2luZzp0LmVhc2V9LGUpO3ZhciBhPXRoaXMudHJhbnNmb3JtLG89dGhpcy5nZXRab29tKCkscz10aGlzLmdldEJlYXJpbmcoKSxsPXRoaXMuZ2V0UGl0Y2goKSxjPXRoaXMuZ2V0UGFkZGluZygpLHU9Inpvb20iaW4gZT90LmNsYW1wKCtlLnpvb20sYS5taW5ab29tLGEubWF4Wm9vbSk6byxmPSJiZWFyaW5nImluIGU/dGhpcy5fbm9ybWFsaXplQmVhcmluZyhlLmJlYXJpbmcscyk6cyxoPSJwaXRjaCJpbiBlPytlLnBpdGNoOmwscD0icGFkZGluZyJpbiBlP2UucGFkZGluZzphLnBhZGRpbmcsZD1hLnpvb21TY2FsZSh1LW8pLGc9dC5Qb2ludC5jb252ZXJ0KGUub2Zmc2V0KSxtPWEuY2VudGVyUG9pbnQuYWRkKGcpLHY9YS5wb2ludExvY2F0aW9uKG0pLHk9dC5MbmdMYXQuY29udmVydChlLmNlbnRlcnx8dik7dGhpcy5fbm9ybWFsaXplQ2VudGVyKHkpO3ZhciB4PWEucHJvamVjdCh2KSxiPWEucHJvamVjdCh5KS5zdWIoeCksXz1lLmN1cnZlLHc9TWF0aC5tYXgoYS53aWR0aCxhLmhlaWdodCksVD13L2Qsaz1iLm1hZygpO2lmKCJtaW5ab29tImluIGUpe3ZhciBNPXQuY2xhbXAoTWF0aC5taW4oZS5taW5ab29tLG8sdSksYS5taW5ab29tLGEubWF4Wm9vbSksQT13L2Euem9vbVNjYWxlKE0tbyk7Xz1NYXRoLnNxcnQoQS9rKjIpfXZhciBTPV8qXztmdW5jdGlvbiBFKHQpe3ZhciBlPShUKlQtdyp3Kyh0Py0xOjEpKlMqUyprKmspLygyKih0P1Q6dykqUyprKTtyZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KGUqZSsxKS1lKX1mdW5jdGlvbiBDKHQpe3JldHVybihNYXRoLmV4cCh0KS1NYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gTCh0KXtyZXR1cm4oTWF0aC5leHAodCkrTWF0aC5leHAoLXQpKS8yfXZhciBJPUUoMCksUD1mdW5jdGlvbih0KXtyZXR1cm4gTChJKS9MKEkrXyp0KX0sej1mdW5jdGlvbih0KXtyZXR1cm4gdyooKEwoSSkqKEMoZT1JK18qdCkvTChlKSktQyhJKSkvUykvazt2YXIgZX0sTz0oRSgxKS1JKS9fO2lmKE1hdGguYWJzKGspPDFlLTZ8fCFpc0Zpbml0ZShPKSl7aWYoTWF0aC5hYnMody1UKTwxZS02KXJldHVybiB0aGlzLmVhc2VUbyhlLHIpO3ZhciBEPVQ8dz8tMToxO089TWF0aC5hYnMoTWF0aC5sb2coVC93KSkvXyx6PWZ1bmN0aW9uKCl7cmV0dXJuIDB9LFA9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZXhwKEQqXyp0KX19cmV0dXJuIGUuZHVyYXRpb249ImR1cmF0aW9uImluIGU/K2UuZHVyYXRpb246MWUzKk8vKCJzY3JlZW5TcGVlZCJpbiBlPytlLnNjcmVlblNwZWVkL186K2Uuc3BlZWQpLGUubWF4RHVyYXRpb24mJmUuZHVyYXRpb24+ZS5tYXhEdXJhdGlvbiYmKGUuZHVyYXRpb249MCksdGhpcy5fem9vbWluZz0hMCx0aGlzLl9yb3RhdGluZz1zIT09Zix0aGlzLl9waXRjaGluZz1oIT09bCx0aGlzLl9wYWRkaW5nPSFhLmlzUGFkZGluZ0VxdWFsKHApLHRoaXMuX3ByZXBhcmVFYXNlKHIsITEpLHRoaXMuX2Vhc2UoKGZ1bmN0aW9uKGUpe3ZhciBpPWUqTyxkPTEvUChpKTthLnpvb209MT09PWU/dTpvK2Euc2NhbGVab29tKGQpLG4uX3JvdGF0aW5nJiYoYS5iZWFyaW5nPXQubnVtYmVyKHMsZixlKSksbi5fcGl0Y2hpbmcmJihhLnBpdGNoPXQubnVtYmVyKGwsaCxlKSksbi5fcGFkZGluZyYmKGEuaW50ZXJwb2xhdGVQYWRkaW5nKGMscCxlKSxtPWEuY2VudGVyUG9pbnQuYWRkKGcpKTt2YXIgdj0xPT09ZT95OmEudW5wcm9qZWN0KHguYWRkKGIubXVsdCh6KGkpKSkubXVsdChkKSk7YS5zZXRMb2NhdGlvbkF0UG9pbnQoYS5yZW5kZXJXb3JsZENvcGllcz92LndyYXAoKTp2LG0pLG4uX2ZpcmVNb3ZlRXZlbnRzKHIpfSksKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2FmdGVyRWFzZShyKX0pLGUpLHRoaXN9LHIucHJvdG90eXBlLmlzRWFzaW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lYXNlRnJhbWVJZH0sci5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdG9wKCl9LHIucHJvdG90eXBlLl9zdG9wPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fZWFzZUZyYW1lSWQmJih0aGlzLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9lYXNlRnJhbWVJZCksZGVsZXRlIHRoaXMuX2Vhc2VGcmFtZUlkLGRlbGV0ZSB0aGlzLl9vbkVhc2VGcmFtZSksdGhpcy5fb25FYXNlRW5kKXt2YXIgcj10aGlzLl9vbkVhc2VFbmQ7ZGVsZXRlIHRoaXMuX29uRWFzZUVuZCxyLmNhbGwodGhpcyxlKX1pZighdCl7dmFyIG49dGhpcy5oYW5kbGVycztuJiZuLnN0b3AoKX1yZXR1cm4gdGhpc30sci5wcm90b3R5cGUuX2Vhc2U9ZnVuY3Rpb24oZSxyLG4peyExPT09bi5hbmltYXRlfHwwPT09bi5kdXJhdGlvbj8oZSgxKSxyKCkpOih0aGlzLl9lYXNlU3RhcnQ9dC5icm93c2VyLm5vdygpLHRoaXMuX2Vhc2VPcHRpb25zPW4sdGhpcy5fb25FYXNlRnJhbWU9ZSx0aGlzLl9vbkVhc2VFbmQ9cix0aGlzLl9lYXNlRnJhbWVJZD10aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjaykpfSxyLnByb3RvdHlwZS5fcmVuZGVyRnJhbWVDYWxsYmFjaz1mdW5jdGlvbigpe3ZhciBlPU1hdGgubWluKCh0LmJyb3dzZXIubm93KCktdGhpcy5fZWFzZVN0YXJ0KS90aGlzLl9lYXNlT3B0aW9ucy5kdXJhdGlvbiwxKTt0aGlzLl9vbkVhc2VGcmFtZSh0aGlzLl9lYXNlT3B0aW9ucy5lYXNpbmcoZSkpLGU8MT90aGlzLl9lYXNlRnJhbWVJZD10aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjayk6dGhpcy5zdG9wKCl9LHIucHJvdG90eXBlLl9ub3JtYWxpemVCZWFyaW5nPWZ1bmN0aW9uKGUscil7ZT10LndyYXAoZSwtMTgwLDE4MCk7dmFyIG49TWF0aC5hYnMoZS1yKTtyZXR1cm4gTWF0aC5hYnMoZS0zNjAtcik8biYmKGUtPTM2MCksTWF0aC5hYnMoZSszNjAtcik8biYmKGUrPTM2MCksZX0sci5wcm90b3R5cGUuX25vcm1hbGl6ZUNlbnRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnRyYW5zZm9ybTtpZihlLnJlbmRlcldvcmxkQ29waWVzJiYhZS5sbmdSYW5nZSl7dmFyIHI9dC5sbmctZS5jZW50ZXIubG5nO3QubG5nKz1yPjE4MD8tMzYwOnI8LTE4MD8zNjA6MH19LHJ9KHQuRXZlbnRlZCksdmk9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMub3B0aW9ucz1lLHQuYmluZEFsbChbIl91cGRhdGVFZGl0TGluayIsIl91cGRhdGVEYXRhIiwiX3VwZGF0ZUNvbXBhY3QiXSx0aGlzKX07dmkucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tcmlnaHQifSx2aS5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuY29tcGFjdDtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtYXR0cmliIiksdGhpcy5faW5uZXJDb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwtYXR0cmliLWlubmVyIix0aGlzLl9jb250YWluZXIpLGUmJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jb21wYWN0IiksdGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCksdGhpcy5fdXBkYXRlRWRpdExpbmsoKSx0aGlzLl9tYXAub24oInN0eWxlZGF0YSIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9uKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub24oIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKSx2b2lkIDA9PT1lJiYodGhpcy5fbWFwLm9uKCJyZXNpemUiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX3VwZGF0ZUNvbXBhY3QoKSksdGhpcy5fY29udGFpbmVyfSx2aS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoInN0eWxlZGF0YSIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9mZigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9mZigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmspLHRoaXMuX21hcC5vZmYoInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fbWFwPXZvaWQgMCx0aGlzLl9hdHRyaWJIVE1MPXZvaWQgMH0sdmkucHJvdG90eXBlLl91cGRhdGVFZGl0TGluaz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2VkaXRMaW5rO2V8fChlPXRoaXMuX2VkaXRMaW5rPXRoaXMuX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubWFwYm94LWltcHJvdmUtbWFwIikpO3ZhciByPVt7a2V5OiJvd25lciIsdmFsdWU6dGhpcy5zdHlsZU93bmVyfSx7a2V5OiJpZCIsdmFsdWU6dGhpcy5zdHlsZUlkfSx7a2V5OiJhY2Nlc3NfdG9rZW4iLHZhbHVlOnRoaXMuX21hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VufHx0LmNvbmZpZy5BQ0NFU1NfVE9LRU59XTtpZihlKXt2YXIgbj1yLnJlZHVjZSgoZnVuY3Rpb24odCxlLG4pe3JldHVybiBlLnZhbHVlJiYodCs9ZS5rZXkrIj0iK2UudmFsdWUrKG48ci5sZW5ndGgtMT8iJiI6IiIpKSx0fSksIj8iKTtlLmhyZWY9dC5jb25maWcuRkVFREJBQ0tfVVJMKyIvIituKyh0aGlzLl9tYXAuX2hhc2g/dGhpcy5fbWFwLl9oYXNoLmdldEhhc2hTdHJpbmcoITApOiIiKSxlLnJlbD0ibm9vcGVuZXIgbm9mb2xsb3cifX0sdmkucHJvdG90eXBlLl91cGRhdGVEYXRhPWZ1bmN0aW9uKHQpeyF0fHwibWV0YWRhdGEiIT09dC5zb3VyY2VEYXRhVHlwZSYmInN0eWxlIiE9PXQuZGF0YVR5cGV8fCh0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbnMoKSx0aGlzLl91cGRhdGVFZGl0TGluaygpKX0sdmkucHJvdG90eXBlLl91cGRhdGVBdHRyaWJ1dGlvbnM9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAuc3R5bGUpe3ZhciB0PVtdO2lmKHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbiYmKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uKT90PXQuY29uY2F0KHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdD8iIjp0fSkpKToic3RyaW5nIj09dHlwZW9mIHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbiYmdC5wdXNoKHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbikpLHRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0KXt2YXIgZT10aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldDt0aGlzLnN0eWxlT3duZXI9ZS5vd25lcix0aGlzLnN0eWxlSWQ9ZS5pZH12YXIgcj10aGlzLl9tYXAuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgbiBpbiByKXt2YXIgaT1yW25dO2lmKGkudXNlZCl7dmFyIGE9aS5nZXRTb3VyY2UoKTthLmF0dHJpYnV0aW9uJiZ0LmluZGV4T2YoYS5hdHRyaWJ1dGlvbik8MCYmdC5wdXNoKGEuYXR0cmlidXRpb24pfX10LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofSkpO3ZhciBvPSh0PXQuZmlsdGVyKChmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1yKzE7bjx0Lmxlbmd0aDtuKyspaWYodFtuXS5pbmRleE9mKGUpPj0wKXJldHVybiExO3JldHVybiEwfSkpKS5qb2luKCIgfCAiKTtvIT09dGhpcy5fYXR0cmliSFRNTCYmKHRoaXMuX2F0dHJpYkhUTUw9byx0Lmxlbmd0aD8odGhpcy5faW5uZXJDb250YWluZXIuaW5uZXJIVE1MPW8sdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWF0dHJpYi1lbXB0eSIpKTp0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtYXR0cmliLWVtcHR5IiksdGhpcy5fZWRpdExpbms9bnVsbCl9fSx2aS5wcm90b3R5cGUuX3VwZGF0ZUNvbXBhY3Q9ZnVuY3Rpb24oKXt0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGg8PTY0MD90aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY29tcGFjdCIpOnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jb21wYWN0Iil9O3ZhciB5aT1mdW5jdGlvbigpe3QuYmluZEFsbChbIl91cGRhdGVMb2dvIl0sdGhpcyksdC5iaW5kQWxsKFsiX3VwZGF0ZUNvbXBhY3QiXSx0aGlzKX07eWkucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCIpO3ZhciBlPXIuY3JlYXRlKCJhIiwibWFwYm94Z2wtY3RybC1sb2dvIik7cmV0dXJuIGUudGFyZ2V0PSJfYmxhbmsiLGUucmVsPSJub29wZW5lciBub2ZvbGxvdyIsZS5ocmVmPSJodHRwczovL3d3dy5tYXBib3guY29tLyIsZS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoIkxvZ29Db250cm9sLlRpdGxlIikpLGUuc2V0QXR0cmlidXRlKCJyZWwiLCJub29wZW5lciBub2ZvbGxvdyIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChlKSx0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fbWFwLm9uKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVMb2dvKSx0aGlzLl91cGRhdGVMb2dvKCksdGhpcy5fbWFwLm9uKCJyZXNpemUiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX3VwZGF0ZUNvbXBhY3QoKSx0aGlzLl9jb250YWluZXJ9LHlpLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3IucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlTG9nbyksdGhpcy5fbWFwLm9mZigicmVzaXplIix0aGlzLl91cGRhdGVDb21wYWN0KX0seWkucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tbGVmdCJ9LHlpLnByb3RvdHlwZS5fdXBkYXRlTG9nbz1mdW5jdGlvbih0KXt0JiYibWV0YWRhdGEiIT09dC5zb3VyY2VEYXRhVHlwZXx8KHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PXRoaXMuX2xvZ29SZXF1aXJlZCgpPyJibG9jayI6Im5vbmUiKX0seWkucHJvdG90eXBlLl9sb2dvUmVxdWlyZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAuc3R5bGUpe3ZhciB0PXRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBlIGluIHQpaWYodFtlXS5nZXRTb3VyY2UoKS5tYXBib3hfbG9nbylyZXR1cm4hMDtyZXR1cm4hMX19LHlpLnByb3RvdHlwZS5fdXBkYXRlQ29tcGFjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lci5jaGlsZHJlbjtpZih0Lmxlbmd0aCl7dmFyIGU9dFswXTt0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGg8MjUwP2UuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY29tcGFjdCIpOmUuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY29tcGFjdCIpfX07dmFyIHhpPWZ1bmN0aW9uKCl7dGhpcy5fcXVldWU9W10sdGhpcy5faWQ9MCx0aGlzLl9jbGVhcmVkPSExLHRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9ITF9O3hpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9Kyt0aGlzLl9pZDtyZXR1cm4gdGhpcy5fcXVldWUucHVzaCh7Y2FsbGJhY2s6dCxpZDplLGNhbmNlbGxlZDohMX0pLGV9LHhpLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2N1cnJlbnRseVJ1bm5pbmcscj0wLG49ZT90aGlzLl9xdWV1ZS5jb25jYXQoZSk6dGhpcy5fcXVldWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2lmKGkuaWQ9PT10KXJldHVybiB2b2lkKGkuY2FuY2VsbGVkPSEwKX19LHhpLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIGU9dGhpcy5fY3VycmVudGx5UnVubmluZz10aGlzLl9xdWV1ZTt0aGlzLl9xdWV1ZT1bXTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2lmKCFpLmNhbmNlbGxlZCYmKGkuY2FsbGJhY2sodCksdGhpcy5fY2xlYXJlZCkpYnJlYWt9dGhpcy5fY2xlYXJlZD0hMSx0aGlzLl9jdXJyZW50bHlSdW5uaW5nPSExfSx4aS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50bHlSdW5uaW5nJiYodGhpcy5fY2xlYXJlZD0hMCksdGhpcy5fcXVldWU9W119O3ZhciBiaT17IkZ1bGxzY3JlZW5Db250cm9sLkVudGVyIjoiRW50ZXIgZnVsbHNjcmVlbiIsIkZ1bGxzY3JlZW5Db250cm9sLkV4aXQiOiJFeGl0IGZ1bGxzY3JlZW4iLCJHZW9sb2NhdGVDb250cm9sLkZpbmRNeUxvY2F0aW9uIjoiRmluZCBteSBsb2NhdGlvbiIsIkdlb2xvY2F0ZUNvbnRyb2wuTG9jYXRpb25Ob3RBdmFpbGFibGUiOiJMb2NhdGlvbiBub3QgYXZhaWxhYmxlIiwiTG9nb0NvbnRyb2wuVGl0bGUiOiJNYXBib3ggbG9nbyIsIk5hdmlnYXRpb25Db250cm9sLlJlc2V0QmVhcmluZyI6IlJlc2V0IGJlYXJpbmcgdG8gbm9ydGgiLCJOYXZpZ2F0aW9uQ29udHJvbC5ab29tSW4iOiJab29tIGluIiwiTmF2aWdhdGlvbkNvbnRyb2wuWm9vbU91dCI6Ilpvb20gb3V0IiwiU2NhbGVDb250cm9sLkZlZXQiOiJmdCIsIlNjYWxlQ29udHJvbC5NZXRlcnMiOiJtIiwiU2NhbGVDb250cm9sLktpbG9tZXRlcnMiOiJrbSIsIlNjYWxlQ29udHJvbC5NaWxlcyI6Im1pIiwiU2NhbGVDb250cm9sLk5hdXRpY2FsTWlsZXMiOiJubSJ9LF9pPXQud2luZG93LkhUTUxJbWFnZUVsZW1lbnQsd2k9dC53aW5kb3cuSFRNTEVsZW1lbnQsVGk9dC53aW5kb3cuSW1hZ2VCaXRtYXAsa2k9e2NlbnRlcjpbMCwwXSx6b29tOjAsYmVhcmluZzowLHBpdGNoOjAsbWluWm9vbTotMixtYXhab29tOjIyLG1pblBpdGNoOjAsbWF4UGl0Y2g6NjAsaW50ZXJhY3RpdmU6ITAsc2Nyb2xsWm9vbTohMCxib3hab29tOiEwLGRyYWdSb3RhdGU6ITAsZHJhZ1BhbjohMCxrZXlib2FyZDohMCxkb3VibGVDbGlja1pvb206ITAsdG91Y2hab29tUm90YXRlOiEwLHRvdWNoUGl0Y2g6ITAsYmVhcmluZ1NuYXA6NyxjbGlja1RvbGVyYW5jZTozLHBpdGNoV2l0aFJvdGF0ZTohMCxoYXNoOiExLGF0dHJpYnV0aW9uQ29udHJvbDohMCxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiExLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSx0cmFja1Jlc2l6ZTohMCxyZW5kZXJXb3JsZENvcGllczohMCxyZWZyZXNoRXhwaXJlZFRpbGVzOiEwLG1heFRpbGVDYWNoZVNpemU6bnVsbCxsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6InNhbnMtc2VyaWYiLHRyYW5zZm9ybVJlcXVlc3Q6bnVsbCxhY2Nlc3NUb2tlbjpudWxsLGZhZGVEdXJhdGlvbjozMDAsY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiEwfSxNaT1mdW5jdGlvbihuKXtmdW5jdGlvbiBpKGUpe3ZhciByPXRoaXM7aWYobnVsbCE9KGU9dC5leHRlbmQoe30sa2ksZSkpLm1pblpvb20mJm51bGwhPWUubWF4Wm9vbSYmZS5taW5ab29tPmUubWF4Wm9vbSl0aHJvdyBuZXcgRXJyb3IoIm1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWluWm9vbSIpO2lmKG51bGwhPWUubWluUGl0Y2gmJm51bGwhPWUubWF4UGl0Y2gmJmUubWluUGl0Y2g+ZS5tYXhQaXRjaCl0aHJvdyBuZXcgRXJyb3IoIm1heFBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1pblBpdGNoIik7aWYobnVsbCE9ZS5taW5QaXRjaCYmZS5taW5QaXRjaDwwKXRocm93IG5ldyBFcnJvcigibWluUGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCIpO2lmKG51bGwhPWUubWF4UGl0Y2gmJmUubWF4UGl0Y2g+NjApdGhyb3cgbmV3IEVycm9yKCJtYXhQaXRjaCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA2MCIpO3ZhciBpPW5ldyB3bihlLm1pblpvb20sZS5tYXhab29tLGUubWluUGl0Y2gsZS5tYXhQaXRjaCxlLnJlbmRlcldvcmxkQ29waWVzKTtpZihuLmNhbGwodGhpcyxpLGUpLHRoaXMuX2ludGVyYWN0aXZlPWUuaW50ZXJhY3RpdmUsdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT1lLm1heFRpbGVDYWNoZVNpemUsdGhpcy5fZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD1lLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsdGhpcy5fcHJlc2VydmVEcmF3aW5nQnVmZmVyPWUucHJlc2VydmVEcmF3aW5nQnVmZmVyLHRoaXMuX2FudGlhbGlhcz1lLmFudGlhbGlhcyx0aGlzLl90cmFja1Jlc2l6ZT1lLnRyYWNrUmVzaXplLHRoaXMuX2JlYXJpbmdTbmFwPWUuYmVhcmluZ1NuYXAsdGhpcy5fcmVmcmVzaEV4cGlyZWRUaWxlcz1lLnJlZnJlc2hFeHBpcmVkVGlsZXMsdGhpcy5fZmFkZUR1cmF0aW9uPWUuZmFkZUR1cmF0aW9uLHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucz1lLmNyb3NzU291cmNlQ29sbGlzaW9ucyx0aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcj0xLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1lLmNvbGxlY3RSZXNvdXJjZVRpbWluZyx0aGlzLl9yZW5kZXJUYXNrUXVldWU9bmV3IHhpLHRoaXMuX2NvbnRyb2xzPVtdLHRoaXMuX21hcElkPXQudW5pcXVlSWQoKSx0aGlzLl9sb2NhbGU9dC5leHRlbmQoe30sYmksZS5sb2NhbGUpLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyB0LlJlcXVlc3RNYW5hZ2VyKGUudHJhbnNmb3JtUmVxdWVzdCxlLmFjY2Vzc1Rva2VuKSwic3RyaW5nIj09dHlwZW9mIGUuY29udGFpbmVyKXtpZih0aGlzLl9jb250YWluZXI9dC53aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5jb250YWluZXIpLCF0aGlzLl9jb250YWluZXIpdGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgJyIrZS5jb250YWluZXIrIicgbm90IGZvdW5kLiIpfWVsc2V7aWYoIShlLmNvbnRhaW5lciBpbnN0YW5jZW9mIHdpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdHlwZTogJ2NvbnRhaW5lcicgbXVzdCBiZSBhIFN0cmluZyBvciBIVE1MRWxlbWVudC4iKTt0aGlzLl9jb250YWluZXI9ZS5jb250YWluZXJ9aWYoZS5tYXhCb3VuZHMmJnRoaXMuc2V0TWF4Qm91bmRzKGUubWF4Qm91bmRzKSx0LmJpbmRBbGwoWyJfb25XaW5kb3dPbmxpbmUiLCJfb25XaW5kb3dSZXNpemUiLCJfY29udGV4dExvc3QiLCJfY29udGV4dFJlc3RvcmVkIl0sdGhpcyksdGhpcy5fc2V0dXBDb250YWluZXIoKSx0aGlzLl9zZXR1cFBhaW50ZXIoKSx2b2lkIDA9PT10aGlzLnBhaW50ZXIpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBXZWJHTC4iKTt0aGlzLm9uKCJtb3ZlIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5fdXBkYXRlKCExKX0pKSx0aGlzLm9uKCJtb3ZlZW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5fdXBkYXRlKCExKX0pKSx0aGlzLm9uKCJ6b29tIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5fdXBkYXRlKCEwKX0pKSx2b2lkIDAhPT10LndpbmRvdyYmKHQud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm9ubGluZSIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpLHQud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fb25XaW5kb3dSZXNpemUsITEpKSx0aGlzLmhhbmRsZXJzPW5ldyBnaSh0aGlzLGUpLHRoaXMuX2hhc2g9ZS5oYXNoJiZuZXcga24oInN0cmluZyI9PXR5cGVvZiBlLmhhc2gmJmUuaGFzaHx8dm9pZCAwKS5hZGRUbyh0aGlzKSx0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLl9vbkhhc2hDaGFuZ2UoKXx8KHRoaXMuanVtcFRvKHtjZW50ZXI6ZS5jZW50ZXIsem9vbTplLnpvb20sYmVhcmluZzplLmJlYXJpbmcscGl0Y2g6ZS5waXRjaH0pLGUuYm91bmRzJiYodGhpcy5yZXNpemUoKSx0aGlzLmZpdEJvdW5kcyhlLmJvdW5kcyx0LmV4dGVuZCh7fSxlLmZpdEJvdW5kc09wdGlvbnMse2R1cmF0aW9uOjB9KSkpKSx0aGlzLnJlc2l6ZSgpLHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1lLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSxlLnN0eWxlJiZ0aGlzLnNldFN0eWxlKGUuc3R5bGUse2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTplLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0pLGUuYXR0cmlidXRpb25Db250cm9sJiZ0aGlzLmFkZENvbnRyb2wobmV3IHZpKHtjdXN0b21BdHRyaWJ1dGlvbjplLmN1c3RvbUF0dHJpYnV0aW9ufSkpLHRoaXMuYWRkQ29udHJvbChuZXcgeWksZS5sb2dvUG9zaXRpb24pLHRoaXMub24oInN0eWxlLmxvYWQiLChmdW5jdGlvbigpe3IudHJhbnNmb3JtLnVubW9kaWZpZWQmJnIuanVtcFRvKHIuc3R5bGUuc3R5bGVzaGVldCl9KSksdGhpcy5vbigiZGF0YSIsKGZ1bmN0aW9uKGUpe3IuX3VwZGF0ZSgic3R5bGUiPT09ZS5kYXRhVHlwZSksci5maXJlKG5ldyB0LkV2ZW50KGUuZGF0YVR5cGUrImRhdGEiLGUpKX0pKSx0aGlzLm9uKCJkYXRhbG9hZGluZyIsKGZ1bmN0aW9uKGUpe3IuZmlyZShuZXcgdC5FdmVudChlLmRhdGFUeXBlKyJkYXRhbG9hZGluZyIsZSkpfSkpfW4mJihpLl9fcHJvdG9fXz1uKSwoaS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuJiZuLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWk7dmFyIGE9e3Nob3dUaWxlQm91bmRhcmllczp7Y29uZmlndXJhYmxlOiEwfSxzaG93UGFkZGluZzp7Y29uZmlndXJhYmxlOiEwfSxzaG93Q29sbGlzaW9uQm94ZXM6e2NvbmZpZ3VyYWJsZTohMH0sc2hvd092ZXJkcmF3SW5zcGVjdG9yOntjb25maWd1cmFibGU6ITB9LHJlcGFpbnQ6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sdmVyc2lvbjp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIGkucHJvdG90eXBlLl9nZXRNYXBJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXBJZH0saS5wcm90b3R5cGUuYWRkQ29udHJvbD1mdW5jdGlvbihlLHIpe2lmKHZvaWQgMD09PXImJmUuZ2V0RGVmYXVsdFBvc2l0aW9uJiYocj1lLmdldERlZmF1bHRQb3NpdGlvbigpKSx2b2lkIDA9PT1yJiYocj0idG9wLXJpZ2h0IiksIWV8fCFlLm9uQWRkKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnQgdG8gbWFwLmFkZENvbnRyb2woKS4gQXJndW1lbnQgbXVzdCBiZSBhIGNvbnRyb2wgd2l0aCBvbkFkZCBhbmQgb25SZW1vdmUgbWV0aG9kcy4iKSkpO3ZhciBuPWUub25BZGQodGhpcyk7dGhpcy5fY29udHJvbHMucHVzaChlKTt2YXIgaT10aGlzLl9jb250cm9sUG9zaXRpb25zW3JdO3JldHVybi0xIT09ci5pbmRleE9mKCJib3R0b20iKT9pLmluc2VydEJlZm9yZShuLGkuZmlyc3RDaGlsZCk6aS5hcHBlbmRDaGlsZChuKSx0aGlzfSxpLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKGUpe2lmKCFlfHwhZS5vblJlbW92ZSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50IHRvIG1hcC5yZW1vdmVDb250cm9sKCkuIEFyZ3VtZW50IG11c3QgYmUgYSBjb250cm9sIHdpdGggb25BZGQgYW5kIG9uUmVtb3ZlIG1ldGhvZHMuIikpKTt2YXIgcj10aGlzLl9jb250cm9scy5pbmRleE9mKGUpO3JldHVybiByPi0xJiZ0aGlzLl9jb250cm9scy5zcGxpY2UociwxKSxlLm9uUmVtb3ZlKHRoaXMpLHRoaXN9LGkucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCksbj1yWzBdLGk9clsxXTt0aGlzLl9yZXNpemVDYW52YXMobixpKSx0aGlzLnRyYW5zZm9ybS5yZXNpemUobixpKSx0aGlzLnBhaW50ZXIucmVzaXplKG4saSk7dmFyIGE9IXRoaXMuX21vdmluZztyZXR1cm4gYSYmKHRoaXMuc3RvcCgpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixlKSkuZmlyZShuZXcgdC5FdmVudCgibW92ZSIsZSkpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJlc2l6ZSIsZSkpLGEmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIsZSkpLHRoaXN9LGkucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5nZXRCb3VuZHMoKX0saS5wcm90b3R5cGUuZ2V0TWF4Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmdldE1heEJvdW5kcygpfSxpLnByb3RvdHlwZS5zZXRNYXhCb3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnNldE1heEJvdW5kcyh0LkxuZ0xhdEJvdW5kcy5jb252ZXJ0KGUpKSx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUuc2V0TWluWm9vbT1mdW5jdGlvbih0KXtpZigodD1udWxsPT10Py0yOnQpPj0tMiYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPHQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWluWm9vbSBtdXN0IGJlIGJldHdlZW4gLTIgYW5kIHRoZSBjdXJyZW50IG1heFpvb20sIGluY2x1c2l2ZSIpfSxpLnByb3RvdHlwZS5nZXRNaW5ab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblpvb219LGkucHJvdG90eXBlLnNldE1heFpvb209ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8yMjp0KT49dGhpcy50cmFuc2Zvcm0ubWluWm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPnQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBtaW5ab29tIil9LGkucHJvdG90eXBlLmdldE1heFpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbX0saS5wcm90b3R5cGUuc2V0TWluUGl0Y2g9ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8wOnQpPDApdGhyb3cgbmV3IEVycm9yKCJtaW5QaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwIik7aWYodD49MCYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2gpcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblBpdGNoPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRQaXRjaCgpPHQmJnRoaXMuc2V0UGl0Y2godCksdGhpczt0aHJvdyBuZXcgRXJyb3IoIm1pblBpdGNoIG11c3QgYmUgYmV0d2VlbiAwIGFuZCB0aGUgY3VycmVudCBtYXhQaXRjaCwgaW5jbHVzaXZlIil9LGkucHJvdG90eXBlLmdldE1pblBpdGNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblBpdGNofSxpLnByb3RvdHlwZS5zZXRNYXhQaXRjaD1mdW5jdGlvbih0KXtpZigodD1udWxsPT10PzYwOnQpPjYwKXRocm93IG5ldyBFcnJvcigibWF4UGl0Y2ggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNjAiKTtpZih0Pj10aGlzLnRyYW5zZm9ybS5taW5QaXRjaClyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2g9dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFBpdGNoKCk+dCYmdGhpcy5zZXRQaXRjaCh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWF4UGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbWluUGl0Y2giKX0saS5wcm90b3R5cGUuZ2V0TWF4UGl0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2h9LGkucHJvdG90eXBlLmdldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzfSxpLnByb3RvdHlwZS5zZXRSZW5kZXJXb3JsZENvcGllcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXM9dCx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludCh0LkxuZ0xhdC5jb252ZXJ0KGUpKX0saS5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHQuUG9pbnQuY29udmVydChlKSl9LGkucHJvdG90eXBlLmlzTW92aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdmluZ3x8dGhpcy5oYW5kbGVycy5pc01vdmluZygpfSxpLnByb3RvdHlwZS5pc1pvb21pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9vbWluZ3x8dGhpcy5oYW5kbGVycy5pc1pvb21pbmcoKX0saS5wcm90b3R5cGUuaXNSb3RhdGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3RhdGluZ3x8dGhpcy5oYW5kbGVycy5pc1JvdGF0aW5nKCl9LGkucHJvdG90eXBlLl9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscil7dmFyIG4saT10aGlzO2lmKCJtb3VzZWVudGVyIj09PXR8fCJtb3VzZW92ZXIiPT09dCl7dmFyIGE9ITE7cmV0dXJue2xheWVyOmUsbGlzdGVuZXI6cixkZWxlZ2F0ZXM6e21vdXNlbW92ZTpmdW5jdGlvbihuKXt2YXIgbz1pLmdldExheWVyKGUpP2kucXVlcnlSZW5kZXJlZEZlYXR1cmVzKG4ucG9pbnQse2xheWVyczpbZV19KTpbXTtvLmxlbmd0aD9hfHwoYT0hMCxyLmNhbGwoaSxuZXcgem4odCxpLG4ub3JpZ2luYWxFdmVudCx7ZmVhdHVyZXM6b30pKSk6YT0hMX0sbW91c2VvdXQ6ZnVuY3Rpb24oKXthPSExfX19fWlmKCJtb3VzZWxlYXZlIj09PXR8fCJtb3VzZW91dCI9PT10KXt2YXIgbz0hMTtyZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpyLGRlbGVnYXRlczp7bW91c2Vtb3ZlOmZ1bmN0aW9uKG4peyhpLmdldExheWVyKGUpP2kucXVlcnlSZW5kZXJlZEZlYXR1cmVzKG4ucG9pbnQse2xheWVyczpbZV19KTpbXSkubGVuZ3RoP289ITA6byYmKG89ITEsci5jYWxsKGksbmV3IHpuKHQsaSxuLm9yaWdpbmFsRXZlbnQpKSl9LG1vdXNlb3V0OmZ1bmN0aW9uKGUpe28mJihvPSExLHIuY2FsbChpLG5ldyB6bih0LGksZS5vcmlnaW5hbEV2ZW50KSkpfX19fXJldHVybntsYXllcjplLGxpc3RlbmVyOnIsZGVsZWdhdGVzOihuPXt9LG5bdF09ZnVuY3Rpb24odCl7dmFyIG49aS5nZXRMYXllcihlKT9pLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0LnBvaW50LHtsYXllcnM6W2VdfSk6W107bi5sZW5ndGgmJih0LmZlYXR1cmVzPW4sci5jYWxsKGksdCksZGVsZXRlIHQuZmVhdHVyZXMpfSxuKX19LGkucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1yKXJldHVybiBuLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdCxlKTt2YXIgaT10aGlzLl9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcih0LGUscik7Zm9yKHZhciBhIGluIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycz10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnN8fHt9LHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF18fFtdLHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XS5wdXNoKGkpLGkuZGVsZWdhdGVzKXRoaXMub24oYSxpLmRlbGVnYXRlc1thXSk7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlLHIpe2lmKHZvaWQgMD09PXIpcmV0dXJuIG4ucHJvdG90eXBlLm9uY2UuY2FsbCh0aGlzLHQsZSk7dmFyIGk9dGhpcy5fY3JlYXRlRGVsZWdhdGVkTGlzdGVuZXIodCxlLHIpO2Zvcih2YXIgYSBpbiBpLmRlbGVnYXRlcyl0aGlzLm9uY2UoYSxpLmRlbGVnYXRlc1thXSk7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcztyZXR1cm4gdm9pZCAwPT09cj9uLnByb3RvdHlwZS5vZmYuY2FsbCh0aGlzLHQsZSk6KHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyYmdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdJiZmdW5jdGlvbihuKXtmb3IodmFyIGE9blt0XSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aWYocy5sYXllcj09PWUmJnMubGlzdGVuZXI9PT1yKXtmb3IodmFyIGwgaW4gcy5kZWxlZ2F0ZXMpaS5vZmYobCxzLmRlbGVnYXRlc1tsXSk7cmV0dXJuIGEuc3BsaWNlKG8sMSksaX19fSh0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMpLHRoaXMpfSxpLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24oZSxyKXtpZighdGhpcy5zdHlsZSlyZXR1cm5bXTt2YXIgbjtpZih2b2lkIDAhPT1yfHx2b2lkIDA9PT1lfHxlIGluc3RhbmNlb2YgdC5Qb2ludHx8QXJyYXkuaXNBcnJheShlKXx8KHI9ZSxlPXZvaWQgMCkscj1yfHx7fSwoZT1lfHxbWzAsMF0sW3RoaXMudHJhbnNmb3JtLndpZHRoLHRoaXMudHJhbnNmb3JtLmhlaWdodF1dKWluc3RhbmNlb2YgdC5Qb2ludHx8Im51bWJlciI9PXR5cGVvZiBlWzBdKW49W3QuUG9pbnQuY29udmVydChlKV07ZWxzZXt2YXIgaT10LlBvaW50LmNvbnZlcnQoZVswXSksYT10LlBvaW50LmNvbnZlcnQoZVsxXSk7bj1baSxuZXcgdC5Qb2ludChhLngsaS55KSxhLG5ldyB0LlBvaW50KGkueCxhLnkpLGldfXJldHVybiB0aGlzLnN0eWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhuLHIsdGhpcy50cmFuc2Zvcm0pfSxpLnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUucXVlcnlTb3VyY2VGZWF0dXJlcyh0LGUpfSxpLnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbihlLHIpe3JldHVybiExIT09KHI9dC5leHRlbmQoe30se2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTp0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHl9LHIpKS5kaWZmJiZyLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT09PXRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseSYmdGhpcy5zdHlsZSYmZT8odGhpcy5fZGlmZlN0eWxlKGUsciksdGhpcyk6KHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1yLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSx0aGlzLl91cGRhdGVTdHlsZShlLHIpKX0saS5wcm90b3R5cGUuX2dldFVJU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xvY2FsZVt0XTtpZihudWxsPT1lKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyBVSSBzdHJpbmcgJyIrdCsiJyIpO3JldHVybiBlfSxpLnByb3RvdHlwZS5fdXBkYXRlU3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudChudWxsKSx0aGlzLnN0eWxlLl9yZW1vdmUoKSksdD8odGhpcy5zdHlsZT1uZXcgcWUodGhpcyxlfHx7fSksdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMse3N0eWxlOnRoaXMuc3R5bGV9KSwic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5zdHlsZS5sb2FkVVJMKHQpOnRoaXMuc3R5bGUubG9hZEpTT04odCksdGhpcyk6KGRlbGV0ZSB0aGlzLnN0eWxlLHRoaXMpfSxpLnByb3RvdHlwZS5fbGF6eUluaXRFbXB0eVN0eWxlPWZ1bmN0aW9uKCl7dGhpcy5zdHlsZXx8KHRoaXMuc3R5bGU9bmV3IHFlKHRoaXMse30pLHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtzdHlsZTp0aGlzLnN0eWxlfSksdGhpcy5zdHlsZS5sb2FkRW1wdHkoKSl9LGkucHJvdG90eXBlLl9kaWZmU3R5bGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIGk9dGhpcy5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU3R5bGVVUkwoZSksYT10aGlzLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGksdC5SZXNvdXJjZVR5cGUuU3R5bGUpO3QuZ2V0SlNPTihhLChmdW5jdGlvbihlLGkpe2U/bi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpOmkmJm4uX3VwZGF0ZURpZmYoaSxyKX0pKX1lbHNlIm9iamVjdCI9PXR5cGVvZiBlJiZ0aGlzLl91cGRhdGVEaWZmKGUscil9LGkucHJvdG90eXBlLl91cGRhdGVEaWZmPWZ1bmN0aW9uKGUscil7dHJ5e3RoaXMuc3R5bGUuc2V0U3RhdGUoZSkmJnRoaXMuX3VwZGF0ZSghMCl9Y2F0Y2gobil7dC53YXJuT25jZSgiVW5hYmxlIHRvIHBlcmZvcm0gc3R5bGUgZGlmZjogIisobi5tZXNzYWdlfHxuLmVycm9yfHxuKSsiLiAgUmVidWlsZGluZyB0aGUgc3R5bGUgZnJvbSBzY3JhdGNoLiIpLHRoaXMuX3VwZGF0ZVN0eWxlKGUscil9fSxpLnByb3RvdHlwZS5nZXRTdHlsZT1mdW5jdGlvbigpe2lmKHRoaXMuc3R5bGUpcmV0dXJuIHRoaXMuc3R5bGUuc2VyaWFsaXplKCl9LGkucHJvdG90eXBlLmlzU3R5bGVMb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZT90aGlzLnN0eWxlLmxvYWRlZCgpOnQud2Fybk9uY2UoIlRoZXJlIGlzIG5vIHN0eWxlIGFkZGVkIHRvIHRoZSBtYXAuIil9LGkucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKSx0aGlzLnN0eWxlLmFkZFNvdXJjZSh0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmlzU291cmNlTG9hZGVkPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuc291cmNlQ2FjaGVzW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIubG9hZGVkKCk7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCBJRCAnIitlKyInIikpKX0saS5wcm90b3R5cGUuYXJlVGlsZXNMb2FkZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGUgaW4gdCl7dmFyIHI9dFtlXS5fdGlsZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBpPXJbbl07aWYoImxvYWRlZCIhPT1pLnN0YXRlJiYiZXJyb3JlZCIhPT1pLnN0YXRlKXJldHVybiExfX1yZXR1cm4hMH0saS5wcm90b3R5cGUuYWRkU291cmNlVHlwZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpLHRoaXMuc3R5bGUuYWRkU291cmNlVHlwZSh0LGUscil9LGkucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVTb3VyY2UodCksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldFNvdXJjZSh0KX0saS5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgaT1uLnBpeGVsUmF0aW87dm9pZCAwPT09aSYmKGk9MSk7dmFyIGE9bi5zZGY7dm9pZCAwPT09YSYmKGE9ITEpO3ZhciBvPW4uc3RyZXRjaFgscz1uLnN0cmV0Y2hZLGw9bi5jb250ZW50O2lmKHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpLHIgaW5zdGFuY2VvZiBfaXx8VGkmJnIgaW5zdGFuY2VvZiBUaSl7dmFyIGM9dC5icm93c2VyLmdldEltYWdlRGF0YShyKTt0aGlzLnN0eWxlLmFkZEltYWdlKGUse2RhdGE6bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpjLndpZHRoLGhlaWdodDpjLmhlaWdodH0sYy5kYXRhKSxwaXhlbFJhdGlvOmksc3RyZXRjaFg6byxzdHJldGNoWTpzLGNvbnRlbnQ6bCxzZGY6YSx2ZXJzaW9uOjB9KX1lbHNle2lmKHZvaWQgMD09PXIud2lkdGh8fHZvaWQgMD09PXIuaGVpZ2h0KXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIG1hcC5hZGRJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgYEltYWdlQml0bWFwYCwgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCIpKSk7dmFyIHU9cjt0aGlzLnN0eWxlLmFkZEltYWdlKGUse2RhdGE6bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH0sbmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkscGl4ZWxSYXRpbzppLHN0cmV0Y2hYOm8sc3RyZXRjaFk6cyxjb250ZW50Omwsc2RmOmEsdmVyc2lvbjowLHVzZXJJbWFnZTp1fSksdS5vbkFkZCYmdS5vbkFkZCh0aGlzLGUpfX0saS5wcm90b3R5cGUudXBkYXRlSW1hZ2U9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLnN0eWxlLmdldEltYWdlKGUpO2lmKCFuKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBtYXAgaGFzIG5vIGltYWdlIHdpdGggdGhhdCBpZC4gSWYgeW91IGFyZSBhZGRpbmcgYSBuZXcgaW1hZ2UgdXNlIGBtYXAuYWRkSW1hZ2UoLi4uKWAgaW5zdGVhZC4iKSkpO3ZhciBpPXIgaW5zdGFuY2VvZiBfaXx8VGkmJnIgaW5zdGFuY2VvZiBUaT90LmJyb3dzZXIuZ2V0SW1hZ2VEYXRhKHIpOnIsYT1pLndpZHRoLG89aS5oZWlnaHQscz1pLmRhdGE7cmV0dXJuIHZvaWQgMD09PWF8fHZvaWQgMD09PW8/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyB0byBtYXAudXBkYXRlSW1hZ2UoKS4gVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGFuIGBIVE1MSW1hZ2VFbGVtZW50YCwgYEltYWdlRGF0YWAsIGBJbWFnZUJpdG1hcGAsIG9yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYEltYWdlRGF0YWAiKSkpOmEhPT1uLmRhdGEud2lkdGh8fG8hPT1uLmRhdGEuaGVpZ2h0P3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHVwZGF0ZWQgaW1hZ2UgbXVzdCBiZSB0aGF0IHNhbWUgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGltYWdlIikpKToobi5kYXRhLnJlcGxhY2UocywhKHIgaW5zdGFuY2VvZiBfaXx8VGkmJnIgaW5zdGFuY2VvZiBUaSkpLHZvaWQgdGhpcy5zdHlsZS51cGRhdGVJbWFnZShlLG4pKX0saS5wcm90b3R5cGUuaGFzSW1hZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ISF0aGlzLnN0eWxlLmdldEltYWdlKGUpOih0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgaW1hZ2UgaWQiKSkpLCExKX0saS5wcm90b3R5cGUucmVtb3ZlSW1hZ2U9ZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5yZW1vdmVJbWFnZSh0KX0saS5wcm90b3R5cGUubG9hZEltYWdlPWZ1bmN0aW9uKGUscil7dC5nZXRJbWFnZSh0aGlzLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGUsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLHIpfSxpLnByb3RvdHlwZS5saXN0SW1hZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUubGlzdEltYWdlcygpfSxpLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKSx0aGlzLnN0eWxlLmFkZExheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUubW92ZUxheWVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUubW92ZUxheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUucmVtb3ZlTGF5ZXIodCksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5ZXIodCl9LGkucHJvdG90eXBlLnNldExheWVyWm9vbVJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRMYXllclpvb21SYW5nZSh0LGUsciksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuc2V0RmlsdGVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLHRoaXMuc3R5bGUuc2V0RmlsdGVyKHQsZSxyKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5nZXRGaWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0RmlsdGVyKHQpfSxpLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5zdHlsZS5zZXRQYWludFByb3BlcnR5KHQsZSxyLG4pLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmdldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRQYWludFByb3BlcnR5KHQsZSl9LGkucHJvdG90eXBlLnNldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5zdHlsZS5zZXRMYXlvdXRQcm9wZXJ0eSh0LGUscixuKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmdldExheW91dFByb3BlcnR5KHQsZSl9LGkucHJvdG90eXBlLnNldExpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKSx0aGlzLnN0eWxlLnNldExpZ2h0KHQsZSksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0TGlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMaWdodCgpfSxpLnByb3RvdHlwZS5zZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRGZWF0dXJlU3RhdGUodCxlKSx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUucmVtb3ZlRmVhdHVyZVN0YXRlKHQsZSksdGhpcy5fdXBkYXRlKCl9LGkucHJvdG90eXBlLmdldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRGZWF0dXJlU3RhdGUodCl9LGkucHJvdG90eXBlLmdldENvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LGkucHJvdG90eXBlLmdldENhbnZhc0NvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXNDb250YWluZXJ9LGkucHJvdG90eXBlLmdldENhbnZhcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXN9LGkucHJvdG90eXBlLl9jb250YWluZXJEaW1lbnNpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPTA7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmKHQ9dGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRofHw0MDAsZT10aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0fHwzMDApLFt0LGVdfSxpLnByb3RvdHlwZS5fZGV0ZWN0TWlzc2luZ0NTUz1mdW5jdGlvbigpeyJyZ2IoMjUwLCAxMjgsIDExNCkiIT09dC53aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5KS5nZXRQcm9wZXJ0eVZhbHVlKCJiYWNrZ3JvdW5kLWNvbG9yIikmJnQud2Fybk9uY2UoIlRoaXMgcGFnZSBhcHBlYXJzIHRvIGJlIG1pc3NpbmcgQ1NTIGRlY2xhcmF0aW9ucyBmb3IgTWFwYm94IEdMIEpTLCB3aGljaCBtYXkgY2F1c2UgdGhlIG1hcCB0byBkaXNwbGF5IGluY29ycmVjdGx5LiBQbGVhc2UgZW5zdXJlIHlvdXIgcGFnZSBpbmNsdWRlcyBtYXBib3gtZ2wuY3NzLCBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvYXBpLy4iKX0saS5wcm90b3R5cGUuX3NldHVwQ29udGFpbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29udGFpbmVyO3QuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtbWFwIiksKHRoaXMuX21pc3NpbmdDU1NDYW5hcnk9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWNhbmFyeSIsdCkpLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fZGV0ZWN0TWlzc2luZ0NTUygpO3ZhciBlPXRoaXMuX2NhbnZhc0NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY2FudmFzLWNvbnRhaW5lciIsdCk7dGhpcy5faW50ZXJhY3RpdmUmJmUuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtaW50ZXJhY3RpdmUiKSx0aGlzLl9jYW52YXM9ci5jcmVhdGUoImNhbnZhcyIsIm1hcGJveGdsLWNhbnZhcyIsZSksdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHRoaXMuX2NvbnRleHRMb3N0LCExKSx0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHRoaXMuX2NvbnRleHRSZXN0b3JlZCwhMSksdGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksdGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIk1hcCIpO3ZhciBuPXRoaXMuX2NvbnRhaW5lckRpbWVuc2lvbnMoKTt0aGlzLl9yZXNpemVDYW52YXMoblswXSxuWzFdKTt2YXIgaT10aGlzLl9jb250cm9sQ29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lciIsdCksYT10aGlzLl9jb250cm9sUG9zaXRpb25zPXt9O1sidG9wLWxlZnQiLCJ0b3AtcmlnaHQiLCJib3R0b20tbGVmdCIsImJvdHRvbS1yaWdodCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FbdF09ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwtIit0LGkpfSkpfSxpLnByb3RvdHlwZS5fcmVzaXplQ2FudmFzPWZ1bmN0aW9uKGUscil7dmFyIG49dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW98fDE7dGhpcy5fY2FudmFzLndpZHRoPW4qZSx0aGlzLl9jYW52YXMuaGVpZ2h0PW4qcix0aGlzLl9jYW52YXMuc3R5bGUud2lkdGg9ZSsicHgiLHRoaXMuX2NhbnZhcy5zdHlsZS5oZWlnaHQ9cisicHgifSxpLnByb3RvdHlwZS5fc2V0dXBQYWludGVyPWZ1bmN0aW9uKCl7dmFyIHI9dC5leHRlbmQoe30sZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzLHtmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQscHJlc2VydmVEcmF3aW5nQnVmZmVyOnRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcixhbnRpYWxpYXM6dGhpcy5fYW50aWFsaWFzfHwhMX0pLG49dGhpcy5fY2FudmFzLmdldENvbnRleHQoIndlYmdsIixyKXx8dGhpcy5fY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIscik7bj8odGhpcy5wYWludGVyPW5ldyB5bihuLHRoaXMudHJhbnNmb3JtKSx0LndlYnBTdXBwb3J0ZWQudGVzdFN1cHBvcnQobikpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgV2ViR0wiKSkpfSxpLnByb3RvdHlwZS5fY29udGV4dExvc3Q9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZyYW1lJiYodGhpcy5fZnJhbWUuY2FuY2VsKCksdGhpcy5fZnJhbWU9bnVsbCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ3ZWJnbGNvbnRleHRsb3N0Iix7b3JpZ2luYWxFdmVudDplfSkpfSxpLnByb3RvdHlwZS5fY29udGV4dFJlc3RvcmVkPWZ1bmN0aW9uKGUpe3RoaXMuX3NldHVwUGFpbnRlcigpLHRoaXMucmVzaXplKCksdGhpcy5fdXBkYXRlKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIse29yaWdpbmFsRXZlbnQ6ZX0pKX0saS5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3N0eWxlRGlydHkmJiF0aGlzLl9zb3VyY2VzRGlydHkmJiEhdGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5sb2FkZWQoKX0saS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZT8odGhpcy5fc3R5bGVEaXJ0eT10aGlzLl9zdHlsZURpcnR5fHx0LHRoaXMuX3NvdXJjZXNEaXJ0eT0hMCx0aGlzLnRyaWdnZXJSZXBhaW50KCksdGhpcyk6dGhpc30saS5wcm90b3R5cGUuX3JlcXVlc3RSZW5kZXJGcmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdXBkYXRlKCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmFkZCh0KX0saS5wcm90b3R5cGUuX2NhbmNlbFJlbmRlckZyYW1lPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlclRhc2tRdWV1ZS5yZW1vdmUodCl9LGkucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oZSl7dmFyIHIsbj10aGlzLGk9MCxhPXRoaXMucGFpbnRlci5jb250ZXh0LmV4dFRpbWVyUXVlcnk7aWYodGhpcy5saXN0ZW5zKCJncHUtdGltaW5nLWZyYW1lIikmJihyPWEuY3JlYXRlUXVlcnlFWFQoKSxhLmJlZ2luUXVlcnlFWFQoYS5USU1FX0VMQVBTRURfRVhULHIpLGk9dC5icm93c2VyLm5vdygpKSx0aGlzLnBhaW50ZXIuY29udGV4dC5zZXREaXJ0eSgpLHRoaXMucGFpbnRlci5zZXRCYXNlU3RhdGUoKSx0aGlzLl9yZW5kZXJUYXNrUXVldWUucnVuKGUpLCF0aGlzLl9yZW1vdmVkKXt2YXIgbz0hMTtpZih0aGlzLnN0eWxlJiZ0aGlzLl9zdHlsZURpcnR5KXt0aGlzLl9zdHlsZURpcnR5PSExO3ZhciBzPXRoaXMudHJhbnNmb3JtLnpvb20sbD10LmJyb3dzZXIubm93KCk7dGhpcy5zdHlsZS56b29tSGlzdG9yeS51cGRhdGUocyxsKTt2YXIgYz1uZXcgdC5FdmFsdWF0aW9uUGFyYW1ldGVycyhzLHtub3c6bCxmYWRlRHVyYXRpb246dGhpcy5fZmFkZUR1cmF0aW9uLHpvb21IaXN0b3J5OnRoaXMuc3R5bGUuem9vbUhpc3RvcnksdHJhbnNpdGlvbjp0aGlzLnN0eWxlLmdldFRyYW5zaXRpb24oKX0pLHU9Yy5jcm9zc0ZhZGluZ0ZhY3RvcigpOzE9PT11JiZ1PT09dGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3J8fChvPSEwLHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yPXUpLHRoaXMuc3R5bGUudXBkYXRlKGMpfWlmKHRoaXMuc3R5bGUmJnRoaXMuX3NvdXJjZXNEaXJ0eSYmKHRoaXMuX3NvdXJjZXNEaXJ0eT0hMSx0aGlzLnN0eWxlLl91cGRhdGVTb3VyY2VzKHRoaXMudHJhbnNmb3JtKSksdGhpcy5fcGxhY2VtZW50RGlydHk9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5fdXBkYXRlUGxhY2VtZW50KHRoaXMucGFpbnRlci50cmFuc2Zvcm0sdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5fZmFkZUR1cmF0aW9uLHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucyksdGhpcy5wYWludGVyLnJlbmRlcih0aGlzLnN0eWxlLHtzaG93VGlsZUJvdW5kYXJpZXM6dGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsc2hvd092ZXJkcmF3SW5zcGVjdG9yOnRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcixyb3RhdGluZzp0aGlzLmlzUm90YXRpbmcoKSx6b29taW5nOnRoaXMuaXNab29taW5nKCksbW92aW5nOnRoaXMuaXNNb3ZpbmcoKSxmYWRlRHVyYXRpb246dGhpcy5fZmFkZUR1cmF0aW9uLHNob3dQYWRkaW5nOnRoaXMuc2hvd1BhZGRpbmcsZ3B1VGltaW5nOiEhdGhpcy5saXN0ZW5zKCJncHUtdGltaW5nLWxheWVyIil9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJlbmRlciIpKSx0aGlzLmxvYWRlZCgpJiYhdGhpcy5fbG9hZGVkJiYodGhpcy5fbG9hZGVkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibG9hZCIpKSksdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuaGFzVHJhbnNpdGlvbnMoKXx8bykmJih0aGlzLl9zdHlsZURpcnR5PSEwKSx0aGlzLnN0eWxlJiYhdGhpcy5fcGxhY2VtZW50RGlydHkmJnRoaXMuc3R5bGUuX3JlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKSx0aGlzLmxpc3RlbnMoImdwdS10aW1pbmctZnJhbWUiKSl7dmFyIGY9dC5icm93c2VyLm5vdygpLWk7YS5lbmRRdWVyeUVYVChhLlRJTUVfRUxBUFNFRF9FWFQsciksc2V0VGltZW91dCgoZnVuY3Rpb24oKXt2YXIgZT1hLmdldFF1ZXJ5T2JqZWN0RVhUKHIsYS5RVUVSWV9SRVNVTFRfRVhUKS8xZTY7YS5kZWxldGVRdWVyeUVYVChyKSxuLmZpcmUobmV3IHQuRXZlbnQoImdwdS10aW1pbmctZnJhbWUiLHtjcHVUaW1lOmYsZ3B1VGltZTplfSkpfSksNTApfWlmKHRoaXMubGlzdGVucygiZ3B1LXRpbWluZy1sYXllciIpKXt2YXIgaD10aGlzLnBhaW50ZXIuY29sbGVjdEdwdVRpbWVycygpO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIGU9bi5wYWludGVyLnF1ZXJ5R3B1VGltZXJzKGgpO24uZmlyZShuZXcgdC5FdmVudCgiZ3B1LXRpbWluZy1sYXllciIse2xheWVyVGltZXM6ZX0pKX0pLDUwKX1yZXR1cm4gdGhpcy5fc291cmNlc0RpcnR5fHx0aGlzLl9zdHlsZURpcnR5fHx0aGlzLl9wbGFjZW1lbnREaXJ0eXx8dGhpcy5fcmVwYWludD90aGlzLnRyaWdnZXJSZXBhaW50KCk6IXRoaXMuaXNNb3ZpbmcoKSYmdGhpcy5sb2FkZWQoKSYmKHRoaXMuX2Z1bGx5TG9hZGVkfHwodGhpcy5fZnVsbHlMb2FkZWQ9ITApLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiaWRsZSIpKSksdGhpc319LGkucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX2hhc2gmJnRoaXMuX2hhc2gucmVtb3ZlKCk7Zm9yKHZhciBlPTAscj10aGlzLl9jb250cm9scztlPHIubGVuZ3RoO2UrPTEpcltlXS5vblJlbW92ZSh0aGlzKTt0aGlzLl9jb250cm9scz1bXSx0aGlzLl9mcmFtZSYmKHRoaXMuX2ZyYW1lLmNhbmNlbCgpLHRoaXMuX2ZyYW1lPW51bGwpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5jbGVhcigpLHRoaXMucGFpbnRlci5kZXN0cm95KCksdGhpcy5oYW5kbGVycy5kZXN0cm95KCksZGVsZXRlIHRoaXMuaGFuZGxlcnMsdGhpcy5zZXRTdHlsZShudWxsKSx2b2lkIDAhPT10LndpbmRvdyYmKHQud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fb25XaW5kb3dSZXNpemUsITEpLHQud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9ubGluZSIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpKTt2YXIgbj10aGlzLnBhaW50ZXIuY29udGV4dC5nbC5nZXRFeHRlbnNpb24oIldFQkdMX2xvc2VfY29udGV4dCIpO24mJm4ubG9zZUNvbnRleHQoKSxBaSh0aGlzLl9jYW52YXNDb250YWluZXIpLEFpKHRoaXMuX2NvbnRyb2xDb250YWluZXIpLEFpKHRoaXMuX21pc3NpbmdDU1NDYW5hcnkpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1tYXAiKSx0aGlzLl9yZW1vdmVkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgicmVtb3ZlIikpfSxpLnByb3RvdHlwZS50cmlnZ2VyUmVwYWludD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5zdHlsZSYmIXRoaXMuX2ZyYW1lJiYodGhpcy5fZnJhbWU9dC5icm93c2VyLmZyYW1lKChmdW5jdGlvbih0KXtlLl9mcmFtZT1udWxsLGUuX3JlbmRlcih0KX0pKSl9LGkucHJvdG90eXBlLl9vbldpbmRvd09ubGluZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZSgpfSxpLnByb3RvdHlwZS5fb25XaW5kb3dSZXNpemU9ZnVuY3Rpb24odCl7dGhpcy5fdHJhY2tSZXNpemUmJnRoaXMucmVzaXplKHtvcmlnaW5hbEV2ZW50OnR9KS5fdXBkYXRlKCl9LGEuc2hvd1RpbGVCb3VuZGFyaWVzLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzfSxhLnNob3dUaWxlQm91bmRhcmllcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzIT09dCYmKHRoaXMuX3Nob3dUaWxlQm91bmRhcmllcz10LHRoaXMuX3VwZGF0ZSgpKX0sYS5zaG93UGFkZGluZy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dQYWRkaW5nfSxhLnNob3dQYWRkaW5nLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93UGFkZGluZyE9PXQmJih0aGlzLl9zaG93UGFkZGluZz10LHRoaXMuX3VwZGF0ZSgpKX0sYS5zaG93Q29sbGlzaW9uQm94ZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXN9LGEuc2hvd0NvbGxpc2lvbkJveGVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMhPT10JiYodGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzPXQsdD90aGlzLnN0eWxlLl9nZW5lcmF0ZUNvbGxpc2lvbkJveGVzKCk6dGhpcy5fdXBkYXRlKCkpfSxhLnNob3dPdmVyZHJhd0luc3BlY3Rvci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcn0sYS5zaG93T3ZlcmRyYXdJbnNwZWN0b3Iuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvciE9PXQmJih0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I9dCx0aGlzLl91cGRhdGUoKSl9LGEucmVwYWludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3JlcGFpbnR9LGEucmVwYWludC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fcmVwYWludCE9PXQmJih0aGlzLl9yZXBhaW50PXQsdGhpcy50cmlnZ2VyUmVwYWludCgpKX0sYS52ZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3ZlcnRpY2VzfSxhLnZlcnRpY2VzLnNldD1mdW5jdGlvbih0KXt0aGlzLl92ZXJ0aWNlcz10LHRoaXMuX3VwZGF0ZSgpfSxpLnByb3RvdHlwZS5fc2V0Q2FjaGVMaW1pdHM9ZnVuY3Rpb24oZSxyKXt0LnNldENhY2hlTGltaXRzKGUscil9LGEudmVyc2lvbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC52ZXJzaW9ufSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLnByb3RvdHlwZSxhKSxpfShtaSk7ZnVuY3Rpb24gQWkodCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9dmFyIFNpPXtzaG93Q29tcGFzczohMCxzaG93Wm9vbTohMCx2aXN1YWxpemVQaXRjaDohMX0sRWk9ZnVuY3Rpb24oZSl7dmFyIG49dGhpczt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sU2ksZSksdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSx0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSkpLHRoaXMub3B0aW9ucy5zaG93Wm9vbSYmKHQuYmluZEFsbChbIl9zZXRCdXR0b25UaXRsZSIsIl91cGRhdGVab29tQnV0dG9ucyJdLHRoaXMpLHRoaXMuX3pvb21JbkJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24oIm1hcGJveGdsLWN0cmwtem9vbS1pbiIsKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9tYXAuem9vbUluKHt9LHtvcmlnaW5hbEV2ZW50OnR9KX0pKSxyLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtaWNvbiIsdGhpcy5fem9vbUluQnV0dG9uKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCksdGhpcy5fem9vbU91dEJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24oIm1hcGJveGdsLWN0cmwtem9vbS1vdXQiLChmdW5jdGlvbih0KXtyZXR1cm4gbi5fbWFwLnpvb21PdXQoe30se29yaWdpbmFsRXZlbnQ6dH0pfSkpLHIuY3JlYXRlKCJzcGFuIiwibWFwYm94Z2wtY3RybC1pY29uIix0aGlzLl96b29tT3V0QnV0dG9uKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCkpLHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcyYmKHQuYmluZEFsbChbIl9yb3RhdGVDb21wYXNzQXJyb3ciXSx0aGlzKSx0aGlzLl9jb21wYXNzPXRoaXMuX2NyZWF0ZUJ1dHRvbigibWFwYm94Z2wtY3RybC1jb21wYXNzIiwoZnVuY3Rpb24odCl7bi5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoP24uX21hcC5yZXNldE5vcnRoUGl0Y2goe30se29yaWdpbmFsRXZlbnQ6dH0pOm4uX21hcC5yZXNldE5vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OnR9KX0pKSx0aGlzLl9jb21wYXNzSWNvbj1yLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtaWNvbiIsdGhpcy5fY29tcGFzcyksdGhpcy5fY29tcGFzc0ljb24uc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApKX07RWkucHJvdG90eXBlLl91cGRhdGVab29tQnV0dG9ucz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRab29tKCk7dGhpcy5fem9vbUluQnV0dG9uLmRpc2FibGVkPXQ9PT10aGlzLl9tYXAuZ2V0TWF4Wm9vbSgpLHRoaXMuX3pvb21PdXRCdXR0b24uZGlzYWJsZWQ9dD09PXRoaXMuX21hcC5nZXRNaW5ab29tKCl9LEVpLnByb3RvdHlwZS5fcm90YXRlQ29tcGFzc0Fycm93PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoPyJzY2FsZSgiKzEvTWF0aC5wb3coTWF0aC5jb3ModGhpcy5fbWFwLnRyYW5zZm9ybS5waXRjaCooTWF0aC5QSS8xODApKSwuNSkrIikgcm90YXRlWCgiK3RoaXMuX21hcC50cmFuc2Zvcm0ucGl0Y2grImRlZykgcm90YXRlWigiK3RoaXMuX21hcC50cmFuc2Zvcm0uYW5nbGUqKDE4MC9NYXRoLlBJKSsiZGVnKSI6InJvdGF0ZSgiK3RoaXMuX21hcC50cmFuc2Zvcm0uYW5nbGUqKDE4MC9NYXRoLlBJKSsiZGVnKSI7dGhpcy5fY29tcGFzc0ljb24uc3R5bGUudHJhbnNmb3JtPXR9LEVpLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5vcHRpb25zLnNob3dab29tJiYodGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fem9vbUluQnV0dG9uLCJab29tSW4iKSx0aGlzLl9zZXRCdXR0b25UaXRsZSh0aGlzLl96b29tT3V0QnV0dG9uLCJab29tT3V0IiksdGhpcy5fbWFwLm9uKCJ6b29tIix0aGlzLl91cGRhdGVab29tQnV0dG9ucyksdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMoKSksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fY29tcGFzcywiUmVzZXRCZWFyaW5nIiksdGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoJiZ0aGlzLl9tYXAub24oInBpdGNoIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX21hcC5vbigicm90YXRlIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdygpLHRoaXMuX2hhbmRsZXI9bmV3IENpKHRoaXMuX21hcCx0aGlzLl9jb21wYXNzLHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCkpLHRoaXMuX2NvbnRhaW5lcn0sRWkucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7ci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMuc2hvd1pvb20mJnRoaXMuX21hcC5vZmYoInpvb20iLHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2gmJnRoaXMuX21hcC5vZmYoInBpdGNoIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX21hcC5vZmYoInJvdGF0ZSIsdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KSx0aGlzLl9oYW5kbGVyLm9mZigpLGRlbGV0ZSB0aGlzLl9oYW5kbGVyKSxkZWxldGUgdGhpcy5fbWFwfSxFaS5wcm90b3R5cGUuX2NyZWF0ZUJ1dHRvbj1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY3JlYXRlKCJidXR0b24iLHQsdGhpcy5fY29udGFpbmVyKTtyZXR1cm4gbi50eXBlPSJidXR0b24iLG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGUpLG59LEVpLnByb3RvdHlwZS5fc2V0QnV0dG9uVGl0bGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9tYXAuX2dldFVJU3RyaW5nKCJOYXZpZ2F0aW9uQ29udHJvbC4iK2UpO3QudGl0bGU9cix0LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIscil9O3ZhciBDaT1mdW5jdGlvbihlLG4saSl7dm9pZCAwPT09aSYmKGk9ITEpLHRoaXMuX2NsaWNrVG9sZXJhbmNlPTEwLHRoaXMuZWxlbWVudD1uLHRoaXMubW91c2VSb3RhdGU9bmV3IEduKHtjbGlja1RvbGVyYW5jZTplLmRyYWdSb3RhdGUuX21vdXNlUm90YXRlLl9jbGlja1RvbGVyYW5jZX0pLHRoaXMubWFwPWUsaSYmKHRoaXMubW91c2VQaXRjaD1uZXcgWW4oe2NsaWNrVG9sZXJhbmNlOmUuZHJhZ1JvdGF0ZS5fbW91c2VQaXRjaC5fY2xpY2tUb2xlcmFuY2V9KSksdC5iaW5kQWxsKFsibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIsInJlc2V0Il0sdGhpcyksci5hZGRFdmVudExpc3RlbmVyKG4sIm1vdXNlZG93biIsdGhpcy5tb3VzZWRvd24pLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJ0b3VjaHN0YXJ0Iix0aGlzLnRvdWNoc3RhcnQse3Bhc3NpdmU6ITF9KSxyLmFkZEV2ZW50TGlzdGVuZXIobiwidG91Y2htb3ZlIix0aGlzLnRvdWNobW92ZSksci5hZGRFdmVudExpc3RlbmVyKG4sInRvdWNoZW5kIix0aGlzLnRvdWNoZW5kKSxyLmFkZEV2ZW50TGlzdGVuZXIobiwidG91Y2hjYW5jZWwiLHRoaXMucmVzZXQpfTtmdW5jdGlvbiBMaShlLHIsbil7aWYoZT1uZXcgdC5MbmdMYXQoZS5sbmcsZS5sYXQpLHIpe3ZhciBpPW5ldyB0LkxuZ0xhdChlLmxuZy0zNjAsZS5sYXQpLGE9bmV3IHQuTG5nTGF0KGUubG5nKzM2MCxlLmxhdCksbz1uLmxvY2F0aW9uUG9pbnQoZSkuZGlzdFNxcihyKTtuLmxvY2F0aW9uUG9pbnQoaSkuZGlzdFNxcihyKTxvP2U9aTpuLmxvY2F0aW9uUG9pbnQoYSkuZGlzdFNxcihyKTxvJiYoZT1hKX1mb3IoO01hdGguYWJzKGUubG5nLW4uY2VudGVyLmxuZyk+MTgwOyl7dmFyIHM9bi5sb2NhdGlvblBvaW50KGUpO2lmKHMueD49MCYmcy55Pj0wJiZzLng8PW4ud2lkdGgmJnMueTw9bi5oZWlnaHQpYnJlYWs7ZS5sbmc+bi5jZW50ZXIubG5nP2UubG5nLT0zNjA6ZS5sbmcrPTM2MH1yZXR1cm4gZX1DaS5wcm90b3R5cGUuZG93bj1mdW5jdGlvbih0LGUpe3RoaXMubW91c2VSb3RhdGUubW91c2Vkb3duKHQsZSksdGhpcy5tb3VzZVBpdGNoJiZ0aGlzLm1vdXNlUGl0Y2gubW91c2Vkb3duKHQsZSksci5kaXNhYmxlRHJhZygpfSxDaS5wcm90b3R5cGUubW92ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubWFwLG49dGhpcy5tb3VzZVJvdGF0ZS5tb3VzZW1vdmVXaW5kb3codCxlKTtpZihuJiZuLmJlYXJpbmdEZWx0YSYmci5zZXRCZWFyaW5nKHIuZ2V0QmVhcmluZygpK24uYmVhcmluZ0RlbHRhKSx0aGlzLm1vdXNlUGl0Y2gpe3ZhciBpPXRoaXMubW91c2VQaXRjaC5tb3VzZW1vdmVXaW5kb3codCxlKTtpJiZpLnBpdGNoRGVsdGEmJnIuc2V0UGl0Y2goci5nZXRQaXRjaCgpK2kucGl0Y2hEZWx0YSl9fSxDaS5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50O3IucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LCJtb3VzZWRvd24iLHRoaXMubW91c2Vkb3duKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodCwidG91Y2hzdGFydCIsdGhpcy50b3VjaHN0YXJ0LHtwYXNzaXZlOiExfSksci5yZW1vdmVFdmVudExpc3RlbmVyKHQsInRvdWNobW92ZSIsdGhpcy50b3VjaG1vdmUpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LCJ0b3VjaGVuZCIsdGhpcy50b3VjaGVuZCksci5yZW1vdmVFdmVudExpc3RlbmVyKHQsInRvdWNoY2FuY2VsIix0aGlzLnJlc2V0KSx0aGlzLm9mZlRlbXAoKX0sQ2kucHJvdG90eXBlLm9mZlRlbXA9ZnVuY3Rpb24oKXtyLmVuYWJsZURyYWcoKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodC53aW5kb3csIm1vdXNlbW92ZSIsdGhpcy5tb3VzZW1vdmUpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LndpbmRvdywibW91c2V1cCIsdGhpcy5tb3VzZXVwKX0sQ2kucHJvdG90eXBlLm1vdXNlZG93bj1mdW5jdGlvbihlKXt0aGlzLmRvd24odC5leHRlbmQoe30sZSx7Y3RybEtleTohMCxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiBlLnByZXZlbnREZWZhdWx0KCl9fSksci5tb3VzZVBvcyh0aGlzLmVsZW1lbnQsZSkpLHIuYWRkRXZlbnRMaXN0ZW5lcih0LndpbmRvdywibW91c2Vtb3ZlIix0aGlzLm1vdXNlbW92ZSksci5hZGRFdmVudExpc3RlbmVyKHQud2luZG93LCJtb3VzZXVwIix0aGlzLm1vdXNldXApfSxDaS5wcm90b3R5cGUubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe3RoaXMubW92ZSh0LHIubW91c2VQb3ModGhpcy5lbGVtZW50LHQpKX0sQ2kucHJvdG90eXBlLm1vdXNldXA9ZnVuY3Rpb24odCl7dGhpcy5tb3VzZVJvdGF0ZS5tb3VzZXVwV2luZG93KHQpLHRoaXMubW91c2VQaXRjaCYmdGhpcy5tb3VzZVBpdGNoLm1vdXNldXBXaW5kb3codCksdGhpcy5vZmZUZW1wKCl9LENpLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQpezEhPT10LnRhcmdldFRvdWNoZXMubGVuZ3RoP3RoaXMucmVzZXQoKToodGhpcy5fc3RhcnRQb3M9dGhpcy5fbGFzdFBvcz1yLnRvdWNoUG9zKHRoaXMuZWxlbWVudCx0LnRhcmdldFRvdWNoZXMpWzBdLHRoaXMuZG93bih7dHlwZToibW91c2Vkb3duIixidXR0b246MCxjdHJsS2V5OiEwLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKX19LHRoaXMuX3N0YXJ0UG9zKSl9LENpLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCl7MSE9PXQudGFyZ2V0VG91Y2hlcy5sZW5ndGg/dGhpcy5yZXNldCgpOih0aGlzLl9sYXN0UG9zPXIudG91Y2hQb3ModGhpcy5lbGVtZW50LHQudGFyZ2V0VG91Y2hlcylbMF0sdGhpcy5tb3ZlKHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9fSx0aGlzLl9sYXN0UG9zKSl9LENpLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0KXswPT09dC50YXJnZXRUb3VjaGVzLmxlbmd0aCYmdGhpcy5fc3RhcnRQb3MmJnRoaXMuX2xhc3RQb3MmJnRoaXMuX3N0YXJ0UG9zLmRpc3QodGhpcy5fbGFzdFBvcyk8dGhpcy5fY2xpY2tUb2xlcmFuY2UmJnRoaXMuZWxlbWVudC5jbGljaygpLHRoaXMucmVzZXQoKX0sQ2kucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5tb3VzZVJvdGF0ZS5yZXNldCgpLHRoaXMubW91c2VQaXRjaCYmdGhpcy5tb3VzZVBpdGNoLnJlc2V0KCksZGVsZXRlIHRoaXMuX3N0YXJ0UG9zLGRlbGV0ZSB0aGlzLl9sYXN0UG9zLHRoaXMub2ZmVGVtcCgpfTt2YXIgSWk9e2NlbnRlcjoidHJhbnNsYXRlKC01MCUsLTUwJSkiLHRvcDoidHJhbnNsYXRlKC01MCUsMCkiLCJ0b3AtbGVmdCI6InRyYW5zbGF0ZSgwLDApIiwidG9wLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLDApIixib3R0b206InRyYW5zbGF0ZSgtNTAlLC0xMDAlKSIsImJvdHRvbS1sZWZ0IjoidHJhbnNsYXRlKDAsLTEwMCUpIiwiYm90dG9tLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLC0xMDAlKSIsbGVmdDoidHJhbnNsYXRlKDAsLTUwJSkiLHJpZ2h0OiJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkifTtmdW5jdGlvbiBQaSh0LGUscil7dmFyIG49dC5jbGFzc0xpc3Q7Zm9yKHZhciBpIGluIElpKW4ucmVtb3ZlKCJtYXBib3hnbC0iK3IrIi1hbmNob3ItIitpKTtuLmFkZCgibWFwYm94Z2wtIityKyItYW5jaG9yLSIrZSl9dmFyIHppLE9pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpKXt2YXIgYT10aGlzO2lmKGUuY2FsbCh0aGlzKSwobiBpbnN0YW5jZW9mIHQud2luZG93LkhUTUxFbGVtZW50fHxpKSYmKG49dC5leHRlbmQoe2VsZW1lbnQ6bn0saSkpLHQuYmluZEFsbChbIl91cGRhdGUiLCJfb25Nb3ZlIiwiX29uVXAiLCJfYWRkRHJhZ0hhbmRsZXIiLCJfb25NYXBDbGljayIsIl9vbktleVByZXNzIl0sdGhpcyksdGhpcy5fYW5jaG9yPW4mJm4uYW5jaG9yfHwiY2VudGVyIix0aGlzLl9jb2xvcj1uJiZuLmNvbG9yfHwiIzNGQjFDRSIsdGhpcy5fZHJhZ2dhYmxlPW4mJm4uZHJhZ2dhYmxlfHwhMSx0aGlzLl9zdGF0ZT0iaW5hY3RpdmUiLHRoaXMuX3JvdGF0aW9uPW4mJm4ucm90YXRpb258fDAsdGhpcy5fcm90YXRpb25BbGlnbm1lbnQ9biYmbi5yb3RhdGlvbkFsaWdubWVudHx8ImF1dG8iLHRoaXMuX3BpdGNoQWxpZ25tZW50PW4mJm4ucGl0Y2hBbGlnbm1lbnQmJiJhdXRvIiE9PW4ucGl0Y2hBbGlnbm1lbnQ/bi5waXRjaEFsaWdubWVudDp0aGlzLl9yb3RhdGlvbkFsaWdubWVudCxuJiZuLmVsZW1lbnQpdGhpcy5fZWxlbWVudD1uLmVsZW1lbnQsdGhpcy5fb2Zmc2V0PXQuUG9pbnQuY29udmVydChuJiZuLm9mZnNldHx8WzAsMF0pO2Vsc2V7dGhpcy5fZGVmYXVsdE1hcmtlcj0hMCx0aGlzLl9lbGVtZW50PXIuY3JlYXRlKCJkaXYiKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIk1hcCBtYXJrZXIiKTt2YXIgbz1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO28uc2V0QXR0cmlidXRlTlMobnVsbCwiZGlzcGxheSIsImJsb2NrIiksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLCI0MXB4Iiksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIsIjI3cHgiKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsInZpZXdCb3giLCIwIDAgMjcgNDEiKTt2YXIgcz1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtzLnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZSIsIm5vbmUiKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS13aWR0aCIsIjEiKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCJub25lIikscy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIik7dmFyIGw9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7bC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJub256ZXJvIik7dmFyIGM9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7Yy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMy4wLCAyOS4wKSIpLGMuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiMwMDAwMDAiKTtmb3IodmFyIHU9MCxmPVt7cng6IjEwLjUiLHJ5OiI1LjI1MDAyMjczIn0se3J4OiIxMC41IixyeToiNS4yNTAwMjI3MyJ9LHtyeDoiOS41IixyeToiNC43NzI3NTAwNyJ9LHtyeDoiOC41IixyeToiNC4yOTU0OTkzNiJ9LHtyeDoiNy41IixyeToiMy44MTgyMjMwOCJ9LHtyeDoiNi41IixyeToiMy4zNDA5NDY3OSJ9LHtyeDoiNS41IixyeToiMi44NjM2NzA1MSJ9LHtyeDoiNC41IixyeToiMi4zODYzNjg2NCJ9XTt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV0scD1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImVsbGlwc2UiKTtwLnNldEF0dHJpYnV0ZU5TKG51bGwsIm9wYWNpdHkiLCIwLjA0IikscC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeCIsIjEwLjUiKSxwLnNldEF0dHJpYnV0ZU5TKG51bGwsImN5IiwiNS44MDAyOTAwOCIpLHAuc2V0QXR0cmlidXRlTlMobnVsbCwicngiLGgucngpLHAuc2V0QXR0cmlidXRlTlMobnVsbCwicnkiLGgucnkpLGMuYXBwZW5kQ2hpbGQocCl9dmFyIGQ9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7ZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIix0aGlzLl9jb2xvcik7dmFyIGc9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiwiTTI3LDEzLjUgQzI3LDE5LjA3NDY0NCAyMC4yNTAwMDEsMjcuMDAwMDAyIDE0Ljc1LDM0LjUwMDAwMiBDMTQuMDE2NjY1LDM1LjUwMDAwNCAxMi45ODMzMzUsMzUuNTAwMDA0IDEyLjI1LDM0LjUwMDAwMiBDNi43NDk5OTkzLDI3LjAwMDAwMiAwLDE5LjIyMjU2MiAwLDEzLjUgQzAsNi4wNDQxNTU5IDYuMDQ0MTU1OSwwIDEzLjUsMCBDMjAuOTU1ODQ0LDAgMjcsNi4wNDQxNTU5IDI3LDEzLjUgWiIpLGQuYXBwZW5kQ2hpbGQoZyk7dmFyIG09ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7bS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJvcGFjaXR5IiwiMC4yNSIpLG0uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiMwMDAwMDAiKTt2YXIgdj1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt2LnNldEF0dHJpYnV0ZU5TKG51bGwsImQiLCJNMTMuNSwwIEM2LjA0NDE1NTksMCAwLDYuMDQ0MTU1OSAwLDEzLjUgQzAsMTkuMjIyNTYyIDYuNzQ5OTk5MywyNyAxMi4yNSwzNC41IEMxMywzNS41MjI3MjcgMTQuMDE2NjY0LDM1LjUwMDAwNCAxNC43NSwzNC41IEMyMC4yNTAwMDEsMjcgMjcsMTkuMDc0NjQ0IDI3LDEzLjUgQzI3LDYuMDQ0MTU1OSAyMC45NTU4NDQsMCAxMy41LDAgWiBNMTMuNSwxIEMyMC40MTU0MDQsMSAyNiw2LjU4NDU5NiAyNiwxMy41IEMyNiwxNS44OTg2NTcgMjQuNDk1NTg0LDE5LjE4MTQzMSAyMi4yMjA3MDMsMjIuNzM4MjgxIEMxOS45NDU4MjMsMjYuMjk1MTMyIDE2LjcwNTExOSwzMC4xNDIxNjcgMTMuOTQzMzU5LDMzLjkwODIwMyBDMTMuNzQzNDQ1LDM0LjE4MDgxNCAxMy42MTI3MTUsMzQuMzIyNzM4IDEzLjUsMzQuNDQxNDA2IEMxMy4zODcyODUsMzQuMzIyNzM4IDEzLjI1NjU1NSwzNC4xODA4MTQgMTMuMDU2NjQxLDMzLjkwODIwMyBDMTAuMjg0NDgxLDMwLjEyNzk4NSA3LjQxNDg2ODQsMjYuMzE0MTU5IDUuMDE1NjI1LDIyLjc3MzQzOCBDMi42MTYzODE2LDE5LjIzMjcxNSAxLDE1Ljk1MzUzOCAxLDEzLjUgQzEsNi41ODQ1OTYgNi41ODQ1OTYsMSAxMy41LDEgWiIpLG0uYXBwZW5kQ2hpbGQodik7dmFyIHk9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7eS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNi4wLCA3LjApIikseS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiI0ZGRkZGRiIpO3ZhciB4PXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO3guc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlKDguMCwgOC4wKSIpO3ZhciBiPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7Yi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiIzAwMDAwMCIpLGIuc2V0QXR0cmlidXRlTlMobnVsbCwib3BhY2l0eSIsIjAuMjUiKSxiLnNldEF0dHJpYnV0ZU5TKG51bGwsImN4IiwiNS41IiksYi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeSIsIjUuNSIpLGIuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsIjUuNDk5OTk2MiIpO3ZhciBfPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7Xy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiI0ZGRkZGRiIpLF8uc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLCI1LjUiKSxfLnNldEF0dHJpYnV0ZU5TKG51bGwsImN5IiwiNS41IiksXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJyIiwiNS40OTk5OTYyIikseC5hcHBlbmRDaGlsZChiKSx4LmFwcGVuZENoaWxkKF8pLGwuYXBwZW5kQ2hpbGQoYyksbC5hcHBlbmRDaGlsZChkKSxsLmFwcGVuZENoaWxkKG0pLGwuYXBwZW5kQ2hpbGQoeSksbC5hcHBlbmRDaGlsZCh4KSxvLmFwcGVuZENoaWxkKGwpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobyksdGhpcy5fb2Zmc2V0PXQuUG9pbnQuY29udmVydChuJiZuLm9mZnNldHx8WzAsLTE0XSl9dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1tYXJrZXIiKSx0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0pKSx0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0pKSx0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoZnVuY3Rpb24oKXt2YXIgdD1hLl9tYXAuZ2V0Q29udGFpbmVyKCk7dC5zY3JvbGxUb3A9MCx0LnNjcm9sbExlZnQ9MH0pKSxQaSh0aGlzLl9lbGVtZW50LHRoaXMuX2FuY2hvciwibWFya2VyIiksdGhpcy5fcG9wdXA9bnVsbH1yZXR1cm4gZSYmKG4uX19wcm90b19fPWUpLChuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dCx0LmdldENhbnZhc0NvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHQub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlKSx0aGlzLnNldERyYWdnYWJsZSh0aGlzLl9kcmFnZ2FibGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX29uTWFwQ2xpY2spLHRoaXN9LG4ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJjbGljayIsdGhpcy5fb25NYXBDbGljayksdGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoIm1vdXNlZG93biIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpLHRoaXMuX21hcC5vZmYoInRvdWNoc3RhcnQiLHRoaXMuX2FkZERyYWdIYW5kbGVyKSx0aGlzLl9tYXAub2ZmKCJtb3VzZXVwIix0aGlzLl9vblVwKSx0aGlzLl9tYXAub2ZmKCJ0b3VjaGVuZCIsdGhpcy5fb25VcCksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vZmYoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSxkZWxldGUgdGhpcy5fbWFwKSxyLnJlbW92ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAucmVtb3ZlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0TG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sbi5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9sbmdMYXQ9dC5MbmdMYXQuY29udmVydChlKSx0aGlzLl9wb3M9bnVsbCx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCksdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxuLnByb3RvdHlwZS5zZXRQb3B1cD1mdW5jdGlvbih0KXtpZih0aGlzLl9wb3B1cCYmKHRoaXMuX3BvcHVwLnJlbW92ZSgpLHRoaXMuX3BvcHVwPW51bGwsdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsdGhpcy5fb25LZXlQcmVzcyksdGhpcy5fb3JpZ2luYWxUYWJJbmRleHx8dGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpLHQpe2lmKCEoIm9mZnNldCJpbiB0Lm9wdGlvbnMpKXt2YXIgZT1NYXRoLnNxcnQoTWF0aC5wb3coMTMuNSwyKS8yKTt0Lm9wdGlvbnMub2Zmc2V0PXRoaXMuX2RlZmF1bHRNYXJrZXI/e3RvcDpbMCwwXSwidG9wLWxlZnQiOlswLDBdLCJ0b3AtcmlnaHQiOlswLDBdLGJvdHRvbTpbMCwtMzguMV0sImJvdHRvbS1sZWZ0IjpbZSwtMSooMjQuNitlKV0sImJvdHRvbS1yaWdodCI6Wy1lLC0xKigyNC42K2UpXSxsZWZ0OlsxMy41LC0yNC42XSxyaWdodDpbLTEzLjUsLTI0LjZdfTp0aGlzLl9vZmZzZXR9dGhpcy5fcG9wdXA9dCx0aGlzLl9sbmdMYXQmJnRoaXMuX3BvcHVwLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpLHRoaXMuX29yaWdpbmFsVGFiSW5kZXg9dGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IiksdGhpcy5fb3JpZ2luYWxUYWJJbmRleHx8dGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHRoaXMuX29uS2V5UHJlc3MpfXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5fb25LZXlQcmVzcz1mdW5jdGlvbih0KXt2YXIgZT10LmNvZGUscj10LmNoYXJDb2RlfHx0LmtleUNvZGU7IlNwYWNlIiE9PWUmJiJFbnRlciIhPT1lJiYzMiE9PXImJjEzIT09cnx8dGhpcy50b2dnbGVQb3B1cCgpfSxuLnByb3RvdHlwZS5fb25NYXBDbGljaz1mdW5jdGlvbih0KXt2YXIgZT10Lm9yaWdpbmFsRXZlbnQudGFyZ2V0LHI9dGhpcy5fZWxlbWVudDt0aGlzLl9wb3B1cCYmKGU9PT1yfHxyLmNvbnRhaW5zKGUpKSYmdGhpcy50b2dnbGVQb3B1cCgpfSxuLnByb3RvdHlwZS5nZXRQb3B1cD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sbi5wcm90b3R5cGUudG9nZ2xlUG9wdXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wb3B1cDtyZXR1cm4gdD8odC5pc09wZW4oKT90LnJlbW92ZSgpOnQuYWRkVG8odGhpcy5fbWFwKSx0aGlzKTp0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX21hcCl7dGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuX2xuZ0xhdD1MaSh0aGlzLl9sbmdMYXQsdGhpcy5fcG9zLHRoaXMuX21hcC50cmFuc2Zvcm0pKSx0aGlzLl9wb3M9dGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KS5fYWRkKHRoaXMuX29mZnNldCk7dmFyIGU9IiI7InZpZXdwb3J0Ij09PXRoaXMuX3JvdGF0aW9uQWxpZ25tZW50fHwiYXV0byI9PT10aGlzLl9yb3RhdGlvbkFsaWdubWVudD9lPSJyb3RhdGVaKCIrdGhpcy5fcm90YXRpb24rImRlZykiOiJtYXAiPT09dGhpcy5fcm90YXRpb25BbGlnbm1lbnQmJihlPSJyb3RhdGVaKCIrKHRoaXMuX3JvdGF0aW9uLXRoaXMuX21hcC5nZXRCZWFyaW5nKCkpKyJkZWcpIik7dmFyIG49IiI7InZpZXdwb3J0Ij09PXRoaXMuX3BpdGNoQWxpZ25tZW50fHwiYXV0byI9PT10aGlzLl9waXRjaEFsaWdubWVudD9uPSJyb3RhdGVYKDBkZWcpIjoibWFwIj09PXRoaXMuX3BpdGNoQWxpZ25tZW50JiYobj0icm90YXRlWCgiK3RoaXMuX21hcC5nZXRQaXRjaCgpKyJkZWcpIiksdCYmIm1vdmVlbmQiIT09dC50eXBlfHwodGhpcy5fcG9zPXRoaXMuX3Bvcy5yb3VuZCgpKSxyLnNldFRyYW5zZm9ybSh0aGlzLl9lbGVtZW50LElpW3RoaXMuX2FuY2hvcl0rIiB0cmFuc2xhdGUoIit0aGlzLl9wb3MueCsicHgsICIrdGhpcy5fcG9zLnkrInB4KSAiK24rIiAiK2UpfX0sbi5wcm90b3R5cGUuZ2V0T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29mZnNldH0sbi5wcm90b3R5cGUuc2V0T2Zmc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vZmZzZXQ9dC5Qb2ludC5jb252ZXJ0KGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24oZSl7dGhpcy5fcG9zPWUucG9pbnQuc3ViKHRoaXMuX3Bvc2l0aW9uRGVsdGEpLHRoaXMuX2xuZ0xhdD10aGlzLl9tYXAudW5wcm9qZWN0KHRoaXMuX3BvcyksdGhpcy5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KSx0aGlzLl9lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLCJwZW5kaW5nIj09PXRoaXMuX3N0YXRlJiYodGhpcy5fc3RhdGU9ImFjdGl2ZSIsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkcmFnc3RhcnQiKSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZHJhZyIpKX0sbi5wcm90b3R5cGUuX29uVXA9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHM9ImF1dG8iLHRoaXMuX3Bvc2l0aW9uRGVsdGE9bnVsbCx0aGlzLl9tYXAub2ZmKCJtb3VzZW1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwLm9mZigidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUpLCJhY3RpdmUiPT09dGhpcy5fc3RhdGUmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiZHJhZ2VuZCIpKSx0aGlzLl9zdGF0ZT0iaW5hY3RpdmUifSxuLnByb3RvdHlwZS5fYWRkRHJhZ0hhbmRsZXI9ZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudC5jb250YWlucyh0Lm9yaWdpbmFsRXZlbnQudGFyZ2V0KSYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9wb3NpdGlvbkRlbHRhPXQucG9pbnQuc3ViKHRoaXMuX3BvcykuYWRkKHRoaXMuX29mZnNldCksdGhpcy5fc3RhdGU9InBlbmRpbmciLHRoaXMuX21hcC5vbigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vbigidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vbmNlKCJtb3VzZXVwIix0aGlzLl9vblVwKSx0aGlzLl9tYXAub25jZSgidG91Y2hlbmQiLHRoaXMuX29uVXApKX0sbi5wcm90b3R5cGUuc2V0RHJhZ2dhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnZ2FibGU9ISF0LHRoaXMuX21hcCYmKHQ/KHRoaXMuX21hcC5vbigibW91c2Vkb3duIix0aGlzLl9hZGREcmFnSGFuZGxlciksdGhpcy5fbWFwLm9uKCJ0b3VjaHN0YXJ0Iix0aGlzLl9hZGREcmFnSGFuZGxlcikpOih0aGlzLl9tYXAub2ZmKCJtb3VzZWRvd24iLHRoaXMuX2FkZERyYWdIYW5kbGVyKSx0aGlzLl9tYXAub2ZmKCJ0b3VjaHN0YXJ0Iix0aGlzLl9hZGREcmFnSGFuZGxlcikpKSx0aGlzfSxuLnByb3RvdHlwZS5pc0RyYWdnYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGV9LG4ucHJvdG90eXBlLnNldFJvdGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yb3RhdGlvbj10fHwwLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldFJvdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW9ufSxuLnByb3RvdHlwZS5zZXRSb3RhdGlvbkFsaWdubWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcm90YXRpb25BbGlnbm1lbnQ9dHx8ImF1dG8iLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldFJvdGF0aW9uQWxpZ25tZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50fSxuLnByb3RvdHlwZS5zZXRQaXRjaEFsaWdubWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGl0Y2hBbGlnbm1lbnQ9dCYmImF1dG8iIT09dD90OnRoaXMuX3JvdGF0aW9uQWxpZ25tZW50LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldFBpdGNoQWxpZ25tZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BpdGNoQWxpZ25tZW50fSxufSh0LkV2ZW50ZWQpLERpPXtwb3NpdGlvbk9wdGlvbnM6e2VuYWJsZUhpZ2hBY2N1cmFjeTohMSxtYXhpbXVtQWdlOjAsdGltZW91dDo2ZTN9LGZpdEJvdW5kc09wdGlvbnM6e21heFpvb206MTV9LHRyYWNrVXNlckxvY2F0aW9uOiExLHNob3dBY2N1cmFjeUNpcmNsZTohMCxzaG93VXNlckxvY2F0aW9uOiEwfSxSaT0wLEZpPSExLEJpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4ocil7ZS5jYWxsKHRoaXMpLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxEaSxyKSx0LmJpbmRBbGwoWyJfb25TdWNjZXNzIiwiX29uRXJyb3IiLCJfb25ab29tIiwiX2ZpbmlzaCIsIl9zZXR1cFVJIiwiX3VwZGF0ZUNhbWVyYSIsIl91cGRhdGVNYXJrZXIiXSx0aGlzKX1yZXR1cm4gZSYmKG4uX19wcm90b19fPWUpLChuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSxuPXRoaXMuX3NldHVwVUksdm9pZCAwIT09emk/bih6aSk6dm9pZCAwIT09dC53aW5kb3cubmF2aWdhdG9yLnBlcm1pc3Npb25zP3Qud2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZToiZ2VvbG9jYXRpb24ifSkudGhlbigoZnVuY3Rpb24odCl7bih6aT0iZGVuaWVkIiE9PXQuc3RhdGUpfSkpOm4oemk9ISF0LndpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24pLHRoaXMuX2NvbnRhaW5lcn0sbi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJih0LndpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD12b2lkIDApLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXImJnRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKSx0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlJiZ0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlciYmdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIucmVtb3ZlKCksci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKCJ6b29tIix0aGlzLl9vblpvb20pLHRoaXMuX21hcD12b2lkIDAsUmk9MCxGaT0hMX0sbi5wcm90b3R5cGUuX2lzT3V0T2ZNYXBNYXhCb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLmdldE1heEJvdW5kcygpLHI9dC5jb29yZHM7cmV0dXJuIGUmJihyLmxvbmdpdHVkZTxlLmdldFdlc3QoKXx8ci5sb25naXR1ZGU+ZS5nZXRFYXN0KCl8fHIubGF0aXR1ZGU8ZS5nZXRTb3V0aCgpfHxyLmxhdGl0dWRlPmUuZ2V0Tm9ydGgoKSl9LG4ucHJvdG90eXBlLl9zZXRFcnJvclN0YXRlPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOnRoaXMuX3dhdGNoU3RhdGU9IkFDVElWRV9FUlJPUiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKTticmVhaztjYXNlIkFDVElWRV9MT0NLIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKTticmVhaztjYXNlIkJBQ0tHUk9VTkQiOnRoaXMuX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkRfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpfX0sbi5wcm90b3R5cGUuX29uU3VjY2Vzcz1mdW5jdGlvbihlKXtpZih0aGlzLl9tYXApe2lmKHRoaXMuX2lzT3V0T2ZNYXBNYXhCb3VuZHMoZSkpcmV0dXJuIHRoaXMuX3NldEVycm9yU3RhdGUoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm91dG9mbWF4Ym91bmRzIixlKSksdGhpcy5fdXBkYXRlTWFya2VyKCksdm9pZCB0aGlzLl9maW5pc2goKTtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pc3dpdGNoKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uPWUsdGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZSJXQUlUSU5HX0FDVElWRSI6Y2FzZSJBQ1RJVkVfTE9DSyI6Y2FzZSJBQ1RJVkVfRVJST1IiOnRoaXMuX3dhdGNoU3RhdGU9IkFDVElWRV9MT0NLIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIik7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjpjYXNlIkJBQ0tHUk9VTkRfRVJST1IiOnRoaXMuX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkQiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpfXRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiYiT0ZGIiE9PXRoaXMuX3dhdGNoU3RhdGUmJnRoaXMuX3VwZGF0ZU1hcmtlcihlKSx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJiJBQ1RJVkVfTE9DSyIhPT10aGlzLl93YXRjaFN0YXRlfHx0aGlzLl91cGRhdGVDYW1lcmEoZSksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImdlb2xvY2F0ZSIsZSkpLHRoaXMuX2ZpbmlzaCgpfX0sbi5wcm90b3R5cGUuX3VwZGF0ZUNhbWVyYT1mdW5jdGlvbihlKXt2YXIgcj1uZXcgdC5MbmdMYXQoZS5jb29yZHMubG9uZ2l0dWRlLGUuY29vcmRzLmxhdGl0dWRlKSxuPWUuY29vcmRzLmFjY3VyYWN5LGk9dGhpcy5fbWFwLmdldEJlYXJpbmcoKSxhPXQuZXh0ZW5kKHtiZWFyaW5nOml9LHRoaXMub3B0aW9ucy5maXRCb3VuZHNPcHRpb25zKTt0aGlzLl9tYXAuZml0Qm91bmRzKHIudG9Cb3VuZHMobiksYSx7Z2VvbG9jYXRlU291cmNlOiEwfSl9LG4ucHJvdG90eXBlLl91cGRhdGVNYXJrZXI9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHI9bmV3IHQuTG5nTGF0KGUuY29vcmRzLmxvbmdpdHVkZSxlLmNvb3Jkcy5sYXRpdHVkZSk7dGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIuc2V0TG5nTGF0KHIpLmFkZFRvKHRoaXMuX21hcCksdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnNldExuZ0xhdChyKS5hZGRUbyh0aGlzLl9tYXApLHRoaXMuX2FjY3VyYWN5PWUuY29vcmRzLmFjY3VyYWN5LHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlJiZ0aGlzLl91cGRhdGVDaXJjbGVSYWRpdXMoKX1lbHNlIHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKSx0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlci5yZW1vdmUoKX0sbi5wcm90b3R5cGUuX3VwZGF0ZUNpcmNsZVJhZGl1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fY29udGFpbmVyLmNsaWVudEhlaWdodC8yLGU9dGhpcy5fbWFwLnVucHJvamVjdChbMCx0XSkscj10aGlzLl9tYXAudW5wcm9qZWN0KFsxLHRdKSxuPWUuZGlzdGFuY2VUbyhyKSxpPU1hdGguY2VpbCgyKnRoaXMuX2FjY3VyYWN5L24pO3RoaXMuX2NpcmNsZUVsZW1lbnQuc3R5bGUud2lkdGg9aSsicHgiLHRoaXMuX2NpcmNsZUVsZW1lbnQuc3R5bGUuaGVpZ2h0PWkrInB4In0sbi5wcm90b3R5cGUuX29uWm9vbT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlJiZ0aGlzLl91cGRhdGVDaXJjbGVSYWRpdXMoKX0sbi5wcm90b3R5cGUuX29uRXJyb3I9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbWFwKXtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24paWYoMT09PWUuY29kZSl7dGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5kaXNhYmxlZD0hMDt2YXIgcj10aGlzLl9tYXAuX2dldFVJU3RyaW5nKCJHZW9sb2NhdGVDb250cm9sLkxvY2F0aW9uTm90QXZhaWxhYmxlIik7dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnRpdGxlPXIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsciksdm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEJiZ0aGlzLl9jbGVhcldhdGNoKCl9ZWxzZXtpZigzPT09ZS5jb2RlJiZGaSlyZXR1cm47dGhpcy5fc2V0RXJyb3JTdGF0ZSgpfSJPRkYiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImVycm9yIixlKSksdGhpcy5fZmluaXNoKCl9fSxuLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fdGltZW91dElkJiZjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkKSx0aGlzLl90aW1lb3V0SWQ9dm9pZCAwfSxuLnByb3RvdHlwZS5fc2V0dXBVST1mdW5jdGlvbihlKXt2YXIgbj10aGlzO2lmKHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9KSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uPXIuY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZSIsdGhpcy5fY29udGFpbmVyKSxyLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtaWNvbiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnR5cGU9ImJ1dHRvbiIsITE9PT1lKXt0Lndhcm5PbmNlKCJHZW9sb2NhdGlvbiBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUgc28gdGhlIEdlb2xvY2F0ZUNvbnRyb2wgd2lsbCBiZSBkaXNhYmxlZC4iKTt2YXIgaT10aGlzLl9tYXAuX2dldFVJU3RyaW5nKCJHZW9sb2NhdGVDb250cm9sLkxvY2F0aW9uTm90QXZhaWxhYmxlIik7dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmRpc2FibGVkPSEwLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZT1pLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGkpfWVsc2V7dmFyIGE9dGhpcy5fbWFwLl9nZXRVSVN0cmluZygiR2VvbG9jYXRlQ29udHJvbC5GaW5kTXlMb2NhdGlvbiIpO3RoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZT1hLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGEpfXRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIiksdGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIiksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJih0aGlzLl9kb3RFbGVtZW50PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdCIpLHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlcj1uZXcgT2kodGhpcy5fZG90RWxlbWVudCksdGhpcy5fY2lyY2xlRWxlbWVudD1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1hY2N1cmFjeS1jaXJjbGUiKSx0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlcj1uZXcgT2koe2VsZW1lbnQ6dGhpcy5fY2lyY2xlRWxlbWVudCxwaXRjaEFsaWdubWVudDoibWFwIn0pLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIpLHRoaXMuX21hcC5vbigiem9vbSIsdGhpcy5fb25ab29tKSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLnRyaWdnZXIuYmluZCh0aGlzKSksdGhpcy5fc2V0dXA9ITAsdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiZ0aGlzLl9tYXAub24oIm1vdmVzdGFydCIsKGZ1bmN0aW9uKGUpe2UuZ2VvbG9jYXRlU291cmNlfHwiQUNUSVZFX0xPQ0siIT09bi5fd2F0Y2hTdGF0ZXx8ZS5vcmlnaW5hbEV2ZW50JiYicmVzaXplIj09PWUub3JpZ2luYWxFdmVudC50eXBlfHwobi5fd2F0Y2hTdGF0ZT0iQkFDS0dST1VORCIsbi5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSxuLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksbi5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbmVuZCIpKSl9KSl9LG4ucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24oKXtpZighdGhpcy5fc2V0dXApcmV0dXJuIHQud2Fybk9uY2UoIkdlb2xvY2F0ZSBjb250cm9sIHRyaWdnZXJlZCBiZWZvcmUgYWRkZWQgdG8gYSBtYXAiKSwhMTtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pe3N3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlIk9GRiI6dGhpcy5fd2F0Y2hTdGF0ZT0iV0FJVElOR19BQ1RJVkUiLHRoaXMuZmlyZShuZXcgdC5FdmVudCgidHJhY2t1c2VybG9jYXRpb25zdGFydCIpKTticmVhaztjYXNlIldBSVRJTkdfQUNUSVZFIjpjYXNlIkFDVElWRV9MT0NLIjpjYXNlIkFDVElWRV9FUlJPUiI6Y2FzZSJCQUNLR1JPVU5EX0VSUk9SIjpSaS0tLEZpPSExLHRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uZW5kIikpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6dGhpcy5fd2F0Y2hTdGF0ZT0iQUNUSVZFX0xPQ0siLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fbGFzdEtub3duUG9zaXRpb24mJnRoaXMuX3VwZGF0ZUNhbWVyYSh0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbnN0YXJ0IikpfXN3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlIldBSVRJTkdfQUNUSVZFIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKTticmVhaztjYXNlIkFDVElWRV9MT0NLIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIik7YnJlYWs7Y2FzZSJBQ1RJVkVfRVJST1IiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKTticmVhaztjYXNlIkJBQ0tHUk9VTkRfRVJST1IiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKX1pZigiT0ZGIj09PXRoaXMuX3dhdGNoU3RhdGUmJnZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCl0aGlzLl9jbGVhcldhdGNoKCk7ZWxzZSBpZih2b2lkIDA9PT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpe3ZhciBlO3RoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpLCsrUmk+MT8oZT17bWF4aW11bUFnZTo2ZTUsdGltZW91dDowfSxGaT0hMCk6KGU9dGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyxGaT0hMSksdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEPXQud2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLGUpfX1lbHNlIHQud2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24odGhpcy5fb25TdWNjZXNzLHRoaXMuX29uRXJyb3IsdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyksdGhpcy5fdGltZW91dElkPXNldFRpbWVvdXQodGhpcy5fZmluaXNoLDFlNCk7cmV0dXJuITB9LG4ucHJvdG90eXBlLl9jbGVhcldhdGNoPWZ1bmN0aW9uKCl7dC53aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dm9pZCAwLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fdXBkYXRlTWFya2VyKG51bGwpfSxufSh0LkV2ZW50ZWQpLE5pPXttYXhXaWR0aDoxMDAsdW5pdDoibWV0cmljIn0samk9ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LE5pLGUpLHQuYmluZEFsbChbIl9vbk1vdmUiLCJzZXRVbml0Il0sdGhpcyl9O2Z1bmN0aW9uIFVpKHQsZSxyKXt2YXIgbj1yJiZyLm1heFdpZHRofHwxMDAsaT10Ll9jb250YWluZXIuY2xpZW50SGVpZ2h0LzIsYT10LnVucHJvamVjdChbMCxpXSksbz10LnVucHJvamVjdChbbixpXSkscz1hLmRpc3RhbmNlVG8obyk7aWYociYmImltcGVyaWFsIj09PXIudW5pdCl7dmFyIGw9My4yODA4KnM7bD41MjgwP1ZpKGUsbixsLzUyODAsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5NaWxlcyIpKTpWaShlLG4sbCx0Ll9nZXRVSVN0cmluZygiU2NhbGVDb250cm9sLkZlZXQiKSl9ZWxzZSByJiYibmF1dGljYWwiPT09ci51bml0P1ZpKGUsbixzLzE4NTIsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5OYXV0aWNhbE1pbGVzIikpOnM+PTFlMz9WaShlLG4scy8xZTMsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5LaWxvbWV0ZXJzIikpOlZpKGUsbixzLHQuX2dldFVJU3RyaW5nKCJTY2FsZUNvbnRyb2wuTWV0ZXJzIikpfWZ1bmN0aW9uIFZpKHQsZSxyLG4pe3ZhciBpLGEsbyxzPShpPXIsKGE9TWF0aC5wb3coMTAsKCIiK01hdGguZmxvb3IoaSkpLmxlbmd0aC0xKSkqKG89KG89aS9hKT49MTA/MTA6bz49NT81Om8+PTM/MzpvPj0yPzI6bz49MT8xOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucG93KDEwLE1hdGguY2VpbCgtTWF0aC5sb2codCkvTWF0aC5MTjEwKSk7cmV0dXJuIE1hdGgucm91bmQodCplKS9lfShvKSkpO3Quc3R5bGUud2lkdGg9ZSoocy9yKSsicHgiLHQuaW5uZXJIVE1MPXMrIiZuYnNwOyIrbn1qaS5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuImJvdHRvbS1sZWZ0In0samkucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24oKXtVaSh0aGlzLl9tYXAsdGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucyl9LGppLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtc2NhbGUiLHQuZ2V0Q29udGFpbmVyKCkpLHRoaXMuX21hcC5vbigibW92ZSIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9vbk1vdmUoKSx0aGlzLl9jb250YWluZXJ9LGppLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3IucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9tYXA9dm9pZCAwfSxqaS5wcm90b3R5cGUuc2V0VW5pdD1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMudW5pdD10LFVpKHRoaXMuX21hcCx0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zKX07dmFyIHFpPWZ1bmN0aW9uKGUpe3RoaXMuX2Z1bGxzY3JlZW49ITEsZSYmZS5jb250YWluZXImJihlLmNvbnRhaW5lciBpbnN0YW5jZW9mIHQud2luZG93LkhUTUxFbGVtZW50P3RoaXMuX2NvbnRhaW5lcj1lLmNvbnRhaW5lcjp0Lndhcm5PbmNlKCJGdWxsIHNjcmVlbiBjb250cm9sICdjb250YWluZXInIG11c3QgYmUgYSBET00gZWxlbWVudC4iKSksdC5iaW5kQWxsKFsiX29uQ2xpY2tGdWxsc2NyZWVuIiwiX2NoYW5nZUljb24iXSx0aGlzKSwib25mdWxsc2NyZWVuY2hhbmdlImluIHQud2luZG93LmRvY3VtZW50P3RoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9ImZ1bGxzY3JlZW5jaGFuZ2UiOiJvbm1vemZ1bGxzY3JlZW5jaGFuZ2UiaW4gdC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0ibW96ZnVsbHNjcmVlbmNoYW5nZSI6Im9ud2Via2l0ZnVsbHNjcmVlbmNoYW5nZSJpbiB0LndpbmRvdy5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIjoib25tc2Z1bGxzY3JlZW5jaGFuZ2UiaW4gdC53aW5kb3cuZG9jdW1lbnQmJih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJNU0Z1bGxzY3JlZW5DaGFuZ2UiKX07cWkucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9jb250YWluZXI9dGhpcy5fbWFwLmdldENvbnRhaW5lcigpKSx0aGlzLl9jb250cm9sQ29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSx0aGlzLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0KCk/dGhpcy5fc2V0dXBVSSgpOih0aGlzLl9jb250cm9sQ29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQud2Fybk9uY2UoIlRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZnVsbHNjcmVlbiBtb2RlLiIpKSx0aGlzLl9jb250cm9sQ29udGFpbmVyfSxxaS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250cm9sQ29udGFpbmVyKSx0aGlzLl9tYXA9bnVsbCx0LndpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UsdGhpcy5fY2hhbmdlSWNvbil9LHFpLnByb3RvdHlwZS5fY2hlY2tGdWxsc2NyZWVuU3VwcG9ydD1mdW5jdGlvbigpe3JldHVybiEhKHQud2luZG93LmRvY3VtZW50LmZ1bGxzY3JlZW5FbmFibGVkfHx0LndpbmRvdy5kb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZHx8dC53aW5kb3cuZG9jdW1lbnQubXNGdWxsc2NyZWVuRW5hYmxlZHx8dC53aW5kb3cuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWQpfSxxaS5wcm90b3R5cGUuX3NldHVwVUk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mdWxsc2NyZWVuQnV0dG9uPXIuY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1jdHJsLWZ1bGxzY3JlZW4iLHRoaXMuX2NvbnRyb2xDb250YWluZXIpO3IuY3JlYXRlKCJzcGFuIiwibWFwYm94Z2wtY3RybC1pY29uIixlKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCksZS50eXBlPSJidXR0b24iLHRoaXMuX3VwZGF0ZVRpdGxlKCksdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fb25DbGlja0Z1bGxzY3JlZW4pLHQud2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSx0aGlzLl9jaGFuZ2VJY29uKX0scWkucHJvdG90eXBlLl91cGRhdGVUaXRsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFRpdGxlKCk7dGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHQpLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24udGl0bGU9dH0scWkucHJvdG90eXBlLl9nZXRUaXRsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAuX2dldFVJU3RyaW5nKHRoaXMuX2lzRnVsbHNjcmVlbigpPyJGdWxsc2NyZWVuQ29udHJvbC5FeGl0IjoiRnVsbHNjcmVlbkNvbnRyb2wuRW50ZXIiKX0scWkucHJvdG90eXBlLl9pc0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnVsbHNjcmVlbn0scWkucHJvdG90eXBlLl9jaGFuZ2VJY29uPWZ1bmN0aW9uKCl7KHQud2luZG93LmRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50fHx0LndpbmRvdy5kb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8dC53aW5kb3cuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fHQud2luZG93LmRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQpPT09dGhpcy5fY29udGFpbmVyIT09dGhpcy5fZnVsbHNjcmVlbiYmKHRoaXMuX2Z1bGxzY3JlZW49IXRoaXMuX2Z1bGxzY3JlZW4sdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCJtYXBib3hnbC1jdHJsLXNocmluayIpLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgibWFwYm94Z2wtY3RybC1mdWxsc2NyZWVuIiksdGhpcy5fdXBkYXRlVGl0bGUoKSl9LHFpLnByb3RvdHlwZS5fb25DbGlja0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXt0aGlzLl9pc0Z1bGxzY3JlZW4oKT90LndpbmRvdy5kb2N1bWVudC5leGl0RnVsbHNjcmVlbj90LndpbmRvdy5kb2N1bWVudC5leGl0RnVsbHNjcmVlbigpOnQud2luZG93LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4/dC53aW5kb3cuZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpOnQud2luZG93LmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4/dC53aW5kb3cuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpOnQud2luZG93LmRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4mJnQud2luZG93LmRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKTp0aGlzLl9jb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4/dGhpcy5fY29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuKCk6dGhpcy5fY29udGFpbmVyLm1velJlcXVlc3RGdWxsU2NyZWVuP3RoaXMuX2NvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpOnRoaXMuX2NvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuP3RoaXMuX2NvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuKCk6dGhpcy5fY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuJiZ0aGlzLl9jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKX07dmFyIEhpPXtjbG9zZUJ1dHRvbjohMCxjbG9zZU9uQ2xpY2s6ITAsY2xhc3NOYW1lOiIiLG1heFdpZHRoOiIyNDBweCJ9LEdpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4ocil7ZS5jYWxsKHRoaXMpLHRoaXMub3B0aW9ucz10LmV4dGVuZChPYmplY3QuY3JlYXRlKEhpKSxyKSx0LmJpbmRBbGwoWyJfdXBkYXRlIiwiX29uQ2xvc2UiLCJyZW1vdmUiLCJfb25Nb3VzZU1vdmUiLCJfb25Nb3VzZVVwIiwiX29uRHJhZyJdLHRoaXMpfXJldHVybiBlJiYobi5fX3Byb3RvX189ZSksKG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1uLG4ucHJvdG90eXBlLmFkZFRvPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAmJnRoaXMucmVtb3ZlKCksdGhpcy5fbWFwPWUsdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayYmdGhpcy5fbWFwLm9uKCJjbGljayIsdGhpcy5fb25DbG9zZSksdGhpcy5vcHRpb25zLmNsb3NlT25Nb3ZlJiZ0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX29uQ2xvc2UpLHRoaXMuX21hcC5vbigicmVtb3ZlIix0aGlzLnJlbW92ZSksdGhpcy5fdXBkYXRlKCksdGhpcy5fdHJhY2tQb2ludGVyPyh0aGlzLl9tYXAub24oIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUpLHRoaXMuX21hcC5vbigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKSx0aGlzLl9jb250YWluZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyIiksdGhpcy5fbWFwLl9jYW52YXNDb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdHJhY2stcG9pbnRlciIpKTp0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJvcGVuIikpLHRoaXN9LG4ucHJvdG90eXBlLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbWFwfSxuLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudCYmci5yZW1vdmUodGhpcy5fY29udGVudCksdGhpcy5fY29udGFpbmVyJiYoci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX29uQ2xvc2UpLHRoaXMuX21hcC5vZmYoImNsaWNrIix0aGlzLl9vbkNsb3NlKSx0aGlzLl9tYXAub2ZmKCJyZW1vdmUiLHRoaXMucmVtb3ZlKSx0aGlzLl9tYXAub2ZmKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlKSx0aGlzLl9tYXAub2ZmKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHRoaXMuX21hcC5vZmYoImRyYWciLHRoaXMuX29uRHJhZyksZGVsZXRlIHRoaXMuX21hcCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJjbG9zZSIpKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxuLnByb3RvdHlwZS5zZXRMbmdMYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xuZ0xhdD10LkxuZ0xhdC5jb252ZXJ0KGUpLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3RyYWNrUG9pbnRlcj0hMSx0aGlzLl91cGRhdGUoKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSksdGhpcy5fY29udGFpbmVyJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlciIpLHRoaXMuX21hcC5fY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLXRyYWNrLXBvaW50ZXIiKSksdGhpc30sbi5wcm90b3R5cGUudHJhY2tQb2ludGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYWNrUG9pbnRlcj0hMCx0aGlzLl9wb3M9bnVsbCx0aGlzLl91cGRhdGUoKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vbigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSksdGhpcy5fbWFwLm9uKCJkcmFnIix0aGlzLl9vbkRyYWcpLHRoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXIiKSx0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10cmFjay1wb2ludGVyIikpLHRoaXN9LG4ucHJvdG90eXBlLmdldEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxuLnByb3RvdHlwZS5zZXRUZXh0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNldERPTUNvbnRlbnQodC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpfSxuLnByb3RvdHlwZS5zZXRIVE1MPWZ1bmN0aW9uKGUpe3ZhciByLG49dC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9dC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9keSIpO2ZvcihpLmlubmVySFRNTD1lO3I9aS5maXJzdENoaWxkOyluLmFwcGVuZENoaWxkKHIpO3JldHVybiB0aGlzLnNldERPTUNvbnRlbnQobil9LG4ucHJvdG90eXBlLmdldE1heFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRofSxuLnByb3RvdHlwZS5zZXRNYXhXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm1heFdpZHRoPXQsdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuc2V0RE9NQ29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlQ29udGVudCgpLHRoaXMuX2NvbnRlbnQuYXBwZW5kQ2hpbGQodCksdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuYWRkQ2xhc3NOYW1lPWZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQodCl9LG4ucHJvdG90eXBlLnJlbW92ZUNsYXNzTmFtZT1mdW5jdGlvbih0KXt0aGlzLl9jb250YWluZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKHQpfSxuLnByb3RvdHlwZS50b2dnbGVDbGFzc05hbWU9ZnVuY3Rpb24odCl7aWYodGhpcy5fY29udGFpbmVyKXJldHVybiB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZSh0KX0sbi5wcm90b3R5cGUuX2NyZWF0ZUNvbnRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9jb250ZW50JiZyLnJlbW92ZSh0aGlzLl9jb250ZW50KSx0aGlzLl9jb250ZW50PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cC1jb250ZW50Iix0aGlzLl9jb250YWluZXIpLHRoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbiYmKHRoaXMuX2Nsb3NlQnV0dG9uPXIuY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1wb3B1cC1jbG9zZS1idXR0b24iLHRoaXMuX2NvbnRlbnQpLHRoaXMuX2Nsb3NlQnV0dG9uLnR5cGU9ImJ1dHRvbiIsdGhpcy5fY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiQ2xvc2UgcG9wdXAiKSx0aGlzLl9jbG9zZUJ1dHRvbi5pbm5lckhUTUw9IiYjMjE1OyIsdGhpcy5fY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xvc2UpKX0sbi5wcm90b3R5cGUuX29uTW91c2VVcD1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUodC5wb2ludCl9LG4ucHJvdG90eXBlLl9vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUodC5wb2ludCl9LG4ucHJvdG90eXBlLl9vbkRyYWc9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKHQucG9pbnQpfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYodGhpcy5fbWFwJiYodGhpcy5fbG5nTGF0fHx0aGlzLl90cmFja1BvaW50ZXIpJiZ0aGlzLl9jb250ZW50JiYodGhpcy5fY29udGFpbmVyfHwodGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cCIsdGhpcy5fbWFwLmdldENvbnRhaW5lcigpKSx0aGlzLl90aXA9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLXRpcCIsdGhpcy5fY29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fY29udGVudCksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmdGhpcy5vcHRpb25zLmNsYXNzTmFtZS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCh0KX0pKSx0aGlzLl90cmFja1BvaW50ZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyIikpLHRoaXMub3B0aW9ucy5tYXhXaWR0aCYmdGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRoIT09dGhpcy5vcHRpb25zLm1heFdpZHRoJiYodGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRoPXRoaXMub3B0aW9ucy5tYXhXaWR0aCksdGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyYmIXRoaXMuX3RyYWNrUG9pbnRlciYmKHRoaXMuX2xuZ0xhdD1MaSh0aGlzLl9sbmdMYXQsdGhpcy5fcG9zLHRoaXMuX21hcC50cmFuc2Zvcm0pKSwhdGhpcy5fdHJhY2tQb2ludGVyfHxlKSl7dmFyIGk9dGhpcy5fcG9zPXRoaXMuX3RyYWNrUG9pbnRlciYmZT9lOnRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCksYT10aGlzLm9wdGlvbnMuYW5jaG9yLG89ZnVuY3Rpb24gZShyKXtpZihyKXtpZigibnVtYmVyIj09dHlwZW9mIHIpe3ZhciBuPU1hdGgucm91bmQoTWF0aC5zcXJ0KC41Kk1hdGgucG93KHIsMikpKTtyZXR1cm57Y2VudGVyOm5ldyB0LlBvaW50KDAsMCksdG9wOm5ldyB0LlBvaW50KDAsciksInRvcC1sZWZ0IjpuZXcgdC5Qb2ludChuLG4pLCJ0b3AtcmlnaHQiOm5ldyB0LlBvaW50KC1uLG4pLGJvdHRvbTpuZXcgdC5Qb2ludCgwLC1yKSwiYm90dG9tLWxlZnQiOm5ldyB0LlBvaW50KG4sLW4pLCJib3R0b20tcmlnaHQiOm5ldyB0LlBvaW50KC1uLC1uKSxsZWZ0Om5ldyB0LlBvaW50KHIsMCkscmlnaHQ6bmV3IHQuUG9pbnQoLXIsMCl9fWlmKHIgaW5zdGFuY2VvZiB0LlBvaW50fHxBcnJheS5pc0FycmF5KHIpKXt2YXIgaT10LlBvaW50LmNvbnZlcnQocik7cmV0dXJue2NlbnRlcjppLHRvcDppLCJ0b3AtbGVmdCI6aSwidG9wLXJpZ2h0IjppLGJvdHRvbTppLCJib3R0b20tbGVmdCI6aSwiYm90dG9tLXJpZ2h0IjppLGxlZnQ6aSxyaWdodDppfX1yZXR1cm57Y2VudGVyOnQuUG9pbnQuY29udmVydChyLmNlbnRlcnx8WzAsMF0pLHRvcDp0LlBvaW50LmNvbnZlcnQoci50b3B8fFswLDBdKSwidG9wLWxlZnQiOnQuUG9pbnQuY29udmVydChyWyJ0b3AtbGVmdCJdfHxbMCwwXSksInRvcC1yaWdodCI6dC5Qb2ludC5jb252ZXJ0KHJbInRvcC1yaWdodCJdfHxbMCwwXSksYm90dG9tOnQuUG9pbnQuY29udmVydChyLmJvdHRvbXx8WzAsMF0pLCJib3R0b20tbGVmdCI6dC5Qb2ludC5jb252ZXJ0KHJbImJvdHRvbS1sZWZ0Il18fFswLDBdKSwiYm90dG9tLXJpZ2h0Ijp0LlBvaW50LmNvbnZlcnQoclsiYm90dG9tLXJpZ2h0Il18fFswLDBdKSxsZWZ0OnQuUG9pbnQuY29udmVydChyLmxlZnR8fFswLDBdKSxyaWdodDp0LlBvaW50LmNvbnZlcnQoci5yaWdodHx8WzAsMF0pfX1yZXR1cm4gZShuZXcgdC5Qb2ludCgwLDApKX0odGhpcy5vcHRpb25zLm9mZnNldCk7aWYoIWEpe3ZhciBzLGw9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoLGM9dGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodDtzPWkueStvLmJvdHRvbS55PGM/WyJ0b3AiXTppLnk+dGhpcy5fbWFwLnRyYW5zZm9ybS5oZWlnaHQtYz9bImJvdHRvbSJdOltdLGkueDxsLzI/cy5wdXNoKCJsZWZ0Iik6aS54PnRoaXMuX21hcC50cmFuc2Zvcm0ud2lkdGgtbC8yJiZzLnB1c2goInJpZ2h0IiksYT0wPT09cy5sZW5ndGg/ImJvdHRvbSI6cy5qb2luKCItIil9dmFyIHU9aS5hZGQob1thXSkucm91bmQoKTtyLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsSWlbYV0rIiB0cmFuc2xhdGUoIit1LngrInB4LCIrdS55KyJweCkiKSxQaSh0aGlzLl9jb250YWluZXIsYSwicG9wdXAiKX19LG4ucHJvdG90eXBlLl9vbkNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmUoKX0sbn0odC5FdmVudGVkKSxZaT17dmVyc2lvbjp0LnZlcnNpb24sc3VwcG9ydGVkOmUsc2V0UlRMVGV4dFBsdWdpbjp0LnNldFJUTFRleHRQbHVnaW4sZ2V0UlRMVGV4dFBsdWdpblN0YXR1czp0LmdldFJUTFRleHRQbHVnaW5TdGF0dXMsTWFwOk1pLE5hdmlnYXRpb25Db250cm9sOkVpLEdlb2xvY2F0ZUNvbnRyb2w6QmksQXR0cmlidXRpb25Db250cm9sOnZpLFNjYWxlQ29udHJvbDpqaSxGdWxsc2NyZWVuQ29udHJvbDpxaSxQb3B1cDpHaSxNYXJrZXI6T2ksU3R5bGU6cWUsTG5nTGF0OnQuTG5nTGF0LExuZ0xhdEJvdW5kczp0LkxuZ0xhdEJvdW5kcyxQb2ludDp0LlBvaW50LE1lcmNhdG9yQ29vcmRpbmF0ZTp0Lk1lcmNhdG9yQ29vcmRpbmF0ZSxFdmVudGVkOnQuRXZlbnRlZCxjb25maWc6dC5jb25maWcscHJld2FybTpmdW5jdGlvbigpe0J0KCkuYWNxdWlyZShPdCl9LGNsZWFyUHJld2FybWVkUmVzb3VyY2VzOmZ1bmN0aW9uKCl7dmFyIHQ9UnQ7dCYmKHQuaXNQcmVsb2FkZWQoKSYmMT09PXQubnVtQWN0aXZlKCk/KHQucmVsZWFzZShPdCksUnQ9bnVsbCk6Y29uc29sZS53YXJuKCJDb3VsZCBub3QgY2xlYXIgV2ViV29ya2VycyBzaW5jZSB0aGVyZSBhcmUgYWN0aXZlIE1hcCBpbnN0YW5jZXMgdGhhdCBzdGlsbCByZWZlcmVuY2UgaXQuIFRoZSBwcmUtd2FybWVkIFdlYldvcmtlciBwb29sIGNhbiBvbmx5IGJlIGNsZWFyZWQgd2hlbiBhbGwgbWFwIGluc3RhbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZCB3aXRoIG1hcC5yZW1vdmUoKSIpKX0sZ2V0IGFjY2Vzc1Rva2VuKCl7cmV0dXJuIHQuY29uZmlnLkFDQ0VTU19UT0tFTn0sc2V0IGFjY2Vzc1Rva2VuKGUpe3QuY29uZmlnLkFDQ0VTU19UT0tFTj1lfSxnZXQgYmFzZUFwaVVybCgpe3JldHVybiB0LmNvbmZpZy5BUElfVVJMfSxzZXQgYmFzZUFwaVVybChlKXt0LmNvbmZpZy5BUElfVVJMPWV9LGdldCB3b3JrZXJDb3VudCgpe3JldHVybiBEdC53b3JrZXJDb3VudH0sc2V0IHdvcmtlckNvdW50KHQpe0R0LndvcmtlckNvdW50PXR9LGdldCBtYXhQYXJhbGxlbEltYWdlUmVxdWVzdHMoKXtyZXR1cm4gdC5jb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTfSxzZXQgbWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzKGUpe3QuY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUz1lfSxjbGVhclN0b3JhZ2U6ZnVuY3Rpb24oZSl7dC5jbGVhclRpbGVDYWNoZShlKX0sd29ya2VyVXJsOiIifTtyZXR1cm4gWWl9KSkscn0pKX0se31dLDQ3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE8PHQrMSxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPWEodCxuKTtyZXR1cm4gcn07dmFyIG49dCgiY29udmV4LWh1bGwiKTtmdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGk9MDtpPHQ7KytpKW5baV09MCxpPT09ZSYmKG5baV0rPS41KSxpPT09ciYmKG5baV0rPS41KTtyZXR1cm4gbn1mdW5jdGlvbiBhKHQsZSl7aWYoMD09PWV8fGU9PT0oMTw8dCsxKS0xKXJldHVybltdO2Zvcih2YXIgcj1bXSxhPVtdLG89MDtvPD10OysrbylpZihlJjE8PG8pe3IucHVzaChpKHQsby0xLG8tMSkpLGEucHVzaChudWxsKTtmb3IodmFyIHM9MDtzPD10Oysrcyl+ZSYxPDxzJiYoci5wdXNoKGkodCxvLTEscy0xKSksYS5wdXNoKFtvLHNdKSl9dmFyIGw9bihyKSxjPVtdO3Q6Zm9yKG89MDtvPGwubGVuZ3RoOysrbyl7dmFyIHU9bFtvXSxmPVtdO2ZvcihzPTA7czx1Lmxlbmd0aDsrK3Mpe2lmKCFhW3Vbc11dKWNvbnRpbnVlIHQ7Zi5wdXNoKGFbdVtzXV0uc2xpY2UoKSl9Yy5wdXNoKGYpfXJldHVybiBjfX0seyJjb252ZXgtaHVsbCI6MTM1fV0sNDc1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9ub3JtYWxpemUiKSxpPXQoImdsLW1hdDQvY3JlYXRlIiksYT10KCJnbC1tYXQ0L2Nsb25lIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJnbC1tYXQ0L2ludmVydCIpLGw9dCgiZ2wtbWF0NC90cmFuc3Bvc2UiKSxjPXtsZW5ndGg6dCgiZ2wtdmVjMy9sZW5ndGgiKSxub3JtYWxpemU6dCgiZ2wtdmVjMy9ub3JtYWxpemUiKSxkb3Q6dCgiZ2wtdmVjMy9kb3QiKSxjcm9zczp0KCJnbC12ZWMzL2Nyb3NzIil9LHU9aSgpLGY9aSgpLGg9WzAsMCwwLDBdLHA9W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxkPVswLDAsMF07ZnVuY3Rpb24gZyh0LGUscixuLGkpe3RbMF09ZVswXSpuK3JbMF0qaSx0WzFdPWVbMV0qbityWzFdKmksdFsyXT1lWzJdKm4rclsyXSppfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLG0sdil7aWYoZXx8KGU9WzAsMCwwXSkscnx8KHI9WzAsMCwwXSksaXx8KGk9WzAsMCwwXSksbXx8KG09WzAsMCwwLDFdKSx2fHwodj1bMCwwLDAsMV0pLCFuKHUsdCkpcmV0dXJuITE7aWYoYShmLHUpLGZbM109MCxmWzddPTAsZlsxMV09MCxmWzE1XT0xLE1hdGguYWJzKG8oZik8MWUtOCkpcmV0dXJuITE7dmFyIHkseCxiLF8sdyxULGssTT11WzNdLEE9dVs3XSxTPXVbMTFdLEU9dVsxMl0sQz11WzEzXSxMPXVbMTRdLEk9dVsxNV07aWYoMCE9PU18fDAhPT1BfHwwIT09Uyl7aWYoaFswXT1NLGhbMV09QSxoWzJdPVMsaFszXT1JLCFzKGYsZikpcmV0dXJuITE7bChmLGYpLHk9bSxiPWYsXz0oeD1oKVswXSx3PXhbMV0sVD14WzJdLGs9eFszXSx5WzBdPWJbMF0qXytiWzRdKncrYls4XSpUK2JbMTJdKmsseVsxXT1iWzFdKl8rYls1XSp3K2JbOV0qVCtiWzEzXSprLHlbMl09YlsyXSpfK2JbNl0qdytiWzEwXSpUK2JbMTRdKmsseVszXT1iWzNdKl8rYls3XSp3K2JbMTFdKlQrYlsxNV0qa31lbHNlIG1bMF09bVsxXT1tWzJdPTAsbVszXT0xO2lmKGVbMF09RSxlWzFdPUMsZVsyXT1MLGZ1bmN0aW9uKHQsZSl7dFswXVswXT1lWzBdLHRbMF1bMV09ZVsxXSx0WzBdWzJdPWVbMl0sdFsxXVswXT1lWzRdLHRbMV1bMV09ZVs1XSx0WzFdWzJdPWVbNl0sdFsyXVswXT1lWzhdLHRbMl1bMV09ZVs5XSx0WzJdWzJdPWVbMTBdfShwLHUpLHJbMF09Yy5sZW5ndGgocFswXSksYy5ub3JtYWxpemUocFswXSxwWzBdKSxpWzBdPWMuZG90KHBbMF0scFsxXSksZyhwWzFdLHBbMV0scFswXSwxLC1pWzBdKSxyWzFdPWMubGVuZ3RoKHBbMV0pLGMubm9ybWFsaXplKHBbMV0scFsxXSksaVswXS89clsxXSxpWzFdPWMuZG90KHBbMF0scFsyXSksZyhwWzJdLHBbMl0scFswXSwxLC1pWzFdKSxpWzJdPWMuZG90KHBbMV0scFsyXSksZyhwWzJdLHBbMl0scFsxXSwxLC1pWzJdKSxyWzJdPWMubGVuZ3RoKHBbMl0pLGMubm9ybWFsaXplKHBbMl0scFsyXSksaVsxXS89clsyXSxpWzJdLz1yWzJdLGMuY3Jvc3MoZCxwWzFdLHBbMl0pLGMuZG90KHBbMF0sZCk8MClmb3IodmFyIFA9MDtQPDM7UCsrKXJbUF0qPS0xLHBbUF1bMF0qPS0xLHBbUF1bMV0qPS0xLHBbUF1bMl0qPS0xO3JldHVybiB2WzBdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0tcFsxXVsxXS1wWzJdWzJdLDApKSx2WzFdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0rcFsxXVsxXS1wWzJdWzJdLDApKSx2WzJdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0tcFsxXVsxXStwWzJdWzJdLDApKSx2WzNdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0rcFsxXVsxXStwWzJdWzJdLDApKSxwWzJdWzFdPnBbMV1bMl0mJih2WzBdPS12WzBdKSxwWzBdWzJdPnBbMl1bMF0mJih2WzFdPS12WzFdKSxwWzFdWzBdPnBbMF1bMV0mJih2WzJdPS12WzJdKSwhMH19LHsiLi9ub3JtYWxpemUiOjQ3NiwiZ2wtbWF0NC9jbG9uZSI6Mjc4LCJnbC1tYXQ0L2NyZWF0ZSI6MjgwLCJnbC1tYXQ0L2RldGVybWluYW50IjoyODEsImdsLW1hdDQvaW52ZXJ0IjoyOTMsImdsLW1hdDQvdHJhbnNwb3NlIjozMDYsImdsLXZlYzMvY3Jvc3MiOjM2NSwiZ2wtdmVjMy9kb3QiOjM3MCwiZ2wtdmVjMy9sZW5ndGgiOjM4MCwiZ2wtdmVjMy9ub3JtYWxpemUiOjM4N31dLDQ3NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMTVdO2lmKDA9PT1yKXJldHVybiExO2Zvcih2YXIgbj0xL3IsaT0wO2k8MTY7aSsrKXRbaV09ZVtpXSpuO3JldHVybiEwfX0se31dLDQ3NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXZlYzMvbGVycCIpLGk9dCgibWF0NC1yZWNvbXBvc2UiKSxhPXQoIm1hdDQtZGVjb21wb3NlIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJxdWF0LXNsZXJwIiksbD1mKCksYz1mKCksdT1mKCk7ZnVuY3Rpb24gZigpe3JldHVybnt0cmFuc2xhdGU6aCgpLHNjYWxlOmgoMSksc2tldzpoKCkscGVyc3BlY3RpdmU6WzAsMCwwLDFdLHF1YXRlcm5pb246WzAsMCwwLDFdfX1mdW5jdGlvbiBoKHQpe3JldHVyblt0fHwwLHR8fDAsdHx8MF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2lmKDA9PT1vKGUpfHwwPT09byhyKSlyZXR1cm4hMTt2YXIgaD1hKGUsbC50cmFuc2xhdGUsbC5zY2FsZSxsLnNrZXcsbC5wZXJzcGVjdGl2ZSxsLnF1YXRlcm5pb24pLHA9YShyLGMudHJhbnNsYXRlLGMuc2NhbGUsYy5za2V3LGMucGVyc3BlY3RpdmUsYy5xdWF0ZXJuaW9uKTtyZXR1cm4hKCFofHwhcCkmJihuKHUudHJhbnNsYXRlLGwudHJhbnNsYXRlLGMudHJhbnNsYXRlLGYpLG4odS5za2V3LGwuc2tldyxjLnNrZXcsZiksbih1LnNjYWxlLGwuc2NhbGUsYy5zY2FsZSxmKSxuKHUucGVyc3BlY3RpdmUsbC5wZXJzcGVjdGl2ZSxjLnBlcnNwZWN0aXZlLGYpLHModS5xdWF0ZXJuaW9uLGwucXVhdGVybmlvbixjLnF1YXRlcm5pb24sZiksaSh0LHUudHJhbnNsYXRlLHUuc2NhbGUsdS5za2V3LHUucGVyc3BlY3RpdmUsdS5xdWF0ZXJuaW9uKSwhMCl9fSx7ImdsLW1hdDQvZGV0ZXJtaW5hbnQiOjI4MSwiZ2wtdmVjMy9sZXJwIjozODEsIm1hdDQtZGVjb21wb3NlIjo0NzUsIm1hdDQtcmVjb21wb3NlIjo0NzgsInF1YXQtc2xlcnAiOjUyN31dLDQ3ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtpZGVudGl0eTp0KCJnbC1tYXQ0L2lkZW50aXR5IiksdHJhbnNsYXRlOnQoImdsLW1hdDQvdHJhbnNsYXRlIiksbXVsdGlwbHk6dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGNyZWF0ZTp0KCJnbC1tYXQ0L2NyZWF0ZSIpLHNjYWxlOnQoImdsLW1hdDQvc2NhbGUiKSxmcm9tUm90YXRpb25UcmFuc2xhdGlvbjp0KCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIil9LGk9KG4uY3JlYXRlKCksbi5jcmVhdGUoKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXtyZXR1cm4gbi5pZGVudGl0eSh0KSxuLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHQscyxlKSx0WzNdPW9bMF0sdFs3XT1vWzFdLHRbMTFdPW9bMl0sdFsxNV09b1szXSxuLmlkZW50aXR5KGkpLDAhPT1hWzJdJiYoaVs5XT1hWzJdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVsxXSYmKGlbOV09MCxpWzhdPWFbMV0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1hWzBdJiYoaVs4XT0wLGlbNF09YVswXSxuLm11bHRpcGx5KHQsdCxpKSksbi5zY2FsZSh0LHQsciksdH19LHsiZ2wtbWF0NC9jcmVhdGUiOjI4MCwiZ2wtbWF0NC9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiI6Mjg0LCJnbC1tYXQ0L2lkZW50aXR5IjoyOTEsImdsLW1hdDQvbXVsdGlwbHkiOjI5NSwiZ2wtbWF0NC9zY2FsZSI6MzAzLCJnbC1tYXQ0L3RyYW5zbGF0ZSI6MzA1fV0sNDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KSpNYXRoLkxPRzJFfX0se31dLDQ4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgibWF0NC1pbnRlcnBvbGF0ZSIpLGE9dCgiZ2wtbWF0NC9pbnZlcnQiKSxvPXQoImdsLW1hdDQvcm90YXRlWCIpLHM9dCgiZ2wtbWF0NC9yb3RhdGVZIiksbD10KCJnbC1tYXQ0L3JvdGF0ZVoiKSxjPXQoImdsLW1hdDQvbG9va0F0IiksdT10KCJnbC1tYXQ0L3RyYW5zbGF0ZSIpLGY9KHQoImdsLW1hdDQvc2NhbGUiKSx0KCJnbC12ZWMzL25vcm1hbGl6ZSIpKSxoPVswLDAsMF07ZnVuY3Rpb24gcCh0KXt0aGlzLl9jb21wb25lbnRzPXQuc2xpY2UoKSx0aGlzLl90aW1lPVswXSx0aGlzLnByZXZNYXRyaXg9dC5zbGljZSgpLHRoaXMubmV4dE1hdHJpeD10LnNsaWNlKCksdGhpcy5jb21wdXRlZE1hdHJpeD10LnNsaWNlKCksdGhpcy5jb21wdXRlZEludmVyc2U9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRFeWU9WzAsMCwwXSx0aGlzLmNvbXB1dGVkVXA9WzAsMCwwXSx0aGlzLmNvbXB1dGVkQ2VudGVyPVswLDAsMF0sdGhpcy5jb21wdXRlZFJhZGl1cz1bMF0sdGhpcy5fbGltaXRzPVstMS8wLDEvMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcCgodD10fHx7fSkubWF0cml4fHxbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pfTt2YXIgZD1wLnByb3RvdHlwZTtkLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9bi5sZShlLHQpLG89dGhpcy5jb21wdXRlZE1hdHJpeDtpZighKHI8MCkpe3ZhciBzPXRoaXMuX2NvbXBvbmVudHM7aWYocj09PWUubGVuZ3RoLTEpZm9yKHZhciBsPTE2KnIsYz0wO2M8MTY7KytjKW9bY109c1tsKytdO2Vsc2V7dmFyIHU9ZVtyKzFdLWVbcl0saD0obD0xNipyLHRoaXMucHJldk1hdHJpeCkscD0hMDtmb3IoYz0wO2M8MTY7KytjKWhbY109c1tsKytdO3ZhciBkPXRoaXMubmV4dE1hdHJpeDtmb3IoYz0wO2M8MTY7KytjKWRbY109c1tsKytdLHA9cCYmaFtjXT09PWRbY107aWYodTwxZS02fHxwKWZvcihjPTA7YzwxNjsrK2Mpb1tjXT1oW2NdO2Vsc2UgaShvLGgsZCwodC1lW3JdKS91KX12YXIgZz10aGlzLmNvbXB1dGVkVXA7Z1swXT1vWzFdLGdbMV09b1s1XSxnWzJdPW9bOV0sZihnLGcpO3ZhciBtPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2EobSxvKTt2YXIgdj10aGlzLmNvbXB1dGVkRXllLHk9bVsxNV07dlswXT1tWzEyXS95LHZbMV09bVsxM10veSx2WzJdPW1bMTRdL3k7dmFyIHg9dGhpcy5jb21wdXRlZENlbnRlcixiPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2ZvcihjPTA7YzwzOysrYyl4W2NdPXZbY10tb1syKzQqY10qYn19LGQuaWRsZT1mdW5jdGlvbih0KXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7Zm9yKHZhciBlPXRoaXMuX2NvbXBvbmVudHMscj1lLmxlbmd0aC0xNixuPTA7bjwxNjsrK24pZS5wdXNoKGVbcisrXSk7dGhpcy5fdGltZS5wdXNoKHQpfX0sZC5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1uLmd0KHRoaXMuX3RpbWUsdCktMjtlPDB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX2NvbXBvbmVudHMuc3BsaWNlKDAsMTYqZSkpfSxkLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpbWVbdGhpcy5fdGltZS5sZW5ndGgtMV19LGQubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxyPXJ8fGgsbj1ufHx0aGlzLmNvbXB1dGVkVXAsdGhpcy5zZXRNYXRyaXgodCxjKHRoaXMuY29tcHV0ZWRNYXRyaXgsZSxyLG4pKTtmb3IodmFyIGk9MCxhPTA7YTwzOysrYSlpKz1NYXRoLnBvdyhyW2FdLWVbYV0sMik7aT1NYXRoLmxvZyhNYXRoLnNxcnQoaSkpLHRoaXMuY29tcHV0ZWRSYWRpdXNbMF09aX0sZC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZEludmVyc2U7ZSYmcyhpLGksZSksciYmbyhpLGksciksbiYmbChpLGksbiksdGhpcy5zZXRNYXRyaXgodCxhKHRoaXMuY29tcHV0ZWRNYXRyaXgsaSkpfTt2YXIgZz1bMCwwLDBdO2QucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2dbMF09LShlfHwwKSxnWzFdPS0ocnx8MCksZ1syXT0tKG58fDApLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO3UoaSxpLGcpLHRoaXMuc2V0TWF0cml4KHQsYShpLGkpKX0sZC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7Z1swXT1lfHwwLGdbMV09cnx8MCxnWzJdPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDt1KGksaSxnKSx0aGlzLnNldE1hdHJpeCh0LGkpfSxkLnNldE1hdHJpeD1mdW5jdGlvbih0LGUpe2lmKCEodDx0aGlzLmxhc3RUKCkpKXt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciByPTA7cjwxNjsrK3IpdGhpcy5fY29tcG9uZW50cy5wdXNoKGVbcl0pfX0sZC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3RoaXMuY29tcHV0ZWRSYWRpdXNbMF09ZX0sZC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2xpbWl0cztyWzBdPXQsclsxXT1lfSxkLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xpbWl0cztyZXR1cm4gdD8odFswXT1lWzBdLHRbMV09ZVsxXSx0KTplfX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6NDgxLCJnbC1tYXQ0L2ludmVydCI6MjkzLCJnbC1tYXQ0L2xvb2tBdCI6Mjk0LCJnbC1tYXQ0L3JvdGF0ZVgiOjMwMCwiZ2wtbWF0NC9yb3RhdGVZIjozMDEsImdsLW1hdDQvcm90YXRlWiI6MzAyLCJnbC1tYXQ0L3NjYWxlIjozMDMsImdsLW1hdDQvdHJhbnNsYXRlIjozMDUsImdsLXZlYzMvbm9ybWFsaXplIjozODcsIm1hdDQtaW50ZXJwb2xhdGUiOjQ3N31dLDQ4MTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNDNdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNDN9XSw0ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8Myl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlyW2ldPWk7cmV0dXJuIDI9PT1lJiZ0WzBdWzBdPT09dFsxXVswXSYmdFswXVsxXT09PXRbMV1bMV0/WzBdOnJ9dmFyIGE9bmV3IEFycmF5KGUpO2ZvcihpPTA7aTxlOysraSlhW2ldPWk7YS5zb3J0KChmdW5jdGlvbihlLHIpe3ZhciBuPXRbZV1bMF0tdFtyXVswXTtyZXR1cm4gbnx8dFtlXVsxXS10W3JdWzFdfSkpO3ZhciBvPVthWzBdLGFbMV1dLHM9W2FbMF0sYVsxXV07Zm9yKGk9MjtpPGU7KytpKXtmb3IodmFyIGw9YVtpXSxjPXRbbF0sdT1vLmxlbmd0aDt1PjEmJm4odFtvW3UtMl1dLHRbb1t1LTFdXSxjKTw9MDspdS09MSxvLnBvcCgpO2ZvcihvLnB1c2gobCksdT1zLmxlbmd0aDt1PjEmJm4odFtzW3UtMl1dLHRbc1t1LTFdXSxjKT49MDspdS09MSxzLnBvcCgpO3MucHVzaChsKX1yPW5ldyBBcnJheShzLmxlbmd0aCtvLmxlbmd0aC0yKTtmb3IodmFyIGY9MCxoPShpPTAsby5sZW5ndGgpO2k8aDsrK2kpcltmKytdPW9baV07Zm9yKHZhciBwPXMubGVuZ3RoLTI7cD4wOy0tcClyW2YrK109c1twXTtyZXR1cm4gcn07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIilbM119LHsicm9idXN0LW9yaWVudGF0aW9uIjo1NDh9XSw0ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9dCx0PXdpbmRvdyk7dmFyIHI9MCxpPTAsYT0wLG89e3NoaWZ0OiExLGFsdDohMSxjb250cm9sOiExLG1ldGE6ITF9LHM9ITE7ZnVuY3Rpb24gbCh0KXt2YXIgZT0hMTtyZXR1cm4iYWx0S2V5ImluIHQmJihlPWV8fHQuYWx0S2V5IT09by5hbHQsby5hbHQ9ISF0LmFsdEtleSksInNoaWZ0S2V5ImluIHQmJihlPWV8fHQuc2hpZnRLZXkhPT1vLnNoaWZ0LG8uc2hpZnQ9ISF0LnNoaWZ0S2V5KSwiY3RybEtleSJpbiB0JiYoZT1lfHx0LmN0cmxLZXkhPT1vLmNvbnRyb2wsby5jb250cm9sPSEhdC5jdHJsS2V5KSwibWV0YUtleSJpbiB0JiYoZT1lfHx0Lm1ldGFLZXkhPT1vLm1ldGEsby5tZXRhPSEhdC5tZXRhS2V5KSxlfWZ1bmN0aW9uIGModCxzKXt2YXIgYz1uLngocyksdT1uLnkocyk7ImJ1dHRvbnMiaW4gcyYmKHQ9MHxzLmJ1dHRvbnMpLCh0IT09cnx8YyE9PWl8fHUhPT1hfHxsKHMpKSYmKHI9MHx0LGk9Y3x8MCxhPXV8fDAsZSYmZShyLGksYSxvKSl9ZnVuY3Rpb24gdSh0KXtjKDAsdCl9ZnVuY3Rpb24gZigpeyhyfHxpfHxhfHxvLnNoaWZ0fHxvLmFsdHx8by5tZXRhfHxvLmNvbnRyb2wpJiYoaT1hPTAscj0wLG8uc2hpZnQ9by5hbHQ9by5jb250cm9sPW8ubWV0YT0hMSxlJiZlKDAsMCwwLG8pKX1mdW5jdGlvbiBoKHQpe2wodCkmJmUmJmUocixpLGEsbyl9ZnVuY3Rpb24gcCh0KXswPT09bi5idXR0b25zKHQpP2MoMCx0KTpjKHIsdCl9ZnVuY3Rpb24gZCh0KXtjKHJ8bi5idXR0b25zKHQpLHQpfWZ1bmN0aW9uIGcodCl7YyhyJn5uLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gbSgpe3N8fChzPSEwLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixwKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsZCksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixnKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsZiksdC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksdC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIixoKSx0IT09d2luZG93JiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCkpKX1tKCk7dmFyIHY9e2VsZW1lbnQ6dH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHYse2VuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSl7ZT9tKCk6ZnVuY3Rpb24oKXtpZighcylyZXR1cm47cz0hMSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIscCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGQpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZyksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCksdCE9PXdpbmRvdyYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixmKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGgpKX0oKX0sZW51bWVyYWJsZTohMH0sYnV0dG9uczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGVudW1lcmFibGU6ITB9LHg6e2dldDpmdW5jdGlvbigpe3JldHVybiBpfSxlbnVtZXJhYmxlOiEwfSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZW51bWVyYWJsZTohMH0sbW9kczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99LGVudW1lcmFibGU6ITB9fSksdn07dmFyIG49dCgibW91c2UtZXZlbnQiKX0seyJtb3VzZS1ldmVudCI6NDg1fV0sNDg0OltmdW5jdGlvbih0LGUscil7dmFyIG49e2xlZnQ6MCx0b3A6MH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPWV8fHQuY3VycmVudFRhcmdldHx8dC5zcmNFbGVtZW50LEFycmF5LmlzQXJyYXkocil8fChyPVswLDBdKTt2YXIgaT10LmNsaWVudFh8fDAsYT10LmNsaWVudFl8fDAsbz0ocz1lLHM9PT13aW5kb3d8fHM9PT1kb2N1bWVudHx8cz09PWRvY3VtZW50LmJvZHk/bjpzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTt2YXIgcztyZXR1cm4gclswXT1pLW8ubGVmdCxyWzFdPWEtby50b3Ascn19LHt9XSw0ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudHx8d2luZG93fXIuYnV0dG9ucz1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJidXR0b25zImluIHQpcmV0dXJuIHQuYnV0dG9ucztpZigid2hpY2giaW4gdCl7aWYoMj09PShlPXQud2hpY2gpKXJldHVybiA0O2lmKDM9PT1lKXJldHVybiAyO2lmKGU+MClyZXR1cm4gMTw8ZS0xfWVsc2UgaWYoImJ1dHRvbiJpbiB0KXt2YXIgZTtpZigxPT09KGU9dC5idXR0b24pKXJldHVybiA0O2lmKDI9PT1lKXJldHVybiAyO2lmKGU+PTApcmV0dXJuIDE8PGV9fXJldHVybiAwfSxyLmVsZW1lbnQ9bixyLng9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigib2Zmc2V0WCJpbiB0KXJldHVybiB0Lm9mZnNldFg7dmFyIGU9bih0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gdC5jbGllbnRYLWUubGVmdH1yZXR1cm4gMH0sci55PWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFkiaW4gdClyZXR1cm4gdC5vZmZzZXRZO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WS1lLnRvcH1yZXR1cm4gMH19LHt9XSw0ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidG8tcHgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYocj0hIWUsZT10LHQ9d2luZG93KTt2YXIgaT1uKCJleCIsdCksYT1mdW5jdGlvbih0KXtyJiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIG49dC5kZWx0YVh8fDAsYT10LmRlbHRhWXx8MCxvPXQuZGVsdGFafHwwLHM9MTtzd2l0Y2godC5kZWx0YU1vZGUpe2Nhc2UgMTpzPWk7YnJlYWs7Y2FzZSAyOnM9d2luZG93LmlubmVySGVpZ2h0fWlmKGEqPXMsbyo9cywobio9cyl8fGF8fG8pcmV0dXJuIGUobixhLG8sdCl9O3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixhKSxhfX0seyJ0by1weCI6NTc4fV0sNDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpO2Z1bmN0aW9uIGkodCl7cmV0dXJuImEiK3R9ZnVuY3Rpb24gYSh0KXtyZXR1cm4iZCIrdH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuImMiK3QrIl8iK2V9ZnVuY3Rpb24gcyh0KXtyZXR1cm4icyIrdH1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuInQiK3QrIl8iK2V9ZnVuY3Rpb24gYyh0KXtyZXR1cm4ibyIrdH1mdW5jdGlvbiB1KHQpe3JldHVybiJ4Iit0fWZ1bmN0aW9uIGYodCl7cmV0dXJuInAiK3R9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiJkIit0KyJfIitlfWZ1bmN0aW9uIHAodCl7cmV0dXJuImkiK3R9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiJ1Iit0KyJfIitlfWZ1bmN0aW9uIGcodCl7cmV0dXJuImIiK3R9ZnVuY3Rpb24gbSh0KXtyZXR1cm4ieSIrdH1mdW5jdGlvbiB2KHQpe3JldHVybiJlIit0fWZ1bmN0aW9uIHkodCl7cmV0dXJuInYiK3R9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWV4dHJhY3QtY29udG91cjogIit0KX0ib2JqZWN0IiE9dHlwZW9mIHQmJmUoIk11c3Qgc3BlY2lmeSBhcmd1bWVudHMiKTt2YXIgcj10Lm9yZGVyO0FycmF5LmlzQXJyYXkocil8fGUoIk11c3Qgc3BlY2lmeSBvcmRlciIpO3ZhciBiPXQuYXJyYXlBcmd1bWVudHN8fDE7YjwxJiZlKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGFycmF5IGFyZ3VtZW50Iik7dmFyIF89dC5zY2FsYXJBcmd1bWVudHN8fDA7XzwwJiZlKCJTY2FsYXIgYXJnIGNvdW50IG11c3QgYmUgPiAwIik7ImZ1bmN0aW9uIiE9dHlwZW9mIHQudmVydGV4JiZlKCJNdXN0IHNwZWNpZnkgdmVydGV4IGNyZWF0aW9uIGZ1bmN0aW9uIik7ImZ1bmN0aW9uIiE9dHlwZW9mIHQuY2VsbCYmZSgiTXVzdCBzcGVjaWZ5IGNlbGwgY3JlYXRpb24gZnVuY3Rpb24iKTsiZnVuY3Rpb24iIT10eXBlb2YgdC5waGFzZSYmZSgiTXVzdCBzcGVjaWZ5IHBoYXNlIGZ1bmN0aW9uIik7Zm9yKHZhciB3PXQuZ2V0dGVyc3x8W10sVD1uZXcgQXJyYXkoYiksaz0wO2s8YjsrK2spdy5pbmRleE9mKGspPj0wP1Rba109ITA6VFtrXT0hMTtyZXR1cm4gZnVuY3Rpb24odCxlLHIsYixfLHcpe3ZhciBUPXcubGVuZ3RoLGs9Xy5sZW5ndGg7aWYoazwyKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1leHRyYWN0LWNvbnRvdXI6IERpbWVuc2lvbiBtdXN0IGJlIGF0IGxlYXN0IDIiKTtmb3IodmFyIE09ImV4dHJhY3RDb250b3VyIitfLmpvaW4oIl8iKSxBPVtdLFM9W10sRT1bXSxDPTA7QzxUOysrQylFLnB1c2goaShDKSk7Zm9yKEM9MDtDPGI7KytDKUUucHVzaCh1KEMpKTtmb3IoQz0wO0M8azsrK0MpUy5wdXNoKHMoQykrIj0iK2koMCkrIi5zaGFwZVsiK0MrIl18MCIpO2ZvcihDPTA7QzxUOysrQyl7Uy5wdXNoKGEoQykrIj0iK2koQykrIi5kYXRhIixjKEMpKyI9IitpKEMpKyIub2Zmc2V0fDAiKTtmb3IodmFyIEw9MDtMPGs7KytMKVMucHVzaChsKEMsTCkrIj0iK2koQykrIi5zdHJpZGVbIitMKyJdfDAiKX1mb3IoQz0wO0M8VDsrK0Mpe1MucHVzaChmKEMpKyI9IitjKEMpKSxTLnB1c2gobyhDLDApKTtmb3IoTD0xO0w8MTw8azsrK0wpe2Zvcih2YXIgST1bXSxQPTA7UDxrOysrUClMJjE8PFAmJkkucHVzaCgiLSIrbChDLFApKTtTLnB1c2goaChDLEwpKyI9KCIrSS5qb2luKCIiKSsiKXwwIiksUy5wdXNoKG8oQyxMKSsiPTAiKX19Zm9yKEM9MDtDPFQ7KytDKWZvcihMPTA7TDxrOysrTCl7dmFyIHo9W2woQyxfW0xdKV07TD4wJiZ6LnB1c2gobChDLF9bTC0xXSkrIioiK3MoX1tMLTFdKSksUy5wdXNoKGQoQyxfW0xdKSsiPSgiK3ouam9pbigiLSIpKyIpfDAiKX1mb3IoQz0wO0M8azsrK0MpUy5wdXNoKHAoQykrIj0wIik7Uy5wdXNoKCJOPTAiKTt2YXIgTz1bIjIiXTtmb3IoQz1rLTI7Qz49MDstLUMpTy5wdXNoKHMoX1tDXSkpO1MucHVzaCgiUT0oIitPLmpvaW4oIioiKSsiKXwwIiwiUD1tYWxsb2NVaW50MzIoUSkiLCJWPW1hbGxvY1VpbnQzMihRKSIsIlg9MCIpLFMucHVzaChnKDApKyI9MCIpO2ZvcihMPTE7TDwxPDxrOysrTCl7dmFyIEQ9W10sUj1bXTtmb3IoUD0wO1A8azsrK1ApTCYxPDxQJiYoMD09PVIubGVuZ3RoP0QucHVzaCgiMSIpOkQudW5zaGlmdChSLmpvaW4oIioiKSkpLFIucHVzaChzKF9bUF0pKTt2YXIgRj0iIjtEWzBdLmluZGV4T2YocyhfW2stMl0pKTwwJiYoRj0iLSIpO3ZhciBCPXgoayxMLF8pO1MucHVzaCh2KEIpKyI9KC0iK0Quam9pbigiLSIpKyIpfDAiLG0oQikrIj0oIitGK0Quam9pbigiLSIpKyIpfDAiLGcoQikrIj0wIil9ZnVuY3Rpb24gTih0LGUpe0EucHVzaCgiZm9yKCIscChfW3RdKSwiPSIsZSwiOyIscChfW3RdKSwiPCIscyhfW3RdKSwiOyIsIisrIixwKF9bdF0pLCIpeyIpfWZ1bmN0aW9uIGoodCl7Zm9yKHZhciBlPTA7ZTxUOysrZSlBLnB1c2goZihlKSwiKz0iLGQoZSxfW3RdKSwiOyIpO0EucHVzaCgifSIpfWZ1bmN0aW9uIFUoKXtmb3IodmFyIHQ9MTt0PDE8PGs7Kyt0KUEucHVzaCgiVCIsIj0iLHYodCksIjsiLHYodCksIj0iLG0odCksIjsiLG0odCksIj0iLCJUIiwiOyIpfVMucHVzaCh5KDApKyI9MCIsIlQ9MCIpLGZ1bmN0aW9uIHQoZSxyKXtpZihlPDApIWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8VDsrK2Upd1tlXT9BLnB1c2gobyhlLDApLCI9IixhKGUpLCIuZ2V0KCIsZihlKSwiKTsiKTpBLnB1c2gobyhlLDApLCI9IixhKGUpLCJbIixmKGUpLCJdOyIpO3ZhciByPVtdO2ZvcihlPTA7ZTxUOysrZSlyLnB1c2gobyhlLDApKTtmb3IoZT0wO2U8YjsrK2Upci5wdXNoKHUoZSkpO0EucHVzaChnKDApLCI9IiwiUCIsIlsiLCJYIiwiXT1waGFzZSgiLHIuam9pbigpLCIpOyIpO2Zvcih2YXIgbj0xO248MTw8azsrK24pQS5wdXNoKGcobiksIj0iLCJQIiwiWyIsIlgiLCIrIix2KG4pLCJdOyIpO3ZhciBpPVtdO2ZvcihuPTE7bjwxPDxrOysrbilpLnB1c2goIigiK2coMCkrIiE9PSIrZyhuKSsiKSIpO0EucHVzaCgiaWYoIixpLmpvaW4oInx8IiksIil7Iik7dmFyIHM9W107Zm9yKGU9MDtlPGs7KytlKXMucHVzaChwKGUpKTtmb3IoZT0wO2U8VDsrK2Upe3MucHVzaChvKGUsMCkpO2ZvcihuPTE7bjwxPDxrOysrbil3W2VdP0EucHVzaChvKGUsbiksIj0iLGEoZSksIi5nZXQoIixmKGUpLCIrIixoKGUsbiksIik7Iik6QS5wdXNoKG8oZSxuKSwiPSIsYShlKSwiWyIsZihlKSwiKyIsaChlLG4pLCJdOyIpLHMucHVzaChvKGUsbikpfWZvcihlPTA7ZTwxPDxrOysrZSlzLnB1c2goZyhlKSk7Zm9yKGU9MDtlPGI7KytlKXMucHVzaCh1KGUpKTtBLnB1c2goInZlcnRleCgiLHMuam9pbigpLCIpOyIseSgwKSwiPSIsIlYiLCJbIiwiWCIsIl09IiwiTiIsIisrOyIpO3ZhciBsPSgxPDxrKS0xLGM9ZyhsKTtmb3Iobj0wO248azsrK24paWYoMD09KHQmfigxPDxuKSkpe2Zvcih2YXIgZD1sXjE8PG4sbT1nKGQpLHg9W10sXz1kO18+MDtfPV8tMSZkKXgucHVzaCgiVltYKyIrdihfKSsiXSIpO3gucHVzaCh5KDApKTtmb3IoXz0wO188VDsrK18pMSZuP3gucHVzaChvKF8sbCksbyhfLGQpKTp4LnB1c2gobyhfLGQpLG8oXyxsKSk7MSZuP3gucHVzaChjLG0pOngucHVzaChtLGMpO2ZvcihfPTA7XzxiOysrXyl4LnB1c2godShfKSk7QS5wdXNoKCJpZigiLGMsIiE9PSIsbSwiKXsiLCJmYWNlKCIseC5qb2luKCksIil9Iil9QS5wdXNoKCJ9IiwiWCIsIis9MTsiKX0ocik7ZWxzZXshZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQtMTtlPj0wOy0tZSlOKGUsMCk7dmFyIHI9W107Zm9yKGU9MDtlPFQ7KytlKXdbZV0/ci5wdXNoKGEoZSkrIi5nZXQoIitmKGUpKyIpIik6ci5wdXNoKGEoZSkrIlsiK2YoZSkrIl0iKTtmb3IoZT0wO2U8YjsrK2Upci5wdXNoKHUoZSkpO2ZvcihBLnB1c2goIlAiLCJbIiwiWCIsIisrXT1waGFzZSgiLHIuam9pbigpLCIpOyIpLGU9MDtlPHQ7KytlKWooZSk7Zm9yKHZhciBuPTA7bjxUOysrbilBLnB1c2goZihuKSwiKz0iLGQobixfW3RdKSwiOyIpfShlKSxBLnB1c2goImlmKCIscyhfW2VdKSwiPjApeyIscChfW2VdKSwiPTE7IiksdChlLTEscnwxPDxfW2VdKTtmb3IodmFyIG49MDtuPFQ7KytuKUEucHVzaChmKG4pLCIrPSIsZChuLF9bZV0pLCI7Iik7ZT09PWstMSYmKEEucHVzaCgiWCIsIj0wOyIpLFUoKSksTihlLDIpLHQoZS0xLHIpLGU9PT1rLTEmJihBLnB1c2goImlmKCIscChfW2stMV0pLCImMSl7IiwiWCIsIj0wO30iKSxVKCkpLGooZSksQS5wdXNoKCJ9Iil9fShrLTEsMCksQS5wdXNoKCJmcmVlVWludDMyKCIsIlYiLCIpO2ZyZWVVaW50MzIoIiwiUCIsIik7Iik7dmFyIFY9WyIndXNlIHN0cmljdCc7IiwiZnVuY3Rpb24gIixNLCIoIixFLmpvaW4oKSwiKXsiLCJ2YXIgIixTLmpvaW4oKSwiOyIsQS5qb2luKCIiKSwifSIsInJldHVybiAiLE1dLmpvaW4oIiIpO3JldHVybiBuZXcgRnVuY3Rpb24oInZlcnRleCIsImZhY2UiLCJwaGFzZSIsIm1hbGxvY1VpbnQzMiIsImZyZWVVaW50MzIiLFYpKHQsZSxyLG4ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMil9KHQudmVydGV4LHQuY2VsbCx0LnBoYXNlLF8scixUKX07ZnVuY3Rpb24geCh0LGUscil7Zm9yKHZhciBuPTAsaT0wO2k8dDsrK2kpZSYxPDxpJiYobnw9MTw8cltpXSk7cmV0dXJuIG59fSx7InR5cGVkYXJyYXktcG9vbCI6NTk1fV0sNDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoQXJyYXkuaXNBcnJheShyKSl7aWYoci5sZW5ndGghPT1lLmRpbWVuc2lvbil0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IGludmFsaWQgYm91bmRhcnkgY29uZGl0aW9ucyIpfWVsc2Ugcj1uKGUuZGltZW5zaW9uLCJzdHJpbmciPT10eXBlb2Ygcj9yOiJjbGFtcCIpO2lmKHQuZGltZW5zaW9uIT09ZS5kaW1lbnNpb24rMSl0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IG91dHB1dCBkaW1lbnNpb24gbXVzdCBiZSArMSBpbnB1dCBkaW1lbnNpb24iKTtpZih0LnNoYXBlW2UuZGltZW5zaW9uXSE9PWUuZGltZW5zaW9uKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogb3V0cHV0IHNoYXBlIG11c3QgbWF0Y2ggaW5wdXQgc2hhcGUiKTtmb3IodmFyIGk9MDtpPGUuZGltZW5zaW9uOysraSlpZih0LnNoYXBlW2ldIT09ZS5zaGFwZVtpXSl0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IHNoYXBlIG1pc21hdGNoIik7aWYoMD09PWUuc2l6ZSlyZXR1cm4gdDtpZihlLmRpbWVuc2lvbjw9MClyZXR1cm4gdC5zZXQoMCksdDtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5qb2luKCk7aWYodj1vW2VdKXJldHVybiB2O3ZhciByPXQubGVuZ3RoLG49WyJmdW5jdGlvbiBncmFkaWVudChkc3Qsc3JjKXt2YXIgcz1zcmMuc2hhcGUuc2xpY2UoKTsiXTtmdW5jdGlvbiBpKGUpe2Zvcih2YXIgaT1yLWUubGVuZ3RoLGE9W10sbz1bXSxzPVtdLGw9MDtsPHI7KytsKWUuaW5kZXhPZihsKzEpPj0wP3MucHVzaCgiMCIpOmUuaW5kZXhPZigtKGwrMSkpPj0wP3MucHVzaCgic1siK2wrIl0tMSIpOihzLnB1c2goIi0xIiksYS5wdXNoKCIxIiksby5wdXNoKCJzWyIrbCsiXS0yIikpO3ZhciBjPSIubG8oIithLmpvaW4oKSsiKS5oaSgiK28uam9pbigpKyIpIjtpZigwPT09YS5sZW5ndGgmJihjPSIiKSxpPjApe24ucHVzaCgiaWYoMSIpO2ZvcihsPTA7bDxyOysrbCllLmluZGV4T2YobCsxKT49MHx8ZS5pbmRleE9mKC0obCsxKSk+PTB8fG4ucHVzaCgiJiZzWyIsbCwiXT4yIik7bi5wdXNoKCIpe2dyYWQiLGksIihzcmMucGljaygiLHMuam9pbigpLCIpIixjKTtmb3IobD0wO2w8cjsrK2wpZS5pbmRleE9mKGwrMSk+PTB8fGUuaW5kZXhPZigtKGwrMSkpPj0wfHxuLnB1c2goIixkc3QucGljaygiLHMuam9pbigpLCIsIixsLCIpIixjKTtuLnB1c2goIik7Iil9Zm9yKGw9MDtsPGUubGVuZ3RoOysrbCl7dmFyIHU9TWF0aC5hYnMoZVtsXSktMSxmPSJkc3QucGljaygiK3Muam9pbigpKyIsIit1KyIpIitjO3N3aXRjaCh0W3VdKXtjYXNlImNsYW1wIjp2YXIgaD1zLnNsaWNlKCkscD1zLnNsaWNlKCk7ZVtsXTwwP2hbdV09InNbIit1KyJdLTIiOnBbdV09IjEiLDA9PT1pP24ucHVzaCgiaWYoc1siLHUsIl0+MSl7ZHN0LnNldCgiLHMuam9pbigpLCIsIix1LCIsMC41KihzcmMuZ2V0KCIsaC5qb2luKCksIiktc3JjLmdldCgiLHAuam9pbigpLCIpKSl9ZWxzZXtkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwKX07Iik6bi5wdXNoKCJpZihzWyIsdSwiXT4xKXtkaWZmKCIsZiwiLHNyYy5waWNrKCIsaC5qb2luKCksIikiLGMsIixzcmMucGljaygiLHAuam9pbigpLCIpIixjLCIpO31lbHNle3plcm8oIixmLCIpO307Iik7YnJlYWs7Y2FzZSJtaXJyb3IiOjA9PT1pP24ucHVzaCgiZHN0LnNldCgiLHMuam9pbigpLCIsIix1LCIsMCk7Iik6bi5wdXNoKCJ6ZXJvKCIsZiwiKTsiKTticmVhaztjYXNlIndyYXAiOnZhciBkPXMuc2xpY2UoKSxnPXMuc2xpY2UoKTtlW2xdPDA/KGRbdV09InNbIit1KyJdLTIiLGdbdV09IjAiKTooZFt1XT0ic1siK3UrIl0tMSIsZ1t1XT0iMSIpLDA9PT1pP24ucHVzaCgiaWYoc1siLHUsIl0+Mil7ZHN0LnNldCgiLHMuam9pbigpLCIsIix1LCIsMC41KihzcmMuZ2V0KCIsZC5qb2luKCksIiktc3JjLmdldCgiLGcuam9pbigpLCIpKSl9ZWxzZXtkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwKX07Iik6bi5wdXNoKCJpZihzWyIsdSwiXT4yKXtkaWZmKCIsZiwiLHNyYy5waWNrKCIsZC5qb2luKCksIikiLGMsIixzcmMucGljaygiLGcuam9pbigpLCIpIixjLCIpO31lbHNle3plcm8oIixmLCIpO307Iik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IEludmFsaWQgYm91bmRhcnkgY29uZGl0aW9uIil9fWk+MCYmbi5wdXNoKCJ9OyIpfWZvcih2YXIgcz0wO3M8MTw8cjsrK3Mpe2Zvcih2YXIgZj1bXSxoPTA7aDxyOysraClzJjE8PGgmJmYucHVzaChoKzEpO2Zvcih2YXIgcD0wO3A8MTw8Zi5sZW5ndGg7KytwKXt2YXIgZD1mLnNsaWNlKCk7Zm9yKGg9MDtoPGYubGVuZ3RoOysraClwJjE8PGgmJihkW2hdPS1kW2hdKTtpKGQpfX1uLnB1c2goInJldHVybiBkc3Q7fTtyZXR1cm4gZ3JhZGllbnQiKTt2YXIgZz1bImRpZmYiLCJ6ZXJvIl0sbT1bbCxjXTtmb3Iocz0xO3M8PXI7KytzKWcucHVzaCgiZ3JhZCIrcyksbS5wdXNoKHUocykpO2cucHVzaChuLmpvaW4oIiIpKTt2YXIgdj1GdW5jdGlvbi5hcHBseSh2b2lkIDAsZykuYXBwbHkodm9pZCAwLG0pO3JldHVybiBhW2VdPXYsdn0ocikodCxlKX07dmFyIG49dCgiZHVwIiksaT10KCJjd2lzZS1jb21waWxlciIpLGE9e30sbz17fSxzPXtib2R5OiIiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxsPWkoe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxwcmU6cyxwb3N0OnMsYm9keTp7YXJnczpbe25hbWU6Im91dCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToibGVmdCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToicmlnaHQiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6Im91dD0wLjUqKGxlZnQtcmlnaHQpIix0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJjZGlmZiJ9KSxjPWkoe2FyZ3M6WyJhcnJheSJdLHByZTpzLHBvc3Q6cyxib2R5OnthcmdzOlt7bmFtZToib3V0IixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9XSxib2R5OiJvdXQ9MCIsdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiemVybyJ9KTtmdW5jdGlvbiB1KHQpe2lmKHQgaW4gYSlyZXR1cm4gYVt0XTtmb3IodmFyIGU9W10scj0wO3I8dDsrK3IpZS5wdXNoKCJvdXQiLHIsInM9MC41KihpbnAiLHIsImwtaW5wIixyLCJyKTsiKTt2YXIgbz1bImFycmF5Il0sbD1bImp1bmsiXTtmb3Iocj0wO3I8dDsrK3Ipe28ucHVzaCgiYXJyYXkiKSxsLnB1c2goIm91dCIrcisicyIpO3ZhciBjPW4odCk7Y1tyXT0tMSxvLnB1c2goe2FycmF5OjAsb2Zmc2V0OmMuc2xpY2UoKX0pLGNbcl09MSxvLnB1c2goe2FycmF5OjAsb2Zmc2V0OmMuc2xpY2UoKX0pLGwucHVzaCgiaW5wIityKyJsIiwiaW5wIityKyJyIil9cmV0dXJuIGFbdF09aSh7YXJnczpvLHByZTpzLHBvc3Q6cyxib2R5Ontib2R5OmUuam9pbigiIiksYXJnczpsLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6dCxsdmFsdWU6MD09PXQuaW5kZXhPZigib3V0IikscnZhbHVlOjA9PT10LmluZGV4T2YoImlucCIpLGNvdW50OiJqdW5rIiE9PXR8MH19KSksdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiZmRUZW1wbGF0ZSIrdH0pfX0seyJjd2lzZS1jb21waWxlciI6MTUxLGR1cDoxNzZ9XSw0ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPU1hdGguZmxvb3IoZSksbj1lLXIsaT0wPD1yJiZyPHQuc2hhcGVbMF0sYT0wPD1yKzEmJnIrMTx0LnNoYXBlWzBdO3JldHVybigxLW4pKihpPyt0LmdldChyKTowKStuKihhPyt0LmdldChyKzEpOjApfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPU1hdGguZmxvb3IoZSksaT1lLW4sYT0wPD1uJiZuPHQuc2hhcGVbMF0sbz0wPD1uKzEmJm4rMTx0LnNoYXBlWzBdLHM9TWF0aC5mbG9vcihyKSxsPXItcyxjPTA8PXMmJnM8dC5zaGFwZVsxXSx1PTA8PXMrMSYmcysxPHQuc2hhcGVbMV0sZj1hJiZjP3QuZ2V0KG4scyk6MCxoPWEmJnU/dC5nZXQobixzKzEpOjA7cmV0dXJuKDEtbCkqKCgxLWkpKmYraSoobyYmYz90LmdldChuKzEscyk6MCkpK2wqKCgxLWkpKmgraSoobyYmdT90LmdldChuKzEscysxKTowKSl9ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaT1NYXRoLmZsb29yKGUpLGE9ZS1pLG89MDw9aSYmaTx0LnNoYXBlWzBdLHM9MDw9aSsxJiZpKzE8dC5zaGFwZVswXSxsPU1hdGguZmxvb3IociksYz1yLWwsdT0wPD1sJiZsPHQuc2hhcGVbMV0sZj0wPD1sKzEmJmwrMTx0LnNoYXBlWzFdLGg9TWF0aC5mbG9vcihuKSxwPW4taCxkPTA8PWgmJmg8dC5zaGFwZVsyXSxnPTA8PWgrMSYmaCsxPHQuc2hhcGVbMl0sbT1vJiZ1JiZkP3QuZ2V0KGksbCxoKTowLHY9byYmZiYmZD90LmdldChpLGwrMSxoKTowLHk9cyYmdSYmZD90LmdldChpKzEsbCxoKTowLHg9cyYmZiYmZD90LmdldChpKzEsbCsxLGgpOjAsYj1vJiZ1JiZnP3QuZ2V0KGksbCxoKzEpOjAsXz1vJiZmJiZnP3QuZ2V0KGksbCsxLGgrMSk6MDtyZXR1cm4oMS1wKSooKDEtYykqKCgxLWEpKm0rYSp5KStjKigoMS1hKSp2K2EqeCkpK3AqKCgxLWMpKigoMS1hKSpiK2EqKHMmJnUmJmc/dC5nZXQoaSsxLGwsaCsxKTowKSkrYyooKDEtYSkqXythKihzJiZmJiZnP3QuZ2V0KGkrMSxsKzEsaCsxKTowKSkpfWZ1bmN0aW9uIG8odCl7dmFyIGUscixuPTB8dC5zaGFwZS5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47KytlKXI9K2FyZ3VtZW50c1tlKzFdLGlbZV09TWF0aC5mbG9vcihyKSxhW2VdPXItaVtlXSxvW2VdPTA8PWlbZV0mJmlbZV08dC5zaGFwZVtlXSxzW2VdPTA8PWlbZV0rMSYmaVtlXSsxPHQuc2hhcGVbZV07dmFyIGwsYyx1LGY9MDt0OmZvcihlPTA7ZTwxPDxuOysrZSl7Zm9yKGM9MSx1PXQub2Zmc2V0LGw9MDtsPG47KytsKWlmKGUmMTw8bCl7aWYoIXNbbF0pY29udGludWUgdDtjKj1hW2xdLHUrPXQuc3RyaWRlW2xdKihpW2xdKzEpfWVsc2V7aWYoIW9bbF0pY29udGludWUgdDtjKj0xLWFbbF0sdSs9dC5zdHJpZGVbbF0qaVtsXX1mKz1jKnQuZGF0YVt1XX1yZXR1cm4gZn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7c3dpdGNoKHQuc2hhcGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiBuKHQsZSk7Y2FzZSAyOnJldHVybiBpKHQsZSxyKTtjYXNlIDM6cmV0dXJuIGEodCxlLHIscyk7ZGVmYXVsdDpyZXR1cm4gby5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19LGUuZXhwb3J0cy5kMT1uLGUuZXhwb3J0cy5kMj1pLGUuZXhwb3J0cy5kMz1hfSx7fV0sNDkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImN3aXNlLWNvbXBpbGVyIiksaT17Ym9keToiIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX07ZnVuY3Rpb24gYSh0KXtpZighdClyZXR1cm4gaTtmb3IodmFyIGU9MDtlPHQuYXJncy5sZW5ndGg7KytlKXt2YXIgcj10LmFyZ3NbZV07dC5hcmdzW2VdPTA9PT1lP3tuYW1lOnIsbHZhbHVlOiEwLHJ2YWx1ZTohIXQucnZhbHVlLGNvdW50OnQuY291bnR8fDF9OntuYW1lOnIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfX1yZXR1cm4gdC50aGlzVmFyc3x8KHQudGhpc1ZhcnM9W10pLHQubG9jYWxWYXJzfHwodC5sb2NhbFZhcnM9W10pLHR9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5hcmdzLmxlbmd0aDsrK3IpZS5wdXNoKCJhIityKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJQIixbInJldHVybiBmdW5jdGlvbiAiLHQuZnVuY05hbWUsIl9uZGFycmF5b3BzKCIsZS5qb2luKCIsIiksIikge1AoIixlLmpvaW4oIiwiKSwiKTtyZXR1cm4gYTB9Il0uam9pbigiIikpKGZ1bmN0aW9uKHQpe3JldHVybiBuKHthcmdzOnQuYXJncyxwcmU6YSh0LnByZSksYm9keTphKHQuYm9keSkscG9zdDphKHQucHJvYyksZnVuY05hbWU6dC5mdW5jTmFtZX0pfSh0KSl9dmFyIHM9e2FkZDoiKyIsc3ViOiItIixtdWw6IioiLGRpdjoiLyIsbW9kOiIlIixiYW5kOiImIixib3I6InwiLGJ4b3I6Il4iLGxzaGlmdDoiPDwiLHJzaGlmdDoiPj4iLHJyc2hpZnQ6Ij4+PiJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBzKXt2YXIgZT1zW3RdO3JbdF09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPWIiK2UrImMifSxmdW5jTmFtZTp0fSksclt0KyJlcSJdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYSIrZSsiPWIifSxydmFsdWU6ITAsZnVuY05hbWU6dCsiZXEifSksclt0KyJzIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsImIiLCJzIl0sYm9keToiYT1iIitlKyJzIn0sZnVuY05hbWU6dCsicyJ9KSxyW3QrInNlcSJdPW8oe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwicyJdLGJvZHk6ImEiK2UrIj1zIn0scnZhbHVlOiEwLGZ1bmNOYW1lOnQrInNlcSJ9KX19KCk7dmFyIGw9e25vdDoiISIsYm5vdDoifiIsbmVnOiItIixyZWNpcDoiMS4wLyJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBsKXt2YXIgZT1sW3RdO3JbdF09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPSIrZSsiYiJ9LGZ1bmNOYW1lOnR9KSxyW3QrImVxIl09byh7YXJnczpbImFycmF5Il0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPSIrZSsiYSJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrImVxIn0pfX0oKTt2YXIgYz17YW5kOiImJiIsb3I6Inx8IixlcToiPT09IixuZXE6IiE9PSIsbHQ6IjwiLGd0OiI+IixsZXE6Ijw9IixnZXE6Ij49In07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIGMpe3ZhciBlPWNbdF07clt0XT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9YiIrZSsiYyJ9LGZ1bmNOYW1lOnR9KSxyW3QrInMiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsInMiXSxib2R5OiJhPWIiK2UrInMifSxmdW5jTmFtZTp0KyJzIn0pLHJbdCsiZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9YSIrZSsiYiJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrImVxIn0pLHJbdCsic2VxIl09byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJzIl0sYm9keToiYT1hIitlKyJzIn0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6dCsic2VxIn0pfX0oKTt2YXIgdT1bImFicyIsImFjb3MiLCJhc2luIiwiYXRhbiIsImNlaWwiLCJjb3MiLCJleHAiLCJmbG9vciIsImxvZyIsInJvdW5kIiwic2luIiwic3FydCIsInRhbiJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dS5sZW5ndGg7Kyt0KXt2YXIgZT11W3RdO3JbZV09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGIpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplfSkscltlKyJlcSJdPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPXRoaXNfZihhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsiZXEifSl9fSgpO3ZhciBmPVsibWF4IiwibWluIiwiYXRhbjIiLCJwb3ciXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoOysrdCl7dmFyIGU9Zlt0XTtyW2VdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihiLGMpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplfSkscltlKyJzIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihiLGMpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplKyJzIn0pLHJbZSsiZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYSxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsiZXEifSkscltlKyJzZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGEsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrInNlcSJ9KX19KCk7dmFyIGg9WyJhdGFuMiIsInBvdyJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8aC5sZW5ndGg7Kyt0KXt2YXIgZT1oW3RdO3JbZSsib3AiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT10aGlzX2YoYyxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZSsib3AifSkscltlKyJvcHMiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9dGhpc19mKGMsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LGZ1bmNOYW1lOmUrIm9wcyJ9KSxyW2UrIm9wZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYixhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsib3BlcSJ9KSxyW2UrIm9wc2VxIl09byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihiLGEpIix0aGlzVmFyczpbInRoaXNfZiJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplKyJvcHNlcSJ9KX19KCksci5hbnk9bih7YXJnczpbImFycmF5Il0scHJlOmksYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6ImlmKGEpe3JldHVybiB0cnVlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gZmFsc2UifSxmdW5jTmFtZToiYW55In0pLHIuYWxsPW4oe2FyZ3M6WyJhcnJheSJdLHByZTppLGJvZHk6e2FyZ3M6W3tuYW1lOiJ4IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJpZigheCl7cmV0dXJuIGZhbHNlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gdHJ1ZSJ9LGZ1bmNOYW1lOiJhbGwifSksci5zdW09bih7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6InRoaXNfcys9YSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIHRoaXNfcyJ9LGZ1bmNOYW1lOiJzdW0ifSksci5wcm9kPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MSJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJ0aGlzX3MqPWEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToicHJvZCJ9KSxyLm5vcm0yc3F1YXJlZD1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTAifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sYm9keToidGhpc19zKz1hKmEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybTJzcXVhcmVkIn0pLHIubm9ybTI9bih7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLGJvZHk6InRoaXNfcys9YSphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gTWF0aC5zcXJ0KHRoaXNfcykifSxmdW5jTmFtZToibm9ybTIifSksci5ub3JtaW5mPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjR9XSxib2R5OiJpZigtYT50aGlzX3Mpe3RoaXNfcz0tYX1lbHNlIGlmKGE+dGhpc19zKXt0aGlzX3M9YX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybWluZiJ9KSxyLm5vcm0xPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjN9XSxib2R5OiJ0aGlzX3MrPWE8MD8tYTphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6Im5vcm0xIn0pLHIuc3VwPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7Ym9keToidGhpc19oPS1JbmZpbml0eSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToiaWYoX2lubGluZV8xX2FyZzBfPnRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfIixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToicmV0dXJuIHRoaXNfaCIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX19KSxyLmluZj1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2JvZHk6InRoaXNfaD1JbmZpbml0eSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToiaWYoX2lubGluZV8xX2FyZzBfPHRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfIixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToicmV0dXJuIHRoaXNfaCIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21pbj1uKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNoYXBlIl0scHJlOntib2R5OiJ7dGhpc192PUluZmluaXR5O3RoaXNfaT1faW5saW5lXzBfYXJnMl8uc2xpY2UoMCl9IixhcmdzOlt7bmFtZToiX2lubGluZV8wX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMF9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntpZihfaW5saW5lXzFfYXJnMV88dGhpc192KXt0aGlzX3Y9X2lubGluZV8xX2FyZzFfO2Zvcih2YXIgX2lubGluZV8xX2s9MDtfaW5saW5lXzFfazxfaW5saW5lXzFfYXJnMF8ubGVuZ3RoOysrX2lubGluZV8xX2spe3RoaXNfaVtfaW5saW5lXzFfa109X2lubGluZV8xX2FyZzBfW19pbmxpbmVfMV9rXX19fSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZToiX2lubGluZV8xX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaSIsInRoaXNfdiJdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9rIl19LHBvc3Q6e2JvZHk6IntyZXR1cm4gdGhpc19pfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaSJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21heD1uKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNoYXBlIl0scHJlOntib2R5OiJ7dGhpc192PS1JbmZpbml0eTt0aGlzX2k9X2lubGluZV8wX2FyZzJfLnNsaWNlKDApfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8wX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc19pIiwidGhpc192Il0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7aWYoX2lubGluZV8xX2FyZzFfPnRoaXNfdil7dGhpc192PV9pbmxpbmVfMV9hcmcxXztmb3IodmFyIF9pbmxpbmVfMV9rPTA7X2lubGluZV8xX2s8X2lubGluZV8xX2FyZzBfLmxlbmd0aDsrK19pbmxpbmVfMV9rKXt0aGlzX2lbX2lubGluZV8xX2tdPV9pbmxpbmVfMV9hcmcwX1tfaW5saW5lXzFfa119fX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6WyJfaW5saW5lXzFfayJdfSxwb3N0Ontib2R5OiJ7cmV0dXJuIHRoaXNfaX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2kiXSxsb2NhbFZhcnM6W119fSksci5yYW5kb209byh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLnJhbmRvbSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPXRoaXNfZigpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZToicmFuZG9tIn0pLHIuYXNzaWduPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT1iIn0sZnVuY05hbWU6ImFzc2lnbiJ9KSxyLmFzc2lnbnM9byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT1iIn0sZnVuY05hbWU6ImFzc2lnbnMifSksci5lcXVhbHM9bih7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6aSxib2R5OnthcmdzOlt7bmFtZToieCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToieSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToiaWYoeCE9PXkpe3JldHVybiBmYWxzZX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W10sYm9keToicmV0dXJuIHRydWUifSxmdW5jTmFtZToiZXF1YWxzIn0pfSx7ImN3aXNlLWNvbXBpbGVyIjoxNTF9XSw0OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGk9dCgiLi9kb0NvbnZlcnQuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10LG89MTtBcnJheS5pc0FycmF5KGEpOylyLnB1c2goYS5sZW5ndGgpLG8qPWEubGVuZ3RoLGE9YVswXTtyZXR1cm4gMD09PXIubGVuZ3RoP24oKTooZXx8KGU9bihuZXcgRmxvYXQ2NEFycmF5KG8pLHIpKSxpKGUsdCksZSl9fSx7Ii4vZG9Db252ZXJ0LmpzIjo0OTIsbmRhcnJheTo0OTV9XSw0OTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiY3dpc2UtY29tcGlsZXIiKSh7YXJnczpbImFycmF5Iiwic2NhbGFyIiwiaW5kZXgiXSxwcmU6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie1xudmFyIF9pbmxpbmVfMV92PV9pbmxpbmVfMV9hcmcxXyxfaW5saW5lXzFfaVxuZm9yKF9pbmxpbmVfMV9pPTA7X2lubGluZV8xX2k8X2lubGluZV8xX2FyZzJfLmxlbmd0aC0xOysrX2lubGluZV8xX2kpIHtcbl9pbmxpbmVfMV92PV9pbmxpbmVfMV92W19pbmxpbmVfMV9hcmcyX1tfaW5saW5lXzFfaV1dXG59XG5faW5saW5lXzFfYXJnMF89X2lubGluZV8xX3ZbX2lubGluZV8xX2FyZzJfW19pbmxpbmVfMV9hcmcyXy5sZW5ndGgtMV1dXG59IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOlsiX2lubGluZV8xX2kiLCJfaW5saW5lXzFfdiJdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJjb252ZXJ0IixibG9ja1NpemU6NjR9KX0seyJjd2lzZS1jb21waWxlciI6MTUxfV0sNDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9MzI7ZnVuY3Rpb24gYSh0KXtzd2l0Y2godCl7Y2FzZSJ1aW50OCI6cmV0dXJuW24ubWFsbG9jVWludDgsbi5mcmVlVWludDhdO2Nhc2UidWludDE2IjpyZXR1cm5bbi5tYWxsb2NVaW50MTYsbi5mcmVlVWludDE2XTtjYXNlInVpbnQzMiI6cmV0dXJuW24ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMl07Y2FzZSJpbnQ4IjpyZXR1cm5bbi5tYWxsb2NJbnQ4LG4uZnJlZUludDhdO2Nhc2UiaW50MTYiOnJldHVybltuLm1hbGxvY0ludDE2LG4uZnJlZUludDE2XTtjYXNlImludDMyIjpyZXR1cm5bbi5tYWxsb2NJbnQzMixuLmZyZWVJbnQzMl07Y2FzZSJmbG9hdDMyIjpyZXR1cm5bbi5tYWxsb2NGbG9hdCxuLmZyZWVGbG9hdF07Y2FzZSJmbG9hdDY0IjpyZXR1cm5bbi5tYWxsb2NEb3VibGUsbi5mcmVlRG91YmxlXTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0OysrcillLnB1c2goInMiK3IpO2ZvcihyPTA7cjx0OysrcillLnB1c2goIm4iK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goImQiK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goImUiK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goImYiK3IpO3JldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVsiJ3VzZSBzdHJpY3QnIl0sbj1bIm5kYXJyYXlTb3J0V3JhcHBlciIsdC5qb2luKCJkIiksZV0uam9pbigiIik7ci5wdXNoKFsiZnVuY3Rpb24gIixuLCIoIixbImFycmF5Il0uam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIHM9WyJkYXRhPWFycmF5LmRhdGEsb2Zmc2V0PWFycmF5Lm9mZnNldHwwLHNoYXBlPWFycmF5LnNoYXBlLHN0cmlkZT1hcnJheS5zdHJpZGUiXSxsPTA7bDx0Lmxlbmd0aDsrK2wpcy5wdXNoKFsicyIsbCwiPXN0cmlkZVsiLGwsIl18MCxuIixsLCI9c2hhcGVbIixsLCJdfDAiXS5qb2luKCIiKSk7dmFyIGM9bmV3IEFycmF5KHQubGVuZ3RoKSx1PVtdO2ZvcihsPTA7bDx0Lmxlbmd0aDsrK2wpezAhPT0ocD10W2xdKSYmKDA9PT11Lmxlbmd0aD9jW3BdPSIxIjpjW3BdPXUuam9pbigiKiIpLHUucHVzaCgibiIrcCkpfXZhciBmPS0xLGg9LTE7Zm9yKGw9MDtsPHQubGVuZ3RoOysrbCl7dmFyIHAsZD10W2xdOzAhPT1kJiYoZj4wP3MucHVzaChbImQiLGQsIj1zIixkLCItZCIsZiwiKm4iLGZdLmpvaW4oIiIpKTpzLnB1c2goWyJkIixkLCI9cyIsZF0uam9pbigiIikpLGY9ZCksMCE9PShwPXQubGVuZ3RoLTEtbCkmJihoPjA/cy5wdXNoKFsiZSIscCwiPXMiLHAsIi1lIixoLCIqbiIsaCwiLGYiLHAsIj0iLGNbcF0sIi1mIixoLCIqbiIsaF0uam9pbigiIikpOnMucHVzaChbImUiLHAsIj1zIixwLCIsZiIscCwiPSIsY1twXV0uam9pbigiIikpLGg9cCl9ci5wdXNoKCJ2YXIgIitzLmpvaW4oIiwiKSk7dmFyIGc9WyIwIiwibjAtMSIsImRhdGEiLCJvZmZzZXQiXS5jb25jYXQobyh0Lmxlbmd0aCkpO3IucHVzaChbImlmKG4wPD0iLGksIil7IiwiaW5zZXJ0aW9uU29ydCgiLGcuam9pbigiLCIpLCIpfWVsc2V7IiwicXVpY2tTb3J0KCIsZy5qb2luKCIsIiksIil9Il0uam9pbigiIikpLHIucHVzaCgifXJldHVybiAiK24pO3ZhciBtPW5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsInF1aWNrU29ydCIsci5qb2luKCJcbiIpKSx2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9WyIndXNlIHN0cmljdCciXSxuPVsibmRhcnJheUluc2VydGlvblNvcnQiLHQuam9pbigiZCIpLGVdLmpvaW4oIiIpLGk9WyJsZWZ0IiwicmlnaHQiLCJkYXRhIiwib2Zmc2V0Il0uY29uY2F0KG8odC5sZW5ndGgpKSxzPWEoZSksbD1bImksaixjcHRyLHB0cj1sZWZ0KnMwK29mZnNldCJdO2lmKHQubGVuZ3RoPjEpe2Zvcih2YXIgYz1bXSx1PTE7dTx0Lmxlbmd0aDsrK3UpbC5wdXNoKCJpIit1KSxjLnB1c2goIm4iK3UpO3M/bC5wdXNoKCJzY3JhdGNoPW1hbGxvYygiK2Muam9pbigiKiIpKyIpIik6bC5wdXNoKCJzY3JhdGNoPW5ldyBBcnJheSgiK2Muam9pbigiKiIpKyIpIiksbC5wdXNoKCJkcHRyIiwic3B0ciIsImEiLCJiIil9ZWxzZSBsLnB1c2goInNjcmF0Y2giKTtmdW5jdGlvbiBmKHQpe3JldHVybiJnZW5lcmljIj09PWU/WyJkYXRhLmdldCgiLHQsIikiXS5qb2luKCIiKTpbImRhdGFbIix0LCJdIl0uam9pbigiIil9ZnVuY3Rpb24gaCh0LHIpe3JldHVybiJnZW5lcmljIj09PWU/WyJkYXRhLnNldCgiLHQsIiwiLHIsIikiXS5qb2luKCIiKTpbImRhdGFbIix0LCJdPSIscl0uam9pbigiIil9aWYoci5wdXNoKFsiZnVuY3Rpb24gIixuLCIoIixpLmpvaW4oIiwiKSwiKXt2YXIgIixsLmpvaW4oIiwiKV0uam9pbigiIiksImZvcihpPWxlZnQrMTtpPD1yaWdodDsrK2kpeyIsImo9aTtwdHIrPXMwIiwiY3B0cj1wdHIiKSx0Lmxlbmd0aD4xKXtyLnB1c2goImRwdHI9MDtzcHRyPXB0ciIpO2Zvcih1PXQubGVuZ3RoLTE7dT49MDstLXUpezAhPT0ocD10W3VdKSYmci5wdXNoKFsiZm9yKGkiLHAsIj0wO2kiLHAsIjxuIixwLCI7KytpIixwLCIpeyJdLmpvaW4oIiIpKX1yLnB1c2goInNjcmF0Y2hbZHB0cisrXT0iLGYoInNwdHIiKSk7Zm9yKHU9MDt1PHQubGVuZ3RoOysrdSl7MCE9PShwPXRbdV0pJiZyLnB1c2goInNwdHIrPWQiK3AsIn0iKX1yLnB1c2goIl9fZzp3aGlsZShqLS1ceDNlbGVmdCl7IiwiZHB0cj0wIiwic3B0cj1jcHRyLXMwIik7Zm9yKHU9MTt1PHQubGVuZ3RoOysrdSkxPT09dSYmci5wdXNoKCJfX2w6Iiksci5wdXNoKFsiZm9yKGkiLHUsIj0wO2kiLHUsIjxuIix1LCI7KytpIix1LCIpeyJdLmpvaW4oIiIpKTtyLnB1c2goWyJhPSIsZigic3B0ciIpLCJcbmI9c2NyYXRjaFtkcHRyXVxuaWYoYTxiKXticmVhayBfX2d9XG5pZihhPmIpe2JyZWFrIF9fbH0iXS5qb2luKCIiKSk7Zm9yKHU9dC5sZW5ndGgtMTt1Pj0xOy0tdSlyLnB1c2goInNwdHIrPWUiK3UsImRwdHIrPWYiK3UsIn0iKTtyLnB1c2goImRwdHI9Y3B0cjtzcHRyPWNwdHItczAiKTtmb3IodT10Lmxlbmd0aC0xO3U+PTA7LS11KXswIT09KHA9dFt1XSkmJnIucHVzaChbImZvcihpIixwLCI9MDtpIixwLCI8biIscCwiOysraSIscCwiKXsiXS5qb2luKCIiKSl9ci5wdXNoKGgoImRwdHIiLGYoInNwdHIiKSkpO2Zvcih1PTA7dTx0Lmxlbmd0aDsrK3UpezAhPT0ocD10W3VdKSYmci5wdXNoKFsiZHB0cis9ZCIscCwiO3NwdHIrPWQiLHBdLmpvaW4oIiIpLCJ9Iil9ci5wdXNoKCJjcHRyLT1zMFxufSIpLHIucHVzaCgiZHB0cj1jcHRyO3NwdHI9MCIpO2Zvcih1PXQubGVuZ3RoLTE7dT49MDstLXUpezAhPT0ocD10W3VdKSYmci5wdXNoKFsiZm9yKGkiLHAsIj0wO2kiLHAsIjxuIixwLCI7KytpIixwLCIpeyJdLmpvaW4oIiIpKX1yLnB1c2goaCgiZHB0ciIsInNjcmF0Y2hbc3B0cisrXSIpKTtmb3IodT0wO3U8dC5sZW5ndGg7Kyt1KXt2YXIgcDswIT09KHA9dFt1XSkmJnIucHVzaCgiZHB0cis9ZCIrcCwifSIpfX1lbHNlIHIucHVzaCgic2NyYXRjaD0iK2YoInB0ciIpLCJ3aGlsZSgoai0tXHgzZWxlZnQpJiYoIitmKCJjcHRyLXMwIikrIj5zY3JhdGNoKSl7IixoKCJjcHRyIixmKCJjcHRyLXMwIikpLCJjcHRyLT1zMCIsIn0iLGgoImNwdHIiLCJzY3JhdGNoIikpO3JldHVybiByLnB1c2goIn0iKSx0Lmxlbmd0aD4xJiZzJiZyLnB1c2goImZyZWUoc2NyYXRjaCkiKSxyLnB1c2goIn0gcmV0dXJuICIrbikscz9uZXcgRnVuY3Rpb24oIm1hbGxvYyIsImZyZWUiLHIuam9pbigiXG4iKSkoc1swXSxzWzFdKTpuZXcgRnVuY3Rpb24oci5qb2luKCJcbiIpKSgpfSh0LGUpLHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVsiJ3VzZSBzdHJpY3QnIl0scz1bIm5kYXJyYXlRdWlja1NvcnQiLHQuam9pbigiZCIpLGVdLmpvaW4oIiIpLGw9WyJsZWZ0IiwicmlnaHQiLCJkYXRhIiwib2Zmc2V0Il0uY29uY2F0KG8odC5sZW5ndGgpKSxjPWEoZSksdT0wO24ucHVzaChbImZ1bmN0aW9uICIscywiKCIsbC5qb2luKCIsIiksIil7Il0uam9pbigiIikpO3ZhciBmPVsic2l4dGg9KChyaWdodC1sZWZ0KzEpLzYpfDAiLCJpbmRleDE9bGVmdCtzaXh0aCIsImluZGV4NT1yaWdodC1zaXh0aCIsImluZGV4Mz0obGVmdCtyaWdodCk+PjEiLCJpbmRleDI9aW5kZXgzLXNpeHRoIiwiaW5kZXg0PWluZGV4MytzaXh0aCIsImVsMT1pbmRleDEiLCJlbDI9aW5kZXgyIiwiZWwzPWluZGV4MyIsImVsND1pbmRleDQiLCJlbDU9aW5kZXg1IiwibGVzcz1sZWZ0KzEiLCJncmVhdD1yaWdodC0xIiwicGl2b3RzX2FyZV9lcXVhbD10cnVlIiwidG1wIiwidG1wMCIsIngiLCJ5IiwieiIsImsiLCJwdHIwIiwicHRyMSIsInB0cjIiLCJjb21wX3Bpdm90MT0wIiwiY29tcF9waXZvdDI9MCIsImNvbXA9MCJdO2lmKHQubGVuZ3RoPjEpe2Zvcih2YXIgaD1bXSxwPTE7cDx0Lmxlbmd0aDsrK3ApaC5wdXNoKCJuIitwKSxmLnB1c2goImkiK3ApO2ZvcihwPTA7cDw4OysrcClmLnB1c2goImJfcHRyIitwKTtmLnB1c2goInB0cjMiLCJwdHI0IiwicHRyNSIsInB0cjYiLCJwdHI3IiwicGl2b3RfcHRyIiwicHRyX3NoaWZ0IiwiZWxlbWVudFNpemU9IitoLmpvaW4oIioiKSksYz9mLnB1c2goInBpdm90MT1tYWxsb2MoZWxlbWVudFNpemUpIiwicGl2b3QyPW1hbGxvYyhlbGVtZW50U2l6ZSkiKTpmLnB1c2goInBpdm90MT1uZXcgQXJyYXkoZWxlbWVudFNpemUpLHBpdm90Mj1uZXcgQXJyYXkoZWxlbWVudFNpemUpIil9ZWxzZSBmLnB1c2goInBpdm90MSIsInBpdm90MiIpO2Z1bmN0aW9uIGQodCl7cmV0dXJuWyIob2Zmc2V0KyIsdCwiKnMwKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIGcodCl7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuZ2V0KCIsdCwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl0iXS5qb2luKCIiKX1mdW5jdGlvbiBtKHQscil7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuc2V0KCIsdCwiLCIsciwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl09IixyXS5qb2luKCIiKX1mdW5jdGlvbiB2KGUscixpKXtpZigxPT09ZS5sZW5ndGgpbi5wdXNoKCJwdHIwPSIrZChlWzBdKSk7ZWxzZSBmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSluLnB1c2goWyJiX3B0ciIsYSwiPXMwKiIsZVthXV0uam9pbigiIikpO3ImJm4ucHVzaCgicGl2b3RfcHRyPTAiKSxuLnB1c2goInB0cl9zaGlmdD1vZmZzZXQiKTtmb3IoYT10Lmxlbmd0aC0xO2E+PTA7LS1hKXswIT09KG89dFthXSkmJm4ucHVzaChbImZvcihpIixvLCI9MDtpIixvLCI8biIsbywiOysraSIsbywiKXsiXS5qb2luKCIiKSl9aWYoZS5sZW5ndGg+MSlmb3IoYT0wO2E8ZS5sZW5ndGg7KythKW4ucHVzaChbInB0ciIsYSwiPWJfcHRyIixhLCIrcHRyX3NoaWZ0Il0uam9pbigiIikpO24ucHVzaChpKSxyJiZuLnB1c2goIisrcGl2b3RfcHRyIik7Zm9yKGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIG87MCE9PShvPXRbYV0pJiYoZS5sZW5ndGg+MT9uLnB1c2goInB0cl9zaGlmdCs9ZCIrbyk6bi5wdXNoKCJwdHIwKz1kIitvKSxuLnB1c2goIn0iKSl9fWZ1bmN0aW9uIHkoZSxyLGksYSl7aWYoMT09PXIubGVuZ3RoKW4ucHVzaCgicHRyMD0iK2QoclswXSkpO2Vsc2V7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDsrK28pbi5wdXNoKFsiYl9wdHIiLG8sIj1zMCoiLHJbb11dLmpvaW4oIiIpKTtuLnB1c2goInB0cl9zaGlmdD1vZmZzZXQiKX1pJiZuLnB1c2goInBpdm90X3B0cj0wIiksZSYmbi5wdXNoKGUrIjoiKTtmb3Iobz0xO288dC5sZW5ndGg7KytvKW4ucHVzaChbImZvcihpIixvLCI9MDtpIixvLCI8biIsbywiOysraSIsbywiKXsiXS5qb2luKCIiKSk7aWYoci5sZW5ndGg+MSlmb3Iobz0wO288ci5sZW5ndGg7KytvKW4ucHVzaChbInB0ciIsbywiPWJfcHRyIixvLCIrcHRyX3NoaWZ0Il0uam9pbigiIikpO24ucHVzaChhKTtmb3Iobz10Lmxlbmd0aC0xO28+PTE7LS1vKWkmJm4ucHVzaCgicGl2b3RfcHRyKz1mIitvKSxyLmxlbmd0aD4xP24ucHVzaCgicHRyX3NoaWZ0Kz1lIitvKTpuLnB1c2goInB0cjArPWUiK28pLG4ucHVzaCgifSIpfWZ1bmN0aW9uIHgoKXt0Lmxlbmd0aD4xJiZjJiZuLnB1c2goImZyZWUocGl2b3QxKSIsImZyZWUocGl2b3QyKSIpfWZ1bmN0aW9uIGIoZSxyKXt2YXIgaT0iZWwiK2UsYT0iZWwiK3I7aWYodC5sZW5ndGg+MSl7dmFyIG89Il9fbCIrICsrdTt5KG8sW2ksYV0sITEsWyJjb21wPSIsZygicHRyMCIpLCItIixnKCJwdHIxIiksIlxuIiwiaWYoY29tcD4wKXt0bXAwPSIsaSwiOyIsaSwiPSIsYSwiOyIsYSwiPXRtcDA7YnJlYWsgIixvLCJ9XG4iLCJpZihjb21wPDApe2JyZWFrICIsbywifSJdLmpvaW4oIiIpKX1lbHNlIG4ucHVzaChbImlmKCIsZyhkKGkpKSwiPiIsZyhkKGEpKSwiKXt0bXAwPSIsaSwiOyIsaSwiPSIsYSwiOyIsYSwiPXRtcDB9Il0uam9pbigiIikpfWZ1bmN0aW9uIF8oZSxyKXt0Lmxlbmd0aD4xP3YoW2Uscl0sITEsbSgicHRyMCIsZygicHRyMSIpKSk6bi5wdXNoKG0oZChlKSxnKGQocikpKSl9ZnVuY3Rpb24gdyhlLHIsaSl7aWYodC5sZW5ndGg+MSl7dmFyIGE9Il9fbCIrICsrdTt5KGEsW3JdLCEwLFtlLCI9IixnKCJwdHIwIiksIi1waXZvdCIsaSwiW3Bpdm90X3B0cl1cbiIsImlmKCIsZSwiIT09MCl7YnJlYWsgIixhLCJ9Il0uam9pbigiIikpfWVsc2Ugbi5wdXNoKFtlLCI9IixnKGQocikpLCItcGl2b3QiLGldLmpvaW4oIiIpKX1mdW5jdGlvbiBUKGUscil7dC5sZW5ndGg+MT92KFtlLHJdLCExLFsidG1wPSIsZygicHRyMCIpLCJcbiIsbSgicHRyMCIsZygicHRyMSIpKSwiXG4iLG0oInB0cjEiLCJ0bXAiKV0uam9pbigiIikpOm4ucHVzaChbInB0cjA9IixkKGUpLCJcbiIsInB0cjE9IixkKHIpLCJcbiIsInRtcD0iLGcoInB0cjAiKSwiXG4iLG0oInB0cjAiLGcoInB0cjEiKSksIlxuIixtKCJwdHIxIiwidG1wIildLmpvaW4oIiIpKX1mdW5jdGlvbiBrKGUscixpKXt0Lmxlbmd0aD4xPyh2KFtlLHIsaV0sITEsWyJ0bXA9IixnKCJwdHIwIiksIlxuIixtKCJwdHIwIixnKCJwdHIxIikpLCJcbiIsbSgicHRyMSIsZygicHRyMiIpKSwiXG4iLG0oInB0cjIiLCJ0bXAiKV0uam9pbigiIikpLG4ucHVzaCgiKysiK3IsIi0tIitpKSk6bi5wdXNoKFsicHRyMD0iLGQoZSksIlxuIiwicHRyMT0iLGQociksIlxuIiwicHRyMj0iLGQoaSksIlxuIiwiKysiLHIsIlxuIiwiLS0iLGksIlxuIiwidG1wPSIsZygicHRyMCIpLCJcbiIsbSgicHRyMCIsZygicHRyMSIpKSwiXG4iLG0oInB0cjEiLGcoInB0cjIiKSksIlxuIixtKCJwdHIyIiwidG1wIildLmpvaW4oIiIpKX1mdW5jdGlvbiBNKHQsZSl7VCh0LGUpLG4ucHVzaCgiLS0iK2UpfWZ1bmN0aW9uIEEoZSxyLGkpe3QubGVuZ3RoPjE/dihbZSxyXSwhMCxbbSgicHRyMCIsZygicHRyMSIpKSwiXG4iLG0oInB0cjEiLFsicGl2b3QiLGksIltwaXZvdF9wdHJdIl0uam9pbigiIikpXS5qb2luKCIiKSk6bi5wdXNoKG0oZChlKSxnKGQocikpKSxtKGQociksInBpdm90IitpKSl9ZnVuY3Rpb24gUyhlLHIpe24ucHVzaChbImlmKCgiLHIsIi0iLGUsIik8PSIsaSwiKXtcbiIsImluc2VydGlvblNvcnQoIixlLCIsIixyLCIsZGF0YSxvZmZzZXQsIixvKHQubGVuZ3RoKS5qb2luKCIsIiksIilcbiIsIn1lbHNle1xuIixzLCIoIixlLCIsIixyLCIsZGF0YSxvZmZzZXQsIixvKHQubGVuZ3RoKS5qb2luKCIsIiksIilcbiIsIn0iXS5qb2luKCIiKSl9ZnVuY3Rpb24gRShlLHIsaSl7dC5sZW5ndGg+MT8obi5wdXNoKFsiX19sIiwrK3UsIjp3aGlsZSh0cnVlKXsiXS5qb2luKCIiKSksdihbZV0sITAsWyJpZigiLGcoInB0cjAiKSwiIT09cGl2b3QiLHIsIltwaXZvdF9wdHJdKXticmVhayBfX2wiLHUsIn0iXS5qb2luKCIiKSksbi5wdXNoKGksIn0iKSk6bi5wdXNoKFsid2hpbGUoIixnKGQoZSkpLCI9PT1waXZvdCIsciwiKXsiLGksIn0iXS5qb2luKCIiKSl9cmV0dXJuIG4ucHVzaCgidmFyICIrZi5qb2luKCIsIikpLGIoMSwyKSxiKDQsNSksYigxLDMpLGIoMiwzKSxiKDEsNCksYigzLDQpLGIoMiw1KSxiKDIsMyksYig0LDUpLHQubGVuZ3RoPjE/dihbImVsMSIsImVsMiIsImVsMyIsImVsNCIsImVsNSIsImluZGV4MSIsImluZGV4MyIsImluZGV4NSJdLCEwLFsicGl2b3QxW3Bpdm90X3B0cl09IixnKCJwdHIxIiksIlxuIiwicGl2b3QyW3Bpdm90X3B0cl09IixnKCJwdHIzIiksIlxuIiwicGl2b3RzX2FyZV9lcXVhbD1waXZvdHNfYXJlX2VxdWFsJiYocGl2b3QxW3Bpdm90X3B0cl09PT1waXZvdDJbcGl2b3RfcHRyXSlcbiIsIng9IixnKCJwdHIwIiksIlxuIiwieT0iLGcoInB0cjIiKSwiXG4iLCJ6PSIsZygicHRyNCIpLCJcbiIsbSgicHRyNSIsIngiKSwiXG4iLG0oInB0cjYiLCJ5IiksIlxuIixtKCJwdHI3IiwieiIpXS5qb2luKCIiKSk6bi5wdXNoKFsicGl2b3QxPSIsZyhkKCJlbDIiKSksIlxuIiwicGl2b3QyPSIsZyhkKCJlbDQiKSksIlxuIiwicGl2b3RzX2FyZV9lcXVhbD1waXZvdDE9PT1waXZvdDJcbiIsIng9IixnKGQoImVsMSIpKSwiXG4iLCJ5PSIsZyhkKCJlbDMiKSksIlxuIiwiej0iLGcoZCgiZWw1IikpLCJcbiIsbShkKCJpbmRleDEiKSwieCIpLCJcbiIsbShkKCJpbmRleDMiKSwieSIpLCJcbiIsbShkKCJpbmRleDUiKSwieiIpXS5qb2luKCIiKSksXygiaW5kZXgyIiwibGVmdCIpLF8oImluZGV4NCIsInJpZ2h0Iiksbi5wdXNoKCJpZihwaXZvdHNfYXJlX2VxdWFsKXsiKSxuLnB1c2goImZvcihrPWxlc3M7azw9Z3JlYXQ7KytrKXsiKSx3KCJjb21wIiwiayIsMSksbi5wdXNoKCJpZihjb21wPT09MCl7Y29udGludWV9Iiksbi5wdXNoKCJpZihjb21wPDApeyIpLG4ucHVzaCgiaWYoayE9PWxlc3MpeyIpLFQoImsiLCJsZXNzIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCIrK2xlc3MiKSxuLnB1c2goIn1lbHNleyIpLG4ucHVzaCgid2hpbGUodHJ1ZSl7IiksdygiY29tcCIsImdyZWF0IiwxKSxuLnB1c2goImlmKGNvbXA+MCl7Iiksbi5wdXNoKCJncmVhdC0tIiksbi5wdXNoKCJ9ZWxzZSBpZihjb21wPDApeyIpLGsoImsiLCJsZXNzIiwiZ3JlYXQiKSxuLnB1c2goImJyZWFrIiksbi5wdXNoKCJ9ZWxzZXsiKSxNKCJrIiwiZ3JlYXQiKSxuLnB1c2goImJyZWFrIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9ZWxzZXsiKSxuLnB1c2goImZvcihrPWxlc3M7azw9Z3JlYXQ7KytrKXsiKSx3KCJjb21wX3Bpdm90MSIsImsiLDEpLG4ucHVzaCgiaWYoY29tcF9waXZvdDE8MCl7Iiksbi5wdXNoKCJpZihrIT09bGVzcyl7IiksVCgiayIsImxlc3MiKSxuLnB1c2goIn0iKSxuLnB1c2goIisrbGVzcyIpLG4ucHVzaCgifWVsc2V7IiksdygiY29tcF9waXZvdDIiLCJrIiwyKSxuLnB1c2goImlmKGNvbXBfcGl2b3QyPjApeyIpLG4ucHVzaCgid2hpbGUodHJ1ZSl7IiksdygiY29tcCIsImdyZWF0IiwyKSxuLnB1c2goImlmKGNvbXA+MCl7Iiksbi5wdXNoKCJpZigtLWdyZWF0PGspe2JyZWFrfSIpLG4ucHVzaCgiY29udGludWUiKSxuLnB1c2goIn1lbHNleyIpLHcoImNvbXAiLCJncmVhdCIsMSksbi5wdXNoKCJpZihjb21wPDApeyIpLGsoImsiLCJsZXNzIiwiZ3JlYXQiKSxuLnB1c2goIn1lbHNleyIpLE0oImsiLCJncmVhdCIpLG4ucHVzaCgifSIpLG4ucHVzaCgiYnJlYWsiKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxBKCJsZWZ0IiwiKGxlc3MtMSkiLDEpLEEoInJpZ2h0IiwiKGdyZWF0KzEpIiwyKSxTKCJsZWZ0IiwiKGxlc3MtMikiKSxTKCIoZ3JlYXQrMikiLCJyaWdodCIpLG4ucHVzaCgiaWYocGl2b3RzX2FyZV9lcXVhbCl7IikseCgpLG4ucHVzaCgicmV0dXJuIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJpZihsZXNzPGluZGV4MSYmZ3JlYXQ+aW5kZXg1KXsiKSxFKCJsZXNzIiwxLCIrK2xlc3MiKSxFKCJncmVhdCIsMiwiLS1ncmVhdCIpLG4ucHVzaCgiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2speyIpLHcoImNvbXBfcGl2b3QxIiwiayIsMSksbi5wdXNoKCJpZihjb21wX3Bpdm90MT09PTApeyIpLG4ucHVzaCgiaWYoayE9PWxlc3MpeyIpLFQoImsiLCJsZXNzIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCIrK2xlc3MiKSxuLnB1c2goIn1lbHNleyIpLHcoImNvbXBfcGl2b3QyIiwiayIsMiksbi5wdXNoKCJpZihjb21wX3Bpdm90Mj09PTApeyIpLG4ucHVzaCgid2hpbGUodHJ1ZSl7IiksdygiY29tcCIsImdyZWF0IiwyKSxuLnB1c2goImlmKGNvbXA9PT0wKXsiKSxuLnB1c2goImlmKC0tZ3JlYXQ8ayl7YnJlYWt9Iiksbi5wdXNoKCJjb250aW51ZSIpLG4ucHVzaCgifWVsc2V7IiksdygiY29tcCIsImdyZWF0IiwxKSxuLnB1c2goImlmKGNvbXA8MCl7IiksaygiayIsImxlc3MiLCJncmVhdCIpLG4ucHVzaCgifWVsc2V7IiksTSgiayIsImdyZWF0Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJicmVhayIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLHgoKSxTKCJsZXNzIiwiZ3JlYXQiKSxuLnB1c2goIn1yZXR1cm4gIitzKSx0Lmxlbmd0aD4xJiZjP25ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsIm1hbGxvYyIsImZyZWUiLG4uam9pbigiXG4iKSkocixjWzBdLGNbMV0pOm5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsbi5qb2luKCJcbiIpKShyKX0odCxlLHYpO3JldHVybiBtKHYseSl9fSx7InR5cGVkYXJyYXktcG9vbCI6NTk1fV0sNDk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2NvbXBpbGVfc29ydC5qcyIpLGk9e307ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQub3JkZXIscj10LmR0eXBlLGE9W2Uscl0uam9pbigiOiIpLG89aVthXTtyZXR1cm4gb3x8KGlbYV09bz1uKGUscikpLG8odCksdH19LHsiLi9saWIvY29tcGlsZV9zb3J0LmpzIjo0OTN9XSw0OTU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJpb3RhLWFycmF5IiksaT10KCJpcy1idWZmZXIiKSxhPSJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQ2NEFycmF5O2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIHMoKXt2YXIgdCxlPXRoaXMuc3RyaWRlLHI9bmV3IEFycmF5KGUubGVuZ3RoKTtmb3IodD0wO3Q8ci5sZW5ndGg7Kyt0KXJbdF09W01hdGguYWJzKGVbdF0pLHRdO3Iuc29ydChvKTt2YXIgbj1uZXcgQXJyYXkoci5sZW5ndGgpO2Zvcih0PTA7dDxuLmxlbmd0aDsrK3Qpblt0XT1yW3RdWzFdO3JldHVybiBufWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1bIlZpZXciLGUsImQiLHRdLmpvaW4oIiIpO2U8MCYmKHI9IlZpZXdfTmlsIit0KTt2YXIgaT0iZ2VuZXJpYyI9PT10O2lmKC0xPT09ZSl7dmFyIGE9ImZ1bmN0aW9uICIrcisiKGEpe3RoaXMuZGF0YT1hO307dmFyIHByb3RvPSIrcisiLnByb3RvdHlwZTtwcm90by5kdHlwZT0nIit0KyInO3Byb3RvLmluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIC0xfTtwcm90by5zaXplPTA7cHJvdG8uZGltZW5zaW9uPS0xO3Byb3RvLnNoYXBlPXByb3RvLnN0cmlkZT1wcm90by5vcmRlcj1bXTtwcm90by5sbz1wcm90by5oaT1wcm90by50cmFuc3Bvc2U9cHJvdG8uc3RlcD1mdW5jdGlvbigpe3JldHVybiBuZXcgIityKyIodGhpcy5kYXRhKTt9O3Byb3RvLmdldD1wcm90by5zZXQ9ZnVuY3Rpb24oKXt9O3Byb3RvLnBpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihhKXtyZXR1cm4gbmV3ICIrcisiKGEpO30iO3JldHVybiBuZXcgRnVuY3Rpb24oYSkoKX1pZigwPT09ZSl7YT0iZnVuY3Rpb24gIityKyIoYSxkKSB7dGhpcy5kYXRhID0gYTt0aGlzLm9mZnNldCA9IGR9O3ZhciBwcm90bz0iK3IrIi5wcm90b3R5cGU7cHJvdG8uZHR5cGU9JyIrdCsiJztwcm90by5pbmRleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldH07cHJvdG8uZGltZW5zaW9uPTA7cHJvdG8uc2l6ZT0xO3Byb3RvLnNoYXBlPXByb3RvLnN0cmlkZT1wcm90by5vcmRlcj1bXTtwcm90by5sbz1wcm90by5oaT1wcm90by50cmFuc3Bvc2U9cHJvdG8uc3RlcD1mdW5jdGlvbiAiK3IrIl9jb3B5KCkge3JldHVybiBuZXcgIityKyIodGhpcy5kYXRhLHRoaXMub2Zmc2V0KX07cHJvdG8ucGljaz1mdW5jdGlvbiAiK3IrIl9waWNrKCl7cmV0dXJuIFRyaXZpYWxBcnJheSh0aGlzLmRhdGEpO307cHJvdG8udmFsdWVPZj1wcm90by5nZXQ9ZnVuY3Rpb24gIityKyJfZ2V0KCl7cmV0dXJuICIrKGk/InRoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQpIjoidGhpcy5kYXRhW3RoaXMub2Zmc2V0XSIpKyJ9O3Byb3RvLnNldD1mdW5jdGlvbiAiK3IrIl9zZXQodil7cmV0dXJuICIrKGk/InRoaXMuZGF0YS5zZXQodGhpcy5vZmZzZXQsdikiOiJ0aGlzLmRhdGFbdGhpcy5vZmZzZXRdPXYiKSsifTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0XyIrcisiKGEsYixjLGQpe3JldHVybiBuZXcgIityKyIoYSxkKX0iO3JldHVybiBuZXcgRnVuY3Rpb24oIlRyaXZpYWxBcnJheSIsYSkoY1t0XVswXSl9YT1bIid1c2Ugc3RyaWN0JyJdO3ZhciBvPW4oZSksbD1vLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuImkiK3R9KSksdT0idGhpcy5vZmZzZXQrIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInRoaXMuc3RyaWRlWyIrdCsiXSppIit0fSkpLmpvaW4oIisiKSxmPW8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iYiIrdH0pKS5qb2luKCIsIiksaD1vLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuImMiK3R9KSkuam9pbigiLCIpO2EucHVzaCgiZnVuY3Rpb24gIityKyIoYSwiK2YrIiwiK2grIixkKXt0aGlzLmRhdGE9YSIsInRoaXMuc2hhcGU9WyIrZisiXSIsInRoaXMuc3RyaWRlPVsiK2grIl0iLCJ0aGlzLm9mZnNldD1kfDB9IiwidmFyIHByb3RvPSIrcisiLnByb3RvdHlwZSIsInByb3RvLmR0eXBlPSciK3QrIiciLCJwcm90by5kaW1lbnNpb249IitlKSxhLnB1c2goIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnc2l6ZScse2dldDpmdW5jdGlvbiAiK3IrIl9zaXplKCl7cmV0dXJuICIrby5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJ0aGlzLnNoYXBlWyIrdCsiXSJ9KSkuam9pbigiKiIpLCJ9fSkiKSwxPT09ZT9hLnB1c2goInByb3RvLm9yZGVyPVswXSIpOihhLnB1c2goIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnb3JkZXInLHtnZXQ6IiksZTw0PyhhLnB1c2goImZ1bmN0aW9uICIrcisiX29yZGVyKCl7IiksMj09PWU/YS5wdXNoKCJyZXR1cm4gKE1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKT5NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSkpP1sxLDBdOlswLDFdfX0pIik6Mz09PWUmJmEucHVzaCgidmFyIHMwPU1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKSxzMT1NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSksczI9TWF0aC5hYnModGhpcy5zdHJpZGVbMl0pO2lmKHMwPnMxKXtpZihzMT5zMil7cmV0dXJuIFsyLDEsMF07fWVsc2UgaWYoczA+czIpe3JldHVybiBbMSwyLDBdO31lbHNle3JldHVybiBbMSwwLDJdO319ZWxzZSBpZihzMD5zMil7cmV0dXJuIFsyLDAsMV07fWVsc2UgaWYoczI+czEpe3JldHVybiBbMCwxLDJdO31lbHNle3JldHVybiBbMCwyLDFdO319fSkiKSk6YS5wdXNoKCJPUkRFUn0pIikpLGEucHVzaCgicHJvdG8uc2V0PWZ1bmN0aW9uICIrcisiX3NldCgiK2wuam9pbigiLCIpKyIsdil7IiksaT9hLnB1c2goInJldHVybiB0aGlzLmRhdGEuc2V0KCIrdSsiLHYpfSIpOmEucHVzaCgicmV0dXJuIHRoaXMuZGF0YVsiK3UrIl09dn0iKSxhLnB1c2goInByb3RvLmdldD1mdW5jdGlvbiAiK3IrIl9nZXQoIitsLmpvaW4oIiwiKSsiKXsiKSxpP2EucHVzaCgicmV0dXJuIHRoaXMuZGF0YS5nZXQoIit1KyIpfSIpOmEucHVzaCgicmV0dXJuIHRoaXMuZGF0YVsiK3UrIl19IiksYS5wdXNoKCJwcm90by5pbmRleD1mdW5jdGlvbiAiK3IrIl9pbmRleCgiLGwuam9pbigpLCIpe3JldHVybiAiK3UrIn0iKSxhLnB1c2goInByb3RvLmhpPWZ1bmN0aW9uICIrcisiX2hpKCIrbC5qb2luKCIsIikrIil7cmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuWyIodHlwZW9mIGkiLHQsIiE9PSdudW1iZXInfHxpIix0LCI8MCk/dGhpcy5zaGFwZVsiLHQsIl06aSIsdCwifDAiXS5qb2luKCIiKX0pKS5qb2luKCIsIikrIiwiK28ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4idGhpcy5zdHJpZGVbIit0KyJdIn0pKS5qb2luKCIsIikrIix0aGlzLm9mZnNldCl9Iik7dmFyIHA9by5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJhIit0KyI9dGhpcy5zaGFwZVsiK3QrIl0ifSkpLGQ9by5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJjIit0KyI9dGhpcy5zdHJpZGVbIit0KyJdIn0pKTthLnB1c2goInByb3RvLmxvPWZ1bmN0aW9uICIrcisiX2xvKCIrbC5qb2luKCIsIikrIil7dmFyIGI9dGhpcy5vZmZzZXQsZD0wLCIrcC5qb2luKCIsIikrIiwiK2Quam9pbigiLCIpKTtmb3IodmFyIGc9MDtnPGU7KytnKWEucHVzaCgiaWYodHlwZW9mIGkiK2crIj09PSdudW1iZXInJiZpIitnKyI+PTApe2Q9aSIrZysifDA7Yis9YyIrZysiKmQ7YSIrZysiLT1kfSIpO2EucHVzaCgicmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuImEiK3R9KSkuam9pbigiLCIpKyIsIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuImMiK3R9KSkuam9pbigiLCIpKyIsYil9IiksYS5wdXNoKCJwcm90by5zdGVwPWZ1bmN0aW9uICIrcisiX3N0ZXAoIitsLmpvaW4oIiwiKSsiKXt2YXIgIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuImEiK3QrIj10aGlzLnNoYXBlWyIrdCsiXSJ9KSkuam9pbigiLCIpKyIsIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuImIiK3QrIj10aGlzLnN0cmlkZVsiK3QrIl0ifSkpLmpvaW4oIiwiKSsiLGM9dGhpcy5vZmZzZXQsZD0wLGNlaWw9TWF0aC5jZWlsIik7Zm9yKGc9MDtnPGU7KytnKWEucHVzaCgiaWYodHlwZW9mIGkiK2crIj09PSdudW1iZXInKXtkPWkiK2crInwwO2lmKGQ8MCl7Yys9YiIrZysiKihhIitnKyItMSk7YSIrZysiPWNlaWwoLWEiK2crIi9kKX1lbHNle2EiK2crIj1jZWlsKGEiK2crIi9kKX1iIitnKyIqPWR9Iik7YS5wdXNoKCJyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSwiK28ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdH0pKS5qb2luKCIsIikrIiwiK28ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iYiIrdH0pKS5qb2luKCIsIikrIixjKX0iKTt2YXIgbT1uZXcgQXJyYXkoZSksdj1uZXcgQXJyYXkoZSk7Zm9yKGc9MDtnPGU7KytnKW1bZ109ImFbaSIrZysiXSIsdltnXT0iYltpIitnKyJdIjthLnB1c2goInByb3RvLnRyYW5zcG9zZT1mdW5jdGlvbiAiK3IrIl90cmFuc3Bvc2UoIitsKyIpeyIrbC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIj0oIit0KyI9PT11bmRlZmluZWQ/IitlKyI6Iit0KyJ8MCkifSkpLmpvaW4oIjsiKSwidmFyIGE9dGhpcy5zaGFwZSxiPXRoaXMuc3RyaWRlO3JldHVybiBuZXcgIityKyIodGhpcy5kYXRhLCIrbS5qb2luKCIsIikrIiwiK3Yuam9pbigiLCIpKyIsdGhpcy5vZmZzZXQpfSIpLGEucHVzaCgicHJvdG8ucGljaz1mdW5jdGlvbiAiK3IrIl9waWNrKCIrbCsiKXt2YXIgYT1bXSxiPVtdLGM9dGhpcy5vZmZzZXQiKTtmb3IoZz0wO2c8ZTsrK2cpYS5wdXNoKCJpZih0eXBlb2YgaSIrZysiPT09J251bWJlcicmJmkiK2crIj49MCl7Yz0oYyt0aGlzLnN0cmlkZVsiK2crIl0qaSIrZysiKXwwfWVsc2V7YS5wdXNoKHRoaXMuc2hhcGVbIitnKyJdKTtiLnB1c2godGhpcy5zdHJpZGVbIitnKyJdKX0iKTtyZXR1cm4gYS5wdXNoKCJ2YXIgY3Rvcj1DVE9SX0xJU1RbYS5sZW5ndGgrMV07cmV0dXJuIGN0b3IodGhpcy5kYXRhLGEsYixjKX0iKSxhLnB1c2goInJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RfIityKyIoZGF0YSxzaGFwZSxzdHJpZGUsb2Zmc2V0KXtyZXR1cm4gbmV3ICIrcisiKGRhdGEsIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInNoYXBlWyIrdCsiXSJ9KSkuam9pbigiLCIpKyIsIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInN0cmlkZVsiK3QrIl0ifSkpLmpvaW4oIiwiKSsiLG9mZnNldCl9IiksbmV3IEZ1bmN0aW9uKCJDVE9SX0xJU1QiLCJPUkRFUiIsYS5qb2luKCJcbiIpKShjW3RdLHMpfXZhciBjPXtmbG9hdDMyOltdLGZsb2F0NjQ6W10saW50ODpbXSxpbnQxNjpbXSxpbnQzMjpbXSx1aW50ODpbXSx1aW50MTY6W10sdWludDMyOltdLGFycmF5OltdLHVpbnQ4X2NsYW1wZWQ6W10sYmlnaW50NjQ6W10sYmlndWludDY0OltdLGJ1ZmZlcjpbXSxnZW5lcmljOltdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09dClyZXR1cm4oMCxjLmFycmF5WzBdKShbXSk7Im51bWJlciI9PXR5cGVvZiB0JiYodD1bdF0pLHZvaWQgMD09PWUmJihlPVt0Lmxlbmd0aF0pO3ZhciBvPWUubGVuZ3RoO2lmKHZvaWQgMD09PXIpe3I9bmV3IEFycmF5KG8pO2Zvcih2YXIgcz1vLTEsdT0xO3M+PTA7LS1zKXJbc109dSx1Kj1lW3NdfWlmKHZvaWQgMD09PW4pe249MDtmb3Iocz0wO3M8bzsrK3MpcltzXTwwJiYobi09KGVbc10tMSkqcltzXSl9Zm9yKHZhciBmPWZ1bmN0aW9uKHQpe2lmKGkodCkpcmV0dXJuImJ1ZmZlciI7aWYoYSlzd2l0Y2goT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXtjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6cmV0dXJuImZsb2F0NjQiO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpyZXR1cm4iZmxvYXQzMiI7Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOnJldHVybiJpbnQ4IjtjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOnJldHVybiJpbnQxNiI7Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpyZXR1cm4iaW50MzIiO2Nhc2UiW29iamVjdCBVaW50OEFycmF5XSI6cmV0dXJuInVpbnQ4IjtjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpyZXR1cm4idWludDE2IjtjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4idWludDMyIjtjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpyZXR1cm4idWludDhfY2xhbXBlZCI7Y2FzZSJbb2JqZWN0IEJpZ0ludDY0QXJyYXldIjpyZXR1cm4iYmlnaW50NjQiO2Nhc2UiW29iamVjdCBCaWdVaW50NjRBcnJheV0iOnJldHVybiJiaWd1aW50NjQifXJldHVybiBBcnJheS5pc0FycmF5KHQpPyJhcnJheSI6ImdlbmVyaWMifSh0KSxoPWNbZl07aC5sZW5ndGg8PW8rMTspaC5wdXNoKGwoZixoLmxlbmd0aC0xKSk7cmV0dXJuKDAsaFtvKzFdKSh0LGUscixuKX19LHsiaW90YS1hcnJheSI6NDYzLCJpcy1idWZmZXIiOjQ2NX1dLDQ5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkb3VibGUtYml0cyIpLGk9TWF0aC5wb3coMiwtMTA3NCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXJldHVybiBOYU47aWYodD09PWUpcmV0dXJuIHQ7aWYoMD09PXQpcmV0dXJuIGU8MD8taTppO3ZhciByPW4uaGkodCksYT1uLmxvKHQpO2U+dD09dD4wP2E9PT0tMT4+PjA/KHIrPTEsYT0wKTphKz0xOjA9PT1hPyhhPS0xPj4+MCxyLT0xKTphLT0xO3JldHVybiBuLnBhY2soYSxyKX19LHsiZG91YmxlLWJpdHMiOjE3M31dLDQ5NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguUEksaT1jKDEyMCk7ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm5bIkMiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXtyZXR1cm5bIkMiLHQvMysyLzMqcixlLzMrMi8zKm4saS8zKzIvMypyLGEvMysyLzMqbixpLGFdfWZ1bmN0aW9uIHModCxlLHIsYSxvLGMsdSxmLGgscCl7aWYocClUPXBbMF0saz1wWzFdLF89cFsyXSx3PXBbM107ZWxzZXt2YXIgZD1sKHQsZSwtbyk7dD1kLngsZT1kLnk7dmFyIGc9KHQtKGY9KGQ9bChmLGgsLW8pKS54KSkvMixtPShlLShoPWQueSkpLzIsdj1nKmcvKHIqcikrbSptLyhhKmEpO3Y+MSYmKHIqPXY9TWF0aC5zcXJ0KHYpLGEqPXYpO3ZhciB5PXIqcix4PWEqYSxiPShjPT11Py0xOjEpKk1hdGguc3FydChNYXRoLmFicygoeSp4LXkqbSptLXgqZypnKS8oeSptKm0reCpnKmcpKSk7Yj09MS8wJiYoYj0xKTt2YXIgXz1iKnIqbS9hKyh0K2YpLzIsdz1iKi1hKmcvcisoZStoKS8yLFQ9TWF0aC5hc2luKCgoZS13KS9hKS50b0ZpeGVkKDkpKSxrPU1hdGguYXNpbigoKGgtdykvYSkudG9GaXhlZCg5KSk7KFQ9dDxfP24tVDpUKTwwJiYoVD0yKm4rVCksKGs9ZjxfP24tazprKTwwJiYoaz0yKm4rayksdSYmVD5rJiYoVC09MipuKSwhdSYmaz5UJiYoay09MipuKX1pZihNYXRoLmFicyhrLVQpPmkpe3ZhciBNPWssQT1mLFM9aDtrPVQraSoodSYmaz5UPzE6LTEpO3ZhciBFPXMoZj1fK3IqTWF0aC5jb3MoayksaD13K2EqTWF0aC5zaW4oaykscixhLG8sMCx1LEEsUyxbayxNLF8sd10pfXZhciBDPU1hdGgudGFuKChrLVQpLzQpLEw9NC8zKnIqQyxJPTQvMyphKkMsUD1bMip0LSh0K0wqTWF0aC5zaW4oVCkpLDIqZS0oZS1JKk1hdGguY29zKFQpKSxmK0wqTWF0aC5zaW4oayksaC1JKk1hdGguY29zKGspLGYsaF07aWYocClyZXR1cm4gUDtFJiYoUD1QLmNvbmNhdChFKSk7Zm9yKHZhciB6PTA7ejxQLmxlbmd0aDspe3ZhciBPPWwoUFt6XSxQW3orMV0sbyk7UFt6KytdPU8ueCxQW3orK109Ty55fXJldHVybiBQfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybnt4OnQqTWF0aC5jb3MociktZSpNYXRoLnNpbihyKSx5OnQqTWF0aC5zaW4ocikrZSpNYXRoLmNvcyhyKX19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdCoobi8xODApfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1bXSxuPTAsaT0wLGw9MCx1PTAsZj1udWxsLGg9bnVsbCxwPTAsZD0wLGc9MCxtPXQubGVuZ3RoO2c8bTtnKyspe3ZhciB2PXRbZ10seT12WzBdO3N3aXRjaCh5KXtjYXNlIk0iOmw9dlsxXSx1PXZbMl07YnJlYWs7Y2FzZSJBIjoodj1zKHAsZCx2WzFdLHZbMl0sYyh2WzNdKSx2WzRdLHZbNV0sdls2XSx2WzddKSkudW5zaGlmdCgiQyIpLHYubGVuZ3RoPjcmJihyLnB1c2godi5zcGxpY2UoMCw3KSksdi51bnNoaWZ0KCJDIikpO2JyZWFrO2Nhc2UiUyI6dmFyIHg9cCxiPWQ7IkMiIT1lJiYiUyIhPWV8fCh4Kz14LW4sYis9Yi1pKSx2PVsiQyIseCxiLHZbMV0sdlsyXSx2WzNdLHZbNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KGY9MipwLWYsaD0yKmQtaCk6KGY9cCxoPWQpLHY9byhwLGQsZixoLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJRIjpmPXZbMV0saD12WzJdLHY9byhwLGQsdlsxXSx2WzJdLHZbM10sdls0XSk7YnJlYWs7Y2FzZSJMIjp2PWEocCxkLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJIIjp2PWEocCxkLHZbMV0sZCk7YnJlYWs7Y2FzZSJWIjp2PWEocCxkLHAsdlsxXSk7YnJlYWs7Y2FzZSJaIjp2PWEocCxkLGwsdSl9ZT15LHA9dlt2Lmxlbmd0aC0yXSxkPXZbdi5sZW5ndGgtMV0sdi5sZW5ndGg+ND8obj12W3YubGVuZ3RoLTRdLGk9dlt2Lmxlbmd0aC0zXSk6KG49cCxpPWQpLHIucHVzaCh2KX1yZXR1cm4gcn19LHt9XSw0OTg6W2Z1bmN0aW9uKHQsZSxyKXtyLnZlcnRleE5vcm1hbHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPXZvaWQgMD09PXI/MWUtNjpyLG89MDtvPG47KytvKWlbb109WzAsMCwwXTtmb3Iobz0wO288dC5sZW5ndGg7KytvKWZvcih2YXIgcz10W29dLGw9MCxjPXNbcy5sZW5ndGgtMV0sdT1zWzBdLGY9MDtmPHMubGVuZ3RoOysrZil7bD1jLGM9dSx1PXNbKGYrMSklcy5sZW5ndGhdO2Zvcih2YXIgaD1lW2xdLHA9ZVtjXSxkPWVbdV0sZz1uZXcgQXJyYXkoMyksbT0wLHY9bmV3IEFycmF5KDMpLHk9MCx4PTA7eDwzOysreClnW3hdPWhbeF0tcFt4XSxtKz1nW3hdKmdbeF0sdlt4XT1kW3hdLXBbeF0seSs9dlt4XSp2W3hdO2lmKG0qeT5hKXt2YXIgYj1pW2NdLF89MS9NYXRoLnNxcnQobSp5KTtmb3IoeD0wO3g8MzsrK3gpe3ZhciB3PSh4KzEpJTMsVD0oeCsyKSUzO2JbeF0rPV8qKHZbd10qZ1tUXS12W1RdKmdbd10pfX19Zm9yKG89MDtvPG47KytvKXtiPWlbb107dmFyIGs9MDtmb3IoeD0wO3g8MzsrK3gpays9Ylt4XSpiW3hdO2lmKGs+YSlmb3IoXz0xL01hdGguc3FydChrKSx4PTA7eDwzOysreCliW3hdKj1fO2Vsc2UgZm9yKHg9MDt4PDM7Kyt4KWJbeF09MH1yZXR1cm4gaX0sci5mYWNlTm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28pe2Zvcih2YXIgcz10W29dLGw9bmV3IEFycmF5KDMpLGM9MDtjPDM7KytjKWxbY109ZVtzW2NdXTt2YXIgdT1uZXcgQXJyYXkoMyksZj1uZXcgQXJyYXkoMyk7Zm9yKGM9MDtjPDM7KytjKXVbY109bFsxXVtjXS1sWzBdW2NdLGZbY109bFsyXVtjXS1sWzBdW2NdO3ZhciBoPW5ldyBBcnJheSgzKSxwPTA7Zm9yKGM9MDtjPDM7KytjKXt2YXIgZD0oYysxKSUzLGc9KGMrMiklMztoW2NdPXVbZF0qZltnXS11W2ddKmZbZF0scCs9aFtjXSpoW2NdfXA9cD5hPzEvTWF0aC5zcXJ0KHApOjA7Zm9yKGM9MDtjPDM7KytjKWhbY10qPXA7aVtvXT1ofXJldHVybiBpfX0se31dLDQ5OTpbZnVuY3Rpb24odCxlLHIpewovKgpvYmplY3QtYXNzaWduCihjKSBTaW5kcmUgU29yaHVzCkBsaWNlbnNlIE1JVAoqLwoidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2Z1bmN0aW9uIG8odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciB0PW5ldyBTdHJpbmcoImFiYyIpO2lmKHRbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KVswXSlyZXR1cm4hMTtmb3IodmFyIGU9e30scj0wO3I8MTA7cisrKWVbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUocildPXI7aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtuW3RdPXR9KSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oIiIpfWNhdGNoKHQpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLHMsbD1vKHQpLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtmb3IodmFyIHUgaW4gcj1PYmplY3QoYXJndW1lbnRzW2NdKSlpLmNhbGwocix1KSYmKGxbdV09clt1XSk7aWYobil7cz1uKHIpO2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7ZisrKWEuY2FsbChyLHNbZl0pJiYobFtzW2ZdXT1yW3NbZl1dKX19cmV0dXJuIGx9fSx7fV0sNTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT1lK2ErYztpZihmPjApe3ZhciBmPU1hdGguc3FydCh1KzEpO3RbMF09LjUqKG8tbCkvZix0WzFdPS41KihzLW4pL2YsdFsyXT0uNSooci1hKS9mLHRbM109LjUqZn1lbHNle3ZhciBoPU1hdGgubWF4KGUsYSxjKTtmPU1hdGguc3FydCgyKmgtdSsxKTtlPj1oPyh0WzBdPS41KmYsdFsxXT0uNSooaStyKS9mLHRbMl09LjUqKHMrbikvZix0WzNdPS41KihvLWwpL2YpOmE+PWg/KHRbMF09LjUqKHIraSkvZix0WzFdPS41KmYsdFsyXT0uNSoobCtvKS9mLHRbM109LjUqKHMtbikvZik6KHRbMF09LjUqKG4rcykvZix0WzFdPS41KihvK2wpL2YsdFsyXT0uNSpmLHRbM109LjUqKHItaSkvZil9cmV0dXJuIHR9fSx7fV0sNTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC5yb3RhdGlvbnx8WzAsMCwwLDFdLG49dC5yYWRpdXN8fDE7ZT1bXS5zbGljZS5jYWxsKGUsMCwzKSx1KHI9W10uc2xpY2UuY2FsbChyLDAsNCkscik7dmFyIGk9bmV3IGYocixlLE1hdGgubG9nKG4pKTtpLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpLCgiZXllImluIHR8fCJ1cCJpbiB0KSYmaS5sb29rQXQoMCx0LmV5ZSx0LmNlbnRlcix0LnVwKTtyZXR1cm4gaX07dmFyIG49dCgiZmlsdGVyZWQtdmVjdG9yIiksaT10KCJnbC1tYXQ0L2xvb2tBdCIpLGE9dCgiZ2wtbWF0NC9mcm9tUXVhdCIpLG89dCgiZ2wtbWF0NC9pbnZlcnQiKSxzPXQoIi4vbGliL3F1YXRGcm9tRnJhbWUiKTtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobiwyKSl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1jKHIsbixpLGEpO28+MWUtNj8odFswXT1yL28sdFsxXT1uL28sdFsyXT1pL28sdFszXT1hL28pOih0WzBdPXRbMV09dFsyXT0wLHRbM109MSl9ZnVuY3Rpb24gZih0LGUscil7dGhpcy5yYWRpdXM9bihbcl0pLHRoaXMuY2VudGVyPW4oZSksdGhpcy5yb3RhdGlvbj1uKHQpLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUm90YXRpb249dGhpcy5yb3RhdGlvbi5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PVsuMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIGg9Zi5wcm90b3R5cGU7aC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy5yb3RhdGlvbi5sYXN0VCgpKX0saC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy5yb3RhdGlvbi5jdXJ2ZSh0KTt2YXIgZT10aGlzLmNvbXB1dGVkUm90YXRpb247dShlLGUpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7YShyLGUpO3ZhciBuPXRoaXMuY29tcHV0ZWRDZW50ZXIsaT10aGlzLmNvbXB1dGVkRXllLG89dGhpcy5jb21wdXRlZFVwLHM9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7aVswXT1uWzBdK3MqclsyXSxpWzFdPW5bMV0rcypyWzZdLGlbMl09blsyXStzKnJbMTBdLG9bMF09clsxXSxvWzFdPXJbNV0sb1syXT1yWzldO2Zvcih2YXIgbD0wO2w8MzsrK2wpe2Zvcih2YXIgYz0wLGY9MDtmPDM7KytmKWMrPXJbbCs0KmZdKmlbZl07clsxMitsXT0tY319LGguZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9LGguaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5yb3RhdGlvbi5pZGxlKHQpfSxoLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMucm90YXRpb24uZmx1c2godCl9LGgucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZXx8MCxyPXJ8fDAsbj1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzFdLG89aVs1XSxzPWlbOV0sYz1sKGEsbyxzKTthLz1jLG8vPWMscy89Yzt2YXIgdT1pWzBdLGY9aVs0XSxoPWlbOF0scD11KmErZipvK2gqcyxkPWwodS09YSpwLGYtPW8qcCxoLT1zKnApO3UvPWQsZi89ZCxoLz1kO3ZhciBnPWlbMl0sbT1pWzZdLHY9aVsxMF0seT1nKmErbSpvK3Yqcyx4PWcqdSttKmYrdipoLGI9bChnLT15KmEreCp1LG0tPXkqbyt4KmYsdi09eSpzK3gqaCk7Zy89YixtLz1iLHYvPWI7dmFyIF89dSplK2Eqcix3PWYqZStvKnIsVD1oKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxfLHcsVCk7dmFyIGs9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7az1NYXRoLm1heCgxZS00LGsrbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coaykpfSxoLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fDAscj1yfHwwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzBdLG89aVs0XSxzPWlbOF0sdT1pWzFdLGY9aVs1XSxoPWlbOV0scD1pWzJdLGQ9aVs2XSxnPWlbMTBdLG09ZSphK3IqdSx2PWUqbytyKmYseT1lKnMrcipoLHg9LShkKnktZyp2KSxiPS0oZyptLXAqeSksXz0tKHAqdi1kKm0pLHc9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMS1NYXRoLnBvdyh4LDIpLU1hdGgucG93KGIsMiktTWF0aC5wb3coXywyKSkpLFQ9Yyh4LGIsXyx3KTtUPjFlLTY/KHgvPVQsYi89VCxfLz1ULHcvPVQpOih4PWI9Xz0wLHc9MSk7dmFyIGs9dGhpcy5jb21wdXRlZFJvdGF0aW9uLE09a1swXSxBPWtbMV0sUz1rWzJdLEU9a1szXSxDPU0qdytFKngrQSpfLVMqYixMPUEqdytFKmIrUyp4LU0qXyxJPVMqdytFKl8rTSpiLUEqeCxQPUUqdy1NKngtQSpiLVMqXztpZihuKXt4PXAsYj1kLF89Zzt2YXIgej1NYXRoLnNpbihuKS9sKHgsYixfKTt4Kj16LGIqPXosXyo9eixQPVAqKHc9TWF0aC5jb3MoZSkpLShDPUMqdytQKngrTCpfLUkqYikqeC0oTD1MKncrUCpiK0kqeC1DKl8pKmItKEk9SSp3K1AqXytDKmItTCp4KSpffXZhciBPPWMoQyxMLEksUCk7Tz4xZS02PyhDLz1PLEwvPU8sSS89TyxQLz1PKTooQz1MPUk9MCxQPTEpLHRoaXMucm90YXRpb24uc2V0KHQsQyxMLEksUCl9LGgubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixlPWV8fHRoaXMuY29tcHV0ZWRFeWUsbj1ufHx0aGlzLmNvbXB1dGVkVXA7dmFyIGE9dGhpcy5jb21wdXRlZE1hdHJpeDtpKGEsZSxyLG4pO3ZhciBvPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtzKG8sYVswXSxhWzFdLGFbMl0sYVs0XSxhWzVdLGFbNl0sYVs4XSxhWzldLGFbMTBdKSx1KG8sbyksdGhpcy5yb3RhdGlvbi5zZXQodCxvWzBdLG9bMV0sb1syXSxvWzNdKTtmb3IodmFyIGw9MCxjPTA7YzwzOysrYylsKz1NYXRoLnBvdyhyW2NdLWVbY10sMik7dGhpcy5yYWRpdXMuc2V0KHQsLjUqTWF0aC5sb2coTWF0aC5tYXgobCwxZS02KSkpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKX0saC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0saC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbXB1dGVkUm90YXRpb247cyhyLGVbMF0sZVsxXSxlWzJdLGVbNF0sZVs1XSxlWzZdLGVbOF0sZVs5XSxlWzEwXSksdShyLHIpLHRoaXMucm90YXRpb24uc2V0KHQsclswXSxyWzFdLHJbMl0sclszXSk7dmFyIG49dGhpcy5jb21wdXRlZE1hdHJpeDtvKG4sZSk7dmFyIGk9blsxNV07aWYoTWF0aC5hYnMoaSk+MWUtNil7dmFyIGE9blsxMl0vaSxsPW5bMTNdL2ksYz1uWzE0XS9pO3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBmPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLnNldCh0LGEtblsyXSpmLGwtbls2XSpmLGMtblsxMF0qZiksdGhpcy5yYWRpdXMuaWRsZSh0KX1lbHNlIHRoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KX0saC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxoLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dD10PjA/TWF0aC5sb2codCk6LTEvMCxlPWU+MD9NYXRoLmxvZyhlKToxLzAsZT1NYXRoLm1heChlLHQpLHRoaXMucmFkaXVzLmJvdW5kc1swXVswXT10LHRoaXMucmFkaXVzLmJvdW5kc1sxXVswXT1lfSxoLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmFkaXVzLmJvdW5kcztyZXR1cm4gdD8odFswXT1NYXRoLmV4cChlWzBdWzBdKSx0WzFdPU1hdGguZXhwKGVbMV1bMF0pLHQpOltNYXRoLmV4cChlWzBdWzBdKSxNYXRoLmV4cChlWzFdWzBdKV19LGgudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjYWxjTWF0cml4KHRoaXMubGFzdFQoKSkse2NlbnRlcjp0aGlzLmNvbXB1dGVkQ2VudGVyLnNsaWNlKCkscm90YXRpb246dGhpcy5jb21wdXRlZFJvdGF0aW9uLnNsaWNlKCksZGlzdGFuY2U6TWF0aC5sb2codGhpcy5jb21wdXRlZFJhZGl1c1swXSksem9vbU1pbjp0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF0sem9vbU1heDp0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF19fSxoLmZyb21KU09OPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXQuY2VudGVyO3ImJnRoaXMuY2VudGVyLnNldChlLHJbMF0sclsxXSxyWzJdKTt2YXIgbj10LnJvdGF0aW9uO24mJnRoaXMucm90YXRpb24uc2V0KGUsblswXSxuWzFdLG5bMl0sblszXSk7dmFyIGk9dC5kaXN0YW5jZTtpJiZpPjAmJnRoaXMucmFkaXVzLnNldChlLE1hdGgubG9nKGkpKSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpfX0seyIuL2xpYi9xdWF0RnJvbUZyYW1lIjo1MDAsImZpbHRlcmVkLXZlY3RvciI6MjQyLCJnbC1tYXQ0L2Zyb21RdWF0IjoyODIsImdsLW1hdDQvaW52ZXJ0IjoyOTMsImdsLW1hdDQvbG9va0F0IjoyOTR9XSw1MDI6W2Z1bmN0aW9uKHQsZSxyKXsKLyohCiAqIHBhZC1sZWZ0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9wYWQtbGVmdD4KICoKICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LgogKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqLwoidXNlIHN0cmljdCI7dmFyIG49dCgicmVwZWF0LXN0cmluZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4ocj0idW5kZWZpbmVkIiE9dHlwZW9mIHI/cisiIjoiICIsZSkrdH19LHsicmVwZWF0LXN0cmluZyI6NTQxfV0sNTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuW3RdO3ZhciByPVt0XTsic3RyaW5nIj09dHlwZW9mIGV8fEFycmF5LmlzQXJyYXkoZSk/ZT17YnJhY2tldHM6ZX06ZXx8KGU9e30pO3ZhciBuPWUuYnJhY2tldHM/QXJyYXkuaXNBcnJheShlLmJyYWNrZXRzKT9lLmJyYWNrZXRzOltlLmJyYWNrZXRzXTpbInt9IiwiW10iLCIoKSJdLGk9ZS5lc2NhcGV8fCJfX18iLGE9ISFlLmZsYXQ7bi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uZXcgUmVnRXhwKFsiXFwiLHRbMF0sIlteXFwiLHRbMF0sIlxcIix0WzFdLCJdKlxcIix0WzFdXS5qb2luKCIiKSksbj1bXTtmdW5jdGlvbiBhKGUsYSxvKXt2YXIgcz1yLnB1c2goZS5zbGljZSh0WzBdLmxlbmd0aCwtdFsxXS5sZW5ndGgpKS0xO3JldHVybiBuLnB1c2gocyksaStzK2l9ci5mb3JFYWNoKChmdW5jdGlvbih0LG4pe2Zvcih2YXIgaSxvPTA7dCE9aTspaWYoaT10LHQ9dC5yZXBsYWNlKGUsYSksbysrPjFlNCl0aHJvdyBFcnJvcigiUmVmZXJlbmNlcyBoYXZlIGNpcmN1bGFyIGRlcGVuZGVuY3kuIFBsZWFzZSwgY2hlY2sgdGhlbS4iKTtyW25dPXR9KSksbj1uLnJldmVyc2UoKSxyPXIubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbihyKXtlPWUucmVwbGFjZShuZXcgUmVnRXhwKCIoXFwiK2krcisiXFwiK2krIikiLCJnIiksdFswXSsiJDEiK3RbMV0pfSkpLGV9KSl9KSk7dmFyIG89bmV3IFJlZ0V4cCgiXFwiK2krIihbMC05XSspXFwiK2kpO3JldHVybiBhP3I6ZnVuY3Rpb24gdChlLHIsbil7Zm9yKHZhciBpLGE9W10scz0wO2k9by5leGVjKGUpOyl7aWYocysrPjFlNCl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBwYXJlbnRoZXNpcyIpO2EucHVzaChlLnNsaWNlKDAsaS5pbmRleCkpLGEucHVzaCh0KHJbaVsxXV0scikpLGU9ZS5zbGljZShpLmluZGV4K2lbMF0ubGVuZ3RoKX1yZXR1cm4gYS5wdXNoKGUpLGF9KHJbMF0scil9ZnVuY3Rpb24gaSh0LGUpe2lmKGUmJmUuZmxhdCl7dmFyIHIsbj1lJiZlLmVzY2FwZXx8Il9fXyIsaT10WzBdO2lmKCFpKXJldHVybiIiO2Zvcih2YXIgYT1uZXcgUmVnRXhwKCJcXCIrbisiKFswLTldKylcXCIrbiksbz0wO2khPXI7KXtpZihvKys+MWU0KXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2VzIGluICIrdCk7cj1pLGk9aS5yZXBsYWNlKGEscyl9cmV0dXJuIGl9cmV0dXJuIHQucmVkdWNlKChmdW5jdGlvbiB0KGUscil7cmV0dXJuIEFycmF5LmlzQXJyYXkocikmJihyPXIucmVkdWNlKHQsIiIpKSxlK3J9KSwiIik7ZnVuY3Rpb24gcyhlLHIpe2lmKG51bGw9PXRbcl0pdGhyb3cgRXJyb3IoIlJlZmVyZW5jZSAiK3IrImlzIHVuZGVmaW5lZCIpO3JldHVybiB0W3JdfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/aSh0LGUpOm4odCxlKX1hLnBhcnNlPW4sYS5zdHJpbmdpZnk9aSxlLmV4cG9ydHM9YX0se31dLDUwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwaWNrLWJ5LWFsaWFzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2FyZ3VtZW50cy5sZW5ndGg+MSYmKHQ9YXJndW1lbnRzKTsic3RyaW5nIj09dHlwZW9mIHQ/dD10LnNwbGl0KC9ccy8pLm1hcChwYXJzZUZsb2F0KToibnVtYmVyIj09dHlwZW9mIHQmJih0PVt0XSk7dC5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgdFswXT9lPTE9PT10Lmxlbmd0aD97d2lkdGg6dFswXSxoZWlnaHQ6dFswXSx4OjAseTowfToyPT09dC5sZW5ndGg/e3dpZHRoOnRbMF0saGVpZ2h0OnRbMV0seDowLHk6MH06e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdfHwwLGhlaWdodDp0WzNdLXRbMV18fDB9OnQmJih0PW4odCx7bGVmdDoieCBsIGxlZnQgTGVmdCIsdG9wOiJ5IHQgdG9wIFRvcCIsd2lkdGg6Incgd2lkdGggVyBXaWR0aCIsaGVpZ2h0OiJoIGhlaWdodCBXIFdpZHRoIixib3R0b206ImIgYm90dG9tIEJvdHRvbSIscmlnaHQ6InIgcmlnaHQgUmlnaHQifSksZT17eDp0LmxlZnR8fDAseTp0LnRvcHx8MH0sbnVsbD09dC53aWR0aD90LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD0wOmUud2lkdGg9dC53aWR0aCxudWxsPT10LmhlaWdodD90LmJvdHRvbT9lLmhlaWdodD10LmJvdHRvbS1lLnk6ZS5oZWlnaHQ9MDplLmhlaWdodD10LmhlaWdodCk7cmV0dXJuIGV9fSx7InBpY2stYnktYWxpYXMiOjUxMX1dLDUwNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gdC5yZXBsYWNlKGksKGZ1bmN0aW9uKHQscixpKXt2YXIgbz1yLnRvTG93ZXJDYXNlKCk7Zm9yKGk9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChhKTtyZXR1cm4gZT9lLm1hcChOdW1iZXIpOltdfShpKSwibSI9PW8mJmkubGVuZ3RoPjImJihlLnB1c2goW3JdLmNvbmNhdChpLnNwbGljZSgwLDIpKSksbz0ibCIscj0ibSI9PXI/ImwiOiJMIik7Oyl7aWYoaS5sZW5ndGg9PW5bb10pcmV0dXJuIGkudW5zaGlmdChyKSxlLnB1c2goaSk7aWYoaS5sZW5ndGg8bltvXSl0aHJvdyBuZXcgRXJyb3IoIm1hbGZvcm1lZCBwYXRoIGRhdGEiKTtlLnB1c2goW3JdLmNvbmNhdChpLnNwbGljZSgwLG5bb10pKSl9fSkpLGV9O3ZhciBuPXthOjcsYzo2LGg6MSxsOjIsbToyLHE6NCxzOjQsdDoyLHY6MSx6OjB9LGk9LyhbYXN0dnpxbWhsY10pKFteYXN0dnpxbWhsY10qKS9naTt2YXIgYT0vLT9bMC05XSpcLj9bMC05XSsoPzplWy0rXT9cZCspPy9naX0se31dLDUwNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPVswLCIiXSksdD1TdHJpbmcodCk7dmFyIHI9cGFyc2VGbG9hdCh0LDEwKTtyZXR1cm4gZVswXT1yLGVbMV09dC5tYXRjaCgvW1xkLlwtXCtdKlxzKiguKikvKVsxXXx8IiIsZX19LHt9XSw1MDc6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh0KSl9ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcixuPSIiLGk9MCxhPS0xLG89MCxzPTA7czw9dC5sZW5ndGg7KytzKXtpZihzPHQubGVuZ3RoKXI9dC5jaGFyQ29kZUF0KHMpO2Vsc2V7aWYoNDc9PT1yKWJyZWFrO3I9NDd9aWYoNDc9PT1yKXtpZihhPT09cy0xfHwxPT09byk7ZWxzZSBpZihhIT09cy0xJiYyPT09byl7aWYobi5sZW5ndGg8Mnx8MiE9PWl8fDQ2IT09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTEpfHw0NiE9PW4uY2hhckNvZGVBdChuLmxlbmd0aC0yKSlpZihuLmxlbmd0aD4yKXt2YXIgbD1uLmxhc3RJbmRleE9mKCIvIik7aWYobCE9PW4ubGVuZ3RoLTEpey0xPT09bD8obj0iIixpPTApOmk9KG49bi5zbGljZSgwLGwpKS5sZW5ndGgtMS1uLmxhc3RJbmRleE9mKCIvIiksYT1zLG89MDtjb250aW51ZX19ZWxzZSBpZigyPT09bi5sZW5ndGh8fDE9PT1uLmxlbmd0aCl7bj0iIixpPTAsYT1zLG89MDtjb250aW51ZX1lJiYobi5sZW5ndGg+MD9uKz0iLy4uIjpuPSIuLiIsaT0yKX1lbHNlIG4ubGVuZ3RoPjA/bis9Ii8iK3Quc2xpY2UoYSsxLHMpOm49dC5zbGljZShhKzEscyksaT1zLWEtMTthPXMsbz0wfWVsc2UgNDY9PT1yJiYtMSE9PW8/KytvOm89LTF9cmV0dXJuIG59dmFyIGk9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIGUsaT0iIixhPSExLG89YXJndW1lbnRzLmxlbmd0aC0xO28+PS0xJiYhYTtvLS0pe3ZhciBzO28+PTA/cz1hcmd1bWVudHNbb106KHZvaWQgMD09PWUmJihlPXQuY3dkKCkpLHM9ZSkscihzKSwwIT09cy5sZW5ndGgmJihpPXMrIi8iK2ksYT00Nz09PXMuY2hhckNvZGVBdCgwKSl9cmV0dXJuIGk9bihpLCFhKSxhP2kubGVuZ3RoPjA/Ii8iK2k6Ii8iOmkubGVuZ3RoPjA/aToiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbih0KXtpZihyKHQpLDA9PT10Lmxlbmd0aClyZXR1cm4iLiI7dmFyIGU9NDc9PT10LmNoYXJDb2RlQXQoMCksaT00Nz09PXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKTtyZXR1cm4gMCE9PSh0PW4odCwhZSkpLmxlbmd0aHx8ZXx8KHQ9Ii4iKSx0Lmxlbmd0aD4wJiZpJiYodCs9Ii8iKSxlPyIvIit0OnR9LGlzQWJzb2x1dGU6ZnVuY3Rpb24odCl7cmV0dXJuIHIodCksdC5sZW5ndGg+MCYmNDc9PT10LmNoYXJDb2RlQXQoMCl9LGpvaW46ZnVuY3Rpb24oKXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciB0LGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7KytlKXt2YXIgbj1hcmd1bWVudHNbZV07cihuKSxuLmxlbmd0aD4wJiYodm9pZCAwPT09dD90PW46dCs9Ii8iK24pfXJldHVybiB2b2lkIDA9PT10PyIuIjppLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmU6ZnVuY3Rpb24odCxlKXtpZihyKHQpLHIoZSksdD09PWUpcmV0dXJuIiI7aWYoKHQ9aS5yZXNvbHZlKHQpKT09PShlPWkucmVzb2x2ZShlKSkpcmV0dXJuIiI7Zm9yKHZhciBuPTE7bjx0Lmxlbmd0aCYmNDc9PT10LmNoYXJDb2RlQXQobik7KytuKTtmb3IodmFyIGE9dC5sZW5ndGgsbz1hLW4scz0xO3M8ZS5sZW5ndGgmJjQ3PT09ZS5jaGFyQ29kZUF0KHMpOysrcyk7Zm9yKHZhciBsPWUubGVuZ3RoLXMsYz1vPGw/bzpsLHU9LTEsZj0wO2Y8PWM7KytmKXtpZihmPT09Yyl7aWYobD5jKXtpZig0Nz09PWUuY2hhckNvZGVBdChzK2YpKXJldHVybiBlLnNsaWNlKHMrZisxKTtpZigwPT09ZilyZXR1cm4gZS5zbGljZShzK2YpfWVsc2Ugbz5jJiYoNDc9PT10LmNoYXJDb2RlQXQobitmKT91PWY6MD09PWYmJih1PTApKTticmVha312YXIgaD10LmNoYXJDb2RlQXQobitmKTtpZihoIT09ZS5jaGFyQ29kZUF0KHMrZikpYnJlYWs7NDc9PT1oJiYodT1mKX12YXIgcD0iIjtmb3IoZj1uK3UrMTtmPD1hOysrZilmIT09YSYmNDchPT10LmNoYXJDb2RlQXQoZil8fCgwPT09cC5sZW5ndGg/cCs9Ii4uIjpwKz0iLy4uIik7cmV0dXJuIHAubGVuZ3RoPjA/cCtlLnNsaWNlKHMrdSk6KHMrPXUsNDc9PT1lLmNoYXJDb2RlQXQocykmJisrcyxlLnNsaWNlKHMpKX0sX21ha2VMb25nOmZ1bmN0aW9uKHQpe3JldHVybiB0fSxkaXJuYW1lOmZ1bmN0aW9uKHQpe2lmKHIodCksMD09PXQubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGU9dC5jaGFyQ29kZUF0KDApLG49NDc9PT1lLGk9LTEsYT0hMCxvPXQubGVuZ3RoLTE7bz49MTstLW8paWYoNDc9PT0oZT10LmNoYXJDb2RlQXQobykpKXtpZighYSl7aT1vO2JyZWFrfX1lbHNlIGE9ITE7cmV0dXJuLTE9PT1pP24/Ii8iOiIuIjpuJiYxPT09aT8iLy8iOnQuc2xpY2UoMCxpKX0sYmFzZW5hbWU6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1lJiYic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO3IodCk7dmFyIG4saT0wLGE9LTEsbz0hMDtpZih2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZlLmxlbmd0aDw9dC5sZW5ndGgpe2lmKGUubGVuZ3RoPT09dC5sZW5ndGgmJmU9PT10KXJldHVybiIiO3ZhciBzPWUubGVuZ3RoLTEsbD0tMTtmb3Iobj10Lmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYz10LmNoYXJDb2RlQXQobik7aWYoNDc9PT1jKXtpZighbyl7aT1uKzE7YnJlYWt9fWVsc2UtMT09PWwmJihvPSExLGw9bisxKSxzPj0wJiYoYz09PWUuY2hhckNvZGVBdChzKT8tMT09LS1zJiYoYT1uKToocz0tMSxhPWwpKX1yZXR1cm4gaT09PWE/YT1sOi0xPT09YSYmKGE9dC5sZW5ndGgpLHQuc2xpY2UoaSxhKX1mb3Iobj10Lmxlbmd0aC0xO24+PTA7LS1uKWlmKDQ3PT09dC5jaGFyQ29kZUF0KG4pKXtpZighbyl7aT1uKzE7YnJlYWt9fWVsc2UtMT09PWEmJihvPSExLGE9bisxKTtyZXR1cm4tMT09PWE/IiI6dC5zbGljZShpLGEpfSxleHRuYW1lOmZ1bmN0aW9uKHQpe3IodCk7Zm9yKHZhciBlPS0xLG49MCxpPS0xLGE9ITAsbz0wLHM9dC5sZW5ndGgtMTtzPj0wOy0tcyl7dmFyIGw9dC5jaGFyQ29kZUF0KHMpO2lmKDQ3IT09bCktMT09PWkmJihhPSExLGk9cysxKSw0Nj09PWw/LTE9PT1lP2U9czoxIT09byYmKG89MSk6LTEhPT1lJiYobz0tMSk7ZWxzZSBpZighYSl7bj1zKzE7YnJlYWt9fXJldHVybi0xPT09ZXx8LTE9PT1pfHwwPT09b3x8MT09PW8mJmU9PT1pLTEmJmU9PT1uKzE/IiI6dC5zbGljZShlLGkpfSxmb3JtYXQ6ZnVuY3Rpb24odCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5kaXJ8fGUucm9vdCxuPWUuYmFzZXx8KGUubmFtZXx8IiIpKyhlLmV4dHx8IiIpO3JldHVybiByP3I9PT1lLnJvb3Q/cituOnIrdCtuOm59KCIvIix0KX0scGFyc2U6ZnVuY3Rpb24odCl7cih0KTt2YXIgZT17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PXQubGVuZ3RoKXJldHVybiBlO3ZhciBuLGk9dC5jaGFyQ29kZUF0KDApLGE9NDc9PT1pO2E/KGUucm9vdD0iLyIsbj0xKTpuPTA7Zm9yKHZhciBvPS0xLHM9MCxsPS0xLGM9ITAsdT10Lmxlbmd0aC0xLGY9MDt1Pj1uOy0tdSlpZig0NyE9PShpPXQuY2hhckNvZGVBdCh1KSkpLTE9PT1sJiYoYz0hMSxsPXUrMSksNDY9PT1pPy0xPT09bz9vPXU6MSE9PWYmJihmPTEpOi0xIT09byYmKGY9LTEpO2Vsc2UgaWYoIWMpe3M9dSsxO2JyZWFrfXJldHVybi0xPT09b3x8LTE9PT1sfHwwPT09Znx8MT09PWYmJm89PT1sLTEmJm89PT1zKzE/LTEhPT1sJiYoZS5iYXNlPWUubmFtZT0wPT09cyYmYT90LnNsaWNlKDEsbCk6dC5zbGljZShzLGwpKTooMD09PXMmJmE/KGUubmFtZT10LnNsaWNlKDEsbyksZS5iYXNlPXQuc2xpY2UoMSxsKSk6KGUubmFtZT10LnNsaWNlKHMsbyksZS5iYXNlPXQuc2xpY2UocyxsKSksZS5leHQ9dC5zbGljZShvLGwpKSxzPjA/ZS5kaXI9dC5zbGljZSgwLHMtMSk6YSYmKGUuZGlyPSIvIiksZX0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07aS5wb3NpeD1pLGUuZXhwb3J0cz1pfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjUyNn1dLDUwODpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24oKXsoZnVuY3Rpb24oKXt2YXIgcixuLGksYSxvLHM7InVuZGVmaW5lZCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmbnVsbCE9PXBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfToidW5kZWZpbmVkIiE9dHlwZW9mIHQmJm51bGwhPT10JiZ0LmhydGltZT8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKHIoKS1vKS8xZTZ9LG49dC5ocnRpbWUsYT0ocj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiAxZTkqKHQ9bigpKVswXSt0WzFdfSkoKSxzPTFlOSp0LnVwdGltZSgpLG89YS1zKTpEYXRlLm5vdz8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCktaX0saT1EYXRlLm5vdygpKTooZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCktaX0saT0obmV3IERhdGUpLmdldFRpbWUoKSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjUyNn1dLDUwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwzMil7Zm9yKHZhciByPTEsaT0wO2k8ZTsrK2kpZm9yKHZhciBhPTA7YTxpOysrYSlpZih0W2ldPHRbYV0pcj0tcjtlbHNlIGlmKHRbaV09PT10W2FdKXJldHVybiAwO3JldHVybiByfXZhciBvPW4ubWFsbG9jVWludDgoZSk7Zm9yKGk9MDtpPGU7KytpKW9baV09MDtmb3Iocj0xLGk9MDtpPGU7KytpKWlmKCFvW2ldKXt2YXIgcz0xO29baV09MTtmb3IoYT10W2ldO2EhPT1pO2E9dFthXSl7aWYob1thXSlyZXR1cm4gbi5mcmVlVWludDgobyksMDtzKz0xLG9bYV09MX0xJnN8fChyPS1yKX1yZXR1cm4gbi5mcmVlVWludDgobykscn07dmFyIG49dCgidHlwZWRhcnJheS1wb29sIil9LHsidHlwZWRhcnJheS1wb29sIjo1OTV9XSw1MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHlwZWRhcnJheS1wb29sIiksaT10KCJpbnZlcnQtcGVybXV0YXRpb24iKTtyLnJhbms9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7c3dpdGNoKGUpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Y2FzZSAyOnJldHVybiB0WzFdfXZhciByLGEsbyxzPW4ubWFsbG9jVWludDMyKGUpLGw9bi5tYWxsb2NVaW50MzIoZSksYz0wO2ZvcihpKHQsbCksbz0wO288ZTsrK28pc1tvXT10W29dO2ZvcihvPWUtMTtvPjA7LS1vKWE9bFtvXSxyPXNbb10sc1tvXT1zW2FdLHNbYV09cixsW29dPWxbcl0sbFtyXT1hLGM9KGMrcikqbztyZXR1cm4gbi5mcmVlVWludDMyKGwpLG4uZnJlZVVpbnQzMihzKSxjfSxyLnVucmFuaz1mdW5jdGlvbih0LGUscil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gcnx8W107Y2FzZSAxOnJldHVybiByPyhyWzBdPTAscik6WzBdO2Nhc2UgMjpyZXR1cm4gcj8oZT8oclswXT0wLHJbMV09MSk6KHJbMF09MSxyWzFdPTApLHIpOmU/WzAsMV06WzEsMF19dmFyIG4saSxhLG89MTtmb3IoKHI9cnx8bmV3IEFycmF5KHQpKVswXT0wLGE9MTthPHQ7KythKXJbYV09YSxvPW8qYXwwO2ZvcihhPXQtMTthPjA7LS1hKWU9ZS0obj1lL298MCkqb3wwLG89by9hfDAsaT0wfHJbYV0sclthXT0wfHJbbl0scltuXT0wfGk7cmV0dXJuIHJ9fSx7ImludmVydC1wZXJtdXRhdGlvbiI6NDYyLCJ0eXBlZGFycmF5LXBvb2wiOjU5NX1dLDUxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsbz17fTtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPWkoZSkpLEFycmF5LmlzQXJyYXkoZSkpe3ZhciBzPXt9O2ZvcihhPTA7YTxlLmxlbmd0aDthKyspc1tlW2FdXT0hMDtlPXN9Zm9yKG4gaW4gZSllW25dPWkoZVtuXSk7dmFyIGw9e307Zm9yKG4gaW4gZSl7dmFyIGM9ZVtuXTtpZihBcnJheS5pc0FycmF5KGMpKWZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWNbYV07aWYociYmKGxbdV09ITApLHUgaW4gdCl7aWYob1tuXT10W3VdLHIpZm9yKHZhciBmPWE7ZjxjLmxlbmd0aDtmKyspbFtjW2ZdXT0hMDticmVha319ZWxzZSBuIGluIHQmJihlW25dJiYob1tuXT10W25dKSxyJiYobFtuXT0hMCkpfWlmKHIpZm9yKG4gaW4gdClsW25dfHwob1tuXT10W25dKTtyZXR1cm4gb307dmFyIG49e307ZnVuY3Rpb24gaSh0KXtyZXR1cm4gblt0XT9uW3RdOigic3RyaW5nIj09dHlwZW9mIHQmJih0PW5bdF09dC5zcGxpdCgvXHMqLFxzKnxccysvKSksdCl9fSx7fV0sNTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wfGUubGVuZ3RoLGk9dC5sZW5ndGgsYT1bbmV3IEFycmF5KHIpLG5ldyBBcnJheShyKV0sbz0wO288cjsrK28pYVswXVtvXT1bXSxhWzFdW29dPVtdO2ZvcihvPTA7bzxpOysrbyl7dmFyIHM9dFtvXTthWzBdW3NbMF1dLnB1c2gocyksYVsxXVtzWzFdXS5wdXNoKHMpfXZhciBsPVtdO2ZvcihvPTA7bzxyOysrbylhWzBdW29dLmxlbmd0aCthWzFdW29dLmxlbmd0aD09PTAmJmwucHVzaChbb10pO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1hW2VdW3RbZV1dO3Iuc3BsaWNlKHIuaW5kZXhPZih0KSwxKX1mdW5jdGlvbiB1KHQscixpKXtmb3IodmFyIG8scyxsLHU9MDt1PDI7Kyt1KWlmKGFbdV1bcl0ubGVuZ3RoPjApe289YVt1XVtyXVswXSxsPXU7YnJlYWt9cz1vWzFebF07Zm9yKHZhciBmPTA7ZjwyOysrZilmb3IodmFyIGg9YVtmXVtyXSxwPTA7cDxoLmxlbmd0aDsrK3Ape3ZhciBkPWhbcF0sZz1kWzFeZl07bihlW3RdLGVbcl0sZVtzXSxlW2ddKT4wJiYobz1kLHM9ZyxsPWYpfXJldHVybiBpfHxvJiZjKG8sbCksc31mdW5jdGlvbiBmKHQscil7dmFyIGk9YVtyXVt0XVswXSxvPVt0XTtjKGkscik7Zm9yKHZhciBzPWlbMV5yXTs7KXtmb3IoO3MhPT10OylvLnB1c2gocykscz11KG9bby5sZW5ndGgtMl0scywhMSk7aWYoYVswXVt0XS5sZW5ndGgrYVsxXVt0XS5sZW5ndGg9PT0wKWJyZWFrO3ZhciBsPW9bby5sZW5ndGgtMV0sZj10LGg9b1sxXSxwPXUobCxmLCEwKTtpZihuKGVbbF0sZVtmXSxlW2hdLGVbcF0pPDApYnJlYWs7by5wdXNoKHQpLHM9dShsLGYpfXJldHVybiBvfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gZVsxXT09PWVbZS5sZW5ndGgtMV19Zm9yKG89MDtvPHI7KytvKWZvcih2YXIgcD0wO3A8MjsrK3Ape2Zvcih2YXIgZD1bXTthW3BdW29dLmxlbmd0aD4wOyl7YVswXVtvXS5sZW5ndGg7dmFyIGc9ZihvLHApO2goMCxnKT9kLnB1c2guYXBwbHkoZCxnKTooZC5sZW5ndGg+MCYmbC5wdXNoKGQpLGQ9Zyl9ZC5sZW5ndGg+MCYmbC5wdXNoKGQpfXJldHVybiBsfTt2YXIgbj10KCJjb21wYXJlLWFuZ2xlIil9LHsiY29tcGFyZS1hbmdsZSI6MTMyfV0sNTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uKHQsZS5sZW5ndGgpLGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPW5ldyBBcnJheShlLmxlbmd0aCksbz1bXSxzPTA7czxlLmxlbmd0aDsrK3Mpe3ZhciBsPXJbc10ubGVuZ3RoO2Fbc109bCxpW3NdPSEwLGw8PTEmJm8ucHVzaChzKX1mb3IoO28ubGVuZ3RoPjA7KXt2YXIgYz1vLnBvcCgpO2lbY109ITE7dmFyIHU9cltjXTtmb3Iocz0wO3M8dS5sZW5ndGg7KytzKXt2YXIgZj11W3NdOzA9PS0tYVtmXSYmby5wdXNoKGYpfX12YXIgaD1uZXcgQXJyYXkoZS5sZW5ndGgpLHA9W107Zm9yKHM9MDtzPGUubGVuZ3RoOysrcylpZihpW3NdKXtjPXAubGVuZ3RoO2hbc109YyxwLnB1c2goZVtzXSl9ZWxzZSBoW3NdPS0xO3ZhciBkPVtdO2ZvcihzPTA7czx0Lmxlbmd0aDsrK3Mpe3ZhciBnPXRbc107aVtnWzBdXSYmaVtnWzFdXSYmZC5wdXNoKFtoW2dbMF1dLGhbZ1sxXV1dKX1yZXR1cm5bZCxwXX07dmFyIG49dCgiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiKX0seyJlZGdlcy10by1hZGphY2VuY3ktbGlzdCI6MTc4fV0sNTE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWModCxlKTt0PXJbMF07Zm9yKHZhciBmPShlPXJbMV0pLmxlbmd0aCxoPSh0Lmxlbmd0aCxuKHQsZS5sZW5ndGgpKSxwPTA7cDxmOysrcClpZihoW3BdLmxlbmd0aCUyPT0xKXRocm93IG5ldyBFcnJvcigicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lOiBncmFwaCBtdXN0IGJlIG1hbmlmb2xkIik7dmFyIGQ9aSh0LGUpO3ZhciBnPShkPWQuZmlsdGVyKChmdW5jdGlvbih0KXtmb3IodmFyIHI9dC5sZW5ndGgsbj1bMF0saT0wO2k8cjsrK2kpe3ZhciBhPWVbdFtpXV0sbD1lW3RbKGkrMSklcl1dLGM9bygtYVswXSxhWzFdKSx1PW8oLWFbMF0sbFsxXSksZj1vKGxbMF0sYVsxXSksaD1vKGxbMF0sbFsxXSk7bj1zKG4scyhzKGMsdSkscyhmLGgpKSl9cmV0dXJuIG5bbi5sZW5ndGgtMV0+MH0pKSkubGVuZ3RoLG09bmV3IEFycmF5KGcpLHY9bmV3IEFycmF5KGcpO2ZvcihwPTA7cDxnOysrcCl7bVtwXT1wO3ZhciB5PW5ldyBBcnJheShnKSx4PWRbcF0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKSxiPWEoW3hdKSxfPTA7dDpmb3IodmFyIHc9MDt3PGc7Kyt3KWlmKHlbd109MCxwIT09dyl7Zm9yKHZhciBUPShxPWRbd10pLmxlbmd0aCxrPTA7azxUOysrayl7dmFyIE09YihlW3Fba11dKTtpZigwIT09TSl7TTwwJiYoeVt3XT0xLF8rPTEpO2NvbnRpbnVlIHR9fXlbd109MSxfKz0xfXZbcF09W18scCx5XX12LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0tdFswXX0pKTtmb3IocD0wO3A8ZzsrK3Ape3ZhciBBPSh5PXZbcF0pWzFdLFM9eVsyXTtmb3Iodz0wO3c8ZzsrK3cpU1t3XSYmKG1bd109QSl9dmFyIEU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPVtdO3JldHVybiBlfShnKTtmb3IocD0wO3A8ZzsrK3ApRVtwXS5wdXNoKG1bcF0pLEVbbVtwXV0ucHVzaChwKTt2YXIgQz17fSxMPXUoZiwhMSk7Zm9yKHA9MDtwPGc7KytwKWZvcihUPShxPWRbcF0pLmxlbmd0aCx3PTA7dzxUOysrdyl7dmFyIEk9cVt3XSxQPXFbKHcrMSklVF0sej1NYXRoLm1pbihJLFApKyI6IitNYXRoLm1heChJLFApO2lmKHogaW4gQyl7dmFyIE89Q1t6XTtFW09dLnB1c2gocCksRVtwXS5wdXNoKE8pLExbSV09TFtQXT0hMH1lbHNlIENbel09cH1mdW5jdGlvbiBEKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTA7cjxlOysrcilpZighTFt0W3JdXSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgUj1bXSxGPXUoZywtMSk7Zm9yKHA9MDtwPGc7KytwKW1bcF0hPT1wfHxEKGRbcF0pP0ZbcF09LTE6KFIucHVzaChwKSxGW3BdPTApO3I9W107Zm9yKDtSLmxlbmd0aD4wOyl7dmFyIEI9Ui5wb3AoKSxOPUVbQl07bChOLChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7dmFyIGosVT1OLmxlbmd0aCxWPUZbQl07aWYoMD09PVYpe3ZhciBxPWRbQl07aj1bcV19Zm9yKHA9MDtwPFU7KytwKXt2YXIgSD1OW3BdO2lmKCEoRltIXT49MCkpaWYoRltIXT0xXlYsUi5wdXNoKEgpLDA9PT1WKUQocT1kW0hdKXx8KHEucmV2ZXJzZSgpLGoucHVzaChxKSl9MD09PVYmJnIucHVzaChqKX1yZXR1cm4gcn07dmFyIG49dCgiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiKSxpPXQoInBsYW5hci1kdWFsIiksYT10KCJwb2ludC1pbi1iaWctcG9seWdvbiIpLG89dCgidHdvLXByb2R1Y3QiKSxzPXQoInJvYnVzdC1zdW0iKSxsPXQoInVuaXEiKSxjPXQoIi4vbGliL3RyaW0tbGVhdmVzIik7ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfX0seyIuL2xpYi90cmltLWxlYXZlcyI6NTEzLCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCI6MTc4LCJwbGFuYXItZHVhbCI6NTEyLCJwb2ludC1pbi1iaWctcG9seWdvbiI6NTE2LCJyb2J1c3Qtc3VtIjo1NTMsInR3by1wcm9kdWN0Ijo1ODIsdW5pcTo1OTd9XSw1MTU6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjQzXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjQzfV0sNTE2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVtdLGE9W10scz0wO3M8ZTsrK3MpZm9yKHZhciB1PXRbc10sZj11Lmxlbmd0aCxoPWYtMSxwPTA7cDxmO2g9cCsrKXt2YXIgZD11W2hdLGc9dVtwXTtkWzBdPT09Z1swXT9hLnB1c2goW2QsZ10pOnIucHVzaChbZCxnXSl9aWYoMD09PXIubGVuZ3RoKXJldHVybiAwPT09YS5sZW5ndGg/YzoobT1sKGEpLGZ1bmN0aW9uKHQpe3JldHVybiBtKHRbMF0sdFsxXSk/MDoxfSk7dmFyIG07dmFyIHY9aShyKSx5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPW8ubGUoZSxyWzBdKTtpZihpPDApcmV0dXJuIDE7dmFyIGE9dFtpXTtpZighYSl7aWYoIShpPjAmJmVbaV09PT1yWzBdKSlyZXR1cm4gMTthPXRbaS0xXX1mb3IodmFyIHM9MTthOyl7dmFyIGw9YS5rZXksYz1uKHIsbFswXSxsWzFdKTtpZihsWzBdWzBdPGxbMV1bMF0paWYoYzwwKWE9YS5sZWZ0O2Vsc2V7aWYoIShjPjApKXJldHVybiAwO3M9LTEsYT1hLnJpZ2h0fWVsc2UgaWYoYz4wKWE9YS5sZWZ0O2Vsc2V7aWYoIShjPDApKXJldHVybiAwO3M9MSxhPWEucmlnaHR9fXJldHVybiBzfX0odi5zbGFicyx2LmNvb3JkaW5hdGVzKTtyZXR1cm4gMD09PWEubGVuZ3RoP3k6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoclswXSxyWzFdKT8wOmUocil9fShsKGEpLHkpfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXSxpPXQoInNsYWItZGVjb21wb3NpdGlvbiIpLGE9dCgiaW50ZXJ2YWwtdHJlZS0xZCIpLG89dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBzKCl7cmV0dXJuITB9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdLGk9blswXVswXSxvPW5bMF1bMV0sbD1uWzFdWzFdLGM9W01hdGgubWluKG8sbCksTWF0aC5tYXgobyxsKV07aSBpbiBlP2VbaV0ucHVzaChjKTplW2ldPVtjXX12YXIgdT17fSxmPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxmLmxlbmd0aDsrK3Ipe3ZhciBoPWVbZltyXV07dVtmW3JdXT1hKGgpfXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdO3JldHVybiEhbiYmISFuLnF1ZXJ5UG9pbnQocixzKX19KHUpfWZ1bmN0aW9uIGModCl7cmV0dXJuIDF9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo1MTUsImludGVydmFsLXRyZWUtMWQiOjQ2MCwicm9idXN0LW9yaWVudGF0aW9uIjo1NDgsInNsYWItZGVjb21wb3NpdGlvbiI6NTY1fV0sNTE3OltmdW5jdGlvbih0LGUscil7Ci8qCiAqIEBjb3B5cmlnaHQgMjAxNiBTZWFuIENvbm5lbGx5IChAdm9pZHFrKSwgaHR0cDovL3N5bnRoZXRpLmNjCiAqIEBsaWNlbnNlIE1JVAogKiBAcHJlc2VydmUgUHJvamVjdCBIb21lOiBodHRwczovL2dpdGh1Yi5jb20vdm9pZHFrL3BvbHlib29sanMKICovCnZhciBuLGk9dCgiLi9saWIvYnVpbGQtbG9nIiksYT10KCIuL2xpYi9lcHNpbG9uIiksbz10KCIuL2xpYi9pbnRlcnNlY3RlciIpLHM9dCgiLi9saWIvc2VnbWVudC1jaGFpbmVyIiksbD10KCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yIiksYz10KCIuL2xpYi9nZW9qc29uIiksdT0hMSxmPWEoKTtmdW5jdGlvbiBoKHQsZSxyKXt2YXIgaT1uLnNlZ21lbnRzKHQpLGE9bi5zZWdtZW50cyhlKSxvPXIobi5jb21iaW5lKGksYSkpO3JldHVybiBuLnBvbHlnb24obyl9bj17YnVpbGRMb2c6ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P3U9aSgpOiExPT09dCYmKHU9ITEpLCExIT09dSYmdS5saXN0fSxlcHNpbG9uOmZ1bmN0aW9uKHQpe3JldHVybiBmLmVwc2lsb24odCl9LHNlZ21lbnRzOmZ1bmN0aW9uKHQpe3ZhciBlPW8oITAsZix1KTtyZXR1cm4gdC5yZWdpb25zLmZvckVhY2goZS5hZGRSZWdpb24pLHtzZWdtZW50czplLmNhbGN1bGF0ZSh0LmludmVydGVkKSxpbnZlcnRlZDp0LmludmVydGVkfX0sY29tYmluZTpmdW5jdGlvbih0LGUpe3JldHVybntjb21iaW5lZDpvKCExLGYsdSkuY2FsY3VsYXRlKHQuc2VnbWVudHMsdC5pbnZlcnRlZCxlLnNlZ21lbnRzLGUuaW52ZXJ0ZWQpLGludmVydGVkMTp0LmludmVydGVkLGludmVydGVkMjplLmludmVydGVkfX0sc2VsZWN0VW5pb246ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwudW5pb24odC5jb21iaW5lZCx1KSxpbnZlcnRlZDp0LmludmVydGVkMXx8dC5pbnZlcnRlZDJ9fSxzZWxlY3RJbnRlcnNlY3Q6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuaW50ZXJzZWN0KHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0RGlmZmVyZW5jZTpmdW5jdGlvbih0KXtyZXR1cm57c2VnbWVudHM6bC5kaWZmZXJlbmNlKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEmJiF0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZVJldih0LmNvbWJpbmVkLHUpLGludmVydGVkOiF0LmludmVydGVkMSYmdC5pbnZlcnRlZDJ9fSxzZWxlY3RYb3I6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwueG9yKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEhPT10LmludmVydGVkMn19LHBvbHlnb246ZnVuY3Rpb24odCl7cmV0dXJue3JlZ2lvbnM6cyh0LnNlZ21lbnRzLGYsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LHBvbHlnb25Gcm9tR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gYy50b1BvbHlnb24obix0KX0scG9seWdvblRvR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gYy5mcm9tUG9seWdvbihuLGYsdCl9LHVuaW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0VW5pb24pfSxpbnRlcnNlY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0LGUsbi5zZWxlY3RJbnRlcnNlY3QpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0RGlmZmVyZW5jZSl9LGRpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0LGUsbi5zZWxlY3REaWZmZXJlbmNlUmV2KX0seG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0WG9yKX19LCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYod2luZG93LlBvbHlCb29sPW4pLGUuZXhwb3J0cz1ufSx7Ii4vbGliL2J1aWxkLWxvZyI6NTE4LCIuL2xpYi9lcHNpbG9uIjo1MTksIi4vbGliL2dlb2pzb24iOjUyMCwiLi9saWIvaW50ZXJzZWN0ZXIiOjUyMSwiLi9saWIvc2VnbWVudC1jaGFpbmVyIjo1MjMsIi4vbGliL3NlZ21lbnQtc2VsZWN0b3IiOjUyNH1dLDUxODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9MCxyPSExO2Z1bmN0aW9uIG4oZSxyKXtyZXR1cm4gdC5saXN0LnB1c2goe3R5cGU6ZSxkYXRhOnI/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyKSk6dm9pZCAwfSksdH1yZXR1cm4gdD17bGlzdDpbXSxzZWdtZW50SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSsrfSxjaGVja0ludGVyc2VjdGlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGVjayIse3NlZzE6dCxzZWcyOmV9KX0sc2VnbWVudENob3A6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiZGl2X3NlZyIse3NlZzp0LHB0OmV9KSxuKCJjaG9wIix7c2VnOnQscHQ6ZX0pfSxzdGF0dXNSZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oInBvcF9zZWciLHtzZWc6dH0pfSxzZWdtZW50VXBkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJzZWdfdXBkYXRlIix7c2VnOnR9KX0sc2VnbWVudE5ldzpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJuZXdfc2VnIix7c2VnOnQscHJpbWFyeTplfSl9LHNlZ21lbnRSZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oInJlbV9zZWciLHtzZWc6dH0pfSx0ZW1wU3RhdHVzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigidGVtcF9zdGF0dXMiLHtzZWc6dCxhYm92ZTplLGJlbG93OnJ9KX0scmV3aW5kOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJyZXdpbmQiLHtzZWc6dH0pfSxzdGF0dXM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKCJzdGF0dXMiLHtzZWc6dCxhYm92ZTplLGJlbG93OnJ9KX0sdmVydDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXI/dDoocj1lLG4oInZlcnQiLHt4OmV9KSl9LGxvZzpmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJih0PUpTT04uc3RyaW5naWZ5KHQsITEsIiAgIikpLG4oImxvZyIse3R4dDp0fSl9LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4oInJlc2V0Iil9LHNlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJzZWxlY3RlZCIse3NlZ3M6dH0pfSxjaGFpblN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9zdGFydCIse3NlZzp0fSl9LGNoYWluUmVtb3ZlSGVhZDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9yZW1faGVhZCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpblJlbW92ZVRhaWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fcmVtX3RhaWwiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5OZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fbmV3Iix7cHQxOnQscHQyOmV9KX0sY2hhaW5NYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gbigiY2hhaW5fbWF0Y2giLHtpbmRleDp0fSl9LGNoYWluQ2xvc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX2Nsb3NlIix7aW5kZXg6dH0pfSxjaGFpbkFkZEhlYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fYWRkX2hlYWQiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5BZGRUYWlsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2FkZF90YWlsIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQ29ubmVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9jb24iLHtpbmRleDE6dCxpbmRleDI6ZX0pfSxjaGFpblJldmVyc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX3JldiIse2luZGV4OnR9KX0sY2hhaW5Kb2luOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2pvaW4iLHtpbmRleDE6dCxpbmRleDI6ZX0pfSxkb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG4oImRvbmUiKX19fX0se31dLDUxOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsibnVtYmVyIiE9dHlwZW9mIHQmJih0PTFlLTEwKTt2YXIgZT17ZXBzaWxvbjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJih0PWUpLHR9LHBvaW50QWJvdmVPck9uTGluZTpmdW5jdGlvbihlLHIsbil7dmFyIGk9clswXSxhPXJbMV0sbz1uWzBdLHM9blsxXSxsPWVbMF07cmV0dXJuKG8taSkqKGVbMV0tYSktKHMtYSkqKGwtaSk+PS10fSxwb2ludEJldHdlZW46ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWVbMV0tclsxXSxhPW5bMF0tclswXSxvPWVbMF0tclswXSxzPW5bMV0tclsxXSxsPW8qYStpKnM7cmV0dXJuIShsPHQpJiYhKGwtKGEqYStzKnMpPi10KX0scG9pbnRzU2FtZVg6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoZVswXS1yWzBdKTx0fSxwb2ludHNTYW1lWTpmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLmFicyhlWzFdLXJbMV0pPHR9LHBvaW50c1NhbWU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wb2ludHNTYW1lWCh0LHIpJiZlLnBvaW50c1NhbWVZKHQscil9LHBvaW50c0NvbXBhcmU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wb2ludHNTYW1lWCh0LHIpP2UucG9pbnRzU2FtZVkodCxyKT8wOnRbMV08clsxXT8tMToxOnRbMF08clswXT8tMToxfSxwb2ludHNDb2xsaW5lYXI6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWVbMF0tclswXSxhPWVbMV0tclsxXSxvPXJbMF0tblswXSxzPXJbMV0tblsxXTtyZXR1cm4gTWF0aC5hYnMoaSpzLW8qYSk8dH0sbGluZXNJbnRlcnNlY3Q6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9clswXS1lWzBdLG89clsxXS1lWzFdLHM9aVswXS1uWzBdLGw9aVsxXS1uWzFdLGM9YSpsLW8qcztpZihNYXRoLmFicyhjKTx0KXJldHVybiExO3ZhciB1PWVbMF0tblswXSxmPWVbMV0tblsxXSxoPShzKmYtbCp1KS9jLHA9KGEqZi1vKnUpL2MsZD17YWxvbmdBOjAsYWxvbmdCOjAscHQ6W2VbMF0raCphLGVbMV0raCpvXX07cmV0dXJuIGQuYWxvbmdBPWg8PS10Py0yOmg8dD8tMTpoLTE8PS10PzA6aC0xPHQ/MToyLGQuYWxvbmdCPXA8PS10Py0yOnA8dD8tMTpwLTE8PS10PzA6cC0xPHQ/MToyLGR9LHBvaW50SW5zaWRlUmVnaW9uOmZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWVbMF0saT1lWzFdLGE9cltyLmxlbmd0aC0xXVswXSxvPXJbci5sZW5ndGgtMV1bMV0scz0hMSxsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF1bMF0sdT1yW2xdWzFdO3UtaT50IT1vLWk+dCYmKGEtYykqKGktdSkvKG8tdSkrYy1uPnQmJihzPSFzKSxhPWMsbz11fXJldHVybiBzfX07cmV0dXJuIGV9fSx7fV0sNTIwOltmdW5jdGlvbih0LGUscil7dmFyIG49e3RvUG9seWdvbjpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7aWYoZS5sZW5ndGg8PTApcmV0dXJuIHQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KTtmdW5jdGlvbiByKGUpe3ZhciByPWUuc2xpY2UoMCxlLmxlbmd0aC0xKTtyZXR1cm4gdC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbcl19KX1mb3IodmFyIG49cihlWzBdKSxpPTE7aTxlLmxlbmd0aDtpKyspbj10LnNlbGVjdERpZmZlcmVuY2UodC5jb21iaW5lKG4scihlW2ldKSkpO3JldHVybiBufWlmKCJQb2x5Z29uIj09PWUudHlwZSlyZXR1cm4gdC5wb2x5Z29uKHIoZS5jb29yZGluYXRlcykpO2lmKCJNdWx0aVBvbHlnb24iPT09ZS50eXBlKXtmb3IodmFyIG49dC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbXX0pLGk9MDtpPGUuY29vcmRpbmF0ZXMubGVuZ3RoO2krKyluPXQuc2VsZWN0VW5pb24odC5jb21iaW5lKG4scihlLmNvb3JkaW5hdGVzW2ldKSkpO3JldHVybiB0LnBvbHlnb24obil9dGhyb3cgbmV3IEVycm9yKCJQb2x5Qm9vbDogQ2Fubm90IGNvbnZlcnQgR2VvSlNPTiBvYmplY3QgdG8gUG9seUJvb2wgcG9seWdvbiIpfSxmcm9tUG9seWdvbjpmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLnBvaW50SW5zaWRlUmVnaW9uKFsuNSoodFswXVswXSt0WzFdWzBdKSwuNSoodFswXVsxXSt0WzFdWzFdKV0scil9ZnVuY3Rpb24gaSh0KXtyZXR1cm57cmVnaW9uOnQsY2hpbGRyZW46W119fXI9dC5wb2x5Z29uKHQuc2VnbWVudHMocikpO3ZhciBhPWkobnVsbCk7ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXtpZihuKGUsKHM9dC5jaGlsZHJlbltyXSkucmVnaW9uKSlyZXR1cm4gdm9pZCBvKHMsZSl9dmFyIGE9aShlKTtmb3Iocj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXt2YXIgcztuKChzPXQuY2hpbGRyZW5bcl0pLnJlZ2lvbixlKSYmKGEuY2hpbGRyZW4ucHVzaChzKSx0LmNoaWxkcmVuLnNwbGljZShyLDEpLHItLSl9dC5jaGlsZHJlbi5wdXNoKGEpfWZvcih2YXIgcz0wO3M8ci5yZWdpb25zLmxlbmd0aDtzKyspe3ZhciBsPXIucmVnaW9uc1tzXTtsLmxlbmd0aDwzfHxvKGEsbCl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wLG49dFt0Lmxlbmd0aC0xXVswXSxpPXRbdC5sZW5ndGgtMV1bMV0sYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb11bMF0sbD10W29dWzFdO2EucHVzaChbcyxsXSkscis9bCpuLXMqaSxuPXMsaT1sfXJldHVybiByPDAhPT1lJiZhLnJldmVyc2UoKSxhLnB1c2goW2FbMF1bMF0sYVswXVsxXV0pLGF9dmFyIHU9W107ZnVuY3Rpb24gZih0KXt2YXIgZT1bYyh0LnJlZ2lvbiwhMSldO3UucHVzaChlKTtmb3IodmFyIHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyllLnB1c2goaCh0LmNoaWxkcmVuW3JdKSl9ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGU9MDtlPHQuY2hpbGRyZW4ubGVuZ3RoO2UrKylmKHQuY2hpbGRyZW5bZV0pO3JldHVybiBjKHQucmVnaW9uLCEwKX1mb3Iocz0wO3M8YS5jaGlsZHJlbi5sZW5ndGg7cysrKWYoYS5jaGlsZHJlbltzXSk7cmV0dXJuIHUubGVuZ3RoPD0wP3t0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbXX06MT09dS5sZW5ndGg/e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOnVbMF19Ont0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnV9fX07ZS5leHBvcnRzPW59LHt9XSw1MjE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2xpbmtlZC1saXN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBpKHQsZSxuKXtyZXR1cm57aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OnQsZW5kOmUsbXlGaWxsOnthYm92ZTpuLm15RmlsbC5hYm92ZSxiZWxvdzpuLm15RmlsbC5iZWxvd30sb3RoZXJGaWxsOm51bGx9fXZhciBhPW4uY3JlYXRlKCk7ZnVuY3Rpb24gbyh0LHIpe2EuaW5zZXJ0QmVmb3JlKHQsKGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LHIsbixpLGEsbyl7dmFyIHM9ZS5wb2ludHNDb21wYXJlKHIsYSk7cmV0dXJuIDAhPT1zP3M6ZS5wb2ludHNTYW1lKG4sbyk/MDp0IT09aT90PzE6LTE6ZS5wb2ludEFib3ZlT3JPbkxpbmUobixpP2E6byxpP286YSk/MTotMX0odC5pc1N0YXJ0LHQucHQscixuLmlzU3RhcnQsbi5wdCxuLm90aGVyLnB0KTwwfSkpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1mdW5jdGlvbih0LGUpe3ZhciByPW4ubm9kZSh7aXNTdGFydDohMCxwdDp0LnN0YXJ0LHNlZzp0LHByaW1hcnk6ZSxvdGhlcjpudWxsLHN0YXR1czpudWxsfSk7cmV0dXJuIG8ocix0LmVuZCkscn0odCxlKTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4ubm9kZSh7aXNTdGFydDohMSxwdDplLmVuZCxzZWc6ZSxwcmltYXJ5OnIsb3RoZXI6dCxzdGF0dXM6bnVsbH0pO3Qub3RoZXI9aSxvKGksdC5wdCl9KHIsdCxlKSxyfWZ1bmN0aW9uIGwodCxlKXt2YXIgbj1pKGUsdC5zZWcuZW5kLHQuc2VnKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyJiZyLnNlZ21lbnRDaG9wKHQuc2VnLGUpLHQub3RoZXIucmVtb3ZlKCksdC5zZWcuZW5kPWUsdC5vdGhlci5wdD1lLG8odC5vdGhlcix0LnB0KX0odCxlKSxzKG4sdC5wcmltYXJ5KX1mdW5jdGlvbiBjKGksbyl7dmFyIHM9bi5jcmVhdGUoKTtmdW5jdGlvbiBjKHQpe3JldHVybiBzLmZpbmRUcmFuc2l0aW9uKChmdW5jdGlvbihyKXt2YXIgbixpLGEsbyxzLGw7cmV0dXJuKG49dCxpPXIuZXYsYT1uLnNlZy5zdGFydCxvPW4uc2VnLmVuZCxzPWkuc2VnLnN0YXJ0LGw9aS5zZWcuZW5kLGUucG9pbnRzQ29sbGluZWFyKGEscyxsKT9lLnBvaW50c0NvbGxpbmVhcihvLHMsbCl8fGUucG9pbnRBYm92ZU9yT25MaW5lKG8scyxsKT8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKGEscyxsKT8xOi0xKT4wfSkpfWZ1bmN0aW9uIHUodCxuKXt2YXIgaT10LnNlZyxhPW4uc2VnLG89aS5zdGFydCxzPWkuZW5kLGM9YS5zdGFydCx1PWEuZW5kO3ImJnIuY2hlY2tJbnRlcnNlY3Rpb24oaSxhKTt2YXIgZj1lLmxpbmVzSW50ZXJzZWN0KG8scyxjLHUpO2lmKCExPT09Zil7aWYoIWUucG9pbnRzQ29sbGluZWFyKG8scyxjKSlyZXR1cm4hMTtpZihlLnBvaW50c1NhbWUobyx1KXx8ZS5wb2ludHNTYW1lKHMsYykpcmV0dXJuITE7dmFyIGg9ZS5wb2ludHNTYW1lKG8sYykscD1lLnBvaW50c1NhbWUocyx1KTtpZihoJiZwKXJldHVybiBuO3ZhciBkPSFoJiZlLnBvaW50QmV0d2VlbihvLGMsdSksZz0hcCYmZS5wb2ludEJldHdlZW4ocyxjLHUpO2lmKGgpcmV0dXJuIGc/bChuLHMpOmwodCx1KSxuO2QmJihwfHwoZz9sKG4scyk6bCh0LHUpKSxsKG4sbykpfWVsc2UgMD09PWYuYWxvbmdBJiYoLTE9PT1mLmFsb25nQj9sKHQsYyk6MD09PWYuYWxvbmdCP2wodCxmLnB0KToxPT09Zi5hbG9uZ0ImJmwodCx1KSksMD09PWYuYWxvbmdCJiYoLTE9PT1mLmFsb25nQT9sKG4sbyk6MD09PWYuYWxvbmdBP2wobixmLnB0KToxPT09Zi5hbG9uZ0EmJmwobixzKSk7cmV0dXJuITF9Zm9yKHZhciBmPVtdOyFhLmlzRW1wdHkoKTspe3ZhciBoPWEuZ2V0SGVhZCgpO2lmKHImJnIudmVydChoLnB0WzBdKSxoLmlzU3RhcnQpe3ImJnIuc2VnbWVudE5ldyhoLnNlZyxoLnByaW1hcnkpO3ZhciBwPWMoaCksZD1wLmJlZm9yZT9wLmJlZm9yZS5ldjpudWxsLGc9cC5hZnRlcj9wLmFmdGVyLmV2Om51bGw7ZnVuY3Rpb24gbSgpe2lmKGQpe3ZhciB0PXUoaCxkKTtpZih0KXJldHVybiB0fXJldHVybiEhZyYmdShoLGcpfXImJnIudGVtcFN0YXR1cyhoLnNlZywhIWQmJmQuc2VnLCEhZyYmZy5zZWcpO3ZhciB2LHk9bSgpO2lmKHkpe3ZhciB4O2lmKHQpKHg9bnVsbD09PWguc2VnLm15RmlsbC5iZWxvd3x8aC5zZWcubXlGaWxsLmFib3ZlIT09aC5zZWcubXlGaWxsLmJlbG93KSYmKHkuc2VnLm15RmlsbC5hYm92ZT0heS5zZWcubXlGaWxsLmFib3ZlKTtlbHNlIHkuc2VnLm90aGVyRmlsbD1oLnNlZy5teUZpbGw7ciYmci5zZWdtZW50VXBkYXRlKHkuc2VnKSxoLm90aGVyLnJlbW92ZSgpLGgucmVtb3ZlKCl9aWYoYS5nZXRIZWFkKCkhPT1oKXtyJiZyLnJld2luZChoLnNlZyk7Y29udGludWV9aWYodCl4PW51bGw9PT1oLnNlZy5teUZpbGwuYmVsb3d8fGguc2VnLm15RmlsbC5hYm92ZSE9PWguc2VnLm15RmlsbC5iZWxvdyxoLnNlZy5teUZpbGwuYmVsb3c9Zz9nLnNlZy5teUZpbGwuYWJvdmU6aSxoLnNlZy5teUZpbGwuYWJvdmU9eD8haC5zZWcubXlGaWxsLmJlbG93Omguc2VnLm15RmlsbC5iZWxvdztlbHNlIGlmKG51bGw9PT1oLnNlZy5vdGhlckZpbGwpdj1nP2gucHJpbWFyeT09PWcucHJpbWFyeT9nLnNlZy5vdGhlckZpbGwuYWJvdmU6Zy5zZWcubXlGaWxsLmFib3ZlOmgucHJpbWFyeT9vOmksaC5zZWcub3RoZXJGaWxsPXthYm92ZTp2LGJlbG93OnZ9O3ImJnIuc3RhdHVzKGguc2VnLCEhZCYmZC5zZWcsISFnJiZnLnNlZyksaC5vdGhlci5zdGF0dXM9cC5pbnNlcnQobi5ub2RlKHtldjpofSkpfWVsc2V7dmFyIGI9aC5zdGF0dXM7aWYobnVsbD09PWIpdGhyb3cgbmV3IEVycm9yKCJQb2x5Qm9vbDogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2UiKTtpZihzLmV4aXN0cyhiLnByZXYpJiZzLmV4aXN0cyhiLm5leHQpJiZ1KGIucHJldi5ldixiLm5leHQuZXYpLHImJnIuc3RhdHVzUmVtb3ZlKGIuZXYuc2VnKSxiLnJlbW92ZSgpLCFoLnByaW1hcnkpe3ZhciBfPWguc2VnLm15RmlsbDtoLnNlZy5teUZpbGw9aC5zZWcub3RoZXJGaWxsLGguc2VnLm90aGVyRmlsbD1ffWYucHVzaChoLnNlZyl9YS5nZXRIZWFkKCkucmVtb3ZlKCl9cmV0dXJuIHImJnIuZG9uZSgpLGZ9cmV0dXJuIHQ/e2FkZFJlZ2lvbjpmdW5jdGlvbih0KXtmb3IodmFyIG4saSxhLG89dFt0Lmxlbmd0aC0xXSxsPTA7bDx0Lmxlbmd0aDtsKyspe249byxvPXRbbF07dmFyIGM9ZS5wb2ludHNDb21wYXJlKG4sbyk7MCE9PWMmJnMoKGk9YzwwP246byxhPWM8MD9vOm4se2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDppLGVuZDphLG15RmlsbDp7YWJvdmU6bnVsbCxiZWxvdzpudWxsfSxvdGhlckZpbGw6bnVsbH0pLCEwKX19LGNhbGN1bGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCExKX19OntjYWxjdWxhdGU6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITApfSkpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITEpfSkpLGMoZSxuKX19fX0seyIuL2xpbmtlZC1saXN0Ijo1MjJ9XSw1MjI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXtyb290Ontyb290OiEwLG5leHQ6bnVsbH0sZXhpc3RzOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmZSE9PXQucm9vdH0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dC5yb290Lm5leHR9LGdldEhlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5yb290Lm5leHR9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj10LnJvb3QsaT10LnJvb3QubmV4dDtudWxsIT09aTspe2lmKHIoaSkpcmV0dXJuIGUucHJldj1pLnByZXYsZS5uZXh0PWksaS5wcmV2Lm5leHQ9ZSx2b2lkKGkucHJldj1lKTtuPWksaT1pLm5leHR9bi5uZXh0PWUsZS5wcmV2PW4sZS5uZXh0PW51bGx9LGZpbmRUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10LnJvb3Qsbj10LnJvb3QubmV4dDtudWxsIT09biYmIWUobik7KXI9bixuPW4ubmV4dDtyZXR1cm57YmVmb3JlOnI9PT10LnJvb3Q/bnVsbDpyLGFmdGVyOm4saW5zZXJ0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXY9cix0Lm5leHQ9bixyLm5leHQ9dCxudWxsIT09biYmKG4ucHJldj10KSx0fX19fTtyZXR1cm4gdH0sbm9kZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2PW51bGwsdC5uZXh0PW51bGwsdC5yZW1vdmU9ZnVuY3Rpb24oKXt0LnByZXYubmV4dD10Lm5leHQsdC5uZXh0JiYodC5uZXh0LnByZXY9dC5wcmV2KSx0LnByZXY9bnVsbCx0Lm5leHQ9bnVsbH0sdH19fSx7fV0sNTIzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bXSxpPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBhPXQuc3RhcnQsbz10LmVuZDtpZihlLnBvaW50c1NhbWUoYSxvKSljb25zb2xlLndhcm4oIlBvbHlCb29sOiBXYXJuaW5nOiBaZXJvLWxlbmd0aCBzZWdtZW50IGRldGVjdGVkOyB5b3VyIGVwc2lsb24gaXMgcHJvYmFibHkgdG9vIHNtYWxsIG9yIHRvbyBsYXJnZSIpO2Vsc2V7ciYmci5jaGFpblN0YXJ0KHQpO2Zvcih2YXIgcz17aW5kZXg6MCxtYXRjaGVzX2hlYWQ6ITEsbWF0Y2hlc19wdDE6ITF9LGw9e2luZGV4OjAsbWF0Y2hlc19oZWFkOiExLG1hdGNoZXNfcHQxOiExfSxjPXMsdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgZj0obT1uW3VdKVswXSxoPShtWzFdLG1bbS5sZW5ndGgtMV0pO21bbS5sZW5ndGgtMl07aWYoZS5wb2ludHNTYW1lKGYsYSkpe2lmKGsodSwhMCwhMCkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoZixvKSl7aWYoayh1LCEwLCExKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShoLGEpKXtpZihrKHUsITEsITApKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGgsbykmJmsodSwhMSwhMSkpYnJlYWt9aWYoYz09PXMpcmV0dXJuIG4ucHVzaChbYSxvXSksdm9pZChyJiZyLmNoYWluTmV3KGEsbykpO2lmKGM9PT1sKXtyJiZyLmNoYWluTWF0Y2gocy5pbmRleCk7dmFyIHA9cy5pbmRleCxkPXMubWF0Y2hlc19wdDE/bzphLGc9cy5tYXRjaGVzX2hlYWQsbT1uW3BdLHY9Zz9tWzBdOm1bbS5sZW5ndGgtMV0seT1nP21bMV06bVttLmxlbmd0aC0yXSx4PWc/bVttLmxlbmd0aC0xXTptWzBdLGI9Zz9tW20ubGVuZ3RoLTJdOm1bMV07cmV0dXJuIGUucG9pbnRzQ29sbGluZWFyKHksdixkKSYmKGc/KHImJnIuY2hhaW5SZW1vdmVIZWFkKHMuaW5kZXgsZCksbS5zaGlmdCgpKToociYmci5jaGFpblJlbW92ZVRhaWwocy5pbmRleCxkKSxtLnBvcCgpKSx2PXkpLGUucG9pbnRzU2FtZSh4LGQpPyhuLnNwbGljZShwLDEpLGUucG9pbnRzQ29sbGluZWFyKGIseCx2KSYmKGc/KHImJnIuY2hhaW5SZW1vdmVUYWlsKHMuaW5kZXgsdiksbS5wb3AoKSk6KHImJnIuY2hhaW5SZW1vdmVIZWFkKHMuaW5kZXgsdiksbS5zaGlmdCgpKSksciYmci5jaGFpbkNsb3NlKHMuaW5kZXgpLHZvaWQgaS5wdXNoKG0pKTp2b2lkKGc/KHImJnIuY2hhaW5BZGRIZWFkKHMuaW5kZXgsZCksbS51bnNoaWZ0KGQpKToociYmci5jaGFpbkFkZFRhaWwocy5pbmRleCxkKSxtLnB1c2goZCkpKX12YXIgXz1zLmluZGV4LHc9bC5pbmRleDtyJiZyLmNoYWluQ29ubmVjdChfLHcpO3ZhciBUPW5bX10ubGVuZ3RoPG5bd10ubGVuZ3RoO3MubWF0Y2hlc19oZWFkP2wubWF0Y2hlc19oZWFkP1Q/KE0oXyksQShfLHcpKTooTSh3KSxBKHcsXykpOkEodyxfKTpsLm1hdGNoZXNfaGVhZD9BKF8sdyk6VD8oTShfKSxBKHcsXykpOihNKHcpLEEoXyx3KSl9ZnVuY3Rpb24gayh0LGUscil7cmV0dXJuIGMuaW5kZXg9dCxjLm1hdGNoZXNfaGVhZD1lLGMubWF0Y2hlc19wdDE9cixjPT09cz8oYz1sLCExKTooYz1udWxsLCEwKX1mdW5jdGlvbiBNKHQpe3ImJnIuY2hhaW5SZXZlcnNlKHQpLG5bdF0ucmV2ZXJzZSgpfWZ1bmN0aW9uIEEodCxpKXt2YXIgYT1uW3RdLG89bltpXSxzPWFbYS5sZW5ndGgtMV0sbD1hW2EubGVuZ3RoLTJdLGM9b1swXSx1PW9bMV07ZS5wb2ludHNDb2xsaW5lYXIobCxzLGMpJiYociYmci5jaGFpblJlbW92ZVRhaWwodCxzKSxhLnBvcCgpLHM9bCksZS5wb2ludHNDb2xsaW5lYXIocyxjLHUpJiYociYmci5jaGFpblJlbW92ZUhlYWQoaSxjKSxvLnNoaWZ0KCkpLHImJnIuY2hhaW5Kb2luKHQsaSksblt0XT1hLmNvbmNhdChvKSxuLnNwbGljZShpLDEpfX0pKSxpfX0se31dLDUyNDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPSh0Lm15RmlsbC5hYm92ZT84OjApKyh0Lm15RmlsbC5iZWxvdz80OjApKyh0Lm90aGVyRmlsbCYmdC5vdGhlckZpbGwuYWJvdmU/MjowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmJlbG93PzE6MCk7MCE9PWVbaV0mJm4ucHVzaCh7aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kLG15RmlsbDp7YWJvdmU6MT09PWVbaV0sYmVsb3c6Mj09PWVbaV19LG90aGVyRmlsbDpudWxsfSl9KSksciYmci5zZWxlY3RlZChuKSxufXZhciBpPXt1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMiwyLDAsMCwxLDAsMSwwLDAsMCwwLDBdLGUpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDAsMCwwLDAsMiwwLDIsMCwwLDEsMSwwLDIsMSwwXSxlKX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMCwwLDAsMiwwLDIsMCwxLDEsMCwwLDAsMSwyLDBdLGUpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwwLDAsMSwxLDAsMiwwLDIsMCwwLDAsMF0sZSl9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMiwwLDAsMSwxLDAsMCwyLDAsMSwyLDBdLGUpfX07ZS5leHBvcnRzPWl9LHt9XSw1MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49bmV3IEZsb2F0NjRBcnJheSg0KSxpPW5ldyBGbG9hdDY0QXJyYXkoNCksYT1uZXcgRmxvYXQ2NEFycmF5KDQpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe24ubGVuZ3RoPG8ubGVuZ3RoJiYobj1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSxpPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpLGE9bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCkpO2Zvcih2YXIgbD0wO2w8by5sZW5ndGg7KytsKW5bbF09dFtsXS1vW2xdLGlbbF09ZVtsXS10W2xdLGFbbF09cltsXS10W2xdO3ZhciBjPTAsdT0wLGY9MCxoPTAscD0wLGQ9MDtmb3IobD0wO2w8by5sZW5ndGg7KytsKXt2YXIgZz1pW2xdLG09YVtsXSx2PW5bbF07Yys9ZypnLHUrPWcqbSxmKz1tKm0saCs9dipnLHArPXYqbSxkKz12KnZ9dmFyIHkseCxiLF8sdyxUPU1hdGguYWJzKGMqZi11KnUpLGs9dSpwLWYqaCxNPXUqaC1jKnA7aWYoaytNPD1UKWlmKGs8MClNPDAmJmg8MD8oTT0wLC1oPj1jPyhrPTEseT1jKzIqaCtkKTp5PWgqKGs9LWgvYykrZCk6KGs9MCxwPj0wPyhNPTAseT1kKTotcD49Zj8oTT0xLHk9ZisyKnArZCk6eT1wKihNPS1wL2YpK2QpO2Vsc2UgaWYoTTwwKU09MCxoPj0wPyhrPTAseT1kKTotaD49Yz8oaz0xLHk9YysyKmgrZCk6eT1oKihrPS1oL2MpK2Q7ZWxzZXt2YXIgQT0xL1Q7eT0oayo9QSkqKGMqayt1KihNKj1BKSsyKmgpK00qKHUqaytmKk0rMipwKStkfWVsc2UgazwwPyhiPWYrcCk+KHg9dStoKT8oXz1iLXgpPj0odz1jLTIqdStmKT8oaz0xLE09MCx5PWMrMipoK2QpOnk9KGs9Xy93KSooYyprK3UqKE09MS1rKSsyKmgpK00qKHUqaytmKk0rMipwKStkOihrPTAsYjw9MD8oTT0xLHk9ZisyKnArZCk6cD49MD8oTT0wLHk9ZCk6eT1wKihNPS1wL2YpK2QpOk08MD8oYj1jK2gpPih4PXUrcCk/KF89Yi14KT49KHc9Yy0yKnUrZik/KE09MSxrPTAseT1mKzIqcCtkKTp5PShrPTEtKE09Xy93KSkqKGMqayt1Kk0rMipoKStNKih1KmsrZipNKzIqcCkrZDooTT0wLGI8PTA/KGs9MSx5PWMrMipoK2QpOmg+PTA/KGs9MCx5PWQpOnk9aCooaz0taC9jKStkKTooXz1mK3AtdS1oKTw9MD8oaz0wLE09MSx5PWYrMipwK2QpOl8+PSh3PWMtMip1K2YpPyhrPTEsTT0wLHk9YysyKmgrZCk6eT0oaz1fL3cpKihjKmsrdSooTT0xLWspKzIqaCkrTSoodSprK2YqTSsyKnApK2Q7dmFyIFM9MS1rLU07Zm9yKGw9MDtsPG8ubGVuZ3RoOysrbClzW2xdPVMqdFtsXStrKmVbbF0rTSpyW2xdO3JldHVybiB5PDA/MDp5fX0se31dLDUyNjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLmV4cG9ydHM9e307ZnVuY3Rpb24gbygpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIHMoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGwodCl7aWYobj09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQodCwwKTtpZigobj09PW98fCFuKSYmc2V0VGltZW91dClyZXR1cm4gbj1zZXRUaW1lb3V0LHNldFRpbWVvdXQodCwwKTt0cnl7cmV0dXJuIG4odCwwKX1jYXRjaChlKXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLHQsMCl9Y2F0Y2goZSl7cmV0dXJuIG4uY2FsbCh0aGlzLHQsMCl9fX0hZnVuY3Rpb24oKXt0cnl7bj0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Om99Y2F0Y2godCl7bj1vfXRyeXtpPSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnN9Y2F0Y2godCl7aT1zfX0oKTt2YXIgYyx1PVtdLGY9ITEsaD0tMTtmdW5jdGlvbiBwKCl7ZiYmYyYmKGY9ITEsYy5sZW5ndGg/dT1jLmNvbmNhdCh1KTpoPS0xLHUubGVuZ3RoJiZkKCkpfWZ1bmN0aW9uIGQoKXtpZighZil7dmFyIHQ9bChwKTtmPSEwO2Zvcih2YXIgZT11Lmxlbmd0aDtlOyl7Zm9yKGM9dSx1PVtdOysraDxlOyljJiZjW2hdLnJ1bigpO2g9LTEsZT11Lmxlbmd0aH1jPW51bGwsZj0hMSxmdW5jdGlvbih0KXtpZihpPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKGk9PT1zfHwhaSkmJmNsZWFyVGltZW91dClyZXR1cm4gaT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtpKHQpfWNhdGNoKGUpe3RyeXtyZXR1cm4gaS5jYWxsKG51bGwsdCl9Y2F0Y2goZSl7cmV0dXJuIGkuY2FsbCh0aGlzLHQpfX19KHQpfX1mdW5jdGlvbiBnKHQsZSl7dGhpcy5mdW49dCx0aGlzLmFycmF5PWV9ZnVuY3Rpb24gbSgpe31hLm5leHRUaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07dS5wdXNoKG5ldyBnKHQsZSkpLDEhPT11Lmxlbmd0aHx8Znx8bChkKX0sZy5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sYS50aXRsZT0iYnJvd3NlciIsYS5icm93c2VyPSEwLGEuZW52PXt9LGEuYXJndj1bXSxhLnZlcnNpb249IiIsYS52ZXJzaW9ucz17fSxhLm9uPW0sYS5hZGRMaXN0ZW5lcj1tLGEub25jZT1tLGEub2ZmPW0sYS5yZW1vdmVMaXN0ZW5lcj1tLGEucmVtb3ZlQWxsTGlzdGVuZXJzPW0sYS5lbWl0PW0sYS5wcmVwZW5kTGlzdGVuZXI9bSxhLnByZXBlbmRPbmNlTGlzdGVuZXI9bSxhLmxpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm5bXX0sYS5iaW5kaW5nPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sYS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGEuY2hkaXI9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sYS51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0se31dLDUyNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJnbC1xdWF0L3NsZXJwIil9LHsiZ2wtcXVhdC9zbGVycCI6MzI1fV0sNTI4OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyhmdW5jdGlvbigpe2Zvcih2YXIgbj10KCJwZXJmb3JtYW5jZS1ub3ciKSxpPSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P3I6d2luZG93LGE9WyJtb3oiLCJ3ZWJraXQiXSxvPSJBbmltYXRpb25GcmFtZSIscz1pWyJyZXF1ZXN0IitvXSxsPWlbImNhbmNlbCIrb118fGlbImNhbmNlbFJlcXVlc3QiK29dLGM9MDshcyYmYzxhLmxlbmd0aDtjKyspcz1pW2FbY10rIlJlcXVlc3QiK29dLGw9aVthW2NdKyJDYW5jZWwiK29dfHxpW2FbY10rIkNhbmNlbFJlcXVlc3QiK29dO2lmKCFzfHwhbCl7dmFyIHU9MCxmPTAsaD1bXTtzPWZ1bmN0aW9uKHQpe2lmKDA9PT1oLmxlbmd0aCl7dmFyIGU9bigpLHI9TWF0aC5tYXgoMCwxZTMvNjAtKGUtdSkpO3U9citlLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIHQ9aC5zbGljZSgwKTtoLmxlbmd0aD0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKCF0W2VdLmNhbmNlbGxlZCl0cnl7dFtlXS5jYWxsYmFjayh1KX1jYXRjaCh0KXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IHR9KSwwKX19KSxNYXRoLnJvdW5kKHIpKX1yZXR1cm4gaC5wdXNoKHtoYW5kbGU6KytmLGNhbGxiYWNrOnQsY2FuY2VsbGVkOiExfSksZn0sbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGgubGVuZ3RoO2UrKyloW2VdLmhhbmRsZT09PXQmJihoW2VdLmNhbmNlbGxlZD0hMCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcy5jYWxsKGksdCl9LGUuZXhwb3J0cy5jYW5jZWw9ZnVuY3Rpb24oKXtsLmFwcGx5KGksYXJndW1lbnRzKX0sZS5leHBvcnRzLnBvbHlmaWxsPWZ1bmN0aW9uKHQpe3R8fCh0PWkpLHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lPXMsdC5jYW5jZWxBbmltYXRpb25GcmFtZT1sfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsicGVyZm9ybWFuY2Utbm93Ijo1MDh9XSw1Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmlnLXJhdC9hZGQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1uKHRbYV0sZVthXSk7cmV0dXJuIGl9fSx7ImJpZy1yYXQvYWRkIjo4MH1dLDUzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKWVbcl09bih0W3JdKTtyZXR1cm4gZX07dmFyIG49dCgiYmlnLXJhdCIpfSx7ImJpZy1yYXQiOjgzfV0sNTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpZy1yYXQiKSxpPXQoImJpZy1yYXQvbXVsIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4oZSksYT10Lmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPTA7czxhOysrcylvW3NdPWkodFtzXSxyKTtyZXR1cm4gb319LHsiYmlnLXJhdCI6ODMsImJpZy1yYXQvbXVsIjo5Mn1dLDUzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaWctcmF0L3N1YiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPW4odFthXSxlW2FdKTtyZXR1cm4gaX19LHsiYmlnLXJhdC9zdWIiOjk0fV0sNTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbXBhcmUtY2VsbCIpLGk9dCgiY29tcGFyZS1vcmllbnRlZC1jZWxsIiksYT10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3Quc29ydChpKTtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG89MDtvPGU7KytvKXt2YXIgcz10W29dLGw9YShzKTtpZigwIT09bCl7aWYocj4wKXt2YXIgYz10W3ItMV07aWYoMD09PW4ocyxjKSYmYShjKSE9PWwpe3ItPTE7Y29udGludWV9fXRbcisrXT1zfX1yZXR1cm4gdC5sZW5ndGg9cix0fX0seyJjZWxsLW9yaWVudGF0aW9uIjoxMTcsImNvbXBhcmUtY2VsbCI6MTMzLCJjb21wYXJlLW9yaWVudGVkLWNlbGwiOjEzNH1dLDUzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJhcnJheS1ib3VuZHMiKSxpPXQoImNvbG9yLW5vcm1hbGl6ZSIpLGE9dCgidXBkYXRlLWRpZmYiKSxvPXQoInBpY2stYnktYWxpYXMiKSxzPXQoIm9iamVjdC1hc3NpZ24iKSxsPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxjPXQoInRvLWZsb2F0MzIiKSx1PWMuZmxvYXQzMixmPWMuZnJhY3QzMjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTplPXQ7ZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTtpZighKHQ9ZS5yZWdsKS5oYXNFeHRlbnNpb24oIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSl0aHJvdyBFcnJvcigicmVnbC1lcnJvcjJkOiBgQU5HTEVfaW5zdGFuY2VkX2FycmF5c2AgZXh0ZW5zaW9uIHNob3VsZCBiZSBlbmFibGVkIik7dmFyIHIsYyxwLGQsZyxtLHY9dC5fZ2wseT17Y29sb3I6ImJsYWNrIixjYXBTaXplOjUsbGluZVdpZHRoOjEsb3BhY2l0eToxLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxvZmZzZXQ6MCxjb3VudDowLGJvdW5kczpudWxsLHBvc2l0aW9uczpbXSxlcnJvcnM6W119LHg9W107cmV0dXJuIGQ9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLGM9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLHA9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLGc9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLG09dC5idWZmZXIoe3VzYWdlOiJzdGF0aWMiLHR5cGU6ImZsb2F0IixkYXRhOmh9KSxUKGUpLHI9dCh7dmVydDoiXG5cdFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5cdFx0YXR0cmlidXRlIHZlYzIgcG9zaXRpb24sIHBvc2l0aW9uRnJhY3Q7XG5cdFx0YXR0cmlidXRlIHZlYzQgZXJyb3I7XG5cdFx0YXR0cmlidXRlIHZlYzQgY29sb3I7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMiBkaXJlY3Rpb24sIGxpbmVPZmZzZXQsIGNhcE9mZnNldDtcblxuXHRcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblx0XHR1bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCwgY2FwU2l6ZTtcblx0XHR1bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG5cblx0XHR2YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5cdFx0dm9pZCBtYWluKCkge1xuXHRcdFx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xuXG5cdFx0XHR2ZWMyIHBpeGVsT2Zmc2V0ID0gbGluZVdpZHRoICogbGluZU9mZnNldCArIChjYXBTaXplICsgbGluZVdpZHRoKSAqIGNhcE9mZnNldDtcblxuXHRcdFx0dmVjMiBkeHkgPSAtc3RlcCguNSwgZGlyZWN0aW9uLnh5KSAqIGVycm9yLnh6ICsgc3RlcChkaXJlY3Rpb24ueHksIHZlYzIoLS41KSkgKiBlcnJvci55dztcblxuXHRcdFx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICsgZHh5O1xuXG5cdFx0XHR2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuXHRcdFx0XHQrIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcblx0XHRcdFx0KyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuXHRcdFx0XHQrIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuXHRcdFx0cG9zICs9IHBpeGVsT2Zmc2V0IC8gdmlld3BvcnQuenc7XG5cblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLCAxKTtcblx0XHR9XG5cdFx0IixmcmFnOiJcblx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cblx0XHR2YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5cdFx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG5cdFx0dm9pZCBtYWluKCkge1xuXHRcdFx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xuXHRcdFx0Z2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcblx0XHR9XG5cdFx0Iix1bmlmb3Jtczp7cmFuZ2U6dC5wcm9wKCJyYW5nZSIpLGxpbmVXaWR0aDp0LnByb3AoImxpbmVXaWR0aCIpLGNhcFNpemU6dC5wcm9wKCJjYXBTaXplIiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSxzY2FsZTp0LnByb3AoInNjYWxlIiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksc2NhbGVGcmFjdDp0LnByb3AoInNjYWxlRnJhY3QiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoInRyYW5zbGF0ZUZyYWN0Iiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19fSxhdHRyaWJ1dGVzOntjb2xvcjp7YnVmZmVyOmQsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDQqZS5vZmZzZXR9LGRpdmlzb3I6MX0scG9zaXRpb246e2J1ZmZlcjpjLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA4KmUub2Zmc2V0fSxkaXZpc29yOjF9LHBvc2l0aW9uRnJhY3Q6e2J1ZmZlcjpwLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA4KmUub2Zmc2V0fSxkaXZpc29yOjF9LGVycm9yOntidWZmZXI6ZyxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMTYqZS5vZmZzZXR9LGRpdmlzb3I6MX0sZGlyZWN0aW9uOntidWZmZXI6bSxzdHJpZGU6MjQsb2Zmc2V0OjB9LGxpbmVPZmZzZXQ6e2J1ZmZlcjptLHN0cmlkZToyNCxvZmZzZXQ6OH0sY2FwT2Zmc2V0OntidWZmZXI6bSxzdHJpZGU6MjQsb2Zmc2V0OjE2fX0scHJpbWl0aXZlOiJ0cmlhbmdsZXMiLGJsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDBdLGVxdWF0aW9uOntyZ2I6ImFkZCIsYWxwaGE6ImFkZCJ9LGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOiJvbmUgbWludXMgZHN0IGFscGhhIixkc3RBbHBoYToib25lIn19LGRlcHRoOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iiksc3RlbmNpbDohMSxpbnN0YW5jZXM6dC5wcm9wKCJjb3VudCIpLGNvdW50OmgubGVuZ3RofSkscyhiLHt1cGRhdGU6VCxkcmF3Ol8sZGVzdHJveTprLHJlZ2w6dCxnbDp2LGNhbnZhczp2LmNhbnZhcyxncm91cHM6eH0pLGI7ZnVuY3Rpb24gYih0KXt0P1QodCk6bnVsbD09PXQmJmsoKSxfKCl9ZnVuY3Rpb24gXyhlKXtpZigibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIHcoZSk7ZSYmIUFycmF5LmlzQXJyYXkoZSkmJihlPVtlXSksdC5fcmVmcmVzaCgpLHguZm9yRWFjaCgoZnVuY3Rpb24odCxyKXt0JiYoZSYmKGVbcl0/dC5kcmF3PSEwOnQuZHJhdz0hMSksdC5kcmF3P3cocik6dC5kcmF3PSEwKX0pKX1mdW5jdGlvbiB3KHQpeyJudW1iZXIiPT10eXBlb2YgdCYmKHQ9eFt0XSksbnVsbCE9dCYmdCYmdC5jb3VudCYmdC5jb2xvciYmdC5vcGFjaXR5JiZ0LnBvc2l0aW9ucyYmdC5wb3NpdGlvbnMubGVuZ3RoPjEmJih0LnNjYWxlUmF0aW89W3Quc2NhbGVbMF0qdC52aWV3cG9ydC53aWR0aCx0LnNjYWxlWzFdKnQudmlld3BvcnQuaGVpZ2h0XSxyKHQpLHQuYWZ0ZXImJnQuYWZ0ZXIodCkpfWZ1bmN0aW9uIFQodCl7aWYodCl7bnVsbCE9dC5sZW5ndGg/Im51bWJlciI9PXR5cGVvZiB0WzBdJiYodD1be3Bvc2l0aW9uczp0fV0pOkFycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIGU9MCxyPTA7aWYoYi5ncm91cHM9eD10Lm1hcCgoZnVuY3Rpb24odCxjKXt2YXIgdT14W2NdO3JldHVybiB0PygiZnVuY3Rpb24iPT10eXBlb2YgdD90PXthZnRlcjp0fToibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PXtwb3NpdGlvbnM6dH0pLHQ9byh0LHtjb2xvcjoiY29sb3IgY29sb3JzIGZpbGwiLGNhcFNpemU6ImNhcFNpemUgY2FwIGNhcHNpemUgY2FwLXNpemUiLGxpbmVXaWR0aDoibGluZVdpZHRoIGxpbmUtd2lkdGggd2lkdGggbGluZSB0aGlja25lc3MiLG9wYWNpdHk6Im9wYWNpdHkgYWxwaGEiLHJhbmdlOiJyYW5nZSBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCIsZXJyb3JzOiJlcnJvcnMgZXJyb3IiLHBvc2l0aW9uczoicG9zaXRpb25zIHBvc2l0aW9uIGRhdGEgcG9pbnRzIn0pLHV8fCh4W2NdPXU9e2lkOmMsc2NhbGU6bnVsbCx0cmFuc2xhdGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxkcmF3OiEwfSx0PXMoe30seSx0KSksYSh1LHQsW3tsaW5lV2lkdGg6ZnVuY3Rpb24odCl7cmV0dXJuLjUqK3R9LGNhcFNpemU6ZnVuY3Rpb24odCl7cmV0dXJuLjUqK3R9LG9wYWNpdHk6cGFyc2VGbG9hdCxlcnJvcnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bCh0KSxyKz10Lmxlbmd0aCx0fSxwb3NpdGlvbnM6ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1sKHQsImZsb2F0NjQiKSxyLmNvdW50PU1hdGguZmxvb3IodC5sZW5ndGgvMiksci5ib3VuZHM9bih0LDIpLHIub2Zmc2V0PWUsZSs9ci5jb3VudCx0fX0se2NvbG9yOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5jb3VudDtpZih0fHwodD0idHJhbnNwYXJlbnQiKSwhQXJyYXkuaXNBcnJheSh0KXx8Im51bWJlciI9PXR5cGVvZiB0WzBdKXt2YXIgbj10O3Q9QXJyYXkocik7Zm9yKHZhciBhPTA7YTxyO2ErKyl0W2FdPW59aWYodC5sZW5ndGg8cil0aHJvdyBFcnJvcigiTm90IGVub3VnaCBjb2xvcnMiKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoNCpyKSxzPTA7czxyO3MrKyl7dmFyIGw9aSh0W3NdLCJ1aW50OCIpO28uc2V0KGwsNCpzKX1yZXR1cm4gb30scmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuYm91bmRzO3JldHVybiB0fHwodD1uKSxlLnNjYWxlPVsxLyh0WzJdLXRbMF0pLDEvKHRbM10tdFsxXSldLGUudHJhbnNsYXRlPVstdFswXSwtdFsxXV0sZS5zY2FsZUZyYWN0PWYoZS5zY2FsZSksZS50cmFuc2xhdGVGcmFjdD1mKGUudHJhbnNsYXRlKSx0fSx2aWV3cG9ydDpmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9lPXt4OnRbMF0seTp0WzFdLHdpZHRoOnRbMl0tdFswXSxoZWlnaHQ6dFszXS10WzFdfTp0PyhlPXt4OnQueHx8dC5sZWZ0fHwwLHk6dC55fHx0LnRvcHx8MH0sdC5yaWdodD9lLndpZHRoPXQucmlnaHQtZS54OmUud2lkdGg9dC53fHx0LndpZHRofHwwLHQuYm90dG9tP2UuaGVpZ2h0PXQuYm90dG9tLWUueTplLmhlaWdodD10Lmh8fHQuaGVpZ2h0fHwwKTplPXt4OjAseTowLHdpZHRoOnYuZHJhd2luZ0J1ZmZlcldpZHRoLGhlaWdodDp2LmRyYXdpbmdCdWZmZXJIZWlnaHR9LGV9fV0pLHUpOnV9KSksZXx8cil7dmFyIGg9eC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCsoZT9lLmNvdW50OjApfSksMCksbT1uZXcgRmxvYXQ2NEFycmF5KDIqaCksXz1uZXcgVWludDhBcnJheSg0KmgpLHc9bmV3IEZsb2F0MzJBcnJheSg0KmgpO3guZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtpZih0KXt2YXIgcj10LnBvc2l0aW9ucyxuPXQuY291bnQsaT10Lm9mZnNldCxhPXQuY29sb3Isbz10LmVycm9ycztuJiYoXy5zZXQoYSw0KmkpLHcuc2V0KG8sNCppKSxtLnNldChyLDIqaSkpfX0pKSxjKHUobSkpLHAoZihtKSksZChfKSxnKHcpfX19ZnVuY3Rpb24gaygpe2MuZGVzdHJveSgpLHAuZGVzdHJveSgpLGQuZGVzdHJveSgpLGcuZGVzdHJveSgpLG0uZGVzdHJveSgpfX07dmFyIGg9W1sxLDAsMCwxLDAsMF0sWzEsMCwwLC0xLDAsMF0sWy0xLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLDEsMCwwXSxbMSwwLDAsMSwwLDBdLFsxLDAsLTEsMCwwLDFdLFsxLDAsLTEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLDFdLFsxLDAsLTEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsLTFdLFstMSwwLDEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsMV0sWy0xLDAsLTEsMCwwLDFdLFswLDEsMSwwLDAsMF0sWzAsMSwtMSwwLDAsMF0sWzAsLTEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwxLDEsMCwwLDBdLFswLC0xLDEsMCwwLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwtMSwtMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwxLDAsMSwxLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwxLC0xLDBdLFswLC0xLDAsLTEsMSwwXSxbMCwtMSwwLC0xLC0xLDBdLFswLC0xLDAsMSwtMSwwXSxbMCwtMSwwLDEsMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwxLC0xLDBdXX0seyJhcnJheS1ib3VuZHMiOjcwLCJjb2xvci1ub3JtYWxpemUiOjEyNSwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjQ0LCJvYmplY3QtYXNzaWduIjo0OTksInBpY2stYnktYWxpYXMiOjUxMSwidG8tZmxvYXQzMiI6NTc3LCJ1cGRhdGUtZGlmZiI6NTk5fV0sNTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5vcm1hbGl6ZSIpLGk9dCgiYXJyYXktYm91bmRzIiksYT10KCJvYmplY3QtYXNzaWduIiksbz10KCJnbHNsaWZ5Iikscz10KCJwaWNrLWJ5LWFsaWFzIiksbD10KCJmbGF0dGVuLXZlcnRleC1kYXRhIiksYz10KCJlYXJjdXQiKSx1PXQoImFycmF5LW5vcm1hbGl6ZSIpLGY9dCgidG8tZmxvYXQzMiIpLGg9Zi5mbG9hdDMyLHA9Zi5mcmFjdDMyLGQ9dCgiZXM2LXdlYWstbWFwIiksZz10KCJwYXJzZS1yZWN0Iik7ZnVuY3Rpb24gbSh0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG0pKXJldHVybiBuZXcgbSh0LGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlfHwoZT17fSksZS5yZWdsPXQpOmU9dCxlLmxlbmd0aCYmKGUucG9zaXRpb25zPWUpLCEodD1lLnJlZ2wpLmhhc0V4dGVuc2lvbigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXRocm93IEVycm9yKCJyZWdsLWVycm9yMmQ6IGBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzYCBleHRlbnNpb24gc2hvdWxkIGJlIGVuYWJsZWQiKTt0aGlzLmdsPXQuX2dsLHRoaXMucmVnbD10LHRoaXMucGFzc2VzPVtdLHRoaXMuc2hhZGVycz1tLnNoYWRlcnMuaGFzKHQpP20uc2hhZGVycy5nZXQodCk6bS5zaGFkZXJzLnNldCh0LG0uY3JlYXRlU2hhZGVycyh0KSkuZ2V0KHQpLHRoaXMudXBkYXRlKGUpfWUuZXhwb3J0cz1tLG0uZGFzaE11bHQ9MixtLm1heFBhdHRlcm5MZW5ndGg9MjU2LG0ucHJlY2lzaW9uVGhyZXNob2xkPTNlNixtLm1heFBvaW50cz0xZTQsbS5tYXhMaW5lcz0yMDQ4LG0uc2hhZGVycz1uZXcgZCxtLmNyZWF0ZVNoYWRlcnM9ZnVuY3Rpb24odCl7dmFyIGUscj10LmJ1ZmZlcih7dXNhZ2U6InN0YXRpYyIsdHlwZToiZmxvYXQiLGRhdGE6WzAsMSwwLDAsMSwxLDEsMF19KSxuPXtwcmltaXRpdmU6InRyaWFuZ2xlIHN0cmlwIixpbnN0YW5jZXM6dC5wcm9wKCJjb3VudCIpLGNvdW50OjQsb2Zmc2V0OjAsdW5pZm9ybXM6e21pdGVyTW9kZTpmdW5jdGlvbih0LGUpe3JldHVybiJyb3VuZCI9PT1lLmpvaW4/MjoxfSxtaXRlckxpbWl0OnQucHJvcCgibWl0ZXJMaW1pdCIpLHNjYWxlOnQucHJvcCgic2NhbGUiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSx0aGlja25lc3M6dC5wcm9wKCJ0aGlja25lc3MiKSxkYXNoUGF0dGVybjp0LnByb3AoImRhc2hUZXh0dXJlIiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSxwaXhlbFJhdGlvOnQuY29udGV4dCgicGl4ZWxSYXRpbyIpLGlkOnQucHJvcCgiaWQiKSxkYXNoU2l6ZTp0LnByb3AoImRhc2hMZW5ndGgiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX0sZGVwdGg6dC5wcm9wKCJkZXB0aCIpfSxibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwwXSxlcXVhdGlvbjp7cmdiOiJhZGQiLGFscGhhOiJhZGQifSxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToib25lIG1pbnVzIGRzdCBhbHBoYSIsZHN0QWxwaGE6Im9uZSJ9fSxkZXB0aDp7ZW5hYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIWUub3ZlcmxheX19LHN0ZW5jaWw6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKX0saT10KGEoe3ZlcnQ6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGFDb29yZCwgYkNvb3JkLCBhQ29vcmRGcmFjdCwgYkNvb3JkRnJhY3Q7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRW5kLCBsaW5lVG9wO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHRoaWNrbmVzcywgcGl4ZWxSYXRpbywgaWQsIGRlcHRoO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XG5cbnZlYzIgcHJvamVjdCh2ZWMyIHBvc2l0aW9uLCB2ZWMyIHBvc2l0aW9uRnJhY3QsIHZlYzIgc2NhbGUsIHZlYzIgc2NhbGVGcmFjdCwgdmVjMiB0cmFuc2xhdGUsIHZlYzIgdHJhbnNsYXRlRnJhY3QpIHtcblx0Ly8gdGhlIG9yZGVyIGlzIGltcG9ydGFudFxuXHRyZXR1cm4gcG9zaXRpb24gKiBzY2FsZSArIHRyYW5zbGF0ZVxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlICsgdHJhbnNsYXRlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uICogc2NhbGVGcmFjdFxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlRnJhY3Q7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgbGluZVN0YXJ0ID0gMS4gLSBsaW5lRW5kO1xuXHRmbG9hdCBsaW5lT2Zmc2V0ID0gbGluZVRvcCAqIDIuIC0gMS47XG5cblx0dmVjMiBkaWZmID0gKGJDb29yZCArIGJDb29yZEZyYWN0IC0gYUNvb3JkIC0gYUNvb3JkRnJhY3QpO1xuXHR0YW5nZW50ID0gbm9ybWFsaXplKGRpZmYgKiBzY2FsZSAqIHZpZXdwb3J0Lnp3KTtcblx0dmVjMiBub3JtYWwgPSB2ZWMyKC10YW5nZW50LnksIHRhbmdlbnQueCk7XG5cblx0dmVjMiBwb3NpdGlvbiA9IHByb2plY3QoYUNvb3JkLCBhQ29vcmRGcmFjdCwgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3QpICogbGluZVN0YXJ0XG5cdFx0KyBwcm9qZWN0KGJDb29yZCwgYkNvb3JkRnJhY3QsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0KSAqIGxpbmVFbmRcblxuXHRcdCsgdGhpY2tuZXNzICogbm9ybWFsICogLjUgKiBsaW5lT2Zmc2V0IC8gdmlld3BvcnQuenc7XG5cblx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XG5cblx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xufVxuIl0pLGZyYWc6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hQYXR0ZXJuO1xuXG51bmlmb3JtIGZsb2F0IGRhc2hTaXplLCBwaXhlbFJhdGlvLCB0aGlja25lc3MsIG9wYWNpdHksIGlkO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgYWxwaGEgPSAxLjtcblxuXHRmbG9hdCB0ID0gZnJhY3QoZG90KHRhbmdlbnQsIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoU2l6ZSkgKiAuNSArIC4yNTtcblx0ZmxvYXQgZGFzaCA9IHRleHR1cmUyRChkYXNoUGF0dGVybiwgdmVjMih0LCAuNSkpLnI7XG5cblx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xuXHRnbF9GcmFnQ29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHkgKiBkYXNoO1xufVxuIl0pLGF0dHJpYnV0ZXM6e2xpbmVFbmQ6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6MH0sbGluZVRvcDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDo0fSxhQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sYUNvb3JkRnJhY3Q6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uRnJhY3RCdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OCxkaXZpc29yOjF9LGJDb29yZEZyYWN0OntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkZyYWN0QnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sY29sb3I6e2J1ZmZlcjp0LnByb3AoImNvbG9yQnVmZmVyIiksc3RyaWRlOjQsb2Zmc2V0OjAsZGl2aXNvcjoxfX19LG4pKTt0cnl7ZT10KGEoe2N1bGw6e2VuYWJsZTohMCxmYWNlOiJiYWNrIn0sdmVydDpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgYUNvb3JkLCBiQ29vcmQsIG5leHRDb29yZCwgcHJldkNvb3JkO1xuYXR0cmlidXRlIHZlYzQgYUNvbG9yLCBiQ29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCB0cmFuc2xhdGU7XG51bmlmb3JtIGZsb2F0IHRoaWNrbmVzcywgcGl4ZWxSYXRpbywgaWQsIGRlcHRoO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xudW5pZm9ybSBmbG9hdCBtaXRlckxpbWl0LCBtaXRlck1vZGU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzQgc3RhcnRDdXRvZmYsIGVuZEN1dG9mZjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xudmFyeWluZyBmbG9hdCBlbmFibGVTdGFydE1pdGVyLCBlbmFibGVFbmRNaXRlcjtcblxuY29uc3QgZmxvYXQgUkVWRVJTRV9USFJFU0hPTEQgPSAtLjg3NTtcbmNvbnN0IGZsb2F0IE1JTl9ESUZGID0gMWUtNjtcblxuLy8gVE9ETzogcG9zc2libGUgb3B0aW1pemF0aW9uczogYXZvaWQgb3ZlcmNhbGN1bGF0aW5nIGFsbCBmb3IgdmVydGljZXMgYW5kIGNhbGMganVzdCBvbmUgaW5zdGVhZFxuLy8gVE9ETzogcHJlY2FsY3VsYXRlIGRvdCBwcm9kdWN0cywgbm9ybWFsaXplIHRoaW5ncyBiZWZvcmVoZWFkIGV0Yy5cbi8vIFRPRE86IHJlZmFjdG9yIHRvIHJlY3Rhbmd1bGFyIGFsZ29yaXRobVxuXG5mbG9hdCBkaXN0VG9MaW5lKHZlYzIgcCwgdmVjMiBhLCB2ZWMyIGIpIHtcblx0dmVjMiBkaWZmID0gYiAtIGE7XG5cdHZlYzIgcGVycCA9IG5vcm1hbGl6ZSh2ZWMyKC1kaWZmLnksIGRpZmYueCkpO1xuXHRyZXR1cm4gZG90KHAgLSBhLCBwZXJwKTtcbn1cblxuYm9vbCBpc05hTiggZmxvYXQgdmFsICl7XG4gIHJldHVybiAoIHZhbCA8IDAuMCB8fCAwLjAgPCB2YWwgfHwgdmFsID09IDAuMCApID8gZmFsc2UgOiB0cnVlO1xufVxuXG52b2lkIG1haW4oKSB7XG5cdHZlYzIgYUNvb3JkID0gYUNvb3JkLCBiQ29vcmQgPSBiQ29vcmQsIHByZXZDb29yZCA9IHByZXZDb29yZCwgbmV4dENvb3JkID0gbmV4dENvb3JkO1xuXG4gIHZlYzIgYWRqdXN0ZWRTY2FsZTtcbiAgYWRqdXN0ZWRTY2FsZS54ID0gKGFicyhzY2FsZS54KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueDtcbiAgYWRqdXN0ZWRTY2FsZS55ID0gKGFicyhzY2FsZS55KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueTtcblxuICB2ZWMyIHNjYWxlUmF0aW8gPSBhZGp1c3RlZFNjYWxlICogdmlld3BvcnQuenc7XG5cdHZlYzIgbm9ybWFsV2lkdGggPSB0aGlja25lc3MgLyBzY2FsZVJhdGlvO1xuXG5cdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcblx0ZmxvYXQgbGluZUJvdCA9IDEuIC0gbGluZVRvcDtcblxuXHRmcmFnQ29sb3IgPSAobGluZVN0YXJ0ICogYUNvbG9yICsgbGluZUVuZCAqIGJDb2xvcikgLyAyNTUuO1xuXG5cdGlmIChpc05hTihhQ29vcmQueCkgfHwgaXNOYU4oYUNvb3JkLnkpIHx8IGlzTmFOKGJDb29yZC54KSB8fCBpc05hTihiQ29vcmQueSkpIHJldHVybjtcblxuXHRpZiAoYUNvb3JkID09IHByZXZDb29yZCkgcHJldkNvb3JkID0gYUNvb3JkICsgbm9ybWFsaXplKGJDb29yZCAtIGFDb29yZCk7XG5cdGlmIChiQ29vcmQgPT0gbmV4dENvb3JkKSBuZXh0Q29vcmQgPSBiQ29vcmQgLSBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcblxuXHR2ZWMyIHByZXZEaWZmID0gYUNvb3JkIC0gcHJldkNvb3JkO1xuXHR2ZWMyIGN1cnJEaWZmID0gYkNvb3JkIC0gYUNvb3JkO1xuXHR2ZWMyIG5leHREaWZmID0gbmV4dENvb3JkIC0gYkNvb3JkO1xuXG5cdHZlYzIgcHJldlRhbmdlbnQgPSBub3JtYWxpemUocHJldkRpZmYgKiBzY2FsZVJhdGlvKTtcblx0dmVjMiBjdXJyVGFuZ2VudCA9IG5vcm1hbGl6ZShjdXJyRGlmZiAqIHNjYWxlUmF0aW8pO1xuXHR2ZWMyIG5leHRUYW5nZW50ID0gbm9ybWFsaXplKG5leHREaWZmICogc2NhbGVSYXRpbyk7XG5cblx0dmVjMiBwcmV2Tm9ybWFsID0gdmVjMigtcHJldlRhbmdlbnQueSwgcHJldlRhbmdlbnQueCk7XG5cdHZlYzIgY3Vyck5vcm1hbCA9IHZlYzIoLWN1cnJUYW5nZW50LnksIGN1cnJUYW5nZW50LngpO1xuXHR2ZWMyIG5leHROb3JtYWwgPSB2ZWMyKC1uZXh0VGFuZ2VudC55LCBuZXh0VGFuZ2VudC54KTtcblxuXHR2ZWMyIHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IG5vcm1hbGl6ZShwcmV2VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcblx0dmVjMiBlbmRKb2luRGlyZWN0aW9uID0gbm9ybWFsaXplKGN1cnJUYW5nZW50IC0gbmV4dFRhbmdlbnQpO1xuXG5cdC8vIGNvbGxhcHNlZC91bmlkaXJlY3Rpb25hbCBzZWdtZW50IGNhc2VzXG5cdC8vIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgbW9yZSBlbGVnYW50IHNvbHV0aW9uXG5cdHZlYzIgcHJldlRhbkRpZmYgPSBhYnMocHJldlRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdHZlYzIgbmV4dFRhbkRpZmYgPSBhYnMobmV4dFRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdGlmIChtYXgocHJldlRhbkRpZmYueCwgcHJldlRhbkRpZmYueSkgPCBNSU5fRElGRikge1xuXHRcdHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XG5cdH1cblx0aWYgKG1heChuZXh0VGFuRGlmZi54LCBuZXh0VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XG5cdFx0ZW5kSm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XG5cdH1cblx0aWYgKGFDb29yZCA9PSBiQ29vcmQpIHtcblx0XHRlbmRKb2luRGlyZWN0aW9uID0gc3RhcnRKb2luRGlyZWN0aW9uO1xuXHRcdGN1cnJOb3JtYWwgPSBwcmV2Tm9ybWFsO1xuXHRcdGN1cnJUYW5nZW50ID0gcHJldlRhbmdlbnQ7XG5cdH1cblxuXHR0YW5nZW50ID0gY3VyclRhbmdlbnQ7XG5cblx0Ly9jYWxjdWxhdGUgam9pbiBzaGlmdHMgcmVsYXRpdmUgdG8gbm9ybWFsc1xuXHRmbG9hdCBzdGFydEpvaW5TaGlmdCA9IGRvdChjdXJyTm9ybWFsLCBzdGFydEpvaW5EaXJlY3Rpb24pO1xuXHRmbG9hdCBlbmRKb2luU2hpZnQgPSBkb3QoY3Vyck5vcm1hbCwgZW5kSm9pbkRpcmVjdGlvbik7XG5cblx0ZmxvYXQgc3RhcnRNaXRlclJhdGlvID0gYWJzKDEuIC8gc3RhcnRKb2luU2hpZnQpO1xuXHRmbG9hdCBlbmRNaXRlclJhdGlvID0gYWJzKDEuIC8gZW5kSm9pblNoaWZ0KTtcblxuXHR2ZWMyIHN0YXJ0Sm9pbiA9IHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIHN0YXJ0TWl0ZXJSYXRpbztcblx0dmVjMiBlbmRKb2luID0gZW5kSm9pbkRpcmVjdGlvbiAqIGVuZE1pdGVyUmF0aW87XG5cblx0dmVjMiBzdGFydFRvcEpvaW4sIHN0YXJ0Qm90Sm9pbiwgZW5kVG9wSm9pbiwgZW5kQm90Sm9pbjtcblx0c3RhcnRUb3BKb2luID0gc2lnbihzdGFydEpvaW5TaGlmdCkgKiBzdGFydEpvaW4gKiAuNTtcblx0c3RhcnRCb3RKb2luID0gLXN0YXJ0VG9wSm9pbjtcblxuXHRlbmRUb3BKb2luID0gc2lnbihlbmRKb2luU2hpZnQpICogZW5kSm9pbiAqIC41O1xuXHRlbmRCb3RKb2luID0gLWVuZFRvcEpvaW47XG5cblx0dmVjMiBhVG9wQ29vcmQgPSBhQ29vcmQgKyBub3JtYWxXaWR0aCAqIHN0YXJ0VG9wSm9pbjtcblx0dmVjMiBiVG9wQ29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZFRvcEpvaW47XG5cdHZlYzIgYUJvdENvb3JkID0gYUNvb3JkICsgbm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW47XG5cdHZlYzIgYkJvdENvb3JkID0gYkNvb3JkICsgbm9ybWFsV2lkdGggKiBlbmRCb3RKb2luO1xuXG5cdC8vbWl0ZXIgYW50aS1jbGlwcGluZ1xuXHRmbG9hdCBiYUNsaXBwaW5nID0gZGlzdFRvTGluZShiQ29vcmQsIGFDb29yZCwgYUJvdENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSwgbm9ybWFsaXplKG5vcm1hbFdpZHRoLnl4ICogdmVjMigtc3RhcnRCb3RKb2luLnksIHN0YXJ0Qm90Sm9pbi54KSkpO1xuXHRmbG9hdCBhYkNsaXBwaW5nID0gZGlzdFRvTGluZShhQ29vcmQsIGJDb29yZCwgYlRvcENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW4pLCBub3JtYWxpemUobm9ybWFsV2lkdGgueXggKiB2ZWMyKC1lbmRCb3RKb2luLnksIGVuZEJvdEpvaW4ueCkpKTtcblxuXHQvL3ByZXZlbnQgY2xvc2UgdG8gcmV2ZXJzZSBkaXJlY3Rpb24gc3dpdGNoXG5cdGJvb2wgcHJldlJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIHByZXZUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBwcmV2Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKHByZXZEaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XG5cdGJvb2wgbmV4dFJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBuZXh0Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKG5leHREaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XG5cblx0aWYgKHByZXZSZXZlcnNlKSB7XG5cdFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcblx0XHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIG1pdGVyTGltaXQgKiAuNTtcblx0XHRmbG9hdCBub3JtYWxBZGp1c3QgPSAxLiAtIG1pbihtaXRlckxpbWl0IC8gc3RhcnRNaXRlclJhdGlvLCAxLik7XG5cdFx0YUJvdENvb3JkID0gYUNvb3JkICsgbWl0ZXJTaGlmdCAtIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHRcdGFUb3BDb29yZCA9IGFDb29yZCArIG1pdGVyU2hpZnQgKyBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcblx0fVxuXHRlbHNlIGlmICghbmV4dFJldmVyc2UgJiYgYmFDbGlwcGluZyA+IDAuICYmIGJhQ2xpcHBpbmcgPCBsZW5ndGgobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSkge1xuXHRcdC8vaGFuZGxlIG1pdGVyIGNsaXBwaW5nXG5cdFx0YlRvcENvb3JkIC09IG5vcm1hbFdpZHRoICogZW5kVG9wSm9pbjtcblx0XHRiVG9wQ29vcmQgKz0gbm9ybWFsaXplKGVuZFRvcEpvaW4gKiBub3JtYWxXaWR0aCkgKiBiYUNsaXBwaW5nO1xuXHR9XG5cblx0aWYgKG5leHRSZXZlcnNlKSB7XG5cdFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcblx0XHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIGVuZEpvaW5EaXJlY3Rpb24gKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0ZmxvYXQgbm9ybWFsQWRqdXN0ID0gMS4gLSBtaW4obWl0ZXJMaW1pdCAvIGVuZE1pdGVyUmF0aW8sIDEuKTtcblx0XHRiQm90Q29vcmQgPSBiQ29vcmQgKyBtaXRlclNoaWZ0IC0gbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdFx0YlRvcENvb3JkID0gYkNvb3JkICsgbWl0ZXJTaGlmdCArIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHR9XG5cdGVsc2UgaWYgKCFwcmV2UmV2ZXJzZSAmJiBhYkNsaXBwaW5nID4gMC4gJiYgYWJDbGlwcGluZyA8IGxlbmd0aChub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbikpIHtcblx0XHQvL2hhbmRsZSBtaXRlciBjbGlwcGluZ1xuXHRcdGFCb3RDb29yZCAtPSBub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbjtcblx0XHRhQm90Q29vcmQgKz0gbm9ybWFsaXplKHN0YXJ0Qm90Sm9pbiAqIG5vcm1hbFdpZHRoKSAqIGFiQ2xpcHBpbmc7XG5cdH1cblxuXHR2ZWMyIGFUb3BQb3NpdGlvbiA9IChhVG9wQ29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcblx0dmVjMiBhQm90UG9zaXRpb24gPSAoYUJvdENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cblx0dmVjMiBiVG9wUG9zaXRpb24gPSAoYlRvcENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cdHZlYzIgYkJvdFBvc2l0aW9uID0gKGJCb3RDb29yZCkgKiBhZGp1c3RlZFNjYWxlICsgdHJhbnNsYXRlO1xuXG5cdC8vcG9zaXRpb24gaXMgbm9ybWFsaXplZCAwLi4xIGNvb3JkIG9uIHRoZSBzY3JlZW5cblx0dmVjMiBwb3NpdGlvbiA9IChhVG9wUG9zaXRpb24gKiBsaW5lVG9wICsgYUJvdFBvc2l0aW9uICogbGluZUJvdCkgKiBsaW5lU3RhcnQgKyAoYlRvcFBvc2l0aW9uICogbGluZVRvcCArIGJCb3RQb3NpdGlvbiAqIGxpbmVCb3QpICogbGluZUVuZDtcblxuXHRzdGFydENvb3JkID0gYUNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cdGVuZENvb3JkID0gYkNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cblx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGVuYWJsZVN0YXJ0TWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpLCAuNSk7XG5cdGVuYWJsZUVuZE1pdGVyID0gc3RlcChkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSwgLjUpO1xuXG5cdC8vYmV2ZWwgbWl0ZXIgY3V0b2Zmc1xuXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogbWl0ZXJMaW1pdCAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0XHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcblx0XHRcdGVuZEN1dG9mZi56dyArPSB2ZWMyKC1lbmRKb2luRGlyZWN0aW9uLnksIGVuZEpvaW5EaXJlY3Rpb24ueCkgIC8gc2NhbGVSYXRpbztcblx0XHRcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xuXHRcdFx0ZW5kQ3V0b2ZmICs9IGVuZE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cdH1cblxuXHQvL3JvdW5kIG1pdGVyIGN1dG9mZnNcblx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogYWJzKGRvdChzdGFydEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBhYnMoZG90KGVuZEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0ZW5kQ3V0b2ZmID0gdmVjNChiQ29vcmQsIGJDb29yZCk7XG5cdFx0XHRlbmRDdXRvZmYuencgKz0gdmVjMigtZW5kSm9pbkRpcmVjdGlvbi55LCBlbmRKb2luRGlyZWN0aW9uLngpICAvIHNjYWxlUmF0aW87XG5cdFx0XHRlbmRDdXRvZmYgPSBlbmRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XG5cdFx0XHRlbmRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcblx0XHRcdGVuZEN1dG9mZiArPSBlbmRNaXRlcldpZHRoLnh5eHk7XG5cdFx0fVxuXHR9XG59XG4iXSksZnJhZzpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFBhdHRlcm47XG51bmlmb3JtIGZsb2F0IGRhc2hTaXplLCBwaXhlbFJhdGlvLCB0aGlja25lc3MsIG9wYWNpdHksIGlkLCBtaXRlck1vZGU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcbnZhcnlpbmcgdmVjNCBzdGFydEN1dG9mZiwgZW5kQ3V0b2ZmO1xudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xudmFyeWluZyBmbG9hdCBlbmFibGVTdGFydE1pdGVyLCBlbmFibGVFbmRNaXRlcjtcblxuZmxvYXQgZGlzdFRvTGluZSh2ZWMyIHAsIHZlYzIgYSwgdmVjMiBiKSB7XG5cdHZlYzIgZGlmZiA9IGIgLSBhO1xuXHR2ZWMyIHBlcnAgPSBub3JtYWxpemUodmVjMigtZGlmZi55LCBkaWZmLngpKTtcblx0cmV0dXJuIGRvdChwIC0gYSwgcGVycCk7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgYWxwaGEgPSAxLiwgZGlzdFRvU3RhcnQsIGRpc3RUb0VuZDtcblx0ZmxvYXQgY3V0b2ZmID0gdGhpY2tuZXNzICogLjU7XG5cblx0Ly9iZXZlbCBtaXRlclxuXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb1N0YXJ0ID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIHN0YXJ0Q3V0b2ZmLnh5LCBzdGFydEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvU3RhcnQgPCAtMS4pIHtcblx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YWxwaGEgKj0gbWluKG1heChkaXN0VG9TdGFydCArIDEuLCAwLiksIDEuKTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb0VuZCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBlbmRDdXRvZmYueHksIGVuZEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvRW5kIDwgLTEuKSB7XG5cdFx0XHRcdGRpc2NhcmQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGFscGhhICo9IG1pbihtYXgoZGlzdFRvRW5kICsgMS4sIDAuKSwgMS4pO1xuXHRcdH1cblx0fVxuXG5cdC8vIHJvdW5kIG1pdGVyXG5cdGVsc2UgaWYgKG1pdGVyTW9kZSA9PSAyLikge1xuXHRcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XG5cdFx0XHRkaXN0VG9TdGFydCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBzdGFydEN1dG9mZi54eSwgc3RhcnRDdXRvZmYuencpO1xuXHRcdFx0aWYgKGRpc3RUb1N0YXJ0IDwgMC4pIHtcblx0XHRcdFx0ZmxvYXQgcmFkaXVzID0gbGVuZ3RoKGdsX0ZyYWdDb29yZC54eSAtIHN0YXJ0Q29vcmQpO1xuXG5cdFx0XHRcdGlmKHJhZGl1cyA+IGN1dG9mZiArIC41KSB7XG5cdFx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhbHBoYSAtPSBzbW9vdGhzdGVwKGN1dG9mZiAtIC41LCBjdXRvZmYgKyAuNSwgcmFkaXVzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb0VuZCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBlbmRDdXRvZmYueHksIGVuZEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvRW5kIDwgMC4pIHtcblx0XHRcdFx0ZmxvYXQgcmFkaXVzID0gbGVuZ3RoKGdsX0ZyYWdDb29yZC54eSAtIGVuZENvb3JkKTtcblxuXHRcdFx0XHRpZihyYWRpdXMgPiBjdXRvZmYgKyAuNSkge1xuXHRcdFx0XHRcdGRpc2NhcmQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWxwaGEgLT0gc21vb3Roc3RlcChjdXRvZmYgLSAuNSwgY3V0b2ZmICsgLjUsIHJhZGl1cyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaFNpemUpICogLjUgKyAuMjU7XG5cdGZsb2F0IGRhc2ggPSB0ZXh0dXJlMkQoZGFzaFBhdHRlcm4sIHZlYzIodCwgLjUpKS5yO1xuXG5cdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5ICogZGFzaDtcbn1cbiJdKSxhdHRyaWJ1dGVzOntsaW5lRW5kOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjB9LGxpbmVUb3A6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6NH0sYUNvbG9yOntidWZmZXI6dC5wcm9wKCJjb2xvckJ1ZmZlciIpLHN0cmlkZTo0LG9mZnNldDowLGRpdmlzb3I6MX0sYkNvbG9yOntidWZmZXI6dC5wcm9wKCJjb2xvckJ1ZmZlciIpLHN0cmlkZTo0LG9mZnNldDo0LGRpdmlzb3I6MX0scHJldkNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDowLGRpdmlzb3I6MX0sYUNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDoxNixkaXZpc29yOjF9LG5leHRDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MjQsZGl2aXNvcjoxfX19LG4pKX1jYXRjaCh0KXtlPWl9cmV0dXJue2ZpbGw6dCh7cHJpbWl0aXZlOiJ0cmlhbmdsZSIsZWxlbWVudHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50cmlhbmdsZXN9LG9mZnNldDowLHZlcnQ6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uLCBwb3NpdGlvbkZyYWN0O1xuXG51bmlmb3JtIHZlYzQgY29sb3I7XG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW8sIGlkO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5jb25zdCBmbG9hdCBNQVhfTElORVMgPSAyNTYuO1xuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGRlcHRoID0gKE1BWF9MSU5FUyAtIDQuIC0gaWQpIC8gKE1BWF9MSU5FUyk7XG5cblx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICogc2NhbGUgKyB0cmFuc2xhdGVcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbiAqIHNjYWxlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZUZyYWN0O1xuXG5cdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1Ljtcblx0ZnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcbn1cbiJdKSxmcmFnOm8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn1cbiJdKSx1bmlmb3Jtczp7c2NhbGU6dC5wcm9wKCJzY2FsZSIpLGNvbG9yOnQucHJvcCgiZmlsbCIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLHRyYW5zbGF0ZTp0LnByb3AoInRyYW5zbGF0ZSIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5IikscGl4ZWxSYXRpbzp0LmNvbnRleHQoInBpeGVsUmF0aW8iKSxpZDp0LnByb3AoImlkIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19fSxhdHRyaWJ1dGVzOntwb3NpdGlvbjp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OH0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25GcmFjdEJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4fX0sYmxlbmQ6bi5ibGVuZCxkZXB0aDp7ZW5hYmxlOiExfSxzY2lzc29yOm4uc2Npc3NvcixzdGVuY2lsOm4uc3RlbmNpbCx2aWV3cG9ydDpuLnZpZXdwb3J0fSkscmVjdDppLG1pdGVyOmV9fSxtLmRlZmF1bHRzPXtkYXNoZXM6bnVsbCxqb2luOiJtaXRlciIsbWl0ZXJMaW1pdDoxLHRoaWNrbmVzczoxMCxjYXA6InNxdWFyZSIsY29sb3I6ImJsYWNrIixvcGFjaXR5OjEsb3ZlcmxheTohMSx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwsY2xvc2U6ITEsZmlsbDpudWxsfSxtLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtlLmxlbmd0aCYmKHQ9dGhpcykudXBkYXRlLmFwcGx5KHQsZSksdGhpcy5kcmF3KCl9LG0ucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO3JldHVybihlLmxlbmd0aD9lOnRoaXMucGFzc2VzKS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3ZhciBuO2lmKGUmJkFycmF5LmlzQXJyYXkoZSkpcmV0dXJuKG49dCkuZHJhdy5hcHBseShuLGUpOyJudW1iZXIiPT10eXBlb2YgZSYmKGU9dC5wYXNzZXNbZV0pLGUmJmUuY291bnQ+MSYmZS5vcGFjaXR5JiYodC5yZWdsLl9yZWZyZXNoKCksZS5maWxsJiZlLnRyaWFuZ2xlcyYmZS50cmlhbmdsZXMubGVuZ3RoPjImJnQuc2hhZGVycy5maWxsKGUpLGUudGhpY2tuZXNzJiYoZS5zY2FsZVswXSplLnZpZXdwb3J0LndpZHRoPm0ucHJlY2lzaW9uVGhyZXNob2xkfHxlLnNjYWxlWzFdKmUudmlld3BvcnQuaGVpZ2h0Pm0ucHJlY2lzaW9uVGhyZXNob2xkfHwicmVjdCI9PT1lLmpvaW58fCFlLmpvaW4mJihlLnRoaWNrbmVzczw9Mnx8ZS5jb3VudD49bS5tYXhQb2ludHMpP3Quc2hhZGVycy5yZWN0KGUpOnQuc2hhZGVycy5taXRlcihlKSkpfSkpLHRoaXN9LG0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQpe251bGwhPXQubGVuZ3RoPyJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9W3twb3NpdGlvbnM6dH1dKTpBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciByPXRoaXMucmVnbCxvPXRoaXMuZ2w7aWYodC5mb3JFYWNoKChmdW5jdGlvbih0LGYpe3ZhciBkPWUucGFzc2VzW2ZdO2lmKHZvaWQgMCE9PXQpaWYobnVsbCE9PXQpe2lmKCJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9e3Bvc2l0aW9uczp0fSksdD1zKHQse3Bvc2l0aW9uczoicG9zaXRpb25zIHBvaW50cyBkYXRhIGNvb3JkcyIsdGhpY2tuZXNzOiJ0aGlja25lc3MgbGluZVdpZHRoIGxpbmVXaWR0aHMgbGluZS13aWR0aCBsaW5ld2lkdGggd2lkdGggc3Ryb2tlLXdpZHRoIHN0cm9rZXdpZHRoIHN0cm9rZVdpZHRoIixqb2luOiJsaW5lSm9pbiBsaW5lam9pbiBqb2luIHR5cGUgbW9kZSIsbWl0ZXJMaW1pdDoibWl0ZXJsaW1pdCBtaXRlckxpbWl0IixkYXNoZXM6ImRhc2ggZGFzaGVzIGRhc2hhcnJheSBkYXNoLWFycmF5IGRhc2hBcnJheSIsY29sb3I6ImNvbG9yIGNvbG91ciBzdHJva2UgY29sb3JzIGNvbG91cnMgc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yIixmaWxsOiJmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIixvcGFjaXR5OiJhbHBoYSBvcGFjaXR5IixvdmVybGF5OiJvdmVybGF5IGNyZWFzZSBvdmVybGFwIGludGVyc2VjdCIsY2xvc2U6ImNsb3NlZCBjbG9zZSBjbG9zZWQtcGF0aCBjbG9zZVBhdGgiLHJhbmdlOiJyYW5nZSBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCIsaG9sZToiaG9sZXMgaG9sZSBob2xsb3cifSksZHx8KGUucGFzc2VzW2ZdPWQ9e2lkOmYsc2NhbGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlOm51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxjb3VudDowLGhvbGU6W10sZGVwdGg6MCxkYXNoTGVuZ3RoOjEsZGFzaFRleHR1cmU6ci50ZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6bmV3IFVpbnQ4QXJyYXkoWzI1NV0pLHdpZHRoOjEsaGVpZ2h0OjEsbWFnOiJsaW5lYXIiLG1pbjoibGluZWFyIn0pLGNvbG9yQnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxwb3NpdGlvbkJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5fSkscG9zaXRpb25GcmFjdEJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5fSl9LHQ9YSh7fSxtLmRlZmF1bHRzLHQpKSxudWxsIT10LnRoaWNrbmVzcyYmKGQudGhpY2tuZXNzPXBhcnNlRmxvYXQodC50aGlja25lc3MpKSxudWxsIT10Lm9wYWNpdHkmJihkLm9wYWNpdHk9cGFyc2VGbG9hdCh0Lm9wYWNpdHkpKSxudWxsIT10Lm1pdGVyTGltaXQmJihkLm1pdGVyTGltaXQ9cGFyc2VGbG9hdCh0Lm1pdGVyTGltaXQpKSxudWxsIT10Lm92ZXJsYXkmJihkLm92ZXJsYXk9ISF0Lm92ZXJsYXksZjxtLm1heExpbmVzJiYoZC5kZXB0aD0yKihtLm1heExpbmVzLTEtZiVtLm1heExpbmVzKS9tLm1heExpbmVzLTEpKSxudWxsIT10LmpvaW4mJihkLmpvaW49dC5qb2luKSxudWxsIT10LmhvbGUmJihkLmhvbGU9dC5ob2xlKSxudWxsIT10LmZpbGwmJihkLmZpbGw9dC5maWxsP24odC5maWxsLCJ1aW50OCIpOm51bGwpLG51bGwhPXQudmlld3BvcnQmJihkLnZpZXdwb3J0PWcodC52aWV3cG9ydCkpLGQudmlld3BvcnR8fChkLnZpZXdwb3J0PWcoW28uZHJhd2luZ0J1ZmZlcldpZHRoLG8uZHJhd2luZ0J1ZmZlckhlaWdodF0pKSxudWxsIT10LmNsb3NlJiYoZC5jbG9zZT10LmNsb3NlKSxudWxsPT09dC5wb3NpdGlvbnMmJih0LnBvc2l0aW9ucz1bXSksdC5wb3NpdGlvbnMpe3ZhciB2LHk7aWYodC5wb3NpdGlvbnMueCYmdC5wb3NpdGlvbnMueSl7dmFyIHg9dC5wb3NpdGlvbnMueCxiPXQucG9zaXRpb25zLnk7eT1kLmNvdW50PU1hdGgubWF4KHgubGVuZ3RoLGIubGVuZ3RoKSx2PW5ldyBGbG9hdDY0QXJyYXkoMip5KTtmb3IodmFyIF89MDtfPHk7XysrKXZbMipfXT14W19dLHZbMipfKzFdPWJbX119ZWxzZSB2PWwodC5wb3NpdGlvbnMsImZsb2F0NjQiKSx5PWQuY291bnQ9TWF0aC5mbG9vcih2Lmxlbmd0aC8yKTt2YXIgdz1kLmJvdW5kcz1pKHYsMik7aWYoZC5maWxsKXtmb3IodmFyIFQ9W10saz17fSxNPTAsQT0wLFM9MCxFPWQuY291bnQ7QTxFO0ErKyl7dmFyIEM9dlsyKkFdLEw9dlsyKkErMV07aXNOYU4oQyl8fGlzTmFOKEwpfHxudWxsPT1DfHxudWxsPT1MPyhDPXZbMipNXSxMPXZbMipNKzFdLGtbQV09TSk6TT1BLFRbUysrXT1DLFRbUysrXT1MfWZvcih2YXIgST1jKFQsZC5ob2xlfHxbXSksUD0wLHo9SS5sZW5ndGg7UDx6O1ArKyludWxsIT1rW0lbUF1dJiYoSVtQXT1rW0lbUF1dKTtkLnRyaWFuZ2xlcz1JfXZhciBPPW5ldyBGbG9hdDY0QXJyYXkodik7dShPLDIsdyk7dmFyIEQ9bmV3IEZsb2F0NjRBcnJheSgyKnkrNik7ZC5jbG9zZT92WzBdPT09dlsyKnktMl0mJnZbMV09PT12WzIqeS0xXT8oRFswXT1PWzIqeS00XSxEWzFdPU9bMip5LTNdKTooRFswXT1PWzIqeS0yXSxEWzFdPU9bMip5LTFdKTooRFswXT1PWzBdLERbMV09T1sxXSksRC5zZXQoTywyKSxkLmNsb3NlP3ZbMF09PT12WzIqeS0yXSYmdlsxXT09PXZbMip5LTFdPyhEWzIqeSsyXT1PWzJdLERbMip5KzNdPU9bM10sZC5jb3VudC09MSk6KERbMip5KzJdPU9bMF0sRFsyKnkrM109T1sxXSxEWzIqeSs0XT1PWzJdLERbMip5KzVdPU9bM10pOihEWzIqeSsyXT1PWzIqeS0yXSxEWzIqeSszXT1PWzIqeS0xXSxEWzIqeSs0XT1PWzIqeS0yXSxEWzIqeSs1XT1PWzIqeS0xXSksZC5wb3NpdGlvbkJ1ZmZlcihoKEQpKSxkLnBvc2l0aW9uRnJhY3RCdWZmZXIocChEKSl9aWYodC5yYW5nZT9kLnJhbmdlPXQucmFuZ2U6ZC5yYW5nZXx8KGQucmFuZ2U9ZC5ib3VuZHMpLCh0LnJhbmdlfHx0LnBvc2l0aW9ucykmJmQuY291bnQpe3ZhciBSPWQuYm91bmRzLEY9UlsyXS1SWzBdLEI9UlszXS1SWzFdLE49ZC5yYW5nZVsyXS1kLnJhbmdlWzBdLGo9ZC5yYW5nZVszXS1kLnJhbmdlWzFdO2Quc2NhbGU9W0YvTixCL2pdLGQudHJhbnNsYXRlPVstZC5yYW5nZVswXS9OK1JbMF0vTnx8MCwtZC5yYW5nZVsxXS9qK1JbMV0vanx8MF0sZC5zY2FsZUZyYWN0PXAoZC5zY2FsZSksZC50cmFuc2xhdGVGcmFjdD1wKGQudHJhbnNsYXRlKX1pZih0LmRhc2hlcyl7dmFyIFUsVj0wO2lmKCF0LmRhc2hlc3x8dC5kYXNoZXMubGVuZ3RoPDIpVj0xLFU9bmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdKTtlbHNle1Y9MDtmb3IodmFyIHE9MDtxPHQuZGFzaGVzLmxlbmd0aDsrK3EpVis9dC5kYXNoZXNbcV07VT1uZXcgVWludDhBcnJheShWKm0uZGFzaE11bHQpO2Zvcih2YXIgSD0wLEc9MjU1LFk9MDtZPDI7WSsrKWZvcih2YXIgVz0wO1c8dC5kYXNoZXMubGVuZ3RoOysrVyl7Zm9yKHZhciBYPTAsWj10LmRhc2hlc1tXXSptLmRhc2hNdWx0Ki41O1g8WjsrK1gpVVtIKytdPUc7R149MjU1fX1kLmRhc2hMZW5ndGg9VixkLmRhc2hUZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6VSx3aWR0aDpVLmxlbmd0aCxoZWlnaHQ6MSxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSwwLDApfWlmKHQuY29sb3Ipe3ZhciBKPWQuY291bnQsSz10LmNvbG9yO0t8fChLPSJ0cmFuc3BhcmVudCIpO3ZhciBRPW5ldyBVaW50OEFycmF5KDQqSis0KTtpZihBcnJheS5pc0FycmF5KEspJiYibnVtYmVyIiE9dHlwZW9mIEtbMF0pe2Zvcih2YXIgJD0wOyQ8SjskKyspe3ZhciB0dD1uKEtbJF0sInVpbnQ4Iik7US5zZXQodHQsNCokKX1RLnNldChuKEtbMF0sInVpbnQ4IiksNCpKKX1lbHNlIGZvcih2YXIgZXQ9bihLLCJ1aW50OCIpLHJ0PTA7cnQ8SisxO3J0KyspUS5zZXQoZXQsNCpydCk7ZC5jb2xvckJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4IixkYXRhOlF9KX19ZWxzZSBlLnBhc3Nlc1tmXT1udWxsfSkpLHQubGVuZ3RoPHRoaXMucGFzc2VzLmxlbmd0aCl7Zm9yKHZhciBmPXQubGVuZ3RoO2Y8dGhpcy5wYXNzZXMubGVuZ3RoO2YrKyl7dmFyIGQ9dGhpcy5wYXNzZXNbZl07ZCYmKGQuY29sb3JCdWZmZXIuZGVzdHJveSgpLGQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLGQuZGFzaFRleHR1cmUuZGVzdHJveSgpKX10aGlzLnBhc3Nlcy5sZW5ndGg9dC5sZW5ndGh9Zm9yKHZhciB2PVtdLHk9MDt5PHRoaXMucGFzc2VzLmxlbmd0aDt5KyspbnVsbCE9PXRoaXMucGFzc2VzW3ldJiZ2LnB1c2godGhpcy5wYXNzZXNbeV0pO3JldHVybiB0aGlzLnBhc3Nlcz12LHRoaXN9fSxtLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFzc2VzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY29sb3JCdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLHQuZGFzaFRleHR1cmUuZGVzdHJveSgpfSkpLHRoaXMucGFzc2VzLmxlbmd0aD0wLHRoaXN9fSx7ImFycmF5LWJvdW5kcyI6NzAsImFycmF5LW5vcm1hbGl6ZSI6NzEsImNvbG9yLW5vcm1hbGl6ZSI6MTI1LGVhcmN1dDoxNzcsImVzNi13ZWFrLW1hcCI6MjMzLCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyNDQsZ2xzbGlmeTo1MzYsIm9iamVjdC1hc3NpZ24iOjQ5OSwicGFyc2UtcmVjdCI6NTA0LCJwaWNrLWJ5LWFsaWFzIjo1MTEsInRvLWZsb2F0MzIiOjU3N31dLDUzNjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNTddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNTd9XSw1Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFN5bWJvbHx8IShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKSlyZXR1cm47dmFyIHI9W10sbj0hMCxpPSExLGE9dm9pZCAwO3RyeXtmb3IodmFyIG8scz10W1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKG8udmFsdWUpLCFlfHxyLmxlbmd0aCE9PWUpO249ITApO31jYXRjaCh0KXtpPSEwLGE9dH1maW5hbGx5e3RyeXtufHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgYX19cmV0dXJuIHJ9KHQsZSl8fGEodCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIG8odCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGEodCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYSh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP28odCxlKTp2b2lkIDB9fWZ1bmN0aW9uIG8odCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn12YXIgcz10KCJjb2xvci1ub3JtYWxpemUiKSxsPXQoImFycmF5LWJvdW5kcyIpLGM9dCgiY29sb3ItaWQiKSx1PXQoIkBwbG90bHkvcG9pbnQtY2x1c3RlciIpLGY9dCgib2JqZWN0LWFzc2lnbiIpLGg9dCgiZ2xzbGlmeSIpLHA9dCgicGljay1ieS1hbGlhcyIpLGQ9dCgidXBkYXRlLWRpZmYiKSxnPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxtPXQoImlzLWlleHBsb3JlciIpLHY9dCgidG8tZmxvYXQzMiIpLHk9dCgicGFyc2UtcmVjdCIpLHg9YjtmdW5jdGlvbiBiKHQsZSl7dmFyIHI9dGhpcztpZighKHRoaXMgaW5zdGFuY2VvZiBiKSlyZXR1cm4gbmV3IGIodCxlKTsiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTooZT10LHQ9bnVsbCksZSYmZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTt2YXIgbixpPSh0PWUucmVnbCkuX2dsLGE9W107dGhpcy50b29NYW55Q29sb3JzPW0sbj10LnRleHR1cmUoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMTAyMCksd2lkdGg6MjU1LGhlaWdodDoxLHR5cGU6InVpbnQ4Iixmb3JtYXQ6InJnYmEiLHdyYXBTOiJjbGFtcCIsd3JhcFQ6ImNsYW1wIixtYWc6Im5lYXJlc3QiLG1pbjoibmVhcmVzdCJ9KSxmKHRoaXMse3JlZ2w6dCxnbDppLGdyb3VwczpbXSxtYXJrZXJDYWNoZTpbbnVsbF0sbWFya2VyVGV4dHVyZXM6W251bGxdLHBhbGV0dGU6YSxwYWxldHRlSWRzOnt9LHBhbGV0dGVUZXh0dXJlOm4sbWF4Q29sb3JzOjI1NSxtYXhTaXplOjEwMCxjYW52YXM6aS5jYW52YXN9KSx0aGlzLnVwZGF0ZShlKTt2YXIgbz17dW5pZm9ybXM6e2NvbnN0UG9pbnRTaXplOiEhZS5jb25zdFBvaW50U2l6ZSxwaXhlbFJhdGlvOnQuY29udGV4dCgicGl4ZWxSYXRpbyIpLHBhbGV0dGU6bixwYWxldHRlU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybltyLnRvb01hbnlDb2xvcnM/MDoyNTUsbi5oZWlnaHRdfSxzY2FsZTp0LnByb3AoInNjYWxlIiksc2NhbGVGcmFjdDp0LnByb3AoInNjYWxlRnJhY3QiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoInRyYW5zbGF0ZUZyYWN0Iiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSxtYXJrZXI6dC5wcm9wKCJtYXJrZXJUZXh0dXJlIil9LGF0dHJpYnV0ZXM6e3g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS54QXR0cnx8e2J1ZmZlcjplLnBvc2l0aW9uQnVmZmVyLHN0cmlkZTo4LG9mZnNldDowfX0seTpmdW5jdGlvbih0LGUpe3JldHVybiBlLnlBdHRyfHx7YnVmZmVyOmUucG9zaXRpb25CdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjR9fSx4RnJhY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS54QXR0cj97Y29uc3RhbnQ6WzAsMF19OntidWZmZXI6ZS5wb3NpdGlvbkZyYWN0QnVmZmVyLHN0cmlkZTo4LG9mZnNldDowfX0seUZyYWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueUF0dHI/e2NvbnN0YW50OlswLDBdfTp7YnVmZmVyOmUucG9zaXRpb25GcmFjdEJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6NH19LHNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zaXplLmxlbmd0aD97YnVmZmVyOmUuc2l6ZUJ1ZmZlcixzdHJpZGU6MixvZmZzZXQ6MH06e2NvbnN0YW50OltNYXRoLnJvdW5kKDI1NSplLnNpemUvci5tYXhTaXplKV19fSxib3JkZXJTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYm9yZGVyU2l6ZS5sZW5ndGg/e2J1ZmZlcjplLnNpemVCdWZmZXIsc3RyaWRlOjIsb2Zmc2V0OjF9Ontjb25zdGFudDpbTWF0aC5yb3VuZCgyNTUqZS5ib3JkZXJTaXplL3IubWF4U2l6ZSldfX0sY29sb3JJZDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmNvbG9yLmxlbmd0aD97YnVmZmVyOmUuY29sb3JCdWZmZXIsc3RyaWRlOnIudG9vTWFueUNvbG9ycz84OjQsb2Zmc2V0OjB9Ontjb25zdGFudDpyLnRvb01hbnlDb2xvcnM/YS5zbGljZSg0KmUuY29sb3IsNCplLmNvbG9yKzQpOltlLmNvbG9yXX19LGJvcmRlckNvbG9ySWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ib3JkZXJDb2xvci5sZW5ndGg/e2J1ZmZlcjplLmNvbG9yQnVmZmVyLHN0cmlkZTpyLnRvb01hbnlDb2xvcnM/ODo0LG9mZnNldDpyLnRvb01hbnlDb2xvcnM/NDoyfTp7Y29uc3RhbnQ6ci50b29NYW55Q29sb3JzP2Euc2xpY2UoNCplLmJvcmRlckNvbG9yLDQqZS5ib3JkZXJDb2xvcis0KTpbZS5ib3JkZXJDb2xvcl19fSxpc0FjdGl2ZTpmdW5jdGlvbih0LGUpe3JldHVybiEwPT09ZS5hY3RpdmF0aW9uP3tjb25zdGFudDpbMV19OmUuYWN0aXZhdGlvbj9lLmFjdGl2YXRpb246e2NvbnN0YW50OlswXX19fSxibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwxXSxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToib25lIG1pbnVzIGRzdCBhbHBoYSIsZHN0QWxwaGE6Im9uZSJ9fSxzY2lzc29yOntlbmFibGU6ITAsYm94OnQucHJvcCgidmlld3BvcnQiKX0sdmlld3BvcnQ6dC5wcm9wKCJ2aWV3cG9ydCIpLHN0ZW5jaWw6e2VuYWJsZTohMX0sZGVwdGg6e2VuYWJsZTohMX0sZWxlbWVudHM6dC5wcm9wKCJlbGVtZW50cyIpLGNvdW50OnQucHJvcCgiY291bnQiKSxvZmZzZXQ6dC5wcm9wKCJvZmZzZXQiKSxwcmltaXRpdmU6InBvaW50cyJ9LHM9Zih7fSxvKTtzLmZyYWc9aChbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcbnZhcnlpbmcgZmxvYXQgZnJhZ1dpZHRoLCBmcmFnQm9yZGVyQ29sb3JMZXZlbCwgZnJhZ0NvbG9yTGV2ZWw7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIG1hcmtlcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCB4LCBmbG9hdCB5KSB7XG4gIHJldHVybiAxLjAgLyAoMS4wICsgZXhwKDUwLjAqKHggLSB5KSkpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IGRpc3QgPSB0ZXh0dXJlMkQobWFya2VyLCBnbF9Qb2ludENvb3JkKS5yLCBkZWx0YSA9IGZyYWdXaWR0aDtcblxuICAvLyBtYXgtZGlzdGFuY2UgYWxwaGFcbiAgaWYgKGRpc3QgPCAwLjAwMykgZGlzY2FyZDtcblxuICAvLyBudWxsLWJvcmRlciBjYXNlXG4gIGlmIChmcmFnQm9yZGVyQ29sb3JMZXZlbCA9PSBmcmFnQ29sb3JMZXZlbCB8fCBmcmFnQm9yZGVyQ29sb3IuYSA9PSAwLikge1xuICAgIGZsb2F0IGNvbG9yQW10ID0gc21vb3Roc3RlcCguNSAtIGRlbHRhLCAuNSArIGRlbHRhLCBkaXN0KTtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGZyYWdDb2xvci5yZ2IsIGNvbG9yQW10ICogZnJhZ0NvbG9yLmEgKiBvcGFjaXR5KTtcbiAgfVxuICBlbHNlIHtcbiAgICBmbG9hdCBib3JkZXJDb2xvckFtdCA9IHNtb290aHN0ZXAoZnJhZ0JvcmRlckNvbG9yTGV2ZWwgLSBkZWx0YSwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwgKyBkZWx0YSwgZGlzdCk7XG4gICAgZmxvYXQgY29sb3JBbXQgPSBzbW9vdGhzdGVwKGZyYWdDb2xvckxldmVsIC0gZGVsdGEsIGZyYWdDb2xvckxldmVsICsgZGVsdGEsIGRpc3QpO1xuXG4gICAgdmVjNCBjb2xvciA9IGZyYWdCb3JkZXJDb2xvcjtcbiAgICBjb2xvci5hICo9IGJvcmRlckNvbG9yQW10O1xuICAgIGNvbG9yID0gbWl4KGNvbG9yLCBmcmFnQ29sb3IsIGNvbG9yQW10KTtcbiAgICBjb2xvci5hICo9IG9wYWNpdHk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbiAgfVxuXG59XG4iXSkscy52ZXJ0PWgoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgZmxvYXQgeCwgeSwgeEZyYWN0LCB5RnJhY3Q7XG5hdHRyaWJ1dGUgZmxvYXQgc2l6ZSwgYm9yZGVyU2l6ZTtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9ySWQsIGJvcmRlckNvbG9ySWQ7XG5hdHRyaWJ1dGUgZmxvYXQgaXNBY3RpdmU7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCwgcGFsZXR0ZVNpemU7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIGJvb2wgY29uc3RQb2ludFNpemU7XG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xuXG5jb25zdCBmbG9hdCBtYXhTaXplID0gMTAwLjtcbmNvbnN0IGZsb2F0IGJvcmRlckxldmVsID0gLjU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcbnZhcnlpbmcgZmxvYXQgZnJhZ1BvaW50U2l6ZSwgZnJhZ0JvcmRlclJhZGl1cywgZnJhZ1dpZHRoLCBmcmFnQm9yZGVyQ29sb3JMZXZlbCwgZnJhZ0NvbG9yTGV2ZWw7XG5cbmZsb2F0IHBvaW50U2l6ZVNjYWxlID0gKGNvbnN0UG9pbnRTaXplKSA/IDIuIDogcGl4ZWxSYXRpbztcblxuYm9vbCBpc0RpcmVjdCA9IChwYWxldHRlU2l6ZS54IDwgMS4pO1xuXG52ZWM0IGdldENvbG9yKHZlYzQgaWQpIHtcbiAgcmV0dXJuIGlzRGlyZWN0ID8gaWQgLyAyNTUuIDogdGV4dHVyZTJEKHBhbGV0dGUsXG4gICAgdmVjMihcbiAgICAgIChpZC54ICsgLjUpIC8gcGFsZXR0ZVNpemUueCxcbiAgICAgIChpZC55ICsgLjUpIC8gcGFsZXR0ZVNpemUueVxuICAgIClcbiAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAvLyBpZ25vcmUgaW5hY3RpdmUgcG9pbnRzXG4gIGlmIChpc0FjdGl2ZSA9PSAwLikgcmV0dXJuO1xuXG4gIHZlYzIgcG9zaXRpb24gPSB2ZWMyKHgsIHkpO1xuICB2ZWMyIHBvc2l0aW9uRnJhY3QgPSB2ZWMyKHhGcmFjdCwgeUZyYWN0KTtcblxuICB2ZWM0IGNvbG9yID0gZ2V0Q29sb3IoY29sb3JJZCk7XG4gIHZlYzQgYm9yZGVyQ29sb3IgPSBnZXRDb2xvcihib3JkZXJDb2xvcklkKTtcblxuICBmbG9hdCBzaXplID0gc2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuICBmbG9hdCBib3JkZXJTaXplID0gYm9yZGVyU2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuXG4gIGdsX1BvaW50U2l6ZSA9IDIuICogc2l6ZSAqIHBvaW50U2l6ZVNjYWxlO1xuICBmcmFnUG9pbnRTaXplID0gc2l6ZSAqIHBpeGVsUmF0aW87XG5cbiAgdmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAuLCAxLik7XG5cbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yO1xuICBmcmFnV2lkdGggPSAxLiAvIGdsX1BvaW50U2l6ZTtcblxuICBmcmFnQm9yZGVyQ29sb3JMZXZlbCA9IGNsYW1wKGJvcmRlckxldmVsIC0gYm9yZGVyTGV2ZWwgKiBib3JkZXJTaXplIC8gc2l6ZSwgMC4sIDEuKTtcbiAgZnJhZ0NvbG9yTGV2ZWwgPSBjbGFtcChib3JkZXJMZXZlbCArICgxLiAtIGJvcmRlckxldmVsKSAqIGJvcmRlclNpemUgLyBzaXplLCAwLiwgMS4pO1xufSJdKSx0aGlzLmRyYXdNYXJrZXI9dChzKTt2YXIgbD1mKHt9LG8pO2wuZnJhZz1oKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xuXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIGZsb2F0IGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aDtcblxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0IHgpIHtcblx0ZmxvYXQgdDtcblx0dCA9IGNsYW1wKCh4IC0gZWRnZTApIC8gKGVkZ2UxIC0gZWRnZTApLCAwLjAsIDEuMCk7XG5cdHJldHVybiB0ICogdCAqICgzLjAgLSAyLjAgKiB0KTtcbn1cblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCByYWRpdXMsIGFscGhhID0gMS4wLCBkZWx0YSA9IGZyYWdXaWR0aDtcblxuXHRyYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG5cblx0aWYgKHJhZGl1cyA+IDEuMCArIGRlbHRhKSB7XG5cdFx0ZGlzY2FyZDtcblx0fVxuXG5cdGFscGhhIC09IHNtb290aHN0ZXAoMS4wIC0gZGVsdGEsIDEuMCArIGRlbHRhLCByYWRpdXMpO1xuXG5cdGZsb2F0IGJvcmRlclJhZGl1cyA9IGZyYWdCb3JkZXJSYWRpdXM7XG5cdGZsb2F0IHJhdGlvID0gc21vb3Roc3RlcChib3JkZXJSYWRpdXMgLSBkZWx0YSwgYm9yZGVyUmFkaXVzICsgZGVsdGEsIHJhZGl1cyk7XG5cdHZlYzQgY29sb3IgPSBtaXgoZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3IsIHJhdGlvKTtcblx0Y29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHk7XG5cdGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pLGwudmVydD1oKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIGJvb2wgY29uc3RQb2ludFNpemU7XG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xudW5pZm9ybSB2ZWMyIHBhbGV0dGVTaXplO1xuXG5jb25zdCBmbG9hdCBtYXhTaXplID0gMTAwLjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XG5cbmZsb2F0IHBvaW50U2l6ZVNjYWxlID0gKGNvbnN0UG9pbnRTaXplKSA/IDIuIDogcGl4ZWxSYXRpbztcblxuYm9vbCBpc0RpcmVjdCA9IChwYWxldHRlU2l6ZS54IDwgMS4pO1xuXG52ZWM0IGdldENvbG9yKHZlYzQgaWQpIHtcbiAgcmV0dXJuIGlzRGlyZWN0ID8gaWQgLyAyNTUuIDogdGV4dHVyZTJEKHBhbGV0dGUsXG4gICAgdmVjMihcbiAgICAgIChpZC54ICsgLjUpIC8gcGFsZXR0ZVNpemUueCxcbiAgICAgIChpZC55ICsgLjUpIC8gcGFsZXR0ZVNpemUueVxuICAgIClcbiAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAvLyBpZ25vcmUgaW5hY3RpdmUgcG9pbnRzXG4gIGlmIChpc0FjdGl2ZSA9PSAwLikgcmV0dXJuO1xuXG4gIHZlYzIgcG9zaXRpb24gPSB2ZWMyKHgsIHkpO1xuICB2ZWMyIHBvc2l0aW9uRnJhY3QgPSB2ZWMyKHhGcmFjdCwgeUZyYWN0KTtcblxuICB2ZWM0IGNvbG9yID0gZ2V0Q29sb3IoY29sb3JJZCk7XG4gIHZlYzQgYm9yZGVyQ29sb3IgPSBnZXRDb2xvcihib3JkZXJDb2xvcklkKTtcblxuICBmbG9hdCBzaXplID0gc2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuICBmbG9hdCBib3JkZXJTaXplID0gYm9yZGVyU2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuXG4gIGdsX1BvaW50U2l6ZSA9IChzaXplICsgYm9yZGVyU2l6ZSkgKiBwb2ludFNpemVTY2FsZTtcblxuICB2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXG4gICAgICArIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMC4sIDEuKTtcblxuICBmcmFnQm9yZGVyUmFkaXVzID0gMS4gLSAyLiAqIGJvcmRlclNpemUgLyAoc2l6ZSArIGJvcmRlclNpemUpO1xuICBmcmFnQ29sb3IgPSBjb2xvcjtcbiAgZnJhZ0JvcmRlckNvbG9yID0gYm9yZGVyQ29sb3IuYSA9PSAwLiB8fCBib3JkZXJTaXplID09IDAuID8gdmVjNChjb2xvci5yZ2IsIDAuKSA6IGJvcmRlckNvbG9yO1xuICBmcmFnV2lkdGggPSAxLiAvIGdsX1BvaW50U2l6ZTtcbn1cbiJdKSxtJiYobC5mcmFnPWwuZnJhZy5yZXBsYWNlKCJzbW9vdGhzdGVwIiwic21vb3RoU3RlcCIpLHMuZnJhZz1zLmZyYWcucmVwbGFjZSgic21vb3Roc3RlcCIsInNtb290aFN0ZXAiKSksdGhpcy5kcmF3Q2lyY2xlPXQobCl9Yi5kZWZhdWx0cz17Y29sb3I6ImJsYWNrIixib3JkZXJDb2xvcjoidHJhbnNwYXJlbnQiLGJvcmRlclNpemU6MCxzaXplOjEyLG9wYWNpdHk6MSxtYXJrZXI6dm9pZCAwLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxwaXhlbFNpemU6bnVsbCxjb3VudDowLG9mZnNldDowLGJvdW5kczpudWxsLHBvc2l0aW9uczpbXSxzbmFwOjFlNH0sYi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnRoaXMudXBkYXRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLmRyYXcoKSx0aGlzfSxiLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuZ3JvdXBzO2lmKDE9PT1yLmxlbmd0aCYmQXJyYXkuaXNBcnJheShyWzBdKSYmKG51bGw9PT1yWzBdWzBdfHxBcnJheS5pc0FycmF5KHJbMF1bMF0pKSYmKHI9clswXSksdGhpcy5yZWdsLl9yZWZyZXNoKCksci5sZW5ndGgpZm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspdGhpcy5kcmF3SXRlbShhLHJbYV0pO2Vsc2UgaS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3QuZHJhd0l0ZW0ocil9KSk7cmV0dXJuIHRoaXN9LGIucHJvdG90eXBlLmRyYXdJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ncm91cHMsbj1yW3RdO2lmKCJudW1iZXIiPT10eXBlb2YgZSYmKHQ9ZSxuPXJbZV0sZT1udWxsKSxuJiZuLmNvdW50JiZuLm9wYWNpdHkpe24uYWN0aXZhdGlvblswXSYmdGhpcy5kcmF3Q2lyY2xlKHRoaXMuZ2V0TWFya2VyRHJhd09wdGlvbnMoMCxuLGUpKTtmb3IodmFyIGE9W10sbz0xO288bi5hY3RpdmF0aW9uLmxlbmd0aDtvKyspbi5hY3RpdmF0aW9uW29dJiYoITA9PT1uLmFjdGl2YXRpb25bb118fG4uYWN0aXZhdGlvbltvXS5kYXRhLmxlbmd0aCkmJmEucHVzaC5hcHBseShhLGkodGhpcy5nZXRNYXJrZXJEcmF3T3B0aW9ucyhvLG4sZSkpKTthLmxlbmd0aCYmdGhpcy5kcmF3TWFya2VyKGEpfX0sYi5wcm90b3R5cGUuZ2V0TWFya2VyRHJhd09wdGlvbnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUucmFuZ2UsYT1lLnRyZWUsbz1lLnZpZXdwb3J0LHM9ZS5hY3RpdmF0aW9uLGw9ZS5zZWxlY3Rpb25CdWZmZXIsYz1lLmNvdW50O3RoaXMucmVnbDtpZighYSlyZXR1cm4gcj9bZih7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpzW3RdLGNvdW50OnIubGVuZ3RoLGVsZW1lbnRzOnIsb2Zmc2V0OjB9KV06W2Yoe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246c1t0XSxvZmZzZXQ6MH0pXTt2YXIgdT1bXSxoPWEucmFuZ2UoaSx7bG9kOiEwLHB4OlsoaVsyXS1pWzBdKS9vLndpZHRoLChpWzNdLWlbMV0pL28uaGVpZ2h0XX0pO2lmKHIpe2Zvcih2YXIgcD1zW3RdLmRhdGEsZD1uZXcgVWludDhBcnJheShjKSxnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciBtPXJbZ107ZFttXT1wP3BbbV06MX1sLnN1YmRhdGEoZCl9Zm9yKHZhciB2PWgubGVuZ3RoO3YtLTspe3ZhciB5PW4oaFt2XSwyKSx4PXlbMF0sYj15WzFdO3UucHVzaChmKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnI/bDpzW3RdLG9mZnNldDp4LGNvdW50OmIteH0pKX1yZXR1cm4gdX0sYi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO2lmKHIubGVuZ3RoKXsxPT09ci5sZW5ndGgmJkFycmF5LmlzQXJyYXkoclswXSkmJihyPXJbMF0pO3ZhciBpPXRoaXMuZ3JvdXBzLGE9dGhpcy5nbCxvPXRoaXMucmVnbCxzPXRoaXMubWF4U2l6ZSxjPXRoaXMubWF4Q29sb3JzLGg9dGhpcy5wYWxldHRlO3RoaXMuZ3JvdXBzPWk9ci5tYXAoKGZ1bmN0aW9uKGUscil7dmFyIG49aVtyXTtpZih2b2lkIDA9PT1lKXJldHVybiBuO251bGw9PT1lP2U9e3Bvc2l0aW9uczpudWxsfToiZnVuY3Rpb24iPT10eXBlb2YgZT9lPXtvbmRyYXc6ZX06Im51bWJlciI9PXR5cGVvZiBlWzBdJiYoZT17cG9zaXRpb25zOmV9KSxudWxsPT09KGU9cChlLHtwb3NpdGlvbnM6InBvc2l0aW9ucyBkYXRhIHBvaW50cyIsc25hcDoic25hcCBjbHVzdGVyIGxvZCB0cmVlIixzaXplOiJzaXplcyBzaXplIHJhZGl1cyIsYm9yZGVyU2l6ZToiYm9yZGVyU2l6ZXMgYm9yZGVyU2l6ZSBib3JkZXItc2l6ZSBib3JkZXJzaXplIGJvcmRlcldpZHRoIGJvcmRlcldpZHRocyBib3JkZXItd2lkdGggYm9yZGVyd2lkdGggc3Ryb2tlLXdpZHRoIHN0cm9rZVdpZHRoIHN0cm9rZXdpZHRoIG91dGxpbmUiLGNvbG9yOiJjb2xvcnMgY29sb3IgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciIsYm9yZGVyQ29sb3I6ImJvcmRlckNvbG9ycyBib3JkZXJDb2xvciBzdHJva2Ugc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yIixtYXJrZXI6Im1hcmtlcnMgbWFya2VyIHNoYXBlIixyYW5nZToicmFuZ2UgZGF0YUJveCBkYXRhYm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld1BvcnQgdmlld0JveCB2aWV3Ym94IixvcGFjaXR5OiJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSIsYm91bmRzOiJib3VuZCBib3VuZHMgYm91bmRhcmllcyBsaW1pdHMiLHRvb01hbnlDb2xvcnM6InRvb01hbnlDb2xvcnMgcGFsZXR0ZSBwYWxldHRlTW9kZSBvcHRpbWl6ZVBhbGV0dGUgZW5hYmxlUGFsZXR0ZSJ9KSkucG9zaXRpb25zJiYoZS5wb3NpdGlvbnM9W10pLG51bGwhPWUudG9vTWFueUNvbG9ycyYmKHQudG9vTWFueUNvbG9ycz1lLnRvb01hbnlDb2xvcnMpLG58fChpW3JdPW49e2lkOnIsc2NhbGU6bnVsbCx0cmFuc2xhdGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxhY3RpdmF0aW9uOltdLHNlbGVjdGlvbkJ1ZmZlcjpvLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToic3RyZWFtIix0eXBlOiJ1aW50OCJ9KSxzaXplQnVmZmVyOm8uYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCJ9KSxjb2xvckJ1ZmZlcjpvLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgifSkscG9zaXRpb25CdWZmZXI6by5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0In0pLHBvc2l0aW9uRnJhY3RCdWZmZXI6by5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0In0pfSxlPWYoe30sYi5kZWZhdWx0cyxlKSksZS5wb3NpdGlvbnMmJiEoIm1hcmtlciJpbiBlKSYmKGUubWFya2VyPW4ubWFya2VyLGRlbGV0ZSBuLm1hcmtlciksZS5tYXJrZXImJiEoInBvc2l0aW9ucyJpbiBlKSYmKGUucG9zaXRpb25zPW4ucG9zaXRpb25zLGRlbGV0ZSBuLnBvc2l0aW9ucyk7dmFyIG09MCx4PTA7aWYoZChuLGUsW3tzbmFwOiEwLHNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9Yi5kZWZhdWx0cy5zaXplKSxtKz10JiZ0Lmxlbmd0aD8xOjAsdH0sYm9yZGVyU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10JiYodD1iLmRlZmF1bHRzLmJvcmRlclNpemUpLG0rPXQmJnQubGVuZ3RoPzE6MCx0fSxvcGFjaXR5OnBhcnNlRmxvYXQsY29sb3I6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnVsbD09ZSYmKGU9Yi5kZWZhdWx0cy5jb2xvciksZT10LnVwZGF0ZUNvbG9yKGUpLHgrKyxlfSxib3JkZXJDb2xvcjpmdW5jdGlvbihlLHIpe3JldHVybiBudWxsPT1lJiYoZT1iLmRlZmF1bHRzLmJvcmRlckNvbG9yKSxlPXQudXBkYXRlQ29sb3IoZSkseCsrLGV9LGJvdW5kczpmdW5jdGlvbih0LGUscil7cmV0dXJuInJhbmdlImluIHJ8fChyLnJhbmdlPW51bGwpLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5zbmFwLGk9ZS5wb3NpdGlvbkJ1ZmZlcixhPWUucG9zaXRpb25GcmFjdEJ1ZmZlcixzPWUuc2VsZWN0aW9uQnVmZmVyO2lmKHQueHx8dC55KXJldHVybiB0LngubGVuZ3RoP2UueEF0dHI9e2J1ZmZlcjpvLmJ1ZmZlcih0LngpLG9mZnNldDowLHN0cmlkZTo0LGNvdW50OnQueC5sZW5ndGh9OmUueEF0dHI9e2J1ZmZlcjp0LnguYnVmZmVyLG9mZnNldDo0KnQueC5vZmZzZXR8fDAsc3RyaWRlOjQqKHQueC5zdHJpZGV8fDEpLGNvdW50OnQueC5jb3VudH0sdC55Lmxlbmd0aD9lLnlBdHRyPXtidWZmZXI6by5idWZmZXIodC55KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LnkubGVuZ3RofTplLnlBdHRyPXtidWZmZXI6dC55LmJ1ZmZlcixvZmZzZXQ6NCp0Lnkub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnkuc3RyaWRlfHwxKSxjb3VudDp0LnkuY291bnR9LGUuY291bnQ9TWF0aC5tYXgoZS54QXR0ci5jb3VudCxlLnlBdHRyLmNvdW50KSx0O3Q9Zyh0LCJmbG9hdDY0Iik7dmFyIGM9ZS5jb3VudD1NYXRoLmZsb29yKHQubGVuZ3RoLzIpLGY9ZS5ib3VuZHM9Yz9sKHQsMik6bnVsbDtpZihyLnJhbmdlfHxlLnJhbmdlfHwoZGVsZXRlIGUucmFuZ2Usci5yYW5nZT1mKSxyLm1hcmtlcnx8ZS5tYXJrZXJ8fChkZWxldGUgZS5tYXJrZXIsci5tYXJrZXI9bnVsbCksbiYmKCEwPT09bnx8Yz5uKT9lLnRyZWU9dSh0LHtib3VuZHM6Zn0pOm4mJm4ubGVuZ3RoJiYoZS50cmVlPW4pLGUudHJlZSl7dmFyIGg9e3ByaW1pdGl2ZToicG9pbnRzIix1c2FnZToic3RhdGljIixkYXRhOmUudHJlZSx0eXBlOiJ1aW50MzIifTtlLmVsZW1lbnRzP2UuZWxlbWVudHMoaCk6ZS5lbGVtZW50cz1vLmVsZW1lbnRzKGgpfXJldHVybiBpKHtkYXRhOnYuZmxvYXQodCksdXNhZ2U6ImR5bmFtaWMifSksYSh7ZGF0YTp2LmZyYWN0KHQpLHVzYWdlOiJkeW5hbWljIn0pLHMoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoYyksdHlwZToidWludDgiLHVzYWdlOiJzdHJlYW0ifSksdH19LHttYXJrZXI6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXIuYWN0aXZhdGlvbjtpZihpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSkpLGkubGVuZ3RoPTAsZSYmIm51bWJlciIhPXR5cGVvZiBlWzBdKXtmb3IodmFyIGE9W10scz0wLGw9TWF0aC5taW4oZS5sZW5ndGgsci5jb3VudCk7czxsO3MrKyl7dmFyIGM9dC5hZGRNYXJrZXIoZVtzXSk7YVtjXXx8KGFbY109bmV3IFVpbnQ4QXJyYXkoci5jb3VudCkpLGFbY11bc109MX1mb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKylpZihhW3VdKXt2YXIgZj17ZGF0YTphW3VdLHR5cGU6InVpbnQ4Iix1c2FnZToic3RhdGljIn07aVt1XT9pW3VdKGYpOmlbdV09by5idWZmZXIoZiksaVt1XS5kYXRhPWFbdV19fWVsc2V7aVt0LmFkZE1hcmtlcihlKV09ITB9cmV0dXJuIGV9LHJhbmdlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmJvdW5kcztpZihuKXJldHVybiB0fHwodD1uKSxlLnNjYWxlPVsxLyh0WzJdLXRbMF0pLDEvKHRbM10tdFsxXSldLGUudHJhbnNsYXRlPVstdFswXSwtdFsxXV0sZS5zY2FsZUZyYWN0PXYuZnJhY3QoZS5zY2FsZSksZS50cmFuc2xhdGVGcmFjdD12LmZyYWN0KGUudHJhbnNsYXRlKSx0fSx2aWV3cG9ydDpmdW5jdGlvbih0KXtyZXR1cm4geSh0fHxbYS5kcmF3aW5nQnVmZmVyV2lkdGgsYS5kcmF3aW5nQnVmZmVySGVpZ2h0XSl9fV0pLG0pe3ZhciBfPW4sdz1fLmNvdW50LFQ9Xy5zaXplLGs9Xy5ib3JkZXJTaXplLE09Xy5zaXplQnVmZmVyLEE9bmV3IFVpbnQ4QXJyYXkoMip3KTtpZihULmxlbmd0aHx8ay5sZW5ndGgpZm9yKHZhciBTPTA7Uzx3O1MrKylBWzIqU109TWF0aC5yb3VuZCgyNTUqKG51bGw9PVRbU10/VDpUW1NdKS9zKSxBWzIqUysxXT1NYXRoLnJvdW5kKDI1NSoobnVsbD09a1tTXT9rOmtbU10pL3MpO00oe2RhdGE6QSx1c2FnZToiZHluYW1pYyJ9KX1pZih4KXt2YXIgRSxDPW4sTD1DLmNvdW50LEk9Qy5jb2xvcixQPUMuYm9yZGVyQ29sb3Isej1DLmNvbG9yQnVmZmVyO2lmKHQudG9vTWFueUNvbG9ycyl7aWYoSS5sZW5ndGh8fFAubGVuZ3RoKXtFPW5ldyBVaW50OEFycmF5KDgqTCk7Zm9yKHZhciBPPTA7TzxMO08rKyl7dmFyIEQ9SVtPXTtFWzgqT109aFs0KkRdLEVbOCpPKzFdPWhbNCpEKzFdLEVbOCpPKzJdPWhbNCpEKzJdLEVbOCpPKzNdPWhbNCpEKzNdO3ZhciBSPVBbT107RVs4Kk8rNF09aFs0KlJdLEVbOCpPKzVdPWhbNCpSKzFdLEVbOCpPKzZdPWhbNCpSKzJdLEVbOCpPKzddPWhbNCpSKzNdfX19ZWxzZSBpZihJLmxlbmd0aHx8UC5sZW5ndGgpe0U9bmV3IFVpbnQ4QXJyYXkoNCpMKzIpO2Zvcih2YXIgRj0wO0Y8TDtGKyspbnVsbCE9SVtGXSYmKEVbNCpGXT1JW0ZdJWMsRVs0KkYrMV09TWF0aC5mbG9vcihJW0ZdL2MpKSxudWxsIT1QW0ZdJiYoRVs0KkYrMl09UFtGXSVjLEVbNCpGKzNdPU1hdGguZmxvb3IoUFtGXS9jKSl9eih7ZGF0YTpFfHxuZXcgVWludDhBcnJheSgwKSx0eXBlOiJ1aW50OCIsdXNhZ2U6ImR5bmFtaWMifSl9cmV0dXJuIG59KSl9fSxiLnByb3RvdHlwZS5hZGRNYXJrZXI9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLm1hcmtlclRleHR1cmVzLG49dGhpcy5yZWdsLGk9dGhpcy5tYXJrZXJDYWNoZSxhPW51bGw9PXQ/MDppLmluZGV4T2YodCk7aWYoYT49MClyZXR1cm4gYTtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KWU9dDtlbHNle2U9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgbz0wLHM9dC5sZW5ndGg7bzxzO28rKyllW29dPTI1NSp0W29dfXZhciBsPU1hdGguZmxvb3IoTWF0aC5zcXJ0KGUubGVuZ3RoKSk7cmV0dXJuIGE9ci5sZW5ndGgsaS5wdXNoKHQpLHIucHVzaChuLnRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTplLHJhZGl1czpsLG1hZzoibGluZWFyIixtaW46ImxpbmVhciJ9KSksYX0sYi5wcm90b3R5cGUudXBkYXRlQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYWxldHRlSWRzLHI9dGhpcy5wYWxldHRlLG49dGhpcy5tYXhDb2xvcnM7QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgaT1bXTtpZigibnVtYmVyIj09dHlwZW9mIHRbMF0pe3ZhciBhPVtdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKz00KWEucHVzaCh0LnNsaWNlKG8sbys0KSk7ZWxzZSBmb3IodmFyIGw9MDtsPHQubGVuZ3RoO2wrPTQpYS5wdXNoKHQuc3ViYXJyYXkobCxsKzQpKTt0PWF9Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBmPXRbdV07Zj1zKGYsInVpbnQ4Iik7dmFyIGg9YyhmLCExKTtpZihudWxsPT1lW2hdKXt2YXIgcD1yLmxlbmd0aDtlW2hdPU1hdGguZmxvb3IocC80KSxyW3BdPWZbMF0scltwKzFdPWZbMV0scltwKzJdPWZbMl0scltwKzNdPWZbM119aVt1XT1lW2hdfXJldHVybiF0aGlzLnRvb01hbnlDb2xvcnMmJnIubGVuZ3RoPjQqbiYmKHRoaXMudG9vTWFueUNvbG9ycz0hMCksdGhpcy51cGRhdGVQYWxldHRlKHIpLDE9PT1pLmxlbmd0aD9pWzBdOml9LGIucHJvdG90eXBlLnVwZGF0ZVBhbGV0dGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMudG9vTWFueUNvbG9ycyl7dmFyIGU9dGhpcy5tYXhDb2xvcnMscj10aGlzLnBhbGV0dGVUZXh0dXJlLG49TWF0aC5jZWlsKC4yNSp0Lmxlbmd0aC9lKTtpZihuPjEpZm9yKHZhciBpPS4yNSoodD10LnNsaWNlKCkpLmxlbmd0aCVlO2k8biplO2krKyl0LnB1c2goMCwwLDAsMCk7ci5oZWlnaHQ8biYmci5yZXNpemUoZSxuKSxyLnN1YmltYWdlKHt3aWR0aDpNYXRoLm1pbiguMjUqdC5sZW5ndGgsZSksaGVpZ2h0Om4sZGF0YTp0fSwwLDApfX0sYi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3Vwcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNpemVCdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25GcmFjdEJ1ZmZlci5kZXN0cm95KCksdC5jb2xvckJ1ZmZlci5kZXN0cm95KCksdC5hY3RpdmF0aW9uLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSkpLHQuc2VsZWN0aW9uQnVmZmVyLmRlc3Ryb3koKSx0LmVsZW1lbnRzJiZ0LmVsZW1lbnRzLmRlc3Ryb3koKX0pKSx0aGlzLmdyb3Vwcy5sZW5ndGg9MCx0aGlzLnBhbGV0dGVUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLm1hcmtlclRleHR1cmVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSkpLHRoaXN9O3ZhciBfPXQoIm9iamVjdC1hc3NpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgeCh0LGUpLG49ci5yZW5kZXIuYmluZChyKTtyZXR1cm4gXyhuLHtyZW5kZXI6bix1cGRhdGU6ci51cGRhdGUuYmluZChyKSxkcmF3OnIuZHJhdy5iaW5kKHIpLGRlc3Ryb3k6ci5kZXN0cm95LmJpbmQocikscmVnbDpyLnJlZ2wsZ2w6ci5nbCxjYW52YXM6ci5nbC5jYW52YXMsZ3JvdXBzOnIuZ3JvdXBzLG1hcmtlcnM6ci5tYXJrZXJDYWNoZSxwYWxldHRlOnIucGFsZXR0ZX0pLG59fSx7IkBwbG90bHkvcG9pbnQtY2x1c3RlciI6NTcsImFycmF5LWJvdW5kcyI6NzAsImNvbG9yLWlkIjoxMjMsImNvbG9yLW5vcm1hbGl6ZSI6MTI1LCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyNDQsZ2xzbGlmeTo1MzgsImlzLWlleHBsb3JlciI6NDY2LCJvYmplY3QtYXNzaWduIjo0OTksInBhcnNlLXJlY3QiOjUwNCwicGljay1ieS1hbGlhcyI6NTExLCJ0by1mbG9hdDMyIjo1NzcsInVwZGF0ZS1kaWZmIjo1OTl9XSw1Mzg6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjU3XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjU3fV0sNTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtc2NhdHRlcjJkIiksaT10KCJwaWNrLWJ5LWFsaWFzIiksYT10KCJhcnJheS1ib3VuZHMiKSxvPXQoInJhZiIpLHM9dCgiYXJyYXktcmFuZ2UiKSxsPXQoInBhcnNlLXJlY3QiKSxjPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKTtmdW5jdGlvbiB1KHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdSkpcmV0dXJuIG5ldyB1KHQsZSk7dGhpcy50cmFjZXM9W10sdGhpcy5wYXNzZXM9e30sdGhpcy5yZWdsPXQsdGhpcy5zY2F0dGVyPW4odCksdGhpcy5jYW52YXM9dGhpcy5zY2F0dGVyLmNhbnZhc31mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4obnVsbCE9dC5pZD90LmlkOnQpPDwxNnwoMjU1JmUpPDw4fDI1NSZyfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuLGksYSxvLHM9dFtlXSxsPXRbcl07cmV0dXJuIHMubGVuZ3RoPjI/KHNbMF0sc1syXSxuPXNbMV0saT1zWzNdKTpzLmxlbmd0aD8obj1zWzBdLGk9c1sxXSk6KHMueCxuPXMueSxzLngrcy53aWR0aCxpPXMueStzLmhlaWdodCksbC5sZW5ndGg+Mj8oYT1sWzBdLG89bFsyXSxsWzFdLGxbM10pOmwubGVuZ3RoPyhhPWxbMF0sbz1sWzFdKTooYT1sLngsbC55LG89bC54K2wud2lkdGgsbC55K2wuaGVpZ2h0KSxbYSxuLG8saV19ZnVuY3Rpb24gcCh0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuW3QsdCx0LHRdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bdFswXSx0WzFdLHRbMF0sdFsxXV07dmFyIGU9bCh0KTtyZXR1cm5bZS54LGUueSxlLngrZS53aWR0aCxlLnkrZS5oZWlnaHRdfWUuZXhwb3J0cz11LHUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMscj1bXSxuPWFyZ3VtZW50cy5sZW5ndGg7bi0tOylyW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gci5sZW5ndGgmJih0PXRoaXMpLnVwZGF0ZS5hcHBseSh0LHIpLHRoaXMucmVnbC5hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj90aGlzLmRyYXcoKToodGhpcy5kaXJ0eT9udWxsPT10aGlzLnBsYW5uZWQmJih0aGlzLnBsYW5uZWQ9bygoZnVuY3Rpb24oKXtlLmRyYXcoKSxlLmRpcnR5PSEwLGUucGxhbm5lZD1udWxsfSkpKToodGhpcy5kcmF3KCksdGhpcy5kaXJ0eT0hMCxvKChmdW5jdGlvbigpe2UuZGlydHk9ITF9KSkpLHRoaXMpfSx1LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtpZihlLmxlbmd0aCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy51cGRhdGVJdGVtKG4sZVtuXSk7dGhpcy50cmFjZXM9dGhpcy50cmFjZXMuZmlsdGVyKEJvb2xlYW4pO2Zvcih2YXIgaT1bXSxhPTAsbz0wO288dGhpcy50cmFjZXMubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRoaXMudHJhY2VzW29dLGw9dGhpcy50cmFjZXNbb10ucGFzc2VzLGM9MDtjPGwubGVuZ3RoO2MrKylpLnB1c2godGhpcy5wYXNzZXNbbFtjXV0pO3MucGFzc09mZnNldD1hLGErPXMucGFzc2VzLmxlbmd0aH1yZXR1cm4odD10aGlzLnNjYXR0ZXIpLnVwZGF0ZS5hcHBseSh0LGkpLHRoaXN9fSx1LnByb3RvdHlwZS51cGRhdGVJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5yZWdsO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLnRyYWNlc1t0XT1udWxsLHRoaXM7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIG4sbz1pKGUse2RhdGE6ImRhdGEgaXRlbXMgY29sdW1ucyByb3dzIHZhbHVlcyBkaW1lbnNpb25zIHNhbXBsZXMgeCIsc25hcDoic25hcCBjbHVzdGVyIixzaXplOiJzaXplcyBzaXplIHJhZGl1cyIsY29sb3I6ImNvbG9ycyBjb2xvciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIixvcGFjaXR5OiJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSBvcGFxdWUiLGJvcmRlclNpemU6ImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lIixib3JkZXJDb2xvcjoiYm9yZGVyQ29sb3JzIGJvcmRlckNvbG9yIGJvcmRlcmNvbG9yIHN0cm9rZSBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3IiLG1hcmtlcjoibWFya2VycyBtYXJrZXIgc2hhcGUiLHJhbmdlOiJyYW5nZSByYW5nZXMgZGF0YWJveCBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCB2aWV3Ym94Iixkb21haW46ImRvbWFpbiBkb21haW5zIGFyZWEgYXJlYXMiLHBhZGRpbmc6InBhZCBwYWRkaW5nIHBhZGRpbmdzIHBhZHMgbWFyZ2luIG1hcmdpbnMiLHRyYW5zcG9zZToidHJhbnNwb3NlIHRyYW5zcG9zZWQiLGRpYWdvbmFsOiJkaWFnb25hbCBkaWFnIHNob3dEaWFnb25hbCIsdXBwZXI6InVwcGVyIHVwIHRvcCB1cHBlcmhhbGYgdXBwZXJIYWxmIHNob3d1cHBlcmhhbGYgc2hvd1VwcGVyIHNob3dVcHBlckhhbGYiLGxvd2VyOiJsb3dlciBsb3cgYm90dG9tIGxvd2VyaGFsZiBsb3dlckhhbGYgc2hvd2xvd2VyaGFsZiBzaG93TG93ZXJIYWxmIHNob3dMb3dlciJ9KSxzPXRoaXMudHJhY2VzW3RdfHwodGhpcy50cmFjZXNbdF09e2lkOnQsYnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxjb2xvcjoiYmxhY2siLG1hcmtlcjpudWxsLHNpemU6MTIsYm9yZGVyQ29sb3I6InRyYW5zcGFyZW50Iixib3JkZXJTaXplOjEsdmlld3BvcnQ6bChbci5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHIuX2dsLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxwYWRkaW5nOlswLDAsMCwwXSxvcGFjaXR5OjEsZGlhZ29uYWw6ITAsdXBwZXI6ITAsbG93ZXI6ITB9KTtpZihudWxsIT1vLmNvbG9yJiYocy5jb2xvcj1vLmNvbG9yKSxudWxsIT1vLnNpemUmJihzLnNpemU9by5zaXplKSxudWxsIT1vLm1hcmtlciYmKHMubWFya2VyPW8ubWFya2VyKSxudWxsIT1vLmJvcmRlckNvbG9yJiYocy5ib3JkZXJDb2xvcj1vLmJvcmRlckNvbG9yKSxudWxsIT1vLmJvcmRlclNpemUmJihzLmJvcmRlclNpemU9by5ib3JkZXJTaXplKSxudWxsIT1vLm9wYWNpdHkmJihzLm9wYWNpdHk9by5vcGFjaXR5KSxvLnZpZXdwb3J0JiYocy52aWV3cG9ydD1sKG8udmlld3BvcnQpKSxudWxsIT1vLmRpYWdvbmFsJiYocy5kaWFnb25hbD1vLmRpYWdvbmFsKSxudWxsIT1vLnVwcGVyJiYocy51cHBlcj1vLnVwcGVyKSxudWxsIT1vLmxvd2VyJiYocy5sb3dlcj1vLmxvd2VyKSxvLmRhdGEpe3MuYnVmZmVyKGMoby5kYXRhKSkscy5jb2x1bW5zPW8uZGF0YS5sZW5ndGgscy5jb3VudD1vLmRhdGFbMF0ubGVuZ3RoLHMuYm91bmRzPVtdO2Zvcih2YXIgdT0wO3U8cy5jb2x1bW5zO3UrKylzLmJvdW5kc1t1XT1hKG8uZGF0YVt1XSwxKX1vLnJhbmdlJiYocy5yYW5nZT1vLnJhbmdlLG49cy5yYW5nZSYmIm51bWJlciIhPXR5cGVvZiBzLnJhbmdlWzBdKSxvLmRvbWFpbiYmKHMuZG9tYWluPW8uZG9tYWluKTt2YXIgZD0hMTtudWxsIT1vLnBhZGRpbmcmJihBcnJheS5pc0FycmF5KG8ucGFkZGluZykmJm8ucGFkZGluZy5sZW5ndGg9PT1zLmNvbHVtbnMmJiJudW1iZXIiPT10eXBlb2Ygby5wYWRkaW5nW28ucGFkZGluZy5sZW5ndGgtMV0/KHMucGFkZGluZz1vLnBhZGRpbmcubWFwKHApLGQ9ITApOnMucGFkZGluZz1wKG8ucGFkZGluZykpO3ZhciBnPXMuY29sdW1ucyxtPXMuY291bnQsdj1zLnZpZXdwb3J0LndpZHRoLHk9cy52aWV3cG9ydC5oZWlnaHQseD1zLnZpZXdwb3J0LngsYj1zLnZpZXdwb3J0LnksXz12L2csdz15L2c7cy5wYXNzZXM9W107Zm9yKHZhciBUPTA7VDxnO1QrKylmb3IodmFyIGs9MDtrPGc7aysrKWlmKChzLmRpYWdvbmFsfHxrIT09VCkmJihzLnVwcGVyfHwhKFQ+aykpJiYocy5sb3dlcnx8IShUPGspKSl7dmFyIE09ZihzLmlkLFQsayksQT10aGlzLnBhc3Nlc1tNXXx8KHRoaXMucGFzc2VzW01dPXt9KTtpZihvLmRhdGEmJihvLnRyYW5zcG9zZT9BLnBvc2l0aW9ucz17eDp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDprLGNvdW50Om0sc3RyaWRlOmd9LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6VCxjb3VudDptLHN0cmlkZTpnfX06QS5wb3NpdGlvbnM9e3g6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayptLGNvdW50Om19LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6VCptLGNvdW50Om19fSxBLmJvdW5kcz1oKHMuYm91bmRzLFQsaykpLG8uZG9tYWlufHxvLnZpZXdwb3J0fHxvLmRhdGEpe3ZhciBTPWQ/aChzLnBhZGRpbmcsVCxrKTpzLnBhZGRpbmc7aWYocy5kb21haW4pe3ZhciBFPWgocy5kb21haW4sVCxrKSxDPUVbMF0sTD1FWzFdLEk9RVsyXSxQPUVbM107QS52aWV3cG9ydD1beCtDKnYrU1swXSxiK0wqeStTWzFdLHgrSSp2LVNbMl0sYitQKnktU1szXV19ZWxzZSBBLnZpZXdwb3J0PVt4K2sqXytfKlNbMF0sYitUKncrdypTWzFdLHgrKGsrMSkqXy1fKlNbMl0sYisoVCsxKSp3LXcqU1szXV19by5jb2xvciYmKEEuY29sb3I9cy5jb2xvciksby5zaXplJiYoQS5zaXplPXMuc2l6ZSksby5tYXJrZXImJihBLm1hcmtlcj1zLm1hcmtlciksby5ib3JkZXJTaXplJiYoQS5ib3JkZXJTaXplPXMuYm9yZGVyU2l6ZSksby5ib3JkZXJDb2xvciYmKEEuYm9yZGVyQ29sb3I9cy5ib3JkZXJDb2xvciksby5vcGFjaXR5JiYoQS5vcGFjaXR5PXMub3BhY2l0eSksby5yYW5nZSYmKEEucmFuZ2U9bj9oKHMucmFuZ2UsVCxrKTpzLnJhbmdlfHxBLmJvdW5kcykscy5wYXNzZXMucHVzaChNKX1yZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO2lmKGUubGVuZ3RoKXtmb3IodmFyIG49W10saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKCJudW1iZXIiPT10eXBlb2YgZVtpXSl7dmFyIGE9dGhpcy50cmFjZXNbZVtpXV0sbz1hLnBhc3NlcyxsPWEucGFzc09mZnNldDtuLnB1c2guYXBwbHkobixzKGwsbCtvLmxlbmd0aCkpfWVsc2UgaWYoZVtpXS5sZW5ndGgpe3ZhciBjPWVbaV0sdT10aGlzLnRyYWNlc1tpXSxmPXUucGFzc2VzLGg9dS5wYXNzT2Zmc2V0O2Y9Zi5tYXAoKGZ1bmN0aW9uKHQsZSl7bltoK2VdPWN9KSl9KHQ9dGhpcy5zY2F0dGVyKS5kcmF3LmFwcGx5KHQsbil9ZWxzZSB0aGlzLnNjYXR0ZXIuZHJhdygpO3JldHVybiB0aGlzfSx1LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhY2VzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuYnVmZmVyJiZ0LmJ1ZmZlci5kZXN0cm95JiZ0LmJ1ZmZlci5kZXN0cm95KCl9KSksdGhpcy50cmFjZXM9bnVsbCx0aGlzLnBhc3Nlcz1udWxsLHRoaXMuc2NhdHRlci5kZXN0cm95KCksdGhpc319LHsiYXJyYXktYm91bmRzIjo3MCwiYXJyYXktcmFuZ2UiOjcyLCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyNDQsInBhcnNlLXJlY3QiOjUwNCwicGljay1ieS1hbGlhcyI6NTExLHJhZjo1MjgsInJlZ2wtc2NhdHRlcjJkIjo1Mzd9XSw1NDA6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9lLmV4cG9ydHM9bigpOnQuY3JlYXRlUkVHTD1uKCl9KHRoaXMsKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuaWQ9VisrLHRoaXMudHlwZT10LHRoaXMuZGF0YT1lfWZ1bmN0aW9uIGUodCl7cmV0dXJuIlsiK2Z1bmN0aW9uIHQoZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybltdO3ZhciByPWUuY2hhckF0KDApLG49ZS5jaGFyQXQoZS5sZW5ndGgtMSk7aWYoMTxlLmxlbmd0aCYmcj09PW4mJignIic9PT1yfHwiJyI9PT1yKSlyZXR1cm5bJyInK2Uuc3Vic3RyKDEsZS5sZW5ndGgtMikucmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoLyIvZywnXFwiJykrJyInXTtpZihyPS9cWyhmYWxzZXx0cnVlfG51bGx8XGQrfCdbXiddKid8IlteIl0qIilcXS8uZXhlYyhlKSlyZXR1cm4gdChlLnN1YnN0cigwLHIuaW5kZXgpKS5jb25jYXQodChyWzFdKSkuY29uY2F0KHQoZS5zdWJzdHIoci5pbmRleCtyWzBdLmxlbmd0aCkpKTtpZigxPT09KHI9ZS5zcGxpdCgiLiIpKS5sZW5ndGgpcmV0dXJuWyciJytlLnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC8iL2csJ1xcIicpKyciJ107Zm9yKGU9W10sbj0wO248ci5sZW5ndGg7KytuKWU9ZS5jb25jYXQodChyW25dKSk7cmV0dXJuIGV9KHQpLmpvaW4oIl1bIikrIl0ifWZ1bmN0aW9uIHIodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoKTp0fWZ1bmN0aW9uIG4odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk6dH1mdW5jdGlvbiBpKHQpe3ZhciBlLGksYSxvLHM9dHx8e307dD17fTt2YXIgbD1bXSxjPVtdLHU9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/MTp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxmPSExLGg9ZnVuY3Rpb24odCl7fSxwPWZ1bmN0aW9uKCl7fTtpZigic3RyaW5nIj09dHlwZW9mIHM/ZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpOiJvYmplY3QiPT10eXBlb2YgcyYmKCJzdHJpbmciPT10eXBlb2Ygcy5ub2RlTmFtZSYmImZ1bmN0aW9uIj09dHlwZW9mIHMuYXBwZW5kQ2hpbGQmJiJmdW5jdGlvbiI9PXR5cGVvZiBzLmdldEJvdW5kaW5nQ2xpZW50UmVjdD9lPXM6ImZ1bmN0aW9uIj09dHlwZW9mIHMuZHJhd0FycmF5c3x8ImZ1bmN0aW9uIj09dHlwZW9mIHMuZHJhd0VsZW1lbnRzP2E9KG89cykuY2FudmFzOigiZ2wiaW4gcz9vPXMuZ2w6ImNhbnZhcyJpbiBzP2E9bihzLmNhbnZhcyk6ImNvbnRhaW5lciJpbiBzJiYoaT1uKHMuY29udGFpbmVyKSksImF0dHJpYnV0ZXMiaW4gcyYmKHQ9cy5hdHRyaWJ1dGVzKSwiZXh0ZW5zaW9ucyJpbiBzJiYobD1yKHMuZXh0ZW5zaW9ucykpLCJvcHRpb25hbEV4dGVuc2lvbnMiaW4gcyYmKGM9cihzLm9wdGlvbmFsRXh0ZW5zaW9ucykpLCJvbkRvbmUiaW4gcyYmKGg9cy5vbkRvbmUpLCJwcm9maWxlImluIHMmJihmPSEhcy5wcm9maWxlKSwicGl4ZWxSYXRpbyJpbiBzJiYodT0rcy5waXhlbFJhdGlvKSkpLGUmJigiY2FudmFzIj09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9hPWU6aT1lKSwhbyl7aWYoIWEpe2lmKCEoZT1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3ZhciBlPXdpbmRvdy5pbm5lcldpZHRoLG49d2luZG93LmlubmVySGVpZ2h0O3QhPT1kb2N1bWVudC5ib2R5JiYoZT0obj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKS5yaWdodC1uLmxlZnQsbj1uLmJvdHRvbS1uLnRvcCksYS53aWR0aD1yKmUsYS5oZWlnaHQ9cipuLFUoYS5zdHlsZSx7d2lkdGg6ZSsicHgiLGhlaWdodDpuKyJweCJ9KX12YXIgaSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBVKGEuc3R5bGUse2JvcmRlcjowLG1hcmdpbjowLHBhZGRpbmc6MCx0b3A6MCxsZWZ0OjB9KSx0LmFwcGVuZENoaWxkKGEpLHQ9PT1kb2N1bWVudC5ib2R5JiYoYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLFUodC5zdHlsZSx7bWFyZ2luOjAscGFkZGluZzowfSkpLHQhPT1kb2N1bWVudC5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVzaXplT2JzZXJ2ZXI/KGk9bmV3IFJlc2l6ZU9ic2VydmVyKChmdW5jdGlvbigpe3NldFRpbWVvdXQobil9KSkpLm9ic2VydmUodCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbiwhMSksbigpLHtjYW52YXM6YSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXtpP2kuZGlzY29ubmVjdCgpOndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLG4pLHQucmVtb3ZlQ2hpbGQoYSl9fX0oaXx8ZG9jdW1lbnQuYm9keSwwLHUpKSlyZXR1cm4gbnVsbDthPWUuY2FudmFzLHA9ZS5vbkRlc3Ryb3l9dm9pZCAwPT09dC5wcmVtdWx0aXBsaWVkQWxwaGEmJih0LnByZW11bHRpcGxpZWRBbHBoYT0hMCksbz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocil7dHJ5e3JldHVybiB0LmdldENvbnRleHQocixlKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19cmV0dXJuIHIoIndlYmdsIil8fHIoImV4cGVyaW1lbnRhbC13ZWJnbCIpfHxyKCJ3ZWJnbC1leHBlcmltZW50YWwiKX0oYSx0KX1yZXR1cm4gbz97Z2w6byxjYW52YXM6YSxjb250YWluZXI6aSxleHRlbnNpb25zOmwsb3B0aW9uYWxFeHRlbnNpb25zOmMscGl4ZWxSYXRpbzp1LHByb2ZpbGU6ZixvbkRvbmU6aCxvbkRlc3Ryb3k6cH06KHAoKSxoKCJ3ZWJnbCBub3Qgc3VwcG9ydGVkLCB0cnkgdXBncmFkaW5nIHlvdXIgYnJvd3NlciBvciBncmFwaGljcyBkcml2ZXJzIGh0dHA6Ly9nZXQud2ViZ2wub3JnIiksbnVsbCl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1BcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyO3JldHVybiBlPSg2NTUzNTx0KTw8NCxlfD1yPSgyNTU8KHQ+Pj49ZSkpPDwzLChlfD1yPSgxNTwodD4+Pj1yKSk8PDIpfChyPSgzPCh0Pj4+PXIpKTw8MSl8dD4+PnI+PjF9ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIHQodCl7dDp7Zm9yKHZhciBlPTE2OzI2ODQzNTQ1Nj49ZTtlKj0xNilpZih0PD1lKXt0PWU7YnJlYWsgdH10PTB9cmV0dXJuIDA8KGU9cltvKHQpPj4yXSkubGVuZ3RoP2UucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGUodCl7cltvKHQuYnl0ZUxlbmd0aCk+PjJdLnB1c2godCl9dmFyIHI9YSg4LChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybnthbGxvYzp0LGZyZWU6ZSxhbGxvY1R5cGU6ZnVuY3Rpb24oZSxyKXt2YXIgbj1udWxsO3N3aXRjaChlKXtjYXNlIDUxMjA6bj1uZXcgSW50OEFycmF5KHQociksMCxyKTticmVhaztjYXNlIDUxMjE6bj1uZXcgVWludDhBcnJheSh0KHIpLDAscik7YnJlYWs7Y2FzZSA1MTIyOm49bmV3IEludDE2QXJyYXkodCgyKnIpLDAscik7YnJlYWs7Y2FzZSA1MTIzOm49bmV3IFVpbnQxNkFycmF5KHQoMipyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNDpuPW5ldyBJbnQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNTpuPW5ldyBVaW50MzJBcnJheSh0KDQqciksMCxyKTticmVhaztjYXNlIDUxMjY6bj1uZXcgRmxvYXQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIG4ubGVuZ3RoIT09cj9uLnN1YmFycmF5KDAscik6bn0sZnJlZVR5cGU6ZnVuY3Rpb24odCl7ZSh0LmJ1ZmZlcil9fX1mdW5jdGlvbiBsKHQpe3JldHVybiEhdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQuc2hhcGUpJiZBcnJheS5pc0FycmF5KHQuc3RyaWRlKSYmIm51bWJlciI9PXR5cGVvZiB0Lm9mZnNldCYmdC5zaGFwZS5sZW5ndGg9PT10LnN0cmlkZS5sZW5ndGgmJihBcnJheS5pc0FycmF5KHQuZGF0YSl8fFgodC5kYXRhKSl9ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxlOysrbylmb3IodmFyIHM9dFtvXSxsPTA7bDxyOysrbClmb3IodmFyIGM9c1tsXSx1PTA7dTxuOysrdSlpW2ErK109Y1t1XX1mdW5jdGlvbiB1KHQpe3JldHVybiAwfEtbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpXX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpdFtyXT1lW3JdfWZ1bmN0aW9uIGgodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTAsbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7YzxuOysrYyl0W3MrK109ZVtpKmwrYSpjK29dfWZ1bmN0aW9uIHAodCxlLHIsbil7ZnVuY3Rpb24gaShlKXt0aGlzLmlkPWMrKyx0aGlzLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHRoaXMudHlwZT1lLHRoaXMudXNhZ2U9MzUwNDQsdGhpcy5ieXRlTGVuZ3RoPTAsdGhpcy5kaW1lbnNpb249MSx0aGlzLmR0eXBlPTUxMjEsdGhpcy5wZXJzaXN0ZW50RGF0YT1udWxsLHIucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIGEoZSxyLG4pe2UuYnl0ZUxlbmd0aD1yLmJ5dGVMZW5ndGgsdC5idWZmZXJEYXRhKGUudHlwZSxyLG4pfWZ1bmN0aW9uIG8odCxlLHIsbixpLG8pe2lmKHQudXNhZ2U9cixBcnJheS5pc0FycmF5KGUpKXtpZih0LmR0eXBlPW58fDUxMjYsMDxlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKXtpPWV0KGUpO2Zvcih2YXIgcz1uPTE7czxpLmxlbmd0aDsrK3Mpbio9aVtzXTt0LmRpbWVuc2lvbj1uLGEodCxlPXR0KGUsaSx0LmR0eXBlKSxyKSxvP3QucGVyc2lzdGVudERhdGE9ZTpZLmZyZWVUeXBlKGUpfWVsc2UibnVtYmVyIj09dHlwZW9mIGVbMF0/KHQuZGltZW5zaW9uPWksZihpPVkuYWxsb2NUeXBlKHQuZHR5cGUsZS5sZW5ndGgpLGUpLGEodCxpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1pOlkuZnJlZVR5cGUoaSkpOlgoZVswXSkmJih0LmRpbWVuc2lvbj1lWzBdLmxlbmd0aCx0LmR0eXBlPW58fHUoZVswXSl8fDUxMjYsYSh0LGU9dHQoZSxbZS5sZW5ndGgsZVswXS5sZW5ndGhdLHQuZHR5cGUpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1lOlkuZnJlZVR5cGUoZSkpfWVsc2UgaWYoWChlKSl0LmR0eXBlPW58fHUoZSksdC5kaW1lbnNpb249aSxhKHQsZSxyKSxvJiYodC5wZXJzaXN0ZW50RGF0YT1uZXcgVWludDhBcnJheShuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpKTtlbHNlIGlmKGwoZSkpe2k9ZS5zaGFwZTt2YXIgYz1lLnN0cmlkZSxwPShzPWUub2Zmc2V0LDApLGQ9MCxnPTAsbT0wOzE9PT1pLmxlbmd0aD8ocD1pWzBdLGQ9MSxnPWNbMF0sbT0wKToyPT09aS5sZW5ndGgmJihwPWlbMF0sZD1pWzFdLGc9Y1swXSxtPWNbMV0pLHQuZHR5cGU9bnx8dShlLmRhdGEpfHw1MTI2LHQuZGltZW5zaW9uPWQsaChpPVkuYWxsb2NUeXBlKHQuZHR5cGUscCpkKSxlLmRhdGEscCxkLGcsbSxzKSxhKHQsaSxyKSxvP3QucGVyc2lzdGVudERhdGE9aTpZLmZyZWVUeXBlKGkpfWVsc2UgZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYodC5kdHlwZT01MTIxLHQuZGltZW5zaW9uPWksYSh0LGUsciksbyYmKHQucGVyc2lzdGVudERhdGE9bmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQ4QXJyYXkoZSkpKSl9ZnVuY3Rpb24gcyhyKXtlLmJ1ZmZlckNvdW50LS0sbihyKSx0LmRlbGV0ZUJ1ZmZlcihyLmJ1ZmZlciksci5idWZmZXI9bnVsbCxkZWxldGUgcFtyLmlkXX12YXIgYz0wLHA9e307aS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3QuYmluZEJ1ZmZlcih0aGlzLnR5cGUsdGhpcy5idWZmZXIpfSxpLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cyh0aGlzKX07dmFyIGQ9W107cmV0dXJuIHIucHJvZmlsZSYmKGUuZ2V0VG90YWxCdWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXMocCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCs9cFtlXS5zdGF0cy5zaXplfSkpLHR9KSx7Y3JlYXRlOmZ1bmN0aW9uKG4sYSxjLGQpe2Z1bmN0aW9uIGcoZSl7dmFyIG49MzUwNDQsaT1udWxsLGE9MCxzPTAsYz0xO3JldHVybiBBcnJheS5pc0FycmF5KGUpfHxYKGUpfHxsKGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/aT1lOiJudW1iZXIiPT10eXBlb2YgZT9hPTB8ZTplJiYoImRhdGEiaW4gZSYmKGk9ZS5kYXRhKSwidXNhZ2UiaW4gZSYmKG49JFtlLnVzYWdlXSksInR5cGUiaW4gZSYmKHM9UVtlLnR5cGVdKSwiZGltZW5zaW9uImluIGUmJihjPTB8ZS5kaW1lbnNpb24pLCJsZW5ndGgiaW4gZSYmKGE9MHxlLmxlbmd0aCkpLG0uYmluZCgpLGk/byhtLGksbixzLGMsZCk6KGEmJnQuYnVmZmVyRGF0YShtLnR5cGUsYSxuKSxtLmR0eXBlPXN8fDUxMjEsbS51c2FnZT1uLG0uZGltZW5zaW9uPWMsbS5ieXRlTGVuZ3RoPWEpLHIucHJvZmlsZSYmKG0uc3RhdHMuc2l6ZT1tLmJ5dGVMZW5ndGgqcnRbbS5kdHlwZV0pLGd9ZS5idWZmZXJDb3VudCsrO3ZhciBtPW5ldyBpKGEpO3JldHVybiBwW20uaWRdPW0sY3x8ZyhuKSxnLl9yZWdsVHlwZT0iYnVmZmVyIixnLl9idWZmZXI9bSxnLnN1YmRhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixpPTB8KHJ8fDApO2lmKG0uYmluZCgpLFgoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil0LmJ1ZmZlclN1YkRhdGEobS50eXBlLGksZSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXtpZigwPGUubGVuZ3RoKWlmKCJudW1iZXIiPT10eXBlb2YgZVswXSl7dmFyIGE9WS5hbGxvY1R5cGUobS5kdHlwZSxlLmxlbmd0aCk7ZihhLGUpLHQuYnVmZmVyU3ViRGF0YShtLnR5cGUsaSxhKSxZLmZyZWVUeXBlKGEpfWVsc2UoQXJyYXkuaXNBcnJheShlWzBdKXx8WChlWzBdKSkmJihuPWV0KGUpLGE9dHQoZSxuLG0uZHR5cGUpLHQuYnVmZmVyU3ViRGF0YShtLnR5cGUsaSxhKSxZLmZyZWVUeXBlKGEpKX1lbHNlIGlmKGwoZSkpe249ZS5zaGFwZTt2YXIgbz1lLnN0cmlkZSxzPWE9MCxjPTAscD0wOzE9PT1uLmxlbmd0aD8oYT1uWzBdLHM9MSxjPW9bMF0scD0wKToyPT09bi5sZW5ndGgmJihhPW5bMF0scz1uWzFdLGM9b1swXSxwPW9bMV0pLG49QXJyYXkuaXNBcnJheShlLmRhdGEpP20uZHR5cGU6dShlLmRhdGEpLGgobj1ZLmFsbG9jVHlwZShuLGEqcyksZS5kYXRhLGEscyxjLHAsZS5vZmZzZXQpLHQuYnVmZmVyU3ViRGF0YShtLnR5cGUsaSxuKSxZLmZyZWVUeXBlKG4pfXJldHVybiBnfSxyLnByb2ZpbGUmJihnLnN0YXRzPW0uc3RhdHMpLGcuZGVzdHJveT1mdW5jdGlvbigpe3MobSl9LGd9LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbih0LGUpe3ZhciByPWQucG9wKCk7cmV0dXJuIHJ8fChyPW5ldyBpKHQpKSxyLmJpbmQoKSxvKHIsZSwzNTA0MCwwLDEsITEpLHJ9LGRlc3Ryb3lTdHJlYW06ZnVuY3Rpb24odCl7ZC5wdXNoKHQpfSxjbGVhcjpmdW5jdGlvbigpe1oocCkuZm9yRWFjaChzKSxkLmZvckVhY2gocyl9LGdldEJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fYnVmZmVyIGluc3RhbmNlb2YgaT90Ll9idWZmZXI6bnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe1oocCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5idWZmZXI9dC5jcmVhdGVCdWZmZXIoKSx0LmJpbmRCdWZmZXIoZS50eXBlLGUuYnVmZmVyKSx0LmJ1ZmZlckRhdGEoZS50eXBlLGUucGVyc2lzdGVudERhdGF8fGUuYnl0ZUxlbmd0aCxlLnVzYWdlKX0pKX0sX2luaXRCdWZmZXI6b319ZnVuY3Rpb24gZCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3RoaXMuaWQ9YysrLHNbdGhpcy5pZF09dGhpcyx0aGlzLmJ1ZmZlcj10LHRoaXMucHJpbVR5cGU9NCx0aGlzLnR5cGU9dGhpcy52ZXJ0Q291bnQ9MH1mdW5jdGlvbiBhKG4saSxhLG8scyxjLHUpe3ZhciBmO2lmKG4uYnVmZmVyLmJpbmQoKSxpPygoZj11KXx8WChpKSYmKCFsKGkpfHxYKGkuZGF0YSkpfHwoZj1lLm9lc19lbGVtZW50X2luZGV4X3VpbnQ/NTEyNTo1MTIzKSxyLl9pbml0QnVmZmVyKG4uYnVmZmVyLGksYSxmLDMpKToodC5idWZmZXJEYXRhKDM0OTYzLGMsYSksbi5idWZmZXIuZHR5cGU9Znx8NTEyMSxuLmJ1ZmZlci51c2FnZT1hLG4uYnVmZmVyLmRpbWVuc2lvbj0zLG4uYnVmZmVyLmJ5dGVMZW5ndGg9YyksZj11LCF1KXtzd2l0Y2gobi5idWZmZXIuZHR5cGUpe2Nhc2UgNTEyMTpjYXNlIDUxMjA6Zj01MTIxO2JyZWFrO2Nhc2UgNTEyMzpjYXNlIDUxMjI6Zj01MTIzO2JyZWFrO2Nhc2UgNTEyNTpjYXNlIDUxMjQ6Zj01MTI1fW4uYnVmZmVyLmR0eXBlPWZ9bi50eXBlPWYsMD4oaT1zKSYmKGk9bi5idWZmZXIuYnl0ZUxlbmd0aCw1MTIzPT09Zj9pPj49MTo1MTI1PT09ZiYmKGk+Pj0yKSksbi52ZXJ0Q291bnQ9aSxpPW8sMD5vJiYoaT00LDE9PT0obz1uLmJ1ZmZlci5kaW1lbnNpb24pJiYoaT0wKSwyPT09byYmKGk9MSksMz09PW8mJihpPTQpKSxuLnByaW1UeXBlPWl9ZnVuY3Rpb24gbyh0KXtuLmVsZW1lbnRzQ291bnQtLSxkZWxldGUgc1t0LmlkXSx0LmJ1ZmZlci5kZXN0cm95KCksdC5idWZmZXI9bnVsbH12YXIgcz17fSxjPTAsdT17dWludDg6NTEyMSx1aW50MTY6NTEyM307ZS5vZXNfZWxlbWVudF9pbmRleF91aW50JiYodS51aW50MzI9NTEyNSksaS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuYnVmZmVyLmJpbmQoKX07dmFyIGY9W107cmV0dXJue2NyZWF0ZTpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHModCl7aWYodClpZigibnVtYmVyIj09dHlwZW9mIHQpYyh0KSxmLnByaW1UeXBlPTQsZi52ZXJ0Q291bnQ9MHx0LGYudHlwZT01MTIxO2Vsc2V7dmFyIGU9bnVsbCxyPTM1MDQ0LG49LTEsaT0tMSxvPTAsaD0wO0FycmF5LmlzQXJyYXkodCl8fFgodCl8fGwodCk/ZT10OigiZGF0YSJpbiB0JiYoZT10LmRhdGEpLCJ1c2FnZSJpbiB0JiYocj0kW3QudXNhZ2VdKSwicHJpbWl0aXZlImluIHQmJihuPW50W3QucHJpbWl0aXZlXSksImNvdW50ImluIHQmJihpPTB8dC5jb3VudCksInR5cGUiaW4gdCYmKGg9dVt0LnR5cGVdKSwibGVuZ3RoImluIHQ/bz0wfHQubGVuZ3RoOihvPWksNTEyMz09PWh8fDUxMjI9PT1oP28qPTI6NTEyNSE9PWgmJjUxMjQhPT1ofHwobyo9NCkpKSxhKGYsZSxyLG4saSxvLGgpfWVsc2UgYygpLGYucHJpbVR5cGU9NCxmLnZlcnRDb3VudD0wLGYudHlwZT01MTIxO3JldHVybiBzfXZhciBjPXIuY3JlYXRlKG51bGwsMzQ5NjMsITApLGY9bmV3IGkoYy5fYnVmZmVyKTtyZXR1cm4gbi5lbGVtZW50c0NvdW50Kysscyh0KSxzLl9yZWdsVHlwZT0iZWxlbWVudHMiLHMuX2VsZW1lbnRzPWYscy5zdWJkYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMuc3ViZGF0YSh0LGUpLHN9LHMuZGVzdHJveT1mdW5jdGlvbigpe28oZil9LHN9LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbih0KXt2YXIgZT1mLnBvcCgpO3JldHVybiBlfHwoZT1uZXcgaShyLmNyZWF0ZShudWxsLDM0OTYzLCEwLCExKS5fYnVmZmVyKSksYShlLHQsMzUwNDAsLTEsLTEsMCwwKSxlfSxkZXN0cm95U3RyZWFtOmZ1bmN0aW9uKHQpe2YucHVzaCh0KX0sZ2V0RWxlbWVudHM6ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX2VsZW1lbnRzIGluc3RhbmNlb2YgaT90Ll9lbGVtZW50czpudWxsfSxjbGVhcjpmdW5jdGlvbigpe1oocykuZm9yRWFjaChvKX19fWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPVkuYWxsb2NUeXBlKDUxMjMsdC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcilpZihpc05hTih0W3JdKSllW3JdPTY1NTM1O2Vsc2UgaWYoMS8wPT09dFtyXSllW3JdPTMxNzQ0O2Vsc2UgaWYoLTEvMD09PXRbcl0pZVtyXT02NDUxMjtlbHNle2l0WzBdPXRbcl07dmFyIG49KGE9YXRbMF0pPj4+MzE8PDE1LGk9KGE8PDE+Pj4yNCktMTI3LGE9YT4+MTMmMTAyMztlW3JdPS0yND5pP246LTE0Pmk/bisoYSsxMDI0Pj4tMTQtaSk6MTU8aT9uKzMxNzQ0Om4rKGkrMTU8PDEwKSthfXJldHVybiBlfWZ1bmN0aW9uIG0odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFgodCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4iW29iamVjdCAiK3QrIl0ifWZ1bmN0aW9uIHkodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJigwPT09dC5sZW5ndGh8fCJudW1iZXIiPT10eXBlb2YgdFswXSl9ZnVuY3Rpb24geCh0KXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGh8fCFtKHRbMF0pKX1mdW5jdGlvbiBiKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gXyh0KXtpZighdClyZXR1cm4hMTt2YXIgZT1iKHQpO3JldHVybiAwPD1ndC5pbmRleE9mKGUpfHwoeSh0KXx8eCh0KXx8bCh0KSl9ZnVuY3Rpb24gdyh0LGUpezM2MTkzPT09dC50eXBlPyh0LmRhdGE9ZyhlKSxZLmZyZWVUeXBlKGUpKTp0LmRhdGE9ZX1mdW5jdGlvbiBUKHQsZSxyLG4saSxhKXtpZih0PSJ1bmRlZmluZWQiIT10eXBlb2YgdnRbdF0/dnRbdF06bHRbdF0qbXRbZV0sYSYmKHQqPTYpLGkpe2ZvcihuPTA7MTw9cjspbis9dCpyKnIsci89MjtyZXR1cm4gbn1yZXR1cm4gdCpyKm59ZnVuY3Rpb24gayh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKCl7dGhpcy5mb3JtYXQ9dGhpcy5pbnRlcm5hbGZvcm1hdD02NDA4LHRoaXMudHlwZT01MTIxLHRoaXMuZmxpcFk9dGhpcy5wcmVtdWx0aXBseUFscGhhPXRoaXMuY29tcHJlc3NlZD0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xLHRoaXMuY29sb3JTcGFjZT0zNzQ0NCx0aGlzLmNoYW5uZWxzPXRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MH1mdW5jdGlvbiBjKHQsZSl7dC5pbnRlcm5hbGZvcm1hdD1lLmludGVybmFsZm9ybWF0LHQuZm9ybWF0PWUuZm9ybWF0LHQudHlwZT1lLnR5cGUsdC5jb21wcmVzc2VkPWUuY29tcHJlc3NlZCx0LnByZW11bHRpcGx5QWxwaGE9ZS5wcmVtdWx0aXBseUFscGhhLHQuZmxpcFk9ZS5mbGlwWSx0LnVucGFja0FsaWdubWVudD1lLnVucGFja0FsaWdubWVudCx0LmNvbG9yU3BhY2U9ZS5jb2xvclNwYWNlLHQud2lkdGg9ZS53aWR0aCx0LmhlaWdodD1lLmhlaWdodCx0LmNoYW5uZWxzPWUuY2hhbm5lbHN9ZnVuY3Rpb24gdSh0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZSYmZSl7InByZW11bHRpcGx5QWxwaGEiaW4gZSYmKHQucHJlbXVsdGlwbHlBbHBoYT1lLnByZW11bHRpcGx5QWxwaGEpLCJmbGlwWSJpbiBlJiYodC5mbGlwWT1lLmZsaXBZKSwiYWxpZ25tZW50ImluIGUmJih0LnVucGFja0FsaWdubWVudD1lLmFsaWdubWVudCksImNvbG9yU3BhY2UiaW4gZSYmKHQuY29sb3JTcGFjZT1xW2UuY29sb3JTcGFjZV0pLCJ0eXBlImluIGUmJih0LnR5cGU9SFtlLnR5cGVdKTt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT10LmNoYW5uZWxzLGE9ITE7InNoYXBlImluIGU/KHI9ZS5zaGFwZVswXSxuPWUuc2hhcGVbMV0sMz09PWUuc2hhcGUubGVuZ3RoJiYoaT1lLnNoYXBlWzJdLGE9ITApKTooInJhZGl1cyJpbiBlJiYocj1uPWUucmFkaXVzKSwid2lkdGgiaW4gZSYmKHI9ZS53aWR0aCksImhlaWdodCJpbiBlJiYobj1lLmhlaWdodCksImNoYW5uZWxzImluIGUmJihpPWUuY2hhbm5lbHMsYT0hMCkpLHQud2lkdGg9MHxyLHQuaGVpZ2h0PTB8bix0LmNoYW5uZWxzPTB8aSxyPSExLCJmb3JtYXQiaW4gZSYmKHI9ZS5mb3JtYXQsbj10LmludGVybmFsZm9ybWF0PUdbcl0sdC5mb3JtYXQ9YXRbbl0sciBpbiBIJiYhKCJ0eXBlImluIGUpJiYodC50eXBlPUhbcl0pLHIgaW4gVyYmKHQuY29tcHJlc3NlZD0hMCkscj0hMCksIWEmJnI/dC5jaGFubmVscz1sdFt0LmZvcm1hdF06YSYmIXImJnQuY2hhbm5lbHMhPT1zdFt0LmZvcm1hdF0mJih0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PXN0W3QuY2hhbm5lbHNdKX19ZnVuY3Rpb24gZihlKXt0LnBpeGVsU3RvcmVpKDM3NDQwLGUuZmxpcFkpLHQucGl4ZWxTdG9yZWkoMzc0NDEsZS5wcmVtdWx0aXBseUFscGhhKSx0LnBpeGVsU3RvcmVpKDM3NDQzLGUuY29sb3JTcGFjZSksdC5waXhlbFN0b3JlaSgzMzE3LGUudW5wYWNrQWxpZ25tZW50KX1mdW5jdGlvbiBoKCl7cy5jYWxsKHRoaXMpLHRoaXMueU9mZnNldD10aGlzLnhPZmZzZXQ9MCx0aGlzLmRhdGE9bnVsbCx0aGlzLm5lZWRzRnJlZT0hMSx0aGlzLmVsZW1lbnQ9bnVsbCx0aGlzLm5lZWRzQ29weT0hMX1mdW5jdGlvbiBwKHQsZSl7dmFyIHI9bnVsbDtpZihfKGUpP3I9ZTplJiYodSh0LGUpLCJ4ImluIGUmJih0LnhPZmZzZXQ9MHxlLngpLCJ5ImluIGUmJih0LnlPZmZzZXQ9MHxlLnkpLF8oZS5kYXRhKSYmKHI9ZS5kYXRhKSksZS5jb3B5KXt2YXIgbj1pLnZpZXdwb3J0V2lkdGgsYT1pLnZpZXdwb3J0SGVpZ2h0O3Qud2lkdGg9dC53aWR0aHx8bi10LnhPZmZzZXQsdC5oZWlnaHQ9dC5oZWlnaHR8fGEtdC55T2Zmc2V0LHQubmVlZHNDb3B5PSEwfWVsc2UgaWYocil7aWYoWChyKSl0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsdC5kYXRhPXIsInR5cGUiaW4gZXx8NTEyMSE9PXQudHlwZXx8KHQudHlwZT0wfEtbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpXSk7ZWxzZSBpZih5KHIpKXtzd2l0Y2godC5jaGFubmVscz10LmNoYW5uZWxzfHw0LGE9KG49cikubGVuZ3RoLHQudHlwZSl7Y2FzZSA1MTIxOmNhc2UgNTEyMzpjYXNlIDUxMjU6Y2FzZSA1MTI2OihhPVkuYWxsb2NUeXBlKHQudHlwZSxhKSkuc2V0KG4pLHQuZGF0YT1hO2JyZWFrO2Nhc2UgMzYxOTM6dC5kYXRhPWcobil9dC5hbGlnbm1lbnQ9MSx0Lm5lZWRzRnJlZT0hMH1lbHNlIGlmKGwocikpe249ci5kYXRhLEFycmF5LmlzQXJyYXkobil8fDUxMjEhPT10LnR5cGV8fCh0LnR5cGU9MHxLW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKV0pO2E9ci5zaGFwZTt2YXIgbyxzLGMsZixoPXIuc3RyaWRlOzM9PT1hLmxlbmd0aD8oYz1hWzJdLGY9aFsyXSk6Zj1jPTEsbz1hWzBdLHM9YVsxXSxhPWhbMF0saD1oWzFdLHQuYWxpZ25tZW50PTEsdC53aWR0aD1vLHQuaGVpZ2h0PXMsdC5jaGFubmVscz1jLHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9c3RbY10sdC5uZWVkc0ZyZWU9ITAsbz1mLHI9ci5vZmZzZXQsYz10LndpZHRoLGY9dC5oZWlnaHQscz10LmNoYW5uZWxzO2Zvcih2YXIgcD1ZLmFsbG9jVHlwZSgzNjE5Mz09PXQudHlwZT81MTI2OnQudHlwZSxjKmYqcyksZD0wLHY9MDt2PGY7Kyt2KWZvcih2YXIgVD0wO1Q8YzsrK1QpZm9yKHZhciBrPTA7azxzOysraylwW2QrK109blthKlQraCp2K28qaytyXTt3KHQscCl9ZWxzZSBpZihiKHIpPT09Y3R8fGIocik9PT11dHx8YihyKT09PWZ0KWIocik9PT1jdHx8YihyKT09PXV0P3QuZWxlbWVudD1yOnQuZWxlbWVudD1yLmNhbnZhcyx0LndpZHRoPXQuZWxlbWVudC53aWR0aCx0LmhlaWdodD10LmVsZW1lbnQuaGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1odCl0LmVsZW1lbnQ9cix0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoYihyKT09PXB0KXQuZWxlbWVudD1yLHQud2lkdGg9ci5uYXR1cmFsV2lkdGgsdC5oZWlnaHQ9ci5uYXR1cmFsSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1kdCl0LmVsZW1lbnQ9cix0LndpZHRoPXIudmlkZW9XaWR0aCx0LmhlaWdodD1yLnZpZGVvSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKHgocikpe2ZvcihuPXQud2lkdGh8fHJbMF0ubGVuZ3RoLGE9dC5oZWlnaHR8fHIubGVuZ3RoLGg9dC5jaGFubmVscyxoPW0oclswXVswXSk/aHx8clswXVswXS5sZW5ndGg6aHx8MSxvPUouc2hhcGUociksYz0xLGY9MDtmPG8ubGVuZ3RoOysrZiljKj1vW2ZdO2M9WS5hbGxvY1R5cGUoMzYxOTM9PT10LnR5cGU/NTEyNjp0LnR5cGUsYyksSi5mbGF0dGVuKHIsbywiIixjKSx3KHQsYyksdC5hbGlnbm1lbnQ9MSx0LndpZHRoPW4sdC5oZWlnaHQ9YSx0LmNoYW5uZWxzPWgsdC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1zdFtoXSx0Lm5lZWRzRnJlZT0hMH19ZWxzZSB0LndpZHRoPXQud2lkdGh8fDEsdC5oZWlnaHQ9dC5oZWlnaHR8fDEsdC5jaGFubmVscz10LmNoYW5uZWxzfHw0fWZ1bmN0aW9uIGQoZSxyLGksYSxvKXt2YXIgcz1lLmVsZW1lbnQsbD1lLmRhdGEsYz1lLmludGVybmFsZm9ybWF0LHU9ZS5mb3JtYXQsaD1lLnR5cGUscD1lLndpZHRoLGQ9ZS5oZWlnaHQ7ZihlKSxzP3QudGV4U3ViSW1hZ2UyRChyLG8saSxhLHUsaCxzKTplLmNvbXByZXNzZWQ/dC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChyLG8saSxhLGMscCxkLGwpOmUubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4U3ViSW1hZ2UyRChyLG8saSxhLGUueE9mZnNldCxlLnlPZmZzZXQscCxkKSk6dC50ZXhTdWJJbWFnZTJEKHIsbyxpLGEscCxkLHUsaCxsKX1mdW5jdGlvbiB2KCl7cmV0dXJuIGd0LnBvcCgpfHxuZXcgaH1mdW5jdGlvbiBrKHQpe3QubmVlZHNGcmVlJiZZLmZyZWVUeXBlKHQuZGF0YSksaC5jYWxsKHQpLGd0LnB1c2godCl9ZnVuY3Rpb24gTSgpe3MuY2FsbCh0aGlzKSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PTQzNTIsdGhpcy5taXBtYXNrPTAsdGhpcy5pbWFnZXM9QXJyYXkoMTYpfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPXQuaW1hZ2VzWzBdPXYoKTt0Lm1pcG1hc2s9MSxuLndpZHRoPXQud2lkdGg9ZSxuLmhlaWdodD10LmhlaWdodD1yLG4uY2hhbm5lbHM9dC5jaGFubmVscz00fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1udWxsO2lmKF8oZSkpYyhyPXQuaW1hZ2VzWzBdPXYoKSx0KSxwKHIsZSksdC5taXBtYXNrPTE7ZWxzZSBpZih1KHQsZSksQXJyYXkuaXNBcnJheShlLm1pcG1hcCkpZm9yKHZhciBuPWUubWlwbWFwLGk9MDtpPG4ubGVuZ3RoOysraSljKHI9dC5pbWFnZXNbaV09digpLHQpLHIud2lkdGg+Pj1pLHIuaGVpZ2h0Pj49aSxwKHIsbltpXSksdC5taXBtYXNrfD0xPDxpO2Vsc2UgYyhyPXQuaW1hZ2VzWzBdPXYoKSx0KSxwKHIsZSksdC5taXBtYXNrPTE7Yyh0LHQuaW1hZ2VzWzBdKX1mdW5jdGlvbiBFKGUscil7Zm9yKHZhciBpPWUuaW1hZ2VzLGE9MDthPGkubGVuZ3RoJiZpW2FdOysrYSl7dmFyIG89aVthXSxzPXIsbD1hLGM9by5lbGVtZW50LHU9by5kYXRhLGg9by5pbnRlcm5hbGZvcm1hdCxwPW8uZm9ybWF0LGQ9by50eXBlLGc9by53aWR0aCxtPW8uaGVpZ2h0O2YobyksYz90LnRleEltYWdlMkQocyxsLHAscCxkLGMpOm8uY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhJbWFnZTJEKHMsbCxoLGcsbSwwLHUpOm8ubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4SW1hZ2UyRChzLGwscCxvLnhPZmZzZXQsby55T2Zmc2V0LGcsbSwwKSk6dC50ZXhJbWFnZTJEKHMsbCxwLGcsbSwwLHAsZCx1fHxudWxsKX19ZnVuY3Rpb24gQygpe3ZhciB0PW10LnBvcCgpfHxuZXcgTTtzLmNhbGwodCk7Zm9yKHZhciBlPXQubWlwbWFzaz0wOzE2PmU7KytlKXQuaW1hZ2VzW2VdPW51bGw7cmV0dXJuIHR9ZnVuY3Rpb24gTCh0KXtmb3IodmFyIGU9dC5pbWFnZXMscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0mJmsoZVtyXSksZVtyXT1udWxsO210LnB1c2godCl9ZnVuY3Rpb24gSSgpe3RoaXMubWFnRmlsdGVyPXRoaXMubWluRmlsdGVyPTk3MjgsdGhpcy53cmFwVD10aGlzLndyYXBTPTMzMDcxLHRoaXMuYW5pc290cm9waWM9MSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PTQzNTJ9ZnVuY3Rpb24gUCh0LGUpeyJtaW4iaW4gZSYmKHQubWluRmlsdGVyPVZbZS5taW5dLDA8PW90LmluZGV4T2YodC5taW5GaWx0ZXIpJiYhKCJmYWNlcyJpbiBlKSYmKHQuZ2VuTWlwbWFwcz0hMCkpLCJtYWciaW4gZSYmKHQubWFnRmlsdGVyPWpbZS5tYWddKTt2YXIgcj10LndyYXBTLG49dC53cmFwVDtpZigid3JhcCJpbiBlKXt2YXIgaT1lLndyYXA7InN0cmluZyI9PXR5cGVvZiBpP3I9bj1OW2ldOkFycmF5LmlzQXJyYXkoaSkmJihyPU5baVswXV0sbj1OW2lbMV1dKX1lbHNlIndyYXBTImluIGUmJihyPU5bZS53cmFwU10pLCJ3cmFwVCJpbiBlJiYobj1OW2Uud3JhcFRdKTtpZih0LndyYXBTPXIsdC53cmFwVD1uLCJhbmlzb3Ryb3BpYyJpbiBlJiYodC5hbmlzb3Ryb3BpYz1lLmFuaXNvdHJvcGljKSwibWlwbWFwImluIGUpe3N3aXRjaChyPSExLHR5cGVvZiBlLm1pcG1hcCl7Y2FzZSJzdHJpbmciOnQubWlwbWFwSGludD1CW2UubWlwbWFwXSxyPXQuZ2VuTWlwbWFwcz0hMDticmVhaztjYXNlImJvb2xlYW4iOnI9dC5nZW5NaXBtYXBzPWUubWlwbWFwO2JyZWFrO2Nhc2Uib2JqZWN0Ijp0Lmdlbk1pcG1hcHM9ITEscj0hMH0hcnx8Im1pbiJpbiBlfHwodC5taW5GaWx0ZXI9OTk4NCl9fWZ1bmN0aW9uIHoocixuKXt0LnRleFBhcmFtZXRlcmkobiwxMDI0MSxyLm1pbkZpbHRlciksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDAsci5tYWdGaWx0ZXIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQyLHIud3JhcFMpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQzLHIud3JhcFQpLGUuZXh0X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJiZ0LnRleFBhcmFtZXRlcmkobiwzNDA0NixyLmFuaXNvdHJvcGljKSxyLmdlbk1pcG1hcHMmJih0LmhpbnQoMzMxNzAsci5taXBtYXBIaW50KSx0LmdlbmVyYXRlTWlwbWFwKG4pKX1mdW5jdGlvbiBPKGUpe3MuY2FsbCh0aGlzKSx0aGlzLm1pcG1hc2s9MCx0aGlzLmludGVybmFsZm9ybWF0PTY0MDgsdGhpcy5pZD12dCsrLHRoaXMucmVmQ291bnQ9MSx0aGlzLnRhcmdldD1lLHRoaXMudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0aGlzLnVuaXQ9LTEsdGhpcy5iaW5kQ291bnQ9MCx0aGlzLnRleEluZm89bmV3IEksby5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gRChlKXt0LmFjdGl2ZVRleHR1cmUoMzM5ODQpLHQuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKX1mdW5jdGlvbiBSKCl7dmFyIGU9YnRbMF07ZT90LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSk6dC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpfWZ1bmN0aW9uIEYoZSl7dmFyIHI9ZS50ZXh0dXJlLG49ZS51bml0LGk9ZS50YXJnZXQ7MDw9biYmKHQuYWN0aXZlVGV4dHVyZSgzMzk4NCtuKSx0LmJpbmRUZXh0dXJlKGksbnVsbCksYnRbbl09bnVsbCksdC5kZWxldGVUZXh0dXJlKHIpLGUudGV4dHVyZT1udWxsLGUucGFyYW1zPW51bGwsZS5waXhlbHM9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIHl0W2UuaWRdLGEudGV4dHVyZUNvdW50LS19dmFyIEI9eyJkb24ndCBjYXJlIjo0MzUyLCJkb250IGNhcmUiOjQzNTIsbmljZTo0MzU0LGZhc3Q6NDM1M30sTj17cmVwZWF0OjEwNDk3LGNsYW1wOjMzMDcxLG1pcnJvcjozMzY0OH0saj17bmVhcmVzdDo5NzI4LGxpbmVhcjo5NzI5fSxWPVUoe21pcG1hcDo5OTg3LCJuZWFyZXN0IG1pcG1hcCBuZWFyZXN0Ijo5OTg0LCJsaW5lYXIgbWlwbWFwIG5lYXJlc3QiOjk5ODUsIm5lYXJlc3QgbWlwbWFwIGxpbmVhciI6OTk4NiwibGluZWFyIG1pcG1hcCBsaW5lYXIiOjk5ODd9LGopLHE9e25vbmU6MCxicm93c2VyOjM3NDQ0fSxIPXt1aW50ODo1MTIxLHJnYmE0OjMyODE5LHJnYjU2NTozMzYzNSwicmdiNSBhMSI6MzI4MjB9LEc9e2FscGhhOjY0MDYsbHVtaW5hbmNlOjY0MDksImx1bWluYW5jZSBhbHBoYSI6NjQxMCxyZ2I6NjQwNyxyZ2JhOjY0MDgscmdiYTQ6MzI4NTQsInJnYjUgYTEiOjMyODU1LHJnYjU2NTozNjE5NH0sVz17fTtlLmV4dF9zcmdiJiYoRy5zcmdiPTM1OTA0LEcuc3JnYmE9MzU5MDYpLGUub2VzX3RleHR1cmVfZmxvYXQmJihILmZsb2F0MzI9SC5mbG9hdD01MTI2KSxlLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQmJihILmZsb2F0MTY9SFsiaGFsZiBmbG9hdCJdPTM2MTkzKSxlLndlYmdsX2RlcHRoX3RleHR1cmUmJihVKEcse2RlcHRoOjY0MDIsImRlcHRoIHN0ZW5jaWwiOjM0MDQxfSksVShILHt1aW50MTY6NTEyMyx1aW50MzI6NTEyNSwiZGVwdGggc3RlbmNpbCI6MzQwNDJ9KSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyYmVShXLHsicmdiIHMzdGMgZHh0MSI6MzM3NzYsInJnYmEgczN0YyBkeHQxIjozMzc3NywicmdiYSBzM3RjIGR4dDMiOjMzNzc4LCJyZ2JhIHMzdGMgZHh0NSI6MzM3Nzl9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMmJlUoVyx7InJnYiBhdGMiOjM1OTg2LCJyZ2JhIGF0YyBleHBsaWNpdCBhbHBoYSI6MzU5ODcsInJnYmEgYXRjIGludGVycG9sYXRlZCBhbHBoYSI6MzQ3OTh9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyYmVShXLHsicmdiIHB2cnRjIDRicHB2MSI6MzU4NDAsInJnYiBwdnJ0YyAyYnBwdjEiOjM1ODQxLCJyZ2JhIHB2cnRjIDRicHB2MSI6MzU4NDIsInJnYmEgcHZydGMgMmJwcHYxIjozNTg0M30pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEmJihXWyJyZ2IgZXRjMSJdPTM2MTk2KTt2YXIgUT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LmdldFBhcmFtZXRlcigzNDQ2NykpO09iamVjdC5rZXlzKFcpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPVdbdF07MDw9US5pbmRleE9mKGUpJiYoR1t0XT1lKX0pKTt2YXIgJD1PYmplY3Qua2V5cyhHKTtyLnRleHR1cmVGb3JtYXRzPSQ7dmFyIHR0PVtdO09iamVjdC5rZXlzKEcpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3R0W0dbdF1dPXR9KSk7dmFyIGV0PVtdO09iamVjdC5rZXlzKEgpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2V0W0hbdF1dPXR9KSk7dmFyIHJ0PVtdO09iamVjdC5rZXlzKGopLmZvckVhY2goKGZ1bmN0aW9uKHQpe3J0W2pbdF1dPXR9KSk7dmFyIG50PVtdO09iamVjdC5rZXlzKFYpLmZvckVhY2goKGZ1bmN0aW9uKHQpe250W1ZbdF1dPXR9KSk7dmFyIGl0PVtdO09iamVjdC5rZXlzKE4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe2l0W05bdF1dPXR9KSk7dmFyIGF0PSQucmVkdWNlKChmdW5jdGlvbih0LHIpe3ZhciBuPUdbcl07cmV0dXJuIDY0MDk9PT1ufHw2NDA2PT09bnx8NjQwOT09PW58fDY0MTA9PT1ufHw2NDAyPT09bnx8MzQwNDE9PT1ufHxlLmV4dF9zcmdiJiYoMzU5MDQ9PT1ufHwzNTkwNj09PW4pP3Rbbl09bjozMjg1NT09PW58fDA8PXIuaW5kZXhPZigicmdiYSIpP3Rbbl09NjQwODp0W25dPTY0MDcsdH0pLHt9KSxndD1bXSxtdD1bXSx2dD0wLHl0PXt9LHh0PXIubWF4VGV4dHVyZVVuaXRzLGJ0PUFycmF5KHh0KS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KSk7cmV0dXJuIFUoTy5wcm90b3R5cGUse2JpbmQ6ZnVuY3Rpb24oKXt0aGlzLmJpbmRDb3VudCs9MTt2YXIgZT10aGlzLnVuaXQ7aWYoMD5lKXtmb3IodmFyIHI9MDtyPHh0Oysrcil7dmFyIG49YnRbcl07aWYobil7aWYoMDxuLmJpbmRDb3VudCljb250aW51ZTtuLnVuaXQ9LTF9YnRbcl09dGhpcyxlPXI7YnJlYWt9by5wcm9maWxlJiZhLm1heFRleHR1cmVVbml0czxlKzEmJihhLm1heFRleHR1cmVVbml0cz1lKzEpLHRoaXMudW5pdD1lLHQuYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSx0LmJpbmRUZXh0dXJlKHRoaXMudGFyZ2V0LHRoaXMudGV4dHVyZSl9cmV0dXJuIGV9LHVuYmluZDpmdW5jdGlvbigpey0tdGhpcy5iaW5kQ291bnR9LGRlY1JlZjpmdW5jdGlvbigpezA+PS0tdGhpcy5yZWZDb3VudCYmRih0aGlzKX19KSxvLnByb2ZpbGUmJihhLmdldFRvdGFsVGV4dHVyZVNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyh5dCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCs9eXRbZV0uc3RhdHMuc2l6ZX0pKSx0fSkse2NyZWF0ZTJEOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWkudGV4SW5mbztJLmNhbGwocik7dmFyIGE9QygpO3JldHVybiJudW1iZXIiPT10eXBlb2YgdD9BKGEsMHx0LCJudW1iZXIiPT10eXBlb2YgZT8wfGU6MHx0KTp0PyhQKHIsdCksUyhhLHQpKTpBKGEsMSwxKSxyLmdlbk1pcG1hcHMmJihhLm1pcG1hc2s9KGEud2lkdGg8PDEpLTEpLGkubWlwbWFzaz1hLm1pcG1hc2ssYyhpLGEpLGkuaW50ZXJuYWxmb3JtYXQ9YS5pbnRlcm5hbGZvcm1hdCxuLndpZHRoPWEud2lkdGgsbi5oZWlnaHQ9YS5oZWlnaHQsRChpKSxFKGEsMzU1MykseihyLDM1NTMpLFIoKSxMKGEpLG8ucHJvZmlsZSYmKGkuc3RhdHMuc2l6ZT1UKGkuaW50ZXJuYWxmb3JtYXQsaS50eXBlLGEud2lkdGgsYS5oZWlnaHQsci5nZW5NaXBtYXBzLCExKSksbi5mb3JtYXQ9dHRbaS5pbnRlcm5hbGZvcm1hdF0sbi50eXBlPWV0W2kudHlwZV0sbi5tYWc9cnRbci5tYWdGaWx0ZXJdLG4ubWluPW50W3IubWluRmlsdGVyXSxuLndyYXBTPWl0W3Iud3JhcFNdLG4ud3JhcFQ9aXRbci53cmFwVF0sbn12YXIgaT1uZXcgTygzNTUzKTtyZXR1cm4geXRbaS5pZF09aSxhLnRleHR1cmVDb3VudCsrLG4oZSxyKSxuLnN1YmltYWdlPWZ1bmN0aW9uKHQsZSxyLGEpe2V8PTAscnw9MCxhfD0wO3ZhciBvPXYoKTtyZXR1cm4gYyhvLGkpLG8ud2lkdGg9MCxvLmhlaWdodD0wLHAobyx0KSxvLndpZHRoPW8ud2lkdGh8fChpLndpZHRoPj5hKS1lLG8uaGVpZ2h0PW8uaGVpZ2h0fHwoaS5oZWlnaHQ+PmEpLXIsRChpKSxkKG8sMzU1MyxlLHIsYSksUigpLGsobyksbn0sbi5yZXNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgYT0wfGUscz0wfHJ8fGE7aWYoYT09PWkud2lkdGgmJnM9PT1pLmhlaWdodClyZXR1cm4gbjtuLndpZHRoPWkud2lkdGg9YSxuLmhlaWdodD1pLmhlaWdodD1zLEQoaSk7Zm9yKHZhciBsPTA7aS5taXBtYXNrPj5sOysrbCl7dmFyIGM9YT4+bCx1PXM+Pmw7aWYoIWN8fCF1KWJyZWFrO3QudGV4SW1hZ2UyRCgzNTUzLGwsaS5mb3JtYXQsYyx1LDAsaS5mb3JtYXQsaS50eXBlLG51bGwpfXJldHVybiBSKCksby5wcm9maWxlJiYoaS5zdGF0cy5zaXplPVQoaS5pbnRlcm5hbGZvcm1hdCxpLnR5cGUsYSxzLCExLCExKSksbn0sbi5fcmVnbFR5cGU9InRleHR1cmUyZCIsbi5fdGV4dHVyZT1pLG8ucHJvZmlsZSYmKG4uc3RhdHM9aS5zdGF0cyksbi5kZXN0cm95PWZ1bmN0aW9uKCl7aS5kZWNSZWYoKX0sbn0sY3JlYXRlQ3ViZTpmdW5jdGlvbihlLHIsbixpLHMsbCl7ZnVuY3Rpb24gZih0LGUscixuLGksYSl7dmFyIHMsbD1oLnRleEluZm87Zm9yKEkuY2FsbChsKSxzPTA7Nj5zOysrcylnW3NdPUMoKTtpZigibnVtYmVyIiE9dHlwZW9mIHQmJnQpe2lmKCJvYmplY3QiPT10eXBlb2YgdClpZihlKVMoZ1swXSx0KSxTKGdbMV0sZSksUyhnWzJdLHIpLFMoZ1szXSxuKSxTKGdbNF0saSksUyhnWzVdLGEpO2Vsc2UgaWYoUChsLHQpLHUoaCx0KSwiZmFjZXMiaW4gdClmb3IodD10LmZhY2VzLHM9MDs2PnM7KytzKWMoZ1tzXSxoKSxTKGdbc10sdFtzXSk7ZWxzZSBmb3Iocz0wOzY+czsrK3MpUyhnW3NdLHQpfWVsc2UgZm9yKHQ9MHx0fHwxLHM9MDs2PnM7KytzKUEoZ1tzXSx0LHQpO2ZvcihjKGgsZ1swXSksaC5taXBtYXNrPWwuZ2VuTWlwbWFwcz8oZ1swXS53aWR0aDw8MSktMTpnWzBdLm1pcG1hc2ssaC5pbnRlcm5hbGZvcm1hdD1nWzBdLmludGVybmFsZm9ybWF0LGYud2lkdGg9Z1swXS53aWR0aCxmLmhlaWdodD1nWzBdLmhlaWdodCxEKGgpLHM9MDs2PnM7KytzKUUoZ1tzXSwzNDA2OStzKTtmb3IoeihsLDM0MDY3KSxSKCksby5wcm9maWxlJiYoaC5zdGF0cy5zaXplPVQoaC5pbnRlcm5hbGZvcm1hdCxoLnR5cGUsZi53aWR0aCxmLmhlaWdodCxsLmdlbk1pcG1hcHMsITApKSxmLmZvcm1hdD10dFtoLmludGVybmFsZm9ybWF0XSxmLnR5cGU9ZXRbaC50eXBlXSxmLm1hZz1ydFtsLm1hZ0ZpbHRlcl0sZi5taW49bnRbbC5taW5GaWx0ZXJdLGYud3JhcFM9aXRbbC53cmFwU10sZi53cmFwVD1pdFtsLndyYXBUXSxzPTA7Nj5zOysrcylMKGdbc10pO3JldHVybiBmfXZhciBoPW5ldyBPKDM0MDY3KTt5dFtoLmlkXT1oLGEuY3ViZUNvdW50Kys7dmFyIGc9QXJyYXkoNik7cmV0dXJuIGYoZSxyLG4saSxzLGwpLGYuc3ViaW1hZ2U9ZnVuY3Rpb24odCxlLHIsbixpKXtyfD0wLG58PTAsaXw9MDt2YXIgYT12KCk7cmV0dXJuIGMoYSxoKSxhLndpZHRoPTAsYS5oZWlnaHQ9MCxwKGEsZSksYS53aWR0aD1hLndpZHRofHwoaC53aWR0aD4+aSktcixhLmhlaWdodD1hLmhlaWdodHx8KGguaGVpZ2h0Pj5pKS1uLEQoaCksZChhLDM0MDY5K3QscixuLGkpLFIoKSxrKGEpLGZ9LGYucmVzaXplPWZ1bmN0aW9uKGUpe2lmKChlfD0wKSE9PWgud2lkdGgpe2Yud2lkdGg9aC53aWR0aD1lLGYuaGVpZ2h0PWguaGVpZ2h0PWUsRChoKTtmb3IodmFyIHI9MDs2PnI7KytyKWZvcih2YXIgbj0wO2gubWlwbWFzaz4+bjsrK24pdC50ZXhJbWFnZTJEKDM0MDY5K3IsbixoLmZvcm1hdCxlPj5uLGU+Pm4sMCxoLmZvcm1hdCxoLnR5cGUsbnVsbCk7cmV0dXJuIFIoKSxvLnByb2ZpbGUmJihoLnN0YXRzLnNpemU9VChoLmludGVybmFsZm9ybWF0LGgudHlwZSxmLndpZHRoLGYuaGVpZ2h0LCExLCEwKSksZn19LGYuX3JlZ2xUeXBlPSJ0ZXh0dXJlQ3ViZSIsZi5fdGV4dHVyZT1oLG8ucHJvZmlsZSYmKGYuc3RhdHM9aC5zdGF0cyksZi5kZXN0cm95PWZ1bmN0aW9uKCl7aC5kZWNSZWYoKX0sZn0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHh0OysrZSl0LmFjdGl2ZVRleHR1cmUoMzM5ODQrZSksdC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpLGJ0W2VdPW51bGw7Wih5dCkuZm9yRWFjaChGKSxhLmN1YmVDb3VudD0wLGEudGV4dHVyZUNvdW50PTB9LGdldFRleHR1cmU6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHJlc3RvcmU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHh0OysrZSl7dmFyIHI9YnRbZV07ciYmKHIuYmluZENvdW50PTAsci51bml0PS0xLGJ0W2VdPW51bGwpfVooeXQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSk7Zm9yKHZhciByPTA7MzI+cjsrK3IpaWYoMCE9KGUubWlwbWFzayYxPDxyKSlpZigzNTUzPT09ZS50YXJnZXQpdC50ZXhJbWFnZTJEKDM1NTMscixlLmludGVybmFsZm9ybWF0LGUud2lkdGg+PnIsZS5oZWlnaHQ+PnIsMCxlLmludGVybmFsZm9ybWF0LGUudHlwZSxudWxsKTtlbHNlIGZvcih2YXIgbj0wOzY+bjsrK24pdC50ZXhJbWFnZTJEKDM0MDY5K24scixlLmludGVybmFsZm9ybWF0LGUud2lkdGg+PnIsZS5oZWlnaHQ+PnIsMCxlLmludGVybmFsZm9ybWF0LGUudHlwZSxudWxsKTt6KGUudGV4SW5mbyxlLnRhcmdldCl9KSl9fX1mdW5jdGlvbiBNKHQsZSxyLG4saSxhKXtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnRhcmdldD10LHRoaXMudGV4dHVyZT1lLHRoaXMucmVuZGVyYnVmZmVyPXI7dmFyIG49dD0wO2U/KHQ9ZS53aWR0aCxuPWUuaGVpZ2h0KTpyJiYodD1yLndpZHRoLG49ci5oZWlnaHQpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1ufWZ1bmN0aW9uIHModCl7dCYmKHQudGV4dHVyZSYmdC50ZXh0dXJlLl90ZXh0dXJlLmRlY1JlZigpLHQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmRlY1JlZigpKX1mdW5jdGlvbiBsKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5fdGV4dHVyZS5yZWZDb3VudCs9MTp0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLnJlZkNvdW50Kz0xKX1mdW5jdGlvbiBjKGUscil7ciYmKHIudGV4dHVyZT90LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLGUsci50YXJnZXQsci50ZXh0dXJlLl90ZXh0dXJlLnRleHR1cmUsMCk6dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCxlLDM2MTYxLHIucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVuZGVyYnVmZmVyKSl9ZnVuY3Rpb24gdSh0KXt2YXIgZT0zNTUzLHI9bnVsbCxuPW51bGwsaT10O3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmKGk9dC5kYXRhLCJ0YXJnZXQiaW4gdCYmKGU9MHx0LnRhcmdldCkpLCJ0ZXh0dXJlMmQiPT09KHQ9aS5fcmVnbFR5cGUpfHwidGV4dHVyZUN1YmUiPT09dD9yPWk6InJlbmRlcmJ1ZmZlciI9PT10JiYobj1pLGU9MzYxNjEpLG5ldyBvKGUscixuKX1mdW5jdGlvbiBmKHQsZSxyLGEscyl7cmV0dXJuIHI/KCh0PW4uY3JlYXRlMkQoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmEsdHlwZTpzfSkpLl90ZXh0dXJlLnJlZkNvdW50PTAsbmV3IG8oMzU1Myx0LG51bGwpKTooKHQ9aS5jcmVhdGUoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmF9KSkuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudD0wLG5ldyBvKDM2MTYxLG51bGwsdCkpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQmJih0LnRleHR1cmV8fHQucmVuZGVyYnVmZmVyKX1mdW5jdGlvbiBwKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5yZXNpemUoZSxyKTp0LnJlbmRlcmJ1ZmZlciYmdC5yZW5kZXJidWZmZXIucmVzaXplKGUsciksdC53aWR0aD1lLHQuaGVpZ2h0PXIpfWZ1bmN0aW9uIGQoKXt0aGlzLmlkPVQrKyxrW3RoaXMuaWRdPXRoaXMsdGhpcy5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksdGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wLHRoaXMuY29sb3JBdHRhY2htZW50cz1bXSx0aGlzLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9dGhpcy5zdGVuY2lsQXR0YWNobWVudD10aGlzLmRlcHRoQXR0YWNobWVudD1udWxsfWZ1bmN0aW9uIGcodCl7dC5jb2xvckF0dGFjaG1lbnRzLmZvckVhY2gocykscyh0LmRlcHRoQXR0YWNobWVudCkscyh0LnN0ZW5jaWxBdHRhY2htZW50KSxzKHQuZGVwdGhTdGVuY2lsQXR0YWNobWVudCl9ZnVuY3Rpb24gbShlKXt0LmRlbGV0ZUZyYW1lYnVmZmVyKGUuZnJhbWVidWZmZXIpLGUuZnJhbWVidWZmZXI9bnVsbCxhLmZyYW1lYnVmZmVyQ291bnQtLSxkZWxldGUga1tlLmlkXX1mdW5jdGlvbiB2KGUpe3ZhciBuO3QuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGUuZnJhbWVidWZmZXIpO3ZhciBpPWUuY29sb3JBdHRhY2htZW50cztmb3Iobj0wO248aS5sZW5ndGg7KytuKWMoMzYwNjQrbixpW25dKTtmb3Iobj1pLmxlbmd0aDtuPHIubWF4Q29sb3JBdHRhY2htZW50czsrK24pdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCtuLDM1NTMsbnVsbCwwKTt0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MTI4LDM1NTMsbnVsbCwwKSxjKDM2MDk2LGUuZGVwdGhBdHRhY2htZW50KSxjKDM2MTI4LGUuc3RlbmNpbEF0dGFjaG1lbnQpLGMoMzMzMDYsZS5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KSx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApLHQuaXNDb250ZXh0TG9zdCgpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHgubmV4dD94Lm5leHQuZnJhbWVidWZmZXI6bnVsbCkseC5jdXI9eC5uZXh0LHQuZ2V0RXJyb3IoKX1mdW5jdGlvbiB5KHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciBpLGE9MCxvPTAscz0hMCxjPSEwO2k9bnVsbDt2YXIgcD0hMCxkPSJyZ2JhIixtPSJ1aW50OCIseT0xLHg9bnVsbCx3PW51bGwsVD1udWxsLGs9ITE7Im51bWJlciI9PXR5cGVvZiB0PyhhPTB8dCxvPTB8ZXx8YSk6dD8oInNoYXBlImluIHQ/KGE9KG89dC5zaGFwZSlbMF0sbz1vWzFdKTooInJhZGl1cyJpbiB0JiYoYT1vPXQucmFkaXVzKSwid2lkdGgiaW4gdCYmKGE9dC53aWR0aCksImhlaWdodCJpbiB0JiYobz10LmhlaWdodCkpLCgiY29sb3IiaW4gdHx8ImNvbG9ycyJpbiB0KSYmKGk9dC5jb2xvcnx8dC5jb2xvcnMsQXJyYXkuaXNBcnJheShpKSksaXx8KCJjb2xvckNvdW50ImluIHQmJih5PTB8dC5jb2xvckNvdW50KSwiY29sb3JUZXh0dXJlImluIHQmJihwPSEhdC5jb2xvclRleHR1cmUsZD0icmdiYTQiKSwiY29sb3JUeXBlImluIHQmJihtPXQuY29sb3JUeXBlLCFwKSYmKCJoYWxmIGZsb2F0Ij09PW18fCJmbG9hdDE2Ij09PW0/ZD0icmdiYTE2ZiI6ImZsb2F0IiE9PW0mJiJmbG9hdDMyIiE9PW18fChkPSJyZ2JhMzJmIikpLCJjb2xvckZvcm1hdCJpbiB0JiYoZD10LmNvbG9yRm9ybWF0LDA8PWIuaW5kZXhPZihkKT9wPSEwOjA8PV8uaW5kZXhPZihkKSYmKHA9ITEpKSksKCJkZXB0aFRleHR1cmUiaW4gdHx8ImRlcHRoU3RlbmNpbFRleHR1cmUiaW4gdCkmJihrPSEoIXQuZGVwdGhUZXh0dXJlJiYhdC5kZXB0aFN0ZW5jaWxUZXh0dXJlKSksImRlcHRoImluIHQmJigiYm9vbGVhbiI9PXR5cGVvZiB0LmRlcHRoP3M9dC5kZXB0aDooeD10LmRlcHRoLGM9ITEpKSwic3RlbmNpbCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5zdGVuY2lsP2M9dC5zdGVuY2lsOih3PXQuc3RlbmNpbCxzPSExKSksImRlcHRoU3RlbmNpbCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5kZXB0aFN0ZW5jaWw/cz1jPXQuZGVwdGhTdGVuY2lsOihUPXQuZGVwdGhTdGVuY2lsLGM9cz0hMSkpKTphPW89MTt2YXIgTT1udWxsLEE9bnVsbCxTPW51bGwsRT1udWxsO2lmKEFycmF5LmlzQXJyYXkoaSkpTT1pLm1hcCh1KTtlbHNlIGlmKGkpTT1bdShpKV07ZWxzZSBmb3IoTT1BcnJheSh5KSxpPTA7aTx5OysraSlNW2ldPWYoYSxvLHAsZCxtKTtmb3IoYT1hfHxNWzBdLndpZHRoLG89b3x8TVswXS5oZWlnaHQseD9BPXUoeCk6cyYmIWMmJihBPWYoYSxvLGssImRlcHRoIiwidWludDMyIikpLHc/Uz11KHcpOmMmJiFzJiYoUz1mKGEsbywhMSwic3RlbmNpbCIsInVpbnQ4IikpLFQ/RT11KFQpOiF4JiYhdyYmYyYmcyYmKEU9ZihhLG8saywiZGVwdGggc3RlbmNpbCIsImRlcHRoIHN0ZW5jaWwiKSkscz1udWxsLGk9MDtpPE0ubGVuZ3RoOysraSlsKE1baV0pLE1baV0mJk1baV0udGV4dHVyZSYmKGM9YnRbTVtpXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdF0qX3RbTVtpXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGVdLG51bGw9PT1zJiYocz1jKSk7cmV0dXJuIGwoQSksbChTKSxsKEUpLGcobiksbi53aWR0aD1hLG4uaGVpZ2h0PW8sbi5jb2xvckF0dGFjaG1lbnRzPU0sbi5kZXB0aEF0dGFjaG1lbnQ9QSxuLnN0ZW5jaWxBdHRhY2htZW50PVMsbi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PUUsci5jb2xvcj1NLm1hcChoKSxyLmRlcHRoPWgoQSksci5zdGVuY2lsPWgoUyksci5kZXB0aFN0ZW5jaWw9aChFKSxyLndpZHRoPW4ud2lkdGgsci5oZWlnaHQ9bi5oZWlnaHQsdihuKSxyfXZhciBuPW5ldyBkO3JldHVybiBhLmZyYW1lYnVmZmVyQ291bnQrKyxyKHQsZSksVShyLHtyZXNpemU6ZnVuY3Rpb24odCxlKXt2YXIgaT1NYXRoLm1heCgwfHQsMSksYT1NYXRoLm1heCgwfGV8fGksMSk7aWYoaT09PW4ud2lkdGgmJmE9PT1uLmhlaWdodClyZXR1cm4gcjtmb3IodmFyIG89bi5jb2xvckF0dGFjaG1lbnRzLHM9MDtzPG8ubGVuZ3RoOysrcylwKG9bc10saSxhKTtyZXR1cm4gcChuLmRlcHRoQXR0YWNobWVudCxpLGEpLHAobi5zdGVuY2lsQXR0YWNobWVudCxpLGEpLHAobi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LGksYSksbi53aWR0aD1yLndpZHRoPWksbi5oZWlnaHQ9ci5oZWlnaHQ9YSx2KG4pLHJ9LF9yZWdsVHlwZToiZnJhbWVidWZmZXIiLF9mcmFtZWJ1ZmZlcjpuLGRlc3Ryb3k6ZnVuY3Rpb24oKXttKG4pLGcobil9LHVzZTpmdW5jdGlvbih0KXt4LnNldEZCTyh7ZnJhbWVidWZmZXI6cn0sdCl9fSl9dmFyIHg9e2N1cjpudWxsLG5leHQ6bnVsbCxkaXJ0eTohMSxzZXRGQk86bnVsbH0sYj1bInJnYmEiXSxfPVsicmdiYTQiLCJyZ2I1NjUiLCJyZ2I1IGExIl07ZS5leHRfc3JnYiYmXy5wdXNoKCJzcmdiYSIpLGUuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JiZfLnB1c2goInJnYmExNmYiLCJyZ2IxNmYiKSxlLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCYmXy5wdXNoKCJyZ2JhMzJmIik7dmFyIHc9WyJ1aW50OCJdO2Uub2VzX3RleHR1cmVfaGFsZl9mbG9hdCYmdy5wdXNoKCJoYWxmIGZsb2F0IiwiZmxvYXQxNiIpLGUub2VzX3RleHR1cmVfZmxvYXQmJncucHVzaCgiZmxvYXQiLCJmbG9hdDMyIik7dmFyIFQ9MCxrPXt9O3JldHVybiBVKHgse2dldEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYiZnJhbWVidWZmZXIiPT09dC5fcmVnbFR5cGUmJih0PXQuX2ZyYW1lYnVmZmVyKWluc3RhbmNlb2YgZD90Om51bGx9LGNyZWF0ZTp5LGNyZWF0ZUN1YmU6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgaSxhPXtjb2xvcjpudWxsfSxvPTAscz1udWxsO2k9InJnYmEiO3ZhciBsPSJ1aW50OCIsYz0xO2lmKCJudW1iZXIiPT10eXBlb2YgdD9vPTB8dDp0Pygic2hhcGUiaW4gdD9vPXQuc2hhcGVbMF06KCJyYWRpdXMiaW4gdCYmKG89MHx0LnJhZGl1cyksIndpZHRoImluIHQ/bz0wfHQud2lkdGg6ImhlaWdodCJpbiB0JiYobz0wfHQuaGVpZ2h0KSksKCJjb2xvciJpbiB0fHwiY29sb3JzImluIHQpJiYocz10LmNvbG9yfHx0LmNvbG9ycyxBcnJheS5pc0FycmF5KHMpKSxzfHwoImNvbG9yQ291bnQiaW4gdCYmKGM9MHx0LmNvbG9yQ291bnQpLCJjb2xvclR5cGUiaW4gdCYmKGw9dC5jb2xvclR5cGUpLCJjb2xvckZvcm1hdCJpbiB0JiYoaT10LmNvbG9yRm9ybWF0KSksImRlcHRoImluIHQmJihhLmRlcHRoPXQuZGVwdGgpLCJzdGVuY2lsImluIHQmJihhLnN0ZW5jaWw9dC5zdGVuY2lsKSwiZGVwdGhTdGVuY2lsImluIHQmJihhLmRlcHRoU3RlbmNpbD10LmRlcHRoU3RlbmNpbCkpOm89MSxzKWlmKEFycmF5LmlzQXJyYXkocykpZm9yKHQ9W10saT0wO2k8cy5sZW5ndGg7KytpKXRbaV09c1tpXTtlbHNlIHQ9W3NdO2Vsc2UgZm9yKHQ9QXJyYXkoYykscz17cmFkaXVzOm8sZm9ybWF0OmksdHlwZTpsfSxpPTA7aTxjOysraSl0W2ldPW4uY3JlYXRlQ3ViZShzKTtmb3IoYS5jb2xvcj1BcnJheSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7KytpKWM9dFtpXSxvPW98fGMud2lkdGgsYS5jb2xvcltpXT17dGFyZ2V0OjM0MDY5LGRhdGE6dFtpXX07Zm9yKGk9MDs2Pmk7KytpKXtmb3IoYz0wO2M8dC5sZW5ndGg7KytjKWEuY29sb3JbY10udGFyZ2V0PTM0MDY5K2k7MDxpJiYoYS5kZXB0aD1yWzBdLmRlcHRoLGEuc3RlbmNpbD1yWzBdLnN0ZW5jaWwsYS5kZXB0aFN0ZW5jaWw9clswXS5kZXB0aFN0ZW5jaWwpLHJbaV0/cltpXShhKTpyW2ldPXkoYSl9cmV0dXJuIFUoZSx7d2lkdGg6byxoZWlnaHQ6byxjb2xvcjp0fSl9dmFyIHI9QXJyYXkoNik7cmV0dXJuIGUodCksVShlLHtmYWNlczpyLHJlc2l6ZTpmdW5jdGlvbih0KXt2YXIgbj0wfHQ7aWYobj09PWUud2lkdGgpcmV0dXJuIGU7dmFyIGk9ZS5jb2xvcjtmb3IodD0wO3Q8aS5sZW5ndGg7Kyt0KWlbdF0ucmVzaXplKG4pO2Zvcih0PTA7Nj50OysrdClyW3RdLnJlc2l6ZShuKTtyZXR1cm4gZS53aWR0aD1lLmhlaWdodD1uLGV9LF9yZWdsVHlwZToiZnJhbWVidWZmZXJDdWJlIixkZXN0cm95OmZ1bmN0aW9uKCl7ci5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pKX19KX0sY2xlYXI6ZnVuY3Rpb24oKXtaKGspLmZvckVhY2gobSl9LHJlc3RvcmU6ZnVuY3Rpb24oKXt4LmN1cj1udWxsLHgubmV4dD1udWxsLHguZGlydHk9ITAsWihrKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmZyYW1lYnVmZmVyPXQuY3JlYXRlRnJhbWVidWZmZXIoKSx2KGUpfSkpfX0pfWZ1bmN0aW9uIEEoKXt0aGlzLnc9dGhpcy56PXRoaXMueT10aGlzLng9dGhpcy5zdGF0ZT0wLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5zaXplPTAsdGhpcy5ub3JtYWxpemVkPSExLHRoaXMudHlwZT01MTI2LHRoaXMuZGl2aXNvcj10aGlzLnN0cmlkZT10aGlzLm9mZnNldD0wfWZ1bmN0aW9uIFModCxlLHIsbixpKXtmdW5jdGlvbiBhKCl7dGhpcy5pZD0rK2MsdGhpcy5hdHRyaWJ1dGVzPVtdO3ZhciB0PWUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q7dGhpcy52YW89dD90LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk6bnVsbCx1W3RoaXMuaWRdPXRoaXMsdGhpcy5idWZmZXJzPVtdfXZhciBvPXIubWF4QXR0cmlidXRlcyxzPUFycmF5KG8pO2ZvcihyPTA7cjxvOysrcilzW3JdPW5ldyBBO3ZhciBjPTAsdT17fSxmPXtSZWNvcmQ6QSxzY29wZTp7fSxzdGF0ZTpzLGN1cnJlbnRWQU86bnVsbCx0YXJnZXRWQU86bnVsbCxyZXN0b3JlOmUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q/ZnVuY3Rpb24oKXtlLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0JiZaKHUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSkpfTpmdW5jdGlvbigpe30sY3JlYXRlVkFPOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBuPTA7bjxyLmJ1ZmZlcnMubGVuZ3RoOysrbilyLmJ1ZmZlcnNbbl0uZGVzdHJveSgpO3IuYnVmZmVycy5sZW5ndGg9MCwobj1yLmF0dHJpYnV0ZXMpLmxlbmd0aD10Lmxlbmd0aDtmb3IodmFyIGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIG89dFthXSxzPW5bYV09bmV3IEE7QXJyYXkuaXNBcnJheShvKXx8WChvKXx8bChvKT8obz1pLmNyZWF0ZShvLDM0OTYyLCExLCEwKSxzLmJ1ZmZlcj1pLmdldEJ1ZmZlcihvKSxzLnNpemU9MHxzLmJ1ZmZlci5kaW1lbnNpb24scy5ub3JtYWxpemVkPSExLHMudHlwZT1zLmJ1ZmZlci5kdHlwZSxzLm9mZnNldD0wLHMuc3RyaWRlPTAscy5kaXZpc29yPTAscy5zdGF0ZT0xLHIuYnVmZmVycy5wdXNoKG8pKTppLmdldEJ1ZmZlcihvKT8ocy5idWZmZXI9aS5nZXRCdWZmZXIobykscy5zaXplPTB8cy5idWZmZXIuZGltZW5zaW9uLHMubm9ybWFsaXplZD0hMSxzLnR5cGU9cy5idWZmZXIuZHR5cGUscy5vZmZzZXQ9MCxzLnN0cmlkZT0wLHMuZGl2aXNvcj0wLHMuc3RhdGU9MSk6aS5nZXRCdWZmZXIoby5idWZmZXIpPyhzLmJ1ZmZlcj1pLmdldEJ1ZmZlcihvLmJ1ZmZlcikscy5zaXplPTB8KCtvLnNpemV8fHMuYnVmZmVyLmRpbWVuc2lvbikscy5ub3JtYWxpemVkPSEhby5ub3JtYWxpemVkfHwhMSxzLnR5cGU9InR5cGUiaW4gbz9RW28udHlwZV06cy5idWZmZXIuZHR5cGUscy5vZmZzZXQ9MHwoby5vZmZzZXR8fDApLHMuc3RyaWRlPTB8KG8uc3RyaWRlfHwwKSxzLmRpdmlzb3I9MHwoby5kaXZpc29yfHwwKSxzLnN0YXRlPTEpOiJ4ImluIG8mJihzLng9K28ueHx8MCxzLnk9K28ueXx8MCxzLno9K28uenx8MCxzLnc9K28ud3x8MCxzLnN0YXRlPTIpfXJldHVybiByLnJlZnJlc2goKSxlfXZhciByPW5ldyBhO3JldHVybiBuLnZhb0NvdW50Kz0xLGUuZGVzdHJveT1mdW5jdGlvbigpe3IuZGVzdHJveSgpfSxlLl92YW89cixlLl9yZWdsVHlwZT0idmFvIixlKHQpfSxnZXRWQU86ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX3Zhbz90Ll92YW86bnVsbH0sZGVzdHJveUJ1ZmZlcjpmdW5jdGlvbihlKXtmb3IodmFyIHI9MDtyPHMubGVuZ3RoOysrcil7dmFyIG49c1tyXTtuLmJ1ZmZlcj09PWUmJih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShyKSxuLmJ1ZmZlcj1udWxsKX19LHNldFZBTzplLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0P2Z1bmN0aW9uKHQpe2lmKHQhPT1mLmN1cnJlbnRWQU8pe3ZhciByPWUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q7dD9yLmJpbmRWZXJ0ZXhBcnJheU9FUyh0LnZhbyk6ci5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCksZi5jdXJyZW50VkFPPXR9fTpmdW5jdGlvbihyKXtpZihyIT09Zi5jdXJyZW50VkFPKXtpZihyKXIuYmluZEF0dHJzKCk7ZWxzZSBmb3IodmFyIG49ZS5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLGk9MDtpPHMubGVuZ3RoOysraSl7dmFyIGE9c1tpXTthLmJ1ZmZlcj8odC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSxhLnNpemUsYS50eXBlLGEubm9ybWFsaXplZCxhLnN0cmlkZSxhLm9mZmZzZXQpLG4mJm4udmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGksYS5kaXZpc29yKSk6KHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpLHQudmVydGV4QXR0cmliNGYoaSxhLngsYS55LGEueixhLncpKX1mLmN1cnJlbnRWQU89cn19LGNsZWFyOmUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q/ZnVuY3Rpb24oKXtaKHUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSkpfTpmdW5jdGlvbigpe319O3JldHVybiBhLnByb3RvdHlwZS5iaW5kQXR0cnM9ZnVuY3Rpb24oKXtmb3IodmFyIHI9ZS5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLG49dGhpcy5hdHRyaWJ1dGVzLGk9MDtpPG4ubGVuZ3RoOysraSl7dmFyIGE9bltpXTthLmJ1ZmZlcj8odC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LmJpbmRCdWZmZXIoMzQ5NjIsYS5idWZmZXIuYnVmZmVyKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSxhLnNpemUsYS50eXBlLGEubm9ybWFsaXplZCxhLnN0cmlkZSxhLm9mZnNldCksciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaSxhLmRpdmlzb3IpKToodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC52ZXJ0ZXhBdHRyaWI0ZihpLGEueCxhLnksYS56LGEudykpfWZvcihyPW4ubGVuZ3RoO3I8bzsrK3IpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocil9LGEucHJvdG90eXBlLnJlZnJlc2g9ZnVuY3Rpb24oKXt2YXIgdD1lLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0O3QmJih0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyksdGhpcy5iaW5kQXR0cnMoKSxmLmN1cnJlbnRWQU89dGhpcyl9LGEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLnZhbyl7dmFyIHQ9ZS5vZXNfdmVydGV4X2FycmF5X29iamVjdDt0aGlzPT09Zi5jdXJyZW50VkFPJiYoZi5jdXJyZW50VkFPPW51bGwsdC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCkpLHQuZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy52YW8pLHRoaXMudmFvPW51bGx9dVt0aGlzLmlkXSYmKGRlbGV0ZSB1W3RoaXMuaWRdLC0tbi52YW9Db3VudCl9LGZ9ZnVuY3Rpb24gRSh0LGUscixuKXtmdW5jdGlvbiBpKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMuaWQ9ZSx0aGlzLmxvY2F0aW9uPXIsdGhpcy5pbmZvPW59ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKHRbcl0uaWQ9PT1lLmlkKXJldHVybiB2b2lkKHRbcl0ubG9jYXRpb249ZS5sb2NhdGlvbik7dC5wdXNoKGUpfWZ1bmN0aW9uIG8ocixuLGkpe2lmKCEobz0oaT0zNTYzMj09PXI/Yzp1KVtuXSkpe3ZhciBhPWUuc3RyKG4pLG89dC5jcmVhdGVTaGFkZXIocik7dC5zaGFkZXJTb3VyY2UobyxhKSx0LmNvbXBpbGVTaGFkZXIobyksaVtuXT1vfXJldHVybiBvfWZ1bmN0aW9uIHModCxlKXt0aGlzLmlkPXArKyx0aGlzLmZyYWdJZD10LHRoaXMudmVydElkPWUsdGhpcy5wcm9ncmFtPW51bGwsdGhpcy51bmlmb3Jtcz1bXSx0aGlzLmF0dHJpYnV0ZXM9W10sbi5wcm9maWxlJiYodGhpcy5zdGF0cz17dW5pZm9ybXNDb3VudDowLGF0dHJpYnV0ZXNDb3VudDowfSl9ZnVuY3Rpb24gbChyLHMsbCl7dmFyIGM7Yz1vKDM1NjMyLHIuZnJhZ0lkKTt2YXIgdT1vKDM1NjMzLHIudmVydElkKTtpZihzPXIucHJvZ3JhbT10LmNyZWF0ZVByb2dyYW0oKSx0LmF0dGFjaFNoYWRlcihzLGMpLHQuYXR0YWNoU2hhZGVyKHMsdSksbClmb3IoYz0wO2M8bC5sZW5ndGg7KytjKXU9bFtjXSx0LmJpbmRBdHRyaWJMb2NhdGlvbihzLHVbMF0sdVsxXSk7dC5saW5rUHJvZ3JhbShzKSx1PXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLDM1NzE4KSxuLnByb2ZpbGUmJihyLnN0YXRzLnVuaWZvcm1zQ291bnQ9dSk7dmFyIGY9ci51bmlmb3Jtcztmb3IoYz0wO2M8dTsrK2MpaWYobD10LmdldEFjdGl2ZVVuaWZvcm0ocyxjKSlpZigxPGwuc2l6ZSlmb3IodmFyIGg9MDtoPGwuc2l6ZTsrK2gpe3ZhciBwPWwubmFtZS5yZXBsYWNlKCJbMF0iLCJbIitoKyJdIik7YShmLG5ldyBpKHAsZS5pZChwKSx0LmdldFVuaWZvcm1Mb2NhdGlvbihzLHApLGwpKX1lbHNlIGEoZixuZXcgaShsLm5hbWUsZS5pZChsLm5hbWUpLHQuZ2V0VW5pZm9ybUxvY2F0aW9uKHMsbC5uYW1lKSxsKSk7Zm9yKHU9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHMsMzU3MjEpLG4ucHJvZmlsZSYmKHIuc3RhdHMuYXR0cmlidXRlc0NvdW50PXUpLHI9ci5hdHRyaWJ1dGVzLGM9MDtjPHU7KytjKShsPXQuZ2V0QWN0aXZlQXR0cmliKHMsYykpJiZhKHIsbmV3IGkobC5uYW1lLGUuaWQobC5uYW1lKSx0LmdldEF0dHJpYkxvY2F0aW9uKHMsbC5uYW1lKSxsKSl9dmFyIGM9e30sdT17fSxmPXt9LGg9W10scD0wO3JldHVybiBuLnByb2ZpbGUmJihyLmdldE1heFVuaWZvcm1zQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBoLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Uuc3RhdHMudW5pZm9ybXNDb3VudD50JiYodD1lLnN0YXRzLnVuaWZvcm1zQ291bnQpfSkpLHR9LHIuZ2V0TWF4QXR0cmlidXRlc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gaC5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnN0YXRzLmF0dHJpYnV0ZXNDb3VudD50JiYodD1lLnN0YXRzLmF0dHJpYnV0ZXNDb3VudCl9KSksdH0pLHtjbGVhcjpmdW5jdGlvbigpe3ZhciBlPXQuZGVsZXRlU2hhZGVyLmJpbmQodCk7WihjKS5mb3JFYWNoKGUpLGM9e30sWih1KS5mb3JFYWNoKGUpLHU9e30saC5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmRlbGV0ZVByb2dyYW0oZS5wcm9ncmFtKX0pKSxoLmxlbmd0aD0wLGY9e30sci5zaGFkZXJDb3VudD0wfSxwcm9ncmFtOmZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPWZbZV07YXx8KGE9ZltlXT17fSk7dmFyIG89YVt0XTtyZXR1cm4gbyYmIWk/bzooZT1uZXcgcyhlLHQpLHIuc2hhZGVyQ291bnQrKyxsKGUsbixpKSxvfHwoYVt0XT1lKSxoLnB1c2goZSksZSl9LHJlc3RvcmU6ZnVuY3Rpb24oKXtjPXt9LHU9e307Zm9yKHZhciB0PTA7dDxoLmxlbmd0aDsrK3QpbChoW3RdLG51bGwsaFt0XS5hdHRyaWJ1dGVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW3QubG9jYXRpb24sdC5uYW1lXX0pKSl9LHNoYWRlcjpvLGZyYWc6LTEsdmVydDotMX19ZnVuY3Rpb24gQyh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKGkpe3ZhciBhO2E9bnVsbD09PWUubmV4dD81MTIxOmUubmV4dC5jb2xvckF0dGFjaG1lbnRzWzBdLnRleHR1cmUuX3RleHR1cmUudHlwZTt2YXIgbz0wLHM9MCxsPW4uZnJhbWVidWZmZXJXaWR0aCxjPW4uZnJhbWVidWZmZXJIZWlnaHQsdT1udWxsO3JldHVybiBYKGkpP3U9aTppJiYobz0wfGkueCxzPTB8aS55LGw9MHwoaS53aWR0aHx8bi5mcmFtZWJ1ZmZlcldpZHRoLW8pLGM9MHwoaS5oZWlnaHR8fG4uZnJhbWVidWZmZXJIZWlnaHQtcyksdT1pLmRhdGF8fG51bGwpLHIoKSxpPWwqYyo0LHV8fCg1MTIxPT09YT91PW5ldyBVaW50OEFycmF5KGkpOjUxMjY9PT1hJiYodT11fHxuZXcgRmxvYXQzMkFycmF5KGkpKSksdC5waXhlbFN0b3JlaSgzMzMzLDQpLHQucmVhZFBpeGVscyhvLHMsbCxjLDY0MDgsYSx1KSx1fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZyYW1lYnVmZmVyImluIHQ/ZnVuY3Rpb24odCl7dmFyIHI7cmV0dXJuIGUuc2V0RkJPKHtmcmFtZWJ1ZmZlcjp0LmZyYW1lYnVmZmVyfSwoZnVuY3Rpb24oKXtyPXModCl9KSkscn0odCk6cyh0KX19ZnVuY3Rpb24gTCh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCl9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gTCh0KS5qb2luKCIiKX1mdW5jdGlvbiBQKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PVtdLGU9W107cmV0dXJuIFUoKGZ1bmN0aW9uKCl7dC5wdXNoLmFwcGx5KHQsTChhcmd1bWVudHMpKX0pLHtkZWY6ZnVuY3Rpb24oKXt2YXIgbj0idiIrcisrO3JldHVybiBlLnB1c2gobiksMDxhcmd1bWVudHMubGVuZ3RoJiYodC5wdXNoKG4sIj0iKSx0LnB1c2guYXBwbHkodCxMKGFyZ3VtZW50cykpLHQucHVzaCgiOyIpKSxufSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBJKFswPGUubGVuZ3RoPyJ2YXIgIitlLmpvaW4oIiwiKSsiOyI6IiIsSSh0KV0pfX0pfWZ1bmN0aW9uIGUoKXtmdW5jdGlvbiBlKHQsZSl7bih0LGUsIj0iLHIuZGVmKHQsZSksIjsiKX12YXIgcj10KCksbj10KCksaT1yLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gVSgoZnVuY3Rpb24oKXtyLmFwcGx5KHIsTChhcmd1bWVudHMpKX0pLHtkZWY6ci5kZWYsZW50cnk6cixleGl0Om4sc2F2ZTplLHNldDpmdW5jdGlvbih0LG4saSl7ZSh0LG4pLHIodCxuLCI9IixpLCI7Iil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIGkoKSthKCl9fSl9dmFyIHI9MCxuPVtdLGk9W10sYT10KCksbz17fTtyZXR1cm57Z2xvYmFsOmEsbGluazpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGkubGVuZ3RoOysrZSlpZihpW2VdPT09dClyZXR1cm4gbltlXTtyZXR1cm4gZT0iZyIrcisrLG4ucHVzaChlKSxpLnB1c2godCksZX0sYmxvY2s6dCxwcm9jOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3ZhciB0PSJhIitpLmxlbmd0aDtyZXR1cm4gaS5wdXNoKHQpLHR9dmFyIGk9W107cj1yfHwwO2Zvcih2YXIgYT0wO2E8cjsrK2EpbigpO3ZhciBzPShhPWUoKSkudG9TdHJpbmc7cmV0dXJuIG9bdF09VShhLHthcmc6bix0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBJKFsiZnVuY3Rpb24oIixpLmpvaW4oKSwiKXsiLHMoKSwifSJdKX19KX0sc2NvcGU6ZSxjb25kOmZ1bmN0aW9uKCl7dmFyIHQ9SShhcmd1bWVudHMpLHI9ZSgpLG49ZSgpLGk9ci50b1N0cmluZyxhPW4udG9TdHJpbmc7cmV0dXJuIFUocix7dGhlbjpmdW5jdGlvbigpe3JldHVybiByLmFwcGx5KHIsTChhcmd1bWVudHMpKSx0aGlzfSxlbHNlOmZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkobixMKGFyZ3VtZW50cykpLHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9YSgpO3JldHVybiBlJiYoZT0iZWxzZXsiK2UrIn0iKSxJKFsiaWYoIix0LCIpeyIsaSgpLCJ9IixlXSl9fSl9LGNvbXBpbGU6ZnVuY3Rpb24oKXt2YXIgdD1bJyJ1c2Ugc3RyaWN0IjsnLGEsInJldHVybiB7Il07T2JqZWN0LmtleXMobykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKCciJyxlLCciOicsb1tlXS50b1N0cmluZygpLCIsIil9KSksdC5wdXNoKCJ9Iik7dmFyIGU9SSh0KS5yZXBsYWNlKC87L2csIjtcbiIpLnJlcGxhY2UoL30vZywifVxuIikucmVwbGFjZSgvey9nLCJ7XG4iKTtyZXR1cm4gRnVuY3Rpb24uYXBwbHkobnVsbCxuLmNvbmNhdChlKSkuYXBwbHkobnVsbCxpKX19fWZ1bmN0aW9uIHoodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFgodCl8fGwodCl9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gdC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiJ2aWV3cG9ydCI9PT10Py0xOiJ2aWV3cG9ydCI9PT1lPzE6dDxlPy0xOjF9KSl9ZnVuY3Rpb24gRCh0LGUscixuKXt0aGlzLnRoaXNEZXA9dCx0aGlzLmNvbnRleHREZXA9ZSx0aGlzLnByb3BEZXA9cix0aGlzLmFwcGVuZD1ufWZ1bmN0aW9uIFIodCl7cmV0dXJuIHQmJiEodC50aGlzRGVwfHx0LmNvbnRleHREZXB8fHQucHJvcERlcCl9ZnVuY3Rpb24gRih0KXtyZXR1cm4gbmV3IEQoITEsITEsITEsdCl9ZnVuY3Rpb24gQih0LGUpe3ZhciByPXQudHlwZTtyZXR1cm4gMD09PXI/bmV3IEQoITAsMTw9KHI9dC5kYXRhLmxlbmd0aCksMjw9cixlKTo0PT09cj9uZXcgRCgocj10LmRhdGEpLnRoaXNEZXAsci5jb250ZXh0RGVwLHIucHJvcERlcCxlKTpuZXcgRCgzPT09ciwyPT09ciwxPT09cixlKX1mdW5jdGlvbiBOKHQsZSxyLG4saSxvLHMsbCxjLHUsZixoLHAsZCxnKXtmdW5jdGlvbiB2KHQpe3JldHVybiB0LnJlcGxhY2UoIi4iLCJfIil9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49dih0KTtydC5wdXNoKHQpLGV0W25dPXR0W25dPSEhcixpdFtuXT1lfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPXYodCk7cnQucHVzaCh0KSxBcnJheS5pc0FycmF5KHIpPyh0dFtuXT1yLnNsaWNlKCksZXRbbl09ci5zbGljZSgpKTp0dFtuXT1ldFtuXT1yLGF0W25dPWV9ZnVuY3Rpb24gYigpe3ZhciB0PVAoKSxyPXQubGluayxuPXQuZ2xvYmFsO3QuaWQ9bHQrKyx0LmJhdGNoSWQ9IjAiO3ZhciBpPXIob3QpLGE9dC5zaGFyZWQ9e3Byb3BzOiJhMCJ9O09iamVjdC5rZXlzKG90KS5mb3JFYWNoKChmdW5jdGlvbih0KXthW3RdPW4uZGVmKGksIi4iLHQpfSkpO3ZhciBvPXQubmV4dD17fSxzPXQuY3VycmVudD17fTtPYmplY3Qua2V5cyhhdCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0dFt0XSkmJihvW3RdPW4uZGVmKGEubmV4dCwiLiIsdCksc1t0XT1uLmRlZihhLmN1cnJlbnQsIi4iLHQpKX0pKTt2YXIgbD10LmNvbnN0YW50cz17fTtPYmplY3Qua2V5cyhzdCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7bFt0XT1uLmRlZihKU09OLnN0cmluZ2lmeShzdFt0XSkpfSkpLHQuaW52b2tlPWZ1bmN0aW9uKGUsbil7c3dpdGNoKG4udHlwZSl7Y2FzZSAwOnZhciBpPVsidGhpcyIsYS5jb250ZXh0LGEucHJvcHMsdC5iYXRjaElkXTtyZXR1cm4gZS5kZWYocihuLmRhdGEpLCIuY2FsbCgiLGkuc2xpY2UoMCxNYXRoLm1heChuLmRhdGEubGVuZ3RoKzEsNCkpLCIpIik7Y2FzZSAxOnJldHVybiBlLmRlZihhLnByb3BzLG4uZGF0YSk7Y2FzZSAyOnJldHVybiBlLmRlZihhLmNvbnRleHQsbi5kYXRhKTtjYXNlIDM6cmV0dXJuIGUuZGVmKCJ0aGlzIixuLmRhdGEpO2Nhc2UgNDpyZXR1cm4gbi5kYXRhLmFwcGVuZCh0LGUpLG4uZGF0YS5yZWZ9fSx0LmF0dHJpYkNhY2hlPXt9O3ZhciBjPXt9O3JldHVybiB0LnNjb3BlQXR0cmliPWZ1bmN0aW9uKHQpe2lmKCh0PWUuaWQodCkpaW4gYylyZXR1cm4gY1t0XTt2YXIgbj11LnNjb3BlW3RdO3JldHVybiBufHwobj11LnNjb3BlW3RdPW5ldyBaKSxjW3RdPXIobil9LHR9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljO2lmKCJmcmFtZWJ1ZmZlciJpbiByKXt2YXIgaT1yLmZyYW1lYnVmZmVyO3JldHVybiBpPyhpPWwuZ2V0RnJhbWVidWZmZXIoaSksRigoZnVuY3Rpb24odCxlKXt2YXIgcj10LmxpbmsoaSksbj10LnNoYXJlZDtyZXR1cm4gZS5zZXQobi5mcmFtZWJ1ZmZlciwiLm5leHQiLHIpLG49bi5jb250ZXh0LGUuc2V0KG4sIi5mcmFtZWJ1ZmZlcldpZHRoIixyKyIud2lkdGgiKSxlLnNldChuLCIuZnJhbWVidWZmZXJIZWlnaHQiLHIrIi5oZWlnaHQiKSxyfSkpKTpGKChmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkO3JldHVybiBlLnNldChyLmZyYW1lYnVmZmVyLCIubmV4dCIsIm51bGwiKSxyPXIuY29udGV4dCxlLnNldChyLCIuZnJhbWVidWZmZXJXaWR0aCIscisiLmRyYXdpbmdCdWZmZXJXaWR0aCIpLGUuc2V0KHIsIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiLmRyYXdpbmdCdWZmZXJIZWlnaHQiKSwibnVsbCJ9KSl9aWYoImZyYW1lYnVmZmVyImluIG4pe3ZhciBhPW4uZnJhbWVidWZmZXI7cmV0dXJuIEIoYSwoZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGEpLG49dC5zaGFyZWQsaT1uLmZyYW1lYnVmZmVyO3I9ZS5kZWYoaSwiLmdldEZyYW1lYnVmZmVyKCIsciwiKSIpO3JldHVybiBlLnNldChpLCIubmV4dCIsciksbj1uLmNvbnRleHQsZS5zZXQobiwiLmZyYW1lYnVmZmVyV2lkdGgiLHIrIj8iK3IrIi53aWR0aDoiK24rIi5kcmF3aW5nQnVmZmVyV2lkdGgiKSxlLnNldChuLCIuZnJhbWVidWZmZXJIZWlnaHQiLHIrIj8iK3IrIi5oZWlnaHQ6IituKyIuZHJhd2luZ0J1ZmZlckhlaWdodCIpLHJ9KSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdyh0LHIsbil7ZnVuY3Rpb24gaSh0KXtpZih0IGluIGEpe3ZhciByPWUuaWQoYVt0XSk7cmV0dXJuKHQ9RigoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKSkuaWQ9cix0fWlmKHQgaW4gbyl7dmFyIG49b1t0XTtyZXR1cm4gQihuLChmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsbik7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnN0cmluZ3MsIi5pZCgiLHIsIikiKX0pKX1yZXR1cm4gbnVsbH12YXIgYT10LnN0YXRpYyxvPXQuZHluYW1pYyxzPWkoImZyYWciKSxsPWkoInZlcnQiKSxjPW51bGw7cmV0dXJuIFIocykmJlIobCk/KGM9Zi5wcm9ncmFtKGwuaWQscy5pZCxudWxsLG4pLHQ9RigoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saW5rKGMpfSkpKTp0PW5ldyBEKHMmJnMudGhpc0RlcHx8bCYmbC50aGlzRGVwLHMmJnMuY29udGV4dERlcHx8bCYmbC5jb250ZXh0RGVwLHMmJnMucHJvcERlcHx8bCYmbC5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3ZhciByLG4saT10LnNoYXJlZC5zaGFkZXI7cmV0dXJuIHI9cz9zLmFwcGVuZCh0LGUpOmUuZGVmKGksIi4iLCJmcmFnIiksbj1sP2wuYXBwZW5kKHQsZSk6ZS5kZWYoaSwiLiIsInZlcnQiKSxlLmRlZihpKyIucHJvZ3JhbSgiK24rIiwiK3IrIikiKX0pKSx7ZnJhZzpzLHZlcnQ6bCxwcm9nVmFyOnQscHJvZ3JhbTpjfX1mdW5jdGlvbiBUKHQsZSl7ZnVuY3Rpb24gcih0LGUpe2lmKHQgaW4gbil7dmFyIHI9MHxuW3RdO3JldHVybiBGKChmdW5jdGlvbih0LG4pe3JldHVybiBlJiYodC5PRkZTRVQ9cikscn0pKX1pZih0IGluIGkpe3ZhciBvPWlbdF07cmV0dXJuIEIobywoZnVuY3Rpb24odCxyKXt2YXIgbj10Lmludm9rZShyLG8pO3JldHVybiBlJiYodC5PRkZTRVQ9biksbn0pKX1yZXR1cm4gZSYmYT9GKChmdW5jdGlvbih0LGUpe3JldHVybiB0Lk9GRlNFVD0iMCIsMH0pKTpudWxsfXZhciBuPXQuc3RhdGljLGk9dC5keW5hbWljLGE9ZnVuY3Rpb24oKXtpZigiZWxlbWVudHMiaW4gbil7dmFyIHQ9bi5lbGVtZW50czt6KHQpP3Q9by5nZXRFbGVtZW50cyhvLmNyZWF0ZSh0LCEwKSk6dCYmKHQ9by5nZXRFbGVtZW50cyh0KSk7dmFyIGU9RigoZnVuY3Rpb24oZSxyKXtpZih0KXt2YXIgbj1lLmxpbmsodCk7cmV0dXJuIGUuRUxFTUVOVFM9bn1yZXR1cm4gZS5FTEVNRU5UUz1udWxsfSkpO3JldHVybiBlLnZhbHVlPXQsZX1pZigiZWxlbWVudHMiaW4gaSl7dmFyIHI9aS5lbGVtZW50cztyZXR1cm4gQihyLChmdW5jdGlvbih0LGUpe3ZhciBuPShpPXQuc2hhcmVkKS5pc0J1ZmZlckFyZ3MsaT1pLmVsZW1lbnRzLGE9dC5pbnZva2UoZSxyKSxvPWUuZGVmKCJudWxsIik7bj1lLmRlZihuLCIoIixhLCIpIiksYT10LmNvbmQobikudGhlbihvLCI9IixpLCIuY3JlYXRlU3RyZWFtKCIsYSwiKTsiKS5lbHNlKG8sIj0iLGksIi5nZXRFbGVtZW50cygiLGEsIik7Iik7cmV0dXJuIGUuZW50cnkoYSksZS5leGl0KHQuY29uZChuKS50aGVuKGksIi5kZXN0cm95U3RyZWFtKCIsbywiKTsiKSksdC5FTEVNRU5UUz1vfSkpfXJldHVybiBudWxsfSgpLHM9cigib2Zmc2V0IiwhMCk7cmV0dXJue2VsZW1lbnRzOmEscHJpbWl0aXZlOmZ1bmN0aW9uKCl7aWYoInByaW1pdGl2ZSJpbiBuKXt2YXIgdD1uLnByaW1pdGl2ZTtyZXR1cm4gRigoZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnRbdF19KSl9aWYoInByaW1pdGl2ZSJpbiBpKXt2YXIgZT1pLnByaW1pdGl2ZTtyZXR1cm4gQihlLChmdW5jdGlvbih0LHIpe3ZhciBuPXQuY29uc3RhbnRzLnByaW1UeXBlcyxpPXQuaW52b2tlKHIsZSk7cmV0dXJuIHIuZGVmKG4sIlsiLGksIl0iKX0pKX1yZXR1cm4gYT9SKGEpP2EudmFsdWU/RigoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnByaW1UeXBlIil9KSk6RigoZnVuY3Rpb24oKXtyZXR1cm4gNH0pKTpuZXcgRChhLnRoaXNEZXAsYS5jb250ZXh0RGVwLGEucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgcj10LkVMRU1FTlRTO3JldHVybiBlLmRlZihyLCI/IixyLCIucHJpbVR5cGU6Iiw0KX0pKTpudWxsfSgpLGNvdW50OmZ1bmN0aW9uKCl7aWYoImNvdW50ImluIG4pe3ZhciB0PTB8bi5jb3VudDtyZXR1cm4gRigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX1pZigiY291bnQiaW4gaSl7dmFyIGU9aS5jb3VudDtyZXR1cm4gQihlLChmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSkpfXJldHVybiBhP1IoYSk/YT9zP25ldyBEKHMudGhpc0RlcCxzLmNvbnRleHREZXAscy5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIudmVydENvdW50LSIsdC5PRkZTRVQpfSkpOkYoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuRUxFTUVOVFMsIi52ZXJ0Q291bnQiKX0pKTpGKChmdW5jdGlvbigpe3JldHVybi0xfSkpOm5ldyBEKGEudGhpc0RlcHx8cy50aGlzRGVwLGEuY29udGV4dERlcHx8cy5jb250ZXh0RGVwLGEucHJvcERlcHx8cy5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3ZhciByPXQuRUxFTUVOVFM7cmV0dXJuIHQuT0ZGU0VUP2UuZGVmKHIsIj8iLHIsIi52ZXJ0Q291bnQtIix0Lk9GRlNFVCwiOi0xIik6ZS5kZWYociwiPyIsciwiLnZlcnRDb3VudDotMSIpfSkpOm51bGx9KCksaW5zdGFuY2VzOnIoImluc3RhbmNlcyIsITEpLG9mZnNldDpzfX1mdW5jdGlvbiBrKHQscil7dmFyIG49dC5zdGF0aWMsYT10LmR5bmFtaWMsbz17fTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9blt0XSxhPWUuaWQodCkscz1uZXcgWjtpZih6KHIpKXMuc3RhdGU9MSxzLmJ1ZmZlcj1pLmdldEJ1ZmZlcihpLmNyZWF0ZShyLDM0OTYyLCExLCEwKSkscy50eXBlPTA7ZWxzZSBpZihjPWkuZ2V0QnVmZmVyKHIpKXMuc3RhdGU9MSxzLmJ1ZmZlcj1jLHMudHlwZT0wO2Vsc2UgaWYoImNvbnN0YW50ImluIHIpe3ZhciBsPXIuY29uc3RhbnQ7cy5idWZmZXI9Im51bGwiLHMuc3RhdGU9MiwibnVtYmVyIj09dHlwZW9mIGw/cy54PWw6d3QuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtlPGwubGVuZ3RoJiYoc1t0XT1sW2VdKX0pKX1lbHNle3ZhciBjPXooci5idWZmZXIpP2kuZ2V0QnVmZmVyKGkuY3JlYXRlKHIuYnVmZmVyLDM0OTYyLCExLCEwKSk6aS5nZXRCdWZmZXIoci5idWZmZXIpLHU9MHxyLm9mZnNldCxmPTB8ci5zdHJpZGUsaD0wfHIuc2l6ZSxwPSEhci5ub3JtYWxpemVkLGQ9MDsidHlwZSJpbiByJiYoZD1RW3IudHlwZV0pLHI9MHxyLmRpdmlzb3Iscy5idWZmZXI9YyxzLnN0YXRlPTEscy5zaXplPWgscy5ub3JtYWxpemVkPXAscy50eXBlPWR8fGMuZHR5cGUscy5vZmZzZXQ9dSxzLnN0cmlkZT1mLHMuZGl2aXNvcj1yfW9bdF09RigoZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHJpYkNhY2hlO2lmKGEgaW4gcilyZXR1cm4gclthXTt2YXIgbj17aXNTdHJlYW06ITF9O3JldHVybiBPYmplY3Qua2V5cyhzKS5mb3JFYWNoKChmdW5jdGlvbih0KXtuW3RdPXNbdF19KSkscy5idWZmZXImJihuLmJ1ZmZlcj10Lmxpbmsocy5idWZmZXIpLG4udHlwZT1uLnR5cGV8fG4uYnVmZmVyKyIuZHR5cGUiKSxyW2FdPW59KSl9KSksT2JqZWN0LmtleXMoYSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9YVt0XTtvW3RdPUIoZSwoZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKHQpe3IobFt0XSwiPSIsaSwiLiIsdCwifDA7Iil9dmFyIGk9dC5pbnZva2UocixlKSxhPXQuc2hhcmVkLG89dC5jb25zdGFudHMscz1hLmlzQnVmZmVyQXJncyxsPShhPWEuYnVmZmVyLHtpc1N0cmVhbTpyLmRlZighMSl9KSxjPW5ldyBaO2Muc3RhdGU9MSxPYmplY3Qua2V5cyhjKS5mb3JFYWNoKChmdW5jdGlvbih0KXtsW3RdPXIuZGVmKCIiK2NbdF0pfSkpO3ZhciB1PWwuYnVmZmVyLGY9bC50eXBlO3JldHVybiByKCJpZigiLHMsIigiLGksIikpeyIsbC5pc1N0cmVhbSwiPXRydWU7Iix1LCI9IixhLCIuY3JlYXRlU3RyZWFtKCIsMzQ5NjIsIiwiLGksIik7IixmLCI9Iix1LCIuZHR5cGU7IiwifWVsc2V7Iix1LCI9IixhLCIuZ2V0QnVmZmVyKCIsaSwiKTsiLCJpZigiLHUsIil7IixmLCI9Iix1LCIuZHR5cGU7IiwnfWVsc2UgaWYoImNvbnN0YW50IiBpbiAnLGksIil7IixsLnN0YXRlLCI9IiwyLCI7IiwiaWYodHlwZW9mICIraSsnLmNvbnN0YW50ID09PSAibnVtYmVyIil7JyxsW3d0WzBdXSwiPSIsaSwiLmNvbnN0YW50OyIsd3Quc2xpY2UoMSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XX0pKS5qb2luKCI9IiksIj0wOyIsIn1lbHNleyIsd3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBsW3RdKyI9IitpKyIuY29uc3RhbnQubGVuZ3RoPiIrZSsiPyIraSsiLmNvbnN0YW50WyIrZSsiXTowOyJ9KSkuam9pbigiIiksIn19ZWxzZXsiLCJpZigiLHMsIigiLGksIi5idWZmZXIpKXsiLHUsIj0iLGEsIi5jcmVhdGVTdHJlYW0oIiwzNDk2MiwiLCIsaSwiLmJ1ZmZlcik7IiwifWVsc2V7Iix1LCI9IixhLCIuZ2V0QnVmZmVyKCIsaSwiLmJ1ZmZlcik7IiwifSIsZiwnPSJ0eXBlIiBpbiAnLGksIj8iLG8uZ2xUeXBlcywiWyIsaSwiLnR5cGVdOiIsdSwiLmR0eXBlOyIsbC5ub3JtYWxpemVkLCI9ISEiLGksIi5ub3JtYWxpemVkOyIpLG4oInNpemUiKSxuKCJvZmZzZXQiKSxuKCJzdHJpZGUiKSxuKCJkaXZpc29yIikscigifX0iKSxyLmV4aXQoImlmKCIsbC5pc1N0cmVhbSwiKXsiLGEsIi5kZXN0cm95U3RyZWFtKCIsdSwiKTsiLCJ9IiksbH0pKX0pKSxvfWZ1bmN0aW9uIE0odCxlLG4saSxvKXtmdW5jdGlvbiBzKHQpe3ZhciBlPWNbdF07ZSYmKGhbdF09ZSl9dmFyIGw9ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIj09dHlwZW9mKHI9dC5zdGF0aWMpLmZyYWcmJiJzdHJpbmciPT10eXBlb2Ygci52ZXJ0KXtpZigwPE9iamVjdC5rZXlzKGUuZHluYW1pYykubGVuZ3RoKXJldHVybiBudWxsO3ZhciByPWUuc3RhdGljLG49T2JqZWN0LmtleXMocik7aWYoMDxuLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiByW25bMF1dKXtmb3IodmFyIGk9W10sYT0wO2E8bi5sZW5ndGg7KythKWkucHVzaChbMHxyW25bYV1dLG5bYV1dKTtyZXR1cm4gaX19cmV0dXJuIG51bGx9KHQsZSksYz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtpZih0IGluIGkpe3ZhciByPWlbdF07dD0hMDt2YXIgbixvLHM9MHxyLngsbD0wfHIueTtyZXR1cm4id2lkdGgiaW4gcj9uPTB8ci53aWR0aDp0PSExLCJoZWlnaHQiaW4gcj9vPTB8ci5oZWlnaHQ6dD0hMSxuZXcgRCghdCYmZSYmZS50aGlzRGVwLCF0JiZlJiZlLmNvbnRleHREZXAsIXQmJmUmJmUucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgaT10LnNoYXJlZC5jb250ZXh0LGE9bjsid2lkdGgiaW4gcnx8KGE9ZS5kZWYoaSwiLiIsImZyYW1lYnVmZmVyV2lkdGgiLCItIixzKSk7dmFyIGM9bztyZXR1cm4iaGVpZ2h0ImluIHJ8fChjPWUuZGVmKGksIi4iLCJmcmFtZWJ1ZmZlckhlaWdodCIsIi0iLGwpKSxbcyxsLGEsY119KSl9aWYodCBpbiBhKXt2YXIgYz1hW3RdO3JldHVybiB0PUIoYywoZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGMpLG49dC5zaGFyZWQuY29udGV4dCxpPWUuZGVmKHIsIi54fDAiKSxhPWUuZGVmKHIsIi55fDAiKTtyZXR1cm5baSxhLGUuZGVmKCcid2lkdGgiIGluICcsciwiPyIsciwiLndpZHRofDA6IiwiKCIsbiwiLiIsImZyYW1lYnVmZmVyV2lkdGgiLCItIixpLCIpIikscj1lLmRlZignImhlaWdodCIgaW4gJyxyLCI/IixyLCIuaGVpZ2h0fDA6IiwiKCIsbiwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IiwiLSIsYSwiKSIpXX0pKSxlJiYodC50aGlzRGVwPXQudGhpc0RlcHx8ZS50aGlzRGVwLHQuY29udGV4dERlcD10LmNvbnRleHREZXB8fGUuY29udGV4dERlcCx0LnByb3BEZXA9dC5wcm9wRGVwfHxlLnByb3BEZXApLHR9cmV0dXJuIGU/bmV3IEQoZS50aGlzRGVwLGUuY29udGV4dERlcCxlLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQuY29udGV4dDtyZXR1cm5bMCwwLGUuZGVmKHIsIi4iLCJmcmFtZWJ1ZmZlcldpZHRoIiksZS5kZWYociwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IildfSkpOm51bGx9dmFyIGk9dC5zdGF0aWMsYT10LmR5bmFtaWM7aWYodD1uKCJ2aWV3cG9ydCIpKXt2YXIgbz10O3Q9bmV3IEQodC50aGlzRGVwLHQuY29udGV4dERlcCx0LnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9by5hcHBlbmQodCxlKSxuPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuIGUuc2V0KG4sIi52aWV3cG9ydFdpZHRoIixyWzJdKSxlLnNldChuLCIudmlld3BvcnRIZWlnaHQiLHJbM10pLHJ9KSl9cmV0dXJue3ZpZXdwb3J0OnQsc2Npc3Nvcl9ib3g6bigic2Npc3Nvci5ib3giKX19KHQsZD1fKHQpKSxmPVQodCksaD1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljLGk9e307cmV0dXJuIHJ0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxhKXtpZih0IGluIHIpe3ZhciBzPWUoclt0XSk7aVtvXT1GKChmdW5jdGlvbigpe3JldHVybiBzfSkpfWVsc2UgaWYodCBpbiBuKXt2YXIgbD1uW3RdO2lbb109QihsLChmdW5jdGlvbih0LGUpe3JldHVybiBhKHQsZSx0Lmludm9rZShlLGwpKX0pKX19dmFyIG89dih0KTtzd2l0Y2godCl7Y2FzZSJjdWxsLmVuYWJsZSI6Y2FzZSJibGVuZC5lbmFibGUiOmNhc2UiZGl0aGVyIjpjYXNlInN0ZW5jaWwuZW5hYmxlIjpjYXNlImRlcHRoLmVuYWJsZSI6Y2FzZSJzY2lzc29yLmVuYWJsZSI6Y2FzZSJwb2x5Z29uT2Zmc2V0LmVuYWJsZSI6Y2FzZSJzYW1wbGUuYWxwaGEiOmNhc2Uic2FtcGxlLmVuYWJsZSI6Y2FzZSJkZXB0aC5tYXNrIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSkpO2Nhc2UiZGVwdGguZnVuYyI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiBNdFt0XX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHQuY29uc3RhbnRzLmNvbXBhcmVGdW5jcywiWyIsciwiXSIpfSkpO2Nhc2UiZGVwdGgucmFuZ2UiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKCIrIixyLCJbMF0iKSxlPWUuZGVmKCIrIixyLCJbMV0iKV19KSk7Y2FzZSJibGVuZC5mdW5jIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuW2t0WyJzcmNSR0IiaW4gdD90LnNyY1JHQjp0LnNyY10sa3RbImRzdFJHQiJpbiB0P3QuZHN0UkdCOnQuZHN0XSxrdFsic3JjQWxwaGEiaW4gdD90LnNyY0FscGhhOnQuc3JjXSxrdFsiZHN0QWxwaGEiaW4gdD90LmRzdEFscGhhOnQuZHN0XV19KSwoZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gZS5kZWYoJyInLHQsbiwnIiBpbiAnLHIsIj8iLHIsIi4iLHQsbiwiOiIsciwiLiIsdCl9dD10LmNvbnN0YW50cy5ibGVuZEZ1bmNzO3ZhciBpPW4oInNyYyIsIlJHQiIpLGE9bigiZHN0IiwiUkdCIiksbz0oaT1lLmRlZih0LCJbIixpLCJdIiksZS5kZWYodCwiWyIsbigic3JjIiwiQWxwaGEiKSwiXSIpKTtyZXR1cm5baSxhPWUuZGVmKHQsIlsiLGEsIl0iKSxvLHQ9ZS5kZWYodCwiWyIsbigiZHN0IiwiQWxwaGEiKSwiXSIpXX0pKTtjYXNlImJsZW5kLmVxdWF0aW9uIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P1tKW3RdLEpbdF1dOiJvYmplY3QiPT10eXBlb2YgdD9bSlt0LnJnYl0sSlt0LmFscGhhXV06dm9pZCAwfSksKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmNvbnN0YW50cy5ibGVuZEVxdWF0aW9ucyxpPWUuZGVmKCksYT1lLmRlZigpO3JldHVybih0PXQuY29uZCgidHlwZW9mICIsciwnPT09InN0cmluZyInKSkudGhlbihpLCI9IixhLCI9IixuLCJbIixyLCJdOyIpLHQuZWxzZShpLCI9IixuLCJbIixyLCIucmdiXTsiLGEsIj0iLG4sIlsiLHIsIi5hbHBoYV07IiksZSh0KSxbaSxhXX0pKTtjYXNlImJsZW5kLmNvbG9yIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIGEoNCwoZnVuY3Rpb24oZSl7cmV0dXJuK3RbZV19KSl9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBhKDQsKGZ1bmN0aW9uKHQpe3JldHVybiBlLmRlZigiKyIsciwiWyIsdCwiXSIpfSkpfSkpO2Nhc2Uic3RlbmNpbC5tYXNrIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIDB8dH0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIsInwwIil9KSk7Y2FzZSJzdGVuY2lsLmZ1bmMiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm5bTXRbdC5jbXB8fCJrZWVwIl0sdC5yZWZ8fDAsIm1hc2siaW4gdD90Lm1hc2s6LTFdfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bdD1lLmRlZignImNtcCIgaW4gJyxyLCI/Iix0LmNvbnN0YW50cy5jb21wYXJlRnVuY3MsIlsiLHIsIi5jbXBdIiwiOiIsNzY4MCksZS5kZWYociwiLnJlZnwwIiksZT1lLmRlZignIm1hc2siIGluICcsciwiPyIsciwiLm1hc2t8MDotMSIpXX0pKTtjYXNlInN0ZW5jaWwub3BGcm9udCI6Y2FzZSJzdGVuY2lsLm9wQmFjayI6cmV0dXJuIGUoKGZ1bmN0aW9uKGUpe3JldHVyblsic3RlbmNpbC5vcEJhY2siPT09dD8xMDI5OjEwMjgsQXRbZS5mYWlsfHwia2VlcCJdLEF0W2UuemZhaWx8fCJrZWVwIl0sQXRbZS56cGFzc3x8ImtlZXAiXV19KSwoZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHIuZGVmKCciJyx0LCciIGluICcsbiwiPyIsYSwiWyIsbiwiLiIsdCwiXToiLDc2ODApfXZhciBhPWUuY29uc3RhbnRzLnN0ZW5jaWxPcHM7cmV0dXJuWyJzdGVuY2lsLm9wQmFjayI9PT10PzEwMjk6MTAyOCxpKCJmYWlsIiksaSgiemZhaWwiKSxpKCJ6cGFzcyIpXX0pKTtjYXNlInBvbHlnb25PZmZzZXQub2Zmc2V0IjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuWzB8dC5mYWN0b3IsMHx0LnVuaXRzXX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKHIsIi5mYWN0b3J8MCIpLGU9ZS5kZWYociwiLnVuaXRzfDAiKV19KSk7Y2FzZSJjdWxsLmZhY2UiOnJldHVybiBlKChmdW5jdGlvbih0KXt2YXIgZT0wO3JldHVybiJmcm9udCI9PT10P2U9MTAyODoiYmFjayI9PT10JiYoZT0xMDI5KSxlfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYociwnPT09ImZyb250Ij8nLDEwMjgsIjoiLDEwMjkpfSkpO2Nhc2UibGluZVdpZHRoIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSkpO2Nhc2UiZnJvbnRGYWNlIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIFN0W3RdfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYocisnPT09ImN3Ij8yMzA0OjIzMDUnKX0pKTtjYXNlImNvbG9yTWFzayI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuISF0fSkpfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYSg0LChmdW5jdGlvbih0KXtyZXR1cm4iISEiK3IrIlsiK3QrIl0ifSkpfSkpO2Nhc2Uic2FtcGxlLmNvdmVyYWdlIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuWyJ2YWx1ZSJpbiB0P3QudmFsdWU6MSwhIXQuaW52ZXJ0XX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKCcidmFsdWUiIGluICcsciwiPysiLHIsIi52YWx1ZToxIiksZT1lLmRlZigiISEiLHIsIi5pbnZlcnQiKV19KSl9fSkpLGl9KHQpLHA9dyh0LDAsbCk7cygidmlld3BvcnQiKSxzKHYoInNjaXNzb3IuYm94IikpO3ZhciBkLGc9MDxPYmplY3Qua2V5cyhoKS5sZW5ndGg7aWYoKGQ9e2ZyYW1lYnVmZmVyOmQsZHJhdzpmLHNoYWRlcjpwLHN0YXRlOmgsZGlydHk6ZyxzY29wZVZBTzpudWxsLGRyYXdWQU86bnVsbCx1c2VWQU86ITEsYXR0cmlidXRlczp7fX0pLnByb2ZpbGU9ZnVuY3Rpb24odCl7dmFyIGUscj10LnN0YXRpYztpZih0PXQuZHluYW1pYywicHJvZmlsZSJpbiByKXt2YXIgbj0hIXIucHJvZmlsZTsoZT1GKChmdW5jdGlvbih0LGUpe3JldHVybiBufSkpKS5lbmFibGU9bn1lbHNlIGlmKCJwcm9maWxlImluIHQpe3ZhciBpPXQucHJvZmlsZTtlPUIoaSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnZva2UoZSxpKX0pKX1yZXR1cm4gZX0odCksZC51bmlmb3Jtcz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljLGk9e307cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLG49clt0XTtpZigibnVtYmVyIj09dHlwZW9mIG58fCJib29sZWFuIj09dHlwZW9mIG4pZT1GKChmdW5jdGlvbigpe3JldHVybiBufSkpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pe3ZhciBvPW4uX3JlZ2xUeXBlOyJ0ZXh0dXJlMmQiPT09b3x8InRleHR1cmVDdWJlIj09PW8/ZT1GKChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rKG4pfSkpOiJmcmFtZWJ1ZmZlciIhPT1vJiYiZnJhbWVidWZmZXJDdWJlIiE9PW98fChlPUYoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobi5jb2xvclswXSl9KSkpfWVsc2UgbShuKSYmKGU9RigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFsLmRlZigiWyIsYShuLmxlbmd0aCwoZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19KSksIl0iKX0pKSk7ZS52YWx1ZT1uLGlbdF09ZX0pKSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uW3RdO2lbdF09QihlLChmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSkpfSkpLGl9KG4pLGQuZHJhd1ZBTz1kLnNjb3BlVkFPPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWM7aWYoInZhbyJpbiByKXt2YXIgaT1yLnZhbztyZXR1cm4gbnVsbCE9PWkmJm51bGw9PT11LmdldFZBTyhpKSYmKGk9dS5jcmVhdGVWQU8oaSkpLEYoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsodS5nZXRWQU8oaSkpfSkpfWlmKCJ2YW8iaW4gbil7dmFyIGE9bi52YW87cmV0dXJuIEIoYSwoZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGEpO3JldHVybiBlLmRlZih0LnNoYXJlZC52YW8rIi5nZXRWQU8oIityKyIpIil9KSl9cmV0dXJuIG51bGx9KHQpLCFkLmRyYXdWQU8mJnAucHJvZ3JhbSYmIWwmJnIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyl7dmFyIHk9ITA7aWYodD1wLnByb2dyYW0uYXR0cmlidXRlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0PWUuc3RhdGljW3RdLHk9eSYmISF0LHR9KSkseSYmMDx0Lmxlbmd0aCl7dmFyIHg9dS5nZXRWQU8odS5jcmVhdGVWQU8odCkpO2QuZHJhd1ZBTz1uZXcgRChudWxsLG51bGwsbnVsbCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saW5rKHgpfSkpLGQudXNlVkFPPSEwfX1yZXR1cm4gbD9kLnVzZVZBTz0hMDpkLmF0dHJpYnV0ZXM9ayhlKSxkLmNvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5zdGF0aWMscj10LmR5bmFtaWMsbj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9ZVt0XTtuW3RdPUYoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiByfHwiYm9vbGVhbiI9PXR5cGVvZiByPyIiK3I6dC5saW5rKHIpfSkpfSkpLE9iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07blt0XT1CKGUsKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KSl9KSksbn0oaSksZH1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj10LnNoYXJlZC5jb250ZXh0LGk9dC5zY29wZSgpO09iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKGEpe2Uuc2F2ZShuLCIuIithKSxpKG4sIi4iLGEsIj0iLHJbYV0uYXBwZW5kKHQsZSksIjsiKX0pKSxlKGkpfWZ1bmN0aW9uIFModCxlLHIsbil7dmFyIGksYT0ocz10LnNoYXJlZCkuZ2wsbz1zLmZyYW1lYnVmZmVyOyQmJihpPWUuZGVmKHMuZXh0ZW5zaW9ucywiLndlYmdsX2RyYXdfYnVmZmVycyIpKTt2YXIgcz0obD10LmNvbnN0YW50cykuZHJhd0J1ZmZlcixsPWwuYmFja0J1ZmZlcjt0PXI/ci5hcHBlbmQodCxlKTplLmRlZihvLCIubmV4dCIpLG58fGUoImlmKCIsdCwiIT09IixvLCIuY3VyKXsiKSxlKCJpZigiLHQsIil7IixhLCIuYmluZEZyYW1lYnVmZmVyKCIsMzYxNjAsIiwiLHQsIi5mcmFtZWJ1ZmZlcik7IiksJCYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLHMsIlsiLHQsIi5jb2xvckF0dGFjaG1lbnRzLmxlbmd0aF0pOyIpLGUoIn1lbHNleyIsYSwiLmJpbmRGcmFtZWJ1ZmZlcigiLDM2MTYwLCIsbnVsbCk7IiksJCYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLGwsIik7IiksZSgifSIsbywiLmN1cj0iLHQsIjsiKSxufHxlKCJ9Iil9ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49dC5zaGFyZWQsaT1uLmdsLG89dC5jdXJyZW50LHM9dC5uZXh0LGw9bi5jdXJyZW50LGM9bi5uZXh0LHU9dC5jb25kKGwsIi5kaXJ0eSIpO3J0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuLGY7aWYoISgoZT12KGUpKWluIHIuc3RhdGUpKWlmKGUgaW4gcyl7bj1zW2VdLGY9b1tlXTt2YXIgaD1hKHR0W2VdLmxlbmd0aCwoZnVuY3Rpb24odCl7cmV0dXJuIHUuZGVmKG4sIlsiLHQsIl0iKX0pKTt1KHQuY29uZChoLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiIT09IitmKyJbIitlKyJdIn0pKS5qb2luKCJ8fCIpKS50aGVuKGksIi4iLGF0W2VdLCIoIixoLCIpOyIsaC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYrIlsiK2UrIl09Iit0fSkpLmpvaW4oIjsiKSwiOyIpKX1lbHNlIG49dS5kZWYoYywiLiIsZSksaD10LmNvbmQobiwiIT09IixsLCIuIixlKSx1KGgpLGUgaW4gaXQ/aCh0LmNvbmQobikudGhlbihpLCIuZW5hYmxlKCIsaXRbZV0sIik7IikuZWxzZShpLCIuZGlzYWJsZSgiLGl0W2VdLCIpOyIpLGwsIi4iLGUsIj0iLG4sIjsiKTpoKGksIi4iLGF0W2VdLCIoIixuLCIpOyIsbCwiLiIsZSwiPSIsbiwiOyIpfSkpLDA9PT1PYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJnUobCwiLmRpcnR5PWZhbHNlOyIpLGUodSl9ZnVuY3Rpb24gQyh0LGUscixuKXt2YXIgaT10LnNoYXJlZCxhPXQuY3VycmVudCxvPWkuY3VycmVudCxzPWkuZ2w7TyhPYmplY3Qua2V5cyhyKSkuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIGw9cltpXTtpZighbnx8bihsKSl7dmFyIGM9bC5hcHBlbmQodCxlKTtpZihpdFtpXSl7dmFyIHU9aXRbaV07UihsKT9lKHMsYz8iLmVuYWJsZSgiOiIuZGlzYWJsZSgiLHUsIik7Iik6ZSh0LmNvbmQoYykudGhlbihzLCIuZW5hYmxlKCIsdSwiKTsiKS5lbHNlKHMsIi5kaXNhYmxlKCIsdSwiKTsiKSksZShvLCIuIixpLCI9IixjLCI7Iil9ZWxzZSBpZihtKGMpKXt2YXIgZj1hW2ldO2UocywiLiIsYXRbaV0sIigiLGMsIik7IixjLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZisiWyIrZSsiXT0iK3R9KSkuam9pbigiOyIpLCI7Iil9ZWxzZSBlKHMsIi4iLGF0W2ldLCIoIixjLCIpOyIsbywiLiIsaSwiPSIsYywiOyIpfX0pKX1mdW5jdGlvbiBMKHQsZSl7SyYmKHQuaW5zdGFuY2luZz1lLmRlZih0LnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKX1mdW5jdGlvbiBJKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSgpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgcGVyZm9ybWFuY2U/IkRhdGUubm93KCkiOiJwZXJmb3JtYW5jZS5ub3coKSJ9ZnVuY3Rpb24gbyh0KXt0KGM9ZS5kZWYoKSwiPSIsYSgpLCI7IiksInN0cmluZyI9PXR5cGVvZiBpP3QoaCwiLmNvdW50Kz0iLGksIjsiKTp0KGgsIi5jb3VudCsrOyIpLGQmJihuP3QodT1lLmRlZigpLCI9IixnLCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKTsiKTp0KGcsIi5iZWdpblF1ZXJ5KCIsaCwiKTsiKSl9ZnVuY3Rpb24gcyh0KXt0KGgsIi5jcHVUaW1lKz0iLGEoKSwiLSIsYywiOyIpLGQmJihuP3QoZywiLnB1c2hTY29wZVN0YXRzKCIsdSwiLCIsZywiLmdldE51bVBlbmRpbmdRdWVyaWVzKCksIixoLCIpOyIpOnQoZywiLmVuZFF1ZXJ5KCk7IikpfWZ1bmN0aW9uIGwodCl7dmFyIHI9ZS5kZWYocCwiLnByb2ZpbGUiKTtlKHAsIi5wcm9maWxlPSIsdCwiOyIpLGUuZXhpdChwLCIucHJvZmlsZT0iLHIsIjsiKX12YXIgYyx1LGY9dC5zaGFyZWQsaD10LnN0YXRzLHA9Zi5jdXJyZW50LGc9Zi50aW1lcjtpZihyPXIucHJvZmlsZSl7aWYoUihyKSlyZXR1cm4gdm9pZChyLmVuYWJsZT8obyhlKSxzKGUuZXhpdCksbCgidHJ1ZSIpKTpsKCJmYWxzZSIpKTtsKHI9ci5hcHBlbmQodCxlKSl9ZWxzZSByPWUuZGVmKHAsIi5wcm9maWxlIik7byhmPXQuYmxvY2soKSksZSgiaWYoIixyLCIpeyIsZiwifSIpLHModD10LmJsb2NrKCkpLGUuZXhpdCgiaWYoIixyLCIpeyIsdCwifSIpfWZ1bmN0aW9uIE4odCxlLHIsbixpKXtmdW5jdGlvbiBhKHIsbixpKXtmdW5jdGlvbiBhKCl7ZSgiaWYoISIsdSwiLmJ1ZmZlcil7IixsLCIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoIixjLCIpO30iKTt2YXIgcixhPWkudHlwZTtyPWkuc2l6ZT9lLmRlZihpLnNpemUsInx8IixuKTpuLGUoImlmKCIsdSwiLnR5cGUhPT0iLGEsInx8Iix1LCIuc2l6ZSE9PSIsciwifHwiLHAubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdSsiLiIrdCsiIT09IitpW3RdfSkpLmpvaW4oInx8IiksIil7IixsLCIuYmluZEJ1ZmZlcigiLDM0OTYyLCIsIixmLCIuYnVmZmVyKTsiLGwsIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKCIsW2MscixhLGkubm9ybWFsaXplZCxpLnN0cmlkZSxpLm9mZnNldF0sIik7Iix1LCIudHlwZT0iLGEsIjsiLHUsIi5zaXplPSIsciwiOyIscC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB1KyIuIit0KyI9IitpW3RdKyI7In0pKS5qb2luKCIiKSwifSIpLEsmJihhPWkuZGl2aXNvcixlKCJpZigiLHUsIi5kaXZpc29yIT09IixhLCIpeyIsdC5pbnN0YW5jaW5nLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsW2MsYV0sIik7Iix1LCIuZGl2aXNvcj0iLGEsIjt9IikpfWZ1bmN0aW9uIHMoKXtlKCJpZigiLHUsIi5idWZmZXIpeyIsbCwiLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGMsIik7Iix1LCIuYnVmZmVyPW51bGw7IiwifWlmKCIsd3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB1KyIuIit0KyIhPT0iK2hbZV19KSkuam9pbigifHwiKSwiKXsiLGwsIi52ZXJ0ZXhBdHRyaWI0ZigiLGMsIiwiLGgsIik7Iix3dC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUrIi4iK3QrIj0iK2hbZV0rIjsifSkpLmpvaW4oIiIpLCJ9Iil9dmFyIGw9by5nbCxjPWUuZGVmKHIsIi5sb2NhdGlvbiIpLHU9ZS5kZWYoby5hdHRyaWJ1dGVzLCJbIixjLCJdIik7cj1pLnN0YXRlO3ZhciBmPWkuYnVmZmVyLGg9W2kueCxpLnksaS56LGkud10scD1bImJ1ZmZlciIsIm5vcm1hbGl6ZWQiLCJvZmZzZXQiLCJzdHJpZGUiXTsxPT09cj9hKCk6Mj09PXI/cygpOihlKCJpZigiLHIsIj09PSIsMSwiKXsiKSxhKCksZSgifWVsc2V7IikscygpLGUoIn0iKSl9dmFyIG89dC5zaGFyZWQ7bi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgbyxzPW4ubmFtZSxsPXIuYXR0cmlidXRlc1tzXTtpZihsKXtpZighaShsKSlyZXR1cm47bz1sLmFwcGVuZCh0LGUpfWVsc2V7aWYoIWkoRXQpKXJldHVybjt2YXIgYz10LnNjb3BlQXR0cmliKHMpO289e30sT2JqZWN0LmtleXMobmV3IFopLmZvckVhY2goKGZ1bmN0aW9uKHQpe29bdF09ZS5kZWYoYywiLiIsdCl9KSl9YSh0LmxpbmsobiksZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMzU2NjQ6Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiAyO2Nhc2UgMzU2NjU6Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiAzO2Nhc2UgMzU2NjY6Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIDF9fShuLmluZm8udHlwZSksbyl9KSl9ZnVuY3Rpb24gaih0LHIsbixpLG8pe2Zvcih2YXIgcyxsPXQuc2hhcmVkLGM9bC5nbCx1PTA7dTxpLmxlbmd0aDsrK3Upe3ZhciBmLGg9KGc9aVt1XSkubmFtZSxwPWcuaW5mby50eXBlLGQ9bi51bmlmb3Jtc1toXSxnPXQubGluayhnKSsiLmxvY2F0aW9uIjtpZihkKXtpZighbyhkKSljb250aW51ZTtpZihSKGQpKXtpZihoPWQudmFsdWUsMzU2Nzg9PT1wfHwzNTY4MD09PXApcihjLCIudW5pZm9ybTFpKCIsZywiLCIsKHA9dC5saW5rKGguX3RleHR1cmV8fGguY29sb3JbMF0uX3RleHR1cmUpKSsiLmJpbmQoKSk7Iiksci5leGl0KHAsIi51bmJpbmQoKTsiKTtlbHNlIGlmKDM1Njc0PT09cHx8MzU2NzU9PT1wfHwzNTY3Nj09PXApZD0yLDM1Njc1PT09cD9kPTM6MzU2NzY9PT1wJiYoZD00KSxyKGMsIi51bmlmb3JtTWF0cml4IixkLCJmdigiLGcsIixmYWxzZSwiLGg9dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KFsiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGgpKyJdKSIpLCIpOyIpO2Vsc2V7c3dpdGNoKHApe2Nhc2UgNTEyNjpzPSIxZiI7YnJlYWs7Y2FzZSAzNTY2NDpzPSIyZiI7YnJlYWs7Y2FzZSAzNTY2NTpzPSIzZiI7YnJlYWs7Y2FzZSAzNTY2NjpzPSI0ZiI7YnJlYWs7Y2FzZSAzNTY3MDpjYXNlIDUxMjQ6cz0iMWkiO2JyZWFrO2Nhc2UgMzU2NzE6Y2FzZSAzNTY2NzpzPSIyaSI7YnJlYWs7Y2FzZSAzNTY3MjpjYXNlIDM1NjY4OnM9IjNpIjticmVhaztjYXNlIDM1NjczOnM9IjRpIjticmVhaztjYXNlIDM1NjY5OnM9IjRpIn1yKGMsIi51bmlmb3JtIixzLCIoIixnLCIsIixtKGgpP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGgpOmgsIik7Iil9Y29udGludWV9Zj1kLmFwcGVuZCh0LHIpfWVsc2V7aWYoIW8oRXQpKWNvbnRpbnVlO2Y9ci5kZWYobC51bmlmb3JtcywiWyIsZS5pZChoKSwiXSIpfXN3aXRjaCgzNTY3OD09PXA/cigiaWYoIixmLCImJiIsZiwnLl9yZWdsVHlwZT09PSJmcmFtZWJ1ZmZlciIpeycsZiwiPSIsZiwiLmNvbG9yWzBdOyIsIn0iKTozNTY4MD09PXAmJnIoImlmKCIsZiwiJiYiLGYsJy5fcmVnbFR5cGU9PT0iZnJhbWVidWZmZXJDdWJlIil7JyxmLCI9IixmLCIuY29sb3JbMF07IiwifSIpLGg9MSxwKXtjYXNlIDM1Njc4OmNhc2UgMzU2ODA6cD1yLmRlZihmLCIuX3RleHR1cmUiKSxyKGMsIi51bmlmb3JtMWkoIixnLCIsIixwLCIuYmluZCgpKTsiKSxyLmV4aXQocCwiLnVuYmluZCgpOyIpO2NvbnRpbnVlO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnM9IjFpIjticmVhaztjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cz0iMmkiLGg9MjticmVhaztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cz0iM2kiLGg9MzticmVhaztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cz0iNGkiLGg9NDticmVhaztjYXNlIDUxMjY6cz0iMWYiO2JyZWFrO2Nhc2UgMzU2NjQ6cz0iMmYiLGg9MjticmVhaztjYXNlIDM1NjY1OnM9IjNmIixoPTM7YnJlYWs7Y2FzZSAzNTY2NjpzPSI0ZiIsaD00O2JyZWFrO2Nhc2UgMzU2NzQ6cz0iTWF0cml4MmZ2IjticmVhaztjYXNlIDM1Njc1OnM9Ik1hdHJpeDNmdiI7YnJlYWs7Y2FzZSAzNTY3NjpzPSJNYXRyaXg0ZnYifWlmKHIoYywiLnVuaWZvcm0iLHMsIigiLGcsIiwiKSwiTSI9PT1zLmNoYXJBdCgwKSl7Zz1NYXRoLnBvdyhwLTM1Njc0KzIsMik7dmFyIHY9dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KCIsZywiKSIpO3IoImZhbHNlLChBcnJheS5pc0FycmF5KCIsZiwiKXx8IixmLCIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpPyIsZiwiOigiLGEoZywoZnVuY3Rpb24odCl7cmV0dXJuIHYrIlsiK3QrIl09IitmKyJbIit0KyJdIn0pKSwiLCIsdiwiKSIpfWVsc2UgcigxPGg/YShoLChmdW5jdGlvbih0KXtyZXR1cm4gZisiWyIrdCsiXSJ9KSk6Zik7cigiKTsiKX19ZnVuY3Rpb24gVSh0LGUscixuKXtmdW5jdGlvbiBpKGkpe3ZhciBhPWhbaV07cmV0dXJuIGE/YS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxhLnByb3BEZXA/YS5hcHBlbmQodCxyKTphLmFwcGVuZCh0LGUpOmUuZGVmKGYsIi4iLGkpfWZ1bmN0aW9uIGEoKXtmdW5jdGlvbiB0KCl7cihsLCIuZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoIixbZCxtLHYsZysiPDwoKCIrdisiLTUxMjEpPj4xKSIsc10sIik7Iil9ZnVuY3Rpb24gZSgpe3IobCwiLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSgiLFtkLGcsbSxzXSwiKTsiKX1wP3k/dCgpOihyKCJpZigiLHAsIil7IiksdCgpLHIoIn1lbHNleyIpLGUoKSxyKCJ9IikpOmUoKX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gdCgpe3IodSsiLmRyYXdFbGVtZW50cygiK1tkLG0sdixnKyI8PCgoIit2KyItNTEyMSk+PjEpIl0rIik7Iil9ZnVuY3Rpb24gZSgpe3IodSsiLmRyYXdBcnJheXMoIitbZCxnLG1dKyIpOyIpfXA/eT90KCk6KHIoImlmKCIscCwiKXsiKSx0KCkscigifWVsc2V7IiksZSgpLHIoIn0iKSk6ZSgpfXZhciBzLGwsYz10LnNoYXJlZCx1PWMuZ2wsZj1jLmRyYXcsaD1uLmRyYXcscD1mdW5jdGlvbigpe3ZhciBpPWguZWxlbWVudHMsYT1lO3JldHVybiBpPygoaS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxpLnByb3BEZXApJiYoYT1yKSxpPWkuYXBwZW5kKHQsYSkpOmk9YS5kZWYoZiwiLiIsImVsZW1lbnRzIiksaSYmYSgiaWYoIitpKyIpIit1KyIuYmluZEJ1ZmZlcigzNDk2MywiK2krIi5idWZmZXIuYnVmZmVyKTsiKSxpfSgpLGQ9aSgicHJpbWl0aXZlIiksZz1pKCJvZmZzZXQiKSxtPWZ1bmN0aW9uKCl7dmFyIGk9aC5jb3VudCxhPWU7cmV0dXJuIGk/KChpLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGkucHJvcERlcCkmJihhPXIpLGk9aS5hcHBlbmQodCxhKSk6aT1hLmRlZihmLCIuIiwiY291bnQiKSxpfSgpO2lmKCJudW1iZXIiPT10eXBlb2YgbSl7aWYoMD09PW0pcmV0dXJufWVsc2UgcigiaWYoIixtLCIpeyIpLHIuZXhpdCgifSIpO0smJihzPWkoImluc3RhbmNlcyIpLGw9dC5pbnN0YW5jaW5nKTt2YXIgdj1wKyIudHlwZSIseT1oLmVsZW1lbnRzJiZSKGguZWxlbWVudHMpO0smJigibnVtYmVyIiE9dHlwZW9mIHN8fDA8PXMpPyJzdHJpbmciPT10eXBlb2Ygcz8ocigiaWYoIixzLCI+MCl7IiksYSgpLHIoIn1lbHNlIGlmKCIscywiPDApeyIpLG8oKSxyKCJ9IikpOmEoKTpvKCl9ZnVuY3Rpb24gVih0LGUscixuLGkpe3JldHVybiBpPShlPWIoKSkucHJvYygiYm9keSIsaSksSyYmKGUuaW5zdGFuY2luZz1pLmRlZihlLnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKSx0KGUsaSxyLG4pLGUuY29tcGlsZSgpLmJvZHl9ZnVuY3Rpb24gSCh0LGUscixuKXtMKHQsZSksci51c2VWQU8/ci5kcmF3VkFPP2UodC5zaGFyZWQudmFvLCIuc2V0VkFPKCIsci5kcmF3VkFPLmFwcGVuZCh0LGUpLCIpOyIpOmUodC5zaGFyZWQudmFvLCIuc2V0VkFPKCIsdC5zaGFyZWQudmFvLCIudGFyZ2V0VkFPKTsiKTooZSh0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7IiksTih0LGUscixuLmF0dHJpYnV0ZXMsKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSkpLGoodCxlLHIsbi51bmlmb3JtcywoZnVuY3Rpb24oKXtyZXR1cm4hMH0pKSxVKHQsZSxlLHIpfWZ1bmN0aW9uIEcodCxlLHIsbil7ZnVuY3Rpb24gaSgpe3JldHVybiEwfXQuYmF0Y2hJZD0iYTEiLEwodCxlKSxOKHQsZSxyLG4uYXR0cmlidXRlcyxpKSxqKHQsZSxyLG4udW5pZm9ybXMsaSksVSh0LGUsZSxyKX1mdW5jdGlvbiBZKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQuY29udGV4dERlcCYmb3x8dC5wcm9wRGVwfWZ1bmN0aW9uIGEodCl7cmV0dXJuIWkodCl9TCh0LGUpO3ZhciBvPXIuY29udGV4dERlcCxzPWUuZGVmKCksbD1lLmRlZigpO3Quc2hhcmVkLnByb3BzPWwsdC5iYXRjaElkPXM7dmFyIGM9dC5zY29wZSgpLHU9dC5zY29wZSgpO2UoYy5lbnRyeSwiZm9yKCIscywiPTA7IixzLCI8IiwiYTEiLCI7KysiLHMsIil7IixsLCI9IiwiYTAiLCJbIixzLCJdOyIsdSwifSIsYy5leGl0KSxyLm5lZWRzQ29udGV4dCYmQSh0LHUsci5jb250ZXh0KSxyLm5lZWRzRnJhbWVidWZmZXImJlModCx1LHIuZnJhbWVidWZmZXIpLEModCx1LHIuc3RhdGUsaSksci5wcm9maWxlJiZpKHIucHJvZmlsZSkmJkkodCx1LHIsITEsITApLG4/KHIudXNlVkFPP3IuZHJhd1ZBTz9pKHIuZHJhd1ZBTyk/dSh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIixyLmRyYXdWQU8uYXBwZW5kKHQsdSksIik7Iik6Yyh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIixyLmRyYXdWQU8uYXBwZW5kKHQsYyksIik7Iik6Yyh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIix0LnNoYXJlZC52YW8sIi50YXJnZXRWQU8pOyIpOihjKHQuc2hhcmVkLnZhbywiLnNldFZBTyhudWxsKTsiKSxOKHQsYyxyLG4uYXR0cmlidXRlcyxhKSxOKHQsdSxyLG4uYXR0cmlidXRlcyxpKSksaih0LGMscixuLnVuaWZvcm1zLGEpLGoodCx1LHIsbi51bmlmb3JtcyxpKSxVKHQsYyx1LHIpKTooZT10Lmdsb2JhbC5kZWYoInt9Iiksbj1yLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHUpLGw9dS5kZWYobiwiLmlkIiksYz11LmRlZihlLCJbIixsLCJdIiksdSh0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixuLCIucHJvZ3JhbSk7IiwiaWYoISIsYywiKXsiLGMsIj0iLGUsIlsiLGwsIl09Iix0LmxpbmsoKGZ1bmN0aW9uKGUpe3JldHVybiBWKEcsdCxyLGUsMil9KSksIigiLG4sIik7fSIsYywiLmNhbGwodGhpcyxhMFsiLHMsIl0sIixzLCIpOyIpKX1mdW5jdGlvbiBXKHQscil7ZnVuY3Rpb24gbihlKXt2YXIgbj1yLnNoYWRlcltlXTtuJiZpLnNldChhLnNoYWRlciwiLiIrZSxuLmFwcGVuZCh0LGkpKX12YXIgaT10LnByb2MoInNjb3BlIiwzKTt0LmJhdGNoSWQ9ImEyIjt2YXIgYT10LnNoYXJlZCxvPWEuY3VycmVudDtBKHQsaSxyLmNvbnRleHQpLHIuZnJhbWVidWZmZXImJnIuZnJhbWVidWZmZXIuYXBwZW5kKHQsaSksTyhPYmplY3Qua2V5cyhyLnN0YXRlKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ci5zdGF0ZVtlXS5hcHBlbmQodCxpKTttKG4pP24uZm9yRWFjaCgoZnVuY3Rpb24ocixuKXtpLnNldCh0Lm5leHRbZV0sIlsiK24rIl0iLHIpfSkpOmkuc2V0KGEubmV4dCwiLiIrZSxuKX0pKSxJKHQsaSxyLCEwLCEwKSxbImVsZW1lbnRzIiwib2Zmc2V0IiwiY291bnQiLCJpbnN0YW5jZXMiLCJwcmltaXRpdmUiXS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1yLmRyYXdbZV07biYmaS5zZXQoYS5kcmF3LCIuIitlLCIiK24uYXBwZW5kKHQsaSkpfSkpLE9iamVjdC5rZXlzKHIudW5pZm9ybXMpLmZvckVhY2goKGZ1bmN0aW9uKG4pe2kuc2V0KGEudW5pZm9ybXMsIlsiK2UuaWQobikrIl0iLHIudW5pZm9ybXNbbl0uYXBwZW5kKHQsaSkpfSkpLE9iamVjdC5rZXlzKHIuYXR0cmlidXRlcykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ci5hdHRyaWJ1dGVzW2VdLmFwcGVuZCh0LGkpLGE9dC5zY29wZUF0dHJpYihlKTtPYmplY3Qua2V5cyhuZXcgWikuZm9yRWFjaCgoZnVuY3Rpb24odCl7aS5zZXQoYSwiLiIrdCxuW3RdKX0pKX0pKSxyLnNjb3BlVkFPJiZpLnNldChhLnZhbywiLnRhcmdldFZBTyIsci5zY29wZVZBTy5hcHBlbmQodCxpKSksbigidmVydCIpLG4oImZyYWciKSwwPE9iamVjdC5rZXlzKHIuc3RhdGUpLmxlbmd0aCYmKGkobywiLmRpcnR5PXRydWU7IiksaS5leGl0KG8sIi5kaXJ0eT10cnVlOyIpKSxpKCJhMSgiLHQuc2hhcmVkLmNvbnRleHQsIixhMCwiLHQuYmF0Y2hJZCwiKTsiKX1mdW5jdGlvbiBYKHQsZSxyKXt2YXIgbj1lLnN0YXRpY1tyXTtpZihuJiZmdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFtKHQpKXtmb3IodmFyIGU9T2JqZWN0LmtleXModCkscj0wO3I8ZS5sZW5ndGg7KytyKWlmKHEuaXNEeW5hbWljKHRbZVtyXV0pKXJldHVybiEwO3JldHVybiExfX0obikpe3ZhciBpPXQuZ2xvYmFsLGE9T2JqZWN0LmtleXMobiksbz0hMSxzPSExLGw9ITEsYz10Lmdsb2JhbC5kZWYoInt9Iik7YS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uW2VdO2lmKHEuaXNEeW5hbWljKHIpKSJmdW5jdGlvbiI9PXR5cGVvZiByJiYocj1uW2VdPXEudW5ib3gocikpLGU9QihyLG51bGwpLG89b3x8ZS50aGlzRGVwLGw9bHx8ZS5wcm9wRGVwLHM9c3x8ZS5jb250ZXh0RGVwO2Vsc2V7c3dpdGNoKGkoYywiLiIsZSwiPSIpLHR5cGVvZiByKXtjYXNlIm51bWJlciI6aShyKTticmVhaztjYXNlInN0cmluZyI6aSgnIicsciwnIicpO2JyZWFrO2Nhc2Uib2JqZWN0IjpBcnJheS5pc0FycmF5KHIpJiZpKCJbIixyLmpvaW4oKSwiXSIpO2JyZWFrO2RlZmF1bHQ6aSh0LmxpbmsocikpfWkoIjsiKX19KSksZS5keW5hbWljW3JdPW5ldyBxLkR5bmFtaWNWYXJpYWJsZSg0LHt0aGlzRGVwOm8sY29udGV4dERlcDpzLHByb3BEZXA6bCxyZWY6YyxhcHBlbmQ6ZnVuY3Rpb24odCxlKXthLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPW5bcl07cS5pc0R5bmFtaWMoaSkmJihpPXQuaW52b2tlKGUsaSksZShjLCIuIixyLCI9IixpLCI7IikpfSkpfX0pLGRlbGV0ZSBlLnN0YXRpY1tyXX19dmFyIFo9dS5SZWNvcmQsSj17YWRkOjMyNzc0LHN1YnRyYWN0OjMyNzc4LCJyZXZlcnNlIHN1YnRyYWN0IjozMjc3OX07ci5leHRfYmxlbmRfbWlubWF4JiYoSi5taW49MzI3NzUsSi5tYXg9MzI3NzYpO3ZhciBLPXIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cywkPXIud2ViZ2xfZHJhd19idWZmZXJzLHR0PXtkaXJ0eTohMCxwcm9maWxlOmcucHJvZmlsZX0sZXQ9e30scnQ9W10saXQ9e30sYXQ9e307eSgiZGl0aGVyIiwzMDI0KSx5KCJibGVuZC5lbmFibGUiLDMwNDIpLHgoImJsZW5kLmNvbG9yIiwiYmxlbmRDb2xvciIsWzAsMCwwLDBdKSx4KCJibGVuZC5lcXVhdGlvbiIsImJsZW5kRXF1YXRpb25TZXBhcmF0ZSIsWzMyNzc0LDMyNzc0XSkseCgiYmxlbmQuZnVuYyIsImJsZW5kRnVuY1NlcGFyYXRlIixbMSwwLDEsMF0pLHkoImRlcHRoLmVuYWJsZSIsMjkyOSwhMCkseCgiZGVwdGguZnVuYyIsImRlcHRoRnVuYyIsNTEzKSx4KCJkZXB0aC5yYW5nZSIsImRlcHRoUmFuZ2UiLFswLDFdKSx4KCJkZXB0aC5tYXNrIiwiZGVwdGhNYXNrIiwhMCkseCgiY29sb3JNYXNrIiwiY29sb3JNYXNrIixbITAsITAsITAsITBdKSx5KCJjdWxsLmVuYWJsZSIsMjg4NCkseCgiY3VsbC5mYWNlIiwiY3VsbEZhY2UiLDEwMjkpLHgoImZyb250RmFjZSIsImZyb250RmFjZSIsMjMwNSkseCgibGluZVdpZHRoIiwibGluZVdpZHRoIiwxKSx5KCJwb2x5Z29uT2Zmc2V0LmVuYWJsZSIsMzI4MjMpLHgoInBvbHlnb25PZmZzZXQub2Zmc2V0IiwicG9seWdvbk9mZnNldCIsWzAsMF0pLHkoInNhbXBsZS5hbHBoYSIsMzI5MjYpLHkoInNhbXBsZS5lbmFibGUiLDMyOTI4KSx4KCJzYW1wbGUuY292ZXJhZ2UiLCJzYW1wbGVDb3ZlcmFnZSIsWzEsITFdKSx5KCJzdGVuY2lsLmVuYWJsZSIsMjk2MCkseCgic3RlbmNpbC5tYXNrIiwic3RlbmNpbE1hc2siLC0xKSx4KCJzdGVuY2lsLmZ1bmMiLCJzdGVuY2lsRnVuYyIsWzUxOSwwLC0xXSkseCgic3RlbmNpbC5vcEZyb250Iiwic3RlbmNpbE9wU2VwYXJhdGUiLFsxMDI4LDc2ODAsNzY4MCw3NjgwXSkseCgic3RlbmNpbC5vcEJhY2siLCJzdGVuY2lsT3BTZXBhcmF0ZSIsWzEwMjksNzY4MCw3NjgwLDc2ODBdKSx5KCJzY2lzc29yLmVuYWJsZSIsMzA4OSkseCgic2Npc3Nvci5ib3giLCJzY2lzc29yIixbMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0pLHgoInZpZXdwb3J0Iiwidmlld3BvcnQiLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSk7dmFyIG90PXtnbDp0LGNvbnRleHQ6cCxzdHJpbmdzOmUsbmV4dDpldCxjdXJyZW50OnR0LGRyYXc6aCxlbGVtZW50czpvLGJ1ZmZlcjppLHNoYWRlcjpmLGF0dHJpYnV0ZXM6dS5zdGF0ZSx2YW86dSx1bmlmb3JtczpjLGZyYW1lYnVmZmVyOmwsZXh0ZW5zaW9uczpyLHRpbWVyOmQsaXNCdWZmZXJBcmdzOnp9LHN0PXtwcmltVHlwZXM6bnQsY29tcGFyZUZ1bmNzOk10LGJsZW5kRnVuY3M6a3QsYmxlbmRFcXVhdGlvbnM6SixzdGVuY2lsT3BzOkF0LGdsVHlwZXM6USxvcmllbnRhdGlvblR5cGU6U3R9OyQmJihzdC5iYWNrQnVmZmVyPVsxMDI5XSxzdC5kcmF3QnVmZmVyPWEobi5tYXhEcmF3YnVmZmVycywoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10P1swXTphKHQsKGZ1bmN0aW9uKHQpe3JldHVybiAzNjA2NCt0fSkpfSkpKTt2YXIgbHQ9MDtyZXR1cm57bmV4dDpldCxjdXJyZW50OnR0LHByb2NzOmZ1bmN0aW9uKCl7dmFyIHQ9YigpLGU9dC5wcm9jKCJwb2xsIiksaT10LnByb2MoInJlZnJlc2giKSxvPXQuYmxvY2soKTtlKG8pLGkobyk7dmFyIHMsbD10LnNoYXJlZCxjPWwuZ2wsdT1sLm5leHQsZj1sLmN1cnJlbnQ7byhmLCIuZGlydHk9ZmFsc2U7IiksUyh0LGUpLFModCxpLG51bGwsITApLEsmJihzPXQubGluayhLKSksci5vZXNfdmVydGV4X2FycmF5X29iamVjdCYmaSh0Lmxpbmsoci5vZXNfdmVydGV4X2FycmF5X29iamVjdCksIi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7Iik7Zm9yKHZhciBoPTA7aDxuLm1heEF0dHJpYnV0ZXM7KytoKXt2YXIgcD1pLmRlZihsLmF0dHJpYnV0ZXMsIlsiLGgsIl0iKSxkPXQuY29uZChwLCIuYnVmZmVyIik7ZC50aGVuKGMsIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGgsIik7IixjLCIuYmluZEJ1ZmZlcigiLDM0OTYyLCIsIixwLCIuYnVmZmVyLmJ1ZmZlcik7IixjLCIudmVydGV4QXR0cmliUG9pbnRlcigiLGgsIiwiLHAsIi5zaXplLCIscCwiLnR5cGUsIixwLCIubm9ybWFsaXplZCwiLHAsIi5zdHJpZGUsIixwLCIub2Zmc2V0KTsiKS5lbHNlKGMsIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoIixoLCIpOyIsYywiLnZlcnRleEF0dHJpYjRmKCIsaCwiLCIscCwiLngsIixwLCIueSwiLHAsIi56LCIscCwiLncpOyIscCwiLmJ1ZmZlcj1udWxsOyIpLGkoZCksSyYmaShzLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsaCwiLCIscCwiLmRpdmlzb3IpOyIpfXJldHVybiBpKHQuc2hhcmVkLnZhbywiLmN1cnJlbnRWQU89bnVsbDsiLHQuc2hhcmVkLnZhbywiLnNldFZBTygiLHQuc2hhcmVkLnZhbywiLnRhcmdldFZBTyk7IiksT2JqZWN0LmtleXMoaXQpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBuPWl0W3JdLGE9by5kZWYodSwiLiIscikscz10LmJsb2NrKCk7cygiaWYoIixhLCIpeyIsYywiLmVuYWJsZSgiLG4sIil9ZWxzZXsiLGMsIi5kaXNhYmxlKCIsbiwiKX0iLGYsIi4iLHIsIj0iLGEsIjsiKSxpKHMpLGUoImlmKCIsYSwiIT09IixmLCIuIixyLCIpeyIscywifSIpfSkpLE9iamVjdC5rZXlzKGF0KS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbixzLGw9YXRbcl0saD10dFtyXSxwPXQuYmxvY2soKTtwKGMsIi4iLGwsIigiKSxtKGgpPyhsPWgubGVuZ3RoLG49dC5nbG9iYWwuZGVmKHUsIi4iLHIpLHM9dC5nbG9iYWwuZGVmKGYsIi4iLHIpLHAoYShsLChmdW5jdGlvbih0KXtyZXR1cm4gbisiWyIrdCsiXSJ9KSksIik7IixhKGwsKGZ1bmN0aW9uKHQpe3JldHVybiBzKyJbIit0KyJdPSIrbisiWyIrdCsiXTsifSkpLmpvaW4oIiIpKSxlKCJpZigiLGEobCwoZnVuY3Rpb24odCl7cmV0dXJuIG4rIlsiK3QrIl0hPT0iK3MrIlsiK3QrIl0ifSkpLmpvaW4oInx8IiksIil7IixwLCJ9IikpOihuPW8uZGVmKHUsIi4iLHIpLHM9by5kZWYoZiwiLiIscikscChuLCIpOyIsZiwiLiIsciwiPSIsbiwiOyIpLGUoImlmKCIsbiwiIT09IixzLCIpeyIscCwifSIpKSxpKHApfSkpLHQuY29tcGlsZSgpfSgpLGNvbXBpbGU6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1iKCk7cmV0dXJuIGEuc3RhdHM9YS5saW5rKGkpLE9iamVjdC5rZXlzKGUuc3RhdGljKS5mb3JFYWNoKChmdW5jdGlvbih0KXtYKGEsZSx0KX0pKSxUdC5mb3JFYWNoKChmdW5jdGlvbihlKXtYKGEsdCxlKX0pKSxyPU0odCxlLHIsbiksZnVuY3Rpb24odCxlKXt2YXIgcj10LnByb2MoImRyYXciLDEpO0wodCxyKSxBKHQscixlLmNvbnRleHQpLFModCxyLGUuZnJhbWVidWZmZXIpLEUodCxyLGUpLEModCxyLGUuc3RhdGUpLEkodCxyLGUsITEsITApO3ZhciBuPWUuc2hhZGVyLnByb2dWYXIuYXBwZW5kKHQscik7aWYocih0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixuLCIucHJvZ3JhbSk7IiksZS5zaGFkZXIucHJvZ3JhbSlIKHQscixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7cih0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7Iik7dmFyIGk9dC5nbG9iYWwuZGVmKCJ7fSIpLGE9ci5kZWYobiwiLmlkIiksbz1yLmRlZihpLCJbIixhLCJdIik7cih0LmNvbmQobykudGhlbihvLCIuY2FsbCh0aGlzLGEwKTsiKS5lbHNlKG8sIj0iLGksIlsiLGEsIl09Iix0LmxpbmsoKGZ1bmN0aW9uKHIpe3JldHVybiBWKEgsdCxlLHIsMSl9KSksIigiLG4sIik7IixvLCIuY2FsbCh0aGlzLGEwKTsiKSl9MDxPYmplY3Qua2V5cyhlLnN0YXRlKS5sZW5ndGgmJnIodC5zaGFyZWQuY3VycmVudCwiLmRpcnR5PXRydWU7Iil9KGEsciksVyhhLHIpLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZpfHx0LnByb3BEZXB9dmFyIG49dC5wcm9jKCJiYXRjaCIsMik7dC5iYXRjaElkPSIwIixMKHQsbik7dmFyIGk9ITEsYT0hMDtPYmplY3Qua2V5cyhlLmNvbnRleHQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2k9aXx8ZS5jb250ZXh0W3RdLnByb3BEZXB9KSksaXx8KEEodCxuLGUuY29udGV4dCksYT0hMSk7dmFyIG89ITE7aWYoKHM9ZS5mcmFtZWJ1ZmZlcik/KHMucHJvcERlcD9pPW89ITA6cy5jb250ZXh0RGVwJiZpJiYobz0hMCksb3x8Uyh0LG4scykpOlModCxuLG51bGwpLGUuc3RhdGUudmlld3BvcnQmJmUuc3RhdGUudmlld3BvcnQucHJvcERlcCYmKGk9ITApLEUodCxuLGUpLEModCxuLGUuc3RhdGUsKGZ1bmN0aW9uKHQpe3JldHVybiFyKHQpfSkpLGUucHJvZmlsZSYmcihlLnByb2ZpbGUpfHxJKHQsbixlLCExLCJhMSIpLGUuY29udGV4dERlcD1pLGUubmVlZHNDb250ZXh0PWEsZS5uZWVkc0ZyYW1lYnVmZmVyPW8sKGE9ZS5zaGFkZXIucHJvZ1ZhcikuY29udGV4dERlcCYmaXx8YS5wcm9wRGVwKVkodCxuLGUsbnVsbCk7ZWxzZSBpZihhPWEuYXBwZW5kKHQsbiksbih0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixhLCIucHJvZ3JhbSk7IiksZS5zaGFkZXIucHJvZ3JhbSlZKHQsbixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7bih0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7Iik7dmFyIHM9dC5nbG9iYWwuZGVmKCJ7fSIpLGw9KG89bi5kZWYoYSwiLmlkIiksbi5kZWYocywiWyIsbywiXSIpKTtuKHQuY29uZChsKS50aGVuKGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpLmVsc2UobCwiPSIscywiWyIsbywiXT0iLHQubGluaygoZnVuY3Rpb24ocil7cmV0dXJuIFYoWSx0LGUsciwyKX0pKSwiKCIsYSwiKTsiLGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpKX0wPE9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aCYmbih0LnNoYXJlZC5jdXJyZW50LCIuZGlydHk9dHJ1ZTsiKX0oYSxyKSxhLmNvbXBpbGUoKX19fWZ1bmN0aW9uIGoodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX12YXIgVT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPTA7bjxyLmxlbmd0aDsrK24pdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fSxWPTAscT17RHluYW1pY1ZhcmlhYmxlOnQsZGVmaW5lOmZ1bmN0aW9uKHIsbil7cmV0dXJuIG5ldyB0KHIsZShuKyIiKSl9LGlzRHluYW1pYzpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIWUuX3JlZ2xUeXBlfHxlIGluc3RhbmNlb2YgdH0sdW5ib3g6ZnVuY3Rpb24oZSxyKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9uZXcgdCgwLGUpOmV9LGFjY2Vzc29yOmV9LEg9e25leHQ6ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTpmdW5jdGlvbih0KXtyZXR1cm4gc2V0VGltZW91dCh0LDE2KX0sY2FuY2VsOiJmdW5jdGlvbiI9PXR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gY2FuY2VsQW5pbWF0aW9uRnJhbWUodCl9OmNsZWFyVGltZW91dH0sRz0idW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxZPXMoKTtZLnplcm89cygpO3ZhciBXPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MTtlLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyYmKHI9dC5nZXRQYXJhbWV0ZXIoMzQwNDcpKTt2YXIgbj0xLGk9MTtlLndlYmdsX2RyYXdfYnVmZmVycyYmKG49dC5nZXRQYXJhbWV0ZXIoMzQ4NTIpLGk9dC5nZXRQYXJhbWV0ZXIoMzYwNjMpKTt2YXIgYT0hIWUub2VzX3RleHR1cmVfZmxvYXQ7aWYoYSl7YT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKDM1NTMsYSksdC50ZXhJbWFnZTJEKDM1NTMsMCw2NDA4LDEsMSwwLDY0MDgsNTEyNixudWxsKTt2YXIgbz10LmNyZWF0ZUZyYW1lYnVmZmVyKCk7aWYodC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbyksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNTUzLGEsMCksdC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpLDM2MDUzIT09dC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKSlhPSExO2Vsc2V7dC52aWV3cG9ydCgwLDAsMSwxKSx0LmNsZWFyQ29sb3IoMSwwLDAsMSksdC5jbGVhcigxNjM4NCk7dmFyIHM9WS5hbGxvY1R5cGUoNTEyNiw0KTt0LnJlYWRQaXhlbHMoMCwwLDEsMSw2NDA4LDUxMjYscyksdC5nZXRFcnJvcigpP2E9ITE6KHQuZGVsZXRlRnJhbWVidWZmZXIobyksdC5kZWxldGVUZXh0dXJlKGEpLGE9MT09PXNbMF0pLFkuZnJlZVR5cGUocyl9fXJldHVybiBzPSEwLCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XC8vLnRlc3QobmF2aWdhdG9yLmFwcFZlcnNpb24pfHwvRWRnZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl8fChzPXQuY3JlYXRlVGV4dHVyZSgpLG89WS5hbGxvY1R5cGUoNTEyMSwzNiksdC5hY3RpdmVUZXh0dXJlKDMzOTg0KSx0LmJpbmRUZXh0dXJlKDM0MDY3LHMpLHQudGV4SW1hZ2UyRCgzNDA2OSwwLDY0MDgsMywzLDAsNjQwOCw1MTIxLG8pLFkuZnJlZVR5cGUobyksdC5iaW5kVGV4dHVyZSgzNDA2NyxudWxsKSx0LmRlbGV0ZVRleHR1cmUocykscz0hdC5nZXRFcnJvcigpKSx7Y29sb3JCaXRzOlt0LmdldFBhcmFtZXRlcigzNDEwKSx0LmdldFBhcmFtZXRlcigzNDExKSx0LmdldFBhcmFtZXRlcigzNDEyKSx0LmdldFBhcmFtZXRlcigzNDEzKV0sZGVwdGhCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MTQpLHN0ZW5jaWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MTUpLHN1YnBpeGVsQml0czp0LmdldFBhcmFtZXRlcigzNDA4KSxleHRlbnNpb25zOk9iamVjdC5rZXlzKGUpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuISFlW3RdfSkpLG1heEFuaXNvdHJvcGljOnIsbWF4RHJhd2J1ZmZlcnM6bixtYXhDb2xvckF0dGFjaG1lbnRzOmkscG9pbnRTaXplRGltczp0LmdldFBhcmFtZXRlcigzMzkwMSksbGluZVdpZHRoRGltczp0LmdldFBhcmFtZXRlcigzMzkwMiksbWF4Vmlld3BvcnREaW1zOnQuZ2V0UGFyYW1ldGVyKDMzODYpLG1heENvbWJpbmVkVGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM1NjYxKSxtYXhDdWJlTWFwU2l6ZTp0LmdldFBhcmFtZXRlcigzNDA3NiksbWF4UmVuZGVyYnVmZmVyU2l6ZTp0LmdldFBhcmFtZXRlcigzNDAyNCksbWF4VGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM0OTMwKSxtYXhUZXh0dXJlU2l6ZTp0LmdldFBhcmFtZXRlcigzMzc5KSxtYXhBdHRyaWJ1dGVzOnQuZ2V0UGFyYW1ldGVyKDM0OTIxKSxtYXhWZXJ0ZXhVbmlmb3Jtczp0LmdldFBhcmFtZXRlcigzNjM0NyksbWF4VmVydGV4VGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM1NjYwKSxtYXhWYXJ5aW5nVmVjdG9yczp0LmdldFBhcmFtZXRlcigzNjM0OCksbWF4RnJhZ21lbnRVbmlmb3Jtczp0LmdldFBhcmFtZXRlcigzNjM0OSksZ2xzbDp0LmdldFBhcmFtZXRlcigzNTcyNCkscmVuZGVyZXI6dC5nZXRQYXJhbWV0ZXIoNzkzNyksdmVuZG9yOnQuZ2V0UGFyYW1ldGVyKDc5MzYpLHZlcnNpb246dC5nZXRQYXJhbWV0ZXIoNzkzOCkscmVhZEZsb2F0OmEsbnBvdFRleHR1cmVDdWJlOnN9fSxYPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5fHx0IGluc3RhbmNlb2YgVWludDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQxNkFycmF5fHx0IGluc3RhbmNlb2YgSW50MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fSxaPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpfSxKPXtzaGFwZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9W107dC5sZW5ndGg7dD10WzBdKWUucHVzaCh0Lmxlbmd0aCk7cmV0dXJuIGV9LGZsYXR0ZW46ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MTtpZihlLmxlbmd0aClmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSlpKj1lW2FdO2Vsc2UgaT0wO3N3aXRjaChyPW58fFkuYWxsb2NUeXBlKHIsaSksZS5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6Zm9yKG49ZVswXSxlPTA7ZTxuOysrZSlyW2VdPXRbZV07YnJlYWs7Y2FzZSAyOmZvcihuPWVbMF0sZT1lWzFdLGE9aT0wO2E8bjsrK2EpZm9yKHZhciBvPXRbYV0scz0wO3M8ZTsrK3MpcltpKytdPW9bc107YnJlYWs7Y2FzZSAzOmModCxlWzBdLGVbMV0sZVsyXSxyLDApO2JyZWFrO2RlZmF1bHQ6IWZ1bmN0aW9uIHQoZSxyLG4saSxhKXtmb3IodmFyIG89MSxzPW4rMTtzPHIubGVuZ3RoOysrcylvKj1yW3NdO3ZhciBsPXJbbl07aWYoND09ci5sZW5ndGgtbil7dmFyIHU9cltuKzFdLGY9cltuKzJdO2ZvcihyPXJbbiszXSxzPTA7czxsOysrcyljKGVbc10sdSxmLHIsaSxhKSxhKz1vfWVsc2UgZm9yKHM9MDtzPGw7KytzKXQoZVtzXSxyLG4rMSxpLGEpLGErPW99KHQsZSwwLHIsMCl9cmV0dXJuIHJ9fSxLPXsiW29iamVjdCBJbnQ4QXJyYXldIjo1MTIwLCJbb2JqZWN0IEludDE2QXJyYXldIjo1MTIyLCJbb2JqZWN0IEludDMyQXJyYXldIjo1MTI0LCJbb2JqZWN0IFVpbnQ4QXJyYXldIjo1MTIxLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6NTEyMSwiW29iamVjdCBVaW50MTZBcnJheV0iOjUxMjMsIltvYmplY3QgVWludDMyQXJyYXldIjo1MTI1LCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOjUxMjYsIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6NTEyMSwiW29iamVjdCBBcnJheUJ1ZmZlcl0iOjUxMjF9LFE9e2ludDg6NTEyMCxpbnQxNjo1MTIyLGludDMyOjUxMjQsdWludDg6NTEyMSx1aW50MTY6NTEyMyx1aW50MzI6NTEyNSxmbG9hdDo1MTI2LGZsb2F0MzI6NTEyNn0sJD17ZHluYW1pYzozNTA0OCxzdHJlYW06MzUwNDAsc3RhdGljOjM1MDQ0fSx0dD1KLmZsYXR0ZW4sZXQ9Si5zaGFwZSxydD1bXTtydFs1MTIwXT0xLHJ0WzUxMjJdPTIscnRbNTEyNF09NCxydFs1MTIxXT0xLHJ0WzUxMjNdPTIscnRbNTEyNV09NCxydFs1MTI2XT00O3ZhciBudD17cG9pbnRzOjAscG9pbnQ6MCxsaW5lczoxLGxpbmU6MSx0cmlhbmdsZXM6NCx0cmlhbmdsZTo0LCJsaW5lIGxvb3AiOjIsImxpbmUgc3RyaXAiOjMsInRyaWFuZ2xlIHN0cmlwIjo1LCJ0cmlhbmdsZSBmYW4iOjZ9LGl0PW5ldyBGbG9hdDMyQXJyYXkoMSksYXQ9bmV3IFVpbnQzMkFycmF5KGl0LmJ1ZmZlciksb3Q9Wzk5ODQsOTk4Niw5OTg1LDk5ODddLHN0PVswLDY0MDksNjQxMCw2NDA3LDY0MDhdLGx0PXt9O2x0WzY0MDldPWx0WzY0MDZdPWx0WzY0MDJdPTEsbHRbMzQwNDFdPWx0WzY0MTBdPTIsbHRbNjQwN109bHRbMzU5MDRdPTMsbHRbNjQwOF09bHRbMzU5MDZdPTQ7dmFyIGN0PXYoIkhUTUxDYW52YXNFbGVtZW50IiksdXQ9digiT2Zmc2NyZWVuQ2FudmFzIiksZnQ9digiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIiksaHQ9digiSW1hZ2VCaXRtYXAiKSxwdD12KCJIVE1MSW1hZ2VFbGVtZW50IiksZHQ9digiSFRNTFZpZGVvRWxlbWVudCIpLGd0PU9iamVjdC5rZXlzKEspLmNvbmNhdChbY3QsdXQsZnQsaHQscHQsZHRdKSxtdD1bXTttdFs1MTIxXT0xLG10WzUxMjZdPTQsbXRbMzYxOTNdPTIsbXRbNTEyM109MixtdFs1MTI1XT00O3ZhciB2dD1bXTt2dFszMjg1NF09Mix2dFszMjg1NV09Mix2dFszNjE5NF09Mix2dFszNDA0MV09NCx2dFszMzc3Nl09LjUsdnRbMzM3NzddPS41LHZ0WzMzNzc4XT0xLHZ0WzMzNzc5XT0xLHZ0WzM1OTg2XT0uNSx2dFszNTk4N109MSx2dFszNDc5OF09MSx2dFszNTg0MF09LjUsdnRbMzU4NDFdPS4yNSx2dFszNTg0Ml09LjUsdnRbMzU4NDNdPS4yNSx2dFszNjE5Nl09LjU7dmFyIHl0PVtdO3l0WzMyODU0XT0yLHl0WzMyODU1XT0yLHl0WzM2MTk0XT0yLHl0WzMzMTg5XT0yLHl0WzM2MTY4XT0xLHl0WzM0MDQxXT00LHl0WzM1OTA3XT00LHl0WzM0ODM2XT0xNix5dFszNDg0Ml09OCx5dFszNDg0M109Njt2YXIgeHQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe3RoaXMuaWQ9YysrLHRoaXMucmVmQ291bnQ9MSx0aGlzLnJlbmRlcmJ1ZmZlcj10LHRoaXMuZm9ybWF0PTMyODU0LHRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MCxpLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBvKGUpe3ZhciByPWUucmVuZGVyYnVmZmVyO3QuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSx0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyKSxlLnJlbmRlcmJ1ZmZlcj1udWxsLGUucmVmQ291bnQ9MCxkZWxldGUgdVtlLmlkXSxuLnJlbmRlcmJ1ZmZlckNvdW50LS19dmFyIHM9e3JnYmE0OjMyODU0LHJnYjU2NTozNjE5NCwicmdiNSBhMSI6MzI4NTUsZGVwdGg6MzMxODksc3RlbmNpbDozNjE2OCwiZGVwdGggc3RlbmNpbCI6MzQwNDF9O2UuZXh0X3NyZ2ImJihzLnNyZ2JhPTM1OTA3KSxlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCYmKHMucmdiYTE2Zj0zNDg0MixzLnJnYjE2Zj0zNDg0MyksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJihzLnJnYmEzMmY9MzQ4MzYpO3ZhciBsPVtdO09iamVjdC5rZXlzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2xbc1t0XV09dH0pKTt2YXIgYz0wLHU9e307cmV0dXJuIGEucHJvdG90eXBlLmRlY1JlZj1mdW5jdGlvbigpezA+PS0tdGhpcy5yZWZDb3VudCYmbyh0aGlzKX0saS5wcm9maWxlJiYobi5nZXRUb3RhbFJlbmRlcmJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyh1KS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Kz11W2VdLnN0YXRzLnNpemV9KSksdH0pLHtjcmVhdGU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUscil7dmFyIG49MCxhPTAsdT0zMjg1NDtpZigib2JqZWN0Ij09dHlwZW9mIGUmJmU/KCJzaGFwZSJpbiBlPyhuPTB8KGE9ZS5zaGFwZSlbMF0sYT0wfGFbMV0pOigicmFkaXVzImluIGUmJihuPWE9MHxlLnJhZGl1cyksIndpZHRoImluIGUmJihuPTB8ZS53aWR0aCksImhlaWdodCJpbiBlJiYoYT0wfGUuaGVpZ2h0KSksImZvcm1hdCJpbiBlJiYodT1zW2UuZm9ybWF0XSkpOiJudW1iZXIiPT10eXBlb2YgZT8obj0wfGUsYT0ibnVtYmVyIj09dHlwZW9mIHI/MHxyOm4pOmV8fChuPWE9MSksbiE9PWMud2lkdGh8fGEhPT1jLmhlaWdodHx8dSE9PWMuZm9ybWF0KXJldHVybiBvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLGMuZm9ybWF0PXUsdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGMucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsdSxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT15dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksby5mb3JtYXQ9bFtjLmZvcm1hdF0sb312YXIgYz1uZXcgYSh0LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTtyZXR1cm4gdVtjLmlkXT1jLG4ucmVuZGVyYnVmZmVyQ291bnQrKyxvKGUsciksby5yZXNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wfGUsYT0wfHJ8fG47cmV0dXJuIG49PT1jLndpZHRoJiZhPT09Yy5oZWlnaHR8fChvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxjLnJlbmRlcmJ1ZmZlciksdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGMuZm9ybWF0LG4sYSksaS5wcm9maWxlJiYoYy5zdGF0cy5zaXplPXl0W2MuZm9ybWF0XSpjLndpZHRoKmMuaGVpZ2h0KSksb30sby5fcmVnbFR5cGU9InJlbmRlcmJ1ZmZlciIsby5fcmVuZGVyYnVmZmVyPWMsaS5wcm9maWxlJiYoby5zdGF0cz1jLnN0YXRzKSxvLmRlc3Ryb3k9ZnVuY3Rpb24oKXtjLmRlY1JlZigpfSxvfSxjbGVhcjpmdW5jdGlvbigpe1oodSkuZm9yRWFjaChvKX0scmVzdG9yZTpmdW5jdGlvbigpe1oodSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZW5kZXJidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsZS5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxlLmZvcm1hdCxlLndpZHRoLGUuaGVpZ2h0KX0pKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCl9fX0sYnQ9W107YnRbNjQwOF09NCxidFs2NDA3XT0zO3ZhciBfdD1bXTtfdFs1MTIxXT0xLF90WzUxMjZdPTQsX3RbMzYxOTNdPTI7dmFyIHd0PVsieCIsInkiLCJ6IiwidyJdLFR0PSJibGVuZC5mdW5jIGJsZW5kLmVxdWF0aW9uIHN0ZW5jaWwuZnVuYyBzdGVuY2lsLm9wRnJvbnQgc3RlbmNpbC5vcEJhY2sgc2FtcGxlLmNvdmVyYWdlIHZpZXdwb3J0IHNjaXNzb3IuYm94IHBvbHlnb25PZmZzZXQub2Zmc2V0Ii5zcGxpdCgiICIpLGt0PXswOjAsMToxLHplcm86MCxvbmU6MSwic3JjIGNvbG9yIjo3NjgsIm9uZSBtaW51cyBzcmMgY29sb3IiOjc2OSwic3JjIGFscGhhIjo3NzAsIm9uZSBtaW51cyBzcmMgYWxwaGEiOjc3MSwiZHN0IGNvbG9yIjo3NzQsIm9uZSBtaW51cyBkc3QgY29sb3IiOjc3NSwiZHN0IGFscGhhIjo3NzIsIm9uZSBtaW51cyBkc3QgYWxwaGEiOjc3MywiY29uc3RhbnQgY29sb3IiOjMyNzY5LCJvbmUgbWludXMgY29uc3RhbnQgY29sb3IiOjMyNzcwLCJjb25zdGFudCBhbHBoYSI6MzI3NzEsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSI6MzI3NzIsInNyYyBhbHBoYSBzYXR1cmF0ZSI6Nzc2fSxNdD17bmV2ZXI6NTEyLGxlc3M6NTEzLCI8Ijo1MTMsZXF1YWw6NTE0LCI9Ijo1MTQsIj09Ijo1MTQsIj09PSI6NTE0LGxlcXVhbDo1MTUsIjw9Ijo1MTUsZ3JlYXRlcjo1MTYsIj4iOjUxNixub3RlcXVhbDo1MTcsIiE9Ijo1MTcsIiE9PSI6NTE3LGdlcXVhbDo1MTgsIj49Ijo1MTgsYWx3YXlzOjUxOX0sQXQ9ezA6MCx6ZXJvOjAsa2VlcDo3NjgwLHJlcGxhY2U6NzY4MSxpbmNyZW1lbnQ6NzY4MixkZWNyZW1lbnQ6NzY4MywiaW5jcmVtZW50IHdyYXAiOjM0MDU1LCJkZWNyZW1lbnQgd3JhcCI6MzQwNTYsaW52ZXJ0OjUzODZ9LFN0PXtjdzoyMzA0LGNjdzoyMzA1fSxFdD1uZXcgRCghMSwhMSwhMSwoZnVuY3Rpb24oKXt9KSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtpZigwPT09Si5sZW5ndGgpdyYmdy51cGRhdGUoKSx0dD1udWxsO2Vsc2V7dHQ9SC5uZXh0KGUpLGYoKTtmb3IodmFyIHQ9Si5sZW5ndGgtMTswPD10Oy0tdCl7dmFyIHI9Slt0XTtyJiZyKEksbnVsbCwwKX1tLmZsdXNoKCksdyYmdy51cGRhdGUoKX19ZnVuY3Rpb24gcigpeyF0dCYmMDxKLmxlbmd0aCYmKHR0PUgubmV4dChlKSl9ZnVuY3Rpb24gbigpe3R0JiYoSC5jYW5jZWwoZSksdHQ9bnVsbCl9ZnVuY3Rpb24gYSh0KXt0LnByZXZlbnREZWZhdWx0KCksbigpLEsuZm9yRWFjaCgoZnVuY3Rpb24odCl7dCgpfSkpfWZ1bmN0aW9uIG8odCl7bS5nZXRFcnJvcigpLHkucmVzdG9yZSgpLFIucmVzdG9yZSgpLHoucmVzdG9yZSgpLEYucmVzdG9yZSgpLEIucmVzdG9yZSgpLFYucmVzdG9yZSgpLE8ucmVzdG9yZSgpLHcmJncucmVzdG9yZSgpLFkucHJvY3MucmVmcmVzaCgpLHIoKSxRLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoKX0pKX1mdW5jdGlvbiBzKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGU9e30scj17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9dFtuXTtxLmlzRHluYW1pYyhpKT9yW25dPXEudW5ib3goaSxuKTplW25dPWl9KSkse2R5bmFtaWM6cixzdGF0aWM6ZX19dmFyIHI9ZSh0LmNvbnRleHR8fHt9KSxuPWUodC51bmlmb3Jtc3x8e30pLGk9ZSh0LmF0dHJpYnV0ZXN8fHt9KSxhPWUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtpZih0IGluIHIpe3ZhciBlPXJbdF07ZGVsZXRlIHJbdF0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7clt0KyIuIituXT1lW25dfSkpfX12YXIgcj1VKHt9LHQpO3JldHVybiBkZWxldGUgci51bmlmb3JtcyxkZWxldGUgci5hdHRyaWJ1dGVzLGRlbGV0ZSByLmNvbnRleHQsZGVsZXRlIHIudmFvLCJzdGVuY2lsImluIHImJnIuc3RlbmNpbC5vcCYmKHIuc3RlbmNpbC5vcEJhY2s9ci5zdGVuY2lsLm9wRnJvbnQ9ci5zdGVuY2lsLm9wLGRlbGV0ZSByLnN0ZW5jaWwub3ApLGUoImJsZW5kIiksZSgiZGVwdGgiKSxlKCJjdWxsIiksZSgic3RlbmNpbCIpLGUoInBvbHlnb25PZmZzZXQiKSxlKCJzY2lzc29yIiksZSgic2FtcGxlIiksInZhbyJpbiB0JiYoci52YW89dC52YW8pLHJ9KHQpKTt0PXtncHVUaW1lOjAsY3B1VGltZTowLGNvdW50OjB9O3ZhciBvPShyPVkuY29tcGlsZShhLGksbixyLHQpKS5kcmF3LHM9ci5iYXRjaCxsPXIuc2NvcGUsYz1bXTtyZXR1cm4gVSgoZnVuY3Rpb24odCxlKXt2YXIgcjtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gbC5jYWxsKHRoaXMsbnVsbCx0LDApO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKWlmKCJudW1iZXIiPT10eXBlb2YgdClmb3Iocj0wO3I8dDsrK3IpbC5jYWxsKHRoaXMsbnVsbCxlLHIpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGwuY2FsbCh0aGlzLHQsZSwwKTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKWwuY2FsbCh0aGlzLHRbcl0sZSxyKX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdCl7aWYoMDx0KXJldHVybiBzLmNhbGwodGhpcyxmdW5jdGlvbih0KXtmb3IoO2MubGVuZ3RoPHQ7KWMucHVzaChudWxsKTtyZXR1cm4gY30oMHx0KSwwfHQpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIG8uY2FsbCh0aGlzLHQpO2lmKHQubGVuZ3RoKXJldHVybiBzLmNhbGwodGhpcyx0LHQubGVuZ3RoKX19KSx7c3RhdHM6dH0pfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj0wO1kucHJvY3MucG9sbCgpO3ZhciBuPWUuY29sb3I7biYmKG0uY2xlYXJDb2xvcigrblswXXx8MCwrblsxXXx8MCwrblsyXXx8MCwrblszXXx8MCkscnw9MTYzODQpLCJkZXB0aCJpbiBlJiYobS5jbGVhckRlcHRoKCtlLmRlcHRoKSxyfD0yNTYpLCJzdGVuY2lsImluIGUmJihtLmNsZWFyU3RlbmNpbCgwfGUuc3RlbmNpbCkscnw9MTAyNCksbS5jbGVhcihyKX1mdW5jdGlvbiBjKHQpe3JldHVybiBKLnB1c2godCkscigpLHtjYW5jZWw6ZnVuY3Rpb24oKXt2YXIgZT1qKEosdCk7SltlXT1mdW5jdGlvbiB0KCl7dmFyIGU9aihKLHQpO0pbZV09SltKLmxlbmd0aC0xXSwtLUoubGVuZ3RoLDA+PUoubGVuZ3RoJiZuKCl9fX19ZnVuY3Rpb24gdSgpe3ZhciB0PVgudmlld3BvcnQsZT1YLnNjaXNzb3JfYm94O3RbMF09dFsxXT1lWzBdPWVbMV09MCxJLnZpZXdwb3J0V2lkdGg9SS5mcmFtZWJ1ZmZlcldpZHRoPUkuZHJhd2luZ0J1ZmZlcldpZHRoPXRbMl09ZVsyXT1tLmRyYXdpbmdCdWZmZXJXaWR0aCxJLnZpZXdwb3J0SGVpZ2h0PUkuZnJhbWVidWZmZXJIZWlnaHQ9SS5kcmF3aW5nQnVmZmVySGVpZ2h0PXRbM109ZVszXT1tLmRyYXdpbmdCdWZmZXJIZWlnaHR9ZnVuY3Rpb24gZigpe0kudGljays9MSxJLnRpbWU9ZygpLHUoKSxZLnByb2NzLnBvbGwoKX1mdW5jdGlvbiBoKCl7dSgpLFkucHJvY3MucmVmcmVzaCgpLHcmJncudXBkYXRlKCl9ZnVuY3Rpb24gZygpe3JldHVybihHKCktVCkvMWUzfWlmKCEodD1pKHQpKSlyZXR1cm4gbnVsbDt2YXIgbT10LmdsLHY9bS5nZXRDb250ZXh0QXR0cmlidXRlcygpO20uaXNDb250ZXh0TG9zdCgpO3ZhciB5PWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlKXt2YXIgcjtlPWUudG9Mb3dlckNhc2UoKTt0cnl7cj1uW2VdPXQuZ2V0RXh0ZW5zaW9uKGUpfWNhdGNoKHQpe31yZXR1cm4hIXJ9Zm9yKHZhciBuPXt9LGk9MDtpPGUuZXh0ZW5zaW9ucy5sZW5ndGg7KytpKXt2YXIgYT1lLmV4dGVuc2lvbnNbaV07aWYoIXIoYSkpcmV0dXJuIGUub25EZXN0cm95KCksZS5vbkRvbmUoJyInK2ErJyIgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgV2ViR0wgY29udGV4dCwgdHJ5IHVwZ3JhZGluZyB5b3VyIHN5c3RlbSBvciBhIGRpZmZlcmVudCBicm93c2VyJyksbnVsbH1yZXR1cm4gZS5vcHRpb25hbEV4dGVuc2lvbnMuZm9yRWFjaChyKSx7ZXh0ZW5zaW9uczpuLHJlc3RvcmU6ZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihuW3RdJiYhcih0KSl0aHJvdyBFcnJvcigiKHJlZ2wpOiBlcnJvciByZXN0b3JpbmcgZXh0ZW5zaW9uICIrdCl9KSl9fX0obSx0KTtpZigheSlyZXR1cm4gbnVsbDt2YXIgeD1mdW5jdGlvbigpe3ZhciB0PXsiIjowfSxlPVsiIl07cmV0dXJue2lkOmZ1bmN0aW9uKHIpe3ZhciBuPXRbcl07cmV0dXJuIG58fChuPXRbcl09ZS5sZW5ndGgsZS5wdXNoKHIpLG4pfSxzdHI6ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19fX0oKSxiPXt2YW9Db3VudDowLGJ1ZmZlckNvdW50OjAsZWxlbWVudHNDb3VudDowLGZyYW1lYnVmZmVyQ291bnQ6MCxzaGFkZXJDb3VudDowLHRleHR1cmVDb3VudDowLGN1YmVDb3VudDowLHJlbmRlcmJ1ZmZlckNvdW50OjAsbWF4VGV4dHVyZVVuaXRzOjB9LF89eS5leHRlbnNpb25zLHc9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhpcy5lbmRRdWVyeUluZGV4PXRoaXMuc3RhcnRRdWVyeUluZGV4PS0xLHRoaXMuc3VtPTAsdGhpcy5zdGF0cz1udWxsfWZ1bmN0aW9uIG4odCxlLG4pe3ZhciBpPW8ucG9wKCl8fG5ldyByO2kuc3RhcnRRdWVyeUluZGV4PXQsaS5lbmRRdWVyeUluZGV4PWUsaS5zdW09MCxpLnN0YXRzPW4scy5wdXNoKGkpfWlmKCFlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeSlyZXR1cm4gbnVsbDt2YXIgaT1bXSxhPVtdLG89W10scz1bXSxsPVtdLGM9W107cmV0dXJue2JlZ2luUXVlcnk6ZnVuY3Rpb24odCl7dmFyIHI9aS5wb3AoKXx8ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuY3JlYXRlUXVlcnlFWFQoKTtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5iZWdpblF1ZXJ5RVhUKDM1MDA3LHIpLGEucHVzaChyKSxuKGEubGVuZ3RoLTEsYS5sZW5ndGgsdCl9LGVuZFF1ZXJ5OmZ1bmN0aW9uKCl7ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZW5kUXVlcnlFWFQoMzUwMDcpfSxwdXNoU2NvcGVTdGF0czpuLHVwZGF0ZTpmdW5jdGlvbigpe3ZhciB0LHI7aWYoMCE9PSh0PWEubGVuZ3RoKSl7Yy5sZW5ndGg9TWF0aC5tYXgoYy5sZW5ndGgsdCsxKSxsLmxlbmd0aD1NYXRoLm1heChsLmxlbmd0aCx0KzEpLGxbMF09MDt2YXIgbj1jWzBdPTA7Zm9yKHI9dD0wO3I8YS5sZW5ndGg7KytyKXt2YXIgdT1hW3JdO2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHUsMzQ5MTkpPyhuKz1lLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5nZXRRdWVyeU9iamVjdEVYVCh1LDM0OTE4KSxpLnB1c2godSkpOmFbdCsrXT11LGxbcisxXT1uLGNbcisxXT10fWZvcihhLmxlbmd0aD10LHI9dD0wO3I8cy5sZW5ndGg7KytyKXt2YXIgZj0obj1zW3JdKS5zdGFydFF1ZXJ5SW5kZXg7dT1uLmVuZFF1ZXJ5SW5kZXg7bi5zdW0rPWxbdV0tbFtmXSxmPWNbZl0sKHU9Y1t1XSk9PT1mPyhuLnN0YXRzLmdwdVRpbWUrPW4uc3VtLzFlNixvLnB1c2gobikpOihuLnN0YXJ0UXVlcnlJbmRleD1mLG4uZW5kUXVlcnlJbmRleD11LHNbdCsrXT1uKX1zLmxlbmd0aD10fX0sZ2V0TnVtUGVuZGluZ1F1ZXJpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5sZW5ndGh9LGNsZWFyOmZ1bmN0aW9uKCl7aS5wdXNoLmFwcGx5KGksYSk7Zm9yKHZhciB0PTA7dDxpLmxlbmd0aDt0KyspZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZGVsZXRlUXVlcnlFWFQoaVt0XSk7YS5sZW5ndGg9MCxpLmxlbmd0aD0wfSxyZXN0b3JlOmZ1bmN0aW9uKCl7YS5sZW5ndGg9MCxpLmxlbmd0aD0wfX19KDAsXyksVD1HKCksQT1tLmRyYXdpbmdCdWZmZXJXaWR0aCxMPW0uZHJhd2luZ0J1ZmZlckhlaWdodCxJPXt0aWNrOjAsdGltZTowLHZpZXdwb3J0V2lkdGg6QSx2aWV3cG9ydEhlaWdodDpMLGZyYW1lYnVmZmVyV2lkdGg6QSxmcmFtZWJ1ZmZlckhlaWdodDpMLGRyYXdpbmdCdWZmZXJXaWR0aDpBLGRyYXdpbmdCdWZmZXJIZWlnaHQ6TCxwaXhlbFJhdGlvOnQucGl4ZWxSYXRpb30sUD1XKG0sXyksej1wKG0sYix0LChmdW5jdGlvbih0KXtyZXR1cm4gTy5kZXN0cm95QnVmZmVyKHQpfSkpLE89UyhtLF8sUCxiLHopLEQ9ZChtLF8seixiKSxSPUUobSx4LGIsdCksRj1rKG0sXyxQLChmdW5jdGlvbigpe1kucHJvY3MucG9sbCgpfSksSSxiLHQpLEI9eHQobSxfLDAsYix0KSxWPU0obSxfLFAsRixCLGIpLFk9TihtLHgsXyxQLHosRCwwLFYse30sTyxSLHtlbGVtZW50czpudWxsLHByaW1pdGl2ZTo0LGNvdW50Oi0xLG9mZnNldDowLGluc3RhbmNlczotMX0sSSx3LHQpLFg9KHg9QyhtLFYsWS5wcm9jcy5wb2xsLEkpLFkubmV4dCksWj1tLmNhbnZhcyxKPVtdLEs9W10sUT1bXSwkPVt0Lm9uRGVzdHJveV0sdHQ9bnVsbDtaJiYoWi5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixhLCExKSxaLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixvLCExKSk7dmFyIGV0PVYuc2V0RkJPPXMoe2ZyYW1lYnVmZmVyOnEuZGVmaW5lLmNhbGwobnVsbCwxLCJmcmFtZWJ1ZmZlciIpfSk7cmV0dXJuIGgoKSx2PVUocyx7Y2xlYXI6ZnVuY3Rpb24odCl7aWYoImZyYW1lYnVmZmVyImluIHQpaWYodC5mcmFtZWJ1ZmZlciYmImZyYW1lYnVmZmVyQ3ViZSI9PT10LmZyYW1lYnVmZmVyX3JlZ2xUeXBlKWZvcih2YXIgZT0wOzY+ZTsrK2UpZXQoVSh7ZnJhbWVidWZmZXI6dC5mcmFtZWJ1ZmZlci5mYWNlc1tlXX0sdCksbCk7ZWxzZSBldCh0LGwpO2Vsc2UgbCgwLHQpfSxwcm9wOnEuZGVmaW5lLmJpbmQobnVsbCwxKSxjb250ZXh0OnEuZGVmaW5lLmJpbmQobnVsbCwyKSx0aGlzOnEuZGVmaW5lLmJpbmQobnVsbCwzKSxkcmF3OnMoe30pLGJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gei5jcmVhdGUodCwzNDk2MiwhMSwhMSl9LGVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVybiBELmNyZWF0ZSh0LCExKX0sdGV4dHVyZTpGLmNyZWF0ZTJELGN1YmU6Ri5jcmVhdGVDdWJlLHJlbmRlcmJ1ZmZlcjpCLmNyZWF0ZSxmcmFtZWJ1ZmZlcjpWLmNyZWF0ZSxmcmFtZWJ1ZmZlckN1YmU6Vi5jcmVhdGVDdWJlLHZhbzpPLmNyZWF0ZVZBTyxhdHRyaWJ1dGVzOnYsZnJhbWU6YyxvbjpmdW5jdGlvbih0LGUpe3ZhciByO3N3aXRjaCh0KXtjYXNlImZyYW1lIjpyZXR1cm4gYyhlKTtjYXNlImxvc3QiOnI9SzticmVhaztjYXNlInJlc3RvcmUiOnI9UTticmVhaztjYXNlImRlc3Ryb3kiOnI9JH1yZXR1cm4gci5wdXNoKGUpLHtjYW5jZWw6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoOysrdClpZihyW3RdPT09ZSl7clt0XT1yW3IubGVuZ3RoLTFdLHIucG9wKCk7YnJlYWt9fX19LGxpbWl0czpQLGhhc0V4dGVuc2lvbjpmdW5jdGlvbih0KXtyZXR1cm4gMDw9UC5leHRlbnNpb25zLmluZGV4T2YodC50b0xvd2VyQ2FzZSgpKX0scmVhZDp4LGRlc3Ryb3k6ZnVuY3Rpb24oKXtKLmxlbmd0aD0wLG4oKSxaJiYoWi5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixhKSxaLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixvKSksUi5jbGVhcigpLFYuY2xlYXIoKSxCLmNsZWFyKCksRi5jbGVhcigpLEQuY2xlYXIoKSx6LmNsZWFyKCksTy5jbGVhcigpLHcmJncuY2xlYXIoKSwkLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoKX0pKX0sX2dsOm0sX3JlZnJlc2g6aCxwb2xsOmZ1bmN0aW9uKCl7ZigpLHcmJncudXBkYXRlKCl9LG5vdzpnLHN0YXRzOmJ9KSx0Lm9uRG9uZShudWxsLHYpLHZ9fSkpfSx7fV0sNTQxOltmdW5jdGlvbih0LGUscil7Ci8qIQogKiByZXBlYXQtc3RyaW5nIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9yZXBlYXQtc3RyaW5nPgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCiJ1c2Ugc3RyaWN0Ijt2YXIgbixpPSIiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJleHBlY3RlZCBhIHN0cmluZyIpO2lmKDE9PT1lKXJldHVybiB0O2lmKDI9PT1lKXJldHVybiB0K3Q7dmFyIHI9dC5sZW5ndGgqZTtpZihuIT09dHx8InVuZGVmaW5lZCI9PXR5cGVvZiBuKW49dCxpPSIiO2Vsc2UgaWYoaS5sZW5ndGg+PXIpcmV0dXJuIGkuc3Vic3RyKDAscik7Zm9yKDtyPmkubGVuZ3RoJiZlPjE7KTEmZSYmKGkrPXQpLGU+Pj0xLHQrPXQ7cmV0dXJuIGk9KGkrPXQpLnN1YnN0cigwLHIpfX0se31dLDU0MjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24oKXtlLmV4cG9ydHM9dC5wZXJmb3JtYW5jZSYmdC5wZXJmb3JtYW5jZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OkRhdGUubm93fHxmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj10W3QubGVuZ3RoLTFdLG49ZSxpPWUtMjtpPj0wOy0taSl7dmFyIGE9cixvPXRbaV07KGw9by0oKHI9YStvKS1hKSkmJih0Wy0tbl09cixyPWwpfXZhciBzPTA7Zm9yKGk9bjtpPGU7KytpKXt2YXIgbDthPXRbaV07KGw9KG89ciktKChyPWErbyktYSkpJiYodFtzKytdPWwpfXJldHVybiB0W3MrK109cix0Lmxlbmd0aD1zLHR9fSx7fV0sNTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc2NhbGUiKSxvPXQoInJvYnVzdC1jb21wcmVzcyIpO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVsibVsiLHIsIl1bIixuLCJdIl0uam9pbigiIil9cmV0dXJuIGV9ZnVuY3Rpb24gYyh0KXtpZigyPT09dC5sZW5ndGgpcmV0dXJuWyJzdW0ocHJvZCgiLHRbMF1bMF0sIiwiLHRbMV1bMV0sIikscHJvZCgtIix0WzBdWzFdLCIsIix0WzFdWzBdLCIpKSJdLmpvaW4oIiIpO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKFsic2NhbGUoIixjKHModCxyKSksIiwiLChuPXIsMSZuPyItIjoiIiksdFswXVtyXSwiKSJdLmpvaW4oIiIpKTtyZXR1cm4gZnVuY3Rpb24gdChlKXtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIGVbMF07aWYoMj09PWUubGVuZ3RoKXJldHVyblsic3VtKCIsZVswXSwiLCIsZVsxXSwiKSJdLmpvaW4oIiIpO3ZhciByPWUubGVuZ3RoPj4xO3JldHVyblsic3VtKCIsdChlLnNsaWNlKDAscikpLCIsIix0KGUuc2xpY2UocikpLCIpIl0uam9pbigiIil9KGUpO3ZhciBufWZ1bmN0aW9uIHUodCl7cmV0dXJuIG5ldyBGdW5jdGlvbigic3VtIiwic2NhbGUiLCJwcm9kIiwiY29tcHJlc3MiLFsiZnVuY3Rpb24gcm9idXN0RGV0ZXJtaW5hbnQiLHQsIihtKXtyZXR1cm4gY29tcHJlc3MoIixjKGwodCkpLCIpfTtyZXR1cm4gcm9idXN0RGV0ZXJtaW5hbnQiLHRdLmpvaW4oIiIpKShpLGEsbixvKX12YXIgZj1bZnVuY3Rpb24oKXtyZXR1cm5bMF19LGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdWzBdXX1dOyFmdW5jdGlvbigpe2Zvcig7Zi5sZW5ndGg8NjspZi5wdXNoKHUoZi5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bImZ1bmN0aW9uIHJvYnVzdERldGVybWluYW50KG0pe3N3aXRjaChtLmxlbmd0aCl7Il0sbj0wO248NjsrK24pdC5wdXNoKCJkZXQiK24pLHIucHVzaCgiY2FzZSAiLG4sIjpyZXR1cm4gZGV0IixuLCIobSk7Iik7ci5wdXNoKCJ9dmFyIGRldD1DQUNIRVttLmxlbmd0aF07aWYoIWRldClkZXQ9Q0FDSEVbbS5sZW5ndGhdPWdlbihtLmxlbmd0aCk7cmV0dXJuIGRldChtKTt9cmV0dXJuIHJvYnVzdERldGVybWluYW50IiksdC5wdXNoKCJDQUNIRSIsImdlbiIsci5qb2luKCIiKSk7dmFyIGk9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHQpO2ZvcihlLmV4cG9ydHM9aS5hcHBseSh2b2lkIDAsZi5jb25jYXQoW2YsdV0pKSxuPTA7bjxmLmxlbmd0aDsrK24pZS5leHBvcnRzW25dPWZbbl19KCl9LHsicm9idXN0LWNvbXByZXNzIjo1NDMsInJvYnVzdC1zY2FsZSI6NTUwLCJyb2J1c3Qtc3VtIjo1NTMsInR3by1wcm9kdWN0Ijo1ODJ9XSw1NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bih0WzBdLGVbMF0pLGE9MTthPHQubGVuZ3RoOysrYSlyPWkocixuKHRbYV0sZVthXSkpO3JldHVybiByfX0seyJyb2J1c3Qtc3VtIjo1NTMsInR3by1wcm9kdWN0Ijo1ODJ9XSw1NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKSxhPXQoInJvYnVzdC1zdWJ0cmFjdCIpLG89dCgicm9idXN0LXNjYWxlIik7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgtMSksbj0xO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT1yW24tMV09bmV3IEFycmF5KHQubGVuZ3RoLTEpLGE9MCxvPTA7YTx0Lmxlbmd0aDsrK2EpYSE9PWUmJihpW28rK109dFtuXVthXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbCh0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRbMF07aWYoMj09PXQubGVuZ3RoKXJldHVyblsic3VtKCIsdFswXSwiLCIsdFsxXSwiKSJdLmpvaW4oIiIpO3ZhciBlPXQubGVuZ3RoPj4xO3JldHVyblsic3VtKCIsbCh0LnNsaWNlKDAsZSkpLCIsIixsKHQuc2xpY2UoZSkpLCIpIl0uam9pbigiIil9ZnVuY3Rpb24gYyh0LGUpe2lmKCJtIj09PXQuY2hhckF0KDApKXtpZigidyI9PT1lLmNoYXJBdCgwKSl7dmFyIHI9dC5zcGxpdCgiWyIpO3JldHVyblsidyIsZS5zdWJzdHIoMSksIm0iLHJbMF0uc3Vic3RyKDEpXS5qb2luKCIiKX1yZXR1cm5bInByb2QoIix0LCIsIixlLCIpIl0uam9pbigiIil9cmV0dXJuIGMoZSx0KX1mdW5jdGlvbiB1KHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bWyJkaWZmKCIsYyh0WzBdWzBdLHRbMV1bMV0pLCIsIixjKHRbMV1bMF0sdFswXVsxXSksIikiXS5qb2luKCIiKV07Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goWyJzY2FsZSgiLGwodShzKHQscikpKSwiLCIsKG49ciwhMCZuPyItIjoiIiksdFswXVtyXSwiKSJdLmpvaW4oIiIpKTtyZXR1cm4gZTt2YXIgbn1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPGUtMjsrK24pci5wdXNoKFsicHJvZChtIix0LCJbIixuLCJdLG0iLHQsIlsiLG4sIl0pIl0uam9pbigiIikpO3JldHVybiBsKHIpfWZ1bmN0aW9uIGgodCl7Zm9yKHZhciBlPVtdLHI9W10sYz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKXtlW3JdPW5ldyBBcnJheSh0KTtmb3IodmFyIG49MDtuPHQ7KytuKWVbcl1bbl09WyJtIixuLCJbIix0LXItMiwiXSJdLmpvaW4oIiIpfXJldHVybiBlfSh0KSxoPTA7aDx0OysraCljWzBdW2hdPSIxIixjW3QtMV1baF09InciK2g7Zm9yKGg9MDtoPHQ7KytoKTA9PSgxJmgpP2UucHVzaC5hcHBseShlLHUocyhjLGgpKSk6ci5wdXNoLmFwcGx5KHIsdShzKGMsaCkpKTt2YXIgcD1sKGUpLGQ9bChyKSxnPSJleGFjdEluU3BoZXJlIit0LG09W107Zm9yKGg9MDtoPHQ7KytoKW0ucHVzaCgibSIraCk7dmFyIHY9WyJmdW5jdGlvbiAiLGcsIigiLG0uam9pbigpLCIpeyJdO2ZvcihoPTA7aDx0OysraCl7di5wdXNoKCJ2YXIgdyIsaCwiPSIsZihoLHQpLCI7Iik7Zm9yKHZhciB5PTA7eTx0OysreSl5IT09aCYmdi5wdXNoKCJ2YXIgdyIsaCwibSIseSwiPXNjYWxlKHciLGgsIixtIix5LCJbMF0pOyIpfXJldHVybiB2LnB1c2goInZhciBwPSIscCwiLG49IixkLCIsZD1kaWZmKHAsbik7cmV0dXJuIGRbZC5sZW5ndGgtMV07fXJldHVybiAiLGcpLG5ldyBGdW5jdGlvbigic3VtIiwiZGlmZiIsInByb2QiLCJzY2FsZSIsdi5qb2luKCIiKSkoaSxhLG4sbyl9dmFyIHA9W2Z1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9XTtmdW5jdGlvbiBkKHQpe3ZhciBlPXBbdC5sZW5ndGhdO3JldHVybiBlfHwoZT1wW3QubGVuZ3RoXT1oKHQubGVuZ3RoKSksZS5hcHBseSh2b2lkIDAsdCl9IWZ1bmN0aW9uKCl7Zm9yKDtwLmxlbmd0aDw9NjspcC5wdXNoKGgocC5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bInNsb3ciXSxuPTA7bjw9NjsrK24pdC5wdXNoKCJhIituKSxyLnB1c2goIm8iK24pO3ZhciBpPVsiZnVuY3Rpb24gdGVzdEluU3BoZXJlKCIsdC5qb2luKCksIil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Il07Zm9yKG49MjtuPD02OysrbilpLnB1c2goImNhc2UgIixuLCI6cmV0dXJuIG8iLG4sIigiLHQuc2xpY2UoMCxuKS5qb2luKCksIik7Iik7aS5wdXNoKCJ9dmFyIHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpe3NbaV09YXJndW1lbnRzW2ldfTtyZXR1cm4gc2xvdyhzKTt9cmV0dXJuIHRlc3RJblNwaGVyZSIpLHIucHVzaChpLmpvaW4oIiIpKTt2YXIgYT1GdW5jdGlvbi5hcHBseSh2b2lkIDAscik7Zm9yKGUuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbZF0uY29uY2F0KHApKSxuPTA7bjw9NjsrK24pZS5leHBvcnRzW25dPXBbbl19KCl9LHsicm9idXN0LXNjYWxlIjo1NTAsInJvYnVzdC1zdWJ0cmFjdCI6NTUyLCJyb2J1c3Qtc3VtIjo1NTMsInR3by1wcm9kdWN0Ijo1ODJ9XSw1NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicm9idXN0LWRldGVybWluYW50Iik7ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9InJvYnVzdExpbmVhclNvbHZlIit0KyJkIixyPVsiZnVuY3Rpb24gIixlLCIoQSxiKXtyZXR1cm4gWyJdLGk9MDtpPHQ7KytpKXtyLnB1c2goImRldChbIik7Zm9yKHZhciBhPTA7YTx0OysrYSl7YT4wJiZyLnB1c2goIiwiKSxyLnB1c2goIlsiKTtmb3IodmFyIG89MDtvPHQ7KytvKW8+MCYmci5wdXNoKCIsIiksbz09PWk/ci5wdXNoKCIrYlsiLGEsIl0iKTpyLnB1c2goIitBWyIsYSwiXVsiLG8sIl0iKTtyLnB1c2goIl0iKX1yLnB1c2goIl0pLCIpfXIucHVzaCgiZGV0KEEpXX1yZXR1cm4gIixlKTt2YXIgcz1uZXcgRnVuY3Rpb24oImRldCIsci5qb2luKCIiKSk7cmV0dXJuIHModDw2P25bdF06bil9dmFyIGE9W2Z1bmN0aW9uKCl7cmV0dXJuWzBdfSxmdW5jdGlvbih0LGUpe3JldHVybltbZVswXV0sW3RbMF1bMF1dXX1dOyFmdW5jdGlvbigpe2Zvcig7YS5sZW5ndGg8NjspYS5wdXNoKGkoYS5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bImZ1bmN0aW9uIGRpc3BhdGNoTGluZWFyU29sdmUoQSxiKXtzd2l0Y2goQS5sZW5ndGgpeyJdLG49MDtuPDY7KytuKXQucHVzaCgicyIrbiksci5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBzIixuLCIoQSxiKTsiKTtyLnB1c2goIn12YXIgcz1DQUNIRVtBLmxlbmd0aF07aWYoIXMpcz1DQUNIRVtBLmxlbmd0aF09ZyhBLmxlbmd0aCk7cmV0dXJuIHMoQSxiKX1yZXR1cm4gZGlzcGF0Y2hMaW5lYXJTb2x2ZSIpLHQucHVzaCgiQ0FDSEUiLCJnIixyLmpvaW4oIiIpKTt2YXIgbz1GdW5jdGlvbi5hcHBseSh2b2lkIDAsdCk7Zm9yKGUuZXhwb3J0cz1vLmFwcGx5KHZvaWQgMCxhLmNvbmNhdChbYSxpXSkpLG49MDtuPDY7KytuKWUuZXhwb3J0c1tuXT1hW25dfSgpfSx7InJvYnVzdC1kZXRlcm1pbmFudCI6NTQ0fV0sNTQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc2NhbGUiKSxvPXQoInJvYnVzdC1zdWJ0cmFjdCIpO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGwodCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0WzBdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bInN1bSgiLHRbMF0sIiwiLHRbMV0sIikiXS5qb2luKCIiKTt2YXIgZT10Lmxlbmd0aD4+MTtyZXR1cm5bInN1bSgiLGwodC5zbGljZSgwLGUpKSwiLCIsbCh0LnNsaWNlKGUpKSwiKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIGModCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbInN1bShwcm9kKCIsdFswXVswXSwiLCIsdFsxXVsxXSwiKSxwcm9kKC0iLHRbMF1bMV0sIiwiLHRbMV1bMF0sIikpIl0uam9pbigiIildO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKFsic2NhbGUoIixsKGMocyh0LHIpKSksIiwiLChuPXIsMSZuPyItIjoiIiksdFswXVtyXSwiKSJdLmpvaW4oIiIpKTtyZXR1cm4gZTt2YXIgbn1mdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT1bXSxyPVtdLHU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVsibSIsbiwiWyIsdC1yLTEsIl0iXS5qb2luKCIiKX1yZXR1cm4gZX0odCksZj1bXSxoPTA7aDx0OysraCkwPT0oMSZoKT9lLnB1c2guYXBwbHkoZSxjKHModSxoKSkpOnIucHVzaC5hcHBseShyLGMocyh1LGgpKSksZi5wdXNoKCJtIitoKTt2YXIgcD1sKGUpLGQ9bChyKSxnPSJvcmllbnRhdGlvbiIrdCsiRXhhY3QiLG09WyJmdW5jdGlvbiAiLGcsIigiLGYuam9pbigpLCIpe3ZhciBwPSIscCwiLG49IixkLCIsZD1zdWIocCxuKTtyZXR1cm4gZFtkLmxlbmd0aC0xXTt9O3JldHVybiAiLGddLmpvaW4oIiIpO3JldHVybiBuZXcgRnVuY3Rpb24oInN1bSIsInByb2QiLCJzY2FsZSIsInN1YiIsbSkoaSxuLGEsbyl9dmFyIGY9dSgzKSxoPXUoNCkscD1bZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS10WzBdfSxmdW5jdGlvbih0LGUscil7dmFyIG4saT0odFsxXS1yWzFdKSooZVswXS1yWzBdKSxhPSh0WzBdLXJbMF0pKihlWzFdLXJbMV0pLG89aS1hO2lmKGk+MCl7aWYoYTw9MClyZXR1cm4gbztuPWkrYX1lbHNle2lmKCEoaTwwKSlyZXR1cm4gbztpZihhPj0wKXJldHVybiBvO249LShpK2EpfXZhciBzPTMzMzA2NjkwNzM4NzU0NzE2ZS0zMipuO3JldHVybiBvPj1zfHxvPD0tcz9vOmYodCxlLHIpfSxmdW5jdGlvbih0LGUscixuKXt2YXIgaT10WzBdLW5bMF0sYT1lWzBdLW5bMF0sbz1yWzBdLW5bMF0scz10WzFdLW5bMV0sbD1lWzFdLW5bMV0sYz1yWzFdLW5bMV0sdT10WzJdLW5bMl0sZj1lWzJdLW5bMl0scD1yWzJdLW5bMl0sZD1hKmMsZz1vKmwsbT1vKnMsdj1pKmMseT1pKmwseD1hKnMsYj11KihkLWcpK2YqKG0tdikrcCooeS14KSxfPTc3NzE1NjExNzIzNzYxMDNlLTMxKigoTWF0aC5hYnMoZCkrTWF0aC5hYnMoZykpKk1hdGguYWJzKHUpKyhNYXRoLmFicyhtKStNYXRoLmFicyh2KSkqTWF0aC5hYnMoZikrKE1hdGguYWJzKHkpK01hdGguYWJzKHgpKSpNYXRoLmFicyhwKSk7cmV0dXJuIGI+X3x8LWI+Xz9iOmgodCxlLHIsbil9XTtmdW5jdGlvbiBkKHQpe3ZhciBlPXBbdC5sZW5ndGhdO3JldHVybiBlfHwoZT1wW3QubGVuZ3RoXT11KHQubGVuZ3RoKSksZS5hcHBseSh2b2lkIDAsdCl9IWZ1bmN0aW9uKCl7Zm9yKDtwLmxlbmd0aDw9NTspcC5wdXNoKHUocC5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bInNsb3ciXSxuPTA7bjw9NTsrK24pdC5wdXNoKCJhIituKSxyLnB1c2goIm8iK24pO3ZhciBpPVsiZnVuY3Rpb24gZ2V0T3JpZW50YXRpb24oIix0LmpvaW4oKSwiKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDsiXTtmb3Iobj0yO248PTU7KytuKWkucHVzaCgiY2FzZSAiLG4sIjpyZXR1cm4gbyIsbiwiKCIsdC5zbGljZSgwLG4pLmpvaW4oKSwiKTsiKTtpLnB1c2goIn12YXIgcz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoOysraSl7c1tpXT1hcmd1bWVudHNbaV19O3JldHVybiBzbG93KHMpO31yZXR1cm4gZ2V0T3JpZW50YXRpb24iKSxyLnB1c2goaS5qb2luKCIiKSk7dmFyIGE9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpO2ZvcihlLmV4cG9ydHM9YS5hcHBseSh2b2lkIDAsW2RdLmNvbmNhdChwKSksbj0wO248PTU7KytuKWUuZXhwb3J0c1tuXT1wW25dfSgpfSx7InJvYnVzdC1zY2FsZSI6NTUwLCJyb2J1c3Qtc3VidHJhY3QiOjU1Miwicm9idXN0LXN1bSI6NTUzLCJ0d28tcHJvZHVjdCI6NTgyfV0sNTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1zdW0iKSxpPXQoInJvYnVzdC1zY2FsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gaShlLHRbMF0pO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gaSh0LGVbMF0pO2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVyblswXTt2YXIgcj1bMF07aWYodC5sZW5ndGg8ZS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2Epcj1uKHIsaShlLHRbYV0pKTtlbHNlIGZvcihhPTA7YTxlLmxlbmd0aDsrK2Epcj1uKHIsaSh0LGVbYV0pKTtyZXR1cm4gcn19LHsicm9idXN0LXNjYWxlIjo1NTAsInJvYnVzdC1zdW0iOjU1M31dLDU1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgidHdvLXN1bSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDE9PT1yKXt2YXIgYT1uKHRbMF0sZSk7cmV0dXJuIGFbMF0/YTpbYVsxXV19dmFyIG89bmV3IEFycmF5KDIqcikscz1bLjEsLjFdLGw9Wy4xLC4xXSxjPTA7bih0WzBdLGUscyksc1swXSYmKG9bYysrXT1zWzBdKTtmb3IodmFyIHU9MTt1PHI7Kyt1KXtuKHRbdV0sZSxsKTt2YXIgZj1zWzFdO2koZixsWzBdLHMpLHNbMF0mJihvW2MrK109c1swXSk7dmFyIGg9bFsxXSxwPXNbMV0sZD1oK3AsZz1wLShkLWgpO3NbMV09ZCxnJiYob1tjKytdPWcpfXNbMV0mJihvW2MrK109c1sxXSk7MD09PWMmJihvW2MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPWMsb319LHsidHdvLXByb2R1Y3QiOjU4MiwidHdvLXN1bSI6NTgzfV0sNTUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1uKHQscixpKSxvPW4oZSxyLGkpO2lmKGE+MCYmbz4wfHxhPDAmJm88MClyZXR1cm4hMTt2YXIgcz1uKHIsdCxlKSxsPW4oaSx0LGUpO2lmKHM+MCYmbD4wfHxzPDAmJmw8MClyZXR1cm4hMTtpZigwPT09YSYmMD09PW8mJjA9PT1zJiYwPT09bClyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTwyOysraSl7dmFyIGE9dFtpXSxvPWVbaV0scz1NYXRoLm1pbihhLG8pLGw9TWF0aC5tYXgoYSxvKSxjPXJbaV0sdT1uW2ldLGY9TWF0aC5taW4oYyx1KTtpZihNYXRoLm1heChjLHUpPHN8fGw8ZilyZXR1cm4hMX1yZXR1cm4hMH0odCxlLHIsaSk7cmV0dXJuITB9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTQ4fV0sNTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTB8dC5sZW5ndGgsbj0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09bilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10K2Usbj1yLXQsaT10LShyLW4pKyhlLW4pO2lmKGkpcmV0dXJuW2kscl07cmV0dXJuW3JdfSh0WzBdLC1lWzBdKTt2YXIgaSxhLG89bmV3IEFycmF5KHIrbikscz0wLGw9MCxjPTAsdT1NYXRoLmFicyxmPXRbbF0saD11KGYpLHA9LWVbY10sZD11KHApO2g8ZD8oYT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihhPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpO2w8ciYmaDxkfHxjPj1uPyhpPWYsKGwrPTEpPHImJihmPXRbbF0saD11KGYpKSk6KGk9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSk7dmFyIGcsbSx2PWkrYSx5PXYtaSx4PWEteSxiPXgsXz12O2Zvcig7bDxyJiZjPG47KWg8ZD8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpLCh4PShhPWIpLSh5PSh2PWkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9Xyt2KS0obT1nLV8pKSsodi1tKSxfPWc7Zm9yKDtsPHI7KSh4PShhPWIpLSh5PSh2PShpPWYpK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rdiktKG09Zy1fKSkrKHYtbSksXz1nLChsKz0xKTxyJiYoZj10W2xdKTtmb3IoO2M8bjspKHg9KGE9YiktKHk9KHY9KGk9cCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9Xyt2KS0obT1nLV8pKSsodi1tKSxfPWcsKGMrPTEpPG4mJihwPS1lW2NdKTtiJiYob1tzKytdPWIpO18mJihvW3MrK109Xyk7c3x8KG9bcysrXT0wKTtyZXR1cm4gby5sZW5ndGg9cyxvfX0se31dLDU1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0wfHQubGVuZ3RoLG49MHxlLmxlbmd0aDtpZigxPT09ciYmMT09PW4pcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9dCtlLG49ci10LGk9dC0oci1uKSsoZS1uKTtpZihpKXJldHVybltpLHJdO3JldHVybltyXX0odFswXSxlWzBdKTt2YXIgaSxhLG89bmV3IEFycmF5KHIrbikscz0wLGw9MCxjPTAsdT1NYXRoLmFicyxmPXRbbF0saD11KGYpLHA9ZVtjXSxkPXUocCk7aDxkPyhhPWYsKGwrPTEpPHImJihmPXRbbF0saD11KGYpKSk6KGE9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKTtsPHImJmg8ZHx8Yz49bj8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSk7dmFyIGcsbSx2PWkrYSx5PXYtaSx4PWEteSxiPXgsXz12O2Zvcig7bDxyJiZjPG47KWg8ZD8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSksKHg9KGE9YiktKHk9KHY9aSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK3YpLShtPWctXykpKyh2LW0pLF89Zztmb3IoO2w8cjspKHg9KGE9YiktKHk9KHY9KGk9ZikrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9Xyt2KS0obT1nLV8pKSsodi1tKSxfPWcsKGwrPTEpPHImJihmPXRbbF0pO2Zvcig7YzxuOykoeD0oYT1iKS0oeT0odj0oaT1wKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK3YpLShtPWctXykpKyh2LW0pLF89ZywoYys9MSk8biYmKHA9ZVtjXSk7YiYmKG9bcysrXT1iKTtfJiYob1tzKytdPV8pO3N8fChvW3MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPXMsb319LHt9XSw1NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PDA/LTE6dD4wPzE6MH19LHt9XSw1NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfTt2YXIgbj10KCJib3VuZGFyeS1jZWxscyIpLGk9dCgicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleCIpfSx7ImJvdW5kYXJ5LWNlbGxzIjoxMDAsInJlZHVjZS1zaW1wbGljaWFsLWNvbXBsZXgiOjUzM31dLDU1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7cj1yfHwwLCJ1bmRlZmluZWQiPT10eXBlb2YgcyYmKHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MCxuPTA7bjxlOysrbilyPTB8TWF0aC5tYXgocix0W25dLmxlbmd0aCk7cmV0dXJuIHItMX0odCkpO2lmKDA9PT10Lmxlbmd0aHx8czwxKXJldHVybntjZWxsczpbXSx2ZXJ0ZXhJZHM6W10sdmVydGV4V2VpZ2h0czpbXX07dmFyIGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1pLm1hbGxvY1VpbnQ4KHIpLGE9MDthPHI7KythKW5bYV09dFthXTxlfDA7cmV0dXJuIG59KGUsK3IpLGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbz1lKihlKzEpLzIqcnwwLHM9aS5tYWxsb2NVaW50MzIoMipvKSxsPTAsYz0wO2M8cjsrK2MpZm9yKHZhciB1PXRbY10sZj0oZT11Lmxlbmd0aCwwKTtmPGU7KytmKWZvcih2YXIgaD0wO2g8ZjsrK2gpe3ZhciBwPXVbaF0sZD11W2ZdO3NbbCsrXT0wfE1hdGgubWluKHAsZCksc1tsKytdPTB8TWF0aC5tYXgocCxkKX1hKG4ocyxbbC8yfDAsMl0pKTt2YXIgZz0yO2ZvcihjPTI7YzxsO2MrPTIpc1tjLTJdPT09c1tjXSYmc1tjLTFdPT09c1tjKzFdfHwoc1tnKytdPXNbY10sc1tnKytdPXNbYysxXSk7cmV0dXJuIG4ocyxbZy8yfDAsMl0pfSh0LHMpLHU9ZnVuY3Rpb24odCxlLHIsYSl7Zm9yKHZhciBvPXQuZGF0YSxzPXQuc2hhcGVbMF0sbD1pLm1hbGxvY0RvdWJsZShzKSxjPTAsdT0wO3U8czsrK3Upe3ZhciBmPW9bMip1XSxoPW9bMip1KzFdO2lmKHJbZl0hPT1yW2hdKXt2YXIgcD1lW2ZdLGQ9ZVtoXTtvWzIqY109ZixvWzIqYysxXT1oLGxbYysrXT0oZC1hKS8oZC1wKX19cmV0dXJuIHQuc2hhcGVbMF09YyxuKGwsW2NdKX0oYyxlLGwsK3IpLGY9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLm1hbGxvY0ludDMyKDIqZSksbj10LnNoYXBlWzBdLGE9dC5kYXRhO3JbMF09MDtmb3IodmFyIG89MCxzPTA7czxuOysrcyl7dmFyIGw9YVsyKnNdO2lmKGwhPT1vKXtmb3IoclsyKm8rMV09czsrK288bDspclsyKm9dPXMsclsyKm8rMV09cztyWzIqb109c319clsyKm8rMV09bjtmb3IoOysrbzxlOylyWzIqb109clsyKm8rMV09bjtyZXR1cm4gcn0oYywwfGUubGVuZ3RoKSxoPW8ocykodCxjLmRhdGEsZixsKSxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wfHQuc2hhcGVbMF0scj10LmRhdGEsbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT1bclsyKmldLHJbMippKzFdXTtyZXR1cm4gbn0oYyksZD1bXS5zbGljZS5jYWxsKHUuZGF0YSwwLHUuc2hhcGVbMF0pO3JldHVybiBpLmZyZWUobCksaS5mcmVlKGMuZGF0YSksaS5mcmVlKHUuZGF0YSksaS5mcmVlKGYpLHtjZWxsczpoLHZlcnRleElkczpwLHZlcnRleFdlaWdodHM6ZH19O3ZhciBuPXQoIm5kYXJyYXkiKSxpPXQoInR5cGVkYXJyYXktcG9vbCIpLGE9dCgibmRhcnJheS1zb3J0Iiksbz10KCIuL2xpYi9jb2RlZ2VuIil9LHsiLi9saWIvY29kZWdlbiI6NTU3LG5kYXJyYXk6NDk1LCJuZGFycmF5LXNvcnQiOjQ5NCwidHlwZWRhcnJheS1wb29sIjo1OTV9XSw1NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWFbdF07ZXx8KGU9YVt0XT1mdW5jdGlvbih0KXt2YXIgZT0wLHI9bmV3IEFycmF5KHQrMSk7clswXT1bW11dO2Zvcih2YXIgYT0xO2E8PXQ7KythKWZvcih2YXIgbz1yW2FdPWkoYSkscz0wO3M8by5sZW5ndGg7KytzKWU9TWF0aC5tYXgoZSxvW2FdLmxlbmd0aCk7dmFyIGw9WyJmdW5jdGlvbiBCKEMsRSxpLGopeyIsInZhciBhPU1hdGgubWluKGksail8MCxiPU1hdGgubWF4KGksail8MCxsPUNbMiphXSxoPUNbMiphKzFdOyIsIndoaWxlKGw8aCl7IiwidmFyIG09KGwraCk+PjEsdj1FWzIqbSsxXTsiLCJpZih2PT09Yil7cmV0dXJuIG19IiwiaWYoYjx2KXtoPW19ZWxzZXtsPW0rMX0iLCJ9IiwicmV0dXJuIGw7IiwifTsiLCJmdW5jdGlvbiBnZXRDb250b3VyIix0LCJkKEYsRSxDLFMpeyIsInZhciBuPUYubGVuZ3RoLFI9W107IiwiZm9yKHZhciBpPTA7aTxuOysraSl7dmFyIGM9RltpXSxsPWMubGVuZ3RoOyJdO2Z1bmN0aW9uIGModCl7aWYoISh0Lmxlbmd0aDw9MCkpe2wucHVzaCgiUi5wdXNoKCIpO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7KytlKXt2YXIgcj10W2VdO2U+MCYmbC5wdXNoKCIsIiksbC5wdXNoKCJbIik7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07bj4wJiZsLnB1c2goIiwiKSxsLnB1c2goIkIoQyxFLGNbIixpWzBdLCJdLGNbIixpWzFdLCJdKSIpfWwucHVzaCgiXSIpfWwucHVzaCgiKTsiKX19Zm9yKGE9dCsxO2E+MTstLWEpe2E8dCsxJiZsLnB1c2goImVsc2UgIiksbC5wdXNoKCJpZihsPT09IixhLCIpeyIpO3ZhciB1PVtdO2ZvcihzPTA7czxhOysrcyl1LnB1c2goIihTW2NbIitzKyJdXTw8IitzKyIpIik7bC5wdXNoKCJ2YXIgTT0iLHUuam9pbigiKyIpLCI7aWYoTT09PTB8fE09PT0iLCgxPDxhKS0xLCIpe2NvbnRpbnVlfXN3aXRjaChNKXsiKTtmb3Iobz1yW2EtMV0scz0wO3M8by5sZW5ndGg7KytzKWwucHVzaCgiY2FzZSAiLHMsIjoiKSxjKG9bc10pLGwucHVzaCgiYnJlYWs7Iik7bC5wdXNoKCJ9fSIpfXJldHVybiBsLnB1c2goIn1yZXR1cm4gUjt9O3JldHVybiBnZXRDb250b3VyIix0LCJkIiksbmV3IEZ1bmN0aW9uKCJwb29sIixsLmpvaW4oIiIpKShuKX0odCkpO3JldHVybiBlfTt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxpPXQoIm1hcmNoaW5nLXNpbXBsZXgtdGFibGUiKSxhPXt9fSx7Im1hcmNoaW5nLXNpbXBsZXgtdGFibGUiOjQ3NCwidHlwZWRhcnJheS1wb29sIjo1OTV9XSw1NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoInVuaW9uLWZpbmQiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9dC5sZW5ndGgsbj10Lmxlbmd0aC1lLmxlbmd0aCxpPU1hdGgubWluO2lmKG4pcmV0dXJuIG47c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuKHM9dFswXSt0WzFdLWVbMF0tZVsxXSl8fGkodFswXSx0WzFdKS1pKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBhPXRbMF0rdFsxXSxvPWVbMF0rZVsxXTtpZihzPWErdFsyXS0obytlWzJdKSlyZXR1cm4gczt2YXIgcyxsPWkodFswXSx0WzFdKSxjPWkoZVswXSxlWzFdKTtyZXR1cm4ocz1pKGwsdFsyXSktaShjLGVbMl0pKXx8aShsK3RbMl0sYSktaShjK2VbMl0sbyk7ZGVmYXVsdDp2YXIgdT10LnNsaWNlKDApO3Uuc29ydCgpO3ZhciBmPWUuc2xpY2UoMCk7Zi5zb3J0KCk7Zm9yKHZhciBoPTA7aDxyOysraClpZihuPXVbaF0tZltoXSlyZXR1cm4gbjtyZXR1cm4gMH19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBhKHRbMF0sZVswXSl9ZnVuY3Rpb24gcyh0LGUpe2lmKGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSluW2ldPVt0W2ldLGVbaV1dO24uc29ydChvKTtmb3IoaT0wO2k8cjsrK2kpdFtpXT1uW2ldWzBdLGVbaV09bltpXVsxXTtyZXR1cm4gdH1yZXR1cm4gdC5zb3J0KGEpLHR9ZnVuY3Rpb24gbCh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPTE7bjxyOysrbil7dmFyIGk9dFtuXTtpZihhKGksdFtuLTFdKSl7aWYobj09PWUpe2UrKztjb250aW51ZX10W2UrK109aX19cmV0dXJuIHQubGVuZ3RoPWUsdH1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9LTE7cjw9bjspe3ZhciBvPXIrbj4+MSxzPWEodFtvXSxlKTtzPD0wPygwPT09cyYmKGk9bykscj1vKzEpOnM+MCYmKG49by0xKX1yZXR1cm4gaX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldPVtdO2Zvcih2YXIgcz1bXSxsPShpPTAsZS5sZW5ndGgpO2k8bDsrK2kpZm9yKHZhciB1PWVbaV0sZj11Lmxlbmd0aCxoPTEscD0xPDxmO2g8cDsrK2gpe3MubGVuZ3RoPW4ucG9wQ291bnQoaCk7Zm9yKHZhciBkPTAsZz0wO2c8ZjsrK2cpaCYxPDxnJiYoc1tkKytdPXVbZ10pO3ZhciBtPWModCxzKTtpZighKG08MCkpZm9yKDtyW20rK10ucHVzaChpKSwhKG0+PXQubGVuZ3RofHwwIT09YSh0W21dLHMpKTspO31yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7aWYoZTwwKXJldHVybltdO2Zvcih2YXIgcj1bXSxpPSgxPDxlKzEpLTEsYT0wO2E8dC5sZW5ndGg7KythKWZvcih2YXIgbz10W2FdLGw9aTtsPDE8PG8ubGVuZ3RoO2w9bi5uZXh0Q29tYmluYXRpb24obCkpe2Zvcih2YXIgYz1uZXcgQXJyYXkoZSsxKSx1PTAsZj0wO2Y8by5sZW5ndGg7KytmKWwmMTw8ZiYmKGNbdSsrXT1vW2ZdKTtyLnB1c2goYyl9cmV0dXJuIHMocil9ci5kaW1lbnNpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWU9cihlLHRbbl0ubGVuZ3RoKTtyZXR1cm4gZS0xfSxyLmNvdW50VmVydGljZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xLHI9TWF0aC5tYXgsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGE9dFtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKWU9cihlLGFbb10pO3JldHVybiBlKzF9LHIuY2xvbmVDZWxscz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWVbcl09dFtyXS5zbGljZSgwKTtyZXR1cm4gZX0sci5jb21wYXJlQ2VsbHM9YSxyLm5vcm1hbGl6ZT1zLHIudW5pcXVlPWwsci5maW5kQ2VsbD1jLHIuaW5jaWRlbmNlPXUsci5kdWFsPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHUobChmKHQsMCkpLHQpO2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT1bXTtuPTA7Zm9yKHZhciBpPXQubGVuZ3RoO248aTsrK24pZm9yKHZhciBhPXRbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbylyW2Fbb11dLnB1c2gobik7cmV0dXJuIHJ9LHIuZXhwbG9kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTB8aS5sZW5ndGgsbz0xLGw9MTw8YTtvPGw7KytvKXtmb3IodmFyIGM9W10sdT0wO3U8YTsrK3Upbz4+PnUmMSYmYy5wdXNoKGlbdV0pO2UucHVzaChjKX1yZXR1cm4gcyhlKX0sci5za2VsZXRvbj1mLHIuYm91bmRhcnk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvOysrYSl7Zm9yKHZhciBsPW5ldyBBcnJheShpLmxlbmd0aC0xKSxjPTAsdT0wO2M8bzsrK2MpYyE9PWEmJihsW3UrK109aVtjXSk7ZS5wdXNoKGwpfXJldHVybiBzKGUpfSxyLmNvbm5lY3RlZENvbXBvbmVudHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgaShlKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgcz1vKzE7czxhLmxlbmd0aDsrK3Mpci5saW5rKGFbb10sYVtzXSk7dmFyIGw9W10sYz1yLnJhbmtzO2ZvcihuPTA7bjxjLmxlbmd0aDsrK24pY1tuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgdT1yLmZpbmQodFtuXVswXSk7Y1t1XTwwPyhjW3VdPWwubGVuZ3RoLGwucHVzaChbdFtuXS5zbGljZSgwKV0pKTpsW2NbdV1dLnB1c2godFtuXS5zbGljZSgwKSl9cmV0dXJuIGx9KHQsZSk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWwocyhmKHQsMCkpKSxyPW5ldyBpKGUubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgdT1jKGUsW2Fbb11dKSxoPW8rMTtoPGEubGVuZ3RoOysraClyLmxpbmsodSxjKGUsW2FbaF1dKSk7dmFyIHA9W10sZD1yLnJhbmtzO2ZvcihuPTA7bjxkLmxlbmd0aDsrK24pZFtuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgZz1yLmZpbmQoYyhlLFt0W25dWzBdXSkpO2RbZ108MD8oZFtnXT1wLmxlbmd0aCxwLnB1c2goW3Rbbl0uc2xpY2UoMCldKSk6cFtkW2ddXS5wdXNoKHRbbl0uc2xpY2UoMCkpfXJldHVybiBwfSh0KX19LHsiYml0LXR3aWRkbGUiOjk3LCJ1bmlvbi1maW5kIjo1OTZ9XSw1NTk6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bOTddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDo5N31dLDU2MDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs1NThdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyJiaXQtdHdpZGRsZSI6NTU5LGR1cDo1NTgsInVuaW9uLWZpbmQiOjU2MX1dLDU2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucm9vdHM9bmV3IEFycmF5KHQpLHRoaXMucmFua3M9bmV3IEFycmF5KHQpO2Zvcih2YXIgZT0wO2U8dDsrK2UpdGhpcy5yb290c1tlXT1lLHRoaXMucmFua3NbZV09MH1lLmV4cG9ydHM9bixuLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290cy5sZW5ndGh9LG4ucHJvdG90eXBlLm1ha2VTZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJvb3RzLmxlbmd0aDtyZXR1cm4gdGhpcy5yb290cy5wdXNoKHQpLHRoaXMucmFua3MucHVzaCgwKSx0fSxuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnJvb3RzO2VbdF0hPT10Oyl7dmFyIHI9ZVt0XTtlW3RdPWVbcl0sdD1yfXJldHVybiB0fSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5maW5kKHQpLG49dGhpcy5maW5kKGUpO2lmKHIhPT1uKXt2YXIgaT10aGlzLnJhbmtzLGE9dGhpcy5yb290cyxvPWlbcl0scz1pW25dO288cz9hW3JdPW46czxvP2Fbbl09cjooYVtuXT1yLCsraVtyXSl9fX0se31dLDU2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9bmV3IEFycmF5KGEpLGY9MDtmPGE7KytmKXNbZl09bFtmXT0tMSxjW2ZdPTEvMCx1W2ZdPSExO2ZvcihmPTA7ZjxvOysrZil7dmFyIGg9dFtmXTtpZigyIT09aC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbnB1dCBtdXN0IGJlIGEgZ3JhcGgiKTt2YXIgcD1oWzFdLGQ9aFswXTstMSE9PWxbZF0/bFtkXT0tMjpsW2RdPXAsLTEhPT1zW3BdP3NbcF09LTI6c1twXT1kfWZ1bmN0aW9uIGcodCl7aWYodVt0XSlyZXR1cm4gMS8wO3ZhciByLGksYSxvLGMsZj1zW3RdLGg9bFt0XTtyZXR1cm4gZjwwfHxoPDA/MS8wOihyPWVbdF0saT1lW2ZdLGE9ZVtoXSxvPU1hdGguYWJzKG4ocixpLGEpKSxjPU1hdGguc3FydChNYXRoLnBvdyhpWzBdLWFbMF0sMikrTWF0aC5wb3coaVsxXS1hWzFdLDIpKSxvL2MpfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj1rW3RdLG49a1tlXTtrW3RdPW4sa1tlXT1yLE1bcl09ZSxNW25dPXR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gY1trW3RdXX1mdW5jdGlvbiB5KHQpe3JldHVybiAxJnQ/dC0xPj4xOih0Pj4xKS0xfWZ1bmN0aW9uIHgodCl7Zm9yKHZhciBlPXYodCk7Oyl7dmFyIHI9ZSxuPTIqdCsxLGk9MioodCsxKSxhPXQ7aWYobjxBKXt2YXIgbz12KG4pO288ciYmKGE9bixyPW8pfWlmKGk8QSl2KGkpPHImJihhPWkpO2lmKGE9PT10KXJldHVybiB0O20odCxhKSx0PWF9fWZ1bmN0aW9uIGIodCl7Zm9yKHZhciBlPXYodCk7dD4wOyl7dmFyIHI9eSh0KTtpZihyPj0wKWlmKGU8dihyKSl7bSh0LHIpLHQ9cjtjb250aW51ZX1yZXR1cm4gdH19ZnVuY3Rpb24gXygpe2lmKEE+MCl7dmFyIHQ9a1swXTtyZXR1cm4gbSgwLEEtMSksQS09MSx4KDApLHR9cmV0dXJuLTF9ZnVuY3Rpb24gdyh0LGUpe3ZhciByPWtbdF07cmV0dXJuIGNbcl09PT1lP3Q6KGNbcl09LTEvMCxiKHQpLF8oKSxjW3JdPWUsYigoQSs9MSktMSkpfWZ1bmN0aW9uIFQodCl7aWYoIXVbdF0pe3VbdF09ITA7dmFyIGU9c1t0XSxyPWxbdF07c1tyXT49MCYmKHNbcl09ZSksbFtlXT49MCYmKGxbZV09ciksTVtlXT49MCYmdyhNW2VdLGcoZSkpLE1bcl0+PTAmJncoTVtyXSxnKHIpKX19dmFyIGs9W10sTT1uZXcgQXJyYXkoYSk7Zm9yKGY9MDtmPGE7KytmKXsoY1tmXT1nKGYpKTwxLzA/KE1bZl09ay5sZW5ndGgsay5wdXNoKGYpKTpNW2ZdPS0xfXZhciBBPWsubGVuZ3RoO2ZvcihmPUE+PjE7Zj49MDstLWYpeChmKTtmb3IoOzspe3ZhciBTPV8oKTtpZihTPDB8fGNbU10+cilicmVhaztUKFMpfXZhciBFPVtdO2ZvcihmPTA7ZjxhOysrZil1W2ZdfHwoTVtmXT1FLmxlbmd0aCxFLnB1c2goZVtmXS5zbGljZSgpKSk7RS5sZW5ndGg7ZnVuY3Rpb24gQyh0LGUpe2lmKHRbZV08MClyZXR1cm4gZTt2YXIgcj1lLG49ZTtkb3t2YXIgaT10W25dO2lmKCF1W25dfHxpPDB8fGk9PT1uKWJyZWFrO2lmKGk9dFtuPWldLCF1W25dfHxpPDB8fGk9PT1uKWJyZWFrO249aSxyPXRbcl19d2hpbGUociE9PW4pO2Zvcih2YXIgYT1lO2EhPT1uO2E9dFthXSl0W2FdPW47cmV0dXJuIG59dmFyIEw9W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9QyhzLHRbMF0pLHI9QyhsLHRbMV0pO2lmKGU+PTAmJnI+PTAmJmUhPT1yKXt2YXIgbj1NW2VdLGk9TVtyXTtuIT09aSYmTC5wdXNoKFtuLGldKX19KSksaS51bmlxdWUoaS5ub3JtYWxpemUoTCkpLHtwb3NpdGlvbnM6RSxlZGdlczpMfX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaW1wbGljaWFsLWNvbXBsZXgiKX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjU0OCwic2ltcGxpY2lhbC1jb21wbGV4Ijo1NjB9XSw1NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM7aWYoZVswXVswXTxlWzFdWzBdKXI9ZVswXSxhPWVbMV07ZWxzZXtpZighKGVbMF1bMF0+ZVsxXVswXSkpcmV0dXJuIGkoZSx0KTtyPWVbMV0sYT1lWzBdfWlmKHRbMF1bMF08dFsxXVswXSlvPXRbMF0scz10WzFdO2Vsc2V7aWYoISh0WzBdWzBdPnRbMV1bMF0pKXJldHVybi1pKHQsZSk7bz10WzFdLHM9dFswXX12YXIgbD1uKHIsYSxzKSxjPW4ocixhLG8pO2lmKGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7aWYobD1uKHMsbyxhKSxjPW4ocyxvLHIpLGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7cmV0dXJuIGFbMF0tc1swXX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByLGksYSxvO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0saT1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXt2YXIgcz1NYXRoLm1pbih0WzBdWzFdLHRbMV1bMV0pLGw9TWF0aC5tYXgodFswXVsxXSx0WzFdWzFdKSxjPU1hdGgubWluKGVbMF1bMV0sZVsxXVsxXSksdT1NYXRoLm1heChlWzBdWzFdLGVbMV1bMV0pO3JldHVybiBsPGM/bC1jOnM+dT9zLXU6bC11fXI9ZVsxXSxpPWVbMF19dFswXVsxXTx0WzFdWzFdPyhhPXRbMF0sbz10WzFdKTooYT10WzFdLG89dFswXSk7dmFyIGY9bihpLHIsYSk7cmV0dXJuIGZ8fCgoZj1uKGkscixvKSl8fG8taSl9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTQ4fV0sNTY0OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzI0M11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjI0M31dLDU2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MiplLG49bmV3IEFycmF5KHIpLGE9MDthPGU7KythKXt2YXIgbD10W2FdLGM9bFswXVswXTxsWzFdWzBdO25bMiphXT1uZXcgZihsWzBdWzBdLGwsYyxhKSxuWzIqYSsxXT1uZXcgZihsWzFdWzBdLGwsIWMsYSl9bi5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1lLng7cmV0dXJuIHJ8fCgocj10LmNyZWF0ZS1lLmNyZWF0ZSl8fE1hdGgubWluKHQuc2VnbWVudFswXVsxXSx0LnNlZ21lbnRbMV1bMV0pLU1hdGgubWluKGUuc2VnbWVudFswXVsxXSxlLnNlZ21lbnRbMV1bMV0pKX0pKTt2YXIgaD1pKG8pLHA9W10sZD1bXSxnPVtdO2ZvcihhPTA7YTxyOyl7Zm9yKHZhciBtPW5bYV0ueCx2PVtdO2E8cjspe3ZhciB5PW5bYV07aWYoeS54IT09bSlicmVhazthKz0xLHkuc2VnbWVudFswXVswXT09PXkueCYmeS5zZWdtZW50WzFdWzBdPT09eS54P3kuY3JlYXRlJiYoeS5zZWdtZW50WzBdWzFdPHkuc2VnbWVudFsxXVsxXT8odi5wdXNoKG5ldyB1KHkuc2VnbWVudFswXVsxXSx5LmluZGV4LCEwLCEwKSksdi5wdXNoKG5ldyB1KHkuc2VnbWVudFsxXVsxXSx5LmluZGV4LCExLCExKSkpOih2LnB1c2gobmV3IHUoeS5zZWdtZW50WzFdWzFdLHkuaW5kZXgsITAsITEpKSx2LnB1c2gobmV3IHUoeS5zZWdtZW50WzBdWzFdLHkuaW5kZXgsITEsITApKSkpOmg9eS5jcmVhdGU/aC5pbnNlcnQoeS5zZWdtZW50LHkuaW5kZXgpOmgucmVtb3ZlKHkuc2VnbWVudCl9cC5wdXNoKGgucm9vdCksZC5wdXNoKG0pLGcucHVzaCh2KX1yZXR1cm4gbmV3IHMocCxkLGcpfTt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgiZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZSIpLGE9dCgicm9idXN0LW9yaWVudGF0aW9uIiksbz10KCIuL2xpYi9vcmRlci1zZWdtZW50cyIpO2Z1bmN0aW9uIHModCxlLHIpe3RoaXMuc2xhYnM9dCx0aGlzLmNvb3JkaW5hdGVzPWUsdGhpcy5ob3Jpem9udGFsPXJ9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0LnktZX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPW51bGw7dDspe3ZhciBuLGksbz10LmtleTtvWzBdWzBdPG9bMV1bMF0/KG49b1swXSxpPW9bMV0pOihuPW9bMV0saT1vWzBdKTt2YXIgcz1hKG4saSxlKTtpZihzPDApdD10LmxlZnQ7ZWxzZSBpZihzPjApaWYoZVswXSE9PW9bMV1bMF0pcj10LHQ9dC5yaWdodDtlbHNle2lmKGw9Yyh0LnJpZ2h0LGUpKXJldHVybiBsO3Q9dC5sZWZ0fWVsc2V7aWYoZVswXSE9PW9bMV1bMF0pcmV0dXJuIHQ7dmFyIGw7aWYobD1jKHQucmlnaHQsZSkpcmV0dXJuIGw7dD10LmxlZnR9fXJldHVybiByfWZ1bmN0aW9uIHUodCxlLHIsbil7dGhpcy55PXQsdGhpcy5pbmRleD1lLHRoaXMuc3RhcnQ9cix0aGlzLmNsb3NlZD1ufWZ1bmN0aW9uIGYodCxlLHIsbil7dGhpcy54PXQsdGhpcy5zZWdtZW50PWUsdGhpcy5jcmVhdGU9cix0aGlzLmluZGV4PW59cy5wcm90b3R5cGUuY2FzdFVwPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubGUodGhpcy5jb29yZGluYXRlcyx0WzBdKTtpZihlPDApcmV0dXJuLTE7dGhpcy5zbGFic1tlXTt2YXIgcj1jKHRoaXMuc2xhYnNbZV0sdCksaT0tMTtpZihyJiYoaT1yLnZhbHVlKSx0aGlzLmNvb3JkaW5hdGVzW2VdPT09dFswXSl7dmFyIHM9bnVsbDtpZihyJiYocz1yLmtleSksZT4wKXt2YXIgdT1jKHRoaXMuc2xhYnNbZS0xXSx0KTt1JiYocz9vKHUua2V5LHMpPjAmJihzPXUua2V5LGk9dS52YWx1ZSk6KGk9dS52YWx1ZSxzPXUua2V5KSl9dmFyIGY9dGhpcy5ob3Jpem9udGFsW2VdO2lmKGYubGVuZ3RoPjApe3ZhciBoPW4uZ2UoZix0WzFdLGwpO2lmKGg8Zi5sZW5ndGgpe3ZhciBwPWZbaF07aWYodFsxXT09PXAueSl7aWYocC5jbG9zZWQpcmV0dXJuIHAuaW5kZXg7Zm9yKDtoPGYubGVuZ3RoLTEmJmZbaCsxXS55PT09dFsxXTspaWYoKHA9ZltoKz0xXSkuY2xvc2VkKXJldHVybiBwLmluZGV4O2lmKHAueT09PXRbMV0mJiFwLnN0YXJ0KXtpZigoaCs9MSk+PWYubGVuZ3RoKXJldHVybiBpO3A9ZltoXX19aWYocC5zdGFydClpZihzKXt2YXIgZD1hKHNbMF0sc1sxXSxbdFswXSxwLnldKTtzWzBdWzBdPnNbMV1bMF0mJihkPS1kKSxkPjAmJihpPXAuaW5kZXgpfWVsc2UgaT1wLmluZGV4O2Vsc2UgcC55IT09dFsxXSYmKGk9cC5pbmRleCl9fX1yZXR1cm4gaX19LHsiLi9saWIvb3JkZXItc2VnbWVudHMiOjU2MywiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjU2NCwiZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZSI6MjQ3LCJyb2J1c3Qtb3JpZW50YXRpb24iOjU0OH1dLDU2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyb2J1c3QtZG90LXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9aShuKHQsZSksW2VbZS5sZW5ndGgtMV1dKTtyZXR1cm4gcltyLmxlbmd0aC0xXX1mdW5jdGlvbiBvKHQsZSxyLG4pe3ZhciBpPS1lLyhuLWUpO2k8MD9pPTA6aT4xJiYoaT0xKTtmb3IodmFyIGE9MS1pLG89dC5sZW5ndGgscz1uZXcgQXJyYXkobyksbD0wO2w8bzsrK2wpc1tsXT1pKnRbbF0rYSpyW2xdO3JldHVybiBzfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPVtdLGk9YSh0W3QubGVuZ3RoLTFdLGUpLHM9dFt0Lmxlbmd0aC0xXSxsPXRbMF0sYz0wO2M8dC5sZW5ndGg7KytjLHM9bCl7dmFyIHU9YShsPXRbY10sZSk7aWYoaTwwJiZ1PjB8fGk+MCYmdTwwKXt2YXIgZj1vKHMsdSxsLGkpO3IucHVzaChmKSxuLnB1c2goZi5zbGljZSgpKX11PDA/bi5wdXNoKGwuc2xpY2UoKSk6dT4wP3IucHVzaChsLnNsaWNlKCkpOihyLnB1c2gobC5zbGljZSgpKSxuLnB1c2gobC5zbGljZSgpKSksaT11fXJldHVybntwb3NpdGl2ZTpyLG5lZ2F0aXZlOm59fSxlLmV4cG9ydHMucG9zaXRpdmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1hKHRbdC5sZW5ndGgtMV0sZSksaT10W3QubGVuZ3RoLTFdLHM9dFswXSxsPTA7bDx0Lmxlbmd0aDsrK2wsaT1zKXt2YXIgYz1hKHM9dFtsXSxlKTsobjwwJiZjPjB8fG4+MCYmYzwwKSYmci5wdXNoKG8oaSxjLHMsbikpLGM+PTAmJnIucHVzaChzLnNsaWNlKCkpLG49Y31yZXR1cm4gcn0sZS5leHBvcnRzLm5lZ2F0aXZlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49YSh0W3QubGVuZ3RoLTFdLGUpLGk9dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLGk9cyl7dmFyIGM9YShzPXRbbF0sZSk7KG48MCYmYz4wfHxuPjAmJmM8MCkmJnIucHVzaChvKGksYyxzLG4pKSxjPD0wJiZyLnB1c2gocy5zbGljZSgpKSxuPWN9cmV0dXJuIHJ9fSx7InJvYnVzdC1kb3QtcHJvZHVjdCI6NTQ1LCJyb2J1c3Qtc3VtIjo1NTN9XSw1Njc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9e25vdF9zdHJpbmc6L1tec10vLG5vdF9ib29sOi9bXnRdLyxub3RfdHlwZTovW15UXS8sbm90X3ByaW1pdGl2ZTovW152XS8sbnVtYmVyOi9bZGllZmddLyxudW1lcmljX2FyZzovW2JjZGllZmd1eFhdLyxqc29uOi9bal0vLG5vdF9qc29uOi9bXmpdLyx0ZXh0Oi9eW15ceDI1XSsvLG1vZHVsbzovXlx4MjV7Mn0vLHBsYWNlaG9sZGVyOi9eXHgyNSg/OihbMS05XVxkKilcJHxcKChbXildKylcKSk/KFwrKT8oMHwnW14kXSk/KC0pPyhcZCspPyg/OlwuKFxkKykpPyhbYi1naWpvc3RUdXZ4WF0pLyxrZXk6L14oW2Etel9dW2Etel9cZF0qKS9pLGtleV9hY2Nlc3M6L15cLihbYS16X11bYS16X1xkXSopL2ksaW5kZXhfYWNjZXNzOi9eXFsoXGQrKVxdLyxzaWduOi9eWystXS99O2Z1bmN0aW9uIGUodCl7cmV0dXJuIGkobyh0KSxhcmd1bWVudHMpfWZ1bmN0aW9uIG4odCxyKXtyZXR1cm4gZS5hcHBseShudWxsLFt0XS5jb25jYXQocnx8W10pKX1mdW5jdGlvbiBpKHIsbil7dmFyIGksYSxvLHMsbCxjLHUsZixoLHA9MSxkPXIubGVuZ3RoLGc9IiI7Zm9yKGE9MDthPGQ7YSsrKWlmKCJzdHJpbmciPT10eXBlb2YgclthXSlnKz1yW2FdO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiByW2FdKXtpZigocz1yW2FdKS5rZXlzKWZvcihpPW5bcF0sbz0wO288cy5rZXlzLmxlbmd0aDtvKyspe2lmKG51bGw9PWkpdGhyb3cgbmV3IEVycm9yKGUoJ1tzcHJpbnRmXSBDYW5ub3QgYWNjZXNzIHByb3BlcnR5ICIlcyIgb2YgdW5kZWZpbmVkIHZhbHVlICIlcyInLHMua2V5c1tvXSxzLmtleXNbby0xXSkpO2k9aVtzLmtleXNbb11dfWVsc2UgaT1zLnBhcmFtX25vP25bcy5wYXJhbV9ub106bltwKytdO2lmKHQubm90X3R5cGUudGVzdChzLnR5cGUpJiZ0Lm5vdF9wcmltaXRpdmUudGVzdChzLnR5cGUpJiZpIGluc3RhbmNlb2YgRnVuY3Rpb24mJihpPWkoKSksdC5udW1lcmljX2FyZy50ZXN0KHMudHlwZSkmJiJudW1iZXIiIT10eXBlb2YgaSYmaXNOYU4oaSkpdGhyb3cgbmV3IFR5cGVFcnJvcihlKCJbc3ByaW50Zl0gZXhwZWN0aW5nIG51bWJlciBidXQgZm91bmQgJVQiLGkpKTtzd2l0Y2godC5udW1iZXIudGVzdChzLnR5cGUpJiYoZj1pPj0wKSxzLnR5cGUpe2Nhc2UiYiI6aT1wYXJzZUludChpLDEwKS50b1N0cmluZygyKTticmVhaztjYXNlImMiOmk9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChpLDEwKSk7YnJlYWs7Y2FzZSJkIjpjYXNlImkiOmk9cGFyc2VJbnQoaSwxMCk7YnJlYWs7Y2FzZSJqIjppPUpTT04uc3RyaW5naWZ5KGksbnVsbCxzLndpZHRoP3BhcnNlSW50KHMud2lkdGgpOjApO2JyZWFrO2Nhc2UiZSI6aT1zLnByZWNpc2lvbj9wYXJzZUZsb2F0KGkpLnRvRXhwb25lbnRpYWwocy5wcmVjaXNpb24pOnBhcnNlRmxvYXQoaSkudG9FeHBvbmVudGlhbCgpO2JyZWFrO2Nhc2UiZiI6aT1zLnByZWNpc2lvbj9wYXJzZUZsb2F0KGkpLnRvRml4ZWQocy5wcmVjaXNpb24pOnBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZSJnIjppPXMucHJlY2lzaW9uP1N0cmluZyhOdW1iZXIoaS50b1ByZWNpc2lvbihzLnByZWNpc2lvbikpKTpwYXJzZUZsb2F0KGkpO2JyZWFrO2Nhc2UibyI6aT0ocGFyc2VJbnQoaSwxMCk+Pj4wKS50b1N0cmluZyg4KTticmVhaztjYXNlInMiOmk9U3RyaW5nKGkpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlInQiOmk9U3RyaW5nKCEhaSksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2UiVCI6aT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJ1IjppPXBhcnNlSW50KGksMTApPj4+MDticmVhaztjYXNlInYiOmk9aS52YWx1ZU9mKCksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2UieCI6aT0ocGFyc2VJbnQoaSwxMCk+Pj4wKS50b1N0cmluZygxNik7YnJlYWs7Y2FzZSJYIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfXQuanNvbi50ZXN0KHMudHlwZSk/Zys9aTooIXQubnVtYmVyLnRlc3Qocy50eXBlKXx8ZiYmIXMuc2lnbj9oPSIiOihoPWY/IisiOiItIixpPWkudG9TdHJpbmcoKS5yZXBsYWNlKHQuc2lnbiwiIikpLGM9cy5wYWRfY2hhcj8iMCI9PT1zLnBhZF9jaGFyPyIwIjpzLnBhZF9jaGFyLmNoYXJBdCgxKToiICIsdT1zLndpZHRoLShoK2kpLmxlbmd0aCxsPXMud2lkdGgmJnU+MD9jLnJlcGVhdCh1KToiIixnKz1zLmFsaWduP2graStsOiIwIj09PWM/aCtsK2k6bCtoK2kpfXJldHVybiBnfXZhciBhPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gbyhlKXtpZihhW2VdKXJldHVybiBhW2VdO2Zvcih2YXIgcixuPWUsaT1bXSxvPTA7bjspe2lmKG51bGwhPT0ocj10LnRleHQuZXhlYyhuKSkpaS5wdXNoKHJbMF0pO2Vsc2UgaWYobnVsbCE9PShyPXQubW9kdWxvLmV4ZWMobikpKWkucHVzaCgiJSIpO2Vsc2V7aWYobnVsbD09PShyPXQucGxhY2Vob2xkZXIuZXhlYyhuKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gdW5leHBlY3RlZCBwbGFjZWhvbGRlciIpO2lmKHJbMl0pe298PTE7dmFyIHM9W10sbD1yWzJdLGM9W107aWYobnVsbD09PShjPXQua2V5LmV4ZWMobCkpKXRocm93IG5ldyBTeW50YXhFcnJvcigiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXkiKTtmb3Iocy5wdXNoKGNbMV0pOyIiIT09KGw9bC5zdWJzdHJpbmcoY1swXS5sZW5ndGgpKTspaWYobnVsbCE9PShjPXQua2V5X2FjY2Vzcy5leGVjKGwpKSlzLnB1c2goY1sxXSk7ZWxzZXtpZihudWxsPT09KGM9dC5pbmRleF9hY2Nlc3MuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleSIpO3MucHVzaChjWzFdKX1yWzJdPXN9ZWxzZSBvfD0yO2lmKDM9PT1vKXRocm93IG5ldyBFcnJvcigiW3NwcmludGZdIG1peGluZyBwb3NpdGlvbmFsIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZCIpO2kucHVzaCh7cGxhY2Vob2xkZXI6clswXSxwYXJhbV9ubzpyWzFdLGtleXM6clsyXSxzaWduOnJbM10scGFkX2NoYXI6cls0XSxhbGlnbjpyWzVdLHdpZHRoOnJbNl0scHJlY2lzaW9uOnJbN10sdHlwZTpyWzhdfSl9bj1uLnN1YnN0cmluZyhyWzBdLmxlbmd0aCl9cmV0dXJuIGFbZV09aX0idW5kZWZpbmVkIiE9dHlwZW9mIHImJihyLnNwcmludGY9ZSxyLnZzcHJpbnRmPW4pLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93LnNwcmludGY9ZSx3aW5kb3cudnNwcmludGY9bil9KCl9LHt9XSw1Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyZW50aGVzaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZyIpO2lmKG51bGw9PWUpdGhyb3cgRXJyb3IoIlNlcGFyYXRvciBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYSBSZWdFeHAiKTtyPygic3RyaW5nIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocikpJiYocj17aWdub3JlOnJ9KTpyPXt9LG51bGw9PXIuZXNjYXBlJiYoci5lc2NhcGU9ITApLG51bGw9PXIuaWdub3JlP3IuaWdub3JlPVsiW10iLCIoKSIsInt9IiwiPD4iLCciIicsIicnIiwiYGAiLCJcdTIwMWNcdTIwMWQiLCJceGFiXHhiYiJdOigic3RyaW5nIj09dHlwZW9mIHIuaWdub3JlJiYoci5pZ25vcmU9W3IuaWdub3JlXSksci5pZ25vcmU9ci5pZ25vcmUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodCs9dCksdH0pKSk7dmFyIGk9bi5wYXJzZSh0LHtmbGF0OiEwLGJyYWNrZXRzOnIuaWdub3JlfSksYT1pWzBdLnNwbGl0KGUpO2lmKHIuZXNjYXBlKXtmb3IodmFyIG89W10scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9YVtzKzFdOyJcXCI9PT1sW2wubGVuZ3RoLTFdJiYiXFwiIT09bFtsLmxlbmd0aC0yXT8oby5wdXNoKGwrZStjKSxzKyspOm8ucHVzaChsKX1hPW99Zm9yKHM9MDtzPGEubGVuZ3RoO3MrKylpWzBdPWFbc10sYVtzXT1uLnN0cmluZ2lmeShpLHtmbGF0OiEwfSk7cmV0dXJuIGF9fSx7cGFyZW50aGVzaXM6NTAzfV0sNTY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj1uZXcgQXJyYXkoZSksaT1uZXcgQXJyYXkoZSksYT1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSkscz1uZXcgQXJyYXkoZSksbD0wO2w8ZTsrK2wpcltsXT0tMSxuW2xdPTAsaVtsXT0hMSxhW2xdPTAsb1tsXT0tMSxzW2xdPVtdO3ZhciBjLHU9MCxmPVtdLGg9W107ZnVuY3Rpb24gcChlKXt2YXIgbD1bZV0sYz1bZV07Zm9yKHJbZV09bltlXT11LGlbZV09ITAsdSs9MTtjLmxlbmd0aD4wOyl7ZT1jW2MubGVuZ3RoLTFdO3ZhciBwPXRbZV07aWYoYVtlXTxwLmxlbmd0aCl7Zm9yKHZhciBkPWFbZV07ZDxwLmxlbmd0aDsrK2Qpe3ZhciBnPXBbZF07aWYocltnXTwwKXtyW2ddPW5bZ109dSxpW2ddPSEwLHUrPTEsbC5wdXNoKGcpLGMucHVzaChnKTticmVha31pW2ddJiYobltlXT0wfE1hdGgubWluKG5bZV0sbltnXSkpLG9bZ10+PTAmJnNbZV0ucHVzaChvW2ddKX1hW2VdPWR9ZWxzZXtpZihuW2VdPT09cltlXSl7dmFyIG09W10sdj1bXSx5PTA7Zm9yKGQ9bC5sZW5ndGgtMTtkPj0wOy0tZCl7dmFyIHg9bFtkXTtpZihpW3hdPSExLG0ucHVzaCh4KSx2LnB1c2goc1t4XSkseSs9c1t4XS5sZW5ndGgsb1t4XT1mLmxlbmd0aCx4PT09ZSl7bC5sZW5ndGg9ZDticmVha319Zi5wdXNoKG0pO3ZhciBiPW5ldyBBcnJheSh5KTtmb3IoZD0wO2Q8di5sZW5ndGg7ZCsrKWZvcih2YXIgXz0wO188dltkXS5sZW5ndGg7XysrKWJbLS15XT12W2RdW19dO2gucHVzaChiKX1jLnBvcCgpfX19Zm9yKGw9MDtsPGU7KytsKXJbbF08MCYmcChsKTtmb3IobD0wO2w8aC5sZW5ndGg7bCsrKXt2YXIgZD1oW2xdO2lmKDAhPT1kLmxlbmd0aCl7ZC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSksYz1bZFswXV07Zm9yKHZhciBnPTE7ZzxkLmxlbmd0aDtnKyspZFtnXSE9PWRbZy0xXSYmYy5wdXNoKGRbZ10pO2hbbF09Y319cmV0dXJue2NvbXBvbmVudHM6ZixhZGphY2VuY3lMaXN0Omh9fX0se31dLDU3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0LmRpbWVuc2lvbjw9MClyZXR1cm57cG9zaXRpb25zOltdLGNlbGxzOltdfTtpZigxPT09dC5kaW1lbnNpb24pcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWEodCxlKSxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pLHM9MDtzPG47KytzKWlbc109W3Jbc11dLG9bc109W3NdO3JldHVybntwb3NpdGlvbnM6aSxjZWxsczpvfX0odCxlKTt2YXIgcj10Lm9yZGVyLmpvaW4oKSsiLSIrdC5kdHlwZSxzPW9bcl07ZT0rZXx8MDtzfHwocz1vW3JdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgsYT1bIid1c2Ugc3RyaWN0JzsiXSxvPSJzdXJmYWNlTmV0cyIrdC5qb2luKCJfIikrImQiK2U7YS5wdXNoKCJ2YXIgY29udG91cj1nZW5Db250b3VyKHsiLCJvcmRlcjpbIix0LmpvaW4oKSwiXSwiLCJzY2FsYXJBcmd1bWVudHM6IDMsIiwicGhhc2U6ZnVuY3Rpb24gcGhhc2VGdW5jKHAsYSxiLGMpIHsgcmV0dXJuIChwID4gYyl8MCB9LCIpLCJnZW5lcmljIj09PWUmJmEucHVzaCgiZ2V0dGVyczpbMF0sIik7Zm9yKHZhciBzPVtdLGw9W10sYz0wO2M8cjsrK2Mpcy5wdXNoKCJkIitjKSxsLnB1c2goImQiK2MpO2ZvcihjPTA7YzwxPDxyOysrYylzLnB1c2goInYiK2MpLGwucHVzaCgidiIrYyk7Zm9yKGM9MDtjPDE8PHI7KytjKXMucHVzaCgicCIrYyksbC5wdXNoKCJwIitjKTtzLnB1c2goImEiLCJiIiwiYyIpLGwucHVzaCgiYSIsImMiKSxhLnB1c2goInZlcnRleDpmdW5jdGlvbiB2ZXJ0ZXhGdW5jKCIscy5qb2luKCksIil7Iik7dmFyIHU9W107Zm9yKGM9MDtjPDE8PHI7KytjKXUucHVzaCgiKHAiK2MrIjw8IitjKyIpIik7YS5wdXNoKCJ2YXIgbT0oIix1LmpvaW4oIisiKSwiKXwwO2lmKG09PT0wfHxtPT09IiwoMTw8KDE8PHIpKS0xLCIpe3JldHVybn0iKTt2YXIgZj1bXSxoPVtdOzE8PCgxPDxyKTw9MTI4PyhhLnB1c2goInN3aXRjaChtKXsiKSxoPWEpOmEucHVzaCgic3dpdGNoKG0+Pj43KXsiKTtmb3IoYz0wO2M8MTw8KDE8PHIpOysrYyl7aWYoMTw8KDE8PHIpPjEyOCYmYyUxMjg9PTApe2YubGVuZ3RoPjAmJmgucHVzaCgifX0iKTt2YXIgcD0idkV4dHJhIitmLmxlbmd0aDthLnB1c2goImNhc2UgIixjPj4+NywiOiIscCwiKG0mMHg3ZiwiLGwuam9pbigpLCIpO2JyZWFrOyIpLGg9WyJmdW5jdGlvbiAiLHAsIihtLCIsbC5qb2luKCksIil7c3dpdGNoKG0peyJdLGYucHVzaChoKX1oLnB1c2goImNhc2UgIiwxMjcmYywiOiIpO2Zvcih2YXIgZD1uZXcgQXJyYXkociksZz1uZXcgQXJyYXkociksbT1uZXcgQXJyYXkociksdj1uZXcgQXJyYXkocikseT0wLHg9MDt4PHI7Kyt4KWRbeF09W10sZ1t4XT1bXSxtW3hdPTAsdlt4XT0wO2Zvcih4PTA7eDwxPDxyOysreClmb3IodmFyIGI9MDtiPHI7KytiKXt2YXIgXz14XjE8PGI7aWYoIShfPngpJiYhKGMmMTw8XykhPSEoYyYxPDx4KSl7dmFyIHc9MTtjJjE8PF8/Z1tiXS5wdXNoKCJ2IitfKyItdiIreCk6KGdbYl0ucHVzaCgidiIreCsiLXYiK18pLHc9LXcpLHc8MD8oZFtiXS5wdXNoKCItdiIreCsiLXYiK18pLG1bYl0rPTIpOihkW2JdLnB1c2goInYiK3grIit2IitfKSxtW2JdLT0yKSx5Kz0xO2Zvcih2YXIgVD0wO1Q8cjsrK1QpVCE9PWImJihfJjE8PFQ/dltUXSs9MTp2W1RdLT0xKX19dmFyIGs9W107Zm9yKGI9MDtiPHI7KytiKWlmKDA9PT1kW2JdLmxlbmd0aClrLnB1c2goImQiK2IrIi0wLjUiKTtlbHNle3ZhciBNPSIiO21bYl08MD9NPW1bYl0rIipjIjptW2JdPjAmJihNPSIrIittW2JdKyIqYyIpO3ZhciBBPWRbYl0ubGVuZ3RoL3kqLjUsUz0uNSt2W2JdL3kqLjU7ay5wdXNoKCJkIitiKyItIitTKyItIitBKyIqKCIrZFtiXS5qb2luKCIrIikrTSsiKS8oIitnW2JdLmpvaW4oIisiKSsiKSIpfWgucHVzaCgiYS5wdXNoKFsiLGsuam9pbigpLCJdKTsiLCJicmVhazsiKX1hLnB1c2goIn19LCIpLGYubGVuZ3RoPjAmJmgucHVzaCgifX0iKTt2YXIgRT1bXTtmb3IoYz0wO2M8MTw8ci0xOysrYylFLnB1c2goInYiK2MpO0UucHVzaCgiYzAiLCJjMSIsInAwIiwicDEiLCJhIiwiYiIsImMiKSxhLnB1c2goImNlbGw6ZnVuY3Rpb24gY2VsbEZ1bmMoIixFLmpvaW4oKSwiKXsiKTt2YXIgQz1pKHItMSk7YS5wdXNoKCJpZihwMCl7Yi5wdXNoKCIsQy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJbIit0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInYiK3R9KSkrIl0ifSkpLmpvaW4oKSwiKX1lbHNle2IucHVzaCgiLEMubWFwKChmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCk7cmV0dXJuIGUucmV2ZXJzZSgpLCJbIitlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInYiK3R9KSkrIl0ifSkpLmpvaW4oKSwiKX19fSk7ZnVuY3Rpb24gIixvLCIoYXJyYXksbGV2ZWwpe3ZhciB2ZXJ0cz1bXSxjZWxscz1bXTtjb250b3VyKGFycmF5LHZlcnRzLGNlbGxzLGxldmVsKTtyZXR1cm4ge3Bvc2l0aW9uczp2ZXJ0cyxjZWxsczpjZWxsc307fSByZXR1cm4gIixvLCI7Iik7Zm9yKGM9MDtjPGYubGVuZ3RoOysrYylhLnB1c2goZltjXS5qb2luKCIiKSk7cmV0dXJuIG5ldyBGdW5jdGlvbigiZ2VuQ29udG91ciIsYS5qb2luKCIiKSkobil9KHQub3JkZXIsdC5kdHlwZSkpO3JldHVybiBzKHQsZSl9O3ZhciBuPXQoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyIiksaT10KCJ0cmlhbmd1bGF0ZS1oeXBlcmN1YmUiKSxhPXQoInplcm8tY3Jvc3NpbmdzIik7dmFyIG89e319LHsibmRhcnJheS1leHRyYWN0LWNvbnRvdXIiOjQ4NywidHJpYW5ndWxhdGUtaHlwZXJjdWJlIjo1ODAsInplcm8tY3Jvc3NpbmdzIjo2MjR9XSw1NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdDtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVtdLG49ITAsaT0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhZXx8ci5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2godCl7aT0hMCxhPXR9ZmluYWxseXt0cnl7IW4mJnMucmV0dXJuJiZzLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyBhfX1yZXR1cm4gcn0odCxlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9LGk9MipNYXRoLlBJLGE9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dC54LGw9dC55O3JldHVybnt4Om4qKHMqPWUpLWkqKGwqPXIpK2EseTppKnMrbipsK299fSxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MS41NzA3OTYzMjY3OTQ4OTY2PT09ZT8uNTUxOTE1MDI0NDk0Oi0xLjU3MDc5NjMyNjc5NDg5NjY9PT1lPy0uNTUxOTE1MDI0NDk0OjQvMypNYXRoLnRhbihlLzQpLG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxhPU1hdGguY29zKHQrZSksbz1NYXRoLnNpbih0K2UpO3JldHVyblt7eDpuLWkqcix5OmkrbipyfSx7eDphK28qcix5Om8tYSpyfSx7eDphLHk6b31dfSxzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQqcitlKm47cmV0dXJuIGk+MSYmKGk9MSksaTwtMSYmKGk9LTEpLCh0Km4tZSpyPDA/LTE6MSkqTWF0aC5hY29zKGkpfTtyLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5weCxyPXQucHksbD10LmN4LGM9dC5jeSx1PXQucngsZj10LnJ5LGg9dC54QXhpc1JvdGF0aW9uLHA9dm9pZCAwPT09aD8wOmgsZD10LmxhcmdlQXJjRmxhZyxnPXZvaWQgMD09PWQ/MDpkLG09dC5zd2VlcEZsYWcsdj12b2lkIDA9PT1tPzA6bSx5PVtdO2lmKDA9PT11fHwwPT09ZilyZXR1cm5bXTt2YXIgeD1NYXRoLnNpbihwKmkvMzYwKSxiPU1hdGguY29zKHAqaS8zNjApLF89YiooZS1sKS8yK3gqKHItYykvMix3PS14KihlLWwpLzIrYiooci1jKS8yO2lmKDA9PT1fJiYwPT09dylyZXR1cm5bXTt1PU1hdGguYWJzKHUpLGY9TWF0aC5hYnMoZik7dmFyIFQ9TWF0aC5wb3coXywyKS9NYXRoLnBvdyh1LDIpK01hdGgucG93KHcsMikvTWF0aC5wb3coZiwyKTtUPjEmJih1Kj1NYXRoLnNxcnQoVCksZio9TWF0aC5zcXJ0KFQpKTt2YXIgaz1mdW5jdGlvbih0LGUscixuLGEsbyxsLGMsdSxmLGgscCl7dmFyIGQ9TWF0aC5wb3coYSwyKSxnPU1hdGgucG93KG8sMiksbT1NYXRoLnBvdyhoLDIpLHY9TWF0aC5wb3cocCwyKSx5PWQqZy1kKnYtZyptO3k8MCYmKHk9MCkseS89ZCp2K2cqbTt2YXIgeD0oeT1NYXRoLnNxcnQoeSkqKGw9PT1jPy0xOjEpKSphL28qcCxiPXkqLW8vYSpoLF89Zip4LXUqYisodCtyKS8yLHc9dSp4K2YqYisoZStuKS8yLFQ9KGgteCkvYSxrPShwLWIpL28sTT0oLWgteCkvYSxBPSgtcC1iKS9vLFM9cygxLDAsVCxrKSxFPXMoVCxrLE0sQSk7cmV0dXJuIDA9PT1jJiZFPjAmJihFLT1pKSwxPT09YyYmRTwwJiYoRSs9aSksW18sdyxTLEVdfShlLHIsbCxjLHUsZixnLHYseCxiLF8sdyksTT1uKGssNCksQT1NWzBdLFM9TVsxXSxFPU1bMl0sQz1NWzNdLEw9TWF0aC5hYnMoQykvKGkvNCk7TWF0aC5hYnMoMS1MKTwxZS03JiYoTD0xKTt2YXIgST1NYXRoLm1heChNYXRoLmNlaWwoTCksMSk7Qy89STtmb3IodmFyIFA9MDtQPEk7UCsrKXkucHVzaChvKEUsQykpLEUrPUM7cmV0dXJuIHkubWFwKChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMF0sdSxmLGIseCxBLFMpLHI9ZS54LG49ZS55LGk9YSh0WzFdLHUsZixiLHgsQSxTKSxvPWkueCxzPWkueSxsPWEodFsyXSx1LGYsYix4LEEsUyk7cmV0dXJue3gxOnIseTE6bix4MjpvLHkyOnMseDpsLngseTpsLnl9fSkpfSxlLmV4cG9ydHM9ci5kZWZhdWx0fSx7fV0sNTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcnNlLXN2Zy1wYXRoIiksaT10KCJhYnMtc3ZnLXBhdGgiKSxhPXQoIm5vcm1hbGl6ZS1zdmctcGF0aCIpLG89dCgiaXMtc3ZnLXBhdGgiKSxzPXQoImFzc2VydCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHQpJiYxPT09dC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgdFswXSYmKHQ9dFswXSk7InN0cmluZyI9PXR5cGVvZiB0JiYocyhvKHQpLCJTdHJpbmcgaXMgbm90IGFuIFNWRyBwYXRoLiIpLHQ9bih0KSk7aWYocyhBcnJheS5pc0FycmF5KHQpLCJBcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4iKSx0PWkodCksISh0PWEodCkpLmxlbmd0aClyZXR1cm5bMCwwLDAsMF07Zm9yKHZhciBlPVsxLzAsMS8wLC0xLzAsLTEvMF0scj0wLGw9dC5sZW5ndGg7cjxsO3IrKylmb3IodmFyIGM9dFtyXS5zbGljZSgxKSx1PTA7dTxjLmxlbmd0aDt1Kz0yKWNbdSswXTxlWzBdJiYoZVswXT1jW3UrMF0pLGNbdSsxXTxlWzFdJiYoZVsxXT1jW3UrMV0pLGNbdSswXT5lWzJdJiYoZVsyXT1jW3UrMF0pLGNbdSsxXT5lWzNdJiYoZVszXT1jW3UrMV0pO3JldHVybiBlfX0seyJhYnMtc3ZnLXBhdGgiOjY1LGFzc2VydDo3MywiaXMtc3ZnLXBhdGgiOjQ3MSwibm9ybWFsaXplLXN2Zy1wYXRoIjo1NzMsInBhcnNlLXN2Zy1wYXRoIjo1MDV9XSw1NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPVtdLG89MCxzPTAsbD0wLGM9MCx1PW51bGwsZj1udWxsLGg9MCxwPTAsZD0wLGc9dC5sZW5ndGg7ZDxnO2QrKyl7dmFyIG09dFtkXSx2PW1bMF07c3dpdGNoKHYpe2Nhc2UiTSI6bD1tWzFdLGM9bVsyXTticmVhaztjYXNlIkEiOnZhciB5PW4oe3B4OmgscHk6cCxjeDptWzZdLGN5Om1bN10scng6bVsxXSxyeTptWzJdLHhBeGlzUm90YXRpb246bVszXSxsYXJnZUFyY0ZsYWc6bVs0XSxzd2VlcEZsYWc6bVs1XX0pO2lmKCF5Lmxlbmd0aCljb250aW51ZTtmb3IodmFyIHgsYj0wO2I8eS5sZW5ndGg7YisrKXg9eVtiXSxtPVsiQyIseC54MSx4LnkxLHgueDIseC55Mix4LngseC55XSxiPHkubGVuZ3RoLTEmJnIucHVzaChtKTticmVhaztjYXNlIlMiOnZhciBfPWgsdz1wOyJDIiE9ZSYmIlMiIT1lfHwoXys9Xy1vLHcrPXctcyksbT1bIkMiLF8sdyxtWzFdLG1bMl0sbVszXSxtWzRdXTticmVhaztjYXNlIlQiOiJRIj09ZXx8IlQiPT1lPyh1PTIqaC11LGY9MipwLWYpOih1PWgsZj1wKSxtPWEoaCxwLHUsZixtWzFdLG1bMl0pO2JyZWFrO2Nhc2UiUSI6dT1tWzFdLGY9bVsyXSxtPWEoaCxwLG1bMV0sbVsyXSxtWzNdLG1bNF0pO2JyZWFrO2Nhc2UiTCI6bT1pKGgscCxtWzFdLG1bMl0pO2JyZWFrO2Nhc2UiSCI6bT1pKGgscCxtWzFdLHApO2JyZWFrO2Nhc2UiViI6bT1pKGgscCxoLG1bMV0pO2JyZWFrO2Nhc2UiWiI6bT1pKGgscCxsLGMpfWU9dixoPW1bbS5sZW5ndGgtMl0scD1tW20ubGVuZ3RoLTFdLG0ubGVuZ3RoPjQ/KG89bVttLmxlbmd0aC00XSxzPW1bbS5sZW5ndGgtM10pOihvPWgscz1wKSxyLnB1c2gobSl9cmV0dXJuIHJ9O3ZhciBuPXQoInN2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyIik7ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm5bIkMiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBhKHQsZSxyLG4saSxhKXtyZXR1cm5bIkMiLHQvMysyLzMqcixlLzMrMi8zKm4saS8zKzIvMypyLGEvMysyLzMqbixpLGFdfX0seyJzdmctYXJjLXRvLWN1YmljLWJlemllciI6NTcxfV0sNTc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgic3ZnLXBhdGgtYm91bmRzIiksYT10KCJwYXJzZS1zdmctcGF0aCIpLG89dCgiZHJhdy1zdmctcGF0aCIpLHM9dCgiaXMtc3ZnLXBhdGgiKSxsPXQoImJpdG1hcC1zZGYiKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHU9Yy5nZXRDb250ZXh0KCIyZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFzKHQpKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgdmFsaWQgc3ZnIHBhdGggc3RyaW5nIik7ZXx8KGU9e30pO3ZhciByLGY7ZS5zaGFwZT8ocj1lLnNoYXBlWzBdLGY9ZS5zaGFwZVsxXSk6KHI9Yy53aWR0aD1lLnd8fGUud2lkdGh8fDIwMCxmPWMuaGVpZ2h0PWUuaHx8ZS5oZWlnaHR8fDIwMCk7dmFyIGg9TWF0aC5taW4ocixmKSxwPWUuc3Ryb2tlfHwwLGQ9ZS52aWV3Ym94fHxlLnZpZXdCb3h8fGkodCksZz1bci8oZFsyXS1kWzBdKSxmLyhkWzNdLWRbMV0pXSxtPU1hdGgubWluKGdbMF18fDAsZ1sxXXx8MCkvMjt1LmZpbGxTdHlsZT0iYmxhY2siLHUuZmlsbFJlY3QoMCwwLHIsZiksdS5maWxsU3R5bGU9IndoaXRlIixwJiYoIm51bWJlciIhPXR5cGVvZiBwJiYocD0xKSx1LnN0cm9rZVN0eWxlPXA+MD8id2hpdGUiOiJibGFjayIsdS5saW5lV2lkdGg9TWF0aC5hYnMocCkpO2lmKHUudHJhbnNsYXRlKC41KnIsLjUqZiksdS5zY2FsZShtLG0pLGZ1bmN0aW9uKCl7aWYobnVsbCE9bilyZXR1cm4gbjt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO2lmKHQuY2FudmFzLndpZHRoPXQuY2FudmFzLmhlaWdodD0xLCF3aW5kb3cuUGF0aDJEKXJldHVybiBuPSExO3ZhciBlPW5ldyBQYXRoMkQoIk0wLDBoMXYxaC0xdi0xWiIpO3QuZmlsbFN0eWxlPSJibGFjayIsdC5maWxsKGUpO3ZhciByPXQuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpO3JldHVybiBuPXImJnIuZGF0YSYmMjU1PT09ci5kYXRhWzNdfSgpKXt2YXIgdj1uZXcgUGF0aDJEKHQpO3UuZmlsbCh2KSxwJiZ1LnN0cm9rZSh2KX1lbHNle3ZhciB5PWEodCk7byh1LHkpLHUuZmlsbCgpLHAmJnUuc3Ryb2tlKCl9cmV0dXJuIHUuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxsKHUse2N1dG9mZjpudWxsIT1lLmN1dG9mZj9lLmN1dG9mZjouNSxyYWRpdXM6bnVsbCE9ZS5yYWRpdXM/ZS5yYWRpdXM6LjUqaH0pfX0seyJiaXRtYXAtc2RmIjo5OCwiZHJhdy1zdmctcGF0aCI6MTc0LCJpcy1zdmctcGF0aCI6NDcxLCJwYXJzZS1zdmctcGF0aCI6NTA1LCJzdmctcGF0aC1ib3VuZHMiOjU3Mn1dLDU3NTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyLGkpe2k9aXx8e307dmFyIG89YVtlXTtvfHwobz1hW2VdPXsiICI6e2RhdGE6bmV3IEZsb2F0MzJBcnJheSgwKSxzaGFwZTouMn19KTt2YXIgcz1vW3JdO2lmKCFzKWlmKHIubGVuZ3RoPD0xfHwhL1xkLy50ZXN0KHIpKXM9b1tyXT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jZWxscyxyPXQucG9zaXRpb25zLG49bmV3IEZsb2F0MzJBcnJheSg2KmUubGVuZ3RoKSxpPTAsYT0wLG89MDtvPGUubGVuZ3RoOysrbylmb3IodmFyIHM9ZVtvXSxsPTA7bDwzOysrbCl7dmFyIGM9cltzW2xdXTtuW2krK109Y1swXSxuW2krK109Y1sxXSsxLjQsYT1NYXRoLm1heChjWzBdLGEpfXJldHVybntkYXRhOm4sc2hhcGU6YX19KG4ocix7dHJpYW5nbGVzOiEwLGZvbnQ6ZSx0ZXh0QWxpZ246aS50ZXh0QWxpZ258fCJsZWZ0Iix0ZXh0QmFzZWxpbmU6ImFscGhhYmV0aWMiLHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfX0pKTtlbHNle2Zvcih2YXIgbD1yLnNwbGl0KC8oXGR8XHMpLyksYz1uZXcgQXJyYXkobC5sZW5ndGgpLHU9MCxmPTAsaD0wO2g8bC5sZW5ndGg7KytoKWNbaF09dChlLGxbaF0pLHUrPWNbaF0uZGF0YS5sZW5ndGgsZis9Y1toXS5zaGFwZSxoPjAmJihmKz0uMDIpO3ZhciBwPW5ldyBGbG9hdDMyQXJyYXkodSksZD0wLGc9LS41KmY7Zm9yKGg9MDtoPGMubGVuZ3RoOysraCl7Zm9yKHZhciBtPWNbaF0uZGF0YSx2PTA7djxtLmxlbmd0aDt2Kz0yKXBbZCsrXT1tW3ZdK2cscFtkKytdPW1bdisxXTtnKz1jW2hdLnNoYXBlKy4wMn1zPW9bcl09e2RhdGE6cCxzaGFwZTpmfX1yZXR1cm4gc307dmFyIG49dCgidmVjdG9yaXplLXRleHQiKSxpPXdpbmRvd3x8ci5nbG9iYWx8fHt9LGE9aS5fX1RFWFRfQ0FDSEV8fHt9O2kuX19URVhUX0NBQ0hFPXt9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjUyNiwidmVjdG9yaXplLXRleHQiOjYwMH1dLDU3NjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0KXt2YXIgcj0vXlxzKy8sbj0vXHMrJC8saT0wLGE9dC5yb3VuZCxvPXQubWluLHM9dC5tYXgsbD10LnJhbmRvbTtmdW5jdGlvbiBjKGUsbCl7aWYobD1sfHx7fSwoZT1lfHwiIilpbnN0YW5jZW9mIGMpcmV0dXJuIGU7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKGUsbCk7dmFyIHU9ZnVuY3Rpb24oZSl7dmFyIGk9e3I6MCxnOjAsYjowfSxhPTEsbD1udWxsLGM9bnVsbCx1PW51bGwsZj0hMSxoPSExOyJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZnVuY3Rpb24odCl7dD10LnJlcGxhY2UociwiIikucmVwbGFjZShuLCIiKS50b0xvd2VyQ2FzZSgpO3ZhciBlLGk9ITE7aWYoU1t0XSl0PVNbdF0saT0hMDtlbHNlIGlmKCJ0cmFuc3BhcmVudCI9PXQpcmV0dXJue3I6MCxnOjAsYjowLGE6MCxmb3JtYXQ6Im5hbWUifTtpZihlPWoucmdiLmV4ZWModCkpcmV0dXJue3I6ZVsxXSxnOmVbMl0sYjplWzNdfTtpZihlPWoucmdiYS5leGVjKHQpKXJldHVybntyOmVbMV0sZzplWzJdLGI6ZVszXSxhOmVbNF19O2lmKGU9ai5oc2wuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSxsOmVbM119O2lmKGU9ai5oc2xhLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sbDplWzNdLGE6ZVs0XX07aWYoZT1qLmhzdi5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLHY6ZVszXX07aWYoZT1qLmhzdmEuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSx2OmVbM10sYTplWzRdfTtpZihlPWouaGV4OC5leGVjKHQpKXJldHVybntyOlAoZVsxXSksZzpQKGVbMl0pLGI6UChlWzNdKSxhOlIoZVs0XSksZm9ybWF0Omk/Im5hbWUiOiJoZXg4In07aWYoZT1qLmhleDYuZXhlYyh0KSlyZXR1cm57cjpQKGVbMV0pLGc6UChlWzJdKSxiOlAoZVszXSksZm9ybWF0Omk/Im5hbWUiOiJoZXgifTtpZihlPWouaGV4NC5leGVjKHQpKXJldHVybntyOlAoZVsxXSsiIitlWzFdKSxnOlAoZVsyXSsiIitlWzJdKSxiOlAoZVszXSsiIitlWzNdKSxhOlIoZVs0XSsiIitlWzRdKSxmb3JtYXQ6aT8ibmFtZSI6ImhleDgifTtpZihlPWouaGV4My5leGVjKHQpKXJldHVybntyOlAoZVsxXSsiIitlWzFdKSxnOlAoZVsyXSsiIitlWzJdKSxiOlAoZVszXSsiIitlWzNdKSxmb3JtYXQ6aT8ibmFtZSI6ImhleCJ9O3JldHVybiExfShlKSk7Im9iamVjdCI9PXR5cGVvZiBlJiYoVShlLnIpJiZVKGUuZykmJlUoZS5iKT8ocD1lLnIsZD1lLmcsZz1lLmIsaT17cjoyNTUqTChwLDI1NSksZzoyNTUqTChkLDI1NSksYjoyNTUqTChnLDI1NSl9LGY9ITAsaD0iJSI9PT1TdHJpbmcoZS5yKS5zdWJzdHIoLTEpPyJwcmdiIjoicmdiIik6VShlLmgpJiZVKGUucykmJlUoZS52KT8obD1PKGUucyksYz1PKGUudiksaT1mdW5jdGlvbihlLHIsbil7ZT02KkwoZSwzNjApLHI9TChyLDEwMCksbj1MKG4sMTAwKTt2YXIgaT10LmZsb29yKGUpLGE9ZS1pLG89biooMS1yKSxzPW4qKDEtYSpyKSxsPW4qKDEtKDEtYSkqciksYz1pJTY7cmV0dXJue3I6MjU1KltuLHMsbyxvLGwsbl1bY10sZzoyNTUqW2wsbixuLHMsbyxvXVtjXSxiOjI1NSpbbyxvLGwsbixuLHNdW2NdfX0oZS5oLGwsYyksZj0hMCxoPSJoc3YiKTpVKGUuaCkmJlUoZS5zKSYmVShlLmwpJiYobD1PKGUucyksdT1PKGUubCksaT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhO2Z1bmN0aW9uIG8odCxlLHIpe3JldHVybiByPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPDEvNj90KzYqKGUtdCkqcjpyPC41P2U6cjwyLzM/dCsoZS10KSooMi8zLXIpKjY6dH1pZih0PUwodCwzNjApLGU9TChlLDEwMCkscj1MKHIsMTAwKSwwPT09ZSluPWk9YT1yO2Vsc2V7dmFyIHM9cjwuNT9yKigxK2UpOnIrZS1yKmUsbD0yKnItcztuPW8obCxzLHQrMS8zKSxpPW8obCxzLHQpLGE9byhsLHMsdC0xLzMpfXJldHVybntyOjI1NSpuLGc6MjU1KmksYjoyNTUqYX19KGUuaCxsLHUpLGY9ITAsaD0iaHNsIiksZS5oYXNPd25Qcm9wZXJ0eSgiYSIpJiYoYT1lLmEpKTt2YXIgcCxkLGc7cmV0dXJuIGE9QyhhKSx7b2s6Zixmb3JtYXQ6ZS5mb3JtYXR8fGgscjpvKDI1NSxzKGkuciwwKSksZzpvKDI1NSxzKGkuZywwKSksYjpvKDI1NSxzKGkuYiwwKSksYTphfX0oZSk7dGhpcy5fb3JpZ2luYWxJbnB1dD1lLHRoaXMuX3I9dS5yLHRoaXMuX2c9dS5nLHRoaXMuX2I9dS5iLHRoaXMuX2E9dS5hLHRoaXMuX3JvdW5kQT1hKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PWwuZm9ybWF0fHx1LmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9bC5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1hKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPWEodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9YSh0aGlzLl9iKSksdGhpcy5fb2s9dS5vayx0aGlzLl90Y19pZD1pKyt9ZnVuY3Rpb24gdSh0LGUscil7dD1MKHQsMjU1KSxlPUwoZSwyNTUpLHI9TChyLDI1NSk7dmFyIG4saSxhPXModCxlLHIpLGw9byh0LGUsciksYz0oYStsKS8yO2lmKGE9PWwpbj1pPTA7ZWxzZXt2YXIgdT1hLWw7c3dpdGNoKGk9Yz4uNT91LygyLWEtbCk6dS8oYStsKSxhKXtjYXNlIHQ6bj0oZS1yKS91KyhlPHI/NjowKTticmVhaztjYXNlIGU6bj0oci10KS91KzI7YnJlYWs7Y2FzZSByOm49KHQtZSkvdSs0fW4vPTZ9cmV0dXJue2g6bixzOmksbDpjfX1mdW5jdGlvbiBmKHQsZSxyKXt0PUwodCwyNTUpLGU9TChlLDI1NSkscj1MKHIsMjU1KTt2YXIgbixpLGE9cyh0LGUsciksbD1vKHQsZSxyKSxjPWEsdT1hLWw7aWYoaT0wPT09YT8wOnUvYSxhPT1sKW49MDtlbHNle3N3aXRjaChhKXtjYXNlIHQ6bj0oZS1yKS91KyhlPHI/NjowKTticmVhaztjYXNlIGU6bj0oci10KS91KzI7YnJlYWs7Y2FzZSByOm49KHQtZSkvdSs0fW4vPTZ9cmV0dXJue2g6bixzOmksdjpjfX1mdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpPVt6KGEodCkudG9TdHJpbmcoMTYpKSx6KGEoZSkudG9TdHJpbmcoMTYpKSx6KGEocikudG9TdHJpbmcoMTYpKV07cmV0dXJuIG4mJmlbMF0uY2hhckF0KDApPT1pWzBdLmNoYXJBdCgxKSYmaVsxXS5jaGFyQXQoMCk9PWlbMV0uY2hhckF0KDEpJiZpWzJdLmNoYXJBdCgwKT09aVsyXS5jaGFyQXQoMSk/aVswXS5jaGFyQXQoMCkraVsxXS5jaGFyQXQoMCkraVsyXS5jaGFyQXQoMCk6aS5qb2luKCIiKX1mdW5jdGlvbiBwKHQsZSxyLG4pe3JldHVyblt6KEQobikpLHooYSh0KS50b1N0cmluZygxNikpLHooYShlKS50b1N0cmluZygxNikpLHooYShyKS50b1N0cmluZygxNikpXS5qb2luKCIiKX1mdW5jdGlvbiBkKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5zLT1lLzEwMCxyLnM9SShyLnMpLGMocil9ZnVuY3Rpb24gZyh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIucys9ZS8xMDAsci5zPUkoci5zKSxjKHIpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIGModCkuZGVzYXR1cmF0ZSgxMDApfWZ1bmN0aW9uIHYodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLmwrPWUvMTAwLHIubD1JKHIubCksYyhyKX1mdW5jdGlvbiB5KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9SZ2IoKTtyZXR1cm4gci5yPXMoMCxvKDI1NSxyLnItYSgtZS8xMDAqMjU1KSkpLHIuZz1zKDAsbygyNTUsci5nLWEoLWUvMTAwKjI1NSkpKSxyLmI9cygwLG8oMjU1LHIuYi1hKC1lLzEwMCoyNTUpKSksYyhyKX1mdW5jdGlvbiB4KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5sLT1lLzEwMCxyLmw9SShyLmwpLGMocil9ZnVuY3Rpb24gYih0LGUpe3ZhciByPWModCkudG9Ic2woKSxuPShyLmgrZSklMzYwO3JldHVybiByLmg9bjwwPzM2MCtuOm4sYyhyKX1mdW5jdGlvbiBfKHQpe3ZhciBlPWModCkudG9Ic2woKTtyZXR1cm4gZS5oPShlLmgrMTgwKSUzNjAsYyhlKX1mdW5jdGlvbiB3KHQpe3ZhciBlPWModCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bYyh0KSxjKHtoOihyKzEyMCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyNDApJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBUKHQpe3ZhciBlPWModCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bYyh0KSxjKHtoOihyKzkwKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzE4MCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyNzApJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBrKHQpe3ZhciBlPWModCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bYyh0KSxjKHtoOihyKzcyKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzIxNiklMzYwLHM6ZS5zLGw6ZS5sfSldfWZ1bmN0aW9uIE0odCxlLHIpe2U9ZXx8NixyPXJ8fDMwO3ZhciBuPWModCkudG9Ic2woKSxpPTM2MC9yLGE9W2ModCldO2ZvcihuLmg9KG4uaC0oaSplPj4xKSs3MjApJTM2MDstLWU7KW4uaD0obi5oK2kpJTM2MCxhLnB1c2goYyhuKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQSh0LGUpe2U9ZXx8Njtmb3IodmFyIHI9Yyh0KS50b0hzdigpLG49ci5oLGk9ci5zLGE9ci52LG89W10scz0xL2U7ZS0tOylvLnB1c2goYyh7aDpuLHM6aSx2OmF9KSksYT0oYStzKSUxO3JldHVybiBvfWMucHJvdG90eXBlPXtpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCk8MTI4fSxpc0xpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNEYXJrKCl9LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2t9LGdldE9yaWdpbmFsSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dH0sZ2V0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvcm1hdH0sZ2V0QWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYX0sZ2V0QnJpZ2h0bmVzczpmdW5jdGlvbigpe3ZhciB0PXRoaXMudG9SZ2IoKTtyZXR1cm4oMjk5KnQucis1ODcqdC5nKzExNCp0LmIpLzFlM30sZ2V0THVtaW5hbmNlOmZ1bmN0aW9uKCl7dmFyIGUscixuLGk9dGhpcy50b1JnYigpO3JldHVybiBlPWkuci8yNTUscj1pLmcvMjU1LG49aS5iLzI1NSwuMjEyNiooZTw9LjAzOTI4P2UvMTIuOTI6dC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KSkrLjcxNTIqKHI8PS4wMzkyOD9yLzEyLjkyOnQucG93KChyKy4wNTUpLzEuMDU1LDIuNCkpKy4wNzIyKihuPD0uMDM5Mjg/bi8xMi45Mjp0LnBvdygobisuMDU1KS8xLjA1NSwyLjQpKX0sc2V0QWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2E9Qyh0KSx0aGlzLl9yb3VuZEE9YSgxMDAqdGhpcy5fYSkvMTAwLHRoaXN9LHRvSHN2OmZ1bmN0aW9uKCl7dmFyIHQ9Zih0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKnQuaCxzOnQucyx2OnQudixhOnRoaXMuX2F9fSx0b0hzdlN0cmluZzpmdW5jdGlvbigpe3ZhciB0PWYodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLGU9YSgzNjAqdC5oKSxyPWEoMTAwKnQucyksbj1hKDEwMCp0LnYpO3JldHVybiAxPT10aGlzLl9hPyJoc3YoIitlKyIsICIrcisiJSwgIituKyIlKSI6ImhzdmEoIitlKyIsICIrcisiJSwgIituKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvSHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKnQuaCxzOnQucyxsOnQubCxhOnRoaXMuX2F9fSx0b0hzbFN0cmluZzpmdW5jdGlvbigpe3ZhciB0PXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLGU9YSgzNjAqdC5oKSxyPWEoMTAwKnQucyksbj1hKDEwMCp0LmwpO3JldHVybiAxPT10aGlzLl9hPyJoc2woIitlKyIsICIrcisiJSwgIituKyIlKSI6ImhzbGEoIitlKyIsICIrcisiJSwgIituKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvSGV4OmZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHQpfSx0b0hleFN0cmluZzpmdW5jdGlvbih0KXtyZXR1cm4iIyIrdGhpcy50b0hleCh0KX0sdG9IZXg4OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPVt6KGEodCkudG9TdHJpbmcoMTYpKSx6KGEoZSkudG9TdHJpbmcoMTYpKSx6KGEocikudG9TdHJpbmcoMTYpKSx6KEQobikpXTtpZihpJiZvWzBdLmNoYXJBdCgwKT09b1swXS5jaGFyQXQoMSkmJm9bMV0uY2hhckF0KDApPT1vWzFdLmNoYXJBdCgxKSYmb1syXS5jaGFyQXQoMCk9PW9bMl0uY2hhckF0KDEpJiZvWzNdLmNoYXJBdCgwKT09b1szXS5jaGFyQXQoMSkpcmV0dXJuIG9bMF0uY2hhckF0KDApK29bMV0uY2hhckF0KDApK29bMl0uY2hhckF0KDApK29bM10uY2hhckF0KDApO3JldHVybiBvLmpvaW4oIiIpfSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hLHQpfSx0b0hleDhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIiMiK3RoaXMudG9IZXg4KHQpfSx0b1JnYjpmdW5jdGlvbigpe3JldHVybntyOmEodGhpcy5fciksZzphKHRoaXMuX2cpLGI6YSh0aGlzLl9iKSxhOnRoaXMuX2F9fSx0b1JnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hPyJyZ2IoIithKHRoaXMuX3IpKyIsICIrYSh0aGlzLl9nKSsiLCAiK2EodGhpcy5fYikrIikiOiJyZ2JhKCIrYSh0aGlzLl9yKSsiLCAiK2EodGhpcy5fZykrIiwgIithKHRoaXMuX2IpKyIsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9QZXJjZW50YWdlUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6YSgxMDAqTCh0aGlzLl9yLDI1NSkpKyIlIixnOmEoMTAwKkwodGhpcy5fZywyNTUpKSsiJSIsYjphKDEwMCpMKHRoaXMuX2IsMjU1KSkrIiUiLGE6dGhpcy5fYX19LHRvUGVyY2VudGFnZVJnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hPyJyZ2IoIithKDEwMCpMKHRoaXMuX3IsMjU1KSkrIiUsICIrYSgxMDAqTCh0aGlzLl9nLDI1NSkpKyIlLCAiK2EoMTAwKkwodGhpcy5fYiwyNTUpKSsiJSkiOiJyZ2JhKCIrYSgxMDAqTCh0aGlzLl9yLDI1NSkpKyIlLCAiK2EoMTAwKkwodGhpcy5fZywyNTUpKSsiJSwgIithKDEwMCpMKHRoaXMuX2IsMjU1KSkrIiUsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9OYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9hPyJ0cmFuc3BhcmVudCI6ISh0aGlzLl9hPDEpJiYoRVtoKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLCEwKV18fCExKX0sdG9GaWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9IiMiK3AodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSkscj1lLG49dGhpcy5fZ3JhZGllbnRUeXBlPyJHcmFkaWVudFR5cGUgPSAxLCAiOiIiO2lmKHQpe3ZhciBpPWModCk7cj0iIyIrcChpLl9yLGkuX2csaS5fYixpLl9hKX1yZXR1cm4icHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCIrbisic3RhcnRDb2xvcnN0cj0iK2UrIixlbmRDb2xvcnN0cj0iK3IrIikifSx0b1N0cmluZzpmdW5jdGlvbih0KXt2YXIgZT0hIXQ7dD10fHx0aGlzLl9mb3JtYXQ7dmFyIHI9ITEsbj10aGlzLl9hPDEmJnRoaXMuX2E+PTA7cmV0dXJuIGV8fCFufHwiaGV4IiE9PXQmJiJoZXg2IiE9PXQmJiJoZXgzIiE9PXQmJiJoZXg0IiE9PXQmJiJoZXg4IiE9PXQmJiJuYW1lIiE9PXQ/KCJyZ2IiPT09dCYmKHI9dGhpcy50b1JnYlN0cmluZygpKSwicHJnYiI9PT10JiYocj10aGlzLnRvUGVyY2VudGFnZVJnYlN0cmluZygpKSwiaGV4IiE9PXQmJiJoZXg2IiE9PXR8fChyPXRoaXMudG9IZXhTdHJpbmcoKSksImhleDMiPT09dCYmKHI9dGhpcy50b0hleFN0cmluZyghMCkpLCJoZXg0Ij09PXQmJihyPXRoaXMudG9IZXg4U3RyaW5nKCEwKSksImhleDgiPT09dCYmKHI9dGhpcy50b0hleDhTdHJpbmcoKSksIm5hbWUiPT09dCYmKHI9dGhpcy50b05hbWUoKSksImhzbCI9PT10JiYocj10aGlzLnRvSHNsU3RyaW5nKCkpLCJoc3YiPT09dCYmKHI9dGhpcy50b0hzdlN0cmluZygpKSxyfHx0aGlzLnRvSGV4U3RyaW5nKCkpOiJuYW1lIj09PXQmJjA9PT10aGlzLl9hP3RoaXMudG9OYW1lKCk6dGhpcy50b1JnYlN0cmluZygpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBjKHRoaXMudG9TdHJpbmcoKSl9LF9hcHBseU1vZGlmaWNhdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPXQuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoZSkpKTtyZXR1cm4gdGhpcy5fcj1yLl9yLHRoaXMuX2c9ci5fZyx0aGlzLl9iPXIuX2IsdGhpcy5zZXRBbHBoYShyLl9hKSx0aGlzfSxsaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHYsYXJndW1lbnRzKX0sYnJpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oeSxhcmd1bWVudHMpfSxkYXJrZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oeCxhcmd1bWVudHMpfSxkZXNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGQsYXJndW1lbnRzKX0sc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZyxhcmd1bWVudHMpfSxncmV5c2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obSxhcmd1bWVudHMpfSxzcGluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGIsYXJndW1lbnRzKX0sX2FwcGx5Q29tYmluYXRpb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChlKSkpfSxhbmFsb2dvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihNLGFyZ3VtZW50cyl9LGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihfLGFyZ3VtZW50cyl9LG1vbm9jaHJvbWF0aWM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihBLGFyZ3VtZW50cyl9LHNwbGl0Y29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKGssYXJndW1lbnRzKX0sdHJpYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih3LGFyZ3VtZW50cyl9LHRldHJhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKFQsYXJndW1lbnRzKX19LGMuZnJvbVJhdGlvPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgcj17fTtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYocltuXT0iYSI9PT1uP3Rbbl06Tyh0W25dKSk7dD1yfXJldHVybiBjKHQsZSl9LGMuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISghdHx8IWUpJiZjKHQpLnRvUmdiU3RyaW5nKCk9PWMoZSkudG9SZ2JTdHJpbmcoKX0sYy5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gYy5mcm9tUmF0aW8oe3I6bCgpLGc6bCgpLGI6bCgpfSl9LGMubWl4PWZ1bmN0aW9uKHQsZSxyKXtyPTA9PT1yPzA6cnx8NTA7dmFyIG49Yyh0KS50b1JnYigpLGk9YyhlKS50b1JnYigpLGE9ci8xMDA7cmV0dXJuIGMoe3I6KGkuci1uLnIpKmErbi5yLGc6KGkuZy1uLmcpKmErbi5nLGI6KGkuYi1uLmIpKmErbi5iLGE6KGkuYS1uLmEpKmErbi5hfSl9LGMucmVhZGFiaWxpdHk9ZnVuY3Rpb24oZSxyKXt2YXIgbj1jKGUpLGk9YyhyKTtyZXR1cm4odC5tYXgobi5nZXRMdW1pbmFuY2UoKSxpLmdldEx1bWluYW5jZSgpKSsuMDUpLyh0Lm1pbihuLmdldEx1bWluYW5jZSgpLGkuZ2V0THVtaW5hbmNlKCkpKy4wNSl9LGMuaXNSZWFkYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWMucmVhZGFiaWxpdHkodCxlKTtzd2l0Y2goaT0hMSwobj1mdW5jdGlvbih0KXt2YXIgZSxyO2U9KCh0PXR8fHtsZXZlbDoiQUEiLHNpemU6InNtYWxsIn0pLmxldmVsfHwiQUEiKS50b1VwcGVyQ2FzZSgpLHI9KHQuc2l6ZXx8InNtYWxsIikudG9Mb3dlckNhc2UoKSwiQUEiIT09ZSYmIkFBQSIhPT1lJiYoZT0iQUEiKTsic21hbGwiIT09ciYmImxhcmdlIiE9PXImJihyPSJzbWFsbCIpO3JldHVybntsZXZlbDplLHNpemU6cn19KHIpKS5sZXZlbCtuLnNpemUpe2Nhc2UiQUFzbWFsbCI6Y2FzZSJBQUFsYXJnZSI6aT1hPj00LjU7YnJlYWs7Y2FzZSJBQWxhcmdlIjppPWE+PTM7YnJlYWs7Y2FzZSJBQUFzbWFsbCI6aT1hPj03fXJldHVybiBpfSxjLm1vc3RSZWFkYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scz1udWxsLGw9MDtpPShyPXJ8fHt9KS5pbmNsdWRlRmFsbGJhY2tDb2xvcnMsYT1yLmxldmVsLG89ci5zaXplO2Zvcih2YXIgdT0wO3U8ZS5sZW5ndGg7dSsrKShuPWMucmVhZGFiaWxpdHkodCxlW3VdKSk+bCYmKGw9bixzPWMoZVt1XSkpO3JldHVybiBjLmlzUmVhZGFibGUodCxzLHtsZXZlbDphLHNpemU6b30pfHwhaT9zOihyLmluY2x1ZGVGYWxsYmFja0NvbG9ycz0hMSxjLm1vc3RSZWFkYWJsZSh0LFsiI2ZmZiIsIiMwMDAiXSxyKSl9O3ZhciBTPWMubmFtZXM9e2FsaWNlYmx1ZToiZjBmOGZmIixhbnRpcXVld2hpdGU6ImZhZWJkNyIsYXF1YToiMGZmIixhcXVhbWFyaW5lOiI3ZmZmZDQiLGF6dXJlOiJmMGZmZmYiLGJlaWdlOiJmNWY1ZGMiLGJpc3F1ZToiZmZlNGM0IixibGFjazoiMDAwIixibGFuY2hlZGFsbW9uZDoiZmZlYmNkIixibHVlOiIwMGYiLGJsdWV2aW9sZXQ6IjhhMmJlMiIsYnJvd246ImE1MmEyYSIsYnVybHl3b29kOiJkZWI4ODciLGJ1cm50c2llbm5hOiJlYTdlNWQiLGNhZGV0Ymx1ZToiNWY5ZWEwIixjaGFydHJldXNlOiI3ZmZmMDAiLGNob2NvbGF0ZToiZDI2OTFlIixjb3JhbDoiZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiNjQ5NWVkIixjb3Juc2lsazoiZmZmOGRjIixjcmltc29uOiJkYzE0M2MiLGN5YW46IjBmZiIsZGFya2JsdWU6IjAwMDA4YiIsZGFya2N5YW46IjAwOGI4YiIsZGFya2dvbGRlbnJvZDoiYjg4NjBiIixkYXJrZ3JheToiYTlhOWE5IixkYXJrZ3JlZW46IjAwNjQwMCIsZGFya2dyZXk6ImE5YTlhOSIsZGFya2toYWtpOiJiZGI3NmIiLGRhcmttYWdlbnRhOiI4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiI1NTZiMmYiLGRhcmtvcmFuZ2U6ImZmOGMwMCIsZGFya29yY2hpZDoiOTkzMmNjIixkYXJrcmVkOiI4YjAwMDAiLGRhcmtzYWxtb246ImU5OTY3YSIsZGFya3NlYWdyZWVuOiI4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IjQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IjAwY2VkMSIsZGFya3Zpb2xldDoiOTQwMGQzIixkZWVwcGluazoiZmYxNDkzIixkZWVwc2t5Ymx1ZToiMDBiZmZmIixkaW1ncmF5OiI2OTY5NjkiLGRpbWdyZXk6IjY5Njk2OSIsZG9kZ2VyYmx1ZToiMWU5MGZmIixmaXJlYnJpY2s6ImIyMjIyMiIsZmxvcmFsd2hpdGU6ImZmZmFmMCIsZm9yZXN0Z3JlZW46IjIyOGIyMiIsZnVjaHNpYToiZjBmIixnYWluc2Jvcm86ImRjZGNkYyIsZ2hvc3R3aGl0ZToiZjhmOGZmIixnb2xkOiJmZmQ3MDAiLGdvbGRlbnJvZDoiZGFhNTIwIixncmF5OiI4MDgwODAiLGdyZWVuOiIwMDgwMDAiLGdyZWVueWVsbG93OiJhZGZmMmYiLGdyZXk6IjgwODA4MCIsaG9uZXlkZXc6ImYwZmZmMCIsaG90cGluazoiZmY2OWI0IixpbmRpYW5yZWQ6ImNkNWM1YyIsaW5kaWdvOiI0YjAwODIiLGl2b3J5OiJmZmZmZjAiLGtoYWtpOiJmMGU2OGMiLGxhdmVuZGVyOiJlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6ImZmZjBmNSIsbGF3bmdyZWVuOiI3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiZmZmYWNkIixsaWdodGJsdWU6ImFkZDhlNiIsbGlnaHRjb3JhbDoiZjA4MDgwIixsaWdodGN5YW46ImUwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ImZhZmFkMiIsbGlnaHRncmF5OiJkM2QzZDMiLGxpZ2h0Z3JlZW46IjkwZWU5MCIsbGlnaHRncmV5OiJkM2QzZDMiLGxpZ2h0cGluazoiZmZiNmMxIixsaWdodHNhbG1vbjoiZmZhMDdhIixsaWdodHNlYWdyZWVuOiIyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiODdjZWZhIixsaWdodHNsYXRlZ3JheToiNzg5IixsaWdodHNsYXRlZ3JleToiNzg5IixsaWdodHN0ZWVsYmx1ZToiYjBjNGRlIixsaWdodHllbGxvdzoiZmZmZmUwIixsaW1lOiIwZjAiLGxpbWVncmVlbjoiMzJjZDMyIixsaW5lbjoiZmFmMGU2IixtYWdlbnRhOiJmMGYiLG1hcm9vbjoiODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiI2NmNkYWEiLG1lZGl1bWJsdWU6IjAwMDBjZCIsbWVkaXVtb3JjaGlkOiJiYTU1ZDMiLG1lZGl1bXB1cnBsZToiOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IjdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IjAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiI0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiYzcxNTg1IixtaWRuaWdodGJsdWU6IjE5MTk3MCIsbWludGNyZWFtOiJmNWZmZmEiLG1pc3R5cm9zZToiZmZlNGUxIixtb2NjYXNpbjoiZmZlNGI1IixuYXZham93aGl0ZToiZmZkZWFkIixuYXZ5OiIwMDAwODAiLG9sZGxhY2U6ImZkZjVlNiIsb2xpdmU6IjgwODAwMCIsb2xpdmVkcmFiOiI2YjhlMjMiLG9yYW5nZToiZmZhNTAwIixvcmFuZ2VyZWQ6ImZmNDUwMCIsb3JjaGlkOiJkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6ImVlZThhYSIscGFsZWdyZWVuOiI5OGZiOTgiLHBhbGV0dXJxdW9pc2U6ImFmZWVlZSIscGFsZXZpb2xldHJlZDoiZGI3MDkzIixwYXBheWF3aGlwOiJmZmVmZDUiLHBlYWNocHVmZjoiZmZkYWI5IixwZXJ1OiJjZDg1M2YiLHBpbms6ImZmYzBjYiIscGx1bToiZGRhMGRkIixwb3dkZXJibHVlOiJiMGUwZTYiLHB1cnBsZToiODAwMDgwIixyZWJlY2NhcHVycGxlOiI2NjMzOTkiLHJlZDoiZjAwIixyb3N5YnJvd246ImJjOGY4ZiIscm95YWxibHVlOiI0MTY5ZTEiLHNhZGRsZWJyb3duOiI4YjQ1MTMiLHNhbG1vbjoiZmE4MDcyIixzYW5keWJyb3duOiJmNGE0NjAiLHNlYWdyZWVuOiIyZThiNTciLHNlYXNoZWxsOiJmZmY1ZWUiLHNpZW5uYToiYTA1MjJkIixzaWx2ZXI6ImMwYzBjMCIsc2t5Ymx1ZToiODdjZWViIixzbGF0ZWJsdWU6IjZhNWFjZCIsc2xhdGVncmF5OiI3MDgwOTAiLHNsYXRlZ3JleToiNzA4MDkwIixzbm93OiJmZmZhZmEiLHNwcmluZ2dyZWVuOiIwMGZmN2YiLHN0ZWVsYmx1ZToiNDY4MmI0Iix0YW46ImQyYjQ4YyIsdGVhbDoiMDA4MDgwIix0aGlzdGxlOiJkOGJmZDgiLHRvbWF0bzoiZmY2MzQ3Iix0dXJxdW9pc2U6IjQwZTBkMCIsdmlvbGV0OiJlZTgyZWUiLHdoZWF0OiJmNWRlYjMiLHdoaXRlOiJmZmYiLHdoaXRlc21va2U6ImY1ZjVmNSIseWVsbG93OiJmZjAiLHllbGxvd2dyZWVuOiI5YWNkMzIifSxFPWMuaGV4TmFtZXM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbdFtyXV09cik7cmV0dXJuIGV9KFMpO2Z1bmN0aW9uIEModCl7cmV0dXJuIHQ9cGFyc2VGbG9hdCh0KSwoaXNOYU4odCl8fHQ8MHx8dD4xKSYmKHQ9MSksdH1mdW5jdGlvbiBMKGUscil7KGZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmLTEhPXQuaW5kZXhPZigiLiIpJiYxPT09cGFyc2VGbG9hdCh0KX0pKGUpJiYoZT0iMTAwJSIpO3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmLTEhPXQuaW5kZXhPZigiJSIpfShlKTtyZXR1cm4gZT1vKHIscygwLHBhcnNlRmxvYXQoZSkpKSxuJiYoZT1wYXJzZUludChlKnIsMTApLzEwMCksdC5hYnMoZS1yKTwxZS02PzE6ZSVyL3BhcnNlRmxvYXQocil9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gbygxLHMoMCx0KSl9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gcGFyc2VJbnQodCwxNil9ZnVuY3Rpb24geih0KXtyZXR1cm4gMT09dC5sZW5ndGg/IjAiK3Q6IiIrdH1mdW5jdGlvbiBPKHQpe3JldHVybiB0PD0xJiYodD0xMDAqdCsiJSIpLHR9ZnVuY3Rpb24gRChlKXtyZXR1cm4gdC5yb3VuZCgyNTUqcGFyc2VGbG9hdChlKSkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFIodCl7cmV0dXJuIFAodCkvMjU1fXZhciBGLEIsTixqPShCPSJbXFxzfFxcKF0rKCIrKEY9Iig/OlstXFwrXT9cXGQqXFwuXFxkKyU/KXwoPzpbLVxcK10/XFxkKyU/KSIpKyIpWyx8XFxzXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpXFxzKlxcKT8iLE49IltcXHN8XFwoXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpXFxzKlxcKT8iLHtDU1NfVU5JVDpuZXcgUmVnRXhwKEYpLHJnYjpuZXcgUmVnRXhwKCJyZ2IiK0IpLHJnYmE6bmV3IFJlZ0V4cCgicmdiYSIrTiksaHNsOm5ldyBSZWdFeHAoImhzbCIrQiksaHNsYTpuZXcgUmVnRXhwKCJoc2xhIitOKSxoc3Y6bmV3IFJlZ0V4cCgiaHN2IitCKSxoc3ZhOm5ldyBSZWdFeHAoImhzdmEiK04pLGhleDM6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDY6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvLGhleDQ6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg4Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC99KTtmdW5jdGlvbiBVKHQpe3JldHVybiEhai5DU1NfVU5JVC5leGVjKHQpfSJ1bmRlZmluZWQiIT10eXBlb2YgZSYmZS5leHBvcnRzP2UuZXhwb3J0cz1jOndpbmRvdy50aW55Y29sb3I9Y30oTWF0aCl9LHt9XSw1Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWksZS5leHBvcnRzLmZsb2F0MzI9ZS5leHBvcnRzLmZsb2F0PWksZS5leHBvcnRzLmZyYWN0MzI9ZS5leHBvcnRzLmZyYWN0PWZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoKXtmb3IodmFyIGU9aSh0KSxyPTAsbj1lLmxlbmd0aDtyPG47cisrKWVbcl09dFtyXS1lW3JdO3JldHVybiBlfXJldHVybiBpKHQtaSh0KSl9O3ZhciBuPW5ldyBGbG9hdDMyQXJyYXkoMSk7ZnVuY3Rpb24gaSh0KXtpZih0Lmxlbmd0aCl7aWYodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gdDt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KHQpO3JldHVybiBlLnNldCh0KSxlfXJldHVybiBuWzBdPXQsblswXX19LHt9XSw1Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyc2UtdW5pdCIpO2UuZXhwb3J0cz1hO2Z1bmN0aW9uIGkodCxlKXt2YXIgcj1uKGdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShlKSk7cmV0dXJuIHJbMF0qYShyWzFdLHQpfWZ1bmN0aW9uIGEodCxlKXtzd2l0Y2goZT1lfHxkb2N1bWVudC5ib2R5LHQ9KHR8fCJweCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGUhPT13aW5kb3cmJmUhPT1kb2N1bWVudHx8KGU9ZG9jdW1lbnQuYm9keSksdCl7Y2FzZSIlIjpyZXR1cm4gZS5jbGllbnRIZWlnaHQvMTAwO2Nhc2UiY2giOmNhc2UiZXgiOnJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGVbImZvbnQtc2l6ZSJdPSIxMjgiK3QsZS5hcHBlbmRDaGlsZChyKTt2YXIgbj1pKHIsImZvbnQtc2l6ZSIpLzEyODtyZXR1cm4gZS5yZW1vdmVDaGlsZChyKSxufSh0LGUpO2Nhc2UiZW0iOnJldHVybiBpKGUsImZvbnQtc2l6ZSIpO2Nhc2UicmVtIjpyZXR1cm4gaShkb2N1bWVudC5ib2R5LCJmb250LXNpemUiKTtjYXNlInZ3IjpyZXR1cm4gd2luZG93LmlubmVyV2lkdGgvMTAwO2Nhc2UidmgiOnJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQvMTAwO2Nhc2Uidm1pbiI6cmV0dXJuIE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2Uidm1heCI6cmV0dXJuIE1hdGgubWF4KHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2UiaW4iOnJldHVybiA5NjtjYXNlImNtIjpyZXR1cm4gOTYvMi41NDtjYXNlIm1tIjpyZXR1cm4gOTYvMjUuNDtjYXNlInB0IjpyZXR1cm4gOTYvNzI7Y2FzZSJwYyI6cmV0dXJuIDE2fXJldHVybiAxfX0seyJwYXJzZS11bml0Ijo1MDZ9XSw1Nzk6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9uKHIpOm4oKHQ9dHx8c2VsZikudG9wb2pzb249dC50b3BvanNvbnx8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdH1mdW5jdGlvbiByKHQpe2lmKG51bGw9PXQpcmV0dXJuIGU7dmFyIHIsbixpPXQuc2NhbGVbMF0sYT10LnNjYWxlWzFdLG89dC50cmFuc2xhdGVbMF0scz10LnRyYW5zbGF0ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlKXtlfHwocj1uPTApO3ZhciBsPTIsYz10Lmxlbmd0aCx1PW5ldyBBcnJheShjKTtmb3IodVswXT0ocis9dFswXSkqaStvLHVbMV09KG4rPXRbMV0pKmErcztsPGM7KXVbbF09dFtsXSwrK2w7cmV0dXJuIHV9fWZ1bmN0aW9uIG4odCl7dmFyIGUsbj1yKHQudHJhbnNmb3JtKSxpPTEvMCxhPWksbz0taSxzPS1pO2Z1bmN0aW9uIGwodCl7KHQ9bih0KSlbMF08aSYmKGk9dFswXSksdFswXT5vJiYobz10WzBdKSx0WzFdPGEmJihhPXRbMV0pLHRbMV0+cyYmKHM9dFsxXSl9ZnVuY3Rpb24gYyh0KXtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6dC5nZW9tZXRyaWVzLmZvckVhY2goYyk7YnJlYWs7Y2FzZSJQb2ludCI6bCh0LmNvb3JkaW5hdGVzKTticmVhaztjYXNlIk11bHRpUG9pbnQiOnQuY29vcmRpbmF0ZXMuZm9yRWFjaChsKX19Zm9yKGUgaW4gdC5hcmNzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPS0xLGw9dC5sZW5ndGg7KytyPGw7KShlPW4odFtyXSxyKSlbMF08aSYmKGk9ZVswXSksZVswXT5vJiYobz1lWzBdKSxlWzFdPGEmJihhPWVbMV0pLGVbMV0+cyYmKHM9ZVsxXSl9KSksdC5vYmplY3RzKWModC5vYmplY3RzW2VdKTtyZXR1cm5baSxhLG8sc119ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWUuaWQsbj1lLmJib3gsaT1udWxsPT1lLnByb3BlcnRpZXM/e306ZS5wcm9wZXJ0aWVzLG89YSh0LGUpO3JldHVybiBudWxsPT1yJiZudWxsPT1uP3t0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6b306bnVsbD09bj97dHlwZToiRmVhdHVyZSIsaWQ6cixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6b306e3R5cGU6IkZlYXR1cmUiLGlkOnIsYmJveDpuLHByb3BlcnRpZXM6aSxnZW9tZXRyeTpvfX1mdW5jdGlvbiBhKHQsZSl7dmFyIG49cih0LnRyYW5zZm9ybSksaT10LmFyY3M7ZnVuY3Rpb24gYSh0LGUpe2UubGVuZ3RoJiZlLnBvcCgpO2Zvcih2YXIgcj1pW3Q8MD9+dDp0XSxhPTAsbz1yLmxlbmd0aDthPG87KythKWUucHVzaChuKHJbYV0sYSkpO3Q8MCYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Lmxlbmd0aCxpPW4tZTtpPC0tbjspcj10W2ldLHRbaSsrXT10W25dLHRbbl09cn0oZSxvKX1mdW5jdGlvbiBvKHQpe3JldHVybiBuKHQpfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpYSh0W3JdLGUpO3JldHVybiBlLmxlbmd0aDwyJiZlLnB1c2goZVswXSksZX1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1zKHQpO2UubGVuZ3RoPDQ7KWUucHVzaChlWzBdKTtyZXR1cm4gZX1mdW5jdGlvbiBjKHQpe3JldHVybiB0Lm1hcChsKX1yZXR1cm4gZnVuY3Rpb24gdChlKXt2YXIgcixuPWUudHlwZTtzd2l0Y2gobil7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnJldHVybnt0eXBlOm4sZ2VvbWV0cmllczplLmdlb21ldHJpZXMubWFwKHQpfTtjYXNlIlBvaW50IjpyPW8oZS5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50IjpyPWUuY29vcmRpbmF0ZXMubWFwKG8pO2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6cj1zKGUuYXJjcyk7YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnI9ZS5hcmNzLm1hcChzKTticmVhaztjYXNlIlBvbHlnb24iOnI9YyhlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjpyPWUuYXJjcy5tYXAoYyk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm57dHlwZTpuLGNvb3JkaW5hdGVzOnJ9fShlKX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9e30sbj17fSxpPXt9LGE9W10sbz0tMTtmdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciBuIGluIHQpe3ZhciBpPXRbbl07ZGVsZXRlIGVbaS5zdGFydF0sZGVsZXRlIGkuc3RhcnQsZGVsZXRlIGkuZW5kLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0PDA/fnQ6dF09MX0pKSxhLnB1c2goaSl9fXJldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7dmFyIGksYT10LmFyY3NbcjwwP35yOnJdO2EubGVuZ3RoPDMmJiFhWzFdWzBdJiYhYVsxXVsxXSYmKGk9ZVsrK29dLGVbb109cixlW25dPWkpfSkpLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHIsYSxvPWZ1bmN0aW9uKGUpe3ZhciByLG49dC5hcmNzW2U8MD9+ZTplXSxpPW5bMF07dC50cmFuc2Zvcm0/KHI9WzAsMF0sbi5mb3JFYWNoKChmdW5jdGlvbih0KXtyWzBdKz10WzBdLHJbMV0rPXRbMV19KSkpOnI9bltuLmxlbmd0aC0xXTtyZXR1cm4gZTwwP1tyLGldOltpLHJdfShlKSxzPW9bMF0sbD1vWzFdO2lmKHI9aVtzXSlpZihkZWxldGUgaVtyLmVuZF0sci5wdXNoKGUpLHIuZW5kPWwsYT1uW2xdKXtkZWxldGUgblthLnN0YXJ0XTt2YXIgYz1hPT09cj9yOnIuY29uY2F0KGEpO25bYy5zdGFydD1yLnN0YXJ0XT1pW2MuZW5kPWEuZW5kXT1jfWVsc2UgbltyLnN0YXJ0XT1pW3IuZW5kXT1yO2Vsc2UgaWYocj1uW2xdKWlmKGRlbGV0ZSBuW3Iuc3RhcnRdLHIudW5zaGlmdChlKSxyLnN0YXJ0PXMsYT1pW3NdKXtkZWxldGUgaVthLmVuZF07dmFyIHU9YT09PXI/cjphLmNvbmNhdChyKTtuW3Uuc3RhcnQ9YS5zdGFydF09aVt1LmVuZD1yLmVuZF09dX1lbHNlIG5bci5zdGFydF09aVtyLmVuZF09cjtlbHNlIG5bKHI9W2VdKS5zdGFydD1zXT1pW3IuZW5kPWxdPXJ9KSkscyhpLG4pLHMobixpKSxlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdDwwP350OnRdfHxhLnB1c2goW3RdKX0pKSxhfWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuLGksYTtpZihhcmd1bWVudHMubGVuZ3RoPjEpbj1sKHQsZSxyKTtlbHNlIGZvcihpPTAsbj1uZXcgQXJyYXkoYT10LmFyY3MubGVuZ3RoKTtpPGE7KytpKW5baV09aTtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixhcmNzOm8odCxuKX19ZnVuY3Rpb24gbCh0LGUscil7dmFyIG4saT1bXSxhPVtdO2Z1bmN0aW9uIG8odCl7dmFyIGU9dDwwP350OnQ7KGFbZV18fChhW2VdPVtdKSkucHVzaCh7aTp0LGc6bn0pfWZ1bmN0aW9uIHModCl7dC5mb3JFYWNoKG8pfWZ1bmN0aW9uIGwodCl7dC5mb3JFYWNoKHMpfXJldHVybiBmdW5jdGlvbiB0KGUpe3N3aXRjaChuPWUsZS50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6ZS5nZW9tZXRyaWVzLmZvckVhY2godCk7YnJlYWs7Y2FzZSJMaW5lU3RyaW5nIjpzKGUuYXJjcyk7YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6bChlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjohZnVuY3Rpb24odCl7dC5mb3JFYWNoKGwpfShlLmFyY3MpfX0oZSksYS5mb3JFYWNoKG51bGw9PXI/ZnVuY3Rpb24odCl7aS5wdXNoKHRbMF0uaSl9OmZ1bmN0aW9uKHQpe3IodFswXS5nLHRbdC5sZW5ndGgtMV0uZykmJmkucHVzaCh0WzBdLmkpfSksaX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9e30sbj1bXSxpPVtdO2Z1bmN0aW9uIHModCl7dC5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpeyhyW2U9ZTwwP35lOmVdfHwocltlXT1bXSkpLnB1c2godCl9KSl9KSksbi5wdXNoKHQpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPS0xLG49dC5sZW5ndGgsaT10W24tMV0sYT0wOysrcjxuOyllPWksaT10W3JdLGErPWVbMF0qaVsxXS1lWzFdKmlbMF07cmV0dXJuIE1hdGguYWJzKGEpfShhKHQse3R5cGU6IlBvbHlnb24iLGFyY3M6W2VdfSkuY29vcmRpbmF0ZXNbMF0pfXJldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uIHQoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmUuZ2VvbWV0cmllcy5mb3JFYWNoKHQpO2JyZWFrO2Nhc2UiUG9seWdvbiI6cyhlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjplLmFyY3MuZm9yRWFjaChzKX19KSksbi5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighdC5fKXt2YXIgZT1bXSxuPVt0XTtmb3IodC5fPTEsaS5wdXNoKGUpO3Q9bi5wb3AoKTspZS5wdXNoKHQpLHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XS5mb3JFYWNoKChmdW5jdGlvbih0KXt0Ll98fCh0Ll89MSxuLnB1c2godCkpfSkpfSkpfSkpfX0pKSxuLmZvckVhY2goKGZ1bmN0aW9uKHQpe2RlbGV0ZSB0Ll99KSkse3R5cGU6Ik11bHRpUG9seWdvbiIsYXJjczppLm1hcCgoZnVuY3Rpb24oZSl7dmFyIG4saT1bXTtpZihlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XS5sZW5ndGg8MiYmaS5wdXNoKHQpfSkpfSkpfSkpLChuPShpPW8odCxpKSkubGVuZ3RoKT4xKWZvcih2YXIgYSxzLGM9MSx1PWwoaVswXSk7YzxuOysrYykoYT1sKGlbY10pKT51JiYocz1pWzBdLGlbMF09aVtjXSxpW2NdPXMsdT1hKTtyZXR1cm4gaX0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4wfSkpfX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47KXt2YXIgaT1yK24+Pj4xO3RbaV08ZT9yPWkrMTpuPWl9cmV0dXJuIHJ9ZnVuY3Rpb24gZih0KXtpZihudWxsPT10KXJldHVybiBlO3ZhciByLG4saT10LnNjYWxlWzBdLGE9dC5zY2FsZVsxXSxvPXQudHJhbnNsYXRlWzBdLHM9dC50cmFuc2xhdGVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ZXx8KHI9bj0wKTt2YXIgbD0yLGM9dC5sZW5ndGgsdT1uZXcgQXJyYXkoYyksZj1NYXRoLnJvdW5kKCh0WzBdLW8pL2kpLGg9TWF0aC5yb3VuZCgodFsxXS1zKS9hKTtmb3IodVswXT1mLXIscj1mLHVbMV09aC1uLG49aDtsPGM7KXVbbF09dFtsXSwrK2w7cmV0dXJuIHV9fXQuYmJveD1uLHQuZmVhdHVyZT1mdW5jdGlvbih0LGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKGU9dC5vYmplY3RzW2VdKSwiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWUudHlwZT97dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOmUuZ2VvbWV0cmllcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBpKHQsZSl9KSl9OmkodCxlKX0sdC5tZXJnZT1mdW5jdGlvbih0KXtyZXR1cm4gYSh0LGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sdC5tZXJnZUFyY3M9Yyx0Lm1lc2g9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCxzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHQubWVzaEFyY3M9cyx0Lm5laWdoYm9ycz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQubWFwKChmdW5jdGlvbigpe3JldHVybltdfSkpO2Z1bmN0aW9uIG4odCxyKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3Q8MCYmKHQ9fnQpO3ZhciBuPWVbdF07bj9uLnB1c2gocik6ZVt0XT1bcl19KSl9ZnVuY3Rpb24gaSh0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7bih0LGUpfSkpfXZhciBhPXtMaW5lU3RyaW5nOm4sTXVsdGlMaW5lU3RyaW5nOmksUG9seWdvbjppLE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7aSh0LGUpfSkpfX07Zm9yKHZhciBvIGluIHQuZm9yRWFjaCgoZnVuY3Rpb24gdChlLHIpeyJHZW9tZXRyeUNvbGxlY3Rpb24iPT09ZS50eXBlP2UuZ2VvbWV0cmllcy5mb3JFYWNoKChmdW5jdGlvbihlKXt0KGUscil9KSk6ZS50eXBlIGluIGEmJmFbZS50eXBlXShlLmFyY3Mscil9KSksZSlmb3IodmFyIHM9ZVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKWZvcih2YXIgZj1jKzE7ZjxsOysrZil7dmFyIGgscD1zW2NdLGQ9c1tmXTsoaD1yW3BdKVtvPXUoaCxkKV0hPT1kJiZoLnNwbGljZShvLDAsZCksKGg9cltkXSlbbz11KGgscCldIT09cCYmaC5zcGxpY2UobywwLHApfXJldHVybiByfSx0LnF1YW50aXplPWZ1bmN0aW9uKHQsZSl7aWYodC50cmFuc2Zvcm0pdGhyb3cgbmV3IEVycm9yKCJhbHJlYWR5IHF1YW50aXplZCIpO2lmKGUmJmUuc2NhbGUpbD10LmJib3g7ZWxzZXtpZighKChyPU1hdGguZmxvb3IoZSkpPj0yKSl0aHJvdyBuZXcgRXJyb3IoIm4gbXVzdCBiZSBcdTIyNjUyIik7dmFyIHIsaT0obD10LmJib3h8fG4odCkpWzBdLGE9bFsxXSxvPWxbMl0scz1sWzNdO2U9e3NjYWxlOltvLWk/KG8taSkvKHItMSk6MSxzLWE/KHMtYSkvKHItMSk6MV0sdHJhbnNsYXRlOltpLGFdfX12YXIgbCxjLHU9ZihlKSxoPXQub2JqZWN0cyxwPXt9O2Z1bmN0aW9uIGQodCl7cmV0dXJuIHUodCl9ZnVuY3Rpb24gZyh0KXt2YXIgZTtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6ZT17dHlwZToiR2VvbWV0cnlDb2xsZWN0aW9uIixnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcy5tYXAoZyl9O2JyZWFrO2Nhc2UiUG9pbnQiOmU9e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpkKHQuY29vcmRpbmF0ZXMpfTticmVhaztjYXNlIk11bHRpUG9pbnQiOmU9e3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnQuY29vcmRpbmF0ZXMubWFwKGQpfTticmVhaztkZWZhdWx0OnJldHVybiB0fXJldHVybiBudWxsIT10LmlkJiYoZS5pZD10LmlkKSxudWxsIT10LmJib3gmJihlLmJib3g9dC5iYm94KSxudWxsIT10LnByb3BlcnRpZXMmJihlLnByb3BlcnRpZXM9dC5wcm9wZXJ0aWVzKSxlfWZvcihjIGluIGgpcFtjXT1nKGhbY10pO3JldHVybnt0eXBlOiJUb3BvbG9neSIsYmJveDpsLHRyYW5zZm9ybTplLG9iamVjdHM6cCxhcmNzOnQuYXJjcy5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlLHI9MCxuPTEsaT10Lmxlbmd0aCxhPW5ldyBBcnJheShpKTtmb3IoYVswXT11KHRbMF0sMCk7KytyPGk7KSgoZT11KHRbcl0scikpWzBdfHxlWzFdKSYmKGFbbisrXT1lKTtyZXR1cm4gMT09PW4mJihhW24rK109WzAsMF0pLGEubGVuZ3RoPW4sYX0pKX19LHQudHJhbnNmb3JtPXIsdC51bnRyYW5zZm9ybT1mLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDU4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybltdO2lmKDA9PT10KXJldHVybltbMF1dO2Zvcih2YXIgZT0wfE1hdGgucm91bmQoYSh0KzEpKSxyPVtdLG89MDtvPGU7KytvKXtmb3IodmFyIHM9bi51bnJhbmsodCxvKSxsPVswXSxjPTAsdT0wO3U8cy5sZW5ndGg7Kyt1KWMrPTE8PHNbdV0sbC5wdXNoKGMpO2kocyk8MSYmKGxbMF09YyxsW3RdPTApLHIucHVzaChsKX1yZXR1cm4gcn07dmFyIG49dCgicGVybXV0YXRpb24tcmFuayIpLGk9dCgicGVybXV0YXRpb24tcGFyaXR5IiksYT10KCJnYW1tYSIpfSx7Z2FtbWE6MjQ4LCJwZXJtdXRhdGlvbi1wYXJpdHkiOjUwOSwicGVybXV0YXRpb24tcmFuayI6NTEwfV0sNTgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC51cHx8WzAsMSwwXSxuPXQucmlnaHR8fGYociksaT10LnJhZGl1c3x8MSxhPXQudGhldGF8fDAsdT10LnBoaXx8MDtpZihlPVtdLnNsaWNlLmNhbGwoZSwwLDMpLHI9W10uc2xpY2UuY2FsbChyLDAsMykscyhyLHIpLG49W10uc2xpY2UuY2FsbChuLDAsMykscyhuLG4pLCJleWUiaW4gdCl7dmFyIHA9dC5leWUsZD1bcFswXS1lWzBdLHBbMV0tZVsxXSxwWzJdLWVbMl1dO28obixkLHIpLGMoblswXSxuWzFdLG5bMl0pPDFlLTY/bj1mKHIpOnMobixuKSxpPWMoZFswXSxkWzFdLGRbMl0pO3ZhciBnPWwocixkKS9pLG09bChuLGQpL2k7dT1NYXRoLmFjb3MoZyksYT1NYXRoLmFjb3MobSl9cmV0dXJuIGk9TWF0aC5sb2coaSksbmV3IGgodC56b29tTWluLHQuem9vbU1heCxlLHIsbixpLGEsdSl9O3ZhciBuPXQoImZpbHRlcmVkLXZlY3RvciIpLGk9dCgiZ2wtbWF0NC9pbnZlcnQiKSxhPXQoImdsLW1hdDQvcm90YXRlIiksbz10KCJnbC12ZWMzL2Nyb3NzIikscz10KCJnbC12ZWMzL25vcm1hbGl6ZSIpLGw9dCgiZ2wtdmVjMy9kb3QiKTtmdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiB1KHQpe3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KC0xLHQpKX1mdW5jdGlvbiBmKHQpe3ZhciBlPU1hdGguYWJzKHRbMF0pLHI9TWF0aC5hYnModFsxXSksbj1NYXRoLmFicyh0WzJdKSxpPVswLDAsMF07ZT5NYXRoLm1heChyLG4pP2lbMl09MTpyPk1hdGgubWF4KGUsbik/aVswXT0xOmlbMV09MTtmb3IodmFyIGE9MCxvPTAsbD0wO2w8MzsrK2wpYSs9dFtsXSp0W2xdLG8rPWlbbF0qdFtsXTtmb3IobD0wO2w8MzsrK2wpaVtsXS09by9hKnRbbF07cmV0dXJuIHMoaSxpKSxpfWZ1bmN0aW9uIGgodCxlLHIsaSxhLG8scyxsKXt0aGlzLmNlbnRlcj1uKHIpLHRoaXMudXA9bihpKSx0aGlzLnJpZ2h0PW4oYSksdGhpcy5yYWRpdXM9bihbb10pLHRoaXMuYW5nbGU9bihbcyxsXSksdGhpcy5hbmdsZS5ib3VuZHM9W1stMS8wLC1NYXRoLlBJLzJdLFsxLzAsTWF0aC5QSS8yXV0sdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0LGUpLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5jZW50ZXIuY3VydmUoMCksdGhpcy5jb21wdXRlZFVwPXRoaXMudXAuY3VydmUoMCksdGhpcy5jb21wdXRlZFJpZ2h0PXRoaXMucmlnaHQuY3VydmUoMCksdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLnJhZGl1cy5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkQW5nbGU9dGhpcy5hbmdsZS5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVG93YXJkPVswLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRNYXRyaXg9bmV3IEFycmF5KDE2KTtmb3IodmFyIGM9MDtjPDE2OysrYyl0aGlzLmNvbXB1dGVkTWF0cml4W2NdPS41O3RoaXMucmVjYWxjTWF0cml4KDApfXZhciBwPWgucHJvdG90eXBlO3Auc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt0PXQ+MD9NYXRoLmxvZyh0KTotMS8wLGU9ZT4wP01hdGgubG9nKGUpOjEvMCxlPU1hdGgubWF4KGUsdCksdGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdPXQsdGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdPWV9LHAuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yYWRpdXMuYm91bmRzWzBdO3JldHVybiB0Pyh0WzBdPU1hdGguZXhwKGVbMF1bMF0pLHRbMV09TWF0aC5leHAoZVsxXVswXSksdCk6W01hdGguZXhwKGVbMF1bMF0pLE1hdGguZXhwKGVbMV1bMF0pXX0scC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy51cC5jdXJ2ZSh0KSx0aGlzLnJpZ2h0LmN1cnZlKHQpLHRoaXMucmFkaXVzLmN1cnZlKHQpLHRoaXMuYW5nbGUuY3VydmUodCk7Zm9yKHZhciBlPXRoaXMuY29tcHV0ZWRVcCxyPXRoaXMuY29tcHV0ZWRSaWdodCxuPTAsaT0wLGE9MDthPDM7KythKWkrPWVbYV0qclthXSxuKz1lW2FdKmVbYV07dmFyIGw9TWF0aC5zcXJ0KG4pLHU9MDtmb3IoYT0wO2E8MzsrK2EpclthXS09ZVthXSppL24sdSs9clthXSpyW2FdLGVbYV0vPWw7dmFyIGY9TWF0aC5zcXJ0KHUpO2ZvcihhPTA7YTwzOysrYSlyW2FdLz1mO3ZhciBoPXRoaXMuY29tcHV0ZWRUb3dhcmQ7byhoLGUscikscyhoLGgpO3ZhciBwPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGQ9dGhpcy5jb21wdXRlZEFuZ2xlWzBdLGc9dGhpcy5jb21wdXRlZEFuZ2xlWzFdLG09TWF0aC5jb3MoZCksdj1NYXRoLnNpbihkKSx5PU1hdGguY29zKGcpLHg9TWF0aC5zaW4oZyksYj10aGlzLmNvbXB1dGVkQ2VudGVyLF89bSp5LHc9dip5LFQ9eCxrPS1tKngsTT0tdip4LEE9eSxTPXRoaXMuY29tcHV0ZWRFeWUsRT10aGlzLmNvbXB1dGVkTWF0cml4O2ZvcihhPTA7YTwzOysrYSl7dmFyIEM9XypyW2FdK3cqaFthXStUKmVbYV07RVs0KmErMV09aypyW2FdK00qaFthXStBKmVbYV0sRVs0KmErMl09QyxFWzQqYSszXT0wfXZhciBMPUVbMV0sST1FWzVdLFA9RVs5XSx6PUVbMl0sTz1FWzZdLEQ9RVsxMF0sUj1JKkQtUCpPLEY9UCp6LUwqRCxCPUwqTy1JKnosTj1jKFIsRixCKTtSLz1OLEYvPU4sQi89TixFWzBdPVIsRVs0XT1GLEVbOF09Qjtmb3IoYT0wO2E8MzsrK2EpU1thXT1iW2FdK0VbMis0KmFdKnA7Zm9yKGE9MDthPDM7KythKXt1PTA7Zm9yKHZhciBqPTA7ajwzOysrail1Kz1FW2ErNCpqXSpTW2pdO0VbMTIrYV09LXV9RVsxNV09MX0scC5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wO248MTY7KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn07dmFyIGQ9WzAsMCwwXTtwLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih0aGlzLmFuZ2xlLm1vdmUodCxlLHIpLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7ZFswXT1pWzJdLGRbMV09aVs2XSxkWzJdPWlbMTBdO2Zvcih2YXIgbz10aGlzLmNvbXB1dGVkVXAscz10aGlzLmNvbXB1dGVkUmlnaHQsbD10aGlzLmNvbXB1dGVkVG93YXJkLGM9MDtjPDM7KytjKWlbNCpjXT1vW2NdLGlbNCpjKzFdPXNbY10saVs0KmMrMl09bFtjXTthKGksaSxuLGQpO2ZvcihjPTA7YzwzOysrYylvW2NdPWlbNCpjXSxzW2NdPWlbNCpjKzFdO3RoaXMudXAuc2V0KHQsb1swXSxvWzFdLG9bMl0pLHRoaXMucmlnaHQuc2V0KHQsc1swXSxzWzFdLHNbMl0pfX0scC5wYW49ZnVuY3Rpb24odCxlLHIsbil7ZT1lfHwwLHI9cnx8MCxuPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeCxhPShNYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSxpWzFdKSxvPWlbNV0scz1pWzldLGw9YyhhLG8scyk7YS89bCxvLz1sLHMvPWw7dmFyIHU9aVswXSxmPWlbNF0saD1pWzhdLHA9dSphK2YqbytoKnMsZD1jKHUtPWEqcCxmLT1vKnAsaC09cypwKSxnPSh1Lz1kKSplK2EqcixtPShmLz1kKSplK28qcix2PShoLz1kKSplK3Mqcjt0aGlzLmNlbnRlci5tb3ZlKHQsZyxtLHYpO3ZhciB5PU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3k9TWF0aC5tYXgoMWUtNCx5K24pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHkpKX0scC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0scC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9MTsibnVtYmVyIj09dHlwZW9mIHImJihhPTB8ciksKGE8MHx8YT4zKSYmKGE9MSk7dmFyIG89KGErMiklMztlfHwodGhpcy5yZWNhbGNNYXRyaXgodCksZT10aGlzLmNvbXB1dGVkTWF0cml4KTt2YXIgcz1lW2FdLGw9ZVthKzRdLGY9ZVthKzhdO2lmKG4pe3ZhciBoPU1hdGguYWJzKHMpLHA9TWF0aC5hYnMobCksZD1NYXRoLmFicyhmKSxnPU1hdGgubWF4KGgscCxkKTtoPT09Zz8ocz1zPDA/LTE6MSxsPWY9MCk6ZD09PWc/KGY9ZjwwPy0xOjEscz1sPTApOihsPWw8MD8tMToxLHM9Zj0wKX1lbHNle3ZhciBtPWMocyxsLGYpO3MvPW0sbC89bSxmLz1tfXZhciB2LHkseD1lW29dLGI9ZVtvKzRdLF89ZVtvKzhdLHc9eCpzK2IqbCtfKmYsVD1jKHgtPXMqdyxiLT1sKncsXy09Zip3KSxrPWwqKF8vPVQpLWYqKGIvPVQpLE09ZiooeC89VCktcypfLEE9cypiLWwqeCxTPWMoayxNLEEpO2lmKGsvPVMsTS89UyxBLz1TLHRoaXMuY2VudGVyLmp1bXAodCxILEcsWSksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLnVwLmp1bXAodCxzLGwsZiksdGhpcy5yaWdodC5qdW1wKHQseCxiLF8pLDI9PT1hKXt2YXIgRT1lWzFdLEM9ZVs1XSxMPWVbOV0sST1FKngrQypiK0wqXyxQPUUqaytDKk0rTCpBO3Y9UjwwPy1NYXRoLlBJLzI6TWF0aC5QSS8yLHk9TWF0aC5hdGFuMihQLEkpfWVsc2V7dmFyIHo9ZVsyXSxPPWVbNl0sRD1lWzEwXSxSPXoqcytPKmwrRCpmLEY9eip4K08qYitEKl8sQj16KmsrTypNK0QqQTt2PU1hdGguYXNpbih1KFIpKSx5PU1hdGguYXRhbjIoQixGKX10aGlzLmFuZ2xlLmp1bXAodCx5LHYpLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBOPWVbMl0saj1lWzZdLFU9ZVsxMF0sVj10aGlzLmNvbXB1dGVkTWF0cml4O2koVixlKTt2YXIgcT1WWzE1XSxIPVZbMTJdL3EsRz1WWzEzXS9xLFk9VlsxNF0vcSxXPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLmp1bXAodCxILU4qVyxHLWoqVyxZLVUqVyl9LHAubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5jZW50ZXIubGFzdFQoKSx0aGlzLnVwLmxhc3RUKCksdGhpcy5yaWdodC5sYXN0VCgpLHRoaXMucmFkaXVzLmxhc3RUKCksdGhpcy5hbmdsZS5sYXN0VCgpKX0scC5pZGxlPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmlkbGUodCksdGhpcy51cC5pZGxlKHQpLHRoaXMucmlnaHQuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMuYW5nbGUuaWRsZSh0KX0scC5mbHVzaD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5mbHVzaCh0KSx0aGlzLnVwLmZsdXNoKHQpLHRoaXMucmlnaHQuZmx1c2godCksdGhpcy5yYWRpdXMuZmx1c2godCksdGhpcy5hbmdsZS5mbHVzaCh0KX0scC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxwLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHx0aGlzLmNvbXB1dGVkQ2VudGVyO3ZhciBpPShuPW58fHRoaXMuY29tcHV0ZWRVcClbMF0sYT1uWzFdLG89blsyXSxzPWMoaSxhLG8pO2lmKCEoczwxZS02KSl7aS89cyxhLz1zLG8vPXM7dmFyIGw9ZVswXS1yWzBdLGY9ZVsxXS1yWzFdLGg9ZVsyXS1yWzJdLHA9YyhsLGYsaCk7aWYoIShwPDFlLTYpKXtsLz1wLGYvPXAsaC89cDt2YXIgZD10aGlzLmNvbXB1dGVkUmlnaHQsZz1kWzBdLG09ZFsxXSx2PWRbMl0seT1pKmcrYSptK28qdix4PWMoZy09eSppLG0tPXkqYSx2LT15Km8pO2lmKCEoeDwuMDEmJih4PWMoZz1hKmgtbypmLG09bypsLWkqaCx2PWkqZi1hKmwpKTwxZS02KSl7Zy89eCxtLz14LHYvPXgsdGhpcy51cC5zZXQodCxpLGEsbyksdGhpcy5yaWdodC5zZXQodCxnLG0sdiksdGhpcy5jZW50ZXIuc2V0KHQsclswXSxyWzFdLHJbMl0pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHApKTt2YXIgYj1hKnYtbyptLF89bypnLWkqdix3PWkqbS1hKmcsVD1jKGIsXyx3KSxrPWkqbCthKmYrbypoLE09ZypsK20qZit2KmgsQT0oYi89VCkqbCsoXy89VCkqZisody89VCkqaCxTPU1hdGguYXNpbih1KGspKSxFPU1hdGguYXRhbjIoQSxNKSxDPXRoaXMuYW5nbGUuX3N0YXRlLEw9Q1tDLmxlbmd0aC0xXSxJPUNbQy5sZW5ndGgtMl07TCU9MipNYXRoLlBJO3ZhciBQPU1hdGguYWJzKEwrMipNYXRoLlBJLUUpLHo9TWF0aC5hYnMoTC1FKSxPPU1hdGguYWJzKEwtMipNYXRoLlBJLUUpO1A8eiYmKEwrPTIqTWF0aC5QSSksTzx6JiYoTC09MipNYXRoLlBJKSx0aGlzLmFuZ2xlLmp1bXAodGhpcy5hbmdsZS5sYXN0VCgpLEwsSSksdGhpcy5hbmdsZS5zZXQodCxFLFMpfX19fX0seyJmaWx0ZXJlZC12ZWN0b3IiOjI0MiwiZ2wtbWF0NC9pbnZlcnQiOjI5MywiZ2wtbWF0NC9yb3RhdGUiOjI5OSwiZ2wtdmVjMy9jcm9zcyI6MzY1LCJnbC12ZWMzL2RvdCI6MzcwLCJnbC12ZWMzL25vcm1hbGl6ZSI6Mzg3fV0sNTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dCplLGE9bip0LG89YS0oYS10KSxzPXQtbyxsPW4qZSxjPWwtKGwtZSksdT1lLWMsZj1zKnUtKGktbypjLXMqYy1vKnUpO2lmKHIpcmV0dXJuIHJbMF09ZixyWzFdPWkscjtyZXR1cm5bZixpXX07dmFyIG49KyhNYXRoLnBvdygyLDI3KSsxKX0se31dLDU4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQrZSxpPW4tdCxhPWUtaSxvPXQtKG4taSk7aWYocilyZXR1cm4gclswXT1vK2EsclsxXT1uLHI7cmV0dXJuW28rYSxuXX19LHt9XSw1ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcHJvdG90eXBlL2lzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXJldHVybiExO2lmKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHQsImxlbmd0aCIpKXJldHVybiExO3RyeXtpZigibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RoKXJldHVybiExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0LmNhbGwpcmV0dXJuITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQuYXBwbHkpcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuIW4odCl9fSx7Ii4uL3Byb3RvdHlwZS9pcyI6NTkxfV0sNTg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3ZhbHVlL2lzIiksaT10KCIuLi9vYmplY3QvaXMiKSxhPXQoIi4uL3N0cmluZy9jb2VyY2UiKSxvPXQoIi4vdG8tc2hvcnQtc3RyaW5nIikscz1mdW5jdGlvbih0LGUpe3JldHVybiB0LnJlcGxhY2UoIiV2IixvKGUpKX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighaShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKHMoZSx0KSk7aWYoIW4odCkpe2lmKCJkZWZhdWx0ImluIHIpcmV0dXJuIHIuZGVmYXVsdDtpZihyLmlzT3B0aW9uYWwpcmV0dXJuIG51bGx9dmFyIG89YShyLmVycm9yTWVzc2FnZSk7dGhyb3cgbihvKXx8KG89ZSksbmV3IFR5cGVFcnJvcihzKG8sdCkpfX0seyIuLi9vYmplY3QvaXMiOjU4OCwiLi4vc3RyaW5nL2NvZXJjZSI6NTkyLCIuLi92YWx1ZS9pcyI6NTk0LCIuL3RvLXNob3J0LXN0cmluZyI6NTg3fV0sNTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQudG9TdHJpbmcoKX1jYXRjaChlKXt0cnl7cmV0dXJuIFN0cmluZyh0KX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19fX0se31dLDU4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NhZmUtdG8tc3RyaW5nIiksaT0vW1xuXHJcdTIwMjhcdTIwMjldL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCk7cmV0dXJuIG51bGw9PT1lPyI8Tm9uLWNvZXJjaWJsZSB0byBzdHJpbmcgdmFsdWU+IjooZS5sZW5ndGg+MTAwJiYoZT1lLnNsaWNlKDAsOTkpKyJcdTIwMjYiKSxlPWUucmVwbGFjZShpLChmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJcbiI6cmV0dXJuIlxcbiI7Y2FzZSJcciI6cmV0dXJuIlxcciI7Y2FzZSJcdTIwMjgiOnJldHVybiJcXHUyMDI4IjtjYXNlIlx1MjAyOSI6cmV0dXJuIlxcdTIwMjkiO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNoYXJhY3RlciIpfX0pKSl9fSx7Ii4vc2FmZS10by1zdHJpbmciOjU4Nn1dLDU4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi92YWx1ZS9pcyIpLGk9e29iamVjdDohMCxmdW5jdGlvbjohMCx1bmRlZmluZWQ6ITB9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIW4odCkmJmhhc093blByb3BlcnR5LmNhbGwoaSx0eXBlb2YgdCl9fSx7Ii4uL3ZhbHVlL2lzIjo1OTR9XSw1ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliL3Jlc29sdmUtZXhjZXB0aW9uIiksaT10KCIuL2lzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpP3Q6bih0LCIldiBpcyBub3QgYSBwbGFpbiBmdW5jdGlvbiIsYXJndW1lbnRzWzFdKX19LHsiLi4vbGliL3Jlc29sdmUtZXhjZXB0aW9uIjo1ODUsIi4vaXMiOjU5MH1dLDU5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9mdW5jdGlvbi9pcyIpLGk9L15ccypjbGFzc1tcc3svfV0vLGE9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIW4odCkmJiFpLnRlc3QoYS5jYWxsKHQpKX19LHsiLi4vZnVuY3Rpb24vaXMiOjU4NH1dLDU5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9vYmplY3QvaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpcmV0dXJuITE7dHJ5e3JldHVybiEhdC5jb25zdHJ1Y3RvciYmdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU9PT10fWNhdGNoKHQpe3JldHVybiExfX19LHsiLi4vb2JqZWN0L2lzIjo1ODh9XSw1OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdmFsdWUvaXMiKSxpPXQoIi4uL29iamVjdC9pcyIpLGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpcmV0dXJuIG51bGw7aWYoaSh0KSl7dmFyIGU9dC50b1N0cmluZztpZigiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4gbnVsbDtpZihlPT09YSlyZXR1cm4gbnVsbH10cnl7cmV0dXJuIiIrdH1jYXRjaCh0KXtyZXR1cm4gbnVsbH19fSx7Ii4uL29iamVjdC9pcyI6NTg4LCIuLi92YWx1ZS9pcyI6NTk0fV0sNTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYi9yZXNvbHZlLWV4Y2VwdGlvbiIpLGk9dCgiLi9pcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KT90Om4odCwiQ2Fubm90IHVzZSAldiIsYXJndW1lbnRzWzFdKX19LHsiLi4vbGliL3Jlc29sdmUtZXhjZXB0aW9uIjo1ODUsIi4vaXMiOjU5NH1dLDU5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXR9fSx7fV0sNTk1OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaXQtdHdpZGRsZSIpLGk9dCgiZHVwIiksYT10KCJidWZmZXIiKS5CdWZmZXI7ZS5fX1RZUEVEQVJSQVlfUE9PTHx8KGUuX19UWVBFREFSUkFZX1BPT0w9e1VJTlQ4OmkoWzMyLDBdKSxVSU5UMTY6aShbMzIsMF0pLFVJTlQzMjppKFszMiwwXSksQklHVUlOVDY0OmkoWzMyLDBdKSxJTlQ4OmkoWzMyLDBdKSxJTlQxNjppKFszMiwwXSksSU5UMzI6aShbMzIsMF0pLEJJR0lOVDY0OmkoWzMyLDBdKSxGTE9BVDppKFszMiwwXSksRE9VQkxFOmkoWzMyLDBdKSxEQVRBOmkoWzMyLDBdKSxVSU5UOEM6aShbMzIsMF0pLEJVRkZFUjppKFszMiwwXSl9KTt2YXIgbz0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5LHM9InVuZGVmaW5lZCIhPXR5cGVvZiBCaWdVaW50NjRBcnJheSxsPSJ1bmRlZmluZWQiIT10eXBlb2YgQmlnSW50NjRBcnJheSxjPWUuX19UWVBFREFSUkFZX1BPT0w7Yy5VSU5UOEN8fChjLlVJTlQ4Qz1pKFszMiwwXSkpLGMuQklHVUlOVDY0fHwoYy5CSUdVSU5UNjQ9aShbMzIsMF0pKSxjLkJJR0lOVDY0fHwoYy5CSUdJTlQ2ND1pKFszMiwwXSkpLGMuQlVGRkVSfHwoYy5CVUZGRVI9aShbMzIsMF0pKTt2YXIgdT1jLkRBVEEsZj1jLkJVRkZFUjtmdW5jdGlvbiBoKHQpe2lmKHQpe3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj1uLmxvZzIoZSk7dVtyXS5wdXNoKHQpfX1mdW5jdGlvbiBwKHQpe3Q9bi5uZXh0UG93Mih0KTt2YXIgZT1uLmxvZzIodCkscj11W2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHAodCksMCx0KX1mdW5jdGlvbiBnKHQpe3JldHVybiBuZXcgVWludDE2QXJyYXkocCgyKnQpLDAsdCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KHAoNCp0KSwwLHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIG5ldyBJbnQ4QXJyYXkocCh0KSwwLHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIG5ldyBJbnQxNkFycmF5KHAoMip0KSwwLHQpfWZ1bmN0aW9uIHgodCl7cmV0dXJuIG5ldyBJbnQzMkFycmF5KHAoNCp0KSwwLHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkocCg0KnQpLDAsdCl9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gbmV3IEZsb2F0NjRBcnJheShwKDgqdCksMCx0KX1mdW5jdGlvbiB3KHQpe3JldHVybiBvP25ldyBVaW50OENsYW1wZWRBcnJheShwKHQpLDAsdCk6ZCh0KX1mdW5jdGlvbiBUKHQpe3JldHVybiBzP25ldyBCaWdVaW50NjRBcnJheShwKDgqdCksMCx0KTpudWxsfWZ1bmN0aW9uIGsodCl7cmV0dXJuIGw/bmV3IEJpZ0ludDY0QXJyYXkocCg4KnQpLDAsdCk6bnVsbH1mdW5jdGlvbiBNKHQpe3JldHVybiBuZXcgRGF0YVZpZXcocCh0KSwwLHQpfWZ1bmN0aW9uIEEodCl7dD1uLm5leHRQb3cyKHQpO3ZhciBlPW4ubG9nMih0KSxyPWZbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgYSh0KX1yLmZyZWU9ZnVuY3Rpb24odCl7aWYoYS5pc0J1ZmZlcih0KSlmW24ubG9nMih0Lmxlbmd0aCldLnB1c2godCk7ZWxzZXtpZigiW29iamVjdCBBcnJheUJ1ZmZlcl0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYodD10LmJ1ZmZlciksIXQpcmV0dXJuO3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj0wfG4ubG9nMihlKTt1W3JdLnB1c2godCl9fSxyLmZyZWVVaW50OD1yLmZyZWVVaW50MTY9ci5mcmVlVWludDMyPXIuZnJlZUJpZ1VpbnQ2ND1yLmZyZWVJbnQ4PXIuZnJlZUludDE2PXIuZnJlZUludDMyPXIuZnJlZUJpZ0ludDY0PXIuZnJlZUZsb2F0MzI9ci5mcmVlRmxvYXQ9ci5mcmVlRmxvYXQ2ND1yLmZyZWVEb3VibGU9ci5mcmVlVWludDhDbGFtcGVkPXIuZnJlZURhdGFWaWV3PWZ1bmN0aW9uKHQpe2godC5idWZmZXIpfSxyLmZyZWVBcnJheUJ1ZmZlcj1oLHIuZnJlZUJ1ZmZlcj1mdW5jdGlvbih0KXtmW24ubG9nMih0Lmxlbmd0aCldLnB1c2godCl9LHIubWFsbG9jPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZXx8ImFycmF5YnVmZmVyIj09PWUpcmV0dXJuIHAodCk7c3dpdGNoKGUpe2Nhc2UidWludDgiOnJldHVybiBkKHQpO2Nhc2UidWludDE2IjpyZXR1cm4gZyh0KTtjYXNlInVpbnQzMiI6cmV0dXJuIG0odCk7Y2FzZSJpbnQ4IjpyZXR1cm4gdih0KTtjYXNlImludDE2IjpyZXR1cm4geSh0KTtjYXNlImludDMyIjpyZXR1cm4geCh0KTtjYXNlImZsb2F0IjpjYXNlImZsb2F0MzIiOnJldHVybiBiKHQpO2Nhc2UiZG91YmxlIjpjYXNlImZsb2F0NjQiOnJldHVybiBfKHQpO2Nhc2UidWludDhfY2xhbXBlZCI6cmV0dXJuIHcodCk7Y2FzZSJiaWdpbnQ2NCI6cmV0dXJuIGsodCk7Y2FzZSJiaWd1aW50NjQiOnJldHVybiBUKHQpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gQSh0KTtjYXNlImRhdGEiOmNhc2UiZGF0YXZpZXciOnJldHVybiBNKHQpO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIG51bGx9LHIubWFsbG9jQXJyYXlCdWZmZXI9cCxyLm1hbGxvY1VpbnQ4PWQsci5tYWxsb2NVaW50MTY9ZyxyLm1hbGxvY1VpbnQzMj1tLHIubWFsbG9jSW50OD12LHIubWFsbG9jSW50MTY9eSxyLm1hbGxvY0ludDMyPXgsci5tYWxsb2NGbG9hdDMyPXIubWFsbG9jRmxvYXQ9YixyLm1hbGxvY0Zsb2F0NjQ9ci5tYWxsb2NEb3VibGU9XyxyLm1hbGxvY1VpbnQ4Q2xhbXBlZD13LHIubWFsbG9jQmlnVWludDY0PVQsci5tYWxsb2NCaWdJbnQ2ND1rLHIubWFsbG9jRGF0YVZpZXc9TSxyLm1hbGxvY0J1ZmZlcj1BLHIuY2xlYXJDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8MzI7Kyt0KWMuVUlOVDhbdF0ubGVuZ3RoPTAsYy5VSU5UMTZbdF0ubGVuZ3RoPTAsYy5VSU5UMzJbdF0ubGVuZ3RoPTAsYy5JTlQ4W3RdLmxlbmd0aD0wLGMuSU5UMTZbdF0ubGVuZ3RoPTAsYy5JTlQzMlt0XS5sZW5ndGg9MCxjLkZMT0FUW3RdLmxlbmd0aD0wLGMuRE9VQkxFW3RdLmxlbmd0aD0wLGMuQklHVUlOVDY0W3RdLmxlbmd0aD0wLGMuQklHSU5UNjRbdF0ubGVuZ3RoPTAsYy5VSU5UOENbdF0ubGVuZ3RoPTAsdVt0XS5sZW5ndGg9MCxmW3RdLmxlbmd0aD0wfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiYml0LXR3aWRkbGUiOjk3LGJ1ZmZlcjoxMTEsZHVwOjE3Nn1dLDU5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucm9vdHM9bmV3IEFycmF5KHQpLHRoaXMucmFua3M9bmV3IEFycmF5KHQpO2Zvcih2YXIgZT0wO2U8dDsrK2UpdGhpcy5yb290c1tlXT1lLHRoaXMucmFua3NbZV09MH1lLmV4cG9ydHM9bjt2YXIgaT1uLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofX0pLGkubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LGkuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dCxyPXRoaXMucm9vdHM7clt0XSE9PXQ7KXQ9clt0XTtmb3IoO3JbZV0hPT10Oyl7dmFyIG49cltlXTtyW2VdPXQsZT1ufXJldHVybiB0fSxpLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3MsYT10aGlzLnJvb3RzLG89aVtyXSxzPWlbbl07bzxzP2Fbcl09bjpzPG8/YVtuXT1yOihhW25dPXIsKytpW3JdKX19fSx7fV0sNTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIDA9PT10Lmxlbmd0aD90OmU/KHJ8fHQuc29ydChlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49dC5sZW5ndGgsaT10WzBdLGE9dFswXSxvPTE7bzxuOysrbylpZihhPWksZShpPXRbb10sYSkpe2lmKG89PT1yKXtyKys7Y29udGludWV9dFtyKytdPWl9cmV0dXJuIHQubGVuZ3RoPXIsdH0odCxlKSk6KHJ8fHQuc29ydCgpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9dFswXSxhPTE7YTxyOysrYSxpPW4paWYoaT1uLChuPXRbYV0pIT09aSl7aWYoYT09PWUpe2UrKztjb250aW51ZX10W2UrK109bn1yZXR1cm4gdC5sZW5ndGg9ZSx0fSh0KSl9fSx7fV0sNTk4OltmdW5jdGlvbih0LGUscil7dmFyIG49L1tcJ1wiXS87ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PyhuLnRlc3QodC5jaGFyQXQoMCkpJiYodD10LnN1YnN0cigxKSksbi50ZXN0KHQuY2hhckF0KHQubGVuZ3RoLTEpKSYmKHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKSksdCk6IiJ9fSx7fV0sNTk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheShyKXx8KHI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO2Zvcih2YXIgbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7dmFyIGE9cltuXTtmb3IodmFyIG8gaW4gYSlpZigodm9pZCAwPT09ZVtvXXx8QXJyYXkuaXNBcnJheShlW29dKXx8dFtvXSE9PWVbb10pJiZvIGluIGUpe3ZhciBzO2lmKCEwPT09YVtvXSlzPWVbb107ZWxzZXtpZighMT09PWFbb10pY29udGludWU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGFbb10mJnZvaWQgMD09PShzPWFbb10oZVtvXSx0LGUpKSljb250aW51ZX10W29dPXN9fXJldHVybiB0fX0se31dLDYwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfHwoZT17fSk7cmV0dXJuIG4odCxlLmNhbnZhc3x8aSxlLmNvbnRleHR8fGEsZSl9O3ZhciBuPXQoIi4vbGliL3Z0ZXh0IiksaT1udWxsLGE9bnVsbDsidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoKGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLndpZHRoPTgxOTIsaS5oZWlnaHQ9MTAyNCxhPWkuZ2V0Q29udGV4dCgiMmQiKSl9LHsiLi9saWIvdnRleHQiOjYwMX1dLDYwMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT02NCxvPTEuMjUscz17YnJlYWtsaW5lczohMSxib2xkczohMSxpdGFsaWNzOiExLHN1YnNjcmlwdHM6ITEsc3VwZXJzY3JpcHRzOiExfTtuJiYobi5zaXplJiZuLnNpemU+MCYmKGE9bi5zaXplKSxuLmxpbmVTcGFjaW5nJiZuLmxpbmVTcGFjaW5nPjAmJihvPW4ubGluZVNwYWNpbmcpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5icmVha2xpbmVzJiYocy5icmVha2xpbmVzPSEhbi5zdHlsZXRhZ3MuYnJlYWtsaW5lcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLmJvbGRzJiYocy5ib2xkcz0hIW4uc3R5bGV0YWdzLmJvbGRzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuaXRhbGljcyYmKHMuaXRhbGljcz0hIW4uc3R5bGV0YWdzLml0YWxpY3MpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5zdWJzY3JpcHRzJiYocy5zdWJzY3JpcHRzPSEhbi5zdHlsZXRhZ3Muc3Vic2NyaXB0cyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLnN1cGVyc2NyaXB0cyYmKHMuc3VwZXJzY3JpcHRzPSEhbi5zdHlsZXRhZ3Muc3VwZXJzY3JpcHRzKSk7cmV0dXJuIHIuZm9udD1bbi5mb250U3R5bGUsbi5mb250VmFyaWFudCxuLmZvbnRXZWlnaHQsYSsicHgiLG4uZm9udF0uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5qb2luKCIgIiksci50ZXh0QWxpZ249InN0YXJ0IixyLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsci5kaXJlY3Rpb249Imx0ciIsaChmdW5jdGlvbih0LGUscixuLGEsbyl7cj1yLnJlcGxhY2UoL1xuL2csIiIpLHI9ITA9PT1vLmJyZWFrbGluZXM/ci5yZXBsYWNlKC9cPGJyXD4vZywiXG4iKTpyLnJlcGxhY2UoL1w8YnJcPi9nLCIgIik7dmFyIHM9IiIsbD1bXTtmb3IocD0wO3A8ci5sZW5ndGg7KytwKWxbcF09czshMD09PW8uYm9sZHMmJihsPWMoImIiLCJifCIscixsKSk7ITA9PT1vLml0YWxpY3MmJihsPWMoImkiLCJpfCIscixsKSk7ITA9PT1vLnN1cGVyc2NyaXB0cyYmKGw9Yygic3VwIiwiKzEiLHIsbCkpOyEwPT09by5zdWJzY3JpcHRzJiYobD1jKCJzdWIiLCItMSIscixsKSk7dmFyIHU9W10sZj0iIjtmb3IocD0wO3A8ci5sZW5ndGg7KytwKW51bGwhPT1sW3BdJiYoZis9cltwXSx1LnB1c2gobFtwXSkpO3ZhciBoLHAsZCxnLG0sdj1mLnNwbGl0KCJcbiIpLHk9di5sZW5ndGgseD1NYXRoLnJvdW5kKGEqbiksYj1uLF89MipuLHc9MCxUPXkqeCtfO3QuaGVpZ2h0PFQmJih0LmhlaWdodD1UKTtlLmZpbGxTdHlsZT0iIzAwMCIsZS5maWxsUmVjdCgwLDAsdC53aWR0aCx0LmhlaWdodCksZS5maWxsU3R5bGU9IiNmZmYiO3ZhciBrPTAsTT0iIjtmdW5jdGlvbiBBKCl7aWYoIiIhPT1NKXt2YXIgdD1lLm1lYXN1cmVUZXh0KE0pLndpZHRoO2UuZmlsbFRleHQoTSxiK2QsXytnKSxkKz10fX1mdW5jdGlvbiBTKCl7cmV0dXJuIE1hdGgucm91bmQobSkrInB4ICJ9ZnVuY3Rpb24gRSh0LHIpe3ZhciBuPSIiK2UuZm9udDtpZighMD09PW8uc3Vic2NyaXB0cyl7dmFyIGk9dC5pbmRleE9mKCItIiksYT1yLmluZGV4T2YoIi0iKSxzPWk+LTE/cGFyc2VJbnQodFsxK2ldKTowLGw9YT4tMT9wYXJzZUludChyWzErYV0pOjA7cyE9PWwmJihuPW4ucmVwbGFjZShTKCksIj9weCAiKSxtKj1NYXRoLnBvdyguNzUsbC1zKSxuPW4ucmVwbGFjZSgiP3B4ICIsUygpKSksZys9LjI1KngqKGwtcyl9aWYoITA9PT1vLnN1cGVyc2NyaXB0cyl7dmFyIGM9dC5pbmRleE9mKCIrIiksdT1yLmluZGV4T2YoIisiKSxmPWM+LTE/cGFyc2VJbnQodFsxK2NdKTowLGg9dT4tMT9wYXJzZUludChyWzErdV0pOjA7ZiE9PWgmJihuPW4ucmVwbGFjZShTKCksIj9weCAiKSxtKj1NYXRoLnBvdyguNzUsaC1mKSxuPW4ucmVwbGFjZSgiP3B4ICIsUygpKSksZy09LjI1KngqKGgtZil9aWYoITA9PT1vLmJvbGRzKXt2YXIgcD10LmluZGV4T2YoImJ8Iik+LTEsZD1yLmluZGV4T2YoImJ8Iik+LTE7IXAmJmQmJihuPXY/bi5yZXBsYWNlKCJpdGFsaWMgIiwiaXRhbGljIGJvbGQgIik6ImJvbGQgIituKSxwJiYhZCYmKG49bi5yZXBsYWNlKCJib2xkICIsIiIpKX1pZighMD09PW8uaXRhbGljcyl7dmFyIHY9dC5pbmRleE9mKCJpfCIpPi0xLHk9ci5pbmRleE9mKCJpfCIpPi0xOyF2JiZ5JiYobj0iaXRhbGljICIrbiksdiYmIXkmJihuPW4ucmVwbGFjZSgiaXRhbGljICIsIiIpKX1lLmZvbnQ9bn1mb3IoaD0wO2g8eTsrK2gpe3ZhciBDPXZbaF0rIlxuIjtmb3IoZD0wLGc9aCp4LG09bixNPSIiLHA9MDtwPEMubGVuZ3RoOysrcCl7dmFyIEw9cCtrPHUubGVuZ3RoP3VbcCtrXTp1W3UubGVuZ3RoLTFdO3M9PT1MP00rPUNbcF06KEEoKSxNPUNbcF0sdm9pZCAwIT09TCYmKEUocyxMKSxzPUwpKX1BKCksays9Qy5sZW5ndGg7dmFyIEk9MHxNYXRoLnJvdW5kKGQrMipiKTt3PEkmJih3PUkpfXZhciBQPXcsej1fK3gqeTtyZXR1cm4gaShlLmdldEltYWdlRGF0YSgwLDAsUCx6KS5kYXRhLFt6LFAsNF0pLnBpY2soLTEsLTEsMCkudHJhbnNwb3NlKDEsMCl9KGUscix0LGEsbyxzKSxuLGEpfSxlLmV4cG9ydHMucHJvY2Vzc1BpeGVscz1oO3ZhciBuPXQoInN1cmZhY2UtbmV0cyIpLGk9dCgibmRhcnJheSIpLGE9dCgic2ltcGxpZnktcGxhbmFyLWdyYXBoIiksbz10KCJjbGVhbi1wc2xnIikscz10KCJjZHQyZCIpLGw9dCgicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lIik7ZnVuY3Rpb24gYyh0LGUscixuKXtmb3IodmFyIGk9IjwiK3QrIj4iLGE9IjwvIit0KyI+IixvPWkubGVuZ3RoLHM9YS5sZW5ndGgsbD0iKyI9PT1lWzBdfHwiLSI9PT1lWzBdLGM9MCx1PS1zO2M+LTEmJi0xIT09KGM9ci5pbmRleE9mKGksYykpJiYtMSE9PSh1PXIuaW5kZXhPZihhLGMrbykpJiYhKHU8PWMpOyl7Zm9yKHZhciBmPWM7Zjx1K3M7KytmKWlmKGY8YytvfHxmPj11KW5bZl09bnVsbCxyPXIuc3Vic3RyKDAsZikrIiAiK3Iuc3Vic3RyKGYrMSk7ZWxzZSBpZihudWxsIT09bltmXSl7dmFyIGg9bltmXS5pbmRleE9mKGVbMF0pOy0xPT09aD9uW2ZdKz1lOmwmJihuW2ZdPW5bZl0uc3Vic3RyKDAsaCsxKSsoMStwYXJzZUludChuW2ZdW2grMV0pKStuW2ZdLnN1YnN0cihoKzIpKX12YXIgcD1jK28sZD1yLnN1YnN0cihwLHUtcCkuaW5kZXhPZihpKTtjPS0xIT09ZD9kOnUrc31yZXR1cm4gbn1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9bih0LDEyOCk7cmV0dXJuIGU/YShyLmNlbGxzLHIucG9zaXRpb25zLC4yNSk6e2VkZ2VzOnIuY2VsbHMscG9zaXRpb25zOnIucG9zaXRpb25zfX1mdW5jdGlvbiBmKHQsZSxyLG4pe3ZhciBpPXUodCxuKSxhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ZS50ZXh0QWxpZ258fCJzdGFydCIsaT1lLnRleHRCYXNlbGluZXx8ImFscGhhYmV0aWMiLGE9WzE8PDMwLDE8PDMwXSxvPVswLDBdLHM9dC5sZW5ndGgsbD0wO2w8czsrK2wpZm9yKHZhciBjPXRbbF0sdT0wO3U8MjsrK3UpYVt1XT0wfE1hdGgubWluKGFbdV0sY1t1XSksb1t1XT0wfE1hdGgubWF4KG9bdV0sY1t1XSk7dmFyIGY9MDtzd2l0Y2gobil7Y2FzZSJjZW50ZXIiOmY9LS41KihhWzBdK29bMF0pO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjpmPS1vWzBdO2JyZWFrO2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6Zj0tYVswXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidmVjdG9yaXplLXRleHQ6IFVucmVjb2duaXplZCB0ZXh0QWxpZ246ICciK24rIiciKX12YXIgaD0wO3N3aXRjaChpKXtjYXNlImhhbmdpbmciOmNhc2UidG9wIjpoPS1hWzFdO2JyZWFrO2Nhc2UibWlkZGxlIjpoPS0uNSooYVsxXStvWzFdKTticmVhaztjYXNlImFscGhhYmV0aWMiOmNhc2UiaWRlb2dyYXBoaWMiOmg9LTMqcjticmVhaztjYXNlImJvdHRvbSI6aD0tb1sxXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidmVjdG9yaXplLXRleHQ6IFVucmVjb2dpbml6ZWQgdGV4dEJhc2VsaW5lOiAnIitpKyInIil9dmFyIHA9MS9yO3JldHVybiJsaW5lSGVpZ2h0ImluIGU/cCo9K2UubGluZUhlaWdodDoid2lkdGgiaW4gZT9wPWUud2lkdGgvKG9bMF0tYVswXSk6ImhlaWdodCJpbiBlJiYocD1lLmhlaWdodC8ob1sxXS1hWzFdKSksdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybltwKih0WzBdK2YpLHAqKHRbMV0raCldfSkpfShpLnBvc2l0aW9ucyxlLHIpLGM9aS5lZGdlcyxmPSJjY3ciPT09ZS5vcmllbnRhdGlvbjtpZihvKGEsYyksZS5wb2x5Z29uc3x8ZS5wb2x5Z29ufHxlLnBvbHlsaW5lKXtmb3IodmFyIGg9bChjLGEpLHA9bmV3IEFycmF5KGgubGVuZ3RoKSxkPTA7ZDxoLmxlbmd0aDsrK2Qpe2Zvcih2YXIgZz1oW2RdLG09bmV3IEFycmF5KGcubGVuZ3RoKSx2PTA7djxnLmxlbmd0aDsrK3Ype2Zvcih2YXIgeT1nW3ZdLHg9bmV3IEFycmF5KHkubGVuZ3RoKSxiPTA7Yjx5Lmxlbmd0aDsrK2IpeFtiXT1hW3lbYl1dLnNsaWNlKCk7ZiYmeC5yZXZlcnNlKCksbVt2XT14fXBbZF09bX1yZXR1cm4gcH1yZXR1cm4gZS50cmlhbmdsZXN8fGUudHJpYW5ndWxhdGV8fGUudHJpYW5nbGU/e2NlbGxzOnMoYSxjLHtkZWxhdW5heTohMSxleHRlcmlvcjohMSxpbnRlcmlvcjohMH0pLHBvc2l0aW9uczphfTp7ZWRnZXM6Yyxwb3NpdGlvbnM6YX19ZnVuY3Rpb24gaCh0LGUscil7dHJ5e3JldHVybiBmKHQsZSxyLCEwKX1jYXRjaCh0KXt9dHJ5e3JldHVybiBmKHQsZSxyLCExKX1jYXRjaCh0KXt9cmV0dXJuIGUucG9seWdvbnN8fGUucG9seWxpbmV8fGUucG9seWdvbj9bXTplLnRyaWFuZ2xlc3x8ZS50cmlhbmd1bGF0ZXx8ZS50cmlhbmdsZT97Y2VsbHM6W10scG9zaXRpb25zOltdfTp7ZWRnZXM6W10scG9zaXRpb25zOltdfX19LHtjZHQyZDoxMTIsImNsZWFuLXBzbGciOjEyMSxuZGFycmF5OjQ5NSwicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lIjo1MTQsInNpbXBsaWZ5LXBsYW5hci1ncmFwaCI6NTYyLCJzdXJmYWNlLW5ldHMiOjU3MH1dLDYwMjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtpZigidW5kZWZpbmVkIj09dHlwZW9mIHNlc3x8IXNlcy5va3x8c2VzLm9rKCkpeyJ1bmRlZmluZWQiIT10eXBlb2Ygc2VzJiYoc2VzLndlYWtNYXBQZXJtaXRIb3N0T2JqZWN0cz1nKTt2YXIgdD0hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcCl7dmFyIHI9V2Vha01hcDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL0ZpcmVmb3gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpO2Vsc2V7dmFyIG49bmV3IHIsaT1PYmplY3QuZnJlZXplKHt9KTtpZihuLnNldChpLDEpLDE9PT1uLmdldChpKSlyZXR1cm4gdm9pZChlLmV4cG9ydHM9V2Vha01hcCk7dD0hMH19T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxzPU9iamVjdC5pc0V4dGVuc2libGUsbD0id2Vha21hcDppZGVudDoiK01hdGgucmFuZG9tKCkrIl9fXyI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5KXt2YXIgYz1uZXcgQXJyYXlCdWZmZXIoMjUpLHU9bmV3IFVpbnQ4QXJyYXkoYyk7Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyh1KSxsPSJ3ZWFrbWFwOnJhbmQ6IitBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodSwoZnVuY3Rpb24odCl7cmV0dXJuKHQlMzYpLnRvU3RyaW5nKDM2KX0pKS5qb2luKCIiKSsiX19fIn1pZihvKE9iamVjdCwiZ2V0T3duUHJvcGVydHlOYW1lcyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBhKHQpLmZpbHRlcihtKX19KSwiZ2V0UHJvcGVydHlOYW1lcyJpbiBPYmplY3Qpe3ZhciBmPU9iamVjdC5nZXRQcm9wZXJ0eU5hbWVzO28oT2JqZWN0LCJnZXRQcm9wZXJ0eU5hbWVzIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGYodCkuZmlsdGVyKG0pfX0pfSFmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5mcmVlemU7byhPYmplY3QsImZyZWV6ZSIse3ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2KGUpLHQoZSl9fSk7dmFyIGU9T2JqZWN0LnNlYWw7byhPYmplY3QsInNlYWwiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdih0KSxlKHQpfX0pO3ZhciByPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztvKE9iamVjdCwicHJldmVudEV4dGVuc2lvbnMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdih0KSxyKHQpfX0pfSgpO3ZhciBoPSExLHA9MCxkPWZ1bmN0aW9uKCl7dGhpcyBpbnN0YW5jZW9mIGR8fHgoKTt2YXIgdD1bXSxlPVtdLHI9cCsrO3JldHVybiBPYmplY3QuY3JlYXRlKGQucHJvdG90eXBlLHtnZXRfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKG4saSl7dmFyIGEsbz12KG4pO3JldHVybiBvP3IgaW4gbz9vW3JdOmk6KGE9dC5pbmRleE9mKG4pKT49MD9lW2FdOml9KSl9LGhhc19fXzp7dmFsdWU6eSgoZnVuY3Rpb24oZSl7dmFyIG49dihlKTtyZXR1cm4gbj9yIGluIG46dC5pbmRleE9mKGUpPj0wfSkpfSxzZXRfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKG4saSl7dmFyIGEsbz12KG4pO3JldHVybiBvP29bcl09aTooYT10LmluZGV4T2YobikpPj0wP2VbYV09aTooYT10Lmxlbmd0aCxlW2FdPWksdFthXT1uKSx0aGlzfSkpfSxkZWxldGVfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKG4pe3ZhciBpLGEsbz12KG4pO3JldHVybiBvP3IgaW4gbyYmZGVsZXRlIG9bcl06ISgoaT10LmluZGV4T2YobikpPDApJiYoYT10Lmxlbmd0aC0xLHRbaV09dm9pZCAwLGVbaV09ZVthXSx0W2ldPXRbYV0sdC5sZW5ndGg9YSxlLmxlbmd0aD1hLCEwKX0pKX19KX07ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLHtnZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saGFzOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGRlbGV0ZTp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZXRlX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksImZ1bmN0aW9uIj09dHlwZW9mIHI/ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dGhpcyBpbnN0YW5jZW9mIGR8fHgoKTt2YXIgZSxuPW5ldyByLGk9dm9pZCAwLGE9ITE7cmV0dXJuIGU9dD9mdW5jdGlvbih0LGUpe3JldHVybiBuLnNldCh0LGUpLG4uaGFzKHQpfHwoaXx8KGk9bmV3IGQpLGkuc2V0KHQsZSkpLHRoaXN9OmZ1bmN0aW9uKHQsZSl7aWYoYSl0cnl7bi5zZXQodCxlKX1jYXRjaChyKXtpfHwoaT1uZXcgZCksaS5zZXRfX18odCxlKX1lbHNlIG4uc2V0KHQsZSk7cmV0dXJuIHRoaXN9LE9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6eSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gaT9uLmhhcyh0KT9uLmdldCh0KTppLmdldF9fXyh0LGUpOm4uZ2V0KHQsZSl9KSl9LGhhc19fXzp7dmFsdWU6eSgoZnVuY3Rpb24odCl7cmV0dXJuIG4uaGFzKHQpfHwhIWkmJmkuaGFzX19fKHQpfSkpfSxzZXRfX186e3ZhbHVlOnkoZSl9LGRlbGV0ZV9fXzp7dmFsdWU6eSgoZnVuY3Rpb24odCl7dmFyIGU9ISFuLmRlbGV0ZSh0KTtyZXR1cm4gaSYmaS5kZWxldGVfX18odCl8fGV9KSl9LHBlcm1pdEhvc3RPYmplY3RzX19fOnt2YWx1ZTp5KChmdW5jdGlvbih0KXtpZih0IT09Zyl0aHJvdyBuZXcgRXJyb3IoImJvZ3VzIGNhbGwgdG8gcGVybWl0SG9zdE9iamVjdHNfX18iKTthPSEwfSkpfX0pfXQmJiJ1bmRlZmluZWQiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLG4ucHJvdG90eXBlPWQucHJvdG90eXBlLGUuZXhwb3J0cz1uLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWFrTWFwLnByb3RvdHlwZSwiY29uc3RydWN0b3IiLHt2YWx1ZTpXZWFrTWFwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9KCk6KCJ1bmRlZmluZWQiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLGUuZXhwb3J0cz1kKX1mdW5jdGlvbiBnKHQpe3QucGVybWl0SG9zdE9iamVjdHNfX18mJnQucGVybWl0SG9zdE9iamVjdHNfX18oZyl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4hKCJ3ZWFrbWFwOiI9PXQuc3Vic3RyKDAsIndlYWttYXA6Ii5sZW5ndGgpJiYiX19fIj09PXQuc3Vic3RyKHQubGVuZ3RoLTMpKX1mdW5jdGlvbiB2KHQpe2lmKHQhPT1PYmplY3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiTm90IGFuIG9iamVjdDogIit0KTt2YXIgZT10W2xdO2lmKGUmJmUua2V5PT09dClyZXR1cm4gZTtpZihzKHQpKXtlPXtrZXk6dH07dHJ5e3JldHVybiBvKHQsbCx7dmFsdWU6ZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMX0pLGV9Y2F0Y2godCl7cmV0dXJufX19ZnVuY3Rpb24geSh0KXtyZXR1cm4gdC5wcm90b3R5cGU9bnVsbCxPYmplY3QuZnJlZXplKHQpfWZ1bmN0aW9uIHgoKXtofHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fChoPSEwLGNvbnNvbGUud2FybigiV2Vha01hcCBzaG91bGQgYmUgaW52b2tlZCBhcyBuZXcgV2Vha01hcCgpLCBub3QgV2Vha01hcCgpLiBUaGlzIHdpbGwgYmUgYW4gZXJyb3IgaW4gdGhlIGZ1dHVyZS4iKSl9fSgpfSx7fV0sNjAzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9oaWRkZW4tc3RvcmUuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIldlYWttYXAtc2hpbTogS2V5IG11c3QgYmUgb2JqZWN0Iik7dmFyIHI9ZS52YWx1ZU9mKHQpO3JldHVybiByJiZyLmlkZW50aXR5PT09dD9yOm4oZSx0KX19fSx7Ii4vaGlkZGVuLXN0b3JlLmpzIjo2MDR9XSw2MDQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17aWRlbnRpdHk6ZX0sbj10LnZhbHVlT2Y7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ2YWx1ZU9mIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnJ9LHdyaXRhYmxlOiEwfSkscn19LHt9XSw2MDU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2NyZWF0ZS1zdG9yZS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW4oKTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUscil7dmFyIG49dChlKTtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKT9uLnZhbHVlOnJ9LHNldDpmdW5jdGlvbihlLHIpe3JldHVybiB0KGUpLnZhbHVlPXIsdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiJ2YWx1ZSJpbiB0KGUpfSxkZWxldGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSB0KGUpLnZhbHVlfX19fSx7Ii4vY3JlYXRlLXN0b3JlLmpzIjo2MDN9XSw2MDY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnZXQtY2FudmFzLWNvbnRleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIndlYmdsIix0KX19LHsiZ2V0LWNhbnZhcy1jb250ZXh0IjoyNDl9XSw2MDc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOiJDaGluZXNlIixqZEVwb2NoOjE3MjE0MjUuNSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJDaGluZXNlIixlcG9jaHM6WyJCRUMiLCJFQyJdLG1vbnRoTnVtYmVyczpmdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9dC5tYXRjaChsKTtyZXR1cm4gcj9yWzBdOiIifXZhciBuPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxpPXQubW9udGgoKSxhPSIiK3RoaXMudG9DaGluZXNlTW9udGgobixpKTtyZXR1cm4gZSYmYS5sZW5ndGg8MiYmKGE9IjAiK2EpLHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKG4saSkmJihhKz0iaSIpLGF9LG1vbnRoTmFtZXM6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKGMpO3JldHVybiBlP2VbMF06IiJ9dmFyIHI9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLG49dC5tb250aCgpLGk9WyJcdTRlMDBcdTY3MDgiLCJcdTRlOGNcdTY3MDgiLCJcdTRlMDlcdTY3MDgiLCJcdTU2ZGJcdTY3MDgiLCJcdTRlOTRcdTY3MDgiLCJcdTUxNmRcdTY3MDgiLCJcdTRlMDNcdTY3MDgiLCJcdTUxNmJcdTY3MDgiLCJcdTRlNWRcdTY3MDgiLCJcdTUzNDFcdTY3MDgiLCJcdTUzNDFcdTRlMDBcdTY3MDgiLCJcdTUzNDFcdTRlOGNcdTY3MDgiXVt0aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihpPSJcdTk1ZjAiK2kpLGl9LG1vbnRoTmFtZXNTaG9ydDpmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPXQubWF0Y2godSk7cmV0dXJuIGU/ZVswXToiIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT1bIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdW3RoaXMudG9DaGluZXNlTW9udGgocixuKS0xXTtyZXR1cm4gdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgocixuKSYmKGk9Ilx1OTVmMCIraSksaX0scGFyc2VNb250aDpmdW5jdGlvbih0LGUpe3Q9dGhpcy5fdmFsaWRhdGVZZWFyKHQpO3ZhciByLG49cGFyc2VJbnQoZSk7aWYoaXNOYU4obikpIlx1OTVmMCI9PT1lWzBdJiYocj0hMCxlPWUuc3Vic3RyaW5nKDEpKSwiXHU2NzA4Ij09PWVbZS5sZW5ndGgtMV0mJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMSkpLG49MStbIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdLmluZGV4T2YoZSk7ZWxzZXt2YXIgaT1lW2UubGVuZ3RoLTFdO3I9ImkiPT09aXx8IkkiPT09aX1yZXR1cm4gdGhpcy50b01vbnRoSW5kZXgodCxuLHIpfSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sX3ZhbGlkYXRlWWVhcjpmdW5jdGlvbih0LGUpe2lmKHQueWVhciYmKHQ9dC55ZWFyKCkpLCJudW1iZXIiIT10eXBlb2YgdHx8dDwxODg4fHx0PjIxMTEpdGhyb3cgZS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gdH0sdG9Nb250aEluZGV4OmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmludGVyY2FsYXJ5TW9udGgodCk7aWYociYmZSE9PWl8fGU8MXx8ZT4xMil0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gaT8hciYmZTw9aT9lLTE6ZTplLTF9LHRvQ2hpbmVzZU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKGU8MHx8ZT4ocj8xMjoxMSkpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHI/ZTxyP2UrMTplOmUrMX0saW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZVllYXIodCksZlt0LWZbMF1dPj4xM30saXNJbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO3JldHVybiEhciYmcj09PWV9LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXRoaXMuX3ZhbGlkYXRlWWVhcih0LG4ubG9jYWwuaW52YWxpZHllYXIpLHM9aFtvLWhbMF1dLGw9cz4+OSY0MDk1LGM9cz4+NSYxNSx1PTMxJnM7KGk9YS5uZXdEYXRlKGwsYyx1KSkuYWRkKDQtKGkuZGF5T2ZXZWVrKCl8fDcpLCJkIik7dmFyIGY9dGhpcy50b0pEKHQsZSxyKS1pLnRvSkQoKTtyZXR1cm4gMStNYXRoLmZsb29yKGYvNyl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8xMzoxMn0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcj1mW3QtZlswXV07aWYoZT4ocj4+MTM/MTI6MTEpKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByJjE8PDEyLWU/MzA6Mjl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQscyxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9dGhpcy5fdmFsaWRhdGVZZWFyKGkueWVhcigpKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIG89dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgodCxlKSxzPXRoaXMudG9DaGluZXNlTW9udGgodCxlKSxsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzO2lmKCJvYmplY3QiPT10eXBlb2YgdClvPXQsYT1lfHx7fTtlbHNle3ZhciBsO2lmKCEoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTtpZighKCJudW1iZXIiPT10eXBlb2YgZSYmZT49MSYmZTw9MTIpKXRocm93IG5ldyBFcnJvcigiTHVuYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTtpZighKCJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzApKXRocm93IG5ldyBFcnJvcigiTHVuYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMwIik7Im9iamVjdCI9PXR5cGVvZiBuPyhsPSExLGE9bik6KGw9ISFuLGE9aXx8e30pLG89e3llYXI6dCxtb250aDplLGRheTpyLGlzSW50ZXJjYWxhcnk6bH19cz1vLmRheS0xO3ZhciBjLHU9ZltvLnllYXItZlswXV0scD11Pj4xMztjPXAmJihvLm1vbnRoPnB8fG8uaXNJbnRlcmNhbGFyeSk/by5tb250aDpvLm1vbnRoLTE7Zm9yKHZhciBkPTA7ZDxjO2QrKyl7cys9dSYxPDwxMi1kPzMwOjI5fXZhciBnPWhbby55ZWFyLWhbMF1dLG09bmV3IERhdGUoZz4+OSY0MDk1LChnPj41JjE1KS0xLCgzMSZnKStzKTtyZXR1cm4gYS55ZWFyPW0uZ2V0RnVsbFllYXIoKSxhLm1vbnRoPTErbS5nZXRNb250aCgpLGEuZGF5PW0uZ2V0RGF0ZSgpLGF9KHQscyxyLG8pO3JldHVybiBhLnRvSkQobC55ZWFyLGwubW9udGgsbC5kYXkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9YS5mcm9tSkQodCkscj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhO2lmKCJvYmplY3QiPT10eXBlb2YgdClpPXQsYT1lfHx7fTtlbHNle2lmKCEoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExKSl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTtpZighKCJudW1iZXIiPT10eXBlb2YgZSYmZT49MSYmZTw9MTIpKXRocm93IG5ldyBFcnJvcigiU29sYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTtpZighKCJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzEpKXRocm93IG5ldyBFcnJvcigiU29sYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMxIik7aT17eWVhcjp0LG1vbnRoOmUsZGF5OnJ9LGE9bnx8e319dmFyIG89aFtpLnllYXItaFswXV0scz1pLnllYXI8PDl8aS5tb250aDw8NXxpLmRheTthLnllYXI9cz49bz9pLnllYXI6aS55ZWFyLTEsbz1oW2EueWVhci1oWzBdXTt2YXIgbCxjPW5ldyBEYXRlKG8+PjkmNDA5NSwobz4+NSYxNSktMSwzMSZvKSx1PW5ldyBEYXRlKGkueWVhcixpLm1vbnRoLTEsaS5kYXkpO2w9TWF0aC5yb3VuZCgodS1jKS84NjRlNSk7dmFyIHAsZD1mW2EueWVhci1mWzBdXTtmb3IocD0wO3A8MTM7cCsrKXt2YXIgZz1kJjE8PDEyLXA/MzA6Mjk7aWYobDxnKWJyZWFrO2wtPWd9dmFyIG09ZD4+MTM7IW18fHA8bT8oYS5pc0ludGVyY2FsYXJ5PSExLGEubW9udGg9MStwKTpwPT09bT8oYS5pc0ludGVyY2FsYXJ5PSEwLGEubW9udGg9cCk6KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPXApO3JldHVybiBhLmRheT0xK2wsYX0oZS55ZWFyKCksZS5tb250aCgpLGUuZGF5KCkpLG49dGhpcy50b01vbnRoSW5kZXgoci55ZWFyLHIubW9udGgsci5pc0ludGVyY2FsYXJ5KTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIueWVhcixuLHIuZGF5KX0sZnJvbVN0cmluZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKHMpLHI9dGhpcy5fdmFsaWRhdGVZZWFyKCtlWzFdKSxuPStlWzJdLGk9ISFlWzNdLGE9dGhpcy50b01vbnRoSW5kZXgocixuLGkpLG89K2VbNF07cmV0dXJuIHRoaXMubmV3RGF0ZShyLGEsbyl9LGFkZDpmdW5jdGlvbih0LGUscil7dmFyIG49dC55ZWFyKCksaT10Lm1vbnRoKCksYT10aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGkpLHM9dGhpcy50b0NoaW5lc2VNb250aChuLGkpLGw9T2JqZWN0LmdldFByb3RvdHlwZU9mKG8ucHJvdG90eXBlKS5hZGQuY2FsbCh0aGlzLHQsZSxyKTtpZigieSI9PT1yKXt2YXIgYz1sLnllYXIoKSx1PWwubW9udGgoKSxmPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKGMscyksaD1hJiZmP3RoaXMudG9Nb250aEluZGV4KGMscywhMCk6dGhpcy50b01vbnRoSW5kZXgoYyxzLCExKTtoIT09dSYmbC5tb250aChoKX1yZXR1cm4gbH19KTt2YXIgcz0vXlxzKigtP1xkXGRcZFxkfFxkXGQpWy0vXShcZD9cZCkoW2lJXT8pWy0vXShcZD9cZCkvbSxsPS9eXGQ/XGRbaUldPy9tLGM9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdP1x1NjcwOC9tLHU9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdPy9tO24uY2FsZW5kYXJzLmNoaW5lc2U9bzt2YXIgZj1bMTg4Nyw1NzgwLDU4MDIsMTkxNTcsMjc0Miw1MDM1OSwxMTk4LDI2NDYsNDYzNzgsNzQ2NiwzNDEyLDMwMTIyLDU0ODIsNjc5NDksMjM5Niw1Mjk0LDQzNTk3LDY3MzIsNjk1NCwzNjE4MSwyNzcyLDQ5NTQsMTg3ODEsMjM5Niw1NDQyNyw1Mjc0LDY3MzAsNDc3ODEsNTgwMCw2ODY4LDIxMjEwLDQ3OTAsNTk3MDMsMjM1MCw1MjcwLDQ2NjY3LDM0MDIsMzQ5NiwzODMyNSwxMzg4LDQ3ODIsMTg3MzUsMjM1MCw1MjM3NCw2ODA0LDc0OTgsNDQ0NTcsMjkwNiwxMzg4LDI5Mjk0LDQ3MDAsNjM3ODksNjQ0Miw2ODA0LDU2MTM4LDU4MDIsMjc3MiwzODIzNSwxMjEwLDQ2OTgsMjI4MjcsNTQxOCw2MzEyNSwzNDc2LDU4MDIsNDM3MDEsMjQ4NCw1MzAyLDI3MjIzLDI2NDYsNzA5NTQsNzQ2NiwzNDEyLDU0Njk4LDU0ODIsMjQxMiwzODA2Miw1Mjk0LDI2MzYsMzIwMzgsNjk1NCw2MDI0NSwyNzcyLDQ4MjYsNDMzNTcsMjM5NCw1Mjc0LDM5NTAxLDY3MzAsNzIzNTcsNTgwMCw1ODQ0LDUzOTc4LDQ3OTAsMjM1OCwzODAzOSw1MjcwLDg3NjI3LDM0MDIsMzQ5Niw1NDcwOCw1NDg0LDQ3ODIsNDMzMTEsMjM1MCwzMjIyLDI3OTc4LDc0OTgsNjg5NjUsMjkwNCw1NDg0LDQ1Njc3LDQ3MDAsNjQ0NCwzOTU3Myw2ODA0LDY5ODYsMTkyODUsMjc3Miw2MjgxMSwxMjEwLDQ2OTgsNDc0MDMsNTQxOCw1NzgwLDM4NTcwLDU1NDYsNzY0NjksMjQyMCw1MzAyLDUxNzk5LDI2NDYsNTQxNCwzNjUwMSwzNDEyLDU1NDYsMTg4NjksMjQxMiw1NDQ0Niw1Mjc2LDY3MzIsNDg0MjIsNjgyMiwyOTAwLDI4MDEwLDQ4MjYsOTI1MDksMjM5NCw1Mjc0LDU1ODgzLDY3MzAsNjgyMCw0Nzk1Niw1ODEyLDI3NzgsMTg3NzksMjM1OCw2MjYxNSw1MjcwLDU0NTAsNDY3NTcsMzQ5Miw1NTU2LDI3MzE4LDQ3MTgsNjc4ODcsMjM1MCwzMjIyLDUyNTU0LDc0OTgsMzQyOCwzODI1Miw1NDY4LDQ3MDAsMzEwMjIsNjQ0NCw2NDE0OSw2ODA0LDY5ODYsNDM4NjEsMjc3Miw1MzM4LDM1NDIxLDI2NTAsNzA5NTUsNTQxOCw1NzgwLDU0OTU0LDU1NDYsMjc0MCwzODA3NCw1MzAyLDI2NDYsMjk5OTEsMzM2Niw2MTAxMSwzNDEyLDU1NDYsNDM0NDUsMjQxMiw1Mjk0LDM1NDA2LDY3MzIsNzI5OTgsNjgyMCw2OTk2LDUyNTg2LDI3NzgsMjM5NiwzODA0NSw1Mjc0LDY2OTgsMjMzMzMsNjgyMCw2NDMzOCw1ODEyLDI3NDYsNDMzNTUsMjM1OCw1MjcwLDM5NDk5LDU0NTAsNzk1MjUsMzQ5Miw1NTQ4XSxoPVsxODg3LDk2NjczMiw5NjcyMzEsOTY3NzMzLDk2ODI2NSw5Njg3NjYsOTY5Mjk3LDk2OTc5OCw5NzAyOTgsOTcwODI5LDk3MTMzMCw5NzE4MzAsOTcyMzYyLDk3Mjg2Myw5NzMzOTUsOTczODk2LDk3NDM5Nyw5NzQ5MjgsOTc1NDI4LDk3NTkyOSw5NzY0NjEsOTc2OTYyLDk3NzQ2Miw5Nzc5OTQsOTc4NDk0LDk3OTAyNiw5Nzk1MjYsOTgwMDI2LDk4MDU1OCw5ODEwNTksOTgxNTU5LDk4MjA5MSw5ODI1OTMsOTgzMTI0LDk4MzYyNCw5ODQxMjQsOTg0NjU2LDk4NTE1Nyw5ODU2NTYsOTg2MTg5LDk4NjY5MCw5ODcxOTEsOTg3NzIyLDk4ODIyMiw5ODg3NTMsOTg5MjU0LDk4OTc1NCw5OTAyODYsOTkwNzg4LDk5MTI4OCw5OTE4MTksOTkyMzE5LDk5Mjg1MSw5OTMzNTIsOTkzODUxLDk5NDM4Myw5OTQ4ODUsOTk1Mzg1LDk5NTkxNyw5OTY0MTgsOTk2OTE4LDk5NzQ1MCw5OTc5NDksOTk4NDgxLDk5ODk4Miw5OTk0ODMsMTAwMDAxNCwxMDAwNTE1LDEwMDEwMTYsMTAwMTU0OCwxMDAyMDQ3LDEwMDI1NzgsMTAwMzA4MCwxMDAzNTgwLDEwMDQxMTEsMTAwNDYxMywxMDA1MTEzLDEwMDU2NDUsMTAwNjE0NiwxMDA2NjQ1LDEwMDcxNzcsMTAwNzY3OCwxMDA4MjA5LDEwMDg3MTAsMTAwOTIxMSwxMDA5NzQzLDEwMTAyNDMsMTAxMDc0MywxMDExMjc1LDEwMTE3NzUsMTAxMjMwNiwxMDEyODA3LDEwMTMzMDgsMTAxMzg0MCwxMDE0MzQxLDEwMTQ4NDEsMTAxNTM3MywxMDE1ODc0LDEwMTY0MDQsMTAxNjkwNSwxMDE3NDA1LDEwMTc5MzcsMTAxODQzOCwxMDE4OTM5LDEwMTk0NzEsMTAxOTk3MiwxMDIwNDcxLDEwMjEwMDIsMTAyMTUwMywxMDIyMDM1LDEwMjI1MzUsMTAyMzAzNiwxMDIzNTY4LDEwMjQwNjksMTAyNDU2OCwxMDI1MTAwLDEwMjU2MDEsMTAyNjEwMiwxMDI2NjMzLDEwMjcxMzMsMTAyNzY2NiwxMDI4MTY3LDEwMjg2NjYsMTAyOTE5OCwxMDI5Njk5LDEwMzAxOTksMTAzMDczMCwxMDMxMjMxLDEwMzE3NjMsMTAzMjI2NCwxMDMyNzY0LDEwMzMyOTYsMTAzMzc5NywxMDM0Mjk3LDEwMzQ4MjgsMTAzNTMyOSwxMDM1ODMwLDEwMzYzNjIsMTAzNjg2MSwxMDM3MzkzLDEwMzc4OTQsMTAzODM5NCwxMDM4OTI1LDEwMzk0MjcsMTAzOTkyNywxMDQwNDU5LDEwNDA5NTksMTA0MTQ5MSwxMDQxOTkyLDEwNDI0OTIsMTA0MzAyMywxMDQzNTI0LDEwNDQwMjQsMTA0NDU1NiwxMDQ1MDU3LDEwNDU1NTgsMTA0NjA5MCwxMDQ2NTkwLDEwNDcxMjEsMTA0NzYyMiwxMDQ4MTIyLDEwNDg2NTQsMTA0OTE1NCwxMDQ5NjU1LDEwNTAxODcsMTA1MDY4OSwxMDUxMjE5LDEwNTE3MjAsMTA1MjIyMCwxMDUyNzUxLDEwNTMyNTIsMTA1Mzc1MiwxMDU0Mjg0LDEwNTQ3ODYsMTA1NTI4NSwxMDU1ODE3LDEwNTYzMTcsMTA1Njg0OSwxMDU3MzQ5LDEwNTc4NTAsMTA1ODM4MiwxMDU4ODgzLDEwNTkzODMsMTA1OTkxNSwxMDYwNDE1LDEwNjA5NDcsMTA2MTQ0NywxMDYxOTQ3LDEwNjI0NzksMTA2Mjk4MSwxMDYzNDgwLDEwNjQwMTIsMTA2NDUxNCwxMDY1MDE0LDEwNjU1NDUsMTA2NjA0NSwxMDY2NTc3LDEwNjcwNzgsMTA2NzU3OCwxMDY4MTEwLDEwNjg2MTEsMTA2OTExMiwxMDY5NjQyLDEwNzAxNDIsMTA3MDY3NCwxMDcxMTc1LDEwNzE2NzUsMTA3MjIwNywxMDcyNzA5LDEwNzMyMDksMTA3Mzc0MCwxMDc0MjQxLDEwNzQ3NDEsMTA3NTI3MywxMDc1NzczLDEwNzYzMDUsMTA3NjgwNywxMDc3MzA4LDEwNzc4MzksMTA3ODM0MCwxMDc4ODQwLDEwNzkzNzIsMTA3OTg3MSwxMDgwNDAzLDEwODA5MDRdfSx7Ii4uL21haW4iOjYyMSwib2JqZWN0LWFzc2lnbiI6NDk5fV0sNjA4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiQ29wdGljIixqZEVwb2NoOjE4MjUwMjkuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkNvcHRpYyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiVGhvdXQiLCJQYW9waSIsIkhhdGhvciIsIktvaWFrIiwiVG9iaSIsIk1lc2hpciIsIlBhcmVtaGF0IiwiUGFyZW1vdWRlIiwiUGFzaG9ucyIsIlBhb25pIiwiRXBpcCIsIk1lc29yaSIsIlBpIEtvZ2kgRW5hdm90Il0sbW9udGhOYW1lc1Nob3J0OlsiVGhvIiwiUGFvIiwiSGF0aCIsIktvaSIsIlRvYiIsIk1lc2giLCJQYXQiLCJQYWQiLCJQYXNoIiwiUGFvIiwiRXBpIiwiTWVzbyIsIlBpSyJdLGRheU5hbWVzOlsiVGt5cmlha2EiLCJQZXNuYXUiLCJQc2hvbWVudCIsIlBlZnRvb3UiLCJQdGlvdSIsIlBzb291IiwiUHNhYmJhdG9uIl0sZGF5TmFtZXNTaG9ydDpbIlRreSIsIlBlcyIsIlBzaCIsIlBlZiIsIlB0aSIsIlBzbyIsIlBzYSJdLGRheU5hbWVzTWluOlsiVGsiLCJQZXMiLCJQc2giLCJQZWYiLCJQdCIsIlBzbyIsIlBzYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKSklND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcnx8bi5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKHQ9aS55ZWFyKCkpPDAmJnQrKyxpLmRheSgpKzMwKihpLm1vbnRoKCktMSkrMzY1Kih0LTEpK01hdGguZmxvb3IodC80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigoZS1NYXRoLmZsb29yKChlKzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sZT1NYXRoLmZsb29yKHQpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IoZS8zMCkrMSxpPWUtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixpKX19KSxuLmNhbGVuZGFycy5jb3B0aWM9YX0seyIuLi9tYWluIjo2MjEsIm9iamVjdC1hc3NpZ24iOjQ5OX1dLDYwOTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IkRpc2N3b3JsZCIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlsxNiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiRGlzY3dvcmxkIixlcG9jaHM6WyJCVUMiLCJVQyJdLG1vbnRoTmFtZXM6WyJJY2siLCJPZmZsZSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJHcnVuZSIsIkF1Z3VzdCIsIlNwdW5lIiwiU2VrdG9iZXIiLCJFbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSWNrIiwiT2ZmIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiR3J1IiwiQXVnIiwiU3B1IiwiU2VrIiwiRW1iIiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJPY3RlZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiT2N0IiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk9jIiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Mixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksITF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDEzfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksNDAwfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvOCkrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV19LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gOH0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCkrMSklOH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5kYXlPZldlZWsodCxlLHIpO3JldHVybiBuPj0yJiZuPD02fSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybntjZW50dXJ5Om9bTWF0aC5mbG9vcigoaS55ZWFyKCktMSkvMTAwKSsxXXx8IiJ9fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSsoaS55ZWFyKCk8MD8xOjApLGU9aS5tb250aCgpLChyPWkuZGF5KCkpKyhlPjE/MTY6MCkrKGU+Mj8zMiooZS0yKTowKSs0MDAqKHQtMSkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSktTWF0aC5mbG9vcih0aGlzLmpkRXBvY2gpLTE7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCkrMTt0LT00MDAqKGUtMSksdCs9dD4xNT8xNjowO3ZhciByPU1hdGguZmxvb3IodC8zMikrMSxuPXQtMzIqKHItMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGU8PTA/ZS0xOmUscixuKX19KTt2YXIgbz17MjA6IkZydWl0YmF0IiwyMToiQW5jaG92eSJ9O24uY2FsZW5kYXJzLmRpc2N3b3JsZD1hfSx7Ii4uL21haW4iOjYyMSwib2JqZWN0LWFzc2lnbiI6NDk5fV0sNjEwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiRXRoaW9waWFuIixqZEVwb2NoOjE3MjQyMjAuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkV0aGlvcGlhbiIsZXBvY2hzOlsiQkVFIiwiRUUiXSxtb250aE5hbWVzOlsiTWVza2VyZW0iLCJUaWtlbWV0IiwiSGlkYXIiLCJUYWhlc2FzIiwiVGlyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc2UiLCJQYWd1bWUiXSxtb250aE5hbWVzU2hvcnQ6WyJNZXMiLCJUaWsiLCJIaWQiLCJUYWgiLCJUaXIiLCJZZWsiLCJNZWciLCJNaWEiLCJHZW4iLCJTZW4iLCJIYW0iLCJOZWgiLCJQYWciXSxkYXlOYW1lczpbIkVodWQiLCJTZWdubyIsIk1ha3NlZ25vIiwiSXJvYiIsIkhhbXVzIiwiQXJiIiwiS2lkYW1lIl0sZGF5TmFtZXNTaG9ydDpbIkVodSIsIlNlZyIsIk1hayIsIklybyIsIkhhbSIsIkFyYiIsIktpZCJdLGRheU5hbWVzTWluOlsiRWgiLCJTZSIsIk1hIiwiSXIiLCJIYSIsIkFyIiwiS2kiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTM9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybih0PWkueWVhcigpKTwwJiZ0KyssaS5kYXkoKSszMCooaS5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksbi5jYWxlbmRhcnMuZXRoaW9waWFuPWF9LHsiLi4vbWFpbiI6NjIxLCJvYmplY3QtYXNzaWduIjo0OTl9XSw2MTE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC1lKk1hdGguZmxvb3IodC9lKX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiSGVicmV3IixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkhlYnJldyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW1tdXoiLCJBdiIsIkVsdWwiLCJUaXNocmVpIiwiQ2hlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIiLCJBZGFyIElJIl0sbW9udGhOYW1lc1Nob3J0OlsiTmlzIiwiSXlhIiwiU2l2IiwiVGFtIiwiQXYiLCJFbHUiLCJUaXMiLCJDaGUiLCJLaXMiLCJUZXYiLCJTaGUiLCJBZGEiLCJBZDIiXSxkYXlOYW1lczpbIllvbSBSaXNob24iLCJZb20gU2hlbmkiLCJZb20gU2hsaXNoaSIsIllvbSBSZXZpJ2kiLCJZb20gQ2hhbWlzaGkiLCJZb20gU2hpc2hpIiwiWW9tIFNoYWJiYXQiXSxkYXlOYW1lc1Nob3J0OlsiUmlzIiwiU2hlIiwiU2hsIiwiUmV2IiwiQ2hhIiwiU2hpIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJSaSIsIlNoZSIsIlNobCIsIlJlIiwiQ2giLCJTaGkiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcihlLnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbyg3Kih0PXQ8MD90KzE6dCkrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIodC55ZWFyP3QueWVhcigpOnQpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHRoaXMudG9KRCgtMT09PXQ/MTp0KzEsNywxKS10aGlzLnRvSkQodCw3LDEpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDEyPT09ZSYmdGhpcy5sZWFwWWVhcih0KXx8OD09PWUmJjU9PT1vKHRoaXMuZGF5c0luWWVhcih0KSwxMCk/MzA6OT09PWUmJjM9PT1vKHRoaXMuZGF5c0luWWVhcih0KSwxMCk/Mjk6dGhpcy5kYXlzUGVyTW9udGhbZS0xXX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDYhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJue3llYXJUeXBlOih0aGlzLmxlYXBZZWFyKGkpPyJlbWJvbGlzbWljIjoiY29tbW9uIikrIiAiK1siZGVmaWNpZW50IiwicmVndWxhciIsImNvbXBsZXRlIl1bdGhpcy5kYXlzSW5ZZWFyKGkpJTEwLTNdfX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dDw9MD90KzE6dCxvPXRoaXMuamRFcG9jaCt0aGlzLl9kZWxheTEoYSkrdGhpcy5fZGVsYXkyKGEpK3IrMTtpZihlPDcpe2Zvcih2YXIgcz03O3M8PXRoaXMubW9udGhzSW5ZZWFyKHQpO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyk7Zm9yKHM9MTtzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKX1lbHNlIGZvcihzPTc7czxlO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyk7cmV0dXJuIG99LF9kZWxheTE6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcigoMjM1KnQtMjM0KS8xOSkscj0xMjA4NCsxMzc1MyplLG49MjkqZStNYXRoLmZsb29yKHIvMjU5MjApO3JldHVybiBvKDMqKG4rMSksNyk8MyYmbisrLG59LF9kZWxheTI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZGVsYXkxKHQtMSkscj10aGlzLl9kZWxheTEodCk7cmV0dXJuIHRoaXMuX2RlbGF5MSh0KzEpLXI9PTM1Nj8yOnItZT09MzgyPzE6MH0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNTtmb3IodmFyIGU9TWF0aC5mbG9vcig5ODQ5NioodC10aGlzLmpkRXBvY2gpLzM1OTc1MzUxKS0xO3Q+PXRoaXMudG9KRCgtMT09PWU/MTplKzEsNywxKTspZSsrO2Zvcih2YXIgcj10PHRoaXMudG9KRChlLDEsMSk/NzoxO3Q+dGhpcy50b0pEKGUscix0aGlzLmRheXNJbk1vbnRoKGUscikpOylyKys7dmFyIG49dC10aGlzLnRvSkQoZSxyLDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMuaGVicmV3PWF9LHsiLi4vbWFpbiI6NjIxLCJvYmplY3QtYXNzaWduIjo0OTl9XSw2MTI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJJc2xhbWljIixqZEVwb2NoOjE5NDg0MzkuNSxkYXlzUGVyTW9udGg6WzMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJJc2xhbWljIixlcG9jaHM6WyJCSCIsIkFIIl0sbW9udGhOYW1lczpbIk11aGFycmFtIiwiU2FmYXIiLCJSYWJpJyBhbC1hd3dhbCIsIlJhYmknIGFsLXRoYW5pIiwiSnVtYWRhIGFsLWF3d2FsIiwiSnVtYWRhIGFsLXRoYW5pIiwiUmFqYWIiLCJTaGEnYWJhbiIsIlJhbWFkYW4iLCJTaGF3d2FsIiwiRGh1IGFsLVFpJ2RhaCIsIkRodSBhbC1IaWpqYWgiXSxtb250aE5hbWVzU2hvcnQ6WyJNdWgiLCJTYWYiLCJSYWIxIiwiUmFiMiIsIkp1bTEiLCJKdW0yIiwiUmFqIiwiU2hhJyIsIlJhbSIsIlNoYXciLCJEaHVRIiwiRGh1SCJdLGRheU5hbWVzOlsiWWF3bSBhbC1haGFkIiwiWWF3bSBhbC1pdGhuYXluIiwiWWF3bSBhdGgtdGh1bGFhdGhhYSciLCJZYXdtIGFsLWFyYmknYWEnIiwiWWF3bSBhbC1raGFtXHUwMTJicyIsIllhd20gYWwtanVtJ2EiLCJZYXdtIGFzLXNhYnQiXSxkYXlOYW1lc1Nob3J0OlsiQWhhIiwiSXRoIiwiVGh1IiwiQXJiIiwiS2hhIiwiSnVtIiwiU2FiIl0sZGF5TmFtZXNNaW46WyJBaCIsIkl0IiwiVGgiLCJBciIsIktoIiwiSnUiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjYsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4oMTEqdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKSsxNCklMzA8MTF9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlYXBZZWFyKHQpPzM1NTozNTR9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpLGU9aS5tb250aCgpLHQ9dDw9MD90KzE6dCwocj1pLmRheSgpKStNYXRoLmNlaWwoMjkuNSooZS0xKSkrMzU0Kih0LTEpK01hdGguZmxvb3IoKDMrMTEqdCkvMzApK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41O3ZhciBlPU1hdGguZmxvb3IoKDMwKih0LXRoaXMuamRFcG9jaCkrMTA2NDYpLzEwNjMxKTtlPWU8PTA/ZS0xOmU7dmFyIHI9TWF0aC5taW4oMTIsTWF0aC5jZWlsKCh0LTI5LXRoaXMudG9KRChlLDEsMSkpLzI5LjUpKzEpLG49dC10aGlzLnRvSkQoZSxyLDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMuaXNsYW1pYz1hfSx7Ii4uL21haW4iOjYyMSwib2JqZWN0LWFzc2lnbiI6NDk5fV0sNjEzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiSnVsaWFuIixqZEVwb2NoOjE3MjE0MjMuNSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJKdWxpYW4iLGVwb2NoczpbIkJDIiwiQUQiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJtbS9kZC95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpPDA/ZS55ZWFyKCkrMTplLnllYXIoKSklND09MH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCksdDwwJiZ0KyssZTw9MiYmKHQtLSxlKz0xMiksTWF0aC5mbG9vcigzNjUuMjUqKHQrNDcxNikpK01hdGguZmxvb3IoMzAuNjAwMSooZSsxKSkrci0xNTI0LjV9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQrLjUpKzE1MjQscj1NYXRoLmZsb29yKChlLTEyMi4xKS8zNjUuMjUpLG49TWF0aC5mbG9vcigzNjUuMjUqciksaT1NYXRoLmZsb29yKChlLW4pLzMwLjYwMDEpLGE9aS1NYXRoLmZsb29yKGk8MTQ/MToxMyksbz1yLU1hdGguZmxvb3IoYT4yPzQ3MTY6NDcxNSkscz1lLW4tTWF0aC5mbG9vcigzMC42MDAxKmkpO3JldHVybiBvPD0wJiZvLS0sdGhpcy5uZXdEYXRlKG8sYSxzKX19KSxuLmNhbGVuZGFycy5qdWxpYW49YX0seyIuLi9tYWluIjo2MjEsIm9iamVjdC1hc3NpZ24iOjQ5OX1dLDYxNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbyh0LTEsZSkrMX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiTWF5YW4iLGpkRXBvY2g6NTg0MjgyLjUsaGFzWWVhclplcm86ITAsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjAscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiTWF5YW4iLGVwb2NoczpbIiIsIiJdLG1vbnRoTmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyJdLG1vbnRoTmFtZXNTaG9ydDpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3Il0sZGF5TmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkYXlOYW1lc1Nob3J0OlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5Il0sZGF5TmFtZXNNaW46WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJZWVlZLm0uZCIsZmlyc3REYXk6MCxpc1JUTDohMSxoYWFiTW9udGhzOlsiUG9wIiwiVW8iLCJaaXAiLCJab3R6IiwiVHplYyIsIlh1bCIsIllheGtpbiIsIk1vbCIsIkNoZW4iLCJZYXgiLCJaYWMiLCJDZWgiLCJNYWMiLCJLYW5raW4iLCJNdWFuIiwiUGF4IiwiS2F5YWIiLCJDdW1rdSIsIlVheWViIl0sdHpvbGtpbk1vbnRoczpbIkltaXgiLCJJayIsIkFrYmFsIiwiS2FuIiwiQ2hpY2NoYW4iLCJDaW1pIiwiTWFuaWsiLCJMYW1hdCIsIk11bHVjIiwiT2MiLCJDaHVlbiIsIkViIiwiQmVuIiwiSXgiLCJNZW4iLCJDaWIiLCJDYWJhbiIsIkV0em5hYiIsIkNhdWFjIiwiQWhhdSJdfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwhMX0sZm9ybWF0WWVhcjpmdW5jdGlvbih0KXt0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCk7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCk7cmV0dXJuIHQlPTQwMCx0Kz10PDA/NDAwOjAsZSsiLiIrTWF0aC5mbG9vcih0LzIwKSsiLiIrdCUyMH0sZm9yWWVhcjpmdW5jdGlvbih0KXtpZigodD10LnNwbGl0KCIuIikpLmxlbmd0aDwzKXRocm93IkludmFsaWQgTWF5YW4geWVhciI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1wYXJzZUludCh0W3JdLDEwKTtpZihNYXRoLmFicyhuKT4xOXx8cj4wJiZuPDApdGhyb3ciSW52YWxpZCBNYXlhbiB5ZWFyIjtlPTIwKmUrbn1yZXR1cm4gZX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMTh9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSwwfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMzYwfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDIwfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDV9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLmRheSgpfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksITB9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkudG9KRCgpLGE9dGhpcy5fdG9IYWFiKGkpLG89dGhpcy5fdG9Uem9sa2luKGkpO3JldHVybntoYWFiTW9udGhOYW1lOnRoaXMubG9jYWwuaGFhYk1vbnRoc1thWzBdLTFdLGhhYWJNb250aDphWzBdLGhhYWJEYXk6YVsxXSx0em9sa2luRGF5TmFtZTp0aGlzLmxvY2FsLnR6b2xraW5Nb250aHNbb1swXS0xXSx0em9sa2luRGF5Om9bMF0sdHpvbGtpblRyZWNlbmE6b1sxXX19LF90b0hhYWI6ZnVuY3Rpb24odCl7dmFyIGU9bygodC09dGhpcy5qZEVwb2NoKSs4KzM0MCwzNjUpO3JldHVybltNYXRoLmZsb29yKGUvMjApKzEsbyhlLDIwKV19LF90b1R6b2xraW46ZnVuY3Rpb24odCl7cmV0dXJuW3MoKHQtPXRoaXMuamRFcG9jaCkrMjAsMjApLHModCs0LDEzKV19LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiBpLmRheSgpKzIwKmkubW9udGgoKSszNjAqaS55ZWFyKCkrdGhpcy5qZEVwb2NofSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaDt2YXIgZT1NYXRoLmZsb29yKHQvMzYwKTt0JT0zNjAsdCs9dDwwPzM2MDowO3ZhciByPU1hdGguZmxvb3IodC8yMCksbj10JTIwO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLm1heWFuPWF9LHsiLi4vbWFpbiI6NjIxLCJvYmplY3QtYXNzaWduIjo0OTl9XSw2MTU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcjt2YXIgbz1uLmluc3RhbmNlKCJncmVnb3JpYW4iKTtpKGEucHJvdG90eXBlLHtuYW1lOiJOYW5ha3NoYWhpIixqZEVwb2NoOjIyNTc2NzMuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDMwLDMwXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJOYW5ha3NoYWhpIixlcG9jaHM6WyJCTiIsIkFOIl0sbW9udGhOYW1lczpbIkNoZXQiLCJWYWlzYWtoIiwiSmV0aCIsIkhhcmgiLCJTYXdhbiIsIkJoYWRvbiIsIkFzc3UiLCJLYXRhayIsIk1hZ2hhciIsIlBvaCIsIk1hZ2giLCJQaGFndW4iXSxtb250aE5hbWVzU2hvcnQ6WyJDaGUiLCJWYWkiLCJKZXQiLCJIYXIiLCJTYXciLCJCaGEiLCJBc3MiLCJLYXQiLCJNZ3IiLCJQb2giLCJNZ2giLCJQaGEiXSxkYXlOYW1lczpbIlNvbXZhYXIiLCJNYW5nYWx2YXIiLCJCdWRodmFhciIsIlZlZXJ2YWFyIiwiU2h1a2FydmFhciIsIlNhbmljaGFydmFhciIsIkV0dmFhciJdLGRheU5hbWVzU2hvcnQ6WyJTb20iLCJNYW5nYWwiLCJCdWRoIiwiVmVlciIsIlNodWthciIsIlNhbmljaGFyIiwiRXQiXSxkYXlOYW1lc01pbjpbIlNvIiwiTWEiLCJCdSIsIlZlIiwiU2giLCJTYSIsIkV0Il0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQtbW0teXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybiBvLmxlYXBZZWFyKGUueWVhcigpKyhlLnllYXIoKTwxPzE6MCkrMTQ2OSl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKDEtKG4uZGF5T2ZXZWVrKCl8fDcpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZE1vbnRoKTsodD1pLnllYXIoKSk8MCYmdCsrO2Zvcih2YXIgYT1pLmRheSgpLHM9MTtzPGkubW9udGgoKTtzKyspYSs9dGhpcy5kYXlzUGVyTW9udGhbcy0xXTtyZXR1cm4gYStvLnRvSkQodCsxNDY4LDMsMTMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQrLjUpO2Zvcih2YXIgZT1NYXRoLmZsb29yKCh0LSh0aGlzLmpkRXBvY2gtMSkpLzM2Nik7dD49dGhpcy50b0pEKGUrMSwxLDEpOyllKys7Zm9yKHZhciByPXQtTWF0aC5mbG9vcih0aGlzLnRvSkQoZSwxLDEpKy41KSsxLG49MTtyPnRoaXMuZGF5c0luTW9udGgoZSxuKTspci09dGhpcy5kYXlzSW5Nb250aChlLG4pLG4rKztyZXR1cm4gdGhpcy5uZXdEYXRlKGUsbixyKX19KSxuLmNhbGVuZGFycy5uYW5ha3NoYWhpPWF9LHsiLi4vbWFpbiI6NjIxLCJvYmplY3QtYXNzaWduIjo0OTl9XSw2MTY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJOZXBhbGkiLGpkRXBvY2g6MTcwMDcwOS41LGRheXNQZXJNb250aDpbMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLGRheXNQZXJZZWFyOjM2NSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJOZXBhbGkiLGVwb2NoczpbIkJCUyIsIkFCUyJdLG1vbnRoTmFtZXM6WyJCYWlzYWtoIiwiSmVzdGhhIiwiQXNoYWRoIiwiU2hyYXdhbiIsIkJoYWRyYSIsIkFzaHdpbiIsIkthcnRpayIsIk1hbmdzaXIiLCJQYXVzaCIsIk1hbmdoIiwiRmFsZ3VuIiwiQ2hhaXRyYSJdLG1vbnRoTmFtZXNTaG9ydDpbIkJhaSIsIkplIiwiQXMiLCJTaHJhIiwiQmhhIiwiQXNoIiwiS2FyIiwiTWFuZyIsIlBhdSIsIk1hIiwiRmFsIiwiQ2hhaSJdLGRheU5hbWVzOlsiQWFpdGFiYWFyIiwiU29tYmFhciIsIk1hbmdsYmFhciIsIkJ1ZGhhYmFhciIsIkJpaGliYWFyIiwiU2h1a3JhYmFhciIsIlNoYW5pYmFhciJdLGRheU5hbWVzU2hvcnQ6WyJBYWl0YSIsIlNvbSIsIk1hbmdsIiwiQnVkaGEiLCJCaWhpIiwiU2h1a3JhIiwiU2hhbmkiXSxkYXlOYW1lc01pbjpbIkFhaSIsIlNvIiwiTWFuIiwiQnUiLCJCaSIsIlNodSIsIlNoYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjEsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXlzSW5ZZWFyKHQpIT09dGhpcy5kYXlzUGVyWWVhcn0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7aWYodD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLCJ1bmRlZmluZWQiPT10eXBlb2YgdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XSlyZXR1cm4gdGhpcy5kYXlzUGVyWWVhcjtmb3IodmFyIGU9MCxyPXRoaXMubWluTW9udGg7cjw9MTI7cisrKWUrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF1bcl07cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCksInVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdP3RoaXMuZGF5c1Blck1vbnRoW2UtMV06dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtlXX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDYhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPW4uaW5zdGFuY2UoKSxvPTAscz1lLGw9dDt0aGlzLl9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhKHQpO3ZhciBjPXQtKHM+OXx8OT09PXMmJnI+PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0/NTY6NTcpO2Zvcig5IT09ZSYmKG89cixzLS0pOzkhPT1zOylzPD0wJiYocz0xMixsLS0pLG8rPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bc10scy0tO3JldHVybiA5PT09ZT8obys9ci10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdKTwwJiYobys9YS5kYXlzSW5ZZWFyKGMpKTpvKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzldLXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0sYS5uZXdEYXRlKGMsMSwxKS5hZGQobywiZCIpLnRvSkQoKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPW4uaW5zdGFuY2UoKS5mcm9tSkQodCkscj1lLnllYXIoKSxpPWUuZGF5T2ZZZWFyKCksYT1yKzU2O3RoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEoYSk7Zm9yKHZhciBvPTkscz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdWzBdLGw9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXS1zKzE7aT5sOykrK28+MTImJihvPTEsYSsrKSxsKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dO3ZhciBjPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb10tKGwtaSk7cmV0dXJuIHRoaXMubmV3RGF0ZShhLG8sYyl9LF9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF5c1Blck1vbnRoLnNsaWNlKDApO2UudW5zaGlmdCgxNyk7Zm9yKHZhciByPXQtMTtyPHQrMjtyKyspInVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdJiYodGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtyXT1lKX0sTkVQQUxJX0NBTEVOREFSX0RBVEE6ezE5NzA6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcxOlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDE5NzM6WzE5LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTc0OlsxOSwzMSwzMSwzMiwzMCwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NTpbMTgsMzEsMzEsMzIsMzIsMzAsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTc3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMTk3ODpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5Nzk6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTgwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4MTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODI6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTgzOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODU6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwxOTg2OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4NzpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODg6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTg5OlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTE6WzE4LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5MzpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTQ6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk5NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5OTc6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDJlMzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAyOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDQ6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDA1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAwOTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTA6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDExOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxMjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTM6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE0OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDE3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxODpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDIwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDIzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyNDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAyNzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI5OlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzMDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzFdLDIwMzE6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMxLDMxLDMxLDMxLDMxLDMxXSwyMDMyOlsxNywzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0sMjAzMzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM1OlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAzNjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMzc6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzOTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDA6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQxOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDM6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQ0OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQ3OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDUwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1MTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTI6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDI5LDMwXSwyMDU2OlsxNywzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNTg6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDYyOlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMjA2MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjQ6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2NjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwNjc6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY4OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDcxOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNzM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDc0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzY6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDc3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA3ODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDgwOlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA4MTpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgzOlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODU6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NzpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODg6WzE2LDMwLDMxLDMyLDMyLDMwLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTE6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkyOlsxNiwzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwzMCwzMF0sMjA5NjpbMTcsMzAsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwOTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwyOSwzMCwyOSwzMCwzMCwzMV0sMjA5OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMjksMzAsMzAsMzBdLDIxMDA6WzE3LDMxLDMyLDMxLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXX19KSxuLmNhbGVuZGFycy5uZXBhbGk9YX0seyIuLi9tYWluIjo2MjEsIm9iamVjdC1hc3NpZ24iOjQ5OX1dLDYxNzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJQZXJzaWFuIixqZEVwb2NoOjE5NDgzMjAuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJQZXJzaWFuIixlcG9jaHM6WyJCUCIsIkFQIl0sbW9udGhOYW1lczpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRheSIsIkJhaG1hbiIsIkVzZmFuZCJdLG1vbnRoTmFtZXNTaG9ydDpbIkZhciIsIk9yZCIsIktobyIsIlRpciIsIk1vciIsIlNoYSIsIk1laCIsIkFiYSIsIkF6YSIsIkRheSIsIkJhaCIsIkVzZiJdLGRheU5hbWVzOlsiWWVrc2hhbWJlIiwiRG9zaGFtYmUiLCJTZXNoYW1iZSIsIkNoXHhlNmhhcnNoYW1iZSIsIlBhbmpzaGFtYmUiLCJKb20nZSIsIlNoYW1iZSJdLGRheU5hbWVzU2hvcnQ6WyJZZWsiLCJEbyIsIlNlIiwiQ2hceGU2IiwiUGFuaiIsIkpvbSIsIlNoYSJdLGRheU5hbWVzTWluOlsiWWUiLCJEbyIsIlNlIiwiQ2giLCJQYSIsIkpvIiwiU2giXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiA2ODIqKChlLnllYXIoKS0oZS55ZWFyKCk+MD80NzQ6NDczKSklMjgyMCs0NzQrMzgpJTI4MTY8NjgyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtKG4uZGF5T2ZXZWVrKCkrMSklNywiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dC0odD49MD80NzQ6NDczKSxzPTQ3NCtvKGEsMjgyMCk7cmV0dXJuIHIrKGU8PTc/MzEqKGUtMSk6MzAqKGUtMSkrNikrTWF0aC5mbG9vcigoNjgyKnMtMTEwKS8yODE2KSszNjUqKHMtMSkrMTAyOTk4MypNYXRoLmZsb29yKGEvMjgyMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT0odD1NYXRoLmZsb29yKHQpKy41KS10aGlzLnRvSkQoNDc1LDEsMSkscj1NYXRoLmZsb29yKGUvMTAyOTk4Myksbj1vKGUsMTAyOTk4MyksaT0yODIwO2lmKDEwMjk5ODIhPT1uKXt2YXIgYT1NYXRoLmZsb29yKG4vMzY2KSxzPW8obiwzNjYpO2k9TWF0aC5mbG9vcigoMjEzNCphKzI4MTYqcysyODE1KS8xMDI4NTIyKSthKzF9dmFyIGw9aSsyODIwKnIrNDc0O2w9bDw9MD9sLTE6bDt2YXIgYz10LXRoaXMudG9KRChsLDEsMSkrMSx1PWM8PTE4Nj9NYXRoLmNlaWwoYy8zMSk6TWF0aC5jZWlsKChjLTYpLzMwKSxmPXQtdGhpcy50b0pEKGwsdSwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUobCx1LGYpfX0pLG4uY2FsZW5kYXJzLnBlcnNpYW49YSxuLmNhbGVuZGFycy5qYWxhbGk9YX0seyIuLi9tYWluIjo2MjEsIm9iamVjdC1hc3NpZ24iOjQ5OX1dLDYxODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoby5wcm90b3R5cGUse25hbWU6IlRhaXdhbiIsamRFcG9jaDoyNDE5NDAyLjUseWVhcnNPZmZzZXQ6MTkxMSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJUYWl3YW4iLGVwb2NoczpbIkJST0MiLCJST0MiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9fSksbi5jYWxlbmRhcnMudGFpd2FuPW99LHsiLi4vbWFpbiI6NjIxLCJvYmplY3QtYXNzaWduIjo0OTl9XSw2MTk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOiJUaGFpIixqZEVwb2NoOjE1MjMwOTguNSx5ZWFyc09mZnNldDo1NDMsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGhhaSIsZXBvY2hzOlsiQkJFIiwiQkUiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9fSksbi5jYWxlbmRhcnMudGhhaT1vfSx7Ii4uL21haW4iOjYyMSwib2JqZWN0LWFzc2lnbiI6NDk5fV0sNjIwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiVW1tQWxRdXJhIixoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJVbW0gYWwtUXVyYSIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJBbC1NdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBBbC1UaGFuaSIsIkp1bWFkYSBBbC1Bd3dhbCIsIkp1bWFkYSBBbC1UaGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtQWhhZCIsIllhd20gYWwtSXRobmFpbiIsIllhd20gYWwtVGhhbFx1MDEwMXRoXHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1BcmJhXHUyMDE4XHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1LaGFtXHUwMTJicyIsIllhd20gYWwtSnVtXHUyMDE4YSIsIllhd20gYWwtU2FidCJdLGRheU5hbWVzTWluOlsiQWgiLCJJdGgiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMH19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gMzU1PT09dGhpcy5kYXlzSW5ZZWFyKGUueWVhcigpKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0xO3I8PTEyO3IrKyllKz10aGlzLmRheXNJbk1vbnRoKHQscik7cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCkudG9KRCgpLTI0ZTUrLjUsaT0wLGE9MDthPG8ubGVuZ3RoO2ErKyl7aWYob1thXT5yKXJldHVybiBvW2ldLW9baS0xXTtpKyt9cmV0dXJuIDMwfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksYT0xMiooaS55ZWFyKCktMSkraS5tb250aCgpLTE1MjkyO3JldHVybiBpLmRheSgpK29bYS0xXS0xKzI0ZTUtLjV9LGZyb21KRDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC0yNGU1Ky41LHI9MCxuPTA7bjxvLmxlbmd0aCYmIShvW25dPmUpO24rKylyKys7dmFyIGk9cisxNTI5MixhPU1hdGguZmxvb3IoKGktMSkvMTIpLHM9YSsxLGw9aS0xMiphLGM9ZS1vW3ItMV0rMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHMsbCxjKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dmFyIGk9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLmlzVmFsaWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpJiYoaT0odD1udWxsIT10LnllYXI/dC55ZWFyOnQpPj0xMjc2JiZ0PD0xNTAwKSxpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoYS55ZWFyPDEyNzZ8fGEueWVhcj4xNTAwKXRocm93IGkucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGF9fSksbi5jYWxlbmRhcnMudW1tYWxxdXJhPWE7dmFyIG89WzIwLDUwLDc5LDEwOSwxMzgsMTY4LDE5NywyMjcsMjU2LDI4NiwzMTUsMzQ1LDM3NCw0MDQsNDMzLDQ2Myw0OTIsNTIyLDU1MSw1ODEsNjExLDY0MSw2NzAsNzAwLDcyOSw3NTksNzg4LDgxOCw4NDcsODc3LDkwNiw5MzYsOTY1LDk5NSwxMDI0LDEwNTQsMTA4MywxMTEzLDExNDIsMTE3MiwxMjAxLDEyMzEsMTI2MCwxMjkwLDEzMjAsMTM1MCwxMzc5LDE0MDksMTQzOCwxNDY4LDE0OTcsMTUyNywxNTU2LDE1ODYsMTYxNSwxNjQ1LDE2NzQsMTcwNCwxNzMzLDE3NjMsMTc5MiwxODIyLDE4NTEsMTg4MSwxOTEwLDE5NDAsMTk2OSwxOTk5LDIwMjgsMjA1OCwyMDg3LDIxMTcsMjE0NiwyMTc2LDIyMDUsMjIzNSwyMjY0LDIyOTQsMjMyMywyMzUzLDIzODMsMjQxMywyNDQyLDI0NzIsMjUwMSwyNTMxLDI1NjAsMjU5MCwyNjE5LDI2NDksMjY3OCwyNzA4LDI3MzcsMjc2NywyNzk2LDI4MjYsMjg1NSwyODg1LDI5MTQsMjk0NCwyOTczLDMwMDMsMzAzMiwzMDYyLDMwOTEsMzEyMSwzMTUwLDMxODAsMzIwOSwzMjM5LDMyNjgsMzI5OCwzMzI3LDMzNTcsMzM4NiwzNDE2LDM0NDYsMzQ3NiwzNTA1LDM1MzUsMzU2NCwzNTk0LDM2MjMsMzY1MywzNjgyLDM3MTIsMzc0MSwzNzcxLDM4MDAsMzgzMCwzODU5LDM4ODksMzkxOCwzOTQ4LDM5NzcsNDAwNyw0MDM2LDQwNjYsNDA5NSw0MTI1LDQxNTUsNDE4NSw0MjE0LDQyNDQsNDI3Myw0MzAzLDQzMzIsNDM2Miw0MzkxLDQ0MjEsNDQ1MCw0NDgwLDQ1MDksNDUzOSw0NTY4LDQ1OTgsNDYyNyw0NjU3LDQ2ODYsNDcxNiw0NzQ1LDQ3NzUsNDgwNCw0ODM0LDQ4NjMsNDg5Myw0OTIyLDQ5NTIsNDk4MSw1MDExLDUwNDAsNTA3MCw1MDk5LDUxMjksNTE1OCw1MTg4LDUyMTgsNTI0OCw1Mjc3LDUzMDcsNTMzNiw1MzY2LDUzOTUsNTQyNSw1NDU0LDU0ODQsNTUxMyw1NTQzLDU1NzIsNTYwMiw1NjMxLDU2NjEsNTY5MCw1NzIwLDU3NDksNTc3OSw1ODA4LDU4MzgsNTg2Nyw1ODk3LDU5MjYsNTk1Niw1OTg1LDYwMTUsNjA0NCw2MDc0LDYxMDMsNjEzMyw2MTYyLDYxOTIsNjIyMSw2MjUxLDYyODEsNjMxMSw2MzQwLDYzNzAsNjM5OSw2NDI5LDY0NTgsNjQ4OCw2NTE3LDY1NDcsNjU3Niw2NjA2LDY2MzUsNjY2NSw2Njk0LDY3MjQsNjc1Myw2NzgzLDY4MTIsNjg0Miw2ODcxLDY5MDEsNjkzMCw2OTYwLDY5ODksNzAxOSw3MDQ4LDcwNzgsNzEwNyw3MTM3LDcxNjYsNzE5Niw3MjI1LDcyNTUsNzI4NCw3MzE0LDczNDQsNzM3NCw3NDAzLDc0MzMsNzQ2Miw3NDkyLDc1MjEsNzU1MSw3NTgwLDc2MTAsNzYzOSw3NjY5LDc2OTgsNzcyOCw3NzU3LDc3ODcsNzgxNiw3ODQ2LDc4NzUsNzkwNSw3OTM0LDc5NjQsNzk5Myw4MDIzLDgwNTMsODA4Myw4MTEyLDgxNDIsODE3MSw4MjAxLDgyMzAsODI2MCw4Mjg5LDgzMTksODM0OCw4Mzc4LDg0MDcsODQzNyw4NDY2LDg0OTYsODUyNSw4NTU1LDg1ODQsODYxNCw4NjQzLDg2NzMsODcwMiw4NzMyLDg3NjEsODc5MSw4ODIxLDg4NTAsODg4MCw4OTA5LDg5MzgsODk2OCw4OTk3LDkwMjcsOTA1Niw5MDg2LDkxMTUsOTE0NSw5MTc1LDkyMDUsOTIzNCw5MjY0LDkyOTMsOTMyMiw5MzUyLDkzODEsOTQxMCw5NDQwLDk0NzAsOTQ5OSw5NTI5LDk1NTksOTU4OSw5NjE4LDk2NDgsOTY3Nyw5NzA2LDk3MzYsOTc2NSw5Nzk0LDk4MjQsOTg1Myw5ODgzLDk5MTMsOTk0Myw5OTcyLDEwMDAyLDEwMDMyLDEwMDYxLDEwMDkwLDEwMTIwLDEwMTQ5LDEwMTc4LDEwMjA4LDEwMjM3LDEwMjY3LDEwMjk3LDEwMzI2LDEwMzU2LDEwMzg2LDEwNDE1LDEwNDQ1LDEwNDc0LDEwNTA0LDEwNTMzLDEwNTYyLDEwNTkyLDEwNjIxLDEwNjUxLDEwNjgwLDEwNzEwLDEwNzQwLDEwNzcwLDEwNzk5LDEwODI5LDEwODU4LDEwODg4LDEwOTE3LDEwOTQ3LDEwOTc2LDExMDA1LDExMDM1LDExMDY0LDExMDk0LDExMTI0LDExMTUzLDExMTgzLDExMjEzLDExMjQyLDExMjcyLDExMzAxLDExMzMxLDExMzYwLDExMzg5LDExNDE5LDExNDQ4LDExNDc4LDExNTA3LDExNTM3LDExNTY3LDExNTk2LDExNjI2LDExNjU1LDExNjg1LDExNzE1LDExNzQ0LDExNzc0LDExODAzLDExODMyLDExODYyLDExODkxLDExOTIxLDExOTUwLDExOTgwLDEyMDEwLDEyMDM5LDEyMDY5LDEyMDk5LDEyMTI4LDEyMTU4LDEyMTg3LDEyMjE2LDEyMjQ2LDEyMjc1LDEyMzA0LDEyMzM0LDEyMzY0LDEyMzkzLDEyNDIzLDEyNDUzLDEyNDgzLDEyNTEyLDEyNTQyLDEyNTcxLDEyNjAwLDEyNjMwLDEyNjU5LDEyNjg4LDEyNzE4LDEyNzQ3LDEyNzc3LDEyODA3LDEyODM3LDEyODY2LDEyODk2LDEyOTI2LDEyOTU1LDEyOTg0LDEzMDE0LDEzMDQzLDEzMDcyLDEzMTAyLDEzMTMxLDEzMTYxLDEzMTkxLDEzMjIwLDEzMjUwLDEzMjgwLDEzMzEwLDEzMzM5LDEzMzY4LDEzMzk4LDEzNDI3LDEzNDU2LDEzNDg2LDEzNTE1LDEzNTQ1LDEzNTc0LDEzNjA0LDEzNjM0LDEzNjY0LDEzNjkzLDEzNzIzLDEzNzUyLDEzNzgyLDEzODExLDEzODQwLDEzODcwLDEzODk5LDEzOTI5LDEzOTU4LDEzOTg4LDE0MDE4LDE0MDQ3LDE0MDc3LDE0MTA3LDE0MTM2LDE0MTY2LDE0MTk1LDE0MjI0LDE0MjU0LDE0MjgzLDE0MzEzLDE0MzQyLDE0MzcyLDE0NDAxLDE0NDMxLDE0NDYxLDE0NDkwLDE0NTIwLDE0NTUwLDE0NTc5LDE0NjA5LDE0NjM4LDE0NjY3LDE0Njk3LDE0NzI2LDE0NzU2LDE0Nzg1LDE0ODE1LDE0ODQ0LDE0ODc0LDE0OTA0LDE0OTMzLDE0OTYzLDE0OTkzLDE1MDIxLDE1MDUxLDE1MDgxLDE1MTEwLDE1MTQwLDE1MTY5LDE1MTk5LDE1MjI4LDE1MjU4LDE1Mjg3LDE1MzE3LDE1MzQ3LDE1Mzc3LDE1NDA2LDE1NDM2LDE1NDY1LDE1NDk0LDE1NTI0LDE1NTUzLDE1NTgyLDE1NjEyLDE1NjQxLDE1NjcxLDE1NzAxLDE1NzMxLDE1NzYwLDE1NzkwLDE1ODIwLDE1ODQ5LDE1ODc4LDE1OTA4LDE1OTM3LDE1OTY2LDE1OTk2LDE2MDI1LDE2MDU1LDE2MDg1LDE2MTE0LDE2MTQ0LDE2MTc0LDE2MjA0LDE2MjMzLDE2MjYyLDE2MjkyLDE2MzIxLDE2MzUwLDE2MzgwLDE2NDA5LDE2NDM5LDE2NDY4LDE2NDk4LDE2NTI4LDE2NTU4LDE2NTg3LDE2NjE3LDE2NjQ2LDE2Njc2LDE2NzA1LDE2NzM0LDE2NzY0LDE2NzkzLDE2ODIzLDE2ODUyLDE2ODgyLDE2OTEyLDE2OTQxLDE2OTcxLDE3MDAxLDE3MDMwLDE3MDYwLDE3MDg5LDE3MTE4LDE3MTQ4LDE3MTc3LDE3MjA3LDE3MjM2LDE3MjY2LDE3Mjk1LDE3MzI1LDE3MzU1LDE3Mzg0LDE3NDE0LDE3NDQ0LDE3NDczLDE3NTAyLDE3NTMyLDE3NTYxLDE3NTkxLDE3NjIwLDE3NjUwLDE3Njc5LDE3NzA5LDE3NzM4LDE3NzY4LDE3Nzk4LDE3ODI3LDE3ODU3LDE3ODg2LDE3OTE2LDE3OTQ1LDE3OTc1LDE4MDA0LDE4MDM0LDE4MDYzLDE4MDkzLDE4MTIyLDE4MTUyLDE4MTgxLDE4MjExLDE4MjQxLDE4MjcwLDE4MzAwLDE4MzMwLDE4MzU5LDE4Mzg4LDE4NDE4LDE4NDQ3LDE4NDc2LDE4NTA2LDE4NTM1LDE4NTY1LDE4NTk1LDE4NjI1LDE4NjU0LDE4Njg0LDE4NzE0LDE4NzQzLDE4NzcyLDE4ODAyLDE4ODMxLDE4ODYwLDE4ODkwLDE4OTE5LDE4OTQ5LDE4OTc5LDE5MDA4LDE5MDM4LDE5MDY4LDE5MDk4LDE5MTI3LDE5MTU2LDE5MTg2LDE5MjE1LDE5MjQ0LDE5Mjc0LDE5MzAzLDE5MzMzLDE5MzYyLDE5MzkyLDE5NDIyLDE5NDUyLDE5NDgxLDE5NTExLDE5NTQwLDE5NTcwLDE5NTk5LDE5NjI4LDE5NjU4LDE5Njg3LDE5NzE3LDE5NzQ2LDE5Nzc2LDE5ODA2LDE5ODM2LDE5ODY1LDE5ODk1LDE5OTI0LDE5OTU0LDE5OTgzLDIwMDEyLDIwMDQyLDIwMDcxLDIwMTAxLDIwMTMwLDIwMTYwLDIwMTkwLDIwMjE5LDIwMjQ5LDIwMjc5LDIwMzA4LDIwMzM4LDIwMzY3LDIwMzk2LDIwNDI2LDIwNDU1LDIwNDg1LDIwNTE0LDIwNTQ0LDIwNTczLDIwNjAzLDIwNjMzLDIwNjYyLDIwNjkyLDIwNzIxLDIwNzUxLDIwNzgwLDIwODEwLDIwODM5LDIwODY5LDIwODk4LDIwOTI4LDIwOTU3LDIwOTg3LDIxMDE2LDIxMDQ2LDIxMDc2LDIxMTA1LDIxMTM1LDIxMTY0LDIxMTk0LDIxMjIzLDIxMjUzLDIxMjgyLDIxMzEyLDIxMzQxLDIxMzcxLDIxNDAwLDIxNDMwLDIxNDU5LDIxNDg5LDIxNTE5LDIxNTQ4LDIxNTc4LDIxNjA3LDIxNjM3LDIxNjY2LDIxNjk2LDIxNzI1LDIxNzU0LDIxNzg0LDIxODEzLDIxODQzLDIxODczLDIxOTAyLDIxOTMyLDIxOTYyLDIxOTkxLDIyMDIxLDIyMDUwLDIyMDgwLDIyMTA5LDIyMTM4LDIyMTY4LDIyMTk3LDIyMjI3LDIyMjU2LDIyMjg2LDIyMzE2LDIyMzQ2LDIyMzc1LDIyNDA1LDIyNDM0LDIyNDY0LDIyNDkzLDIyNTIyLDIyNTUyLDIyNTgxLDIyNjExLDIyNjQwLDIyNjcwLDIyNzAwLDIyNzMwLDIyNzU5LDIyNzg5LDIyODE4LDIyODQ4LDIyODc3LDIyOTA2LDIyOTM2LDIyOTY1LDIyOTk0LDIzMDI0LDIzMDU0LDIzMDgzLDIzMTEzLDIzMTQzLDIzMTczLDIzMjAyLDIzMjMyLDIzMjYxLDIzMjkwLDIzMzIwLDIzMzQ5LDIzMzc5LDIzNDA4LDIzNDM4LDIzNDY3LDIzNDk3LDIzNTI3LDIzNTU2LDIzNTg2LDIzNjE2LDIzNjQ1LDIzNjc0LDIzNzA0LDIzNzMzLDIzNzYzLDIzNzkyLDIzODIyLDIzODUxLDIzODgxLDIzOTEwLDIzOTQwLDIzOTcwLDIzOTk5LDI0MDI5LDI0MDU4LDI0MDg4LDI0MTE3LDI0MTQ3LDI0MTc2LDI0MjA2LDI0MjM1LDI0MjY1LDI0Mjk0LDI0MzI0LDI0MzUzLDI0MzgzLDI0NDEzLDI0NDQyLDI0NDcyLDI0NTAxLDI0NTMxLDI0NTYwLDI0NTkwLDI0NjE5LDI0NjQ4LDI0Njc4LDI0NzA3LDI0NzM3LDI0NzY3LDI0Nzk2LDI0ODI2LDI0ODU2LDI0ODg1LDI0OTE1LDI0OTQ0LDI0OTc0LDI1MDAzLDI1MDMyLDI1MDYyLDI1MDkxLDI1MTIxLDI1MTUwLDI1MTgwLDI1MjEwLDI1MjQwLDI1MjY5LDI1Mjk5LDI1MzI4LDI1MzU4LDI1Mzg3LDI1NDE2LDI1NDQ2LDI1NDc1LDI1NTA1LDI1NTM0LDI1NTY0LDI1NTk0LDI1NjI0LDI1NjUzLDI1NjgzLDI1NzEyLDI1NzQyLDI1NzcxLDI1ODAwLDI1ODMwLDI1ODU5LDI1ODg4LDI1OTE4LDI1OTQ4LDI1OTc3LDI2MDA3LDI2MDM3LDI2MDY3LDI2MDk2LDI2MTI2LDI2MTU1LDI2MTg0LDI2MjE0LDI2MjQzLDI2MjcyLDI2MzAyLDI2MzMyLDI2MzYxLDI2MzkxLDI2NDIxLDI2NDUxLDI2NDgwLDI2NTEwLDI2NTM5LDI2NTY4LDI2NTk4LDI2NjI3LDI2NjU2LDI2Njg2LDI2NzE1LDI2NzQ1LDI2Nzc1LDI2ODA1LDI2ODM0LDI2ODY0LDI2ODkzLDI2OTIzLDI2OTUyLDI2OTgyLDI3MDExLDI3MDQxLDI3MDcwLDI3MDk5LDI3MTI5LDI3MTU5LDI3MTg4LDI3MjE4LDI3MjQ4LDI3Mjc3LDI3MzA3LDI3MzM2LDI3MzY2LDI3Mzk1LDI3NDI1LDI3NDU0LDI3NDg0LDI3NTEzLDI3NTQyLDI3NTcyLDI3NjAyLDI3NjMxLDI3NjYxLDI3NjkxLDI3NzIwLDI3NzUwLDI3Nzc5LDI3ODA5LDI3ODM4LDI3ODY4LDI3ODk3LDI3OTI2LDI3OTU2LDI3OTg1LDI4MDE1LDI4MDQ1LDI4MDc0LDI4MTA0LDI4MTM0LDI4MTYzLDI4MTkzLDI4MjIyLDI4MjUyLDI4MjgxLDI4MzEwLDI4MzQwLDI4MzY5LDI4Mzk5LDI4NDI4LDI4NDU4LDI4NDg4LDI4NTE3LDI4NTQ3LDI4NTc3LDI4NjA3LDI4NjM2LDI4NjY1LDI4Njk1LDI4NzI0LDI4NzU0LDI4NzgzLDI4ODEzLDI4ODQzLDI4ODcyLDI4OTAxLDI4OTMxLDI4OTYwLDI4OTkwLDI5MDE5LDI5MDQ5LDI5MDc4LDI5MTA4LDI5MTM3LDI5MTY3LDI5MTk2LDI5MjI2LDI5MjU1LDI5Mjg1LDI5MzE1LDI5MzQ1LDI5Mzc1LDI5NDA0LDI5NDM0LDI5NDYzLDI5NDkyLDI5NTIyLDI5NTUxLDI5NTgwLDI5NjEwLDI5NjQwLDI5NjY5LDI5Njk5LDI5NzI5LDI5NzU5LDI5Nzg4LDI5ODE4LDI5ODQ3LDI5ODc2LDI5OTA2LDI5OTM1LDI5OTY0LDI5OTk0LDMwMDIzLDMwMDUzLDMwMDgyLDMwMTEyLDMwMTQxLDMwMTcxLDMwMjAwLDMwMjMwLDMwMjU5LDMwMjg5LDMwMzE4LDMwMzQ4LDMwMzc4LDMwNDA4LDMwNDM3LDMwNDY3LDMwNDk2LDMwNTI2LDMwNTU1LDMwNTg1LDMwNjE0LDMwNjQ0LDMwNjczLDMwNzAzLDMwNzMyLDMwNzYyLDMwNzkxLDMwODIxLDMwODUwLDMwODgwLDMwOTA5LDMwOTM5LDMwOTY4LDMwOTk4LDMxMDI3LDMxMDU3LDMxMDg2LDMxMTE2LDMxMTQ1LDMxMTc1LDMxMjA0LDMxMjM0LDMxMjYzLDMxMjkzLDMxMzIyLDMxMzUyLDMxMzgxLDMxNDExLDMxNDQxLDMxNDcxLDMxNTAwLDMxNTMwLDMxNTU5LDMxNTg5LDMxNjE4LDMxNjQ4LDMxNjc2LDMxNzA2LDMxNzM2LDMxNzY2LDMxNzk1LDMxODI1LDMxODU0LDMxODg0LDMxOTEzLDMxOTQzLDMxOTcyLDMyMDAyLDMyMDMxLDMyMDYxLDMyMDkwLDMyMTIwLDMyMTUwLDMyMTgwLDMyMjA5LDMyMjM5LDMyMjY4LDMyMjk4LDMyMzI3LDMyMzU3LDMyMzg2LDMyNDE2LDMyNDQ1LDMyNDc1LDMyNTA0LDMyNTM0LDMyNTYzLDMyNTkzLDMyNjIyLDMyNjUyLDMyNjgxLDMyNzExLDMyNzQwLDMyNzcwLDMyNzk5LDMyODI5LDMyODU4LDMyODg4LDMyOTE3LDMyOTQ3LDMyOTc2LDMzMDA2LDMzMDM1LDMzMDY1LDMzMDk0LDMzMTI0LDMzMTUzLDMzMTgzLDMzMjEzLDMzMjQzLDMzMjcyLDMzMzAyLDMzMzMxLDMzMzYxLDMzMzkwLDMzNDIwLDMzNDUwLDMzNDc5LDMzNTA5LDMzNTM5LDMzNTY4LDMzNTk4LDMzNjI3LDMzNjU3LDMzNjg2LDMzNzE2LDMzNzQ1LDMzNzc1LDMzODA0LDMzODM0LDMzODYzLDMzODkzLDMzOTIyLDMzOTUyLDMzOTgxLDM0MDExLDM0MDQwLDM0MDY5LDM0MDk5LDM0MTI4LDM0MTU4LDM0MTg3LDM0MjE3LDM0MjQ3LDM0Mjc3LDM0MzA2LDM0MzM2LDM0MzY1LDM0Mzk1LDM0NDI0LDM0NDU0LDM0NDgzLDM0NTEyLDM0NTQyLDM0NTcxLDM0NjAxLDM0NjMxLDM0NjYwLDM0NjkwLDM0NzE5LDM0NzQ5LDM0Nzc4LDM0ODA4LDM0ODM3LDM0ODY3LDM0ODk2LDM0OTI2LDM0OTU1LDM0OTg1LDM1MDE1LDM1MDQ0LDM1MDc0LDM1MTAzLDM1MTMzLDM1MTYyLDM1MTkyLDM1MjIyLDM1MjUxLDM1MjgwLDM1MzEwLDM1MzQwLDM1MzcwLDM1Mzk5LDM1NDI5LDM1NDU4LDM1NDg4LDM1NTE3LDM1NTQ3LDM1NTc2LDM1NjA1LDM1NjM1LDM1NjY1LDM1Njk0LDM1NzIzLDM1NzUzLDM1NzgyLDM1ODExLDM1ODQxLDM1ODcxLDM1OTAxLDM1OTMwLDM1OTYwLDM1OTg5LDM2MDE5LDM2MDQ4LDM2MDc4LDM2MTA3LDM2MTM2LDM2MTY2LDM2MTk1LDM2MjI1LDM2MjU0LDM2Mjg0LDM2MzE0LDM2MzQzLDM2MzczLDM2NDAzLDM2NDMzLDM2NDYyLDM2NDkyLDM2NTIxLDM2NTUxLDM2NTgwLDM2NjEwLDM2NjM5LDM2NjY5LDM2Njk4LDM2NzI4LDM2NzU3LDM2Nzg2LDM2ODE2LDM2ODQ1LDM2ODc1LDM2OTA0LDM2OTM0LDM2OTYzLDM2OTkzLDM3MDIyLDM3MDUyLDM3MDgxLDM3MTExLDM3MTQxLDM3MTcwLDM3MjAwLDM3MjI5LDM3MjU5LDM3Mjg4LDM3MzE4LDM3MzQ3LDM3Mzc3LDM3NDA2LDM3NDM2LDM3NDY1LDM3NDk1LDM3NTI0LDM3NTU0LDM3NTg0LDM3NjEzLDM3NjQzLDM3NjcyLDM3NzAxLDM3NzMxLDM3NzYwLDM3NzkwLDM3ODE5LDM3ODQ5LDM3ODc4LDM3OTA4LDM3OTM4LDM3OTY3LDM3OTk3LDM4MDI3LDM4MDU2LDM4MDg1LDM4MTE1LDM4MTQ0LDM4MTc0LDM4MjAzLDM4MjMzLDM4MjYyLDM4MjkyLDM4MzIyLDM4MzUxLDM4MzgxLDM4NDEwLDM4NDQwLDM4NDY5LDM4NDk5LDM4NTI4LDM4NTU4LDM4NTg3LDM4NjE3LDM4NjQ2LDM4Njc2LDM4NzA1LDM4NzM1LDM4NzY0LDM4Nzk0LDM4ODIzLDM4ODUzLDM4ODgyLDM4OTEyLDM4OTQxLDM4OTcxLDM5MDAxLDM5MDMwLDM5MDU5LDM5MDg5LDM5MTE4LDM5MTQ4LDM5MTc4LDM5MjA4LDM5MjM3LDM5MjY3LDM5Mjk3LDM5MzI2LDM5MzU1LDM5Mzg1LDM5NDE0LDM5NDQ0LDM5NDczLDM5NTAzLDM5NTMyLDM5NTYyLDM5NTkyLDM5NjIxLDM5NjUwLDM5NjgwLDM5NzA5LDM5NzM5LDM5NzY4LDM5Nzk4LDM5ODI3LDM5ODU3LDM5ODg2LDM5OTE2LDM5OTQ2LDM5OTc1LDQwMDA1LDQwMDM1LDQwMDY0LDQwMDk0LDQwMTIzLDQwMTUzLDQwMTgyLDQwMjEyLDQwMjQxLDQwMjcxLDQwMzAwLDQwMzMwLDQwMzU5LDQwMzg5LDQwNDE4LDQwNDQ4LDQwNDc3LDQwNTA3LDQwNTM2LDQwNTY2LDQwNTk1LDQwNjI1LDQwNjU1LDQwNjg1LDQwNzE0LDQwNzQ0LDQwNzczLDQwODAzLDQwODMyLDQwODYyLDQwODkyLDQwOTIxLDQwOTUxLDQwOTgwLDQxMDA5LDQxMDM5LDQxMDY4LDQxMDk4LDQxMTI3LDQxMTU3LDQxMTg2LDQxMjE2LDQxMjQ1LDQxMjc1LDQxMzA0LDQxMzM0LDQxMzY0LDQxMzkzLDQxNDIyLDQxNDUyLDQxNDgxLDQxNTExLDQxNTQwLDQxNTcwLDQxNTk5LDQxNjI5LDQxNjU4LDQxNjg4LDQxNzE4LDQxNzQ4LDQxNzc3LDQxODA3LDQxODM2LDQxODY1LDQxODk0LDQxOTI0LDQxOTUzLDQxOTgzLDQyMDEyLDQyMDQyLDQyMDcyLDQyMTAyLDQyMTMxLDQyMTYxLDQyMTkwLDQyMjIwLDQyMjQ5LDQyMjc5LDQyMzA4LDQyMzM3LDQyMzY3LDQyMzk3LDQyNDI2LDQyNDU2LDQyNDg1LDQyNTE1LDQyNTQ1LDQyNTc0LDQyNjA0LDQyNjMzLDQyNjYyLDQyNjkyLDQyNzIxLDQyNzUxLDQyNzgwLDQyODEwLDQyODM5LDQyODY5LDQyODk5LDQyOTI5LDQyOTU4LDQyOTg4LDQzMDE3LDQzMDQ2LDQzMDc2LDQzMTA1LDQzMTM1LDQzMTY0LDQzMTk0LDQzMjIzLDQzMjUzLDQzMjgzLDQzMzEyLDQzMzQyLDQzMzcxLDQzNDAxLDQzNDMwLDQzNDYwLDQzNDg5LDQzNTE5LDQzNTQ4LDQzNTc4LDQzNjA3LDQzNjM3LDQzNjY2LDQzNjk2LDQzNzI2LDQzNzU1LDQzNzg1LDQzODE0LDQzODQ0LDQzODczLDQzOTAzLDQzOTMyLDQzOTYyLDQzOTkxLDQ0MDIxLDQ0MDUwLDQ0MDgwLDQ0MTA5LDQ0MTM5LDQ0MTY5LDQ0MTk4LDQ0MjI4LDQ0MjU4LDQ0Mjg3LDQ0MzE3LDQ0MzQ2LDQ0Mzc1LDQ0NDA1LDQ0NDM0LDQ0NDY0LDQ0NDkzLDQ0NTIzLDQ0NTUzLDQ0NTgyLDQ0NjEyLDQ0NjQxLDQ0NjcxLDQ0NzAwLDQ0NzMwLDQ0NzU5LDQ0Nzg4LDQ0ODE4LDQ0ODQ3LDQ0ODc3LDQ0OTA2LDQ0OTM2LDQ0OTY2LDQ0OTk2LDQ1MDI1LDQ1MDU1LDQ1MDg0LDQ1MTE0LDQ1MTQzLDQ1MTcyLDQ1MjAyLDQ1MjMxLDQ1MjYxLDQ1MjkwLDQ1MzIwLDQ1MzUwLDQ1MzgwLDQ1NDA5LDQ1NDM5LDQ1NDY4LDQ1NDk4LDQ1NTI3LDQ1NTU2LDQ1NTg2LDQ1NjE1LDQ1NjQ0LDQ1Njc0LDQ1NzA0LDQ1NzMzLDQ1NzYzLDQ1NzkzLDQ1ODIzLDQ1ODUyLDQ1ODgyLDQ1OTExLDQ1OTQwLDQ1OTcwLDQ1OTk5LDQ2MDI4LDQ2MDU4LDQ2MDg4LDQ2MTE3LDQ2MTQ3LDQ2MTc3LDQ2MjA2LDQ2MjM2LDQ2MjY1LDQ2Mjk1LDQ2MzI0LDQ2MzU0LDQ2MzgzLDQ2NDEzLDQ2NDQyLDQ2NDcyLDQ2NTAxLDQ2NTMxLDQ2NTYwLDQ2NTkwLDQ2NjIwLDQ2NjQ5LDQ2Njc5LDQ2NzA4LDQ2NzM4LDQ2NzY3LDQ2Nzk3LDQ2ODI2LDQ2ODU2LDQ2ODg1LDQ2OTE1LDQ2OTQ0LDQ2OTc0LDQ3MDAzLDQ3MDMzLDQ3MDYzLDQ3MDkyLDQ3MTIyLDQ3MTUxLDQ3MTgxLDQ3MjEwLDQ3MjQwLDQ3MjY5LDQ3Mjk4LDQ3MzI4LDQ3MzU3LDQ3Mzg3LDQ3NDE3LDQ3NDQ2LDQ3NDc2LDQ3NTA2LDQ3NTM1LDQ3NTY1LDQ3NTk0LDQ3NjI0LDQ3NjUzLDQ3NjgyLDQ3NzEyLDQ3NzQxLDQ3NzcxLDQ3ODAwLDQ3ODMwLDQ3ODYwLDQ3ODkwLDQ3OTE5LDQ3OTQ5LDQ3OTc4LDQ4MDA4LDQ4MDM3LDQ4MDY2LDQ4MDk2LDQ4MTI1LDQ4MTU1LDQ4MTg0LDQ4MjE0LDQ4MjQ0LDQ4MjczLDQ4MzAzLDQ4MzMzLDQ4MzYyLDQ4MzkyLDQ4NDIxLDQ4NDUwLDQ4NDgwLDQ4NTA5LDQ4NTM4LDQ4NTY4LDQ4NTk4LDQ4NjI3LDQ4NjU3LDQ4Njg3LDQ4NzE3LDQ4NzQ2LDQ4Nzc2LDQ4ODA1LDQ4ODM0LDQ4ODY0LDQ4ODkzLDQ4OTIyLDQ4OTUyLDQ4OTgyLDQ5MDExLDQ5MDQxLDQ5MDcxLDQ5MTAwLDQ5MTMwLDQ5MTYwLDQ5MTg5LDQ5MjE4LDQ5MjQ4LDQ5Mjc3LDQ5MzA2LDQ5MzM2LDQ5MzY1LDQ5Mzk1LDQ5NDI1LDQ5NDU1LDQ5NDg0LDQ5NTE0LDQ5NTQzLDQ5NTczLDQ5NjAyLDQ5NjMyLDQ5NjYxLDQ5NjkwLDQ5NzIwLDQ5NzQ5LDQ5Nzc5LDQ5ODA5LDQ5ODM4LDQ5ODY4LDQ5ODk4LDQ5OTI3LDQ5OTU3LDQ5OTg2LDUwMDE2LDUwMDQ1LDUwMDc1LDUwMTA0LDUwMTMzLDUwMTYzLDUwMTkyLDUwMjIyLDUwMjUyLDUwMjgxLDUwMzExLDUwMzQwLDUwMzcwLDUwNDAwLDUwNDI5LDUwNDU5LDUwNDg4LDUwNTE4LDUwNTQ3LDUwNTc2LDUwNjA2LDUwNjM1LDUwNjY1LDUwNjk0LDUwNzI0LDUwNzU0LDUwNzg0LDUwODEzLDUwODQzLDUwODcyLDUwOTAyLDUwOTMxLDUwOTYwLDUwOTkwLDUxMDE5LDUxMDQ5LDUxMDc4LDUxMTA4LDUxMTM4LDUxMTY3LDUxMTk3LDUxMjI3LDUxMjU2LDUxMjg2LDUxMzE1LDUxMzQ1LDUxMzc0LDUxNDAzLDUxNDMzLDUxNDYyLDUxNDkyLDUxNTIyLDUxNTUyLDUxNTgyLDUxNjExLDUxNjQxLDUxNjcwLDUxNjk5LDUxNzI5LDUxNzU4LDUxNzg3LDUxODE2LDUxODQ2LDUxODc2LDUxOTA2LDUxOTM2LDUxOTY1LDUxOTk1LDUyMDI1LDUyMDU0LDUyMDgzLDUyMTEzLDUyMTQyLDUyMTcxLDUyMjAwLDUyMjMwLDUyMjYwLDUyMjkwLDUyMzE5LDUyMzQ5LDUyMzc5LDUyNDA4LDUyNDM4LDUyNDY3LDUyNDk3LDUyNTI2LDUyNTU1LDUyNTg1LDUyNjE0LDUyNjQ0LDUyNjczLDUyNzAzLDUyNzMzLDUyNzYyLDUyNzkyLDUyODIyLDUyODUxLDUyODgxLDUyOTEwLDUyOTM5LDUyOTY5LDUyOTk4LDUzMDI4LDUzMDU3LDUzMDg3LDUzMTE2LDUzMTQ2LDUzMTc2LDUzMjA1LDUzMjM1LDUzMjY0LDUzMjk0LDUzMzI0LDUzMzUzLDUzMzgzLDUzNDEyLDUzNDQxLDUzNDcxLDUzNTAwLDUzNTMwLDUzNTU5LDUzNTg5LDUzNjE5LDUzNjQ4LDUzNjc4LDUzNzA4LDUzNzM3LDUzNzY3LDUzNzk2LDUzODI1LDUzODU1LDUzODg0LDUzOTEzLDUzOTQzLDUzOTczLDU0MDAzLDU0MDMyLDU0MDYyLDU0MDkyLDU0MTIxLDU0MTUxLDU0MTgwLDU0MjA5LDU0MjM5LDU0MjY4LDU0Mjk3LDU0MzI3LDU0MzU3LDU0Mzg3LDU0NDE2LDU0NDQ2LDU0NDc2LDU0NTA1LDU0NTM1LDU0NTY0LDU0NTkzLDU0NjIzLDU0NjUyLDU0NjgxLDU0NzExLDU0NzQxLDU0NzcwLDU0ODAwLDU0ODMwLDU0ODU5LDU0ODg5LDU0OTE5LDU0OTQ4LDU0OTc3LDU1MDA3LDU1MDM2LDU1MDY2LDU1MDk1LDU1MTI1LDU1MTU0LDU1MTg0LDU1MjEzLDU1MjQzLDU1MjczLDU1MzAyLDU1MzMyLDU1MzYxLDU1MzkxLDU1NDIwLDU1NDUwLDU1NDc5LDU1NTA4LDU1NTM4LDU1NTY3LDU1NTk3LDU1NjI3LDU1NjU3LDU1Njg2LDU1NzE2LDU1NzQ1LDU1Nzc1LDU1ODA0LDU1ODM0LDU1ODYzLDU1ODkyLDU1OTIyLDU1OTUxLDU1OTgxLDU2MDExLDU2MDQwLDU2MDcwLDU2MTAwLDU2MTI5LDU2MTU5LDU2MTg4LDU2MjE4LDU2MjQ3LDU2Mjc2LDU2MzA2LDU2MzM1LDU2MzY1LDU2Mzk0LDU2NDI0LDU2NDU0LDU2NDgzLDU2NTEzLDU2NTQzLDU2NTcyLDU2NjAxLDU2NjMxLDU2NjYwLDU2NjkwLDU2NzE5LDU2NzQ5LDU2Nzc4LDU2ODA4LDU2ODM3LDU2ODY3LDU2ODk3LDU2OTI2LDU2OTU2LDU2OTg1LDU3MDE1LDU3MDQ0LDU3MDc0LDU3MTAzLDU3MTMzLDU3MTYyLDU3MTkyLDU3MjIxLDU3MjUxLDU3MjgwLDU3MzEwLDU3MzQwLDU3MzY5LDU3Mzk5LDU3NDI5LDU3NDU4LDU3NDg3LDU3NTE3LDU3NTQ2LDU3NTc2LDU3NjA1LDU3NjM0LDU3NjY0LDU3Njk0LDU3NzIzLDU3NzUzLDU3NzgzLDU3ODEzLDU3ODQyLDU3ODcxLDU3OTAxLDU3OTMwLDU3OTU5LDU3OTg5LDU4MDE4LDU4MDQ4LDU4MDc3LDU4MTA3LDU4MTM3LDU4MTY3LDU4MTk2LDU4MjI2LDU4MjU1LDU4Mjg1LDU4MzE0LDU4MzQzLDU4MzczLDU4NDAyLDU4NDMyLDU4NDYxLDU4NDkxLDU4NTIxLDU4NTUxLDU4NTgwLDU4NjEwLDU4NjM5LDU4NjY5LDU4Njk4LDU4NzI3LDU4NzU3LDU4Nzg2LDU4ODE2LDU4ODQ1LDU4ODc1LDU4OTA1LDU4OTM0LDU4OTY0LDU4OTk0LDU5MDIzLDU5MDUzLDU5MDgyLDU5MTExLDU5MTQxLDU5MTcwLDU5MjAwLDU5MjI5LDU5MjU5LDU5Mjg4LDU5MzE4LDU5MzQ4LDU5Mzc3LDU5NDA3LDU5NDM2LDU5NDY2LDU5NDk1LDU5NTI1LDU5NTU0LDU5NTg0LDU5NjEzLDU5NjQzLDU5NjcyLDU5NzAyLDU5NzMxLDU5NzYxLDU5NzkxLDU5ODIwLDU5ODUwLDU5ODc5LDU5OTA5LDU5OTM5LDU5OTY4LDU5OTk3LDYwMDI3LDYwMDU2LDYwMDg2LDYwMTE1LDYwMTQ1LDYwMTc0LDYwMjA0LDYwMjM0LDYwMjY0LDYwMjkzLDYwMzIzLDYwMzUyLDYwMzgxLDYwNDExLDYwNDQwLDYwNDY5LDYwNDk5LDYwNTI4LDYwNTU4LDYwNTg4LDYwNjE4LDYwNjQ4LDYwNjc3LDYwNzA3LDYwNzM2LDYwNzY1LDYwNzk1LDYwODI0LDYwODUzLDYwODgzLDYwOTEyLDYwOTQyLDYwOTcyLDYxMDAyLDYxMDMxLDYxMDYxLDYxMDkwLDYxMTIwLDYxMTQ5LDYxMTc5LDYxMjA4LDYxMjM3LDYxMjY3LDYxMjk2LDYxMzI2LDYxMzU2LDYxMzg1LDYxNDE1LDYxNDQ1LDYxNDc0LDYxNTA0LDYxNTMzLDYxNTYzLDYxNTkyLDYxNjIxLDYxNjUxLDYxNjgwLDYxNzEwLDYxNzM5LDYxNzY5LDYxNzk5LDYxODI4LDYxODU4LDYxODg4LDYxOTE3LDYxOTQ3LDYxOTc2LDYyMDA2LDYyMDM1LDYyMDY0LDYyMDk0LDYyMTIzLDYyMTUzLDYyMTgyLDYyMjEyLDYyMjQyLDYyMjcxLDYyMzAxLDYyMzMxLDYyMzYwLDYyMzkwLDYyNDE5LDYyNDQ4LDYyNDc4LDYyNTA3LDYyNTM3LDYyNTY2LDYyNTk2LDYyNjI1LDYyNjU1LDYyNjg1LDYyNzE1LDYyNzQ0LDYyNzc0LDYyODAzLDYyODMyLDYyODYyLDYyODkxLDYyOTIxLDYyOTUwLDYyOTgwLDYzMDA5LDYzMDM5LDYzMDY5LDYzMDk5LDYzMTI4LDYzMTU3LDYzMTg3LDYzMjE2LDYzMjQ2LDYzMjc1LDYzMzA1LDYzMzM0LDYzMzYzLDYzMzkzLDYzNDIzLDYzNDUzLDYzNDgyLDYzNTEyLDYzNTQxLDYzNTcxLDYzNjAwLDYzNjMwLDYzNjU5LDYzNjg5LDYzNzE4LDYzNzQ3LDYzNzc3LDYzODA3LDYzODM2LDYzODY2LDYzODk1LDYzOTI1LDYzOTU1LDYzOTg0LDY0MDE0LDY0MDQzLDY0MDczLDY0MTAyLDY0MTMxLDY0MTYxLDY0MTkwLDY0MjIwLDY0MjQ5LDY0Mjc5LDY0MzA5LDY0MzM5LDY0MzY4LDY0Mzk4LDY0NDI3LDY0NDU3LDY0NDg2LDY0NTE1LDY0NTQ1LDY0NTc0LDY0NjAzLDY0NjMzLDY0NjYzLDY0NjkyLDY0NzIyLDY0NzUyLDY0NzgyLDY0ODExLDY0ODQxLDY0ODcwLDY0ODk5LDY0OTI5LDY0OTU4LDY0OTg3LDY1MDE3LDY1MDQ3LDY1MDc2LDY1MTA2LDY1MTM2LDY1MTY2LDY1MTk1LDY1MjI1LDY1MjU0LDY1MjgzLDY1MzEzLDY1MzQyLDY1MzcxLDY1NDAxLDY1NDMxLDY1NDYwLDY1NDkwLDY1NTIwLDY1NTQ5LDY1NTc5LDY1NjA4LDY1NjM4LDY1NjY3LDY1Njk3LDY1NzI2LDY1NzU1LDY1Nzg1LDY1ODE1LDY1ODQ0LDY1ODc0LDY1OTAzLDY1OTMzLDY1OTYzLDY1OTkyLDY2MDIyLDY2MDUxLDY2MDgxLDY2MTEwLDY2MTQwLDY2MTY5LDY2MTk5LDY2MjI4LDY2MjU4LDY2Mjg3LDY2MzE3LDY2MzQ2LDY2Mzc2LDY2NDA1LDY2NDM1LDY2NDY1LDY2NDk0LDY2NTI0LDY2NTUzLDY2NTgzLDY2NjEyLDY2NjQxLDY2NjcxLDY2NzAwLDY2NzMwLDY2NzYwLDY2Nzg5LDY2ODE5LDY2ODQ5LDY2ODc4LDY2OTA4LDY2OTM3LDY2OTY3LDY2OTk2LDY3MDI1LDY3MDU1LDY3MDg0LDY3MTE0LDY3MTQzLDY3MTczLDY3MjAzLDY3MjMzLDY3MjYyLDY3MjkyLDY3MzIxLDY3MzUxLDY3MzgwLDY3NDA5LDY3NDM5LDY3NDY4LDY3NDk3LDY3NTI3LDY3NTU3LDY3NTg3LDY3NjE3LDY3NjQ2LDY3Njc2LDY3NzA1LDY3NzM1LDY3NzY0LDY3NzkzLDY3ODIzLDY3ODUyLDY3ODgyLDY3OTExLDY3OTQxLDY3OTcxLDY4ZTMsNjgwMzAsNjgwNjAsNjgwODksNjgxMTksNjgxNDgsNjgxNzcsNjgyMDcsNjgyMzYsNjgyNjYsNjgyOTUsNjgzMjUsNjgzNTQsNjgzODQsNjg0MTQsNjg0NDMsNjg0NzMsNjg1MDIsNjg1MzIsNjg1NjEsNjg1OTEsNjg2MjAsNjg2NTAsNjg2NzksNjg3MDgsNjg3MzgsNjg3NjgsNjg3OTcsNjg4MjcsNjg4NTcsNjg4ODYsNjg5MTYsNjg5NDYsNjg5NzUsNjkwMDQsNjkwMzQsNjkwNjMsNjkwOTIsNjkxMjIsNjkxNTIsNjkxODEsNjkyMTEsNjkyNDAsNjkyNzAsNjkzMDAsNjkzMzAsNjkzNTksNjkzODgsNjk0MTgsNjk0NDcsNjk0NzYsNjk1MDYsNjk1MzUsNjk1NjUsNjk1OTUsNjk2MjQsNjk2NTQsNjk2ODQsNjk3MTMsNjk3NDMsNjk3NzIsNjk4MDIsNjk4MzEsNjk4NjEsNjk4OTAsNjk5MTksNjk5NDksNjk5NzgsNzAwMDgsNzAwMzgsNzAwNjcsNzAwOTcsNzAxMjYsNzAxNTYsNzAxODYsNzAyMTUsNzAyNDUsNzAyNzQsNzAzMDMsNzAzMzMsNzAzNjIsNzAzOTIsNzA0MjEsNzA0NTEsNzA0ODEsNzA1MTAsNzA1NDAsNzA1NzAsNzA1OTksNzA2MjksNzA2NTgsNzA2ODcsNzA3MTcsNzA3NDYsNzA3NzYsNzA4MDUsNzA4MzUsNzA4NjQsNzA4OTQsNzA5MjQsNzA5NTQsNzA5ODMsNzEwMTMsNzEwNDIsNzEwNzEsNzExMDEsNzExMzAsNzExNTksNzExODksNzEyMTgsNzEyNDgsNzEyNzgsNzEzMDgsNzEzMzcsNzEzNjcsNzEzOTcsNzE0MjYsNzE0NTUsNzE0ODUsNzE1MTQsNzE1NDMsNzE1NzMsNzE2MDIsNzE2MzIsNzE2NjIsNzE2OTEsNzE3MjEsNzE3NTEsNzE3ODEsNzE4MTAsNzE4MzksNzE4NjksNzE4OTgsNzE5MjcsNzE5NTcsNzE5ODYsNzIwMTYsNzIwNDYsNzIwNzUsNzIxMDUsNzIxMzUsNzIxNjQsNzIxOTQsNzIyMjMsNzIyNTMsNzIyODIsNzIzMTEsNzIzNDEsNzIzNzAsNzI0MDAsNzI0MjksNzI0NTksNzI0ODksNzI1MTgsNzI1NDgsNzI1NzcsNzI2MDcsNzI2MzcsNzI2NjYsNzI2OTUsNzI3MjUsNzI3NTQsNzI3ODQsNzI4MTMsNzI4NDMsNzI4NzIsNzI5MDIsNzI5MzEsNzI5NjEsNzI5OTEsNzMwMjAsNzMwNTAsNzMwODAsNzMxMDksNzMxMzksNzMxNjgsNzMxOTcsNzMyMjcsNzMyNTYsNzMyODYsNzMzMTUsNzMzNDUsNzMzNzUsNzM0MDQsNzM0MzQsNzM0NjQsNzM0OTMsNzM1MjMsNzM1NTIsNzM1ODEsNzM2MTEsNzM2NDAsNzM2NjksNzM2OTksNzM3MjksNzM3NTgsNzM3ODgsNzM4MTgsNzM4NDgsNzM4NzcsNzM5MDcsNzM5MzYsNzM5NjUsNzM5OTUsNzQwMjQsNzQwNTMsNzQwODMsNzQxMTMsNzQxNDIsNzQxNzIsNzQyMDIsNzQyMzEsNzQyNjEsNzQyOTEsNzQzMjAsNzQzNDksNzQzNzksNzQ0MDgsNzQ0MzcsNzQ0NjcsNzQ0OTcsNzQ1MjYsNzQ1NTYsNzQ1ODYsNzQ2MTUsNzQ2NDUsNzQ2NzUsNzQ3MDQsNzQ3MzMsNzQ3NjMsNzQ3OTIsNzQ4MjIsNzQ4NTEsNzQ4ODEsNzQ5MTAsNzQ5NDAsNzQ5NjksNzQ5OTksNzUwMjksNzUwNTgsNzUwODgsNzUxMTcsNzUxNDcsNzUxNzYsNzUyMDYsNzUyMzUsNzUyNjQsNzUyOTQsNzUzMjMsNzUzNTMsNzUzODMsNzU0MTIsNzU0NDIsNzU0NzIsNzU1MDEsNzU1MzEsNzU1NjAsNzU1OTAsNzU2MTksNzU2NDgsNzU2NzgsNzU3MDcsNzU3MzcsNzU3NjYsNzU3OTYsNzU4MjYsNzU4NTYsNzU4ODUsNzU5MTUsNzU5NDQsNzU5NzQsNzYwMDMsNzYwMzIsNzYwNjIsNzYwOTEsNzYxMjEsNzYxNTAsNzYxODAsNzYyMTAsNzYyMzksNzYyNjksNzYyOTksNzYzMjgsNzYzNTgsNzYzODcsNzY0MTYsNzY0NDYsNzY0NzUsNzY1MDUsNzY1MzQsNzY1NjQsNzY1OTMsNzY2MjMsNzY2NTMsNzY2ODIsNzY3MTIsNzY3NDEsNzY3NzEsNzY4MDEsNzY4MzAsNzY4NTksNzY4ODksNzY5MTgsNzY5NDgsNzY5NzcsNzcwMDcsNzcwMzYsNzcwNjYsNzcwOTYsNzcxMjUsNzcxNTUsNzcxODUsNzcyMTQsNzcyNDMsNzcyNzMsNzczMDIsNzczMzIsNzczNjEsNzczOTAsNzc0MjAsNzc0NTAsNzc0NzksNzc1MDksNzc1MzksNzc1NjksNzc1OTgsNzc2MjcsNzc2NTcsNzc2ODYsNzc3MTUsNzc3NDUsNzc3NzQsNzc4MDQsNzc4MzMsNzc4NjMsNzc4OTMsNzc5MjMsNzc5NTIsNzc5ODIsNzgwMTEsNzgwNDEsNzgwNzAsNzgwOTksNzgxMjksNzgxNTgsNzgxODgsNzgyMTcsNzgyNDcsNzgyNzcsNzgzMDcsNzgzMzYsNzgzNjYsNzgzOTUsNzg0MjUsNzg0NTQsNzg0ODMsNzg1MTMsNzg1NDIsNzg1NzIsNzg2MDEsNzg2MzEsNzg2NjEsNzg2OTAsNzg3MjAsNzg3NTAsNzg3NzksNzg4MDgsNzg4MzgsNzg4NjcsNzg4OTcsNzg5MjYsNzg5NTYsNzg5ODUsNzkwMTUsNzkwNDQsNzkwNzQsNzkxMDQsNzkxMzMsNzkxNjMsNzkxOTIsNzkyMjIsNzkyNTEsNzkyODEsNzkzMTAsNzkzNDAsNzkzNjksNzkzOTksNzk0MjgsNzk0NTgsNzk0ODcsNzk1MTcsNzk1NDYsNzk1NzYsNzk2MDYsNzk2MzUsNzk2NjUsNzk2OTUsNzk3MjQsNzk3NTMsNzk3ODMsNzk4MTIsNzk4NDEsNzk4NzEsNzk5MDAsNzk5MzAsNzk5NjAsNzk5OTBdfSx7Ii4uL21haW4iOjYyMSwib2JqZWN0LWFzc2lnbiI6NDk5fV0sNjIxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkoKXt0aGlzLnJlZ2lvbmFsT3B0aW9ucz1bXSx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl09e2ludmFsaWRDYWxlbmRhcjoiQ2FsZW5kYXIgezB9IG5vdCBmb3VuZCIsaW52YWxpZERhdGU6IkludmFsaWQgezB9IGRhdGUiLGludmFsaWRNb250aDoiSW52YWxpZCB7MH0gbW9udGgiLGludmFsaWRZZWFyOiJJbnZhbGlkIHswfSB5ZWFyIixkaWZmZXJlbnRDYWxlbmRhcnM6IkNhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMifSx0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zWyIiXSx0aGlzLmNhbGVuZGFycz17fSx0aGlzLl9sb2NhbENhbHM9e319ZnVuY3Rpb24gYSh0LGUscixuKXtpZih0aGlzLl9jYWxlbmRhcj10LHRoaXMuX3llYXI9ZSx0aGlzLl9tb250aD1yLHRoaXMuX2RheT1uLDA9PT10aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodGhpcy5feWVhcix0aGlzLl9tb250aCx0aGlzLl9kYXkpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4iMDAwMDAwIi5zdWJzdHJpbmcoMCxlLSh0PSIiK3QpLmxlbmd0aCkrdH1mdW5jdGlvbiBzKCl7dGhpcy5zaG9ydFllYXJDdXRvZmY9IisxMCJ9ZnVuY3Rpb24gbCh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3RdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19bihpLnByb3RvdHlwZSx7aW5zdGFuY2U6ZnVuY3Rpb24odCxlKXt0PSh0fHwiZ3JlZ29yaWFuIikudG9Mb3dlckNhc2UoKSxlPWV8fCIiO3ZhciByPXRoaXMuX2xvY2FsQ2Fsc1t0KyItIitlXTtpZighciYmdGhpcy5jYWxlbmRhcnNbdF0mJihyPW5ldyB0aGlzLmNhbGVuZGFyc1t0XShlKSx0aGlzLl9sb2NhbENhbHNbdCsiLSIrZV09ciksIXIpdGhyb3codGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXJ8fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQ2FsZW5kYXIpLnJlcGxhY2UoL1x7MFx9Lyx0KTtyZXR1cm4gcn0sbmV3RGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybihuPShudWxsIT10JiZ0LnllYXI/dC5jYWxlbmRhcigpOiJzdHJpbmciPT10eXBlb2Ygbj90aGlzLmluc3RhbmNlKG4saSk6bil8fHRoaXMuaW5zdGFuY2UoKSkubmV3RGF0ZSh0LGUscil9LHN1YnN0aXR1dGVEaWdpdHM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX19LHN1YnN0aXR1dGVDaGluZXNlRGlnaXRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0iIixpPTA7cj4wOyl7dmFyIGE9ciUxMDtuPSgwPT09YT8iIjp0W2FdK2VbaV0pK24saSsrLHI9TWF0aC5mbG9vcihyLzEwKX1yZXR1cm4gMD09PW4uaW5kZXhPZih0WzFdK2VbMV0pJiYobj1uLnN1YnN0cigxKSksbnx8dFswXX19fSksbihhLnByb3RvdHlwZSx7bmV3RGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm5ld0RhdGUobnVsbD09dD90aGlzOnQsZSxyKX0seWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5feWVhcjp0aGlzLnNldCh0LCJ5Iil9LG1vbnRoOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9tb250aDp0aGlzLnNldCh0LCJtIil9LGRheTpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fZGF5OnRoaXMuc2V0KHQsImQiKX0sZGF0ZTpmdW5jdGlvbih0LGUscil7aWYoIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodCxlLHIpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO3JldHVybiB0aGlzLl95ZWFyPXQsdGhpcy5fbW9udGg9ZSx0aGlzLl9kYXk9cix0aGlzfSxsZWFwWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5sZWFwWWVhcih0aGlzKX0sZXBvY2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZXBvY2godGhpcyl9LGZvcm1hdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZm9ybWF0WWVhcih0aGlzKX0sbW9udGhPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubW9udGhPZlllYXIodGhpcyl9LHdlZWtPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla09mWWVhcih0aGlzKX0sZGF5c0luWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5ZZWFyKHRoaXMpfSxkYXlPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZZZWFyKHRoaXMpfSxkYXlzSW5Nb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5Nb250aCh0aGlzKX0sZGF5T2ZXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mV2Vlayh0aGlzKX0sd2Vla0RheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrRGF5KHRoaXMpfSxleHRyYUluZm86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZXh0cmFJbmZvKHRoaXMpfSxhZGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMsdCxlKX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnNldCh0aGlzLHQsZSl9LGNvbXBhcmVUbzpmdW5jdGlvbih0KXtpZih0aGlzLl9jYWxlbmRhci5uYW1lIT09dC5fY2FsZW5kYXIubmFtZSl0aHJvdyhjLmxvY2FsLmRpZmZlcmVudENhbGVuZGFyc3x8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpLnJlcGxhY2UoL1x7MVx9Lyx0Ll9jYWxlbmRhci5sb2NhbC5uYW1lKTt2YXIgZT10aGlzLl95ZWFyIT09dC5feWVhcj90aGlzLl95ZWFyLXQuX3llYXI6dGhpcy5fbW9udGghPT10Ll9tb250aD90aGlzLm1vbnRoT2ZZZWFyKCktdC5tb250aE9mWWVhcigpOnRoaXMuX2RheS10Ll9kYXk7cmV0dXJuIDA9PT1lPzA6ZTwwPy0xOjF9LGNhbGVuZGFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyfSx0b0pEOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSkQodGhpcyl9LGZyb21KRDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpEKHQpfSx0b0pTRGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pTRGF0ZSh0aGlzKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpTRGF0ZSh0KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy55ZWFyKCk8MD8iLSI6IiIpK28oTWF0aC5hYnModGhpcy55ZWFyKCkpLDQpKyItIitvKHRoaXMubW9udGgoKSwyKSsiLSIrbyh0aGlzLmRheSgpLDIpfX0pLG4ocy5wcm90b3R5cGUse192YWxpZGF0ZUxldmVsOjAsbmV3RGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIG51bGw9PXQ/dGhpcy50b2RheSgpOih0LnllYXImJih0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHI9dC5kYXkoKSxlPXQubW9udGgoKSx0PXQueWVhcigpKSxuZXcgYSh0aGlzLHQsZSxyKSl9LHRvZGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbUpTRGF0ZShuZXcgRGF0ZSl9LGVwb2NoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKS55ZWFyKCk8MD90aGlzLmxvY2FsLmVwb2Noc1swXTp0aGlzLmxvY2FsLmVwb2Noc1sxXX0sZm9ybWF0WWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4oZS55ZWFyKCk8MD8iLSI6IiIpK28oTWF0aC5hYnMoZS55ZWFyKCkpLDQpfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLDEyfSxtb250aE9mWWVhcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRNb250aCk7cmV0dXJuKHIubW9udGgoKSt0aGlzLm1vbnRoc0luWWVhcihyKS10aGlzLmZpcnN0TW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHIpK3RoaXMubWluTW9udGh9LGZyb21Nb250aE9mWWVhcjpmdW5jdGlvbih0LGUpe3ZhciByPShlK3RoaXMuZmlyc3RNb250aC0yKnRoaXMubWluTW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHQpK3RoaXMubWluTW9udGg7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQscix0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRNb250aCkscn0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4gdGhpcy5sZWFwWWVhcihlKT8zNjY6MzY1fSxkYXlPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIG4udG9KRCgpLXRoaXMubmV3RGF0ZShuLnllYXIoKSx0aGlzLmZyb21Nb250aE9mWWVhcihuLnllYXIoKSx0aGlzLm1pbk1vbnRoKSx0aGlzLm1pbkRheSkudG9KRCgpKzF9LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gN30sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybihNYXRoLmZsb29yKHRoaXMudG9KRChuKSkrMikldGhpcy5kYXlzSW5XZWVrKCl9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkse319LGFkZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHRoaXMuX2NvcnJlY3RBZGQodCx0aGlzLl9hZGQodCxlLHIpLGUscil9LF9hZGQ6ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKywiZCI9PT1yfHwidyI9PT1yKXt2YXIgbj10LnRvSkQoKStlKigidyI9PT1yP3RoaXMuZGF5c0luV2VlaygpOjEpLGk9dC5jYWxlbmRhcigpLmZyb21KRChuKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLFtpLnllYXIoKSxpLm1vbnRoKCksaS5kYXkoKV19dHJ5e3ZhciBhPXQueWVhcigpKygieSI9PT1yP2U6MCksbz10Lm1vbnRoT2ZZZWFyKCkrKCJtIj09PXI/ZTowKTtpPXQuZGF5KCk7InkiPT09cj8odC5tb250aCgpIT09dGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSYmKG89dGhpcy5uZXdEYXRlKGEsdC5tb250aCgpLHRoaXMubWluRGF5KS5tb250aE9mWWVhcigpKSxvPU1hdGgubWluKG8sdGhpcy5tb250aHNJblllYXIoYSkpLGk9TWF0aC5taW4oaSx0aGlzLmRheXNJbk1vbnRoKGEsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSkpKToibSI9PT1yJiYoIWZ1bmN0aW9uKHQpe2Zvcig7bzx0Lm1pbk1vbnRoOylhLS0sbys9dC5tb250aHNJblllYXIoYSk7Zm9yKHZhciBlPXQubW9udGhzSW5ZZWFyKGEpO28+ZS0xK3QubWluTW9udGg7KWErKyxvLT1lLGU9dC5tb250aHNJblllYXIoYSl9KHRoaXMpLGk9TWF0aC5taW4oaSx0aGlzLmRheXNJbk1vbnRoKGEsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSkpKTt2YXIgcz1bYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pLGldO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sc31jYXRjaCh0KXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sdH19LF9jb3JyZWN0QWRkOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCEodGhpcy5oYXNZZWFyWmVyb3x8InkiIT09biYmIm0iIT09bnx8MCE9PWVbMF0mJnQueWVhcigpPjA9PWVbMF0+MCkpe3ZhciBpPXt5OlsxLDEsInkiXSxtOlsxLHRoaXMubW9udGhzSW5ZZWFyKC0xKSwibSJdLHc6W3RoaXMuZGF5c0luV2VlaygpLHRoaXMuZGF5c0luWWVhcigtMSksImQiXSxkOlsxLHRoaXMuZGF5c0luWWVhcigtMSksImQiXX1bbl0sYT1yPDA/LTE6MTtlPXRoaXMuX2FkZCh0LHIqaVswXSthKmlbMV0saVsyXSl9cmV0dXJuIHQuZGF0ZShlWzBdLGVbMV0sZVsyXSl9LHNldDpmdW5jdGlvbih0LGUscil7dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7dmFyIG49InkiPT09cj9lOnQueWVhcigpLGk9Im0iPT09cj9lOnQubW9udGgoKSxhPSJkIj09PXI/ZTp0LmRheSgpO3JldHVybiJ5IiE9PXImJiJtIiE9PXJ8fChhPU1hdGgubWluKGEsdGhpcy5kYXlzSW5Nb250aChuLGkpKSksdC5kYXRlKG4saSxhKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dGhpcy5fdmFsaWRhdGVMZXZlbCsrO3ZhciBuPXRoaXMuaGFzWWVhclplcm98fDAhPT10O2lmKG4pe3ZhciBpPXRoaXMubmV3RGF0ZSh0LGUsdGhpcy5taW5EYXkpO249ZT49dGhpcy5taW5Nb250aCYmZS10aGlzLm1pbk1vbnRoPHRoaXMubW9udGhzSW5ZZWFyKGkpJiZyPj10aGlzLm1pbkRheSYmci10aGlzLm1pbkRheTx0aGlzLmRheXNJbk1vbnRoKGkpfXJldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sbn0sdG9KU0RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIGMuaW5zdGFuY2UoKS5mcm9tSkQodGhpcy50b0pEKG4pKS50b0pTRGF0ZSgpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZyb21KRChjLmluc3RhbmNlKCkuZnJvbUpTRGF0ZSh0KS50b0pEKCkpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsbil7aWYodC55ZWFyKXtpZigwPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmdGhpcy5uYW1lIT09dC5jYWxlbmRhcigpLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpLnJlcGxhY2UoL1x7MVx9Lyx0LmNhbGVuZGFyKCkubG9jYWwubmFtZSk7cmV0dXJuIHR9dHJ5e2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKywxPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuaXNWYWxpZCh0LGUscikpdGhyb3cgbi5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0saX1jYXRjaCh0KXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sdH19fSksbC5wcm90b3R5cGU9bmV3IHMsbihsLnByb3RvdHlwZSx7bmFtZToiR3JlZ29yaWFuIixqZEVwb2NoOjE3MjE0MjUuNSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJHcmVnb3JpYW4iLGVwb2NoczpbIkJDRSIsIkNFIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoibW0vZGQveXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTAmJih0JTEwMCE9MHx8dCU0MDA9PTApfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCg0LShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7dD1uLnllYXIoKSxlPW4ubW9udGgoKSxyPW4uZGF5KCksdDwwJiZ0KyssZTwzJiYoZSs9MTIsdC0tKTt2YXIgaT1NYXRoLmZsb29yKHQvMTAwKSxhPTItaStNYXRoLmZsb29yKGkvNCk7cmV0dXJuIE1hdGguZmxvb3IoMzY1LjI1Kih0KzQ3MTYpKStNYXRoLmZsb29yKDMwLjYwMDEqKGUrMSkpK3IrYS0xNTI0LjV9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQrLjUpLHI9TWF0aC5mbG9vcigoZS0xODY3MjE2LjI1KS8zNjUyNC4yNSksbj0ocj1lKzErci1NYXRoLmZsb29yKHIvNCkpKzE1MjQsaT1NYXRoLmZsb29yKChuLTEyMi4xKS8zNjUuMjUpLGE9TWF0aC5mbG9vcigzNjUuMjUqaSksbz1NYXRoLmZsb29yKChuLWEpLzMwLjYwMDEpLHM9bi1hLU1hdGguZmxvb3IoMzAuNjAwMSpvKSxsPW8tKG8+MTMuNT8xMzoxKSxjPWktKGw+Mi41PzQ3MTY6NDcxNSk7cmV0dXJuIGM8PTAmJmMtLSx0aGlzLm5ld0RhdGUoYyxsLHMpfSx0b0pTRGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSxpPW5ldyBEYXRlKG4ueWVhcigpLG4ubW9udGgoKS0xLG4uZGF5KCkpO3JldHVybiBpLnNldEhvdXJzKDApLGkuc2V0TWludXRlcygwKSxpLnNldFNlY29uZHMoMCksaS5zZXRNaWxsaXNlY29uZHMoMCksaS5zZXRIb3VycyhpLmdldEhvdXJzKCk+MTI/aS5nZXRIb3VycygpKzI6MCksaX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5uZXdEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCkrMSx0LmdldERhdGUoKSl9fSk7dmFyIGM9ZS5leHBvcnRzPW5ldyBpO2MuY2RhdGU9YSxjLmJhc2VDYWxlbmRhcj1zLGMuY2FsZW5kYXJzLmdyZWdvcmlhbj1sfSx7Im9iamVjdC1hc3NpZ24iOjQ5OX1dLDYyMjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIm9iamVjdC1hc3NpZ24iKSxpPXQoIi4vbWFpbiIpO24oaS5yZWdpb25hbE9wdGlvbnNbIiJdLHtpbnZhbGlkQXJndW1lbnRzOiJJbnZhbGlkIGFyZ3VtZW50cyIsaW52YWxpZEZvcm1hdDoiQ2Fubm90IGZvcm1hdCBhIGRhdGUgZnJvbSBhbm90aGVyIGNhbGVuZGFyIixtaXNzaW5nTnVtYmVyQXQ6Ik1pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uIHswfSIsdW5rbm93bk5hbWVBdDoiVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uIHswfSIsdW5leHBlY3RlZExpdGVyYWxBdDoiVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uIHswfSIsdW5leHBlY3RlZFRleHQ6IkFkZGl0aW9uYWwgdGV4dCBmb3VuZCBhdCBlbmQifSksaS5sb2NhbD1pLnJlZ2lvbmFsT3B0aW9uc1siIl0sbihpLmNkYXRlLnByb3RvdHlwZSx7Zm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKGU9dCx0PSIiKSx0aGlzLl9jYWxlbmRhci5mb3JtYXREYXRlKHR8fCIiLHRoaXMsZSl9fSksbihpLmJhc2VDYWxlbmRhci5wcm90b3R5cGUse1VOSVhfRVBPQ0g6aS5pbnN0YW5jZSgpLm5ld0RhdGUoMTk3MCwxLDEpLnRvSkQoKSxTRUNTX1BFUl9EQVk6ODY0MDAsVElDS1NfRVBPQ0g6aS5pbnN0YW5jZSgpLmpkRXBvY2gsVElDS1NfUEVSX0RBWTo4NjRlOSxBVE9NOiJ5eXl5LW1tLWRkIixDT09LSUU6IkQsIGRkIE0geXl5eSIsRlVMTDoiREQsIE1NIGQsIHl5eXkiLElTT184NjAxOiJ5eXl5LW1tLWRkIixKVUxJQU46IkoiLFJGQ184MjI6IkQsIGQgTSB5eSIsUkZDXzg1MDoiREQsIGRkLU0teXkiLFJGQ18xMDM2OiJELCBkIE0geXkiLFJGQ18xMTIzOiJELCBkIE0geXl5eSIsUkZDXzI4MjI6IkQsIGQgTSB5eXl5IixSU1M6IkQsIGQgTSB5eSIsVElDS1M6IiEiLFRJTUVTVEFNUDoiQCIsVzNDOiJ5eXl5LW1tLWRkIixmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIiE9dHlwZW9mIHQmJihyPWUsZT10LHQ9IiIpLCFlKXJldHVybiIiO2lmKGUuY2FsZW5kYXIoKSE9PXRoaXMpdGhyb3cgaS5sb2NhbC5pbnZhbGlkRm9ybWF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZEZvcm1hdDt0PXR8fHRoaXMubG9jYWwuZGF0ZUZvcm1hdDtmb3IodmFyIG4sYSxvLHMsbD0ocj1yfHx7fSkuZGF5TmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0LGM9ci5kYXlOYW1lc3x8dGhpcy5sb2NhbC5kYXlOYW1lcyx1PXIubW9udGhOdW1iZXJzfHx0aGlzLmxvY2FsLm1vbnRoTnVtYmVycyxmPXIubW9udGhOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydCxoPXIubW9udGhOYW1lc3x8dGhpcy5sb2NhbC5tb250aE5hbWVzLHA9KHIuY2FsY3VsYXRlV2Vla3x8dGhpcy5sb2NhbC5jYWxjdWxhdGVXZWVrLGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTE7dytuPHQubGVuZ3RoJiZ0LmNoYXJBdCh3K24pPT09ZTspbisrO3JldHVybiB3Kz1uLTEsTWF0aC5mbG9vcihuLyhyfHwxKSk+MX0pLGQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9IiIrZTtpZihwKHQsbikpZm9yKDtpLmxlbmd0aDxyOylpPSIwIitpO3JldHVybiBpfSxnPXRoaXMsbT1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdT91LmNhbGwoZyx0LHAoIm0iKSk6eChkKCJtIix0Lm1vbnRoKCksMikpfSx2PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/ImZ1bmN0aW9uIj09dHlwZW9mIGg/aC5jYWxsKGcsdCk6aFt0Lm1vbnRoKCktZy5taW5Nb250aF06ImZ1bmN0aW9uIj09dHlwZW9mIGY/Zi5jYWxsKGcsdCk6Zlt0Lm1vbnRoKCktZy5taW5Nb250aF19LHk9dGhpcy5sb2NhbC5kaWdpdHMseD1mdW5jdGlvbih0KXtyZXR1cm4gci5sb2NhbE51bWJlcnMmJnk/eSh0KTp0fSxiPSIiLF89ITEsdz0wO3c8dC5sZW5ndGg7dysrKWlmKF8pIiciIT09dC5jaGFyQXQodyl8fHAoIiciKT9iKz10LmNoYXJBdCh3KTpfPSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KHcpKXtjYXNlImQiOmIrPXgoZCgiZCIsZS5kYXkoKSwyKSk7YnJlYWs7Y2FzZSJEIjpiKz0obj0iRCIsYT1lLmRheU9mV2VlaygpLG89bCxzPWMscChuKT9zW2FdOm9bYV0pO2JyZWFrO2Nhc2UibyI6Yis9ZCgibyIsZS5kYXlPZlllYXIoKSwzKTticmVhaztjYXNlInciOmIrPWQoInciLGUud2Vla09mWWVhcigpLDIpO2JyZWFrO2Nhc2UibSI6Yis9bShlKTticmVhaztjYXNlIk0iOmIrPXYoZSxwKCJNIikpO2JyZWFrO2Nhc2UieSI6Yis9cCgieSIsMik/ZS55ZWFyKCk6KGUueWVhcigpJTEwMDwxMD8iMCI6IiIpK2UueWVhcigpJTEwMDticmVhaztjYXNlIlkiOnAoIlkiLDIpLGIrPWUuZm9ybWF0WWVhcigpO2JyZWFrO2Nhc2UiSiI6Yis9ZS50b0pEKCk7YnJlYWs7Y2FzZSJAIjpiKz0oZS50b0pEKCktdGhpcy5VTklYX0VQT0NIKSp0aGlzLlNFQ1NfUEVSX0RBWTticmVhaztjYXNlIiEiOmIrPShlLnRvSkQoKS10aGlzLlRJQ0tTX0VQT0NIKSp0aGlzLlRJQ0tTX1BFUl9EQVk7YnJlYWs7Y2FzZSInIjpwKCInIik/Yis9IiciOl89ITA7YnJlYWs7ZGVmYXVsdDpiKz10LmNoYXJBdCh3KX1yZXR1cm4gYn0scGFyc2VEYXRlOmZ1bmN0aW9uKHQsZSxyKXtpZihudWxsPT1lKXRocm93IGkubG9jYWwuaW52YWxpZEFyZ3VtZW50c3x8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRBcmd1bWVudHM7aWYoIiI9PT0oZT0ib2JqZWN0Ij09dHlwZW9mIGU/ZS50b1N0cmluZygpOmUrIiIpKXJldHVybiBudWxsO3Q9dHx8dGhpcy5sb2NhbC5kYXRlRm9ybWF0O3ZhciBuPShyPXJ8fHt9KS5zaG9ydFllYXJDdXRvZmZ8fHRoaXMuc2hvcnRZZWFyQ3V0b2ZmO249InN0cmluZyIhPXR5cGVvZiBuP246dGhpcy50b2RheSgpLnllYXIoKSUxMDArcGFyc2VJbnQobiwxMCk7Zm9yKHZhciBhPXIuZGF5TmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0LG89ci5kYXlOYW1lc3x8dGhpcy5sb2NhbC5kYXlOYW1lcyxzPXIucGFyc2VNb250aHx8dGhpcy5sb2NhbC5wYXJzZU1vbnRoLGw9ci5tb250aE51bWJlcnN8fHRoaXMubG9jYWwubW9udGhOdW1iZXJzLGM9ci5tb250aE5hbWVzU2hvcnR8fHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0LHU9ci5tb250aE5hbWVzfHx0aGlzLmxvY2FsLm1vbnRoTmFtZXMsZj0tMSxoPS0xLHA9LTEsZD0tMSxnPS0xLG09ITEsdj0hMSx5PWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTE7QStuPHQubGVuZ3RoJiZ0LmNoYXJBdChBK24pPT09ZTspbisrO3JldHVybiBBKz1uLTEsTWF0aC5mbG9vcihuLyhyfHwxKSk+MX0seD1mdW5jdGlvbih0LHIpe3ZhciBuPXkodCxyKSxhPVsyLDMsbj80OjIsbj80OjIsMTAsMTEsMjBdWyJveVlKQCEiLmluZGV4T2YodCkrMV0sbz1uZXcgUmVnRXhwKCJeLT9cXGR7MSwiK2ErIn0iKSxzPWUuc3Vic3RyaW5nKE0pLm1hdGNoKG8pO2lmKCFzKXRocm93KGkubG9jYWwubWlzc2luZ051bWJlckF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0ubWlzc2luZ051bWJlckF0KS5yZXBsYWNlKC9cezBcfS8sTSk7cmV0dXJuIE0rPXNbMF0ubGVuZ3RoLHBhcnNlSW50KHNbMF0sMTApfSxiPXRoaXMsXz1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKXt5KCJtIik7dmFyIHQ9bC5jYWxsKGIsZS5zdWJzdHJpbmcoTSkpO3JldHVybiBNKz10Lmxlbmd0aCx0fXJldHVybiB4KCJtIil9LHc9ZnVuY3Rpb24odCxyLG4sYSl7Zm9yKHZhciBvPXkodCxhKT9uOnIscz0wO3M8by5sZW5ndGg7cysrKWlmKGUuc3Vic3RyKE0sb1tzXS5sZW5ndGgpLnRvTG93ZXJDYXNlKCk9PT1vW3NdLnRvTG93ZXJDYXNlKCkpcmV0dXJuIE0rPW9bc10ubGVuZ3RoLHMrYi5taW5Nb250aDt0aHJvdyhpLmxvY2FsLnVua25vd25OYW1lQXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmtub3duTmFtZUF0KS5yZXBsYWNlKC9cezBcfS8sTSl9LFQ9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdSl7dmFyIHQ9eSgiTSIpP3UuY2FsbChiLGUuc3Vic3RyaW5nKE0pKTpjLmNhbGwoYixlLnN1YnN0cmluZyhNKSk7cmV0dXJuIE0rPXQubGVuZ3RoLHR9cmV0dXJuIHcoIk0iLGMsdSl9LGs9ZnVuY3Rpb24oKXtpZihlLmNoYXJBdChNKSE9PXQuY2hhckF0KEEpKXRocm93KGkubG9jYWwudW5leHBlY3RlZExpdGVyYWxBdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLnVuZXhwZWN0ZWRMaXRlcmFsQXQpLnJlcGxhY2UoL1x7MFx9LyxNKTtNKyt9LE09MCxBPTA7QTx0Lmxlbmd0aDtBKyspaWYodikiJyIhPT10LmNoYXJBdChBKXx8eSgiJyIpP2soKTp2PSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KEEpKXtjYXNlImQiOmQ9eCgiZCIpO2JyZWFrO2Nhc2UiRCI6dygiRCIsYSxvKTticmVhaztjYXNlIm8iOmc9eCgibyIpO2JyZWFrO2Nhc2UidyI6eCgidyIpO2JyZWFrO2Nhc2UibSI6cD1fKCk7YnJlYWs7Y2FzZSJNIjpwPVQoKTticmVhaztjYXNlInkiOnZhciBTPUE7bT0heSgieSIsMiksQT1TLGg9eCgieSIsMik7YnJlYWs7Y2FzZSJZIjpoPXgoIlkiLDIpO2JyZWFrO2Nhc2UiSiI6Zj14KCJKIikrLjUsIi4iPT09ZS5jaGFyQXQoTSkmJihNKysseCgiSiIpKTticmVhaztjYXNlIkAiOmY9eCgiQCIpL3RoaXMuU0VDU19QRVJfREFZK3RoaXMuVU5JWF9FUE9DSDticmVhaztjYXNlIiEiOmY9eCgiISIpL3RoaXMuVElDS1NfUEVSX0RBWSt0aGlzLlRJQ0tTX0VQT0NIO2JyZWFrO2Nhc2UiKiI6TT1lLmxlbmd0aDticmVhaztjYXNlIiciOnkoIiciKT9rKCk6dj0hMDticmVhaztkZWZhdWx0OmsoKX1pZihNPGUubGVuZ3RoKXRocm93IGkubG9jYWwudW5leHBlY3RlZFRleHR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmV4cGVjdGVkVGV4dDtpZigtMT09PWg/aD10aGlzLnRvZGF5KCkueWVhcigpOmg8MTAwJiZtJiYoaCs9LTE9PT1uPzE5MDA6dGhpcy50b2RheSgpLnllYXIoKS10aGlzLnRvZGF5KCkueWVhcigpJTEwMC0oaDw9bj8wOjEwMCkpLCJzdHJpbmciPT10eXBlb2YgcCYmKHA9cy5jYWxsKHRoaXMsaCxwKSksZz4tMSl7cD0xLGQ9Zztmb3IodmFyIEU9dGhpcy5kYXlzSW5Nb250aChoLHApO2Q+RTtFPXRoaXMuZGF5c0luTW9udGgoaCxwKSlwKyssZC09RX1yZXR1cm4gZj4tMT90aGlzLmZyb21KRChmKTp0aGlzLm5ld0RhdGUoaCxwLGQpfSxkZXRlcm1pbmVEYXRlOmZ1bmN0aW9uKHQsZSxyLG4saSl7ciYmIm9iamVjdCIhPXR5cGVvZiByJiYoaT1uLG49cixyPW51bGwpLCJzdHJpbmciIT10eXBlb2YgbiYmKGk9bixuPSIiKTt2YXIgYT10aGlzO3JldHVybiBlPWU/ZS5uZXdEYXRlKCk6bnVsbCx0PW51bGw9PXQ/ZToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBhLnBhcnNlRGF0ZShuLHQsaSl9Y2F0Y2godCl7fWZvcih2YXIgZT0oKHQ9dC50b0xvd2VyQ2FzZSgpKS5tYXRjaCgvXmMvKSYmcj9yLm5ld0RhdGUoKTpudWxsKXx8YS50b2RheSgpLG89LyhbKy1dP1swLTldKylccyooZHx3fG18eSk/L2cscz1vLmV4ZWModCk7czspZS5hZGQocGFyc2VJbnQoc1sxXSwxMCksc1syXXx8ImQiKSxzPW8uZXhlYyh0KTtyZXR1cm4gZX0odCk6Im51bWJlciI9PXR5cGVvZiB0P2lzTmFOKHQpfHx0PT09MS8wfHx0PT09LTEvMD9lOmEudG9kYXkoKS5hZGQodCwiZCIpOmEubmV3RGF0ZSh0KX19KX0seyIuL21haW4iOjYyMSwib2JqZWN0LWFzc2lnbiI6NDk5fV0sNjIzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImN3aXNlLWNvbXBpbGVyIikoe2FyZ3M6WyJhcnJheSIse29mZnNldDpbMV0sYXJyYXk6MH0sInNjYWxhciIsInNjYWxhciIsImluZGV4Il0scHJlOntib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie1xuICAgICAgICB2YXIgX2lubGluZV8xX2RhID0gX2lubGluZV8xX2FyZzBfIC0gX2lubGluZV8xX2FyZzNfXG4gICAgICAgIHZhciBfaW5saW5lXzFfZGIgPSBfaW5saW5lXzFfYXJnMV8gLSBfaW5saW5lXzFfYXJnM19cbiAgICAgICAgaWYoKF9pbmxpbmVfMV9kYSA+PSAwKSAhPT0gKF9pbmxpbmVfMV9kYiA+PSAwKSkge1xuICAgICAgICAgIF9pbmxpbmVfMV9hcmcyXy5wdXNoKF9pbmxpbmVfMV9hcmc0X1swXSArIDAuNSArIDAuNSAqIChfaW5saW5lXzFfZGEgKyBfaW5saW5lXzFfZGIpIC8gKF9pbmxpbmVfMV9kYSAtIF9pbmxpbmVfMV9kYikpXG4gICAgICAgIH1cbiAgICAgIH0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6Il9pbmxpbmVfMV9hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOlsiX2lubGluZV8xX2RhIiwiX2lubGluZV8xX2RiIl19LGZ1bmNOYW1lOiJ6ZXJvQ3Jvc3NpbmdzIn0pfSx7ImN3aXNlLWNvbXBpbGVyIjoxNTF9XSw2MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIGU9K2V8fDAsbih0LmhpKHQuc2hhcGVbMF0tMSkscixlKSxyfTt2YXIgbj10KCIuL2xpYi96Yy1jb3JlIil9LHsiLi9saWIvemMtY29yZSI6NjIzfV0sNjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1be3BhdGg6IiIsYmFja29mZjowfSx7cGF0aDoiTS0yLjQsLTNWM0wwLjYsMFoiLGJhY2tvZmY6LjZ9LHtwYXRoOiJNLTMuNywtMi41VjIuNUwxLjMsMFoiLGJhY2tvZmY6MS4zfSx7cGF0aDoiTS00LjQ1LC0zTC0xLjY1LC0wLjJWMC4yTC00LjQ1LDNMMS41NSwwWiIsYmFja29mZjoxLjU1fSx7cGF0aDoiTS0yLjIsLTIuMkwtMC4yLC0wLjJWMC4yTC0yLjIsMi4yTC0xLjQsM0wxLjYsMEwtMS40LC0zWiIsYmFja29mZjoxLjZ9LHtwYXRoOiJNLTQuNCwtMi4xTC0wLjYsLTAuMlYwLjJMLTQuNCwyLjFMLTQsM0wyLDBMLTQsLTNaIixiYWNrb2ZmOjJ9LHtwYXRoOiJNMiwwQTIsMiAwIDEsMSAwLC0yQTIsMiAwIDAsMSAyLDBaIixiYWNrb2ZmOjAsbm9Sb3RhdGU6ITB9LHtwYXRoOiJNMiwyVi0ySC0yVjJaIixiYWNrb2ZmOjAsbm9Sb3RhdGU6ITB9XX0se31dLDYyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2Fycm93X3BhdGhzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTt0KCIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyIpO2UuZXhwb3J0cz1vKCJhbm5vdGF0aW9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHRleHRhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxmb250Omkoe2VkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyIsY29sb3JFZGl0VHlwZToiYXJyYXlkcmF3In0pLHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoiY2VudGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0sdmFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJtaWRkbGUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcnBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHNob3dhcnJvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxhcnJvd2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93aGVhZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sc3RhcnRhcnJvd2hlYWQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDpuLmxlbmd0aCxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93c2lkZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiZW5kIiwic3RhcnQiXSxleHRyYXM6WyJub25lIl0sZGZsdDoiZW5kIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3dzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMyxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc3RhcnRhcnJvd3NpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxhcnJvd3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc3RhcnRzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXg6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXk6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6InBpeGVsIix2YWx1ZXM6WyJwaXhlbCIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSxheXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoicGl4ZWwiLHZhbHVlczpbInBpeGVsIixhLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixhLmlkUmVnZXgueC50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHg6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHhzaGlmdDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxjbGlja3Rvc2hvdzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwib25vZmYiLCJvbm91dCJdLGRmbHQ6ITEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhjbGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXJyYXlkcmF3In0seWNsaWNrOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGhvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZm9udDppKHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLGVkaXRUeXBlOiJhcnJheWRyYXcifSxjYXB0dXJlZXZlbnRzOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOntyZWY6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifX19KX0seyIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyI6NzQ2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjgzNCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4vYXJyb3dfcGF0aHMiOjYyNX1dLDYyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuL2RyYXciKS5kcmF3O2Z1bmN0aW9uIG8odCl7dmFyIGU9dC5fZnVsbExheW91dDtuLmZpbHRlclZpc2libGUoZS5hbm5vdGF0aW9ucykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9aS5nZXRGcm9tSWQodCxlLnhyZWYpLG49aS5nZXRGcm9tSWQodCxlLnlyZWYpLGE9aS5nZXRSZWZUeXBlKGUueHJlZiksbz1pLmdldFJlZlR5cGUoZS55cmVmKTtlLl9leHRyZW1lcz17fSwicmFuZ2UiPT09YSYmcyhlLHIpLCJyYW5nZSI9PT1vJiZzKGUsbil9KSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG49ZS5faWQsYT1uLmNoYXJBdCgwKSxvPXRbYV0scz10WyJhIithXSxsPXRbYSsicmVmIl0sYz10WyJhIithKyJyZWYiXSx1PXRbIl8iK2ErInBhZHBsdXMiXSxmPXRbIl8iK2ErInBhZG1pbnVzIl0saD17eDoxLHk6LTF9W2FdKnRbYSsic2hpZnQiXSxwPTMqdC5hcnJvd3NpemUqdC5hcnJvd3dpZHRofHwwLGQ9cCtoLGc9cC1oLG09Myp0LnN0YXJ0YXJyb3dzaXplKnQuYXJyb3d3aWR0aHx8MCx2PW0raCx5PW0taDtpZihjPT09bCl7dmFyIHg9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpkLHBwYWRtaW51czpnfSksYj1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhzKV0se3BwYWRwbHVzOk1hdGgubWF4KHUsdikscHBhZG1pbnVzOk1hdGgubWF4KGYseSl9KTtyPXttaW46W3gubWluWzBdLGIubWluWzBdXSxtYXg6W3gubWF4WzBdLGIubWF4WzBdXX19ZWxzZSB2PXM/ditzOnYseT1zP3ktczp5LHI9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpNYXRoLm1heCh1LGQsdikscHBhZG1pbnVzOk1hdGgubWF4KGYsZyx5KX0pO3QuX2V4dHJlbWVzW25dPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYobi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKXJldHVybiBuLnN5bmNPckFzeW5jKFthLG9dLHQpfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi9kcmF3Ijo2MzJ9XSw2Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yO2Z1bmN0aW9uIG8odCxlKXt2YXIgcixuLGksYSxvLGwsYyx1PXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsZj1bXSxoPVtdLHA9W10sZD0oZXx8W10pLmxlbmd0aDtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKWlmKGE9KGk9dVtyXSkuY2xpY2t0b3Nob3cpe2ZvcihuPTA7bjxkO24rKylpZihsPShvPWVbbl0pLnhheGlzLGM9by55YXhpcyxsLl9pZD09PWkueHJlZiYmYy5faWQ9PT1pLnlyZWYmJmwuZDJyKG8ueCk9PT1zKGkuX3hjbGljayxsKSYmYy5kMnIoby55KT09PXMoaS5feWNsaWNrLGMpKXsoaS52aXNpYmxlPyJvbm91dCI9PT1hP2g6cDpmKS5wdXNoKHIpO2JyZWFrfW49PT1kJiZpLnZpc2libGUmJiJvbm91dCI9PT1hJiZoLnB1c2gocil9cmV0dXJue29uOmYsb2ZmOmgsZXhwbGljaXRPZmY6cH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiJsb2ciPT09ZS50eXBlP2UubDJyKHQpOmUuZDJyKHQpfWUuZXhwb3J0cz17aGFzQ2xpY2tUb1Nob3c6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHQsZSk7cmV0dXJuIHIub24ubGVuZ3RoPjB8fHIuZXhwbGljaXRPZmYubGVuZ3RoPjB9LG9uQ2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcixzLGw9byh0LGUpLGM9bC5vbix1PWwub2ZmLmNvbmNhdChsLmV4cGxpY2l0T2ZmKSxmPXt9LGg9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucztpZighYy5sZW5ndGgmJiF1Lmxlbmd0aClyZXR1cm47Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKykocz1hKHQubGF5b3V0LCJhbm5vdGF0aW9ucyIsaFtjW3JdXSkpLm1vZGlmeUl0ZW0oInZpc2libGUiLCEwKSxuLmV4dGVuZEZsYXQoZixzLmdldFVwZGF0ZU9iaigpKTtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKShzPWEodC5sYXlvdXQsImFubm90YXRpb25zIixoW3Vbcl1dKSkubW9kaWZ5SXRlbSgidmlzaWJsZSIsITEpLG4uZXh0ZW5kRmxhdChmLHMuZ2V0VXBkYXRlT2JqKCkpO3JldHVybiBpLmNhbGwoInVwZGF0ZSIsdCx7fSxmKX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTF9XSw2Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXthKCJvcGFjaXR5Iik7dmFyIG89YSgiYmdjb2xvciIpLHM9YSgiYm9yZGVyY29sb3IiKSxsPWkub3BhY2l0eShzKTthKCJib3JkZXJwYWQiKTt2YXIgYz1hKCJib3JkZXJ3aWR0aCIpLHU9YSgic2hvd2Fycm93Iik7aWYoYSgidGV4dCIsdT8iICI6ci5fZGZsdFRpdGxlLmFubm90YXRpb24pLGEoInRleHRhbmdsZSIpLG4uY29lcmNlRm9udChhLCJmb250IixyLmZvbnQpLGEoIndpZHRoIiksYSgiYWxpZ24iKSxhKCJoZWlnaHQiKSYmYSgidmFsaWduIiksdSl7dmFyIGYsaCxwPWEoImFycm93c2lkZSIpOy0xIT09cC5pbmRleE9mKCJlbmQiKSYmKGY9YSgiYXJyb3doZWFkIiksaD1hKCJhcnJvd3NpemUiKSksLTEhPT1wLmluZGV4T2YoInN0YXJ0IikmJihhKCJzdGFydGFycm93aGVhZCIsZiksYSgic3RhcnRhcnJvd3NpemUiLGgpKSxhKCJhcnJvd2NvbG9yIixsP2UuYm9yZGVyY29sb3I6aS5kZWZhdWx0TGluZSksYSgiYXJyb3d3aWR0aCIsMioobCYmY3x8MSkpLGEoInN0YW5kb2ZmIiksYSgic3RhcnRzdGFuZG9mZiIpfXZhciBkPWEoImhvdmVydGV4dCIpLGc9ci5ob3ZlcmxhYmVsfHx7fTtpZihkKXt2YXIgbT1hKCJob3ZlcmxhYmVsLmJnY29sb3IiLGcuYmdjb2xvcnx8KGkub3BhY2l0eShvKT9pLnJnYihvKTppLmRlZmF1bHRMaW5lKSksdj1hKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIixnLmJvcmRlcmNvbG9yfHxpLmNvbnRyYXN0KG0pKTtuLmNvZXJjZUZvbnQoYSwiaG92ZXJsYWJlbC5mb250Iix7ZmFtaWx5OmcuZm9udC5mYW1pbHksc2l6ZTpnLmZvbnQuc2l6ZSxjb2xvcjpnLmZvbnQuY29sb3J8fHZ9KX1hKCJjYXB0dXJlZXZlbnRzIiwhIWQpfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vY29sb3IiOjY0M31dLDYzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtlPWV8fHt9O3ZhciBvPSJsb2ciPT09ciYmImxpbmVhciI9PT1lLnR5cGUscz0ibGluZWFyIj09PXImJiJsb2ciPT09ZS50eXBlO2lmKG98fHMpZm9yKHZhciBsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGY9ZS5faWQuY2hhckF0KDApLGg9MDtoPHUubGVuZ3RoO2grKylsPXVbaF0sYz0iYW5ub3RhdGlvbnNbIitoKyJdLiIsbFtmKyJyZWYiXT09PWUuX2lkJiZwKGYpLGxbImEiK2YrInJlZiJdPT09ZS5faWQmJnAoImEiK2YpO2Z1bmN0aW9uIHAodCl7dmFyIHI9bFt0XSxzPW51bGw7cz1vP2kocixlLnJhbmdlKTpNYXRoLnBvdygxMCxyKSxuKHMpfHwocz1udWxsKSxhKGMrdCxzKX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjgwNSwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDYzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vY29tbW9uX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9dmFyIGw9YSgidmlzaWJsZSIpLGM9YSgiY2xpY2t0b3Nob3ciKTtpZihsfHxjKXtvKHQsZSxyLGEpO2Zvcih2YXIgdT1lLnNob3dhcnJvdyxmPVsieCIsInkiXSxoPVstMTAsLTMwXSxwPXtfZnVsbExheW91dDpyfSxkPTA7ZDwyO2QrKyl7dmFyIGc9ZltkXSxtPWkuY29lcmNlUmVmKHQsZSxwLGcsIiIsInBhcGVyIik7aWYoInBhcGVyIiE9PW0paS5nZXRGcm9tSWQocCxtKS5fYW5uSW5kaWNlcy5wdXNoKGUuX2luZGV4KTtpZihpLmNvZXJjZVBvc2l0aW9uKGUscCxhLG0sZywuNSksdSl7dmFyIHY9ImEiK2cseT1pLmNvZXJjZVJlZih0LGUscCx2LCJwaXhlbCIsWyJwaXhlbCIsInBhcGVyIl0pOyJwaXhlbCIhPT15JiZ5IT09bSYmKHk9ZVt2XT0icGl4ZWwiKTt2YXIgeD0icGl4ZWwiPT09eT9oW2RdOi40O2kuY29lcmNlUG9zaXRpb24oZSxwLGEseSx2LHgpfWEoZysiYW5jaG9yIiksYShnKyJzaGlmdCIpfWlmKG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLHUmJm4ubm9uZU9yQWxsKHQsZSxbImF4IiwiYXkiXSksYyl7dmFyIGI9YSgieGNsaWNrIiksXz1hKCJ5Y2xpY2siKTtlLl94Y2xpY2s9dm9pZCAwPT09Yj9lLng6aS5jbGVhblBvc2l0aW9uKGIscCxlLnhyZWYpLGUuX3ljbGljaz12b2lkIDA9PT1fP2UueTppLmNsZWFuUG9zaXRpb24oXyxwLGUueXJlZil9fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToiYW5ub3RhdGlvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjgyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi9hdHRyaWJ1dGVzIjo2MjYsIi4vY29tbW9uX2RlZmF1bHRzIjo2Mjl9XSw2MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clRyYW5zbGF0ZSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYz10KCIuLi9jb2xvciIpLHU9dCgiLi4vZHJhd2luZyIpLGY9dCgiLi4vZngiKSxoPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHA9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGQ9dCgiLi4vZHJhZ2VsZW1lbnQiKSxnPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixtPXQoIi4vZHJhd19hcnJvd19oZWFkIik7ZnVuY3Rpb24gdih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbZV18fHt9LG49bC5nZXRGcm9tSWQodCxyLnhyZWYpLGk9bC5nZXRGcm9tSWQodCxyLnlyZWYpO24mJm4uc2V0U2NhbGUoKSxpJiZpLnNldFNjYWxlKCkseCh0LHIsZSwhMSxuLGkpfWZ1bmN0aW9uIHkodCxlLHIsbixpKXt2YXIgYT1pW3JdLG89aVtyKyJyZWYiXSxzPS0xIT09ci5pbmRleE9mKCJ5IiksYz0iZG9tYWluIj09PWwuZ2V0UmVmVHlwZShvKSx1PXM/bi5oOm4udztyZXR1cm4gdD9jP2ErKHM/LWU6ZSkvdC5fbGVuZ3RoOnQucDJyKHQucjJwKGEpK2UpOmErKHM/LWU6ZSkvdX1mdW5jdGlvbiB4KHQsZSxyLGEsdix4KXt2YXIgYixfLHc9dC5fZnVsbExheW91dCxUPXQuX2Z1bGxMYXlvdXQuX3NpemUsaz10Ll9jb250ZXh0LmVkaXRzO2E/KGI9ImFubm90YXRpb24tIithLF89YSsiLmFubm90YXRpb25zIik6KGI9ImFubm90YXRpb24iLF89ImFubm90YXRpb25zIik7dmFyIE09Zyh0LmxheW91dCxfLGUpLEE9TS5tb2RpZnlCYXNlLFM9TS5tb2RpZnlJdGVtLEU9TS5nZXRVcGRhdGVPYmo7dy5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrYisnW2RhdGEtaW5kZXg9IicrcisnIl0nKS5yZW1vdmUoKTt2YXIgQz0iY2xpcCIrdy5fdWlkKyJfYW5uIityO2lmKGUuX2lucHV0JiYhMSE9PWUudmlzaWJsZSl7dmFyIEw9e3g6e30seTp7fX0sST0rZS50ZXh0YW5nbGV8fDAsUD13Ll9pbmZvbGF5ZXIuYXBwZW5kKCJnIikuY2xhc3NlZChiLCEwKS5hdHRyKCJkYXRhLWluZGV4IixTdHJpbmcocikpLnN0eWxlKCJvcGFjaXR5IixlLm9wYWNpdHkpLHo9UC5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQtZyIsITApLE89a1tlLnNob3dhcnJvdz8iYW5ub3RhdGlvblRhaWwiOiJhbm5vdGF0aW9uUG9zaXRpb24iXSxEPWUuY2FwdHVyZWV2ZW50c3x8ay5hbm5vdGF0aW9uVGV4dHx8TyxSPXouYXBwZW5kKCJnIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIixEPyJhbGwiOm51bGwpLmNhbGwocCwicG9pbnRlciIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7dC5fZHJhZ2dpbmc9ITEsdC5lbWl0KCJwbG90bHlfY2xpY2thbm5vdGF0aW9uIixZKG4uZXZlbnQpKX0pKTtlLmhvdmVydGV4dCYmUi5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXt2YXIgcj1lLmhvdmVybGFiZWwsbj1yLmZvbnQsaT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmLmxvbmVIb3Zlcih7eDA6aS5sZWZ0LWEubGVmdCx4MTppLnJpZ2h0LWEubGVmdCx5OihpLnRvcCtpLmJvdHRvbSkvMi1hLnRvcCx0ZXh0OmUuaG92ZXJ0ZXh0LGNvbG9yOnIuYmdjb2xvcixib3JkZXJDb2xvcjpyLmJvcmRlcmNvbG9yLGZvbnRGYW1pbHk6bi5mYW1pbHksZm9udFNpemU6bi5zaXplLGZvbnRDb2xvcjpuLmNvbG9yfSx7Y29udGFpbmVyOncuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOncuX3BhcGVyLm5vZGUoKSxnZDp0fSl9KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtmLmxvbmVVbmhvdmVyKHcuX2hvdmVybGF5ZXIubm9kZSgpKX0pKTt2YXIgRj1lLmJvcmRlcndpZHRoLEI9ZS5ib3JkZXJwYWQsTj1GK0Isaj1SLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmciKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixGKyJweCIpLmNhbGwoYy5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChjLmZpbGwsZS5iZ2NvbG9yKSxVPWUud2lkdGh8fGUuaGVpZ2h0LFY9dy5fdG9wY2xpcHMuc2VsZWN0QWxsKCIjIitDKS5kYXRhKFU/WzBdOltdKTtWLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImFubmNsaXAiLCEwKS5hdHRyKCJpZCIsQykuYXBwZW5kKCJyZWN0IiksVi5leGl0KCkucmVtb3ZlKCk7dmFyIHE9ZS5mb250LEg9dy5fbWV0YT9vLnRlbXBsYXRlU3RyaW5nKGUudGV4dCx3Ll9tZXRhKTplLnRleHQsRz1SLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImFubm90YXRpb24tdGV4dCIsITApLnRleHQoSCk7ay5hbm5vdGF0aW9uVGV4dD9HLmNhbGwoaC5tYWtlRWRpdGFibGUse2RlbGVnYXRlOlIsZ2Q6dH0pLmNhbGwoVykub24oImVkaXQiLChmdW5jdGlvbihyKXtlLnRleHQ9cix0aGlzLmNhbGwoVyksUygidGV4dCIsciksdiYmdi5hdXRvcmFuZ2UmJkEodi5fbmFtZSsiLmF1dG9yYW5nZSIsITApLHgmJnguYXV0b3JhbmdlJiZBKHguX25hbWUrIi5hdXRvcmFuZ2UiLCEwKSxpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxFKCkpfSkpOkcuY2FsbChXKX1lbHNlIG4uc2VsZWN0QWxsKCIjIitDKS5yZW1vdmUoKTtmdW5jdGlvbiBZKHQpe3ZhciBuPXtpbmRleDpyLGFubm90YXRpb246ZS5faW5wdXQsZnVsbEFubm90YXRpb246ZSxldmVudDp0fTtyZXR1cm4gYSYmKG4uc3VicGxvdElkPWEpLG59ZnVuY3Rpb24gVyhyKXtyZXR1cm4gci5jYWxsKHUuZm9udCxxKS5hdHRyKHsidGV4dC1hbmNob3IiOntsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9W2UuYWxpZ25dfHwibWlkZGxlIn0pLGguY29udmVydFRvVHNwYW5zKHIsdCxYKSxyfWZ1bmN0aW9uIFgoKXt2YXIgcj1HLnNlbGVjdEFsbCgiYSIpOzE9PT1yLnNpemUoKSYmci50ZXh0KCk9PT1HLnRleHQoKSYmUi5pbnNlcnQoImEiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHsieGxpbms6eGxpbms6aHJlZiI6ci5hdHRyKCJ4bGluazpocmVmIiksInhsaW5rOnhsaW5rOnNob3ciOnIuYXR0cigieGxpbms6c2hvdyIpfSkuc3R5bGUoe2N1cnNvcjoicG9pbnRlciJ9KS5ub2RlKCkuYXBwZW5kQ2hpbGQoai5ub2RlKCkpO3ZhciBuPVIuc2VsZWN0KCIuYW5ub3RhdGlvbi10ZXh0LW1hdGgtZ3JvdXAiKSxmPSFuLmVtcHR5KCksZz11LmJCb3goKGY/bjpHKS5ub2RlKCkpLGI9Zy53aWR0aCxfPWcuaGVpZ2h0LE09ZS53aWR0aHx8YixEPWUuaGVpZ2h0fHxfLEI9TWF0aC5yb3VuZChNKzIqTikscT1NYXRoLnJvdW5kKEQrMipOKTtmdW5jdGlvbiBIKHQsZSl7cmV0dXJuImF1dG8iPT09ZSYmKGU9dDwxLzM/ImxlZnQiOnQ+Mi8zPyJyaWdodCI6ImNlbnRlciIpLHtjZW50ZXI6MCxtaWRkbGU6MCxsZWZ0Oi41LGJvdHRvbTotLjUscmlnaHQ6LS41LHRvcDouNX1bZV19Zm9yKHZhciBXPSExLFg9WyJ4IiwieSJdLFo9MDtaPFgubGVuZ3RoO1orKyl7dmFyIEosSyxRLCQsdHQsZXQ9WFtaXSxydD1lW2V0KyJyZWYiXXx8ZXQsbnQ9ZVsiYSIrZXQrInJlZiJdLGl0PXt4OnYseTp4fVtldF0sYXQ9KEkrKCJ4Ij09PWV0PzA6LTkwKSkqTWF0aC5QSS8xODAsb3Q9QipNYXRoLmNvcyhhdCksc3Q9cSpNYXRoLnNpbihhdCksbHQ9TWF0aC5hYnMob3QpK01hdGguYWJzKHN0KSxjdD1lW2V0KyJhbmNob3IiXSx1dD1lW2V0KyJzaGlmdCJdKigieCI9PT1ldD8xOi0xKSxmdD1MW2V0XSxodD1sLmdldFJlZlR5cGUocnQpO2lmKGl0JiYiZG9tYWluIiE9PWh0KXt2YXIgcHQ9aXQucjJmcmFjdGlvbihlW2V0XSk7KHB0PDB8fHB0PjEpJiYobnQ9PT1ydD8oKHB0PWl0LnIyZnJhY3Rpb24oZVsiYSIrZXRdKSk8MHx8cHQ+MSkmJihXPSEwKTpXPSEwKSxKPWl0Ll9vZmZzZXQraXQucjJwKGVbZXRdKSwkPS41fWVsc2V7dmFyIGR0PSJkb21haW4iPT09aHQ7IngiPT09ZXQ/KFE9ZVtldF0sSj1kdD9pdC5fb2Zmc2V0K2l0Ll9sZW5ndGgqUTpKPVQubCtULncqUSk6KFE9MS1lW2V0XSxKPWR0P2l0Ll9vZmZzZXQraXQuX2xlbmd0aCpROko9VC50K1QuaCpRKSwkPWUuc2hvd2Fycm93Py41OlF9aWYoZS5zaG93YXJyb3cpe2Z0LmhlYWQ9Sjt2YXIgZ3Q9ZVsiYSIrZXRdO2lmKHR0PW90KkgoLjUsZS54YW5jaG9yKS1zdCpIKC41LGUueWFuY2hvciksbnQ9PT1ydCl7dmFyIG10PWwuZ2V0UmVmVHlwZShudCk7ImRvbWFpbiI9PT1tdD8oInkiPT09ZXQmJihndD0xLWd0KSxmdC50YWlsPWl0Ll9vZmZzZXQraXQuX2xlbmd0aCpndCk6InBhcGVyIj09PW10PyJ5Ij09PWV0PyhndD0xLWd0LGZ0LnRhaWw9VC50K1QuaCpndCk6ZnQudGFpbD1ULmwrVC53Kmd0OmZ0LnRhaWw9aXQuX29mZnNldCtpdC5yMnAoZ3QpLEs9dHR9ZWxzZSBmdC50YWlsPUorZ3QsSz10dCtndDtmdC50ZXh0PWZ0LnRhaWwrdHQ7dmFyIHZ0PXdbIngiPT09ZXQ/IndpZHRoIjoiaGVpZ2h0Il07aWYoInBhcGVyIj09PXJ0JiYoZnQuaGVhZD1vLmNvbnN0cmFpbihmdC5oZWFkLDEsdnQtMSkpLCJwaXhlbCI9PT1udCl7dmFyIHl0PS1NYXRoLm1heChmdC50YWlsLTMsZnQudGV4dCkseHQ9TWF0aC5taW4oZnQudGFpbCszLGZ0LnRleHQpLXZ0O3l0PjA/KGZ0LnRhaWwrPXl0LGZ0LnRleHQrPXl0KTp4dD4wJiYoZnQudGFpbC09eHQsZnQudGV4dC09eHQpfWZ0LnRhaWwrPXV0LGZ0LmhlYWQrPXV0fWVsc2UgSz10dD1sdCpIKCQsY3QpLGZ0LnRleHQ9Sit0dDtmdC50ZXh0Kz11dCx0dCs9dXQsSys9dXQsZVsiXyIrZXQrInBhZHBsdXMiXT1sdC8yK0ssZVsiXyIrZXQrInBhZG1pbnVzIl09bHQvMi1LLGVbIl8iK2V0KyJzaXplIl09bHQsZVsiXyIrZXQrInNoaWZ0Il09dHR9aWYoVylSLnJlbW92ZSgpO2Vsc2V7dmFyIGJ0PTAsX3Q9MDtpZigibGVmdCIhPT1lLmFsaWduJiYoYnQ9KE0tYikqKCJjZW50ZXIiPT09ZS5hbGlnbj8uNToxKSksInRvcCIhPT1lLnZhbGlnbiYmKF90PShELV8pKigibWlkZGxlIj09PWUudmFsaWduPy41OjEpKSxmKW4uc2VsZWN0KCJzdmciKS5hdHRyKHt4Ok4rYnQtMSx5Ok4rX3R9KS5jYWxsKHUuc2V0Q2xpcFVybCxVP0M6bnVsbCx0KTtlbHNle3ZhciB3dD1OK190LWcudG9wLFR0PU4rYnQtZy5sZWZ0O0cuY2FsbChoLnBvc2l0aW9uVGV4dCxUdCx3dCkuY2FsbCh1LnNldENsaXBVcmwsVT9DOm51bGwsdCl9Vi5zZWxlY3QoInJlY3QiKS5jYWxsKHUuc2V0UmVjdCxOLE4sTSxEKSxqLmNhbGwodS5zZXRSZWN0LEYvMixGLzIsQi1GLHEtRiksUi5jYWxsKHUuc2V0VHJhbnNsYXRlLE1hdGgucm91bmQoTC54LnRleHQtQi8yKSxNYXRoLnJvdW5kKEwueS50ZXh0LXEvMikpLHouYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitJKyIsIitMLngudGV4dCsiLCIrTC55LnRleHQrIikifSk7dmFyIGt0LE10PWZ1bmN0aW9uKHIsbil7UC5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWFycm93LWciKS5yZW1vdmUoKTt2YXIgbD1MLnguaGVhZCxmPUwueS5oZWFkLGg9TC54LnRhaWwrcixwPUwueS50YWlsK24sZz1MLngudGV4dCtyLGI9TC55LnRleHQrbixfPW8ucm90YXRpb25YWU1hdHJpeChJLGcsYiksdz1vLmFwcGx5MkRUcmFuc2Zvcm0oXyksTT1vLmFwcGx5MkRUcmFuc2Zvcm0yKF8pLEM9K2ouYXR0cigid2lkdGgiKSxPPStqLmF0dHIoImhlaWdodCIpLEQ9Zy0uNSpDLEY9RCtDLEI9Yi0uNSpPLE49QitPLFU9W1tELEIsRCxOXSxbRCxOLEYsTl0sW0YsTixGLEJdLFtGLEIsRCxCXV0ubWFwKE0pO2lmKCFVLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdF4hIW8uc2VnbWVudHNJbnRlcnNlY3QobCxmLGwrMWU2LGYrMWU2LGVbMF0sZVsxXSxlWzJdLGVbM10pfSksITEpKXtVLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW8uc2VnbWVudHNJbnRlcnNlY3QoaCxwLGwsZix0WzBdLHRbMV0sdFsyXSx0WzNdKTtlJiYoaD1lLngscD1lLnkpfSkpO3ZhciBWPWUuYXJyb3d3aWR0aCxxPWUuYXJyb3djb2xvcixIPWUuYXJyb3dzaWRlLEc9UC5hcHBlbmQoImciKS5zdHlsZSh7b3BhY2l0eTpjLm9wYWNpdHkocSl9KS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93LWciLCEwKSxZPUcuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0iK2grIiwiK3ArIkwiK2wrIiwiK2YpLnN0eWxlKCJzdHJva2Utd2lkdGgiLFYrInB4IikuY2FsbChjLnN0cm9rZSxjLnJnYihxKSk7aWYobShZLEgsZSksay5hbm5vdGF0aW9uUG9zaXRpb24mJlkubm9kZSgpLnBhcmVudE5vZGUmJiFhKXt2YXIgVz1sLFg9ZjtpZihlLnN0YW5kb2ZmKXt2YXIgWj1NYXRoLnNxcnQoTWF0aC5wb3cobC1oLDIpK01hdGgucG93KGYtcCwyKSk7Vys9ZS5zdGFuZG9mZiooaC1sKS9aLFgrPWUuc3RhbmRvZmYqKHAtZikvWn12YXIgSixLLFE9Ry5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93IiwhMCkuY2xhc3NlZCgiYW5uZHJhZyIsITApLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCkuYXR0cih7ZDoiTTMsM0gtM1YtM0gzWk0wLDBMIisoaC1XKSsiLCIrKHAtWCksdHJhbnNmb3JtOnMoVyxYKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLFYrNisicHgiKS5jYWxsKGMuc3Ryb2tlLCJyZ2JhKDAsMCwwLDApIikuY2FsbChjLmZpbGwsInJnYmEoMCwwLDAsMCkiKTtkLmluaXQoe2VsZW1lbnQ6US5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXt2YXIgdD11LmdldFRyYW5zbGF0ZShSKTtKPXQueCxLPXQueSx2JiZ2LmF1dG9yYW5nZSYmQSh2Ll9uYW1lKyIuYXV0b3JhbmdlIiwhMCkseCYmeC5hdXRvcmFuZ2UmJkEoeC5fbmFtZSsiLmF1dG9yYW5nZSIsITApfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj13KEosSyksaT1uWzBdK3QsYT1uWzFdK3I7Ui5jYWxsKHUuc2V0VHJhbnNsYXRlLGksYSksUygieCIseSh2LHQsIngiLFQsZSkpLFMoInkiLHkoeCxyLCJ5IixULGUpKSxlLmF4cmVmPT09ZS54cmVmJiZTKCJheCIseSh2LHQsImF4IixULGUpKSxlLmF5cmVmPT09ZS55cmVmJiZTKCJheSIseSh4LHIsImF5IixULGUpKSxHLmF0dHIoInRyYW5zZm9ybSIscyh0LHIpKSx6LmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrSSsiLCIraSsiLCIrYSsiKSJ9KX0sZG9uZUZuOmZ1bmN0aW9uKCl7aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsRSgpKTt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuanMtbm90ZXMtYm94LXBhbmVsIik7ZSYmZS5yZWRyYXcoZS5zZWxlY3RlZE9iail9fSl9fX07aWYoZS5zaG93YXJyb3cmJk10KDAsMCksTylkLmluaXQoe2VsZW1lbnQ6Ui5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXtrdD16LmF0dHIoInRyYW5zZm9ybSIpfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj0icG9pbnRlciI7aWYoZS5zaG93YXJyb3cpZS5heHJlZj09PWUueHJlZj9TKCJheCIseSh2LHQsImF4IixULGUpKTpTKCJheCIsZS5heCt0KSxlLmF5cmVmPT09ZS55cmVmP1MoImF5Iix5KHgsciwiYXkiLFQudyxlKSk6UygiYXkiLGUuYXkrciksTXQodCxyKTtlbHNle2lmKGEpcmV0dXJuO3ZhciBpLG87aWYodilpPXkodix0LCJ4IixULGUpO2Vsc2V7dmFyIGw9ZS5feHNpemUvVC53LGM9ZS54KyhlLl94c2hpZnQtZS54c2hpZnQpL1Qudy1sLzI7aT1kLmFsaWduKGMrdC9ULncsbCwwLDEsZS54YW5jaG9yKX1pZih4KW89eSh4LHIsInkiLFQsZSk7ZWxzZXt2YXIgdT1lLl95c2l6ZS9ULmgsZj1lLnktKGUuX3lzaGlmdCtlLnlzaGlmdCkvVC5oLXUvMjtvPWQuYWxpZ24oZi1yL1QuaCx1LDAsMSxlLnlhbmNob3IpfVMoIngiLGkpLFMoInkiLG8pLHYmJnh8fChuPWQuZ2V0Q3Vyc29yKHY/LjU6aSx4Py41Om8sZS54YW5jaG9yLGUueWFuY2hvcikpfXouYXR0cih7dHJhbnNmb3JtOnModCxyKStrdH0pLHAoUixuKX0sY2xpY2tGbjpmdW5jdGlvbihyLG4pe2UuY2FwdHVyZWV2ZW50cyYmdC5lbWl0KCJwbG90bHlfY2xpY2thbm5vdGF0aW9uIixZKG4pKX0sZG9uZUZuOmZ1bmN0aW9uKCl7cChSKSxpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxFKCkpO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5qcy1ub3Rlcy1ib3gtcGFuZWwiKTtlJiZlLnJlZHJhdyhlLnNlbGVjdGVkT2JqKX19KX19fWUuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uIikucmVtb3ZlKCk7Zm9yKHZhciByPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZS5hbm5vdGF0aW9uc1tyXS52aXNpYmxlJiZ2KHQscik7cmV0dXJuIGEucHJldmlvdXNQcm9taXNlcyh0KX0sZHJhd09uZTp2LGRyYXdSYXc6eH19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc5OSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MSwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi4vY29sb3IiOjY0MywiLi4vZHJhZ2VsZW1lbnQiOjY2MiwiLi4vZHJhd2luZyI6NjY1LCIuLi9meCI6NjgzLCIuL2RyYXdfYXJyb3dfaGVhZCI6NjMzLGQzOjE2OX1dLDYzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4vYXJyb3dfcGF0aHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJTY2FsZSxsPW8uc3RyUm90YXRlLGM9by5zdHJUcmFuc2xhdGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyx1LGYsaCxwPXQubm9kZSgpLGQ9YVtyLmFycm93aGVhZHx8MF0sZz1hW3Iuc3RhcnRhcnJvd2hlYWR8fDBdLG09KHIuYXJyb3d3aWR0aHx8MSkqKHIuYXJyb3dzaXplfHwxKSx2PShyLmFycm93d2lkdGh8fDEpKihyLnN0YXJ0YXJyb3dzaXplfHwxKSx5PWUuaW5kZXhPZigic3RhcnQiKT49MCx4PWUuaW5kZXhPZigiZW5kIik+PTAsYj1kLmJhY2tvZmYqbStyLnN0YW5kb2ZmLF89Zy5iYWNrb2ZmKnYrci5zdGFydHN0YW5kb2ZmO2lmKCJsaW5lIj09PXAubm9kZU5hbWUpe289e3g6K3QuYXR0cigieDEiKSx5Oit0LmF0dHIoInkxIil9LHU9e3g6K3QuYXR0cigieDIiKSx5Oit0LmF0dHIoInkyIil9O3ZhciB3PW8ueC11LngsVD1vLnktdS55O2lmKGg9KGY9TWF0aC5hdGFuMihULHcpKStNYXRoLlBJLGImJl8mJmIrXz5NYXRoLnNxcnQodyp3K1QqVCkpcmV0dXJuIHZvaWQgTygpO2lmKGIpe2lmKGIqYj53KncrVCpUKXJldHVybiB2b2lkIE8oKTt2YXIgaz1iKk1hdGguY29zKGYpLE09YipNYXRoLnNpbihmKTt1LngrPWssdS55Kz1NLHQuYXR0cih7eDI6dS54LHkyOnUueX0pfWlmKF8pe2lmKF8qXz53KncrVCpUKXJldHVybiB2b2lkIE8oKTt2YXIgQT1fKk1hdGguY29zKGYpLFM9XypNYXRoLnNpbihmKTtvLngtPUEsby55LT1TLHQuYXR0cih7eDE6by54LHkxOm8ueX0pfX1lbHNlIGlmKCJwYXRoIj09PXAubm9kZU5hbWUpe3ZhciBFPXAuZ2V0VG90YWxMZW5ndGgoKSxDPSIiO2lmKEU8YitfKXJldHVybiB2b2lkIE8oKTt2YXIgTD1wLmdldFBvaW50QXRMZW5ndGgoMCksST1wLmdldFBvaW50QXRMZW5ndGgoLjEpO2Y9TWF0aC5hdGFuMihMLnktSS55LEwueC1JLngpLG89cC5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWluKF8sRSkpLEM9IjBweCwiK18rInB4LCI7dmFyIFA9cC5nZXRQb2ludEF0TGVuZ3RoKEUpLHo9cC5nZXRQb2ludEF0TGVuZ3RoKEUtLjEpO2g9TWF0aC5hdGFuMihQLnktei55LFAueC16LngpLHU9cC5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWF4KDAsRS1iKSksQys9RS0oQz9fK2I6YikrInB4LCIrRSsicHgiLHQuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLEMpfWZ1bmN0aW9uIE8oKXt0LnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMHB4LDEwMHB4Iil9ZnVuY3Rpb24gRChlLGEsbyx1KXtlLnBhdGgmJihlLm5vUm90YXRlJiYobz0wKSxuLnNlbGVjdChwLnBhcmVudE5vZGUpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2NsYXNzOnQuYXR0cigiY2xhc3MiKSxkOmUucGF0aCx0cmFuc2Zvcm06YyhhLngsYS55KStsKDE4MCpvL01hdGguUEkpK3ModSl9KS5zdHlsZSh7ZmlsbDppLnJnYihyLmFycm93Y29sb3IpLCJzdHJva2Utd2lkdGgiOjB9KSl9eSYmRChnLG8sZix2KSx4JiZEKGQsdSxoLG0pfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vY29sb3IiOjY0MywiLi9hcnJvd19wYXRocyI6NjI1LGQzOjE2OX1dLDYzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RyYXciKSxpPXQoIi4vY2xpY2siKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiYW5ub3RhdGlvbnMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoImFubm90YXRpb25zIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzpuLmRyYXcsZHJhd09uZTpuLmRyYXdPbmUsZHJhd1JhdzpuLmRyYXdSYXcsaGFzQ2xpY2tUb1Nob3c6aS5oYXNDbGlja1RvU2hvdyxvbkNsaWNrOmkub25DbGljayxjb252ZXJ0Q29vcmRzOnQoIi4vY29udmVydF9jb29yZHMiKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyI6ODQwLCIuL2F0dHJpYnV0ZXMiOjYyNiwiLi9jYWxjX2F1dG9yYW5nZSI6NjI3LCIuL2NsaWNrIjo2MjgsIi4vY29udmVydF9jb29yZHMiOjYzMCwiLi9kZWZhdWx0cyI6NjMxLCIuL2RyYXciOjYzMn1dLDYzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPWkoYSgiYW5ub3RhdGlvbiIse3Zpc2libGU6bi52aXNpYmxlLHg6e3ZhbFR5cGU6ImFueSJ9LHk6e3ZhbFR5cGU6ImFueSJ9LHo6e3ZhbFR5cGU6ImFueSJ9LGF4Ont2YWxUeXBlOiJudW1iZXIifSxheTp7dmFsVHlwZToibnVtYmVyIn0seGFuY2hvcjpuLnhhbmNob3IseHNoaWZ0Om4ueHNoaWZ0LHlhbmNob3I6bi55YW5jaG9yLHlzaGlmdDpuLnlzaGlmdCx0ZXh0Om4udGV4dCx0ZXh0YW5nbGU6bi50ZXh0YW5nbGUsZm9udDpuLmZvbnQsd2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsb3BhY2l0eTpuLm9wYWNpdHksYWxpZ246bi5hbGlnbix2YWxpZ246bi52YWxpZ24sYmdjb2xvcjpuLmJnY29sb3IsYm9yZGVyY29sb3I6bi5ib3JkZXJjb2xvcixib3JkZXJwYWQ6bi5ib3JkZXJwYWQsYm9yZGVyd2lkdGg6bi5ib3JkZXJ3aWR0aCxzaG93YXJyb3c6bi5zaG93YXJyb3csYXJyb3djb2xvcjpuLmFycm93Y29sb3IsYXJyb3doZWFkOm4uYXJyb3doZWFkLHN0YXJ0YXJyb3doZWFkOm4uc3RhcnRhcnJvd2hlYWQsYXJyb3dzaWRlOm4uYXJyb3dzaWRlLGFycm93c2l6ZTpuLmFycm93c2l6ZSxzdGFydGFycm93c2l6ZTpuLnN0YXJ0YXJyb3dzaXplLGFycm93d2lkdGg6bi5hcnJvd3dpZHRoLHN0YW5kb2ZmOm4uc3RhbmRvZmYsc3RhcnRzdGFuZG9mZjpuLnN0YXJ0c3RhbmRvZmYsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVybGFiZWw6bi5ob3ZlcmxhYmVsLGNhcHR1cmVldmVudHM6bi5jYXB0dXJlZXZlbnRzfSksImNhbGMiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNywiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyI6NjI2fV0sNjM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9ZS5mdWxsU2NlbmVMYXlvdXQuZG9tYWluLGE9ZS5mdWxsTGF5b3V0Ll9zaXplLG89e3BkYXRhOm51bGwsdHlwZToibGluZWFyIixhdXRvcmFuZ2U6ITEscmFuZ2U6Wy0xLzAsMS8wXX07dC5feGE9e30sbi5leHRlbmRGbGF0KHQuX3hhLG8pLGkuc2V0Q29udmVydCh0Ll94YSksdC5feGEuX29mZnNldD1hLmwrci54WzBdKmEudyx0Ll94YS5sMnA9ZnVuY3Rpb24oKXtyZXR1cm4uNSooMSt0Ll9wZGF0YVswXS90Ll9wZGF0YVszXSkqYS53KihyLnhbMV0tci54WzBdKX0sdC5feWE9e30sbi5leHRlbmRGbGF0KHQuX3lhLG8pLGkuc2V0Q29udmVydCh0Ll95YSksdC5feWEuX29mZnNldD1hLnQrKDEtci55WzFdKSphLmgsdC5feWEubDJwPWZ1bmN0aW9uKCl7cmV0dXJuLjUqKDEtdC5fcGRhdGFbMV0vdC5fcGRhdGFbM10pKmEuaCooci55WzFdLXIueVswXSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5mdWxsU2NlbmVMYXlvdXQuYW5ub3RhdGlvbnMscj0wO3I8ZS5sZW5ndGg7cisrKWEoZVtyXSx0KTt0LmZ1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLSIrdC5pZCkucmVtb3ZlKCl9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4fV0sNjM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89dCgiLi4vYW5ub3RhdGlvbnMvY29tbW9uX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKHQsZSxyLGEpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1mdW5jdGlvbiBjKHQpe3ZhciBuPXQrImF4aXMiLGE9e19mdWxsTGF5b3V0Ont9fTtyZXR1cm4gYS5fZnVsbExheW91dFtuXT1yW25dLGkuY29lcmNlUG9zaXRpb24oZSxhLGwsdCx0LC41KX1sKCJ2aXNpYmxlIikmJihvKHQsZSxhLmZ1bGxMYXlvdXQsbCksYygieCIpLGMoInkiKSxjKCJ6Iiksbi5ub25lT3JBbGwodCxlLFsieCIsInkiLCJ6Il0pLGUueHJlZj0ieCIsZS55cmVmPSJ5IixlLnpyZWY9InoiLGwoInhhbmNob3IiKSxsKCJ5YW5jaG9yIiksbCgieHNoaWZ0IiksbCgieXNoaWZ0IiksZS5zaG93YXJyb3cmJihlLmF4cmVmPSJwaXhlbCIsZS5heXJlZj0icGl4ZWwiLGwoImF4IiwtMTApLGwoImF5IiwtMzApLG4ubm9uZU9yQWxsKHQsZSxbImF4IiwiYXkiXSkpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EodCxlLHtuYW1lOiJhbm5vdGF0aW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmwsZnVsbExheW91dDpyLmZ1bGxMYXlvdXR9KX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHMiOjYyOSwiLi9hdHRyaWJ1dGVzIjo2MzV9XSw2Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYW5ub3RhdGlvbnMvZHJhdyIpLmRyYXdSYXcsaT10KCIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3QiKSxhPVsieCIsInkiLCJ6Il07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZ1bGxTY2VuZUxheW91dCxyPXQuZGF0YVNjYWxlLG89ZS5hbm5vdGF0aW9ucyxzPTA7czxvLmxlbmd0aDtzKyspe2Zvcih2YXIgbD1vW3NdLGM9ITEsdT0wO3U8Mzt1Kyspe3ZhciBmPWFbdV0saD1sW2ZdLHA9ZVtmKyJheGlzIl0ucjJmcmFjdGlvbihoKTtpZihwPDB8fHA+MSl7Yz0hMDticmVha319Yz90LmZ1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3QoIi5hbm5vdGF0aW9uLSIrdC5pZCsnW2RhdGEtaW5kZXg9IicrcysnIl0nKS5yZW1vdmUoKToobC5fcGRhdGE9aSh0LmdscGxvdC5jYW1lcmFQYXJhbXMsW2UueGF4aXMucjJsKGwueCkqclswXSxlLnlheGlzLnIybChsLnkpKnJbMV0sZS56YXhpcy5yMmwobC56KSpyWzJdXSksbih0LmdyYXBoRGl2LGwscyx0LmlkLGwuX3hhLGwuX3lhKSl9fX0seyIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3QiOjg3OSwiLi4vYW5ub3RhdGlvbnMvZHJhdyI6NjMyfV0sNjM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiYW5ub3RhdGlvbnMzZCIsc2NoZW1hOntzdWJwbG90czp7c2NlbmU6e2Fubm90YXRpb25zOnQoIi4vYXR0cmlidXRlcyIpfX19LGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksaGFuZGxlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDpmdW5jdGlvbih0LGUpe3ZhciByPW4uc3VicGxvdHNSZWdpc3RyeS5nbDNkO2lmKCFyKXJldHVybjtmb3IodmFyIGE9ci5hdHRyUmVnZXgsbz1PYmplY3Qua2V5cyh0KSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107YS50ZXN0KGwpJiYodFtsXS5hbm5vdGF0aW9uc3x8W10pLmxlbmd0aCYmKGkucHVzaFVuaXF1ZShlLl9iYXNlUGxvdE1vZHVsZXMsciksaS5wdXNoVW5pcXVlKGUuX3N1YnBsb3RzLmdsM2QsbCkpfX0sY29udmVydDp0KCIuL2NvbnZlcnQiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi9hdHRyaWJ1dGVzIjo2MzUsIi4vY29udmVydCI6NjM2LCIuL2RlZmF1bHRzIjo2MzcsIi4vZHJhdyI6NjM4fV0sNjQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9tYWluIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvcGx1cyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jaGluZXNlIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NvcHRpYyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9kaXNjd29ybGQiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZXRoaW9waWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2hlYnJldyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9pc2xhbWljIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2p1bGlhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9tYXlhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uYW5ha3NoYWhpIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25lcGFsaSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9wZXJzaWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RhaXdhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90aGFpIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3VtbWFscXVyYSIpfSx7IndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jaGluZXNlIjo2MDcsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jb3B0aWMiOjYwOCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2Rpc2N3b3JsZCI6NjA5LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZXRoaW9waWFuIjo2MTAsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9oZWJyZXciOjYxMSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2lzbGFtaWMiOjYxMiwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2p1bGlhbiI6NjEzLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbWF5YW4iOjYxNCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25hbmFrc2hhaGkiOjYxNSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25lcGFsaSI6NjE2LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvcGVyc2lhbiI6NjE3LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGFpd2FuIjo2MTgsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90aGFpIjo2MTksIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy91bW1hbHF1cmEiOjYyMCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvbWFpbiI6NjIxLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9wbHVzIjo2MjJ9XSw2NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jYWxlbmRhcnMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLG89YS5FUE9DSEpELHM9YS5PTkVEQVksbD17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKG4uY2FsZW5kYXJzKSxlZGl0VHlwZToiY2FsYyIsZGZsdDoiZ3JlZ29yaWFuIn0sYz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT17fTtyZXR1cm4gYVtyXT1sLGkuY29lcmNlKHQsZSxhLHIsbil9LHU9e2Q6ezA6ImRkIiwiLSI6ImQifSxlOnswOiJkIiwiLSI6ImQifSxhOnswOiJEIiwiLSI6IkQifSxBOnswOiJERCIsIi0iOiJERCJ9LGo6ezA6Im9vIiwiLSI6Im8ifSxXOnswOiJ3dyIsIi0iOiJ3In0sbTp7MDoibW0iLCItIjoibSJ9LGI6ezA6Ik0iLCItIjoiTSJ9LEI6ezA6Ik1NIiwiLSI6Ik1NIn0seTp7MDoieXkiLCItIjoieXkifSxZOnswOiJ5eXl5IiwiLSI6Inl5eXkifSxVOiIjIyIsdzoiIyMiLGM6ezA6IkQgTSBkICVYIHl5eXkiLCItIjoiRCBNIGQgJVggeXl5eSJ9LHg6ezA6Im1tL2RkL3l5eXkiLCItIjoibW0vZGQveXl5eSJ9fTt2YXIgZj17fTtmdW5jdGlvbiBoKHQpe3ZhciBlPWZbdF07cmV0dXJuIGV8fChlPWZbdF09bi5pbnN0YW5jZSh0KSl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gaS5leHRlbmRGbGF0KHt9LGwse2Rlc2NyaXB0aW9uOnR9KX1mdW5jdGlvbiBkKHQpe3JldHVybiJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIHdpdGggYCIrdCsiYCBkYXRlIGRhdGEuIn12YXIgZz17eGNhbGVuZGFyOnAoZCgieCIpKX0sbT1pLmV4dGVuZEZsYXQoe30sZyx7eWNhbGVuZGFyOnAoZCgieSIpKX0pLHY9aS5leHRlbmRGbGF0KHt9LG0se3pjYWxlbmRhcjpwKGQoInoiKSl9KSx5PXAoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgcmFuZ2VgIGFuZCBgdGljazBgIiwiaWYgdGhpcyBpcyBhIGRhdGUgYXhpcy4gVGhpcyBkb2VzIG5vdCBzZXQgdGhlIGNhbGVuZGFyIGZvciIsImludGVycHJldGluZyBkYXRhIG9uIHRoaXMgYXhpcywgdGhhdCdzIHNwZWNpZmllZCBpbiB0aGUgdHJhY2UiLCJvciB2aWEgdGhlIGdsb2JhbCBgbGF5b3V0LmNhbGVuZGFyYCJdLmpvaW4oIiAiKSk7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNhbGVuZGFycyIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6bSxiYXI6bSxib3g6bSxoZWF0bWFwOm0sY29udG91cjptLGhpc3RvZ3JhbTptLGhpc3RvZ3JhbTJkOm0saGlzdG9ncmFtMmRjb250b3VyOm0sc2NhdHRlcjNkOnYsc3VyZmFjZTp2LG1lc2gzZDp2LHNjYXR0ZXJnbDptLG9obGM6ZyxjYW5kbGVzdGljazpnfSxsYXlvdXQ6e2NhbGVuZGFyOnAoWyJTZXRzIHRoZSBkZWZhdWx0IGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGludGVycHJldGluZyBhbmQiLCJkaXNwbGF5aW5nIGRhdGVzIHRocm91Z2hvdXQgdGhlIHBsb3QuIl0uam9pbigiICIpKX0sc3VicGxvdHM6e3hheGlzOntjYWxlbmRhcjp5fSx5YXhpczp7Y2FsZW5kYXI6eX0sc2NlbmU6e3hheGlzOntjYWxlbmRhcjp5fSx5YXhpczp7Y2FsZW5kYXI6eX0semF4aXM6e2NhbGVuZGFyOnl9fSxwb2xhcjp7cmFkaWFsYXhpczp7Y2FsZW5kYXI6eX19fSx0cmFuc2Zvcm1zOntmaWx0ZXI6e3ZhbHVlY2FsZW5kYXI6cChbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB2YWx1ZWAsIGlmIGl0IGlzIGEgZGF0ZS4iXS5qb2luKCIgIikpLHRhcmdldGNhbGVuZGFyOnAoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdGFyZ2V0YCwgaWYgaXQgaXMgYW4iLCJhcnJheSBvZiBkYXRlcy4gSWYgYHRhcmdldGAgaXMgYSBzdHJpbmcgKGVnICp4Kikgd2UgdXNlIHRoZSIsImNvcnJlc3BvbmRpbmcgdHJhY2UgYXR0cmlidXRlIChlZyBgeGNhbGVuZGFyYCkgaWYgaXQgZXhpc3RzLCIsImV2ZW4gaWYgYHRhcmdldGNhbGVuZGFyYCBpcyBwcm92aWRlZC4iXS5qb2luKCIgIikpfX19LGxheW91dEF0dHJpYnV0ZXM6bCxoYW5kbGVEZWZhdWx0czpjLGhhbmRsZVRyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspYyh0LGUscltpXSsiY2FsZW5kYXIiLG4uY2FsZW5kYXIpfSxDQU5PTklDQUxfU1VOREFZOntjaGluZXNlOiIyMDAwLTAxLTAyIixjb3B0aWM6IjIwMDAtMDEtMDMiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMyIsZXRoaW9waWFuOiIyMDAwLTAxLTA1IixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDIiLGp1bGlhbjoiMjAwMC0wMS0wMyIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDUiLG5lcGFsaToiMjAwMC0wMS0wNSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDQiLHRoYWk6IjIwMDAtMDEtMDQiLHVtbWFscXVyYToiMTQwMC0wMS0wNiJ9LENBTk9OSUNBTF9USUNLOntjaGluZXNlOiIyMDAwLTAxLTAxIixjb3B0aWM6IjIwMDAtMDEtMDEiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMSIsZXRoaW9waWFuOiIyMDAwLTAxLTAxIixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDEiLGp1bGlhbjoiMjAwMC0wMS0wMSIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDEiLG5lcGFsaToiMjAwMC0wMS0wMSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDEiLHRoYWk6IjIwMDAtMDEtMDEiLHVtbWFscXVyYToiMTQwMC0wMS0wMSJ9LERGTFRSQU5HRTp7Y2hpbmVzZTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0sY29wdGljOlsiMTcwMC0wMS0wMSIsIjE3MDEtMDEtMDEiXSxkaXNjd29ybGQ6WyIxODAwLTAxLTAxIiwiMTgwMS0wMS0wMSJdLGV0aGlvcGlhbjpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0saGVicmV3OlsiNTcwMC0wMS0wMSIsIjU3MDEtMDEtMDEiXSxpc2xhbWljOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSxqdWxpYW46WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLG1heWFuOlsiNTIwMC0wMS0wMSIsIjUyMDEtMDEtMDEiXSxuYW5ha3NoYWhpOlsiMDUwMC0wMS0wMSIsIjA1MDEtMDEtMDEiXSxuZXBhbGk6WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLHBlcnNpYW46WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLGphbGFsaTpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0sdGFpd2FuOlsiMDEwMC0wMS0wMSIsIjAxMDEtMDEtMDEiXSx0aGFpOlsiMjUwMC0wMS0wMSIsIjI1MDEtMDEtMDEiXSx1bW1hbHF1cmE6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdfSxnZXRDYWw6aCx3b3JsZENhbEZtdDpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYSxsLGMsZj1NYXRoLmZsb29yKChlKy4wNSkvcykrbyxwPWgocikuZnJvbUpEKGYpLGQ9MDstMSE9PShkPXQuaW5kZXhPZigiJSIsZCkpOykiMCI9PT0obj10LmNoYXJBdChkKzEpKXx8Ii0iPT09bnx8Il8iPT09bj8oYT0zLGk9dC5jaGFyQXQoZCsyKSwiXyI9PT1uJiYobj0iLSIpKTooaT1uLG49IjAiLGE9MiksKGw9dVtpXSk/KGM9IiMjIj09PWw/IiMjIjpwLmZvcm1hdERhdGUobFtuXSksdD10LnN1YnN0cigwLGQpK2MrdC5zdWJzdHIoZCthKSxkKz1jLmxlbmd0aCk6ZCs9YTtyZXR1cm4gdH19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vbGliIjo3NzgsIi4vY2FsZW5kYXJzIjo2NDB9XSw2NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWZhdWx0cz1bIiMxZjc3YjQiLCIjZmY3ZjBlIiwiIzJjYTAyYyIsIiNkNjI3MjgiLCIjOTQ2N2JkIiwiIzhjNTY0YiIsIiNlMzc3YzIiLCIjN2Y3ZjdmIiwiI2JjYmQyMiIsIiMxN2JlY2YiXSxyLmRlZmF1bHRMaW5lPSIjNDQ0IixyLmxpZ2h0TGluZT0iI2VlZSIsci5iYWNrZ3JvdW5kPSIjZmZmIixyLmJvcmRlckxpbmU9IiNCRUM4RDkiLHIubGlnaHRGcmFjdGlvbj0xZTMvMTF9LHt9XSw2NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPWUuZXhwb3J0cz17fSxvPXQoIi4vYXR0cmlidXRlcyIpO2EuZGVmYXVsdHM9by5kZWZhdWx0czt2YXIgcz1hLmRlZmF1bHRMaW5lPW8uZGVmYXVsdExpbmU7YS5saWdodExpbmU9by5saWdodExpbmU7dmFyIGw9YS5iYWNrZ3JvdW5kPW8uYmFja2dyb3VuZDtmdW5jdGlvbiBjKHQpe2lmKGkodCl8fCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10LnRyaW0oKTtpZigicmdiIiE9PWUuc3Vic3RyKDAsMykpcmV0dXJuIHQ7dmFyIHI9ZS5tYXRjaCgvXnJnYmE/XHMqXCgoW14oKV0qKVwpJC8pO2lmKCFyKXJldHVybiB0O3ZhciBuPXJbMV0udHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pLGE9ImEiPT09ZS5jaGFyQXQoMykmJjQ9PT1uLmxlbmd0aDtpZighYSYmMyE9PW4ubGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXtpZighbltvXS5sZW5ndGgpcmV0dXJuIHQ7aWYobltvXT1OdW1iZXIobltvXSksIShuW29dPj0wKSlyZXR1cm4gdDtpZigzPT09byluW29dPjEmJihuW29dPTEpO2Vsc2UgaWYobltvXT49MSlyZXR1cm4gdH12YXIgcz1NYXRoLnJvdW5kKDI1NSpuWzBdKSsiLCAiK01hdGgucm91bmQoMjU1Km5bMV0pKyIsICIrTWF0aC5yb3VuZCgyNTUqblsyXSk7cmV0dXJuIGE/InJnYmEoIitzKyIsICIrblszXSsiKSI6InJnYigiK3MrIikifWEudGlueVJHQj1mdW5jdGlvbih0KXt2YXIgZT10LnRvUmdiKCk7cmV0dXJuInJnYigiK01hdGgucm91bmQoZS5yKSsiLCAiK01hdGgucm91bmQoZS5nKSsiLCAiK01hdGgucm91bmQoZS5iKSsiKSJ9LGEucmdiPWZ1bmN0aW9uKHQpe3JldHVybiBhLnRpbnlSR0Iobih0KSl9LGEub3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpLmdldEFscGhhKCk6MH0sYS5hZGRPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KS50b1JnYigpO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZChyLnIpKyIsICIrTWF0aC5yb3VuZChyLmcpKyIsICIrTWF0aC5yb3VuZChyLmIpKyIsICIrZSsiKSJ9LGEuY29tYmluZT1mdW5jdGlvbih0LGUpe3ZhciByPW4odCkudG9SZ2IoKTtpZigxPT09ci5hKXJldHVybiBuKHQpLnRvUmdiU3RyaW5nKCk7dmFyIGk9bihlfHxsKS50b1JnYigpLGE9MT09PWkuYT9pOntyOjI1NSooMS1pLmEpK2kucippLmEsZzoyNTUqKDEtaS5hKStpLmcqaS5hLGI6MjU1KigxLWkuYSkraS5iKmkuYX0sbz17cjphLnIqKDEtci5hKStyLnIqci5hLGc6YS5nKigxLXIuYSkrci5nKnIuYSxiOmEuYiooMS1yLmEpK3IuYipyLmF9O3JldHVybiBuKG8pLnRvUmdiU3RyaW5nKCl9LGEuY29udHJhc3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4odCk7cmV0dXJuIDEhPT1pLmdldEFscGhhKCkmJihpPW4oYS5jb21iaW5lKHQsbCkpKSwoaS5pc0RhcmsoKT9lP2kubGlnaHRlbihlKTpsOnI/aS5kYXJrZW4ocik6cykudG9TdHJpbmcoKX0sYS5zdHJva2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpO3Quc3R5bGUoe3N0cm9rZTphLnRpbnlSR0IociksInN0cm9rZS1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sYS5maWxsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKTt0LnN0eWxlKHtmaWxsOmEudGlueVJHQihyKSwiZmlsbC1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sYS5jbGVhbj1mdW5jdGlvbih0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBlLHIsbixpLG89T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKylpZihpPXRbbj1vW2VdXSwiY29sb3IiPT09bi5zdWJzdHIobi5sZW5ndGgtNSkpaWYoQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl09YyhpW3JdKTtlbHNlIHRbbl09YyhpKTtlbHNlIGlmKCJjb2xvcnNjYWxlIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTEwKSYmQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKUFycmF5LmlzQXJyYXkoaVtyXSkmJihpW3JdWzFdPWMoaVtyXVsxXSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIHM9aVswXTtpZighQXJyYXkuaXNBcnJheShzKSYmcyYmIm9iamVjdCI9PXR5cGVvZiBzKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspYS5jbGVhbihpW3JdKX1lbHNlIGkmJiJvYmplY3QiPT10eXBlb2YgaSYmYS5jbGVhbihpKX19fSx7Ii4vYXR0cmlidXRlcyI6NjQyLCJmYXN0LWlzbnVtZXJpYyI6MjQxLHRpbnljb2xvcjI6NTc2fV0sNjQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dGhpY2tuZXNzbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJwaXhlbHMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLjAyLG1pbjotMixtYXg6M30seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHhwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi41LG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIn0seXBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmEoe30sbi50aWNrcyx7ZGZsdDoiIn0pLHRpY2tsYWJlbHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvdXRzaWRlIiwiaW5zaWRlIiwib3V0c2lkZSB0b3AiLCJpbnNpZGUgdG9wIiwib3V0c2lkZSBib3R0b20iLCJpbnNpZGUgYm90dG9tIl0sZGZsdDoib3V0c2lkZSJ9LHRpY2tsZW46bi50aWNrbGVuLHRpY2t3aWR0aDpuLnRpY2t3aWR0aCx0aWNrY29sb3I6bi50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6bi5zaG93dGlja2xhYmVscyx0aWNrZm9udDppKHt9KSx0aWNrYW5nbGU6bi50aWNrYW5nbGUsdGlja2Zvcm1hdDpuLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOm4udGlja2Zvcm1hdHN0b3BzLHRpY2twcmVmaXg6bi50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Om4uc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDpuLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6bi5zaG93dGlja3N1ZmZpeCxzZXBhcmF0ZXRob3VzYW5kczpuLnNlcGFyYXRldGhvdXNhbmRzLGV4cG9uZW50Zm9ybWF0Om4uZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6bi5taW5leHBvbmVudCxzaG93ZXhwb25lbnQ6bi5zaG93ZXhwb25lbnQsdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyJ9LGZvbnQ6aSh7fSksc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmlnaHQiLCJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AifX0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmcifSx0aXRsZWZvbnQ6aSh7fSksdGl0bGVzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyaWdodCIsInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9fX0sImNvbG9yYmFycyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODEwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTZ9XSw2NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjbjp7Y29sb3JiYXI6ImNvbG9yYmFyIixjYmJnOiJjYmJnIixjYmZpbGw6ImNiZmlsbCIsY2JmaWxsczoiY2JmaWxscyIsY2JsaW5lOiJjYmxpbmUiLGNibGluZXM6ImNibGluZXMiLGNiYXhpczoiY2JheGlzIixjYnRpdGxldW5zaGlmdDoiY2J0aXRsZXVuc2hpZnQiLGNidGl0bGU6ImNidGl0bGUiLGNib3V0bGluZToiY2JvdXRsaW5lIixjcmlzcDoiY3Jpc3AiLGpzUGxhY2Vob2xkZXI6ImpzLXBsYWNlaG9sZGVyIn19fSx7fV0sNjQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBjPWkubmV3Q29udGFpbmVyKGUsImNvbG9yYmFyIiksdT10LmNvbG9yYmFyfHx7fTtmdW5jdGlvbiBmKHQsZSl7cmV0dXJuIG4uY29lcmNlKHUsYyxsLHQsZSl9dmFyIGg9ZigidGhpY2tuZXNzbW9kZSIpO2YoInRoaWNrbmVzcyIsImZyYWN0aW9uIj09PWg/MzAvKHIud2lkdGgtci5tYXJnaW4ubC1yLm1hcmdpbi5yKTozMCk7dmFyIHA9ZigibGVubW9kZSIpO2YoImxlbiIsImZyYWN0aW9uIj09PXA/MTpyLmhlaWdodC1yLm1hcmdpbi50LXIubWFyZ2luLmIpLGYoIngiKSxmKCJ4YW5jaG9yIiksZigieHBhZCIpLGYoInkiKSxmKCJ5YW5jaG9yIiksZigieXBhZCIpLG4ubm9uZU9yQWxsKHUsYyxbIngiLCJ5Il0pLGYoIm91dGxpbmVjb2xvciIpLGYoIm91dGxpbmV3aWR0aCIpLGYoImJvcmRlcmNvbG9yIiksZigiYm9yZGVyd2lkdGgiKSxmKCJiZ2NvbG9yIik7dmFyIGQ9ZigidGlja2xhYmVscG9zaXRpb24iKTthKHUsYyxmLCJsaW5lYXIiKTt2YXIgZz17b3V0ZXJUaWNrczohMSxmb250OnIuZm9udH07LTEhPT1kLmluZGV4T2YoImluc2lkZSIpJiYoZy5iZ0NvbG9yPSJibGFjayIpLHModSxjLGYsImxpbmVhciIsZyksbyh1LGMsZiwibGluZWFyIixnKSxmKCJ0aXRsZS50ZXh0IixyLl9kZmx0VGl0bGUuY29sb3JiYXIpLG4uY29lcmNlRm9udChmLCJ0aXRsZS5mb250IixyLmZvbnQpLGYoInRpdGxlLnNpZGUiKX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjg0OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6ODUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6ODUxLCIuL2F0dHJpYnV0ZXMiOjY0NH1dLDY0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSxjPXQoIi4uLy4uL2xpYiIpLHU9Yy5zdHJUcmFuc2xhdGUsZj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxoPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxwPXQoIi4uL2RyYXdpbmciKSxkPXQoIi4uL2NvbG9yIiksZz10KCIuLi90aXRsZXMiKSxtPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHY9dCgiLi4vY29sb3JzY2FsZS9oZWxwZXJzIikuZmxpcFNjYWxlLHk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiKSx4PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0cyIpLGI9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksXz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Iiksdz1fLkxJTkVfU1BBQ0lORyxUPV8uRlJPTV9UTCxrPV8uRlJPTV9CUixNPXQoIi4vY29uc3RhbnRzIikuY247ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitNLmNvbG9yYmFyKS5kYXRhKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dC5fZnVsbExheW91dCxvPXQuY2FsY2RhdGEscz1bXTtmdW5jdGlvbiBsKHQpe3JldHVybiBmKHQse19maWxsY29sb3I6bnVsbCxfbGluZTp7Y29sb3I6bnVsbCx3aWR0aDpudWxsLGRhc2g6bnVsbH0sX2xldmVsczp7c3RhcnQ6bnVsbCxlbmQ6bnVsbCxzaXplOm51bGx9LF9maWxsbGV2ZWxzOm51bGwsX2ZpbGxncmFkaWVudDpudWxsLF96cmFuZ2U6bnVsbH0pfWZ1bmN0aW9uIGMoKXsiZnVuY3Rpb24iPT10eXBlb2YgaS5jYWxjP2kuY2FsYyh0LG4sZSk6KGUuX2ZpbGxncmFkaWVudD1yLnJldmVyc2VzY2FsZT92KHIuY29sb3JzY2FsZSk6ci5jb2xvcnNjYWxlLGUuX3pyYW5nZT1bcltpLm1pbl0scltpLm1heF1dKX1mb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGg9b1t1XSxwPShuPWhbMF0udHJhY2UpLl9tb2R1bGUuY29sb3JiYXI7aWYoITA9PT1uLnZpc2libGUmJnApZm9yKHZhciBkPUFycmF5LmlzQXJyYXkocCksZz1kP3A6W3BdLG09MDttPGcubGVuZ3RoO20rKyl7dmFyIHk9KGk9Z1ttXSkuY29udGFpbmVyOyhyPXk/blt5XTpuKSYmci5zaG93c2NhbGUmJigoZT1sKHIuY29sb3JiYXIpKS5faWQ9ImNiIituLnVpZCsoZCYmeT8iLSIreToiIiksZS5fdHJhY2VJbmRleD1uLmluZGV4LGUuX3Byb3BQcmVmaXg9KHk/eSsiLiI6IiIpKyJjb2xvcmJhci4iLGUuX21ldGE9bi5fbWV0YSxjKCkscy5wdXNoKGUpKX19Zm9yKHZhciB4IGluIGEuX2NvbG9yQXhlcylpZigocj1hW3hdKS5zaG93c2NhbGUpe3ZhciBiPWEuX2NvbG9yQXhlc1t4XTsoZT1sKHIuY29sb3JiYXIpKS5faWQ9ImNiIit4LGUuX3Byb3BQcmVmaXg9eCsiLmNvbG9yYmFyLiIsZS5fbWV0YT1hLl9tZXRhLGk9e21pbjoiY21pbiIsbWF4OiJjbWF4In0sImhlYXRtYXAiIT09YlswXSYmKG49YlsxXSxpLmNhbGM9bi5fbW9kdWxlLmNvbG9yYmFyLmNhbGMpLGMoKSxzLnB1c2goZSl9cmV0dXJuIHN9KHQpLChmdW5jdGlvbih0KXtyZXR1cm4gdC5faWR9KSk7ZS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2lkfSkpLmNsYXNzZWQoTS5jb2xvcmJhciwhMCksZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtjLmVuc3VyZVNpbmdsZShyLCJyZWN0IixNLmNiYmcpLGMuZW5zdXJlU2luZ2xlKHIsImciLE0uY2JmaWxscyksYy5lbnN1cmVTaW5nbGUociwiZyIsTS5jYmxpbmVzKSxjLmVuc3VyZVNpbmdsZShyLCJnIixNLmNiYXhpcywoZnVuY3Rpb24odCl7dC5jbGFzc2VkKE0uY3Jpc3AsITApfSkpLGMuZW5zdXJlU2luZ2xlKHIsImciLE0uY2J0aXRsZXVuc2hpZnQsKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJnIikuY2xhc3NlZChNLmNidGl0bGUsITApfSkpLGMuZW5zdXJlU2luZ2xlKHIsInJlY3QiLE0uY2JvdXRsaW5lKTt2YXIgdj1mdW5jdGlvbih0LGUscil7dmFyIG89ci5fZnVsbExheW91dCxsPW8uX3NpemUsaD1lLl9maWxsY29sb3Isdj1lLl9saW5lLF89ZS50aXRsZSxBPV8uc2lkZSxTPWUuX3pyYW5nZXx8bi5leHRlbnQoKCJmdW5jdGlvbiI9PXR5cGVvZiBoP2g6di5jb2xvcikuZG9tYWluKCkpLEU9ImZ1bmN0aW9uIj09dHlwZW9mIHYuY29sb3I/di5jb2xvcjpmdW5jdGlvbigpe3JldHVybiB2LmNvbG9yfSxDPSJmdW5jdGlvbiI9PXR5cGVvZiBoP2g6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sTD1lLl9sZXZlbHMsST1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuX2xldmVscyxvPVtdLHM9W10sbD1hLmVuZCthLnNpemUvMTAwLGM9YS5zaXplLHU9MS4wMDEqclswXS0uMDAxKnJbMV0sZj0xLjAwMSpyWzFdLS4wMDEqclswXTtmb3IoaT0wO2k8MWU1JiYobj1hLnN0YXJ0K2kqYywhKGM+MD9uPj1sOm48PWwpKTtpKyspbj51JiZuPGYmJm8ucHVzaChuKTtpZihlLl9maWxsZ3JhZGllbnQpcz1bMF07ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5fZmlsbGNvbG9yKXt2YXIgaD1lLl9maWxsbGV2ZWxzO2lmKGgpZm9yKGw9aC5lbmQraC5zaXplLzEwMCxjPWguc2l6ZSxpPTA7aTwxZTUmJihuPWguc3RhcnQraSpjLCEoYz4wP24+PWw6bjw9bCkpO2krKyluPnJbMF0mJm48clsxXSYmcy5wdXNoKG4pO2Vsc2Uocz1vLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQtYS5zaXplLzJ9KSkpLnB1c2goc1tzLmxlbmd0aC0xXSthLnNpemUpfWVsc2UgZS5fZmlsbGNvbG9yJiYic3RyaW5nIj09dHlwZW9mIGUuX2ZpbGxjb2xvciYmKHM9WzBdKTthLnNpemU8MCYmKG8ucmV2ZXJzZSgpLHMucmV2ZXJzZSgpKTtyZXR1cm57bGluZTpvLGZpbGw6c319KDAsZSxTKSxQPUkuZmlsbCx6PUkubGluZSxPPU1hdGgucm91bmQoZS50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1lLnRoaWNrbmVzc21vZGU/bC53OjEpKSxEPU8vbC53LFI9TWF0aC5yb3VuZChlLmxlbiooImZyYWN0aW9uIj09PWUubGVubW9kZT9sLmg6MSkpLEY9Ui9sLmgsQj1lLnhwYWQvbC53LE49KGUuYm9yZGVyd2lkdGgrZS5vdXRsaW5ld2lkdGgpLzIsaj1lLnlwYWQvbC5oLFU9TWF0aC5yb3VuZChlLngqbC53K2UueHBhZCksVj1lLngtRCooe21pZGRsZTouNSxyaWdodDoxfVtlLnhhbmNob3JdfHwwKSxxPWUueStGKigoe3RvcDotLjUsYm90dG9tOi41fVtlLnlhbmNob3JdfHwwKS0uNSksSD1NYXRoLnJvdW5kKGwuaCooMS1xKSksRz1ILVI7ZS5fbGVuRnJhYz1GLGUuX3RoaWNrRnJhYz1ELGUuX3hMZWZ0RnJhYz1WLGUuX3lCb3R0b21GcmFjPXE7dmFyIFk9ZS5fYXhpcz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxpPXt0eXBlOiJsaW5lYXIiLHJhbmdlOnIsdGlja21vZGU6ZS50aWNrbW9kZSxudGlja3M6ZS5udGlja3MsdGljazA6ZS50aWNrMCxkdGljazplLmR0aWNrLHRpY2t2YWxzOmUudGlja3ZhbHMsdGlja3RleHQ6ZS50aWNrdGV4dCx0aWNrczplLnRpY2tzLHRpY2tsZW46ZS50aWNrbGVuLHRpY2t3aWR0aDplLnRpY2t3aWR0aCx0aWNrY29sb3I6ZS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6ZS5zaG93dGlja2xhYmVscyx0aWNrbGFiZWxwb3NpdGlvbjplLnRpY2tsYWJlbHBvc2l0aW9uLHRpY2tmb250OmUudGlja2ZvbnQsdGlja2FuZ2xlOmUudGlja2FuZ2xlLHRpY2tmb3JtYXQ6ZS50aWNrZm9ybWF0LGV4cG9uZW50Zm9ybWF0OmUuZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6ZS5taW5leHBvbmVudCxzZXBhcmF0ZXRob3VzYW5kczplLnNlcGFyYXRldGhvdXNhbmRzLHNob3dleHBvbmVudDplLnNob3dleHBvbmVudCxzaG93dGlja3ByZWZpeDplLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6ZS50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4OmUuc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDplLnRpY2tzdWZmaXgsdGl0bGU6ZS50aXRsZSxzaG93bGluZTohMCxhbmNob3I6ImZyZWUiLHNpZGU6InJpZ2h0Iixwb3NpdGlvbjoxfSxhPXt0eXBlOiJsaW5lYXIiLF9pZDoieSIrZS5faWR9LG89e2xldHRlcjoieSIsZm9udDpuLmZvbnQsbm9Ib3ZlcjohMCxub1RpY2tzb246ITAsbm9UaWNrbGFiZWxtb2RlOiEwLGNhbGVuZGFyOm4uY2FsZW5kYXJ9O2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gYy5jb2VyY2UoaSxhLGIsdCxlKX1yZXR1cm4geShpLGEscyxvLG4pLHgoaSxhLHMsbyksYX0ocixlLFMpO1kucG9zaXRpb249ZS54K0IrRCwtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihBKSYmKFkudGl0bGUuc2lkZT1BLFkudGl0bGV4PWUueCtCLFkudGl0bGV5PXErKCJ0b3AiPT09Xy5zaWRlP0YtajpqKSk7aWYodi5jb2xvciYmImF1dG8iPT09ZS50aWNrbW9kZSl7WS50aWNrbW9kZT0ibGluZWFyIixZLnRpY2swPUwuc3RhcnQ7dmFyIFc9TC5zaXplLFg9Yy5jb25zdHJhaW4oKEgtRykvNTAsNCwxNSkrMSxaPShTWzFdLVNbMF0pLygoZS5udGlja3N8fFgpKlcpO2lmKFo+MSl7dmFyIEo9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhaKS9NYXRoLkxOMTApKTtXKj1KKmMucm91bmRVcChaL0osWzIsNSwxMF0pLChNYXRoLmFicyhMLnN0YXJ0KS9MLnNpemUrMWUtNiklMTwyZS02JiYoWS50aWNrMD0wKX1ZLmR0aWNrPVd9WS5kb21haW49W3EraixxK0Ytal0sWS5zZXRTY2FsZSgpLHQuYXR0cigidHJhbnNmb3JtIix1KE1hdGgucm91bmQobC5sKSxNYXRoLnJvdW5kKGwudCkpKTt2YXIgSyxRPXQuc2VsZWN0KCIuIitNLmNidGl0bGV1bnNoaWZ0KS5hdHRyKCJ0cmFuc2Zvcm0iLHUoLU1hdGgucm91bmQobC5sKSwtTWF0aC5yb3VuZChsLnQpKSksJD10LnNlbGVjdCgiLiIrTS5jYmF4aXMpLHR0PTA7ZnVuY3Rpb24gZXQobixpKXt2YXIgYT17cHJvcENvbnRhaW5lcjpZLHByb3BOYW1lOmUuX3Byb3BQcmVmaXgrInRpdGxlIix0cmFjZUluZGV4OmUuX3RyYWNlSW5kZXgsX21ldGE6ZS5fbWV0YSxwbGFjZWhvbGRlcjpvLl9kZmx0VGl0bGUuY29sb3JiYXIsY29udGFpbmVyR3JvdXA6dC5zZWxlY3QoIi4iK00uY2J0aXRsZSl9LHM9ImgiPT09bi5jaGFyQXQoMCk/bi5zdWJzdHIoMSk6ImgiK247dC5zZWxlY3RBbGwoIi4iK3MrIiwuIitzKyItbWF0aC1ncm91cCIpLnJlbW92ZSgpLGcuZHJhdyhyLG4sZihhLGl8fHt9KSl9cmV0dXJuIGMuc3luY09yQXN5bmMoW2EucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKEEpKXt2YXIgdCxyPWwubCsoZS54K0IpKmwudyxuPVkudGl0bGUuZm9udC5zaXplO3Q9InRvcCI9PT1BPygxLShxK0YtaikpKmwuaCtsLnQrMysuNzUqbjooMS0ocStqKSkqbC5oK2wudC0zLS4yNSpuLGV0KFkuX2lkKyJ0aXRsZSIse2F0dHJpYnV0ZXM6e3g6cix5OnQsInRleHQtYW5jaG9yIjoic3RhcnQifX0pfX0sZnVuY3Rpb24oKXtpZigtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihBKSl7dmFyIGE9dC5zZWxlY3QoIi4iK00uY2J0aXRsZSksbz1hLnNlbGVjdCgidGV4dCIpLGY9Wy1lLm91dGxpbmV3aWR0aC8yLGUub3V0bGluZXdpZHRoLzJdLGg9YS5zZWxlY3QoIi5oIitZLl9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKSxkPTE1LjY7aWYoby5ub2RlKCkmJihkPXBhcnNlSW50KG8ubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSp3KSxoPyh0dD1wLmJCb3goaCkuaGVpZ2h0KT5kJiYoZlsxXS09KHR0LWQpLzIpOm8ubm9kZSgpJiYhby5jbGFzc2VkKE0uanNQbGFjZWhvbGRlcikmJih0dD1wLmJCb3goby5ub2RlKCkpLmhlaWdodCksdHQpe2lmKHR0Kz01LCJ0b3AiPT09QSlZLmRvbWFpblsxXS09dHQvbC5oLGZbMV0qPS0xO2Vsc2V7WS5kb21haW5bMF0rPXR0L2wuaDt2YXIgZz1tLmxpbmVDb3VudChvKTtmWzFdKz0oMS1nKSpkfWEuYXR0cigidHJhbnNmb3JtIix1KGZbMF0sZlsxXSkpLFkuc2V0U2NhbGUoKX19dC5zZWxlY3RBbGwoIi4iK00uY2JmaWxscysiLC4iK00uY2JsaW5lcykuYXR0cigidHJhbnNmb3JtIix1KDAsTWF0aC5yb3VuZChsLmgqKDEtWS5kb21haW5bMV0pKSkpLCQuYXR0cigidHJhbnNmb3JtIix1KDAsTWF0aC5yb3VuZCgtbC50KSkpO3ZhciB5PXQuc2VsZWN0KCIuIitNLmNiZmlsbHMpLnNlbGVjdEFsbCgicmVjdC4iK00uY2JmaWxsKS5hdHRyKCJzdHlsZSIsIiIpLmRhdGEoUCk7eS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoTS5jYmZpbGwsITApLnN0eWxlKCJzdHJva2UiLCJub25lIikseS5leGl0KCkucmVtb3ZlKCk7dmFyIHg9Uy5tYXAoWS5jMnApLm1hcChNYXRoLnJvdW5kKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7eS5lYWNoKChmdW5jdGlvbih0LGEpe3ZhciBvPVswPT09YT9TWzBdOihQW2FdK1BbYS0xXSkvMixhPT09UC5sZW5ndGgtMT9TWzFdOihQW2FdK1BbYSsxXSkvMl0ubWFwKFkuYzJwKS5tYXAoTWF0aC5yb3VuZCk7b1sxXT1jLmNvbnN0cmFpbihvWzFdKyhvWzFdPm9bMF0pPzE6LTEseFswXSx4WzFdKTt2YXIgcz1uLnNlbGVjdCh0aGlzKS5hdHRyKHt4OlUsd2lkdGg6TWF0aC5tYXgoTywyKSx5Om4ubWluKG8pLGhlaWdodDpNYXRoLm1heChuLm1heChvKS1uLm1pbihvKSwyKX0pO2lmKGUuX2ZpbGxncmFkaWVudClwLmdyYWRpZW50KHMscixlLl9pZCwidmVydGljYWwiLGUuX2ZpbGxncmFkaWVudCwiZmlsbCIpO2Vsc2V7dmFyIGw9Qyh0KS5yZXBsYWNlKCJlLSIsIiIpO3MuYXR0cigiZmlsbCIsaShsKS50b0hleFN0cmluZygpKX19KSk7dmFyIGI9dC5zZWxlY3QoIi4iK00uY2JsaW5lcykuc2VsZWN0QWxsKCJwYXRoLiIrTS5jYmxpbmUpLmRhdGEodi5jb2xvciYmdi53aWR0aD96OltdKTtiLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChNLmNibGluZSwhMCksYi5leGl0KCkucmVtb3ZlKCksYi5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrVSsiLCIrKE1hdGgucm91bmQoWS5jMnAodCkpK3Yud2lkdGgvMiUxKSsiaCIrTykuY2FsbChwLmxpbmVHcm91cFN0eWxlLHYud2lkdGgsRSh0KSx2LmRhc2gpfSkpLCQuc2VsZWN0QWxsKCJnLiIrWS5faWQrInRpY2sscGF0aCIpLnJlbW92ZSgpO3ZhciBfPVUrTysoZS5vdXRsaW5ld2lkdGh8fDApLzItKCJvdXRzaWRlIj09PWUudGlja3M/MTowKSxUPXMuY2FsY1RpY2tzKFkpLGs9cy5nZXRUaWNrU2lnbnMoWSlbMl07cmV0dXJuIHMuZHJhd1RpY2tzKHIsWSx7dmFsczoiaW5zaWRlIj09PVkudGlja3M/cy5jbGlwRW5kcyhZLFQpOlQsbGF5ZXI6JCxwYXRoOnMubWFrZVRpY2tQYXRoKFksXyxrKSx0cmFuc0ZuOnMubWFrZVRyYW5zVGlja0ZuKFkpfSkscy5kcmF3TGFiZWxzKHIsWSx7dmFsczpULGxheWVyOiQsdHJhbnNGbjpzLm1ha2VUcmFuc1RpY2tMYWJlbEZuKFkpLGxhYmVsRm5zOnMubWFrZUxhYmVsRm5zKFksXyl9KX0sZnVuY3Rpb24oKXtpZigtMT09PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihBKSl7dmFyIHQ9WS50aXRsZS5mb250LnNpemUsZT1ZLl9vZmZzZXQrWS5fbGVuZ3RoLzIsaT1sLmwrKFkucG9zaXRpb258fDApKmwudysoInJpZ2h0Ij09PVkuc2lkZT8xMCt0KihZLnNob3d0aWNrbGFiZWxzPzE6LjUpOi0xMC10KihZLnNob3d0aWNrbGFiZWxzPy41OjApKTtldCgiaCIrWS5faWQrInRpdGxlIix7YXZvaWQ6e3NlbGVjdGlvbjpuLnNlbGVjdChyKS5zZWxlY3RBbGwoImcuIitZLl9pZCsidGljayIpLHNpZGU6QSxvZmZzZXRMZWZ0OmwubCxvZmZzZXRUb3A6MCxtYXhTaGlmdDpvLndpZHRofSxhdHRyaWJ1dGVzOnt4OmkseTplLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOiItOTAiLG9mZnNldDowfX0pfX0sYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dmFyIG49TytlLm91dGxpbmV3aWR0aC8yO2lmKC0xPT09WS50aWNrbGFiZWxwb3NpdGlvbi5pbmRleE9mKCJpbnNpZGUiKSYmKG4rPXAuYkJveCgkLm5vZGUoKSkud2lkdGgpLChLPVEuc2VsZWN0KCJ0ZXh0IikpLm5vZGUoKSYmIUsuY2xhc3NlZChNLmpzUGxhY2Vob2xkZXIpKXt2YXIgaSxvPVEuc2VsZWN0KCIuaCIrWS5faWQrInRpdGxlLW1hdGgtZ3JvdXAiKS5ub2RlKCk7aT1vJiYtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihBKT9wLmJCb3gobykud2lkdGg6cC5iQm94KFEubm9kZSgpKS5yaWdodC1VLWwubCxuPU1hdGgubWF4KG4saSl9dmFyIHM9MiplLnhwYWQrbitlLmJvcmRlcndpZHRoK2Uub3V0bGluZXdpZHRoLzIsYz1ILUc7dC5zZWxlY3QoIi4iK00uY2JiZykuYXR0cih7eDpVLWUueHBhZC0oZS5ib3JkZXJ3aWR0aCtlLm91dGxpbmV3aWR0aCkvMix5OkctTix3aWR0aDpNYXRoLm1heChzLDIpLGhlaWdodDpNYXRoLm1heChjKzIqTiwyKX0pLmNhbGwoZC5maWxsLGUuYmdjb2xvcikuY2FsbChkLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKSx0LnNlbGVjdEFsbCgiLiIrTS5jYm91dGxpbmUpLmF0dHIoe3g6VSx5OkcrZS55cGFkKygidG9wIj09PUE/dHQ6MCksd2lkdGg6TWF0aC5tYXgoTywyKSxoZWlnaHQ6TWF0aC5tYXgoYy0yKmUueXBhZC10dCwyKX0pLmNhbGwoZC5zdHJva2UsZS5vdXRsaW5lY29sb3IpLnN0eWxlKHtmaWxsOiJub25lIiwic3Ryb2tlLXdpZHRoIjplLm91dGxpbmV3aWR0aH0pO3ZhciBmPSh7Y2VudGVyOi41LHJpZ2h0OjF9W2UueGFuY2hvcl18fDApKnM7dC5hdHRyKCJ0cmFuc2Zvcm0iLHUobC5sLWYsbC50KSk7dmFyIGg9e30sZz1UW2UueWFuY2hvcl0sbT1rW2UueWFuY2hvcl07InBpeGVscyI9PT1lLmxlbm1vZGU/KGgueT1lLnksaC50PWMqZyxoLmI9YyptKTooaC50PWguYj0wLGgueXQ9ZS55K2UubGVuKmcsaC55Yj1lLnktZS5sZW4qbSk7dmFyIHY9VFtlLnhhbmNob3JdLHk9a1tlLnhhbmNob3JdO2lmKCJwaXhlbHMiPT09ZS50aGlja25lc3Ntb2RlKWgueD1lLngsaC5sPXMqdixoLnI9cyp5O2Vsc2V7dmFyIHg9cy1PO2gubD14KnYsaC5yPXgqeSxoLnhsPWUueC1lLnRoaWNrbmVzcyp2LGgueHI9ZS54K2UudGhpY2tuZXNzKnl9YS5hdXRvTWFyZ2luKHIsZS5faWQsaCl9XSxyKX0ocixlLHQpO3YmJnYudGhlbiYmKHQuX3Byb21pc2VzfHxbXSkucHVzaCh2KSx0Ll9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24mJmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEscz1yLl9mdWxsTGF5b3V0Ll9zaXplO2wuaW5pdCh7ZWxlbWVudDp0Lm5vZGUoKSxnZDpyLHByZXBGbjpmdW5jdGlvbigpe249dC5hdHRyKCJ0cmFuc2Zvcm0iKSxoKHQpfSxtb3ZlRm46ZnVuY3Rpb24ocixvKXt0LmF0dHIoInRyYW5zZm9ybSIsbit1KHIsbykpLGk9bC5hbGlnbihlLl94TGVmdEZyYWMrci9zLncsZS5fdGhpY2tGcmFjLDAsMSxlLnhhbmNob3IpLGE9bC5hbGlnbihlLl95Qm90dG9tRnJhYy1vL3MuaCxlLl9sZW5GcmFjLDAsMSxlLnlhbmNob3IpO3ZhciBjPWwuZ2V0Q3Vyc29yKGksYSxlLnhhbmNob3IsZS55YW5jaG9yKTtoKHQsYyl9LGRvbmVGbjpmdW5jdGlvbigpe2lmKGgodCksdm9pZCAwIT09aSYmdm9pZCAwIT09YSl7dmFyIG49e307bltlLl9wcm9wUHJlZml4KyJ4Il09aSxuW2UuX3Byb3BQcmVmaXgrInkiXT1hLHZvaWQgMCE9PWUuX3RyYWNlSW5kZXg/by5jYWxsKCJfZ3VpUmVzdHlsZSIscixuLGUuX3RyYWNlSW5kZXgpOm8uY2FsbCgiX2d1aVJlbGF5b3V0IixyLG4pfX19KX0ocixlLHQpfSkpLGUuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKGUpe2EuYXV0b01hcmdpbih0LGUuX2lkKX0pKS5yZW1vdmUoKSxlLm9yZGVyKCl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc5OSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIjo4MzAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiOjg0NSwiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MSwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi4vY29sb3IiOjY0MywiLi4vY29sb3JzY2FsZS9oZWxwZXJzIjo2NTQsIi4uL2RyYWdlbGVtZW50Ijo2NjIsIi4uL2RyYXdpbmciOjY2NSwiLi4vdGl0bGVzIjo3MzgsIi4vY29uc3RhbnRzIjo2NDUsZDM6MTY5LHRpbnljb2xvcjI6NTc2fV0sNjQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQuY29sb3JiYXIpfX0seyIuLi8uLi9saWIiOjc3OH1dLDY0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiY29sb3JiYXIiLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3IikuZHJhdyxoYXNDb2xvcmJhcjp0KCIuL2hhc19jb2xvcmJhciIpfX0seyIuL2F0dHJpYnV0ZXMiOjY0NCwiLi9kZWZhdWx0cyI6NjQ2LCIuL2RyYXciOjY0NywiLi9oYXNfY29sb3JiYXIiOjY0OH1dLDY1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvcmJhci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIvcmVnZXgiKS5jb3VudGVyLGE9dCgiLi9zY2FsZXMuanMiKS5zY2FsZXM7T2JqZWN0LmtleXMoYSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4iYCIrdCsiYCJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dD10fHwiIjt2YXIgcixzPShlPWV8fHt9KS5jTGV0dGVyfHwiYyIsbD0oIm9ubHlJZk51bWVyaWNhbCJpbiBlP2Uub25seUlmTnVtZXJpY2FsOkJvb2xlYW4odCksIm5vU2NhbGUiaW4gZT9lLm5vU2NhbGU6Im1hcmtlci5saW5lIj09PXQpLGM9InNob3dTY2FsZURmbHQiaW4gZT9lLnNob3dTY2FsZURmbHQ6InoiPT09cyx1PSJzdHJpbmciPT10eXBlb2YgZS5jb2xvcnNjYWxlRGZsdD9hW2UuY29sb3JzY2FsZURmbHRdOm51bGwsZj1lLmVkaXRUeXBlT3ZlcnJpZGV8fCIiLGg9dD90KyIuIjoiIjsiY29sb3JBdHRyImluIGU/KHI9ZS5jb2xvckF0dHIsZS5jb2xvckF0dHIpOm8oaCsocj17ejoieiIsYzoiY29sb3IifVtzXSkpO3ZhciBwPXMrImF1dG8iLGQ9cysibWluIixnPXMrIm1heCIsbT1zKyJtaWQiLHY9KG8oaCtwKSxvKGgrZCksbyhoK2cpLHt9KTt2W2RdPXZbZ109dm9pZCAwO3ZhciB5PXt9O3lbcF09ITE7dmFyIHg9e307cmV0dXJuImNvbG9yIj09PXImJih4LmNvbG9yPXt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxlZGl0VHlwZTpmfHwic3R5bGUifSxlLmFuaW0mJih4LmNvbG9yLmFuaW09ITApKSx4W3BdPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6dn0seFtkXT17dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6Znx8InBsb3QiLGltcGxpZWRFZGl0czp5fSx4W2ddPXt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZTpmfHwicGxvdCIsaW1wbGllZEVkaXRzOnl9LHhbbV09e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6dn0seC5jb2xvcnNjYWxlPXt2YWxUeXBlOiJjb2xvcnNjYWxlIixlZGl0VHlwZToiY2FsYyIsZGZsdDp1LGltcGxpZWRFZGl0czp7YXV0b2NvbG9yc2NhbGU6ITF9fSx4LmF1dG9jb2xvcnNjYWxlPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExIT09ZS5hdXRvQ29sb3JEZmx0LGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6e2NvbG9yc2NhbGU6dm9pZCAwfX0seC5yZXZlcnNlc2NhbGU9e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxsfHwoeC5zaG93c2NhbGU9e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6YyxlZGl0VHlwZToiY2FsYyJ9LHguY29sb3JiYXI9biksZS5ub0NvbG9yQXhpc3x8KHguY29sb3JheGlzPXt2YWxUeXBlOiJzdWJwbG90aWQiLHJlZ2V4OmkoImNvbG9yYXhpcyIpLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9KSx4fX0seyIuLi8uLi9saWIvcmVnZXgiOjc5NSwiLi4vY29sb3JiYXIvYXR0cmlidXRlcyI6NjQ0LCIuL3NjYWxlcy5qcyI6NjU4fV0sNjUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4vaGVscGVycyIpLmV4dHJhY3RPcHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scz10Ll9mdWxsTGF5b3V0LGw9ci52YWxzLGM9ci5jb250YWluZXJTdHIsdT1jP2kubmVzdGVkUHJvcGVydHkoZSxjKS5nZXQoKTplLGY9YSh1KSxoPSExIT09Zi5hdXRvLHA9Zi5taW4sZD1mLm1heCxnPWYubWlkLG09ZnVuY3Rpb24oKXtyZXR1cm4gaS5hZ2dOdW1zKE1hdGgubWluLG51bGwsbCl9LHY9ZnVuY3Rpb24oKXtyZXR1cm4gaS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsbCl9Oyh2b2lkIDA9PT1wP3A9bSgpOmgmJihwPXUuX2NvbG9yQXgmJm4ocCk/TWF0aC5taW4ocCxtKCkpOm0oKSksdm9pZCAwPT09ZD9kPXYoKTpoJiYoZD11Ll9jb2xvckF4JiZuKGQpP01hdGgubWF4KGQsdigpKTp2KCkpLGgmJnZvaWQgMCE9PWcmJihkLWc+Zy1wP3A9Zy0oZC1nKTpkLWc8Zy1wJiYoZD1nKyhnLXApKSkscD09PWQmJihwLT0uNSxkKz0uNSksZi5fc3luYygibWluIixwKSxmLl9zeW5jKCJtYXgiLGQpLGYuYXV0b2NvbG9yc2NhbGUpJiYobz1wKmQ8MD9zLmNvbG9yc2NhbGUuZGl2ZXJnaW5nOnA+PTA/cy5jb2xvcnNjYWxlLnNlcXVlbnRpYWw6cy5jb2xvcnNjYWxlLnNlcXVlbnRpYWxtaW51cyxmLl9zeW5jKCJjb2xvcnNjYWxlIixvKSl9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuL2hlbHBlcnMiOjY1NCwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDY1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuL2hlbHBlcnMiKS5leHRyYWN0T3B0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7dmFyIHI9dFsiXyIrZV07dm9pZCAwIT09ciYmKHRbZV09cil9ZnVuY3Rpb24gbyh0LGkpe3ZhciBvPWkuY29udGFpbmVyP24ubmVzdGVkUHJvcGVydHkodCxpLmNvbnRhaW5lcikuZ2V0KCk6dDtpZihvKWlmKG8uY29sb3JheGlzKW8uX2NvbG9yQXg9ZVtvLmNvbG9yYXhpc107ZWxzZXt2YXIgcz1hKG8pLGw9cy5hdXRvOyhsfHx2b2lkIDA9PT1zLm1pbikmJnIobyxpLm1pbiksKGx8fHZvaWQgMD09PXMubWF4KSYmcihvLGkubWF4KSxzLmF1dG9jb2xvcnNjYWxlJiZyKG8sImNvbG9yc2NhbGUiKX19Zm9yKHZhciBzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc10sYz1sLl9tb2R1bGUuY29sb3JiYXI7aWYoYylpZihBcnJheS5pc0FycmF5KGMpKWZvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKW8obCxjW3VdKTtlbHNlIG8obCxjKTtpKGwsIm1hcmtlci5saW5lIikmJm8obCx7Y29udGFpbmVyOiJtYXJrZXIubGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSl9Zm9yKHZhciBmIGluIGUuX2NvbG9yQXhlcylvKGVbZl0se21pbjoiY21pbiIsbWF4OiJjbWF4In0pfX0seyIuLi8uLi9saWIiOjc3OCwiLi9oZWxwZXJzIjo2NTR9XSw2NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIiksbz10KCIuLi9jb2xvcmJhci9kZWZhdWx0cyIpLHM9dCgiLi9zY2FsZXMiKS5pc1ZhbGlkLGw9dCgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIGU/aS5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpfHx7fTp0fWUuZXhwb3J0cz1mdW5jdGlvbiB0KGUscix1LGYsaCl7dmFyIHA9aC5wcmVmaXgsZD1oLmNMZXR0ZXIsZz0iX21vZHVsZSJpbiByLG09YyhlLHApLHY9YyhyLHApLHk9YyhyLl90ZW1wbGF0ZXx8e30scCl8fHt9LHg9ZnVuY3Rpb24oKXtyZXR1cm4gZGVsZXRlIGUuY29sb3JheGlzLGRlbGV0ZSByLmNvbG9yYXhpcyx0KGUscix1LGYsaCl9O2lmKGcpe3ZhciBiPXUuX2NvbG9yQXhlc3x8e30sXz1mKHArImNvbG9yYXhpcyIpO2lmKF8pe3ZhciB3PWwociwiY29udG91ciIpJiZpLm5lc3RlZFByb3BlcnR5KHIsImNvbnRvdXJzLmNvbG9yaW5nIikuZ2V0KCl8fCJoZWF0bWFwIixUPWJbX107cmV0dXJuIHZvaWQoVD8oVFsyXS5wdXNoKHgpLFRbMF0hPT13JiYoVFswXT0hMSxpLndhcm4oWyJJZ25vcmluZyBjb2xvcmF4aXM6IixfLCJzZXR0aW5nIiwiYXMgaXQgaXMgbGlua2VkIHRvIGluY29tcGF0aWJsZSBjb2xvcnNjYWxlcy4iXS5qb2luKCIgIikpKSk6YltfXT1bdyxyLFt4XV0pfX12YXIgaz1tW2QrIm1pbiJdLE09bVtkKyJtYXgiXSxBPW4oaykmJm4oTSkmJms8TTtmKHArZCsiYXV0byIsIUEpP2YocCtkKyJtaWQiKTooZihwK2QrIm1pbiIpLGYocCtkKyJtYXgiKSk7dmFyIFMsRSxDPW0uY29sb3JzY2FsZSxMPXkuY29sb3JzY2FsZTsodm9pZCAwIT09QyYmKFM9IXMoQykpLHZvaWQgMCE9PUwmJihTPSFzKEwpKSxmKHArImF1dG9jb2xvcnNjYWxlIixTKSxmKHArImNvbG9yc2NhbGUiKSxmKHArInJldmVyc2VzY2FsZSIpLCJtYXJrZXIubGluZS4iIT09cCkmJihwJiZnJiYoRT1hKG0pKSxmKHArInNob3dzY2FsZSIsRSkmJihwJiZ5JiYodi5fdGVtcGxhdGU9eSksbyhtLHYsdSkpKX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL2NvbG9yYmFyL2RlZmF1bHRzIjo2NDYsIi4uL2NvbG9yYmFyL2hhc19jb2xvcmJhciI6NjQ4LCIuL3NjYWxlcyI6NjU4LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNjU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi9jb2xvciIpLGw9dCgiLi9zY2FsZXMiKS5pc1ZhbGlkO3ZhciBjPVsic2hvd3NjYWxlIiwiYXV0b2NvbG9yc2NhbGUiLCJjb2xvcnNjYWxlIiwicmV2ZXJzZXNjYWxlIiwiY29sb3JiYXIiXSx1PVsibWluIiwibWF4IiwibWlkIiwiYXV0byJdO2Z1bmN0aW9uIGYodCl7dmFyIGUscixuLGk9dC5fY29sb3JBeCxhPWl8fHQsbz17fTtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKW9bbj1jW3JdXT1hW25dO2lmKGkpZm9yKGU9ImMiLHI9MDtyPHUubGVuZ3RoO3IrKylvW249dVtyXV09YVsiYyIrbl07ZWxzZXt2YXIgcztmb3Iocj0wO3I8dS5sZW5ndGg7cisrKSgocz0iYyIrKG49dVtyXSkpaW4gYXx8KHM9InoiK24paW4gYSkmJihvW25dPWFbc10pO2U9cy5jaGFyQXQoMCl9cmV0dXJuIG8uX3N5bmM9ZnVuY3Rpb24odCxyKXt2YXIgbj0tMSE9PXUuaW5kZXhPZih0KT9lK3Q6dDthW25dPWFbIl8iK25dPXJ9LG99ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGU9Zih0KSxyPWUubWluLG49ZS5tYXgsaT1lLnJldmVyc2VzY2FsZT9wKGUuY29sb3JzY2FsZSk6ZS5jb2xvcnNjYWxlLGE9aS5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksbD0wO2w8YTtsKyspe3ZhciBjPWlbbF07b1tsXT1yK2NbMF0qKG4tciksc1tsXT1jWzFdfXJldHVybntkb21haW46byxyYW5nZTpzfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPWUtMSxpPTA7bj49MDtuLS0saSsrKXt2YXIgYT10W25dO3JbaV09WzEtYVswXSxhWzFdXX1yZXR1cm4gcn1mdW5jdGlvbiBkKHQsZSl7ZT1lfHx7fTtmb3IodmFyIHI9dC5kb21haW4sbz10LnJhbmdlLGw9by5sZW5ndGgsYz1uZXcgQXJyYXkobCksdT0wO3U8bDt1Kyspe3ZhciBmPWkob1t1XSkudG9SZ2IoKTtjW3VdPVtmLnIsZi5nLGYuYixmLmFdfXZhciBoLHA9bi5zY2FsZS5saW5lYXIoKS5kb21haW4ocikucmFuZ2UoYykuY2xhbXAoITApLGQ9ZS5ub051bWVyaWNDaGVjayxtPWUucmV0dXJuQXJyYXk7cmV0dXJuKGg9ZCYmbT9wOmQ/ZnVuY3Rpb24odCl7cmV0dXJuIGcocCh0KSl9Om0/ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/cCh0KTppKHQpLmlzVmFsaWQoKT90OnMuZGVmYXVsdExpbmV9OmZ1bmN0aW9uKHQpe3JldHVybiBhKHQpP2cocCh0KSk6aSh0KS5pc1ZhbGlkKCk/dDpzLmRlZmF1bHRMaW5lfSkuZG9tYWluPXAuZG9tYWluLGgucmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gb30saH1mdW5jdGlvbiBnKHQpe3ZhciBlPXtyOnRbMF0sZzp0WzFdLGI6dFsyXSxhOnRbM119O3JldHVybiBpKGUpLnRvUmdiU3RyaW5nKCl9ZS5leHBvcnRzPXtoYXNDb2xvcnNjYWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lP28ubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKXx8e306dCxpPW5bcnx8ImNvbG9yIl0scz0hMTtpZihvLmlzQXJyYXlPclR5cGVkQXJyYXkoaSkpZm9yKHZhciBjPTA7YzxpLmxlbmd0aDtjKyspaWYoYShpW2NdKSl7cz0hMDticmVha31yZXR1cm4gby5pc1BsYWluT2JqZWN0KG4pJiYoc3x8ITA9PT1uLnNob3dzY2FsZXx8YShuLmNtaW4pJiZhKG4uY21heCl8fGwobi5jb2xvcnNjYWxlKXx8by5pc1BsYWluT2JqZWN0KG4uY29sb3JiYXIpKX0sZXh0cmFjdE9wdHM6ZixleHRyYWN0U2NhbGU6aCxmbGlwU2NhbGU6cCxtYWtlQ29sb3JTY2FsZUZ1bmM6ZCxtYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZChoKHQpLGUpfX19LHsiLi4vLi4vbGliIjo3NzgsIi4uL2NvbG9yIjo2NDMsIi4vc2NhbGVzIjo2NTgsZDM6MTY5LCJmYXN0LWlzbnVtZXJpYyI6MjQxLHRpbnljb2xvcjI6NTc2fV0sNjU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2NhbGVzIiksaT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiY29sb3JzY2FsZSIsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksc2NhbGVzOm4uc2NhbGVzLGRlZmF1bHRTY2FsZTpuLmRlZmF1bHRTY2FsZSxnZXRTY2FsZTpuLmdldCxpc1ZhbGlkU2NhbGU6bi5pc1ZhbGlkLGhhc0NvbG9yc2NhbGU6aS5oYXNDb2xvcnNjYWxlLGV4dHJhY3RPcHRzOmkuZXh0cmFjdE9wdHMsZXh0cmFjdFNjYWxlOmkuZXh0cmFjdFNjYWxlLGZsaXBTY2FsZTppLmZsaXBTY2FsZSxtYWtlQ29sb3JTY2FsZUZ1bmM6aS5tYWtlQ29sb3JTY2FsZUZ1bmMsbWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlOmkubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlfX0seyIuL2F0dHJpYnV0ZXMiOjY1MCwiLi9jYWxjIjo2NTEsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjY1MiwiLi9kZWZhdWx0cyI6NjUzLCIuL2hlbHBlcnMiOjY1NCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjU2LCIuL2xheW91dF9kZWZhdWx0cyI6NjU3LCIuL3NjYWxlcyI6NjU4fV0sNjU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuL3NjYWxlcyIpLnNjYWxlcztlLmV4cG9ydHM9e2VkaXRUeXBlOiJjYWxjIixjb2xvcnNjYWxlOntlZGl0VHlwZToiY2FsYyIsc2VxdWVudGlhbDp7dmFsVHlwZToiY29sb3JzY2FsZSIsZGZsdDphLlJlZHMsZWRpdFR5cGU6ImNhbGMifSxzZXF1ZW50aWFsbWludXM6e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGRmbHQ6YS5CbHVlcyxlZGl0VHlwZToiY2FsYyJ9LGRpdmVyZ2luZzp7dmFsVHlwZToiY29sb3JzY2FsZSIsZGZsdDphLlJkQnUsZWRpdFR5cGU6ImNhbGMifX0sY29sb3JheGlzOm4oe19pc1N1YnBsb3RPYmo6ITAsZWRpdFR5cGU6ImNhbGMifSxpKCIiLHtjb2xvckF0dHI6ImNvcnJlc3BvbmRpbmcgdHJhY2UgY29sb3IgYXJyYXkocykiLG5vQ29sb3JBeGlzOiEwLHNob3dTY2FsZURmbHQ6ITB9KSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi9hdHRyaWJ1dGVzIjo2NTAsIi4vc2NhbGVzIjo2NTh9XSw2NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuL2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXIoImNvbG9yc2NhbGUuc2VxdWVudGlhbCIpLHIoImNvbG9yc2NhbGUuc2VxdWVudGlhbG1pbnVzIikscigiY29sb3JzY2FsZS5kaXZlcmdpbmciKTt2YXIgcyxsLGM9ZS5fY29sb3JBeGVzO2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gbi5jb2VyY2UocyxsLGEuY29sb3JheGlzLHQsZSl9Zm9yKHZhciBmIGluIGMpe3ZhciBoPWNbZl07aWYoaFswXSlzPXRbZl18fHt9LChsPWkubmV3Q29udGFpbmVyKGUsZiwiY29sb3JheGlzIikpLl9uYW1lPWYsbyhzLGwsZSx1LHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KTtlbHNle2Zvcih2YXIgcD0wO3A8aFsyXS5sZW5ndGg7cCsrKWhbMl1bcF0oKTtkZWxldGUgZS5fY29sb3JBeGVzW2ZdfX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4vZGVmYXVsdHMiOjY1MywiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjU2fV0sNjU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKSxpPXtHcmV5czpbWzAsInJnYigwLDAsMCkiXSxbMSwicmdiKDI1NSwyNTUsMjU1KSJdXSxZbEduQnU6W1swLCJyZ2IoOCwyOSw4OCkiXSxbLjEyNSwicmdiKDM3LDUyLDE0OCkiXSxbLjI1LCJyZ2IoMzQsOTQsMTY4KSJdLFsuMzc1LCJyZ2IoMjksMTQ1LDE5MikiXSxbLjUsInJnYig2NSwxODIsMTk2KSJdLFsuNjI1LCJyZ2IoMTI3LDIwNSwxODcpIl0sWy43NSwicmdiKDE5OSwyMzMsMTgwKSJdLFsuODc1LCJyZ2IoMjM3LDI0OCwyMTcpIl0sWzEsInJnYigyNTUsMjU1LDIxNykiXV0sR3JlZW5zOltbMCwicmdiKDAsNjgsMjcpIl0sWy4xMjUsInJnYigwLDEwOSw0NCkiXSxbLjI1LCJyZ2IoMzUsMTM5LDY5KSJdLFsuMzc1LCJyZ2IoNjUsMTcxLDkzKSJdLFsuNSwicmdiKDExNiwxOTYsMTE4KSJdLFsuNjI1LCJyZ2IoMTYxLDIxNywxNTUpIl0sWy43NSwicmdiKDE5OSwyMzMsMTkyKSJdLFsuODc1LCJyZ2IoMjI5LDI0NSwyMjQpIl0sWzEsInJnYigyNDcsMjUyLDI0NSkiXV0sWWxPclJkOltbMCwicmdiKDEyOCwwLDM4KSJdLFsuMTI1LCJyZ2IoMTg5LDAsMzgpIl0sWy4yNSwicmdiKDIyNywyNiwyOCkiXSxbLjM3NSwicmdiKDI1Miw3OCw0MikiXSxbLjUsInJnYigyNTMsMTQxLDYwKSJdLFsuNjI1LCJyZ2IoMjU0LDE3OCw3NikiXSxbLjc1LCJyZ2IoMjU0LDIxNywxMTgpIl0sWy44NzUsInJnYigyNTUsMjM3LDE2MCkiXSxbMSwicmdiKDI1NSwyNTUsMjA0KSJdXSxCbHVlcmVkOltbMCwicmdiKDAsMCwyNTUpIl0sWzEsInJnYigyNTUsMCwwKSJdXSxSZEJ1OltbMCwicmdiKDUsMTAsMTcyKSJdLFsuMzUsInJnYigxMDYsMTM3LDI0NykiXSxbLjUsInJnYigxOTAsMTkwLDE5MCkiXSxbLjYsInJnYigyMjAsMTcwLDEzMikiXSxbLjcsInJnYigyMzAsMTQ1LDkwKSJdLFsxLCJyZ2IoMTc4LDEwLDI4KSJdXSxSZWRzOltbMCwicmdiKDIyMCwyMjAsMjIwKSJdLFsuMiwicmdiKDI0NSwxOTUsMTU3KSJdLFsuNCwicmdiKDI0NSwxNjAsMTA1KSJdLFsxLCJyZ2IoMTc4LDEwLDI4KSJdXSxCbHVlczpbWzAsInJnYig1LDEwLDE3MikiXSxbLjM1LCJyZ2IoNDAsNjAsMTkwKSJdLFsuNSwicmdiKDcwLDEwMCwyNDUpIl0sWy42LCJyZ2IoOTAsMTIwLDI0NSkiXSxbLjcsInJnYigxMDYsMTM3LDI0NykiXSxbMSwicmdiKDIyMCwyMjAsMjIwKSJdXSxQaWNuaWM6W1swLCJyZ2IoMCwwLDI1NSkiXSxbLjEsInJnYig1MSwxNTMsMjU1KSJdLFsuMiwicmdiKDEwMiwyMDQsMjU1KSJdLFsuMywicmdiKDE1MywyMDQsMjU1KSJdLFsuNCwicmdiKDIwNCwyMDQsMjU1KSJdLFsuNSwicmdiKDI1NSwyNTUsMjU1KSJdLFsuNiwicmdiKDI1NSwyMDQsMjU1KSJdLFsuNywicmdiKDI1NSwxNTMsMjU1KSJdLFsuOCwicmdiKDI1NSwxMDIsMjA0KSJdLFsuOSwicmdiKDI1NSwxMDIsMTAyKSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUmFpbmJvdzpbWzAsInJnYigxNTAsMCw5MCkiXSxbLjEyNSwicmdiKDAsMCwyMDApIl0sWy4yNSwicmdiKDAsMjUsMjU1KSJdLFsuMzc1LCJyZ2IoMCwxNTIsMjU1KSJdLFsuNSwicmdiKDQ0LDI1NSwxNTApIl0sWy42MjUsInJnYigxNTEsMjU1LDApIl0sWy43NSwicmdiKDI1NSwyMzQsMCkiXSxbLjg3NSwicmdiKDI1NSwxMTEsMCkiXSxbMSwicmdiKDI1NSwwLDApIl1dLFBvcnRsYW5kOltbMCwicmdiKDEyLDUxLDEzMSkiXSxbLjI1LCJyZ2IoMTAsMTM2LDE4NikiXSxbLjUsInJnYigyNDIsMjExLDU2KSJdLFsuNzUsInJnYigyNDIsMTQzLDU2KSJdLFsxLCJyZ2IoMjE3LDMwLDMwKSJdXSxKZXQ6W1swLCJyZ2IoMCwwLDEzMSkiXSxbLjEyNSwicmdiKDAsNjAsMTcwKSJdLFsuMzc1LCJyZ2IoNSwyNTUsMjU1KSJdLFsuNjI1LCJyZ2IoMjU1LDI1NSwwKSJdLFsuODc1LCJyZ2IoMjUwLDAsMCkiXSxbMSwicmdiKDEyOCwwLDApIl1dLEhvdDpbWzAsInJnYigwLDAsMCkiXSxbLjMsInJnYigyMzAsMCwwKSJdLFsuNiwicmdiKDI1NSwyMTAsMCkiXSxbMSwicmdiKDI1NSwyNTUsMjU1KSJdXSxCbGFja2JvZHk6W1swLCJyZ2IoMCwwLDApIl0sWy4yLCJyZ2IoMjMwLDAsMCkiXSxbLjQsInJnYigyMzAsMjEwLDApIl0sWy43LCJyZ2IoMjU1LDI1NSwyNTUpIl0sWzEsInJnYigxNjAsMjAwLDI1NSkiXV0sRWFydGg6W1swLCJyZ2IoMCwwLDEzMCkiXSxbLjEsInJnYigwLDE4MCwxODApIl0sWy4yLCJyZ2IoNDAsMjEwLDQwKSJdLFsuNCwicmdiKDIzMCwyMzAsNTApIl0sWy42LCJyZ2IoMTIwLDcwLDIwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLEVsZWN0cmljOltbMCwicmdiKDAsMCwwKSJdLFsuMTUsInJnYigzMCwwLDEwMCkiXSxbLjQsInJnYigxMjAsMCwxMDApIl0sWy42LCJyZ2IoMTYwLDkwLDApIl0sWy44LCJyZ2IoMjMwLDIwMCwwKSJdLFsxLCJyZ2IoMjU1LDI1MCwyMjApIl1dLFZpcmlkaXM6W1swLCIjNDQwMTU0Il0sWy4wNjI3NDUwOTgwMzkyMTU2OSwiIzQ4MTg2YSJdLFsuMTI1NDkwMTk2MDc4NDMxMzcsIiM0NzJkN2IiXSxbLjE4ODIzNTI5NDExNzY0NzA2LCIjNDI0MDg2Il0sWy4yNTA5ODAzOTIxNTY4NjI3NCwiIzNiNTI4YiJdLFsuMzEzNzI1NDkwMTk2MDc4NCwiIzMzNjM4ZCJdLFsuMzc2NDcwNTg4MjM1Mjk0MSwiIzJjNzI4ZSJdLFsuNDM5MjE1Njg2Mjc0NTA5OCwiIzI2ODI4ZSJdLFsuNTAxOTYwNzg0MzEzNzI1NSwiIzIxOTE4YyJdLFsuNTY0NzA1ODgyMzUyOTQxMiwiIzFmYTA4OCJdLFsuNjI3NDUwOTgwMzkyMTU2OSwiIzI4YWU4MCJdLFsuNjkwMTk2MDc4NDMxMzcyNSwiIzNmYmM3MyJdLFsuNzUyOTQxMTc2NDcwNTg4MiwiIzVlYzk2MiJdLFsuODE1Njg2Mjc0NTA5ODAzOSwiIzg0ZDQ0YiJdLFsuODc4NDMxMzcyNTQ5MDE5NiwiI2FkZGMzMCJdLFsuOTQxMTc2NDcwNTg4MjM1MywiI2Q4ZTIxOSJdLFsxLCIjZmRlNzI1Il1dLENpdmlkaXM6W1swLCJyZ2IoMCwzMiw3NikiXSxbLjA1ODgyNCwicmdiKDAsNDIsMTAyKSJdLFsuMTE3NjQ3LCJyZ2IoMCw1MiwxMTApIl0sWy4xNzY0NzEsInJnYigzOSw2MywxMDgpIl0sWy4yMzUyOTQsInJnYig2MCw3NCwxMDcpIl0sWy4yOTQxMTgsInJnYig3Niw4NSwxMDcpIl0sWy4zNTI5NDEsInJnYig5MSw5NSwxMDkpIl0sWy40MTE3NjUsInJnYigxMDQsMTA2LDExMikiXSxbLjQ3MDU4OCwicmdiKDExNywxMTcsMTE3KSJdLFsuNTI5NDEyLCJyZ2IoMTMxLDEyOSwxMjApIl0sWy41ODgyMzUsInJnYigxNDYsMTQwLDEyMCkiXSxbLjY0NzA1OSwicmdiKDE2MSwxNTIsMTE4KSJdLFsuNzA1ODgyLCJyZ2IoMTc2LDE2NSwxMTQpIl0sWy43NjQ3MDYsInJnYigxOTIsMTc3LDEwOSkiXSxbLjgyMzUyOSwicmdiKDIwOSwxOTEsMTAyKSJdLFsuODgyMzUzLCJyZ2IoMjI1LDIwNCw5MikiXSxbLjk0MTE3NiwicmdiKDI0MywyMTksNzkpIl0sWzEsInJnYigyNTUsMjMzLDY5KSJdXX0sYT1pLlJkQnU7ZnVuY3Rpb24gbyh0KXt2YXIgZT0wO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyKXJldHVybiExO2lmKCF0WzBdfHwhdFt0Lmxlbmd0aC0xXSlyZXR1cm4hMTtpZigwIT0rdFswXVswXXx8MSE9K3RbdC5sZW5ndGgtMV1bMF0pcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl07aWYoMiE9PWkubGVuZ3RofHwraVswXTxlfHwhbihpWzFdKS5pc1ZhbGlkKCkpcmV0dXJuITE7ZT0raVswXX1yZXR1cm4hMH1lLmV4cG9ydHM9e3NjYWxlczppLGRlZmF1bHRTY2FsZTphLGdldDpmdW5jdGlvbih0LGUpe2lmKGV8fChlPWEpLCF0KXJldHVybiBlO2Z1bmN0aW9uIHIoKXt0cnl7dD1pW3RdfHxKU09OLnBhcnNlKHQpfWNhdGNoKHIpe3Q9ZX19cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYocigpLCJzdHJpbmciPT10eXBlb2YgdCYmcigpKSxvKHQpP3Q6ZX0saXNWYWxpZDpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09aVt0XXx8byh0KX19fSx7dGlueWNvbG9yMjo1NzZ9XSw2NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9KHQtcikvKG4tciksbz1hK2UvKG4tcikscz0oYStvKS8yO3JldHVybiJsZWZ0Ij09PWl8fCJib3R0b20iPT09aT9hOiJjZW50ZXIiPT09aXx8Im1pZGRsZSI9PT1pP3M6InJpZ2h0Ij09PWl8fCJ0b3AiPT09aT9vOmE8Mi8zLXM/YTpvPjQvMy1zP286c319LHt9XSw2NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT1bWyJzdy1yZXNpemUiLCJzLXJlc2l6ZSIsInNlLXJlc2l6ZSJdLFsidy1yZXNpemUiLCJtb3ZlIiwiZS1yZXNpemUiXSxbIm53LXJlc2l6ZSIsIm4tcmVzaXplIiwibmUtcmVzaXplIl1dO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtyZXR1cm4gdD0ibGVmdCI9PT1yPzA6ImNlbnRlciI9PT1yPzE6InJpZ2h0Ij09PXI/MjpuLmNvbnN0cmFpbihNYXRoLmZsb29yKDMqdCksMCwyKSxlPSJib3R0b20iPT09YT8wOiJtaWRkbGUiPT09YT8xOiJ0b3AiPT09YT8yOm4uY29uc3RyYWluKE1hdGguZmxvb3IoMyplKSwwLDIpLGlbZV1bdF19fSx7Ii4uLy4uL2xpYiI6Nzc4fV0sNjYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3Iuc2VsZWN0TW9kZT1mdW5jdGlvbih0KXtyZXR1cm4ibGFzc28iPT09dHx8InNlbGVjdCI9PT10fSxyLmRyYXdNb2RlPWZ1bmN0aW9uKHQpe3JldHVybiJkcmF3Y2xvc2VkcGF0aCI9PT10fHwiZHJhd29wZW5wYXRoIj09PXR8fCJkcmF3bGluZSI9PT10fHwiZHJhd3JlY3QiPT09dHx8ImRyYXdjaXJjbGUiPT09dH0sci5vcGVuTW9kZT1mdW5jdGlvbih0KXtyZXR1cm4iZHJhd2xpbmUiPT09dHx8ImRyYXdvcGVucGF0aCI9PT10fSxyLnJlY3RNb2RlPWZ1bmN0aW9uKHQpe3JldHVybiJzZWxlY3QiPT09dHx8ImRyYXdsaW5lIj09PXR8fCJkcmF3cmVjdCI9PT10fHwiZHJhd2NpcmNsZSI9PT10fSxyLmZyZWVNb2RlPWZ1bmN0aW9uKHQpe3JldHVybiJsYXNzbyI9PT10fHwiZHJhd2Nsb3NlZHBhdGgiPT09dHx8ImRyYXdvcGVucGF0aCI9PT10fSxyLnNlbGVjdGluZ09yRHJhd2luZz1mdW5jdGlvbih0KXtyZXR1cm4gci5mcmVlTW9kZSh0KXx8ci5yZWN0TW9kZSh0KX19LHt9XSw2NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibW91c2UtZXZlbnQtb2Zmc2V0IiksaT10KCJoYXMtaG92ZXIiKSxhPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLG89dCgiLi4vLi4vbGliIikucmVtb3ZlRWxlbWVudCxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxsPWUuZXhwb3J0cz17fTtsLmFsaWduPXQoIi4vYWxpZ24iKSxsLmdldEN1cnNvcj10KCIuL2N1cnNvciIpO3ZhciBjPXQoIi4vdW5ob3ZlciIpO2Z1bmN0aW9uIHUoKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTmFtZT0iZHJhZ2NvdmVyIjt2YXIgZT10LnN0eWxlO3JldHVybiBlLnBvc2l0aW9uPSJmaXhlZCIsZS5sZWZ0PTAsZS5yaWdodD0wLGUudG9wPTAsZS5ib3R0b209MCxlLnpJbmRleD05OTk5OTk5OTksZS5iYWNrZ3JvdW5kPSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHR9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbih0LmNoYW5nZWRUb3VjaGVzP3QuY2hhbmdlZFRvdWNoZXNbMF06dCxkb2N1bWVudC5ib2R5KX1sLnVuaG92ZXI9Yy53cmFwcGVkLGwudW5ob3ZlclJhdz1jLnJhdyxsLmluaXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGMsaCxwLGQsZyxtPXQuZ2Qsdj0xLHk9bS5fY29udGV4dC5kb3VibGVDbGlja0RlbGF5LHg9dC5lbGVtZW50O20uX21vdXNlRG93blRpbWV8fChtLl9tb3VzZURvd25UaW1lPTApLHguc3R5bGUucG9pbnRlckV2ZW50cz0iYWxsIix4Lm9ubW91c2Vkb3duPV8sYT8oeC5fb250b3VjaHN0YXJ0JiZ4LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHguX29udG91Y2hzdGFydCkseC5fb250b3VjaHN0YXJ0PV8seC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixfLHtwYXNzaXZlOiExfSkpOngub250b3VjaHN0YXJ0PV87dmFyIGI9dC5jbGFtcEZufHxmdW5jdGlvbih0LGUscil7cmV0dXJuIE1hdGguYWJzKHQpPHImJih0PTApLE1hdGguYWJzKGUpPHImJihlPTApLFt0LGVdfTtmdW5jdGlvbiBfKGEpe20uX2RyYWdnZWQ9ITEsbS5fZHJhZ2dpbmc9ITA7dmFyIG89ZihhKTtlPW9bMF0scj1vWzFdLGQ9YS50YXJnZXQscD1hLGc9Mj09PWEuYnV0dG9uc3x8YS5jdHJsS2V5LCJ1bmRlZmluZWQiPT10eXBlb2YgYS5jbGllbnRYJiYidW5kZWZpbmVkIj09dHlwZW9mIGEuY2xpZW50WSYmKGEuY2xpZW50WD1lLGEuY2xpZW50WT1yKSwobj0obmV3IERhdGUpLmdldFRpbWUoKSktbS5fbW91c2VEb3duVGltZTx5P3YrPTE6KHY9MSxtLl9tb3VzZURvd25UaW1lPW4pLHQucHJlcEZuJiZ0LnByZXBGbihhLGUsciksaSYmIWc/KGg9dSgpKS5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoeCkuY3Vyc29yOml8fChoPWRvY3VtZW50LGM9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jdXJzb3IsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh4KS5jdXJzb3IpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLFQpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixUKSwhMSE9PXQuZHJhZ21vZGUmJihhLnByZXZlbnREZWZhdWx0KCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix3KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHcse3Bhc3NpdmU6ITF9KSl9ZnVuY3Rpb24gdyhuKXtuLnByZXZlbnREZWZhdWx0KCk7dmFyIGk9ZihuKSxhPXQubWluRHJhZ3x8cy5NSU5EUkFHLG89YihpWzBdLWUsaVsxXS1yLGEpLGM9b1swXSx1PW9bMV07KGN8fHUpJiYobS5fZHJhZ2dlZD0hMCxsLnVuaG92ZXIobSkpLG0uX2RyYWdnZWQmJnQubW92ZUZuJiYhZyYmKG0uX2RyYWdkYXRhPXtlbGVtZW50OngsZHg6YyxkeTp1fSx0Lm1vdmVGbihjLHUpKX1mdW5jdGlvbiBUKGUpe2lmKGRlbGV0ZSBtLl9kcmFnZGF0YSwhMSE9PXQuZHJhZ21vZGUmJihlLnByZXZlbnREZWZhdWx0KCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix3KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHcpKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixUKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsVCksaT9vKGgpOmMmJihoLmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9YyxjPW51bGwpLG0uX2RyYWdnaW5nKXtpZihtLl9kcmFnZ2luZz0hMSwobmV3IERhdGUpLmdldFRpbWUoKS1tLl9tb3VzZURvd25UaW1lPnkmJih2PU1hdGgubWF4KHYtMSwxKSksbS5fZHJhZ2dlZCl0LmRvbmVGbiYmdC5kb25lRm4oKTtlbHNlIGlmKHQuY2xpY2tGbiYmdC5jbGlja0ZuKHYscCksIWcpe3ZhciByO3RyeXtyPW5ldyBNb3VzZUV2ZW50KCJjbGljayIsZSl9Y2F0Y2godCl7dmFyIG49ZihlKTsocj1kb2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKSkuaW5pdE1vdXNlRXZlbnQoImNsaWNrIixlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlLGUudmlldyxlLmRldGFpbCxlLnNjcmVlblgsZS5zY3JlZW5ZLG5bMF0sblsxXSxlLmN0cmxLZXksZS5hbHRLZXksZS5zaGlmdEtleSxlLm1ldGFLZXksZS5idXR0b24sZS5yZWxhdGVkVGFyZ2V0KX1kLmRpc3BhdGNoRXZlbnQocil9bS5fZHJhZ2dpbmc9ITEsbS5fZHJhZ2dlZD0hMX1lbHNlIG0uX2RyYWdnZWQ9ITF9fSxsLmNvdmVyU2xpcD11fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzQsIi4vYWxpZ24iOjY1OSwiLi9jdXJzb3IiOjY2MCwiLi91bmhvdmVyIjo2NjMsImhhcy1ob3ZlciI6NDQwLCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQ0MSwibW91c2UtZXZlbnQtb2Zmc2V0Ijo0ODR9XSw2NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V2ZW50cyIpLGk9dCgiLi4vLi4vbGliL3Rocm90dGxlIiksYT10KCIuLi8uLi9saWIvZG9tIikuZ2V0R3JhcGhEaXYsbz10KCIuLi9meC9jb25zdGFudHMiKSxzPWUuZXhwb3J0cz17fTtzLndyYXBwZWQ9ZnVuY3Rpb24odCxlLHIpeyh0PWEodCkpLl9mdWxsTGF5b3V0JiZpLmNsZWFyKHQuX2Z1bGxMYXlvdXQuX3VpZCtvLkhPVkVSSUQpLHMucmF3KHQsZSxyKX0scy5yYXc9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGk9dC5faG92ZXJkYXRhO2V8fChlPXt9KSxlLnRhcmdldCYmITE9PT1uLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVob3ZlciIsZSl8fChyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksci5faG92ZXJsYXllci5zZWxlY3RBbGwoImNpcmNsZSIpLnJlbW92ZSgpLHQuX2hvdmVyZGF0YT12b2lkIDAsZS50YXJnZXQmJmkmJnQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDplLHBvaW50czppfSkpfX0seyIuLi8uLi9saWIvZG9tIjo3NjYsIi4uLy4uL2xpYi9ldmVudHMiOjc2NywiLi4vLi4vbGliL3Rocm90dGxlIjo4MDQsIi4uL2Z4L2NvbnN0YW50cyI6Njc3fV0sNjY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZGFzaD17dmFsVHlwZToic3RyaW5nIix2YWx1ZXM6WyJzb2xpZCIsImRvdCIsImRhc2giLCJsb25nZGFzaCIsImRhc2hkb3QiLCJsb25nZGFzaGRvdCJdLGRmbHQ6InNvbGlkIixlZGl0VHlwZToic3R5bGUifX0se31dLDY2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoInRpbnljb2xvcjIiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi9jb2xvciIpLGw9dCgiLi4vY29sb3JzY2FsZSIpLGM9dCgiLi4vLi4vbGliIiksdT1jLnN0clRyYW5zbGF0ZSxmPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGg9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxwPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsZD10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0sZz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLG09dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIiksdj10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUseT1lLmV4cG9ydHM9e307eS5mb250PWZ1bmN0aW9uKHQsZSxyLG4pe2MuaXNQbGFpbk9iamVjdChlKSYmKG49ZS5jb2xvcixyPWUuc2l6ZSxlPWUuZmFtaWx5KSxlJiZ0LnN0eWxlKCJmb250LWZhbWlseSIsZSkscisxJiZ0LnN0eWxlKCJmb250LXNpemUiLHIrInB4IiksbiYmdC5jYWxsKHMuZmlsbCxuKX0seS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0LGUscil7dC5hdHRyKCJ4IixlKS5hdHRyKCJ5IixyKX0seS5zZXRTaXplPWZ1bmN0aW9uKHQsZSxyKXt0LmF0dHIoIndpZHRoIixlKS5hdHRyKCJoZWlnaHQiLHIpfSx5LnNldFJlY3Q9ZnVuY3Rpb24odCxlLHIsbixpKXt0LmNhbGwoeS5zZXRQb3NpdGlvbixlLHIpLmNhbGwoeS5zZXRTaXplLG4saSl9LHkudHJhbnNsYXRlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9ci5jMnAodC54KSxvPW4uYzJwKHQueSk7cmV0dXJuISEoaShhKSYmaShvKSYmZS5ub2RlKCkpJiYoInRleHQiPT09ZS5ub2RlKCkubm9kZU5hbWU/ZS5hdHRyKCJ4IixhKS5hdHRyKCJ5IixvKTplLmF0dHIoInRyYW5zZm9ybSIsdShhLG8pKSwhMCl9LHkudHJhbnNsYXRlUG9pbnRzPWZ1bmN0aW9uKHQsZSxyKXt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpO3kudHJhbnNsYXRlUG9pbnQodCxpLGUscil9KSl9LHkuaGlkZU91dHNpZGVSYW5nZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtlLmF0dHIoImRpc3BsYXkiLHIuaXNQdFdpdGhpblJhbmdlKHQsaSkmJm4uaXNQdFdpdGhpblJhbmdlKHQsYSk/bnVsbDoibm9uZSIpfSx5LmhpZGVPdXRzaWRlUmFuZ2VQb2ludHM9ZnVuY3Rpb24odCxlKXtpZihlLl9oYXNDbGlwT25BeGlzRmFsc2Upe3ZhciByPWUueGF4aXMsaT1lLnlheGlzO3QuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGE9ZVswXS50cmFjZSxzPWEueGNhbGVuZGFyLGw9YS55Y2FsZW5kYXIsYz1vLnRyYWNlSXMoYSwiYmFyLWxpa2UiKT8iLmJhcnRleHQiOiIucG9pbnQsLnRleHRwb2ludCI7dC5zZWxlY3RBbGwoYykuZWFjaCgoZnVuY3Rpb24odCl7eS5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodCxuLnNlbGVjdCh0aGlzKSxyLGkscyxsKX0pKX0pKX19LHkuY3Jpc3BSb3VuZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJmkoZSk/dC5fY29udGV4dC5zdGF0aWNQbG90P2U6ZTwxPzE6TWF0aC5yb3VuZChlKTpyfHwwfSx5LnNpbmdsZUxpbmVTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe2Uuc3R5bGUoImZpbGwiLCJub25lIik7dmFyIGE9KCgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxvPXJ8fGEud2lkdGh8fDAsbD1pfHxhLmRhc2h8fCIiO3Muc3Ryb2tlKGUsbnx8YS5jb2xvcikseS5kYXNoTGluZShlLGwsbyl9LHkubGluZUdyb3VwU3R5bGU9ZnVuY3Rpb24odCxlLHIsaSl7dC5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgYT0oKCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89ZXx8YS53aWR0aHx8MCxsPWl8fGEuZGFzaHx8IiI7bi5zZWxlY3QodGhpcykuY2FsbChzLnN0cm9rZSxyfHxhLmNvbG9yKS5jYWxsKHkuZGFzaExpbmUsbCxvKX0pKX0seS5kYXNoTGluZT1mdW5jdGlvbih0LGUscil7cj0rcnx8MCxlPXkuZGFzaFN0eWxlKGUsciksdC5zdHlsZSh7InN0cm9rZS1kYXNoYXJyYXkiOmUsInN0cm9rZS13aWR0aCI6cisicHgifSl9LHkuZGFzaFN0eWxlPWZ1bmN0aW9uKHQsZSl7ZT0rZXx8MTt2YXIgcj1NYXRoLm1heChlLDMpO3JldHVybiJzb2xpZCI9PT10P3Q9IiI6ImRvdCI9PT10P3Q9cisicHgsIityKyJweCI6ImRhc2giPT09dD90PTMqcisicHgsIiszKnIrInB4IjoibG9uZ2Rhc2giPT09dD90PTUqcisicHgsIis1KnIrInB4IjoiZGFzaGRvdCI9PT10P3Q9MypyKyJweCwiK3IrInB4LCIrcisicHgsIityKyJweCI6ImxvbmdkYXNoZG90Ij09PXQmJih0PTUqcisicHgsIisyKnIrInB4LCIrcisicHgsIisyKnIrInB4IiksdH0seS5zaW5nbGVGaWxsU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9KCgobi5zZWxlY3QodC5ub2RlKCkpLmRhdGEoKVswXXx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5maWxsY29sb3I7ZSYmdC5jYWxsKHMuZmlsbCxlKX0seS5maWxsR3JvdXBTdHlsZT1mdW5jdGlvbih0KXt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLDApLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO3RbMF0udHJhY2UmJmUuY2FsbChzLmZpbGwsdFswXS50cmFjZS5maWxsY29sb3IpfSkpfTt2YXIgeD10KCIuL3N5bWJvbF9kZWZzIik7eS5zeW1ib2xOYW1lcz1bXSx5LnN5bWJvbEZ1bmNzPVtdLHkuc3ltYm9sTmVlZExpbmVzPXt9LHkuc3ltYm9sTm9Eb3Q9e30seS5zeW1ib2xOb0ZpbGw9e30seS5zeW1ib2xMaXN0PVtdLE9iamVjdC5rZXlzKHgpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXhbdF0scj1lLm47eS5zeW1ib2xMaXN0LnB1c2gocixTdHJpbmcociksdCxyKzEwMCxTdHJpbmcocisxMDApLHQrIi1vcGVuIikseS5zeW1ib2xOYW1lc1tyXT10LHkuc3ltYm9sRnVuY3Nbcl09ZS5mLGUubmVlZExpbmUmJih5LnN5bWJvbE5lZWRMaW5lc1tyXT0hMCksZS5ub0RvdD95LnN5bWJvbE5vRG90W3JdPSEwOnkuc3ltYm9sTGlzdC5wdXNoKHIrMjAwLFN0cmluZyhyKzIwMCksdCsiLWRvdCIsciszMDAsU3RyaW5nKHIrMzAwKSx0KyItb3Blbi1kb3QiKSxlLm5vRmlsbCYmKHkuc3ltYm9sTm9GaWxsW3JdPSEwKX0pKTt2YXIgYj15LnN5bWJvbE5hbWVzLmxlbmd0aDtmdW5jdGlvbiBfKHQsZSl7dmFyIHI9dCUxMDA7cmV0dXJuIHkuc3ltYm9sRnVuY3Nbcl0oZSkrKHQ+PTIwMD8iTTAsMC41TDAuNSwwTDAsLTAuNUwtMC41LDBaIjoiIil9eS5zeW1ib2xOdW1iZXI9ZnVuY3Rpb24odCl7aWYoaSh0KSl0PSt0O2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT0wO3QuaW5kZXhPZigiLW9wZW4iKT4wJiYoZT0xMDAsdD10LnJlcGxhY2UoIi1vcGVuIiwiIikpLHQuaW5kZXhPZigiLWRvdCIpPjAmJihlKz0yMDAsdD10LnJlcGxhY2UoIi1kb3QiLCIiKSksKHQ9eS5zeW1ib2xOYW1lcy5pbmRleE9mKHQpKT49MCYmKHQrPWUpfXJldHVybiB0JTEwMD49Ynx8dD49NDAwPzA6TWF0aC5mbG9vcihNYXRoLm1heCh0LDApKX07dmFyIHc9e3gxOjEseDI6MCx5MTowLHkyOjB9LFQ9e3gxOjAseDI6MCx5MToxLHkyOjB9LGs9bi5mb3JtYXQoIn4uMWYiKSxNPXtyYWRpYWw6e25vZGU6InJhZGlhbEdyYWRpZW50In0scmFkaWFscmV2ZXJzZWQ6e25vZGU6InJhZGlhbEdyYWRpZW50IixyZXZlcnNlZDohMH0saG9yaXpvbnRhbDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOnd9LGhvcml6b250YWxyZXZlcnNlZDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOncscmV2ZXJzZWQ6ITB9LHZlcnRpY2FsOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6VH0sdmVydGljYWxyZXZlcnNlZDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOlQscmV2ZXJzZWQ6ITB9fTt5LmdyYWRpZW50PWZ1bmN0aW9uKHQsZSxyLGksbyxsKXtmb3IodmFyIHU9by5sZW5ndGgsZj1NW2ldLGg9bmV3IEFycmF5KHUpLHA9MDtwPHU7cCsrKWYucmV2ZXJzZWQ/aFt1LTEtcF09W2soMTAwKigxLW9bcF1bMF0pKSxvW3BdWzFdXTpoW3BdPVtrKDEwMCpvW3BdWzBdKSxvW3BdWzFdXTt2YXIgZD1lLl9mdWxsTGF5b3V0LGc9ImciK2QuX3VpZCsiLSIrcixtPWQuX2RlZnMuc2VsZWN0KCIuZ3JhZGllbnRzIikuc2VsZWN0QWxsKCIjIitnKS5kYXRhKFtpK2guam9pbigiOyIpXSxjLmlkZW50aXR5KTttLmV4aXQoKS5yZW1vdmUoKSxtLmVudGVyKCkuYXBwZW5kKGYubm9kZSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtmLmF0dHJzJiZ0LmF0dHIoZi5hdHRycyksdC5hdHRyKCJpZCIsZyk7dmFyIGU9dC5zZWxlY3RBbGwoInN0b3AiKS5kYXRhKGgpO2UuZXhpdCgpLnJlbW92ZSgpLGUuZW50ZXIoKS5hcHBlbmQoInN0b3AiKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWEodFsxXSk7bi5zZWxlY3QodGhpcykuYXR0cih7b2Zmc2V0OnRbMF0rIiUiLCJzdG9wLWNvbG9yIjpzLnRpbnlSR0IoZSksInN0b3Atb3BhY2l0eSI6ZS5nZXRBbHBoYSgpfSl9KSl9KSksdC5zdHlsZShsLE8oZyxlKSkuc3R5bGUobCsiLW9wYWNpdHkiLG51bGwpO3ZhciB2PWZ1bmN0aW9uKHQpe3JldHVybiIuIit0LmF0dHIoImNsYXNzIikucmVwbGFjZSgvXHMvZywiLiIpfSx5PXYobi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkpKyI+Iit2KHQpO2QuX2dyYWRpZW50VXJsUXVlcnlQYXJ0c1t5XT0xfSx5LmluaXRHcmFkaWVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtjLmVuc3VyZVNpbmdsZShlLl9kZWZzLCJnIiwiZ3JhZGllbnRzIikuc2VsZWN0QWxsKCJsaW5lYXJHcmFkaWVudCxyYWRpYWxHcmFkaWVudCIpLnJlbW92ZSgpLGUuX2dyYWRpZW50VXJsUXVlcnlQYXJ0cz17fX0seS5wb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGk9eS5tYWtlUG9pbnRTdHlsZUZucyhlKTt0LmVhY2goKGZ1bmN0aW9uKHQpe3kuc2luZ2xlUG9pbnRTdHlsZSh0LG4uc2VsZWN0KHRoaXMpLGUsaSxyKX0pKX19LHkuc2luZ2xlUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXIubWFya2VyLG89YS5saW5lO2lmKGUuc3R5bGUoIm9wYWNpdHkiLG4uc2VsZWN0ZWRPcGFjaXR5Rm4/bi5zZWxlY3RlZE9wYWNpdHlGbih0KTp2b2lkIDA9PT10Lm1vP2Eub3BhY2l0eTp0Lm1vKSxuLm1zMm1yYyl7dmFyIGw7bD0idmFyaW91cyI9PT10Lm1zfHwidmFyaW91cyI9PT1hLnNpemU/MzpuLm1zMm1yYyh0Lm1zKSx0Lm1yYz1sLG4uc2VsZWN0ZWRTaXplRm4mJihsPXQubXJjPW4uc2VsZWN0ZWRTaXplRm4odCkpO3ZhciB1PXkuc3ltYm9sTnVtYmVyKHQubXh8fGEuc3ltYm9sKXx8MDt0Lm9tPXUlMjAwPj0xMDAsZS5hdHRyKCJkIixfKHUsbCkpfXZhciBmLGgscCxkPSExO2lmKHQuc28pcD1vLm91dGxpZXJ3aWR0aCxoPW8ub3V0bGllcmNvbG9yLGY9YS5vdXRsaWVyY29sb3I7ZWxzZXt2YXIgZz0ob3x8e30pLndpZHRoO3A9KHQubWx3KzF8fGcrMXx8KHQudHJhY2U/KHQudHJhY2UubWFya2VyLmxpbmV8fHt9KS53aWR0aDowKSsxKS0xfHwwLGg9Im1sYyJpbiB0P3QubWxjYz1uLmxpbmVTY2FsZSh0Lm1sYyk6Yy5pc0FycmF5T3JUeXBlZEFycmF5KG8uY29sb3IpP3MuZGVmYXVsdExpbmU6by5jb2xvcixjLmlzQXJyYXlPclR5cGVkQXJyYXkoYS5jb2xvcikmJihmPXMuZGVmYXVsdExpbmUsZD0hMCksZj0ibWMiaW4gdD90Lm1jYz1uLm1hcmtlclNjYWxlKHQubWMpOmEuY29sb3J8fCJyZ2JhKDAsMCwwLDApIixuLnNlbGVjdGVkQ29sb3JGbiYmKGY9bi5zZWxlY3RlZENvbG9yRm4odCkpfWlmKHQub20pZS5jYWxsKHMuc3Ryb2tlLGYpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjoocHx8MSkrInB4IixmaWxsOiJub25lIn0pO2Vsc2V7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwodC5pc0JsYW5rPzA6cCkrInB4Iik7dmFyIG09YS5ncmFkaWVudCx2PXQubWd0O2lmKHY/ZD0hMDp2PW0mJm0udHlwZSxBcnJheS5pc0FycmF5KHYpJiYodj12WzBdLE1bdl18fCh2PTApKSx2JiYibm9uZSIhPT12KXt2YXIgeD10Lm1nYzt4P2Q9ITA6eD1tLmNvbG9yO3ZhciBiPXIudWlkO2QmJihiKz0iLSIrdC5pKSx5LmdyYWRpZW50KGUsaSxiLHYsW1swLHhdLFsxLGZdXSwiZmlsbCIpfWVsc2Ugcy5maWxsKGUsZik7cCYmcy5zdHJva2UoZSxoKX19LHkubWFrZVBvaW50U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10Lm1hcmtlcjtyZXR1cm4gZS5tYXJrZXJTY2FsZT15LnRyeUNvbG9yc2NhbGUociwiIiksZS5saW5lU2NhbGU9eS50cnlDb2xvcnNjYWxlKHIsImxpbmUiKSxvLnRyYWNlSXModCwic3ltYm9scyIpJiYoZS5tczJtcmM9Zy5pc0J1YmJsZSh0KT9tKHQpOmZ1bmN0aW9uKCl7cmV0dXJuKHIuc2l6ZXx8NikvMn0pLHQuc2VsZWN0ZWRwb2ludHMmJmMuZXh0ZW5kRmxhdChlLHkubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyh0KSksZX0seS5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5zZWxlY3RlZHx8e30sbj10LnVuc2VsZWN0ZWR8fHt9LGk9dC5tYXJrZXJ8fHt9LGE9ci5tYXJrZXJ8fHt9LHM9bi5tYXJrZXJ8fHt9LGw9aS5vcGFjaXR5LHU9YS5vcGFjaXR5LGY9cy5vcGFjaXR5LGg9dm9pZCAwIT09dSxwPXZvaWQgMCE9PWY7KGMuaXNBcnJheU9yVHlwZWRBcnJheShsKXx8aHx8cCkmJihlLnNlbGVjdGVkT3BhY2l0eUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMD09PXQubW8/aS5vcGFjaXR5OnQubW87cmV0dXJuIHQuc2VsZWN0ZWQ/aD91OmU6cD9mOmQqZX0pO3ZhciBnPWkuY29sb3IsbT1hLmNvbG9yLHY9cy5jb2xvcjsobXx8dikmJihlLnNlbGVjdGVkQ29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10Lm1jY3x8ZztyZXR1cm4gdC5zZWxlY3RlZD9tfHxlOnZ8fGV9KTt2YXIgeT1pLnNpemUseD1hLnNpemUsYj1zLnNpemUsXz12b2lkIDAhPT14LHc9dm9pZCAwIT09YjtyZXR1cm4gby50cmFjZUlzKHQsInN5bWJvbHMiKSYmKF98fHcpJiYoZS5zZWxlY3RlZFNpemVGbj1mdW5jdGlvbih0KXt2YXIgZT10Lm1yY3x8eS8yO3JldHVybiB0LnNlbGVjdGVkP18/eC8yOmU6dz9iLzI6ZX0pLGV9LHkubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5zZWxlY3RlZHx8e30sbj10LnVuc2VsZWN0ZWR8fHt9LGk9dC50ZXh0Zm9udHx8e30sYT1yLnRleHRmb250fHx7fSxvPW4udGV4dGZvbnR8fHt9LGw9aS5jb2xvcixjPWEuY29sb3IsdT1vLmNvbG9yO3JldHVybiBlLnNlbGVjdGVkVGV4dENvbG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9dC50Y3x8bDtyZXR1cm4gdC5zZWxlY3RlZD9jfHxlOnV8fChjP2U6cy5hZGRPcGFjaXR5KGUsZCkpfSxlfSx5LnNlbGVjdGVkUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUpe2lmKHQuc2l6ZSgpJiZlLnNlbGVjdGVkcG9pbnRzKXt2YXIgcj15Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnMoZSksaT1lLm1hcmtlcnx8e30sYT1bXTtyLnNlbGVjdGVkT3BhY2l0eUZuJiZhLnB1c2goKGZ1bmN0aW9uKHQsZSl7dC5zdHlsZSgib3BhY2l0eSIsci5zZWxlY3RlZE9wYWNpdHlGbihlKSl9KSksci5zZWxlY3RlZENvbG9yRm4mJmEucHVzaCgoZnVuY3Rpb24odCxlKXtzLmZpbGwodCxyLnNlbGVjdGVkQ29sb3JGbihlKSl9KSksci5zZWxlY3RlZFNpemVGbiYmYS5wdXNoKChmdW5jdGlvbih0LGUpe3ZhciBuPWUubXh8fGkuc3ltYm9sfHwwLGE9ci5zZWxlY3RlZFNpemVGbihlKTt0LmF0dHIoImQiLF8oeS5zeW1ib2xOdW1iZXIobiksYSkpLGUubXJjMj1hfSkpLGEubGVuZ3RoJiZ0LmVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPTA7cjxhLmxlbmd0aDtyKyspYVtyXShlLHQpfSkpfX0seS50cnlDb2xvcnNjYWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9jLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk6dDtpZihyKXt2YXIgbj1yLmNvbG9yO2lmKChyLmNvbG9yc2NhbGV8fHIuX2NvbG9yQXgpJiZjLmlzQXJyYXlPclR5cGVkQXJyYXkobikpcmV0dXJuIGwubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHIpfXJldHVybiBjLmlkZW50aXR5fTt2YXIgQT17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjAsYm90dG9tOjEsdG9wOi0xfTtmdW5jdGlvbiBTKHQsZSxyLGkpe3ZhciBhPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLG89LTEhPT1lLmluZGV4T2YoInRvcCIpPyJ0b3AiOi0xIT09ZS5pbmRleE9mKCJib3R0b20iKT8iYm90dG9tIjoibWlkZGxlIixzPS0xIT09ZS5pbmRleE9mKCJsZWZ0Iik/ImVuZCI6LTEhPT1lLmluZGV4T2YoInJpZ2h0Iik/InN0YXJ0IjoibWlkZGxlIixsPWk/aS8uOCsxOjAsYz0oZi5saW5lQ291bnQodCktMSkqcCsxLGg9QVtzXSpsLGQ9Ljc1KnIrQVtvXSpsKyhBW29dLTEpKmMqci8yO3QuYXR0cigidGV4dC1hbmNob3IiLHMpLGEuYXR0cigidHJhbnNmb3JtIix1KGgsZCkpfWZ1bmN0aW9uIEUodCxlKXt2YXIgcj10LnRzfHxlLnRleHRmb250LnNpemU7cmV0dXJuIGkocikmJnI+MD9yOjB9eS50ZXh0UG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7aWYodC5zaXplKCkpe3ZhciBpO2lmKGUuc2VsZWN0ZWRwb2ludHMpe3ZhciBhPXkubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zKGUpO2k9YS5zZWxlY3RlZFRleHRDb2xvckZufXZhciBvPWUudGV4dHRlbXBsYXRlLHM9ci5fZnVsbExheW91dDt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLGw9bz9jLmV4dHJhY3RPcHRpb24odCxlLCJ0eHQiLCJ0ZXh0dGVtcGxhdGUiKTpjLmV4dHJhY3RPcHRpb24odCxlLCJ0eCIsInRleHQiKTtpZihsfHwwPT09bCl7aWYobyl7dmFyIHU9ZS5fbW9kdWxlLmZvcm1hdExhYmVscz9lLl9tb2R1bGUuZm9ybWF0TGFiZWxzKHQsZSxzKTp7fSxoPXt9O3YoaCxlLHQuaSk7dmFyIHA9ZS5fbWV0YXx8e307bD1jLnRleHR0ZW1wbGF0ZVN0cmluZyhsLHUscy5fZDNsb2NhbGUsaCx0LHApfXZhciBkPXQudHB8fGUudGV4dHBvc2l0aW9uLGc9RSh0LGUpLG09aT9pKHQpOnQudGN8fGUudGV4dGZvbnQuY29sb3I7YS5jYWxsKHkuZm9udCx0LnRmfHxlLnRleHRmb250LmZhbWlseSxnLG0pLnRleHQobCkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyxyKS5jYWxsKFMsZCxnLHQubXJjKX1lbHNlIGEucmVtb3ZlKCl9KSl9fSx5LnNlbGVjdGVkVGV4dFN0eWxlPWZ1bmN0aW9uKHQsZSl7aWYodC5zaXplKCkmJmUuc2VsZWN0ZWRwb2ludHMpe3ZhciByPXkubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zKGUpO3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1yLnNlbGVjdGVkVGV4dENvbG9yRm4odCksbz10LnRwfHxlLnRleHRwb3NpdGlvbixsPUUodCxlKTtzLmZpbGwoaSxhKSxTKGksbyxsLHQubXJjMnx8dC5tcmMpfSkpfX07ZnVuY3Rpb24gQyh0LGUscixpKXt2YXIgYT10WzBdLWVbMF0sbz10WzFdLWVbMV0scz1yWzBdLWVbMF0sbD1yWzFdLWVbMV0sYz1NYXRoLnBvdyhhKmErbypvLC4yNSksdT1NYXRoLnBvdyhzKnMrbCpsLC4yNSksZj0odSp1KmEtYypjKnMpKmksaD0odSp1Km8tYypjKmwpKmkscD0zKnUqKGMrdSksZD0zKmMqKGMrdSk7cmV0dXJuW1tuLnJvdW5kKGVbMF0rKHAmJmYvcCksMiksbi5yb3VuZChlWzFdKyhwJiZoL3ApLDIpXSxbbi5yb3VuZChlWzBdLShkJiZmL2QpLDIpLG4ucm91bmQoZVsxXS0oZCYmaC9kKSwyKV1dfXkuc21vb3Rob3Blbj1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIk0iK3Quam9pbigiTCIpO3ZhciByLG49Ik0iK3RbMF0saT1bXTtmb3Iocj0xO3I8dC5sZW5ndGgtMTtyKyspaS5wdXNoKEModFtyLTFdLHRbcl0sdFtyKzFdLGUpKTtmb3Iobis9IlEiK2lbMF1bMF0rIiAiK3RbMV0scj0yO3I8dC5sZW5ndGgtMTtyKyspbis9IkMiK2lbci0yXVsxXSsiICIraVtyLTFdWzBdKyIgIit0W3JdO3JldHVybiBuKz0iUSIraVt0Lmxlbmd0aC0zXVsxXSsiICIrdFt0Lmxlbmd0aC0xXX0seS5zbW9vdGhjbG9zZWQ9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVybiJNIit0LmpvaW4oIkwiKSsiWiI7dmFyIHIsbj0iTSIrdFswXSxpPXQubGVuZ3RoLTEsYT1bQyh0W2ldLHRbMF0sdFsxXSxlKV07Zm9yKHI9MTtyPGk7cisrKWEucHVzaChDKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKGEucHVzaChDKHRbaS0xXSx0W2ldLHRbMF0sZSkpLHI9MTtyPD1pO3IrKyluKz0iQyIrYVtyLTFdWzFdKyIgIithW3JdWzBdKyIgIit0W3JdO3JldHVybiBuKz0iQyIrYVtpXVsxXSsiICIrYVswXVswXSsiICIrdFswXSsiWiJ9O3ZhciBMPXtodjpmdW5jdGlvbih0LGUpe3JldHVybiJIIituLnJvdW5kKGVbMF0sMikrIlYiK24ucm91bmQoZVsxXSwyKX0sdmg6ZnVuY3Rpb24odCxlKXtyZXR1cm4iViIrbi5yb3VuZChlWzFdLDIpKyJIIituLnJvdW5kKGVbMF0sMil9LGh2aDpmdW5jdGlvbih0LGUpe3JldHVybiJIIituLnJvdW5kKCh0WzBdK2VbMF0pLzIsMikrIlYiK24ucm91bmQoZVsxXSwyKSsiSCIrbi5yb3VuZChlWzBdLDIpfSx2aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm4iViIrbi5yb3VuZCgodFsxXStlWzFdKS8yLDIpKyJIIituLnJvdW5kKGVbMF0sMikrIlYiK24ucm91bmQoZVsxXSwyKX19LEk9ZnVuY3Rpb24odCxlKXtyZXR1cm4iTCIrbi5yb3VuZChlWzBdLDIpKyIsIituLnJvdW5kKGVbMV0sMil9O3kuc3RlcHM9ZnVuY3Rpb24odCl7dmFyIGU9TFt0XXx8STtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciByPSJNIituLnJvdW5kKHRbMF1bMF0sMikrIiwiK24ucm91bmQodFswXVsxXSwyKSxpPTE7aTx0Lmxlbmd0aDtpKyspcis9ZSh0W2ktMV0sdFtpXSk7cmV0dXJuIHJ9fSx5Lm1ha2VUZXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1jLmVuc3VyZVNpbmdsZUJ5SWQobi5zZWxlY3QoImJvZHkiKSwic3ZnIiwianMtcGxvdGx5LXRlc3RlciIsKGZ1bmN0aW9uKHQpe3QuYXR0cihoLnN2Z0F0dHJzKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiItMTAwMDBweCIsdG9wOiItMTAwMDBweCIsd2lkdGg6IjkwMDBweCIsaGVpZ2h0OiI5MDAwcHgiLCJ6LWluZGV4IjoiMSJ9KX0pKSxlPWMuZW5zdXJlU2luZ2xlKHQsInBhdGgiLCJqcy1yZWZlcmVuY2UtcG9pbnQiLChmdW5jdGlvbih0KXt0LmF0dHIoImQiLCJNMCwwSDFWMUgwWiIpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjowLGZpbGw6ImJsYWNrIn0pfSkpO3kudGVzdGVyPXQseS50ZXN0cmVmPWV9LHkuc2F2ZWRCQm94ZXM9e307dmFyIFA9MDtmdW5jdGlvbiB6KHQpe3ZhciBlPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXVuZm9ybWF0dGVkIik7aWYobnVsbCE9PWUpcmV0dXJuIGUrdC5nZXRBdHRyaWJ1dGUoImRhdGEtbWF0aCIpK3QuZ2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIpK3QuZ2V0QXR0cmlidXRlKCJzdHlsZSIpfWZ1bmN0aW9uIE8odCxlKXtpZighdClyZXR1cm4gbnVsbDt2YXIgcj1lLl9jb250ZXh0O3JldHVybiJ1cmwoJyIrKHIuX2V4cG9ydGVkUGxvdD8iIjpyLl9iYXNlVXJsfHwiIikrIiMiK3QrIicpIn15LmJCb3g9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbztpZihyfHwocj16KHQpKSxyKXtpZihpPXkuc2F2ZWRCQm94ZXNbcl0pcmV0dXJuIGMuZXh0ZW5kRmxhdCh7fSxpKX1lbHNlIGlmKDE9PT10LmNoaWxkTm9kZXMubGVuZ3RoKXt2YXIgcz10LmNoaWxkTm9kZXNbMF07aWYocj16KHMpKXt2YXIgbD0rcy5nZXRBdHRyaWJ1dGUoIngiKXx8MCx1PStzLmdldEF0dHJpYnV0ZSgieSIpfHwwLGg9cy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpO2lmKCFoKXt2YXIgcD15LmJCb3gocywhMSxyKTtyZXR1cm4gbCYmKHAubGVmdCs9bCxwLnJpZ2h0Kz1sKSx1JiYocC50b3ArPXUscC5ib3R0b20rPXUpLHB9aWYocis9In4iK2wrIn4iK3UrIn4iK2gsaT15LnNhdmVkQkJveGVzW3JdKXJldHVybiBjLmV4dGVuZEZsYXQoe30saSl9fWU/YT10OihvPXkudGVzdGVyLm5vZGUoKSxhPXQuY2xvbmVOb2RlKCEwKSxvLmFwcGVuZENoaWxkKGEpKSxuLnNlbGVjdChhKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLmNhbGwoZi5wb3NpdGlvblRleHQsMCwwKTt2YXIgZD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9eS50ZXN0cmVmLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlfHxvLnJlbW92ZUNoaWxkKGEpO3ZhciBtPXtoZWlnaHQ6ZC5oZWlnaHQsd2lkdGg6ZC53aWR0aCxsZWZ0OmQubGVmdC1nLmxlZnQsdG9wOmQudG9wLWcudG9wLHJpZ2h0OmQucmlnaHQtZy5sZWZ0LGJvdHRvbTpkLmJvdHRvbS1nLnRvcH07cmV0dXJuIFA+PTFlNCYmKHkuc2F2ZWRCQm94ZXM9e30sUD0wKSxyJiYoeS5zYXZlZEJCb3hlc1tyXT1tKSxQKyssYy5leHRlbmRGbGF0KHt9LG0pfSx5LnNldENsaXBVcmw9ZnVuY3Rpb24odCxlLHIpe3QuYXR0cigiY2xpcC1wYXRoIixPKGUscikpfSx5LmdldFRyYW5zbGF0ZT1mdW5jdGlvbih0KXt2YXIgZT0odFt0LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiXSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKC8uKlxidHJhbnNsYXRlXCgoLT9cZCpcLj9cZCopW14tXGRdKigtP1xkKlwuP1xkKilbXlxkXS4qLywoZnVuY3Rpb24odCxlLHIpe3JldHVybltlLHJdLmpvaW4oIiAiKX0pKS5zcGxpdCgiICIpO3JldHVybnt4OitlWzBdfHwwLHk6K2VbMV18fDB9fSx5LnNldFRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIixpPXQuYXR0cj8iYXR0ciI6InNldEF0dHJpYnV0ZSIsYT10W25dKCJ0cmFuc2Zvcm0iKXx8IiI7cmV0dXJuIGU9ZXx8MCxyPXJ8fDAsYT1hLnJlcGxhY2UoLyhcYnRyYW5zbGF0ZVwoLio/XCk7PykvLCIiKS50cmltKCksYT0oYSs9dShlLHIpKS50cmltKCksdFtpXSgidHJhbnNmb3JtIixhKSxhfSx5LmdldFNjYWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSJdKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoLy4qXGJzY2FsZVwoKFxkKlwuP1xkKilbXlxkXSooXGQqXC4/XGQqKVteXGRdLiovLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbigiICIpfSkpLnNwbGl0KCIgIik7cmV0dXJue3g6K2VbMF18fDEseTorZVsxXXx8MX19LHkuc2V0U2NhbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSIsaT10LmF0dHI/ImF0dHIiOiJzZXRBdHRyaWJ1dGUiLGE9dFtuXSgidHJhbnNmb3JtIil8fCIiO3JldHVybiBlPWV8fDEscj1yfHwxLGE9YS5yZXBsYWNlKC8oXGJzY2FsZVwoLio/XCk7PykvLCIiKS50cmltKCksYT0oYSs9InNjYWxlKCIrZSsiLCIrcisiKSIpLnRyaW0oKSx0W2ldKCJ0cmFuc2Zvcm0iLGEpLGF9O3ZhciBEPS9ccypzYy4qLzt5LnNldFBvaW50R3JvdXBTY2FsZT1mdW5jdGlvbih0LGUscil7aWYoZT1lfHwxLHI9cnx8MSx0KXt2YXIgbj0xPT09ZSYmMT09PXI/IiI6InNjYWxlKCIrZSsiLCIrcisiKSI7dC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKEQsIiIpO3Q9KHQrPW4pLnRyaW0oKSx0aGlzLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KX0pKX19O3ZhciBSPS90cmFuc2xhdGVcKFteKV0qXClccyokLzt5LnNldFRleHRQb2ludHNTY2FsZT1mdW5jdGlvbih0LGUscil7dCYmdC5lYWNoKChmdW5jdGlvbigpe3ZhciB0LGk9bi5zZWxlY3QodGhpcyksYT1pLnNlbGVjdCgidGV4dCIpO2lmKGEubm9kZSgpKXt2YXIgbz1wYXJzZUZsb2F0KGEuYXR0cigieCIpfHwwKSxzPXBhcnNlRmxvYXQoYS5hdHRyKCJ5Iil8fDApLGw9KGkuYXR0cigidHJhbnNmb3JtIil8fCIiKS5tYXRjaChSKTt0PTE9PT1lJiYxPT09cj9bXTpbdShvLHMpLCJzY2FsZSgiK2UrIiwiK3IrIikiLHUoLW8sLXMpXSxsJiZ0LnB1c2gobCksaS5hdHRyKCJ0cmFuc2Zvcm0iLHQuam9pbigiIikpfX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2NzksIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NSwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzUyLCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzU0LCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTIwNCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTIsIi4uL2NvbG9yIjo2NDMsIi4uL2NvbG9yc2NhbGUiOjY1NSwiLi9zeW1ib2xfZGVmcyI6NjY2LGQzOjE2OSwiZmFzdC1pc251bWVyaWMiOjI0MSx0aW55Y29sb3IyOjU3Nn1dLDY2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpO2UuZXhwb3J0cz17Y2lyY2xlOntuOjAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn19LHNxdWFyZTp7bjoxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifX0sZGlhbW9uZDp7bjoyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIloifX0sY3Jvc3M6e246MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjQqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK3IrIiwiK2UrIkgiK2UrIlYiK3IrIkgtIitlKyJWIitlKyJILSIrcisiVi0iK2UrIkgtIitlKyJWLSIrcisiSCIrZSsiVi0iK2UrIkgiK3IrIloifX0seDp7bjo0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOCp0L01hdGguc3FydCgyKSwyKSxyPSJsIitlKyIsIitlLGk9ImwiK2UrIiwtIitlLGE9ImwtIitlKyIsLSIrZSxvPSJsLSIrZSsiLCIrZTtyZXR1cm4iTTAsIitlK3IraSthK2krYStvK2ErbytyK28rcisiWiJ9fSwidHJpYW5nbGUtdXAiOntuOjUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIitlKyIsIituLnJvdW5kKHQvMiwyKSsiSCIrZSsiTDAsLSIrbi5yb3VuZCh0LDIpKyJaIn19LCJ0cmlhbmdsZS1kb3duIjp7bjo2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrZSsiLC0iK24ucm91bmQodC8yLDIpKyJIIitlKyJMMCwiK24ucm91bmQodCwyKSsiWiJ9fSwidHJpYW5nbGUtbGVmdCI6e246NyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTSIrbi5yb3VuZCh0LzIsMikrIiwtIitlKyJWIitlKyJMLSIrbi5yb3VuZCh0LDIpKyIsMFoifX0sInRyaWFuZ2xlLXJpZ2h0Ijp7bjo4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrbi5yb3VuZCh0LzIsMikrIiwtIitlKyJWIitlKyJMIituLnJvdW5kKHQsMikrIiwwWiJ9fSwidHJpYW5nbGUtbmUiOntuOjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNLSIrcisiLC0iK2UrIkgiK2UrIlYiK3IrIloifX0sInRyaWFuZ2xlLXNlIjp7bjoxMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK2UrIiwtIityKyJWIitlKyJILSIrcisiWiJ9fSwidHJpYW5nbGUtc3ciOntuOjExLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrcisiLCIrZSsiSC0iK2UrIlYtIityKyJaIn19LCJ0cmlhbmdsZS1udyI6e246MTIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNLSIrZSsiLCIrcisiVi0iK2UrIkgiK3IrIloifX0scGVudGFnb246e246MTMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC45NTEqdCwyKSxyPW4ucm91bmQoLjU4OCp0LDIpLGk9bi5yb3VuZCgtdCwyKSxhPW4ucm91bmQoLS4zMDkqdCwyKTtyZXR1cm4iTSIrZSsiLCIrYSsiTCIrcisiLCIrbi5yb3VuZCguODA5KnQsMikrIkgtIityKyJMLSIrZSsiLCIrYSsiTDAsIitpKyJaIn19LGhleGFnb246e246MTQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvMiwyKSxpPW4ucm91bmQodCpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm4iTSIraSsiLC0iK3IrIlYiK3IrIkwwLCIrZSsiTC0iK2krIiwiK3IrIlYtIityKyJMMCwtIitlKyJaIn19LGhleGFnb24yOntuOjE1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksaT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuIk0tIityKyIsIitpKyJIIityKyJMIitlKyIsMEwiK3IrIiwtIitpKyJILSIrcisiTC0iK2UrIiwwWiJ9fSxvY3RhZ29uOntuOjE2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTI0KnQsMikscj1uLnJvdW5kKC4zODMqdCwyKTtyZXR1cm4iTS0iK3IrIiwtIitlKyJIIityKyJMIitlKyIsLSIrcisiViIrcisiTCIrcisiLCIrZSsiSC0iK3IrIkwtIitlKyIsIityKyJWLSIrcisiWiJ9fSxzdGFyOntuOjE3LGY6ZnVuY3Rpb24odCl7dmFyIGU9MS40KnQscj1uLnJvdW5kKC4yMjUqZSwyKSxpPW4ucm91bmQoLjk1MSplLDIpLGE9bi5yb3VuZCguMzYzKmUsMiksbz1uLnJvdW5kKC41ODgqZSwyKSxzPW4ucm91bmQoLWUsMiksbD1uLnJvdW5kKC0uMzA5KmUsMiksYz1uLnJvdW5kKC4xMTgqZSwyKSx1PW4ucm91bmQoLjgwOSplLDIpO3JldHVybiJNIityKyIsIitsKyJIIitpKyJMIithKyIsIitjKyJMIitvKyIsIit1KyJMMCwiK24ucm91bmQoLjM4MiplLDIpKyJMLSIrbysiLCIrdSsiTC0iK2ErIiwiK2MrIkwtIitpKyIsIitsKyJILSIrcisiTDAsIitzKyJaIn19LGhleGFncmFtOntuOjE4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNjYqdCwyKSxyPW4ucm91bmQoLjM4KnQsMiksaT1uLnJvdW5kKC43Nip0LDIpO3JldHVybiJNLSIraSsiLDBsLSIrcisiLC0iK2UrImgiK2krImwiK3IrIiwtIitlKyJsIityKyIsIitlKyJoIitpKyJsLSIrcisiLCIrZSsibCIrcisiLCIrZSsiaC0iK2krImwtIityKyIsIitlKyJsLSIrcisiLC0iK2UrImgtIitpKyJaIn19LCJzdGFyLXRyaWFuZ2xlLXVwIjp7bjoxOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz0iQSAiK2ErIiwiK2ErIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLCIrcitvK2UrIiwiK3IrbysiMCwtIitpK28rIi0iK2UrIiwiK3IrIloifX0sInN0YXItdHJpYW5nbGUtZG93biI6e246MjAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCp0LDIpLGk9bi5yb3VuZCgxLjYqdCwyKSxhPW4ucm91bmQoNCp0LDIpLG89IkEgIithKyIsIithKyIgMCAwIDEgIjtyZXR1cm4iTSIrZSsiLC0iK3IrbysiLSIrZSsiLC0iK3IrbysiMCwiK2krbytlKyIsLSIrcisiWiJ9fSwic3Rhci1zcXVhcmUiOntuOjIxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjEqdCwyKSxyPW4ucm91bmQoMip0LDIpLGk9IkEgIityKyIsIityKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwtIitlK2krIi0iK2UrIiwiK2UraStlKyIsIitlK2krZSsiLC0iK2UraSsiLSIrZSsiLC0iK2UrIloifX0sInN0YXItZGlhbW9uZCI6e246MjIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpLHI9bi5yb3VuZCgxLjkqdCwyKSxpPSJBICIrcisiLCIrcisiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsMCIraSsiMCwiK2UraStlKyIsMCIraSsiMCwtIitlK2krIi0iK2UrIiwwWiJ9fSwiZGlhbW9uZC10YWxsIjp7bjoyMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjcqdCwyKSxyPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrcisiTCIrZSsiLDBMMCwtIityKyJMLSIrZSsiLDBaIn19LCJkaWFtb25kLXdpZGUiOntuOjI0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoLjcqdCwyKTtyZXR1cm4iTTAsIityKyJMIitlKyIsMEwwLC0iK3IrIkwtIitlKyIsMFoifX0saG91cmdsYXNzOntuOjI1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJILSIrZSsiTCIrZSsiLC0iK2UrIkgtIitlKyJaIn0sbm9Eb3Q6ITB9LGJvd3RpZTp7bjoyNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiVi0iK2UrIkwtIitlKyIsIitlKyJWLSIrZSsiWiJ9LG5vRG90OiEwfSwiY2lyY2xlLWNyb3NzIjp7bjoyNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZSsiTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifSxuZWVkTGluZTohMCxub0RvdDohMH0sImNpcmNsZS14Ijp7bjoyOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC9NYXRoLnNxcnQoMiksMik7cmV0dXJuIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityKyJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwic3F1YXJlLWNyb3NzIjp7bjoyOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZSsiTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJzcXVhcmUteCI6e246MzAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkwtIitlKyIsLSIrZSsiTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlKyJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQtY3Jvc3MiOntuOjMxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIlpNMCwtIitlKyJWIitlKyJNLSIrZSsiLDBIIitlfSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQteCI6e246MzIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpLHI9bi5yb3VuZCguNjUqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIlpNLSIrcisiLC0iK3IrIkwiK3IrIiwiK3IrIk0tIityKyIsIityKyJMIityKyIsLSIrcn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJjcm9zcy10aGluIjp7bjozMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sIngtdGhpbiI6e246MzQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkwtIitlKyIsLSIrZSsiTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGFzdGVyaXNrOntuOjM1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoLjg1KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGhhc2g6e246MzYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQvMiwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrcisiVi0iK3IrIm0tIityKyIsMFYiK3IrIk0iK3IrIiwiK2UrIkgtIityKyJtMCwtIityKyJIIityfSxuZWVkTGluZTohMCxub0ZpbGw6ITB9LCJ5LXVwIjp7bjozNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIrZSsiLCIraSsiTDAsME0iK2UrIiwiK2krIkwwLDBNMCwtIityKyJMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwieS1kb3duIjp7bjozOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIrZSsiLC0iK2krIkwwLDBNIitlKyIsLSIraSsiTDAsME0wLCIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktbGVmdCI6e246MzksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTSIraSsiLCIrZSsiTDAsME0iK2krIiwtIitlKyJMMCwwTS0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktcmlnaHQiOntuOjQwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0tIitpKyIsIitlKyJMMCwwTS0iK2krIiwtIitlKyJMMCwwTSIrcisiLDBMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1ldyI6e246NDEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNIitlKyIsMEgtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW5zIjp7bjo0MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbmUiOntuOjQzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsLSIrZSsiTC0iK2UrIiwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbnciOntuOjQ0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImFycm93LXVwIjp7bjo0NSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsMEwtIitlKyIsIituLnJvdW5kKDIqdCwyKSsiSCIrZSsiWiJ9LG5vRG90OiEwfSwiYXJyb3ctZG93biI6e246NDYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLDBMLSIrZSsiLC0iK24ucm91bmQoMip0LDIpKyJIIitlKyJaIn0sbm9Eb3Q6ITB9LCJhcnJvdy1sZWZ0Ijp7bjo0NyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0LDIpLHI9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwwTCIrZSsiLC0iK3IrIlYiK3IrIloifSxub0RvdDohMH0sImFycm93LXJpZ2h0Ijp7bjo0OCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0LDIpLHI9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwwTC0iK2UrIiwtIityKyJWIityKyJaIn0sbm9Eb3Q6ITB9LCJhcnJvdy1iYXItdXAiOntuOjQ5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNLSIrZSsiLDBIIitlKyJNMCwwTC0iK2UrIiwiK24ucm91bmQoMip0LDIpKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJhcnJvdy1iYXItZG93biI6e246NTAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0tIitlKyIsMEgiK2UrIk0wLDBMLSIrZSsiLC0iK24ucm91bmQoMip0LDIpKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJhcnJvdy1iYXItbGVmdCI6e246NTEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdCwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsLSIrcisiViIrcisiTTAsMEwiK2UrIiwtIityKyJWIityKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJhcnJvdy1iYXItcmlnaHQiOntuOjUyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQsMikscj1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLC0iK3IrIlYiK3IrIk0wLDBMLSIrZSsiLC0iK3IrIlYiK3IrIloifSxuZWVkTGluZTohMCxub0RvdDohMH19fSx7ZDM6MTY5fV0sNjY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwZXJjZW50IiwiY29uc3RhbnQiLCJzcXJ0IiwiZGF0YSJdLGVkaXRUeXBlOiJjYWxjIn0sc3ltbWV0cmljOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LGFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGFycmF5bWludXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlbWludXM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHRyYWNlcmVmOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0sdHJhY2VyZWZtaW51czp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJzdHlsZSJ9LGNvcHlfeXN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvcHlfenN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIn19fX0se31dLDY2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4vY29tcHV0ZV9lcnJvciIpO2Z1bmN0aW9uIGwodCxlLHIsaSl7dmFyIGw9ZVsiZXJyb3JfIitpXXx8e30sYz1bXTtpZihsLnZpc2libGUmJi0xIT09WyJsaW5lYXIiLCJsb2ciXS5pbmRleE9mKHIudHlwZSkpe2Zvcih2YXIgdT1zKGwpLGY9MDtmPHQubGVuZ3RoO2YrKyl7dmFyIGg9dFtmXSxwPWguaTtpZih2b2lkIDA9PT1wKXA9ZjtlbHNlIGlmKG51bGw9PT1wKWNvbnRpbnVlO3ZhciBkPWhbaV07aWYobihyLmMybChkKSkpe3ZhciBnPXUoZCxwKTtpZihuKGdbMF0pJiZuKGdbMV0pKXt2YXIgbT1oW2krInMiXT1kLWdbMF0sdj1oW2krImgiXT1kK2dbMV07Yy5wdXNoKG0sdil9fX12YXIgeT1yLl9pZCx4PWUuX2V4dHJlbWVzW3ldLGI9YS5maW5kRXh0cmVtZXMocixjLG8uZXh0ZW5kRmxhdCh7dG96ZXJvOngub3B0cy50b3plcm99LHtwYWRkZWQ6ITB9KSk7eC5taW49eC5taW4uY29uY2F0KGIubWluKSx4Lm1heD14Lm1heC5jb25jYXQoYi5tYXgpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2FsY2RhdGEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLG89blswXS50cmFjZTtpZighMD09PW8udmlzaWJsZSYmaS50cmFjZUlzKG8sImVycm9yQmFyc09LIikpe3ZhciBzPWEuZ2V0RnJvbUlkKHQsby54YXhpcyksYz1hLmdldEZyb21JZCh0LG8ueWF4aXMpO2wobixvLHMsIngiKSxsKG4sbyxjLCJ5Iil9fX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4vY29tcHV0ZV9lcnJvciI6NjY5LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNjY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4icGVyY2VudCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0KmUvMTAwKX06ImNvbnN0YW50Ij09PXQ/ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnMoZSl9OiJzcXJ0Ij09PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLmFicyh0KSl9OnZvaWQgMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlLHI9dC5zeW1tZXRyaWM7aWYoImRhdGEiPT09ZSl7dmFyIGk9dC5hcnJheXx8W107aWYocilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXTtyZXR1cm5bcixyXX07dmFyIGE9dC5hcnJheW1pbnVzfHxbXTtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXSxuPSthW2VdO3JldHVybiBpc05hTihyKSYmaXNOYU4obik/W05hTixOYU5dOltufHwwLHJ8fDBdfX12YXIgbz1uKGUsdC52YWx1ZSkscz1uKGUsdC52YWx1ZW1pbnVzKTtyZXR1cm4gcnx8dm9pZCAwPT09dC52YWx1ZW1pbnVzP2Z1bmN0aW9uKHQpe3ZhciBlPW8odCk7cmV0dXJuW2UsZV19OmZ1bmN0aW9uKHQpe3JldHVybltzKHQpLG8odCldfX19LHt9XSw2NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz0iZXJyb3JfIitsLmF4aXMsdT1vLm5ld0NvbnRhaW5lcihlLGMpLGY9dFtjXXx8e307ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBhLmNvZXJjZShmLHUscyx0LGUpfWlmKCExIT09aCgidmlzaWJsZSIsdm9pZCAwIT09Zi5hcnJheXx8dm9pZCAwIT09Zi52YWx1ZXx8InNxcnQiPT09Zi50eXBlKSl7dmFyIHA9aCgidHlwZSIsImFycmF5ImluIGY/ImRhdGEiOiJwZXJjZW50IiksZD0hMDsic3FydCIhPT1wJiYoZD1oKCJzeW1tZXRyaWMiLCEoKCJkYXRhIj09PXA/ImFycmF5bWludXMiOiJ2YWx1ZW1pbnVzIilpbiBmKSkpLCJkYXRhIj09PXA/KGgoImFycmF5IiksaCgidHJhY2VyZWYiKSxkfHwoaCgiYXJyYXltaW51cyIpLGgoInRyYWNlcmVmbWludXMiKSkpOiJwZXJjZW50IiE9PXAmJiJjb25zdGFudCIhPT1wfHwoaCgidmFsdWUiKSxkfHxoKCJ2YWx1ZW1pbnVzIikpO3ZhciBnPSJjb3B5XyIrbC5pbmhlcml0KyJzdHlsZSI7aWYobC5pbmhlcml0KShlWyJlcnJvcl8iK2wuaW5oZXJpdF18fHt9KS52aXNpYmxlJiZoKGcsIShmLmNvbG9yfHxuKGYudGhpY2tuZXNzKXx8bihmLndpZHRoKSkpO2wuaW5oZXJpdCYmdVtnXXx8KGgoImNvbG9yIixyKSxoKCJ0aGlja25lc3MiKSxoKCJ3aWR0aCIsaS50cmFjZUlzKGUsImdsM2QiKT8wOjQpKX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4vYXR0cmlidXRlcyI6NjY3LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNjcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz17ZXJyb3JfeDpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfeTpuLmV4dGVuZEZsYXQoe30sYSl9O2RlbGV0ZSBvLmVycm9yX3guY29weV96c3R5bGUsZGVsZXRlIG8uZXJyb3JfeS5jb3B5X3pzdHlsZSxkZWxldGUgby5lcnJvcl95LmNvcHlfeXN0eWxlO3ZhciBzPXtlcnJvcl94Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl95Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl96Om4uZXh0ZW5kRmxhdCh7fSxhKX07ZGVsZXRlIHMuZXJyb3JfeC5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl95LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3ouY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3Jfei5jb3B5X3pzdHlsZSxlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZXJyb3JiYXJzIixzY2hlbWE6e3RyYWNlczp7c2NhdHRlcjpvLGJhcjpvLGhpc3RvZ3JhbTpvLHNjYXR0ZXIzZDppKHMsImNhbGMiLCJuZXN0ZWQiKSxzY2F0dGVyZ2w6aShvLCJjYWxjIiwibmVzdGVkIil9fSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxtYWtlQ29tcHV0ZUVycm9yOnQoIi4vY29tcHV0ZV9lcnJvciIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLGhvdmVySW5mbzpmdW5jdGlvbih0LGUscil7KGUuZXJyb3JfeXx8e30pLnZpc2libGUmJihyLnllcnI9dC55aC10LnksZS5lcnJvcl95LnN5bW1ldHJpY3x8KHIueWVycm5lZz10LnktdC55cykpOyhlLmVycm9yX3h8fHt9KS52aXNpYmxlJiYoci54ZXJyPXQueGgtdC54LGUuZXJyb3JfeC5zeW1tZXRyaWN8fChyLnhlcnJuZWc9dC54LXQueHMpKX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MTAsIi4vYXR0cmlidXRlcyI6NjY3LCIuL2NhbGMiOjY2OCwiLi9jb21wdXRlX2Vycm9yIjo2NjksIi4vZGVmYXVsdHMiOjY3MCwiLi9wbG90Ijo2NzIsIi4vc3R5bGUiOjY3M31dLDY3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL2RyYXdpbmciKSxvPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3ZhciBsPXIueGF4aXMsYz1yLnlheGlzLHU9cyYmcy5kdXJhdGlvbj4wO2UuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGYsaD1lWzBdLnRyYWNlLHA9aC5lcnJvcl94fHx7fSxkPWguZXJyb3JfeXx8e307aC5pZHMmJihmPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7dmFyIGc9by5oYXNNYXJrZXJzKGgpJiZoLm1hcmtlci5tYXhkaXNwbGF5ZWQ+MDtkLnZpc2libGV8fHAudmlzaWJsZXx8KGU9W10pO3ZhciBtPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5lcnJvcmJhciIpLmRhdGEoZSxmKTtpZihtLmV4aXQoKS5yZW1vdmUoKSxlLmxlbmd0aCl7cC52aXNpYmxlfHxtLnNlbGVjdEFsbCgicGF0aC54ZXJyb3IiKS5yZW1vdmUoKSxkLnZpc2libGV8fG0uc2VsZWN0QWxsKCJwYXRoLnllcnJvciIpLnJlbW92ZSgpLG0uc3R5bGUoIm9wYWNpdHkiLDEpO3ZhciB2PW0uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJlcnJvcmJhciIsITApO3UmJnYuc3R5bGUoIm9wYWNpdHkiLDApLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMSksYS5zZXRDbGlwVXJsKG0sci5sYXllckNsaXBJZCx0KSxtLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt4OmUuYzJwKHQueCkseTpyLmMycCh0LnkpfTt2b2lkIDAhPT10LnloJiYobi55aD1yLmMycCh0LnloKSxuLnlzPXIuYzJwKHQueXMpLGkobi55cyl8fChuLm5vWVM9ITAsbi55cz1yLmMycCh0LnlzLCEwKSkpO3ZvaWQgMCE9PXQueGgmJihuLnhoPWUuYzJwKHQueGgpLG4ueHM9ZS5jMnAodC54cyksaShuLnhzKXx8KG4ubm9YUz0hMCxuLnhzPWUuYzJwKHQueHMsITApKSk7cmV0dXJuIG59KHQsbCxjKTtpZighZ3x8dC52aXMpe3ZhciBhLG89ZS5zZWxlY3QoInBhdGgueWVycm9yIik7aWYoZC52aXNpYmxlJiZpKHIueCkmJmkoci55aCkmJmkoci55cykpe3ZhciBmPWQud2lkdGg7YT0iTSIrKHIueC1mKSsiLCIrci55aCsiaCIrMipmKyJtLSIrZisiLDBWIityLnlzLHIubm9ZU3x8KGErPSJtLSIrZisiLDBoIisyKmYpLCFvLnNpemUoKT9vPWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jbGFzc2VkKCJ5ZXJyb3IiLCEwKTp1JiYobz1vLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5lYXNlKHMuZWFzaW5nKSksby5hdHRyKCJkIixhKX1lbHNlIG8ucmVtb3ZlKCk7dmFyIGg9ZS5zZWxlY3QoInBhdGgueGVycm9yIik7aWYocC52aXNpYmxlJiZpKHIueSkmJmkoci54aCkmJmkoci54cykpe3ZhciBtPShwLmNvcHlfeXN0eWxlP2Q6cCkud2lkdGg7YT0iTSIrci54aCsiLCIrKHIueS1tKSsidiIrMiptKyJtMCwtIittKyJIIityLnhzLHIubm9YU3x8KGErPSJtMCwtIittKyJ2IisyKm0pLCFoLnNpemUoKT9oPWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jbGFzc2VkKCJ4ZXJyb3IiLCEwKTp1JiYoaD1oLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5lYXNlKHMuZWFzaW5nKSksaC5hdHRyKCJkIixhKX1lbHNlIGgucmVtb3ZlKCl9fSkpfX0pKX19LHsiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTIsIi4uL2RyYXdpbmciOjY2NSxkMzoxNjksImZhc3QtaXNudW1lcmljIjoyNDF9XSw2NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2NvbG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPWUuZXJyb3JfeXx8e30sYT1lLmVycm9yX3h8fHt9LG89bi5zZWxlY3QodGhpcyk7by5zZWxlY3RBbGwoInBhdGgueWVycm9yIikuc3R5bGUoInN0cm9rZS13aWR0aCIsci50aGlja25lc3MrInB4IikuY2FsbChpLnN0cm9rZSxyLmNvbG9yKSxhLmNvcHlfeXN0eWxlJiYoYT1yKSxvLnNlbGVjdEFsbCgicGF0aC54ZXJyb3IiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixhLnRoaWNrbmVzcysicHgiKS5jYWxsKGkuc3Ryb2tlLGEuY29sb3IpfSkpfX0seyIuLi9jb2xvciI6NjQzLGQzOjE2OX1dLDY3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKS5ob3ZlcmxhYmVsLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtob3ZlcmxhYmVsOntiZ2NvbG9yOmEoe30saS5iZ2NvbG9yLHthcnJheU9rOiEwfSksYm9yZGVyY29sb3I6YSh7fSxpLmJvcmRlcmNvbG9yLHthcnJheU9rOiEwfSksZm9udDpuKHthcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0pLGFsaWduOmEoe30saS5hbGlnbix7YXJyYXlPazohMH0pLG5hbWVsZW5ndGg6YSh7fSxpLm5hbWVsZW5ndGgse2FycmF5T2s6ITB9KSxlZGl0VHlwZToibm9uZSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2ODR9XSw2NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIGEodCxlLHIsaSl7aT1pfHxuLmlkZW50aXR5LEFycmF5LmlzQXJyYXkodCkmJihlWzBdW3JdPWkodCkpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbi5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzplfSx7X21vZHVsZTp0Ll9tb2R1bGV9LHIpfX1mb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGw9ZVtzXSxjPWxbMF0udHJhY2U7aWYoIWkudHJhY2VJcyhjLCJwaWUtbGlrZSIpKXt2YXIgdT1pLnRyYWNlSXMoYywiMmRNYXAiKT9hOm4uZmlsbEFycmF5O3UoYy5ob3ZlcmluZm8sbCwiaGkiLG8oYykpLGMuaG92ZXJ0ZW1wbGF0ZSYmdShjLmhvdmVydGVtcGxhdGUsbCwiaHQiKSxjLmhvdmVybGFiZWwmJih1KGMuaG92ZXJsYWJlbC5iZ2NvbG9yLGwsImhiZyIpLHUoYy5ob3ZlcmxhYmVsLmJvcmRlcmNvbG9yLGwsImhiYyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuc2l6ZSxsLCJodHMiKSx1KGMuaG92ZXJsYWJlbC5mb250LmNvbG9yLGwsImh0YyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuZmFtaWx5LGwsImh0ZiIpLHUoYy5ob3ZlcmxhYmVsLm5hbWVsZW5ndGgsbCwiaG5sIiksdShjLmhvdmVybGFiZWwuYWxpZ24sbCwiaHRhIikpfX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9yZWdpc3RyeSI6OTExfV0sNjc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuL2hvdmVyIikuaG92ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1uLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJvbkNsaWNrIikodCx0Ll9ob3ZlcmRhdGEpO2Z1bmN0aW9uIG8oKXt0LmVtaXQoInBsb3RseV9jbGljayIse3BvaW50czp0Ll9ob3ZlcmRhdGEsZXZlbnQ6ZX0pfXZvaWQgMCE9PXImJmkodCxlLHIsITApLHQuX2hvdmVyZGF0YSYmZSYmZS50YXJnZXQmJihhJiZhLnRoZW4/YS50aGVuKG8pOm8oKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4vaG92ZXIiOjY4MH1dLDY3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1lBTkdMRTo2MCxIT1ZFUkFSUk9XU0laRTo2LEhPVkVSVEVYVFBBRDozLEhPVkVSRk9OVFNJWkU6MTMsSE9WRVJGT05UOiJBcmlhbCwgc2Fucy1zZXJpZiIsSE9WRVJNSU5USU1FOjUwLEhPVkVSSUQ6Ii1ob3ZlciJ9fSx7fV0sNjc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9bi5leHRlbmRGbGF0KHt9LG8uaG92ZXJsYWJlbCk7ZS5ob3ZlcnRlbXBsYXRlJiYocy5uYW1lbGVuZ3RoPS0xKSxhKHQsZSwoZnVuY3Rpb24ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX0pLHMpfX0seyIuLi8uLi9saWIiOjc3OCwiLi9hdHRyaWJ1dGVzIjo2NzQsIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyI6NjgxfV0sNjc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO3IuZ2V0U3VicGxvdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJwbG90fHx0LnhheGlzK3QueWF4aXN8fHQuZ2VvfSxyLmlzVHJhY2VJblN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7aWYoInNwbG9tIj09PXQudHlwZSl7Zm9yKHZhciBuPXQueGF4ZXN8fFtdLGk9dC55YXhlc3x8W10sYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKWlmKC0xIT09ZS5pbmRleE9mKG5bYV0raVtvXSkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuLTEhPT1lLmluZGV4T2Yoci5nZXRTdWJwbG90KHQpKX0sci5mbGF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXJbbl09ZTtyZXR1cm4gcn0sci5wMmM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT10W25dLnAyYyhlKTtyZXR1cm4gcn0sci5nZXREaXN0YW5jZUZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiJjbG9zZXN0Ij09PXQ/aXx8ci5xdWFkcmF0dXJlKGUsbik6IngiPT09dC5jaGFyQXQoMCk/ZTpufSxyLmdldENsb3Nlc3Q9ZnVuY3Rpb24odCxlLHIpe2lmKCExIT09ci5pbmRleClyLmluZGV4Pj0wJiZyLmluZGV4PHQubGVuZ3RoP3IuZGlzdGFuY2U9MDpyLmluZGV4PSExO2Vsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPWUodFtuXSk7aTw9ci5kaXN0YW5jZSYmKHIuaW5kZXg9bixyLmRpc3RhbmNlPWkpfXJldHVybiByfSxyLmluYm94PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCplPDB8fDA9PT10P3I6MS8wfSxyLnF1YWRyYXR1cmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dChyKSxpPWUocik7cmV0dXJuIE1hdGguc3FydChuKm4raSppKX19LHIubWFrZUV2ZW50RGF0YT1mdW5jdGlvbih0LGUsbil7dmFyIGk9ImluZGV4ImluIHQ/dC5pbmRleDp0LnBvaW50TnVtYmVyLGE9e2RhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZSxjdXJ2ZU51bWJlcjplLmluZGV4LHBvaW50TnVtYmVyOml9O2lmKGUuX2luZGV4VG9Qb2ludHMpe3ZhciBvPWUuX2luZGV4VG9Qb2ludHNbaV07MT09PW8ubGVuZ3RoP2EucG9pbnRJbmRleD1vWzBdOmEucG9pbnRJbmRpY2VzPW99ZWxzZSBhLnBvaW50SW5kZXg9aTtyZXR1cm4gZS5fbW9kdWxlLmV2ZW50RGF0YT9hPWUuX21vZHVsZS5ldmVudERhdGEoYSx0LGUsbixpKTooInhWYWwiaW4gdD9hLng9dC54VmFsOiJ4ImluIHQmJihhLng9dC54KSwieVZhbCJpbiB0P2EueT10LnlWYWw6InkiaW4gdCYmKGEueT10LnkpLHQueGEmJihhLnhheGlzPXQueGEpLHQueWEmJihhLnlheGlzPXQueWEpLHZvaWQgMCE9PXQuekxhYmVsVmFsJiYoYS56PXQuekxhYmVsVmFsKSksci5hcHBlbmRBcnJheVBvaW50VmFsdWUoYSxlLGkpLGF9LHIuYXBwZW5kQXJyYXlQb2ludFZhbHVlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLl9hcnJheUF0dHJzO2lmKGkpZm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10sYz1hKGwpO2lmKHZvaWQgMD09PXRbY10pe3ZhciB1PW8obi5uZXN0ZWRQcm9wZXJ0eShlLGwpLmdldCgpLHIpO3ZvaWQgMCE9PXUmJih0W2NdPXUpfX19LHIuYXBwZW5kQXJyYXlNdWx0aVBvaW50VmFsdWVzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLl9hcnJheUF0dHJzO2lmKGkpZm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10sYz1hKGwpO2lmKHZvaWQgMD09PXRbY10pe2Zvcih2YXIgdT1uLm5lc3RlZFByb3BlcnR5KGUsbCkuZ2V0KCksZj1uZXcgQXJyYXkoci5sZW5ndGgpLGg9MDtoPHIubGVuZ3RoO2grKylmW2hdPW8odSxyW2hdKTt0W2NdPWZ9fX07dmFyIGk9e2lkczoiaWQiLGxvY2F0aW9uczoibG9jYXRpb24iLGxhYmVsczoibGFiZWwiLHZhbHVlczoidmFsdWUiLCJtYXJrZXIuY29sb3JzIjoiY29sb3IiLHBhcmVudHM6InBhcmVudCJ9O2Z1bmN0aW9uIGEodCl7cmV0dXJuIGlbdF18fHR9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP0FycmF5LmlzQXJyYXkodCkmJkFycmF5LmlzQXJyYXkodFtlWzBdXSk/dFtlWzBdXVtlWzFdXTp2b2lkIDA6dFtlXX12YXIgcz17eDohMCx5OiEwfSxsPXsieCB1bmlmaWVkIjohMCwieSB1bmlmaWVkIjohMH07ci5pc1VuaWZpZWRIb3Zlcj1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiEhbFt0XX0sci5pc1hZaG92ZXI9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYhIXNbdF19fSx7Ii4uLy4uL2xpYiI6Nzc4fV0sNjgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgidGlueWNvbG9yMiIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clRyYW5zbGF0ZSxsPW8uc3RyUm90YXRlLGM9dCgiLi4vLi4vbGliL2V2ZW50cyIpLHU9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj10KCIuLi8uLi9saWIvb3ZlcnJpZGVfY3Vyc29yIiksaD10KCIuLi9kcmF3aW5nIikscD10KCIuLi9jb2xvciIpLGQ9dCgiLi4vZHJhZ2VsZW1lbnQiKSxnPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbT10KCIuLi8uLi9yZWdpc3RyeSIpLHY9dCgiLi9oZWxwZXJzIikseT10KCIuL2NvbnN0YW50cyIpLHg9dCgiLi4vbGVnZW5kL2RlZmF1bHRzIiksYj10KCIuLi9sZWdlbmQvZHJhdyIpLF89eS5ZQU5HTEUsdz1NYXRoLlBJKl8vMTgwLFQ9MS9NYXRoLnNpbih3KSxrPU1hdGguY29zKHcpLE09TWF0aC5zaW4odyksQT15LkhPVkVSQVJST1dTSVpFLFM9eS5IT1ZFUlRFWFRQQUQ7ZnVuY3Rpb24gRSh0KXtyZXR1cm5bdC50cmFjZS5pbmRleCx0LmluZGV4LHQueDAsdC55MCx0Lm5hbWUsdC5hdHRyLHQueGEsdC55YXx8IiJdLmpvaW4oIiwiKX1yLmhvdmVyPWZ1bmN0aW9uKHQsZSxyLGEpe3Q9by5nZXRHcmFwaERpdih0KSxvLnRocm90dGxlKHQuX2Z1bGxMYXlvdXQuX3VpZCt5LkhPVkVSSUQseS5IT1ZFUk1JTlRJTUUsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSxyLGEpe3J8fChyPSJ4eSIpO3ZhciBzPUFycmF5LmlzQXJyYXkocik/cjpbcl0sbD10Ll9mdWxsTGF5b3V0LHU9bC5fcGxvdHN8fFtdLGg9dVtyXSxnPWwuX2hhcygiY2FydGVzaWFuIik7aWYoaCl7dmFyIHk9aC5vdmVybGF5cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpO3M9cy5jb25jYXQoeSl9Zm9yKHZhciB4PXMubGVuZ3RoLGI9bmV3IEFycmF5KHgpLF89bmV3IEFycmF5KHgpLHc9ITEsaz0wO2s8eDtrKyspe3ZhciBNPXNba107aWYodVtNXSl3PSEwLGJba109dVtNXS54YXhpcyxfW2tdPXVbTV0ueWF4aXM7ZWxzZXtpZighbFtNXXx8IWxbTV0uX3N1YnBsb3QpcmV0dXJuIHZvaWQgby53YXJuKCJVbnJlY29nbml6ZWQgc3VicGxvdDogIitNKTt2YXIgQT1sW01dLl9zdWJwbG90O2Jba109QS54YXhpcyxfW2tdPUEueWF4aXN9fXZhciBTPWUuaG92ZXJtb2RlfHxsLmhvdmVybW9kZTtTJiYhdyYmKFM9ImNsb3Nlc3QiKTtpZigtMT09PVsieCIsInkiLCJjbG9zZXN0IiwieCB1bmlmaWVkIiwieSB1bmlmaWVkIl0uaW5kZXhPZihTKXx8IXQuY2FsY2RhdGF8fHQucXVlcnlTZWxlY3RvcigiLnpvb21ib3giKXx8dC5fZHJhZ2dpbmcpcmV0dXJuIGQudW5ob3ZlclJhdyh0LGUpO3ZhciBDLEksUixGLEIsTixqLFUsVixxLEgsRyxZLFc9LTE9PT1sLmhvdmVyZGlzdGFuY2U/MS8wOmwuaG92ZXJkaXN0YW5jZSxYPS0xPT09bC5zcGlrZWRpc3RhbmNlPzEvMDpsLnNwaWtlZGlzdGFuY2UsWj1bXSxKPVtdLEs9e2hMaW5lUG9pbnQ6bnVsbCx2TGluZVBvaW50Om51bGx9LFE9ITE7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoUz0iYXJyYXkiLFI9MDtSPGUubGVuZ3RoO1IrKykoQj10LmNhbGNkYXRhW2VbUl0uY3VydmVOdW1iZXJ8fDBdKSYmKE49QlswXS50cmFjZSwic2tpcCIhPT1CWzBdLnRyYWNlLmhvdmVyaW5mbyYmKEoucHVzaChCKSwiaCI9PT1OLm9yaWVudGF0aW9uJiYoUT0hMCkpKTtlbHNle2ZvcihGPTA7Rjx0LmNhbGNkYXRhLmxlbmd0aDtGKyspQj10LmNhbGNkYXRhW0ZdLCJza2lwIiE9PShOPUJbMF0udHJhY2UpLmhvdmVyaW5mbyYmdi5pc1RyYWNlSW5TdWJwbG90cyhOLHMpJiYoSi5wdXNoKEIpLCJoIj09PU4ub3JpZW50YXRpb24mJihRPSEwKSk7dmFyICQsdHQ7aWYoIWUudGFyZ2V0KSQ9InhweCJpbiBlP2UueHB4OmJbMF0uX2xlbmd0aC8yLHR0PSJ5cHgiaW4gZT9lLnlweDpfWzBdLl9sZW5ndGgvMjtlbHNle2lmKCExPT09Yy50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlaG92ZXIiLGUpKXJldHVybjt2YXIgZXQ9ZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7JD1lLmNsaWVudFgtZXQubGVmdCx0dD1lLmNsaWVudFktZXQudG9wLGwuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHQpO3ZhciBydD1vLmFwcGx5M0RUcmFuc2Zvcm0obC5faW52VHJhbnNmb3JtKSgkLHR0KTtpZigkPXJ0WzBdLHR0PXJ0WzFdLCQ8MHx8JD5iWzBdLl9sZW5ndGh8fHR0PDB8fHR0Pl9bMF0uX2xlbmd0aClyZXR1cm4gZC51bmhvdmVyUmF3KHQsZSl9aWYoZS5wb2ludGVyWD0kK2JbMF0uX29mZnNldCxlLnBvaW50ZXJZPXR0K19bMF0uX29mZnNldCxDPSJ4dmFsImluIGU/di5mbGF0KHMsZS54dmFsKTp2LnAyYyhiLCQpLEk9Inl2YWwiaW4gZT92LmZsYXQocyxlLnl2YWwpOnYucDJjKF8sdHQpLCFpKENbMF0pfHwhaShJWzBdKSlyZXR1cm4gby53YXJuKCJGeC5ob3ZlciBmYWlsZWQiLGUsdCksZC51bmhvdmVyUmF3KHQsZSl9dmFyIG50PTEvMDtmdW5jdGlvbiBpdCh0LHIpe2ZvcihGPTA7RjxKLmxlbmd0aDtGKyspaWYoKEI9SltGXSkmJkJbMF0mJkJbMF0udHJhY2UmJiEwPT09KE49QlswXS50cmFjZSkudmlzaWJsZSYmMCE9PU4uX2xlbmd0aCYmLTE9PT1bImNhcnBldCIsImNvbnRvdXJjYXJwZXQiXS5pbmRleE9mKE4uX21vZHVsZS5uYW1lKSl7aWYoInNwbG9tIj09PU4udHlwZT9qPXNbVT0wXTooaj12LmdldFN1YnBsb3QoTiksVT1zLmluZGV4T2YoaikpLFY9Uyx2LmlzVW5pZmllZEhvdmVyKFYpJiYoVj1WLmNoYXJBdCgwKSksRz17Y2Q6Qix0cmFjZTpOLHhhOmJbVV0seWE6X1tVXSxtYXhIb3ZlckRpc3RhbmNlOlcsbWF4U3Bpa2VEaXN0YW5jZTpYLGluZGV4OiExLGRpc3RhbmNlOk1hdGgubWluKG50LFcpLHNwaWtlRGlzdGFuY2U6MS8wLHhTcGlrZTp2b2lkIDAseVNwaWtlOnZvaWQgMCxjb2xvcjpwLmRlZmF1bHRMaW5lLG5hbWU6Ti5uYW1lLHgwOnZvaWQgMCx4MTp2b2lkIDAseTA6dm9pZCAwLHkxOnZvaWQgMCx4TGFiZWxWYWw6dm9pZCAwLHlMYWJlbFZhbDp2b2lkIDAsekxhYmVsVmFsOnZvaWQgMCx0ZXh0OnZvaWQgMH0sbFtqXSYmKEcuc3VicGxvdD1sW2pdLl9zdWJwbG90KSxsLl9zcGxvbVNjZW5lcyYmbC5fc3Bsb21TY2VuZXNbTi51aWRdJiYoRy5zY2VuZT1sLl9zcGxvbVNjZW5lc1tOLnVpZF0pLFk9Wi5sZW5ndGgsImFycmF5Ij09PVYpe3ZhciBuPWVbRl07InBvaW50TnVtYmVyImluIG4/KEcuaW5kZXg9bi5wb2ludE51bWJlcixWPSJjbG9zZXN0Iik6KFY9IiIsInh2YWwiaW4gbiYmKHE9bi54dmFsLFY9IngiKSwieXZhbCJpbiBuJiYoSD1uLnl2YWwsVj1WPyJjbG9zZXN0IjoieSIpKX1lbHNlIHZvaWQgMCE9PXQmJnZvaWQgMCE9PXI/KHE9dCxIPXIpOihxPUNbVV0sSD1JW1VdKTtpZigwIT09VylpZihOLl9tb2R1bGUmJk4uX21vZHVsZS5ob3ZlclBvaW50cyl7dmFyIGE9Ti5fbW9kdWxlLmhvdmVyUG9pbnRzKEcscSxILFYsbC5faG92ZXJsYXllcik7aWYoYSlmb3IodmFyIGMsdT0wO3U8YS5sZW5ndGg7dSsrKWM9YVt1XSxpKGMueDApJiZpKGMueTApJiZaLnB1c2goeihjLFMpKX1lbHNlIG8ubG9nKCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSBpbiBob3ZlcjoiLE4pO2lmKCJjbG9zZXN0Ij09PVMmJloubGVuZ3RoPlkmJihaLnNwbGljZSgwLFkpLG50PVpbMF0uZGlzdGFuY2UpLGcmJjAhPT1YJiYwPT09Wi5sZW5ndGgpe0cuZGlzdGFuY2U9WCxHLmluZGV4PSExO3ZhciBmPU4uX21vZHVsZS5ob3ZlclBvaW50cyhHLHEsSCwiY2xvc2VzdCIsbC5faG92ZXJsYXllcik7aWYoZiYmKGY9Zi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwaWtlRGlzdGFuY2U8PVh9KSkpLGYmJmYubGVuZ3RoKXt2YXIgaCxkPWYuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC54YS5zaG93c3Bpa2VzJiYiaG92ZXJlZCBkYXRhIiE9PXQueGEuc3Bpa2VzbmFwfSkpO2lmKGQubGVuZ3RoKXt2YXIgbT1kWzBdO2kobS54MCkmJmkobS55MCkmJihoPW90KG0pLCghSy52TGluZVBvaW50fHxLLnZMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT5oLnNwaWtlRGlzdGFuY2UpJiYoSy52TGluZVBvaW50PWgpKX12YXIgeT1mLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQueWEuc2hvd3NwaWtlcyYmImhvdmVyZWQgZGF0YSIhPT10LnlhLnNwaWtlc25hcH0pKTtpZih5Lmxlbmd0aCl7dmFyIHg9eVswXTtpKHgueDApJiZpKHgueTApJiYoaD1vdCh4KSwoIUsuaExpbmVQb2ludHx8Sy5oTGluZVBvaW50LnNwaWtlRGlzdGFuY2U+aC5zcGlrZURpc3RhbmNlKSYmKEsuaExpbmVQb2ludD1oKSl9fX19fWZ1bmN0aW9uIGF0KHQsZSl7Zm9yKHZhciByLG49bnVsbCxpPTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspKHI9dFthXS5zcGlrZURpc3RhbmNlKTw9aSYmcjw9ZSYmKG49dFthXSxpPXIpO3JldHVybiBufWZ1bmN0aW9uIG90KHQpe3JldHVybiB0P3t4YTp0LnhhLHlhOnQueWEseDp2b2lkIDAhPT10LnhTcGlrZT90LnhTcGlrZToodC54MCt0LngxKS8yLHk6dm9pZCAwIT09dC55U3Bpa2U/dC55U3Bpa2U6KHQueTArdC55MSkvMixkaXN0YW5jZTp0LmRpc3RhbmNlLHNwaWtlRGlzdGFuY2U6dC5zcGlrZURpc3RhbmNlLGN1cnZlTnVtYmVyOnQudHJhY2UuaW5kZXgsY29sb3I6dC5jb2xvcixwb2ludE51bWJlcjp0LmluZGV4fTpudWxsfWl0KCk7dmFyIHN0PXtmdWxsTGF5b3V0OmwsY29udGFpbmVyOmwuX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6bC5fcGFwZXJkaXYsZXZlbnQ6ZX0sbHQ9dC5fc3Bpa2Vwb2ludHMsY3Q9e3ZMaW5lUG9pbnQ6Sy52TGluZVBvaW50LGhMaW5lUG9pbnQ6Sy5oTGluZVBvaW50fTtpZih0Ll9zcGlrZXBvaW50cz1jdCxnJiYwIT09WCYmMCE9PVoubGVuZ3RoKXt2YXIgdXQ9YXQoWi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnlhLnNob3dzcGlrZXN9KSksWCk7Sy5oTGluZVBvaW50PW90KHV0KTt2YXIgZnQ9YXQoWi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhhLnNob3dzcGlrZXN9KSksWCk7Sy52TGluZVBvaW50PW90KGZ0KX1pZigwPT09Wi5sZW5ndGgpe3ZhciBodD1kLnVuaG92ZXJSYXcodCxlKTtyZXR1cm4hZ3x8bnVsbD09PUsuaExpbmVQb2ludCYmbnVsbD09PUsudkxpbmVQb2ludHx8RChsdCkmJk8odCxLLHN0KSxodH1nJiZEKGx0KSYmTyh0LEssc3QpO2lmKFouc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXN0YW5jZS1lLmRpc3RhbmNlfSkpLHYuaXNYWWhvdmVyKFYpJiYwIT09WlswXS5sZW5ndGgmJiJzcGxvbSIhPT1aWzBdLnRyYWNlLnR5cGUpe3ZhciBwdD1aWzBdLGR0PXB0LmNkW3B0LmluZGV4XSxndD0iZ3JvdXAiPT09bC5ib3htb2RlfHwiZ3JvdXAiPT09bC52aW9saW5tb2RlLG10PXB0LnhWYWwsdnQ9cHQueGE7ImNhdGVnb3J5Ij09PXZ0LnR5cGUmJihtdD12dC5fY2F0ZWdvcmllc01hcFttdF0pLCJkYXRlIj09PXZ0LnR5cGUmJihtdD12dC5kMmMobXQpKSxkdCYmZHQudCYmZHQudC5wb3NMZXR0ZXI9PT12dC5faWQmJmd0JiYobXQrPWR0LnQuZFBvcyk7dmFyIHl0PXB0LnlWYWw7ImNhdGVnb3J5Ij09PSh2dD1wdC55YSkudHlwZSYmKHl0PXZ0Ll9jYXRlZ29yaWVzTWFwW3l0XSksImRhdGUiPT09dnQudHlwZSYmKHl0PXZ0LmQyYyh5dCkpLGR0JiZkdC50JiZkdC50LnBvc0xldHRlcj09PXZ0Ll9pZCYmZ3QmJih5dCs9ZHQudC5kUG9zKSxpdChtdCx5dCk7dmFyIHh0PXt9O1o9Wi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3ZhciBlPUUodCk7aWYoIXh0W2VdKXJldHVybiB4dFtlXT0hMCx4dFtlXX0pKX12YXIgYnQ9dC5faG92ZXJkYXRhLF90PVtdO2ZvcihSPTA7UjxaLmxlbmd0aDtSKyspe3ZhciB3dD1aW1JdLFR0PXYubWFrZUV2ZW50RGF0YSh3dCx3dC50cmFjZSx3dC5jZCk7aWYoITEhPT13dC5ob3ZlcnRlbXBsYXRlKXt2YXIga3Q9ITE7d3QuY2Rbd3QuaW5kZXhdJiZ3dC5jZFt3dC5pbmRleF0uaHQmJihrdD13dC5jZFt3dC5pbmRleF0uaHQpLHd0LmhvdmVydGVtcGxhdGU9a3R8fHd0LnRyYWNlLmhvdmVydGVtcGxhdGV8fCExfXd0LmV2ZW50RGF0YT1bVHRdLF90LnB1c2goVHQpfXQuX2hvdmVyZGF0YT1fdDt2YXIgTXQ9InkiPT09UyYmKEoubGVuZ3RoPjF8fFoubGVuZ3RoPjEpfHwiY2xvc2VzdCI9PT1TJiZRJiZaLmxlbmd0aD4xLEF0PXAuY29tYmluZShsLnBsb3RfYmdjb2xvcnx8cC5iYWNrZ3JvdW5kLGwucGFwZXJfYmdjb2xvciksU3Q9e2hvdmVybW9kZTpTLHJvdGF0ZUxhYmVsczpNdCxiZ0NvbG9yOkF0LGNvbnRhaW5lcjpsLl9ob3ZlcmxheWVyLG91dGVyQ29udGFpbmVyOmwuX3BhcGVyZGl2LGNvbW1vbkxhYmVsT3B0czpsLmhvdmVybGFiZWwsaG92ZXJkaXN0YW5jZTpsLmhvdmVyZGlzdGFuY2V9LEV0PUwoWixTdCx0KTt2LmlzVW5pZmllZEhvdmVyKFMpfHwoIWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1PTAsZj0xLGg9dC5zaXplKCkscD1uZXcgQXJyYXkoaCksZD0wO2Z1bmN0aW9uIGcodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07aWYoaT1lLnBtaW4tZS5wb3MtZS5kcCtlLnNpemUsYT1yLnBvcytyLmRwK3Iuc2l6ZS1lLnBtYXgsaT4uMDEpe2ZvcihzPXQubGVuZ3RoLTE7cz49MDtzLS0pdFtzXS5kcCs9aTtuPSExfWlmKCEoYTwuMDEpKXtpZihpPC0uMDEpe2ZvcihzPXQubGVuZ3RoLTE7cz49MDtzLS0pdFtzXS5kcC09YTtuPSExfWlmKG4pe3ZhciBjPTA7Zm9yKG89MDtvPHQubGVuZ3RoO28rKykobD10W29dKS5wb3MrbC5kcCtsLnNpemU+ZS5wbWF4JiZjKys7Zm9yKG89dC5sZW5ndGgtMTtvPj0wJiYhKGM8PTApO28tLSkobD10W29dKS5wb3M+ZS5wbWF4LTEmJihsLmRlbD0hMCxjLS0pO2ZvcihvPTA7bzx0Lmxlbmd0aCYmIShjPD0wKTtvKyspaWYoKGw9dFtvXSkucG9zPGUucG1pbisxKWZvcihsLmRlbD0hMCxjLS0sYT0yKmwuc2l6ZSxzPXQubGVuZ3RoLTE7cz49MDtzLS0pdFtzXS5kcC09YTtmb3Iobz10Lmxlbmd0aC0xO28+PTAmJiEoYzw9MCk7by0tKShsPXRbb10pLnBvcytsLmRwK2wuc2l6ZT5lLnBtYXgmJihsLmRlbD0hMCxjLS0pfX19dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj10W2VdLGk9IngiPT09bi5faWQuY2hhckF0KDApLGE9bi5yYW5nZTswPT09ZCYmYSYmYVswXT5hWzFdIT09aSYmKGY9LTEpLHBbZCsrXT1be2RhdHVtOnQsdHJhY2VJbmRleDp0LnRyYWNlLmluZGV4LGRwOjAscG9zOnQucG9zLHBvc3JlZjp0LnBvc3JlZixzaXplOnQuYnkqKGk/VDoxKS8yLHBtaW46MCxwbWF4Omk/ci53aWR0aDpyLmhlaWdodH1dfSkpLHAuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS5wb3NyZWYtZVswXS5wb3NyZWZ8fGYqKGVbMF0udHJhY2VJbmRleC10WzBdLnRyYWNlSW5kZXgpfSkpO2Zvcig7IW4mJnU8PWg7KXtmb3IodSsrLG49ITAsbz0wO288cC5sZW5ndGgtMTspe3ZhciBtPXBbb10sdj1wW28rMV0seT1tW20ubGVuZ3RoLTFdLHg9dlswXTtpZigoaT15LnBvcyt5LmRwK3kuc2l6ZS14LnBvcy14LmRwK3guc2l6ZSk+LjAxJiZ5LnBtaW49PT14LnBtaW4mJnkucG1heD09PXgucG1heCl7Zm9yKHM9di5sZW5ndGgtMTtzPj0wO3MtLSl2W3NdLmRwKz1pO2ZvcihtLnB1c2guYXBwbHkobSx2KSxwLnNwbGljZShvKzEsMSksYz0wLHM9bS5sZW5ndGgtMTtzPj0wO3MtLSljKz1tW3NdLmRwO2ZvcihhPWMvbS5sZW5ndGgscz1tLmxlbmd0aC0xO3M+PTA7cy0tKW1bc10uZHAtPWE7bj0hMX1lbHNlIG8rK31wLmZvckVhY2goZyl9Zm9yKG89cC5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIGI9cFtvXTtmb3Iocz1iLmxlbmd0aC0xO3M+PTA7cy0tKXt2YXIgXz1iW3NdLHc9Xy5kYXR1bTt3Lm9mZnNldD1fLmRwLHcuZGVsPV8uZGVsfX19KEV0LE10PyJ4YSI6InlhIixsKSxQKEV0LE10LGwuX2ludlNjYWxlWCxsLl9pbnZTY2FsZVkpKTtpZihlLnRhcmdldCYmZS50YXJnZXQudGFnTmFtZSl7dmFyIEN0PW0uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImhhc0NsaWNrVG9TaG93IikodCxfdCk7ZihuLnNlbGVjdChlLnRhcmdldCksQ3Q/InBvaW50ZXIiOiIiKX1pZighZS50YXJnZXR8fGF8fCFmdW5jdGlvbih0LGUscil7aWYoIXJ8fHIubGVuZ3RoIT09dC5faG92ZXJkYXRhLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49ci5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9cltuXSxhPXQuX2hvdmVyZGF0YVtuXTtpZihpLmN1cnZlTnVtYmVyIT09YS5jdXJ2ZU51bWJlcnx8U3RyaW5nKGkucG9pbnROdW1iZXIpIT09U3RyaW5nKGEucG9pbnROdW1iZXIpfHxTdHJpbmcoaS5wb2ludE51bWJlcnMpIT09U3RyaW5nKGEucG9pbnROdW1iZXJzKSlyZXR1cm4hMH1yZXR1cm4hMX0odCwwLGJ0KSlyZXR1cm47YnQmJnQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDplLHBvaW50czpidH0pO3QuZW1pdCgicGxvdGx5X2hvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6dC5faG92ZXJkYXRhLHhheGVzOmIseWF4ZXM6Xyx4dmFsczpDLHl2YWxzOkl9KX0odCxlLHIsYSl9KSl9LHIubG9uZUhvdmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ITA7QXJyYXkuaXNBcnJheSh0KXx8KHI9ITEsdD1bdF0pO3ZhciBpPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm57Y29sb3I6dC5jb2xvcnx8cC5kZWZhdWx0TGluZSx4MDp0LngwfHx0Lnh8fDAseDE6dC54MXx8dC54fHwwLHkwOnQueTB8fHQueXx8MCx5MTp0LnkxfHx0Lnl8fDAseExhYmVsOnQueExhYmVsLHlMYWJlbDp0LnlMYWJlbCx6TGFiZWw6dC56TGFiZWwsdGV4dDp0LnRleHQsbmFtZTp0Lm5hbWUsaWRlYWxBbGlnbjp0LmlkZWFsQWxpZ24sYm9yZGVyQ29sb3I6dC5ib3JkZXJDb2xvcixmb250RmFtaWx5OnQuZm9udEZhbWlseSxmb250U2l6ZTp0LmZvbnRTaXplLGZvbnRDb2xvcjp0LmZvbnRDb2xvcixuYW1lTGVuZ3RoOnQubmFtZUxlbmd0aCx0ZXh0QWxpZ246dC50ZXh0QWxpZ24sdHJhY2U6dC50cmFjZXx8e2luZGV4OjAsaG92ZXJpbmZvOiIifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowLGhvdmVydGVtcGxhdGU6dC5ob3ZlcnRlbXBsYXRlfHwhMSxldmVudERhdGE6dC5ldmVudERhdGF8fCExLGhvdmVydGVtcGxhdGVMYWJlbHM6dC5ob3ZlcnRlbXBsYXRlTGFiZWxzfHwhMX19KSksYT1uLnNlbGVjdChlLmNvbnRhaW5lciksbz1lLm91dGVyQ29udGFpbmVyP24uc2VsZWN0KGUub3V0ZXJDb250YWluZXIpOmEscz17aG92ZXJtb2RlOiJjbG9zZXN0Iixyb3RhdGVMYWJlbHM6ITEsYmdDb2xvcjplLmJnQ29sb3J8fHAuYmFja2dyb3VuZCxjb250YWluZXI6YSxvdXRlckNvbnRhaW5lcjpvfSxsPUwoaSxzLGUuZ2QpLGM9MCx1PTA7bC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnkwLWUueTB9KSkuZWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj10LnkwLXQuYnkvMjt0Lm9mZnNldD1uLTU8Yz9jLW4rNTowLGM9bit0LmJ5K3Qub2Zmc2V0LHI9PT1lLmFuY2hvckluZGV4JiYodT10Lm9mZnNldCl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dC5vZmZzZXQtPXV9KSk7dmFyIGY9ZS5nZC5fZnVsbExheW91dC5faW52U2NhbGVYLGg9ZS5nZC5fZnVsbExheW91dC5faW52U2NhbGVZO3JldHVybiBQKGwscy5yb3RhdGVMYWJlbHMsZixoKSxyP2w6bC5ub2RlKCl9O3ZhciBDPS88ZXh0cmE+KFtcc1xTXSopPFwvZXh0cmE+LztmdW5jdGlvbiBMKHQsZSxyKXt2YXIgaT1yLl9mdWxsTGF5b3V0LGE9ZS5ob3Zlcm1vZGUsYz1lLnJvdGF0ZUxhYmVscyxmPWUuYmdDb2xvcixkPWUuY29udGFpbmVyLGc9ZS5vdXRlckNvbnRhaW5lcixtPWUuY29tbW9uTGFiZWxPcHRzfHx7fSx3PWUuZm9udEZhbWlseXx8eS5IT1ZFUkZPTlQsVD1lLmZvbnRTaXplfHx5LkhPVkVSRk9OVFNJWkUsaz10WzBdLE09ay54YSxDPWsueWEsTD0ieSI9PT1hLmNoYXJBdCgwKT8ieUxhYmVsIjoieExhYmVsIixQPWtbTF0sej0oU3RyaW5nKFApfHwiIikuc3BsaXQoIiAiKVswXSxPPWcubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEQ9Ty50b3AsUj1PLndpZHRoLEY9Ty5oZWlnaHQsQj12b2lkIDAhPT1QJiZrLmRpc3RhbmNlPD1lLmhvdmVyZGlzdGFuY2UmJigieCI9PT1hfHwieSI9PT1hKTtpZihCKXt2YXIgTixqLFU9ITA7Zm9yKE49MDtOPHQubGVuZ3RoO04rKylpZihVJiZ2b2lkIDA9PT10W05dLnpMYWJlbCYmKFU9ITEpLGo9dFtOXS5ob3ZlcmluZm98fHRbTl0udHJhY2UuaG92ZXJpbmZvKXt2YXIgVj1BcnJheS5pc0FycmF5KGopP2o6ai5zcGxpdCgiKyIpO2lmKC0xPT09Vi5pbmRleE9mKCJhbGwiKSYmLTE9PT1WLmluZGV4T2YoYSkpe0I9ITE7YnJlYWt9fVUmJihCPSExKX12YXIgcT1kLnNlbGVjdEFsbCgiZy5heGlzdGV4dCIpLmRhdGEoQj9bMF06W10pO2Z1bmN0aW9uIEgodCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dC56TGFiZWxWYWx8fCh0W0xdfHwiIikuc3BsaXQoIiAiKVswXT09PXp9KSl9aWYocS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXN0ZXh0IiwhMCkscS5leGl0KCkucmVtb3ZlKCkscS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGw9by5lbnN1cmVTaW5nbGUoZSwicGF0aCIsIiIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoeyJzdHJva2Utd2lkdGgiOiIxcHgifSl9KSksYz1vLmVuc3VyZVNpbmdsZShlLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxmPW0uYmdjb2xvcnx8cC5kZWZhdWx0TGluZSxkPW0uYm9yZGVyY29sb3J8fHAuY29udHJhc3QoZiksZz1wLmNvbnRyYXN0KGYpLHY9e2ZhbWlseTptLmZvbnQuZmFtaWx5fHx3LHNpemU6bS5mb250LnNpemV8fFQsY29sb3I6bS5mb250LmNvbG9yfHxnfTtsLnN0eWxlKHtmaWxsOmYsc3Ryb2tlOmR9KSxjLnRleHQoUCkuY2FsbChoLmZvbnQsdikuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMsciksZS5hdHRyKCJ0cmFuc2Zvcm0iLCIiKTt2YXIgeSx4LGI9Yy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIngiPT09YSl7dmFyIF89InRvcCI9PT1NLnNpZGU/Ii0iOiIiO2MuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKHUucG9zaXRpb25UZXh0LDAsInRvcCI9PT1NLnNpZGU/RC1iLmJvdHRvbS1BLVM6RC1iLnRvcCtBK1MpLHk9TS5fb2Zmc2V0KyhrLngwK2sueDEpLzIseD1DLl9vZmZzZXQrKCJ0b3AiPT09TS5zaWRlPzA6Qy5fbGVuZ3RoKTt2YXIgRT1iLndpZHRoLzIrUzt5PEU/KHk9RSxsLmF0dHIoImQiLCJNLSIrKEUtQSkrIiwwTC0iKyhFLTIqQSkrIiwiK18rQSsiSCIrKFMrYi53aWR0aC8yKSsidiIrXysoMipTK2IuaGVpZ2h0KSsiSC0iK0UrIlYiK18rQSsiWiIpKTp5Pmkud2lkdGgtRT8oeT1pLndpZHRoLUUsbC5hdHRyKCJkIiwiTSIrKEUtQSkrIiwwTCIrRSsiLCIrXytBKyJ2IitfKygyKlMrYi5oZWlnaHQpKyJILSIrRSsiViIrXytBKyJIIisoRS0yKkEpKyJaIikpOmwuYXR0cigiZCIsIk0wLDBMIitBKyIsIitfK0ErIkgiKyhTK2Iud2lkdGgvMikrInYiK18rKDIqUytiLmhlaWdodCkrIkgtIisoUytiLndpZHRoLzIpKyJWIitfK0ErIkgtIitBKyJaIil9ZWxzZXt2YXIgTCxJLHo7InJpZ2h0Ij09PUMuc2lkZT8oTD0ic3RhcnQiLEk9MSx6PSIiLHk9TS5fb2Zmc2V0K00uX2xlbmd0aCk6KEw9ImVuZCIsST0tMSx6PSItIix5PU0uX29mZnNldCkseD1DLl9vZmZzZXQrKGsueTAray55MSkvMixjLmF0dHIoInRleHQtYW5jaG9yIixMKSxsLmF0dHIoImQiLCJNMCwwTCIreitBKyIsIitBKyJWIisoUytiLmhlaWdodC8yKSsiaCIreisoMipTK2Iud2lkdGgpKyJWLSIrKFMrYi5oZWlnaHQvMikrIkgiK3orQSsiVi0iK0ErIloiKTt2YXIgTyxSPWIuaGVpZ2h0LzIsRj1ELWIudG9wLVIsQj0iY2xpcCIraS5fdWlkKyJjb21tb25sYWJlbCIrQy5faWQ7aWYoeTxiLndpZHRoKzIqUytBKXtPPSJNLSIrKEErUykrIi0iK1IrImgtIisoYi53aWR0aC1TKSsiViIrUisiaCIrKGIud2lkdGgtUykrIloiO3ZhciBOPWIud2lkdGgteStTO3UucG9zaXRpb25UZXh0KGMsTixGKSwiZW5kIj09PUwmJmMuc2VsZWN0QWxsKCJ0c3BhbiIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT1oLnRlc3Rlci5hcHBlbmQoInRleHQiKS50ZXh0KHQudGV4dCgpKS5jYWxsKGguZm9udCx2KSxyPWUubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO01hdGgucm91bmQoci53aWR0aCk8TWF0aC5yb3VuZChiLndpZHRoKSYmdC5hdHRyKCJ4IixOLXIud2lkdGgpLGUucmVtb3ZlKCl9KSl9ZWxzZSB1LnBvc2l0aW9uVGV4dChjLEkqKFMrQSksRiksTz1udWxsO3ZhciBqPWkuX3RvcGNsaXBzLnNlbGVjdEFsbCgiIyIrQikuZGF0YShPP1swXTpbXSk7ai5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsQikuYXBwZW5kKCJwYXRoIiksai5leGl0KCkucmVtb3ZlKCksai5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixPKSxoLnNldENsaXBVcmwoYyxPP0I6bnVsbCxyKX1lLmF0dHIoInRyYW5zZm9ybSIscyh5LHgpKSx0PUgodCl9KSksdi5pc1VuaWZpZWRIb3ZlcihhKSl7aWYoZC5zZWxlY3RBbGwoImcuaG92ZXJ0ZXh0IikucmVtb3ZlKCksdm9pZCAwIT09UCYmay5kaXN0YW5jZTw9ZS5ob3ZlcmRpc3RhbmNlJiYodD1IKHQpKSwwPT09dC5sZW5ndGgpcmV0dXJuO3ZhciBHPXtzaG93bGVnZW5kOiEwLGxlZ2VuZDp7dGl0bGU6e3RleHQ6UCxmb250OmkuaG92ZXJsYWJlbC5mb250fSxmb250OmkuaG92ZXJsYWJlbC5mb250LGJnY29sb3I6aS5ob3ZlcmxhYmVsLmJnY29sb3IsYm9yZGVyY29sb3I6aS5ob3ZlcmxhYmVsLmJvcmRlcmNvbG9yLGJvcmRlcndpZHRoOjEsdHJhY2Vncm91cGdhcDo3LHRyYWNlb3JkZXI6aS5sZWdlbmQ/aS5sZWdlbmQudHJhY2VvcmRlcjp2b2lkIDAsb3JpZW50YXRpb246InYifX0sWT17fTt4KEcsWSxyLl9mdWxsRGF0YSk7dmFyIFc9WS5sZWdlbmQ7Vy5lbnRyaWVzPVtdO2Zvcih2YXIgWD0wO1g8dC5sZW5ndGg7WCsrKXt2YXIgWj1JKHRbWF0sITAsYSxpLFApLEo9WlswXSxLPVpbMV0sUT10W1hdO1EubmFtZT1LLFEudGV4dD0iIiE9PUs/SysiIDogIitKOko7dmFyICQ9US5jZFtRLmluZGV4XTskJiYoJC5tYyYmKFEubWM9JC5tYyksJC5tY2MmJihRLm1jPSQubWNjKSwkLm1sYyYmKFEubWxjPSQubWxjKSwkLm1sY2MmJihRLm1sYz0kLm1sY2MpLCQubWx3JiYoUS5tbHc9JC5tbHcpLCQubXJjJiYoUS5tcmM9JC5tcmMpLCQuZGlyJiYoUS5kaXI9JC5kaXIpKSxRLl9kaXN0aW5jdD0hMCxXLmVudHJpZXMucHVzaChbUV0pfVcuZW50cmllcy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLnRyYWNlLmluZGV4LWVbMF0udHJhY2UuaW5kZXh9KSksVy5sYXllcj1kLGIocixXKTt2YXIgdHQ9by5tZWFuKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC55MCt0LnkxKS8yfSkpKSxldD1vLm1lYW4odC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0LngwK3QueDEpLzJ9KSkpLHJ0PWQuc2VsZWN0KCJnLmxlZ2VuZCIpLG50PXJ0Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtldCs9TS5fb2Zmc2V0LHR0Kz1DLl9vZmZzZXQtbnQuaGVpZ2h0LzI7dmFyIGl0PW50LndpZHRoKzIqUzshKGV0K2l0PD1SKSYmZXQtaXQ+PTA/ZXQtPWl0OmV0Kz0yKlM7dmFyIGF0PW50LmhlaWdodCsyKlMsb3Q9dHQrYXQ+PUY7cmV0dXJuIGF0PD1GJiYodHQ8PUQ/dHQ9Qy5fb2Zmc2V0KzIqUzpvdCYmKHR0PUYtYXQpKSxydC5hdHRyKCJ0cmFuc2Zvcm0iLHMoZXQsdHQpKSxydH12YXIgc3Q9ZC5zZWxlY3RBbGwoImcuaG92ZXJ0ZXh0IikuZGF0YSh0LChmdW5jdGlvbih0KXtyZXR1cm4gRSh0KX0pKTtyZXR1cm4gc3QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJob3ZlcnRleHQiLCEwKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJyZWN0IikuY2FsbChwLmZpbGwscC5hZGRPcGFjaXR5KGYsLjgpKSx0LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm5hbWUiLCEwKSx0LmFwcGVuZCgicGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLCIxcHgiKSx0LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm51bXMiLCEwKS5jYWxsKGguZm9udCx3LFQpfSkpLHN0LmV4aXQoKS5yZW1vdmUoKSxzdC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLCIiKSxvPXQuY29sb3I7QXJyYXkuaXNBcnJheShvKSYmKG89b1t0LmV2ZW50RGF0YVswXS5wb2ludE51bWJlcl0pO3ZhciBkPXQuYmdjb2xvcnx8byxnPXAuY29tYmluZShwLm9wYWNpdHkoZCk/ZDpwLmRlZmF1bHRMaW5lLGYpLG09cC5jb21iaW5lKHAub3BhY2l0eShvKT9vOnAuZGVmYXVsdExpbmUsZiksdj10LmJvcmRlckNvbG9yfHxwLmNvbnRyYXN0KGcpLHk9SSh0LEIsYSxpLFAsZSkseD15WzBdLGI9eVsxXSxrPWUuc2VsZWN0KCJ0ZXh0Lm51bXMiKS5jYWxsKGguZm9udCx0LmZvbnRGYW1pbHl8fHcsdC5mb250U2l6ZXx8VCx0LmZvbnRDb2xvcnx8dikudGV4dCh4KS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKHUucG9zaXRpb25UZXh0LDAsMCkuY2FsbCh1LmNvbnZlcnRUb1RzcGFucyxyKSxNPWUuc2VsZWN0KCJ0ZXh0Lm5hbWUiKSxFPTAsQz0wO2lmKGImJmIhPT14KXtNLmNhbGwoaC5mb250LHQuZm9udEZhbWlseXx8dyx0LmZvbnRTaXplfHxULG0pLnRleHQoYikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMscik7dmFyIEw9TS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7RT1MLndpZHRoKzIqUyxDPUwuaGVpZ2h0KzIqU31lbHNlIE0ucmVtb3ZlKCksZS5zZWxlY3QoInJlY3QiKS5yZW1vdmUoKTtlLnNlbGVjdCgicGF0aCIpLnN0eWxlKHtmaWxsOmcsc3Ryb2tlOnZ9KTt2YXIgeixPLE49ay5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaj10LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMixVPXQueWEuX29mZnNldCsodC55MCt0LnkxKS8yLFY9TWF0aC5hYnModC54MS10LngwKSxxPU1hdGguYWJzKHQueTEtdC55MCksSD1OLndpZHRoK0ErUytFO2lmKHQudHkwPUQtTi50b3AsdC5ieD1OLndpZHRoKzIqUyx0LmJ5PU1hdGgubWF4KE4uaGVpZ2h0KzIqUyxDKSx0LmFuY2hvcj0ic3RhcnQiLHQudHh3aWR0aD1OLndpZHRoLHQudHgyd2lkdGg9RSx0Lm9mZnNldD0wLGMpdC5wb3M9aix6PVUrcS8yK0g8PUYsTz1VLXEvMi1IPj0wLCJ0b3AiIT09dC5pZGVhbEFsaWduJiZ6fHwhTz96PyhVKz1xLzIsdC5hbmNob3I9InN0YXJ0Iik6dC5hbmNob3I9Im1pZGRsZSI6KFUtPXEvMix0LmFuY2hvcj0iZW5kIik7ZWxzZSBpZih0LnBvcz1VLHo9aitWLzIrSDw9UixPPWotVi8yLUg+PTAsImxlZnQiIT09dC5pZGVhbEFsaWduJiZ6fHwhTylpZih6KWorPVYvMix0LmFuY2hvcj0ic3RhcnQiO2Vsc2V7dC5hbmNob3I9Im1pZGRsZSI7dmFyIEc9SC8yLFk9aitHLVIsVz1qLUc7WT4wJiYoai09WSksVzwwJiYoais9LVcpfWVsc2Ugai09Vi8yLHQuYW5jaG9yPSJlbmQiO2suYXR0cigidGV4dC1hbmNob3IiLHQuYW5jaG9yKSxFJiZNLmF0dHIoInRleHQtYW5jaG9yIix0LmFuY2hvciksZS5hdHRyKCJ0cmFuc2Zvcm0iLHMoaixVKSsoYz9sKF8pOiIiKSl9KSksc3R9ZnVuY3Rpb24gSSh0LGUscixuLGksYSl7dmFyIHM9IiIsbD0iIjt2b2lkIDAhPT10Lm5hbWVPdmVycmlkZSYmKHQubmFtZT10Lm5hbWVPdmVycmlkZSksdC5uYW1lJiYodC50cmFjZS5fbWV0YSYmKHQubmFtZT1vLnRlbXBsYXRlU3RyaW5nKHQubmFtZSx0LnRyYWNlLl9tZXRhKSkscz1SKHQubmFtZSx0Lm5hbWVMZW5ndGgpKSx2b2lkIDAhPT10LnpMYWJlbD8odm9pZCAwIT09dC54TGFiZWwmJihsKz0ieDogIit0LnhMYWJlbCsiPGJyPiIpLHZvaWQgMCE9PXQueUxhYmVsJiYobCs9Ink6ICIrdC55TGFiZWwrIjxicj4iKSwiY2hvcm9wbGV0aCIhPT10LnRyYWNlLnR5cGUmJiJjaG9yb3BsZXRobWFwYm94IiE9PXQudHJhY2UudHlwZSYmKGwrPShsPyJ6OiAiOiIiKSt0LnpMYWJlbCkpOmUmJnRbci5jaGFyQXQoMCkrIkxhYmVsIl09PT1pP2w9dFsoIngiPT09ci5jaGFyQXQoMCk/InkiOiJ4IikrIkxhYmVsIl18fCIiOnZvaWQgMD09PXQueExhYmVsP3ZvaWQgMCE9PXQueUxhYmVsJiYic2NhdHRlcmNhcnBldCIhPT10LnRyYWNlLnR5cGUmJihsPXQueUxhYmVsKTpsPXZvaWQgMD09PXQueUxhYmVsP3QueExhYmVsOiIoIit0LnhMYWJlbCsiLCAiK3QueUxhYmVsKyIpIiwhdC50ZXh0JiYwIT09dC50ZXh0fHxBcnJheS5pc0FycmF5KHQudGV4dCl8fChsKz0obD8iPGJyPiI6IiIpK3QudGV4dCksdm9pZCAwIT09dC5leHRyYVRleHQmJihsKz0obD8iPGJyPiI6IiIpK3QuZXh0cmFUZXh0KSxhJiYiIj09PWwmJiF0LmhvdmVydGVtcGxhdGUmJigiIj09PXMmJmEucmVtb3ZlKCksbD1zKTt2YXIgYz1uLl9kM2xvY2FsZSx1PXQuaG92ZXJ0ZW1wbGF0ZXx8ITEsZj10LmhvdmVydGVtcGxhdGVMYWJlbHN8fHQsaD10LmV2ZW50RGF0YVswXXx8e307cmV0dXJuIHUmJihsPShsPW8uaG92ZXJ0ZW1wbGF0ZVN0cmluZyh1LGYsYyxoLHQudHJhY2UuX21ldGEpKS5yZXBsYWNlKEMsKGZ1bmN0aW9uKGUscil7cmV0dXJuIHM9UihyLHQubmFtZUxlbmd0aCksIiJ9KSkpLFtsLHNdfWZ1bmN0aW9uIFAodCxlLHIsaSl7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdCppfTt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQuZGVsKXJldHVybiByLnJlbW92ZSgpO3ZhciBpPXIuc2VsZWN0KCJ0ZXh0Lm51bXMiKSxzPXQuYW5jaG9yLGw9ImVuZCI9PT1zPy0xOjEsYz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W3NdLGY9YyooQStTKSxwPWYrYyoodC50eHdpZHRoK1MpLGQ9MCxnPXQub2Zmc2V0LG09Im1pZGRsZSI9PT1zO20mJihmLT10LnR4MndpZHRoLzIscCs9dC50eHdpZHRoLzIrUyksZSYmKGcqPS1NLGQ9dC5vZmZzZXQqayksci5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixtPyJNLSIrYSh0LmJ4LzIrdC50eDJ3aWR0aC8yKSsiLCIrbyhnLXQuYnkvMikrImgiK2EodC5ieCkrInYiK28odC5ieSkrImgtIithKHQuYngpKyJaIjoiTTAsMEwiK2EobCpBK2QpKyIsIitvKEErZykrInYiK28odC5ieS8yLUEpKyJoIithKGwqdC5ieCkrInYtIitvKHQuYnkpKyJIIithKGwqQStkKSsiViIrbyhnLUEpKyJaIik7dmFyIHY9ZCtmLHk9Zyt0LnR5MC10LmJ5LzIrUyx4PXQudGV4dEFsaWdufHwiYXV0byI7ImF1dG8iIT09eCYmKCJsZWZ0Ij09PXgmJiJzdGFydCIhPT1zPyhpLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKSx2PW0/LXQuYngvMi10LnR4MndpZHRoLzIrUzotdC5ieC1TKToicmlnaHQiPT09eCYmImVuZCIhPT1zJiYoaS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLHY9bT90LmJ4LzItdC50eDJ3aWR0aC8yLVM6dC5ieCtTKSksaS5jYWxsKHUucG9zaXRpb25UZXh0LGEodiksbyh5KSksdC50eDJ3aWR0aCYmKHIuc2VsZWN0KCJ0ZXh0Lm5hbWUiKS5jYWxsKHUucG9zaXRpb25UZXh0LGEocCtjKlMrZCksbyhnK3QudHkwLXQuYnkvMitTKSksci5zZWxlY3QoInJlY3QiKS5jYWxsKGguc2V0UmVjdCxhKHArKGMtMSkqdC50eDJ3aWR0aC8yK2QpLG8oZy10LmJ5LzItMSksYSh0LnR4MndpZHRoKSxvKHQuYnkrMikpKX0pKX1mdW5jdGlvbiB6KHQsZSl7dmFyIHI9dC5pbmRleCxuPXQudHJhY2V8fHt9LGE9dC5jZFswXSxzPXQuY2Rbcl18fHt9O2Z1bmN0aW9uIGwodCl7cmV0dXJuIHR8fGkodCkmJjA9PT10fXZhciBjPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCxlKXt2YXIgaT1vLmNhc3RPcHRpb24oYSxyLHQpO3JldHVybiBsKGkpP2k6by5leHRyYWN0T3B0aW9uKHt9LG4sIiIsZSl9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uZXh0cmFjdE9wdGlvbihzLG4sdCxlKX07ZnVuY3Rpb24gdShlLHIsbil7dmFyIGk9YyhyLG4pO2woaSkmJih0W2VdPWkpfWlmKHUoImhvdmVyaW5mbyIsImhpIiwiaG92ZXJpbmZvIiksdSgiYmdjb2xvciIsImhiZyIsImhvdmVybGFiZWwuYmdjb2xvciIpLHUoImJvcmRlckNvbG9yIiwiaGJjIiwiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLHUoImZvbnRGYW1pbHkiLCJodGYiLCJob3ZlcmxhYmVsLmZvbnQuZmFtaWx5IiksdSgiZm9udFNpemUiLCJodHMiLCJob3ZlcmxhYmVsLmZvbnQuc2l6ZSIpLHUoImZvbnRDb2xvciIsImh0YyIsImhvdmVybGFiZWwuZm9udC5jb2xvciIpLHUoIm5hbWVMZW5ndGgiLCJobmwiLCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiKSx1KCJ0ZXh0QWxpZ24iLCJodGEiLCJob3ZlcmxhYmVsLmFsaWduIiksdC5wb3NyZWY9InkiPT09ZXx8ImNsb3Nlc3QiPT09ZSYmImgiPT09bi5vcmllbnRhdGlvbj90LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMjp0LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMix0LngwPW8uY29uc3RyYWluKHQueDAsMCx0LnhhLl9sZW5ndGgpLHQueDE9by5jb25zdHJhaW4odC54MSwwLHQueGEuX2xlbmd0aCksdC55MD1vLmNvbnN0cmFpbih0LnkwLDAsdC55YS5fbGVuZ3RoKSx0LnkxPW8uY29uc3RyYWluKHQueTEsMCx0LnlhLl9sZW5ndGgpLHZvaWQgMCE9PXQueExhYmVsVmFsJiYodC54TGFiZWw9InhMYWJlbCJpbiB0P3QueExhYmVsOmcuaG92ZXJMYWJlbFRleHQodC54YSx0LnhMYWJlbFZhbCksdC54VmFsPXQueGEuYzJkKHQueExhYmVsVmFsKSksdm9pZCAwIT09dC55TGFiZWxWYWwmJih0LnlMYWJlbD0ieUxhYmVsImluIHQ/dC55TGFiZWw6Zy5ob3ZlckxhYmVsVGV4dCh0LnlhLHQueUxhYmVsVmFsKSx0LnlWYWw9dC55YS5jMmQodC55TGFiZWxWYWwpKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmdm9pZCAwPT09dC56TGFiZWwmJih0LnpMYWJlbD1TdHJpbmcodC56TGFiZWxWYWwpKSwhKGlzTmFOKHQueGVycil8fCJsb2ciPT09dC54YS50eXBlJiZ0LnhlcnI8PTApKXt2YXIgZj1nLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueGVycm5lZz90LnhMYWJlbCs9IiArIitmKyIgLyAtIitnLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueExhYmVsKz0iIFx4YjEgIitmLCJ4Ij09PWUmJih0LmRpc3RhbmNlKz0xKX1pZighKGlzTmFOKHQueWVycil8fCJsb2ciPT09dC55YS50eXBlJiZ0LnllcnI8PTApKXt2YXIgaD1nLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueWVycm5lZz90LnlMYWJlbCs9IiArIitoKyIgLyAtIitnLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueUxhYmVsKz0iIFx4YjEgIitoLCJ5Ij09PWUmJih0LmRpc3RhbmNlKz0xKX12YXIgcD10LmhvdmVyaW5mb3x8dC50cmFjZS5ob3ZlcmluZm87cmV0dXJuIHAmJiJhbGwiIT09cCYmKC0xPT09KHA9QXJyYXkuaXNBcnJheShwKT9wOnAuc3BsaXQoIisiKSkuaW5kZXhPZigieCIpJiYodC54TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigieSIpJiYodC55TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigieiIpJiYodC56TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigidGV4dCIpJiYodC50ZXh0PXZvaWQgMCksLTE9PT1wLmluZGV4T2YoIm5hbWUiKSYmKHQubmFtZT12b2lkIDApKSx0fWZ1bmN0aW9uIE8odCxlLHIpe3ZhciBuLGksbz1yLmNvbnRhaW5lcixzPXIuZnVsbExheW91dCxsPXMuX3NpemUsYz1yLmV2ZW50LHU9ISFlLmhMaW5lUG9pbnQsZj0hIWUudkxpbmVQb2ludDtpZihvLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpLGZ8fHUpe3ZhciBkPXAuY29tYmluZShzLnBsb3RfYmdjb2xvcixzLnBhcGVyX2JnY29sb3IpO2lmKHUpe3ZhciBtLHYseT1lLmhMaW5lUG9pbnQ7bj15JiZ5LnhhLCJjdXJzb3IiPT09KGk9eSYmeS55YSkuc3Bpa2VzbmFwPyhtPWMucG9pbnRlclgsdj1jLnBvaW50ZXJZKToobT1uLl9vZmZzZXQreS54LHY9aS5fb2Zmc2V0K3kueSk7dmFyIHgsYixfPWEucmVhZGFiaWxpdHkoeS5jb2xvcixkKTwxLjU/cC5jb250cmFzdChkKTp5LmNvbG9yLHc9aS5zcGlrZW1vZGUsVD1pLnNwaWtldGhpY2tuZXNzLGs9aS5zcGlrZWNvbG9yfHxfLE09Zy5nZXRQeFBvc2l0aW9uKHQsaSk7aWYoLTEhPT13LmluZGV4T2YoInRvYXhpcyIpfHwtMSE9PXcuaW5kZXhPZigiYWNyb3NzIikpe2lmKC0xIT09dy5pbmRleE9mKCJ0b2F4aXMiKSYmKHg9TSxiPW0pLC0xIT09dy5pbmRleE9mKCJhY3Jvc3MiKSl7dmFyIEE9aS5fY291bnRlckRvbWFpbk1pbixTPWkuX2NvdW50ZXJEb21haW5NYXg7ImZyZWUiPT09aS5hbmNob3ImJihBPU1hdGgubWluKEEsaS5wb3NpdGlvbiksUz1NYXRoLm1heChTLGkucG9zaXRpb24pKSx4PWwubCtBKmwudyxiPWwubCtTKmwud31vLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOngseDI6Yix5MTp2LHkyOnYsInN0cm9rZS13aWR0aCI6VCxzdHJva2U6aywic3Ryb2tlLWRhc2hhcnJheSI6aC5kYXNoU3R5bGUoaS5zcGlrZWRhc2gsVCl9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApLG8uaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6eCx4MjpiLHkxOnYseTI6diwic3Ryb2tlLXdpZHRoIjpUKzIsc3Ryb2tlOmR9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApfS0xIT09dy5pbmRleE9mKCJtYXJrZXIiKSYmby5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe2N4Ok0rKCJyaWdodCIhPT1pLnNpZGU/VDotVCksY3k6dixyOlQsZmlsbDprfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCl9aWYoZil7dmFyIEUsQyxMPWUudkxpbmVQb2ludDtuPUwmJkwueGEsaT1MJiZMLnlhLCJjdXJzb3IiPT09bi5zcGlrZXNuYXA/KEU9Yy5wb2ludGVyWCxDPWMucG9pbnRlclkpOihFPW4uX29mZnNldCtMLngsQz1pLl9vZmZzZXQrTC55KTt2YXIgSSxQLHo9YS5yZWFkYWJpbGl0eShMLmNvbG9yLGQpPDEuNT9wLmNvbnRyYXN0KGQpOkwuY29sb3IsTz1uLnNwaWtlbW9kZSxEPW4uc3Bpa2V0aGlja25lc3MsUj1uLnNwaWtlY29sb3J8fHosRj1nLmdldFB4UG9zaXRpb24odCxuKTtpZigtMSE9PU8uaW5kZXhPZigidG9heGlzIil8fC0xIT09Ty5pbmRleE9mKCJhY3Jvc3MiKSl7aWYoLTEhPT1PLmluZGV4T2YoInRvYXhpcyIpJiYoST1GLFA9QyksLTEhPT1PLmluZGV4T2YoImFjcm9zcyIpKXt2YXIgQj1uLl9jb3VudGVyRG9tYWluTWluLE49bi5fY291bnRlckRvbWFpbk1heDsiZnJlZSI9PT1uLmFuY2hvciYmKEI9TWF0aC5taW4oQixuLnBvc2l0aW9uKSxOPU1hdGgubWF4KE4sbi5wb3NpdGlvbikpLEk9bC50KygxLU4pKmwuaCxQPWwudCsoMS1CKSpsLmh9by5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTpFLHgyOkUseTE6SSx5MjpQLCJzdHJva2Utd2lkdGgiOkQsc3Ryb2tlOlIsInN0cm9rZS1kYXNoYXJyYXkiOmguZGFzaFN0eWxlKG4uc3Bpa2VkYXNoLEQpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxvLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOkUseDI6RSx5MTpJLHkyOlAsInN0cm9rZS13aWR0aCI6RCsyLHN0cm9rZTpkfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKX0tMSE9PU8uaW5kZXhPZigibWFya2VyIikmJm8uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHtjeDpFLGN5OkYtKCJ0b3AiIT09bi5zaWRlP0Q6LUQpLHI6RCxmaWxsOlJ9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX19fWZ1bmN0aW9uIEQodCxlKXtyZXR1cm4hZXx8KGUudkxpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLnZMaW5lUG9pbnR8fGUuaExpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLmhMaW5lUG9pbnQpfWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4gdS5wbGFpblRleHQodHx8IiIse2xlbjplLGFsbG93ZWRUYWdzOlsiYnIiLCJzdWIiLCJzdXAiLCJiIiwiaSIsImVtIl19KX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9ldmVudHMiOjc2NywiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciI6Nzg5LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi4vY29sb3IiOjY0MywiLi4vZHJhZ2VsZW1lbnQiOjY2MiwiLi4vZHJhd2luZyI6NjY1LCIuLi9sZWdlbmQvZGVmYXVsdHMiOjY5NSwiLi4vbGVnZW5kL2RyYXciOjY5NiwiLi9jb25zdGFudHMiOjY3NywiLi9oZWxwZXJzIjo2NzksZDM6MTY5LCJmYXN0LWlzbnVtZXJpYyI6MjQxLHRpbnljb2xvcjI6NTc2fV0sNjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4vaGVscGVycyIpLmlzVW5pZmllZEhvdmVyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHQpe28uZm9udFt0XXx8KG8uZm9udFt0XT1lLmxlZ2VuZD9lLmxlZ2VuZC5mb250W3RdOmUuZm9udFt0XSl9bz1vfHx7fSxlJiZhKGUuaG92ZXJtb2RlKSYmKG8uZm9udHx8KG8uZm9udD17fSkscygic2l6ZSIpLHMoImZhbWlseSIpLHMoImNvbG9yIiksZS5sZWdlbmQ/KG8uYmdjb2xvcnx8KG8uYmdjb2xvcj1pLmNvbWJpbmUoZS5sZWdlbmQuYmdjb2xvcixlLnBhcGVyX2JnY29sb3IpKSxvLmJvcmRlcmNvbG9yfHwoby5ib3JkZXJjb2xvcj1lLmxlZ2VuZC5ib3JkZXJjb2xvcikpOm8uYmdjb2xvcnx8KG8uYmdjb2xvcj1lLnBhcGVyX2JnY29sb3IpKSxyKCJob3ZlcmxhYmVsLmJnY29sb3IiLG8uYmdjb2xvcikscigiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIsby5ib3JkZXJjb2xvcikscigiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoIixvLm5hbWVsZW5ndGgpLG4uY29lcmNlRm9udChyLCJob3ZlcmxhYmVsLmZvbnQiLG8uZm9udCkscigiaG92ZXJsYWJlbC5hbGlnbiIsby5hbGlnbil9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9jb2xvciI6NjQzLCIuL2hlbHBlcnMiOjY3OX1dLDY4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEocixhKXtyZXR1cm4gdm9pZCAwIT09ZVtyXT9lW3JdOm4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIG8scz1hKCJjbGlja21vZGUiKTtyZXR1cm4gZS5faGFzKCJjYXJ0ZXNpYW4iKT9zLmluZGV4T2YoInNlbGVjdCIpPi0xP289ImNsb3Nlc3QiOihlLl9pc0hvcml6PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX3NjYXR0ZXJTdGFja09wdHN8fHt9LG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWkueGF4aXMraS55YXhpcyxvPShyW2FdfHx7fSlbaS5zdGFja2dyb3VwXXx8e307aWYoImgiIT09aS5vcmllbnRhdGlvbiYmImgiIT09by5vcmllbnRhdGlvbilyZXR1cm4hMX1yZXR1cm4hMH0ocixlKSxvPWUuX2lzSG9yaXo/InkiOiJ4Iik6bz0iY2xvc2VzdCIsYSgiaG92ZXJtb2RlIixvKX19LHsiLi4vLi4vbGliIjo3NzgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY4NH1dLDY4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9kcmFnZWxlbWVudCIpLG89dCgiLi9oZWxwZXJzIikscz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL2hvdmVyIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImZ4Iixjb25zdGFudHM6dCgiLi9jb25zdGFudHMiKSxzY2hlbWE6e2xheW91dDpzfSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6cyxzdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0czp0KCIuL2xheW91dF9nbG9iYWxfZGVmYXVsdHMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGdldERpc3RhbmNlRnVuY3Rpb246by5nZXREaXN0YW5jZUZ1bmN0aW9uLGdldENsb3Nlc3Q6by5nZXRDbG9zZXN0LGluYm94Om8uaW5ib3gscXVhZHJhdHVyZTpvLnF1YWRyYXR1cmUsYXBwZW5kQXJyYXlQb2ludFZhbHVlOm8uYXBwZW5kQXJyYXlQb2ludFZhbHVlLGNhc3RIb3Zlck9wdGlvbjpmdW5jdGlvbih0LGUscil7cmV0dXJuIGkuY2FzdE9wdGlvbih0LGUsImhvdmVybGFiZWwuIityKX0sY2FzdEhvdmVyaW5mbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIGkuY2FzdE9wdGlvbih0LHIsImhvdmVyaW5mbyIsKGZ1bmN0aW9uKHIpe3JldHVybiBpLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOnJ9LHtfbW9kdWxlOnQuX21vZHVsZX0sZSl9KSl9LGhvdmVyOmwuaG92ZXIsdW5ob3ZlcjphLnVuaG92ZXIsbG9uZUhvdmVyOmwubG9uZUhvdmVyLGxvbmVVbmhvdmVyOmZ1bmN0aW9uKHQpe3ZhciBlPWkuaXNEM1NlbGVjdGlvbih0KT90Om4uc2VsZWN0KHQpO2Uuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLnJlbW92ZSgpLGUuc2VsZWN0QWxsKCIuc3Bpa2VsaW5lIikucmVtb3ZlKCl9LGNsaWNrOnQoIi4vY2xpY2siKX19LHsiLi4vLi4vbGliIjo3NzgsIi4uL2RyYWdlbGVtZW50Ijo2NjIsIi4vYXR0cmlidXRlcyI6Njc0LCIuL2NhbGMiOjY3NSwiLi9jbGljayI6Njc2LCIuL2NvbnN0YW50cyI6Njc3LCIuL2RlZmF1bHRzIjo2NzgsIi4vaGVscGVycyI6Njc5LCIuL2hvdmVyIjo2ODAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY4NCwiLi9sYXlvdXRfZGVmYXVsdHMiOjY4NSwiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIjo2ODYsZDM6MTY5fV0sNjg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSh7ZWRpdFR5cGU6Im5vbmUifSk7aS5mYW1pbHkuZGZsdD1uLkhPVkVSRk9OVCxpLnNpemUuZGZsdD1uLkhPVkVSRk9OVFNJWkUsZS5leHBvcnRzPXtjbGlja21vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImV2ZW50Iiwic2VsZWN0Il0sZGZsdDoiZXZlbnQiLGVkaXRUeXBlOiJwbG90IixleHRyYXM6WyJub25lIl19LGRyYWdtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ6b29tIiwicGFuIiwic2VsZWN0IiwibGFzc28iLCJkcmF3Y2xvc2VkcGF0aCIsImRyYXdvcGVucGF0aCIsImRyYXdsaW5lIiwiZHJhd3JlY3QiLCJkcmF3Y2lyY2xlIiwib3JiaXQiLCJ0dXJudGFibGUiLCExXSxkZmx0OiJ6b29tIixlZGl0VHlwZToibW9kZWJhciJ9LGhvdmVybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsieCIsInkiLCJjbG9zZXN0IiwhMSwieCB1bmlmaWVkIiwieSB1bmlmaWVkIl0sZWRpdFR5cGU6Im1vZGViYXIifSxob3ZlcmRpc3RhbmNlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoyMCxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGlzdGFuY2U6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjIwLGVkaXRUeXBlOiJub25lIn0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJub25lIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibm9uZSJ9LGZvbnQ6aSxhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsInJpZ2h0IiwiYXV0byJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJub25lIn0sbmFtZWxlbmd0aDp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MTUsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToibm9uZSJ9LHNlbGVjdGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaCIsInYiLCJkIiwiYW55Il0sZGZsdDoiYW55IixlZGl0VHlwZToibm9uZSJ9fX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi9jb25zdGFudHMiOjY3N31dLDY4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vaGVscGVycyIpLmlzVW5pZmllZEhvdmVyLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi9ob3Zlcm1vZGVfZGVmYXVsdHMiKSxzPXQoIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBjPW8odCxlLHIpO2MmJihsKCJob3ZlcmRpc3RhbmNlIiksbCgic3Bpa2VkaXN0YW5jZSIsaShjKT8tMTp2b2lkIDApKSwic2VsZWN0Ij09PWwoImRyYWdtb2RlIikmJmwoInNlbGVjdGRpcmVjdGlvbiIpO3ZhciB1PWUuX2hhcygibWFwYm94IiksZj1lLl9oYXMoImdlbyIpLGg9ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aDsiem9vbSI9PT1lLmRyYWdtb2RlJiYoKHV8fGYpJiYxPT09aHx8dSYmZiYmMj09PWgpJiYoZS5kcmFnbW9kZT0icGFuIikscyh0LGUsbCl9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuL2hlbHBlcnMiOjY3OSwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2ODEsIi4vaG92ZXJtb2RlX2RlZmF1bHRzIjo2ODIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY4NH1dLDY4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLChmdW5jdGlvbihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfSkpfX0seyIuLi8uLi9saWIiOjc3OCwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2ODEsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY4NH1dLDY4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2xpYi9yZWdleCIpLmNvdW50ZXIsYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLmlkUmVnZXgscz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbD17cm93czp7dmFsVHlwZToiaW50ZWdlciIsbWluOjEsZWRpdFR5cGU6InBsb3QifSxyb3dvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIHRvIGJvdHRvbSIsImJvdHRvbSB0byB0b3AiXSxkZmx0OiJ0b3AgdG8gYm90dG9tIixlZGl0VHlwZToicGxvdCJ9LGNvbHVtbnM6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjoxLGVkaXRUeXBlOiJwbG90In0sc3VicGxvdHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZGltZW5zaW9uczoyLGl0ZW1zOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W2koInh5IikudG9TdHJpbmcoKSwiIl0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHhheGVzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W28ueC50b1N0cmluZygpLCIiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0seWF4ZXM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbby55LnRvU3RyaW5nKCksIiJdLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxwYXR0ZXJuOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmRlcGVuZGVudCIsImNvdXBsZWQiXSxkZmx0OiJjb3VwbGVkIixlZGl0VHlwZToicGxvdCJ9LHhnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx5Z2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmEoe25hbWU6ImdyaWQiLGVkaXRUeXBlOiJwbG90Iixub0dyaWRDZWxsOiEwfSx7fSkseHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJvdHRvbSIsImJvdHRvbSBwbG90IiwidG9wIHBsb3QiLCJ0b3AiXSxkZmx0OiJib3R0b20gcGxvdCIsZWRpdFR5cGU6InBsb3QifSx5c2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImxlZnQgcGxvdCIsInJpZ2h0IHBsb3QiLCJyaWdodCJdLGRmbHQ6ImxlZnQgcGxvdCIsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9O2Z1bmN0aW9uIGModCxlLHIpe3ZhciBuPWVbcisiYXhlcyJdLGk9T2JqZWN0LmtleXMoKHQuX3NwbG9tQXhlc3x8e30pW3JdfHx7fSk7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bjppLmxlbmd0aD9pOnZvaWQgMH1mdW5jdGlvbiB1KHQsZSxyLG4saSxhKXt2YXIgbz1lKHQrImdhcCIscikscz1lKCJkb21haW4uIit0KTtlKHQrInNpZGUiLG4pO2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1zWzBdLHU9KHNbMV0tYykvKGktbyksZj11KigxLW8pLGg9MDtoPGk7aCsrKXt2YXIgcD1jK3UqaDtsW2E/aS0xLWg6aF09W3AscCtmXX1yZXR1cm4gbH1mdW5jdGlvbiBmKHQsZSxyLG4saSl7dmFyIGEsbz1uZXcgQXJyYXkocik7ZnVuY3Rpb24gcyh0LHIpey0xIT09ZS5pbmRleE9mKHIpJiZ2b2lkIDA9PT1uW3JdPyhvW3RdPXIsbltyXT10KTpvW3RdPSIifWlmKEFycmF5LmlzQXJyYXkodCkpZm9yKGE9MDthPHI7YSsrKXMoYSx0W2FdKTtlbHNlIGZvcihzKDAsaSksYT0xO2E8cjthKyspcyhhLGkrKGErMSkpO3JldHVybiBvfWUuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJncmlkIixzY2hlbWE6e2xheW91dDp7Z3JpZDpsfX0sbGF5b3V0QXR0cmlidXRlczpsLHNpemVEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByPXQuZ3JpZHx8e30saT1jKGUsciwieCIpLGE9YyhlLHIsInkiKTtpZih0LmdyaWR8fGl8fGEpe3ZhciBvLGYsaD1BcnJheS5pc0FycmF5KHIuc3VicGxvdHMpJiZBcnJheS5pc0FycmF5KHIuc3VicGxvdHNbMF0pLHA9QXJyYXkuaXNBcnJheShpKSxkPUFycmF5LmlzQXJyYXkoYSksZz1wJiZpIT09ci54YXhlcyYmZCYmYSE9PXIueWF4ZXM7aD8obz1yLnN1YnBsb3RzLmxlbmd0aCxmPXIuc3VicGxvdHNbMF0ubGVuZ3RoKTooZCYmKG89YS5sZW5ndGgpLHAmJihmPWkubGVuZ3RoKSk7dmFyIG09cy5uZXdDb250YWluZXIoZSwiZ3JpZCIpLHY9aygicm93cyIsbykseT1rKCJjb2x1bW5zIixmKTtpZih2Knk+MSl7aWYoIWgmJiFwJiYhZCkiaW5kZXBlbmRlbnQiPT09aygicGF0dGVybiIpJiYoaD0hMCk7bS5faGFzU3VicGxvdEdyaWQ9aDt2YXIgeCxiLF89InRvcCB0byBib3R0b20iPT09aygicm93b3JkZXIiKSx3PWg/LjI6LjEsVD1oPy4zOi4xO2cmJmUuX3NwbG9tR3JpZERmbHQmJih4PWUuX3NwbG9tR3JpZERmbHQueHNpZGUsYj1lLl9zcGxvbUdyaWREZmx0LnlzaWRlKSxtLl9kb21haW5zPXt4OnUoIngiLGssdyx4LHkpLHk6dSgieSIsayxULGIsdixfKX19ZWxzZSBkZWxldGUgZS5ncmlkfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4gbi5jb2VyY2UocixtLGwsdCxlKX19LGNvbnRlbnREZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByPWUuZ3JpZDtpZihyJiZyLl9kb21haW5zKXt2YXIgbixpLGEsbyxzLGwsdSxoPXQuZ3JpZHx8e30scD1lLl9zdWJwbG90cyxkPXIuX2hhc1N1YnBsb3RHcmlkLGc9ci5yb3dzLG09ci5jb2x1bW5zLHY9ImluZGVwZW5kZW50Ij09PXIucGF0dGVybix5PXIuX2F4aXNNYXA9e307aWYoZCl7dmFyIHg9aC5zdWJwbG90c3x8W107bD1yLnN1YnBsb3RzPW5ldyBBcnJheShnKTt2YXIgYj0xO2ZvcihuPTA7bjxnO24rKyl7dmFyIF89bFtuXT1uZXcgQXJyYXkobSksdz14W25dfHxbXTtmb3IoaT0wO2k8bTtpKyspaWYodj8ocz0xPT09Yj8ieHkiOiJ4IitiKyJ5IitiLGIrKyk6cz13W2ldLF9baV09IiIsLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKHMpKXtpZih1PXMuaW5kZXhPZigieSIpLGE9cy5zbGljZSgwLHUpLG89cy5zbGljZSh1KSx2b2lkIDAhPT15W2FdJiZ5W2FdIT09aXx8dm9pZCAwIT09eVtvXSYmeVtvXSE9PW4pY29udGludWU7X1tpXT1zLHlbYV09aSx5W29dPW59fX1lbHNle3ZhciBUPWMoZSxoLCJ4Iiksaz1jKGUsaCwieSIpO3IueGF4ZXM9ZihULHAueGF4aXMsbSx5LCJ4Iiksci55YXhlcz1mKGsscC55YXhpcyxnLHksInkiKX12YXIgTT1yLl9hbmNob3JzPXt9LEE9InRvcCB0byBib3R0b20iPT09ci5yb3dvcmRlcjtmb3IodmFyIFMgaW4geSl7dmFyIEUsQyxMLEk9Uy5jaGFyQXQoMCksUD1yW0krInNpZGUiXTtpZihQLmxlbmd0aDw4KU1bU109ImZyZWUiO2Vsc2UgaWYoIngiPT09SSl7aWYoInQiPT09UC5jaGFyQXQoMCk9PT1BPyhFPTAsQz0xLEw9Zyk6KEU9Zy0xLEM9LTEsTD0tMSksZCl7dmFyIHo9eVtTXTtmb3Iobj1FO24hPT1MO24rPUMpaWYoKHM9bFtuXVt6XSkmJih1PXMuaW5kZXhPZigieSIpLHMuc2xpY2UoMCx1KT09PVMpKXtNW1NdPXMuc2xpY2UodSk7YnJlYWt9fWVsc2UgZm9yKG49RTtuIT09TDtuKz1DKWlmKG89ci55YXhlc1tuXSwtMSE9PXAuY2FydGVzaWFuLmluZGV4T2YoUytvKSl7TVtTXT1vO2JyZWFrfX1lbHNlIGlmKCJsIj09PVAuY2hhckF0KDApPyhFPTAsQz0xLEw9bSk6KEU9bS0xLEM9LTEsTD0tMSksZCl7dmFyIE89eVtTXTtmb3Iobj1FO24hPT1MO24rPUMpaWYoKHM9bFtPXVtuXSkmJih1PXMuaW5kZXhPZigieSIpLHMuc2xpY2UodSk9PT1TKSl7TVtTXT1zLnNsaWNlKDAsdSk7YnJlYWt9fWVsc2UgZm9yKG49RTtuIT09TDtuKz1DKWlmKGE9ci54YXhlc1tuXSwtMSE9PXAuY2FydGVzaWFuLmluZGV4T2YoYStTKSl7TVtTXT1hO2JyZWFrfX19fX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9yZWdleCI6Nzk1LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjgzNCwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTV9XSw2ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O3QoIi4uLy4uL2NvbnN0YW50cy9heGlzX3BsYWNlYWJsZV9vYmplY3RzIik7ZS5leHBvcnRzPWkoImltYWdlIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc291cmNlOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJhcnJheWRyYXcifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmVsb3ciLCJhYm92ZSJdLGRmbHQ6ImFib3ZlIixlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6ZXg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXpleTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmlsbCIsImNvbnRhaW4iLCJzdHJldGNoIl0sZGZsdDoiY29udGFpbiIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4Ont2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0seTp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJ0b3AiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsbi5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZGZsdDoicGFwZXIiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsbi5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZGZsdDoicGFwZXIiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0VHlwZToiYXJyYXlkcmF3In0pfSx7Ii4uLy4uL2NvbnN0YW50cy9heGlzX3BsYWNlYWJsZV9vYmplY3RzIjo3NDYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6ODM0fV0sNjg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIvdG9fbG9nX3JhbmdlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2U9ZXx8e307dmFyIG89ImxvZyI9PT1yJiYibGluZWFyIj09PWUudHlwZSxzPSJsaW5lYXIiPT09ciYmImxvZyI9PT1lLnR5cGU7aWYob3x8cylmb3IodmFyIGwsYyx1PXQuX2Z1bGxMYXlvdXQuaW1hZ2VzLGY9ZS5faWQuY2hhckF0KDApLGg9MDtoPHUubGVuZ3RoO2grKylpZihjPSJpbWFnZXNbIitoKyJdLiIsKGw9dVtoXSlbZisicmVmIl09PT1lLl9pZCl7dmFyIHA9bFtmXSxkPWxbInNpemUiK2ZdLGc9bnVsbCxtPW51bGw7aWYobyl7Zz1pKHAsZS5yYW5nZSk7dmFyIHY9ZC9NYXRoLnBvdygxMCxnKS8yO209MipNYXRoLmxvZyh2K01hdGguc3FydCgxK3YqdikpL01hdGguTE4xMH1lbHNlIG09KGc9TWF0aC5wb3coMTAscCkpKihNYXRoLnBvdygxMCxkLzIpLU1hdGgucG93KDEwLC1kLzIpKTtuKGcpP24obSl8fChtPW51bGwpOihnPW51bGwsbT1udWxsKSxhKGMrZixnKSxhKGMrInNpemUiK2YsbSl9fX0seyIuLi8uLi9saWIvdG9fbG9nX3JhbmdlIjo4MDUsImZhc3QtaXNudW1lcmljIjoyNDF9XSw2OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9dmFyIHM9YSgic291cmNlIik7aWYoIWEoInZpc2libGUiLCEhcykpcmV0dXJuIGU7YSgibGF5ZXIiKSxhKCJ4YW5jaG9yIiksYSgieWFuY2hvciIpLGEoInNpemV4IiksYSgic2l6ZXkiKSxhKCJzaXppbmciKSxhKCJvcGFjaXR5Iik7Zm9yKHZhciBsPXtfZnVsbExheW91dDpyfSxjPVsieCIsInkiXSx1PTA7dTwyO3UrKyl7dmFyIGY9Y1t1XSxoPWkuY29lcmNlUmVmKHQsZSxsLGYsInBhcGVyIix2b2lkIDApO2lmKCJwYXBlciIhPT1oKWkuZ2V0RnJvbUlkKGwsaCkuX2ltZ0luZGljZXMucHVzaChlLl9pbmRleCk7aS5jb2VyY2VQb3NpdGlvbihlLGwsYSxoLGYsMCl9cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6ImltYWdlcyIsaGFuZGxlSXRlbURlZmF1bHRzOnN9KX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuL2F0dHJpYnV0ZXMiOjY4OH1dLDY5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vZHJhd2luZyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixsPXQuX2Z1bGxMYXlvdXQsYz1bXSx1PXt9LGY9W107Zm9yKHI9MDtyPGwuaW1hZ2VzLmxlbmd0aDtyKyspe3ZhciBoPWwuaW1hZ2VzW3JdO2lmKGgudmlzaWJsZSlpZigiYmVsb3ciPT09aC5sYXllciYmInBhcGVyIiE9PWgueHJlZiYmInBhcGVyIiE9PWgueXJlZil7ZT1vLnJlZjJpZChoLnhyZWYpK28ucmVmMmlkKGgueXJlZik7dmFyIHA9bC5fcGxvdHNbZV07aWYoIXApe2YucHVzaChoKTtjb250aW51ZX1wLm1haW5wbG90JiYoZT1wLm1haW5wbG90LmlkKSx1W2VdfHwodVtlXT1bXSksdVtlXS5wdXNoKGgpfWVsc2UiYWJvdmUiPT09aC5sYXllcj9jLnB1c2goaCk6Zi5wdXNoKGgpfXZhciBkPXtsZWZ0OntzaXppbmc6InhNaW4iLG9mZnNldDowfSxjZW50ZXI6e3NpemluZzoieE1pZCIsb2Zmc2V0Oi0uNX0scmlnaHQ6e3NpemluZzoieE1heCIsb2Zmc2V0Oi0xfX0sZz17dG9wOntzaXppbmc6IllNaW4iLG9mZnNldDowfSxtaWRkbGU6e3NpemluZzoiWU1pZCIsb2Zmc2V0Oi0uNX0sYm90dG9tOntzaXppbmc6IllNYXgiLG9mZnNldDotMX19O2Z1bmN0aW9uIG0oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYodGhpcy5faW1nU3JjIT09ZS5zb3VyY2UpaWYoci5hdHRyKCJ4bWxucyIscy5zdmcpLGUuc291cmNlJiYiZGF0YToiPT09ZS5zb3VyY2Uuc2xpY2UoMCw1KSlyLmF0dHIoInhsaW5rOmhyZWYiLGUuc291cmNlKSx0aGlzLl9pbWdTcmM9ZS5zb3VyY2U7ZWxzZXt2YXIgaT1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXt2YXIgbj1uZXcgSW1hZ2U7ZnVuY3Rpb24gaSgpe3IucmVtb3ZlKCksdCgpfXRoaXMuaW1nPW4sbi5zZXRBdHRyaWJ1dGUoImNyb3NzT3JpZ2luIiwiYW5vbnltb3VzIiksbi5vbmVycm9yPWksbi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtlLndpZHRoPXRoaXMud2lkdGgsZS5oZWlnaHQ9dGhpcy5oZWlnaHQsZS5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZSh0aGlzLDAsMCk7dmFyIG49ZS50b0RhdGFVUkwoImltYWdlL3BuZyIpO3IuYXR0cigieGxpbms6aHJlZiIsbiksdCgpfSxyLm9uKCJlcnJvciIsaSksbi5zcmM9ZS5zb3VyY2UsdGhpcy5faW1nU3JjPWUuc291cmNlfS5iaW5kKHRoaXMpKTt0Ll9wcm9taXNlcy5wdXNoKGkpfX1mdW5jdGlvbiB2KGUpe3ZhciByLG8scz1uLnNlbGVjdCh0aGlzKSxjPWEuZ2V0RnJvbUlkKHQsZS54cmVmKSx1PWEuZ2V0RnJvbUlkKHQsZS55cmVmKSxmPSJkb21haW4iPT09YS5nZXRSZWZUeXBlKGUueHJlZiksaD0iZG9tYWluIj09PWEuZ2V0UmVmVHlwZShlLnlyZWYpLHA9bC5fc2l6ZTtyPXZvaWQgMCE9PWM/InN0cmluZyI9PXR5cGVvZiBlLnhyZWYmJmY/Yy5fbGVuZ3RoKmUuc2l6ZXg6TWF0aC5hYnMoYy5sMnAoZS5zaXpleCktYy5sMnAoMCkpOmUuc2l6ZXgqcC53LG89dm9pZCAwIT09dT8ic3RyaW5nIj09dHlwZW9mIGUueXJlZiYmaD91Ll9sZW5ndGgqZS5zaXpleTpNYXRoLmFicyh1LmwycChlLnNpemV5KS11LmwycCgwKSk6ZS5zaXpleSpwLmg7dmFyIG0sdix5PXIqZFtlLnhhbmNob3JdLm9mZnNldCx4PW8qZ1tlLnlhbmNob3JdLm9mZnNldCxiPWRbZS54YW5jaG9yXS5zaXppbmcrZ1tlLnlhbmNob3JdLnNpemluZztzd2l0Y2gobT12b2lkIDAhPT1jPyJzdHJpbmciPT10eXBlb2YgZS54cmVmJiZmP2MuX2xlbmd0aCplLngrYy5fb2Zmc2V0OmMucjJwKGUueCkrYy5fb2Zmc2V0OmUueCpwLncrcC5sLG0rPXksdj12b2lkIDAhPT11PyJzdHJpbmciPT10eXBlb2YgZS55cmVmJiZoP3UuX2xlbmd0aCooMS1lLnkpK3UuX29mZnNldDp1LnIycChlLnkpK3UuX29mZnNldDpwLmgtZS55KnAuaCtwLnQsdis9eCxlLnNpemluZyl7Y2FzZSJmaWxsIjpiKz0iIHNsaWNlIjticmVhaztjYXNlInN0cmV0Y2giOmI9Im5vbmUifXMuYXR0cih7eDptLHk6dix3aWR0aDpyLGhlaWdodDpvLHByZXNlcnZlQXNwZWN0UmF0aW86YixvcGFjaXR5OmUub3BhY2l0eX0pO3ZhciBfPShjJiYiZG9tYWluIiE9PWEuZ2V0UmVmVHlwZShlLnhyZWYpP2MuX2lkOiIiKSsodSYmImRvbWFpbiIhPT1hLmdldFJlZlR5cGUoZS55cmVmKT91Ll9pZDoiIik7aS5zZXRDbGlwVXJsKHMsXz8iY2xpcCIrbC5fdWlkK186bnVsbCx0KX12YXIgeT1sLl9pbWFnZUxvd2VyTGF5ZXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoZikseD1sLl9pbWFnZVVwcGVyTGF5ZXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoYyk7eS5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx4LmVudGVyKCkuYXBwZW5kKCJpbWFnZSIpLHkuZXhpdCgpLnJlbW92ZSgpLHguZXhpdCgpLnJlbW92ZSgpLHkuZWFjaCgoZnVuY3Rpb24odCl7bS5iaW5kKHRoaXMpKHQpLHYuYmluZCh0aGlzKSh0KX0pKSx4LmVhY2goKGZ1bmN0aW9uKHQpe20uYmluZCh0aGlzKSh0KSx2LmJpbmQodGhpcykodCl9KSk7dmFyIGI9T2JqZWN0LmtleXMobC5fcGxvdHMpO2ZvcihyPTA7cjxiLmxlbmd0aDtyKyspe2U9YltyXTt2YXIgXz1sLl9wbG90c1tlXTtpZihfLmltYWdlbGF5ZXIpe3ZhciB3PV8uaW1hZ2VsYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YSh1W2VdfHxbXSk7dy5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx3LmV4aXQoKS5yZW1vdmUoKSx3LmVhY2goKGZ1bmN0aW9uKHQpe20uYmluZCh0aGlzKSh0KSx2LmJpbmQodGhpcykodCl9KSl9fX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjc1NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4uL2RyYXdpbmciOjY2NSxkMzoxNjl9XSw2OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImltYWdlcyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiKSgiaW1hZ2VzIiksZHJhdzp0KCIuL2RyYXciKSxjb252ZXJ0Q29vcmRzOnQoIi4vY29udmVydF9jb29yZHMiKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyI6ODQwLCIuL2F0dHJpYnV0ZXMiOjY4OCwiLi9jb252ZXJ0X2Nvb3JkcyI6Njg5LCIuL2RlZmF1bHRzIjo2OTAsIi4vZHJhdyI6NjkxfV0sNjkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vY29sb3IvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJsZWdlbmQifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToibGVnZW5kIn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJsZWdlbmQifSxmb250Om4oe2VkaXRUeXBlOiJsZWdlbmQifSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZGZsdDoidiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHRyYWNlb3JkZXI6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInJldmVyc2VkIiwiZ3JvdXBlZCJdLGV4dHJhczpbIm5vcm1hbCJdLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZWdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImxlZ2VuZCJ9LGl0ZW1zaXppbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRyYWNlIiwiY29uc3RhbnQiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGl0ZW13aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MzAsZGZsdDozMCxlZGl0VHlwZToibGVnZW5kIn0saXRlbWNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b2dnbGUiLCJ0b2dnbGVvdGhlcnMiLCExXSxkZmx0OiJ0b2dnbGUiLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtZG91YmxlY2xpY2s6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvZ2dsZSIsInRvZ2dsZW90aGVycyIsITFdLGRmbHQ6InRvZ2dsZW90aGVycyIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJsZWdlbmQifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJsZWdlbmQifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImxlZ2VuZCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImxlZ2VuZCJ9KSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJsZWZ0IiwidG9wIGxlZnQiXSxlZGl0VHlwZToibGVnZW5kIn0sZWRpdFR5cGU6ImxlZ2VuZCJ9LGVkaXRUeXBlOiJsZWdlbmQifX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi4vY29sb3IvYXR0cmlidXRlcyI6NjQyfV0sNjk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2Nyb2xsQmFyV2lkdGg6NixzY3JvbGxCYXJNaW5IZWlnaHQ6MjAsc2Nyb2xsQmFyQ29sb3I6IiM4MDhCQTQiLHNjcm9sbEJhck1hcmdpbjo0LHNjcm9sbEJhckVudGVyQXR0cnM6e3J4OjIwLHJ5OjMsd2lkdGg6MCxoZWlnaHQ6MH0sdGl0bGVQYWQ6MixpdGVtR2FwOjV9fSx7fV0sNjk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBjPXQubGVnZW5kfHx7fSx1PTAsZj0hMSxoPSJub3JtYWwiLHA9MDtwPHIubGVuZ3RoO3ArKyl7dmFyIGQ9cltwXTtkLnZpc2libGUmJigoZC5zaG93bGVnZW5kfHxkLl9kZmx0U2hvd0xlZ2VuZCYmIShkLl9tb2R1bGUmJmQuX21vZHVsZS5hdHRyaWJ1dGVzJiZkLl9tb2R1bGUuYXR0cmlidXRlcy5zaG93bGVnZW5kJiYhMT09PWQuX21vZHVsZS5hdHRyaWJ1dGVzLnNob3dsZWdlbmQuZGZsdCkpJiYodSsrLGQuc2hvd2xlZ2VuZCYmKGY9ITAsKG4udHJhY2VJcyhkLCJwaWUtbGlrZSIpfHwhMD09PWQuX2lucHV0LnNob3dsZWdlbmQpJiZ1KyspKSwobi50cmFjZUlzKGQsImJhciIpJiYic3RhY2siPT09ZS5iYXJtb2RlfHwtMSE9PVsidG9uZXh0eCIsInRvbmV4dHkiXS5pbmRleE9mKGQuZmlsbCkpJiYoaD1sLmlzR3JvdXBlZCh7dHJhY2VvcmRlcjpofSk/Imdyb3VwZWQrcmV2ZXJzZWQiOiJyZXZlcnNlZCIpLHZvaWQgMCE9PWQubGVnZW5kZ3JvdXAmJiIiIT09ZC5sZWdlbmRncm91cCYmKGg9bC5pc1JldmVyc2VkKHt0cmFjZW9yZGVyOmh9KT8icmV2ZXJzZWQrZ3JvdXBlZCI6Imdyb3VwZWQiKSl9dmFyIGc9aS5jb2VyY2UodCxlLHMsInNob3dsZWdlbmQiLGYmJnU+MSk7aWYoITEhPT1nfHxjLnVpcmV2aXNpb24pe3ZhciBtPWEubmV3Q29udGFpbmVyKGUsImxlZ2VuZCIpO2lmKF8oInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbiksITEhPT1nKXtfKCJiZ2NvbG9yIixlLnBhcGVyX2JnY29sb3IpLF8oImJvcmRlcmNvbG9yIiksXygiYm9yZGVyd2lkdGgiKSxpLmNvZXJjZUZvbnQoXywiZm9udCIsZS5mb250KTt2YXIgdix5LHgsYj1fKCJvcmllbnRhdGlvbiIpOyJoIj09PWI/KHY9MCxuLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKSh0LnhheGlzKT8oeT0xLjEseD0iYm90dG9tIik6KHk9LS4xLHg9InRvcCIpKToodj0xLjAyLHk9MSx4PSJhdXRvIiksXygidHJhY2VvcmRlciIsaCksbC5pc0dyb3VwZWQoZS5sZWdlbmQpJiZfKCJ0cmFjZWdyb3VwZ2FwIiksXygiaXRlbXNpemluZyIpLF8oIml0ZW13aWR0aCIpLF8oIml0ZW1jbGljayIpLF8oIml0ZW1kb3VibGVjbGljayIpLF8oIngiLHYpLF8oInhhbmNob3IiKSxfKCJ5Iix5KSxfKCJ5YW5jaG9yIix4KSxfKCJ2YWxpZ24iKSxpLm5vbmVPckFsbChjLG0sWyJ4IiwieSJdKSxfKCJ0aXRsZS50ZXh0IikmJihfKCJ0aXRsZS5zaWRlIiwiaCI9PT1iPyJsZWZ0IjoidG9wIiksaS5jb2VyY2VGb250KF8sInRpdGxlLmZvbnQiLGUuZm9udCkpfX1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIGkuY29lcmNlKGMsbSxvLHQsZSl9fX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE3LCIuLi8uLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6ODgyLCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuL2F0dHJpYnV0ZXMiOjY5MywiLi9oZWxwZXJzIjo2OTl9XSw2OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIvZXZlbnRzIiksbD10KCIuLi9kcmFnZWxlbWVudCIpLGM9dCgiLi4vZHJhd2luZyIpLHU9dCgiLi4vY29sb3IiKSxmPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGg9dCgiLi9oYW5kbGVfY2xpY2siKSxwPXQoIi4vY29uc3RhbnRzIiksZD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IiksZz1kLkxJTkVfU1BBQ0lORyxtPWQuRlJPTV9UTCx2PWQuRlJPTV9CUix5PXQoIi4vZ2V0X2xlZ2VuZF9kYXRhIikseD10KCIuL3N0eWxlIiksYj10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBfKHQsZSxyLG4saSl7dmFyIGE9ci5kYXRhKClbMF1bMF0udHJhY2UsbD17ZXZlbnQ6aSxub2RlOnIubm9kZSgpLGN1cnZlTnVtYmVyOmEuaW5kZXgsZXhwYW5kZWRJbmRleDphLl9leHBhbmRlZEluZGV4LGRhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dCxmcmFtZXM6dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxjb25maWc6dC5fY29udGV4dCxmdWxsRGF0YTp0Ll9mdWxsRGF0YSxmdWxsTGF5b3V0OnQuX2Z1bGxMYXlvdXR9O2lmKGEuX2dyb3VwJiYobC5ncm91cD1hLl9ncm91cCksby50cmFjZUlzKGEsInBpZS1saWtlIikmJihsLmxhYmVsPXIuZGF0dW0oKVswXS5sYWJlbCksITEhPT1zLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9sZWdlbmRjbGljayIsbCkpaWYoMT09PW4pZS5fY2xpY2tUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aChyLHQsbil9KSx0Ll9jb250ZXh0LmRvdWJsZUNsaWNrRGVsYXkpO2Vsc2UgaWYoMj09PW4pe2UuX2NsaWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KGUuX2NsaWNrVGltZW91dCksdC5fbGVnZW5kTW91c2VEb3duVGltZT0wLCExIT09cy50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfbGVnZW5kZG91YmxlY2xpY2siLGwpJiZoKHIsdCxuKX19ZnVuY3Rpb24gdyh0LGUscil7dmFyIG4sYT10LmRhdGEoKVswXVswXSxzPWEudHJhY2UsbD1vLnRyYWNlSXMocywicGllLWxpa2UiKSx1PXMuaW5kZXgsaD1yLl9tYWluJiZlLl9jb250ZXh0LmVkaXRzLmxlZ2VuZFRleHQmJiFsLGQ9ci5fbWF4TmFtZUxlbmd0aDtyLmVudHJpZXM/bj1hLnRleHQ6KG49bD9hLmxhYmVsOnMubmFtZSxzLl9tZXRhJiYobj1pLnRlbXBsYXRlU3RyaW5nKG4scy5fbWV0YSkpKTt2YXIgZz1pLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IiwibGVnZW5kdGV4dCIpO2cuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmNhbGwoYy5mb250LHIuZm9udCkudGV4dChoP1QobixkKTpuKTt2YXIgbT1yLml0ZW13aWR0aCsyKnAuaXRlbUdhcDtmLnBvc2l0aW9uVGV4dChnLG0sMCksaD9nLmNhbGwoZi5tYWtlRWRpdGFibGUse2dkOmUsdGV4dDpufSkuY2FsbChNLHQsZSxyKS5vbigiZWRpdCIsKGZ1bmN0aW9uKG4pe3RoaXMudGV4dChUKG4sZCkpLmNhbGwoTSx0LGUscik7dmFyIHM9YS50cmFjZS5fZnVsbElucHV0fHx7fSxsPXt9O2lmKG8uaGFzVHJhbnNmb3JtKHMsImdyb3VwYnkiKSl7dmFyIGM9by5nZXRUcmFuc2Zvcm1JbmRpY2VzKHMsImdyb3VwYnkiKSxmPWNbYy5sZW5ndGgtMV0saD1pLmtleWVkQ29udGFpbmVyKHMsInRyYW5zZm9ybXNbIitmKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLm5hbWUiKTtoLnNldChhLnRyYWNlLl9ncm91cCxuKSxsPWguY29uc3RydWN0VXBkYXRlKCl9ZWxzZSBsLm5hbWU9bjtyZXR1cm4gby5jYWxsKCJfZ3VpUmVzdHlsZSIsZSxsLHUpfSkpOk0oZyx0LGUscil9ZnVuY3Rpb24gVCh0LGUpe3ZhciByPU1hdGgubWF4KDQsZSk7aWYodCYmdC50cmltKCkubGVuZ3RoPj1yLzIpcmV0dXJuIHQ7Zm9yKHZhciBuPXItKHQ9dHx8IiIpLmxlbmd0aDtuPjA7bi0tKXQrPSIgIjtyZXR1cm4gdH1mdW5jdGlvbiBrKHQsZSl7dmFyIHIsYT1lLl9jb250ZXh0LmRvdWJsZUNsaWNrRGVsYXksbz0xLHM9aS5lbnN1cmVTaW5nbGUodCwicmVjdCIsImxlZ2VuZHRvZ2dsZSIsKGZ1bmN0aW9uKHQpe2UuX2NvbnRleHQuc3RhdGljUGxvdHx8dC5zdHlsZSgiY3Vyc29yIiwicG9pbnRlciIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksdC5jYWxsKHUuZmlsbCwicmdiYSgwLDAsMCwwKSIpfSkpO2UuX2NvbnRleHQuc3RhdGljUGxvdHx8KHMub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKCl7KHI9KG5ldyBEYXRlKS5nZXRUaW1lKCkpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU8YT9vKz0xOihvPTEsZS5fbGVnZW5kTW91c2VEb3duVGltZT1yKX0pKSxzLm9uKCJtb3VzZXVwIiwoZnVuY3Rpb24oKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciByPWUuX2Z1bGxMYXlvdXQubGVnZW5kOyhuZXcgRGF0ZSkuZ2V0VGltZSgpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU+YSYmKG89TWF0aC5tYXgoby0xLDEpKSxfKGUscix0LG8sbi5ldmVudCl9fSkpKX1mdW5jdGlvbiBNKHQsZSxyLG4pe24uX21haW58fHQuYXR0cigiZGF0YS1ub3RleCIsITApLGYuY29udmVydFRvVHNwYW5zKHQsciwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuZGF0YSgpWzBdWzBdO2lmKHIuX21haW4mJm4mJiFuLnRyYWNlLnNob3dsZWdlbmQpcmV0dXJuIHZvaWQgdC5yZW1vdmUoKTt2YXIgaT10LnNlbGVjdCgiZ1tjbGFzcyo9bWF0aC1ncm91cF0iKSxhPWkubm9kZSgpO3J8fChyPWUuX2Z1bGxMYXlvdXQubGVnZW5kKTt2YXIgbyxzLGw9ci5ib3JkZXJ3aWR0aCx1PShuP3I6ci50aXRsZSkuZm9udC5zaXplKmc7aWYoYSl7dmFyIGg9Yy5iQm94KGEpO289aC5oZWlnaHQscz1oLndpZHRoLG4/Yy5zZXRUcmFuc2xhdGUoaSwwLC4yNSpvKTpjLnNldFRyYW5zbGF0ZShpLGwsLjc1Km8rbCl9ZWxzZXt2YXIgZD10LnNlbGVjdChuPyIubGVnZW5kdGV4dCI6Ii5sZWdlbmR0aXRsZXRleHQiKSxtPWYubGluZUNvdW50KGQpLHY9ZC5ub2RlKCk7bz11Km0scz12P2MuYkJveCh2KS53aWR0aDowO3ZhciB5PXUqKChtLTEpLzItLjMpO2lmKG4pe3ZhciB4PXIuaXRlbXdpZHRoKzIqcC5pdGVtR2FwO2YucG9zaXRpb25UZXh0KGQseCwteSl9ZWxzZSBmLnBvc2l0aW9uVGV4dChkLHAudGl0bGVQYWQrbCx1K2wpfW4/KG4ubGluZUhlaWdodD11LG4uaGVpZ2h0PU1hdGgubWF4KG8sMTYpKzMsbi53aWR0aD1zKTooci5fdGl0bGVXaWR0aD1zLHIuX3RpdGxlSGVpZ2h0PW8pfShlLHIsbil9KSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gaS5pc1JpZ2h0QW5jaG9yKHQpPyJyaWdodCI6aS5pc0NlbnRlckFuY2hvcih0KT8iY2VudGVyIjoibGVmdCJ9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gaS5pc0JvdHRvbUFuY2hvcih0KT8iYm90dG9tIjppLmlzTWlkZGxlQW5jaG9yKHQpPyJtaWRkbGUiOiJ0b3AifWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHM9dC5fZnVsbExheW91dCxmPSJsZWdlbmQiK3MuX3VpZDtpZihlPyhyPWUubGF5ZXIsZis9Ii1ob3ZlciIpOigoZT1zLmxlZ2VuZHx8e30pLl9tYWluPSEwLHI9cy5faW5mb2xheWVyKSxyKXt2YXIgaDtpZih0Ll9sZWdlbmRNb3VzZURvd25UaW1lfHwodC5fbGVnZW5kTW91c2VEb3duVGltZT0wKSxlLl9tYWluKXtpZighdC5jYWxjZGF0YSlyZXR1cm47aD1zLnNob3dsZWdlbmQmJnkodC5jYWxjZGF0YSxlKX1lbHNle2lmKCFlLmVudHJpZXMpcmV0dXJuO2g9eShlLmVudHJpZXMsZSl9dmFyIGQ9cy5oaWRkZW5sYWJlbHN8fFtdO2lmKGUuX21haW4mJighcy5zaG93bGVnZW5kfHwhaC5sZW5ndGgpKXJldHVybiByLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLnJlbW92ZSgpLHMuX3RvcGRlZnMuc2VsZWN0KCIjIitmKS5yZW1vdmUoKSxhLmF1dG9NYXJnaW4odCwibGVnZW5kIik7dmFyIGc9aS5lbnN1cmVTaW5nbGUociwiZyIsImxlZ2VuZCIsKGZ1bmN0aW9uKHQpe2UuX21haW4mJnQuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKSxUPWkuZW5zdXJlU2luZ2xlQnlJZChzLl90b3BkZWZzLCJjbGlwUGF0aCIsZiwoZnVuY3Rpb24odCl7dC5hcHBlbmQoInJlY3QiKX0pKSxFPWkuZW5zdXJlU2luZ2xlKGcsInJlY3QiLCJiZyIsKGZ1bmN0aW9uKHQpe3QuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpfSkpO0UuY2FsbCh1LnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKHUuZmlsbCxlLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyd2lkdGgrInB4Iik7dmFyIEM9aS5lbnN1cmVTaW5nbGUoZywiZyIsInNjcm9sbGJveCIpLEw9ZS50aXRsZTtpZihlLl90aXRsZVdpZHRoPTAsZS5fdGl0bGVIZWlnaHQ9MCxMLnRleHQpe3ZhciBJPWkuZW5zdXJlU2luZ2xlKEMsInRleHQiLCJsZWdlbmR0aXRsZXRleHQiKTtJLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5jYWxsKGMuZm9udCxMLmZvbnQpLnRleHQoTC50ZXh0KSxNKEksQyx0LGUpfWVsc2UgQy5zZWxlY3RBbGwoIi5sZWdlbmR0aXRsZXRleHQiKS5yZW1vdmUoKTt2YXIgUD1pLmVuc3VyZVNpbmdsZShnLCJyZWN0Iiwic2Nyb2xsYmFyIiwoZnVuY3Rpb24odCl7dC5hdHRyKHAuc2Nyb2xsQmFyRW50ZXJBdHRycykuY2FsbCh1LmZpbGwscC5zY3JvbGxCYXJDb2xvcil9KSksej1DLnNlbGVjdEFsbCgiZy5ncm91cHMiKS5kYXRhKGgpO3ouZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyb3VwcyIpLHouZXhpdCgpLnJlbW92ZSgpO3ZhciBPPXouc2VsZWN0QWxsKCJnLnRyYWNlcyIpLmRhdGEoaS5pZGVudGl0eSk7Ty5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2VzIiksTy5leGl0KCkucmVtb3ZlKCksTy5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2U7cmV0dXJuIG8udHJhY2VJcyhlLCJwaWUtbGlrZSIpPy0xIT09ZC5pbmRleE9mKHRbMF0ubGFiZWwpPy41OjE6ImxlZ2VuZG9ubHkiPT09ZS52aXNpYmxlPy41OjF9KSkuZWFjaCgoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5jYWxsKHcsdCxlKX0pKS5jYWxsKHgsdCxlKS5lYWNoKChmdW5jdGlvbigpe2UuX21haW4mJm4uc2VsZWN0KHRoaXMpLmNhbGwoayx0KX0pKSxpLnN5bmNPckFzeW5jKFthLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dC5fZnVsbExheW91dDtpfHwoaT1hLmxlZ2VuZCk7dmFyIG89YS5fc2l6ZSxzPWIuaXNWZXJ0aWNhbChpKSxsPWIuaXNHcm91cGVkKGkpLHU9aS5ib3JkZXJ3aWR0aCxmPTIqdSxoPXAuaXRlbUdhcCxkPWkuaXRlbXdpZHRoKzIqaCxnPTIqKHUraCksbT1TKGkpLHY9aS55PDB8fDA9PT1pLnkmJiJ0b3AiPT09bSx5PWkueT4xfHwxPT09aS55JiYiYm90dG9tIj09PW07aS5fbWF4SGVpZ2h0PU1hdGgubWF4KHZ8fHk/YS5oZWlnaHQvMjpvLmgsMzApO3ZhciB4PTA7aS5fd2lkdGg9MCxpLl9oZWlnaHQ9MDt2YXIgXz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9MCxuPXQudGl0bGUuc2lkZTtuJiYoLTEhPT1uLmluZGV4T2YoImxlZnQiKSYmKGU9dC5fdGl0bGVXaWR0aCksLTEhPT1uLmluZGV4T2YoInRvcCIpJiYocj10Ll90aXRsZUhlaWdodCkpO3JldHVybltlLHJdfShpKTtpZihzKXIuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcyx1K19bMF0sdStfWzFdK2kuX2hlaWdodCtlLzIraCksaS5faGVpZ2h0Kz1lLGkuX3dpZHRoPU1hdGgubWF4KGkuX3dpZHRoLHRbMF0ud2lkdGgpfSkpLHg9ZCtpLl93aWR0aCxpLl93aWR0aCs9aCtkK2YsaS5faGVpZ2h0Kz1nLGwmJihlLmVhY2goKGZ1bmN0aW9uKHQsZSl7Yy5zZXRUcmFuc2xhdGUodGhpcywwLGUqaS50cmFjZWdyb3VwZ2FwKX0pKSxpLl9oZWlnaHQrPShpLl9sZ3JvdXBzTGVuZ3RoLTEpKmkudHJhY2Vncm91cGdhcCk7ZWxzZXt2YXIgdz1BKGkpLFQ9aS54PDB8fDA9PT1pLngmJiJyaWdodCI9PT13LGs9aS54PjF8fDE9PT1pLngmJiJsZWZ0Ij09PXcsTT15fHx2LEU9YS53aWR0aC8yO2kuX21heFdpZHRoPU1hdGgubWF4KFQ/TSYmImxlZnQiPT09dz9vLmwrby53OkU6az9NJiYicmlnaHQiPT09dz9vLnIrby53OkU6by53LDIqZCk7dmFyIEM9MCxMPTA7ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLndpZHRoK2Q7Qz1NYXRoLm1heChDLGUpLEwrPWV9KSkseD1udWxsO3ZhciBJPTA7aWYobCl7dmFyIFA9MCx6PTAsTz0wO2UuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD0wLGU9MDtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcudHJhY2VzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIG49clswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcyxfWzBdLF9bMV0rdStoK24vMitlKSxlKz1uLHQ9TWF0aC5tYXgodCxkK3JbMF0ud2lkdGgpfSkpLFA9TWF0aC5tYXgoUCxlKTt2YXIgcj10K2g7cit1K3o+aS5fbWF4V2lkdGgmJihJPU1hdGgubWF4KEkseiksej0wLE8rPVAraS50cmFjZWdyb3VwZ2FwLFA9ZSksYy5zZXRUcmFuc2xhdGUodGhpcyx6LE8pLHorPXJ9KSksaS5fd2lkdGg9TWF0aC5tYXgoSSx6KSt1LGkuX2hlaWdodD1PK1ArZ31lbHNle3ZhciBEPXIuc2l6ZSgpLFI9TCtmKyhELTEpKmg8aS5fbWF4V2lkdGgsRj0wLEI9MCxOPTAsaj0wO3IuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS5oZWlnaHQscj1kK3RbMF0ud2lkdGgsbj0oUj9yOkMpK2g7bit1K0ItaD49aS5fbWF4V2lkdGgmJihJPU1hdGgubWF4KEksaiksQj0wLE4rPUYsaS5faGVpZ2h0Kz1GLEY9MCksYy5zZXRUcmFuc2xhdGUodGhpcyxfWzBdK3UrQixfWzFdK3UrTitlLzIraCksaj1CK3IraCxCKz1uLEY9TWF0aC5tYXgoRixlKX0pKSxSPyhpLl93aWR0aD1CK2YsaS5faGVpZ2h0PUYrZyk6KGkuX3dpZHRoPU1hdGgubWF4KEksaikrZixpLl9oZWlnaHQrPUYrZyl9fWkuX3dpZHRoPU1hdGguY2VpbChNYXRoLm1heChpLl93aWR0aCtfWzBdLGkuX3RpdGxlV2lkdGgrMioodStwLnRpdGxlUGFkKSkpLGkuX2hlaWdodD1NYXRoLmNlaWwoTWF0aC5tYXgoaS5faGVpZ2h0K19bMV0saS5fdGl0bGVIZWlnaHQrMioodStwLml0ZW1HYXApKSksaS5fZWZmSGVpZ2h0PU1hdGgubWluKGkuX2hlaWdodCxpLl9tYXhIZWlnaHQpO3ZhciBVPXQuX2NvbnRleHQuZWRpdHMsVj1VLmxlZ2VuZFRleHR8fFUubGVnZW5kUG9zaXRpb247ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoIi5sZWdlbmR0b2dnbGUiKSxyPXRbMF0uaGVpZ2h0LGk9Vj9kOnh8fGQrdFswXS53aWR0aDtzfHwoaSs9aC8yKSxjLnNldFJlY3QoZSwwLC1yLzIsaSxyKX0pKX0odCx6LE8sZSl9LGZ1bmN0aW9uKCl7aWYoIWUuX21haW58fCFmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LmxlZ2VuZCxyPUEoZSksbj1TKGUpO3JldHVybiBhLmF1dG9NYXJnaW4odCwibGVnZW5kIix7eDplLngseTplLnksbDplLl93aWR0aCptW3JdLHI6ZS5fd2lkdGgqdltyXSxiOmUuX2VmZkhlaWdodCp2W25dLHQ6ZS5fZWZmSGVpZ2h0Km1bbl19KX0odCkpe3ZhciB1LGgsZCx5LHg9cy5fc2l6ZSxiPWUuYm9yZGVyd2lkdGgsdz14LmwreC53KmUueC1tW0EoZSldKmUuX3dpZHRoLGs9eC50K3guaCooMS1lLnkpLW1bUyhlKV0qZS5fZWZmSGVpZ2h0O2lmKGUuX21haW4mJnMubWFyZ2luLmF1dG9leHBhbmQpe3ZhciBNPXcsTD1rO3c9aS5jb25zdHJhaW4odywwLHMud2lkdGgtZS5fd2lkdGgpLGs9aS5jb25zdHJhaW4oaywwLHMuaGVpZ2h0LWUuX2VmZkhlaWdodCksdyE9PU0mJmkubG9nKCJDb25zdHJhaW4gbGVnZW5kLnggdG8gbWFrZSBsZWdlbmQgZml0IGluc2lkZSBncmFwaCIpLGshPT1MJiZpLmxvZygiQ29uc3RyYWluIGxlZ2VuZC55IHRvIG1ha2UgbGVnZW5kIGZpdCBpbnNpZGUgZ3JhcGgiKX1pZihlLl9tYWluJiZjLnNldFRyYW5zbGF0ZShnLHcsayksUC5vbigiLmRyYWciLG51bGwpLGcub24oIndoZWVsIixudWxsKSwhZS5fbWFpbnx8ZS5faGVpZ2h0PD1lLl9tYXhIZWlnaHR8fHQuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIEk9ZS5fZWZmSGVpZ2h0O2UuX21haW58fChJPWUuX2hlaWdodCksRS5hdHRyKHt3aWR0aDplLl93aWR0aC1iLGhlaWdodDpJLWIseDpiLzIseTpiLzJ9KSxjLnNldFRyYW5zbGF0ZShDLDAsMCksVC5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDplLl93aWR0aC0yKmIsaGVpZ2h0OkktMipiLHg6Yix5OmJ9KSxjLnNldENsaXBVcmwoQyxmLHQpLGMuc2V0UmVjdChQLDAsMCwwLDApLGRlbGV0ZSBlLl9zY3JvbGxZfWVsc2V7dmFyIHosTyxELFI9TWF0aC5tYXgocC5zY3JvbGxCYXJNaW5IZWlnaHQsZS5fZWZmSGVpZ2h0KmUuX2VmZkhlaWdodC9lLl9oZWlnaHQpLEY9ZS5fZWZmSGVpZ2h0LVItMipwLnNjcm9sbEJhck1hcmdpbixCPWUuX2hlaWdodC1lLl9lZmZIZWlnaHQsTj1GL0Isaj1NYXRoLm1pbihlLl9zY3JvbGxZfHwwLEIpO0UuYXR0cih7d2lkdGg6ZS5fd2lkdGgtMipiK3Auc2Nyb2xsQmFyV2lkdGgrcC5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0OmUuX2VmZkhlaWdodC1iLHg6Yi8yLHk6Yi8yfSksVC5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDplLl93aWR0aC0yKmIrcC5zY3JvbGxCYXJXaWR0aCtwLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6ZS5fZWZmSGVpZ2h0LTIqYix4OmIseTpiK2p9KSxjLnNldENsaXBVcmwoQyxmLHQpLHEoaixSLE4pLGcub24oIndoZWVsIiwoZnVuY3Rpb24oKXtxKGo9aS5jb25zdHJhaW4oZS5fc2Nyb2xsWStuLmV2ZW50LmRlbHRhWS9GKkIsMCxCKSxSLE4pLDAhPT1qJiZqIT09QiYmbi5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfSkpO3ZhciBVPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7ej0idG91Y2hzdGFydCI9PT10LnR5cGU/dC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZOnQuY2xpZW50WSxEPWp9KSkub24oImRyYWciLChmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7Mj09PXQuYnV0dG9uc3x8dC5jdHJsS2V5fHwoTz0idG91Y2htb3ZlIj09PXQudHlwZT90LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk6dC5jbGllbnRZLHEoaj1mdW5jdGlvbih0LGUscil7dmFyIG49KHItZSkvTit0O3JldHVybiBpLmNvbnN0cmFpbihuLDAsQil9KEQseixPKSxSLE4pKX0pKTtQLmNhbGwoVSk7dmFyIFY9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5ldmVudC5zb3VyY2VFdmVudDsidG91Y2hzdGFydCI9PT10LnR5cGUmJih6PXQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WSxEPWopfSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24oKXt2YXIgdD1uLmV2ZW50LnNvdXJjZUV2ZW50OyJ0b3VjaG1vdmUiPT09dC50eXBlJiYoTz10LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFkscShqPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0oZS1yKS9OK3Q7cmV0dXJuIGkuY29uc3RyYWluKG4sMCxCKX0oRCx6LE8pLFIsTikpfSkpO0MuY2FsbChWKX1pZih0Ll9jb250ZXh0LmVkaXRzLmxlZ2VuZFBvc2l0aW9uKWcuY2xhc3NlZCgiY3Vyc29yLW1vdmUiLCEwKSxsLmluaXQoe2VsZW1lbnQ6Zy5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXt2YXIgdD1jLmdldFRyYW5zbGF0ZShnKTtkPXQueCx5PXQueX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49ZCt0LGk9eStyO2Muc2V0VHJhbnNsYXRlKGcsbixpKSx1PWwuYWxpZ24obiwwLHgubCx4LmwreC53LGUueGFuY2hvciksaD1sLmFsaWduKGksMCx4LnQreC5oLHgudCxlLnlhbmNob3IpfSxkb25lRm46ZnVuY3Rpb24oKXt2b2lkIDAhPT11JiZ2b2lkIDAhPT1oJiZvLmNhbGwoIl9ndWlSZWxheW91dCIsdCx7ImxlZ2VuZC54Ijp1LCJsZWdlbmQueSI6aH0pfSxjbGlja0ZuOmZ1bmN0aW9uKGUsbil7dmFyIGk9ci5zZWxlY3RBbGwoImcudHJhY2VzIikuZmlsdGVyKChmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG4uY2xpZW50WD49dC5sZWZ0JiZuLmNsaWVudFg8PXQucmlnaHQmJm4uY2xpZW50WT49dC50b3AmJm4uY2xpZW50WTw9dC5ib3R0b219KSk7aS5zaXplKCk+MCYmXyh0LGcsaSxlLG4pfX0pfWZ1bmN0aW9uIHEocixuLGkpe2UuX3Njcm9sbFk9dC5fZnVsbExheW91dC5sZWdlbmQuX3Njcm9sbFk9cixjLnNldFRyYW5zbGF0ZShDLDAsLXIpLGMuc2V0UmVjdChQLGUuX3dpZHRoLHAuc2Nyb2xsQmFyTWFyZ2luK3IqaSxwLnNjcm9sbEJhcldpZHRoLG4pLFQuc2VsZWN0KCJyZWN0IikuYXR0cigieSIsYityKX19XSx0KX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NSwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9ldmVudHMiOjc2NywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4OTEsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL2NvbG9yIjo2NDMsIi4uL2RyYWdlbGVtZW50Ijo2NjIsIi4uL2RyYXdpbmciOjY2NSwiLi9jb25zdGFudHMiOjY5NCwiLi9nZXRfbGVnZW5kX2RhdGEiOjY5NywiLi9oYW5kbGVfY2xpY2siOjY5OCwiLi9oZWxwZXJzIjo2OTksIi4vc3R5bGUiOjcwMSxkMzoxNjl9XSw2OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbz17fSxzPVtdLGw9ITEsYz17fSx1PTAsZj0wLGg9ZS5fbWFpbjtmdW5jdGlvbiBwKHQscil7aWYoIiIhPT10JiZpLmlzR3JvdXBlZChlKSktMT09PXMuaW5kZXhPZih0KT8ocy5wdXNoKHQpLGw9ITAsb1t0XT1bW3JdXSk6b1t0XS5wdXNoKFtyXSk7ZWxzZXt2YXIgbj0ifn5pIit1O3MucHVzaChuKSxvW25dPVtbcl1dLHUrK319Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGQ9dFtyXSxnPWRbMF0sbT1nLnRyYWNlLHY9bS5sZWdlbmRncm91cDtpZighaHx8bS52aXNpYmxlJiZtLnNob3dsZWdlbmQpaWYobi50cmFjZUlzKG0sInBpZS1saWtlIikpZm9yKGNbdl18fChjW3ZdPXt9KSxhPTA7YTxkLmxlbmd0aDthKyspe3ZhciB5PWRbYV0ubGFiZWw7Y1t2XVt5XXx8KHAodix7bGFiZWw6eSxjb2xvcjpkW2FdLmNvbG9yLGk6ZFthXS5pLHRyYWNlOm0scHRzOmRbYV0ucHRzfSksY1t2XVt5XT0hMCxmPU1hdGgubWF4KGYsKHl8fCIiKS5sZW5ndGgpKX1lbHNlIHAodixnKSxmPU1hdGgubWF4KGYsKG0ubmFtZXx8IiIpLmxlbmd0aCl9aWYoIXMubGVuZ3RoKXJldHVybltdO3ZhciB4LGIsXz1zLmxlbmd0aDtpZihsJiZpLmlzR3JvdXBlZChlKSlmb3IoYj1uZXcgQXJyYXkoXykscj0wO3I8XztyKyspeD1vW3Nbcl1dLGJbcl09aS5pc1JldmVyc2VkKGUpP3gucmV2ZXJzZSgpOng7ZWxzZXtmb3IoYj1bbmV3IEFycmF5KF8pXSxyPTA7cjxfO3IrKyl4PW9bc1tyXV1bMF0sYlswXVtpLmlzUmV2ZXJzZWQoZSk/Xy1yLTE6cl09eDtfPTF9cmV0dXJuIGUuX2xncm91cHNMZW5ndGg9XyxlLl9tYXhOYW1lTGVuZ3RoPWYsYn19LHsiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi9oZWxwZXJzIjo2OTl9XSw2OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9ITA7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1lLl9mdWxsTGF5b3V0O2lmKCFlLl9kcmFnZ2VkJiYhZS5fZWRpdGluZyl7dmFyIHMsbD1vLmxlZ2VuZC5pdGVtY2xpY2ssYz1vLmxlZ2VuZC5pdGVtZG91YmxlY2xpY2s7aWYoMT09PXImJiJ0b2dnbGUiPT09bCYmInRvZ2dsZW90aGVycyI9PT1jJiZhJiZlLmRhdGEmJmUuX2NvbnRleHQuc2hvd1RpcHM/KG4ubm90aWZpZXIobi5fKGUsIkRvdWJsZS1jbGljayBvbiBsZWdlbmQgdG8gaXNvbGF0ZSBvbmUgdHJhY2UiKSwibG9uZyIpLGE9ITEpOmE9ITEsMT09PXI/cz1sOjI9PT1yJiYocz1jKSxzKXt2YXIgdSxmLGgscCxkLGc9by5oaWRkZW5sYWJlbHM/by5oaWRkZW5sYWJlbHMuc2xpY2UoKTpbXSxtPXQuZGF0YSgpWzBdWzBdLHY9ZS5fZnVsbERhdGEseT1tLnRyYWNlLHg9eS5sZWdlbmRncm91cCxiPXt9LF89W10sdz1bXSxUPVtdO2lmKGkudHJhY2VJcyh5LCJwaWUtbGlrZSIpKXt2YXIgaz1tLmxhYmVsLE09Zy5pbmRleE9mKGspOyJ0b2dnbGUiPT09cz8tMT09PU0/Zy5wdXNoKGspOmcuc3BsaWNlKE0sMSk6InRvZ2dsZW90aGVycyI9PT1zJiYoZz1bXSxlLmNhbGNkYXRhWzBdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2shPT10LmxhYmVsJiZnLnB1c2godC5sYWJlbCl9KSksZS5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMmJmUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLmxlbmd0aD09PWcubGVuZ3RoJiYtMT09PU0mJihnPVtdKSksaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsImhpZGRlbmxhYmVscyIsZyl9ZWxzZXt2YXIgQSxTPXgmJngubGVuZ3RoLEU9W107aWYoUylmb3IodT0wO3U8di5sZW5ndGg7dSsrKShBPXZbdV0pLnZpc2libGUmJkEubGVnZW5kZ3JvdXA9PT14JiZFLnB1c2godSk7aWYoInRvZ2dsZSI9PT1zKXt2YXIgQztzd2l0Y2goeS52aXNpYmxlKXtjYXNlITA6Qz0ibGVnZW5kb25seSI7YnJlYWs7Y2FzZSExOkM9ITE7YnJlYWs7Y2FzZSJsZWdlbmRvbmx5IjpDPSEwfWlmKFMpZm9yKHU9MDt1PHYubGVuZ3RoO3UrKykhMSE9PXZbdV0udmlzaWJsZSYmdlt1XS5sZWdlbmRncm91cD09PXgmJkIodlt1XSxDKTtlbHNlIEIoeSxDKX1lbHNlIGlmKCJ0b2dnbGVvdGhlcnMiPT09cyl7dmFyIEwsSSxQLHosTz0hMDtmb3IodT0wO3U8di5sZW5ndGg7dSsrKWlmKEw9dlt1XT09PXksUD0hMCE9PXZbdV0uc2hvd2xlZ2VuZCwhKEx8fFB8fChJPVMmJnZbdV0ubGVnZW5kZ3JvdXA9PT14KXx8ITAhPT12W3VdLnZpc2libGV8fGkudHJhY2VJcyh2W3VdLCJub3RMZWdlbmRJc29sYXRhYmxlIikpKXtPPSExO2JyZWFrfWZvcih1PTA7dTx2Lmxlbmd0aDt1KyspaWYoITEhPT12W3VdLnZpc2libGUmJiFpLnRyYWNlSXModlt1XSwibm90TGVnZW5kSXNvbGF0YWJsZSIpKXN3aXRjaCh5LnZpc2libGUpe2Nhc2UibGVnZW5kb25seSI6Qih2W3VdLCEwKTticmVhaztjYXNlITA6ej0hIU98fCJsZWdlbmRvbmx5IixMPXZbdV09PT15LFA9ITAhPT12W3VdLnNob3dsZWdlbmQmJiF2W3VdLmxlZ2VuZGdyb3VwLEk9THx8UyYmdlt1XS5sZWdlbmRncm91cD09PXgsQih2W3VdLCEoIUkmJiFQKXx8eil9fWZvcih1PTA7dTx3Lmxlbmd0aDt1KyspaWYoaD13W3VdKXt2YXIgRD1oLmNvbnN0cnVjdFVwZGF0ZSgpLFI9T2JqZWN0LmtleXMoRCk7Zm9yKGY9MDtmPFIubGVuZ3RoO2YrKylwPVJbZl0sKGJbcF09YltwXXx8W10pW1RbdV1dPURbcF19Zm9yKGQ9T2JqZWN0LmtleXMoYiksdT0wO3U8ZC5sZW5ndGg7dSsrKWZvcihwPWRbdV0sZj0wO2Y8Xy5sZW5ndGg7ZisrKWJbcF0uaGFzT3duUHJvcGVydHkoZil8fChiW3BdW2ZdPXZvaWQgMCk7aS5jYWxsKCJfZ3VpUmVzdHlsZSIsZSxiLF8pfX19ZnVuY3Rpb24gRih0LGUscil7dmFyIG49Xy5pbmRleE9mKHQpLGk9YltlXTtyZXR1cm4gaXx8KGk9YltlXT1bXSksLTE9PT1fLmluZGV4T2YodCkmJihfLnB1c2godCksbj1fLmxlbmd0aC0xKSxpW25dPXIsbn1mdW5jdGlvbiBCKHQsZSl7dmFyIHI9dC5fZnVsbElucHV0O2lmKGkuaGFzVHJhbnNmb3JtKHIsImdyb3VwYnkiKSl7dmFyIGE9d1tyLmluZGV4XTtpZighYSl7dmFyIG89aS5nZXRUcmFuc2Zvcm1JbmRpY2VzKHIsImdyb3VwYnkiKSxzPW9bby5sZW5ndGgtMV07YT1uLmtleWVkQ29udGFpbmVyKHIsInRyYW5zZm9ybXNbIitzKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLnZpc2libGUiKSx3W3IuaW5kZXhdPWF9dmFyIGw9YS5nZXQodC5fZ3JvdXApO3ZvaWQgMD09PWwmJihsPSEwKSwhMSE9PWwmJmEuc2V0KHQuX2dyb3VwLGUpLFRbci5pbmRleF09RihyLmluZGV4LCJ2aXNpYmxlIiwhMSE9PXIudmlzaWJsZSl9ZWxzZXt2YXIgYz0hMSE9PXIudmlzaWJsZSYmZTtGKHIuaW5kZXgsInZpc2libGUiLGMpfX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9yZWdpc3RyeSI6OTExfV0sNjk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuaXNHcm91cGVkPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09KHQudHJhY2VvcmRlcnx8IiIpLmluZGV4T2YoImdyb3VwZWQiKX0sci5pc1ZlcnRpY2FsPWZ1bmN0aW9uKHQpe3JldHVybiJoIiE9PXQub3JpZW50YXRpb259LHIuaXNSZXZlcnNlZD1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PSh0LnRyYWNlb3JkZXJ8fCIiKS5pbmRleE9mKCJyZXZlcnNlZCIpfX0se31dLDcwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToibGVnZW5kIixsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpLHN0eWxlOnQoIi4vc3R5bGUiKX19LHsiLi9hdHRyaWJ1dGVzIjo2OTMsIi4vZGVmYXVsdHMiOjY5NSwiLi9kcmF3Ijo2OTYsIi4vc3R5bGUiOjcwMX1dLDcwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89YS5zdHJUcmFuc2xhdGUscz10KCIuLi9kcmF3aW5nIiksbD10KCIuLi9jb2xvciIpLGM9dCgiLi4vY29sb3JzY2FsZS9oZWxwZXJzIikuZXh0cmFjdE9wdHMsdT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLGY9dCgiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiKSxoPXQoIi4uLy4uL3RyYWNlcy9waWUvaGVscGVycyIpLmNhc3RPcHRpb24scD10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4oZT8icmFkaWFsIjoiaG9yaXpvbnRhbCIpKyh0PyIiOiJyZXZlcnNlZCIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGc9ZS5fZnVsbExheW91dDtyfHwocj1nLmxlZ2VuZCk7dmFyIG09ImNvbnN0YW50Ij09PXIuaXRlbXNpemluZyx2PXIuaXRlbXdpZHRoLHk9KHYrMipwLml0ZW1HYXApLzIseD1vKHksMCksYj1mdW5jdGlvbih0LGUscixuKXt2YXIgaTtpZih0KzEpaT10O2Vsc2V7aWYoIShlJiZlLndpZHRoPjApKXJldHVybiAwO2k9ZS53aWR0aH1yZXR1cm4gbT9uOk1hdGgubWluKGkscil9O2Z1bmN0aW9uIF8odCxlLHIpe3ZhciBhPXRbMF0udHJhY2Usbz1hLm1hcmtlcnx8e30scz1vLmxpbmV8fHt9LGM9cj9hLnZpc2libGUmJmEudHlwZT09PXI6aS50cmFjZUlzKGEsImJhciIpLHU9bi5zZWxlY3QoZSkuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQiK3IpLmRhdGEoYz9bdF06W10pO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQiK3IsITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIix4KSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXSxpPWIoci5tbHcsby5saW5lLDUsMik7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIixpKyJweCIpLmNhbGwobC5maWxsLHIubWN8fG8uY29sb3IpLGkmJmwuc3Ryb2tlKGUsci5tbGN8fHMuY29sb3IpfSkpfWZ1bmN0aW9uIHcodCxlLHIpe3ZhciBvPXRbMF0scz1vLnRyYWNlLGw9cj9zLnZpc2libGUmJnMudHlwZT09PXI6aS50cmFjZUlzKHMsciksYz1uLnNlbGVjdChlKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZCIrcikuZGF0YShsP1t0XTpbXSk7aWYoYy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZCIrciwhMCkuYXR0cigiZCIsIk02LDZILTZWLTZINloiKS5hdHRyKCJ0cmFuc2Zvcm0iLHgpLGMuZXhpdCgpLnJlbW92ZSgpLGMuc2l6ZSgpKXt2YXIgdT0ocy5tYXJrZXJ8fHt9KS5saW5lLHA9YihoKHUud2lkdGgsby5wdHMpLHUsNSwyKSxkPWEubWluRXh0ZW5kKHMse21hcmtlcjp7bGluZTp7d2lkdGg6cH19fSk7ZC5tYXJrZXIubGluZS5jb2xvcj11LmNvbG9yO3ZhciBnPWEubWluRXh0ZW5kKG8se3RyYWNlOmR9KTtmKGMsZyxkKX19dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPWEuZW5zdXJlU2luZ2xlKGUsImciLCJsYXllcnMiKTtpLnN0eWxlKCJvcGFjaXR5Iix0WzBdLnRyYWNlLm9wYWNpdHkpO3ZhciBzPXIudmFsaWduLGw9dFswXS5saW5lSGVpZ2h0LGM9dFswXS5oZWlnaHQ7aWYoIm1pZGRsZSIhPT1zJiZsJiZjKXt2YXIgdT17dG9wOjEsYm90dG9tOi0xfVtzXSooLjUqKGwtYyszKSk7aS5hdHRyKCJ0cmFuc2Zvcm0iLG8oMCx1KSl9ZWxzZSBpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7aS5zZWxlY3RBbGwoImcubGVnZW5kZmlsbCIpLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZGZpbGwiLCEwKSxpLnNlbGVjdEFsbCgiZy5sZWdlbmRsaW5lcyIpLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZGxpbmVzIiwhMCk7dmFyIGY9aS5zZWxlY3RBbGwoImcubGVnZW5kc3ltYm9scyIpLmRhdGEoW3RdKTtmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kc3ltYm9scyIsITApLGYuc2VsZWN0QWxsKCJnLmxlZ2VuZHBvaW50cyIpLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZHBvaW50cyIsITApfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByLGk9dFswXS50cmFjZSxvPVtdO2lmKGkudmlzaWJsZSlzd2l0Y2goaS50eXBlKXtjYXNlImhpc3RvZ3JhbTJkIjpjYXNlImhlYXRtYXAiOm89W1siTS0xNSwtMlY0SDE1Vi0yWiJdXSxyPSEwO2JyZWFrO2Nhc2UiY2hvcm9wbGV0aCI6Y2FzZSJjaG9yb3BsZXRobWFwYm94IjpvPVtbIk0tNiwtNlY2SDZWLTZaIl1dLHI9ITA7YnJlYWs7Y2FzZSJkZW5zaXR5bWFwYm94IjpvPVtbIk0tNiwwIGE2LDYgMCAxLDAgMTIsMCBhIDYsNiAwIDEsMCAtMTIsMCJdXSxyPSJyYWRpYWwiO2JyZWFrO2Nhc2UiY29uZSI6bz1bWyJNLTYsMiBBMiwyIDAgMCwwIC02LDYgVjZMNiw0WiJdLFsiTS02LC02IEEyLDIgMCAwLDAgLTYsLTIgTDYsLTRaIl0sWyJNLTYsLTIgQTIsMiAwIDAsMCAtNiwyIEw2LDBaIl1dLHI9ITE7YnJlYWs7Y2FzZSJzdHJlYW10dWJlIjpvPVtbIk0tNiwyIEEyLDIgMCAwLDAgLTYsNiBINiBBMiwyIDAgMCwxIDYsMiBaIl0sWyJNLTYsLTYgQTIsMiAwIDAsMCAtNiwtMiBINiBBMiwyIDAgMCwxIDYsLTYgWiJdLFsiTS02LC0yIEEyLDIgMCAwLDAgLTYsMiBINiBBMiwyIDAgMCwxIDYsLTIgWiJdXSxyPSExO2JyZWFrO2Nhc2Uic3VyZmFjZSI6bz1bWyJNLTYsLTYgQTIsMyAwIDAsMCAtNiwwIEg2IEEyLDMgMCAwLDEgNiwtNiBaIl0sWyJNLTYsMSBBMiwzIDAgMCwxIC02LDYgSDYgQTIsMyAwIDAsMCA2LDAgWiJdXSxyPSEwO2JyZWFrO2Nhc2UibWVzaDNkIjpvPVtbIk0tNiw2SDBMLTYsLTZaIl0sWyJNNiw2SDBMNiwtNloiXSxbIk0tNiwtNkg2TDAsNloiXV0scj0hMTticmVhaztjYXNlInZvbHVtZSI6bz1bWyJNLTYsNkgwTC02LC02WiJdLFsiTTYsNkgwTDYsLTZaIl0sWyJNLTYsLTZINkwwLDZaIl1dLHI9ITA7YnJlYWs7Y2FzZSJpc29zdXJmYWNlIjpvPVtbIk0tNiw2SDBMLTYsLTZaIl0sWyJNNiw2SDBMNiwtNloiXSxbIk0tNiwtNiBBMTIsMjQgMCAwLDAgNiwtNiBMMCw2WiJdXSxyPSExfXZhciB1PW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kM2RhbmRmcmllbmRzIikuZGF0YShvKTt1LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kM2RhbmRmcmllbmRzIiwhMCkuYXR0cigidHJhbnNmb3JtIix4KS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaCgoZnVuY3Rpb24odCxvKXt2YXIgdSxmPW4uc2VsZWN0KHRoaXMpLGg9YyhpKSxwPWguY29sb3JzY2FsZSxnPWgucmV2ZXJzZXNjYWxlO2lmKHApe2lmKCFyKXt2YXIgbT1wLmxlbmd0aDt1PTA9PT1vP3BbZz9tLTE6MF1bMV06MT09PW8/cFtnPzA6bS0xXVsxXTpwW01hdGguZmxvb3IoKG0tMSkvMildWzFdfX1lbHNle3ZhciB2PWkudmVydGV4Y29sb3J8fGkuZmFjZWNvbG9yfHxpLmNvbG9yO3U9YS5pc0FycmF5T3JUeXBlZEFycmF5KHYpP3Zbb118fHZbMF06dn1mLmF0dHIoImQiLHRbMF0pLHU/Zi5jYWxsKGwuZmlsbCx1KTpmLmNhbGwoKGZ1bmN0aW9uKHQpe2lmKHQuc2l6ZSgpKXt2YXIgbj0ibGVnZW5kZmlsbC0iK2kudWlkO3MuZ3JhZGllbnQodCxlLG4sZChnLCJyYWRpYWwiPT09cikscCwiZmlsbCIpfX0pKX0pKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9IndhdGVyZmFsbCI9PT1lLnR5cGU7aWYodFswXS5fZGlzdGluY3QmJnIpe3ZhciBpPXRbMF0udHJhY2VbdFswXS5kaXJdLm1hcmtlcjtyZXR1cm4gdFswXS5tYz1pLmNvbG9yLHRbMF0ubWx3PWkubGluZS53aWR0aCx0WzBdLm1sYz1pLmxpbmUuY29sb3IsXyh0LHRoaXMsIndhdGVyZmFsbCIpfXZhciBhPVtdO2UudmlzaWJsZSYmciYmKGE9dFswXS5oYXNUb3RhbHM/W1siaW5jcmVhc2luZyIsIk0tNiwtNlY2SDBaIl0sWyJ0b3RhbHMiLCJNNiw2SDBMLTYsLTZILTBaIl0sWyJkZWNyZWFzaW5nIiwiTTYsNlYtNkgwWiJdXTpbWyJpbmNyZWFzaW5nIiwiTS02LC02VjZINloiXSxbImRlY3JlYXNpbmciLCJNNiw2Vi02SC02WiJdXSk7dmFyIG89bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmR3YXRlcmZhbGwiKS5kYXRhKGEpO28uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmR3YXRlcmZhbGwiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLHgpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWVbdFswXV0ubWFya2VyLGE9Yih2b2lkIDAsaS5saW5lLDUsMik7ci5hdHRyKCJkIix0WzFdKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixhKyJweCIpLmNhbGwobC5maWxsLGkuY29sb3IpLGEmJnIuY2FsbChsLnN0cm9rZSxpLmxpbmUuY29sb3IpfSkpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe18odCx0aGlzLCJmdW5uZWwiKX0pKS5lYWNoKChmdW5jdGlvbih0KXtfKHQsdGhpcyl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9dFswXS50cmFjZSxvPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kYm94IikuZGF0YShyLnZpc2libGUmJmkudHJhY2VJcyhyLCJib3gtdmlvbGluIik/W3RdOltdKTtvLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kYm94IiwhMCkuYXR0cigiZCIsIk02LDZILTZWLTZINloiKS5hdHRyKCJ0cmFuc2Zvcm0iLHgpLG8uZXhpdCgpLnJlbW92ZSgpLG8uZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtpZigiYWxsIiE9PXIuYm94cG9pbnRzJiYiYWxsIiE9PXIucG9pbnRzfHwwIT09bC5vcGFjaXR5KHIuZmlsbGNvbG9yKXx8MCE9PWwub3BhY2l0eSgoci5saW5lfHx7fSkuY29sb3IpKXt2YXIgaT1iKHZvaWQgMCxyLmxpbmUsNSwyKTt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLGkrInB4IikuY2FsbChsLmZpbGwsci5maWxsY29sb3IpLGkmJmwuc3Ryb2tlKHQsci5saW5lLmNvbG9yKX1lbHNle3ZhciBjPWEubWluRXh0ZW5kKHIse21hcmtlcjp7c2l6ZTptPzEyOmEuY29uc3RyYWluKHIubWFya2VyLnNpemUsMiwxNiksc2l6ZXJlZjoxLHNpemVtaW46MSxzaXplbW9kZToiZGlhbWV0ZXIifX0pO28uY2FsbChzLnBvaW50U3R5bGUsYyxlKX19KSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dyh0LHRoaXMsImZ1bm5lbGFyZWEiKX0pKS5lYWNoKChmdW5jdGlvbih0KXt3KHQsdGhpcywicGllIil9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHIsaSxvPXRbMF0sbD1vLnRyYWNlLGY9bC52aXNpYmxlJiZsLmZpbGwmJiJub25lIiE9PWwuZmlsbCxoPXUuaGFzTGluZXMobCkscD1sLmNvbnRvdXJzLGc9ITEsbT0hMSx5PWMobCkseD15LmNvbG9yc2NhbGUsXz15LnJldmVyc2VzY2FsZTtpZihwKXt2YXIgdz1wLmNvbG9yaW5nOyJsaW5lcyI9PT13P2c9ITA6aD0ibm9uZSI9PT13fHwiaGVhdG1hcCI9PT13fHxwLnNob3dsaW5lcywiY29uc3RyYWludCI9PT1wLnR5cGU/Zj0iPSIhPT1wLl9vcGVyYXRpb246ImZpbGwiIT09dyYmImhlYXRtYXAiIT09d3x8KG09ITApfXZhciBUPXUuaGFzTWFya2VycyhsKXx8dS5oYXNUZXh0KGwpLGs9Znx8bSxNPWh8fGcsQT1UfHwhaz8iTTUsMCI6TT8iTTUsLTIiOiJNNSwtMyIsUz1uLnNlbGVjdCh0aGlzKSxFPVMuc2VsZWN0KCIubGVnZW5kZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoZnx8bT9bdF06W10pO2lmKEUuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1maWxsIiwhMCksRS5leGl0KCkucmVtb3ZlKCksRS5hdHRyKCJkIixBKyJoIit2KyJ2NmgtIit2KyJ6IikuY2FsbChmP3MuZmlsbEdyb3VwU3R5bGU6ZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciByPSJsZWdlbmRmaWxsLSIrbC51aWQ7cy5ncmFkaWVudCh0LGUscixkKF8pLHgsImZpbGwiKX19KSxofHxnKXt2YXIgQz1iKHZvaWQgMCxsLmxpbmUsMTAsNSk7aT1hLm1pbkV4dGVuZChsLHtsaW5lOnt3aWR0aDpDfX0pLHI9W2EubWluRXh0ZW5kKG8se3RyYWNlOml9KV19dmFyIEw9Uy5zZWxlY3QoIi5sZWdlbmRsaW5lcyIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoaHx8Zz9bcl06W10pO0wuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCksTC5leGl0KCkucmVtb3ZlKCksTC5hdHRyKCJkIixBKyhnPyJsIit2KyIsMC4wMDAxIjoiaCIrdikpLmNhbGwoaD9zLmxpbmVHcm91cFN0eWxlOmZ1bmN0aW9uKHQpe2lmKHQuc2l6ZSgpKXt2YXIgcj0ibGVnZW5kbGluZS0iK2wudWlkO3MubGluZUdyb3VwU3R5bGUodCkscy5ncmFkaWVudCh0LGUscixkKF8pLHgsInN0cm9rZSIpfX0pfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByLGksbz10WzBdLGw9by50cmFjZSxjPXUuaGFzTWFya2VycyhsKSxmPXUuaGFzVGV4dChsKSxoPXUuaGFzTGluZXMobCk7ZnVuY3Rpb24gcCh0LGUscixuKXt2YXIgaT1hLm5lc3RlZFByb3BlcnR5KGwsdCkuZ2V0KCksbz1hLmlzQXJyYXlPclR5cGVkQXJyYXkoaSkmJmU/ZShpKTppO2lmKG0mJm8mJnZvaWQgMCE9PW4mJihvPW4pLHIpe2lmKG88clswXSlyZXR1cm4gclswXTtpZihvPnJbMV0pcmV0dXJuIHJbMV19cmV0dXJuIG99ZnVuY3Rpb24gZCh0KXtyZXR1cm4gby5fZGlzdGluY3QmJm8uaW5kZXgmJnRbby5pbmRleF0/dFtvLmluZGV4XTp0WzBdfWlmKGN8fGZ8fGgpe3ZhciBnPXt9LHY9e307aWYoYyl7Zy5tYz1wKCJtYXJrZXIuY29sb3IiLGQpLGcubXg9cCgibWFya2VyLnN5bWJvbCIsZCksZy5tbz1wKCJtYXJrZXIub3BhY2l0eSIsYS5tZWFuLFsuMiwxXSksZy5tbGM9cCgibWFya2VyLmxpbmUuY29sb3IiLGQpLGcubWx3PXAoIm1hcmtlci5saW5lLndpZHRoIixhLm1lYW4sWzAsNV0sMiksdi5tYXJrZXI9e3NpemVyZWY6MSxzaXplbWluOjEsc2l6ZW1vZGU6ImRpYW1ldGVyIn07dmFyIHk9cCgibWFya2VyLnNpemUiLGEubWVhbixbMiwxNl0sMTIpO2cubXM9eSx2Lm1hcmtlci5zaXplPXl9aCYmKHYubGluZT17d2lkdGg6cCgibGluZS53aWR0aCIsZCxbMCwxMF0sNSl9KSxmJiYoZy50eD0iQWEiLGcudHA9cCgidGV4dHBvc2l0aW9uIixkKSxnLnRzPTEwLGcudGM9cCgidGV4dGZvbnQuY29sb3IiLGQpLGcudGY9cCgidGV4dGZvbnQuZmFtaWx5IixkKSkscj1bYS5taW5FeHRlbmQobyxnKV0sKGk9YS5taW5FeHRlbmQobCx2KSkuc2VsZWN0ZWRwb2ludHM9bnVsbCxpLnRleHR0ZW1wbGF0ZT1udWxsfXZhciBiPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKSxfPWIuc2VsZWN0QWxsKCJwYXRoLnNjYXR0ZXJwdHMiKS5kYXRhKGM/cjpbXSk7Xy5lbnRlcigpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInNjYXR0ZXJwdHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLHgpLF8uZXhpdCgpLnJlbW92ZSgpLF8uY2FsbChzLnBvaW50U3R5bGUsaSxlKSxjJiYoclswXS5tcmM9Myk7dmFyIHc9Yi5zZWxlY3RBbGwoImcucG9pbnR0ZXh0IikuZGF0YShmP3I6W10pO3cuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludHRleHQiLCEwKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLHgpLHcuZXhpdCgpLnJlbW92ZSgpLHcuc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChzLnRleHRQb2ludFN0eWxlLGksZSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kY2FuZGxlIikuZGF0YShlLnZpc2libGUmJiJjYW5kbGVzdGljayI9PT1lLnR5cGU/W3QsdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRjYW5kbGUiLCEwKS5hdHRyKCJkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iTS0xNSwwSC04TS04LDZWLTZIOFoiOiJNMTUsMEg4TTgsLTZWNkgtOFoifSkpLmF0dHIoInRyYW5zZm9ybSIseCkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sbz1iKHZvaWQgMCxhLmxpbmUsNSwyKTtpLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4IikuY2FsbChsLmZpbGwsYS5maWxsY29sb3IpLG8mJmwuc3Ryb2tlKGksYS5saW5lLmNvbG9yKX0pKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRvaGxjIikuZGF0YShlLnZpc2libGUmJiJvaGxjIj09PWUudHlwZT9bdCx0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZG9obGMiLCEwKS5hdHRyKCJkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iTS0xNSwwSDBNLTgsLTZWMCI6Ik0xNSwwSDBNOCw2VjAifSkpLmF0dHIoInRyYW5zZm9ybSIseCkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sbz1iKHZvaWQgMCxhLmxpbmUsNSwyKTtpLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNhbGwocy5kYXNoTGluZSxhLmxpbmUuZGFzaCxvKSxvJiZsLnN0cm9rZShpLGEubGluZS5jb2xvcil9KSl9KSl9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnMiOjExNjYsIi4uLy4uL3RyYWNlcy9waWUvc3R5bGVfb25lIjoxMTcyLCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTIxMiwiLi4vY29sb3IiOjY0MywiLi4vY29sb3JzY2FsZS9oZWxwZXJzIjo2NTQsIi4uL2RyYXdpbmciOjY2NSwiLi9jb25zdGFudHMiOjY5NCxkMzoxNjl9XSw3MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL2ZvbnRzL3Bsb3RpY29uIikscz10KCIuLi9zaGFwZXMvZHJhdyIpLmVyYXNlQWN0aXZlU2hhcGUsbD10KCIuLi8uLi9saWIiKSxjPWwuXyx1PWUuZXhwb3J0cz17fTtmdW5jdGlvbiBmKHQsZSl7dmFyIHIsaSxvPWUuY3VycmVudFRhcmdldCxzPW8uZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxsPW8uZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxjPXQuX2Z1bGxMYXlvdXQsdT17fSxmPWEubGlzdCh0LG51bGwsITApLGg9Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZDtpZigiem9vbSI9PT1zKXt2YXIgcCxkPSJpbiI9PT1sPy41OjIsZz0oMStkKS8yLG09KDEtZCkvMjtmb3IoaT0wO2k8Zi5sZW5ndGg7aSsrKWlmKCEocj1mW2ldKS5maXhlZHJhbmdlKWlmKHA9ci5fbmFtZSwiYXV0byI9PT1sKXVbcCsiLmF1dG9yYW5nZSJdPSEwO2Vsc2UgaWYoInJlc2V0Ij09PWwpe2lmKHZvaWQgMD09PXIuX3JhbmdlSW5pdGlhbCl1W3ArIi5hdXRvcmFuZ2UiXT0hMDtlbHNle3ZhciB2PXIuX3JhbmdlSW5pdGlhbC5zbGljZSgpO3VbcCsiLnJhbmdlWzBdIl09dlswXSx1W3ArIi5yYW5nZVsxXSJdPXZbMV19dm9pZCAwIT09ci5fc2hvd1NwaWtlSW5pdGlhbCYmKHVbcCsiLnNob3dzcGlrZXMiXT1yLl9zaG93U3Bpa2VJbml0aWFsLCJvbiIhPT1ofHxyLl9zaG93U3Bpa2VJbml0aWFsfHwoaD0ib2ZmIikpfWVsc2V7dmFyIHk9W3IucjJsKHIucmFuZ2VbMF0pLHIucjJsKHIucmFuZ2VbMV0pXSx4PVtnKnlbMF0rbSp5WzFdLGcqeVsxXSttKnlbMF1dO3VbcCsiLnJhbmdlWzBdIl09ci5sMnIoeFswXSksdVtwKyIucmFuZ2VbMV0iXT1yLmwycih4WzFdKX19ZWxzZSJob3Zlcm1vZGUiIT09c3x8IngiIT09bCYmInkiIT09bHx8KGw9Yy5faXNIb3Jpej8ieSI6IngiLG8uc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsbCkpLHVbc109bDtjLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWgsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsdSl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0Ll9zdWJwbG90cy5nbDNkfHxbXSxzPXt9LGw9aS5zcGxpdCgiLiIpLGM9MDtjPG8ubGVuZ3RoO2MrKylzW29bY10rIi4iK2xbMV1dPWE7dmFyIHU9InBhbiI9PT1hP2E6Inpvb20iO3MuZHJhZ21vZGU9dSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxzKX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9InJlc2V0TGFzdFNhdmUiPT09cixhPSJyZXNldERlZmF1bHQiPT09cixvPXQuX2Z1bGxMYXlvdXQscz1vLl9zdWJwbG90cy5nbDNkfHxbXSxsPXt9LGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHUsZj1zW2NdLGg9ZisiLmNhbWVyYSIscD1mKyIuYXNwZWN0cmF0aW8iLGQ9ZisiLmFzcGVjdG1vZGUiLGc9b1tmXS5fc2NlbmU7aT8obFtoKyIudXAiXT1nLnZpZXdJbml0aWFsLnVwLGxbaCsiLmV5ZSJdPWcudmlld0luaXRpYWwuZXllLGxbaCsiLmNlbnRlciJdPWcudmlld0luaXRpYWwuY2VudGVyLHU9ITApOmEmJihsW2grIi51cCJdPW51bGwsbFtoKyIuZXllIl09bnVsbCxsW2grIi5jZW50ZXIiXT1udWxsLHU9ITApLHUmJihsW3ArIi54Il09Zy52aWV3SW5pdGlhbC5hc3BlY3RyYXRpby54LGxbcCsiLnkiXT1nLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvLnksbFtwKyIueiJdPWcudmlld0luaXRpYWwuYXNwZWN0cmF0aW8ueixsW2RdPWcudmlld0luaXRpYWwuYXNwZWN0bW9kZSl9bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsbCl9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldCxuPXIuX3ByZXZpb3VzVmFsLGk9dC5fZnVsbExheW91dCxhPWkuX3N1YnBsb3RzLmdsM2R8fFtdLG89WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxzPXt9LGw9e307aWYobilsPW4sci5fcHJldmlvdXNWYWw9bnVsbDtlbHNle2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGY9aVt1XSxoPXUrIi5ob3Zlcm1vZGUiO3NbaF09Zi5ob3Zlcm1vZGUsbFtoXT0hMTtmb3IodmFyIHA9MDtwPDM7cCsrKXt2YXIgZD1vW3BdLGc9dSsiLiIrZCsiLnNob3dzcGlrZXMiO2xbZ109ITEsc1tnXT1mW2RdLnNob3dzcGlrZXN9fXIuX3ByZXZpb3VzVmFsPXN9cmV0dXJuIGx9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0LHM9by5fc3VicGxvdHMuZ2VvfHxbXSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBjPXNbbF0sdT1vW2NdO2lmKCJ6b29tIj09PWkpe3ZhciBmPXUucHJvamVjdGlvbi5zY2FsZSxoPSJpbiI9PT1hPzIqZjouNSpmO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LGMrIi5wcm9qZWN0aW9uLnNjYWxlIixoKX19InJlc2V0Ij09PWkmJngodCwiZ2VvIil9ZnVuY3Rpb24gbSh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O3JldHVybiFlLmhvdmVybW9kZSYmKGUuX2hhcygiY2FydGVzaWFuIik/ZS5faXNIb3Jpej8ieSI6IngiOiJjbG9zZXN0Iil9ZnVuY3Rpb24gdih0KXt2YXIgZT1tKHQpO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LCJob3Zlcm1vZGUiLGUpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKSxpPXQuX2Z1bGxMYXlvdXQsYT1pLl9zdWJwbG90cy5tYXBib3h8fFtdLG89e30scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9aVtsXS56b29tLHU9ImluIj09PXI/MS4wNSpjOmMvMS4wNTtvW2wrIi56b29tIl09dX1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCxvKX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQsaT1yLl9zdWJwbG90c1tlXXx8W10sYT17fSxvPTA7bzxpLmxlbmd0aDtvKyspZm9yKHZhciBzPWlbb10sbD1yW3NdLl9zdWJwbG90LnZpZXdJbml0aWFsLGM9T2JqZWN0LmtleXMobCksdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdO2FbcysiLiIrZl09bFtmXX1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCxhKX11LnRvSW1hZ2U9e25hbWU6InRvSW1hZ2UiLHRpdGxlOmZ1bmN0aW9uKHQpe3ZhciBlPSh0Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zfHx7fSkuZm9ybWF0fHwicG5nIjtyZXR1cm4gYyh0LCJwbmciPT09ZT8iRG93bmxvYWQgcGxvdCBhcyBhIHBuZyI6IkRvd25sb2FkIHBsb3QiKX0saWNvbjpvLmNhbWVyYSxjbGljazpmdW5jdGlvbih0KXt2YXIgZT10Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zLHI9e2Zvcm1hdDplLmZvcm1hdHx8InBuZyJ9O2wubm90aWZpZXIoYyh0LCJUYWtpbmcgc25hcHNob3QgLSB0aGlzIG1heSB0YWtlIGEgZmV3IHNlY29uZHMiKSwibG9uZyIpLCJzdmciIT09ci5mb3JtYXQmJmwuaXNJRSgpJiYobC5ub3RpZmllcihjKHQsIklFIG9ubHkgc3VwcG9ydHMgc3ZnLiAgQ2hhbmdpbmcgZm9ybWF0IHRvIHN2Zy4iKSwibG9uZyIpLHIuZm9ybWF0PSJzdmciKSxbImZpbGVuYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJzY2FsZSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QgaW4gZSYmKHJbdF09ZVt0XSl9KSksbi5jYWxsKCJkb3dubG9hZEltYWdlIix0LHIpLnRoZW4oKGZ1bmN0aW9uKGUpe2wubm90aWZpZXIoYyh0LCJTbmFwc2hvdCBzdWNjZWVkZWQiKSsiIC0gIitlLCJsb25nIil9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7bC5ub3RpZmllcihjKHQsIlNvcnJ5LCB0aGVyZSB3YXMgYSBwcm9ibGVtIGRvd25sb2FkaW5nIHlvdXIgc25hcHNob3QhIiksImxvbmciKX0pKX19LHUuc2VuZERhdGFUb0Nsb3VkPXtuYW1lOiJzZW5kRGF0YVRvQ2xvdWQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVkaXQgaW4gQ2hhcnQgU3R1ZGlvIil9LGljb246by5kaXNrLGNsaWNrOmZ1bmN0aW9uKHQpe2kuc2VuZERhdGFUb0Nsb3VkKHQpfX0sdS5lZGl0SW5DaGFydFN0dWRpbz17bmFtZToiZWRpdEluQ2hhcnRTdHVkaW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVkaXQgaW4gQ2hhcnQgU3R1ZGlvIil9LGljb246by5wZW5jaWwsY2xpY2s6ZnVuY3Rpb24odCl7aS5zZW5kRGF0YVRvQ2xvdWQodCl9fSx1Lnpvb20yZD17bmFtZToiem9vbTJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6Inpvb20iLGljb246by56b29tYm94LGNsaWNrOmZ9LHUucGFuMmQ9e25hbWU6InBhbjJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJQYW4iKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoicGFuIixpY29uOm8ucGFuLGNsaWNrOmZ9LHUuc2VsZWN0MmQ9e25hbWU6InNlbGVjdDJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJCb3ggU2VsZWN0Iil9LGF0dHI6ImRyYWdtb2RlIix2YWw6InNlbGVjdCIsaWNvbjpvLnNlbGVjdGJveCxjbGljazpmfSx1Lmxhc3NvMmQ9e25hbWU6Imxhc3NvMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkxhc3NvIFNlbGVjdCIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJsYXNzbyIsaWNvbjpvLmxhc3NvLGNsaWNrOmZ9LHUuZHJhd2Nsb3NlZHBhdGg9e25hbWU6ImRyYXdjbG9zZWRwYXRoIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJEcmF3IGNsb3NlZCBmcmVlZm9ybSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3Y2xvc2VkcGF0aCIsaWNvbjpvLmRyYXdjbG9zZWRwYXRoLGNsaWNrOmZ9LHUuZHJhd29wZW5wYXRoPXtuYW1lOiJkcmF3b3BlbnBhdGgiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkRyYXcgb3BlbiBmcmVlZm9ybSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3b3BlbnBhdGgiLGljb246by5kcmF3b3BlbnBhdGgsY2xpY2s6Zn0sdS5kcmF3bGluZT17bmFtZToiZHJhd2xpbmUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkRyYXcgbGluZSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3bGluZSIsaWNvbjpvLmRyYXdsaW5lLGNsaWNrOmZ9LHUuZHJhd3JlY3Q9e25hbWU6ImRyYXdyZWN0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJEcmF3IHJlY3RhbmdsZSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3cmVjdCIsaWNvbjpvLmRyYXdyZWN0LGNsaWNrOmZ9LHUuZHJhd2NpcmNsZT17bmFtZToiZHJhd2NpcmNsZSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRHJhdyBjaXJjbGUiKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoiZHJhd2NpcmNsZSIsaWNvbjpvLmRyYXdjaXJjbGUsY2xpY2s6Zn0sdS5lcmFzZXNoYXBlPXtuYW1lOiJlcmFzZXNoYXBlIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJFcmFzZSBhY3RpdmUgc2hhcGUiKX0saWNvbjpvLmVyYXNlc2hhcGUsY2xpY2s6c30sdS56b29tSW4yZD17bmFtZToiem9vbUluMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlpvb20gaW4iKX0sYXR0cjoiem9vbSIsdmFsOiJpbiIsaWNvbjpvLnpvb21fcGx1cyxjbGljazpmfSx1Lnpvb21PdXQyZD17bmFtZToiem9vbU91dDJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIG91dCIpfSxhdHRyOiJ6b29tIix2YWw6Im91dCIsaWNvbjpvLnpvb21fbWludXMsY2xpY2s6Zn0sdS5hdXRvU2NhbGUyZD17bmFtZToiYXV0b1NjYWxlMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkF1dG9zY2FsZSIpfSxhdHRyOiJ6b29tIix2YWw6ImF1dG8iLGljb246by5hdXRvc2NhbGUsY2xpY2s6Zn0sdS5yZXNldFNjYWxlMmQ9e25hbWU6InJlc2V0U2NhbGUyZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgYXhlcyIpfSxhdHRyOiJ6b29tIix2YWw6InJlc2V0IixpY29uOm8uaG9tZSxjbGljazpmfSx1LmhvdmVyQ2xvc2VzdENhcnRlc2lhbj17bmFtZToiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJTaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDoiY2xvc2VzdCIsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmZ9LHUuaG92ZXJDb21wYXJlQ2FydGVzaWFuPXtuYW1lOiJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkNvbXBhcmUgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5fZnVsbExheW91dC5faXNIb3Jpej8ieSI6IngifSxpY29uOm8udG9vbHRpcF9jb21wYXJlLGdyYXZpdHk6Im5lIixjbGljazpmfSx1Lnpvb20zZD17bmFtZToiem9vbTNkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIil9LGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6Inpvb20iLGljb246by56b29tYm94LGNsaWNrOmh9LHUucGFuM2Q9e25hbWU6InBhbjNkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJQYW4iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoicGFuIixpY29uOm8ucGFuLGNsaWNrOmh9LHUub3JiaXRSb3RhdGlvbj17bmFtZToib3JiaXRSb3RhdGlvbiIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiT3JiaXRhbCByb3RhdGlvbiIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJvcmJpdCIsaWNvbjpvWyIzZF9yb3RhdGUiXSxjbGljazpofSx1LnRhYmxlUm90YXRpb249e25hbWU6InRhYmxlUm90YXRpb24iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlR1cm50YWJsZSByb3RhdGlvbiIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ0dXJudGFibGUiLGljb246b1siei1heGlzIl0sY2xpY2s6aH0sdS5yZXNldENhbWVyYURlZmF1bHQzZD17bmFtZToicmVzZXRDYW1lcmFEZWZhdWx0M2QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlJlc2V0IGNhbWVyYSB0byBkZWZhdWx0Iil9LGF0dHI6InJlc2V0RGVmYXVsdCIsaWNvbjpvLmhvbWUsY2xpY2s6cH0sdS5yZXNldENhbWVyYUxhc3RTYXZlM2Q9e25hbWU6InJlc2V0Q2FtZXJhTGFzdFNhdmUzZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgY2FtZXJhIHRvIGxhc3Qgc2F2ZSIpfSxhdHRyOiJyZXNldExhc3RTYXZlIixpY29uOm8ubW92aWUsY2xpY2s6cH0sdS5ob3ZlckNsb3Nlc3QzZD17bmFtZToiaG92ZXJDbG9zZXN0M2QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcj1kKHQsZSk7bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQscil9fSx1Lnpvb21Jbkdlbz17bmFtZToiem9vbUluR2VvIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246by56b29tX3BsdXMsY2xpY2s6Z30sdS56b29tT3V0R2VvPXtuYW1lOiJ6b29tT3V0R2VvIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIG91dCIpfSxhdHRyOiJ6b29tIix2YWw6Im91dCIsaWNvbjpvLnpvb21fbWludXMsY2xpY2s6Z30sdS5yZXNldEdlbz17bmFtZToicmVzZXRHZW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlJlc2V0Iil9LGF0dHI6InJlc2V0Iix2YWw6bnVsbCxpY29uOm8uYXV0b3NjYWxlLGNsaWNrOmd9LHUuaG92ZXJDbG9zZXN0R2VvPXtuYW1lOiJob3ZlckNsb3Nlc3RHZW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6dn0sdS5ob3ZlckNsb3Nlc3RHbDJkPXtuYW1lOiJob3ZlckNsb3Nlc3RHbDJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOnZ9LHUuaG92ZXJDbG9zZXN0UGllPXtuYW1lOiJob3ZlckNsb3Nlc3RQaWUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDoiY2xvc2VzdCIsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOnZ9LHUucmVzZXRWaWV3U2Fua2V5PXtuYW1lOiJyZXNldFNhbmtleUdyb3VwIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCB2aWV3Iil9LGljb246by5ob21lLGNsaWNrOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17Im5vZGUuZ3JvdXBzIjpbXSwibm9kZS54IjpbXSwibm9kZS55IjpbXX0scj0wO3I8dC5fZnVsbERhdGEubGVuZ3RoO3IrKyl7dmFyIGk9dC5fZnVsbERhdGFbcl0uX3ZpZXdJbml0aWFsO2VbIm5vZGUuZ3JvdXBzIl0ucHVzaChpLm5vZGUuZ3JvdXBzLnNsaWNlKCkpLGVbIm5vZGUueCJdLnB1c2goaS5ub2RlLnguc2xpY2UoKSksZVsibm9kZS55Il0ucHVzaChpLm5vZGUueS5zbGljZSgpKX1uLmNhbGwoInJlc3R5bGUiLHQsZSl9fSx1LnRvZ2dsZUhvdmVyPXtuYW1lOiJ0b2dnbGVIb3ZlciIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPWQodCxlKTtyLmhvdmVybW9kZT1tKHQpLG4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHIpfX0sdS5yZXNldFZpZXdzPXtuYW1lOiJyZXNldFZpZXdzIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCB2aWV3cyIpfSxpY29uOm8uaG9tZSxjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldDtyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwiem9vbSIpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsInJlc2V0IiksZih0LGUpLHIuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLCJyZXNldExhc3RTYXZlIikscCh0LGUpLHgodCwiZ2VvIikseCh0LCJtYXBib3giKX19LHUudG9nZ2xlU3Bpa2VsaW5lcz17bmFtZToidG9nZ2xlU3Bpa2VsaW5lcyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiVG9nZ2xlIFNwaWtlIExpbmVzIil9LGljb246by5zcGlrZWxpbmUsYXR0cjoiX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQiLHZhbDoib24iLGNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkO2UuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9Im9uIj09PXI/Im9mZiI6Im9uIixuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxmdW5jdGlvbih0KXtmb3IodmFyIGU9Im9uIj09PXQuX2Z1bGxMYXlvdXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQscj1hLmxpc3QodCxudWxsLCEwKSxuPXt9LGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtuW28uX25hbWUrIi5zaG93c3Bpa2VzIl09ISFlfHxvLl9zaG93U3Bpa2VJbml0aWFsfXJldHVybiBufSh0KSl9fSx1LnJlc2V0Vmlld01hcGJveD17bmFtZToicmVzZXRWaWV3TWFwYm94Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCB2aWV3Iil9LGF0dHI6InJlc2V0IixpY29uOm8uaG9tZSxjbGljazpmdW5jdGlvbih0KXt4KHQsIm1hcGJveCIpfX0sdS56b29tSW5NYXBib3g9e25hbWU6Inpvb21Jbk1hcGJveCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiWm9vbSBpbiIpfSxhdHRyOiJ6b29tIix2YWw6ImluIixpY29uOm8uem9vbV9wbHVzLGNsaWNrOnl9LHUuem9vbU91dE1hcGJveD17bmFtZToiem9vbU91dE1hcGJveCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246by56b29tX21pbnVzLGNsaWNrOnl9fSx7Ii4uLy4uL2ZvbnRzL3Bsb3RpY29uIjo3NTcsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MSwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi4vc2hhcGVzL2RyYXciOjcyNH1dLDcwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLm1hbmFnZT10KCIuL21hbmFnZSIpfSx7Ii4vbWFuYWdlIjo3MDR9XSw3MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksaT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uL2Z4L2hlbHBlcnMiKS5pc1VuaWZpZWRIb3ZlcixzPXQoIi4vbW9kZWJhciIpLGw9dCgiLi9idXR0b25zIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9jb250ZXh0LHU9ZS5fbW9kZUJhcjtpZihyLmRpc3BsYXlNb2RlQmFyfHxyLndhdGVybWFyayl7aWYoIUFycmF5LmlzQXJyYXkoci5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlKSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnNUb1JlbW92ZSogY29uZmlndXJhdGlvbiBvcHRpb25zIiwibXVzdCBiZSBhbiBhcnJheS4iXS5qb2luKCIgIikpO2lmKCFBcnJheS5pc0FycmF5KHIubW9kZUJhckJ1dHRvbnNUb0FkZCkpdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zVG9BZGQqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsIm11c3QgYmUgYW4gYXJyYXkuIl0uam9pbigiICIpKTt2YXIgZixoPXIubW9kZUJhckJ1dHRvbnM7Zj1BcnJheS5pc0FycmF5KGgpJiZoLmxlbmd0aD9mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylmb3IodmFyIHI9dFtlXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoInN0cmluZyI9PXR5cGVvZiBpKXtpZih2b2lkIDA9PT1sW2ldKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9ucyogY29uZmlndXJhdGlvbiBvcHRpb25zIiwiaW52YWxpZCBidXR0b24gbmFtZSJdLmpvaW4oIiAiKSk7dFtlXVtuXT1sW2ldfX1yZXR1cm4gdH0oaCk6IXIuZGlzcGxheU1vZGVCYXImJnIud2F0ZXJtYXJrP1tdOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxzPXQuX2NvbnRleHQsdT1zLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUsZj1zLm1vZGVCYXJCdXR0b25zVG9BZGQsaD1lLl9oYXMoImNhcnRlc2lhbiIpLHA9ZS5faGFzKCJnbDNkIiksZD1lLl9oYXMoImdlbyIpLGc9ZS5faGFzKCJwaWUiKSxtPWUuX2hhcygiZnVubmVsYXJlYSIpLHY9ZS5faGFzKCJnbDJkIikseT1lLl9oYXMoInRlcm5hcnkiKSx4PWUuX2hhcygibWFwYm94IiksYj1lLl9oYXMoInBvbGFyIiksXz1lLl9oYXMoInNhbmtleSIpLHc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sbnVsbCwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFlW3JdLmZpeGVkcmFuZ2UpcmV0dXJuITE7cmV0dXJuITB9KGUpLFQ9byhlLmhvdmVybW9kZSksaz1bXTtmdW5jdGlvbiBNKHQpe2lmKHQubGVuZ3RoKXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOy0xPT09dS5pbmRleE9mKG4pJiZlLnB1c2gobFtuXSl9ay5wdXNoKGUpfX12YXIgQT1bInRvSW1hZ2UiXTtzLnNob3dFZGl0SW5DaGFydFN0dWRpbz9BLnB1c2goImVkaXRJbkNoYXJ0U3R1ZGlvIik6cy5zaG93U2VuZFRvQ2xvdWQmJkEucHVzaCgic2VuZERhdGFUb0Nsb3VkIik7TShBKTt2YXIgUz1bXSxFPVtdLEM9W10sTD1bXTsoaHx8dnx8Z3x8bXx8eSkrZCtwK3grYj4xPyhFPVsidG9nZ2xlSG92ZXIiXSxDPVsicmVzZXRWaWV3cyJdKTpkPyhTPVsiem9vbUluR2VvIiwiem9vbU91dEdlbyJdLEU9WyJob3ZlckNsb3Nlc3RHZW8iXSxDPVsicmVzZXRHZW8iXSk6cD8oRT1bImhvdmVyQ2xvc2VzdDNkIl0sQz1bInJlc2V0Q2FtZXJhRGVmYXVsdDNkIiwicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIl0pOng/KFM9WyJ6b29tSW5NYXBib3giLCJ6b29tT3V0TWFwYm94Il0sRT1bInRvZ2dsZUhvdmVyIl0sQz1bInJlc2V0Vmlld01hcGJveCJdKTp2P0U9WyJob3ZlckNsb3Nlc3RHbDJkIl06Zz9FPVsiaG92ZXJDbG9zZXN0UGllIl06Xz8oRT1bImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsImhvdmVyQ29tcGFyZUNhcnRlc2lhbiJdLEM9WyJyZXNldFZpZXdTYW5rZXkiXSk6RT1bInRvZ2dsZUhvdmVyIl07aCYmKEU9WyJ0b2dnbGVTcGlrZWxpbmVzIiwiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIiwiaG92ZXJDb21wYXJlQ2FydGVzaWFuIl0pOyhmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZighYS50cmFjZUlzKHRbZV0sIm5vSG92ZXIiKSlyZXR1cm4hMTtyZXR1cm4hMH0ocil8fFQpJiYoRT1bXSk7IWgmJiF2fHx3fHwoUz1bInpvb21JbjJkIiwiem9vbU91dDJkIiwiYXV0b1NjYWxlMmQiXSwicmVzZXRWaWV3cyIhPT1DWzBdJiYoQz1bInJlc2V0U2NhbGUyZCJdKSk7cD9MPVsiem9vbTNkIiwicGFuM2QiLCJvcmJpdFJvdGF0aW9uIiwidGFibGVSb3RhdGlvbiJdOihofHx2KSYmIXd8fHk/TD1bInpvb20yZCIsInBhbjJkIl06eHx8ZD9MPVsicGFuMmQiXTpiJiYoTD1bInpvb20yZCJdKTsoZnVuY3Rpb24odCl7Zm9yKHZhciBlPSExLHI9MDtyPHQubGVuZ3RoJiYhZTtyKyspe3ZhciBuPXRbcl07bi5fbW9kdWxlJiZuLl9tb2R1bGUuc2VsZWN0UG9pbnRzJiYoYS50cmFjZUlzKG4sInNjYXR0ZXItbGlrZSIpPyhpLmhhc01hcmtlcnMobil8fGkuaGFzVGV4dChuKSkmJihlPSEwKTphLnRyYWNlSXMobiwiYm94LXZpb2xpbiIpJiYiYWxsIiE9PW4uYm94cG9pbnRzJiYiYWxsIiE9PW4ucG9pbnRzfHwoZT0hMCkpfXJldHVybiBlfSkocikmJkwucHVzaCgic2VsZWN0MmQiLCJsYXNzbzJkIik7aWYoQXJyYXkuaXNBcnJheShmKSl7Zm9yKHZhciBJPVtdLFA9MDtQPGYubGVuZ3RoO1ArKyl7dmFyIHo9ZltQXTsic3RyaW5nIj09dHlwZW9mIHo/LTEhPT1jLmluZGV4T2YoeikmJihlLl9oYXMoIm1hcGJveCIpfHxlLl9oYXMoImNhcnRlc2lhbiIpKSYmTC5wdXNoKHopOkkucHVzaCh6KX1mPUl9cmV0dXJuIE0oTCksTShTLmNvbmNhdChDKSksTShFKSxmdW5jdGlvbih0LGUpe2lmKGUubGVuZ3RoKWlmKEFycmF5LmlzQXJyYXkoZVswXSkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdC5wdXNoKGVbcl0pO2Vsc2UgdC5wdXNoKGUpO3JldHVybiB0fShrLGYpfSh0KSx1P3UudXBkYXRlKHQsZik6ZS5fbW9kZUJhcj1zKHQsZil9ZWxzZSB1JiYodS5kZXN0cm95KCksZGVsZXRlIGUuX21vZGVCYXIpfTt2YXIgYz1bImRyYXdsaW5lIiwiZHJhd29wZW5wYXRoIiwiZHJhd2Nsb3NlZHBhdGgiLCJkcmF3Y2lyY2xlIiwiZHJhd3JlY3QiLCJlcmFzZXNoYXBlIl19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjoxMjEyLCIuLi9meC9oZWxwZXJzIjo2NzksIi4vYnV0dG9ucyI6NzAyLCIuL21vZGViYXIiOjcwNX1dLDcwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vZm9udHMvcGxvdGljb24iKSxzPW5ldyBET01QYXJzZXI7ZnVuY3Rpb24gbCh0KXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy51cGRhdGUodC5ncmFwaEluZm8sdC5idXR0b25zKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfXZhciBjPWwucHJvdG90eXBlO2MudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5ncmFwaEluZm89dDt2YXIgcj10aGlzLmdyYXBoSW5mby5fY29udGV4dCxuPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LGk9Im1vZGViYXItIituLl91aWQ7dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLGkpLHRoaXMuX3VpZD1pLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9Im1vZGViYXIiLCJob3ZlciI9PT1yLmRpc3BsYXlNb2RlQmFyJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiBtb2RlYmFyLS1ob3ZlciBlYXNlLWJnIiksInYiPT09bi5tb2RlYmFyLm9yaWVudGF0aW9uJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiB2ZXJ0aWNhbCIsZT1lLnJldmVyc2UoKSk7dmFyIG89bi5tb2RlYmFyLHM9ImhvdmVyIj09PXIuZGlzcGxheU1vZGVCYXI/Ii5qcy1wbG90bHktcGxvdCAucGxvdGx5OmhvdmVyICI6IiI7YS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKGkpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLHMrIiMiK2krIiAubW9kZWJhci1ncm91cCIsImJhY2tncm91bmQtY29sb3I6ICIrby5iZ2NvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0biAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmNvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0bjpob3ZlciAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmFjdGl2ZWNvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0bi5hY3RpdmUgLmljb24gcGF0aCIsImZpbGw6ICIrby5hY3RpdmVjb2xvcik7dmFyIGw9IXRoaXMuaGFzQnV0dG9ucyhlKSxjPXRoaXMuaGFzTG9nbyE9PXIuZGlzcGxheWxvZ28sdT10aGlzLmxvY2FsZSE9PXIubG9jYWxlO2lmKHRoaXMubG9jYWxlPXIubG9jYWxlLChsfHxjfHx1KSYmKHRoaXMucmVtb3ZlQWxsQnV0dG9ucygpLHRoaXMudXBkYXRlQnV0dG9ucyhlKSxyLndhdGVybWFya3x8ci5kaXNwbGF5bG9nbykpe3ZhciBmPXRoaXMuZ2V0TG9nbygpO3Iud2F0ZXJtYXJrJiYoZi5jbGFzc05hbWU9Zi5jbGFzc05hbWUrIiB3YXRlcm1hcmsiKSwidiI9PT1uLm1vZGViYXIub3JpZW50YXRpb24/dGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShmLHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzWzBdKTp0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZiksdGhpcy5oYXNMb2dvPSEwfXRoaXMudXBkYXRlQWN0aXZlQnV0dG9uKCl9LGMudXBkYXRlQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYnV0dG9ucz10LHRoaXMuYnV0dG9uRWxlbWVudHM9W10sdGhpcy5idXR0b25zTmFtZXM9W10sdGhpcy5idXR0b25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPWUuY3JlYXRlR3JvdXAoKTt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQubmFtZTtpZighbil0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBidXR0b24gJ25hbWUnIGluIGJ1dHRvbiBjb25maWciKTtpZigtMSE9PWUuYnV0dG9uc05hbWVzLmluZGV4T2YobikpdGhyb3cgbmV3IEVycm9yKCJidXR0b24gbmFtZSAnIituKyInIGlzIHRha2VuIik7ZS5idXR0b25zTmFtZXMucHVzaChuKTt2YXIgaT1lLmNyZWF0ZUJ1dHRvbih0KTtlLmJ1dHRvbkVsZW1lbnRzLnB1c2goaSksci5hcHBlbmRDaGlsZChpKX0pKSxlLmVsZW1lbnQuYXBwZW5kQ2hpbGQocil9KSl9LGMuY3JlYXRlR3JvdXA9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5jbGFzc05hbWU9Im1vZGViYXItZ3JvdXAiLHR9LGMuY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ci5zZXRBdHRyaWJ1dGUoInJlbCIsInRvb2x0aXAiKSxyLmNsYXNzTmFtZT0ibW9kZWJhci1idG4iO3ZhciBpPXQudGl0bGU7dm9pZCAwPT09aT9pPXQubmFtZToiZnVuY3Rpb24iPT10eXBlb2YgaSYmKGk9aSh0aGlzLmdyYXBoSW5mbykpLChpfHwwPT09aSkmJnIuc2V0QXR0cmlidXRlKCJkYXRhLXRpdGxlIixpKSx2b2lkIDAhPT10LmF0dHImJnIuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLHQuYXR0cik7dmFyIGE9dC52YWw7aWYodm9pZCAwIT09YSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKHRoaXMuZ3JhcGhJbmZvKSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdmFsIixhKSksImZ1bmN0aW9uIiE9dHlwZW9mIHQuY2xpY2spdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgYnV0dG9uICdjbGljaycgZnVuY3Rpb24gaW4gYnV0dG9uIGNvbmZpZyIpO3IuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbihyKXt0LmNsaWNrKGUuZ3JhcGhJbmZvLHIpLGUudXBkYXRlQWN0aXZlQnV0dG9uKHIuY3VycmVudFRhcmdldCl9KSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIix0LnRvZ2dsZXx8ITEpLHQudG9nZ2xlJiZuLnNlbGVjdChyKS5jbGFzc2VkKCJhY3RpdmUiLCEwKTt2YXIgcz10Lmljb247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHM/ci5hcHBlbmRDaGlsZChzKCkpOnIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKHN8fG8ucXVlc3Rpb24pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1ncmF2aXR5Iix0LmdyYXZpdHl8fCJuIikscn0sYy5jcmVhdGVJY29uPWZ1bmN0aW9uKHQpe3ZhciBlLHI9aSh0LmhlaWdodCk/TnVtYmVyKHQuaGVpZ2h0KTp0LmFzY2VudC10LmRlc2NlbnQsbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2lmKHQucGF0aCl7KGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sInN2ZyIpKS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFswLDAsdC53aWR0aCxyXS5qb2luKCIgIikpLGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsImljb24iKTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwicGF0aCIpO2Euc2V0QXR0cmlidXRlKCJkIix0LnBhdGgpLHQudHJhbnNmb3JtP2Euc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQudHJhbnNmb3JtKTp2b2lkIDAhPT10LmFzY2VudCYmYS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsIm1hdHJpeCgxIDAgMCAtMSAwICIrdC5hc2NlbnQrIikiKSxlLmFwcGVuZENoaWxkKGEpfXQuc3ZnJiYoZT1zLnBhcnNlRnJvbVN0cmluZyh0LnN2ZywiYXBwbGljYXRpb24veG1sIikuY2hpbGROb2Rlc1swXSk7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxZW0iKSxlLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxZW0iKSxlfSxjLnVwZGF0ZUFjdGl2ZUJ1dHRvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxyPXZvaWQgMCE9PXQ/dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpOm51bGw7dGhpcy5idXR0b25FbGVtZW50cy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10LmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIikscz0idHJ1ZSI9PT10LmdldEF0dHJpYnV0ZSgiZGF0YS10b2dnbGUiKSxsPW4uc2VsZWN0KHQpO2lmKHMpbz09PXImJmwuY2xhc3NlZCgiYWN0aXZlIiwhbC5jbGFzc2VkKCJhY3RpdmUiKSk7ZWxzZXt2YXIgYz1udWxsPT09bz9vOmEubmVzdGVkUHJvcGVydHkoZSxvKS5nZXQoKTtsLmNsYXNzZWQoImFjdGl2ZSIsYz09PWkpfX0pKX0sYy5oYXNCdXR0b25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYnV0dG9ucztpZighZSlyZXR1cm4hMTtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXtpZih0W3JdLmxlbmd0aCE9PWVbcl0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7bisrKWlmKHRbcl1bbl0ubmFtZSE9PWVbcl1bbl0ubmFtZSlyZXR1cm4hMX1yZXR1cm4hMH0sYy5nZXRMb2dvPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jcmVhdGVHcm91cCgpLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3JldHVybiBlLmhyZWY9Imh0dHBzOi8vcGxvdGx5LmNvbS8iLGUudGFyZ2V0PSJfYmxhbmsiLGUuc2V0QXR0cmlidXRlKCJkYXRhLXRpdGxlIixhLl8odGhpcy5ncmFwaEluZm8sIlByb2R1Y2VkIHdpdGggUGxvdGx5IikpLGUuY2xhc3NOYW1lPSJtb2RlYmFyLWJ0biBwbG90bHlqc2ljb24gbW9kZWJhci1idG4tLWxvZ28iLGUuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKG8ubmV3cGxvdGx5bG9nbykpLHQuYXBwZW5kQ2hpbGQoZSksdH0sYy5yZW1vdmVBbGxCdXR0b25zPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZDspdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudC5maXJzdENoaWxkKTt0aGlzLmhhc0xvZ289ITF9LGMuZGVzdHJveT1mdW5jdGlvbigpe2EucmVtb3ZlRWxlbWVudCh0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubW9kZWJhciIpKSxhLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUodGhpcy5fdWlkKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPW5ldyBsKHtncmFwaEluZm86dCxjb250YWluZXI6ci5fbW9kZWJhcmRpdi5ub2RlKCksYnV0dG9uczplfSk7cmV0dXJuIHIuX3ByaXZhdGVwbG90JiZuLnNlbGVjdChpLmVsZW1lbnQpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoImJhZGdlLXByaXZhdGUgZmxvYXQtLWxlZnQiLCEwKS50ZXh0KCJQUklWQVRFIiksaX19LHsiLi4vLi4vZm9udHMvcGxvdGljb24iOjc1NywiLi4vLi4vbGliIjo3NzgsZDM6MTY5LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNzA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vY29sb3IvYXR0cmlidXRlcyIpLGE9KDAsdCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5KSgiYnV0dG9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHN0ZXA6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm1vbnRoIiwieWVhciIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJhbGwiXSxkZmx0OiJtb250aCIsZWRpdFR5cGU6InBsb3QifSxzdGVwbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmFja3dhcmQiLCJ0b2RhdGUiXSxkZmx0OiJiYWNrd2FyZCIsZWRpdFR5cGU6InBsb3QifSxjb3VudDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0pO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxidXR0b25zOmEseDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6InBsb3QifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6InBsb3QifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxlZGl0VHlwZToicGxvdCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJib3R0b20iLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHtlZGl0VHlwZToicGxvdCJ9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToicGxvdCJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In19LHsiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE3LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi4vY29sb3IvYXR0cmlidXRlcyI6NjQyfV0sNzA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17eVBhZDouMDIsbWluQnV0dG9uV2lkdGg6MzAscng6MyxyeTozLGxpZ2h0QW1vdW50OjI1LGRhcmtBbW91bnQ6MTB9fSx7fV0sNzA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGModCxlLHIsaSl7dmFyIGE9aS5jYWxlbmRhcjtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLmJ1dHRvbnMscixpKX1pZihvKCJ2aXNpYmxlIikpe3ZhciBsPW8oInN0ZXAiKTsiYWxsIiE9PWwmJighYXx8ImdyZWdvcmlhbiI9PT1hfHwibW9udGgiIT09bCYmInllYXIiIT09bD9vKCJzdGVwbW9kZSIpOmUuc3RlcG1vZGU9ImJhY2t3YXJkIixvKCJjb3VudCIpKSxvKCJsYWJlbCIpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSxmKXt2YXIgaD10LnJhbmdlc2VsZWN0b3J8fHt9LHA9YS5uZXdDb250YWluZXIoZSwicmFuZ2VzZWxlY3RvciIpO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4gbi5jb2VyY2UoaCxwLHMsdCxlKX1pZihkKCJ2aXNpYmxlIixvKGgscCx7bmFtZToiYnV0dG9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmMsY2FsZW5kYXI6Zn0pLmxlbmd0aD4wKSl7dmFyIGc9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1yLmZpbHRlcigoZnVuY3Rpb24ocil7cmV0dXJuIGVbcl0uYW5jaG9yPT09dC5faWR9KSksaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ZVtuW2FdXS5kb21haW47byYmKGk9TWF0aC5tYXgob1sxXSxpKSl9cmV0dXJuW3QuZG9tYWluWzBdLGkrbC55UGFkXX0oZSxyLHUpO2QoIngiLGdbMF0pLGQoInkiLGdbMV0pLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLGQoInhhbmNob3IiKSxkKCJ5YW5jaG9yIiksbi5jb2VyY2VGb250KGQsImZvbnQiLHIuZm9udCk7dmFyIG09ZCgiYmdjb2xvciIpO2QoImFjdGl2ZWNvbG9yIixpLmNvbnRyYXN0KG0sbC5saWdodEFtb3VudCxsLmRhcmtBbW91bnQpKSxkKCJib3JkZXJjb2xvciIpLGQoImJvcmRlcndpZHRoIil9fX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE3LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjgyMywiLi4vY29sb3IiOjY0MywiLi9hdHRyaWJ1dGVzIjo3MDYsIi4vY29uc3RhbnRzIjo3MDd9XSw3MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vY29sb3IiKSxzPXQoIi4uL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpLGM9bC5zdHJUcmFuc2xhdGUsdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGg9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLHA9aC5MSU5FX1NQQUNJTkcsZD1oLkZST01fVEwsZz1oLkZST01fQlIsbT10KCIuL2NvbnN0YW50cyIpLHY9dCgiLi9nZXRfdXBkYXRlX29iamVjdCIpO2Z1bmN0aW9uIHkodCl7cmV0dXJuIHQuX2lkfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPWwuZW5zdXJlU2luZ2xlKHQsInJlY3QiLCJzZWxlY3Rvci1yZWN0IiwoZnVuY3Rpb24odCl7dC5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KSk7bi5hdHRyKHtyeDptLnJ4LHJ5Om0ucnl9KSxuLmNhbGwoby5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChvLmZpbGwsZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5faXNBY3RpdmV8fGUuX2lzSG92ZXJlZD90LmFjdGl2ZWNvbG9yOnQuYmdjb2xvcn0oZSxyKSkuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBiKHQsZSxyLG4pe2wuZW5zdXJlU2luZ2xlKHQsInRleHQiLCJzZWxlY3Rvci10ZXh0IiwoZnVuY3Rpb24odCl7dC5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpfSkpLmNhbGwocy5mb250LGUuZm9udCkudGV4dChmdW5jdGlvbih0LGUpe2lmKHQubGFiZWwpcmV0dXJuIGU/bC50ZW1wbGF0ZVN0cmluZyh0LmxhYmVsLGUpOnQubGFiZWw7cmV0dXJuImFsbCI9PT10LnN0ZXA/ImFsbCI6dC5jb3VudCt0LnN0ZXAuY2hhckF0KDApfShyLG4uX2Z1bGxMYXlvdXQuX21ldGEpKS5jYWxsKChmdW5jdGlvbih0KXt1LmNvbnZlcnRUb1RzcGFucyh0LG4pfSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIucmFuZ2VzZWxlY3RvciIpLmRhdGEoZnVuY3Rpb24odCl7Zm9yKHZhciBlPWYubGlzdCh0LCJ4IiwhMCkscj1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aS5yYW5nZXNlbGVjdG9yJiZpLnJhbmdlc2VsZWN0b3IudmlzaWJsZSYmci5wdXNoKGkpfXJldHVybiByfSh0KSx5KTtlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmFuZ2VzZWxlY3RvciIsITApLGUuZXhpdCgpLnJlbW92ZSgpLGUuc3R5bGUoe2N1cnNvcjoicG9pbnRlciIsInBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLGUuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1lLGY9by5yYW5nZXNlbGVjdG9yLGg9ci5zZWxlY3RBbGwoImcuYnV0dG9uIikuZGF0YShsLmZpbHRlclZpc2libGUoZi5idXR0b25zKSk7aC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJ1dHRvbiIsITApLGguZXhpdCgpLnJlbW92ZSgpLGguZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT12KG8sZSk7ZS5faXNBY3RpdmU9ZnVuY3Rpb24odCxlLHIpe2lmKCJhbGwiPT09ZS5zdGVwKXJldHVybiEwPT09dC5hdXRvcmFuZ2U7dmFyIG49T2JqZWN0LmtleXMocik7cmV0dXJuIHQucmFuZ2VbMF09PT1yW25bMF1dJiZ0LnJhbmdlWzFdPT09cltuWzFdXX0obyxlLGEpLHIuY2FsbCh4LGYsZSksci5jYWxsKGIsZixlLHQpLHIub24oImNsaWNrIiwoZnVuY3Rpb24oKXt0Ll9kcmFnZ2VkfHxpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxhKX0pKSxyLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe2UuX2lzSG92ZXJlZD0hMCxyLmNhbGwoeCxmLGUpfSkpLHIub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtlLl9pc0hvdmVyZWQ9ITEsci5jYWxsKHgsZixlKX0pKX0pKSxmdW5jdGlvbih0LGUscixpLG8pe3ZhciBmPTAsaD0wLHY9ci5ib3JkZXJ3aWR0aDtlLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcykuc2VsZWN0KCIuc2VsZWN0b3ItdGV4dCIpLGU9ci5mb250LnNpemUqcCxpPU1hdGgubWF4KGUqdS5saW5lQ291bnQodCksMTYpKzM7aD1NYXRoLm1heChoLGkpfSkpLGUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXQuc2VsZWN0KCIuc2VsZWN0b3ItcmVjdCIpLGk9dC5zZWxlY3QoIi5zZWxlY3Rvci10ZXh0IiksYT1pLm5vZGUoKSYmcy5iQm94KGkubm9kZSgpKS53aWR0aCxvPXIuZm9udC5zaXplKnAsbD11LmxpbmVDb3VudChpKSxkPU1hdGgubWF4KGErMTAsbS5taW5CdXR0b25XaWR0aCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLGModitmLHYpKSxlLmF0dHIoe3g6MCx5OjAsd2lkdGg6ZCxoZWlnaHQ6aH0pLHUucG9zaXRpb25UZXh0KGksZC8yLGgvMi0obC0xKSpvLzIrMyksZis9ZCs1fSkpO3ZhciB5PXQuX2Z1bGxMYXlvdXQuX3NpemUseD15LmwreS53KnIueCxiPXkudCt5LmgqKDEtci55KSxfPSJsZWZ0IjtsLmlzUmlnaHRBbmNob3IocikmJih4LT1mLF89InJpZ2h0Iik7bC5pc0NlbnRlckFuY2hvcihyKSYmKHgtPWYvMixfPSJjZW50ZXIiKTt2YXIgdz0idG9wIjtsLmlzQm90dG9tQW5jaG9yKHIpJiYoYi09aCx3PSJib3R0b20iKTtsLmlzTWlkZGxlQW5jaG9yKHIpJiYoYi09aC8yLHc9Im1pZGRsZSIpO2Y9TWF0aC5jZWlsKGYpLGg9TWF0aC5jZWlsKGgpLHg9TWF0aC5yb3VuZCh4KSxiPU1hdGgucm91bmQoYiksYS5hdXRvTWFyZ2luKHQsaSsiLXJhbmdlLXNlbGVjdG9yIix7eDpyLngseTpyLnksbDpmKmRbX10scjpmKmdbX10sYjpoKmdbd10sdDpoKmRbd119KSxvLmF0dHIoInRyYW5zZm9ybSIsYyh4LGIpKX0odCxoLGYsby5fbmFtZSxyKX0pKX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ1LCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODMxLCIuLi8uLi9wbG90cy9wbG90cyI6ODkxLCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuLi9jb2xvciI6NjQzLCIuLi9kcmF3aW5nIjo2NjUsIi4vY29uc3RhbnRzIjo3MDcsIi4vZ2V0X3VwZGF0ZV9vYmplY3QiOjcxMCxkMzoxNjl9XSw3MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9uYW1lLGk9e307aWYoImFsbCI9PT1lLnN0ZXApaVtyKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgYT1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5yYW5nZSxhPW5ldyBEYXRlKHQucjJsKGlbMV0pKSxvPWUuc3RlcCxzPWUuY291bnQ7c3dpdGNoKGUuc3RlcG1vZGUpe2Nhc2UiYmFja3dhcmQiOnI9dC5sMnIoK24udGltZVtvXS51dGMub2Zmc2V0KGEsLXMpKTticmVhaztjYXNlInRvZGF0ZSI6dmFyIGw9bi50aW1lW29dLnV0Yy5vZmZzZXQoYSwtcyk7cj10Lmwycigrbi50aW1lW29dLnV0Yy5jZWlsKGwpKX12YXIgYz1pWzFdO3JldHVybltyLGNdfSh0LGUpO2lbcisiLnJhbmdlWzBdIl09YVswXSxpW3IrIi5yYW5nZVsxXSJdPWFbMV19cmV0dXJuIGl9fSx7ZDM6MTY5fV0sNzExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNlbGVjdG9yIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzZWxlY3Rvcjp0KCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjcwNiwiLi9kZWZhdWx0cyI6NzA4LCIuL2RyYXciOjcwOX1dLDcxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmQsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9fSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDouMTUsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi9jb2xvci9hdHRyaWJ1dGVzIjo2NDJ9XSw3MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikubGlzdCxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2UsYT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bih0LCJ4IiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdLHM9b1thLm5hbWVdO3MmJnMudmlzaWJsZSYmcy5hdXRvcmFuZ2UmJihzLl9pbnB1dC5hdXRvcmFuZ2U9ITAscy5faW5wdXQucmFuZ2U9cy5yYW5nZT1pKHQsbykpfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6ODI3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi9jb25zdGFudHMiOjcxNH1dLDcxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InJhbmdlc2xpZGVyIixjb250YWluZXJDbGFzc05hbWU6InJhbmdlc2xpZGVyLWNvbnRhaW5lciIsYmdDbGFzc05hbWU6InJhbmdlc2xpZGVyLWJnIixyYW5nZVBsb3RDbGFzc05hbWU6InJhbmdlc2xpZGVyLXJhbmdlcGxvdCIsbWFza01pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1taW4iLG1hc2tNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4IixzbGlkZUJveENsYXNzTmFtZToicmFuZ2VzbGlkZXItc2xpZGVib3giLGdyYWJiZXJNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWluIixncmFiQXJlYU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWluIixoYW5kbGVNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1taW4iLGdyYWJiZXJNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWF4IixncmFiQXJlYU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWF4IixoYW5kbGVNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1tYXgiLG1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1pbi1vcHAtYXhpcyIsbWFza01heE9wcEF4aXNDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4LW9wcC1heGlzIixtYXNrQ29sb3I6InJnYmEoMCwwLDAsMC40KSIsbWFza09wcEF4aXNDb2xvcjoicmdiYSgwLDAsMCwwLjIpIixzbGlkZUJveEZpbGw6InRyYW5zcGFyZW50IixzbGlkZUJveEN1cnNvcjoiZXctcmVzaXplIixncmFiQXJlYUZpbGw6InRyYW5zcGFyZW50IixncmFiQXJlYUN1cnNvcjoiY29sLXJlc2l6ZSIsZ3JhYkFyZWFXaWR0aDoxMCxoYW5kbGVXaWR0aDo0LGhhbmRsZVJhZGl1czoxLGhhbmRsZVN0cm9rZVdpZHRoOjEsZXh0cmFQYWQ6MTV9fSx7fV0sNzE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD10W3JdLGM9ZVtyXTtpZihsLnJhbmdlc2xpZGVyfHxlLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbYy5faWRdKXtuLmlzUGxhaW5PYmplY3QobC5yYW5nZXNsaWRlcil8fChsLnJhbmdlc2xpZGVyPXt9KTt2YXIgdSxmLGg9bC5yYW5nZXNsaWRlcixwPWkubmV3Q29udGFpbmVyKGMsInJhbmdlc2xpZGVyIik7aWYoXygidmlzaWJsZSIpKXtfKCJiZ2NvbG9yIixlLnBsb3RfYmdjb2xvciksXygiYm9yZGVyY29sb3IiKSxfKCJib3JkZXJ3aWR0aCIpLF8oInRoaWNrbmVzcyIpLF8oImF1dG9yYW5nZSIsIWMuaXNWYWxpZFJhbmdlKGgucmFuZ2UpKSxfKCJyYW5nZSIpO3ZhciBkPWUuX3N1YnBsb3RzO2lmKGQpZm9yKHZhciBnPWQuY2FydGVzaWFuLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKDAsdC5pbmRleE9mKCJ5IikpPT09YS5uYW1lMmlkKHIpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKHQuaW5kZXhPZigieSIpLHQubGVuZ3RoKX0pKSxtPW4uc2ltcGxlTWFwKGcsYS5pZDJuYW1lKSx2PTA7djxtLmxlbmd0aDt2Kyspe3ZhciB5PW1bdl07dT1oW3ldfHx7fSxmPWkubmV3Q29udGFpbmVyKHAseSwieWF4aXMiKTt2YXIgeCxiPWVbeV07dS5yYW5nZSYmYi5pc1ZhbGlkUmFuZ2UodS5yYW5nZSkmJih4PSJmaXhlZCIpLCJtYXRjaCIhPT13KCJyYW5nZW1vZGUiLHgpJiZ3KCJyYW5nZSIsYi5yYW5nZS5zbGljZSgpKX1wLl9pbnB1dD1ofX1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIG4uY29lcmNlKGgscCxvLHQsZSl9ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBuLmNvZXJjZSh1LGYscyx0LGUpfX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4vYXR0cmlidXRlcyI6NzEyLCIuL29wcGF4aXNfYXR0cmlidXRlcyI6NzE5fV0sNzE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJUcmFuc2xhdGUsbD10KCIuLi9kcmF3aW5nIiksYz10KCIuLi9jb2xvciIpLHU9dCgiLi4vdGl0bGVzIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLHA9dCgiLi4vZHJhZ2VsZW1lbnQiKSxkPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxnPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gbSh0LGUscixuKXt2YXIgaT1vLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixnLmJnQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3g6MCx5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSksYT1uLmJvcmRlcndpZHRoJTI9PTA/bi5ib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLTEsYz0tbi5fb2Zmc2V0U2hpZnQsdT1sLmNyaXNwUm91bmQoZSxuLmJvcmRlcndpZHRoKTtpLmF0dHIoe3dpZHRoOm4uX3dpZHRoK2EsaGVpZ2h0Om4uX2hlaWdodCthLHRyYW5zZm9ybTpzKGMsYyksZmlsbDpuLmJnY29sb3Isc3Ryb2tlOm4uYm9yZGVyY29sb3IsInN0cm9rZS13aWR0aCI6dX0pfWZ1bmN0aW9uIHYodCxlLHIsbil7dmFyIGk9ZS5fZnVsbExheW91dDtvLmVuc3VyZVNpbmdsZUJ5SWQoaS5fdG9wZGVmcywiY2xpcFBhdGgiLG4uX2NsaXBJZCwoZnVuY3Rpb24odCl7dC5hcHBlbmQoInJlY3QiKS5hdHRyKHt4OjAseTowfSl9KSkuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6bi5fd2lkdGgsaGVpZ2h0Om4uX2hlaWdodH0pfWZ1bmN0aW9uIHkodCxlLHIsaSl7dmFyIHMsYz1lLmNhbGNkYXRhLHU9dC5zZWxlY3RBbGwoImcuIitnLnJhbmdlUGxvdENsYXNzTmFtZSkuZGF0YShyLl9zdWJwbG90c1dpdGgsby5pZGVudGl0eSk7dS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuIGcucmFuZ2VQbG90Q2xhc3NOYW1lKyIgIit0fSkpLmNhbGwobC5zZXRDbGlwVXJsLGkuX2NsaXBJZCxlKSx1Lm9yZGVyKCksdS5leGl0KCkucmVtb3ZlKCksdS5lYWNoKChmdW5jdGlvbih0LG8pe3ZhciBsPW4uc2VsZWN0KHRoaXMpLHU9MD09PW8scD1oLmdldEZyb21JZChlLHQsInkiKSxkPXAuX25hbWUsZz1pW2RdLG09e2RhdGE6W10sbGF5b3V0Ont4YXhpczp7dHlwZTpyLnR5cGUsZG9tYWluOlswLDFdLHJhbmdlOmkucmFuZ2Uuc2xpY2UoKSxjYWxlbmRhcjpyLmNhbGVuZGFyfSx3aWR0aDppLl93aWR0aCxoZWlnaHQ6aS5faGVpZ2h0LG1hcmdpbjp7dDowLGI6MCxsOjAscjowfX0sX2NvbnRleHQ6ZS5fY29udGV4dH07ci5yYW5nZWJyZWFrcyYmKG0ubGF5b3V0LnhheGlzLnJhbmdlYnJlYWtzPXIucmFuZ2VicmVha3MpLG0ubGF5b3V0W2RdPXt0eXBlOnAudHlwZSxkb21haW46WzAsMV0scmFuZ2U6Im1hdGNoIiE9PWcucmFuZ2Vtb2RlP2cucmFuZ2Uuc2xpY2UoKTpwLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6cC5jYWxlbmRhcn0scC5yYW5nZWJyZWFrcyYmKG0ubGF5b3V0W2RdLnJhbmdlYnJlYWtzPXAucmFuZ2VicmVha3MpLGEuc3VwcGx5RGVmYXVsdHMobSk7dmFyIHY9bS5fZnVsbExheW91dC54YXhpcyx5PW0uX2Z1bGxMYXlvdXRbZF07di5jbGVhckNhbGMoKSx2LnNldFNjYWxlKCkseS5jbGVhckNhbGMoKSx5LnNldFNjYWxlKCk7dmFyIHg9e2lkOnQscGxvdGdyb3VwOmwseGF4aXM6dix5YXhpczp5LGlzUmFuZ2VQbG90OiEwfTt1P3M9eDooeC5tYWlucGxvdD0ieHkiLHgubWFpbnBsb3RpbmZvPXMpLGYucmFuZ2VQbG90KGUseCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlO2EueGF4aXMrYS55YXhpcz09PWUmJnIucHVzaChpKX1yZXR1cm4gcn0oYyx0KSl9KSl9ZnVuY3Rpb24geCh0LGUscixuLGkpeyhvLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixnLm1hc2tNaW5DbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7eDowLHk6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCkuY2FsbChjLmZpbGwsZy5tYXNrQ29sb3IpLG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGcubWFza01heENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLmNhbGwoYy5maWxsLGcubWFza0NvbG9yKSwibWF0Y2giIT09aS5yYW5nZW1vZGUpJiYoby5lbnN1cmVTaW5nbGUodCwicmVjdCIsZy5tYXNrTWluT3BwQXhpc0NsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cigid2lkdGgiLG4uX3dpZHRoKS5jYWxsKGMuZmlsbCxnLm1hc2tPcHBBeGlzQ29sb3IpLG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGcubWFza01heE9wcEF4aXNDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoIndpZHRoIixuLl93aWR0aCkuc3R5bGUoImJvcmRlci10b3AiLGcubWFza09wcEJvcmRlcikuY2FsbChjLmZpbGwsZy5tYXNrT3BwQXhpc0NvbG9yKSl9ZnVuY3Rpb24gYih0LGUscixuKXtlLl9jb250ZXh0LnN0YXRpY1Bsb3R8fG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGcuc2xpZGVCb3hDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLGN1cnNvcjpnLnNsaWRlQm94Q3Vyc29yLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoe2hlaWdodDpuLl9oZWlnaHQsZmlsbDpnLnNsaWRlQm94RmlsbH0pfWZ1bmN0aW9uIF8odCxlLHIsbil7dmFyIGk9by5lbnN1cmVTaW5nbGUodCwiZyIsZy5ncmFiYmVyTWluQ2xhc3NOYW1lKSxhPW8uZW5zdXJlU2luZ2xlKHQsImciLGcuZ3JhYmJlck1heENsYXNzTmFtZSkscz17eDowLHdpZHRoOmcuaGFuZGxlV2lkdGgscng6Zy5oYW5kbGVSYWRpdXMsZmlsbDpjLmJhY2tncm91bmQsc3Ryb2tlOmMuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6Zy5oYW5kbGVTdHJva2VXaWR0aCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9LGw9e3k6TWF0aC5yb3VuZChuLl9oZWlnaHQvNCksaGVpZ2h0Ok1hdGgucm91bmQobi5faGVpZ2h0LzIpfTtvLmVuc3VyZVNpbmdsZShpLCJyZWN0IixnLmhhbmRsZU1pbkNsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHMpfSkpLmF0dHIobCksby5lbnN1cmVTaW5nbGUoYSwicmVjdCIsZy5oYW5kbGVNYXhDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cihzKX0pKS5hdHRyKGwpO3ZhciB1PXt3aWR0aDpnLmdyYWJBcmVhV2lkdGgseDowLHk6MCxmaWxsOmcuZ3JhYkFyZWFGaWxsLGN1cnNvcjplLl9jb250ZXh0LnN0YXRpY1Bsb3Q/dm9pZCAwOmcuZ3JhYkFyZWFDdXJzb3J9O28uZW5zdXJlU2luZ2xlKGksInJlY3QiLGcuZ3JhYkFyZWFNaW5DbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih1KX0pKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCksby5lbnN1cmVTaW5nbGUoYSwicmVjdCIsZy5ncmFiQXJlYU1heENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHUpfSkpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9yYW5nZVNsaWRlckRhdGEsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbD1yW2FdW2cubmFtZV07bC5fY2xpcElkPWwuX2lkKyItIitlLl91aWR9dmFyIGM9ZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK2cuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9uYW1lfSkpO2MuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPXRbZy5uYW1lXTtlLl90b3BkZWZzLnNlbGVjdCgiIyIrci5fY2xpcElkKS5yZW1vdmUoKX0pKS5yZW1vdmUoKSwwIT09ci5sZW5ndGgmJihjLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChnLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxjLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLGw9cltnLm5hbWVdLGM9ZVtoLmlkMm5hbWUoci5hbmNob3IpXSxmPWxbaC5pZDJuYW1lKHIuYW5jaG9yKV07aWYobC5yYW5nZSl7dmFyIHcsVD1vLnNpbXBsZU1hcChsLnJhbmdlLHIucjJsKSxrPW8uc2ltcGxlTWFwKHIucmFuZ2Usci5yMmwpO3c9a1swXTxrWzFdP1tNYXRoLm1pbihUWzBdLGtbMF0pLE1hdGgubWF4KFRbMV0sa1sxXSldOltNYXRoLm1heChUWzBdLGtbMF0pLE1hdGgubWluKFRbMV0sa1sxXSldLGwucmFuZ2U9bC5faW5wdXQucmFuZ2U9by5zaW1wbGVNYXAodyxyLmwycil9ci5jbGVhblJhbmdlKCJyYW5nZXNsaWRlci5yYW5nZSIpO3ZhciBNPWUuX3NpemUsQT1yLmRvbWFpbjtsLl93aWR0aD1NLncqKEFbMV0tQVswXSk7dmFyIFM9TWF0aC5yb3VuZChNLmwrTS53KkFbMF0pLEU9TWF0aC5yb3VuZChNLnQrTS5oKigxLXIuX2NvdW50ZXJEb21haW5NaW4pKygiYm90dG9tIj09PXIuc2lkZT9yLl9kZXB0aDowKStsLl9vZmZzZXRTaGlmdCtnLmV4dHJhUGFkKTthLmF0dHIoInRyYW5zZm9ybSIscyhTLEUpKSxsLl9ybD1vLnNpbXBsZU1hcChsLnJhbmdlLHIucjJsKTt2YXIgQz1sLl9ybFswXSxMPWwuX3JsWzFdLEk9TC1DO2lmKGwucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB0L2wuX3dpZHRoKkkrQ30sbC5kMnA9ZnVuY3Rpb24odCl7cmV0dXJuKHQtQykvSSpsLl93aWR0aH0sci5yYW5nZWJyZWFrcyl7dmFyIFA9ci5sb2NhdGVCcmVha3MoQyxMKTtpZihQLmxlbmd0aCl7dmFyIHosTyxEPTA7Zm9yKHo9MDt6PFAubGVuZ3RoO3orKylEKz0oTz1QW3pdKS5tYXgtTy5taW47dmFyIFI9bC5fd2lkdGgvKEwtQy1EKSxGPVstUipDXTtmb3Ioej0wO3o8UC5sZW5ndGg7eisrKU89UFt6XSxGLnB1c2goRltGLmxlbmd0aC0xXS1SKihPLm1heC1PLm1pbikpO2ZvcihsLmQycD1mdW5jdGlvbih0KXtmb3IodmFyIGU9RlswXSxyPTA7cjxQLmxlbmd0aDtyKyspe3ZhciBuPVBbcl07aWYodD49bi5tYXgpZT1GW3IrMV07ZWxzZSBpZih0PG4ubWluKWJyZWFrfXJldHVybiBlK1IqdH0sej0wO3o8UC5sZW5ndGg7eisrKShPPVBbel0pLnBtaW49bC5kMnAoTy5taW4pLE8ucG1heD1sLmQycChPLm1heCk7bC5wMmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUZbMF0scj0wO3I8UC5sZW5ndGg7cisrKXt2YXIgbj1QW3JdO2lmKHQ+PW4ucG1heCllPUZbcisxXTtlbHNlIGlmKHQ8bi5wbWluKWJyZWFrfXJldHVybih0LWUpL1J9fX1pZigibWF0Y2giIT09Zi5yYW5nZW1vZGUpe3ZhciBCPWMucjJsKGYucmFuZ2VbMF0pLE49Yy5yMmwoZi5yYW5nZVsxXSktQjtsLmQycE9wcEF4aXM9ZnVuY3Rpb24odCl7cmV0dXJuKHQtQikvTipsLl9oZWlnaHR9fWEuY2FsbChtLHQscixsKS5jYWxsKHYsdCxyLGwpLmNhbGwoeSx0LHIsbCkuY2FsbCh4LHQscixsLGYpLmNhbGwoYix0LHIsbCkuY2FsbChfLHQscixsKSxmdW5jdGlvbih0LGUscixhKXtpZihlLl9jb250ZXh0LnN0YXRpY1Bsb3QpcmV0dXJuO3ZhciBzPXQuc2VsZWN0KCJyZWN0LiIrZy5zbGlkZUJveENsYXNzTmFtZSkubm9kZSgpLGw9dC5zZWxlY3QoInJlY3QuIitnLmdyYWJBcmVhTWluQ2xhc3NOYW1lKS5ub2RlKCksYz10LnNlbGVjdCgicmVjdC4iK2cuZ3JhYkFyZWFNYXhDbGFzc05hbWUpLm5vZGUoKTtmdW5jdGlvbiB1KCl7dmFyIHU9bi5ldmVudCxmPXUudGFyZ2V0LGg9dS5jbGllbnRYfHx1LnRvdWNoZXNbMF0uY2xpZW50WCxnPWgtdC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxtPWEuZDJwKHIuX3JsWzBdKSx2PWEuZDJwKHIuX3JsWzFdKSx5PXAuY292ZXJTbGlwKCk7ZnVuY3Rpb24geCh0KXt2YXIgdSxwLHgsYj0rKHQuY2xpZW50WHx8dC50b3VjaGVzWzBdLmNsaWVudFgpLWg7c3dpdGNoKGYpe2Nhc2Ugczp4PSJldy1yZXNpemUiLHU9bStiLHA9ditiO2JyZWFrO2Nhc2UgbDp4PSJjb2wtcmVzaXplIix1PW0rYixwPXY7YnJlYWs7Y2FzZSBjOng9ImNvbC1yZXNpemUiLHU9bSxwPXYrYjticmVhaztkZWZhdWx0Ong9ImV3LXJlc2l6ZSIsdT1nLHA9ZytifWlmKHA8dSl7dmFyIF89cDtwPXUsdT1ffWEuX3BpeGVsTWluPXUsYS5fcGl4ZWxNYXg9cCxkKG4uc2VsZWN0KHkpLHgpLGZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGEodCl7cmV0dXJuIHIubDJyKG8uY29uc3RyYWluKHQsbi5fcmxbMF0sbi5fcmxbMV0pKX12YXIgcz1hKG4ucDJkKG4uX3BpeGVsTWluKSksbD1hKG4ucDJkKG4uX3BpeGVsTWF4KSk7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXtpLmNhbGwoIl9ndWlSZWxheW91dCIsZSxyLl9uYW1lKyIucmFuZ2UiLFtzLGxdKX0pKX0oMCxlLHIsYSl9ZnVuY3Rpb24gYigpe3kucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix4KSx5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGIpLHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix4KSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixiKSxvLnJlbW92ZUVsZW1lbnQoeSl9dGhpcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGIpLHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix4KSx5LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGIpfXQub24oIm1vdXNlZG93biIsdSksdC5vbigidG91Y2hzdGFydCIsdSl9KGEsdCxyLGwpLGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbD1nLmhhbmRsZVdpZHRoLzI7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gby5jb25zdHJhaW4odCwwLG4uX3dpZHRoKX1mdW5jdGlvbiB1KHQpe3JldHVybiBvLmNvbnN0cmFpbih0LDAsbi5faGVpZ2h0KX1mdW5jdGlvbiBmKHQpe3JldHVybiBvLmNvbnN0cmFpbih0LC1sLG4uX3dpZHRoK2wpfXZhciBoPWMobi5kMnAoci5fcmxbMF0pKSxwPWMobi5kMnAoci5fcmxbMV0pKTtpZih0LnNlbGVjdCgicmVjdC4iK2cuc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoIngiLGgpLmF0dHIoIndpZHRoIixwLWgpLHQuc2VsZWN0KCJyZWN0LiIrZy5tYXNrTWluQ2xhc3NOYW1lKS5hdHRyKCJ3aWR0aCIsaCksdC5zZWxlY3QoInJlY3QuIitnLm1hc2tNYXhDbGFzc05hbWUpLmF0dHIoIngiLHApLmF0dHIoIndpZHRoIixuLl93aWR0aC1wKSwibWF0Y2giIT09YS5yYW5nZW1vZGUpe3ZhciBkPW4uX2hlaWdodC11KG4uZDJwT3BwQXhpcyhpLl9ybFsxXSkpLG09bi5faGVpZ2h0LXUobi5kMnBPcHBBeGlzKGkuX3JsWzBdKSk7dC5zZWxlY3QoInJlY3QuIitnLm1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKCJ4IixoKS5hdHRyKCJoZWlnaHQiLGQpLmF0dHIoIndpZHRoIixwLWgpLHQuc2VsZWN0KCJyZWN0LiIrZy5tYXNrTWF4T3BwQXhpc0NsYXNzTmFtZSkuYXR0cigieCIsaCkuYXR0cigieSIsbSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQtbSkuYXR0cigid2lkdGgiLHAtaCksdC5zZWxlY3QoInJlY3QuIitnLnNsaWRlQm94Q2xhc3NOYW1lKS5hdHRyKCJ5IixkKS5hdHRyKCJoZWlnaHQiLG0tZCl9dmFyIHY9TWF0aC5yb3VuZChmKGgtbCkpLS41LHk9TWF0aC5yb3VuZChmKHAtbCkpKy41O3Quc2VsZWN0KCJnLiIrZy5ncmFiYmVyTWluQ2xhc3NOYW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLHModiwuNSkpLHQuc2VsZWN0KCJnLiIrZy5ncmFiYmVyTWF4Q2xhc3NOYW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLHMoeSwuNSkpfShhLDAscixsLGMsZiksImJvdHRvbSI9PT1yLnNpZGUmJnUuZHJhdyh0LHIuX2lkKyJ0aXRsZSIse3Byb3BDb250YWluZXI6cixwcm9wTmFtZTpyLl9uYW1lKyIudGl0bGUiLHBsYWNlaG9sZGVyOmUuX2RmbHRUaXRsZS54LGF0dHJpYnV0ZXM6e3g6ci5fb2Zmc2V0K3IuX2xlbmd0aC8yLHk6RStsLl9oZWlnaHQrbC5fb2Zmc2V0U2hpZnQrMTArMS41KnIudGl0bGUuZm9udC5zaXplLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9KSkpfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL3NldGN1cnNvciI6Nzk5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4OTEsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL2NvbG9yIjo2NDMsIi4uL2RyYWdlbGVtZW50Ijo2NjIsIi4uL2RyYXdpbmciOjY2NSwiLi4vdGl0bGVzIjo3MzgsIi4vY29uc3RhbnRzIjo3MTQsZDM6MTY5fV0sNzE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGk9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYT10KCIuL2NvbnN0YW50cyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxzPWEubmFtZTtmdW5jdGlvbiBsKHQpe3ZhciBlPXQmJnRbc107cmV0dXJuIGUmJmUudmlzaWJsZX1yLmlzVmlzaWJsZT1sLHIubWFrZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9bi5saXN0KHtfZnVsbExheW91dDp0fSwieCIsITApLHI9dC5tYXJnaW4saT1bXTtpZighdC5faGFzKCJnbDJkIikpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPWVbYV07aWYobChvKSl7aS5wdXNoKG8pO3ZhciBjPW9bc107Yy5faWQ9cytvLl9pZCxjLl9oZWlnaHQ9KHQuaGVpZ2h0LXIuYi1yLnQpKmMudGhpY2tuZXNzLGMuX29mZnNldFNoaWZ0PU1hdGguZmxvb3IoYy5ib3JkZXJ3aWR0aC8yKX19dC5fcmFuZ2VTbGlkZXJEYXRhPWl9LHIuYXV0b01hcmdpbk9wdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ZVtzXSxsPWUuX2lkLmNoYXJBdCgwKSxjPTAsdT0wOyJib3R0b20iPT09ZS5zaWRlJiYoYz1lLl9kZXB0aCxlLnRpdGxlLnRleHQhPT1yLl9kZmx0VGl0bGVbbF0mJih1PTEuNSplLnRpdGxlLmZvbnQuc2l6ZSsxMCtuLl9vZmZzZXRTaGlmdCx1Kz0oZS50aXRsZS50ZXh0Lm1hdGNoKGkuQlJfVEFHX0FMTCl8fFtdKS5sZW5ndGgqZS50aXRsZS5mb250LnNpemUqbykpO3JldHVybnt4OjAseTplLl9jb3VudGVyRG9tYWluTWluLGw6MCxyOjAsdDowLGI6bi5faGVpZ2h0K2MrTWF0aC5tYXgoci5tYXJnaW4uYix1KSxwYWQ6YS5leHRyYVBhZCsyKm4uX29mZnNldFNoaWZ0fX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ1LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4vY29uc3RhbnRzIjo3MTR9XSw3MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIiksbz10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToicmFuZ2VzbGlkZXIiLHNjaGVtYTp7c3VicGxvdHM6e3hheGlzOntyYW5nZXNsaWRlcjpuLmV4dGVuZEZsYXQoe30saSx7eWF4aXM6YX0pfX19LGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksaGFuZGxlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6dCgiLi9kcmF3IiksaXNWaXNpYmxlOm8uaXNWaXNpYmxlLG1ha2VEYXRhOm8ubWFrZURhdGEsYXV0b01hcmdpbk9wdHM6by5hdXRvTWFyZ2luT3B0c319LHsiLi4vLi4vbGliIjo3NzgsIi4vYXR0cmlidXRlcyI6NzEyLCIuL2NhbGNfYXV0b3JhbmdlIjo3MTMsIi4vZGVmYXVsdHMiOjcxNSwiLi9kcmF3Ijo3MTYsIi4vaGVscGVycyI6NzE3LCIuL29wcGF4aXNfYXR0cmlidXRlcyI6NzE5fV0sNzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17X2lzU3VicGxvdE9iajohMCxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJmaXhlZCIsIm1hdGNoIl0sZGZsdDoibWF0Y2giLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In1dLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMifX0se31dLDcyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIikubGluZSxhPXQoIi4uL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTt0KCIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyIpO2UuZXhwb3J0cz1zKCJzaGFwZSIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY2xlIiwicmVjdCIsInBhdGgiLCJsaW5lIl0sZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhyZWY6byh7fSxuLnhyZWYse30pLHhzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwicGl4ZWwiXSxkZmx0OiJzY2FsZWQiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHhhbmNob3I6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seDA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seDE6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXJlZjpvKHt9LG4ueXJlZix7fSkseXNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzY2FsZWQiLCJwaXhlbCJdLGRmbHQ6InNjYWxlZCIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seWFuY2hvcjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5MTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxwYXRoOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxsaW5lOntjb2xvcjpvKHt9LGkuY29sb3Ise2VkaXRUeXBlOiJhcnJheWRyYXcifSksd2lkdGg6byh7fSxpLndpZHRoLHtlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSksZGFzaDpvKHt9LGEse2VkaXRUeXBlOiJhcnJheWRyYXcifSksZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGZpbGxydWxlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJldmVub2RkIiwibm9uemVybyJdLGRmbHQ6ImV2ZW5vZGQiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0YWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxlZGl0VHlwZToiYXJyYXlkcmF3In0pfSx7Ii4uLy4uL2NvbnN0YW50cy9heGlzX3BsYWNlYWJsZV9vYmplY3RzIjo3NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE3LCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTg3LCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo2MjYsIi4uL2RyYXdpbmcvYXR0cmlidXRlcyI6NjY0fV0sNzIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vY29uc3RhbnRzIiksbz10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBzKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnhzaXplbW9kZSx0LngwLHQueDEsdC5wYXRoLCExKX1mdW5jdGlvbiBsKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnlzaXplbW9kZSx0LnkwLHQueTEsdC5wYXRoLCEwKX1mdW5jdGlvbiBjKHQsZSxyLGkscyxsKXt2YXIgYz10LzIsdT1sO2lmKCJwaXhlbCI9PT1lKXt2YXIgZj1zP28uZXh0cmFjdFBhdGhDb29yZHMocyxsP2EucGFyYW1Jc1k6YS5wYXJhbUlzWCk6W3IsaV0saD1uLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxmKSxwPW4uYWdnTnVtcyhNYXRoLm1pbixudWxsLGYpLGQ9cDwwP01hdGguYWJzKHApK2M6YyxnPWg+MD9oK2M6YztyZXR1cm57cHBhZDpjLHBwYWRwbHVzOnU/ZDpnLHBwYWRtaW51czp1P2c6ZH19cmV0dXJue3BwYWQ6Y319ZnVuY3Rpb24gdSh0LGUscixuLGkpe3ZhciBzPSJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT90LnIyYzp0LmQyYztpZih2b2lkIDAhPT1lKXJldHVybltzKGUpLHMocildO2lmKG4pe3ZhciBsLGMsdSxmLGg9MS8wLHA9LTEvMCxkPW4ubWF0Y2goYS5zZWdtZW50UkUpO2ZvcigiZGF0ZSI9PT10LnR5cGUmJihzPW8uZGVjb2RlRGF0ZShzKSksbD0wO2w8ZC5sZW5ndGg7bCsrKXZvaWQgMCE9PShjPWlbZFtsXS5jaGFyQXQoMCldLmRyYXduKSYmKCEodT1kW2xdLnN1YnN0cigxKS5tYXRjaChhLnBhcmFtUkUpKXx8dS5sZW5ndGg8Y3x8KChmPXModVtjXSkpPGgmJihoPWYpLGY+cCYmKHA9ZikpKTtyZXR1cm4gcD49aD9baCxwXTp2b2lkIDB9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9bi5maWx0ZXJWaXNpYmxlKGUuc2hhcGVzKTtpZihyLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYyxmLGg9cltvXTtoLl9leHRyZW1lcz17fTt2YXIgcD1pLmdldFJlZlR5cGUoaC54cmVmKSxkPWkuZ2V0UmVmVHlwZShoLnlyZWYpO2lmKCJwYXBlciIhPT1oLnhyZWYmJiJkb21haW4iIT09cCl7dmFyIGc9InBpeGVsIj09PWgueHNpemVtb2RlP2gueGFuY2hvcjpoLngwLG09InBpeGVsIj09PWgueHNpemVtb2RlP2gueGFuY2hvcjpoLngxOyhmPXUoYz1pLmdldEZyb21JZCh0LGgueHJlZiksZyxtLGgucGF0aCxhLnBhcmFtSXNYKSkmJihoLl9leHRyZW1lc1tjLl9pZF09aS5maW5kRXh0cmVtZXMoYyxmLHMoaCkpKX1pZigicGFwZXIiIT09aC55cmVmJiYiZG9tYWluIiE9PWQpe3ZhciB2PSJwaXhlbCI9PT1oLnlzaXplbW9kZT9oLnlhbmNob3I6aC55MCx5PSJwaXhlbCI9PT1oLnlzaXplbW9kZT9oLnlhbmNob3I6aC55MTsoZj11KGM9aS5nZXRGcm9tSWQodCxoLnlyZWYpLHYseSxoLnBhdGgsYS5wYXJhbUlzWSkpJiYoaC5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsZixsKGgpKSl9fX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4vY29uc3RhbnRzIjo3MjIsIi4vaGVscGVycyI6NzMxfV0sNzIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2VnbWVudFJFOi9bTUxIVlFDVFNaXVteTUxIVlFDVFNaXSovZyxwYXJhbVJFOi9bXlxzLF0rL2cscGFyYW1Jc1g6e006ezA6ITAsZHJhd246MH0sTDp7MDohMCxkcmF3bjowfSxIOnswOiEwLGRyYXduOjB9LFY6e30sUTp7MDohMCwyOiEwLGRyYXduOjJ9LEM6ezA6ITAsMjohMCw0OiEwLGRyYXduOjR9LFQ6ezA6ITAsZHJhd246MH0sUzp7MDohMCwyOiEwLGRyYXduOjJ9LFo6e319LHBhcmFtSXNZOntNOnsxOiEwLGRyYXduOjF9LEw6ezE6ITAsZHJhd246MX0sSDp7fSxWOnswOiEwLGRyYXduOjB9LFE6ezE6ITAsMzohMCxkcmF3bjozfSxDOnsxOiEwLDM6ITAsNTohMCxkcmF3bjo1fSxUOnsxOiEwLGRyYXduOjF9LFM6ezE6ITAsMzohMCxkcmF3bjo1fSxaOnt9fSxudW1QYXJhbXM6e006MixMOjIsSDoxLFY6MSxROjQsQzo2LFQ6MixTOjQsWjowfX19LHt9XSw3MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1pZihhKCJ2aXNpYmxlIikpe3ZhciBsPWEoInBhdGgiKSxjPWEoInR5cGUiLGw/InBhdGgiOiJyZWN0Iik7InBhdGgiIT09ZS50eXBlJiZkZWxldGUgZS5wYXRoLGEoImVkaXRhYmxlIiksYSgibGF5ZXIiKSxhKCJvcGFjaXR5IiksYSgiZmlsbGNvbG9yIiksYSgiZmlsbHJ1bGUiKSxhKCJsaW5lLndpZHRoIikmJihhKCJsaW5lLmNvbG9yIiksYSgibGluZS5kYXNoIikpO2Zvcih2YXIgdT1hKCJ4c2l6ZW1vZGUiKSxmPWEoInlzaXplbW9kZSIpLGg9WyJ4IiwieSJdLHA9MDtwPDI7cCsrKXt2YXIgZCxnLG0sdj1oW3BdLHk9disiYW5jaG9yIix4PSJ4Ij09PXY/dTpmLGI9e19mdWxsTGF5b3V0OnJ9LF89aS5jb2VyY2VSZWYodCxlLGIsdix2b2lkIDAsInBhcGVyIik7aWYoInJhbmdlIj09PWkuZ2V0UmVmVHlwZShfKT8oKGQ9aS5nZXRGcm9tSWQoYixfKSkuX3NoYXBlSW5kaWNlcy5wdXNoKGUuX2luZGV4KSxtPXMucmFuZ2VUb1NoYXBlUG9zaXRpb24oZCksZz1zLnNoYXBlUG9zaXRpb25Ub1JhbmdlKGQpKTpnPW09bi5pZGVudGl0eSwicGF0aCIhPT1jKXt2YXIgdz12KyIwIixUPXYrIjEiLGs9dFt3XSxNPXRbVF07dFt3XT1nKHRbd10sITApLHRbVF09Zyh0W1RdLCEwKSwicGl4ZWwiPT09eD8oYSh3LDApLGEoVCwxMCkpOihpLmNvZXJjZVBvc2l0aW9uKGUsYixhLF8sdywuMjUpLGkuY29lcmNlUG9zaXRpb24oZSxiLGEsXyxULC43NSkpLGVbd109bShlW3ddKSxlW1RdPW0oZVtUXSksdFt3XT1rLHRbVF09TX1pZigicGl4ZWwiPT09eCl7dmFyIEE9dFt5XTt0W3ldPWcodFt5XSwhMCksaS5jb2VyY2VQb3NpdGlvbihlLGIsYSxfLHksLjI1KSxlW3ldPW0oZVt5XSksdFt5XT1BfX0icGF0aCI9PT1jP2EoInBhdGgiKTpuLm5vbmVPckFsbCh0LGUsWyJ4MCIsIngxIiwieTAiLCJ5MSJdKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6InNoYXBlcyIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuL2F0dHJpYnV0ZXMiOjcyMCwiLi9oZWxwZXJzIjo3MzF9XSw3MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4vZHJhd19uZXdzaGFwZS9oZWxwZXJzIikucmVhZFBhdGhzLHM9dCgiLi9kcmF3X25ld3NoYXBlL2Rpc3BsYXlfb3V0bGluZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSIpLmNsZWFyT3V0bGluZUNvbnRyb2xsZXJzLGM9dCgiLi4vY29sb3IiKSx1PXQoIi4uL2RyYXdpbmciKSxmPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixoPXQoIi4uL2RyYWdlbGVtZW50IikscD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksZD10KCIuL2NvbnN0YW50cyIpLGc9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gbSh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2Zvcih2YXIgciBpbiBlLl9zaGFwZVVwcGVyTGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS5fc2hhcGVMb3dlckxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLGUuX3Bsb3RzKXt2YXIgbj1lLl9wbG90c1tyXS5zaGFwZWxheWVyO24mJm4uc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCl9Zm9yKHZhciBpPTA7aTxlLnNoYXBlcy5sZW5ndGg7aSsrKWUuc2hhcGVzW2ldLnZpc2libGUmJngodCxpKX1mdW5jdGlvbiB2KHQpe3JldHVybiEhdC5fZnVsbExheW91dC5fZHJhd2luZ31mdW5jdGlvbiB5KHQpe3JldHVybiF0Ll9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb259ZnVuY3Rpb24geCh0LGUpe3QuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2LnNlbGVjdEFsbCgnLnNoYXBlbGF5ZXIgW2RhdGEtaW5kZXg9IicrZSsnIl0nKS5yZW1vdmUoKTt2YXIgcj1nLm1ha2VPcHRpb25zQW5kUGxvdGluZm8odCxlKSxsPXIub3B0aW9ucyx4PXIucGxvdGluZm87aWYobC5faW5wdXQmJiExIT09bC52aXNpYmxlKWlmKCJiZWxvdyIhPT1sLmxheWVyKWsodC5fZnVsbExheW91dC5fc2hhcGVVcHBlckxheWVyKTtlbHNlIGlmKCJwYXBlciI9PT1sLnhyZWZ8fCJwYXBlciI9PT1sLnlyZWYpayh0Ll9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpO2Vsc2V7aWYoeC5faGFkUGxvdGluZm8paygoeC5tYWlucGxvdGluZm98fHgpLnNoYXBlbGF5ZXIpO2Vsc2Ugayh0Ll9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpfWZ1bmN0aW9uIGsocil7dmFyIGs9Xyh0LGwpLE09eyJkYXRhLWluZGV4IjplLCJmaWxsLXJ1bGUiOmwuZmlsbHJ1bGUsZDprfSxBPWwub3BhY2l0eSxTPWwuZmlsbGNvbG9yLEU9bC5saW5lLndpZHRoP2wubGluZS5jb2xvcjoicmdiYSgwLDAsMCwwKSIsQz1sLmxpbmUud2lkdGgsTD1sLmxpbmUuZGFzaDtDfHwhMCE9PWwuZWRpdGFibGV8fChDPTUsTD0ic29saWQiKTt2YXIgST0iWiIhPT1rW2subGVuZ3RoLTFdLFA9eSh0KSYmbC5lZGl0YWJsZSYmdC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD09PWU7UCYmKFM9ST8icmdiYSgwLDAsMCwwKSI6dC5fZnVsbExheW91dC5hY3RpdmVzaGFwZS5maWxsY29sb3IsQT10Ll9mdWxsTGF5b3V0LmFjdGl2ZXNoYXBlLm9wYWNpdHkpO3ZhciB6LE89ci5hcHBlbmQoInBhdGgiKS5hdHRyKE0pLnN0eWxlKCJvcGFjaXR5IixBKS5jYWxsKGMuc3Ryb2tlLEUpLmNhbGwoYy5maWxsLFMpLmNhbGwodS5kYXNoTGluZSxMLEMpO2lmKGIoTyx0LGwpLChQfHx0Ll9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb24pJiYoej1mKHQubGF5b3V0LCJzaGFwZXMiLGwpKSxQKXtPLnN0eWxlKHtjdXJzb3I6Im1vdmUifSk7dmFyIEQ9e2VsZW1lbnQ6Ty5ub2RlKCkscGxvdGluZm86eCxnZDp0LGVkaXRIZWxwZXJzOnosaXNBY3RpdmVTaGFwZTohMH0sUj1vKGssdCk7cyhSLE8sRCl9ZWxzZSB0Ll9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb24/ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjLGYsbSx5LHgsVCxrLE0sQSxTLEUsQyxMLEksUCx6LE89InBpeGVsIj09PXIueHNpemVtb2RlLEQ9InBpeGVsIj09PXIueXNpemVtb2RlLFI9ImxpbmUiPT09ci50eXBlLEY9InBhdGgiPT09ci50eXBlLEI9bC5tb2RpZnlJdGVtLE49YS5nZXRGcm9tSWQodCxyLnhyZWYpLGo9YS5nZXRSZWZUeXBlKHIueHJlZiksVT1hLmdldEZyb21JZCh0LHIueXJlZiksVj1hLmdldFJlZlR5cGUoci55cmVmKSxxPWcuZ2V0RGF0YVRvUGl4ZWwodCxOLCExLGopLEg9Zy5nZXREYXRhVG9QaXhlbCh0LFUsITAsViksRz1nLmdldFBpeGVsVG9EYXRhKHQsTiwhMSxqKSxZPWcuZ2V0UGl4ZWxUb0RhdGEodCxVLCEwLFYpLFc9Uj9mdW5jdGlvbigpe3ZhciB0PU1hdGgubWF4KHIubGluZS53aWR0aCwxMCksbj1zLmFwcGVuZCgiZyIpLmF0dHIoImRhdGEtaW5kZXgiLG8pO24uYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsZS5hdHRyKCJkIikpLnN0eWxlKHtjdXJzb3I6Im1vdmUiLCJzdHJva2Utd2lkdGgiOnQsInN0cm9rZS1vcGFjaXR5IjoiMCJ9KTt2YXIgaT17ImZpbGwtb3BhY2l0eSI6IjAifSxhPU1hdGgubWF4KHQvMiwxMCk7cmV0dXJuIG4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHsiZGF0YS1saW5lLXBvaW50Ijoic3RhcnQtcG9pbnQiLGN4Ok8/cShyLnhhbmNob3IpK3IueDA6cShyLngwKSxjeTpEP0goci55YW5jaG9yKS1yLnkwOkgoci55MCkscjphfSkuc3R5bGUoaSkuY2xhc3NlZCgiY3Vyc29yLWdyYWIiLCEwKSxuLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7ImRhdGEtbGluZS1wb2ludCI6ImVuZC1wb2ludCIsY3g6Tz9xKHIueGFuY2hvcikrci54MTpxKHIueDEpLGN5OkQ/SChyLnlhbmNob3IpLXIueTE6SChyLnkxKSxyOmF9KS5zdHlsZShpKS5jbGFzc2VkKCJjdXJzb3ItZ3JhYiIsITApLG59KCk6ZSxYPXtlbGVtZW50Olcubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKG4pe2lmKHYodCkpcmV0dXJuO08mJih4PXEoci54YW5jaG9yKSk7RCYmKFQ9SChyLnlhbmNob3IpKTsicGF0aCI9PT1yLnR5cGU/UD1yLnBhdGg6KGM9Tz9yLngwOnEoci54MCksZj1EP3IueTA6SChyLnkwKSxtPU8/ci54MTpxKHIueDEpLHk9RD9yLnkxOkgoci55MSkpO2M8bT8oQT1jLEw9IngwIixTPW0sST0ieDEiKTooQT1tLEw9IngxIixTPWMsST0ieDAiKTshRCYmZjx5fHxEJiZmPnk/KGs9ZixFPSJ5MCIsTT15LEM9InkxIik6KGs9eSxFPSJ5MSIsTT1mLEM9InkwIik7WihuKSxRKHMsciksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUueHJlZixpPWUueXJlZixvPWEuZ2V0RnJvbUlkKHIsbikscz1hLmdldEZyb21JZChyLGkpLGw9IiI7InBhcGVyIj09PW58fG8uYXV0b3JhbmdlfHwobCs9bik7InBhcGVyIj09PWl8fHMuYXV0b3JhbmdlfHwobCs9aSk7dS5zZXRDbGlwVXJsKHQsbD8iY2xpcCIrci5fZnVsbExheW91dC5fdWlkK2w6bnVsbCxyKX0oZSxyLHQpLFgubW92ZUZuPSJtb3ZlIj09PXo/SjpLLFguYWx0S2V5PW4uYWx0S2V5fSxkb25lRm46ZnVuY3Rpb24oKXtpZih2KHQpKXJldHVybjtwKGUpLCQocyksYihlLHQsciksbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsbC5nZXRVcGRhdGVPYmooKSl9LGNsaWNrRm46ZnVuY3Rpb24oKXtpZih2KHQpKXJldHVybjskKHMpfX07ZnVuY3Rpb24gWihyKXtpZih2KHQpKXo9bnVsbDtlbHNlIGlmKFIpej0icGF0aCI9PT1yLnRhcmdldC50YWdOYW1lPyJtb3ZlIjoic3RhcnQtcG9pbnQiPT09ci50YXJnZXQuYXR0cmlidXRlc1siZGF0YS1saW5lLXBvaW50Il0udmFsdWU/InJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50IjoicmVzaXplLW92ZXItZW5kLXBvaW50IjtlbHNle3ZhciBuPVguZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPW4ucmlnaHQtbi5sZWZ0LGE9bi5ib3R0b20tbi50b3Asbz1yLmNsaWVudFgtbi5sZWZ0LHM9ci5jbGllbnRZLW4udG9wLGw9IUYmJmk+MTAmJmE+MTAmJiFyLnNoaWZ0S2V5P2guZ2V0Q3Vyc29yKG8vaSwxLXMvYSk6Im1vdmUiO3AoZSxsKSx6PWwuc3BsaXQoIi0iKVswXX19ZnVuY3Rpb24gSihuLGkpe2lmKCJwYXRoIj09PXIudHlwZSl7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG89YSxsPWE7Tz9CKCJ4YW5jaG9yIixyLnhhbmNob3I9Ryh4K24pKToobz1mdW5jdGlvbih0KXtyZXR1cm4gRyhxKHQpK24pfSxOJiYiZGF0ZSI9PT1OLnR5cGUmJihvPWcuZW5jb2RlRGF0ZShvKSkpLEQ/QigieWFuY2hvciIsci55YW5jaG9yPVkoVCtpKSk6KGw9ZnVuY3Rpb24odCl7cmV0dXJuIFkoSCh0KStpKX0sVSYmImRhdGUiPT09VS50eXBlJiYobD1nLmVuY29kZURhdGUobCkpKSxCKCJwYXRoIixyLnBhdGg9dyhQLG8sbCkpfWVsc2UgTz9CKCJ4YW5jaG9yIixyLnhhbmNob3I9Ryh4K24pKTooQigieDAiLHIueDA9RyhjK24pKSxCKCJ4MSIsci54MT1HKG0rbikpKSxEP0IoInlhbmNob3IiLHIueWFuY2hvcj1ZKFQraSkpOihCKCJ5MCIsci55MD1ZKGYraSkpLEIoInkxIixyLnkxPVkoeStpKSkpO2UuYXR0cigiZCIsXyh0LHIpKSxRKHMscil9ZnVuY3Rpb24gSyhuLGkpe2lmKEYpe3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxvPWEsbD1hO08/QigieGFuY2hvciIsci54YW5jaG9yPUcoeCtuKSk6KG89ZnVuY3Rpb24odCl7cmV0dXJuIEcocSh0KStuKX0sTiYmImRhdGUiPT09Ti50eXBlJiYobz1nLmVuY29kZURhdGUobykpKSxEP0IoInlhbmNob3IiLHIueWFuY2hvcj1ZKFQraSkpOihsPWZ1bmN0aW9uKHQpe3JldHVybiBZKEgodCkraSl9LFUmJiJkYXRlIj09PVUudHlwZSYmKGw9Zy5lbmNvZGVEYXRlKGwpKSksQigicGF0aCIsci5wYXRoPXcoUCxvLGwpKX1lbHNlIGlmKFIpe2lmKCJyZXNpemUtb3Zlci1zdGFydC1wb2ludCI9PT16KXt2YXIgdT1jK24saD1EP2YtaTpmK2k7QigieDAiLHIueDA9Tz91OkcodSkpLEIoInkwIixyLnkwPUQ/aDpZKGgpKX1lbHNlIGlmKCJyZXNpemUtb3Zlci1lbmQtcG9pbnQiPT09eil7dmFyIHA9bStuLGQ9RD95LWk6eStpO0IoIngxIixyLngxPU8/cDpHKHApKSxCKCJ5MSIsci55MT1EP2Q6WShkKSl9fWVsc2V7dmFyIHY9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT16LmluZGV4T2YodCl9LGI9digibiIpLGo9digicyIpLFY9digidyIpLFc9digiZSIpLFg9Yj9rK2k6ayxaPWo/TStpOk0sSj1WP0ErbjpBLEs9Vz9TK246UztEJiYoYiYmKFg9ay1pKSxqJiYoWj1NLWkpKSwoIUQmJlotWD4xMHx8RCYmWC1aPjEwKSYmKEIoRSxyW0VdPUQ/WDpZKFgpKSxCKEMscltDXT1EP1o6WShaKSkpLEstSj4xMCYmKEIoTCxyW0xdPU8/SjpHKEopKSxCKEkscltJXT1PP0s6RyhLKSkpfWUuYXR0cigiZCIsXyh0LHIpKSxRKHMscil9ZnVuY3Rpb24gUSh0LGUpeyhPfHxEKSYmZnVuY3Rpb24oKXt2YXIgcj0icGF0aCIhPT1lLnR5cGUsbj10LnNlbGVjdEFsbCgiLnZpc3VhbC1jdWUiKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2ZpbGw6IiNmZmYiLCJmaWxsLXJ1bGUiOiJldmVub2RkIixzdHJva2U6IiMwMDAiLCJzdHJva2Utd2lkdGgiOjF9KS5jbGFzc2VkKCJ2aXN1YWwtY3VlIiwhMCk7dmFyIGE9cShPP2UueGFuY2hvcjppLm1pZFJhbmdlKHI/W2UueDAsZS54MV06Zy5leHRyYWN0UGF0aENvb3JkcyhlLnBhdGgsZC5wYXJhbUlzWCkpKSxvPUgoRD9lLnlhbmNob3I6aS5taWRSYW5nZShyP1tlLnkwLGUueTFdOmcuZXh0cmFjdFBhdGhDb29yZHMoZS5wYXRoLGQucGFyYW1Jc1kpKSk7aWYoYT1nLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZyhhLDEpLG89Zy5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmcobywxKSxPJiZEKXt2YXIgcz0iTSIrKGEtMS0xKSsiLCIrKG8tMS0xKSsiaC04djJoOCB2OGgydi04IGg4di0yaC04IHYtOGgtMiBaIjtuLmF0dHIoImQiLHMpfWVsc2UgaWYoTyl7dmFyIGw9Ik0iKyhhLTEtMSkrIiwiKyhvLTktMSkrInYxOCBoMiB2LTE4IFoiO24uYXR0cigiZCIsbCl9ZWxzZXt2YXIgYz0iTSIrKGEtOS0xKSsiLCIrKG8tMS0xKSsiaDE4IHYyIGgtMTggWiI7bi5hdHRyKCJkIixjKX19KCl9ZnVuY3Rpb24gJCh0KXt0LnNlbGVjdEFsbCgiLnZpc3VhbC1jdWUiKS5yZW1vdmUoKX1oLmluaXQoWCksVy5ub2RlKCkub25tb3VzZW1vdmU9Wn0odCxPLGwsZSxyLHopOiEwPT09bC5lZGl0YWJsZSYmTy5zdHlsZSgicG9pbnRlci1ldmVudHMiLEl8fGMub3BhY2l0eShTKSpBPD0uNT8ic3Ryb2tlIjoiYWxsIik7Ty5ub2RlKCkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCF5KHQpKXJldHVybjt2YXIgcj0rZS5ub2RlKCkuZ2V0QXR0cmlidXRlKCJkYXRhLWluZGV4Iik7aWYocj49MCl7aWYocj09PXQuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgpcmV0dXJuIHZvaWQgVCh0KTt0Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4PXIsdC5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlPVQsbSh0KX19KHQsTyl9KSl9fWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPShyLnhyZWYrci55cmVmKS5yZXBsYWNlKC9wYXBlci9nLCIiKS5yZXBsYWNlKC9beHl6XVsxLTldKiAqZG9tYWluL2csIiIpO3Uuc2V0Q2xpcFVybCh0LG4/ImNsaXAiK2UuX2Z1bGxMYXlvdXQuX3VpZCtuOm51bGwsZSl9ZnVuY3Rpb24gXyh0LGUpe3ZhciByLG4sbyxzLGwsYyx1LGYsaD1lLnR5cGUscD1hLmdldFJlZlR5cGUoZS54cmVmKSxtPWEuZ2V0UmVmVHlwZShlLnlyZWYpLHY9YS5nZXRGcm9tSWQodCxlLnhyZWYpLHk9YS5nZXRGcm9tSWQodCxlLnlyZWYpLHg9dC5fZnVsbExheW91dC5fc2l6ZTtpZih2PyJkb21haW4iPT09cD9uPWZ1bmN0aW9uKHQpe3JldHVybiB2Ll9vZmZzZXQrdi5fbGVuZ3RoKnR9OihyPWcuc2hhcGVQb3NpdGlvblRvUmFuZ2Uodiksbj1mdW5jdGlvbih0KXtyZXR1cm4gdi5fb2Zmc2V0K3YucjJwKHIodCwhMCkpfSk6bj1mdW5jdGlvbih0KXtyZXR1cm4geC5sK3gudyp0fSx5PyJkb21haW4iPT09bT9zPWZ1bmN0aW9uKHQpe3JldHVybiB5Ll9vZmZzZXQreS5fbGVuZ3RoKigxLXQpfToobz1nLnNoYXBlUG9zaXRpb25Ub1JhbmdlKHkpLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHkuX29mZnNldCt5LnIycChvKHQsITApKX0pOnM9ZnVuY3Rpb24odCl7cmV0dXJuIHgudCt4LmgqKDEtdCl9LCJwYXRoIj09PWgpcmV0dXJuIHYmJiJkYXRlIj09PXYudHlwZSYmKG49Zy5kZWNvZGVEYXRlKG4pKSx5JiYiZGF0ZSI9PT15LnR5cGUmJihzPWcuZGVjb2RlRGF0ZShzKSksZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQucGF0aCxhPXQueHNpemVtb2RlLG89dC55c2l6ZW1vZGUscz10LnhhbmNob3IsbD10LnlhbmNob3I7cmV0dXJuIG4ucmVwbGFjZShkLnNlZ21lbnRSRSwoZnVuY3Rpb24odCl7dmFyIG49MCxjPXQuY2hhckF0KDApLHU9ZC5wYXJhbUlzWFtjXSxmPWQucGFyYW1Jc1lbY10saD1kLm51bVBhcmFtc1tjXSxwPXQuc3Vic3RyKDEpLnJlcGxhY2UoZC5wYXJhbVJFLChmdW5jdGlvbih0KXtyZXR1cm4gdVtuXT90PSJwaXhlbCI9PT1hP2UocykrTnVtYmVyKHQpOmUodCk6ZltuXSYmKHQ9InBpeGVsIj09PW8/cihsKS1OdW1iZXIodCk6cih0KSksKytuPmgmJih0PSJYIiksdH0pKTtyZXR1cm4gbj5oJiYocD1wLnJlcGxhY2UoL1tccyxdKlguKi8sIiIpLGkubG9nKCJJZ25vcmluZyBleHRyYSBwYXJhbXMgaW4gc2VnbWVudCAiK3QpKSxjK3B9KSl9KGUsbixzKTtpZigicGl4ZWwiPT09ZS54c2l6ZW1vZGUpe3ZhciBiPW4oZS54YW5jaG9yKTtsPWIrZS54MCxjPWIrZS54MX1lbHNlIGw9bihlLngwKSxjPW4oZS54MSk7aWYoInBpeGVsIj09PWUueXNpemVtb2RlKXt2YXIgXz1zKGUueWFuY2hvcik7dT1fLWUueTAsZj1fLWUueTF9ZWxzZSB1PXMoZS55MCksZj1zKGUueTEpO2lmKCJsaW5lIj09PWgpcmV0dXJuIk0iK2wrIiwiK3UrIkwiK2MrIiwiK2Y7aWYoInJlY3QiPT09aClyZXR1cm4iTSIrbCsiLCIrdSsiSCIrYysiViIrZisiSCIrbCsiWiI7dmFyIHc9KGwrYykvMixUPSh1K2YpLzIsaz1NYXRoLmFicyh3LWwpLE09TWF0aC5hYnMoVC11KSxBPSJBIitrKyIsIitNLFM9dytrKyIsIitUO3JldHVybiJNIitTK0ErIiAwIDEsMSAiKyh3KyIsIisoVC1NKSkrQSsiIDAgMCwxICIrUysiWiJ9ZnVuY3Rpb24gdyh0LGUscil7cmV0dXJuIHQucmVwbGFjZShkLnNlZ21lbnRSRSwoZnVuY3Rpb24odCl7dmFyIG49MCxpPXQuY2hhckF0KDApLGE9ZC5wYXJhbUlzWFtpXSxvPWQucGFyYW1Jc1lbaV0scz1kLm51bVBhcmFtc1tpXTtyZXR1cm4gaSt0LnN1YnN0cigxKS5yZXBsYWNlKGQucGFyYW1SRSwoZnVuY3Rpb24odCl7cmV0dXJuIG4+PXN8fChhW25dP3Q9ZSh0KTpvW25dJiYodD1yKHQpKSxuKyspLHR9KSl9KSl9ZnVuY3Rpb24gVCh0KXt5KHQpJiYodC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD49MCYmKGwodCksZGVsZXRlIHQuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgsbSh0KSkpfWUuZXhwb3J0cz17ZHJhdzptLGRyYXdPbmU6eCxlcmFzZUFjdGl2ZVNoYXBlOmZ1bmN0aW9uKHQpe2lmKCF5KHQpKXJldHVybjtsKHQpO3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgscj0odC5sYXlvdXR8fHt9KS5zaGFwZXN8fFtdO2lmKGU8ci5sZW5ndGgpe2Zvcih2YXIgaT1bXSxhPTA7YTxyLmxlbmd0aDthKyspYSE9PWUmJmkucHVzaChyW2FdKTtkZWxldGUgdC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleCxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCx7c2hhcGVzOml9KX19fX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL3NldGN1cnNvciI6Nzk5LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSI6ODM4LCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuLi9jb2xvciI6NjQzLCIuLi9kcmFnZWxlbWVudCI6NjYyLCIuLi9kcmF3aW5nIjo2NjUsIi4vY29uc3RhbnRzIjo3MjIsIi4vZHJhd19uZXdzaGFwZS9kaXNwbGF5X291dGxpbmVzIjo3MjgsIi4vZHJhd19uZXdzaGFwZS9oZWxwZXJzIjo3MjksIi4vaGVscGVycyI6NzMxfV0sNzI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsaT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e25ld3NoYXBlOntsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJub25lIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo0LGVkaXRUeXBlOiJub25lIn0sZGFzaDppKHt9LG4se2RmbHQ6InNvbGlkIixlZGl0VHlwZToibm9uZSJ9KSxlZGl0VHlwZToibm9uZSJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJub25lIn0sZmlsbHJ1bGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImV2ZW5vZGQiLCJub256ZXJvIl0sZGZsdDoiZXZlbm9kZCIsZWRpdFR5cGU6Im5vbmUifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToibm9uZSJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJub25lIn0sZHJhd2RpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3J0aG8iLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJkaWFnb25hbCJdLGRmbHQ6ImRpYWdvbmFsIixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJub25lIn0sYWN0aXZlc2hhcGU6e2ZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYigyNTUsMCwyNTUpIixlZGl0VHlwZToibm9uZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vZHJhd2luZy9hdHRyaWJ1dGVzIjo2NjR9XSw3MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtDSVJDTEVfU0lERVM6MzIsaTAwMDowLGkwOTA6OCxpMTgwOjE2LGkyNzA6MjQsY29zNDU6TWF0aC5jb3MoTWF0aC5QSS80KSxzaW40NTpNYXRoLnNpbihNYXRoLlBJLzQpLFNRUlQyOk1hdGguc3FydCgyKX19LHt9XSw3Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKHIoIm5ld3NoYXBlLmRyYXdkaXJlY3Rpb24iKSxyKCJuZXdzaGFwZS5sYXllciIpLHIoIm5ld3NoYXBlLmZpbGxjb2xvciIpLHIoIm5ld3NoYXBlLmZpbGxydWxlIikscigibmV3c2hhcGUub3BhY2l0eSIpLHIoIm5ld3NoYXBlLmxpbmUud2lkdGgiKSl7dmFyIGk9KHR8fHt9KS5wbG90X2JnY29sb3J8fCIjRkZGIjtyKCJuZXdzaGFwZS5saW5lLmNvbG9yIixuLmNvbnRyYXN0KGkpKSxyKCJuZXdzaGFwZS5saW5lLmRhc2giKX1yKCJhY3RpdmVzaGFwZS5maWxsY29sb3IiKSxyKCJhY3RpdmVzaGFwZS5vcGFjaXR5Iil9fSx7Ii4uLy4uL2NvbG9yIjo2NDN9XSw3Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vZHJhZ2VsZW1lbnQiKSxpPXQoIi4uLy4uL2RyYWdlbGVtZW50L2hlbHBlcnMiKS5kcmF3TW9kZSxhPXQoIi4uLy4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuL2NvbnN0YW50cyIpLHM9by5pMDAwLGw9by5pMDkwLGM9by5pMTgwLHU9by5pMjcwLGY9dCgiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJPdXRsaW5lQ29udHJvbGxlcnMsaD10KCIuL2hlbHBlcnMiKSxwPWgucG9pbnRzU2hhcGVSZWN0YW5nbGUsZD1oLnBvaW50c1NoYXBlRWxsaXBzZSxnPWgud3JpdGVQYXRocyxtPXQoIi4vbmV3c2hhcGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyLG8saCl7aHx8KGg9MCk7dmFyIHY9by5nZDtmdW5jdGlvbiB5KCl7dChlLHIsbyxoKyspLGQoZVswXSkmJngoe3JlZHJhd2luZzohMH0pfWZ1bmN0aW9uIHgodCl7by5pc0FjdGl2ZVNoYXBlPSExO3ZhciBlPW0ocixvKTtPYmplY3Qua2V5cyhlKS5sZW5ndGgmJmEuY2FsbCgodHx8e30pLnJlZHJhd2luZz8icmVsYXlvdXQiOiJfZ3VpUmVsYXlvdXQiLHYsZSl9dmFyIGIsXyx3LFQsayxNPW8uaXNBY3RpdmVTaGFwZSxBPXYuX2Z1bGxMYXlvdXQuX3pvb21sYXllcixTPW8uZHJhZ21vZGU7KGkoUyk/di5fZnVsbExheW91dC5fZHJhd2luZz0hMDp2Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wJiZmKHYpLHIuYXR0cigiZCIsZyhlKSksTSYmIWgpJiYoaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO3Rbcl09W107Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3Rbcl1baV09W107Zm9yKHZhciBhPTA7YTxuW2ldLmxlbmd0aDthKyspdFtyXVtpXVthXT1uW2ldW2FdfX1yZXR1cm4gdH0oW10sZSksZnVuY3Rpb24odCl7Yj1bXTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXSxhPSFwKGkpJiZkKGkpO2Jbcl09W107Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaWYoIloiIT09aVtvXVswXSYmKCFhfHxvPT09c3x8bz09PWx8fG89PT1jfHxvPT09dSkpe3ZhciBmPWlbb11bMV0saD1pW29dWzJdLGc9dC5hcHBlbmQoImNpcmNsZSIpLmNsYXNzZWQoImN1cnNvci1ncmFiIiwhMCkuYXR0cigiZGF0YS1pIixyKS5hdHRyKCJkYXRhLWoiLG8pLmF0dHIoImN4IixmKS5hdHRyKCJjeSIsaCkuYXR0cigiciIsNCkuc3R5bGUoeyJtaXgtYmxlbmQtbW9kZSI6Imx1bWlub3NpdHkiLGZpbGw6ImJsYWNrIixzdHJva2U6IndoaXRlIiwic3Ryb2tlLXdpZHRoIjoxfSk7YltyXVtvXT17ZWxlbWVudDpnLm5vZGUoKSxnZDp2LHByZXBGbjpFLGRvbmVGbjpMLGNsaWNrRm46SX0sbi5pbml0KGJbcl1bb10pfX19KEEuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lLWNvbnRyb2xsZXJzIikpLGZ1bmN0aW9uKCl7aWYoXz1bXSwhZS5sZW5ndGgpcmV0dXJuO19bMF09e2VsZW1lbnQ6clswXVswXSxnZDp2LHByZXBGbjp6LGRvbmVGbjpPfSxuLmluaXQoX1swXSl9KCkpO2Z1bmN0aW9uIEUodCl7dz0rdC5zcmNFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1pIiksVD0rdC5zcmNFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1qIiksYlt3XVtUXS5tb3ZlRm49Q31mdW5jdGlvbiBDKHQscil7aWYoZS5sZW5ndGgpe3ZhciBuPWtbd11bVF1bMV0saT1rW3ddW1RdWzJdLGE9ZVt3XSxvPWEubGVuZ3RoO2lmKHAoYSkpe2Zvcih2YXIgcz0wO3M8bztzKyspaWYocyE9PVQpe3ZhciBsPWFbc107bFsxXT09PWFbVF1bMV0mJihsWzFdPW4rdCksbFsyXT09PWFbVF1bMl0mJihsWzJdPWkrcil9aWYoYVtUXVsxXT1uK3QsYVtUXVsyXT1pK3IsIXAoYSkpZm9yKHZhciBjPTA7YzxvO2MrKylmb3IodmFyIHU9MDt1PGFbY10ubGVuZ3RoO3UrKylhW2NdW3VdPWtbd11bY11bdV19ZWxzZSBhW1RdWzFdPW4rdCxhW1RdWzJdPWkrcjt5KCl9fWZ1bmN0aW9uIEwoKXt4KCl9ZnVuY3Rpb24gSSh0LHIpe2lmKDI9PT10KXt3PStyLnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKSxUPStyLnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWoiKTt2YXIgbj1lW3ddO3Aobil8fGQobil8fGZ1bmN0aW9uKCl7aWYoZS5sZW5ndGgmJmVbd10mJmVbd10ubGVuZ3RoKXtmb3IodmFyIHQ9W10scj0wO3I8ZVt3XS5sZW5ndGg7cisrKXIhPT1UJiZ0LnB1c2goZVt3XVtyXSk7dC5sZW5ndGg+MSYmKDIhPT10Lmxlbmd0aHx8IloiIT09dFsxXVswXSkmJigwPT09VCYmKHRbMF1bMF09Ik0iKSxlW3ddPXQseSgpLHgoKSl9fSgpfX1mdW5jdGlvbiBQKHQscil7IWZ1bmN0aW9uKHQscil7aWYoZS5sZW5ndGgpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspZm9yKHZhciBpPTA7aTxlW25dLmxlbmd0aDtpKyspZm9yKHZhciBhPTA7YSsyPGVbbl1baV0ubGVuZ3RoO2ErPTIpZVtuXVtpXVthKzFdPWtbbl1baV1bYSsxXSt0LGVbbl1baV1bYSsyXT1rW25dW2ldW2ErMl0rcn0odCxyKSx5KCl9ZnVuY3Rpb24geih0KXsodz0rdC5zcmNFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1pIikpfHwodz0wKSxfW3ddLm1vdmVGbj1QfWZ1bmN0aW9uIE8oKXt4KCl9fX0seyIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiOjgzOCwiLi4vLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi4vLi4vZHJhZ2VsZW1lbnQiOjY2MiwiLi4vLi4vZHJhZ2VsZW1lbnQvaGVscGVycyI6NjYxLCIuL2NvbnN0YW50cyI6NzI2LCIuL2hlbHBlcnMiOjcyOSwiLi9uZXdzaGFwZXMiOjczMH1dLDcyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwYXJzZS1zdmctcGF0aCIpLGk9dCgiLi9jb25zdGFudHMiKSxhPWkuQ0lSQ0xFX1NJREVTLG89aS5TUVJUMixzPXQoIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIiksbD1zLnAycixjPXMucjJwLHU9WzAsMyw0LDUsNiwxLDJdLGY9WzAsMyw0LDEsMl07ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBNYXRoLmFicyh0LWUpPD0xZS02fWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1lWzFdLXRbMV0sbj1lWzJdLXRbMl07cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX1yLndyaXRlUGF0aHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoIWUpcmV0dXJuIk0wLDBaIjtmb3IodmFyIHI9IiIsbj0wO248ZTtuKyspZm9yKHZhciBpPXRbbl0ubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgbz10W25dW2FdWzBdO2lmKCJaIj09PW8pcis9IloiO2Vsc2UgZm9yKHZhciBzPXRbbl1bYV0ubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgYz1sOyJRIj09PW98fCJTIj09PW8/Yz1mW2xdOiJDIj09PW8mJihjPXVbbF0pLHIrPXRbbl1bYV1bY10sbD4wJiZsPHMtMSYmKHIrPSIsIil9fXJldHVybiByfSxyLnJlYWRQYXRocz1mdW5jdGlvbih0LGUscixpKXt2YXIgbyxzLHUsZj1uKHQpLGg9W10scD0tMSxkPTAsZz0wLG09ZnVuY3Rpb24oKXtzPWQsdT1nfTttKCk7Zm9yKHZhciB2PTA7djxmLmxlbmd0aDt2Kyspe3ZhciB5LHgsYixfLHc9W10sVD1mW3ZdWzBdLGs9VDtzd2l0Y2goVCl7Y2FzZSJNIjpwKyssaFtwXT1bXSxkPStmW3ZdWzFdLGc9K2Zbdl1bMl0sdy5wdXNoKFtrLGQsZ10pLG0oKTticmVhaztjYXNlIlEiOmNhc2UiUyI6eT0rZlt2XVsxXSxiPStmW3ZdWzJdLGQ9K2Zbdl1bM10sZz0rZlt2XVs0XSx3LnB1c2goW2ssZCxnLHksYl0pO2JyZWFrO2Nhc2UiQyI6eT0rZlt2XVsxXSxiPStmW3ZdWzJdLHg9K2Zbdl1bM10sXz0rZlt2XVs0XSxkPStmW3ZdWzVdLGc9K2Zbdl1bNl0sdy5wdXNoKFtrLGQsZyx5LGIseCxfXSk7YnJlYWs7Y2FzZSJUIjpjYXNlIkwiOmQ9K2Zbdl1bMV0sZz0rZlt2XVsyXSx3LnB1c2goW2ssZCxnXSk7YnJlYWs7Y2FzZSJIIjprPSJMIixkPStmW3ZdWzFdLHcucHVzaChbayxkLGddKTticmVhaztjYXNlIlYiOms9IkwiLGc9K2Zbdl1bMV0sdy5wdXNoKFtrLGQsZ10pO2JyZWFrO2Nhc2UiQSI6az0iTCI7dmFyIE09K2Zbdl1bMV0sQT0rZlt2XVsyXTsrZlt2XVs0XXx8KE09LU0sQT0tQSk7dmFyIFM9ZC1NLEU9Zztmb3Iobz0xO288PWEvMjtvKyspe3ZhciBDPTIqTWF0aC5QSSpvL2E7dy5wdXNoKFtrLFMrTSpNYXRoLmNvcyhDKSxFK0EqTWF0aC5zaW4oQyldKX1icmVhaztjYXNlIloiOmQ9PT1zJiZnPT09dXx8KGQ9cyxnPXUsdy5wdXNoKFtrLGQsZ10pKX1mb3IodmFyIEw9KHJ8fHt9KS5kb21haW4sST1lLl9mdWxsTGF5b3V0Ll9zaXplLFA9ciYmInBpeGVsIj09PXIueHNpemVtb2RlLHo9ciYmInBpeGVsIj09PXIueXNpemVtb2RlLE89ITE9PT1pLEQ9MDtEPHcubGVuZ3RoO0QrKyl7Zm9yKG89MDtvKzI8NztvKz0yKXt2YXIgUj13W0RdW28rMV0sRj13W0RdW28rMl07dm9pZCAwIT09UiYmdm9pZCAwIT09RiYmKGQ9UixnPUYsciYmKHIueGF4aXMmJnIueGF4aXMucDJyPyhPJiYoUi09ci54YXhpcy5fb2Zmc2V0KSxSPVA/YyhyLnhheGlzLHIueGFuY2hvcikrUjpsKHIueGF4aXMsUikpOihPJiYoUi09SS5sKSxMP1I9TC54WzBdK1IvSS53OlIvPUkudyksci55YXhpcyYmci55YXhpcy5wMnI/KE8mJihGLT1yLnlheGlzLl9vZmZzZXQpLEY9ej9jKHIueWF4aXMsci55YW5jaG9yKS1GOmwoci55YXhpcyxGKSk6KE8mJihGLT1JLnQpLEY9TD9MLnlbMV0tRi9JLmg6MS1GL0kuaCkpLHdbRF1bbysxXT1SLHdbRF1bbysyXT1GKX1oW3BdLnB1c2god1tEXS5zbGljZSgpKX19cmV0dXJuIGh9LHIucG9pbnRzU2hhcGVSZWN0YW5nbGU9ZnVuY3Rpb24odCl7aWYoNSE9PXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgZT0xO2U8MztlKyspe2lmKCFoKHRbMF1bZV0tdFsxXVtlXSx0WzNdW2VdLXRbMl1bZV0pKXJldHVybiExO2lmKCFoKHRbMF1bZV0tdFszXVtlXSx0WzFdW2VdLXRbMl1bZV0pKXJldHVybiExfXJldHVybiEoIWgodFswXVsxXSx0WzFdWzFdKSYmIWgodFswXVsxXSx0WzNdWzFdKSkmJiEhKHAodFswXSx0WzFdKSpwKHRbMF0sdFszXSkpfSxyLnBvaW50c1NoYXBlRWxsaXBzZT1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlIT09YSsxKXJldHVybiExO2U9YTtmb3IodmFyIHI9MDtyPGU7cisrKXt2YXIgbj0oMiplLXIpJWUsaT0oZS8yK24pJWUsbz0oZS8yK3IpJWU7aWYoIWgocCh0W3JdLHRbb10pLHAodFtuXSx0W2ldKSkpcmV0dXJuITF9cmV0dXJuITB9LHIuaGFuZGxlRWxsaXBzZT1mdW5jdGlvbih0LGUsbil7aWYoIXQpcmV0dXJuW2Usbl07dmFyIGk9ci5lbGxpcHNlT3Zlcih7eDA6ZVswXSx5MDplWzFdLHgxOm5bMF0seTE6blsxXX0pLHM9KGkueDEraS54MCkvMixsPShpLnkxK2kueTApLzIsYz0oaS54MS1pLngwKS8yLHU9KGkueTEtaS55MCkvMjtjfHwoYz11Lz1vKSx1fHwodT1jLz1vKTtmb3IodmFyIGY9W10saD0wO2g8YTtoKyspe3ZhciBwPTIqaCpNYXRoLlBJL2E7Zi5wdXNoKFtzK2MqTWF0aC5jb3MocCksbCt1Kk1hdGguc2luKHApXSl9cmV0dXJuIGZ9LHIuZWxsaXBzZU92ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dC54MCxyPXQueTAsbj10LngxLGk9dC55MSxhPW4tZSxzPWktcixsPSgoZS09YSkrbikvMixjPSgoci09cykraSkvMjtyZXR1cm57eDA6bC0oYSo9bykseTA6Yy0ocyo9bykseDE6bCthLHkxOmMrc319fSx7Ii4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIjo4MzksIi4vY29uc3RhbnRzIjo3MjYsInBhcnNlLXN2Zy1wYXRoIjo1MDV9XSw3MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vZHJhZ2VsZW1lbnQvaGVscGVycyIpLGk9bi5kcmF3TW9kZSxhPW4ub3Blbk1vZGUsbz10KCIuL2NvbnN0YW50cyIpLHM9by5pMDAwLGw9by5pMDkwLGM9by5pMTgwLHU9by5pMjcwLGY9by5jb3M0NSxoPW8uc2luNDUscD10KCIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGVscGVycyIpLGQ9cC5wMnIsZz1wLnIycCxtPXQoIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSIpLmNsZWFyU2VsZWN0LHY9dCgiLi9oZWxwZXJzIikseT12LnJlYWRQYXRocyx4PXYud3JpdGVQYXRocyxiPXYuZWxsaXBzZU92ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGgpe3ZhciByPXRbMF1bMF07aWYocil7dmFyIG49ci5nZXRBdHRyaWJ1dGUoImQiKSxvPWUuZ2QscD1vLl9mdWxsTGF5b3V0Lm5ld3NoYXBlLHY9ZS5wbG90aW5mbyxfPXYueGF4aXMsdz12LnlheGlzLFQ9ISF2LmRvbWFpbnx8IXYueGF4aXMsaz0hIXYuZG9tYWlufHwhdi55YXhpcyxNPWUuaXNBY3RpdmVTaGFwZSxBPWUuZHJhZ21vZGUsUz0oby5sYXlvdXR8fHt9KS5zaGFwZXN8fFtdO2lmKCFpKEEpJiZ2b2lkIDAhPT1NKXt2YXIgRT1vLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4O2lmKEU8Uy5sZW5ndGgpc3dpdGNoKG8uX2Z1bGxMYXlvdXQuc2hhcGVzW0VdLnR5cGUpe2Nhc2UicmVjdCI6QT0iZHJhd3JlY3QiO2JyZWFrO2Nhc2UiY2lyY2xlIjpBPSJkcmF3Y2lyY2xlIjticmVhaztjYXNlImxpbmUiOkE9ImRyYXdsaW5lIjticmVhaztjYXNlInBhdGgiOnZhciBDPVNbRV0ucGF0aHx8IiI7QT0iWiI9PT1DW0MubGVuZ3RoLTFdPyJkcmF3Y2xvc2VkcGF0aCI6ImRyYXdvcGVucGF0aCJ9fXZhciBMLEk9YShBKSxQPXkobixvLHYsTSksej17ZWRpdGFibGU6ITAseHJlZjpUPyJwYXBlciI6Xy5faWQseXJlZjprPyJwYXBlciI6dy5faWQsbGF5ZXI6cC5sYXllcixvcGFjaXR5OnAub3BhY2l0eSxsaW5lOntjb2xvcjpwLmxpbmUuY29sb3Isd2lkdGg6cC5saW5lLndpZHRoLGRhc2g6cC5saW5lLmRhc2h9fTtpZihJfHwoei5maWxsY29sb3I9cC5maWxsY29sb3Isei5maWxscnVsZT1wLmZpbGxydWxlKSwxPT09UC5sZW5ndGgmJihMPVBbMF0pLEwmJiJkcmF3cmVjdCI9PT1BKXoudHlwZT0icmVjdCIsei54MD1MWzBdWzFdLHoueTA9TFswXVsyXSx6LngxPUxbMl1bMV0sei55MT1MWzJdWzJdO2Vsc2UgaWYoTCYmImRyYXdsaW5lIj09PUEpei50eXBlPSJsaW5lIix6LngwPUxbMF1bMV0sei55MD1MWzBdWzJdLHoueDE9TFsxXVsxXSx6LnkxPUxbMV1bMl07ZWxzZSBpZihMJiYiZHJhd2NpcmNsZSI9PT1BKXt6LnR5cGU9ImNpcmNsZSI7dmFyIE89TFtzXVsxXSxEPUxbbF1bMV0sUj1MW2NdWzFdLEY9TFt1XVsxXSxCPUxbc11bMl0sTj1MW2xdWzJdLGo9TFtjXVsyXSxVPUxbdV1bMl0sVj12LnhheGlzJiYoImRhdGUiPT09di54YXhpcy50eXBlfHwibG9nIj09PXYueGF4aXMudHlwZSkscT12LnlheGlzJiYoImRhdGUiPT09di55YXhpcy50eXBlfHwibG9nIj09PXYueWF4aXMudHlwZSk7ViYmKE89Zyh2LnhheGlzLE8pLEQ9Zyh2LnhheGlzLEQpLFI9Zyh2LnhheGlzLFIpLEY9Zyh2LnhheGlzLEYpKSxxJiYoQj1nKHYueWF4aXMsQiksTj1nKHYueWF4aXMsTiksaj1nKHYueWF4aXMsaiksVT1nKHYueWF4aXMsVSkpO3ZhciBIPShEK0YpLzIsRz0oQitqKS8yLFk9Yih7eDA6SCx5MDpHLHgxOkgrKEYtRCtSLU8pLzIqZix5MTpHKyhVLU4rai1CKS8yKmh9KTtWJiYoWS54MD1kKHYueGF4aXMsWS54MCksWS54MT1kKHYueGF4aXMsWS54MSkpLHEmJihZLnkwPWQodi55YXhpcyxZLnkwKSxZLnkxPWQodi55YXhpcyxZLnkxKSksei54MD1ZLngwLHoueTA9WS55MCx6LngxPVkueDEsei55MT1ZLnkxfWVsc2Ugei50eXBlPSJwYXRoIixfJiZ3JiZmdW5jdGlvbih0LGUscil7dmFyIG49ImRhdGUiPT09ZS50eXBlLGk9ImRhdGUiPT09ci50eXBlO2lmKCFuJiYhaSlyZXR1cm4gdDtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylmb3IodmFyIG89MDtvPHRbYV0ubGVuZ3RoO28rKylmb3IodmFyIHM9MDtzKzI8dFthXVtvXS5sZW5ndGg7cys9MiluJiYodFthXVtvXVtzKzFdPXRbYV1bb11bcysxXS5yZXBsYWNlKCIgIiwiXyIpKSxpJiYodFthXVtvXVtzKzJdPXRbYV1bb11bcysyXS5yZXBsYWNlKCIgIiwiXyIpKX0oUCxfLHcpLHoucGF0aD14KFApLEw9bnVsbDttKG8pO2Zvcih2YXIgVz1lLmVkaXRIZWxwZXJzLFg9KFd8fHt9KS5tb2RpZnlJdGVtLFo9W10sSj0wO0o8Uy5sZW5ndGg7SisrKXt2YXIgSz1vLl9mdWxsTGF5b3V0LnNoYXBlc1tKXTtpZihaW0pdPUsuX2lucHV0LHZvaWQgMCE9PU0mJko9PT1vLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4KXt2YXIgUT16O3N3aXRjaChLLnR5cGUpe2Nhc2UibGluZSI6Y2FzZSJyZWN0IjpjYXNlImNpcmNsZSI6WCgieDAiLFEueDApLFgoIngxIixRLngxKSxYKCJ5MCIsUS55MCksWCgieTEiLFEueTEpO2JyZWFrO2Nhc2UicGF0aCI6WCgicGF0aCIsUS5wYXRoKX19fXJldHVybiB2b2lkIDA9PT1NPyhaLnB1c2goeiksWik6Vz9XLmdldFVwZGF0ZU9iaigpOnt9fX19fSx7Ii4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSI6ODM4LCIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGVscGVycyI6ODM5LCIuLi8uLi9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NjEsIi4vY29uc3RhbnRzIjo3MjYsIi4vaGVscGVycyI6NzI5fV0sNzMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIiKTtyLnJhbmdlVG9TaGFwZVBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiJsb2ciPT09dC50eXBlP3QucjJkOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sci5zaGFwZVBvc2l0aW9uVG9SYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4ibG9nIj09PXQudHlwZT90LmQycjpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuZGVjb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSYmKGU9ZS5yZXBsYWNlKCJfIiwiICIpKSx0KGUpfX0sci5lbmNvZGVEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKS5yZXBsYWNlKCIgIiwiXyIpfX0sci5leHRyYWN0UGF0aENvb3Jkcz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiB0Lm1hdGNoKG4uc2VnbWVudFJFKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgYT1lW3QuY2hhckF0KDApXS5kcmF3bjtpZih2b2lkIDAhPT1hKXt2YXIgbz10LnN1YnN0cigxKS5tYXRjaChuLnBhcmFtUkUpOyFvfHxvLmxlbmd0aDxhfHxyLnB1c2goaS5jbGVhbk51bWJlcihvW2FdKSl9fSkpLHJ9LHIuZ2V0RGF0YVRvUGl4ZWw9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGEsbz10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGUpaWYoImRvbWFpbiI9PT1pKWE9ZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xlbmd0aCoobj8xLXQ6dCkrZS5fb2Zmc2V0fTtlbHNle3ZhciBzPXIuc2hhcGVQb3NpdGlvblRvUmFuZ2UoZSk7YT1mdW5jdGlvbih0KXtyZXR1cm4gZS5fb2Zmc2V0K2UucjJwKHModCwhMCkpfSwiZGF0ZSI9PT1lLnR5cGUmJihhPXIuZGVjb2RlRGF0ZShhKSl9ZWxzZSBhPW4/ZnVuY3Rpb24odCl7cmV0dXJuIG8udCtvLmgqKDEtdCl9OmZ1bmN0aW9uKHQpe3JldHVybiBvLmwrby53KnR9O3JldHVybiBhfSxyLmdldFBpeGVsVG9EYXRhPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhLG89dC5fZnVsbExheW91dC5fc2l6ZTtpZihlKWlmKCJkb21haW4iPT09aSlhPWZ1bmN0aW9uKHQpe3ZhciByPSh0LWUuX29mZnNldCkvZS5fbGVuZ3RoO3JldHVybiBuPzEtcjpyfTtlbHNle3ZhciBzPXIucmFuZ2VUb1NoYXBlUG9zaXRpb24oZSk7YT1mdW5jdGlvbih0KXtyZXR1cm4gcyhlLnAycih0LWUuX29mZnNldCkpfX1lbHNlIGE9bj9mdW5jdGlvbih0KXtyZXR1cm4gMS0odC1vLnQpL28uaH06ZnVuY3Rpb24odCl7cmV0dXJuKHQtby5sKS9vLnd9O3JldHVybiBhfSxyLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZz1mdW5jdGlvbih0LGUpe3ZhciByPTE9PT1NYXRoLnJvdW5kKGUlMiksbj1NYXRoLnJvdW5kKHQpO3JldHVybiByP24rLjU6bn0sci5tYWtlT3B0aW9uc0FuZFBsb3RpbmZvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dC5zaGFwZXNbZV18fHt9LG49dC5fZnVsbExheW91dC5fcGxvdHNbci54cmVmK3IueXJlZl07cmV0dXJuISFuP24uX2hhZFBsb3RpbmZvPSEwOihuPXt9LHIueHJlZiYmInBhcGVyIiE9PXIueHJlZiYmKG4ueGF4aXM9dC5fZnVsbExheW91dFtyLnhyZWYrImF4aXMiXSksci55cmVmJiYicGFwZXIiIT09ci55cmVmJiYobi55YXhpcz10Ll9mdWxsTGF5b3V0W3IueXJlZisiYXhpcyJdKSksbi54c2l6ZW1vZGU9ci54c2l6ZW1vZGUsbi55c2l6ZW1vZGU9ci55c2l6ZW1vZGUsbi54YW5jaG9yPXIueGFuY2hvcixuLnlhbmNob3I9ci55YW5jaG9yLHtvcHRpb25zOnIscGxvdGluZm86bn19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuL2NvbnN0YW50cyI6NzIyfV0sNzMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJzaGFwZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseURyYXdOZXdTaGFwZURlZmF1bHRzOnQoIi4vZHJhd19uZXdzaGFwZS9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoInNoYXBlcyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIjo4NDAsIi4vYXR0cmlidXRlcyI6NzIwLCIuL2NhbGNfYXV0b3JhbmdlIjo3MjEsIi4vZGVmYXVsdHMiOjcyMywiLi9kcmF3Ijo3MjQsIi4vZHJhd19uZXdzaGFwZS9kZWZhdWx0cyI6NzI3fV0sNzMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmREZWVwQWxsLG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxjPXQoIi4vY29uc3RhbnRzIiksdT1sKCJzdGVwIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sbWV0aG9kOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZXN0eWxlIiwicmVsYXlvdXQiLCJhbmltYXRlIiwidXBkYXRlIiwic2tpcCJdLGRmbHQ6InJlc3R5bGUifSxhcmdzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmcifSx2YWx1ZTp7dmFsVHlwZToic3RyaW5nIn0sZXhlY3V0ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19KTtlLmV4cG9ydHM9byhsKCJzbGlkZXIiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxhY3RpdmU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowfSxzdGVwczp1LGxlbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyYWN0aW9uIiwicGl4ZWxzIl0sZGZsdDoiZnJhY3Rpb24ifSxsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjB9LHBhZDphKGkoe2VkaXRUeXBlOiJhcnJheWRyYXcifSkse30se3Q6e2RmbHQ6MjB9fSkseGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjB9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJ0b3AifSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjE1MH0sZWFzaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cy50cmFuc2l0aW9uLmVhc2luZy52YWx1ZXMsZGZsdDoiY3ViaWMtaW4tb3V0In19LGN1cnJlbnR2YWx1ZTp7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyJ9LHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIn0sZm9udDpuKHt9KX0sZm9udDpuKHt9KSxhY3RpdmViZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLmdyaXBCZ0FjdGl2ZUNvbG9yfSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnJhaWxCZ0NvbG9yfSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Yy5yYWlsQm9yZGVyQ29sb3J9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Yy5yYWlsQm9yZGVyV2lkdGh9LHRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpjLnRpY2tMZW5ndGh9LHRpY2tjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Yy50aWNrQ29sb3J9LHRpY2t3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LG1pbm9ydGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmMubWlub3JUaWNrTGVuZ3RofX0pLCJhcnJheWRyYXciLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgxMCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE3LCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyI6ODIyLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiOjg5MCwiLi9jb25zdGFudHMiOjczNH1dLDczNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InNsaWRlcnMiLGNvbnRhaW5lckNsYXNzTmFtZToic2xpZGVyLWNvbnRhaW5lciIsZ3JvdXBDbGFzc05hbWU6InNsaWRlci1ncm91cCIsaW5wdXRBcmVhQ2xhc3M6InNsaWRlci1pbnB1dC1hcmVhIixyYWlsUmVjdENsYXNzOiJzbGlkZXItcmFpbC1yZWN0IixyYWlsVG91Y2hSZWN0Q2xhc3M6InNsaWRlci1yYWlsLXRvdWNoLXJlY3QiLGdyaXBSZWN0Q2xhc3M6InNsaWRlci1ncmlwLXJlY3QiLHRpY2tSZWN0Q2xhc3M6InNsaWRlci10aWNrLXJlY3QiLGlucHV0UHJveHlDbGFzczoic2xpZGVyLWlucHV0LXByb3h5IixsYWJlbHNDbGFzczoic2xpZGVyLWxhYmVscyIsbGFiZWxHcm91cENsYXNzOiJzbGlkZXItbGFiZWwtZ3JvdXAiLGxhYmVsQ2xhc3M6InNsaWRlci1sYWJlbCIsY3VycmVudFZhbHVlQ2xhc3M6InNsaWRlci1jdXJyZW50LXZhbHVlIixyYWlsSGVpZ2h0OjUsbWVudUluZGV4QXR0ck5hbWU6InNsaWRlci1hY3RpdmUtaW5kZXgiLGF1dG9NYXJnaW5JZFJvb3Q6InNsaWRlci0iLG1pbldpZHRoOjMwLG1pbkhlaWdodDozMCx0ZXh0UGFkWDo0MCxhcnJvd09mZnNldFg6NCxyYWlsUmFkaXVzOjIscmFpbFdpZHRoOjUscmFpbEJvcmRlcjo0LHJhaWxCb3JkZXJXaWR0aDoxLHJhaWxCb3JkZXJDb2xvcjoiI2JlYzhkOSIscmFpbEJnQ29sb3I6IiNmOGZhZmMiLHJhaWxJbnNldDo4LHN0ZXBJbnNldDoxMCxncmlwUmFkaXVzOjEwLGdyaXBXaWR0aDoyMCxncmlwSGVpZ2h0OjIwLGdyaXBCb3JkZXI6MjAsZ3JpcEJvcmRlcldpZHRoOjEsZ3JpcEJvcmRlckNvbG9yOiIjYmVjOGQ5IixncmlwQmdDb2xvcjoiI2Y2ZjhmYSIsZ3JpcEJnQWN0aXZlQ29sb3I6IiNkYmRkZTAiLGxhYmVsUGFkZGluZzo4LGxhYmVsT2Zmc2V0OjAsdGlja1dpZHRoOjEsdGlja0NvbG9yOiIjMzMzIix0aWNrT2Zmc2V0OjI1LHRpY2tMZW5ndGg6NyxtaW5vclRpY2tPZmZzZXQ6MjUsbWlub3JUaWNrQ29sb3I6IiMzMzMiLG1pbm9yVGlja0xlbmd0aDo0LGN1cnJlbnRWYWx1ZVBhZGRpbmc6OCxjdXJyZW50VmFsdWVJbnNldDowfX0se31dLDczNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuL2NvbnN0YW50cyIpLm5hbWUscz1hLnN0ZXBzO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1mb3IodmFyIHM9aSh0LGUse25hbWU6InN0ZXBzIixoYW5kbGVJdGVtRGVmYXVsdHM6Y30pLGw9MCx1PTA7dTxzLmxlbmd0aDt1Kyspc1t1XS52aXNpYmxlJiZsKys7aWYobDwyP2UudmlzaWJsZT0hMTpvKCJ2aXNpYmxlIikpe2UuX3N0ZXBDb3VudD1sO3ZhciBmPWUuX3Zpc2libGVTdGVwcz1uLmZpbHRlclZpc2libGUocyk7KHNbbygiYWN0aXZlIildfHx7fSkudmlzaWJsZXx8KGUuYWN0aXZlPWZbMF0uX2luZGV4KSxvKCJ4IiksbygieSIpLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG8oInhhbmNob3IiKSxvKCJ5YW5jaG9yIiksbygibGVuIiksbygibGVubW9kZSIpLG8oInBhZC50IiksbygicGFkLnIiKSxvKCJwYWQuYiIpLG8oInBhZC5sIiksbi5jb2VyY2VGb250KG8sImZvbnQiLHIuZm9udCksbygiY3VycmVudHZhbHVlLnZpc2libGUiKSYmKG8oImN1cnJlbnR2YWx1ZS54YW5jaG9yIiksbygiY3VycmVudHZhbHVlLnByZWZpeCIpLG8oImN1cnJlbnR2YWx1ZS5zdWZmaXgiKSxvKCJjdXJyZW50dmFsdWUub2Zmc2V0Iiksbi5jb2VyY2VGb250KG8sImN1cnJlbnR2YWx1ZS5mb250IixlLmZvbnQpKSxvKCJ0cmFuc2l0aW9uLmR1cmF0aW9uIiksbygidHJhbnNpdGlvbi5lYXNpbmciKSxvKCJiZ2NvbG9yIiksbygiYWN0aXZlYmdjb2xvciIpLG8oImJvcmRlcmNvbG9yIiksbygiYm9yZGVyd2lkdGgiKSxvKCJ0aWNrbGVuIiksbygidGlja3dpZHRoIiksbygidGlja2NvbG9yIiksbygibWlub3J0aWNrbGVuIil9fWZ1bmN0aW9uIGModCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aWYoInNraXAiPT09dC5tZXRob2R8fEFycmF5LmlzQXJyYXkodC5hcmdzKT9yKCJ2aXNpYmxlIik6ZS52aXNpYmxlPSExKXtyKCJtZXRob2QiKSxyKCJhcmdzIik7dmFyIGk9cigibGFiZWwiLCJzdGVwLSIrZS5faW5kZXgpO3IoInZhbHVlIixpKSxyKCJleGVjdXRlIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLHtuYW1lOm8saGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIzLCIuL2F0dHJpYnV0ZXMiOjczMywiLi9jb25zdGFudHMiOjczNH1dLDczNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4uL2NvbG9yIiksbz10KCIuLi9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXMuc3RyVHJhbnNsYXRlLGM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsZj10KCIuL2NvbnN0YW50cyIpLGg9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLHA9aC5MSU5FX1NQQUNJTkcsZD1oLkZST01fVEwsZz1oLkZST01fQlI7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gZi5hdXRvTWFyZ2luSWRSb290K3QuX2luZGV4fWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQuX2luZGV4fWZ1bmN0aW9uIHkodCxlKXt2YXIgcj1vLnRlc3Rlci5zZWxlY3RBbGwoImcuIitmLmxhYmVsR3JvdXBDbGFzcykuZGF0YShlLl92aXNpYmxlU3RlcHMpO3IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYubGFiZWxHcm91cENsYXNzLCEwKTt2YXIgYT0wLGw9MDtyLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPV8obi5zZWxlY3QodGhpcykse3N0ZXA6dH0sZSkubm9kZSgpO2lmKHIpe3ZhciBpPW8uYkJveChyKTtsPU1hdGgubWF4KGwsaS5oZWlnaHQpLGE9TWF0aC5tYXgoYSxpLndpZHRoKX19KSksci5yZW1vdmUoKTt2YXIgdT1lLl9kaW1zPXt9O3UuaW5wdXRBcmVhV2lkdGg9TWF0aC5tYXgoZi5yYWlsV2lkdGgsZi5ncmlwSGVpZ2h0KTt2YXIgaD10Ll9mdWxsTGF5b3V0Ll9zaXplO3UubHg9aC5sK2gudyplLngsdS5seT1oLnQraC5oKigxLWUueSksImZyYWN0aW9uIj09PWUubGVubW9kZT91Lm91dGVyTGVuZ3RoPU1hdGgucm91bmQoaC53KmUubGVuKTp1Lm91dGVyTGVuZ3RoPWUubGVuLHUuaW5wdXRBcmVhU3RhcnQ9MCx1LmlucHV0QXJlYUxlbmd0aD1NYXRoLnJvdW5kKHUub3V0ZXJMZW5ndGgtZS5wYWQubC1lLnBhZC5yKTt2YXIgcD0odS5pbnB1dEFyZWFMZW5ndGgtMipmLnN0ZXBJbnNldCkvKGUuX3N0ZXBDb3VudC0xKSx2PWErZi5sYWJlbFBhZGRpbmc7aWYodS5sYWJlbFN0cmlkZT1NYXRoLm1heCgxLE1hdGguY2VpbCh2L3ApKSx1LmxhYmVsSGVpZ2h0PWwsdS5jdXJyZW50VmFsdWVNYXhXaWR0aD0wLHUuY3VycmVudFZhbHVlSGVpZ2h0PTAsdS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodD0wLHUuY3VycmVudFZhbHVlTWF4TGluZXM9MSxlLmN1cnJlbnR2YWx1ZS52aXNpYmxlKXt2YXIgeT1vLnRlc3Rlci5hcHBlbmQoImciKTtyLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPXgoeSxlLHQubGFiZWwpLG49ci5ub2RlKCkmJm8uYkJveChyLm5vZGUoKSl8fHt3aWR0aDowLGhlaWdodDowfSxpPWMubGluZUNvdW50KHIpO3UuY3VycmVudFZhbHVlTWF4V2lkdGg9TWF0aC5tYXgodS5jdXJyZW50VmFsdWVNYXhXaWR0aCxNYXRoLmNlaWwobi53aWR0aCkpLHUuY3VycmVudFZhbHVlSGVpZ2h0PU1hdGgubWF4KHUuY3VycmVudFZhbHVlSGVpZ2h0LE1hdGguY2VpbChuLmhlaWdodCkpLHUuY3VycmVudFZhbHVlTWF4TGluZXM9TWF0aC5tYXgodS5jdXJyZW50VmFsdWVNYXhMaW5lcyxpKX0pKSx1LmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0PXUuY3VycmVudFZhbHVlSGVpZ2h0K2UuY3VycmVudHZhbHVlLm9mZnNldCx5LnJlbW92ZSgpfXUuaGVpZ2h0PXUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQrZi50aWNrT2Zmc2V0K2UudGlja2xlbitmLmxhYmVsT2Zmc2V0K3UubGFiZWxIZWlnaHQrZS5wYWQudCtlLnBhZC5iO3ZhciBiPSJsZWZ0IjtzLmlzUmlnaHRBbmNob3IoZSkmJih1Lmx4LT11Lm91dGVyTGVuZ3RoLGI9InJpZ2h0Iikscy5pc0NlbnRlckFuY2hvcihlKSYmKHUubHgtPXUub3V0ZXJMZW5ndGgvMixiPSJjZW50ZXIiKTt2YXIgdz0idG9wIjtzLmlzQm90dG9tQW5jaG9yKGUpJiYodS5seS09dS5oZWlnaHQsdz0iYm90dG9tIikscy5pc01pZGRsZUFuY2hvcihlKSYmKHUubHktPXUuaGVpZ2h0LzIsdz0ibWlkZGxlIiksdS5vdXRlckxlbmd0aD1NYXRoLmNlaWwodS5vdXRlckxlbmd0aCksdS5oZWlnaHQ9TWF0aC5jZWlsKHUuaGVpZ2h0KSx1Lmx4PU1hdGgucm91bmQodS5seCksdS5seT1NYXRoLnJvdW5kKHUubHkpO3ZhciBUPXt5OmUueSxiOnUuaGVpZ2h0Kmdbd10sdDp1LmhlaWdodCpkW3ddfTsiZnJhY3Rpb24iPT09ZS5sZW5tb2RlPyhULmw9MCxULnhsPWUueC1lLmxlbipkW2JdLFQucj0wLFQueHI9ZS54K2UubGVuKmdbYl0pOihULng9ZS54LFQubD11Lm91dGVyTGVuZ3RoKmRbYl0sVC5yPXUub3V0ZXJMZW5ndGgqZ1tiXSksaS5hdXRvTWFyZ2luKHQsbShlKSxUKX1mdW5jdGlvbiB4KHQsZSxyKXtpZihlLmN1cnJlbnR2YWx1ZS52aXNpYmxlKXt2YXIgbixpLGE9ZS5fZGltcztzd2l0Y2goZS5jdXJyZW50dmFsdWUueGFuY2hvcil7Y2FzZSJyaWdodCI6bj1hLmlucHV0QXJlYUxlbmd0aC1mLmN1cnJlbnRWYWx1ZUluc2V0LWEuY3VycmVudFZhbHVlTWF4V2lkdGgsaT0ibGVmdCI7YnJlYWs7Y2FzZSJjZW50ZXIiOm49LjUqYS5pbnB1dEFyZWFMZW5ndGgsaT0ibWlkZGxlIjticmVhaztkZWZhdWx0Om49Zi5jdXJyZW50VmFsdWVJbnNldCxpPSJsZWZ0In12YXIgbD1zLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IixmLmxhYmVsQ2xhc3MsKGZ1bmN0aW9uKHQpe3QuYXR0cih7InRleHQtYW5jaG9yIjppLCJkYXRhLW5vdGV4IjoxfSl9KSksdT1lLmN1cnJlbnR2YWx1ZS5wcmVmaXg/ZS5jdXJyZW50dmFsdWUucHJlZml4OiIiO2lmKCJzdHJpbmciPT10eXBlb2Ygcil1Kz1yO2Vsc2V7dmFyIGg9ZS5zdGVwc1tlLmFjdGl2ZV0ubGFiZWwsZD1lLl9nZC5fZnVsbExheW91dC5fbWV0YTtkJiYoaD1zLnRlbXBsYXRlU3RyaW5nKGgsZCkpLHUrPWh9ZS5jdXJyZW50dmFsdWUuc3VmZml4JiYodSs9ZS5jdXJyZW50dmFsdWUuc3VmZml4KSxsLmNhbGwoby5mb250LGUuY3VycmVudHZhbHVlLmZvbnQpLnRleHQodSkuY2FsbChjLmNvbnZlcnRUb1RzcGFucyxlLl9nZCk7dmFyIGc9Yy5saW5lQ291bnQobCksbT0oYS5jdXJyZW50VmFsdWVNYXhMaW5lcysxLWcpKmUuY3VycmVudHZhbHVlLmZvbnQuc2l6ZSpwO3JldHVybiBjLnBvc2l0aW9uVGV4dChsLG4sbSksbH19ZnVuY3Rpb24gYih0LGUscil7cy5lbnN1cmVTaW5nbGUodCwicmVjdCIsZi5ncmlwUmVjdENsYXNzLChmdW5jdGlvbihuKXtuLmNhbGwoTSxlLHQscikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSkuYXR0cih7d2lkdGg6Zi5ncmlwV2lkdGgsaGVpZ2h0OmYuZ3JpcEhlaWdodCxyeDpmLmdyaXBSYWRpdXMscnk6Zi5ncmlwUmFkaXVzfSkuY2FsbChhLnN0cm9rZSxyLmJvcmRlcmNvbG9yKS5jYWxsKGEuZmlsbCxyLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24gXyh0LGUscil7dmFyIG49cy5lbnN1cmVTaW5nbGUodCwidGV4dCIsZi5sYWJlbENsYXNzLChmdW5jdGlvbih0KXt0LmF0dHIoeyJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsImRhdGEtbm90ZXgiOjF9KX0pKSxpPWUuc3RlcC5sYWJlbCxhPXIuX2dkLl9mdWxsTGF5b3V0Ll9tZXRhO3JldHVybiBhJiYoaT1zLnRlbXBsYXRlU3RyaW5nKGksYSkpLG4uY2FsbChvLmZvbnQsci5mb250KS50ZXh0KGkpLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsci5fZ2QpLG59ZnVuY3Rpb24gdyh0LGUpe3ZhciByPXMuZW5zdXJlU2luZ2xlKHQsImciLGYubGFiZWxzQ2xhc3MpLGk9ZS5fZGltcyxhPXIuc2VsZWN0QWxsKCJnLiIrZi5sYWJlbEdyb3VwQ2xhc3MpLmRhdGEoaS5sYWJlbFN0ZXBzKTthLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmxhYmVsR3JvdXBDbGFzcywhMCksYS5leGl0KCkucmVtb3ZlKCksYS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtyLmNhbGwoXyx0LGUpLG8uc2V0VHJhbnNsYXRlKHIsRShlLHQuZnJhY3Rpb24pLGYudGlja09mZnNldCtlLnRpY2tsZW4rZS5mb250LnNpemUqcCtmLmxhYmVsT2Zmc2V0K2kuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfSkpfWZ1bmN0aW9uIFQodCxlLHIsbixpKXt2YXIgYT1NYXRoLnJvdW5kKG4qKHIuX3N0ZXBDb3VudC0xKSksbz1yLl92aXNpYmxlU3RlcHNbYV0uX2luZGV4O28hPT1yLmFjdGl2ZSYmayh0LGUscixvLCEwLGkpfWZ1bmN0aW9uIGsodCxlLHIsbixhLG8pe3ZhciBzPXIuYWN0aXZlO3IuYWN0aXZlPW4sdSh0LmxheW91dCxmLm5hbWUscikuYXBwbHlVcGRhdGUoImFjdGl2ZSIsbik7dmFyIGw9ci5zdGVwc1tyLmFjdGl2ZV07ZS5jYWxsKFMscixvKSxlLmNhbGwoeCxyKSx0LmVtaXQoInBsb3RseV9zbGlkZXJjaGFuZ2UiLHtzbGlkZXI6cixzdGVwOnIuc3RlcHNbci5hY3RpdmVdLGludGVyYWN0aW9uOmEscHJldmlvdXNBY3RpdmU6c30pLGwmJmwubWV0aG9kJiZhJiYoZS5fbmV4dE1ldGhvZD8oZS5fbmV4dE1ldGhvZC5zdGVwPWwsZS5fbmV4dE1ldGhvZC5kb0NhbGxiYWNrPWEsZS5fbmV4dE1ldGhvZC5kb1RyYW5zaXRpb249byk6KGUuX25leHRNZXRob2Q9e3N0ZXA6bCxkb0NhbGxiYWNrOmEsZG9UcmFuc2l0aW9uOm99LGUuX25leHRNZXRob2RSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXt2YXIgcj1lLl9uZXh0TWV0aG9kLnN0ZXA7ci5tZXRob2QmJihyLmV4ZWN1dGUmJmkuZXhlY3V0ZUFQSUNvbW1hbmQodCxyLm1ldGhvZCxyLmFyZ3MpLGUuX25leHRNZXRob2Q9bnVsbCxlLl9uZXh0TWV0aG9kUmFmPW51bGwpfSkpKSl9ZnVuY3Rpb24gTSh0LGUscil7dmFyIGk9ci5ub2RlKCksbz1uLnNlbGVjdChlKTtmdW5jdGlvbiBzKCl7cmV0dXJuIHIuZGF0YSgpWzBdfXQub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKCl7dmFyIHQ9cygpO2UuZW1pdCgicGxvdGx5X3NsaWRlcnN0YXJ0Iix7c2xpZGVyOnR9KTt2YXIgbD1yLnNlbGVjdCgiLiIrZi5ncmlwUmVjdENsYXNzKTtuLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLG4uZXZlbnQucHJldmVudERlZmF1bHQoKSxsLmNhbGwoYS5maWxsLHQuYWN0aXZlYmdjb2xvcik7dmFyIGM9Qyh0LG4ubW91c2UoaSlbMF0pO1QoZSxyLHQsYywhMCksdC5fZHJhZ2dpbmc9ITAsby5vbigibW91c2Vtb3ZlIiwoZnVuY3Rpb24oKXt2YXIgdD1zKCksYT1DKHQsbi5tb3VzZShpKVswXSk7VChlLHIsdCxhLCExKX0pKSxvLm9uKCJtb3VzZXVwIiwoZnVuY3Rpb24oKXt2YXIgdD1zKCk7dC5fZHJhZ2dpbmc9ITEsbC5jYWxsKGEuZmlsbCx0LmJnY29sb3IpLG8ub24oIm1vdXNldXAiLG51bGwpLG8ub24oIm1vdXNlbW92ZSIsbnVsbCksZS5lbWl0KCJwbG90bHlfc2xpZGVyZW5kIix7c2xpZGVyOnQsc3RlcDp0LnN0ZXBzW3QuYWN0aXZlXX0pfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXt2YXIgcj10LnNlbGVjdEFsbCgicmVjdC4iK2YudGlja1JlY3RDbGFzcykuZGF0YShlLl92aXNpYmxlU3RlcHMpLGk9ZS5fZGltcztyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChmLnRpY2tSZWN0Q2xhc3MsITApLHIuZXhpdCgpLnJlbW92ZSgpLHIuYXR0cih7d2lkdGg6ZS50aWNrd2lkdGgrInB4Iiwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KSxyLmVhY2goKGZ1bmN0aW9uKHQscil7dmFyIHM9ciVpLmxhYmVsU3RyaWRlPT0wLGw9bi5zZWxlY3QodGhpcyk7bC5hdHRyKHtoZWlnaHQ6cz9lLnRpY2tsZW46ZS5taW5vcnRpY2tsZW59KS5jYWxsKGEuZmlsbCxlLnRpY2tjb2xvciksby5zZXRUcmFuc2xhdGUobCxFKGUsci8oZS5fc3RlcENvdW50LTEpKS0uNSplLnRpY2t3aWR0aCwocz9mLnRpY2tPZmZzZXQ6Zi5taW5vclRpY2tPZmZzZXQpK2kuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfSkpfWZ1bmN0aW9uIFModCxlLHIpe2Zvcih2YXIgbj10LnNlbGVjdCgicmVjdC4iK2YuZ3JpcFJlY3RDbGFzcyksaT0wLGE9MDthPGUuX3N0ZXBDb3VudDthKyspaWYoZS5fdmlzaWJsZVN0ZXBzW2FdLl9pbmRleD09PWUuYWN0aXZlKXtpPWE7YnJlYWt9dmFyIG89RShlLGkvKGUuX3N0ZXBDb3VudC0xKSk7aWYoIWUuX2ludm9raW5nQ29tbWFuZCl7dmFyIHM9bjtyJiZlLnRyYW5zaXRpb24uZHVyYXRpb24+MCYmKHM9cy50cmFuc2l0aW9uKCkuZHVyYXRpb24oZS50cmFuc2l0aW9uLmR1cmF0aW9uKS5lYXNlKGUudHJhbnNpdGlvbi5lYXNpbmcpKSxzLmF0dHIoInRyYW5zZm9ybSIsbChvLS41KmYuZ3JpcFdpZHRoLGUuX2RpbXMuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpKX19ZnVuY3Rpb24gRSh0LGUpe3ZhciByPXQuX2RpbXM7cmV0dXJuIHIuaW5wdXRBcmVhU3RhcnQrZi5zdGVwSW5zZXQrKHIuaW5wdXRBcmVhTGVuZ3RoLTIqZi5zdGVwSW5zZXQpKk1hdGgubWluKDEsTWF0aC5tYXgoMCxlKSl9ZnVuY3Rpb24gQyh0LGUpe3ZhciByPXQuX2RpbXM7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoMCwoZS1mLnN0ZXBJbnNldC1yLmlucHV0QXJlYVN0YXJ0KS8oci5pbnB1dEFyZWFMZW5ndGgtMipmLnN0ZXBJbnNldC0yKnIuaW5wdXRBcmVhU3RhcnQpKSl9ZnVuY3Rpb24gTCh0LGUscil7dmFyIG49ci5fZGltcyxpPXMuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGYucmFpbFRvdWNoUmVjdENsYXNzLChmdW5jdGlvbihuKXtuLmNhbGwoTSxlLHQscikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7aS5hdHRyKHt3aWR0aDpuLmlucHV0QXJlYUxlbmd0aCxoZWlnaHQ6TWF0aC5tYXgobi5pbnB1dEFyZWFXaWR0aCxmLnRpY2tPZmZzZXQrci50aWNrbGVuK24ubGFiZWxIZWlnaHQpfSkuY2FsbChhLmZpbGwsci5iZ2NvbG9yKS5hdHRyKCJvcGFjaXR5IiwwKSxvLnNldFRyYW5zbGF0ZShpLDAsbi5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9ZnVuY3Rpb24gSSh0LGUpe3ZhciByPWUuX2RpbXMsbj1yLmlucHV0QXJlYUxlbmd0aC0yKmYucmFpbEluc2V0LGk9cy5lbnN1cmVTaW5nbGUodCwicmVjdCIsZi5yYWlsUmVjdENsYXNzKTtpLmF0dHIoe3dpZHRoOm4saGVpZ2h0OmYucmFpbFdpZHRoLHJ4OmYucmFpbFJhZGl1cyxyeTpmLnJhaWxSYWRpdXMsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSkuY2FsbChhLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKGEuZmlsbCxlLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyd2lkdGgrInB4Iiksby5zZXRUcmFuc2xhdGUoaSxmLnJhaWxJbnNldCwuNSooci5pbnB1dEFyZWFXaWR0aC1mLnJhaWxXaWR0aCkrci5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10W2YubmFtZV0sbj1bXSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV07YS52aXNpYmxlJiYoYS5fZ2Q9ZSxuLnB1c2goYSkpfXJldHVybiBufShlLHQpLGE9ZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK2YuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIubGVuZ3RoPjA/WzBdOltdKTtmdW5jdGlvbiBzKGUpe2UuX2NvbW1hbmRPYnNlcnZlciYmKGUuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUoKSxkZWxldGUgZS5fY29tbWFuZE9ic2VydmVyKSxpLmF1dG9NYXJnaW4odCxtKGUpKX1pZihhLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuc3R5bGUoImN1cnNvciIsImV3LXJlc2l6ZSIpLGEuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLiIrZi5ncm91cENsYXNzTmFtZSkuZWFjaChzKX0pKS5yZW1vdmUoKSwwIT09ci5sZW5ndGgpe3ZhciBsPWEuc2VsZWN0QWxsKCJnLiIrZi5ncm91cENsYXNzTmFtZSkuZGF0YShyLHYpO2wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuZ3JvdXBDbGFzc05hbWUsITApLGwuZXhpdCgpLmVhY2gocykucmVtb3ZlKCk7Zm9yKHZhciBjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciB1PXJbY107eSh0LHUpfWwuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7IWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2RpbXM7ZS5sYWJlbFN0ZXBzPVtdO2Zvcih2YXIgcj10Ll9zdGVwQ291bnQsbj0wO248cjtuKz1lLmxhYmVsU3RyaWRlKWUubGFiZWxTdGVwcy5wdXNoKHtmcmFjdGlvbjpuLyhyLTEpLHN0ZXA6dC5fdmlzaWJsZVN0ZXBzW25dfSl9KGUpLGkubWFuYWdlQ29tbWFuZE9ic2VydmVyKHQsZSxlLl92aXNpYmxlU3RlcHMsKGZ1bmN0aW9uKGUpe3ZhciBuPXIuZGF0YSgpWzBdO24uYWN0aXZlIT09ZS5pbmRleCYmKG4uX2RyYWdnaW5nfHxrKHQscixuLGUuaW5kZXgsITEsITApKX0pKSxmdW5jdGlvbih0LGUscil7KHIuc3RlcHNbci5hY3RpdmVdfHx7fSkudmlzaWJsZXx8KHIuYWN0aXZlPXIuX3Zpc2libGVTdGVwc1swXS5faW5kZXgpO2UuY2FsbCh4LHIpLmNhbGwoSSxyKS5jYWxsKHcscikuY2FsbChBLHIpLmNhbGwoTCx0LHIpLmNhbGwoYix0LHIpO3ZhciBuPXIuX2RpbXM7by5zZXRUcmFuc2xhdGUoZSxuLmx4K3IucGFkLmwsbi5seStyLnBhZC50KSxlLmNhbGwoUyxyLCExKSxlLmNhbGwoeCxyKX0odCxuLnNlbGVjdCh0aGlzKSxlKX0pKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NSwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAzLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4OTEsIi4uL2NvbG9yIjo2NDMsIi4uL2RyYXdpbmciOjY2NSwiLi9jb25zdGFudHMiOjczNCxkMzoxNjl9XSw3Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZTpuLm5hbWUsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKX19LHsiLi9hdHRyaWJ1dGVzIjo3MzMsIi4vY29uc3RhbnRzIjo3MzQsIi4vZGVmYXVsdHMiOjczNSwiLi9kcmF3Ijo3MzZ9XSw3Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9cy5zdHJUcmFuc2xhdGUsYz10KCIuLi9kcmF3aW5nIiksdT10KCIuLi9jb2xvciIpLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikscD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuT1BQT1NJVEVfU0lERSxkPS8gW1hZXVswLTldKiAvO2UuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0LGUscil7dmFyIGcsbT1yLnByb3BDb250YWluZXIsdj1yLnByb3BOYW1lLHk9ci5wbGFjZWhvbGRlcix4PXIudHJhY2VJbmRleCxiPXIuYXZvaWR8fHt9LF89ci5hdHRyaWJ1dGVzLHc9ci50cmFuc2Zvcm0sVD1yLmNvbnRhaW5lckdyb3VwLGs9dC5fZnVsbExheW91dCxNPTEsQT0hMSxTPW0udGl0bGUsRT0oUyYmUy50ZXh0P1MudGV4dDoiIikudHJpbSgpLEM9UyYmUy5mb250P1MuZm9udDp7fSxMPUMuZmFtaWx5LEk9Qy5zaXplLFA9Qy5jb2xvcjsidGl0bGUudGV4dCI9PT12P2c9InRpdGxlVGV4dCI6LTEhPT12LmluZGV4T2YoImF4aXMiKT9nPSJheGlzVGl0bGVUZXh0Ijp2LmluZGV4T2YoITApJiYoZz0iY29sb3JiYXJUaXRsZVRleHQiKTt2YXIgej10Ll9jb250ZXh0LmVkaXRzW2ddOyIiPT09RT9NPTA6RS5yZXBsYWNlKGQsIiAlICIpPT09eS5yZXBsYWNlKGQsIiAlICIpJiYoTT0uMixBPSEwLHp8fChFPSIiKSksci5fbWV0YT9FPXMudGVtcGxhdGVTdHJpbmcoRSxyLl9tZXRhKTprLl9tZXRhJiYoRT1zLnRlbXBsYXRlU3RyaW5nKEUsay5fbWV0YSkpO3ZhciBPPUV8fHo7VHx8KFQ9cy5lbnN1cmVTaW5nbGUoay5faW5mb2xheWVyLCJnIiwiZy0iK2UpKTt2YXIgRD1ULnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoTz9bMF06W10pO2lmKEQuZW50ZXIoKS5hcHBlbmQoInRleHQiKSxELnRleHQoRSkuYXR0cigiY2xhc3MiLGUpLEQuZXhpdCgpLnJlbW92ZSgpLCFPKXJldHVybiBUO2Z1bmN0aW9uIFIodCl7cy5zeW5jT3JBc3luYyhbRixCXSx0KX1mdW5jdGlvbiBGKGUpe3ZhciByO3JldHVybiB3PyhyPSIiLHcucm90YXRlJiYocis9InJvdGF0ZSgiK1t3LnJvdGF0ZSxfLngsXy55XSsiKSIpLHcub2Zmc2V0JiYocis9bCgwLHcub2Zmc2V0KSkpOnI9bnVsbCxlLmF0dHIoInRyYW5zZm9ybSIsciksZS5zdHlsZSh7ImZvbnQtZmFtaWx5IjpMLCJmb250LXNpemUiOm4ucm91bmQoSSwyKSsicHgiLGZpbGw6dS5yZ2IoUCksb3BhY2l0eTpNKnUub3BhY2l0eShQKSwiZm9udC13ZWlnaHQiOmEuZm9udFdlaWdodH0pLmF0dHIoXykuY2FsbChmLmNvbnZlcnRUb1RzcGFucyx0KSxhLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gQih0KXt2YXIgZT1uLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtpZihiJiZiLnNlbGVjdGlvbiYmYi5zaWRlJiZFKXtlLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIHI9cFtiLnNpZGVdLGE9ImxlZnQiPT09Yi5zaWRlfHwidG9wIj09PWIuc2lkZT8tMToxLG89aShiLnBhZCk/Yi5wYWQ6Mix1PWMuYkJveChlLm5vZGUoKSksZj17bGVmdDowLHRvcDowLHJpZ2h0Omsud2lkdGgsYm90dG9tOmsuaGVpZ2h0fSxoPWIubWF4U2hpZnR8fGEqKGZbYi5zaWRlXS11W2Iuc2lkZV0pLGQ9MDtpZihoPDApZD1oO2Vsc2V7dmFyIGc9Yi5vZmZzZXRMZWZ0fHwwLG09Yi5vZmZzZXRUb3B8fDA7dS5sZWZ0LT1nLHUucmlnaHQtPWcsdS50b3AtPW0sdS5ib3R0b20tPW0sYi5zZWxlY3Rpb24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1jLmJCb3godGhpcyk7cy5iQm94SW50ZXJzZWN0KHUsdCxvKSYmKGQ9TWF0aC5tYXgoZCxhKih0W2Iuc2lkZV0tdVtyXSkrbykpfSkpLGQ9TWF0aC5taW4oaCxkKX1pZihkPjB8fGg8MCl7dmFyIHY9e2xlZnQ6Wy1kLDBdLHJpZ2h0OltkLDBdLHRvcDpbMCwtZF0sYm90dG9tOlswLGRdfVtiLnNpZGVdO2UuYXR0cigidHJhbnNmb3JtIixsKHZbMF0sdlsxXSkpfX19cmV0dXJuIEQuY2FsbChSKSx6JiYoRT9ELm9uKCIub3BhY2l0eSIsbnVsbCk6KE09MCxBPSEwLEQudGV4dCh5KS5vbigibW91c2VvdmVyLm9wYWNpdHkiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihoLlNIT1dfUExBQ0VIT0xERVIpLnN0eWxlKCJvcGFjaXR5IiwxKX0pKS5vbigibW91c2VvdXQub3BhY2l0eSIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguSElERV9QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDApfSkpKSxELmNhbGwoZi5tYWtlRWRpdGFibGUse2dkOnR9KS5vbigiZWRpdCIsKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PXg/by5jYWxsKCJfZ3VpUmVzdHlsZSIsdCx2LGUseCk6by5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsdixlKX0pKS5vbigiY2FuY2VsIiwoZnVuY3Rpb24oKXt0aGlzLnRleHQodGhpcy5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIikpLmNhbGwoUil9KSkub24oImlucHV0IiwoZnVuY3Rpb24odCl7dGhpcy50ZXh0KHR8fCIgIikuY2FsbChmLnBvc2l0aW9uVGV4dCxfLngsXy55KX0pKSksRC5jbGFzc2VkKCJqcy1wbGFjZWhvbGRlciIsQSksVH19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NSwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzUyLCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4OTEsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL2NvbG9yIjo2NDMsIi4uL2RyYXdpbmciOjY2NSxkMzoxNjksImZhc3QtaXNudW1lcmljIjoyNDF9XSw3Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksYz1sKCJidXR0b24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sbWV0aG9kOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZXN0eWxlIiwicmVsYXlvdXQiLCJhbmltYXRlIiwidXBkYXRlIiwic2tpcCJdLGRmbHQ6InJlc3R5bGUifSxhcmdzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGFyZ3MyOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGV4ZWN1dGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSk7ZS5leHBvcnRzPW8obCgidXBkYXRlbWVudSIse19hcnJheUF0dHJSZWdleHBzOlsvXnVwZGF0ZW1lbnVzXFsoMHxbMS05XVswLTldKylcXVwuYnV0dG9ucy9dLHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJkcm9wZG93biIsImJ1dHRvbnMiXSxkZmx0OiJkcm9wZG93biJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsInJpZ2h0IiwidXAiLCJkb3duIl0sZGZsdDoiZG93biJ9LGFjdGl2ZTp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MH0sc2hvd2FjdGl2ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sYnV0dG9uczpjLHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6LS4wNX0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6InJpZ2h0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDoxfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIn0scGFkOmEocyh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx7fSksZm9udDpuKHt9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmJvcmRlckxpbmV9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In19KSwiYXJyYXlkcmF3IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIjo4OTAsIi4uL2NvbG9yL2F0dHJpYnV0ZXMiOjY0Mn1dLDc0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InVwZGF0ZW1lbnVzIixjb250YWluZXJDbGFzc05hbWU6InVwZGF0ZW1lbnUtY29udGFpbmVyIixoZWFkZXJHcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXItZ3JvdXAiLGhlYWRlckNsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXIiLGhlYWRlckFycm93Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1hcnJvdyIsZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24tZ3JvdXAiLGRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbiIsYnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWJ1dHRvbiIsaXRlbVJlY3RDbGFzc05hbWU6InVwZGF0ZW1lbnUtaXRlbS1yZWN0IixpdGVtVGV4dENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXRleHQiLG1lbnVJbmRleEF0dHJOYW1lOiJ1cGRhdGVtZW51LWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoidXBkYXRlbWVudS0iLGJsYW5rSGVhZGVyT3B0czp7bGFiZWw6IiAgIn0sbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjI0LGFycm93UGFkWDoxNixyeDoyLHJ5OjIsdGV4dE9mZnNldFg6MTIsdGV4dE9mZnNldFk6MyxhcnJvd09mZnNldFg6NCxnYXBCdXR0b25IZWFkZXI6NSxnYXBCdXR0b246MixhY3RpdmVDb2xvcjoiI0Y0RkFGRiIsaG92ZXJDb2xvcjoiI0Y0RkFGRiIsYXJyb3dTeW1ib2w6e2xlZnQ6Ilx1MjVjNCIscmlnaHQ6Ilx1MjViYSIsdXA6Ilx1MjViMiIsZG93bjoiXHUyNWJjIn19fSx7fV0sNzQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikubmFtZSxzPWEuYnV0dG9ucztmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9bygidmlzaWJsZSIsaSh0LGUse25hbWU6ImJ1dHRvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSkubGVuZ3RoPjApJiYobygiYWN0aXZlIiksbygiZGlyZWN0aW9uIiksbygidHlwZSIpLG8oInNob3dhY3RpdmUiKSxvKCJ4IiksbygieSIpLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG8oInhhbmNob3IiKSxvKCJ5YW5jaG9yIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJiZ2NvbG9yIixyLnBhcGVyX2JnY29sb3IpLG8oImJvcmRlcmNvbG9yIiksbygiYm9yZGVyd2lkdGgiKSl9ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1yKCJ2aXNpYmxlIiwic2tpcCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpKSYmKHIoIm1ldGhvZCIpLHIoImFyZ3MiKSxyKCJhcmdzMiIpLHIoImxhYmVsIikscigiZXhlY3V0ZSIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSx7bmFtZTpvLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjgyMywiLi9hdHRyaWJ1dGVzIjo3MzksIi4vY29uc3RhbnRzIjo3NDB9XSw3NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi9jb2xvciIpLG89dCgiLi4vZHJhd2luZyIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcix1PXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsZj10KCIuL2NvbnN0YW50cyIpLGg9dCgiLi9zY3JvbGxib3giKTtmdW5jdGlvbiBwKHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuK3QuYXR0cihmLm1lbnVJbmRleEF0dHJOYW1lKT09PWUuX2luZGV4fWZ1bmN0aW9uIGcodCxlLHIsbixpLGEsbyxzKXtlLmFjdGl2ZT1vLGModC5sYXlvdXQsZi5uYW1lLGUpLmFwcGx5VXBkYXRlKCJhY3RpdmUiLG8pLCJidXR0b25zIj09PWUudHlwZT92KHQsbixudWxsLG51bGwsZSk6ImRyb3Bkb3duIj09PWUudHlwZSYmKGkuYXR0cihmLm1lbnVJbmRleEF0dHJOYW1lLCItMSIpLG0odCxuLGksYSxlKSxzfHx2KHQsbixpLGEsZSkpfWZ1bmN0aW9uIG0odCxlLHIsbixpKXt2YXIgYT1zLmVuc3VyZVNpbmdsZShlLCJnIixmLmhlYWRlckNsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKSxsPWkuX2RpbXMsYz1pLmFjdGl2ZSx1PWkuYnV0dG9uc1tjXXx8Zi5ibGFua0hlYWRlck9wdHMsaD17eTppLnBhZC50LHlQYWQ6MCx4OmkucGFkLmwseFBhZDowLGluZGV4OjB9LHA9e3dpZHRoOmwuaGVhZGVyV2lkdGgsaGVpZ2h0OmwuaGVhZGVySGVpZ2h0fTthLmNhbGwoeSxpLHUsdCkuY2FsbChBLGksaCxwKSxzLmVuc3VyZVNpbmdsZShlLCJ0ZXh0IixmLmhlYWRlckFycm93Q2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuY2FsbChvLmZvbnQsaS5mb250KS50ZXh0KGYuYXJyb3dTeW1ib2xbaS5kaXJlY3Rpb25dKX0pKS5hdHRyKHt4OmwuaGVhZGVyV2lkdGgtZi5hcnJvd09mZnNldFgraS5wYWQubCx5OmwuaGVhZGVySGVpZ2h0LzIrZi50ZXh0T2Zmc2V0WStpLnBhZC50fSksYS5vbigiY2xpY2siLChmdW5jdGlvbigpe3IuY2FsbChTLFN0cmluZyhkKHIsaSk/LTE6aS5faW5kZXgpKSx2KHQsZSxyLG4saSl9KSksYS5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXthLmNhbGwodyl9KSksYS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2EuY2FsbChULGkpfSkpLG8uc2V0VHJhbnNsYXRlKGUsbC5seCxsLmx5KX1mdW5jdGlvbiB2KHQsZSxyLGEsbyl7cnx8KHI9ZSkuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKTt2YXIgbD1mdW5jdGlvbih0KXtyZXR1cm4tMT09K3QuYXR0cihmLm1lbnVJbmRleEF0dHJOYW1lKX0ocikmJiJidXR0b25zIiE9PW8udHlwZT9bXTpvLmJ1dHRvbnMsYz0iZHJvcGRvd24iPT09by50eXBlP2YuZHJvcGRvd25CdXR0b25DbGFzc05hbWU6Zi5idXR0b25DbGFzc05hbWUsdT1yLnNlbGVjdEFsbCgiZy4iK2MpLmRhdGEocy5maWx0ZXJWaXNpYmxlKGwpKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGMsITApLHA9dS5leGl0KCk7ImRyb3Bkb3duIj09PW8udHlwZT8oaC5hdHRyKCJvcGFjaXR5IiwiMCIpLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMSIpLHAudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikucmVtb3ZlKCkpOnAucmVtb3ZlKCk7dmFyIGQ9MCxtPTAsdj1vLl9kaW1zLHg9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2Yoby5kaXJlY3Rpb24pOyJkcm9wZG93biI9PT1vLnR5cGUmJih4P209di5oZWFkZXJIZWlnaHQrZi5nYXBCdXR0b25IZWFkZXI6ZD12LmhlYWRlcldpZHRoK2YuZ2FwQnV0dG9uSGVhZGVyKSwiZHJvcGRvd24iPT09by50eXBlJiYidXAiPT09by5kaXJlY3Rpb24mJihtPS1mLmdhcEJ1dHRvbkhlYWRlcitmLmdhcEJ1dHRvbi12Lm9wZW5IZWlnaHQpLCJkcm9wZG93biI9PT1vLnR5cGUmJiJsZWZ0Ij09PW8uZGlyZWN0aW9uJiYoZD0tZi5nYXBCdXR0b25IZWFkZXIrZi5nYXBCdXR0b24tdi5vcGVuV2lkdGgpO3ZhciBiPXt4OnYubHgrZCtvLnBhZC5sLHk6di5seSttK28ucGFkLnQseVBhZDpmLmdhcEJ1dHRvbix4UGFkOmYuZ2FwQnV0dG9uLGluZGV4OjB9LGs9e2w6Yi54K28uYm9yZGVyd2lkdGgsdDpiLnkrby5ib3JkZXJ3aWR0aH07dS5lYWNoKChmdW5jdGlvbihzLGwpe3ZhciBjPW4uc2VsZWN0KHRoaXMpO2MuY2FsbCh5LG8scyx0KS5jYWxsKEEsbyxiKSxjLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7bi5ldmVudC5kZWZhdWx0UHJldmVudGVkfHwocy5leGVjdXRlJiYocy5hcmdzMiYmby5hY3RpdmU9PT1sPyhnKHQsbywwLGUscixhLC0xKSxpLmV4ZWN1dGVBUElDb21tYW5kKHQscy5tZXRob2Qscy5hcmdzMikpOihnKHQsbywwLGUscixhLGwpLGkuZXhlY3V0ZUFQSUNvbW1hbmQodCxzLm1ldGhvZCxzLmFyZ3MpKSksdC5lbWl0KCJwbG90bHlfYnV0dG9uY2xpY2tlZCIse21lbnU6byxidXR0b246cyxhY3RpdmU6by5hY3RpdmV9KSl9KSksYy5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXtjLmNhbGwodyl9KSksYy5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2MuY2FsbChULG8pLHUuY2FsbChfLG8pfSkpfSkpLHUuY2FsbChfLG8pLHg/KGsudz1NYXRoLm1heCh2Lm9wZW5XaWR0aCx2LmhlYWRlcldpZHRoKSxrLmg9Yi55LWsudCk6KGsudz1iLngtay5sLGsuaD1NYXRoLm1heCh2Lm9wZW5IZWlnaHQsdi5oZWFkZXJIZWlnaHQpKSxrLmRpcmVjdGlvbj1vLmRpcmVjdGlvbixhJiYodS5zaXplKCk/ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPWkuZGlyZWN0aW9uLHU9InVwIj09PWN8fCJkb3duIj09PWMsaD1pLl9kaW1zLHA9aS5hY3RpdmU7aWYodSlmb3Iocz0wLGw9MDtsPHA7bCsrKXMrPWguaGVpZ2h0c1tsXStmLmdhcEJ1dHRvbjtlbHNlIGZvcihvPTAsbD0wO2w8cDtsKyspbys9aC53aWR0aHNbbF0rZi5nYXBCdXR0b247bi5lbmFibGUoYSxvLHMpLG4uaGJhciYmbi5oYmFyLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIik7bi52YmFyJiZuLnZiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKX0oMCwwLDAsYSxvLGspOmZ1bmN0aW9uKHQpe3ZhciBlPSEhdC5oYmFyLHI9ISF0LnZiYXI7ZSYmdC5oYmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7ZT0hMSxyfHx0LmRpc2FibGUoKX0pKTtyJiZ0LnZiYXIudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtyPSExLGV8fHQuZGlzYWJsZSgpfSkpfShhKSl9ZnVuY3Rpb24geSh0LGUscixuKXt0LmNhbGwoeCxlKS5jYWxsKGIsZSxyLG4pfWZ1bmN0aW9uIHgodCxlKXtzLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixmLml0ZW1SZWN0Q2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3J4OmYucngscnk6Zi5yeSwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5jYWxsKGEuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPXMuZW5zdXJlU2luZ2xlKHQsInRleHQiLGYuaXRlbVRleHRDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7InRleHQtYW5jaG9yIjoic3RhcnQiLCJkYXRhLW5vdGV4IjoxfSl9KSksYT1yLmxhYmVsLGM9bi5fZnVsbExheW91dC5fbWV0YTtjJiYoYT1zLnRlbXBsYXRlU3RyaW5nKGEsYykpLGkuY2FsbChvLmZvbnQsZS5mb250KS50ZXh0KGEpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsbil9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPWUuYWN0aXZlO3QuZWFjaCgoZnVuY3Rpb24odCxpKXt2YXIgbz1uLnNlbGVjdCh0aGlzKTtpPT09ciYmZS5zaG93YWN0aXZlJiZvLnNlbGVjdCgicmVjdC4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoYS5maWxsLGYuYWN0aXZlQ29sb3IpfSkpfWZ1bmN0aW9uIHcodCl7dC5zZWxlY3QoInJlY3QuIitmLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxmLmhvdmVyQ29sb3IpfWZ1bmN0aW9uIFQodCxlKXt0LnNlbGVjdCgicmVjdC4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoYS5maWxsLGUuYmdjb2xvcil9ZnVuY3Rpb24gayh0LGUpe3ZhciByPWUuX2RpbXM9e3dpZHRoMTowLGhlaWdodDE6MCxoZWlnaHRzOltdLHdpZHRoczpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCxvcGVuV2lkdGg6MCxvcGVuSGVpZ2h0OjAsbHg6MCxseTowfSxhPW8udGVzdGVyLnNlbGVjdEFsbCgiZy4iK2YuZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLmRhdGEocy5maWx0ZXJWaXNpYmxlKGUuYnV0dG9ucykpO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuZHJvcGRvd25CdXR0b25DbGFzc05hbWUsITApO3ZhciBjPS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKGUuZGlyZWN0aW9uKTthLmVhY2goKGZ1bmN0aW9uKGksYSl7dmFyIHM9bi5zZWxlY3QodGhpcyk7cy5jYWxsKHksZSxpLHQpO3ZhciBoPXMuc2VsZWN0KCIuIitmLml0ZW1UZXh0Q2xhc3NOYW1lKSxwPWgubm9kZSgpJiZvLmJCb3goaC5ub2RlKCkpLndpZHRoLGQ9TWF0aC5tYXgocCtmLnRleHRQYWRYLGYubWluV2lkdGgpLGc9ZS5mb250LnNpemUqdSxtPWwubGluZUNvdW50KGgpLHY9TWF0aC5tYXgoZyptLGYubWluSGVpZ2h0KStmLnRleHRPZmZzZXRZO3Y9TWF0aC5jZWlsKHYpLGQ9TWF0aC5jZWlsKGQpLHIud2lkdGhzW2FdPWQsci5oZWlnaHRzW2FdPXYsci5oZWlnaHQxPU1hdGgubWF4KHIuaGVpZ2h0MSx2KSxyLndpZHRoMT1NYXRoLm1heChyLndpZHRoMSxkKSxjPyhyLnRvdGFsV2lkdGg9TWF0aC5tYXgoci50b3RhbFdpZHRoLGQpLHIub3BlbldpZHRoPXIudG90YWxXaWR0aCxyLnRvdGFsSGVpZ2h0Kz12K2YuZ2FwQnV0dG9uLHIub3BlbkhlaWdodCs9ditmLmdhcEJ1dHRvbik6KHIudG90YWxXaWR0aCs9ZCtmLmdhcEJ1dHRvbixyLm9wZW5XaWR0aCs9ZCtmLmdhcEJ1dHRvbixyLnRvdGFsSGVpZ2h0PU1hdGgubWF4KHIudG90YWxIZWlnaHQsdiksci5vcGVuSGVpZ2h0PXIudG90YWxIZWlnaHQpfSkpLGM/ci50b3RhbEhlaWdodC09Zi5nYXBCdXR0b246ci50b3RhbFdpZHRoLT1mLmdhcEJ1dHRvbixyLmhlYWRlcldpZHRoPXIud2lkdGgxK2YuYXJyb3dQYWRYLHIuaGVhZGVySGVpZ2h0PXIuaGVpZ2h0MSwiZHJvcGRvd24iPT09ZS50eXBlJiYoYz8oci53aWR0aDErPWYuYXJyb3dQYWRYLHIudG90YWxIZWlnaHQ9ci5oZWlnaHQxKTpyLnRvdGFsV2lkdGg9ci53aWR0aDEsci50b3RhbFdpZHRoKz1mLmFycm93UGFkWCksYS5yZW1vdmUoKTt2YXIgaD1yLnRvdGFsV2lkdGgrZS5wYWQubCtlLnBhZC5yLHA9ci50b3RhbEhlaWdodCtlLnBhZC50K2UucGFkLmIsZD10Ll9mdWxsTGF5b3V0Ll9zaXplO3IubHg9ZC5sK2QudyplLngsci5seT1kLnQrZC5oKigxLWUueSk7dmFyIGc9ImxlZnQiO3MuaXNSaWdodEFuY2hvcihlKSYmKHIubHgtPWgsZz0icmlnaHQiKSxzLmlzQ2VudGVyQW5jaG9yKGUpJiYoci5seC09aC8yLGc9ImNlbnRlciIpO3ZhciBtPSJ0b3AiO3MuaXNCb3R0b21BbmNob3IoZSkmJihyLmx5LT1wLG09ImJvdHRvbSIpLHMuaXNNaWRkbGVBbmNob3IoZSkmJihyLmx5LT1wLzIsbT0ibWlkZGxlIiksci50b3RhbFdpZHRoPU1hdGguY2VpbChyLnRvdGFsV2lkdGgpLHIudG90YWxIZWlnaHQ9TWF0aC5jZWlsKHIudG90YWxIZWlnaHQpLHIubHg9TWF0aC5yb3VuZChyLmx4KSxyLmx5PU1hdGgucm91bmQoci5seSksaS5hdXRvTWFyZ2luKHQsTShlKSx7eDplLngseTplLnksbDpoKih7cmlnaHQ6MSxjZW50ZXI6LjV9W2ddfHwwKSxyOmgqKHtsZWZ0OjEsY2VudGVyOi41fVtnXXx8MCksYjpwKih7dG9wOjEsbWlkZGxlOi41fVttXXx8MCksdDpwKih7Ym90dG9tOjEsbWlkZGxlOi41fVttXXx8MCl9KX1mdW5jdGlvbiBNKHQpe3JldHVybiBmLmF1dG9NYXJnaW5JZFJvb3QrdC5faW5kZXh9ZnVuY3Rpb24gQSh0LGUscixuKXtuPW58fHt9O3ZhciBpPXQuc2VsZWN0KCIuIitmLml0ZW1SZWN0Q2xhc3NOYW1lKSxhPXQuc2VsZWN0KCIuIitmLml0ZW1UZXh0Q2xhc3NOYW1lKSxzPWUuYm9yZGVyd2lkdGgsYz1yLmluZGV4LGg9ZS5fZGltcztvLnNldFRyYW5zbGF0ZSh0LHMrci54LHMrci55KTt2YXIgcD0tMSE9PVsidXAiLCJkb3duIl0uaW5kZXhPZihlLmRpcmVjdGlvbiksZD1uLmhlaWdodHx8KHA/aC5oZWlnaHRzW2NdOmguaGVpZ2h0MSk7aS5hdHRyKHt4OjAseTowLHdpZHRoOm4ud2lkdGh8fChwP2gud2lkdGgxOmgud2lkdGhzW2NdKSxoZWlnaHQ6ZH0pO3ZhciBnPWUuZm9udC5zaXplKnUsbT0obC5saW5lQ291bnQoYSktMSkqZy8yO2wucG9zaXRpb25UZXh0KGEsZi50ZXh0T2Zmc2V0WCxkLzItbStmLnRleHRPZmZzZXRZKSxwP3IueSs9aC5oZWlnaHRzW2NdK3IueVBhZDpyLngrPWgud2lkdGhzW2NdK3IueFBhZCxyLmluZGV4Kyt9ZnVuY3Rpb24gUyh0LGUpe3QuYXR0cihmLm1lbnVJbmRleEF0dHJOYW1lLGV8fCItMSIpLnNlbGVjdEFsbCgiZy4iK2YuZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLnJlbW92ZSgpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9cy5maWx0ZXJWaXNpYmxlKGVbZi5uYW1lXSk7ZnVuY3Rpb24gYShlKXtpLmF1dG9NYXJnaW4odCxNKGUpKX12YXIgbz1lLl9tZW51bGF5ZXIuc2VsZWN0QWxsKCJnLiIrZi5jb250YWluZXJDbGFzc05hbWUpLmRhdGEoci5sZW5ndGg+MD9bMF06W10pO2lmKG8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5zdHlsZSgiY3Vyc29yIiwicG9pbnRlciIpLG8uZXhpdCgpLmVhY2goKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLiIrZi5oZWFkZXJHcm91cENsYXNzTmFtZSkuZWFjaChhKX0pKS5yZW1vdmUoKSwwIT09ci5sZW5ndGgpe3ZhciBsPW8uc2VsZWN0QWxsKCJnLiIrZi5oZWFkZXJHcm91cENsYXNzTmFtZSkuZGF0YShyLHApO2wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuaGVhZGVyR3JvdXBDbGFzc05hbWUsITApO2Zvcih2YXIgYz1zLmVuc3VyZVNpbmdsZShvLCJnIixmLmRyb3Bkb3duQnV0dG9uR3JvdXBDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSksdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgeT1yW3VdO2sodCx5KX12YXIgeD0idXBkYXRlbWVudXMiK2UuX3VpZCxiPW5ldyBoKHQsYyx4KTtsLmVudGVyKCkuc2l6ZSgpJiYoYy5ub2RlKCkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjLm5vZGUoKSksYy5jYWxsKFMpKSxsLmV4aXQoKS5lYWNoKChmdW5jdGlvbih0KXtjLmNhbGwoUyksYSh0KX0pKS5yZW1vdmUoKSxsLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9ImRyb3Bkb3duIj09PWUudHlwZT9jOm51bGw7aS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIodCxlLGUuYnV0dG9ucywoZnVuY3Rpb24obil7Zyh0LGUsZS5idXR0b25zW24uaW5kZXhdLHIsYSxiLG4uaW5kZXgsITApfSkpLCJkcm9wZG93biI9PT1lLnR5cGU/KG0odCxyLGMsYixlKSxkKGMsZSkmJnYodCxyLGMsYixlKSk6dih0LHIsbnVsbCxudWxsLGUpfSkpfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ1LCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNywiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MSwiLi4vY29sb3IiOjY0MywiLi4vZHJhd2luZyI6NjY1LCIuL2NvbnN0YW50cyI6NzQwLCIuL3Njcm9sbGJveCI6NzQ0LGQzOjE2OX1dLDc0MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs3MzddWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL2F0dHJpYnV0ZXMiOjczOSwiLi9jb25zdGFudHMiOjc0MCwiLi9kZWZhdWx0cyI6NzQxLCIuL2RyYXciOjc0MixkdXA6NzM3fV0sNzQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1zO3ZhciBuPXQoImQzIiksaT10KCIuLi9jb2xvciIpLGE9dCgiLi4vZHJhd2luZyIpLG89dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5nZD10LHRoaXMuY29udGFpbmVyPWUsdGhpcy5pZD1yLHRoaXMucG9zaXRpb249bnVsbCx0aGlzLnRyYW5zbGF0ZVg9bnVsbCx0aGlzLnRyYW5zbGF0ZVk9bnVsbCx0aGlzLmhiYXI9bnVsbCx0aGlzLnZiYXI9bnVsbCx0aGlzLmJnPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxib3gtYmciKS5kYXRhKFswXSksdGhpcy5iZy5leGl0KCkub24oIi5kcmFnIixudWxsKS5vbigid2hlZWwiLG51bGwpLnJlbW92ZSgpLHRoaXMuYmcuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxib3gtYmciLCEwKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKHtvcGFjaXR5OjAseDowLHk6MCx3aWR0aDowLGhlaWdodDowfSl9cy5iYXJXaWR0aD0yLHMuYmFyTGVuZ3RoPTIwLHMuYmFyUmFkaXVzPTIscy5iYXJQYWQ9MSxzLmJhckNvbG9yPSIjODA4QkE0IixzLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXRoaXMuZ2QuX2Z1bGxMYXlvdXQsbD1vLndpZHRoLGM9by5oZWlnaHQ7dGhpcy5wb3NpdGlvbj10O3ZhciB1LGYsaCxwLGQ9dGhpcy5wb3NpdGlvbi5sLGc9dGhpcy5wb3NpdGlvbi53LG09dGhpcy5wb3NpdGlvbi50LHY9dGhpcy5wb3NpdGlvbi5oLHk9dGhpcy5wb3NpdGlvbi5kaXJlY3Rpb24seD0iZG93biI9PT15LGI9ImxlZnQiPT09eSxfPSJ1cCI9PT15LHc9ZyxUPXY7eHx8Ynx8InJpZ2h0Ij09PXl8fF98fCh0aGlzLnBvc2l0aW9uLmRpcmVjdGlvbj0iZG93biIseD0hMCkseHx8Xz8oZj0odT1kKSt3LHg/KGg9bSxUPShwPU1hdGgubWluKGgrVCxjKSktaCk6VD0ocD1tK1QpLShoPU1hdGgubWF4KHAtVCwwKSkpOihwPShoPW0pK1QsYj93PShmPWQrdyktKHU9TWF0aC5tYXgoZi13LDApKToodT1kLHc9KGY9TWF0aC5taW4odSt3LGwpKS11KSksdGhpcy5fYm94PXtsOnUsdDpoLHc6dyxoOlR9O3ZhciBrPWc+dyxNPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsQT1zLmJhcldpZHRoKzIqcy5iYXJQYWQsUz1kLEU9bSt2O0UrQT5jJiYoRT1jLUEpO3ZhciBDPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxiYXItaG9yaXpvbnRhbCIpLmRhdGEoaz9bMF06W10pO0MuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksQy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci1ob3Jpem9udGFsIiwhMCkuY2FsbChpLmZpbGwscy5iYXJDb2xvciksaz8odGhpcy5oYmFyPUMuYXR0cih7cng6cy5iYXJSYWRpdXMscnk6cy5iYXJSYWRpdXMseDpTLHk6RSx3aWR0aDpNLGhlaWdodDpBfSksdGhpcy5faGJhclhNaW49UytNLzIsdGhpcy5faGJhclRyYW5zbGF0ZU1heD13LU0pOihkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCk7dmFyIEw9dj5ULEk9cy5iYXJXaWR0aCsyKnMuYmFyUGFkLFA9cy5iYXJMZW5ndGgrMipzLmJhclBhZCx6PWQrZyxPPW07eitJPmwmJih6PWwtSSk7dmFyIEQ9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhci12ZXJ0aWNhbCIpLmRhdGEoTD9bMF06W10pO0QuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksRC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci12ZXJ0aWNhbCIsITApLmNhbGwoaS5maWxsLHMuYmFyQ29sb3IpLEw/KHRoaXMudmJhcj1ELmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6eix5Ok8sd2lkdGg6SSxoZWlnaHQ6UH0pLHRoaXMuX3ZiYXJZTWluPU8rUC8yLHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXg9VC1QKTooZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpO3ZhciBSPXRoaXMuaWQsRj11LS41LEI9TD9mK0krLjU6ZisuNSxOPWgtLjUsaj1rP3ArQSsuNTpwKy41LFU9by5fdG9wZGVmcy5zZWxlY3RBbGwoIiMiK1IpLmRhdGEoa3x8TD9bMF06W10pO2lmKFUuZXhpdCgpLnJlbW92ZSgpLFUuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLFIpLmFwcGVuZCgicmVjdCIpLGt8fEw/KHRoaXMuX2NsaXBSZWN0PVUuc2VsZWN0KCJyZWN0IikuYXR0cih7eDpNYXRoLmZsb29yKEYpLHk6TWF0aC5mbG9vcihOKSx3aWR0aDpNYXRoLmNlaWwoQiktTWF0aC5mbG9vcihGKSxoZWlnaHQ6TWF0aC5jZWlsKGopLU1hdGguZmxvb3IoTil9KSx0aGlzLmNvbnRhaW5lci5jYWxsKGEuc2V0Q2xpcFVybCxSLHRoaXMuZ2QpLHRoaXMuYmcuYXR0cih7eDpkLHk6bSx3aWR0aDpnLGhlaWdodDp2fSkpOih0aGlzLmJnLmF0dHIoe3dpZHRoOjAsaGVpZ2h0OjB9KSx0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChhLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSxrfHxMKXt2YXIgVj1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oKXtuLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCl9KSkub24oImRyYWciLHRoaXMuX29uQm94RHJhZy5iaW5kKHRoaXMpKTt0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCJ3aGVlbCIsdGhpcy5fb25Cb3hXaGVlbC5iaW5kKHRoaXMpKS5vbigiLmRyYWciLG51bGwpLmNhbGwoVik7dmFyIHE9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpLG4uZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KSkub24oImRyYWciLHRoaXMuX29uQmFyRHJhZy5iaW5kKHRoaXMpKTtrJiZ0aGlzLmhiYXIub24oIi5kcmFnIixudWxsKS5jYWxsKHEpLEwmJnRoaXMudmJhci5vbigiLmRyYWciLG51bGwpLmNhbGwocSl9dGhpcy5zZXRUcmFuc2xhdGUoZSxyKX0scy5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpeyh0aGlzLmhiYXJ8fHRoaXMudmJhcikmJih0aGlzLmJnLmF0dHIoe3dpZHRoOjAsaGVpZ2h0OjB9KSx0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChhLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSx0aGlzLmhiYXImJih0aGlzLmhiYXIub24oIi5kcmFnIixudWxsKSx0aGlzLmhiYXIucmVtb3ZlKCksZGVsZXRlIHRoaXMuaGJhcixkZWxldGUgdGhpcy5faGJhclhNaW4sZGVsZXRlIHRoaXMuX2hiYXJUcmFuc2xhdGVNYXgpLHRoaXMudmJhciYmKHRoaXMudmJhci5vbigiLmRyYWciLG51bGwpLHRoaXMudmJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy52YmFyLGRlbGV0ZSB0aGlzLl92YmFyWU1pbixkZWxldGUgdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9LHMucHJvdG90eXBlLl9vbkJveERyYWc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodC09bi5ldmVudC5keCksdGhpcy52YmFyJiYoZS09bi5ldmVudC5keSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuX29uQm94V2hlZWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodCs9bi5ldmVudC5kZWx0YVkpLHRoaXMudmJhciYmKGUrPW4uZXZlbnQuZGVsdGFZKSx0aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxzLnByb3RvdHlwZS5fb25CYXJEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO2lmKHRoaXMuaGJhcil7dmFyIHI9dCt0aGlzLl9oYmFyWE1pbixpPXIrdGhpcy5faGJhclRyYW5zbGF0ZU1heDt0PShvLmNvbnN0cmFpbihuLmV2ZW50LngscixpKS1yKS8oaS1yKSoodGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53KX1pZih0aGlzLnZiYXIpe3ZhciBhPWUrdGhpcy5fdmJhcllNaW4scz1hK3RoaXMuX3ZiYXJUcmFuc2xhdGVNYXg7ZT0oby5jb25zdHJhaW4obi5ldmVudC55LGEscyktYSkvKHMtYSkqKHRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaCl9dGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53LG49dGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oO2lmKHQ9by5jb25zdHJhaW4odHx8MCwwLHIpLGU9by5jb25zdHJhaW4oZXx8MCwwLG4pLHRoaXMudHJhbnNsYXRlWD10LHRoaXMudHJhbnNsYXRlWT1lLHRoaXMuY29udGFpbmVyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdGhpcy5fYm94LmwtdGhpcy5wb3NpdGlvbi5sLXQsdGhpcy5fYm94LnQtdGhpcy5wb3NpdGlvbi50LWUpLHRoaXMuX2NsaXBSZWN0JiZ0aGlzLl9jbGlwUmVjdC5hdHRyKHt4Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi5sK3QtLjUpLHk6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLnQrZS0uNSl9KSx0aGlzLmhiYXIpe3ZhciBpPXQvcjt0aGlzLmhiYXIuY2FsbChhLnNldFRyYW5zbGF0ZSx0K2kqdGhpcy5faGJhclRyYW5zbGF0ZU1heCxlKX1pZih0aGlzLnZiYXIpe3ZhciBzPWUvbjt0aGlzLnZiYXIuY2FsbChhLnNldFRyYW5zbGF0ZSx0LGUrcyp0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9jb2xvciI6NjQzLCIuLi9kcmF3aW5nIjo2NjUsZDM6MTY5fV0sNzQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17RlJPTV9CTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbTowLG1pZGRsZTouNSx0b3A6MX0sRlJPTV9UTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbToxLG1pZGRsZTouNSx0b3A6MH0sRlJPTV9CUjp7bGVmdDoxLGNlbnRlcjouNSxyaWdodDowLGJvdHRvbTowLG1pZGRsZTouNSx0b3A6MX0sTElORV9TUEFDSU5HOjEuMyxDQVBfU0hJRlQ6LjcsTUlEX1NISUZUOi4zNSxPUFBPU0lURV9TSURFOntsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiYm90dG9tIixib3R0b206InRvcCJ9fX0se31dLDc0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F4aXNSZWZEZXNjcmlwdGlvbjpmdW5jdGlvbih0LGUscil7cmV0dXJuWyJJZiBzZXQgdG8gYSIsdCwiYXhpcyBpZCAoZS5nLiAqIit0KyIqIG9yIiwiKiIrdCsiMiopLCB0aGUgYCIrdCsiYCBwb3NpdGlvbiByZWZlcnMgdG8gYSIsdCwiY29vcmRpbmF0ZS4gSWYgc2V0IHRvICpwYXBlciosIHRoZSBgIit0KyJgIiwicG9zaXRpb24gcmVmZXJzIHRvIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSIsZSwib2YgdGhlIHBsb3R0aW5nIiwiYXJlYSBpbiBub3JtYWxpemVkIGNvb3JkaW5hdGVzIHdoZXJlICowKiAoKjEqKSBjb3JyZXNwb25kcyB0byB0aGUiLGUsIigiK3IrIikuIElmIHNldCB0byBhIix0LCJheGlzIElEIGZvbGxvd2VkIGJ5IiwiKmRvbWFpbiogKHNlcGFyYXRlZCBieSBhIHNwYWNlKSwgdGhlIHBvc2l0aW9uIGJlaGF2ZXMgbGlrZSBmb3IiLCIqcGFwZXIqLCBidXQgcmVmZXJzIHRvIHRoZSBkaXN0YW5jZSBpbiBmcmFjdGlvbnMgb2YgdGhlIGRvbWFpbiIsImxlbmd0aCBmcm9tIHRoZSIsZSwib2YgdGhlIGRvbWFpbiBvZiB0aGF0IGF4aXM6IGUuZy4sIiwiKiIrdCsiMiBkb21haW4qIHJlZmVycyB0byB0aGUgZG9tYWluIG9mIHRoZSBzZWNvbmQiLHQsIiBheGlzIGFuZCBhIix0LCJwb3NpdGlvbiBvZiAwLjUgcmVmZXJzIHRvIHRoZSIsInBvaW50IGJldHdlZW4gdGhlIixlLCJhbmQgdGhlIixyLCJvZiB0aGUgZG9tYWluIG9mIHRoZSIsInNlY29uZCIsdCwiYXhpcy4iXS5qb2luKCIgIil9fX0se31dLDc0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0lOQ1JFQVNJTkc6e0NPTE9SOiIjM0Q5OTcwIixTWU1CT0w6Ilx1MjViMiJ9LERFQ1JFQVNJTkc6e0NPTE9SOiIjRkY0MTM2IixTWU1CT0w6Ilx1MjViYyJ9fX0se31dLDc0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0ZPUk1BVF9MSU5LOiJodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtMy54LWFwaS1yZWZlcmVuY2UvYmxvYi9tYXN0ZXIvRm9ybWF0dGluZy5tZCNkM19mb3JtYXQiLERBVEVfRk9STUFUX0xJTks6Imh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy10aW1lLWZvcm1hdCNsb2NhbGVfZm9ybWF0In19LHt9XSw3NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtDT01QQVJJU09OX09QUzpbIj0iLCIhPSIsIjwiLCI+PSIsIj4iLCI8PSJdLENPTVBBUklTT05fT1BTMjpbIj0iLCI8IiwiPj0iLCI+IiwiPD0iXSxJTlRFUlZBTF9PUFM6WyJbXSIsIigpIiwiWykiLCIoXSIsIl1bIiwiKSgiLCJdKCIsIilbIl0sU0VUX09QUzpbInt9IiwifXsiXSxDT05TVFJBSU5UX1JFRFVDVElPTjp7Ij0iOiI9IiwiPCI6IjwiLCI8PSI6IjwiLCI+IjoiPiIsIj49IjoiPiIsIltdIjoiW10iLCIoKSI6IltdIiwiWykiOiJbXSIsIihdIjoiW10iLCJdWyI6Il1bIiwiKSgiOiJdWyIsIl0oIjoiXVsiLCIpWyI6Il1bIn19fSx7fV0sNzUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c29saWQ6W1tdLDBdLGRvdDpbWy41LDFdLDIwMF0sZGFzaDpbWy41LDFdLDUwXSxsb25nZGFzaDpbWy41LDFdLDEwXSxkYXNoZG90OltbLjUsLjYyNSwuODc1LDFdLDUwXSxsb25nZGFzaGRvdDpbWy41LC43LC44LDFdLDEwXX19LHt9XSw3NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjaXJjbGU6Ilx1MjVjZiIsImNpcmNsZS1vcGVuIjoiXHUyNWNiIixzcXVhcmU6Ilx1MjVhMCIsInNxdWFyZS1vcGVuIjoiXHUyNWExIixkaWFtb25kOiJcdTI1YzYiLCJkaWFtb25kLW9wZW4iOiJcdTI1YzciLGNyb3NzOiIrIix4OiJcdTI3NGMifX0se31dLDc1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1NIT1dfUExBQ0VIT0xERVI6MTAwLEhJREVfUExBQ0VIT0xERVI6MWUzLERFU0VMRUNURElNOi4yfX0se31dLDc1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0JBRE5VTTp2b2lkIDAsRlBfU0FGRTpOdW1iZXIuTUFYX1ZBTFVFLzFlNCxPTkVNQVhZRUFSOjMxNjIyNGU1LE9ORUFWR1lFQVI6MzE1NTc2ZTUsT05FTUlOWUVBUjozMTUzNmU2LE9ORU1BWFFVQVJURVI6Nzk0ODhlNSxPTkVBVkdRVUFSVEVSOjc4ODk0ZTUsT05FTUlOUVVBUlRFUjo3Njg5NmU1LE9ORU1BWE1PTlRIOjI2Nzg0ZTUsT05FQVZHTU9OVEg6MjYyOThlNSxPTkVNSU5NT05USDoyNDE5MmU1LE9ORVdFRUs6NjA0OGU1LE9ORURBWTo4NjRlNSxPTkVIT1VSOjM2ZTUsT05FTUlOOjZlNCxPTkVTRUM6MWUzLEVQT0NISkQ6MjQ0MDU4Ny41LEFMTU9TVF9FUVVBTDouOTk5OTk5LExPR19DTElQOjEwLE1JTlVTX1NJR046Ilx1MjIxMiJ9fSx7fV0sNzU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IueG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIixyLnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHIueGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHIuc3ZnQXR0cnM9e3htbG5zOnIuc3ZnLCJ4bWxuczp4bGluayI6ci54bGlua319LHt9XSw3NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci52ZXJzaW9uPXQoIi4vdmVyc2lvbiIpLnZlcnNpb24sdCgiZXM2LXByb21pc2UiKS5wb2x5ZmlsbCgpLHQoIi4uL2J1aWxkL3Bsb3Rjc3MiKSx0KCIuL2ZvbnRzL21hdGhqYXhfY29uZmlnIikoKTtmb3IodmFyIG49dCgiLi9yZWdpc3RyeSIpLGk9ci5yZWdpc3Rlcj1uLnJlZ2lzdGVyLGE9dCgiLi9wbG90X2FwaSIpLG89T2JqZWN0LmtleXMoYSkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdOyJfIiE9PWwuY2hhckF0KDApJiYocltsXT1hW2xdKSxpKHttb2R1bGVUeXBlOiJhcGlNZXRob2QiLG5hbWU6bCxmbjphW2xdfSl9aSh0KCIuL3RyYWNlcy9zY2F0dGVyIikpLGkoW3QoIi4vY29tcG9uZW50cy9sZWdlbmQiKSx0KCIuL2NvbXBvbmVudHMvZngiKSx0KCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMiKSx0KCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCIpLHQoIi4vY29tcG9uZW50cy9zaGFwZXMiKSx0KCIuL2NvbXBvbmVudHMvaW1hZ2VzIiksdCgiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIiksdCgiLi9jb21wb25lbnRzL3NsaWRlcnMiKSx0KCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXIiKSx0KCIuL2NvbXBvbmVudHMvcmFuZ2VzZWxlY3RvciIpLHQoIi4vY29tcG9uZW50cy9ncmlkIiksdCgiLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLHQoIi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksdCgiLi9jb21wb25lbnRzL2NvbG9yYmFyIildKSxpKFt0KCIuL2xvY2FsZS1lbiIpLHQoIi4vbG9jYWxlLWVuLXVzIildKSx3aW5kb3cuUGxvdGx5TG9jYWxlcyYmQXJyYXkuaXNBcnJheSh3aW5kb3cuUGxvdGx5TG9jYWxlcykmJihpKHdpbmRvdy5QbG90bHlMb2NhbGVzKSxkZWxldGUgd2luZG93LlBsb3RseUxvY2FsZXMpLHIuSWNvbnM9dCgiLi9mb250cy9wbG90aWNvbiIpLHIuUGxvdHM9dCgiLi9wbG90cy9wbG90cyIpLHIuRng9dCgiLi9jb21wb25lbnRzL2Z4Iiksci5TbmFwc2hvdD10KCIuL3NuYXBzaG90Iiksci5QbG90U2NoZW1hPXQoIi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiKSxyLlF1ZXVlPXQoIi4vbGliL3F1ZXVlIiksci5kMz10KCJkMyIpfSx7Ii4uL2J1aWxkL3Bsb3Rjc3MiOjEsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucyI6NjM0LCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCI6NjM5LCIuL2NvbXBvbmVudHMvY29sb3JiYXIiOjY0OSwiLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi9jb21wb25lbnRzL2Vycm9yYmFycyI6NjcxLCIuL2NvbXBvbmVudHMvZngiOjY4MywiLi9jb21wb25lbnRzL2dyaWQiOjY4NywiLi9jb21wb25lbnRzL2ltYWdlcyI6NjkyLCIuL2NvbXBvbmVudHMvbGVnZW5kIjo3MDAsIi4vY29tcG9uZW50cy9yYW5nZXNlbGVjdG9yIjo3MTEsIi4vY29tcG9uZW50cy9yYW5nZXNsaWRlciI6NzE4LCIuL2NvbXBvbmVudHMvc2hhcGVzIjo3MzIsIi4vY29tcG9uZW50cy9zbGlkZXJzIjo3MzcsIi4vY29tcG9uZW50cy91cGRhdGVtZW51cyI6NzQzLCIuL2ZvbnRzL21hdGhqYXhfY29uZmlnIjo3NTYsIi4vZm9udHMvcGxvdGljb24iOjc1NywiLi9saWIvcXVldWUiOjc5NCwiLi9sb2NhbGUtZW4iOjgwOCwiLi9sb2NhbGUtZW4tdXMiOjgwNywiLi9wbG90X2FwaSI6ODEyLCIuL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo4MTYsIi4vcGxvdHMvcGxvdHMiOjg5MSwiLi9yZWdpc3RyeSI6OTExLCIuL3NuYXBzaG90Ijo5MTYsIi4vdHJhY2VzL3NjYXR0ZXIiOjExOTksIi4vdmVyc2lvbiI6MTM3MCxkMzoxNjksImVzNi1wcm9taXNlIjoyMjR9XSw3NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBNYXRoSmF4JiYoImxvY2FsIiE9PSh3aW5kb3cuUGxvdGx5Q29uZmlnfHx7fSkuTWF0aEpheENvbmZpZyYmKE1hdGhKYXguSHViLkNvbmZpZyh7bWVzc2FnZVN0eWxlOiJub25lIixza2lwU3RhcnR1cFR5cGVzZXQ6ITAsZGlzcGxheUFsaWduOiJsZWZ0Iix0ZXgyamF4OntpbmxpbmVNYXRoOltbIiQiLCIkIl0sWyJcXCgiLCJcXCkiXV19fSksTWF0aEpheC5IdWIuQ29uZmlndXJlZCgpKSl9fSx7fV0sNzU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dW5kbzp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtODU3IDM1MHEwLTg3LTM0LTE2NnQtOTEtMTM3LTEzNy05Mi0xNjYtMzRxLTk2IDAtMTgzIDQxdC0xNDcgMTE0cS00IDYtNCAxM3Q1IDExbDc2IDc3cTYgNSAxNCA1IDktMSAxMy03IDQxLTUzIDEwMC04MnQxMjYtMjlxNTggMCAxMTAgMjN0OTIgNjEgNjEgOTEgMjIgMTExLTIyIDExMS02MSA5MS05MiA2MS0xMTAgMjNxLTU1IDAtMTA1LTIwdC05MC01N2w3Ny03N3ExNy0xNiA4LTM4LTEwLTIzLTMzLTIzaC0yNTBxLTE1IDAtMjUgMTF0LTExIDI1djI1MHEwIDI0IDIyIDMzIDIyIDEwIDM5LThsNzItNzJxNjAgNTcgMTM3IDg4dDE1OSAzMXE4NyAwIDE2Ni0zNHQxMzctOTIgOTEtMTM3IDM0LTE2NnoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGhvbWU6e3dpZHRoOjkyOC42LGhlaWdodDoxZTMscGF0aDoibTc4NiAyOTZ2LTI2N3EwLTE1LTExLTI2dC0yNS0xMGgtMjE0djIxNGgtMTQzdi0yMTRoLTIxNHEtMTUgMC0yNSAxMHQtMTEgMjZ2MjY3cTAgMSAwIDJ0MCAybDMyMSAyNjQgMzIxLTI2NHExLTEgMS00eiBtMTI0IDM5bC0zNC00MXEtNS01LTEyLTZoLTJxLTcgMC0xMiAzbC0zODYgMzIyLTM4Ni0zMjJxLTctNC0xMy00LTcgMi0xMiA3bC0zNSA0MXEtNCA1LTMgMTN0NiAxMmw0MDEgMzM0cTE4IDE1IDQyIDE1dDQzLTE1bDEzNi0xMTR2MTA5cTAgOCA1IDEzdDEzIDVoMTA3cTggMCAxMy01dDUtMTN2LTIyN2wxMjItMTAycTUtNSA2LTEydC00LTEzeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sImNhbWVyYS1yZXRybyI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im01MTggMzg2cTAgOC01IDEzdC0xMyA1cS0zNyAwLTYzLTI3dC0yNi02M3EwLTggNS0xM3QxMy01IDEyIDUgNSAxM3EwIDIzIDE2IDM4dDM4IDE2cTggMCAxMyA1dDUgMTN6IG0xMjUtNzNxMC01OS00Mi0xMDF0LTEwMS00Mi0xMDEgNDItNDIgMTAxIDQyIDEwMSAxMDEgNDIgMTAxLTQyIDQyLTEwMXogbS01NzItMzIwaDg1OHY3MWgtODU4di03MXogbTY0MyAzMjBxMCA4OS02MiAxNTJ0LTE1MiA2Mi0xNTEtNjItNjMtMTUyIDYzLTE1MSAxNTEtNjMgMTUyIDYzIDYyIDE1MXogbS01NzEgMzU4aDIxNHY3MmgtMjE0di03MnogbS03Mi0xMDdoODU4djE0M2gtNDYybC0zNi03MWgtMzYwdi03MnogbTkyOSAxNDN2LTcxNHEwLTMwLTIxLTUxdC01MC0yMWgtODU4cS0yOSAwLTUwIDIxdC0yMSA1MXY3MTRxMCAzMCAyMSA1MXQ1MCAyMWg4NThxMjkgMCA1MC0yMXQyMS01MXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21ib3g6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0xMDAwLTI1bC0yNTAgMjUxYzQwIDYzIDYzIDEzOCA2MyAyMTggMCAyMjQtMTgyIDQwNi00MDcgNDA2LTIyNCAwLTQwNi0xODItNDA2LTQwNnMxODMtNDA2IDQwNy00MDZjODAgMCAxNTUgMjIgMjE4IDYybDI1MC0yNTAgMTI1IDEyNXogbS04MTIgMjUwbDAgNDM4IDQzNyAwIDAtNDM4LTQzNyAweiBtNjIgMzc1bDMxMyAwIDAtMzEyLTMxMyAwIDAgMzEyeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0scGFuOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMTAwMCAzNTBsLTE4NyAxODggMC0xMjUtMjUwIDAgMCAyNTAgMTI1IDAtMTg4IDE4Ny0xODctMTg3IDEyNSAwIDAtMjUwLTI1MCAwIDAgMTI1LTE4OC0xODggMTg2LTE4NyAwIDEyNSAyNTIgMCAwLTI1MC0xMjUgMCAxODctMTg4IDE4OCAxODgtMTI1IDAgMCAyNTAgMjUwIDAgMC0xMjYgMTg3IDE4OHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21fcGx1czp7d2lkdGg6ODc1LGhlaWdodDoxZTMscGF0aDoibTEgNzg3bDAtODc1IDg3NSAwIDAgODc1LTg3NSAweiBtNjg3LTUwMGwtMTg3IDAgMC0xODctMTI1IDAgMCAxODctMTg4IDAgMCAxMjUgMTg4IDAgMCAxODcgMTI1IDAgMC0xODcgMTg3IDAgMC0xMjV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSx6b29tX21pbnVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOiJtMCA3ODhsMC04NzYgODc1IDAgMCA4NzYtODc1IDB6IG02ODgtNTAwbC01MDAgMCAwIDEyNSA1MDAgMCAwLTEyNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGF1dG9zY2FsZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTI1MCA4NTBsLTE4NyAwLTYzIDAgMC02MiAwLTE4OCA2MyAwIDAgMTg4IDE4NyAwIDAgNjJ6IG02ODggMGwtMTg4IDAgMC02MiAxODggMCAwLTE4OCA2MiAwIDAgMTg4IDAgNjItNjIgMHogbS04NzUtOTM4bDAgMTg4LTYzIDAgMC0xODggMC02MiA2MyAwIDE4NyAwIDAgNjItMTg3IDB6IG04NzUgMTg4bDAtMTg4LTE4OCAwIDAtNjIgMTg4IDAgNjIgMCAwIDYyIDAgMTg4LTYyIDB6IG0tMTI1IDE4OGwtMSAwLTkzLTk0LTE1NiAxNTYgMTU2IDE1NiA5Mi05MyAyIDAgMCAyNTAtMjUwIDAgMC0yIDkzLTkyLTE1Ni0xNTYtMTU2IDE1NiA5NCA5MiAwIDItMjUwIDAgMC0yNTAgMCAwIDkzIDkzIDE1Ny0xNTYtMTU3LTE1Ni05MyA5NCAwIDAgMC0yNTAgMjUwIDAgMCAwLTk0IDkzIDE1NiAxNTcgMTU2LTE1Ny05My05MyAwIDAgMjUwIDAgMCAyNTB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSx0b29sdGlwX2Jhc2ljOnt3aWR0aDoxNTAwLGhlaWdodDoxZTMscGF0aDoibTM3NSA3MjVsMCAwLTM3NS0zNzUgMzc1LTM3NCAwLTEgMTEyNSAwIDAgNzUwLTExMjUgMHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHRvb2x0aXBfY29tcGFyZTp7d2lkdGg6MTEyNSxoZWlnaHQ6MWUzLHBhdGg6Im0xODcgNzg2bDAgMi0xODctMTg4IDE4OC0xODcgMCAwIDkzNyAwIDAgMzczLTkzOCAweiBtMC00OTlsMCAxLTE4Ny0xODggMTg4LTE4OCAwIDAgOTM3IDAgMCAzNzYtOTM4LTF6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxwbG90bHlsb2dvOnt3aWR0aDoxNTQyLGhlaWdodDoxZTMscGF0aDoibTAtMTBoMTgydi0xNDBoLTE4MnYxNDB6IG0yMjggMTQ2aDE4M3YtMjg2aC0xODN2Mjg2eiBtMjI1IDcxNGgxODJ2LTEwMDBoLTE4MnYxMDAweiBtMjI1LTI4NWgxODJ2LTcxNWgtMTgydjcxNXogbTIyNSAxNDJoMTgzdi04NTdoLTE4M3Y4NTd6IG0yMzEtNDI4aDE4MnYtNDI5aC0xODJ2NDI5eiBtMjI1LTI5MWgxODN2LTEzOGgtMTgzdjEzOHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LCJ6LWF4aXMiOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtODMzIDVsLTE3IDEwOHY0MWwtMTMwLTY1IDEzMC02NmMwIDAgMCAzOCAwIDM5IDAtMSAzNi0xNCAzOS0yNSA0LTE1LTYtMjItMTYtMzAtMTUtMTItMzktMTYtNTYtMjAtOTAtMjItMTg3LTIzLTI3OS0yMy0yNjEgMC0zNDEgMzQtMzUzIDU5IDMgNjAgMjI4IDExMCAyMjggMTEwLTE0MC04LTM1MS0zNS0zNTEtMTE2IDAtMTIwIDI5My0xNDIgNDc0LTE0MiAxNTUgMCA0NzcgMjIgNDc3IDE0MiAwIDUwLTc0IDc5LTE2MyA5NnogbS0zNzQgOTRjLTU4LTUtOTktMjEtOTktNDAgMC0yNCA2NS00MyAxNDQtNDMgNzkgMCAxNDMgMTkgMTQzIDQzIDAgMTktNDIgMzQtOTggNDB2MjE2aDg3bC0xMzIgMTM1LTEzMy0xMzVoODh2LTIxNnogbTE2NyA1MTVoLTEzNnYxYzE2IDE2IDMxIDM0IDQ2IDUybDg0IDEwOXY1NGgtMjMwdi03MWgxMjR2LTFjLTE2LTE3LTI4LTMyLTQ0LTUxbC04OS0xMTR2LTUxaDI0NXY3MnoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LCIzZF9yb3RhdGUiOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtOTIyIDY2MGMtNSA0LTkgNy0xNCAxMS0zNTkgMjYzLTU4MC0zMS01ODAtMzFsLTEwMiAyOCA1OC00MDBjMCAxIDEgMSAyIDIgMTE4IDEwOCAzNTEgMjQ5IDM1MSAyNDlzLTYyIDI3LTEwMCA0MmM4OCA4MyAyMjIgMTgzIDM0NyAxMjIgMTYtOCAzMC0xNyA0NC0yNy0yIDEtNCAyLTYgNHogbTM2LTMyOWMwIDAgNjQgMjI5LTg4IDI5Ni02MiAyNy0xMjQgMTQtMTc1LTExIDE1Ny03OCAyMjUtMjA4IDI0OS0yNjYgOC0xOSAxMS0zMSAxMS0zMSAyIDUgNiAxNSAxMSAzMi01LTEzLTgtMjAtOC0yMHogbS03NzUtMjM5YzcwLTMxIDExNy01MCAxOTgtMzItMTIxIDgwLTE5OSAzNDYtMTk5IDM0NmwtOTYtMTUtNTgtMTJjMCAwIDU1LTIyNiAxNTUtMjg3eiBtNjAzIDEzM2wtMzE3LTEzOWMwIDAgNC00IDE5LTE0IDctNSAyNC0xNSAyNC0xNXMtMTc3LTE0Ny0zODkgNGMyMzUtMjg3IDUzNi0xMTIgNTM2LTExMmwzMS0yMiAxMDAgMjk5LTQtMXogbS0yOTgtMTUzYzYtNCAxNC05IDI0LTE1IDAgMC0xNyAxMC0yNCAxNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGNhbWVyYTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTUwMCA0NTBjLTgzIDAtMTUwLTY3LTE1MC0xNTAgMC04MyA2Ny0xNTAgMTUwLTE1MCA4MyAwIDE1MCA2NyAxNTAgMTUwIDAgODMtNjcgMTUwLTE1MCAxNTB6IG00MDAgMTUwaC0xMjBjLTE2IDAtMzQgMTMtMzkgMjlsLTMxIDkzYy02IDE1LTIzIDI4LTQwIDI4aC0zNDBjLTE2IDAtMzQtMTMtMzktMjhsLTMxLTk0Yy02LTE1LTIzLTI4LTQwLTI4aC0xMjBjLTU1IDAtMTAwLTQ1LTEwMC0xMDB2LTQ1MGMwLTU1IDQ1LTEwMCAxMDAtMTAwaDgwMGM1NSAwIDEwMCA0NSAxMDAgMTAwdjQ1MGMwIDU1LTQ1IDEwMC0xMDAgMTAweiBtLTQwMC01NTBjLTEzOCAwLTI1MCAxMTItMjUwIDI1MCAwIDEzOCAxMTIgMjUwIDI1MCAyNTAgMTM4IDAgMjUwLTExMiAyNTAtMjUwIDAtMTM4LTExMi0yNTAtMjUwLTI1MHogbTM2NSAzODBjLTE5IDAtMzUgMTYtMzUgMzUgMCAxOSAxNiAzNSAzNSAzNSAxOSAwIDM1LTE2IDM1LTM1IDAtMTktMTYtMzUtMzUtMzV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxtb3ZpZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTkzOCA0MTNsLTE4OC0xMjVjMCAzNy0xNyA3MS00NCA5NCA2NCAzOCAxMDcgMTA3IDEwNyAxODcgMCAxMjEtOTggMjE5LTIxOSAyMTktMTIxIDAtMjE5LTk4LTIxOS0yMTkgMC02MSAyNS0xMTcgNjYtMTU2aC0xMTVjMzAgMzMgNDkgNzYgNDkgMTI1IDAgMTAzLTg0IDE4Ny0xODcgMTg3cy0xODgtODQtMTg4LTE4N2MwLTU3IDI2LTEwNyA2NS0xNDEtMzgtMjItNjUtNjItNjUtMTA5di0yNTBjMC03MCA1Ni0xMjYgMTI1LTEyNmg1MDBjNjkgMCAxMjUgNTYgMTI1IDEyNmwxODgtMTI2YzM0IDAgNjIgMjggNjIgNjN2Mzc1YzAgMzUtMjggNjMtNjIgNjN6IG0tNzUwIDBjLTY5IDAtMTI1IDU2LTEyNSAxMjVzNTYgMTI1IDEyNSAxMjUgMTI1LTU2IDEyNS0xMjUtNTYtMTI1LTEyNS0xMjV6IG00MDYtMWMtODcgMC0xNTcgNzAtMTU3IDE1NyAwIDg2IDcwIDE1NiAxNTcgMTU2czE1Ni03MCAxNTYtMTU2LTcwLTE1Ny0xNTYtMTU3eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0scXVlc3Rpb246e3dpZHRoOjg1Ny4xLGhlaWdodDoxZTMscGF0aDoibTUwMCA4MnYxMDdxMCA4LTUgMTN0LTEzIDVoLTEwN3EtOCAwLTEzLTV0LTUtMTN2LTEwN3EwLTggNS0xM3QxMy01aDEwN3E4IDAgMTMgNXQ1IDEzeiBtMTQzIDM3NXEwIDQ5LTMxIDkxdC03NyA2NS05NSAyM3EtMTM2IDAtMjA3LTExOS05LTE0IDQtMjRsNzQtNTVxNC00IDEwLTQgOSAwIDE0IDcgMzAgMzggNDggNTEgMTkgMTQgNDggMTQgMjcgMCA0OC0xNXQyMS0zM3EwLTIxLTExLTM0dC0zOC0yNXEtMzUtMTYtNjUtNDh0LTI5LTcwdi0yMHEwLTggNS0xM3QxMy01aDEwN3E4IDAgMTMgNXQ1IDEzcTAgMTAgMTIgMjd0MzAgMjhxMTggMTAgMjggMTZ0MjUgMTkgMjUgMjcgMTYgMzQgNyA0NXogbTIxNC0xMDdxMC0xMTctNTctMjE1dC0xNTYtMTU2LTIxNS01OC0yMTYgNTgtMTU1IDE1Ni01OCAyMTUgNTggMjE1IDE1NSAxNTYgMjE2IDU4IDIxNS01OCAxNTYtMTU2IDU3LTIxNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGRpc2s6e3dpZHRoOjg1Ny4xLGhlaWdodDoxZTMscGF0aDoibTIxNC03aDQyOXYyMTRoLTQyOXYtMjE0eiBtNTAwIDBoNzJ2NTAwcTAgOC02IDIxdC0xMSAyMGwtMTU3IDE1NnEtNSA2LTE5IDEydC0yMiA1di0yMzJxMC0yMi0xNS0zOHQtMzgtMTZoLTMyMnEtMjIgMC0zNyAxNnQtMTYgMzh2MjMyaC03MnYtNzE0aDcydjIzMnEwIDIyIDE2IDM4dDM3IDE2aDQ2NXEyMiAwIDM4LTE2dDE1LTM4di0yMzJ6IG0tMjE0IDUxOHYxNzhxMCA4LTUgMTN0LTEzIDVoLTEwN3EtNyAwLTEzLTV0LTUtMTN2LTE3OHEwLTggNS0xM3QxMy01aDEwN3E3IDAgMTMgNXQ1IDEzeiBtMzU3LTE4di01MThxMC0yMi0xNS0zOHQtMzgtMTZoLTc1MHEtMjMgMC0zOCAxNnQtMTYgMzh2NzUwcTAgMjIgMTYgMzh0MzggMTZoNTE3cTIzIDAgNTAtMTJ0NDItMjZsMTU2LTE1N3ExNi0xNSAyNy00MnQxMS00OXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGRyYXdvcGVucGF0aDp7d2lkdGg6NzAsaGVpZ2h0OjcwLHBhdGg6Ik0zMy4yMSw4NS42NWE3LjMxLDcuMzEsMCwwLDEtMi41OS0uNDhjLTguMTYtMy4xMS05LjI3LTE5LjgtOS44OC00MS4zLS4xLTMuNTgtLjE5LTYuNjgtLjM1LTktLjE1LTIuMS0uNjctMy40OC0xLjQzLTMuNzktMi4xMy0uODgtNy45MSwyLjMyLTEyLDUuODZMMywzMi4zOGMxLjg3LTEuNjQsMTEuNTUtOS42NiwxOC4yNy02LjksMi4xMy44Nyw0Ljc1LDMuMTQsNS4xNyw5LC4xNywyLjQzLjI2LDUuNTkuMzYsOS4yNWEyMjQuMTcsMjI0LjE3LDAsMCwwLDEuNSwyMy40YzEuNTQsMTAuNzYsNCwxMi4yMiw0LjQ4LDEyLjQuODQuMzIsMi43OS0uNDYsNS43Ni0zLjU5TDQzLDgwLjA3QzQxLjUzLDgxLjU3LDM3LjY4LDg1LjY0LDMzLjIxLDg1LjY1Wk03NC44MSw2OWExMS4zNCwxMS4zNCwwLDAsMCw2LjA5LTYuNzJMODcuMjYsNDQuNSw3NC43MiwzMiw1Ni45LDM4LjM1Yy0yLjM3Ljg2LTUuNTcsMy40Mi02LjYxLDZMMzguNjUsNzIuMTRsOC40Miw4LjQzWk01NSw0Ni4yN2E3LjkxLDcuOTEsMCwwLDEsMy42NC0zLjE3bDE0LjgtNS4zLDgsOEw3Ni4xMSw2MC42bC0uMDYuMTlhNi4zNyw2LjM3LDAsMCwxLTMsMy40M0w0OC4yNSw3NC41OSw0NC42Miw3MVptMTYuNTcsNy44MkE2LjksNi45LDAsMSwwLDY0LjY0LDYxLDYuOTEsNi45MSwwLDAsMCw3MS41NCw1NC4wOVptLTQuMDUsMGEyLjg1LDIuODUsMCwxLDEtMi44NS0yLjg1QTIuODYsMi44NiwwLDAsMSw2Ny40OSw1NC4wOVptLTQuMTMsNS4yMkw2MC41LDU2LjQ1LDQ0LjI2LDcyLjdsMi44NiwyLjg2Wk05Ny44MywzNS42Nyw4NC4xNCwyMmwtOC41Nyw4LjU3TDg5LjI2LDQ0LjI0Wm0tMTMuNjktOCw4LDgtMi44NSwyLjg1LTgtOFoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTE1IC0xNSkifSxkcmF3Y2xvc2VkcGF0aDp7d2lkdGg6OTAsaGVpZ2h0OjkwLHBhdGg6Ik04OC40MSwyMS4xMmEyNi41NiwyNi41NiwwLDAsMC0zNi4xOCwwbC0yLjA3LDItMi4wNy0yYTI2LjU3LDI2LjU3LDAsMCwwLTM2LjE4LDAsMjMuNzQsMjMuNzQsMCwwLDAsMCwzNC44TDQ4LDkwLjEyYTMuMjIsMy4yMiwwLDAsMCw0LjQyLDBsMzYtMzQuMjFhMjMuNzMsMjMuNzMsMCwwLDAsMC0zNC43OVpNODQsNTEuMjQsNTAuMTYsODMuMzUsMTYuMzUsNTEuMjVhMTcuMjgsMTcuMjgsMCwwLDEsMC0yNS40NywyMCwyMCwwLDAsMSwyNy4zLDBsNC4yOSw0LjA3YTMuMjMsMy4yMywwLDAsMCw0LjQ0LDBsNC4yOS00LjA3YTIwLDIwLDAsMCwxLDI3LjMsMCwxNy4yNywxNy4yNywwLDAsMSwwLDI1LjQ2Wk02Ni43Niw0Ny42OGgtMzN2Ni45MWgzM1pNNTMuMzUsMzVINDYuNDRWNjhoNi45MVoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTUgLTUpIn0sbGFzc286e3dpZHRoOjEwMzEsaGVpZ2h0OjFlMyxwYXRoOiJtMTAxOCA1MzhjLTM2IDIwNy0yOTAgMzM2LTU2OCAyODYtMjc3LTQ4LTQ3My0yNTYtNDM2LTQ2MyAxMC01NyAzNi0xMDggNzYtMTUxLTEzLTY2IDExLTEzNyA2OC0xODMgMzQtMjggNzUtNDEgMTE0LTQybC01NS03MCAwIDBjLTItMS0zLTItNC0zLTEwLTE0LTgtMzQgNS00NSAxNC0xMSAzNC04IDQ1IDQgMSAxIDIgMyAyIDVsMCAwIDExMyAxNDBjMTYgMTEgMzEgMjQgNDUgNDAgNCAzIDYgNyA4IDExIDQ4LTMgMTAwIDAgMTUxIDkgMjc4IDQ4IDQ3MyAyNTUgNDM2IDQ2MnogbS02MjQtMzc5Yy04MCAxNC0xNDkgNDgtMTk3IDk2IDQyIDQyIDEwOSA0NyAxNTYgOSAzMy0yNiA0Ny02NiA0MS0xMDV6IG0tMTg3LTc0Yy0xOSAxNi0zMyAzNy0zOSA2MCA1MC0zMiAxMDktNTUgMTc0LTY4LTQyLTI1LTk1LTI0LTEzNSA4eiBtMzYwIDc1Yy0zNC03LTY5LTktMTAyLTggOCA2Mi0xNiAxMjgtNjggMTcwLTczIDU5LTE3NSA1NC0yNDQtNS05IDIwLTE2IDQwLTIwIDYxLTI4IDE1OSAxMjEgMzE3IDMzMyAzNTRzNDA3LTYwIDQzNC0yMTdjMjgtMTU5LTEyMS0zMTgtMzMzLTM1NXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHNlbGVjdGJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTAgODUwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg1bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGRyYXdsaW5lOnt3aWR0aDo3MCxoZWlnaHQ6NzAscGF0aDoiTTYwLjY0LDYyLjNhMTEuMjksMTEuMjksMCwwLDAsNi4wOS02LjcybDYuMzUtMTcuNzJMNjAuNTQsMjUuMzFsLTE3LjgyLDYuNGMtMi4zNi44Ni01LjU3LDMuNDEtNi42LDZMMjQuNDgsNjUuNWw4LjQyLDguNDJaTTQwLjc5LDM5LjYzYTcuODksNy44OSwwLDAsMSwzLjY1LTMuMTdsMTQuNzktNS4zMSw4LDhMNjEuOTQsNTRsLS4wNi4xOWE2LjQ0LDYuNDQsMCwwLDEtMywzLjQzTDM0LjA3LDY4bC0zLjYyLTMuNjNabTE2LjU3LDcuODFhNi45LDYuOSwwLDEsMC02Ljg5LDYuOUE2LjksNi45LDAsMCwwLDU3LjM2LDQ3LjQ0Wm0tNCwwYTIuODYsMi44NiwwLDEsMS0yLjg1LTIuODVBMi44NiwyLjg2LDAsMCwxLDUzLjMyLDQ3LjQ0Wm0tNC4xMyw1LjIyTDQ2LjMzLDQ5LjgsMzAuMDgsNjYuMDVsMi44NiwyLjg2Wk04My42NSwyOSw3MCwxNS4zNCw2MS40LDIzLjksNzUuMDksMzcuNTlaTTcwLDIxLjA2bDgsOC0yLjg0LDIuODUtOC04Wk04Nyw4MC40OUgxMC42N1Y4N0g4N1oiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTE1IC0xNSkifSxkcmF3cmVjdDp7d2lkdGg6ODAsaGVpZ2h0OjgwLHBhdGg6Ik03OCwyMlY3OUgyMVYyMkg3OG05LTlIMTJWODhIODdWMTNaTTY4LDQ2LjIySDMxVjU0SDY4Wk01MywzMkg0NS4yMlY2OUg1M1oiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTEwIC0xMCkifSxkcmF3Y2lyY2xlOnt3aWR0aDo4MCxoZWlnaHQ6ODAscGF0aDoiTTUwLDg0LjcyQzI2Ljg0LDg0LjcyLDgsNjkuMjgsOCw1MC4zUzI2Ljg0LDE1Ljg3LDUwLDE1Ljg3LDkyLDMxLjMxLDkyLDUwLjMsNzMuMTYsODQuNzIsNTAsODQuNzJabTAtNjAuNTljLTE4LjYsMC0zMy43NCwxMS43NC0zMy43NCwyNi4xN1MzMS40LDc2LjQ2LDUwLDc2LjQ2LDgzLjc0LDY0LjcyLDgzLjc0LDUwLjMsNjguNiwyNC4xMyw1MCwyNC4xM1ptMTcuMTUsMjJoLTM0djcuMTFoMzRabS0xMy44LTEzSDQ2LjI0djM0aDcuMTFaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC0xMCAtMTApIn0sZXJhc2VzaGFwZTp7d2lkdGg6ODAsaGVpZ2h0OjgwLHBhdGg6Ik04Mi43Nyw3OEgzMS44NUw2LDQ5LjU3LDMxLjg1LDIxLjE0SDgyLjc3YTguNzIsOC43MiwwLDAsMSw4LjY1LDguNzdWNjkuMjRBOC43Miw4LjcyLDAsMCwxLDgyLjc3LDc4Wk0zNS40Niw2OS44NEg4Mi43N2EuNTcuNTcsMCwwLDAsLjQ5LS42VjI5LjkxYS41Ny41NywwLDAsMC0uNDktLjYxSDM1LjQ2TDE3LDQ5LjU3Wm0zMi42OC0zNC43LTI0LDI0LDUsNSwyNC0yNFptLTE5LC41My01LDUsMjQsMjQsNS01WiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTAgLTEwKSJ9LHNwaWtlbGluZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoiTTUxMiA0MDljMC01Ny00Ni0xMDQtMTAzLTEwNC01NyAwLTEwNCA0Ny0xMDQgMTA0IDAgNTcgNDcgMTAzIDEwNCAxMDMgNTcgMCAxMDMtNDYgMTAzLTEwM3ogbS0zMjctMzlsOTIgMCAwIDkyLTkyIDB6IG0tMTg1IDBsOTIgMCAwIDkyLTkyIDB6IG0zNzAtMTg2bDkyIDAgMCA5My05MiAweiBtMC0xODRsOTIgMCAwIDkyLTkyIDB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxLjUgMCAwIC0xLjUgMCA4NTApIn0scGVuY2lsOnt3aWR0aDoxNzkyLGhlaWdodDoxNzkyLHBhdGg6Ik00OTEgMTUzNmw5MS05MS0yMzUtMjM1LTkxIDkxdjEwN2gxMjh2MTI4aDEwN3ptNTIzLTkyOHEwLTIyLTIyLTIyLTEwIDAtMTcgN2wtNTQyIDU0MnEtNyA3LTcgMTcgMCAyMiAyMiAyMiAxMCAwIDE3LTdsNTQyLTU0MnE3LTcgNy0xN3ptLTU0LTE5Mmw0MTYgNDE2LTgzMiA4MzJoLTQxNnYtNDE2em02ODMgOTZxMCA1My0zNyA5MGwtMTY2IDE2Ni00MTYtNDE2IDE2Ni0xNjVxMzYtMzggOTAtMzggNTMgMCA5MSAzOGwyMzUgMjM0cTM3IDM5IDM3IDkxeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAwIDEpIn0sbmV3cGxvdGx5bG9nbzp7bmFtZToibmV3cGxvdGx5bG9nbyIsc3ZnOiI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDEzMiAxMzInPjxkZWZzPjxzdHlsZT4uY2xzLTEge2ZpbGw6ICMzZjRmNzU7fSAuY2xzLTIge2ZpbGw6ICM4MGNmYmU7fSAuY2xzLTMge2ZpbGw6ICNmZmY7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5wbG90bHktbG9nb21hcms8L3RpdGxlPjxnIGlkPSdzeW1ib2wnPjxyZWN0IGNsYXNzPSdjbHMtMScgd2lkdGg9JzEzMicgaGVpZ2h0PScxMzInIHJ4PSc2JyByeT0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNzgnIGN5PSc1NCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMTAyJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9Jzc4JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzU0JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nNTQnIHI9JzYnLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00zMCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCwzMCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J003OCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCw3OCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J001NCw0OGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjU0QTYsNiwwLDAsMCw1NCw0OFonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00xMDIsNDhhNiw2LDAsMCwwLTYsNnY0OGE2LDYsMCwwLDAsMTIsMFY1NEE2LDYsMCwwLDAsMTAyLDQ4WicvPjwvZz48L3N2Zz4ifX19LHt9XSw3NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5pc0xlZnRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuImxlZnQiPT09dC54YW5jaG9yfHwiYXV0byI9PT10LnhhbmNob3ImJnQueDw9MS8zfSxyLmlzQ2VudGVyQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJjZW50ZXIiPT09dC54YW5jaG9yfHwiYXV0byI9PT10LnhhbmNob3ImJnQueD4xLzMmJnQueDwyLzN9LHIuaXNSaWdodEFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4icmlnaHQiPT09dC54YW5jaG9yfHwiYXV0byI9PT10LnhhbmNob3ImJnQueD49Mi8zfSxyLmlzVG9wQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJ0b3AiPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueT49Mi8zfSxyLmlzTWlkZGxlQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJtaWRkbGUiPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueT4xLzMmJnQueTwyLzN9LHIuaXNCb3R0b21BbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuImJvdHRvbSI9PT10LnlhbmNob3J8fCJhdXRvIj09PXQueWFuY2hvciYmdC55PD0xLzN9fSx7fV0sNzU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbW9kIiksaT1uLm1vZCxhPW4ubW9kSGFsZixvPU1hdGguUEkscz0yKm87ZnVuY3Rpb24gbCh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS10WzBdKT5zLTFlLTE0fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gYShlLXQscyl9ZnVuY3Rpb24gdSh0LGUpe2lmKGwoZSkpcmV0dXJuITA7dmFyIHIsbjtlWzBdPGVbMV0/KHI9ZVswXSxuPWVbMV0pOihyPWVbMV0sbj1lWzBdKSwocj1pKHIscykpPihuPWkobixzKSkmJihuKz1zKTt2YXIgYT1pKHQscyksbz1hK3M7cmV0dXJuIGE+PXImJmE8PW58fG8+PXImJm88PW59ZnVuY3Rpb24gZih0LGUscixuLGksYSxjKXtpPWl8fDAsYT1hfHwwO3ZhciB1LGYsaCxwLGQsZz1sKFtyLG5dKTtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSkraSxhLXQqTWF0aC5zaW4oZSldfWc/KHU9MCxmPW8saD1zKTpyPG4/KHU9cixoPW4pOih1PW4saD1yKSx0PGU/KHA9dCxkPWUpOihwPWUsZD10KTt2YXIgdix5PU1hdGguYWJzKGgtdSk8PW8/MDoxO2Z1bmN0aW9uIHgodCxlLHIpe3JldHVybiJBIitbdCx0XSsiICIrWzAseSxyXSsiICIrbSh0LGUpfXJldHVybiBnP3Y9bnVsbD09PXA/Ik0iK20oZCx1KSt4KGQsZiwwKSt4KGQsaCwwKSsiWiI6Ik0iK20ocCx1KSt4KHAsZiwwKSt4KHAsaCwwKSsiWk0iK20oZCx1KSt4KGQsZiwxKSt4KGQsaCwxKSsiWiI6bnVsbD09PXA/KHY9Ik0iK20oZCx1KSt4KGQsaCwwKSxjJiYodis9IkwwLDBaIikpOnY9Ik0iK20ocCx1KSsiTCIrbShkLHUpK3goZCxoLDApKyJMIittKHAsaCkreChwLHUsMSkrIloiLHZ9ZS5leHBvcnRzPXtkZWcycmFkOmZ1bmN0aW9uKHQpe3JldHVybiB0LzE4MCpvfSxyYWQyZGVnOmZ1bmN0aW9uKHQpe3JldHVybiB0L28qMTgwfSxhbmdsZURlbHRhOmMsYW5nbGVEaXN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKGModCxlKSl9LGlzRnVsbENpcmNsZTpsLGlzQW5nbGVJbnNpZGVTZWN0b3I6dSxpc1B0SW5zaWRlU2VjdG9yOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiEhdShlLG4pJiYoclswXTxyWzFdPyhpPXJbMF0sYT1yWzFdKTooaT1yWzFdLGE9clswXSksdD49aSYmdDw9YSk7dmFyIGksYX0scGF0aEFyYzpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBmKG51bGwsdCxlLHIsbixpLDApfSxwYXRoU2VjdG9yOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGYobnVsbCx0LGUscixuLGksMSl9LHBhdGhBbm51bHVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gZih0LGUscixuLGksYSwxKX19fSx7Ii4vbW9kIjo3ODV9XSw3NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49QXJyYXkuaXNBcnJheSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlcjp7aXNWaWV3OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSxhPSJ1bmRlZmluZWQiPT10eXBlb2YgRGF0YVZpZXc/ZnVuY3Rpb24oKXt9OkRhdGFWaWV3O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGkuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBhKX1mdW5jdGlvbiBzKHQpe3JldHVybiBuKHQpfHxvKHQpfWZ1bmN0aW9uIGwodCxlLHIpe2lmKHModCkpe2lmKHModFswXSkpe2Zvcih2YXIgbj1yLGk9MDtpPHQubGVuZ3RoO2krKyluPWUobix0W2ldLmxlbmd0aCk7cmV0dXJuIG59cmV0dXJuIHQubGVuZ3RofXJldHVybiAwfXIuaXNUeXBlZEFycmF5PW8sci5pc0FycmF5T3JUeXBlZEFycmF5PXMsci5pc0FycmF5MUQ9ZnVuY3Rpb24odCl7cmV0dXJuIXModFswXSl9LHIuZW5zdXJlQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KXx8KHQ9W10pLHQubGVuZ3RoPWUsdH0sci5jb25jYXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsaSxhLG8scyxsLGM9W10sdT0hMCxmPTA7Zm9yKHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKShvPShpPWFyZ3VtZW50c1tyXSkubGVuZ3RoKSYmKGU/Yy5wdXNoKGkpOihlPWksYT1vKSxuKGkpP3Q9ITE6KHU9ITEsZj90IT09aS5jb25zdHJ1Y3RvciYmKHQ9ITEpOnQ9aS5jb25zdHJ1Y3RvciksZis9byk7aWYoIWYpcmV0dXJuW107aWYoIWMubGVuZ3RoKXJldHVybiBlO2lmKHUpcmV0dXJuIGUuY29uY2F0LmFwcGx5KGUsYyk7aWYodCl7Zm9yKChzPW5ldyB0KGYpKS5zZXQoZSkscj0wO3I8Yy5sZW5ndGg7cisrKWk9Y1tyXSxzLnNldChpLGEpLGErPWkubGVuZ3RoO3JldHVybiBzfWZvcihzPW5ldyBBcnJheShmKSxsPTA7bDxlLmxlbmd0aDtsKyspc1tsXT1lW2xdO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspe2ZvcihpPWNbcl0sbD0wO2w8aS5sZW5ndGg7bCsrKXNbYStsXT1pW2xdO2ErPWx9cmV0dXJuIHN9LHIubWF4Um93TGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsTWF0aC5tYXgsMCl9LHIubWluUm93TGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsTWF0aC5taW4sMS8wKX19LHt9XSw3NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT0vXlsnIiUsJCNccyddK3xbLCBdfFsnIiUsJCNccyddKyQvZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYodD10LnJlcGxhY2UoYSwiIikpLG4odCk/TnVtYmVyKHQpOml9fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiZmFzdC1pc251bWVyaWMiOjI0MX1dLDc2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9nbGNhbnZhcyYmZS5fZ2xjYW52YXMuc2l6ZSgpJiZlLl9nbGNhbnZhcy5lYWNoKChmdW5jdGlvbih0KXt0LnJlZ2wmJnQucmVnbC5jbGVhcih7Y29sb3I6ITAsZGVwdGg6ITB9KX0pKX19LHt9XSw3NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXImJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKSxkZWxldGUgdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcil9fSx7fV0sNzY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzIikscz10KCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0sbD10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGM9dCgiLi9yZWdleCIpLmNvdW50ZXIsdT10KCIuL21vZCIpLm1vZEhhbGYsZj10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiBoKHQsZSl7dmFyIG49ci52YWxPYmplY3RNZXRhW2UudmFsVHlwZV07aWYoZS5hcnJheU9rJiZmKHQpKXJldHVybiEwO2lmKG4udmFsaWRhdGVGdW5jdGlvbilyZXR1cm4gbi52YWxpZGF0ZUZ1bmN0aW9uKHQsZSk7dmFyIGk9e30sYT1pLG89e3NldDpmdW5jdGlvbih0KXthPXR9fTtyZXR1cm4gbi5jb2VyY2VGdW5jdGlvbih0LG8saSxlKSxhIT09aX1yLnZhbE9iamVjdE1ldGE9e2RhdGFfYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtmKHQpP2Uuc2V0KHQpOnZvaWQgMCE9PXImJmUuc2V0KHIpfX0sZW51bWVyYXRlZDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7bi5jb2VyY2VOdW1iZXImJih0PSt0KSwtMT09PW4udmFsdWVzLmluZGV4T2YodCk/ZS5zZXQocik6ZS5zZXQodCl9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtlLmNvZXJjZU51bWJlciYmKHQ9K3QpO2Zvcih2YXIgcj1lLnZhbHVlcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPVN0cmluZyhyW25dKTtpZigiLyI9PT1pLmNoYXJBdCgwKSYmIi8iPT09aS5jaGFyQXQoaS5sZW5ndGgtMSkpe2lmKG5ldyBSZWdFeHAoaS5zdWJzdHIoMSxpLmxlbmd0aC0yKSkudGVzdCh0KSlyZXR1cm4hMH1lbHNlIGlmKHQ9PT1yW25dKXJldHVybiEwfXJldHVybiExfX0sYm9vbGVhbjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpeyEwPT09dHx8ITE9PT10P2Uuc2V0KHQpOmUuc2V0KHIpfX0sbnVtYmVyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixpKXshbih0KXx8dm9pZCAwIT09aS5taW4mJnQ8aS5taW58fHZvaWQgMCE9PWkubWF4JiZ0PmkubWF4P2Uuc2V0KHIpOmUuc2V0KCt0KX19LGludGVnZXI6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLGkpe3QlMXx8IW4odCl8fHZvaWQgMCE9PWkubWluJiZ0PGkubWlufHx2b2lkIDAhPT1pLm1heCYmdD5pLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxzdHJpbmc6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIGk9Im51bWJlciI9PXR5cGVvZiB0OyEwIT09bi5zdHJpY3QmJmk/ZS5zZXQoU3RyaW5nKHQpKTplLnNldChyKX1lbHNlIG4ubm9CbGFuayYmIXQ/ZS5zZXQocik6ZS5zZXQodCl9fSxjb2xvcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe2kodCkuaXNWYWxpZCgpP2Uuc2V0KHQpOmUuc2V0KHIpfX0sY29sb3JsaXN0Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGgmJnQuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLmlzVmFsaWQoKX0pKT9lLnNldCh0KTplLnNldChyKX19LGNvbG9yc2NhbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtlLnNldChvLmdldCh0LHIpKX19LGFuZ2xlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ImF1dG8iPT09dD9lLnNldCgiYXV0byIpOm4odCk/ZS5zZXQodSgrdCwzNjApKTplLnNldChyKX19LHN1YnBsb3RpZDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5yZWdleHx8YyhyKTsic3RyaW5nIj09dHlwZW9mIHQmJmkudGVzdCh0KT9lLnNldCh0KTplLnNldChyKX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPWUuZGZsdDtyZXR1cm4gdD09PXJ8fCJzdHJpbmciPT10eXBlb2YgdCYmISFjKHIpLnRlc3QodCl9fSxmbGFnbGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlmKC0xPT09KG4uZXh0cmFzfHxbXSkuaW5kZXhPZih0KSl7Zm9yKHZhciBpPXQuc3BsaXQoIisiKSxhPTA7YTxpLmxlbmd0aDspe3ZhciBvPWlbYV07LTE9PT1uLmZsYWdzLmluZGV4T2Yobyl8fGkuaW5kZXhPZihvKTxhP2kuc3BsaWNlKGEsMSk6YSsrfWkubGVuZ3RoP2Uuc2V0KGkuam9pbigiKyIpKTplLnNldChyKX1lbHNlIGUuc2V0KHQpO2Vsc2UgZS5zZXQocil9fSxhbnk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT10P2Uuc2V0KHIpOmUuc2V0KHQpfX0saW5mb19hcnJheTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLG4saSl7ZnVuY3Rpb24gYSh0LGUsbil7dmFyIGksYT17c2V0OmZ1bmN0aW9uKHQpe2k9dH19O3JldHVybiB2b2lkIDA9PT1uJiYobj1lLmRmbHQpLHIudmFsT2JqZWN0TWV0YVtlLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uKHQsYSxuLGUpLGl9dmFyIG89Mj09PWkuZGltZW5zaW9uc3x8IjEtMiI9PT1pLmRpbWVuc2lvbnMmJkFycmF5LmlzQXJyYXkodCkmJkFycmF5LmlzQXJyYXkodFswXSk7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIHMsbCxjLHUsZixoLHA9aS5pdGVtcyxkPVtdLGc9QXJyYXkuaXNBcnJheShwKSxtPWcmJm8mJkFycmF5LmlzQXJyYXkocFswXSksdj1vJiZnJiYhbSx5PWcmJiF2P3AubGVuZ3RoOnQubGVuZ3RoO2lmKG49QXJyYXkuaXNBcnJheShuKT9uOltdLG8pZm9yKHM9MDtzPHk7cysrKWZvcihkW3NdPVtdLGM9QXJyYXkuaXNBcnJheSh0W3NdKT90W3NdOltdLGY9dj9wLmxlbmd0aDpnP3Bbc10ubGVuZ3RoOmMubGVuZ3RoLGw9MDtsPGY7bCsrKXU9dj9wW2xdOmc/cFtzXVtsXTpwLHZvaWQgMCE9PShoPWEoY1tsXSx1LChuW3NdfHxbXSlbbF0pKSYmKGRbc11bbF09aCk7ZWxzZSBmb3Iocz0wO3M8eTtzKyspdm9pZCAwIT09KGg9YSh0W3NdLGc/cFtzXTpwLG5bc10pKSYmKGRbc109aCk7ZS5zZXQoZCl9ZWxzZSBlLnNldChuKX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbih0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiExO3ZhciByPWUuaXRlbXMsbj1BcnJheS5pc0FycmF5KHIpLGk9Mj09PWUuZGltZW5zaW9ucztpZighZS5mcmVlTGVuZ3RoJiZ0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKWlmKGkpe2lmKCFBcnJheS5pc0FycmF5KHRbYV0pfHwhZS5mcmVlTGVuZ3RoJiZ0W2FdLmxlbmd0aCE9PXJbYV0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbz0wO288dFthXS5sZW5ndGg7bysrKWlmKCFoKHRbYV1bb10sbj9yW2FdW29dOnIpKXJldHVybiExfWVsc2UgaWYoIWgodFthXSxuP3JbYV06cikpcmV0dXJuITE7cmV0dXJuITB9fX0sci5jb2VyY2U9ZnVuY3Rpb24odCxlLG4saSxhKXt2YXIgbz1sKG4saSkuZ2V0KCkscz1sKHQsaSksYz1sKGUsaSksdT1zLmdldCgpLHA9ZS5fdGVtcGxhdGU7aWYodm9pZCAwPT09dSYmcCYmKHU9bChwLGkpLmdldCgpLHA9MCksdm9pZCAwPT09YSYmKGE9by5kZmx0KSxvLmFycmF5T2smJmYodSkpcmV0dXJuIGMuc2V0KHUpLHU7dmFyIGQ9ci52YWxPYmplY3RNZXRhW28udmFsVHlwZV0uY29lcmNlRnVuY3Rpb247ZCh1LGMsYSxvKTt2YXIgZz1jLmdldCgpO3JldHVybiBwJiZnPT09YSYmIWgodSxvKSYmKGQodT1sKHAsaSkuZ2V0KCksYyxhLG8pLGc9Yy5nZXQoKSksZ30sci5jb2VyY2UyPWZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89bCh0LGkpLHM9ci5jb2VyY2UodCxlLG4saSxhKSxjPW8uZ2V0KCk7cmV0dXJuIG51bGwhPWMmJnN9LHIuY29lcmNlRm9udD1mdW5jdGlvbih0LGUscil7dmFyIG49e307cmV0dXJuIHI9cnx8e30sbi5mYW1pbHk9dChlKyIuZmFtaWx5IixyLmZhbWlseSksbi5zaXplPXQoZSsiLnNpemUiLHIuc2l6ZSksbi5jb2xvcj10KGUrIi5jb2xvciIsci5jb2xvciksbn0sci5jb2VyY2VIb3ZlcmluZm89ZnVuY3Rpb24odCxlLG4pe3ZhciBpLG89ZS5fbW9kdWxlLmF0dHJpYnV0ZXMscz1vLmhvdmVyaW5mbz9vOmEsbD1zLmhvdmVyaW5mbztpZigxPT09bi5fZGF0YUxlbmd0aCl7dmFyIGM9ImFsbCI9PT1sLmRmbHQ/bC5mbGFncy5zbGljZSgpOmwuZGZsdC5zcGxpdCgiKyIpO2Muc3BsaWNlKGMuaW5kZXhPZigibmFtZSIpLDEpLGk9Yy5qb2luKCIrIil9cmV0dXJuIHIuY29lcmNlKHQsZSxzLCJob3ZlcmluZm8iLGkpfSxyLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHk9ZnVuY3Rpb24odCxlKXtpZih0Lm1hcmtlcil7dmFyIHIsbixpPXQubWFya2VyLm9wYWNpdHk7aWYodm9pZCAwIT09aSlmKGkpfHx0LnNlbGVjdGVkfHx0LnVuc2VsZWN0ZWR8fChyPWksbj1zKmkpLGUoInNlbGVjdGVkLm1hcmtlci5vcGFjaXR5IixyKSxlKCJ1bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5IixuKX19LHIudmFsaWRhdGU9aH0seyIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzIjo2NTgsIi4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjc1MiwiLi4vcGxvdHMvYXR0cmlidXRlcyI6ODI0LCIuL2FycmF5Ijo3NjAsIi4vbW9kIjo3ODUsIi4vbmVzdGVkX3Byb3BlcnR5Ijo3ODYsIi4vcmVnZXgiOjc5NSwiZmFzdC1pc251bWVyaWMiOjI0MSx0aW55Y29sb3IyOjU3Nn1dLDc2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGE9dCgiZDMtdGltZS1mb3JtYXQiKS50aW1lRm9ybWF0LG89dCgiZmFzdC1pc251bWVyaWMiKSxzPXQoIi4vbG9nZ2VycyIpLGw9dCgiLi9tb2QiKS5tb2QsYz10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIiksdT1jLkJBRE5VTSxmPWMuT05FREFZLGg9Yy5PTkVIT1VSLHA9Yy5PTkVNSU4sZD1jLk9ORVNFQyxnPWMuRVBPQ0hKRCxtPXQoIi4uL3JlZ2lzdHJ5Iiksdj10KCJkMy10aW1lLWZvcm1hdCIpLnV0Y0Zvcm1hdCx5PS9eXHMqKC0/XGRcZFxkXGR8XGRcZCkoLShcZD9cZCkoLShcZD9cZCkoWyBUdF0oWzAxXT9cZHwyWzAtM10pKDooWzAtNV1cZCkoOihbMC01XVxkKFwuXGQrKT8pKT8oWnx6fFsrXC1dXGRcZCg6P1xkXGQpPyk/KT8pPyk/KT9ccyokL20seD0vXlxzKigtP1xkXGRcZFxkfFxkXGQpKC0oXGQ/XGRpPykoLShcZD9cZCkoWyBUdF0oWzAxXT9cZHwyWzAtM10pKDooWzAtNV1cZCkoOihbMC01XVxkKFwuXGQrKT8pKT8oWnx6fFsrXC1dXGRcZCg6P1xkXGQpPyk/KT8pPyk/KT9ccyokL20sYj0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktNzA7ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdCYmbS5jb21wb25lbnRzUmVnaXN0cnkuY2FsZW5kYXJzJiYic3RyaW5nIj09dHlwZW9mIHQmJiJncmVnb3JpYW4iIT09dH1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIFN0cmluZyh0K01hdGgucG93KDEwLGUpKS5zdWJzdHIoMSl9ci5kYXRlVGljazA9ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0LGUpe3JldHVybiBfKHQpP2U/bS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIkNBTk9OSUNBTF9TVU5EQVkiKVt0XTptLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiQ0FOT05JQ0FMX1RJQ0siKVt0XTplPyIyMDAwLTAxLTAyIjoiMjAwMC0wMS0wMSJ9KHQsISFlKTtpZihlPDIpcmV0dXJuIG47dmFyIGk9ci5kYXRlVGltZTJtcyhuLHQpO3JldHVybiBpKz1mKihlLTEpLHIubXMyRGF0ZVRpbWUoaSwwLHQpfSxyLmRmbHRSYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gXyh0KT9tLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiREZMVFJBTkdFIilbdF06WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdfSxyLmlzSlNEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldFRpbWV9LHIuZGF0ZVRpbWUybXM9ZnVuY3Rpb24odCxlKXtpZihyLmlzSlNEYXRlKHQpKXt2YXIgYT10LmdldFRpbWV6b25lT2Zmc2V0KCkqcCxvPSh0LmdldFVUQ01pbnV0ZXMoKS10LmdldE1pbnV0ZXMoKSkqcCsodC5nZXRVVENTZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkpKmQrKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCktdC5nZXRNaWxsaXNlY29uZHMoKSk7aWYobyl7dmFyIHM9MypwO2E9YS1zLzIrbChvLWErcy8yLHMpfXJldHVybih0PU51bWJlcih0KS1hKT49biYmdDw9aT90OnV9aWYoInN0cmluZyIhPXR5cGVvZiB0JiYibnVtYmVyIiE9dHlwZW9mIHQpcmV0dXJuIHU7dD1TdHJpbmcodCk7dmFyIGM9XyhlKSx2PXQuY2hhckF0KDApOyFjfHwiRyIhPT12JiYiZyIhPT12fHwodD10LnN1YnN0cigxKSxlPSIiKTt2YXIgdz1jJiYiY2hpbmVzZSI9PT1lLnN1YnN0cigwLDcpLFQ9dC5tYXRjaCh3P3g6eSk7aWYoIVQpcmV0dXJuIHU7dmFyIGs9VFsxXSxNPVRbM118fCIxIixBPU51bWJlcihUWzVdfHwxKSxTPU51bWJlcihUWzddfHwwKSxFPU51bWJlcihUWzldfHwwKSxDPU51bWJlcihUWzExXXx8MCk7aWYoYyl7aWYoMj09PWsubGVuZ3RoKXJldHVybiB1O3ZhciBMO2s9TnVtYmVyKGspO3RyeXt2YXIgST1tLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikoZSk7aWYodyl7dmFyIFA9ImkiPT09TS5jaGFyQXQoTS5sZW5ndGgtMSk7TT1wYXJzZUludChNLDEwKSxMPUkubmV3RGF0ZShrLEkudG9Nb250aEluZGV4KGssTSxQKSxBKX1lbHNlIEw9SS5uZXdEYXRlKGssTnVtYmVyKE0pLEEpfWNhdGNoKHQpe3JldHVybiB1fXJldHVybiBMPyhMLnRvSkQoKS1nKSpmK1MqaCtFKnArQypkOnV9az0yPT09ay5sZW5ndGg/KE51bWJlcihrKSsyZTMtYiklMTAwK2I6TnVtYmVyKGspLE0tPTE7dmFyIHo9bmV3IERhdGUoRGF0ZS5VVEMoMmUzLE0sQSxTLEUpKTtyZXR1cm4gei5zZXRVVENGdWxsWWVhcihrKSx6LmdldFVUQ01vbnRoKCkhPT1NfHx6LmdldFVUQ0RhdGUoKSE9PUE/dTp6LmdldFRpbWUoKStDKmR9LG49ci5NSU5fTVM9ci5kYXRlVGltZTJtcygiLTk5OTkiKSxpPXIuTUFYX01TPXIuZGF0ZVRpbWUybXMoIjk5OTktMTItMzEgMjM6NTk6NTkuOTk5OSIpLHIuaXNEYXRlVGltZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmRhdGVUaW1lMm1zKHQsZSkhPT11fTt2YXIgVD05MCpmLGs9MypoLE09NSpwO2Z1bmN0aW9uIEEodCxlLHIsbixpKXtpZigoZXx8cnx8bnx8aSkmJih0Kz0iICIrdyhlLDIpKyI6Iit3KHIsMiksKG58fGkpJiYodCs9IjoiK3cobiwyKSxpKSkpe2Zvcih2YXIgYT00O2klMTA9PTA7KWEtPTEsaS89MTA7dCs9Ii4iK3coaSxhKX1yZXR1cm4gdH1yLm1zMkRhdGVUaW1lPWZ1bmN0aW9uKHQsZSxyKXtpZigibnVtYmVyIiE9dHlwZW9mIHR8fCEodD49biYmdDw9aSkpcmV0dXJuIHU7ZXx8KGU9MCk7dmFyIGEsbyxzLGMseSx4LGI9TWF0aC5mbG9vcigxMCpsKHQrLjA1LDEpKSx3PU1hdGgucm91bmQodC1iLzEwKTtpZihfKHIpKXt2YXIgUz1NYXRoLmZsb29yKHcvZikrZyxFPU1hdGguZmxvb3IobCh0LGYpKTt0cnl7YT1tLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikocikuZnJvbUpEKFMpLmZvcm1hdERhdGUoInl5eXktbW0tZGQiKX1jYXRjaCh0KXthPXYoIkclWS0lbS0lZCIpKG5ldyBEYXRlKHcpKX1pZigiLSI9PT1hLmNoYXJBdCgwKSlmb3IoO2EubGVuZ3RoPDExOylhPSItMCIrYS5zdWJzdHIoMSk7ZWxzZSBmb3IoO2EubGVuZ3RoPDEwOylhPSIwIithO289ZTxUP01hdGguZmxvb3IoRS9oKTowLHM9ZTxUP01hdGguZmxvb3IoRSVoL3ApOjAsYz1lPGs/TWF0aC5mbG9vcihFJXAvZCk6MCx5PWU8TT9FJWQqMTArYjowfWVsc2UgeD1uZXcgRGF0ZSh3KSxhPXYoIiVZLSVtLSVkIikoeCksbz1lPFQ/eC5nZXRVVENIb3VycygpOjAscz1lPFQ/eC5nZXRVVENNaW51dGVzKCk6MCxjPWU8az94LmdldFVUQ1NlY29uZHMoKTowLHk9ZTxNPzEwKnguZ2V0VVRDTWlsbGlzZWNvbmRzKCkrYjowO3JldHVybiBBKGEsbyxzLGMseSl9LHIubXMyRGF0ZVRpbWVMb2NhbD1mdW5jdGlvbih0KXtpZighKHQ+PW4rZiYmdDw9aS1mKSlyZXR1cm4gdTt2YXIgZT1NYXRoLmZsb29yKDEwKmwodCsuMDUsMSkpLHI9bmV3IERhdGUoTWF0aC5yb3VuZCh0LWUvMTApKTtyZXR1cm4gQShhKCIlWS0lbS0lZCIpKHIpLHIuZ2V0SG91cnMoKSxyLmdldE1pbnV0ZXMoKSxyLmdldFNlY29uZHMoKSwxMCpyLmdldFVUQ01pbGxpc2Vjb25kcygpK2UpfSxyLmNsZWFuRGF0ZT1mdW5jdGlvbih0LGUsbil7aWYodD09PXUpcmV0dXJuIGU7aWYoci5pc0pTRGF0ZSh0KXx8Im51bWJlciI9PXR5cGVvZiB0JiZpc0Zpbml0ZSh0KSl7aWYoXyhuKSlyZXR1cm4gcy5lcnJvcigiSlMgRGF0ZXMgYW5kIG1pbGxpc2Vjb25kcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggd29ybGQgY2FsZW5kYXJzIix0KSxlO2lmKCEodD1yLm1zMkRhdGVUaW1lTG9jYWwoK3QpKSYmdm9pZCAwIT09ZSlyZXR1cm4gZX1lbHNlIGlmKCFyLmlzRGF0ZVRpbWUodCxuKSlyZXR1cm4gcy5lcnJvcigidW5yZWNvZ25pemVkIGRhdGUiLHQpLGU7cmV0dXJuIHR9O3ZhciBTPS8lXGQ/Zi9nO2Z1bmN0aW9uIEUodCxlLHIsbil7dD10LnJlcGxhY2UoUywoZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5taW4oK3QuY2hhckF0KDEpfHw2LDYpO3JldHVybihlLzFlMyUxKzIpLnRvRml4ZWQocikuc3Vic3RyKDIpLnJlcGxhY2UoLzArJC8sIiIpfHwiMCJ9KSk7dmFyIGk9bmV3IERhdGUoTWF0aC5mbG9vcihlKy4wNSkpO2lmKF8obikpdHJ5e3Q9bS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIndvcmxkQ2FsRm10IikodCxlLG4pfWNhdGNoKHQpe3JldHVybiJJbnZhbGlkIn1yZXR1cm4gcih0KShpKX12YXIgQz1bNTksNTkuOSw1OS45OSw1OS45OTksNTkuOTk5OV07ci5mb3JtYXREYXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZihpPV8oaSkmJmksIWUpaWYoInkiPT09cillPWEueWVhcjtlbHNlIGlmKCJtIj09PXIpZT1hLm1vbnRoO2Vsc2V7aWYoImQiIT09cilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1sKHQrLjA1LGYpLG49dyhNYXRoLmZsb29yKHIvaCksMikrIjoiK3cobChNYXRoLmZsb29yKHIvcCksNjApLDIpO2lmKCJNIiE9PWUpe28oZSl8fChlPTApO3ZhciBpPSgxMDArTWF0aC5taW4obCh0L2QsNjApLENbZV0pKS50b0ZpeGVkKGUpLnN1YnN0cigxKTtlPjAmJihpPWkucmVwbGFjZSgvMCskLywiIikucmVwbGFjZSgvW1wuXSQvLCIiKSksbis9IjoiK2l9cmV0dXJuIG59KHQscikrIlxuIitFKGEuZGF5TW9udGhZZWFyLHQsbixpKTtlPWEuZGF5TW9udGgrIlxuIithLnllYXJ9cmV0dXJuIEUoZSx0LG4saSl9O3ZhciBMPTMqZjtyLmluY3JlbWVudE1vbnRoPWZ1bmN0aW9uKHQsZSxyKXtyPV8ocikmJnI7dmFyIG49bCh0LGYpO2lmKHQ9TWF0aC5yb3VuZCh0LW4pLHIpdHJ5e3ZhciBpPU1hdGgucm91bmQodC9mKStnLGE9bS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKHIpLG89YS5mcm9tSkQoaSk7cmV0dXJuIGUlMTI/YS5hZGQobyxlLCJtIik6YS5hZGQobyxlLzEyLCJ5IiksKG8udG9KRCgpLWcpKmYrbn1jYXRjaChlKXtzLmVycm9yKCJpbnZhbGlkIG1zICIrdCsiIGluIGNhbGVuZGFyICIrcil9dmFyIGM9bmV3IERhdGUodCtMKTtyZXR1cm4gYy5zZXRVVENNb250aChjLmdldFVUQ01vbnRoKCkrZSkrbi1MfSxyLmZpbmRFeGFjdERhdGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saT0wLGE9MCxzPTAsbD0wLGM9XyhlKSYmbS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKGUpLHU9MDt1PHQubGVuZ3RoO3UrKylpZihuPXRbdV0sbyhuKSl7aWYoIShuJWYpKWlmKGMpdHJ5ezE9PT0ocj1jLmZyb21KRChuL2YrZykpLmRheSgpPzE9PT1yLm1vbnRoKCk/aSsrOmErKzpzKyt9Y2F0Y2godCl7fWVsc2UgMT09PShyPW5ldyBEYXRlKG4pKS5nZXRVVENEYXRlKCk/MD09PXIuZ2V0VVRDTW9udGgoKT9pKys6YSsrOnMrK31lbHNlIGwrKztzKz1hKz1pO3ZhciBoPXQubGVuZ3RoLWw7cmV0dXJue2V4YWN0WWVhcnM6aS9oLGV4YWN0TW9udGhzOmEvaCxleGFjdERheXM6cy9ofX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi9yZWdpc3RyeSI6OTExLCIuL2xvZ2dlcnMiOjc4MiwiLi9tb2QiOjc4NSwiZDMtdGltZS1mb3JtYXQiOjE2NiwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDc2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi9sb2dnZXJzIiksYT10KCIuL21hdHJpeCIpLG89dCgiZ2wtbWF0NCIpO2Z1bmN0aW9uIHModCl7dmFyIGU9dCYmdC5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49InBsb3RseS5qcy1zdHlsZS0iK3QsYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuKTthfHwoKGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSkuc2V0QXR0cmlidXRlKCJpZCIsbiksYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYSkpO3ZhciBvPWEuc2hlZXQ7by5pbnNlcnRSdWxlP28uaW5zZXJ0UnVsZShlKyJ7IityKyJ9IiwwKTpvLmFkZFJ1bGU/by5hZGRSdWxlKGUsciwwKTppLndhcm4oImFkZFN0eWxlUnVsZSBmYWlsZWQiKX1mdW5jdGlvbiBjKHQpe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkscj1lLmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgiLW1vei10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCItbXMtdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgiLW8tdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIik7cmV0dXJuIm5vbmUiPT09cj9udWxsOnIucmVwbGFjZSgibWF0cml4IiwiIikucmVwbGFjZSgiM2QiLCIiKS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuK3R9KSl9ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9W107Zih0KTspZS5wdXNoKHQpLHQ9dC5wYXJlbnROb2RlO3JldHVybiBlfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQmJih0IGluc3RhbmNlb2YgRWxlbWVudHx8dCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KX1lLmV4cG9ydHM9e2dldEdyYXBoRGl2OmZ1bmN0aW9uKHQpe3ZhciBlO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYobnVsbD09PShlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKSl0aHJvdyBuZXcgRXJyb3IoIk5vIERPTSBlbGVtZW50IHdpdGggaWQgJyIrdCsiJyBleGlzdHMgb24gdGhlIHBhZ2UuIik7cmV0dXJuIGV9aWYobnVsbD09dCl0aHJvdyBuZXcgRXJyb3IoIkRPTSBlbGVtZW50IHByb3ZpZGVkIGlzIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIHR9LGlzUGxvdERpdjpmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KTtyZXR1cm4gZS5ub2RlKClpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZlLnNpemUoKSYmZS5jbGFzc2VkKCJqcy1wbG90bHktcGxvdCIpfSxyZW1vdmVFbGVtZW50OnMsYWRkU3R5bGVSdWxlOmZ1bmN0aW9uKHQsZSl7bCgiZ2xvYmFsIix0LGUpfSxhZGRSZWxhdGVkU3R5bGVSdWxlOmwsZGVsZXRlUmVsYXRlZFN0eWxlUnVsZTpmdW5jdGlvbih0KXt2YXIgZT0icGxvdGx5LmpzLXN0eWxlLSIrdCxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ImJnMocil9LGdldEZ1bGxUcmFuc2Zvcm1NYXRyaXg6ZnVuY3Rpb24odCl7dmFyIGU9dSh0KSxyPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1jKHQpO2lmKGUpe3ZhciBuPWEuY29udmVydENzc01hdHJpeChlKTtyPW8ubXVsdGlwbHkocixyLG4pfX0pKSxyfSxnZXRFbGVtZW50VHJhbnNmb3JtTWF0cml4OmMsZ2V0RWxlbWVudEFuZEFuY2VzdG9yczp1LGVxdWFsRG9tUmVjdHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZSYmdC54PT09ZS54JiZ0Lnk9PT1lLnkmJnQudG9wPT09ZS50b3AmJnQubGVmdD09PWUubGVmdCYmdC5yaWdodD09PWUucmlnaHQmJnQuYm90dG9tPT09ZS5ib3R0b219fX0seyIuL2xvZ2dlcnMiOjc4MiwiLi9tYXRyaXgiOjc4NCxkMzoxNjksImdsLW1hdDQiOjI5Mn1dLDc2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXIsaT17aW5pdDpmdW5jdGlvbih0KXtpZih0Ll9ldiBpbnN0YW5jZW9mIG4pcmV0dXJuIHQ7dmFyIGU9bmV3IG4scj1uZXcgbjtyZXR1cm4gdC5fZXY9ZSx0Ll9pbnRlcm5hbEV2PXIsdC5vbj1lLm9uLmJpbmQoZSksdC5vbmNlPWUub25jZS5iaW5kKGUpLHQucmVtb3ZlTGlzdGVuZXI9ZS5yZW1vdmVMaXN0ZW5lci5iaW5kKGUpLHQucmVtb3ZlQWxsTGlzdGVuZXJzPWUucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoZSksdC5faW50ZXJuYWxPbj1yLm9uLmJpbmQociksdC5faW50ZXJuYWxPbmNlPXIub25jZS5iaW5kKHIpLHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXI9ci5yZW1vdmVMaXN0ZW5lci5iaW5kKHIpLHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzPXIucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQociksdC5lbWl0PWZ1bmN0aW9uKG4saSl7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJmpRdWVyeSh0KS50cmlnZ2VyKG4saSksZS5lbWl0KG4saSksci5lbWl0KG4saSl9LHR9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpOyJ1bmRlZmluZWQiIT10eXBlb2YgalF1ZXJ5JiYobj1qUXVlcnkodCkudHJpZ2dlckhhbmRsZXIoZSxyKSk7dmFyIGE9dC5fZXY7aWYoIWEpcmV0dXJuIG47dmFyIG8scz1hLl9ldmVudHNbZV07aWYoIXMpcmV0dXJuIG47ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC5saXN0ZW5lcj8oYS5yZW1vdmVMaXN0ZW5lcihlLHQubGlzdGVuZXIpLHQuZmlyZWQ/dm9pZCAwOih0LmZpcmVkPSEwLHQubGlzdGVuZXIuYXBwbHkoYSxbcl0pKSk6dC5hcHBseShhLFtyXSl9Zm9yKHM9QXJyYXkuaXNBcnJheShzKT9zOltzXSxvPTA7bzxzLmxlbmd0aC0xO28rKylsKHNbb10pO3JldHVybiBpPWwoc1tvXSksdm9pZCAwIT09bj9uOml9LHB1cmdlOmZ1bmN0aW9uKHQpe3JldHVybiBkZWxldGUgdC5fZXYsZGVsZXRlIHQub24sZGVsZXRlIHQub25jZSxkZWxldGUgdC5yZW1vdmVMaXN0ZW5lcixkZWxldGUgdC5yZW1vdmVBbGxMaXN0ZW5lcnMsZGVsZXRlIHQuZW1pdCxkZWxldGUgdC5fZXYsZGVsZXRlIHQuX2ludGVybmFsRXYsZGVsZXRlIHQuX2ludGVybmFsT24sZGVsZXRlIHQuX2ludGVybmFsT25jZSxkZWxldGUgdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcixkZWxldGUgdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnMsdH19O2UuZXhwb3J0cz1pfSx7ZXZlbnRzOjExMH1dLDc2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzX3BsYWluX29iamVjdC5qcyIpLGk9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBhKHQsZSxyLG8pe3ZhciBzLGwsYyx1LGYsaCxwPXRbMF0sZD10Lmxlbmd0aDtpZigyPT09ZCYmaShwKSYmaSh0WzFdKSYmMD09PXAubGVuZ3RoKXtpZihmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYobnVsbCE9PShuPXRbcl0pJiYib2JqZWN0Ij09dHlwZW9mIG4pcmV0dXJuITE7dm9pZCAwIT09biYmKGVbcl09bil9cmV0dXJuITB9KHRbMV0scCkpcmV0dXJuIHA7cC5zcGxpY2UoMCxwLmxlbmd0aCl9Zm9yKHZhciBnPTE7ZzxkO2crKylmb3IobCBpbiBzPXRbZ10pYz1wW2xdLHU9c1tsXSxvJiZpKHUpP3BbbF09dTplJiZ1JiYobih1KXx8KGY9aSh1KSkpPyhmPyhmPSExLGg9YyYmaShjKT9jOltdKTpoPWMmJm4oYyk/Yzp7fSxwW2xdPWEoW2gsdV0sZSxyLG8pKTooInVuZGVmaW5lZCIhPXR5cGVvZiB1fHxyKSYmKHBbbF09dSk7cmV0dXJuIHB9ci5leHRlbmRGbGF0PWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCExLCExLCExKX0sci5leHRlbmREZWVwPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCExLCExKX0sci5leHRlbmREZWVwQWxsPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCEwLCExKX0sci5leHRlbmREZWVwTm9BcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITAsITEsITApfX0seyIuL2lzX3BsYWluX29iamVjdC5qcyI6Nzc5fV0sNzY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj1bXSxuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldOzEhPT1lW2FdJiYoZVthXT0xLHJbbisrXT1hKX1yZXR1cm4gcn19LHt9XSw3NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4hMD09PXQudmlzaWJsZX1mdW5jdGlvbiBpKHQpe3ZhciBlPXRbMF0udHJhY2U7cmV0dXJuITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGh9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPShlPXQsQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheShlWzBdKSYmZVswXVswXSYmZVswXVswXS50cmFjZT9pOm4pLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO3IocykmJmEucHVzaChzKX1yZXR1cm4gYX19LHt9XSw3NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImNvdW50cnktcmVnZXgiKSxhPXQoIkB0dXJmL2FyZWEiKSxvPXQoIkB0dXJmL2NlbnRyb2lkIikscz10KCJAdHVyZi9iYm94IiksbD10KCIuL2lkZW50aXR5IiksYz10KCIuL2xvZ2dlcnMiKSx1PXQoIi4vaXNfcGxhaW5fb2JqZWN0IiksZj10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGg9dCgiLi9wb2x5Z29uIikscD1PYmplY3Qua2V5cyhpKSxkPXsiSVNPLTMiOmwsIlVTQS1zdGF0ZXMiOmwsImNvdW50cnkgbmFtZXMiOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8cC5sZW5ndGg7ZSsrKXt2YXIgcj1wW2VdO2lmKG5ldyBSZWdFeHAoaVtyXSkudGVzdCh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcn1yZXR1cm4gYy5sb2coIlVucmVjb2duaXplZCBjb3VudHJ5IG5hbWU6ICIrdCsiLiIpLCExfX07ZnVuY3Rpb24gZyh0KXt2YXIgZT10Lmdlb2pzb24scj13aW5kb3cuUGxvdGx5R2VvQXNzZXRzfHx7fSxuPSJzdHJpbmciPT10eXBlb2YgZT9yW2VdOmU7cmV0dXJuIHUobik/bjooYy5lcnJvcigiT29wcyAuLi4gc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hlbiBmZXRjaGluZyAiK2UpLCExKX1lLmV4cG9ydHM9e2xvY2F0aW9uVG9GZWF0dXJlOmZ1bmN0aW9uKHQsZSxyKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiExO3ZhciBuLGksYSxvPWRbdF0oZSk7aWYobyl7aWYoIlVTQS1zdGF0ZXMiPT09dClmb3Iobj1bXSxhPTA7YTxyLmxlbmd0aDthKyspKGk9clthXSkucHJvcGVydGllcyYmaS5wcm9wZXJ0aWVzLmd1JiYiVVNBIj09PWkucHJvcGVydGllcy5ndSYmbi5wdXNoKGkpO2Vsc2Ugbj1yO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspaWYoKGk9blthXSkuaWQ9PT1vKXJldHVybiBpO2MubG9nKFsiTG9jYXRpb24gd2l0aCBpZCIsbywiZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIHRvcG9qc29uIGZlYXR1cmUgYXQgdGhpcyByZXNvbHV0aW9uLiJdLmpvaW4oIiAiKSl9cmV0dXJuITF9LGZlYXR1cmUycG9seWdvbnM6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10Lmdlb21ldHJ5LG89YS5jb29yZGluYXRlcyxzPXQuaWQsbD1bXTtmdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgtMTtlKyspaWYodFtlXVswXT4wJiZ0W2UrMV1bMF08MClyZXR1cm4gZTtyZXR1cm4gbnVsbH1zd2l0Y2goZT0iUlVTIj09PXN8fCJGSkkiPT09cz9mdW5jdGlvbih0KXt2YXIgZTtpZihudWxsPT09Yyh0KSllPXQ7ZWxzZSBmb3IoZT1uZXcgQXJyYXkodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoO2krKyllW2ldPVt0W2ldWzBdPDA/dFtpXVswXSszNjA6dFtpXVswXSx0W2ldWzFdXTtsLnB1c2goaC50ZXN0ZXIoZSkpfToiQVRBIj09PXM/ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KTtpZihudWxsPT09ZSlyZXR1cm4gbC5wdXNoKGgudGVzdGVyKHQpKTt2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgrMSksbj0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaT5lP3JbbisrXT1bdFtpXVswXSszNjAsdFtpXVsxXV06aT09PWU/KHJbbisrXT10W2ldLHJbbisrXT1bdFtpXVswXSwtOTBdKTpyW24rK109dFtpXTt2YXIgYT1oLnRlc3RlcihyKTthLnB0cy5wb3AoKSxsLnB1c2goYSl9OmZ1bmN0aW9uKHQpe2wucHVzaChoLnRlc3Rlcih0KSl9LGEudHlwZSl7Y2FzZSJNdWx0aVBvbHlnb24iOmZvcihyPTA7cjxvLmxlbmd0aDtyKyspZm9yKG49MDtuPG9bcl0ubGVuZ3RoO24rKyllKG9bcl1bbl0pO2JyZWFrO2Nhc2UiUG9seWdvbiI6Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyllKG9bcl0pfXJldHVybiBsfSxnZXRUcmFjZUdlb2pzb246ZyxleHRyYWN0VHJhY2VGZWF0dXJlOmZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1nKGUpO2lmKCFyKXJldHVybiExO3ZhciBuLGk9e30scz1bXTtmb3Iobj0wO248ZS5fbGVuZ3RoO24rKyl7dmFyIGw9dFtuXTsobC5sb2N8fDA9PT1sLmxvYykmJihpW2wubG9jXT1sKX1mdW5jdGlvbiB1KHQpe3ZhciByPWYodCxlLmZlYXR1cmVpZGtleXx8ImlkIikuZ2V0KCksbj1pW3JdO2lmKG4pe3ZhciBsPXQuZ2VvbWV0cnk7aWYoIlBvbHlnb24iPT09bC50eXBlfHwiTXVsdGlQb2x5Z29uIj09PWwudHlwZSl7dmFyIHU9e3R5cGU6IkZlYXR1cmUiLGlkOnIsZ2VvbWV0cnk6bCxwcm9wZXJ0aWVzOnt9fTt1LnByb3BlcnRpZXMuY3Q9ZnVuY3Rpb24odCl7dmFyIGUscj10Lmdlb21ldHJ5O2lmKCJNdWx0aVBvbHlnb24iPT09ci50eXBlKWZvcih2YXIgbj1yLmNvb3JkaW5hdGVzLGk9MCxzPTA7czxuLmxlbmd0aDtzKyspe3ZhciBsPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpuW3NdfSxjPWEuZGVmYXVsdChsKTtjPmkmJihpPWMsZT1sKX1lbHNlIGU9cjtyZXR1cm4gby5kZWZhdWx0KGUpLmdlb21ldHJ5LmNvb3JkaW5hdGVzfSh1KSxuLmZJbj10LG4uZk91dD11LHMucHVzaCh1KX1lbHNlIGMubG9nKFsiTG9jYXRpb24iLG4ubG9jLCJkb2VzIG5vdCBoYXZlIGEgdmFsaWQgR2VvSlNPTiBnZW9tZXRyeS4iLCJUcmFjZXMgd2l0aCBsb2NhdGlvbm1vZGUgKmdlb2pzb24taWQqIG9ubHkgc3VwcG9ydCIsIipQb2x5Z29uKiBhbmQgKk11bHRpUG9seWdvbiogZ2VvbWV0cmllcy4iXS5qb2luKCIgIikpfWRlbGV0ZSBpW3JdfXN3aXRjaChyLnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOnZhciBoPXIuZmVhdHVyZXM7Zm9yKG49MDtuPGgubGVuZ3RoO24rKyl1KGhbbl0pO2JyZWFrO2Nhc2UiRmVhdHVyZSI6dShyKTticmVhaztkZWZhdWx0OnJldHVybiBjLndhcm4oWyJJbnZhbGlkIEdlb0pTT04gdHlwZSIsKHIudHlwZXx8Im5vbmUiKSsiLiIsIlRyYWNlcyB3aXRoIGxvY2F0aW9ubW9kZSAqZ2VvanNvbi1pZCogb25seSBzdXBwb3J0IiwiKkZlYXR1cmVDb2xsZWN0aW9uKiBhbmQgKkZlYXR1cmUqIHR5cGVzLiJdLmpvaW4oIiAiKSksITF9Zm9yKHZhciBwIGluIGkpYy5sb2coWyJMb2NhdGlvbiAqIitwKyIqIiwiZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIGZlYXR1cmUgd2l0aCBpZC1rZXkiLCIqIitlLmZlYXR1cmVpZGtleSsiKi4iXS5qb2luKCIgIikpO3JldHVybiBzfSxmZXRjaFRyYWNlR2VvRGF0YTpmdW5jdGlvbih0KXt2YXIgZT13aW5kb3cuUGxvdGx5R2VvQXNzZXRzfHx7fSxyPVtdO2Z1bmN0aW9uIGkodCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLGkpe24uanNvbih0LChmdW5jdGlvbihuLGEpe2lmKG4pe2RlbGV0ZSBlW3RdO3ZhciBvPTQwND09PW4uc3RhdHVzPydHZW9KU09OIGF0IFVSTCAiJyt0KyciIGRvZXMgbm90IGV4aXN0Lic6IlVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZmV0Y2hpbmcgZnJvbSAiK3Q7cmV0dXJuIGkobmV3IEVycm9yKG8pKX1yZXR1cm4gZVt0XT1hLHIoYSl9KSl9KSl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dmFyIGk9MCxhPXNldEludGVydmFsKChmdW5jdGlvbigpe3JldHVybiBlW3RdJiYicGVuZGluZyIhPT1lW3RdPyhjbGVhckludGVydmFsKGEpLHIoZVt0XSkpOmk+MTAwPyhjbGVhckludGVydmFsKGEpLG4oIlVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZmV0Y2hpbmcgZnJvbSAiK3QpKTp2b2lkIGkrK30pLDUwKX0pKX1mb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXVswXS50cmFjZS5nZW9qc29uOyJzdHJpbmciPT10eXBlb2YgcyYmKGVbc10/InBlbmRpbmciPT09ZVtzXSYmci5wdXNoKGEocykpOihlW3NdPSJwZW5kaW5nIixyLnB1c2goaShzKSkpKX1yZXR1cm4gcn0sY29tcHV0ZUJib3g6ZnVuY3Rpb24odCl7cmV0dXJuIHMuZGVmYXVsdCh0KX19fSx7Ii4vaWRlbnRpdHkiOjc3NiwiLi9pc19wbGFpbl9vYmplY3QiOjc3OSwiLi9sb2dnZXJzIjo3ODIsIi4vbmVzdGVkX3Byb3BlcnR5Ijo3ODYsIi4vcG9seWdvbiI6NzkwLCJAdHVyZi9hcmVhIjo1OSwiQHR1cmYvYmJveCI6NjAsIkB0dXJmL2NlbnRyb2lkIjo2MSwiY291bnRyeS1yZWdleCI6MTM5LGQzOjE2OX1dLDc3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO3IuY2FsY1RyYWNlVG9MaW5lQ29vcmRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLnRyYWNlLmNvbm5lY3RnYXBzLHI9W10saT1bXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV0ubG9ubGF0O29bMF0hPT1uP2kucHVzaChvKTohZSYmaS5sZW5ndGg+MCYmKHIucHVzaChpKSxpPVtdKX1yZXR1cm4gaS5sZW5ndGg+MCYmci5wdXNoKGkpLHJ9LHIubWFrZUxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aD97dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dFswXX06e3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19LHIubWFrZVBvbHlnb249ZnVuY3Rpb24odCl7aWYoMT09PXQubGVuZ3RoKXJldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0fTtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDtyKyspZVtyXT1bdFtyXV07cmV0dXJue3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6ZX19LHIubWFrZUJsYW5rPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpbXX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1M31dLDc3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbz10KCIuL21vZCIpLm1vZDtmdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9ci10LGM9aS10LHU9by1pLGY9bi1lLGg9YS1lLHA9cy1hLGQ9bCpwLXUqZjtpZigwPT09ZClyZXR1cm4gbnVsbDt2YXIgZz0oYypwLXUqaCkvZCxtPShjKmYtbCpoKS9kO3JldHVybiBtPDB8fG0+MXx8ZzwwfHxnPjE/bnVsbDp7eDp0K2wqZyx5OmUrZipnfX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIGE9bip0K2kqZTtpZihhPDApcmV0dXJuIG4qbitpKmk7aWYoYT5yKXt2YXIgbz1uLXQscz1pLWU7cmV0dXJuIG8qbytzKnN9dmFyIGw9biplLWkqdDtyZXR1cm4gbCpsL3J9ci5zZWdtZW50c0ludGVyc2VjdD1zLHIuc2VnbWVudERpc3RhbmNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8sYyl7aWYocyh0LGUscixuLGksYSxvLGMpKXJldHVybiAwO3ZhciB1PXItdCxmPW4tZSxoPW8taSxwPWMtYSxkPXUqdStmKmYsZz1oKmgrcCpwLG09TWF0aC5taW4obCh1LGYsZCxpLXQsYS1lKSxsKHUsZixkLG8tdCxjLWUpLGwoaCxwLGcsdC1pLGUtYSksbChoLHAsZyxyLWksbi1hKSk7cmV0dXJuIE1hdGguc3FydChtKX0sci5nZXRUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIscyl7aWYodD09PWkmJnM9PT1hfHwobj17fSxpPXQsYT1zKSxuW3JdKXJldHVybiBuW3JdO3ZhciBsPXQuZ2V0UG9pbnRBdExlbmd0aChvKHItcy8yLGUpKSxjPXQuZ2V0UG9pbnRBdExlbmd0aChvKHIrcy8yLGUpKSx1PU1hdGguYXRhbigoYy55LWwueSkvKGMueC1sLngpKSxmPXQuZ2V0UG9pbnRBdExlbmd0aChvKHIsZSkpLGg9e3g6KDQqZi54K2wueCtjLngpLzYseTooNCpmLnkrbC55K2MueSkvNix0aGV0YTp1fTtyZXR1cm4gbltyXT1oLGh9LHIuY2xlYXJMb2NhdGlvbkNhY2hlPWZ1bmN0aW9uKCl7aT1udWxsfSxyLmdldFZpc2libGVTZWdtZW50PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5sZWZ0LG89ZS5yaWdodCxzPWUudG9wLGw9ZS5ib3R0b20sYz0wLHU9dC5nZXRUb3RhbExlbmd0aCgpLGY9dTtmdW5jdGlvbiBoKGUpe3ZhciByPXQuZ2V0UG9pbnRBdExlbmd0aChlKTswPT09ZT9uPXI6ZT09PXUmJihpPXIpO3ZhciBjPXIueDxhP2Etci54OnIueD5vP3IueC1vOjAsZj1yLnk8cz9zLXIueTpyLnk+bD9yLnktbDowO3JldHVybiBNYXRoLnNxcnQoYypjK2YqZil9Zm9yKHZhciBwPWgoYyk7cDspe2lmKChjKz1wK3IpPmYpcmV0dXJuO3A9aChjKX1mb3IocD1oKGYpO3A7KXtpZihjPihmLT1wK3IpKXJldHVybjtwPWgoZil9cmV0dXJue21pbjpjLG1heDpmLGxlbjpmLWMsdG90YWw6dSxpc0Nsb3NlZDowPT09YyYmZj09PXUmJk1hdGguYWJzKG4ueC1pLngpPC4xJiZNYXRoLmFicyhuLnktaS55KTwuMX19LHIuZmluZFBvaW50T25QYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8scz0obj1ufHx7fSkucGF0aExlbmd0aHx8dC5nZXRUb3RhbExlbmd0aCgpLGw9bi50b2xlcmFuY2V8fC4wMDEsYz1uLml0ZXJhdGlvbkxpbWl0fHwzMCx1PXQuZ2V0UG9pbnRBdExlbmd0aCgwKVtyXT50LmdldFBvaW50QXRMZW5ndGgocylbcl0/LTE6MSxmPTAsaD0wLHA9cztmPGM7KXtpZihpPShoK3ApLzIsbz0oYT10LmdldFBvaW50QXRMZW5ndGgoaSkpW3JdLWUsTWF0aC5hYnMobyk8bClyZXR1cm4gYTt1Km8+MD9wPWk6aD1pLGYrK31yZXR1cm4gYX19LHsiLi9tb2QiOjc4NX1dLDc3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiY29sb3Itbm9ybWFsaXplIiksbz10KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxzPXQoIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmRlZmF1bHRMaW5lLGw9dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXksYz1hKHMpO2Z1bmN0aW9uIHUodCxlKXt2YXIgcj10O3JldHVybiByWzNdKj1lLHJ9ZnVuY3Rpb24gZih0KXtpZihuKHQpKXJldHVybiBjO3ZhciBlPWEodCk7cmV0dXJuIGUubGVuZ3RoP2U6Y31mdW5jdGlvbiBoKHQpe3JldHVybiBuKHQpP3Q6MX1lLmV4cG9ydHM9e2Zvcm1hdENvbG9yOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLHMscCxkLGc9dC5jb2xvcixtPWwoZyksdj1sKGUpLHk9by5leHRyYWN0T3B0cyh0KSx4PVtdO2lmKG49dm9pZCAwIT09eS5jb2xvcnNjYWxlP28ubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHQpOmYsaT1tP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/YzphKG4odFtlXSkpfTpmLHM9dj9mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT10W2VdPzE6aCh0W2VdKX06aCxtfHx2KWZvcih2YXIgYj0wO2I8cjtiKyspcD1pKGcsYiksZD1zKGUsYikseFtiXT11KHAsZCk7ZWxzZSB4PXUoYShnKSxlKTtyZXR1cm4geH0scGFyc2VDb2xvclNjYWxlOmZ1bmN0aW9uKHQpe3ZhciBlPW8uZXh0cmFjdE9wdHModCkscj1lLmNvbG9yc2NhbGU7cmV0dXJuIGUucmV2ZXJzZXNjYWxlJiYocj1vLmZsaXBTY2FsZShlLmNvbG9yc2NhbGUpKSxyLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPWkodFsxXSkudG9SZ2IoKTtyZXR1cm57aW5kZXg6ZSxyZ2I6W3IucixyLmcsci5iLHIuYV19fSkpfX19LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2NDIsIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjU1LCIuL2FycmF5Ijo3NjAsImNvbG9yLW5vcm1hbGl6ZSI6MTI1LCJmYXN0LWlzbnVtZXJpYyI6MjQxLHRpbnljb2xvcjI6NTc2fV0sNzc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtmdW5jdGlvbiBpKHQpe3JldHVyblt0XX1lLmV4cG9ydHM9e2tleUZ1bjpmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9LHJlcGVhdDppLGRlc2NlbmQ6bix3cmFwOmksdW53cmFwOmZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfX19LHsiLi9pZGVudGl0eSI6Nzc2fV0sNzc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdH19LHt9XSw3Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHQ7dmFyIHI9MS9NYXRoLmFicyhlKSxuPXI+MT8ocip0K3IqZSkvcjp0K2UsaT1TdHJpbmcobikubGVuZ3RoO2lmKGk+MTYpe3ZhciBhPVN0cmluZyhlKS5sZW5ndGg7aWYoaT49U3RyaW5nKHQpLmxlbmd0aCthKXt2YXIgbz1wYXJzZUZsb2F0KG4pLnRvUHJlY2lzaW9uKDEyKTstMT09PW8uaW5kZXhPZigiZSsiKSYmKG49K28pfX1yZXR1cm4gbn19LHt9XSw3Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImQzLXRpbWUtZm9ybWF0IikudXRjRm9ybWF0LGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxzPW8uRlBfU0FGRSxsPW8uQkFETlVNLGM9ZS5leHBvcnRzPXt9O2MubmVzdGVkUHJvcGVydHk9dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSxjLmtleWVkQ29udGFpbmVyPXQoIi4va2V5ZWRfY29udGFpbmVyIiksYy5yZWxhdGl2ZUF0dHI9dCgiLi9yZWxhdGl2ZV9hdHRyIiksYy5pc1BsYWluT2JqZWN0PXQoIi4vaXNfcGxhaW5fb2JqZWN0IiksYy50b0xvZ1JhbmdlPXQoIi4vdG9fbG9nX3JhbmdlIiksYy5yZWxpbmtQcml2YXRlS2V5cz10KCIuL3JlbGlua19wcml2YXRlIik7dmFyIHU9dCgiLi9hcnJheSIpO2MuaXNUeXBlZEFycmF5PXUuaXNUeXBlZEFycmF5LGMuaXNBcnJheU9yVHlwZWRBcnJheT11LmlzQXJyYXlPclR5cGVkQXJyYXksYy5pc0FycmF5MUQ9dS5pc0FycmF5MUQsYy5lbnN1cmVBcnJheT11LmVuc3VyZUFycmF5LGMuY29uY2F0PXUuY29uY2F0LGMubWF4Um93TGVuZ3RoPXUubWF4Um93TGVuZ3RoLGMubWluUm93TGVuZ3RoPXUubWluUm93TGVuZ3RoO3ZhciBmPXQoIi4vbW9kIik7Yy5tb2Q9Zi5tb2QsYy5tb2RIYWxmPWYubW9kSGFsZjt2YXIgaD10KCIuL2NvZXJjZSIpO2MudmFsT2JqZWN0TWV0YT1oLnZhbE9iamVjdE1ldGEsYy5jb2VyY2U9aC5jb2VyY2UsYy5jb2VyY2UyPWguY29lcmNlMixjLmNvZXJjZUZvbnQ9aC5jb2VyY2VGb250LGMuY29lcmNlSG92ZXJpbmZvPWguY29lcmNlSG92ZXJpbmZvLGMuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1oLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHksYy52YWxpZGF0ZT1oLnZhbGlkYXRlO3ZhciBwPXQoIi4vZGF0ZXMiKTtjLmRhdGVUaW1lMm1zPXAuZGF0ZVRpbWUybXMsYy5pc0RhdGVUaW1lPXAuaXNEYXRlVGltZSxjLm1zMkRhdGVUaW1lPXAubXMyRGF0ZVRpbWUsYy5tczJEYXRlVGltZUxvY2FsPXAubXMyRGF0ZVRpbWVMb2NhbCxjLmNsZWFuRGF0ZT1wLmNsZWFuRGF0ZSxjLmlzSlNEYXRlPXAuaXNKU0RhdGUsYy5mb3JtYXREYXRlPXAuZm9ybWF0RGF0ZSxjLmluY3JlbWVudE1vbnRoPXAuaW5jcmVtZW50TW9udGgsYy5kYXRlVGljazA9cC5kYXRlVGljazAsYy5kZmx0UmFuZ2U9cC5kZmx0UmFuZ2UsYy5maW5kRXhhY3REYXRlcz1wLmZpbmRFeGFjdERhdGVzLGMuTUlOX01TPXAuTUlOX01TLGMuTUFYX01TPXAuTUFYX01TO3ZhciBkPXQoIi4vc2VhcmNoIik7Yy5maW5kQmluPWQuZmluZEJpbixjLnNvcnRlckFzYz1kLnNvcnRlckFzYyxjLnNvcnRlckRlcz1kLnNvcnRlckRlcyxjLmRpc3RpbmN0VmFscz1kLmRpc3RpbmN0VmFscyxjLnJvdW5kVXA9ZC5yb3VuZFVwLGMuc29ydD1kLnNvcnQsYy5maW5kSW5kZXhPZk1pbj1kLmZpbmRJbmRleE9mTWluO3ZhciBnPXQoIi4vc3RhdHMiKTtjLmFnZ051bXM9Zy5hZ2dOdW1zLGMubGVuPWcubGVuLGMubWVhbj1nLm1lYW4sYy5tZWRpYW49Zy5tZWRpYW4sYy5taWRSYW5nZT1nLm1pZFJhbmdlLGMudmFyaWFuY2U9Zy52YXJpYW5jZSxjLnN0ZGV2PWcuc3RkZXYsYy5pbnRlcnA9Zy5pbnRlcnA7dmFyIG09dCgiLi9tYXRyaXgiKTtjLmluaXQyZEFycmF5PW0uaW5pdDJkQXJyYXksYy50cmFuc3Bvc2VSYWdnZWQ9bS50cmFuc3Bvc2VSYWdnZWQsYy5kb3Q9bS5kb3QsYy50cmFuc2xhdGlvbk1hdHJpeD1tLnRyYW5zbGF0aW9uTWF0cml4LGMucm90YXRpb25NYXRyaXg9bS5yb3RhdGlvbk1hdHJpeCxjLnJvdGF0aW9uWFlNYXRyaXg9bS5yb3RhdGlvblhZTWF0cml4LGMuYXBwbHkzRFRyYW5zZm9ybT1tLmFwcGx5M0RUcmFuc2Zvcm0sYy5hcHBseTJEVHJhbnNmb3JtPW0uYXBwbHkyRFRyYW5zZm9ybSxjLmFwcGx5MkRUcmFuc2Zvcm0yPW0uYXBwbHkyRFRyYW5zZm9ybTIsYy5jb252ZXJ0Q3NzTWF0cml4PW0uY29udmVydENzc01hdHJpeCxjLmludmVyc2VUcmFuc2Zvcm1NYXRyaXg9bS5pbnZlcnNlVHJhbnNmb3JtTWF0cml4O3ZhciB2PXQoIi4vYW5nbGVzIik7Yy5kZWcycmFkPXYuZGVnMnJhZCxjLnJhZDJkZWc9di5yYWQyZGVnLGMuYW5nbGVEZWx0YT12LmFuZ2xlRGVsdGEsYy5hbmdsZURpc3Q9di5hbmdsZURpc3QsYy5pc0Z1bGxDaXJjbGU9di5pc0Z1bGxDaXJjbGUsYy5pc0FuZ2xlSW5zaWRlU2VjdG9yPXYuaXNBbmdsZUluc2lkZVNlY3RvcixjLmlzUHRJbnNpZGVTZWN0b3I9di5pc1B0SW5zaWRlU2VjdG9yLGMucGF0aEFyYz12LnBhdGhBcmMsYy5wYXRoU2VjdG9yPXYucGF0aFNlY3RvcixjLnBhdGhBbm51bHVzPXYucGF0aEFubnVsdXM7dmFyIHk9dCgiLi9hbmNob3JfdXRpbHMiKTtjLmlzTGVmdEFuY2hvcj15LmlzTGVmdEFuY2hvcixjLmlzQ2VudGVyQW5jaG9yPXkuaXNDZW50ZXJBbmNob3IsYy5pc1JpZ2h0QW5jaG9yPXkuaXNSaWdodEFuY2hvcixjLmlzVG9wQW5jaG9yPXkuaXNUb3BBbmNob3IsYy5pc01pZGRsZUFuY2hvcj15LmlzTWlkZGxlQW5jaG9yLGMuaXNCb3R0b21BbmNob3I9eS5pc0JvdHRvbUFuY2hvcjt2YXIgeD10KCIuL2dlb21ldHJ5MmQiKTtjLnNlZ21lbnRzSW50ZXJzZWN0PXguc2VnbWVudHNJbnRlcnNlY3QsYy5zZWdtZW50RGlzdGFuY2U9eC5zZWdtZW50RGlzdGFuY2UsYy5nZXRUZXh0TG9jYXRpb249eC5nZXRUZXh0TG9jYXRpb24sYy5jbGVhckxvY2F0aW9uQ2FjaGU9eC5jbGVhckxvY2F0aW9uQ2FjaGUsYy5nZXRWaXNpYmxlU2VnbWVudD14LmdldFZpc2libGVTZWdtZW50LGMuZmluZFBvaW50T25QYXRoPXguZmluZFBvaW50T25QYXRoO3ZhciBiPXQoIi4vZXh0ZW5kIik7Yy5leHRlbmRGbGF0PWIuZXh0ZW5kRmxhdCxjLmV4dGVuZERlZXA9Yi5leHRlbmREZWVwLGMuZXh0ZW5kRGVlcEFsbD1iLmV4dGVuZERlZXBBbGwsYy5leHRlbmREZWVwTm9BcnJheXM9Yi5leHRlbmREZWVwTm9BcnJheXM7dmFyIF89dCgiLi9sb2dnZXJzIik7Yy5sb2c9Xy5sb2csYy53YXJuPV8ud2FybixjLmVycm9yPV8uZXJyb3I7dmFyIHc9dCgiLi9yZWdleCIpO2MuY291bnRlclJlZ2V4PXcuY291bnRlcjt2YXIgVD10KCIuL3Rocm90dGxlIik7Yy50aHJvdHRsZT1ULnRocm90dGxlLGMudGhyb3R0bGVEb25lPVQuZG9uZSxjLmNsZWFyVGhyb3R0bGU9VC5jbGVhcjt2YXIgaz10KCIuL2RvbSIpO2Z1bmN0aW9uIE0odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpZm9yKHZhciBuPXRbcl0saT0wO2k8bi5sZW5ndGg7aSsrKWVbbltpXV09K3I7cmV0dXJuIGV9Yy5nZXRHcmFwaERpdj1rLmdldEdyYXBoRGl2LGMuaXNQbG90RGl2PWsuaXNQbG90RGl2LGMucmVtb3ZlRWxlbWVudD1rLnJlbW92ZUVsZW1lbnQsYy5hZGRTdHlsZVJ1bGU9ay5hZGRTdHlsZVJ1bGUsYy5hZGRSZWxhdGVkU3R5bGVSdWxlPWsuYWRkUmVsYXRlZFN0eWxlUnVsZSxjLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGU9ay5kZWxldGVSZWxhdGVkU3R5bGVSdWxlLGMuZ2V0RnVsbFRyYW5zZm9ybU1hdHJpeD1rLmdldEZ1bGxUcmFuc2Zvcm1NYXRyaXgsYy5nZXRFbGVtZW50VHJhbnNmb3JtTWF0cml4PWsuZ2V0RWxlbWVudFRyYW5zZm9ybU1hdHJpeCxjLmdldEVsZW1lbnRBbmRBbmNlc3RvcnM9ay5nZXRFbGVtZW50QW5kQW5jZXN0b3JzLGMuZXF1YWxEb21SZWN0cz1rLmVxdWFsRG9tUmVjdHMsYy5jbGVhclJlc3BvbnNpdmU9dCgiLi9jbGVhcl9yZXNwb25zaXZlIiksYy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9dCgiLi9wcmVzZXJ2ZV9kcmF3aW5nX2J1ZmZlciIpLGMubWFrZVRyYWNlR3JvdXBzPXQoIi4vbWFrZV90cmFjZV9ncm91cHMiKSxjLl89dCgiLi9sb2NhbGl6ZSIpLGMubm90aWZpZXI9dCgiLi9ub3RpZmllciIpLGMuZmlsdGVyVW5pcXVlPXQoIi4vZmlsdGVyX3VuaXF1ZSIpLGMuZmlsdGVyVmlzaWJsZT10KCIuL2ZpbHRlcl92aXNpYmxlIiksYy5wdXNoVW5pcXVlPXQoIi4vcHVzaF91bmlxdWUiKSxjLmluY3JlbWVudD10KCIuL2luY3JlbWVudCIpLGMuY2xlYW5OdW1iZXI9dCgiLi9jbGVhbl9udW1iZXIiKSxjLmVuc3VyZU51bWJlcj1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT8odD1OdW1iZXIodCkpPC1zfHx0PnM/bDphKHQpP051bWJlcih0KTpsOmx9LGMuaXNJbmRleD1mdW5jdGlvbih0LGUpe3JldHVybiEodm9pZCAwIT09ZSYmdD49ZSkmJihhKHQpJiZ0Pj0wJiZ0JTE9PTApfSxjLm5vb3A9dCgiLi9ub29wIiksYy5pZGVudGl0eT10KCIuL2lkZW50aXR5IiksYy5yZXBlYXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09dDtyZXR1cm4gcn0sYy5zd2FwQXR0cnM9ZnVuY3Rpb24odCxlLHIsbil7cnx8KHI9IngiKSxufHwobj0ieSIpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldLG89Yy5uZXN0ZWRQcm9wZXJ0eSh0LGEucmVwbGFjZSgiPyIscikpLHM9Yy5uZXN0ZWRQcm9wZXJ0eSh0LGEucmVwbGFjZSgiPyIsbikpLGw9by5nZXQoKTtvLnNldChzLmdldCgpKSxzLnNldChsKX19LGMucmFpc2VUb1RvcD1mdW5jdGlvbih0KXt0LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodCl9LGMuY2FuY2VsVHJhbnNpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCl9LGMuY29uc3RyYWluPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT5yP01hdGgubWF4KHIsTWF0aC5taW4oZSx0KSk6TWF0aC5tYXgoZSxNYXRoLm1pbihyLHQpKX0sYy5iQm94SW50ZXJzZWN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcj1yfHwwLHQubGVmdDw9ZS5yaWdodCtyJiZlLmxlZnQ8PXQucmlnaHQrciYmdC50b3A8PWUuYm90dG9tK3ImJmUudG9wPD10LmJvdHRvbStyfSxjLnNpbXBsZU1hcD1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT10Lmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPTA7czxhO3MrKylvW3NdPWUodFtzXSxyLG4saSk7cmV0dXJuIG99LGMucmFuZHN0cj1mdW5jdGlvbiB0KGUscixuLGkpe2lmKG58fChuPTE2KSx2b2lkIDA9PT1yJiYocj0yNCkscjw9MClyZXR1cm4iMCI7dmFyIGEsbyxzPU1hdGgubG9nKE1hdGgucG93KDIscikpL01hdGgubG9nKG4pLGw9IiI7Zm9yKGE9MjtzPT09MS8wO2EqPTIpcz1NYXRoLmxvZyhNYXRoLnBvdygyLHIvYSkpL01hdGgubG9nKG4pKmE7dmFyIHU9cy1NYXRoLmZsb29yKHMpO2ZvcihhPTA7YTxNYXRoLmZsb29yKHMpO2ErKylsPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpuKS50b1N0cmluZyhuKStsO3UmJihvPU1hdGgucG93KG4sdSksbD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbykudG9TdHJpbmcobikrbCk7dmFyIGY9cGFyc2VJbnQobCxuKTtyZXR1cm4gZSYmZVtsXXx8ZiE9PTEvMCYmZj49TWF0aC5wb3coMixyKT9pPjEwPyhjLndhcm4oInJhbmRzdHIgZmFpbGVkIHVuaXF1ZW5lc3MiKSxsKTp0KGUscixuLChpfHwwKSsxKTpsfSxjLk9wdGlvbkNvbnRyb2w9ZnVuY3Rpb24odCxlKXt0fHwodD17fSksZXx8KGU9Im9wdCIpO3ZhciByPXtvcHRpb25MaXN0OltdLF9uZXdvcHRpb246ZnVuY3Rpb24obil7bltlXT10LHJbbi5uYW1lXT1uLHIub3B0aW9uTGlzdC5wdXNoKG4pfX07cmV0dXJuIHJbIl8iK2VdPXQscn0sYy5zbW9vdGg9ZnVuY3Rpb24odCxlKXtpZigoZT1NYXRoLnJvdW5kKGUpfHwwKTwyKXJldHVybiB0O3ZhciByLG4saSxhLG89dC5sZW5ndGgscz0yKm8sbD0yKmUtMSxjPW5ldyBBcnJheShsKSx1PW5ldyBBcnJheShvKTtmb3Iocj0wO3I8bDtyKyspY1tyXT0oMS1NYXRoLmNvcyhNYXRoLlBJKihyKzEpL2UpKS8oMiplKTtmb3Iocj0wO3I8bztyKyspe2ZvcihhPTAsbj0wO248bDtuKyspKGk9cituKzEtZSk8LW8/aS09cypNYXRoLnJvdW5kKGkvcyk6aT49cyYmKGktPXMqTWF0aC5mbG9vcihpL3MpKSxpPDA/aT0tMS1pOmk+PW8mJihpPXMtMS1pKSxhKz10W2ldKmNbbl07dVtyXT1hfXJldHVybiB1fSxjLnN5bmNPckFzeW5jPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBpKCl7cmV0dXJuIGMuc3luY09yQXN5bmModCxlLHIpfWZvcig7dC5sZW5ndGg7KWlmKChuPSgwLHQuc3BsaWNlKDAsMSlbMF0pKGUpKSYmbi50aGVuKXJldHVybiBuLnRoZW4oaSkudGhlbih2b2lkIDAsYy5wcm9taXNlRXJyb3IpO3JldHVybiByJiZyKGUpfSxjLnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LnN1YnN0cigtMSk/dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKTp0fSxjLm5vbmVPckFsbD1mdW5jdGlvbih0LGUscil7aWYodCl7dmFyIG4saT0hMSxhPSEwO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspbnVsbCE9dFtyW25dXT9pPSEwOmE9ITE7aWYoaSYmIWEpZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxjLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIG47aWYoYy5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgYT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksbz0wO288YTtvKyspe3ZhciBzPXRbb107ZVtvXVtyXT1pP24ocyk6c319LGMubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGMubWVyZ2VBcnJheSh0LGUsciwoZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGlzRmluaXRlKGUpJiZlPjA/ZTowfSkpfSxjLmZpbGxBcnJheT1mdW5jdGlvbih0LGUscixuKXtpZihuPW58fGMuaWRlbnRpdHksYy5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWVbaV1bcl09bih0W2ldKX0sYy5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8Yy5pZGVudGl0eTt2YXIgaT1jLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuIGMuaXNBcnJheU9yVHlwZWRBcnJheShpKT9BcnJheS5pc0FycmF5KGUpJiZjLmlzQXJyYXlPclR5cGVkQXJyYXkoaVtlWzBdXSk/bihpW2VbMF1dW2VbMV1dKTpuKGlbZV0pOml9LGMuZXh0cmFjdE9wdGlvbj1mdW5jdGlvbih0LGUscixuKXtpZihyIGluIHQpcmV0dXJuIHRbcl07dmFyIGk9Yy5uZXN0ZWRQcm9wZXJ0eShlLG4pLmdldCgpO3JldHVybiBBcnJheS5pc0FycmF5KGkpP3ZvaWQgMDppfSxjLnRhZ1NlbGVjdGVkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5zZWxlY3RlZHBvaW50cyxvPWUuX2luZGV4VG9Qb2ludHM7byYmKG49TShvKSk7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107aWYoYy5pc0luZGV4KGwpfHxjLmlzQXJyYXlPclR5cGVkQXJyYXkobCkmJmMuaXNJbmRleChsWzBdKSYmYy5pc0luZGV4KGxbMV0pKXt2YXIgdT1uP25bbF06bCxmPXI/clt1XTp1O3ZvaWQgMCE9PShpPWYpJiZpPHQubGVuZ3RoJiYodFtmXS5zZWxlY3RlZD0xKX19fSxjLnNlbEluZGljZXMyc2VsUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0ZWRwb2ludHMscj10Ll9pbmRleFRvUG9pbnRzO2lmKHIpe2Zvcih2YXIgbj1NKHIpLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lmKGMuaXNJbmRleChvKSl7dmFyIHM9bltvXTtjLmlzSW5kZXgocykmJmkucHVzaChzKX19cmV0dXJuIGl9cmV0dXJuIGV9LGMuZ2V0VGFyZ2V0QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRhcmdldDtpZigic3RyaW5nIj09dHlwZW9mIHImJnIpe3ZhciBuPWMubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKTtyZXR1cm4hIUFycmF5LmlzQXJyYXkobikmJm59cmV0dXJuISFBcnJheS5pc0FycmF5KHIpJiZyfSxjLm1pbkV4dGVuZD1mdW5jdGlvbih0LGUpe3ZhciByPXt9OyJvYmplY3QiIT10eXBlb2YgZSYmKGU9e30pO3ZhciBuLGksYSxvPU9iamVjdC5rZXlzKHQpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspYT10W2k9b1tuXV0sIl8iIT09aS5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBhJiYoIm1vZHVsZSI9PT1pP3JbaV09YTpBcnJheS5pc0FycmF5KGEpP3JbaV09ImNvbG9yc2NhbGUiPT09aT9hLnNsaWNlKCk6YS5zbGljZSgwLDMpOmMuaXNUeXBlZEFycmF5KGEpP3JbaV09YS5zdWJhcnJheSgwLDMpOnJbaV09YSYmIm9iamVjdCI9PXR5cGVvZiBhP2MubWluRXh0ZW5kKHRbaV0sZVtpXSk6YSk7Zm9yKG89T2JqZWN0LmtleXMoZSksbj0wO248by5sZW5ndGg7bisrKSJvYmplY3QiPT10eXBlb2YoYT1lW2k9b1tuXV0pJiZpIGluIHImJiJvYmplY3QiPT10eXBlb2YgcltpXXx8KHJbaV09YSk7cmV0dXJuIHJ9LGMudGl0bGVDYXNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxjLmNvbnRhaW5zQW55PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoLTEhPT10LmluZGV4T2YoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9LGMuaXNJRT1mdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9ifTt2YXIgQT0vTVNJRSBbMS05XVwuLztjLmlzSUU5b3JCZWxvdz1mdW5jdGlvbigpe3JldHVybiBjLmlzSUUoKSYmQS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX07dmFyIFM9L1ZlcnNpb25cL1tcZFwuXSsuKlNhZmFyaS87Yy5pc1NhZmFyaT1mdW5jdGlvbigpe3JldHVybiBTLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpfTt2YXIgRT0vaVBhZHxpUGhvbmV8aVBvZC87Yy5pc0lPUz1mdW5jdGlvbigpe3JldHVybiBFLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpfSxjLmlzRDNTZWxlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNsYXNzZWR9LGMuZW5zdXJlU2luZ2xlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0KGUrKHI/Ii4iK3I6IiIpKTtpZihpLnNpemUoKSlyZXR1cm4gaTt2YXIgYT10LmFwcGVuZChlKTtyZXR1cm4gciYmYS5jbGFzc2VkKHIsITApLG4mJmEuY2FsbChuKSxhfSxjLmVuc3VyZVNpbmdsZUJ5SWQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5zZWxlY3QoZSsiIyIrcik7aWYoaS5zaXplKCkpcmV0dXJuIGk7dmFyIGE9dC5hcHBlbmQoZSkuYXR0cigiaWQiLHIpO3JldHVybiBuJiZhLmNhbGwobiksYX0sYy5vYmplY3RGcm9tUGF0aD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQuc3BsaXQoIi4iKSxpPXI9e30sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9bnVsbCxsPW5bYV0ubWF0Y2goLyguKilcWyhbMC05XSspXF0vKTtsPyhvPWxbMV0scz1sWzJdLHI9cltvXT1bXSxhPT09bi5sZW5ndGgtMT9yW3NdPWU6cltzXT17fSxyPXJbc10pOihhPT09bi5sZW5ndGgtMT9yW29dPWU6cltvXT17fSxyPXJbb10pfXJldHVybiBpfTt2YXIgQz0vXihbXlxbXC5dKylcLiguKyk/LyxMPS9eKFteXC5dKylcWyhbMC05XSspXF0oXC4pPyguKyk/LztjLmV4cGFuZE9iamVjdFBhdGhzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzO2lmKCJvYmplY3QiPT10eXBlb2YgdCYmIUFycmF5LmlzQXJyYXkodCkpZm9yKHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoKGU9ci5tYXRjaChDKSk/KGk9dFtyXSxuPWVbMV0sZGVsZXRlIHRbcl0sdFtuXT1jLmV4dGVuZERlZXBOb0FycmF5cyh0W25dfHx7fSxjLm9iamVjdEZyb21QYXRoKHIsYy5leHBhbmRPYmplY3RQYXRocyhpKSlbbl0pKTooZT1yLm1hdGNoKEwpKT8oaT10W3JdLG49ZVsxXSxhPXBhcnNlSW50KGVbMl0pLGRlbGV0ZSB0W3JdLHRbbl09dFtuXXx8W10sIi4iPT09ZVszXT8ocz1lWzRdLG89dFtuXVthXT10W25dW2FdfHx7fSxjLmV4dGVuZERlZXBOb0FycmF5cyhvLGMub2JqZWN0RnJvbVBhdGgocyxjLmV4cGFuZE9iamVjdFBhdGhzKGkpKSkpOnRbbl1bYV09Yy5leHBhbmRPYmplY3RQYXRocyhpKSk6dFtyXT1jLmV4cGFuZE9iamVjdFBhdGhzKHRbcl0pKTtyZXR1cm4gdH0sYy5udW1TZXBhcmF0ZT1mdW5jdGlvbih0LGUscil7aWYocnx8KHI9ITEpLCJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiU2VwYXJhdG9yIHN0cmluZyByZXF1aXJlZCBmb3IgZm9ybWF0dGluZyEiKTsibnVtYmVyIj09dHlwZW9mIHQmJih0PVN0cmluZyh0KSk7dmFyIG49LyhcZCspKFxkezN9KS8saT1lLmNoYXJBdCgwKSxhPWUuY2hhckF0KDEpLG89dC5zcGxpdCgiLiIpLHM9b1swXSxsPW8ubGVuZ3RoPjE/aStvWzFdOiIiO2lmKGEmJihvLmxlbmd0aD4xfHxzLmxlbmd0aD40fHxyKSlmb3IoO24udGVzdChzKTspcz1zLnJlcGxhY2UobiwiJDEiK2ErIiQyIik7cmV0dXJuIHMrbH0sYy5URU1QTEFURV9TVFJJTkdfUkVHRVg9LyV7KFteXHMle306XSopKFs6fFx8XVtefV0qKT99L2c7dmFyIEk9L15cdyokLztjLnRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307cmV0dXJuIHQucmVwbGFjZShjLlRFTVBMQVRFX1NUUklOR19SRUdFWCwoZnVuY3Rpb24odCxuKXt2YXIgaTtyZXR1cm4gSS50ZXN0KG4pP2k9ZVtuXToocltuXT1yW25dfHxjLm5lc3RlZFByb3BlcnR5KGUsbikuZ2V0LGk9cltuXSgpKSxjLmlzVmFsaWRUZXh0VmFsdWUoaSk/aToiIn0pKX07dmFyIFA9e21heDoxMCxjb3VudDowLG5hbWU6ImhvdmVydGVtcGxhdGUifTtjLmhvdmVydGVtcGxhdGVTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gRC5hcHBseShQLGFyZ3VtZW50cyl9O3ZhciB6PXttYXg6MTAsY291bnQ6MCxuYW1lOiJ0ZXh0dGVtcGxhdGUifTtjLnRleHR0ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiBELmFwcGx5KHosYXJndW1lbnRzKX07dmFyIE89L15bOnxcfF0vO2Z1bmN0aW9uIEQodCxlLHIpe3ZhciBhPXRoaXMsbz1hcmd1bWVudHM7ZXx8KGU9e30pO3ZhciBzPXt9O3JldHVybiB0LnJlcGxhY2UoYy5URU1QTEFURV9TVFJJTkdfUkVHRVgsKGZ1bmN0aW9uKHQsbCx1KXt2YXIgZixoLHAsZDtmb3IocD0zO3A8by5sZW5ndGg7cCsrKWlmKGY9b1twXSl7aWYoZi5oYXNPd25Qcm9wZXJ0eShsKSl7aD1mW2xdO2JyZWFrfWlmKEkudGVzdChsKXx8KGg9c1tsXXx8Yy5uZXN0ZWRQcm9wZXJ0eShmLGwpLmdldCgpKSYmKHNbbF09aCksdm9pZCAwIT09aClicmVha31pZih2b2lkIDA9PT1oJiZhKXJldHVybiBhLmNvdW50PGEubWF4JiYoYy53YXJuKCJWYXJpYWJsZSAnIitsKyInIGluICIrYS5uYW1lKyIgY291bGQgbm90IGJlIGZvdW5kISIpLGg9dCksYS5jb3VudD09PWEubWF4JiZjLndhcm4oIlRvbyBtYW55ICIrYS5uYW1lKyIgd2FybmluZ3MgLSBhZGRpdGlvbmFsIHdhcm5pbmdzIHdpbGwgYmUgc3VwcHJlc3NlZCIpLGEuY291bnQrKyx0O2lmKHUpe2lmKCI6Ij09PXVbMF0mJihoPShkPXI/ci5udW1iZXJGb3JtYXQ6bi5mb3JtYXQpKHUucmVwbGFjZShPLCIiKSkoaCkpLCJ8Ij09PXVbMF0pe2Q9cj9yLnRpbWVGb3JtYXQ6aTt2YXIgZz1jLmRhdGVUaW1lMm1zKGgpO2g9Yy5mb3JtYXREYXRlKGcsdS5yZXBsYWNlKE8sIiIpLCExLGQpfX1lbHNlIGUuaGFzT3duUHJvcGVydHkobCsiTGFiZWwiKSYmKGg9ZVtsKyJMYWJlbCJdKTtyZXR1cm4gaH0pKX1jLnN1YnBsb3RTb3J0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSsxLG49MCxpPTAsYT0wO2E8cjthKyspe3ZhciBvPXQuY2hhckNvZGVBdChhKXx8MCxzPWUuY2hhckNvZGVBdChhKXx8MCxsPW8+PTQ4JiZvPD01NyxjPXM+PTQ4JiZzPD01NztpZihsJiYobj0xMCpuK28tNDgpLGMmJihpPTEwKmkrcy00OCksIWx8fCFjKXtpZihuIT09aSlyZXR1cm4gbi1pO2lmKG8hPT1zKXJldHVybiBvLXN9fXJldHVybiBpLW59O3ZhciBSPTJlOTtjLnNlZWRQc2V1ZG9SYW5kb209ZnVuY3Rpb24oKXtSPTJlOX0sYy5wc2V1ZG9SYW5kb209ZnVuY3Rpb24oKXt2YXIgdD1SO3JldHVybiBSPSg2OTA2OSpSKzEpJTQyOTQ5NjcyOTYsTWF0aC5hYnMoUi10KTw0Mjk0OTY3Mjk/Yy5wc2V1ZG9SYW5kb20oKTpSLzQyOTQ5NjcyOTZ9LGMuZmlsbFRleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCl7ci5wdXNoKHQpfTpmdW5jdGlvbih0KXtyLnRleHQ9dH0saT1jLmV4dHJhY3RPcHRpb24odCxlLCJodHgiLCJob3ZlcnRleHQiKTtpZihjLmlzVmFsaWRUZXh0VmFsdWUoaSkpcmV0dXJuIG4oaSk7dmFyIGE9Yy5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7cmV0dXJuIGMuaXNWYWxpZFRleHRWYWx1ZShhKT9uKGEpOnZvaWQgMH0sYy5pc1ZhbGlkVGV4dFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dH0sYy5mb3JtYXRQZXJjZW50PWZ1bmN0aW9uKHQsZSl7ZT1lfHwwO2Zvcih2YXIgcj0oTWF0aC5yb3VuZCgxMDAqdCpNYXRoLnBvdygxMCxlKSkqTWF0aC5wb3coLjEsZSkpLnRvRml4ZWQoZSkrIiUiLG49MDtuPGU7bisrKS0xIT09ci5pbmRleE9mKCIuIikmJihyPShyPXIucmVwbGFjZSgiMCUiLCIlIikpLnJlcGxhY2UoIi4lIiwiJSIpKTtyZXR1cm4gcn0sYy5pc0hpZGRlbj1mdW5jdGlvbih0KXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5O3JldHVybiFlfHwibm9uZSI9PT1lfSxjLnN0clRyYW5zbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0fHxlPyJ0cmFuc2xhdGUoIit0KyIsIitlKyIpIjoiIn0sYy5zdHJSb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/InJvdGF0ZSgiK3QrIikiOiIifSxjLnN0clNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dD8ic2NhbGUoIit0KyIpIjoiIn0sYy5nZXRUZXh0VHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9DZW50ZXIscj10LnRleHRYLG49dC50ZXh0WSxpPXQudGFyZ2V0WCxhPXQudGFyZ2V0WSxvPXQuYW5jaG9yWHx8MCxzPXQuYW5jaG9yWXx8MCxsPXQucm90YXRlLHU9dC5zY2FsZTtyZXR1cm4gdT91PjEmJih1PTEpOnU9MCxjLnN0clRyYW5zbGF0ZShpLXUqKHIrbyksYS11KihuK3MpKStjLnN0clNjYWxlKHUpKyhsPyJyb3RhdGUoIitsKyhlPyIiOiIgIityKyIgIituKSsiKSI6IiIpfSxjLmVuc3VyZVVuaWZvcm1Gb250U2l6ZT1mdW5jdGlvbih0LGUpe3ZhciByPWMuZXh0ZW5kRmxhdCh7fSxlKTtyZXR1cm4gci5zaXplPU1hdGgubWF4KGUuc2l6ZSx0Ll9mdWxsTGF5b3V0LnVuaWZvcm10ZXh0Lm1pbnNpemV8fDApLHJ9LGMuam9pbjI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBuPjE/dC5zbGljZSgwLC0xKS5qb2luKGUpK3IrdFtuLTFdOnQuam9pbihlKX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuL2FuY2hvcl91dGlscyI6NzU4LCIuL2FuZ2xlcyI6NzU5LCIuL2FycmF5Ijo3NjAsIi4vY2xlYW5fbnVtYmVyIjo3NjEsIi4vY2xlYXJfcmVzcG9uc2l2ZSI6NzYzLCIuL2NvZXJjZSI6NzY0LCIuL2RhdGVzIjo3NjUsIi4vZG9tIjo3NjYsIi4vZXh0ZW5kIjo3NjgsIi4vZmlsdGVyX3VuaXF1ZSI6NzY5LCIuL2ZpbHRlcl92aXNpYmxlIjo3NzAsIi4vZ2VvbWV0cnkyZCI6NzczLCIuL2lkZW50aXR5Ijo3NzYsIi4vaW5jcmVtZW50Ijo3NzcsIi4vaXNfcGxhaW5fb2JqZWN0Ijo3NzksIi4va2V5ZWRfY29udGFpbmVyIjo3ODAsIi4vbG9jYWxpemUiOjc4MSwiLi9sb2dnZXJzIjo3ODIsIi4vbWFrZV90cmFjZV9ncm91cHMiOjc4MywiLi9tYXRyaXgiOjc4NCwiLi9tb2QiOjc4NSwiLi9uZXN0ZWRfcHJvcGVydHkiOjc4NiwiLi9ub29wIjo3ODcsIi4vbm90aWZpZXIiOjc4OCwiLi9wcmVzZXJ2ZV9kcmF3aW5nX2J1ZmZlciI6NzkyLCIuL3B1c2hfdW5pcXVlIjo3OTMsIi4vcmVnZXgiOjc5NSwiLi9yZWxhdGl2ZV9hdHRyIjo3OTYsIi4vcmVsaW5rX3ByaXZhdGUiOjc5NywiLi9zZWFyY2giOjc5OCwiLi9zdGF0cyI6ODAxLCIuL3Rocm90dGxlIjo4MDQsIi4vdG9fbG9nX3JhbmdlIjo4MDUsZDM6MTY5LCJkMy10aW1lLWZvcm1hdCI6MTY2LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNzc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gd2luZG93JiZ3aW5kb3cucHJvY2VzcyYmd2luZG93LnByb2Nlc3MudmVyc2lvbnM/IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk6IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkmJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PU9iamVjdC5wcm90b3R5cGV9fSx7fV0sNzgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbmVzdGVkX3Byb3BlcnR5IiksaT0vXlx3KiQvO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGw7cj1yfHwibmFtZSIsYT1hfHwidmFsdWUiO3ZhciBjPXt9O2UmJmUubGVuZ3RoPyhsPW4odCxlKSxzPWwuZ2V0KCkpOnM9dCxlPWV8fCIiO3ZhciB1PXt9O2lmKHMpZm9yKG89MDtvPHMubGVuZ3RoO28rKyl1W3Nbb11bcl1dPW87dmFyIGY9aS50ZXN0KGEpLGg9e3NldDpmdW5jdGlvbih0LGUpe3ZhciBpPW51bGw9PT1lPzQ6MDtpZighcyl7aWYoIWx8fDQ9PT1pKXJldHVybjtzPVtdLGwuc2V0KHMpfXZhciBvPXVbdF07aWYodm9pZCAwPT09byl7aWYoND09PWkpcmV0dXJuO2l8PTMsbz1zLmxlbmd0aCx1W3RdPW99ZWxzZSBlIT09KGY/c1tvXVthXTpuKHNbb10sYSkuZ2V0KCkpJiYoaXw9Mik7dmFyIHA9c1tvXT1zW29dfHx7fTtyZXR1cm4gcFtyXT10LGY/cFthXT1lOm4ocCxhKS5zZXQoZSksbnVsbCE9PWUmJihpJj0tNSksY1tvXT1jW29dfGksaH0sZ2V0OmZ1bmN0aW9uKHQpe2lmKHMpe3ZhciBlPXVbdF07cmV0dXJuIHZvaWQgMD09PWU/dm9pZCAwOmY/c1tlXVthXTpuKHNbZV0sYSkuZ2V0KCl9fSxyZW5hbWU6ZnVuY3Rpb24odCxlKXt2YXIgbj11W3RdO3JldHVybiB2b2lkIDA9PT1ufHwoY1tuXT0xfGNbbl0sdVtlXT1uLGRlbGV0ZSB1W3RdLHNbbl1bcl09ZSksaH0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXVbdF07aWYodm9pZCAwPT09ZSlyZXR1cm4gaDt2YXIgaT1zW2VdO2lmKE9iamVjdC5rZXlzKGkpLmxlbmd0aD4yKXJldHVybiBjW2VdPTJ8Y1tlXSxoLnNldCh0LG51bGwpO2lmKGYpe2ZvcihvPWU7bzxzLmxlbmd0aDtvKyspY1tvXT0zfGNbb107Zm9yKG89ZTtvPHMubGVuZ3RoO28rKyl1W3Nbb11bcl1dLS07cy5zcGxpY2UoZSwxKSxkZWxldGUgdVt0XX1lbHNlIG4oaSxhKS5zZXQobnVsbCksY1tlXT02fGNbZV07cmV0dXJuIGh9LGNvbnN0cnVjdFVwZGF0ZTpmdW5jdGlvbigpe2Zvcih2YXIgdCxpLG89e30sbD1PYmplY3Qua2V5cyhjKSx1PTA7dTxsLmxlbmd0aDt1KyspaT1sW3VdLHQ9ZSsiWyIraSsiXSIsc1tpXT8oMSZjW2ldJiYob1t0KyIuIityXT1zW2ldW3JdKSwyJmNbaV0mJihvW3QrIi4iK2FdPWY/NCZjW2ldP251bGw6c1tpXVthXTo0JmNbaV0/bnVsbDpuKHNbaV0sYSkuZ2V0KCkpKTpvW3RdPW51bGw7cmV0dXJuIG99fTtyZXR1cm4gaH19LHsiLi9uZXN0ZWRfcHJvcGVydHkiOjc4Nn1dLDc4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9jb250ZXh0LmxvY2FsZSxpPTA7aTwyO2krKyl7Zm9yKHZhciBhPXQuX2NvbnRleHQubG9jYWxlcyxvPTA7bzwyO28rKyl7dmFyIHM9KGFbcl18fHt9KS5kaWN0aW9uYXJ5O2lmKHMpe3ZhciBsPXNbZV07aWYobClyZXR1cm4gbH1hPW4ubG9jYWxlUmVnaXN0cnl9dmFyIGM9ci5zcGxpdCgiLSIpWzBdO2lmKGM9PT1yKWJyZWFrO3I9Y31yZXR1cm4gZX19LHsiLi4vcmVnaXN0cnkiOjkxMX1dLDc4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLmRmbHRDb25maWcsaT10KCIuL25vdGlmaWVyIiksYT1lLmV4cG9ydHM9e307ZnVuY3Rpb24gbyh0LGUpe2lmKHQmJnQuYXBwbHkpdHJ5e3JldHVybiB2b2lkIHQuYXBwbHkoY29uc29sZSxlKX1jYXRjaCh0KXt9Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdHJ5e3QoZVtyXSl9Y2F0Y2godCl7Y29uc29sZS5sb2coZVtyXSl9fWEubG9nPWZ1bmN0aW9uKCl7dmFyIHQ7aWYobi5sb2dnaW5nPjEpe3ZhciBlPVsiTE9HOiJdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKTtvKGNvbnNvbGUudHJhY2V8fGNvbnNvbGUubG9nLGUpfWlmKG4ubm90aWZ5T25Mb2dnaW5nPjEpe3ZhciByPVtdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylyLnB1c2goYXJndW1lbnRzW3RdKTtpKHIuam9pbigiPGJyPiIpLCJsb25nIil9fSxhLndhcm49ZnVuY3Rpb24oKXt2YXIgdDtpZihuLmxvZ2dpbmc+MCl7dmFyIGU9WyJXQVJOOiJdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKTtvKGNvbnNvbGUudHJhY2V8fGNvbnNvbGUubG9nLGUpfWlmKG4ubm90aWZ5T25Mb2dnaW5nPjApe3ZhciByPVtdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylyLnB1c2goYXJndW1lbnRzW3RdKTtpKHIuam9pbigiPGJyPiIpLCJzdGljayIpfX0sYS5lcnJvcj1mdW5jdGlvbigpe3ZhciB0O2lmKG4ubG9nZ2luZz4wKXt2YXIgZT1bIkVSUk9SOiJdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKTtvKGNvbnNvbGUuZXJyb3IsZSl9aWYobi5ub3RpZnlPbkxvZ2dpbmc+MCl7dmFyIHI9W107Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXIucHVzaChhcmd1bWVudHNbdF0pO2koci5qb2luKCI8YnI+IiksInN0aWNrIil9fX0seyIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyI6ODE1LCIuL25vdGlmaWVyIjo3ODh9XSw3ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuc2VsZWN0QWxsKCJnLiIrci5yZXBsYWNlKC9ccy9nLCIuIikpLmRhdGEoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSkpO2kuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsciksaS5vcmRlcigpO3ZhciBhPXQuY2xhc3NlZCgicmFuZ2VwbG90Iik/Im5vZGVSYW5nZVBsb3QzIjoibm9kZTMiO3JldHVybiBpLmVhY2goKGZ1bmN0aW9uKHQpe3RbMF1bYV09bi5zZWxlY3QodGhpcyl9KSksaX19LHtkMzoxNjl9XSw3ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtbWF0NCIpO3IuaW5pdDJkQXJyYXk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7bisrKXJbbl09bmV3IEFycmF5KGUpO3JldHVybiByfSxyLnRyYW5zcG9zZVJhZ2dlZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49MCxpPXQubGVuZ3RoO2ZvcihlPTA7ZTxpO2UrKyluPU1hdGgubWF4KG4sdFtlXS5sZW5ndGgpO3ZhciBhPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjtlKyspZm9yKGFbZV09bmV3IEFycmF5KGkpLHI9MDtyPGk7cisrKWFbZV1bcl09dFtyXVtlXTtyZXR1cm4gYX0sci5kb3Q9ZnVuY3Rpb24odCxlKXtpZighdC5sZW5ndGh8fCFlLmxlbmd0aHx8dC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgbixpLGE9dC5sZW5ndGg7aWYodFswXS5sZW5ndGgpZm9yKG49bmV3IEFycmF5KGEpLGk9MDtpPGE7aSsrKW5baV09ci5kb3QodFtpXSxlKTtlbHNlIGlmKGVbMF0ubGVuZ3RoKXt2YXIgbz1yLnRyYW5zcG9zZVJhZ2dlZChlKTtmb3Iobj1uZXcgQXJyYXkoby5sZW5ndGgpLGk9MDtpPG8ubGVuZ3RoO2krKyluW2ldPXIuZG90KHQsb1tpXSl9ZWxzZSBmb3Iobj0wLGk9MDtpPGE7aSsrKW4rPXRbaV0qZVtpXTtyZXR1cm4gbn0sci50cmFuc2xhdGlvbk1hdHJpeD1mdW5jdGlvbih0LGUpe3JldHVybltbMSwwLHRdLFswLDEsZV0sWzAsMCwxXV19LHIucm90YXRpb25NYXRyaXg9ZnVuY3Rpb24odCl7dmFyIGU9dCpNYXRoLlBJLzE4MDtyZXR1cm5bW01hdGguY29zKGUpLC1NYXRoLnNpbihlKSwwXSxbTWF0aC5zaW4oZSksTWF0aC5jb3MoZSksMF0sWzAsMCwxXV19LHIucm90YXRpb25YWU1hdHJpeD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuZG90KHIuZG90KHIudHJhbnNsYXRpb25NYXRyaXgoZSxuKSxyLnJvdGF0aW9uTWF0cml4KHQpKSxyLnRyYW5zbGF0aW9uTWF0cml4KC1lLC1uKSl9LHIuYXBwbHkzRFRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMsbj0xPT09YXJndW1lbnRzLmxlbmd0aD9lWzBdOltlWzBdLGVbMV0sZVsyXXx8MF07cmV0dXJuIHIuZG90KHQsW25bMF0sblsxXSxuWzJdLDFdKS5zbGljZSgwLDMpfX0sci5hcHBseTJEVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50czszPT09ZS5sZW5ndGgmJihlPWVbMF0pO3ZhciBuPTE9PT1hcmd1bWVudHMubGVuZ3RoP2VbMF06W2VbMF0sZVsxXV07cmV0dXJuIHIuZG90KHQsW25bMF0sblsxXSwxXSkuc2xpY2UoMCwyKX19LHIuYXBwbHkyRFRyYW5zZm9ybTI9ZnVuY3Rpb24odCl7dmFyIGU9ci5hcHBseTJEVHJhbnNmb3JtKHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0LnNsaWNlKDAsMikpLmNvbmNhdChlKHQuc2xpY2UoMiw0KSkpfX0sci5jb252ZXJ0Q3NzTWF0cml4PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDE2PT09ZSlyZXR1cm4gdDtpZig2PT09ZSlyZXR1cm5bdFswXSx0WzFdLDAsMCx0WzJdLHRbM10sMCwwLDAsMCwxLDAsdFs0XSx0WzVdLDAsMV19cmV0dXJuWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdfSxyLmludmVyc2VUcmFuc2Zvcm1NYXRyaXg9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIG4uaW52ZXJ0KGUsdCksW1tlWzBdLGVbMV0sZVsyXSxlWzNdXSxbZVs0XSxlWzVdLGVbNl0sZVs3XV0sW2VbOF0sZVs5XSxlWzEwXSxlWzExXV0sW2VbMTJdLGVbMTNdLGVbMTRdLGVbMTVdXV19fSx7ImdsLW1hdDQiOjI5Mn1dLDc4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZDpmdW5jdGlvbih0LGUpe3ZhciByPXQlZTtyZXR1cm4gcjwwP3IrZTpyfSxtb2RIYWxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKHQpPmUvMj90LU1hdGgucm91bmQodC9lKSplOnR9fX0se31dLDc4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByLG4sbyxzLGwsYz10O2ZvcihzPTA7czxlLmxlbmd0aC0xO3MrKyl7aWYoLTE9PT0ocj1lW3NdKSl7Zm9yKG49ITAsbz1bXSxsPTA7bDxjLmxlbmd0aDtsKyspb1tsXT1hKGNbbF0sZS5zbGljZShzKzEpKSgpLG9bbF0hPT1vWzBdJiYobj0hMSk7cmV0dXJuIG4/b1swXTpvfWlmKCJudW1iZXIiPT10eXBlb2YgciYmIWkoYykpcmV0dXJuO2lmKCJvYmplY3QiIT10eXBlb2YoYz1jW3JdKXx8bnVsbD09PWMpcmV0dXJufWlmKCJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9PWMmJm51bGwhPT0obz1jW2Vbc11dKSlyZXR1cm4gb319ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYobihlKSllPVN0cmluZyhlKTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZXx8IlstMV0iPT09ZS5zdWJzdHIoZS5sZW5ndGgtNCkpdGhyb3ciYmFkIHByb3BlcnR5IHN0cmluZyI7Zm9yKHZhciByLGksbyxzPTAsYz1lLnNwbGl0KCIuIik7czxjLmxlbmd0aDspe2lmKHI9U3RyaW5nKGNbc10pLm1hdGNoKC9eKFteXFtcXV0qKSgoXFtcLT9bMC05XSpcXSkrKSQvKSl7aWYoclsxXSljW3NdPXJbMV07ZWxzZXtpZigwIT09cyl0aHJvdyJiYWQgcHJvcGVydHkgc3RyaW5nIjtjLnNwbGljZSgwLDEpfWZvcihpPXJbMl0uc3Vic3RyKDEsclsyXS5sZW5ndGgtMikuc3BsaXQoIl1bIiksbz0wO288aS5sZW5ndGg7bysrKXMrKyxjLnNwbGljZShzLDAsTnVtYmVyKGlbb10pKX1zKyt9cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm57c2V0OmZ1bmN0aW9uKCl7dGhyb3ciYmFkIGNvbnRhaW5lciJ9LGdldDpmdW5jdGlvbigpe30sYXN0cjplLHBhcnRzOnIsb2JqOnR9fSh0LGUsYyk6e3NldDpsKHQsYyxlKSxnZXQ6YSh0LGMpLGFzdHI6ZSxwYXJ0czpjLG9iajp0fX07dmFyIG89LyhefFwuKWFyZ3NcWy87ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB2b2lkIDA9PT10fHxudWxsPT09dCYmIWUubWF0Y2gobyl9ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBhLG8sbD10LGg9IiIscD1bW3QsaF1dLGQ9cyhuLHIpO2ZvcihvPTA7bzxlLmxlbmd0aC0xO28rKyl7aWYoIm51bWJlciI9PXR5cGVvZihhPWVbb10pJiYhaShsKSl0aHJvdyJhcnJheSBpbmRleCBidXQgY29udGFpbmVyIGlzIG5vdCBhbiBhcnJheSI7aWYoLTE9PT1hKXtpZihkPSF1KGwsZS5zbGljZShvKzEpLG4scikpYnJlYWs7cmV0dXJufWlmKCFmKGwsYSxlW28rMV0sZCkpYnJlYWs7aWYoIm9iamVjdCIhPXR5cGVvZihsPWxbYV0pfHxudWxsPT09bCl0aHJvdyJjb250YWluZXIgaXMgbm90IGFuIG9iamVjdCI7aD1jKGgsYSkscC5wdXNoKFtsLGhdKX1pZihkKXtpZihvPT09ZS5sZW5ndGgtMSYmKGRlbGV0ZSBsW2Vbb11dLEFycmF5LmlzQXJyYXkobCkmJitlW29dPT1sLmxlbmd0aC0xKSlmb3IoO2wubGVuZ3RoJiZ2b2lkIDA9PT1sW2wubGVuZ3RoLTFdOylsLnBvcCgpfWVsc2UgbFtlW29dXT1ufX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9ZTtyZXR1cm4gbihlKT9yPSJbIitlKyJdIjp0JiYocj0iLiIrZSksdCtyfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGEsbz1pKHIpLGM9ITAsdT1yLGg9bi5yZXBsYWNlKCItMSIsMCkscD0hbyYmcyhyLGgpLGQ9ZVswXTtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKWg9bi5yZXBsYWNlKCItMSIsYSksbyYmKHA9cyh1PXJbYSVyLmxlbmd0aF0saCkpLHAmJihjPSExKSxmKHQsYSxkLHApJiZsKHRbYV0sZSxuLnJlcGxhY2UoIi0xIixhKSkodSk7cmV0dXJuIGN9ZnVuY3Rpb24gZih0LGUscixuKXtpZih2b2lkIDA9PT10W2VdKXtpZihuKXJldHVybiExO3RbZV09Im51bWJlciI9PXR5cGVvZiByP1tdOnt9fXJldHVybiEwfX0seyIuL2FycmF5Ijo3NjAsImZhc3QtaXNudW1lcmljIjoyNDF9XSw3ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7fX0se31dLDc4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPVtdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKC0xPT09YS5pbmRleE9mKHQpKXthLnB1c2godCk7dmFyIHI9MWUzO2koZSk/cj1lOiJsb25nIj09PWUmJihyPTNlMyk7dmFyIG89bi5zZWxlY3QoImJvZHkiKS5zZWxlY3RBbGwoIi5wbG90bHktbm90aWZpZXIiKS5kYXRhKFswXSk7by5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdGx5LW5vdGlmaWVyIiwhMCksby5zZWxlY3RBbGwoIi5ub3RpZmllci1ub3RlIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgibm90aWZpZXItbm90ZSIsITApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKTtpLmFwcGVuZCgiYnV0dG9uIikuY2xhc3NlZCgibm90aWZpZXItY2xvc2UiLCEwKS5odG1sKCImdGltZXM7Iikub24oImNsaWNrIiwoZnVuY3Rpb24oKXtpLnRyYW5zaXRpb24oKS5jYWxsKHMpfSkpO2Zvcih2YXIgYT1pLmFwcGVuZCgicCIpLG89dC5zcGxpdCgvPGJyXHMqXC8/Pi9nKSxsPTA7bDxvLmxlbmd0aDtsKyspbCYmYS5hcHBlbmQoImJyIiksYS5hcHBlbmQoInNwYW4iKS50ZXh0KG9bbF0pOyJzdGljayI9PT1lP2kudHJhbnNpdGlvbigpLmR1cmF0aW9uKDM1MCkuc3R5bGUoIm9wYWNpdHkiLDEpOmkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDEpLnRyYW5zaXRpb24oKS5kZWxheShyKS5jYWxsKHMpfSkpfWZ1bmN0aW9uIHModCl7dC5kdXJhdGlvbig3MDApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKCJlbmQiLChmdW5jdGlvbih0KXt2YXIgZT1hLmluZGV4T2YodCk7LTEhPT1lJiZhLnNwbGljZShlLDEpLG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSkpfX19LHtkMzoxNjksImZhc3QtaXNudW1lcmljIjoyNDF9XSw3ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zZXRjdXJzb3IiKSxpPSJkYXRhLXNhdmVkY3Vyc29yIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHIoaSk7aWYoZSl7aWYoIXIpe2Zvcih2YXIgYT0odC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107MD09PXMuaW5kZXhPZigiY3Vyc29yLSIpJiZ0LmF0dHIoaSxzLnN1YnN0cig3KSkuY2xhc3NlZChzLCExKX10LmF0dHIoaSl8fHQuYXR0cihpLCIhISIpfW4odCxlKX1lbHNlIHImJih0LmF0dHIoaSxudWxsKSwiISEiPT09cj9uKHQpOm4odCxyKSl9fSx7Ii4vc2V0Y3Vyc29yIjo3OTl9XSw3OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tYXRyaXgiKS5kb3QsaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9ZS5leHBvcnRzPXt9O2EudGVzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zbGljZSgpLG49clswXVswXSxhPW4sbz1yWzBdWzFdLHM9bztmb3Ioci5wdXNoKHJbMF0pLGU9MTtlPHIubGVuZ3RoO2UrKyluPU1hdGgubWluKG4scltlXVswXSksYT1NYXRoLm1heChhLHJbZV1bMF0pLG89TWF0aC5taW4obyxyW2VdWzFdKSxzPU1hdGgubWF4KHMscltlXVsxXSk7dmFyIGwsYz0hMTs1PT09ci5sZW5ndGgmJihyWzBdWzBdPT09clsxXVswXT9yWzJdWzBdPT09clszXVswXSYmclswXVsxXT09PXJbM11bMV0mJnJbMV1bMV09PT1yWzJdWzFdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09clswXVswXX0pOnJbMF1bMV09PT1yWzFdWzFdJiZyWzJdWzFdPT09clszXVsxXSYmclswXVswXT09PXJbM11bMF0mJnJbMV1bMF09PT1yWzJdWzBdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzFdPT09clswXVsxXX0pKTt2YXIgdT0hMCxmPXJbMF07Zm9yKGU9MTtlPHIubGVuZ3RoO2UrKylpZihmWzBdIT09cltlXVswXXx8ZlsxXSE9PXJbZV1bMV0pe3U9ITE7YnJlYWt9cmV0dXJue3htaW46bix4bWF4OmEseW1pbjpvLHltYXg6cyxwdHM6cixjb250YWluczpjP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxjPXRbMV07cmV0dXJuIShyPT09aXx8cjxufHxyPmF8fGM9PT1pfHxjPG98fGM+cykmJighZXx8IWwodCkpfTpmdW5jdGlvbih0LGUpe3ZhciBsPXRbMF0sYz10WzFdO2lmKGw9PT1pfHxsPG58fGw+YXx8Yz09PWl8fGM8b3x8Yz5zKXJldHVybiExO3ZhciB1LGYsaCxwLGQsZz1yLmxlbmd0aCxtPXJbMF1bMF0sdj1yWzBdWzFdLHk9MDtmb3IodT0xO3U8Zzt1KyspaWYoZj1tLGg9dixtPXJbdV1bMF0sdj1yW3VdWzFdLCEobDwocD1NYXRoLm1pbihmLG0pKXx8bD5NYXRoLm1heChmLG0pfHxjPk1hdGgubWF4KGgsdikpKWlmKGM8TWF0aC5taW4oaCx2KSlsIT09cCYmeSsrO2Vsc2V7aWYoYz09PShkPW09PT1mP2M6aCsobC1mKSoodi1oKS8obS1mKSkpcmV0dXJuIDEhPT11fHwhZTtjPD1kJiZsIT09cCYmeSsrfXJldHVybiB5JTI9PTF9LGlzUmVjdDpjLGRlZ2VuZXJhdGU6dX19LGEuaXNTZWdtZW50QmVudD1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbD10W2VdLGM9W3Rbcl1bMF0tbFswXSx0W3JdWzFdLWxbMV1dLHU9bihjLGMpLGY9TWF0aC5zcXJ0KHUpLGg9Wy1jWzFdL2YsY1swXS9mXTtmb3IoYT1lKzE7YTxyO2ErKylpZihvPVt0W2FdWzBdLWxbMF0sdFthXVsxXS1sWzFdXSwocz1uKG8sYykpPDB8fHM+dXx8TWF0aC5hYnMobihvLGgpKT5pKXJldHVybiEwO3JldHVybiExfSxhLmZpbHRlcj1mdW5jdGlvbih0LGUpe3ZhciByPVt0WzBdXSxuPTAsaT0wO2Z1bmN0aW9uIG8obyl7dC5wdXNoKG8pO3ZhciBzPXIubGVuZ3RoLGw9bjtyLnNwbGljZShpKzEpO2Zvcih2YXIgYz1sKzE7Yzx0Lmxlbmd0aDtjKyspKGM9PT10Lmxlbmd0aC0xfHxhLmlzU2VnbWVudEJlbnQodCxsLGMrMSxlKSkmJihyLnB1c2godFtjXSksci5sZW5ndGg8cy0yJiYobj1jLGk9ci5sZW5ndGgtMSksbD1jKX10Lmxlbmd0aD4xJiZvKHQucG9wKCkpO3JldHVybnthZGRQdDpvLHJhdzp0LGZpbHRlcmVkOnJ9fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4vbWF0cml4Ijo3ODR9XSw3OTE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2hvd19ub193ZWJnbF9tc2ciKSxpPXQoInJlZ2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ITA7cmV0dXJuIGEuX2dsY2FudmFzLmVhY2goKGZ1bmN0aW9uKG4pe2lmKCFuLnJlZ2wmJighbi5waWNrfHxhLl9oYXMoInBhcmNvb3JkcyIpKSl7dHJ5e24ucmVnbD1pKHtjYW52YXM6dGhpcyxhdHRyaWJ1dGVzOnthbnRpYWxpYXM6IW4ucGljayxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITB9LHBpeGVsUmF0aW86dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvfHxyLmRldmljZVBpeGVsUmF0aW8sZXh0ZW5zaW9uczplfHxbXX0pfWNhdGNoKHQpe289ITF9bi5yZWdsfHwobz0hMSksbyYmdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IiwoZnVuY3Rpb24oZSl7dCYmdC5lbWl0JiZ0LmVtaXQoInBsb3RseV93ZWJnbGNvbnRleHRsb3N0Iix7ZXZlbnQ6ZSxsYXllcjpuLmtleX0pfSksITEpfX0pKSxvfHxuKHtjb250YWluZXI6YS5fZ2xjb250YWluZXIubm9kZSgpfSksb319KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc2hvd19ub193ZWJnbF9tc2ciOjgwMCxyZWdsOjU0MH1dLDc5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiaXMtbW9iaWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKCJzdHJpbmciIT10eXBlb2YoZT10JiZ0Lmhhc093blByb3BlcnR5KCJ1c2VyQWdlbnQiKT90LnVzZXJBZ2VudDpmdW5jdGlvbigpe3ZhciB0OyJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYodD1uYXZpZ2F0b3IudXNlckFnZW50KTt0JiZ0LmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgdC5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJih0PXQuaGVhZGVyc1sidXNlci1hZ2VudCJdKTtyZXR1cm4gdH0oKSkpcmV0dXJuITA7dmFyIHI9aSh7dWE6e2hlYWRlcnM6eyJ1c2VyLWFnZW50IjplfX0sdGFibGV0OiEwLGZlYXR1cmVEZXRlY3Q6ITF9KTtpZighcilmb3IodmFyIGE9ZS5zcGxpdCgiICIpLG89MTtvPGEubGVuZ3RoO28rKyl7aWYoLTEhPT1hW29dLmluZGV4T2YoIlNhZmFyaSIpKWZvcih2YXIgcz1vLTE7cz4tMTtzLS0pe3ZhciBsPWFbc107aWYoIlZlcnNpb24vIj09PWwuc3Vic3RyKDAsOCkpe3ZhciBjPWwuc3Vic3RyKDgpLnNwbGl0KCIuIilbMF07aWYobihjKSYmKGM9K2MpLGM+PTEzKXJldHVybiEwfX19cmV0dXJuIHJ9fSx7ImZhc3QtaXNudW1lcmljIjoyNDEsImlzLW1vYmlsZSI6NDY3fV0sNzkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2Zvcih2YXIgcj1lLnRvU3RyaW5nKCksbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbnN0YW5jZW9mIFJlZ0V4cCYmdFtuXS50b1N0cmluZygpPT09cilyZXR1cm4gdDt0LnB1c2goZSl9ZWxzZSFlJiYwIT09ZXx8LTEhPT10LmluZGV4T2YoZSl8fHQucHVzaChlKTtyZXR1cm4gdH19LHt9XSw3OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLmRmbHRDb25maWc7dmFyIGE9e2FkZDpmdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHM7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSxzPXQudW5kb1F1ZXVlLmluZGV4LHQuYXV0b3BsYXk/dC51bmRvUXVldWUuaW5TZXF1ZW5jZXx8KHQuYXV0b3BsYXk9ITEpOighdC51bmRvUXVldWUuc2VxdWVuY2V8fHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U/KG89e3VuZG86e2NhbGxzOltdLGFyZ3M6W119LHJlZG86e2NhbGxzOltdLGFyZ3M6W119fSx0LnVuZG9RdWV1ZS5xdWV1ZS5zcGxpY2Uocyx0LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgtcyxvKSx0LnVuZG9RdWV1ZS5pbmRleCs9MSk6bz10LnVuZG9RdWV1ZS5xdWV1ZVtzLTFdLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITEsbyYmKG8udW5kby5jYWxscy51bnNoaWZ0KGUpLG8udW5kby5hcmdzLnVuc2hpZnQociksby5yZWRvLmNhbGxzLnB1c2gobiksby5yZWRvLmFyZ3MucHVzaChhKSksdC51bmRvUXVldWUucXVldWUubGVuZ3RoPmkucXVldWVMZW5ndGgmJih0LnVuZG9RdWV1ZS5xdWV1ZS5zaGlmdCgpLHQudW5kb1F1ZXVlLmluZGV4LS0pKX0sc3RhcnRTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSEwLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITB9LHN0b3BTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSExLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITF9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGUscjtpZih0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcil0LmZyYW1ld29yay51bmRvKCk7ZWxzZSBpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4PD0wKSl7Zm9yKHQudW5kb1F1ZXVlLmluZGV4LS0sZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnVuZG8uY2FsbHMubGVuZ3RoO3IrKylhLnBsb3REbyh0LGUudW5kby5jYWxsc1tyXSxlLnVuZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExfX0scmVkbzpmdW5jdGlvbih0KXt2YXIgZSxyO2lmKHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXQuZnJhbWV3b3JrLnJlZG8oKTtlbHNlIGlmKCEodm9pZCAwPT09dC51bmRvUXVldWV8fGlzTmFOKHQudW5kb1F1ZXVlLmluZGV4KXx8dC51bmRvUXVldWUuaW5kZXg+PXQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aCkpe2ZvcihlPXQudW5kb1F1ZXVlLnF1ZXVlW3QudW5kb1F1ZXVlLmluZGV4XSx0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSEwLHI9MDtyPGUucmVkby5jYWxscy5sZW5ndGg7cisrKWEucGxvdERvKHQsZS5yZWRvLmNhbGxzW3JdLGUucmVkby5hcmdzW3JdKTt0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSExLHQuYXV0b3BsYXk9ITEsdC51bmRvUXVldWUuaW5kZXgrK319fTthLnBsb3REbz1mdW5jdGlvbih0LGUscil7dC5hdXRvcGxheT0hMCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXI9ZVthXSxpW2FdPXI9PT10P3I6Im9iamVjdCI9PXR5cGVvZiByP0FycmF5LmlzQXJyYXkocik/bi5leHRlbmREZWVwKFtdLHIpOm4uZXh0ZW5kRGVlcEFsbCh7fSxyKTpyO3JldHVybiBpfSh0LHIpLGUuYXBwbHkobnVsbCxyKX0sZS5leHBvcnRzPWF9LHsiLi4vbGliIjo3NzgsIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjo4MTV9XSw3OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5jb3VudGVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPShlfHwiIikrKHI/IiI6IiQiKSxhPSExPT09bj8iIjoiXiI7cmV0dXJuInh5Ij09PXQ/bmV3IFJlZ0V4cChhKyJ4KFsyLTldfFsxLTldWzAtOV0rKT95KFsyLTldfFsxLTldWzAtOV0rKT8iK2kpOm5ldyBSZWdFeHAoYSt0KyIoWzItOV18WzEtOV1bMC05XSspPyIraSl9fSx7fV0sNzk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPS9eKC4qKShcLlteXC5cW1xdXSt8XFtcZFxdKSQvLGk9L15bXlwuXFtcXV0rJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKDtlOyl7dmFyIHI9dC5tYXRjaChuKTtpZihyKXQ9clsxXTtlbHNle2lmKCF0Lm1hdGNoKGkpKXRocm93IG5ldyBFcnJvcigiYmFkIHJlbGF0aXZlQXR0ciBjYWxsOiIrW3QsZV0pO3Q9IiJ9aWYoIl4iIT09ZS5jaGFyQXQoMCkpYnJlYWs7ZT1lLnNsaWNlKDEpfXJldHVybiB0JiYiWyIhPT1lLmNoYXJBdCgwKT90KyIuIitlOnQrZX19LHt9XSw3OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KCIuL2lzX3BsYWluX29iamVjdCIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscil7Zm9yKHZhciBhIGluIHIpe3ZhciBvPXJbYV0scz1lW2FdO2lmKHMhPT1vKWlmKCJfIj09PWEuY2hhckF0KDApfHwiZnVuY3Rpb24iPT10eXBlb2Ygbyl7aWYoYSBpbiBlKWNvbnRpbnVlO2VbYV09b31lbHNlIGlmKG4obykmJm4ocykmJmkob1swXSkpe2lmKCJjdXN0b21kYXRhIj09PWF8fCJpZHMiPT09YSljb250aW51ZTtmb3IodmFyIGw9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpLGM9MDtjPGw7YysrKXNbY10hPT1vW2NdJiZpKG9bY10pJiZpKHNbY10pJiZ0KHNbY10sb1tjXSl9ZWxzZSBpKG8pJiZpKHMpJiYodChzLG8pLE9iamVjdC5rZXlzKHMpLmxlbmd0aHx8ZGVsZXRlIGVbYV0pfX19LHsiLi9hcnJheSI6NzYwLCIuL2lzX3BsYWluX29iamVjdCI6Nzc5fV0sNzk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2xvZ2dlcnMiKSxhPXQoIi4vaWRlbnRpdHkiKSxvPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0PGV9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0PD1lfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdD5lfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdD49ZX1yLmZpbmRCaW49ZnVuY3Rpb24odCxlLHIpe2lmKG4oZS5zdGFydCkpcmV0dXJuIHI/TWF0aC5jZWlsKCh0LWUuc3RhcnQpL2Uuc2l6ZS0xZS05KS0xOk1hdGguZmxvb3IoKHQtZS5zdGFydCkvZS5zaXplKzFlLTkpO3ZhciBhLG8sZj0wLGg9ZS5sZW5ndGgscD0wLGQ9aD4xPyhlW2gtMV0tZVswXSkvKGgtMSk6MTtmb3Iobz1kPj0wP3I/czpsOnI/dTpjLHQrPTFlLTkqZCoocj8tMToxKSooZD49MD8xOi0xKTtmPGgmJnArKzwxMDA7KW8oZVthPU1hdGguZmxvb3IoKGYraCkvMildLHQpP2Y9YSsxOmg9YTtyZXR1cm4gcD45MCYmaS5sb2coIkxvbmcgYmluYXJ5IHNlYXJjaC4uLiIpLGYtMX0sci5zb3J0ZXJBc2M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSxyLnNvcnRlckRlcz1mdW5jdGlvbih0LGUpe3JldHVybiBlLXR9LHIuZGlzdGluY3RWYWxzPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT0oZXx8e30pLnVuaXRNaW5EaWZmLGE9dC5zbGljZSgpO2ZvcihhLnNvcnQoci5zb3J0ZXJBc2MpLG49YS5sZW5ndGgtMTtuPi0xJiZhW25dPT09bztuLS0pO3ZhciBzPTE7aXx8KHM9YVtuXS1hWzBdfHwxKTtmb3IodmFyIGwsYz1zLyhufHwxKS8xZTQsdT1bXSxmPTA7Zjw9bjtmKyspe3ZhciBoPWFbZl0scD1oLWw7dm9pZCAwPT09bD8odS5wdXNoKGgpLGw9aCk6cD5jJiYocz1NYXRoLm1pbihzLHApLHUucHVzaChoKSxsPWgpfXJldHVybnt2YWxzOnUsbWluRGlmZjpzfX0sci5yb3VuZFVwPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT0wLGE9ZS5sZW5ndGgtMSxvPTAscz1yPzA6MSxsPXI/MTowLGM9cj9NYXRoLmNlaWw6TWF0aC5mbG9vcjtpPGEmJm8rKzwxMDA7KWVbbj1jKChpK2EpLzIpXTw9dD9pPW4rczphPW4tbDtyZXR1cm4gZVtpXX0sci5zb3J0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9MTtpPHQubGVuZ3RoO2krKyl7dmFyIGE9ZSh0W2ldLHRbaS0xXSk7aWYoYTwwP3I9MTphPjAmJihuPTEpLHImJm4pcmV0dXJuIHQuc29ydChlKX1yZXR1cm4gbj90OnQucmV2ZXJzZSgpfSxyLmZpbmRJbmRleE9mTWluPWZ1bmN0aW9uKHQsZSl7ZT1lfHxhO2Zvcih2YXIgcixuPTEvMCxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPWUodFtpXSk7bzxuJiYobj1vLHI9aSl9cmV0dXJuIHJ9fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi9pZGVudGl0eSI6Nzc2LCIuL2xvZ2dlcnMiOjc4MiwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDc5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsodC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKS5mb3JFYWNoKChmdW5jdGlvbihlKXswPT09ZS5pbmRleE9mKCJjdXJzb3ItIikmJnQuY2xhc3NlZChlLCExKX0pKSxlJiZ0LmNsYXNzZWQoImN1cnNvci0iK2UsITApfX0se31dLDgwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksaT1mdW5jdGlvbigpe307ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KSJmdW5jdGlvbiI9PXR5cGVvZiB0W2VdJiYodFtlXT1pKTt0LmRlc3Ryb3k9ZnVuY3Rpb24oKXt0LmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQuY29udGFpbmVyKX07dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5jbGFzc05hbWU9Im5vLXdlYmdsIixyLnN0eWxlLmN1cnNvcj0icG9pbnRlciIsci5zdHlsZS5mb250U2l6ZT0iMjRweCIsci5zdHlsZS5jb2xvcj1uLmRlZmF1bHRzWzBdLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixyLnN0eWxlLmxlZnQ9ci5zdHlsZS50b3A9IjBweCIsci5zdHlsZS53aWR0aD1yLnN0eWxlLmhlaWdodD0iMTAwJSIsci5zdHlsZVsiYmFja2dyb3VuZC1jb2xvciJdPW4ubGlnaHRMaW5lLHIuc3R5bGVbInotaW5kZXgiXT0zMDt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7cmV0dXJuIGEudGV4dENvbnRlbnQ9IldlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyIC0gdmlzaXQgaHR0cHM6Ly9nZXQud2ViZ2wub3JnIGZvciBtb3JlIGluZm8iLGEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixhLnN0eWxlLnRvcD0iNTAlIixhLnN0eWxlLmxlZnQ9IjUwJSIsYS5zdHlsZS5oZWlnaHQ9IjMwJSIsYS5zdHlsZS53aWR0aD0iNTAlIixhLnN0eWxlLm1hcmdpbj0iLTE1JSAwIDAgLTI1JSIsci5hcHBlbmRDaGlsZChhKSx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0LmNvbnRhaW5lci5zdHlsZS5iYWNrZ3JvdW5kPSIjRkZGRkZGIix0LmNvbnRhaW5lci5vbmNsaWNrPWZ1bmN0aW9uKCl7d2luZG93Lm9wZW4oImh0dHBzOi8vZ2V0LndlYmdsLm9yZyIpfSwhMX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NjQzfV0sODAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtyLmFnZ051bXM9ZnVuY3Rpb24odCxlLGEsbyl7dmFyIHMsbDtpZigoIW98fG8+YS5sZW5ndGgpJiYobz1hLmxlbmd0aCksbihlKXx8KGU9ITEpLGkoYVswXSkpe2ZvcihsPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylsW3NdPXIuYWdnTnVtcyh0LGUsYVtzXSk7YT1sfWZvcihzPTA7czxvO3MrKyluKGUpP24oYVtzXSkmJihlPXQoK2UsK2Fbc10pKTplPWFbc107cmV0dXJuIGV9LHIubGVuPWZ1bmN0aW9uKHQpe3JldHVybiByLmFnZ051bXMoKGZ1bmN0aW9uKHQpe3JldHVybiB0KzF9KSwwLHQpfSxyLm1lYW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLHIuYWdnTnVtcygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSksMCx0KS9lfSxyLm1pZFJhbmdlPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQmJjAhPT10Lmxlbmd0aClyZXR1cm4oci5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdCkrci5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCkpLzJ9LHIudmFyaWFuY2U9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBlfHwoZT1yLmxlbih0KSksbihpKXx8KGk9ci5tZWFuKHQsZSkpLHIuYWdnTnVtcygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnBvdyhlLWksMil9KSwwLHQpL2V9LHIuc3RkZXY9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLnNxcnQoci52YXJpYW5jZSh0LGUsbikpfSxyLm1lZGlhbj1mdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCkuc29ydCgpO3JldHVybiByLmludGVycChlLC41KX0sci5pbnRlcnA9ZnVuY3Rpb24odCxlKXtpZighbihlKSl0aHJvdyJuIHNob3VsZCBiZSBhIGZpbml0ZSBudW1iZXIiO2lmKChlPWUqdC5sZW5ndGgtLjUpPDApcmV0dXJuIHRbMF07aWYoZT50Lmxlbmd0aC0xKXJldHVybiB0W3QubGVuZ3RoLTFdO3ZhciByPWUlMTtyZXR1cm4gcip0W01hdGguY2VpbChlKV0rKDEtcikqdFtNYXRoLmZsb29yKGUpXX19LHsiLi9hcnJheSI6NzYwLCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sODAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5vcm1hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpOlswLDAsMCwxXX19LHsiY29sb3Itbm9ybWFsaXplIjoxMjV9XSw4MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2xpYiIpLGE9aS5zdHJUcmFuc2xhdGUsbz10KCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORztmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2VdfXZhciBjPS8oW14kXSopKFskXStbXiRdKlskXSspKFteJF0qKS87ci5jb252ZXJ0VG9Uc3BhbnM9ZnVuY3Rpb24odCxlLEEpe3ZhciBTPXQudGV4dCgpLEM9IXQuYXR0cigiZGF0YS1ub3RleCIpJiYidW5kZWZpbmVkIiE9dHlwZW9mIE1hdGhKYXgmJlMubWF0Y2goYyksTD1uLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtpZighTC5lbXB0eSgpKXt2YXIgST10LmF0dHIoImNsYXNzIik/dC5hdHRyKCJjbGFzcyIpLnNwbGl0KCIgIilbMF06InRleHQiO3JldHVybiBJKz0iLW1hdGgiLEwuc2VsZWN0QWxsKCJzdmcuIitJKS5yZW1vdmUoKSxMLnNlbGVjdEFsbCgiZy4iK0krIi1ncm91cCIpLnJlbW92ZSgpLHQuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpTLCJkYXRhLW1hdGgiOiJOIn0pLEM/KGUmJmUuX3Byb21pc2VzfHxbXSkucHVzaChuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dC5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKTt2YXIgcj1wYXJzZUludCh0Lm5vZGUoKS5zdHlsZS5mb250U2l6ZSwxMCksbz17Zm9udFNpemU6cn07IWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHMsbDtNYXRoSmF4Lkh1Yi5RdWV1ZSgoZnVuY3Rpb24oKXtyZXR1cm4gbz1pLmV4dGVuZERlZXBBbGwoe30sTWF0aEpheC5IdWIuY29uZmlnKSxzPU1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXksdm9pZCAwIT09TWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheSYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9MCksTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6Im5vbmUiLHRleDJqYXg6e2lubGluZU1hdGg6W1siJCIsIiQiXSxbIlxcKCIsIlxcKSJdXX0sZGlzcGxheUFsaWduOiJsZWZ0In0pfSksKGZ1bmN0aW9uKCl7aWYoIlNWRyIhPT0oYT1NYXRoSmF4Lkh1Yi5jb25maWcubWVudVNldHRpbmdzLnJlbmRlcmVyKSlyZXR1cm4gTWF0aEpheC5IdWIuc2V0UmVuZGVyZXIoIlNWRyIpfSksKGZ1bmN0aW9uKCl7dmFyIHI9Im1hdGgtb3V0cHV0LSIraS5yYW5kc3RyKHt9LDY0KTtyZXR1cm4gbD1uLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cih7aWQ6cn0pLnN0eWxlKHt2aXNpYmlsaXR5OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSJ9KS5zdHlsZSh7ImZvbnQtc2l6ZSI6ZS5mb250U2l6ZSsicHgifSkudGV4dCh0LnJlcGxhY2UodSwiXFxsdCAiKS5yZXBsYWNlKGYsIlxcZ3QgIikpLE1hdGhKYXguSHViLlR5cGVzZXQobC5ub2RlKCkpfSksKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QoImJvZHkiKS5zZWxlY3QoIiNNYXRoSmF4X1NWR19nbHlwaHMiKTtpZihsLnNlbGVjdCgiLk1hdGhKYXhfU1ZHIikuZW1wdHkoKXx8IWwuc2VsZWN0KCJzdmciKS5ub2RlKCkpaS5sb2coIlRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgdGV4IHN5bnRheC4iLHQpLHIoKTtlbHNle3ZhciBvPWwuc2VsZWN0KCJzdmciKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cihsLnNlbGVjdCgiLk1hdGhKYXhfU1ZHIiksZSxvKX1pZihsLnJlbW92ZSgpLCJTVkciIT09YSlyZXR1cm4gTWF0aEpheC5IdWIuc2V0UmVuZGVyZXIoYSl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09cyYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9cyksTWF0aEpheC5IdWIuQ29uZmlnKG8pfSkpfShDWzJdLG8sKGZ1bmN0aW9uKG4saSxvKXtMLnNlbGVjdEFsbCgic3ZnLiIrSSkucmVtb3ZlKCksTC5zZWxlY3RBbGwoImcuIitJKyItZ3JvdXAiKS5yZW1vdmUoKTt2YXIgcz1uJiZuLnNlbGVjdCgic3ZnIik7aWYoIXN8fCFzLm5vZGUoKSlyZXR1cm4gUCgpLHZvaWQgZSgpO3ZhciBjPUwuYXBwZW5kKCJnIikuY2xhc3NlZChJKyItZ3JvdXAiLCEwKS5hdHRyKHsicG9pbnRlci1ldmVudHMiOiJub25lIiwiZGF0YS11bmZvcm1hdHRlZCI6UywiZGF0YS1tYXRoIjoiWSJ9KTtjLm5vZGUoKS5hcHBlbmRDaGlsZChzLm5vZGUoKSksaSYmaS5ub2RlKCkmJnMubm9kZSgpLmluc2VydEJlZm9yZShpLm5vZGUoKS5jbG9uZU5vZGUoITApLHMubm9kZSgpLmZpcnN0Q2hpbGQpLHMuYXR0cih7Y2xhc3M6SSxoZWlnaHQ6by5oZWlnaHQscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4gbWVldCJ9KS5zdHlsZSh7b3ZlcmZsb3c6InZpc2libGUiLCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSk7dmFyIHU9dC5ub2RlKCkuc3R5bGUuZmlsbHx8ImJsYWNrIixmPXMuc2VsZWN0KCJnIik7Zi5hdHRyKHtmaWxsOnUsc3Ryb2tlOnV9KTt2YXIgaD1sKGYsIndpZHRoIikscD1sKGYsImhlaWdodCIpLGQ9K3QuYXR0cigieCIpLWgqe3N0YXJ0OjAsbWlkZGxlOi41LGVuZDoxfVt0LmF0dHIoInRleHQtYW5jaG9yIil8fCJzdGFydCJdLGc9LShyfHxsKHQsImhlaWdodCIpKS80OyJ5Ij09PUlbMF0/KGMuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitbLTkwLCt0LmF0dHIoIngiKSwrdC5hdHRyKCJ5IildKyIpIithKC1oLzIsZy1wLzIpfSkscy5hdHRyKHt4Oit0LmF0dHIoIngiKSx5Oit0LmF0dHIoInkiKX0pKToibCI9PT1JWzBdP3MuYXR0cih7eDp0LmF0dHIoIngiKSx5OmctcC8yfSk6ImEiPT09SVswXSYmMCE9PUkuaW5kZXhPZigiYXRpdGxlIik/cy5hdHRyKHt4OjAseTpnfSk6cy5hdHRyKHt4OmQseTordC5hdHRyKCJ5IikrZy1wLzJ9KSxBJiZBLmNhbGwodCxjKSxlKGMpfSkpfSkpKTpQKCksdH1mdW5jdGlvbiBQKCl7TC5lbXB0eSgpfHwoST10LmF0dHIoImNsYXNzIikrIi1tYXRoIixMLnNlbGVjdCgic3ZnLiIrSSkucmVtb3ZlKCkpLHQudGV4dCgiIikuc3R5bGUoIndoaXRlLXNwYWNlIiwicHJlIiksZnVuY3Rpb24odCxlKXtlPWUucmVwbGFjZShtLCIgIik7dmFyIHIsYT0hMSxsPVtdLGM9LTE7ZnVuY3Rpb24gdSgpe2MrKzt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoby5zdmcsInRzcGFuIik7bi5zZWxlY3QoZSkuYXR0cih7Y2xhc3M6ImxpbmUiLGR5OmMqcysiZW0ifSksdC5hcHBlbmRDaGlsZChlKSxyPWU7dmFyIGk9bDtpZihsPVt7bm9kZTplfV0saS5sZW5ndGg+MSlmb3IodmFyIGE9MTthPGkubGVuZ3RoO2ErKylmKGlbYV0pfWZ1bmN0aW9uIGYodCl7dmFyIGUsaT10LnR5cGUsYT17fTtpZigiYSI9PT1pKXtlPSJhIjt2YXIgcz10LnRhcmdldCxjPXQuaHJlZix1PXQucG9wdXA7YyYmKGE9eyJ4bGluazp4bGluazpzaG93IjoiX2JsYW5rIj09PXN8fCJfIiE9PXMuY2hhckF0KDApPyJuZXciOiJyZXBsYWNlIix0YXJnZXQ6cywieGxpbms6eGxpbms6aHJlZiI6Y30sdSYmKGEub25jbGljaz0nd2luZG93Lm9wZW4odGhpcy5ocmVmLmJhc2VWYWwsdGhpcy50YXJnZXQuYmFzZVZhbCwiJyt1KyciKTtyZXR1cm4gZmFsc2U7JykpfWVsc2UgZT0idHNwYW4iO3Quc3R5bGUmJihhLnN0eWxlPXQuc3R5bGUpO3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2ZyxlKTtpZigic3VwIj09PWl8fCJzdWIiPT09aSl7QShyLCJcdTIwMGIiKSxyLmFwcGVuZENoaWxkKGYpO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2ZywidHNwYW4iKTtBKGgsIlx1MjAwYiIpLG4uc2VsZWN0KGgpLmF0dHIoImR5IixkW2ldKSxhLmR5PXBbaV0sci5hcHBlbmRDaGlsZChmKSxyLmFwcGVuZENoaWxkKGgpfWVsc2Ugci5hcHBlbmRDaGlsZChmKTtuLnNlbGVjdChmKS5hdHRyKGEpLHI9dC5ub2RlPWYsbC5wdXNoKHQpfWZ1bmN0aW9uIEEodCxlKXt0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKX1mdW5jdGlvbiBTKHQpe2lmKDEhPT1sLmxlbmd0aCl7dmFyIG49bC5wb3AoKTt0IT09bi50eXBlJiZpLmxvZygiU3RhcnQgdGFnIDwiK24udHlwZSsiPiBkb2VzbnQgbWF0Y2ggZW5kIHRhZyA8Iit0KyI+LiBQcmV0ZW5kaW5nIGl0IGRpZCBtYXRjaC4iLGUpLHI9bFtsLmxlbmd0aC0xXS5ub2RlfWVsc2UgaS5sb2coIklnbm9yaW5nIHVuZXhwZWN0ZWQgZW5kIHRhZyA8LyIrdCsiPi4iLGUpfXgudGVzdChlKT91KCk6KHI9dCxsPVt7bm9kZTp0fV0pO2Zvcih2YXIgQz1lLnNwbGl0KHYpLEw9MDtMPEMubGVuZ3RoO0wrKyl7dmFyIEk9Q1tMXSxQPUkubWF0Y2goeSksej1QJiZQWzJdLnRvTG93ZXJDYXNlKCksTz1oW3pdO2lmKCJiciI9PT16KXUoKTtlbHNlIGlmKHZvaWQgMD09PU8pQShyLEUoSSkpO2Vsc2UgaWYoUFsxXSlTKHopO2Vsc2V7dmFyIEQ9UFs0XSxSPXt0eXBlOnp9LEY9ayhELGIpO2lmKEY/KEY9Ri5yZXBsYWNlKE0sIiQxIGZpbGw6IiksTyYmKEYrPSI7IitPKSk6TyYmKEY9TyksRiYmKFIuc3R5bGU9RiksImEiPT09eil7YT0hMDt2YXIgQj1rKEQsXyk7aWYoQil7dmFyIE49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO04uaHJlZj1CLC0xIT09Zy5pbmRleE9mKE4ucHJvdG9jb2wpJiYoUi5ocmVmPWVuY29kZVVSSShkZWNvZGVVUkkoQikpLFIudGFyZ2V0PWsoRCx3KXx8Il9ibGFuayIsUi5wb3B1cD1rKEQsVCkpfX1mKFIpfX1yZXR1cm4gYX0odC5ub2RlKCksUykmJnQuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksci5wb3NpdGlvblRleHQodCksQSYmQS5jYWxsKHQpfX07dmFyIHU9Lyg8fCZsdDt8JiM2MDspL2csZj0vKD58Jmd0O3wmIzYyOykvZzt2YXIgaD17c3VwOiJmb250LXNpemU6NzAlIixzdWI6ImZvbnQtc2l6ZTo3MCUiLGI6ImZvbnQtd2VpZ2h0OmJvbGQiLGk6ImZvbnQtc3R5bGU6aXRhbGljIixhOiJjdXJzb3I6cG9pbnRlciIsc3BhbjoiIixlbToiZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZCJ9LHA9e3N1YjoiMC4zZW0iLHN1cDoiLTAuNmVtIn0sZD17c3ViOiItMC4yMWVtIixzdXA6IjAuNDJlbSJ9LGc9WyJodHRwOiIsImh0dHBzOiIsIm1haWx0bzoiLCIiLHZvaWQgMCwiOiJdLG09ci5ORVdMSU5FUz0vKFxyXG4/fFxuKS9nLHY9Lyg8W148Pl0qPikvLHk9LzwoXC8/KShbXiA+XSopKFxzKyguKikpPz4vaSx4PS88YnIoXHMrLiopPz4vaTtyLkJSX1RBR19BTEw9LzxicihccysuKik/Pi9naTt2YXIgYj0vKF58W1xzIiddKXN0eWxlXHMqPVxzKigiKFteIl0qKTs/InwnKFteJ10qKTs/JykvaSxfPS8oXnxbXHMiJ10paHJlZlxzKj1ccyooIihbXiJdKikifCcoW14nXSopJykvaSx3PS8oXnxbXHMiJ10pdGFyZ2V0XHMqPVxzKigiKFteIlxzXSopInwnKFteJ1xzXSopJykvaSxUPS8oXnxbXHMiJ10pcG9wdXBccyo9XHMqKCIoW1x3PSxdKikifCcoW1x3PSxdKiknKS9pO2Z1bmN0aW9uIGsodCxlKXtpZighdClyZXR1cm4gbnVsbDt2YXIgcj10Lm1hdGNoKGUpLG49ciYmKHJbM118fHJbNF0pO3JldHVybiBuJiZFKG4pfXZhciBNPS8oXnw7KVxzKmNvbG9yOi87ci5wbGFpblRleHQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dm9pZCAwIT09KGU9ZXx8e30pLmxlbiYmLTEhPT1lLmxlbj9lLmxlbjoxLzAsbj12b2lkIDAhPT1lLmFsbG93ZWRUYWdzP2UuYWxsb3dlZFRhZ3M6WyJiciJdLGk9Ii4uLiIubGVuZ3RoLGE9dC5zcGxpdCh2KSxvPVtdLHM9IiIsbD0wLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIHU9YVtjXSxmPXUubWF0Y2goeSksaD1mJiZmWzJdLnRvTG93ZXJDYXNlKCk7aWYoaCktMSE9PW4uaW5kZXhPZihoKSYmKG8ucHVzaCh1KSxzPWgpO2Vsc2V7dmFyIHA9dS5sZW5ndGg7aWYobCtwPHIpby5wdXNoKHUpLGwrPXA7ZWxzZSBpZihsPHIpe3ZhciBkPXItbDtzJiYoImJyIiE9PXN8fGQ8PWl8fHA8PWkpJiZvLnBvcCgpLHI+aT9vLnB1c2godS5zdWJzdHIoMCxkLWkpKyIuLi4iKTpvLnB1c2godS5zdWJzdHIoMCxkKSk7YnJlYWt9cz0iIn19cmV0dXJuIG8uam9pbigiIil9O3ZhciBBPXttdToiXHUwM2JjIixhbXA6IiYiLGx0OiI8IixndDoiPiIsbmJzcDoiXHhhMCIsdGltZXM6Ilx4ZDciLHBsdXNtbjoiXHhiMSIsZGVnOiJceGIwIn0sUz0vJigjXGQrfCN4W1xkYS1mQS1GXSt8W2Etel0rKTsvZztmdW5jdGlvbiBFKHQpe3JldHVybiB0LnJlcGxhY2UoUywoZnVuY3Rpb24odCxlKXtyZXR1cm4oIiMiPT09ZS5jaGFyQXQoMCk/ZnVuY3Rpb24odCl7aWYodD4xMTE0MTExKXJldHVybjt2YXIgZT1TdHJpbmcuZnJvbUNvZGVQb2ludDtpZihlKXJldHVybiBlKHQpO3ZhciByPVN0cmluZy5mcm9tQ2hhckNvZGU7cmV0dXJuIHQ8PTY1NTM1P3IodCk6cig1NTIzMisodD4+MTApLHQlMTAyNCs1NjMyMCl9KCJ4Ij09PWUuY2hhckF0KDEpP3BhcnNlSW50KGUuc3Vic3RyKDIpLDE2KTpwYXJzZUludChlLnN1YnN0cigxKSwxMCkpOkFbZV0pfHx0fSkpfWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuLGEsbyxzPXIuaG9yaXpvbnRhbEFsaWduLGw9ci52ZXJ0aWNhbEFsaWdufHwidG9wIixjPXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9ZS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGE9ImJvdHRvbSI9PT1sP2Z1bmN0aW9uKCl7cmV0dXJuIGMuYm90dG9tLW4uaGVpZ2h0fToibWlkZGxlIj09PWw/ZnVuY3Rpb24oKXtyZXR1cm4gYy50b3ArKGMuaGVpZ2h0LW4uaGVpZ2h0KS8yfTpmdW5jdGlvbigpe3JldHVybiBjLnRvcH0sbz0icmlnaHQiPT09cz9mdW5jdGlvbigpe3JldHVybiBjLnJpZ2h0LW4ud2lkdGh9OiJjZW50ZXIiPT09cz9mdW5jdGlvbigpe3JldHVybiBjLmxlZnQrKGMud2lkdGgtbi53aWR0aCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gYy5sZWZ0fSxmdW5jdGlvbigpe249dGhpcy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIHQ9bygpLXUubGVmdCxlPWEoKS11LnRvcCxzPXIuZ2R8fHt9O2lmKHIuZ2Qpe3MuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHMpO3ZhciBsPWkuYXBwbHkzRFRyYW5zZm9ybShzLl9mdWxsTGF5b3V0Ll9pbnZUcmFuc2Zvcm0pKHQsZSk7dD1sWzBdLGU9bFsxXX1yZXR1cm4gdGhpcy5zdHlsZSh7dG9wOmUrInB4IixsZWZ0OnQrInB4Iiwiei1pbmRleCI6MWUzfSksdGhpc319ci5jb252ZXJ0RW50aXRpZXM9RSxyLnNhbml0aXplSFRNTD1mdW5jdGlvbih0KXt0PXQucmVwbGFjZShtLCIgIik7Zm9yKHZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKSxyPWUsaT1bXSxhPXQuc3BsaXQodiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9cy5tYXRjaCh5KSxjPWwmJmxbMl0udG9Mb3dlckNhc2UoKTtpZihjIGluIGgpaWYobFsxXSlpLmxlbmd0aCYmKHI9aS5wb3AoKSk7ZWxzZXt2YXIgdT1sWzRdLGY9ayh1LGIpLHA9Zj97c3R5bGU6Zn06e307aWYoImEiPT09Yyl7dmFyIGQ9ayh1LF8pO2lmKGQpe3ZhciB4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZih4LmhyZWY9ZCwtMSE9PWcuaW5kZXhPZih4LnByb3RvY29sKSl7cC5ocmVmPWVuY29kZVVSSShkZWNvZGVVUkkoZCkpO3ZhciBUPWsodSx3KTtUJiYocC50YXJnZXQ9VCl9fX12YXIgTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGMpO3IuYXBwZW5kQ2hpbGQoTSksbi5zZWxlY3QoTSkuYXR0cihwKSxyPU0saS5wdXNoKE0pfWVsc2Ugci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShFKHMpKSl9cmV0dXJuIGUuaW5uZXJIVE1MfSxyLmxpbmVDb3VudD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5zaXplKCl8fDF9LHIucG9zaXRpb25UZXh0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2Z1bmN0aW9uIGkoZSxyKXtyZXR1cm4gdm9pZCAwPT09cj9udWxsPT09KHI9dC5hdHRyKGUpKSYmKHQuYXR0cihlLDApLHI9MCk6dC5hdHRyKGUscikscn12YXIgYT1pKCJ4IixlKSxvPWkoInkiLHIpOyJ0ZXh0Ij09PXRoaXMubm9kZU5hbWUmJnQuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuYXR0cih7eDphLHk6b30pfSkpfSxyLm1ha2VFZGl0YWJsZT1mdW5jdGlvbih0LGUpe3ZhciByPWUuZ2QsaT1lLmRlbGVnYXRlLGE9bi5kaXNwYXRjaCgiZWRpdCIsImlucHV0IiwiY2FuY2VsIiksbz1pfHx0O2lmKHQuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6aT8ibm9uZSI6ImFsbCJ9KSwxIT09dC5zaXplKCkpdGhyb3cgbmV3IEVycm9yKCJib28iKTtmdW5jdGlvbiBzKCl7IWZ1bmN0aW9uKCl7dmFyIGk9bi5zZWxlY3Qocikuc2VsZWN0KCIuc3ZnLWNvbnRhaW5lciIpLG89aS5hcHBlbmQoImRpdiIpLHM9dC5ub2RlKCkuc3R5bGUsYz1wYXJzZUZsb2F0KHMuZm9udFNpemV8fDEyKSx1PWUudGV4dDt2b2lkIDA9PT11JiYodT10LmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiKSk7by5jbGFzc2VkKCJwbHVnaW4tZWRpdGFibGUgZWRpdGFibGUiLCEwKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIiwiZm9udC1mYW1pbHkiOnMuZm9udEZhbWlseXx8IkFyaWFsIiwiZm9udC1zaXplIjpjLGNvbG9yOmUuZmlsbHx8cy5maWxsfHwiYmxhY2siLG9wYWNpdHk6MSwiYmFja2dyb3VuZC1jb2xvciI6ZS5iYWNrZ3JvdW5kfHwidHJhbnNwYXJlbnQiLG91dGxpbmU6IiNmZmZmZmYzMyAxcHggc29saWQiLG1hcmdpbjpbLWMvOCsxLDAsMCwtMV0uam9pbigicHggIikrInB4IixwYWRkaW5nOiIwIiwiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSkuYXR0cih7Y29udGVudGVkaXRhYmxlOiEwfSkudGV4dCh1KS5jYWxsKEModCxpLGUpKS5vbigiYmx1ciIsKGZ1bmN0aW9uKCl7ci5fZWRpdGluZz0hMSx0LnRleHQodGhpcy50ZXh0Q29udGVudCkuc3R5bGUoe29wYWNpdHk6MX0pO3ZhciBlLGk9bi5zZWxlY3QodGhpcykuYXR0cigiY2xhc3MiKTsoZT1pPyIuIitpLnNwbGl0KCIgIilbMF0rIi1tYXRoLWdyb3VwIjoiW2NsYXNzKj0tbWF0aC1ncm91cF0iKSYmbi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0KGUpLnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgbz10aGlzLnRleHRDb250ZW50O24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5yZW1vdmUoKSxuLnNlbGVjdChkb2N1bWVudCkub24oIm1vdXNldXAiLG51bGwpLGEuZWRpdC5jYWxsKHQsbyl9KSkub24oImZvY3VzIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzO3IuX2VkaXRpbmc9ITAsbi5zZWxlY3QoZG9jdW1lbnQpLm9uKCJtb3VzZXVwIiwoZnVuY3Rpb24oKXtpZihuLmV2ZW50LnRhcmdldD09PXQpcmV0dXJuITE7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PW8ubm9kZSgpJiZvLm5vZGUoKS5ibHVyKCl9KSl9KSkub24oImtleXVwIiwoZnVuY3Rpb24oKXsyNz09PW4uZXZlbnQud2hpY2g/KHIuX2VkaXRpbmc9ITEsdC5zdHlsZSh7b3BhY2l0eToxfSksbi5zZWxlY3QodGhpcykuc3R5bGUoe29wYWNpdHk6MH0pLm9uKCJibHVyIiwoZnVuY3Rpb24oKXtyZXR1cm4hMX0pKS50cmFuc2l0aW9uKCkucmVtb3ZlKCksYS5jYW5jZWwuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpKTooYS5pbnB1dC5jYWxsKHQsdGhpcy50ZXh0Q29udGVudCksbi5zZWxlY3QodGhpcykuY2FsbChDKHQsaSxlKSkpfSkpLm9uKCJrZXlkb3duIiwoZnVuY3Rpb24oKXsxMz09PW4uZXZlbnQud2hpY2gmJnRoaXMuYmx1cigpfSkpLmNhbGwobCl9KCksdC5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIGkscz1vLmF0dHIoImNsYXNzIik7KGk9cz8iLiIrcy5zcGxpdCgiICIpWzBdKyItbWF0aC1ncm91cCI6IltjbGFzcyo9LW1hdGgtZ3JvdXBdIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChpKS5zdHlsZSh7b3BhY2l0eTowfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT10Lm5vZGUoKSxyPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7ci5zZWxlY3ROb2RlQ29udGVudHMoZSk7dmFyIG49d2luZG93LmdldFNlbGVjdGlvbigpO24ucmVtb3ZlQWxsUmFuZ2VzKCksbi5hZGRSYW5nZShyKSxlLmZvY3VzKCl9cmV0dXJuIGUuaW1tZWRpYXRlP3MoKTpvLm9uKCJjbGljayIscyksbi5yZWJpbmQodCxhLCJvbiIpfX0seyIuLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDUsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTQsIi4uL2xpYiI6Nzc4LGQzOjE2OX1dLDgwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtmdW5jdGlvbiBpKHQpe3QmJm51bGwhPT10LnRpbWVyJiYoY2xlYXJUaW1lb3V0KHQudGltZXIpLHQudGltZXI9bnVsbCl9ci50aHJvdHRsZT1mdW5jdGlvbih0LGUscil7dmFyIGE9blt0XSxvPURhdGUubm93KCk7aWYoIWEpe2Zvcih2YXIgcyBpbiBuKW5bc10udHM8by02ZTQmJmRlbGV0ZSBuW3NdO2E9blt0XT17dHM6MCx0aW1lcjpudWxsfX1mdW5jdGlvbiBsKCl7cigpLGEudHM9RGF0ZS5ub3coKSxhLm9uRG9uZSYmKGEub25Eb25lKCksYS5vbkRvbmU9bnVsbCl9aShhKSxvPmEudHMrZT9sKCk6YS50aW1lcj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2woKSxhLnRpbWVyPW51bGx9KSxlKX0sci5kb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07cmV0dXJuIGUmJmUudGltZXI/bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3ZhciByPWUub25Eb25lO2Uub25Eb25lPWZ1bmN0aW9uKCl7ciYmcigpLHQoKSxlLm9uRG9uZT1udWxsfX0pKTpQcm9taXNlLnJlc29sdmUoKX0sci5jbGVhcj1mdW5jdGlvbih0KXtpZih0KWkoblt0XSksZGVsZXRlIG5bdF07ZWxzZSBmb3IodmFyIGUgaW4gbilyLmNsZWFyKGUpfX0se31dLDgwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQ+MClyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjEwO3ZhciByPU1hdGgubG9nKE1hdGgubWluKGVbMF0sZVsxXSkpL01hdGguTE4xMDtyZXR1cm4gbihyKXx8KHI9TWF0aC5sb2coTWF0aC5tYXgoZVswXSxlWzFdKSkvTWF0aC5MTjEwLTYpLHJ9fSx7ImZhc3QtaXNudW1lcmljIjoyNDF9XSw4MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPXt9LGk9dCgiLi4vcGxvdHMvZ2VvL2NvbnN0YW50cyIpLmxvY2F0aW9ubW9kZVRvTGF5ZXIsYT10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO24uZ2V0VG9wb2pzb25OYW1lPWZ1bmN0aW9uKHQpe3JldHVyblt0LnNjb3BlLnJlcGxhY2UoLyAvZywiLSIpLCJfIix0LnJlc29sdXRpb24udG9TdHJpbmcoKSwibSJdLmpvaW4oIiIpfSxuLmdldFRvcG9qc29uUGF0aD1mdW5jdGlvbih0LGUpe3JldHVybiB0K2UrIi5qc29uIn0sbi5nZXRUb3BvanNvbkZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aVt0LmxvY2F0aW9ubW9kZV0sbj1lLm9iamVjdHNbcl07cmV0dXJuIGEoZSxuKS5mZWF0dXJlc319LHsiLi4vcGxvdHMvZ2VvL2NvbnN0YW50cyI6ODU4LCJ0b3BvanNvbi1jbGllbnQiOjU3OX1dLDgwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImxvY2FsZSIsbmFtZToiZW4tVVMiLGRpY3Rpb25hcnk6eyJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlIjoiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSJ9LGZvcm1hdDp7ZGF0ZToiJW0vJWQvJVkifX19LHt9XSw4MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJsb2NhbGUiLG5hbWU6ImVuIixkaWN0aW9uYXJ5OnsiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSI6IkNsaWNrIHRvIGVudGVyIENvbG91cnNjYWxlIHRpdGxlIn0sZm9ybWF0OntkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0scGVyaW9kczpbIkFNIiwiUE0iXSxkYXRlVGltZToiJWEgJWIgJWUgJVggJVkiLGRhdGU6IiVkLyVtLyVZIix0aW1lOiIlSDolTTolUyIsZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0seWVhcjoiJVkiLG1vbnRoOiIlYiAlWSIsZGF5TW9udGg6IiViICUtZCIsZGF5TW9udGhZZWFyOiIlYiAlLWQsICVZIn19fSx7fV0sODA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLGk9bi5sYXlvdXRBcnJheUNvbnRhaW5lcnMsYT1uLmxheW91dEFycmF5UmVnZXhlcyxvPXQuc3BsaXQoIlsiKVswXSxzPTA7czxhLmxlbmd0aDtzKyspaWYoKHI9dC5tYXRjaChhW3NdKSkmJjA9PT1yLmluZGV4KXtlPXJbMF07YnJlYWt9aWYoZXx8KGU9aVtpLmluZGV4T2YobyldKSwhZSlyZXR1cm4hMTt2YXIgbD10LnN1YnN0cihlLmxlbmd0aCk7cmV0dXJuIGw/ISEocj1sLm1hdGNoKC9eXFsoMHxbMS05XVswLTldKilcXShcLiguKykpPyQvKSkmJnthcnJheTplLGluZGV4Ok51bWJlcihyWzFdKSxwcm9wZXJ0eTpyWzNdfHwiIn06e2FycmF5OmUsaW5kZXg6IiIscHJvcGVydHk6IiJ9fX0seyIuLi9yZWdpc3RyeSI6OTExfV0sODEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9bi5leHRlbmRGbGF0LGE9bi5pc1BsYWluT2JqZWN0LG89e3ZhbFR5cGU6ImZsYWdsaXN0IixleHRyYXM6WyJub25lIl0sZmxhZ3M6WyJjYWxjIiwiY2xlYXJBeGlzVHlwZXMiLCJwbG90Iiwic3R5bGUiLCJtYXJrZXJTaXplIiwiY29sb3JiYXJzIl19LHM9e3ZhbFR5cGU6ImZsYWdsaXN0IixleHRyYXM6WyJub25lIl0sZmxhZ3M6WyJjYWxjIiwicGxvdCIsImxlZ2VuZCIsInRpY2tzIiwiYXhyYW5nZSIsImxheW91dHN0eWxlIiwibW9kZWJhciIsImNhbWVyYSIsImFycmF5ZHJhdyIsImNvbG9yYmFycyJdfSxsPW8uZmxhZ3Muc2xpY2UoKS5jb25jYXQoWyJmdWxsUmVwbG90Il0pLGM9cy5mbGFncy5zbGljZSgpLmNvbmNhdCgibGF5b3V0UmVwbG90Iik7ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXV09ITE7cmV0dXJuIGV9ZnVuY3Rpb24gZih0LGUscil7dmFyIG49aSh7fSx0KTtmb3IodmFyIG8gaW4gbil7dmFyIHM9bltvXTthKHMpJiYobltvXT1oKHMsZSxyLG8pKX1yZXR1cm4iZnJvbS1yb290Ij09PXImJihuLmVkaXRUeXBlPWUpLG59ZnVuY3Rpb24gaCh0LGUscixuKXtpZih0LnZhbFR5cGUpe3ZhciBhPWkoe30sdCk7aWYoYS5lZGl0VHlwZT1lLEFycmF5LmlzQXJyYXkodC5pdGVtcykpe2EuaXRlbXM9bmV3IEFycmF5KHQuaXRlbXMubGVuZ3RoKTtmb3IodmFyIG89MDtvPHQuaXRlbXMubGVuZ3RoO28rKylhLml0ZW1zW29dPWgodC5pdGVtc1tvXSxlLCJmcm9tLXJvb3QiKX1yZXR1cm4gYX1yZXR1cm4gZih0LGUsIl8iPT09bi5jaGFyQXQoMCk/Im5lc3RlZCI6ImZyb20tcm9vdCIpfWUuZXhwb3J0cz17dHJhY2VzOm8sbGF5b3V0OnMsdHJhY2VGbGFnczpmdW5jdGlvbigpe3JldHVybiB1KGwpfSxsYXlvdXRGbGFnczpmdW5jdGlvbigpe3JldHVybiB1KGMpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmVkaXRUeXBlO2lmKHImJiJub25lIiE9PXIpZm9yKHZhciBuPXIuc3BsaXQoIisiKSxpPTA7aTxuLmxlbmd0aDtpKyspdFtuW2ldXT0hMH0sb3ZlcnJpZGVBbGw6Zn19LHsiLi4vbGliIjo3Nzh9XSw4MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoImdsLW1hdDQvZnJvbVF1YXQiKSxhPXQoIi4uL3JlZ2lzdHJ5Iiksbz10KCIuLi9saWIiKSxzPXQoIi4uL3Bsb3RzL3Bsb3RzIiksbD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxjPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSx1PWwuY2xlYW5JZCxmPWwuZ2V0RnJvbVRyYWNlLGg9YS50cmFjZUlzO2Z1bmN0aW9uIHAodCxlKXt2YXIgcj10W2VdLG49ZS5jaGFyQXQoMCk7ciYmInBhcGVyIiE9PXImJih0W2VdPXUocixuLCEwKSl9ZnVuY3Rpb24gZCh0KXtmdW5jdGlvbiBlKGUscil7dmFyIG49dFtlXSxpPXQudGl0bGUmJnQudGl0bGVbcl07biYmIWkmJih0LnRpdGxlfHwodC50aXRsZT17fSksdC50aXRsZVtyXT10W2VdLGRlbGV0ZSB0W2VdKX10JiYoInN0cmluZyIhPXR5cGVvZiB0LnRpdGxlJiYibnVtYmVyIiE9dHlwZW9mIHQudGl0bGV8fCh0LnRpdGxlPXt0ZXh0OnQudGl0bGV9KSxlKCJ0aXRsZWZvbnQiLCJmb250IiksZSgidGl0bGVwb3NpdGlvbiIsInBvc2l0aW9uIiksZSgidGl0bGVzaWRlIiwic2lkZSIpLGUoInRpdGxlb2Zmc2V0Iiwib2Zmc2V0IikpfWZ1bmN0aW9uIGcodCl7aWYoIW8uaXNQbGFpbk9iamVjdCh0KSlyZXR1cm4hMTt2YXIgZT10Lm5hbWU7cmV0dXJuIGRlbGV0ZSB0Lm5hbWUsZGVsZXRlIHQuc2hvd2xlZ2VuZCwoInN0cmluZyI9PXR5cGVvZiBlfHwibnVtYmVyIj09dHlwZW9mIGUpJiZTdHJpbmcoZSl9ZnVuY3Rpb24gbSh0LGUscixuKXtpZihyJiYhbilyZXR1cm4gdDtpZihuJiYhcilyZXR1cm4gZTtpZighdC50cmltKCkpcmV0dXJuIGU7aWYoIWUudHJpbSgpKXJldHVybiB0O3ZhciBpLGE9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihpPTA7aTxhJiZ0LmNoYXJBdChpKT09PWUuY2hhckF0KGkpO2krKyk7cmV0dXJuIHQuc3Vic3RyKDAsaSkudHJpbSgpfWZ1bmN0aW9uIHYodCl7dmFyIGU9Im1pZGRsZSIscj0iY2VudGVyIjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJigtMSE9PXQuaW5kZXhPZigidG9wIik/ZT0idG9wIjotMSE9PXQuaW5kZXhPZigiYm90dG9tIikmJihlPSJib3R0b20iKSwtMSE9PXQuaW5kZXhPZigibGVmdCIpP3I9ImxlZnQiOi0xIT09dC5pbmRleE9mKCJyaWdodCIpJiYocj0icmlnaHQiKSksZSsiICIrcn1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIGUgaW4gdCYmIm9iamVjdCI9PXR5cGVvZiB0W2VdJiYwPT09T2JqZWN0LmtleXModFtlXSkubGVuZ3RofXIuY2xlYXJQcm9taXNlUXVldWU9ZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0Ll9wcm9taXNlcykmJnQuX3Byb21pc2VzLmxlbmd0aD4wJiZvLmxvZygiQ2xlYXJpbmcgcHJldmlvdXMgcmVqZWN0ZWQgcHJvbWlzZXMgZnJvbSBxdWV1ZS4iKSx0Ll9wcm9taXNlcz1bXX0sci5jbGVhbkxheW91dD1mdW5jdGlvbih0KXt2YXIgZSxuO3R8fCh0PXt9KSx0LnhheGlzMSYmKHQueGF4aXN8fCh0LnhheGlzPXQueGF4aXMxKSxkZWxldGUgdC54YXhpczEpLHQueWF4aXMxJiYodC55YXhpc3x8KHQueWF4aXM9dC55YXhpczEpLGRlbGV0ZSB0LnlheGlzMSksdC5zY2VuZTEmJih0LnNjZW5lfHwodC5zY2VuZT10LnNjZW5lMSksZGVsZXRlIHQuc2NlbmUxKTt2YXIgYT0ocy5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbnx8e30pLmF0dHJSZWdleCxsPShzLnN1YnBsb3RzUmVnaXN0cnkucG9sYXJ8fHt9KS5hdHRyUmVnZXgsZj0ocy5zdWJwbG90c1JlZ2lzdHJ5LnRlcm5hcnl8fHt9KS5hdHRyUmVnZXgsaD0ocy5zdWJwbG90c1JlZ2lzdHJ5LmdsM2R8fHt9KS5hdHRyUmVnZXgsZz1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8Zy5sZW5ndGg7ZSsrKXt2YXIgbT1nW2VdO2lmKGEmJmEudGVzdChtKSl7dmFyIHY9dFttXTt2LmFuY2hvciYmImZyZWUiIT09di5hbmNob3ImJih2LmFuY2hvcj11KHYuYW5jaG9yKSksdi5vdmVybGF5aW5nJiYodi5vdmVybGF5aW5nPXUodi5vdmVybGF5aW5nKSksdi50eXBlfHwodi5pc2RhdGU/di50eXBlPSJkYXRlIjp2LmlzbG9nP3YudHlwZT0ibG9nIjohMT09PXYuaXNkYXRlJiYhMT09PXYuaXNsb2cmJih2LnR5cGU9ImxpbmVhciIpKSwid2l0aHplcm8iIT09di5hdXRvcmFuZ2UmJiJ0b3plcm8iIT09di5hdXRvcmFuZ2V8fCh2LmF1dG9yYW5nZT0hMCx2LnJhbmdlbW9kZT0idG96ZXJvIiksZGVsZXRlIHYuaXNsb2csZGVsZXRlIHYuaXNkYXRlLGRlbGV0ZSB2LmNhdGVnb3JpZXMseSh2LCJkb21haW4iKSYmZGVsZXRlIHYuZG9tYWluLHZvaWQgMCE9PXYuYXV0b3RpY2smJih2b2lkIDA9PT12LnRpY2ttb2RlJiYodi50aWNrbW9kZT12LmF1dG90aWNrPyJhdXRvIjoibGluZWFyIiksZGVsZXRlIHYuYXV0b3RpY2spLGQodil9ZWxzZSBpZihsJiZsLnRlc3QobSkpe2QodFttXS5yYWRpYWxheGlzKX1lbHNlIGlmKGYmJmYudGVzdChtKSl7dmFyIHg9dFttXTtkKHguYWF4aXMpLGQoeC5iYXhpcyksZCh4LmNheGlzKX1lbHNlIGlmKGgmJmgudGVzdChtKSl7dmFyIGI9dFttXSxfPWIuY2FtZXJhcG9zaXRpb247aWYoQXJyYXkuaXNBcnJheShfKSYmND09PV9bMF0ubGVuZ3RoKXt2YXIgdz1fWzBdLFQ9X1sxXSxrPV9bMl0sTT1pKFtdLHcpLEE9W107Zm9yKG49MDtuPDM7KytuKUFbbl09VFtuXStrKk1bMis0Km5dO2IuY2FtZXJhPXtleWU6e3g6QVswXSx5OkFbMV0sejpBWzJdfSxjZW50ZXI6e3g6VFswXSx5OlRbMV0sejpUWzJdfSx1cDp7eDowLHk6MCx6OjF9fSxkZWxldGUgYi5jYW1lcmFwb3NpdGlvbn1kKGIueGF4aXMpLGQoYi55YXhpcyksZChiLnpheGlzKX19dmFyIFM9QXJyYXkuaXNBcnJheSh0LmFubm90YXRpb25zKT90LmFubm90YXRpb25zLmxlbmd0aDowO2ZvcihlPTA7ZTxTO2UrKyl7dmFyIEU9dC5hbm5vdGF0aW9uc1tlXTtvLmlzUGxhaW5PYmplY3QoRSkmJihFLnJlZiYmKCJwYXBlciI9PT1FLnJlZj8oRS54cmVmPSJwYXBlciIsRS55cmVmPSJwYXBlciIpOiJkYXRhIj09PUUucmVmJiYoRS54cmVmPSJ4IixFLnlyZWY9InkiKSxkZWxldGUgRS5yZWYpLHAoRSwieHJlZiIpLHAoRSwieXJlZiIpKX12YXIgQz1BcnJheS5pc0FycmF5KHQuc2hhcGVzKT90LnNoYXBlcy5sZW5ndGg6MDtmb3IoZT0wO2U8QztlKyspe3ZhciBMPXQuc2hhcGVzW2VdO28uaXNQbGFpbk9iamVjdChMKSYmKHAoTCwieHJlZiIpLHAoTCwieXJlZiIpKX12YXIgST1BcnJheS5pc0FycmF5KHQuaW1hZ2VzKT90LmltYWdlcy5sZW5ndGg6MDtmb3IoZT0wO2U8STtlKyspe3ZhciBQPXQuaW1hZ2VzW2VdO28uaXNQbGFpbk9iamVjdChQKSYmKHAoUCwieHJlZiIpLHAoUCwieXJlZiIpKX12YXIgej10LmxlZ2VuZDtyZXR1cm4geiYmKHoueD4zPyh6Lng9MS4wMix6LnhhbmNob3I9ImxlZnQiKTp6Lng8LTImJih6Lng9LS4wMix6LnhhbmNob3I9InJpZ2h0Iiksei55PjM/KHoueT0xLjAyLHoueWFuY2hvcj0iYm90dG9tIik6ei55PC0yJiYoei55PS0uMDIsei55YW5jaG9yPSJ0b3AiKSksZCh0KSwicm90YXRlIj09PXQuZHJhZ21vZGUmJih0LmRyYWdtb2RlPSJvcmJpdCIpLGMuY2xlYW4odCksdC50ZW1wbGF0ZSYmdC50ZW1wbGF0ZS5sYXlvdXQmJnIuY2xlYW5MYXlvdXQodC50ZW1wbGF0ZS5sYXlvdXQpLHR9LHIuY2xlYW5EYXRhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbixpPXRbZV07aWYoImhpc3RvZ3JhbXkiPT09aS50eXBlJiYieGJpbnMiaW4gaSYmISgieWJpbnMiaW4gaSkmJihpLnliaW5zPWkueGJpbnMsZGVsZXRlIGkueGJpbnMpLGkuZXJyb3JfeSYmIm9wYWNpdHkiaW4gaS5lcnJvcl95KXt2YXIgbD1jLmRlZmF1bHRzLGY9aS5lcnJvcl95LmNvbG9yfHwoaChpLCJiYXIiKT9jLmRlZmF1bHRMaW5lOmxbZSVsLmxlbmd0aF0pO2kuZXJyb3JfeS5jb2xvcj1jLmFkZE9wYWNpdHkoYy5yZ2IoZiksYy5vcGFjaXR5KGYpKmkuZXJyb3JfeS5vcGFjaXR5KSxkZWxldGUgaS5lcnJvcl95Lm9wYWNpdHl9aWYoImJhcmRpciJpbiBpJiYoImgiIT09aS5iYXJkaXJ8fCFoKGksImJhciIpJiYiaGlzdG9ncmFtIiE9PWkudHlwZS5zdWJzdHIoMCw5KXx8KGkub3JpZW50YXRpb249ImgiLHIuc3dhcFhZRGF0YShpKSksZGVsZXRlIGkuYmFyZGlyKSwiaGlzdG9ncmFteSI9PT1pLnR5cGUmJnIuc3dhcFhZRGF0YShpKSwiaGlzdG9ncmFteCIhPT1pLnR5cGUmJiJoaXN0b2dyYW15IiE9PWkudHlwZXx8KGkudHlwZT0iaGlzdG9ncmFtIiksInNjbCJpbiBpJiYhKCJjb2xvcnNjYWxlImluIGkpJiYoaS5jb2xvcnNjYWxlPWkuc2NsLGRlbGV0ZSBpLnNjbCksInJldmVyc2VzY2wiaW4gaSYmISgicmV2ZXJzZXNjYWxlImluIGkpJiYoaS5yZXZlcnNlc2NhbGU9aS5yZXZlcnNlc2NsLGRlbGV0ZSBpLnJldmVyc2VzY2wpLGkueGF4aXMmJihpLnhheGlzPXUoaS54YXhpcywieCIpKSxpLnlheGlzJiYoaS55YXhpcz11KGkueWF4aXMsInkiKSksaChpLCJnbDNkIikmJmkuc2NlbmUmJihpLnNjZW5lPXMuc3VicGxvdHNSZWdpc3RyeS5nbDNkLmNsZWFuSWQoaS5zY2VuZSkpLCFoKGksInBpZS1saWtlIikmJiFoKGksImJhci1saWtlIikpaWYoQXJyYXkuaXNBcnJheShpLnRleHRwb3NpdGlvbikpZm9yKG49MDtuPGkudGV4dHBvc2l0aW9uLmxlbmd0aDtuKyspaS50ZXh0cG9zaXRpb25bbl09dihpLnRleHRwb3NpdGlvbltuXSk7ZWxzZSBpLnRleHRwb3NpdGlvbiYmKGkudGV4dHBvc2l0aW9uPXYoaS50ZXh0cG9zaXRpb24pKTt2YXIgcD1hLmdldE1vZHVsZShpKTtpZihwJiZwLmNvbG9yYmFyKXt2YXIgeD1wLmNvbG9yYmFyLmNvbnRhaW5lcixiPXg/aVt4XTppO2ImJmIuY29sb3JzY2FsZSYmKCJZSUduQnUiPT09Yi5jb2xvcnNjYWxlJiYoYi5jb2xvcnNjYWxlPSJZbEduQnUiKSwiWUlPclJkIj09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT0iWWxPclJkIikpfWlmKCJzdXJmYWNlIj09PWkudHlwZSYmby5pc1BsYWluT2JqZWN0KGkuY29udG91cnMpKXt2YXIgXz1bIngiLCJ5IiwieiJdO2ZvcihuPTA7bjxfLmxlbmd0aDtuKyspe3ZhciB3PWkuY29udG91cnNbX1tuXV07by5pc1BsYWluT2JqZWN0KHcpJiYody5oaWdobGlnaHRDb2xvciYmKHcuaGlnaGxpZ2h0Y29sb3I9dy5oaWdobGlnaHRDb2xvcixkZWxldGUgdy5oaWdobGlnaHRDb2xvciksdy5oaWdobGlnaHRXaWR0aCYmKHcuaGlnaGxpZ2h0d2lkdGg9dy5oaWdobGlnaHRXaWR0aCxkZWxldGUgdy5oaWdobGlnaHRXaWR0aCkpfX1pZigiY2FuZGxlc3RpY2siPT09aS50eXBlfHwib2hsYyI9PT1pLnR5cGUpe3ZhciBUPSExIT09KGkuaW5jcmVhc2luZ3x8e30pLnNob3dsZWdlbmQsaz0hMSE9PShpLmRlY3JlYXNpbmd8fHt9KS5zaG93bGVnZW5kLE09ZyhpLmluY3JlYXNpbmcpLEE9ZyhpLmRlY3JlYXNpbmcpO2lmKCExIT09TSYmITEhPT1BKXt2YXIgUz1tKE0sQSxULGspO1MmJihpLm5hbWU9Uyl9ZWxzZSFNJiYhQXx8aS5uYW1lfHwoaS5uYW1lPU18fEEpfWlmKEFycmF5LmlzQXJyYXkoaS50cmFuc2Zvcm1zKSl7dmFyIEU9aS50cmFuc2Zvcm1zO2ZvcihuPTA7bjxFLmxlbmd0aDtuKyspe3ZhciBDPUVbbl07aWYoby5pc1BsYWluT2JqZWN0KEMpKXN3aXRjaChDLnR5cGUpe2Nhc2UiZmlsdGVyIjpDLmZpbHRlcnNyYyYmKEMudGFyZ2V0PUMuZmlsdGVyc3JjLGRlbGV0ZSBDLmZpbHRlcnNyYyksQy5jYWxlbmRhciYmKEMudmFsdWVjYWxlbmRhcnx8KEMudmFsdWVjYWxlbmRhcj1DLmNhbGVuZGFyKSxkZWxldGUgQy5jYWxlbmRhcik7YnJlYWs7Y2FzZSJncm91cGJ5IjppZihDLnN0eWxlcz1DLnN0eWxlc3x8Qy5zdHlsZSxDLnN0eWxlcyYmIUFycmF5LmlzQXJyYXkoQy5zdHlsZXMpKXt2YXIgTD1DLnN0eWxlcyxJPU9iamVjdC5rZXlzKEwpO0Muc3R5bGVzPVtdO2Zvcih2YXIgUD0wO1A8SS5sZW5ndGg7UCsrKUMuc3R5bGVzLnB1c2goe3RhcmdldDpJW1BdLHZhbHVlOkxbSVtQXV19KX19fX15KGksImxpbmUiKSYmZGVsZXRlIGkubGluZSwibWFya2VyImluIGkmJih5KGkubWFya2VyLCJsaW5lIikmJmRlbGV0ZSBpLm1hcmtlci5saW5lLHkoaSwibWFya2VyIikmJmRlbGV0ZSBpLm1hcmtlciksYy5jbGVhbihpKSxpLmF1dG9iaW54JiYoZGVsZXRlIGkuYXV0b2JpbngsZGVsZXRlIGkueGJpbnMpLGkuYXV0b2JpbnkmJihkZWxldGUgaS5hdXRvYmlueSxkZWxldGUgaS55YmlucyksZChpKSxpLmNvbG9yYmFyJiZkKGkuY29sb3JiYXIpLGkubWFya2VyJiZpLm1hcmtlci5jb2xvcmJhciYmZChpLm1hcmtlci5jb2xvcmJhciksaS5saW5lJiZpLmxpbmUuY29sb3JiYXImJmQoaS5saW5lLmNvbG9yYmFyKSxpLmFheGlzJiZkKGkuYWF4aXMpLGkuYmF4aXMmJmQoaS5iYXhpcyl9fSxyLnN3YXBYWURhdGE9ZnVuY3Rpb24odCl7dmFyIGU7aWYoby5zd2FwQXR0cnModCxbIj8iLCI/MCIsImQ/IiwiP2JpbnMiLCJuYmlucz8iLCJhdXRvYmluPyIsIj9zcmMiLCJlcnJvcl8/Il0pLEFycmF5LmlzQXJyYXkodC56KSYmQXJyYXkuaXNBcnJheSh0LnpbMF0pJiYodC50cmFuc3Bvc2U/ZGVsZXRlIHQudHJhbnNwb3NlOnQudHJhbnNwb3NlPSEwKSx0LmVycm9yX3gmJnQuZXJyb3JfeSl7dmFyIHI9dC5lcnJvcl95LG49ImNvcHlfeXN0eWxlImluIHI/ci5jb3B5X3lzdHlsZTohKHIuY29sb3J8fHIudGhpY2tuZXNzfHxyLndpZHRoKTtvLnN3YXBBdHRycyh0LFsiZXJyb3JfPy5jb3B5X3lzdHlsZSJdKSxuJiZvLnN3YXBBdHRycyh0LFsiZXJyb3JfPy5jb2xvciIsImVycm9yXz8udGhpY2tuZXNzIiwiZXJyb3JfPy53aWR0aCJdKX1pZigic3RyaW5nIj09dHlwZW9mIHQuaG92ZXJpbmZvKXt2YXIgaT10LmhvdmVyaW5mby5zcGxpdCgiKyIpO2ZvcihlPTA7ZTxpLmxlbmd0aDtlKyspIngiPT09aVtlXT9pW2VdPSJ5IjoieSI9PT1pW2VdJiYoaVtlXT0ieCIpO3QuaG92ZXJpbmZvPWkuam9pbigiKyIpfX0sci5jb2VyY2VUcmFjZUluZGljZXM9ZnVuY3Rpb24odCxlKXtpZihuKGUpKXJldHVybltlXTtpZighQXJyYXkuaXNBcnJheShlKXx8IWUubGVuZ3RoKXJldHVybiB0LmRhdGEubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj1bXSxpPTA7aTxlLmxlbmd0aDtpKyspby5pc0luZGV4KGVbaV0sdC5kYXRhLmxlbmd0aCk/ci5wdXNoKGVbaV0pOm8ud2FybigidHJhY2UgaW5kZXggKCIsZVtpXSwiKSBpcyBub3QgYSBudW1iZXIgb3IgaXMgb3V0IG9mIGJvdW5kcyIpO3JldHVybiByfXJldHVybiBlfSxyLm1hbmFnZUFycmF5Q29udGFpbmVycz1mdW5jdGlvbih0LGUscil7dmFyIGk9dC5vYmosYT10LnBhcnRzLHM9YS5sZW5ndGgsbD1hW3MtMV0sYz1uKGwpO2lmKGMmJm51bGw9PT1lKXt2YXIgdT1hLnNsaWNlKDAscy0xKS5qb2luKCIuIik7by5uZXN0ZWRQcm9wZXJ0eShpLHUpLmdldCgpLnNwbGljZShsLDEpfWVsc2UgYyYmdm9pZCAwPT09dC5nZXQoKT8odm9pZCAwPT09dC5nZXQoKSYmKHJbdC5hc3RyXT1udWxsKSx0LnNldChlKSk6dC5zZXQoZSl9O3ZhciB4PS8oXC5bXlxbXF1cLl0rfFxbW15cW1xdXC5dK1xdKSQvO2Z1bmN0aW9uIGIodCl7dmFyIGU9dC5zZWFyY2goeCk7aWYoZT4wKXJldHVybiB0LnN1YnN0cigwLGUpfXIuaGFzUGFyZW50PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWIoZSk7cjspe2lmKHIgaW4gdClyZXR1cm4hMDtyPWIocil9cmV0dXJuITF9O3ZhciBfPVsieCIsInkiLCJ6Il07ci5jbGVhckF4aXNUeXBlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspZm9yKHZhciBpPXQuX2Z1bGxEYXRhW25dLGE9MDthPDM7YSsrKXt2YXIgcz1mKHQsaSxfW2FdKTtpZihzJiYibG9nIiE9PXMudHlwZSl7dmFyIGw9cy5fbmFtZSxjPXMuX2lkLnN1YnN0cigxKTtpZigic2NlbmUiPT09Yy5zdWJzdHIoMCw1KSl7aWYodm9pZCAwIT09cltjXSljb250aW51ZTtsPWMrIi4iK2x9dmFyIHU9bCsiLnR5cGUiO3ZvaWQgMD09PXJbbF0mJnZvaWQgMD09PXJbdV0mJm8ubmVzdGVkUHJvcGVydHkodC5sYXlvdXQsdSkuc2V0KG51bGwpfX19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vbGliIjo3NzgsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODMxLCIuLi9wbG90cy9wbG90cyI6ODkxLCIuLi9yZWdpc3RyeSI6OTExLCJmYXN0LWlzbnVtZXJpYyI6MjQxLCJnbC1tYXQ0L2Zyb21RdWF0IjoyODJ9XSw4MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9wbG90X2FwaSIpO3IucGxvdD1uLnBsb3Qsci5uZXdQbG90PW4ubmV3UGxvdCxyLnJlc3R5bGU9bi5yZXN0eWxlLHIucmVsYXlvdXQ9bi5yZWxheW91dCxyLnJlZHJhdz1uLnJlZHJhdyxyLnVwZGF0ZT1uLnVwZGF0ZSxyLl9ndWlSZXN0eWxlPW4uX2d1aVJlc3R5bGUsci5fZ3VpUmVsYXlvdXQ9bi5fZ3VpUmVsYXlvdXQsci5fZ3VpVXBkYXRlPW4uX2d1aVVwZGF0ZSxyLl9zdG9yZURpcmVjdEdVSUVkaXQ9bi5fc3RvcmVEaXJlY3RHVUlFZGl0LHIucmVhY3Q9bi5yZWFjdCxyLmV4dGVuZFRyYWNlcz1uLmV4dGVuZFRyYWNlcyxyLnByZXBlbmRUcmFjZXM9bi5wcmVwZW5kVHJhY2VzLHIuYWRkVHJhY2VzPW4uYWRkVHJhY2VzLHIuZGVsZXRlVHJhY2VzPW4uZGVsZXRlVHJhY2VzLHIubW92ZVRyYWNlcz1uLm1vdmVUcmFjZXMsci5wdXJnZT1uLnB1cmdlLHIuYWRkRnJhbWVzPW4uYWRkRnJhbWVzLHIuZGVsZXRlRnJhbWVzPW4uZGVsZXRlRnJhbWVzLHIuYW5pbWF0ZT1uLmFuaW1hdGUsci5zZXRQbG90Q29uZmlnPW4uc2V0UGxvdENvbmZpZyxyLnRvSW1hZ2U9dCgiLi90b19pbWFnZSIpLHIudmFsaWRhdGU9dCgiLi92YWxpZGF0ZSIpLHIuZG93bmxvYWRJbWFnZT10KCIuLi9zbmFwc2hvdC9kb3dubG9hZCIpO3ZhciBpPXQoIi4vdGVtcGxhdGVfYXBpIik7ci5tYWtlVGVtcGxhdGU9aS5tYWtlVGVtcGxhdGUsci52YWxpZGF0ZVRlbXBsYXRlPWkudmFsaWRhdGVUZW1wbGF0ZX0seyIuLi9zbmFwc2hvdC9kb3dubG9hZCI6OTEzLCIuL3Bsb3RfYXBpIjo4MTQsIi4vdGVtcGxhdGVfYXBpIjo4MTksIi4vdG9faW1hZ2UiOjgyMCwiLi92YWxpZGF0ZSI6ODIxfV0sODEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYi9pc19wbGFpbl9vYmplY3QiKSxpPXQoIi4uL2xpYi9ub29wIiksYT10KCIuLi9saWIvbG9nZ2VycyIpLG89dCgiLi4vbGliL3NlYXJjaCIpLnNvcnRlckFzYyxzPXQoIi4uL3JlZ2lzdHJ5Iik7ci5jb250YWluZXJBcnJheU1hdGNoPXQoIi4vY29udGFpbmVyX2FycmF5X21hdGNoIik7dmFyIGw9ci5pc0FkZFZhbD1mdW5jdGlvbih0KXtyZXR1cm4iYWRkIj09PXR8fG4odCl9LGM9ci5pc1JlbW92ZVZhbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXR8fCJyZW1vdmUiPT09dH07ci5hcHBseUNvbnRhaW5lckFycmF5Q2hhbmdlcz1mdW5jdGlvbih0LGUscixuLHUpe3ZhciBmPWUuYXN0cixoPXMuZ2V0Q29tcG9uZW50TWV0aG9kKGYsInN1cHBseUxheW91dERlZmF1bHRzIikscD1zLmdldENvbXBvbmVudE1ldGhvZChmLCJkcmF3IiksZD1zLmdldENvbXBvbmVudE1ldGhvZChmLCJkcmF3T25lIiksZz1uLnJlcGxvdHx8bi5yZWNhbGN8fGg9PT1pfHxwPT09aSxtPXQubGF5b3V0LHY9dC5fZnVsbExheW91dDtpZihyWyIiXSl7T2JqZWN0LmtleXMocikubGVuZ3RoPjEmJmEud2FybigiRnVsbCBhcnJheSBlZGl0cyBhcmUgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgZWRpdHMiLGYpO3ZhciB5PXJbIiJdWyIiXTtpZihjKHkpKWUuc2V0KG51bGwpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoeSkpcmV0dXJuIGEud2FybigiVW5yZWNvZ25pemVkIGZ1bGwgYXJyYXkgZWRpdCB2YWx1ZSIsZix5KSwhMDtlLnNldCh5KX1yZXR1cm4hZyYmKGgobSx2KSxwKHQpLCEwKX12YXIgeCxiLF8sdyxULGssTSxBLFM9T2JqZWN0LmtleXMocikubWFwKE51bWJlcikuc29ydChvKSxFPWUuZ2V0KCksQz1FfHxbXSxMPXUodixmKS5nZXQoKSxJPVtdLFA9LTEsej1DLmxlbmd0aDtmb3IoeD0wO3g8Uy5sZW5ndGg7eCsrKWlmKHc9cltfPVNbeF1dLFQ9T2JqZWN0LmtleXModyksaz13WyIiXSxNPWwoayksXzwwfHxfPkMubGVuZ3RoLShNPzA6MSkpYS53YXJuKCJpbmRleCBvdXQgb2YgcmFuZ2UiLGYsXyk7ZWxzZSBpZih2b2lkIDAhPT1rKVQubGVuZ3RoPjEmJmEud2FybigiSW5zZXJ0aW9uICYgcmVtb3ZhbCBhcmUgaW5jb21wYXRpYmxlIHdpdGggZWRpdHMgdG8gdGhlIHNhbWUgaW5kZXguIixmLF8pLGMoayk/SS5wdXNoKF8pOk0/KCJhZGQiPT09ayYmKGs9e30pLEMuc3BsaWNlKF8sMCxrKSxMJiZMLnNwbGljZShfLDAse30pKTphLndhcm4oIlVucmVjb2duaXplZCBmdWxsIG9iamVjdCBlZGl0IHZhbHVlIixmLF8sayksLTE9PT1QJiYoUD1fKTtlbHNlIGZvcihiPTA7YjxULmxlbmd0aDtiKyspQT1mKyJbIitfKyJdLiIsdShDW19dLFRbYl0sQSkuc2V0KHdbVFtiXV0pO2Zvcih4PUkubGVuZ3RoLTE7eD49MDt4LS0pQy5zcGxpY2UoSVt4XSwxKSxMJiZMLnNwbGljZShJW3hdLDEpO2lmKEMubGVuZ3RoP0V8fGUuc2V0KEMpOmUuc2V0KG51bGwpLGcpcmV0dXJuITE7aWYoaChtLHYpLGQhPT1pKXt2YXIgTztpZigtMT09PVApTz1TO2Vsc2V7Zm9yKHo9TWF0aC5tYXgoQy5sZW5ndGgseiksTz1bXSx4PTA7eDxTLmxlbmd0aCYmISgoXz1TW3hdKT49UCk7eCsrKU8ucHVzaChfKTtmb3IoeD1QO3g8ejt4KyspTy5wdXNoKHgpfWZvcih4PTA7eDxPLmxlbmd0aDt4KyspZCh0LE9beF0pfWVsc2UgcCh0KTtyZXR1cm4hMH19LHsiLi4vbGliL2lzX3BsYWluX29iamVjdCI6Nzc5LCIuLi9saWIvbG9nZ2VycyI6NzgyLCIuLi9saWIvbm9vcCI6Nzg3LCIuLi9saWIvc2VhcmNoIjo3OTgsIi4uL3JlZ2lzdHJ5Ijo5MTEsIi4vY29udGFpbmVyX2FycmF5X21hdGNoIjo4MDl9XSw4MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCJoYXMtaG92ZXIiKSxvPXQoIi4uL2xpYiIpLHM9by5uZXN0ZWRQcm9wZXJ0eSxsPXQoIi4uL2xpYi9ldmVudHMiKSxjPXQoIi4uL2xpYi9xdWV1ZSIpLHU9dCgiLi4vcmVnaXN0cnkiKSxmPXQoIi4vcGxvdF9zY2hlbWEiKSxoPXQoIi4uL3Bsb3RzL3Bsb3RzIikscD10KCIuLi9wbG90cy9wb2xhci9sZWdhY3kiKSxkPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksZz10KCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSxtPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSx2PXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCIpLmluaXRJbnRlcmFjdGlvbnMseT10KCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHg9dCgiLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYj10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0IikuY2xlYXJTZWxlY3QsXz10KCIuL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZyx3PXQoIi4vbWFuYWdlX2FycmF5cyIpLFQ9dCgiLi9oZWxwZXJzIiksaz10KCIuL3N1YnJvdXRpbmVzIiksTT10KCIuL2VkaXRfdHlwZXMiKSxBPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKS5BWF9OQU1FX1BBVFRFUk4sUz0wO2Z1bmN0aW9uIEUodCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50P2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQtLTp0LmVtaXQoInBsb3RseV9hZnRlcnBsb3QiKX1mdW5jdGlvbiBDKHQsZSl7dHJ5e3QuX2Z1bGxMYXlvdXQuX3BhcGVyLnN0eWxlKCJiYWNrZ3JvdW5kIixlKX1jYXRjaCh0KXtvLmVycm9yKHQpfX1mdW5jdGlvbiBMKHQsZSl7Qyh0LG0uY29tYmluZShlLCJ3aGl0ZSIpKX1mdW5jdGlvbiBJKHQsZSl7aWYoIXQuX2NvbnRleHQpe3QuX2NvbnRleHQ9by5leHRlbmREZWVwKHt9LF8pO3ZhciByPW4uc2VsZWN0KCJiYXNlIik7dC5fY29udGV4dC5fYmFzZVVybD1yLnNpemUoKSYmci5hdHRyKCJocmVmIik/d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXToiIn12YXIgaSxzLGwsYz10Ll9jb250ZXh0O2lmKGUpe2ZvcihzPU9iamVjdC5rZXlzKGUpLGk9MDtpPHMubGVuZ3RoO2krKykiZWRpdGFibGUiIT09KGw9c1tpXSkmJiJlZGl0cyIhPT1sJiZsIGluIGMmJigic2V0QmFja2dyb3VuZCI9PT1sJiYib3BhcXVlIj09PWVbbF0/Y1tsXT1MOmNbbF09ZVtsXSk7ZS5wbG90M2RQaXhlbFJhdGlvJiYhYy5wbG90R2xQaXhlbFJhdGlvJiYoYy5wbG90R2xQaXhlbFJhdGlvPWMucGxvdDNkUGl4ZWxSYXRpbyk7dmFyIHU9ZS5lZGl0YWJsZTtpZih2b2lkIDAhPT11KWZvcihjLmVkaXRhYmxlPXUscz1PYmplY3Qua2V5cyhjLmVkaXRzKSxpPTA7aTxzLmxlbmd0aDtpKyspYy5lZGl0c1tzW2ldXT11O2lmKGUuZWRpdHMpZm9yKHM9T2JqZWN0LmtleXMoZS5lZGl0cyksaT0wO2k8cy5sZW5ndGg7aSsrKShsPXNbaV0paW4gYy5lZGl0cyYmKGMuZWRpdHNbbF09ZS5lZGl0c1tsXSk7Yy5fZXhwb3J0ZWRQbG90PWUuX2V4cG9ydGVkUGxvdH1jLnN0YXRpY1Bsb3QmJihjLmVkaXRhYmxlPSExLGMuZWRpdHM9e30sYy5hdXRvc2l6YWJsZT0hMSxjLnNjcm9sbFpvb209ITEsYy5kb3VibGVDbGljaz0hMSxjLnNob3dUaXBzPSExLGMuc2hvd0xpbms9ITEsYy5kaXNwbGF5TW9kZUJhcj0hMSksImhvdmVyIiE9PWMuZGlzcGxheU1vZGVCYXJ8fGF8fChjLmRpc3BsYXlNb2RlQmFyPSEwKSwidHJhbnNwYXJlbnQiIT09Yy5zZXRCYWNrZ3JvdW5kJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zZXRCYWNrZ3JvdW5kfHwoYy5zZXRCYWNrZ3JvdW5kPUMpLGMuX2hhc1plcm9IZWlnaHQ9Yy5faGFzWmVyb0hlaWdodHx8MD09PXQuY2xpZW50SGVpZ2h0LGMuX2hhc1plcm9XaWR0aD1jLl9oYXNaZXJvV2lkdGh8fDA9PT10LmNsaWVudFdpZHRoO3ZhciBmPWMuc2Nyb2xsWm9vbSxoPWMuX3Njcm9sbFpvb209e307aWYoITA9PT1mKWguY2FydGVzaWFuPTEsaC5nbDNkPTEsaC5nZW89MSxoLm1hcGJveD0xO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBmKXt2YXIgcD1mLnNwbGl0KCIrIik7Zm9yKGk9MDtpPHAubGVuZ3RoO2krKyloW3BbaV1dPTF9ZWxzZSExIT09ZiYmKGguZ2wzZD0xLGguZ2VvPTEsaC5tYXBib3g9MSl9ZnVuY3Rpb24gUCh0LGUpe3ZhciByLG4saT1lKzEsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKShuPXRbcl0pPDA/YS5wdXNoKGkrbik6YS5wdXNoKG4pO3JldHVybiBhfWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuLGk7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7aWYoKGk9ZVtuXSkhPT1wYXJzZUludChpLDEwKSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gIityKyIgbXVzdCBiZSBpbnRlZ2VycyIpO2lmKGk+PXQuZGF0YS5sZW5ndGh8fGk8LXQuZGF0YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKHIrIiBtdXN0IGJlIHZhbGlkIGluZGljZXMgZm9yIGdkLmRhdGEuIik7aWYoZS5pbmRleE9mKGksbisxKT4tMXx8aT49MCYmZS5pbmRleE9mKC10LmRhdGEubGVuZ3RoK2kpPi0xfHxpPDAmJmUuaW5kZXhPZih0LmRhdGEubGVuZ3RoK2kpPi0xKXRocm93IG5ldyBFcnJvcigiZWFjaCBpbmRleCBpbiAiK3IrIiBtdXN0IGJlIHVuaXF1ZS4iKX19ZnVuY3Rpb24gTyh0LGUscil7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheS4iKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50SW5kaWNlcyBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LiIpO2lmKEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSkseih0LGUsImN1cnJlbnRJbmRpY2VzIiksInVuZGVmaW5lZCI9PXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLCJ1bmRlZmluZWQiIT10eXBlb2YgciYmeih0LHIsIm5ld0luZGljZXMiKSwidW5kZWZpbmVkIiE9dHlwZW9mIHImJmUubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50IGFuZCBuZXcgaW5kaWNlcyBtdXN0IGJlIG9mIGVxdWFsIGxlbmd0aC4iKX1mdW5jdGlvbiBEKHQsZSxyLG4sYSl7IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8uaXNQbGFpbk9iamVjdChuKTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5Iik7aWYoIW8uaXNQbGFpbk9iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZSBtdXN0IGJlIGEga2V5OnZhbHVlIG9iamVjdCIpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2Ygcil0aHJvdyBuZXcgRXJyb3IoImluZGljZXMgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIGFycmF5IG9mIGludGVnZXJzIik7Zm9yKHZhciBhIGluIHoodCxyLCJpbmRpY2VzIiksZSl7aWYoIUFycmF5LmlzQXJyYXkoZVthXSl8fGVbYV0ubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRyaWJ1dGUgIithKyIgbXVzdCBiZSBhbiBhcnJheSBvZiBsZW5ndGggZXF1YWwgdG8gaW5kaWNlcyBhcnJheSBsZW5ndGgiKTtpZihpJiYoIShhIGluIG4pfHwhQXJyYXkuaXNBcnJheShuW2FdKXx8blthXS5sZW5ndGghPT1lW2FdLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKCJ3aGVuIG1heFBvaW50cyBpcyBzZXQgYXMgYSBrZXk6dmFsdWUgb2JqZWN0IGl0IG11c3QgY29udGFpbiBhIDE6MSBjb3JyaXNwb25kZW5jZSB3aXRoIHRoZSBrZXlzIGFuZCBudW1iZXIgb2YgdHJhY2VzIGluIHRoZSB1cGRhdGUgb2JqZWN0Iil9fSh0LGUscixuKTtmb3IodmFyIGw9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsbCxjLHUsZixoPW8uaXNQbGFpbk9iamVjdChuKSxwPVtdO2Zvcih2YXIgZCBpbiBBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHI9UChyLHQuZGF0YS5sZW5ndGgtMSksZSlmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKyl7aWYoYT10LmRhdGFbcltnXV0sbD0oYz1zKGEsZCkpLmdldCgpLHU9ZVtkXVtnXSwhby5pc0FycmF5T3JUeXBlZEFycmF5KHUpKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlOiAiK2QrIiBpbmRleDogIitnKyIgbXVzdCBiZSBhbiBhcnJheSIpO2lmKCFvLmlzQXJyYXlPclR5cGVkQXJyYXkobCkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIG1pc3Npbmcgb3Igbm9uLWFycmF5IGF0dHJpYnV0ZTogIitkKTtpZihsLmNvbnN0cnVjdG9yIT09dS5jb25zdHJ1Y3Rvcil0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBleHRlbmQgYXJyYXkgd2l0aCBhbiBhcnJheSBvZiBhIGRpZmZlcmVudCB0eXBlOiAiK2QpO2Y9aD9uW2RdW2ddOm4saShmKXx8KGY9LTEpLHAucHVzaCh7cHJvcDpjLHRhcmdldDpsLGluc2VydDp1LG1heHA6TWF0aC5mbG9vcihmKX0pfXJldHVybiBwfSh0LGUscixuKSxjPXt9LHU9e30sZj0wO2Y8bC5sZW5ndGg7ZisrKXt2YXIgaD1sW2ZdLnByb3AscD1sW2ZdLm1heHAsZD1hKGxbZl0udGFyZ2V0LGxbZl0uaW5zZXJ0LHApO2guc2V0KGRbMF0pLEFycmF5LmlzQXJyYXkoY1toLmFzdHJdKXx8KGNbaC5hc3RyXT1bXSksY1toLmFzdHJdLnB1c2goZFsxXSksQXJyYXkuaXNBcnJheSh1W2guYXN0cl0pfHwodVtoLmFzdHJdPVtdKSx1W2guYXN0cl0ucHVzaChsW2ZdLnRhcmdldC5sZW5ndGgpfXJldHVybnt1cGRhdGU6YyxtYXhQb2ludHM6dX19ZnVuY3Rpb24gUih0LGUpe3ZhciByPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoKTtyZXR1cm4gci5zZXQodCksci5zZXQoZSx0Lmxlbmd0aCkscn1mdW5jdGlvbiBGKHQsZSxuLGkpe3Q9by5nZXRHcmFwaERpdih0KSxULmNsZWFyUHJvbWlzZVF1ZXVlKHQpO3ZhciBhPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgZSlhW2VdPW47ZWxzZXtpZighby5pc1BsYWluT2JqZWN0KGUpKXJldHVybiBvLndhcm4oIlJlc3R5bGUgZmFpbC4iLGUsbixpKSxQcm9taXNlLnJlamVjdCgpO2E9by5leHRlbmRGbGF0KHt9LGUpLHZvaWQgMD09PWkmJihpPW4pfU9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIHM9VC5jb2VyY2VUcmFjZUluZGljZXModCxpKSxsPVUodCxhLHMpLHU9bC5mbGFnczt1LmNhbGMmJih0LmNhbGNkYXRhPXZvaWQgMCksdS5jbGVhckF4aXNUeXBlcyYmVC5jbGVhckF4aXNUeXBlcyh0LHMse30pO3ZhciBmPVtdO3UuZnVsbFJlcGxvdD9mLnB1c2goci5wbG90KTooZi5wdXNoKGgucHJldmlvdXNQcm9taXNlcyksaC5zdXBwbHlEZWZhdWx0cyh0KSx1Lm1hcmtlclNpemUmJihoLmRvQ2FsY2RhdGEodCksRyhmKSksdS5zdHlsZSYmZi5wdXNoKGsuZG9UcmFjZVN0eWxlKSx1LmNvbG9yYmFycyYmZi5wdXNoKGsuZG9Db2xvckJhcnMpLGYucHVzaChFKSksZi5wdXNoKGgucmVob3ZlcixoLnJlZHJhZyksYy5hZGQodCxGLFt0LGwudW5kb2l0LGwudHJhY2VzXSxGLFt0LGwucmVkb2l0LGwudHJhY2VzXSk7dmFyIHA9by5zeW5jT3JBc3luYyhmLHQpO3JldHVybiBwJiZwLnRoZW58fChwPVByb21pc2UucmVzb2x2ZSgpKSxwLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLGwuZXZlbnREYXRhKSx0fSkpfWZ1bmN0aW9uIEIodCl7cmV0dXJuIHZvaWQgMD09PXQ/bnVsbDp0fWZ1bmN0aW9uIE4odCxlKXtyZXR1cm4gZT9mdW5jdGlvbihlLHIsbil7dmFyIGk9cyhlLHIpLGE9aS5zZXQ7cmV0dXJuIGkuc2V0PWZ1bmN0aW9uKGUpe2ooKG58fCIiKStyLGkuZ2V0KCksZSx0KSxhKGUpfSxpfTpzfWZ1bmN0aW9uIGoodCxlLHIsbil7aWYoQXJyYXkuaXNBcnJheShlKXx8QXJyYXkuaXNBcnJheShyKSlmb3IodmFyIGk9QXJyYXkuaXNBcnJheShlKT9lOltdLGE9QXJyYXkuaXNBcnJheShyKT9yOltdLHM9TWF0aC5tYXgoaS5sZW5ndGgsYS5sZW5ndGgpLGw9MDtsPHM7bCsrKWoodCsiWyIrbCsiXSIsaVtsXSxhW2xdLG4pO2Vsc2UgaWYoby5pc1BsYWluT2JqZWN0KGUpfHxvLmlzUGxhaW5PYmplY3Qocikpe3ZhciBjPW8uaXNQbGFpbk9iamVjdChlKT9lOnt9LHU9by5pc1BsYWluT2JqZWN0KHIpP3I6e30sZj1vLmV4dGVuZEZsYXQoe30sYyx1KTtmb3IodmFyIGggaW4gZilqKHQrIi4iK2gsY1toXSx1W2hdLG4pfWVsc2Ugdm9pZCAwPT09blt0XSYmKG5bdF09QihlKSl9ZnVuY3Rpb24gVSh0LGUscil7dmFyIG4saT10Ll9mdWxsTGF5b3V0LGE9dC5fZnVsbERhdGEsbD10LmRhdGEsYz1pLl9ndWlFZGl0aW5nLHA9TihpLl9wcmVHVUksYyksZz1vLmV4dGVuZERlZXBBbGwoe30sZSk7VihlKTt2YXIgbSx2PU0udHJhY2VGbGFncygpLHk9e30seD17fTtmdW5jdGlvbiBiKCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbigpe30pKX1mdW5jdGlvbiBfKHQpe3ZhciBlPWQuaWQybmFtZSh0KTstMT09PW0uaW5kZXhPZihlKSYmbS5wdXNoKGUpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIkxBWU9VVCIrdCsiLmF1dG9yYW5nZSJ9ZnVuY3Rpb24gayh0KXtyZXR1cm4iTEFZT1VUIit0KyIucmFuZ2UifWZ1bmN0aW9uIEEodCl7Zm9yKHZhciBlPXQ7ZTxhLmxlbmd0aDtlKyspaWYoYVtlXS5faW5wdXQ9PT1sW3RdKXJldHVybiBhW2VdfWZ1bmN0aW9uIFMobixhLG8pe2lmKEFycmF5LmlzQXJyYXkobikpbi5mb3JFYWNoKChmdW5jdGlvbih0KXtTKHQsYSxvKX0pKTtlbHNlIGlmKCEobiBpbiBlKSYmIVQuaGFzUGFyZW50KGUsbikpe3ZhciBzO2lmKCJMQVlPVVQiPT09bi5zdWJzdHIoMCw2KSlzPXAodC5sYXlvdXQsbi5yZXBsYWNlKCJMQVlPVVQiLCIiKSk7ZWxzZXt2YXIgdT1yW29dO3M9TihpLl90cmFjZVByZUdVSVtBKHUpLl9mdWxsSW5wdXQudWlkXSxjKShsW3VdLG4pfW4gaW4geHx8KHhbbl09YigpKSx2b2lkIDA9PT14W25dW29dJiYoeFtuXVtvXT1CKHMuZ2V0KCkpKSx2b2lkIDAhPT1hJiZzLnNldChhKX19ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGFbZV1bdF19fWZ1bmN0aW9uIEModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuITE9PT1lP2FbcltuXV1bdF06bnVsbH19Zm9yKHZhciBMIGluIGUpe2lmKFQuaGFzUGFyZW50KGUsTCkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2V0ICIrTCsiIGFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHkiKTt2YXIgSSxQLHosTyxELFIsRj1lW0xdO2lmKCJhdXRvYmlueCIhPT1MJiYiYXV0b2JpbnkiIT09THx8KEw9TC5jaGFyQXQoTC5sZW5ndGgtMSkrImJpbnMiLEY9QXJyYXkuaXNBcnJheShGKT9GLm1hcChDKEwpKTohMT09PUY/ci5tYXAoRShMKSk6bnVsbCkseVtMXT1GLCJMQVlPVVQiIT09TC5zdWJzdHIoMCw2KSl7Zm9yKHhbTF09YigpLG49MDtuPHIubGVuZ3RoO24rKyl7aWYoST1sW3Jbbl1dLFA9QShyW25dKSxPPSh6PU4oaS5fdHJhY2VQcmVHVUlbUC5fZnVsbElucHV0LnVpZF0sYykoSSxMKSkuZ2V0KCksdm9pZCAwIT09KEQ9QXJyYXkuaXNBcnJheShGKT9GW24lRi5sZW5ndGhdOkYpKXt2YXIgaj16LnBhcnRzW3oucGFydHMubGVuZ3RoLTFdLFU9TC5zdWJzdHIoMCxMLmxlbmd0aC1qLmxlbmd0aC0xKSxxPVU/VSsiLiI6IiIsSD1VP3MoUCxVKS5nZXQoKTpQO2lmKChSPWYuZ2V0VHJhY2VWYWxPYmplY3QoUCx6LnBhcnRzKSkmJlIuaW1wbGllZEVkaXRzJiZudWxsIT09RClmb3IodmFyIEcgaW4gUi5pbXBsaWVkRWRpdHMpUyhvLnJlbGF0aXZlQXR0cihMLEcpLFIuaW1wbGllZEVkaXRzW0ddLG4pO2Vsc2UgaWYoInRoaWNrbmVzc21vZGUiIT09aiYmImxlbm1vZGUiIT09anx8Tz09PUR8fCJmcmFjdGlvbiIhPT1EJiYicGl4ZWxzIiE9PUR8fCFIKXtpZigidHlwZSI9PT1MJiYoInBpZSI9PT1EIT0oInBpZSI9PT1PKXx8ImZ1bm5lbGFyZWEiPT09RCE9KCJmdW5uZWxhcmVhIj09PU8pKSl7dmFyIFk9IngiLFc9InkiOyJiYXIiIT09RCYmImJhciIhPT1PfHwiaCIhPT1JLm9yaWVudGF0aW9ufHwoWT0ieSIsVz0ieCIpLG8uc3dhcEF0dHJzKEksWyI/IiwiP3NyYyJdLCJsYWJlbHMiLFkpLG8uc3dhcEF0dHJzKEksWyJkPyIsIj8wIl0sImxhYmVsIixZKSxvLnN3YXBBdHRycyhJLFsiPyIsIj9zcmMiXSwidmFsdWVzIixXKSwicGllIj09PU98fCJmdW5uZWxhcmVhIj09PU8/KHMoSSwibWFya2VyLmNvbG9yIikuc2V0KHMoSSwibWFya2VyLmNvbG9ycyIpLmdldCgpKSxpLl9waWVsYXllci5zZWxlY3RBbGwoImcudHJhY2UiKS5yZW1vdmUoKSk6dS50cmFjZUlzKEksImNhcnRlc2lhbiIpJiZzKEksIm1hcmtlci5jb2xvcnMiKS5zZXQocyhJLCJtYXJrZXIuY29sb3IiKS5nZXQoKSl9fWVsc2V7dmFyIFg9aS5fc2l6ZSxaPUgub3JpZW50LEo9InRvcCI9PT1afHwiYm90dG9tIj09PVo7aWYoInRoaWNrbmVzc21vZGUiPT09ail7dmFyIEs9Sj9YLmg6WC53O1MocSsidGhpY2tuZXNzIixILnRoaWNrbmVzcyooImZyYWN0aW9uIj09PUQ/MS9LOkspLG4pfWVsc2V7dmFyIFE9Sj9YLnc6WC5oO1MocSsibGVuIixILmxlbiooImZyYWN0aW9uIj09PUQ/MS9ROlEpLG4pfX14W0xdW25dPUIoTyk7aWYoLTEhPT1bInN3YXB4eSIsInN3YXB4eWF4ZXMiLCJvcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uYXhlcyJdLmluZGV4T2YoTCkpe2lmKCJvcmllbnRhdGlvbiI9PT1MKXt6LnNldChEKTt2YXIgJD1JLngmJiFJLnk/ImgiOiJ2IjtpZigoei5nZXQoKXx8JCk9PT1QLm9yaWVudGF0aW9uKWNvbnRpbnVlfWVsc2Uib3JpZW50YXRpb25heGVzIj09PUwmJihJLm9yaWVudGF0aW9uPXt2OiJoIixoOiJ2In1bUC5vcmllbnRhdGlvbl0pO1Quc3dhcFhZRGF0YShJKSx2LmNhbGM9di5jbGVhckF4aXNUeXBlcz0hMH1lbHNlLTEhPT1oLmRhdGFBcnJheUNvbnRhaW5lcnMuaW5kZXhPZih6LnBhcnRzWzBdKT8oVC5tYW5hZ2VBcnJheUNvbnRhaW5lcnMoeixELHgpLHYuY2FsYz0hMCk6KFI/Ui5hcnJheU9rJiYhdS50cmFjZUlzKFAsInJlZ2wiKSYmKG8uaXNBcnJheU9yVHlwZWRBcnJheShEKXx8by5pc0FycmF5T3JUeXBlZEFycmF5KE8pKT92LmNhbGM9ITA6TS51cGRhdGUodixSKTp2LmNhbGM9ITAsei5zZXQoRCkpfX1pZigtMSE9PVsic3dhcHh5YXhlcyIsIm9yaWVudGF0aW9uYXhlcyJdLmluZGV4T2YoTCkmJmQuc3dhcCh0LHIpLCJvcmllbnRhdGlvbmF4ZXMiPT09TCl7dmFyIHR0PXModC5sYXlvdXQsImhvdmVybW9kZSIpLGV0PXR0LmdldCgpOyJ4Ij09PWV0P3R0LnNldCgieSIpOiJ5Ij09PWV0P3R0LnNldCgieCIpOiJ4IHVuaWZpZWQiPT09ZXQ/dHQuc2V0KCJ5IHVuaWZpZWQiKToieSB1bmlmaWVkIj09PWV0JiZ0dC5zZXQoInggdW5pZmllZCIpfWlmKC0xIT09WyJvcmllbnRhdGlvbiIsInR5cGUiXS5pbmRleE9mKEwpKXtmb3IobT1bXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBydD1sW3Jbbl1dO3UudHJhY2VJcyhydCwiY2FydGVzaWFuIikmJihfKHJ0LnhheGlzfHwieCIpLF8ocnQueWF4aXN8fCJ5IikpfVMobS5tYXAodyksITAsMCksUyhtLm1hcChrKSxbMCwxXSwwKX19ZWxzZSB6PXAodC5sYXlvdXQsTC5yZXBsYWNlKCJMQVlPVVQiLCIiKSkseFtMXT1bQih6LmdldCgpKV0sei5zZXQoQXJyYXkuaXNBcnJheShGKT9GWzBdOkYpLHYuY2FsYz0hMH1yZXR1cm4odi5jYWxjfHx2LnBsb3QpJiYodi5mdWxsUmVwbG90PSEwKSx7ZmxhZ3M6dix1bmRvaXQ6eCxyZWRvaXQ6eSx0cmFjZXM6cixldmVudERhdGE6by5leHRlbmREZWVwTm9BcnJheXMoW10sW2cscl0pfX1mdW5jdGlvbiBWKHQpe3ZhciBlLHIsbixpPW8uY291bnRlclJlZ2V4KCJheGlzIiwiLnRpdGxlIiwhMSwhMSksYT0vY29sb3JiYXJcLnRpdGxlJC8scz1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKXI9c1tlXSxuPXRbcl0sInRpdGxlIiE9PXImJiFpLnRlc3QocikmJiFhLnRlc3Qocil8fCJzdHJpbmciIT10eXBlb2YgbiYmIm51bWJlciIhPXR5cGVvZiBuP3IuaW5kZXhPZigidGl0bGVmb250Iik+LTE/bChyLHIucmVwbGFjZSgidGl0bGVmb250IiwidGl0bGUuZm9udCIpKTpyLmluZGV4T2YoInRpdGxlcG9zaXRpb24iKT4tMT9sKHIsci5yZXBsYWNlKCJ0aXRsZXBvc2l0aW9uIiwidGl0bGUucG9zaXRpb24iKSk6ci5pbmRleE9mKCJ0aXRsZXNpZGUiKT4tMT9sKHIsci5yZXBsYWNlKCJ0aXRsZXNpZGUiLCJ0aXRsZS5zaWRlIikpOnIuaW5kZXhPZigidGl0bGVvZmZzZXQiKT4tMSYmbChyLHIucmVwbGFjZSgidGl0bGVvZmZzZXQiLCJ0aXRsZS5vZmZzZXQiKSk6bChyLHIucmVwbGFjZSgidGl0bGUiLCJ0aXRsZS50ZXh0IikpO2Z1bmN0aW9uIGwoZSxyKXt0W3JdPXRbZV0sZGVsZXRlIHRbZV19fWZ1bmN0aW9uIHEodCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxULmNsZWFyUHJvbWlzZVF1ZXVlKHQpLHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUodCk7dmFyIG49e307aWYoInN0cmluZyI9PXR5cGVvZiBlKW5bZV09cjtlbHNle2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpcmV0dXJuIG8ud2FybigiUmVsYXlvdXQgZmFpbC4iLGUsciksUHJvbWlzZS5yZWplY3QoKTtuPW8uZXh0ZW5kRmxhdCh7fSxlKX1PYmplY3Qua2V5cyhuKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBpPVoodCxuKSxhPWkuZmxhZ3M7YS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApO3ZhciBzPVtoLnByZXZpb3VzUHJvbWlzZXNdO2EubGF5b3V0UmVwbG90P3MucHVzaChrLmxheW91dFJlcGxvdCk6T2JqZWN0LmtleXMobikubGVuZ3RoJiYoSCh0LGEsaSl8fGguc3VwcGx5RGVmYXVsdHModCksYS5sZWdlbmQmJnMucHVzaChrLmRvTGVnZW5kKSxhLmxheW91dHN0eWxlJiZzLnB1c2goay5sYXlvdXRTdHlsZXMpLGEuYXhyYW5nZSYmRyhzLGkucmFuZ2VzQWx0ZXJlZCksYS50aWNrcyYmcy5wdXNoKGsuZG9UaWNrc1JlbGF5b3V0KSxhLm1vZGViYXImJnMucHVzaChrLmRvTW9kZUJhciksYS5jYW1lcmEmJnMucHVzaChrLmRvQ2FtZXJhKSxhLmNvbG9yYmFycyYmcy5wdXNoKGsuZG9Db2xvckJhcnMpLHMucHVzaChFKSkscy5wdXNoKGgucmVob3ZlcixoLnJlZHJhZyksYy5hZGQodCxxLFt0LGkudW5kb2l0XSxxLFt0LGkucmVkb2l0XSk7dmFyIGw9by5zeW5jT3JBc3luYyhzLHQpO3JldHVybiBsJiZsLnRoZW58fChsPVByb21pc2UucmVzb2x2ZSh0KSksbC50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZWxheW91dCIsaS5ldmVudERhdGEpLHR9KSl9ZnVuY3Rpb24gSCh0LGUscil7dmFyIG49dC5fZnVsbExheW91dDtpZighZS5heHJhbmdlKXJldHVybiExO2Zvcih2YXIgaSBpbiBlKWlmKCJheHJhbmdlIiE9PWkmJmVbaV0pcmV0dXJuITE7Zm9yKHZhciBhIGluIHIucmFuZ2VzQWx0ZXJlZCl7dmFyIG89ZC5pZDJuYW1lKGEpLHM9dC5sYXlvdXRbb10sbD1uW29dO2lmKGwuYXV0b3JhbmdlPXMuYXV0b3JhbmdlLHMucmFuZ2UmJihsLnJhbmdlPXMucmFuZ2Uuc2xpY2UoKSksbC5jbGVhblJhbmdlKCksbC5fbWF0Y2hHcm91cClmb3IodmFyIGMgaW4gbC5fbWF0Y2hHcm91cClpZihjIT09YSl7dmFyIHU9bltkLmlkMm5hbWUoYyldO3UuYXV0b3JhbmdlPWwuYXV0b3JhbmdlLHUucmFuZ2U9bC5yYW5nZS5zbGljZSgpLHUuX2lucHV0LnJhbmdlPWwucmFuZ2Uuc2xpY2UoKX19cmV0dXJuITB9ZnVuY3Rpb24gRyh0LGUpe3ZhciByPWU/ZnVuY3Rpb24odCl7dmFyIHI9W10sbj0hMDtmb3IodmFyIGkgaW4gZSl7dmFyIGE9ZC5nZXRGcm9tSWQodCxpKTtpZihyLnB1c2goaSksLTEhPT0oYS50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpJiZhLl9hbmNob3JBeGlzJiZyLnB1c2goYS5fYW5jaG9yQXhpcy5faWQpLGEuX21hdGNoR3JvdXApZm9yKHZhciBvIGluIGEuX21hdGNoR3JvdXApZVtvXXx8ci5wdXNoKG8pO2EuYXV0b21hcmdpbiYmKG49ITEpfXJldHVybiBkLmRyYXcodCxyLHtza2lwVGl0bGU6bn0pfTpmdW5jdGlvbih0KXtyZXR1cm4gZC5kcmF3KHQsInJlZHJhdyIpfTt0LnB1c2goYixrLmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHMscixrLmRyYXdEYXRhLGsuZmluYWxEcmF3KX12YXIgWT0vXlt4eXpdYXhpc1swLTldKlwucmFuZ2UoXFtbMHwxXVxdKT8kLyxXPS9eW3h5el1heGlzWzAtOV0qXC5hdXRvcmFuZ2UkLyxYPS9eW3h5el1heGlzWzAtOV0qXC5kb21haW4oXFtbMHwxXVxdKT8kLztmdW5jdGlvbiBaKHQsZSl7dmFyIHIsbixpLGE9dC5sYXlvdXQsbD10Ll9mdWxsTGF5b3V0LGM9bC5fZ3VpRWRpdGluZyxoPU4obC5fcHJlR1VJLGMpLHA9T2JqZWN0LmtleXMoZSksZz1kLmxpc3QodCksbT1vLmV4dGVuZERlZXBBbGwoe30sZSksdj17fTtmb3IoVihlKSxwPU9iamVjdC5rZXlzKGUpLG49MDtuPHAubGVuZ3RoO24rKylpZigwPT09cFtuXS5pbmRleE9mKCJhbGxheGVzIikpe2ZvcihpPTA7aTxnLmxlbmd0aDtpKyspe3ZhciB5PWdbaV0uX2lkLnN1YnN0cigxKSx4PS0xIT09eS5pbmRleE9mKCJzY2VuZSIpP3krIi4iOiIiLGI9cFtuXS5yZXBsYWNlKCJhbGxheGVzIix4K2dbaV0uX25hbWUpO2VbYl18fChlW2JdPWVbcFtuXV0pfWRlbGV0ZSBlW3Bbbl1dfXZhciBfPU0ubGF5b3V0RmxhZ3MoKSxrPXt9LFM9e307ZnVuY3Rpb24gRSh0LHIpe2lmKEFycmF5LmlzQXJyYXkodCkpdC5mb3JFYWNoKChmdW5jdGlvbih0KXtFKHQscil9KSk7ZWxzZSBpZighKHQgaW4gZSkmJiFULmhhc1BhcmVudChlLHQpKXt2YXIgbj1oKGEsdCk7dCBpbiBTfHwoU1t0XT1CKG4uZ2V0KCkpKSx2b2lkIDAhPT1yJiZuLnNldChyKX19dmFyIEMsTD17fTtmdW5jdGlvbiBJKHQpe3ZhciBlPWQubmFtZTJpZCh0LnNwbGl0KCIuIilbMF0pO3JldHVybiBMW2VdPTEsZX1mb3IodmFyIFAgaW4gZSl7aWYoVC5oYXNQYXJlbnQoZSxQKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzZXQgIitQKyIgYW5kIGEgcGFyZW50IGF0dHJpYnV0ZSBzaW11bHRhbmVvdXNseSIpO2Zvcih2YXIgej1oKGEsUCksTz1lW1BdLEQ9ei5wYXJ0cy5sZW5ndGgtMTtEPjAmJiJzdHJpbmciIT10eXBlb2Ygei5wYXJ0c1tEXTspRC0tO3ZhciBSPXoucGFydHNbRF0sRj16LnBhcnRzW0QtMV0rIi4iK1Isaj16LnBhcnRzLnNsaWNlKDAsRCkuam9pbigiLiIpLFU9cyh0LmxheW91dCxqKS5nZXQoKSxxPXMobCxqKS5nZXQoKSxIPXouZ2V0KCk7aWYodm9pZCAwIT09Tyl7a1tQXT1PLFNbUF09InJldmVyc2UiPT09Uj9POkIoSCk7dmFyIEc9Zi5nZXRMYXlvdXRWYWxPYmplY3QobCx6LnBhcnRzKTtpZihHJiZHLmltcGxpZWRFZGl0cyYmbnVsbCE9PU8pZm9yKHZhciBaIGluIEcuaW1wbGllZEVkaXRzKUUoby5yZWxhdGl2ZUF0dHIoUCxaKSxHLmltcGxpZWRFZGl0c1taXSk7aWYoLTEhPT1bIndpZHRoIiwiaGVpZ2h0Il0uaW5kZXhPZihQKSlpZihPKXtFKCJhdXRvc2l6ZSIsbnVsbCk7dmFyIEs9ImhlaWdodCI9PT1QPyJ3aWR0aCI6ImhlaWdodCI7RShLLGxbS10pfWVsc2UgbFtQXT10Ll9pbml0aWFsQXV0b1NpemVbUF07ZWxzZSBpZigiYXV0b3NpemUiPT09UClFKCJ3aWR0aCIsTz9udWxsOmwud2lkdGgpLEUoImhlaWdodCIsTz9udWxsOmwuaGVpZ2h0KTtlbHNlIGlmKEYubWF0Y2goWSkpSShGKSxzKGwsaisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO2Vsc2UgaWYoRi5tYXRjaChXKSl7SShGKSxzKGwsaisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO3ZhciBRPXMobCxqKS5nZXQoKTtRLl9pbnB1dERvbWFpbiYmKFEuX2lucHV0LmRvbWFpbj1RLl9pbnB1dERvbWFpbi5zbGljZSgpKX1lbHNlIEYubWF0Y2goWCkmJnMobCxqKyIuX2lucHV0RG9tYWluIikuc2V0KG51bGwpO2lmKCJ0eXBlIj09PVIpe0M9VTt2YXIgJD0ibGluZWFyIj09PXEudHlwZSYmImxvZyI9PT1PLHR0PSJsb2ciPT09cS50eXBlJiYibGluZWFyIj09PU87aWYoJHx8dHQpe2lmKEMmJkMucmFuZ2UpaWYocS5hdXRvcmFuZ2UpJCYmKEMucmFuZ2U9Qy5yYW5nZVsxXT5DLnJhbmdlWzBdP1sxLDJdOlsyLDFdKTtlbHNle3ZhciBldD1DLnJhbmdlWzBdLHJ0PUMucmFuZ2VbMV07JD8oZXQ8PTAmJnJ0PD0wJiZFKGorIi5hdXRvcmFuZ2UiLCEwKSxldDw9MD9ldD1ydC8xZTY6cnQ8PTAmJihydD1ldC8xZTYpLEUoaisiLnJhbmdlWzBdIixNYXRoLmxvZyhldCkvTWF0aC5MTjEwKSxFKGorIi5yYW5nZVsxXSIsTWF0aC5sb2cocnQpL01hdGguTE4xMCkpOihFKGorIi5yYW5nZVswXSIsTWF0aC5wb3coMTAsZXQpKSxFKGorIi5yYW5nZVsxXSIsTWF0aC5wb3coMTAscnQpKSl9ZWxzZSBFKGorIi5hdXRvcmFuZ2UiLCEwKTtBcnJheS5pc0FycmF5KGwuX3N1YnBsb3RzLnBvbGFyKSYmbC5fc3VicGxvdHMucG9sYXIubGVuZ3RoJiZsW3oucGFydHNbMF1dJiYicmFkaWFsYXhpcyI9PT16LnBhcnRzWzFdJiZkZWxldGUgbFt6LnBhcnRzWzBdXS5fc3VicGxvdC52aWV3SW5pdGlhbFsicmFkaWFsYXhpcy5yYW5nZSJdLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNvbnZlcnRDb29yZHMiKSh0LHEsTyxFKSx1LmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQscSxPLEUpfWVsc2UgRShqKyIuYXV0b3JhbmdlIiwhMCksRShqKyIucmFuZ2UiLG51bGwpO3MobCxqKyIuX2lucHV0UmFuZ2UiKS5zZXQobnVsbCl9ZWxzZSBpZihSLm1hdGNoKEEpKXt2YXIgbnQ9cyhsLFApLmdldCgpLGl0PShPfHx7fSkudHlwZTtpdCYmIi0iIT09aXR8fChpdD0ibGluZWFyIiksdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY29udmVydENvb3JkcyIpKHQsbnQsaXQsRSksdS5nZXRDb21wb25lbnRNZXRob2QoImltYWdlcyIsImNvbnZlcnRDb29yZHMiKSh0LG50LGl0LEUpfXZhciBhdD13LmNvbnRhaW5lckFycmF5TWF0Y2goUCk7aWYoYXQpe3I9YXQuYXJyYXksbj1hdC5pbmRleDt2YXIgb3Q9YXQucHJvcGVydHksc3Q9R3x8e2VkaXRUeXBlOiJjYWxjIn07IiIhPT1uJiYiIj09PW90JiYody5pc0FkZFZhbChPKT9TW1BdPW51bGw6dy5pc1JlbW92ZVZhbChPKT9TW1BdPShzKGEscikuZ2V0KCl8fFtdKVtuXTpvLndhcm4oInVucmVjb2duaXplZCBmdWxsIG9iamVjdCB2YWx1ZSIsZSkpLE0udXBkYXRlKF8sc3QpLHZbcl18fCh2W3JdPXt9KTt2YXIgbHQ9dltyXVtuXTtsdHx8KGx0PXZbcl1bbl09e30pLGx0W290XT1PLGRlbGV0ZSBlW1BdfWVsc2UicmV2ZXJzZSI9PT1SPyhVLnJhbmdlP1UucmFuZ2UucmV2ZXJzZSgpOihFKGorIi5hdXRvcmFuZ2UiLCEwKSxVLnJhbmdlPVsxLDBdKSxxLmF1dG9yYW5nZT9fLmNhbGM9ITA6Xy5wbG90PSEwKToobC5faGFzKCJzY2F0dGVyLWxpa2UiKSYmbC5faGFzKCJyZWdsIikmJiJkcmFnbW9kZSI9PT1QJiYoImxhc3NvIj09PU98fCJzZWxlY3QiPT09TykmJiJsYXNzbyIhPT1IJiYic2VsZWN0IiE9PUh8fGwuX2hhcygiZ2wyZCIpP18ucGxvdD0hMDpHP00udXBkYXRlKF8sRyk6Xy5jYWxjPSEwLHouc2V0KE8pKX19Zm9yKHIgaW4gdil7dy5hcHBseUNvbnRhaW5lckFycmF5Q2hhbmdlcyh0LGgoYSxyKSx2W3JdLF8saCl8fChfLnBsb3Q9ITApfWZvcih2YXIgY3QgaW4gTCl7dmFyIHV0PShDPWQuZ2V0RnJvbUlkKHQsY3QpKSYmQy5fY29uc3RyYWludEdyb3VwO2lmKHV0KWZvcih2YXIgZnQgaW4gXy5jYWxjPSEwLHV0KUxbZnRdfHwoZC5nZXRGcm9tSWQodCxmdCkuX2NvbnN0cmFpbnRTaHJpbmthYmxlPSEwKX1yZXR1cm4oSih0KXx8ZS5oZWlnaHR8fGUud2lkdGgpJiYoXy5wbG90PSEwKSwoXy5wbG90fHxfLmNhbGMpJiYoXy5sYXlvdXRSZXBsb3Q9ITApLHtmbGFnczpfLHJhbmdlc0FsdGVyZWQ6TCx1bmRvaXQ6UyxyZWRvaXQ6ayxldmVudERhdGE6bX19ZnVuY3Rpb24gSih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS53aWR0aCxuPWUuaGVpZ2h0O3JldHVybiB0LmxheW91dC5hdXRvc2l6ZSYmaC5wbG90QXV0b1NpemUodCx0LmxheW91dCxlKSxlLndpZHRoIT09cnx8ZS5oZWlnaHQhPT1ufWZ1bmN0aW9uIEsodCxlLG4saSl7aWYodD1vLmdldEdyYXBoRGl2KHQpLFQuY2xlYXJQcm9taXNlUXVldWUodCksdC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KTtvLmlzUGxhaW5PYmplY3QoZSl8fChlPXt9KSxvLmlzUGxhaW5PYmplY3Qobil8fChuPXt9KSxPYmplY3Qua2V5cyhlKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApLE9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIGE9VC5jb2VyY2VUcmFjZUluZGljZXModCxpKSxzPVUodCxvLmV4dGVuZEZsYXQoe30sZSksYSksbD1zLmZsYWdzLHU9Wih0LG8uZXh0ZW5kRmxhdCh7fSxuKSksZj11LmZsYWdzOyhsLmNhbGN8fGYuY2FsYykmJih0LmNhbGNkYXRhPXZvaWQgMCksbC5jbGVhckF4aXNUeXBlcyYmVC5jbGVhckF4aXNUeXBlcyh0LGEsbik7dmFyIHA9W107Zi5sYXlvdXRSZXBsb3Q/cC5wdXNoKGsubGF5b3V0UmVwbG90KTpsLmZ1bGxSZXBsb3Q/cC5wdXNoKHIucGxvdCk6KHAucHVzaChoLnByZXZpb3VzUHJvbWlzZXMpLEgodCxmLHUpfHxoLnN1cHBseURlZmF1bHRzKHQpLGwuc3R5bGUmJnAucHVzaChrLmRvVHJhY2VTdHlsZSksKGwuY29sb3JiYXJzfHxmLmNvbG9yYmFycykmJnAucHVzaChrLmRvQ29sb3JCYXJzKSxmLmxlZ2VuZCYmcC5wdXNoKGsuZG9MZWdlbmQpLGYubGF5b3V0c3R5bGUmJnAucHVzaChrLmxheW91dFN0eWxlcyksZi5heHJhbmdlJiZHKHAsdS5yYW5nZXNBbHRlcmVkKSxmLnRpY2tzJiZwLnB1c2goay5kb1RpY2tzUmVsYXlvdXQpLGYubW9kZWJhciYmcC5wdXNoKGsuZG9Nb2RlQmFyKSxmLmNhbWVyYSYmcC5wdXNoKGsuZG9DYW1lcmEpLHAucHVzaChFKSkscC5wdXNoKGgucmVob3ZlcixoLnJlZHJhZyksYy5hZGQodCxLLFt0LHMudW5kb2l0LHUudW5kb2l0LHMudHJhY2VzXSxLLFt0LHMucmVkb2l0LHUucmVkb2l0LHMudHJhY2VzXSk7dmFyIGQ9by5zeW5jT3JBc3luYyhwLHQpO3JldHVybiBkJiZkLnRoZW58fChkPVByb21pc2UucmVzb2x2ZSh0KSksZC50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV91cGRhdGUiLHtkYXRhOnMuZXZlbnREYXRhLGxheW91dDp1LmV2ZW50RGF0YX0pLHR9KSl9ZnVuY3Rpb24gUSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMDt2YXIgcj10LmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMSxyfX12YXIgJD1be3BhdHRlcm46L15oaWRkZW5sYWJlbHMvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L14oKHh8eSlheGlzXGQqKVwuKChhdXRvKT9yYW5nZXx0aXRsZVwudGV4dCkvfSx7cGF0dGVybjovYXhpc1xkKlwuc2hvd3NwaWtlcyQvLGF0dHI6Im1vZGViYXIudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi8oaG92ZXJ8ZHJhZyltb2RlJC8sYXR0cjoibW9kZWJhci51aXJldmlzaW9uIn0se3BhdHRlcm46L14oc2NlbmVcZCopXC5jYW1lcmEvfSx7cGF0dGVybjovXihnZW9cZCopXC4ocHJvamVjdGlvbnxjZW50ZXJ8Zml0Ym91bmRzKS99LHtwYXR0ZXJuOi9eKHRlcm5hcnlcZCpcLlthYmNdYXhpcylcLihtaW58dGl0bGVcLnRleHQpJC99LHtwYXR0ZXJuOi9eKHBvbGFyXGQqXC5yYWRpYWxheGlzKVwuKChhdXRvKT9yYW5nZXxhbmdsZXx0aXRsZVwudGV4dCkvfSx7cGF0dGVybjovXihwb2xhclxkKlwuYW5ndWxhcmF4aXMpXC5yb3RhdGlvbi99LHtwYXR0ZXJuOi9eKG1hcGJveFxkKilcLihjZW50ZXJ8em9vbXxiZWFyaW5nfHBpdGNoKS99LHtwYXR0ZXJuOi9ebGVnZW5kXC4oeHx5KSQvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eKHNoYXBlc3xhbm5vdGF0aW9ucykvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9edGl0bGVcLnRleHQkLyxhdHRyOiJlZGl0cmV2aXNpb24ifV0sdHQ9W3twYXR0ZXJuOi9ec2VsZWN0ZWRwb2ludHMkLyxhdHRyOiJzZWxlY3Rpb25yZXZpc2lvbiJ9LHtwYXR0ZXJuOi8oXnx2YWx1ZVwuKXZpc2libGUkLyxhdHRyOiJsZWdlbmQudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eZGltZW5zaW9uc1xbXGQrXF1cLmNvbnN0cmFpbnRyYW5nZS99LHtwYXR0ZXJuOi9ebm9kZVwuKHh8eXxncm91cHMpL30se3BhdHRlcm46L15sZXZlbCQvfSx7cGF0dGVybjovKF58dmFsdWVcLiluYW1lJC99LHtwYXR0ZXJuOi9jb2xvcmJhclwudGl0bGVcLnRleHQkL30se3BhdHRlcm46L2NvbG9yYmFyXC4oeHx5KSQvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9XTtmdW5jdGlvbiBldCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9dC5tYXRjaChuLnBhdHRlcm4pO2lmKGkpcmV0dXJue2hlYWQ6aVsxXSxhdHRyOm4uYXR0cn19fWZ1bmN0aW9uIHJ0KHQsZSl7dmFyIHI9cyhlLHQpLmdldCgpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHI7dmFyIG49dC5zcGxpdCgiLiIpO2ZvcihuLnBvcCgpO24ubGVuZ3RoPjE7KWlmKG4ucG9wKCksdm9pZCAwIT09KHI9cyhlLG4uam9pbigiLiIpKyIudWlyZXZpc2lvbiIpLmdldCgpKSlyZXR1cm4gcjtyZXR1cm4gZS51aXJldmlzaW9ufWZ1bmN0aW9uIG50KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5fZnVsbElucHV0LnVpZD09PXQpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gaXQodCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0udWlkPT09dClyZXR1cm4gbjtyZXR1cm4hZVtyXXx8ZVtyXS51aWQ/LTE6cn1mdW5jdGlvbiBhdCh0LGUpe3ZhciByPW8uaXNQbGFpbk9iamVjdCh0KSxuPUFycmF5LmlzQXJyYXkodCk7cmV0dXJuIHJ8fG4/KHImJm8uaXNQbGFpbk9iamVjdChlKXx8biYmQXJyYXkuaXNBcnJheShlKSkmJkpTT04uc3RyaW5naWZ5KHQpPT09SlNPTi5zdHJpbmdpZnkoZSk6dD09PWV9ZnVuY3Rpb24gb3QodCxlLHIsbil7dmFyIGksYSxsLGM9bi5nZXRWYWxPYmplY3QsdT1uLmZsYWdzLGY9bi5pbW11dGFibGUsaD1uLmluQXJyYXkscD1uLmFycmF5SW5kZXg7ZnVuY3Rpb24gZCgpe3ZhciB0PWkuZWRpdFR5cGU7aCYmLTEhPT10LmluZGV4T2YoImFycmF5ZHJhdyIpP28ucHVzaFVuaXF1ZSh1LmFycmF5c1toXSxwKTooTS51cGRhdGUodSxpKSwibm9uZSIhPT10JiZ1Lm5DaGFuZ2VzKyssbi50cmFuc2l0aW9uJiZpLmFuaW0mJnUubkNoYW5nZXNBbmltKyssKFkudGVzdChsKXx8Vy50ZXN0KGwpKSYmKHUucmFuZ2VzQWx0ZXJlZFtyWzBdXT0xKSxYLnRlc3QobCkmJnMoZSwiX2lucHV0RG9tYWluIikuc2V0KG51bGwpLCJkYXRhcmV2aXNpb24iPT09YSYmKHUubmV3RGF0YVJldmlzaW9uPTEpKX1mdW5jdGlvbiBnKHQpe3JldHVybiJkYXRhX2FycmF5Ij09PXQudmFsVHlwZXx8dC5hcnJheU9rfWZvcihhIGluIHQpe2lmKHUuY2FsYyYmIW4udHJhbnNpdGlvbilyZXR1cm47dmFyIG09dFthXSx2PWVbYV0seT1yLmNvbmNhdChhKTtpZihsPXkuam9pbigiLiIpLCJfIiE9PWEuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgbSYmbSE9PXYpe2lmKCgidGljazAiPT09YXx8ImR0aWNrIj09PWEpJiYiZ2VvIiE9PXJbMF0pe3ZhciB4PWUudGlja21vZGU7aWYoImF1dG8iPT09eHx8ImFycmF5Ij09PXh8fCF4KWNvbnRpbnVlfWlmKCgicmFuZ2UiIT09YXx8IWUuYXV0b3JhbmdlKSYmKCJ6bWluIiE9PWEmJiJ6bWF4IiE9PWF8fCJjb250b3VyY2FycGV0IiE9PWUudHlwZSkmJihpPWMoeSkpJiYoIWkuX2NvbXBhcmVBc0pTT058fEpTT04uc3RyaW5naWZ5KG0pIT09SlNPTi5zdHJpbmdpZnkodikpKXt2YXIgYixfPWkudmFsVHlwZSx3PWcoaSksVD1BcnJheS5pc0FycmF5KG0pLGs9QXJyYXkuaXNBcnJheSh2KTtpZihUJiZrKXt2YXIgQT0iX2lucHV0XyIrYSxTPXRbQV0sRT1lW0FdO2lmKEFycmF5LmlzQXJyYXkoUykmJlM9PT1FKWNvbnRpbnVlfWlmKHZvaWQgMD09PXYpdyYmVD91LmNhbGM9ITA6ZCgpO2Vsc2UgaWYoaS5faXNMaW5rZWRUb0FycmF5KXt2YXIgQz1bXSxMPSExO2h8fCh1LmFycmF5c1thXT1DKTt2YXIgST1NYXRoLm1pbihtLmxlbmd0aCx2Lmxlbmd0aCksUD1NYXRoLm1heChtLmxlbmd0aCx2Lmxlbmd0aCk7aWYoSSE9PVApe2lmKCJhcnJheWRyYXciIT09aS5lZGl0VHlwZSl7ZCgpO2NvbnRpbnVlfUw9ITB9Zm9yKGI9MDtiPEk7YisrKW90KG1bYl0sdltiXSx5LmNvbmNhdChiKSxvLmV4dGVuZEZsYXQoe2luQXJyYXk6YSxhcnJheUluZGV4OmJ9LG4pKTtpZihMKWZvcihiPUk7YjxQO2IrKylDLnB1c2goYil9ZWxzZSFfJiZvLmlzUGxhaW5PYmplY3QobSk/b3QobSx2LHksbik6dz9UJiZrPyhmJiYodS5jYWxjPSEwKSwoZnx8bi5uZXdEYXRhUmV2aXNpb24pJiZkKCkpOlQhPT1rP3UuY2FsYz0hMDpkKCk6VCYmayYmbS5sZW5ndGg9PT12Lmxlbmd0aCYmU3RyaW5nKG0pPT09U3RyaW5nKHYpfHxkKCl9fX1mb3IoYSBpbiBlKWlmKCEoYSBpbiB0KSYmIl8iIT09YS5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBlW2FdKXtpZihnKGk9YyhyLmNvbmNhdChhKSkpJiZBcnJheS5pc0FycmF5KGVbYV0pKXJldHVybiB2b2lkKHUuY2FsYz0hMCk7ZCgpfX1mdW5jdGlvbiBzdCh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighby5lcXVhbERvbVJlY3RzKHIsZS5fbGFzdEJCb3gpKXt2YXIgbj1lLl9pbnZUcmFuc2Zvcm09by5pbnZlcnNlVHJhbnNmb3JtTWF0cml4KG8uZ2V0RnVsbFRyYW5zZm9ybU1hdHJpeCh0KSk7ZS5faW52U2NhbGVYPU1hdGguc3FydChuWzBdWzBdKm5bMF1bMF0rblswXVsxXSpuWzBdWzFdK25bMF1bMl0qblswXVsyXSksZS5faW52U2NhbGVZPU1hdGguc3FydChuWzFdWzBdKm5bMV1bMF0rblsxXVsxXSpuWzFdWzFdK25bMV1bMl0qblsxXVsyXSksZS5fbGFzdEJCb3g9cn19ZnVuY3Rpb24gbHQodCl7dmFyIGU9bi5zZWxlY3QodCkscj10Ll9mdWxsTGF5b3V0O2lmKHIuX2NhbGNJbnZlcnNlVHJhbnNmb3JtPXN0LHIuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHQpLHIuX2NvbnRhaW5lcj1lLnNlbGVjdEFsbCgiLnBsb3QtY29udGFpbmVyIikuZGF0YShbMF0pLHIuX2NvbnRhaW5lci5lbnRlcigpLmluc2VydCgiZGl2IiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgicGxvdC1jb250YWluZXIiLCEwKS5jbGFzc2VkKCJwbG90bHkiLCEwKSxyLl9wYXBlcmRpdj1yLl9jb250YWluZXIuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9wYXBlcmRpdi5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmNsYXNzZWQoInN2Zy1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLHIuX2dsY29udGFpbmVyPXIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLmdsLWNvbnRhaW5lciIpLmRhdGEoW3t9XSksci5fZ2xjb250YWluZXIuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoImdsLWNvbnRhaW5lciIsITApLHIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLm1haW4tc3ZnIikucmVtb3ZlKCksci5fcGFwZXJkaXYuc2VsZWN0KCIubW9kZWJhci1jb250YWluZXIiKS5yZW1vdmUoKSxyLl9wYXBlcj1yLl9wYXBlcmRpdi5pbnNlcnQoInN2ZyIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksci5fdG9wcGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLHIuX21vZGViYXJkaXY9ci5fcGFwZXJkaXYuYXBwZW5kKCJkaXYiKSxkZWxldGUgci5fbW9kZUJhcixyLl9ob3ZlcnBhcGVyPXIuX3BhcGVyZGl2LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgibWFpbi1zdmciLCEwKSwhci5fdWlkKXt2YXIgaT17fTtuLnNlbGVjdEFsbCgiZGVmcyIpLmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5pZCYmKGlbdGhpcy5pZC5zcGxpdCgiLSIpWzFdXT0xKX0pKSxyLl91aWQ9by5yYW5kc3RyKGkpfXIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuYXR0cih5LnN2Z0F0dHJzKSxyLl9kZWZzPXIuX3BhcGVyLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwiZGVmcy0iK3IuX3VpZCksci5fY2xpcHM9ci5fZGVmcy5hcHBlbmQoImciKS5jbGFzc2VkKCJjbGlwcyIsITApLHIuX3RvcGRlZnM9ci5fdG9wcGFwZXIuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJ0b3BkZWZzLSIrci5fdWlkKSxyLl90b3BjbGlwcz1yLl90b3BkZWZzLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNsaXBzIiwhMCksci5fYmdMYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJiZ2xheWVyIiwhMCksci5fZHJhZ2dlcnM9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZHJhZ2xheWVyIiwhMCk7dmFyIGE9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXItYmVsb3ciLCEwKTtyLl9pbWFnZUxvd2VyTGF5ZXI9YS5hcHBlbmQoImciKS5jbGFzc2VkKCJpbWFnZWxheWVyIiwhMCksci5fc2hhcGVMb3dlckxheWVyPWEuYXBwZW5kKCJnIikuY2xhc3NlZCgic2hhcGVsYXllciIsITApLHIuX2NhcnRlc2lhbmxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNhcnRlc2lhbmxheWVyIiwhMCksci5fcG9sYXJsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2xhcmxheWVyIiwhMCksci5fdGVybmFyeWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRlcm5hcnlsYXllciIsITApLHIuX2dlb2xheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdlb2xheWVyIiwhMCksci5fZnVubmVsYXJlYWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImZ1bm5lbGFyZWFsYXllciIsITApLHIuX3BpZWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBpZWxheWVyIiwhMCksci5fdHJlZW1hcGxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRyZWVtYXBsYXllciIsITApLHIuX3N1bmJ1cnN0bGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgic3VuYnVyc3RsYXllciIsITApLHIuX2luZGljYXRvcmxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImluZGljYXRvcmxheWVyIiwhMCksci5fZ2xpbWFnZXM9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2xpbWFnZXMiLCEwKTt2YXIgcz1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJsYXllci1hYm92ZSIsITApO3IuX2ltYWdlVXBwZXJMYXllcj1zLmFwcGVuZCgiZyIpLmNsYXNzZWQoImltYWdlbGF5ZXIiLCEwKSxyLl9zaGFwZVVwcGVyTGF5ZXI9cy5hcHBlbmQoImciKS5jbGFzc2VkKCJzaGFwZWxheWVyIiwhMCksci5faW5mb2xheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImluZm9sYXllciIsITApLHIuX21lbnVsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJtZW51bGF5ZXIiLCEwKSxyLl96b29tbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiem9vbWxheWVyIiwhMCksci5faG92ZXJsYXllcj1yLl9ob3ZlcnBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImhvdmVybGF5ZXIiLCEwKSxyLl9tb2RlYmFyZGl2LmNsYXNzZWQoIm1vZGViYXItY29udGFpbmVyIiwhMCkuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgidG9wIiwiMHB4Iikuc3R5bGUoInJpZ2h0IiwiMHB4IiksdC5lbWl0KCJwbG90bHlfZnJhbWV3b3JrIil9ci5hbmltYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QrIi4gSXQncyBsaWtlbHkgdGhhdCB5b3UndmUgZmFpbGVkIHRvIGNyZWF0ZSBhIHBsb3QgYmVmb3JlIGFuaW1hdGluZyBpdC4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdGx5LmNvbS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIG49dC5fdHJhbnNpdGlvbkRhdGE7bi5fZnJhbWVRdWV1ZXx8KG4uX2ZyYW1lUXVldWU9W10pO3ZhciBpPShyPWguc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHMocikpLnRyYW5zaXRpb24sYT1yLmZyYW1lO2Z1bmN0aW9uIHModCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dD49aS5sZW5ndGg/aVswXTppW3RdOml9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT90Pj1hLmxlbmd0aD9hWzBdOmFbdF06YX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9MDtyZXR1cm4gZnVuY3Rpb24oKXtpZih0JiYrK3I9PT1lKXJldHVybiB0KCl9fXJldHVybiB2b2lkIDA9PT1uLl9mcmFtZVdhaXRpbmdDbnQmJihuLl9mcmFtZVdhaXRpbmdDbnQ9MCksbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsdSl7ZnVuY3Rpb24gZigpe24uX2N1cnJlbnRGcmFtZSYmbi5fY3VycmVudEZyYW1lLm9uQ29tcGxldGUmJm4uX2N1cnJlbnRGcmFtZS5vbkNvbXBsZXRlKCk7dmFyIGU9bi5fY3VycmVudEZyYW1lPW4uX2ZyYW1lUXVldWUuc2hpZnQoKTtpZihlKXt2YXIgcj1lLm5hbWU/ZS5uYW1lLnRvU3RyaW5nKCk6bnVsbDt0Ll9mdWxsTGF5b3V0Ll9jdXJyZW50RnJhbWU9cixuLl9sYXN0RnJhbWVBdD1EYXRlLm5vdygpLG4uX3RpbWVUb05leHQ9ZS5mcmFtZU9wdHMuZHVyYXRpb24saC50cmFuc2l0aW9uKHQsZS5mcmFtZS5kYXRhLGUuZnJhbWUubGF5b3V0LFQuY29lcmNlVHJhY2VJbmRpY2VzKHQsZS5mcmFtZS50cmFjZXMpLGUuZnJhbWVPcHRzLGUudHJhbnNpdGlvbk9wdHMpLnRoZW4oKGZ1bmN0aW9uKCl7ZS5vbkNvbXBsZXRlJiZlLm9uQ29tcGxldGUoKX0pKSx0LmVtaXQoInBsb3RseV9hbmltYXRpbmdmcmFtZSIse25hbWU6cixmcmFtZTplLmZyYW1lLGFuaW1hdGlvbjp7ZnJhbWU6ZS5mcmFtZU9wdHMsdHJhbnNpdGlvbjplLnRyYW5zaXRpb25PcHRzfX0pfWVsc2UgdC5lbWl0KCJwbG90bHlfYW5pbWF0ZWQiKSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobi5fYW5pbWF0aW9uUmFmKSxuLl9hbmltYXRpb25SYWY9bnVsbH1mdW5jdGlvbiBwKCl7dC5lbWl0KCJwbG90bHlfYW5pbWF0aW5nIiksbi5fbGFzdEZyYW1lQXQ9LTEvMCxuLl90aW1lVG9OZXh0PTAsbi5fcnVubmluZ1RyYW5zaXRpb25zPTAsbi5fY3VycmVudEZyYW1lPW51bGw7dmFyIGU9ZnVuY3Rpb24oKXtuLl9hbmltYXRpb25SYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxEYXRlLm5vdygpLW4uX2xhc3RGcmFtZUF0Pm4uX3RpbWVUb05leHQmJmYoKX07ZSgpfXZhciBkLGcsbT0wO2Z1bmN0aW9uIHYodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/bT49aS5sZW5ndGg/dC50cmFuc2l0aW9uT3B0cz1pW21dOnQudHJhbnNpdGlvbk9wdHM9aVswXTp0LnRyYW5zaXRpb25PcHRzPWksbSsrLHR9dmFyIHk9W10seD1udWxsPT1lLGI9QXJyYXkuaXNBcnJheShlKTtpZigheCYmIWImJm8uaXNQbGFpbk9iamVjdChlKSl5LnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTp2KG8uZXh0ZW5kRmxhdCh7fSxlKSl9KTtlbHNlIGlmKHh8fC0xIT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiBlKSlmb3IoZD0wO2Q8bi5fZnJhbWVzLmxlbmd0aDtkKyspKGc9bi5fZnJhbWVzW2RdKSYmKHh8fFN0cmluZyhnLmdyb3VwKT09PVN0cmluZyhlKSkmJnkucHVzaCh7dHlwZToiYnluYW1lIixuYW1lOlN0cmluZyhnLm5hbWUpLGRhdGE6dih7bmFtZTpnLm5hbWV9KX0pO2Vsc2UgaWYoYilmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgXz1lW2RdOy0xIT09WyJudW1iZXIiLCJzdHJpbmciXS5pbmRleE9mKHR5cGVvZiBfKT8oXz1TdHJpbmcoXykseS5wdXNoKHt0eXBlOiJieW5hbWUiLG5hbWU6XyxkYXRhOnYoe25hbWU6X30pfSkpOm8uaXNQbGFpbk9iamVjdChfKSYmeS5wdXNoKHt0eXBlOiJvYmplY3QiLGRhdGE6dihvLmV4dGVuZEZsYXQoe30sXykpfSl9Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylpZigiYnluYW1lIj09PShnPXlbZF0pLnR5cGUmJiFuLl9mcmFtZUhhc2hbZy5kYXRhLm5hbWVdKXJldHVybiBvLndhcm4oJ2FuaW1hdGUgZmFpbHVyZTogZnJhbWUgbm90IGZvdW5kOiAiJytnLmRhdGEubmFtZSsnIicpLHZvaWQgdSgpOy0xIT09WyJuZXh0IiwiaW1tZWRpYXRlIl0uaW5kZXhPZihyLm1vZGUpJiZmdW5jdGlvbigpe2lmKDAhPT1uLl9mcmFtZVF1ZXVlLmxlbmd0aCl7Zm9yKDtuLl9mcmFtZVF1ZXVlLmxlbmd0aDspe3ZhciBlPW4uX2ZyYW1lUXVldWUucG9wKCk7ZS5vbkludGVycnVwdCYmZS5vbkludGVycnVwdCgpfXQuZW1pdCgicGxvdGx5X2FuaW1hdGlvbmludGVycnVwdGVkIixbXSl9fSgpLCJyZXZlcnNlIj09PXIuZGlyZWN0aW9uJiZ5LnJldmVyc2UoKTt2YXIgdz10Ll9mdWxsTGF5b3V0Ll9jdXJyZW50RnJhbWU7aWYodyYmci5mcm9tY3VycmVudCl7dmFyIGs9LTE7Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylpZigiYnluYW1lIj09PShnPXlbZF0pLnR5cGUmJmcubmFtZT09PXcpe2s9ZDticmVha31pZihrPjAmJms8eS5sZW5ndGgtMSl7dmFyIE09W107Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylnPXlbZF0sKCJieW5hbWUiIT09eVtkXS50eXBlfHxkPmspJiZNLnB1c2goZyk7eT1NfX15Lmxlbmd0aD4wP2Z1bmN0aW9uKGUpe2lmKDAhPT1lLmxlbmd0aCl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvO289ImJ5bmFtZSI9PT1lW2ldLnR5cGU/aC5jb21wdXRlRnJhbWUodCxlW2ldLm5hbWUpOmVbaV0uZGF0YTt2YXIgZj1sKGkpLGQ9cyhpKTtkLmR1cmF0aW9uPU1hdGgubWluKGQuZHVyYXRpb24sZi5kdXJhdGlvbik7dmFyIGc9e2ZyYW1lOm8sbmFtZTplW2ldLm5hbWUsZnJhbWVPcHRzOmYsdHJhbnNpdGlvbk9wdHM6ZH07aT09PWUubGVuZ3RoLTEmJihnLm9uQ29tcGxldGU9YyhhLDIpLGcub25JbnRlcnJ1cHQ9dSksbi5fZnJhbWVRdWV1ZS5wdXNoKGcpfSJpbW1lZGlhdGUiPT09ci5tb2RlJiYobi5fbGFzdEZyYW1lQXQ9LTEvMCksbi5fYW5pbWF0aW9uUmFmfHxwKCl9fSh5KToodC5lbWl0KCJwbG90bHlfYW5pbWF0ZWQiKSxhKCkpfSkpfSxyLmFkZEZyYW1lcz1mdW5jdGlvbih0LGUscil7aWYodD1vLmdldEdyYXBoRGl2KHQpLG51bGw9PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2lmKCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KyIuIEl0J3MgbGlrZWx5IHRoYXQgeW91J3ZlIGZhaWxlZCB0byBjcmVhdGUgYSBwbG90IGJlZm9yZSBhZGRpbmcgZnJhbWVzLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90bHkuY29tL2phdmFzY3JpcHQvYW5pbWF0aW9ucy8iKTt2YXIgbixpLGEscyxsPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsdT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBFcnJvcigiYWRkRnJhbWVzIGZhaWx1cmU6IGZyYW1lTGlzdCBtdXN0IGJlIGFuIEFycmF5IG9mIGZyYW1lIGRlZmluaXRpb25zIitlKTt2YXIgZj1sLmxlbmd0aCsyKmUubGVuZ3RoLHA9W10sZD17fTtmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKG8uaXNQbGFpbk9iamVjdChlW25dKSl7dmFyIGc9ZVtuXS5uYW1lLG09KHVbZ118fGRbZ118fHt9KS5uYW1lLHY9ZVtuXS5uYW1lLHk9dVttXXx8ZFttXTttJiZ2JiYibnVtYmVyIj09dHlwZW9mIHYmJnkmJlM8NSYmKFMrKyxvLndhcm4oJ2FkZEZyYW1lczogb3ZlcndyaXRpbmcgZnJhbWUgIicrKHVbbV18fGRbbV0pLm5hbWUrJyIgd2l0aCBhIGZyYW1lIHdob3NlIG5hbWUgb2YgdHlwZSAibnVtYmVyIiBhbHNvIGVxdWF0ZXMgdG8gIicrbSsnIi4gVGhpcyBpcyB2YWxpZCBidXQgbWF5IHBvdGVudGlhbGx5IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBzaW5jZSBhbGwgcGxvdGx5LmpzIGZyYW1lIG5hbWVzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBhcyBzdHJpbmdzLicpLDU9PT1TJiZvLndhcm4oImFkZEZyYW1lczogVGhpcyBBUEkgY2FsbCBoYXMgeWllbGRlZCB0b28gbWFueSBvZiB0aGVzZSB3YXJuaW5ncy4gRm9yIHRoZSByZXN0IG9mIHRoaXMgY2FsbCwgZnVydGhlciB3YXJuaW5ncyBhYm91dCBudW1lcmljIGZyYW1lIG5hbWVzIHdpbGwgYmUgc3VwcHJlc3NlZC4iKSksZFtnXT17bmFtZTpnfSxwLnB1c2goe2ZyYW1lOmguc3VwcGx5RnJhbWVEZWZhdWx0cyhlW25dKSxpbmRleDpyJiZ2b2lkIDAhPT1yW25dJiZudWxsIT09cltuXT9yW25dOmYrbn0pfXAuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbmRleD5lLmluZGV4Py0xOnQuaW5kZXg8ZS5pbmRleD8xOjB9KSk7dmFyIHg9W10sYj1bXSxfPWwubGVuZ3RoO2ZvcihuPXAubGVuZ3RoLTE7bj49MDtuLS0pe2lmKCJudW1iZXIiPT10eXBlb2YoaT1wW25dLmZyYW1lKS5uYW1lJiZvLndhcm4oIldhcm5pbmc6IGFkZEZyYW1lcyBhY2NlcHRzIGZyYW1lcyB3aXRoIG51bWVyaWMgbmFtZXMsIGJ1dCB0aGUgbnVtYmVycyBhcmVpbXBsaWNpdGx5IGNhc3QgdG8gc3RyaW5ncyIpLCFpLm5hbWUpZm9yKDt1W2kubmFtZT0iZnJhbWUgIit0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcisrXTspO2lmKHVbaS5uYW1lXSl7Zm9yKGE9MDthPGwubGVuZ3RoJiYobFthXXx8e30pLm5hbWUhPT1pLm5hbWU7YSsrKTt4LnB1c2goe3R5cGU6InJlcGxhY2UiLGluZGV4OmEsdmFsdWU6aX0pLGIudW5zaGlmdCh7dHlwZToicmVwbGFjZSIsaW5kZXg6YSx2YWx1ZTpsW2FdfSl9ZWxzZSBzPU1hdGgubWF4KDAsTWF0aC5taW4ocFtuXS5pbmRleCxfKSkseC5wdXNoKHt0eXBlOiJpbnNlcnQiLGluZGV4OnMsdmFsdWU6aX0pLGIudW5zaGlmdCh7dHlwZToiZGVsZXRlIixpbmRleDpzfSksXysrfXZhciB3PWgubW9kaWZ5RnJhbWVzLFQ9aC5tb2RpZnlGcmFtZXMsaz1bdCxiXSxNPVt0LHhdO3JldHVybiBjJiZjLmFkZCh0LHcsayxULE0pLGgubW9kaWZ5RnJhbWVzKHQseCl9LHIuZGVsZXRlRnJhbWVzPWZ1bmN0aW9uKHQsZSl7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KTt2YXIgcixuLGk9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxhPVtdLHM9W107aWYoIWUpZm9yKGU9W10scj0wO3I8aS5sZW5ndGg7cisrKWUucHVzaChyKTtmb3IoKGU9ZS5zbGljZSgpKS5zb3J0KCkscj1lLmxlbmd0aC0xO3I+PTA7ci0tKW49ZVtyXSxhLnB1c2goe3R5cGU6ImRlbGV0ZSIsaW5kZXg6bn0pLHMudW5zaGlmdCh7dHlwZToiaW5zZXJ0IixpbmRleDpuLHZhbHVlOmlbbl19KTt2YXIgbD1oLm1vZGlmeUZyYW1lcyx1PWgubW9kaWZ5RnJhbWVzLGY9W3Qsc10scD1bdCxhXTtyZXR1cm4gYyYmYy5hZGQodCxsLGYsdSxwKSxoLm1vZGlmeUZyYW1lcyh0LGEpfSxyLmFkZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpKXtlPW8uZ2V0R3JhcGhEaXYoZSk7dmFyIGEscyxsPVtdLHU9ci5kZWxldGVUcmFjZXMsZj10LGg9W2UsbF0scD1bZSxuXTtmb3IoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheS4iKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJ0cmFjZXMgbXVzdCBiZSBkZWZpbmVkLiIpO2ZvcihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLG49MDtuPGUubGVuZ3RoO24rKylpZigib2JqZWN0IiE9dHlwZW9mKGk9ZVtuXSl8fEFycmF5LmlzQXJyYXkoaSl8fG51bGw9PT1pKXRocm93IG5ldyBFcnJvcigiYWxsIHZhbHVlcyBpbiB0cmFjZXMgYXJyYXkgbXVzdCBiZSBub24tYXJyYXkgb2JqZWN0cyIpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSwidW5kZWZpbmVkIiE9dHlwZW9mIHImJnIubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpZiBpbmRpY2VzIGlzIHNwZWNpZmllZCwgdHJhY2VzLmxlbmd0aCBtdXN0IGVxdWFsIGluZGljZXMubGVuZ3RoIil9KGUsbixpKSxBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLG49bi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQoe30sdCl9KSksVC5jbGVhbkRhdGEobiksYT0wO2E8bi5sZW5ndGg7YSsrKWUuZGF0YS5wdXNoKG5bYV0pO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspbC5wdXNoKC1uLmxlbmd0aCthKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIGkpcmV0dXJuIHM9ci5yZWRyYXcoZSksYy5hZGQoZSx1LGgsZixwKSxzO0FycmF5LmlzQXJyYXkoaSl8fChpPVtpXSk7dHJ5e08oZSxsLGkpfWNhdGNoKHQpe3Rocm93IGUuZGF0YS5zcGxpY2UoZS5kYXRhLmxlbmd0aC1uLmxlbmd0aCxuLmxlbmd0aCksdH1yZXR1cm4gYy5zdGFydFNlcXVlbmNlKGUpLGMuYWRkKGUsdSxoLGYscCkscz1yLm1vdmVUcmFjZXMoZSxsLGkpLGMuc3RvcFNlcXVlbmNlKGUpLHN9LHIuZGVsZXRlVHJhY2VzPWZ1bmN0aW9uIHQoZSxuKXtlPW8uZ2V0R3JhcGhEaXYoZSk7dmFyIGksYSxzPVtdLGw9ci5hZGRUcmFjZXMsdT10LGY9W2UscyxuXSxoPVtlLG5dO2lmKCJ1bmRlZmluZWQiPT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoImluZGljZXMgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIGFycmF5IG9mIGludGVnZXJzLiIpO2ZvcihBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLHooZSxuLCJpbmRpY2VzIiksKG49UChuLGUuZGF0YS5sZW5ndGgtMSkpLnNvcnQoby5zb3J0ZXJEZXMpLGk9MDtpPG4ubGVuZ3RoO2krPTEpYT1lLmRhdGEuc3BsaWNlKG5baV0sMSlbMF0scy5wdXNoKGEpO3ZhciBwPXIucmVkcmF3KGUpO3JldHVybiBjLmFkZChlLGwsZix1LGgpLHB9LHIuZXh0ZW5kVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGksYSl7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG4saTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPDApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9Uih0LGUpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheShsKSksaS5zZXQodCksaS5zZXQoZS5zdWJhcnJheSgwLGwpLHQubGVuZ3RoKX1lbHNle3ZhciBjPXItZS5sZW5ndGgsdT10Lmxlbmd0aC1jO24uc2V0KHQuc3ViYXJyYXkodSkpLG4uc2V0KGUsYyksaS5zZXQodC5zdWJhcnJheSgwLHUpKX1lbHNlIG49dC5jb25jYXQoZSksaT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKDAsbi5sZW5ndGgtcik6W107cmV0dXJuW24saV19dmFyIGw9RChlPW8uZ2V0R3JhcGhEaXYoZSksbixpLGEscyksdT1yLnJlZHJhdyhlKSxmPVtlLGwudXBkYXRlLGksbC5tYXhQb2ludHNdO3JldHVybiBjLmFkZChlLHIucHJlcGVuZFRyYWNlcyxmLHQsYXJndW1lbnRzKSx1fSxyLm1vdmVUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7dmFyIGEscz1bXSxsPVtdLHU9dCxmPXQsaD1bZT1vLmdldEdyYXBoRGl2KGUpLGksbl0scD1bZSxuLGldO2lmKE8oZSxuLGkpLG49QXJyYXkuaXNBcnJheShuKT9uOltuXSwidW5kZWZpbmVkIj09dHlwZW9mIGkpZm9yKGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWkucHVzaCgtbi5sZW5ndGgrYSk7Zm9yKGk9QXJyYXkuaXNBcnJheShpKT9pOltpXSxuPVAobixlLmRhdGEubGVuZ3RoLTEpLGk9UChpLGUuZGF0YS5sZW5ndGgtMSksYT0wO2E8ZS5kYXRhLmxlbmd0aDthKyspLTE9PT1uLmluZGV4T2YoYSkmJnMucHVzaChlLmRhdGFbYV0pO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspbC5wdXNoKHtuZXdJbmRleDppW2FdLHRyYWNlOmUuZGF0YVtuW2FdXX0pO2ZvcihsLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmV3SW5kZXgtZS5uZXdJbmRleH0pKSxhPTA7YTxsLmxlbmd0aDthKz0xKXMuc3BsaWNlKGxbYV0ubmV3SW5kZXgsMCxsW2FdLnRyYWNlKTtlLmRhdGE9czt2YXIgZD1yLnJlZHJhdyhlKTtyZXR1cm4gYy5hZGQoZSx1LGgsZixwKSxkfSxyLnByZXBlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSxhKXtmdW5jdGlvbiBzKHQsZSxyKXt2YXIgbixpO2lmKG8uaXNUeXBlZEFycmF5KHQpKWlmKHI8PTApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9UihlLHQpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheSgwLGwpKSxpLnNldChlLnN1YmFycmF5KGwpKSxpLnNldCh0LGwpfWVsc2V7dmFyIGM9ci1lLmxlbmd0aDtuLnNldChlKSxuLnNldCh0LnN1YmFycmF5KDAsYyksZS5sZW5ndGgpLGkuc2V0KHQuc3ViYXJyYXkoYykpfWVsc2Ugbj1lLmNvbmNhdCh0KSxpPXI+PTAmJnI8bi5sZW5ndGg/bi5zcGxpY2UocixuLmxlbmd0aCk6W107cmV0dXJuW24saV19dmFyIGw9RChlPW8uZ2V0R3JhcGhEaXYoZSksbixpLGEscyksdT1yLnJlZHJhdyhlKSxmPVtlLGwudXBkYXRlLGksbC5tYXhQb2ludHNdO3JldHVybiBjLmFkZChlLHIuZXh0ZW5kVHJhY2VzLGYsdCxhcmd1bWVudHMpLHV9LHIubmV3UGxvdD1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gdD1vLmdldEdyYXBoRGl2KHQpLGguY2xlYW5QbG90KFtdLHt9LHQuX2Z1bGxEYXRhfHxbXSx0Ll9mdWxsTGF5b3V0fHx7fSksaC5wdXJnZSh0KSxyLnBsb3QodCxlLG4saSl9LHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXt2YXIgcztpZih0PW8uZ2V0R3JhcGhEaXYodCksbC5pbml0KHQpLG8uaXNQbGFpbk9iamVjdChlKSl7dmFyIGM9ZTtlPWMuZGF0YSxpPWMubGF5b3V0LGE9Yy5jb25maWcscz1jLmZyYW1lc31pZighMT09PWwudHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2JlZm9yZXBsb3QiLFtlLGksYV0pKXJldHVybiBQcm9taXNlLnJlamVjdCgpO2V8fGl8fG8uaXNQbG90RGl2KHQpfHxvLndhcm4oIkNhbGxpbmcgUGxvdGx5LnBsb3QgYXMgaWYgcmVkcmF3aW5nIGJ1dCB0aGlzIGNvbnRhaW5lciBkb2Vzbid0IHlldCBoYXZlIGEgcGxvdC4iLHQpLEkodCxhKSxpfHwoaT17fSksbi5zZWxlY3QodCkuY2xhc3NlZCgianMtcGxvdGx5LXBsb3QiLCEwKSxnLm1ha2VUZXN0ZXIoKSxBcnJheS5pc0FycmF5KHQuX3Byb21pc2VzKXx8KHQuX3Byb21pc2VzPVtdKTt2YXIgZj0wPT09KHQuZGF0YXx8W10pLmxlbmd0aCYmQXJyYXkuaXNBcnJheShlKTtBcnJheS5pc0FycmF5KGUpJiYoVC5jbGVhbkRhdGEoZSksZj90LmRhdGE9ZTp0LmRhdGEucHVzaC5hcHBseSh0LmRhdGEsZSksdC5lbXB0eT0hMSksdC5sYXlvdXQmJiFmfHwodC5sYXlvdXQ9VC5jbGVhbkxheW91dChpKSksaC5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgbT10Ll9mdWxsTGF5b3V0LHk9bS5faGFzKCJjYXJ0ZXNpYW4iKTtpZighbS5faGFzKCJwb2xhciIpJiZlJiZlWzBdJiZlWzBdLnIpcmV0dXJuIG8ubG9nKCJMZWdhY3kgcG9sYXIgY2hhcnRzIGFyZSBkZXByZWNhdGVkISIpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5wbG90LWNvbnRhaW5lciIpLmRhdGEoWzBdKTtpLmVudGVyKCkuaW5zZXJ0KCJkaXYiLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKCJwbG90LWNvbnRhaW5lciBwbG90bHkiLCEwKTt2YXIgYT1pLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKS5kYXRhKFswXSk7YS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgic3ZnLWNvbnRhaW5lciIsITApLnN0eWxlKCJwb3NpdGlvbiIsInJlbGF0aXZlIiksYS5odG1sKCIiKSxlJiYodC5kYXRhPWUpO3ImJih0LmxheW91dD1yKTtwLm1hbmFnZXIuZmlsbExheW91dCh0KSxhLnN0eWxlKHt3aWR0aDp0Ll9mdWxsTGF5b3V0LndpZHRoKyJweCIsaGVpZ2h0OnQuX2Z1bGxMYXlvdXQuaGVpZ2h0KyJweCJ9KSx0LmZyYW1ld29yaz1wLm1hbmFnZXIuZnJhbWV3b3JrKHQpLHQuZnJhbWV3b3JrKHtkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXR9LGEubm9kZSgpKSx0LmZyYW1ld29yay5zZXRVbmRvUG9pbnQoKTt2YXIgcz10LmZyYW1ld29yay5zdmcoKSxsPTEsYz10Ll9mdWxsTGF5b3V0LnRpdGxlP3QuX2Z1bGxMYXlvdXQudGl0bGUudGV4dDoiIjsiIiE9PWMmJmN8fChsPTApO3ZhciB1PWZ1bmN0aW9uKCl7dGhpcy5jYWxsKHguY29udmVydFRvVHNwYW5zLHQpfSxmPXMuc2VsZWN0KCIudGl0bGUtZ3JvdXAgdGV4dCIpLmNhbGwodSk7aWYodC5fY29udGV4dC5lZGl0cy50aXRsZVRleHQpe3ZhciBkPW8uXyh0LCJDbGljayB0byBlbnRlciBQbG90IHRpdGxlIik7YyYmYyE9PWR8fChsPS4yLGYuYXR0cih7ImRhdGEtdW5mb3JtYXR0ZWQiOmR9KS50ZXh0KGQpLnN0eWxlKHtvcGFjaXR5Omx9KS5vbigibW91c2VvdmVyLm9wYWNpdHkiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKCJvcGFjaXR5IiwxKX0pKS5vbigibW91c2VvdXQub3BhY2l0eSIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDFlMykuc3R5bGUoIm9wYWNpdHkiLDApfSkpKTt2YXIgZz1mdW5jdGlvbigpe3RoaXMuY2FsbCh4Lm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKCJlZGl0IiwoZnVuY3Rpb24oZSl7dC5mcmFtZXdvcmsoe2xheW91dDp7dGl0bGU6e3RleHQ6ZX19fSksdGhpcy50ZXh0KGUpLmNhbGwodSksdGhpcy5jYWxsKGcpfSkpLm9uKCJjYW5jZWwiLChmdW5jdGlvbigpe3ZhciB0PXRoaXMuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIpO3RoaXMudGV4dCh0KS5jYWxsKHUpfSkpfTtmLmNhbGwoZyl9cmV0dXJuIHQuX2NvbnRleHQuc2V0QmFja2dyb3VuZCh0LHQuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvciksaC5hZGRMaW5rcyh0KSxQcm9taXNlLnJlc29sdmUoKX0odCxlLGkpO20uX3JlcGxvdHRpbmc9ITAsKGZ8fG0uX3Nob3VsZENyZWF0ZUJnTGF5ZXIpJiYobHQodCksbS5fc2hvdWxkQ3JlYXRlQmdMYXllciYmZGVsZXRlIG0uX3Nob3VsZENyZWF0ZUJnTGF5ZXIpLHQuZnJhbWV3b3JrIT09bHQmJih0LmZyYW1ld29yaz1sdCxsdCh0KSksZy5pbml0R3JhZGllbnRzKHQpLGYmJmQuc2F2ZVNob3dTcGlrZUluaXRpYWwodCk7dmFyIGI9IXQuY2FsY2RhdGF8fHQuY2FsY2RhdGEubGVuZ3RoIT09KHQuX2Z1bGxEYXRhfHxbXSkubGVuZ3RoO2ImJmguZG9DYWxjZGF0YSh0KTtmb3IodmFyIF89MDtfPHQuY2FsY2RhdGEubGVuZ3RoO18rKyl0LmNhbGNkYXRhW19dWzBdLnRyYWNlPXQuX2Z1bGxEYXRhW19dO3QuX2NvbnRleHQucmVzcG9uc2l2ZT90Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyfHwodC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcj1mdW5jdGlvbigpe28uaXNIaWRkZW4odCl8fGgucmVzaXplKHQpfSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKSk6by5jbGVhclJlc3BvbnNpdmUodCk7dmFyIHc9by5leHRlbmRGbGF0KHt9LG0uX3NpemUpLE09MDtmdW5jdGlvbiBBKCl7aWYoaC5jbGVhckF1dG9NYXJnaW5JZHModCksay5kcmF3TWFyZ2luUHVzaGVycyh0KSxkLmFsbG93QXV0b01hcmdpbih0KSxtLl9oYXMoInBpZSIpKWZvcih2YXIgZT10Ll9mdWxsRGF0YSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07InBpZSI9PT1uLnR5cGUmJm4uYXV0b21hcmdpbiYmaC5hbGxvd0F1dG9NYXJnaW4odCwicGllLiIrbi51aWQrIi5hdXRvbWFyZ2luIil9cmV0dXJuIGguZG9BdXRvTWFyZ2luKHQpLGgucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBTKCl7dC5fdHJhbnNpdGlvbmluZ3x8KGsuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyh0KSxmJiZkLnNhdmVSYW5nZUluaXRpYWwodCksdS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiY2FsY0F1dG9yYW5nZSIpKHQpKX12YXIgQz1baC5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYocylyZXR1cm4gci5hZGRGcmFtZXModCxzKX0sZnVuY3Rpb24gZSgpe2Zvcih2YXIgcj1tLl9iYXNlUGxvdE1vZHVsZXMsbj0wO248ci5sZW5ndGg7bisrKXJbbl0uZHJhd0ZyYW1ld29yayYmcltuXS5kcmF3RnJhbWV3b3JrKHQpO2lmKCFtLl9nbGNhbnZhcyYmbS5faGFzKCJnbCIpJiYobS5fZ2xjYW52YXM9bS5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIuZ2wtY2FudmFzIikuZGF0YShbe2tleToiY29udGV4dExheWVyIixjb250ZXh0OiEwLHBpY2s6ITF9LHtrZXk6ImZvY3VzTGF5ZXIiLGNvbnRleHQ6ITEscGljazohMX0se2tleToicGlja0xheWVyIixjb250ZXh0OiExLHBpY2s6ITB9XSwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpLG0uX2dsY2FudmFzLmVudGVyKCkuYXBwZW5kKCJjYW52YXMiKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJnbC1jYW52YXMgZ2wtY2FudmFzLSIrdC5rZXkucmVwbGFjZSgiTGF5ZXIiLCIiKX0pKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsb3ZlcmZsb3c6InZpc2libGUiLCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSkpLG0uX2dsY2FudmFzKXttLl9nbGNhbnZhcy5hdHRyKCJ3aWR0aCIsbS53aWR0aCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCk7dmFyIGk9bS5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2w7aWYoaSYmKE1hdGguZmxvb3IobS53aWR0aCkhPT1pLl9nbC5kcmF3aW5nQnVmZmVyV2lkdGh8fE1hdGguZmxvb3IobS5oZWlnaHQpIT09aS5fZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCkpe3ZhciBhPSJXZWJHTCBjb250ZXh0IGJ1ZmZlciBhbmQgY2FudmFzIGRpbWVuc2lvbnMgZG8gbm90IG1hdGNoIGR1ZSB0byBicm93c2VyL1dlYkdMIGJ1Zy4iO2lmKCFNKXJldHVybiBvLmxvZyhhKyIgQ2xlYXJpbmcgZ3JhcGggYW5kIHBsb3R0aW5nIGFnYWluLiIpLGguY2xlYW5QbG90KFtdLHt9LHQuX2Z1bGxEYXRhLG0pLGguc3VwcGx5RGVmYXVsdHModCksbT10Ll9mdWxsTGF5b3V0LGguZG9DYWxjZGF0YSh0KSxNKyssZSgpO28uZXJyb3IoYSl9fXJldHVybiJoIj09PW0ubW9kZWJhci5vcmllbnRhdGlvbj9tLl9tb2RlYmFyZGl2LnN0eWxlKCJoZWlnaHQiLG51bGwpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTptLl9tb2RlYmFyZGl2LnN0eWxlKCJ3aWR0aCIsbnVsbCkuc3R5bGUoImhlaWdodCIsbS5oZWlnaHQrInB4IiksaC5wcmV2aW91c1Byb21pc2VzKHQpfSxBLGZ1bmN0aW9uKCl7aWYoaC5kaWRNYXJnaW5DaGFuZ2UodyxtLl9zaXplKSlyZXR1cm4gby5zeW5jT3JBc3luYyhbQSxrLmxheW91dFN0eWxlc10sdCl9XTt5JiZDLnB1c2goKGZ1bmN0aW9uKCl7aWYoYilyZXR1cm4gby5zeW5jT3JBc3luYyhbdS5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImNhbGNBdXRvcmFuZ2UiKSx1LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJjYWxjQXV0b3JhbmdlIiksU10sdCk7UygpfSkpLEMucHVzaChrLmxheW91dFN0eWxlcykseSYmQy5wdXNoKChmdW5jdGlvbigpe3JldHVybiBkLmRyYXcodCxmPyIiOiJyZWRyYXciKX0pLChmdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlJiZxKHQsdC5fZnVsbExheW91dC5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZSkudGhlbigoZnVuY3Rpb24oKXt0Ll9mdWxsTGF5b3V0Ll9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlPXZvaWQgMH0pKX0pKSxDLnB1c2goay5kcmF3RGF0YSxrLmZpbmFsRHJhdyx2LGguYWRkTGlua3MsaC5yZWhvdmVyLGgucmVkcmFnLGguZG9BdXRvTWFyZ2luLChmdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlJiZmJiZkLnNhdmVSYW5nZUluaXRpYWwodCwhMCl9KSxoLnByZXZpb3VzUHJvbWlzZXMpO3ZhciBMPW8uc3luY09yQXN5bmMoQyx0KTtyZXR1cm4gTCYmTC50aGVufHwoTD1Qcm9taXNlLnJlc29sdmUoKSksTC50aGVuKChmdW5jdGlvbigpe3JldHVybiBFKHQpLHR9KSl9LHIucHVyZ2U9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9by5nZXRHcmFwaERpdih0KSkuX2Z1bGxMYXlvdXR8fHt9LHI9dC5fZnVsbERhdGF8fFtdO3JldHVybiBoLmNsZWFuUGxvdChbXSx7fSxyLGUpLGgucHVyZ2UodCksbC5wdXJnZSh0KSxlLl9jb250YWluZXImJmUuX2NvbnRhaW5lci5yZW1vdmUoKSxkZWxldGUgdC5fY29udGV4dCx0fSxyLnJlYWN0PWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhLGw7dD1vLmdldEdyYXBoRGl2KHQpLFQuY2xlYXJQcm9taXNlUXVldWUodCk7dmFyIGM9dC5fZnVsbERhdGEscD10Ll9mdWxsTGF5b3V0O2lmKG8uaXNQbG90RGl2KHQpJiZjJiZwKXtpZihvLmlzUGxhaW5PYmplY3QoZSkpe3ZhciBkPWU7ZT1kLmRhdGEsbj1kLmxheW91dCxpPWQuY29uZmlnLGE9ZC5mcmFtZXN9dmFyIGc9ITE7aWYoaSl7dmFyIG09by5leHRlbmREZWVwKHt9LHQuX2NvbnRleHQpO3QuX2NvbnRleHQ9dm9pZCAwLEkodCxpKSxnPWZ1bmN0aW9uIHQoZSxyKXt2YXIgbjtmb3IobiBpbiBlKWlmKCJfIiE9PW4uY2hhckF0KDApKXt2YXIgaT1lW25dLGE9cltuXTtpZihpIT09YSlpZihvLmlzUGxhaW5PYmplY3QoaSkmJm8uaXNQbGFpbk9iamVjdChhKSl7aWYodChpLGEpKXJldHVybiEwfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkoaSl8fCFBcnJheS5pc0FycmF5KGEpKXJldHVybiEwO2lmKGkubGVuZ3RoIT09YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspaWYoaVtzXSE9PWFbc10pe2lmKCFvLmlzUGxhaW5PYmplY3QoaVtzXSl8fCFvLmlzUGxhaW5PYmplY3QoYVtzXSkpcmV0dXJuITA7aWYodChpW3NdLGFbc10pKXJldHVybiEwfX19fShtLHQuX2NvbnRleHQpfXQuZGF0YT1lfHxbXSxULmNsZWFuRGF0YSh0LmRhdGEpLHQubGF5b3V0PW58fHt9LFQuY2xlYW5MYXlvdXQodC5sYXlvdXQpLGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbCxjLHUsZixoLHAsZD1uLl9wcmVHVUksZz1bXSxtPXt9O2ZvcihpIGluIGQpe2lmKHU9ZXQoaSwkKSl7aWYoYT11LmF0dHJ8fHUuaGVhZCsiLnVpcmV2aXNpb24iLChjPShsPXMobixhKS5nZXQoKSkmJnJ0KGEsZSkpJiZjPT09bCYmKG51bGw9PT0oZj1kW2ldKSYmKGY9dm9pZCAwKSxhdChwPShoPXMoZSxpKSkuZ2V0KCksZikpKXt2b2lkIDA9PT1wJiYiYXV0b3JhbmdlIj09PWkuc3Vic3RyKGkubGVuZ3RoLTkpJiZnLnB1c2goaS5zdWJzdHIoMCxpLmxlbmd0aC0xMCkpLGguc2V0KEIocyhuLGkpLmdldCgpKSk7Y29udGludWV9fWVsc2Ugby53YXJuKCJ1bnJlY29nbml6ZWQgR1VJIGVkaXQ6ICIraSk7ZGVsZXRlIGRbaV0sInJhbmdlWyI9PT1pLnN1YnN0cihpLmxlbmd0aC04LDYpJiYobVtpLnN1YnN0cigwLGkubGVuZ3RoLTkpXT0xKX1mb3IodmFyIHY9MDt2PGcubGVuZ3RoO3YrKyl7dmFyIHk9Z1t2XTtpZihtW3ldKXt2YXIgeD1zKGUseSkuZ2V0KCk7eCYmZGVsZXRlIHguYXV0b3JhbmdlfX12YXIgYj1uLl90cmFjZVByZUdVSTtmb3IodmFyIF8gaW4gYil7dmFyIHcsVD1iW19dLGs9bnVsbDtmb3IoaSBpbiBUKXtpZighayl7dmFyIE09bnQoXyxyKTtpZihNPDApe2RlbGV0ZSBiW19dO2JyZWFrfXZhciBBPWl0KF8sdCwodz1yW01dLl9mdWxsSW5wdXQpLmluZGV4KTtpZihBPDApe2RlbGV0ZSBiW19dO2JyZWFrfWs9dFtBXX1pZih1PWV0KGksdHQpKXtpZih1LmF0dHI/Yz0obD1zKG4sdS5hdHRyKS5nZXQoKSkmJnJ0KHUuYXR0cixlKToobD13LnVpcmV2aXNpb24sdm9pZCAwPT09KGM9ay51aXJldmlzaW9uKSYmKGM9ZS51aXJldmlzaW9uKSksYyYmYz09PWwmJihudWxsPT09KGY9VFtpXSkmJihmPXZvaWQgMCksYXQocD0oaD1zKGssaSkpLmdldCgpLGYpKSl7aC5zZXQoQihzKHcsaSkuZ2V0KCkpKTtjb250aW51ZX19ZWxzZSBvLndhcm4oInVucmVjb2duaXplZCBHVUkgZWRpdDogIitpKyIgaW4gdHJhY2UgdWlkICIrXyk7ZGVsZXRlIFRbaV19fX0odC5kYXRhLHQubGF5b3V0LGMscCksaC5zdXBwbHlEZWZhdWx0cyh0LHtza2lwVXBkYXRlQ2FsYzohMH0pO3ZhciB2PXQuX2Z1bGxEYXRhLHk9dC5fZnVsbExheW91dCx4PXZvaWQgMD09PXkuZGF0YXJldmlzaW9uLGI9eS50cmFuc2l0aW9uLF89ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1NLmxheW91dEZsYWdzKCk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZi5nZXRMYXlvdXRWYWxPYmplY3Qocix0KX1hLmFycmF5cz17fSxhLnJhbmdlc0FsdGVyZWQ9e30sYS5uQ2hhbmdlcz0wLGEubkNoYW5nZXNBbmltPTAsb3QoZSxyLFtdLHtnZXRWYWxPYmplY3Q6byxmbGFnczphLGltbXV0YWJsZTpuLHRyYW5zaXRpb246aSxnZDp0fSksKGEucGxvdHx8YS5jYWxjKSYmKGEubGF5b3V0UmVwbG90PSEwKTtpJiZhLm5DaGFuZ2VzJiZhLm5DaGFuZ2VzQW5pbSYmKGEuYW5pbT1hLm5DaGFuZ2VzPT09YS5uQ2hhbmdlc0FuaW0/ImFsbCI6InNvbWUiKTtyZXR1cm4gYX0odCxwLHkseCxiKSx3PV8ubmV3RGF0YVJldmlzaW9uLEE9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWUubGVuZ3RoPT09ci5sZW5ndGg7aWYoIWkmJiFvKXJldHVybntmdWxsUmVwbG90OiEwLGNhbGM6ITB9O3ZhciBzLGwsYz1NLnRyYWNlRmxhZ3MoKTtjLmFycmF5cz17fSxjLm5DaGFuZ2VzPTAsYy5uQ2hhbmdlc0FuaW09MDt2YXIgdT17Z2V0VmFsT2JqZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPWYuZ2V0VHJhY2VWYWxPYmplY3QobCx0KTtyZXR1cm4hbC5fbW9kdWxlLmFuaW1hdGFibGUmJmUuYW5pbSYmKGUuYW5pbT0hMSksZX0sZmxhZ3M6YyxpbW11dGFibGU6bix0cmFuc2l0aW9uOmksbmV3RGF0YVJldmlzaW9uOmEsZ2Q6dH0scD17fTtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKWlmKHJbc10pe2lmKGw9cltzXS5fZnVsbElucHV0LGguaGFzTWFrZXNEYXRhVHJhbnNmb3JtKGwpJiYobD1yW3NdKSxwW2wudWlkXSljb250aW51ZTtwW2wudWlkXT0xLG90KGVbc10uX2Z1bGxJbnB1dCxsLFtdLHUpfShjLmNhbGN8fGMucGxvdCkmJihjLmZ1bGxSZXBsb3Q9ITApO2kmJmMubkNoYW5nZXMmJmMubkNoYW5nZXNBbmltJiYoYy5hbmltPWMubkNoYW5nZXM9PT1jLm5DaGFuZ2VzQW5pbSYmbz8iYWxsIjoic29tZSIpO3JldHVybiBjfSh0LGMsdix4LGIsdyk7aWYoSih0KSYmKF8ubGF5b3V0UmVwbG90PSEwKSxBLmNhbGN8fF8uY2FsYyl7dC5jYWxjZGF0YT12b2lkIDA7Zm9yKHZhciBTPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHkpLEM9MDtDPFMubGVuZ3RoO0MrKyl7dmFyIEw9U1tDXSxQPUwuc3Vic3RyaW5nKDAsNSk7aWYoInhheGlzIj09PVB8fCJ5YXhpcyI9PT1QKXt2YXIgej15W0xdLl9lbXB0eUNhdGVnb3JpZXM7eiYmeigpfX19ZWxzZSBoLnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyh0LmNhbGNkYXRhLHYpO3ZhciBPPVtdO2lmKGEmJih0Ll90cmFuc2l0aW9uRGF0YT17fSxoLmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLE8ucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gci5hZGRGcmFtZXModCxhKX0pKSkseS50cmFuc2l0aW9uJiYhZyYmKEEuYW5pbXx8Xy5hbmltKSlfLnRpY2tzJiZPLnB1c2goay5kb1RpY2tzUmVsYXlvdXQpLGguZG9DYWxjZGF0YSh0KSxrLmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHModCksTy5wdXNoKChmdW5jdGlvbigpe3JldHVybiBoLnRyYW5zaXRpb25Gcm9tUmVhY3QodCxBLF8scCl9KSk7ZWxzZSBpZihBLmZ1bGxSZXBsb3R8fF8ubGF5b3V0UmVwbG90fHxnKXQuX2Z1bGxMYXlvdXQuX3NraXBEZWZhdWx0cz0hMCxPLnB1c2goci5wbG90KTtlbHNle2Zvcih2YXIgRCBpbiBfLmFycmF5cyl7dmFyIFI9Xy5hcnJheXNbRF07aWYoUi5sZW5ndGgpe3ZhciBGPXUuZ2V0Q29tcG9uZW50TWV0aG9kKEQsImRyYXdPbmUiKTtpZihGIT09by5ub29wKWZvcih2YXIgTj0wO048Ui5sZW5ndGg7TisrKUYodCxSW05dKTtlbHNle3ZhciBqPXUuZ2V0Q29tcG9uZW50TWV0aG9kKEQsImRyYXciKTtpZihqPT09by5ub29wKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGRyYXcgY29tcG9uZW50czogIitEKTtqKHQpfX19Ty5wdXNoKGgucHJldmlvdXNQcm9taXNlcyksQS5zdHlsZSYmTy5wdXNoKGsuZG9UcmFjZVN0eWxlKSwoQS5jb2xvcmJhcnN8fF8uY29sb3JiYXJzKSYmTy5wdXNoKGsuZG9Db2xvckJhcnMpLF8ubGVnZW5kJiZPLnB1c2goay5kb0xlZ2VuZCksXy5sYXlvdXRzdHlsZSYmTy5wdXNoKGsubGF5b3V0U3R5bGVzKSxfLmF4cmFuZ2UmJkcoTyksXy50aWNrcyYmTy5wdXNoKGsuZG9UaWNrc1JlbGF5b3V0KSxfLm1vZGViYXImJk8ucHVzaChrLmRvTW9kZUJhciksXy5jYW1lcmEmJk8ucHVzaChrLmRvQ2FtZXJhKSxPLnB1c2goRSl9Ty5wdXNoKGgucmVob3ZlcixoLnJlZHJhZyksKGw9by5zeW5jT3JBc3luYyhPLHQpKSYmbC50aGVufHwobD1Qcm9taXNlLnJlc29sdmUodCkpfWVsc2UgbD1yLm5ld1Bsb3QodCxlLG4saSk7cmV0dXJuIGwudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfcmVhY3QiLHtkYXRhOmUsbGF5b3V0Om59KSx0fSkpfSxyLnJlZHJhdz1mdW5jdGlvbih0KXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QpO3JldHVybiBULmNsZWFuRGF0YSh0LmRhdGEpLFQuY2xlYW5MYXlvdXQodC5sYXlvdXQpLHQuY2FsY2RhdGE9dm9pZCAwLHIucGxvdCh0KS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZWRyYXciKSx0fSkpfSxyLnJlbGF5b3V0PXEsci5yZXN0eWxlPUYsci5zZXRQbG90Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQoXyx0KX0sci51cGRhdGU9SyxyLl9ndWlSZWxheW91dD1RKHEpLHIuX2d1aVJlc3R5bGU9UShGKSxyLl9ndWlVcGRhdGU9UShLKSxyLl9zdG9yZURpcmVjdEdVSUVkaXQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiByKXtqKG4scyh0LG4pLmdldCgpLHJbbl0sZSl9fX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjY1LCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzU0LCIuLi9saWIiOjc3OCwiLi4vbGliL2V2ZW50cyI6NzY3LCIuLi9saWIvcXVldWUiOjc5NCwiLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjgzNCwiLi4vcGxvdHMvY2FydGVzaWFuL2dyYXBoX2ludGVyYWN0Ijo4MzcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiOjg0NywiLi4vcGxvdHMvcGxvdHMiOjg5MSwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5Ijo4OTksIi4uL3JlZ2lzdHJ5Ijo5MTEsIi4vZWRpdF90eXBlcyI6ODEwLCIuL2hlbHBlcnMiOjgxMSwiLi9tYW5hZ2VfYXJyYXlzIjo4MTMsIi4vcGxvdF9jb25maWciOjgxNSwiLi9wbG90X3NjaGVtYSI6ODE2LCIuL3N1YnJvdXRpbmVzIjo4MTgsZDM6MTY5LCJmYXN0LWlzbnVtZXJpYyI6MjQxLCJoYXMtaG92ZXIiOjQ0MH1dLDgxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17c3RhdGljUGxvdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scGxvdGx5U2VydmVyVVJMOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGVkaXRhYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxlZGl0czp7YW5ub3RhdGlvblBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxhbm5vdGF0aW9uVGFpbDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYW5ub3RhdGlvblRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGF4aXNUaXRsZVRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGNvbG9yYmFyUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGNvbG9yYmFyVGl0bGVUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsZWdlbmRQb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGVnZW5kVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sc2hhcGVQb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sdGl0bGVUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sYXV0b3NpemFibGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHJlc3BvbnNpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGxGcmFtZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZnJhbWVNYXJnaW5zOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxtYXg6LjV9LHNjcm9sbFpvb206e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImNhcnRlc2lhbiIsImdsM2QiLCJnZW8iLCJtYXBib3giXSxleHRyYXM6WyEwLCExXSxkZmx0OiJnbDNkK2dlbyttYXBib3gifSxkb3VibGVDbGljazp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwicmVzZXQiLCJhdXRvc2l6ZSIsInJlc2V0K2F1dG9zaXplIl0sZGZsdDoicmVzZXQrYXV0b3NpemUifSxkb3VibGVDbGlja0RlbGF5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MzAwLG1pbjowfSxzaG93QXhpc0RyYWdIYW5kbGVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93QXhpc1JhbmdlRW50cnlCb3hlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd1RpcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dMaW5rOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaW5rVGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJFZGl0IGNoYXJ0Iixub0JsYW5rOiEwfSxzZW5kRGF0YTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd1NvdXJjZXM6e3ZhbFR5cGU6ImFueSIsZGZsdDohMX0sZGlzcGxheU1vZGVCYXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImhvdmVyIiwhMCwhMV0sZGZsdDoiaG92ZXIifSxzaG93U2VuZFRvQ2xvdWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHNob3dFZGl0SW5DaGFydFN0dWRpbzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbW9kZUJhckJ1dHRvbnNUb1JlbW92ZTp7dmFsVHlwZToiYW55IixkZmx0OltdfSxtb2RlQmFyQnV0dG9uc1RvQWRkOnt2YWxUeXBlOiJhbnkiLGRmbHQ6W119LG1vZGVCYXJCdXR0b25zOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LHRvSW1hZ2VCdXR0b25PcHRpb25zOnt2YWxUeXBlOiJhbnkiLGRmbHQ6e319LGRpc3BsYXlsb2dvOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx3YXRlcm1hcms6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHBsb3RHbFBpeGVsUmF0aW86e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoyLG1pbjoxLG1heDo0fSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6InRyYW5zcGFyZW50In0sdG9wb2pzb25VUkw6e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxkZmx0OiJodHRwczovL2Nkbi5wbG90Lmx5LyJ9LG1hcGJveEFjY2Vzc1Rva2VuOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6bnVsbH0sbG9nZ2luZzp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4OjIsZGZsdDoxfSxub3RpZnlPbkxvZ2dpbmc6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDoyLGRmbHQ6MH0scXVldWVMZW5ndGg6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MH0sZ2xvYmFsVHJhbnNmb3Jtczp7dmFsVHlwZToiYW55IixkZmx0OltdfSxsb2NhbGU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiZW4tVVMifSxsb2NhbGVzOnt2YWxUeXBlOiJhbnkiLGRmbHQ6e319fSxpPXt9OyFmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl07aS52YWxUeXBlP3Jbbl09aS5kZmx0OihyW25dfHwocltuXT17fSksdChpLHJbbl0pKX19KG4saSksZS5leHBvcnRzPXtjb25maWdBdHRyaWJ1dGVzOm4sZGZsdENvbmZpZzppfX0se31dLDgxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi4vcGxvdHMvZnJhbWVfYXR0cmlidXRlcyIpLGw9dCgiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxjPXQoIi4vcGxvdF9jb25maWciKS5jb25maWdBdHRyaWJ1dGVzLHU9dCgiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2FyZWFfYXR0cmlidXRlcyIpLGY9dCgiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2F4aXNfYXR0cmlidXRlcyIpLGg9dCgiLi9lZGl0X3R5cGVzIikscD1pLmV4dGVuZEZsYXQsZD1pLmV4dGVuZERlZXBBbGwsZz1pLmlzUGxhaW5PYmplY3QsbT1pLmlzQXJyYXlPclR5cGVkQXJyYXksdj1pLm5lc3RlZFByb3BlcnR5LHk9aS52YWxPYmplY3RNZXRhLHg9WyJfaXNTdWJwbG90T2JqIiwiX2lzTGlua2VkVG9BcnJheSIsIl9hcnJheUF0dHJSZWdleHBzIiwiX2RlcHJlY2F0ZWQiXTtmdW5jdGlvbiBiKHQsZSxyKXtpZighdClyZXR1cm4hMTtpZih0Ll9pc0xpbmtlZFRvQXJyYXkpaWYoXyhlW3JdKSlyKys7ZWxzZSBpZihyPGUubGVuZ3RoKXJldHVybiExO2Zvcig7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXRbZVtyXV07aWYoIWcobikpYnJlYWs7aWYodD1uLHI9PT1lLmxlbmd0aC0xKWJyZWFrO2lmKHQuX2lzTGlua2VkVG9BcnJheSl7aWYoIV8oZVsrK3JdKSlyZXR1cm4hMX1lbHNlIGlmKCJpbmZvX2FycmF5Ij09PXQudmFsVHlwZSl7dmFyIGk9ZVsrK3JdO2lmKCFfKGkpKXJldHVybiExO3ZhciBhPXQuaXRlbXM7aWYoQXJyYXkuaXNBcnJheShhKSl7aWYoaT49YS5sZW5ndGgpcmV0dXJuITE7aWYoMj09PXQuZGltZW5zaW9ucyl7aWYocisrLGUubGVuZ3RoPT09cilyZXR1cm4gdDt2YXIgbz1lW3JdO2lmKCFfKG8pKXJldHVybiExO3Q9YVtpXVtvXX1lbHNlIHQ9YVtpXX1lbHNlIHQ9YX19cmV0dXJuIHR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdD09PU1hdGgucm91bmQodCkmJnQ+PTB9ZnVuY3Rpb24gdygpe3ZhciB0LGUscj17fTtmb3IodCBpbiBkKHIsbyksbi5zdWJwbG90c1JlZ2lzdHJ5KXtpZigoZT1uLnN1YnBsb3RzUmVnaXN0cnlbdF0pLmxheW91dEF0dHJpYnV0ZXMpaWYoQXJyYXkuaXNBcnJheShlLmF0dHIpKWZvcih2YXIgaT0wO2k8ZS5hdHRyLmxlbmd0aDtpKyspTShyLGUsZS5hdHRyW2ldKTtlbHNlIE0ocixlLCJzdWJwbG90Ij09PWUuYXR0cj9lLm5hbWU6ZS5hdHRyKX1mb3IodCBpbiByPWZ1bmN0aW9uKHQpe3JldHVybiBwKHQse3JhZGlhbGF4aXM6Zi5yYWRpYWxheGlzLGFuZ3VsYXJheGlzOmYuYW5ndWxhcmF4aXN9KSxwKHQsZi5sYXlvdXQpLHR9KHIpLG4uY29tcG9uZW50c1JlZ2lzdHJ5KXt2YXIgYT0oZT1uLmNvbXBvbmVudHNSZWdpc3RyeVt0XSkuc2NoZW1hO2lmKGEmJihhLnN1YnBsb3RzfHxhLmxheW91dCkpe3ZhciBzPWEuc3VicGxvdHM7aWYocyYmcy54YXhpcyYmIXMueWF4aXMpZm9yKHZhciBsIGluIHMueGF4aXMpZGVsZXRlIHIueWF4aXNbbF19ZWxzZSJjb2xvcnNjYWxlIj09PWUubmFtZT9kKHIsZS5sYXlvdXRBdHRyaWJ1dGVzKTplLmxheW91dEF0dHJpYnV0ZXMmJkEocixlLmxheW91dEF0dHJpYnV0ZXMsZS5uYW1lKX1yZXR1cm57bGF5b3V0QXR0cmlidXRlczprKHIpfX1mdW5jdGlvbiBUKCl7dmFyIHQ9e2ZyYW1lczpkKHt9LHMpfTtyZXR1cm4gayh0KSx0LmZyYW1lc31mdW5jdGlvbiBrKHQpe3JldHVybiBmdW5jdGlvbih0KXtyLmNyYXdsKHQsKGZ1bmN0aW9uKHQsZSxuKXtyLmlzVmFsT2JqZWN0KHQpPyJkYXRhX2FycmF5Ij09PXQudmFsVHlwZT8odC5yb2xlPSJkYXRhIixuW2UrInNyYyJdPXt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJub25lIn0pOiEwPT09dC5hcnJheU9rJiYobltlKyJzcmMiXT17dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibm9uZSJ9KTpnKHQpJiYodC5yb2xlPSJvYmplY3QiKX0pKX0odCksZnVuY3Rpb24odCl7ci5jcmF3bCh0LChmdW5jdGlvbih0LGUscil7aWYodCl7dmFyIG49dC5faXNMaW5rZWRUb0FycmF5O24mJihkZWxldGUgdC5faXNMaW5rZWRUb0FycmF5LHJbZV09e2l0ZW1zOnt9fSxyW2VdLml0ZW1zW25dPXQscltlXS5yb2xlPSJvYmplY3QiKX19KSl9KHQpLGZ1bmN0aW9uKHQpeyFmdW5jdGlvbiB0KGUpe2Zvcih2YXIgciBpbiBlKWlmKGcoZVtyXSkpdChlW3JdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZVtyXSkpZm9yKHZhciBuPTA7bjxlW3JdLmxlbmd0aDtuKyspdChlW3JdW25dKTtlbHNlIGVbcl1pbnN0YW5jZW9mIFJlZ0V4cCYmKGVbcl09ZVtyXS50b1N0cmluZygpKX0odCl9KHQpLHR9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dih0LHIpLGk9ZCh7fSxlLmxheW91dEF0dHJpYnV0ZXMpO2kuX2lzU3VicGxvdE9iaj0hMCxuLnNldChpKX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj12KHQscik7bi5zZXQoZChuLmdldCgpfHx7fSxlKSl9ci5JU19TVUJQTE9UX09CSj0iX2lzU3VicGxvdE9iaiIsci5JU19MSU5LRURfVE9fQVJSQVk9Il9pc0xpbmtlZFRvQXJyYXkiLHIuREVQUkVDQVRFRD0iX2RlcHJlY2F0ZWQiLHIuVU5ERVJTQ09SRV9BVFRSUz14LHIuZ2V0PWZ1bmN0aW9uKCl7dmFyIHQ9e307bi5hbGxUeXBlcy5jb25jYXQoImFyZWEiKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2VdPWZ1bmN0aW9uKHQpe3ZhciBlLGk7ImFyZWEiPT09dD8oZT17YXR0cmlidXRlczp1fSxpPXt9KTooZT1uLm1vZHVsZXNbdF0uX21vZHVsZSxpPWUuYmFzZVBsb3RNb2R1bGUpO3ZhciBvPXt0eXBlOm51bGx9LHM9ZCh7fSxhKSxsPWQoe30sZS5hdHRyaWJ1dGVzKTtyLmNyYXdsKGwsKGZ1bmN0aW9uKHQsZSxyLG4saSl7dihzLGkpLnNldCh2b2lkIDApLHZvaWQgMD09PXQmJnYobCxpKS5zZXQodm9pZCAwKX0pKSxkKG8scyksbi50cmFjZUlzKHQsIm5vT3BhY2l0eSIpJiZkZWxldGUgby5vcGFjaXR5O24udHJhY2VJcyh0LCJzaG93TGVnZW5kIil8fChkZWxldGUgby5zaG93bGVnZW5kLGRlbGV0ZSBvLmxlZ2VuZGdyb3VwKTtuLnRyYWNlSXModCwibm9Ib3ZlciIpJiYoZGVsZXRlIG8uaG92ZXJpbmZvLGRlbGV0ZSBvLmhvdmVybGFiZWwpO2Uuc2VsZWN0UG9pbnRzfHxkZWxldGUgby5zZWxlY3RlZHBvaW50cztkKG8sbCksaS5hdHRyaWJ1dGVzJiZkKG8saS5hdHRyaWJ1dGVzKTtvLnR5cGU9dDt2YXIgYz17bWV0YTplLm1ldGF8fHt9LGNhdGVnb3JpZXM6ZS5jYXRlZ29yaWVzfHx7fSxhbmltYXRhYmxlOkJvb2xlYW4oZS5hbmltYXRhYmxlKSx0eXBlOnQsYXR0cmlidXRlczprKG8pfTtpZihlLmxheW91dEF0dHJpYnV0ZXMpe3ZhciBmPXt9O2QoZixlLmxheW91dEF0dHJpYnV0ZXMpLGMubGF5b3V0QXR0cmlidXRlcz1rKGYpfWUuYW5pbWF0YWJsZXx8ci5jcmF3bChjLChmdW5jdGlvbih0KXtyLmlzVmFsT2JqZWN0KHQpJiYiYW5pbSJpbiB0JiZkZWxldGUgdC5hbmltfSkpO3JldHVybiBjfShlKX0pKTt2YXIgZT17fTtyZXR1cm4gT2JqZWN0LmtleXMobi50cmFuc2Zvcm1zUmVnaXN0cnkpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24odCl7dmFyIGU9bi50cmFuc2Zvcm1zUmVnaXN0cnlbdF0scj1kKHt9LGUuYXR0cmlidXRlcyk7cmV0dXJuIE9iamVjdC5rZXlzKG4uY29tcG9uZW50c1JlZ2lzdHJ5KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgaT1uLmNvbXBvbmVudHNSZWdpc3RyeVtlXTtpLnNjaGVtYSYmaS5zY2hlbWEudHJhbnNmb3JtcyYmaS5zY2hlbWEudHJhbnNmb3Jtc1t0XSYmT2JqZWN0LmtleXMoaS5zY2hlbWEudHJhbnNmb3Jtc1t0XSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7QShyLGkuc2NoZW1hLnRyYW5zZm9ybXNbdF1bZV0sZSl9KSl9KSkse2F0dHJpYnV0ZXM6ayhyKX19KHQpfSkpLHtkZWZzOnt2YWxPYmplY3RzOnksbWV0YUtleXM6eC5jb25jYXQoWyJkZXNjcmlwdGlvbiIsInJvbGUiLCJlZGl0VHlwZSIsImltcGxpZWRFZGl0cyJdKSxlZGl0VHlwZTp7dHJhY2VzOmgudHJhY2VzLGxheW91dDpoLmxheW91dH0saW1wbGllZEVkaXRzOnt9fSx0cmFjZXM6dCxsYXlvdXQ6dygpLHRyYW5zZm9ybXM6ZSxmcmFtZXM6VCgpLGFuaW1hdGlvbjprKGwpLGNvbmZpZzprKGMpfX0sci5jcmF3bD1mdW5jdGlvbih0LGUsbixpKXt2YXIgYT1ufHwwO2k9aXx8IiIsT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIG89dFtuXTtpZigtMT09PXguaW5kZXhPZihuKSl7dmFyIHM9KGk/aSsiLiI6IiIpK247ZShvLG4sdCxhLHMpLHIuaXNWYWxPYmplY3Qobyl8fGcobykmJiJpbXBsaWVkRWRpdHMiIT09biYmci5jcmF3bChvLGUsYSsxLHMpfX0pKX0sci5pc1ZhbE9iamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdm9pZCAwIT09dC52YWxUeXBlfSxyLmZpbmRBcnJheUF0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7dmFyIGUsbixpPVtdLG89W10scz1bXTtmdW5jdGlvbiBsKHQscixhLGwpe289by5zbGljZSgwLGwpLmNvbmNhdChbcl0pLHM9cy5zbGljZSgwLGwpLmNvbmNhdChbdCYmdC5faXNMaW5rZWRUb0FycmF5XSksdCYmKCJkYXRhX2FycmF5Ij09PXQudmFsVHlwZXx8ITA9PT10LmFycmF5T2spJiYhKCJjb2xvcmJhciI9PT1vW2wtMV0mJigidGlja3RleHQiPT09cnx8InRpY2t2YWxzIj09PXIpKSYmZnVuY3Rpb24gdChlLHIsYSl7dmFyIGw9ZVtvW3JdXSxjPWErb1tyXTtpZihyPT09by5sZW5ndGgtMSltKGwpJiZpLnB1c2gobitjKTtlbHNlIGlmKHNbcl0pe2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKHZhciB1PTA7dTxsLmxlbmd0aDt1KyspZyhsW3VdKSYmdChsW3VdLHIrMSxjKyJbIit1KyJdLiIpfWVsc2UgZyhsKSYmdChsLHIrMSxjKyIuIil9KGUsMCwiIil9ZT10LG49IiIsci5jcmF3bChhLGwpLHQuX21vZHVsZSYmdC5fbW9kdWxlLmF0dHJpYnV0ZXMmJnIuY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsbCk7dmFyIGM9dC50cmFuc2Zvcm1zO2lmKGMpZm9yKHZhciB1PTA7dTxjLmxlbmd0aDt1Kyspe3ZhciBmPWNbdV0saD1mLl9tb2R1bGU7aCYmKG49InRyYW5zZm9ybXNbIit1KyJdLiIsZT1mLHIuY3Jhd2woaC5hdHRyaWJ1dGVzLGwpKX1yZXR1cm4gaX0sci5nZXRUcmFjZVZhbE9iamVjdD1mdW5jdGlvbih0LGUpe3ZhciByLGksbz1lWzBdLHM9MTtpZigidHJhbnNmb3JtcyI9PT1vKXtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIGEudHJhbnNmb3Jtczt2YXIgbD10LnRyYW5zZm9ybXM7aWYoIUFycmF5LmlzQXJyYXkobCl8fCFsLmxlbmd0aClyZXR1cm4hMTt2YXIgYz1lWzFdO2lmKCFfKGMpfHxjPj1sLmxlbmd0aClyZXR1cm4hMTtpPShyPShuLnRyYW5zZm9ybXNSZWdpc3RyeVtsW2NdLnR5cGVdfHx7fSkuYXR0cmlidXRlcykmJnJbZVsyXV0scz0zfWVsc2UgaWYoImFyZWEiPT09dC50eXBlKWk9dVtvXTtlbHNle3ZhciBmPXQuX21vZHVsZTtpZihmfHwoZj0obi5tb2R1bGVzW3QudHlwZXx8YS50eXBlLmRmbHRdfHx7fSkuX21vZHVsZSksIWYpcmV0dXJuITE7aWYoIShpPShyPWYuYXR0cmlidXRlcykmJnJbb10pKXt2YXIgaD1mLmJhc2VQbG90TW9kdWxlO2gmJmguYXR0cmlidXRlcyYmKGk9aC5hdHRyaWJ1dGVzW29dKX1pfHwoaT1hW29dKX1yZXR1cm4gYihpLGUscyl9LHIuZ2V0TGF5b3V0VmFsT2JqZWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGIoZnVuY3Rpb24odCxlKXt2YXIgcixpLGEscyxsPXQuX2Jhc2VQbG90TW9kdWxlcztpZihsKXt2YXIgYztmb3Iocj0wO3I8bC5sZW5ndGg7cisrKXtpZigoYT1sW3JdKS5hdHRyUmVnZXgmJmEuYXR0clJlZ2V4LnRlc3QoZSkpe2lmKGEubGF5b3V0QXR0ck92ZXJyaWRlcylyZXR1cm4gYS5sYXlvdXRBdHRyT3ZlcnJpZGVzOyFjJiZhLmxheW91dEF0dHJpYnV0ZXMmJihjPWEubGF5b3V0QXR0cmlidXRlcyl9dmFyIHU9YS5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcztpZih1JiZlIGluIHUpcmV0dXJuIHVbZV19aWYoYylyZXR1cm4gY312YXIgaD10Ll9tb2R1bGVzO2lmKGgpZm9yKHI9MDtyPGgubGVuZ3RoO3IrKylpZigocz1oW3JdLmxheW91dEF0dHJpYnV0ZXMpJiZlIGluIHMpcmV0dXJuIHNbZV07Zm9yKGkgaW4gbi5jb21wb25lbnRzUmVnaXN0cnkpe2lmKCJjb2xvcnNjYWxlIj09PShhPW4uY29tcG9uZW50c1JlZ2lzdHJ5W2ldKS5uYW1lJiYwPT09ZS5pbmRleE9mKCJjb2xvcmF4aXMiKSlyZXR1cm4gYS5sYXlvdXRBdHRyaWJ1dGVzW2VdO2lmKCFhLnNjaGVtYSYmZT09PWEubmFtZSlyZXR1cm4gYS5sYXlvdXRBdHRyaWJ1dGVzfWlmKGUgaW4gbylyZXR1cm4gb1tlXTtpZigicmFkaWFsYXhpcyI9PT1lfHwiYW5ndWxhcmF4aXMiPT09ZSlyZXR1cm4gZltlXTtyZXR1cm4gZi5sYXlvdXRbZV18fCExfSh0LGVbMF0pLGUsMSl9fSx7Ii4uL2xpYiI6Nzc4LCIuLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyI6ODIyLCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjQsIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXMiOjg1NywiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjg4MiwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2FyZWFfYXR0cmlidXRlcyI6ODk3LCIuLi9wbG90cy9wb2xhci9sZWdhY3kvYXhpc19hdHRyaWJ1dGVzIjo4OTgsIi4uL3JlZ2lzdHJ5Ijo5MTEsIi4vZWRpdF90eXBlcyI6ODEwLCIuL3Bsb3RfY29uZmlnIjo4MTV9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksYT17bmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibm9uZSJ9fTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiYic3RyaW5nIj09dHlwZW9mIHR9ZnVuY3Rpb24gcyh0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiJzIiE9PXQuY2hhckF0KGUpJiZuLndhcm4oImJhZCBhcmd1bWVudCB0byBhcnJheURlZmF1bHRLZXk6ICIrdCksdC5zdWJzdHIoMCx0Lmxlbmd0aC0xKSsiZGVmYXVsdHMifWEudGVtcGxhdGVpdGVtbmFtZT17dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHIudGVtcGxhdGVkQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5faXNMaW5rZWRUb0FycmF5PXQsZS5uYW1lPWEubmFtZSxlLnRlbXBsYXRlaXRlbW5hbWU9YS50ZW1wbGF0ZWl0ZW1uYW1lLGV9LHIudHJhY2VUZW1wbGF0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixhPXt9O2ZvcihlIGluIHQpcj10W2VdLEFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoJiYoYVtlXT0wKTtyZXR1cm57bmV3VHJhY2U6ZnVuY3Rpb24obyl7dmFyIHM9e3R5cGU6ZT1uLmNvZXJjZShvLHt9LGksInR5cGUiKSxfdGVtcGxhdGU6bnVsbH07aWYoZSBpbiBhKXtyPXRbZV07dmFyIGw9YVtlXSVyLmxlbmd0aDthW2VdKysscy5fdGVtcGxhdGU9cltsXX1yZXR1cm4gc319fSxyLm5ld0NvbnRhaW5lcj1mdW5jdGlvbih0LGUscil7dmFyIGk9dC5fdGVtcGxhdGUsYT1pJiYoaVtlXXx8ciYmaVtyXSk7cmV0dXJuIG4uaXNQbGFpbk9iamVjdChhKXx8KGE9bnVsbCksdFtlXT17X3RlbXBsYXRlOmF9fSxyLmFycmF5VGVtcGxhdGVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll90ZW1wbGF0ZSxpPW4mJm5bcyhlKV0sYT1uJiZuW2VdO0FycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RofHwoYT1bXSk7dmFyIGw9e307cmV0dXJue25ld0l0ZW06ZnVuY3Rpb24odCl7dmFyIGU9e25hbWU6dC5uYW1lLF9pbnB1dDp0fSxuPWUudGVtcGxhdGVpdGVtbmFtZT10LnRlbXBsYXRlaXRlbW5hbWU7aWYoIW8obikpcmV0dXJuIGUuX3RlbXBsYXRlPWksZTtmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGM9YVtzXTtpZihjLm5hbWU9PT1uKXJldHVybiBsW25dPTEsZS5fdGVtcGxhdGU9YyxlfXJldHVybiBlW3JdPXRbcl18fCExLGUuX3RlbXBsYXRlPSExLGV9LGRlZmF1bHRJdGVtczpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciByPWFbZV0sbj1yLm5hbWU7aWYobyhuKSYmIWxbbl0pe3ZhciBpPXtfdGVtcGxhdGU6cixuYW1lOm4sX2lucHV0OntfdGVtcGxhdGVpdGVtbmFtZTpufX07aS50ZW1wbGF0ZWl0ZW1uYW1lPXIudGVtcGxhdGVpdGVtbmFtZSx0LnB1c2goaSksbFtuXT0xfX1yZXR1cm4gdH19fSxyLmFycmF5RGVmYXVsdEtleT1zLHIuYXJyYXlFZGl0b3I9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPShuLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCl8fFtdKS5sZW5ndGgsYT1yLl9pbmRleCxvPWE+PWkmJihyLl9pbnB1dHx8e30pLl90ZW1wbGF0ZWl0ZW1uYW1lO28mJihhPWkpO3ZhciBzLGw9ZSsiWyIrYSsiXSI7ZnVuY3Rpb24gYygpe3M9e30sbyYmKHNbbF09e30sc1tsXS50ZW1wbGF0ZWl0ZW1uYW1lPW8pfWZ1bmN0aW9uIHUodCxlKXtvP24ubmVzdGVkUHJvcGVydHkoc1tsXSx0KS5zZXQoZSk6c1tsKyIuIit0XT1lfWZ1bmN0aW9uIGYoKXt2YXIgdD1zO3JldHVybiBjKCksdH1yZXR1cm4gYygpLHttb2RpZnlCYXNlOmZ1bmN0aW9uKHQsZSl7c1t0XT1lfSxtb2RpZnlJdGVtOnUsZ2V0VXBkYXRlT2JqOmYsYXBwbHlVcGRhdGU6ZnVuY3Rpb24oZSxyKXtlJiZ1KGUscik7dmFyIGk9ZigpO2Zvcih2YXIgYSBpbiBpKW4ubmVzdGVkUHJvcGVydHkodCxhKS5zZXQoaVthXSl9fX19LHsiLi4vbGliIjo3NzgsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyNH1dLDgxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi9saWIiKSxzPXQoIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLGw9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGM9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuLi9jb21wb25lbnRzL3RpdGxlcyIpLGY9dCgiLi4vY29tcG9uZW50cy9tb2RlYmFyIiksaD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHA9dCgiLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLGQ9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksZz1kLmVuZm9yY2UsbT1kLmNsZWFuLHY9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlO2Z1bmN0aW9uIHkodCxlLHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dWzBdLGE9cltuXVsxXTtpZighKGlbMF0+PXRbMV18fGlbMV08PXRbMF0pJiYoYVswXTxlWzFdJiZhWzFdPmVbMF0pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHgodCl7dmFyIGUsaSxzLHUsZCxnLG09dC5fZnVsbExheW91dCx2PW0uX3NpemUseD12LnAsXz1oLmxpc3QodCwiIiwhMCk7aWYobS5fcGFwZXJkaXYuc3R5bGUoe3dpZHRoOnQuX2NvbnRleHQucmVzcG9uc2l2ZSYmbS5hdXRvc2l6ZSYmIXQuX2NvbnRleHQuX2hhc1plcm9XaWR0aCYmIXQubGF5b3V0LndpZHRoPyIxMDAlIjptLndpZHRoKyJweCIsaGVpZ2h0OnQuX2NvbnRleHQucmVzcG9uc2l2ZSYmbS5hdXRvc2l6ZSYmIXQuX2NvbnRleHQuX2hhc1plcm9IZWlnaHQmJiF0LmxheW91dC5oZWlnaHQ/IjEwMCUiOm0uaGVpZ2h0KyJweCJ9KS5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLmNhbGwoYy5zZXRTaXplLG0ud2lkdGgsbS5oZWlnaHQpLHQuX2NvbnRleHQuc2V0QmFja2dyb3VuZCh0LG0ucGFwZXJfYmdjb2xvciksci5kcmF3TWFpblRpdGxlKHQpLGYubWFuYWdlKHQpLCFtLl9oYXMoImNhcnRlc2lhbiIpKXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCk7ZnVuY3Rpb24gVCh0LGUscil7dmFyIG49dC5fbHcvMjtyZXR1cm4ieCI9PT10Ll9pZC5jaGFyQXQoMCk/ZT8idG9wIj09PXI/ZS5fb2Zmc2V0LXgtbjplLl9vZmZzZXQrZS5fbGVuZ3RoK3grbjp2LnQrdi5oKigxLSh0LnBvc2l0aW9ufHwwKSkrbiUxOmU/InJpZ2h0Ij09PXI/ZS5fb2Zmc2V0K2UuX2xlbmd0aCt4K246ZS5fb2Zmc2V0LXgtbjp2Lmwrdi53Kih0LnBvc2l0aW9ufHwwKStuJTF9Zm9yKGU9MDtlPF8ubGVuZ3RoO2UrKyl7dmFyIGs9KHU9X1tlXSkuX2FuY2hvckF4aXM7dS5fbGluZXBvc2l0aW9ucz17fSx1Ll9sdz1jLmNyaXNwUm91bmQodCx1LmxpbmV3aWR0aCwxKSx1Ll9tYWluTGluZVBvc2l0aW9uPVQodSxrLHUuc2lkZSksdS5fbWFpbk1pcnJvclBvc2l0aW9uPXUubWlycm9yJiZrP1QodSxrLHAuT1BQT1NJVEVfU0lERVt1LnNpZGVdKTpudWxsfXZhciBNPVtdLEE9W10sUz1bXSxFPTE9PT1sLm9wYWNpdHkobS5wYXBlcl9iZ2NvbG9yKSYmMT09PWwub3BhY2l0eShtLnBsb3RfYmdjb2xvcikmJm0ucGFwZXJfYmdjb2xvcj09PW0ucGxvdF9iZ2NvbG9yO2ZvcihpIGluIG0uX3Bsb3RzKWlmKChzPW0uX3Bsb3RzW2ldKS5tYWlucGxvdClzLmJnJiZzLmJnLnJlbW92ZSgpLHMuYmc9dm9pZCAwO2Vsc2V7dmFyIEM9cy54YXhpcy5kb21haW4sTD1zLnlheGlzLmRvbWFpbixJPXMucGxvdGdyb3VwO2lmKHkoQyxMLFMpKXt2YXIgUD1JLm5vZGUoKSx6PXMuYmc9by5lbnN1cmVTaW5nbGUoSSwicmVjdCIsImJnIik7UC5pbnNlcnRCZWZvcmUoei5ub2RlKCksUC5jaGlsZE5vZGVzWzBdKSxBLnB1c2goaSl9ZWxzZSBJLnNlbGVjdCgicmVjdC5iZyIpLnJlbW92ZSgpLFMucHVzaChbQyxMXSksRXx8KE0ucHVzaChpKSxBLnB1c2goaSkpfXZhciBPLEQsUixGLEIsTixqLFUsVixxLEgsRyxZLFc9bS5fYmdMYXllci5zZWxlY3RBbGwoIi5iZyIpLmRhdGEoTSk7Zm9yKFcuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJiZyIsITApLFcuZXhpdCgpLnJlbW92ZSgpLFcuZWFjaCgoZnVuY3Rpb24odCl7bS5fcGxvdHNbdF0uYmc9bi5zZWxlY3QodGhpcyl9KSksZT0wO2U8QS5sZW5ndGg7ZSsrKXM9bS5fcGxvdHNbQVtlXV0sZD1zLnhheGlzLGc9cy55YXhpcyxzLmJnJiZ2b2lkIDAhPT1kLl9vZmZzZXQmJnZvaWQgMCE9PWcuX29mZnNldCYmcy5iZy5jYWxsKGMuc2V0UmVjdCxkLl9vZmZzZXQteCxnLl9vZmZzZXQteCxkLl9sZW5ndGgrMip4LGcuX2xlbmd0aCsyKngpLmNhbGwobC5maWxsLG0ucGxvdF9iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKTtpZighbS5faGFzT25seUxhcmdlU3Bsb21zKWZvcihpIGluIG0uX3Bsb3RzKXtzPW0uX3Bsb3RzW2ldLGQ9cy54YXhpcyxnPXMueWF4aXM7dmFyIFgsWixKPXMuY2xpcElkPSJjbGlwIittLl91aWQraSsicGxvdCIsSz1vLmVuc3VyZVNpbmdsZUJ5SWQobS5fY2xpcHMsImNsaXBQYXRoIixKLChmdW5jdGlvbih0KXt0LmNsYXNzZWQoInBsb3RjbGlwIiwhMCkuYXBwZW5kKCJyZWN0Iil9KSk7cy5jbGlwUmVjdD1LLnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOmQuX2xlbmd0aCxoZWlnaHQ6Zy5fbGVuZ3RofSksYy5zZXRUcmFuc2xhdGUocy5wbG90LGQuX29mZnNldCxnLl9vZmZzZXQpLHMuX2hhc0NsaXBPbkF4aXNGYWxzZT8oWD1udWxsLFo9Sik6KFg9SixaPW51bGwpLGMuc2V0Q2xpcFVybChzLnBsb3QsWCx0KSxzLmxheWVyQ2xpcElkPVp9ZnVuY3Rpb24gUSh0KXtyZXR1cm4iTSIrTysiLCIrdCsiSCIrRH1mdW5jdGlvbiAkKHQpe3JldHVybiJNIitkLl9vZmZzZXQrIiwiK3QrImgiK2QuX2xlbmd0aH1mdW5jdGlvbiB0dCh0KXtyZXR1cm4iTSIrdCsiLCIrVSsiViIran1mdW5jdGlvbiBldCh0KXtyZXR1cm4iTSIrdCsiLCIrZy5fb2Zmc2V0KyJ2IitnLl9sZW5ndGh9ZnVuY3Rpb24gcnQodCxlLHIpe2lmKCF0LnNob3dsaW5lfHxpIT09dC5fbWFpblN1YnBsb3QpcmV0dXJuIiI7aWYoIXQuX2FuY2hvckF4aXMpcmV0dXJuIHIodC5fbWFpbkxpbmVQb3NpdGlvbik7dmFyIG49ZSh0Ll9tYWluTGluZVBvc2l0aW9uKTtyZXR1cm4gdC5taXJyb3ImJihuKz1lKHQuX21haW5NaXJyb3JQb3NpdGlvbikpLG59Zm9yKGkgaW4gbS5fcGxvdHMpe3M9bS5fcGxvdHNbaV0sZD1zLnhheGlzLGc9cy55YXhpczt2YXIgbnQ9Ik0wLDAiO2IoZCxpKSYmKEI9dyhkLCJsZWZ0IixnLF8pLE89ZC5fb2Zmc2V0LShCP3grQjowKSxOPXcoZCwicmlnaHQiLGcsXyksRD1kLl9vZmZzZXQrZC5fbGVuZ3RoKyhOP3grTjowKSxSPVQoZCxnLCJib3R0b20iKSxGPVQoZCxnLCJ0b3AiKSwhKFk9IWQuX2FuY2hvckF4aXN8fGkhPT1kLl9tYWluU3VicGxvdCl8fCJhbGx0aWNrcyIhPT1kLm1pcnJvciYmImFsbCIhPT1kLm1pcnJvcnx8KGQuX2xpbmVwb3NpdGlvbnNbaV09W1IsRl0pLG50PXJ0KGQsUSwkKSxZJiZkLnNob3dsaW5lJiYoImFsbCI9PT1kLm1pcnJvcnx8ImFsbHRpY2tzIj09PWQubWlycm9yKSYmKG50Kz1RKFIpK1EoRikpLHMueGxpbmVzLnN0eWxlKCJzdHJva2Utd2lkdGgiLGQuX2x3KyJweCIpLmNhbGwobC5zdHJva2UsZC5zaG93bGluZT9kLmxpbmVjb2xvcjoicmdiYSgwLDAsMCwwKSIpKSxzLnhsaW5lcy5hdHRyKCJkIixudCk7dmFyIGl0PSJNMCwwIjtiKGcsaSkmJihIPXcoZywiYm90dG9tIixkLF8pLGo9Zy5fb2Zmc2V0K2cuX2xlbmd0aCsoSD94OjApLEc9dyhnLCJ0b3AiLGQsXyksVT1nLl9vZmZzZXQtKEc/eDowKSxWPVQoZyxkLCJsZWZ0IikscT1UKGcsZCwicmlnaHQiKSwhKFk9IWcuX2FuY2hvckF4aXN8fGkhPT1nLl9tYWluU3VicGxvdCl8fCJhbGx0aWNrcyIhPT1nLm1pcnJvciYmImFsbCIhPT1nLm1pcnJvcnx8KGcuX2xpbmVwb3NpdGlvbnNbaV09W1YscV0pLGl0PXJ0KGcsdHQsZXQpLFkmJmcuc2hvd2xpbmUmJigiYWxsIj09PWcubWlycm9yfHwiYWxsdGlja3MiPT09Zy5taXJyb3IpJiYoaXQrPXR0KFYpK3R0KHEpKSxzLnlsaW5lcy5zdHlsZSgic3Ryb2tlLXdpZHRoIixnLl9sdysicHgiKS5jYWxsKGwuc3Ryb2tlLGcuc2hvd2xpbmU/Zy5saW5lY29sb3I6InJnYmEoMCwwLDAsMCkiKSkscy55bGluZXMuYXR0cigiZCIsaXQpfXJldHVybiBoLm1ha2VDbGlwUGF0aHModCksYS5wcmV2aW91c1Byb21pc2VzKHQpfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4odC50aWNrc3x8dC5zaG93bGluZSkmJihlPT09dC5fbWFpblN1YnBsb3R8fCJhbGwiPT09dC5taXJyb3J8fCJhbGx0aWNrcyI9PT10Lm1pcnJvcil9ZnVuY3Rpb24gXyh0LGUscil7aWYoIXIuc2hvd2xpbmV8fCFyLl9sdylyZXR1cm4hMTtpZigiYWxsIj09PXIubWlycm9yfHwiYWxsdGlja3MiPT09ci5taXJyb3IpcmV0dXJuITA7dmFyIG49ci5fYW5jaG9yQXhpcztpZighbilyZXR1cm4hMTt2YXIgaT1wLkZST01fQkxbZV07cmV0dXJuIHIuc2lkZT09PWU/bi5kb21haW5baV09PT10LmRvbWFpbltpXTpyLm1pcnJvciYmbi5kb21haW5bMS1pXT09PXQuZG9tYWluWzEtaV19ZnVuY3Rpb24gdyh0LGUscixuKXtpZihfKHQsZSxyKSlyZXR1cm4gci5fbHc7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07aWYoYS5fbWFpbkF4aXM9PT1yLl9tYWluQXhpcyYmXyh0LGUsYSkpcmV0dXJuIGEuX2x3fXJldHVybiAwfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj10LnRpdGxlLG49dC5fc2l6ZSxpPTA7c3dpdGNoKCJzdGFydCI9PT1lP2k9ci5wYWQubDoiZW5kIj09PWUmJihpPS1yLnBhZC5yKSxyLnhyZWYpe2Nhc2UicGFwZXIiOnJldHVybiBuLmwrbi53KnIueCtpO2Nhc2UiY29udGFpbmVyIjpkZWZhdWx0OnJldHVybiB0LndpZHRoKnIueCtpfX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9dC50aXRsZSxuPXQuX3NpemUsaT0wO2lmKCIwZW0iIT09ZSYmZT9lPT09cC5DQVBfU0hJRlQrImVtIiYmKGk9ci5wYWQudCk6aT0tci5wYWQuYiwiYXV0byI9PT1yLnkpcmV0dXJuIG4udC8yO3N3aXRjaChyLnlyZWYpe2Nhc2UicGFwZXIiOnJldHVybiBuLnQrbi5oLW4uaCpyLnkraTtjYXNlImNvbnRhaW5lciI6ZGVmYXVsdDpyZXR1cm4gdC5oZWlnaHQtdC5oZWlnaHQqci55K2l9fXIubGF5b3V0U3R5bGVzPWZ1bmN0aW9uKHQpe3JldHVybiBvLnN5bmNPckFzeW5jKFthLmRvQXV0b01hcmdpbix4XSx0KX0sci5kcmF3TWFpblRpdGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9Im1pZGRsZSI7by5pc1JpZ2h0QW5jaG9yKGUpP3I9ImVuZCI6by5pc0xlZnRBbmNob3IoZSkmJihyPSJzdGFydCIpO3JldHVybiByfShlKSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGl0bGUscj0iMGVtIjtvLmlzVG9wQW5jaG9yKGUpP3I9cC5DQVBfU0hJRlQrImVtIjpvLmlzTWlkZGxlQW5jaG9yKGUpJiYocj1wLk1JRF9TSElGVCsiZW0iKTtyZXR1cm4gcn0oZSk7dS5kcmF3KHQsImd0aXRsZSIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZToidGl0bGUudGV4dCIscGxhY2Vob2xkZXI6ZS5fZGZsdFRpdGxlLnBsb3QsYXR0cmlidXRlczp7eDpUKGUscikseTprKGUsbiksInRleHQtYW5jaG9yIjpyLGR5Om59fSl9LHIuZG9UcmFjZVN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5jYWxjZGF0YSxvPVtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciBsPW5bZV0sYz1sWzBdfHx7fSx1PWMudHJhY2V8fHt9LGY9dS5fbW9kdWxlfHx7fSxoPWYuYXJyYXlzVG9DYWxjZGF0YTtoJiZoKGwsdSk7dmFyIHA9Zi5lZGl0U3R5bGU7cCYmby5wdXNoKHtmbjpwLGNkMDpjfSl9aWYoby5sZW5ndGgpe2ZvcihlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciBkPW9bZV07ZC5mbih0LGQuY2QwKX1zKHQpLHIucmVkcmF3UmVnbFRyYWNlcyh0KX1yZXR1cm4gYS5zdHlsZSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NvbG9yQmFycz1mdW5jdGlvbih0KXtyZXR1cm4gaS5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5sYXlvdXRSZXBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5sYXlvdXQ7cmV0dXJuIHQubGF5b3V0PXZvaWQgMCxpLmNhbGwoInBsb3QiLHQsIiIsZSl9LHIuZG9MZWdlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvVGlja3NSZWxheW91dD1mdW5jdGlvbih0KXtyZXR1cm4gaC5kcmF3KHQsInJlZHJhdyIpLHQuX2Z1bGxMYXlvdXQuX2hhc09ubHlMYXJnZVNwbG9tcyYmKGkuc3VicGxvdHNSZWdpc3RyeS5zcGxvbS51cGRhdGVHcmlkKHQpLHModCksci5yZWRyYXdSZWdsVHJhY2VzKHQpKSxyLmRyYXdNYWluVGl0bGUodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvTW9kZUJhcj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2YubWFuYWdlKHQpO2Zvcih2YXIgcj0wO3I8ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aDtyKyspe3ZhciBuPWUuX2Jhc2VQbG90TW9kdWxlc1tyXS51cGRhdGVGeDtuJiZuKHQpfXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9DYW1lcmE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZVtyW25dXTtpLl9zY2VuZS5zZXRWaWV3cG9ydChpKX19LHIuZHJhd0RhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtzKHQpO2Zvcih2YXIgbj1lLl9iYXNlUGxvdE1vZHVsZXMsbz0wO288bi5sZW5ndGg7bysrKW5bb10ucGxvdCh0KTtyZXR1cm4gci5yZWRyYXdSZWdsVHJhY2VzKHQpLGEuc3R5bGUodCksaS5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoImltYWdlcyIsImRyYXciKSh0KSxlLl9yZXBsb3R0aW5nPSExLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5yZWRyYXdSZWdsVHJhY2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYoZS5faGFzKCJyZWdsIikpe3ZhciByLG4saT10Ll9mdWxsRGF0YSxhPVtdLHM9W107Zm9yKGUuX2hhc09ubHlMYXJnZVNwbG9tcyYmZS5fc3Bsb21HcmlkLmRyYXcoKSxyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBsPWlbcl07ITA9PT1sLnZpc2libGUmJjAhPT1sLl9sZW5ndGgmJigic3Bsb20iPT09bC50eXBlP2UuX3NwbG9tU2NlbmVzW2wudWlkXS5kcmF3KCk6InNjYXR0ZXJnbCI9PT1sLnR5cGU/by5wdXNoVW5pcXVlKGEsbC54YXhpcytsLnlheGlzKToic2NhdHRlcnBvbGFyZ2wiPT09bC50eXBlJiZvLnB1c2hVbmlxdWUocyxsLnN1YnBsb3QpKX1mb3Iocj0wO3I8YS5sZW5ndGg7cisrKShuPWUuX3Bsb3RzW2Fbcl1dKS5fc2NlbmUmJm4uX3NjZW5lLmRyYXcoKTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKShuPWVbc1tyXV0uX3N1YnBsb3QpLl9zY2VuZSYmbi5fc2NlbmUuZHJhdygpfX0sci5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPWgubGlzdCh0LCIiLCEwKSxuPXt9LGk9MDtpPHIubGVuZ3RoO2krKylpZighblsoZT1yW2ldKS5faWRdKXtuW2UuX2lkXT0xLG0odCxlKSx2KHQsZSk7dmFyIGE9ZS5fbWF0Y2hHcm91cDtpZihhKWZvcih2YXIgbyBpbiBhKXt2YXIgcz1oLmdldEZyb21JZCh0LG8pO3YodCxzLGUucmFuZ2UpLG5bb109MX19Zyh0KX0sci5maW5hbERyYXc9ZnVuY3Rpb24odCl7aS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKHQpfSxyLmRyYXdNYXJnaW5QdXNoZXJzPWZ1bmN0aW9uKHQpe2kuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2VsZWN0b3IiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInNsaWRlcnMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInVwZGF0ZW1lbnVzIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjY2NSwiLi4vY29tcG9uZW50cy9tb2RlYmFyIjo3MDMsIi4uL2NvbXBvbmVudHMvdGl0bGVzIjo3MzgsIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NSwiLi4vbGliIjo3NzgsIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NzYyLCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo4MjcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6ODM1LCIuLi9wbG90cy9wbG90cyI6ODkxLCIuLi9yZWdpc3RyeSI6OTExLGQzOjE2OX1dLDgxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPW4uaXNQbGFpbk9iamVjdCxhPXQoIi4vcGxvdF9zY2hlbWEiKSxvPXQoIi4uL3Bsb3RzL3Bsb3RzIikscz10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuL3Bsb3RfdGVtcGxhdGUiKSxjPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnO2Z1bmN0aW9uIHUodCxlKXt0PW4uZXh0ZW5kRGVlcCh7fSx0KTt2YXIgcixhLG89T2JqZWN0LmtleXModCkuc29ydCgpO2Z1bmN0aW9uIHMoZSxyLG4pe2lmKGkocikmJmkoZSkpdShlLHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSYmQXJyYXkuaXNBcnJheShlKSl7dmFyIG89bC5hcnJheVRlbXBsYXRlcih7X3RlbXBsYXRlOnR9LG4pO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sYz1vLm5ld0l0ZW0ocykuX3RlbXBsYXRlO2MmJnUoYyxzKX12YXIgZj1vLmRlZmF1bHRJdGVtcygpO2ZvcihhPTA7YTxmLmxlbmd0aDthKyspci5wdXNoKGZbYV0uX3RlbXBsYXRlKTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWRlbGV0ZSByW2FdLnRlbXBsYXRlaXRlbW5hbWV9fWZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBjPW9bcl0saD10W2NdO2lmKGMgaW4gZT9zKGgsZVtjXSxjKTplW2NdPWgsZihjKT09PWMpZm9yKHZhciBwIGluIGUpe3ZhciBkPWYocCk7cD09PWR8fGQhPT1jfHxwIGluIHR8fHMoaCxlW3BdLGMpfX19ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XSskLywiIil9ZnVuY3Rpb24gaCh0LGUscixhLG8pe3ZhciBzPW8mJnIobyk7Zm9yKHZhciBjIGluIHQpe3ZhciB1PXRbY10scD1nKHQsYyxhKSxkPWcodCxjLG8pLG09cihkKTtpZighbSl7dmFyIHY9ZihjKTt2IT09YyYmKG09cihkPWcodCx2LG8pKSl9aWYoKCFzfHxzIT09bSkmJiEoIW18fG0uX25vVGVtcGxhdGluZ3x8ImRhdGFfYXJyYXkiPT09bS52YWxUeXBlfHxtLmFycmF5T2smJkFycmF5LmlzQXJyYXkodSkpKWlmKCFtLnZhbFR5cGUmJmkodSkpaCh1LGUscixwLGQpO2Vsc2UgaWYobS5faXNMaW5rZWRUb0FycmF5JiZBcnJheS5pc0FycmF5KHUpKWZvcih2YXIgeT0hMSx4PTAsYj17fSxfPTA7Xzx1Lmxlbmd0aDtfKyspe3ZhciB3PXVbX107aWYoaSh3KSl7dmFyIFQ9dy5uYW1lO2lmKFQpYltUXXx8KGgodyxlLHIsZyh1LHgscCksZyh1LHgsZCkpLHgrKyxiW1RdPTEpO2Vsc2UgaWYoIXkpe3ZhciBrPWcodCxsLmFycmF5RGVmYXVsdEtleShjKSxhKSxNPWcodSx4LHApO2godyxlLHIsTSxnKHUseCxkKSk7dmFyIEE9bi5uZXN0ZWRQcm9wZXJ0eShlLE0pO24ubmVzdGVkUHJvcGVydHkoZSxrKS5zZXQoQS5nZXQoKSksQS5zZXQobnVsbCkseT0hMH19fWVsc2V7bi5uZXN0ZWRQcm9wZXJ0eShlLHApLnNldCh1KX19fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gYS5nZXRMYXlvdXRWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIGEuZ2V0VHJhY2VWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX1mdW5jdGlvbiBnKHQsZSxyKXtyZXR1cm4gcj9BcnJheS5pc0FycmF5KHQpP3IrIlsiK2UrIl0iOnIrIi4iK2U6ZX1mdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKGkodFtlXSkpcmV0dXJuITB9ZnVuY3Rpb24gdih0KXt2YXIgZTtzd2l0Y2godC5jb2RlKXtjYXNlImRhdGEiOmU9IlRoZSB0ZW1wbGF0ZSBoYXMgbm8ga2V5IGRhdGEuIjticmVhaztjYXNlImxheW91dCI6ZT0iVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgbGF5b3V0LiI7YnJlYWs7Y2FzZSJtaXNzaW5nIjplPXQucGF0aD8iVGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgaXRlbSAiK3QucGF0aCsiIHdpdGggbmFtZSAiK3QudGVtcGxhdGVpdGVtbmFtZToiVGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgdHJhY2UgIit0LmluZGV4KyIsIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiLiI7YnJlYWs7Y2FzZSJ1bnVzZWQiOmU9dC5wYXRoPyJUaGUgdGVtcGxhdGUgaXRlbSBhdCAiK3QucGF0aCsiIHdhcyBub3QgdXNlZCBpbiBjb25zdHJ1Y3RpbmcgdGhlIHBsb3QuIjp0LmRhdGFDb3VudD8iU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiIHdlcmUgbm90IHVzZWQuIFRoZSB0ZW1wbGF0ZSBoYXMgIit0LnRlbXBsYXRlQ291bnQrIiB0cmFjZXMsIHRoZSBkYXRhIG9ubHkgaGFzICIrdC5kYXRhQ291bnQrIiBvZiB0aGlzIHR5cGUuIjoiVGhlIHRlbXBsYXRlIGhhcyAiK3QudGVtcGxhdGVDb3VudCsiIHRyYWNlcyBvZiB0eXBlICIrdC50cmFjZVR5cGUrIiBidXQgdGhlcmUgYXJlIG5vbmUgaW4gdGhlIGRhdGEuIjticmVhaztjYXNlInJldXNlZCI6ZT0iU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiIHdlcmUgdXNlZCBtb3JlIHRoYW4gb25jZS4gVGhlIHRlbXBsYXRlIGhhcyAiK3QudGVtcGxhdGVDb3VudCsiIHRyYWNlcywgdGhlIGRhdGEgaGFzICIrdC5kYXRhQ291bnQrIiBvZiB0aGlzIHR5cGUuIn1yZXR1cm4gdC5tc2c9ZSx0fXIubWFrZVRlbXBsYXRlPWZ1bmN0aW9uKHQpe3Q9bi5pc1BsYWluT2JqZWN0KHQpP3Q6bi5nZXRHcmFwaERpdih0KSx0PW4uZXh0ZW5kRGVlcCh7X2NvbnRleHQ6Y30se2RhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dH0pLG8uc3VwcGx5RGVmYXVsdHModCk7dmFyIGU9dC5kYXRhfHxbXSxyPXQubGF5b3V0fHx7fTtyLl9iYXNlUGxvdE1vZHVsZXM9dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLHIuX21vZHVsZXM9dC5fZnVsbExheW91dC5fbW9kdWxlczt2YXIgYT17ZGF0YTp7fSxsYXlvdXQ6e319O2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9e307aCh0LGUsZC5iaW5kKG51bGwsdCkpO3ZhciByPW4uY29lcmNlKHQse30scywidHlwZSIpLGk9YS5kYXRhW3JdO2l8fChpPWEuZGF0YVtyXT1bXSksaS5wdXNoKGUpfSkpLGgocixhLmxheW91dCxwLmJpbmQobnVsbCxyKSksZGVsZXRlIGEubGF5b3V0LnRlbXBsYXRlO3ZhciBsPXIudGVtcGxhdGU7aWYoaShsKSl7dmFyIGYsZyxtLHYseSx4LGI9bC5sYXlvdXQ7aShiKSYmdShiLGEubGF5b3V0KTt2YXIgXz1sLmRhdGE7aWYoaShfKSl7Zm9yKGcgaW4gYS5kYXRhKWlmKG09X1tnXSxBcnJheS5pc0FycmF5KG0pKXtmb3IoeD0oeT1hLmRhdGFbZ10pLmxlbmd0aCx2PW0ubGVuZ3RoLGY9MDtmPHg7ZisrKXUobVtmJXZdLHlbZl0pO2ZvcihmPXg7Zjx2O2YrKyl5LnB1c2gobi5leHRlbmREZWVwKHt9LG1bZl0pKX1mb3IoZyBpbiBfKWcgaW4gYS5kYXRhfHwoYS5kYXRhW2ddPW4uZXh0ZW5kRGVlcChbXSxfW2ddKSl9fXJldHVybiBhfSxyLnZhbGlkYXRlVGVtcGxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmV4dGVuZERlZXAoe30se19jb250ZXh0OmMsZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSksYT1yLmxheW91dHx8e307aShlKXx8KGU9YS50ZW1wbGF0ZXx8e30pO3ZhciBzPWUubGF5b3V0LGw9ZS5kYXRhLHU9W107ci5sYXlvdXQ9YSxyLmxheW91dC50ZW1wbGF0ZT1lLG8uc3VwcGx5RGVmYXVsdHMocik7dmFyIGg9ci5fZnVsbExheW91dCxwPXIuX2Z1bGxEYXRhLGQ9e307aWYoaShzKT8oIWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSYmaShlW25dKSl7dmFyIGEsbz1mKG4pLHM9W107Zm9yKGE9MDthPHIubGVuZ3RoO2ErKylzLnB1c2goZyhlLG4sclthXSkpLG8hPT1uJiZzLnB1c2goZyhlLG8sclthXSkpO2ZvcihhPTA7YTxzLmxlbmd0aDthKyspZFtzW2FdXT0xO3QoZVtuXSxzKX19KGgsWyJsYXlvdXQiXSksZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKC0xPT09bi5pbmRleE9mKCJkZWZhdWx0cyIpJiZpKGVbbl0pKXt2YXIgYT1nKGUsbixyKTtkW2FdP3QoZVtuXSxhKTp1LnB1c2goe2NvZGU6InVudXNlZCIscGF0aDphfSl9fShzLCJsYXlvdXQiKSk6dS5wdXNoKHtjb2RlOiJsYXlvdXQifSksaShsKSl7Zm9yKHZhciB5LHg9e30sYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgXz1wW2JdO3hbeT1fLnR5cGVdPSh4W3ldfHwwKSsxLF8uX2Z1bGxJbnB1dC5fdGVtcGxhdGV8fHUucHVzaCh7Y29kZToibWlzc2luZyIsaW5kZXg6Xy5fZnVsbElucHV0LmluZGV4LHRyYWNlVHlwZTp5fSl9Zm9yKHkgaW4gbCl7dmFyIHc9bFt5XS5sZW5ndGgsVD14W3ldfHwwO3c+VD91LnB1c2goe2NvZGU6InVudXNlZCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDpUfSk6VD53JiZ1LnB1c2goe2NvZGU6InJldXNlZCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDpUfSl9fWVsc2UgdS5wdXNoKHtjb2RlOiJkYXRhIn0pO2lmKGZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSl7dmFyIGE9ZVtuXSxvPWcoZSxuLHIpO2koYSk/KEFycmF5LmlzQXJyYXkoZSkmJiExPT09YS5fdGVtcGxhdGUmJmEudGVtcGxhdGVpdGVtbmFtZSYmdS5wdXNoKHtjb2RlOiJtaXNzaW5nIixwYXRoOm8sdGVtcGxhdGVpdGVtbmFtZTphLnRlbXBsYXRlaXRlbW5hbWV9KSx0KGEsbykpOkFycmF5LmlzQXJyYXkoYSkmJm0oYSkmJnQoYSxvKX19KHtkYXRhOnAsbGF5b3V0Omh9LCIiKSx1Lmxlbmd0aClyZXR1cm4gdS5tYXAodil9fSx7Ii4uL2xpYiI6Nzc4LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjQsIi4uL3Bsb3RzL3Bsb3RzIjo4OTEsIi4vcGxvdF9jb25maWciOjgxNSwiLi9wbG90X3NjaGVtYSI6ODE2LCIuL3Bsb3RfdGVtcGxhdGUiOjgxN31dLDgyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9wbG90X2FwaSIpLGE9dCgiLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uL2xpYiIpLHM9dCgiLi4vc25hcHNob3QvaGVscGVycyIpLGw9dCgiLi4vc25hcHNob3QvdG9zdmciKSxjPXQoIi4uL3NuYXBzaG90L3N2Z3RvaW1nIiksdT10KCIuLi92ZXJzaW9uIikudmVyc2lvbixmPXtmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBuZyIsImpwZWciLCJ3ZWJwIiwic3ZnIiwiZnVsbC1qc29uIl0sZGZsdDoicG5nIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjF9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGltYWdlRGF0YU9ubHk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixoLHAsZDtmdW5jdGlvbiBnKHQpe3JldHVybiEodCBpbiBlKXx8by52YWxpZGF0ZShlW3RdLGZbdF0pfWlmKGU9ZXx8e30sby5pc1BsYWluT2JqZWN0KHQpPyhyPXQuZGF0YXx8W10saD10LmxheW91dHx8e30scD10LmNvbmZpZ3x8e30sZD17fSk6KHQ9by5nZXRHcmFwaERpdih0KSxyPW8uZXh0ZW5kRGVlcChbXSx0LmRhdGEpLGg9by5leHRlbmREZWVwKHt9LHQubGF5b3V0KSxwPXQuX2NvbnRleHQsZD10Ll9mdWxsTGF5b3V0fHx7fSksIWcoIndpZHRoIikmJm51bGwhPT1lLndpZHRofHwhZygiaGVpZ2h0IikmJm51bGwhPT1lLmhlaWdodCl0aHJvdyBuZXcgRXJyb3IoIkhlaWdodCBhbmQgd2lkdGggc2hvdWxkIGJlIHBpeGVsIHZhbHVlcy4iKTtpZighZygiZm9ybWF0IikpdGhyb3cgbmV3IEVycm9yKCJFeHBvcnQgZm9ybWF0IGlzIG5vdCAiK28uam9pbjIoZi5mb3JtYXQudmFsdWVzLCIsICIsIiBvciAiKSsiLiIpO3ZhciBtPXt9O2Z1bmN0aW9uIHYodCxyKXtyZXR1cm4gby5jb2VyY2UoZSxtLGYsdCxyKX12YXIgeT12KCJmb3JtYXQiKSx4PXYoIndpZHRoIiksYj12KCJoZWlnaHQiKSxfPXYoInNjYWxlIiksdz12KCJzZXRCYWNrZ3JvdW5kIiksVD12KCJpbWFnZURhdGFPbmx5Iiksaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtrLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsay5zdHlsZS5sZWZ0PSItNTAwMHB4Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGspO3ZhciBNPW8uZXh0ZW5kRmxhdCh7fSxoKTt4P00ud2lkdGg9eDpudWxsPT09ZS53aWR0aCYmbihkLndpZHRoKSYmKE0ud2lkdGg9ZC53aWR0aCksYj9NLmhlaWdodD1iOm51bGw9PT1lLmhlaWdodCYmbihkLmhlaWdodCkmJihNLmhlaWdodD1kLmhlaWdodCk7dmFyIEE9by5leHRlbmRGbGF0KHt9LHAse19leHBvcnRlZFBsb3Q6ITAsc3RhdGljUGxvdDohMCxzZXRCYWNrZ3JvdW5kOnd9KSxTPXMuZ2V0UmVkcmF3RnVuYyhrKTtmdW5jdGlvbiBFKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQscy5nZXREZWxheShrLl9mdWxsTGF5b3V0KSl9KSl9ZnVuY3Rpb24gQygpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxlKXt2YXIgcj1sKGsseSxfKSxuPWsuX2Z1bGxMYXlvdXQud2lkdGgsZj1rLl9mdWxsTGF5b3V0LmhlaWdodDtmdW5jdGlvbiBoKCl7aS5wdXJnZShrKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGspfWlmKCJmdWxsLWpzb24iPT09eSl7dmFyIHA9YS5ncmFwaEpzb24oaywhMSwia2VlcGRhdGEiLCJvYmplY3QiLCEwLCEwKTtyZXR1cm4gcC52ZXJzaW9uPXUscD1KU09OLnN0cmluZ2lmeShwKSxoKCksdChUP3A6cy5lbmNvZGVKU09OKHApKX1pZihoKCksInN2ZyI9PT15KXJldHVybiB0KFQ/cjpzLmVuY29kZVNWRyhyKSk7dmFyIGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZC5pZD1vLnJhbmRzdHIoKSxjKHtmb3JtYXQ6eSx3aWR0aDpuLGhlaWdodDpmLHNjYWxlOl8sY2FudmFzOmQsc3ZnOnIscHJvbWlzZTohMH0pLnRoZW4odCkuY2F0Y2goZSl9KSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LGUpe2kucGxvdChrLHIsTSxBKS50aGVuKFMpLnRoZW4oRSkudGhlbihDKS50aGVuKChmdW5jdGlvbihlKXt0KGZ1bmN0aW9uKHQpe3JldHVybiBUP3QucmVwbGFjZShzLklNQUdFX1VSTF9QUkVGSVgsIiIpOnR9KGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ZSh0KX0pKX0pKX19LHsiLi4vbGliIjo3NzgsIi4uL3Bsb3RzL3Bsb3RzIjo4OTEsIi4uL3NuYXBzaG90L2hlbHBlcnMiOjkxNSwiLi4vc25hcHNob3Qvc3ZndG9pbWciOjkxNywiLi4vc25hcHNob3QvdG9zdmciOjkxOSwiLi4vdmVyc2lvbiI6MTM3MCwiLi9wbG90X2FwaSI6ODE0LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sODIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4vcGxvdF9zY2hlbWEiKSxvPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnLHM9bi5pc1BsYWluT2JqZWN0LGw9QXJyYXkuaXNBcnJheSxjPW4uaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiB1KHQsZSxyLGksYSxvKXtvPW98fFtdO2Zvcih2YXIgZj1PYmplY3Qua2V5cyh0KSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBwPWZbaF07aWYoInRyYW5zZm9ybXMiIT09cCl7dmFyIHY9by5zbGljZSgpO3YucHVzaChwKTt2YXIgeT10W3BdLHg9ZVtwXSxiPW0ocixwKSxfPShifHx7fSkudmFsVHlwZSx3PSJpbmZvX2FycmF5Ij09PV8sVD0iY29sb3JzY2FsZSI9PT1fLGs9KGJ8fHt9KS5pdGVtcztpZihnKHIscCkpaWYocyh5KSYmcyh4KSYmImFueSIhPT1fKXUoeSx4LGIsaSxhLHYpO2Vsc2UgaWYodyYmbCh5KSl7eS5sZW5ndGg+eC5sZW5ndGgmJmkucHVzaChkKCJ1bnVzZWQiLGEsdi5jb25jYXQoeC5sZW5ndGgpKSk7dmFyIE0sQSxTLEUsQyxMPXgubGVuZ3RoLEk9QXJyYXkuaXNBcnJheShrKTtpZihJJiYoTD1NYXRoLm1pbihMLGsubGVuZ3RoKSksMj09PWIuZGltZW5zaW9ucylmb3IoQT0wO0E8TDtBKyspaWYobCh5W0FdKSl7eVtBXS5sZW5ndGg+eFtBXS5sZW5ndGgmJmkucHVzaChkKCJ1bnVzZWQiLGEsdi5jb25jYXQoQSx4W0FdLmxlbmd0aCkpKTt2YXIgUD14W0FdLmxlbmd0aDtmb3IoTT0wO008KEk/TWF0aC5taW4oUCxrW0FdLmxlbmd0aCk6UCk7TSsrKVM9ST9rW0FdW01dOmssRT15W0FdW01dLEM9eFtBXVtNXSxuLnZhbGlkYXRlKEUsUyk/QyE9PUUmJkMhPT0rRSYmaS5wdXNoKGQoImR5bmFtaWMiLGEsdi5jb25jYXQoQSxNKSxFLEMpKTppLnB1c2goZCgidmFsdWUiLGEsdi5jb25jYXQoQSxNKSxFKSl9ZWxzZSBpLnB1c2goZCgiYXJyYXkiLGEsdi5jb25jYXQoQSkseVtBXSkpO2Vsc2UgZm9yKEE9MDtBPEw7QSsrKVM9ST9rW0FdOmssRT15W0FdLEM9eFtBXSxuLnZhbGlkYXRlKEUsUyk/QyE9PUUmJkMhPT0rRSYmaS5wdXNoKGQoImR5bmFtaWMiLGEsdi5jb25jYXQoQSksRSxDKSk6aS5wdXNoKGQoInZhbHVlIixhLHYuY29uY2F0KEEpLEUpKX1lbHNlIGlmKGIuaXRlbXMmJiF3JiZsKHkpKXt2YXIgeixPLEQ9a1tPYmplY3Qua2V5cyhrKVswXV0sUj1bXTtmb3Ioej0wO3o8eC5sZW5ndGg7eisrKXt2YXIgRj14W3pdLl9pbmRleHx8ejtpZigoTz12LnNsaWNlKCkpLnB1c2goRikscyh5W0ZdKSYmcyh4W3pdKSl7Ui5wdXNoKEYpO3ZhciBCPXlbRl0sTj14W3pdO3MoQikmJiExIT09Qi52aXNpYmxlJiYhMT09PU4udmlzaWJsZT9pLnB1c2goZCgiaW52aXNpYmxlIixhLE8pKTp1KEIsTixELGksYSxPKX19Zm9yKHo9MDt6PHkubGVuZ3RoO3orKykoTz12LnNsaWNlKCkpLnB1c2goeikscyh5W3pdKT8tMT09PVIuaW5kZXhPZih6KSYmaS5wdXNoKGQoInVudXNlZCIsYSxPKSk6aS5wdXNoKGQoIm9iamVjdCIsYSxPLHlbel0pKX1lbHNlIXMoeSkmJnMoeCk/aS5wdXNoKGQoIm9iamVjdCIsYSx2LHkpKTpjKHkpfHwhYyh4KXx8d3x8VD9wIGluIGU/bi52YWxpZGF0ZSh5LGIpPyJlbnVtZXJhdGVkIj09PWIudmFsVHlwZSYmKGIuY29lcmNlTnVtYmVyJiZ5IT09K3h8fHkhPT14KSYmaS5wdXNoKGQoImR5bmFtaWMiLGEsdix5LHgpKTppLnB1c2goZCgidmFsdWUiLGEsdix5KSk6aS5wdXNoKGQoInVudXNlZCIsYSx2LHkpKTppLnB1c2goZCgiYXJyYXkiLGEsdix5KSk7ZWxzZSBpLnB1c2goZCgic2NoZW1hIixhLHYpKX19cmV0dXJuIGl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj10LmxheW91dC5sYXlvdXRBdHRyaWJ1dGVzLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPXQudHJhY2VzW2EudHlwZV0scz1vLmxheW91dEF0dHJpYnV0ZXM7cyYmKGEuc3VicGxvdD9uLmV4dGVuZEZsYXQocltvLmF0dHJpYnV0ZXMuc3VicGxvdC5kZmx0XSxzKTpuLmV4dGVuZEZsYXQocixzKSl9cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPXt9KTt2YXIgcixjLGg9YS5nZXQoKSxwPVtdLGc9e19jb250ZXh0Om4uZXh0ZW5kRmxhdCh7fSxvKX07bCh0KT8oZy5kYXRhPW4uZXh0ZW5kRGVlcChbXSx0KSxyPXQpOihnLmRhdGE9W10scj1bXSxwLnB1c2goZCgiYXJyYXkiLCJkYXRhIikpKSxzKGUpPyhnLmxheW91dD1uLmV4dGVuZERlZXAoe30sZSksYz1lKTooZy5sYXlvdXQ9e30sYz17fSxhcmd1bWVudHMubGVuZ3RoPjEmJnAucHVzaChkKCJvYmplY3QiLCJsYXlvdXQiKSkpLGkuc3VwcGx5RGVmYXVsdHMoZyk7Zm9yKHZhciBtPWcuX2Z1bGxEYXRhLHY9ci5sZW5ndGgseT0wO3k8djt5Kyspe3ZhciB4PXJbeV0sYj1bImRhdGEiLHldO2lmKHMoeCkpe3ZhciBfPW1beV0sdz1fLnR5cGUsVD1oLnRyYWNlc1t3XS5hdHRyaWJ1dGVzO1QudHlwZT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlt3XX0sITE9PT1fLnZpc2libGUmJiExIT09eC52aXNpYmxlJiZwLnB1c2goZCgiaW52aXNpYmxlIixiKSksdSh4LF8sVCxwLGIpO3ZhciBrPXgudHJhbnNmb3JtcyxNPV8udHJhbnNmb3JtcztpZihrKXtsKGspfHxwLnB1c2goZCgiYXJyYXkiLGIsWyJ0cmFuc2Zvcm1zIl0pKSxiLnB1c2goInRyYW5zZm9ybXMiKTtmb3IodmFyIEE9MDtBPGsubGVuZ3RoO0ErKyl7dmFyIFM9WyJ0cmFuc2Zvcm1zIixBXSxFPWtbQV0udHlwZTtpZihzKGtbQV0pKXt2YXIgQz1oLnRyYW5zZm9ybXNbRV0/aC50cmFuc2Zvcm1zW0VdLmF0dHJpYnV0ZXM6e307Qy50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMoaC50cmFuc2Zvcm1zKX0sdShrW0FdLE1bQV0sQyxwLGIsUyl9ZWxzZSBwLnB1c2goZCgib2JqZWN0IixiLFMpKX19fWVsc2UgcC5wdXNoKGQoIm9iamVjdCIsYikpfXZhciBMPWcuX2Z1bGxMYXlvdXQsST1mKGgsbSk7cmV0dXJuIHUoYyxMLEkscCwibGF5b3V0IiksMD09PXAubGVuZ3RoP3ZvaWQgMDpwfTt2YXIgaD17b2JqZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKCJsYXlvdXQiPT09dCYmIiI9PT1lPyJUaGUgbGF5b3V0IGFyZ3VtZW50IjoiZGF0YSI9PT10WzBdJiYiIj09PWU/IlRyYWNlICIrdFsxXSsiIGluIHRoZSBkYXRhIGFyZ3VtZW50IjpwKHQpKyJrZXkgIitlKSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIG9iamVjdCBjb250YWluZXIifSxhcnJheTpmdW5jdGlvbih0LGUpe3JldHVybigiZGF0YSI9PT10PyJUaGUgZGF0YSBhcmd1bWVudCI6cCh0KSsia2V5ICIrZSkrIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBhcnJheSBjb250YWluZXIifSxzY2hlbWE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcCh0KSsia2V5ICIrZSsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBzY2hlbWEifSx1bnVzZWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMocik/ImNvbnRhaW5lciI6ImtleSI7cmV0dXJuIHAodCkrbisiICIrZSsiIGRpZCBub3QgZ2V0IGNvZXJjZWQifSxkeW5hbWljOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybltwKHQpKyJrZXkiLGUsIihzZXQgdG8gJyIrcisiJykiLCJnb3QgcmVzZXQgdG8iLCInIituKyInIiwiZHVyaW5nIGRlZmF1bHRzLiJdLmpvaW4oIiAiKX0saW52aXNpYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU/cCh0KSsiaXRlbSAiK2U6IlRyYWNlICIrdFsxXSkrIiBnb3QgZGVmYXVsdGVkIHRvIGJlIG5vdCB2aXNpYmxlIn0sdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybltwKHQpKyJrZXkgIitlLCJpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAoIityKyIpIl0uam9pbigiICIpfX07ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbCh0KT8iSW4gZGF0YSB0cmFjZSAiK3RbMV0rIiwgIjoiSW4gIit0KyIsICJ9ZnVuY3Rpb24gZCh0LGUscixpLGEpe3ZhciBvLHM7cj1yfHwiIixsKGUpPyhvPWVbMF0scz1lWzFdKToobz1lLHM9bnVsbCk7dmFyIGM9ZnVuY3Rpb24odCl7aWYoIWwodCkpcmV0dXJuIFN0cmluZyh0KTtmb3IodmFyIGU9IiIscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOyJudW1iZXIiPT10eXBlb2Ygbj9lPWUuc3Vic3RyKDAsZS5sZW5ndGgtMSkrIlsiK24rIl0iOmUrPW4scjx0Lmxlbmd0aC0xJiYoZSs9Ii4iKX1yZXR1cm4gZX0ociksdT1oW3RdKGUsYyxpLGEpO3JldHVybiBuLmxvZyh1KSx7Y29kZTp0LGNvbnRhaW5lcjpvLHRyYWNlOnMscGF0aDpyLGFzdHI6Yyxtc2c6dX19ZnVuY3Rpb24gZyh0LGUpe3ZhciByPXkoZSksbj1yLmtleU1pbnVzSWQsaT1yLmlkO3JldHVybiEhKG4gaW4gdCYmdFtuXS5faXNTdWJwbG90T2JqJiZpKXx8ZSBpbiB0fWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gZSBpbiB0P3RbZV06dFt5KGUpLmtleU1pbnVzSWRdfXZhciB2PW4uY291bnRlclJlZ2V4KCIoW2Etel0rKSIpO2Z1bmN0aW9uIHkodCl7dmFyIGU9dC5tYXRjaCh2KTtyZXR1cm57a2V5TWludXNJZDplJiZlWzFdLGlkOmUmJmVbMl19fX0seyIuLi9saWIiOjc3OCwiLi4vcGxvdHMvcGxvdHMiOjg5MSwiLi9wbG90X2NvbmZpZyI6ODE1LCIuL3Bsb3Rfc2NoZW1hIjo4MTZ9XSw4MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhZnRlcmFsbCIsdmFsdWVzOlsiaW1tZWRpYXRlIiwibmV4dCIsImFmdGVyYWxsIl19LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZm9yd2FyZCIsInJldmVyc2UiXSxkZmx0OiJmb3J3YXJkIn0sZnJvbWN1cnJlbnQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZyYW1lOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMH0scmVkcmF3Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1MDAsZWRpdFR5cGU6Im5vbmUifSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImN1YmljLWluLW91dCIsdmFsdWVzOlsibGluZWFyIiwicXVhZCIsImN1YmljIiwic2luIiwiZXhwIiwiY2lyY2xlIiwiZWxhc3RpYyIsImJhY2siLCJib3VuY2UiLCJsaW5lYXItaW4iLCJxdWFkLWluIiwiY3ViaWMtaW4iLCJzaW4taW4iLCJleHAtaW4iLCJjaXJjbGUtaW4iLCJlbGFzdGljLWluIiwiYmFjay1pbiIsImJvdW5jZS1pbiIsImxpbmVhci1vdXQiLCJxdWFkLW91dCIsImN1YmljLW91dCIsInNpbi1vdXQiLCJleHAtb3V0IiwiY2lyY2xlLW91dCIsImVsYXN0aWMtb3V0IiwiYmFjay1vdXQiLCJib3VuY2Utb3V0IiwibGluZWFyLWluLW91dCIsInF1YWQtaW4tb3V0IiwiY3ViaWMtaW4tb3V0Iiwic2luLWluLW91dCIsImV4cC1pbi1vdXQiLCJjaXJjbGUtaW4tb3V0IiwiZWxhc3RpYy1pbi1vdXQiLCJiYWNrLWluLW91dCIsImJvdW5jZS1pbi1vdXQiXSxlZGl0VHlwZToibm9uZSJ9LG9yZGVyaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsYXlvdXQgZmlyc3QiLCJ0cmFjZXMgZmlyc3QiXSxkZmx0OiJsYXlvdXQgZmlyc3QiLGVkaXRUeXBlOiJub25lIn19fX0se31dLDgyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scz1yLm5hbWUsbD1yLmluY2x1c2lvbkF0dHJ8fCJ2aXNpYmxlIixjPWVbc10sdT1uLmlzQXJyYXlPclR5cGVkQXJyYXkodFtzXSk/dFtzXTpbXSxmPWVbc109W10saD1pLmFycmF5VGVtcGxhdGVyKGUscyxsKTtmb3IoYT0wO2E8dS5sZW5ndGg7YSsrKXt2YXIgcD11W2FdO24uaXNQbGFpbk9iamVjdChwKT9vPWgubmV3SXRlbShwKToobz1oLm5ld0l0ZW0oe30pKVtsXT0hMSxvLl9pbmRleD1hLCExIT09b1tsXSYmci5oYW5kbGVJdGVtRGVmYXVsdHMocCxvLGUsciksZi5wdXNoKG8pfXZhciBkPWguZGVmYXVsdEl0ZW1zKCk7Zm9yKGE9MDthPGQubGVuZ3RoO2ErKykobz1kW2FdKS5faW5kZXg9Zi5sZW5ndGgsci5oYW5kbGVJdGVtRGVmYXVsdHMoe30sbyxlLHIse30pLGYucHVzaChvKTtpZihuLmlzQXJyYXlPclR5cGVkQXJyYXkoYykpe3ZhciBnPU1hdGgubWluKGMubGVuZ3RoLGYubGVuZ3RoKTtmb3IoYT0wO2E8ZzthKyspbi5yZWxpbmtQcml2YXRlS2V5cyhmW2FdLGNbYV0pfXJldHVybiBmfX0seyIuLi9saWIiOjc3OCwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE3fV0sODI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltdLGRmbHQ6InNjYXR0ZXIiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixfbm9UZW1wbGF0aW5nOiEwfSx2aXNpYmxlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJsZWdlbmRvbmx5Il0sZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InN0eWxlIn0sbGVnZW5kZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToic3R5bGUifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSxuYW1lOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJzdHlsZSJ9LHVpZDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCIsYW5pbTohMH0saWRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0sY3VzdG9tZGF0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxtZXRhOnt2YWxUeXBlOiJhbnkiLGFycmF5T2s6ITAsZWRpdFR5cGU6InBsb3QifSxzZWxlY3RlZHBvaW50czp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGhvdmVyaW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsieCIsInkiLCJ6IiwidGV4dCIsIm5hbWUiXSxleHRyYXM6WyJhbGwiLCJub25lIiwic2tpcCJdLGFycmF5T2s6ITAsZGZsdDoiYWxsIixlZGl0VHlwZToibm9uZSJ9LGhvdmVybGFiZWw6bi5ob3ZlcmxhYmVsLHN0cmVhbTp7dG9rZW46e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITAsZWRpdFR5cGU6ImNhbGMifSxtYXhwb2ludHM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjFlNCxkZmx0OjUwMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNmb3Jtczp7X2lzTGlua2VkVG9BcnJheToidHJhbnNmb3JtIixlZGl0VHlwZToiY2FsYyJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifX19LHsiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo2NzR9XSw4MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9aS5kYXRlVGltZTJtcyxvPWkuaW5jcmVtZW50TW9udGgscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuT05FQVZHTU9OVEg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2lmKCJkYXRlIiE9PWUudHlwZSlyZXR1cm4gaTt2YXIgbD10W3IrInBlcmlvZGFsaWdubWVudCJdO2lmKCFsKXJldHVybiBpO3ZhciBjLHU9dFtyKyJwZXJpb2QiXTtpZihuKHUpKXtpZigodT0rdSk8PTApcmV0dXJuIGl9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHUmJiJNIj09PXUuY2hhckF0KDApKXt2YXIgZj0rdS5zdWJzdHJpbmcoMSk7aWYoIShmPjAmJk1hdGgucm91bmQoZik9PT1mKSlyZXR1cm4gaTtjPWZ9Zm9yKHZhciBoPWUuY2FsZW5kYXIscD0ic3RhcnQiPT09bCxkPSJlbmQiPT09bCxnPXRbcisicGVyaW9kMCJdLG09YShnLGgpfHwwLHY9W10seT1pLmxlbmd0aCx4PTA7eDx5O3grKyl7dmFyIGIsXyx3LFQ9aVt4XTtpZihjKXtmb3IoYj1NYXRoLnJvdW5kKChULW0pLyhjKnMpKSx3PW8obSxjKmIsaCk7dz5UOyl3PW8odywtYyxoKTtmb3IoO3c8PVQ7KXc9byh3LGMsaCk7Xz1vKHcsLWMsaCl9ZWxzZXtmb3Iodz1tKyhiPU1hdGgucm91bmQoKFQtbSkvdSkpKnU7dz5UOyl3LT11O2Zvcig7dzw9VDspdys9dTtfPXctdX12W3hdPXA/XzpkP3c6KF8rdykvMn1yZXR1cm4gdn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi8uLi9saWIiOjc3OCwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDgyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3hheGlzOnt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6IngiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seWF4aXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoieSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifX19LHt9XSw4Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkZQX1NBRkUsbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi9heGlzX2lkcyIpLGw9cy5nZXRGcm9tSWQsYz1zLmlzTGlua2VkO2Z1bmN0aW9uIHUodCxlKXt2YXIgcixuLGE9W10sbz10Ll9mdWxsTGF5b3V0LHM9aChvLGUsMCksbD1oKG8sZSwxKSxjPXAodCxlKSx1PWMubWluLGQ9Yy5tYXg7aWYoMD09PXUubGVuZ3RofHwwPT09ZC5sZW5ndGgpcmV0dXJuIGkuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpO3ZhciBnPXVbMF0udmFsLG09ZFswXS52YWw7Zm9yKHI9MTtyPHUubGVuZ3RoJiZnPT09bTtyKyspZz1NYXRoLm1pbihnLHVbcl0udmFsKTtmb3Iocj0xO3I8ZC5sZW5ndGgmJmc9PT1tO3IrKyltPU1hdGgubWF4KG0sZFtyXS52YWwpO3ZhciB2PSExO2lmKGUucmFuZ2Upe3ZhciB5PWkuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpO3Y9eVsxXTx5WzBdfSJyZXZlcnNlZCI9PT1lLmF1dG9yYW5nZSYmKHY9ITAsZS5hdXRvcmFuZ2U9ITApO3ZhciB4LGIsXyx3LFQsayxNPWUucmFuZ2Vtb2RlLEE9InRvemVybyI9PT1NLFM9Im5vbm5lZ2F0aXZlIj09PU0sRT1lLl9sZW5ndGgsQz1FLzEwLEw9MDtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKWZvcih4PXVbcl0sbj0wO248ZC5sZW5ndGg7bisrKShrPShiPWRbbl0pLnZhbC14LnZhbC1mKGUseC52YWwsYi52YWwpKT4wJiYoKFQ9RS1zKHgpLWwoYikpPkM/ay9UPkwmJihfPXgsdz1iLEw9ay9UKTprL0U+TCYmKF89e3ZhbDp4LnZhbCxub3BhZDoxfSx3PXt2YWw6Yi52YWwsbm9wYWQ6MX0sTD1rL0UpKTtpZihnPT09bSl7dmFyIEk9Zy0xLFA9ZysxO2lmKEEpaWYoMD09PWcpYT1bMCwxXTtlbHNle3ZhciB6PShnPjA/ZDp1KS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsbChlKSl9KSwwKSxPPWcvKDEtTWF0aC5taW4oLjUsei9FKSk7YT1nPjA/WzAsT106W08sMF19ZWxzZSBhPVM/W01hdGgubWF4KDAsSSksTWF0aC5tYXgoMSxQKV06W0ksUF19ZWxzZSBBPyhfLnZhbD49MCYmKF89e3ZhbDowLG5vcGFkOjF9KSx3LnZhbDw9MCYmKHc9e3ZhbDowLG5vcGFkOjF9KSk6UyYmKF8udmFsLUwqcyhfKTwwJiYoXz17dmFsOjAsbm9wYWQ6MX0pLHcudmFsPD0wJiYodz17dmFsOjEsbm9wYWQ6MX0pKSxMPSh3LnZhbC1fLnZhbC1mKGUseC52YWwsYi52YWwpKS8oRS1zKF8pLWwodykpLGE9W18udmFsLUwqcyhfKSx3LnZhbCtMKmwodyldO3JldHVybiB2JiZhLnJldmVyc2UoKSxpLnNpbXBsZU1hcChhLGUubDJyfHxOdW1iZXIpfWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBuPTA7aWYodC5yYW5nZWJyZWFrcylmb3IodmFyIGk9dC5sb2NhdGVCcmVha3MoZSxyKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07bis9by5tYXgtby5taW59cmV0dXJuIG59ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49LjA1KmUuX2xlbmd0aCxhPWUuX2FuY2hvckF4aXN8fHt9O2lmKC0xIT09KGUudGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKXx8LTEhPT0oYS50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpKXt2YXIgbz0icmV2ZXJzZWQiPT09ZS5hdXRvcmFuZ2U7aWYoIW8pe3ZhciBzPWkuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpO289c1sxXTxzWzBdfW8mJihyPSFyKX12YXIgbD0wO3JldHVybiBjKHQsZS5faWQpfHwobD1mdW5jdGlvbih0LGUpe3ZhciByPTAsbj10Ll9hbmNob3JBeGlzfHx7fTtpZigtMSE9PShuLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIikmJighZSYmKCJsZWZ0Ij09PW4uc2lkZXx8ImJvdHRvbSI9PT1uLnNpZGUpfHxlJiYoInRvcCI9PT1uLnNpZGV8fCJyaWdodCI9PT1uLnNpZGUpKSl7dmFyIGE9IngiPT09dC5faWQuY2hhckF0KDApO2lmKG4uX3ZhbHMpe3ZhciBvPWkuZGVnMnJhZChuLl90aWNrQW5nbGVzW24uX2lkKyJ0aWNrIl18fDApLHM9TWF0aC5hYnMoTWF0aC5jb3MobykpLGw9TWF0aC5hYnMoTWF0aC5zaW4obykpO24uX3ZhbHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYodC5iYil7dmFyIGU9Nit0LmJiLndpZHRoLG49Nit0LmJiLmhlaWdodDtyPU1hdGgubWF4KHIsYT9NYXRoLm1heChlKnMsbipsKTpNYXRoLm1heChuKnMsZSpsKSl9fSkpfSJpbnNpZGUiPT09bi50aWNrcyYmImluc2lkZSI9PT1uLnRpY2tsYWJlbHBvc2l0aW9uJiYocis9bi50aWNrbGVufHwwKX1yZXR1cm4gcn0oZSxyKSksbj1NYXRoLm1heChsLG4pLCJkb21haW4iPT09ZS5jb25zdHJhaW4mJmUuX2lucHV0RG9tYWluJiYobio9KGUuX2lucHV0RG9tYWluWzFdLWUuX2lucHV0RG9tYWluWzBdKS8oZS5kb21haW5bMV0tZS5kb21haW5bMF0pKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5ub3BhZD8wOnQucGFkKyh0LmV4dHJhcGFkP246bCl9fWUuZXhwb3J0cz17Z2V0QXV0b1JhbmdlOnUsbWFrZVBhZEZuOmgsZG9BdXRvUmFuZ2U6ZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0U2NhbGUoKSxlLmF1dG9yYW5nZSl7ZS5yYW5nZT1yP3Iuc2xpY2UoKTp1KHQsZSksZS5fcj1lLnJhbmdlLnNsaWNlKCksZS5fcmw9aS5zaW1wbGVNYXAoZS5fcixlLnIybCk7dmFyIG49ZS5faW5wdXQsYT17fTthW2UuX2F0dHIrIi5yYW5nZSJdPWUucmFuZ2UsYVtlLl9hdHRyKyIuYXV0b3JhbmdlIl09ZS5hdXRvcmFuZ2Usby5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksYSksbi5yYW5nZT1lLnJhbmdlLnNsaWNlKCksbi5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2V9dmFyIHM9ZS5fYW5jaG9yQXhpcztpZihzJiZzLnJhbmdlc2xpZGVyKXt2YXIgbD1zLnJhbmdlc2xpZGVyW2UuX25hbWVdO2wmJiJhdXRvIj09PWwucmFuZ2Vtb2RlJiYobC5yYW5nZT11KHQsZSkpLHMuX2lucHV0LnJhbmdlc2xpZGVyW2UuX25hbWVdPWkuZXh0ZW5kRmxhdCh7fSxsKX19LGZpbmRFeHRyZW1lczpmdW5jdGlvbih0LGUscil7cnx8KHI9e30pO3QuX218fHQuc2V0U2NhbGUoKTt2YXIgaSxvLHMsbCxjLHUsZixoLHAsbT1bXSx5PVtdLHg9ZS5sZW5ndGgsYj1yLnBhZGRlZHx8ITEsXz1yLnRvemVybyYmKCJsaW5lYXIiPT09dC50eXBlfHwiLSI9PT10LnR5cGUpLHc9ImxvZyI9PT10LnR5cGUsVD0hMSxrPXIudnBhZExpbmVhcml6ZWR8fCExO2Z1bmN0aW9uIE0odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gVD0hMCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoTnVtYmVyKHRbZV18fDApLDApfTt2YXIgZT1NYXRoLm1heChOdW1iZXIodHx8MCksMCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBBPU0oKHQuX20+MD9yLnBwYWRwbHVzOnIucHBhZG1pbnVzKXx8ci5wcGFkfHwwKSxTPU0oKHQuX20+MD9yLnBwYWRtaW51czpyLnBwYWRwbHVzKXx8ci5wcGFkfHwwKSxFPU0oci52cGFkcGx1c3x8ci52cGFkKSxDPU0oci52cGFkbWludXN8fHIudnBhZCk7aWYoIVQpe2lmKGg9MS8wLHA9LTEvMCx3KWZvcihpPTA7aTx4O2krKykobz1lW2ldKTxoJiZvPjAmJihoPW8pLG8+cCYmbzxhJiYocD1vKTtlbHNlIGZvcihpPTA7aTx4O2krKykobz1lW2ldKTxoJiZvPi1hJiYoaD1vKSxvPnAmJm88YSYmKHA9byk7ZT1baCxwXSx4PTJ9dmFyIEw9e3RvemVybzpfLGV4dHJhcGFkOmJ9O2Z1bmN0aW9uIEkocil7cz1lW3JdLG4ocykmJih1PUEociksZj1TKHIpLGs/KGw9dC5jMmwocyktQyhyKSxjPXQuYzJsKHMpK0UocikpOihoPXMtQyhyKSxwPXMrRShyKSx3JiZoPHAvMTAmJihoPXAvMTApLGw9dC5jMmwoaCksYz10LmMybChwKSksXyYmKGw9TWF0aC5taW4oMCxsKSxjPU1hdGgubWF4KDAsYykpLHYobCkmJmQobSxsLGYsTCksdihjKSYmZyh5LGMsdSxMKSl9dmFyIFA9TWF0aC5taW4oNix4KTtmb3IoaT0wO2k8UDtpKyspSShpKTtmb3IoaT14LTE7aT49UDtpLS0pSShpKTtyZXR1cm57bWluOm0sbWF4Onksb3B0czpyfX0sY29uY2F0RXh0cmVtZXM6cH07ZnVuY3Rpb24gcCh0LGUscil7dmFyIG4saSxhLG89ZS5faWQscz10Ll9mdWxsRGF0YSxjPXQuX2Z1bGxMYXlvdXQsdT1bXSxmPVtdO2Z1bmN0aW9uIGgodCxlKXtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj10W2Vbbl1dLHM9KHIuX2V4dHJlbWVzfHx7fSlbb107aWYoITA9PT1yLnZpc2libGUmJnMpe2ZvcihpPTA7aTxzLm1pbi5sZW5ndGg7aSsrKWE9cy5taW5baV0sZCh1LGEudmFsLGEucGFkLHtleHRyYXBhZDphLmV4dHJhcGFkfSk7Zm9yKGk9MDtpPHMubWF4Lmxlbmd0aDtpKyspYT1zLm1heFtpXSxnKGYsYS52YWwsYS5wYWQse2V4dHJhcGFkOmEuZXh0cmFwYWR9KX19fWlmKGgocyxlLl90cmFjZUluZGljZXMpLGgoYy5hbm5vdGF0aW9uc3x8W10sZS5fYW5uSW5kaWNlc3x8W10pLGgoYy5zaGFwZXN8fFtdLGUuX3NoYXBlSW5kaWNlc3x8W10pLGUuX21hdGNoR3JvdXAmJiFyKWZvcih2YXIgbSBpbiBlLl9tYXRjaEdyb3VwKWlmKG0hPT1lLl9pZCl7dmFyIHY9bCh0LG0pLHk9cCh0LHYsITApLHg9ZS5fbGVuZ3RoL3YuX2xlbmd0aDtmb3IoaT0wO2k8eS5taW4ubGVuZ3RoO2krKylhPXkubWluW2ldLGQodSxhLnZhbCxhLnBhZCp4LHtleHRyYXBhZDphLmV4dHJhcGFkfSk7Zm9yKGk9MDtpPHkubWF4Lmxlbmd0aDtpKyspYT15Lm1heFtpXSxnKGYsYS52YWwsYS5wYWQqeCx7ZXh0cmFwYWQ6YS5leHRyYXBhZH0pfXJldHVybnttaW46dSxtYXg6Zn19ZnVuY3Rpb24gZCh0LGUscixuKXttKHQsZSxyLG4seSl9ZnVuY3Rpb24gZyh0LGUscixuKXttKHQsZSxyLG4seCl9ZnVuY3Rpb24gbSh0LGUscixuLGkpe2Zvcih2YXIgYT1uLnRvemVybyxvPW4uZXh0cmFwYWQscz0hMCxsPTA7bDx0Lmxlbmd0aCYmcztsKyspe3ZhciBjPXRbbF07aWYoaShjLnZhbCxlKSYmYy5wYWQ+PXImJihjLmV4dHJhcGFkfHwhbykpe3M9ITE7YnJlYWt9aShlLGMudmFsKSYmYy5wYWQ8PXImJihvfHwhYy5leHRyYXBhZCkmJih0LnNwbGljZShsLDEpLGwtLSl9aWYocyl7dmFyIHU9YSYmMD09PWU7dC5wdXNoKHt2YWw6ZSxwYWQ6dT8wOnIsZXh0cmFwYWQ6IXUmJm99KX19ZnVuY3Rpb24gdih0KXtyZXR1cm4gbih0KSYmTWF0aC5hYnModCk8YX1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIHQ8PWV9ZnVuY3Rpb24geCh0LGUpe3JldHVybiB0Pj1lfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuL2F4aXNfaWRzIjo4MzEsImZhc3QtaXNudW1lcmljIjoyNDF9XSw4Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9cy5zdHJUcmFuc2xhdGUsYz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxwPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxkPXQoIi4vY2xlYW5fdGlja3MiKSxnPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxtPWcuT05FTUFYWUVBUix2PWcuT05FQVZHWUVBUix5PWcuT05FTUlOWUVBUix4PWcuT05FTUFYUVVBUlRFUixiPWcuT05FQVZHUVVBUlRFUixfPWcuT05FTUlOUVVBUlRFUix3PWcuT05FTUFYTU9OVEgsVD1nLk9ORUFWR01PTlRILGs9Zy5PTkVNSU5NT05USCxNPWcuT05FV0VFSyxBPWcuT05FREFZLFM9QS8yLEU9Zy5PTkVIT1VSLEM9Zy5PTkVNSU4sTD1nLk9ORVNFQyxJPWcuTUlOVVNfU0lHTixQPWcuQkFETlVNLHo9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLE89ei5NSURfU0hJRlQsRD16LkNBUF9TSElGVCxSPXouTElORV9TUEFDSU5HLEY9ei5PUFBPU0lURV9TSURFLEI9ZS5leHBvcnRzPXt9O0Iuc2V0Q29udmVydD10KCIuL3NldF9jb252ZXJ0Iik7dmFyIE49dCgiLi9heGlzX2F1dG90eXBlIiksaj10KCIuL2F4aXNfaWRzIiksVT1qLmlkU29ydCxWPWouaXNMaW5rZWQ7Qi5pZDJuYW1lPWouaWQybmFtZSxCLm5hbWUyaWQ9ai5uYW1lMmlkLEIuY2xlYW5JZD1qLmNsZWFuSWQsQi5saXN0PWoubGlzdCxCLmxpc3RJZHM9ai5saXN0SWRzLEIuZ2V0RnJvbUlkPWouZ2V0RnJvbUlkLEIuZ2V0RnJvbVRyYWNlPWouZ2V0RnJvbVRyYWNlO3ZhciBxPXQoIi4vYXV0b3JhbmdlIik7Qi5nZXRBdXRvUmFuZ2U9cS5nZXRBdXRvUmFuZ2UsQi5maW5kRXh0cmVtZXM9cS5maW5kRXh0cmVtZXM7ZnVuY3Rpb24gSCh0KXt2YXIgZT0xZS00Kih0WzFdLXRbMF0pO3JldHVyblt0WzBdLWUsdFsxXStlXX1CLmNvZXJjZVJlZj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi5jaGFyQXQobi5sZW5ndGgtMSksbD1yLl9mdWxsTGF5b3V0Ll9zdWJwbG90c1tvKyJheGlzIl0sYz1uKyJyZWYiLHU9e307cmV0dXJuIGl8fChpPWxbMF18fCgic3RyaW5nIj09dHlwZW9mIGE/YTphWzBdKSksYXx8KGE9aSksbD1sLmNvbmNhdChsLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQrIiBkb21haW4ifSkpKSx1W2NdPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6bC5jb25jYXQoYT8ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmE6W10pLGRmbHQ6aX0scy5jb2VyY2UodCxlLHUsYyl9LEIuZ2V0UmVmVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90OiJwYXBlciI9PT10PyJwYXBlciI6InBpeGVsIj09PXQ/InBpeGVsIjovKCBkb21haW4pJC8udGVzdCh0KT8iZG9tYWluIjoicmFuZ2UifSxCLmNvZXJjZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxsO2lmKCJyYW5nZSIhPT1CLmdldFJlZlR5cGUobikpbz1zLmVuc3VyZU51bWJlcixsPXIoaSxhKTtlbHNle3ZhciBjPUIuZ2V0RnJvbUlkKGUsbik7bD1yKGksYT1jLmZyYWN0aW9uMnIoYSkpLG89Yy5jbGVhblBvc310W2ldPW8obCl9LEIuY2xlYW5Qb3NpdGlvbj1mdW5jdGlvbih0LGUscil7cmV0dXJuKCJwYXBlciI9PT1yfHwicGl4ZWwiPT09cj9zLmVuc3VyZU51bWJlcjpCLmdldEZyb21JZChlLHIpLmNsZWFuUG9zKSh0KX0sQi5yZWRyYXdDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxCLmxpc3RJZHModCk7dmFyIHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBuKG4saSxhLHMpe2Zvcih2YXIgbD1vLmdldENvbXBvbmVudE1ldGhvZChuLGkpLGM9e30sdT0wO3U8ZS5sZW5ndGg7dSsrKWZvcih2YXIgZj1yW0IuaWQybmFtZShlW3VdKV1bYV0saD0wO2g8Zi5sZW5ndGg7aCsrKXt2YXIgcD1mW2hdO2lmKCFjW3BdJiYobCh0LHApLGNbcF09MSxzKSlyZXR1cm59fW4oImFubm90YXRpb25zIiwiZHJhd09uZSIsIl9hbm5JbmRpY2VzIiksbigic2hhcGVzIiwiZHJhd09uZSIsIl9zaGFwZUluZGljZXMiKSxuKCJpbWFnZXMiLCJkcmF3IiwiX2ltZ0luZGljZXMiLCEwKX07dmFyIEc9Qi5nZXREYXRhQ29udmVyc2lvbnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT0ieCI9PT1yfHwieSI9PT1yfHwieiI9PT1yP3I6bjtpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPXt0eXBlOk4obix2b2lkIDAse2F1dG90eXBlbnVtYmVyczp0Ll9mdWxsTGF5b3V0LmF1dG90eXBlbnVtYmVyc30pLF9jYXRlZ29yaWVzOltdfSxCLnNldENvbnZlcnQoaSksImNhdGVnb3J5Ij09PWkudHlwZSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylpLmQyYyhuW29dKX1lbHNlIGk9Qi5nZXRGcm9tVHJhY2UodCxlLGEpO3JldHVybiBpP3tkMmM6aS5kMmMsYzJkOmkuYzJkfToiaWRzIj09PWE/e2QyYzpXLGMyZDpXfTp7ZDJjOlksYzJkOll9fTtmdW5jdGlvbiBZKHQpe3JldHVybit0fWZ1bmN0aW9uIFcodCl7cmV0dXJuIFN0cmluZyh0KX1mdW5jdGlvbiBYKHQpe3JldHVybit0LnN1YnN0cmluZygxKX1CLmdldERhdGFUb0Nvb3JkRnVuYz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gRyh0LGUscixuKS5kMmN9LEIuY291bnRlckxldHRlcj1mdW5jdGlvbih0KXt2YXIgZT10LmNoYXJBdCgwKTtyZXR1cm4ieCI9PT1lPyJ5IjoieSI9PT1lPyJ4Ijp2b2lkIDB9LEIubWluRHRpY2s9ZnVuY3Rpb24odCxlLHIsbil7LTE9PT1bImxvZyIsImNhdGVnb3J5IiwibXVsdGljYXRlZ29yeSJdLmluZGV4T2YodC50eXBlKSYmbj92b2lkIDA9PT10Ll9taW5EdGljaz8odC5fbWluRHRpY2s9ZSx0Ll9mb3JjZVRpY2swPXIpOnQuX21pbkR0aWNrJiYoKHQuX21pbkR0aWNrL2UrMWUtNiklMTwyZS02JiYoKHItdC5fZm9yY2VUaWNrMCkvZSUxKzEuMDAwMDAxKSUxPDJlLTY/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTooKGUvdC5fbWluRHRpY2srMWUtNiklMT4yZS02fHwoKHItdC5fZm9yY2VUaWNrMCkvdC5fbWluRHRpY2slMSsxLjAwMDAwMSklMT4yZS02KSYmKHQuX21pbkR0aWNrPTApKTp0Ll9taW5EdGljaz0wfSxCLnNhdmVSYW5nZUluaXRpYWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9Qi5saXN0KHQsIiIsITApLG49ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89dm9pZCAwPT09YS5fcmFuZ2VJbml0aWFsLHM9b3x8IShhLnJhbmdlWzBdPT09YS5fcmFuZ2VJbml0aWFsWzBdJiZhLnJhbmdlWzFdPT09YS5fcmFuZ2VJbml0aWFsWzFdKTsobyYmITE9PT1hLmF1dG9yYW5nZXx8ZSYmcykmJihhLl9yYW5nZUluaXRpYWw9YS5yYW5nZS5zbGljZSgpLG49ITApfXJldHVybiBufSxCLnNhdmVTaG93U3Bpa2VJbml0aWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPUIubGlzdCh0LCIiLCEwKSxuPSExLGk9Im9uIixhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz12b2lkIDA9PT1vLl9zaG93U3Bpa2VJbml0aWFsLGw9c3x8IShvLnNob3dzcGlrZXM9PT1vLl9zaG93c3Bpa2VzKTsoc3x8ZSYmbCkmJihvLl9zaG93U3Bpa2VJbml0aWFsPW8uc2hvd3NwaWtlcyxuPSEwKSwib24iIT09aXx8by5zaG93c3Bpa2VzfHwoaT0ib2ZmIil9cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9aSxufSxCLmF1dG9CaW49ZnVuY3Rpb24odCxlLHIsbixhLG8pe3ZhciBsLGM9cy5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCksdT1zLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KTtpZigiY2F0ZWdvcnkiPT09ZS50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpcmV0dXJue3N0YXJ0OmMtLjUsZW5kOnUrLjUsc2l6ZTpNYXRoLm1heCgxLE1hdGgucm91bmQobyl8fDEpLF9kYXRhU3Bhbjp1LWN9O2lmKGF8fChhPWUuY2FsZW5kYXIpLGw9ImxvZyI9PT1lLnR5cGU/e3R5cGU6ImxpbmVhciIscmFuZ2U6W2MsdV19Ont0eXBlOmUudHlwZSxyYW5nZTpzLnNpbXBsZU1hcChbYyx1XSxlLmMyciwwLGEpLGNhbGVuZGFyOmF9LEIuc2V0Q29udmVydChsKSxvPW8mJmQuZHRpY2sobyxsLnR5cGUpKWwuZHRpY2s9byxsLnRpY2swPWQudGljazAodm9pZCAwLGwudHlwZSxhKTtlbHNle3ZhciBmO2lmKHIpZj0odS1jKS9yO2Vsc2V7dmFyIGg9cy5kaXN0aW5jdFZhbHModCkscD1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGgubWluRGlmZikvTWF0aC5MTjEwKSksZz1wKnMucm91bmRVcChoLm1pbkRpZmYvcCxbLjksMS45LDQuOSw5LjldLCEwKTtmPU1hdGgubWF4KGcsMipzLnN0ZGV2KHQpL01hdGgucG93KHQubGVuZ3RoLG4/LjI1Oi40KSksaShmKXx8KGY9MSl9Qi5hdXRvVGlja3MobCxmKX12YXIgbSx2PWwuZHRpY2sseT1CLnRpY2tJbmNyZW1lbnQoQi50aWNrRmlyc3QobCksdiwicmV2ZXJzZSIsYSk7aWYoIm51bWJlciI9PXR5cGVvZiB2KW09KHk9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz0wLHM9MCxsPTAsYz0wO2Z1bmN0aW9uIHUoZSl7cmV0dXJuKDErMTAwKihlLXQpL3IuZHRpY2spJTEwMDwyfWZvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKWVbZl0lMT09MD9sKys6aShlW2ZdKXx8YysrLHUoZVtmXSkmJm8rKyx1KGVbZl0rci5kdGljay8yKSYmcysrO3ZhciBoPWUubGVuZ3RoLWM7aWYobD09PWgmJiJkYXRlIiE9PXIudHlwZSlyLmR0aWNrPDE/dD1uLS41KnIuZHRpY2s6KHQtPS41KStyLmR0aWNrPG4mJih0Kz1yLmR0aWNrKTtlbHNlIGlmKHM8LjEqaCYmKG8+LjMqaHx8dShuKXx8dShhKSkpe3ZhciBwPXIuZHRpY2svMjt0Kz10K3A8bj9wOi1wfXJldHVybiB0fSh5LHQsbCxjLHUpKSsoMStNYXRoLmZsb29yKCh1LXkpL3YpKSp2O2Vsc2UgZm9yKCJNIj09PWwuZHRpY2suY2hhckF0KDApJiYoeT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXMuZmluZEV4YWN0RGF0ZXMoZSxpKTtpZihhLmV4YWN0RGF5cz4uOCl7dmFyIG89TnVtYmVyKHIuc3Vic3RyKDEpKTthLmV4YWN0WWVhcnM+LjgmJm8lMTI9PTA/dD1CLnRpY2tJbmNyZW1lbnQodCwiTTYiLCJyZXZlcnNlIikrMS41KkE6YS5leGFjdE1vbnRocz4uOD90PUIudGlja0luY3JlbWVudCh0LCJNMSIsInJldmVyc2UiKSsxNS41KkE6dC09Uzt2YXIgbD1CLnRpY2tJbmNyZW1lbnQodCxyKTtpZihsPD1uKXJldHVybiBsfXJldHVybiB0fSh5LHQsdixjLGEpKSxtPXksMDttPD11OyltPUIudGlja0luY3JlbWVudChtLHYsITEsYSk7cmV0dXJue3N0YXJ0OmUuYzJyKHksMCxhKSxlbmQ6ZS5jMnIobSwwLGEpLHNpemU6dixfZGF0YVNwYW46dS1jfX0sQi5wcmVwVGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsLHZvaWQgMCx2b2lkIDAsZSk7aWYodC5fZHRpY2tJbml0PXQuZHRpY2ssdC5fdGljazBJbml0PXQudGljazAsImF1dG8iPT09dC50aWNrbW9kZXx8IXQuZHRpY2spe3ZhciBuLGE9dC5udGlja3M7YXx8KCJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT8obj10LnRpY2tmb250PzEuMioodC50aWNrZm9udC5zaXplfHwxMik6MTUsYT10Ll9sZW5ndGgvbik6KG49InkiPT09dC5faWQuY2hhckF0KDApPzQwOjgwLGE9cy5jb25zdHJhaW4odC5fbGVuZ3RoL24sNCw5KSsxKSwicmFkaWFsYXhpcyI9PT10Ll9uYW1lJiYoYSo9MikpLCJhcnJheSI9PT10LnRpY2ttb2RlJiYoYSo9MTAwKSx0Ll9yb3VnaERUaWNrPU1hdGguYWJzKHJbMV0tclswXSkvYSxCLmF1dG9UaWNrcyh0LHQuX3JvdWdoRFRpY2spLHQuX21pbkR0aWNrPjAmJnQuZHRpY2s8Mip0Ll9taW5EdGljayYmKHQuZHRpY2s9dC5fbWluRHRpY2ssdC50aWNrMD10Lmwycih0Ll9mb3JjZVRpY2swKSl9InBlcmlvZCI9PT10LnRpY2tsYWJlbG1vZGUmJmZ1bmN0aW9uKHQpe3ZhciBlO2Z1bmN0aW9uIHIoKXtyZXR1cm4hKGkodC5kdGljayl8fCJNIiE9PXQuZHRpY2suY2hhckF0KDApKX12YXIgbj1yKCksYT1CLmdldFRpY2tGb3JtYXQodCk7aWYoYSl7dmFyIG89dC5fZHRpY2tJbml0IT09dC5kdGljazsvJVtmTFFzU01YXS8udGVzdChhKXx8KC8lW0hJXS8udGVzdChhKT8oZT1FLG8mJiFuJiZ0LmR0aWNrPEUmJih0LmR0aWNrPUUpKTovJXAvLnRlc3QoYSk/KGU9UyxvJiYhbiYmdC5kdGljazxTJiYodC5kdGljaz1TKSk6LyVbQWFkZWp1d3hdLy50ZXN0KGEpPyhlPUEsbyYmIW4mJnQuZHRpY2s8QSYmKHQuZHRpY2s9QSkpOi8lW1VWV10vLnRlc3QoYSk/KGU9TSxvJiYhbiYmdC5kdGljazxNJiYodC5kdGljaz1NKSk6LyVbQmJtXS8udGVzdChhKT8oZT1ULG8mJihuP1godC5kdGljayk8MTp0LmR0aWNrPGspJiYodC5kdGljaz0iTTEiKSk6LyVbcV0vLnRlc3QoYSk/KGU9YixvJiYobj9YKHQuZHRpY2spPDM6dC5kdGljazxfKSYmKHQuZHRpY2s9Ik0zIikpOi8lW1l5XS8udGVzdChhKSYmKGU9dixvJiYobj9YKHQuZHRpY2spPDEyOnQuZHRpY2s8eSkmJih0LmR0aWNrPSJNMTIiKSkpfShuPXIoKSkmJnQudGljazA9PT10Ll9kb3dUaWNrMCYmKHQudGljazA9dC5fcmF3VGljazApO3QuX2RlZmluZWREZWx0YT1lfSh0KSx0LnRpY2swfHwodC50aWNrMD0iZGF0ZSI9PT10LnR5cGU/IjIwMDAtMDEtMDEiOjApLCJkYXRlIj09PXQudHlwZSYmdC5kdGljazwuMSYmKHQuZHRpY2s9LjEpLG50KHQpfSxCLmNhbGNUaWNrcz1mdW5jdGlvbih0LGUpe0IucHJlcFRpY2tzKHQsZSk7dmFyIHI9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCx2b2lkIDAsdm9pZCAwLGUpO2lmKCJhcnJheSI9PT10LnRpY2ttb2RlKXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRpY2t2YWxzLHI9dC50aWNrdGV4dCxuPW5ldyBBcnJheShlLmxlbmd0aCksaT1IKHMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpKSxhPU1hdGgubWluKGlbMF0saVsxXSksbz1NYXRoLm1heChpWzBdLGlbMV0pLGw9MDtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7dmFyIGM9ImNhdGVnb3J5Ij09PXQudHlwZT90LmQybF9ub2FkZDp0LmQybDsibG9nIj09PXQudHlwZSYmIkwiIT09U3RyaW5nKHQuZHRpY2spLmNoYXJBdCgwKSYmKHQuZHRpY2s9IkwiK01hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5taW4odC5yYW5nZVswXSx0LnJhbmdlWzFdKSktMSkpO2Zvcih2YXIgdT0wO3U8ZS5sZW5ndGg7dSsrKXt2YXIgZj1jKGVbdV0pO2Y+YSYmZjxvJiYodm9pZCAwPT09clt1XT9uW2xdPUIudGlja1RleHQodCxmKTpuW2xdPWl0KHQsZixTdHJpbmcoclt1XSkpLGwrKyl9bDxlLmxlbmd0aCYmbi5zcGxpY2UobCxlLmxlbmd0aC1sKTt0LnJhbmdlYnJlYWtzJiYobj1uLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHQubWFza0JyZWFrcyhlLngpIT09UH0pKSk7cmV0dXJuIG59KHQpO3ZhciBuPUgociksYT1uWzBdLG89blsxXSxsPXJbMV08clswXSxjPU1hdGgubWluKHJbMF0sclsxXSksdT1NYXRoLm1heChyWzBdLHJbMV0pLGY9ImxvZyI9PT10LnR5cGUmJiEoaSh0LmR0aWNrKXx8IkwiPT09dC5kdGljay5jaGFyQXQoMCkpLGg9InBlcmlvZCI9PT10LnRpY2tsYWJlbG1vZGU7aWYodC5fdG1pbj1CLnRpY2tGaXJzdCh0LGUpLHQuX3RtaW48YSE9PWwpcmV0dXJuW107ImNhdGVnb3J5IiE9PXQudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09dC50eXBlfHwobz1sP01hdGgubWF4KC0uNSxvKTpNYXRoLm1pbih0Ll9jYXRlZ29yaWVzLmxlbmd0aC0uNSxvKSk7dmFyIHA9dC5fdG1pbjt0LnJhbmdlYnJlYWtzJiZ0Ll90aWNrMEluaXQhPT10LnRpY2swJiYocD13dChwLHQpLGx8fChwPUIudGlja0luY3JlbWVudChwLHQuZHRpY2ssIWwsdC5jYWxlbmRhcikpKSxoJiYocD1CLnRpY2tJbmNyZW1lbnQocCx0LmR0aWNrLCFsLHQuY2FsZW5kYXIpKTtmb3IodmFyIGQsZz1NYXRoLm1heCgxZTMsdC5fbGVuZ3RofHwwKSxDPVtdLEw9bnVsbDtsP3A+PW86cDw9bztwPUIudGlja0luY3JlbWVudChwLHQuZHRpY2ssbCx0LmNhbGVuZGFyKSl7aWYodC5yYW5nZWJyZWFrcyYmIWwpe2lmKHA8YSljb250aW51ZTtpZih0Lm1hc2tCcmVha3MocCk9PT1QJiZ3dChwLHQpPj11KWJyZWFrfWlmKEMubGVuZ3RoPmd8fHA9PT1MKWJyZWFrO0w9cDt2YXIgST0hMTtmJiZwIT09KDB8cCkmJihJPSEwKSxDLnB1c2goe21pbm9yOkksdmFsdWU6cH0pfWlmKGgmJmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXS52YWx1ZSxhPW4sbz1uKzE7bjx0Lmxlbmd0aC0xPyhhPW4sbz1uKzEpOm4+MD8oYT1uLTEsbz1uKTooYT1uLG89bik7dmFyIHMsbD10W2FdLnZhbHVlLGM9dFtvXS52YWx1ZSx1PU1hdGguYWJzKGMtbCksZj1yfHx1LGg9MDtmPj15P2g9dT49eSYmdTw9bT91OnY6cj09PWImJmY+PV8/aD11Pj1fJiZ1PD14P3U6YjpmPj1rP2g9dT49ayYmdTw9dz91OlQ6cj09PU0mJmY+PU0/aD1NOmY+PUE/aD1BOnI9PT1TJiZmPj1TP2g9UzpyPT09RSYmZj49RSYmKGg9RSksaD49dSYmKGg9dSxzPSEwKTt2YXIgcD1pK2g7aWYoZS5yYW5nZWJyZWFrcyYmaD4wKXtmb3IodmFyIGQ9MCxnPTA7Zzw4NDtnKyspe3ZhciBDPShnKy41KS84NDtlLm1hc2tCcmVha3MoaSooMS1DKStDKnApIT09UCYmZCsrfShoKj1kLzg0KXx8KHRbbl0uZHJvcD0hMCkscyYmdT5NJiYoaD11KX0oaD4wfHwwPT09bikmJih0W25dLnBlcmlvZFg9aStoLzIpfX0oQyx0LHQuX2RlZmluZWREZWx0YSksdC5yYW5nZWJyZWFrcyl7dmFyIHo9InkiPT09dC5faWQuY2hhckF0KDApLE89MTsiYXV0byI9PT10LnRpY2ttb2RlJiYoTz10LnRpY2tmb250P3QudGlja2ZvbnQuc2l6ZToxMik7dmFyIEQ9TmFOO2ZvcihkPUMubGVuZ3RoLTE7ZD4tMTtkLS0paWYoQ1tkXS5kcm9wKUMuc3BsaWNlKGQsMSk7ZWxzZXtDW2RdLnZhbHVlPXd0KENbZF0udmFsdWUsdCk7dmFyIFI9dC5jMnAoQ1tkXS52YWx1ZSk7KHo/RD5SLU86RDxSK08pP0Muc3BsaWNlKGw/ZCsxOmQsMSk6RD1SfX1fdCh0KSYmMzYwPT09TWF0aC5hYnMoclsxXS1yWzBdKSYmQy5wb3AoKSx0Ll90bWF4PShDW0MubGVuZ3RoLTFdfHx7fSkudmFsdWUsdC5fcHJldkRhdGVIZWFkPSIiLHQuX2luQ2FsY1RpY2tzPSEwO3ZhciBGLE4saj1bXTtmb3IoZD0wO2Q8Qy5sZW5ndGg7ZCsrKXt2YXIgVT1DW2RdLm1pbm9yLFY9Q1tkXS52YWx1ZTtGPUIudGlja1RleHQodCxWLCExLFUpLHZvaWQgMCE9PShOPUNbZF0ucGVyaW9kWCkmJihGLnBlcmlvZFg9TiwoTj51fHxOPGMpJiYoTj51JiYoRi5wZXJpb2RYPXUpLE48YyYmKEYucGVyaW9kWD1jKSxGLnRleHQ9IiAiLHQuX3ByZXZEYXRlSGVhZD0iIikpLGoucHVzaChGKX1yZXR1cm4gdC5faW5DYWxjVGlja3M9ITEsan07dmFyIFo9WzIsNSwxMF0sSj1bMSwyLDMsNiwxMl0sSz1bMSwyLDUsMTAsMTUsMzBdLFE9WzEsMiwzLDcsMTRdLCQ9Wy0uMDQ2LDAsLjMwMSwuNDc3LC42MDIsLjY5OSwuNzc4LC44NDUsLjkwMywuOTU0LDFdLHR0PVstLjMwMSwwLC4zMDEsLjY5OSwxXSxldD1bMTUsMzAsNDUsOTAsMTgwXTtmdW5jdGlvbiBydCh0LGUscil7cmV0dXJuIGUqcy5yb3VuZFVwKHQvZSxyKX1mdW5jdGlvbiBudCh0KXt2YXIgZT10LmR0aWNrO2lmKHQuX3RpY2tleHBvbmVudD0wLGkoZSl8fCJzdHJpbmciPT10eXBlb2YgZXx8KGU9MSksImNhdGVnb3J5IiE9PXQudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09dC50eXBlfHwodC5fdGlja3JvdW5kPW51bGwpLCJkYXRlIj09PXQudHlwZSl7dmFyIHI9dC5yMmwodC50aWNrMCksbj10LmwycihyKS5yZXBsYWNlKC8oXi18aSkvZywiIiksYT1uLmxlbmd0aDtpZigiTSI9PT1TdHJpbmcoZSkuY2hhckF0KDApKWE+MTB8fCIwMS0wMSIhPT1uLnN1YnN0cig1KT90Ll90aWNrcm91bmQ9ImQiOnQuX3RpY2tyb3VuZD0rZS5zdWJzdHIoMSklMTI9PTA/InkiOiJtIjtlbHNlIGlmKGU+PUEmJmE8PTEwfHxlPj0xNSpBKXQuX3RpY2tyb3VuZD0iZCI7ZWxzZSBpZihlPj1DJiZhPD0xNnx8ZT49RSl0Ll90aWNrcm91bmQ9Ik0iO2Vsc2UgaWYoZT49TCYmYTw9MTl8fGU+PUMpdC5fdGlja3JvdW5kPSJTIjtlbHNle3ZhciBvPXQubDJyKHIrZSkucmVwbGFjZSgvXi0vLCIiKS5sZW5ndGg7dC5fdGlja3JvdW5kPU1hdGgubWF4KGEsbyktMjAsdC5fdGlja3JvdW5kPDAmJih0Ll90aWNrcm91bmQ9NCl9fWVsc2UgaWYoaShlKXx8IkwiPT09ZS5jaGFyQXQoMCkpe3ZhciBzPXQucmFuZ2UubWFwKHQucjJkfHxOdW1iZXIpO2koZSl8fChlPU51bWJlcihlLnN1YnN0cigxKSkpLHQuX3RpY2tyb3VuZD0yLU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKy4wMSk7dmFyIGw9TWF0aC5tYXgoTWF0aC5hYnMoc1swXSksTWF0aC5hYnMoc1sxXSkpLGM9TWF0aC5mbG9vcihNYXRoLmxvZyhsKS9NYXRoLkxOMTArLjAxKSx1PXZvaWQgMD09PXQubWluZXhwb25lbnQ/Mzp0Lm1pbmV4cG9uZW50O01hdGguYWJzKGMpPnUmJihvdCh0LmV4cG9uZW50Zm9ybWF0KSYmIXN0KGMpP3QuX3RpY2tleHBvbmVudD0zKk1hdGgucm91bmQoKGMtMSkvMyk6dC5fdGlja2V4cG9uZW50PWMpfWVsc2UgdC5fdGlja3JvdW5kPW51bGx9ZnVuY3Rpb24gaXQodCxlLHIpe3ZhciBuPXQudGlja2ZvbnR8fHt9O3JldHVybnt4OmUsZHg6MCxkeTowLHRleHQ6cnx8IiIsZm9udFNpemU6bi5zaXplLGZvbnQ6bi5mYW1pbHksZm9udENvbG9yOm4uY29sb3J9fUIuYXV0b1RpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4xMCkpfWlmKCJkYXRlIj09PXQudHlwZSl7dC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyLDApO3ZhciBhPTIqZTtpZihhPnYpZS89dixyPW4oMTApLHQuZHRpY2s9Ik0iKzEyKnJ0KGUscixaKTtlbHNlIGlmKGE+VCllLz1ULHQuZHRpY2s9Ik0iK3J0KGUsMSxKKTtlbHNlIGlmKGE+QSl7dC5kdGljaz1ydChlLEEsdC5faGFzRGF5T2ZXZWVrQnJlYWtzP1sxLDIsNywxNF06USk7dmFyIG89Qi5nZXRUaWNrRm9ybWF0KHQpLGw9InBlcmlvZCI9PT10LnRpY2tsYWJlbG1vZGU7bCYmKHQuX3Jhd1RpY2swPXQudGljazApLC8lW3VWV10vLnRlc3Qobyk/dC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyLDIpOnQudGljazA9cy5kYXRlVGljazAodC5jYWxlbmRhciwxKSxsJiYodC5fZG93VGljazA9dC50aWNrMCl9ZWxzZSBhPkU/dC5kdGljaz1ydChlLEUsSik6YT5DP3QuZHRpY2s9cnQoZSxDLEspOmE+TD90LmR0aWNrPXJ0KGUsTCxLKToocj1uKDEwKSx0LmR0aWNrPXJ0KGUscixaKSl9ZWxzZSBpZigibG9nIj09PXQudHlwZSl7dC50aWNrMD0wO3ZhciBjPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKGU+LjcpdC5kdGljaz1NYXRoLmNlaWwoZSk7ZWxzZSBpZihNYXRoLmFicyhjWzFdLWNbMF0pPDEpe3ZhciB1PTEuNSpNYXRoLmFicygoY1sxXS1jWzBdKS9lKTtlPU1hdGguYWJzKE1hdGgucG93KDEwLGNbMV0pLU1hdGgucG93KDEwLGNbMF0pKS91LHI9bigxMCksdC5kdGljaz0iTCIrcnQoZSxyLFopfWVsc2UgdC5kdGljaz1lPi4zPyJEMiI6IkQxIn1lbHNlImNhdGVnb3J5Ij09PXQudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlPyh0LnRpY2swPTAsdC5kdGljaz1NYXRoLmNlaWwoTWF0aC5tYXgoZSwxKSkpOl90KHQpPyh0LnRpY2swPTAscj0xLHQuZHRpY2s9cnQoZSxyLGV0KSk6KHQudGljazA9MCxyPW4oMTApLHQuZHRpY2s9cnQoZSxyLFopKTtpZigwPT09dC5kdGljayYmKHQuZHRpY2s9MSksIWkodC5kdGljaykmJiJzdHJpbmciIT10eXBlb2YgdC5kdGljayl7dmFyIGY9dC5kdGljazt0aHJvdyB0LmR0aWNrPTEsImF4LmR0aWNrIGVycm9yOiAiK1N0cmluZyhmKX19LEIudGlja0luY3JlbWVudD1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yPy0xOjE7aWYoaShlKSlyZXR1cm4gcy5pbmNyZW1lbnQodCxvKmUpO3ZhciBsPWUuY2hhckF0KDApLGM9bypOdW1iZXIoZS5zdWJzdHIoMSkpO2lmKCJNIj09PWwpcmV0dXJuIHMuaW5jcmVtZW50TW9udGgodCxjLGEpO2lmKCJMIj09PWwpcmV0dXJuIE1hdGgubG9nKE1hdGgucG93KDEwLHQpK2MpL01hdGguTE4xMDtpZigiRCI9PT1sKXt2YXIgdT0iRDIiPT09ZT90dDokLGY9dCsuMDEqbyxoPXMucm91bmRVcChzLm1vZChmLDEpLHUscik7cmV0dXJuIE1hdGguZmxvb3IoZikrTWF0aC5sb2cobi5yb3VuZChNYXRoLnBvdygxMCxoKSwxKSkvTWF0aC5MTjEwfXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhlKX0sQi50aWNrRmlyc3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnIybHx8TnVtYmVyLGE9cy5zaW1wbGVNYXAodC5yYW5nZSxyLHZvaWQgMCx2b2lkIDAsZSksbz1hWzFdPGFbMF0sbD1vP01hdGguZmxvb3I6TWF0aC5jZWlsLGM9SChhKVswXSx1PXQuZHRpY2ssZj1yKHQudGljazApO2lmKGkodSkpe3ZhciBoPWwoKGMtZikvdSkqdStmO3JldHVybiJjYXRlZ29yeSIhPT10LnR5cGUmJiJtdWx0aWNhdGVnb3J5IiE9PXQudHlwZXx8KGg9cy5jb25zdHJhaW4oaCwwLHQuX2NhdGVnb3JpZXMubGVuZ3RoLTEpKSxofXZhciBwPXUuY2hhckF0KDApLGQ9TnVtYmVyKHUuc3Vic3RyKDEpKTtpZigiTSI9PT1wKXtmb3IodmFyIGcsbSx2LHk9MCx4PWY7eTwxMDspe2lmKCgoZz1CLnRpY2tJbmNyZW1lbnQoeCx1LG8sdC5jYWxlbmRhcikpLWMpKih4LWMpPD0wKXJldHVybiBvP01hdGgubWluKHgsZyk6TWF0aC5tYXgoeCxnKTttPShjLSh4K2cpLzIpLyhnLXgpLHY9cCsoTWF0aC5hYnMoTWF0aC5yb3VuZChtKSl8fDEpKmQseD1CLnRpY2tJbmNyZW1lbnQoeCx2LG08MD8hbzpvLHQuY2FsZW5kYXIpLHkrK31yZXR1cm4gcy5lcnJvcigidGlja0ZpcnN0IGRpZCBub3QgY29udmVyZ2UiLHQpLHh9aWYoIkwiPT09cClyZXR1cm4gTWF0aC5sb2cobCgoTWF0aC5wb3coMTAsYyktZikvZCkqZCtmKS9NYXRoLkxOMTA7aWYoIkQiPT09cCl7dmFyIGI9IkQyIj09PXU/dHQ6JCxfPXMucm91bmRVcChzLm1vZChjLDEpLGIsbyk7cmV0dXJuIE1hdGguZmxvb3IoYykrTWF0aC5sb2cobi5yb3VuZChNYXRoLnBvdygxMCxfKSwxKSkvTWF0aC5MTjEwfXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyh1KX0sQi50aWNrVGV4dD1mdW5jdGlvbih0LGUscixuKXt2YXIgYSxvPWl0KHQsZSksbD0iYXJyYXkiPT09dC50aWNrbW9kZSxjPXJ8fGwsdT10LnR5cGUsZj0iY2F0ZWdvcnkiPT09dT90LmQybF9ub2FkZDp0LmQybDtpZihsJiZBcnJheS5pc0FycmF5KHQudGlja3RleHQpKXt2YXIgaD1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxwPShNYXRoLmFicyhoWzFdLWhbMF0pLSh0Ll9sQnJlYWtzfHwwKSkvMWU0O2ZvcihhPTA7YTx0LnRpY2t0ZXh0Lmxlbmd0aCYmIShNYXRoLmFicyhlLWYodC50aWNrdmFsc1thXSkpPHApO2ErKyk7aWYoYTx0LnRpY2t0ZXh0Lmxlbmd0aClyZXR1cm4gby50ZXh0PVN0cmluZyh0LnRpY2t0ZXh0W2FdKSxvfWZ1bmN0aW9uIGQobil7aWYodm9pZCAwPT09bilyZXR1cm4hMDtpZihyKXJldHVybiJub25lIj09PW47dmFyIGk9e2ZpcnN0OnQuX3RtaW4sbGFzdDp0Ll90bWF4fVtuXTtyZXR1cm4iYWxsIiE9PW4mJmUhPT1pfXZhciBnPXI/Im5ldmVyIjoibm9uZSIhPT10LmV4cG9uZW50Zm9ybWF0JiZkKHQuc2hvd2V4cG9uZW50KT8iaGlkZSI6IiI7aWYoImRhdGUiPT09dT9mdW5jdGlvbih0LGUscixuKXt2YXIgYT10Ll90aWNrcm91bmQsbz1yJiZ0LmhvdmVyZm9ybWF0fHxCLmdldFRpY2tGb3JtYXQodCk7biYmKGE9aShhKT80Ont5OiJtIixtOiJkIixkOiJNIixNOiJTIixTOjR9W2FdKTt2YXIgbCxjPXMuZm9ybWF0RGF0ZShlLngsbyxhLHQuX2RhdGVGb3JtYXQsdC5jYWxlbmRhcix0Ll9leHRyYUZvcm1hdCksdT1jLmluZGV4T2YoIlxuIik7LTEhPT11JiYobD1jLnN1YnN0cih1KzEpLGM9Yy5zdWJzdHIoMCx1KSk7biYmKCIwMDowMDowMCI9PT1jfHwiMDA6MDAiPT09Yz8oYz1sLGw9IiIpOjg9PT1jLmxlbmd0aCYmKGM9Yy5yZXBsYWNlKC86MDAkLywiIikpKTtpZihsKWlmKHIpImQiPT09YT9jKz0iLCAiK2w6Yz1sKyhjPyIsICIrYzoiIik7ZWxzZSBpZih0Ll9pbkNhbGNUaWNrcyYmdC5fcHJldkRhdGVIZWFkPT09bCl7dmFyIGY9LTEhPT0odC50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpLGg9dC5fcmVhbFNpZGV8fHQuc2lkZTsoIWYmJiJ0b3AiPT09aHx8ZiYmImJvdHRvbSI9PT1oKSYmKGMrPSI8YnI+ICIpfWVsc2UgdC5fcHJldkRhdGVIZWFkPWwsYys9Ijxicj4iK2w7ZS50ZXh0PWN9KHQsbyxyLGMpOiJsb2ciPT09dT9mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPXQuZHRpY2ssbD1lLngsYz10LnRpY2tmb3JtYXQsdT0ic3RyaW5nIj09dHlwZW9mIG8mJm8uY2hhckF0KDApOyJuZXZlciI9PT1hJiYoYT0iIik7biYmIkwiIT09dSYmKG89IkwzIix1PSJMIik7aWYoY3x8IkwiPT09dSllLnRleHQ9bHQoTWF0aC5wb3coMTAsbCksdCxhLG4pO2Vsc2UgaWYoaShvKXx8IkQiPT09dSYmcy5tb2QobCsuMDEsMSk8LjEpe3ZhciBmPU1hdGgucm91bmQobCksaD1NYXRoLmFicyhmKSxwPXQuZXhwb25lbnRmb3JtYXQ7InBvd2VyIj09PXB8fG90KHApJiZzdChmKT8oZS50ZXh0PTA9PT1mPzE6MT09PWY/IjEwIjoiMTA8c3VwPiIrKGY+MT8iIjpJKStoKyI8L3N1cD4iLGUuZm9udFNpemUqPTEuMjUpOigiZSI9PT1wfHwiRSI9PT1wKSYmaD4yP2UudGV4dD0iMSIrcCsoZj4wPyIrIjpJKStoOihlLnRleHQ9bHQoTWF0aC5wb3coMTAsbCksdCwiIiwiZmFrZWhvdmVyIiksIkQxIj09PW8mJiJ5Ij09PXQuX2lkLmNoYXJBdCgwKSYmKGUuZHktPWUuZm9udFNpemUvNikpfWVsc2V7aWYoIkQiIT09dSl0aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcobyk7ZS50ZXh0PVN0cmluZyhNYXRoLnJvdW5kKE1hdGgucG93KDEwLHMubW9kKGwsMSkpKSksZS5mb250U2l6ZSo9Ljc1fWlmKCJEMSI9PT10LmR0aWNrKXt2YXIgZD1TdHJpbmcoZS50ZXh0KS5jaGFyQXQoMCk7IjAiIT09ZCYmIjEiIT09ZHx8KCJ5Ij09PXQuX2lkLmNoYXJBdCgwKT9lLmR4LT1lLmZvbnRTaXplLzQ6KGUuZHkrPWUuZm9udFNpemUvMixlLmR4Kz0odC5yYW5nZVsxXT50LnJhbmdlWzBdPzE6LTEpKmUuZm9udFNpemUqKGw8MD8uNTouMjUpKSl9fSh0LG8sMCxjLGcpOiJjYXRlZ29yeSI9PT11P2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUueCldO3ZvaWQgMD09PXImJihyPSIiKTtlLnRleHQ9U3RyaW5nKHIpfSh0LG8pOiJtdWx0aWNhdGVnb3J5Ij09PXU/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGgucm91bmQoZS54KSxpPXQuX2NhdGVnb3JpZXNbbl18fFtdLGE9dm9pZCAwPT09aVsxXT8iIjpTdHJpbmcoaVsxXSksbz12b2lkIDA9PT1pWzBdPyIiOlN0cmluZyhpWzBdKTtyP2UudGV4dD1vKyIgLSAiK2E6KGUudGV4dD1hLGUudGV4dDI9byl9KHQsbyxyKTpfdCh0KT9mdW5jdGlvbih0LGUscixuLGkpe2lmKCJyYWRpYW5zIiE9PXQudGhldGF1bml0fHxyKWUudGV4dD1sdChlLngsdCxpLG4pO2Vsc2V7dmFyIGE9ZS54LzE4MDtpZigwPT09YSllLnRleHQ9IjAiO2Vsc2V7dmFyIG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiBNYXRoLmFicyh0LWUpPD0xZS02fXZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0xOyFlKE1hdGgucm91bmQodCpyKS9yLHQpOylyKj0xMDtyZXR1cm4gcn0odCksbj10KnIsaT1NYXRoLmFicyhmdW5jdGlvbiB0KHIsbil7cmV0dXJuIGUobiwwKT9yOnQobixyJW4pfShuLHIpKTtyZXR1cm5bTWF0aC5yb3VuZChuL2kpLE1hdGgucm91bmQoci9pKV19KGEpO2lmKG9bMV0+PTEwMCllLnRleHQ9bHQocy5kZWcycmFkKGUueCksdCxpLG4pO2Vsc2V7dmFyIGw9ZS54PDA7MT09PW9bMV0/MT09PW9bMF0/ZS50ZXh0PSJcdTAzYzAiOmUudGV4dD1vWzBdKyJcdTAzYzAiOmUudGV4dD1bIjxzdXA+IixvWzBdLCI8L3N1cD4iLCJcdTIwNDQiLCI8c3ViPiIsb1sxXSwiPC9zdWI+IiwiXHUwM2MwIl0uam9pbigiIiksbCYmKGUudGV4dD1JK2UudGV4dCl9fX19KHQsbyxyLGMsZyk6ZnVuY3Rpb24odCxlLHIsbixpKXsibmV2ZXIiPT09aT9pPSIiOiJhbGwiPT09dC5zaG93ZXhwb25lbnQmJk1hdGguYWJzKGUueC90LmR0aWNrKTwxZS02JiYoaT0iaGlkZSIpO2UudGV4dD1sdChlLngsdCxpLG4pfSh0LG8sMCxjLGcpLG58fCh0LnRpY2twcmVmaXgmJiFkKHQuc2hvd3RpY2twcmVmaXgpJiYoby50ZXh0PXQudGlja3ByZWZpeCtvLnRleHQpLHQudGlja3N1ZmZpeCYmIWQodC5zaG93dGlja3N1ZmZpeCkmJihvLnRleHQrPXQudGlja3N1ZmZpeCkpLCJib3VuZGFyaWVzIj09PXQudGlja3Nvbnx8dC5zaG93ZGl2aWRlcnMpe3ZhciBtPWZ1bmN0aW9uKGUpe3ZhciByPXQubDJwKGUpO3JldHVybiByPj0wJiZyPD10Ll9sZW5ndGg/ZTpudWxsfTtvLnhibmQ9W20oby54LS41KSxtKG8ueCt0LmR0aWNrLS41KV19cmV0dXJuIG99LEIuaG92ZXJMYWJlbFRleHQ9ZnVuY3Rpb24odCxlLHIpe2lmKHIhPT1QJiZyIT09ZSlyZXR1cm4gQi5ob3ZlckxhYmVsVGV4dCh0LGUpKyIgLSAiK0IuaG92ZXJMYWJlbFRleHQodCxyKTt2YXIgbj0ibG9nIj09PXQudHlwZSYmZTw9MCxpPUIudGlja1RleHQodCx0LmMybChuPy1lOmUpLCJob3ZlciIpLnRleHQ7cmV0dXJuIG4/MD09PWU/IjAiOkkraTppfTt2YXIgYXQ9WyJmIiwicCIsIm4iLCJcdTAzYmMiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCJdO2Z1bmN0aW9uIG90KHQpe3JldHVybiJTSSI9PT10fHwiQiI9PT10fWZ1bmN0aW9uIHN0KHQpe3JldHVybiB0PjE0fHx0PC0xNX1mdW5jdGlvbiBsdCh0LGUscixuKXt2YXIgYT10PDAsbz1lLl90aWNrcm91bmQsbD1yfHxlLmV4cG9uZW50Zm9ybWF0fHwiQiIsYz1lLl90aWNrZXhwb25lbnQsdT1CLmdldFRpY2tGb3JtYXQoZSksZj1lLnNlcGFyYXRldGhvdXNhbmRzO2lmKG4pe3ZhciBoPXtleHBvbmVudGZvcm1hdDpsLG1pbmV4cG9uZW50OmUubWluZXhwb25lbnQsZHRpY2s6Im5vbmUiPT09ZS5zaG93ZXhwb25lbnQ/ZS5kdGljazppKHQpJiZNYXRoLmFicyh0KXx8MSxyYW5nZToibm9uZSI9PT1lLnNob3dleHBvbmVudD9lLnJhbmdlLm1hcChlLnIyZCk6WzAsdHx8MV19O250KGgpLG89KE51bWJlcihoLl90aWNrcm91bmQpfHwwKSs0LGM9aC5fdGlja2V4cG9uZW50LGUuaG92ZXJmb3JtYXQmJih1PWUuaG92ZXJmb3JtYXQpfWlmKHUpcmV0dXJuIGUuX251bUZvcm1hdCh1KSh0KS5yZXBsYWNlKC8tL2csSSk7dmFyIHAsZD1NYXRoLnBvdygxMCwtbykvMjtpZigibm9uZSI9PT1sJiYoYz0wKSwodD1NYXRoLmFicyh0KSk8ZCl0PSIwIixhPSExO2Vsc2V7aWYodCs9ZCxjJiYodCo9TWF0aC5wb3coMTAsLWMpLG8rPWMpLDA9PT1vKXQ9U3RyaW5nKE1hdGguZmxvb3IodCkpO2Vsc2UgaWYobzwwKXt0PSh0PVN0cmluZyhNYXRoLnJvdW5kKHQpKSkuc3Vic3RyKDAsdC5sZW5ndGgrbyk7Zm9yKHZhciBnPW87ZzwwO2crKyl0Kz0iMCJ9ZWxzZXt2YXIgbT0odD1TdHJpbmcodCkpLmluZGV4T2YoIi4iKSsxO20mJih0PXQuc3Vic3RyKDAsbStvKS5yZXBsYWNlKC9cLj8wKyQvLCIiKSl9dD1zLm51bVNlcGFyYXRlKHQsZS5fc2VwYXJhdG9ycyxmKX1jJiYiaGlkZSIhPT1sJiYob3QobCkmJnN0KGMpJiYobD0icG93ZXIiKSxwPWM8MD9JKy1jOiJwb3dlciIhPT1sPyIrIitjOlN0cmluZyhjKSwiZSI9PT1sfHwiRSI9PT1sP3QrPWwrcDoicG93ZXIiPT09bD90Kz0iXHhkNzEwPHN1cD4iK3ArIjwvc3VwPiI6IkIiPT09bCYmOT09PWM/dCs9IkIiOm90KGwpJiYodCs9YXRbYy8zKzVdKSk7cmV0dXJuIGE/SSt0OnR9ZnVuY3Rpb24gY3QodCxlKXtmb3IodmFyIHI9W10sbj17fSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07blthLnRleHQyXT9uW2EudGV4dDJdLnB1c2goYS54KTpuW2EudGV4dDJdPVthLnhdfWZvcih2YXIgbyBpbiBuKXIucHVzaChpdCh0LHMuaW50ZXJwKG5bb10sLjUpLG8pKTtyZXR1cm4gcn1mdW5jdGlvbiB1dCh0KXtyZXR1cm4gdm9pZCAwIT09dC5wZXJpb2RYP3QucGVyaW9kWDp0Lnh9ZnVuY3Rpb24gZnQodCl7cmV0dXJuW3QudGV4dCx0LngsdC5heEluZm8sdC5mb250LHQuZm9udFNpemUsdC5mb250Q29sb3JdLmpvaW4oIl8iKX1mdW5jdGlvbiBodCh0KXt2YXIgZT10LnRpdGxlLmZvbnQuc2l6ZSxyPSh0LnRpdGxlLnRleHQubWF0Y2goYy5CUl9UQUdfQUxMKXx8W10pLmxlbmd0aDtyZXR1cm4gdC50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKT9yP2UqKEQrcipSKTplKkQ6cj9lKihyKzEpKlI6ZX1mdW5jdGlvbiBwdCh0LGUpe3ZhciByPXQubDJwKGUpO3JldHVybiByPjEmJnI8dC5fbGVuZ3RoLTF9ZnVuY3Rpb24gZHQodCl7dmFyIGU9bi5zZWxlY3QodCkscj1lLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpO3JldHVybiByLmVtcHR5KCk/ZS5zZWxlY3QoInRleHQiKTpyfWZ1bmN0aW9uIGd0KHQpe3JldHVybiB0Ll9pZCsiLmF1dG9tYXJnaW4ifWZ1bmN0aW9uIG10KHQpe3JldHVybiBndCh0KSsiLm1pcnJvciJ9ZnVuY3Rpb24gdnQodCl7cmV0dXJuIHQuX2lkKyIucmFuZ2VzbGlkZXIifWZ1bmN0aW9uIHl0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspLTE9PT10LmluZGV4T2YoZVtyXSkmJnQucHVzaChlW3JdKX1mdW5jdGlvbiB4dCh0LGUscil7dmFyIG4saSxhPVtdLG89W10sbD10LmxheW91dDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWEucHVzaChCLmdldEZyb21JZCh0LGVbbl0pKTtmb3Iobj0wO248ci5sZW5ndGg7bisrKW8ucHVzaChCLmdldEZyb21JZCh0LHJbbl0pKTt2YXIgYz1PYmplY3Qua2V5cyhwKSx1PVsiYW5jaG9yIiwiZG9tYWluIiwib3ZlcmxheWluZyIsInBvc2l0aW9uIiwic2lkZSIsInRpY2thbmdsZSIsImVkaXRUeXBlIl0sZj1bImxpbmVhciIsImxvZyJdO2ZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBoPWNbbl0sZD1hWzBdW2hdLGc9b1swXVtoXSxtPSEwLHY9ITEseT0hMTtpZigiXyIhPT1oLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGQmJi0xPT09dS5pbmRleE9mKGgpKXtmb3IoaT0xO2k8YS5sZW5ndGgmJm07aSsrKXt2YXIgeD1hW2ldW2hdOyJ0eXBlIj09PWgmJi0xIT09Zi5pbmRleE9mKGQpJiYtMSE9PWYuaW5kZXhPZih4KSYmZCE9PXg/dj0hMDp4IT09ZCYmKG09ITEpfWZvcihpPTE7aTxvLmxlbmd0aCYmbTtpKyspe3ZhciBiPW9baV1baF07InR5cGUiPT09aCYmLTEhPT1mLmluZGV4T2YoZykmJi0xIT09Zi5pbmRleE9mKGIpJiZnIT09Yj95PSEwOm9baV1baF0hPT1nJiYobT0hMSl9bSYmKHYmJihsW2FbMF0uX25hbWVdLnR5cGU9ImxpbmVhciIpLHkmJihsW29bMF0uX25hbWVdLnR5cGU9ImxpbmVhciIpLGJ0KGwsaCxhLG8sdC5fZnVsbExheW91dC5fZGZsdFRpdGxlKSl9fWZvcihuPTA7bjx0Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLmxlbmd0aDtuKyspe3ZhciBfPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbbl07LTEhPT1lLmluZGV4T2YoXy54cmVmKSYmLTEhPT1yLmluZGV4T2YoXy55cmVmKSYmcy5zd2FwQXR0cnMobC5hbm5vdGF0aW9uc1tuXSxbIj8iXSl9fWZ1bmN0aW9uIGJ0KHQsZSxyLG4saSl7dmFyIGEsbz1zLm5lc3RlZFByb3BlcnR5LGw9byh0W3JbMF0uX25hbWVdLGUpLmdldCgpLGM9byh0W25bMF0uX25hbWVdLGUpLmdldCgpO2ZvcigidGl0bGUiPT09ZSYmKGwmJmwudGV4dD09PWkueCYmKGwudGV4dD1pLnkpLGMmJmMudGV4dD09PWkueSYmKGMudGV4dD1pLngpKSxhPTA7YTxyLmxlbmd0aDthKyspbyh0LHJbYV0uX25hbWUrIi4iK2UpLnNldChjKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKW8odCxuW2FdLl9uYW1lKyIuIitlKS5zZXQobCl9ZnVuY3Rpb24gX3QodCl7cmV0dXJuImFuZ3VsYXJheGlzIj09PXQuX2lkfWZ1bmN0aW9uIHd0KHQsZSl7Zm9yKHZhciByPWUuX3JhbmdlYnJlYWtzLmxlbmd0aCxuPTA7bjxyO24rKyl7dmFyIGk9ZS5fcmFuZ2VicmVha3Nbbl07aWYodD49aS5taW4mJnQ8aS5tYXgpcmV0dXJuIGkubWF4fXJldHVybiB0fUIuZ2V0VGlja0Zvcm1hdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsO2Z1bmN0aW9uIGModCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0P3Q6TnVtYmVyKHQucmVwbGFjZSgiTSIsIiIpKSpUfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1bIkwiLCJEIl07aWYodHlwZW9mIHQ9PXR5cGVvZiBlKXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQtZTt2YXIgbj1yLmluZGV4T2YodC5jaGFyQXQoMCkpLGk9ci5pbmRleE9mKGUuY2hhckF0KDApKTtyZXR1cm4gbj09PWk/TnVtYmVyKHQucmVwbGFjZSgvKEx8RCkvZywiIikpLU51bWJlcihlLnJlcGxhY2UoLyhMfEQpL2csIiIpKTpuLWl9cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0PzE6LTF9ZnVuY3Rpb24gZih0LGUpe3ZhciByPW51bGw9PT1lWzBdLG49bnVsbD09PWVbMV0saT11KHQsZVswXSk+PTAsYT11KHQsZVsxXSk8PTA7cmV0dXJuKHJ8fGkpJiYobnx8YSl9aWYodC50aWNrZm9ybWF0c3RvcHMmJnQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aD4wKXN3aXRjaCh0LnR5cGUpe2Nhc2UiZGF0ZSI6Y2FzZSJsaW5lYXIiOmZvcihlPTA7ZTx0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg7ZSsrKWlmKChuPXQudGlja2Zvcm1hdHN0b3BzW2VdKS5lbmFibGVkJiYoaT10LmR0aWNrLGE9bi5kdGlja3JhbmdlLG89dm9pZCAwLHM9dm9pZCAwLGw9dm9pZCAwLG89Y3x8ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHM9YVswXSxsPWFbMV0sKCFzJiYibnVtYmVyIiE9dHlwZW9mIHN8fG8ocyk8PW8oaSkpJiYoIWwmJiJudW1iZXIiIT10eXBlb2YgbHx8byhsKT49byhpKSkpKXtyPW47YnJlYWt9YnJlYWs7Y2FzZSJsb2ciOmZvcihlPTA7ZTx0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg7ZSsrKWlmKChuPXQudGlja2Zvcm1hdHN0b3BzW2VdKS5lbmFibGVkJiZmKHQuZHRpY2ssbi5kdGlja3JhbmdlKSl7cj1uO2JyZWFrfX1yZXR1cm4gcj9yLnZhbHVlOnQudGlja2Zvcm1hdH0sQi5nZXRTdWJwbG90cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLG49ci5jYXJ0ZXNpYW4uY29uY2F0KHIuZ2wyZHx8W10pLGk9ZT9CLmZpbmRTdWJwbG90c1dpdGhBeGlzKG4sZSk6bjtyZXR1cm4gaS5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQuc3Vic3RyKDEpLnNwbGl0KCJ5Iiksbj1lLnN1YnN0cigxKS5zcGxpdCgieSIpO3JldHVybiByWzBdPT09blswXT8rclsxXS0rblsxXTorclswXS0rblswXX0pKSxpfSxCLmZpbmRTdWJwbG90c1dpdGhBeGlzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBSZWdFeHAoIngiPT09ZS5faWQuY2hhckF0KDApPyJeIitlLl9pZCsieSI6ZS5faWQrIiQiKSxuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTtyLnRlc3QoYSkmJm4ucHVzaChhKX1yZXR1cm4gbn0sQi5tYWtlQ2xpcFBhdGhzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYoIWUuX2hhc09ubHlMYXJnZVNwbG9tcyl7dmFyIHIsaSxhPXtfb2Zmc2V0OjAsX2xlbmd0aDplLndpZHRoLF9pZDoiIn0sbz17X29mZnNldDowLF9sZW5ndGg6ZS5oZWlnaHQsX2lkOiIifSxzPUIubGlzdCh0LCJ4IiwhMCksbD1CLmxpc3QodCwieSIsITApLGM9W107Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKylmb3IoYy5wdXNoKHt4OnNbcl0seTpvfSksaT0wO2k8bC5sZW5ndGg7aSsrKTA9PT1yJiZjLnB1c2goe3g6YSx5OmxbaV19KSxjLnB1c2goe3g6c1tyXSx5OmxbaV19KTt2YXIgdT1lLl9jbGlwcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLmRhdGEoYywoZnVuY3Rpb24odCl7cmV0dXJuIHQueC5faWQrdC55Ll9pZH0pKTt1LmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImF4ZXNjbGlwIiwhMCkuYXR0cigiaWQiLChmdW5jdGlvbih0KXtyZXR1cm4iY2xpcCIrZS5fdWlkK3QueC5faWQrdC55Ll9pZH0pKS5hcHBlbmQoInJlY3QiKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdCgicmVjdCIpLmF0dHIoe3g6dC54Ll9vZmZzZXR8fDAseTp0LnkuX29mZnNldHx8MCx3aWR0aDp0LnguX2xlbmd0aHx8MSxoZWlnaHQ6dC55Ll9sZW5ndGh8fDF9KX0pKX19LEIuZHJhdz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dDsicmVkcmF3Ij09PWUmJm4uX3BhcGVyLnNlbGVjdEFsbCgiZy5zdWJwbG90IikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPW4uX3Bsb3RzW2VdO2lmKHIpe3ZhciBpPXIueGF4aXMsYT1yLnlheGlzO3IueGF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2kuX2lkKyJ0aWNrIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIrYS5faWQrInRpY2siKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsidGljazIiKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIithLl9pZCsidGljazIiKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsiZGl2aWRlciIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2EuX2lkKyJkaXZpZGVyIikucmVtb3ZlKCksci5ncmlkbGF5ZXImJnIuZ3JpZGxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLHIuemVyb2xpbmVsYXllciYmci56ZXJvbGluZWxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoIi5nLSIraS5faWQrInRpdGxlIikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdCgiLmctIithLl9pZCsidGl0bGUiKS5yZW1vdmUoKX19KSk7dmFyIGk9ZSYmInJlZHJhdyIhPT1lP2U6Qi5saXN0SWRzKHQpO3JldHVybiBzLnN5bmNPckFzeW5jKGkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihlKXt2YXIgbj1CLmdldEZyb21JZCh0LGUpLGk9Qi5kcmF3T25lKHQsbixyKTtyZXR1cm4gbi5fcj1uLnJhbmdlLnNsaWNlKCksbi5fcmw9cy5zaW1wbGVNYXAobi5fcixuLnIybCksaX19fSkpKX0sQi5kcmF3T25lPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGw7cj1yfHx7fSxlLnNldFNjYWxlKCk7dmFyIGM9dC5fZnVsbExheW91dCxwPWUuX2lkLGQ9cC5jaGFyQXQoMCksZz1CLmNvdW50ZXJMZXR0ZXIocCksbT1jLl9wbG90c1tlLl9tYWluU3VicGxvdF07aWYobSl7dmFyIHY9bVtkKyJheGlzbGF5ZXIiXSx5PWUuX21haW5MaW5lUG9zaXRpb24seD1lLl9tYWluTWlycm9yUG9zaXRpb24sYj1lLl92YWxzPUIuY2FsY1RpY2tzKGUpLF89W2UubWlycm9yLHkseF0uam9pbigiXyIpO2ZvcihuPTA7bjxiLmxlbmd0aDtuKyspYltuXS5heEluZm89XztlLl9zZWxlY3Rpb25zPXt9LGUuX3RpY2tBbmdsZXMmJihlLl9wcmV2VGlja0FuZ2xlcz1lLl90aWNrQW5nbGVzKSxlLl90aWNrQW5nbGVzPXt9LGUuX2RlcHRoPW51bGw7dmFyIHc9e307aWYoZS52aXNpYmxlKXt2YXIgVCxrLE09Qi5tYWtlVHJhbnNUaWNrRm4oZSksQT1CLm1ha2VUcmFuc1RpY2tMYWJlbEZuKGUpLFM9Imluc2lkZSI9PT1lLnRpY2tzLEU9Im91dHNpZGUiPT09ZS50aWNrcztpZigiYm91bmRhcmllcyI9PT1lLnRpY2tzb24pe3ZhciBDPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1bXSxpPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54Ym5kW2VdO251bGwhPT1yJiZuLnB1c2gocy5leHRlbmRGbGF0KHt9LHQse3g6cn0pKX07aWYoZS5sZW5ndGgpe2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspaShlW3JdLDApO2koZVtyLTFdLDEpfXJldHVybiBufSgwLGIpO2s9Qi5jbGlwRW5kcyhlLEMpLFQ9Uz9rOkN9ZWxzZSBrPUIuY2xpcEVuZHMoZSxiKSxUPVMmJiJwZXJpb2QiIT09ZS50aWNrbGFiZWxtb2RlP2s6Yjt2YXIgTD1lLl9ncmlkVmFscz1rLEk9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9W10sYT1lLmxlbmd0aCYmZVtlLmxlbmd0aC0xXS54PGVbMF0ueCxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54Ym5kW2VdO251bGwhPT1yJiZpLnB1c2gocy5leHRlbmRGbGF0KHt9LHQse3g6cn0pKX07aWYodC5zaG93ZGl2aWRlcnMmJmUubGVuZ3RoKXtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbD1lW3JdO2wudGV4dDIhPT1uJiZvKGwsYT8xOjApLG49bC50ZXh0Mn1vKGVbci0xXSxhPzA6MSl9cmV0dXJuIGl9KGUsYik7aWYoIWMuX2hhc09ubHlMYXJnZVNwbG9tcyl7dmFyIFA9ZS5fc3VicGxvdHNXaXRoLHo9e307Zm9yKG49MDtuPFAubGVuZ3RoO24rKyl7aT1QW25dO3ZhciBPPShsPWMuX3Bsb3RzW2ldKVtnKyJheGlzIl0sRD1PLl9tYWluQXhpcy5faWQ7aWYoIXpbRF0pe3pbRF09MTt2YXIgTj0ieCI9PT1kPyJNMCwiK08uX29mZnNldCsidiIrTy5fbGVuZ3RoOiJNIitPLl9vZmZzZXQrIiwwaCIrTy5fbGVuZ3RoO0IuZHJhd0dyaWQodCxlLHt2YWxzOkwsY291bnRlckF4aXM6TyxsYXllcjpsLmdyaWRsYXllci5zZWxlY3QoIi4iK3ApLHBhdGg6Tix0cmFuc0ZuOk19KSxCLmRyYXdaZXJvTGluZSh0LGUse2NvdW50ZXJBeGlzOk8sbGF5ZXI6bC56ZXJvbGluZWxheWVyLHBhdGg6Tix0cmFuc0ZuOk19KX19fXZhciBqPUIuZ2V0VGlja1NpZ25zKGUpLFU9W107aWYoZS50aWNrcyl7dmFyIFYscSxILEc9Qi5tYWtlVGlja1BhdGgoZSx5LGpbMl0pO2lmKGUuX2FuY2hvckF4aXMmJmUubWlycm9yJiYhMCE9PWUubWlycm9yPyhWPUIubWFrZVRpY2tQYXRoKGUseCxqWzNdKSxxPUcrVik6KFY9IiIscT1HKSxlLnNob3dkaXZpZGVycyYmRSYmImJvdW5kYXJpZXMiPT09ZS50aWNrc29uKXt2YXIgWT17fTtmb3Iobj0wO248SS5sZW5ndGg7bisrKVlbSVtuXS54XT0xO0g9ZnVuY3Rpb24odCl7cmV0dXJuIFlbdC54XT9WOnF9fWVsc2UgSD1xO0IuZHJhd1RpY2tzKHQsZSx7dmFsczpULGxheWVyOnYscGF0aDpILHRyYW5zRm46TX0pLCJhbGx0aWNrcyI9PT1lLm1pcnJvciYmKFU9T2JqZWN0LmtleXMoZS5fbGluZXBvc2l0aW9uc3x8e30pKX1mb3Iobj0wO248VS5sZW5ndGg7bisrKXtpPVVbbl0sbD1jLl9wbG90c1tpXTt2YXIgVz1lLl9saW5lcG9zaXRpb25zW2ldfHxbXSxYPUIubWFrZVRpY2tQYXRoKGUsV1swXSxqWzBdKStCLm1ha2VUaWNrUGF0aChlLFdbMV0salsxXSk7Qi5kcmF3VGlja3ModCxlLHt2YWxzOlQsbGF5ZXI6bFtkKyJheGlzbGF5ZXIiXSxwYXRoOlgsdHJhbnNGbjpNfSl9dmFyIFo9W107aWYoWi5wdXNoKChmdW5jdGlvbigpe3JldHVybiBCLmRyYXdMYWJlbHModCxlLHt2YWxzOmIsbGF5ZXI6dix0cmFuc0ZuOkEsbGFiZWxGbnM6Qi5tYWtlTGFiZWxGbnMoZSx5KX0pfSkpLCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZSl7dmFyIEo9e3g6Mix5OjEwfVtkXTtaLnB1c2goKGZ1bmN0aW9uKCl7dmFyIHI9e3g6ImhlaWdodCIseToid2lkdGgifVtkXSxuPVEoKVtyXStKKyhlLl90aWNrQW5nbGVzW3ArInRpY2siXT9lLnRpY2tmb250LnNpemUqUjowKTtyZXR1cm4gQi5kcmF3TGFiZWxzKHQsZSx7dmFsczpjdChlLGIpLGxheWVyOnYsY2xzOnArInRpY2syIixyZXBvc2l0aW9uT25VcGRhdGU6ITAsc2Vjb25kYXJ5OiEwLHRyYW5zRm46TSxsYWJlbEZuczpCLm1ha2VMYWJlbEZucyhlLHkrbipqWzRdKX0pfSkpLFoucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5fZGVwdGg9als0XSooUSgidGljazIiKVtlLnNpZGVdLXkpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLl9pZCsiZGl2aWRlciIsaT1yLnZhbHMsYT1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoaSxmdCk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJjcmlzcCIsMSkuY2FsbChmLnN0cm9rZSxlLmRpdmlkZXJjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsaC5jcmlzcFJvdW5kKHQsZS5kaXZpZGVyd2lkdGgsMSkrInB4IiksYS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbikuYXR0cigiZCIsci5wYXRoKX0odCxlLHt2YWxzOkksbGF5ZXI6dixwYXRoOkIubWFrZVRpY2tQYXRoKGUseSxqWzRdLGUuX2RlcHRoKSx0cmFuc0ZuOk19KX0pKX1lbHNlIGUudGl0bGUuaGFzT3duUHJvcGVydHkoInN0YW5kb2ZmIikmJloucHVzaCgoZnVuY3Rpb24oKXtlLl9kZXB0aD1qWzRdKihRKClbZS5zaWRlXS15KX0pKTt2YXIgSz1vLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShlKTtyZXR1cm4gWi5wdXNoKChmdW5jdGlvbigpe3ZhciByLG4saSxzLGw9ZS5zaWRlLmNoYXJBdCgwKSx1PUZbZS5zaWRlXS5jaGFyQXQoMCksZj1CLmdldFB4UG9zaXRpb24odCxlKSxoPUU/ZS50aWNrbGVuOjA7aWYoKGUuYXV0b21hcmdpbnx8SykmJigibXVsdGljYXRlZ29yeSI9PT1lLnR5cGU/cj1RKCJ0aWNrMiIpOihyPVEoKSwieCI9PT1kJiYiYiI9PT1sJiYoZS5fZGVwdGg9TWF0aC5tYXgoci53aWR0aD4wP3IuYm90dG9tLWY6MCxoKSkpKSxlLmF1dG9tYXJnaW4pe249e3g6MCx5OjAscjowLGw6MCx0OjAsYjowfTt2YXIgcD1bMCwxXTtpZigieCI9PT1kKXtpZigiYiI9PT1sP25bbF09ZS5fZGVwdGg6KG5bbF09ZS5fZGVwdGg9TWF0aC5tYXgoci53aWR0aD4wP2Ytci50b3A6MCxoKSxwLnJldmVyc2UoKSksci53aWR0aD4wKXt2YXIgbT1yLnJpZ2h0LShlLl9vZmZzZXQrZS5fbGVuZ3RoKTttPjAmJihuLnhyPTEsbi5yPW0pO3ZhciB2PWUuX29mZnNldC1yLmxlZnQ7dj4wJiYobi54bD0wLG4ubD12KX19ZWxzZSBpZigibCI9PT1sP25bbF09ZS5fZGVwdGg9TWF0aC5tYXgoci5oZWlnaHQ+MD9mLXIubGVmdDowLGgpOihuW2xdPWUuX2RlcHRoPU1hdGgubWF4KHIuaGVpZ2h0PjA/ci5yaWdodC1mOjAsaCkscC5yZXZlcnNlKCkpLHIuaGVpZ2h0PjApe3ZhciB5PXIuYm90dG9tLShlLl9vZmZzZXQrZS5fbGVuZ3RoKTt5PjAmJihuLnliPTAsbi5iPXkpO3ZhciB4PWUuX29mZnNldC1yLnRvcDt4PjAmJihuLnl0PTEsbi50PXgpfW5bZ109ImZyZWUiPT09ZS5hbmNob3I/ZS5wb3NpdGlvbjplLl9hbmNob3JBeGlzLmRvbWFpbltwWzBdXSxlLnRpdGxlLnRleHQhPT1jLl9kZmx0VGl0bGVbZF0mJihuW2xdKz1odChlKSsoZS50aXRsZS5zdGFuZG9mZnx8MCkpLGUubWlycm9yJiYiZnJlZSIhPT1lLmFuY2hvciYmKChpPXt4OjAseTowLHI6MCxsOjAsdDowLGI6MH0pW3VdPWUubGluZXdpZHRoLGUubWlycm9yJiYhMCE9PWUubWlycm9yJiYoaVt1XSs9aCksITA9PT1lLm1pcnJvcnx8InRpY2tzIj09PWUubWlycm9yP2lbZ109ZS5fYW5jaG9yQXhpcy5kb21haW5bcFsxXV06ImFsbCIhPT1lLm1pcnJvciYmImFsbHRpY2tzIiE9PWUubWlycm9yfHwoaVtnXT1bZS5fY291bnRlckRvbWFpbk1pbixlLl9jb3VudGVyRG9tYWluTWF4XVtwWzFdXSkpfUsmJihzPW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImF1dG9NYXJnaW5PcHRzIikodCxlKSksYS5hdXRvTWFyZ2luKHQsZ3QoZSksbiksYS5hdXRvTWFyZ2luKHQsbXQoZSksaSksYS5hdXRvTWFyZ2luKHQsdnQoZSkscyl9KSksci5za2lwVGl0bGV8fEsmJiJib3R0b20iPT09ZS5zaWRlfHxaLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Ll9mdWxsTGF5b3V0LGk9ZS5faWQsYT1pLmNoYXJBdCgwKSxvPWUudGl0bGUuZm9udC5zaXplO2lmKGUudGl0bGUuaGFzT3duUHJvcGVydHkoInN0YW5kb2ZmIikpcj1lLl9kZXB0aCtlLnRpdGxlLnN0YW5kb2ZmK2h0KGUpO2Vsc2V7dmFyIHM9LTEhPT0oZS50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpO2lmKCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZSlyPWUuX2RlcHRoO2Vsc2V7dmFyIGw9MS41Km87cyYmKGw9LjUqbywib3V0c2lkZSI9PT1lLnRpY2tzJiYobCs9ZS50aWNrbGVuKSkscj0xMCtsKyhlLmxpbmV3aWR0aD9lLmxpbmV3aWR0aC0xOjApfXN8fChyKz0ieCI9PT1hPyJ0b3AiPT09ZS5zaWRlP28qKGUuc2hvd3RpY2tsYWJlbHM/MTowKTpvKihlLnNob3d0aWNrbGFiZWxzPzEuNTouNSk6InJpZ2h0Ij09PWUuc2lkZT9vKihlLnNob3d0aWNrbGFiZWxzPzE6LjUpOm8qKGUuc2hvd3RpY2tsYWJlbHM/LjU6MCkpfXZhciBjLGYscCxkLGc9Qi5nZXRQeFBvc2l0aW9uKHQsZSk7IngiPT09YT8oZj1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIscD0idG9wIj09PWUuc2lkZT9nLXI6ZytyKToocD1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIsZj0icmlnaHQiPT09ZS5zaWRlP2crcjpnLXIsYz17cm90YXRlOiItOTAiLG9mZnNldDowfSk7aWYoIm11bHRpY2F0ZWdvcnkiIT09ZS50eXBlKXt2YXIgbT1lLl9zZWxlY3Rpb25zW2UuX2lkKyJ0aWNrIl07aWYoZD17c2VsZWN0aW9uOm0sc2lkZTplLnNpZGV9LG0mJm0ubm9kZSgpJiZtLm5vZGUoKS5wYXJlbnROb2RlKXt2YXIgdj1oLmdldFRyYW5zbGF0ZShtLm5vZGUoKS5wYXJlbnROb2RlKTtkLm9mZnNldExlZnQ9di54LGQub2Zmc2V0VG9wPXYueX1lLnRpdGxlLmhhc093blByb3BlcnR5KCJzdGFuZG9mZiIpJiYoZC5wYWQ9MCl9cmV0dXJuIHUuZHJhdyh0LGkrInRpdGxlIix7cHJvcENvbnRhaW5lcjplLHByb3BOYW1lOmUuX25hbWUrIi50aXRsZS50ZXh0IixwbGFjZWhvbGRlcjpuLl9kZmx0VGl0bGVbYV0sYXZvaWQ6ZCx0cmFuc2Zvcm06YyxhdHRyaWJ1dGVzOnt4OmYseTpwLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9KHQsZSl9KSkscy5zeW5jT3JBc3luYyhaKX19ZnVuY3Rpb24gUSh0KXt2YXIgcj1wKyh0fHwidGljayIpO3JldHVybiB3W3JdfHwod1tyXT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhO3QuX3NlbGVjdGlvbnNbZV0uc2l6ZSgpPyhyPTEvMCxuPS0xLzAsaT0xLzAsYT0tMS8wLHQuX3NlbGVjdGlvbnNbZV0uZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1kdCh0aGlzKSxlPWguYkJveCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtyPU1hdGgubWluKHIsZS50b3ApLG49TWF0aC5tYXgobixlLmJvdHRvbSksaT1NYXRoLm1pbihpLGUubGVmdCksYT1NYXRoLm1heChhLGUucmlnaHQpfSkpKToocj0wLG49MCxpPTAsYT0wKTtyZXR1cm57dG9wOnIsYm90dG9tOm4sbGVmdDppLHJpZ2h0OmEsaGVpZ2h0Om4tcix3aWR0aDphLWl9fShlLHIpKSx3W3JdfX0sQi5nZXRUaWNrU2lnbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5faWQuY2hhckF0KDApLHI9e3g6InRvcCIseToicmlnaHQifVtlXSxuPXQuc2lkZT09PXI/MTotMSxpPVstMSwxLG4sLW5dO3JldHVybiJpbnNpZGUiIT09dC50aWNrcz09KCJ4Ij09PWUpJiYoaT1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuLXR9KSkpLHQuc2lkZSYmaS5wdXNoKHtsOi0xLHQ6LTEscjoxLGI6MX1bdC5zaWRlLmNoYXJBdCgwKV0pLGl9LEIubWFrZVRyYW5zVGlja0ZuPWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQuX2lkLmNoYXJBdCgwKT9mdW5jdGlvbihlKXtyZXR1cm4gbCh0Ll9vZmZzZXQrdC5sMnAoZS54KSwwKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGwoMCx0Ll9vZmZzZXQrdC5sMnAoZS54KSl9fSxCLm1ha2VUcmFuc1RpY2tMYWJlbEZuPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGlja2xhYmVscG9zaXRpb258fCIiLHI9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1lLmluZGV4T2YodCl9LG49cigidG9wIiksaT1yKCJsZWZ0IiksYT1yKCJyaWdodCIpLG89cigiYm90dG9tIikscz1yKCJpbnNpZGUiKSxsPW98fGl8fG58fGE7aWYoIWwmJiFzKXJldHVyblswLDBdO3ZhciBjPXQuc2lkZSx1PWw/KHQudGlja3dpZHRofHwwKS8yOjAsZj0zLGg9dC50aWNrZm9udD90LnRpY2tmb250LnNpemU6MTI7KG98fG4pJiYodSs9aCpELGYrPSh0LmxpbmV3aWR0aHx8MCkvMik7KGl8fGEpJiYodSs9KHQubGluZXdpZHRofHwwKS8yLGYrPTMpO3MmJiJ0b3AiPT09YyYmKGYtPWgqKDEtRCkpOyhpfHxuKSYmKHU9LXUpOyJib3R0b20iIT09YyYmInJpZ2h0IiE9PWN8fChmPS1mKTtyZXR1cm5bbD91OjAscz9mOjBdfSh0KSxyPWVbMF0sbj1lWzFdO3JldHVybiJ4Ij09PXQuX2lkLmNoYXJBdCgwKT9mdW5jdGlvbihlKXtyZXR1cm4gbChyK3QuX29mZnNldCt0LmwycCh1dChlKSksbil9OmZ1bmN0aW9uKGUpe3JldHVybiBsKG4scit0Ll9vZmZzZXQrdC5sMnAodXQoZSkpKX19LEIubWFrZVRpY2tQYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe249dm9pZCAwIT09bj9uOnQudGlja2xlbjt2YXIgaT10Ll9pZC5jaGFyQXQoMCksYT0odC5saW5ld2lkdGh8fDEpLzI7cmV0dXJuIngiPT09aT8iTTAsIisoZSthKnIpKyJ2IituKnI6Ik0iKyhlK2EqcikrIiwwaCIrbipyfSxCLm1ha2VMYWJlbEZucz1mdW5jdGlvbih0LGUscil7dmFyIG49dC50aWNrbGFiZWxwb3NpdGlvbnx8IiIsYT1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PW4uaW5kZXhPZih0KX0sbz1hKCJ0b3AiKSxsPWEoImxlZnQiKSxjPWEoInJpZ2h0IiksdT1hKCJib3R0b20iKXx8bHx8b3x8YyxmPWEoImluc2lkZSIpLGg9Imluc2lkZSI9PT1uJiYiaW5zaWRlIj09PXQudGlja3N8fCFmJiYib3V0c2lkZSI9PT10LnRpY2tzJiYiYm91bmRhcmllcyIhPT10LnRpY2tzb24scD0wLGQ9MCxnPWg/dC50aWNrbGVuOjA7aWYoZj9nKj0tMTp1JiYoZz0wKSxoJiYocCs9ZyxyKSl7dmFyIG09cy5kZWcycmFkKHIpO3A9ZypNYXRoLmNvcyhtKSsxLGQ9ZypNYXRoLnNpbihtKX10LnNob3d0aWNrbGFiZWxzJiYoaHx8dC5zaG93bGluZSkmJihwKz0uMip0LnRpY2tmb250LnNpemUpO3ZhciB2LHkseCxiLF8sdz17bGFiZWxTdGFuZG9mZjpwKz0odC5saW5ld2lkdGh8fDEpLzIqKGY/LTE6MSksbGFiZWxTaGlmdDpkfSxUPTAsaz10LnNpZGUsTT10Ll9pZC5jaGFyQXQoMCksQT10LnRpY2thbmdsZTtpZigieCI9PT1NKWI9KF89IWYmJiJib3R0b20iPT09a3x8ZiYmInRvcCI9PT1rKT8xOi0xLGYmJihiKj0tMSksdj1kKmIseT1lK3AqYix4PV8/MTotLjIsOTA9PT1NYXRoLmFicyhBKSYmKGY/eCs9Tzp4PS05MD09PUEmJiJib3R0b20iPT09az9EOjkwPT09QSYmInRvcCI9PT1rP086LjUsVD1PLzIqKEEvOTApKSx3LnhGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keCt2K1QqdC5mb250U2l6ZX0sdy55Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkreSt0LmZvbnRTaXplKnh9LHcuYW5jaG9yRm49ZnVuY3Rpb24odCxlKXtpZih1KXtpZihsKXJldHVybiJlbmQiO2lmKGMpcmV0dXJuInN0YXJ0In1yZXR1cm4gaShlKSYmMCE9PWUmJjE4MCE9PWU/ZSpiPDAhPT1mPyJlbmQiOiJzdGFydCI6Im1pZGRsZSJ9LHcuaGVpZ2h0Rm49ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByPC02MHx8cj42MD8tLjUqbjoidG9wIj09PXQuc2lkZSE9PWY/LW46MH07ZWxzZSBpZigieSI9PT1NKXtpZihiPShfPSFmJiYibGVmdCI9PT1rfHxmJiYicmlnaHQiPT09ayk/MTotMSxmJiYoYio9LTEpLHY9cCx5PWQqYix4PTAsZnx8OTAhPT1NYXRoLmFicyhBKXx8KHg9LTkwPT09QSYmImxlZnQiPT09a3x8OTA9PT1BJiYicmlnaHQiPT09az9EOi41KSxmKXt2YXIgUz1pKEEpPytBOjA7aWYoMCE9PVMpe3ZhciBFPXMuZGVnMnJhZChTKTtUPU1hdGguYWJzKE1hdGguc2luKEUpKSpEKmIseD0wfX13LnhGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keCtlLSh2K3QuZm9udFNpemUqeCkqYitUKnQuZm9udFNpemV9LHcueUZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K3krdC5mb250U2l6ZSpPfSx3LmFuY2hvckZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkoZSkmJjkwPT09TWF0aC5hYnMoZSk/Im1pZGRsZSI6Xz8iZW5kIjoic3RhcnQifSx3LmhlaWdodEZuPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4icmlnaHQiPT09dC5zaWRlJiYocio9LTEpLHI8LTMwPy1uOnI8MzA/LS41Km46MH19cmV0dXJuIHd9LEIuZHJhd1RpY2tzPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBuPWUuX2lkKyJ0aWNrIixpPXIudmFsczsicGVyaW9kIj09PWUudGlja2xhYmVsbW9kZSYmKGk9aS5zbGljZSgpKS5zaGlmdCgpO3ZhciBhPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShlLnRpY2tzP2k6W10sZnQpO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgidGlja3MiLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLmNhbGwoZi5zdHJva2UsZS50aWNrY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGguY3Jpc3BSb3VuZCh0LGUudGlja3dpZHRoLDEpKyJweCIpLmF0dHIoImQiLHIucGF0aCksYS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbil9LEIuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIpe3I9cnx8e307dmFyIG49ZS5faWQrImdyaWQiLGk9ci52YWxzLGE9ci5jb3VudGVyQXhpcztpZighMT09PWUuc2hvd2dyaWQpaT1bXTtlbHNlIGlmKGEmJkIuc2hvdWxkU2hvd1plcm9MaW5lKHQsZSxhKSlmb3IodmFyIG89ImFycmF5Ij09PWUudGlja21vZGUscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLng7aWYobz8hbDpNYXRoLmFicyhsKTxlLmR0aWNrLzEwMCl7aWYoaT1pLnNsaWNlKDAscykuY29uY2F0KGkuc2xpY2UocysxKSksIW8pYnJlYWs7cy0tfX12YXIgYz1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoaSxmdCk7Yy5leGl0KCkucmVtb3ZlKCksYy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJjcmlzcCIsITEhPT1yLmNyaXNwKSxlLl9ndz1oLmNyaXNwUm91bmQodCxlLmdyaWR3aWR0aCwxKSxjLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKS5hdHRyKCJkIixyLnBhdGgpLmNhbGwoZi5zdHJva2UsZS5ncmlkY29sb3J8fCIjZGRkIikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5fZ3crInB4IiksImZ1bmN0aW9uIj09dHlwZW9mIHIucGF0aCYmYy5hdHRyKCJkIixyLnBhdGgpfSxCLmRyYXdaZXJvTGluZT1mdW5jdGlvbih0LGUscil7cj1yfHxyO3ZhciBuPWUuX2lkKyJ6bCIsaT1CLnNob3VsZFNob3daZXJvTGluZSh0LGUsci5jb3VudGVyQXhpcyksYT1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoaT9be3g6MCxpZDplLl9pZH1dOltdKTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoInpsIiwxKS5jbGFzc2VkKCJjcmlzcCIsITEhPT1yLmNyaXNwKS5lYWNoKChmdW5jdGlvbigpe3IubGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gVSh0LmlkLGUuaWQpfSkpfSkpLGEuYXR0cigidHJhbnNmb3JtIixyLnRyYW5zRm4pLmF0dHIoImQiLHIucGF0aCkuY2FsbChmLnN0cm9rZSxlLnplcm9saW5lY29sb3J8fGYuZGVmYXVsdExpbmUpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGguY3Jpc3BSb3VuZCh0LGUuemVyb2xpbmV3aWR0aCxlLl9nd3x8MSkrInB4Iil9LEIuZHJhd0xhYmVscz1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ZS5faWQsdT1vLmNoYXJBdCgwKSxmPXIuY2xzfHxvKyJ0aWNrIixwPXIudmFscyxkPXIubGFiZWxGbnMsZz1yLnNlY29uZGFyeT8wOmUudGlja2FuZ2xlLG09KGUuX3ByZXZUaWNrQW5nbGVzfHx7fSlbZl0sdj1yLmxheWVyLnNlbGVjdEFsbCgiZy4iK2YpLmRhdGEoZS5zaG93dGlja2xhYmVscz9wOltdLGZ0KSx5PVtdO2Z1bmN0aW9uIHgodCxhKXt2YXIgbz0tMSE9PShlLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIik7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgcz1uLnNlbGVjdCh0aGlzKSx1PXMuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIiksZj1kLmFuY2hvckZuKHQsYSkscD1yLnRyYW5zRm4uY2FsbChzLm5vZGUoKSx0KSsoaShhKSYmMCE9K2E/IiByb3RhdGUoIithKyIsIitkLnhGbih0KSsiLCIrKGQueUZuKHQpLXQuZm9udFNpemUvMikrIikiOiIiKSxnPWMubGluZUNvdW50KHMpLG09Uip0LmZvbnRTaXplLHY9ZC5oZWlnaHRGbih0LGkoYSk/K2E6MCwoZy0xKSptKTtpZih2JiYocCs9bCgwLHYpKSx1LmVtcHR5KCkpe3ZhciB5PXMuc2VsZWN0KCJ0ZXh0Iik7eS5hdHRyKHt0cmFuc2Zvcm06cCwidGV4dC1hbmNob3IiOmZ9KSxvJiYoeS5zdHlsZSh7b3BhY2l0eToxMDB9KSxlLl9oaWRlT3V0T2ZSYW5nZUluc2lkZVRpY2tMYWJlbHMmJmUuX2hpZGVPdXRPZlJhbmdlSW5zaWRlVGlja0xhYmVscygpKX1lbHNle3ZhciB4PWguYkJveCh1Lm5vZGUoKSkud2lkdGgqe2VuZDotLjUsc3RhcnQ6LjV9W2ZdO3UuYXR0cigidHJhbnNmb3JtIixwK2woeCwwKSl9fSkpfXYuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYsMSkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXQuX3Byb21pc2VzLmxlbmd0aDtyLmNhbGwoYy5wb3NpdGlvblRleHQsZC54Rm4oZSksZC55Rm4oZSkpLmNhbGwoaC5mb250LGUuZm9udCxlLmZvbnRTaXplLGUuZm9udENvbG9yKS50ZXh0KGUudGV4dCkuY2FsbChjLmNvbnZlcnRUb1RzcGFucyx0KSx0Ll9wcm9taXNlc1tpXT95LnB1c2godC5fcHJvbWlzZXMucG9wKCkudGhlbigoZnVuY3Rpb24oKXt4KHIsZyl9KSkpOngocixnKX0pKSx2LmV4aXQoKS5yZW1vdmUoKSxyLnJlcG9zaXRpb25PblVwZGF0ZSYmdi5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5jYWxsKGMucG9zaXRpb25UZXh0LGQueEZuKHQpLGQueUZuKHQpKX0pKSxlLl9oaWRlT3V0T2ZSYW5nZUluc2lkZVRpY2tMYWJlbHM9dm9pZCAwLC0xIT09KGUudGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKSYmKGUuX2hpZGVPdXRPZlJhbmdlSW5zaWRlVGlja0xhYmVscz1mdW5jdGlvbigpe3ZhciB0PXMuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpLHI9ZS5sMnAodFswXSksaT1lLmwycCh0WzFdKSxhPU1hdGgubWluKHIsaSkrZS5fb2Zmc2V0LG89TWF0aC5tYXgocixpKStlLl9vZmZzZXQsbD0ieCI9PT1lLl9pZC5jaGFyQXQoMCk7di5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZihyLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpLmVtcHR5KCkpe3ZhciBpPWguYkJveChyLm5vZGUoKSkscz0hMTtsPyhpLnJpZ2h0Pm98fGkubGVmdDxhKSYmKHM9ITApOihpLmJvdHRvbT5vfHxpLnRvcCsoZS50aWNrYW5nbGU/MDp0LmZvbnRTaXplLzQpPGEpJiYocz0hMCkscyYmci5zZWxlY3QoInRleHQiKS5zdHlsZSh7b3BhY2l0eTowfSl9fSkpfSkseCh2LG0rMT9tOmcpO3ZhciBiPW51bGw7ZS5fc2VsZWN0aW9ucyYmKGUuX3NlbGVjdGlvbnNbZl09dik7dmFyIF89W2Z1bmN0aW9uKCl7cmV0dXJuIHkubGVuZ3RoJiZQcm9taXNlLmFsbCh5KX1dO2UuYXV0b21hcmdpbiYmYS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudCYmOTA9PT1tPyhiPTkwLF8ucHVzaCgoZnVuY3Rpb24oKXt4KHYsbSl9KSkpOl8ucHVzaCgoZnVuY3Rpb24oKXtpZih4KHYsZykscC5sZW5ndGgmJiJ4Ij09PXUmJiFpKGcpJiYoImxvZyIhPT1lLnR5cGV8fCJEIiE9PVN0cmluZyhlLmR0aWNrKS5jaGFyQXQoMCkpKXtiPTA7dmFyIHQsbj0wLGE9W107aWYodi5lYWNoKChmdW5jdGlvbih0KXtuPU1hdGgubWF4KG4sdC5mb250U2l6ZSk7dmFyIHI9ZS5sMnAodC54KSxpPWR0KHRoaXMpLG89aC5iQm94KGkubm9kZSgpKTthLnB1c2goe3RvcDowLGJvdHRvbToxMCxoZWlnaHQ6MTAsbGVmdDpyLW8ud2lkdGgvMixyaWdodDpyK28ud2lkdGgvMisyLHdpZHRoOm8ud2lkdGgrMn0pfSkpLCJib3VuZGFyaWVzIiE9PWUudGlja3NvbiYmIWUuc2hvd2RpdmlkZXJzfHxyLnNlY29uZGFyeSl7dmFyIG89cC5sZW5ndGgsbD1NYXRoLmFicygocFtvLTFdLngtcFswXS54KSplLl9tKS8oby0xKSxjPWUudGlja2xhYmVscG9zaXRpb258fCIiLGY9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1jLmluZGV4T2YodCl9LGQ9ZigidG9wIiksbT1mKCJsZWZ0IikseT1mKCJyaWdodCIpLF89ZigiYm90dG9tIil8fG18fGR8fHk/KGUudGlja3dpZHRofHwwKSs2OjAsdz1sPDIuNSpufHwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGU7Zm9yKHQ9MDt0PGEubGVuZ3RoLTE7dCsrKWlmKHMuYkJveEludGVyc2VjdChhW3RdLGFbdCsxXSxfKSl7Yj13PzkwOjMwO2JyZWFrfX1lbHNle3ZhciBUPTI7Zm9yKGUudGlja3MmJihUKz1lLnRpY2t3aWR0aC8yKSx0PTA7dDxhLmxlbmd0aDt0Kyspe3ZhciBrPXBbdF0ueGJuZCxNPWFbdF07aWYobnVsbCE9PWtbMF0mJk0ubGVmdC1lLmwycChrWzBdKTxUfHxudWxsIT09a1sxXSYmZS5sMnAoa1sxXSktTS5yaWdodDxUKXtiPTkwO2JyZWFrfX19YiYmeCh2LGIpfX0pKSxlLl90aWNrQW5nbGVzJiZfLnB1c2goKGZ1bmN0aW9uKCl7ZS5fdGlja0FuZ2xlc1tmXT1udWxsPT09Yj9pKGcpP2c6MDpifSkpO3ZhciB3PWUuX2FuY2hvckF4aXM7dyYmdy5hdXRvcmFuZ2UmJi0xIT09KGUudGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKSYmIVYoYSxlLl9pZCkmJihhLl9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlfHwoYS5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZT17fSksYS5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZVt3Ll9uYW1lKyIuYXV0b3JhbmdlIl09dy5hdXRvcmFuZ2UsXy5wdXNoKChmdW5jdGlvbigpe3YuZWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj1kdCh0aGlzKTtlLl92YWxzW3JdLmJiPWguYkJveChuLm5vZGUoKSl9KSl9KSkpO3ZhciBUPXMuc3luY09yQXN5bmMoXyk7cmV0dXJuIFQmJlQudGhlbiYmdC5fcHJvbWlzZXMucHVzaChUKSxUfSxCLmdldFB4UG9zaXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuX2Z1bGxMYXlvdXQuX3NpemUsaT1lLl9pZC5jaGFyQXQoMCksYT1lLnNpZGU7cmV0dXJuImZyZWUiIT09ZS5hbmNob3I/cj1lLl9hbmNob3JBeGlzOiJ4Ij09PWk/cj17X29mZnNldDpuLnQrKDEtKGUucG9zaXRpb258fDApKSpuLmgsX2xlbmd0aDowfToieSI9PT1pJiYocj17X29mZnNldDpuLmwrKGUucG9zaXRpb258fDApKm4udyxfbGVuZ3RoOjB9KSwidG9wIj09PWF8fCJsZWZ0Ij09PWE/ci5fb2Zmc2V0OiJib3R0b20iPT09YXx8InJpZ2h0Ij09PWE/ci5fb2Zmc2V0K3IuX2xlbmd0aDp2b2lkIDB9LEIuc2hvdWxkU2hvd1plcm9MaW5lPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1zLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTtyZXR1cm4gblswXSpuWzFdPD0wJiZlLnplcm9saW5lJiYoImxpbmVhciI9PT1lLnR5cGV8fCItIj09PWUudHlwZSkmJiEoZS5yYW5nZWJyZWFrcyYmZS5tYXNrQnJlYWtzKDApPT09UCkmJihwdChlLDApfHwhZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5fbWFpbkF4aXM7aWYoIWkpcmV0dXJuO3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1lLl9pZC5jaGFyQXQoMCkscz1CLmNvdW50ZXJMZXR0ZXIoZS5faWQpLGw9ZS5fb2Zmc2V0KyhNYXRoLmFicyhuWzBdKTxNYXRoLmFicyhuWzFdKT09KCJ4Ij09PW8pPzA6ZS5fbGVuZ3RoKTtmdW5jdGlvbiBjKHQpe2lmKCF0LnNob3dsaW5lfHwhdC5saW5ld2lkdGgpcmV0dXJuITE7dmFyIHI9TWF0aC5tYXgoKHQubGluZXdpZHRoK2UuemVyb2xpbmV3aWR0aCkvMiwxKTtmdW5jdGlvbiBuKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmTWF0aC5hYnModC1sKTxyfWlmKG4odC5fbWFpbkxpbmVQb3NpdGlvbil8fG4odC5fbWFpbk1pcnJvclBvc2l0aW9uKSlyZXR1cm4hMDt2YXIgaT10Ll9saW5lcG9zaXRpb25zfHx7fTtmb3IodmFyIGEgaW4gaSlpZihuKGlbYV1bMF0pfHxuKGlbYV1bMV0pKXJldHVybiEwfXZhciB1PWEuX3Bsb3RzW3IuX21haW5TdWJwbG90XTtpZighKHUubWFpbnBsb3RpbmZvfHx1KS5vdmVybGF5cy5sZW5ndGgpcmV0dXJuIGMocik7Zm9yKHZhciBmPUIubGlzdCh0LHMpLGg9MDtoPGYubGVuZ3RoO2grKyl7dmFyIHA9ZltoXTtpZihwLl9tYWluQXhpcz09PWkmJmMocCkpcmV0dXJuITB9fSh0LGUscixuKXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbERhdGEsbj1lLl9tYWluU3VicGxvdCxpPWUuX2lkLmNoYXJBdCgwKSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07aWYoITA9PT1zLnZpc2libGUmJnMueGF4aXMrcy55YXhpcz09PW4pe2lmKG8udHJhY2VJcyhzLCJiYXItbGlrZSIpJiZzLm9yaWVudGF0aW9uPT09e3g6ImgiLHk6InYifVtpXSlyZXR1cm4hMDtpZihzLmZpbGwmJnMuZmlsbC5jaGFyQXQocy5maWxsLmxlbmd0aC0xKT09PWkpcmV0dXJuITB9fXJldHVybiExfSh0LGUpKX0sQi5jbGlwRW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiBlLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHB0KHQsZS54KX0pKX0sQi5hbGxvd0F1dG9NYXJnaW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUIubGlzdCh0LCIiLCEwKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5hdXRvbWFyZ2luJiYoYS5hbGxvd0F1dG9NYXJnaW4odCxndChuKSksbi5taXJyb3ImJmEuYWxsb3dBdXRvTWFyZ2luKHQsbXQobikpKSxvLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShuKSYmYS5hbGxvd0F1dG9NYXJnaW4odCx2dChuKSl9fSxCLnN3YXA9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9W107Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGE9W10sbz10Ll9mdWxsRGF0YVtlW3JdXS54YXhpcyxzPXQuX2Z1bGxEYXRhW2Vbcl1dLnlheGlzO2lmKG8mJnMpe2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspLTE9PT1pW25dLnguaW5kZXhPZihvKSYmLTE9PT1pW25dLnkuaW5kZXhPZihzKXx8YS5wdXNoKG4pO2lmKGEubGVuZ3RoKXt2YXIgbCxjPWlbYVswXV07aWYoYS5sZW5ndGg+MSlmb3Iobj0xO248YS5sZW5ndGg7bisrKWw9aVthW25dXSx5dChjLngsbC54KSx5dChjLnksbC55KTt5dChjLngsW29dKSx5dChjLnksW3NdKX1lbHNlIGkucHVzaCh7eDpbb10seTpbc119KX19cmV0dXJuIGl9KHQsZSksbj0wO248ci5sZW5ndGg7bisrKXh0KHQscltuXS54LHJbbl0ueSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIjo3MzgsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4OTEsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4vYXV0b3JhbmdlIjo4MjcsIi4vYXhpc19hdXRvdHlwZSI6ODI5LCIuL2F4aXNfaWRzIjo4MzEsIi4vY2xlYW5fdGlja3MiOjgzMywiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyLCIuL3NldF9jb252ZXJ0Ijo4NDgsZDM6MTY5LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sODI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkscz1pLmlzRGF0ZVRpbWUsbD1pLmNsZWFuTnVtYmVyLGM9TWF0aC5yb3VuZDtmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGU/bih0KToibnVtYmVyIj09dHlwZW9mIHR9ZnVuY3Rpb24gZih0KXtyZXR1cm4gTWF0aC5tYXgoMSwodC0xKS8xZTMpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dCxoPXIubm9NdWx0aUNhdGVnb3J5O2lmKG8oaSkmJiFpLmxlbmd0aClyZXR1cm4iLSI7aWYoIWgmJmZ1bmN0aW9uKHQpe3JldHVybiBvKHRbMF0pJiZvKHRbMV0pfShpKSlyZXR1cm4ibXVsdGljYXRlZ29yeSI7aWYoaCYmQXJyYXkuaXNBcnJheShpWzBdKSl7Zm9yKHZhciBwPVtdLGQ9MDtkPGkubGVuZ3RoO2QrKylpZihvKGlbZF0pKWZvcih2YXIgZz0wO2c8aVtkXS5sZW5ndGg7ZysrKXAucHVzaChpW2RdW2ddKTtpPXB9aWYoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsaT1mKHIpLGE9MCxvPTAsbD17fSx1PTA7dTxyO3UrPWkpe3ZhciBoPWModSkscD10W2hdLGQ9U3RyaW5nKHApO2xbZF18fChsW2RdPTEscyhwLGUpJiZhKyssbihwKSYmbysrKX1yZXR1cm4gYT4yKm99KGksZSkpcmV0dXJuImRhdGUiO3ZhciBtPSJzdHJpY3QiIT09ci5hdXRvdHlwZW51bWJlcnM7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZihyKSxpPTAsbz0wLHM9e30sdT0wO3U8cjt1Kz1uKXt2YXIgaD1jKHUpLHA9dFtoXSxkPVN0cmluZyhwKTtpZighc1tkXSl7c1tkXT0xO3ZhciBnPXR5cGVvZiBwOyJib29sZWFuIj09PWc/bysrOihlP2wocCkhPT1hOiJudW1iZXIiPT09Zyk/aSsrOiJzdHJpbmciPT09ZyYmbysrfX1yZXR1cm4gbz4yKml9KGksbSk/ImNhdGVnb3J5IjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZih1KHRbbl0sZSkpcmV0dXJuITA7cmV0dXJuITF9KGksbSk/ImxpbmVhciI6Ii0ifX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sODMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPXQoIi4vdGlja192YWx1ZV9kZWZhdWx0cyIpLGM9dCgiLi90aWNrX21hcmtfZGVmYXVsdHMiKSx1PXQoIi4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGY9dCgiLi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyIpLGg9dCgiLi9saW5lX2dyaWRfZGVmYXVsdHMiKSxwPXQoIi4vc2V0X2NvbnZlcnQiKSxkPXQoIi4vY29uc3RhbnRzIikuV0VFS0RBWV9QQVRURVJOLGc9dCgiLi9jb25zdGFudHMiKS5IT1VSX1BBVFRFUk47ZnVuY3Rpb24gbSh0LGUscil7ZnVuY3Rpb24gaShyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUscy5yYW5nZWJyZWFrcyxyLG4pfWlmKGkoImVuYWJsZWQiKSl7dmFyIG89aSgiYm91bmRzIik7aWYobyYmby5sZW5ndGg+PTIpe3ZhciBsLGMsdT0iIjtpZigyPT09by5sZW5ndGgpZm9yKGw9MDtsPDI7bCsrKWlmKGM9eShvW2xdKSl7dT1kO2JyZWFrfXZhciBmPWkoInBhdHRlcm4iLHUpO2lmKGY9PT1kKWZvcihsPTA7bDwyO2wrKykoYz15KG9bbF0pKSYmKGUuYm91bmRzW2xdPW9bbF09Yy0xKTtpZihmKWZvcihsPTA7bDwyO2wrKylzd2l0Y2goYz1vW2xdLGYpe2Nhc2UgZDppZighbihjKSlyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpO2lmKChjPStjKSE9PU1hdGguZmxvb3IoYyl8fGM8MHx8Yz49NylyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpO2UuYm91bmRzW2xdPW9bbF09YzticmVhaztjYXNlIGc6aWYoIW4oYykpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtpZigoYz0rYyk8MHx8Yz4yNClyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpO2UuYm91bmRzW2xdPW9bbF09Y31pZighMT09PXIuYXV0b3JhbmdlKXt2YXIgaD1yLnJhbmdlO2lmKGhbMF08aFsxXSl7aWYob1swXTxoWzBdJiZvWzFdPmhbMV0pcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKX1lbHNlIGlmKG9bMF0+aFswXSYmb1sxXTxoWzFdKXJldHVybiB2b2lkKGUuZW5hYmxlZD0hMSl9fWVsc2V7dmFyIHA9aSgidmFsdWVzIik7aWYoIXB8fCFwLmxlbmd0aClyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpO2koImR2YWx1ZSIpfX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4sZyl7dmFyIHYseT1uLmxldHRlcix4PW4uZm9udHx8e30sYj1uLnNwbG9tU3Rhc2h8fHt9LF89cigidmlzaWJsZSIsIW4udmlzaWJsZURmbHQpLHc9ZS5fdGVtcGxhdGV8fHt9LFQ9ZS50eXBlfHx3LnR5cGV8fCItIjsiZGF0ZSI9PT1UJiYoaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIsbi5jYWxlbmRhciksbi5ub1RpY2tsYWJlbG1vZGV8fCh2PXIoInRpY2tsYWJlbG1vZGUiKSkpO24ubm9UaWNrbGFiZWxwb3NpdGlvbiYmIm11bHRpY2F0ZWdvcnkiIT09VHx8YS5jb2VyY2UodCxlLHt0aWNrbGFiZWxwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoib3V0c2lkZSIsdmFsdWVzOiJwZXJpb2QiPT09dj9bIm91dHNpZGUiLCJpbnNpZGUiXToieCI9PT15P1sib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgbGVmdCIsImluc2lkZSBsZWZ0Iiwib3V0c2lkZSByaWdodCIsImluc2lkZSByaWdodCJdOlsib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgdG9wIiwiaW5zaWRlIHRvcCIsIm91dHNpZGUgYm90dG9tIiwiaW5zaWRlIGJvdHRvbSJdfX0sInRpY2tsYWJlbHBvc2l0aW9uIikscChlLGcpO3ZhciBrPSFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKTtrJiZuLnJldmVyc2VEZmx0JiYoaz0icmV2ZXJzZWQiKSwhcigiYXV0b3JhbmdlIixrKXx8ImxpbmVhciIhPT1UJiYiLSIhPT1UfHxyKCJyYW5nZW1vZGUiKSxyKCJyYW5nZSIpLGUuY2xlYW5SYW5nZSgpLGYodCxlLHIsbiksImNhdGVnb3J5Ij09PVR8fG4ubm9Ib3Zlcnx8cigiaG92ZXJmb3JtYXQiKTt2YXIgTT1yKCJjb2xvciIpLEE9TSE9PXMuY29sb3IuZGZsdD9NOnguY29sb3IsUz1iLmxhYmVsfHxnLl9kZmx0VGl0bGVbeV07aWYodSh0LGUscixULG4se3Bhc3M6MX0pLCFfKXJldHVybiBlO3IoInRpdGxlLnRleHQiLFMpLGEuY29lcmNlRm9udChyLCJ0aXRsZS5mb250Iix7ZmFtaWx5OnguZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqeC5zaXplKSxjb2xvcjpBfSksbCh0LGUscixUKSx1KHQsZSxyLFQsbix7cGFzczoyfSksYyh0LGUscixuKSxoKHQsZSxyLHtkZmx0Q29sb3I6TSxiZ0NvbG9yOm4uYmdDb2xvcixzaG93R3JpZDpuLnNob3dHcmlkLGF0dHJpYnV0ZXM6c30pLChlLnNob3dsaW5lfHxlLnRpY2tzKSYmcigibWlycm9yIiksbi5hdXRvbWFyZ2luJiZyKCJhdXRvbWFyZ2luIik7dmFyIEUsQz0ibXVsdGljYXRlZ29yeSI9PT1UO24ubm9UaWNrc29ufHwiY2F0ZWdvcnkiIT09VCYmIUN8fCFlLnRpY2tzJiYhZS5zaG93Z3JpZHx8KEMmJihFPSJib3VuZGFyaWVzIiksImJvdW5kYXJpZXMiPT09cigidGlja3NvbiIsRSkmJmRlbGV0ZSBlLnRpY2tsYWJlbHBvc2l0aW9uKTtDJiYocigic2hvd2RpdmlkZXJzIikmJihyKCJkaXZpZGVyY29sb3IiKSxyKCJkaXZpZGVyd2lkdGgiKSkpO2lmKCJkYXRlIj09PVQpaWYobyh0LGUse25hbWU6InJhbmdlYnJlYWtzIixpbmNsdXNpb25BdHRyOiJlbmFibGVkIixoYW5kbGVJdGVtRGVmYXVsdHM6bX0pLGUucmFuZ2VicmVha3MubGVuZ3RoKXtmb3IodmFyIEw9MDtMPGUucmFuZ2VicmVha3MubGVuZ3RoO0wrKylpZihlLnJhbmdlYnJlYWtzW0xdLnBhdHRlcm49PT1kKXtlLl9oYXNEYXlPZldlZWtCcmVha3M9ITA7YnJlYWt9aWYocChlLGcpLGcuX2hhcygic2NhdHRlcmdsIil8fGcuX2hhcygic3Bsb20iKSlmb3IodmFyIEk9MDtJPG4uZGF0YS5sZW5ndGg7SSsrKXt2YXIgUD1uLmRhdGFbSV07InNjYXR0ZXJnbCIhPT1QLnR5cGUmJiJzcGxvbSIhPT1QLnR5cGV8fChQLnZpc2libGU9ITEsYS53YXJuKFAudHlwZSsiIHRyYWNlcyBkbyBub3Qgd29yayBvbiBheGVzIHdpdGggcmFuZ2VicmVha3MuIFNldHRpbmcgdHJhY2UgIitQLmluZGV4KyIgdG8gYHZpc2libGU6IGZhbHNlYC4iKSl9fWVsc2UgZGVsZXRlIGUucmFuZ2VicmVha3M7cmV0dXJuIGV9O3ZhciB2PXtzdW46MSxtb246Mix0dWU6Myx3ZWQ6NCx0aHU6NSxmcmk6NixzYXQ6N307ZnVuY3Rpb24geSh0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHZbdC5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpXX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIzLCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo4MzIsIi4vY29uc3RhbnRzIjo4MzQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MiwiLi9saW5lX2dyaWRfZGVmYXVsdHMiOjg0NCwiLi9zZXRfY29udmVydCI6ODQ4LCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjg0OSwiLi90aWNrX21hcmtfZGVmYXVsdHMiOjg1MCwiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo4NTEsImZhc3QtaXNudW1lcmljIjoyNDF9XSw4MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gYSh0LGUpe2lmKGUmJmUubGVuZ3RoKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl1bdF0pcmV0dXJuITA7cmV0dXJuITF9ci5pZDJuYW1lPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5tYXRjaChpLkFYX0lEX1BBVFRFUk4pKXt2YXIgZT10LnNwbGl0KCIgIilbMF0uc3Vic3RyKDEpO3JldHVybiIxIj09PWUmJihlPSIiKSx0LmNoYXJBdCgwKSsiYXhpcyIrZX19LHIubmFtZTJpZD1mdW5jdGlvbih0KXtpZih0Lm1hdGNoKGkuQVhfTkFNRV9QQVRURVJOKSl7dmFyIGU9dC5zdWJzdHIoNSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLHQuY2hhckF0KDApK2V9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPS8oIGRvbWFpbikkLy50ZXN0KHQpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5tYXRjaChpLkFYX0lEX1BBVFRFUk4pJiYoIWV8fHQuY2hhckF0KDApPT09ZSkmJighbnx8cikpe3ZhciBhPXQuc3BsaXQoIiAiKVswXS5zdWJzdHIoMSkucmVwbGFjZSgvXjArLywiIik7cmV0dXJuIjEiPT09YSYmKGE9IiIpLHQuY2hhckF0KDApK2ErKG4mJnI/IiBkb21haW4iOiIiKX19LHIubGlzdD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5fZnVsbExheW91dDtpZighaSlyZXR1cm5bXTt2YXIgYSxvPXIubGlzdElkcyh0LGUpLHM9bmV3IEFycmF5KG8ubGVuZ3RoKTtmb3IoYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgbD1vW2FdO3NbYV09aVtsLmNoYXJBdCgwKSsiYXhpcyIrbC5zdWJzdHIoMSldfWlmKCFuKXt2YXIgYz1pLl9zdWJwbG90cy5nbDNkfHxbXTtmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1pW2NbYV1dO2U/cy5wdXNoKHVbZSsiYXhpcyJdKTpzLnB1c2godS54YXhpcyx1LnlheGlzLHUuemF4aXMpfX1yZXR1cm4gc30sci5saXN0SWRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtpZighcilyZXR1cm5bXTt2YXIgbj1yLl9zdWJwbG90cztyZXR1cm4gZT9uW2UrImF4aXMiXTpuLnhheGlzLmNvbmNhdChuLnlheGlzKX0sci5nZXRGcm9tSWQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQ7cmV0dXJuIGU9dm9pZCAwPT09ZXx8InN0cmluZyIhPXR5cGVvZiBlP2U6ZS5yZXBsYWNlKCIgZG9tYWluIiwiIiksIngiPT09bj9lPWUucmVwbGFjZSgveVswLTldKi8sIiIpOiJ5Ij09PW4mJihlPWUucmVwbGFjZSgveFswLTldKi8sIiIpKSxpW3IuaWQybmFtZShlKV19LHIuZ2V0RnJvbVRyYWNlPWZ1bmN0aW9uKHQsZSxpKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89bnVsbDtpZihuLnRyYWNlSXMoZSwiZ2wzZCIpKXt2YXIgcz1lLnNjZW5lOyJzY2VuZSI9PT1zLnN1YnN0cigwLDUpJiYobz1hW3NdW2krImF4aXMiXSl9ZWxzZSBvPXIuZ2V0RnJvbUlkKHQsZVtpKyJheGlzIl18fGkpO3JldHVybiBvfSxyLmlkU29ydD1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2hhckF0KDApLG49ZS5jaGFyQXQoMCk7cmV0dXJuIHIhPT1uP3I+bj8xOi0xOisodC5zdWJzdHIoMSl8fDEpLSsoZS5zdWJzdHIoMSl8fDEpfSxyLnJlZjJpZD1mdW5jdGlvbih0KXtyZXR1cm4hIS9eW3h5el0vLnRlc3QodCkmJnQuc3BsaXQoIiAiKVswXX0sci5pc0xpbmtlZD1mdW5jdGlvbih0LGUpe3JldHVybiBhKGUsdC5fYXhpc01hdGNoR3JvdXBzKXx8YShlLHQuX2F4aXNDb25zdHJhaW50R3JvdXBzKX19LHsiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi9jb25zdGFudHMiOjgzNH1dLDgzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYoImNhdGVnb3J5Ij09PWUudHlwZSl7dmFyIGksYT10LmNhdGVnb3J5YXJyYXksbz1BcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aD4wO28mJihpPSJhcnJheSIpO3ZhciBzLGw9cigiY2F0ZWdvcnlvcmRlciIsaSk7ImFycmF5Ij09PWwmJihzPXIoImNhdGVnb3J5YXJyYXkiKSksb3x8ImFycmF5IiE9PWx8fChsPWUuY2F0ZWdvcnlvcmRlcj0idHJhY2UiKSwidHJhY2UiPT09bD9lLl9pbml0aWFsQ2F0ZWdvcmllcz1bXToiYXJyYXkiPT09bD9lLl9pbml0aWFsQ2F0ZWdvcmllcz1zLnNsaWNlKCk6KHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1lLmRhdGFBdHRyfHx0Ll9pZC5jaGFyQXQoMCksbz17fTtpZihlLmF4RGF0YSlyPWUuYXhEYXRhO2Vsc2UgZm9yKHI9W10sbj0wO248ZS5kYXRhLmxlbmd0aDtuKyspe3ZhciBzPWUuZGF0YVtuXTtzW2ErImF4aXMiXT09PXQuX2lkJiZyLnB1c2gocyl9Zm9yKG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGw9cltuXVthXTtmb3IoaT0wO2k8bC5sZW5ndGg7aSsrKXt2YXIgYz1sW2ldO251bGwhPWMmJihvW2NdPTEpfX1yZXR1cm4gT2JqZWN0LmtleXMobyl9KGUsbikuc29ydCgpLCJjYXRlZ29yeSBhc2NlbmRpbmciPT09bD9lLl9pbml0aWFsQ2F0ZWdvcmllcz1zOiJjYXRlZ29yeSBkZXNjZW5kaW5nIj09PWwmJihlLl9pbml0aWFsQ2F0ZWdvcmllcz1zLnJldmVyc2UoKSkpfX19LHt9XSw4MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLG89YS5PTkVEQVkscz1hLk9ORVdFRUs7ci5kdGljaz1mdW5jdGlvbih0LGUpe3ZhciByPSJsb2ciPT09ZSxpPSJkYXRlIj09PWUsYT0iY2F0ZWdvcnkiPT09ZSxzPWk/bzoxO2lmKCF0KXJldHVybiBzO2lmKG4odCkpcmV0dXJuKHQ9TnVtYmVyKHQpKTw9MD9zOmE/TWF0aC5tYXgoMSxNYXRoLnJvdW5kKHQpKTppP01hdGgubWF4KC4xLHQpOnQ7aWYoInN0cmluZyIhPXR5cGVvZiB0fHwhaSYmIXIpcmV0dXJuIHM7dmFyIGw9dC5jaGFyQXQoMCksYz10LnN1YnN0cigxKTtyZXR1cm4oYz1uKGMpP051bWJlcihjKTowKTw9MHx8IShpJiYiTSI9PT1sJiZjPT09TWF0aC5yb3VuZChjKXx8ciYmIkwiPT09bHx8ciYmIkQiPT09bCYmKDE9PT1jfHwyPT09YykpP3M6dH0sci50aWNrMD1mdW5jdGlvbih0LGUscixhKXtyZXR1cm4iZGF0ZSI9PT1lP2kuY2xlYW5EYXRlKHQsaS5kYXRlVGljazAocixhJXM9PTA/MTowKSk6IkQxIiE9PWEmJiJEMiIhPT1hP24odCk/TnVtYmVyKHQpOjA6dm9pZCAwfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sODM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9yZWdleCIpLmNvdW50ZXI7ZS5leHBvcnRzPXtpZFJlZ2V4Ont4Om4oIngiLCIoIGRvbWFpbik/IikseTpuKCJ5IiwiKCBkb21haW4pPyIpfSxhdHRyUmVnZXg6bigiW3h5XWF4aXMiKSx4QXhpc01hdGNoOm4oInhheGlzIikseUF4aXNNYXRjaDpuKCJ5YXhpcyIpLEFYX0lEX1BBVFRFUk46L15beHl6XVswLTldKiggZG9tYWluKT8kLyxBWF9OQU1FX1BBVFRFUk46L15beHl6XWF4aXNbMC05XSokLyxTVUJQTE9UX1BBVFRFUk46L154KFswLTldKil5KFswLTldKikkLyxIT1VSX1BBVFRFUk46ImhvdXIiLFdFRUtEQVlfUEFUVEVSTjoiZGF5IG9mIHdlZWsiLE1JTkRSQUc6OCxNSU5TRUxFQ1Q6MTIsTUlOWk9PTToyMCxEUkFHR0VSU0laRToyMCxCRU5EUFg6MS41LFJFRFJBV0RFTEFZOjUwLFNFTEVDVERFTEFZOjEwMCxTRUxFQ1RJRDoiLXNlbGVjdCIsREZMVFJBTkdFWDpbLTEsNl0sREZMVFJBTkdFWTpbLTEsNF0sdHJhY2VMYXllckNsYXNzZXM6WyJpbWFnZWxheWVyIiwiaGVhdG1hcGxheWVyIiwiY29udG91cmNhcnBldGxheWVyIiwiY29udG91cmxheWVyIiwiZnVubmVsbGF5ZXIiLCJ3YXRlcmZhbGxsYXllciIsImJhcmxheWVyIiwiY2FycGV0bGF5ZXIiLCJ2aW9saW5sYXllciIsImJveGxheWVyIiwib2hsY2xheWVyIiwic2NhdHRlcmNhcnBldGxheWVyIiwic2NhdHRlcmxheWVyIl0sY2xpcE9uQXhpc0ZhbHNlUXVlcnk6WyIuc2NhdHRlcmxheWVyIiwiLmJhcmxheWVyIiwiLmZ1bm5lbGxheWVyIiwiLndhdGVyZmFsbGxheWVyIl0sbGF5ZXJWYWx1ZTJsYXllckNsYXNzOnsiYWJvdmUgdHJhY2VzIjoiYWJvdmUiLCJiZWxvdyB0cmFjZXMiOiJiZWxvdyJ9fX0seyIuLi8uLi9saWIvcmVnZXgiOjc5NX1dLDgzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXV0b3JhbmdlIiksYT10KCIuL2F4aXNfaWRzIikuaWQybmFtZSxvPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4vc2NhbGVfem9vbSIpLGw9dCgiLi9zZXRfY29udmVydCIpLGM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkFMTU9TVF9FUVVBTCx1PXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX0JMO2Z1bmN0aW9uIGYodCxlLHIpe3ZhciBpPXIuYXhJZHMscz1yLmxheW91dE91dCxsPXIuaGFzSW1hZ2UsYz1zLl9heGlzQ29uc3RyYWludEdyb3Vwcyx1PXMuX2F4aXNNYXRjaEdyb3VwcyxmPWUuX2lkLGc9Zi5jaGFyQXQoMCksbT0oKHMuX3NwbG9tQXhlc3x8e30pW2ddfHx7fSlbZl18fHt9LHY9ZS5faWQseT0ieCI9PT12LmNoYXJBdCgwKTtmdW5jdGlvbiB4KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9ZS5fbWF0Y2hHcm91cD1udWxsLGUuX2NvbnN0cmFpbnRHcm91cD1udWxsLHgoImNvbnN0cmFpbiIsbD8iZG9tYWluIjoicmFuZ2UiKSxuLmNvZXJjZSh0LGUse2NvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnk/WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXTpbImJvdHRvbSIsIm1pZGRsZSIsInRvcCJdLGRmbHQ6eT8iY2VudGVyIjoibWlkZGxlIn19LCJjb25zdHJhaW50b3dhcmQiKTt2YXIgYixfLHc9ZS50eXBlLFQ9W107Zm9yKGI9MDtiPGkubGVuZ3RoO2IrKyl7aWYoKF89aVtiXSkhPT12KXNbYShfKV0udHlwZT09PXcmJlQucHVzaChfKX12YXIgaz1wKGMsdik7aWYoayl7dmFyIE09W107Zm9yKGI9MDtiPFQubGVuZ3RoO2IrKylrW189VFtiXV18fE0ucHVzaChfKTtUPU19dmFyIEEsUyxFPVQubGVuZ3RoO0UmJih0Lm1hdGNoZXN8fG0ubWF0Y2hlcykmJihBPW4uY29lcmNlKHQsZSx7bWF0Y2hlczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlQsZGZsdDotMSE9PVQuaW5kZXhPZihtLm1hdGNoZXMpP20ubWF0Y2hlczp2b2lkIDB9fSwibWF0Y2hlcyIpKTt2YXIgQz1sJiYheT9lLmFuY2hvcjp2b2lkIDA7aWYoRSYmIUEmJih0LnNjYWxlYW5jaG9yfHxDKSYmKFM9bi5jb2VyY2UodCxlLHtzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlR9fSwic2NhbGVhbmNob3IiLEMpKSxBKXtlLl9tYXRjaEdyb3VwPWQodSx2LEEsMSk7dmFyIEw9c1thKEEpXSxJPWgocyxlKS9oKHMsTCk7eSE9PSgieCI9PT1BLmNoYXJBdCgwKSkmJihJPSh5PyJ4IjoieSIpK0kpLGQoYyx2LEEsSSl9ZWxzZSB0Lm1hdGNoZXMmJi0xIT09aS5pbmRleE9mKHQubWF0Y2hlcykmJm4ud2FybigiaWdub3JlZCAiK2UuX25hbWUrJy5tYXRjaGVzOiAiJyt0Lm1hdGNoZXMrJyIgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcCcpO2lmKFMpe3ZhciBQPXgoInNjYWxlcmF0aW8iKTtQfHwoUD1lLnNjYWxlcmF0aW89MSksZChjLHYsUyxQKX1lbHNlIHQuc2NhbGVhbmNob3ImJi0xIT09aS5pbmRleE9mKHQuc2NhbGVhbmNob3IpJiZuLndhcm4oImlnbm9yZWQgIitlLl9uYW1lKycuc2NhbGVhbmNob3I6ICInK3Quc2NhbGVhbmNob3IrJyIgdG8gYXZvaWQgZWl0aGVyIGFuIGluZmluaXRlIGxvb3AgYW5kIHBvc3NpYmx5IGluY29uc2lzdGVudCBzY2FsZXJhdGlvcywgb3IgYmVjYXVzZSB0aGlzIGF4aXMgZGVjbGFyZXMgYSAqbWF0Y2hlcyogY29uc3RyYWludC4nKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9ZS5kb21haW47cmV0dXJuIHJ8fChyPXRbYShlLm92ZXJsYXlpbmcpXS5kb21haW4pLHJbMV0tclswXX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXVtlXSlyZXR1cm4gdFtyXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBkKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGwsYz1wKHQsZSk7bnVsbD09PWM/KChjPXt9KVtlXT0xLGw9dC5sZW5ndGgsdC5wdXNoKGMpKTpsPXQuaW5kZXhPZihjKTt2YXIgdT1PYmplY3Qua2V5cyhjKTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWlmKG89dFtpXSxpIT09bCYmb1tyXSl7dmFyIGY9b1tyXTtmb3IoYT0wO2E8dS5sZW5ndGg7YSsrKW9bcz11W2FdXT1nKGYsZyhuLGNbc10pKTtyZXR1cm4gdm9pZCB0LnNwbGljZShsLDEpfWlmKDEhPT1uKWZvcihhPTA7YTx1Lmxlbmd0aDthKyspe3ZhciBoPXVbYV07Y1toXT1nKG4sY1toXSl9Y1tyXT0xfWZ1bmN0aW9uIGcodCxlKXt2YXIgcixuLGk9IiIsYT0iIjsic3RyaW5nIj09dHlwZW9mIHQmJihyPShpPXQubWF0Y2goL15beHldKi8pWzBdKS5sZW5ndGgsdD0rdC5zdWJzdHIocikpLCJzdHJpbmciPT10eXBlb2YgZSYmKG49KGE9ZS5tYXRjaCgvXlt4eV0qLylbMF0pLmxlbmd0aCxlPStlLnN1YnN0cihuKSk7dmFyIG89dCplO3JldHVybiByfHxuP3ImJm4mJmkuY2hhckF0KDApIT09YS5jaGFyQXQoMCk/cj09PW4/bzoocj5uP2kuc3Vic3RyKG4pOmEuc3Vic3RyKHIpKStvOmkrYSt0KmU6b31mdW5jdGlvbiBtKHQsZSl7Zm9yKHZhciByPWUuX3NpemUsbj1yLmgvci53LGk9e30sYT1PYmplY3Qua2V5cyh0KSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sbD10W3NdO2lmKCJzdHJpbmciPT10eXBlb2YgbCl7dmFyIGM9bC5tYXRjaCgvXlt4eV0qLylbMF0sdT1jLmxlbmd0aDtsPStsLnN1YnN0cih1KTtmb3IodmFyIGY9InkiPT09Yy5jaGFyQXQoMCk/bjoxL24saD0wO2g8dTtoKyspbCo9Zn1pW3NdPWx9cmV0dXJuIGl9ZnVuY3Rpb24gdih0LGUpe3ZhciByPXQuX2lucHV0RG9tYWluLG49dVt0LmNvbnN0cmFpbnRvd2FyZF0saT1yWzBdKyhyWzFdLXJbMF0pKm47dC5kb21haW49dC5faW5wdXQuZG9tYWluPVtpKyhyWzBdLWkpL2UsaSsoclsxXS1pKS9lXSx0LnNldFNjYWxlKCl9ci5oYW5kbGVEZWZhdWx0cz1mdW5jdGlvbih0LGUscil7dmFyIGksbyxzLGMsdSxoLHAsZCxnPXIuYXhJZHMsbT1yLmF4SGFzSW1hZ2Usdj1lLl9heGlzQ29uc3RyYWludEdyb3Vwcz1bXSx5PWUuX2F4aXNNYXRjaEdyb3Vwcz1bXTtmb3IoaT0wO2k8Zy5sZW5ndGg7aSsrKWYodT10W2M9YShnW2ldKV0saD1lW2NdLHtheElkczpnLGxheW91dE91dDplLGhhc0ltYWdlOm1bY119KTtmdW5jdGlvbiB4KHQscil7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylmb3IocyBpbiBvPXRbaV0pZVthKHMpXVtyXT1vfWZvcih4KHksIl9tYXRjaEdyb3VwIiksaT0wO2k8di5sZW5ndGg7aSsrKWZvcihzIGluIG89dltpXSlpZigoaD1lW2EocyldKS5maXhlZHJhbmdlKXtmb3IodmFyIGIgaW4gbyl7dmFyIF89YShiKTshMT09PSh0W19dfHx7fSkuZml4ZWRyYW5nZSYmbi53YXJuKCJmaXhlZHJhbmdlIHdhcyBzcGVjaWZpZWQgYXMgZmFsc2UgZm9yIGF4aXMgIitfKyIgYnV0IHdhcyBvdmVycmlkZGVuIGJlY2F1c2UgYW5vdGhlciBheGlzIGluIGl0cyBjb25zdHJhaW50IGdyb3VwIGhhcyBmaXhlZHJhbmdlIHRydWUiKSxlW19dLmZpeGVkcmFuZ2U9ITB9YnJlYWt9Zm9yKGk9MDtpPHYubGVuZ3RoOyl7Zm9yKHMgaW4gbz12W2ldKXsoaD1lW2EocyldKS5fbWF0Y2hHcm91cCYmT2JqZWN0LmtleXMoaC5fbWF0Y2hHcm91cCkubGVuZ3RoPT09T2JqZWN0LmtleXMobykubGVuZ3RoJiYodi5zcGxpY2UoaSwxKSxpLS0pO2JyZWFrfWkrK314KHYsIl9jb25zdHJhaW50R3JvdXAiKTt2YXIgdz1bImNvbnN0cmFpbiIsInJhbmdlIiwiYXV0b3JhbmdlIiwicmFuZ2Vtb2RlIiwicmFuZ2VicmVha3MiLCJjYXRlZ29yeW9yZGVyIiwiY2F0ZWdvcnlhcnJheSJdLFQ9ITEsaz0hMTtmdW5jdGlvbiBNKCl7ZD1oW3BdLCJyYW5nZWJyZWFrcyI9PT1wJiYoaz1oLl9oYXNEYXlPZldlZWtCcmVha3MpfWZvcihpPTA7aTx5Lmxlbmd0aDtpKyspe289eVtpXTtmb3IodmFyIEE9MDtBPHcubGVuZ3RoO0ErKyl7dmFyIFM7Zm9yKHMgaW4gcD13W0FdLGQ9bnVsbCxvKWlmKHU9dFtjPWEocyldLGg9ZVtjXSxwIGluIGgpe2lmKCFoLm1hdGNoZXMmJihTPWgscCBpbiB1KSl7TSgpO2JyZWFrfW51bGw9PT1kJiZwIGluIHUmJk0oKX1pZigicmFuZ2UiPT09cCYmZCYmKFQ9ITApLCJhdXRvcmFuZ2UiPT09cCYmbnVsbD09PWQmJlQmJihkPSExKSxudWxsPT09ZCYmcCBpbiBTJiYoZD1TW3BdKSxudWxsIT09ZClmb3IocyBpbiBvKShoPWVbYShzKV0pW3BdPSJyYW5nZSI9PT1wP2Quc2xpY2UoKTpkLCJyYW5nZWJyZWFrcyI9PT1wJiYoaC5faGFzRGF5T2ZXZWVrQnJlYWtzPWssbChoLGUpKX19fSxyLmVuZm9yY2U9ZnVuY3Rpb24odCl7dmFyIGUscixuLG8sbCx1LGYsaCxwPXQuX2Z1bGxMYXlvdXQsZD1wLl9heGlzQ29uc3RyYWludEdyb3Vwc3x8W107Zm9yKGU9MDtlPGQubGVuZ3RoO2UrKyl7bj1tKGRbZV0scCk7dmFyIGc9T2JqZWN0LmtleXMobikseT0xLzAseD0wLGI9MS8wLF89e30sdz17fSxUPSExO2ZvcihyPTA7cjxnLmxlbmd0aDtyKyspd1tvPWdbcl1dPWw9cFthKG8pXSxsLl9pbnB1dERvbWFpbj9sLmRvbWFpbj1sLl9pbnB1dERvbWFpbi5zbGljZSgpOmwuX2lucHV0RG9tYWluPWwuZG9tYWluLnNsaWNlKCksbC5faW5wdXRSYW5nZXx8KGwuX2lucHV0UmFuZ2U9bC5yYW5nZS5zbGljZSgpKSxsLnNldFNjYWxlKCksX1tvXT11PU1hdGguYWJzKGwuX20pL25bb10seT1NYXRoLm1pbih5LHUpLCJkb21haW4iIT09bC5jb25zdHJhaW4mJmwuX2NvbnN0cmFpbnRTaHJpbmthYmxlfHwoYj1NYXRoLm1pbihiLHUpKSxkZWxldGUgbC5fY29uc3RyYWludFNocmlua2FibGUseD1NYXRoLm1heCh4LHUpLCJkb21haW4iPT09bC5jb25zdHJhaW4mJihUPSEwKTtpZighKHk+Yyp4KXx8VClmb3Iocj0wO3I8Zy5sZW5ndGg7cisrKWlmKHU9X1tvPWdbcl1dLGY9KGw9d1tvXSkuY29uc3RyYWluLHUhPT1ifHwiZG9tYWluIj09PWYpaWYoaD11L2IsInJhbmdlIj09PWYpcyhsLGgpO2Vsc2V7dmFyIGs9bC5faW5wdXREb21haW4sTT0obC5kb21haW5bMV0tbC5kb21haW5bMF0pLyhrWzFdLWtbMF0pLEE9KGwucjJsKGwucmFuZ2VbMV0pLWwucjJsKGwucmFuZ2VbMF0pKS8obC5yMmwobC5faW5wdXRSYW5nZVsxXSktbC5yMmwobC5faW5wdXRSYW5nZVswXSkpO2lmKChoLz1NKSpBPDEpe2wuZG9tYWluPWwuX2lucHV0LmRvbWFpbj1rLnNsaWNlKCkscyhsLGgpO2NvbnRpbnVlfWlmKEE8MSYmKGwucmFuZ2U9bC5faW5wdXQucmFuZ2U9bC5faW5wdXRSYW5nZS5zbGljZSgpLGgqPUEpLGwuYXV0b3JhbmdlKXt2YXIgUz1sLnIybChsLnJhbmdlWzBdKSxFPWwucjJsKGwucmFuZ2VbMV0pLEM9KFMrRSkvMixMPUMsST1DLFA9TWF0aC5hYnMoRS1DKSx6PUMtUCpoKjEuMDAwMSxPPUMrUCpoKjEuMDAwMSxEPWkubWFrZVBhZEZuKHAsbCwwKSxSPWkubWFrZVBhZEZuKHAsbCwxKTt2KGwsaCk7dmFyIEYsQixOPU1hdGguYWJzKGwuX20pLGo9aS5jb25jYXRFeHRyZW1lcyh0LGwpLFU9ai5taW4sVj1qLm1heDtmb3IoQj0wO0I8VS5sZW5ndGg7QisrKShGPVVbQl0udmFsLUQoVVtCXSkvTik+eiYmRjxMJiYoTD1GKTtmb3IoQj0wO0I8Vi5sZW5ndGg7QisrKShGPVZbQl0udmFsK1IoVltCXSkvTik8TyYmRj5JJiYoST1GKTtoLz0oSS1MKS8oMipQKSxMPWwubDJyKEwpLEk9bC5sMnIoSSksbC5yYW5nZT1sLl9pbnB1dC5yYW5nZT1TPEU/W0wsSV06W0ksTF19dihsLGgpfX19LHIuZ2V0QXhpc0dyb3VwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2F4aXNNYXRjaEdyb3VwcyxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKHJbbl1bZV0pcmV0dXJuImciK259cmV0dXJuIGV9LHIuY2xlYW49ZnVuY3Rpb24odCxlKXtpZihlLl9pbnB1dERvbWFpbil7Zm9yKHZhciByPSExLG49ZS5faWQsaT10Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxhPTA7YTxpLmxlbmd0aDthKyspaWYoaVthXVtuXSl7cj0hMDticmVha31yJiYiZG9tYWluIj09PWUuY29uc3RyYWlufHwoZS5faW5wdXQuZG9tYWluPWUuZG9tYWluPWUuX2lucHV0RG9tYWluLGRlbGV0ZSBlLl9pbnB1dERvbWFpbil9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDUsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vbGliIjo3NzgsIi4vYXV0b3JhbmdlIjo4MjcsIi4vYXhpc19pZHMiOjgzMSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyLCIuL3NjYWxlX3pvb20iOjg0NiwiLi9zZXRfY29udmVydCI6ODQ4fV0sODM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXMuc3RyVHJhbnNsYXRlLGM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxwPXQoIi4vYXhlcyIpLGQ9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLG09dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIiksdj1tLnNlbGVjdGluZ09yRHJhd2luZyx5PW0uZnJlZU1vZGUseD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9UTCxiPXQoIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLF89dCgiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiKS5yZWRyYXdSZWdsVHJhY2VzLHc9dCgiLi4vcGxvdHMiKSxUPXQoIi4vYXhpc19pZHMiKS5nZXRGcm9tSWQsaz10KCIuL3NlbGVjdCIpLnByZXBTZWxlY3QsTT10KCIuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LEE9dCgiLi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLFM9dCgiLi9zY2FsZV96b29tIiksRT10KCIuL2NvbnN0YW50cyIpLEM9RS5NSU5EUkFHLEw9RS5NSU5aT09NLEk9ITA7ZnVuY3Rpb24gUCh0LGUscixuKXt2YXIgaT1zLmVuc3VyZVNpbmdsZSh0LmRyYWdsYXllcixlLHIsKGZ1bmN0aW9uKGUpe2UuY2xhc3NlZCgiZHJhZyIsITApLnN0eWxlKHtmaWxsOiJ0cmFuc3BhcmVudCIsInN0cm9rZS13aWR0aCI6MH0pLmF0dHIoImRhdGEtc3VicGxvdCIsdC5pZCl9KSk7cmV0dXJuIGkuY2FsbChkLG4pLGkubm9kZSgpfWZ1bmN0aW9uIHoodCxlLHIsaSxhLG8scyl7dmFyIGw9UCh0LCJyZWN0IixlLHIpO3JldHVybiBuLnNlbGVjdChsKS5jYWxsKGYuc2V0UmVjdCxpLGEsbyxzKSxsfWZ1bmN0aW9uIE8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiBlO3JldHVybiIifWZ1bmN0aW9uIEQodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtpZighby5maXhlZHJhbmdlKWlmKG8ucmFuZ2VicmVha3Mpe3ZhciBzPSJ5Ij09PW8uX2lkLmNoYXJBdCgwKSxsPXM/MS1lOmUsYz1zPzEtcjpyO25bby5fbmFtZSsiLnJhbmdlWzBdIl09by5sMnIoby5wMmwobCpvLl9sZW5ndGgpKSxuW28uX25hbWUrIi5yYW5nZVsxXSJdPW8ubDJyKG8ucDJsKGMqby5fbGVuZ3RoKSl9ZWxzZXt2YXIgdT1vLl9ybFswXSxmPW8uX3JsWzFdLXU7bltvLl9uYW1lKyIucmFuZ2VbMF0iXT1vLmwycih1K2YqZSksbltvLl9uYW1lKyIucmFuZ2VbMV0iXT1vLmwycih1K2Yqcil9fWlmKGkmJmkubGVuZ3RoKXt2YXIgaD0oZSsoMS1yKSkvMjtEKGksaCwxLWgsbixbXSl9fWZ1bmN0aW9uIFIodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZighbi5maXhlZHJhbmdlKWlmKG4ucmFuZ2VicmVha3Mpe3ZhciBpPW4uX2xlbmd0aCxhPShuLnAybCgwK2UpLW4ucDJsKDApKyhuLnAybChpK2UpLW4ucDJsKGkpKSkvMjtuLnJhbmdlPVtuLmwycihuLl9ybFswXS1hKSxuLmwycihuLl9ybFsxXS1hKV19ZWxzZSBuLnJhbmdlPVtuLmwycihuLl9ybFswXS1lL24uX20pLG4ubDJyKG4uX3JsWzFdLWUvbi5fbSldfX1mdW5jdGlvbiBGKHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gQih0LGUscixuLGkpe3JldHVybiB0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLnN0eWxlKHtmaWxsOmU+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigidHJhbnNmb3JtIixsKHIsbikpLmF0dHIoImQiLGkrIloiKX1mdW5jdGlvbiBOKHQsZSxyKXtyZXR1cm4gdC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOnUuYmFja2dyb3VuZCxzdHJva2U6dS5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoInRyYW5zZm9ybSIsbChlLHIpKS5hdHRyKCJkIiwiTTAsMFoiKX1mdW5jdGlvbiBqKHQsZSxyLG4saSxhKXt0LmF0dHIoImQiLG4rIk0iK3IubCsiLCIrci50KyJ2IityLmgrImgiK3Iudysidi0iK3IuaCsiaC0iK3IudysiWiIpLFUodCxlLGksYSl9ZnVuY3Rpb24gVSh0LGUscixuKXtyfHwodC50cmFuc2l0aW9uKCkuc3R5bGUoImZpbGwiLG4+LjI/InJnYmEoMCwwLDAsMC40KSI6InJnYmEoMjU1LDI1NSwyNTUsMC4zKSIpLmR1cmF0aW9uKDIwMCksZS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLmR1cmF0aW9uKDIwMCkpfWZ1bmN0aW9uIFYodCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnMiKS5yZW1vdmUoKX1mdW5jdGlvbiBxKHQpe0kmJnQuZGF0YSYmdC5fY29udGV4dC5zaG93VGlwcyYmKHMubm90aWZpZXIocy5fKHQsIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0IiksImxvbmciKSxJPSExKX1mdW5jdGlvbiBIKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5taW4odC5iLXQudCx0LnItdC5sLEwpLzIpO3JldHVybiJNIisodC5sLTMuNSkrIiwiKyh0LnQtLjUrZSkrImgzdiIrLWUrImgiK2UrInYtM2gtIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQudC0uNStlKSsiaC0zdiIrLWUrImgiKy1lKyJ2LTNoIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQuYisuNS1lKSsiaC0zdiIrZSsiaCIrLWUrInYzaCIrKGUrMykrIlpNIisodC5sLTMuNSkrIiwiKyh0LmIrLjUtZSkrImgzdiIrZSsiaCIrZSsidjNoLSIrKGUrMykrIloifWZ1bmN0aW9uIEcodCxlLHIsbixpKXtmb3IodmFyIGEsbyxsLGMsdT0hMSxmPXt9LGg9e30scD0oaXx8e30pLnhhSGFzaCxkPShpfHx7fSkueWFIYXNoLGc9MDtnPGUubGVuZ3RoO2crKyl7dmFyIG09ZVtnXTtmb3IoYSBpbiByKWlmKG1bYV0pe2ZvcihsIGluIG0paSYmKHBbbF18fGRbbF0pfHwoIngiPT09bC5jaGFyQXQoMCk/cjpuKVtsXXx8KGZbbF09YSk7Zm9yKG8gaW4gbilpJiYocFtvXXx8ZFtvXSl8fCFtW29dfHwodT0hMCl9Zm9yKG8gaW4gbilpZihtW29dKWZvcihjIGluIG0paSYmKHBbY118fGRbY10pfHwoIngiPT09Yy5jaGFyQXQoMCk/cjpuKVtjXXx8KGhbY109byl9dSYmKHMuZXh0ZW5kRmxhdChmLGgpLGg9e30pO3ZhciB2PXt9LHk9W107Zm9yKGwgaW4gZil7dmFyIHg9VCh0LGwpO3kucHVzaCh4KSx2W3guX2lkXT14fXZhciBiPXt9LF89W107Zm9yKGMgaW4gaCl7dmFyIHc9VCh0LGMpO18ucHVzaCh3KSxiW3cuX2lkXT13fXJldHVybnt4YUhhc2g6dix5YUhhc2g6Yix4YXhlczp5LHlheGVzOl8seExpbmtzOmYseUxpbmtzOmgsaXNTdWJwbG90Q29uc3RyYWluZWQ6dX19ZnVuY3Rpb24gWSh0LGUpe2lmKGEpe3ZhciByPXZvaWQgMCE9PXQub253aGVlbD8id2hlZWwiOiJtb3VzZXdoZWVsIjt0Ll9vbndoZWVsJiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIocix0Ll9vbndoZWVsKSx0Ll9vbndoZWVsPWUsdC5hZGRFdmVudExpc3RlbmVyKHIsZSx7cGFzc2l2ZTohMX0pfWVsc2Ugdm9pZCAwIT09dC5vbndoZWVsP3Qub253aGVlbD1lOnZvaWQgMCE9PXQub25tb3VzZXdoZWVsP3Qub25tb3VzZXdoZWVsPWU6dC5pc0FkZGVkV2hlZWxFdmVudHx8KHQuaXNBZGRlZFdoZWVsRXZlbnQ9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsZSx7cGFzc2l2ZTohMX0pKX1mdW5jdGlvbiBXKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX1lLmV4cG9ydHM9e21ha2VEcmFnQm94OmZ1bmN0aW9uKHQsZSxyLGEsbCx1LGQsbSl7dmFyIEksUCxVLFgsWixKLEssUSwkLHR0LGV0LHJ0LG50LGl0LGF0LG90LHN0LGx0LGN0LHV0LGZ0LGh0LHB0LGR0PXQuX2Z1bGxMYXlvdXQuX3pvb21sYXllcixndD1kK209PT0ibnNldyIsbXQ9MT09PShkK20pLmxlbmd0aDtmdW5jdGlvbiB2dCgpe2lmKEk9ZS54YXhpcyxQPWUueWF4aXMsJD1JLl9sZW5ndGgsdHQ9UC5fbGVuZ3RoLEs9SS5fb2Zmc2V0LFE9UC5fb2Zmc2V0LChVPXt9KVtJLl9pZF09SSwoWD17fSlbUC5faWRdPVAsZCYmbSlmb3IodmFyIHI9ZS5vdmVybGF5cyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0ueGF4aXM7VVtpLl9pZF09aTt2YXIgYT1yW25dLnlheGlzO1hbYS5faWRdPWF9Wj1XKFUpLEo9VyhYKSxudD1PKFosbSksaXQ9TyhKLGQpLGF0PSFpdCYmIW50LHJ0PUcodCx0Ll9mdWxsTGF5b3V0Ll9heGlzTWF0Y2hHcm91cHMsVSxYKTt2YXIgbz0oZXQ9Ryh0LHQuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLFUsWCxydCkpLmlzU3VicGxvdENvbnN0cmFpbmVkfHxydC5pc1N1YnBsb3RDb25zdHJhaW5lZDtvdD1tfHxvLHN0PWR8fG87dmFyIHM9dC5fZnVsbExheW91dDtsdD1zLl9oYXMoInNjYXR0ZXJnbCIpLGN0PXMuX2hhcygic3Bsb20iKSx1dD1zLl9oYXMoInN2ZyIpfXZ0KCk7dmFyIHl0PWZ1bmN0aW9uKHQsZSxyKXtpZighdClyZXR1cm4icG9pbnRlciI7aWYoIm5zZXciPT09dClyZXR1cm4gcj8iIjoicGFuIj09PWU/Im1vdmUiOiJjcm9zc2hhaXIiO3JldHVybiB0LnRvTG93ZXJDYXNlKCkrIi1yZXNpemUifShpdCtudCx0Ll9mdWxsTGF5b3V0LmRyYWdtb2RlLGd0KSx4dD16KGUsZCttKyJkcmFnIix5dCxyLGEsbCx1KTtpZihhdCYmIWd0KXJldHVybiB4dC5vbm1vdXNlZG93bj1udWxsLHh0LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHh0O3ZhciBidCxfdCx3dCxUdCxrdCxNdCxBdCxTdCxFdCxDdCxMdD17ZWxlbWVudDp4dCxnZDp0LHBsb3RpbmZvOmV9O2Z1bmN0aW9uIEl0KCl7THQucGxvdGluZm8uc2VsZWN0aW9uPSExLE0odCl9ZnVuY3Rpb24gUHQodCxyKXt2YXIgaT1MdC5nZDtpZihpLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wKWkuX2Z1bGxMYXlvdXQuX2RlYWN0aXZhdGVTaGFwZShpKTtlbHNle3ZhciBhPWkuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO2lmKFYoaSksMiE9PXR8fG10fHxxdCgpLGd0KWEuaW5kZXhPZigic2VsZWN0Iik+LTEmJkEocixpLFosSixlLmlkLEx0KSxhLmluZGV4T2YoImV2ZW50Iik+LTEmJmguY2xpY2soaSxyLGUuaWQpO2Vsc2UgaWYoMT09PXQmJm10KXt2YXIgcz1kP1A6SSxsPSJzIj09PWR8fCJ3Ij09PW0/MDoxLHU9cy5fbmFtZSsiLnJhbmdlWyIrbCsiXSIsZj1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5yYW5nZVtlXSxhPU1hdGguYWJzKGktdC5yYW5nZVsxLWVdKTtyZXR1cm4iZGF0ZSI9PT10LnR5cGU/aToibG9nIj09PXQudHlwZT8ocj1NYXRoLmNlaWwoTWF0aC5tYXgoMCwtTWF0aC5sb2coYSkvTWF0aC5MTjEwKSkrMyxuLmZvcm1hdCgiLiIrcisiZyIpKE1hdGgucG93KDEwLGkpKSk6KHI9TWF0aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyhpKSkvTWF0aC5MTjEwKS1NYXRoLmZsb29yKE1hdGgubG9nKGEpL01hdGguTE4xMCkrNCxuLmZvcm1hdCgiLiIrU3RyaW5nKHIpKyJnIikoaSkpfShzLGwpLHA9ImxlZnQiLGc9Im1pZGRsZSI7aWYocy5maXhlZHJhbmdlKXJldHVybjtkPyhnPSJuIj09PWQ/InRvcCI6ImJvdHRvbSIsInJpZ2h0Ij09PXMuc2lkZSYmKHA9InJpZ2h0IikpOiJlIj09PW0mJihwPSJyaWdodCIpLGkuX2NvbnRleHQuc2hvd0F4aXNSYW5nZUVudHJ5Qm94ZXMmJm4uc2VsZWN0KHh0KS5jYWxsKGMubWFrZUVkaXRhYmxlLHtnZDppLGltbWVkaWF0ZTohMCxiYWNrZ3JvdW5kOmkuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvcix0ZXh0OlN0cmluZyhmKSxmaWxsOnMudGlja2ZvbnQ/cy50aWNrZm9udC5jb2xvcjoiIzQ0NCIsaG9yaXpvbnRhbEFsaWduOnAsdmVydGljYWxBbGlnbjpnfSkub24oImVkaXQiLChmdW5jdGlvbih0KXt2YXIgZT1zLmQycih0KTt2b2lkIDAhPT1lJiZvLmNhbGwoIl9ndWlSZWxheW91dCIsaSx1LGUpfSkpfX19ZnVuY3Rpb24genQoZSxyKXtpZih0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXJldHVybiExO3ZhciBuPU1hdGgubWF4KDAsTWF0aC5taW4oJCxodCplK2J0KSksaT1NYXRoLm1heCgwLE1hdGgubWluKHR0LHB0KnIrX3QpKSxhPU1hdGguYWJzKG4tYnQpLG89TWF0aC5hYnMoaS1fdCk7ZnVuY3Rpb24gcygpe0F0PSIiLHd0LnI9d3QubCx3dC50PXd0LmIsRXQuYXR0cigiZCIsIk0wLDBaIil9aWYod3QubD1NYXRoLm1pbihidCxuKSx3dC5yPU1hdGgubWF4KGJ0LG4pLHd0LnQ9TWF0aC5taW4oX3QsaSksd3QuYj1NYXRoLm1heChfdCxpKSxldC5pc1N1YnBsb3RDb25zdHJhaW5lZClhPkx8fG8+TD8oQXQ9Inh5IixhLyQ+by90dD8obz1hKnR0LyQsX3Q+aT93dC50PV90LW86d3QuYj1fdCtvKTooYT1vKiQvdHQsYnQ+bj93dC5sPWJ0LWE6d3Qucj1idCthKSxFdC5hdHRyKCJkIixIKHd0KSkpOnMoKTtlbHNlIGlmKHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkKWlmKGE+THx8bz5MKXtBdD0ieHkiO3ZhciBsPU1hdGgubWluKHd0LmwvJCwodHQtd3QuYikvdHQpLGM9TWF0aC5tYXgod3Quci8kLCh0dC13dC50KS90dCk7d3QubD1sKiQsd3Qucj1jKiQsd3QuYj0oMS1sKSp0dCx3dC50PSgxLWMpKnR0LEV0LmF0dHIoImQiLEgod3QpKX1lbHNlIHMoKTtlbHNlIWl0fHxvPE1hdGgubWluKE1hdGgubWF4KC42KmEsQyksTCk/YTxDfHwhbnQ/cygpOih3dC50PTAsd3QuYj10dCxBdD0ieCIsRXQuYXR0cigiZCIsZnVuY3Rpb24odCxlKXtyZXR1cm4iTSIrKHQubC0uNSkrIiwiKyhlLUwtLjUpKyJoLTN2IisoMipMKzEpKyJoM1pNIisodC5yKy41KSsiLCIrKGUtTC0uNSkrImgzdiIrKDIqTCsxKSsiaC0zWiJ9KHd0LF90KSkpOiFudHx8YTxNYXRoLm1pbiguNipvLEwpPyh3dC5sPTAsd3Qucj0kLEF0PSJ5IixFdC5hdHRyKCJkIixmdW5jdGlvbih0LGUpe3JldHVybiJNIisoZS1MLS41KSsiLCIrKHQudC0uNSkrInYtM2giKygyKkwrMSkrInYzWk0iKyhlLUwtLjUpKyIsIisodC5iKy41KSsidjNoIisoMipMKzEpKyJ2LTNaIn0od3QsYnQpKSk6KEF0PSJ4eSIsRXQuYXR0cigiZCIsSCh3dCkpKTt3dC53PXd0LnItd3QubCx3dC5oPXd0LmItd3QudCxBdCYmKEN0PSEwKSx0Ll9kcmFnZ2VkPUN0LGooU3QsRXQsd3Qsa3QsTXQsVHQpLE90KCksdC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGZ0KSxNdD0hMH1mdW5jdGlvbiBPdCgpe2Z0PXt9LCJ4eSIhPT1BdCYmIngiIT09QXR8fChEKFosd3QubC8kLHd0LnIvJCxmdCxldC54YXhlcyksVXQoIngiLGZ0KSksInh5IiE9PUF0JiYieSIhPT1BdHx8KEQoSiwodHQtd3QuYikvdHQsKHR0LXd0LnQpL3R0LGZ0LGV0LnlheGVzKSxVdCgieSIsZnQpKX1mdW5jdGlvbiBEdCgpe090KCksVih0KSxIdCgpLHEodCl9THQucHJlcEZuPWZ1bmN0aW9uKGUscixuKXt2YXIgYT1MdC5kcmFnbW9kZSxvPXQuX2Z1bGxMYXlvdXQuZHJhZ21vZGU7byE9PWEmJihMdC5kcmFnbW9kZT1vKSx2dCgpLGh0PXQuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxwdD10Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVksYXR8fChndD9lLnNoaWZ0S2V5PyJwYW4iPT09bz9vPSJ6b29tIjp2KG8pfHwobz0icGFuIik6ZS5jdHJsS2V5JiYobz0icGFuIik6bz0icGFuIikseShvKT9MdC5taW5EcmFnPTE6THQubWluRHJhZz12b2lkIDAsdihvKT8oTHQueGF4ZXM9WixMdC55YXhlcz1KLGsoZSxyLG4sTHQsbykpOihMdC5jbGlja0ZuPVB0LHYoYSkmJkl0KCksYXR8fCgiem9vbSI9PT1vPyhMdC5tb3ZlRm49enQsTHQuZG9uZUZuPUR0LEx0Lm1pbkRyYWc9MSxmdW5jdGlvbihlLHIsbil7dmFyIGE9eHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YnQ9ci1hLmxlZnQsX3Q9bi1hLnRvcCx0Ll9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybSh0KTt2YXIgbz1zLmFwcGx5M0RUcmFuc2Zvcm0odC5fZnVsbExheW91dC5faW52VHJhbnNmb3JtKShidCxfdCk7YnQ9b1swXSxfdD1vWzFdLHd0PXtsOmJ0LHI6YnQsdzowLHQ6X3QsYjpfdCxoOjB9LFR0PXQuX2htcGl4Y291bnQ/dC5faG1sdW1jb3VudC90Ll9obXBpeGNvdW50OmkodC5fZnVsbExheW91dC5wbG90X2JnY29sb3IpLmdldEx1bWluYW5jZSgpLE10PSExLEF0PSJ4eSIsQ3Q9ITEsU3Q9QihkdCxUdCxLLFEsa3Q9Ik0wLDBIIiskKyJWIit0dCsiSDBWMCIpLEV0PU4oZHQsSyxRKX0oMCxyLG4pKToicGFuIj09PW8mJihMdC5tb3ZlRm49anQsTHQuZG9uZUZuPUh0KSkpLHQuX2Z1bGxMYXlvdXQuX3JlZHJhZz1mdW5jdGlvbigpe3ZhciBlPXQuX2RyYWdkYXRhO2lmKGUmJmUuZWxlbWVudD09PXh0KXt2YXIgcj10Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO3Yocil8fCh2dCgpLEd0KFswLDAsJCx0dF0pLEx0Lm1vdmVGbihlLmR4LGUuZHkpKX19fSxnLmluaXQoTHQpO3ZhciBSdD1bMCwwLCQsdHRdLEZ0PW51bGwsQnQ9RS5SRURSQVdERUxBWSxOdD1lLm1haW5wbG90P3QuX2Z1bGxMYXlvdXQuX3Bsb3RzW2UubWFpbnBsb3RdOmU7ZnVuY3Rpb24ganQoZSxyKXtpZihlKj1odCxyKj1wdCwhdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbil7aWYodC5fZnVsbExheW91dC5fcmVwbG90dGluZz0hMCwiZXciPT09bnR8fCJucyI9PT1pdCl7dmFyIG49bnQ/LWU6MCxpPWl0Py1yOjA7aWYocnQuaXNTdWJwbG90Q29uc3RyYWluZWQpe2lmKG50JiZpdCl7dmFyIGE9KGUvJC1yL3R0KS8yO249LShlPWEqJCksaT0tKHI9LWEqdHQpfWl0P249LWkqJC90dDppPS1uKnR0LyR9cmV0dXJuIG50JiYoUihaLGUpLFV0KCJ4IikpLGl0JiYoUihKLHIpLFV0KCJ5IikpLEd0KFtuLGksJCx0dF0pLFZ0KCksdm9pZCB0LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsZnQpfXZhciBvLHMsbD0idyI9PT1udD09KCJuIj09PWl0KT8xOi0xO2lmKG50JiZpdCYmKGV0LmlzU3VicGxvdENvbnN0cmFpbmVkfHxydC5pc1N1YnBsb3RDb25zdHJhaW5lZCkpe3ZhciBjPShlLyQrbCpyL3R0KS8yO2U9YyokLHI9bCpjKnR0fWlmKCJ3Ij09PW50P2U9cChaLDAsZSk6ImUiPT09bnQ/ZT1wKFosMSwtZSk6bnR8fChlPTApLCJuIj09PWl0P3I9cChKLDEscik6InMiPT09aXQ/cj1wKEosMCwtcik6aXR8fChyPTApLG89InciPT09bnQ/ZTowLHM9Im4iPT09aXQ/cjowLGV0LmlzU3VicGxvdENvbnN0cmFpbmVkJiYhcnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkJiZudCYmaXQmJmw+MCl7dmFyIHU7aWYocnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fCFudCYmMT09PWl0Lmxlbmd0aCl7Zm9yKHU9MDt1PFoubGVuZ3RoO3UrKylaW3VdLnJhbmdlPVpbdV0uX3Iuc2xpY2UoKSxTKFpbdV0sMS1yL3R0KTtvPShlPXIqJC90dCkvMn1pZihydC5pc1N1YnBsb3RDb25zdHJhaW5lZHx8IWl0JiYxPT09bnQubGVuZ3RoKXtmb3IodT0wO3U8Si5sZW5ndGg7dSsrKUpbdV0ucmFuZ2U9Slt1XS5fci5zbGljZSgpLFMoSlt1XSwxLWUvJCk7cz0ocj1lKnR0LyQpLzJ9fXJ0LmlzU3VicGxvdENvbnN0cmFpbmVkJiZpdHx8VXQoIngiKSxydC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmbnR8fFV0KCJ5Iik7dmFyIGY9JC1lLGg9dHQtcjshcnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fG50JiZpdHx8KG50PyhzPW8/MDplKnR0LyQsaD1mKnR0LyQpOihvPXM/MDpyKiQvdHQsZj1oKiQvdHQpKSxHdChbbyxzLGYsaF0pLFZ0KCksdC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGZ0KX1mdW5jdGlvbiBwKHQsZSxyKXtmb3IodmFyIG4saSxhPTEtZSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107aWYoIXMuZml4ZWRyYW5nZSl7bj1zLGk9cy5fcmxbYV0rKHMuX3JsW2VdLXMuX3JsW2FdKS9GKHIvcy5fbGVuZ3RoKTt2YXIgbD1zLmwycihpKTshMSE9PWwmJnZvaWQgMCE9PWwmJihzLnJhbmdlW2VdPWwpfX1yZXR1cm4gbi5fbGVuZ3RoKihuLl9ybFtlXS1pKS8obi5fcmxbZV0tbi5fcmxbYV0pfX1mdW5jdGlvbiBVdCh0LGUpe2Zvcih2YXIgcj1ydC5pc1N1YnBsb3RDb25zdHJhaW5lZD97eDpKLHk6Wn1bdF06cnRbdCsiYXhlcyJdLG49cnQuaXNTdWJwbG90Q29uc3RyYWluZWQ/e3g6Wix5Okp9W3RdOltdLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPWEuX2lkLHM9cnQueExpbmtzW29dfHxydC55TGlua3Nbb10sbD1uWzBdfHxVW3NdfHxYW3NdO2wmJihlPyhlW2EuX25hbWUrIi5yYW5nZVswXSJdPWVbbC5fbmFtZSsiLnJhbmdlWzBdIl0sZVthLl9uYW1lKyIucmFuZ2VbMV0iXT1lW2wuX25hbWUrIi5yYW5nZVsxXSJdKTphLnJhbmdlPWwucmFuZ2Uuc2xpY2UoKSl9fWZ1bmN0aW9uIFZ0KCl7dmFyIGUscj1bXTtmdW5jdGlvbiBuKHQpe2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5maXhlZHJhbmdlfHxyLnB1c2godFtlXS5faWQpfWZvcihvdCYmKG4oWiksbihldC54YXhlcyksbihydC54YXhlcykpLHN0JiYobihKKSxuKGV0LnlheGVzKSxuKHJ0LnlheGVzKSksZnQ9e30sZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgaT1yW2VdLGE9VCh0LGkpO3AuZHJhd09uZSh0LGEse3NraXBUaXRsZTohMH0pLGZ0W2EuX25hbWUrIi5yYW5nZVswXSJdPWEucmFuZ2VbMF0sZnRbYS5fbmFtZSsiLnJhbmdlWzFdIl09YS5yYW5nZVsxXX1wLnJlZHJhd0NvbXBvbmVudHModCxyKX1mdW5jdGlvbiBxdCgpe2lmKCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXt2YXIgZT10Ll9jb250ZXh0LmRvdWJsZUNsaWNrLHI9W107bnQmJihyPXIuY29uY2F0KFopKSxpdCYmKHI9ci5jb25jYXQoSikpLHJ0LnhheGVzJiYocj1yLmNvbmNhdChydC54YXhlcykpLHJ0LnlheGVzJiYocj1yLmNvbmNhdChydC55YXhlcykpO3ZhciBuLGksYSxzPXt9O2lmKCJyZXNldCthdXRvc2l6ZSI9PT1lKWZvcihlPSJhdXRvc2l6ZSIsaT0wO2k8ci5sZW5ndGg7aSsrKWlmKChuPXJbaV0pLl9yYW5nZUluaXRpYWwmJihuLnJhbmdlWzBdIT09bi5fcmFuZ2VJbml0aWFsWzBdfHxuLnJhbmdlWzFdIT09bi5fcmFuZ2VJbml0aWFsWzFdKXx8IW4uX3JhbmdlSW5pdGlhbCYmIW4uYXV0b3JhbmdlKXtlPSJyZXNldCI7YnJlYWt9aWYoImF1dG9zaXplIj09PWUpZm9yKGk9MDtpPHIubGVuZ3RoO2krKykobj1yW2ldKS5maXhlZHJhbmdlfHwoc1tuLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApO2Vsc2UgaWYoInJlc2V0Ij09PWUpZm9yKChudHx8ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQpJiYocj1yLmNvbmNhdChldC54YXhlcykpLGl0JiYhZXQuaXNTdWJwbG90Q29uc3RyYWluZWQmJihyPXIuY29uY2F0KGV0LnlheGVzKSksZXQuaXNTdWJwbG90Q29uc3RyYWluZWQmJihudD9pdHx8KHI9ci5jb25jYXQoSikpOnI9ci5jb25jYXQoWikpLGk9MDtpPHIubGVuZ3RoO2krKykobj1yW2ldKS5maXhlZHJhbmdlfHwobi5fcmFuZ2VJbml0aWFsPyhhPW4uX3JhbmdlSW5pdGlhbCxzW24uX25hbWUrIi5yYW5nZVswXSJdPWFbMF0sc1tuLl9uYW1lKyIucmFuZ2VbMV0iXT1hWzFdKTpzW24uX25hbWUrIi5hdXRvcmFuZ2UiXT0hMCk7dC5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLG8uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHMpfX1mdW5jdGlvbiBIdCgpe0d0KFswLDAsJCx0dF0pLHMuc3luY09yQXN5bmMoW3cucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQuX3JlcGxvdHRpbmc9ITEsby5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsZnQpfV0sdCl9ZnVuY3Rpb24gR3QoZSl7dmFyIHIsbixpLGEsbD10Ll9mdWxsTGF5b3V0LGM9bC5fcGxvdHMsdT1sLl9zdWJwbG90cy5jYXJ0ZXNpYW47aWYoY3QmJm8uc3VicGxvdHNSZWdpc3RyeS5zcGxvbS5kcmFnKHQpLGx0KWZvcihyPTA7cjx1Lmxlbmd0aDtyKyspaWYoaT0obj1jW3Vbcl1dKS54YXhpcyxhPW4ueWF4aXMsbi5fc2NlbmUpe3ZhciBoPXMuc2ltcGxlTWFwKGkucmFuZ2UsaS5yMmwpLHA9cy5zaW1wbGVNYXAoYS5yYW5nZSxhLnIybCk7bi5fc2NlbmUudXBkYXRlKHtyYW5nZTpbaFswXSxwWzBdLGhbMV0scFsxXV19KX1pZigoY3R8fGx0KSYmKGIodCksXyh0KSksdXQpe3ZhciBnPWVbMl0vSS5fbGVuZ3RoLHY9ZVszXS9QLl9sZW5ndGg7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKyl7aT0obj1jW3Vbcl1dKS54YXhpcyxhPW4ueWF4aXM7dmFyIHkseCx3LFQsaz0ob3R8fHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkKSYmIWkuZml4ZWRyYW5nZSYmVVtpLl9pZF0sTT0oc3R8fHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkKSYmIWEuZml4ZWRyYW5nZSYmWFthLl9pZF07aWYoaz8oeT1nLHc9bXx8cnQuaXNTdWJwbG90Q29uc3RyYWluZWQ/ZVswXTpYdChpLHkpKTpydC54YUhhc2hbaS5faWRdPyh5PWcsdz1lWzBdKmkuX2xlbmd0aC9JLl9sZW5ndGgpOnJ0LnlhSGFzaFtpLl9pZF0/KHk9dix3PSJucyI9PT1pdD8tZVsxXSppLl9sZW5ndGgvUC5fbGVuZ3RoOlh0KGkseSx7bjoidG9wIixzOiJib3R0b20ifVtpdF0pKTp3PVd0KGkseT1ZdChpLGcsdikpLE0/KHg9dixUPWR8fHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkP2VbMV06WHQoYSx4KSk6cnQueWFIYXNoW2EuX2lkXT8oeD12LFQ9ZVsxXSphLl9sZW5ndGgvUC5fbGVuZ3RoKTpydC54YUhhc2hbYS5faWRdPyh4PWcsVD0iZXciPT09bnQ/LWVbMF0qYS5fbGVuZ3RoL0kuX2xlbmd0aDpYdChhLHgse2U6InJpZ2h0Iix3OiJsZWZ0In1bbnRdKSk6VD1XdChhLHg9WXQoYSxnLHYpKSx5fHx4KXt5fHwoeT0xKSx4fHwoeD0xKTt2YXIgQT1pLl9vZmZzZXQtdy95LFM9YS5fb2Zmc2V0LVQveDtuLmNsaXBSZWN0LmNhbGwoZi5zZXRUcmFuc2xhdGUsdyxUKS5jYWxsKGYuc2V0U2NhbGUseSx4KSxuLnBsb3QuY2FsbChmLnNldFRyYW5zbGF0ZSxBLFMpLmNhbGwoZi5zZXRTY2FsZSwxL3ksMS94KSx5PT09bi54U2NhbGVGYWN0b3ImJng9PT1uLnlTY2FsZUZhY3Rvcnx8KGYuc2V0UG9pbnRHcm91cFNjYWxlKG4uem9vbVNjYWxlUHRzLHkseCksZi5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQseSx4KSksZi5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzKG4uY2xpcE9uQXhpc0ZhbHNlVHJhY2VzLG4pLG4ueFNjYWxlRmFjdG9yPXksbi55U2NhbGVGYWN0b3I9eH19fX1mdW5jdGlvbiBZdCh0LGUscil7cmV0dXJuIHQuZml4ZWRyYW5nZT8wOm90JiZldC54YUhhc2hbdC5faWRdP2U6c3QmJihldC5pc1N1YnBsb3RDb25zdHJhaW5lZD9ldC54YUhhc2g6ZXQueWFIYXNoKVt0Ll9pZF0/cjowfWZ1bmN0aW9uIFd0KHQsZSl7cmV0dXJuIGU/KHQucmFuZ2U9dC5fci5zbGljZSgpLFModCxlKSxYdCh0LGUpKTowfWZ1bmN0aW9uIFh0KHQsZSxyKXtyZXR1cm4gdC5fbGVuZ3RoKigxLWUpKnhbcnx8dC5jb25zdHJhaW50b3dhcmR8fCJtaWRkbGUiXX1yZXR1cm4gZC5sZW5ndGgqbS5sZW5ndGghPTEmJlkoeHQsKGZ1bmN0aW9uKGUpe2lmKHQuX2NvbnRleHQuX3Njcm9sbFpvb20uY2FydGVzaWFufHx0Ll9mdWxsTGF5b3V0Ll9lbmFibGVzY3JvbGx6b29tKXtpZihJdCgpLHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx2b2lkIGUuc3RvcFByb3BhZ2F0aW9uKCk7dnQoKSxjbGVhclRpbWVvdXQoRnQpO3ZhciByPS1lLmRlbHRhWTtpZihpc0Zpbml0ZShyKXx8KHI9ZS53aGVlbERlbHRhLzEwKSxpc0Zpbml0ZShyKSl7dmFyIG4saT1NYXRoLmV4cCgtTWF0aC5taW4oTWF0aC5tYXgociwtMjApLDIwKS8yMDApLGE9TnQuZHJhZ2xheWVyLnNlbGVjdCgiLm5zZXdkcmFnIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89KGUuY2xpZW50WC1hLmxlZnQpL2Eud2lkdGgsbD0oYS5ib3R0b20tZS5jbGllbnRZKS9hLmhlaWdodDtpZihvdCl7Zm9yKG18fChvPS41KSxuPTA7bjxaLmxlbmd0aDtuKyspYyhaW25dLG8saSk7VXQoIngiKSxSdFsyXSo9aSxSdFswXSs9UnRbMl0qbyooMS9pLTEpfWlmKHN0KXtmb3IoZHx8KGw9LjUpLG49MDtuPEoubGVuZ3RoO24rKyljKEpbbl0sbCxpKTtVdCgieSIpLFJ0WzNdKj1pLFJ0WzFdKz1SdFszXSooMS1sKSooMS9pLTEpfUd0KFJ0KSxWdCgpLHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixmdCksRnQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtSdD1bMCwwLCQsdHRdLEh0KCl9KSxCdCksZS5wcmV2ZW50RGVmYXVsdCgpfWVsc2Ugcy5sb2coIkRpZCBub3QgZmluZCB3aGVlbCBtb3Rpb24gYXR0cmlidXRlczogIixlKX1mdW5jdGlvbiBjKHQsZSxyKXtpZighdC5maXhlZHJhbmdlKXt2YXIgbj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxpPW5bMF0rKG5bMV0tblswXSkqZTt0LnJhbmdlPW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5sMnIoaSsoZS1pKSpyKX0pKX19fSkpLHh0fSxtYWtlRHJhZ2dlcjpQLG1ha2VSZWN0RHJhZ2dlcjp6LG1ha2Vab29tYm94OkIsbWFrZUNvcm5lcnM6Tix1cGRhdGVab29tYm94OmoseHlDb3JuZXJzOkgsdHJhbnNpdGlvblpvb21ib3g6VSxyZW1vdmVab29tYm94OlYsc2hvd0RvdWJsZUNsaWNrTm90aWZpZXI6cSxhdHRhY2hXaGVlbEV2ZW50SGFuZGxlcjpZfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjY2MiwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NjEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjY1LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2ODMsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NSwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NzYyLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3OTksIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAzLCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyI6ODE4LCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuLi9wbG90cyI6ODkxLCIuL2F4ZXMiOjgyOCwiLi9heGlzX2lkcyI6ODMxLCIuL2NvbnN0YW50cyI6ODM0LCIuL3NjYWxlX3pvb20iOjg0NiwiLi9zZWxlY3QiOjg0NyxkMzoxNjksImhhcy1wYXNzaXZlLWV2ZW50cyI6NDQxLHRpbnljb2xvcjI6NTc2fV0sODM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Iiksbz10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIikscz10KCIuL2RyYWdib3giKS5tYWtlRHJhZ0JveCxsPXQoIi4vY29uc3RhbnRzIikuRFJBR0dFUlNJWkU7ci5pbml0SW50ZXJhY3Rpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYodC5fY29udGV4dC5zdGF0aWNQbG90KW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLmRyYWciKS5yZW1vdmUoKTtlbHNlIGlmKGUuX2hhcygiY2FydGVzaWFuIil8fGUuX2hhcygic3Bsb20iKSl7T2JqZWN0LmtleXMoZS5fcGxvdHN8fHt9KS5zb3J0KChmdW5jdGlvbih0LHIpe2lmKChlLl9wbG90c1t0XS5tYWlucGxvdCYmITApPT09KGUuX3Bsb3RzW3JdLm1haW5wbG90JiYhMCkpe3ZhciBuPXQuc3BsaXQoInkiKSxpPXIuc3BsaXQoInkiKTtyZXR1cm4gblswXT09PWlbMF0/TnVtYmVyKG5bMV18fDEpLU51bWJlcihpWzFdfHwxKTpOdW1iZXIoblswXXx8MSktTnVtYmVyKGlbMF18fDEpfXJldHVybiBlLl9wbG90c1t0XS5tYWlucGxvdD8xOi0xfSkpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBuPWUuX3Bsb3RzW3JdLG89bi54YXhpcyxjPW4ueWF4aXM7aWYoIW4ubWFpbnBsb3Qpe3ZhciB1PXModCxuLG8uX29mZnNldCxjLl9vZmZzZXQsby5fbGVuZ3RoLGMuX2xlbmd0aCwibnMiLCJldyIpO3Uub25tb3VzZW1vdmU9ZnVuY3Rpb24oZSl7dC5fZnVsbExheW91dC5fcmVob3Zlcj1mdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD09PXImJnQuX2Z1bGxMYXlvdXQuX3Bsb3RzW3JdJiZpLmhvdmVyKHQsZSxyKX0saS5ob3Zlcih0LGUsciksdC5fZnVsbExheW91dC5fbGFzdGhvdmVyPXUsdC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PXJ9LHUub25tb3VzZW91dD1mdW5jdGlvbihlKXt0Ll9kcmFnZ2luZ3x8KHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1udWxsLGEudW5ob3Zlcih0LGUpKX0sdC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzJiYocyh0LG4sby5fb2Zmc2V0LWwsYy5fb2Zmc2V0LWwsbCxsLCJuIiwidyIpLHModCxuLG8uX29mZnNldCtvLl9sZW5ndGgsYy5fb2Zmc2V0LWwsbCxsLCJuIiwiZSIpLHModCxuLG8uX29mZnNldC1sLGMuX29mZnNldCtjLl9sZW5ndGgsbCxsLCJzIiwidyIpLHModCxuLG8uX29mZnNldCtvLl9sZW5ndGgsYy5fb2Zmc2V0K2MuX2xlbmd0aCxsLGwsInMiLCJlIikpfWlmKHQuX2NvbnRleHQuc2hvd0F4aXNEcmFnSGFuZGxlcyl7aWYocj09PW8uX21haW5TdWJwbG90KXt2YXIgZj1vLl9tYWluTGluZVBvc2l0aW9uOyJ0b3AiPT09by5zaWRlJiYoZi09bCkscyh0LG4sby5fb2Zmc2V0Ky4xKm8uX2xlbmd0aCxmLC44Km8uX2xlbmd0aCxsLCIiLCJldyIpLHModCxuLG8uX29mZnNldCxmLC4xKm8uX2xlbmd0aCxsLCIiLCJ3Iikscyh0LG4sby5fb2Zmc2V0Ky45Km8uX2xlbmd0aCxmLC4xKm8uX2xlbmd0aCxsLCIiLCJlIil9aWYocj09PWMuX21haW5TdWJwbG90KXt2YXIgaD1jLl9tYWluTGluZVBvc2l0aW9uOyJyaWdodCIhPT1jLnNpZGUmJihoLT1sKSxzKHQsbixoLGMuX29mZnNldCsuMSpjLl9sZW5ndGgsbCwuOCpjLl9sZW5ndGgsIm5zIiwiIikscyh0LG4saCxjLl9vZmZzZXQrLjkqYy5fbGVuZ3RoLGwsLjEqYy5fbGVuZ3RoLCJzIiwiIikscyh0LG4saCxjLl9vZmZzZXQsbCwuMSpjLl9sZW5ndGgsIm4iLCIiKX19fSkpO3ZhciBvPWUuX2hvdmVybGF5ZXIubm9kZSgpO28ub25tb3VzZW1vdmU9ZnVuY3Rpb24ocil7ci50YXJnZXQ9dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLGkuaG92ZXIodCxyLGUuX2hvdmVyc3VicGxvdCl9LG8ub25jbGljaz1mdW5jdGlvbihlKXtlLnRhcmdldD10Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIsaS5jbGljayh0LGUpfSxvLm9ubW91c2Vkb3duPWZ1bmN0aW9uKGUpe3QuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlci5vbm1vdXNlZG93bihlKX0sci51cGRhdGVGeCh0KX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPSJwYW4iPT09ZS5kcmFnbW9kZT8ibW92ZSI6ImNyb3NzaGFpciI7byhlLl9kcmFnZ2VycyxyKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjYyLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2ODMsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc5OSwiLi9jb25zdGFudHMiOjgzNCwiLi9kcmFnYm94Ijo4MzYsZDM6MTY5fV0sODM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y2xlYXJPdXRsaW5lQ29udHJvbGxlcnM6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fem9vbWxheWVyO2UmJmUuc2VsZWN0QWxsKCIub3V0bGluZS1jb250cm9sbGVycyIpLnJlbW92ZSgpfSxjbGVhclNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXI7ZSYmZS5zZWxlY3RBbGwoIi5zZWxlY3Qtb3V0bGluZSIpLnJlbW92ZSgpLHQuX2Z1bGxMYXlvdXQuX2RyYXdpbmc9ITF9fX0se31dLDgzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5zdHJUcmFuc2xhdGU7ZnVuY3Rpb24gaSh0LGUpe3N3aXRjaCh0LnR5cGUpe2Nhc2UibG9nIjpyZXR1cm4gdC5wMmQoZSk7Y2FzZSJkYXRlIjpyZXR1cm4gdC5wMnIoZSwwLHQuY2FsZW5kYXIpO2RlZmF1bHQ6cmV0dXJuIHQucDJyKGUpfX1lLmV4cG9ydHM9e3AycjppLHIycDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0LnR5cGUpe2Nhc2UibG9nIjpyZXR1cm4gdC5kMnAoZSk7Y2FzZSJkYXRlIjpyZXR1cm4gdC5yMnAoZSwwLHQuY2FsZW5kYXIpO2RlZmF1bHQ6cmV0dXJuIHQucjJwKGUpfX0sYXhWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0ieSI9PT10Ll9pZC5jaGFyQXQoMCk/MTowO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gaSh0LHJbZV0pfX0sZ2V0VHJhbnNmb3JtOmZ1bmN0aW9uKHQpe3JldHVybiBuKHQueGF4aXMuX29mZnNldCx0LnlheGlzLl9vZmZzZXQpfX19LHsiLi4vLi4vbGliIjo3Nzh9XSw4NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9heGlzX2lkcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbz1lW3RdO2lmKEFycmF5LmlzQXJyYXkobykpZm9yKHZhciBzPW4uc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW4sbD1zLmlkUmVnZXgsYz1yLl9zdWJwbG90cyx1PWMueGF4aXMsZj1jLnlheGlzLGg9Yy5jYXJ0ZXNpYW4scD1yLl9oYXMoImNhcnRlc2lhbiIpfHxyLl9oYXMoImdsMmQiKSxkPTA7ZDxvLmxlbmd0aDtkKyspe3ZhciBnPW9bZF07aWYoaS5pc1BsYWluT2JqZWN0KGcpKXt2YXIgbT1hLmNsZWFuSWQoZy54cmVmLCJ4IiwhMSksdj1hLmNsZWFuSWQoZy55cmVmLCJ5IiwhMSkseT1sLngudGVzdChtKSx4PWwueS50ZXN0KHYpO2lmKHl8fHgpe3B8fGkucHVzaFVuaXF1ZShyLl9iYXNlUGxvdE1vZHVsZXMscyk7dmFyIGI9ITE7eSYmLTE9PT11LmluZGV4T2YobSkmJih1LnB1c2gobSksYj0hMCkseCYmLTE9PT1mLmluZGV4T2YodikmJihmLnB1c2godiksYj0hMCksYiYmeSYmeCYmaC5wdXNoKG0rdil9fX19fX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi9heGlzX2lkcyI6ODMxfV0sODQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi9wbG90cyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCIuLi9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLGM9dCgiLi9heGlzX2lkcyIpLHU9dCgiLi9jb25zdGFudHMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksaD1hLmVuc3VyZVNpbmdsZTtmdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gYS5lbnN1cmVTaW5nbGUodCxlLHIsKGZ1bmN0aW9uKHQpe3QuZGF0dW0ocil9KSl9ZnVuY3Rpb24gZCh0LGUscixhLG8pe2Zvcih2YXIgYyxmLGgscD11LnRyYWNlTGF5ZXJDbGFzc2VzLGQ9dC5fZnVsbExheW91dCxnPWQuX21vZHVsZXMsbT1bXSx2PVtdLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIHg9KGM9Z1t5XSkubmFtZSxiPWkubW9kdWxlc1t4XS5jYXRlZ29yaWVzO2lmKGIuc3ZnKXt2YXIgXz1jLmxheWVyTmFtZXx8eCsibGF5ZXIiLHc9Yy5wbG90O2g9KGY9bChyLHcpKVswXSxyPWZbMV0saC5sZW5ndGgmJm0ucHVzaCh7aTpwLmluZGV4T2YoXyksY2xhc3NOYW1lOl8scGxvdE1ldGhvZDp3LGNkTW9kdWxlOmh9KSxiLnpvb21TY2FsZSYmdi5wdXNoKCIuIitfKX19bS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmktZS5pfSkpO3ZhciBUPWUucGxvdC5zZWxlY3RBbGwoImcubWxheWVyIikuZGF0YShtLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc05hbWV9KSk7aWYoVC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lfSkpLmNsYXNzZWQoIm1sYXllciIsITApLmNsYXNzZWQoInJhbmdlcGxvdCIsZS5pc1JhbmdlUGxvdCksVC5leGl0KCkucmVtb3ZlKCksVC5vcmRlcigpLFQuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9bi5zZWxlY3QodGhpcyksbD1yLmNsYXNzTmFtZTtyLnBsb3RNZXRob2QodCxlLHIuY2RNb2R1bGUsaSxhLG8pLC0xPT09dS5jbGlwT25BeGlzRmFsc2VRdWVyeS5pbmRleE9mKCIuIitsKSYmcy5zZXRDbGlwVXJsKGksZS5sYXllckNsaXBJZCx0KX0pKSxkLl9oYXMoInNjYXR0ZXJnbCIpJiYoYz1pLmdldE1vZHVsZSgic2NhdHRlcmdsIiksaD1sKHIsYylbMF0sYy5wbG90KHQsZSxoKSksIXQuX2NvbnRleHQuc3RhdGljUGxvdCYmKGUuX2hhc0NsaXBPbkF4aXNGYWxzZSYmKGUuY2xpcE9uQXhpc0ZhbHNlVHJhY2VzPWUucGxvdC5zZWxlY3RBbGwodS5jbGlwT25BeGlzRmFsc2VRdWVyeS5qb2luKCIsIikpLnNlbGVjdEFsbCgiLnRyYWNlIikpLHYubGVuZ3RoKSl7dmFyIGs9ZS5wbG90LnNlbGVjdEFsbCh2LmpvaW4oIiwiKSkuc2VsZWN0QWxsKCIudHJhY2UiKTtlLnpvb21TY2FsZVB0cz1rLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLGUuem9vbVNjYWxlVHh0PWsuc2VsZWN0QWxsKCIudGV4dHBvaW50Iil9fWZ1bmN0aW9uIGcodCxlKXt2YXIgcj1lLnBsb3Rncm91cCxuPWUuaWQsaT11LmxheWVyVmFsdWUybGF5ZXJDbGFzc1tlLnhheGlzLmxheWVyXSxhPXUubGF5ZXJWYWx1ZTJsYXllckNsYXNzW2UueWF4aXMubGF5ZXJdLG89dC5fZnVsbExheW91dC5faGFzT25seUxhcmdlU3Bsb21zO2lmKGUubWFpbnBsb3Qpe3ZhciBzPWUubWFpbnBsb3RpbmZvLGw9cy5wbG90Z3JvdXAsZj1uKyIteCIsZD1uKyIteSI7ZS5ncmlkbGF5ZXI9cy5ncmlkbGF5ZXIsZS56ZXJvbGluZWxheWVyPXMuemVyb2xpbmVsYXllcixoKHMub3ZlcmxpbmVzQmVsb3csInBhdGgiLGYpLGgocy5vdmVybGluZXNCZWxvdywicGF0aCIsZCksaChzLm92ZXJheGVzQmVsb3csImciLGYpLGgocy5vdmVyYXhlc0JlbG93LCJnIixkKSxlLnBsb3Q9aChzLm92ZXJwbG90LCJnIixuKSxoKHMub3ZlcmxpbmVzQWJvdmUsInBhdGgiLGYpLGgocy5vdmVybGluZXNBYm92ZSwicGF0aCIsZCksaChzLm92ZXJheGVzQWJvdmUsImciLGYpLGgocy5vdmVyYXhlc0Fib3ZlLCJnIixkKSxlLnhsaW5lcz1sLnNlbGVjdCgiLm92ZXJsaW5lcy0iK2kpLnNlbGVjdCgiLiIrZiksZS55bGluZXM9bC5zZWxlY3QoIi5vdmVybGluZXMtIithKS5zZWxlY3QoIi4iK2QpLGUueGF4aXNsYXllcj1sLnNlbGVjdCgiLm92ZXJheGVzLSIraSkuc2VsZWN0KCIuIitmKSxlLnlheGlzbGF5ZXI9bC5zZWxlY3QoIi5vdmVyYXhlcy0iK2EpLnNlbGVjdCgiLiIrZCl9ZWxzZSBpZihvKWUueGxpbmVzPWgociwicGF0aCIsInhsaW5lcy1hYm92ZSIpLGUueWxpbmVzPWgociwicGF0aCIsInlsaW5lcy1hYm92ZSIpLGUueGF4aXNsYXllcj1oKHIsImciLCJ4YXhpc2xheWVyLWFib3ZlIiksZS55YXhpc2xheWVyPWgociwiZyIsInlheGlzbGF5ZXItYWJvdmUiKTtlbHNle3ZhciBnPWgociwiZyIsImxheWVyLXN1YnBsb3QiKTtlLnNoYXBlbGF5ZXI9aChnLCJnIiwic2hhcGVsYXllciIpLGUuaW1hZ2VsYXllcj1oKGcsImciLCJpbWFnZWxheWVyIiksZS5ncmlkbGF5ZXI9aChyLCJnIiwiZ3JpZGxheWVyIiksZS56ZXJvbGluZWxheWVyPWgociwiZyIsInplcm9saW5lbGF5ZXIiKSxoKHIsInBhdGgiLCJ4bGluZXMtYmVsb3ciKSxoKHIsInBhdGgiLCJ5bGluZXMtYmVsb3ciKSxlLm92ZXJsaW5lc0JlbG93PWgociwiZyIsIm92ZXJsaW5lcy1iZWxvdyIpLGgociwiZyIsInhheGlzbGF5ZXItYmVsb3ciKSxoKHIsImciLCJ5YXhpc2xheWVyLWJlbG93IiksZS5vdmVyYXhlc0JlbG93PWgociwiZyIsIm92ZXJheGVzLWJlbG93IiksZS5wbG90PWgociwiZyIsInBsb3QiKSxlLm92ZXJwbG90PWgociwiZyIsIm92ZXJwbG90IiksZS54bGluZXM9aChyLCJwYXRoIiwieGxpbmVzLWFib3ZlIiksZS55bGluZXM9aChyLCJwYXRoIiwieWxpbmVzLWFib3ZlIiksZS5vdmVybGluZXNBYm92ZT1oKHIsImciLCJvdmVybGluZXMtYWJvdmUiKSxoKHIsImciLCJ4YXhpc2xheWVyLWFib3ZlIiksaChyLCJnIiwieWF4aXNsYXllci1hYm92ZSIpLGUub3ZlcmF4ZXNBYm92ZT1oKHIsImciLCJvdmVyYXhlcy1hYm92ZSIpLGUueGxpbmVzPXIuc2VsZWN0KCIueGxpbmVzLSIraSksZS55bGluZXM9ci5zZWxlY3QoIi55bGluZXMtIithKSxlLnhheGlzbGF5ZXI9ci5zZWxlY3QoIi54YXhpc2xheWVyLSIraSksZS55YXhpc2xheWVyPXIuc2VsZWN0KCIueWF4aXNsYXllci0iK2EpfW98fChwKGUuZ3JpZGxheWVyLCJnIixlLnhheGlzLl9pZCkscChlLmdyaWRsYXllciwiZyIsZS55YXhpcy5faWQpLGUuZ3JpZGxheWVyLnNlbGVjdEFsbCgiZyIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSkuc29ydChjLmlkU29ydCkpLGUueGxpbmVzLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNsYXNzZWQoImNyaXNwIiwhMCksZS55bGluZXMuc3R5bGUoImZpbGwiLCJub25lIikuY2xhc3NlZCgiY3Jpc3AiLCEwKX1mdW5jdGlvbiBtKHQsZSl7aWYodCl7dmFyIHI9e307Zm9yKHZhciBpIGluIHQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9dFswXTtuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKSx2KGksZSkscltpXT0hMH0pKSxlLl9wbG90cylmb3IodmFyIGE9ZS5fcGxvdHNbaV0ub3ZlcmxheXN8fFtdLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtyW3MuaWRdJiZzLnBsb3Quc2VsZWN0QWxsKCIudHJhY2UiKS5yZW1vdmUoKX19fWZ1bmN0aW9uIHYodCxlKXtlLl9kcmFnZ2Vycy5zZWxlY3RBbGwoImcuIit0KS5yZW1vdmUoKSxlLl9kZWZzLnNlbGVjdCgiI2NsaXAiK2UuX3VpZCt0KyJwbG90IikucmVtb3ZlKCl9ci5uYW1lPSJjYXJ0ZXNpYW4iLHIuYXR0cj1bInhheGlzIiwieWF4aXMiXSxyLmlkUm9vdD1bIngiLCJ5Il0sci5pZFJlZ2V4PXUuaWRSZWdleCxyLmF0dHJSZWdleD11LmF0dHJSZWdleCxyLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksci50cmFuc2l0aW9uQXhlcz10KCIuL3RyYW5zaXRpb25fYXhlcyIpLHIuZmluYWxpemVTdWJwbG90cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxvPWUuX3N1YnBsb3RzLHM9by54YXhpcyxsPW8ueWF4aXMsZj1vLmNhcnRlc2lhbixoPWYuY29uY2F0KG8uZ2wyZHx8W10pLHA9e30sZD17fTtmb3Iocj0wO3I8aC5sZW5ndGg7cisrKXt2YXIgZz1oW3JdLnNwbGl0KCJ5Iik7cFtnWzBdXT0xLGRbInkiK2dbMV1dPTF9Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKylwW249c1tyXV18fChpPSh0W2MuaWQybmFtZShuKV18fHt9KS5hbmNob3IsdS5pZFJlZ2V4LnkudGVzdChpKXx8KGk9InkiKSxmLnB1c2gobitpKSxoLnB1c2gobitpKSxkW2ldfHwoZFtpXT0xLGEucHVzaFVuaXF1ZShsLGkpKSk7Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKylkW2k9bFtyXV18fChuPSh0W2MuaWQybmFtZShpKV18fHt9KS5hbmNob3IsdS5pZFJlZ2V4LngudGVzdChuKXx8KG49IngiKSxmLnB1c2gobitpKSxoLnB1c2gobitpKSxwW25dfHwocFtuXT0xLGEucHVzaFVuaXF1ZShzLG4pKSk7aWYoIWgubGVuZ3RoKXtmb3IodmFyIG0gaW4gbj0iIixpPSIiLHQpe2lmKHUuYXR0clJlZ2V4LnRlc3QobSkpIngiPT09bS5jaGFyQXQoMCk/KCFufHwrbS5zdWJzdHIoNSk8K24uc3Vic3RyKDUpKSYmKG49bSk6KCFpfHwrbS5zdWJzdHIoNSk8K2kuc3Vic3RyKDUpKSYmKGk9bSl9bj1uP2MubmFtZTJpZChuKToieCIsaT1pP2MubmFtZTJpZChpKToieSIscy5wdXNoKG4pLGwucHVzaChpKSxmLnB1c2gobitpKX19LHIucGxvdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQsbz1hLl9zdWJwbG90cy5jYXJ0ZXNpYW4scz10LmNhbGNkYXRhO2lmKCFBcnJheS5pc0FycmF5KGUpKWZvcihlPVtdLGk9MDtpPHMubGVuZ3RoO2krKyllLnB1c2goaSk7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7Zm9yKHZhciBsLGM9b1tpXSx1PWEuX3Bsb3RzW2NdLGY9W10saD0wO2g8cy5sZW5ndGg7aCsrKXt2YXIgcD1zW2hdLGc9cFswXS50cmFjZTtnLnhheGlzK2cueWF4aXM9PT1jJiYoKC0xIT09ZS5pbmRleE9mKGcuaW5kZXgpfHxnLmNhcnBldCkmJihsJiZsWzBdLnRyYWNlLnhheGlzK2xbMF0udHJhY2UueWF4aXM9PT1jJiYtMSE9PVsidG9uZXh0eCIsInRvbmV4dHkiLCJ0b25leHQiXS5pbmRleE9mKGcuZmlsbCkmJi0xPT09Zi5pbmRleE9mKGwpJiZmLnB1c2gobCksZi5wdXNoKHApKSxsPXApfWQodCx1LGYscixuKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHM9bi5fcGxvdHN8fHt9LGw9ZS5fcGxvdHN8fHt9LHU9bi5fc3VicGxvdHN8fHt9O2lmKG4uX2hhc09ubHlMYXJnZVNwbG9tcyYmIWUuX2hhc09ubHlMYXJnZVNwbG9tcylmb3IobyBpbiBzKShpPXNbb10pLnBsb3Rncm91cCYmaS5wbG90Z3JvdXAucmVtb3ZlKCk7dmFyIGY9bi5faGFzJiZuLl9oYXMoImdsIiksaD1lLl9oYXMmJmUuX2hhcygiZ2wiKTtpZihmJiYhaClmb3IobyBpbiBzKShpPXNbb10pLl9zY2VuZSYmaS5fc2NlbmUuZGVzdHJveSgpO2lmKHUueGF4aXMmJnUueWF4aXMpe3ZhciBwPWMubGlzdElkcyh7X2Z1bGxMYXlvdXQ6bn0pO2ZvcihhPTA7YTxwLmxlbmd0aDthKyspe3ZhciBkPXBbYV07ZVtjLmlkMm5hbWUoZCldfHxuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuZy0iK2QrInRpdGxlIikucmVtb3ZlKCl9fXZhciBnPW4uX2hhcyYmbi5faGFzKCJjYXJ0ZXNpYW4iKSx5PWUuX2hhcyYmZS5faGFzKCJjYXJ0ZXNpYW4iKTtpZihnJiYheSltKG4uX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbCgiLnN1YnBsb3QiKSxuKSxuLl9kZWZzLnNlbGVjdEFsbCgiLmF4ZXNjbGlwIikucmVtb3ZlKCksZGVsZXRlIG4uX2F4aXNDb25zdHJhaW50R3JvdXBzLGRlbGV0ZSBuLl9heGlzTWF0Y2hHcm91cHM7ZWxzZSBpZih1LmNhcnRlc2lhbilmb3IoYT0wO2E8dS5jYXJ0ZXNpYW4ubGVuZ3RoO2ErKyl7dmFyIHg9dS5jYXJ0ZXNpYW5bYV07aWYoIWxbeF0pe3ZhciBiPSIuIit4KyIsLiIreCsiLXgsLiIreCsiLXkiO24uX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbChiKS5yZW1vdmUoKSx2KHgsbil9fX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5fc3VicGxvdHMuY2FydGVzaWFuLGM9bC5sZW5ndGgsdT1bXSxmPVtdO2ZvcihlPTA7ZTxjO2UrKyl7bj1sW2VdLGk9cy5fcGxvdHNbbl0sYT1pLnhheGlzLG89aS55YXhpczt2YXIgaD1hLl9tYWluQXhpcyxwPW8uX21haW5BeGlzLGQ9aC5faWQrcC5faWQsZz1zLl9wbG90c1tkXTtpLm92ZXJsYXlzPVtdLGQhPT1uJiZnPyhpLm1haW5wbG90PWQsaS5tYWlucGxvdGluZm89ZyxmLnB1c2gobikpOihpLm1haW5wbG90PXZvaWQgMCxpLm1haW5wbG90aW5mbz12b2lkIDAsdS5wdXNoKG4pKX1mb3IoZT0wO2U8Zi5sZW5ndGg7ZSsrKW49ZltlXSwoaT1zLl9wbG90c1tuXSkubWFpbnBsb3RpbmZvLm92ZXJsYXlzLnB1c2goaSk7dmFyIG09dS5jb25jYXQoZiksdj1uZXcgQXJyYXkoYyk7Zm9yKGU9MDtlPGM7ZSsrKXtuPW1bZV0saT1zLl9wbG90c1tuXSxhPWkueGF4aXMsbz1pLnlheGlzO3ZhciB5PVtuLGEubGF5ZXIsby5sYXllcixhLm92ZXJsYXlpbmd8fCIiLG8ub3ZlcmxheWluZ3x8IiJdO2ZvcihyPTA7cjxpLm92ZXJsYXlzLmxlbmd0aDtyKyspeS5wdXNoKGkub3ZlcmxheXNbcl0uaWQpO3ZbZV09eX1yZXR1cm4gdn0odCksaT1lLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90IikuZGF0YShyLFN0cmluZyk7aS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuInN1YnBsb3QgIit0WzBdfSkpLGkub3JkZXIoKSxpLmV4aXQoKS5jYWxsKG0sZSksaS5lYWNoKChmdW5jdGlvbihyKXt2YXIgaT1yWzBdLGE9ZS5fcGxvdHNbaV07YS5wbG90Z3JvdXA9bi5zZWxlY3QodGhpcyksZyh0LGEpLGEuZHJhZ2xheWVyPWgoZS5fZHJhZ2dlcnMsImciLGkpfSkpfSxyLnJhbmdlUGxvdD1mdW5jdGlvbih0LGUscil7Zyh0LGUpLGQodCxlLHIpLG8uc3R5bGUodCl9LHIudG9TVkc9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fZ2xpbWFnZXMscj1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIik7ci5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkpLnNlbGVjdEFsbCgiLmdsLWNhbnZhcy1jb250ZXh0LCAuZ2wtY2FudmFzLWZvY3VzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ZS5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmYuc3ZnLCJ4bGluazpocmVmIjp0LHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLHg6MCx5OjAsd2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9KX0pKX0sci51cGRhdGVGeD10KCIuL2dyYXBoX2ludGVyYWN0IikudXBkYXRlRnh9LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTQsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuLi9nZXRfZGF0YSI6ODY1LCIuLi9wbG90cyI6ODkxLCIuL2F0dHJpYnV0ZXMiOjgyNiwiLi9heGlzX2lkcyI6ODMxLCIuL2NvbnN0YW50cyI6ODM0LCIuL2dyYXBoX2ludGVyYWN0Ijo4MzcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MiwiLi9sYXlvdXRfZGVmYXVsdHMiOjg0MywiLi90cmFuc2l0aW9uX2F4ZXMiOjg1MixkMzoxNjl9XSw4NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGw9KHQoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuRk9STUFUX0xJTkssdCgiLi4vLi4vY29uc3RhbnRzL2RvY3MiKS5EQVRFX0ZPUk1BVF9MSU5LLHQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVEQVkpLGM9dCgiLi9jb25zdGFudHMiKSx1PWMuSE9VUl9QQVRURVJOLGY9Yy5XRUVLREFZX1BBVFRFUk47ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJ0aWNrcyJ9LGZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pLHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJ0aWNrcyJ9LGVkaXRUeXBlOiJ0aWNrcyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiLCJtdWx0aWNhdGVnb3J5Il0sZGZsdDoiLSIsZWRpdFR5cGU6ImNhbGMiLF9ub1RlbXBsYXRpbmc6ITB9LGF1dG90eXBlbnVtYmVyczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY29udmVydCB0eXBlcyIsInN0cmljdCJdLGRmbHQ6ImNvbnZlcnQgdHlwZXMiLGVkaXRUeXBlOiJjYWxjIn0sYXV0b3JhbmdlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJyZXZlcnNlZCJdLGRmbHQ6ITAsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vcm1hbCIsInRvemVybyIsIm5vbm5lZ2F0aXZlIl0sZGZsdDoibm9ybWFsIixlZGl0VHlwZToicGxvdCJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfSxhbmltOiEwfSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9LGFuaW06ITB9XSxlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9LGFuaW06ITB9LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltjLmlkUmVnZXgueC50b1N0cmluZygpLGMuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJwbG90In0sc2NhbGVyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhbmdlIiwiZG9tYWluIl0sZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW50b3dhcmQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGVkaXRUeXBlOiJwbG90In0sbWF0Y2hlczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltjLmlkUmVnZXgueC50b1N0cmluZygpLGMuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2VicmVha3M6cygicmFuZ2VicmVhayIse2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxib3VuZHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0scGF0dGVybjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltmLHUsIiJdLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGVkaXRUeXBlOiJjYWxjIixpdGVtczp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9fSxkdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLG1pbjowLGRmbHQ6bH0sZWRpdFR5cGU6ImNhbGMifSksdGlja21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsaW5lYXIiLCJhcnJheSJdLGVkaXRUeXBlOiJ0aWNrcyIsaW1wbGllZEVkaXRzOnt0aWNrMDp2b2lkIDAsZHRpY2s6dm9pZCAwfX0sbnRpY2tzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InRpY2tzIn0sdGljazA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOiJsaW5lYXIifX0sZHRpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOiJsaW5lYXIifX0sdGlja3ZhbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2t0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToidGlja3MifSx0aWNrczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3V0c2lkZSIsImluc2lkZSIsIiJdLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxhYmVscyIsImJvdW5kYXJpZXMiXSxkZmx0OiJsYWJlbHMiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tsYWJlbG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc3RhbnQiLCJwZXJpb2QiXSxkZmx0OiJpbnN0YW50IixlZGl0VHlwZToidGlja3MifSx0aWNrbGFiZWxwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgdG9wIiwiaW5zaWRlIHRvcCIsIm91dHNpZGUgbGVmdCIsImluc2lkZSBsZWZ0Iiwib3V0c2lkZSByaWdodCIsImluc2lkZSByaWdodCIsIm91dHNpZGUgYm90dG9tIiwiaW5zaWRlIGJvdHRvbSJdLGRmbHQ6Im91dHNpZGUiLGVkaXRUeXBlOiJjYWxjIn0sbWlycm9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCJ0aWNrcyIsITEsImFsbCIsImFsbHRpY2tzIl0sZGZsdDohMSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NSxlZGl0VHlwZToidGlja3MifSx0aWNrd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToidGlja3MifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxhdXRvbWFyZ2luOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3dzcGlrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6Im1vZGViYXIifSxzcGlrZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpudWxsLGVkaXRUeXBlOiJub25lIn0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozLGVkaXRUeXBlOiJub25lIn0sc3Bpa2VkYXNoOm8oe30sYSx7ZGZsdDoiZGFzaCIsZWRpdFR5cGU6Im5vbmUifSksc3Bpa2Vtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJ0b2F4aXMiLCJhY3Jvc3MiLCJtYXJrZXIiXSxkZmx0OiJ0b2F4aXMiLGVkaXRUeXBlOiJub25lIn0sc3Bpa2VzbmFwOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJkYXRhIiwiY3Vyc29yIiwiaG92ZXJlZCBkYXRhIl0sZGZsdDoiZGF0YSIsZWRpdFR5cGU6Im5vbmUifSx0aWNrZm9udDpuKHtlZGl0VHlwZToidGlja3MifSksdGlja2FuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDoiYXV0byIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3ByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3d0aWNrcHJlZml4Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSx0aWNrc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2tzdWZmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3dleHBvbmVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sZXhwb25lbnRmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJlIiwiRSIsInBvd2VyIiwiU0kiLCJCIl0sZGZsdDoiQiIsZWRpdFR5cGU6InRpY2tzIn0sbWluZXhwb25lbnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozLG1pbjowLGVkaXRUeXBlOiJ0aWNrcyJ9LHNlcGFyYXRldGhvdXNhbmRzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSx0aWNrZm9ybWF0c3RvcHM6cygidGlja2Zvcm1hdHN0b3AiLHtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJ0aWNrcyJ9LGR0aWNrcmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MifV0sZWRpdFR5cGU6InRpY2tzIn0sdmFsdWU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxlZGl0VHlwZToidGlja3MifSksaG92ZXJmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToibm9uZSJ9LHNob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcytsYXlvdXRzdHlsZSJ9LGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSxsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcytsYXlvdXRzdHlsZSJ9LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGlnaHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LGdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0semVyb2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0semVyb2xpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0sc2hvd2RpdmlkZXJzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJ0aWNrcyJ9LGRpdmlkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToidGlja3MifSxkaXZpZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSIsYy5pZFJlZ2V4LngudG9TdHJpbmcoKSxjLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToicGxvdCJ9LHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLGVkaXRUeXBlOiJwbG90In0sb3ZlcmxheWluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSIsYy5pZFJlZ2V4LngudG9TdHJpbmcoKSxjLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToicGxvdCJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhYm92ZSB0cmFjZXMiLCJiZWxvdyB0cmFjZXMiXSxkZmx0OiJhYm92ZSB0cmFjZXMiLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9XSxkZmx0OlswLDFdLGVkaXRUeXBlOiJwbG90In0scG9zaXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiLCJ0b3RhbCBhc2NlbmRpbmciLCJ0b3RhbCBkZXNjZW5kaW5nIiwibWluIGFzY2VuZGluZyIsIm1pbiBkZXNjZW5kaW5nIiwibWF4IGFzY2VuZGluZyIsIm1heCBkZXNjZW5kaW5nIiwic3VtIGFzY2VuZGluZyIsInN1bSBkZXNjZW5kaW5nIiwibWVhbiBhc2NlbmRpbmciLCJtZWFuIGRlc2NlbmRpbmciLCJtZWRpYW4gYXNjZW5kaW5nIiwibWVkaWFuIGRlc2NlbmRpbmciXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e2F1dG90aWNrOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSx0aXRsZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToidGlja3MifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2NDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2NjQsIi4uLy4uL2NvbnN0YW50cy9kb2NzIjo3NDgsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuL2NvbnN0YW50cyI6ODM0fV0sODQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuaXNVbmlmaWVkSG92ZXIsbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybW9kZV9kZWZhdWx0cyIpLHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGw9dCgiLi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSx1PXQoIi4vdHlwZV9kZWZhdWx0cyIpLGY9dCgiLi9heGlzX2RlZmF1bHRzIiksaD10KCIuL2NvbnN0cmFpbnRzIikscD10KCIuL3Bvc2l0aW9uX2RlZmF1bHRzIiksZD10KCIuL2F4aXNfaWRzIiksZz1kLmlkMm5hbWUsbT1kLm5hbWUyaWQsdj10KCIuL2NvbnN0YW50cyIpLkFYX0lEX1BBVFRFUk4seT10KCIuLi8uLi9yZWdpc3RyeSIpLHg9eS50cmFjZUlzLGI9eS5nZXRDb21wb25lbnRNZXRob2Q7ZnVuY3Rpb24gXyh0LGUscil7QXJyYXkuaXNBcnJheSh0W2VdKT90W2VdLnB1c2gocik6dFtlXT1bcl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgeSx3LFQ9ZS5hdXRvdHlwZW51bWJlcnMsaz17fSxNPXt9LEE9e30sUz17fSxFPXt9LEM9e30sTD17fSxJPXt9LFA9e30sej17fTtmb3IoeT0wO3k8ci5sZW5ndGg7eSsrKXt2YXIgTz1yW3ldO2lmKHgoTywiY2FydGVzaWFuIil8fHgoTywiZ2wyZCIpKXt2YXIgRCxSO2lmKE8ueGF4aXMpRD1nKE8ueGF4aXMpLF8oayxELE8pO2Vsc2UgaWYoTy54YXhlcylmb3Iodz0wO3c8Ty54YXhlcy5sZW5ndGg7dysrKV8oayxnKE8ueGF4ZXNbd10pLE8pO2lmKE8ueWF4aXMpUj1nKE8ueWF4aXMpLF8oayxSLE8pO2Vsc2UgaWYoTy55YXhlcylmb3Iodz0wO3c8Ty55YXhlcy5sZW5ndGg7dysrKV8oayxnKE8ueWF4ZXNbd10pLE8pO2lmKCJmdW5uZWwiPT09Ty50eXBlPyJoIj09PU8ub3JpZW50YXRpb24/KEQmJihNW0RdPSEwKSxSJiYoTFtSXT0hMCkpOlImJihBW1JdPSEwKToiaW1hZ2UiPT09Ty50eXBlPyhSJiYoSVtSXT0hMCksRCYmKElbRF09ITApKTooUiYmKEVbUl09ITAsQ1tSXT0hMCkseChPLCJjYXJwZXQiKSYmKCJjYXJwZXQiIT09Ty50eXBlfHxPLl9jaGVhdGVyKXx8RCYmKFNbRF09ITApKSwiY2FycGV0Ij09PU8udHlwZSYmTy5fY2hlYXRlciYmRCYmKE1bRF09ITApLHgoTywiMmRNYXAiKSYmKFBbRF09ITAsUFtSXT0hMCkseChPLCJvcmllbnRlZCIpKXpbImgiPT09Ty5vcmllbnRhdGlvbj9SOkRdPSEwfX12YXIgRj1lLl9zdWJwbG90cyxCPUYueGF4aXMsTj1GLnlheGlzLGo9bi5zaW1wbGVNYXAoQixnKSxVPW4uc2ltcGxlTWFwKE4sZyksVj1qLmNvbmNhdChVKSxxPWkuYmFja2dyb3VuZDtCLmxlbmd0aCYmTi5sZW5ndGgmJihxPW4uY29lcmNlKHQsZSxsLCJwbG90X2JnY29sb3IiKSk7dmFyIEgsRyxZLFcsWCxaPWkuY29tYmluZShxLGUucGFwZXJfYmdjb2xvcik7ZnVuY3Rpb24gSigpe3ZhciB0PWtbSF18fFtdO1guX3RyYWNlSW5kaWNlcz10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KSksWC5fYW5uSW5kaWNlcz1bXSxYLl9zaGFwZUluZGljZXM9W10sWC5faW1nSW5kaWNlcz1bXSxYLl9zdWJwbG90c1dpdGg9W10sWC5fY291bnRlckF4ZXM9W10sWC5fbmFtZT1YLl9hdHRyPUgsWC5faWQ9R31mdW5jdGlvbiBLKHQsZSl7cmV0dXJuIG4uY29lcmNlKFcsWCxjLHQsZSl9ZnVuY3Rpb24gUSh0LGUpe3JldHVybiBuLmNvZXJjZTIoVyxYLGMsdCxlKX1mdW5jdGlvbiAkKHQpe3JldHVybiJ4Ij09PXQ/TjpCfWZ1bmN0aW9uIHR0KGUscil7Zm9yKHZhciBuPSJ4Ij09PWU/ajpVLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdO289PT1yfHwodFtvXXx8e30pLm92ZXJsYXlpbmd8fGkucHVzaChtKG8pKX1yZXR1cm4gaX12YXIgZXQ9e3g6JCgieCIpLHk6JCgieSIpfSxydD1ldC54LmNvbmNhdChldC55KSxudD17fSxpdD1bXTtmdW5jdGlvbiBhdCgpe3ZhciB0PVcubWF0Y2hlczt2LnRlc3QodCkmJi0xPT09cnQuaW5kZXhPZih0KSYmKG50W3RdPVcudHlwZSxpdD1PYmplY3Qua2V5cyhudCkpfXZhciBvdD1vKHQsZSxyKSxzdD1hKG90KTtmb3IoeT0wO3k8Vi5sZW5ndGg7eSsrKXtIPVZbeV0sRz1tKEgpLFk9SC5jaGFyQXQoMCksbi5pc1BsYWluT2JqZWN0KHRbSF0pfHwodFtIXT17fSksVz10W0hdLFg9cy5uZXdDb250YWluZXIoZSxILFkrImF4aXMiKSxKKCk7dmFyIGx0PSJ4Ij09PVkmJiFTW0hdJiZNW0hdfHwieSI9PT1ZJiYhRVtIXSYmQVtIXSxjdD0ieSI9PT1ZJiYoIUNbSF0mJkxbSF18fElbSF0pLHV0PXtsZXR0ZXI6WSxmb250OmUuZm9udCxvdXRlclRpY2tzOlBbSF0sc2hvd0dyaWQ6IXpbSF0sZGF0YTprW0hdfHxbXSxiZ0NvbG9yOlosY2FsZW5kYXI6ZS5jYWxlbmRhcixhdXRvbWFyZ2luOiEwLHZpc2libGVEZmx0Omx0LHJldmVyc2VEZmx0OmN0LGF1dG90eXBlbnVtYmVyc0RmbHQ6VCxzcGxvbVN0YXNoOigoZS5fc3Bsb21BeGVzfHx7fSlbWV18fHt9KVtHXX07SygidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKSx1KFcsWCxLLHV0KSxmKFcsWCxLLHV0LGUpO3ZhciBmdD1zdCYmWT09PW90LmNoYXJBdCgwKSxodD1RKCJzcGlrZWNvbG9yIixzdD9YLmNvbG9yOnZvaWQgMCkscHQ9USgic3Bpa2V0aGlja25lc3MiLHN0PzEuNTp2b2lkIDApLGR0PVEoInNwaWtlZGFzaCIsc3Q/ImRvdCI6dm9pZCAwKSxndD1RKCJzcGlrZW1vZGUiLHN0PyJhY3Jvc3MiOnZvaWQgMCksbXQ9USgic3Bpa2VzbmFwIixzdD8iaG92ZXJlZCBkYXRhIjp2b2lkIDApO0soInNob3dzcGlrZXMiLCEhKGZ0fHxodHx8cHR8fGR0fHxndHx8bXQpKXx8KGRlbGV0ZSBYLnNwaWtlY29sb3IsZGVsZXRlIFguc3Bpa2V0aGlja25lc3MsZGVsZXRlIFguc3Bpa2VkYXNoLGRlbGV0ZSBYLnNwaWtlbW9kZSxkZWxldGUgWC5zcGlrZXNuYXApLHAoVyxYLEsse2xldHRlcjpZLGNvdW50ZXJBeGVzOmV0W1ldLG92ZXJsYXlhYmxlQXhlczp0dChZLEgpLGdyaWQ6ZS5ncmlkfSksSygidGl0bGUuc3RhbmRvZmYiKSxhdCgpLFguX2lucHV0PVd9Zm9yKHk9MDt5PGl0Lmxlbmd0aDspe0c9aXRbeSsrXSxZPShIPWcoRykpLmNoYXJBdCgwKSxuLmlzUGxhaW5PYmplY3QodFtIXSl8fCh0W0hdPXt9KSxXPXRbSF0sWD1zLm5ld0NvbnRhaW5lcihlLEgsWSsiYXhpcyIpLEooKTt2YXIgdnQ9e2xldHRlcjpZLGZvbnQ6ZS5mb250LG91dGVyVGlja3M6UFtIXSxzaG93R3JpZDoheltIXSxkYXRhOltdLGJnQ29sb3I6WixjYWxlbmRhcjplLmNhbGVuZGFyLGF1dG9tYXJnaW46ITAsdmlzaWJsZURmbHQ6ITEscmV2ZXJzZURmbHQ6ITEsYXV0b3R5cGVudW1iZXJzRGZsdDpULHNwbG9tU3Rhc2g6KChlLl9zcGxvbUF4ZXN8fHt9KVtZXXx8e30pW0ddfTtLKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLFgudHlwZT1udFtHXXx8ImxpbmVhciIsZihXLFgsSyx2dCxlKSxwKFcsWCxLLHtsZXR0ZXI6WSxjb3VudGVyQXhlczpldFtZXSxvdmVybGF5YWJsZUF4ZXM6dHQoWSxIKSxncmlkOmUuZ3JpZH0pLEsoImZpeGVkcmFuZ2UiKSxhdCgpLFguX2lucHV0PVd9dmFyIHl0PWIoInJhbmdlc2xpZGVyIiwiaGFuZGxlRGVmYXVsdHMiKSx4dD1iKCJyYW5nZXNlbGVjdG9yIiwiaGFuZGxlRGVmYXVsdHMiKTtmb3IoeT0wO3k8ai5sZW5ndGg7eSsrKUg9alt5XSxXPXRbSF0sWD1lW0hdLHl0KHQsZSxIKSwiZGF0ZSI9PT1YLnR5cGUmJnh0KFcsWCxlLFUsWC5jYWxlbmRhciksSygiZml4ZWRyYW5nZSIpO2Zvcih5PTA7eTxVLmxlbmd0aDt5Kyspe0g9VVt5XSxXPXRbSF0sWD1lW0hdO3ZhciBidD1lW2coWC5hbmNob3IpXTtLKCJmaXhlZHJhbmdlIixiKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKGJ0KSl9aC5oYW5kbGVEZWZhdWx0cyh0LGUse2F4SWRzOnJ0LmNvbmNhdChpdCkuc29ydChkLmlkU29ydCksYXhIYXNJbWFnZTpJfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2NzksIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJtb2RlX2RlZmF1bHRzIjo2ODIsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL2xheW91dF9hdHRyaWJ1dGVzIjo4ODIsIi4vYXhpc19kZWZhdWx0cyI6ODMwLCIuL2F4aXNfaWRzIjo4MzEsIi4vY29uc3RhbnRzIjo4MzQsIi4vY29uc3RyYWludHMiOjgzNSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyLCIuL3Bvc2l0aW9uX2RlZmF1bHRzIjo4NDUsIi4vdHlwZV9kZWZhdWx0cyI6ODUzfV0sODQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKS5taXgsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKS5saWdodEZyYWN0aW9uLGE9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPShvPW98fHt9KS5kZmx0Q29sb3I7ZnVuY3Rpb24gbChyLG4pe3JldHVybiBhLmNvZXJjZTIodCxlLG8uYXR0cmlidXRlcyxyLG4pfXZhciBjPWwoImxpbmVjb2xvciIscyksdT1sKCJsaW5ld2lkdGgiKTtyKCJzaG93bGluZSIsby5zaG93TGluZXx8ISFjfHwhIXUpfHwoZGVsZXRlIGUubGluZWNvbG9yLGRlbGV0ZSBlLmxpbmV3aWR0aCk7dmFyIGY9bCgiZ3JpZGNvbG9yIixuKHMsby5iZ0NvbG9yLG8uYmxlbmR8fGkpLnRvUmdiU3RyaW5nKCkpLGg9bCgiZ3JpZHdpZHRoIik7aWYocigic2hvd2dyaWQiLG8uc2hvd0dyaWR8fCEhZnx8ISFoKXx8KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkd2lkdGgpLCFvLm5vWmVyb0xpbmUpe3ZhciBwPWwoInplcm9saW5lY29sb3IiLHMpLGQ9bCgiemVyb2xpbmV3aWR0aCIpO3IoInplcm9saW5lIixvLnNob3dHcmlkfHwhIXB8fCEhZCl8fChkZWxldGUgZS56ZXJvbGluZWNvbG9yLGRlbGV0ZSBlLnplcm9saW5ld2lkdGgpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2NDIsIi4uLy4uL2xpYiI6Nzc4LHRpbnljb2xvcjI6NTc2fV0sODQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsLGMsdT1hLmNvdW50ZXJBeGVzfHxbXSxmPWEub3ZlcmxheWFibGVBeGVzfHxbXSxoPWEubGV0dGVyLHA9YS5ncmlkO3AmJihzPXAuX2RvbWFpbnNbaF1bcC5fYXhpc01hcFtlLl9pZF1dLG89cC5fYW5jaG9yc1tlLl9pZF0scyYmKGw9cFtoKyJzaWRlIl0uc3BsaXQoIiAiKVswXSxjPXAuZG9tYWluW2hdWyJyaWdodCI9PT1sfHwidG9wIj09PWw/MTowXSkpLHM9c3x8WzAsMV0sbz1vfHwobih0LnBvc2l0aW9uKT8iZnJlZSI6dVswXXx8ImZyZWUiKSxsPWx8fCgieCI9PT1oPyJib3R0b20iOiJsZWZ0IiksYz1jfHwwLCJmcmVlIj09PWkuY29lcmNlKHQsZSx7YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmVlIl0uY29uY2F0KHUpLGRmbHQ6b319LCJhbmNob3IiKSYmcigicG9zaXRpb24iLGMpLGkuY29lcmNlKHQsZSx7c2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOiJ4Ij09PWg/WyJib3R0b20iLCJ0b3AiXTpbImxlZnQiLCJyaWdodCJdLGRmbHQ6bH19LCJzaWRlIik7dmFyIGQ9ITE7aWYoZi5sZW5ndGgmJihkPWkuY29lcmNlKHQsZSx7b3ZlcmxheWluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMV0uY29uY2F0KGYpLGRmbHQ6ITF9fSwib3ZlcmxheWluZyIpKSwhZCl7dmFyIGc9cigiZG9tYWluIixzKTtnWzBdPmdbMV0tMS80MDk2JiYoZS5kb21haW49cyksaS5ub25lT3JBbGwodC5kb21haW4sZS5kb21haW4scyl9cmV0dXJuIHIoImxheWVyIiksZX19LHsiLi4vLi4vbGliIjo3NzgsImZhc3QtaXNudW1lcmljIjoyNDF9XSw4NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkZST01fQkw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT1yJiYocj1uW3QuY29uc3RyYWludG93YXJkfHwiY2VudGVyIl0pO3ZhciBpPVt0LnIybCh0LnJhbmdlWzBdKSx0LnIybCh0LnJhbmdlWzFdKV0sYT1pWzBdKyhpWzFdLWlbMF0pKnI7dC5yYW5nZT10Ll9pbnB1dC5yYW5nZT1bdC5sMnIoYSsoaVswXS1hKSplKSx0LmwycihhKyhpWzFdLWEpKmUpXSx0LnNldFNjYWxlKCl9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NX1dLDg0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwb2x5Ym9vbGpzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikuZGFzaFN0eWxlLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikubWFrZUV2ZW50RGF0YSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyIpLHU9Yy5mcmVlTW9kZSxmPWMucmVjdE1vZGUsaD1jLmRyYXdNb2RlLHA9Yy5vcGVuTW9kZSxkPWMuc2VsZWN0TW9kZSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvZGlzcGxheV9vdXRsaW5lcyIpLG09dCgiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9oZWxwZXJzIikuaGFuZGxlRWxsaXBzZSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvbmV3c2hhcGVzIikseT10KCIuLi8uLi9saWIiKSx4PXQoIi4uLy4uL2xpYi9wb2x5Z29uIiksYj10KCIuLi8uLi9saWIvdGhyb3R0bGUiKSxfPXQoIi4vYXhpc19pZHMiKS5nZXRGcm9tSWQsdz10KCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiKSxUPXQoIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIikucmVkcmF3UmVnbFRyYWNlcyxrPXQoIi4vY29uc3RhbnRzIiksTT1rLk1JTlNFTEVDVCxBPXguZmlsdGVyLFM9eC50ZXN0ZXIsRT10KCIuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJTZWxlY3QsQz10KCIuL2hlbHBlcnMiKSxMPUMucDJyLEk9Qy5heFZhbHVlLFA9Qy5nZXRUcmFuc2Zvcm07ZnVuY3Rpb24geih0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxmLGgsZCxtLHYseT1lLl9ob3ZlcmRhdGEseD1lLl9mdWxsTGF5b3V0LmNsaWNrbW9kZS5pbmRleE9mKCJldmVudCIpPi0xLGI9W107aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJkFycmF5LmlzQXJyYXkodCkmJiEwIT09dFswXS5ob3Zlck9uQm94fSh5KSl7Rih0LGUsYSk7dmFyIF89ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPS0xLG89W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZihyPWVbbl0saS5mdWxsRGF0YS5fZXhwYW5kZWRJbmRleD09PXIuY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXgpe2lmKCEwPT09aS5ob3Zlck9uQm94KWJyZWFrO3ZvaWQgMCE9PWkucG9pbnROdW1iZXI/YT1pLnBvaW50TnVtYmVyOnZvaWQgMCE9PWkuYmluTnVtYmVyJiYoYT1pLmJpbk51bWJlcixvPWkucG9pbnROdW1iZXJzKTticmVha31yZXR1cm57cG9pbnROdW1iZXI6YSxwb2ludE51bWJlcnM6byxzZWFyY2hJbmZvOnJ9fSh5LHM9TihlLHIsbixpKSk7aWYoXy5wb2ludE51bWJlcnMubGVuZ3RoPjA/ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1bXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKShyPXRbaV0pLmNkWzBdLnRyYWNlLnNlbGVjdGVkcG9pbnRzJiZyLmNkWzBdLnRyYWNlLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD4wJiZhLnB1c2gocik7aWYoMT09PWEubGVuZ3RoJiZhWzBdPT09ZS5zZWFyY2hJbmZvJiYobj1lLnNlYXJjaEluZm8uY2RbMF0udHJhY2UpLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD09PWUucG9pbnROdW1iZXJzLmxlbmd0aCl7Zm9yKGk9MDtpPGUucG9pbnROdW1iZXJzLmxlbmd0aDtpKyspaWYobi5zZWxlY3RlZHBvaW50cy5pbmRleE9mKGUucG9pbnROdW1iZXJzW2ldKTwwKXJldHVybiExO3JldHVybiEwfXJldHVybiExfShzLF8pOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTA7Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlPXRbbl0sKHI9ZS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMpe2lmKHIuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPjEpcmV0dXJuITE7aWYoKGkrPXIuc2VsZWN0ZWRwb2ludHMubGVuZ3RoKT4xKXJldHVybiExfXJldHVybiAxPT09aX0ocykmJihoPWooXykpKXtmb3IobyYmby5yZW1vdmUoKSx2PTA7djxzLmxlbmd0aDt2KyspKGw9c1t2XSkuX21vZHVsZS5zZWxlY3RQb2ludHMobCwhMSk7VShlLHMpLEIoYSkseCYmZS5lbWl0KCJwbG90bHlfZGVzZWxlY3QiLG51bGwpfWVsc2V7Zm9yKGQ9dC5zaGlmdEtleSYmKHZvaWQgMCE9PWg/aDpqKF8pKSxjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57cG9pbnROdW1iZXI6dCxzZWFyY2hJbmZvOmUsc3VidHJhY3Q6cn19KF8ucG9pbnROdW1iZXIsXy5zZWFyY2hJbmZvLGQpLHU9UihhLnNlbGVjdGlvbkRlZnMuY29uY2F0KFtjXSkpLHY9MDt2PHMubGVuZ3RoO3YrKylpZihmPVYoc1t2XS5fbW9kdWxlLnNlbGVjdFBvaW50cyhzW3ZdLHUpLHNbdl0pLGIubGVuZ3RoKWZvcih2YXIgdz0wO3c8Zi5sZW5ndGg7dysrKWIucHVzaChmW3ddKTtlbHNlIGI9ZjtpZihVKGUscyxtPXtwb2ludHM6Yn0pLGMmJmEmJmEuc2VsZWN0aW9uRGVmcy5wdXNoKGMpLG8pe3ZhciBUPWEubWVyZ2VkUG9seWdvbnMsaz1wKGEuZHJhZ21vZGUpO2cocShULGspLG8sYSl9eCYmZS5lbWl0KCJwbG90bHlfc2VsZWN0ZWQiLG0pfX19ZnVuY3Rpb24gTyh0KXtyZXR1cm4icG9pbnROdW1iZXIiaW4gdCYmInNlYXJjaEluZm8iaW4gdH1mdW5jdGlvbiBEKHQpe3JldHVybnt4bWluOjAseG1heDowLHltaW46MCx5bWF4OjAscHRzOltdLGNvbnRhaW5zOmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuc2VhcmNoSW5mby5jZFswXS50cmFjZS5fZXhwYW5kZWRJbmRleDtyZXR1cm4gaS5jZFswXS50cmFjZS5fZXhwYW5kZWRJbmRleD09PWEmJm49PT10LnBvaW50TnVtYmVyfSxpc1JlY3Q6ITEsZGVnZW5lcmF0ZTohMSxzdWJ0cmFjdDp0LnN1YnRyYWN0fX1mdW5jdGlvbiBSKHQpe2Zvcih2YXIgZT1bXSxyPU8odFswXSk/MDp0WzBdWzBdWzBdLG49cixpPU8odFswXSk/MDp0WzBdWzBdWzFdLGE9aSxvPTA7bzx0Lmxlbmd0aDtvKyspaWYoTyh0W29dKSllLnB1c2goRCh0W29dKSk7ZWxzZXt2YXIgcz14LnRlc3Rlcih0W29dKTtzLnN1YnRyYWN0PXRbb10uc3VidHJhY3QsZS5wdXNoKHMpLHI9TWF0aC5taW4ocixzLnhtaW4pLG49TWF0aC5tYXgobixzLnhtYXgpLGk9TWF0aC5taW4oaSxzLnltaW4pLGE9TWF0aC5tYXgoYSxzLnltYXgpfXJldHVybnt4bWluOnIseG1heDpuLHltaW46aSx5bWF4OmEscHRzOltdLGNvbnRhaW5zOmZ1bmN0aW9uKHQscixuLGkpe2Zvcih2YXIgYT0hMSxvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5jb250YWlucyh0LHIsbixpKSYmKGE9ITE9PT1lW29dLnN1YnRyYWN0KTtyZXR1cm4gYX0saXNSZWN0OiExLGRlZ2VuZXJhdGU6ITF9fWZ1bmN0aW9uIEYodCxlLHIpe2UuX2Z1bGxMYXlvdXQuX2RyYXdpbmc9ITE7dmFyIG49ZS5fZnVsbExheW91dCxpPXIucGxvdGluZm8sYT1yLmRyYWdtb2RlLG89bi5fbGFzdFNlbGVjdGVkU3VicGxvdCYmbi5fbGFzdFNlbGVjdGVkU3VicGxvdD09PWkuaWQscz0odC5zaGlmdEtleXx8dC5hbHRLZXkpJiYhKGgoYSkmJnAoYSkpO28mJnMmJmkuc2VsZWN0aW9uJiZpLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzJiYhci5zZWxlY3Rpb25EZWZzPyhyLnNlbGVjdGlvbkRlZnM9aS5zZWxlY3Rpb24uc2VsZWN0aW9uRGVmcyxyLm1lcmdlZFBvbHlnb25zPWkuc2VsZWN0aW9uLm1lcmdlZFBvbHlnb25zKTpzJiZpLnNlbGVjdGlvbnx8QihyKSxvfHwoRShlKSxuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PWkuaWQpfWZ1bmN0aW9uIEIodCl7dmFyIGU9dC5kcmFnbW9kZSxyPXQucGxvdGluZm8sbj10LmdkO2lmKG4uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTAmJm4uX2Z1bGxMYXlvdXQuX2RlYWN0aXZhdGVTaGFwZShuKSxoKGUpKXt2YXIgYT1uLl9mdWxsTGF5b3V0Ll96b29tbGF5ZXIuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUtIityLmlkKTtpZihhJiZuLl9mdWxsTGF5b3V0Ll9kcmF3aW5nKXt2YXIgbz12KGEsdCk7byYmaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLG4se3NoYXBlczpvfSksbi5fZnVsbExheW91dC5fZHJhd2luZz0hMX19ci5zZWxlY3Rpb249e30sci5zZWxlY3Rpb24uc2VsZWN0aW9uRGVmcz10LnNlbGVjdGlvbkRlZnM9W10sci5zZWxlY3Rpb24ubWVyZ2VkUG9seWdvbnM9dC5tZXJnZWRQb2x5Z29ucz1bXX1mdW5jdGlvbiBOKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdLGw9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9pZH0pKSxjPXIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5faWR9KSk7Zm9yKG89MDtvPHQuY2FsY2RhdGEubGVuZ3RoO28rKylpZighMD09PShhPShpPXQuY2FsY2RhdGFbb10pWzBdLnRyYWNlKS52aXNpYmxlJiZhLl9tb2R1bGUmJmEuX21vZHVsZS5zZWxlY3RQb2ludHMpaWYoIW58fGEuc3VicGxvdCE9PW4mJmEuZ2VvIT09bilpZigic3Bsb20iPT09YS50eXBlJiZhLl94YXhlc1tsWzBdXSYmYS5feWF4ZXNbY1swXV0pe3ZhciB1PWgoYS5fbW9kdWxlLGksZVswXSxyWzBdKTt1LnNjZW5lPXQuX2Z1bGxMYXlvdXQuX3NwbG9tU2NlbmVzW2EudWlkXSxzLnB1c2godSl9ZWxzZSBpZigic2Fua2V5Ij09PWEudHlwZSl7dmFyIGY9aChhLl9tb2R1bGUsaSxlWzBdLHJbMF0pO3MucHVzaChmKX1lbHNle2lmKC0xPT09bC5pbmRleE9mKGEueGF4aXMpKWNvbnRpbnVlO2lmKC0xPT09Yy5pbmRleE9mKGEueWF4aXMpKWNvbnRpbnVlO3MucHVzaChoKGEuX21vZHVsZSxpLF8odCxhLnhheGlzKSxfKHQsYS55YXhpcykpKX1lbHNlIHMucHVzaChoKGEuX21vZHVsZSxpLGVbMF0sclswXSkpO3JldHVybiBzO2Z1bmN0aW9uIGgodCxlLHIsbil7cmV0dXJue19tb2R1bGU6dCxjZDplLHhheGlzOnIseWF4aXM6bn19fWZ1bmN0aW9uIGoodCl7dmFyIGU9dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlLHI9dC5wb2ludE51bWJlcixuPXQucG9pbnROdW1iZXJzLGk9bi5sZW5ndGg+MD9uWzBdOnI7cmV0dXJuISFlLnNlbGVjdGVkcG9pbnRzJiZlLnNlbGVjdGVkcG9pbnRzLmluZGV4T2YoaSk+LTF9ZnVuY3Rpb24gVSh0LGUscil7dmFyIG4sYSxvLHM7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGw9ZVtuXS5jZFswXS50cmFjZS5fZnVsbElucHV0LGM9dC5fZnVsbExheW91dC5fdHJhY2VQcmVHVUlbbC51aWRdfHx7fTt2b2lkIDA9PT1jLnNlbGVjdGVkcG9pbnRzJiYoYy5zZWxlY3RlZHBvaW50cz1sLl9pbnB1dC5zZWxlY3RlZHBvaW50c3x8bnVsbCl9aWYocil7dmFyIHU9ci5wb2ludHN8fFtdO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspKHM9ZVtuXS5jZFswXS50cmFjZSkuX2lucHV0LnNlbGVjdGVkcG9pbnRzPXMuX2Z1bGxJbnB1dC5zZWxlY3RlZHBvaW50cz1bXSxzLl9mdWxsSW5wdXQhPT1zJiYocy5zZWxlY3RlZHBvaW50cz1bXSk7Zm9yKG49MDtuPHUubGVuZ3RoO24rKyl7dmFyIGY9dVtuXSxoPWYuZGF0YSxwPWYuZnVsbERhdGE7Zi5wb2ludEluZGljZXM/KFtdLnB1c2guYXBwbHkoaC5zZWxlY3RlZHBvaW50cyxmLnBvaW50SW5kaWNlcykscy5fZnVsbElucHV0IT09cyYmW10ucHVzaC5hcHBseShwLnNlbGVjdGVkcG9pbnRzLGYucG9pbnRJbmRpY2VzKSk6KGguc2VsZWN0ZWRwb2ludHMucHVzaChmLnBvaW50SW5kZXgpLHMuX2Z1bGxJbnB1dCE9PXMmJnAuc2VsZWN0ZWRwb2ludHMucHVzaChmLnBvaW50SW5kZXgpKX19ZWxzZSBmb3Iobj0wO248ZS5sZW5ndGg7bisrKWRlbGV0ZShzPWVbbl0uY2RbMF0udHJhY2UpLnNlbGVjdGVkcG9pbnRzLGRlbGV0ZSBzLl9pbnB1dC5zZWxlY3RlZHBvaW50cyxzLl9mdWxsSW5wdXQhPT1zJiZkZWxldGUgcy5fZnVsbElucHV0LnNlbGVjdGVkcG9pbnRzO3ZhciBkPSExO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3M9KG89KGE9ZVtuXSkuY2QpWzBdLnRyYWNlLGkudHJhY2VJcyhzLCJyZWdsIikmJihkPSEwKTt2YXIgZz1hLl9tb2R1bGUsbT1nLnN0eWxlT25TZWxlY3R8fGcuc3R5bGU7bSYmKG0odCxvLG9bMF0ubm9kZTMpLG9bMF0ubm9kZVJhbmdlUGxvdDMmJm0odCxvLG9bMF0ubm9kZVJhbmdlUGxvdDMpKX1kJiYodyh0KSxUKHQpKX1mdW5jdGlvbiBWKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9ZS5jZCxuPWUuY2RbMF0udHJhY2UsaT0wO2k8dC5sZW5ndGg7aSsrKXRbaV09bCh0W2ldLG4scik7cmV0dXJuIHR9ZnVuY3Rpb24gcSh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3Jbbl09W107Zm9yKHZhciBpPTA7aTx0W25dLmxlbmd0aDtpKyspe3Jbbl1baV09W10scltuXVtpXVswXT1pPyJMIjoiTSI7Zm9yKHZhciBhPTA7YTx0W25dW2ldLmxlbmd0aDthKyspcltuXVtpXS5wdXNoKHRbbl1baV1bYV0pfWV8fHJbbl0ucHVzaChbIloiLHJbbl1bMF1bMV0scltuXVswXVsyXV0pfXJldHVybiByfWUuZXhwb3J0cz17cHJlcFNlbGVjdDpmdW5jdGlvbih0LGUscixpLGwpe3ZhciBjPXUobCksdj1mKGwpLHg9cChsKSxfPWgobCksdz1kKGwpLFQ9ImRyYXdjaXJjbGUiPT09bCxFPSJkcmF3bGluZSI9PT1sfHxULEM9aS5nZCxPPUMuX2Z1bGxMYXlvdXQsRD1PLl96b29tbGF5ZXIsaj1pLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSD1pLnBsb3RpbmZvLEc9UChIKSxZPWUtai5sZWZ0LFc9ci1qLnRvcDtPLl9jYWxjSW52ZXJzZVRyYW5zZm9ybShDKTt2YXIgWD15LmFwcGx5M0RUcmFuc2Zvcm0oTy5faW52VHJhbnNmb3JtKShZLFcpO1k9WFswXSxXPVhbMV07dmFyIFosSixLLFEsJCx0dCxldCxydD1PLl9pbnZTY2FsZVgsbnQ9Ty5faW52U2NhbGVZLGl0PVksYXQ9VyxvdD0iTSIrWSsiLCIrVyxzdD1pLnhheGVzWzBdLl9sZW5ndGgsbHQ9aS55YXhlc1swXS5fbGVuZ3RoLGN0PWkueGF4ZXMuY29uY2F0KGkueWF4ZXMpLHV0PXQuYWx0S2V5JiYhKGgobCkmJngpO0YodCxDLGkpLGMmJihaPUEoW1tZLFddXSxrLkJFTkRQWCkpO3ZhciBmdD1ELnNlbGVjdEFsbCgicGF0aC5zZWxlY3Qtb3V0bGluZS0iK0guaWQpLmRhdGEoXz9bMF06WzEsMl0pLGh0PU8ubmV3c2hhcGU7ZnQuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJzZWxlY3Qtb3V0bGluZSBzZWxlY3Qtb3V0bGluZS0iK3QrIiBzZWxlY3Qtb3V0bGluZS0iK0guaWR9KSkuc3R5bGUoXz97b3BhY2l0eTpodC5vcGFjaXR5LzIsZmlsbDp4P3ZvaWQgMDpodC5maWxsY29sb3Isc3Ryb2tlOmh0LmxpbmUuY29sb3IsInN0cm9rZS1kYXNoYXJyYXkiOmEoaHQubGluZS5kYXNoLGh0LmxpbmUud2lkdGgpLCJzdHJva2Utd2lkdGgiOmh0LmxpbmUud2lkdGgrInB4In06e30pLmF0dHIoImZpbGwtcnVsZSIsaHQuZmlsbHJ1bGUpLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhIV8pLmF0dHIoInRyYW5zZm9ybSIsRykuYXR0cigiZCIsb3QrIloiKTt2YXIgcHQsZHQ9RC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOm8uYmFja2dyb3VuZCxzdHJva2U6by5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxfSkuYXR0cigidHJhbnNmb3JtIixHKS5hdHRyKCJkIiwiTTAsMFoiKSxndD1PLl91aWQray5TRUxFQ1RJRCxtdD1bXSx2dD1OKEMsaS54YXhlcyxpLnlheGVzLGkuc3VicGxvdCk7ZnVuY3Rpb24geXQodCxlKXtyZXR1cm4gdC1lfXB0PUguZmlsbFJhbmdlSXRlbXM/SC5maWxsUmFuZ2VJdGVtczp2P2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYW5nZT17fTtmb3IoJD0wOyQ8Y3QubGVuZ3RoOyQrKyl7dmFyIG49Y3RbJF0saT1uLl9pZC5jaGFyQXQoMCk7cltuLl9pZF09W0wobixlW2krIm1pbiJdKSxMKG4sZVtpKyJtYXgiXSldLnNvcnQoeXQpfX06ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubGFzc29Qb2ludHM9e307Zm9yKCQ9MDskPGN0Lmxlbmd0aDskKyspe3ZhciBpPWN0WyRdO25baS5faWRdPXIuZmlsdGVyZWQubWFwKEkoaSkpfX0saS5tb3ZlRm49ZnVuY3Rpb24odCxlKXtpdD1NYXRoLm1heCgwLE1hdGgubWluKHN0LHJ0KnQrWSkpLGF0PU1hdGgubWF4KDAsTWF0aC5taW4obHQsbnQqZStXKSk7dmFyIHI9TWF0aC5hYnMoaXQtWSksYT1NYXRoLmFicyhhdC1XKTtpZih2KXt2YXIgbyxzLGw7aWYodyl7dmFyIHU9Ty5zZWxlY3RkaXJlY3Rpb247c3dpdGNoKG89ImFueSI9PT11P2E8TWF0aC5taW4oLjYqcixNKT8iaCI6cjxNYXRoLm1pbiguNiphLE0pPyJ2IjoiZCI6dSl7Y2FzZSJoIjpzPVQ/bHQvMjowLGw9bHQ7YnJlYWs7Y2FzZSJ2IjpzPVQ/c3QvMjowLGw9c3R9fWlmKF8pc3dpdGNoKE8ubmV3c2hhcGUuZHJhd2RpcmVjdGlvbil7Y2FzZSJ2ZXJ0aWNhbCI6bz0iaCIscz1UP2x0LzI6MCxsPWx0O2JyZWFrO2Nhc2UiaG9yaXpvbnRhbCI6bz0idiIscz1UP3N0LzI6MCxsPXN0O2JyZWFrO2Nhc2Uib3J0aG8iOnI8YT8obz0iaCIscz1XLGw9YXQpOihvPSJ2IixzPVksbD1pdCk7YnJlYWs7ZGVmYXVsdDpvPSJkIn0iaCI9PT1vPygoUT1FP20oVCxbaXQsc10sW2l0LGxdKTpbW1ksc10sW1ksbF0sW2l0LGxdLFtpdCxzXV0pLnhtaW49RT9pdDpNYXRoLm1pbihZLGl0KSxRLnhtYXg9RT9pdDpNYXRoLm1heChZLGl0KSxRLnltaW49TWF0aC5taW4ocyxsKSxRLnltYXg9TWF0aC5tYXgocyxsKSxkdC5hdHRyKCJkIiwiTSIrUS54bWluKyIsIisoVy1NKSsiaC00diIrMipNKyJoNFpNIisoUS54bWF4LTEpKyIsIisoVy1NKSsiaDR2IisyKk0rImgtNFoiKSk6InYiPT09bz8oKFE9RT9tKFQsW3MsYXRdLFtsLGF0XSk6W1tzLFddLFtzLGF0XSxbbCxhdF0sW2wsV11dKS54bWluPU1hdGgubWluKHMsbCksUS54bWF4PU1hdGgubWF4KHMsbCksUS55bWluPUU/YXQ6TWF0aC5taW4oVyxhdCksUS55bWF4PUU/YXQ6TWF0aC5tYXgoVyxhdCksZHQuYXR0cigiZCIsIk0iKyhZLU0pKyIsIitRLnltaW4rInYtNGgiKzIqTSsidjRaTSIrKFktTSkrIiwiKyhRLnltYXgtMSkrInY0aCIrMipNKyJ2LTRaIikpOiJkIj09PW8mJigoUT1FP20oVCxbWSxXXSxbaXQsYXRdKTpbW1ksV10sW1ksYXRdLFtpdCxhdF0sW2l0LFddXSkueG1pbj1NYXRoLm1pbihZLGl0KSxRLnhtYXg9TWF0aC5tYXgoWSxpdCksUS55bWluPU1hdGgubWluKFcsYXQpLFEueW1heD1NYXRoLm1heChXLGF0KSxkdC5hdHRyKCJkIiwiTTAsMFoiKSl9ZWxzZSBjJiYoWi5hZGRQdChbaXQsYXRdKSxRPVouZmlsdGVyZWQpO2kuc2VsZWN0aW9uRGVmcyYmaS5zZWxlY3Rpb25EZWZzLmxlbmd0aD8oSz1mdW5jdGlvbih0LGUscil7aWYocilyZXR1cm4gbi5kaWZmZXJlbmNlKHtyZWdpb25zOnQsaW52ZXJ0ZWQ6ITF9LHtyZWdpb25zOltlXSxpbnZlcnRlZDohMX0pLnJlZ2lvbnM7cmV0dXJuIG4udW5pb24oe3JlZ2lvbnM6dCxpbnZlcnRlZDohMX0se3JlZ2lvbnM6W2VdLGludmVydGVkOiExfSkucmVnaW9uc30oaS5tZXJnZWRQb2x5Z29ucyxRLHV0KSxRLnN1YnRyYWN0PXV0LEo9UihpLnNlbGVjdGlvbkRlZnMuY29uY2F0KFtRXSkpKTooSz1bUV0sSj1TKFEpKSxnKHEoSyx4KSxmdCxpKSx3JiZiLnRocm90dGxlKGd0LGsuU0VMRUNUREVMQVksKGZ1bmN0aW9uKCl7dmFyIHQ7bXQ9W107dmFyIGUscj1bXTtmb3IoJD0wOyQ8dnQubGVuZ3RoOyQrKylpZihlPSh0dD12dFskXSkuX21vZHVsZS5zZWxlY3RQb2ludHModHQsSiksci5wdXNoKGUpLHQ9VihlLHR0KSxtdC5sZW5ndGgpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspbXQucHVzaCh0W25dKTtlbHNlIG10PXQ7VShDLHZ0LGV0PXtwb2ludHM6bXR9KSxwdChldCxRLFopLGkuZ2QuZW1pdCgicGxvdGx5X3NlbGVjdGluZyIsZXQpfSkpfSxpLmNsaWNrRm49ZnVuY3Rpb24odCxlKXtpZihkdC5yZW1vdmUoKSxDLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wKUMuX2Z1bGxMYXlvdXQuX2RlYWN0aXZhdGVTaGFwZShDKTtlbHNlIGlmKCFfKXt2YXIgcj1PLmNsaWNrbW9kZTtiLmRvbmUoZ3QpLnRoZW4oKGZ1bmN0aW9uKCl7aWYoYi5jbGVhcihndCksMj09PXQpe2ZvcihmdC5yZW1vdmUoKSwkPTA7JDx2dC5sZW5ndGg7JCsrKSh0dD12dFskXSkuX21vZHVsZS5zZWxlY3RQb2ludHModHQsITEpO1UoQyx2dCksQihpKSxDLmVtaXQoInBsb3RseV9kZXNlbGVjdCIsbnVsbCl9ZWxzZSByLmluZGV4T2YoInNlbGVjdCIpPi0xJiZ6KGUsQyxpLnhheGVzLGkueWF4ZXMsaS5zdWJwbG90LGksZnQpLCJldmVudCI9PT1yJiZDLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsdm9pZCAwKTtzLmNsaWNrKEMsZSl9KSkuY2F0Y2goeS5lcnJvcil9fSxpLmRvbmVGbj1mdW5jdGlvbigpe2R0LnJlbW92ZSgpLGIuZG9uZShndCkudGhlbigoZnVuY3Rpb24oKXtiLmNsZWFyKGd0KSxpLmdkLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsZXQpLFEmJmkuc2VsZWN0aW9uRGVmcyYmKFEuc3VidHJhY3Q9dXQsaS5zZWxlY3Rpb25EZWZzLnB1c2goUSksaS5tZXJnZWRQb2x5Z29ucy5sZW5ndGg9MCxbXS5wdXNoLmFwcGx5KGkubWVyZ2VkUG9seWdvbnMsSykpLGkuZG9uZUZuQ29tcGxldGVkJiZpLmRvbmVGbkNvbXBsZXRlZChtdCl9KSkuY2F0Y2goeS5lcnJvciksXyYmQihpKX19LGNsZWFyU2VsZWN0OkUsY2xlYXJTZWxlY3Rpb25zQ2FjaGU6QixzZWxlY3RPbkNsaWNrOnp9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NjEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjY1LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2ODMsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6Njc5LCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2Rpc3BsYXlfb3V0bGluZXMiOjcyOCwiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9oZWxwZXJzIjo3MjksIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvbmV3c2hhcGVzIjo3MzAsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiOjc2MiwiLi4vLi4vbGliL3BvbHlnb24iOjc5MCwiLi4vLi4vbGliL3Rocm90dGxlIjo4MDQsIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIjo4MTgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4vYXhpc19pZHMiOjgzMSwiLi9jb25zdGFudHMiOjgzNCwiLi9oYW5kbGVfb3V0bGluZSI6ODM4LCIuL2hlbHBlcnMiOjgzOSxwb2x5Ym9vbGpzOjUxN31dLDg0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZDMtdGltZS1mb3JtYXQiKS51dGNGb3JtYXQsYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89dCgiLi4vLi4vbGliIikscz1vLmNsZWFuTnVtYmVyLGw9by5tczJEYXRlVGltZSxjPW8uZGF0ZVRpbWUybXMsdT1vLmVuc3VyZU51bWJlcixmPW8uaXNBcnJheU9yVHlwZWRBcnJheSxoPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxwPWguRlBfU0FGRSxkPWguQkFETlVNLGc9aC5MT0dfQ0xJUCxtPWguT05FV0VFSyx2PWguT05FREFZLHk9aC5PTkVIT1VSLHg9aC5PTkVNSU4sYj1oLk9ORVNFQyxfPXQoIi4vYXhpc19pZHMiKSx3PXQoIi4vY29uc3RhbnRzIiksVD13LkhPVVJfUEFUVEVSTixrPXcuV0VFS0RBWV9QQVRURVJOO2Z1bmN0aW9uIE0odCl7cmV0dXJuIE1hdGgucG93KDEwLHQpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIG51bGwhPXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj10Ll9pZHx8IngiLGg9ci5jaGFyQXQoMCk7ZnVuY3Rpb24gUyhlLHIpe2lmKGU+MClyZXR1cm4gTWF0aC5sb2coZSkvTWF0aC5MTjEwO2lmKGU8PTAmJnImJnQucmFuZ2UmJjI9PT10LnJhbmdlLmxlbmd0aCl7dmFyIG49dC5yYW5nZVswXSxpPXQucmFuZ2VbMV07cmV0dXJuLjUqKG4raS0yKmcqTWF0aC5hYnMobi1pKSl9cmV0dXJuIGR9ZnVuY3Rpb24gRShlLHIsbixpKXtpZigoaXx8e30pLm1zVVRDJiZhKGUpKXJldHVybitlO3ZhciBzPWMoZSxufHx0LmNhbGVuZGFyKTtpZihzPT09ZCl7aWYoIWEoZSkpcmV0dXJuIGQ7ZT0rZTt2YXIgbD1NYXRoLmZsb29yKDEwKm8ubW9kKGUrLjA1LDEpKSx1PU1hdGgucm91bmQoZS1sLzEwKTtzPWMobmV3IERhdGUodSkpK2wvMTB9cmV0dXJuIHN9ZnVuY3Rpb24gQyhlLHIsbil7cmV0dXJuIGwoZSxyLG58fHQuY2FsZW5kYXIpfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIHQuX2NhdGVnb3JpZXNbTWF0aC5yb3VuZChlKV19ZnVuY3Rpb24gSShlKXtpZihBKGUpKXtpZih2b2lkIDA9PT10Ll9jYXRlZ29yaWVzTWFwJiYodC5fY2F0ZWdvcmllc01hcD17fSksdm9pZCAwIT09dC5fY2F0ZWdvcmllc01hcFtlXSlyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXTt0Ll9jYXRlZ29yaWVzLnB1c2goIm51bWJlciI9PXR5cGVvZiBlP1N0cmluZyhlKTplKTt2YXIgcj10Ll9jYXRlZ29yaWVzLmxlbmd0aC0xO3JldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdPXIscn1yZXR1cm4gZH1mdW5jdGlvbiBQKGUpe2lmKHQuX2NhdGVnb3JpZXNNYXApcmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV19ZnVuY3Rpb24geih0KXt2YXIgZT1QKHQpO3JldHVybiB2b2lkIDAhPT1lP2U6YSh0KT8rdDp2b2lkIDB9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gYSh0KT8rdDpQKHQpfWZ1bmN0aW9uIEQodCxlLHIpe3JldHVybiBuLnJvdW5kKHIrZSp0LDIpfWZ1bmN0aW9uIFIodCxlLHIpe3JldHVybih0LXIpL2V9dmFyIEY9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSk/RChlLHQuX20sdC5fYik6ZH0sQj1mdW5jdGlvbihlKXtyZXR1cm4gUihlLHQuX20sdC5fYil9O2lmKHQucmFuZ2VicmVha3Mpe3ZhciBOPSJ5Ij09PWg7Rj1mdW5jdGlvbihlKXtpZighYShlKSlyZXR1cm4gZDt2YXIgcj10Ll9yYW5nZWJyZWFrcy5sZW5ndGg7aWYoIXIpcmV0dXJuIEQoZSx0Ll9tLHQuX2IpO3ZhciBuPU47dC5yYW5nZVswXT50LnJhbmdlWzFdJiYobj0hbik7Zm9yKHZhciBpPW4/LTE6MSxvPWkqZSxzPTAsbD0wO2w8cjtsKyspe3ZhciBjPWkqdC5fcmFuZ2VicmVha3NbbF0ubWluLHU9aSp0Ll9yYW5nZWJyZWFrc1tsXS5tYXg7aWYobzxjKWJyZWFrO2lmKCEobz51KSl7cz1vPChjK3UpLzI/bDpsKzE7YnJlYWt9cz1sKzF9dmFyIGY9dC5fQltzXXx8MDtyZXR1cm4gaXNGaW5pdGUoZik/RChlLHQuX20yLGYpOjB9LEI9ZnVuY3Rpb24oZSl7dmFyIHI9dC5fcmFuZ2VicmVha3MubGVuZ3RoO2lmKCFyKXJldHVybiBSKGUsdC5fbSx0Ll9iKTtmb3IodmFyIG49MCxpPTA7aTxyJiYhKGU8dC5fcmFuZ2VicmVha3NbaV0ucG1pbik7aSsrKWU+dC5fcmFuZ2VicmVha3NbaV0ucG1heCYmKG49aSsxKTtyZXR1cm4gUihlLHQuX20yLHQuX0Jbbl0pfX10LmMybD0ibG9nIj09PXQudHlwZT9TOnUsdC5sMmM9ImxvZyI9PT10LnR5cGU/TTp1LHQubDJwPUYsdC5wMmw9Qix0LmMycD0ibG9nIj09PXQudHlwZT9mdW5jdGlvbih0LGUpe3JldHVybiBGKFModCxlKSl9OkYsdC5wMmM9ImxvZyI9PT10LnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIE0oQih0KSl9OkIsLTEhPT1bImxpbmVhciIsIi0iXS5pbmRleE9mKHQudHlwZSk/KHQuZDJyPXQucjJkPXQuZDJjPXQucjJjPXQuZDJsPXQucjJsPXMsdC5jMmQ9dC5jMnI9dC5sMmQ9dC5sMnI9dSx0LmQycD10LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAocyhlKSl9LHQucDJkPXQucDJyPUIsdC5jbGVhblBvcz11KToibG9nIj09PXQudHlwZT8odC5kMnI9dC5kMmw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gUyhzKHQpLGUpfSx0LnIyZD10LnIyYz1mdW5jdGlvbih0KXtyZXR1cm4gTShzKHQpKX0sdC5kMmM9dC5yMmw9cyx0LmMyZD10Lmwycj11LHQuYzJyPVMsdC5sMmQ9TSx0LmQycD1mdW5jdGlvbihlLHIpe3JldHVybiB0LmwycCh0LmQycihlLHIpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE0oQih0KSl9LHQucjJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycChzKGUpKX0sdC5wMnI9Qix0LmNsZWFuUG9zPXUpOiJkYXRlIj09PXQudHlwZT8odC5kMnI9dC5yMmQ9by5pZGVudGl0eSx0LmQyYz10LnIyYz10LmQybD10LnIybD1FLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPUMsdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmwycChFKGUsMCxuKSl9LHQucDJkPXQucDJyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQyhCKHQpLGUscil9LHQuY2xlYW5Qb3M9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uY2xlYW5EYXRlKGUsZCx0LmNhbGVuZGFyKX0pOiJjYXRlZ29yeSI9PT10LnR5cGU/KHQuZDJjPXQuZDJsPUksdC5yMmQ9dC5jMmQ9dC5sMmQ9TCx0LmQycj10LmQybF9ub2FkZD16LHQucjJjPWZ1bmN0aW9uKGUpe3ZhciByPU8oZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmZyYWN0aW9uMnIoLjUpfSx0Lmwycj10LmMycj11LHQucjJsPU8sdC5kMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHQucjJjKGUpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIEwoQih0KSl9LHQucjJwPXQuZDJwLHQucDJyPUIsdC5jbGVhblBvcz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiIiIT09dD90OnUodCl9KToibXVsdGljYXRlZ29yeSI9PT10LnR5cGUmJih0LnIyZD10LmMyZD10LmwyZD1MLHQuZDJyPXQuZDJsX25vYWRkPXosdC5yMmM9ZnVuY3Rpb24oZSl7dmFyIHI9eihlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZnJhY3Rpb24yciguNSl9LHQucjJjX2p1c3RfaW5kaWNlcz1QLHQubDJyPXQuYzJyPXUsdC5yMmw9eix0LmQycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAodC5yMmMoZSkpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gTChCKHQpKX0sdC5yMnA9dC5kMnAsdC5wMnI9Qix0LmNsZWFuUG9zPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHwic3RyaW5nIj09dHlwZW9mIHQmJiIiIT09dD90OnUodCl9LHQuc2V0dXBNdWx0aUNhdGVnb3J5PWZ1bmN0aW9uKG4pe3ZhciBpLGEscz10Ll90cmFjZUluZGljZXMsbD10Ll9tYXRjaEdyb3VwO2lmKGwmJjA9PT10Ll9jYXRlZ29yaWVzLmxlbmd0aClmb3IodmFyIGMgaW4gbClpZihjIT09cil7dmFyIHU9ZVtfLmlkMm5hbWUoYyldO3M9cy5jb25jYXQodS5fdHJhY2VJbmRpY2VzKX12YXIgcD1bWzAse31dLFswLHt9XV0sZD1bXTtmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKXt2YXIgZz1uW3NbaV1dO2lmKGggaW4gZyl7dmFyIG09Z1toXSx2PWcuX2xlbmd0aHx8by5taW5Sb3dMZW5ndGgobSk7aWYoZihtWzBdKSYmZihtWzFdKSlmb3IoYT0wO2E8djthKyspe3ZhciB5PW1bMF1bYV0seD1tWzFdW2FdO0EoeSkmJkEoeCkmJihkLnB1c2goW3kseF0pLHkgaW4gcFswXVsxXXx8KHBbMF1bMV1beV09cFswXVswXSsrKSx4IGluIHBbMV1bMV18fChwWzFdWzFdW3hdPXBbMV1bMF0rKykpfX19Zm9yKGQuc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgcj1wWzBdWzFdLG49clt0WzBdXS1yW2VbMF1dO2lmKG4pcmV0dXJuIG47dmFyIGk9cFsxXVsxXTtyZXR1cm4gaVt0WzFdXS1pW2VbMV1dfSkpLGk9MDtpPGQubGVuZ3RoO2krKylJKGRbaV0pfSksdC5mcmFjdGlvbjJyPWZ1bmN0aW9uKGUpe3ZhciByPXQucjJsKHQucmFuZ2VbMF0pLG49dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIHQubDJyKHIrZSoobi1yKSl9LHQucjJmcmFjdGlvbj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybih0LnIybChlKS1yKS8obi1yKX0sdC5jbGVhblJhbmdlPWZ1bmN0aW9uKGUscil7cnx8KHI9e30pLGV8fChlPSJyYW5nZSIpO3ZhciBuLGkscz1vLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk7aWYoaT0oaT0iZGF0ZSI9PT10LnR5cGU/by5kZmx0UmFuZ2UodC5jYWxlbmRhcik6InkiPT09aD93LkRGTFRSQU5HRVk6ci5kZmx0UmFuZ2V8fHcuREZMVFJBTkdFWCkuc2xpY2UoKSwidG96ZXJvIiE9PXQucmFuZ2Vtb2RlJiYibm9ubmVnYXRpdmUiIT09dC5yYW5nZW1vZGV8fChpWzBdPTApLHMmJjI9PT1zLmxlbmd0aClmb3IoImRhdGUiIT09dC50eXBlfHx0LmF1dG9yYW5nZXx8KHNbMF09by5jbGVhbkRhdGUoc1swXSxkLHQuY2FsZW5kYXIpLHNbMV09by5jbGVhbkRhdGUoc1sxXSxkLHQuY2FsZW5kYXIpKSxuPTA7bjwyO24rKylpZigiZGF0ZSI9PT10LnR5cGUpe2lmKCFvLmlzRGF0ZVRpbWUoc1tuXSx0LmNhbGVuZGFyKSl7dFtlXT1pO2JyZWFrfWlmKHQucjJsKHNbMF0pPT09dC5yMmwoc1sxXSkpe3ZhciBsPW8uY29uc3RyYWluKHQucjJsKHNbMF0pLG8uTUlOX01TKzFlMyxvLk1BWF9NUy0xZTMpO3NbMF09dC5sMnIobC0xZTMpLHNbMV09dC5sMnIobCsxZTMpO2JyZWFrfX1lbHNle2lmKCFhKHNbbl0pKXtpZighYShzWzEtbl0pKXt0W2VdPWk7YnJlYWt9c1tuXT1zWzEtbl0qKG4/MTA6LjEpfWlmKHNbbl08LXA/c1tuXT0tcDpzW25dPnAmJihzW25dPXApLHNbMF09PT1zWzFdKXt2YXIgYz1NYXRoLm1heCgxLE1hdGguYWJzKDFlLTYqc1swXSkpO3NbMF0tPWMsc1sxXSs9Y319ZWxzZSBvLm5lc3RlZFByb3BlcnR5KHQsZSkuc2V0KGkpfSx0LnNldFNjYWxlPWZ1bmN0aW9uKHIpe3ZhciBuPWUuX3NpemU7aWYodC5vdmVybGF5aW5nKXt2YXIgaT1fLmdldEZyb21JZCh7X2Z1bGxMYXlvdXQ6ZX0sdC5vdmVybGF5aW5nKTt0LmRvbWFpbj1pLmRvbWFpbn12YXIgYT1yJiZ0Ll9yPyJfciI6InJhbmdlIixvPXQuY2FsZW5kYXI7dC5jbGVhblJhbmdlKGEpO3ZhciBzLGwsYz10LnIybCh0W2FdWzBdLG8pLHU9dC5yMmwodFthXVsxXSxvKSxmPSJ5Ij09PWg7aWYoKGY/KHQuX29mZnNldD1uLnQrKDEtdC5kb21haW5bMV0pKm4uaCx0Ll9sZW5ndGg9bi5oKih0LmRvbWFpblsxXS10LmRvbWFpblswXSksdC5fbT10Ll9sZW5ndGgvKGMtdSksdC5fYj0tdC5fbSp1KToodC5fb2Zmc2V0PW4ubCt0LmRvbWFpblswXSpuLncsdC5fbGVuZ3RoPW4udyoodC5kb21haW5bMV0tdC5kb21haW5bMF0pLHQuX209dC5fbGVuZ3RoLyh1LWMpLHQuX2I9LXQuX20qYyksdC5fcmFuZ2VicmVha3M9W10sdC5fbEJyZWFrcz0wLHQuX20yPTAsdC5fQj1bXSx0LnJhbmdlYnJlYWtzKSYmKHQuX3JhbmdlYnJlYWtzPXQubG9jYXRlQnJlYWtzKE1hdGgubWluKGMsdSksTWF0aC5tYXgoYyx1KSksdC5fcmFuZ2VicmVha3MubGVuZ3RoKSl7Zm9yKHM9MDtzPHQuX3JhbmdlYnJlYWtzLmxlbmd0aDtzKyspbD10Ll9yYW5nZWJyZWFrc1tzXSx0Ll9sQnJlYWtzKz1NYXRoLmFicyhsLm1heC1sLm1pbik7dmFyIHA9ZjtjPnUmJihwPSFwKSxwJiZ0Ll9yYW5nZWJyZWFrcy5yZXZlcnNlKCk7dmFyIGQ9cD8tMToxO2Zvcih0Ll9tMj1kKnQuX2xlbmd0aC8oTWF0aC5hYnModS1jKS10Ll9sQnJlYWtzKSx0Ll9CLnB1c2goLXQuX20yKihmP3U6YykpLHM9MDtzPHQuX3JhbmdlYnJlYWtzLmxlbmd0aDtzKyspbD10Ll9yYW5nZWJyZWFrc1tzXSx0Ll9CLnB1c2godC5fQlt0Ll9CLmxlbmd0aC0xXS1kKnQuX20yKihsLm1heC1sLm1pbikpO2ZvcihzPTA7czx0Ll9yYW5nZWJyZWFrcy5sZW5ndGg7cysrKShsPXQuX3JhbmdlYnJlYWtzW3NdKS5wbWluPUYobC5taW4pLGwucG1heD1GKGwubWF4KX1pZighaXNGaW5pdGUodC5fbSl8fCFpc0Zpbml0ZSh0Ll9iKXx8dC5fbGVuZ3RoPDApdGhyb3cgZS5fcmVwbG90dGluZz0hMSxuZXcgRXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggYXhpcyBzY2FsaW5nIil9LHQubWFza0JyZWFrcz1mdW5jdGlvbihlKXtmb3IodmFyIHIsbixpLGEsbCxjPXQucmFuZ2VicmVha3N8fFtdLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGY9Y1t1XTtpZihmLmVuYWJsZWQpaWYoZi5ib3VuZHMpe3ZhciBoPWYucGF0dGVybjtzd2l0Y2gobj0ocj1vLnNpbXBsZU1hcChmLmJvdW5kcyxoP3M6dC5kMmMpKVswXSxpPXJbMV0saCl7Y2FzZSBrOmE9KGw9bmV3IERhdGUoZSkpLmdldFVUQ0RheSgpLG4+aSYmKGkrPTcsYTxuJiYoYSs9NykpO2JyZWFrO2Nhc2UgVDphPShsPW5ldyBEYXRlKGUpKS5nZXRVVENIb3VycygpKyhsLmdldFVUQ01pbnV0ZXMoKS82MCtsLmdldFVUQ1NlY29uZHMoKS8zNjAwK2wuZ2V0VVRDTWlsbGlzZWNvbmRzKCkvMzZlNSksbj5pJiYoaSs9MjQsYTxuJiYoYSs9MjQpKTticmVhaztjYXNlIiI6YT1lfWlmKGE+PW4mJmE8aSlyZXR1cm4gZH1lbHNlIGZvcih2YXIgcD1vLnNpbXBsZU1hcChmLnZhbHVlcyx0LmQyYykuc29ydChvLnNvcnRlckFzYyksZz0wO2c8cC5sZW5ndGg7ZysrKWlmKGk9KG49cFtnXSkrZi5kdmFsdWUsZT49biYmZTxpKXJldHVybiBkfXJldHVybiBlfSx0LmxvY2F0ZUJyZWFrcz1mdW5jdGlvbihlLHIpe3ZhciBuLGksYSxsLGM9W107aWYoIXQucmFuZ2VicmVha3MpcmV0dXJuIGM7dmFyIHU9dC5yYW5nZWJyZWFrcy5zbGljZSgpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucGF0dGVybj09PWsmJmUucGF0dGVybj09PVQ/LTE6ZS5wYXR0ZXJuPT09ayYmdC5wYXR0ZXJuPT09VD8xOjB9KSksZj1mdW5jdGlvbih0LG4pe2lmKCh0PW8uY29uc3RyYWluKHQsZSxyKSkhPT0obj1vLmNvbnN0cmFpbihuLGUscikpKXtmb3IodmFyIGk9ITAsYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgcz1jW2FdO3Q8cy5tYXgmJm4+PXMubWluJiYodDxzLm1pbiYmKHMubWluPXQpLG4+cy5tYXgmJihzLm1heD1uKSxpPSExKX1pJiZjLnB1c2goe21pbjp0LG1heDpufSl9fTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgaD11W25dO2lmKGguZW5hYmxlZClpZihoLmJvdW5kcyl7dmFyIHA9ZSxkPXI7aC5wYXR0ZXJuJiYocD1NYXRoLmZsb29yKHApKSxhPShpPW8uc2ltcGxlTWFwKGguYm91bmRzLGgucGF0dGVybj9zOnQucjJsKSlbMF0sbD1pWzFdO3ZhciBnLF8sdz1uZXcgRGF0ZShwKTtzd2l0Y2goaC5wYXR0ZXJuKXtjYXNlIGs6Xz1tLGc9KGwtYSsobDxhPzc6MCkpKnYscCs9YSp2LSh3LmdldFVUQ0RheSgpKnYrdy5nZXRVVENIb3VycygpKnkrdy5nZXRVVENNaW51dGVzKCkqeCt3LmdldFVUQ1NlY29uZHMoKSpiK3cuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO2JyZWFrO2Nhc2UgVDpfPXYsZz0obC1hKyhsPGE/MjQ6MCkpKnkscCs9YSp5LSh3LmdldFVUQ0hvdXJzKCkqeSt3LmdldFVUQ01pbnV0ZXMoKSp4K3cuZ2V0VVRDU2Vjb25kcygpKmIrdy5nZXRVVENNaWxsaXNlY29uZHMoKSk7YnJlYWs7ZGVmYXVsdDpwPU1hdGgubWluKGlbMF0saVsxXSksZz1fPShkPU1hdGgubWF4KGlbMF0saVsxXSkpLXB9Zm9yKHZhciBNPXA7TTxkO00rPV8pZihNLE0rZyl9ZWxzZSBmb3IodmFyIEE9by5zaW1wbGVNYXAoaC52YWx1ZXMsdC5kMmMpLFM9MDtTPEEubGVuZ3RoO1MrKylmKGE9QVtTXSxsPWEraC5kdmFsdWUpfXJldHVybiBjLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWluLWUubWlufSkpLGN9LHQubWFrZUNhbGNkYXRhPWZ1bmN0aW9uKGUscixuKXt2YXIgaSxhLHMsbCxjPXQudHlwZSx1PSJkYXRlIj09PWMmJmVbcisiY2FsZW5kYXIiXTtpZihyIGluIGUpe2lmKGk9ZVtyXSxsPWUuX2xlbmd0aHx8by5taW5Sb3dMZW5ndGgoaSksby5pc1R5cGVkQXJyYXkoaSkmJigibGluZWFyIj09PWN8fCJsb2ciPT09Yykpe2lmKGw9PT1pLmxlbmd0aClyZXR1cm4gaTtpZihpLnN1YmFycmF5KXJldHVybiBpLnN1YmFycmF5KDAsbCl9aWYoIm11bHRpY2F0ZWdvcnkiPT09YylyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXt2YXIgaT0odFswXXx8W10pW25dLGE9KHRbMV18fFtdKVtuXTtyW25dPVAoW2ksYV0pfXJldHVybiByfShpLGwpO2ZvcihhPW5ldyBBcnJheShsKSxzPTA7czxsO3MrKylhW3NdPXQuZDJjKGlbc10sMCx1LG4pfWVsc2V7dmFyIGY9cisiMCJpbiBlP3QuZDJjKGVbcisiMCJdLDAsdSk6MCxoPWVbImQiK3JdP051bWJlcihlWyJkIityXSk6MTtmb3IoaT1lW3t4OiJ5Iix5OiJ4In1bcl1dLGw9ZS5fbGVuZ3RofHxpLmxlbmd0aCxhPW5ldyBBcnJheShsKSxzPTA7czxsO3MrKylhW3NdPWYrcypofWlmKHQucmFuZ2VicmVha3MpZm9yKHM9MDtzPGw7cysrKWFbc109dC5tYXNrQnJlYWtzKGFbc10pO3JldHVybiBhfSx0LmlzVmFsaWRSYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoJiZhKHQucjJsKGVbMF0pKSYmYSh0LnIybChlWzFdKSl9LHQuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKGUscil7dmFyIG49dC5jMmwoZVtoXSxudWxsLHIpLGk9dC5yMmwodC5yYW5nZVswXSksYT10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4gaTxhP2k8PW4mJm48PWE6YTw9biYmbjw9aX0sdC5fZW1wdHlDYXRlZ29yaWVzPWZ1bmN0aW9uKCl7dC5fY2F0ZWdvcmllcz1bXSx0Ll9jYXRlZ29yaWVzTWFwPXt9fSx0LmNsZWFyQ2FsYz1mdW5jdGlvbigpe3ZhciByPXQuX21hdGNoR3JvdXA7aWYocil7dmFyIG49bnVsbCxpPW51bGw7Zm9yKHZhciBhIGluIHIpe3ZhciBvPWVbXy5pZDJuYW1lKGEpXTtpZihvLl9jYXRlZ29yaWVzKXtuPW8uX2NhdGVnb3JpZXMsaT1vLl9jYXRlZ29yaWVzTWFwO2JyZWFrfX1uJiZpPyh0Ll9jYXRlZ29yaWVzPW4sdC5fY2F0ZWdvcmllc01hcD1pKTp0Ll9lbXB0eUNhdGVnb3JpZXMoKX1lbHNlIHQuX2VtcHR5Q2F0ZWdvcmllcygpO2lmKHQuX2luaXRpYWxDYXRlZ29yaWVzKWZvcih2YXIgcz0wO3M8dC5faW5pdGlhbENhdGVnb3JpZXMubGVuZ3RoO3MrKylJKHQuX2luaXRpYWxDYXRlZ29yaWVzW3NdKX0sdC5zb3J0QnlJbml0aWFsQ2F0ZWdvcmllcz1mdW5jdGlvbigpe3ZhciBuPVtdO2lmKHQuX2VtcHR5Q2F0ZWdvcmllcygpLHQuX2luaXRpYWxDYXRlZ29yaWVzKWZvcih2YXIgaT0wO2k8dC5faW5pdGlhbENhdGVnb3JpZXMubGVuZ3RoO2krKylJKHQuX2luaXRpYWxDYXRlZ29yaWVzW2ldKTtuPW4uY29uY2F0KHQuX3RyYWNlSW5kaWNlcyk7dmFyIGE9dC5fbWF0Y2hHcm91cDtmb3IodmFyIG8gaW4gYSlpZihyIT09byl7dmFyIHM9ZVtfLmlkMm5hbWUobyldO3MuX2NhdGVnb3JpZXM9dC5fY2F0ZWdvcmllcyxzLl9jYXRlZ29yaWVzTWFwPXQuX2NhdGVnb3JpZXNNYXAsbj1uLmNvbmNhdChzLl90cmFjZUluZGljZXMpfXJldHVybiBufTt2YXIgaj1lLl9kM2xvY2FsZTsiZGF0ZSI9PT10LnR5cGUmJih0Ll9kYXRlRm9ybWF0PWo/ai50aW1lRm9ybWF0OmksdC5fZXh0cmFGb3JtYXQ9ZS5fZXh0cmFGb3JtYXQpLHQuX3NlcGFyYXRvcnM9ZS5zZXBhcmF0b3JzLHQuX251bUZvcm1hdD1qP2oubnVtYmVyRm9ybWF0Om4uZm9ybWF0LGRlbGV0ZSB0Ll9taW5EdGljayxkZWxldGUgdC5fZm9yY2VUaWNrMH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi8uLi9saWIiOjc3OCwiLi9heGlzX2lkcyI6ODMxLCIuL2NvbnN0YW50cyI6ODM0LGQzOjE2OSwiZDMtdGltZS1mb3JtYXQiOjE2NiwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDg0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5jb250cmFzdCxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpO2Z1bmN0aW9uIHModCl7dmFyIGU9WyJzaG93ZXhwb25lbnQiLCJzaG93dGlja3ByZWZpeCIsInNob3d0aWNrc3VmZml4Il0uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dFtlXX0pKTtpZihlLmV2ZXJ5KChmdW5jdGlvbihyKXtyZXR1cm4gdFtyXT09PXRbZVswXV19KSl8fDE9PT1lLmxlbmd0aClyZXR1cm4gdFtlWzBdXX1mdW5jdGlvbiBsKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYS50aWNrZm9ybWF0c3RvcHMscixpKX1yKCJlbmFibGVkIikmJihyKCJkdGlja3JhbmdlIikscigidmFsdWUiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMsdSxmKXtmJiYxIT09Zi5wYXNzfHxmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXModCk7cigidGlja3ByZWZpeCIpJiZyKCJzaG93dGlja3ByZWZpeCIsYSk7cigidGlja3N1ZmZpeCIsaS50aWNrU3VmZml4RGZsdCkmJnIoInNob3d0aWNrc3VmZml4IixhKX0odCwwLHIsMCx1KSxmJiYyIT09Zi5wYXNzfHxmdW5jdGlvbih0LGUscixjLHUpe3ZhciBmPXModCk7cigidGlja3ByZWZpeCIpJiZyKCJzaG93dGlja3ByZWZpeCIsZik7cigidGlja3N1ZmZpeCIsdS50aWNrU3VmZml4RGZsdCkmJnIoInNob3d0aWNrc3VmZml4IixmKTtpZihyKCJzaG93dGlja2xhYmVscyIpKXt2YXIgaD11LmZvbnR8fHt9LHA9ZS5jb2xvcixkPS0xIT09KGUudGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKT9pKHUuYmdDb2xvcik6cCYmcCE9PWEuY29sb3IuZGZsdD9wOmguY29sb3I7aWYobi5jb2VyY2VGb250KHIsInRpY2tmb250Iix7ZmFtaWx5OmguZmFtaWx5LHNpemU6aC5zaXplLGNvbG9yOmR9KSxyKCJ0aWNrYW5nbGUiKSwiY2F0ZWdvcnkiIT09Yyl7dmFyIGc9cigidGlja2Zvcm1hdCIpO28odCxlLHtuYW1lOiJ0aWNrZm9ybWF0c3RvcHMiLGluY2x1c2lvbkF0dHI6ImVuYWJsZWQiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSksZS50aWNrZm9ybWF0c3RvcHMubGVuZ3RofHxkZWxldGUgZS50aWNrZm9ybWF0c3RvcHMsZ3x8ImRhdGUiPT09Y3x8KHIoInNob3dleHBvbmVudCIsZikscigiZXhwb25lbnRmb3JtYXQiKSxyKCJtaW5leHBvbmVudCIpLHIoInNlcGFyYXRldGhvdXNhbmRzIikpfX19KHQsZSxyLGMsdSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vbGliIjo3NzgsIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDJ9XSw4NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4uY29lcmNlMih0LGUsaSwidGlja2xlbiIpLHM9bi5jb2VyY2UyKHQsZSxpLCJ0aWNrd2lkdGgiKSxsPW4uY29lcmNlMih0LGUsaSwidGlja2NvbG9yIixlLmNvbG9yKTtyKCJ0aWNrcyIsYS5vdXRlclRpY2tzfHxvfHxzfHxsPyJvdXRzaWRlIjoiIil8fChkZWxldGUgZS50aWNrbGVuLGRlbGV0ZSBlLnRpY2t3aWR0aCxkZWxldGUgZS50aWNrY29sb3IpfX0seyIuLi8uLi9saWIiOjc3OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyfV0sODUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2xlYW5fdGlja3MiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2Z1bmN0aW9uIG8ocil7dmFyIG49dFtyXTtyZXR1cm4gdm9pZCAwIT09bj9uOihlLl90ZW1wbGF0ZXx8e30pW3JdfXZhciBzPW8oInRpY2swIiksbD1vKCJkdGljayIpLGM9bygidGlja3ZhbHMiKSx1PXIoInRpY2ttb2RlIixpKGMpPyJhcnJheSI6bD8ibGluZWFyIjoiYXV0byIpO2lmKCJhdXRvIj09PXUpcigibnRpY2tzIik7ZWxzZSBpZigibGluZWFyIj09PXUpe3ZhciBmPWUuZHRpY2s9bi5kdGljayhsLGEpO2UudGljazA9bi50aWNrMChzLGEsZS5jYWxlbmRhcixmKX1lbHNlIGlmKCJtdWx0aWNhdGVnb3J5IiE9PWEpe3ZvaWQgMD09PXIoInRpY2t2YWxzIik/ZS50aWNrbW9kZT0iYXV0byI6cigidGlja3RleHQiKX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuL2NsZWFuX3RpY2tzIjo4MzN9XSw4NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHM9dCgiLi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjPXQuX2Z1bGxMYXlvdXQ7aWYoMCE9PWUubGVuZ3RoKXt2YXIgdSxmLGgscDtsJiYodT1sKCkpO3ZhciBkPW4uZWFzZShyLmVhc2luZyk7cmV0dXJuIHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHApLHA9bnVsbCxmdW5jdGlvbigpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl0sbz1hLnBsb3RpbmZvLnhheGlzLHM9YS5wbG90aW5mby55YXhpczthLnhyMCYmKHJbby5fbmFtZSsiLnJhbmdlIl09YS54cjAuc2xpY2UoKSksYS55cjAmJihyW3MuX25hbWUrIi5yYW5nZSJdPWEueXIwLnNsaWNlKCkpfXJldHVybiBpLmNhbGwoInJlbGF5b3V0Iix0LHIpLnRoZW4oKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZyhlW3RdLnBsb3RpbmZvKX0pKX0oKX0pKSxmPURhdGUubm93KCkscD13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbiBuKCl7aD1EYXRlLm5vdygpO2Zvcih2YXIgYT1NYXRoLm1pbigxLChoLWYpL3IuZHVyYXRpb24pLG89ZChhKSxzPTA7czxlLmxlbmd0aDtzKyspbShlW3NdLG8pO2gtZj5yLmR1cmF0aW9uPyghZnVuY3Rpb24oKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dLG89YS5wbG90aW5mby54YXhpcyxzPWEucGxvdGluZm8ueWF4aXM7YS54cjEmJihyW28uX25hbWUrIi5yYW5nZSJdPWEueHIxLnNsaWNlKCkpLGEueXIxJiYocltzLl9uYW1lKyIucmFuZ2UiXT1hLnlyMS5zbGljZSgpKX11JiZ1KCksaS5jYWxsKCJyZWxheW91dCIsdCxyKS50aGVuKChmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWcoZVt0XS5wbG90aW5mbyl9KSl9KCkscD13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobikpOnA9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShuKX0pKSxQcm9taXNlLnJlc29sdmUoKX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQueGF4aXMscj10LnlheGlzO2MuX2RlZnMuc2VsZWN0KCIjIit0LmNsaXBJZCsiPiByZWN0IikuY2FsbChvLnNldFRyYW5zbGF0ZSwwLDApLmNhbGwoby5zZXRTY2FsZSwxLDEpLHQucGxvdC5jYWxsKG8uc2V0VHJhbnNsYXRlLGUuX29mZnNldCxyLl9vZmZzZXQpLmNhbGwoby5zZXRTY2FsZSwxLDEpO3ZhciBuPXQucGxvdC5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIgLnRyYWNlIik7bi5zZWxlY3RBbGwoIi5wb2ludCIpLmNhbGwoby5zZXRQb2ludEdyb3VwU2NhbGUsMSwxKSxuLnNlbGVjdEFsbCgiLnRleHRwb2ludCIpLmNhbGwoby5zZXRUZXh0UG9pbnRzU2NhbGUsMSwxKSxuLmNhbGwoby5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHQpfWZ1bmN0aW9uIG0oZSxyKXt2YXIgbj1lLnBsb3RpbmZvLGk9bi54YXhpcyxsPW4ueWF4aXMsYz1pLl9sZW5ndGgsdT1sLl9sZW5ndGgsZj0hIWUueHIxLGg9ISFlLnlyMSxwPVtdO2lmKGYpe3ZhciBkPWEuc2ltcGxlTWFwKGUueHIwLGkucjJsKSxnPWEuc2ltcGxlTWFwKGUueHIxLGkucjJsKSxtPWRbMV0tZFswXSx2PWdbMV0tZ1swXTtwWzBdPShkWzBdKigxLXIpK3IqZ1swXS1kWzBdKS8oZFsxXS1kWzBdKSpjLHBbMl09YyooMS1yK3Iqdi9tKSxpLnJhbmdlWzBdPWkubDJyKGRbMF0qKDEtcikrcipnWzBdKSxpLnJhbmdlWzFdPWkubDJyKGRbMV0qKDEtcikrcipnWzFdKX1lbHNlIHBbMF09MCxwWzJdPWM7aWYoaCl7dmFyIHk9YS5zaW1wbGVNYXAoZS55cjAsbC5yMmwpLHg9YS5zaW1wbGVNYXAoZS55cjEsbC5yMmwpLGI9eVsxXS15WzBdLF89eFsxXS14WzBdO3BbMV09KHlbMV0qKDEtcikrcip4WzFdLXlbMV0pLyh5WzBdLXlbMV0pKnUscFszXT11KigxLXIrcipfL2IpLGwucmFuZ2VbMF09aS5sMnIoeVswXSooMS1yKStyKnhbMF0pLGwucmFuZ2VbMV09bC5sMnIoeVsxXSooMS1yKStyKnhbMV0pfWVsc2UgcFsxXT0wLHBbM109dTtzLmRyYXdPbmUodCxpLHtza2lwVGl0bGU6ITB9KSxzLmRyYXdPbmUodCxsLHtza2lwVGl0bGU6ITB9KSxzLnJlZHJhd0NvbXBvbmVudHModCxbaS5faWQsbC5faWRdKTt2YXIgdz1mP2MvcFsyXToxLFQ9aD91L3BbM106MSxrPWY/cFswXTowLE09aD9wWzFdOjAsQT1mP3BbMF0vcFsyXSpjOjAsUz1oP3BbMV0vcFszXSp1OjAsRT1pLl9vZmZzZXQtQSxDPWwuX29mZnNldC1TO24uY2xpcFJlY3QuY2FsbChvLnNldFRyYW5zbGF0ZSxrLE0pLmNhbGwoby5zZXRTY2FsZSwxL3csMS9UKSxuLnBsb3QuY2FsbChvLnNldFRyYW5zbGF0ZSxFLEMpLmNhbGwoby5zZXRTY2FsZSx3LFQpLG8uc2V0UG9pbnRHcm91cFNjYWxlKG4uem9vbVNjYWxlUHRzLDEvdywxL1QpLG8uc2V0VGV4dFBvaW50c1NjYWxlKG4uem9vbVNjYWxlVHh0LDEvdywxL1QpfXMucmVkcmF3Q29tcG9uZW50cyh0KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuL2F4ZXMiOjgyOCxkMzoxNjl9XSw4NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzLGk9dCgiLi9heGlzX2F1dG90eXBlIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm57djoieCIsaDoieSJ9W3Qub3JpZW50YXRpb258fCJ2Il19ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWEodCksaT1uKHQsImJveC12aW9saW4iKSxvPW4odC5fZnVsbElucHV0fHx7fSwiY2FuZGxlc3RpY2siKTtyZXR1cm4gaSYmIW8mJmU9PT1yJiZ2b2lkIDA9PT10W3JdJiZ2b2lkIDA9PT10W3IrIjAiXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7cigiYXV0b3R5cGVudW1iZXJzIixzLmF1dG90eXBlbnVtYmVyc0RmbHQpLCItIj09PXIoInR5cGUiLChzLnNwbG9tU3Rhc2h8fHt9KS50eXBlKSYmKCFmdW5jdGlvbih0LGUpe2lmKCItIiE9PXQudHlwZSlyZXR1cm47dmFyIHIscz10Ll9pZCxsPXMuY2hhckF0KDApOy0xIT09cy5pbmRleE9mKCJzY2VuZSIpJiYocz1sKTt2YXIgYz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aWYoInNwbG9tIj09PWkudHlwZSYmaS5fbGVuZ3RoPjAmJihpWyJfIityKyJheGVzIl18fHt9KVtlXSlyZXR1cm4gaTtpZigoaVtyKyJheGlzIl18fHIpPT09ZSl7aWYobyhpLHIpKXJldHVybiBpO2lmKChpW3JdfHxbXSkubGVuZ3RofHxpW3IrIjAiXSlyZXR1cm4gaX19fShlLHMsbCk7aWYoIWMpcmV0dXJuO2lmKCJoaXN0b2dyYW0iPT09Yy50eXBlJiZsPT09e3Y6InkiLGg6IngifVtjLm9yaWVudGF0aW9ufHwidiJdKXJldHVybiB2b2lkKHQudHlwZT0ibGluZWFyIik7dmFyIHU9bCsiY2FsZW5kYXIiLGY9Y1t1XSxoPXtub011bHRpQ2F0ZWdvcnk6IW4oYywiY2FydGVzaWFuIil8fG4oYywibm9NdWx0aUNhdGVnb3J5Iil9OyJib3giPT09Yy50eXBlJiZjLl9oYXNQcmVDb21wU3RhdHMmJmw9PT17aDoieCIsdjoieSJ9W2Mub3JpZW50YXRpb258fCJ2Il0mJihoLm5vTXVsdGlDYXRlZ29yeT0hMCk7aWYoaC5hdXRvdHlwZW51bWJlcnM9dC5hdXRvdHlwZW51bWJlcnMsbyhjLGwpKXt2YXIgcD1hKGMpLGQ9W107Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGc9ZVtyXTtuKGcsImJveC12aW9saW4iKSYmKGdbbCsiYXhpcyJdfHxsKT09PXMmJih2b2lkIDAhPT1nW3BdP2QucHVzaChnW3BdWzBdKTp2b2lkIDAhPT1nLm5hbWU/ZC5wdXNoKGcubmFtZSk6ZC5wdXNoKCJ0ZXh0IiksZ1t1XSE9PWYmJihmPXZvaWQgMCkpfXQudHlwZT1pKGQsZixoKX1lbHNlIGlmKCJzcGxvbSI9PT1jLnR5cGUpe3ZhciBtPWMuZGltZW5zaW9uc1tjLl9heGVzRGltW3NdXTttLnZpc2libGUmJih0LnR5cGU9aShtLnZhbHVlcyxmLGgpKX1lbHNlIHQudHlwZT1pKGNbbF18fFtjW2wrIjAiXV0sZixoKX0oZSxzLmRhdGEpLCItIj09PWUudHlwZT9lLnR5cGU9ImxpbmVhciI6dC50eXBlPWUudHlwZSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4vYXhpc19hdXRvdHlwZSI6ODI5fV0sODU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5IiksaT10KCIuLi9saWIiKTtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgbixhLG8scz0hMTtpZigiZGF0YSI9PT1lLnR5cGUpbj10Ll9mdWxsRGF0YVtudWxsIT09ZS50cmFjZXM/ZS50cmFjZXNbMF06MF07ZWxzZXtpZigibGF5b3V0IiE9PWUudHlwZSlyZXR1cm4hMTtuPXQuX2Z1bGxMYXlvdXR9cmV0dXJuIGE9aS5uZXN0ZWRQcm9wZXJ0eShuLGUucHJvcCkuZ2V0KCksKG89cltlLnR5cGVdPXJbZS50eXBlXXx8e30pLmhhc093blByb3BlcnR5KGUucHJvcCkmJm9bZS5wcm9wXSE9PWEmJihzPSEwKSxvW2UucHJvcF09YSx7Y2hhbmdlZDpzLHZhbHVlOmF9fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1bXSxuPWVbMF0sYT17fTtpZigic3RyaW5nIj09dHlwZW9mIG4pYVtuXT1lWzFdO2Vsc2V7aWYoIWkuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gcjthPW59cmV0dXJuIGwoYSwoZnVuY3Rpb24odCxlLG4pe3IucHVzaCh7dHlwZToibGF5b3V0Iixwcm9wOnQsdmFsdWU6bn0pfSksIiIsMCkscn1mdW5jdGlvbiBzKHQsZSl7dmFyIHIsbixhLG8scz1bXTtpZihuPWVbMF0sYT1lWzFdLHI9ZVsyXSxvPXt9LCJzdHJpbmciPT10eXBlb2YgbilvW25dPWE7ZWxzZXtpZighaS5pc1BsYWluT2JqZWN0KG4pKXJldHVybiBzO289bix2b2lkIDA9PT1yJiYocj1hKX1yZXR1cm4gdm9pZCAwPT09ciYmKHI9bnVsbCksbChvLChmdW5jdGlvbihlLG4saSl7dmFyIGEsbztpZihBcnJheS5pc0FycmF5KGkpKXtvPWkuc2xpY2UoKTt2YXIgbD1NYXRoLm1pbihvLmxlbmd0aCx0LmRhdGEubGVuZ3RoKTtyJiYobD1NYXRoLm1pbihsLHIubGVuZ3RoKSksYT1bXTtmb3IodmFyIGM9MDtjPGw7YysrKWFbY109cj9yW2NdOmN9ZWxzZSBvPWksYT1yP3Iuc2xpY2UoKTpudWxsO2lmKG51bGw9PT1hKUFycmF5LmlzQXJyYXkobykmJihvPW9bMF0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShhKSl7aWYoIUFycmF5LmlzQXJyYXkobykpe3ZhciB1PW87bz1bXTtmb3IodmFyIGY9MDtmPGEubGVuZ3RoO2YrKylvW2ZdPXV9by5sZW5ndGg9TWF0aC5taW4oYS5sZW5ndGgsby5sZW5ndGgpfXMucHVzaCh7dHlwZToiZGF0YSIscHJvcDplLHRyYWNlczphLHZhbHVlOm99KX0pLCIiLDApLHN9ZnVuY3Rpb24gbCh0LGUscixuKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihhKXt2YXIgbz10W2FdO2lmKCJfIiE9PWFbMF0pe3ZhciBzPXIrKG4+MD8iLiI6IiIpK2E7aS5pc1BsYWluT2JqZWN0KG8pP2wobyxlLHMsbisxKTplKHMsYSxvKX19KSl9ci5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9ZnVuY3Rpb24odCxlLG4sbyl7dmFyIHM9e30sbD0hMDtlJiZlLl9jb21tYW5kT2JzZXJ2ZXImJihzPWUuX2NvbW1hbmRPYnNlcnZlcikscy5jYWNoZXx8KHMuY2FjaGU9e30pLHMubG9va3VwVGFibGU9e307dmFyIGM9ci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3ModCxuLHMubG9va3VwVGFibGUpO2lmKGUmJmUuX2NvbW1hbmRPYnNlcnZlcil7aWYoYylyZXR1cm4gcztpZihlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKXJldHVybiBlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZS5fY29tbWFuZE9ic2VydmVyPW51bGwsc31pZihjKXthKHQsYyxzLmNhY2hlKSxzLmNoZWNrPWZ1bmN0aW9uKCl7aWYobCl7dmFyIGU9YSh0LGMscy5jYWNoZSk7cmV0dXJuIGUuY2hhbmdlZCYmbyYmdm9pZCAwIT09cy5sb29rdXBUYWJsZVtlLnZhbHVlXSYmKHMuZGlzYWJsZSgpLFByb21pc2UucmVzb2x2ZShvKHt2YWx1ZTplLnZhbHVlLHR5cGU6Yy50eXBlLHByb3A6Yy5wcm9wLHRyYWNlczpjLnRyYWNlcyxpbmRleDpzLmxvb2t1cFRhYmxlW2UudmFsdWVdfSkpLnRoZW4ocy5lbmFibGUscy5lbmFibGUpKSxlLmNoYW5nZWR9fTtmb3IodmFyIHU9WyJwbG90bHlfcmVsYXlvdXQiLCJwbG90bHlfcmVkcmF3IiwicGxvdGx5X3Jlc3R5bGUiLCJwbG90bHlfdXBkYXRlIiwicGxvdGx5X2FuaW1hdGluZ2ZyYW1lIiwicGxvdGx5X2FmdGVycGxvdCJdLGY9MDtmPHUubGVuZ3RoO2YrKyl0Ll9pbnRlcm5hbE9uKHVbZl0scy5jaGVjayk7cy5yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHUubGVuZ3RoO2UrKyl0Ll9yZW1vdmVJbnRlcm5hbExpc3RlbmVyKHVbZV0scy5jaGVjayl9fWVsc2UgaS5sb2coIlVuYWJsZSB0byBhdXRvbWF0aWNhbGx5IGJpbmQgcGxvdCB1cGRhdGVzIHRvIEFQSSBjb21tYW5kIikscy5sb29rdXBUYWJsZT17fSxzLnJlbW92ZT1mdW5jdGlvbigpe307cmV0dXJuIHMuZGlzYWJsZT1mdW5jdGlvbigpe2w9ITF9LHMuZW5hYmxlPWZ1bmN0aW9uKCl7bD0hMH0sZSYmKGUuX2NvbW1hbmRPYnNlcnZlcj1zKSxzfSxyLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncz1mdW5jdGlvbih0LGUsbil7dmFyIGksYSxvPWUubGVuZ3RoO2ZvcihpPTA7aTxvO2krKyl7dmFyIHMsbD1lW2ldLGM9bC5tZXRob2QsdT1sLmFyZ3M7aWYoQXJyYXkuaXNBcnJheSh1KXx8KHU9W10pLCFjKXJldHVybiExO3ZhciBmPXIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncyh0LGMsdSk7aWYoMSE9PWYubGVuZ3RoKXJldHVybiExO2lmKGEpe2lmKChzPWZbMF0pLnR5cGUhPT1hLnR5cGUpcmV0dXJuITE7aWYocy5wcm9wIT09YS5wcm9wKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoYS50cmFjZXMpKXtpZighQXJyYXkuaXNBcnJheShzLnRyYWNlcykpcmV0dXJuITE7cy50cmFjZXMuc29ydCgpO2Zvcih2YXIgaD0wO2g8YS50cmFjZXMubGVuZ3RoO2grKylpZihhLnRyYWNlc1toXSE9PXMudHJhY2VzW2hdKXJldHVybiExfWVsc2UgaWYocy5wcm9wIT09YS5wcm9wKXJldHVybiExfWVsc2UgYT1mWzBdLEFycmF5LmlzQXJyYXkoYS50cmFjZXMpJiZhLnRyYWNlcy5zb3J0KCk7dmFyIHA9KHM9ZlswXSkudmFsdWU7aWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMSE9PXAubGVuZ3RoKXJldHVybiExO3A9cFswXX1uJiYobltwXT1pKX1yZXR1cm4gYX0sci5leGVjdXRlQVBJQ29tbWFuZD1mdW5jdGlvbih0LGUscil7aWYoInNraXAiPT09ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGE9bi5hcGlNZXRob2RSZWdpc3RyeVtlXSxvPVt0XTtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspby5wdXNoKHJbc10pO3JldHVybiBhLmFwcGx5KG51bGwsbykuY2F0Y2goKGZ1bmN0aW9uKHQpe3JldHVybiBpLndhcm4oIkFQSSBjYWxsIHRvIFBsb3RseS4iK2UrIiByZWplY3RlZC4iLHQpLFByb21pc2UucmVqZWN0KHQpfSkpfSxyLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO3N3aXRjaChBcnJheS5pc0FycmF5KHIpfHwocj1bXSksZSl7Y2FzZSJyZXN0eWxlIjpuPXModCxyKTticmVhaztjYXNlInJlbGF5b3V0IjpuPW8odCxyKTticmVhaztjYXNlInVwZGF0ZSI6bj1zKHQsW3JbMF0sclsyXV0pLmNvbmNhdChvKHQsW3JbMV1dKSk7YnJlYWs7Y2FzZSJhbmltYXRlIjpuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZVswXSkmJjE9PT1lWzBdLmxlbmd0aCYmLTEhPT1bInN0cmluZyIsIm51bWJlciJdLmluZGV4T2YodHlwZW9mIGVbMF1bMF0pP1t7dHlwZToibGF5b3V0Iixwcm9wOiJfY3VycmVudEZyYW1lIix2YWx1ZTplWzBdWzBdLnRvU3RyaW5nKCl9XTpbXX0oMCxyKTticmVhaztkZWZhdWx0Om49W119cmV0dXJuIG59fSx7Ii4uL2xpYiI6Nzc4LCIuLi9yZWdpc3RyeSI6OTExfV0sODU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O3IuYXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2U9ZXx8e307dmFyIHI9e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGVkaXRUeXBlOih0PXR8fHt9KS5lZGl0VHlwZSxpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6dC5lZGl0VHlwZX0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6dC5lZGl0VHlwZX1dLGRmbHQ6WzAsMV19LGk9KHQubmFtZSYmdC5uYW1lLHQudHJhY2UsZS5kZXNjcmlwdGlvbiYmZS5kZXNjcmlwdGlvbix7eDpuKHt9LHIse30pLHk6bih7fSxyLHt9KSxlZGl0VHlwZTp0LmVkaXRUeXBlfSk7cmV0dXJuIHQubm9HcmlkQ2VsbHx8KGkucm93PXt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6dC5lZGl0VHlwZX0saS5jb2x1bW49e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTp0LmVkaXRUeXBlfSksaX0sci5kZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uJiZuLnh8fFswLDFdLGE9biYmbi55fHxbMCwxXSxvPWUuZ3JpZDtpZihvKXt2YXIgcz1yKCJkb21haW4uY29sdW1uIik7dm9pZCAwIT09cyYmKHM8by5jb2x1bW5zP2k9by5fZG9tYWlucy54W3NdOmRlbGV0ZSB0LmRvbWFpbi5jb2x1bW4pO3ZhciBsPXIoImRvbWFpbi5yb3ciKTt2b2lkIDAhPT1sJiYobDxvLnJvd3M/YT1vLl9kb21haW5zLnlbbF06ZGVsZXRlIHQuZG9tYWluLnJvdyl9dmFyIGM9cigiZG9tYWluLngiLGkpLHU9cigiZG9tYWluLnkiLGEpO2NbMF08Y1sxXXx8KHQuZG9tYWluLng9aS5zbGljZSgpKSx1WzBdPHVbMV18fCh0LmRvbWFpbi55PWEuc2xpY2UoKSl9fSx7Ii4uL2xpYi9leHRlbmQiOjc2OH1dLDg1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5lZGl0VHlwZSxyPXQuY29sb3JFZGl0VHlwZTt2b2lkIDA9PT1yJiYocj1lKTt2YXIgbj17ZmFtaWx5Ont2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOmV9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZWRpdFR5cGU6ZX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZTpyfSxlZGl0VHlwZTplfTtyZXR1cm4gdC5hcnJheU9rJiYobi5mYW1pbHkuYXJyYXlPaz0hMCxuLnNpemUuYXJyYXlPaz0hMCxuLmNvbG9yLmFycmF5T2s9ITApLG59fSx7fV0sODU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheToiZnJhbWVzX2VudHJ5Iixncm91cDp7dmFsVHlwZToic3RyaW5nIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIn0sdHJhY2VzOnt2YWxUeXBlOiJhbnkifSxiYXNlZnJhbWU6e3ZhbFR5cGU6InN0cmluZyJ9LGRhdGE6e3ZhbFR5cGU6ImFueSJ9LGxheW91dDp7dmFsVHlwZToiYW55In19fSx7fV0sODU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IucHJvak5hbWVzPXtlcXVpcmVjdGFuZ3VsYXI6ImVxdWlyZWN0YW5ndWxhciIsbWVyY2F0b3I6Im1lcmNhdG9yIixvcnRob2dyYXBoaWM6Im9ydGhvZ3JhcGhpYyIsIm5hdHVyYWwgZWFydGgiOiJuYXR1cmFsRWFydGgiLGthdnJheXNraXk3OiJrYXZyYXlza2l5NyIsbWlsbGVyOiJtaWxsZXIiLHJvYmluc29uOiJyb2JpbnNvbiIsZWNrZXJ0NDoiZWNrZXJ0NCIsImF6aW11dGhhbCBlcXVhbCBhcmVhIjoiYXppbXV0aGFsRXF1YWxBcmVhIiwiYXppbXV0aGFsIGVxdWlkaXN0YW50IjoiYXppbXV0aGFsRXF1aWRpc3RhbnQiLCJjb25pYyBlcXVhbCBhcmVhIjoiY29uaWNFcXVhbEFyZWEiLCJjb25pYyBjb25mb3JtYWwiOiJjb25pY0NvbmZvcm1hbCIsImNvbmljIGVxdWlkaXN0YW50IjoiY29uaWNFcXVpZGlzdGFudCIsZ25vbW9uaWM6Imdub21vbmljIixzdGVyZW9ncmFwaGljOiJzdGVyZW9ncmFwaGljIixtb2xsd2VpZGU6Im1vbGx3ZWlkZSIsaGFtbWVyOiJoYW1tZXIiLCJ0cmFuc3ZlcnNlIG1lcmNhdG9yIjoidHJhbnN2ZXJzZU1lcmNhdG9yIiwiYWxiZXJzIHVzYSI6ImFsYmVyc1VzYSIsIndpbmtlbCB0cmlwZWwiOiJ3aW5rZWwzIixhaXRvZmY6ImFpdG9mZiIsc2ludXNvaWRhbDoic2ludXNvaWRhbCJ9LHIuYXhlc05hbWVzPVsibG9uYXhpcyIsImxhdGF4aXMiXSxyLmxvbmF4aXNTcGFuPXtvcnRob2dyYXBoaWM6MTgwLCJhemltdXRoYWwgZXF1YWwgYXJlYSI6MzYwLCJhemltdXRoYWwgZXF1aWRpc3RhbnQiOjM2MCwiY29uaWMgY29uZm9ybWFsIjoxODAsZ25vbW9uaWM6MTYwLHN0ZXJlb2dyYXBoaWM6MTgwLCJ0cmFuc3ZlcnNlIG1lcmNhdG9yIjoxODAsIioiOjM2MH0sci5sYXRheGlzU3Bhbj17ImNvbmljIGNvbmZvcm1hbCI6MTUwLHN0ZXJlb2dyYXBoaWM6MTc5LjUsIioiOjE4MH0sci5zY29wZURlZmF1bHRzPXt3b3JsZDp7bG9uYXhpc1JhbmdlOlstMTgwLDE4MF0sbGF0YXhpc1JhbmdlOlstOTAsOTBdLHByb2pUeXBlOiJlcXVpcmVjdGFuZ3VsYXIiLHByb2pSb3RhdGU6WzAsMCwwXX0sdXNhOntsb25heGlzUmFuZ2U6Wy0xODAsLTUwXSxsYXRheGlzUmFuZ2U6WzE1LDgwXSxwcm9qVHlwZToiYWxiZXJzIHVzYSJ9LGV1cm9wZTp7bG9uYXhpc1JhbmdlOlstMzAsNjBdLGxhdGF4aXNSYW5nZTpbMzAsODVdLHByb2pUeXBlOiJjb25pYyBjb25mb3JtYWwiLHByb2pSb3RhdGU6WzE1LDAsMF0scHJvalBhcmFsbGVsczpbMCw2MF19LGFzaWE6e2xvbmF4aXNSYW5nZTpbMjIsMTYwXSxsYXRheGlzUmFuZ2U6Wy0xNSw1NV0scHJvalR5cGU6Im1lcmNhdG9yIixwcm9qUm90YXRlOlswLDAsMF19LGFmcmljYTp7bG9uYXhpc1JhbmdlOlstMzAsNjBdLGxhdGF4aXNSYW5nZTpbLTQwLDQwXSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX0sIm5vcnRoIGFtZXJpY2EiOntsb25heGlzUmFuZ2U6Wy0xODAsLTQ1XSxsYXRheGlzUmFuZ2U6WzUsODVdLHByb2pUeXBlOiJjb25pYyBjb25mb3JtYWwiLHByb2pSb3RhdGU6Wy0xMDAsMCwwXSxwcm9qUGFyYWxsZWxzOlsyOS41LDQ1LjVdfSwic291dGggYW1lcmljYSI6e2xvbmF4aXNSYW5nZTpbLTEwMCwtMzBdLGxhdGF4aXNSYW5nZTpbLTYwLDE1XSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX19LHIuY2xpcFBhZD0uMDAxLHIucHJlY2lzaW9uPS4xLHIubGFuZENvbG9yPSIjRjBEQzgyIixyLndhdGVyQ29sb3I9IiMzMzk5RkYiLHIubG9jYXRpb25tb2RlVG9MYXllcj17IklTTy0zIjoiY291bnRyaWVzIiwiVVNBLXN0YXRlcyI6InN1YnVuaXRzIiwiY291bnRyeSBuYW1lcyI6ImNvdW50cmllcyJ9LHIuc3BoZXJlU1ZHPXt0eXBlOiJTcGhlcmUifSxyLmZpbGxMYXllcnM9e29jZWFuOjEsbGFuZDoxLGxha2VzOjF9LHIubGluZUxheWVycz17c3VidW5pdHM6MSxjb3VudHJpZXM6MSxjb2FzdGxpbmVzOjEscml2ZXJzOjEsZnJhbWU6MX0sci5sYXllcnM9WyJiZyIsIm9jZWFuIiwibGFuZCIsImxha2VzIiwic3VidW5pdHMiLCJjb3VudHJpZXMiLCJjb2FzdGxpbmVzIiwicml2ZXJzIiwibGF0YXhpcyIsImxvbmF4aXMiLCJmcmFtZSIsImJhY2twbG90IiwiZnJvbnRwbG90Il0sci5sYXllcnNGb3JDaG9yb3BsZXRoPVsiYmciLCJvY2VhbiIsImxhbmQiLCJzdWJ1bml0cyIsImNvdW50cmllcyIsImNvYXN0bGluZXMiLCJsYXRheGlzIiwibG9uYXhpcyIsImZyYW1lIiwiYmFja3Bsb3QiLCJyaXZlcnMiLCJsYWtlcyIsImZyb250cGxvdCJdLHIubGF5ZXJOYW1lVG9BZGplY3RpdmU9e29jZWFuOiJvY2VhbiIsbGFuZDoibGFuZCIsbGFrZXM6Imxha2UiLHN1YnVuaXRzOiJzdWJ1bml0Iixjb3VudHJpZXM6ImNvdW50cnkiLGNvYXN0bGluZXM6ImNvYXN0bGluZSIscml2ZXJzOiJyaXZlciIsZnJhbWU6ImZyYW1lIn19LHt9XSw4NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPWEuc3RyVHJhbnNsYXRlLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksdT10KCIuLi9wbG90cyIpLGY9dCgiLi4vY2FydGVzaWFuL2F4ZXMiKSxoPXQoIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2UscD10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IiksZD10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCxnPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCxtPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLHY9dCgiLi96b29tIikseT10KCIuL2NvbnN0YW50cyIpLHg9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLGI9dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIiksXz10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO2Z1bmN0aW9uIHcodCl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLnRvcG9qc29uVVJMPXQudG9wb2pzb25VUkwsdGhpcy5pc1N0YXRpYz10LnN0YXRpY1Bsb3QsdGhpcy50b3BvanNvbk5hbWU9bnVsbCx0aGlzLnRvcG9qc29uPW51bGwsdGhpcy5wcm9qZWN0aW9uPW51bGwsdGhpcy5zY29wZT1udWxsLHRoaXMudmlld0luaXRpYWw9bnVsbCx0aGlzLmZpdFNjYWxlPW51bGwsdGhpcy5ib3VuZHM9bnVsbCx0aGlzLm1pZFB0PW51bGwsdGhpcy5oYXNDaG9yb3BsZXRoPSExLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9LHRoaXMuYmFzZVBhdGhzPXt9LHRoaXMuZGF0YVBhdGhzPXt9LHRoaXMuZGF0YVBvaW50cz17fSx0aGlzLmNsaXBEZWY9bnVsbCx0aGlzLmNsaXBSZWN0PW51bGwsdGhpcy5iZ1JlY3Q9bnVsbCx0aGlzLm1ha2VGcmFtZXdvcmsoKX10KCIuL3Byb2plY3Rpb25zIikobik7dmFyIFQ9dy5wcm90b3R5cGU7ZnVuY3Rpb24gayh0LGUpe3ZhciByPXkuY2xpcFBhZCxuPXRbMF0rcixpPXRbMV0tcixhPWVbMF0rcixvPWVbMV0tcjtuPjAmJmk8MCYmKGkrPTM2MCk7dmFyIHM9KGktbikvNDtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W1tbbixhXSxbbixvXSxbbitzLG9dLFtuKzIqcyxvXSxbbiszKnMsb10sW2ksb10sW2ksYV0sW2ktcyxhXSxbaS0yKnMsYV0sW2ktMypzLGFdLFtuLGFdXV19fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHcodCl9LFQucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPWVbdGhpcy5pZF0sYT1bXSxvPSExO2Zvcih2YXIgcyBpbiB5LmxheWVyTmFtZVRvQWRqZWN0aXZlKWlmKCJmcmFtZSIhPT1zJiZpWyJzaG93IitzXSl7bz0hMDticmVha31mb3IodmFyIGw9MDtsPHQubGVuZ3RoO2wrKylpZih0WzBdWzBdLnRyYWNlLmxvY2F0aW9ubW9kZSl7bz0hMDticmVha31pZihvKXt2YXIgYz1iLmdldFRvcG9qc29uTmFtZShpKTtudWxsIT09bi50b3BvanNvbiYmYz09PW4udG9wb2pzb25OYW1lfHwobi50b3BvanNvbk5hbWU9Yyx2b2lkIDA9PT1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdJiZhLnB1c2gobi5mZXRjaFRvcG9qc29uKCkpKX1hPWEuY29uY2F0KHguZmV0Y2hUcmFjZUdlb0RhdGEodCkpLHIucHVzaChuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixpKXtQcm9taXNlLmFsbChhKS50aGVuKChmdW5jdGlvbigpe24udG9wb2pzb249UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW24udG9wb2pzb25OYW1lXSxuLnVwZGF0ZSh0LGUpLHIoKX0pKS5jYXRjaChpKX0pKSl9LFQuZmV0Y2hUb3BvanNvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1iLmdldFRvcG9qc29uUGF0aCh0LnRvcG9qc29uVVJMLHQudG9wb2pzb25OYW1lKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsaSl7bi5qc29uKGUsKGZ1bmN0aW9uKG4sYSl7aWYobilyZXR1cm4gNDA0PT09bi5zdGF0dXM/aShuZXcgRXJyb3IoWyJwbG90bHkuanMgY291bGQgbm90IGZpbmQgdG9wb2pzb24gZmlsZSBhdCIsZSwiLiIsIk1ha2Ugc3VyZSB0aGUgKnRvcG9qc29uVVJMKiBwbG90IGNvbmZpZyBvcHRpb24iLCJpcyBzZXQgcHJvcGVybHkuIl0uam9pbigiICIpKSk6aShuZXcgRXJyb3IoWyJ1bmV4cGVjdGVkIGVycm9yIHdoaWxlIGZldGNoaW5nIHRvcG9qc29uIGZpbGUgYXQiLGVdLmpvaW4oIiAiKSkpO1Bsb3RseUdlb0Fzc2V0cy50b3BvanNvblt0LnRvcG9qc29uTmFtZV09YSxyKCl9KSl9KSl9LFQudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0aGlzLmlkXTt0aGlzLmhhc0Nob3JvcGxldGg9ITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlOyJjaG9yb3BsZXRoIj09PWEudHlwZSYmKHRoaXMuaGFzQ2hvcm9wbGV0aD0hMCksITA9PT1hLnZpc2libGUmJmEuX2xlbmd0aD4wJiZhLl9tb2R1bGUuY2FsY0dlb0pTT04oaSxlKX1pZighdGhpcy51cGRhdGVQcm9qZWN0aW9uKHQsZSkpe3RoaXMudmlld0luaXRpYWwmJnRoaXMuc2NvcGU9PT1yLnNjb3BlfHx0aGlzLnNhdmVWaWV3SW5pdGlhbChyKSx0aGlzLnNjb3BlPXIuc2NvcGUsdGhpcy51cGRhdGVCYXNlTGF5ZXJzKGUsciksdGhpcy51cGRhdGVEaW1zKGUsciksdGhpcy51cGRhdGVGeChlLHIpLHUuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ3JhcGhEaXYsdGhpcyx0LHIpO3ZhciBvPXRoaXMubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKTt0aGlzLmRhdGFQb2ludHMucG9pbnQ9by5zZWxlY3RBbGwoIi5wb2ludCIpLHRoaXMuZGF0YVBvaW50cy50ZXh0PW8uc2VsZWN0QWxsKCJ0ZXh0IiksdGhpcy5kYXRhUGF0aHMubGluZT1vLnNlbGVjdEFsbCgiLmpzLWxpbmUiKTt2YXIgcz10aGlzLmxheWVycy5iYWNrcGxvdC5zZWxlY3QoIi5jaG9yb3BsZXRobGF5ZXIiKTt0aGlzLmRhdGFQYXRocy5jaG9yb3BsZXRoPXMuc2VsZWN0QWxsKCJwYXRoIiksdGhpcy5yZW5kZXIoKX19LFQudXBkYXRlUHJvamVjdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ3JhcGhEaXYsbz1lW3RoaXMuaWRdLHM9ZS5fc2l6ZSxsPW8uZG9tYWluLGM9by5wcm9qZWN0aW9uLHU9by5sb25heGlzLGY9by5sYXRheGlzLHA9dS5fYXgsZD1mLl9heCxnPXRoaXMucHJvamVjdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5wcm9qZWN0aW9uLnR5cGUscj1uLmdlb1t5LnByb2pOYW1lc1tlXV0oKSxpPXQuX2lzQ2xpcHBlZD95LmxvbmF4aXNTcGFuW2VdLzI6bnVsbCxhPVsiY2VudGVyIiwicm90YXRlIiwicGFyYWxsZWxzIiwiY2xpcEV4dGVudCJdLG89ZnVuY3Rpb24odCl7cmV0dXJuIHQ/cjpbXX0scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdOyJmdW5jdGlvbiIhPXR5cGVvZiByW2xdJiYocltsXT1vKX1yLmlzTG9uTGF0T3ZlckVkZ2VzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT1yKHQpKXJldHVybiEwO2lmKGkpe3ZhciBlPXIucm90YXRlKCk7cmV0dXJuIG4uZ2VvLmRpc3RhbmNlKHQsWy1lWzBdLC1lWzFdXSk+aSpNYXRoLlBJLzE4MH1yZXR1cm4hMX0sci5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2VvLnBhdGgoKS5wcm9qZWN0aW9uKHIpfSxyLmdldEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gci5nZXRQYXRoKCkuYm91bmRzKHQpfSxyLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMV1bMF0tdFswXVswXSxpPXRbMV1bMV0tdFswXVsxXSxhPXIuY2xpcEV4dGVudCYmci5jbGlwRXh0ZW50KCk7ci5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksYSYmci5jbGlwRXh0ZW50KG51bGwpO3ZhciBvPXIuZ2V0Qm91bmRzKGUpLHM9TWF0aC5taW4obi8ob1sxXVswXS1vWzBdWzBdKSxpLyhvWzFdWzFdLW9bMF1bMV0pKSxsPSt0WzBdWzBdKyhuLXMqKG9bMV1bMF0rb1swXVswXSkpLzIsYz0rdFswXVsxXSsoaS1zKihvWzFdWzFdK29bMF1bMV0pKS8yO3JldHVybiBhJiZyLmNsaXBFeHRlbnQoYSksci5zY2FsZSgxNTAqcykudHJhbnNsYXRlKFtsLGNdKX0sci5wcmVjaXNpb24oeS5wcmVjaXNpb24pLGkmJnIuY2xpcEFuZ2xlKGkteS5jbGlwUGFkKTtyZXR1cm4gcn0obyksbT1bW3MubCtzLncqbC54WzBdLHMudCtzLmgqKDEtbC55WzFdKV0sW3MubCtzLncqbC54WzFdLHMudCtzLmgqKDEtbC55WzBdKV1dLHY9by5jZW50ZXJ8fHt9LHg9Yy5yb3RhdGlvbnx8e30sYj11LnJhbmdlfHxbXSxfPWYucmFuZ2V8fFtdO2lmKG8uZml0Ym91bmRzKXtwLl9sZW5ndGg9bVsxXVswXS1tWzBdWzBdLGQuX2xlbmd0aD1tWzFdWzFdLW1bMF1bMV0scC5yYW5nZT1oKHIscCksZC5yYW5nZT1oKHIsZCk7dmFyIHc9KHAucmFuZ2VbMF0rcC5yYW5nZVsxXSkvMixUPShkLnJhbmdlWzBdK2QucmFuZ2VbMV0pLzI7aWYoby5faXNTY29wZWQpdj17bG9uOncsbGF0OlR9O2Vsc2UgaWYoby5faXNDbGlwcGVkKXt2PXtsb246dyxsYXQ6VH0seD17bG9uOncsbGF0OlQscm9sbDp4LnJvbGx9O3ZhciBNPWMudHlwZSxBPXkubG9uYXhpc1NwYW5bTV0vMnx8MTgwLFM9eS5sYXRheGlzU3BhbltNXS8yfHw5MDtiPVt3LUEsdytBXSxfPVtULVMsVCtTXX1lbHNlIHY9e2xvbjp3LGxhdDpUfSx4PXtsb246dyxsYXQ6eC5sYXQscm9sbDp4LnJvbGx9fWcuY2VudGVyKFt2Lmxvbi14Lmxvbix2LmxhdC14LmxhdF0pLnJvdGF0ZShbLXgubG9uLC14LmxhdCx4LnJvbGxdKS5wYXJhbGxlbHMoYy5wYXJhbGxlbHMpO3ZhciBFPWsoYixfKTtnLmZpdEV4dGVudChtLEUpO3ZhciBDPXRoaXMuYm91bmRzPWcuZ2V0Qm91bmRzKEUpLEw9dGhpcy5maXRTY2FsZT1nLnNjYWxlKCksST1nLnRyYW5zbGF0ZSgpO2lmKCFpc0Zpbml0ZShDWzBdWzBdKXx8IWlzRmluaXRlKENbMF1bMV0pfHwhaXNGaW5pdGUoQ1sxXVswXSl8fCFpc0Zpbml0ZShDWzFdWzFdKXx8aXNOYU4oSVswXSl8fGlzTmFOKElbMF0pKXtmb3IodmFyIFA9WyJmaXRib3VuZHMiLCJwcm9qZWN0aW9uLnJvdGF0aW9uIiwiY2VudGVyIiwibG9uYXhpcy5yYW5nZSIsImxhdGF4aXMucmFuZ2UiXSx6PSJJbnZhbGlkIGdlbyBzZXR0aW5ncywgcmVsYXlvdXQnaW5nIHRvIGRlZmF1bHQgdmlldy4iLE89e30sRD0wO0Q8UC5sZW5ndGg7RCsrKU9bdGhpcy5pZCsiLiIrUFtEXV09bnVsbDtyZXR1cm4gdGhpcy52aWV3SW5pdGlhbD1udWxsLGEud2Fybih6KSxyLl9wcm9taXNlcy5wdXNoKGkuY2FsbCgicmVsYXlvdXQiLHIsTykpLHp9aWYoby5maXRib3VuZHMpe3ZhciBSPWcuZ2V0Qm91bmRzKGsocC5yYW5nZSxkLnJhbmdlKSksRj1NYXRoLm1pbigoQ1sxXVswXS1DWzBdWzBdKS8oUlsxXVswXS1SWzBdWzBdKSwoQ1sxXVsxXS1DWzBdWzFdKS8oUlsxXVsxXS1SWzBdWzFdKSk7aXNGaW5pdGUoRik/Zy5zY2FsZShGKkwpOmEud2FybigiU29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIit0aGlzLmlkKyJmaXRib3VuZHMgY29tcHV0YXRpb25zLiIpfWVsc2UgZy5zY2FsZShjLnNjYWxlKkwpO3ZhciBCPXRoaXMubWlkUHQ9WyhDWzBdWzBdK0NbMV1bMF0pLzIsKENbMF1bMV0rQ1sxXVsxXSkvMl07aWYoZy50cmFuc2xhdGUoW0lbMF0rKEJbMF0tSVswXSksSVsxXSsoQlsxXS1JWzFdKV0pLmNsaXBFeHRlbnQoQyksby5faXNBbGJlcnNVc2Epe3ZhciBOPWcoW3YubG9uLHYubGF0XSksaj1nLnRyYW5zbGF0ZSgpO2cudHJhbnNsYXRlKFtqWzBdLShOWzBdLWpbMF0pLGpbMV0tKE5bMV0talsxXSldKX19LFQudXBkYXRlQmFzZUxheWVycz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsaT1yLnRvcG9qc29uLGE9ci5sYXllcnMsbz1yLmJhc2VQYXRocztmdW5jdGlvbiBjKHQpe3JldHVybiJsb25heGlzIj09PXR8fCJsYXRheGlzIj09PXR9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gQm9vbGVhbih5LmxpbmVMYXllcnNbdF0pfWZ1bmN0aW9uIGgodCl7cmV0dXJuIEJvb2xlYW4oeS5maWxsTGF5ZXJzW3RdKX12YXIgcD0odGhpcy5oYXNDaG9yb3BsZXRoP3kubGF5ZXJzRm9yQ2hvcm9wbGV0aDp5LmxheWVycykuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdSh0KXx8aCh0KT9lWyJzaG93Iit0XTohYyh0KXx8ZVt0XS5zaG93Z3JpZH0pKSxkPXIuZnJhbWV3b3JrLnNlbGVjdEFsbCgiLmxheWVyIikuZGF0YShwLFN0cmluZyk7ZC5leGl0KCkuZWFjaCgoZnVuY3Rpb24odCl7ZGVsZXRlIGFbdF0sZGVsZXRlIG9bdF0sbi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSksZC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuImxheWVyICIrdH0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1hW3RdPW4uc2VsZWN0KHRoaXMpOyJiZyI9PT10P3IuYmdSZWN0PWUuYXBwZW5kKCJyZWN0Iikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIik6Yyh0KT9vW3RdPWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoImZpbGwiLCJub25lIik6ImJhY2twbG90Ij09PXQ/ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJjaG9yb3BsZXRobGF5ZXIiLCEwKToiZnJvbnRwbG90Ij09PXQ/ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJzY2F0dGVybGF5ZXIiLCEwKTp1KHQpP29bdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDIpOmgodCkmJihvW3RdPWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKSl9KSksZC5vcmRlcigpLGQuZWFjaCgoZnVuY3Rpb24ocil7dmFyIG49b1tyXSxhPXkubGF5ZXJOYW1lVG9BZGplY3RpdmVbcl07ImZyYW1lIj09PXI/bi5kYXR1bSh5LnNwaGVyZVNWRyk6dShyKXx8aChyKT9uLmRhdHVtKF8oaSxpLm9iamVjdHNbcl0pKTpjKHIpJiZuLmRhdHVtKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbz1lW3RdLHM9eS5zY29wZURlZmF1bHRzW2Uuc2NvcGVdOyJsb25heGlzIj09PXQ/KG49cy5sb25heGlzUmFuZ2UsaT1zLmxhdGF4aXNSYW5nZSxhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsZV19KToibGF0YXhpcyI9PT10JiYobj1zLmxhdGF4aXNSYW5nZSxpPXMubG9uYXhpc1JhbmdlLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm5bZSx0XX0pO3ZhciBsPXt0eXBlOiJsaW5lYXIiLHJhbmdlOltuWzBdLG5bMV0tMWUtNl0sdGljazA6by50aWNrMCxkdGljazpvLmR0aWNrfTtmLnNldENvbnZlcnQobCxyKTt2YXIgYz1mLmNhbGNUaWNrcyhsKTtlLmlzU2NvcGVkfHwibG9uYXhpcyIhPT10fHxjLnBvcCgpO2Zvcih2YXIgdT1jLmxlbmd0aCxoPW5ldyBBcnJheSh1KSxwPTA7cDx1O3ArKylmb3IodmFyIGQ9Y1twXS54LGc9aFtwXT1bXSxtPWlbMF07bTxpWzFdKzIuNTttKz0yLjUpZy5wdXNoKGEoZCxtKSk7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6aH19KHIsZSx0KSkuY2FsbChzLnN0cm9rZSxlW3JdLmdyaWRjb2xvcikuY2FsbChsLmRhc2hMaW5lLCIiLGVbcl0uZ3JpZHdpZHRoKSx1KHIpP24uY2FsbChzLnN0cm9rZSxlW2ErImNvbG9yIl0pLmNhbGwobC5kYXNoTGluZSwiIixlW2ErIndpZHRoIl0pOmgocikmJm4uY2FsbChzLmZpbGwsZVthKyJjb2xvciJdKX0pKX0sVC51cGRhdGVEaW1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ib3VuZHMsbj0oZS5mcmFtZXdpZHRofHwwKS8yLGk9clswXVswXS1uLGE9clswXVsxXS1uLG89clsxXVswXS1pK24sYz1yWzFdWzFdLWErbjtsLnNldFJlY3QodGhpcy5jbGlwUmVjdCxpLGEsbyxjKSx0aGlzLmJnUmVjdC5jYWxsKGwuc2V0UmVjdCxpLGEsbyxjKS5jYWxsKHMuZmlsbCxlLmJnY29sb3IpLHRoaXMueGF4aXMuX29mZnNldD1pLHRoaXMueGF4aXMuX2xlbmd0aD1vLHRoaXMueWF4aXMuX29mZnNldD1hLHRoaXMueWF4aXMuX2xlbmd0aD1jfSxULnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxhPXIuZ3JhcGhEaXYsbz1yLmJnUmVjdCxzPXQuZHJhZ21vZGUsbD10LmNsaWNrbW9kZTtpZighci5pc1N0YXRpYyl7dmFyIHU7InNlbGVjdCI9PT1zP3U9ZnVuY3Rpb24odCxlKXsodC5yYW5nZT17fSlbci5pZF09W2goW2UueG1pbixlLnltaW5dKSxoKFtlLnhtYXgsZS55bWF4XSldfToibGFzc28iPT09cyYmKHU9ZnVuY3Rpb24odCxlLG4peyh0Lmxhc3NvUG9pbnRzPXt9KVtyLmlkXT1uLmZpbHRlcmVkLm1hcChoKX0pO3ZhciBmPXtlbGVtZW50OnIuYmdSZWN0Lm5vZGUoKSxnZDphLHBsb3RpbmZvOntpZDpyLmlkLHhheGlzOnIueGF4aXMseWF4aXM6ci55YXhpcyxmaWxsUmFuZ2VJdGVtczp1fSx4YXhlczpbci54YXhpc10seWF4ZXM6W3IueWF4aXNdLHN1YnBsb3Q6ci5pZCxjbGlja0ZuOmZ1bmN0aW9uKHQpezI9PT10JiZnKGEpfX07InBhbiI9PT1zPyhvLm5vZGUoKS5vbm1vdXNlZG93bj1udWxsLG8uY2FsbCh2KHIsZSkpLG8ub24oImRibGNsaWNrLnpvb20iLChmdW5jdGlvbigpe3ZhciB0PXIudmlld0luaXRpYWwsZT17fTtmb3IodmFyIG4gaW4gdCllW3IuaWQrIi4iK25dPXRbbl07aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGEsZSksYS5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpfSkpLGEuX2NvbnRleHQuX3Njcm9sbFpvb20uZ2VvfHxvLm9uKCJ3aGVlbC56b29tIixudWxsKSk6InNlbGVjdCIhPT1zJiYibGFzc28iIT09c3x8KG8ub24oIi56b29tIixudWxsKSxmLnByZXBGbj1mdW5jdGlvbih0LGUscil7ZCh0LGUscixmLHMpfSxwLmluaXQoZikpLG8ub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKCl7dmFyIHQ9ci5wcm9qZWN0aW9uLmludmVydChuLm1vdXNlKHRoaXMpKTtpZighdHx8aXNOYU4odFswXSl8fGlzTmFOKHRbMV0pKXJldHVybiBwLnVuaG92ZXIoYSxuLmV2ZW50KTtyLnhheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0WzBdfSxyLnlheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0WzFdfSxjLmhvdmVyKGEsbi5ldmVudCxyLmlkKX0pKSxvLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7YS5fZHJhZ2dpbmd8fHAudW5ob3ZlcihhLG4uZXZlbnQpfSkpLG8ub24oImNsaWNrIiwoZnVuY3Rpb24oKXsic2VsZWN0IiE9PXMmJiJsYXNzbyIhPT1zJiYobC5pbmRleE9mKCJzZWxlY3QiKT4tMSYmbShuLmV2ZW50LGEsW3IueGF4aXNdLFtyLnlheGlzXSxyLmlkLGYpLGwuaW5kZXhPZigiZXZlbnQiKT4tMSYmYy5jbGljayhhLG4uZXZlbnQpKX0pKX1mdW5jdGlvbiBoKHQpe3JldHVybiByLnByb2plY3Rpb24uaW52ZXJ0KFt0WzBdK3IueGF4aXMuX29mZnNldCx0WzFdK3IueWF4aXMuX29mZnNldF0pfX0sVC5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuZ3JhcGhEaXYscj1lLl9mdWxsTGF5b3V0LGk9ImNsaXAiK3IuX3VpZCt0LmlkO3QuY2xpcERlZj1yLl9jbGlwcy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGkpLHQuY2xpcFJlY3Q9dC5jbGlwRGVmLmFwcGVuZCgicmVjdCIpLHQuZnJhbWV3b3JrPW4uc2VsZWN0KHQuY29udGFpbmVyKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdlbyAiK3QuaWQpLmNhbGwobC5zZXRDbGlwVXJsLGksZSksdC5wcm9qZWN0PWZ1bmN0aW9uKGUpe3ZhciByPXQucHJvamVjdGlvbihlKTtyZXR1cm4gcj9bclswXS10LnhheGlzLl9vZmZzZXQsclsxXS10LnlheGlzLl9vZmZzZXRdOltudWxsLG51bGxdfSx0LnhheGlzPXtfaWQ6IngiLGMycDpmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9qZWN0KGUpWzBdfX0sdC55YXhpcz17X2lkOiJ5IixjMnA6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvamVjdChlKVsxXX19LHQubW9ja0F4aXM9e3R5cGU6ImxpbmVhciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn0sZi5zZXRDb252ZXJ0KHQubW9ja0F4aXMscil9LFQuc2F2ZVZpZXdJbml0aWFsPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5jZW50ZXJ8fHt9LG49dC5wcm9qZWN0aW9uLGk9bi5yb3RhdGlvbnx8e307dGhpcy52aWV3SW5pdGlhbD17Zml0Ym91bmRzOnQuZml0Ym91bmRzLCJwcm9qZWN0aW9uLnNjYWxlIjpuLnNjYWxlfSxlPXQuX2lzU2NvcGVkP3siY2VudGVyLmxvbiI6ci5sb24sImNlbnRlci5sYXQiOnIubGF0fTp0Ll9pc0NsaXBwZWQ/eyJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6aS5sb24sInByb2plY3Rpb24ucm90YXRpb24ubGF0IjppLmxhdH06eyJjZW50ZXIubG9uIjpyLmxvbiwiY2VudGVyLmxhdCI6ci5sYXQsInByb2plY3Rpb24ucm90YXRpb24ubG9uIjppLmxvbn0sYS5leHRlbmRGbGF0KHRoaXMudmlld0luaXRpYWwsZSl9LFQucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLnByb2plY3Rpb24scj1lLmdldFBhdGgoKTtmdW5jdGlvbiBuKHQpe3ZhciByPWUodC5sb25sYXQpO3JldHVybiByP28oclswXSxyWzFdKTpudWxsfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUuaXNMb25MYXRPdmVyRWRnZXModC5sb25sYXQpPyJub25lIjpudWxsfWZvcih0IGluIHRoaXMuYmFzZVBhdGhzKXRoaXMuYmFzZVBhdGhzW3RdLmF0dHIoImQiLHIpO2Zvcih0IGluIHRoaXMuZGF0YVBhdGhzKXRoaXMuZGF0YVBhdGhzW3RdLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gcih0Lmdlb2pzb24pfSkpO2Zvcih0IGluIHRoaXMuZGF0YVBvaW50cyl0aGlzLmRhdGFQb2ludHNbdF0uYXR0cigiZGlzcGxheSIsaSkuYXR0cigidHJhbnNmb3JtIixuKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2NjIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjY1LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2ODMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3NzEsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6ODA2LCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo4MjcsIi4uL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjg0NywiLi4vcGxvdHMiOjg5MSwiLi9jb25zdGFudHMiOjg1OCwiLi9wcm9qZWN0aW9ucyI6ODYzLCIuL3pvb20iOjg2NCxkMzoxNjksInRvcG9qc29uLWNsaWVudCI6NTc5fV0sODYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGk9dCgiLi4vLi4vbGliIikuY291bnRlclJlZ2V4LGE9dCgiLi9nZW8iKSxvPSJnZW8iLHM9aShvKSxsPXt9O2wuZ2VvPXt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6byxlZGl0VHlwZToiY2FsYyJ9LGUuZXhwb3J0cz17YXR0cjpvLG5hbWU6byxpZFJvb3Q6byxpZFJlZ2V4OnMsYXR0clJlZ2V4OnMsYXR0cmlidXRlczpsLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIikscGxvdDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsaT1lLl9zdWJwbG90cy5nZW8scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLGM9bihyLG8sbCksdT1lW2xdLl9zdWJwbG90O3V8fCh1PWEoe2lkOmwsZ3JhcGhEaXY6dCxjb250YWluZXI6ZS5fZ2VvbGF5ZXIubm9kZSgpLHRvcG9qc29uVVJMOnQuX2NvbnRleHQudG9wb2pzb25VUkwsc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3R9KSxlW2xdLl9zdWJwbG90PXUpLHUucGxvdChjLGUsdC5fcHJvbWlzZXMpfX0sdXBkYXRlRng6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nZW8sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lW3Jbbl1dO2kuX3N1YnBsb3QudXBkYXRlRngoZSxpKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy5nZW98fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5bb10uX3N1YnBsb3Q7IWVbb10mJnMmJihzLmZyYW1ld29yay5yZW1vdmUoKSxzLmNsaXBEZWYucmVtb3ZlKCkpfX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6ODY1LCIuL2dlbyI6ODU5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NjEsIi4vbGF5b3V0X2RlZmF1bHRzIjo4NjJ9XSw4NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLGE9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXtyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIifSx7dmFsVHlwZToibnVtYmVyIn1dfSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sdGljazA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxkdGljazp7dmFsVHlwZToibnVtYmVyIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmxpZ2h0TGluZX0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19OyhlLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6ImdlbyJ9LHt9KSxmaXRib3VuZHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITEsImxvY2F0aW9ucyIsImdlb2pzb24iXSxkZmx0OiExLGVkaXRUeXBlOiJwbG90In0scmVzb2x1dGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsxMTAsNTBdLGRmbHQ6MTEwLGNvZXJjZU51bWJlcjohMH0sc2NvcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhhLnNjb3BlRGVmYXVsdHMpLGRmbHQ6IndvcmxkIn0scHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGEucHJvak5hbWVzKX0scm90YXRpb246e2xvbjp7dmFsVHlwZToibnVtYmVyIn0sbGF0Ont2YWxUeXBlOiJudW1iZXIifSxyb2xsOnt2YWxUeXBlOiJudW1iZXIifX0scGFyYWxsZWxzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19LGNlbnRlcjp7bG9uOnt2YWxUeXBlOiJudW1iZXIifSxsYXQ6e3ZhbFR5cGU6Im51bWJlciJ9fSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93Y29hc3RsaW5lczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvYXN0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb2FzdGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dsYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYW5kY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEubGFuZENvbG9yfSxzaG93b2NlYW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9jZWFuY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd2xha2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYWtlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd3JpdmVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scml2ZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS53YXRlckNvbG9yfSxyaXZlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2NvdW50cmllczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvdW50cnljb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY291bnRyeXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd3N1YnVuaXRzOnt2YWxUeXBlOiJib29sZWFuIn0sc3VidW5pdGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzdWJ1bml0d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93ZnJhbWU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxmcmFtZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxmcmFtZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxsb25heGlzOnMsbGF0YXhpczpzfSwicGxvdCIsImZyb20tcm9vdCIpKS51aXJldmlzaW9uPXt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2NDIsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgxMCwiLi4vZG9tYWluIjo4NTUsIi4vY29uc3RhbnRzIjo4NTh9XSw4NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zdWJwbG90X2RlZmF1bHRzIiksYT10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhLG89dCgiLi9jb25zdGFudHMiKSxzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPW8uYXhlc05hbWVzO2Z1bmN0aW9uIGModCxlLHIsaSl7dmFyIHM9YShpLmZ1bGxEYXRhLCJnZW8iLGkuaWQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KSksYz1yKCJyZXNvbHV0aW9uIiksdT1yKCJzY29wZSIpLGY9by5zY29wZURlZmF1bHRzW3VdLGg9cigicHJvamVjdGlvbi50eXBlIixmLnByb2pUeXBlKSxwPWUuX2lzQWxiZXJzVXNhPSJhbGJlcnMgdXNhIj09PWg7cCYmKHU9ZS5zY29wZT0idXNhIik7dmFyIGQ9ZS5faXNTY29wZWQ9IndvcmxkIiE9PXUsZz1lLl9pc0NvbmljPS0xIT09aC5pbmRleE9mKCJjb25pYyIpLG09ZS5faXNDbGlwcGVkPSEhby5sb25heGlzU3BhbltoXTtpZighMT09PXQudmlzaWJsZSl7dmFyIHY9bi5leHRlbmREZWVwKHt9LGUuX3RlbXBsYXRlKTt2LnNob3djb2FzdGxpbmVzPSExLHYuc2hvd2NvdW50cmllcz0hMSx2LnNob3dmcmFtZT0hMSx2LnNob3dsYWtlcz0hMSx2LnNob3dsYW5kPSExLHYuc2hvd29jZWFuPSExLHYuc2hvd3JpdmVycz0hMSx2LnNob3dzdWJ1bml0cz0hMSx2LmxvbmF4aXMmJih2LmxvbmF4aXMuc2hvd2dyaWQ9ITEpLHYubGF0YXhpcyYmKHYubGF0YXhpcy5zaG93Z3JpZD0hMSksZS5fdGVtcGxhdGU9dn1mb3IodmFyIHk9cigidmlzaWJsZSIpLHg9MDt4PGwubGVuZ3RoO3grKyl7dmFyIGIsXz1sW3hdLHc9WzMwLDEwXVt4XTtpZihkKWI9ZltfKyJSYW5nZSJdO2Vsc2V7dmFyIFQ9b1tfKyJTcGFuIl0saz0oVFtoXXx8VFsiKiJdKS8yLE09cigicHJvamVjdGlvbi5yb3RhdGlvbi4iK18uc3Vic3RyKDAsMyksZi5wcm9qUm90YXRlW3hdKTtiPVtNLWssTStrXX12YXIgQT1yKF8rIi5yYW5nZSIsYik7cihfKyIudGljazAiKSxyKF8rIi5kdGljayIsdykscihfKyIuc2hvd2dyaWQiLCEheSYmdm9pZCAwKSYmKHIoXysiLmdyaWRjb2xvciIpLHIoXysiLmdyaWR3aWR0aCIpKSxlW19dLl9heD17dHlwZToibGluZWFyIixfaWQ6Xy5zbGljZSgwLDMpLF90cmFjZUluZGljZXM6cyxzZXRTY2FsZTpuLmlkZW50aXR5LGMybDpuLmlkZW50aXR5LHIybDpuLmlkZW50aXR5LGF1dG9yYW5nZTohMCxyYW5nZTpBLnNsaWNlKCksX206MSxfaW5wdXQ6e319fXZhciBTPWUubG9uYXhpcy5yYW5nZSxFPWUubGF0YXhpcy5yYW5nZSxDPVNbMF0sTD1TWzFdO0M+MCYmTDwwJiYoTCs9MzYwKTt2YXIgSSxQLHosTz0oQytMKS8yO2lmKCFwKXt2YXIgRD1kP2YucHJvalJvdGF0ZTpbTywwLDBdO0k9cigicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iLERbMF0pLHIoInByb2plY3Rpb24ucm90YXRpb24ubGF0IixEWzFdKSxyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLnJvbGwiLERbMl0pLHIoInNob3djb2FzdGxpbmVzIiwhZCYmeSkmJihyKCJjb2FzdGxpbmVjb2xvciIpLHIoImNvYXN0bGluZXdpZHRoIikpLHIoInNob3dvY2VhbiIsISF5JiZ2b2lkIDApJiZyKCJvY2VhbmNvbG9yIil9KHA/KFA9LTk2LjYsej0zOC43KTooUD1kP086SSx6PShFWzBdK0VbMV0pLzIpLHIoImNlbnRlci5sb24iLFApLHIoImNlbnRlci5sYXQiLHopLGcpJiZyKCJwcm9qZWN0aW9uLnBhcmFsbGVscyIsZi5wcm9qUGFyYWxsZWxzfHxbMCw2MF0pO3IoInByb2plY3Rpb24uc2NhbGUiKSxyKCJzaG93bGFuZCIsISF5JiZ2b2lkIDApJiZyKCJsYW5kY29sb3IiKSxyKCJzaG93bGFrZXMiLCEheSYmdm9pZCAwKSYmcigibGFrZWNvbG9yIikscigic2hvd3JpdmVycyIsISF5JiZ2b2lkIDApJiYocigicml2ZXJjb2xvciIpLHIoInJpdmVyd2lkdGgiKSkscigic2hvd2NvdW50cmllcyIsZCYmInVzYSIhPT11JiZ5KSYmKHIoImNvdW50cnljb2xvciIpLHIoImNvdW50cnl3aWR0aCIpKSwoInVzYSI9PT11fHwibm9ydGggYW1lcmljYSI9PT11JiY1MD09PWMpJiYocigic2hvd3N1YnVuaXRzIix5KSxyKCJzdWJ1bml0Y29sb3IiKSxyKCJzdWJ1bml0d2lkdGgiKSksZHx8cigic2hvd2ZyYW1lIix5KSYmKHIoImZyYW1lY29sb3IiKSxyKCJmcmFtZXdpZHRoIikpLHIoImJnY29sb3IiKSxyKCJmaXRib3VuZHMiKSYmKGRlbGV0ZSBlLnByb2plY3Rpb24uc2NhbGUsZD8oZGVsZXRlIGUuY2VudGVyLmxvbixkZWxldGUgZS5jZW50ZXIubGF0KTptPyhkZWxldGUgZS5jZW50ZXIubG9uLGRlbGV0ZSBlLmNlbnRlci5sYXQsZGVsZXRlIGUucHJvamVjdGlvbi5yb3RhdGlvbi5sb24sZGVsZXRlIGUucHJvamVjdGlvbi5yb3RhdGlvbi5sYXQsZGVsZXRlIGUubG9uYXhpcy5yYW5nZSxkZWxldGUgZS5sYXRheGlzLnJhbmdlKTooZGVsZXRlIGUuY2VudGVyLmxvbixkZWxldGUgZS5jZW50ZXIubGF0LGRlbGV0ZSBlLnByb2plY3Rpb24ucm90YXRpb24ubG9uKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpKHQsZSxyLHt0eXBlOiJnZW8iLGF0dHJpYnV0ZXM6cyxoYW5kbGVEZWZhdWx0czpjLGZ1bGxEYXRhOnIscGFydGl0aW9uOiJ5In0pfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vZ2V0X2RhdGEiOjg2NSwiLi4vc3VicGxvdF9kZWZhdWx0cyI6OTA1LCIuL2NvbnN0YW50cyI6ODU4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NjF9XSw4NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm57dHlwZToiRmVhdHVyZSIsaWQ6dC5pZCxwcm9wZXJ0aWVzOnQucHJvcGVydGllcyxnZW9tZXRyeTpyKHQuZ2VvbWV0cnksZSl9fWZ1bmN0aW9uIHIoZSxuKXtpZighZSlyZXR1cm4gbnVsbDtpZigiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWUudHlwZSlyZXR1cm57dHlwZToiR2VvbWV0cnlDb2xsZWN0aW9uIixnZW9tZXRyaWVzOm9iamVjdC5nZW9tZXRyaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHIodCxuKX0pKX07aWYoIWMuaGFzT3duUHJvcGVydHkoZS50eXBlKSlyZXR1cm4gbnVsbDt2YXIgaT1jW2UudHlwZV07cmV0dXJuIHQuZ2VvLnN0cmVhbShlLG4oaSkpLGkucmVzdWx0KCl9dC5nZW8ucHJvamVjdD1mdW5jdGlvbih0LGUpe3ZhciBpPWUuc3RyZWFtO2lmKCFpKXRocm93IG5ldyBFcnJvcigibm90IHlldCBzdXBwb3J0ZWQiKTtyZXR1cm4odCYmbi5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP25bdC50eXBlXTpyKSh0LGkpfTt2YXIgbj17RmVhdHVyZTplLEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQscil7cmV0dXJue3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczp0LmZlYXR1cmVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUodCxyKX0pKX19fSxpPVtdLGE9W10sbz17cG9pbnQ6ZnVuY3Rpb24odCxlKXtpLnB1c2goW3QsZV0pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1pLmxlbmd0aD9pLmxlbmd0aDwyP3t0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6aVswXX06e3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOml9Om51bGw7cmV0dXJuIGk9W10sdH19LHM9e2xpbmVTdGFydDp1LHBvaW50OmZ1bmN0aW9uKHQsZSl7aS5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe2kubGVuZ3RoJiYoYS5wdXNoKGkpLGk9W10pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1hLmxlbmd0aD9hLmxlbmd0aDwyP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczphWzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczphfTpudWxsO3JldHVybiBhPVtdLHR9fSxsPXtwb2x5Z29uU3RhcnQ6dSxsaW5lU3RhcnQ6dSxwb2ludDpmdW5jdGlvbih0LGUpe2kucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD1pLmxlbmd0aDtpZih0KXtkb3tpLnB1c2goaVswXS5zbGljZSgpKX13aGlsZSgrK3Q8NCk7YS5wdXNoKGkpLGk9W119fSxwb2x5Z29uRW5kOnUscmVzdWx0OmZ1bmN0aW9uKCl7aWYoIWEubGVuZ3RoKXJldHVybiBudWxsO3ZhciB0PVtdLGU9W107cmV0dXJuIGEuZm9yRWFjaCgoZnVuY3Rpb24ocil7IWZ1bmN0aW9uKHQpe2lmKChlPXQubGVuZ3RoKTw0KXJldHVybiExO3ZhciBlLHI9MCxuPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdO2Zvcig7KytyPGU7KW4rPXRbci0xXVsxXSp0W3JdWzBdLXRbci0xXVswXSp0W3JdWzFdO3JldHVybiBuPD0wfShyKT9lLnB1c2gocik6dC5wdXNoKFtyXSl9KSksZS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3Quc29tZSgoZnVuY3Rpb24odCl7aWYoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVswXSxuPWVbMV0saT0hMSxhPTAsbz10Lmxlbmd0aCxzPW8tMTthPG87cz1hKyspe3ZhciBsPXRbYV0sYz1sWzBdLHU9bFsxXSxmPXRbc10saD1mWzBdLHA9ZlsxXTt1Pm5ecD5uJiZyPChoLWMpKihuLXUpLyhwLXUpK2MmJihpPSFpKX1yZXR1cm4gaX0odFswXSxyKSlyZXR1cm4gdC5wdXNoKGUpLCEwfSkpfHx0LnB1c2goW2VdKX0pKSxhPVtdLHQubGVuZ3RoP3QubGVuZ3RoPjE/e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6dH06e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOnRbMF19Om51bGx9fSxjPXtQb2ludDpvLE11bHRpUG9pbnQ6byxMaW5lU3RyaW5nOnMsTXVsdGlMaW5lU3RyaW5nOnMsUG9seWdvbjpsLE11bHRpUG9seWdvbjpsLFNwaGVyZTpsfTtmdW5jdGlvbiB1KCl7fXZhciBmPTFlLTYsaD1NYXRoLlBJLHA9aC8yLGQ9KE1hdGguc3FydChoKSxoLzE4MCksZz0xODAvaDtmdW5jdGlvbiBtKHQpe3JldHVybiB0PjE/cDp0PC0xPy1wOk1hdGguYXNpbih0KX1mdW5jdGlvbiB2KHQpe3JldHVybiB0PjE/MDp0PC0xP2g6TWF0aC5hY29zKHQpfXZhciB5PXQuZ2VvLnByb2plY3Rpb24seD10Lmdlby5wcm9qZWN0aW9uTXV0YXRvcjtmdW5jdGlvbiBiKHQsZSl7dmFyIHI9KDIrcCkqTWF0aC5zaW4oZSk7ZS89Mjtmb3IodmFyIG49MCxpPTEvMDtuPDEwJiZNYXRoLmFicyhpKT5mO24rKyl7dmFyIGE9TWF0aC5jb3MoZSk7ZS09aT0oZStNYXRoLnNpbihlKSooYSsyKS1yKS8oMiphKigxK2EpKX1yZXR1cm5bMi9NYXRoLnNxcnQoaCooNCtoKSkqdCooMStNYXRoLmNvcyhlKSksMipNYXRoLnNxcnQoaC8oNCtoKSkqTWF0aC5zaW4oZSldfXQuZ2VvLmludGVycnVwdD1mdW5jdGlvbihlKXt2YXIgcixuPVtbW1staCwwXSxbMCxwXSxbaCwwXV1dLFtbWy1oLDBdLFswLC1wXSxbaCwwXV1dXTtmdW5jdGlvbiBpKHQscil7Zm9yKHZhciBpPXI8MD8tMToxLGE9blsrKHI8MCldLG89MCxzPWEubGVuZ3RoLTE7bzxzJiZ0PmFbb11bMl1bMF07KytvKTt2YXIgbD1lKHQtYVtvXVsxXVswXSxyKTtyZXR1cm4gbFswXSs9ZShhW29dWzFdWzBdLGkqcj5pKmFbb11bMF1bMV0/YVtvXVswXVsxXTpyKVswXSxsfWZ1bmN0aW9uIGEoKXtyPW4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciByLG49ZSh0WzBdWzBdLHRbMF1bMV0pWzBdLGk9ZSh0WzJdWzBdLHRbMl1bMV0pWzBdLGE9ZSh0WzFdWzBdLHRbMF1bMV0pWzFdLG89ZSh0WzFdWzBdLHRbMV1bMV0pWzFdO3JldHVybiBhPm8mJihyPWEsYT1vLG89ciksW1tuLGFdLFtpLG9dXX0pKX0pKX1lLmludmVydCYmKGkuaW52ZXJ0PWZ1bmN0aW9uKHQsYSl7Zm9yKHZhciBvPXJbKyhhPDApXSxzPW5bKyhhPDApXSxsPTAsdT1vLmxlbmd0aDtsPHU7KytsKXt2YXIgZj1vW2xdO2lmKGZbMF1bMF08PXQmJnQ8ZlsxXVswXSYmZlswXVsxXTw9YSYmYTxmWzFdWzFdKXt2YXIgaD1lLmludmVydCh0LWUoc1tsXVsxXVswXSwwKVswXSxhKTtyZXR1cm4gaFswXSs9c1tsXVsxXVswXSxjKGkoaFswXSxoWzFdKSxbdCxhXSk/aDpudWxsfX19KTt2YXIgbz10Lmdlby5wcm9qZWN0aW9uKGkpLHM9by5zdHJlYW07ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcixuLGksYT0tMSxvPXQubGVuZ3RoLHM9dFswXSxsPVtdOysrYTxvOyl7bj0oKHI9dFthXSlbMF0tc1swXSkvZSxpPShyWzFdLXNbMV0pL2U7Zm9yKHZhciBjPTA7YzxlOysrYylsLnB1c2goW3NbMF0rYypuLHNbMV0rYyppXSk7cz1yfXJldHVybiBsLnB1c2gociksbH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXSk8ZiYmTWF0aC5hYnModFsxXS1lWzFdKTxmfXJldHVybiBvLnN0cmVhbT1mdW5jdGlvbihlKXt2YXIgcj1vLnJvdGF0ZSgpLGk9cyhlKSxhPShvLnJvdGF0ZShbMCwwXSkscyhlKSk7cmV0dXJuIG8ucm90YXRlKHIpLGkuc3BoZXJlPWZ1bmN0aW9uKCl7dC5nZW8uc3RyZWFtKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTFlLTYscj1bXSxpPTAsYT1uWzBdLmxlbmd0aDtpPGE7KytpKXt2YXIgbz0xODAqKHA9blswXVtpXSlbMF1bMF0vaCxzPTE4MCpwWzBdWzFdL2gsYz0xODAqcFsxXVsxXS9oLHU9MTgwKnBbMl1bMF0vaCxmPTE4MCpwWzJdWzFdL2g7ci5wdXNoKGwoW1tvK2UscytlXSxbbytlLGMtZV0sW3UtZSxjLWVdLFt1LWUsZitlXV0sMzApKX1mb3IoaT1uWzFdLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgcDtvPTE4MCoocD1uWzFdW2ldKVswXVswXS9oLHM9MTgwKnBbMF1bMV0vaCxjPTE4MCpwWzFdWzFdL2gsdT0xODAqcFsyXVswXS9oLGY9MTgwKnBbMl1bMV0vaDtyLnB1c2gobChbW3UtZSxmLWVdLFt1LWUsYytlXSxbbytlLGMrZV0sW28rZSxzLWVdXSwzMCkpfXJldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdC5tZXJnZShyKV19fSgpLGEpfSxpfSxvLmxvYmVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybltbdFswXVswXSpoLzE4MCx0WzBdWzFdKmgvMTgwXSxbdFsxXVswXSpoLzE4MCx0WzFdWzFdKmgvMTgwXSxbdFsyXVswXSpoLzE4MCx0WzJdWzFdKmgvMTgwXV19KSl9KSksYSgpLG8pOm4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybltbMTgwKnRbMF1bMF0vaCwxODAqdFswXVsxXS9oXSxbMTgwKnRbMV1bMF0vaCwxODAqdFsxXVsxXS9oXSxbMTgwKnRbMl1bMF0vaCwxODAqdFsyXVsxXS9oXV19KSl9KSl9LG99LGIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9LjUqZSpNYXRoLnNxcnQoKDQraCkvaCksbj1tKHIpLGk9TWF0aC5jb3Mobik7cmV0dXJuW3QvKDIvTWF0aC5zcXJ0KGgqKDQraCkpKigxK2kpKSxtKChuK3IqKGkrMikpLygyK3ApKV19LCh0Lmdlby5lY2tlcnQ0PWZ1bmN0aW9uKCl7cmV0dXJuIHkoYil9KS5yYXc9Yjt2YXIgXz10Lmdlby5hemltdXRoYWxFcXVhbEFyZWEucmF3O2Z1bmN0aW9uIHcodCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDImJihlPXQpLDE9PT1lKXJldHVybiBfO2lmKGU9PT0xLzApcmV0dXJuIFQ7ZnVuY3Rpb24gcihyLG4pe3ZhciBpPV8oci9lLG4pO3JldHVybiBpWzBdKj10LGl9cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7dmFyIGk9Xy5pbnZlcnQoci90LG4pO3JldHVybiBpWzBdKj1lLGl9LHJ9ZnVuY3Rpb24gVCh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpL01hdGguY29zKGUvPTIpLDIqTWF0aC5zaW4oZSldfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm5bMyp0LygyKmgpKk1hdGguc3FydChoKmgvMy1lKmUpLGVdfWZ1bmN0aW9uIE0odCxlKXtyZXR1cm5bdCwxLjI1Kk1hdGgubG9nKE1hdGgudGFuKGgvNCsuNCplKSldfWZ1bmN0aW9uIEEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLG49dCpNYXRoLnNpbihlKSxpPTMwO2Rve2UtPXI9KGUrTWF0aC5zaW4oZSktbikvKDErTWF0aC5jb3MoZSkpfXdoaWxlKE1hdGguYWJzKHIpPmYmJi0taT4wKTtyZXR1cm4gZS8yfX1ULmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPTIqbShlLzIpO3JldHVyblt0Kk1hdGguY29zKHIvMikvTWF0aC5jb3Mocikscl19LCh0Lmdlby5oYW1tZXI9ZnVuY3Rpb24oKXt2YXIgdD0yLGU9eCh3KSxyPWUodCk7cmV0dXJuIHIuY29lZmZpY2llbnQ9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZSh0PStyKTp0fSxyfSkucmF3PXcsay5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bMi8zKmgqdC9NYXRoLnNxcnQoaCpoLzMtZSplKSxlXX0sKHQuZ2VvLmthdnJheXNraXk3PWZ1bmN0aW9uKCl7cmV0dXJuIHkoayl9KS5yYXc9ayxNLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIuNSpNYXRoLmF0YW4oTWF0aC5leHAoLjgqZSkpLS42MjUqaF19LCh0Lmdlby5taWxsZXI9ZnVuY3Rpb24oKXtyZXR1cm4geShNKX0pLnJhdz1NLEEoaCk7dmFyIFM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPUEocik7ZnVuY3Rpb24gaShyLGkpe3JldHVyblt0KnIqTWF0aC5jb3MoaT1uKGkpKSxlKk1hdGguc2luKGkpXX1yZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24obixpKXt2YXIgYT1tKGkvZSk7cmV0dXJuW24vKHQqTWF0aC5jb3MoYSkpLG0oKDIqYStNYXRoLnNpbigyKmEpKS9yKV19LGl9KE1hdGguU1FSVDIvcCxNYXRoLlNRUlQyLGgpO2Z1bmN0aW9uIEUodCxlKXt2YXIgcj1lKmUsbj1yKnI7cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqcituKihuKiguMDAzOTcxKnItLjAwMTUyOSpuKS0uMDEzNzkxKSksZSooMS4wMDcyMjYrciooLjAxNTA4NStuKiguMDI4ODc0KnItLjA0NDQ3NS0uMDA1OTE2Km4pKSldfSh0Lmdlby5tb2xsd2VpZGU9ZnVuY3Rpb24oKXtyZXR1cm4geShTKX0pLnJhdz1TLEUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9MjU7ZG97dmFyIGE9bipuLG89YSphO24tPXI9KG4qKDEuMDA3MjI2K2EqKC4wMTUwODUrbyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipvKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K28qKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqbykpKX13aGlsZShNYXRoLmFicyhyKT5mJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPW4qbikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLG5dfSwodC5nZW8ubmF0dXJhbEVhcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHkoRSl9KS5yYXc9RTt2YXIgQz1bWy45OTg2LC0uMDYyXSxbMSwwXSxbLjk5ODYsLjA2Ml0sWy45OTU0LC4xMjRdLFsuOTksLjE4Nl0sWy45ODIyLC4yNDhdLFsuOTczLC4zMV0sWy45NiwuMzcyXSxbLjk0MjcsLjQzNF0sWy45MjE2LC40OTU4XSxbLjg5NjIsLjU1NzFdLFsuODY3OSwuNjE3Nl0sWy44MzUsLjY3NjldLFsuNzk4NiwuNzM0Nl0sWy43NTk3LC43OTAzXSxbLjcxODYsLjg0MzVdLFsuNjczMiwuODkzNl0sWy42MjEzLC45Mzk0XSxbLjU3MjIsLjk3NjFdLFsuNTMyMiwxXV07ZnVuY3Rpb24gTCh0LGUpe3ZhciByLG49TWF0aC5taW4oMTgsMzYqTWF0aC5hYnMoZSkvaCksaT1NYXRoLmZsb29yKG4pLGE9bi1pLG89KHI9Q1tpXSlbMF0scz1yWzFdLGw9KHI9Q1srK2ldKVswXSxjPXJbMV0sdT0ocj1DW01hdGgubWluKDE5LCsraSldKVswXSxmPXJbMV07cmV0dXJuW3QqKGwrYSoodS1vKS8yK2EqYSoodS0yKmwrbykvMiksKGU+MD9wOi1wKSooYythKihmLXMpLzIrYSphKihmLTIqYytzKS8yKV19ZnVuY3Rpb24gSSh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLGVdfWZ1bmN0aW9uIFAodCxlKXt2YXIgcixuPU1hdGguY29zKGUpLGk9KHI9dihuKk1hdGguY29zKHQvPTIpKSk/ci9NYXRoLnNpbihyKToxO3JldHVyblsyKm4qTWF0aC5zaW4odCkqaSxNYXRoLnNpbihlKSppXX1mdW5jdGlvbiB6KHQsZSl7dmFyIHI9UCh0LGUpO3JldHVyblsoclswXSt0L3ApLzIsKHJbMV0rZSkvMl19Qy5mb3JFYWNoKChmdW5jdGlvbih0KXt0WzFdKj0xLjAxNDR9KSksTC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lL3Asbj05MCpyLGk9TWF0aC5taW4oMTgsTWF0aC5hYnMobi81KSksYT1NYXRoLm1heCgwLE1hdGguZmxvb3IoaSkpO2Rve3ZhciBvPUNbYV1bMV0scz1DW2ErMV1bMV0sbD1DW01hdGgubWluKDE5LGErMildWzFdLGM9bC1vLHU9bC0yKnMrbyxmPTIqKE1hdGguYWJzKHIpLXMpL2MsaD11L2MsbT1mKigxLWgqZiooMS0yKmgqZikpO2lmKG0+PTB8fDE9PT1hKXtuPShlPj0wPzU6LTUpKihtK2kpO3ZhciB2LHk9NTA7ZG97bT0oaT1NYXRoLm1pbigxOCxNYXRoLmFicyhuKS81KSktKGE9TWF0aC5mbG9vcihpKSksbz1DW2FdWzFdLHM9Q1thKzFdWzFdLGw9Q1tNYXRoLm1pbigxOSxhKzIpXVsxXSxuLT0odj0oZT49MD9wOi1wKSoocyttKihsLW8pLzIrbSptKihsLTIqcytvKS8yKS1lKSpnfXdoaWxlKE1hdGguYWJzKHYpPjFlLTEyJiYtLXk+MCk7YnJlYWt9fXdoaWxlKC0tYT49MCk7dmFyIHg9Q1thXVswXSxiPUNbYSsxXVswXSxfPUNbTWF0aC5taW4oMTksYSsyKV1bMF07cmV0dXJuW3QvKGIrbSooXy14KS8yK20qbSooXy0yKmIreCkvMiksbipkXX0sKHQuZ2VvLnJvYmluc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHkoTCl9KS5yYXc9TCxJLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0L01hdGguY29zKGUpLGVdfSwodC5nZW8uc2ludXNvaWRhbD1mdW5jdGlvbigpe3JldHVybiB5KEkpfSkucmF3PUksUC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZighKHQqdCs0KmUqZT5oKmgrZikpe3ZhciByPXQsbj1lLGk9MjU7ZG97dmFyIGEsbz1NYXRoLnNpbihyKSxzPU1hdGguc2luKHIvMiksbD1NYXRoLmNvcyhyLzIpLGM9TWF0aC5zaW4obiksdT1NYXRoLmNvcyhuKSxwPU1hdGguc2luKDIqbiksZD1jKmMsZz11KnUsbT1zKnMseT0xLWcqbCpsLHg9eT92KHUqbCkqTWF0aC5zcXJ0KGE9MS95KTphPTAsYj0yKngqdSpzLXQsXz14KmMtZSx3PWEqKGcqbSt4KnUqbCpkKSxUPWEqKC41Km8qcC0yKngqYypzKSxrPS4yNSphKihwKnMteCpjKmcqbyksTT1hKihkKmwreCptKnUpLEE9VCprLU0qdztpZighQSlicmVhazt2YXIgUz0oXypULWIqTSkvQSxFPShiKmstXyp3KS9BO3ItPVMsbi09RX13aGlsZSgoTWF0aC5hYnMoUyk+Znx8TWF0aC5hYnMoRSk+ZikmJi0taT4wKTtyZXR1cm5bcixuXX19LCh0Lmdlby5haXRvZmY9ZnVuY3Rpb24oKXtyZXR1cm4geShQKX0pLnJhdz1QLHouaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPWUsaT0yNTtkb3t2YXIgYSxvPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1NYXRoLnNpbigyKm4pLGM9cypzLHU9bypvLGg9TWF0aC5zaW4ociksZD1NYXRoLmNvcyhyLzIpLGc9TWF0aC5zaW4oci8yKSxtPWcqZyx5PTEtdSpkKmQseD15P3YobypkKSpNYXRoLnNxcnQoYT0xL3kpOmE9MCxiPS41KigyKngqbypnK3IvcCktdCxfPS41Kih4KnMrbiktZSx3PS41KmEqKHUqbSt4Km8qZCpjKSsuNS9wLFQ9YSooaCpsLzQteCpzKmcpLGs9LjEyNSphKihsKmcteCpzKnUqaCksTT0uNSphKihjKmQreCptKm8pKy41LEE9VCprLU0qdyxTPShfKlQtYipNKS9BLEU9KGIqay1fKncpL0E7ci09UyxuLT1FfXdoaWxlKChNYXRoLmFicyhTKT5mfHxNYXRoLmFicyhFKT5mKSYmLS1pPjApO3JldHVybltyLG5dfSwodC5nZW8ud2lua2VsMz1mdW5jdGlvbigpe3JldHVybiB5KHopfSkucmF3PXp9fSx7fV0sODY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz1NYXRoLlBJLzE4MCxzPTE4MC9NYXRoLlBJLGw9e2N1cnNvcjoicG9pbnRlciJ9LGM9e2N1cnNvcjoiYXV0byJ9O2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gbi5iZWhhdmlvci56b29tKCkudHJhbnNsYXRlKGUudHJhbnNsYXRlKCkpLnNjYWxlKGUuc2NhbGUoKSl9ZnVuY3Rpb24gZih0LGUscil7dmFyIG49dC5pZCxvPXQuZ3JhcGhEaXYscz1vLmxheW91dCxsPXNbbl0sYz1vLl9mdWxsTGF5b3V0LHU9Y1tuXSxmPXt9LGg9e307ZnVuY3Rpb24gcCh0LGUpe2ZbbisiLiIrdF09aS5uZXN0ZWRQcm9wZXJ0eShsLHQpLmdldCgpLGEuY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIscyxjLl9wcmVHVUksZik7dmFyIHI9aS5uZXN0ZWRQcm9wZXJ0eSh1LHQpO3IuZ2V0KCkhPT1lJiYoci5zZXQoZSksaS5uZXN0ZWRQcm9wZXJ0eShsLHQpLnNldChlKSxoW24rIi4iK3RdPWUpfXIocCkscCgicHJvamVjdGlvbi5zY2FsZSIsZS5zY2FsZSgpL3QuZml0U2NhbGUpLHAoImZpdGJvdW5kcyIsITEpLG8uZW1pdCgicGxvdGx5X3JlbGF5b3V0IixoKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9dSgwLGUpO2Z1bmN0aW9uIGkocil7dmFyIG49ZS5pbnZlcnQodC5taWRQdCk7cigiY2VudGVyLmxvbiIsblswXSkscigiY2VudGVyLmxhdCIsblsxXSl9cmV0dXJuIHIub24oInpvb21zdGFydCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCl9KSkub24oInpvb20iLChmdW5jdGlvbigpe2Uuc2NhbGUobi5ldmVudC5zY2FsZSkudHJhbnNsYXRlKG4uZXZlbnQudHJhbnNsYXRlKSx0LnJlbmRlcigpO3ZhciByPWUuaW52ZXJ0KHQubWlkUHQpO3QuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIix7Imdlby5wcm9qZWN0aW9uLnNjYWxlIjplLnNjYWxlKCkvdC5maXRTY2FsZSwiZ2VvLmNlbnRlci5sb24iOnJbMF0sImdlby5jZW50ZXIubGF0IjpyWzFdfSl9KSkub24oInpvb21lbmQiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGYodCxlLGkpfSkpLHJ9ZnVuY3Rpb24gcCh0LGUpe3ZhciByLGksYSxvLHMsaCxwLGQsZyxtPXUoMCxlKTtmdW5jdGlvbiB2KHQpe3JldHVybiBlLmludmVydCh0KX1mdW5jdGlvbiB5KHIpe3ZhciBuPWUucm90YXRlKCksaT1lLmludmVydCh0Lm1pZFB0KTtyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsLW5bMF0pLHIoImNlbnRlci5sb24iLGlbMF0pLHIoImNlbnRlci5sYXQiLGlbMV0pfXJldHVybiBtLm9uKCJ6b29tc3RhcnQiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpLHI9bi5tb3VzZSh0aGlzKSxpPWUucm90YXRlKCksYT1lLnRyYW5zbGF0ZSgpLG89aSxzPXYocil9KSkub24oInpvb20iLChmdW5jdGlvbigpe2lmKGg9bi5tb3VzZSh0aGlzKSxmdW5jdGlvbih0KXt2YXIgcj12KHQpO2lmKCFyKXJldHVybiEwO3ZhciBuPWUocik7cmV0dXJuIE1hdGguYWJzKG5bMF0tdFswXSk+Mnx8TWF0aC5hYnMoblsxXS10WzFdKT4yfShyKSlyZXR1cm4gbS5zY2FsZShlLnNjYWxlKCkpLHZvaWQgbS50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSk7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKSxlLnRyYW5zbGF0ZShbYVswXSxuLmV2ZW50LnRyYW5zbGF0ZVsxXV0pLHM/dihoKSYmKGQ9dihoKSxwPVtvWzBdKyhkWzBdLXNbMF0pLGlbMV0saVsyXV0sZS5yb3RhdGUocCksbz1wKTpzPXYocj1oKSxnPSEwLHQucmVuZGVyKCk7dmFyIGw9ZS5yb3RhdGUoKSxjPWUuaW52ZXJ0KHQubWlkUHQpO3QuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIix7Imdlby5wcm9qZWN0aW9uLnNjYWxlIjplLnNjYWxlKCkvdC5maXRTY2FsZSwiZ2VvLmNlbnRlci5sb24iOmNbMF0sImdlby5jZW50ZXIubGF0IjpjWzFdLCJnZW8ucHJvamVjdGlvbi5yb3RhdGlvbi5sb24iOi1sWzBdfSl9KSkub24oInpvb21lbmQiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGcmJmYodCxlLHkpfSkpLG19ZnVuY3Rpb24gZCh0LGUpe3ZhciByLGk9e3I6ZS5yb3RhdGUoKSxrOmUuc2NhbGUoKX0sYT11KDAsZSksbz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9YXJndW1lbnRzLmxlbmd0aCxpPVtdO2Zvcig7KytlPHI7KWkucHVzaChhcmd1bWVudHNbZV0pO3ZhciBhPW4uZGlzcGF0Y2guYXBwbHkobnVsbCxpKTtyZXR1cm4gYS5vZj1mdW5jdGlvbihlLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbzt0cnl7bz1pLnNvdXJjZUV2ZW50PW4uZXZlbnQsaS50YXJnZXQ9dCxuLmV2ZW50PWksYVtpLnR5cGVdLmFwcGx5KGUscil9ZmluYWxseXtuLmV2ZW50PW99fX0sYX0oYSwiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKSxzPTAsaD1hLm9uO2Z1bmN0aW9uIHAodCl7cysrfHx0KHt0eXBlOiJ6b29tc3RhcnQifSl9ZnVuY3Rpb24gZCh0KXt0KHt0eXBlOiJ6b29tIn0pfWZ1bmN0aW9uIGIodCl7LS1zfHx0KHt0eXBlOiJ6b29tZW5kIn0pfWZ1bmN0aW9uIF8odCl7dmFyIHI9ZS5yb3RhdGUoKTt0KCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsLXJbMF0pLHQoInByb2plY3Rpb24ucm90YXRpb24ubGF0IiwtclsxXSl9cmV0dXJuIGEub24oInpvb21zdGFydCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCk7dmFyIHQ9bi5tb3VzZSh0aGlzKSxzPWUucm90YXRlKCksYz1zLHU9ZS50cmFuc2xhdGUoKSxmPW0ocyk7cj1nKGUsdCksaC5jYWxsKGEsInpvb20iLChmdW5jdGlvbigpe3ZhciBhPW4ubW91c2UodGhpcyk7aWYoZS5zY2FsZShpLms9bi5ldmVudC5zY2FsZSkscil7aWYoZyhlLGEpKXtlLnJvdGF0ZShzKS50cmFuc2xhdGUodSk7dmFyIGw9ZyhlLGEpLGg9eShyLGwpLHA9VCh2KGYsaCkpLG09aS5yPXgocCxyLGMpO2lzRmluaXRlKG1bMF0pJiZpc0Zpbml0ZShtWzFdKSYmaXNGaW5pdGUobVsyXSl8fChtPWMpLGUucm90YXRlKG0pLGM9bX19ZWxzZSByPWcoZSx0PWEpO2Qoby5vZih0aGlzLGFyZ3VtZW50cykpfSkpLHAoby5vZih0aGlzLGFyZ3VtZW50cykpfSkpLm9uKCJ6b29tZW5kIiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShjKSxoLmNhbGwoYSwiem9vbSIsbnVsbCksYihvLm9mKHRoaXMsYXJndW1lbnRzKSksZih0LGUsXyl9KSkub24oInpvb20ucmVkcmF3IiwoZnVuY3Rpb24oKXt0LnJlbmRlcigpO3ZhciByPWUucm90YXRlKCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHsiZ2VvLnByb2plY3Rpb24uc2NhbGUiOmUuc2NhbGUoKS90LmZpdFNjYWxlLCJnZW8ucHJvamVjdGlvbi5yb3RhdGlvbi5sb24iOi1yWzBdLCJnZW8ucHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiOi1yWzFdfSl9KSksbi5yZWJpbmQoYSxvLCJvbiIpfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj10LmludmVydChlKTtyZXR1cm4gciYmaXNGaW5pdGUoclswXSkmJmlzRmluaXRlKHJbMV0pJiZmdW5jdGlvbih0KXt2YXIgZT10WzBdKm8scj10WzFdKm8sbj1NYXRoLmNvcyhyKTtyZXR1cm5bbipNYXRoLmNvcyhlKSxuKk1hdGguc2luKGUpLE1hdGguc2luKHIpXX0ocil9ZnVuY3Rpb24gbSh0KXt2YXIgZT0uNSp0WzBdKm8scj0uNSp0WzFdKm8sbj0uNSp0WzJdKm8saT1NYXRoLnNpbihlKSxhPU1hdGguY29zKGUpLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKSxjPU1hdGguc2luKG4pLHU9TWF0aC5jb3Mobik7cmV0dXJuW2EqbCp1K2kqcypjLGkqbCp1LWEqcypjLGEqcyp1K2kqbCpjLGEqbCpjLWkqcyp1XX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dFszXSxvPWVbMF0scz1lWzFdLGw9ZVsyXSxjPWVbM107cmV0dXJuW3Iqby1uKnMtaSpsLWEqYyxyKnMrbipvK2kqYy1hKmwscipsLW4qYytpKm8rYSpzLHIqYytuKmwtaSpzK2Eqb119ZnVuY3Rpb24geSh0LGUpe2lmKHQmJmUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX0odCxlKSxuPU1hdGguc3FydChrKHIscikpLGk9LjUqTWF0aC5hY29zKE1hdGgubWF4KC0xLE1hdGgubWluKDEsayh0LGUpKSkpLGE9TWF0aC5zaW4oaSkvbjtyZXR1cm4gbiYmW01hdGguY29zKGkpLHJbMl0qYSwtclsxXSphLHJbMF0qYV19fWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPXcoZSwyLHRbMF0pO249dyhuLDEsdFsxXSksbj13KG4sMCx0WzJdLXJbMl0pO3ZhciBpLGEsbz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1uWzBdLGY9blsxXSxoPW5bMl0scD1NYXRoLmF0YW4yKGwsbykqcyxkPU1hdGguc3FydChvKm8rbCpsKTtNYXRoLmFicyhmKT5kPyhhPShmPjA/OTA6LTkwKS1wLGk9MCk6KGE9TWF0aC5hc2luKGYvZCkqcy1wLGk9TWF0aC5zcXJ0KGQqZC1mKmYpKTt2YXIgZz0xODAtYS0yKnAsbT0oTWF0aC5hdGFuMihoLHUpLU1hdGguYXRhbjIoYyxpKSkqcyx2PShNYXRoLmF0YW4yKGgsdSktTWF0aC5hdGFuMihjLC1pKSkqcztyZXR1cm4gYihyWzBdLHJbMV0sYSxtKTw9YihyWzBdLHJbMV0sZyx2KT9bYSxtLHJbMl1dOltnLHYsclsyXV19ZnVuY3Rpb24gYih0LGUscixuKXt2YXIgaT1fKHItdCksYT1fKG4tZSk7cmV0dXJuIE1hdGguc3FydChpKmkrYSphKX1mdW5jdGlvbiBfKHQpe3JldHVybih0JTM2MCs1NDApJTM2MC0xODB9ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49cipvLGk9dC5zbGljZSgpLGE9MD09PWU/MTowLHM9Mj09PWU/MToyLGw9TWF0aC5jb3MobiksYz1NYXRoLnNpbihuKTtyZXR1cm4gaVthXT10W2FdKmwtdFtzXSpjLGlbc109dFtzXSpsK3RbYV0qYyxpfWZ1bmN0aW9uIFQodCl7cmV0dXJuW01hdGguYXRhbjIoMioodFswXSp0WzFdK3RbMl0qdFszXSksMS0yKih0WzFdKnRbMV0rdFsyXSp0WzJdKSkqcyxNYXRoLmFzaW4oTWF0aC5tYXgoLTEsTWF0aC5taW4oMSwyKih0WzBdKnRbMl0tdFszXSp0WzFdKSkpKSpzLE1hdGguYXRhbjIoMioodFswXSp0WzNdK3RbMV0qdFsyXSksMS0yKih0WzJdKnRbMl0rdFszXSp0WzNdKSkqc119ZnVuY3Rpb24gayh0LGUpe2Zvcih2YXIgcj0wLG49MCxpPXQubGVuZ3RoO248aTsrK24pcis9dFtuXSplW25dO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucHJvamVjdGlvbjtyZXR1cm4oZS5faXNTY29wZWQ/aDplLl9pc0NsaXBwZWQ/ZDpwKSh0LHIpfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcmVnaXN0cnkiOjkxMSxkMzoxNjl9XSw4NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKSxpPXQoIi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLlNVQlBMT1RfUEFUVEVSTjtyLmdldFN1YnBsb3RDYWxjRGF0YT1mdW5jdGlvbih0LGUscil7dmFyIGk9bi5zdWJwbG90c1JlZ2lzdHJ5W2VdO2lmKCFpKXJldHVybltdO2Zvcih2YXIgYT1pLmF0dHIsbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc107bFswXS50cmFjZVthXT09PXImJm8ucHVzaChsKX1yZXR1cm4gb30sci5nZXRNb2R1bGVDYWxjRGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLGk9W10sYT1bXTtpZighKHI9InN0cmluZyI9PXR5cGVvZiBlP24uZ2V0TW9kdWxlKGUpLnBsb3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTplLnBsb3QpKXJldHVybltpLHRdO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dLGw9c1swXS50cmFjZTshMD09PWwudmlzaWJsZSYmMCE9PWwuX2xlbmd0aCYmKGwuX21vZHVsZS5wbG90PT09cj9pLnB1c2gocyk6YS5wdXNoKHMpKX1yZXR1cm5baSxhXX0sci5nZXRTdWJwbG90RGF0YT1mdW5jdGlvbih0LGUscil7aWYoIW4uc3VicGxvdHNSZWdpc3RyeVtlXSlyZXR1cm5bXTt2YXIgYSxvLHMsbD1uLnN1YnBsb3RzUmVnaXN0cnlbZV0uYXR0cixjPVtdO2lmKCJnbDJkIj09PWUpe3ZhciB1PXIubWF0Y2goaSk7bz0ieCIrdVsxXSxzPSJ5Iit1WzJdfWZvcih2YXIgZj0wO2Y8dC5sZW5ndGg7ZisrKWE9dFtmXSwiZ2wyZCI9PT1lJiZuLnRyYWNlSXMoYSwiZ2wyZCIpP2FbbFswXV09PT1vJiZhW2xbMV1dPT09cyYmYy5wdXNoKGEpOmFbbF09PT1yJiZjLnB1c2goYSk7cmV0dXJuIGN9fSx7Ii4uL3JlZ2lzdHJ5Ijo5MTEsIi4vY2FydGVzaWFuL2NvbnN0YW50cyI6ODM0fV0sODY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1vdXNlLWNoYW5nZSIpLGk9dCgibW91c2Utd2hlZWwiKSxhPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLG89dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLHM9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIik7ZnVuY3Rpb24gbCh0LGUpe3RoaXMuZWxlbWVudD10LHRoaXMucGxvdD1lLHRoaXMubW91c2VMaXN0ZW5lcj1udWxsLHRoaXMud2hlZWxMaXN0ZW5lcj1udWxsLHRoaXMubGFzdElucHV0VGltZT1EYXRlLm5vdygpLHRoaXMubGFzdFBvcz1bMCwwXSx0aGlzLmJveEVuYWJsZWQ9ITEsdGhpcy5ib3hJbml0ZWQ9ITEsdGhpcy5ib3hTdGFydD1bMCwwXSx0aGlzLmJveEVuZD1bMCwwXSx0aGlzLmRyYWdTdGFydD1bMCwwXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tb3VzZUNvbnRhaW5lcixyPXQuZ2xwbG90LGM9bmV3IGwoZSxyKTtmdW5jdGlvbiB1KCl7dC54YXhpcy5hdXRvcmFuZ2U9ITEsdC55YXhpcy5hdXRvcmFuZ2U9ITF9ZnVuY3Rpb24gZihlLG4saSl7dmFyIGEscyxsPXQuY2FsY0RhdGFCb3goKSxmPXIudmlld0JveCxoPWMubGFzdFBvc1swXSxwPWMubGFzdFBvc1sxXSxkPW8uTUlORFJBRypyLnBpeGVsUmF0aW8sZz1vLk1JTlpPT00qci5waXhlbFJhdGlvO2Z1bmN0aW9uIG0oZSxyLG4pe3ZhciBpPU1hdGgubWluKHIsbiksYT1NYXRoLm1heChyLG4pO2khPT1hPyhsW2VdPWksbFtlKzJdPWEsYy5kYXRhQm94PWwsdC5zZXRSYW5nZXMobCkpOih0LnNlbGVjdEJveC5zZWxlY3RCb3g9WzAsMCwxLDFdLHQuZ2xwbG90LnNldERpcnR5KCkpfXN3aXRjaChuKj1yLnBpeGVsUmF0aW8saSo9ci5waXhlbFJhdGlvLGk9ZlszXS1mWzFdLWksdC5mdWxsTGF5b3V0LmRyYWdtb2RlKXtjYXNlInpvb20iOmlmKGUpe3ZhciB2PW4vKGZbMl0tZlswXSkqKGxbMl0tbFswXSkrbFswXSx5PWkvKGZbM10tZlsxXSkqKGxbM10tbFsxXSkrbFsxXTtjLmJveEluaXRlZHx8KGMuYm94U3RhcnRbMF09dixjLmJveFN0YXJ0WzFdPXksYy5kcmFnU3RhcnRbMF09bixjLmRyYWdTdGFydFsxXT1pKSxjLmJveEVuZFswXT12LGMuYm94RW5kWzFdPXksYy5ib3hJbml0ZWQ9ITAsYy5ib3hFbmFibGVkfHxjLmJveFN0YXJ0WzBdPT09Yy5ib3hFbmRbMF0mJmMuYm94U3RhcnRbMV09PT1jLmJveEVuZFsxXXx8KGMuYm94RW5hYmxlZD0hMCk7dmFyIHg9TWF0aC5hYnMoYy5kcmFnU3RhcnRbMF0tbik8ZyxiPU1hdGguYWJzKGMuZHJhZ1N0YXJ0WzFdLWkpPGc7aWYoIWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXQuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLHI9dC54YXhpcy5faWQsbj10LnlheGlzLl9pZCxpPTA7aTxlLmxlbmd0aDtpKyspaWYoLTEhPT1lW2ldW3JdKXtpZigtMSE9PWVbaV1bbl0pcmV0dXJuITA7YnJlYWt9cmV0dXJuITF9KCl8fHgmJmIpeCYmKGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0pLGImJihjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKTtlbHNle2E9Yy5ib3hFbmRbMF0tYy5ib3hTdGFydFswXSxzPWMuYm94RW5kWzFdLWMuYm94U3RhcnRbMV07dmFyIF89KGxbM10tbFsxXSkvKGxbMl0tbFswXSk7TWF0aC5hYnMoYSpfKT5NYXRoLmFicyhzKT8oYy5ib3hFbmRbMV09Yy5ib3hTdGFydFsxXStNYXRoLmFicyhhKSpfKihzPj0wPzE6LTEpLGMuYm94RW5kWzFdPGxbMV0/KGMuYm94RW5kWzFdPWxbMV0sYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSsobFsxXS1jLmJveFN0YXJ0WzFdKS9NYXRoLmFicyhfKSk6Yy5ib3hFbmRbMV0+bFszXSYmKGMuYm94RW5kWzFdPWxbM10sYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSsobFszXS1jLmJveFN0YXJ0WzFdKS9NYXRoLmFicyhfKSkpOihjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdK01hdGguYWJzKHMpL18qKGE+PTA/MTotMSksYy5ib3hFbmRbMF08bFswXT8oYy5ib3hFbmRbMF09bFswXSxjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKyhsWzBdLWMuYm94U3RhcnRbMF0pKk1hdGguYWJzKF8pKTpjLmJveEVuZFswXT5sWzJdJiYoYy5ib3hFbmRbMF09bFsyXSxjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKyhsWzJdLWMuYm94U3RhcnRbMF0pKk1hdGguYWJzKF8pKSl9fWVsc2UgYy5ib3hFbmFibGVkPyhhPWMuYm94U3RhcnRbMF0hPT1jLmJveEVuZFswXSxzPWMuYm94U3RhcnRbMV0hPT1jLmJveEVuZFsxXSxhfHxzPyhhJiYobSgwLGMuYm94U3RhcnRbMF0sYy5ib3hFbmRbMF0pLHQueGF4aXMuYXV0b3JhbmdlPSExKSxzJiYobSgxLGMuYm94U3RhcnRbMV0sYy5ib3hFbmRbMV0pLHQueWF4aXMuYXV0b3JhbmdlPSExKSx0LnJlbGF5b3V0Q2FsbGJhY2soKSk6dC5nbHBsb3Quc2V0RGlydHkoKSxjLmJveEVuYWJsZWQ9ITEsYy5ib3hJbml0ZWQ9ITEpOmMuYm94SW5pdGVkJiYoYy5ib3hJbml0ZWQ9ITEpO2JyZWFrO2Nhc2UicGFuIjpjLmJveEVuYWJsZWQ9ITEsYy5ib3hJbml0ZWQ9ITEsZT8oYy5wYW5uaW5nfHwoYy5kcmFnU3RhcnRbMF09bixjLmRyYWdTdGFydFsxXT1pKSxNYXRoLmFicyhjLmRyYWdTdGFydFswXS1uKTxkJiYobj1jLmRyYWdTdGFydFswXSksTWF0aC5hYnMoYy5kcmFnU3RhcnRbMV0taSk8ZCYmKGk9Yy5kcmFnU3RhcnRbMV0pLGE9KGgtbikqKGxbMl0tbFswXSkvKHIudmlld0JveFsyXS1yLnZpZXdCb3hbMF0pLHM9KHAtaSkqKGxbM10tbFsxXSkvKHIudmlld0JveFszXS1yLnZpZXdCb3hbMV0pLGxbMF0rPWEsbFsyXSs9YSxsWzFdKz1zLGxbM10rPXMsdC5zZXRSYW5nZXMobCksYy5wYW5uaW5nPSEwLGMubGFzdElucHV0VGltZT1EYXRlLm5vdygpLHUoKSx0LmNhbWVyYUNoYW5nZWQoKSx0LmhhbmRsZUFubm90YXRpb25zKCkpOmMucGFubmluZyYmKGMucGFubmluZz0hMSx0LnJlbGF5b3V0Q2FsbGJhY2soKSl9Yy5sYXN0UG9zWzBdPW4sYy5sYXN0UG9zWzFdPWl9cmV0dXJuIGMubW91c2VMaXN0ZW5lcj1uKGUsZiksZS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwoZnVuY3Rpb24odCl7dmFyIHI9YSh0LmNoYW5nZWRUb3VjaGVzWzBdLGUpO2YoMCxyWzBdLHJbMV0pLGYoMSxyWzBdLHJbMV0pLHQucHJldmVudERlZmF1bHQoKX0pLCEhcyYme3Bhc3NpdmU6ITF9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKTt2YXIgcj1hKHQuY2hhbmdlZFRvdWNoZXNbMF0sZSk7ZigxLHJbMF0sclsxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSksISFzJiZ7cGFzc2l2ZTohMX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLChmdW5jdGlvbih0KXtmKDAsYy5sYXN0UG9zWzBdLGMubGFzdFBvc1sxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSksISFzJiZ7cGFzc2l2ZTohMX0pLGMud2hlZWxMaXN0ZW5lcj1pKGUsKGZ1bmN0aW9uKGUsbil7aWYoIXQuc2Nyb2xsWm9vbSlyZXR1cm4hMTt2YXIgaT10LmNhbGNEYXRhQm94KCksYT1yLnZpZXdCb3gsbz1jLmxhc3RQb3NbMF0scz1jLmxhc3RQb3NbMV0sbD1NYXRoLmV4cCg1Km4vKGFbM10tYVsxXSkpLGY9by8oYVsyXS1hWzBdKSooaVsyXS1pWzBdKStpWzBdLGg9cy8oYVszXS1hWzFdKSooaVszXS1pWzFdKStpWzFdO3JldHVybiBpWzBdPShpWzBdLWYpKmwrZixpWzJdPShpWzJdLWYpKmwrZixpWzFdPShpWzFdLWgpKmwraCxpWzNdPShpWzNdLWgpKmwraCx0LnNldFJhbmdlcyhpKSxjLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx1KCksdC5jYW1lcmFDaGFuZ2VkKCksdC5oYW5kbGVBbm5vdGF0aW9ucygpLHQucmVsYXlvdXRDYWxsYmFjaygpLCEwfSksITApLGN9fSx7Ii4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjgzNCwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0NDEsIm1vdXNlLWNoYW5nZSI6NDgzLCJtb3VzZS1ldmVudC1vZmZzZXQiOjQ4NCwibW91c2Utd2hlZWwiOjQ4Nn1dLDg2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpO2Z1bmN0aW9uIGEodCl7dGhpcy5zY2VuZT10LHRoaXMuZ2w9dC5nbCx0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLHRoaXMuc2NyZWVuQm94PVswLDAsMSwxXSx0aGlzLnZpZXdCb3g9WzAsMCwxLDFdLHRoaXMuZGF0YUJveD1bLTEsLTEsMSwxXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyExLCExLCExLCExXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMSwxLDEsMV0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrcz1bW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITEsITFdLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVscz1bIngiLCJ5Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITEsITFdLHRoaXMubGFiZWxBbmdsZT1bMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0sdGhpcy5sYWJlbFBhZD1bMTUsMTUsMTUsMTVdLHRoaXMubGFiZWxTaXplPVsxMiwxMl0sdGhpcy5sYWJlbEZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlPSIiLHRoaXMudGl0bGVFbmFibGU9ITAsdGhpcy50aXRsZUNlbnRlcj1bMCwwLDAsMF0sdGhpcy50aXRsZUFuZ2xlPTAsdGhpcy50aXRsZUNvbG9yPVswLDAsMCwxXSx0aGlzLnRpdGxlRm9udD0ic2Fucy1zZXJpZiIsdGhpcy50aXRsZVNpemU9MTgsdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLC41XSxbMCwwLDAsLjVdXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnN0YXRpYz10aGlzLnNjZW5lLnN0YXRpY1Bsb3R9dmFyIG89YS5wcm90b3R5cGUscz1bInhheGlzIiwieWF4aXMiXTtvLm1lcmdlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLG8sbCxjLHUsZixoLHA7Zm9yKHRoaXMudGl0bGVFbmFibGU9ITEsdGhpcy5iYWNrZ3JvdW5kQ29sb3I9aSh0LnBsb3RfYmdjb2xvciksaD0wO2g8MjsrK2gpe3ZhciBkPShlPXNbaF0pLmNoYXJBdCgwKTtmb3Iobj0ocj10W3RoaXMuc2NlbmVbZV0uX25hbWVdKS50aXRsZS50ZXh0PT09dGhpcy5zY2VuZS5mdWxsTGF5b3V0Ll9kZmx0VGl0bGVbZF0/IiI6ci50aXRsZS50ZXh0LHA9MDtwPD0yO3ArPTIpdGhpcy5sYWJlbEVuYWJsZVtoK3BdPSExLHRoaXMubGFiZWxzW2grcF09bix0aGlzLmxhYmVsQ29sb3JbaCtwXT1pKHIudGl0bGUuZm9udC5jb2xvciksdGhpcy5sYWJlbEZvbnRbaCtwXT1yLnRpdGxlLmZvbnQuZmFtaWx5LHRoaXMubGFiZWxTaXplW2grcF09ci50aXRsZS5mb250LnNpemUsdGhpcy5sYWJlbFBhZFtoK3BdPXRoaXMuZ2V0TGFiZWxQYWQoZSxyKSx0aGlzLnRpY2tFbmFibGVbaCtwXT0hMSx0aGlzLnRpY2tDb2xvcltoK3BdPWkoKHIudGlja2ZvbnR8fHt9KS5jb2xvciksdGhpcy50aWNrQW5nbGVbaCtwXT0iYXV0byI9PT1yLnRpY2thbmdsZT8wOk1hdGguUEkqLXIudGlja2FuZ2xlLzE4MCx0aGlzLnRpY2tQYWRbaCtwXT10aGlzLmdldFRpY2tQYWQociksdGhpcy50aWNrTWFya0xlbmd0aFtoK3BdPTAsdGhpcy50aWNrTWFya1dpZHRoW2grcF09ci50aWNrd2lkdGh8fDAsdGhpcy50aWNrTWFya0NvbG9yW2grcF09aShyLnRpY2tjb2xvciksdGhpcy5ib3JkZXJMaW5lRW5hYmxlW2grcF09ITEsdGhpcy5ib3JkZXJMaW5lQ29sb3JbaCtwXT1pKHIubGluZWNvbG9yKSx0aGlzLmJvcmRlckxpbmVXaWR0aFtoK3BdPXIubGluZXdpZHRofHwwO2M9dGhpcy5oYXNTaGFyZWRBeGlzKHIpLG89dGhpcy5oYXNBeGlzSW5EZmx0UG9zKGUscikmJiFjLGw9dGhpcy5oYXNBeGlzSW5BbHRyUG9zKGUscikmJiFjLGE9ci5taXJyb3J8fCExLHU9Yz8tMSE9PVN0cmluZyhhKS5pbmRleE9mKCJhbGwiKTohIWEsZj1jPyJhbGx0aWNrcyI9PT1hOi0xIT09U3RyaW5nKGEpLmluZGV4T2YoInRpY2tzIiksbz90aGlzLmxhYmVsRW5hYmxlW2hdPSEwOmwmJih0aGlzLmxhYmVsRW5hYmxlW2grMl09ITApLG8/dGhpcy50aWNrRW5hYmxlW2hdPXIuc2hvd3RpY2tsYWJlbHM6bCYmKHRoaXMudGlja0VuYWJsZVtoKzJdPXIuc2hvd3RpY2tsYWJlbHMpLChvfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtoXT1yLnNob3dsaW5lKSwobHx8dSkmJih0aGlzLmJvcmRlckxpbmVFbmFibGVbaCsyXT1yLnNob3dsaW5lKSwob3x8ZikmJih0aGlzLnRpY2tNYXJrTGVuZ3RoW2hdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLChsfHxmKSYmKHRoaXMudGlja01hcmtMZW5ndGhbaCsyXT10aGlzLmdldFRpY2tNYXJrTGVuZ3RoKHIpKSx0aGlzLmdyaWRMaW5lRW5hYmxlW2hdPXIuc2hvd2dyaWQsdGhpcy5ncmlkTGluZUNvbG9yW2hdPWkoci5ncmlkY29sb3IpLHRoaXMuZ3JpZExpbmVXaWR0aFtoXT1yLmdyaWR3aWR0aCx0aGlzLnplcm9MaW5lRW5hYmxlW2hdPXIuemVyb2xpbmUsdGhpcy56ZXJvTGluZUNvbG9yW2hdPWkoci56ZXJvbGluZWNvbG9yKSx0aGlzLnplcm9MaW5lV2lkdGhbaF09ci56ZXJvbGluZXdpZHRofX0sby5oYXNTaGFyZWRBeGlzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxMYXlvdXQuX3N1YnBsb3RzLmdsMmQ7cmV0dXJuIDAhPT1uLmZpbmRTdWJwbG90c1dpdGhBeGlzKHIsdCkuaW5kZXhPZihlLmlkKX0sby5oYXNBeGlzSW5EZmx0UG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaWRlO3JldHVybiJ4YXhpcyI9PT10PyJib3R0b20iPT09cjoieWF4aXMiPT09dD8ibGVmdCI9PT1yOnZvaWQgMH0sby5oYXNBeGlzSW5BbHRyUG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaWRlO3JldHVybiJ4YXhpcyI9PT10PyJ0b3AiPT09cjoieWF4aXMiPT09dD8icmlnaHQiPT09cjp2b2lkIDB9LG8uZ2V0TGFiZWxQYWQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRpdGxlLmZvbnQuc2l6ZSxuPWUuc2hvd3RpY2tsYWJlbHM7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1lLnNpZGU/ciooMS41KyhuPzE6MCkpLTEwOnIqKDEuNSsobj8uNTowKSktMTA6InlheGlzIj09PXQ/InJpZ2h0Ij09PWUuc2lkZT8xMCtyKigxLjUrKG4/MTouNSkpOjEwK3IqKDEuNSsobj8uNTowKSk6dm9pZCAwfSxvLmdldFRpY2tQYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIm91dHNpZGUiPT09dC50aWNrcz8xMCt0LnRpY2tsZW46MTV9LG8uZ2V0VGlja01hcmtMZW5ndGg9ZnVuY3Rpb24odCl7aWYoIXQudGlja3MpcmV0dXJuIDA7dmFyIGU9dC50aWNrbGVuO3JldHVybiJpbnNpZGUiPT09dC50aWNrcz8tZTplfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHQpfX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo4MDIsIi4uL2NhcnRlc2lhbi9heGVzIjo4Mjh9XSw4Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi9zY2VuZTJkIiksYT10KCIuLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxzPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKSxsPXQoIi4uL2NhcnRlc2lhbiIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLHU9dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YTtyLm5hbWU9ImdsMmQiLHIuYXR0cj1bInhheGlzIiwieWF4aXMiXSxyLmlkUm9vdD1bIngiLCJ5Il0sci5pZFJlZ2V4PXMuaWRSZWdleCxyLmF0dHJSZWdleD1zLmF0dHJSZWdleCxyLmF0dHJpYnV0ZXM9dCgiLi4vY2FydGVzaWFuL2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtlLl9oYXMoImNhcnRlc2lhbiIpfHxsLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0sci5sYXlvdXRBdHRyT3ZlcnJpZGVzPW4obC5sYXlvdXRBdHRyaWJ1dGVzLCJwbG90IiwiZnJvbS1yb290Iiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtwbG90X2JnY29sb3I6YS5wbG90X2JnY29sb3IsaG92ZXJsYWJlbDpjLmhvdmVybGFiZWx9LCJwbG90IiwibmVzdGVkIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDJkLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPWUuX3Bsb3RzW29dLGw9dShyLCJnbDJkIixvKSxjPXMuX3NjZW5lMmQ7dm9pZCAwPT09YyYmKGM9bmV3IGkoe2lkOm8sZ3JhcGhEaXY6dCxjb250YWluZXI6dC5xdWVyeVNlbGVjdG9yKCIuZ2wtY29udGFpbmVyIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW99LGUpLHMuX3NjZW5lMmQ9YyksYy5wbG90KGwsdC5jYWxjZGF0YSxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsMmR8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW4uX3Bsb3RzW29dO2lmKHMuX3NjZW5lMmQpe3ZhciBjPXUodCwiZ2wyZCIsbyk7MD09PWMubGVuZ3RoJiYocy5fc2NlbmUyZC5kZXN0cm95KCksZGVsZXRlIG4uX3Bsb3RzW29dKX19bC5jbGVhbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHIuZHJhd0ZyYW1ld29yaz1mdW5jdGlvbih0KXt0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fGwuZHJhd0ZyYW1ld29yayh0KX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsMmQsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lLl9wbG90c1tyW25dXS5fc2NlbmUyZCxhPWkudG9JbWFnZSgicG5nIik7ZS5fZ2xpbWFnZXMuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6YSx4OjAseTowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSksaS5kZXN0cm95KCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wyZCxuPTA7bjxyLmxlbmd0aDtuKyspe2UuX3Bsb3RzW3Jbbl1dLl9zY2VuZTJkLnVwZGF0ZUZ4KGUuZHJhZ21vZGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyI6Njg0LCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzU0LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MTAsIi4uL2NhcnRlc2lhbiI6ODQxLCIuLi9jYXJ0ZXNpYW4vYXR0cmlidXRlcyI6ODI2LCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzQsIi4uL2dldF9kYXRhIjo4NjUsIi4uL2xheW91dF9hdHRyaWJ1dGVzIjo4ODIsIi4vc2NlbmUyZCI6ODY5fV0sODY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxsPXQoImdsLXBsb3QyZCIpLGM9dCgiZ2wtc3Bpa2VzMmQiKSx1PXQoImdsLXNlbGVjdC1ib3giKSxmPXQoIndlYmdsLWNvbnRleHQiKSxoPXQoIi4vY29udmVydCIpLHA9dCgiLi9jYW1lcmEiKSxkPXQoIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyIpLGc9dCgiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksbT1nLmVuZm9yY2Usdj1nLmNsZWFuLHk9dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlLHg9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIiksYj14LmRyYXdNb2RlLF89eC5zZWxlY3RNb2RlLHc9WyJ4YXhpcyIsInlheGlzIl0sVD10KCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuU1VCUExPVF9QQVRURVJOO2Z1bmN0aW9uIGsodCxlKXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5waXhlbFJhdGlvPXQucGxvdEdsUGl4ZWxSYXRpb3x8d2luZG93LmRldmljZVBpeGVsUmF0aW8sdGhpcy5pZD10LmlkLHRoaXMuc3RhdGljUGxvdD0hIXQuc3RhdGljUGxvdCx0aGlzLnNjcm9sbFpvb209dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5jYXJ0ZXNpYW4sdGhpcy5mdWxsRGF0YT1udWxsLHRoaXMudXBkYXRlUmVmcyhlKSx0aGlzLm1ha2VGcmFtZXdvcmsoKSx0aGlzLnN0b3BwZWR8fCh0aGlzLmdscGxvdE9wdGlvbnM9aCh0aGlzKSx0aGlzLmdscGxvdE9wdGlvbnMubWVyZ2UoZSksdGhpcy5nbHBsb3Q9bCh0aGlzLmdscGxvdE9wdGlvbnMpLHRoaXMuY2FtZXJhPXAodGhpcyksdGhpcy50cmFjZXM9e30sdGhpcy5zcGlrZXM9Yyh0aGlzLmdscGxvdCksdGhpcy5zZWxlY3RCb3g9dSh0aGlzLmdscGxvdCx7aW5uZXJGaWxsOiExLG91dGVyRmlsbDohMH0pLHRoaXMubGFzdEJ1dHRvblN0YXRlPTAsdGhpcy5waWNrUmVzdWx0PW51bGwsdGhpcy5pc01vdXNlT3Zlcj0hMCx0aGlzLnN0b3BwZWQ9ITEsdGhpcy5yZWRyYXc9dGhpcy5kcmF3LmJpbmQodGhpcyksdGhpcy5yZWRyYXcoKSl9ZS5leHBvcnRzPWs7dmFyIE09ay5wcm90b3R5cGU7TS5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKCl7aWYodGhpcy5zdGF0aWNQbG90KXtpZighKGl8fChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGk9Zih7Y2FudmFzOm4scHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLHByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITB9KSkpKXRocm93IG5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgc3RhdGljIGNhbnZhcy9jb250ZXh0IGZvciBpbWFnZSBzZXJ2ZXIiKTt0aGlzLmNhbnZhcz1uLHRoaXMuZ2w9aX1lbHNle3ZhciB0PXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5nbC1jYW52YXMtZm9jdXMiKSxlPWYoe2NhbnZhczp0LHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITB9KTtpZighZSlyZXR1cm4gZCh0aGlzKSx2b2lkKHRoaXMuc3RvcHBlZD0hMCk7dGhpcy5jYW52YXM9dCx0aGlzLmdsPWV9dmFyIHI9dGhpcy5jYW52YXM7ci5zdHlsZS53aWR0aD0iMTAwJSIsci5zdHlsZS5oZWlnaHQ9IjEwMCUiLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixyLnN0eWxlLnRvcD0iMHB4IixyLnN0eWxlLmxlZnQ9IjBweCIsci5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIsdGhpcy51cGRhdGVTaXplKHIpO3ZhciBhPXRoaXMuc3ZnQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTthLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS5zdHlsZS50b3A9YS5zdHlsZS5sZWZ0PSIwcHgiLGEuc3R5bGUud2lkdGg9YS5zdHlsZS5oZWlnaHQ9IjEwMCUiLGEuc3R5bGVbInotaW5kZXgiXT0yMCxhLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIjt2YXIgbz10aGlzLm1vdXNlQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO28uc3R5bGUucG9zaXRpb249ImFic29sdXRlIixvLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIix0aGlzLnBpY2tDYW52YXM9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLmdsLWNhbnZhcy1waWNrIik7dmFyIHM9dGhpcy5jb250YWluZXI7cy5hcHBlbmRDaGlsZChhKSxzLmFwcGVuZENoaWxkKG8pO3ZhciBsPXRoaXM7by5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7bC5pc01vdXNlT3Zlcj0hMSxsLnVuaG92ZXIoKX0pKSxvLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7bC5pc01vdXNlT3Zlcj0hMH0pKX0sTS50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PSJwbmciKSx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5jbGVhckNvbG9yKDEsMSwxLDApLGUuY2xlYXIoZS5DT0xPUl9CVUZGRVJfQklUfGUuREVQVEhfQlVGRkVSX0JJVCksdGhpcy5nbHBsb3Quc2V0RGlydHkoKSx0aGlzLmdscGxvdC5kcmF3KCksZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKTtmb3IodmFyIG89MCxzPWktMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8NDsrK2Mpe3ZhciB1PWFbNCoocipvK2wpK2NdO2FbNCoocipvK2wpK2NdPWFbNCoocipzK2wpK2NdLGFbNCoocipzK2wpK2NdPXV9dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Zi53aWR0aD1yLGYuaGVpZ2h0PWk7dmFyIGgscD1mLmdldENvbnRleHQoIjJkIiksZD1wLmNyZWF0ZUltYWdlRGF0YShyLGkpO3N3aXRjaChkLmRhdGEuc2V0KGEpLHAucHV0SW1hZ2VEYXRhKGQsMCwwKSx0KXtjYXNlImpwZWciOmg9Zi50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlIndlYnAiOmg9Zi50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztkZWZhdWx0Omg9Zi50b0RhdGFVUkwoImltYWdlL3BuZyIpfXJldHVybiB0aGlzLnN0YXRpY1Bsb3QmJnRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKG4pLGh9LE0udXBkYXRlU2l6ZT1mdW5jdGlvbih0KXt0fHwodD10aGlzLmNhbnZhcyk7dmFyIGU9dGhpcy5waXhlbFJhdGlvLHI9dGhpcy5mdWxsTGF5b3V0LG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9MHxNYXRoLmNlaWwoZSpuKSxvPTB8TWF0aC5jZWlsKGUqaSk7cmV0dXJuIHQud2lkdGg9PT1hJiZ0LmhlaWdodD09PW98fCh0LndpZHRoPWEsdC5oZWlnaHQ9byksdH0sTS5jb21wdXRlVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy54YXhpcy5zZXRTY2FsZSgpLHRoaXMueWF4aXMuc2V0U2NhbGUoKTtmb3IodmFyIHQ9W28uY2FsY1RpY2tzKHRoaXMueGF4aXMpLG8uY2FsY1RpY2tzKHRoaXMueWF4aXMpXSxlPTA7ZTwyOysrZSlmb3IodmFyIHI9MDtyPHRbZV0ubGVuZ3RoOysrcil0W2VdW3JdLnRleHQ9dFtlXVtyXS50ZXh0KyIiO3JldHVybiB0fSxNLnVwZGF0ZVJlZnM9ZnVuY3Rpb24odCl7dGhpcy5mdWxsTGF5b3V0PXQ7dmFyIGU9dGhpcy5pZC5tYXRjaChUKSxyPSJ4YXhpcyIrZVsxXSxuPSJ5YXhpcyIrZVsyXTt0aGlzLnhheGlzPXRoaXMuZnVsbExheW91dFtyXSx0aGlzLnlheGlzPXRoaXMuZnVsbExheW91dFtuXX0sTS5yZWxheW91dENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdixlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49dC5sYXlvdXQsaT17fSxvPWlbZS5fbmFtZSsiLnJhbmdlIl09ZS5yYW5nZS5zbGljZSgpLHM9aVtyLl9uYW1lKyIucmFuZ2UiXT1yLnJhbmdlLnNsaWNlKCk7aVtlLl9uYW1lKyIuYXV0b3JhbmdlIl09ZS5hdXRvcmFuZ2UsaVtyLl9uYW1lKyIuYXV0b3JhbmdlIl09ci5hdXRvcmFuZ2UsYS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksaSk7dmFyIGw9bltlLl9uYW1lXTtsLnJhbmdlPW8sbC5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2U7dmFyIGM9bltyLl9uYW1lXTtjLnJhbmdlPXMsYy5hdXRvcmFuZ2U9ci5hdXRvcmFuZ2UsaS5sYXN0SW5wdXRUaW1lPXRoaXMuY2FtZXJhLmxhc3RJbnB1dFRpbWUsdC5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGkpfSxNLmNhbWVyYUNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNhbWVyYTt0aGlzLmdscGxvdC5zZXREYXRhQm94KHRoaXMuY2FsY0RhdGFCb3goKSk7dmFyIGU9dGhpcy5jb21wdXRlVGlja01hcmtzKCk7KGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjwyOysrcil7dmFyIG49dFtyXSxpPWVbcl07aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGE9MDthPG4ubGVuZ3RoOysrYSlpZihuW2FdLnghPT1pW2FdLngpcmV0dXJuITB9cmV0dXJuITF9KShlLHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcykmJih0aGlzLmdscGxvdE9wdGlvbnMudGlja3M9ZSx0aGlzLmdscGxvdE9wdGlvbnMuZGF0YUJveD10LmRhdGFCb3gsdGhpcy5nbHBsb3QudXBkYXRlKHRoaXMuZ2xwbG90T3B0aW9ucyksdGhpcy5oYW5kbGVBbm5vdGF0aW9ucygpKX0sTS5oYW5kbGVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy5mdWxsTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLnhyZWY9PT10aGlzLnhheGlzLl9pZCYmbi55cmVmPT09dGhpcy55YXhpcy5faWQmJmEuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSh0LHIpfX0sTS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5nbHBsb3Qpe3ZhciB0PXRoaXMudHJhY2VzO3QmJk9iamVjdC5rZXlzKHQpLm1hcCgoZnVuY3Rpb24oZSl7dFtlXS5kaXNwb3NlKCksZGVsZXRlIHRbZV19KSksdGhpcy5nbHBsb3QuZGlzcG9zZSgpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuc3ZnQ29udGFpbmVyKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm1vdXNlQ29udGFpbmVyKSx0aGlzLmZ1bGxEYXRhPW51bGwsdGhpcy5nbHBsb3Q9bnVsbCx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMubW91c2VDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPW51bGx9fSxNLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2xwbG90O3RoaXMudXBkYXRlUmVmcyhyKSx0aGlzLnhheGlzLmNsZWFyQ2FsYygpLHRoaXMueWF4aXMuY2xlYXJDYWxjKCksdGhpcy51cGRhdGVUcmFjZXModCxlKSx0aGlzLnVwZGF0ZUZ4KHIuZHJhZ21vZGUpO3ZhciBpPXIud2lkdGgsYT1yLmhlaWdodDt0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBvPXRoaXMuZ2xwbG90T3B0aW9ucztvLm1lcmdlKHIpLG8uc2NyZWVuQm94PVswLDAsaSxhXTt2YXIgcz17X2Z1bGxMYXlvdXQ6e19heGlzQ29uc3RyYWludEdyb3Vwczp0aGlzLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3Vwcyx4YXhpczp0aGlzLnhheGlzLHlheGlzOnRoaXMueWF4aXN9fTt2KHMsdGhpcy54YXhpcyksdihzLHRoaXMueWF4aXMpO3ZhciBsLGMsdT1yLl9zaXplLGY9dGhpcy54YXhpcy5kb21haW4saD10aGlzLnlheGlzLmRvbWFpbjtmb3Ioby52aWV3Qm94PVt1LmwrZlswXSp1LncsdS5iK2hbMF0qdS5oLGktdS5yLSgxLWZbMV0pKnUudyxhLXUudC0oMS1oWzFdKSp1LmhdLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUud2lkdGg9dS53KihmWzFdLWZbMF0pKyJweCIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQ9dS5oKihoWzFdLWhbMF0pKyJweCIsdGhpcy5tb3VzZUNvbnRhaW5lci5oZWlnaHQ9dS5oKihoWzFdLWhbMF0pLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUubGVmdD11LmwrZlswXSp1LncrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLnRvcD11LnQrKDEtaFsxXSkqdS5oKyJweCIsYz0wO2M8MjsrK2MpKGw9dGhpc1t3W2NdXSkuX2xlbmd0aD1vLnZpZXdCb3hbYysyXS1vLnZpZXdCb3hbY10seSh0aGlzLmdyYXBoRGl2LGwpLGwuc2V0U2NhbGUoKTttKHMpLG8udGlja3M9dGhpcy5jb21wdXRlVGlja01hcmtzKCksby5kYXRhQm94PXRoaXMuY2FsY0RhdGFCb3goKSxvLm1lcmdlKHIpLG4udXBkYXRlKG8pLHRoaXMuZ2xwbG90LmRyYXcoKX0sTS5jYWxjRGF0YUJveD1mdW5jdGlvbigpe3ZhciB0PXRoaXMueGF4aXMsZT10aGlzLnlheGlzLHI9dC5yYW5nZSxuPWUucmFuZ2UsaT10LnIybCxhPWUucjJsO3JldHVybltpKHJbMF0pLGEoblswXSksaShyWzFdKSxhKG5bMV0pXX0sTS5zZXRSYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy54YXhpcyxyPXRoaXMueWF4aXMsbj1lLmwycixpPXIubDJyO2UucmFuZ2U9W24odFswXSksbih0WzJdKV0sci5yYW5nZT1baSh0WzFdKSxpKHRbM10pXX0sTS51cGRhdGVUcmFjZXM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1PYmplY3Qua2V5cyh0aGlzLnRyYWNlcyk7dGhpcy5mdWxsRGF0YT10O3Q6Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl7dmFyIG89YVtyXSxzPXRoaXMudHJhY2VzW29dO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYoKGk9dFtuXSkudWlkPT09byYmaS50eXBlPT09cy50eXBlKWNvbnRpbnVlIHQ7cy5kaXNwb3NlKCksZGVsZXRlIHRoaXMudHJhY2VzW29dfWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2k9dFtyXTt2YXIgbD1lW3JdLGM9dGhpcy50cmFjZXNbaS51aWRdO2M/Yy51cGRhdGUoaSxsKTooYz1pLl9tb2R1bGUucGxvdCh0aGlzLGksbCksdGhpcy50cmFjZXNbaS51aWRdPWMpfXRoaXMuZ2xwbG90Lm9iamVjdHMuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJhY2UuaW5kZXgtZS5fdHJhY2UuaW5kZXh9KSl9LE0udXBkYXRlRng9ZnVuY3Rpb24odCl7Xyh0KXx8Yih0KT8odGhpcy5waWNrQ2FudmFzLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIik6KHRoaXMucGlja0NhbnZhcy5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0iYXV0byIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0iYXV0byIpLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUuY3Vyc29yPSJwYW4iPT09dD8ibW92ZSI6Inpvb20iPT09dD8iY3Jvc3NoYWlyIjpudWxsfSxNLmVtaXRQb2ludEFjdGlvbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQudHJhY2UudWlkLGk9dC5wb2ludEluZGV4LGE9MDthPHRoaXMuZnVsbERhdGEubGVuZ3RoO2ErKyl0aGlzLmZ1bGxEYXRhW2FdLnVpZD09PW4mJihyPXRoaXMuZnVsbERhdGFbYV0pO3ZhciBvPXt4OnQudHJhY2VDb29yZFswXSx5OnQudHJhY2VDb29yZFsxXSxjdXJ2ZU51bWJlcjpyLmluZGV4LHBvaW50TnVtYmVyOmksZGF0YTpyLl9pbnB1dCxmdWxsRGF0YTp0aGlzLmZ1bGxEYXRhLHhheGlzOnRoaXMueGF4aXMseWF4aXM6dGhpcy55YXhpc307cy5hcHBlbmRBcnJheVBvaW50VmFsdWUobyxyLGkpLHRoaXMuZ3JhcGhEaXYuZW1pdChlLHtwb2ludHM6W29dfSl9LE0uZHJhdz1mdW5jdGlvbigpe2lmKCF0aGlzLnN0b3BwZWQpe3JlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlZHJhdyk7dmFyIHQ9dGhpcy5nbHBsb3QsZT10aGlzLmNhbWVyYSxyPWUubW91c2VMaXN0ZW5lcixuPTE9PT10aGlzLmxhc3RCdXR0b25TdGF0ZSYmMD09PXIuYnV0dG9ucyxpPXRoaXMuZnVsbExheW91dDt0aGlzLmxhc3RCdXR0b25TdGF0ZT1yLmJ1dHRvbnMsdGhpcy5jYW1lcmFDaGFuZ2VkKCk7dmFyIGEsbz1yLngqdC5waXhlbFJhdGlvLGw9dGhpcy5jYW52YXMuaGVpZ2h0LXQucGl4ZWxSYXRpbypyLnk7aWYoZS5ib3hFbmFibGVkJiYiem9vbSI9PT1pLmRyYWdtb2RlKXt0aGlzLnNlbGVjdEJveC5lbmFibGVkPSEwO2Zvcih2YXIgYz10aGlzLnNlbGVjdEJveC5zZWxlY3RCb3g9W01hdGgubWluKGUuYm94U3RhcnRbMF0sZS5ib3hFbmRbMF0pLE1hdGgubWluKGUuYm94U3RhcnRbMV0sZS5ib3hFbmRbMV0pLE1hdGgubWF4KGUuYm94U3RhcnRbMF0sZS5ib3hFbmRbMF0pLE1hdGgubWF4KGUuYm94U3RhcnRbMV0sZS5ib3hFbmRbMV0pXSx1PTA7dTwyO3UrKyllLmJveFN0YXJ0W3VdPT09ZS5ib3hFbmRbdV0mJihjW3VdPXQuZGF0YUJveFt1XSxjW3UrMl09dC5kYXRhQm94W3UrMl0pO3Quc2V0RGlydHkoKX1lbHNlIGlmKCFlLnBhbm5pbmcmJnRoaXMuaXNNb3VzZU92ZXIpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITE7dmFyIGY9aS5fc2l6ZSxoPXRoaXMueGF4aXMuZG9tYWluLHA9dGhpcy55YXhpcy5kb21haW4sZD0oYT10LnBpY2soby90LnBpeGVsUmF0aW8rZi5sK2hbMF0qZi53LGwvdC5waXhlbFJhdGlvLShmLnQrKDEtcFsxXSkqZi5oKSkpJiZhLm9iamVjdC5fdHJhY2UuaGFuZGxlUGljayhhKTtpZihkJiZuJiZ0aGlzLmVtaXRQb2ludEFjdGlvbihkLCJwbG90bHlfY2xpY2siKSxhJiYic2tpcCIhPT1hLm9iamVjdC5fdHJhY2UuaG92ZXJpbmZvJiZpLmhvdmVybW9kZSYmZCYmKCF0aGlzLmxhc3RQaWNrUmVzdWx0fHx0aGlzLmxhc3RQaWNrUmVzdWx0LnRyYWNlVWlkIT09ZC50cmFjZS51aWR8fHRoaXMubGFzdFBpY2tSZXN1bHQuZGF0YUNvb3JkWzBdIT09ZC5kYXRhQ29vcmRbMF18fHRoaXMubGFzdFBpY2tSZXN1bHQuZGF0YUNvb3JkWzFdIT09ZC5kYXRhQ29vcmRbMV0pKXt2YXIgZz1kO3RoaXMubGFzdFBpY2tSZXN1bHQ9e3RyYWNlVWlkOmQudHJhY2U/ZC50cmFjZS51aWQ6bnVsbCxkYXRhQ29vcmQ6ZC5kYXRhQ29vcmQuc2xpY2UoKX0sdGhpcy5zcGlrZXMudXBkYXRlKHtjZW50ZXI6YS5kYXRhQ29vcmR9KSxnLnNjcmVlbkNvb3JkPVsoKHQudmlld0JveFsyXS10LnZpZXdCb3hbMF0pKihhLmRhdGFDb29yZFswXS10LmRhdGFCb3hbMF0pLyh0LmRhdGFCb3hbMl0tdC5kYXRhQm94WzBdKSt0LnZpZXdCb3hbMF0pL3QucGl4ZWxSYXRpbywodGhpcy5jYW52YXMuaGVpZ2h0LSh0LnZpZXdCb3hbM10tdC52aWV3Qm94WzFdKSooYS5kYXRhQ29vcmRbMV0tdC5kYXRhQm94WzFdKS8odC5kYXRhQm94WzNdLXQuZGF0YUJveFsxXSktdC52aWV3Qm94WzFdKS90LnBpeGVsUmF0aW9dLHRoaXMuZW1pdFBvaW50QWN0aW9uKGQsInBsb3RseV9ob3ZlciIpO3ZhciBtPXRoaXMuZnVsbERhdGFbZy50cmFjZS5pbmRleF18fHt9LHY9Zy5wb2ludEluZGV4LHk9cy5jYXN0SG92ZXJpbmZvKG0saSx2KTtpZih5JiYiYWxsIiE9PXkpe3ZhciB4PXkuc3BsaXQoIisiKTstMT09PXguaW5kZXhPZigieCIpJiYoZy50cmFjZUNvb3JkWzBdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoInkiKSYmKGcudHJhY2VDb29yZFsxXT12b2lkIDApLC0xPT09eC5pbmRleE9mKCJ6IikmJihnLnRyYWNlQ29vcmRbMl09dm9pZCAwKSwtMT09PXguaW5kZXhPZigidGV4dCIpJiYoZy50ZXh0TGFiZWw9dm9pZCAwKSwtMT09PXguaW5kZXhPZigibmFtZSIpJiYoZy5uYW1lPXZvaWQgMCl9cy5sb25lSG92ZXIoe3g6Zy5zY3JlZW5Db29yZFswXSx5Omcuc2NyZWVuQ29vcmRbMV0seExhYmVsOnRoaXMuaG92ZXJGb3JtYXR0ZXIoInhheGlzIixnLnRyYWNlQ29vcmRbMF0pLHlMYWJlbDp0aGlzLmhvdmVyRm9ybWF0dGVyKCJ5YXhpcyIsZy50cmFjZUNvb3JkWzFdKSx6TGFiZWw6Zy50cmFjZUNvb3JkWzJdLHRleHQ6Zy50ZXh0TGFiZWwsbmFtZTpnLm5hbWUsY29sb3I6cy5jYXN0SG92ZXJPcHRpb24obSx2LCJiZ2NvbG9yIil8fGcuY29sb3IsYm9yZGVyQ29sb3I6cy5jYXN0SG92ZXJPcHRpb24obSx2LCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6cy5jYXN0SG92ZXJPcHRpb24obSx2LCJmb250LmZhbWlseSIpLGZvbnRTaXplOnMuY2FzdEhvdmVyT3B0aW9uKG0sdiwiZm9udC5zaXplIiksZm9udENvbG9yOnMuY2FzdEhvdmVyT3B0aW9uKG0sdiwiZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6cy5jYXN0SG92ZXJPcHRpb24obSx2LCJuYW1lbGVuZ3RoIiksdGV4dEFsaWduOnMuY2FzdEhvdmVyT3B0aW9uKG0sdiwiYWxpZ24iKX0se2NvbnRhaW5lcjp0aGlzLnN2Z0NvbnRhaW5lcixnZDp0aGlzLmdyYXBoRGl2fSl9fWF8fHRoaXMudW5ob3ZlcigpLHQuZHJhdygpfX0sTS51bmhvdmVyPWZ1bmN0aW9uKCl7dGhpcy5sYXN0UGlja1Jlc3VsdCYmKHRoaXMuc3Bpa2VzLnVwZGF0ZSh7fSksdGhpcy5sYXN0UGlja1Jlc3VsdD1udWxsLHRoaXMuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3VuaG92ZXIiKSxzLmxvbmVVbmhvdmVyKHRoaXMuc3ZnQ29udGFpbmVyKSl9LE0uaG92ZXJGb3JtYXR0ZXI9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1lKXt2YXIgcj10aGlzW3RdO3JldHVybiBvLnRpY2tUZXh0KHIsci5jMmwoZSksImhvdmVyIikudGV4dH19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2ODMsIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyI6ODAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo4MjcsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjgzNCwiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo4MzUsIi4vY2FtZXJhIjo4NjYsIi4vY29udmVydCI6ODY3LCJnbC1wbG90MmQiOjMxNywiZ2wtc2VsZWN0LWJveCI6MzMzLCJnbC1zcGlrZXMyZCI6MzQyLCJ3ZWJnbC1jb250ZXh0Ijo2MDZ9XSw4NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi9zY2VuZSIpLG89dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKTtyLm5hbWU9ImdsM2QiLHIuYXR0cj0ic2NlbmUiLHIuaWRSb290PSJzY2VuZSIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PXMuY291bnRlclJlZ2V4KCJzY2VuZSIpLHIuYXR0cmlidXRlcz10KCIuL2xheW91dC9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0L2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDNkLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIHM9bltpXSxsPW8ociwiZ2wzZCIscyksYz1lW3NdLHU9Yy5jYW1lcmEsZj1jLl9zY2VuZTtmfHwoZj1uZXcgYSh7aWQ6cyxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpbyxjYW1lcmE6dX0sZSksYy5fc2NlbmU9ZiksZi52aWV3SW5pdGlhbHx8KGYudmlld0luaXRpYWw9e3VwOnt4OnUudXAueCx5OnUudXAueSx6OnUudXAuen0sZXllOnt4OnUuZXllLngseTp1LmV5ZS55LHo6dS5leWUuen0sY2VudGVyOnt4OnUuY2VudGVyLngseTp1LmNlbnRlci55LHo6dS5jZW50ZXIuen19KSxmLnBsb3QobCxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsM2R8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTshZVtvXSYmbltvXS5fc2NlbmUmJihuW29dLl9zY2VuZS5kZXN0cm95KCksbi5faW5mb2xheWVyJiZuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi0iK28pLnJlbW92ZSgpKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49ZS5fc2l6ZSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPWVbcltpXV0sbz1hLmRvbWFpbixzPWEuX3NjZW5lLGM9cy50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLCJ4bGluazpocmVmIjpjLHg6bi5sK24udypvLnhbMF0seTpuLnQrbi5oKigxLW8ueVsxXSksd2lkdGg6bi53KihvLnhbMV0tby54WzBdKSxoZWlnaHQ6bi5oKihvLnlbMV0tby55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHMuZGVzdHJveSgpfX0sci5jbGVhbklkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goL15zY2VuZVswLTldKiQvKSl7dmFyIGU9dC5zdWJzdHIoNSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLCJzY2VuZSIrZX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49MDtuPHIubGVuZ3RoO24rKyl7ZVtyW25dXS5fc2NlbmUudXBkYXRlRngoZS5kcmFnbW9kZSxlLmhvdmVybW9kZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo2ODQsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTQsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MTAsIi4uL2dldF9kYXRhIjo4NjUsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjg3MSwiLi9sYXlvdXQvZGVmYXVsdHMiOjg3NSwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjg3NiwiLi9zY2VuZSI6ODgwfV0sODcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2NlbmU6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoic2NlbmUiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn19fSx7fV0sODcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPW8oe3Zpc2libGU6aS52aXNpYmxlLHNob3dzcGlrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtlc2lkZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Mn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sc2hvd2JhY2tncm91bmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGJhY2tncm91bmRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KSJ9LHNob3dheGVzbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxjb2xvcjppLmNvbG9yLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRpdGxlOnt0ZXh0OmkudGl0bGUudGV4dCxmb250OmkudGl0bGUuZm9udH0sdHlwZTphKHt9LGkudHlwZSx7dmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdfSksYXV0b3R5cGVudW1iZXJzOmkuYXV0b3R5cGVudW1iZXJzLGF1dG9yYW5nZTppLmF1dG9yYW5nZSxyYW5nZW1vZGU6aS5yYW5nZW1vZGUscmFuZ2U6YSh7fSxpLnJhbmdlLHtpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfX0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfX1dLGFuaW06ITF9KSx0aWNrbW9kZTppLnRpY2ttb2RlLG50aWNrczppLm50aWNrcyx0aWNrMDppLnRpY2swLGR0aWNrOmkuZHRpY2ssdGlja3ZhbHM6aS50aWNrdmFscyx0aWNrdGV4dDppLnRpY2t0ZXh0LHRpY2tzOmkudGlja3MsbWlycm9yOmkubWlycm9yLHRpY2tsZW46aS50aWNrbGVuLHRpY2t3aWR0aDppLnRpY2t3aWR0aCx0aWNrY29sb3I6aS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6aS5zaG93dGlja2xhYmVscyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDppLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4Omkuc2hvd3RpY2tzdWZmaXgsc2hvd2V4cG9uZW50Omkuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmkuZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6aS5taW5leHBvbmVudCxzZXBhcmF0ZXRob3VzYW5kczppLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb3JtYXQ6aS50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczppLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkuc2hvd2xpbmUsbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDppLnNob3dncmlkLGdyaWRjb2xvcjphKHt9LGkuZ3JpZGNvbG9yLHtkZmx0OiJyZ2IoMjA0LCAyMDQsIDIwNCkifSksZ3JpZHdpZHRoOmkuZ3JpZHdpZHRoLHplcm9saW5lOmkuemVyb2xpbmUsemVyb2xpbmVjb2xvcjppLnplcm9saW5lY29sb3IsemVyb2xpbmV3aWR0aDppLnplcm9saW5ld2lkdGgsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sInBsb3QiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODEwLCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0Mn1dLDg3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGk9dCgiLi4vLi4vLi4vbGliIiksYT10KCIuLi8uLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuL2F4aXNfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksYz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHUsZjtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGkuY29lcmNlKHUsZixvLHQsZSl9Zm9yKHZhciBwPTA7cDxjLmxlbmd0aDtwKyspe3ZhciBkPWNbcF07dT10W2RdfHx7fSwoZj1hLm5ld0NvbnRhaW5lcihlLGQpKS5faWQ9ZFswXStyLnNjZW5lLGYuX25hbWU9ZCxzKHUsZixoLHIpLGwodSxmLGgse2ZvbnQ6ci5mb250LGxldHRlcjpkWzBdLGRhdGE6ci5kYXRhLHNob3dHcmlkOiEwLG5vVGlja3NvbjohMCxub1RpY2tsYWJlbG1vZGU6ITAsbm9UaWNrbGFiZWxwb3NpdGlvbjohMCxiZ0NvbG9yOnIuYmdDb2xvcixjYWxlbmRhcjpyLmNhbGVuZGFyfSxyLmZ1bGxMYXlvdXQpLGgoImdyaWRjb2xvciIsbihmLmNvbG9yLHIuYmdDb2xvciwxMzYwMC8xODcpLnRvUmdiU3RyaW5nKCkpLGgoInRpdGxlLnRleHQiLGRbMF0pLGYuc2V0U2NhbGU9aS5ub29wLGgoInNob3dzcGlrZXMiKSYmKGgoInNwaWtlc2lkZXMiKSxoKCJzcGlrZXRoaWNrbmVzcyIpLGgoInNwaWtlY29sb3IiLGYuY29sb3IpKSxoKCJzaG93YXhlc2xhYmVscyIpLGgoInNob3diYWNrZ3JvdW5kIikmJmgoImJhY2tncm91bmRjb2xvciIpfX19LHsiLi4vLi4vLi4vbGliIjo3NzgsIi4uLy4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNywiLi4vLi4vY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiOjgzMCwiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHMiOjg1MywiLi9heGlzX2F0dHJpYnV0ZXMiOjg3Mix0aW55Y29sb3IyOjU3Nn1dLDg3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5IiksaT10KCIuLi8uLi8uLi9saWIiKSxhPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZnVuY3Rpb24gbygpe3RoaXMuYm91bmRzPVtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHRoaXMudGlja3M9W1tdLFtdLFtdXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzE4LDE4LDE4XSx0aGlzLmxhYmVscz1bIngiLCJ5IiwieiJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD1bIk9wZW4gU2FucyIsIk9wZW4gU2FucyIsIk9wZW4gU2FucyJdLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMzAsMzAsMzBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzEwLDEwLDEwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9kZWZhdWx0VGlja1BhZD10aGlzLnRpY2tQYWQuc2xpY2UoKSx0aGlzLl9kZWZhdWx0TGFiZWxQYWQ9dGhpcy5sYWJlbFBhZC5zbGljZSgpLHRoaXMuX2RlZmF1bHRMaW5lVGlja0xlbmd0aD10aGlzLmxpbmVUaWNrTGVuZ3RoLnNsaWNlKCl9by5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXt2YXIgbz1lW2Fbcl1dO28udmlzaWJsZT8odGhpcy5sYWJlbHNbcl09dC5fbWV0YT9pLnRlbXBsYXRlU3RyaW5nKG8udGl0bGUudGV4dCx0Ll9tZXRhKTpvLnRpdGxlLnRleHQsImZvbnQiaW4gby50aXRsZSYmKG8udGl0bGUuZm9udC5jb2xvciYmKHRoaXMubGFiZWxDb2xvcltyXT1uKG8udGl0bGUuZm9udC5jb2xvcikpLG8udGl0bGUuZm9udC5mYW1pbHkmJih0aGlzLmxhYmVsRm9udFtyXT1vLnRpdGxlLmZvbnQuZmFtaWx5KSxvLnRpdGxlLmZvbnQuc2l6ZSYmKHRoaXMubGFiZWxTaXplW3JdPW8udGl0bGUuZm9udC5zaXplKSksInNob3dsaW5lImluIG8mJih0aGlzLmxpbmVFbmFibGVbcl09by5zaG93bGluZSksImxpbmVjb2xvciJpbiBvJiYodGhpcy5saW5lQ29sb3Jbcl09bihvLmxpbmVjb2xvcikpLCJsaW5ld2lkdGgiaW4gbyYmKHRoaXMubGluZVdpZHRoW3JdPW8ubGluZXdpZHRoKSwic2hvd2dyaWQiaW4gbyYmKHRoaXMuZ3JpZEVuYWJsZVtyXT1vLnNob3dncmlkKSwiZ3JpZGNvbG9yImluIG8mJih0aGlzLmdyaWRDb2xvcltyXT1uKG8uZ3JpZGNvbG9yKSksImdyaWR3aWR0aCJpbiBvJiYodGhpcy5ncmlkV2lkdGhbcl09by5ncmlkd2lkdGgpLCJsb2ciPT09by50eXBlP3RoaXMuemVyb0VuYWJsZVtyXT0hMToiemVyb2xpbmUiaW4gbyYmKHRoaXMuemVyb0VuYWJsZVtyXT1vLnplcm9saW5lKSwiemVyb2xpbmVjb2xvciJpbiBvJiYodGhpcy56ZXJvTGluZUNvbG9yW3JdPW4oby56ZXJvbGluZWNvbG9yKSksInplcm9saW5ld2lkdGgiaW4gbyYmKHRoaXMuemVyb0xpbmVXaWR0aFtyXT1vLnplcm9saW5ld2lkdGgpLCJ0aWNrcyJpbiBvJiZvLnRpY2tzP3RoaXMubGluZVRpY2tFbmFibGVbcl09ITA6dGhpcy5saW5lVGlja0VuYWJsZVtyXT0hMSwidGlja2xlbiJpbiBvJiYodGhpcy5saW5lVGlja0xlbmd0aFtyXT10aGlzLl9kZWZhdWx0TGluZVRpY2tMZW5ndGhbcl09by50aWNrbGVuKSwidGlja2NvbG9yImluIG8mJih0aGlzLmxpbmVUaWNrQ29sb3Jbcl09bihvLnRpY2tjb2xvcikpLCJ0aWNrd2lkdGgiaW4gbyYmKHRoaXMubGluZVRpY2tXaWR0aFtyXT1vLnRpY2t3aWR0aCksInRpY2thbmdsZSJpbiBvJiYodGhpcy50aWNrQW5nbGVbcl09ImF1dG8iPT09by50aWNrYW5nbGU/LTM2MDA6TWF0aC5QSSotby50aWNrYW5nbGUvMTgwKSwic2hvd3RpY2tsYWJlbHMiaW4gbyYmKHRoaXMudGlja0VuYWJsZVtyXT1vLnNob3d0aWNrbGFiZWxzKSwidGlja2ZvbnQiaW4gbyYmKG8udGlja2ZvbnQuY29sb3ImJih0aGlzLnRpY2tDb2xvcltyXT1uKG8udGlja2ZvbnQuY29sb3IpKSxvLnRpY2tmb250LmZhbWlseSYmKHRoaXMudGlja0ZvbnRbcl09by50aWNrZm9udC5mYW1pbHkpLG8udGlja2ZvbnQuc2l6ZSYmKHRoaXMudGlja1NpemVbcl09by50aWNrZm9udC5zaXplKSksIm1pcnJvciJpbiBvPy0xIT09WyJ0aWNrcyIsImFsbCIsImFsbHRpY2tzIl0uaW5kZXhPZihvLm1pcnJvcik/KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITAsdGhpcy5saW5lTWlycm9yW3JdPSEwKTohMD09PW8ubWlycm9yPyh0aGlzLmxpbmVUaWNrTWlycm9yW3JdPSExLHRoaXMubGluZU1pcnJvcltyXT0hMCk6KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITEsdGhpcy5saW5lTWlycm9yW3JdPSExKTp0aGlzLmxpbmVNaXJyb3Jbcl09ITEsInNob3diYWNrZ3JvdW5kImluIG8mJiExIT09by5zaG93YmFja2dyb3VuZD8odGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSEwLHRoaXMuYmFja2dyb3VuZENvbG9yW3JdPW4oby5iYWNrZ3JvdW5kY29sb3IpKTp0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITEpOih0aGlzLnRpY2tFbmFibGVbcl09ITEsdGhpcy5sYWJlbEVuYWJsZVtyXT0hMSx0aGlzLmxpbmVFbmFibGVbcl09ITEsdGhpcy5saW5lVGlja0VuYWJsZVtyXT0hMSx0aGlzLmdyaWRFbmFibGVbcl09ITEsdGhpcy56ZXJvRW5hYmxlW3JdPSExLHRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMSl9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbztyZXR1cm4gci5tZXJnZSh0LGUpLHJ9fSx7Ii4uLy4uLy4uL2xpYiI6Nzc4LCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo4MDJ9XSw4NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vbGliIiksaT10KCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi9heGlzX2RlZmF1bHRzIiksbD10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhO2Z1bmN0aW9uIHUodCxlLHIsbil7Zm9yKHZhciBvPXIoImJnY29sb3IiKSxsPWkuY29tYmluZShvLG4ucGFwZXJfYmdjb2xvciksdT1bInVwIiwiY2VudGVyIiwiZXllIl0sZj0wO2Y8dS5sZW5ndGg7ZisrKXIoImNhbWVyYS4iK3VbZl0rIi54IikscigiY2FtZXJhLiIrdVtmXSsiLnkiKSxyKCJjYW1lcmEuIit1W2ZdKyIueiIpO3IoImNhbWVyYS5wcm9qZWN0aW9uLnR5cGUiKTt2YXIgaD0hIXIoImFzcGVjdHJhdGlvLngiKSYmISFyKCJhc3BlY3RyYXRpby55IikmJiEhcigiYXNwZWN0cmF0aW8ueiIpLHA9cigiYXNwZWN0bW9kZSIsaD8ibWFudWFsIjoiYXV0byIpO2h8fCh0LmFzcGVjdHJhdGlvPWUuYXNwZWN0cmF0aW89e3g6MSx5OjEsejoxfSwibWFudWFsIj09PXAmJihlLmFzcGVjdG1vZGU9ImF1dG8iKSx0LmFzcGVjdG1vZGU9ZS5hc3BlY3Rtb2RlKTt2YXIgZD1jKG4uZnVsbERhdGEsImdsM2QiLG4uaWQpO3ModCxlLHtmb250Om4uZm9udCxzY2VuZTpuLmlkLGRhdGE6ZCxiZ0NvbG9yOmwsY2FsZW5kYXI6bi5jYWxlbmRhcixhdXRvdHlwZW51bWJlcnNEZmx0Om4uYXV0b3R5cGVudW1iZXJzRGZsdCxmdWxsTGF5b3V0Om4uZnVsbExheW91dH0pLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsbik7dmFyIGc9bi5nZXREZmx0RnJvbUxheW91dCgiZHJhZ21vZGUiKTtpZighMSE9PWcmJiFnKWlmKGc9Im9yYml0Iix0LmNhbWVyYSYmdC5jYW1lcmEudXApe3ZhciBtPXQuY2FtZXJhLnVwLngsdj10LmNhbWVyYS51cC55LHk9dC5jYW1lcmEudXAuejswIT09eSYmKG0mJnYmJnk/eS9NYXRoLnNxcnQobSptK3Yqdit5KnkpPi45OTkmJihnPSJ0dXJudGFibGUiKTpnPSJ0dXJudGFibGUiKX1lbHNlIGc9InR1cm50YWJsZSI7cigiZHJhZ21vZGUiLGcpLHIoImhvdmVybW9kZSIsbi5nZXREZmx0RnJvbUxheW91dCgiaG92ZXJtb2RlIikpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aD4xO28odCxlLHIse3R5cGU6ImdsM2QiLGF0dHJpYnV0ZXM6bCxoYW5kbGVEZWZhdWx0czp1LGZ1bGxMYXlvdXQ6ZSxmb250OmUuZm9udCxmdWxsRGF0YTpyLGdldERmbHRGcm9tTGF5b3V0OmZ1bmN0aW9uKGUpe2lmKCFpKXJldHVybiBuLnZhbGlkYXRlKHRbZV0sbFtlXSk/dFtlXTp2b2lkIDB9LGF1dG90eXBlbnVtYmVyc0RmbHQ6ZS5hdXRvdHlwZW51bWJlcnMscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsY2FsZW5kYXI6ZS5jYWxlbmRhcn0pfX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uLy4uL2xpYiI6Nzc4LCIuLi8uLi8uLi9yZWdpc3RyeSI6OTExLCIuLi8uLi9nZXRfZGF0YSI6ODY1LCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIjo5MDUsIi4vYXhpc19kZWZhdWx0cyI6ODczLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NzZ9XSw4NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uLy4uL2xpYiIpLmNvdW50ZXJSZWdleDtmdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm57eDp7dmFsVHlwZToibnVtYmVyIixkZmx0OnQsZWRpdFR5cGU6ImNhbWVyYSJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDplLGVkaXRUeXBlOiJjYW1lcmEifSx6Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6cixlZGl0VHlwZToiY2FtZXJhIn0sZWRpdFR5cGU6ImNhbWVyYSJ9fWUuZXhwb3J0cz17X2FycmF5QXR0clJlZ2V4cHM6W28oInNjZW5lIiwiLmFubm90YXRpb25zIiwhMCldLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToicGxvdCJ9LGNhbWVyYTp7dXA6YShzKDAsMCwxKSx7fSksY2VudGVyOmEocygwLDAsMCkse30pLGV5ZTphKHMoMS4yNSwxLjI1LDEuMjUpLHt9KSxwcm9qZWN0aW9uOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwZXJzcGVjdGl2ZSIsIm9ydGhvZ3JhcGhpYyJdLGRmbHQ6InBlcnNwZWN0aXZlIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbWVyYSJ9LGRvbWFpbjppKHtuYW1lOiJzY2VuZSIsZWRpdFR5cGU6InBsb3QifSksYXNwZWN0bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImN1YmUiLCJkYXRhIiwibWFudWFsIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7ImFzcGVjdHJhdGlvLngiOnZvaWQgMCwiYXNwZWN0cmF0aW8ueSI6dm9pZCAwLCJhc3BlY3RyYXRpby56Ijp2b2lkIDB9fSxhc3BlY3RyYXRpbzp7eDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmFzcGVjdG1vZGUiOiJtYW51YWwifX0seTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmFzcGVjdG1vZGUiOiJtYW51YWwifX0sejp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmFzcGVjdG1vZGUiOiJtYW51YWwifX0sZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7YXNwZWN0bW9kZToibWFudWFsIn19LHhheGlzOm4seWF4aXM6bix6YXhpczpuLGRyYWdtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvcmJpdCIsInR1cm50YWJsZSIsInpvb20iLCJwYW4iLCExXSxlZGl0VHlwZToicGxvdCJ9LGhvdmVybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvc2VzdCIsITFdLGRmbHQ6ImNsb3Nlc3QiLGVkaXRUeXBlOiJtb2RlYmFyIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJwbG90IixfZGVwcmVjYXRlZDp7Y2FtZXJhcG9zaXRpb246e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGVkaXRUeXBlOiJjYW1lcmEifX19fSx7Ii4uLy4uLy4uL2xpYiI6Nzc4LCIuLi8uLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL2RvbWFpbiI6ODU1LCIuL2F4aXNfYXR0cmlidXRlcyI6ODcyfV0sODc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxpPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZnVuY3Rpb24gYSgpe3RoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuY29sb3JzPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5kcmF3U2lkZXM9WyEwLCEwLCEwXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdfWEucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MzsrK2Upe3ZhciByPXRbaVtlXV07ci52aXNpYmxlPyh0aGlzLmVuYWJsZWRbZV09ci5zaG93c3Bpa2VzLHRoaXMuY29sb3JzW2VdPW4oci5zcGlrZWNvbG9yKSx0aGlzLmRyYXdTaWRlc1tlXT1yLnNwaWtlc2lkZXMsdGhpcy5saW5lV2lkdGhbZV09ci5zcGlrZXRoaWNrbmVzcyk6KHRoaXMuZW5hYmxlZFtlXT0hMSx0aGlzLmRyYXdTaWRlc1tlXT0hMSl9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGE7cmV0dXJuIGUubWVyZ2UodCksZX19LHsiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAyfV0sODc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5heGVzT3B0aW9ucyxyPXQuZ2xwbG90LmF4ZXNQaXhlbHMscz10LmZ1bGxTY2VuZUxheW91dCxsPVtbXSxbXSxbXV0sYz0wO2M8MzsrK2Mpe3ZhciB1PXNbYVtjXV07aWYodS5fbGVuZ3RoPShyW2NdLmhpLXJbY10ubG8pKnJbY10ucGl4ZWxzUGVyRGF0YVVuaXQvdC5kYXRhU2NhbGVbY10sTWF0aC5hYnModS5fbGVuZ3RoKT09PTEvMHx8aXNOYU4odS5fbGVuZ3RoKSlsW2NdPVtdO2Vsc2V7dS5faW5wdXRfcmFuZ2U9dS5yYW5nZS5zbGljZSgpLHUucmFuZ2VbMF09cltjXS5sby90LmRhdGFTY2FsZVtjXSx1LnJhbmdlWzFdPXJbY10uaGkvdC5kYXRhU2NhbGVbY10sdS5fbT0xLyh0LmRhdGFTY2FsZVtjXSpyW2NdLnBpeGVsc1BlckRhdGFVbml0KSx1LnJhbmdlWzBdPT09dS5yYW5nZVsxXSYmKHUucmFuZ2VbMF0tPTEsdS5yYW5nZVsxXSs9MSk7dmFyIGY9dS50aWNrbW9kZTtpZigiYXV0byI9PT11LnRpY2ttb2RlKXt1LnRpY2ttb2RlPSJsaW5lYXIiO3ZhciBoPXUubnRpY2tzfHxpLmNvbnN0cmFpbih1Ll9sZW5ndGgvNDAsNCw5KTtuLmF1dG9UaWNrcyh1LE1hdGguYWJzKHUucmFuZ2VbMV0tdS5yYW5nZVswXSkvaCl9Zm9yKHZhciBwPW4uY2FsY1RpY2tzKHUse21zVVRDOiEwfSksZD0wO2Q8cC5sZW5ndGg7KytkKXBbZF0ueD1wW2RdLngqdC5kYXRhU2NhbGVbY10sImRhdGUiPT09dS50eXBlJiYocFtkXS50ZXh0PXBbZF0udGV4dC5yZXBsYWNlKC9cPGJyXD4vZywiICIpKTtsW2NdPXAsdS50aWNrbW9kZT1mfX1lLnRpY2tzPWw7Zm9yKGM9MDtjPDM7KytjKXtvW2NdPS41Kih0LmdscGxvdC5ib3VuZHNbMF1bY10rdC5nbHBsb3QuYm91bmRzWzFdW2NdKTtmb3IoZD0wO2Q8MjsrK2QpZS5ib3VuZHNbZF1bY109dC5nbHBsb3QuYm91bmRzW2RdW2NdfXQuY29udG91ckxldmVscz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KDMpLHI9MDtyPDM7KytyKXtmb3IodmFyIG49dFtyXSxpPW5ldyBBcnJheShuLmxlbmd0aCksYT0wO2E8bi5sZW5ndGg7KythKWlbYV09blthXS54O2Vbcl09aX1yZXR1cm4gZX0obCl9O3ZhciBuPXQoIi4uLy4uL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi8uLi9saWIiKSxhPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0sbz1bMCwwLDBdfSx7Ii4uLy4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9jYXJ0ZXNpYW4vYXhlcyI6ODI4fV0sODc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuLGk9WzAsMCwwLDBdO2ZvcihyPTA7cjw0Oysrcilmb3Iobj0wO248NDsrK24paVtuXSs9dFs0KnIrbl0qZVtyXTtyZXR1cm4gaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LnByb2plY3Rpb24sbih0LnZpZXcsbih0Lm1vZGVsLFtlWzBdLGVbMV0sZVsyXSwxXSkpKX19LHt9XSw4ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhPXQoImdsLXBsb3QzZCIpLG89YS5jcmVhdGVDYW1lcmEscz1hLmNyZWF0ZVNjZW5lLGw9dCgid2ViZ2wtY29udGV4dCIpLGM9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIiksdT10KCIuLi8uLi9yZWdpc3RyeSIpLGY9dCgiLi4vLi4vbGliIiksaD1mLnByZXNlcnZlRHJhd2luZ0J1ZmZlcigpLHA9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxkPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxnPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxtPXQoIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyIpLHY9dCgiLi9wcm9qZWN0IikseT10KCIuL2xheW91dC9jb252ZXJ0IikseD10KCIuL2xheW91dC9zcGlrZXMiKSxiPXQoIi4vbGF5b3V0L3RpY2tfbWFya3MiKTtmdW5jdGlvbiBfKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksbj10LmNvbnRhaW5lcjt0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXY7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO2kuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLnN0eWxlLnRvcD1pLnN0eWxlLmxlZnQ9IjBweCIsaS5zdHlsZS53aWR0aD1pLnN0eWxlLmhlaWdodD0iMTAwJSIsaS5zdHlsZVsiei1pbmRleCJdPTIwLGkuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHIuYXBwZW5kQ2hpbGQoaSksdGhpcy5zdmdDb250YWluZXI9aSxyLmlkPXQuaWQsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUudG9wPXIuc3R5bGUubGVmdD0iMHB4IixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PSIxMDAlIixuLmFwcGVuZENoaWxkKHIpLHRoaXMuZnVsbExheW91dD1lLHRoaXMuaWQ9dC5pZHx8InNjZW5lIix0aGlzLmZ1bGxTY2VuZUxheW91dD1lW3RoaXMuaWRdLHRoaXMucGxvdEFyZ3M9W1tdLHt9LHt9XSx0aGlzLmF4ZXNPcHRpb25zPXkoZSxlW3RoaXMuaWRdKSx0aGlzLnNwaWtlT3B0aW9ucz14KGVbdGhpcy5pZF0pLHRoaXMuY29udGFpbmVyPXIsdGhpcy5zdGF0aWNNb2RlPSEhdC5zdGF0aWNQbG90LHRoaXMucGl4ZWxSYXRpbz10aGlzLnBpeGVsUmF0aW98fHQucGxvdEdsUGl4ZWxSYXRpb3x8Mix0aGlzLmRhdGFTY2FsZT1bMSwxLDFdLHRoaXMuY29udG91ckxldmVscz1bW10sW10sW11dLHRoaXMuY29udmVydEFubm90YXRpb25zPXUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiY29udmVydCIpLHRoaXMuZHJhd0Fubm90YXRpb25zPXUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiZHJhdyIpLHRoaXMuaW5pdGlhbGl6ZUdMUGxvdCgpfXZhciB3PV8ucHJvdG90eXBlO3cucHJlcGFyZU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD17Y2FudmFzOnRoaXMuY2FudmFzLGdsOnRoaXMuZ2wsZ2xPcHRpb25zOntwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6aCxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSxjb250YWluZXI6dGhpcy5jb250YWluZXIsYXhlczp0aGlzLmF4ZXNPcHRpb25zLHNwaWtlczp0aGlzLnNwaWtlT3B0aW9ucyxwaWNrUmFkaXVzOjEwLHNuYXBUb0RhdGE6ITAsYXV0b1NjYWxlOiEwLGF1dG9Cb3VuZHM6ITEsY2FtZXJhT2JqZWN0OnRoaXMuY2FtZXJhLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfTtpZih0aGlzLnN0YXRpY01vZGUpe2lmKCEoaXx8KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksaT1sKHtjYW52YXM6bixwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKCJlcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlciIpO3QuZ2w9aSx0LmNhbnZhcz1ufXJldHVybiB0fTt2YXIgVD0hMDt3LnRyeUNyZWF0ZVBsb3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByZXBhcmVPcHRpb25zKCksZT0hMDt0cnl7dGhpcy5nbHBsb3Q9cyh0KX1jYXRjaChyKXtpZih0aGlzLnN0YXRpY01vZGV8fCFUfHxoKWU9ITE7ZWxzZXtmLndhcm4oWyJ3ZWJnbCBzZXR1cCBmYWlsZWQgcG9zc2libHkgZHVlIHRvIiwiZmFsc2UgcHJlc2VydmVEcmF3aW5nQnVmZmVyIGNvbmZpZy4iLCJUaGUgbW9iaWxlL3RhYmxldCBkZXZpY2UgbWF5IG5vdCBiZSBkZXRlY3RlZCBieSBpcy1tb2JpbGUgbW9kdWxlLiIsIkVuYWJsaW5nIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBpbiBzZWNvbmQgYXR0ZW1wdCB0byBjcmVhdGUgd2ViZ2wgc2NlbmUuLi4iXS5qb2luKCIgIikpO3RyeXtoPXQuZ2xPcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj0hMCx0aGlzLmdscGxvdD1zKHQpfWNhdGNoKHIpe2g9dC5nbE9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPSExLGU9ITF9fX1yZXR1cm4gVD0hMSxlfSx3LmluaXRpYWxpemVHTENhbWVyYT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZnVsbFNjZW5lTGF5b3V0LmNhbWVyYSxlPSJvcnRob2dyYXBoaWMiPT09dC5wcm9qZWN0aW9uLnR5cGU7dGhpcy5jYW1lcmE9byh0aGlzLmNvbnRhaW5lcix7Y2VudGVyOlt0LmNlbnRlci54LHQuY2VudGVyLnksdC5jZW50ZXIuel0sZXllOlt0LmV5ZS54LHQuZXllLnksdC5leWUuel0sdXA6W3QudXAueCx0LnVwLnksdC51cC56XSxfb3J0aG86ZSx6b29tTWluOi4wMSx6b29tTWF4OjEwMCxtb2RlOiJvcmJpdCJ9KX0sdy5pbml0aWFsaXplR0xQbG90PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0LmluaXRpYWxpemVHTENhbWVyYSgpLCF0LnRyeUNyZWF0ZVBsb3QoKSlyZXR1cm4gbSh0KTt0LnRyYWNlcz17fSx0Lm1ha2U0dGhEaW1lbnNpb24oKTt2YXIgZT10LmdyYXBoRGl2LHI9ZS5sYXlvdXQsbj1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiB0LmlzQ2FtZXJhQ2hhbmdlZChyKSYmKGVbdC5pZCsiLmNhbWVyYSJdPXQuZ2V0Q2FtZXJhKCkpLHQuaXNBc3BlY3RDaGFuZ2VkKHIpJiYoZVt0LmlkKyIuYXNwZWN0cmF0aW8iXT10LmdscGxvdC5nZXRBc3BlY3RyYXRpbygpLCJtYW51YWwiIT09clt0LmlkXS5hc3BlY3Rtb2RlJiYodC5mdWxsU2NlbmVMYXlvdXQuYXNwZWN0bW9kZT1yW3QuaWRdLmFzcGVjdG1vZGU9ZVt0LmlkKyIuYXNwZWN0bW9kZSJdPSJtYW51YWwiKSksZX0saT1mdW5jdGlvbih0KXtpZighMSE9PXQuZnVsbFNjZW5lTGF5b3V0LmRyYWdtb2RlKXt2YXIgZT1uKCk7dC5zYXZlTGF5b3V0KHIpLHQuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixlKX19O3JldHVybiB0LmdscGxvdC5jYW52YXMmJih0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsKGZ1bmN0aW9uKCl7aSh0KX0pKSx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLChmdW5jdGlvbihyKXtpZihlLl9jb250ZXh0Ll9zY3JvbGxab29tLmdsM2Qpe2lmKHQuY2FtZXJhLl9vcnRobyl7dmFyIG49ci5kZWx0YVg+ci5kZWx0YVk/MS4xOjEvMS4xLGE9dC5nbHBsb3QuZ2V0QXNwZWN0cmF0aW8oKTt0LmdscGxvdC5zZXRBc3BlY3RyYXRpbyh7eDpuKmEueCx5Om4qYS55LHo6biphLnp9KX1pKHQpfX0pLCEhYyYme3Bhc3NpdmU6ITF9KSx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwoZnVuY3Rpb24oKXtpZighMSE9PXQuZnVsbFNjZW5lTGF5b3V0LmRyYWdtb2RlJiYwIT09dC5jYW1lcmEubW91c2VMaXN0ZW5lci5idXR0b25zKXt2YXIgZT1uKCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGUpfX0pKSx0LnN0YXRpY01vZGV8fHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IiwoZnVuY3Rpb24ocil7ZSYmZS5lbWl0JiZlLmVtaXQoInBsb3RseV93ZWJnbGNvbnRleHRsb3N0Iix7ZXZlbnQ6cixsYXllcjp0LmlkfSl9KSwhMSkpLHQuZ2xwbG90Lm9uY29udGV4dGxvc3M9ZnVuY3Rpb24oKXt0LnJlY292ZXJDb250ZXh0KCl9LHQuZ2xwbG90Lm9ucmVuZGVyPWZ1bmN0aW9uKCl7dC5yZW5kZXIoKX0sITB9LHcucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLHI9ZS5ncmFwaERpdixuPWUuc3ZnQ29udGFpbmVyLGk9ZS5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ci5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0ocik7dmFyIGE9ci5fZnVsbExheW91dC5faW52U2NhbGVYLG89ci5fZnVsbExheW91dC5faW52U2NhbGVZLHM9aS53aWR0aCphLGw9aS5oZWlnaHQqbztuLnNldEF0dHJpYnV0ZU5TKG51bGwsInZpZXdCb3giLCIwIDAgIitzKyIgIitsKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixzKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsbCksYihlKSxlLmdscGxvdC5heGVzLnVwZGF0ZShlLmF4ZXNPcHRpb25zKTtmb3IodmFyIGMsdT1PYmplY3Qua2V5cyhlLnRyYWNlcyksaD1udWxsLGc9ZS5nbHBsb3Quc2VsZWN0aW9uLG09MDttPHUubGVuZ3RoOysrbSkic2tpcCIhPT0odD1lLnRyYWNlc1t1W21dXSkuZGF0YS5ob3ZlcmluZm8mJnQuaGFuZGxlUGljayhnKSYmKGg9dCksdC5zZXRDb250b3VyTGV2ZWxzJiZ0LnNldENvbnRvdXJMZXZlbHMoKTtmdW5jdGlvbiB5KHQscil7dmFyIG49ZS5mdWxsU2NlbmVMYXlvdXRbdF07cmV0dXJuIHAudGlja1RleHQobixuLmQybChyKSwiaG92ZXIiKS50ZXh0fWlmKG51bGwhPT1oKXt2YXIgeD12KGUuZ2xwbG90LmNhbWVyYVBhcmFtcyxnLmRhdGFDb29yZGluYXRlKTt0PWguZGF0YTt2YXIgXyx3PXIuX2Z1bGxEYXRhW3QuaW5kZXhdLFQ9Zy5pbmRleCxrPXt4TGFiZWw6eSgieGF4aXMiLGcudHJhY2VDb29yZGluYXRlWzBdKSx5TGFiZWw6eSgieWF4aXMiLGcudHJhY2VDb29yZGluYXRlWzFdKSx6TGFiZWw6eSgiemF4aXMiLGcudHJhY2VDb29yZGluYXRlWzJdKX0sTT1kLmNhc3RIb3ZlcmluZm8odyxlLmZ1bGxMYXlvdXQsVCksQT0oTXx8IiIpLnNwbGl0KCIrIiksUz1NJiYiYWxsIj09PU07dy5ob3ZlcnRlbXBsYXRlfHxTfHwoLTE9PT1BLmluZGV4T2YoIngiKSYmKGsueExhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoInkiKSYmKGsueUxhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoInoiKSYmKGsuekxhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoInRleHQiKSYmKGcudGV4dExhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoIm5hbWUiKSYmKGgubmFtZT12b2lkIDApKTt2YXIgRT1bXTsiY29uZSI9PT10LnR5cGV8fCJzdHJlYW10dWJlIj09PXQudHlwZT8oay51TGFiZWw9eSgieGF4aXMiLGcudHJhY2VDb29yZGluYXRlWzNdKSwoU3x8LTEhPT1BLmluZGV4T2YoInUiKSkmJkUucHVzaCgidTogIitrLnVMYWJlbCksay52TGFiZWw9eSgieWF4aXMiLGcudHJhY2VDb29yZGluYXRlWzRdKSwoU3x8LTEhPT1BLmluZGV4T2YoInYiKSkmJkUucHVzaCgidjogIitrLnZMYWJlbCksay53TGFiZWw9eSgiemF4aXMiLGcudHJhY2VDb29yZGluYXRlWzVdKSwoU3x8LTEhPT1BLmluZGV4T2YoInciKSkmJkUucHVzaCgidzogIitrLndMYWJlbCksay5ub3JtTGFiZWw9Zy50cmFjZUNvb3JkaW5hdGVbNl0udG9QcmVjaXNpb24oMyksKFN8fC0xIT09QS5pbmRleE9mKCJub3JtIikpJiZFLnB1c2goIm5vcm06ICIray5ub3JtTGFiZWwpLCJzdHJlYW10dWJlIj09PXQudHlwZSYmKGsuZGl2ZXJnZW5jZUxhYmVsPWcudHJhY2VDb29yZGluYXRlWzddLnRvUHJlY2lzaW9uKDMpLChTfHwtMSE9PUEuaW5kZXhPZigiZGl2ZXJnZW5jZSIpKSYmRS5wdXNoKCJkaXZlcmdlbmNlOiAiK2suZGl2ZXJnZW5jZUxhYmVsKSksZy50ZXh0TGFiZWwmJkUucHVzaChnLnRleHRMYWJlbCksXz1FLmpvaW4oIjxicj4iKSk6Imlzb3N1cmZhY2UiPT09dC50eXBlfHwidm9sdW1lIj09PXQudHlwZT8oay52YWx1ZUxhYmVsPXAudGlja1RleHQoZS5fbW9ja0F4aXMsZS5fbW9ja0F4aXMuZDJsKGcudHJhY2VDb29yZGluYXRlWzNdKSwiaG92ZXIiKS50ZXh0LEUucHVzaCgidmFsdWU6ICIray52YWx1ZUxhYmVsKSxnLnRleHRMYWJlbCYmRS5wdXNoKGcudGV4dExhYmVsKSxfPUUuam9pbigiPGJyPiIpKTpfPWcudGV4dExhYmVsO3ZhciBDPXt4OmcudHJhY2VDb29yZGluYXRlWzBdLHk6Zy50cmFjZUNvb3JkaW5hdGVbMV0sejpnLnRyYWNlQ29vcmRpbmF0ZVsyXSxkYXRhOncuX2lucHV0LGZ1bGxEYXRhOncsY3VydmVOdW1iZXI6dy5pbmRleCxwb2ludE51bWJlcjpUfTtkLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShDLHcsVCksdC5fbW9kdWxlLmV2ZW50RGF0YSYmKEM9dy5fbW9kdWxlLmV2ZW50RGF0YShDLGcsdyx7fSxUKSk7dmFyIEw9e3BvaW50czpbQ119O2UuZnVsbFNjZW5lTGF5b3V0LmhvdmVybW9kZSYmZC5sb25lSG92ZXIoe3RyYWNlOncseDooLjUrLjUqeFswXS94WzNdKSpzLHk6KC41LS41KnhbMV0veFszXSkqbCx4TGFiZWw6ay54TGFiZWwseUxhYmVsOmsueUxhYmVsLHpMYWJlbDprLnpMYWJlbCx0ZXh0Ol8sbmFtZTpoLm5hbWUsY29sb3I6ZC5jYXN0SG92ZXJPcHRpb24odyxULCJiZ2NvbG9yIil8fGguY29sb3IsYm9yZGVyQ29sb3I6ZC5jYXN0SG92ZXJPcHRpb24odyxULCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6ZC5jYXN0SG92ZXJPcHRpb24odyxULCJmb250LmZhbWlseSIpLGZvbnRTaXplOmQuY2FzdEhvdmVyT3B0aW9uKHcsVCwiZm9udC5zaXplIiksZm9udENvbG9yOmQuY2FzdEhvdmVyT3B0aW9uKHcsVCwiZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6ZC5jYXN0SG92ZXJPcHRpb24odyxULCJuYW1lbGVuZ3RoIiksdGV4dEFsaWduOmQuY2FzdEhvdmVyT3B0aW9uKHcsVCwiYWxpZ24iKSxob3ZlcnRlbXBsYXRlOmYuY2FzdE9wdGlvbih3LFQsImhvdmVydGVtcGxhdGUiKSxob3ZlcnRlbXBsYXRlTGFiZWxzOmYuZXh0ZW5kRmxhdCh7fSxDLGspLGV2ZW50RGF0YTpbQ119LHtjb250YWluZXI6bixnZDpyfSksZy5idXR0b25zJiZnLmRpc3RhbmNlPDU/ci5lbWl0KCJwbG90bHlfY2xpY2siLEwpOnIuZW1pdCgicGxvdGx5X2hvdmVyIixMKSxjPUx9ZWxzZSBkLmxvbmVVbmhvdmVyKG4pLHIuZW1pdCgicGxvdGx5X3VuaG92ZXIiLGMpO2UuZHJhd0Fubm90YXRpb25zKGUpfSx3LnJlY292ZXJDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0LmdscGxvdC5kaXNwb3NlKCk7dmFyIGU9ZnVuY3Rpb24oKXt0LmdscGxvdC5nbC5pc0NvbnRleHRMb3N0KCk/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnQuaW5pdGlhbGl6ZUdMUGxvdCgpP3QucGxvdC5hcHBseSh0LHQucGxvdEFyZ3MpOmYuZXJyb3IoIkNhdGFzdHJvcGhpYyBhbmQgdW5yZWNvdmVyYWJsZSBXZWJHTCBlcnJvci4gQ29udGV4dCBsb3N0LiIpfTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9O3ZhciBrPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZnVuY3Rpb24gTSh0LGUscil7Zm9yKHZhciBuPXQuZnVsbFNjZW5lTGF5b3V0LGk9MDtpPDM7aSsrKXt2YXIgYT1rW2ldLG89YS5jaGFyQXQoMCkscz1uW2FdLGw9ZVtvXSxjPWVbbysiY2FsZW5kYXIiXSx1PWVbIl8iK28rImxlbmd0aCJdO2lmKGYuaXNBcnJheU9yVHlwZWRBcnJheShsKSlmb3IodmFyIGgscD0wO3A8KHV8fGwubGVuZ3RoKTtwKyspaWYoZi5pc0FycmF5T3JUeXBlZEFycmF5KGxbcF0pKWZvcih2YXIgZD0wO2Q8bFtwXS5sZW5ndGg7KytkKWg9cy5kMmwobFtwXVtkXSwwLGMpLCFpc05hTihoKSYmaXNGaW5pdGUoaCkmJihyWzBdW2ldPU1hdGgubWluKHJbMF1baV0saCksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGgpKTtlbHNlIGg9cy5kMmwobFtwXSwwLGMpLCFpc05hTihoKSYmaXNGaW5pdGUoaCkmJihyWzBdW2ldPU1hdGgubWluKHJbMF1baV0saCksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGgpKTtlbHNlIHJbMF1baV09TWF0aC5taW4oclswXVtpXSwwKSxyWzFdW2ldPU1hdGgubWF4KHJbMV1baV0sdS0xKX19dy5wbG90PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnBsb3RBcmdzPVt0LGUscl0sIXRoaXMuZ2xwbG90LmNvbnRleHRMb3N0KXt2YXIgbixpLGEsbyxzLGwsYz1lW3RoaXMuaWRdLHU9clt0aGlzLmlkXTt0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmZ1bGxTY2VuZUxheW91dD1jLHRoaXMuYXhlc09wdGlvbnMubWVyZ2UoZSxjKSx0aGlzLnNwaWtlT3B0aW9ucy5tZXJnZShjKSx0aGlzLnNldFZpZXdwb3J0KGMpLHRoaXMudXBkYXRlRngoYy5kcmFnbW9kZSxjLmhvdmVybW9kZSksdGhpcy5jYW1lcmEuZW5hYmxlV2hlZWw9dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkLHRoaXMuZ2xwbG90LnNldENsZWFyQ29sb3IoZyhjLmJnY29sb3IpKSx0aGlzLnNldENvbnZlcnQocyksdD9BcnJheS5pc0FycmF5KHQpfHwodD1bdF0pOnQ9W107dmFyIGY9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKGE9MDthPHQubGVuZ3RoOysrYSkhMD09PShuPXRbYV0pLnZpc2libGUmJjAhPT1uLl9sZW5ndGgmJk0odGhpcyxuLGYpOyFmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmZ1bGxTY2VuZUxheW91dCxuPXIuYW5ub3RhdGlvbnN8fFtdLGk9MDtpPDM7aSsrKWZvcih2YXIgYT1rW2ldLG89YS5jaGFyQXQoMCkscz1yW2FdLGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIGM9bltsXTtpZihjLnZpc2libGUpe3ZhciB1PXMucjJsKGNbb10pOyFpc05hTih1KSYmaXNGaW5pdGUodSkmJihlWzBdW2ldPU1hdGgubWluKGVbMF1baV0sdSksZVsxXVtpXT1NYXRoLm1heChlWzFdW2ldLHUpKX19fSh0aGlzLGYpO3ZhciBoPVsxLDEsMV07Zm9yKG89MDtvPDM7KytvKWZbMV1bb109PT1mWzBdW29dP2hbb109MTpoW29dPTEvKGZbMV1bb10tZlswXVtvXSk7Zm9yKHRoaXMuZGF0YVNjYWxlPWgsdGhpcy5jb252ZXJ0QW5ub3RhdGlvbnModGhpcyksYT0wO2E8dC5sZW5ndGg7KythKSEwPT09KG49dFthXSkudmlzaWJsZSYmMCE9PW4uX2xlbmd0aCYmKChpPXRoaXMudHJhY2VzW24udWlkXSk/aS5kYXRhLnR5cGU9PT1uLnR5cGU/aS51cGRhdGUobik6KGkuZGlzcG9zZSgpLGk9bi5fbW9kdWxlLnBsb3QodGhpcyxuKSx0aGlzLnRyYWNlc1tuLnVpZF09aSk6KGk9bi5fbW9kdWxlLnBsb3QodGhpcyxuKSx0aGlzLnRyYWNlc1tuLnVpZF09aSksaS5uYW1lPW4ubmFtZSk7dmFyIHA9T2JqZWN0LmtleXModGhpcy50cmFjZXMpO3Q6Zm9yKGE9MDthPHAubGVuZ3RoOysrYSl7Zm9yKG89MDtvPHQubGVuZ3RoOysrbylpZih0W29dLnVpZD09PXBbYV0mJiEwPT09dFtvXS52aXNpYmxlJiYwIT09dFtvXS5fbGVuZ3RoKWNvbnRpbnVlIHQ7KGk9dGhpcy50cmFjZXNbcFthXV0pLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbcFthXV19dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmFjZS5kYXRhLmluZGV4LWUuX3RyYWNlLmRhdGEuaW5kZXh9KSk7dmFyIGQsbT1bWzAsMCwwXSxbMCwwLDBdXSx2PVtdLHk9e307Zm9yKGE9MDthPDM7KythKXtpZigobD0ocz1jW2tbYV1dKS50eXBlKWluIHk/KHlbbF0uYWNjKj1oW2FdLHlbbF0uY291bnQrPTEpOnlbbF09e2FjYzpoW2FdLGNvdW50OjF9LHMuYXV0b3JhbmdlKXttWzBdW2FdPTEvMCxtWzFdW2FdPS0xLzA7dmFyIHg9dGhpcy5nbHBsb3Qub2JqZWN0cyxiPXRoaXMuZnVsbFNjZW5lTGF5b3V0LmFubm90YXRpb25zfHxbXSxfPXMuX25hbWUuY2hhckF0KDApO2ZvcihvPTA7bzx4Lmxlbmd0aDtvKyspe3ZhciB3PXhbb10sVD13LmJvdW5kcyxBPXcuX3RyYWNlLmRhdGEuX3BhZHx8MDsiRXJyb3JCYXJzIj09PXcuY29uc3RydWN0b3IubmFtZSYmcy5fbG93ZXJMb2dFcnJvckJvdW5kP21bMF1bYV09TWF0aC5taW4obVswXVthXSxzLl9sb3dlckxvZ0Vycm9yQm91bmQpOm1bMF1bYV09TWF0aC5taW4obVswXVthXSxUWzBdW2FdL2hbYV0tQSksbVsxXVthXT1NYXRoLm1heChtWzFdW2FdLFRbMV1bYV0vaFthXStBKX1mb3Iobz0wO288Yi5sZW5ndGg7bysrKXt2YXIgUz1iW29dO2lmKFMudmlzaWJsZSl7dmFyIEU9cy5yMmwoU1tfXSk7bVswXVthXT1NYXRoLm1pbihtWzBdW2FdLEUpLG1bMV1bYV09TWF0aC5tYXgobVsxXVthXSxFKX19aWYoInJhbmdlbW9kZSJpbiBzJiYidG96ZXJvIj09PXMucmFuZ2Vtb2RlJiYobVswXVthXT1NYXRoLm1pbihtWzBdW2FdLDApLG1bMV1bYV09TWF0aC5tYXgobVsxXVthXSwwKSksbVswXVthXT5tWzFdW2FdKW1bMF1bYV09LTEsbVsxXVthXT0xO2Vsc2V7dmFyIEM9bVsxXVthXS1tWzBdW2FdO21bMF1bYV0tPUMvMzIsbVsxXVthXSs9Qy8zMn1pZigicmV2ZXJzZWQiPT09cy5hdXRvcmFuZ2Upe3ZhciBMPW1bMF1bYV07bVswXVthXT1tWzFdW2FdLG1bMV1bYV09TH19ZWxzZXt2YXIgST1zLnJhbmdlO21bMF1bYV09cy5yMmwoSVswXSksbVsxXVthXT1zLnIybChJWzFdKX1tWzBdW2FdPT09bVsxXVthXSYmKG1bMF1bYV0tPTEsbVsxXVthXSs9MSksdlthXT1tWzFdW2FdLW1bMF1bYV0sdGhpcy5nbHBsb3Quc2V0Qm91bmRzKGEse21pbjptWzBdW2FdKmhbYV0sbWF4Om1bMV1bYV0qaFthXX0pfXZhciBQPWMuYXNwZWN0bW9kZTtpZigiY3ViZSI9PT1QKWQ9WzEsMSwxXTtlbHNlIGlmKCJtYW51YWwiPT09UCl7dmFyIHo9Yy5hc3BlY3RyYXRpbztkPVt6Lngsei55LHouel19ZWxzZXtpZigiYXV0byIhPT1QJiYiZGF0YSIhPT1QKXRocm93IG5ldyBFcnJvcigic2NlbmUuanMgYXNwZWN0UmF0aW8gd2FzIG5vdCBvbmUgb2YgdGhlIGVudW1lcmF0ZWQgdHlwZXMiKTt2YXIgTz1bMSwxLDFdO2ZvcihhPTA7YTwzOysrYSl7dmFyIEQ9eVtsPShzPWNba1thXV0pLnR5cGVdO09bYV09TWF0aC5wb3coRC5hY2MsMS9ELmNvdW50KS9oW2FdfWQ9ImRhdGEiPT09UHx8TWF0aC5tYXguYXBwbHkobnVsbCxPKS9NYXRoLm1pbi5hcHBseShudWxsLE8pPD00P086WzEsMSwxXX1jLmFzcGVjdHJhdGlvLng9dS5hc3BlY3RyYXRpby54PWRbMF0sYy5hc3BlY3RyYXRpby55PXUuYXNwZWN0cmF0aW8ueT1kWzFdLGMuYXNwZWN0cmF0aW8uej11LmFzcGVjdHJhdGlvLno9ZFsyXSx0aGlzLmdscGxvdC5zZXRBc3BlY3RyYXRpbyhjLmFzcGVjdHJhdGlvKSx0aGlzLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvfHwodGhpcy52aWV3SW5pdGlhbC5hc3BlY3RyYXRpbz17eDpjLmFzcGVjdHJhdGlvLngseTpjLmFzcGVjdHJhdGlvLnksejpjLmFzcGVjdHJhdGlvLnp9KSx0aGlzLnZpZXdJbml0aWFsLmFzcGVjdG1vZGV8fCh0aGlzLnZpZXdJbml0aWFsLmFzcGVjdG1vZGU9Yy5hc3BlY3Rtb2RlKTt2YXIgUj1jLmRvbWFpbnx8bnVsbCxGPWUuX3NpemV8fG51bGw7aWYoUiYmRil7dmFyIEI9dGhpcy5jb250YWluZXIuc3R5bGU7Qi5wb3NpdGlvbj0iYWJzb2x1dGUiLEIubGVmdD1GLmwrUi54WzBdKkYudysicHgiLEIudG9wPUYudCsoMS1SLnlbMV0pKkYuaCsicHgiLEIud2lkdGg9Ri53KihSLnhbMV0tUi54WzBdKSsicHgiLEIuaGVpZ2h0PUYuaCooUi55WzFdLVIueVswXSkrInB4In10aGlzLmdscGxvdC5yZWRyYXcoKX19LHcuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZ2xwbG90JiYodGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLmNhbWVyYS53aGVlbExpc3RlbmVyKSx0aGlzLmNhbWVyYT1udWxsLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmdscGxvdD1udWxsKX0sdy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5jYW1lcmEudmlldy5yZWNhbGNNYXRyaXgodGhpcy5jYW1lcmEudmlldy5sYXN0VCgpKSx7dXA6e3g6KHQ9dGhpcy5jYW1lcmEpLnVwWzBdLHk6dC51cFsxXSx6OnQudXBbMl19LGNlbnRlcjp7eDp0LmNlbnRlclswXSx5OnQuY2VudGVyWzFdLHo6dC5jZW50ZXJbMl19LGV5ZTp7eDp0LmV5ZVswXSx5OnQuZXllWzFdLHo6dC5leWVbMl19LHByb2plY3Rpb246e3R5cGU6ITA9PT10Ll9vcnRobz8ib3J0aG9ncmFwaGljIjoicGVyc3BlY3RpdmUifX19LHcuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24odCl7dmFyIGUscj10LmNhbWVyYTt0aGlzLmNhbWVyYS5sb29rQXQuYXBwbHkodGhpcyxbWyhlPXIpLmV5ZS54LGUuZXllLnksZS5leWUuel0sW2UuY2VudGVyLngsZS5jZW50ZXIueSxlLmNlbnRlci56XSxbZS51cC54LGUudXAueSxlLnVwLnpdXSksdGhpcy5nbHBsb3Quc2V0QXNwZWN0cmF0aW8odC5hc3BlY3RyYXRpbyksIm9ydGhvZ3JhcGhpYyI9PT1yLnByb2plY3Rpb24udHlwZSE9PXRoaXMuY2FtZXJhLl9vcnRobyYmKHRoaXMuZ2xwbG90LnJlZHJhdygpLHRoaXMuZ2xwbG90LmNsZWFyUkdCQSgpLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmluaXRpYWxpemVHTFBsb3QoKSl9LHcuaXNDYW1lcmFDaGFuZ2VkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0Q2FtZXJhKCkscj1mLm5lc3RlZFByb3BlcnR5KHQsdGhpcy5pZCsiLmNhbWVyYSIpLmdldCgpO2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGk9WyJ1cCIsImNlbnRlciIsImV5ZSJdLGE9WyJ4IiwieSIsInoiXTtyZXR1cm4gZVtpW3JdXSYmdFtpW3JdXVthW25dXT09PWVbaVtyXV1bYVtuXV19dmFyIGk9ITE7aWYodm9pZCAwPT09cilpPSEwO2Vsc2V7Zm9yKHZhciBhPTA7YTwzO2ErKylmb3IodmFyIG89MDtvPDM7bysrKWlmKCFuKGUscixhLG8pKXtpPSEwO2JyZWFrfSghci5wcm9qZWN0aW9ufHxlLnByb2plY3Rpb24mJmUucHJvamVjdGlvbi50eXBlIT09ci5wcm9qZWN0aW9uLnR5cGUpJiYoaT0hMCl9cmV0dXJuIGl9LHcuaXNBc3BlY3RDaGFuZ2VkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2xwbG90LmdldEFzcGVjdHJhdGlvKCkscj1mLm5lc3RlZFByb3BlcnR5KHQsdGhpcy5pZCsiLmFzcGVjdHJhdGlvIikuZ2V0KCk7cmV0dXJuIHZvaWQgMD09PXJ8fHIueCE9PWUueHx8ci55IT09ZS55fHxyLnohPT1lLnp9LHcuc2F2ZUxheW91dD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz10aGlzLmZ1bGxMYXlvdXQsbD10aGlzLmlzQ2FtZXJhQ2hhbmdlZCh0KSxjPXRoaXMuaXNBc3BlY3RDaGFuZ2VkKHQpLGg9bHx8YztpZihoKXt2YXIgcD17fTtpZihsJiYoZT10aGlzLmdldENhbWVyYSgpLG49KHI9Zi5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5jYW1lcmEiKSkuZ2V0KCkscFt0aGlzLmlkKyIuY2FtZXJhIl09biksYyYmKGk9dGhpcy5nbHBsb3QuZ2V0QXNwZWN0cmF0aW8oKSxvPShhPWYubmVzdGVkUHJvcGVydHkodCx0aGlzLmlkKyIuYXNwZWN0cmF0aW8iKSkuZ2V0KCkscFt0aGlzLmlkKyIuYXNwZWN0cmF0aW8iXT1vKSx1LmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLHQscy5fcHJlR1VJLHApLGwpci5zZXQoZSksZi5uZXN0ZWRQcm9wZXJ0eShzLHRoaXMuaWQrIi5jYW1lcmEiKS5zZXQoZSk7aWYoYylhLnNldChpKSxmLm5lc3RlZFByb3BlcnR5KHMsdGhpcy5pZCsiLmFzcGVjdHJhdGlvIikuc2V0KGkpLHRoaXMuZ2xwbG90LnJlZHJhdygpfXJldHVybiBofSx3LnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jYW1lcmE7aWYocilpZigib3JiaXQiPT09dClyLm1vZGU9Im9yYml0IixyLmtleUJpbmRpbmdNb2RlPSJyb3RhdGUiO2Vsc2UgaWYoInR1cm50YWJsZSI9PT10KXtyLnVwPVswLDAsMV0sci5tb2RlPSJ0dXJudGFibGUiLHIua2V5QmluZGluZ01vZGU9InJvdGF0ZSI7dmFyIG49dGhpcy5ncmFwaERpdixpPW4uX2Z1bGxMYXlvdXQsYT10aGlzLmZ1bGxTY2VuZUxheW91dC5jYW1lcmEsbz1hLnVwLngscz1hLnVwLnksbD1hLnVwLno7aWYobC9NYXRoLnNxcnQobypvK3MqcytsKmwpPC45OTkpe3ZhciBjPXRoaXMuaWQrIi5jYW1lcmEudXAiLGg9e3g6MCx5OjAsejoxfSxwPXt9O3BbY109aDt2YXIgZD1uLmxheW91dDt1LmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLGQsaS5fcHJlR1VJLHApLGEudXA9aCxmLm5lc3RlZFByb3BlcnR5KGQsYykuc2V0KGgpfX1lbHNlIHIua2V5QmluZGluZ01vZGU9dDt0aGlzLmZ1bGxTY2VuZUxheW91dC5ob3Zlcm1vZGU9ZX0sdy50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PSJwbmciKSx0aGlzLnN0YXRpY01vZGUmJnRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKG4pLHRoaXMuZ2xwbG90LnJlZHJhdygpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT1yLTE7bjxpOysrbiwtLWkpZm9yKHZhciBhPTA7YTxlOysrYSlmb3IodmFyIG89MDtvPDQ7KytvKXt2YXIgcz00KihlKm4rYSkrbyxsPTQqKGUqaSthKStvLGM9dFtzXTt0W3NdPXRbbF0sdFtsXT1jfX0oYSxyLGkpLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHI7KytuKWZvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBhPTQqKGUqbitpKSxvPXRbYSszXTtpZihvPjApZm9yKHZhciBzPTI1NS9vLGw9MDtsPDM7KytsKXRbYStsXT1NYXRoLm1pbihzKnRbYStsXSwyNTUpfX0oYSxyLGkpO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO28ud2lkdGg9cixvLmhlaWdodD1pO3ZhciBzLGw9by5nZXRDb250ZXh0KCIyZCIpLGM9bC5jcmVhdGVJbWFnZURhdGEocixpKTtzd2l0Y2goYy5kYXRhLnNldChhKSxsLnB1dEltYWdlRGF0YShjLDAsMCksdCl7Y2FzZSJqcGVnIjpzPW8udG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJ3ZWJwIjpzPW8udG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7ZGVmYXVsdDpzPW8udG9EYXRhVVJMKCJpbWFnZS9wbmciKX1yZXR1cm4gdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKSxzfSx3LnNldENvbnZlcnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7dCsrKXt2YXIgZT10aGlzLmZ1bGxTY2VuZUxheW91dFtrW3RdXTtwLnNldENvbnZlcnQoZSx0aGlzLmZ1bGxMYXlvdXQpLGUuc2V0U2NhbGU9Zi5ub29wfX0sdy5tYWtlNHRoRGltZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdi5fZnVsbExheW91dDt0aGlzLl9tb2NrQXhpcz17dHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIifSxwLnNldENvbnZlcnQodGhpcy5fbW9ja0F4aXMsdCl9LGUuZXhwb3J0cz1ffSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY4MywiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyI6ODAwLCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo4MDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4vbGF5b3V0L2NvbnZlcnQiOjg3NCwiLi9sYXlvdXQvc3Bpa2VzIjo4NzcsIi4vbGF5b3V0L3RpY2tfbWFya3MiOjg3OCwiLi9wcm9qZWN0Ijo4NzksImdsLXBsb3QzZCI6MzIxLCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQ0MSwid2ViZ2wtY29udGV4dCI6NjA2fV0sODgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtuPW58fHQubGVuZ3RoO2Zvcih2YXIgaT1uZXcgQXJyYXkobiksYT0wO2E8bjthKyspaVthXT1bdFthXSxlW2FdLHJbYV1dO3JldHVybiBpfX0se31dLDg4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi9hbmltYXRpb25fYXR0cmlidXRlcyIpLGE9dCgiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2F0dHJpYnV0ZXMiKSxzPXQoIi4vcGFkX2F0dHJpYnV0ZXMiKSxsPXQoIi4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9bih7ZWRpdFR5cGU6ImNhbGMifSk7Yy5mYW1pbHkuZGZsdD0nIk9wZW4gU2FucyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxjLnNpemUuZGZsdD0xMixjLmNvbG9yLmRmbHQ9YS5kZWZhdWx0TGluZSxlLmV4cG9ydHM9e2ZvbnQ6Yyx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSxmb250Om4oe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjb250YWluZXIiLHZhbHVlczpbImNvbnRhaW5lciIsInBhcGVyIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiY29udGFpbmVyIix2YWx1ZXM6WyJjb250YWluZXIiLCJwYXBlciJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImF1dG8iLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhdXRvIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0scGFkOmwocyh7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pLHt9KSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx1bmlmb3JtdGV4dDp7bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwiaGlkZSIsInNob3ciXSxkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbWluc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGF1dG9zaXplOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJub25lIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEwLGRmbHQ6NzAwLGVkaXRUeXBlOiJwbG90In0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjoxMCxkZmx0OjQ1MCxlZGl0VHlwZToicGxvdCJ9LG1hcmdpbjp7bDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0scjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0sdDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwMCxlZGl0VHlwZToicGxvdCJ9LGI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4MCxlZGl0VHlwZToicGxvdCJ9LHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxhdXRvZXhwYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxjb21wdXRlZDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHBhcGVyX2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuYmFja2dyb3VuZCxlZGl0VHlwZToicGxvdCJ9LHBsb3RfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LGF1dG90eXBlbnVtYmVyczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY29udmVydCB0eXBlcyIsInN0cmljdCJdLGRmbHQ6ImNvbnZlcnQgdHlwZXMiLGVkaXRUeXBlOiJjYWxjIn0sc2VwYXJhdG9yczp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGhpZGVzb3VyY2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGRmbHQ6YS5kZWZhdWx0cyxlZGl0VHlwZToiY2FsYyJ9LGRhdGFyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0cmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxzZWxlY3Rpb25yZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHRlbXBsYXRlOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sbW9kZWJhcjp7b3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZGZsdDoiaCIsZWRpdFR5cGU6Im1vZGViYXIifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im1vZGViYXIifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJtb2RlYmFyIn0sYWN0aXZlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibW9kZWJhciJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToibW9kZWJhciJ9LG5ld3NoYXBlOm8ubmV3c2hhcGUsYWN0aXZlc2hhcGU6by5hY3RpdmVzaGFwZSxtZXRhOnt2YWxUeXBlOiJhbnkiLGFycmF5T2s6ITAsZWRpdFR5cGU6InBsb3QifSx0cmFuc2l0aW9uOmwoe30saS50cmFuc2l0aW9uLHtlZGl0VHlwZToibm9uZSJ9KSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KX19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjQyLCIuLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2F0dHJpYnV0ZXMiOjcyNSwiLi4vbGliL2V4dGVuZCI6NzY4LCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo4MjIsIi4vZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4vcGFkX2F0dHJpYnV0ZXMiOjg5MH1dLDg4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17Im9wZW4tc3RyZWV0LW1hcCI6e2lkOiJvc20iLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LW9zbS10aWxlcyI6e3R5cGU6InJhc3RlciIsYXR0cmlidXRpb246JzxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvYWJvdXQvIiB0YXJnZXQ9Il9ibGFuayI+XHhhOSBPcGVuU3RyZWV0TWFwPC9hPicsdGlsZXM6WyJodHRwczovL2EudGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmciLCJodHRwczovL2IudGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmciXSx0aWxlU2l6ZToyNTZ9fSxsYXllcnM6W3tpZDoicGxvdGx5LW9zbS10aWxlcyIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1vc20tdGlsZXMiLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJ3aGl0ZS1iZyI6e2lkOiJ3aGl0ZS1iZyIsdmVyc2lvbjo4LHNvdXJjZXM6e30sbGF5ZXJzOlt7aWQ6IndoaXRlLWJnIix0eXBlOiJiYWNrZ3JvdW5kIixwYWludDp7ImJhY2tncm91bmQtY29sb3IiOiIjRkZGRkZGIn0sbWluem9vbTowLG1heHpvb206MjJ9XX0sImNhcnRvLXBvc2l0cm9uIjp7aWQ6ImNhcnRvLXBvc2l0cm9uIix2ZXJzaW9uOjgsc291cmNlczp7InBsb3RseS1jYXJ0by1wb3NpdHJvbiI6e3R5cGU6InJhc3RlciIsYXR0cmlidXRpb246JzxhIGhyZWY9Imh0dHBzOi8vY2FydG8uY29tLyIgdGFyZ2V0PSJfYmxhbmsiPlx4YTkgQ0FSVE88L2E+Jyx0aWxlczpbImh0dHBzOi8vY2FydG9kYi1iYXNlbWFwcy1jLmdsb2JhbC5zc2wuZmFzdGx5Lm5ldC9saWdodF9hbGwve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1jYXJ0by1wb3NpdHJvbiIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1jYXJ0by1wb3NpdHJvbiIsbWluem9vbTowLG1heHpvb206MjJ9XX0sImNhcnRvLWRhcmttYXR0ZXIiOntpZDoiY2FydG8tZGFya21hdHRlciIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktY2FydG8tZGFya21hdHRlciI6e3R5cGU6InJhc3RlciIsYXR0cmlidXRpb246JzxhIGhyZWY9Imh0dHBzOi8vY2FydG8uY29tLyIgdGFyZ2V0PSJfYmxhbmsiPlx4YTkgQ0FSVE88L2E+Jyx0aWxlczpbImh0dHBzOi8vY2FydG9kYi1iYXNlbWFwcy1jLmdsb2JhbC5zc2wuZmFzdGx5Lm5ldC9kYXJrX2FsbC97en0ve3h9L3t5fS5wbmciXSx0aWxlU2l6ZToyNTZ9fSxsYXllcnM6W3tpZDoicGxvdGx5LWNhcnRvLWRhcmttYXR0ZXIiLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktY2FydG8tZGFya21hdHRlciIsbWluem9vbTowLG1heHpvb206MjJ9XX0sInN0YW1lbi10ZXJyYWluIjp7aWQ6InN0YW1lbi10ZXJyYWluIix2ZXJzaW9uOjgsc291cmNlczp7InBsb3RseS1zdGFtZW4tdGVycmFpbiI6e3R5cGU6InJhc3RlciIsYXR0cmlidXRpb246J01hcCB0aWxlcyBieSA8YSBocmVmPSJodHRwOi8vc3RhbWVuLmNvbSI+U3RhbWVuIERlc2lnbjwvYT4sIHVuZGVyIDxhIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMCI+Q0MgQlkgMy4wPC9hPiB8IERhdGEgYnkgPGEgaHJlZj0iaHR0cDovL29wZW5zdHJlZXRtYXAub3JnIj5PcGVuU3RyZWV0TWFwPC9hPiwgdW5kZXIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9EYkw8L2E+LicsdGlsZXM6WyJodHRwczovL3N0YW1lbi10aWxlcy5hLnNzbC5mYXN0bHkubmV0L3RlcnJhaW4ve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1zdGFtZW4tdGVycmFpbiIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1zdGFtZW4tdGVycmFpbiIsbWluem9vbTowLG1heHpvb206MjJ9XX0sInN0YW1lbi10b25lciI6e2lkOiJzdGFtZW4tdG9uZXIiLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LXN0YW1lbi10b25lciI6e3R5cGU6InJhc3RlciIsYXR0cmlidXRpb246J01hcCB0aWxlcyBieSA8YSBocmVmPSJodHRwOi8vc3RhbWVuLmNvbSI+U3RhbWVuIERlc2lnbjwvYT4sIHVuZGVyIDxhIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMCI+Q0MgQlkgMy4wPC9hPiB8IERhdGEgYnkgPGEgaHJlZj0iaHR0cDovL29wZW5zdHJlZXRtYXAub3JnIj5PcGVuU3RyZWV0TWFwPC9hPiwgdW5kZXIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9EYkw8L2E+LicsdGlsZXM6WyJodHRwczovL3N0YW1lbi10aWxlcy5hLnNzbC5mYXN0bHkubmV0L3RvbmVyL3t6fS97eH0ve3l9LnBuZyJdLHRpbGVTaXplOjI1Nn19LGxheWVyczpbe2lkOiJwbG90bHktc3RhbWVuLXRvbmVyIix0eXBlOiJyYXN0ZXIiLHNvdXJjZToicGxvdGx5LXN0YW1lbi10b25lciIsbWluem9vbTowLG1heHpvb206MjJ9XX0sInN0YW1lbi13YXRlcmNvbG9yIjp7aWQ6InN0YW1lbi13YXRlcmNvbG9yIix2ZXJzaW9uOjgsc291cmNlczp7InBsb3RseS1zdGFtZW4td2F0ZXJjb2xvciI6e3R5cGU6InJhc3RlciIsYXR0cmlidXRpb246J01hcCB0aWxlcyBieSA8YSBocmVmPSJodHRwOi8vc3RhbWVuLmNvbSI+U3RhbWVuIERlc2lnbjwvYT4sIHVuZGVyIDxhIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMCI+Q0MgQlkgMy4wPC9hPiB8IERhdGEgYnkgPGEgaHJlZj0iaHR0cDovL29wZW5zdHJlZXRtYXAub3JnIj5PcGVuU3RyZWV0TWFwPC9hPiwgdW5kZXIgPGEgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMy4wIj5DQyBCWSBTQTwvYT4uJyx0aWxlczpbImh0dHBzOi8vc3RhbWVuLXRpbGVzLmEuc3NsLmZhc3RseS5uZXQvd2F0ZXJjb2xvci97en0ve3h9L3t5fS5wbmciXSx0aWxlU2l6ZToyNTZ9fSxsYXllcnM6W3tpZDoicGxvdGx5LXN0YW1lbi13YXRlcmNvbG9yIix0eXBlOiJyYXN0ZXIiLHNvdXJjZToicGxvdGx5LXN0YW1lbi13YXRlcmNvbG9yIixtaW56b29tOjAsbWF4em9vbToyMn1dfX0saT1PYmplY3Qua2V5cyhuKTtlLmV4cG9ydHM9e3JlcXVpcmVkVmVyc2lvbjoiMS4xMC4xIixzdHlsZVVybFByZWZpeDoibWFwYm94Oi8vc3R5bGVzL21hcGJveC8iLHN0eWxlVXJsU3VmZml4OiJ2OSIsc3R5bGVWYWx1ZXNNYXBib3g6WyJiYXNpYyIsInN0cmVldHMiLCJvdXRkb29ycyIsImxpZ2h0IiwiZGFyayIsInNhdGVsbGl0ZSIsInNhdGVsbGl0ZS1zdHJlZXRzIl0sc3R5bGVWYWx1ZURmbHQ6ImJhc2ljIixzdHlsZXNOb25NYXBib3g6bixzdHlsZVZhbHVlc05vbk1hcGJveDppLHRyYWNlTGF5ZXJQcmVmaXg6InBsb3RseS10cmFjZS1sYXllci0iLGxheW91dExheWVyUHJlZml4OiJwbG90bHktbGF5b3V0LWxheWVyLSIsd3JvbmdWZXJzaW9uRXJyb3JNc2c6WyJZb3VyIGN1c3RvbSBwbG90bHkuanMgYnVuZGxlIGlzIG5vdCB1c2luZyB0aGUgY29ycmVjdCBtYXBib3gtZ2wgdmVyc2lvbiIsIlBsZWFzZSBpbnN0YWxsIG1hcGJveC1nbEAxLjEwLjEuIl0uam9pbigiXG4iKSxub0FjY2Vzc1Rva2VuRXJyb3JNc2c6WyJNaXNzaW5nIE1hcGJveCBhY2Nlc3MgdG9rZW4uIiwiTWFwYm94IHRyYWNlIHR5cGUgcmVxdWlyZSBhIE1hcGJveCBhY2Nlc3MgdG9rZW4gdG8gYmUgcmVnaXN0ZXJlZC4iLCJGb3IgZXhhbXBsZToiLCIgIFBsb3RseS5wbG90KGdkLCBkYXRhLCBsYXlvdXQsIHsgbWFwYm94QWNjZXNzVG9rZW46ICdteS1hY2Nlc3MtdG9rZW4nIH0pOyIsIk1vcmUgaW5mbyBoZXJlOiBodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvZGVmaW5lLWFjY2Vzcy10b2tlbi8iXS5qb2luKCJcbiIpLG1pc3NpbmdTdHlsZUVycm9yTXNnOlsiTm8gdmFsaWQgbWFwYm94IHN0eWxlIGZvdW5kLCBwbGVhc2Ugc2V0IGBtYXBib3guc3R5bGVgIHRvIG9uZSBvZjoiLGkuam9pbigiLCAiKSwib3IgcmVnaXN0ZXIgYSBNYXBib3ggYWNjZXNzIHRva2VuIHRvIHVzZSBhIE1hcGJveC1zZXJ2ZWQgc3R5bGUuIl0uam9pbigiXG4iKSxtdWx0aXBsZVRva2Vuc0Vycm9yTXNnOlsiU2V0IG11bHRpcGxlIG1hcGJveCBhY2Nlc3MgdG9rZW4gYWNyb3NzIGRpZmZlcmVudCBtYXBib3ggc3VicGxvdCwiLCJ1c2luZyBmaXJzdCB0b2tlbiBmb3VuZCBhcyBtYXBib3gtZ2wgZG9lcyBub3QgYWxsb3cgbXVsdGlwbGVhY2Nlc3MgdG9rZW5zIG9uIHRoZSBzYW1lIHBhZ2UuIl0uam9pbigiXG4iKSxtYXBPbkVycm9yTXNnOiJNYXBib3ggZXJyb3IuIixtYXBib3hMb2dvOntwYXRoMDoibSAxMC41LDEuMjQgYyAtNS4xMSwwIC05LjI1LDQuMTUgLTkuMjUsOS4yNSAwLDUuMSA0LjE1LDkuMjUgOS4yNSw5LjI1IDUuMSwwIDkuMjUsLTQuMTUgOS4yNSwtOS4yNSAwLC01LjExIC00LjE0LC05LjI1IC05LjI1LC05LjI1IHogbSA0LjM5LDExLjUzIGMgLTEuOTMsMS45MyAtNC43OCwyLjMxIC02LjcsMi4zMSAtMC43LDAgLTEuNDEsLTAuMDUgLTIuMSwtMC4xNiAwLDAgLTEuMDIsLTUuNjQgMi4xNCwtOC44MSAwLjgzLC0wLjgzIDEuOTUsLTEuMjggMy4xMywtMS4yOCAxLjI3LDAgMi40OSwwLjUxIDMuMzksMS40MiAxLjg0LDEuODQgMS44OSw0Ljc1IDAuMTQsNi41MiB6IixwYXRoMToiTSAxMC41LC0wLjAxIEMgNC43LC0wLjAxIDAsNC43IDAsMTAuNDkgYyAwLDUuNzkgNC43LDEwLjUgMTAuNSwxMC41IDUuOCwwIDEwLjUsLTQuNyAxMC41LC0xMC41IEMgMjAuOTksNC43IDE2LjMsLTAuMDEgMTAuNSwtMC4wMSBaIG0gMCwxOS43NSBjIC01LjExLDAgLTkuMjUsLTQuMTUgLTkuMjUsLTkuMjUgMCwtNS4xIDQuMTQsLTkuMjYgOS4yNSwtOS4yNiA1LjExLDAgOS4yNSw0LjE1IDkuMjUsOS4yNSAwLDUuMTMgLTQuMTQsOS4yNiAtOS4yNSw5LjI2IHoiLHBhdGgyOiJNIDE0Ljc0LDYuMjUgQyAxMi45LDQuNDEgOS45OCw0LjM1IDguMjMsNi4xIDUuMDcsOS4yNyA2LjA5LDE0LjkxIDYuMDksMTQuOTEgYyAwLDAgNS42NCwxLjAyIDguODEsLTIuMTQgQyAxNi42NCwxMSAxNi41OSw4LjA5IDE0Ljc0LDYuMjUgWiBtIC0yLjI3LDQuMDkgLTAuOTEsMS44NyAtMC45LC0xLjg3IC0xLjg2LC0wLjkxIDEuODYsLTAuOSAwLjksLTEuODcgMC45MSwxLjg3IDEuODYsMC45IHoiLHBvbHlnb246IjExLjU2LDEyLjIxIDEwLjY2LDEwLjM0IDguOCw5LjQzIDEwLjY2LDguNTMgMTEuNTYsNi42NiAxMi40Nyw4LjUzIDE0LjMzLDkuNDMgMTIuNDcsMTAuMzQifSxzdHlsZVJ1bGVzOnttYXA6Im92ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTsiLCJtaXNzaW5nLWNzcyI6ImRpc3BsYXk6bm9uZTsiLGNhbmFyeToiYmFja2dyb3VuZC1jb2xvcjpzYWxtb247IiwiY3RybC1ib3R0b20tbGVmdCI6InBvc2l0aW9uOiBhYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDI7IGJvdHRvbTogMDsgbGVmdDogMDsiLCJjdHJsLWJvdHRvbS1yaWdodCI6InBvc2l0aW9uOiBhYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDI7IHJpZ2h0OiAwOyBib3R0b206IDA7IixjdHJsOiJjbGVhcjogYm90aDsgcG9pbnRlci1ldmVudHM6IGF1dG87IHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOyIsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3QgLm1hcGJveGdsLWN0cmwtYXR0cmliLWlubmVyIjoiZGlzcGxheTogbm9uZTsiLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0OmhvdmVyIC5tYXBib3hnbC1jdHJsLWF0dHJpYi1pbm5lciI6ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW4tdG9wOjJweCIsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6aG92ZXIiOiJwYWRkaW5nOiAycHggMjRweCAycHggNHB4OyB2aXNpYmlsaXR5OiB2aXNpYmxlOyBtYXJnaW4tdG9wOiA2cHg7IiwiY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDo6YWZ0ZXIiOidjb250ZW50OiAiIjsgY3Vyc29yOiBwb2ludGVyOyBwb3NpdGlvbjogYWJzb2x1dGU7IGJhY2tncm91bmQtaW1hZ2U6IHVybChcJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIlM0UgJTNDcGF0aCBmaWxsPSIlMjMzMzMzMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQsMTBhNiw2IDAgMSwwIDEyLDBhNiw2IDAgMSwwIC0xMiwwIE05LDdhMSwxIDAgMSwwIDIsMGExLDEgMCAxLDAgLTIsMCBNOSwxMGExLDEgMCAxLDEgMiwwbDAsM2ExLDEgMCAxLDEgLTIsMCIvJTNFICUzQy9zdmclM0VcJyk7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsgd2lkdGg6IDI0cHg7IGhlaWdodDogMjRweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyLXJhZGl1czogMTJweDsnLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0IjoibWluLWhlaWdodDogMjBweDsgcGFkZGluZzogMDsgbWFyZ2luOiAxMHB4OyBwb3NpdGlvbjogcmVsYXRpdmU7IGJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDNweCAxMnB4IDEycHggM3B4OyIsImN0cmwtYm90dG9tLXJpZ2h0ID4gLm1hcGJveGdsLWN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6OmFmdGVyIjoiYm90dG9tOiAwOyByaWdodDogMCIsImN0cmwtYm90dG9tLWxlZnQgPiAubWFwYm94Z2wtY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDo6YWZ0ZXIiOiJib3R0b206IDA7IGxlZnQ6IDAiLCJjdHJsLWJvdHRvbS1sZWZ0IC5tYXBib3hnbC1jdHJsIjoibWFyZ2luOiAwIDAgMTBweCAxMHB4OyBmbG9hdDogbGVmdDsiLCJjdHJsLWJvdHRvbS1yaWdodCAubWFwYm94Z2wtY3RybCI6Im1hcmdpbjogMCAxMHB4IDEwcHggMDsgZmxvYXQ6IHJpZ2h0OyIsImN0cmwtYXR0cmliIjoiY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43NSk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAxMnB4IiwiY3RybC1hdHRyaWIgYSI6ImNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNzUpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweCIsImN0cmwtYXR0cmliIGE6aG92ZXIiOiJjb2xvcjogaW5oZXJpdDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IiwiY3RybC1hdHRyaWIgLm1hcGJveC1pbXByb3ZlLW1hcCI6ImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW4tbGVmdDogMnB4OyIsImF0dHJpYi1lbXB0eSI6ImRpc3BsYXk6IG5vbmU7IiwiY3RybC1sb2dvIjonZGlzcGxheTpibG9jazsgd2lkdGg6IDIxcHg7IGhlaWdodDogMjFweDsgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwnZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDP3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/JTNFICUzQ3N2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDIxIDIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyMSAyMTsiIHhtbDpzcGFjZT0icHJlc2VydmUiJTNFJTNDZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMDEpIiUzRSUzQ3BhdGggZD0ibSAxMC41LDEuMjQgYyAtNS4xMSwwIC05LjI1LDQuMTUgLTkuMjUsOS4yNSAwLDUuMSA0LjE1LDkuMjUgOS4yNSw5LjI1IDUuMSwwIDkuMjUsLTQuMTUgOS4yNSwtOS4yNSAwLC01LjExIC00LjE0LC05LjI1IC05LjI1LC05LjI1IHogbSA0LjM5LDExLjUzIGMgLTEuOTMsMS45MyAtNC43OCwyLjMxIC02LjcsMi4zMSAtMC43LDAgLTEuNDEsLTAuMDUgLTIuMSwtMC4xNiAwLDAgLTEuMDIsLTUuNjQgMi4xNCwtOC44MSAwLjgzLC0wLjgzIDEuOTUsLTEuMjggMy4xMywtMS4yOCAxLjI3LDAgMi40OSwwLjUxIDMuMzksMS40MiAxLjg0LDEuODQgMS44OSw0Ljc1IDAuMTQsNi41MiB6IiBzdHlsZT0ib3BhY2l0eTowLjk7ZmlsbDolMjNmZmZmZmY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiBjbGFzcz0ic3QwIi8lM0UlM0NwYXRoIGQ9Ik0gMTAuNSwtMC4wMSBDIDQuNywtMC4wMSAwLDQuNyAwLDEwLjQ5IGMgMCw1Ljc5IDQuNywxMC41IDEwLjUsMTAuNSA1LjgsMCAxMC41LC00LjcgMTAuNSwtMTAuNSBDIDIwLjk5LDQuNyAxNi4zLC0wLjAxIDEwLjUsLTAuMDEgWiBtIDAsMTkuNzUgYyAtNS4xMSwwIC05LjI1LC00LjE1IC05LjI1LC05LjI1IDAsLTUuMSA0LjE0LC05LjI2IDkuMjUsLTkuMjYgNS4xMSwwIDkuMjUsNC4xNSA5LjI1LDkuMjUgMCw1LjEzIC00LjE0LDkuMjYgLTkuMjUsOS4yNiB6IiBzdHlsZT0ib3BhY2l0eTowLjM1O2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgY2xhc3M9InN0MSIvJTNFJTNDcGF0aCBkPSJNIDE0Ljc0LDYuMjUgQyAxMi45LDQuNDEgOS45OCw0LjM1IDguMjMsNi4xIDUuMDcsOS4yNyA2LjA5LDE0LjkxIDYuMDksMTQuOTEgYyAwLDAgNS42NCwxLjAyIDguODEsLTIuMTQgQyAxNi42NCwxMSAxNi41OSw4LjA5IDE0Ljc0LDYuMjUgWiBtIC0yLjI3LDQuMDkgLTAuOTEsMS44NyAtMC45LC0xLjg3IC0xLjg2LC0wLjkxIDEuODYsLTAuOSAwLjksLTEuODcgMC45MSwxLjg3IDEuODYsMC45IHoiIHN0eWxlPSJvcGFjaXR5OjAuMzU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiBjbGFzcz0ic3QxIi8lM0UlM0Nwb2x5Z29uIHBvaW50cz0iMTEuNTYsMTIuMjEgMTAuNjYsMTAuMzQgOC44LDkuNDMgMTAuNjYsOC41MyAxMS41Niw2LjY2IDEyLjQ3LDguNTMgMTQuMzMsOS40MyAxMi40NywxMC4zNCAiIHN0eWxlPSJvcGFjaXR5OjAuOTtmaWxsOiUyM2ZmZmZmZjtlbmFibGUtYmFja2dyb3VuZDpuZXciIGNsYXNzPSJzdDAiLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVwnKSd9fX0se31dLDg4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnNwbGl0KCIgIiksaT1yWzBdLGE9clsxXSxvPW4uaXNBcnJheU9yVHlwZWRBcnJheShlKT9uLm1lYW4oZSk6ZSxzPS41K28vMTAwLGw9MS41K28vMTAwLGM9WyIiLCIiXSx1PVswLDBdO3N3aXRjaChpKXtjYXNlInRvcCI6Y1swXT0idG9wIix1WzFdPS1sO2JyZWFrO2Nhc2UiYm90dG9tIjpjWzBdPSJib3R0b20iLHVbMV09bH1zd2l0Y2goYSl7Y2FzZSJsZWZ0IjpjWzFdPSJyaWdodCIsdVswXT0tczticmVhaztjYXNlInJpZ2h0IjpjWzFdPSJsZWZ0Iix1WzBdPXN9cmV0dXJue2FuY2hvcjpjWzBdJiZjWzFdP2Muam9pbigiLSIpOmNbMF0/Y1swXTpjWzFdP2NbMV06ImNlbnRlciIsb2Zmc2V0OnV9fX0seyIuLi8uLi9saWIiOjc3OH1dLDg4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtYXBib3gtZ2wiKSxpPXQoIi4uLy4uL2xpYiIpLGE9aS5zdHJUcmFuc2xhdGUsbz1pLnN0clNjYWxlLHM9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGM9dCgiZDMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuL21hcGJveCIpLHA9ci5jb25zdGFudHM9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBkKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKC0xIT09cC5zdHlsZVZhbHVlc01hcGJveC5pbmRleE9mKHQpfHwwPT09dC5pbmRleE9mKCJtYXBib3g6Ly8iKSl9ci5uYW1lPSJtYXBib3giLHIuYXR0cj0ic3VicGxvdCIsci5pZFJvb3Q9Im1hcGJveCIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWkuY291bnRlclJlZ2V4KCJtYXBib3giKSxyLmF0dHJpYnV0ZXM9e3N1YnBsb3Q6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoibWFwYm94IixlZGl0VHlwZToiY2FsYyJ9fSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90cy5tYXBib3g7aWYobi52ZXJzaW9uIT09cC5yZXF1aXJlZFZlcnNpb24pdGhyb3cgbmV3IEVycm9yKHAud3JvbmdWZXJzaW9uRXJyb3JNc2cpO3ZhciBvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtpZigiIj09PXQuX2NvbnRleHQubWFwYm94QWNjZXNzVG9rZW4pcmV0dXJuIiI7Zm9yKHZhciBuPVtdLGE9W10sbz0hMSxzPSExLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9cltlW2xdXSx1PWMuYWNjZXNzdG9rZW47ZChjLnN0eWxlKSYmKHU/aS5wdXNoVW5pcXVlKG4sdSk6KGQoYy5faW5wdXQuc3R5bGUpJiYoaS5lcnJvcigiVXNlcyBNYXBib3ggbWFwIHN0eWxlLCBidXQgZGlkIG5vdCBzZXQgYW4gYWNjZXNzIHRva2VuLiIpLG89ITApLHM9ITApKSx1JiZpLnB1c2hVbmlxdWUoYSx1KX1pZihzKXt2YXIgZj1vP3Aubm9BY2Nlc3NUb2tlbkVycm9yTXNnOnAubWlzc2luZ1N0eWxlRXJyb3JNc2c7dGhyb3cgaS5lcnJvcihmKSxuZXcgRXJyb3IoZil9cmV0dXJuIG4ubGVuZ3RoPyhuLmxlbmd0aD4xJiZpLndhcm4ocC5tdWx0aXBsZVRva2Vuc0Vycm9yTXNnKSxuWzBdKTooYS5sZW5ndGgmJmkubG9nKFsiTGlzdGVkIG1hcGJveCBhY2Nlc3MgdG9rZW4ocykiLGEuam9pbigiLCIpLCJidXQgZGlkIG5vdCB1c2UgYSBNYXBib3ggbWFwIHN0eWxlLCBpZ25vcmluZyB0b2tlbihzKS4iXS5qb2luKCIgIikpLCIiKX0odCxhKTtuLmFjY2Vzc1Rva2VuPW87Zm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBjPWFbbF0sdT1zKHIsIm1hcGJveCIsYyksZj1lW2NdLGc9Zi5fc3VicGxvdDtnfHwoZz1uZXcgaCh0LGMpLGVbY10uX3N1YnBsb3Q9ZyksZy52aWV3SW5pdGlhbHx8KGcudmlld0luaXRpYWw9e2NlbnRlcjppLmV4dGVuZEZsYXQoe30sZi5jZW50ZXIpLHpvb206Zi56b29tLGJlYXJpbmc6Zi5iZWFyaW5nLHBpdGNoOmYucGl0Y2h9KSxnLnBsb3QodSxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLm1hcGJveHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdOyFlW29dJiZuW29dLl9zdWJwbG90JiZuW29dLl9zdWJwbG90LmRlc3Ryb3koKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj1lLl9zaXplLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9ZVtyW2ldXSxoPXMuZG9tYWluLGQ9cy5fc3VicGxvdC50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLCJ4bGluazpocmVmIjpkLHg6bi5sK24udypoLnhbMF0seTpuLnQrbi5oKigxLWgueVsxXSksd2lkdGg6bi53KihoLnhbMV0taC54WzBdKSxoZWlnaHQ6bi5oKihoLnlbMV0taC55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pO3ZhciBnPWMuc2VsZWN0KHMuX3N1YnBsb3QuZGl2KTtpZighKG51bGw9PT1nLnNlbGVjdCgiLm1hcGJveGdsLWN0cmwtbG9nbyIpLm5vZGUoKS5vZmZzZXRQYXJlbnQpKXt2YXIgbT1lLl9nbGltYWdlcy5hcHBlbmQoImciKTttLmF0dHIoInRyYW5zZm9ybSIsYShuLmwrbi53KmgueFswXSsxMCxuLnQrbi5oKigxLWgueVswXSktMzEpKSxtLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHAubWFwYm94TG9nby5wYXRoMCkuc3R5bGUoe29wYWNpdHk6LjksZmlsbDoiI2ZmZmZmZiIsImVuYWJsZS1iYWNrZ3JvdW5kIjoibmV3In0pLG0uYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscC5tYXBib3hMb2dvLnBhdGgxKS5zdHlsZSgib3BhY2l0eSIsLjM1KS5zdHlsZSgiZW5hYmxlLWJhY2tncm91bmQiLCJuZXciKSxtLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHAubWFwYm94TG9nby5wYXRoMikuc3R5bGUoIm9wYWNpdHkiLC4zNSkuc3R5bGUoImVuYWJsZS1iYWNrZ3JvdW5kIiwibmV3IiksbS5hcHBlbmQoInBvbHlnb24iKS5hdHRyKCJwb2ludHMiLHAubWFwYm94TG9nby5wb2x5Z29uKS5zdHlsZSh7b3BhY2l0eTouOSxmaWxsOiIjZmZmZmZmIiwiZW5hYmxlLWJhY2tncm91bmQiOiJuZXcifSl9dmFyIHY9Zy5zZWxlY3QoIi5tYXBib3hnbC1jdHJsLWF0dHJpYiIpLnRleHQoKS5yZXBsYWNlKCJJbXByb3ZlIHRoaXMgbWFwIiwiIikseT1lLl9nbGltYWdlcy5hcHBlbmQoImciKSx4PXkuYXBwZW5kKCJ0ZXh0Iik7eC50ZXh0KHYpLmNsYXNzZWQoInN0YXRpYy1hdHRyaWJ1dGlvbiIsITApLmF0dHIoeyJmb250LXNpemUiOjEyLCJmb250LWZhbWlseSI6IkFyaWFsIixjb2xvcjoicmdiYSgwLCAwLCAwLCAwLjc1KSIsInRleHQtYW5jaG9yIjoiZW5kIiwiZGF0YS11bmZvcm1hdHRlZCI6dn0pO3ZhciBiPXUuYkJveCh4Lm5vZGUoKSksXz1uLncqKGgueFsxXS1oLnhbMF0pO2lmKGIud2lkdGg+Xy8yKXt2YXIgdz12LnNwbGl0KCJ8Iikuam9pbigiPGJyPiIpO3gudGV4dCh3KS5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIix3KS5jYWxsKGYuY29udmVydFRvVHNwYW5zLHQpLGI9dS5iQm94KHgubm9kZSgpKX14LmF0dHIoInRyYW5zZm9ybSIsYSgtMyw4LWIuaGVpZ2h0KSkseS5pbnNlcnQoInJlY3QiLCIuc3RhdGljLWF0dHJpYnV0aW9uIikuYXR0cih7eDotYi53aWR0aC02LHk6LWIuaGVpZ2h0LTMsd2lkdGg6Yi53aWR0aCs2LGhlaWdodDpiLmhlaWdodCszLGZpbGw6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSkifSk7dmFyIFQ9MTtiLndpZHRoKzY+XyYmKFQ9Xy8oYi53aWR0aCs2KSk7dmFyIGs9W24ubCtuLncqaC54WzFdLG4udCtuLmgqKDEtaC55WzBdKV07eS5hdHRyKCJ0cmFuc2Zvcm0iLGEoa1swXSxrWzFdKStvKFQpKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj0wO248ci5sZW5ndGg7bisrKXtlW3Jbbl1dLl9zdWJwbG90LnVwZGF0ZUZ4KGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTQsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMywiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjg2NSwiLi9jb25zdGFudHMiOjg4MywiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODg3LCIuL2xheW91dF9kZWZhdWx0cyI6ODg4LCIuL21hcGJveCI6ODg5LGQzOjE2OSwibWFwYm94LWdsIjo0NzN9XSw4ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKS5zYW5pdGl6ZUhUTUwsYT10KCIuL2NvbnZlcnRfdGV4dF9vcHRzIiksbz10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIHModCxlKXt0aGlzLnN1YnBsb3Q9dCx0aGlzLnVpZD10LnVpZCsiLSIrZSx0aGlzLmluZGV4PWUsdGhpcy5pZFNvdXJjZT0ic291cmNlLSIrdGhpcy51aWQsdGhpcy5pZExheWVyPW8ubGF5b3V0TGF5ZXJQcmVmaXgrdGhpcy51aWQsdGhpcy5zb3VyY2VUeXBlPW51bGwsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLmxheWVyVHlwZT1udWxsLHRoaXMuYmVsb3c9bnVsbCx0aGlzLnZpc2libGU9ITF9dmFyIGw9cy5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0KXtpZighdC52aXNpYmxlKXJldHVybiExO3ZhciBlPXQuc291cmNlO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKCJzdHJpbmciIT10eXBlb2YgZVtyXXx8MD09PWVbcl0ubGVuZ3RoKXJldHVybiExO3JldHVybiEwfXJldHVybiBuLmlzUGxhaW5PYmplY3QoZSl8fCJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MH1mdW5jdGlvbiB1KHQpe3ZhciBlPXt9LHI9e307c3dpdGNoKHQudHlwZSl7Y2FzZSJjaXJjbGUiOm4uZXh0ZW5kRmxhdChyLHsiY2lyY2xlLXJhZGl1cyI6dC5jaXJjbGUucmFkaXVzLCJjaXJjbGUtY29sb3IiOnQuY29sb3IsImNpcmNsZS1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlImxpbmUiOm4uZXh0ZW5kRmxhdChyLHsibGluZS13aWR0aCI6dC5saW5lLndpZHRoLCJsaW5lLWNvbG9yIjp0LmNvbG9yLCJsaW5lLW9wYWNpdHkiOnQub3BhY2l0eSwibGluZS1kYXNoYXJyYXkiOnQubGluZS5kYXNofSk7YnJlYWs7Y2FzZSJmaWxsIjpuLmV4dGVuZEZsYXQocix7ImZpbGwtY29sb3IiOnQuY29sb3IsImZpbGwtb3V0bGluZS1jb2xvciI6dC5maWxsLm91dGxpbmVjb2xvciwiZmlsbC1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlInN5bWJvbCI6dmFyIGk9dC5zeW1ib2wsbz1hKGkudGV4dHBvc2l0aW9uLGkuaWNvbnNpemUpO24uZXh0ZW5kRmxhdChlLHsiaWNvbi1pbWFnZSI6aS5pY29uKyItMTUiLCJpY29uLXNpemUiOmkuaWNvbnNpemUvMTAsInRleHQtZmllbGQiOmkudGV4dCwidGV4dC1zaXplIjppLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjpvLmFuY2hvciwidGV4dC1vZmZzZXQiOm8ub2Zmc2V0LCJzeW1ib2wtcGxhY2VtZW50IjppLnBsYWNlbWVudH0pLG4uZXh0ZW5kRmxhdChyLHsiaWNvbi1jb2xvciI6dC5jb2xvciwidGV4dC1jb2xvciI6aS50ZXh0Zm9udC5jb2xvciwidGV4dC1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlInJhc3RlciI6bi5leHRlbmRGbGF0KHIseyJyYXN0ZXItZmFkZS1kdXJhdGlvbiI6MCwicmFzdGVyLW9wYWNpdHkiOnQub3BhY2l0eX0pfXJldHVybntsYXlvdXQ6ZSxwYWludDpyfX1sLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLnZpc2libGU/dGhpcy5uZWVkc05ld0ltYWdlKHQpP3RoaXMudXBkYXRlSW1hZ2UodCk6dGhpcy5uZWVkc05ld1NvdXJjZSh0KT8odGhpcy5yZW1vdmVMYXllcigpLHRoaXMudXBkYXRlU291cmNlKHQpLHRoaXMudXBkYXRlTGF5ZXIodCkpOnRoaXMubmVlZHNOZXdMYXllcih0KT90aGlzLnVwZGF0ZUxheWVyKHQpOnRoaXMudXBkYXRlU3R5bGUodCk6KHRoaXMudXBkYXRlU291cmNlKHQpLHRoaXMudXBkYXRlTGF5ZXIodCkpLHRoaXMudmlzaWJsZT1jKHQpfSxsLm5lZWRzTmV3SW1hZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3VicGxvdC5tYXAuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpJiYiaW1hZ2UiPT09dGhpcy5zb3VyY2VUeXBlJiYiaW1hZ2UiPT09dC5zb3VyY2V0eXBlJiYodGhpcy5zb3VyY2UhPT10LnNvdXJjZXx8SlNPTi5zdHJpbmdpZnkodGhpcy5jb29yZGluYXRlcykhPT1KU09OLnN0cmluZ2lmeSh0LmNvb3JkaW5hdGVzKSl9LGwubmVlZHNOZXdTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlVHlwZSE9PXQuc291cmNldHlwZXx8SlNPTi5zdHJpbmdpZnkodGhpcy5zb3VyY2UpIT09SlNPTi5zdHJpbmdpZnkodC5zb3VyY2UpfHx0aGlzLmxheWVyVHlwZSE9PXQudHlwZX0sbC5uZWVkc05ld0xheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyVHlwZSE9PXQudHlwZXx8dGhpcy5iZWxvdyE9PXRoaXMuc3VicGxvdC5iZWxvd0xvb2t1cFsibGF5b3V0LSIrdGhpcy5pbmRleF19LGwubG9va3VwQmVsb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdWJwbG90LmJlbG93TG9va3VwWyJsYXlvdXQtIit0aGlzLmluZGV4XX0sbC51cGRhdGVJbWFnZT1mdW5jdGlvbih0KXt0aGlzLnN1YnBsb3QubWFwLmdldFNvdXJjZSh0aGlzLmlkU291cmNlKS51cGRhdGVJbWFnZSh7dXJsOnQuc291cmNlLGNvb3JkaW5hdGVzOnQuY29vcmRpbmF0ZXN9KTt2YXIgZT10aGlzLmZpbmRGb2xsb3dpbmdNYXBib3hMYXllcklkKHRoaXMubG9va3VwQmVsb3coKSk7bnVsbCE9PWUmJnRoaXMuc3VicGxvdC5tYXAubW92ZUxheWVyKHRoaXMuaWRMYXllcixlKX0sbC51cGRhdGVTb3VyY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdWJwbG90Lm1hcDtpZihlLmdldFNvdXJjZSh0aGlzLmlkU291cmNlKSYmZS5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZSksdGhpcy5zb3VyY2VUeXBlPXQuc291cmNldHlwZSx0aGlzLnNvdXJjZT10LnNvdXJjZSxjKHQpKXt2YXIgcj1mdW5jdGlvbih0KXt2YXIgZSxyPXQuc291cmNldHlwZSxuPXQuc291cmNlLGE9e3R5cGU6cn07Imdlb2pzb24iPT09cj9lPSJkYXRhIjoidmVjdG9yIj09PXI/ZT0ic3RyaW5nIj09dHlwZW9mIG4/InVybCI6InRpbGVzIjoicmFzdGVyIj09PXI/KGU9InRpbGVzIixhLnRpbGVTaXplPTI1Nik6ImltYWdlIj09PXImJihlPSJ1cmwiLGEuY29vcmRpbmF0ZXM9dC5jb29yZGluYXRlcyk7YVtlXT1uLHQuc291cmNlYXR0cmlidXRpb24mJihhLmF0dHJpYnV0aW9uPWkodC5zb3VyY2VhdHRyaWJ1dGlvbikpO3JldHVybiBhfSh0KTtlLmFkZFNvdXJjZSh0aGlzLmlkU291cmNlLHIpfX0sbC5maW5kRm9sbG93aW5nTWFwYm94TGF5ZXJJZD1mdW5jdGlvbih0KXtpZigidHJhY2VzIj09PXQpZm9yKHZhciBlPXRoaXMuc3VicGxvdC5nZXRNYXBMYXllcnMoKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0uaWQ7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYwPT09bi5pbmRleE9mKG8udHJhY2VMYXllclByZWZpeCkpe3Q9bjticmVha319cmV0dXJuIHR9LGwudXBkYXRlTGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdWJwbG90LHI9dSh0KSxuPXRoaXMubG9va3VwQmVsb3coKSxpPXRoaXMuZmluZEZvbGxvd2luZ01hcGJveExheWVySWQobik7dGhpcy5yZW1vdmVMYXllcigpLGModCkmJmUuYWRkTGF5ZXIoe2lkOnRoaXMuaWRMYXllcixzb3VyY2U6dGhpcy5pZFNvdXJjZSwic291cmNlLWxheWVyIjp0LnNvdXJjZWxheWVyfHwiIix0eXBlOnQudHlwZSxtaW56b29tOnQubWluem9vbSxtYXh6b29tOnQubWF4em9vbSxsYXlvdXQ6ci5sYXlvdXQscGFpbnQ6ci5wYWludH0saSksdGhpcy5sYXllclR5cGU9dC50eXBlLHRoaXMuYmVsb3c9bn0sbC51cGRhdGVTdHlsZT1mdW5jdGlvbih0KXtpZihjKHQpKXt2YXIgZT11KHQpO3RoaXMuc3VicGxvdC5zZXRPcHRpb25zKHRoaXMuaWRMYXllciwic2V0TGF5b3V0UHJvcGVydHkiLGUubGF5b3V0KSx0aGlzLnN1YnBsb3Quc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsInNldFBhaW50UHJvcGVydHkiLGUucGFpbnQpfX0sbC5yZW1vdmVMYXllcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3VicGxvdC5tYXA7dC5nZXRMYXllcih0aGlzLmlkTGF5ZXIpJiZ0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllcil9LGwuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3VicGxvdC5tYXA7dC5nZXRMYXllcih0aGlzLmlkTGF5ZXIpJiZ0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllciksdC5nZXRTb3VyY2UodGhpcy5pZFNvdXJjZSkmJnQucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2UpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBzKHQsZSk7cmV0dXJuIG4udXBkYXRlKHIpLG59fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMywiLi9jb25zdGFudHMiOjg4MywiLi9jb252ZXJ0X3RleHRfb3B0cyI6ODg0fV0sODg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLmRlZmF1bHRMaW5lLGE9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyIpLnRleHRwb3NpdGlvbixsPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxjPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSx1PXQoIi4vY29uc3RhbnRzIiksZj1vKHt9KTtmLmZhbWlseS5kZmx0PSJPcGVuIFNhbnMgUmVndWxhciwgQXJpYWwgVW5pY29kZSBNUyBSZWd1bGFyIiwoZS5leHBvcnRzPWwoe19hcnJheUF0dHJSZWdleHBzOltuLmNvdW50ZXJSZWdleCgibWFwYm94IiwiLmxheWVycyIsITApXSxkb21haW46YSh7bmFtZToibWFwYm94In0pLGFjY2Vzc3Rva2VuOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwfSxzdHlsZTp7dmFsVHlwZToiYW55Iix2YWx1ZXM6dS5zdHlsZVZhbHVlc01hcGJveC5jb25jYXQodS5zdHlsZVZhbHVlc05vbk1hcGJveCksZGZsdDp1LnN0eWxlVmFsdWVEZmx0fSxjZW50ZXI6e2xvbjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGxhdDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9fSx6b29tOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MX0sYmVhcmluZzp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LHBpdGNoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sbGF5ZXJzOmMoImxheWVyIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc291cmNldHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ2VvanNvbiIsInZlY3RvciIsInJhc3RlciIsImltYWdlIl0sZGZsdDoiZ2VvanNvbiJ9LHNvdXJjZTp7dmFsVHlwZToiYW55In0sc291cmNlbGF5ZXI6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sc291cmNlYXR0cmlidXRpb246e3ZhbFR5cGU6InN0cmluZyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNpcmNsZSIsImxpbmUiLCJmaWxsIiwic3ltYm9sIiwicmFzdGVyIl0sZGZsdDoiY2lyY2xlIn0sY29vcmRpbmF0ZXM6e3ZhbFR5cGU6ImFueSJ9LGJlbG93Ont2YWxUeXBlOiJzdHJpbmcifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LG1pbnpvb206e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjI0LGRmbHQ6MH0sbWF4em9vbTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MjQsZGZsdDoyNH0sY2lyY2xlOntyYWRpdXM6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxNX19LGxpbmU6e3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6Mn0sZGFzaDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9fSxmaWxsOntvdXRsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Oml9fSxzeW1ib2w6e2ljb246e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoibWFya2VyIn0saWNvbnNpemU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMH0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxwbGFjZW1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBvaW50IiwibGluZSIsImxpbmUtY2VudGVyIl0sZGZsdDoicG9pbnQifSx0ZXh0Zm9udDpmLHRleHRwb3NpdGlvbjpuLmV4dGVuZEZsYXQoe30scyx7YXJyYXlPazohMX0pfX0pfSwicGxvdCIsImZyb20tcm9vdCIpKS51aXJldmlzaW9uPXt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODEwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExODcsIi4uL2RvbWFpbiI6ODU1LCIuLi9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi9jb25zdGFudHMiOjg4M31dLDg4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxhPXQoIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIsbil7cigiYWNjZXNzdG9rZW4iLG4uYWNjZXNzVG9rZW4pLHIoInN0eWxlIikscigiY2VudGVyLmxvbiIpLHIoImNlbnRlci5sYXQiKSxyKCJ6b29tIikscigiYmVhcmluZyIpLHIoInBpdGNoIiksYSh0LGUse25hbWU6ImxheWVycyIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KSxlLl9pbnB1dD10fWZ1bmN0aW9uIGwodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLmxheWVycyxyLGkpfWlmKHIoInZpc2libGUiKSl7dmFyIGksYT1yKCJzb3VyY2V0eXBlIikscz0icmFzdGVyIj09PWF8fCJpbWFnZSI9PT1hO3IoInNvdXJjZSIpLHIoInNvdXJjZWF0dHJpYnV0aW9uIiksInZlY3RvciI9PT1hJiZyKCJzb3VyY2VsYXllciIpLCJpbWFnZSI9PT1hJiZyKCJjb29yZGluYXRlcyIpLHMmJihpPSJyYXN0ZXIiKTt2YXIgbD1yKCJ0eXBlIixpKTtzJiYicmFzdGVyIiE9PWwmJihsPWUudHlwZT0icmFzdGVyIixuLmxvZygiU291cmNlIHR5cGVzICpyYXN0ZXIqIGFuZCAqaW1hZ2UqIG11c3QgZHJhd24gKnJhc3RlciogbGF5ZXIgdHlwZS4iKSkscigiYmVsb3ciKSxyKCJjb2xvciIpLHIoIm9wYWNpdHkiKSxyKCJtaW56b29tIikscigibWF4em9vbSIpLCJjaXJjbGUiPT09bCYmcigiY2lyY2xlLnJhZGl1cyIpLCJsaW5lIj09PWwmJihyKCJsaW5lLndpZHRoIikscigibGluZS5kYXNoIikpLCJmaWxsIj09PWwmJnIoImZpbGwub3V0bGluZWNvbG9yIiksInN5bWJvbCI9PT1sJiYocigic3ltYm9sLmljb24iKSxyKCJzeW1ib2wuaWNvbnNpemUiKSxyKCJzeW1ib2wudGV4dCIpLG4uY29lcmNlRm9udChyLCJzeW1ib2wudGV4dGZvbnQiKSxyKCJzeW1ib2wudGV4dHBvc2l0aW9uIikscigic3ltYm9sLnBsYWNlbWVudCIpKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpKHQsZSxyLHt0eXBlOiJtYXBib3giLGF0dHJpYnV0ZXM6byxoYW5kbGVEZWZhdWx0czpzLHBhcnRpdGlvbjoieSIsYWNjZXNzVG9rZW46ZS5fbWFwYm94QWNjZXNzVG9rZW59KX19LHsiLi4vLi4vbGliIjo3NzgsIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIzLCIuLi9zdWJwbG90X2RlZmF1bHRzIjo5MDUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg4N31dLDg4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtYXBib3gtZ2wiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uL2NhcnRlc2lhbi9heGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksdT10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKSxmPXUucmVjdE1vZGUsaD11LmRyYXdNb2RlLHA9dS5zZWxlY3RNb2RlLGQ9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QsZz10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikuY2xlYXJTZWxlY3QsbT10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikuY2xlYXJTZWxlY3Rpb25zQ2FjaGUsdj10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Iikuc2VsZWN0T25DbGljayx5PXQoIi4vY29uc3RhbnRzIikseD10KCIuL2xheWVycyIpO2Z1bmN0aW9uIGIodCxlKXt0aGlzLmlkPWUsdGhpcy5nZD10O3ZhciByPXQuX2Z1bGxMYXlvdXQsbj10Ll9jb250ZXh0O3RoaXMuY29udGFpbmVyPXIuX2dsY29udGFpbmVyLm5vZGUoKSx0aGlzLmlzU3RhdGljPW4uc3RhdGljUGxvdCx0aGlzLnVpZD1yLl91aWQrIi0iK3RoaXMuaWQsdGhpcy5kaXY9bnVsbCx0aGlzLnhheGlzPW51bGwsdGhpcy55YXhpcz1udWxsLHRoaXMuY3JlYXRlRnJhbWV3b3JrKHIpLHRoaXMubWFwPW51bGwsdGhpcy5hY2Nlc3NUb2tlbj1udWxsLHRoaXMuc3R5bGVPYmo9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVyTGlzdD1bXSx0aGlzLmJlbG93TG9va3VwPXt9LHRoaXMuZHJhZ2dpbmc9ITEsdGhpcy53aGVlbGluZz0hMX12YXIgXz1iLnByb3RvdHlwZTtfLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcyxhPWVbaS5pZF07aS5tYXAmJmEuYWNjZXNzdG9rZW4hPT1pLmFjY2Vzc1Rva2VuJiYoaS5tYXAucmVtb3ZlKCksaS5tYXA9bnVsbCxpLnN0eWxlT2JqPW51bGwsaS50cmFjZUhhc2g9e30saS5sYXllckxpc3Q9W10pLG49aS5tYXA/bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7aS51cGRhdGVNYXAodCxlLHIsbil9KSk6bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7aS5jcmVhdGVNYXAodCxlLHIsbil9KSksci5wdXNoKG4pfSxfLmNyZWF0ZU1hcD1mdW5jdGlvbih0LGUscixpKXt2YXIgbz10aGlzLHM9ZVtvLmlkXSxsPW8uc3R5bGVPYmo9VChzLnN0eWxlKTtvLmFjY2Vzc1Rva2VuPXMuYWNjZXNzdG9rZW47dmFyIGM9by5tYXA9bmV3IG4uTWFwKHtjb250YWluZXI6by5kaXYsc3R5bGU6bC5zdHlsZSxjZW50ZXI6TShzLmNlbnRlciksem9vbTpzLnpvb20sYmVhcmluZzpzLmJlYXJpbmcscGl0Y2g6cy5waXRjaCxpbnRlcmFjdGl2ZTohby5pc1N0YXRpYyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6by5pc1N0YXRpYyxkb3VibGVDbGlja1pvb206ITEsYm94Wm9vbTohMSxhdHRyaWJ1dGlvbkNvbnRyb2w6ITF9KS5hZGRDb250cm9sKG5ldyBuLkF0dHJpYnV0aW9uQ29udHJvbCh7Y29tcGFjdDohMH0pKTtjLl9jYW52YXMuc3R5bGUubGVmdD0iMHB4IixjLl9jYW52YXMuc3R5bGUudG9wPSIwcHgiLG8ucmVqZWN0T25FcnJvcihpKSxvLmlzU3RhdGljfHxvLmluaXRGeCh0LGUpO3ZhciB1PVtdO3UucHVzaChuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7Yy5vbmNlKCJsb2FkIix0KX0pKSksdT11LmNvbmNhdChhLmZldGNoVHJhY2VHZW9EYXRhKHQpKSxQcm9taXNlLmFsbCh1KS50aGVuKChmdW5jdGlvbigpe28uZmlsbEJlbG93TG9va3VwKHQsZSksby51cGRhdGVEYXRhKHQpLG8udXBkYXRlTGF5b3V0KGUpLG8ucmVzb2x2ZU9uUmVuZGVyKHIpfSkpLmNhdGNoKGkpfSxfLnVwZGF0ZU1hcD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLG89aS5tYXAscz1lW3RoaXMuaWRdO2kucmVqZWN0T25FcnJvcihuKTt2YXIgbD1bXSxjPVQocy5zdHlsZSk7SlNPTi5zdHJpbmdpZnkoaS5zdHlsZU9iaikhPT1KU09OLnN0cmluZ2lmeShjKSYmKGkuc3R5bGVPYmo9YyxvLnNldFN0eWxlKGMuc3R5bGUpLGkudHJhY2VIYXNoPXt9LGwucHVzaChuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7by5vbmNlKCJzdHlsZWRhdGEiLHQpfSkpKSksbD1sLmNvbmNhdChhLmZldGNoVHJhY2VHZW9EYXRhKHQpKSxQcm9taXNlLmFsbChsKS50aGVuKChmdW5jdGlvbigpe2kuZmlsbEJlbG93TG9va3VwKHQsZSksaS51cGRhdGVEYXRhKHQpLGkudXBkYXRlTGF5b3V0KGUpLGkucmVzb2x2ZU9uUmVuZGVyKHIpfSkpLmNhdGNoKG4pfSxfLmZpbGxCZWxvd0xvb2t1cD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1lW3RoaXMuaWRdLmxheWVycyxhPXRoaXMuYmVsb3dMb29rdXA9e30sbz0hMTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgcz10W3JdWzBdLnRyYWNlLGw9cy5fbW9kdWxlOyJzdHJpbmciPT10eXBlb2Ygcy5iZWxvdz9uPXMuYmVsb3c6bC5nZXRCZWxvdyYmKG49bC5nZXRCZWxvdyhzLHRoaXMpKSwiIj09PW4mJihvPSEwKSxhWyJ0cmFjZS0iK3MudWlkXT1ufHwiIn1mb3Iocj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgYz1pW3JdO249InN0cmluZyI9PXR5cGVvZiBjLmJlbG93P2MuYmVsb3c6bz8idHJhY2VzIjoiIixhWyJsYXlvdXQtIityXT1ufXZhciB1LGYsaD17fTtmb3IodSBpbiBhKWhbbj1hW3VdXT9oW25dLnB1c2godSk6aFtuXT1bdV07Zm9yKG4gaW4gaCl7dmFyIHA9aFtuXTtpZihwLmxlbmd0aD4xKWZvcihyPTA7cjxwLmxlbmd0aDtyKyspMD09PSh1PXBbcl0pLmluZGV4T2YoInRyYWNlLSIpPyhmPXUuc3BsaXQoInRyYWNlLSIpWzFdLHRoaXMudHJhY2VIYXNoW2ZdJiYodGhpcy50cmFjZUhhc2hbZl0uYmVsb3c9bnVsbCkpOjA9PT11LmluZGV4T2YoImxheW91dC0iKSYmKGY9dS5zcGxpdCgibGF5b3V0LSIpWzFdLHRoaXMubGF5ZXJMaXN0W2ZdJiYodGhpcy5sYXllckxpc3RbZl0uYmVsb3c9bnVsbCkpfX07dmFyIHc9e2Nob3JvcGxldGhtYXBib3g6MCxkZW5zaXR5bWFwYm94OjEsc2NhdHRlcm1hcGJveDoyfTtmdW5jdGlvbiBUKHQpe3ZhciBlPXt9O3JldHVybiBpLmlzUGxhaW5PYmplY3QodCk/KGUuaWQ9dC5pZCxlLnN0eWxlPXQpOiJzdHJpbmciPT10eXBlb2YgdD8oZS5pZD10LC0xIT09eS5zdHlsZVZhbHVlc01hcGJveC5pbmRleE9mKHQpP2Uuc3R5bGU9ayh0KTp5LnN0eWxlc05vbk1hcGJveFt0XT9lLnN0eWxlPXkuc3R5bGVzTm9uTWFwYm94W3RdOmUuc3R5bGU9dCk6KGUuaWQ9eS5zdHlsZVZhbHVlRGZsdCxlLnN0eWxlPWsoeS5zdHlsZVZhbHVlRGZsdCkpLGUudHJhbnNpdGlvbj17ZHVyYXRpb246MCxkZWxheTowfSxlfWZ1bmN0aW9uIGsodCl7cmV0dXJuIHkuc3R5bGVVcmxQcmVmaXgrdCsiLSIreS5zdHlsZVVybFN1ZmZpeH1mdW5jdGlvbiBNKHQpe3JldHVyblt0Lmxvbix0LmxhdF19Xy51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcy50cmFjZUhhc2gsbz10LnNsaWNlKCkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gd1t0WzBdLnRyYWNlLnR5cGVdLXdbZVswXS50cmFjZS50eXBlXX0pKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXt2YXIgcz1vW25dLGw9ITE7KGU9YVsocj1zWzBdLnRyYWNlKS51aWRdKSYmKGUudHlwZT09PXIudHlwZT8oZS51cGRhdGUocyksbD0hMCk6ZS5kaXNwb3NlKCkpLCFsJiZyLl9tb2R1bGUmJihhW3IudWlkXT1yLl9tb2R1bGUucGxvdCh0aGlzLHMpKX12YXIgYz1PYmplY3Qua2V5cyhhKTt0OmZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciB1PWNbbl07Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpZih1PT09KHI9dFtpXVswXS50cmFjZSkudWlkKWNvbnRpbnVlIHQ7KGU9YVt1XSkuZGlzcG9zZSgpLGRlbGV0ZSBhW3VdfX0sXy51cGRhdGVMYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXAscj10W3RoaXMuaWRdO3RoaXMuZHJhZ2dpbmd8fHRoaXMud2hlZWxpbmd8fChlLnNldENlbnRlcihNKHIuY2VudGVyKSksZS5zZXRab29tKHIuem9vbSksZS5zZXRCZWFyaW5nKHIuYmVhcmluZyksZS5zZXRQaXRjaChyLnBpdGNoKSksdGhpcy51cGRhdGVMYXllcnModCksdGhpcy51cGRhdGVGcmFtZXdvcmsodCksdGhpcy51cGRhdGVGeCh0KSx0aGlzLm1hcC5yZXNpemUoKSx0aGlzLmdkLl9jb250ZXh0Ll9zY3JvbGxab29tLm1hcGJveD9lLnNjcm9sbFpvb20uZW5hYmxlKCk6ZS5zY3JvbGxab29tLmRpc2FibGUoKX0sXy5yZXNvbHZlT25SZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXA7ZS5vbigicmVuZGVyIiwoZnVuY3Rpb24gcigpe2UubG9hZGVkKCkmJihlLm9mZigicmVuZGVyIixyKSxzZXRUaW1lb3V0KHQsMTApKX0pKX0sXy5yZWplY3RPbkVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2Z1bmN0aW9uIHIoKXt0KG5ldyBFcnJvcih5Lm1hcE9uRXJyb3JNc2cpKX1lLm9uY2UoImVycm9yIixyKSxlLm9uY2UoInN0eWxlLmVycm9yIixyKSxlLm9uY2UoInNvdXJjZS5lcnJvciIsciksZS5vbmNlKCJ0aWxlLmVycm9yIixyKSxlLm9uY2UoImxheWVyLmVycm9yIixyKX0sXy5jcmVhdGVGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuaWQ9ZS51aWQsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGUuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLGUueGF4aXM9e19pZDoieCIsYzJwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2plY3QodCkueH19LGUueWF4aXM9e19pZDoieSIsYzJwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2plY3QodCkueX19LGUudXBkYXRlRnJhbWV3b3JrKHQpLGUubW9ja0F4aXM9e3R5cGU6ImxpbmVhciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn0scy5zZXRDb252ZXJ0KGUubW9ja0F4aXMsdCl9LF8uaW5pdEZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLm1hcDtmdW5jdGlvbiBhKCl7Yy5sb25lVW5ob3ZlcihlLl9ob3ZlcmxheWVyKX1mdW5jdGlvbiBzKCl7dmFyIHQ9ci5nZXRWaWV3KCk7bi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHIuZ2V0Vmlld0VkaXRzV2l0aERlcml2ZWQodCkpfWkub24oIm1vdmVlbmQiLChmdW5jdGlvbih0KXtpZihyLm1hcCl7dmFyIGU9bi5fZnVsbExheW91dDtpZih0Lm9yaWdpbmFsRXZlbnR8fHIud2hlZWxpbmcpe3ZhciBpPWVbci5pZF07by5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixuLmxheW91dCxlLl9wcmVHVUksci5nZXRWaWV3RWRpdHMoaSkpO3ZhciBhPXIuZ2V0VmlldygpO2kuX2lucHV0LmNlbnRlcj1pLmNlbnRlcj1hLmNlbnRlcixpLl9pbnB1dC56b29tPWkuem9vbT1hLnpvb20saS5faW5wdXQuYmVhcmluZz1pLmJlYXJpbmc9YS5iZWFyaW5nLGkuX2lucHV0LnBpdGNoPWkucGl0Y2g9YS5waXRjaCxuLmVtaXQoInBsb3RseV9yZWxheW91dCIsci5nZXRWaWV3RWRpdHNXaXRoRGVyaXZlZChhKSl9dC5vcmlnaW5hbEV2ZW50JiYibW91c2V1cCI9PT10Lm9yaWdpbmFsRXZlbnQudHlwZT9yLmRyYWdnaW5nPSExOnIud2hlZWxpbmcmJihyLndoZWVsaW5nPSExKSxlLl9yZWhvdmVyJiZlLl9yZWhvdmVyKCl9fSkpLGkub24oIndoZWVsIiwoZnVuY3Rpb24oKXtyLndoZWVsaW5nPSEwfSkpLGkub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXIuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9W3Qub3JpZ2luYWxFdmVudC5vZmZzZXRYLHQub3JpZ2luYWxFdmVudC5vZmZzZXRZXTt0LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sci54YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gaS51bnByb2plY3QoYSkubG5nfSxyLnlheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiBpLnVucHJvamVjdChhKS5sYXR9LG4uX2Z1bGxMYXlvdXQuX3JlaG92ZXI9ZnVuY3Rpb24oKXtuLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9PT1yLmlkJiZuLl9mdWxsTGF5b3V0W3IuaWRdJiZjLmhvdmVyKG4sdCxyLmlkKX0sYy5ob3ZlcihuLHQsci5pZCksbi5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PXIuaWR9KSksaS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oKXtyLmRyYWdnaW5nPSEwLGEoKX0pKSxpLm9uKCJ6b29tc3RhcnQiLGEpLGkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtuLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbH0pKSxpLm9uKCJkcmFnIixzKSxpLm9uKCJ6b29tIixzKSxpLm9uKCJkYmxjbGljayIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5fZnVsbExheW91dFtyLmlkXTtvLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLG4ubGF5b3V0LG4uX2Z1bGxMYXlvdXQuX3ByZUdVSSxyLmdldFZpZXdFZGl0cyh0KSk7dmFyIGU9ci52aWV3SW5pdGlhbDtpLnNldENlbnRlcihNKGUuY2VudGVyKSksaS5zZXRab29tKGUuem9vbSksaS5zZXRCZWFyaW5nKGUuYmVhcmluZyksaS5zZXRQaXRjaChlLnBpdGNoKTt2YXIgYT1yLmdldFZpZXcoKTt0Ll9pbnB1dC5jZW50ZXI9dC5jZW50ZXI9YS5jZW50ZXIsdC5faW5wdXQuem9vbT10Lnpvb209YS56b29tLHQuX2lucHV0LmJlYXJpbmc9dC5iZWFyaW5nPWEuYmVhcmluZyx0Ll9pbnB1dC5waXRjaD10LnBpdGNoPWEucGl0Y2gsbi5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLG4uZW1pdCgicGxvdGx5X3JlbGF5b3V0IixyLmdldFZpZXdFZGl0c1dpdGhEZXJpdmVkKGEpKX0pKSxyLmNsZWFyU2VsZWN0PWZ1bmN0aW9uKCl7bShyLmRyYWdPcHRpb25zKSxnKHIuZHJhZ09wdGlvbnMuZ2QpfSxyLm9uQ2xpY2tJblBhbkZuPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1uLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtpLmluZGV4T2YoInNlbGVjdCIpPi0xJiZ2KGUub3JpZ2luYWxFdmVudCxuLFtyLnhheGlzXSxbci55YXhpc10sci5pZCx0KSxpLmluZGV4T2YoImV2ZW50Iik+LTEmJmMuY2xpY2sobixlLm9yaWdpbmFsRXZlbnQpfX19LF8udXBkYXRlRng9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUubWFwLG49ZS5nZDtpZighZS5pc1N0YXRpYyl7dmFyIGEsbz10LmRyYWdtb2RlO2E9ZihvKT9mdW5jdGlvbih0LHIpeyh0LnJhbmdlPXt9KVtlLmlkXT1bYyhbci54bWluLHIueW1pbl0pLGMoW3IueG1heCxyLnltYXhdKV19OmZ1bmN0aW9uKHQscixuKXsodC5sYXNzb1BvaW50cz17fSlbZS5pZF09bi5maWx0ZXJlZC5tYXAoYyl9O3ZhciBzPWUuZHJhZ09wdGlvbnM7ZS5kcmFnT3B0aW9ucz1pLmV4dGVuZERlZXAoc3x8e30se2RyYWdtb2RlOnQuZHJhZ21vZGUsZWxlbWVudDplLmRpdixnZDpuLHBsb3RpbmZvOntpZDplLmlkLGRvbWFpbjp0W2UuaWRdLmRvbWFpbix4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMsZmlsbFJhbmdlSXRlbXM6YX0seGF4ZXM6W2UueGF4aXNdLHlheGVzOltlLnlheGlzXSxzdWJwbG90OmUuaWR9KSxyLm9mZigiY2xpY2siLGUub25DbGlja0luUGFuSGFuZGxlcikscChvKXx8aChvKT8oci5kcmFnUGFuLmRpc2FibGUoKSxyLm9uKCJ6b29tc3RhcnQiLGUuY2xlYXJTZWxlY3QpLGUuZHJhZ09wdGlvbnMucHJlcEZuPWZ1bmN0aW9uKHQscixuKXtkKHQscixuLGUuZHJhZ09wdGlvbnMsbyl9LGwuaW5pdChlLmRyYWdPcHRpb25zKSk6KHIuZHJhZ1Bhbi5lbmFibGUoKSxyLm9mZigiem9vbXN0YXJ0IixlLmNsZWFyU2VsZWN0KSxlLmRpdi5vbm1vdXNlZG93bj1udWxsLGUub25DbGlja0luUGFuSGFuZGxlcj1lLm9uQ2xpY2tJblBhbkZuKGUuZHJhZ09wdGlvbnMpLHIub24oImNsaWNrIixlLm9uQ2xpY2tJblBhbkhhbmRsZXIpKX1mdW5jdGlvbiBjKHQpe3ZhciByPWUubWFwLnVucHJvamVjdCh0KTtyZXR1cm5bci5sbmcsci5sYXRdfX0sXy51cGRhdGVGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dFt0aGlzLmlkXS5kb21haW4scj10Ll9zaXplLG49dGhpcy5kaXYuc3R5bGU7bi53aWR0aD1yLncqKGUueFsxXS1lLnhbMF0pKyJweCIsbi5oZWlnaHQ9ci5oKihlLnlbMV0tZS55WzBdKSsicHgiLG4ubGVmdD1yLmwrZS54WzBdKnIudysicHgiLG4udG9wPXIudCsoMS1lLnlbMV0pKnIuaCsicHgiLHRoaXMueGF4aXMuX29mZnNldD1yLmwrZS54WzBdKnIudyx0aGlzLnhheGlzLl9sZW5ndGg9ci53KihlLnhbMV0tZS54WzBdKSx0aGlzLnlheGlzLl9vZmZzZXQ9ci50KygxLWUueVsxXSkqci5oLHRoaXMueWF4aXMuX2xlbmd0aD1yLmgqKGUueVsxXS1lLnlbMF0pfSxfLnVwZGF0ZUxheWVycz1mdW5jdGlvbih0KXt2YXIgZSxyPXRbdGhpcy5pZF0ubGF5ZXJzLG49dGhpcy5sYXllckxpc3Q7aWYoci5sZW5ndGghPT1uLmxlbmd0aCl7Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdLmRpc3Bvc2UoKTtmb3Iobj10aGlzLmxheWVyTGlzdD1bXSxlPTA7ZTxyLmxlbmd0aDtlKyspbi5wdXNoKHgodGhpcyxlLHJbZV0pKX1lbHNlIGZvcihlPTA7ZTxyLmxlbmd0aDtlKyspbltlXS51cGRhdGUocltlXSl9LF8uZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubWFwJiYodGhpcy5tYXAucmVtb3ZlKCksdGhpcy5tYXA9bnVsbCx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLmRpdikpfSxfLnRvSW1hZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAuc3RvcCgpLHRoaXMubWFwLmdldENhbnZhcygpLnRvRGF0YVVSTCgpfSxfLnNldE9wdGlvbnM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiByKXRoaXMubWFwW2VdKHQsbixyW25dKX0sXy5nZXRNYXBMYXllcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAuZ2V0U3R5bGUoKS5sYXllcnN9LF8uYWRkTGF5ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLm1hcDtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCIiPT09ZSlyZXR1cm4gdm9pZCByLmFkZExheWVyKHQsZSk7Zm9yKHZhciBuPXRoaXMuZ2V0TWFwTGF5ZXJzKCksYT0wO2E8bi5sZW5ndGg7YSsrKWlmKGU9PT1uW2FdLmlkKXJldHVybiB2b2lkIHIuYWRkTGF5ZXIodCxlKTtpLndhcm4oWyJUcnlpbmcgdG8gYWRkIGxheWVyIHdpdGggKmJlbG93KiB2YWx1ZSIsZSwicmVmZXJlbmNpbmcgYSBsYXllciB0aGF0IGRvZXMgbm90IGV4aXN0Iiwib3IgdGhhdCBkb2VzIG5vdCB5ZXQgZXhpc3QuIl0uam9pbigiICIpKX1yLmFkZExheWVyKHQpfSxfLnByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLnByb2plY3QobmV3IG4uTG5nTGF0KHRbMF0sdFsxXSkpfSxfLmdldFZpZXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcCxlPXQuZ2V0Q2VudGVyKCkscj17bG9uOmUubG5nLGxhdDplLmxhdH0sbj10LmdldENhbnZhcygpLGk9bi53aWR0aCxhPW4uaGVpZ2h0O3JldHVybntjZW50ZXI6cix6b29tOnQuZ2V0Wm9vbSgpLGJlYXJpbmc6dC5nZXRCZWFyaW5nKCkscGl0Y2g6dC5nZXRQaXRjaCgpLF9kZXJpdmVkOntjb29yZGluYXRlczpbdC51bnByb2plY3QoWzAsMF0pLnRvQXJyYXkoKSx0LnVucHJvamVjdChbaSwwXSkudG9BcnJheSgpLHQudW5wcm9qZWN0KFtpLGFdKS50b0FycmF5KCksdC51bnByb2plY3QoWzAsYV0pLnRvQXJyYXkoKV19fX0sXy5nZXRWaWV3RWRpdHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuaWQscj1bImNlbnRlciIsInpvb20iLCJiZWFyaW5nIiwicGl0Y2giXSxuPXt9LGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTtuW2UrIi4iK2FdPXRbYV19cmV0dXJuIG59LF8uZ2V0Vmlld0VkaXRzV2l0aERlcml2ZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMuZ2V0Vmlld0VkaXRzKHQpO3JldHVybiByW2UrIi5fZGVyaXZlZCJdPXQuX2Rlcml2ZWQscn0sZS5leHBvcnRzPWJ9LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjYyLCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiOjY2MSwiLi4vLi4vY29tcG9uZW50cy9meCI6NjgzLCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyI6NzcxLCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuLi9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo4NDcsIi4vY29uc3RhbnRzIjo4ODMsIi4vbGF5ZXJzIjo4ODYsIm1hcGJveC1nbCI6NDczfV0sODkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVkaXRUeXBlO3JldHVybnt0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxyOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxsOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxlZGl0VHlwZTplfX19LHt9XSw4OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImQzLXRpbWUtZm9ybWF0IikudGltZUZvcm1hdExvY2FsZSxhPXQoImZhc3QtaXNudW1lcmljIiksbz10KCIuLi9yZWdpc3RyeSIpLHM9dCgiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiKSxsPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxjPXQoIi4uL2xpYiIpLHU9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGY9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxoPXQoIi4vY2FydGVzaWFuL2F4aXNfaWRzIikscD10KCIuL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSIpLmNsZWFyU2VsZWN0LGQ9dCgiLi9hbmltYXRpb25fYXR0cmlidXRlcyIpLGc9dCgiLi9mcmFtZV9hdHRyaWJ1dGVzIiksbT10KCIuLi9wbG90cy9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLHY9Yy5yZWxpbmtQcml2YXRlS2V5cyx5PWMuXyx4PWUuZXhwb3J0cz17fTtjLmV4dGVuZEZsYXQoeCxvKSx4LmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIikseC5hdHRyaWJ1dGVzLnR5cGUudmFsdWVzPXguYWxsVHlwZXMseC5mb250QXR0cnM9dCgiLi9mb250X2F0dHJpYnV0ZXMiKSx4LmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHguZm9udFdlaWdodD0ibm9ybWFsIjt2YXIgYj14LnRyYW5zZm9ybXNSZWdpc3RyeSxfPXQoIi4vY29tbWFuZCIpO3guZXhlY3V0ZUFQSUNvbW1hbmQ9Xy5leGVjdXRlQVBJQ29tbWFuZCx4LmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3M9Xy5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzLHgubWFuYWdlQ29tbWFuZE9ic2VydmVyPV8ubWFuYWdlQ29tbWFuZE9ic2VydmVyLHguaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzPV8uaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzLHgucmVkcmF3VGV4dD1mdW5jdGlvbih0KXt2YXIgZT0odD1jLmdldEdyYXBoRGl2KHQpKS5fZnVsbExheW91dHx8e307aWYoISghKGUuX2hhcyYmZS5faGFzKCJwb2xhciIpKSYmdC5kYXRhJiZ0LmRhdGFbMF0mJnQuZGF0YVswXS5yKSlyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7by5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksby5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKHQpLGUoeC5wcmV2aW91c1Byb21pc2VzKHQpKX0pLDMwMCl9KSl9LHgucmVzaXplPWZ1bmN0aW9uKHQpe3ZhciBlO3Q9Yy5nZXRHcmFwaERpdih0KTt2YXIgcj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXt0JiYhYy5pc0hpZGRlbih0KXx8bihuZXcgRXJyb3IoIlJlc2l6ZSBtdXN0IGJlIHBhc3NlZCBhIGRpc3BsYXllZCBwbG90IGRpdiBlbGVtZW50LiIpKSx0Ll9yZWRyYXdUaW1lciYmY2xlYXJUaW1lb3V0KHQuX3JlZHJhd1RpbWVyKSx0Ll9yZXNvbHZlUmVzaXplJiYoZT10Ll9yZXNvbHZlUmVzaXplKSx0Ll9yZXNvbHZlUmVzaXplPXIsdC5fcmVkcmF3VGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpZighdC5sYXlvdXR8fHQubGF5b3V0LndpZHRoJiZ0LmxheW91dC5oZWlnaHR8fGMuaXNIaWRkZW4odCkpcih0KTtlbHNle2RlbGV0ZSB0LmxheW91dC53aWR0aCxkZWxldGUgdC5sYXlvdXQuaGVpZ2h0O3ZhciBlPXQuY2hhbmdlZDt0LmF1dG9wbGF5PSEwLG8uY2FsbCgicmVsYXlvdXQiLHQse2F1dG9zaXplOiEwfSkudGhlbigoZnVuY3Rpb24oKXt0LmNoYW5nZWQ9ZSx0Ll9yZXNvbHZlUmVzaXplPT09ciYmKGRlbGV0ZSB0Ll9yZXNvbHZlUmVzaXplLHIodCkpfSkpfX0pLDEwMCl9KSk7cmV0dXJuIGUmJmUocikscn0seC5wcmV2aW91c1Byb21pc2VzPWZ1bmN0aW9uKHQpe2lmKCh0Ll9wcm9taXNlc3x8W10pLmxlbmd0aClyZXR1cm4gUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpLnRoZW4oKGZ1bmN0aW9uKCl7dC5fcHJvbWlzZXM9W119KSl9LHguYWRkTGlua3M9ZnVuY3Rpb24odCl7aWYodC5fY29udGV4dC5zaG93TGlua3x8dC5fY29udGV4dC5zaG93U291cmNlcyl7dmFyIGU9dC5fZnVsbExheW91dCxyPWMuZW5zdXJlU2luZ2xlKGUuX3BhcGVyLCJ0ZXh0IiwianMtcGxvdC1saW5rLWNvbnRhaW5lciIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoeyJmb250LWZhbWlseSI6JyJPcGVuIFNhbnMiLCBBcmlhbCwgc2Fucy1zZXJpZicsImZvbnQtc2l6ZSI6IjEycHgiLGZpbGw6dS5kZWZhdWx0TGluZSwicG9pbnRlci1ldmVudHMiOiJhbGwifSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZCgidHNwYW4iKS5jbGFzc2VkKCJqcy1saW5rLXRvLXRvb2wiLCEwKSx0LmFwcGVuZCgidHNwYW4iKS5jbGFzc2VkKCJqcy1saW5rLXNwYWNlciIsITApLHQuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLXNvdXJjZWxpbmtzIiwhMCl9KSl9KSksaT1yLm5vZGUoKSxhPXt5OmUuX3BhcGVyLmF0dHIoImhlaWdodCIpLTl9O2RvY3VtZW50LmJvZHkuY29udGFpbnMoaSkmJmkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk+PWUud2lkdGgtMjA/KGFbInRleHQtYW5jaG9yIl09InN0YXJ0IixhLng9NSk6KGFbInRleHQtYW5jaG9yIl09ImVuZCIsYS54PWUuX3BhcGVyLmF0dHIoIndpZHRoIiktNyksci5hdHRyKGEpO3ZhciBvPXIuc2VsZWN0KCIuanMtbGluay10by10b29sIikscz1yLnNlbGVjdCgiLmpzLWxpbmstc3BhY2VyIiksbD1yLnNlbGVjdCgiLmpzLXNvdXJjZWxpbmtzIik7dC5fY29udGV4dC5zaG93U291cmNlcyYmdC5fY29udGV4dC5zaG93U291cmNlcyh0KSx0Ll9jb250ZXh0LnNob3dMaW5rJiZmdW5jdGlvbih0LGUpe2UudGV4dCgiIik7dmFyIHI9ZS5hcHBlbmQoImEiKS5hdHRyKHsieGxpbms6eGxpbms6aHJlZiI6IiMiLGNsYXNzOiJsaW5rLS1pbXB0IGxpbmstLWVtYmVkdmlldyIsImZvbnQtd2VpZ2h0IjoiYm9sZCJ9KS50ZXh0KHQuX2NvbnRleHQubGlua1RleHQrIiAiK1N0cmluZy5mcm9tQ2hhckNvZGUoMTg3KSk7aWYodC5fY29udGV4dC5zZW5kRGF0YSlyLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7eC5zZW5kRGF0YVRvQ2xvdWQodCl9KSk7ZWxzZXt2YXIgbj13aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoIi8iKSxpPXdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7ci5hdHRyKHsieGxpbms6eGxpbms6c2hvdyI6Im5ldyIsInhsaW5rOnhsaW5rOmhyZWYiOiIvIituWzJdLnNwbGl0KCIuIilbMF0rIi8iK25bMV0raX0pfX0odCxvKSxzLnRleHQoby50ZXh0KCkmJmwudGV4dCgpPyIgLSAiOiIiKX19LHguc2VuZERhdGFUb0Nsb3VkPWZ1bmN0aW9uKHQpe3ZhciBlPSh3aW5kb3cuUExPVExZRU5WfHx7fSkuQkFTRV9VUkx8fHQuX2NvbnRleHQucGxvdGx5U2VydmVyVVJMO2lmKGUpe3QuZW1pdCgicGxvdGx5X2JlZm9yZWV4cG9ydCIpO3ZhciByPW4uc2VsZWN0KHQpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJoaWRkZW5mb3JtIikuc3R5bGUoImRpc3BsYXkiLCJub25lIiksaT1yLmFwcGVuZCgiZm9ybSIpLmF0dHIoe2FjdGlvbjplKyIvZXh0ZXJuYWwiLG1ldGhvZDoicG9zdCIsdGFyZ2V0OiJfYmxhbmsifSk7cmV0dXJuIGkuYXBwZW5kKCJpbnB1dCIpLmF0dHIoe3R5cGU6InRleHQiLG5hbWU6ImRhdGEifSkubm9kZSgpLnZhbHVlPXguZ3JhcGhKc29uKHQsITEsImtlZXBkYXRhIiksaS5ub2RlKCkuc3VibWl0KCksci5yZW1vdmUoKSx0LmVtaXQoInBsb3RseV9hZnRlcmV4cG9ydCIpLCExfX07dmFyIHc9WyJkYXlzIiwic2hvcnREYXlzIiwibW9udGhzIiwic2hvcnRNb250aHMiLCJwZXJpb2RzIiwiZGF0ZVRpbWUiLCJkYXRlIiwidGltZSIsImRlY2ltYWwiLCJ0aG91c2FuZHMiLCJncm91cGluZyIsImN1cnJlbmN5Il0sVD1bInllYXIiLCJtb250aCIsImRheU1vbnRoIiwiZGF5TW9udGhZZWFyIl07ZnVuY3Rpb24gayh0LGUpe3ZhciByPXQuX2NvbnRleHQubG9jYWxlO3J8fChyPSJlbi1VUyIpO3ZhciBuPSExLGk9e307ZnVuY3Rpb24gYSh0KXtmb3IodmFyIHI9ITAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lbb118fCh0W29dP2lbb109dFtvXTpyPSExKX1yJiYobj0hMCl9Zm9yKHZhciBzPTA7czwyO3MrKyl7Zm9yKHZhciBsPXQuX2NvbnRleHQubG9jYWxlcyxjPTA7YzwyO2MrKyl7dmFyIHU9KGxbcl18fHt9KS5mb3JtYXQ7aWYodSYmKGEodSksbikpYnJlYWs7bD1vLmxvY2FsZVJlZ2lzdHJ5fXZhciBmPXIuc3BsaXQoIi0iKVswXTtpZihufHxmPT09cilicmVhaztyPWZ9cmV0dXJuIG58fGEoby5sb2NhbGVSZWdpc3RyeS5lbi5mb3JtYXQpLGl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPXtfZnVsbExheW91dDplfSxuPSJ4Ij09PXQuX2lkLmNoYXJBdCgwKSxpPXQuX21haW5BeGlzLl9hbmNob3JBeGlzLGE9IiIsbz0iIixzPSIiO2lmKGkmJihzPWkuX21haW5BeGlzLl9pZCxhPW4/dC5faWQrczpzK3QuX2lkKSwhYXx8IWUuX3Bsb3RzW2FdKXthPSIiO2Zvcih2YXIgbD10Ll9jb3VudGVyQXhlcyxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY10sZj1uP3QuX2lkK3U6dSt0Ll9pZDtvfHwobz1mKTt2YXIgcD1oLmdldEZyb21JZChyLHUpO2lmKHMmJnAub3ZlcmxheWluZz09PXMpe2E9ZjticmVha319fXJldHVybiBhfHxvfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC50cmFuc2Zvcm1zO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9bi5fbW9kdWxlfHxiW24udHlwZV07aWYoaSYmaS5tYWtlc0RhdGEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUyh0LGUscixuKXtmb3IodmFyIGk9dC50cmFuc2Zvcm1zLGE9W3RdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxsPWJbcy50eXBlXTtsJiZsLnRyYW5zZm9ybSYmKGE9bC50cmFuc2Zvcm0oYSx7dHJhbnNmb3JtOnMsZnVsbFRyYWNlOnQsZnVsbERhdGE6ZSxsYXlvdXQ6cixmdWxsTGF5b3V0Om4sdHJhbnNmb3JtSW5kZXg6b30pKX1yZXR1cm4gYX1mdW5jdGlvbiBFKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmInB4Ij09PXQuc3Vic3RyKHQubGVuZ3RoLTIpJiZwYXJzZUZsb2F0KHQpfWZ1bmN0aW9uIEModCl7dmFyIGU9dC5tYXJnaW47aWYoIXQuX3NpemUpe3ZhciByPXQuX3NpemU9e2w6TWF0aC5yb3VuZChlLmwpLHI6TWF0aC5yb3VuZChlLnIpLHQ6TWF0aC5yb3VuZChlLnQpLGI6TWF0aC5yb3VuZChlLmIpLHA6TWF0aC5yb3VuZChlLnBhZCl9O3Iudz1NYXRoLnJvdW5kKHQud2lkdGgpLXIubC1yLnIsci5oPU1hdGgucm91bmQodC5oZWlnaHQpLXIudC1yLmJ9dC5fcHVzaG1hcmdpbnx8KHQuX3B1c2htYXJnaW49e30pLHQuX3B1c2htYXJnaW5JZHN8fCh0Ll9wdXNobWFyZ2luSWRzPXt9KX14LnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSYmZS5za2lwVXBkYXRlQ2FsYyxhPXQuX2Z1bGxMYXlvdXR8fHt9O2lmKGEuX3NraXBEZWZhdWx0cylkZWxldGUgYS5fc2tpcERlZmF1bHRzO2Vsc2V7dmFyIHMsbD10Ll9mdWxsTGF5b3V0PXt9LHU9dC5sYXlvdXR8fHt9LGY9dC5fZnVsbERhdGF8fFtdLGg9dC5fZnVsbERhdGE9W10sZD10LmRhdGF8fFtdLGc9dC5jYWxjZGF0YXx8W10sbT10Ll9jb250ZXh0fHx7fTt0Ll90cmFuc2l0aW9uRGF0YXx8eC5jcmVhdGVUcmFuc2l0aW9uRGF0YSh0KSxsLl9kZmx0VGl0bGU9e3Bsb3Q6eSh0LCJDbGljayB0byBlbnRlciBQbG90IHRpdGxlIikseDp5KHQsIkNsaWNrIHRvIGVudGVyIFggYXhpcyB0aXRsZSIpLHk6eSh0LCJDbGljayB0byBlbnRlciBZIGF4aXMgdGl0bGUiKSxjb2xvcmJhcjp5KHQsIkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiKSxhbm5vdGF0aW9uOnkodCwibmV3IHRleHQiKX0sbC5fdHJhY2VXb3JkPXkodCwidHJhY2UiKTt2YXIgYj1rKHQsdyk7aWYobC5fbWFwYm94QWNjZXNzVG9rZW49bS5tYXBib3hBY2Nlc3NUb2tlbixhLl9pbml0aWFsQXV0b1NpemVJc0RvbmUpe3ZhciBfPWEud2lkdGgsTT1hLmhlaWdodDt4LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKHUsbCxiKSx1LndpZHRofHwobC53aWR0aD1fKSx1LmhlaWdodHx8KGwuaGVpZ2h0PU0pLHguc2FuaXRpemVNYXJnaW5zKGwpfWVsc2V7eC5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyh1LGwsYik7dmFyIEE9IXUud2lkdGh8fCF1LmhlaWdodCxTPWwuYXV0b3NpemUsRT1tLmF1dG9zaXphYmxlO0EmJihTfHxFKT94LnBsb3RBdXRvU2l6ZSh0LHUsbCk6QSYmeC5zYW5pdGl6ZU1hcmdpbnMobCksIVMmJkEmJih1LndpZHRoPWwud2lkdGgsdS5oZWlnaHQ9bC5oZWlnaHQpfWwuX2QzbG9jYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGVjaW1hbD1lLmNoYXJBdCgwKSx0LnRob3VzYW5kcz1lLmNoYXJBdCgxKSx7bnVtYmVyRm9ybWF0Om4ubG9jYWxlKHQpLm51bWJlckZvcm1hdCx0aW1lRm9ybWF0OmkodCkudXRjRm9ybWF0fX0oYixsLnNlcGFyYXRvcnMpLGwuX2V4dHJhRm9ybWF0PWsodCxUKSxsLl9pbml0aWFsQXV0b1NpemVJc0RvbmU9ITAsbC5fZGF0YUxlbmd0aD1kLmxlbmd0aCxsLl9tb2R1bGVzPVtdLGwuX3Zpc2libGVNb2R1bGVzPVtdLGwuX2Jhc2VQbG90TW9kdWxlcz1bXTt2YXIgTD1sLl9zdWJwbG90cz1mdW5jdGlvbigpe3ZhciB0LGUscj1vLmNvbGxlY3RhYmxlU3VicGxvdFR5cGVzLG49e307aWYoIXIpe3I9W107dmFyIGk9by5zdWJwbG90c1JlZ2lzdHJ5O2Zvcih2YXIgYSBpbiBpKXt2YXIgcz1pW2FdLmF0dHI7aWYocyYmKHIucHVzaChhKSxBcnJheS5pc0FycmF5KHMpKSlmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKWMucHVzaFVuaXF1ZShyLHNbZV0pfX1mb3IodD0wO3Q8ci5sZW5ndGg7dCsrKW5bclt0XV09W107cmV0dXJuIG59KCksST1sLl9zcGxvbUF4ZXM9e3g6e30seTp7fX0sUD1sLl9zcGxvbVN1YnBsb3RzPXt9O2wuX3NwbG9tR3JpZERmbHQ9e30sbC5fc2NhdHRlclN0YWNrT3B0cz17fSxsLl9maXJzdFNjYXR0ZXI9e30sbC5fYWxpZ25tZW50T3B0cz17fSxsLl9jb2xvckF4ZXM9e30sbC5fcmVxdWVzdFJhbmdlc2xpZGVyPXt9LGwuX3RyYWNlVWlkcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1lLmxlbmd0aCxhPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl0uX2Z1bGxJbnB1dDtvIT09biYmYS5wdXNoKG8pLG49b312YXIgcz1hLmxlbmd0aCxsPW5ldyBBcnJheShpKSx1PXt9O2Z1bmN0aW9uIGYodCxlKXtsW2VdPXQsdVt0XT0xfWZ1bmN0aW9uIGgodCxlKXtpZih0JiYic3RyaW5nIj09dHlwZW9mIHQmJiF1W3RdKXJldHVybiBmKHQsZSksITB9Zm9yKHI9MDtyPGk7cisrKXt2YXIgcD1lW3JdLnVpZDsibnVtYmVyIj09dHlwZW9mIHAmJihwPVN0cmluZyhwKSksaChwLHIpfHwocjxzJiZoKGFbcl0udWlkLHIpfHxmKGMucmFuZHN0cih1KSxyKSl9cmV0dXJuIGx9KGYsZCksbC5fZ2xvYmFsVHJhbnNmb3Jtcz0odC5fY29udGV4dHx8e30pLmdsb2JhbFRyYW5zZm9ybXMseC5zdXBwbHlEYXRhRGVmYXVsdHMoZCxoLHUsbCk7dmFyIHo9T2JqZWN0LmtleXMoSS54KSxPPU9iamVjdC5rZXlzKEkueSk7aWYoei5sZW5ndGg+MSYmTy5sZW5ndGg+MSl7Zm9yKG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJncmlkIiwic2l6ZURlZmF1bHRzIikodSxsKSxzPTA7czx6Lmxlbmd0aDtzKyspYy5wdXNoVW5pcXVlKEwueGF4aXMseltzXSk7Zm9yKHM9MDtzPE8ubGVuZ3RoO3MrKyljLnB1c2hVbmlxdWUoTC55YXhpcyxPW3NdKTtmb3IodmFyIEQgaW4gUCljLnB1c2hVbmlxdWUoTC5jYXJ0ZXNpYW4sRCl9aWYobC5faGFzPXguX2hhc1Bsb3RUeXBlLmJpbmQobCksZi5sZW5ndGg9PT1oLmxlbmd0aClmb3Iocz0wO3M8aC5sZW5ndGg7cysrKXYoaFtzXSxmW3NdKTt4LnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzKHUsbCxoLHQuX3RyYW5zaXRpb25EYXRhKTt2YXIgUj1sLl92aXNpYmxlTW9kdWxlcyxGPVtdO2ZvcihzPTA7czxSLmxlbmd0aDtzKyspe3ZhciBCPVJbc10uY3Jvc3NUcmFjZURlZmF1bHRzO0ImJmMucHVzaFVuaXF1ZShGLEIpfWZvcihzPTA7czxGLmxlbmd0aDtzKyspRltzXShoLGwpO2wuX2hhc09ubHlMYXJnZVNwbG9tcz0xPT09bC5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aCYmInNwbG9tIj09PWwuX2Jhc2VQbG90TW9kdWxlc1swXS5uYW1lJiZ6Lmxlbmd0aD4xNSYmTy5sZW5ndGg+MTUmJjA9PT1sLnNoYXBlcy5sZW5ndGgmJjA9PT1sLmltYWdlcy5sZW5ndGgsbC5faGFzQ2FydGVzaWFuPWwuX2hhcygiY2FydGVzaWFuIiksbC5faGFzR2VvPWwuX2hhcygiZ2VvIiksbC5faGFzR0wzRD1sLl9oYXMoImdsM2QiKSxsLl9oYXNHTDJEPWwuX2hhcygiZ2wyZCIpLGwuX2hhc1Rlcm5hcnk9bC5faGFzKCJ0ZXJuYXJ5IiksbC5faGFzUGllPWwuX2hhcygicGllIikseC5saW5rU3VicGxvdHMoaCxsLGYsYSkseC5jbGVhblBsb3QoaCxsLGYsYSk7dmFyIE49ISghYS5faGFzfHwhYS5faGFzKCJnbDJkIikpLGo9ISghbC5faGFzfHwhbC5faGFzKCJnbDJkIikpLFU9ISghYS5faGFzfHwhYS5faGFzKCJjYXJ0ZXNpYW4iKSl8fE4sVj0hKCFsLl9oYXN8fCFsLl9oYXMoImNhcnRlc2lhbiIpKXx8ajtVJiYhVj9hLl9iZ0xheWVyLnJlbW92ZSgpOlYmJiFVJiYobC5fc2hvdWxkQ3JlYXRlQmdMYXllcj0hMCksYS5fem9vbWxheWVyJiYhdC5fZHJhZ2dpbmcmJnAoe19mdWxsTGF5b3V0OmF9KSxmdW5jdGlvbih0LGUpe3ZhciByLG49W107ZS5tZXRhJiYocj1lLl9tZXRhPXttZXRhOmUubWV0YSxsYXlvdXQ6e21ldGE6ZS5tZXRhfX0pO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO2EubWV0YT9uW2EuaW5kZXhdPWEuX21ldGE9e21ldGE6YS5tZXRhfTplLm1ldGEmJihhLl9tZXRhPXttZXRhOmUubWV0YX0pLGUubWV0YSYmKGEuX21ldGEubGF5b3V0PXttZXRhOmUubWV0YX0pfW4ubGVuZ3RoJiYocnx8KHI9ZS5fbWV0YT17fSksci5kYXRhPW4pfShoLGwpLHYobCxhKSxvLmdldENvbXBvbmVudE1ldGhvZCgiY29sb3JzY2FsZSIsImNyb3NzVHJhY2VEZWZhdWx0cyIpKGgsbCksbC5fcHJlR1VJfHwobC5fcHJlR1VJPXt9KSxsLl90cmFjZVByZUdVSXx8KGwuX3RyYWNlUHJlR1VJPXt9KTt2YXIgcSxIPWwuX3RyYWNlUHJlR1VJLEc9e307Zm9yKHEgaW4gSClHW3FdPSJvbGQiO2ZvcihzPTA7czxoLmxlbmd0aDtzKyspR1txPWhbc10uX2Z1bGxJbnB1dC51aWRdfHwoSFtxXT17fSksR1txXT0ibmV3Ijtmb3IocSBpbiBHKSJvbGQiPT09R1txXSYmZGVsZXRlIEhbcV07QyhsKSxvLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJtYWtlRGF0YSIpKGwpLHJ8fGcubGVuZ3RoIT09aC5sZW5ndGh8fHguc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjKGcsaCl9fSx4LnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9KHRbcl18fFtdKVswXTtpZihpJiZpLnRyYWNlKXt2YXIgYT1pLnRyYWNlO2lmKGEuX2hhc0NhbGNUcmFuc2Zvcm0pe3ZhciBvLHMsbCx1PWEuX2FycmF5QXR0cnM7Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzPXVbb10sbD1jLm5lc3RlZFByb3BlcnR5KGEscykuZ2V0KCkuc2xpY2UoKSxjLm5lc3RlZFByb3BlcnR5KG4scykuc2V0KGwpfWkudHJhY2U9bn19fSx4LmNyZWF0ZVRyYW5zaXRpb25EYXRhPWZ1bmN0aW9uKHQpe3QuX3RyYW5zaXRpb25EYXRhfHwodC5fdHJhbnNpdGlvbkRhdGE9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXN8fCh0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzPVtdKSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNofHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSksdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXJ8fCh0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcj0wKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcz1bXSl9LHguX2hhc1Bsb3RUeXBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKWlmKHJbZV0ubmFtZT09PXQpcmV0dXJuITA7dmFyIG49dGhpcy5fbW9kdWxlc3x8W107Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIGk9bltlXS5uYW1lO2lmKGk9PT10KXJldHVybiEwO3ZhciBhPW8ubW9kdWxlc1tpXTtpZihhJiZhLmNhdGVnb3JpZXNbdF0pcmV0dXJuITB9cmV0dXJuITF9LHguY2xlYW5QbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBzPW9baV07cy5jbGVhbiYmcy5jbGVhbih0LGUscixuKX12YXIgbD1uLl9oYXMmJm4uX2hhcygiZ2wiKSxjPWUuX2hhcyYmZS5faGFzKCJnbCIpO2wmJiFjJiZ2b2lkIDAhPT1uLl9nbGNvbnRhaW5lciYmKG4uX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLnJlbW92ZSgpLG4uX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLm5vLXdlYmdsIikucmVtb3ZlKCksbi5fZ2xjYW52YXM9bnVsbCk7dmFyIHU9ISFuLl9pbmZvbGF5ZXI7dDpmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgZj1yW2ldLnVpZDtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKXtpZihmPT09dFthXS51aWQpY29udGludWUgdH11JiZuLl9pbmZvbGF5ZXIuc2VsZWN0KCIuY2IiK2YpLnJlbW92ZSgpfX0seC5saW5rU3VicGxvdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxzPW4uX3Bsb3RzfHx7fSxsPWUuX3Bsb3RzPXt9LHU9ZS5fc3VicGxvdHMsZj17X2Z1bGxEYXRhOnQsX2Z1bGxMYXlvdXQ6ZX0scD11LmNhcnRlc2lhbi5jb25jYXQodS5nbDJkfHxbXSk7Zm9yKGk9MDtpPHAubGVuZ3RoO2krKyl7dmFyIGQsZz1wW2ldLG09c1tnXSx2PWguZ2V0RnJvbUlkKGYsZywieCIpLHk9aC5nZXRGcm9tSWQoZixnLCJ5Iik7Zm9yKG0/ZD1sW2ddPW06KGQ9bFtnXT17fSkuaWQ9Zyx2Ll9jb3VudGVyQXhlcy5wdXNoKHkuX2lkKSx5Ll9jb3VudGVyQXhlcy5wdXNoKHYuX2lkKSx2Ll9zdWJwbG90c1dpdGgucHVzaChnKSx5Ll9zdWJwbG90c1dpdGgucHVzaChnKSxkLnhheGlzPXYsZC55YXhpcz15LGQuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciB4PXRbYV07aWYoeC54YXhpcz09PWQueGF4aXMuX2lkJiZ4LnlheGlzPT09ZC55YXhpcy5faWQmJiExPT09eC5jbGlwb25heGlzKXtkLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fX12YXIgYixfPWgubGlzdChmLG51bGwsITApO2ZvcihpPTA7aTxfLmxlbmd0aDtpKyspe3ZhciB3PW51bGw7KGI9X1tpXSkub3ZlcmxheWluZyYmKHc9aC5nZXRGcm9tSWQoZixiLm92ZXJsYXlpbmcpKSYmdy5vdmVybGF5aW5nJiYoYi5vdmVybGF5aW5nPSExLHc9bnVsbCksYi5fbWFpbkF4aXM9d3x8Yix3JiYoYi5kb21haW49dy5kb21haW4uc2xpY2UoKSksYi5fYW5jaG9yQXhpcz0iZnJlZSI9PT1iLmFuY2hvcj9udWxsOmguZ2V0RnJvbUlkKGYsYi5hbmNob3IpfWZvcihpPTA7aTxfLmxlbmd0aDtpKyspaWYoKGI9X1tpXSkuX2NvdW50ZXJBeGVzLnNvcnQoaC5pZFNvcnQpLGIuX3N1YnBsb3RzV2l0aC5zb3J0KGMuc3VicGxvdFNvcnQpLGIuX21haW5TdWJwbG90PU0oYixlKSxiLl9jb3VudGVyQXhlcy5sZW5ndGgmJihiLnNwaWtlbW9kZSYmLTEhPT1iLnNwaWtlbW9kZS5pbmRleE9mKCJhY3Jvc3MiKXx8Yi5hdXRvbWFyZ2luJiZiLm1pcnJvciYmImZyZWUiIT09Yi5hbmNob3J8fG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKGIpKSl7dmFyIFQ9MSxrPTA7Zm9yKGE9MDthPGIuX2NvdW50ZXJBeGVzLmxlbmd0aDthKyspe3ZhciBBPWguZ2V0RnJvbUlkKGYsYi5fY291bnRlckF4ZXNbYV0pO1Q9TWF0aC5taW4oVCxBLmRvbWFpblswXSksaz1NYXRoLm1heChrLEEuZG9tYWluWzFdKX1UPGsmJihiLl9jb3VudGVyRG9tYWluTWluPVQsYi5fY291bnRlckRvbWFpbk1heD1rKX19LHguY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycz1mdW5jdGlvbih0KXt2YXIgZSxyLG47Zm9yKHI9W10sKGU9dC5fbW9kdWxlLl9jb2xvckF0dHJzKXx8KHQuX21vZHVsZS5fY29sb3JBdHRycz1lPVtdLHMuY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsKGZ1bmN0aW9uKHQsbixpLGEpe3JbYV09bixyLmxlbmd0aD1hKzEsImNvbG9yIj09PXQudmFsVHlwZSYmdm9pZCAwPT09dC5kZmx0JiZlLnB1c2goci5qb2luKCIuIikpfSkpKSxuPTA7bjxlLmxlbmd0aDtuKyspe2MubmVzdGVkUHJvcGVydHkodCwiX2lucHV0LiIrZVtuXSkuZ2V0KCl8fGMubmVzdGVkUHJvcGVydHkodCxlW25dKS5zZXQobnVsbCl9fSx4LnN1cHBseURhdGFEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLHMsdT1uLl9tb2R1bGVzLGY9bi5fdmlzaWJsZU1vZHVsZXMsaD1uLl9iYXNlUGxvdE1vZHVsZXMscD0wLGQ9MDtmdW5jdGlvbiBnKHQpe2UucHVzaCh0KTt2YXIgcj10Ll9tb2R1bGU7ciYmKGMucHVzaFVuaXF1ZSh1LHIpLCEwPT09dC52aXNpYmxlJiZjLnB1c2hVbmlxdWUoZixyKSxjLnB1c2hVbmlxdWUoaCx0Ll9tb2R1bGUuYmFzZVBsb3RNb2R1bGUpLHArKywhMSE9PXQuX2lucHV0LnZpc2libGUmJmQrKyl9bi5fdHJhbnNmb3JtTW9kdWxlcz1bXTt2YXIgbT17fSx5PVtdLGI9KHIudGVtcGxhdGV8fHt9KS5kYXRhfHx7fSxfPWwudHJhY2VUZW1wbGF0ZXIoYik7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7aWYocz10W2ldLChhPV8ubmV3VHJhY2UocykpLnVpZD1uLl90cmFjZVVpZHNbaV0seC5zdXBwbHlUcmFjZURlZmF1bHRzKHMsYSxkLG4saSksYS5pbmRleD1pLGEuX2lucHV0PXMsYS5fZXhwYW5kZWRJbmRleD1wLGEudHJhbnNmb3JtcyYmYS50cmFuc2Zvcm1zLmxlbmd0aClmb3IodmFyIHc9ITEhPT1zLnZpc2libGUmJiExPT09YS52aXNpYmxlLFQ9UyhhLGUscixuKSxrPTA7azxULmxlbmd0aDtrKyspe3ZhciBNPVRba10sQT17X3RlbXBsYXRlOmEuX3RlbXBsYXRlLHR5cGU6YS50eXBlLHVpZDphLnVpZCtrfTt3JiYhMT09PU0udmlzaWJsZSYmZGVsZXRlIE0udmlzaWJsZSx4LnN1cHBseVRyYWNlRGVmYXVsdHMoTSxBLHAsbixpKSx2KEEsTSksQS5pbmRleD1pLEEuX2lucHV0PXMsQS5fZnVsbElucHV0PWEsQS5fZXhwYW5kZWRJbmRleD1wLEEuX2V4cGFuZGVkSW5wdXQ9TSxnKEEpfWVsc2UgYS5fZnVsbElucHV0PWEsYS5fZXhwYW5kZWRJbnB1dD1hLGcoYSk7by50cmFjZUlzKGEsImNhcnBldEF4aXMiKSYmKG1bYS5jYXJwZXRdPWEpLG8udHJhY2VJcyhhLCJjYXJwZXREZXBlbmRlbnQiKSYmeS5wdXNoKGkpfWZvcihpPTA7aTx5Lmxlbmd0aDtpKyspaWYoKGE9ZVt5W2ldXSkudmlzaWJsZSl7dmFyIEU9bVthLmNhcnBldF07YS5fY2FycGV0PUUsRSYmRS52aXNpYmxlPyhhLnhheGlzPUUueGF4aXMsYS55YXhpcz1FLnlheGlzKTphLnZpc2libGU9ITF9fSx4LnN1cHBseUFuaW1hdGlvbkRlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlO3Q9dHx8e307dmFyIHI9e307ZnVuY3Rpb24gbihlLG4pe3JldHVybiBjLmNvZXJjZSh0fHx7fSxyLGQsZSxuKX1pZihuKCJtb2RlIiksbigiZGlyZWN0aW9uIiksbigiZnJvbWN1cnJlbnQiKSxBcnJheS5pc0FycmF5KHQuZnJhbWUpKWZvcihyLmZyYW1lPVtdLGU9MDtlPHQuZnJhbWUubGVuZ3RoO2UrKylyLmZyYW1lW2VdPXguc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cyh0LmZyYW1lW2VdfHx7fSk7ZWxzZSByLmZyYW1lPXguc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cyh0LmZyYW1lfHx7fSk7aWYoQXJyYXkuaXNBcnJheSh0LnRyYW5zaXRpb24pKWZvcihyLnRyYW5zaXRpb249W10sZT0wO2U8dC50cmFuc2l0aW9uLmxlbmd0aDtlKyspci50cmFuc2l0aW9uW2VdPXguc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzKHQudHJhbnNpdGlvbltlXXx8e30pO2Vsc2Ugci50cmFuc2l0aW9uPXguc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzKHQudHJhbnNpdGlvbnx8e30pO3JldHVybiByfSx4LnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBjLmNvZXJjZSh0fHx7fSxlLGQuZnJhbWUscixuKX1yZXR1cm4gcigiZHVyYXRpb24iKSxyKCJyZWRyYXciKSxlfSx4LnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGMuY29lcmNlKHR8fHt9LGUsZC50cmFuc2l0aW9uLHIsbil9cmV0dXJuIHIoImR1cmF0aW9uIikscigiZWFzaW5nIiksZX0seC5zdXBwbHlGcmFtZURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gYy5jb2VyY2UodCxlLGcscixuKX1yZXR1cm4gcigiZ3JvdXAiKSxyKCJuYW1lIikscigidHJhY2VzIikscigiYmFzZWZyYW1lIikscigiZGF0YSIpLHIoImxheW91dCIpLGV9LHguc3VwcGx5VHJhY2VEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLHM9bi5jb2xvcndheXx8dS5kZWZhdWx0cyxsPXNbciVzLmxlbmd0aF07ZnVuY3Rpb24gZihyLG4pe3JldHVybiBjLmNvZXJjZSh0LGUseC5hdHRyaWJ1dGVzLHIsbil9dmFyIGg9ZigidmlzaWJsZSIpO2YoInR5cGUiKSxmKCJuYW1lIixuLl90cmFjZVdvcmQrIiAiK2kpLGYoInVpcmV2aXNpb24iLG4udWlyZXZpc2lvbik7dmFyIHA9eC5nZXRNb2R1bGUoZSk7aWYoZS5fbW9kdWxlPXAscCl7dmFyIGQ9cC5iYXNlUGxvdE1vZHVsZSxnPWQuYXR0cixtPWQuYXR0cmlidXRlcztpZihnJiZtKXt2YXIgdj1uLl9zdWJwbG90cyx5PSIiO2lmKGh8fCJnbDJkIiE9PWQubmFtZSl7aWYoQXJyYXkuaXNBcnJheShnKSlmb3IoYT0wO2E8Zy5sZW5ndGg7YSsrKXt2YXIgYj1nW2FdLF89Yy5jb2VyY2UodCxlLG0sYik7dltiXSYmYy5wdXNoVW5pcXVlKHZbYl0sXykseSs9X31lbHNlIHk9Yy5jb2VyY2UodCxlLG0sZyk7dltkLm5hbWVdJiZjLnB1c2hVbmlxdWUodltkLm5hbWVdLHkpfX19cmV0dXJuIGgmJihmKCJjdXN0b21kYXRhIiksZigiaWRzIiksZigibWV0YSIpLG8udHJhY2VJcyhlLCJzaG93TGVnZW5kIik/KGMuY29lcmNlKHQsZSxwLmF0dHJpYnV0ZXMuc2hvd2xlZ2VuZD9wLmF0dHJpYnV0ZXM6eC5hdHRyaWJ1dGVzLCJzaG93bGVnZW5kIiksZigibGVnZW5kZ3JvdXAiKSxlLl9kZmx0U2hvd0xlZ2VuZD0hMCk6ZS5fZGZsdFNob3dMZWdlbmQ9ITEscCYmcC5zdXBwbHlEZWZhdWx0cyh0LGUsbCxuKSxvLnRyYWNlSXMoZSwibm9PcGFjaXR5Iil8fGYoIm9wYWNpdHkiKSxvLnRyYWNlSXMoZSwibm90TGVnZW5kSXNvbGF0YWJsZSIpJiYoZS52aXNpYmxlPSEhZS52aXNpYmxlKSxvLnRyYWNlSXMoZSwibm9Ib3ZlciIpfHwoZS5ob3ZlcnRlbXBsYXRlfHxjLmNvZXJjZUhvdmVyaW5mbyh0LGUsbiksInBhcmNhdHMiIT09ZS50eXBlJiZvLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlEZWZhdWx0cyIpKHQsZSxsLG4pKSxwJiZwLnNlbGVjdFBvaW50cyYmZigic2VsZWN0ZWRwb2ludHMiKSx4LnN1cHBseVRyYW5zZm9ybURlZmF1bHRzKHQsZSxuKSksZX0seC5oYXNNYWtlc0RhdGFUcmFuc2Zvcm09QSx4LnN1cHBseVRyYW5zZm9ybURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtpZihlLl9sZW5ndGh8fEEodCkpe3ZhciBuPXIuX2dsb2JhbFRyYW5zZm9ybXN8fFtdLGk9ci5fdHJhbnNmb3JtTW9kdWxlc3x8W107aWYoQXJyYXkuaXNBcnJheSh0LnRyYW5zZm9ybXMpfHwwIT09bi5sZW5ndGgpZm9yKHZhciBhPXQudHJhbnNmb3Jtc3x8W10sbz1uLmNvbmNhdChhKSxzPWUudHJhbnNmb3Jtcz1bXSxsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciB1LGY9b1tsXSxoPWYudHlwZSxwPWJbaF0sZD0hKGYuX21vZHVsZSYmZi5fbW9kdWxlPT09cCksZz1wJiYiZnVuY3Rpb24iPT10eXBlb2YgcC50cmFuc2Zvcm07cHx8Yy53YXJuKCJVbnJlY29nbml6ZWQgdHJhbnNmb3JtIHR5cGUgIitoKyIuIikscCYmcC5zdXBwbHlEZWZhdWx0cyYmKGR8fGcpPygodT1wLnN1cHBseURlZmF1bHRzKGYsZSxyLHQpKS50eXBlPWgsdS5fbW9kdWxlPXAsYy5wdXNoVW5pcXVlKGkscCkpOnU9Yy5leHRlbmRGbGF0KHt9LGYpLHMucHVzaCh1KX19fSx4LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHIsbil7cmV0dXJuIGMuY29lcmNlKHQsZSx4LmxheW91dEF0dHJpYnV0ZXMscixuKX12YXIgaT10LnRlbXBsYXRlO2MuaXNQbGFpbk9iamVjdChpKSYmKGUudGVtcGxhdGU9aSxlLl90ZW1wbGF0ZT1pLmxheW91dCxlLl9kYXRhVGVtcGxhdGU9aS5kYXRhKSxuKCJhdXRvdHlwZW51bWJlcnMiKTt2YXIgYT1jLmNvZXJjZUZvbnQobiwiZm9udCIpO24oInRpdGxlLnRleHQiLGUuX2RmbHRUaXRsZS5wbG90KSxjLmNvZXJjZUZvbnQobiwidGl0bGUuZm9udCIse2ZhbWlseTphLmZhbWlseSxzaXplOk1hdGgucm91bmQoMS40KmEuc2l6ZSksY29sb3I6YS5jb2xvcn0pLG4oInRpdGxlLnhyZWYiKSxuKCJ0aXRsZS55cmVmIiksbigidGl0bGUueCIpLG4oInRpdGxlLnkiKSxuKCJ0aXRsZS54YW5jaG9yIiksbigidGl0bGUueWFuY2hvciIpLG4oInRpdGxlLnBhZC50IiksbigidGl0bGUucGFkLnIiKSxuKCJ0aXRsZS5wYWQuYiIpLG4oInRpdGxlLnBhZC5sIiksbigidW5pZm9ybXRleHQubW9kZSIpJiZuKCJ1bmlmb3JtdGV4dC5taW5zaXplIiksbigiYXV0b3NpemUiLCEodC53aWR0aCYmdC5oZWlnaHQpKSxuKCJ3aWR0aCIpLG4oImhlaWdodCIpLG4oIm1hcmdpbi5sIiksbigibWFyZ2luLnIiKSxuKCJtYXJnaW4udCIpLG4oIm1hcmdpbi5iIiksbigibWFyZ2luLnBhZCIpLG4oIm1hcmdpbi5hdXRvZXhwYW5kIiksdC53aWR0aCYmdC5oZWlnaHQmJnguc2FuaXRpemVNYXJnaW5zKGUpLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJncmlkIiwic2l6ZURlZmF1bHRzIikodCxlKSxuKCJwYXBlcl9iZ2NvbG9yIiksbigic2VwYXJhdG9ycyIsci5kZWNpbWFsK3IudGhvdXNhbmRzKSxuKCJoaWRlc291cmNlcyIpLG4oImNvbG9yd2F5IiksbigiZGF0YXJldmlzaW9uIik7dmFyIHM9bigidWlyZXZpc2lvbiIpO24oImVkaXRyZXZpc2lvbiIscyksbigic2VsZWN0aW9ucmV2aXNpb24iLHMpLG4oIm1vZGViYXIub3JpZW50YXRpb24iKSxuKCJtb2RlYmFyLmJnY29sb3IiLHUuYWRkT3BhY2l0eShlLnBhcGVyX2JnY29sb3IsLjUpKTt2YXIgbD11LmNvbnRyYXN0KHUucmdiKGUubW9kZWJhci5iZ2NvbG9yKSk7bigibW9kZWJhci5jb2xvciIsdS5hZGRPcGFjaXR5KGwsLjMpKSxuKCJtb2RlYmFyLmFjdGl2ZWNvbG9yIix1LmFkZE9wYWNpdHkobCwuNykpLG4oIm1vZGViYXIudWlyZXZpc2lvbiIscyksby5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsInN1cHBseURyYXdOZXdTaGFwZURlZmF1bHRzIikodCxlLG4pLG4oIm1ldGEiKSxjLmlzUGxhaW5PYmplY3QodC50cmFuc2l0aW9uKSYmKG4oInRyYW5zaXRpb24uZHVyYXRpb24iKSxuKCJ0cmFuc2l0aW9uLmVhc2luZyIpLG4oInRyYW5zaXRpb24ub3JkZXJpbmciKSksby5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIpLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJmeCIsInN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzIikodCxlLG4pfSx4LnBsb3RBdXRvU2l6ZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvPXQuX2NvbnRleHR8fHt9LHM9by5mcmFtZU1hcmdpbnMsbD1jLmlzUGxvdERpdih0KTtpZihsJiZ0LmVtaXQoInBsb3RseV9hdXRvc2l6ZSIpLG8uZmlsbEZyYW1lKW49d2luZG93LmlubmVyV2lkdGgsaT13aW5kb3cuaW5uZXJIZWlnaHQsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIjtlbHNle3ZhciB1PWw/d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk6e307aWYobj1FKHUud2lkdGgpfHxFKHUubWF4V2lkdGgpfHxyLndpZHRoLGk9RSh1LmhlaWdodCl8fEUodS5tYXhIZWlnaHQpfHxyLmhlaWdodCxhKHMpJiZzPjApe3ZhciBmPTEtMipzO249TWF0aC5yb3VuZChmKm4pLGk9TWF0aC5yb3VuZChmKmkpfX12YXIgaD14LmxheW91dEF0dHJpYnV0ZXMud2lkdGgubWluLHA9eC5sYXlvdXRBdHRyaWJ1dGVzLmhlaWdodC5taW47bjxoJiYobj1oKSxpPHAmJihpPXApO3ZhciBkPSFlLndpZHRoJiZNYXRoLmFicyhyLndpZHRoLW4pPjEsZz0hZS5oZWlnaHQmJk1hdGguYWJzKHIuaGVpZ2h0LWkpPjE7KGd8fGQpJiYoZCYmKHIud2lkdGg9biksZyYmKHIuaGVpZ2h0PWkpKSx0Ll9pbml0aWFsQXV0b1NpemV8fCh0Ll9pbml0aWFsQXV0b1NpemU9e3dpZHRoOm4saGVpZ2h0Oml9KSx4LnNhbml0aXplTWFyZ2lucyhyKX0seC5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLHMsbD1vLmNvbXBvbmVudHNSZWdpc3RyeSx1PWUuX2Jhc2VQbG90TW9kdWxlcyxmPW8uc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW47Zm9yKGkgaW4gbCkocz1sW2ldKS5pbmNsdWRlQmFzZVBsb3QmJnMuaW5jbHVkZUJhc2VQbG90KHQsZSk7Zm9yKHZhciBoIGluIHUubGVuZ3RofHx1LnB1c2goZiksZS5faGFzKCJjYXJ0ZXNpYW4iKSYmKG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJncmlkIiwiY29udGVudERlZmF1bHRzIikodCxlKSxmLmZpbmFsaXplU3VicGxvdHModCxlKSksZS5fc3VicGxvdHMpZS5fc3VicGxvdHNbaF0uc29ydChjLnN1YnBsb3RTb3J0KTtmb3IoYT0wO2E8dS5sZW5ndGg7YSsrKShzPXVbYV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKTt2YXIgcD1lLl9tb2R1bGVzO2ZvcihhPTA7YTxwLmxlbmd0aDthKyspKHM9cFthXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJnMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBkPWUuX3RyYW5zZm9ybU1vZHVsZXM7Zm9yKGE9MDthPGQubGVuZ3RoO2ErKykocz1kW2FdKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscixuKTtmb3IoaSBpbiBsKShzPWxbaV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0seC5wdXJnZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0fHx7fTt2b2lkIDAhPT1lLl9nbGNvbnRhaW5lciYmKGUuX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLnJlbW92ZSgpLGUuX2dsY29udGFpbmVyLnJlbW92ZSgpLGUuX2dsY2FudmFzPW51bGwpLGUuX21vZGVCYXImJmUuX21vZGVCYXIuZGVzdHJveSgpLHQuX3RyYW5zaXRpb25EYXRhJiYodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyYmKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MubGVuZ3RoPTApLHQuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0Ll90cmFuc2l0aW9uRGF0YS5fYW5pbWF0aW9uUmFmKSksYy5jbGVhclRocm90dGxlKCksYy5jbGVhclJlc3BvbnNpdmUodCksZGVsZXRlIHQuZGF0YSxkZWxldGUgdC5sYXlvdXQsZGVsZXRlIHQuX2Z1bGxEYXRhLGRlbGV0ZSB0Ll9mdWxsTGF5b3V0LGRlbGV0ZSB0LmNhbGNkYXRhLGRlbGV0ZSB0LmZyYW1ld29yayxkZWxldGUgdC5lbXB0eSxkZWxldGUgdC5maWQsZGVsZXRlIHQudW5kb3F1ZXVlLGRlbGV0ZSB0LnVuZG9udW0sZGVsZXRlIHQuYXV0b3BsYXksZGVsZXRlIHQuY2hhbmdlZCxkZWxldGUgdC5fcHJvbWlzZXMsZGVsZXRlIHQuX3JlZHJhd1RpbWVyLGRlbGV0ZSB0Ll9obWx1bWNvdW50LGRlbGV0ZSB0Ll9obXBpeGNvdW50LGRlbGV0ZSB0Ll90cmFuc2l0aW9uRGF0YSxkZWxldGUgdC5fdHJhbnNpdGlvbmluZyxkZWxldGUgdC5faW5pdGlhbEF1dG9TaXplLGRlbGV0ZSB0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uLGRlbGV0ZSB0Ll9kcmFnZ2luZyxkZWxldGUgdC5fZHJhZ2dlZCxkZWxldGUgdC5fZHJhZ2RhdGEsZGVsZXRlIHQuX2hvdmVyZGF0YSxkZWxldGUgdC5fc25hcHNob3RJblByb2dyZXNzLGRlbGV0ZSB0Ll9lZGl0aW5nLGRlbGV0ZSB0Ll9tb3VzZURvd25UaW1lLGRlbGV0ZSB0Ll9sZWdlbmRNb3VzZURvd25UaW1lLHQucmVtb3ZlQWxsTGlzdGVuZXJzJiZ0LnJlbW92ZUFsbExpc3RlbmVycygpfSx4LnN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5fZnVsbExheW91dC5fdmlzaWJsZU1vZHVsZXMsbj1bXTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgaT1yW2VdO2kuc3R5bGUmJmMucHVzaFVuaXF1ZShuLGkuc3R5bGUpfWZvcihlPTA7ZTxuLmxlbmd0aDtlKyspbltlXSh0KX0seC5zYW5pdGl6ZU1hcmdpbnM9ZnVuY3Rpb24odCl7aWYodCYmdC5tYXJnaW4pe3ZhciBlLHI9dC53aWR0aCxuPXQuaGVpZ2h0LGk9dC5tYXJnaW4sYT1yLShpLmwraS5yKSxvPW4tKGkudCtpLmIpO2E8MCYmKGU9KHItMSkvKGkubCtpLnIpLGkubD1NYXRoLmZsb29yKGUqaS5sKSxpLnI9TWF0aC5mbG9vcihlKmkucikpLG88MCYmKGU9KG4tMSkvKGkudCtpLmIpLGkudD1NYXRoLmZsb29yKGUqaS50KSxpLmI9TWF0aC5mbG9vcihlKmkuYikpfX0seC5jbGVhckF1dG9NYXJnaW5JZHM9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcHVzaG1hcmdpbklkcz17fX0seC5hbGxvd0F1dG9NYXJnaW49ZnVuY3Rpb24odCxlKXt0Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2luSWRzW2VdPTF9O3guYXV0b01hcmdpbj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxpPW4ud2lkdGgsYT1uLmhlaWdodCxvPW4ubWFyZ2luLHM9Yy5jb25zdHJhaW4oaS1vLmwtby5yLDIsNjQpLGw9Yy5jb25zdHJhaW4oYS1vLnQtby5iLDIsNjQpLHU9TWF0aC5tYXgoMCxpLXMpLGY9TWF0aC5tYXgoMCxhLWwpLGg9bi5fcHVzaG1hcmdpbixwPW4uX3B1c2htYXJnaW5JZHM7aWYoITEhPT1vLmF1dG9leHBhbmQpe2lmKHIpe3ZhciBkPXIucGFkO2lmKHZvaWQgMD09PWQmJihkPU1hdGgubWluKDEyLG8ubCxvLnIsby50LG8uYikpLHUpe3ZhciBnPShyLmwrci5yKS91O2c+MSYmKHIubC89ZyxyLnIvPWcpfWlmKGYpe3ZhciBtPShyLnQrci5iKS9mO20+MSYmKHIudC89bSxyLmIvPW0pfXZhciB2PXZvaWQgMCE9PXIueGw/ci54bDpyLngseT12b2lkIDAhPT1yLnhyP3IueHI6ci54LGI9dm9pZCAwIT09ci55dD9yLnl0OnIueSxfPXZvaWQgMCE9PXIueWI/ci55YjpyLnk7aFtlXT17bDp7dmFsOnYsc2l6ZTpyLmwrZH0scjp7dmFsOnksc2l6ZTpyLnIrZH0sYjp7dmFsOl8sc2l6ZTpyLmIrZH0sdDp7dmFsOmIsc2l6ZTpyLnQrZH19LHBbZV09MX1lbHNlIGRlbGV0ZSBoW2VdLGRlbGV0ZSBwW2VdO2lmKCFuLl9yZXBsb3R0aW5nKXJldHVybiB4LmRvQXV0b01hcmdpbih0KX19LHguZG9BdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLndpZHRoLG49ZS5oZWlnaHQ7ZS5fc2l6ZXx8KGUuX3NpemU9e30pLEMoZSk7dmFyIGk9ZS5fc2l6ZSxzPWUubWFyZ2luLGw9Yy5leHRlbmRGbGF0KHt9LGkpLHU9cy5sLGY9cy5yLHA9cy50LGQ9cy5iLGc9ZS5fcHVzaG1hcmdpbixtPWUuX3B1c2htYXJnaW5JZHM7aWYoITEhPT1lLm1hcmdpbi5hdXRvZXhwYW5kKXtmb3IodmFyIHYgaW4gZyltW3ZdfHxkZWxldGUgZ1t2XTtmb3IodmFyIHkgaW4gZy5iYXNlPXtsOnt2YWw6MCxzaXplOnV9LHI6e3ZhbDoxLHNpemU6Zn0sdDp7dmFsOjEsc2l6ZTpwfSxiOnt2YWw6MCxzaXplOmR9fSxnKXt2YXIgYj1nW3ldLmx8fHt9LF89Z1t5XS5ifHx7fSx3PWIudmFsLFQ9Yi5zaXplLGs9Xy52YWwsTT1fLnNpemU7Zm9yKHZhciBBIGluIGcpe2lmKGEoVCkmJmdbQV0ucil7dmFyIFM9Z1tBXS5yLnZhbCxFPWdbQV0uci5zaXplO2lmKFM+dyl7dmFyIEw9KFQqUysoRS1yKSp3KS8oUy13KSxJPShFKigxLXcpKyhULXIpKigxLVMpKS8oUy13KTtMK0k+dStmJiYodT1MLGY9SSl9fWlmKGEoTSkmJmdbQV0udCl7dmFyIFA9Z1tBXS50LnZhbCx6PWdbQV0udC5zaXplO2lmKFA+ayl7dmFyIE89KE0qUCsoei1uKSprKS8oUC1rKSxEPSh6KigxLWspKyhNLW4pKigxLVApKS8oUC1rKTtPK0Q+ZCtwJiYoZD1PLHA9RCl9fX19fXZhciBSPWMuY29uc3RyYWluKHItcy5sLXMuciwyLDY0KSxGPWMuY29uc3RyYWluKG4tcy50LXMuYiwyLDY0KSxCPU1hdGgubWF4KDAsci1SKSxOPU1hdGgubWF4KDAsbi1GKTtpZihCKXt2YXIgaj0odStmKS9CO2o+MSYmKHUvPWosZi89ail9aWYoTil7dmFyIFU9KGQrcCkvTjtVPjEmJihkLz1VLHAvPVUpfWlmKGkubD1NYXRoLnJvdW5kKHUpLGkucj1NYXRoLnJvdW5kKGYpLGkudD1NYXRoLnJvdW5kKHApLGkuYj1NYXRoLnJvdW5kKGQpLGkucD1NYXRoLnJvdW5kKHMucGFkKSxpLnc9TWF0aC5yb3VuZChyKS1pLmwtaS5yLGkuaD1NYXRoLnJvdW5kKG4pLWkudC1pLmIsIWUuX3JlcGxvdHRpbmcmJnguZGlkTWFyZ2luQ2hhbmdlKGwsaSkpeyJfcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudCJpbiBlP2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQrKzplLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50PTE7dmFyIFY9MyooMStPYmplY3Qua2V5cyhtKS5sZW5ndGgpO2lmKGUuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQ8VilyZXR1cm4gby5jYWxsKCJwbG90Iix0KTtlLl9zaXplPWwsYy53YXJuKCJUb28gbWFueSBhdXRvLW1hcmdpbiByZWRyYXdzLiIpfSFmdW5jdGlvbih0KXtmb3IodmFyIGU9aC5saXN0KHQsIiIsITApLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXS5faGlkZU91dE9mUmFuZ2VJbnNpZGVUaWNrTGFiZWxzO24mJm4oKX19KHQpfTt2YXIgTD1bImwiLCJyIiwidCIsImIiLCJwIiwidyIsImgiXTtmdW5jdGlvbiBJKHQsZSxyKXt2YXIgbj0hMTt2YXIgaT1beC5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYodC5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuIHQuX3RyYW5zaXRpb25pbmc9ITEsZnVuY3Rpb24odCl7dmFyIGU9UHJvbWlzZS5yZXNvbHZlKCk7aWYoIXQpcmV0dXJuIGU7Zm9yKDt0Lmxlbmd0aDspZT1lLnRoZW4odC5zaGlmdCgpKTtyZXR1cm4gZX0odC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyl9LHIucHJlcGFyZUZuLHgucmVob3ZlcixmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV90cmFuc2l0aW9uaW5nIixbXSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKGkpe3QuX3RyYW5zaXRpb25pbmc9ITAsZS5kdXJhdGlvbj4wJiYodC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbj0hMCksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe249ITB9KSksci5yZWRyYXcmJnQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gby5jYWxsKCJyZWRyYXciLHQpfSkpLHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaCgoZnVuY3Rpb24oKXt0LmVtaXQoInBsb3RseV90cmFuc2l0aW9uaW50ZXJydXB0ZWQiLFtdKX0pKTt2YXIgYT0wLHM9MDtmdW5jdGlvbiBsKCl7cmV0dXJuIGErKyxmdW5jdGlvbigpe3MrKyxufHxzIT09YXx8ZnVuY3Rpb24oZSl7aWYoIXQuX3RyYW5zaXRpb25EYXRhKXJldHVybjsoZnVuY3Rpb24odCl7aWYodClmb3IoO3QubGVuZ3RoOyl0LnNoaWZ0KCl9KSh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKChmdW5jdGlvbigpe2lmKHIucmVkcmF3KXJldHVybiBvLmNhbGwoInJlZHJhdyIsdCl9KSkudGhlbigoZnVuY3Rpb24oKXt0Ll90cmFuc2l0aW9uaW5nPSExLHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb249ITEsdC5lbWl0KCJwbG90bHlfdHJhbnNpdGlvbmVkIixbXSl9KSkudGhlbihlKX0oaSl9fXIucnVuRm4obCksc2V0VGltZW91dChsKCkpfSkpfV0sYT1jLnN5bmNPckFzeW5jKGksdCk7cmV0dXJuIGEmJmEudGhlbnx8KGE9UHJvbWlzZS5yZXNvbHZlKCkpLGEudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX14LmRpZE1hcmdpbkNoYW5nZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8TC5sZW5ndGg7cisrKXt2YXIgbj1MW3JdLGk9dFtuXSxvPWVbbl07aWYoIWEoaSl8fE1hdGguYWJzKG8taSk+MSlyZXR1cm4hMH1yZXR1cm4hMX0seC5ncmFwaEpzb249ZnVuY3Rpb24odCxlLHIsbixpLGEpeyhpJiZlJiYhdC5fZnVsbERhdGF8fGkmJiFlJiYhdC5fZnVsbExheW91dCkmJnguc3VwcGx5RGVmYXVsdHModCk7dmFyIG89aT90Ll9mdWxsRGF0YTp0LmRhdGEscz1pP3QuX2Z1bGxMYXlvdXQ6dC5sYXlvdXQsbD0odC5fdHJhbnNpdGlvbkRhdGF8fHt9KS5fZnJhbWVzO2Z1bmN0aW9uIHUodCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gZT8iX2Z1bmN0aW9uXyI6bnVsbDtpZihjLmlzUGxhaW5PYmplY3QodCkpe3ZhciBuLGk9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLnNvcnQoKS5mb3JFYWNoKChmdW5jdGlvbihhKXtpZigtMT09PVsiXyIsIlsiXS5pbmRleE9mKGEuY2hhckF0KDApKSlpZigiZnVuY3Rpb24iIT10eXBlb2YgdFthXSl7aWYoImtlZXBkYXRhIj09PXIpe2lmKCJzcmMiPT09YS5zdWJzdHIoYS5sZW5ndGgtMykpcmV0dXJufWVsc2UgaWYoImtlZXBzdHJlYW0iPT09cil7aWYoInN0cmluZyI9PXR5cGVvZihuPXRbYSsic3JjIl0pJiZuLmluZGV4T2YoIjoiKT4wJiYhYy5pc1BsYWluT2JqZWN0KHQuc3RyZWFtKSlyZXR1cm59ZWxzZSBpZigia2VlcGFsbCIhPT1yJiYic3RyaW5nIj09dHlwZW9mKG49dFthKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjApcmV0dXJuO2lbYV09dSh0W2FdLGUpfWVsc2UgZSYmKGlbYV09Il9mdW5jdGlvbiIpfSkpLGl9cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB1KHQsZSl9KSk6Yy5pc1R5cGVkQXJyYXkodCk/Yy5zaW1wbGVNYXAodCxjLmlkZW50aXR5KTpjLmlzSlNEYXRlKHQpP2MubXMyRGF0ZVRpbWVMb2NhbCgrdCk6dH12YXIgZj17ZGF0YToob3x8W10pLm1hcCgoZnVuY3Rpb24odCl7dmFyIHI9dSh0KTtyZXR1cm4gZSYmZGVsZXRlIHIuZml0LHJ9KSl9O2lmKCFlJiYoZi5sYXlvdXQ9dShzKSxpKSl7dmFyIGg9cy5fc2l6ZTtmLmxheW91dC5jb21wdXRlZD17bWFyZ2luOntiOmguYixsOmgubCxyOmgucix0OmgudH19fXJldHVybiB0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKGY9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpLGwmJihmLmZyYW1lcz11KGwpKSxhJiYoZi5jb25maWc9dSh0Ll9jb250ZXh0LCEwKSksIm9iamVjdCI9PT1uP2Y6SlNPTi5zdHJpbmdpZnkoZil9LHgubW9kaWZ5RnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxvPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylzd2l0Y2goKG49ZVtyXSkudHlwZSl7Y2FzZSJyZXBsYWNlIjppPW4udmFsdWU7dmFyIHM9KGFbbi5pbmRleF18fHt9KS5uYW1lLGw9aS5uYW1lO2Fbbi5pbmRleF09b1tsXT1pLGwhPT1zJiYoZGVsZXRlIG9bc10sb1tsXT1pKTticmVhaztjYXNlImluc2VydCI6b1soaT1uLnZhbHVlKS5uYW1lXT1pLGEuc3BsaWNlKG4uaW5kZXgsMCxpKTticmVhaztjYXNlImRlbGV0ZSI6ZGVsZXRlIG9bKGk9YVtuLmluZGV4XSkubmFtZV0sYS5zcGxpY2Uobi5pbmRleCwxKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LHguY29tcHV0ZUZyYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2lmKCFlKXRocm93IG5ldyBFcnJvcigiY29tcHV0ZUZyYW1lIG11c3QgYmUgZ2l2ZW4gYSBzdHJpbmcgZnJhbWUgbmFtZSIpO3ZhciBzPW9bZS50b1N0cmluZygpXTtpZighcylyZXR1cm4hMTtmb3IodmFyIGw9W3NdLGM9W3MubmFtZV07cy5iYXNlZnJhbWUmJihzPW9bcy5iYXNlZnJhbWUudG9TdHJpbmcoKV0pJiYtMT09PWMuaW5kZXhPZihzLm5hbWUpOylsLnB1c2gocyksYy5wdXNoKHMubmFtZSk7Zm9yKHZhciB1PXt9O3M9bC5wb3AoKTspaWYocy5sYXlvdXQmJih1LmxheW91dD14LmV4dGVuZExheW91dCh1LmxheW91dCxzLmxheW91dCkpLHMuZGF0YSl7aWYodS5kYXRhfHwodS5kYXRhPVtdKSwhKG49cy50cmFjZXMpKWZvcihuPVtdLHI9MDtyPHMuZGF0YS5sZW5ndGg7cisrKW5bcl09cjtmb3IodS50cmFjZXN8fCh1LnRyYWNlcz1bXSkscj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbnVsbCE9KGk9bltyXSkmJigtMT09PShhPXUudHJhY2VzLmluZGV4T2YoaSkpJiYoYT11LmRhdGEubGVuZ3RoLHUudHJhY2VzW2FdPWkpLHUuZGF0YVthXT14LmV4dGVuZFRyYWNlKHUuZGF0YVthXSxzLmRhdGFbcl0pKX1yZXR1cm4gdX0seC5yZWNvbXB1dGVGcmFtZUhhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30scj10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpJiZpLm5hbWUmJihlW2kubmFtZV09aSl9fSx4LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsdSxmPWMuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LGV8fHt9KSxoPWMuZXhwYW5kT2JqZWN0UGF0aHMoZikscD17fTtpZihyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKXZvaWQgMD09PShpPShuPWMubmVzdGVkUHJvcGVydHkoaCxyW2FdKSkuZ2V0KCkpP2MubmVzdGVkUHJvcGVydHkocCxyW2FdKS5zZXQobnVsbCk6KG4uc2V0KG51bGwpLGMubmVzdGVkUHJvcGVydHkocCxyW2FdKS5zZXQoaSkpO2lmKHQ9Yy5leHRlbmREZWVwTm9BcnJheXModHx8e30saCksciYmci5sZW5ndGgpZm9yKGE9MDthPHIubGVuZ3RoO2ErKylpZihsPWMubmVzdGVkUHJvcGVydHkocCxyW2FdKS5nZXQoKSl7Zm9yKHU9KHM9Yy5uZXN0ZWRQcm9wZXJ0eSh0LHJbYV0pKS5nZXQoKSxBcnJheS5pc0FycmF5KHUpfHwodT1bXSxzLnNldCh1KSksbz0wO288bC5sZW5ndGg7bysrKXt2YXIgZD1sW29dO3Vbb109bnVsbD09PWQ/bnVsbDp4LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHVbb10sZCl9cy5zZXQodSl9cmV0dXJuIHR9LHguZGF0YUFycmF5Q29udGFpbmVycz1bInRyYW5zZm9ybXMiLCJkaW1lbnNpb25zIl0seC5sYXlvdXRBcnJheUNvbnRhaW5lcnM9by5sYXlvdXRBcnJheUNvbnRhaW5lcnMseC5leHRlbmRUcmFjZT1mdW5jdGlvbih0LGUpe3JldHVybiB4LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHQsZSx4LmRhdGFBcnJheUNvbnRhaW5lcnMpfSx4LmV4dGVuZExheW91dD1mdW5jdGlvbih0LGUpe3JldHVybiB4LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHQsZSx4LmxheW91dEFycmF5Q29udGFpbmVycyl9LHgudHJhbnNpdGlvbj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89e3JlZHJhdzppLnJlZHJhd30scz17fSxsPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe2Zvcih2YXIgaT1BcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoOjAsYT1uLnNsaWNlKDAsaSksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgdT1hW29dLGY9dC5fZnVsbERhdGFbdV0uX21vZHVsZTtpZihmKXtpZihmLmFuaW1hdGFibGUpe3ZhciBoPWYuYmFzZVBsb3RNb2R1bGUubmFtZTtzW2hdfHwoc1toXT1bXSksc1toXS5wdXNoKHUpfXQuZGF0YVthW29dXT14LmV4dGVuZFRyYWNlKHQuZGF0YVthW29dXSxlW29dKX19dmFyIHA9Yy5leHBhbmRPYmplY3RQYXRocyhjLmV4dGVuZERlZXBOb0FycmF5cyh7fSxyKSksZD0vXlt4eV1heGlzWzAtOV0qJC87Zm9yKHZhciBnIGluIHApZC50ZXN0KGcpJiZkZWxldGUgcFtnXS5yYW5nZTt4LmV4dGVuZExheW91dCh0LmxheW91dCxwKSxkZWxldGUgdC5jYWxjZGF0YSx4LnN1cHBseURlZmF1bHRzKHQpLHguZG9DYWxjZGF0YSh0KTt2YXIgbT1jLmV4cGFuZE9iamVjdFBhdGhzKHIpO2lmKG0pe3ZhciB2PXQuX2Z1bGxMYXlvdXQuX3Bsb3RzO2Zvcih2YXIgeSBpbiB2KXt2YXIgYj12W3ldLF89Yi54YXhpcyx3PWIueWF4aXMsVD1fLnJhbmdlLnNsaWNlKCksaz13LnJhbmdlLnNsaWNlKCksTT1udWxsLEE9bnVsbCxTPW51bGwsRT1udWxsO0FycmF5LmlzQXJyYXkobVtfLl9uYW1lKyIucmFuZ2UiXSk/TT1tW18uX25hbWUrIi5yYW5nZSJdLnNsaWNlKCk6QXJyYXkuaXNBcnJheSgobVtfLl9uYW1lXXx8e30pLnJhbmdlKSYmKE09bVtfLl9uYW1lXS5yYW5nZS5zbGljZSgpKSxBcnJheS5pc0FycmF5KG1bdy5fbmFtZSsiLnJhbmdlIl0pP0E9bVt3Ll9uYW1lKyIucmFuZ2UiXS5zbGljZSgpOkFycmF5LmlzQXJyYXkoKG1bdy5fbmFtZV18fHt9KS5yYW5nZSkmJihBPW1bdy5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSksVCYmTSYmKF8ucjJsKFRbMF0pIT09Xy5yMmwoTVswXSl8fF8ucjJsKFRbMV0pIT09Xy5yMmwoTVsxXSkpJiYoUz17eHIwOlQseHIxOk19KSxrJiZBJiYody5yMmwoa1swXSkhPT13LnIybChBWzBdKXx8dy5yMmwoa1sxXSkhPT13LnIybChBWzFdKSkmJihFPXt5cjA6ayx5cjE6QX0pLChTfHxFKSYmbC5wdXNoKGMuZXh0ZW5kRmxhdCh7cGxvdGluZm86Yn0sUyxFKSl9fXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbihlKXt2YXIgbixpLG89dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLHU9bC5sZW5ndGg7aWYocilmb3IoaT0wO2k8by5sZW5ndGg7aSsrKW9baV0udHJhbnNpdGlvbkF4ZXMmJm9baV0udHJhbnNpdGlvbkF4ZXModCxsLGEsZSk7Zm9yKHZhciBmIGluIHU/KChuPWMuZXh0ZW5kRmxhdCh7fSxhKSkuZHVyYXRpb249MCxkZWxldGUgcy5jYXJ0ZXNpYW4pOm49YSxzKXt2YXIgaD1zW2ZdO3QuX2Z1bGxEYXRhW2hbMF1dLl9tb2R1bGUuYmFzZVBsb3RNb2R1bGUucGxvdCh0LGgsbixlKX19LEkodCxhLG8pfSx4LnRyYW5zaXRpb25Gcm9tUmVhY3Q9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fZnVsbExheW91dCxhPWkudHJhbnNpdGlvbixvPXt9LHM9W107cmV0dXJuIG8ucHJlcGFyZUZuPWZ1bmN0aW9uKCl7dmFyIHQ9aS5fcGxvdHM7Zm9yKHZhciBhIGluIG8ucmVkcmF3PSExLCJzb21lIj09PWUuYW5pbSYmKG8ucmVkcmF3PSEwKSwic29tZSI9PT1yLmFuaW0mJihvLnJlZHJhdz0hMCksdCl7dmFyIGw9dFthXSx1PWwueGF4aXMsZj1sLnlheGlzLGg9blt1Ll9uYW1lXS5yYW5nZS5zbGljZSgpLHA9bltmLl9uYW1lXS5yYW5nZS5zbGljZSgpLGQ9dS5yYW5nZS5zbGljZSgpLGc9Zi5yYW5nZS5zbGljZSgpO3Uuc2V0U2NhbGUoKSxmLnNldFNjYWxlKCk7dmFyIG09bnVsbCx2PW51bGw7dS5yMmwoaFswXSk9PT11LnIybChkWzBdKSYmdS5yMmwoaFsxXSk9PT11LnIybChkWzFdKXx8KG09e3hyMDpoLHhyMTpkfSksZi5yMmwocFswXSk9PT1mLnIybChnWzBdKSYmZi5yMmwocFsxXSk9PT1mLnIybChnWzFdKXx8KHY9e3lyMDpwLHlyMTpnfSksKG18fHYpJiZzLnB1c2goYy5leHRlbmRGbGF0KHtwbG90aW5mbzpsfSxtLHYpKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LG8ucnVuRm49ZnVuY3Rpb24ocil7Zm9yKHZhciBuLGksbyxsPXQuX2Z1bGxEYXRhLHU9dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLGY9W10saD0wO2g8bC5sZW5ndGg7aCsrKWYucHVzaChoKTtmdW5jdGlvbiBwKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdVtlXS50cmFuc2l0aW9uQXhlcyYmdVtlXS50cmFuc2l0aW9uQXhlcyh0LHMsbixyKX1mdW5jdGlvbiBkKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdVtlXS5wbG90KHQsbyxpLHIpfXMubGVuZ3RoJiZlLmFuaW0/InRyYWNlcyBmaXJzdCI9PT1hLm9yZGVyaW5nPyhuPWMuZXh0ZW5kRmxhdCh7fSxhLHtkdXJhdGlvbjowfSksbz1mLGk9YSxzZXRUaW1lb3V0KHAsYS5kdXJhdGlvbiksZCgpKToobj1hLG89bnVsbCxpPWMuZXh0ZW5kRmxhdCh7fSxhLHtkdXJhdGlvbjowfSksc2V0VGltZW91dChkLG4uZHVyYXRpb24pLHAoKSk6cy5sZW5ndGg/KG49YSxwKCkpOmUuYW5pbSYmKG89ZixpPWEsZCgpKX0sSSh0LGEsbyl9LHguZG9DYWxjZGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLGw9aC5saXN0KHQpLHU9dC5fZnVsbERhdGEscD10Ll9mdWxsTGF5b3V0LGQ9bmV3IEFycmF5KHUubGVuZ3RoKSxnPSh0LmNhbGNkYXRhfHxbXSkuc2xpY2UoKTtmb3IodC5jYWxjZGF0YT1kLHAuX251bUJveGVzPTAscC5fbnVtVmlvbGlucz0wLHAuX3Zpb2xpblNjYWxlR3JvdXBTdGF0cz17fSx0Ll9obXBpeGNvdW50PTAsdC5faG1sdW1jb3VudD0wLHAuX3BpZWNvbG9ybWFwPXt9LHAuX3N1bmJ1cnN0Y29sb3JtYXA9e30scC5fdHJlZW1hcGNvbG9ybWFwPXt9LHAuX2Z1bm5lbGFyZWFjb2xvcm1hcD17fSxpPTA7aTx1Lmxlbmd0aDtpKyspQXJyYXkuaXNBcnJheShlKSYmLTE9PT1lLmluZGV4T2YoaSkmJihkW2ldPWdbaV0pO2ZvcihpPTA7aTx1Lmxlbmd0aDtpKyspKHI9dVtpXSkuX2FycmF5QXR0cnM9cy5maW5kQXJyYXlBdHRyaWJ1dGVzKHIpLHIuX2V4dHJlbWVzPXt9O3ZhciBtPXAuX3N1YnBsb3RzLnBvbGFyfHxbXTtmb3IoaT0wO2k8bS5sZW5ndGg7aSsrKWwucHVzaChwW21baV1dLnJhZGlhbGF4aXMscFttW2ldXS5hbmd1bGFyYXhpcyk7Zm9yKHZhciB2IGluIHAuX2NvbG9yQXhlcyl7dmFyIHk9cFt2XTshMSE9PXkuY2F1dG8mJihkZWxldGUgeS5jbWluLGRlbGV0ZSB5LmNtYXgpfXZhciB4PSExO2Z1bmN0aW9uIF8oZSl7aWYocj11W2VdLG49ci5fbW9kdWxlLCEwPT09ci52aXNpYmxlJiZyLnRyYW5zZm9ybXMpe2lmKG4mJm4uY2FsYyl7dmFyIGk9bi5jYWxjKHQscik7aVswXSYmaVswXS50JiZpWzBdLnQuX3NjZW5lJiZkZWxldGUgaVswXS50Ll9zY2VuZS5kaXJ0eX1mb3IoYT0wO2E8ci50cmFuc2Zvcm1zLmxlbmd0aDthKyspe3ZhciBvPXIudHJhbnNmb3Jtc1thXTsobj1iW28udHlwZV0pJiZuLmNhbGNUcmFuc2Zvcm0mJihyLl9oYXNDYWxjVHJhbnNmb3JtPSEwLHg9ITAsbi5jYWxjVHJhbnNmb3JtKHQscixvKSl9fX1mdW5jdGlvbiB3KGUsaSl7aWYocj11W2VdLCEhKG49ci5fbW9kdWxlKS5pc0NvbnRhaW5lcj09PWkpe3ZhciBvPVtdO2lmKCEwPT09ci52aXNpYmxlJiYwIT09ci5fbGVuZ3RoKXtkZWxldGUgci5faW5kZXhUb1BvaW50czt2YXIgcz1yLnRyYW5zZm9ybXN8fFtdO2ZvcihhPXMubGVuZ3RoLTE7YT49MDthLS0paWYoc1thXS5lbmFibGVkKXtyLl9pbmRleFRvUG9pbnRzPXNbYV0uX2luZGV4VG9Qb2ludHM7YnJlYWt9biYmbi5jYWxjJiYobz1uLmNhbGModCxyKSl9QXJyYXkuaXNBcnJheShvKSYmb1swXXx8KG89W3t4OmYseTpmfV0pLG9bMF0udHx8KG9bMF0udD17fSksb1swXS50cmFjZT1yLGRbZV09b319Zm9yKHoobCx1LHApLGk9MDtpPHUubGVuZ3RoO2krKyl3KGksITApO2ZvcihpPTA7aTx1Lmxlbmd0aDtpKyspXyhpKTtmb3IoeCYmeihsLHUscCksaT0wO2k8dS5sZW5ndGg7aSsrKXcoaSwhMCk7Zm9yKGk9MDtpPHUubGVuZ3RoO2krKyl3KGksITEpO08odCk7dmFyIFQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxzLGw9W107ZnVuY3Rpb24gdSh0LHIsbil7dmFyIGk9ci5faWQuY2hhckF0KDApO2lmKCJoaXN0b2dyYW0yZGNvbnRvdXIiPT09dCl7dmFyIGE9ci5fY291bnRlckF4ZXNbMF0sbz1oLmdldEZyb21JZChlLGEpLHM9IngiPT09aXx8IngiPT09YSYmImNhdGVnb3J5Ij09PW8udHlwZSxsPSJ5Ij09PWl8fCJ5Ij09PWEmJiJjYXRlZ29yeSI9PT1vLnR5cGU7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10fHwwPT09ZXx8cyYmdD09PW5bZV0ubGVuZ3RoLTF8fGwmJmU9PT1uLmxlbmd0aC0xPy0xOigieSI9PT1pP2U6dCktMX19cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuInkiPT09aT9lOnR9fXZhciBmPXttaW46ZnVuY3Rpb24odCl7cmV0dXJuIGMuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQpfSxtYXg6ZnVuY3Rpb24odCl7cmV0dXJuIGMuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQpfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIGMuYWdnTnVtcygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSksbnVsbCx0KX0sdG90YWw6ZnVuY3Rpb24odCl7cmV0dXJuIGMuYWdnTnVtcygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSksbnVsbCx0KX0sbWVhbjpmdW5jdGlvbih0KXtyZXR1cm4gYy5tZWFuKHQpfSxtZWRpYW46ZnVuY3Rpb24odCl7cmV0dXJuIGMubWVkaWFuKHQpfX07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIHA9dFtyXTtpZigiY2F0ZWdvcnkiPT09cC50eXBlKXt2YXIgZD1wLmNhdGVnb3J5b3JkZXIubWF0Y2goUCk7aWYoZCl7dmFyIGc9ZFsxXSxtPWRbMl0sdj1wLl9pZC5jaGFyQXQoMCkseT0ieCI9PT12LHg9W107Zm9yKG49MDtuPHAuX2NhdGVnb3JpZXMubGVuZ3RoO24rKyl4LnB1c2goW3AuX2NhdGVnb3JpZXNbbl0sW11dKTtmb3Iobj0wO248cC5fdHJhY2VJbmRpY2VzLmxlbmd0aDtuKyspe3ZhciBiPXAuX3RyYWNlSW5kaWNlc1tuXSxfPWUuX2Z1bGxEYXRhW2JdO2lmKCEwPT09Xy52aXNpYmxlKXt2YXIgdz1fLnR5cGU7by50cmFjZUlzKF8sImhpc3RvZ3JhbSIpJiYoZGVsZXRlIF8uX3hhdXRvQmluRmluaXNoZWQsZGVsZXRlIF8uX3lhdXRvQmluRmluaXNoZWQpO3ZhciBUPSJzcGxvbSI9PT13LGs9InNjYXR0ZXJnbCI9PT13LE09ZS5jYWxjZGF0YVtiXTtmb3IoaT0wO2k8TS5sZW5ndGg7aSsrKXt2YXIgQSxTLEU9TVtpXTtpZihUKXt2YXIgQz1fLl9heGVzRGltW3AuX2lkXTtpZigheSl7dmFyIEw9Xy5fZGlhZ1tDXVswXTtMJiYocD1lLl9mdWxsTGF5b3V0W2guaWQybmFtZShMKV0pfXZhciBJPUUudHJhY2UuZGltZW5zaW9uc1tDXS52YWx1ZXM7Zm9yKGE9MDthPEkubGVuZ3RoO2ErKylmb3IoQT1wLl9jYXRlZ29yaWVzTWFwW0lbYV1dLHM9MDtzPEUudHJhY2UuZGltZW5zaW9ucy5sZW5ndGg7cysrKWlmKHMhPT1DKXt2YXIgej1FLnRyYWNlLmRpbWVuc2lvbnNbc107eFtBXVsxXS5wdXNoKHoudmFsdWVzW2FdKX19ZWxzZSBpZihrKXtmb3IoYT0wO2E8RS50LngubGVuZ3RoO2ErKyl5PyhBPUUudC54W2FdLFM9RS50LnlbYV0pOihBPUUudC55W2FdLFM9RS50LnhbYV0pLHhbQV1bMV0ucHVzaChTKTtFLnQmJkUudC5fc2NlbmUmJmRlbGV0ZSBFLnQuX3NjZW5lLmRpcnR5fWVsc2UgaWYoRS5oYXNPd25Qcm9wZXJ0eSgieiIpKXtTPUUuejt2YXIgTz11KF8udHlwZSxwLFMpO2ZvcihhPTA7YTxTLmxlbmd0aDthKyspZm9yKHM9MDtzPFNbYV0ubGVuZ3RoO3MrKykoQT1PKHMsYSkpKzEmJnhbQV1bMV0ucHVzaChTW2FdW3NdKX1lbHNlIGZvcih2b2lkIDA9PT0oQT1FLnApJiYoQT1FW3ZdKSx2b2lkIDA9PT0oUz1FLnMpJiYoUz1FLnYpLHZvaWQgMD09PVMmJihTPXk/RS55OkUueCksQXJyYXkuaXNBcnJheShTKXx8KFM9dm9pZCAwPT09Uz9bXTpbU10pLGE9MDthPFMubGVuZ3RoO2ErKyl4W0FdWzFdLnB1c2goU1thXSl9fX1wLl9jYXRlZ29yaWVzVmFsdWU9eDt2YXIgRD1bXTtmb3Iobj0wO248eC5sZW5ndGg7bisrKUQucHVzaChbeFtuXVswXSxmW2ddKHhbbl1bMV0pXSk7RC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0WzFdLWVbMV19KSkscC5fY2F0ZWdvcmllc0FnZ3JlZ2F0ZWRWYWx1ZT1ELHAuX2luaXRpYWxDYXRlZ29yaWVzPUQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKSwiZGVzY2VuZGluZyI9PT1tJiZwLl9pbml0aWFsQ2F0ZWdvcmllcy5yZXZlcnNlKCksbD1sLmNvbmNhdChwLnNvcnRCeUluaXRpYWxDYXRlZ29yaWVzKCkpfX19cmV0dXJuIGx9KGwsdCk7aWYoVC5sZW5ndGgpe2ZvcihwLl9udW1Cb3hlcz0wLHAuX251bVZpb2xpbnM9MCxpPTA7aTxULmxlbmd0aDtpKyspdyhUW2ldLCEwKTtmb3IoaT0wO2k8VC5sZW5ndGg7aSsrKXcoVFtpXSwhMSk7Tyh0KX1vLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJjYWxjIikodCksby5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsImNhbGMiKSh0KX07dmFyIFA9Lyh0b3RhbHxzdW18bWlufG1heHxtZWFufG1lZGlhbikgKGFzY2VuZGluZ3xkZXNjZW5kaW5nKS87ZnVuY3Rpb24geih0LGUscil7dmFyIG49e307ZnVuY3Rpb24gaSh0KXt0LmNsZWFyQ2FsYygpLCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZSYmdC5zZXR1cE11bHRpQ2F0ZWdvcnkoZSksblt0Ll9pZF09MX1jLnNpbXBsZU1hcCh0LGkpO2Zvcih2YXIgYT1yLl9heGlzTWF0Y2hHcm91cHN8fFtdLG89MDtvPGEubGVuZ3RoO28rKylmb3IodmFyIHMgaW4gYVtvXSluW3NdfHxpKHJbaC5pZDJuYW1lKHMpXSl9ZnVuY3Rpb24gTyh0KXt2YXIgZSxyLG4saT10Ll9mdWxsTGF5b3V0LGE9aS5fdmlzaWJsZU1vZHVsZXMsbz17fTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgcz1hW3JdLGw9cy5jcm9zc1RyYWNlQ2FsYztpZihsKXt2YXIgdT1zLmJhc2VQbG90TW9kdWxlLm5hbWU7b1t1XT9jLnB1c2hVbmlxdWUob1t1XSxsKTpvW3VdPVtsXX19Zm9yKG4gaW4gbyl7dmFyIGY9b1tuXSxoPWkuX3N1YnBsb3RzW25dO2lmKEFycmF5LmlzQXJyYXkoaCkpZm9yKGU9MDtlPGgubGVuZ3RoO2UrKyl7dmFyIHA9aFtlXSxkPSJjYXJ0ZXNpYW4iPT09bj9pLl9wbG90c1twXTppW3BdO2ZvcihyPTA7cjxmLmxlbmd0aDtyKyspZltyXSh0LGQscCl9ZWxzZSBmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKWZbcl0odCl9fXgucmVob3Zlcj1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyJiZ0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyKCl9LHgucmVkcmFnPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3JlZHJhZyYmdC5fZnVsbExheW91dC5fcmVkcmFnKCl9LHguZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9ZS50cmFjZUhhc2gsbz17fTtmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgcz1yW2ldLGw9c1swXS50cmFjZTtsLnZpc2libGUmJihvW2wudHlwZV09b1tsLnR5cGVdfHxbXSxvW2wudHlwZV0ucHVzaChzKSl9Zm9yKHZhciB1IGluIGEpaWYoIW9bdV0pe3ZhciBmPWFbdV1bMF07ZlswXS50cmFjZS52aXNpYmxlPSExLG9bdV09W2ZdfWZvcih2YXIgaCBpbiBvKXt2YXIgcD1vW2hdO3BbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KHQsZSxjLmZpbHRlclZpc2libGUocCksbil9ZS50cmFjZUhhc2g9b30seC5wbG90QmFzZVBsb3Q9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1vLmdldE1vZHVsZSh0KSxzPW0oZS5jYWxjZGF0YSxhKVswXTthLnBsb3QoZSxzLG4saSl9LHguY2xlYW5CYXNlUGxvdD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWkuX2hhcyYmaS5faGFzKHQpLG89ci5faGFzJiZyLl9oYXModCk7YSYmIW8mJmlbIl8iK3QrImxheWVyIl0uc2VsZWN0QWxsKCJnLnRyYWNlIikucmVtb3ZlKCl9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi9saWIiOjc3OCwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjgxNiwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE3LCIuLi9wbG90cy9nZXRfZGF0YSI6ODY1LCIuLi9yZWdpc3RyeSI6OTExLCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo4MjIsIi4vYXR0cmlidXRlcyI6ODI0LCIuL2NhcnRlc2lhbi9heGlzX2lkcyI6ODMxLCIuL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSI6ODM4LCIuL2NvbW1hbmQiOjg1NCwiLi9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi9mcmFtZV9hdHRyaWJ1dGVzIjo4NTcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg4MixkMzoxNjksImQzLXRpbWUtZm9ybWF0IjoxNjYsImZhc3QtaXNudW1lcmljIjoyNDF9XSw4OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyOiJzdWJwbG90IixuYW1lOiJwb2xhciIsYXhpc05hbWVzOlsiYW5ndWxhcmF4aXMiLCJyYWRpYWxheGlzIl0sYXhpc05hbWUyZGF0YUFycmF5Onthbmd1bGFyYXhpczoidGhldGEiLHJhZGlhbGF4aXM6InIifSxsYXllck5hbWVzOlsiZHJhZ2xheWVyIiwicGxvdGJnIiwiYmFja3Bsb3QiLCJhbmd1bGFyLWdyaWQiLCJyYWRpYWwtZ3JpZCIsImZyb250cGxvdCIsImFuZ3VsYXItbGluZSIsInJhZGlhbC1saW5lIiwiYW5ndWxhci1heGlzIiwicmFkaWFsLWF4aXMiXSxyYWRpYWxEcmFnQm94U2l6ZTo1MCxhbmd1bGFyRHJhZ0JveFNpemU6MzAsY29ybmVyTGVuOjI1LGNvcm5lckhhbGZXaWR0aDoyLE1JTkRSQUc6OCxNSU5aT09NOjIwLE9GRkVER0U6MjB9fSx7fV0sODkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vbGliL3BvbHlnb24iKS50ZXN0ZXIsYT1uLmZpbmRJbmRleE9mTWluLG89bi5pc0FuZ2xlSW5zaWRlU2VjdG9yLHM9bi5hbmdsZURlbHRhLGw9bi5hbmdsZURpc3Q7ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgaSxhLG89blswXSxzPW5bMV0sbD1mKE1hdGguc2luKGUpLU1hdGguc2luKHQpKSxjPWYoTWF0aC5jb3MoZSktTWF0aC5jb3ModCkpLHU9TWF0aC50YW4ociksaD1mKDEvdSkscD1sL2MsZD1zLXAqbztyZXR1cm4gaD9sJiZjP2E9dSooaT1kLyh1LXApKTpjPyhpPXMqaCxhPXMpOihpPW8sYT1vKnUpOmwmJmM/KGk9MCxhPWQpOmM/KGk9MCxhPXMpOmk9YT1OYU4sW2ksYV19ZnVuY3Rpb24gdSh0LGUscixpKXtyZXR1cm4gbi5pc0Z1bGxDaXJjbGUoW2Uscl0pP2Z1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKzEpO2ZvcihyPTA7cjxuO3IrKyl7dmFyIGE9ZVtyXTtpW3JdPVt0Kk1hdGguY29zKGEpLHQqTWF0aC5zaW4oYSldfXJldHVybiBpW3JdPWlbMF0uc2xpY2UoKSxpfSh0LGkpOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBzLHUsZj1pLmxlbmd0aCxoPVtdO2Z1bmN0aW9uIHAoZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksdCpNYXRoLnNpbihlKV19ZnVuY3Rpb24gZCh0LGUscil7cmV0dXJuIGModCxlLHIscCh0KSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbi5tb2QodCxmKX1mdW5jdGlvbiBtKHQpe3JldHVybiBvKHQsW2Uscl0pfXZhciB2PWEoaSwoZnVuY3Rpb24odCl7cmV0dXJuIG0odCk/bCh0LGUpOjEvMH0pKSx5PWQoaVt2XSxpW2codi0xKV0sZSk7Zm9yKGgucHVzaCh5KSxzPXYsdT0wO3U8ZjtzKyssdSsrKXt2YXIgeD1pW2cocyldO2lmKCFtKHgpKWJyZWFrO2gucHVzaChwKHgpKX12YXIgYj1hKGksKGZ1bmN0aW9uKHQpe3JldHVybiBtKHQpP2wodCxyKToxLzB9KSksXz1kKGlbYl0saVtnKGIrMSldLHIpO3JldHVybiBoLnB1c2goXyksaC5wdXNoKFswLDBdKSxoLnB1c2goaFswXS5zbGljZSgpKSxofSh0LGUscixpKX1mdW5jdGlvbiBmKHQpe3JldHVybiBNYXRoLmFicyh0KT4xZS0xMD90OjB9ZnVuY3Rpb24gaCh0LGUscil7ZT1lfHwwLHI9cnx8MDtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT0wO2E8bjthKyspe3ZhciBvPXRbYV07aVthXT1bZStvWzBdLHItb1sxXV19cmV0dXJuIGl9ZS5leHBvcnRzPXtpc1B0SW5zaWRlUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGEpe2lmKCFvKGUsbikpcmV0dXJuITE7dmFyIHMsbDtyWzBdPHJbMV0/KHM9clswXSxsPXJbMV0pOihzPXJbMV0sbD1yWzBdKTt2YXIgYz1pKHUocyxuWzBdLG5bMV0sYSkpLGY9aSh1KGwsblswXSxuWzFdLGEpKSxoPVt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oZSldO3JldHVybiBmLmNvbnRhaW5zKGgpJiYhYy5jb250YWlucyhoKX0sZmluZFBvbHlnb25PZmZzZXQ6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTEvMCxhPTEvMCxvPXUodCxlLHIsbikscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2k9TWF0aC5taW4oaSxsWzBdKSxhPU1hdGgubWluKGEsLWxbMV0pfXJldHVybltpLGFdfSxmaW5kRW5jbG9zaW5nVmVydGV4QW5nbGVzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YShlLChmdW5jdGlvbihlKXt2YXIgcj1zKGUsdCk7cmV0dXJuIHI+MD9yOjEvMH0pKSxpPW4ubW9kKHIrMSxlLmxlbmd0aCk7cmV0dXJuW2Vbcl0sZVtpXV19LGZpbmRJbnRlcnNlY3Rpb25YWTpjLGZpbmRYWWF0TGVuZ3RoOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPS1lKnIsYT1lKmUrMSxvPTIqKGUqaS1yKSxzPWkqaStyKnItdCp0LGw9TWF0aC5zcXJ0KG8qby00KmEqcyksYz0oLW8rbCkvKDIqYSksdT0oLW8tbCkvKDIqYSk7cmV0dXJuW1tjLGUqYytpK25dLFt1LGUqdStpK25dXX0sY2xhbXBUaW55OmYscGF0aFBvbHlnb246ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiJNIitoKHUodCxlLHIsbiksaSxhKS5qb2luKCJMIil9LHBhdGhQb2x5Z29uQW5udWx1czpmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsO3Q8ZT8ocz10LGw9ZSk6KHM9ZSxsPXQpO3ZhciBjPWgodShzLHIsbixpKSxhLG8pO3JldHVybiJNIitoKHUobCxyLG4saSksYSxvKS5yZXZlcnNlKCkuam9pbigiTCIpKyJNIitjLmpvaW4oIkwiKX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvcG9seWdvbiI6NzkwfV0sODk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGk9dCgiLi4vLi4vbGliIikuY291bnRlclJlZ2V4LGE9dCgiLi9wb2xhciIpLG89dCgiLi9jb25zdGFudHMiKSxzPW8uYXR0cixsPW8ubmFtZSxjPWkobCksdT17fTt1W3NdPXt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6bCxlZGl0VHlwZToiY2FsYyJ9LGUuZXhwb3J0cz17YXR0cjpzLG5hbWU6bCxpZFJvb3Q6bCxpZFJlZ2V4OmMsYXR0clJlZ2V4OmMsYXR0cmlidXRlczp1LGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIikscGxvdDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsaT1lLl9zdWJwbG90c1tsXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10sYz1uKHIsbCxzKSx1PWVbc10uX3N1YnBsb3Q7dXx8KHU9YSh0LHMpLGVbc10uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSxjbGVhbjpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHNbbF18fFtdLGE9bi5faGFzJiZuLl9oYXMoImdsIiksbz1lLl9oYXMmJmUuX2hhcygiZ2wiKSxzPWEmJiFvLGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXSxmPW5bdV0uX3N1YnBsb3Q7aWYoIWVbdV0mJmYpZm9yKHZhciBoIGluIGYuZnJhbWV3b3JrLnJlbW92ZSgpLGYubGF5ZXJzWyJyYWRpYWwtYXhpcy10aXRsZSJdLnJlbW92ZSgpLGYuY2xpcFBhdGhzKWYuY2xpcFBhdGhzW2hdLnJlbW92ZSgpO3MmJmYuX3NjZW5lJiYoZi5fc2NlbmUuZGVzdHJveSgpLGYuX3NjZW5lPW51bGwpfX0sdG9TVkc6dCgiLi4vY2FydGVzaWFuIikudG9TVkd9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9jYXJ0ZXNpYW4iOjg0MSwiLi4vZ2V0X2RhdGEiOjg2NSwiLi9jb25zdGFudHMiOjg5MiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODk1LCIuL2xheW91dF9kZWZhdWx0cyI6ODk2LCIuL3BvbGFyIjo5MDN9XSw4OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT10KCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbz10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGw9cyh7Y29sb3I6aS5jb2xvcixzaG93bGluZTpvKHt9LGkuc2hvd2xpbmUse2RmbHQ6ITB9KSxsaW5lY29sb3I6aS5saW5lY29sb3IsbGluZXdpZHRoOmkubGluZXdpZHRoLHNob3dncmlkOm8oe30saS5zaG93Z3JpZCx7ZGZsdDohMH0pLGdyaWRjb2xvcjppLmdyaWRjb2xvcixncmlkd2lkdGg6aS5ncmlkd2lkdGh9LCJwbG90IiwiZnJvbS1yb290IiksYz1zKHt0aWNrbW9kZTppLnRpY2ttb2RlLG50aWNrczppLm50aWNrcyx0aWNrMDppLnRpY2swLGR0aWNrOmkuZHRpY2ssdGlja3ZhbHM6aS50aWNrdmFscyx0aWNrdGV4dDppLnRpY2t0ZXh0LHRpY2tzOmkudGlja3MsdGlja2xlbjppLnRpY2tsZW4sdGlja3dpZHRoOmkudGlja3dpZHRoLHRpY2tjb2xvcjppLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczppLnNob3d0aWNrbGFiZWxzLHNob3d0aWNrcHJlZml4Omkuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDppLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6aS5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OmkudGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6aS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6aS5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDppLm1pbmV4cG9uZW50LHNlcGFyYXRldGhvdXNhbmRzOmkuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6aS50aWNrZm9udCx0aWNrYW5nbGU6aS50aWNrYW5nbGUsdGlja2Zvcm1hdDppLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmkudGlja2Zvcm1hdHN0b3BzLGxheWVyOmkubGF5ZXJ9LCJwbG90IiwiZnJvbS1yb290IiksdT17dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6byh7fSxpLnR5cGUse3ZhbHVlczpbIi0iLCJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiXX0pLGF1dG90eXBlbnVtYmVyczppLmF1dG90eXBlbnVtYmVycyxhdXRvcmFuZ2U6byh7fSxpLmF1dG9yYW5nZSx7ZWRpdFR5cGU6InBsb3QifSkscmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3plcm8iLCJub25uZWdhdGl2ZSIsIm5vcm1hbCJdLGRmbHQ6InRvemVybyIsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTpvKHt9LGkucmFuZ2Use2l0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fV0sZWRpdFR5cGU6InBsb3QifSksY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixlZGl0VHlwZToicGxvdCJ9LHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNsb2Nrd2lzZSIsImNvdW50ZXJjbG9ja3dpc2UiXSxkZmx0OiJjbG9ja3dpc2UiLGVkaXRUeXBlOiJwbG90In0sdGl0bGU6e3RleHQ6byh7fSxpLnRpdGxlLnRleHQse2VkaXRUeXBlOiJwbG90IixkZmx0OiIifSksZm9udDpvKHt9LGkudGl0bGUuZm9udCx7ZWRpdFR5cGU6InBsb3QifSksZWRpdFR5cGU6InBsb3QifSxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX07byh1LGwsYyk7dmFyIGY9e3Zpc2libGU6byh7fSxpLnZpc2libGUse2RmbHQ6ITB9KSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwiY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyIsX25vVGVtcGxhdGluZzohMH0sYXV0b3R5cGVudW1iZXJzOmkuYXV0b3R5cGVudW1iZXJzLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRoZXRhdW5pdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFkaWFucyIsImRlZ3JlZXMiXSxkZmx0OiJkZWdyZWVzIixlZGl0VHlwZToiY2FsYyJ9LHBlcmlvZDp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjB9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY291bnRlcmNsb2Nrd2lzZSIsImNsb2Nrd2lzZSJdLGRmbHQ6ImNvdW50ZXJjbG9ja3dpc2UiLGVkaXRUeXBlOiJjYWxjIn0scm90YXRpb246e3ZhbFR5cGU6ImFuZ2xlIixlZGl0VHlwZToiY2FsYyJ9LGhvdmVyZm9ybWF0OmkuaG92ZXJmb3JtYXQsdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJjYWxjIn07byhmLGwsYyksZS5leHBvcnRzPXtkb21haW46YSh7bmFtZToicG9sYXIiLGVkaXRUeXBlOiJwbG90In0pLHNlY3Rvcjp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifV0sZGZsdDpbMCwzNjBdLGVkaXRUeXBlOiJwbG90In0saG9sZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxyYWRpYWxheGlzOnUsYW5ndWxhcmF4aXM6Zixncmlkc2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNpcmN1bGFyIiwibGluZWFyIl0sZGZsdDoiY2lyY3VsYXIiLGVkaXRUeXBlOiJwbG90In0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJjYWxjIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2NDIsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MTAsIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyLCIuLi9kb21haW4iOjg1NX1dLDg5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxzPXQoIi4uL2dldF9kYXRhIikuZ2V0U3VicGxvdERhdGEsbD10KCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyIpLGM9dCgiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyIpLHU9dCgiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxmPXQoIi4uL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyIpLGg9dCgiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyIpLHA9dCgiLi4vY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiKSxkPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxnPXQoIi4vc2V0X2NvbnZlcnQiKSxtPXQoIi4vY29uc3RhbnRzIiksdj1tLmF4aXNOYW1lcztmdW5jdGlvbiB5KHQsZSxyLG8pe3ZhciBwPXIoImJnY29sb3IiKTtvLmJnQ29sb3I9aS5jb21iaW5lKHAsby5wYXBlcl9iZ2NvbG9yKTt2YXIgeT1yKCJzZWN0b3IiKTtyKCJob2xlIik7dmFyIGIsXz1zKG8uZnVsbERhdGEsbS5uYW1lLG8uaWQpLHc9by5sYXlvdXRPdXQ7ZnVuY3Rpb24gVCh0LGUpe3JldHVybiByKGIrIi4iK3QsZSl9Zm9yKHZhciBrPTA7azx2Lmxlbmd0aDtrKyspe2I9dltrXSxuLmlzUGxhaW5PYmplY3QodFtiXSl8fCh0W2JdPXt9KTt2YXIgTT10W2JdLEE9YS5uZXdDb250YWluZXIoZSxiKTtBLl9pZD1BLl9uYW1lPWIsQS5fYXR0cj1vLmlkKyIuIitiLEEuX3RyYWNlSW5kaWNlcz1fLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KSk7dmFyIFM9bS5heGlzTmFtZTJkYXRhQXJyYXlbYl0sRT14KE0sQSxULF8sUyxvKTtmKE0sQSxULHtheERhdGE6XyxkYXRhQXR0cjpTfSk7dmFyIEMsTCxJPVQoInZpc2libGUiKTtzd2l0Y2goZyhBLGUsdyksVCgidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKSxJJiYoTD0oQz1UKCJjb2xvciIpKT09PU0uY29sb3I/QzpvLmZvbnQuY29sb3IpLEEuX209MSxiKXtjYXNlInJhZGlhbGF4aXMiOnZhciBQPVQoImF1dG9yYW5nZSIsIUEuaXNWYWxpZFJhbmdlKE0ucmFuZ2UpKTtNLmF1dG9yYW5nZT1QLCFQfHwibGluZWFyIiE9PUUmJiItIiE9PUV8fFQoInJhbmdlbW9kZSIpLCJyZXZlcnNlZCI9PT1QJiYoQS5fbT0tMSksVCgicmFuZ2UiKSxBLmNsZWFuUmFuZ2UoInJhbmdlIix7ZGZsdFJhbmdlOlswLDFdfSksSSYmKFQoInNpZGUiKSxUKCJhbmdsZSIseVswXSksVCgidGl0bGUudGV4dCIpLG4uY29lcmNlRm9udChULCJ0aXRsZS5mb250Iix7ZmFtaWx5Om8uZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipvLmZvbnQuc2l6ZSksY29sb3I6TH0pKTticmVhaztjYXNlImFuZ3VsYXJheGlzIjppZigiZGF0ZSI9PT1FKXtuLmxvZygiUG9sYXIgcGxvdHMgZG8gbm90IHN1cHBvcnQgZGF0ZSBhbmd1bGFyIGF4ZXMgeWV0LiIpO2Zvcih2YXIgej0wO3o8Xy5sZW5ndGg7eisrKV9bel0udmlzaWJsZT0hMTtFPU0udHlwZT1BLnR5cGU9ImxpbmVhciJ9VCgibGluZWFyIj09PUU/InRoZXRhdW5pdCI6InBlcmlvZCIpO3ZhciBPPVQoImRpcmVjdGlvbiIpO1QoInJvdGF0aW9uIix7Y291bnRlcmNsb2Nrd2lzZTowLGNsb2Nrd2lzZTo5MH1bT10pfWlmKEkpbChNLEEsVCxBLnR5cGUpLHUoTSxBLFQsQS50eXBlLHt0aWNrU3VmZml4RGZsdDoiZGVncmVlcyI9PT1BLnRoZXRhdW5pdD8iXHhiMCI6dm9pZCAwfSksYyhNLEEsVCx7b3V0ZXJUaWNrczohMH0pLFQoInNob3d0aWNrbGFiZWxzIikmJihuLmNvZXJjZUZvbnQoVCwidGlja2ZvbnQiLHtmYW1pbHk6by5mb250LmZhbWlseSxzaXplOm8uZm9udC5zaXplLGNvbG9yOkx9KSxUKCJ0aWNrYW5nbGUiKSxUKCJ0aWNrZm9ybWF0IikpLGgoTSxBLFQse2RmbHRDb2xvcjpDLGJnQ29sb3I6by5iZ0NvbG9yLGJsZW5kOjYwLHNob3dMaW5lOiEwLHNob3dHcmlkOiEwLG5vWmVyb0xpbmU6ITAsYXR0cmlidXRlczpkW2JdfSksVCgibGF5ZXIiKTsiY2F0ZWdvcnkiIT09RSYmVCgiaG92ZXJmb3JtYXQiKSxBLl9pbnB1dD1NfSJjYXRlZ29yeSI9PT1lLmFuZ3VsYXJheGlzLnR5cGUmJnIoImdyaWRzaGFwZSIpfWZ1bmN0aW9uIHgodCxlLHIsbixpLGEpe3ZhciBvPXIoImF1dG90eXBlbnVtYmVycyIsYS5hdXRvdHlwZW51bWJlcnNEZmx0KTtpZigiLSI9PT1yKCJ0eXBlIikpe2Zvcih2YXIgcyxsPTA7bDxuLmxlbmd0aDtsKyspaWYobltsXS52aXNpYmxlKXtzPW5bbF07YnJlYWt9cyYmc1tpXSYmKGUudHlwZT1wKHNbaV0sImdyZWdvcmlhbiIse25vTXVsdGlDYXRlZ29yeTohMCxhdXRvdHlwZW51bWJlcnM6b30pKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnQudHlwZT1lLnR5cGV9cmV0dXJuIGUudHlwZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6bS5uYW1lLGF0dHJpYnV0ZXM6ZCxoYW5kbGVEZWZhdWx0czp5LGZvbnQ6ZS5mb250LGF1dG90eXBlbnVtYmVyc0RmbHQ6ZS5hdXRvdHlwZW51bWJlcnMscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsZnVsbERhdGE6cixsYXlvdXRPdXQ6ZX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo4MjksIi4uL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6ODMyLCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIjo4NDQsIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo4NDksIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjg1MCwiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjg1MSwiLi4vZ2V0X2RhdGEiOjg2NSwiLi4vc3VicGxvdF9kZWZhdWx0cyI6OTA1LCIuL2NvbnN0YW50cyI6ODkyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4OTUsIi4vc2V0X2NvbnZlcnQiOjkwNH1dLDg5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIiksaT1uLm1hcmtlcixhPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O1siQXJlYSB0cmFjZXMgYXJlIGRlcHJlY2F0ZWQhIiwiUGxlYXNlIHN3aXRjaCB0byB0aGUgKmJhcnBvbGFyKiB0cmFjZSB0eXBlLiJdLmpvaW4oIiAiKTtlLmV4cG9ydHM9e3I6YSh7fSxuLnIse30pLHQ6YSh7fSxuLnQse30pLG1hcmtlcjp7Y29sb3I6YSh7fSxpLmNvbG9yLHt9KSxzaXplOmEoe30saS5zaXplLHt9KSxzeW1ib2w6YSh7fSxpLnN5bWJvbCx7fSksb3BhY2l0eTphKHt9LGkub3BhY2l0eSx7fSksZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTg3fV0sODk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYT10KCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbz1bIkxlZ2FjeSBwb2xhciBjaGFydHMgYXJlIGRlcHJlY2F0ZWQhIiwiUGxlYXNlIHN3aXRjaCB0byAqcG9sYXIqIHN1YnBsb3RzLiJdLmpvaW4oIiAiKSxzPWkoe30sbi5kb21haW4se30pO2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gaSh7fSxlLHtzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIn0sdGlja29yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJob3Jpem9udGFsIiwidmVydGljYWwiXX0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MH0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyJ9LGVuZHBhZGRpbmc6e3ZhbFR5cGU6Im51bWJlciIsZGVzY3JpcHRpb246b30sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiJ9fSl9ZS5leHBvcnRzPWEoe3JhZGlhbGF4aXM6bCgwLHtyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIifSx7dmFsVHlwZToibnVtYmVyIn1dfSxkb21haW46cyxvcmllbnRhdGlvbjp7dmFsVHlwZToibnVtYmVyIn19KSxhbmd1bGFyYXhpczpsKDAse3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSx7dmFsVHlwZToibnVtYmVyIixkZmx0OjM2MH1dfSxkb21haW46c30pLGxheW91dDp7ZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9ja3dpc2UiLCJjb3VudGVyY2xvY2t3aXNlIl19LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJhbmdsZSJ9fX0sInBsb3QiLCJuZXN0ZWQiKX0seyIuLi8uLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgxMCwiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDJ9XSw4OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7KGUuZXhwb3J0cz10KCIuL21pY3JvcG9sYXIiKSkubWFuYWdlcj10KCIuL21pY3JvcG9sYXJfbWFuYWdlciIpfSx7Ii4vbWljcm9wb2xhciI6OTAwLCIuL21pY3JvcG9sYXJfbWFuYWdlciI6OTAxfV0sOTAwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uLy4uL2xpYiIpLmV4dGVuZERlZXBBbGwsYT10KCIuLi8uLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTUlEX1NISUZULG89ZS5leHBvcnRzPXt2ZXJzaW9uOiIwLjIuMiJ9O28uQXhpcz1mdW5jdGlvbigpe3ZhciB0LGUscixzLGw9e2RhdGE6W10sbGF5b3V0Ont9fSxjPXt9LHU9e30sZj1uLmRpc3BhdGNoKCJob3ZlciIpLGg9e307cmV0dXJuIGgucmVuZGVyPWZ1bmN0aW9uKGMpe3JldHVybiBmdW5jdGlvbihjKXtlPWN8fGU7dmFyIGY9bC5kYXRhLGg9bC5sYXlvdXQ7KCJzdHJpbmciPT10eXBlb2YgZXx8ZS5ub2RlTmFtZSkmJihlPW4uc2VsZWN0KGUpKSxlLmRhdHVtKGYpLmVhY2goKGZ1bmN0aW9uKGUsbCl7dmFyIGM9ZS5zbGljZSgpO3U9e2RhdGE6by51dGlsLmNsb25lSnNvbihjKSxsYXlvdXQ6by51dGlsLmNsb25lSnNvbihoKX07dmFyIGY9MDtjLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5jb2xvcnx8KHQuY29sb3I9aC5kZWZhdWx0Q29sb3JSYW5nZVtmXSxmPShmKzEpJWguZGVmYXVsdENvbG9yUmFuZ2UubGVuZ3RoKSx0LnN0cm9rZUNvbG9yfHwodC5zdHJva2VDb2xvcj0iTGluZVBsb3QiPT09dC5nZW9tZXRyeT90LmNvbG9yOm4ucmdiKHQuY29sb3IpLmRhcmtlcigpLnRvU3RyaW5nKCkpLHUuZGF0YVtlXS5jb2xvcj10LmNvbG9yLHUuZGF0YVtlXS5zdHJva2VDb2xvcj10LnN0cm9rZUNvbG9yLHUuZGF0YVtlXS5zdHJva2VEYXNoPXQuc3Ryb2tlRGFzaCx1LmRhdGFbZV0uc3Ryb2tlU2l6ZT10LnN0cm9rZVNpemV9KSk7dmFyIHA9Yy5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC52aXNpYmxlO3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2Ygcnx8ITA9PT1yfSkpLGQ9ITEsZz1wLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZD1kfHwidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ3JvdXBJZCx0fSkpO2lmKGQpe3ZhciBtPW4ubmVzdCgpLmtleSgoZnVuY3Rpb24odCxlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHQuZ3JvdXBJZD90Lmdyb3VwSWQ6InVuc3RhY2tlZCJ9KSkuZW50cmllcyhnKSx2PVtdLHk9bS5tYXAoKGZ1bmN0aW9uKHQsZSl7aWYoInVuc3RhY2tlZCI9PT10LmtleSlyZXR1cm4gdC52YWx1ZXM7dmFyIHI9dC52YWx1ZXNbMF0uci5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDB9KSk7cmV0dXJuIHQudmFsdWVzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSxuKXt0LnlTdGFjaz1bcl0sdi5wdXNoKHIpLHI9by51dGlsLnN1bUFycmF5cyh0LnIscil9KSksdC52YWx1ZXN9KSk7cD1uLm1lcmdlKHkpfXAuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnQ9QXJyYXkuaXNBcnJheSh0LnRbMF0pP3QudDpbdC50XSx0LnI9QXJyYXkuaXNBcnJheSh0LnJbMF0pP3QucjpbdC5yXX0pKTt2YXIgeD1NYXRoLm1pbihoLndpZHRoLWgubWFyZ2luLmxlZnQtaC5tYXJnaW4ucmlnaHQsaC5oZWlnaHQtaC5tYXJnaW4udG9wLWgubWFyZ2luLmJvdHRvbSkvMjt4PU1hdGgubWF4KDEwLHgpO3ZhciBiLF89W2gubWFyZ2luLmxlZnQreCxoLm1hcmdpbi50b3AreF07ZD9iPVswLG4ubWF4KG8udXRpbC5zdW1BcnJheXMoby51dGlsLmFycmF5TGFzdChwKS5yWzBdLG8udXRpbC5hcnJheUxhc3QodikpKV06Yj1uLmV4dGVudChvLnV0aWwuZmxhdHRlbkFycmF5KHAubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB0LnJ9KSkpKTtoLnJhZGlhbEF4aXMuZG9tYWluIT1vLkRBVEFFWFRFTlQmJihiWzBdPTApLHI9bi5zY2FsZS5saW5lYXIoKS5kb21haW4oaC5yYWRpYWxBeGlzLmRvbWFpbiE9by5EQVRBRVhURU5UJiZoLnJhZGlhbEF4aXMuZG9tYWluP2gucmFkaWFsQXhpcy5kb21haW46YikucmFuZ2UoWzAseF0pLHUubGF5b3V0LnJhZGlhbEF4aXMuZG9tYWluPXIuZG9tYWluKCk7dmFyIHcsVD1vLnV0aWwuZmxhdHRlbkFycmF5KHAubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB0LnR9KSkpLGs9InN0cmluZyI9PXR5cGVvZiBUWzBdO2smJihUPW8udXRpbC5kZWR1cGxpY2F0ZShUKSx3PVQuc2xpY2UoKSxUPW4ucmFuZ2UoVC5sZW5ndGgpLHA9cC5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtyZXR1cm4gdC50PVtUXSxkJiYoci55U3RhY2s9dC55U3RhY2spLHJ9KSkpO3ZhciBNPXAuZmlsdGVyKChmdW5jdGlvbih0LGUpe3JldHVybiJMaW5lUGxvdCI9PT10Lmdlb21ldHJ5fHwiRG90UGxvdCI9PT10Lmdlb21ldHJ5fSkpLmxlbmd0aD09PXAubGVuZ3RoLEE9bnVsbD09PWgubmVlZHNFbmRTcGFjaW5nP2t8fCFNOmgubmVlZHNFbmRTcGFjaW5nLFM9aC5hbmd1bGFyQXhpcy5kb21haW4mJmguYW5ndWxhckF4aXMuZG9tYWluIT1vLkRBVEFFWFRFTlQmJiFrJiZoLmFuZ3VsYXJBeGlzLmRvbWFpblswXT49MD9oLmFuZ3VsYXJBeGlzLmRvbWFpbjpuLmV4dGVudChUKSxFPU1hdGguYWJzKFRbMV0tVFswXSk7TSYmIWsmJihFPTApO3ZhciBDPVMuc2xpY2UoKTtBJiZrJiYoQ1sxXSs9RSk7dmFyIEw9aC5hbmd1bGFyQXhpcy50aWNrc0NvdW50fHw0O0w+OCYmKEw9TC8oTC84KStMJTgpLGguYW5ndWxhckF4aXMudGlja3NTdGVwJiYoTD0oQ1sxXS1DWzBdKS9MKTt2YXIgST1oLmFuZ3VsYXJBeGlzLnRpY2tzU3RlcHx8KENbMV0tQ1swXSkvKEwqKGgubWlub3JUaWNrcysxKSk7dyYmKEk9TWF0aC5tYXgoTWF0aC5yb3VuZChJKSwxKSksQ1syXXx8KENbMl09SSk7dmFyIFA9bi5yYW5nZS5hcHBseSh0aGlzLEMpO2lmKFA9UC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHBhcnNlRmxvYXQodC50b1ByZWNpc2lvbigxMikpfSkpLHM9bi5zY2FsZS5saW5lYXIoKS5kb21haW4oQy5zbGljZSgwLDIpKS5yYW5nZSgiY2xvY2t3aXNlIj09PWguZGlyZWN0aW9uP1swLDM2MF06WzM2MCwwXSksdS5sYXlvdXQuYW5ndWxhckF4aXMuZG9tYWluPXMuZG9tYWluKCksdS5sYXlvdXQuYW5ndWxhckF4aXMuZW5kUGFkZGluZz1BP0U6MCwidW5kZWZpbmVkIj09dHlwZW9mKHQ9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJzdmcuY2hhcnQtcm9vdCIpKXx8dC5lbXB0eSgpKXt2YXIgej0obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKCI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgY2xhc3M9J2NoYXJ0LXJvb3QnPicgKyAnPGcgY2xhc3M9J291dGVyLWdyb3VwJz4nICsgJzxnIGNsYXNzPSdjaGFydC1ncm91cCc+JyArICc8Y2lyY2xlIGNsYXNzPSdiYWNrZ3JvdW5kLWNpcmNsZSc+PC9jaXJjbGU+JyArICc8ZyBjbGFzcz0nZ2VvbWV0cnktZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdyYWRpYWwgYXhpcy1ncm91cCc+JyArICc8Y2lyY2xlIGNsYXNzPSdvdXRzaWRlLWNpcmNsZSc+PC9jaXJjbGU+JyArICc8L2c+JyArICc8ZyBjbGFzcz0nYW5ndWxhciBheGlzLWdyb3VwJz48L2c+JyArICc8ZyBjbGFzcz0nZ3VpZGVzLWdyb3VwJz48bGluZT48L2xpbmU+PGNpcmNsZSByPScwJz48L2NpcmNsZT48L2c+JyArICc8L2c+JyArICc8ZyBjbGFzcz0nbGVnZW5kLWdyb3VwJz48L2c+JyArICc8ZyBjbGFzcz0ndG9vbHRpcHMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0aXRsZS1ncm91cCc+PHRleHQ+PC90ZXh0PjwvZz4nICsgJzwvZz4nICsgJzwvc3ZnPiIsImFwcGxpY2F0aW9uL3htbCIpLE89dGhpcy5hcHBlbmRDaGlsZCh0aGlzLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZSh6LmRvY3VtZW50RWxlbWVudCwhMCkpO3Q9bi5zZWxlY3QoTyl9dC5zZWxlY3QoIi5ndWlkZXMtZ3JvdXAiKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KSx0LnNlbGVjdCgiLmFuZ3VsYXIuYXhpcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pLHQuc2VsZWN0KCIucmFkaWFsLmF4aXMtZ3JvdXAiKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KTt2YXIgRCxSPXQuc2VsZWN0KCIuY2hhcnQtZ3JvdXAiKSxGPXtmaWxsOiJub25lIixzdHJva2U6aC50aWNrQ29sb3J9LEI9eyJmb250LXNpemUiOmguZm9udC5zaXplLCJmb250LWZhbWlseSI6aC5mb250LmZhbWlseSxmaWxsOmguZm9udC5jb2xvciwidGV4dC1zaGFkb3ciOlsiLTFweCAwcHgiLCIxcHggLTFweCIsIi0xcHggMXB4IiwiMXB4IDFweCJdLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4iICIrdCsiIDAgIitoLmZvbnQub3V0bGluZUNvbG9yfSkpLmpvaW4oIiwiKX07aWYoaC5zaG93TGVnZW5kKXtEPXQuc2VsZWN0KCIubGVnZW5kLWdyb3VwIikuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbeCxoLm1hcmdpbi50b3BdKyIpIn0pLnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KTt2YXIgTj1wLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj1vLnV0aWwuY2xvbmVKc29uKHQpO3JldHVybiByLnN5bWJvbD0iRG90UGxvdCI9PT10Lmdlb21ldHJ5P3QuZG90VHlwZXx8ImNpcmNsZSI6IkxpbmVQbG90IiE9dC5nZW9tZXRyeT8ic3F1YXJlIjoibGluZSIsci52aXNpYmxlSW5MZWdlbmQ9InVuZGVmaW5lZCI9PXR5cGVvZiB0LnZpc2libGVJbkxlZ2VuZHx8dC52aXNpYmxlSW5MZWdlbmQsci5jb2xvcj0iTGluZVBsb3QiPT09dC5nZW9tZXRyeT90LnN0cm9rZUNvbG9yOnQuY29sb3Iscn0pKTtvLkxlZ2VuZCgpLmNvbmZpZyh7ZGF0YTpwLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5uYW1lfHwiRWxlbWVudCIrZX0pKSxsZWdlbmRDb25maWc6aSh7fSxvLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCkubGVnZW5kQ29uZmlnLHtjb250YWluZXI6RCxlbGVtZW50czpOLHJldmVyc2VPcmRlcjpoLmxlZ2VuZC5yZXZlcnNlT3JkZXJ9KX0pKCk7dmFyIGo9RC5ub2RlKCkuZ2V0QkJveCgpO3g9TWF0aC5taW4oaC53aWR0aC1qLndpZHRoLWgubWFyZ2luLmxlZnQtaC5tYXJnaW4ucmlnaHQsaC5oZWlnaHQtaC5tYXJnaW4udG9wLWgubWFyZ2luLmJvdHRvbSkvMix4PU1hdGgubWF4KDEwLHgpLF89W2gubWFyZ2luLmxlZnQreCxoLm1hcmdpbi50b3AreF0sci5yYW5nZShbMCx4XSksdS5sYXlvdXQucmFkaWFsQXhpcy5kb21haW49ci5kb21haW4oKSxELmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1tfWzBdK3gsX1sxXS14XSsiKSIpfWVsc2UgRD10LnNlbGVjdCgiLmxlZ2VuZC1ncm91cCIpLnN0eWxlKHtkaXNwbGF5OiJub25lIn0pO3QuYXR0cih7d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHR9KS5zdHlsZSh7b3BhY2l0eTpoLm9wYWNpdHl9KSxSLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK18rIikiKS5zdHlsZSh7Y3Vyc29yOiJjcm9zc2hhaXIifSk7dmFyIFU9WyhoLndpZHRoLShoLm1hcmdpbi5sZWZ0K2gubWFyZ2luLnJpZ2h0KzIqeCsoaj9qLndpZHRoOjApKSkvMiwoaC5oZWlnaHQtKGgubWFyZ2luLnRvcCtoLm1hcmdpbi5ib3R0b20rMip4KSkvMl07aWYoVVswXT1NYXRoLm1heCgwLFVbMF0pLFVbMV09TWF0aC5tYXgoMCxVWzFdKSx0LnNlbGVjdCgiLm91dGVyLWdyb3VwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVSsiKSIpLGgudGl0bGUmJmgudGl0bGUudGV4dCl7dmFyIFY9dC5zZWxlY3QoImcudGl0bGUtZ3JvdXAgdGV4dCIpLnN0eWxlKEIpLnRleHQoaC50aXRsZS50ZXh0KSxxPVYubm9kZSgpLmdldEJCb3goKTtWLmF0dHIoe3g6X1swXS1xLndpZHRoLzIseTpfWzFdLXgtMjB9KX12YXIgSD10LnNlbGVjdCgiLnJhZGlhbC5heGlzLWdyb3VwIik7aWYoaC5yYWRpYWxBeGlzLmdyaWRMaW5lc1Zpc2libGUpe3ZhciBHPUguc2VsZWN0QWxsKCJjaXJjbGUuZ3JpZC1jaXJjbGUiKS5kYXRhKHIudGlja3MoNSkpO0cuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoe2NsYXNzOiJncmlkLWNpcmNsZSJ9KS5zdHlsZShGKSxHLmF0dHIoInIiLHIpLEcuZXhpdCgpLnJlbW92ZSgpfUguc2VsZWN0KCJjaXJjbGUub3V0c2lkZS1jaXJjbGUiKS5hdHRyKHtyOnh9KS5zdHlsZShGKTt2YXIgWT10LnNlbGVjdCgiY2lyY2xlLmJhY2tncm91bmQtY2lyY2xlIikuYXR0cih7cjp4fSkuc3R5bGUoe2ZpbGw6aC5iYWNrZ3JvdW5kQ29sb3Isc3Ryb2tlOmguc3Ryb2tlfSk7ZnVuY3Rpb24gVyh0LGUpe3JldHVybiBzKHQpJTM2MCtoLm9yaWVudGF0aW9ufWlmKGgucmFkaWFsQXhpcy52aXNpYmxlKXt2YXIgWD1uLnN2Zy5heGlzKCkuc2NhbGUocikudGlja3MoNSkudGlja1NpemUoNSk7SC5jYWxsKFgpLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIraC5yYWRpYWxBeGlzLm9yaWVudGF0aW9uKyIpIn0pLEguc2VsZWN0QWxsKCIuZG9tYWluIikuc3R5bGUoRiksSC5zZWxlY3RBbGwoImc+dGV4dCIpLnRleHQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudGV4dENvbnRlbnQraC5yYWRpYWxBeGlzLnRpY2tzU3VmZml4fSkpLnN0eWxlKEIpLnN0eWxlKHsidGV4dC1hbmNob3IiOiJzdGFydCJ9KS5hdHRyKHt4OjAseTowLGR4OjAsZHk6MCx0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4iaG9yaXpvbnRhbCI9PT1oLnJhZGlhbEF4aXMudGlja09yaWVudGF0aW9uPyJyb3RhdGUoIistaC5yYWRpYWxBeGlzLm9yaWVudGF0aW9uKyIpIHRyYW5zbGF0ZSgiK1swLEJbImZvbnQtc2l6ZSJdXSsiKSI6InRyYW5zbGF0ZSgiK1swLEJbImZvbnQtc2l6ZSJdXSsiKSJ9fSksSC5zZWxlY3RBbGwoImc+bGluZSIpLnN0eWxlKHtzdHJva2U6ImJsYWNrIn0pfXZhciBaPXQuc2VsZWN0KCIuYW5ndWxhci5heGlzLWdyb3VwIikuc2VsZWN0QWxsKCJnLmFuZ3VsYXItdGljayIpLmRhdGEoUCksSj1aLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ndWxhci10aWNrIiwhMCk7Wi5hdHRyKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4icm90YXRlKCIrVyh0KSsiKSJ9fSkuc3R5bGUoe2Rpc3BsYXk6aC5hbmd1bGFyQXhpcy52aXNpYmxlPyJibG9jayI6Im5vbmUifSksWi5leGl0KCkucmVtb3ZlKCksSi5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJncmlkLWxpbmUiLCEwKS5jbGFzc2VkKCJtYWpvciIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGgubWlub3JUaWNrcysxKT09MH0pKS5jbGFzc2VkKCJtaW5vciIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIShlJShoLm1pbm9yVGlja3MrMSk9PTApfSkpLnN0eWxlKEYpLEouc2VsZWN0QWxsKCIubWlub3IiKS5zdHlsZSh7c3Ryb2tlOmgubWlub3JUaWNrQ29sb3J9KSxaLnNlbGVjdCgibGluZS5ncmlkLWxpbmUiKS5hdHRyKHt4MTpoLnRpY2tMZW5ndGg/eC1oLnRpY2tMZW5ndGg6MCx4Mjp4fSkuc3R5bGUoe2Rpc3BsYXk6aC5hbmd1bGFyQXhpcy5ncmlkTGluZXNWaXNpYmxlPyJibG9jayI6Im5vbmUifSksSi5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJheGlzLXRleHQiLCEwKS5zdHlsZShCKTt2YXIgSz1aLnNlbGVjdCgidGV4dC5heGlzLXRleHQiKS5hdHRyKHt4OngraC5sYWJlbE9mZnNldCxkeTphKyJlbSIsdHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7dmFyIHI9Vyh0KSxuPXgraC5sYWJlbE9mZnNldCxpPWguYW5ndWxhckF4aXMudGlja09yaWVudGF0aW9uO3JldHVybiJob3Jpem9udGFsIj09aT8icm90YXRlKCIrLXIrIiAiK24rIiAwKSI6InJhZGlhbCI9PWk/cjwyNzAmJnI+OTA/InJvdGF0ZSgxODAgIituKyIgMCkiOm51bGw6InJvdGF0ZSgiKyhyPD0xODAmJnI+MD8tOTA6OTApKyIgIituKyIgMCkifX0pLnN0eWxlKHsidGV4dC1hbmNob3IiOiJtaWRkbGUiLGRpc3BsYXk6aC5hbmd1bGFyQXhpcy5sYWJlbHNWaXNpYmxlPyJibG9jayI6Im5vbmUifSkudGV4dCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSUoaC5taW5vclRpY2tzKzEpIT0wPyIiOnc/d1t0XStoLmFuZ3VsYXJBeGlzLnRpY2tzU3VmZml4OnQraC5hbmd1bGFyQXhpcy50aWNrc1N1ZmZpeH0pKS5zdHlsZShCKTtoLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyYmSy50ZXh0KChmdW5jdGlvbih0LGUpe3JldHVybiBlJShoLm1pbm9yVGlja3MrMSkhPTA/IiI6aC5hbmd1bGFyQXhpcy5yZXdyaXRlVGlja3ModGhpcy50ZXh0Q29udGVudCxlKX0pKTt2YXIgUT1uLm1heChSLnNlbGVjdEFsbCgiLmFuZ3VsYXItdGljayB0ZXh0IilbMF0ubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmdldENUTSgpLmUrdC5nZXRCQm94KCkud2lkdGh9KSkpO0QuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbeCtRLGgubWFyZ2luLnRvcF0rIikifSk7dmFyICQ9dC5zZWxlY3QoImcuZ2VvbWV0cnktZ3JvdXAiKS5zZWxlY3RBbGwoImciKS5zaXplKCk+MCx0dD10LnNlbGVjdCgiZy5nZW9tZXRyeS1ncm91cCIpLnNlbGVjdEFsbCgiZy5nZW9tZXRyeSIpLmRhdGEocCk7aWYodHQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKHtjbGFzczpmdW5jdGlvbih0LGUpe3JldHVybiJnZW9tZXRyeSBnZW9tZXRyeSIrZX19KSx0dC5leGl0KCkucmVtb3ZlKCkscFswXXx8JCl7dmFyIGV0PVtdO3AuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgbj17fTtuLnJhZGlhbFNjYWxlPXIsbi5hbmd1bGFyU2NhbGU9cyxuLmNvbnRhaW5lcj10dC5maWx0ZXIoKGZ1bmN0aW9uKHQscil7cmV0dXJuIHI9PWV9KSksbi5nZW9tZXRyeT10Lmdlb21ldHJ5LG4ub3JpZW50YXRpb249aC5vcmllbnRhdGlvbixuLmRpcmVjdGlvbj1oLmRpcmVjdGlvbixuLmluZGV4PWUsZXQucHVzaCh7ZGF0YTp0LGdlb21ldHJ5Q29uZmlnOm59KX0pKTt2YXIgcnQ9bi5uZXN0KCkua2V5KChmdW5jdGlvbih0LGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5kYXRhLmdyb3VwSWR8fCJ1bnN0YWNrZWQifSkpLmVudHJpZXMoZXQpLG50PVtdO3J0LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7InVuc3RhY2tlZCI9PT10LmtleT9udD1udC5jb25jYXQodC52YWx1ZXMubWFwKChmdW5jdGlvbih0LGUpe3JldHVyblt0XX0pKSk6bnQucHVzaCh0LnZhbHVlcyl9KSksbnQuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgcjtyPUFycmF5LmlzQXJyYXkodCk/dFswXS5nZW9tZXRyeUNvbmZpZy5nZW9tZXRyeTp0Lmdlb21ldHJ5Q29uZmlnLmdlb21ldHJ5O3ZhciBuPXQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBpKG9bcl0uZGVmYXVsdENvbmZpZygpLHQpfSkpO29bcl0oKS5jb25maWcobikoKX0pKX12YXIgaXQsYXQsb3Q9dC5zZWxlY3QoIi5ndWlkZXMtZ3JvdXAiKSxzdD10LnNlbGVjdCgiLnRvb2x0aXBzLWdyb3VwIiksbHQ9by50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpzdCxmb250U2l6ZTo4fSkoKSxjdD1vLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOnN0LGZvbnRTaXplOjh9KSgpLHV0PW8udG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6c3QsaGFzVGljazohMH0pKCk7aWYoIWspe3ZhciBmdD1vdC5zZWxlY3QoImxpbmUiKS5hdHRyKHt4MTowLHkxOjAseTI6MH0pLnN0eWxlKHtzdHJva2U6ImdyZXkiLCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSk7Ui5vbigibW91c2Vtb3ZlLmFuZ3VsYXItZ3VpZGUiLChmdW5jdGlvbih0LGUpe3ZhciByPW8udXRpbC5nZXRNb3VzZVBvcyhZKS5hbmdsZTtmdC5hdHRyKHt4MjoteCx0cmFuc2Zvcm06InJvdGF0ZSgiK3IrIikifSkuc3R5bGUoe29wYWNpdHk6LjV9KTt2YXIgbj0ocisxODArMzYwLWgub3JpZW50YXRpb24pJTM2MDtpdD1zLmludmVydChuKTt2YXIgaT1vLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKHgrMTIscisxODApO2x0LnRleHQoby51dGlsLnJvdW5kKGl0KSkubW92ZShbaVswXStfWzBdLGlbMV0rX1sxXV0pfSkpLm9uKCJtb3VzZW91dC5hbmd1bGFyLWd1aWRlIiwoZnVuY3Rpb24odCxlKXtvdC5zZWxlY3QoImxpbmUiKS5zdHlsZSh7b3BhY2l0eTowfSl9KSl9dmFyIGh0PW90LnNlbGVjdCgiY2lyY2xlIikuc3R5bGUoe3N0cm9rZToiZ3JleSIsZmlsbDoibm9uZSJ9KTtSLm9uKCJtb3VzZW1vdmUucmFkaWFsLWd1aWRlIiwoZnVuY3Rpb24odCxlKXt2YXIgbj1vLnV0aWwuZ2V0TW91c2VQb3MoWSkucmFkaXVzO2h0LmF0dHIoe3I6bn0pLnN0eWxlKHtvcGFjaXR5Oi41fSksYXQ9ci5pbnZlcnQoby51dGlsLmdldE1vdXNlUG9zKFkpLnJhZGl1cyk7dmFyIGk9by51dGlsLmNvbnZlcnRUb0NhcnRlc2lhbihuLGgucmFkaWFsQXhpcy5vcmllbnRhdGlvbik7Y3QudGV4dChvLnV0aWwucm91bmQoYXQpKS5tb3ZlKFtpWzBdK19bMF0saVsxXStfWzFdXSl9KSkub24oIm1vdXNlb3V0LnJhZGlhbC1ndWlkZSIsKGZ1bmN0aW9uKHQsZSl7aHQuc3R5bGUoe29wYWNpdHk6MH0pLHV0LmhpZGUoKSxsdC5oaWRlKCksY3QuaGlkZSgpfSkpLHQuc2VsZWN0QWxsKCIuZ2VvbWV0cnktZ3JvdXAgLm1hcmsiKS5vbigibW91c2VvdmVyLnRvb2x0aXAiLChmdW5jdGlvbihlLHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9dGhpcy5zdHlsZS5maWxsLHM9ImJsYWNrIixsPXRoaXMuc3R5bGUub3BhY2l0eXx8MTtpZihpLmF0dHIoeyJkYXRhLW9wYWNpdHkiOmx9KSxhJiYibm9uZSIhPT1hKXtpLmF0dHIoeyJkYXRhLWZpbGwiOmF9KSxzPW4uaHNsKGEpLmRhcmtlcigpLnRvU3RyaW5nKCksaS5zdHlsZSh7ZmlsbDpzLG9wYWNpdHk6MX0pO3ZhciBjPXt0Om8udXRpbC5yb3VuZChlWzBdKSxyOm8udXRpbC5yb3VuZChlWzFdKX07ayYmKGMudD13W2VbMF1dKTt2YXIgdT0idDogIitjLnQrIiwgcjogIitjLnIsZj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9dC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscD1bZi5sZWZ0K2Yud2lkdGgvMi1VWzBdLWgubGVmdCxmLnRvcCtmLmhlaWdodC8yLVVbMV0taC50b3BdO3V0LmNvbmZpZyh7Y29sb3I6c30pLnRleHQodSksdXQubW92ZShwKX1lbHNlIGE9dGhpcy5zdHlsZS5zdHJva2V8fCJibGFjayIsaS5hdHRyKHsiZGF0YS1zdHJva2UiOmF9KSxzPW4uaHNsKGEpLmRhcmtlcigpLnRvU3RyaW5nKCksaS5zdHlsZSh7c3Ryb2tlOnMsb3BhY2l0eToxfSl9KSkub24oIm1vdXNlbW92ZS50b29sdGlwIiwoZnVuY3Rpb24odCxlKXtpZigwIT1uLmV2ZW50LndoaWNoKXJldHVybiExO24uc2VsZWN0KHRoaXMpLmF0dHIoImRhdGEtZmlsbCIpJiZ1dC5zaG93KCl9KSkub24oIm1vdXNlb3V0LnRvb2x0aXAiLChmdW5jdGlvbih0LGUpe3V0LmhpZGUoKTt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXIuYXR0cigiZGF0YS1maWxsIik7aT9yLnN0eWxlKHtmaWxsOmksb3BhY2l0eTpyLmF0dHIoImRhdGEtb3BhY2l0eSIpfSk6ci5zdHlsZSh7c3Ryb2tlOnIuYXR0cigiZGF0YS1zdHJva2UiKSxvcGFjaXR5OnIuYXR0cigiZGF0YS1vcGFjaXR5Iil9KX0pKX0pKX0oYyksdGhpc30saC5jb25maWc9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGw7dmFyIGU9by51dGlsLmNsb25lSnNvbih0KTtyZXR1cm4gZS5kYXRhLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7bC5kYXRhW2VdfHwobC5kYXRhW2VdPXt9KSxpKGwuZGF0YVtlXSxvLkF4aXMuZGVmYXVsdENvbmZpZygpLmRhdGFbMF0pLGkobC5kYXRhW2VdLHQpfSkpLGkobC5sYXlvdXQsby5BeGlzLmRlZmF1bHRDb25maWcoKS5sYXlvdXQpLGkobC5sYXlvdXQsZS5sYXlvdXQpLHRoaXN9LGguZ2V0TGl2ZUNvbmZpZz1mdW5jdGlvbigpe3JldHVybiB1fSxoLmdldGlucHV0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LGgucmFkaWFsU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHJ9LGguYW5ndWxhclNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBzfSxoLnN2Zz1mdW5jdGlvbigpe3JldHVybiB0fSxuLnJlYmluZChoLGYsIm9uIiksaH0sby5BeGlzLmRlZmF1bHRDb25maWc9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZGF0YTpbe3Q6WzEsMiwzLDRdLHI6WzEwLDExLDEyLDEzXSxuYW1lOiJMaW5lMSIsZ2VvbWV0cnk6IkxpbmVQbG90Iixjb2xvcjpudWxsLHN0cm9rZURhc2g6InNvbGlkIixzdHJva2VDb2xvcjpudWxsLHN0cm9rZVNpemU6IjEiLHZpc2libGVJbkxlZ2VuZDohMCxvcGFjaXR5OjF9XSxsYXlvdXQ6e2RlZmF1bHRDb2xvclJhbmdlOm4uc2NhbGUuY2F0ZWdvcnkxMCgpLnJhbmdlKCksdGl0bGU6bnVsbCxoZWlnaHQ6NDUwLHdpZHRoOjUwMCxtYXJnaW46e3RvcDo0MCxyaWdodDo0MCxib3R0b206NDAsbGVmdDo0MH0sZm9udDp7c2l6ZToxMixjb2xvcjoiZ3JheSIsb3V0bGluZUNvbG9yOiJ3aGl0ZSIsZmFtaWx5OiJUYWhvbWEsIHNhbnMtc2VyaWYifSxkaXJlY3Rpb246ImNsb2Nrd2lzZSIsb3JpZW50YXRpb246MCxsYWJlbE9mZnNldDoxMCxyYWRpYWxBeGlzOntkb21haW46bnVsbCxvcmllbnRhdGlvbjotNDUsdGlja3NTdWZmaXg6IiIsdmlzaWJsZTohMCxncmlkTGluZXNWaXNpYmxlOiEwLHRpY2tPcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmV3cml0ZVRpY2tzOm51bGx9LGFuZ3VsYXJBeGlzOntkb21haW46WzAsMzYwXSx0aWNrc1N1ZmZpeDoiIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsbGFiZWxzVmlzaWJsZTohMCx0aWNrT3JpZW50YXRpb246Imhvcml6b250YWwiLHJld3JpdGVUaWNrczpudWxsLHRpY2tzQ291bnQ6bnVsbCx0aWNrc1N0ZXA6bnVsbH0sbWlub3JUaWNrczowLHRpY2tMZW5ndGg6bnVsbCx0aWNrQ29sb3I6InNpbHZlciIsbWlub3JUaWNrQ29sb3I6IiNlZWUiLGJhY2tncm91bmRDb2xvcjoibm9uZSIsbmVlZHNFbmRTcGFjaW5nOm51bGwsc2hvd0xlZ2VuZDohMCxsZWdlbmQ6e3JldmVyc2VPcmRlcjohMX0sb3BhY2l0eToxfX19LG8udXRpbD17fSxvLkRBVEFFWFRFTlQ9ImRhdGFFeHRlbnQiLG8uQVJFQT0iQXJlYUNoYXJ0IixvLkxJTkU9IkxpbmVQbG90IixvLkRPVD0iRG90UGxvdCIsby5CQVI9IkJhckNoYXJ0IixvLnV0aWwuX292ZXJyaWRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQpciBpbiBlJiYoZVtyXT10W3JdKX0sby51dGlsLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdCllW3JdPXRbcl19LG8udXRpbC5fcm5kU25kPWZ1bmN0aW9uKCl7cmV0dXJuIDIqTWF0aC5yYW5kb20oKS0xKygyKk1hdGgucmFuZG9tKCktMSkrKDIqTWF0aC5yYW5kb20oKS0xKX0sby51dGlsLmRhdGFGcm9tRXF1YXRpb24yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZXx8NjtyZXR1cm4gbi5yYW5nZSgwLDM2MCtyLHIpLm1hcCgoZnVuY3Rpb24oZSxyKXt2YXIgbj1lKk1hdGguUEkvMTgwO3JldHVybltlLHQobildfSkpfSxvLnV0aWwuZGF0YUZyb21FcXVhdGlvbj1mdW5jdGlvbih0LGUscil7dmFyIGk9ZXx8NixhPVtdLG89W107bi5yYW5nZSgwLDM2MCtpLGkpLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dmFyIG49ZSpNYXRoLlBJLzE4MCxpPXQobik7YS5wdXNoKGUpLG8ucHVzaChpKX0pKTt2YXIgcz17dDphLHI6b307cmV0dXJuIHImJihzLm5hbWU9ciksc30sby51dGlsLmVuc3VyZUFycmF5PWZ1bmN0aW9uKHQsZSl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0KXJldHVybiBudWxsO3ZhciByPVtdLmNvbmNhdCh0KTtyZXR1cm4gbi5yYW5nZShlKS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbZV18fHJbMF19KSl9LG8udXRpbC5maWxsQXJyYXlzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLG4pe3RbZV09by51dGlsLmVuc3VyZUFycmF5KHRbZV0scil9KSksdH0sby51dGlsLmNsb25lSnNvbj1mdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSl9LG8udXRpbC52YWxpZGF0ZUtleXM9ZnVuY3Rpb24odCxlKXsic3RyaW5nIj09dHlwZW9mIGUmJihlPWUuc3BsaXQoIi4iKSk7dmFyIHI9ZS5zaGlmdCgpO3JldHVybiB0W3JdJiYoIWUubGVuZ3RofHxvYmpIYXNLZXlzKHRbcl0sZSkpfSxvLnV0aWwuc3VtQXJyYXlzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uemlwKHQsZSkubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBuLnN1bSh0KX0pKX0sby51dGlsLmFycmF5TGFzdD1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0sby51dGlsLmFycmF5RXF1YWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5tYXgodC5sZW5ndGgsZS5sZW5ndGgsMSk7ci0tID49MCYmdFtyXT09PWVbcl07KTtyZXR1cm4tMj09PXJ9LG8udXRpbC5mbGF0dGVuQXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdOyFvLnV0aWwuYXJyYXlFcXVhbChlLHQpOyllPXQsdD1bXS5jb25jYXQuYXBwbHkoW10sdCk7cmV0dXJuIHR9LG8udXRpbC5kZWR1cGxpY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gci5pbmRleE9mKHQpPT1lfSkpfSxvLnV0aWwuY29udmVydFRvQ2FydGVzaWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSpNYXRoLlBJLzE4MDtyZXR1cm5bdCpNYXRoLmNvcyhyKSx0Kk1hdGguc2luKHIpXX0sby51dGlsLnJvdW5kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZXx8MixuPU1hdGgucG93KDEwLHIpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn0sby51dGlsLmdldE1vdXNlUG9zPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubW91c2UodC5ub2RlKCkpLHI9ZVswXSxpPWVbMV0sYT17fTtyZXR1cm4gYS54PXIsYS55PWksYS5wb3M9ZSxhLmFuZ2xlPTE4MCooTWF0aC5hdGFuMihpLHIpK01hdGguUEkpL01hdGguUEksYS5yYWRpdXM9TWF0aC5zcXJ0KHIqcitpKmkpLGF9LG8udXRpbC5kdXBsaWNhdGVzQ291bnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9e30sbj17fSxpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKShlPXRbaV0paW4gcj8ocltlXSsrLG5bZV09cltlXSk6cltlXT0xO3JldHVybiBufSxvLnV0aWwuZHVwbGljYXRlcz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXMoby51dGlsLmR1cGxpY2F0ZXNDb3VudCh0KSl9LG8udXRpbC50cmFuc2xhdG9yPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKG4pe3ZhciBpPXIuc2xpY2UoKTtyPWUsZT1pfXZhciBhPWUucmVkdWNlKChmdW5jdGlvbih0LGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdClyZXR1cm4gdFtlXX0pLHQpOyJ1bmRlZmluZWQiIT10eXBlb2YgYSYmKGUucmVkdWNlKChmdW5jdGlvbih0LHIsbil7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0KXJldHVybiBuPT09ZS5sZW5ndGgtMSYmZGVsZXRlIHRbcl0sdFtyXX0pLHQpLHIucmVkdWNlKChmdW5jdGlvbih0LGUsbil7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiB0W2VdJiYodFtlXT17fSksbj09PXIubGVuZ3RoLTEmJih0W2VdPWEpLHRbZV19KSx0KSl9LG8uUG9seUNoYXJ0PWZ1bmN0aW9uKCl7dmFyIHQ9W28uUG9seUNoYXJ0LmRlZmF1bHRDb25maWcoKV0sZT1uLmRpc3BhdGNoKCJob3ZlciIpLHI9e3NvbGlkOiJub25lIixkYXNoOls1LDJdLGRvdDpbMiw1XX07ZnVuY3Rpb24gYSgpe3ZhciBlPXRbMF0uZ2VvbWV0cnlDb25maWcsaT1lLmNvbnRhaW5lcjsic3RyaW5nIj09dHlwZW9mIGkmJihpPW4uc2VsZWN0KGkpKSxpLmRhdHVtKHQpLmVhY2goKGZ1bmN0aW9uKHQsaSl7dmFyIGE9ISF0WzBdLmRhdGEueVN0YWNrLG89dC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGE/bi56aXAodC5kYXRhLnRbMF0sdC5kYXRhLnJbMF0sdC5kYXRhLnlTdGFja1swXSk6bi56aXAodC5kYXRhLnRbMF0sdC5kYXRhLnJbMF0pfSkpLHM9ZS5hbmd1bGFyU2NhbGUsbD1lLnJhZGlhbFNjYWxlLmRvbWFpbigpWzBdLGM9e2JhcjpmdW5jdGlvbihyLGksYSl7dmFyIG89dFthXS5kYXRhLGw9ZS5yYWRpYWxTY2FsZShyWzFdKS1lLnJhZGlhbFNjYWxlKDApLGM9ZS5yYWRpYWxTY2FsZShyWzJdfHwwKSx1PW8uYmFyV2lkdGg7bi5zZWxlY3QodGhpcykuYXR0cih7Y2xhc3M6Im1hcmsgYmFyIixkOiJNIitbW2wrYywtdS8yXSxbbCtjLHUvMl0sW2MsdS8yXSxbYywtdS8yXV0uam9pbigiTCIpKyJaIix0cmFuc2Zvcm06ZnVuY3Rpb24odCxyKXtyZXR1cm4icm90YXRlKCIrKGUub3JpZW50YXRpb24rcyh0WzBdKSkrIikifX0pfX07Yy5kb3Q9ZnVuY3Rpb24ocixpLGEpe3ZhciBvPXJbMl0/W3JbMF0sclsxXStyWzJdXTpyLHM9bi5zdmcuc3ltYm9sKCkuc2l6ZSh0W2FdLmRhdGEuZG90U2l6ZSkudHlwZSh0W2FdLmRhdGEuZG90VHlwZSkocixpKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBkb3QiLGQ6cyx0cmFuc2Zvcm06ZnVuY3Rpb24odCxyKXt2YXIgbixpLGEscz0obj1mdW5jdGlvbih0LHIpe3ZhciBuPWUucmFkaWFsU2NhbGUodFsxXSksaT0oZS5hbmd1bGFyU2NhbGUodFswXSkrZS5vcmllbnRhdGlvbikqTWF0aC5QSS8xODA7cmV0dXJue3I6bix0Oml9fShvKSxpPW4ucipNYXRoLmNvcyhuLnQpLGE9bi5yKk1hdGguc2luKG4udCkse3g6aSx5OmF9KTtyZXR1cm4idHJhbnNsYXRlKCIrW3MueCxzLnldKyIpIn19KX07dmFyIHU9bi5zdmcubGluZS5yYWRpYWwoKS5pbnRlcnBvbGF0ZSh0WzBdLmRhdGEubGluZUludGVycG9sYXRpb24pLnJhZGl1cygoZnVuY3Rpb24odCl7cmV0dXJuIGUucmFkaWFsU2NhbGUodFsxXSl9KSkuYW5nbGUoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmFuZ3VsYXJTY2FsZSh0WzBdKSpNYXRoLlBJLzE4MH0pKTtjLmxpbmU9ZnVuY3Rpb24ocixpLGEpe3ZhciBzPXJbMl0/b1thXS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sdFsxXSt0WzJdXX0pKTpvW2FdO2lmKG4uc2VsZWN0KHRoaXMpLmVhY2goYy5kb3QpLnN0eWxlKHtvcGFjaXR5OmZ1bmN0aW9uKGUscil7cmV0dXJuK3RbYV0uZGF0YS5kb3RWaXNpYmxlfSxmaWxsOmQuc3Ryb2tlKHIsaSxhKX0pLmF0dHIoe2NsYXNzOiJtYXJrIGRvdCJ9KSwhKGk+MCkpe3ZhciBsPW4uc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJwYXRoLmxpbmUiKS5kYXRhKFswXSk7bC5lbnRlcigpLmluc2VydCgicGF0aCIpLGwuYXR0cih7Y2xhc3M6ImxpbmUiLGQ6dShzKSx0cmFuc2Zvcm06ZnVuY3Rpb24odCxyKXtyZXR1cm4icm90YXRlKCIrKGUub3JpZW50YXRpb24rOTApKyIpIn0sInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KS5zdHlsZSh7ZmlsbDpmdW5jdGlvbih0LGUpe3JldHVybiBkLmZpbGwocixpLGEpfSwiZmlsbC1vcGFjaXR5IjowLHN0cm9rZTpmdW5jdGlvbih0LGUpe3JldHVybiBkLnN0cm9rZShyLGksYSl9LCJzdHJva2Utd2lkdGgiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRbInN0cm9rZS13aWR0aCJdKHIsaSxhKX0sInN0cm9rZS1kYXNoYXJyYXkiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRbInN0cm9rZS1kYXNoYXJyYXkiXShyLGksYSl9LG9wYWNpdHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZC5vcGFjaXR5KHIsaSxhKX0sZGlzcGxheTpmdW5jdGlvbih0LGUpe3JldHVybiBkLmRpc3BsYXkocixpLGEpfX0pfX07dmFyIGY9ZS5hbmd1bGFyU2NhbGUucmFuZ2UoKSxoPU1hdGguYWJzKGZbMV0tZlswXSkvb1swXS5sZW5ndGgqTWF0aC5QSS8xODAscD1uLnN2Zy5hcmMoKS5zdGFydEFuZ2xlKChmdW5jdGlvbih0KXtyZXR1cm4taC8yfSkpLmVuZEFuZ2xlKChmdW5jdGlvbih0KXtyZXR1cm4gaC8yfSkpLmlubmVyUmFkaXVzKChmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZShsKyh0WzJdfHwwKSl9KSkub3V0ZXJSYWRpdXMoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJhZGlhbFNjYWxlKGwrKHRbMl18fDApKStlLnJhZGlhbFNjYWxlKHRbMV0pfSkpO2MuYXJjPWZ1bmN0aW9uKHQscixpKXtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBhcmMiLGQ6cCx0cmFuc2Zvcm06ZnVuY3Rpb24odCxyKXtyZXR1cm4icm90YXRlKCIrKGUub3JpZW50YXRpb24rcyh0WzBdKSs5MCkrIikifX0pfTt2YXIgZD17ZmlsbDpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRbbl0uZGF0YS5jb2xvcn0sc3Ryb2tlOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLnN0cm9rZUNvbG9yfSwic3Ryb2tlLXdpZHRoIjpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRbbl0uZGF0YS5zdHJva2VTaXplKyJweCJ9LCJzdHJva2UtZGFzaGFycmF5IjpmdW5jdGlvbihlLG4saSl7cmV0dXJuIHJbdFtpXS5kYXRhLnN0cm9rZURhc2hdfSxvcGFjaXR5OmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLm9wYWNpdHl9LGRpc3BsYXk6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgdFtuXS5kYXRhLnZpc2libGV8fHRbbl0uZGF0YS52aXNpYmxlPyJibG9jayI6Im5vbmUifX0sZz1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcubGF5ZXIiKS5kYXRhKG8pO2cuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKHtjbGFzczoibGF5ZXIifSk7dmFyIG09Zy5zZWxlY3RBbGwoInBhdGgubWFyayIpLmRhdGEoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9KSk7bS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2NsYXNzOiJtYXJrIn0pLG0uc3R5bGUoZCkuZWFjaChjW2UuZ2VvbWV0cnlUeXBlXSksbS5leGl0KCkucmVtb3ZlKCksZy5leGl0KCkucmVtb3ZlKCl9KSl9cmV0dXJuIGEuY29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dFtyXXx8KHRbcl09e30pLGkodFtyXSxvLlBvbHlDaGFydC5kZWZhdWx0Q29uZmlnKCkpLGkodFtyXSxlKX0pKSx0aGlzKTp0fSxhLmdldENvbG9yU2NhbGU9ZnVuY3Rpb24oKXt9LG4ucmViaW5kKGEsZSwib24iKSxhfSxvLlBvbHlDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2RhdGE6e25hbWU6Imdlb20xIix0OltbMSwyLDMsNF1dLHI6W1sxLDIsMyw0XV0sZG90VHlwZToiY2lyY2xlIixkb3RTaXplOjY0LGRvdFZpc2libGU6ITEsYmFyV2lkdGg6MjAsY29sb3I6IiNmZmE1MDAiLHN0cm9rZVNpemU6MSxzdHJva2VDb2xvcjoic2lsdmVyIixzdHJva2VEYXNoOiJzb2xpZCIsb3BhY2l0eToxLGluZGV4OjAsdmlzaWJsZTohMCx2aXNpYmxlSW5MZWdlbmQ6ITB9LGdlb21ldHJ5Q29uZmlnOntnZW9tZXRyeToiTGluZVBsb3QiLGdlb21ldHJ5VHlwZToiYXJjIixkaXJlY3Rpb246ImNsb2Nrd2lzZSIsb3JpZW50YXRpb246MCxjb250YWluZXI6ImJvZHkiLHJhZGlhbFNjYWxlOm51bGwsYW5ndWxhclNjYWxlOm51bGwsY29sb3JTY2FsZTpuLnNjYWxlLmNhdGVnb3J5MjAoKX19fSxvLkJhckNoYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uQmFyQ2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJiYXIifX19LG8uQXJlYUNoYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uQXJlYUNoYXJ0LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToiYXJjIn19fSxvLkRvdFBsb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5Eb3RQbG90LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToiZG90Iixkb3RUeXBlOiJjaXJjbGUifX19LG8uTGluZVBsb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5MaW5lUGxvdC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6ImxpbmUifX19LG8uTGVnZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9by5MZWdlbmQuZGVmYXVsdENvbmZpZygpLGU9bi5kaXNwYXRjaCgiaG92ZXIiKTtmdW5jdGlvbiByKCl7dmFyIGU9dC5sZWdlbmRDb25maWcsYT10LmRhdGEubWFwKChmdW5jdGlvbih0LHIpe3JldHVybltdLmNvbmNhdCh0KS5tYXAoKGZ1bmN0aW9uKHQsbil7dmFyIGE9aSh7fSxlLmVsZW1lbnRzW3JdKTtyZXR1cm4gYS5uYW1lPXQsYS5jb2xvcj1bXS5jb25jYXQoZS5lbGVtZW50c1tyXS5jb2xvcilbbl0sYX0pKX0pKSxvPW4ubWVyZ2UoYSk7bz1vLmZpbHRlcigoZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5lbGVtZW50c1tyXSYmKGUuZWxlbWVudHNbcl0udmlzaWJsZUluTGVnZW5kfHwidW5kZWZpbmVkIj09dHlwZW9mIGUuZWxlbWVudHNbcl0udmlzaWJsZUluTGVnZW5kKX0pKSxlLnJldmVyc2VPcmRlciYmKG89by5yZXZlcnNlKCkpO3ZhciBzPWUuY29udGFpbmVyOygic3RyaW5nIj09dHlwZW9mIHN8fHMubm9kZU5hbWUpJiYocz1uLnNlbGVjdChzKSk7dmFyIGw9by5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29sb3J9KSksYz1lLmZvbnRTaXplLHU9bnVsbD09ZS5pc0NvbnRpbnVvdXM/Im51bWJlciI9PXR5cGVvZiBvWzBdOmUuaXNDb250aW51b3VzLGY9dT9lLmhlaWdodDpjKm8ubGVuZ3RoLGg9cy5jbGFzc2VkKCJsZWdlbmQtZ3JvdXAiLCEwKS5zZWxlY3RBbGwoInN2ZyIpLmRhdGEoWzBdKSxwPWguZW50ZXIoKS5hcHBlbmQoInN2ZyIpLmF0dHIoe3dpZHRoOjMwMCxoZWlnaHQ6ZitjLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsdmVyc2lvbjoiMS4xIn0pO3AuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kLWF4aXMiLCEwKSxwLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrcyIsITApO3ZhciBkPW4ucmFuZ2Uoby5sZW5ndGgpLGc9bi5zY2FsZVt1PyJsaW5lYXIiOiJvcmRpbmFsIl0oKS5kb21haW4oZCkucmFuZ2UobCksbT1uLnNjYWxlW3U/ImxpbmVhciI6Im9yZGluYWwiXSgpLmRvbWFpbihkKVt1PyJyYW5nZSI6InJhbmdlUG9pbnRzIl0oWzAsZl0pO2lmKHUpe3ZhciB2PWguc2VsZWN0KCIubGVnZW5kLW1hcmtzIikuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoe2lkOiJncmFkMSIseDE6IjAlIix5MToiMCUiLHgyOiIwJSIseTI6IjEwMCUifSkuc2VsZWN0QWxsKCJzdG9wIikuZGF0YShsKTt2LmVudGVyKCkuYXBwZW5kKCJzdG9wIiksdi5hdHRyKHtvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS8obC5sZW5ndGgtMSkqMTAwKyIlIn19KS5zdHlsZSh7InN0b3AtY29sb3IiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9fSksaC5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJsZWdlbmQtbWFyayIsITApLmF0dHIoe2hlaWdodDplLmhlaWdodCx3aWR0aDplLmNvbG9yQmFuZFdpZHRoLGZpbGw6InVybCgjZ3JhZDEpIn0pfWVsc2V7dmFyIHk9aC5zZWxlY3QoIi5sZWdlbmQtbWFya3MiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kLW1hcmsiKS5kYXRhKG8pO3kuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQtbWFyayIsITApLHkuYXR0cih7dHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuInRyYW5zbGF0ZSgiK1tjLzIsbShlKStjLzJdKyIpIn0sZDpmdW5jdGlvbih0LGUpe3ZhciByLGksYSxvPXQuc3ltYm9sO3JldHVybiBhPTMqKGk9YyksImxpbmUiPT09KHI9byk/Ik0iK1tbLWkvMiwtaS8xMl0sW2kvMiwtaS8xMl0sW2kvMixpLzEyXSxbLWkvMixpLzEyXV0rIloiOi0xIT1uLnN2Zy5zeW1ib2xUeXBlcy5pbmRleE9mKHIpP24uc3ZnLnN5bWJvbCgpLnR5cGUocikuc2l6ZShhKSgpOm4uc3ZnLnN5bWJvbCgpLnR5cGUoInNxdWFyZSIpLnNpemUoYSkoKX0sZmlsbDpmdW5jdGlvbih0LGUpe3JldHVybiBnKGUpfX0pLHkuZXhpdCgpLnJlbW92ZSgpfXZhciB4PW4uc3ZnLmF4aXMoKS5zY2FsZShtKS5vcmllbnQoInJpZ2h0IiksYj1oLnNlbGVjdCgiZy5sZWdlbmQtYXhpcyIpLmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW3U/ZS5jb2xvckJhbmRXaWR0aDpjLGMvMl0rIikifSkuY2FsbCh4KTtyZXR1cm4gYi5zZWxlY3RBbGwoIi5kb21haW4iKS5zdHlsZSh7ZmlsbDoibm9uZSIsc3Ryb2tlOiJub25lIn0pLGIuc2VsZWN0QWxsKCJsaW5lIikuc3R5bGUoe2ZpbGw6Im5vbmUiLHN0cm9rZTp1P2UudGV4dENvbG9yOiJub25lIn0pLGIuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoe2ZpbGw6ZS50ZXh0Q29sb3IsImZvbnQtc2l6ZSI6ZS5mb250U2l6ZX0pLnRleHQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG9bZV0ubmFtZX0pKSxyfXJldHVybiByLmNvbmZpZz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSh0LGUpLHRoaXMpOnR9LG4ucmViaW5kKHIsZSwib24iKSxyfSxvLkxlZ2VuZC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6WyJhIiwiYiIsImMiXSxsZWdlbmRDb25maWc6e2VsZW1lbnRzOlt7c3ltYm9sOiJsaW5lIixjb2xvcjoicmVkIn0se3N5bWJvbDoic3F1YXJlIixjb2xvcjoieWVsbG93In0se3N5bWJvbDoiZGlhbW9uZCIsY29sb3I6ImxpbWVncmVlbiJ9XSxoZWlnaHQ6MTUwLGNvbG9yQmFuZFdpZHRoOjMwLGZvbnRTaXplOjEyLGNvbnRhaW5lcjoiYm9keSIsaXNDb250aW51b3VzOm51bGwsdGV4dENvbG9yOiJncmV5IixyZXZlcnNlT3JkZXI6ITF9fX0sby50b29sdGlwUGFuZWw9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsYT17Y29udGFpbmVyOm51bGwsaGFzVGljazohMSxmb250U2l6ZToxMixjb2xvcjoid2hpdGUiLHBhZGRpbmc6NX0scz0idG9vbHRpcC0iK28udG9vbHRpcFBhbmVsLnVpZCsrLGw9MTAsYz1mdW5jdGlvbigpe3ZhciBuPSh0PWEuY29udGFpbmVyLnNlbGVjdEFsbCgiZy4iK3MpLmRhdGEoWzBdKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHMsITApLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIixkaXNwbGF5OiJub25lIn0pO3JldHVybiByPW4uYXBwZW5kKCJwYXRoIikuc3R5bGUoe2ZpbGw6IndoaXRlIiwiZmlsbC1vcGFjaXR5IjouOX0pLmF0dHIoe2Q6Ik0wIDAifSksZT1uLmFwcGVuZCgidGV4dCIpLmF0dHIoe2R4OmEucGFkZGluZytsLGR5Oi4zKithLmZvbnRTaXplfSksY307cmV0dXJuIGMudGV4dD1mdW5jdGlvbihpKXt2YXIgbz1uLmhzbChhLmNvbG9yKS5sLHM9bz49LjU/IiNhYWEiOiJ3aGl0ZSIsdT1vPj0uNT8iYmxhY2siOiJ3aGl0ZSIsZj1pfHwiIjtlLnN0eWxlKHtmaWxsOnUsImZvbnQtc2l6ZSI6YS5mb250U2l6ZSsicHgifSkudGV4dChmKTt2YXIgaD1hLnBhZGRpbmcscD1lLm5vZGUoKS5nZXRCQm94KCksZD17ZmlsbDphLmNvbG9yLHN0cm9rZTpzLCJzdHJva2Utd2lkdGgiOiIycHgifSxnPXAud2lkdGgrMipoK2wsbT1wLmhlaWdodCsyKmg7cmV0dXJuIHIuYXR0cih7ZDoiTSIrW1tsLC1tLzJdLFtsLC1tLzRdLFthLmhhc1RpY2s/MDpsLDBdLFtsLG0vNF0sW2wsbS8yXSxbZyxtLzJdLFtnLC1tLzJdXS5qb2luKCJMIikrIloifSkuc3R5bGUoZCksdC5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1tsLC1tLzIrMipoXSsiKSJ9KSx0LnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxjfSxjLm1vdmU9ZnVuY3Rpb24oZSl7aWYodClyZXR1cm4gdC5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1tlWzBdLGVbMV1dKyIpIn0pLnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxjfSxjLmhpZGU9ZnVuY3Rpb24oKXtpZih0KXJldHVybiB0LnN0eWxlKHtkaXNwbGF5OiJub25lIn0pLGN9LGMuc2hvdz1mdW5jdGlvbigpe2lmKHQpcmV0dXJuIHQuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pLGN9LGMuY29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBpKGEsdCksY30sY30sby50b29sdGlwUGFuZWwudWlkPTEsby5hZGFwdGVyPXt9LG8uYWRhcHRlci5wbG90bHk9ZnVuY3Rpb24oKXt2YXIgdD17Y29udmVydDpmdW5jdGlvbih0LGUpe3ZhciByPXt9O2lmKHQuZGF0YSYmKHIuZGF0YT10LmRhdGEubWFwKChmdW5jdGlvbih0LHIpe3ZhciBuPWkoe30sdCk7cmV0dXJuW1tuLFsibWFya2VyIiwiY29sb3IiXSxbImNvbG9yIl1dLFtuLFsibWFya2VyIiwib3BhY2l0eSJdLFsib3BhY2l0eSJdXSxbbixbIm1hcmtlciIsImxpbmUiLCJjb2xvciJdLFsic3Ryb2tlQ29sb3IiXV0sW24sWyJtYXJrZXIiLCJsaW5lIiwiZGFzaCJdLFsic3Ryb2tlRGFzaCJdXSxbbixbIm1hcmtlciIsImxpbmUiLCJ3aWR0aCJdLFsic3Ryb2tlU2l6ZSJdXSxbbixbIm1hcmtlciIsInN5bWJvbCJdLFsiZG90VHlwZSJdXSxbbixbIm1hcmtlciIsInNpemUiXSxbImRvdFNpemUiXV0sW24sWyJtYXJrZXIiLCJiYXJXaWR0aCJdLFsiYmFyV2lkdGgiXV0sW24sWyJsaW5lIiwiaW50ZXJwb2xhdGlvbiJdLFsibGluZUludGVycG9sYXRpb24iXV0sW24sWyJzaG93bGVnZW5kIl0sWyJ2aXNpYmxlSW5MZWdlbmQiXV1dLmZvckVhY2goKGZ1bmN0aW9uKHQscil7by51dGlsLnRyYW5zbGF0b3IuYXBwbHkobnVsbCx0LmNvbmNhdChlKSl9KSksZXx8ZGVsZXRlIG4ubWFya2VyLGUmJmRlbGV0ZSBuLmdyb3VwSWQsZT8oIkxpbmVQbG90Ij09PW4uZ2VvbWV0cnk/KG4udHlwZT0ic2NhdHRlciIsITA9PT1uLmRvdFZpc2libGU/KGRlbGV0ZSBuLmRvdFZpc2libGUsbi5tb2RlPSJsaW5lcyttYXJrZXJzIik6bi5tb2RlPSJsaW5lcyIpOiJEb3RQbG90Ij09PW4uZ2VvbWV0cnk/KG4udHlwZT0ic2NhdHRlciIsbi5tb2RlPSJtYXJrZXJzIik6IkFyZWFDaGFydCI9PT1uLmdlb21ldHJ5P24udHlwZT0iYXJlYSI6IkJhckNoYXJ0Ij09PW4uZ2VvbWV0cnkmJihuLnR5cGU9ImJhciIpLGRlbGV0ZSBuLmdlb21ldHJ5KTooInNjYXR0ZXIiPT09bi50eXBlPyJsaW5lcyI9PT1uLm1vZGU/bi5nZW9tZXRyeT0iTGluZVBsb3QiOiJtYXJrZXJzIj09PW4ubW9kZT9uLmdlb21ldHJ5PSJEb3RQbG90IjoibGluZXMrbWFya2VycyI9PT1uLm1vZGUmJihuLmdlb21ldHJ5PSJMaW5lUGxvdCIsbi5kb3RWaXNpYmxlPSEwKToiYXJlYSI9PT1uLnR5cGU/bi5nZW9tZXRyeT0iQXJlYUNoYXJ0IjoiYmFyIj09PW4udHlwZSYmKG4uZ2VvbWV0cnk9IkJhckNoYXJ0IiksZGVsZXRlIG4ubW9kZSxkZWxldGUgbi50eXBlKSxufSkpLCFlJiZ0LmxheW91dCYmInN0YWNrIj09PXQubGF5b3V0LmJhcm1vZGUpKXt2YXIgYT1vLnV0aWwuZHVwbGljYXRlcyhyLmRhdGEubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmdlb21ldHJ5fSkpKTtyLmRhdGEuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgbj1hLmluZGV4T2YodC5nZW9tZXRyeSk7LTEhPW4mJihyLmRhdGFbZV0uZ3JvdXBJZD1uKX0pKX1pZih0LmxheW91dCl7dmFyIHM9aSh7fSx0LmxheW91dCk7aWYoW1tzLFsicGxvdF9iZ2NvbG9yIl0sWyJiYWNrZ3JvdW5kQ29sb3IiXV0sW3MsWyJzaG93bGVnZW5kIl0sWyJzaG93TGVnZW5kIl1dLFtzLFsicmFkaWFsYXhpcyJdLFsicmFkaWFsQXhpcyJdXSxbcyxbImFuZ3VsYXJheGlzIl0sWyJhbmd1bGFyQXhpcyJdXSxbcy5hbmd1bGFyYXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtzLmFuZ3VsYXJheGlzLFsic2hvd3RpY2tsYWJlbHMiXSxbImxhYmVsc1Zpc2libGUiXV0sW3MuYW5ndWxhcmF4aXMsWyJudGlja3MiXSxbInRpY2tzQ291bnQiXV0sW3MuYW5ndWxhcmF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbcy5hbmd1bGFyYXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtzLmFuZ3VsYXJheGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbcy5hbmd1bGFyYXhpcyxbImVuZHBhZGRpbmciXSxbImVuZFBhZGRpbmciXV0sW3MucmFkaWFsYXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtzLnJhZGlhbGF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbcy5yYWRpYWxheGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW3MucmFkaWFsYXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW3MuYW5ndWxhckF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbcy5hbmd1bGFyQXhpcyxbInNob3d0aWNrbGFiZWxzIl0sWyJsYWJlbHNWaXNpYmxlIl1dLFtzLmFuZ3VsYXJBeGlzLFsibnRpY2tzIl0sWyJ0aWNrc0NvdW50Il1dLFtzLmFuZ3VsYXJBeGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW3MuYW5ndWxhckF4aXMsWyJ0aWNrc3VmZml4Il0sWyJ0aWNrc1N1ZmZpeCJdXSxbcy5hbmd1bGFyQXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW3MuYW5ndWxhckF4aXMsWyJlbmRwYWRkaW5nIl0sWyJlbmRQYWRkaW5nIl1dLFtzLnJhZGlhbEF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbcy5yYWRpYWxBeGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW3MucmFkaWFsQXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtzLnJhZGlhbEF4aXMsWyJyYW5nZSJdLFsiZG9tYWluIl1dLFtzLmZvbnQsWyJvdXRsaW5lY29sb3IiXSxbIm91dGxpbmVDb2xvciJdXSxbcy5sZWdlbmQsWyJ0cmFjZW9yZGVyIl0sWyJyZXZlcnNlT3JkZXIiXV0sW3MsWyJsYWJlbG9mZnNldCJdLFsibGFiZWxPZmZzZXQiXV0sW3MsWyJkZWZhdWx0Y29sb3JyYW5nZSJdLFsiZGVmYXVsdENvbG9yUmFuZ2UiXV1dLmZvckVhY2goKGZ1bmN0aW9uKHQscil7by51dGlsLnRyYW5zbGF0b3IuYXBwbHkobnVsbCx0LmNvbmNhdChlKSl9KSksZT8oInVuZGVmaW5lZCIhPXR5cGVvZiBzLnRpY2tMZW5ndGgmJihzLmFuZ3VsYXJheGlzLnRpY2tsZW49cy50aWNrTGVuZ3RoLGRlbGV0ZSBzLnRpY2tMZW5ndGgpLHMudGlja0NvbG9yJiYocy5hbmd1bGFyYXhpcy50aWNrY29sb3I9cy50aWNrQ29sb3IsZGVsZXRlIHMudGlja0NvbG9yKSk6KHMuYW5ndWxhckF4aXMmJiJ1bmRlZmluZWQiIT10eXBlb2Ygcy5hbmd1bGFyQXhpcy50aWNrbGVuJiYocy50aWNrTGVuZ3RoPXMuYW5ndWxhckF4aXMudGlja2xlbikscy5hbmd1bGFyQXhpcyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzLmFuZ3VsYXJBeGlzLnRpY2tjb2xvciYmKHMudGlja0NvbG9yPXMuYW5ndWxhckF4aXMudGlja2NvbG9yKSkscy5sZWdlbmQmJiJib29sZWFuIiE9dHlwZW9mIHMubGVnZW5kLnJldmVyc2VPcmRlciYmKHMubGVnZW5kLnJldmVyc2VPcmRlcj0ibm9ybWFsIiE9cy5sZWdlbmQucmV2ZXJzZU9yZGVyKSxzLmxlZ2VuZCYmImJvb2xlYW4iPT10eXBlb2Ygcy5sZWdlbmQudHJhY2VvcmRlciYmKHMubGVnZW5kLnRyYWNlb3JkZXI9cy5sZWdlbmQudHJhY2VvcmRlcj8icmV2ZXJzZWQiOiJub3JtYWwiLGRlbGV0ZSBzLmxlZ2VuZC5yZXZlcnNlT3JkZXIpLHMubWFyZ2luJiYidW5kZWZpbmVkIiE9dHlwZW9mIHMubWFyZ2luLnQpe3ZhciBsPVsidCIsInIiLCJiIiwibCIsInBhZCJdLGM9WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJwYWQiXSx1PXt9O24uZW50cmllcyhzLm1hcmdpbikuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt1W2NbbC5pbmRleE9mKHQua2V5KV1dPXQudmFsdWV9KSkscy5tYXJnaW49dX1lJiYoZGVsZXRlIHMubmVlZHNFbmRTcGFjaW5nLGRlbGV0ZSBzLm1pbm9yVGlja0NvbG9yLGRlbGV0ZSBzLm1pbm9yVGlja3MsZGVsZXRlIHMuYW5ndWxhcmF4aXMudGlja3NDb3VudCxkZWxldGUgcy5hbmd1bGFyYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBzLmFuZ3VsYXJheGlzLnRpY2tzU3RlcCxkZWxldGUgcy5hbmd1bGFyYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIHMuYW5ndWxhcmF4aXMubnRpY2tzLGRlbGV0ZSBzLnJhZGlhbGF4aXMudGlja3NDb3VudCxkZWxldGUgcy5yYWRpYWxheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMucmFkaWFsYXhpcy50aWNrc1N0ZXAsZGVsZXRlIHMucmFkaWFsYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIHMucmFkaWFsYXhpcy5udGlja3MpLHIubGF5b3V0PXN9cmV0dXJuIHJ9fTtyZXR1cm4gdH19LHsiLi4vLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ1LCIuLi8uLi8uLi9saWIiOjc3OCxkMzoxNjl9XSw5MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi9taWNyb3BvbGFyIikscz10KCIuL3VuZG9fbWFuYWdlciIpLGw9aS5leHRlbmREZWVwQWxsLGM9ZS5leHBvcnRzPXt9O2MuZnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLHUsZj1uZXcgcztmdW5jdGlvbiBoKHIscyl7cmV0dXJuIHMmJih1PXMpLG4uc2VsZWN0KG4uc2VsZWN0KHUpLm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyPio6bm90KC5jaGFydC1yb290KSIpLnJlbW92ZSgpLGU9ZT9sKGUscik6cixpfHwoaT1vLkF4aXMoKSksYT1vLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChlKSxpLmNvbmZpZyhhKS5yZW5kZXIodSksdC5kYXRhPWUuZGF0YSx0LmxheW91dD1lLmxheW91dCxjLmZpbGxMYXlvdXQodCksZX1yZXR1cm4gaC5pc1BvbGFyPSEwLGguc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc3ZnKCl9LGguZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LGguZ2V0TGl2ZUNvbmZpZz1mdW5jdGlvbigpe3JldHVybiBvLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChpLmdldExpdmVDb25maWcoKSwhMCl9LGguZ2V0TGl2ZVNjYWxlcz1mdW5jdGlvbigpe3JldHVybnt0OmkuYW5ndWxhclNjYWxlKCkscjppLnJhZGlhbFNjYWxlKCl9fSxoLnNldFVuZG9Qb2ludD1mdW5jdGlvbigpe3ZhciB0LG4saT10aGlzLGE9by51dGlsLmNsb25lSnNvbihlKTt0PWEsbj1yLGYuYWRkKHt1bmRvOmZ1bmN0aW9uKCl7biYmaShuKX0scmVkbzpmdW5jdGlvbigpe2kodCl9fSkscj1vLnV0aWwuY2xvbmVKc29uKGEpfSxoLnVuZG89ZnVuY3Rpb24oKXtmLnVuZG8oKX0saC5yZWRvPWZ1bmN0aW9uKCl7Zi5yZWRvKCl9LGh9LGMuZmlsbExheW91dD1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5wbG90LWNvbnRhaW5lciIpLHI9ZS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIiksaT10LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuc3ZnJiZ0LmZyYW1ld29yay5zdmcoKSxvPXt3aWR0aDo4MDAsaGVpZ2h0OjYwMCxwYXBlcl9iZ2NvbG9yOmEuYmFja2dyb3VuZCxfY29udGFpbmVyOmUsX3BhcGVyZGl2OnIsX3BhcGVyOml9O3QuX2Z1bGxMYXlvdXQ9bChvLHQubGF5b3V0KX19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi8uLi9saWIiOjc3OCwiLi9taWNyb3BvbGFyIjo5MDAsIi4vdW5kb19tYW5hZ2VyIjo5MDIsZDM6MTY5fV0sOTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9W10scj0tMSxuPSExO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdD8obj0hMCx0W2VdKCksbj0hMSx0aGlzKTp0aGlzfXJldHVybnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG58fChlLnNwbGljZShyKzEsZS5sZW5ndGgtciksZS5wdXNoKHQpLHI9ZS5sZW5ndGgtMSksdGhpc30sc2V0Q2FsbGJhY2s6ZnVuY3Rpb24oZSl7dD1lfSx1bmRvOmZ1bmN0aW9uKCl7dmFyIG49ZVtyXTtyZXR1cm4gbj8oaShuLCJ1bmRvIiksci09MSx0JiZ0KG4udW5kbyksdGhpcyk6dGhpc30scmVkbzpmdW5jdGlvbigpe3ZhciBuPWVbcisxXTtyZXR1cm4gbj8oaShuLCJyZWRvIikscis9MSx0JiZ0KG4ucmVkbyksdGhpcyk6dGhpc30sY2xlYXI6ZnVuY3Rpb24oKXtlPVtdLHI9LTF9LGhhc1VuZG86ZnVuY3Rpb24oKXtyZXR1cm4tMSE9PXJ9LGhhc1JlZG86ZnVuY3Rpb24oKXtyZXR1cm4gcjxlLmxlbmd0aC0xfSxnZXRDb21tYW5kczpmdW5jdGlvbigpe3JldHVybiBlfSxnZXRQcmV2aW91c0NvbW1hbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtyLTFdfSxnZXRJbmRleDpmdW5jdGlvbigpe3JldHVybiByfX19fSx7fV0sOTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clJvdGF0ZSxsPW8uc3RyVHJhbnNsYXRlLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksZj10KCIuLi9wbG90cyIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxwPXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGQ9dCgiLi9zZXRfY29udmVydCIpLGc9dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlLG09dCgiLi4vY2FydGVzaWFuL2RyYWdib3giKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSx5PXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSx4PXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksYj10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCxfPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLHc9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LFQ9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGs9dCgiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksTT10KCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyIpLnJlZHJhd1JlZ2xUcmFjZXMsQT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTUlEX1NISUZULFM9dCgiLi9jb25zdGFudHMiKSxFPXQoIi4vaGVscGVycyIpLEM9by5fLEw9by5tb2QsST1vLmRlZzJyYWQsUD1vLnJhZDJkZWc7ZnVuY3Rpb24geih0LGUpe3RoaXMuaWQ9ZSx0aGlzLmdkPXQsdGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPW51bGwsdGhpcy52YW5nbGVzPW51bGwsdGhpcy5yYWRpYWxBeGlzQW5nbGU9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fSx0aGlzLmNsaXBQYXRocz17fSx0aGlzLmNsaXBJZHM9e30sdGhpcy52aWV3SW5pdGlhbD17fTt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ImNsaXAiK3IuX3VpZCtlO3RoaXMuY2xpcElkcy5mb3JUcmFjZXM9bisiLWZvci10cmFjZXMiLHRoaXMuY2xpcFBhdGhzLmZvclRyYWNlcz1yLl9jbGlwcy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHRoaXMuY2xpcElkcy5mb3JUcmFjZXMpLHRoaXMuY2xpcFBhdGhzLmZvclRyYWNlcy5hcHBlbmQoInBhdGgiKSx0aGlzLmZyYW1ld29yaz1yLl9wb2xhcmxheWVyLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixlKSx0aGlzLnJhZGlhbFRpY2tMYXlvdXQ9bnVsbCx0aGlzLmFuZ3VsYXJUaWNrTGF5b3V0PW51bGx9dmFyIE89ei5wcm90b3R5cGU7ZnVuY3Rpb24gRCh0KXt2YXIgZT10LnRpY2tzK1N0cmluZyh0LnRpY2tsZW4pK1N0cmluZyh0LnNob3d0aWNrbGFiZWxzKTtyZXR1cm4ic2lkZSJpbiB0JiYoZSs9dC5zaWRlKSxlfWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4gZVtvLmZpbmRJbmRleE9mTWluKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBvLmFuZ2xlRGlzdCh0LGUpfSkpXX1mdW5jdGlvbiBGKHQsZSxyKXtyZXR1cm4gZT8odC5hdHRyKCJkaXNwbGF5IixudWxsKSx0LmF0dHIocikpOnQmJnQuYXR0cigiZGlzcGxheSIsIm5vbmUiKSx0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgeih0LGUpfSxPLnBsb3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7aWYoITE9PT10W25dWzBdLnRyYWNlLmNsaXBvbmF4aXMpe3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319dGhpcy51cGRhdGVMYXllcnMoZSxyKSx0aGlzLnVwZGF0ZUxheW91dChlLHIpLGYuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ2QsdGhpcyx0LHIpLHRoaXMudXBkYXRlRngoZSxyKX0sTy51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVycyxpPWUucmFkaWFsYXhpcyxhPWUuYW5ndWxhcmF4aXMsbz1TLmxheWVyTmFtZXMscz1vLmluZGV4T2YoImZyb250cGxvdCIpLGw9by5zbGljZSgwLHMpLGM9ImJlbG93IHRyYWNlcyI9PT1hLmxheWVyLHU9ImJlbG93IHRyYWNlcyI9PT1pLmxheWVyO2MmJmwucHVzaCgiYW5ndWxhci1saW5lIiksdSYmbC5wdXNoKCJyYWRpYWwtbGluZSIpLGMmJmwucHVzaCgiYW5ndWxhci1heGlzIiksdSYmbC5wdXNoKCJyYWRpYWwtYXhpcyIpLGwucHVzaCgiZnJvbnRwbG90IiksY3x8bC5wdXNoKCJhbmd1bGFyLWxpbmUiKSx1fHxsLnB1c2goInJhZGlhbC1saW5lIiksY3x8bC5wdXNoKCJhbmd1bGFyLWF4aXMiKSx1fHxsLnB1c2goInJhZGlhbC1heGlzIik7dmFyIGY9dGhpcy5mcmFtZXdvcmsuc2VsZWN0QWxsKCIucG9sYXJzdWJsYXllciIpLmRhdGEobCxTdHJpbmcpO2YuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJwb2xhcnN1YmxheWVyICIrdH0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1yW3RdPW4uc2VsZWN0KHRoaXMpO3N3aXRjaCh0KXtjYXNlImZyb250cGxvdCI6ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJiYXJsYXllciIsITApLGUuYXBwZW5kKCJnIikuY2xhc3NlZCgic2NhdHRlcmxheWVyIiwhMCk7YnJlYWs7Y2FzZSJiYWNrcGxvdCI6ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJtYXBsYXllciIsITApO2JyZWFrO2Nhc2UicGxvdGJnIjpyLmJnPWUuYXBwZW5kKCJwYXRoIik7YnJlYWs7Y2FzZSJyYWRpYWwtZ3JpZCI6Y2FzZSJhbmd1bGFyLWdyaWQiOmUuc3R5bGUoImZpbGwiLCJub25lIik7YnJlYWs7Y2FzZSJyYWRpYWwtbGluZSI6ZS5hcHBlbmQoImxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTticmVhaztjYXNlImFuZ3VsYXItbGluZSI6ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKX19KSksZi5vcmRlcigpfSxPLnVwZGF0ZUxheW91dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF5ZXJzLG49dC5fc2l6ZSxpPWUucmFkaWFsYXhpcyxhPWUuYW5ndWxhcmF4aXMsbz1lLmRvbWFpbi54LHM9ZS5kb21haW4ueTt0aGlzLnhPZmZzZXQ9bi5sK24udypvWzBdLHRoaXMueU9mZnNldD1uLnQrbi5oKigxLXNbMV0pO3ZhciBmPXRoaXMueExlbmd0aD1uLncqKG9bMV0tb1swXSksaD10aGlzLnlMZW5ndGg9bi5oKihzWzFdLXNbMF0pLHA9ZS5zZWN0b3I7dGhpcy5zZWN0b3JJblJhZD1wLm1hcChJKTt2YXIgZCxnLG0sdix5LHg9dGhpcy5zZWN0b3JCQm94PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dFswXSxvPXRbMV0tYSxzPUwoYSwzNjApLGw9cytvLGM9TWF0aC5jb3MoSShzKSksdT1NYXRoLnNpbihJKHMpKSxmPU1hdGguY29zKEkobCkpLGg9TWF0aC5zaW4oSShsKSk7aT1zPD05MCYmbD49OTB8fHM+OTAmJmw+PTQ1MD8xOnU8PTAmJmg8PTA/MDpNYXRoLm1heCh1LGgpO2U9czw9MTgwJiZsPj0xODB8fHM+MTgwJiZsPj01NDA/LTE6Yz49MCYmZj49MD8wOk1hdGgubWluKGMsZik7cj1zPD0yNzAmJmw+PTI3MHx8cz4yNzAmJmw+PTYzMD8tMTp1Pj0wJiZoPj0wPzA6TWF0aC5taW4odSxoKTtuPWw+PTM2MD8xOmM8PTAmJmY8PTA/MDpNYXRoLm1heChjLGYpO3JldHVybltlLHIsbixpXX0ocCksYj14WzJdLXhbMF0sXz14WzNdLXhbMV0sdz1oL2YsVD1NYXRoLmFicyhfL2IpO3c+VD8oZD1mLHk9KGgtKGc9ZipUKSkvbi5oLzIsbT1bb1swXSxvWzFdXSx2PVtzWzBdK3ksc1sxXS15XSk6KGc9aCx5PShmLShkPWgvVCkpL24udy8yLG09W29bMF0reSxvWzFdLXldLHY9W3NbMF0sc1sxXV0pLHRoaXMueExlbmd0aDI9ZCx0aGlzLnlMZW5ndGgyPWcsdGhpcy54RG9tYWluMj1tLHRoaXMueURvbWFpbjI9djt2YXIgaz10aGlzLnhPZmZzZXQyPW4ubCtuLncqbVswXSxNPXRoaXMueU9mZnNldDI9bi50K24uaCooMS12WzFdKSxBPXRoaXMucmFkaXVzPWQvYixTPXRoaXMuaW5uZXJSYWRpdXM9ZS5ob2xlKkEsRT10aGlzLmN4PWstQSp4WzBdLEM9dGhpcy5jeT1NK0EqeFszXSxQPXRoaXMuY3h4PUUtayx6PXRoaXMuY3l5PUMtTTt0aGlzLnJhZGlhbEF4aXM9dGhpcy5tb2NrQXhpcyh0LGUsaSx7X2lkOiJ4IixzaWRlOntjb3VudGVyY2xvY2t3aXNlOiJ0b3AiLGNsb2Nrd2lzZToiYm90dG9tIn1baS5zaWRlXSxfcmVhbFNpZGU6aS5zaWRlLGRvbWFpbjpbUy9uLncsQS9uLnddfSksdGhpcy5hbmd1bGFyQXhpcz10aGlzLm1vY2tBeGlzKHQsZSxhLHtzaWRlOiJyaWdodCIsZG9tYWluOlswLE1hdGguUEldLGF1dG9yYW5nZTohMX0pLHRoaXMuZG9BdXRvUmFuZ2UodCxlKSx0aGlzLnVwZGF0ZUFuZ3VsYXJBeGlzKHQsZSksdGhpcy51cGRhdGVSYWRpYWxBeGlzKHQsZSksdGhpcy51cGRhdGVSYWRpYWxBeGlzVGl0bGUodCxlKSx0aGlzLnhheGlzPXRoaXMubW9ja0NhcnRlc2lhbkF4aXModCxlLHtfaWQ6IngiLGRvbWFpbjptfSksdGhpcy55YXhpcz10aGlzLm1vY2tDYXJ0ZXNpYW5BeGlzKHQsZSx7X2lkOiJ5Iixkb21haW46dn0pO3ZhciBPPXRoaXMucGF0aFN1YnBsb3QoKTt0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsTykuYXR0cigidHJhbnNmb3JtIixsKFAseikpLHIuZnJvbnRwbG90LmF0dHIoInRyYW5zZm9ybSIsbChrLE0pKS5jYWxsKHUuc2V0Q2xpcFVybCx0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U/bnVsbDp0aGlzLmNsaXBJZHMuZm9yVHJhY2VzLHRoaXMuZ2QpLHIuYmcuYXR0cigiZCIsTykuYXR0cigidHJhbnNmb3JtIixsKEUsQykpLmNhbGwoYy5maWxsLGUuYmdjb2xvcil9LE8ubW9ja0F4aXM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9by5leHRlbmRGbGF0KHt9LHIsbik7cmV0dXJuIGQoaSxlLHQpLGl9LE8ubW9ja0NhcnRlc2lhbkF4aXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1yLl9pZCxhPW8uZXh0ZW5kRmxhdCh7dHlwZToibGluZWFyIn0scik7cChhLHQpO3ZhciBzPXt4OlswLDJdLHk6WzEsM119O3JldHVybiBhLnNldFJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWN0b3JCQm94LHI9c1tpXSxvPW4ucmFkaWFsQXhpcy5fcmwsbD0ob1sxXS1vWzBdKS8oMS1lLmhvbGUpO2EucmFuZ2U9W3RbclswXV0qbCx0W3JbMV1dKmxdfSxhLmlzUHRXaXRoaW5SYW5nZT0ieCI9PT1pP2Z1bmN0aW9uKHQpe3JldHVybiBuLmlzUHRJbnNpZGUodCl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9LGEuc2V0UmFuZ2UoKSxhLnNldFNjYWxlKCksYX0sTy5kb0F1dG9SYW5nZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2Qsbj10aGlzLnJhZGlhbEF4aXMsaT1lLnJhZGlhbGF4aXM7bi5zZXRTY2FsZSgpLGcocixuKTt2YXIgYT1uLnJhbmdlO2kucmFuZ2U9YS5zbGljZSgpLGkuX2lucHV0LnJhbmdlPWEuc2xpY2UoKSxuLl9ybD1bbi5yMmwoYVswXSxudWxsLCJncmVnb3JpYW4iKSxuLnIybChhWzFdLG51bGwsImdyZWdvcmlhbiIpXX0sTy51cGRhdGVSYWRpYWxBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLHU9ci5pbm5lclJhZGl1cyxmPXIuY3gscD1yLmN5LGQ9ZS5yYWRpYWxheGlzLGc9TChlLnNlY3RvclswXSwzNjApLG09ci5yYWRpYWxBeGlzLHY9dTxhO3IuZmlsbFZpZXdJbml0aWFsS2V5KCJyYWRpYWxheGlzLmFuZ2xlIixkLmFuZ2xlKSxyLmZpbGxWaWV3SW5pdGlhbEtleSgicmFkaWFsYXhpcy5yYW5nZSIsbS5yYW5nZS5zbGljZSgpKSxtLnNldEdlb21ldHJ5KCksImF1dG8iPT09bS50aWNrYW5nbGUmJmc+OTAmJmc8PTI3MCYmKG0udGlja2FuZ2xlPTE4MCk7dmFyIHk9ZnVuY3Rpb24odCl7cmV0dXJuIGwobS5sMnAodC54KSt1LDApfSx4PUQoZCk7aWYoci5yYWRpYWxUaWNrTGF5b3V0IT09eCYmKGlbInJhZGlhbC1heGlzIl0uc2VsZWN0QWxsKCIueHRpY2siKS5yZW1vdmUoKSxyLnJhZGlhbFRpY2tMYXlvdXQ9eCksdil7bS5zZXRTY2FsZSgpO3ZhciBiPWguY2FsY1RpY2tzKG0pLF89aC5jbGlwRW5kcyhtLGIpLHc9aC5nZXRUaWNrU2lnbnMobSlbMl07aC5kcmF3VGlja3MobixtLHt2YWxzOmIsbGF5ZXI6aVsicmFkaWFsLWF4aXMiXSxwYXRoOmgubWFrZVRpY2tQYXRoKG0sMCx3KSx0cmFuc0ZuOnksY3Jpc3A6ITF9KSxoLmRyYXdHcmlkKG4sbSx7dmFsczpfLGxheWVyOmlbInJhZGlhbC1ncmlkIl0scGF0aDpmdW5jdGlvbih0KXtyZXR1cm4gci5wYXRoQXJjKG0ucjJwKHQueCkrdSl9LHRyYW5zRm46by5ub29wLGNyaXNwOiExfSksaC5kcmF3TGFiZWxzKG4sbSx7dmFsczpiLGxheWVyOmlbInJhZGlhbC1heGlzIl0sdHJhbnNGbjp5LGxhYmVsRm5zOmgubWFrZUxhYmVsRm5zKG0sMCl9KX12YXIgVD1yLnJhZGlhbEF4aXNBbmdsZT1yLnZhbmdsZXM/UChSKEkoZC5hbmdsZSksci52YW5nbGVzKSk6ZC5hbmdsZSxrPWwoZixwKSxNPWsrcygtVCk7RihpWyJyYWRpYWwtYXhpcyJdLHYmJihkLnNob3d0aWNrbGFiZWxzfHxkLnRpY2tzKSx7dHJhbnNmb3JtOk19KSxGKGlbInJhZGlhbC1ncmlkIl0sdiYmZC5zaG93Z3JpZCx7dHJhbnNmb3JtOmt9KSxGKGlbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIiksdiYmZC5zaG93bGluZSx7eDE6dSx5MTowLHgyOmEseTI6MCx0cmFuc2Zvcm06TX0pLmF0dHIoInN0cm9rZS13aWR0aCIsZC5saW5ld2lkdGgpLmNhbGwoYy5zdHJva2UsZC5saW5lY29sb3IpfSxPLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nZCxpPXRoaXMucmFkaXVzLGE9dGhpcy5jeCxvPXRoaXMuY3kscz1lLnJhZGlhbGF4aXMsbD10aGlzLmlkKyJ0aXRsZSIsYz12b2lkIDAhPT1yP3I6dGhpcy5yYWRpYWxBeGlzQW5nbGUsZj1JKGMpLGg9TWF0aC5jb3MoZikscD1NYXRoLnNpbihmKSxkPTA7aWYocy50aXRsZSl7dmFyIGc9dS5iQm94KHRoaXMubGF5ZXJzWyJyYWRpYWwtYXhpcyJdLm5vZGUoKSkuaGVpZ2h0LG09cy50aXRsZS5mb250LnNpemU7ZD0iY291bnRlcmNsb2Nrd2lzZSI9PT1zLnNpZGU/LWctLjQqbTpnKy44Km19dGhpcy5sYXllcnNbInJhZGlhbC1heGlzLXRpdGxlIl09eC5kcmF3KG4sbCx7cHJvcENvbnRhaW5lcjpzLHByb3BOYW1lOnRoaXMuaWQrIi5yYWRpYWxheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpDKG4sIkNsaWNrIHRvIGVudGVyIHJhZGlhbCBheGlzIHRpdGxlIiksYXR0cmlidXRlczp7eDphK2kvMipoK2QqcCx5Om8taS8yKnArZCpoLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOi1jfX0pfSxPLnVwZGF0ZUFuZ3VsYXJBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLHU9ci5pbm5lclJhZGl1cyxmPXIuY3gscD1yLmN5LGQ9ZS5hbmd1bGFyYXhpcyxnPXIuYW5ndWxhckF4aXM7ci5maWxsVmlld0luaXRpYWxLZXkoImFuZ3VsYXJheGlzLnJvdGF0aW9uIixkLnJvdGF0aW9uKSxnLnNldEdlb21ldHJ5KCksZy5zZXRTY2FsZSgpO3ZhciBtPWZ1bmN0aW9uKHQpe3JldHVybiBnLnQyZyh0LngpfTsibGluZWFyIj09PWcudHlwZSYmInJhZGlhbnMiPT09Zy50aGV0YXVuaXQmJihnLnRpY2swPVAoZy50aWNrMCksZy5kdGljaz1QKGcuZHRpY2spKTt2YXIgdj1mdW5jdGlvbih0KXtyZXR1cm4gbChmK2EqTWF0aC5jb3ModCkscC1hKk1hdGguc2luKHQpKX0seT1oLm1ha2VMYWJlbEZucyhnLDApLmxhYmVsU3RhbmRvZmYseD17eEZuOmZ1bmN0aW9uKHQpe3ZhciBlPW0odCk7cmV0dXJuIE1hdGguY29zKGUpKnl9LHlGbjpmdW5jdGlvbih0KXt2YXIgZT1tKHQpLHI9TWF0aC5zaW4oZSk+MD8uMjoxO3JldHVybi1NYXRoLnNpbihlKSooeSt0LmZvbnRTaXplKnIpK01hdGguYWJzKE1hdGguY29zKGUpKSoodC5mb250U2l6ZSpBKX0sYW5jaG9yRm46ZnVuY3Rpb24odCl7dmFyIGU9bSh0KSxyPU1hdGguY29zKGUpO3JldHVybiBNYXRoLmFicyhyKTwuMT8ibWlkZGxlIjpyPjA/InN0YXJ0IjoiZW5kIn0saGVpZ2h0Rm46ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW0odCk7cmV0dXJuLS41KigxK01hdGguc2luKG4pKSpyfX0sYj1EKGQpO3IuYW5ndWxhclRpY2tMYXlvdXQhPT1iJiYoaVsiYW5ndWxhci1heGlzIl0uc2VsZWN0QWxsKCIuIitnLl9pZCsidGljayIpLnJlbW92ZSgpLHIuYW5ndWxhclRpY2tMYXlvdXQ9Yik7dmFyIF8sdz1oLmNhbGNUaWNrcyhnKTtpZigibGluZWFyIj09PWUuZ3JpZHNoYXBlPyhfPXcubWFwKG0pLG8uYW5nbGVEZWx0YShfWzBdLF9bMV0pPDAmJihfPV8uc2xpY2UoKS5yZXZlcnNlKCkpKTpfPW51bGwsci52YW5nbGVzPV8sImNhdGVnb3J5Ij09PWcudHlwZSYmKHc9dy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBvLmlzQW5nbGVJbnNpZGVTZWN0b3IobSh0KSxyLnNlY3RvckluUmFkKX0pKSksZy52aXNpYmxlKXt2YXIgVD0iaW5zaWRlIj09PWcudGlja3M/LTE6MSxrPShnLmxpbmV3aWR0aHx8MSkvMjtoLmRyYXdUaWNrcyhuLGcse3ZhbHM6dyxsYXllcjppWyJhbmd1bGFyLWF4aXMiXSxwYXRoOiJNIitUKmsrIiwwaCIrVCpnLnRpY2tsZW4sdHJhbnNGbjpmdW5jdGlvbih0KXt2YXIgZT1tKHQpO3JldHVybiB2KGUpK3MoLVAoZSkpfSxjcmlzcDohMX0pLGguZHJhd0dyaWQobixnLHt2YWxzOncsbGF5ZXI6aVsiYW5ndWxhci1ncmlkIl0scGF0aDpmdW5jdGlvbih0KXt2YXIgZT1tKHQpLHI9TWF0aC5jb3MoZSksbj1NYXRoLnNpbihlKTtyZXR1cm4iTSIrW2YrdSpyLHAtdSpuXSsiTCIrW2YrYSpyLHAtYSpuXX0sdHJhbnNGbjpvLm5vb3AsY3Jpc3A6ITF9KSxoLmRyYXdMYWJlbHMobixnLHt2YWxzOncsbGF5ZXI6aVsiYW5ndWxhci1heGlzIl0scmVwb3NpdGlvbk9uVXBkYXRlOiEwLHRyYW5zRm46ZnVuY3Rpb24odCl7cmV0dXJuIHYobSh0KSl9LGxhYmVsRm5zOnh9KX1GKGlbImFuZ3VsYXItbGluZSJdLnNlbGVjdCgicGF0aCIpLGQuc2hvd2xpbmUse2Q6ci5wYXRoU3VicGxvdCgpLHRyYW5zZm9ybTpsKGYscCl9KS5hdHRyKCJzdHJva2Utd2lkdGgiLGQubGluZXdpZHRoKS5jYWxsKGMuc3Ryb2tlLGQubGluZWNvbG9yKX0sTy51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3RoaXMuZ2QuX2NvbnRleHQuc3RhdGljUGxvdHx8KHRoaXMudXBkYXRlQW5ndWxhckRyYWcodCksdGhpcy51cGRhdGVSYWRpYWxEcmFnKHQsZSwwKSx0aGlzLnVwZGF0ZVJhZGlhbERyYWcodCxlLDEpLHRoaXMudXBkYXRlTWFpbkRyYWcodCkpfSxPLnVwZGF0ZU1haW5EcmFnPWZ1bmN0aW9uKHQpe3ZhciBlLHIscz10aGlzLGM9cy5nZCx1PXMubGF5ZXJzLGY9dC5fem9vbWxheWVyLGg9Uy5NSU5aT09NLHA9Uy5PRkZFREdFLGQ9cy5yYWRpdXMsZz1zLmlubmVyUmFkaXVzLHg9cy5jeCxUPXMuY3ksaz1zLmN4eCxNPXMuY3l5LEE9cy5zZWN0b3JJblJhZCxDPXMudmFuZ2xlcyxMPXMucmFkaWFsQXhpcyxJPUUuY2xhbXBUaW55LFA9RS5maW5kWFlhdExlbmd0aCx6PUUuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyxPPVMuY29ybmVySGFsZldpZHRoLEQ9Uy5jb3JuZXJMZW4vMixSPW0ubWFrZURyYWdnZXIodSwicGF0aCIsIm1haW5kcmFnIiwiY3Jvc3NoYWlyIik7bi5zZWxlY3QoUikuYXR0cigiZCIscy5wYXRoU3VicGxvdCgpKS5hdHRyKCJ0cmFuc2Zvcm0iLGwoeCxUKSk7dmFyIEYsQixOLGosVSxWLHEsSCxHLFk9e2VsZW1lbnQ6UixnZDpjLHN1YnBsb3Q6cy5pZCxwbG90aW5mbzp7aWQ6cy5pZCx4YXhpczpzLnhheGlzLHlheGlzOnMueWF4aXN9LHhheGVzOltzLnhheGlzXSx5YXhlczpbcy55YXhpc119O2Z1bmN0aW9uIFcodCxlKXtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtlKmUpfWZ1bmN0aW9uIFgodCxlKXtyZXR1cm4gVyh0LWssZS1NKX1mdW5jdGlvbiBaKHQsZSl7cmV0dXJuIE1hdGguYXRhbjIoTS1lLHQtayl9ZnVuY3Rpb24gSih0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oLWUpXX1mdW5jdGlvbiBLKHQsZSl7aWYoMD09PXQpcmV0dXJuIHMucGF0aFNlY3RvcigyKk8pO3ZhciByPUQvdCxuPWUtcixpPWUrcixhPU1hdGgubWF4KDAsTWF0aC5taW4odCxkKSksbz1hLU8sbD1hK087cmV0dXJuIk0iK0oobyxuKSsiQSIrW28sb10rIiAwLDAsMCAiK0oobyxpKSsiTCIrSihsLGkpKyJBIitbbCxsXSsiIDAsMCwxICIrSihsLG4pKyJaIn1mdW5jdGlvbiBRKHQsZSxyKXtpZigwPT09dClyZXR1cm4gcy5wYXRoU2VjdG9yKDIqTyk7dmFyIG4saSxhPUoodCxlKSxvPUoodCxyKSxsPUkoKGFbMF0rb1swXSkvMiksYz1JKChhWzFdK29bMV0pLzIpO2lmKGwmJmMpe3ZhciB1PWMvbCxmPS0xL3UsaD1QKE8sdSxsLGMpO249UChELGYsaFswXVswXSxoWzBdWzFdKSxpPVAoRCxmLGhbMV1bMF0saFsxXVsxXSl9ZWxzZXt2YXIgcCxkO2M/KHA9RCxkPU8pOihwPU8sZD1EKSxuPVtbbC1wLGMtZF0sW2wrcCxjLWRdXSxpPVtbbC1wLGMrZF0sW2wrcCxjK2RdXX1yZXR1cm4iTSIrbi5qb2luKCJMIikrIkwiK2kucmV2ZXJzZSgpLmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24gJCh0LGUpe3JldHVybiBlPU1hdGgubWF4KE1hdGgubWluKGUsZCksZyksdDxwP3Q9MDpkLXQ8cD90PWQ6ZTxwP2U9MDpkLWU8cCYmKGU9ZCksTWF0aC5hYnMoZS10KT5oPyh0PGU/KE49dCxqPWUpOihOPWUsaj10KSwhMCk6KE49bnVsbCxqPW51bGwsITEpfWZ1bmN0aW9uIHR0KHQsZSl7dD10fHxVLGU9ZXx8Ik0wLDBaIixILmF0dHIoImQiLHQpLEcuYXR0cigiZCIsZSksbS50cmFuc2l0aW9uWm9vbWJveChILEcsVixxKSxWPSEwO3ZhciByPXt9O2F0KHIpLGMuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixyKX1mdW5jdGlvbiBldCh0LG4pe3ZhciBpLGEsbz1GKyh0Kj1lKSxsPUIrKG4qPXIpLGM9WChGLEIpLHU9TWF0aC5taW4oWChvLGwpLGQpLGY9WihGLEIpOyQoYyx1KSYmKGk9VStzLnBhdGhTZWN0b3IoaiksTiYmKGkrPXMucGF0aFNlY3RvcihOKSksYT1LKE4sZikrSyhqLGYpKSx0dChpLGEpfWZ1bmN0aW9uIHJ0KHQsZSxyLG4pe3ZhciBpPUUuZmluZEludGVyc2VjdGlvblhZKHIsbixyLFt0LWssTS1lXSk7cmV0dXJuIFcoaVswXSxpWzFdKX1mdW5jdGlvbiBudCh0LGUpe3ZhciByLG4saT1GK3QsYT1CK2Usbz1aKEYsQiksbD1aKGksYSksYz16KG8sQyksdT16KGwsQyk7JChydChGLEIsY1swXSxjWzFdKSxNYXRoLm1pbihydChpLGEsdVswXSx1WzFdKSxkKSkmJihyPVUrcy5wYXRoU2VjdG9yKGopLE4mJihyKz1zLnBhdGhTZWN0b3IoTikpLG49W1EoTixjWzBdLGNbMV0pLFEoaixjWzBdLGNbMV0pXS5qb2luKCIgIikpLHR0KHIsbil9ZnVuY3Rpb24gaXQoKXtpZihtLnJlbW92ZVpvb21ib3goYyksbnVsbCE9PU4mJm51bGwhPT1qKXt2YXIgdD17fTthdCh0KSxtLnNob3dEb3VibGVDbGlja05vdGlmaWVyKGMpLGEuY2FsbCgiX2d1aVJlbGF5b3V0IixjLHQpfX1mdW5jdGlvbiBhdCh0KXt2YXIgZT1MLl9ybCxyPShlWzFdLWVbMF0pLygxLWcvZCkvZCxuPVtlWzBdKyhOLWcpKnIsZVswXSsoai1nKSpyXTt0W3MuaWQrIi5yYWRpYWxheGlzLnJhbmdlIl09bn1mdW5jdGlvbiBvdCh0LGUpe3ZhciByPWMuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO2lmKG0ucmVtb3ZlWm9vbWJveChjKSwyPT09dCl7dmFyIG49e307Zm9yKHZhciBpIGluIHMudmlld0luaXRpYWwpbltzLmlkKyIuIitpXT1zLnZpZXdJbml0aWFsW2ldO2MuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxhLmNhbGwoIl9ndWlSZWxheW91dCIsYyxuKX1yLmluZGV4T2YoInNlbGVjdCIpPi0xJiYxPT09dCYmXyhlLGMsW3MueGF4aXNdLFtzLnlheGlzXSxzLmlkLFkpLHIuaW5kZXhPZigiZXZlbnQiKT4tMSYmeS5jbGljayhjLGUscy5pZCl9WS5wcmVwRm49ZnVuY3Rpb24odCxuLGEpe3ZhciBsPWMuX2Z1bGxMYXlvdXQuZHJhZ21vZGUsdT1SLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2MuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKGMpO3ZhciBoPWMuX2Z1bGxMYXlvdXQuX2ludlRyYW5zZm9ybTtlPWMuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxyPWMuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWTt2YXIgcD1vLmFwcGx5M0RUcmFuc2Zvcm0oaCkobi11LmxlZnQsYS11LnRvcCk7aWYoRj1wWzBdLEI9cFsxXSxDKXt2YXIgZz1FLmZpbmRQb2x5Z29uT2Zmc2V0KGQsQVswXSxBWzFdLEMpO0YrPWsrZ1swXSxCKz1NK2dbMV19c3dpdGNoKGwpe2Nhc2Uiem9vbSI6WS5tb3ZlRm49Qz9udDpldCxZLmNsaWNrRm49b3QsWS5kb25lRm49aXQsZnVuY3Rpb24oKXtOPW51bGwsaj1udWxsLFU9cy5wYXRoU3VicGxvdCgpLFY9ITE7dmFyIHQ9Yy5fZnVsbExheW91dFtzLmlkXTtxPWkodC5iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSwoSD1tLm1ha2Vab29tYm94KGYscSx4LFQsVSkpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKSxHPW0ubWFrZUNvcm5lcnMoZix4LFQpLHcoYyl9KCk7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2UibGFzc28iOmIodCxuLGEsWSxsKX19LFIub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7eS5ob3ZlcihjLHQscy5pZCksYy5fZnVsbExheW91dC5fbGFzdGhvdmVyPVIsYy5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PXMuaWR9LFIub25tb3VzZW91dD1mdW5jdGlvbih0KXtjLl9kcmFnZ2luZ3x8di51bmhvdmVyKGMsdCl9LHYuaW5pdChZKX0sTy51cGRhdGVSYWRpYWxEcmFnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLGM9aS5nZCx1PWkubGF5ZXJzLGY9aS5yYWRpdXMsaD1pLmlubmVyUmFkaXVzLHA9aS5jeCxkPWkuY3ksZz1pLnJhZGlhbEF4aXMseT1TLnJhZGlhbERyYWdCb3hTaXplLHg9eS8yO2lmKGcudmlzaWJsZSl7dmFyIGIsXyxULEE9SShpLnJhZGlhbEF4aXNBbmdsZSksRT1nLl9ybCxDPUVbMF0sTD1FWzFdLHo9RVtyXSxPPS43NSooRVsxXS1FWzBdKS8oMS1lLmhvbGUpL2Y7cj8oYj1wKyhmK3gpKk1hdGguY29zKEEpLF89ZC0oZit4KSpNYXRoLnNpbihBKSxUPSJyYWRpYWxkcmFnIik6KGI9cCsoaC14KSpNYXRoLmNvcyhBKSxfPWQtKGgteCkqTWF0aC5zaW4oQSksVD0icmFkaWFsZHJhZy1pbm5lciIpO3ZhciBELEIsTixqPW0ubWFrZVJlY3REcmFnZ2VyKHUsVCwiY3Jvc3NoYWlyIiwteCwteCx5LHkpLFU9e2VsZW1lbnQ6aixnZDpjfTtGKG4uc2VsZWN0KGopLGcudmlzaWJsZSYmaDxmLHt0cmFuc2Zvcm06bChiLF8pfSksVS5wcmVwRm49ZnVuY3Rpb24oKXtEPW51bGwsQj1udWxsLE49bnVsbCxVLm1vdmVGbj1WLFUuZG9uZUZuPXEsdyhjKX0sVS5jbGFtcEZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguc3FydCh0KnQrZSplKTxTLk1JTkRSQUcmJih0PTAsZT0wKSxbdCxlXX0sdi5pbml0KFUpfWZ1bmN0aW9uIFYodCxlKXtpZihEKUQodCxlKTtlbHNle3ZhciBuPVt0LC1lXSxhPVtNYXRoLmNvcyhBKSxNYXRoLnNpbihBKV0scz1NYXRoLmFicyhvLmRvdChuLGEpL01hdGguc3FydChvLmRvdChuLG4pKSk7aXNOYU4ocyl8fChEPXM8LjU/SDpHKX12YXIgbD17fTshZnVuY3Rpb24odCl7bnVsbCE9PUI/dFtpLmlkKyIucmFkaWFsYXhpcy5hbmdsZSJdPUI6bnVsbCE9PU4mJih0W2kuaWQrIi5yYWRpYWxheGlzLnJhbmdlWyIrcisiXSJdPU4pfShsKSxjLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsbCl9ZnVuY3Rpb24gcSgpe251bGwhPT1CP2EuY2FsbCgiX2d1aVJlbGF5b3V0IixjLGkuaWQrIi5yYWRpYWxheGlzLmFuZ2xlIixCKTpudWxsIT09TiYmYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGMsaS5pZCsiLnJhZGlhbGF4aXMucmFuZ2VbIityKyJdIixOKX1mdW5jdGlvbiBIKHQsZSl7aWYoMCE9PXIpe3ZhciBuPWIrdCxhPV8rZTtCPU1hdGguYXRhbjIoZC1hLG4tcCksaS52YW5nbGVzJiYoQj1SKEIsaS52YW5nbGVzKSksQj1QKEIpO3ZhciBvPWwocCxkKStzKC1CKTt1WyJyYWRpYWwtYXhpcyJdLmF0dHIoInRyYW5zZm9ybSIsbyksdVsicmFkaWFsLWxpbmUiXS5zZWxlY3QoImxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLG8pO3ZhciBjPWkuZ2QuX2Z1bGxMYXlvdXQsZj1jW2kuaWRdO2kudXBkYXRlUmFkaWFsQXhpc1RpdGxlKGMsZixCKX19ZnVuY3Rpb24gRyh0LGUpe3ZhciBuPW8uZG90KFt0LC1lXSxbTWF0aC5jb3MoQSksTWF0aC5zaW4oQSldKTtpZihOPXotTypuLE8+MD09KHI/Tj5DOk48TCkpe3ZhciBzPWMuX2Z1bGxMYXlvdXQsbD1zW2kuaWRdO2cucmFuZ2Vbcl09TixnLl9ybFtyXT1OLGkudXBkYXRlUmFkaWFsQXhpcyhzLGwpLGkueGF4aXMuc2V0UmFuZ2UoKSxpLnhheGlzLnNldFNjYWxlKCksaS55YXhpcy5zZXRSYW5nZSgpLGkueWF4aXMuc2V0U2NhbGUoKTt2YXIgdT0hMTtmb3IodmFyIGYgaW4gaS50cmFjZUhhc2gpe3ZhciBoPWkudHJhY2VIYXNoW2ZdLHA9by5maWx0ZXJWaXNpYmxlKGgpO2hbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KGMsaSxwLGwpLGEudHJhY2VJcyhmLCJnbCIpJiZwLmxlbmd0aCYmKHU9ITApfXUmJihrKGMpLE0oYykpfWVsc2UgTj1udWxsfX0sTy51cGRhdGVBbmd1bGFyRHJhZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZCxpPWUubGF5ZXJzLGM9ZS5yYWRpdXMsZj1lLmFuZ3VsYXJBeGlzLGg9ZS5jeCxwPWUuY3ksZD1lLmN4eCxnPWUuY3l5LHk9Uy5hbmd1bGFyRHJhZ0JveFNpemUseD1tLm1ha2VEcmFnZ2VyKGksInBhdGgiLCJhbmd1bGFyZHJhZyIsIm1vdmUiKSxiPXtlbGVtZW50OngsZ2Q6cn07ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBNYXRoLmF0YW4yKGcreS1lLHQtZC15KX1uLnNlbGVjdCh4KS5hdHRyKCJkIixlLnBhdGhBbm51bHVzKGMsYyt5KSkuYXR0cigidHJhbnNmb3JtIixsKGgscCkpLmNhbGwoVCwibW92ZSIpO3ZhciBBLEUsQyxMLEkseixPPWkuZnJvbnRwbG90LnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiLnRyYWNlIiksRD1PLnNlbGVjdEFsbCgiLnBvaW50IiksUj1PLnNlbGVjdEFsbCgiLnRleHRwb2ludCIpO2Z1bmN0aW9uIEYoYyxtKXt2YXIgdj1lLmdkLl9mdWxsTGF5b3V0LHk9dltlLmlkXSx4PV8oQStjKnQuX2ludlNjYWxlWCxFK20qdC5faW52U2NhbGVZKSxiPVAoeC16KTtpZihMPUMrYixpLmZyb250cGxvdC5hdHRyKCJ0cmFuc2Zvcm0iLGwoZS54T2Zmc2V0MixlLnlPZmZzZXQyKStzKFstYixkLGddKSksZS52YW5nbGVzKXtJPWUucmFkaWFsQXhpc0FuZ2xlK2I7dmFyIHc9bChoLHApK3MoLWIpLFQ9bChoLHApK3MoLUkpO2kuYmcuYXR0cigidHJhbnNmb3JtIix3KSxpWyJyYWRpYWwtZ3JpZCJdLmF0dHIoInRyYW5zZm9ybSIsdyksaVsicmFkaWFsLWF4aXMiXS5hdHRyKCJ0cmFuc2Zvcm0iLFQpLGlbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIikuYXR0cigidHJhbnNmb3JtIixUKSxlLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZSh2LHksSSl9ZWxzZSBlLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixsKGQsZykrcyhiKSk7RC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dS5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLGwoZS54LGUueSkrcyhbYl0pKX0pKSxSLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgidGV4dCIpLHI9dS5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLHMoW2IsZS5hdHRyKCJ4IiksZS5hdHRyKCJ5IildKStsKHIueCxyLnkpKX0pKSxmLnJvdGF0aW9uPW8ubW9kSGFsZihMLDM2MCksZS51cGRhdGVBbmd1bGFyQXhpcyh2LHkpLGUuX2hhc0NsaXBPbkF4aXNGYWxzZSYmIW8uaXNGdWxsQ2lyY2xlKGUuc2VjdG9ySW5SYWQpJiZPLmNhbGwodS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLGUpO3ZhciBTPSExO2Zvcih2YXIgRiBpbiBlLnRyYWNlSGFzaClpZihhLnRyYWNlSXMoRiwiZ2wiKSl7dmFyIE49ZS50cmFjZUhhc2hbRl0saj1vLmZpbHRlclZpc2libGUoTik7TlswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QocixlLGoseSksai5sZW5ndGgmJihTPSEwKX1TJiYoayhyKSxNKHIpKTt2YXIgVT17fTtCKFUpLHIuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixVKX1mdW5jdGlvbiBCKHQpe3RbZS5pZCsiLmFuZ3VsYXJheGlzLnJvdGF0aW9uIl09TCxlLnZhbmdsZXMmJih0W2UuaWQrIi5yYWRpYWxheGlzLmFuZ2xlIl09SSl9ZnVuY3Rpb24gTigpe1Iuc2VsZWN0KCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgdD17fTtCKHQpLGEuY2FsbCgiX2d1aVJlbGF5b3V0IixyLHQpfWIucHJlcEZuPWZ1bmN0aW9uKG4saSxhKXt2YXIgcz10W2UuaWRdO0M9cy5hbmd1bGFyYXhpcy5yb3RhdGlvbjt2YXIgbD14LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0E9aS1sLmxlZnQsRT1hLWwudG9wLHIuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHIpO3ZhciBjPW8uYXBwbHkzRFRyYW5zZm9ybSh0Ll9pbnZUcmFuc2Zvcm0pKEEsRSk7QT1jWzBdLEU9Y1sxXSx6PV8oQSxFKSxiLm1vdmVGbj1GLGIuZG9uZUZuPU4sdyhyKX0sZS52YW5nbGVzJiYhby5pc0Z1bGxDaXJjbGUoZS5zZWN0b3JJblJhZCkmJihiLnByZXBGbj1vLm5vb3AsVChuLnNlbGVjdCh4KSxudWxsKSksdi5pbml0KGIpfSxPLmlzUHRJbnNpZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcyxuPXRoaXMuYW5ndWxhckF4aXMuYzJnKHQudGhldGEpLGk9dGhpcy5yYWRpYWxBeGlzLGE9aS5jMmwodC5yKSxzPWkuX3JsO3JldHVybihyP0UuaXNQdEluc2lkZVBvbHlnb246by5pc1B0SW5zaWRlU2VjdG9yKShhLG4scyxlLHIpfSxPLnBhdGhBcmM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcztyZXR1cm4ocj9FLnBhdGhQb2x5Z29uOm8ucGF0aEFyYykodCxlWzBdLGVbMV0scil9LE8ucGF0aFNlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzO3JldHVybihyP0UucGF0aFBvbHlnb246by5wYXRoU2VjdG9yKSh0LGVbMF0sZVsxXSxyKX0sTy5wYXRoQW5udWx1cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuc2VjdG9ySW5SYWQsbj10aGlzLnZhbmdsZXM7cmV0dXJuKG4/RS5wYXRoUG9seWdvbkFubnVsdXM6by5wYXRoQW5udWx1cykodCxlLHJbMF0sclsxXSxuKX0sTy5wYXRoU3VicGxvdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaW5uZXJSYWRpdXMsZT10aGlzLnJhZGl1cztyZXR1cm4gdD90aGlzLnBhdGhBbm51bHVzKHQsZSk6dGhpcy5wYXRoU2VjdG9yKGUpfSxPLmZpbGxWaWV3SW5pdGlhbEtleT1mdW5jdGlvbih0LGUpe3QgaW4gdGhpcy52aWV3SW5pdGlhbHx8KHRoaXMudmlld0luaXRpYWxbdF09ZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjYyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2NSwiLi4vLi4vY29tcG9uZW50cy9meCI6NjgzLCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NzM4LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiOjc2MiwiLi4vLi4vbGliL3NldGN1cnNvciI6Nzk5LCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyI6ODE4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo4MjcsIi4uL2NhcnRlc2lhbi9kcmFnYm94Ijo4MzYsIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjg0NywiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo4NDgsIi4uL3Bsb3RzIjo4OTEsIi4vY29uc3RhbnRzIjo4OTIsIi4vaGVscGVycyI6ODkzLCIuL3NldF9jb252ZXJ0Ijo5MDQsZDM6MTY5LHRpbnljb2xvcjI6NTc2fV0sOTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0IiksYT1uLmRlZzJyYWQsbz1uLnJhZDJkZWc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goaSh0LHIpLHQuX2lkKXtjYXNlIngiOmNhc2UicmFkaWFsYXhpcyI6IWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fc3VicGxvdDt0LnNldEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGU9dC5fcmxbMF0sbj10Ll9ybFsxXSxpPXIuaW5uZXJSYWRpdXMsYT0oci5yYWRpdXMtaSkvKG4tZSksbz1pL2Escz1lPm4/ZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTB9OmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wfTt0LmMyZz1mdW5jdGlvbihyKXt2YXIgbj10LmMybChyKS1lO3JldHVybihzKG4pP246MCkrb30sdC5nMmM9ZnVuY3Rpb24ocil7cmV0dXJuIHQubDJjKHIrZS1vKX0sdC5nMnA9ZnVuY3Rpb24odCl7cmV0dXJuIHQqYX0sdC5jMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZzJwKHQuYzJnKGUpKX19fSh0LGUpO2JyZWFrO2Nhc2UiYW5ndWxhcmF4aXMiOiFmdW5jdGlvbih0LGUpe3ZhciByPXQudHlwZTtpZigibGluZWFyIj09PXIpe3ZhciBpPXQuZDJjLHM9dC5jMmQ7dC5kMmM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4iZGVncmVlcyI9PT1lP2EodCk6dH0oaSh0KSxlKX0sdC5jMmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcyhmdW5jdGlvbih0LGUpe3JldHVybiJkZWdyZWVzIj09PWU/byh0KTp0fSh0LGUpKX19dC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxpKXt2YXIgYSxvLHM9ZVtpXSxsPWUuX2xlbmd0aCxjPWZ1bmN0aW9uKHIpe3JldHVybiB0LmQyYyhyLGUudGhldGF1bml0KX07aWYocyl7aWYobi5pc1R5cGVkQXJyYXkocykmJiJsaW5lYXIiPT09cil7aWYobD09PXMubGVuZ3RoKXJldHVybiBzO2lmKHMuc3ViYXJyYXkpcmV0dXJuIHMuc3ViYXJyYXkoMCxsKX1mb3IoYT1uZXcgQXJyYXkobCksbz0wO288bDtvKyspYVtvXT1jKHNbb10pfWVsc2V7dmFyIHU9aSsiMCIsZj0iZCIraSxoPXUgaW4gZT9jKGVbdV0pOjAscD1lW2ZdP2MoZVtmXSk6KHQucGVyaW9kfHwyKk1hdGguUEkpL2w7Zm9yKGE9bmV3IEFycmF5KGwpLG89MDtvPGw7bysrKWFbb109aCtvKnB9cmV0dXJuIGF9LHQuc2V0R2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgaSxzLGwsYyx1PWUuc2VjdG9yLGY9dS5tYXAoYSksaD17Y2xvY2t3aXNlOi0xLGNvdW50ZXJjbG9ja3dpc2U6MX1bdC5kaXJlY3Rpb25dLHA9YSh0LnJvdGF0aW9uKSxkPWZ1bmN0aW9uKHQpe3JldHVybiBoKnQrcH0sZz1mdW5jdGlvbih0KXtyZXR1cm4odC1wKS9ofTtzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOnM9aT1uLmlkZW50aXR5LGM9YSxsPW8sdC5yYW5nZT1uLmlzRnVsbENpcmNsZShmKT9bdVswXSx1WzBdKzM2MF06Zi5tYXAoZykubWFwKG8pO2JyZWFrO2Nhc2UiY2F0ZWdvcnkiOnZhciBtPXQuX2NhdGVnb3JpZXMubGVuZ3RoLHY9dC5wZXJpb2Q/TWF0aC5tYXgodC5wZXJpb2QsbSk6bTswPT09diYmKHY9MSkscz1jPWZ1bmN0aW9uKHQpe3JldHVybiAyKnQqTWF0aC5QSS92fSxpPWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQqdi9NYXRoLlBJLzJ9LHQucmFuZ2U9WzAsdl19dC5jMmc9ZnVuY3Rpb24odCl7cmV0dXJuIGQocyh0KSl9LHQuZzJjPWZ1bmN0aW9uKHQpe3JldHVybiBpKGcodCkpfSx0LnQyZz1mdW5jdGlvbih0KXtyZXR1cm4gZChjKHQpKX0sdC5nMnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwoZyh0KSl9fX0odCxlKX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjg0OH1dLDkwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4vZG9tYWluIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYz1vLnR5cGUsdT1vLmF0dHJpYnV0ZXMsZj1vLmhhbmRsZURlZmF1bHRzLGg9by5wYXJ0aXRpb258fCJ4IixwPWUuX3N1YnBsb3RzW2NdLGQ9cC5sZW5ndGgsZz1kJiZwWzBdLnJlcGxhY2UoL1xkKyQvLCIiKTtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCx1LHQsZSl9Zm9yKHZhciB2PTA7djxkO3YrKyl7dmFyIHk9cFt2XTtzPXRbeV0/dFt5XTp0W3ldPXt9LGw9aS5uZXdDb250YWluZXIoZSx5LGcpLG0oInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbik7dmFyIHg9e307eFtoXT1bdi9kLCh2KzEpL2RdLGEobCxlLG0seCksby5pZD15LGYocyxsLG0sbyl9fX0seyIuLi9saWIiOjc3OCwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE3LCIuL2RvbWFpbiI6ODU1fV0sOTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO1snVmFyaWFibGVzIGFyZSBpbnNlcnRlZCB1c2luZyAle3ZhcmlhYmxlfSwgZm9yIGV4YW1wbGUgInk6ICV7eX0iLicsJ051bWJlcnMgYXJlIGZvcm1hdHRlZCB1c2luZyBkMy1mb3JtYXRcJ3Mgc3ludGF4ICV7dmFyaWFibGU6ZDMtZm9ybWF0fSwgZm9yIGV4YW1wbGUgIlByaWNlOiAle3k6JC4yZn0iLicsdCgiLi4vY29uc3RhbnRzL2RvY3MiKS5GT1JNQVRfTElOSywiZm9yIGRldGFpbHMgb24gdGhlIGZvcm1hdHRpbmcgc3ludGF4LiIsJ0RhdGVzIGFyZSBmb3JtYXR0ZWQgdXNpbmcgZDMtdGltZS1mb3JtYXRcJ3Mgc3ludGF4ICV7dmFyaWFibGV8ZDMtdGltZS1mb3JtYXR9LCBmb3IgZXhhbXBsZSAiRGF5OiAlezIwMTktMDEtMDF8JUF9Ii4nLHQoIi4uL2NvbnN0YW50cy9kb2NzIikuREFURV9GT1JNQVRfTElOSywiZm9yIGRldGFpbHMgb24gdGhlIGRhdGUgZm9ybWF0dGluZyBzeW50YXguIl0uam9pbigiICIpO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5kZXNjcmlwdGlvbj8iICIrdC5kZXNjcmlwdGlvbjoiIixyPXQua2V5c3x8W107aWYoci5sZW5ndGg+MCl7Zm9yKHZhciBuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyluW2ldPSJgIityW2ldKyJgIjtlKz0iRmluYWxseSwgdGhlIHRlbXBsYXRlIHN0cmluZyBoYXMgYWNjZXNzIHRvICIsZT0xPT09ci5sZW5ndGg/InZhcmlhYmxlICIrblswXToidmFyaWFibGVzICIrbi5zbGljZSgwLC0xKS5qb2luKCIsICIpKyIgYW5kICIrbi5zbGljZSgtMSkrIi4ifXJldHVybiBlfXIuaG92ZXJ0ZW1wbGF0ZUF0dHJzPWZ1bmN0aW9uKHQsZSl7dD10fHx7fTtuKGU9ZXx8e30pO3ZhciByPXt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6dC5lZGl0VHlwZXx8Im5vbmUifTtyZXR1cm4hMSE9PXQuYXJyYXlPayYmKHIuYXJyYXlPaz0hMCkscn0sci50ZXh0dGVtcGxhdGVBdHRycz1mdW5jdGlvbih0LGUpe3Q9dHx8e307bihlPWV8fHt9KTt2YXIgcj17dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOnQuZWRpdFR5cGV8fCJjYWxjIn07cmV0dXJuITEhPT10LmFycmF5T2smJihyLmFycmF5T2s9ITApLHJ9fSx7Ii4uL2NvbnN0YW50cy9kb2NzIjo3NDh9XSw5MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi90ZXJuYXJ5IiksaT10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldFN1YnBsb3RDYWxjRGF0YSxhPXQoIi4uLy4uL2xpYiIpLmNvdW50ZXJSZWdleDtyLm5hbWU9InRlcm5hcnkiO3ZhciBvPXIuYXR0cj0ic3VicGxvdCI7ci5pZFJvb3Q9InRlcm5hcnkiLHIuaWRSZWdleD1yLmF0dHJSZWdleD1hKCJ0ZXJuYXJ5IiksKHIuYXR0cmlidXRlcz17fSlbb109e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoidGVybmFyeSIsZWRpdFR5cGU6ImNhbGMifSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10LmNhbGNkYXRhLGE9ZS5fc3VicGxvdHMudGVybmFyeSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sbD1pKHIsInRlcm5hcnkiLHMpLGM9ZVtzXS5fc3VicGxvdDtjfHwoYz1uZXcgbih7aWQ6cyxncmFwaERpdjp0LGNvbnRhaW5lcjplLl90ZXJuYXJ5bGF5ZXIubm9kZSgpfSxlKSxlW3NdLl9zdWJwbG90PWMpLGMucGxvdChsLGUsdC5fcHJvbWlzZXMpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMudGVybmFyeXx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bltvXS5fc3VicGxvdDshZVtvXSYmcyYmKHMucGxvdENvbnRhaW5lci5yZW1vdmUoKSxzLmNsaXBEZWYucmVtb3ZlKCkscy5jbGlwRGVmUmVsYXRpdmUucmVtb3ZlKCkscy5sYXllcnNbImEtdGl0bGUiXS5yZW1vdmUoKSxzLmxheWVyc1siYi10aXRsZSJdLnJlbW92ZSgpLHMubGF5ZXJzWyJjLXRpdGxlIl0ucmVtb3ZlKCkpfX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4NjUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjkwOCwiLi9sYXlvdXRfZGVmYXVsdHMiOjkwOSwiLi90ZXJuYXJ5Ijo5MTB9XSw5MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLGE9dCgiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXt0aXRsZTp7dGV4dDphLnRpdGxlLnRleHQsZm9udDphLnRpdGxlLmZvbnR9LGNvbG9yOmEuY29sb3IsdGlja21vZGU6YS50aWNrbW9kZSxudGlja3M6cyh7fSxhLm50aWNrcyx7ZGZsdDo2LG1pbjoxfSksdGljazA6YS50aWNrMCxkdGljazphLmR0aWNrLHRpY2t2YWxzOmEudGlja3ZhbHMsdGlja3RleHQ6YS50aWNrdGV4dCx0aWNrczphLnRpY2tzLHRpY2tsZW46YS50aWNrbGVuLHRpY2t3aWR0aDphLnRpY2t3aWR0aCx0aWNrY29sb3I6YS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6YS5zaG93dGlja2xhYmVscyxzaG93dGlja3ByZWZpeDphLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6YS50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4OmEuc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDphLnRpY2tzdWZmaXgsc2hvd2V4cG9uZW50OmEuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmEuZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6YS5taW5leHBvbmVudCxzZXBhcmF0ZXRob3VzYW5kczphLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb250OmEudGlja2ZvbnQsdGlja2FuZ2xlOmEudGlja2FuZ2xlLHRpY2tmb3JtYXQ6YS50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczphLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDphLmhvdmVyZm9ybWF0LHNob3dsaW5lOnMoe30sYS5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjphLmxpbmVjb2xvcixsaW5ld2lkdGg6YS5saW5ld2lkdGgsc2hvd2dyaWQ6cyh7fSxhLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOmEuZ3JpZGNvbG9yLGdyaWR3aWR0aDphLmdyaWR3aWR0aCxsYXllcjphLmxheWVyLG1pbjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjB9LF9kZXByZWNhdGVkOnt0aXRsZTphLl9kZXByZWNhdGVkLnRpdGxlLHRpdGxlZm9udDphLl9kZXByZWNhdGVkLnRpdGxlZm9udH19LGM9ZS5leHBvcnRzPW8oe2RvbWFpbjppKHtuYW1lOiJ0ZXJuYXJ5In0pLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uYmFja2dyb3VuZH0sc3VtOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxtaW46MH0sYWF4aXM6bCxiYXhpczpsLGNheGlzOmx9LCJwbG90IiwiZnJvbS1yb290Iik7Yy51aXJldmlzaW9uPXt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sYy5hYXhpcy51aXJldmlzaW9uPWMuYmF4aXMudWlyZXZpc2lvbj1jLmNheGlzLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjY0MiwiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MTAsIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyLCIuLi9kb21haW4iOjg1NX1dLDkwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxzPXQoIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksbD10KCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksYz10KCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyIpLHU9dCgiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyIpLGY9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGg9WyJhYXhpcyIsImJheGlzIiwiY2F4aXMiXTtmdW5jdGlvbiBwKHQsZSxyLGEpe3ZhciBvLHMsbCxjPXIoImJnY29sb3IiKSx1PXIoInN1bSIpO2EuYmdDb2xvcj1uLmNvbWJpbmUoYyxhLnBhcGVyX2JnY29sb3IpO2Zvcih2YXIgZj0wO2Y8aC5sZW5ndGg7ZisrKXM9dFtvPWhbZl1dfHx7fSwobD1pLm5ld0NvbnRhaW5lcihlLG8pKS5fbmFtZT1vLGQocyxsLGEsZSk7dmFyIHA9ZS5hYXhpcyxnPWUuYmF4aXMsbT1lLmNheGlzO3AubWluK2cubWluK20ubWluPj11JiYocC5taW49MCxnLm1pbj0wLG0ubWluPTAsdC5hYXhpcyYmZGVsZXRlIHQuYWF4aXMubWluLHQuYmF4aXMmJmRlbGV0ZSB0LmJheGlzLm1pbix0LmNheGlzJiZkZWxldGUgdC5jYXhpcy5taW4pfWZ1bmN0aW9uIGQodCxlLHIsbil7dmFyIGk9ZltlLl9uYW1lXTtmdW5jdGlvbiBvKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxpLHIsbil9bygidWlyZXZpc2lvbiIsbi51aXJldmlzaW9uKSxlLnR5cGU9ImxpbmVhciI7dmFyIGg9bygiY29sb3IiKSxwPWghPT1pLmNvbG9yLmRmbHQ/aDpyLmZvbnQuY29sb3IsZD1lLl9uYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpLGc9IkNvbXBvbmVudCAiK2QsbT1vKCJ0aXRsZS50ZXh0IixnKTtlLl9ob3ZlcnRpdGxlPW09PT1nP206ZCxhLmNvZXJjZUZvbnQobywidGl0bGUuZm9udCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqci5mb250LnNpemUpLGNvbG9yOnB9KSxvKCJtaW4iKSxjKHQsZSxvLCJsaW5lYXIiKSxzKHQsZSxvLCJsaW5lYXIiLHt9KSxsKHQsZSxvLHtvdXRlclRpY2tzOiEwfSksbygic2hvd3RpY2tsYWJlbHMiKSYmKGEuY29lcmNlRm9udChvLCJ0aWNrZm9udCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6ci5mb250LnNpemUsY29sb3I6cH0pLG8oInRpY2thbmdsZSIpLG8oInRpY2tmb3JtYXQiKSksdSh0LGUsbyx7ZGZsdENvbG9yOmgsYmdDb2xvcjpyLmJnQ29sb3IsYmxlbmQ6NjAsc2hvd0xpbmU6ITAsc2hvd0dyaWQ6ITAsbm9aZXJvTGluZTohMCxhdHRyaWJ1dGVzOml9KSxvKCJob3ZlcmZvcm1hdCIpLG8oImxheWVyIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOiJ0ZXJuYXJ5IixhdHRyaWJ1dGVzOmYsaGFuZGxlRGVmYXVsdHM6cCxmb250OmUuZm9udCxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiOjg0NCwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjg0OSwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6ODUwLCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6ODUxLCIuLi9zdWJwbG90X2RlZmF1bHRzIjo5MDUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjkwOH1dLDkxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJUcmFuc2xhdGUsbD1vLl8sYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxmPXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGg9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscD10KCIuLi9wbG90cyIpLGQ9dCgiLi4vY2FydGVzaWFuL2F4ZXMiKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxtPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyIpLHk9di5mcmVlTW9kZSx4PXYucmVjdE1vZGUsYj10KCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyIpLF89dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3Qsdz10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Iikuc2VsZWN0T25DbGljayxUPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCxrPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdGlvbnNDYWNoZSxNPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKTtmdW5jdGlvbiBBKHQsZSl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmluaXQoZSksdGhpcy5tYWtlRnJhbWV3b3JrKGUpLHRoaXMuYVRpY2tMYXlvdXQ9bnVsbCx0aGlzLmJUaWNrTGF5b3V0PW51bGwsdGhpcy5jVGlja0xheW91dD1udWxsfWUuZXhwb3J0cz1BO3ZhciBTPUEucHJvdG90eXBlO1MuaW5pdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRhaW5lcj10Ll90ZXJuYXJ5bGF5ZXIsdGhpcy5kZWZzPXQuX2RlZnMsdGhpcy5sYXlvdXRJZD10Ll91aWQsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllcnM9e319LFMucGxvdD1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF0sbj1lLl9zaXplO3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7aWYoITE9PT10W2ldWzBdLnRyYWNlLmNsaXBvbmF4aXMpe3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319dGhpcy51cGRhdGVMYXllcnMociksdGhpcy5hZGp1c3RMYXlvdXQocixuKSxwLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLmdyYXBoRGl2LHRoaXMsdCxyKSx0aGlzLmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikuY2FsbChjLmZpbGwsci5iZ2NvbG9yKX0sUy5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhEaXYscj10W3RoaXMuaWRdLG49dGhpcy5jbGlwSWQ9ImNsaXAiK3RoaXMubGF5b3V0SWQrdGhpcy5pZCxpPXRoaXMuY2xpcElkUmVsYXRpdmU9ImNsaXAtcmVsYXRpdmUiK3RoaXMubGF5b3V0SWQrdGhpcy5pZDt0aGlzLmNsaXBEZWY9by5lbnN1cmVTaW5nbGVCeUlkKHQuX2NsaXBzLCJjbGlwUGF0aCIsbiwoZnVuY3Rpb24odCl7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMFoiKX0pKSx0aGlzLmNsaXBEZWZSZWxhdGl2ZT1vLmVuc3VyZVNpbmdsZUJ5SWQodC5fY2xpcHMsImNsaXBQYXRoIixpLChmdW5jdGlvbih0KXt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpfSkpLHRoaXMucGxvdENvbnRhaW5lcj1vLmVuc3VyZVNpbmdsZSh0aGlzLmNvbnRhaW5lciwiZyIsdGhpcy5pZCksdGhpcy51cGRhdGVMYXllcnMociksdS5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmJhY2twbG90LG4sZSksdS5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmdyaWRzLG4sZSl9LFMudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGF5ZXJzLHI9WyJkcmFnbGF5ZXIiLCJwbG90YmciLCJiYWNrcGxvdCIsImdyaWRzIl07ImJlbG93IHRyYWNlcyI9PT10LmFheGlzLmxheWVyJiZyLnB1c2goImFheGlzIiwiYWxpbmUiKSwiYmVsb3cgdHJhY2VzIj09PXQuYmF4aXMubGF5ZXImJnIucHVzaCgiYmF4aXMiLCJibGluZSIpLCJiZWxvdyB0cmFjZXMiPT09dC5jYXhpcy5sYXllciYmci5wdXNoKCJjYXhpcyIsImNsaW5lIiksci5wdXNoKCJmcm9udHBsb3QiKSwiYWJvdmUgdHJhY2VzIj09PXQuYWF4aXMubGF5ZXImJnIucHVzaCgiYWF4aXMiLCJhbGluZSIpLCJhYm92ZSB0cmFjZXMiPT09dC5iYXhpcy5sYXllciYmci5wdXNoKCJiYXhpcyIsImJsaW5lIiksImFib3ZlIHRyYWNlcyI9PT10LmNheGlzLmxheWVyJiZyLnB1c2goImNheGlzIiwiY2xpbmUiKTt2YXIgaT10aGlzLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCJnLnRvcGxldmVsIikuZGF0YShyLFN0cmluZyksYT1bImFncmlkIiwiYmdyaWQiLCJjZ3JpZCJdO2kuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0b3BsZXZlbCAiK3R9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ZVt0XT1yLCJmcm9udHBsb3QiPT09dD9yLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApOiJiYWNrcGxvdCI9PT10P3IuYXBwZW5kKCJnIikuY2xhc3NlZCgibWFwbGF5ZXIiLCEwKToicGxvdGJnIj09PXQ/ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMFoiKToiYWxpbmUiPT09dHx8ImJsaW5lIj09PXR8fCJjbGluZSI9PT10P3IuYXBwZW5kKCJwYXRoIik6ImdyaWRzIj09PXQmJmEuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT1yLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdyaWQgIit0LCEwKX0pKX0pKSxpLm9yZGVyKCl9O3ZhciBFPU1hdGguc3FydCg0LzMpO1MuYWRqdXN0TGF5b3V0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxsLHA9dGhpcyxkPXQuZG9tYWluLGc9KGQueFswXStkLnhbMV0pLzIsbT0oZC55WzBdK2QueVsxXSkvMix2PWQueFsxXS1kLnhbMF0seT1kLnlbMV0tZC55WzBdLHg9diplLncsYj15KmUuaCxfPXQuc3VtLHc9dC5hYXhpcy5taW4sVD10LmJheGlzLm1pbixrPXQuY2F4aXMubWluO3g+RSpiP2k9KGE9YikqRTphPShpPXgpL0Usbz12KmkveCxsPXkqYS9iLHI9ZS5sK2UudypnLWkvMixuPWUudCtlLmgqKDEtbSktYS8yLHAueDA9cixwLnkwPW4scC53PWkscC5oPWEscC5zdW09XyxwLnhheGlzPXt0eXBlOiJsaW5lYXIiLHJhbmdlOlt3KzIqay1fLF8tdy0yKlRdLGRvbWFpbjpbZy1vLzIsZytvLzJdLF9pZDoieCJ9LGYocC54YXhpcyxwLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxwLnhheGlzLnNldFNjYWxlKCkscC54YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQuYT49cC5hYXhpcy5yYW5nZVswXSYmdC5hPD1wLmFheGlzLnJhbmdlWzFdJiZ0LmI+PXAuYmF4aXMucmFuZ2VbMV0mJnQuYjw9cC5iYXhpcy5yYW5nZVswXSYmdC5jPj1wLmNheGlzLnJhbmdlWzFdJiZ0LmM8PXAuY2F4aXMucmFuZ2VbMF19LHAueWF4aXM9e3R5cGU6ImxpbmVhciIscmFuZ2U6W3csXy1ULWtdLGRvbWFpbjpbbS1sLzIsbStsLzJdLF9pZDoieSJ9LGYocC55YXhpcyxwLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxwLnlheGlzLnNldFNjYWxlKCkscC55YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4hMH07dmFyIE09cC55YXhpcy5kb21haW5bMF0sQT1wLmFheGlzPWgoe30sdC5hYXhpcyx7cmFuZ2U6W3csXy1ULWtdLHNpZGU6ImxlZnQiLHRpY2thbmdsZTooK3QuYWF4aXMudGlja2FuZ2xlfHwwKS0zMCxkb21haW46W00sTStsKkVdLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MCxfaWQ6InkiLF9sZW5ndGg6aX0pO2YoQSxwLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxBLnNldFNjYWxlKCk7dmFyIFM9cC5iYXhpcz1oKHt9LHQuYmF4aXMse3JhbmdlOltfLXctayxUXSxzaWRlOiJib3R0b20iLGRvbWFpbjpwLnhheGlzLmRvbWFpbixhbmNob3I6ImZyZWUiLHBvc2l0aW9uOjAsX2lkOiJ4IixfbGVuZ3RoOml9KTtmKFMscC5ncmFwaERpdi5fZnVsbExheW91dCksUy5zZXRTY2FsZSgpO3ZhciBDPXAuY2F4aXM9aCh7fSx0LmNheGlzLHtyYW5nZTpbXy13LVQsa10sc2lkZToicmlnaHQiLHRpY2thbmdsZTooK3QuY2F4aXMudGlja2FuZ2xlfHwwKSszMCxkb21haW46W00sTStsKkVdLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MCxfaWQ6InkiLF9sZW5ndGg6aX0pO2YoQyxwLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxDLnNldFNjYWxlKCk7dmFyIEw9Ik0iK3IrIiwiKyhuK2EpKyJoIitpKyJsLSIraS8yKyIsLSIrYSsiWiI7cC5jbGlwRGVmLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEwpLHAubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixMKTt2YXIgST0iTTAsIithKyJoIitpKyJsLSIraS8yKyIsLSIrYSsiWiI7cC5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsSSk7dmFyIFA9cyhyLG4pO3AucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIsLm1hcGxheWVyIikuYXR0cigidHJhbnNmb3JtIixQKSxwLmNsaXBEZWZSZWxhdGl2ZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpO3ZhciB6PXMoci1TLl9vZmZzZXQsbithKTtwLmxheWVycy5iYXhpcy5hdHRyKCJ0cmFuc2Zvcm0iLHopLHAubGF5ZXJzLmJncmlkLmF0dHIoInRyYW5zZm9ybSIseik7dmFyIE89cyhyK2kvMixuKSsicm90YXRlKDMwKSIrcygwLC1BLl9vZmZzZXQpO3AubGF5ZXJzLmFheGlzLmF0dHIoInRyYW5zZm9ybSIsTykscC5sYXllcnMuYWdyaWQuYXR0cigidHJhbnNmb3JtIixPKTt2YXIgRD1zKHIraS8yLG4pKyJyb3RhdGUoLTMwKSIrcygwLC1DLl9vZmZzZXQpO3AubGF5ZXJzLmNheGlzLmF0dHIoInRyYW5zZm9ybSIsRCkscC5sYXllcnMuY2dyaWQuYXR0cigidHJhbnNmb3JtIixEKSxwLmRyYXdBeGVzKCEwKSxwLmxheWVycy5hbGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixBLnNob3dsaW5lPyJNIityKyIsIisobithKSsibCIraS8yKyIsLSIrYToiTTAsMCIpLmNhbGwoYy5zdHJva2UsQS5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKEEubGluZXdpZHRofHwwKSsicHgiKSxwLmxheWVycy5ibGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixTLnNob3dsaW5lPyJNIityKyIsIisobithKSsiaCIraToiTTAsMCIpLmNhbGwoYy5zdHJva2UsUy5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKFMubGluZXdpZHRofHwwKSsicHgiKSxwLmxheWVycy5jbGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixDLnNob3dsaW5lPyJNIisocitpLzIpKyIsIituKyJsIitpLzIrIiwiK2E6Ik0wLDAiKS5jYWxsKGMuc3Ryb2tlLEMubGluZWNvbG9yfHwiIzAwMCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChDLmxpbmV3aWR0aHx8MCkrInB4IikscC5ncmFwaERpdi5fY29udGV4dC5zdGF0aWNQbG90fHxwLmluaXRJbnRlcmFjdGlvbnMoKSx1LnNldENsaXBVcmwocC5sYXllcnMuZnJvbnRwbG90LHAuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOnAuY2xpcElkLHAuZ3JhcGhEaXYpfSxTLmRyYXdBeGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhEaXYscj10aGlzLmlkLnN1YnN0cig3KSsidGl0bGUiLG49dGhpcy5sYXllcnMsaT10aGlzLmFheGlzLGE9dGhpcy5iYXhpcyxvPXRoaXMuY2F4aXM7aWYodGhpcy5kcmF3QXgoaSksdGhpcy5kcmF3QXgoYSksdGhpcy5kcmF3QXgobyksdCl7dmFyIHM9TWF0aC5tYXgoaS5zaG93dGlja2xhYmVscz9pLnRpY2tmb250LnNpemUvMjowLChvLnNob3d0aWNrbGFiZWxzPy43NSpvLnRpY2tmb250LnNpemU6MCkrKCJvdXRzaWRlIj09PW8udGlja3M/Ljg3Km8udGlja2xlbjowKSksYz0oYS5zaG93dGlja2xhYmVscz9hLnRpY2tmb250LnNpemU6MCkrKCJvdXRzaWRlIj09PWEudGlja3M/YS50aWNrbGVuOjApKzM7blsiYS10aXRsZSJdPWIuZHJhdyhlLCJhIityLHtwcm9wQ29udGFpbmVyOmkscHJvcE5hbWU6dGhpcy5pZCsiLmFheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpsKGUsIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBBIHRpdGxlIiksYXR0cmlidXRlczp7eDp0aGlzLngwK3RoaXMudy8yLHk6dGhpcy55MC1pLnRpdGxlLmZvbnQuc2l6ZS8zLXMsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KSxuWyJiLXRpdGxlIl09Yi5kcmF3KGUsImIiK3Ise3Byb3BDb250YWluZXI6YSxwcm9wTmFtZTp0aGlzLmlkKyIuYmF4aXMudGl0bGUiLHBsYWNlaG9sZGVyOmwoZSwiQ2xpY2sgdG8gZW50ZXIgQ29tcG9uZW50IEIgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDAtYyx5OnRoaXMueTArdGhpcy5oKy44MyphLnRpdGxlLmZvbnQuc2l6ZStjLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSksblsiYy10aXRsZSJdPWIuZHJhdyhlLCJjIityLHtwcm9wQ29udGFpbmVyOm8scHJvcE5hbWU6dGhpcy5pZCsiLmNheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpsKGUsIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBDIHRpdGxlIiksYXR0cmlidXRlczp7eDp0aGlzLngwK3RoaXMudytjLHk6dGhpcy55MCt0aGlzLmgrLjgzKm8udGl0bGUuZm9udC5zaXplK2MsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX19LFMuZHJhd0F4PWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5ncmFwaERpdixuPXQuX25hbWUsaT1uLmNoYXJBdCgwKSxhPXQuX2lkLHM9dGhpcy5sYXllcnNbbl0sbD1pKyJ0aWNrTGF5b3V0IixjPShlPXQpLnRpY2tzK1N0cmluZyhlLnRpY2tsZW4pK1N0cmluZyhlLnNob3d0aWNrbGFiZWxzKTt0aGlzW2xdIT09YyYmKHMuc2VsZWN0QWxsKCIuIithKyJ0aWNrIikucmVtb3ZlKCksdGhpc1tsXT1jKSx0LnNldFNjYWxlKCk7dmFyIHU9ZC5jYWxjVGlja3ModCksZj1kLmNsaXBFbmRzKHQsdSksaD1kLm1ha2VUcmFuc1RpY2tGbih0KSxwPWQuZ2V0VGlja1NpZ25zKHQpWzJdLGc9by5kZWcycmFkKDMwKSxtPXAqKHQubGluZXdpZHRofHwxKS8yLHY9cCp0LnRpY2tsZW4seT10aGlzLncseD10aGlzLmgsYj0iYiI9PT1pPyJNMCwiK20rImwiK01hdGguc2luKGcpKnYrIiwiK01hdGguY29zKGcpKnY6Ik0iK20rIiwwbCIrTWF0aC5jb3MoZykqdisiLCIrLU1hdGguc2luKGcpKnYsXz17YToiTTAsMGwiK3grIiwtIit5LzIsYjoiTTAsMGwtIit5LzIrIiwtIit4LGM6Ik0wLDBsLSIreCsiLCIreS8yfVtpXTtkLmRyYXdUaWNrcyhyLHQse3ZhbHM6Imluc2lkZSI9PT10LnRpY2tzP2Y6dSxsYXllcjpzLHBhdGg6Yix0cmFuc0ZuOmgsY3Jpc3A6ITF9KSxkLmRyYXdHcmlkKHIsdCx7dmFsczpmLGxheWVyOnRoaXMubGF5ZXJzW2krImdyaWQiXSxwYXRoOl8sdHJhbnNGbjpoLGNyaXNwOiExfSksZC5kcmF3TGFiZWxzKHIsdCx7dmFsczp1LGxheWVyOnMsdHJhbnNGbjpoLGxhYmVsRm5zOmQubWFrZUxhYmVsRm5zKHQsMCwzMCl9KX07dmFyIEM9TS5NSU5aT09NLzIrLjg3LEw9Im0tMC44NywuNWgiK0MrInYzaC0iKyhDKzUuMikrImwiKyhDLzIrMi42KSsiLC0iKyguODcqQys0LjUpKyJsMi42LDEuNWwtIitDLzIrIiwiKy44NypDKyJaIixJPSJtMC44NywuNWgtIitDKyJ2M2giKyhDKzUuMikrImwtIisoQy8yKzIuNikrIiwtIisoLjg3KkMrNC41KSsibC0yLjYsMS41bCIrQy8yKyIsIisuODcqQysiWiIsUD0ibTAsMWwiK0MvMisiLCIrLjg3KkMrImwyLjYsLTEuNWwtIisoQy8yKzIuNikrIiwtIisoLjg3KkMrNC41KSsibC0iKyhDLzIrMi42KSsiLCIrKC44NypDKzQuNSkrImwyLjYsMS41bCIrQy8yKyIsLSIrLjg3KkMrIloiLHo9ITA7ZnVuY3Rpb24gTyh0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi56b29tYm94LC5qcy16b29tYm94LWJhY2tkcm9wLC5qcy16b29tYm94LW1lbnUsLnpvb21ib3gtY29ybmVycyIpLnJlbW92ZSgpfVMuY2xlYXJTZWxlY3Q9ZnVuY3Rpb24oKXtrKHRoaXMuZHJhZ09wdGlvbnMpLFQodGhpcy5kcmFnT3B0aW9ucy5nZCl9LFMuaW5pdEludGVyYWN0aW9ucz1mdW5jdGlvbigpe3ZhciB0LGUscixuLGYsaCxwLGQsdixiLFQsayxBPXRoaXMsUz1BLmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikubm9kZSgpLEM9QS5ncmFwaERpdixEPUMuX2Z1bGxMYXlvdXQuX3pvb21sYXllcjtmdW5jdGlvbiBSKHQpe3ZhciBlPXt9O3JldHVybiBlW0EuaWQrIi5hYXhpcy5taW4iXT10LmEsZVtBLmlkKyIuYmF4aXMubWluIl09dC5iLGVbQS5pZCsiLmNheGlzLm1pbiJdPXQuYyxlfWZ1bmN0aW9uIEYodCxlKXt2YXIgcj1DLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtPKEMpLDI9PT10JiYoQy5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLGEuY2FsbCgiX2d1aVJlbGF5b3V0IixDLFIoe2E6MCxiOjAsYzowfSkpKSxyLmluZGV4T2YoInNlbGVjdCIpPi0xJiYxPT09dCYmdyhlLEMsW0EueGF4aXNdLFtBLnlheGlzXSxBLmlkLEEuZHJhZ09wdGlvbnMpLHIuaW5kZXhPZigiZXZlbnQiKT4tMSYmbS5jbGljayhDLGUsQS5pZCl9ZnVuY3Rpb24gQih0LGUpe3JldHVybiAxLWUvQS5ofWZ1bmN0aW9uIE4odCxlKXtyZXR1cm4gMS0odCsoQS5oLWUpL01hdGguc3FydCgzKSkvQS53fWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4odC0oQS5oLWUpL01hdGguc3FydCgzKSkvQS53fWZ1bmN0aW9uIFUoaSxhKXt2YXIgbz1yK2kqdCxzPW4rYSplLGw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLEIoMCxuKSxCKDAscykpKSxjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxOKHIsbiksTihvLHMpKSksdT1NYXRoLm1heCgwLE1hdGgubWluKDEsaihyLG4pLGoobyxzKSkpLGc9KGwvMit1KSpBLncsbT0oMS1sLzItYykqQS53LHk9KGcrbSkvMix4PW0tZyxfPSgxLWwpKkEuaCx3PV8teC9FO3g8TS5NSU5aT09NPyhwPWYsVC5hdHRyKCJkIix2KSxrLmF0dHIoImQiLCJNMCwwWiIpKToocD17YTpmLmErbCpoLGI6Zi5iK2MqaCxjOmYuYyt1Kmh9LFQuYXR0cigiZCIsdisiTSIrZysiLCIrXysiSCIrbSsiTCIreSsiLCIrdysiTCIrZysiLCIrXysiWiIpLGsuYXR0cigiZCIsIk0iK3IrIiwiK24rIm0wLjUsMC41aDV2LTJoLTV2LTVoLTJ2NWgtNXYyaDV2NWgyWk0iK2crIiwiK18rTCsiTSIrbSsiLCIrXytJKyJNIit5KyIsIit3K1ApKSxifHwoVC50cmFuc2l0aW9uKCkuc3R5bGUoImZpbGwiLGQ+LjI/InJnYmEoMCwwLDAsMC40KSI6InJnYmEoMjU1LDI1NSwyNTUsMC4zKSIpLmR1cmF0aW9uKDIwMCksay50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLmR1cmF0aW9uKDIwMCksYj0hMCksQy5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLFIocCkpfWZ1bmN0aW9uIFYoKXtPKEMpLHAhPT1mJiYoYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLEMsUihwKSkseiYmQy5kYXRhJiZDLl9jb250ZXh0LnNob3dUaXBzJiYoby5ub3RpZmllcihsKEMsIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0IiksImxvbmciKSx6PSExKSl9ZnVuY3Rpb24gcSh0LGUpe3ZhciByPXQvQS54YXhpcy5fbSxuPWUvQS55YXhpcy5fbSxpPVsocD17YTpmLmEtbixiOmYuYisocituKS8yLGM6Zi5jLShyLW4pLzJ9KS5hLHAuYixwLmNdLnNvcnQoby5zb3J0ZXJBc2MpLGE9aS5pbmRleE9mKHAuYSksbD1pLmluZGV4T2YocC5iKSxjPWkuaW5kZXhPZihwLmMpO2lbMF08MCYmKGlbMV0raVswXS8yPDA/KGlbMl0rPWlbMF0raVsxXSxpWzBdPWlbMV09MCk6KGlbMl0rPWlbMF0vMixpWzFdKz1pWzBdLzIsaVswXT0wKSxwPXthOmlbYV0sYjppW2xdLGM6aVtjXX0sZT0oZi5hLXAuYSkqQS55YXhpcy5fbSx0PShmLmMtcC5jLWYuYitwLmIpKkEueGF4aXMuX20pO3ZhciBoPXMoQS54MCt0LEEueTArZSk7QS5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLGgpO3ZhciBkPXMoLXQsLWUpO0EuY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsZCksQS5hYXhpcy5yYW5nZT1bcC5hLEEuc3VtLXAuYi1wLmNdLEEuYmF4aXMucmFuZ2U9W0Euc3VtLXAuYS1wLmMscC5iXSxBLmNheGlzLnJhbmdlPVtBLnN1bS1wLmEtcC5iLHAuY10sQS5kcmF3QXhlcyghMSksQS5faGFzQ2xpcE9uQXhpc0ZhbHNlJiZBLnBsb3RDb250YWluZXIuc2VsZWN0KCIuc2NhdHRlcmxheWVyIikuc2VsZWN0QWxsKCIudHJhY2UiKS5jYWxsKHUuaGlkZU91dHNpZGVSYW5nZVBvaW50cyxBKSxDLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsUihwKSl9ZnVuY3Rpb24gSCgpe2EuY2FsbCgiX2d1aVJlbGF5b3V0IixDLFIocCkpfXRoaXMuZHJhZ09wdGlvbnM9e2VsZW1lbnQ6UyxnZDpDLHBsb3RpbmZvOntpZDpBLmlkLGRvbWFpbjpDLl9mdWxsTGF5b3V0W0EuaWRdLmRvbWFpbix4YXhpczpBLnhheGlzLHlheGlzOkEueWF4aXN9LHN1YnBsb3Q6QS5pZCxwcmVwRm46ZnVuY3Rpb24oYSxsLHUpe0EuZHJhZ09wdGlvbnMueGF4ZXM9W0EueGF4aXNdLEEuZHJhZ09wdGlvbnMueWF4ZXM9W0EueWF4aXNdLHQ9Qy5fZnVsbExheW91dC5faW52U2NhbGVYLGU9Qy5fZnVsbExheW91dC5faW52U2NhbGVZO3ZhciBnPUEuZHJhZ09wdGlvbnMuZHJhZ21vZGU9Qy5fZnVsbExheW91dC5kcmFnbW9kZTt5KGcpP0EuZHJhZ09wdGlvbnMubWluRHJhZz0xOkEuZHJhZ09wdGlvbnMubWluRHJhZz12b2lkIDAsInpvb20iPT09Zz8oQS5kcmFnT3B0aW9ucy5tb3ZlRm49VSxBLmRyYWdPcHRpb25zLmNsaWNrRm49RixBLmRyYWdPcHRpb25zLmRvbmVGbj1WLGZ1bmN0aW9uKHQsZSxhKXt2YXIgbD1TLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3I9ZS1sLmxlZnQsbj1hLWwudG9wLEMuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKEMpO3ZhciB1PUMuX2Z1bGxMYXlvdXQuX2ludlRyYW5zZm9ybSxnPW8uYXBwbHkzRFRyYW5zZm9ybSh1KShyLG4pO3I9Z1swXSxuPWdbMV0sZj17YTpBLmFheGlzLnJhbmdlWzBdLGI6QS5iYXhpcy5yYW5nZVsxXSxjOkEuY2F4aXMucmFuZ2VbMV19LHA9ZixoPUEuYWF4aXMucmFuZ2VbMV0tZi5hLGQ9aShBLmdyYXBoRGl2Ll9mdWxsTGF5b3V0W0EuaWRdLmJnY29sb3IpLmdldEx1bWluYW5jZSgpLHY9Ik0wLCIrQS5oKyJMIitBLncvMisiLCAwTCIrQS53KyIsIitBLmgrIloiLGI9ITEsVD1ELmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLmF0dHIoInRyYW5zZm9ybSIscyhBLngwLEEueTApKS5zdHlsZSh7ZmlsbDpkPi4yPyJyZ2JhKDAsMCwwLDApIjoicmdiYSgyNTUsMjU1LDI1NSwwKSIsInN0cm9rZS13aWR0aCI6MH0pLmF0dHIoImQiLHYpLGs9RC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLmF0dHIoInRyYW5zZm9ybSIscyhBLngwLEEueTApKS5zdHlsZSh7ZmlsbDpjLmJhY2tncm91bmQsc3Ryb2tlOmMuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MSxvcGFjaXR5OjB9KS5hdHRyKCJkIiwiTTAsMFoiKSxBLmNsZWFyU2VsZWN0KEMpfSgwLGwsdSkpOiJwYW4iPT09Zz8oQS5kcmFnT3B0aW9ucy5tb3ZlRm49cSxBLmRyYWdPcHRpb25zLmNsaWNrRm49RixBLmRyYWdPcHRpb25zLmRvbmVGbj1ILGY9e2E6QS5hYXhpcy5yYW5nZVswXSxiOkEuYmF4aXMucmFuZ2VbMV0sYzpBLmNheGlzLnJhbmdlWzFdfSxwPWYsQS5jbGVhclNlbGVjdChDKSk6KHgoZyl8fHkoZykpJiZfKGEsbCx1LEEuZHJhZ09wdGlvbnMsZyl9fSxTLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe20uaG92ZXIoQyx0LEEuaWQpLEMuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj1TLEMuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1BLmlkfSxTLm9ubW91c2VvdXQ9ZnVuY3Rpb24odCl7Qy5fZHJhZ2dpbmd8fGcudW5ob3ZlcihDLHQpfSxnLmluaXQodGhpcy5kcmFnT3B0aW9ucyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjYyLCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiOjY2MSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY4MywiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiOjczOCwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi4vY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6ODM0LCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo4NDcsIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCI6ODQ4LCIuLi9wbG90cyI6ODkxLGQzOjE2OSx0aW55Y29sb3IyOjU3Nn1dLDkxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9sb2dnZXJzIiksaT10KCIuL2xpYi9ub29wIiksYT10KCIuL2xpYi9wdXNoX3VuaXF1ZSIpLG89dCgiLi9saWIvaXNfcGxhaW5fb2JqZWN0Iikscz10KCIuL2xpYi9kb20iKS5hZGRTdHlsZVJ1bGUsbD10KCIuL2xpYi9leHRlbmQiKSxjPXQoIi4vcGxvdHMvYXR0cmlidXRlcyIpLHU9dCgiLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyIpLGY9bC5leHRlbmRGbGF0LGg9bC5leHRlbmREZWVwQWxsO2Z1bmN0aW9uIHAodCl7dmFyIGU9dC5uYW1lLGk9dC5jYXRlZ29yaWVzLGE9dC5tZXRhO2lmKHIubW9kdWxlc1tlXSluLmxvZygiVHlwZSAiK2UrIiBhbHJlYWR5IHJlZ2lzdGVyZWQiKTtlbHNle3Iuc3VicGxvdHNSZWdpc3RyeVt0LmJhc2VQbG90TW9kdWxlLm5hbWVdfHxmdW5jdGlvbih0KXt2YXIgZT10Lm5hbWU7aWYoci5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybiB2b2lkIG4ubG9nKCJQbG90IHR5cGUgIitlKyIgYWxyZWFkeSByZWdpc3RlcmVkLiIpO2Zvcih2YXIgaSBpbiB2KHQpLHIuc3VicGxvdHNSZWdpc3RyeVtlXT10LHIuY29tcG9uZW50c1JlZ2lzdHJ5KWIoaSx0Lm5hbWUpfSh0LmJhc2VQbG90TW9kdWxlKTtmb3IodmFyIG89e30sbD0wO2w8aS5sZW5ndGg7bCsrKW9baVtsXV09ITAsci5hbGxDYXRlZ29yaWVzW2lbbF1dPSEwO2Zvcih2YXIgYyBpbiByLm1vZHVsZXNbZV09e19tb2R1bGU6dCxjYXRlZ29yaWVzOm99LGEmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKHIubW9kdWxlc1tlXS5tZXRhPWEpLHIuYWxsVHlwZXMucHVzaChlKSxyLmNvbXBvbmVudHNSZWdpc3RyeSl5KGMsZSk7dC5sYXlvdXRBdHRyaWJ1dGVzJiZmKHIudHJhY2VMYXlvdXRBdHRyaWJ1dGVzLHQubGF5b3V0QXR0cmlidXRlcyk7dmFyIHU9dC5iYXNlUGxvdE1vZHVsZSxoPXUubmFtZTtpZigibWFwYm94Ij09PWgpe3ZhciBwPXUuY29uc3RhbnRzLnN0eWxlUnVsZXM7Zm9yKHZhciBkIGluIHApcygiLmpzLXBsb3RseS1wbG90IC5wbG90bHkgLm1hcGJveGdsLSIrZCxwW2RdKX0iZ2VvIiE9PWgmJiJtYXBib3giIT09aHx8dm9pZCAwPT09dHlwZW9mIHdpbmRvd3x8dm9pZCAwIT09d2luZG93LlBsb3RseUdlb0Fzc2V0c3x8KHdpbmRvdy5QbG90bHlHZW9Bc3NldHM9e3RvcG9qc29uOnt9fSl9fWZ1bmN0aW9uIGQodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJDb21wb25lbnQgbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLiIpO3ZhciBlPXQubmFtZTtmb3IodmFyIG4gaW4gci5jb21wb25lbnRzUmVnaXN0cnlbZV09dCx0LmxheW91dEF0dHJpYnV0ZXMmJih0LmxheW91dEF0dHJpYnV0ZXMuX2lzTGlua2VkVG9BcnJheSYmYShyLmxheW91dEFycmF5Q29udGFpbmVycyxlKSx2KHQpKSxyLm1vZHVsZXMpeShlLG4pO2Zvcih2YXIgaSBpbiByLnN1YnBsb3RzUmVnaXN0cnkpYihlLGkpO2Zvcih2YXIgbyBpbiByLnRyYW5zZm9ybXNSZWdpc3RyeSl4KGUsbyk7dC5zY2hlbWEmJnQuc2NoZW1hLmxheW91dCYmaCh1LHQuc2NoZW1hLmxheW91dCl9ZnVuY3Rpb24gZyh0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIlRyYW5zZm9ybSBtb2R1bGUgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuIik7dmFyIGU9IlRyYW5zZm9ybSBtb2R1bGUgIit0Lm5hbWUsaT0iZnVuY3Rpb24iPT10eXBlb2YgdC50cmFuc2Zvcm0sYT0iZnVuY3Rpb24iPT10eXBlb2YgdC5jYWxjVHJhbnNmb3JtO2lmKCFpJiYhYSl0aHJvdyBuZXcgRXJyb3IoZSsiIGlzIG1pc3NpbmcgYSAqdHJhbnNmb3JtKiBvciAqY2FsY1RyYW5zZm9ybSogbWV0aG9kLiIpO2Zvcih2YXIgcyBpbiBpJiZhJiZuLmxvZyhbZSsiIGhhcyBib3RoIGEgKnRyYW5zZm9ybSogYW5kICpjYWxjVHJhbnNmb3JtKiBtZXRob2RzLiIsIlBsZWFzZSBub3RlIHRoYXQgYWxsICp0cmFuc2Zvcm0qIG1ldGhvZHMgYXJlIGV4ZWN1dGVkIiwiYmVmb3JlIGFsbCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy4iXS5qb2luKCIgIikpLG8odC5hdHRyaWJ1dGVzKXx8bi5sb2coZSsiIHJlZ2lzdGVyZWQgd2l0aG91dCBhbiAqYXR0cmlidXRlcyogb2JqZWN0LiIpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LnN1cHBseURlZmF1bHRzJiZuLmxvZyhlKyIgcmVnaXN0ZXJlZCB3aXRob3V0IGEgKnN1cHBseURlZmF1bHRzKiBtZXRob2QuIiksci50cmFuc2Zvcm1zUmVnaXN0cnlbdC5uYW1lXT10LHIuY29tcG9uZW50c1JlZ2lzdHJ5KXgocyx0Lm5hbWUpfWZ1bmN0aW9uIG0odCl7dmFyIGU9dC5uYW1lLG49ZS5zcGxpdCgiLSIpWzBdLGk9dC5kaWN0aW9uYXJ5LGE9dC5mb3JtYXQsbz1pJiZPYmplY3Qua2V5cyhpKS5sZW5ndGgscz1hJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgsbD1yLmxvY2FsZVJlZ2lzdHJ5LGM9bFtlXTtpZihjfHwobFtlXT1jPXt9KSxuIT09ZSl7dmFyIHU9bFtuXTt1fHwobFtuXT11PXt9KSxvJiZ1LmRpY3Rpb25hcnk9PT1jLmRpY3Rpb25hcnkmJih1LmRpY3Rpb25hcnk9aSkscyYmdS5mb3JtYXQ9PT1jLmZvcm1hdCYmKHUuZm9ybWF0PWEpfW8mJihjLmRpY3Rpb25hcnk9aSkscyYmKGMuZm9ybWF0PWEpfWZ1bmN0aW9uIHYodCl7aWYodC5sYXlvdXRBdHRyaWJ1dGVzKXt2YXIgZT10LmxheW91dEF0dHJpYnV0ZXMuX2FycmF5QXR0clJlZ2V4cHM7aWYoZSlmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylhKHIubGF5b3V0QXJyYXlSZWdleGVzLGVbbl0pfX1mdW5jdGlvbiB5KHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF0uc2NoZW1hO2lmKG4mJm4udHJhY2VzKXt2YXIgaT1uLnRyYWNlc1tlXTtpJiZoKHIubW9kdWxlc1tlXS5fbW9kdWxlLmF0dHJpYnV0ZXMsaSl9fWZ1bmN0aW9uIHgodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi50cmFuc2Zvcm1zKXt2YXIgaT1uLnRyYW5zZm9ybXNbZV07aSYmaChyLnRyYW5zZm9ybXNSZWdpc3RyeVtlXS5hdHRyaWJ1dGVzLGkpfX1mdW5jdGlvbiBiKHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF0uc2NoZW1hO2lmKG4mJm4uc3VicGxvdHMpe3ZhciBpPXIuc3VicGxvdHNSZWdpc3RyeVtlXSxhPWkubGF5b3V0QXR0cmlidXRlcyxvPSJzdWJwbG90Ij09PWkuYXR0cj9pLm5hbWU6aS5hdHRyO0FycmF5LmlzQXJyYXkobykmJihvPW9bMF0pO3ZhciBzPW4uc3VicGxvdHNbb107YSYmcyYmaChhLHMpfX1mdW5jdGlvbiBfKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmKHQ9dC50eXBlKSx0fXIubW9kdWxlcz17fSxyLmFsbENhdGVnb3JpZXM9e30sci5hbGxUeXBlcz1bXSxyLnN1YnBsb3RzUmVnaXN0cnk9e30sci50cmFuc2Zvcm1zUmVnaXN0cnk9e30sci5jb21wb25lbnRzUmVnaXN0cnk9e30sci5sYXlvdXRBcnJheUNvbnRhaW5lcnM9W10sci5sYXlvdXRBcnJheVJlZ2V4ZXM9W10sci50cmFjZUxheW91dEF0dHJpYnV0ZXM9e30sci5sb2NhbGVSZWdpc3RyeT17fSxyLmFwaU1ldGhvZFJlZ2lzdHJ5PXt9LHIuY29sbGVjdGFibGVTdWJwbG90VHlwZXM9bnVsbCxyLnJlZ2lzdGVyPWZ1bmN0aW9uKHQpe2lmKHIuY29sbGVjdGFibGVTdWJwbG90VHlwZXM9bnVsbCwhdCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFyZ3VtZW50IHBhc3NlZCB0byBQbG90bHkucmVnaXN0ZXIuIik7dCYmIUFycmF5LmlzQXJyYXkodCkmJih0PVt0XSk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBuPXRbZV07aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhIik7c3dpdGNoKG4ubW9kdWxlVHlwZSl7Y2FzZSJ0cmFjZSI6cChuKTticmVhaztjYXNlInRyYW5zZm9ybSI6ZyhuKTticmVhaztjYXNlImNvbXBvbmVudCI6ZChuKTticmVhaztjYXNlImxvY2FsZSI6bShuKTticmVhaztjYXNlImFwaU1ldGhvZCI6dmFyIGk9bi5uYW1lO3IuYXBpTWV0aG9kUmVnaXN0cnlbaV09bi5mbjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtb2R1bGUgd2FzIGF0dGVtcHRlZCB0byBiZSByZWdpc3RlcmVkISIpfX19LHIuZ2V0TW9kdWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXIubW9kdWxlc1tfKHQpXTtyZXR1cm4hIWUmJmUuX21vZHVsZX0sci50cmFjZUlzPWZ1bmN0aW9uKHQsZSl7aWYoInZhcmlvdXMiPT09KHQ9Xyh0KSkpcmV0dXJuITE7dmFyIGk9ci5tb2R1bGVzW3RdO3JldHVybiBpfHwodCYmImFyZWEiIT09dCYmbi5sb2coIlVucmVjb2duaXplZCB0cmFjZSB0eXBlICIrdCsiLiIpLGk9ci5tb2R1bGVzW2MudHlwZS5kZmx0XSksISFpLmNhdGVnb3JpZXNbZV19LHIuZ2V0VHJhbnNmb3JtSW5kaWNlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQudHJhbnNmb3Jtc3x8W10saT0wO2k8bi5sZW5ndGg7aSsrKW5baV0udHlwZT09PWUmJnIucHVzaChpKTtyZXR1cm4gcn0sci5oYXNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC50cmFuc2Zvcm1zfHxbXSxuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS50eXBlPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sci5nZXRDb21wb25lbnRNZXRob2Q9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XTtyZXR1cm4gbiYmbltlXXx8aX0sci5jYWxsPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdLGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHIuYXBpTWV0aG9kUmVnaXN0cnlbdF0uYXBwbHkobnVsbCxlKX19LHsiLi9saWIvZG9tIjo3NjYsIi4vbGliL2V4dGVuZCI6NzY4LCIuL2xpYi9pc19wbGFpbl9vYmplY3QiOjc3OSwiLi9saWIvbG9nZ2VycyI6NzgyLCIuL2xpYi9ub29wIjo3ODcsIi4vbGliL3B1c2hfdW5pcXVlIjo3OTMsIi4vcGxvdHMvYXR0cmlidXRlcyI6ODI0LCIuL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjo4ODJ9XSw5MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKSxpPXQoIi4uL2xpYiIpLGE9aS5leHRlbmRGbGF0LG89aS5leHRlbmREZWVwO2Z1bmN0aW9uIHModCl7dmFyIGU7c3dpdGNoKHQpe2Nhc2UidGhlbWVzX190aHVtYiI6ZT17YXV0b3NpemU6ITAsd2lkdGg6MTUwLGhlaWdodDoxNTAsdGl0bGU6e3RleHQ6IiJ9LHNob3dsZWdlbmQ6ITEsbWFyZ2luOntsOjUscjo1LHQ6NSxiOjUscGFkOjB9LGFubm90YXRpb25zOltdfTticmVhaztjYXNlInRodW1ibmFpbCI6ZT17dGl0bGU6e3RleHQ6IiJ9LGhpZGVzb3VyY2VzOiEwLHNob3dsZWdlbmQ6ITEsYm9yZGVyd2lkdGg6MCxib3JkZXJjb2xvcjoiIixtYXJnaW46e2w6MSxyOjEsdDoxLGI6MSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2RlZmF1bHQ6ZT17fX1yZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcjt0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHQ9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpO3ZhciBpLGw9dC5kYXRhLGM9dC5sYXlvdXQsdT1vKFtdLGwpLGY9byh7fSxjLHMoZS50aWxlQ2xhc3MpKSxoPXQuX2NvbnRleHR8fHt9O2lmKGUud2lkdGgmJihmLndpZHRoPWUud2lkdGgpLGUuaGVpZ2h0JiYoZi5oZWlnaHQ9ZS5oZWlnaHQpLCJ0aHVtYm5haWwiPT09ZS50aWxlQ2xhc3N8fCJ0aGVtZXNfX3RodW1iIj09PWUudGlsZUNsYXNzKXtmLmFubm90YXRpb25zPVtdO3ZhciBwPU9iamVjdC5rZXlzKGYpO2ZvcihyPTA7cjxwLmxlbmd0aDtyKyspaT1wW3JdLFsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0uaW5kZXhPZihpLnNsaWNlKDAsNSkpPi0xJiYoZltwW3JdXS50aXRsZT17dGV4dDoiIn0pO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspe3ZhciBkPXVbcl07ZC5zaG93c2NhbGU9ITEsZC5tYXJrZXImJihkLm1hcmtlci5zaG93c2NhbGU9ITEpLG4udHJhY2VJcyhkLCJwaWUtbGlrZSIpJiYoZC50ZXh0cG9zaXRpb249Im5vbmUiKX19aWYoQXJyYXkuaXNBcnJheShlLmFubm90YXRpb25zKSlmb3Iocj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKWYuYW5ub3RhdGlvbnMucHVzaChlLmFubm90YXRpb25zW3JdKTt2YXIgZz1PYmplY3Qua2V5cyhmKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hdGNoKC9ec2NlbmVcZCokLyl9KSk7aWYoZy5sZW5ndGgpe3ZhciBtPXt9O2ZvcigidGh1bWJuYWlsIj09PWUudGlsZUNsYXNzJiYobT17dGl0bGU6e3RleHQ6IiJ9LHNob3dheGVzbGFiZWxzOiExLHNob3d0aWNrbGFiZWxzOiExLGxpbmV0aWNrZW5hYmxlOiExfSkscj0wO3I8Zy5sZW5ndGg7cisrKXt2YXIgdj1mW2dbcl1dO3YueGF4aXN8fCh2LnhheGlzPXt9KSx2LnlheGlzfHwodi55YXhpcz17fSksdi56YXhpc3x8KHYuemF4aXM9e30pLGEodi54YXhpcyxtKSxhKHYueWF4aXMsbSksYSh2LnpheGlzLG0pLHYuX3NjZW5lPW51bGx9fXZhciB5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UudGlsZUNsYXNzJiYoeS5jbGFzc05hbWU9ZS50aWxlQ2xhc3MpO3ZhciB4PXtnZDp5LHRkOnksbGF5b3V0OmYsZGF0YTp1LGNvbmZpZzp7c3RhdGljUGxvdDp2b2lkIDA9PT1lLnN0YXRpY1Bsb3R8fGUuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnZvaWQgMD09PWUucGxvdEdsUGl4ZWxSYXRpbz8yOmUucGxvdEdsUGl4ZWxSYXRpbyxkaXNwbGF5bG9nbzplLmRpc3BsYXlsb2dvfHwhMSxzaG93TGluazplLnNob3dMaW5rfHwhMSxzaG93VGlwczplLnNob3dUaXBzfHwhMSxtYXBib3hBY2Nlc3NUb2tlbjpoLm1hcGJveEFjY2Vzc1Rva2VufX07cmV0dXJuInRyYW5zcGFyZW50IiE9PWUuc2V0QmFja2dyb3VuZCYmKHguY29uZmlnLnNldEJhY2tncm91bmQ9ZS5zZXRCYWNrZ3JvdW5kfHwib3BhcXVlIikseC5nZC5kZWZhdWx0TGF5b3V0PXMoZS50aWxlQ2xhc3MpLHh9fSx7Ii4uL2xpYiI6Nzc4LCIuLi9yZWdpc3RyeSI6OTExfV0sOTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdF9hcGkvdG9faW1hZ2UiKSxhPXQoIi4vZmlsZXNhdmVyIiksbz10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQpfHwocj1uLmdldEdyYXBoRGl2KHQpKSwoZT1lfHx7fSkuZm9ybWF0PWUuZm9ybWF0fHwicG5nIixlLndpZHRoPWUud2lkdGh8fG51bGwsZS5oZWlnaHQ9ZS5oZWlnaHR8fG51bGwsZS5pbWFnZURhdGFPbmx5PSEwLG5ldyBQcm9taXNlKChmdW5jdGlvbihzLGwpe3ImJnIuX3NuYXBzaG90SW5Qcm9ncmVzcyYmbChuZXcgRXJyb3IoIlNuYXBzaG90dGluZyBhbHJlYWR5IGluIHByb2dyZXNzLiIpKSxuLmlzSUUoKSYmInN2ZyIhPT1lLmZvcm1hdCYmbChuZXcgRXJyb3Ioby5NU0dfSUVfQkFEX0ZPUk1BVCkpLHImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITApO3ZhciBjPWkodCxlKSx1PWUuZmlsZW5hbWV8fHQuZm58fCJuZXdwbG90Ijt1Kz0iLiIrZS5mb3JtYXQucmVwbGFjZSgiLSIsIi4iKSxjLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiByJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxhKHQsdSxlLmZvcm1hdCl9KSkudGhlbigoZnVuY3Rpb24odCl7cyh0KX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ciYmKHIuX3NuYXBzaG90SW5Qcm9ncmVzcz0hMSksbCh0KX0pKX0pKX19LHsiLi4vbGliIjo3NzgsIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIjo4MjAsIi4vZmlsZXNhdmVyIjo5MTQsIi4vaGVscGVycyI6OTE1fV0sOTE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksbz0iZG93bmxvYWQiaW4gYTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHMsbCl7dmFyIGMsdTtpZihuLmlzSUU5b3JCZWxvdygpJiZsKG5ldyBFcnJvcigiSUUgPCAxMCB1bnN1cHBvcnRlZCIpKSxuLmlzU2FmYXJpKCkpe3ZhciBmPSJzdmciPT09cj8iLCI6IjtiYXNlNjQsIjtyZXR1cm4gaS5vY3RldFN0cmVhbShmK2VuY29kZVVSSUNvbXBvbmVudCh0KSkscyhlKX1yZXR1cm4gbi5pc0lFKCk/KGM9aS5jcmVhdGVCbG9iKHQsInN2ZyIpLHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihjLGUpLGM9bnVsbCxzKGUpKTpvPyhjPWkuY3JlYXRlQmxvYih0LHIpLHU9aS5jcmVhdGVPYmplY3RVUkwoYyksYS5ocmVmPXUsYS5kb3dubG9hZD1lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSksaS5yZXZva2VPYmplY3RVUkwodSksYz1udWxsLHMoZSkpOnZvaWQgbChuZXcgRXJyb3IoImRvd25sb2FkIGVycm9yIikpfSkpfX0seyIuLi9saWIiOjc3OCwiLi9oZWxwZXJzIjo5MTV9XSw5MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKTtyLmdldERlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9oYXMmJih0Ll9oYXMoImdsM2QiKXx8dC5faGFzKCJnbDJkIil8fHQuX2hhcygibWFwYm94IikpPzUwMDowfSxyLmdldFJlZHJhd0Z1bmM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5fZnVsbExheW91dHx8e307IShlLl9oYXMmJmUuX2hhcygicG9sYXIiKSkmJnQuZGF0YSYmdC5kYXRhWzBdJiZ0LmRhdGFbMF0ucnx8bi5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKHQpfX0sci5lbmNvZGVTVkc9ZnVuY3Rpb24odCl7cmV0dXJuImRhdGE6aW1hZ2Uvc3ZnK3htbCwiK2VuY29kZVVSSUNvbXBvbmVudCh0KX0sci5lbmNvZGVKU09OPWZ1bmN0aW9uKHQpe3JldHVybiJkYXRhOmFwcGxpY2F0aW9uL2pzb24sIitlbmNvZGVVUklDb21wb25lbnQodCl9O3ZhciBpPXdpbmRvdy5VUkx8fHdpbmRvdy53ZWJraXRVUkw7ci5jcmVhdGVPYmplY3RVUkw9ZnVuY3Rpb24odCl7cmV0dXJuIGkuY3JlYXRlT2JqZWN0VVJMKHQpfSxyLnJldm9rZU9iamVjdFVSTD1mdW5jdGlvbih0KXtyZXR1cm4gaS5yZXZva2VPYmplY3RVUkwodCl9LHIuY3JlYXRlQmxvYj1mdW5jdGlvbih0LGUpe2lmKCJzdmciPT09ZSlyZXR1cm4gbmV3IHdpbmRvdy5CbG9iKFt0XSx7dHlwZToiaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04In0pO2lmKCJmdWxsLWpzb24iPT09ZSlyZXR1cm4gbmV3IHdpbmRvdy5CbG9iKFt0XSx7dHlwZToiYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04In0pO3ZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheUJ1ZmZlcihlKSxuPW5ldyBVaW50OEFycmF5KHIpLGk9MDtpPGU7aSsrKW5baV09dC5jaGFyQ29kZUF0KGkpO3JldHVybiByfSh3aW5kb3cuYXRvYih0KSk7cmV0dXJuIG5ldyB3aW5kb3cuQmxvYihbcl0se3R5cGU6ImltYWdlLyIrZX0pfSxyLm9jdGV0U3RyZWFtPWZ1bmN0aW9uKHQpe2RvY3VtZW50LmxvY2F0aW9uLmhyZWY9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIit0fSxyLklNQUdFX1VSTF9QUkVGSVg9L15kYXRhOmltYWdlXC9cdys7YmFzZTY0LC8sci5NU0dfSUVfQkFEX0ZPUk1BVD0iU29ycnkgSUUgZG9lcyBub3Qgc3VwcG9ydCBkb3dubG9hZGluZyBmcm9tIGNhbnZhcy4gVHJ5IHtmb3JtYXQ6J3N2Zyd9IGluc3RlYWQuIn0seyIuLi9yZWdpc3RyeSI6OTExfV0sOTE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaGVscGVycyIpLGk9e2dldERlbGF5Om4uZ2V0RGVsYXksZ2V0UmVkcmF3RnVuYzpuLmdldFJlZHJhd0Z1bmMsY2xvbmU6dCgiLi9jbG9uZXBsb3QiKSx0b1NWRzp0KCIuL3Rvc3ZnIiksc3ZnVG9JbWc6dCgiLi9zdmd0b2ltZyIpLHRvSW1hZ2U6dCgiLi90b2ltYWdlIiksZG93bmxvYWRJbWFnZTp0KCIuL2Rvd25sb2FkIil9O2UuZXhwb3J0cz1pfSx7Ii4vY2xvbmVwbG90Ijo5MTIsIi4vZG93bmxvYWQiOjkxMywiLi9oZWxwZXJzIjo5MTUsIi4vc3ZndG9pbWciOjkxNywiLi90b2ltYWdlIjo5MTgsIi4vdG9zdmciOjkxOX1dLDkxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixhPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVtaXR0ZXJ8fG5ldyBpLHI9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGksbyl7dmFyIHM9d2luZG93LkltYWdlLGw9dC5zdmcsYz10LmZvcm1hdHx8InBuZyI7aWYobi5pc0lFKCkmJiJzdmciIT09Yyl7dmFyIHU9bmV3IEVycm9yKGEuTVNHX0lFX0JBRF9GT1JNQVQpO3JldHVybiBvKHUpLHQucHJvbWlzZT9yOmUuZW1pdCgiZXJyb3IiLHUpfXZhciBmLGgscD10LmNhbnZhcyxkPXQuc2NhbGV8fDEsZz10LndpZHRofHwzMDAsbT10LmhlaWdodHx8MTUwLHY9ZCpnLHk9ZCptLHg9cC5nZXRDb250ZXh0KCIyZCIpLGI9bmV3IHM7InN2ZyI9PT1jfHxuLmlzSUU5b3JCZWxvdygpfHxuLmlzU2FmYXJpKCk/aD1hLmVuY29kZVNWRyhsKTooZj1hLmNyZWF0ZUJsb2IobCwic3ZnIiksaD1hLmNyZWF0ZU9iamVjdFVSTChmKSkscC53aWR0aD12LHAuaGVpZ2h0PXksYi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgcjtzd2l0Y2goZj1udWxsLGEucmV2b2tlT2JqZWN0VVJMKGgpLCJzdmciIT09YyYmeC5kcmF3SW1hZ2UoYiwwLDAsdix5KSxjKXtjYXNlImpwZWciOnI9cC50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlInBuZyI6cj1wLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7YnJlYWs7Y2FzZSJ3ZWJwIjpyPXAudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7Y2FzZSJzdmciOnI9aDticmVhaztkZWZhdWx0OnZhciBuPSJJbWFnZSBmb3JtYXQgaXMgbm90IGpwZWcsIHBuZywgc3ZnIG9yIHdlYnAuIjtpZihvKG5ldyBFcnJvcihuKSksIXQucHJvbWlzZSlyZXR1cm4gZS5lbWl0KCJlcnJvciIsbil9aShyKSx0LnByb21pc2V8fGUuZW1pdCgic3VjY2VzcyIscil9LGIub25lcnJvcj1mdW5jdGlvbihyKXtpZihmPW51bGwsYS5yZXZva2VPYmplY3RVUkwoaCksbyhyKSwhdC5wcm9taXNlKXJldHVybiBlLmVtaXQoImVycm9yIixyKX0sYi5zcmM9aH0pKTtyZXR1cm4gdC5wcm9taXNlP3I6ZX19LHsiLi4vbGliIjo3NzgsIi4vaGVscGVycyI6OTE1LGV2ZW50czoxMTB9XSw5MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL2xpYiIpLG89dCgiLi9oZWxwZXJzIikscz10KCIuL2Nsb25lcGxvdCIpLGw9dCgiLi90b3N2ZyIpLGM9dCgiLi9zdmd0b2ltZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuLHU9cyh0LHtmb3JtYXQ6InBuZyJ9KSxmPXUuZ2Q7Zi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGUubGVmdD0iLTUwMDBweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmKTt2YXIgaD1vLmdldFJlZHJhd0Z1bmMoZik7cmV0dXJuIGkuY2FsbCgicGxvdCIsZix1LmRhdGEsdS5sYXlvdXQsdS5jb25maWcpLnRoZW4oaCkudGhlbigoZnVuY3Rpb24oKXt2YXIgdD1vLmdldERlbGF5KGYuX2Z1bGxMYXlvdXQpO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIHQ9bChmKSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uaWQ9YS5yYW5kc3RyKCksKHI9Yyh7Zm9ybWF0OmUuZm9ybWF0LHdpZHRoOmYuX2Z1bGxMYXlvdXQud2lkdGgsaGVpZ2h0OmYuX2Z1bGxMYXlvdXQuaGVpZ2h0LGNhbnZhczpuLGVtaXR0ZXI6cixzdmc6dH0pKS5jbGVhbj1mdW5jdGlvbigpe2YmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZil9fSksdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3IuZW1pdCgiZXJyb3IiLHQpfSkpLHJ9fSx7Ii4uL2xpYiI6Nzc4LCIuLi9yZWdpc3RyeSI6OTExLCIuL2Nsb25lcGxvdCI6OTEyLCIuL2hlbHBlcnMiOjkxNSwiLi9zdmd0b2ltZyI6OTE3LCIuL3Rvc3ZnIjo5MTksZXZlbnRzOjExMH1dLDkxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksbD0vIi9nLGM9bmV3IFJlZ0V4cCgnKCJUT0JFU1RSSVBQRUQpfChUT0JFU1RSSVBQRUQiKScsImciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB1LGY9dC5fZnVsbExheW91dCxoPWYuX3BhcGVyLHA9Zi5fdG9wcGFwZXIsZD1mLndpZHRoLGc9Zi5oZWlnaHQ7aC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5jYWxsKGEuc2V0UmVjdCwwLDAsZCxnKS5jYWxsKG8uZmlsbCxmLnBhcGVyX2JnY29sb3IpO3ZhciBtPWYuX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKHU9MDt1PG0ubGVuZ3RoO3UrKyl7dmFyIHY9bVt1XTt2LnRvU1ZHJiZ2LnRvU1ZHKHQpfWlmKHApe3ZhciB5PXAubm9kZSgpLmNoaWxkTm9kZXMseD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh5KTtmb3IodT0wO3U8eC5sZW5ndGg7dSsrKXt2YXIgYj14W3VdO2IuY2hpbGROb2Rlcy5sZW5ndGgmJmgubm9kZSgpLmFwcGVuZENoaWxkKGIpfX1pZihmLl9kcmFnZ2VycyYmZi5fZHJhZ2dlcnMucmVtb3ZlKCksaC5ub2RlKCkuc3R5bGUuYmFja2dyb3VuZD0iIixoLnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpudWxsLCJkYXRhLW1hdGgiOm51bGx9KS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2lmKCJoaWRkZW4iIT09dGhpcy5zdHlsZS52aXNpYmlsaXR5JiYibm9uZSIhPT10aGlzLnN0eWxlLmRpc3BsYXkpe3Quc3R5bGUoe3Zpc2liaWxpdHk6bnVsbCxkaXNwbGF5Om51bGx9KTt2YXIgZT10aGlzLnN0eWxlLmZvbnRGYW1pbHk7ZSYmLTEhPT1lLmluZGV4T2YoJyInKSYmdC5zdHlsZSgiZm9udC1mYW1pbHkiLGUucmVwbGFjZShsLCJUT0JFU1RSSVBQRUQiKSl9ZWxzZSB0LnJlbW92ZSgpfSkpLGYuX2dyYWRpZW50VXJsUXVlcnlQYXJ0cyl7dmFyIF89W107Zm9yKHZhciB3IGluIGYuX2dyYWRpZW50VXJsUXVlcnlQYXJ0cylfLnB1c2godyk7Xy5sZW5ndGgmJmguc2VsZWN0QWxsKF8uam9pbigiLCIpKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dGhpcy5zdHlsZS5maWxsO2UmJi0xIT09ZS5pbmRleE9mKCJ1cmwoIikmJnQuc3R5bGUoImZpbGwiLGUucmVwbGFjZShsLCJUT0JFU1RSSVBQRUQiKSk7dmFyIHI9dGhpcy5zdHlsZS5zdHJva2U7ciYmLTEhPT1yLmluZGV4T2YoInVybCgiKSYmdC5zdHlsZSgic3Ryb2tlIixyLnJlcGxhY2UobCwiVE9CRVNUUklQUEVEIikpfSkpfSJwZGYiIT09ZSYmImVwcyIhPT1lfHxoLnNlbGVjdEFsbCgiI01hdGhKYXhfU1ZHX2dseXBocyBwYXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwwKSxoLm5vZGUoKS5zZXRBdHRyaWJ1dGVOUyhzLnhtbG5zLCJ4bWxucyIscy5zdmcpLGgubm9kZSgpLnNldEF0dHJpYnV0ZU5TKHMueG1sbnMsInhtbG5zOnhsaW5rIixzLnhsaW5rKSwic3ZnIj09PWUmJnImJihoLmF0dHIoIndpZHRoIixyKmQpLGguYXR0cigiaGVpZ2h0IixyKmcpLGguYXR0cigidmlld0JveCIsIjAgMCAiK2QrIiAiK2cpKTt2YXIgVD0obmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKS5zZXJpYWxpemVUb1N0cmluZyhoLm5vZGUoKSk7cmV0dXJuIFQ9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoImRpdiIpLnN0eWxlKHtkaXNwbGF5OiJub25lIn0pLmh0bWwoIiIpLHI9dC5yZXBsYWNlKC8oJlteO10qOykvZ2ksKGZ1bmN0aW9uKHQpe3JldHVybiImbHQ7Ij09PXQ/IiYjNjA7IjoiJnJ0OyI9PT10PyImIzYyOyI6LTEhPT10LmluZGV4T2YoIjwiKXx8LTEhPT10LmluZGV4T2YoIj4iKT8iIjplLmh0bWwodCkudGV4dCgpfSkpO3JldHVybiBlLnJlbW92ZSgpLHJ9KFQpLFQ9KFQ9VC5yZXBsYWNlKC8mKD8hXHcrO3xcI1swLTldKzt8IFwjeFswLTlBLUZdKzspL2csIiZhbXA7IikpLnJlcGxhY2UoYywiJyIpLGkuaXNJRSgpJiYoVD0oVD0oVD1ULnJlcGxhY2UoLyIvZ2ksIiciKSkucmVwbGFjZSgvKFwoJyMpKFteJ10qKSgnXCkpL2dpLCcoIiMkMiIpJykpLnJlcGxhY2UoLyhcXCcpL2dpLCciJykpLFR9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTQsIi4uL2xpYiI6Nzc4LGQzOjE2OX1dLDkyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdLmk9cjtuLm1lcmdlQXJyYXkoZS50ZXh0LHQsInR4Iiksbi5tZXJnZUFycmF5KGUuaG92ZXJ0ZXh0LHQsImh0eCIpO3ZhciBpPWUubWFya2VyO2lmKGkpe24ubWVyZ2VBcnJheShpLm9wYWNpdHksdCwibW8iLCEwKSxuLm1lcmdlQXJyYXkoaS5jb2xvcix0LCJtYyIpO3ZhciBhPWkubGluZTthJiYobi5tZXJnZUFycmF5KGEuY29sb3IsdCwibWxjIiksbi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGEud2lkdGgsdCwibWx3IikpfX19LHsiLi4vLi4vbGliIjo3Nzh9XSw5MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGw9dCgiLi9jb25zdGFudHMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9cyh7ZWRpdFR5cGU6ImNhbGMiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZToic3R5bGUifSksZj1jKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MH0pLGg9Yyh7d2lkdGg6ZixlZGl0VHlwZToiY2FsYyJ9LG8oIm1hcmtlci5saW5lIikpLHA9Yyh7bGluZTpoLGVkaXRUeXBlOiJjYWxjIn0sbygibWFya2VyIikse29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0OjEsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn19KTtlLmV4cG9ydHM9e3g6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHkseHBlcmlvZDpuLnhwZXJpb2QseXBlcmlvZDpuLnlwZXJpb2QseHBlcmlvZDA6bi54cGVyaW9kMCx5cGVyaW9kMDpuLnlwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6bi54cGVyaW9kYWxpZ25tZW50LHlwZXJpb2RhbGlnbm1lbnQ6bi55cGVyaW9kYWxpZ25tZW50LHRleHQ6bi50ZXh0LHRleHR0ZW1wbGF0ZTphKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOmwuZXZlbnREYXRhS2V5c30pLGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOmkoe30se2tleXM6bC5ldmVudERhdGFLZXlzfSksdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnNpZGUiLCJvdXRzaWRlIiwiYXV0byIsIm5vbmUiXSxkZmx0OiJub25lIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saW5zaWRldGV4dGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZW5kIiwibWlkZGxlIiwic3RhcnQiXSxkZmx0OiJlbmQiLGVkaXRUeXBlOiJwbG90In0sdGV4dGFuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDoiYXV0byIsZWRpdFR5cGU6InBsb3QifSx0ZXh0Zm9udDpjKHt9LHUse30pLGluc2lkZXRleHRmb250OmMoe30sdSx7fSksb3V0c2lkZXRleHRmb250OmMoe30sdSx7fSksY29uc3RyYWludGV4dDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImJvdGgiLCJub25lIl0sZGZsdDoiYm90aCIsZWRpdFR5cGU6ImNhbGMifSxjbGlwb25heGlzOmMoe30sbi5jbGlwb25heGlzLHt9KSxvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGJhc2U6e3ZhbFR5cGU6ImFueSIsZGZsdDpudWxsLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjpwLG9mZnNldGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxhbGlnbm1lbnRncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpuLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGNvbG9yOm4uc2VsZWN0ZWQubWFya2VyLmNvbG9yLGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Om4uc2VsZWN0ZWQudGV4dGZvbnQsZWRpdFR5cGU6InN0eWxlIn0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Om4udW5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxjb2xvcjpuLnVuc2VsZWN0ZWQubWFya2VyLmNvbG9yLGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Om4udW5zZWxlY3RlZC50ZXh0Zm9udCxlZGl0VHlwZToic3R5bGUifSxyOm4ucix0Om4udCxfZGVwcmVjYXRlZDp7YmFyZGlyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixlZGl0VHlwZToiY2FsYyIsdmFsdWVzOlsidiIsImgiXX19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjUwLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDYsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE4NywiLi9jb25zdGFudHMiOjkyM31dLDkyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxzPXQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIiksbD10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx1LGYsaD1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IikscD1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IiksZD17bXNVVEM6ISghZS5iYXNlJiYwIT09ZS5iYXNlKX07ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1oLm1ha2VDYWxjZGF0YShlLCJ4IixkKSx1PXAubWFrZUNhbGNkYXRhKGUsInkiKSxjPWkoZSxwLCJ5Iix1KSxmPSEhZS55cGVyaW9kYWxpZ25tZW50KToocj1wLm1ha2VDYWxjZGF0YShlLCJ5IixkKSx1PWgubWFrZUNhbGNkYXRhKGUsIngiKSxjPWkoZSxoLCJ4Iix1KSxmPSEhZS54cGVyaW9kYWxpZ25tZW50KTtmb3IodmFyIGc9TWF0aC5taW4oYy5sZW5ndGgsci5sZW5ndGgpLG09bmV3IEFycmF5KGcpLHY9MDt2PGc7disrKW1bdl09e3A6Y1t2XSxzOnJbdl19LGYmJihtW3ZdLm9yaWdfcD11W3ZdKSxlLmlkcyYmKG1bdl0uaWQ9U3RyaW5nKGUuaWRzW3ZdKSk7cmV0dXJuIGEoZSwibWFya2VyIikmJm8odCxlLHt2YWxzOmUubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLGEoZSwibWFya2VyLmxpbmUiKSYmbyh0LGUse3ZhbHM6ZS5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlci5saW5lIixjTGV0dGVyOiJjIn0pLHMobSxlKSxsKG0sZSksbX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY1MSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6ODI1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTg5LCIuL2FycmF5c190b19jYWxjZGF0YSI6OTIwfV0sOTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17VEVYVFBBRDozLGV2ZW50RGF0YUtleXM6WyJ2YWx1ZSIsImxhYmVsIl19fSx7fV0sOTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLGM9dCgiLi9zaWV2ZS5qcyIpO2Z1bmN0aW9uIHUodCxlLHIsbyx1KXtpZihvLmxlbmd0aCl7dmFyIGIsXyx3LFQ7c3dpdGNoKGZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbyxzPWVbcl0sbD1zWzBdLnRyYWNlLGM9ImZ1bm5lbCI9PT1sLnR5cGU/bC5fYmFzZTpsLmJhc2UsdT0iaCI9PT1sLm9yaWVudGF0aW9uP2wueGNhbGVuZGFyOmwueWNhbGVuZGFyLGY9ImNhdGVnb3J5Ij09PXQudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlP2Z1bmN0aW9uKCl7cmV0dXJuIG51bGx9OnQuZDJjO2lmKGkoYykpe2ZvcihhPTA7YTxNYXRoLm1pbihjLmxlbmd0aCxzLmxlbmd0aCk7YSsrKW89ZihjW2FdLDAsdSksbihvKT8oc1thXS5iPStvLHNbYV0uaGFzQj0xKTpzW2FdLmI9MDtmb3IoO2E8cy5sZW5ndGg7YSsrKXNbYV0uYj0wfWVsc2V7bz1mKGMsMCx1KTt2YXIgaD1uKG8pO2ZvcihvPWg/bzowLGE9MDthPHMubGVuZ3RoO2ErKylzW2FdLmI9byxoJiYoc1thXS5oYXNCPTEpfX19KHIsbyksdS5tb2RlKXtjYXNlIm92ZXJsYXkiOmYoZSxyLG8sdSk7YnJlYWs7Y2FzZSJncm91cCI6Zm9yKGI9W10sXz1bXSx3PTA7dzxvLmxlbmd0aDt3Kyspdm9pZCAwPT09KFQ9b1t3XSlbMF0udHJhY2Uub2Zmc2V0P18ucHVzaChUKTpiLnB1c2goVCk7Xy5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89bmV3IGMobix7c2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFpLm5vcm19KTsoZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPXQuX2Z1bGxMYXlvdXQsYT1yLnBvc2l0aW9ucyxvPXIuZGlzdGluY3RQb3NpdGlvbnMscz1yLm1pbkRpZmYsYz1yLnRyYWNlcyx1PWMubGVuZ3RoLGY9YS5sZW5ndGghPT1vLmxlbmd0aCxoPXMqKDEtbi5nYXApLG09bChpLGUuX2lkKStjWzBdWzBdLnRyYWNlLm9yaWVudGF0aW9uLHY9aS5fYWxpZ25tZW50T3B0c1ttXXx8e30seT0wO3k8dTt5Kyspe3ZhciB4LGIsXz1jW3ldLHc9X1swXS50cmFjZSxUPXZbdy5hbGlnbm1lbnRncm91cF18fHt9LGs9T2JqZWN0LmtleXMoVC5vZmZzZXRHcm91cHN8fHt9KS5sZW5ndGgsTT0oeD1rP2gvazpmP2gvdTpoKSooMS0obi5ncm91cGdhcHx8MCkpO2I9az8oKDIqdy5fb2Zmc2V0SW5kZXgrMS1rKSp4LU0pLzI6Zj8oKDIqeSsxLXUpKngtTSkvMjotTS8yO3ZhciBBPV9bMF0udDtBLmJhcndpZHRoPU0sQS5wb2Zmc2V0PWIsQS5iYXJncm91cHdpZHRoPWgsQS5iYXJkZWx0YT1zfXIuYmluV2lkdGg9Y1swXVswXS50LmJhcndpZHRoLzEwMCxwKHIpLGQoZSxyKSxnKGUscixmKX0pKHQsZSxvLGkpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnRyYWNlcyxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYodm9pZCAwPT09blswXS50cmFjZS5iYXNlKWZvcih2YXIgaT1uZXcgYyhbbl0se3NlcE5lZ1ZhbDohMCxvdmVybGFwTm9NZXJnZTohMH0pLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9bltvXTtpZihzLnAhPT1hKXt2YXIgbD1pLnB1dChzLnAscy5iK3Mucyk7bCYmKHMuYj1sKX19fX0obyksaS5ub3JtPyh2KG8pLHkocixvLGkpKTptKHIsbyl9KHQsZSxyLF8sdSksYi5sZW5ndGgmJmYoZSxyLGIsdSk7YnJlYWs7Y2FzZSJzdGFjayI6Y2FzZSJyZWxhdGl2ZSI6Zm9yKGI9W10sXz1bXSx3PTA7dzxvLmxlbmd0aDt3Kyspdm9pZCAwPT09KFQ9b1t3XSlbMF0udHJhY2UuYmFzZT9fLnB1c2goVCk6Yi5wdXNoKFQpO18ubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPW5ldyBjKG4se3NlcE5lZ1ZhbDoicmVsYXRpdmUiPT09aS5tb2RlLG92ZXJsYXBOb01lcmdlOiEoaS5ub3JtfHwic3RhY2siPT09aS5tb2RlfHwicmVsYXRpdmUiPT09aS5tb2RlKX0pO2goZSxvLGkpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8sbCxjLHUsZj14KHQpLGg9ZS50cmFjZXM7Zm9yKGw9MDtsPGgubGVuZ3RoO2wrKylpZihuPWhbbF0sImZ1bm5lbCI9PT0oaT1uWzBdLnRyYWNlKS50eXBlKWZvcihjPTA7YzxuLmxlbmd0aDtjKyspKHU9bltjXSkucyE9PWEmJmUucHV0KHUucCwtLjUqdS5zKTtmb3IobD0wO2w8aC5sZW5ndGg7bCsrKXtuPWhbbF0saT1uWzBdLnRyYWNlLG89ImZ1bm5lbCI9PT1pLnR5cGU7dmFyIHA9W107Zm9yKGM9MDtjPG4ubGVuZ3RoO2MrKylpZigodT1uW2NdKS5zIT09YSl7dmFyIGQ7ZD1vP3Uuczp1LnMrdS5iO3ZhciBnPWUucHV0KHUucCxkKSxtPWcrZDt1LmI9Zyx1W2ZdPW0sci5ub3JtfHwocC5wdXNoKG0pLHUuaGFzQiYmcC5wdXNoKGcpKX1yLm5vcm18fChpLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCxwLHt0b3plcm86ITAscGFkZGVkOiEwfSkpfX0ocixvLGkpO2Zvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKWZvcih2YXIgdT1uW2xdLGY9MDtmPHUubGVuZ3RoO2YrKyl7dmFyIHA9dVtmXTtpZihwLnMhPT1hKXAuYitwLnM9PT1vLmdldChwLnAscC5zKSYmKHAuX291dG1vc3Q9ITApfWkubm9ybSYmeShyLG8saSl9KDAsZSxyLF8sdSksYi5sZW5ndGgmJmYoZSxyLGIsdSl9IWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89eChlKSxzPXt9LGw9MS8wLGM9LTEvMDtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihhPXRbcl0saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgdT1hW2ldLnA7bih1KSYmKGw9TWF0aC5taW4obCx1KSxjPU1hdGgubWF4KGMsdSkpfXZhciBmPTFlNC8oYy1sKSxoPXMucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKGYqKHQtbCkpKX07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7KGE9dFtyXSlbMF0udC5leHRlbnRzPXM7dmFyIHA9YVswXS50LnBvZmZzZXQsZD1BcnJheS5pc0FycmF5KHApO2ZvcihpPTA7aTxhLmxlbmd0aDtpKyspe3ZhciBnPWFbaV0sbT1nW29dLWcudy8yO2lmKG4obSkpe3ZhciB2PWdbb10rZy53LzIseT1oKGcucCk7c1t5XT9zW3ldPVtNYXRoLm1pbihtLHNbeV1bMF0pLE1hdGgubWF4KHYsc1t5XVsxXSldOnNbeV09W20sdl19Zy5wMD1nLnArKGQ/cFtpXTpwKSxnLnAxPWcucDArZy53LGcuczA9Zy5iLGcuczE9Zy5zMCtnLnN9fX0obyxlKX19ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPW5ldyBjKFthXSx7dW5pdE1pbkRpZmY6bi54Q2F0fHxuLnlDYXQsc2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFuLm5vcm19KTtoKHQsbyxuKSxuLm5vcm0/KHYobykseShlLG8sbikpOm0oZSxvKX19ZnVuY3Rpb24gaCh0LGUscil7Zm9yKHZhciBuPWUubWluRGlmZixpPWUudHJhY2VzLGE9biooMS1yLmdhcCksbz1hKigxLShyLmdyb3VwZ2FwfHwwKSkscz0tby8yLGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXVswXS50O2MuYmFyd2lkdGg9byxjLnBvZmZzZXQ9cyxjLmJhcmdyb3Vwd2lkdGg9YSxjLmJhcmRlbHRhPW59ZS5iaW5XaWR0aD1pWzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAoZSksZCh0LGUpLGcodCxlKX1mdW5jdGlvbiBwKHQpe3ZhciBlLHIsYT10LnRyYWNlcztmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgbyxzPWFbZV0sbD1zWzBdLGM9bC50cmFjZSx1PWwudCxmPWMuX29mZnNldHx8Yy5vZmZzZXQsaD11LnBvZmZzZXQ7aWYoaShmKSl7Zm9yKG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZiwwLHMubGVuZ3RoKSxyPTA7cjxvLmxlbmd0aDtyKyspbihvW3JdKXx8KG9bcl09aCk7Zm9yKHI9by5sZW5ndGg7cjxzLmxlbmd0aDtyKyspby5wdXNoKGgpO3UucG9mZnNldD1vfWVsc2Ugdm9pZCAwIT09ZiYmKHUucG9mZnNldD1mKTt2YXIgcD1jLl93aWR0aHx8Yy53aWR0aCxkPXUuYmFyd2lkdGg7aWYoaShwKSl7dmFyIGc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocCwwLHMubGVuZ3RoKTtmb3Iocj0wO3I8Zy5sZW5ndGg7cisrKW4oZ1tyXSl8fChnW3JdPWQpO2ZvcihyPWcubGVuZ3RoO3I8cy5sZW5ndGg7cisrKWcucHVzaChkKTtpZih1LmJhcndpZHRoPWcsdm9pZCAwPT09Zil7Zm9yKG89W10scj0wO3I8cy5sZW5ndGg7cisrKW8ucHVzaChoKyhkLWdbcl0pLzIpO3UucG9mZnNldD1vfX1lbHNlIHZvaWQgMCE9PXAmJih1LmJhcndpZHRoPXAsdm9pZCAwPT09ZiYmKHUucG9mZnNldD1oKyhkLXApLzIpKX19ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj1lLnRyYWNlcyxuPXgodCksaT0wO2k8ci5sZW5ndGg7aSsrKWZvcih2YXIgYT1yW2ldLG89YVswXS50LHM9by5wb2Zmc2V0LGw9QXJyYXkuaXNBcnJheShzKSxjPW8uYmFyd2lkdGgsdT1BcnJheS5pc0FycmF5KGMpLGY9MDtmPGEubGVuZ3RoO2YrKyl7dmFyIGg9YVtmXSxwPWgudz11P2NbZl06YztoW25dPWgucCsobD9zW2ZdOnMpK3AvMn19ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49ZS50cmFjZXMsaT1lLm1pbkRpZmYvMjtzLm1pbkR0aWNrKHQsZS5taW5EaWZmLGUuZGlzdGluY3RQb3NpdGlvbnNbMF0scik7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvLGwsYyx1LGY9blthXSxoPWZbMF0scD1oLnRyYWNlLGQ9W107Zm9yKHU9MDt1PGYubGVuZ3RoO3UrKylsPShvPWZbdV0pLnAtaSxjPW8ucCtpLGQucHVzaChsLGMpO2lmKHAud2lkdGh8fHAub2Zmc2V0KXt2YXIgZz1oLnQsbT1nLnBvZmZzZXQsdj1nLmJhcndpZHRoLHk9QXJyYXkuaXNBcnJheShtKSx4PUFycmF5LmlzQXJyYXkodik7Zm9yKHU9MDt1PGYubGVuZ3RoO3UrKyl7bz1mW3VdO3ZhciBiPXk/bVt1XTptLF89eD92W3VdOnY7Yz0obD1vLnArYikrXyxkLnB1c2gobCxjKX19cC5fZXh0cmVtZXNbdC5faWRdPXMuZmluZEV4dHJlbWVzKHQsZCx7cGFkZGVkOiExfSl9fWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9ZS50cmFjZXMsbj14KHQpLGk9MDtpPHIubGVuZ3RoO2krKyl7Zm9yKHZhciBhPXJbaV0sbz1hWzBdLnRyYWNlLGw9W10sYz0hMSx1PTA7dTxhLmxlbmd0aDt1Kyspe3ZhciBmPWFbdV0saD1mLmIscD1oK2YucztmW25dPXAsbC5wdXNoKHApLGYuaGFzQiYmbC5wdXNoKGgpLGYuaGFzQiYmZi5ifHwoYz0hMCl9by5fZXh0cmVtZXNbdC5faWRdPXMuZmluZEV4dHJlbWVzKHQsbCx7dG96ZXJvOmMscGFkZGVkOiEwfSl9fWZ1bmN0aW9uIHYodCl7Zm9yKHZhciBlPXQudHJhY2VzLHI9MDtyPGUubGVuZ3RoO3IrKylmb3IodmFyIG49ZVtyXSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvPW5baV07by5zIT09YSYmdC5wdXQoby5wLG8uYitvLnMpfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgaT1lLnRyYWNlcyxvPXgodCksbD0iZnJhY3Rpb24iPT09ci5ub3JtPzE6MTAwLGM9bC8xZTksdT10LmwyYyh0LmMybCgwKSksZj0ic3RhY2siPT09ci5tb2RlP2w6dTtmdW5jdGlvbiBoKGUpe3JldHVybiBuKHQuYzJsKGUpKSYmKGU8dS1jfHxlPmYrY3x8IW4odSkpfWZvcih2YXIgcD0wO3A8aS5sZW5ndGg7cCsrKXtmb3IodmFyIGQ9aVtwXSxnPWRbMF0udHJhY2UsbT1bXSx2PSExLHk9ITEsYj0wO2I8ZC5sZW5ndGg7YisrKXt2YXIgXz1kW2JdO2lmKF8ucyE9PWEpe3ZhciB3PU1hdGguYWJzKGwvZS5nZXQoXy5wLF8ucykpO18uYio9dyxfLnMqPXc7dmFyIFQ9Xy5iLGs9VCtfLnM7X1tvXT1rLG0ucHVzaChrKSx5PXl8fGgoayksXy5oYXNCJiYobS5wdXNoKFQpLHk9eXx8aChUKSksXy5oYXNCJiZfLmJ8fCh2PSEwKX19Zy5fZXh0cmVtZXNbdC5faWRdPXMuZmluZEV4dHJlbWVzKHQsbSx7dG96ZXJvOnYscGFkZGVkOnl9KX19ZnVuY3Rpb24geCh0KXtyZXR1cm4gdC5faWQuY2hhckF0KDApfWUuZXhwb3J0cz17Y3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT10Ll9mdWxsTGF5b3V0LGE9dC5fZnVsbERhdGEscz10LmNhbGNkYXRhLGw9W10sYz1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspe3ZhciBoPWFbZl07aWYoITA9PT1oLnZpc2libGUmJm8udHJhY2VJcyhoLCJiYXIiKSYmaC54YXhpcz09PXIuX2lkJiZoLnlheGlzPT09bi5faWQmJigiaCI9PT1oLm9yaWVudGF0aW9uP2wucHVzaChzW2ZdKTpjLnB1c2goc1tmXSksaC5fY29tcHV0ZVBoKSlmb3IodmFyIHA9dC5jYWxjZGF0YVtmXSxkPTA7ZDxwLmxlbmd0aDtkKyspImZ1bmN0aW9uIj09dHlwZW9mIHBbZF0ucGgwJiYocFtkXS5waDA9cFtkXS5waDAoKSksImZ1bmN0aW9uIj09dHlwZW9mIHBbZF0ucGgxJiYocFtkXS5waDE9cFtkXS5waDEoKSl9dmFyIGc9e3hDYXQ6ImNhdGVnb3J5Ij09PXIudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlLHlDYXQ6ImNhdGVnb3J5Ij09PW4udHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09bi50eXBlLG1vZGU6aS5iYXJtb2RlLG5vcm06aS5iYXJub3JtLGdhcDppLmJhcmdhcCxncm91cGdhcDppLmJhcmdyb3VwZ2FwfTt1KHQscixuLGMsZyksdSh0LG4scixsLGcpfSxzZXRHcm91cFBvc2l0aW9uczp1fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjgzNSwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi9zaWV2ZS5qcyI6OTM0LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sOTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksbD10KCIuL3N0eWxlX2RlZmF1bHRzIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiKS5nZXRBeGlzR3JvdXAsdT10KCIuL2F0dHJpYnV0ZXMiKSxmPW4uY29lcmNlRm9udDtmdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpPWUub3JpZW50YXRpb24sYT1lW3t2OiJ4IixoOiJ5In1baV0rImF4aXMiXSxvPWMocixhKStpLHM9ci5fYWxpZ25tZW50T3B0c3x8e30sbD1uKCJhbGlnbm1lbnRncm91cCIpLHU9c1tvXTt1fHwodT1zW29dPXt9KTt2YXIgZj11W2xdO2Y/Zi50cmFjZXMucHVzaChlKTpmPXVbbF09e3RyYWNlczpbZV0sYWxpZ25tZW50SW5kZXg6T2JqZWN0LmtleXModSkubGVuZ3RoLG9mZnNldEdyb3Vwczp7fX07dmFyIGg9bigib2Zmc2V0Z3JvdXAiKSxwPWYub2Zmc2V0R3JvdXBzLGQ9cFtoXTtoJiYoZHx8KGQ9cFtoXT17b2Zmc2V0SW5kZXg6T2JqZWN0LmtleXMocCkubGVuZ3RofSksZS5fb2Zmc2V0SW5kZXg9ZC5vZmZzZXRJbmRleCl9ZnVuY3Rpb24gcCh0LGUscixpLGEsbyl7dmFyIHM9ISghMT09PShvPW98fHt9KS5tb2R1bGVIYXNTZWxlY3RlZCksbD0hKCExPT09by5tb2R1bGVIYXNVbnNlbGVjdGVkKSxjPSEoITE9PT1vLm1vZHVsZUhhc0NvbnN0cmFpbiksdT0hKCExPT09by5tb2R1bGVIYXNDbGlwb25heGlzKSxoPSEoITE9PT1vLm1vZHVsZUhhc1RleHRhbmdsZSkscD0hKCExPT09by5tb2R1bGVIYXNJbnNpZGVhbmNob3IpLGQ9ISFvLmhhc1BhdGhiYXIsZz1BcnJheS5pc0FycmF5KGEpfHwiYXV0byI9PT1hLG09Z3x8Imluc2lkZSI9PT1hLHY9Z3x8Im91dHNpZGUiPT09YTtpZihtfHx2KXt2YXIgeT1mKGksInRleHRmb250IixyLmZvbnQpLHg9bi5leHRlbmRGbGF0KHt9LHkpLGI9ISh0LnRleHRmb250JiZ0LnRleHRmb250LmNvbG9yKTtpZihiJiZkZWxldGUgeC5jb2xvcixmKGksImluc2lkZXRleHRmb250Iix4KSxkKXt2YXIgXz1uLmV4dGVuZEZsYXQoe30seSk7YiYmZGVsZXRlIF8uY29sb3IsZihpLCJwYXRoYmFyLnRleHRmb250IixfKX12JiZmKGksIm91dHNpZGV0ZXh0Zm9udCIseSkscyYmaSgic2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxsJiZpKCJ1bnNlbGVjdGVkLnRleHRmb250LmNvbG9yIiksYyYmaSgiY29uc3RyYWludGV4dCIpLHUmJmkoImNsaXBvbmF4aXMiKSxoJiZpKCJ0ZXh0YW5nbGUiKSxpKCJ0ZXh0dGVtcGxhdGUiKX1tJiZwJiZpKCJpbnNpZGV0ZXh0YW5jaG9yIil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixjKXtmdW5jdGlvbiBmKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSx1LHIsaSl9aWYobyh0LGUsYyxmKSl7cyh0LGUsYyxmKSxmKCJvcmllbnRhdGlvbiIsZS54JiYhZS55PyJoIjoidiIpLGYoImJhc2UiKSxmKCJvZmZzZXQiKSxmKCJ3aWR0aCIpLGYoInRleHQiKSxmKCJob3ZlcnRleHQiKSxmKCJob3ZlcnRlbXBsYXRlIik7dmFyIGg9ZigidGV4dHBvc2l0aW9uIik7cCh0LGUsYyxmLGgse21vZHVsZUhhc1NlbGVjdGVkOiEwLG1vZHVsZUhhc1Vuc2VsZWN0ZWQ6ITAsbW9kdWxlSGFzQ29uc3RyYWluOiEwLG1vZHVsZUhhc0NsaXBvbmF4aXM6ITAsbW9kdWxlSGFzVGV4dGFuZ2xlOiEwLG1vZHVsZUhhc0luc2lkZWFuY2hvcjohMH0pLGwodCxlLGYscixjKTt2YXIgZD0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yLGc9YS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN1cHBseURlZmF1bHRzIik7Zyh0LGUsZHx8aS5kZWZhdWx0TGluZSx7YXhpczoieSJ9KSxnKHQsZSxkfHxpLmRlZmF1bHRMaW5lLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGYpfWVsc2UgZS52aXNpYmxlPSExfSxjcm9zc1RyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcjtmdW5jdGlvbiBpKHQpe3JldHVybiBuLmNvZXJjZShyLl9pbnB1dCxyLHUsdCl9aWYoImdyb3VwIj09PWUuYmFybW9kZSlmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKykiYmFyIj09PShyPXRbYV0pLnR5cGUmJihyLl9pbnB1dCxoKDAscixlLGkpKX0saGFuZGxlR3JvdXBpbmdEZWZhdWx0czpoLGhhbmRsZVRleHQ6cH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo4MzUsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjoxMjA3LCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMjE0LCIuL2F0dHJpYnV0ZXMiOjkyMSwiLi9zdHlsZV9kZWZhdWx0cyI6OTM2fV0sOTI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSwiaCI9PT1yLm9yaWVudGF0aW9uPyh0LmxhYmVsPXQueSx0LnZhbHVlPXQueCk6KHQubGFiZWw9dC54LHQudmFsdWU9dC55KSx0fX0se31dLDkyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtyLmNvZXJjZVN0cmluZz1mdW5jdGlvbih0LGUscil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZihlfHwhdC5ub0JsYW5rKXJldHVybiBlfWVsc2UgaWYoKCJudW1iZXIiPT10eXBlb2YgZXx8ITA9PT1lKSYmIXQuc3RyaWN0KXJldHVybiBTdHJpbmcoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlTnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXtpZihuKGUpKXtlPStlO3ZhciBpPXQubWluLGE9dC5tYXg7aWYoISh2b2lkIDAhPT1pJiZlPGl8fHZvaWQgMCE9PWEmJmU+YSkpcmV0dXJuIGV9cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlQ29sb3I9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpKGUpLmlzVmFsaWQoKT9lOnZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlRW51bWVyYXRlZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuY29lcmNlTnVtYmVyJiYoZT0rZSksLTEhPT10LnZhbHVlcy5pbmRleE9mKGUpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH0sci5nZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U8dC5sZW5ndGgmJihyPXRbZV0pOnI9dCxyfSxyLmdldExpbmVXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiAwPGUubWx3P2UubWx3OmEodC5tYXJrZXIubGluZS53aWR0aCk/MDp0Lm1hcmtlci5saW5lLndpZHRofX0seyIuLi8uLi9saWIiOjc3OCwiZmFzdC1pc251bWVyaWMiOjI0MSx0aW55Y29sb3IyOjU3Nn1dLDkyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vbGliIikuZmlsbFRleHQscz10KCIuL2hlbHBlcnMiKS5nZXRMaW5lV2lkdGgsbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0LGM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiB1KHQsZSxyLGkpe3ZhciBhLHMsdSxmLGgscCxkLGc9dC5jZCxtPWdbMF0udHJhY2Usdj1nWzBdLnQseT0iY2xvc2VzdCI9PT1pLHg9IndhdGVyZmFsbCI9PT1tLnR5cGUsYj10Lm1heEhvdmVyRGlzdGFuY2U7ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdFt1XS10LncvMn1mdW5jdGlvbiB3KHQpe3JldHVybiB0W3VdK3Qudy8yfXZhciBUPXk/XzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4oXyh0KSx0LnAtdi5iYXJkZWx0YS8yKX0saz15P3c6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHcodCksdC5wK3YuYmFyZGVsdGEvMil9O2Z1bmN0aW9uIE0odCxlKXtyZXR1cm4gbi5pbmJveCh0LWEsZS1hLGIrTWF0aC5taW4oMSxNYXRoLmFicyhlLXQpL2QpLTEpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIE0oVCh0KSxrKHQpKX1mdW5jdGlvbiBTKHQpe3ZhciBlPXMscj10LmIsaT10W2ZdO2lmKHgpe3ZhciBhPU1hdGguYWJzKHQucmF3Uyl8fDA7ZT4wP2krPWE6ZTwwJiYoaS09YSl9cmV0dXJuIG4uaW5ib3goci1lLGktZSxiKyhpLWUpLyhpLXIpLTEpfSJoIj09PW0ub3JpZW50YXRpb24/KGE9cixzPWUsdT0ieSIsZj0ieCIsaD1TLHA9QSk6KGE9ZSxzPXIsdT0ieCIsZj0ieSIscD1TLGg9QSk7dmFyIEU9dFt1KyJhIl0sQz10W2YrImEiXTtkPU1hdGguYWJzKEUucjJjKEUucmFuZ2VbMV0pLUUucjJjKEUucmFuZ2VbMF0pKTt2YXIgTD1uLmdldERpc3RhbmNlRnVuY3Rpb24oaSxoLHAsKGZ1bmN0aW9uKHQpe3JldHVybihoKHQpK3AodCkpLzJ9KSk7aWYobi5nZXRDbG9zZXN0KGcsTCx0KSwhMSE9PXQuaW5kZXgmJmdbdC5pbmRleF0ucCE9PWMpe3l8fChUPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbihfKHQpLHQucC12LmJhcmdyb3Vwd2lkdGgvMil9LGs9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHcodCksdC5wK3YuYmFyZ3JvdXB3aWR0aC8yKX0pO3ZhciBJPWdbdC5pbmRleF0sUD1tLmJhc2U/SS5iK0kuczpJLnM7dFtmKyIwIl09dFtmKyIxIl09Qy5jMnAoSVtmXSwhMCksdFtmKyJMYWJlbFZhbCJdPVA7dmFyIHo9di5leHRlbnRzW3YuZXh0ZW50cy5yb3VuZChJLnApXTt0W3UrIjAiXT1FLmMycCh5P1QoSSk6elswXSwhMCksdFt1KyIxIl09RS5jMnAoeT9rKEkpOnpbMV0sITApO3ZhciBPPXZvaWQgMCE9PUkub3JpZ19wO3JldHVybiB0W3UrIkxhYmVsVmFsIl09Tz9JLm9yaWdfcDpJLnAsdC5sYWJlbExhYmVsPWwoRSx0W3UrIkxhYmVsVmFsIl0pLHQudmFsdWVMYWJlbD1sKEMsdFtmKyJMYWJlbFZhbCJdKSx0LmJhc2VMYWJlbD1sKEMsSS5iKSx0LnNwaWtlRGlzdGFuY2U9KFMoSSkrZnVuY3Rpb24odCl7cmV0dXJuIE0oXyh0KSx3KHQpKX0oSSkpLzItYix0W3UrIlNwaWtlIl09RS5jMnAoSS5wLCEwKSxvKEksbSx0KSx0LmhvdmVydGVtcGxhdGU9bS5ob3ZlcnRlbXBsYXRlLHR9fWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1lLm1jY3x8dC5tYXJrZXIuY29sb3Isbj1lLm1sY2N8fHQubWFya2VyLmxpbmUuY29sb3IsaT1zKHQsZSk7cmV0dXJuIGEub3BhY2l0eShyKT9yOmEub3BhY2l0eShuKSYmaT9uOnZvaWQgMH1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXUodCxlLHIsbik7aWYoYSl7dmFyIG89YS5jZCxzPW9bMF0udHJhY2UsbD1vW2EuaW5kZXhdO3JldHVybiBhLmNvbG9yPWYocyxsKSxpLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikobCxzLGEpLFthXX19LGhvdmVyT25CYXJzOnUsZ2V0VHJhY2VDb2xvcjpmfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY4MywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi9oZWxwZXJzIjo5Mjd9XSw5Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxhcnJheXNUb0NhbGNkYXRhOnQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIikscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4vc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImJhciIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImJhci1saWtlIiwiY2FydGVzaWFuIiwic3ZnIiwiYmFyIiwib3JpZW50ZWQiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxhbmltYXRhYmxlOiEwLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwNSwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjkyMCwiLi9hdHRyaWJ1dGVzIjo5MjEsIi4vY2FsYyI6OTIyLCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjkyNCwiLi9kZWZhdWx0cyI6OTI1LCIuL2V2ZW50X2RhdGEiOjkyNiwiLi9ob3ZlciI6OTI4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5MzAsIi4vbGF5b3V0X2RlZmF1bHRzIjo5MzEsIi4vcGxvdCI6OTMyLCIuL3NlbGVjdCI6OTMzLCIuL3N0eWxlIjo5MzV9XSw5MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFjayIsImdyb3VwIiwib3ZlcmxheSIsInJlbGF0aXZlIl0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sYmFybm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwiZnJhY3Rpb24iLCJwZXJjZW50Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGJhcmdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LGJhcmdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDkzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gcyhyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUsbyxyLG4pfWZvcih2YXIgbD0hMSxjPSExLHU9ITEsZj17fSxoPXMoImJhcm1vZGUiKSxwPTA7cDxyLmxlbmd0aDtwKyspe3ZhciBkPXJbcF07aWYobi50cmFjZUlzKGQsImJhciIpJiZkLnZpc2libGUpe2lmKGw9ITAsImdyb3VwIj09PWgpe3ZhciBnPWQueGF4aXMrZC55YXhpcztmW2ddJiYodT0hMCksZltnXT0hMH1pZihkLnZpc2libGUmJiJoaXN0b2dyYW0iPT09ZC50eXBlKSJjYXRlZ29yeSIhPT1pLmdldEZyb21JZCh7X2Z1bGxMYXlvdXQ6ZX0sZFsidiI9PT1kLm9yaWVudGF0aW9uPyJ4YXhpcyI6InlheGlzIl0pLnR5cGUmJihjPSEwKX19bD8oIm92ZXJsYXkiIT09aCYmcygiYmFybm9ybSIpLHMoImJhcmdhcCIsYyYmIXU/MDouMikscygiYmFyZ3JvdXBnYXAiKSk6ZGVsZXRlIGUuYmFybW9kZX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjkzMH1dLDkzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uLy4uL3JlZ2lzdHJ5IiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLnRpY2tUZXh0LGY9dCgiLi91bmlmb3JtX3RleHQiKSxoPWYucmVjb3JkTWluVGV4dFNpemUscD1mLmNsZWFyTWluVGV4dFNpemUsZD10KCIuL3N0eWxlIiksZz10KCIuL2hlbHBlcnMiKSxtPXQoIi4vY29uc3RhbnRzIiksdj10KCIuL2F0dHJpYnV0ZXMiKSx5PXYudGV4dCx4PXYudGV4dHBvc2l0aW9uLGI9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLF89bS5URVhUUEFEO2Z1bmN0aW9uIHcodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gVCh0KXtpZih0LmlkcylyZXR1cm4gd31mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIHQ8ZT8xOi0xfWZ1bmN0aW9uIE0odCxlLHIsbil7dmFyIGk7cmV0dXJuIWUudW5pZm9ybXRleHQubW9kZSYmQShyKT8obiYmKGk9bigpKSx0LnRyYW5zaXRpb24oKS5kdXJhdGlvbihyLmR1cmF0aW9uKS5lYXNlKHIuZWFzaW5nKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe2kmJmkoKX0pKS5lYWNoKCJpbnRlcnJ1cHQiLChmdW5jdGlvbigpe2kmJmkoKX0pKSk6dH1mdW5jdGlvbiBBKHQpe3JldHVybiB0JiZ0LmR1cmF0aW9uPjB9ZnVuY3Rpb24gUyh0KXtyZXR1cm4iYXV0byI9PT10PzA6dH1mdW5jdGlvbiBFKHQsZSl7dmFyIHI9TWF0aC5QSS8xODAqZSxuPU1hdGguYWJzKE1hdGguc2luKHIpKSxpPU1hdGguYWJzKE1hdGguY29zKHIpKTtyZXR1cm57eDp0LndpZHRoKmkrdC5oZWlnaHQqbix5OnQud2lkdGgqbit0LmhlaWdodCppfX1mdW5jdGlvbiBDKHQsZSxyLG4saSxhKXt2YXIgbz0hIWEuaXNIb3Jpem9udGFsLHM9ISFhLmNvbnN0cmFpbmVkLGw9YS5hbmdsZXx8MCxjPWEuYW5jaG9yfHwiZW5kIix1PSJlbmQiPT09YyxmPSJzdGFydCI9PT1jLGg9KChhLmxlZnRUb1JpZ2h0fHwwKSsxKS8yLHA9MS1oLGQ9aS53aWR0aCxnPWkuaGVpZ2h0LG09TWF0aC5hYnMoZS10KSx2PU1hdGguYWJzKG4tcikseT1tPjIqXyYmdj4yKl8/XzowO20tPTIqeSx2LT0yKnk7dmFyIHg9UyhsKTsiYXV0byIhPT1sfHxkPD1tJiZnPD12fHwhKGQ+bXx8Zz52KXx8KGQ+dnx8Zz5tKSYmZDxnPT1tPHZ8fCh4Kz05MCk7dmFyIGI9RShpLHgpLHc9MTtzJiYodz1NYXRoLm1pbigxLG0vYi54LHYvYi55KSk7dmFyIFQ9aS5sZWZ0KnAraS5yaWdodCpoLE09KGkudG9wK2kuYm90dG9tKS8yLEE9KHQrXykqcCsoZS1fKSpoLEM9KHIrbikvMixMPTAsST0wO2lmKGZ8fHUpe3ZhciBQPShvP2IueDpiLnkpLzIsej1vP2sodCxlKTprKHIsbik7bz9mPyhBPXQreip5LEw9LXoqUCk6KEE9ZS16KnksTD16KlApOmY/KEM9cit6KnksST0teipQKTooQz1uLXoqeSxJPXoqUCl9cmV0dXJue3RleHRYOlQsdGV4dFk6TSx0YXJnZXRYOkEsdGFyZ2V0WTpDLGFuY2hvclg6TCxhbmNob3JZOkksc2NhbGU6dyxyb3RhdGU6eH19ZS5leHBvcnRzPXtwbG90OmZ1bmN0aW9uKHQsZSxyLGYsbSx2KXt2YXIgdz1lLnhheGlzLEw9ZS55YXhpcyxJPXQuX2Z1bGxMYXlvdXQ7bXx8KG09e21vZGU6SS5iYXJtb2RlLG5vcm06SS5iYXJtb2RlLGdhcDpJLmJhcmdhcCxncm91cGdhcDpJLmJhcmdyb3VwZ2FwfSxwKCJiYXIiLEkpKTt2YXIgUD1hLm1ha2VUcmFjZUdyb3VwcyhmLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgYz1uLnNlbGVjdCh0aGlzKSxmPXJbMF0udHJhY2UscD0id2F0ZXJmYWxsIj09PWYudHlwZSxQPSJmdW5uZWwiPT09Zi50eXBlLHo9ImJhciI9PT1mLnR5cGV8fFAsTz0wO3AmJmYuY29ubmVjdG9yLnZpc2libGUmJiJiZXR3ZWVuIj09PWYuY29ubmVjdG9yLm1vZGUmJihPPWYuY29ubmVjdG9yLmxpbmUud2lkdGgvMik7dmFyIEQ9ImgiPT09Zi5vcmllbnRhdGlvbixSPUEobSksRj1hLmVuc3VyZVNpbmdsZShjLCJnIiwicG9pbnRzIiksQj1UKGYpLE49Ri5zZWxlY3RBbGwoImcucG9pbnQiKS5kYXRhKGEuaWRlbnRpdHksQik7Ti5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvaW50IiwhMCksTi5leGl0KCkucmVtb3ZlKCksTi5lYWNoKChmdW5jdGlvbihjLHApe3ZhciBULEEsUD1uLnNlbGVjdCh0aGlzKSxGPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVtdLGE9W10sbz1uP2U6cixzPW4/cjplO3JldHVybiBpWzBdPW8uYzJwKHQuczAsITApLGFbMF09cy5jMnAodC5wMCwhMCksaVsxXT1vLmMycCh0LnMxLCEwKSxhWzFdPXMuYzJwKHQucDEsITApLG4/W2ksYV06W2EsaV19KGMsdyxMLEQpLEI9RlswXVswXSxOPUZbMF1bMV0saj1GWzFdWzBdLFU9RlsxXVsxXSxWPTA9PShEP04tQjpVLWopO2lmKFYmJnomJmcuZ2V0TGluZVdpZHRoKGYsYykmJihWPSExKSxWfHwoVj0hKGkoQikmJmkoTikmJmkoaikmJmkoVSkpKSxjLmlzQmxhbms9VixWJiYoRD9OPUI6VT1qKSxPJiYhViYmKEQ/KEItPWsoQixOKSpPLE4rPWsoQixOKSpPKTooai09ayhqLFUpKk8sVSs9ayhqLFUpKk8pKSwid2F0ZXJmYWxsIj09PWYudHlwZSl7aWYoIVYpe3ZhciBxPWZbYy5kaXJdLm1hcmtlcjtUPXEubGluZS53aWR0aCxBPXEuY29sb3J9fWVsc2UgVD1nLmdldExpbmVXaWR0aChmLGMpLEE9Yy5tY3x8Zi5tYXJrZXIuY29sb3I7ZnVuY3Rpb24gSCh0KXt2YXIgZT1uLnJvdW5kKFQvMiUxLDIpO3JldHVybiAwPT09bS5nYXAmJjA9PT1tLmdyb3VwZ2FwP24ucm91bmQoTWF0aC5yb3VuZCh0KS1lLDIpOnR9aWYoIXQuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIEc9cy5vcGFjaXR5KEEpPDF8fFQ+LjAxP0g6ZnVuY3Rpb24odCxlLHIpe3JldHVybiByJiZ0PT09ZT90Ok1hdGguYWJzKHQtZSk+PTI/SCh0KTp0PmU/TWF0aC5jZWlsKHQpOk1hdGguZmxvb3IodCl9O0I9RyhCLE4sRCksTj1HKE4sQixEKSxqPUcoaixVLCFEKSxVPUcoVSxqLCFEKX12YXIgWT1NKGEuZW5zdXJlU2luZ2xlKFAsInBhdGgiKSxJLG0sdik7aWYoWS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImQiLGlzTmFOKChOLUIpKihVLWopKXx8ViYmdC5fY29udGV4dC5zdGF0aWNQbG90PyJNMCwwWiI6Ik0iK0IrIiwiK2orIlYiK1UrIkgiK04rIlYiK2orIloiKS5jYWxsKGwuc2V0Q2xpcFVybCxlLmxheWVyQ2xpcElkLHQpLCFJLnVuaWZvcm10ZXh0Lm1vZGUmJlIpe3ZhciBXPWwubWFrZVBvaW50U3R5bGVGbnMoZik7bC5zaW5nbGVQb2ludFN0eWxlKGMsWSxmLFcsdCl9IWZ1bmN0aW9uKHQsZSxyLG4saSxzLGMsZixwLG0sdil7dmFyIHcsVD1lLnhheGlzLEE9ZS55YXhpcyxMPXQuX2Z1bGxMYXlvdXQ7ZnVuY3Rpb24gSShlLHIsbil7cmV0dXJuIGEuZW5zdXJlU2luZ2xlKGUsInRleHQiKS50ZXh0KHIpLmF0dHIoe2NsYXNzOiJiYXJ0ZXh0IGJhcnRleHQtIit3LCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsImRhdGEtbm90ZXgiOjF9KS5jYWxsKGwuZm9udCxuKS5jYWxsKG8uY29udmVydFRvVHNwYW5zLHQpfXZhciBQPW5bMF0udHJhY2Usej0iaCI9PT1QLm9yaWVudGF0aW9uLE89ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbyxzPWVbMF0udHJhY2U7bz1zLnRleHR0ZW1wbGF0ZT9mdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPWVbMF0udHJhY2Uscz1hLmNhc3RPcHRpb24obyxyLCJ0ZXh0dGVtcGxhdGUiKTtpZighcylyZXR1cm4iIjt2YXIgbCxjLGYsaCxwPSJ3YXRlcmZhbGwiPT09by50eXBlLGQ9ImZ1bm5lbCI9PT1vLnR5cGU7ImgiPT09by5vcmllbnRhdGlvbj8obD0ieSIsYz1pLGY9IngiLGg9bik6KGw9IngiLGM9bixmPSJ5IixoPWkpO2Z1bmN0aW9uIGcodCl7cmV0dXJuIHUoaCwrdCwhMCkudGV4dH12YXIgbT1lW3JdLHY9e307di5sYWJlbD1tLnAsdi5sYWJlbExhYmVsPXZbbCsiTGFiZWwiXT0oeT1tLnAsdShjLHksITApLnRleHQpO3ZhciB5O3ZhciB4PWEuY2FzdE9wdGlvbihvLG0uaSwidGV4dCIpOygwPT09eHx8eCkmJih2LnRleHQ9eCk7di52YWx1ZT1tLnMsdi52YWx1ZUxhYmVsPXZbZisiTGFiZWwiXT1nKG0ucyk7dmFyIF89e307YihfLG8sbS5pKSxwJiYodi5kZWx0YT0rbS5yYXdTfHxtLnMsdi5kZWx0YUxhYmVsPWcodi5kZWx0YSksdi5maW5hbD1tLnYsdi5maW5hbExhYmVsPWcodi5maW5hbCksdi5pbml0aWFsPXYuZmluYWwtdi5kZWx0YSx2LmluaXRpYWxMYWJlbD1nKHYuaW5pdGlhbCkpO2QmJih2LnZhbHVlPW0ucyx2LnZhbHVlTGFiZWw9Zyh2LnZhbHVlKSx2LnBlcmNlbnRJbml0aWFsPW0uYmVnUix2LnBlcmNlbnRJbml0aWFsTGFiZWw9YS5mb3JtYXRQZXJjZW50KG0uYmVnUiksdi5wZXJjZW50UHJldmlvdXM9bS5kaWZSLHYucGVyY2VudFByZXZpb3VzTGFiZWw9YS5mb3JtYXRQZXJjZW50KG0uZGlmUiksdi5wZXJjZW50VG90YWw9bS5zdW1SLHYucGVyY2VuVG90YWxMYWJlbD1hLmZvcm1hdFBlcmNlbnQobS5zdW1SKSk7dmFyIHc9YS5jYXN0T3B0aW9uKG8sbS5pLCJjdXN0b21kYXRhIik7dyYmKHYuY3VzdG9tZGF0YT13KTtyZXR1cm4gYS50ZXh0dGVtcGxhdGVTdHJpbmcocyx2LHQuX2QzbG9jYWxlLF8sdixvLl9tZXRhfHx7fSl9KHQsZSxyLG4saSk6cy50ZXh0aW5mbz9mdW5jdGlvbih0LGUscixuKXt2YXIgaT10WzBdLnRyYWNlLG89ImgiPT09aS5vcmllbnRhdGlvbixzPSJ3YXRlcmZhbGwiPT09aS50eXBlLGw9ImZ1bm5lbCI9PT1pLnR5cGU7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdShvP3I6biwrdCwhMCkudGV4dH12YXIgZixoPWkudGV4dGluZm8scD10W2VdLGQ9aC5zcGxpdCgiKyIpLGc9W10sbT1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PWQuaW5kZXhPZih0KX07bSgibGFiZWwiKSYmZy5wdXNoKCh2PXRbZV0ucCx1KG8/bjpyLHYsITApLnRleHQpKTt2YXIgdjttKCJ0ZXh0IikmJigwPT09KGY9YS5jYXN0T3B0aW9uKGkscC5pLCJ0ZXh0IikpfHxmKSYmZy5wdXNoKGYpO2lmKHMpe3ZhciB5PStwLnJhd1N8fHAucyx4PXAudixiPXgteTttKCJpbml0aWFsIikmJmcucHVzaChjKGIpKSxtKCJkZWx0YSIpJiZnLnB1c2goYyh5KSksbSgiZmluYWwiKSYmZy5wdXNoKGMoeCkpfWlmKGwpe20oInZhbHVlIikmJmcucHVzaChjKHAucykpO3ZhciBfPTA7bSgicGVyY2VudCBpbml0aWFsIikmJl8rKyxtKCJwZXJjZW50IHByZXZpb3VzIikmJl8rKyxtKCJwZXJjZW50IHRvdGFsIikmJl8rKzt2YXIgdz1fPjE7bSgicGVyY2VudCBpbml0aWFsIikmJihmPWEuZm9ybWF0UGVyY2VudChwLmJlZ1IpLHcmJihmKz0iIG9mIGluaXRpYWwiKSxnLnB1c2goZikpLG0oInBlcmNlbnQgcHJldmlvdXMiKSYmKGY9YS5mb3JtYXRQZXJjZW50KHAuZGlmUiksdyYmKGYrPSIgb2YgcHJldmlvdXMiKSxnLnB1c2goZikpLG0oInBlcmNlbnQgdG90YWwiKSYmKGY9YS5mb3JtYXRQZXJjZW50KHAuc3VtUiksdyYmKGYrPSIgb2YgdG90YWwiKSxnLnB1c2goZikpfXJldHVybiBnLmpvaW4oIjxicj4iKX0oZSxyLG4saSk6Zy5nZXRWYWx1ZShzLnRleHQscik7cmV0dXJuIGcuY29lcmNlU3RyaW5nKHksbyl9KEwsbixpLFQsQSk7dz1mdW5jdGlvbih0LGUpe3ZhciByPWcuZ2V0VmFsdWUodC50ZXh0cG9zaXRpb24sZSk7cmV0dXJuIGcuY29lcmNlRW51bWVyYXRlZCh4LHIpfShQLGkpO3ZhciBEPSJzdGFjayI9PT1tLm1vZGV8fCJyZWxhdGl2ZSI9PT1tLm1vZGUsUj1uW2ldLEY9IUR8fFIuX291dG1vc3Q7aWYoIU98fCJub25lIj09PXd8fChSLmlzQmxhbmt8fHM9PT1jfHxmPT09cCkmJigiYXV0byI9PT13fHwiaW5zaWRlIj09PXcpKXJldHVybiB2b2lkIHIuc2VsZWN0KCJ0ZXh0IikucmVtb3ZlKCk7dmFyIEI9TC5mb250LE49ZC5nZXRCYXJDb2xvcihuW2ldLFApLGo9ZC5nZXRJbnNpZGVUZXh0Rm9udChQLGksQixOKSxVPWQuZ2V0T3V0c2lkZVRleHRGb250KFAsaSxCKSxWPXIuZGF0dW0oKTt6PyJsb2ciPT09VC50eXBlJiZWLnMwPD0wJiYocz1ULnJhbmdlWzBdPFQucmFuZ2VbMV0/MDpULl9sZW5ndGgpOiJsb2ciPT09QS50eXBlJiZWLnMwPD0wJiYoZj1BLnJhbmdlWzBdPEEucmFuZ2VbMV0/QS5fbGVuZ3RoOjApO3ZhciBxLEgsRyxZLFcsWD1NYXRoLmFicyhjLXMpLTIqXyxaPU1hdGguYWJzKHAtZiktMipfOyJvdXRzaWRlIj09PXcmJihGfHxSLmhhc0J8fCh3PSJpbnNpZGUiKSk7aWYoImF1dG8iPT09dylpZihGKXt3PSJpbnNpZGUiLFc9YS5lbnN1cmVVbmlmb3JtRm9udFNpemUodCxqKSxxPUkocixPLFcpLEg9bC5iQm94KHEubm9kZSgpKSxHPUgud2lkdGgsWT1ILmhlaWdodDt2YXIgSj1HPD1YJiZZPD1aLEs9Rzw9WiYmWTw9WCxRPXo/WD49RyooWi9ZKTpaPj1ZKihYL0cpO0c+MCYmWT4wJiYoSnx8S3x8USk/dz0iaW5zaWRlIjoodz0ib3V0c2lkZSIscS5yZW1vdmUoKSxxPW51bGwpfWVsc2Ugdz0iaW5zaWRlIjtpZighcSl7Vz1hLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LCJvdXRzaWRlIj09PXc/VTpqKTt2YXIgJD0ocT1JKHIsTyxXKSkuYXR0cigidHJhbnNmb3JtIik7aWYocS5hdHRyKCJ0cmFuc2Zvcm0iLCIiKSxIPWwuYkJveChxLm5vZGUoKSksRz1ILndpZHRoLFk9SC5oZWlnaHQscS5hdHRyKCJ0cmFuc2Zvcm0iLCQpLEc8PTB8fFk8PTApcmV0dXJuIHZvaWQgcS5yZW1vdmUoKX12YXIgdHQsZXQscnQ9UC50ZXh0YW5nbGU7Im91dHNpZGUiPT09dz8oZXQ9ImJvdGgiPT09UC5jb25zdHJhaW50ZXh0fHwib3V0c2lkZSI9PT1QLmNvbnN0cmFpbnRleHQsdHQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHM9ISFhLmlzSG9yaXpvbnRhbCxsPSEhYS5jb25zdHJhaW5lZCxjPWEuYW5nbGV8fDAsdT1pLndpZHRoLGY9aS5oZWlnaHQsaD1NYXRoLmFicyhlLXQpLHA9TWF0aC5hYnMobi1yKTtvPXM/cD4yKl8/XzowOmg+MipfP186MDt2YXIgZD0xO2wmJihkPXM/TWF0aC5taW4oMSxwL2YpOk1hdGgubWluKDEsaC91KSk7dmFyIGc9UyhjKSxtPUUoaSxnKSx2PShzP20ueDptLnkpLzIseT0oaS5sZWZ0K2kucmlnaHQpLzIseD0oaS50b3AraS5ib3R0b20pLzIsYj0odCtlKS8yLHc9KHIrbikvMixUPTAsTT0wLEE9cz9rKGUsdCk6ayhyLG4pO3M/KGI9ZS1BKm8sVD1BKnYpOih3PW4rQSpvLE09LUEqdik7cmV0dXJue3RleHRYOnksdGV4dFk6eCx0YXJnZXRYOmIsdGFyZ2V0WTp3LGFuY2hvclg6VCxhbmNob3JZOk0sc2NhbGU6ZCxyb3RhdGU6Z319KHMsYyxmLHAsSCx7aXNIb3Jpem9udGFsOnosY29uc3RyYWluZWQ6ZXQsYW5nbGU6cnR9KSk6KGV0PSJib3RoIj09PVAuY29uc3RyYWludGV4dHx8Imluc2lkZSI9PT1QLmNvbnN0cmFpbnRleHQsdHQ9QyhzLGMsZixwLEgse2lzSG9yaXpvbnRhbDp6LGNvbnN0cmFpbmVkOmV0LGFuZ2xlOnJ0LGFuY2hvcjpQLmluc2lkZXRleHRhbmNob3J9KSk7dHQuZm9udFNpemU9Vy5zaXplLGgoUC50eXBlLHR0LEwpLFIudHJhbnNmb3JtPXR0LE0ocSxMLG0sdikuYXR0cigidHJhbnNmb3JtIixhLmdldFRleHRUcmFuc2Zvcm0odHQpKX0odCxlLFAscixwLEIsTixqLFUsbSx2KSxlLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludChjLFAuc2VsZWN0KCJ0ZXh0IiksdyxMLGYueGNhbGVuZGFyLGYueWNhbGVuZGFyKX0pKTt2YXIgaj0hMT09PWYuY2xpcG9uYXhpcztsLnNldENsaXBVcmwoYyxqP251bGw6ZS5sYXllckNsaXBJZCx0KX0pKTtjLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwicGxvdCIpKHQsUCxlLG0pfSx0b01vdmVJbnNpZGVCYXI6Q319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2NSwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2NzksIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi9hdHRyaWJ1dGVzIjo5MjEsIi4vY29uc3RhbnRzIjo5MjMsIi4vaGVscGVycyI6OTI3LCIuL3N0eWxlIjo5MzUsIi4vdW5pZm9ybV90ZXh0Ijo5MzcsZDM6MTY5LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sOTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt2YXIgYT1lLmMycChuP3QuczA6dC5wMCwhMCksbz1lLmMycChuP3QuczE6dC5wMSwhMCkscz1yLmMycChuP3QucDA6dC5zMCwhMCksbD1yLmMycChuP3QucDE6dC5zMSwhMCk7cmV0dXJuIGk/WyhhK28pLzIsKHMrbCkvMl06bj9bbywocytsKS8yXTpbKGErbykvMixsXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQuY2QsYT10LnhheGlzLG89dC55YXhpcyxzPWlbMF0udHJhY2UsbD0iZnVubmVsIj09PXMudHlwZSxjPSJoIj09PXMub3JpZW50YXRpb24sdT1bXTtpZighMT09PWUpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgZj1pW3JdLGg9ImN0ImluIGY/Zi5jdDpuKGYsYSxvLGMsbCk7ZS5jb250YWlucyhoLCExLHIsdCk/KHUucHVzaCh7cG9pbnROdW1iZXI6cix4OmEuYzJkKGYueCkseTpvLmMyZChmLnkpfSksZi5zZWxlY3RlZD0xKTpmLnNlbGVjdGVkPTB9cmV0dXJuIHV9fSx7fV0sOTM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1hO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmRpc3RpbmN0VmFscyxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gYSh0LGUpe3RoaXMudHJhY2VzPXQsdGhpcy5zZXBOZWdWYWw9ZS5zZXBOZWdWYWwsdGhpcy5vdmVybGFwTm9NZXJnZT1lLm92ZXJsYXBOb01lcmdlO2Zvcih2YXIgcj0xLzAsYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe2Zvcih2YXIgcz10W29dLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXTtjLnAhPT1pJiZhLnB1c2goYy5wKX1zWzBdJiZzWzBdLndpZHRoMSYmKHI9TWF0aC5taW4oc1swXS53aWR0aDEscikpfXRoaXMucG9zaXRpb25zPWE7dmFyIHU9bihhLHt1bml0TWluRGlmZjplLnVuaXRNaW5EaWZmfSk7dGhpcy5kaXN0aW5jdFBvc2l0aW9ucz11LnZhbHMsMT09PXUudmFscy5sZW5ndGgmJnIhPT0xLzA/dGhpcy5taW5EaWZmPXI6dGhpcy5taW5EaWZmPU1hdGgubWluKHUubWluRGlmZixyKSx0aGlzLmJpbldpZHRoPXRoaXMubWluRGlmZix0aGlzLmJpbnM9e319YS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nZXRMYWJlbCh0LGUpLG49dGhpcy5iaW5zW3JdfHwwO3JldHVybiB0aGlzLmJpbnNbcl09bitlLG59LGEucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKTtyZXR1cm4gdGhpcy5iaW5zW3JdfHwwfSxhLnByb3RvdHlwZS5nZXRMYWJlbD1mdW5jdGlvbih0LGUpe3JldHVybihlPDAmJnRoaXMuc2VwTmVnVmFsPyJ2IjoiXiIpKyh0aGlzLm92ZXJsYXBOb01lcmdlP3Q6TWF0aC5yb3VuZCh0L3RoaXMuYmluV2lkdGgpKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi8uLi9saWIiOjc3OH1dLDkzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQsYz10KCIuL2F0dHJpYnV0ZXMiKSx1PWMudGV4dGZvbnQsZj1jLmluc2lkZXRleHRmb250LGg9Yy5vdXRzaWRldGV4dGZvbnQscD10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBkKHQsZSxyKXthLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgiKSxlLHIpLGcodCxlLHIpfWZ1bmN0aW9uIGcodCxlLHIpe3Quc2VsZWN0QWxsKCJ0ZXh0IikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcykscz1vLmVuc3VyZVVuaWZvcm1Gb250U2l6ZShyLG0oaSx0LGUscikpO2EuZm9udChpLHMpfSkpfWZ1bmN0aW9uIG0odCxlLHIsbil7dmFyIGk9bi5fZnVsbExheW91dC5mb250LGE9ci50ZXh0Zm9udDtpZih0LmNsYXNzZWQoImJhcnRleHQtaW5zaWRlIikpe3ZhciBvPV8oZSxyKTthPXkocixlLmksaSxvKX1lbHNlIHQuY2xhc3NlZCgiYmFydGV4dC1vdXRzaWRlIikmJihhPXgocixlLmksaSkpO3JldHVybiBhfWZ1bmN0aW9uIHYodCxlLHIpe3JldHVybiBiKHUsdC50ZXh0Zm9udCxlLHIpfWZ1bmN0aW9uIHkodCxlLHIsbil7dmFyIGE9dih0LGUscik7cmV0dXJuKHZvaWQgMD09PXQuX2lucHV0LnRleHRmb250fHx2b2lkIDA9PT10Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcnx8QXJyYXkuaXNBcnJheSh0LnRleHRmb250LmNvbG9yKSYmdm9pZCAwPT09dC50ZXh0Zm9udC5jb2xvcltlXSkmJihhPXtjb2xvcjppLmNvbnRyYXN0KG4pLGZhbWlseTphLmZhbWlseSxzaXplOmEuc2l6ZX0pLGIoZix0Lmluc2lkZXRleHRmb250LGUsYSl9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49dih0LGUscik7cmV0dXJuIGIoaCx0Lm91dHNpZGV0ZXh0Zm9udCxlLG4pfWZ1bmN0aW9uIGIodCxlLHIsbil7ZT1lfHx7fTt2YXIgaT1wLmdldFZhbHVlKGUuZmFtaWx5LHIpLGE9cC5nZXRWYWx1ZShlLnNpemUsciksbz1wLmdldFZhbHVlKGUuY29sb3Iscik7cmV0dXJue2ZhbWlseTpwLmNvZXJjZVN0cmluZyh0LmZhbWlseSxpLG4uZmFtaWx5KSxzaXplOnAuY29lcmNlTnVtYmVyKHQuc2l6ZSxhLG4uc2l6ZSksY29sb3I6cC5jb2VyY2VDb2xvcih0LmNvbG9yLG8sbi5jb2xvcil9fWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4id2F0ZXJmYWxsIj09PWUudHlwZT9lW3QuZGlyXS5tYXJrZXIuY29sb3I6dC5tY3x8ZS5tYXJrZXIuY29sb3J9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcuYmFybGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UiKTtsKHQsZSwiYmFyIik7dmFyIHI9ZS5zaXplKCksaT10Ll9mdWxsTGF5b3V0O2Uuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLmVhY2goKGZ1bmN0aW9uKHQpeygic3RhY2siPT09aS5iYXJtb2RlJiZyPjF8fDA9PT1pLmJhcmdhcCYmMD09PWkuYmFyZ3JvdXBnYXAmJiF0WzBdLnRyYWNlLm1hcmtlci5saW5lLndpZHRoKSYmbi5zZWxlY3QodGhpcykuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpfSkpLGUuc2VsZWN0QWxsKCJnLnBvaW50cyIpLmVhY2goKGZ1bmN0aW9uKGUpe2Qobi5zZWxlY3QodGhpcyksZVswXS50cmFjZSx0KX0pKSxzLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3R5bGUiKShlKX0sc3R5bGVUZXh0UG9pbnRzOmcsc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUscil7dmFyIGk9ZVswXS50cmFjZTtpLnNlbGVjdGVkcG9pbnRzP2Z1bmN0aW9uKHQsZSxyKXthLnNlbGVjdGVkUG9pbnRTdHlsZSh0LnNlbGVjdEFsbCgicGF0aCIpLGUpLGZ1bmN0aW9uKHQsZSxyKXt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpLHM9bi5zZWxlY3QodGhpcyk7aWYodC5zZWxlY3RlZCl7aT1vLmVuc3VyZVVuaWZvcm1Gb250U2l6ZShyLG0ocyx0LGUscikpO3ZhciBsPWUuc2VsZWN0ZWQudGV4dGZvbnQmJmUuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3I7bCYmKGkuY29sb3I9bCksYS5mb250KHMsaSl9ZWxzZSBhLnNlbGVjdGVkVGV4dFN0eWxlKHMsZSl9KSl9KHQuc2VsZWN0QWxsKCJ0ZXh0IiksZSxyKX0ocixpLHQpOihkKHIsaSx0KSxzLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3R5bGUiKShyKSl9LGdldEluc2lkZVRleHRGb250OnksZ2V0T3V0c2lkZVRleHRGb250OngsZ2V0QmFyQ29sb3I6XyxyZXNpemVUZXh0Omx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuL2F0dHJpYnV0ZXMiOjkyMSwiLi9oZWxwZXJzIjo5MjcsIi4vdW5pZm9ybV90ZXh0Ijo5MzcsZDM6MTY5fV0sOTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe3IoIm1hcmtlci5jb2xvciIsbyksaSh0LCJtYXJrZXIiKSYmYSh0LGUscyxyLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUuY29sb3IiLG4uZGVmYXVsdExpbmUpLGkodCwibWFya2VyLmxpbmUiKSYmYSh0LGUscyxyLHtwcmVmaXg6Im1hcmtlci5saW5lLiIsY0xldHRlcjoiYyJ9KSxyKCJtYXJrZXIubGluZS53aWR0aCIpLHIoIm1hcmtlci5vcGFjaXR5Iikscigic2VsZWN0ZWQubWFya2VyLmNvbG9yIikscigidW5zZWxlY3RlZC5tYXJrZXIuY29sb3IiKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY1MywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1NH1dLDkzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4iXyIrdCsiVGV4dF9taW5zaXplIn1lLmV4cG9ydHM9e3JlY29yZE1pblRleHRTaXplOmZ1bmN0aW9uKHQsZSxyKXtpZihyLnVuaWZvcm10ZXh0Lm1vZGUpe3ZhciBuPWEodCksaT1yLnVuaWZvcm10ZXh0Lm1pbnNpemUsbz1lLnNjYWxlKmUuZm9udFNpemU7ZS5oaWRlPW88aSxyW25dPXJbbl18fDEvMCxlLmhpZGV8fChyW25dPU1hdGgubWluKHJbbl0sTWF0aC5tYXgobyxpKSkpfX0sY2xlYXJNaW5UZXh0U2l6ZTpmdW5jdGlvbih0LGUpe2VbYSh0KV09dm9pZCAwfSxyZXNpemVUZXh0OmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89YVsiXyIrcisiVGV4dF9taW5zaXplIl07aWYobyl7dmFyIHMsbD0iaGlkZSI9PT1hLnVuaWZvcm10ZXh0Lm1vZGU7c3dpdGNoKHIpe2Nhc2UiZnVubmVsYXJlYSI6Y2FzZSJwaWUiOmNhc2Uic3VuYnVyc3QiOnM9Imcuc2xpY2UiO2JyZWFrO2Nhc2UidHJlZW1hcCI6cz0iZy5zbGljZSwgZy5wYXRoYmFyIjticmVhaztkZWZhdWx0OnM9ImcucG9pbnRzID4gZy5wb2ludCJ9ZS5zZWxlY3RBbGwocykuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC50cmFuc2Zvcm07ZSYmKGUuc2NhbGU9bCYmZS5oaWRlPzA6by9lLmZvbnRTaXplLG4uc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsaS5nZXRUZXh0VHJhbnNmb3JtKGUpKSl9KSl9fX19LHsiLi4vLi4vbGliIjo3NzgsZDM6MTY5fV0sOTM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIiksbz10KCIuLi9iYXIvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17cjphLnIsdGhldGE6YS50aGV0YSxyMDphLnIwLGRyOmEuZHIsdGhldGEwOmEudGhldGEwLGR0aGV0YTphLmR0aGV0YSx0aGV0YXVuaXQ6YS50aGV0YXVuaXQsYmFzZTppKHt9LG8uYmFzZSx7fSksb2Zmc2V0Omkoe30sby5vZmZzZXQse30pLHdpZHRoOmkoe30sby53aWR0aCx7fSksdGV4dDppKHt9LG8udGV4dCx7fSksaG92ZXJ0ZXh0Omkoe30sby5ob3ZlcnRleHQse30pLG1hcmtlcjpvLm1hcmtlcixob3ZlcmluZm86YS5ob3ZlcmluZm8saG92ZXJ0ZW1wbGF0ZTpuKCksc2VsZWN0ZWQ6by5zZWxlY3RlZCx1bnNlbGVjdGVkOm8udW5zZWxlY3RlZH19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDYsIi4uL2Jhci9hdHRyaWJ1dGVzIjo5MjEsIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIjoxMjYxfV0sOTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbz10KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLnNldEdyb3VwUG9zaXRpb25zLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzLGM9dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxvPWUuc3VicGxvdCxsPXJbb10ucmFkaWFsYXhpcyxjPXJbb10uYW5ndWxhcmF4aXMsdT1sLm1ha2VDYWxjZGF0YShlLCJyIiksZj1jLm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLGg9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9dSxnPWYsbT0wO208aDttKyspcFttXT17cDpnW21dLHM6ZFttXX07ZnVuY3Rpb24gdih0KXt2YXIgcj1lW3RdO3ZvaWQgMCE9PXImJihlWyJfIit0XT1BcnJheS5pc0FycmF5KHIpP2MubWFrZUNhbGNkYXRhKGUsdCk6Yy5kMmMocixlLnRoZXRhdW5pdCkpfXJldHVybiJsaW5lYXIiPT09Yy50eXBlJiYodigid2lkdGgiKSx2KCJvZmZzZXQiKSksbihlLCJtYXJrZXIiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIiLGNMZXR0ZXI6ImMifSksbihlLCJtYXJrZXIubGluZSIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyLmxpbmUiLGNMZXR0ZXI6ImMifSksYShwLGUpLHMocCxlKSxwfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQuY2FsY2RhdGEsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sdT1zWzBdLnRyYWNlOyEwPT09dS52aXNpYmxlJiZsKHUsImJhciIpJiZ1LnN1YnBsb3Q9PT1yJiZpLnB1c2gocyl9dmFyIGY9Yyh7fSxlLnJhZGlhbGF4aXMse19pZDoieCJ9KSxoPWUuYW5ndWxhcmF4aXM7byh0LGgsZixpLHttb2RlOmUuYmFybW9kZSxub3JtOmUuYmFybm9ybSxnYXA6ZS5iYXJnYXAsZ3JvdXBnYXA6ZS5iYXJncm91cGdhcH0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY1MSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1NCwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiOjkyMCwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjkyNCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE4OX1dLDk0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyIpLmhhbmRsZVJUaGV0YURlZmF1bHRzLGE9dCgiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLHMsbCk/KGwoInRoZXRhdW5pdCIpLGwoImJhc2UiKSxsKCJvZmZzZXQiKSxsKCJ3aWR0aCIpLGwoInRleHQiKSxsKCJob3ZlcnRleHQiKSxsKCJob3ZlcnRlbXBsYXRlIiksYSh0LGUsbCxyLHMpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGwpKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiOjkzNiwiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIjoxMjYzLCIuL2F0dHJpYnV0ZXMiOjkzOH1dLDk0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2Jhci9ob3ZlciIpLmdldFRyYWNlQ29sb3Isbz1pLmZpbGxUZXh0LHM9dCgiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIikubWFrZUhvdmVyUG9pbnRUZXh0LGw9dCgiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyIpLmlzUHRJbnNpZGVQb2x5Z29uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9dC5jZCx1PWNbMF0udHJhY2UsZj10LnN1YnBsb3QsaD1mLnJhZGlhbEF4aXMscD1mLmFuZ3VsYXJBeGlzLGQ9Zi52YW5nbGVzLGc9ZD9sOmkuaXNQdEluc2lkZVNlY3RvcixtPXQubWF4SG92ZXJEaXN0YW5jZSx2PXAuX3BlcmlvZHx8MipNYXRoLlBJLHk9TWF0aC5hYnMoaC5nMnAoTWF0aC5zcXJ0KGUqZStyKnIpKSkseD1NYXRoLmF0YW4yKHIsZSk7aC5yYW5nZVswXT5oLnJhbmdlWzFdJiYoeCs9TWF0aC5QSSk7aWYobi5nZXRDbG9zZXN0KGMsKGZ1bmN0aW9uKHQpe3JldHVybiBnKHkseCxbdC5ycDAsdC5ycDFdLFt0LnRoZXRhZzAsdC50aGV0YWcxXSxkKT9tK01hdGgubWluKDEsTWF0aC5hYnModC50aGV0YWcxLXQudGhldGFnMCkvdiktMSsodC5ycDEteSkvKHQucnAxLXQucnAwKS0xOjEvMH0pLHQpLCExIT09dC5pbmRleCl7dmFyIGI9Y1t0LmluZGV4XTt0LngwPXQueDE9Yi5jdFswXSx0LnkwPXQueTE9Yi5jdFsxXTt2YXIgXz1pLmV4dGVuZEZsYXQoe30sYix7cjpiLnMsdGhldGE6Yi5wfSk7cmV0dXJuIG8oYix1LHQpLHMoXyx1LGYsdCksdC5ob3ZlcnRlbXBsYXRlPXUuaG92ZXJ0ZW1wbGF0ZSx0LmNvbG9yPWEodSxiKSx0LnhMYWJlbFZhbD10LnlMYWJlbFZhbD12b2lkIDAsYi5zPDAmJih0LmlkZWFsQWxpZ249ImxlZnQiKSxbdF19fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2ODMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIjo4OTMsIi4uL2Jhci9ob3ZlciI6OTI4LCIuLi9zY2F0dGVycG9sYXIvaG92ZXIiOjEyNjV9XSw5NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiYmFycG9sYXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbInBvbGFyIiwiYmFyIiwic2hvd0xlZ2VuZCJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLGNyb3NzVHJhY2VDYWxjOnQoIi4vY2FsYyIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi4vc2NhdHRlcnBvbGFyL2Zvcm1hdF9sYWJlbHMiKSxzdHlsZTp0KCIuLi9iYXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLHNlbGVjdFBvaW50czp0KCIuLi9iYXIvc2VsZWN0IiksbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvcG9sYXIiOjg5NCwiLi4vYmFyL3NlbGVjdCI6OTMzLCIuLi9iYXIvc3R5bGUiOjkzNSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDUsIi4uL3NjYXR0ZXJwb2xhci9mb3JtYXRfbGFiZWxzIjoxMjY0LCIuL2F0dHJpYnV0ZXMiOjkzOCwiLi9jYWxjIjo5MzksIi4vZGVmYXVsdHMiOjk0MCwiLi9ob3ZlciI6OTQxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5NDMsIi4vbGF5b3V0X2RlZmF1bHRzIjo5NDQsIi4vcGxvdCI6OTQ1fV0sOTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJvdmVybGF5Il0sZGZsdDoic3RhY2siLGVkaXRUeXBlOiJjYWxjIn0sYmFyZ2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6LjEsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw5NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvPXt9O2Z1bmN0aW9uIHMocixvKXtyZXR1cm4gbi5jb2VyY2UodFthXXx8e30sZVthXSxpLHIsbyl9Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF07ImJhcnBvbGFyIj09PWMudHlwZSYmITA9PT1jLnZpc2libGUmJihvW2E9Yy5zdWJwbG90XXx8KHMoImJhcm1vZGUiKSxzKCJiYXJnYXAiKSxvW2FdPTEpKX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5NDN9XSw5NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHM9dCgiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9ZS54YXhpcyxjPWUueWF4aXMsdT1lLnJhZGlhbEF4aXMsZj1lLmFuZ3VsYXJBeGlzLGg9ZnVuY3Rpb24odCl7dmFyIGU9dC5jeHgscj10LmN5eTtpZih0LnZhbmdsZXMpcmV0dXJuIGZ1bmN0aW9uKG4saSxvLGwpe3ZhciBjLHU7YS5hbmdsZURlbHRhKG8sbCk+MD8oYz1vLHU9bCk6KGM9bCx1PW8pO3ZhciBmPVtzLmZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXMoYyx0LnZhbmdsZXMpWzBdLChjK3UpLzIscy5maW5kRW5jbG9zaW5nVmVydGV4QW5nbGVzKHUsdC52YW5nbGVzKVsxXV07cmV0dXJuIHMucGF0aFBvbHlnb25Bbm51bHVzKG4saSxjLHUsZixlLHIpfTtyZXR1cm4gZnVuY3Rpb24odCxuLGksbyl7cmV0dXJuIGEucGF0aEFubnVsdXModCxuLGksbyxlLHIpfX0oZSkscD1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCJnLmJhcmxheWVyIik7YS5tYWtlVHJhY2VHcm91cHMocCxyLCJ0cmFjZSBiYXJzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxzPWEuZW5zdXJlU2luZ2xlKHIsImciLCJwb2ludHMiKS5zZWxlY3RBbGwoImcucG9pbnQiKS5kYXRhKGEuaWRlbnRpdHkpO3MuZW50ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMikuY2xhc3NlZCgicG9pbnQiLCEwKSxzLmV4aXQoKS5yZW1vdmUoKSxzLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLHI9bi5zZWxlY3QodGhpcyksbz10LnJwMD11LmMycCh0LnMwKSxzPXQucnAxPXUuYzJwKHQuczEpLHA9dC50aGV0YWcwPWYuYzJnKHQucDApLGQ9dC50aGV0YWcxPWYuYzJnKHQucDEpO2lmKGkobykmJmkocykmJmkocCkmJmkoZCkmJm8hPT1zJiZwIT09ZCl7dmFyIGc9dS5jMmcodC5zMSksbT0ocCtkKS8yO3QuY3Q9W2wuYzJwKGcqTWF0aC5jb3MobSkpLGMuYzJwKGcqTWF0aC5zaW4obSkpXSxlPWgobyxzLHAsZCl9ZWxzZSBlPSJNMCwwWiI7YS5lbnN1cmVTaW5nbGUociwicGF0aCIpLmF0dHIoImQiLGUpfSkpLG8uc2V0Q2xpcFVybChyLGUuX2hhc0NsaXBPbkF4aXNGYWxzZT9lLmNsaXBJZHMuZm9yVHJhY2VzOm51bGwsdCl9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjY1LCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyI6ODkzLGQzOjE2OSwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDk0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPW4ubWFya2VyLGM9bC5saW5lO2UuZXhwb3J0cz17eTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkeDp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0seHBlcmlvZDpuLnhwZXJpb2QseXBlcmlvZDpuLnlwZXJpb2QseHBlcmlvZDA6bi54cGVyaW9kMCx5cGVyaW9kMDpuLnlwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6bi54cGVyaW9kYWxpZ25tZW50LHlwZXJpb2RhbGlnbm1lbnQ6bi55cGVyaW9kYWxpZ25tZW50LG5hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxxMTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxtZWRpYW46e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0scTM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sbG93ZXJmZW5jZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx1cHBlcmZlbmNlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG5vdGNoZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjIn0sbm90Y2h3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6LjUsZGZsdDouMjUsZWRpdFR5cGU6ImNhbGMifSxub3RjaHNwYW46e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYm94cG9pbnRzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJvdXRsaWVycyIsInN1c3BlY3RlZG91dGxpZXJzIiwhMV0sZWRpdFR5cGU6ImNhbGMifSxqaXR0ZXI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSxwb2ludHBvczp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjIsZWRpdFR5cGU6ImNhbGMifSxib3htZWFuOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCJzZCIsITFdLGVkaXRUeXBlOiJjYWxjIn0sbWVhbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzZDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHF1YXJ0aWxlbWV0aG9kOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJleGNsdXNpdmUiLCJpbmNsdXNpdmUiXSxkZmx0OiJsaW5lYXIiLGVkaXRUeXBlOiJjYWxjIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOntvdXRsaWVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsIDAsIDAsIDApIixlZGl0VHlwZToic3R5bGUifSxzeW1ib2w6cyh7fSxsLnN5bWJvbCx7YXJyYXlPazohMSxlZGl0VHlwZToicGxvdCJ9KSxvcGFjaXR5OnMoe30sbC5vcGFjaXR5LHthcnJheU9rOiExLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSksc2l6ZTpzKHt9LGwuc2l6ZSx7YXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9KSxjb2xvcjpzKHt9LGwuY29sb3Ise2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLGxpbmU6e2NvbG9yOnMoe30sYy5jb2xvcix7YXJyYXlPazohMSxkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InN0eWxlIn0pLHdpZHRoOnMoe30sYy53aWR0aCx7YXJyYXlPazohMSxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0pLG91dGxpZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LG91dGxpZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InBsb3QifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LGZpbGxjb2xvcjpuLmZpbGxjb2xvcix3aGlza2Vyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZToiY2FsYyJ9LG9mZnNldGdyb3VwOmkub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6aS5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDp7bWFya2VyOm4uc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOiJzdHlsZSJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjpuLnVuc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOiJzdHlsZSJ9LHRleHQ6cyh7fSxuLnRleHQse30pLGhvdmVydGV4dDpzKHt9LG4uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOm8oe30pLGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImJveGVzIiwicG9pbnRzIl0sZGZsdDoiYm94ZXMrcG9pbnRzIixlZGl0VHlwZToic3R5bGUifX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2NDIsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6OTA2LCIuLi9iYXIvYXR0cmlidXRlcyI6OTIxLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExODd9XSw5NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbD1vLl87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx5LHgsYixfLHcsVD10Ll9mdWxsTGF5b3V0LGs9aS5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLE09aS5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLEE9W10sUz0idmlvbGluIj09PWUudHlwZT8iX251bVZpb2xpbnMiOiJfbnVtQm94ZXMiOyJoIj09PWUub3JpZW50YXRpb24/KHk9ayx4PSJ4IixiPU0sXz0ieSIsdz0hIWUueXBlcmlvZGFsaWdubWVudCk6KHk9TSx4PSJ5IixiPWssXz0ieCIsdz0hIWUueHBlcmlvZGFsaWdubWVudCk7dmFyIEUsQyxMLEksUCx6LE89ZnVuY3Rpb24odCxlLHIsaSl7dmFyIHMsbD1lKyIwImluIHQsYz0iZCIrZSBpbiB0O2lmKGUgaW4gdHx8bCYmYyl7dmFyIHU9ci5tYWtlQ2FsY2RhdGEodCxlKTtyZXR1cm5bYSh0LHIsZSx1KSx1XX1zPWw/dFtlKyIwIl06Im5hbWUiaW4gdCYmKCJjYXRlZ29yeSI9PT1yLnR5cGV8fG4odC5uYW1lKSYmLTEhPT1bImxpbmVhciIsImxvZyJdLmluZGV4T2Yoci50eXBlKXx8by5pc0RhdGVUaW1lKHQubmFtZSkmJiJkYXRlIj09PXIudHlwZSk/dC5uYW1lOmk7Zm9yKHZhciBmPSJtdWx0aWNhdGVnb3J5Ij09PXIudHlwZT9yLnIyY19qdXN0X2luZGljZXMocyk6ci5kMmMocywwLHRbZSsiY2FsZW5kYXIiXSksaD10Ll9sZW5ndGgscD1uZXcgQXJyYXkoaCksZD0wO2Q8aDtkKyspcFtkXT1mO3JldHVybltwXX0oZSxfLGIsVFtTXSksRD1PWzBdLFI9T1sxXSxGPW8uZGlzdGluY3RWYWxzKEQpLEI9Ri52YWxzLE49Ri5taW5EaWZmLzIsaj0iYWxsIj09PShlLmJveHBvaW50c3x8ZS5wb2ludHMpP28uaWRlbnRpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHQudjxFLmxmfHx0LnY+RS51Zn07aWYoZS5faGFzUHJlQ29tcFN0YXRzKXt2YXIgVT1lW3hdLFY9ZnVuY3Rpb24odCl7cmV0dXJuIHkuZDJjKChlW3RdfHxbXSlbcl0pfSxxPTEvMCxIPS0xLzA7Zm9yKHI9MDtyPGUuX2xlbmd0aDtyKyspe3ZhciBHPURbcl07aWYobihHKSl7aWYoKEU9e30pLnBvcz1FW19dPUcsdyYmUiYmKEUub3JpZ19wPVJbcl0pLEUucTE9VigicTEiKSxFLm1lZD1WKCJtZWRpYW4iKSxFLnEzPVYoInEzIiksQz1bXSxVJiZvLmlzQXJyYXlPclR5cGVkQXJyYXkoVVtyXSkpZm9yKGM9MDtjPFVbcl0ubGVuZ3RoO2MrKykoej15LmQyYyhVW3JdW2NdKSkhPT1zJiYodShQPXt2OnosaTpbcixjXX0sZSxbcixjXSksQy5wdXNoKFApKTtpZihFLnB0cz1DLnNvcnQoZiksST0oTD1FW3hdPUMubWFwKGgpKS5sZW5ndGgsRS5tZWQhPT1zJiZFLnExIT09cyYmRS5xMyE9PXMmJkUubWVkPj1FLnExJiZFLnEzPj1FLm1lZCl7dmFyIFk9VigibG93ZXJmZW5jZSIpO0UubGY9WSE9PXMmJlk8PUUucTE/WTpwKEUsTCxJKTt2YXIgVz1WKCJ1cHBlcmZlbmNlIik7RS51Zj1XIT09cyYmVz49RS5xMz9XOmQoRSxMLEkpO3ZhciBYPVYoIm1lYW4iKTtFLm1lYW49WCE9PXM/WDpJP28ubWVhbihMLEkpOihFLnExK0UucTMpLzI7dmFyIFo9Vigic2QiKTtFLnNkPVghPT1zJiZaPj0wP1o6ST9vLnN0ZGV2KEwsSSxFLm1lYW4pOkUucTMtRS5xMSxFLmxvPWcoRSksRS51bz1tKEUpO3ZhciBKPVYoIm5vdGNoc3BhbiIpO0o9SiE9PXMmJko+MD9KOnYoRSxJKSxFLmxuPUUubWVkLUosRS51bj1FLm1lZCtKO3ZhciBLPUUubGYsUT1FLnVmO2UuYm94cG9pbnRzJiZMLmxlbmd0aCYmKEs9TWF0aC5taW4oSyxMWzBdKSxRPU1hdGgubWF4KFEsTFtJLTFdKSksZS5ub3RjaGVkJiYoSz1NYXRoLm1pbihLLEUubG4pLFE9TWF0aC5tYXgoUSxFLnVuKSksRS5taW49SyxFLm1heD1RfWVsc2V7dmFyICQ7by53YXJuKFsiSW52YWxpZCBpbnB1dCAtIG1ha2Ugc3VyZSB0aGF0IHExIDw9IG1lZGlhbiA8PSBxMyIsInExID0gIitFLnExLCJtZWRpYW4gPSAiK0UubWVkLCJxMyA9ICIrRS5xM10uam9pbigiXG4iKSksJD1FLm1lZCE9PXM/RS5tZWQ6RS5xMSE9PXM/RS5xMyE9PXM/KEUucTErRS5xMykvMjpFLnExOkUucTMhPT1zP0UucTM6MCxFLm1lZD0kLEUucTE9RS5xMz0kLEUubGY9RS51Zj0kLEUubWVhbj1FLnNkPSQsRS5sbj1FLnVuPSQsRS5taW49RS5tYXg9JH1xPU1hdGgubWluKHEsRS5taW4pLEg9TWF0aC5tYXgoSCxFLm1heCksRS5wdHMyPUMuZmlsdGVyKGopLEEucHVzaChFKX19ZS5fZXh0cmVtZXNbeS5faWRdPWkuZmluZEV4dHJlbWVzKHksW3EsSF0se3BhZGRlZDohMH0pfWVsc2V7dmFyIHR0PXkubWFrZUNhbGNkYXRhKGUseCksZXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkocisxKSxpPTA7aTxyO2krKyluW2ldPXRbaV0tZTtyZXR1cm4gbltyXT10W3ItMV0rZSxufShCLE4pLHJ0PUIubGVuZ3RoLG50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1bXTtyZXR1cm4gZX0ocnQpO2ZvcihyPTA7cjxlLl9sZW5ndGg7cisrKWlmKHo9dHRbcl0sbih6KSl7dmFyIGl0PW8uZmluZEJpbihEW3JdLGV0KTtpdD49MCYmaXQ8cnQmJih1KFA9e3Y6eixpOnJ9LGUsciksbnRbaXRdLnB1c2goUCkpfXZhciBhdD0xLzAsb3Q9LTEvMCxzdD1lLnF1YXJ0aWxlbWV0aG9kLGx0PSJleGNsdXNpdmUiPT09c3QsY3Q9ImluY2x1c2l2ZSI9PT1zdDtmb3Iocj0wO3I8cnQ7cisrKWlmKG50W3JdLmxlbmd0aD4wKXt2YXIgdXQsZnQ7aWYoKEU9e30pLnBvcz1FW19dPUJbcl0sQz1FLnB0cz1udFtyXS5zb3J0KGYpLEk9KEw9RVt4XT1DLm1hcChoKSkubGVuZ3RoLEUubWluPUxbMF0sRS5tYXg9TFtJLTFdLEUubWVhbj1vLm1lYW4oTCxJKSxFLnNkPW8uc3RkZXYoTCxJLEUubWVhbiksRS5tZWQ9by5pbnRlcnAoTCwuNSksSSUyJiYobHR8fGN0KSlsdD8odXQ9TC5zbGljZSgwLEkvMiksZnQ9TC5zbGljZShJLzIrMSkpOmN0JiYodXQ9TC5zbGljZSgwLEkvMisxKSxmdD1MLnNsaWNlKEkvMikpLEUucTE9by5pbnRlcnAodXQsLjUpLEUucTM9by5pbnRlcnAoZnQsLjUpO2Vsc2UgRS5xMT1vLmludGVycChMLC4yNSksRS5xMz1vLmludGVycChMLC43NSk7RS5sZj1wKEUsTCxJKSxFLnVmPWQoRSxMLEkpLEUubG89ZyhFKSxFLnVvPW0oRSk7dmFyIGh0PXYoRSxJKTtFLmxuPUUubWVkLWh0LEUudW49RS5tZWQraHQsYXQ9TWF0aC5taW4oYXQsRS5sbiksb3Q9TWF0aC5tYXgob3QsRS51biksRS5wdHMyPUMuZmlsdGVyKGopLEEucHVzaChFKX1lLl9leHRyZW1lc1t5Ll9pZF09aS5maW5kRXh0cmVtZXMoeSxlLm5vdGNoZWQ/dHQuY29uY2F0KFthdCxvdF0pOnR0LHtwYWRkZWQ6ITB9KX1yZXR1cm4gZnVuY3Rpb24odCxlKXtpZihvLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe2Zvcih2YXIgbj10W3JdLnB0c3x8W10saT17fSxhPTA7YTxuLmxlbmd0aDthKyspaVtuW2FdLmldPWE7by50YWdTZWxlY3RlZChuLGUsaSl9fShBLGUpLEEubGVuZ3RoPjA/KEFbMF0udD17bnVtOlRbU10sZFBvczpOLHBvc0xldHRlcjpfLHZhbExldHRlcjp4LGxhYmVsczp7bWVkOmwodCwibWVkaWFuOiIpLG1pbjpsKHQsIm1pbjoiKSxxMTpsKHQsInExOiIpLHEzOmwodCwicTM6IiksbWF4OmwodCwibWF4OiIpLG1lYW46InNkIj09PWUuYm94bWVhbj9sKHQsIm1lYW4gXHhiMSBcdTAzYzM6Iik6bCh0LCJtZWFuOiIpLGxmOmwodCwibG93ZXIgZmVuY2U6IiksdWY6bCh0LCJ1cHBlciBmZW5jZToiKX19LFRbU10rKyxBKTpbe3Q6e2VtcHR5OiEwfX1dfTt2YXIgYz17dGV4dDoidHgiLGhvdmVydGV4dDoiaHR4In07ZnVuY3Rpb24gdSh0LGUscil7Zm9yKHZhciBuIGluIGMpby5pc0FycmF5T3JUeXBlZEFycmF5KGVbbl0pJiYoQXJyYXkuaXNBcnJheShyKT9vLmlzQXJyYXlPclR5cGVkQXJyYXkoZVtuXVtyWzBdXSkmJih0W2Nbbl1dPWVbbl1bclswXV1bclsxXV0pOnRbY1tuXV09ZVtuXVtyXSl9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0LnYtZS52fWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudn1mdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gMD09PXI/dC5xMTpNYXRoLm1pbih0LnExLGVbTWF0aC5taW4oby5maW5kQmluKDIuNSp0LnExLTEuNSp0LnEzLGUsITApKzEsci0xKV0pfWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybiAwPT09cj90LnEzOk1hdGgubWF4KHQucTMsZVtNYXRoLm1heChvLmZpbmRCaW4oMi41KnQucTMtMS41KnQucTEsZSksMCldKX1mdW5jdGlvbiBnKHQpe3JldHVybiA0KnQucTEtMyp0LnEzfWZ1bmN0aW9uIG0odCl7cmV0dXJuIDQqdC5xMy0zKnQucTF9ZnVuY3Rpb24gdih0LGUpe3JldHVybiAwPT09ZT8wOjEuNTcqKHQucTMtdC5xMSkvTWF0aC5zcXJ0KGUpfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo4MjUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsImZhc3QtaXNudW1lcmljIjoyNDF9XSw5NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLG89WyJ2IiwiaCJdO2Z1bmN0aW9uIHModCxlLHIsbyl7dmFyIHMsbCxjLHU9ZS5jYWxjZGF0YSxmPWUuX2Z1bGxMYXlvdXQsaD1vLl9pZCxwPWguY2hhckF0KDApLGQ9W10sZz0wO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspZm9yKGM9dVtyW3NdXSxsPTA7bDxjLmxlbmd0aDtsKyspZC5wdXNoKG8uYzJsKGNbbF0ucG9zLCEwKSksZys9KGNbbF0ucHRzMnx8W10pLmxlbmd0aDtpZihkLmxlbmd0aCl7dmFyIG09aS5kaXN0aW5jdFZhbHMoZCx7dW5pdE1pbkRpZmY6ImNhdGVnb3J5Ij09PW8udHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09by50eXBlfSksdj1tLm1pbkRpZmYvMjtuLm1pbkR0aWNrKG8sbS5taW5EaWZmLG0udmFsc1swXSwhMCk7dmFyIHk9ZlsidmlvbGluIj09PXQ/Il9udW1WaW9saW5zIjoiX251bUJveGVzIl0seD0iZ3JvdXAiPT09Zlt0KyJtb2RlIl0mJnk+MSxiPTEtZlt0KyJnYXAiXSxfPTEtZlt0KyJncm91cGdhcCJdO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspe3ZhciB3LFQsayxNLEEsUyxFPShjPXVbcltzXV0pWzBdLnRyYWNlLEM9Y1swXS50LEw9RS53aWR0aCxJPUUuc2lkZTtpZihMKXc9VD1NPUwvMixrPTA7ZWxzZSBpZih3PXYseCl7dmFyIFA9YShmLG8uX2lkKStFLm9yaWVudGF0aW9uLHo9KGYuX2FsaWdubWVudE9wdHNbUF18fHt9KVtFLmFsaWdubWVudGdyb3VwXXx8e30sTz1PYmplY3Qua2V5cyh6Lm9mZnNldEdyb3Vwc3x8e30pLmxlbmd0aCxEPU98fHk7VD13KmIqXy9ELGs9Mip3KigoKE8/RS5fb2Zmc2V0SW5kZXg6Qy5udW0pKy41KS9ELS41KSpiLE09dypiL0R9ZWxzZSBUPXcqYipfLGs9MCxNPXc7Qy5kUG9zPXcsQy5iUG9zPWssQy5iZFBvcz1ULEMud0hvdmVyPU07dmFyIFIsRixCLE4saixVLFY9aytULHE9Qm9vbGVhbihMKTtpZigicG9zaXRpdmUiPT09ST8oQT13KihMPzE6LjUpLFI9VixTPVI9ayk6Im5lZ2F0aXZlIj09PUk/KEE9Uj1rLFM9dyooTD8xOi41KSxGPVYpOihBPVM9dyxSPUY9ViksKEUuYm94cG9pbnRzfHxFLnBvaW50cykmJmc+MCl7dmFyIEg9RS5wb2ludHBvcyxHPUUuaml0dGVyLFk9RS5tYXJrZXIuc2l6ZS8yLFc9MDtIK0c+PTAmJigoVz1WKihIK0cpKT5BPyhxPSEwLGo9WSxCPVcpOlc+UiYmKGo9WSxCPUEpKSxXPD1BJiYoQj1BKTt2YXIgWD0wO0gtRzw9MCYmKChYPS1WKihILUcpKT5TPyhxPSEwLFU9WSxOPVgpOlg+RiYmKFU9WSxOPVMpKSxYPD1TJiYoTj1TKX1lbHNlIEI9QSxOPVM7dmFyIFo9bmV3IEFycmF5KGMubGVuZ3RoKTtmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKVpbbF09Y1tsXS5wb3M7RS5fZXh0cmVtZXNbaF09bi5maW5kRXh0cmVtZXMobyxaLHtwYWRkZWQ6cSx2cGFkbWludXM6Tix2cGFkcGx1czpCLHZwYWRMaW5lYXJpemVkOiEwLHBwYWRtaW51czp7eDpVLHk6an1bcF0scHBhZHBsdXM6e3g6aix5OlV9W3BdfSl9fX1lLmV4cG9ydHM9e2Nyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY2FsY2RhdGEsbj1lLnhheGlzLGk9ZS55YXhpcyxhPTA7YTxvLmxlbmd0aDthKyspe2Zvcih2YXIgbD1vW2FdLGM9ImgiPT09bD9pOm4sdT1bXSxmPTA7ZjxyLmxlbmd0aDtmKyspe3ZhciBoPXJbZl0scD1oWzBdLnQsZD1oWzBdLnRyYWNlOyEwIT09ZC52aXNpYmxlfHwiYm94IiE9PWQudHlwZSYmImNhbmRsZXN0aWNrIiE9PWQudHlwZXx8cC5lbXB0eXx8KGQub3JpZW50YXRpb258fCJ2IikhPT1sfHxkLnhheGlzIT09bi5faWR8fGQueWF4aXMhPT1pLl9pZHx8dS5wdXNoKGYpfXMoImJveCIsdCx1LGMpfX0sc2V0UG9zaXRpb25PZmZzZXQ6c319LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6ODM1fV0sOTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIikscz10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHUodCxlLHIsYSl7ZnVuY3Rpb24gbyh0KXt2YXIgZT0wO3JldHVybiB0JiZ0Lmxlbmd0aCYmKGUrPTEsbi5pc0FycmF5T3JUeXBlZEFycmF5KHRbMF0pJiZ0WzBdLmxlbmd0aCYmKGUrPTEpKSxlfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIG4udmFsaWRhdGUodFtlXSxjW2VdKX12YXIgdSxmPXIoInkiKSxoPXIoIngiKTtpZigiYm94Ij09PWUudHlwZSl7dmFyIHA9cigicTEiKSxkPXIoIm1lZGlhbiIpLGc9cigicTMiKTtlLl9oYXNQcmVDb21wU3RhdHM9cCYmcC5sZW5ndGgmJmQmJmQubGVuZ3RoJiZnJiZnLmxlbmd0aCx1PU1hdGgubWluKG4ubWluUm93TGVuZ3RoKHApLG4ubWluUm93TGVuZ3RoKGQpLG4ubWluUm93TGVuZ3RoKGcpKX12YXIgbSx2LHk9byhmKSx4PW8oaCksYj15JiZuLm1pblJvd0xlbmd0aChmKSxfPXgmJm4ubWluUm93TGVuZ3RoKGgpLHc9YS5jYWxlbmRhcixUPXthdXRvdHlwZW51bWJlcnM6YS5hdXRvdHlwZW51bWJlcnN9O2lmKGUuX2hhc1ByZUNvbXBTdGF0cylzd2l0Y2goU3RyaW5nKHgpK1N0cmluZyh5KSl7Y2FzZSIwMCI6dmFyIGs9cygieDAiKXx8cygiZHgiKTttPShzKCJ5MCIpfHxzKCJkeSIpKSYmIWs/ImgiOiJ2Iix2PXU7YnJlYWs7Y2FzZSIxMCI6bT0idiIsdj1NYXRoLm1pbih1LF8pO2JyZWFrO2Nhc2UiMjAiOm09ImgiLHY9TWF0aC5taW4odSxoLmxlbmd0aCk7YnJlYWs7Y2FzZSIwMSI6bT0iaCIsdj1NYXRoLm1pbih1LGIpO2JyZWFrO2Nhc2UiMDIiOm09InYiLHY9TWF0aC5taW4odSxmLmxlbmd0aCk7YnJlYWs7Y2FzZSIxMiI6bT0idiIsdj1NYXRoLm1pbih1LF8sZi5sZW5ndGgpO2JyZWFrO2Nhc2UiMjEiOm09ImgiLHY9TWF0aC5taW4odSxoLmxlbmd0aCxiKTticmVhaztjYXNlIjExIjp2PTA7YnJlYWs7Y2FzZSIyMiI6dmFyIE0sQT0hMTtmb3IoTT0wO008aC5sZW5ndGg7TSsrKWlmKCJjYXRlZ29yeSI9PT1sKGhbTV0sdyxUKSl7QT0hMDticmVha31pZihBKW09InYiLHY9TWF0aC5taW4odSxfLGYubGVuZ3RoKTtlbHNle2ZvcihNPTA7TTxmLmxlbmd0aDtNKyspaWYoImNhdGVnb3J5Ij09PWwoZltNXSx3LFQpKXtBPSEwO2JyZWFrfUE/KG09ImgiLHY9TWF0aC5taW4odSxoLmxlbmd0aCxiKSk6KG09InYiLHY9TWF0aC5taW4odSxfLGYubGVuZ3RoKSl9fWVsc2UgeT4wPyhtPSJ2Iix2PXg+MD9NYXRoLm1pbihfLGIpOk1hdGgubWluKGIpKTp4PjA/KG09ImgiLHY9TWF0aC5taW4oXykpOnY9MDtpZih2KXtlLl9sZW5ndGg9djt2YXIgUz1yKCJvcmllbnRhdGlvbiIsbSk7ZS5faGFzUHJlQ29tcFN0YXRzPyJ2Ij09PVMmJjA9PT14PyhyKCJ4MCIsMCkscigiZHgiLDEpKToiaCI9PT1TJiYwPT09eSYmKHIoInkwIiwwKSxyKCJkeSIsMSkpOiJ2Ij09PVMmJjA9PT14P3IoIngwIik6ImgiPT09UyYmMD09PXkmJnIoInkwIiksaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpfWVsc2UgZS52aXNpYmxlPSExfWZ1bmN0aW9uIGYodCxlLHIsaSl7dmFyIGE9aS5wcmVmaXgsbz1uLmNvZXJjZTIodCxlLGMsIm1hcmtlci5vdXRsaWVyY29sb3IiKSxzPXIoIm1hcmtlci5saW5lLm91dGxpZXJjb2xvciIpLGw9Im91dGxpZXJzIjtlLl9oYXNQcmVDb21wU3RhdHM/bD0iYWxsIjoob3x8cykmJihsPSJzdXNwZWN0ZWRvdXRsaWVycyIpO3ZhciB1PXIoYSsicG9pbnRzIixsKTt1PyhyKCJqaXR0ZXIiLCJhbGwiPT09dT8uMzowKSxyKCJwb2ludHBvcyIsImFsbCI9PT11Py0xLjU6MCkscigibWFya2VyLnN5bWJvbCIpLHIoIm1hcmtlci5vcGFjaXR5IikscigibWFya2VyLnNpemUiKSxyKCJtYXJrZXIuY29sb3IiLGUubGluZS5jb2xvcikscigibWFya2VyLmxpbmUuY29sb3IiKSxyKCJtYXJrZXIubGluZS53aWR0aCIpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT11JiYocigibWFya2VyLmxpbmUub3V0bGllcmNvbG9yIixlLm1hcmtlci5jb2xvcikscigibWFya2VyLmxpbmUub3V0bGllcndpZHRoIikpLHIoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHIoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIikscigic2VsZWN0ZWQubWFya2VyLnNpemUiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplIikscigidGV4dCIpLHIoImhvdmVydGV4dCIpKTpkZWxldGUgZS5tYXJrZXI7dmFyIGY9cigiaG92ZXJvbiIpOyJhbGwiIT09ZiYmLTE9PT1mLmluZGV4T2YoInBvaW50cyIpfHxyKCJob3ZlcnRlbXBsYXRlIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9aWYodSh0LGUscyxpKSwhMSE9PWUudmlzaWJsZSl7byh0LGUsaSxzKTt2YXIgbD1lLl9oYXNQcmVDb21wU3RhdHM7bCYmKHMoImxvd2VyZmVuY2UiKSxzKCJ1cHBlcmZlbmNlIikpLHMoImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxzKCJsaW5lLndpZHRoIikscygiZmlsbGNvbG9yIixhLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLC41KSk7dmFyIGg9ITE7aWYobCl7dmFyIHA9cygibWVhbiIpLGQ9cygic2QiKTtwJiZwLmxlbmd0aCYmKGg9ITAsZCYmZC5sZW5ndGgmJihoPSJzZCIpKX1zKCJib3htZWFuIixoKSxzKCJ3aGlza2Vyd2lkdGgiKSxzKCJ3aWR0aCIpLHMoInF1YXJ0aWxlbWV0aG9kIik7dmFyIGc9ITE7aWYobCl7dmFyIG09cygibm90Y2hzcGFuIik7bSYmbS5sZW5ndGgmJihnPSEwKX1lbHNlIG4udmFsaWRhdGUodC5ub3RjaHdpZHRoLGMubm90Y2h3aWR0aCkmJihnPSEwKTtzKCJub3RjaGVkIixnKSYmcygibm90Y2h3aWR0aCIpLGYodCxlLHMse3ByZWZpeDoiYm94In0pfX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaTtmdW5jdGlvbiBhKHQpe3JldHVybiBuLmNvZXJjZShpLl9pbnB1dCxpLGMsdCl9Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBsPShpPXRbb10pLnR5cGU7ImJveCIhPT1sJiYidmlvbGluIiE9PWx8fChyPWkuX2lucHV0LCJncm91cCI9PT1lW2wrIm1vZGUiXSYmcyhyLGksZSxhKSl9fSxoYW5kbGVTYW1wbGVEZWZhdWx0czp1LGhhbmRsZVBvaW50c0RlZmF1bHRzOmZ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo4MjksIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL2Jhci9kZWZhdWx0cyI6OTI1LCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6MTIwNywiLi9hdHRyaWJ1dGVzIjo5NDZ9XSw5NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaG92ZXJPbkJveCYmKHQuaG92ZXJPbkJveD1lLmhvdmVyT25Cb3gpLCJ4VmFsImluIGUmJih0Lng9ZS54VmFsKSwieVZhbCJpbiBlJiYodC55PWUueVZhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksdH19LHt9XSw5NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9aS5maWxsVGV4dDtmdW5jdGlvbiBsKHQsZSxyLHMpe3ZhciBsLGMsdSxmLGgscCxkLGcsbSx2LHkseCxiLF8sdz10LmNkLFQ9dC54YSxrPXQueWEsTT13WzBdLnRyYWNlLEE9d1swXS50LFM9InZpb2xpbiI9PT1NLnR5cGUsRT1bXSxDPUEuYmRQb3MsTD1BLndIb3ZlcixJPWZ1bmN0aW9uKHQpe3JldHVybiB1LmMybCh0LnBvcykrQS5iUG9zLXUuYzJsKHApfTtTJiYiYm90aCIhPT1NLnNpZGU/KCJwb3NpdGl2ZSI9PT1NLnNpZGUmJihtPWZ1bmN0aW9uKHQpe3ZhciBlPUkodCk7cmV0dXJuIGEuaW5ib3goZSxlK0wsdil9LHg9QyxiPTApLCJuZWdhdGl2ZSI9PT1NLnNpZGUmJihtPWZ1bmN0aW9uKHQpe3ZhciBlPUkodCk7cmV0dXJuIGEuaW5ib3goZS1MLGUsdil9LHg9MCxiPUMpKToobT1mdW5jdGlvbih0KXt2YXIgZT1JKHQpO3JldHVybiBhLmluYm94KGUtTCxlK0wsdil9LHg9Yj1DKSxfPVM/ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5zcGFuWzBdLWgsdC5zcGFuWzFdLWgsdil9OmZ1bmN0aW9uKHQpe3JldHVybiBhLmluYm94KHQubWluLWgsdC5tYXgtaCx2KX0sImgiPT09TS5vcmllbnRhdGlvbj8oaD1lLHA9cixkPV8sZz1tLGw9InkiLHU9ayxjPSJ4IixmPVQpOihoPXIscD1lLGQ9bSxnPV8sbD0ieCIsdT1ULGM9InkiLGY9ayk7dmFyIFA9TWF0aC5taW4oMSxDL01hdGguYWJzKHUucjJjKHUucmFuZ2VbMV0pLXUucjJjKHUucmFuZ2VbMF0pKSk7ZnVuY3Rpb24geih0KXtyZXR1cm4oZCh0KStnKHQpKS8yfXY9dC5tYXhIb3ZlckRpc3RhbmNlLVAseT10Lm1heFNwaWtlRGlzdGFuY2UtUDt2YXIgTz1hLmdldERpc3RhbmNlRnVuY3Rpb24ocyxkLGcseik7aWYoYS5nZXRDbG9zZXN0KHcsTyx0KSwhMT09PXQuaW5kZXgpcmV0dXJuW107dmFyIEQ9d1t0LmluZGV4XSxSPU0ubGluZS5jb2xvcixGPShNLm1hcmtlcnx8e30pLmNvbG9yO28ub3BhY2l0eShSKSYmTS5saW5lLndpZHRoP3QuY29sb3I9UjpvLm9wYWNpdHkoRikmJk0uYm94cG9pbnRzP3QuY29sb3I9Rjp0LmNvbG9yPU0uZmlsbGNvbG9yLHRbbCsiMCJdPXUuYzJwKEQucG9zK0EuYlBvcy1iLCEwKSx0W2wrIjEiXT11LmMycChELnBvcytBLmJQb3MreCwhMCksdFtsKyJMYWJlbFZhbCJdPXZvaWQgMCE9PUQub3JpZ19wP0Qub3JpZ19wOkQucG9zO3ZhciBCPWwrIlNwaWtlIjt0LnNwaWtlRGlzdGFuY2U9eihEKSp5L3YsdFtCXT11LmMycChELnBvcywhMCk7dmFyIE49e30saj1bIm1lZCIsInExIiwicTMiLCJtaW4iLCJtYXgiXTsoTS5ib3htZWFufHwoTS5tZWFubGluZXx8e30pLnZpc2libGUpJiZqLnB1c2goIm1lYW4iKSwoTS5ib3hwb2ludHN8fE0ucG9pbnRzKSYmai5wdXNoKCJsZiIsInVmIik7Zm9yKHZhciBVPTA7VTxqLmxlbmd0aDtVKyspe3ZhciBWPWpbVV07aWYoViBpbiBEJiYhKERbVl1pbiBOKSl7TltEW1ZdXT0hMDt2YXIgcT1EW1ZdLEg9Zi5jMnAocSwhMCksRz1pLmV4dGVuZEZsYXQoe30sdCk7Ry5hdHRyPVYsR1tjKyIwIl09R1tjKyIxIl09SCxHW2MrIkxhYmVsVmFsIl09cSxHW2MrIkxhYmVsIl09KEEubGFiZWxzP0EubGFiZWxzW1ZdKyIgIjoiIikrbi5ob3ZlckxhYmVsVGV4dChmLHEpLEcuaG92ZXJPbkJveD0hMCwibWVhbiI9PT1WJiYic2QiaW4gRCYmInNkIj09PU0uYm94bWVhbiYmKEdbYysiZXJyIl09RC5zZCksdC5uYW1lPSIiLHQuc3Bpa2VEaXN0YW5jZT12b2lkIDAsdFtCXT12b2lkIDAsRy5ob3ZlcnRlbXBsYXRlPSExLEUucHVzaChHKX19cmV0dXJuIEV9ZnVuY3Rpb24gYyh0LGUscil7Zm9yKHZhciBuLG8sbCxjPXQuY2QsdT10LnhhLGY9dC55YSxoPWNbMF0udHJhY2UscD11LmMycChlKSxkPWYuYzJwKHIpLGc9YS5xdWFkcmF0dXJlKChmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnModS5jMnAodC54KS1wKS1lLDEtMy9lKX0pLChmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoZi5jMnAodC55KS1kKS1lLDEtMy9lKX0pKSxtPSExLHY9MDt2PGMubGVuZ3RoO3YrKyl7bz1jW3ZdO2Zvcih2YXIgeT0wO3k8KG8ucHRzfHxbXSkubGVuZ3RoO3krKyl7dmFyIHg9ZyhsPW8ucHRzW3ldKTt4PD10LmRpc3RhbmNlJiYodC5kaXN0YW5jZT14LG09W3YseV0pfX1pZighbSlyZXR1cm4hMTtsPShvPWNbbVswXV0pLnB0c1ttWzFdXTt2YXIgYj11LmMycChsLngsITApLF89Zi5jMnAobC55LCEwKSx3PWwubXJjfHwxO249aS5leHRlbmRGbGF0KHt9LHQse2luZGV4OmwuaSxjb2xvcjooaC5tYXJrZXJ8fHt9KS5jb2xvcixuYW1lOmgubmFtZSx4MDpiLXcseDE6Yit3LHkwOl8tdyx5MTpfK3csc3Bpa2VEaXN0YW5jZTp0LmRpc3RhbmNlLGhvdmVydGVtcGxhdGU6aC5ob3ZlcnRlbXBsYXRlfSk7dmFyIFQsaz1vLm9yaWdfcCxNPXZvaWQgMCE9PWs/azpvLnBvcztyZXR1cm4iaCI9PT1oLm9yaWVudGF0aW9uPyhUPWYsbi54TGFiZWxWYWw9bC54LG4ueUxhYmVsVmFsPU0pOihUPXUsbi54TGFiZWxWYWw9TSxuLnlMYWJlbFZhbD1sLnkpLG5bVC5faWQuY2hhckF0KDApKyJTcGlrZSJdPVQuYzJwKG8ucG9zLCEwKSxzKGwsaCxuKSxufWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT10LmNkWzBdLnRyYWNlLmhvdmVyb24sbz1bXTtyZXR1cm4tMSE9PWEuaW5kZXhPZigiYm94ZXMiKSYmKG89by5jb25jYXQobCh0LGUscixuKSkpLC0xIT09YS5pbmRleE9mKCJwb2ludHMiKSYmKGk9Yyh0LGUscikpLCJjbG9zZXN0Ij09PW4/aT9baV06bzppPyhvLnB1c2goaSksbyk6b30saG92ZXJPbkJveGVzOmwsaG92ZXJPblBvaW50czpjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY4MywiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjh9XSw5NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLnN1cHBseUxheW91dERlZmF1bHRzLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4vc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsInN5bWJvbHMiLCJvcmllbnRlZCIsImJveC12aW9saW4iLCJzaG93TGVnZW5kIiwiYm94TGF5b3V0Iiwiem9vbVNjYWxlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4NDEsIi4vYXR0cmlidXRlcyI6OTQ2LCIuL2NhbGMiOjk0NywiLi9jcm9zc190cmFjZV9jYWxjIjo5NDgsIi4vZGVmYXVsdHMiOjk0OSwiLi9ldmVudF9kYXRhIjo5NTAsIi4vaG92ZXIiOjk1MSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6OTUzLCIuL2xheW91dF9kZWZhdWx0cyI6OTU0LCIuL3Bsb3QiOjk1NSwiLi9zZWxlY3QiOjk1NiwiLi9zdHlsZSI6OTU3fV0sOTUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Ym94bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoib3ZlcmxheSIsZWRpdFR5cGU6ImNhbGMifSxib3hnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZToiY2FsYyJ9LGJveGdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw5NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2Z1bmN0aW9uIG8odCxlLHIsaSxhKXtmb3IodmFyIG89YSsiTGF5b3V0IixzPSExLGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cltsXTtpZihuLnRyYWNlSXMoYyxvKSl7cz0hMDticmVha319cyYmKGkoYSsibW9kZSIpLGkoYSsiZ2FwIiksaShhKyJncm91cGdhcCIpKX1lLmV4cG9ydHM9e3N1cHBseUxheW91dERlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyKXtvKDAsMCxyLChmdW5jdGlvbihyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfSksImJveCIpfSxfc3VwcGx5Om99fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5NTN9XSw5NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZnVuY3Rpb24gbyh0LGUscixhKXt2YXIgbyxzLGw9ImgiPT09ci5vcmllbnRhdGlvbixjPWUudmFsLHU9ZS5wb3MsZj0hIXUucmFuZ2VicmVha3MsaD1hLmJQb3MscD1hLndkUG9zfHwwLGQ9YS5iUG9zUHhPZmZzZXR8fDAsZz1yLndoaXNrZXJ3aWR0aHx8MCxtPXIubm90Y2hlZHx8ITEsdj1tPzEtMipyLm5vdGNod2lkdGg6MTtBcnJheS5pc0FycmF5KGEuYmRQb3MpPyhvPWEuYmRQb3NbMF0scz1hLmJkUG9zWzFdKToobz1hLmJkUG9zLHM9YS5iZFBvcyk7dmFyIHk9dC5zZWxlY3RBbGwoInBhdGguYm94IikuZGF0YSgidmlvbGluIiE9PXIudHlwZXx8ci5ib3gudmlzaWJsZT9pLmlkZW50aXR5OltdKTt5LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJjbGFzcyIsImJveCIpLHkuZXhpdCgpLnJlbW92ZSgpLHkuZWFjaCgoZnVuY3Rpb24odCl7aWYodC5lbXB0eSlyZXR1cm4iTTAsMFoiO3ZhciBlPXUuYzJsKHQucG9zK2gsITApLGE9dS5sMnAoZS1vKStkLHk9dS5sMnAoZStzKStkLHg9Zj8oYSt5KS8yOnUubDJwKGUpK2QsYj1yLndoaXNrZXJ3aWR0aCxfPWY/YSpiKygxLWIpKng6dS5sMnAoZS1wKStkLHc9Zj95KmIrKDEtYikqeDp1LmwycChlK3ApK2QsVD11LmwycChlLW8qdikrZCxrPXUubDJwKGUrcyp2KStkLE09Yy5jMnAodC5xMSwhMCksQT1jLmMycCh0LnEzLCEwKSxTPWkuY29uc3RyYWluKGMuYzJwKHQubWVkLCEwKSxNYXRoLm1pbihNLEEpKzEsTWF0aC5tYXgoTSxBKS0xKSxFPXZvaWQgMD09PXQubGZ8fCExPT09ci5ib3hwb2ludHMsQz1jLmMycChFP3QubWluOnQubGYsITApLEw9Yy5jMnAoRT90Lm1heDp0LnVmLCEwKSxJPWMuYzJwKHQubG4sITApLFA9Yy5jMnAodC51biwhMCk7bD9uLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrUysiLCIrVCsiViIraysiTSIrTSsiLCIrYSsiViIreSsobT8iSCIrSSsiTCIrUysiLCIraysiTCIrUCsiLCIreToiIikrIkgiK0ErIlYiK2ErKG0/IkgiK1ArIkwiK1MrIiwiK1QrIkwiK0krIiwiK2E6IiIpKyJaTSIrTSsiLCIreCsiSCIrQysiTSIrQSsiLCIreCsiSCIrTCsoMD09PWc/IiI6Ik0iK0MrIiwiK18rIlYiK3crIk0iK0wrIiwiK18rIlYiK3cpKTpuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrVCsiLCIrUysiSCIraysiTSIrYSsiLCIrTSsiSCIreSsobT8iViIrSSsiTCIraysiLCIrUysiTCIreSsiLCIrUDoiIikrIlYiK0ErIkgiK2ErKG0/IlYiK1ArIkwiK1QrIiwiK1MrIkwiK2ErIiwiK0k6IiIpKyJaTSIreCsiLCIrTSsiViIrQysiTSIreCsiLCIrQSsiViIrTCsoMD09PWc/IiI6Ik0iK18rIiwiK0MrIkgiK3crIk0iK18rIiwiK0wrIkgiK3cpKX0pKX1mdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBvPWUueCxzPWUueSxsPW4uYmRQb3MsYz1uLmJQb3MsdT1yLmJveHBvaW50c3x8ci5wb2ludHM7aS5zZWVkUHNldWRvUmFuZG9tKCk7dmFyIGY9dC5zZWxlY3RBbGwoImcucG9pbnRzIikuZGF0YSh1P2Z1bmN0aW9uKHQpe3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudD1uLHQudHJhY2U9cn0pKSx0fTpbXSk7Zi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicG9pbnRzIiksZi5leGl0KCkucmVtb3ZlKCk7dmFyIGg9Zi5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKChmdW5jdGlvbih0KXt2YXIgZSxuLGE9dC5wdHMyLG89TWF0aC5tYXgoKHQubWF4LXQubWluKS8xMCx0LnEzLXQucTEpLHM9MWUtOSpvLGY9LjAxKm8saD1bXSxwPTA7aWYoci5qaXR0ZXIpe2lmKDA9PT1vKWZvcihwPTEsaD1uZXcgQXJyYXkoYS5sZW5ndGgpLGU9MDtlPGEubGVuZ3RoO2UrKyloW2VdPTE7ZWxzZSBmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZD1NYXRoLm1heCgwLGUtNSksZz1hW2RdLnYsbT1NYXRoLm1pbihhLmxlbmd0aC0xLGUrNSksdj1hW21dLnY7ImFsbCIhPT11JiYoYVtlXS52PHQubGY/dj1NYXRoLm1pbih2LHQubGYpOmc9TWF0aC5tYXgoZyx0LnVmKSk7dmFyIHk9TWF0aC5zcXJ0KGYqKG0tZCkvKHYtZytzKSl8fDA7eT1pLmNvbnN0cmFpbihNYXRoLmFicyh5KSwwLDEpLGgucHVzaCh5KSxwPU1hdGgubWF4KHkscCl9bj0yKnIuaml0dGVyLyhwfHwxKX1mb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgeD1hW2VdLGI9eC52LF89ci5qaXR0ZXI/bipoW2VdKihpLnBzZXVkb1JhbmRvbSgpLS41KTowLHc9dC5wb3MrYytsKihyLnBvaW50cG9zK18pOyJoIj09PXIub3JpZW50YXRpb24/KHgueT13LHgueD1iKTooeC54PXcseC55PWIpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT11JiZiPHQudW8mJmI+dC5sbyYmKHguc289ITApfXJldHVybiBhfSkpO2guZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJwb2ludCIsITApLGguZXhpdCgpLnJlbW92ZSgpLGguY2FsbChhLnRyYW5zbGF0ZVBvaW50cyxvLHMpfWZ1bmN0aW9uIGwodCxlLHIsYSl7dmFyIG8scyxsPWUudmFsLGM9ZS5wb3MsdT0hIWMucmFuZ2VicmVha3MsZj1hLmJQb3MsaD1hLmJQb3NQeE9mZnNldHx8MCxwPXIuYm94bWVhbnx8KHIubWVhbmxpbmV8fHt9KS52aXNpYmxlO0FycmF5LmlzQXJyYXkoYS5iZFBvcyk/KG89YS5iZFBvc1swXSxzPWEuYmRQb3NbMV0pOihvPWEuYmRQb3Mscz1hLmJkUG9zKTt2YXIgZD10LnNlbGVjdEFsbCgicGF0aC5tZWFuIikuZGF0YSgiYm94Ij09PXIudHlwZSYmci5ib3htZWFufHwidmlvbGluIj09PXIudHlwZSYmci5ib3gudmlzaWJsZSYmci5tZWFubGluZS52aXNpYmxlP2kuaWRlbnRpdHk6W10pO2QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1lYW4iKS5zdHlsZSh7ZmlsbDoibm9uZSIsInZlY3Rvci1lZmZlY3QiOiJub24tc2NhbGluZy1zdHJva2UifSksZC5leGl0KCkucmVtb3ZlKCksZC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1jLmMybCh0LnBvcytmLCEwKSxpPWMubDJwKGUtbykraCxhPWMubDJwKGUrcykraCxkPXU/KGkrYSkvMjpjLmwycChlKStoLGc9bC5jMnAodC5tZWFuLCEwKSxtPWwuYzJwKHQubWVhbi10LnNkLCEwKSx2PWwuYzJwKHQubWVhbit0LnNkLCEwKTsiaCI9PT1yLm9yaWVudGF0aW9uP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitnKyIsIitpKyJWIithKygic2QiPT09cD8ibTAsMEwiK20rIiwiK2QrIkwiK2crIiwiK2krIkwiK3YrIiwiK2QrIloiOiIiKSk6bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK2krIiwiK2crIkgiK2ErKCJzZCI9PT1wPyJtMCwwTCIrZCsiLCIrbSsiTCIraSsiLCIrZysiTCIrZCsiLCIrdisiWiI6IiIpKX0pKX1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIGM9ZS54YXhpcyx1PWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBib3hlcyIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaT1uLnNlbGVjdCh0aGlzKSxhPXRbMF0sZj1hLnQsaD1hLnRyYWNlOyhmLndkUG9zPWYuYmRQb3MqaC53aGlza2Vyd2lkdGgsITAhPT1oLnZpc2libGV8fGYuZW1wdHkpP2kucmVtb3ZlKCk6KCJoIj09PWgub3JpZW50YXRpb24/KGU9dSxyPWMpOihlPWMscj11KSxvKGkse3BvczplLHZhbDpyfSxoLGYpLHMoaSx7eDpjLHk6dX0saCxmKSxsKGkse3BvczplLHZhbDpyfSxoLGYpKX0pKX0scGxvdEJveEFuZFdoaXNrZXJzOm8scGxvdFBvaW50czpzLHBsb3RCb3hNZWFuOmx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjY1LCIuLi8uLi9saWIiOjc3OCxkMzoxNjl9XSw5NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQuY2QsYT10LnhheGlzLG89dC55YXhpcyxzPVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWZvcihuPTA7bjwoaVtyXS5wdHN8fFtdKS5sZW5ndGg7bisrKWlbcl0ucHRzW25dLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWZvcihuPTA7bjwoaVtyXS5wdHN8fFtdKS5sZW5ndGg7bisrKXt2YXIgbD1pW3JdLnB0c1tuXSxjPWEuYzJwKGwueCksdT1vLmMycChsLnkpO2UuY29udGFpbnMoW2MsdV0sbnVsbCxsLmksdCk/KHMucHVzaCh7cG9pbnROdW1iZXI6bC5pLHg6YS5jMmQobC54KSx5Om8uYzJkKGwueSl9KSxsLnNlbGVjdGVkPTEpOmwuc2VsZWN0ZWQ9MH1yZXR1cm4gc319LHt9XSw5NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpO2UuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXJ8fG4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy50cmFjZS5ib3hlcyIpO28uc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLG8uZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1lWzBdLnRyYWNlLHM9by5saW5lLndpZHRoO2Z1bmN0aW9uIGwodCxlLHIsbil7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIixlKyJweCIpLmNhbGwoaS5zdHJva2UscikuY2FsbChpLmZpbGwsbil9dmFyIGM9ci5zZWxlY3RBbGwoInBhdGguYm94Iik7aWYoImNhbmRsZXN0aWNrIj09PW8udHlwZSljLmVhY2goKGZ1bmN0aW9uKHQpe2lmKCF0LmVtcHR5KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPW9bdC5kaXJdO2woZSxyLmxpbmUud2lkdGgsci5saW5lLmNvbG9yLHIuZmlsbGNvbG9yKSxlLnN0eWxlKCJvcGFjaXR5IixvLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KSk7ZWxzZXtsKGMscyxvLmxpbmUuY29sb3Isby5maWxsY29sb3IpLHIuc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6cywic3Ryb2tlLWRhc2hhcnJheSI6MipzKyJweCwiK3MrInB4In0pLmNhbGwoaS5zdHJva2Usby5saW5lLmNvbG9yKTt2YXIgdT1yLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpO2EucG9pbnRTdHlsZSh1LG8sdCl9fSkpfSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLnRyYWNlLGk9ci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKTtuLnNlbGVjdGVkcG9pbnRzP2Euc2VsZWN0ZWRQb2ludFN0eWxlKGksbik6YS5wb2ludFN0eWxlKGksbix0KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsZDM6MTY5fV0sOTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQsaT10KCIuLi9vaGxjL2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2JveC9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbyh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSxhLmxpbmUuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOmEubGluZS53aWR0aCxlZGl0VHlwZToic3R5bGUifSxmaWxsY29sb3I6YS5maWxsY29sb3IsZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXt4cGVyaW9kOmkueHBlcmlvZCx4cGVyaW9kMDppLnhwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6aS54cGVyaW9kYWxpZ25tZW50LHg6aS54LG9wZW46aS5vcGVuLGhpZ2g6aS5oaWdoLGxvdzppLmxvdyxjbG9zZTppLmNsb3NlLGxpbmU6e3dpZHRoOm4oe30sYS5saW5lLndpZHRoLHt9KSxlZGl0VHlwZToic3R5bGUifSxpbmNyZWFzaW5nOm8oaS5pbmNyZWFzaW5nLmxpbmUuY29sb3IuZGZsdCksZGVjcmVhc2luZzpvKGkuZGVjcmVhc2luZy5saW5lLmNvbG9yLmRmbHQpLHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCx3aGlza2Vyd2lkdGg6bih7fSxhLndoaXNrZXJ3aWR0aCx7ZGZsdDowfSksaG92ZXJsYWJlbDppLmhvdmVybGFiZWx9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9ib3gvYXR0cmlidXRlcyI6OTQ2LCIuLi9vaGxjL2F0dHJpYnV0ZXMiOjExMzN9XSw5NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLG89dCgiLi4vb2hsYy9jYWxjIikuY2FsY0NvbW1vbjtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybnttaW46cixxMTpNYXRoLm1pbih0LG4pLG1lZDpuLHEzOk1hdGgubWF4KHQsbiksbWF4OmV9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbD1pLmdldEZyb21JZCh0LGUueGF4aXMpLGM9aS5nZXRGcm9tSWQodCxlLnlheGlzKSx1PWwubWFrZUNhbGNkYXRhKGUsIngiKSxmPWEoZSxsLCJ4Iix1KSxoPW8odCxlLHUsZixjLHMpO3JldHVybiBoLmxlbmd0aD8obi5leHRlbmRGbGF0KGhbMF0udCx7bnVtOnIuX251bUJveGVzLGRQb3M6bi5kaXN0aW5jdFZhbHMoZikubWluRGlmZi8yLHBvc0xldHRlcjoieCIsdmFsTGV0dGVyOiJ5In0pLHIuX251bUJveGVzKyssaCk6W3t0OntlbXB0eTohMH19XX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjgyNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vb2hsYy9jYWxjIjoxMTM0fV0sOTYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vb2hsYy9vaGxjX2RlZmF1bHRzIiksbz10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgYT1yKG4rIi5saW5lLmNvbG9yIik7cihuKyIubGluZS53aWR0aCIsZS5saW5lLndpZHRoKSxyKG4rIi5maWxsY29sb3IiLGkuYWRkT3BhY2l0eShhLC41KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1hKHQsZSxjLGkpPyhvKHQsZSxpLGMse3g6ITB9KSxjKCJsaW5lLndpZHRoIiksbCh0LGUsYywiaW5jcmVhc2luZyIpLGwodCxlLGMsImRlY3JlYXNpbmciKSxjKCJ0ZXh0IiksYygiaG92ZXJ0ZXh0IiksYygid2hpc2tlcndpZHRoIiksaS5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vbGliIjo3NzgsIi4uL29obGMvb2hsY19kZWZhdWx0cyI6MTEzOCwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjEyMDcsIi4vYXR0cmlidXRlcyI6OTU4fV0sOTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNhbmRsZXN0aWNrIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic2hvd0xlZ2VuZCIsImNhbmRsZXN0aWNrIiwiYm94TGF5b3V0Il0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi4vYm94L2xheW91dF9kZWZhdWx0cyIpLnN1cHBseUxheW91dERlZmF1bHRzLGNyb3NzVHJhY2VDYWxjOnQoIi4uL2JveC9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMsc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuLi9ib3gvcGxvdCIpLnBsb3QsbGF5ZXJOYW1lOiJib3hsYXllciIsc3R5bGU6dCgiLi4vYm94L3N0eWxlIikuc3R5bGUsaG92ZXJQb2ludHM6dCgiLi4vb2hsYy9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9vaGxjL3NlbGVjdCIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiOjk0OCwiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIjo5NTMsIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiOjk1NCwiLi4vYm94L3Bsb3QiOjk1NSwiLi4vYm94L3N0eWxlIjo5NTcsIi4uL29obGMvaG92ZXIiOjExMzYsIi4uL29obGMvc2VsZWN0IjoxMTQwLCIuL2F0dHJpYnV0ZXMiOjk1OCwiLi9jYWxjIjo5NTksIi4vZGVmYXVsdHMiOjk2MH1dLDk2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F4aXNfZGVmYXVsdHMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvKXthKCJhIil8fChhKCJkYSIpLGEoImEwIikpLGEoImIiKXx8KGEoImRiIiksYSgiYjAiKSksZnVuY3Rpb24odCxlLHIsYSl7WyJhYXhpcyIsImJheGlzIl0uZm9yRWFjaCgoZnVuY3Rpb24obyl7dmFyIHM9by5jaGFyQXQoMCksbD10W29dfHx7fSxjPWkubmV3Q29udGFpbmVyKGUsbyksdT17dGlja2ZvbnQ6IngiLGlkOnMrImF4aXMiLGxldHRlcjpzLGZvbnQ6ZS5mb250LG5hbWU6byxkYXRhOnRbc10sY2FsZW5kYXI6ZS5jYWxlbmRhcixkZmx0Q29sb3I6YSxiZ0NvbG9yOnIucGFwZXJfYmdjb2xvcixhdXRvdHlwZW51bWJlcnNEZmx0OnIuYXV0b3R5cGVudW1iZXJzLGZ1bGxMYXlvdXQ6cn07bihsLGMsdSksYy5fY2F0ZWdvcmllcz1jLl9jYXRlZ29yaWVzfHxbXSx0W29dfHwiLSI9PT1sLnR5cGV8fCh0W29dPXt0eXBlOmwudHlwZX0pfSkpfSh0LGUscixvKX19LHsiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE3LCIuL2F4aXNfZGVmYXVsdHMiOjk2N31dLDk2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdChlLHIpe2lmKCFuKGUpfHxyPj0xMClyZXR1cm4gbnVsbDtmb3IodmFyIGk9MS8wLGE9LTEvMCxvPWUubGVuZ3RoLHM9MDtzPG87cysrKXt2YXIgbD1lW3NdO2lmKG4obCkpe3ZhciBjPXQobCxyKzEpO2MmJihpPU1hdGgubWluKGNbMF0saSksYT1NYXRoLm1heChjWzFdLGEpKX1lbHNlIGk9TWF0aC5taW4obCxpKSxhPU1hdGgubWF4KGwsYSl9cmV0dXJuW2ksYV19KHQsMCl9fSx7Ii4uLy4uL2xpYiI6Nzc4fV0sOTY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLG89bih7ZWRpdFR5cGU6ImNhbGMifSk7by5mYW1pbHkuZGZsdD0nIk9wZW4gU2FucyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxvLnNpemUuZGZsdD0xMixvLmNvbG9yLmRmbHQ9YS5kZWZhdWx0TGluZSxlLmV4cG9ydHM9e2NhcnBldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGEwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGRhOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYjA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZGI6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sY2hlYXRlcnNsb3BlOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGFheGlzOmksYmF4aXM6aSxmb250Om8sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InBsb3QifSx0cmFuc2Zvcm1zOnZvaWQgMH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2NDIsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuL2F4aXNfYXR0cmlidXRlcyI6OTY2fV0sOTY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsLGMsdSxmLGgscCxkLGcsbSx2LHk9bihyKT8iYSI6ImIiLHg9KCJhIj09PXk/dC5hYXhpczp0LmJheGlzKS5zbW9vdGhpbmcsYj0iYSI9PT15P3QuYTJpOnQuYjJqLF89ImEiPT09eT9yOmksdz0iYSI9PT15P2k6cixUPSJhIj09PXk/ZS5hLmxlbmd0aDplLmIubGVuZ3RoLGs9ImEiPT09eT9lLmIubGVuZ3RoOmUuYS5sZW5ndGgsTT1NYXRoLmZsb29yKCJhIj09PXk/dC5iMmoodyk6dC5hMmkodykpLEE9ImEiPT09eT9mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sZSxNKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLE0sZSl9O3gmJihzPU1hdGgubWF4KDAsTWF0aC5taW4oay0yLE0pKSxsPU0tcyxvPSJhIj09PXk/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLHMscixsKX06ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxzLGUsbCxyKX0pO3ZhciBTPWIoX1swXSksRT1iKF9bMV0pLEM9UzxFPzE6LTEsTD0xZS04KihFLVMpLEk9Qz4wP01hdGguZmxvb3I6TWF0aC5jZWlsLFA9Qz4wP01hdGguY2VpbDpNYXRoLmZsb29yLHo9Qz4wP01hdGgubWluOk1hdGgubWF4LE89Qz4wP01hdGgubWF4Ok1hdGgubWluLEQ9SShTK0wpLFI9UChFLUwpLEY9W1tmPUEoUyldXTtmb3IoYT1EO2EqQzxSKkM7YSs9QyljPVtdLGc9TyhTLGEpLHY9KG09eihFLGErQykpLWcsdT1NYXRoLm1heCgwLE1hdGgubWluKFQtMixNYXRoLmZsb29yKC41KihnK20pKSkpLGg9QShtKSx4JiYocD1vKHUsZy11KSxkPW8odSxtLXUpLGMucHVzaChbZlswXStwWzBdLzMqdixmWzFdK3BbMV0vMyp2XSksYy5wdXNoKFtoWzBdLWRbMF0vMyp2LGhbMV0tZFsxXS8zKnZdKSksYy5wdXNoKGgpLEYucHVzaChjKSxmPWg7cmV0dXJuIEZ9fSx7Ii4uLy4uL2xpYiI6Nzc4fV0sOTY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDt0KCIuLi8uLi9jb25zdGFudHMvZG9jcyIpLkZPUk1BVF9MSU5LLHQoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuVElNRV9GT1JNQVRfTElOSztlLmV4cG9ydHM9e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSxzbW9vdGhpbmc6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLG1pbjowLG1heDoxLjMsZWRpdFR5cGU6ImNhbGMifSx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sZm9udDpuKHtlZGl0VHlwZToiY2FsYyJ9KSxvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiLSIsImxpbmVhciIsImRhdGUiLCJjYXRlZ29yeSJdLGRmbHQ6Ii0iLGVkaXRUeXBlOiJjYWxjIn0sYXV0b3R5cGVudW1iZXJzOmEuYXV0b3R5cGVudW1iZXJzLGF1dG9yYW5nZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwicmV2ZXJzZWQiXSxkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub3JtYWwiLCJ0b3plcm8iLCJub25uZWdhdGl2ZSJdLGRmbHQ6Im5vcm1hbCIsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn1dfSxmaXhlZHJhbmdlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY2hlYXRlcnR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZGV4IiwidmFsdWUiXSxkZmx0OiJ2YWx1ZSIsZWRpdFR5cGU6ImNhbGMifSx0aWNrbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiYXJyYXkiXSxkZmx0OiJhcnJheSIsZWRpdFR5cGU6ImNhbGMifSxudGlja3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRpY2t0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsImVuZCIsImJvdGgiLCJub25lIl0sZGZsdDoic3RhcnQiLGVkaXRUeXBlOiJjYWxjIn0sdGlja2ZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksdGlja2FuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMifSx0aWNrcHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6ImNhbGMifSx0aWNrc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sZXhwb25lbnRmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJlIiwiRSIsInBvd2VyIiwiU0kiLCJCIl0sZGZsdDoiQiIsZWRpdFR5cGU6ImNhbGMifSxtaW5leHBvbmVudDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjMsbWluOjAsZWRpdFR5cGU6ImNhbGMifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb3JtYXRzdG9wczpvKGEudGlja2Zvcm1hdHN0b3BzLCJjYWxjIiwiZnJvbS1yb290IiksY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVscGFkZGluZzp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LGxhYmVscHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJjYWxjIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWlub3JncmlkY291bnQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxzdGFydGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxlbmRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSx0aWNrMDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkdGljazp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhcnJheXRpY2swOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxhcnJheWR0aWNrOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksdGl0bGVvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9fSxlZGl0VHlwZToiY2FsYyJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjQyLCIuLi8uLi9jb25zdGFudHMvZG9jcyI6NzQ4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1Nn1dLDk2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5hZGRPcGFjaXR5LGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGY9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBoPXIubGV0dGVyLHA9ci5mb250fHx7fSxkPW5baCsiYXhpcyJdO2Z1bmN0aW9uIGcocixuKXtyZXR1cm4gby5jb2VyY2UodCxlLGQscixuKX1mdW5jdGlvbiBtKHIsbil7cmV0dXJuIG8uY29lcmNlMih0LGUsZCxyLG4pfXIubmFtZSYmKGUuX25hbWU9ci5uYW1lLGUuX2lkPXIubmFtZSksZygiYXV0b3R5cGVudW1iZXJzIixyLmF1dG90eXBlbnVtYmVyc0RmbHQpO3ZhciB2PWcoInR5cGUiKTsoIi0iPT09diYmKHIuZGF0YSYmZnVuY3Rpb24odCxlKXtpZigiLSIhPT10LnR5cGUpcmV0dXJuO3ZhciByPXQuX2lkLmNoYXJBdCgwKSxuPXRbcisiY2FsZW5kYXIiXTt0LnR5cGU9ZihlLG4se2F1dG90eXBlbnVtYmVyczp0LmF1dG90eXBlbnVtYmVyc30pfShlLHIuZGF0YSksIi0iPT09ZS50eXBlP2UudHlwZT0ibGluZWFyIjp2PXQudHlwZT1lLnR5cGUpLGcoInNtb290aGluZyIpLGcoImNoZWF0ZXJ0eXBlIiksZygic2hvd3RpY2tsYWJlbHMiKSxnKCJsYWJlbHByZWZpeCIsaCsiID0gIiksZygibGFiZWxzdWZmaXgiKSxnKCJzaG93dGlja3ByZWZpeCIpLGcoInNob3d0aWNrc3VmZml4IiksZygic2VwYXJhdGV0aG91c2FuZHMiKSxnKCJ0aWNrZm9ybWF0IiksZygiZXhwb25lbnRmb3JtYXQiKSxnKCJtaW5leHBvbmVudCIpLGcoInNob3dleHBvbmVudCIpLGcoImNhdGVnb3J5b3JkZXIiKSxnKCJ0aWNrbW9kZSIpLGcoInRpY2t2YWxzIiksZygidGlja3RleHQiKSxnKCJ0aWNrMCIpLGcoImR0aWNrIiksImFycmF5Ij09PWUudGlja21vZGUmJihnKCJhcnJheXRpY2swIiksZygiYXJyYXlkdGljayIpKSxnKCJsYWJlbHBhZGRpbmciKSxlLl9ob3ZlcnRpdGxlPWgsImRhdGUiPT09dikmJmEuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiLHIuY2FsZW5kYXIpO3UoZSxyLmZ1bGxMYXlvdXQpLGUuYzJwPW8uaWRlbnRpdHk7dmFyIHk9ZygiY29sb3IiLHIuZGZsdENvbG9yKSx4PXk9PT10LmNvbG9yP3k6cC5jb2xvcjtnKCJ0aXRsZS50ZXh0IikmJihvLmNvZXJjZUZvbnQoZywidGl0bGUuZm9udCIse2ZhbWlseTpwLmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKnAuc2l6ZSksY29sb3I6eH0pLGcoInRpdGxlLm9mZnNldCIpKSxnKCJ0aWNrYW5nbGUiKSxnKCJhdXRvcmFuZ2UiLCFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKSkmJmcoInJhbmdlbW9kZSIpLGcoInJhbmdlIiksZS5jbGVhblJhbmdlKCksZygiZml4ZWRyYW5nZSIpLHModCxlLGcsdiksbCh0LGUsZyx2LHIpLGModCxlLGcse2RhdGE6ci5kYXRhLGRhdGFBdHRyOmh9KTt2YXIgYj1tKCJncmlkY29sb3IiLGkoeSwuMykpLF89bSgiZ3JpZHdpZHRoIiksdz1nKCJzaG93Z3JpZCIpO3d8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgVD1tKCJzdGFydGxpbmVjb2xvciIseSksaz1tKCJzdGFydGxpbmV3aWR0aCIsXyk7Zygic3RhcnRsaW5lIixlLnNob3dncmlkfHwhIVR8fCEhayl8fChkZWxldGUgZS5zdGFydGxpbmVjb2xvcixkZWxldGUgZS5zdGFydGxpbmV3aWR0aCk7dmFyIE09bSgiZW5kbGluZWNvbG9yIix5KSxBPW0oImVuZGxpbmV3aWR0aCIsXyk7cmV0dXJuIGcoImVuZGxpbmUiLGUuc2hvd2dyaWR8fCEhTXx8ISFBKXx8KGRlbGV0ZSBlLmVuZGxpbmVjb2xvcixkZWxldGUgZS5lbmRsaW5ld2lkdGgpLHc/KGcoIm1pbm9yZ3JpZGNvdW50IiksZygibWlub3Jncmlkd2lkdGgiLF8pLGcoIm1pbm9yZ3JpZGNvbG9yIixpKGIsLjA2KSksZS5taW5vcmdyaWRjb3VudHx8KGRlbGV0ZSBlLm1pbm9yZ3JpZHdpZHRoLGRlbGV0ZSBlLm1pbm9yZ3JpZGNvbG9yKSk6KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkV2lkdGgpLCJub25lIj09PWUuc2hvd3RpY2tsYWJlbHMmJihkZWxldGUgZS50aWNrZm9udCxkZWxldGUgZS50aWNrYW5nbGUsZGVsZXRlIGUuc2hvd2V4cG9uZW50LGRlbGV0ZSBlLmV4cG9uZW50Zm9ybWF0LGRlbGV0ZSBlLm1pbmV4cG9uZW50LGRlbGV0ZSBlLnRpY2tmb3JtYXQsZGVsZXRlIGUuc2hvd3RpY2tzdWZmaXgsZGVsZXRlIGUuc2hvd3RpY2twcmVmaXgpLGUuc2hvd3RpY2tzdWZmaXh8fGRlbGV0ZSBlLnRpY2tzdWZmaXgsZS5zaG93dGlja3ByZWZpeHx8ZGVsZXRlIGUudGlja3ByZWZpeCxnKCJ0aWNrbW9kZSIpLGV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo4MjksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6ODMyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjg0OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjg0OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjg1MSwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi9hdHRyaWJ1dGVzIjo5NjR9XSw5Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXkxRCxhPXQoIi4vY2hlYXRlcl9iYXNpcyIpLG89dCgiLi9hcnJheV9taW5tYXgiKSxzPXQoIi4vY2FsY19ncmlkbGluZXMiKSxsPXQoIi4vY2FsY19sYWJlbHMiKSxjPXQoIi4vY2FsY19jbGlwcGF0aCIpLHU9dCgiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSIpLGY9dCgiLi9zbW9vdGhfZmlsbF8yZF9hcnJheSIpLGg9dCgiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiKSxwPXQoIi4vc2V0X2NvbnZlcnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmdldEZyb21JZCh0LGUueGF4aXMpLGQ9bi5nZXRGcm9tSWQodCxlLnlheGlzKSxnPWUuYWF4aXMsbT1lLmJheGlzLHY9ZS54LHk9ZS55LHg9W107diYmaSh2KSYmeC5wdXNoKCJ4IikseSYmaSh5KSYmeC5wdXNoKCJ5IikseC5sZW5ndGgmJmgoZSxnLG0sImEiLCJiIix4KTt2YXIgYj1lLl9hPWUuX2F8fGUuYSxfPWUuX2I9ZS5fYnx8ZS5iO3Y9ZS5feHx8ZS54LHk9ZS5feXx8ZS55O3ZhciB3PXt9O2lmKGUuX2NoZWF0ZXIpe3ZhciBUPSJpbmRleCI9PT1nLmNoZWF0ZXJ0eXBlP2IubGVuZ3RoOmIsaz0iaW5kZXgiPT09bS5jaGVhdGVydHlwZT9fLmxlbmd0aDpfO3Y9YShULGssZS5jaGVhdGVyc2xvcGUpfWUuX3g9dj11KHYpLGUuX3k9eT11KHkpLGYodixiLF8pLGYoeSxiLF8pLHAoZSksZS5zZXRTY2FsZSgpO3ZhciBNPW8odiksQT1vKHkpLFM9LjUqKE1bMV0tTVswXSksRT0uNSooTVsxXStNWzBdKSxDPS41KihBWzFdLUFbMF0pLEw9LjUqKEFbMV0rQVswXSk7cmV0dXJuIE09W0UtMS4zKlMsRSsxLjMqU10sQT1bTC0xLjMqQyxMKzEuMypDXSxlLl9leHRyZW1lc1tyLl9pZF09bi5maW5kRXh0cmVtZXMocixNLHtwYWRkZWQ6ITB9KSxlLl9leHRyZW1lc1tkLl9pZF09bi5maW5kRXh0cmVtZXMoZCxBLHtwYWRkZWQ6ITB9KSxzKGUsImEiLCJiIikscyhlLCJiIiwiYSIpLGwoZSxnKSxsKGUsbSksdy5jbGlwc2VnbWVudHM9YyhlLl94Y3RybCxlLl95Y3RybCxnLG0pLHcueD12LHcueT15LHcuYT1iLHcuYj1fLFt3XX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjEwNjcsIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6IjoxMDY5LCIuL2FycmF5X21pbm1heCI6OTYzLCIuL2NhbGNfY2xpcHBhdGgiOjk2OSwiLi9jYWxjX2dyaWRsaW5lcyI6OTcwLCIuL2NhbGNfbGFiZWxzIjo5NzEsIi4vY2hlYXRlcl9iYXNpcyI6OTczLCIuL3NldF9jb252ZXJ0Ijo5ODYsIi4vc21vb3RoX2ZpbGxfMmRfYXJyYXkiOjk4N31dLDk2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHM9W10sbD0hIXIuc21vb3RoaW5nLGM9ISFuLnNtb290aGluZyx1PXRbMF0ubGVuZ3RoLTEsZj10Lmxlbmd0aC0xO2ZvcihpPTAsYT1bXSxvPVtdO2k8PXU7aSsrKWFbaV09dFswXVtpXSxvW2ldPWVbMF1baV07Zm9yKHMucHVzaCh7eDphLHk6byxiaWN1YmljOmx9KSxpPTAsYT1bXSxvPVtdO2k8PWY7aSsrKWFbaV09dFtpXVt1XSxvW2ldPWVbaV1bdV07Zm9yKHMucHVzaCh7eDphLHk6byxiaWN1YmljOmN9KSxpPXUsYT1bXSxvPVtdO2k+PTA7aS0tKWFbdS1pXT10W2ZdW2ldLG9bdS1pXT1lW2ZdW2ldO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpsfSksaT1mLGE9W10sbz1bXTtpPj0wO2ktLSlhW2YtaV09dFtpXVswXSxvW2YtaV09ZVtpXVswXTtyZXR1cm4gcy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6Y30pLHN9fSx7fV0sOTcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scyxsLGMsdSxmLGgscCxkLGcsbSx2LHkseD10WyJfIitlXSxiPXRbZSsiYXhpcyJdLF89Yi5fZ3JpZGxpbmVzPVtdLHc9Yi5fbWlub3JncmlkbGluZXM9W10sVD1iLl9ib3VuZGFyeWxpbmVzPVtdLGs9dFsiXyIrcl0sTT10W3IrImF4aXMiXTsiYXJyYXkiPT09Yi50aWNrbW9kZSYmKGIudGlja3ZhbHM9eC5zbGljZSgpKTt2YXIgQT10Ll94Y3RybCxTPXQuX3ljdHJsLEU9QVswXS5sZW5ndGgsQz1BLmxlbmd0aCxMPXQuX2EubGVuZ3RoLEk9dC5fYi5sZW5ndGg7bi5wcmVwVGlja3MoYiksImFycmF5Ij09PWIudGlja21vZGUmJmRlbGV0ZSBiLnRpY2t2YWxzO3ZhciBQPWIuc21vb3RoaW5nPzM6MTtmdW5jdGlvbiB6KG4pe3ZhciBpLGEsbyxzLGwsYyx1LGYscCxkLGcsbSx2PVtdLHk9W10seD17fTtpZigiYiI9PT1lKWZvcihhPXQuYjJqKG4pLG89TWF0aC5mbG9vcihNYXRoLm1heCgwLE1hdGgubWluKEktMixhKSkpLHM9YS1vLHgubGVuZ3RoPUkseC5jcm9zc0xlbmd0aD1MLHgueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsYSl9LHguZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIscyl9LGk9MDtpPEw7aSsrKWM9TWF0aC5taW4oTC0yLGkpLHU9aS1jLGY9dC5ldmFseHkoW10saSxhKSxNLnNtb290aGluZyYmaT4wJiYocD10LmR4eWRpKFtdLGktMSxvLDAscyksdi5wdXNoKGxbMF0rcFswXS8zKSx5LnB1c2gobFsxXStwWzFdLzMpLGQ9dC5keHlkaShbXSxpLTEsbywxLHMpLHYucHVzaChmWzBdLWRbMF0vMykseS5wdXNoKGZbMV0tZFsxXS8zKSksdi5wdXNoKGZbMF0pLHkucHVzaChmWzFdKSxsPWY7ZWxzZSBmb3IoaT10LmEyaShuKSxjPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbihMLTIsaSkpKSx1PWktYyx4Lmxlbmd0aD1MLHguY3Jvc3NMZW5ndGg9SSx4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxpLGUpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLGMsZSx1LHIpfSxhPTA7YTxJO2ErKylvPU1hdGgubWluKEktMixhKSxzPWEtbyxmPXQuZXZhbHh5KFtdLGksYSksTS5zbW9vdGhpbmcmJmE+MCYmKGc9dC5keHlkaihbXSxjLGEtMSx1LDApLHYucHVzaChsWzBdK2dbMF0vMykseS5wdXNoKGxbMV0rZ1sxXS8zKSxtPXQuZHh5ZGooW10sYyxhLTEsdSwxKSx2LnB1c2goZlswXS1tWzBdLzMpLHkucHVzaChmWzFdLW1bMV0vMykpLHYucHVzaChmWzBdKSx5LnB1c2goZlsxXSksbD1mO3JldHVybiB4LmF4aXNMZXR0ZXI9ZSx4LmF4aXM9Yix4LmNyb3NzQXhpcz1NLHgudmFsdWU9bix4LmNvbnN0dmFyPXIseC5pbmRleD1oLHgueD12LHgueT15LHguc21vb3RoaW5nPU0uc21vb3RoaW5nLHh9ZnVuY3Rpb24gTyhuKXt2YXIgaSxhLG8scyxsLGM9W10sdT1bXSxmPXt9O2lmKGYubGVuZ3RoPXgubGVuZ3RoLGYuY3Jvc3NMZW5ndGg9ay5sZW5ndGgsImIiPT09ZSlmb3Iobz1NYXRoLm1heCgwLE1hdGgubWluKEktMixuKSksbD1NYXRoLm1pbigxLE1hdGgubWF4KDAsbi1vKSksZi54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sZSxuKX0sZi5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLG8scixsKX0saT0wO2k8RTtpKyspY1tpXT1BW24qUF1baV0sdVtpXT1TW24qUF1baV07ZWxzZSBmb3IoYT1NYXRoLm1heCgwLE1hdGgubWluKEwtMixuKSkscz1NYXRoLm1pbigxLE1hdGgubWF4KDAsbi1hKSksZi54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sbixlKX0sZi5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxhLGUscyxyKX0saT0wO2k8QztpKyspY1tpXT1BW2ldW24qUF0sdVtpXT1TW2ldW24qUF07cmV0dXJuIGYuYXhpc0xldHRlcj1lLGYuYXhpcz1iLGYuY3Jvc3NBeGlzPU0sZi52YWx1ZT14W25dLGYuY29uc3R2YXI9cixmLmluZGV4PW4sZi54PWMsZi55PXUsZi5zbW9vdGhpbmc9TS5zbW9vdGhpbmcsZn1pZigiYXJyYXkiPT09Yi50aWNrbW9kZSl7Zm9yKGw9NWUtMTUsdT0oYz1bTWF0aC5mbG9vcigoeC5sZW5ndGgtMS1iLmFycmF5dGljazApL2IuYXJyYXlkdGljayooMStsKSksTWF0aC5jZWlsKC1iLmFycmF5dGljazAvYi5hcnJheWR0aWNrLygxK2wpKV0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpKVswXS0xLGY9Y1sxXSsxLGg9dTtoPGY7aCsrKShvPWIuYXJyYXl0aWNrMCtiLmFycmF5ZHRpY2sqaCk8MHx8bz54Lmxlbmd0aC0xfHxfLnB1c2goaShPKG8pLHtjb2xvcjpiLmdyaWRjb2xvcix3aWR0aDpiLmdyaWR3aWR0aH0pKTtmb3IoaD11O2g8ZjtoKyspaWYocz1iLmFycmF5dGljazArYi5hcnJheWR0aWNrKmgsZz1NYXRoLm1pbihzK2IuYXJyYXlkdGljayx4Lmxlbmd0aC0xKSwhKHM8MHx8cz54Lmxlbmd0aC0xfHxnPDB8fGc+eC5sZW5ndGgtMSkpZm9yKG09eFtzXSx2PXhbZ10sYT0wO2E8Yi5taW5vcmdyaWRjb3VudDthKyspKHk9Zy1zKTw9MHx8KGQ9bSsodi1tKSooYSsxKS8oYi5taW5vcmdyaWRjb3VudCsxKSooYi5hcnJheWR0aWNrL3kpKTx4WzBdfHxkPnhbeC5sZW5ndGgtMV18fHcucHVzaChpKHooZCkse2NvbG9yOmIubWlub3JncmlkY29sb3Isd2lkdGg6Yi5taW5vcmdyaWR3aWR0aH0pKTtiLnN0YXJ0bGluZSYmVC5wdXNoKGkoTygwKSx7Y29sb3I6Yi5zdGFydGxpbmVjb2xvcix3aWR0aDpiLnN0YXJ0bGluZXdpZHRofSkpLGIuZW5kbGluZSYmVC5wdXNoKGkoTyh4Lmxlbmd0aC0xKSx7Y29sb3I6Yi5lbmRsaW5lY29sb3Isd2lkdGg6Yi5lbmRsaW5ld2lkdGh9KSl9ZWxzZXtmb3IobD01ZS0xNSx1PShjPVtNYXRoLmZsb29yKCh4W3gubGVuZ3RoLTFdLWIudGljazApL2IuZHRpY2sqKDErbCkpLE1hdGguY2VpbCgoeFswXS1iLnRpY2swKS9iLmR0aWNrLygxK2wpKV0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpKVswXSxmPWNbMV0saD11O2g8PWY7aCsrKXA9Yi50aWNrMCtiLmR0aWNrKmgsXy5wdXNoKGkoeihwKSx7Y29sb3I6Yi5ncmlkY29sb3Isd2lkdGg6Yi5ncmlkd2lkdGh9KSk7Zm9yKGg9dS0xO2g8ZisxO2grKylmb3IocD1iLnRpY2swK2IuZHRpY2sqaCxhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoZD1wK2IuZHRpY2sqKGErMSkvKGIubWlub3JncmlkY291bnQrMSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoeihkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZULnB1c2goaSh6KHhbMF0pLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZULnB1c2goaSh6KHhbeC5sZW5ndGgtMV0pLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOH1dLDk3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZS5fbGFiZWxzPVtdLGw9ZS5fZ3JpZGxpbmVzO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspbz1sW3JdLC0xIT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtwcmVmaXg6dm9pZCAwLHN1ZmZpeDp2b2lkIDAsZW5kQW5jaG9yOiEwLHh5Om8ueHkoMCksZHh5Om8uZHh5KDAsMCksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSksLTEhPT1bImVuZCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtlbmRBbmNob3I6ITEseHk6by54eShvLmNyb3NzTGVuZ3RoLTEpLGR4eTpvLmR4eShvLmNyb3NzTGVuZ3RoLTIsMSksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOH1dLDk3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1lWzBdLGE9dFsxXS1lWzFdLG89clswXS1lWzBdLHM9clsxXS1lWzFdLGw9TWF0aC5wb3coaSppK2EqYSwuMjUpLGM9TWF0aC5wb3cobypvK3MqcywuMjUpLHU9KGMqYyppLWwqbCpvKSpuLGY9KGMqYyphLWwqbCpzKSpuLGg9YyoobCtjKSozLHA9bCoobCtjKSozO3JldHVybltbZVswXSsoaCYmdS9oKSxlWzFdKyhoJiZmL2gpXSxbZVswXS0ocCYmdS9wKSxlWzFdLShwJiZmL3ApXV19fSx7fV0sOTczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scyxsLGMsdT1bXSxmPW4odCk/dC5sZW5ndGg6dCxoPW4oZSk/ZS5sZW5ndGg6ZSxwPW4odCk/dDpudWxsLGQ9bihlKT9lOm51bGw7cCYmKG89KHAubGVuZ3RoLTEpLyhwW3AubGVuZ3RoLTFdLXBbMF0pLyhmLTEpKSxkJiYocz0oZC5sZW5ndGgtMSkvKGRbZC5sZW5ndGgtMV0tZFswXSkvKGgtMSkpO3ZhciBnPTEvMCxtPS0xLzA7Zm9yKGE9MDthPGg7YSsrKWZvcih1W2FdPVtdLGw9ZD8oZFthXS1kWzBdKSpzOmEvKGgtMSksaT0wO2k8ZjtpKyspYz0ocD8ocFtpXS1wWzBdKSpvOmkvKGYtMSkpLWwqcixnPU1hdGgubWluKGMsZyksbT1NYXRoLm1heChjLG0pLHVbYV1baV09Yzt2YXIgdj0xLyhtLWcpLHk9LWcqdjtmb3IoYT0wO2E8aDthKyspZm9yKGk9MDtpPGY7aSsrKXVbYV1baV09dip1W2FdW2ldK3k7cmV0dXJuIHV9fSx7Ii4uLy4uL2xpYiI6Nzc4fV0sOTc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2F0bXVsbF9yb20iKSxpPXQoIi4uLy4uL2xpYiIpLmVuc3VyZUFycmF5O2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuPS0uNSpyWzBdKzEuNSplWzBdLGk9LS41KnJbMV0rMS41KmVbMV07cmV0dXJuWygyKm4rdFswXSkvMywoMippK3RbMV0pLzNdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsdSxmLGgscCxkLGcsbSx2LHkseD1yWzBdLmxlbmd0aCxiPXIubGVuZ3RoLF89cz8zKngtMjp4LHc9bD8zKmItMjpiO2Zvcih0PWkodCx3KSxlPWkoZSx3KSxmPTA7Zjx3O2YrKyl0W2ZdPWkodFtmXSxfKSxlW2ZdPWkoZVtmXSxfKTtmb3IodT0wLGg9MDt1PGI7dSsrLGgrPWw/MzoxKWZvcihwPXRbaF0sZD1lW2hdLGc9clt1XSxtPW9bdV0sYz0wLGY9MDtjPHg7YysrLGYrPXM/MzoxKXBbZl09Z1tjXSxkW2ZdPW1bY107aWYocylmb3IodT0wLGg9MDt1PGI7dSsrLGgrPWw/MzoxKXtmb3IoYz0xLGY9MztjPHgtMTtjKyssZis9Myl2PW4oW3JbdV1bYy0xXSxvW3VdW2MtMV1dLFtyW3VdW2NdLG9bdV1bY11dLFtyW3VdW2MrMV0sb1t1XVtjKzFdXSxzKSx0W2hdW2YtMV09dlswXVswXSxlW2hdW2YtMV09dlswXVsxXSx0W2hdW2YrMV09dlsxXVswXSxlW2hdW2YrMV09dlsxXVsxXTt5PWEoW3RbaF1bMF0sZVtoXVswXV0sW3RbaF1bMl0sZVtoXVsyXV0sW3RbaF1bM10sZVtoXVszXV0pLHRbaF1bMV09eVswXSxlW2hdWzFdPXlbMV0seT1hKFt0W2hdW18tMV0sZVtoXVtfLTFdXSxbdFtoXVtfLTNdLGVbaF1bXy0zXV0sW3RbaF1bXy00XSxlW2hdW18tNF1dKSx0W2hdW18tMl09eVswXSxlW2hdW18tMl09eVsxXX1pZihsKWZvcihmPTA7ZjxfO2YrKyl7Zm9yKGg9MztoPHctMztoKz0zKXY9bihbdFtoLTNdW2ZdLGVbaC0zXVtmXV0sW3RbaF1bZl0sZVtoXVtmXV0sW3RbaCszXVtmXSxlW2grM11bZl1dLGwpLHRbaC0xXVtmXT12WzBdWzBdLGVbaC0xXVtmXT12WzBdWzFdLHRbaCsxXVtmXT12WzFdWzBdLGVbaCsxXVtmXT12WzFdWzFdO3k9YShbdFswXVtmXSxlWzBdW2ZdXSxbdFsyXVtmXSxlWzJdW2ZdXSxbdFszXVtmXSxlWzNdW2ZdXSksdFsxXVtmXT15WzBdLGVbMV1bZl09eVsxXSx5PWEoW3Rbdy0xXVtmXSxlW3ctMV1bZl1dLFt0W3ctM11bZl0sZVt3LTNdW2ZdXSxbdFt3LTRdW2ZdLGVbdy00XVtmXV0pLHRbdy0yXVtmXT15WzBdLGVbdy0yXVtmXT15WzFdfWlmKHMmJmwpZm9yKGg9MTtoPHc7aCs9KGgrMSklMz09MD8yOjEpe2ZvcihmPTM7ZjxfLTM7Zis9Myl2PW4oW3RbaF1bZi0zXSxlW2hdW2YtM11dLFt0W2hdW2ZdLGVbaF1bZl1dLFt0W2hdW2YrM10sZVtoXVtmKzNdXSxzKSx0W2hdW2YtMV09LjUqKHRbaF1bZi0xXSt2WzBdWzBdKSxlW2hdW2YtMV09LjUqKGVbaF1bZi0xXSt2WzBdWzFdKSx0W2hdW2YrMV09LjUqKHRbaF1bZisxXSt2WzFdWzBdKSxlW2hdW2YrMV09LjUqKGVbaF1bZisxXSt2WzFdWzFdKTt5PWEoW3RbaF1bMF0sZVtoXVswXV0sW3RbaF1bMl0sZVtoXVsyXV0sW3RbaF1bM10sZVtoXVszXV0pLHRbaF1bMV09LjUqKHRbaF1bMV0reVswXSksZVtoXVsxXT0uNSooZVtoXVsxXSt5WzFdKSx5PWEoW3RbaF1bXy0xXSxlW2hdW18tMV1dLFt0W2hdW18tM10sZVtoXVtfLTNdXSxbdFtoXVtfLTRdLGVbaF1bXy00XV0pLHRbaF1bXy0yXT0uNSoodFtoXVtfLTJdK3lbMF0pLGVbaF1bXy0yXT0uNSooZVtoXVtfLTJdK3lbMV0pfXJldHVyblt0LGVdfX0seyIuLi8uLi9saWIiOjc3OCwiLi9jYXRtdWxsX3JvbSI6OTcyfV0sOTc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17UkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U6MWUtNn19LHt9XSw5NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBoPWkqaSxwPTEtaSxkPXAqcCxnPXAqaSoyLG09LTMqZCx2PTMqKGQtZykseT0zKihnLWgpLHg9MypoLGI9YSphLF89YiphLHc9MS1hLFQ9dyp3LGs9VCp3O2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspbz1tKih1PXRbZl0pW25dW3JdK3YqdVtuXVtyKzFdK3kqdVtuXVtyKzJdK3gqdVtuXVtyKzNdLHM9bSp1W24rMV1bcl0rdip1W24rMV1bcisxXSt5KnVbbisxXVtyKzJdK3gqdVtuKzFdW3IrM10sbD1tKnVbbisyXVtyXSt2KnVbbisyXVtyKzFdK3kqdVtuKzJdW3IrMl0reCp1W24rMl1bciszXSxjPW0qdVtuKzNdW3JdK3YqdVtuKzNdW3IrMV0reSp1W24rM11bcisyXSt4KnVbbiszXVtyKzNdLGVbZl09aypvKzMqKFQqYSpzK3cqYipsKStfKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSkscio9Mzt2YXIgdT1pKmksZj0xLWksaD1mKmYscD1mKmkqMixkPS0zKmgsZz0zKihoLXApLG09MyoocC11KSx2PTMqdSx5PTEtYTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89ZCooYz10W2xdKVtuXVtyXStnKmNbbl1bcisxXSttKmNbbl1bcisyXSt2KmNbbl1bciszXSxzPWQqY1tuKzFdW3JdK2cqY1tuKzFdW3IrMV0rbSpjW24rMV1bcisyXSt2KmNbbisxXVtyKzNdLGVbbF09eSpvK2EqcztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSksbio9Mzt2YXIgaD1hKmEscD1oKmEsZD0xLWEsZz1kKmQsbT1nKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShmPXRbdV0pW25dW3IrMV0tZltuXVtyXSxzPWZbbisxXVtyKzFdLWZbbisxXVtyXSxsPWZbbisyXVtyKzFdLWZbbisyXVtyXSxjPWZbbiszXVtyKzFdLWZbbiszXVtyXSxlW3VdPW0qbyszKihnKmEqcytkKmgqbCkrcCpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW25dW3IrMV0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbisxXVtyXSxlW2xdPXUqbythKnM7cmV0dXJuIGV9fX0se31dLDk3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxmO2V8fChlPVtdKSxyKj0zLG4qPTM7dmFyIGg9aSppLHA9aCppLGQ9MS1pLGc9ZCpkLG09ZypkLHY9YSphLHk9MS1hLHg9eSp5LGI9eSphKjIsXz0tMyp4LHc9MyooeC1iKSxUPTMqKGItdiksaz0zKnY7Zm9yKGY9MDtmPHQubGVuZ3RoO2YrKylvPV8qKHU9dFtmXSlbbl1bcl0rdyp1W24rMV1bcl0rVCp1W24rMl1bcl0rayp1W24rM11bcl0scz1fKnVbbl1bcisxXSt3KnVbbisxXVtyKzFdK1QqdVtuKzJdW3IrMV0rayp1W24rM11bcisxXSxsPV8qdVtuXVtyKzJdK3cqdVtuKzFdW3IrMl0rVCp1W24rMl1bcisyXStrKnVbbiszXVtyKzJdLGM9Xyp1W25dW3IrM10rdyp1W24rMV1bciszXStUKnVbbisyXVtyKzNdK2sqdVtuKzNdW3IrM10sZVtmXT1tKm8rMyooZyppKnMrZCpoKmwpK3AqYztyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSkscio9Mzt2YXIgaD1hKmEscD1oKmEsZD0xLWEsZz1kKmQsbT1nKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShmPXRbdV0pW24rMV1bcl0tZltuXVtyXSxzPWZbbisxXVtyKzFdLWZbbl1bcisxXSxsPWZbbisxXVtyKzJdLWZbbl1bcisyXSxjPWZbbisxXVtyKzNdLWZbbl1bciszXSxlW3VdPW0qbyszKihnKmEqcytkKmgqbCkrcCpjO3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pLG4qPTM7dmFyIHU9MS1pLGY9YSphLGg9MS1hLHA9aCpoLGQ9aCphKjIsZz0tMypwLG09MyoocC1kKSx2PTMqKGQtZikseT0zKmY7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPWcqKGM9dFtsXSlbbl1bcl0rbSpjW24rMV1bcl0rdipjW24rMl1bcl0reSpjW24rM11bcl0scz1nKmNbbl1bcisxXSttKmNbbisxXVtyKzFdK3YqY1tuKzJdW3IrMV0reSpjW24rM11bcisxXSxlW2xdPXUqbytpKnM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pO3ZhciB1PTEtaTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89KGM9dFtsXSlbbisxXVtyXS1jW25dW3JdLHM9Y1tuKzFdW3IrMV0tY1tuXVtyKzFdLGVbbF09dSpvK2kqcztyZXR1cm4gZX19fSx7fV0sOTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWUtMixvPXItMjtyZXR1cm4gbiYmaT9mdW5jdGlvbihlLHIsbil7dmFyIGkscyxsLGMsdSxmO2V8fChlPVtdKTt2YXIgaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtoKj0zLHAqPTM7dmFyIG09ZCpkLHY9bSpkLHk9MS1kLHg9eSp5LGI9eCp5LF89ZypnLHc9XypnLFQ9MS1nLGs9VCpULE09aypUO2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspaT1iKih1PXRbZl0pW3BdW2hdKzMqKHgqZCp1W3BdW2grMV0reSptKnVbcF1baCsyXSkrdip1W3BdW2grM10scz1iKnVbcCsxXVtoXSszKih4KmQqdVtwKzFdW2grMV0reSptKnVbcCsxXVtoKzJdKSt2KnVbcCsxXVtoKzNdLGw9Yip1W3ArMl1baF0rMyooeCpkKnVbcCsyXVtoKzFdK3kqbSp1W3ArMl1baCsyXSkrdip1W3ArMl1baCszXSxjPWIqdVtwKzNdW2hdKzMqKHgqZCp1W3ArM11baCsxXSt5Km0qdVtwKzNdW2grMl0pK3YqdVtwKzNdW2grM10sZVtmXT1NKmkrMyooaypnKnMrVCpfKmwpK3cqYztyZXR1cm4gZX06bj9mdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHUsZixoPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSkscD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItaCkpLGc9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tcCkpO2gqPTM7dmFyIG09ZCpkLHY9bSpkLHk9MS1kLHg9eSp5LGI9eCp5LF89MS1nO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaT1fKihmPXRbdV0pW3BdW2hdK2cqZltwKzFdW2hdLHM9XypmW3BdW2grMV0rZypmW3ArMV1baCsxXSxsPV8qZltwXVtoKzJdK2cqZltwKzFdW2grMV0sYz1fKmZbcF1baCszXStnKmZbcCsxXVtoKzFdLGVbdV09YippKzMqKHgqZCpzK3kqbSpsKSt2KmM7cmV0dXJuIGV9Omk/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGYsaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtwKj0zO3ZhciBtPWcqZyx2PW0qZyx5PTEtZyx4PXkqeSxiPXgqeSxfPTEtZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWk9XyooZj10W3VdKVtwXVtoXStkKmZbcF1baCsxXSxzPV8qZltwKzFdW2hdK2QqZltwKzFdW2grMV0sbD1fKmZbcCsyXVtoXStkKmZbcCsyXVtoKzFdLGM9XypmW3ArM11baF0rZCpmW3ArM11baCsxXSxlW3VdPWIqaSszKih4Kmcqcyt5Km0qbCkrdipjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxmPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksaD1NYXRoLm1heCgwLE1hdGgubWluKDEsci11KSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1mKSksZD0xLXAsZz0xLWg7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylpPWcqKGM9dFtsXSlbZl1bdV0raCpjW2ZdW3UrMV0scz1nKmNbZisxXVt1XStoKmNbZisxXVt1KzFdLGVbbF09ZCppK3AqcztyZXR1cm4gZX19fSx7fV0sOTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi94eV9kZWZhdWx0cyIpLGE9dCgiLi9hYl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWUuX2NsaXBQYXRoSWQ9ImNsaXAiK2UudWlkKyJjYXJwZXQiO3ZhciB1PWMoImNvbG9yIixzLmRlZmF1bHRMaW5lKTsobi5jb2VyY2VGb250KGMsImZvbnQiKSxjKCJjYXJwZXQiKSxhKHQsZSxsLGMsdSksZS5hJiZlLmIpPyhlLmEubGVuZ3RoPDMmJihlLmFheGlzLnNtb290aGluZz0wKSxlLmIubGVuZ3RoPDMmJihlLmJheGlzLnNtb290aGluZz0wKSxpKHQsZSxjKXx8KGUudmlzaWJsZT0hMSksZS5fY2hlYXRlciYmYygiY2hlYXRlcnNsb3BlIikpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2NDIsIi4uLy4uL2xpYiI6Nzc4LCIuL2FiX2RlZmF1bHRzIjo5NjIsIi4vYXR0cmlidXRlcyI6OTY0LCIuL3h5X2RlZmF1bHRzIjo5ODh9XSw5ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxwbG90OnQoIi4vcGxvdCIpLGNhbGM6dCgiLi9jYWxjIiksYW5pbWF0YWJsZTohMCxpc0NvbnRhaW5lcjohMCxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2FycGV0IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiY2FycGV0IiwiY2FycGV0QXhpcyIsIm5vdExlZ2VuZElzb2xhdGFibGUiLCJub011bHRpQ2F0ZWdvcnkiLCJub0hvdmVyIiwibm9Tb3J0aW5nQnlWYWx1ZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuL2F0dHJpYnV0ZXMiOjk2NCwiLi9jYWxjIjo5NjgsIi4vZGVmYXVsdHMiOjk3OSwiLi9wbG90Ijo5ODV9XSw5ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5fZnVsbERhdGEubGVuZ3RoLGk9MDtpPG47aSsrKXt2YXIgYT10Ll9mdWxsRGF0YVtpXTtpZihhLmluZGV4IT09ZS5pbmRleCYmKCJjYXJwZXQiPT09YS50eXBlJiYocnx8KHI9YSksYS5jYXJwZXQ9PT1lLmNhcnBldCkpKXJldHVybiBhfXJldHVybiByfX0se31dLDk4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4iIjt2YXIgbixpPVtdLGE9cj8zOjE7Zm9yKG49MDtuPHQubGVuZ3RoO24rPWEpaS5wdXNoKHRbbl0rIiwiK2Vbbl0pLHImJm48dC5sZW5ndGgtYSYmKGkucHVzaCgiQyIpLGkucHVzaChbdFtuKzFdKyIsIitlW24rMV0sdFtuKzJdKyIsIitlW24rMl0rIiAiXS5qb2luKCIgIikpKTtyZXR1cm4gaS5qb2luKHI/IiI6IkwiKX19LHt9XSw5ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpO2ZvcihuKHQpP3QubGVuZ3RoPmUubGVuZ3RoJiYodD10LnNsaWNlKDAsZS5sZW5ndGgpKTp0PVtdLGk9MDtpPGUubGVuZ3RoO2krKyl0W2ldPXIoZVtpXSk7cmV0dXJuIHR9fSx7Ii4uLy4uL2xpYiI6Nzc4fV0sOTg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89aVswXSp0LmRwZHgoZSkscz1pWzFdKnQuZHBkeShyKSxsPTEsYz0xO2lmKGEpe3ZhciB1PU1hdGguc3FydChpWzBdKmlbMF0raVsxXSppWzFdKSxmPU1hdGguc3FydChhWzBdKmFbMF0rYVsxXSphWzFdKSxoPShpWzBdKmFbMF0raVsxXSphWzFdKS91L2Y7Yz1NYXRoLm1heCgwLGgpfXZhciBwPTE4MCpNYXRoLmF0YW4yKHMsbykvTWF0aC5QSTtyZXR1cm4gcDwtOTA/KHArPTE4MCxsPS1sKTpwPjkwJiYocC09MTgwLGw9LWwpLHthbmdsZTpwLGZsaXA6bCxwOnQuYzJwKG4sZSxyKSxvZmZzZXRNdWx0cGxpZXI6Y319fSx7fV0sOTg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4vbWFwXzFkX2FycmF5Iiksbz10KCIuL21ha2VwYXRoIikscz10KCIuL29yaWVudF90ZXh0IiksbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uLy4uL2xpYiIpLHU9Yy5zdHJSb3RhdGUsZj1jLnN0clRyYW5zbGF0ZSxoPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKTtmdW5jdGlvbiBwKHQsZSxyLGkscyxsKXt2YXIgYz0iY29uc3QtIitzKyItbGluZXMiLHU9ci5zZWxlY3RBbGwoIi4iK2MpLmRhdGEobCk7dS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoYywhMCkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKSx1LmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPXIscz1pLngsbD1pLnksYz1hKFtdLHMsdC5jMnApLHU9YShbXSxsLGUuYzJwKSxmPSJNIitvKGMsdSxpLnNtb290aGluZyk7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsZikuc3R5bGUoInN0cm9rZS13aWR0aCIsaS53aWR0aCkuc3R5bGUoInN0cm9rZSIsaS5jb2xvcikuc3R5bGUoImZpbGwiLCJub25lIil9KSksdS5leGl0KCkucmVtb3ZlKCl9ZnVuY3Rpb24gZCh0LGUscixhLG8sYyxoLHApe3ZhciBkPWMuc2VsZWN0QWxsKCJ0ZXh0LiIrcCkuZGF0YShoKTtkLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChwLCEwKTt2YXIgZz0wLG09e307cmV0dXJuIGQuZWFjaCgoZnVuY3Rpb24obyxjKXt2YXIgaDtpZigiYXV0byI9PT1vLmF4aXMudGlja2FuZ2xlKWg9cyhhLGUscixvLnh5LG8uZHh5KTtlbHNle3ZhciBwPShvLmF4aXMudGlja2FuZ2xlKzE4MCkqTWF0aC5QSS8xODA7aD1zKGEsZSxyLG8ueHksW01hdGguY29zKHApLE1hdGguc2luKHApXSl9Y3x8KG09e2FuZ2xlOmguYW5nbGUsZmxpcDpoLmZsaXB9KTt2YXIgZD0oby5lbmRBbmNob3I/LTE6MSkqaC5mbGlwLHY9bi5zZWxlY3QodGhpcykuYXR0cih7InRleHQtYW5jaG9yIjpkPjA/InN0YXJ0IjoiZW5kIiwiZGF0YS1ub3RleCI6MX0pLmNhbGwoaS5mb250LG8uZm9udCkudGV4dChvLnRleHQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCkseT1pLmJCb3godGhpcyk7di5hdHRyKCJ0cmFuc2Zvcm0iLGYoaC5wWzBdLGgucFsxXSkrdShoLmFuZ2xlKStmKG8uYXhpcy5sYWJlbHBhZGRpbmcqZCwuMyp5LmhlaWdodCkpLGc9TWF0aC5tYXgoZyx5LndpZHRoK28uYXhpcy5sYWJlbHBhZGRpbmcpfSkpLGQuZXhpdCgpLnJlbW92ZSgpLG0ubWF4RXh0ZW50PWcsbX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGw9ZS54YXhpcyx1PWUueWF4aXMsZj10Ll9mdWxsTGF5b3V0Ll9jbGlwcztjLm1ha2VUcmFjZUdyb3VwcyhpLHIsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksaT1lWzBdLGg9aS50cmFjZSxnPWguYWF4aXMsbT1oLmJheGlzLHk9Yy5lbnN1cmVTaW5nbGUociwiZyIsIm1pbm9ybGF5ZXIiKSx4PWMuZW5zdXJlU2luZ2xlKHIsImciLCJtYWpvcmxheWVyIiksYj1jLmVuc3VyZVNpbmdsZShyLCJnIiwiYm91bmRhcnlsYXllciIpLF89Yy5lbnN1cmVTaW5nbGUociwiZyIsImxhYmVsbGF5ZXIiKTtyLnN0eWxlKCJvcGFjaXR5IixoLm9wYWNpdHkpLHAobCx1LHgsZywiYSIsZy5fZ3JpZGxpbmVzKSxwKGwsdSx4LG0sImIiLG0uX2dyaWRsaW5lcykscChsLHUseSxnLCJhIixnLl9taW5vcmdyaWRsaW5lcykscChsLHUseSxtLCJiIixtLl9taW5vcmdyaWRsaW5lcykscChsLHUsYixnLCJhLWJvdW5kYXJ5IixnLl9ib3VuZGFyeWxpbmVzKSxwKGwsdSxiLG0sImItYm91bmRhcnkiLG0uX2JvdW5kYXJ5bGluZXMpO3ZhciB3PWQodCxsLHUsaCxpLF8sZy5fbGFiZWxzLCJhLWxhYmVsIiksVD1kKHQsbCx1LGgsaSxfLG0uX2xhYmVscywiYi1sYWJlbCIpOyFmdW5jdGlvbih0LGUscixuLGksYSxvLGwpe3ZhciB1LGYsaCxwLGQ9Yy5hZ2dOdW1zKE1hdGgubWluLG51bGwsci5hKSxnPWMuYWdnTnVtcyhNYXRoLm1heCxudWxsLHIuYSksbT1jLmFnZ051bXMoTWF0aC5taW4sbnVsbCxyLmIpLHk9Yy5hZ2dOdW1zKE1hdGgubWF4LG51bGwsci5iKTt1PS41KihkK2cpLGY9bSxoPXIuYWIyeHkodSxmLCEwKSxwPXIuZHh5ZGFfcm91Z2godSxmKSx2b2lkIDA9PT1vLmFuZ2xlJiZjLmV4dGVuZEZsYXQobyxzKHIsaSxhLGgsci5keHlkYl9yb3VnaCh1LGYpKSk7dih0LGUscixuLGgscCxyLmFheGlzLGksYSxvLCJhLXRpdGxlIiksdT1kLGY9LjUqKG0reSksaD1yLmFiMnh5KHUsZiwhMCkscD1yLmR4eWRiX3JvdWdoKHUsZiksdm9pZCAwPT09bC5hbmdsZSYmYy5leHRlbmRGbGF0KGwscyhyLGksYSxoLHIuZHh5ZGFfcm91Z2godSxmKSkpO3YodCxlLHIsbixoLHAsci5iYXhpcyxpLGEsbCwiYi10aXRsZSIpfSh0LF8saCxpLGwsdSx3LFQpLGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIHMsbCx1LGYsaD1yLnNlbGVjdCgiIyIrdC5fY2xpcFBhdGhJZCk7aC5zaXplKCl8fChoPXIuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImNhcnBldGNsaXAiLCEwKSk7dmFyIHA9Yy5lbnN1cmVTaW5nbGUoaCwicGF0aCIsImNhcnBldGJvdW5kYXJ5IiksZD1lLmNsaXBzZWdtZW50cyxnPVtdO2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspcz1kW2ZdLGw9YShbXSxzLngsbi5jMnApLHU9YShbXSxzLnksaS5jMnApLGcucHVzaChvKGwsdSxzLmJpY3ViaWMpKTt2YXIgbT0iTSIrZy5qb2luKCJMIikrIloiO2guYXR0cigiaWQiLHQuX2NsaXBQYXRoSWQpLHAuYXR0cigiZCIsbSl9KGgsaSxmLGwsdSl9KSl9O3ZhciBnPWguTElORV9TUEFDSU5HLG09KDEtaC5NSURfU0hJRlQpL2crMTtmdW5jdGlvbiB2KHQsZSxyLGEsbyxjLGgscCxkLHYseSl7dmFyIHg9W107aC50aXRsZS50ZXh0JiZ4LnB1c2goaC50aXRsZS50ZXh0KTt2YXIgYj1lLnNlbGVjdEFsbCgidGV4dC4iK3kpLmRhdGEoeCksXz12Lm1heEV4dGVudDtiLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh5LCEwKSxiLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9cyhyLHAsZCxvLGMpOy0xPT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKGguc2hvd3RpY2tsYWJlbHMpJiYoXz0wKTt2YXIgYT1oLnRpdGxlLmZvbnQuc2l6ZTtfKz1hK2gudGl0bGUub2Zmc2V0O3ZhciB5PSh2LmFuZ2xlKyh2LmZsaXA8MD8xODA6MCktZS5hbmdsZSs0NTApJTM2MCx4PXk+OTAmJnk8MjcwLGI9bi5zZWxlY3QodGhpcyk7Yi50ZXh0KGgudGl0bGUudGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSx4JiYoXz0oLWwubGluZUNvdW50KGIpK20pKmcqYS1fKSxiLmF0dHIoInRyYW5zZm9ybSIsZihlLnBbMF0sZS5wWzFdKSt1KGUuYW5nbGUpK2YoMCxfKSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGkuZm9udCxoLnRpdGxlLmZvbnQpfSkpLGIuZXhpdCgpLnJlbW92ZSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2NSwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ1LCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4vbWFrZXBhdGgiOjk4MiwiLi9tYXBfMWRfYXJyYXkiOjk4MywiLi9vcmllbnRfdGV4dCI6OTg0LGQzOjE2OX1dLDk4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vbGliL3NlYXJjaCIpLmZpbmRCaW4sYT10KCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHMiKSxvPXQoIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3IiKSxzPXQoIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiKSxsPXQoIi4vY3JlYXRlX2pfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fYSxyPXQuX2IsYz1lLmxlbmd0aCx1PXIubGVuZ3RoLGY9dC5hYXhpcyxoPXQuYmF4aXMscD1lWzBdLGQ9ZVtjLTFdLGc9clswXSxtPXJbdS0xXSx2PWVbZS5sZW5ndGgtMV0tZVswXSx5PXJbci5sZW5ndGgtMV0tclswXSx4PXYqbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRSxiPXkqbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRTtwLT14LGQrPXgsZy09YixtKz1iLHQuaXNWaXNpYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+cCYmdDxkJiZlPmcmJmU8bX0sdC5pc09jY2x1ZGVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8cHx8dD5kfHxlPGd8fGU+bX0sdC5zZXRTY2FsZT1mdW5jdGlvbigpe3ZhciBlPXQuX3gscj10Ll95LG49YSh0Ll94Y3RybCx0Ll95Y3RybCxlLHIsZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpO3QuX3hjdHJsPW5bMF0sdC5feWN0cmw9blsxXSx0LmV2YWx4eT1vKFt0Ll94Y3RybCx0Ll95Y3RybF0sYyx1LGYuc21vb3RoaW5nLGguc21vb3RoaW5nKSx0LmR4eWRpPXMoW3QuX3hjdHJsLHQuX3ljdHJsXSxmLnNtb290aGluZyxoLnNtb290aGluZyksdC5keHlkaj1sKFt0Ll94Y3RybCx0Ll95Y3RybF0sZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpfSx0LmkyYT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGguZmxvb3IodFswXSksYy0yKSxuPXRbMF0tcjtyZXR1cm4oMS1uKSplW3JdK24qZVtyKzFdfSx0LmoyYj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGguZmxvb3IodFsxXSksYy0yKSxuPXRbMV0tZTtyZXR1cm4oMS1uKSpyW2VdK24qcltlKzFdfSx0LmlqMmFiPWZ1bmN0aW9uKGUpe3JldHVyblt0LmkyYShlWzBdKSx0LmoyYihlWzFdKV19LHQuYTJpPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LGUpLGMtMikpLG49ZVtyXSxhPWVbcisxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihjLTEscisodC1uKS8oYS1uKSkpfSx0LmIyaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGkodCxyKSx1LTIpKSxuPXJbZV0sYT1yW2UrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odS0xLGUrKHQtbikvKGEtbikpKX0sdC5hYjJpaj1mdW5jdGlvbihlKXtyZXR1cm5bdC5hMmkoZVswXSksdC5iMmooZVsxXSldfSx0LmkyYz1mdW5jdGlvbihlLHIpe3JldHVybiB0LmV2YWx4eShbXSxlLHIpfSx0LmFiMnh5PWZ1bmN0aW9uKG4saSxhKXtpZighYSYmKG48ZVswXXx8bj5lW2MtMV18aTxyWzBdfHxpPnJbdS0xXSkpcmV0dXJuWyExLCExXTt2YXIgbz10LmEyaShuKSxzPXQuYjJqKGkpLGw9dC5ldmFseHkoW10sbyxzKTtpZihhKXt2YXIgZixoLHAsZCxnPTAsbT0wLHY9W107bjxlWzBdPyhmPTAsaD0wLGc9KG4tZVswXSkvKGVbMV0tZVswXSkpOm4+ZVtjLTFdPyhmPWMtMixoPTEsZz0obi1lW2MtMV0pLyhlW2MtMV0tZVtjLTJdKSk6aD1vLShmPU1hdGgubWF4KDAsTWF0aC5taW4oYy0yLE1hdGguZmxvb3IobykpKSksaTxyWzBdPyhwPTAsZD0wLG09KGktclswXSkvKHJbMV0tclswXSkpOmk+clt1LTFdPyhwPXUtMixkPTEsbT0oaS1yW3UtMV0pLyhyW3UtMV0tclt1LTJdKSk6ZD1zLShwPU1hdGgubWF4KDAsTWF0aC5taW4odS0yLE1hdGguZmxvb3IocykpKSksZyYmKHQuZHh5ZGkodixmLHAsaCxkKSxsWzBdKz12WzBdKmcsbFsxXSs9dlsxXSpnKSxtJiYodC5keHlkaih2LGYscCxoLGQpLGxbMF0rPXZbMF0qbSxsWzFdKz12WzFdKm0pfXJldHVybiBsfSx0LmMycD1mdW5jdGlvbih0LGUscil7cmV0dXJuW2UuYzJwKHRbMF0pLHIuYzJwKHRbMV0pXX0sdC5wMng9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLnAyYyh0WzBdKSxyLnAyYyh0WzFdKV19LHQuZGFkaT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGgubWluKGUubGVuZ3RoLTIsdCkpO3JldHVybiBlW3IrMV0tZVtyXX0sdC5kYmRqPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMix0KSk7cmV0dXJuIHJbZSsxXS1yW2VdfSx0LmR4eWRhPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuZHh5ZGkobnVsbCxlLHIsbixpKSxvPXQuZGFkaShlLG4pO3JldHVyblthWzBdL28sYVsxXS9vXX0sdC5keHlkYj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRqKG51bGwsZSxyLG4saSksbz10LmRiZGoocixpKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGFfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXYqKG58fC4xKSxhPXQuYWIyeHkoZStpLHIsITApLG89dC5hYjJ4eShlLWksciwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHh5ZGJfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXkqKG58fC4xKSxhPXQuYWIyeHkoZSxyK2ksITApLG89dC5hYjJ4eShlLHItaSwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHBkeD1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX0sdC5kcGR5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9tfX19LHsiLi4vLi4vbGliL3NlYXJjaCI6Nzk4LCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHMiOjk3NCwiLi9jb25zdGFudHMiOjk3NSwiLi9jcmVhdGVfaV9kZXJpdmF0aXZlX2V2YWx1YXRvciI6OTc2LCIuL2NyZWF0ZV9qX2Rlcml2YXRpdmVfZXZhbHVhdG9yIjo5NzcsIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3IiOjk3OH1dLDk4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzPVtdLGw9W10sYz10WzBdLmxlbmd0aCx1PXQubGVuZ3RoO2Z1bmN0aW9uIGYoZSxyKXt2YXIgbixpPTAsYT0wO3JldHVybiBlPjAmJnZvaWQgMCE9PShuPXRbcl1bZS0xXSkmJihhKyssaSs9biksZTxjLTEmJnZvaWQgMCE9PShuPXRbcl1bZSsxXSkmJihhKyssaSs9bikscj4wJiZ2b2lkIDAhPT0obj10W3ItMV1bZV0pJiYoYSsrLGkrPW4pLHI8dS0xJiZ2b2lkIDAhPT0obj10W3IrMV1bZV0pJiYoYSsrLGkrPW4pLGkvTWF0aC5tYXgoMSxhKX12YXIgaCxwLGQsZyxtLHYseSx4LGIsXyx3LFQ9MDtmb3IoaT0wO2k8YztpKyspZm9yKGE9MDthPHU7YSsrKXZvaWQgMD09PXRbYV1baV0mJihzLnB1c2goaSksbC5wdXNoKGEpLHRbYV1baV09ZihpLGEpKSxUPU1hdGgubWF4KFQsTWF0aC5hYnModFthXVtpXSkpO2lmKCFzLmxlbmd0aClyZXR1cm4gdDt2YXIgaz0wLE09MCxBPXMubGVuZ3RoO2Rve2ZvcihrPTAsbz0wO288QTtvKyspe2k9c1tvXSxhPWxbb107dmFyIFMsRSxDLEwsSSxQLHo9MCxPPTA7MD09PWk/KEM9ZVtJPU1hdGgubWluKGMtMSwyKV0sTD1lWzFdLFM9dFthXVtJXSxPKz0oRT10W2FdWzFdKSsoRS1TKSooZVswXS1MKS8oTC1DKSx6KyspOmk9PT1jLTEmJihDPWVbST1NYXRoLm1heCgwLGMtMyldLEw9ZVtjLTJdLFM9dFthXVtJXSxPKz0oRT10W2FdW2MtMl0pKyhFLVMpKihlW2MtMV0tTCkvKEwtQykseisrKSwoMD09PWl8fGk9PT1jLTEpJiZhPjAmJmE8dS0xJiYoaD1yW2ErMV0tclthXSxPKz0oKHA9clthXS1yW2EtMV0pKnRbYSsxXVtpXStoKnRbYS0xXVtpXSkvKHAraCkseisrKSwwPT09YT8oQz1yW1A9TWF0aC5taW4odS0xLDIpXSxMPXJbMV0sUz10W1BdW2ldLE8rPShFPXRbMV1baV0pKyhFLVMpKihyWzBdLUwpLyhMLUMpLHorKyk6YT09PXUtMSYmKEM9cltQPU1hdGgubWF4KDAsdS0zKV0sTD1yW3UtMl0sUz10W1BdW2ldLE8rPShFPXRbdS0yXVtpXSkrKEUtUykqKHJbdS0xXS1MKS8oTC1DKSx6KyspLCgwPT09YXx8YT09PXUtMSkmJmk+MCYmaTxjLTEmJihoPWVbaSsxXS1lW2ldLE8rPSgocD1lW2ldLWVbaS0xXSkqdFthXVtpKzFdK2gqdFthXVtpLTFdKS8ocCtoKSx6KyspLHo/Ty89ejooZD1lW2krMV0tZVtpXSxnPWVbaV0tZVtpLTFdLHg9KG09clthKzFdLXJbYV0pKih2PXJbYV0tclthLTFdKSoobSt2KSxPPSgoeT1kKmcqKGQrZykpKih2KnRbYSsxXVtpXSttKnRbYS0xXVtpXSkreCooZyp0W2FdW2krMV0rZCp0W2FdW2ktMV0pKS8oeCooZytkKSt5Kih2K20pKSksays9KF89KGI9Ty10W2FdW2ldKS9UKSpfLHc9ej8wOi44NSx0W2FdW2ldKz1iKigxK3cpfWs9TWF0aC5zcXJ0KGspfXdoaWxlKE0rKzwxMDAmJms+MWUtNSk7cmV0dXJuIG4ubG9nKCJTbW9vdGhlciBjb252ZXJnZWQgdG8iLGssImFmdGVyIixNLCJpdGVyYXRpb25zIiksdH19LHsiLi4vLi4vbGliIjo3Nzh9XSw5ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheTFEO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9cigieCIpLGE9aSYmaS5sZW5ndGgsbz1yKCJ5Iikscz1vJiZvLmxlbmd0aDtpZighYSYmIXMpcmV0dXJuITE7aWYoZS5fY2hlYXRlcj0haSxhJiYhbihpKXx8cyYmIW4obykpZS5fbGVuZ3RoPW51bGw7ZWxzZXt2YXIgbD1hP2kubGVuZ3RoOjEvMDtzJiYobD1NYXRoLm1pbihsLG8ubGVuZ3RoKSksZS5hJiZlLmEubGVuZ3RoJiYobD1NYXRoLm1pbihsLGUuYS5sZW5ndGgpKSxlLmImJmUuYi5sZW5ndGgmJihsPU1hdGgubWluKGwsZS5iLmxlbmd0aCkpLGUuX2xlbmd0aD1sfXJldHVybiEwfX0seyIuLi8uLi9saWIiOjc3OH1dLDk4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikuZGVmYXVsdExpbmUsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPWkubWFya2VyLmxpbmU7ZS5leHBvcnRzPWwoe2xvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsb2NhdGlvbm1vZGU6aS5sb2NhdGlvbm1vZGUsejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxnZW9qc29uOmwoe30saS5nZW9qc29uLHt9KSxmZWF0dXJlaWRrZXk6aS5mZWF0dXJlaWRrZXksdGV4dDpsKHt9LGkudGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30saS5ob3ZlcnRleHQse30pLG1hcmtlcjp7bGluZTp7Y29sb3I6bCh7fSxjLmNvbG9yLHtkZmx0OnN9KSx3aWR0aDpsKHt9LGMud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOiJjYWxjIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6aS5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5OmkudW5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0saG92ZXJpbmZvOmwoe30sby5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIixmbGFnczpbImxvY2F0aW9uIiwieiIsInRleHQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOm4oKSxzaG93bGVnZW5kOmwoe30sby5zaG93bGVnZW5kLHtkZmx0OiExfSl9LGEoIiIse2NMZXR0ZXI6InoiLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjQyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjUwLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyNCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6OTA2LCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjEyMjl9XSw5OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLG89dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxzPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKTtmdW5jdGlvbiBsKHQpe3JldHVybiB0JiYic3RyaW5nIj09dHlwZW9mIHR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYz1lLl9sZW5ndGgsdT1uZXcgQXJyYXkoYyk7cj1lLmdlb2pzb24/ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl8fG4odCl9Omw7Zm9yKHZhciBmPTA7ZjxjO2YrKyl7dmFyIGg9dVtmXT17fSxwPWUubG9jYXRpb25zW2ZdLGQ9ZS56W2ZdO3IocCkmJm4oZCk/KGgubG9jPXAsaC56PWQpOihoLmxvYz1udWxsLGguej1pKSxoLmluZGV4PWZ9cmV0dXJuIG8odSxlKSxhKHQsZSx7dmFsczplLnosY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6InoifSkscyh1LGUpLHV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2NTEsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjExODYsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExODksImZhc3QtaXNudW1lcmljIjoyNDF9XSw5OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9jYXRpb25zIiksYz1zKCJ6Iik7aWYobCYmbC5sZW5ndGgmJm4uaXNBcnJheU9yVHlwZWRBcnJheShjKSYmYy5sZW5ndGgpe2UuX2xlbmd0aD1NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCk7dmFyIHUsZj1zKCJnZW9qc29uIik7KCJzdHJpbmciPT10eXBlb2YgZiYmIiIhPT1mfHxuLmlzUGxhaW5PYmplY3QoZikpJiYodT0iZ2VvanNvbi1pZCIpLCJnZW9qc29uLWlkIj09PXMoImxvY2F0aW9ubW9kZSIsdSkmJnMoImZlYXR1cmVpZGtleSIpLHMoInRleHQiKSxzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIikscygibWFya2VyLmxpbmUud2lkdGgiKSYmcygibWFya2VyLmxpbmUuY29sb3IiKSxzKCJtYXJrZXIub3BhY2l0eSIpLGkodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscyl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjUzLCIuLi8uLi9saWIiOjc3OCwiLi9hdHRyaWJ1dGVzIjo5ODl9XSw5OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dC5sb2NhdGlvbj1lLmxvY2F0aW9uLHQuej1lLno7dmFyIGE9bltpXTtyZXR1cm4gYS5mSW4mJmEuZkluLnByb3BlcnRpZXMmJih0LnByb3BlcnRpZXM9YS5mSW4ucHJvcGVydGllcyksdC5jdD1hLmN0LHR9fSx7fV0sOTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYiIpLmZpbGxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scyxsLGMsdT10LmNkLGY9dVswXS50cmFjZSxoPXQuc3VicGxvdCxwPVtlLHJdLGQ9W2UrMzYwLHJdO2ZvcihzPTA7czx1Lmxlbmd0aDtzKyspaWYoYz0hMSwobz11W3NdKS5fcG9seWdvbnMpe2ZvcihsPTA7bDxvLl9wb2x5Z29ucy5sZW5ndGg7bCsrKW8uX3BvbHlnb25zW2xdLmNvbnRhaW5zKHApJiYoYz0hYyksby5fcG9seWdvbnNbbF0uY29udGFpbnMoZCkmJihjPSFjKTtpZihjKWJyZWFrfWlmKGMmJm8pcmV0dXJuIHQueDA9dC54MT10LnhhLmMycChvLmN0KSx0LnkwPXQueTE9dC55YS5jMnAoby5jdCksdC5pbmRleD1vLmluZGV4LHQubG9jYXRpb249by5sb2MsdC56PW8ueix0LnpMYWJlbD1uLnRpY2tUZXh0KGgubW9ja0F4aXMsaC5tb2NrQXhpcy5jMmwoby56KSwiaG92ZXIiKS50ZXh0LHQuaG92ZXJ0ZW1wbGF0ZT1vLmhvdmVydGVtcGxhdGUsZnVuY3Rpb24odCxlLHIpe2lmKGUuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIG49ci5oaXx8ZS5ob3ZlcmluZm8sbz1TdHJpbmcoci5sb2MpLHM9ImFsbCI9PT1uP2kuaG92ZXJpbmZvLmZsYWdzOm4uc3BsaXQoIisiKSxsPS0xIT09cy5pbmRleE9mKCJuYW1lIiksYz0tMSE9PXMuaW5kZXhPZigibG9jYXRpb24iKSx1PS0xIT09cy5pbmRleE9mKCJ6IiksZj0tMSE9PXMuaW5kZXhPZigidGV4dCIpLGg9W107IWwmJmM/dC5uYW1lT3ZlcnJpZGU9bzoobCYmKHQubmFtZU92ZXJyaWRlPWUubmFtZSksYyYmaC5wdXNoKG8pKTt1JiZoLnB1c2godC56TGFiZWwpO2YmJmEocixlLGgpO3QuZXh0cmFUZXh0PWguam9pbigiPGJyPiIpfSh0LGYsbyksW3RdfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi9hdHRyaWJ1dGVzIjo5ODl9XSw5OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksY2FsYzp0KCIuL2NhbGMiKSxjYWxjR2VvSlNPTjp0KCIuL3Bsb3QiKS5jYWxjR2VvSlNPTixwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2hvcm9wbGV0aCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2VvIiksY2F0ZWdvcmllczpbImdlbyIsIm5vT3BhY2l0eSIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nZW8iOjg2MCwiLi4vaGVhdG1hcC9jb2xvcmJhciI6MTA2OCwiLi9hdHRyaWJ1dGVzIjo5ODksIi4vY2FsYyI6OTkwLCIuL2RlZmF1bHRzIjo5OTEsIi4vZXZlbnRfZGF0YSI6OTkyLCIuL2hvdmVyIjo5OTMsIi4vcGxvdCI6OTk1LCIuL3NlbGVjdCI6OTk2LCIuL3N0eWxlIjo5OTd9XSw5OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLG89dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIikuZ2V0VG9wb2pzb25GZWF0dXJlcyxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5maW5kRXh0cmVtZXMsbD10KCIuL3N0eWxlIikuc3R5bGU7ZS5leHBvcnRzPXtjYWxjR2VvSlNPTjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10WzBdLnRyYWNlLG49ZVtyLmdlb10saT1uLl9zdWJwbG90LGw9ci5sb2NhdGlvbm1vZGUsYz1yLl9sZW5ndGgsdT0iZ2VvanNvbi1pZCI9PT1sP2EuZXh0cmFjdFRyYWNlRmVhdHVyZSh0KTpvKHIsaS50b3BvanNvbiksZj1bXSxoPVtdLHA9MDtwPGM7cCsrKXt2YXIgZD10W3BdLGc9Imdlb2pzb24taWQiPT09bD9kLmZPdXQ6YS5sb2NhdGlvblRvRmVhdHVyZShsLGQubG9jLHUpO2lmKGcpe2QuZ2VvanNvbj1nLGQuY3Q9Zy5wcm9wZXJ0aWVzLmN0LGQuX3BvbHlnb25zPWEuZmVhdHVyZTJwb2x5Z29ucyhnKTt2YXIgbT1hLmNvbXB1dGVCYm94KGcpO2YucHVzaChtWzBdLG1bMl0pLGgucHVzaChtWzFdLG1bM10pfWVsc2UgZC5nZW9qc29uPW51bGx9aWYoImdlb2pzb24iPT09bi5maXRib3VuZHMmJiJnZW9qc29uLWlkIj09PWwpe3ZhciB2PWEuY29tcHV0ZUJib3goYS5nZXRUcmFjZUdlb2pzb24ocikpO2Y9W3ZbMF0sdlsyXV0saD1bdlsxXSx2WzNdXX12YXIgeT17cGFkZGVkOiEwfTtyLl9leHRyZW1lcy5sb249cyhuLmxvbmF4aXMuX2F4LGYseSksci5fZXh0cmVtZXMubGF0PXMobi5sYXRheGlzLl9heCxoLHkpfSxwbG90OmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1lLmxheWVycy5iYWNrcGxvdC5zZWxlY3QoIi5jaG9yb3BsZXRobGF5ZXIiKTtpLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIGNob3JvcGxldGgiKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguY2hvcm9wbGV0aGxvY2F0aW9uIikuZGF0YShpLmlkZW50aXR5KTtyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiY2hvcm9wbGV0aGxvY2F0aW9uIiwhMCksci5leGl0KCkucmVtb3ZlKCksbCh0LGUpfSkpfX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjc3MSwiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIjo4MDYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjgyNywiLi9zdHlsZSI6OTk3LGQzOjE2OX1dLDk5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHM9dC5jZCxsPXQueGF4aXMsYz10LnlheGlzLHU9W107aWYoITE9PT1lKWZvcihyPTA7cjxzLmxlbmd0aDtyKyspc1tyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPHMubGVuZ3RoO3IrKykoaT0obj1zW3JdKS5jdCkmJihhPWwuYzJwKGkpLG89Yy5jMnAoaSksZS5jb250YWlucyhbYSxvXSxudWxsLHIsdCk/KHUucHVzaCh7cG9pbnROdW1iZXI6cixsb246aVswXSxsYXQ6aVsxXX0pLG4uc2VsZWN0ZWQ9MSk6bi5zZWxlY3RlZD0wKTtyZXR1cm4gdX19LHt9XSw5OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIik7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWVbMF0udHJhY2Uscz1lWzBdLm5vZGUzLnNlbGVjdEFsbCgiLmNob3JvcGxldGhsb2NhdGlvbiIpLGw9ci5tYXJrZXJ8fHt9LGM9bC5saW5lfHx7fSx1PW8ubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHIpO3MuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cigiZmlsbCIsdSh0LnopKS5jYWxsKGkuc3Ryb2tlLHQubWxjfHxjLmNvbG9yKS5jYWxsKGEuZGFzaExpbmUsIiIsdC5tbHd8fGMud2lkdGh8fDApLnN0eWxlKCJvcGFjaXR5IixsLm9wYWNpdHkpfSkpLGEuc2VsZWN0ZWRQb2ludFN0eWxlKHMscix0KX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7ZSYmcyh0LGUpfSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2U7bi5zZWxlY3RlZHBvaW50cz9hLnNlbGVjdGVkUG9pbnRTdHlsZShyLnNlbGVjdEFsbCgiLmNob3JvcGxldGhsb2NhdGlvbiIpLG4sdCk6cyh0LGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsZDM6MTY5fV0sOTk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Nob3JvcGxldGgvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7bG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZ2VvanNvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGZlYXR1cmVpZGtleTpzKHt9LG4uZmVhdHVyZWlka2V5LHt9KSxiZWxvdzp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxtYXJrZXI6e2xpbmU6e2NvbG9yOnMoe30sbi5tYXJrZXIubGluZS5jb2xvcix7ZWRpdFR5cGU6InBsb3QifSksd2lkdGg6cyh7fSxuLm1hcmtlci5saW5lLndpZHRoLHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6cyh7fSxuLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6cyh7fSxuLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5OnMoe30sbi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0saG92ZXJpbmZvOm4uaG92ZXJpbmZvLGhvdmVydGVtcGxhdGU6YSh7fSx7a2V5czpbInByb3BlcnRpZXMiXX0pLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0saSgiIix7Y0xldHRlcjoieiIsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY1MCwiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjQsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjkwNiwiLi4vY2hvcm9wbGV0aC9hdHRyaWJ1dGVzIjo5ODl9XSw5OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikubWFrZUJsYW5rLGw9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpO2Z1bmN0aW9uIGModCl7dmFyIGUscj10WzBdLnRyYWNlLG49ci5fb3B0cztpZihyLnNlbGVjdGVkcG9pbnRzKXtmb3IodmFyIGE9by5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHIpLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTtsLmZPdXQmJihsLmZPdXQucHJvcGVydGllcy5tbzI9YS5zZWxlY3RlZE9wYWNpdHlGbihsKSl9ZT17dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbzIifX1lbHNlIGU9aS5pc0FycmF5T3JUeXBlZEFycmF5KHIubWFya2VyLm9wYWNpdHkpP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1vIn06ci5tYXJrZXIub3BhY2l0eTtyZXR1cm4gaS5leHRlbmRGbGF0KG4uZmlsbC5wYWludCx7ImZpbGwtb3BhY2l0eSI6ZX0pLGkuZXh0ZW5kRmxhdChuLmxpbmUucGFpbnQseyJsaW5lLW9wYWNpdHkiOmV9KSxufWUuZXhwb3J0cz17Y29udmVydDpmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGgsbz17bGF5b3V0Ont2aXNpYmlsaXR5OiJub25lIn0scGFpbnQ6e319LHU9e2xheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fSxmPWUuX29wdHM9e2ZpbGw6byxsaW5lOnUsZ2VvanNvbjpzKCl9O2lmKCFyKXJldHVybiBmO3ZhciBoPWwuZXh0cmFjdFRyYWNlRmVhdHVyZSh0KTtpZighaClyZXR1cm4gZjt2YXIgcCxkLGcsbT1hLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZShlKSx2PWUubWFya2VyLHk9di5saW5lfHx7fTtpLmlzQXJyYXlPclR5cGVkQXJyYXkodi5vcGFjaXR5KSYmKHA9ZnVuY3Rpb24odCl7dmFyIGU9dC5tbztyZXR1cm4gbihlKT8raS5jb25zdHJhaW4oZSwwLDEpOjB9KSxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5jb2xvcikmJihkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1sY30pLGkuaXNBcnJheU9yVHlwZWRBcnJheSh5LndpZHRoKSYmKGc9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWx3fSk7Zm9yKHZhciB4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBiPXRbeF0sXz1iLmZPdXQ7aWYoXyl7dmFyIHc9Xy5wcm9wZXJ0aWVzO3cuZmM9bShiLnopLHAmJih3Lm1vPXAoYikpLGQmJih3Lm1sYz1kKGIpKSxnJiYody5tbHc9ZyhiKSksYi5jdD13LmN0LGIuX3BvbHlnb25zPWwuZmVhdHVyZTJwb2x5Z29ucyhfKX19dmFyIFQ9cD97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbyJ9OnYub3BhY2l0eTtyZXR1cm4gaS5leHRlbmRGbGF0KG8ucGFpbnQseyJmaWxsLWNvbG9yIjp7dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJmYyJ9LCJmaWxsLW9wYWNpdHkiOlR9KSxpLmV4dGVuZEZsYXQodS5wYWludCx7ImxpbmUtY29sb3IiOmQ/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibWxjIn06eS5jb2xvciwibGluZS13aWR0aCI6Zz97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbHcifTp5LndpZHRoLCJsaW5lLW9wYWNpdHkiOlR9KSxvLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIix1LmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixmLmdlb2pzb249e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpofSxjKHQpLGZ9LGNvbnZlcnRPblNlbGVjdDpjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3NzEsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo3NzIsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxZTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9jYXRpb25zIiksYz1zKCJ6IiksdT1zKCJnZW9qc29uIik7bi5pc0FycmF5T3JUeXBlZEFycmF5KGwpJiZsLmxlbmd0aCYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZjLmxlbmd0aCYmKCJzdHJpbmciPT10eXBlb2YgdSYmIiIhPT11fHxuLmlzUGxhaW5PYmplY3QodSkpPyhzKCJmZWF0dXJlaWRrZXkiKSxlLl9sZW5ndGg9TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpLHMoImJlbG93IikscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJtYXJrZXIubGluZS53aWR0aCIpJiZzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5vcGFjaXR5IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxzKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY1MywiLi4vLi4vbGliIjo3NzgsIi4vYXR0cmlidXRlcyI6OTk4fV0sMTAwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL2hlYXRtYXAvY29sb3JiYXIiKSxjYWxjOnQoIi4uL2Nob3JvcGxldGgvY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksaG92ZXJQb2ludHM6dCgiLi4vY2hvcm9wbGV0aC9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuLi9jaG9yb3BsZXRoL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6dCgiLi4vY2hvcm9wbGV0aC9zZWxlY3QiKSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7ZSYmZVswXS50cmFjZS5fZ2xUcmFjZS51cGRhdGVPblNlbGVjdChlKX0sZ2V0QmVsb3c6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5nZXRNYXBMYXllcnMoKSxuPXIubGVuZ3RoLTI7bj49MDtuLS0pe3ZhciBpPXJbbl0uaWQ7aWYoInN0cmluZyI9PXR5cGVvZiBpJiYwPT09aS5pbmRleE9mKCJ3YXRlciIpKWZvcih2YXIgYT1uKzE7YTxyLmxlbmd0aDthKyspaWYoInN0cmluZyI9PXR5cGVvZihpPXJbYV0uaWQpJiYtMT09PWkuaW5kZXhPZigicGxvdGx5LSIpKXJldHVybiBpfX0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNob3JvcGxldGhtYXBib3giLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLGNhdGVnb3JpZXM6WyJtYXBib3giLCJnbCIsIm5vT3BhY2l0eSIsInNob3dMZWdlbmQiXSxtZXRhOntocl9uYW1lOiJjaG9yb3BsZXRoX21hcGJveCJ9fX0seyIuLi8uLi9wbG90cy9tYXBib3giOjg4NSwiLi4vY2hvcm9wbGV0aC9jYWxjIjo5OTAsIi4uL2Nob3JvcGxldGgvZXZlbnRfZGF0YSI6OTkyLCIuLi9jaG9yb3BsZXRoL2hvdmVyIjo5OTMsIi4uL2Nob3JvcGxldGgvc2VsZWN0Ijo5OTYsIi4uL2hlYXRtYXAvY29sb3JiYXIiOjEwNjgsIi4vYXR0cmlidXRlcyI6OTk4LCIuL2RlZmF1bHRzIjoxZTMsIi4vcGxvdCI6MTAwMn1dLDEwMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb252ZXJ0IikuY29udmVydCxpPXQoIi4vY29udmVydCIpLmNvbnZlcnRPblNlbGVjdCxhPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiKS50cmFjZUxheWVyUHJlZml4O2Z1bmN0aW9uIG8odCxlKXt0aGlzLnR5cGU9ImNob3JvcGxldGhtYXBib3giLHRoaXMuc3VicGxvdD10LHRoaXMudWlkPWUsdGhpcy5zb3VyY2VJZD0ic291cmNlLSIrZSx0aGlzLmxheWVyTGlzdD1bWyJmaWxsIixhK2UrIi1maWxsIl0sWyJsaW5lIixhK2UrIi1saW5lIl1dLHRoaXMuYmVsb3c9bnVsbH12YXIgcz1vLnByb3RvdHlwZTtzLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUobih0KSl9LHMudXBkYXRlT25TZWxlY3Q9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKGkodCkpfSxzLl91cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdWJwbG90LHI9dGhpcy5sYXllckxpc3Qsbj1lLmJlbG93TG9va3VwWyJ0cmFjZS0iK3RoaXMudWlkXTtlLm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZCkuc2V0RGF0YSh0Lmdlb2pzb24pLG4hPT10aGlzLmJlbG93JiYodGhpcy5fcmVtb3ZlTGF5ZXJzKCksdGhpcy5fYWRkTGF5ZXJzKHQsbiksdGhpcy5iZWxvdz1uKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPWFbMF0scz1hWzFdLGw9dFtvXTtlLnNldE9wdGlvbnMocywic2V0TGF5b3V0UHJvcGVydHkiLGwubGF5b3V0KSwidmlzaWJsZSI9PT1sLmxheW91dC52aXNpYmlsaXR5JiZlLnNldE9wdGlvbnMocywic2V0UGFpbnRQcm9wZXJ0eSIsbC5wYWludCl9fSxzLl9hZGRMYXllcnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5zdWJwbG90LG49dGhpcy5sYXllckxpc3QsaT10aGlzLnNvdXJjZUlkLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW9bMF0sbD10W3NdO3IuYWRkTGF5ZXIoe3R5cGU6cyxpZDpvWzFdLHNvdXJjZTppLGxheW91dDpsLmxheW91dCxwYWludDpsLnBhaW50fSxlKX19LHMuX3JlbW92ZUxheWVycz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN1YnBsb3QubWFwLGU9dGhpcy5sYXllckxpc3Qscj1lLmxlbmd0aC0xO3I+PTA7ci0tKXQucmVtb3ZlTGF5ZXIoZVtyXVsxXSl9LHMuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3VicGxvdC5tYXA7dGhpcy5fcmVtb3ZlTGF5ZXJzKCksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2UsaT1uZXcgbyh0LHIudWlkKSxhPWkuc291cmNlSWQscz1uKGUpLGw9aS5iZWxvdz10LmJlbG93TG9va3VwWyJ0cmFjZS0iK3IudWlkXTtyZXR1cm4gdC5tYXAuYWRkU291cmNlKGEse3R5cGU6Imdlb2pzb24iLGRhdGE6cy5nZW9qc29ufSksaS5fYWRkTGF5ZXJzKHMsbCksZVswXS50cmFjZS5fZ2xUcmFjZT1pLGl9fSx7Ii4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiOjg4MywiLi9jb252ZXJ0Ijo5OTl9XSwxMDAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx3Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzY2FsZWQiLCJhYnNvbHV0ZSJdLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJzY2FsZWQifSxzaXplcmVmOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MH0sYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixlZGl0VHlwZToiY2FsYyIsdmFsdWVzOlsidGlwIiwidGFpbCIsImNtIiwiY2VudGVyIl0sZGZsdDoiY20ifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmkoe2VkaXRUeXBlOiJjYWxjIn0se2tleXM6WyJub3JtIl19KSxzaG93bGVnZW5kOnMoe30sby5zaG93bGVnZW5kLHtkZmx0OiExfSl9O3MobCxuKCIiLHtjb2xvckF0dHI6InUvdi93IG5vcm0iLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSk7WyJvcGFjaXR5IiwibGlnaHRwb3NpdGlvbiIsImxpZ2h0aW5nIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7bFt0XT1hW3RdfSkpLGwuaG92ZXJpbmZvPXMoe30sby5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIixmbGFnczpbIngiLCJ5IiwieiIsInUiLCJ2IiwidyIsIm5vcm0iLCJ0ZXh0IiwibmFtZSJdLGRmbHQ6IngreSt6K25vcm0rdGV4dCtuYW1lIn0pLGwudHJhbnNmb3Jtcz12b2lkIDAsZS5leHBvcnRzPWx9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY1MCwiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjQsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjkwNiwiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiOjExMjh9XSwxMDA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUudSxpPWUudixhPWUudyxvPU1hdGgubWluKGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoLHIubGVuZ3RoLGkubGVuZ3RoLGEubGVuZ3RoKSxzPS0xLzAsbD0xLzAsYz0wO2M8bztjKyspe3ZhciB1PXJbY10sZj1pW2NdLGg9YVtjXSxwPU1hdGguc3FydCh1KnUrZipmK2gqaCk7cz1NYXRoLm1heChzLHApLGw9TWF0aC5taW4obCxwKX1lLl9sZW49byxlLl9ub3JtTWF4PXMsbih0LGUse3ZhbHM6W2wsc10sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2NTF9XSwxMDA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLWNvbmUzZCIpLGk9dCgiZ2wtY29uZTNkIikuY3JlYXRlQ29uZU1lc2gsYT10KCIuLi8uLi9saWIiKS5zaW1wbGVNYXAsbz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMsbD10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKTtmdW5jdGlvbiBjKHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5tZXNoPW51bGwsdGhpcy5kYXRhPW51bGx9dmFyIHU9Yy5wcm90b3R5cGU7dS5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS54W2VdLG49dGhpcy5kYXRhLnlbZV0saT10aGlzLmRhdGEueltlXSxhPXRoaXMuZGF0YS51W2VdLG89dGhpcy5kYXRhLnZbZV0scz10aGlzLmRhdGEud1tlXTt0LnRyYWNlQ29vcmRpbmF0ZT1bcixuLGksYSxvLHMsTWF0aC5zcXJ0KGEqYStvKm8rcypzKV07dmFyIGw9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkobCkmJnZvaWQgMCE9PWxbZV0/dC50ZXh0TGFiZWw9bFtlXTpsJiYodC50ZXh0TGFiZWw9bCksITB9fTt2YXIgZj17eGF4aXM6MCx5YXhpczoxLHpheGlzOjJ9LGg9e3RpcDoxLHRhaWw6MCxjbTouMjUsY2VudGVyOi41fSxwPXt0aXA6MSx0YWlsOjEsY206Ljc1LGNlbnRlcjouNX07ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXQuZnVsbFNjZW5lTGF5b3V0LGk9dC5kYXRhU2NhbGUsYz17fTtmdW5jdGlvbiB1KHQsZSl7dmFyIG49cltlXSxvPWlbZltlXV07cmV0dXJuIGEodCwoZnVuY3Rpb24odCl7cmV0dXJuIG4uZDJsKHQpKm99KSl9Yy52ZWN0b3JzPWwodShlLnUsInhheGlzIiksdShlLnYsInlheGlzIiksdShlLncsInpheGlzIiksZS5fbGVuKSxjLnBvc2l0aW9ucz1sKHUoZS54LCJ4YXhpcyIpLHUoZS55LCJ5YXhpcyIpLHUoZS56LCJ6YXhpcyIpLGUuX2xlbik7dmFyIGQ9cyhlKTtjLmNvbG9ybWFwPW8oZSksYy52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W2QubWluL2UuX25vcm1NYXgsZC5tYXgvZS5fbm9ybU1heF0sYy5jb25lT2Zmc2V0PWhbZS5hbmNob3JdLCJzY2FsZWQiPT09ZS5zaXplbW9kZT9jLmNvbmVTaXplPWUuc2l6ZXJlZnx8LjU6Yy5jb25lU2l6ZT1lLnNpemVyZWYmJmUuX25vcm1NYXg/ZS5zaXplcmVmL2UuX25vcm1NYXg6LjU7dmFyIGc9bihjKSxtPWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gZy5saWdodFBvc2l0aW9uPVttLngsbS55LG0uel0sZy5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxnLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLGcuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixnLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxnLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLGcub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPXBbZS5hbmNob3JdKmcudmVjdG9yU2NhbGUqZy5jb25lU2NhbGUqZS5fbm9ybU1heCxnfXUudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YT10O3ZhciBlPWQodGhpcy5zY2VuZSx0KTt0aGlzLm1lc2gudXBkYXRlKGUpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxuPWQodCxlKSxhPWkocixuKSxvPW5ldyBjKHQsZS51aWQpO3JldHVybiBvLm1lc2g9YSxvLmRhdGE9ZSxhLl90cmFjZT1vLHQuZ2xwbG90LmFkZChhKSxvfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjc3NCwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo4ODEsImdsLWNvbmUzZCI6MjYwfV0sMTAwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKCJ1IiksYz1zKCJ2IiksdT1zKCJ3IiksZj1zKCJ4IiksaD1zKCJ5IikscD1zKCJ6Iik7bCYmbC5sZW5ndGgmJmMmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmZiYmZi5sZW5ndGgmJmgmJmgubGVuZ3RoJiZwJiZwLmxlbmd0aD8ocygic2l6ZXJlZiIpLHMoInNpemVtb2RlIikscygiYW5jaG9yIikscygibGlnaHRpbmcuYW1iaWVudCIpLHMoImxpZ2h0aW5nLmRpZmZ1c2UiKSxzKCJsaWdodGluZy5zcGVjdWxhciIpLHMoImxpZ2h0aW5nLnJvdWdobmVzcyIpLHMoImxpZ2h0aW5nLmZyZXNuZWwiKSxzKCJsaWdodHBvc2l0aW9uLngiKSxzKCJsaWdodHBvc2l0aW9uLnkiKSxzKCJsaWdodHBvc2l0aW9uLnoiKSxpKHQsZSxvLHMse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pLHMoInRleHQiKSxzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIiksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NTMsIi4uLy4uL2xpYiI6Nzc4LCIuL2F0dHJpYnV0ZXMiOjEwMDN9XSwxMDA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNvbmUiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInNob3dMZWdlbmQiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9jb252ZXJ0IiksZXZlbnREYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9ybT1lLnRyYWNlQ29vcmRpbmF0ZVs2XSx0fSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDNkIjo4NzAsIi4vYXR0cmlidXRlcyI6MTAwMywiLi9jYWxjIjoxMDA0LCIuL2NvbnZlcnQiOjEwMDUsIi4vZGVmYXVsdHMiOjEwMDZ9XSwxMDA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLHM9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIiksdT1jLkNPTVBBUklTT05fT1BTMixmPWMuSU5URVJWQUxfT1BTLGg9KHQoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuRk9STUFUX0xJTkssaS5saW5lKTtlLmV4cG9ydHM9bCh7ejpuLnoseDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx4cGVyaW9kOm4ueHBlcmlvZCx5cGVyaW9kOm4ueXBlcmlvZCx4cGVyaW9kMDppLnhwZXJpb2QwLHlwZXJpb2QwOmkueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDpuLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDpuLnlwZXJpb2RhbGlnbm1lbnQsdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LHRyYW5zcG9zZTpuLnRyYW5zcG9zZSx4dHlwZTpuLnh0eXBlLHl0eXBlOm4ueXR5cGUsemhvdmVyZm9ybWF0Om4uemhvdmVyZm9ybWF0LGhvdmVydGVtcGxhdGU6bi5ob3ZlcnRlbXBsYXRlLGhvdmVyb25nYXBzOm4uaG92ZXJvbmdhcHMsY29ubmVjdGdhcHM6bCh7fSxuLmNvbm5lY3RnYXBzLHt9KSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LGF1dG9jb250b3VyOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJjb250b3Vycy5zdGFydCI6dm9pZCAwLCJjb250b3Vycy5lbmQiOnZvaWQgMCwiY29udG91cnMuc2l6ZSI6dm9pZCAwfX0sbmNvbnRvdXJzOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjE1LG1pbjoxLGVkaXRUeXBlOiJjYWxjIn0sY29udG91cnM6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxldmVscyIsImNvbnN0cmFpbnQiXSxkZmx0OiJsZXZlbHMiLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b2NvbnRvdXIiOiExfX0sZW5kOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b2NvbnRvdXIiOiExfX0sY29sb3Jpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJoZWF0bWFwIiwibGluZXMiLCJub25lIl0sZGZsdDoiZmlsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93bGluZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzaG93bGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250OnMoe2VkaXRUeXBlOiJwbG90Iixjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxsYWJlbGZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sb3BlcmF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10uY29uY2F0KHUpLmNvbmNhdChmKSxkZmx0OiI9IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6e2F1dG9jb250b3VyOiExfX0sbGluZTp7Y29sb3I6bCh7fSxoLmNvbG9yLHtlZGl0VHlwZToic3R5bGUrY29sb3JiYXJzIn0pLHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZStjb2xvcmJhcnMifSxkYXNoOm8sc21vb3RoaW5nOmwoe30saC5zbW9vdGhpbmcse30pLGVkaXRUeXBlOiJwbG90In19LGEoIiIse2NMZXR0ZXI6InoiLGF1dG9Db2xvckRmbHQ6ITEsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY1MCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjY2NCwiLi4vLi4vY29uc3RhbnRzL2RvY3MiOjc0OCwiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiOjc0OSwiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIjoxMDY1LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExODd9XSwxMDA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGk9dCgiLi4vaGVhdG1hcC9jYWxjIiksYT10KCIuL3NldF9jb250b3VycyIpLG89dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWkodCxlKSxzPXJbMF0uejthKGUscyk7dmFyIGwsYz1lLmNvbnRvdXJzLHU9bi5leHRyYWN0T3B0cyhlKTtpZigiaGVhdG1hcCI9PT1jLmNvbG9yaW5nJiZ1LmF1dG8mJiExPT09ZS5hdXRvY29udG91cil7dmFyIGY9Yy5zdGFydCxoPW8oYykscD1jLnNpemV8fDEsZD1NYXRoLmZsb29yKChoLWYpL3ApKzE7aXNGaW5pdGUocCl8fChwPTEsZD0xKTt2YXIgZz1mLXAvMjtsPVtnLGcrZCpwXX1lbHNlIGw9cztyZXR1cm4gbi5jYWxjKHQsZSx7dmFsczpsLGNMZXR0ZXI6InoifSkscn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTUsIi4uL2hlYXRtYXAvY2FsYyI6MTA2NiwiLi9lbmRfcGx1cyI6MTAxOSwiLi9zZXRfY29udG91cnMiOjEwMjd9XSwxMDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49dFswXSxpPW4uejtzd2l0Y2goZS50eXBlKXtjYXNlImxldmVscyI6dmFyIGE9TWF0aC5taW4oaVswXVswXSxpWzBdWzFdKTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdO28ucHJlZml4Qm91bmRhcnk9IW8uZWRnZXBhdGhzLmxlbmd0aCYmKGE+by5sZXZlbHx8by5zdGFydHMubGVuZ3RoJiZhPT09by5sZXZlbCl9YnJlYWs7Y2FzZSJjb25zdHJhaW50IjppZihuLnByZWZpeEJvdW5kYXJ5PSExLG4uZWRnZXBhdGhzLmxlbmd0aClyZXR1cm47dmFyIHM9bi54Lmxlbmd0aCxsPW4ueS5sZW5ndGgsYz0tMS8wLHU9MS8wO2ZvcihyPTA7cjxsO3IrKyl1PU1hdGgubWluKHUsaVtyXVswXSksdT1NYXRoLm1pbih1LGlbcl1bcy0xXSksYz1NYXRoLm1heChjLGlbcl1bMF0pLGM9TWF0aC5tYXgoYyxpW3JdW3MtMV0pO2ZvcihyPTE7cjxzLTE7cisrKXU9TWF0aC5taW4odSxpWzBdW3JdKSx1PU1hdGgubWluKHUsaVtsLTFdW3JdKSxjPU1hdGgubWF4KGMsaVswXVtyXSksYz1NYXRoLm1heChjLGlbbC0xXVtyXSk7dmFyIGYsaCxwPWUudmFsdWU7c3dpdGNoKGUuX29wZXJhdGlvbil7Y2FzZSI+IjpwPmMmJihuLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlIjwiOihwPHV8fG4uc3RhcnRzLmxlbmd0aCYmcD09PXUpJiYobi5wcmVmaXhCb3VuZGFyeT0hMCk7YnJlYWs7Y2FzZSJbXSI6Zj1NYXRoLm1pbihwWzBdLHBbMV0pLCgoaD1NYXRoLm1heChwWzBdLHBbMV0pKTx1fHxmPmN8fG4uc3RhcnRzLmxlbmd0aCYmaD09PXUpJiYobi5wcmVmaXhCb3VuZGFyeT0hMCk7YnJlYWs7Y2FzZSJdWyI6Zj1NYXRoLm1pbihwWzBdLHBbMV0pLGg9TWF0aC5tYXgocFswXSxwWzFdKSxmPHUmJmg+YyYmKG4ucHJlZml4Qm91bmRhcnk9ITApfX19fSx7fV0sMTAxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxpPXQoIi4vbWFrZV9jb2xvcl9tYXAiKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9e21pbjoiem1pbiIsbWF4OiJ6bWF4IixjYWxjOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1lLmNvbnRvdXJzLHM9ZS5saW5lLGw9by5zaXplfHwxLGM9by5jb2xvcmluZyx1PWkoZSx7aXNDb2xvcmJhcjohMH0pO2lmKCJoZWF0bWFwIj09PWMpe3ZhciBmPW4uZXh0cmFjdE9wdHMoZSk7ci5fZmlsbGdyYWRpZW50PWYucmV2ZXJzZXNjYWxlP24uZmxpcFNjYWxlKGYuY29sb3JzY2FsZSk6Zi5jb2xvcnNjYWxlLHIuX3pyYW5nZT1bZi5taW4sZi5tYXhdfWVsc2UiZmlsbCI9PT1jJiYoci5fZmlsbGNvbG9yPXUpO3IuX2xpbmU9e2NvbG9yOiJsaW5lcyI9PT1jP3U6cy5jb2xvcix3aWR0aDohMSE9PW8uc2hvd2xpbmVzP3Mud2lkdGg6MCxkYXNoOnMuZGFzaH0sci5fbGV2ZWxzPXtzdGFydDpvLnN0YXJ0LGVuZDphKG8pLHNpemU6bH19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi9lbmRfcGx1cyI6MTAxOSwiLi9tYWtlX2NvbG9yX21hcCI6MTAyNH1dLDEwMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtCT1RUT01TVEFSVDpbMSw5LDEzLDEwNCw3MTNdLFRPUFNUQVJUOls0LDYsNywxMDQsNzEzXSxMRUZUU1RBUlQ6WzgsMTIsMTQsMjA4LDExMTRdLFJJR0hUU1RBUlQ6WzIsMywxMSwyMDgsMTExNF0sTkVXREVMVEE6W251bGwsWy0xLDBdLFswLC0xXSxbLTEsMF0sWzEsMF0sbnVsbCxbMCwtMV0sWy0xLDBdLFswLDFdLFswLDFdLG51bGwsWzAsMV0sWzEsMF0sWzEsMF0sWzAsLTFdXSxDSE9PU0VTQURETEU6ezEwNDpbNCwxXSwyMDg6WzIsOF0sNzEzOls3LDEzXSwxMTE0OlsxMSwxNF19LFNBRERMRVJFTUFJTkRFUjp7MTo0LDI6OCw0OjEsNzoxMyw4OjIsMTE6MTQsMTM6NywxNDoxMX0sTEFCRUxESVNUQU5DRToyLExBQkVMSU5DUkVBU0U6MTAsTEFCRUxNSU46MyxMQUJFTE1BWDoxMCxMQUJFTE9QVElNSVpFUjp7RURHRUNPU1Q6MSxBTkdMRUNPU1Q6MSxORUlHSEJPUkNPU1Q6NSxTQU1FTEVWRUxGQUNUT1I6MTAsU0FNRUxFVkVMRElTVEFOQ0U6NSxNQVhDT1NUOjEwMCxJTklUSUFMU0VBUkNIUE9JTlRTOjEwLElURVJBVElPTlM6NX19fSx7fV0sMTAxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9sYWJlbF9kZWZhdWx0cyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89YS5hZGRPcGFjaXR5LHM9YS5vcGFjaXR5LGw9dCgiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiKSxjPWwuQ09OU1RSQUlOVF9SRURVQ1RJT04sdT1sLkNPTVBBUklTT05fT1BTMjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxsLGYpe3ZhciBoLHAsZCxnPWUuY29udG91cnMsbT1yKCJjb250b3Vycy5vcGVyYXRpb24iKTsoZy5fb3BlcmF0aW9uPWNbbV0sZnVuY3Rpb24odCxlKXt2YXIgcjstMT09PXUuaW5kZXhPZihlLm9wZXJhdGlvbik/KHQoImNvbnRvdXJzLnZhbHVlIixbMCwxXSksQXJyYXkuaXNBcnJheShlLnZhbHVlKT9lLnZhbHVlLmxlbmd0aD4yP2UudmFsdWU9ZS52YWx1ZS5zbGljZSgyKTowPT09ZS5sZW5ndGg/ZS52YWx1ZT1bMCwxXTplLmxlbmd0aDwyPyhyPXBhcnNlRmxvYXQoZS52YWx1ZVswXSksZS52YWx1ZT1bcixyKzFdKTplLnZhbHVlPVtwYXJzZUZsb2F0KGUudmFsdWVbMF0pLHBhcnNlRmxvYXQoZS52YWx1ZVsxXSldOm4oZS52YWx1ZSkmJihyPXBhcnNlRmxvYXQoZS52YWx1ZSksZS52YWx1ZT1bcixyKzFdKSk6KHQoImNvbnRvdXJzLnZhbHVlIiwwKSxuKGUudmFsdWUpfHwoQXJyYXkuaXNBcnJheShlLnZhbHVlKT9lLnZhbHVlPXBhcnNlRmxvYXQoZS52YWx1ZVswXSk6ZS52YWx1ZT0wKSl9KHIsZyksIj0iPT09bT9oPWcuc2hvd2xpbmVzPSEwOihoPXIoImNvbnRvdXJzLnNob3dsaW5lcyIpLGQ9cigiZmlsbGNvbG9yIixvKCh0LmxpbmV8fHt9KS5jb2xvcnx8bCwuNSkpKSxoKSYmKHA9cigibGluZS5jb2xvciIsZCYmcyhkKT9vKGUuZmlsbGNvbG9yLDEpOmwpLHIoImxpbmUud2lkdGgiLDIpLHIoImxpbmUuZGFzaCIpKTtyKCJsaW5lLnNtb290aGluZyIpLGkocixhLHAsZil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiOjc0OSwiLi9sYWJlbF9kZWZhdWx0cyI6MTAyMywiZmFzdC1pc251bWVyaWMiOjI0MX1dLDEwMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiKSxpPXQoImZhc3QtaXNudW1lcmljIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByLGE9QXJyYXkuaXNBcnJheShlKTtmdW5jdGlvbiBvKHQpe3JldHVybiBpKHQpPyt0Om51bGx9cmV0dXJuLTEhPT1uLkNPTVBBUklTT05fT1BTMi5pbmRleE9mKHQpP3I9byhhP2VbMF06ZSk6LTEhPT1uLklOVEVSVkFMX09QUy5pbmRleE9mKHQpP3I9YT9bbyhlWzBdKSxvKGVbMV0pXTpbbyhlKSxvKGUpXTotMSE9PW4uU0VUX09QUy5pbmRleE9mKHQpJiYocj1hP2UubWFwKG8pOltvKGUpXSkscn1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtlPWEodCxlKTt2YXIgcj1NYXRoLm1pbihlWzBdLGVbMV0pLG49TWF0aC5tYXgoZVswXSxlWzFdKTtyZXR1cm57c3RhcnQ6cixlbmQ6bixzaXplOm4tcn19fWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybntzdGFydDplPWEodCxlKSxlbmQ6MS8wLHNpemU6MS8wfX19ZS5leHBvcnRzPXsiW10iOm8oIltdIiksIl1bIjpvKCJdWyIpLCI+IjpzKCI+IiksIjwiOnMoIjwiKSwiPSI6cygiPSIpfX0seyIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NzQ5LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sMTAxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bigiY29udG91cnMuc3RhcnQiKSxhPW4oImNvbnRvdXJzLmVuZCIpLG89ITE9PT1pfHwhMT09PWEscz1yKCJjb250b3Vycy5zaXplIik7IShvP2UuYXV0b2NvbnRvdXI9ITA6cigiYXV0b2NvbnRvdXIiLCExKSkmJnN8fHIoIm5jb250b3VycyIpfX0se31dLDEwMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbi5leHRlbmRGbGF0KHt9LHQse2VkZ2VwYXRoczpuLmV4dGVuZERlZXAoW10sdC5lZGdlcGF0aHMpLHBhdGhzOm4uZXh0ZW5kRGVlcChbXSx0LnBhdGhzKSxzdGFydHM6bi5leHRlbmREZWVwKFtdLHQuc3RhcnRzKX0pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJldmVyc2UoKX0sbD1mdW5jdGlvbih0KXtyZXR1cm4gdH07c3dpdGNoKGUpe2Nhc2UiPSI6Y2FzZSI8IjpyZXR1cm4gdDtjYXNlIj4iOmZvcigxIT09dC5sZW5ndGgmJm4ud2FybigiQ29udG91ciBkYXRhIGludmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgaW5lcXVhbGl0eSBvcGVyYXRpb24uIiksYT10WzBdLHI9MDtyPGEuZWRnZXBhdGhzLmxlbmd0aDtyKyspYS5lZGdlcGF0aHNbcl09cyhhLmVkZ2VwYXRoc1tyXSk7Zm9yKHI9MDtyPGEucGF0aHMubGVuZ3RoO3IrKylhLnBhdGhzW3JdPXMoYS5wYXRoc1tyXSk7Zm9yKHI9MDtyPGEuc3RhcnRzLmxlbmd0aDtyKyspYS5zdGFydHNbcl09cyhhLnN0YXJ0c1tyXSk7cmV0dXJuIHQ7Y2FzZSJdWyI6dmFyIGM9cztzPWwsbD1jO2Nhc2UiW10iOmZvcigyIT09dC5sZW5ndGgmJm4ud2FybigiQ29udG91ciBkYXRhIGludmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgaW5lcXVhbGl0eSByYW5nZSBvcGVyYXRpb24uIiksYT1pKHRbMF0pLG89aSh0WzFdKSxyPTA7cjxhLmVkZ2VwYXRocy5sZW5ndGg7cisrKWEuZWRnZXBhdGhzW3JdPXMoYS5lZGdlcGF0aHNbcl0pO2ZvcihyPTA7cjxhLnBhdGhzLmxlbmd0aDtyKyspYS5wYXRoc1tyXT1zKGEucGF0aHNbcl0pO2ZvcihyPTA7cjxhLnN0YXJ0cy5sZW5ndGg7cisrKWEuc3RhcnRzW3JdPXMoYS5zdGFydHNbcl0pO2Zvcig7by5lZGdlcGF0aHMubGVuZ3RoOylhLmVkZ2VwYXRocy5wdXNoKGwoby5lZGdlcGF0aHMuc2hpZnQoKSkpO2Zvcig7by5wYXRocy5sZW5ndGg7KWEucGF0aHMucHVzaChsKG8ucGF0aHMuc2hpZnQoKSkpO2Zvcig7by5zdGFydHMubGVuZ3RoOylhLnN0YXJ0cy5wdXNoKGwoby5zdGFydHMuc2hpZnQoKSkpO3JldHVyblthXX19fSx7Ii4uLy4uL2xpYiI6Nzc4fV0sMTAxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksYT10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLG89dCgiLi9jb25zdHJhaW50X2RlZmF1bHRzIikscz10KCIuL2NvbnRvdXJzX2RlZmF1bHRzIiksbD10KCIuL3N0eWxlX2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfWlmKGkodCxlLGYsdSkpe2EodCxlLHUsZiksZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJob3Zlcm9uZ2FwcyIpO3ZhciBoPSJjb25zdHJhaW50Ij09PWYoImNvbnRvdXJzLnR5cGUiKTtmKCJjb25uZWN0Z2FwcyIsbi5pc0FycmF5MUQoZS56KSksaD9vKHQsZSxmLHUscik6KHModCxlLGYsKGZ1bmN0aW9uKHIpe3JldHVybiBuLmNvZXJjZTIodCxlLGMscil9KSksbCh0LGUsZix1KSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyI6MTA3OSwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjEyMDcsIi4vYXR0cmlidXRlcyI6MTAwOCwiLi9jb25zdHJhaW50X2RlZmF1bHRzIjoxMDEzLCIuL2NvbnRvdXJzX2RlZmF1bHRzIjoxMDE1LCIuL3N0eWxlX2RlZmF1bHRzIjoxMDI5fV0sMTAxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vY29uc3RyYWludF9tYXBwaW5nIiksYT10KCIuL2VuZF9wbHVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG89ImNvbnN0cmFpbnQiPT09dC50eXBlP2lbdC5fb3BlcmF0aW9uXSh0LnZhbHVlKTp0LHM9by5zaXplLGw9W10sYz1hKG8pLHU9ci50cmFjZS5fY2FycGV0VHJhY2UsZj11P3t4YXhpczp1LmFheGlzLHlheGlzOnUuYmF4aXMseDpyLmEseTpyLmJ9Ont4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMseDpyLngseTpyLnl9LGg9by5zdGFydDtoPGM7aCs9cylpZihsLnB1c2gobi5leHRlbmRGbGF0KHtsZXZlbDpoLGNyb3NzaW5nczp7fSxzdGFydHM6W10sZWRnZXBhdGhzOltdLHBhdGhzOltdLHo6ci56LHNtb290aGluZzpyLnRyYWNlLmxpbmUuc21vb3RoaW5nfSxmKSksbC5sZW5ndGg+MWUzKXtuLndhcm4oIlRvbyBtYW55IGNvbnRvdXJzLCBjbGlwcGluZyBhdCAxMDAwIix0KTticmVha31yZXR1cm4gbH19LHsiLi4vLi4vbGliIjo3NzgsIi4vY29uc3RyYWludF9tYXBwaW5nIjoxMDE0LCIuL2VuZF9wbHVzIjoxMDE5fV0sMTAxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZW5kK3Quc2l6ZS8xZTZ9fSx7fV0sMTAyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzBdKTxyJiZNYXRoLmFicyh0WzFdLWVbMV0pPG59ZnVuY3Rpb24gbyh0LGUscixvLGwpe3ZhciBjLHU9ZS5qb2luKCIsIiksZj10LmNyb3NzaW5nc1t1XSxoPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0wLGE9MDt0PjIwJiZlPzIwOD09PXR8fDExMTQ9PT10P249MD09PXJbMF0/MTotMTphPTA9PT1yWzFdPzE6LTE6LTEhPT1pLkJPVFRPTVNUQVJULmluZGV4T2YodCk/YT0xOi0xIT09aS5MRUZUU1RBUlQuaW5kZXhPZih0KT9uPTE6LTEhPT1pLlRPUFNUQVJULmluZGV4T2YodCk/YT0tMTpuPS0xO3JldHVybltuLGFdfShmLHIsZSkscD1bcyh0LGUsWy1oWzBdLC1oWzFdXSldLGQ9dC56Lmxlbmd0aCxnPXQuelswXS5sZW5ndGgsbT1lLnNsaWNlKCksdj1oLnNsaWNlKCk7Zm9yKGM9MDtjPDFlNDtjKyspe2lmKGY+MjA/KGY9aS5DSE9PU0VTQURETEVbZl1bKGhbMF18fGhbMV0pPDA/MDoxXSx0LmNyb3NzaW5nc1t1XT1pLlNBRERMRVJFTUFJTkRFUltmXSk6ZGVsZXRlIHQuY3Jvc3NpbmdzW3VdLCEoaD1pLk5FV0RFTFRBW2ZdKSl7bi5sb2coIkZvdW5kIGJhZCBtYXJjaGluZyBpbmRleDoiLGYsZSx0LmxldmVsKTticmVha31wLnB1c2gocyh0LGUsaCkpLGVbMF0rPWhbMF0sZVsxXSs9aFsxXSx1PWUuam9pbigiLCIpLGEocFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTJdLG8sbCkmJnAucG9wKCk7dmFyIHk9aFswXSYmKGVbMF08MHx8ZVswXT5nLTIpfHxoWzFdJiYoZVsxXTwwfHxlWzFdPmQtMik7aWYoZVswXT09PW1bMF0mJmVbMV09PT1tWzFdJiZoWzBdPT09dlswXSYmaFsxXT09PXZbMV18fHImJnkpYnJlYWs7Zj10LmNyb3NzaW5nc1t1XX0xZTQ9PT1jJiZuLmxvZygiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyPyIpO3ZhciB4LGIsXyx3LFQsayxNLEEsUyxFLEMsTCxJLFAseixPPWEocFswXSxwW3AubGVuZ3RoLTFdLG8sbCksRD0wLFI9LjIqdC5zbW9vdGhpbmcsRj1bXSxCPTA7Zm9yKGM9MTtjPHAubGVuZ3RoO2MrKylMPXBbY10sST1wW2MtMV0sUD12b2lkIDAsej12b2lkIDAsUD1MWzJdLUlbMl0sej1MWzNdLUlbM10sRCs9TT1NYXRoLnNxcnQoUCpQK3oqeiksRi5wdXNoKE0pO3ZhciBOPUQvRi5sZW5ndGgqUjtmdW5jdGlvbiBqKHQpe3JldHVybiBwW3QlcC5sZW5ndGhdfWZvcihjPXAubGVuZ3RoLTI7Yz49QjtjLS0paWYoKHg9RltjXSk8Til7Zm9yKF89MCxiPWMtMTtiPj1CJiZ4K0ZbYl08TjtiLS0peCs9RltiXTtpZihPJiZjPT09cC5sZW5ndGgtMilmb3IoXz0wO188YiYmeCtGW19dPE47XysrKXgrPUZbX107VD1jLWIrXysxLGs9TWF0aC5mbG9vcigoYytiK18rMikvMiksdz1PfHxjIT09cC5sZW5ndGgtMj9PfHwtMSE9PWI/VCUyP2ooayk6WyhqKGspWzBdK2ooaysxKVswXSkvMiwoaihrKVsxXStqKGsrMSlbMV0pLzJdOnBbMF06cFtwLmxlbmd0aC0xXSxwLnNwbGljZShiKzEsYy1iKzEsdyksYz1iKzEsXyYmKEI9XyksTyYmKGM9PT1wLmxlbmd0aC0yP3BbX109cFtwLmxlbmd0aC0xXTowPT09YyYmKHBbcC5sZW5ndGgtMV09cFswXSkpfWZvcihwLnNwbGljZSgwLEIpLGM9MDtjPHAubGVuZ3RoO2MrKylwW2NdLmxlbmd0aD0yO2lmKCEocC5sZW5ndGg8MikpaWYoTylwLnBvcCgpLHQucGF0aHMucHVzaChwKTtlbHNle3J8fG4ubG9nKCJVbmNsb3NlZCBpbnRlcmlvciBjb250b3VyPyIsdC5sZXZlbCxtLmpvaW4oIiwiKSxwLmpvaW4oIkwiKSk7dmFyIFU9ITE7Zm9yKEE9MDtBPHQuZWRnZXBhdGhzLmxlbmd0aDtBKyspaWYoRT10LmVkZ2VwYXRoc1tBXSwhVSYmYShFWzBdLHBbcC5sZW5ndGgtMV0sbyxsKSl7cC5wb3AoKSxVPSEwO3ZhciBWPSExO2ZvcihTPTA7Uzx0LmVkZ2VwYXRocy5sZW5ndGg7UysrKWlmKGEoKEM9dC5lZGdlcGF0aHNbU10pW0MubGVuZ3RoLTFdLHBbMF0sbyxsKSl7Vj0hMCxwLnNoaWZ0KCksdC5lZGdlcGF0aHMuc3BsaWNlKEEsMSksUz09PUE/dC5wYXRocy5wdXNoKHAuY29uY2F0KEMpKTooUz5BJiZTLS0sdC5lZGdlcGF0aHNbU109Qy5jb25jYXQocCxFKSk7YnJlYWt9Vnx8KHQuZWRnZXBhdGhzW0FdPXAuY29uY2F0KEUpKX1mb3IoQT0wO0E8dC5lZGdlcGF0aHMubGVuZ3RoJiYhVTtBKyspYSgoRT10LmVkZ2VwYXRoc1tBXSlbRS5sZW5ndGgtMV0scFswXSxvLGwpJiYocC5zaGlmdCgpLHQuZWRnZXBhdGhzW0FdPUUuY29uY2F0KHApLFU9ITApO1V8fHQuZWRnZXBhdGhzLnB1c2gocCl9fWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuPWVbMF0rTWF0aC5tYXgoclswXSwwKSxpPWVbMV0rTWF0aC5tYXgoclsxXSwwKSxhPXQueltpXVtuXSxvPXQueGF4aXMscz10LnlheGlzO2lmKHJbMV0pe3ZhciBsPSh0LmxldmVsLWEpLyh0LnpbaV1bbisxXS1hKTtyZXR1cm5bby5jMnAoKDEtbCkqdC54W25dK2wqdC54W24rMV0sITApLHMuYzJwKHQueVtpXSwhMCksbitsLGldfXZhciBjPSh0LmxldmVsLWEpLyh0LnpbaSsxXVtuXS1hKTtyZXR1cm5bby5jMnAodC54W25dLCEwKSxzLmMycCgoMS1jKSp0LnlbaV0rYyp0LnlbaSsxXSwhMCksbixpK2NdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxzLGw7Zm9yKGU9ZXx8LjAxLHI9cnx8LjAxLGE9MDthPHQubGVuZ3RoO2ErKyl7Zm9yKHM9dFthXSxsPTA7bDxzLnN0YXJ0cy5sZW5ndGg7bCsrKW8ocyxzLnN0YXJ0c1tsXSwiZWRnZSIsZSxyKTtmb3IoaT0wO09iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKS5sZW5ndGgmJmk8MWU0OylpKyssbyhzLE9iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKVswXS5zcGxpdCgiLCIpLm1hcChOdW1iZXIpLHZvaWQgMCxlLHIpOzFlND09PWkmJm4ubG9nKCJJbmZpbml0ZSBsb29wIGluIGNvbnRvdXI/Iil9fX0seyIuLi8uLi9saWIiOjc3OCwiLi9jb25zdGFudHMiOjEwMTJ9XSwxMDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uL2hlYXRtYXAvaG92ZXIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcz1pKHQsZSxyLGEsbywhMCk7cmV0dXJuIHMmJnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC50cmFjZTsiY29uc3RyYWludCI9PT1lLmNvbnRvdXJzLnR5cGUmJihlLmZpbGxjb2xvciYmbi5vcGFjaXR5KGUuZmlsbGNvbG9yKT90LmNvbG9yPW4uYWRkT3BhY2l0eShlLmZpbGxjb2xvciwxKTplLmNvbnRvdXJzLnNob3dsaW5lcyYmbi5vcGFjaXR5KGUubGluZS5jb2xvcikmJih0LmNvbG9yPW4uYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsMSkpKX0pKSxzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uL2hlYXRtYXAvaG92ZXIiOjEwNzJ9XSwxMDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLGNvbG9yYmFyOnQoIi4vY29sb3JiYXIiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNvbnRvdXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImNvbnRvdXIiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4NDEsIi4vYXR0cmlidXRlcyI6MTAwOCwiLi9jYWxjIjoxMDA5LCIuL2NvbG9yYmFyIjoxMDExLCIuL2RlZmF1bHRzIjoxMDE3LCIuL2hvdmVyIjoxMDIxLCIuL3Bsb3QiOjEwMjYsIi4vc3R5bGUiOjEwMjh9XSwxMDIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtpZihpfHwoaT17fSksdCgiY29udG91cnMuc2hvd2xhYmVscyIpKXt2YXIgYT1lLmZvbnQ7bi5jb2VyY2VGb250KHQsImNvbnRvdXJzLmxhYmVsZm9udCIse2ZhbWlseTphLmZhbWlseSxzaXplOmEuc2l6ZSxjb2xvcjpyfSksdCgiY29udG91cnMubGFiZWxmb3JtYXQiKX0hMSE9PWkuaGFzSG92ZXImJnQoInpob3ZlcmZvcm1hdCIpfX0seyIuLi8uLi9saWIiOjc3OH1dLDEwMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGE9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNvbnRvdXJzLHI9ZS5zdGFydCxvPWEoZSkscz1lLnNpemV8fDEsbD1NYXRoLmZsb29yKChvLXIpL3MpKzEsYz0ibGluZXMiPT09ZS5jb2xvcmluZz8wOjEsdT1pLmV4dHJhY3RPcHRzKHQpO2lzRmluaXRlKHMpfHwocz0xLGw9MSk7dmFyIGYsaCxwPXUucmV2ZXJzZXNjYWxlP2kuZmxpcFNjYWxlKHUuY29sb3JzY2FsZSk6dS5jb2xvcnNjYWxlLGQ9cC5sZW5ndGgsZz1uZXcgQXJyYXkoZCksbT1uZXcgQXJyYXkoZCk7aWYoImhlYXRtYXAiPT09ZS5jb2xvcmluZyl7dmFyIHY9dS5taW4seT11Lm1heDtmb3IoaD0wO2g8ZDtoKyspZj1wW2hdLGdbaF09ZlswXSooeS12KSt2LG1baF09ZlsxXTt2YXIgeD1uLmV4dGVudChbdix5LGUuc3RhcnQsZS5zdGFydCtzKihsLTEpXSksYj14W3Y8eT8wOjFdLF89eFt2PHk/MTowXTtiIT09diYmKGcuc3BsaWNlKDAsMCxiKSxtLnNwbGljZSgwLDAsbVswXSkpLF8hPT15JiYoZy5wdXNoKF8pLG0ucHVzaChtW20ubGVuZ3RoLTFdKSl9ZWxzZSBmb3IoaD0wO2g8ZDtoKyspZj1wW2hdLGdbaF09KGZbMF0qKGwrYy0xKS1jLzIpKnMrcixtW2hdPWZbMV07cmV0dXJuIGkubWFrZUNvbG9yU2NhbGVGdW5jKHtkb21haW46ZyxyYW5nZTptfSx7bm9OdW1lcmljQ2hlY2s6ITB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTUsIi4vZW5kX3BsdXMiOjEwMTksZDM6MTY5fV0sMTAyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGkodCxlKXt2YXIgcj0oZVswXVswXT50PzA6MSkrKGVbMF1bMV0+dD8wOjIpKyhlWzFdWzFdPnQ/MDo0KSsoZVsxXVswXT50PzA6OCk7cmV0dXJuIDU9PT1yfHwxMD09PXI/dD4oZVswXVswXStlWzBdWzFdK2VbMV1bMF0rZVsxXVsxXSkvND81PT09cj83MTM6MTExNDo1PT09cj8xMDQ6MjA4OjE1PT09cj8wOnJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHMsbCxjLHUsZixoPXRbMF0ueixwPWgubGVuZ3RoLGQ9aFswXS5sZW5ndGgsZz0yPT09cHx8Mj09PWQ7Zm9yKHI9MDtyPHAtMTtyKyspZm9yKG89W10sMD09PXImJihvPW8uY29uY2F0KG4uQk9UVE9NU1RBUlQpKSxyPT09cC0yJiYobz1vLmNvbmNhdChuLlRPUFNUQVJUKSksZT0wO2U8ZC0xO2UrKylmb3IoYT1vLnNsaWNlKCksMD09PWUmJihhPWEuY29uY2F0KG4uTEVGVFNUQVJUKSksZT09PWQtMiYmKGE9YS5jb25jYXQobi5SSUdIVFNUQVJUKSkscz1lKyIsIityLGw9W1toW3JdW2VdLGhbcl1bZSsxXV0sW2hbcisxXVtlXSxoW3IrMV1bZSsxXV1dLGY9MDtmPHQubGVuZ3RoO2YrKykoYz1pKCh1PXRbZl0pLmxldmVsLGwpKSYmKHUuY3Jvc3NpbmdzW3NdPWMsLTEhPT1hLmluZGV4T2YoYykmJih1LnN0YXJ0cy5wdXNoKFtlLHJdKSxnJiYtMSE9PWEuaW5kZXhPZihjLGEuaW5kZXhPZihjKSsxKSYmdS5zdGFydHMucHVzaChbZSxyXSkpKX19LHsiLi9jb25zdGFudHMiOjEwMTJ9XSwxMDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSx1PXQoIi4uL2hlYXRtYXAvcGxvdCIpLGY9dCgiLi9tYWtlX2Nyb3NzaW5ncyIpLGg9dCgiLi9maW5kX2FsbF9wYXRocyIpLHA9dCgiLi9lbXB0eV9wYXRoaW5mbyIpLGQ9dCgiLi9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIiksZz10KCIuL2Nsb3NlX2JvdW5kYXJpZXMiKSxtPXQoIi4vY29uc3RhbnRzIiksdj1tLkxBQkVMT1BUSU1JWkVSO2Z1bmN0aW9uIHkodCxlKXt2YXIgcixuLG8scyxsLGMsdSxmPSIiLGg9MCxwPXQuZWRnZXBhdGhzLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKSxkPSEwO2Z1bmN0aW9uIGcodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tZVsyXVsxXSk8LjAxfWZ1bmN0aW9uIG0odCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXVswXSk8LjAxfWZ1bmN0aW9uIHYodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVsyXVswXSk8LjAxfWZvcig7cC5sZW5ndGg7KXtmb3IoYz1hLnNtb290aG9wZW4odC5lZGdlcGF0aHNbaF0sdC5zbW9vdGhpbmcpLGYrPWQ/YzpjLnJlcGxhY2UoL15NLywiTCIpLHAuc3BsaWNlKHAuaW5kZXhPZihoKSwxKSxyPXQuZWRnZXBhdGhzW2hdW3QuZWRnZXBhdGhzW2hdLmxlbmd0aC0xXSxzPS0xLG89MDtvPDQ7bysrKXtpZighcil7aS5sb2coIk1pc3NpbmcgZW5kPyIsaCx0KTticmVha31mb3IodT1yLE1hdGguYWJzKHVbMV0tZVswXVsxXSk8LjAxJiYhdihyKT9uPWVbMV06bShyKT9uPWVbMF06ZyhyKT9uPWVbM106dihyKSYmKG49ZVsyXSksbD0wO2w8dC5lZGdlcGF0aHMubGVuZ3RoO2wrKyl7dmFyIHk9dC5lZGdlcGF0aHNbbF1bMF07TWF0aC5hYnMoclswXS1uWzBdKTwuMDE/TWF0aC5hYnMoclswXS15WzBdKTwuMDEmJih5WzFdLXJbMV0pKihuWzFdLXlbMV0pPj0wJiYobj15LHM9bCk6TWF0aC5hYnMoclsxXS1uWzFdKTwuMDE/TWF0aC5hYnMoclsxXS15WzFdKTwuMDEmJih5WzBdLXJbMF0pKihuWzBdLXlbMF0pPj0wJiYobj15LHM9bCk6aS5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIscixuLHkpfWlmKHI9bixzPj0wKWJyZWFrO2YrPSJMIitufWlmKHM9PT10LmVkZ2VwYXRocy5sZW5ndGgpe2kubG9nKCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aCIpO2JyZWFrfWg9cywoZD0tMT09PXAuaW5kZXhPZihoKSkmJihoPXBbMF0sZis9IloiKX1mb3IoaD0wO2g8dC5wYXRocy5sZW5ndGg7aCsrKWYrPWEuc21vb3RoY2xvc2VkKHQucGF0aHNbaF0sdC5zbW9vdGhpbmcpO3JldHVybiBmfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGE9ZS53aWR0aC8yLG89ZS5oZWlnaHQvMixzPXQueCxsPXQueSxjPXQudGhldGEsdT1NYXRoLmNvcyhjKSphLGY9TWF0aC5zaW4oYykqYSxoPShzPm4uY2VudGVyP24ucmlnaHQtczpzLW4ubGVmdCkvKHUrTWF0aC5hYnMoTWF0aC5zaW4oYykqbykpLHA9KGw+bi5taWRkbGU/bi5ib3R0b20tbDpsLW4udG9wKS8oTWF0aC5hYnMoZikrTWF0aC5jb3MoYykqbyk7aWYoaDwxfHxwPDEpcmV0dXJuIDEvMDt2YXIgZD12LkVER0VDT1NUKigxLyhoLTEpKzEvKHAtMSkpO2QrPXYuQU5HTEVDT1NUKmMqYztmb3IodmFyIGc9cy11LG09bC1mLHk9cyt1LHg9bCtmLGI9MDtiPHIubGVuZ3RoO2IrKyl7dmFyIF89cltiXSx3PU1hdGguY29zKF8udGhldGEpKl8ud2lkdGgvMixUPU1hdGguc2luKF8udGhldGEpKl8ud2lkdGgvMixrPTIqaS5zZWdtZW50RGlzdGFuY2UoZyxtLHkseCxfLngtdyxfLnktVCxfLngrdyxfLnkrVCkvKGUuaGVpZ2h0K18uaGVpZ2h0KSxNPV8ubGV2ZWw9PT1lLmxldmVsLEE9TT92LlNBTUVMRVZFTERJU1RBTkNFOjE7aWYoazw9QSlyZXR1cm4gMS8wO2QrPXYuTkVJR0hCT1JDT1NUKihNP3YuU0FNRUxFVkVMRkFDVE9SOjEpLyhrLUEpfXJldHVybiBkfWZ1bmN0aW9uIGIodCl7dmFyIGUscixuPXQudHJhY2UuX2VtcHR5cG9pbnRzLGk9W10sYT10LnoubGVuZ3RoLG89dC56WzBdLmxlbmd0aCxzPVtdO2ZvcihlPTA7ZTxvO2UrKylzLnB1c2goMSk7Zm9yKGU9MDtlPGE7ZSsrKWkucHVzaChzLnNsaWNlKCkpO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspaVsocj1uW2VdKVswXV1bclsxXV09MDtyZXR1cm4gdC56bWFzaz1pLGl9ci5wbG90PWZ1bmN0aW9uKHQsZSxvLHMpe3ZhciBsPWUueGF4aXMsYz1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKHMsbywiY29udG91ciIpLmVhY2goKGZ1bmN0aW9uKG8pe3ZhciBzPW4uc2VsZWN0KHRoaXMpLHY9b1swXSx4PXYudHJhY2UsXz12Lngsdz12LnksVD14LmNvbnRvdXJzLGs9cChULGUsdiksTT1pLmVuc3VyZVNpbmdsZShzLCJnIiwiaGVhdG1hcGNvbG9yaW5nIiksQT1bXTsiaGVhdG1hcCI9PT1ULmNvbG9yaW5nJiYoQT1bb10pLHUodCxlLEEsTSksZihrKSxoKGspO3ZhciBTPWwuYzJwKF9bMF0sITApLEU9bC5jMnAoX1tfLmxlbmd0aC0xXSwhMCksQz1jLmMycCh3WzBdLCEwKSxMPWMuYzJwKHdbdy5sZW5ndGgtMV0sITApLEk9W1tTLExdLFtFLExdLFtFLENdLFtTLENdXSxQPWs7ImNvbnN0cmFpbnQiPT09VC50eXBlJiYoUD1kKGssVC5fb3BlcmF0aW9uKSksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VyYmciKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKCJmaWxsIj09PXIuY29sb3Jpbmc/WzBdOltdKTtuLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksbi5leGl0KCkucmVtb3ZlKCksbi5hdHRyKCJkIiwiTSIrZS5qb2luKCJMIikrIloiKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfShzLEksVCksZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89ImZpbGwiPT09YS5jb2xvcmluZ3x8ImNvbnN0cmFpbnQiPT09YS50eXBlJiYiPSIhPT1hLl9vcGVyYXRpb24scz0iTSIrci5qb2luKCJMIikrIloiO28mJmcoZSxhKTt2YXIgbD1pLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmZpbGwiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKG8/ZTpbXSk7bC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLGwuZXhpdCgpLnJlbW92ZSgpLGwuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9KHQucHJlZml4Qm91bmRhcnk/czoiIikreSh0LHIpO2U/bi5zZWxlY3QodGhpcykuYXR0cigiZCIsZSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKTpuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pKX0ocyxQLEksVCksZnVuY3Rpb24odCxlLG8scyxsKXt2YXIgYz1pLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmxpbmVzIiksdT0hMSE9PWwuc2hvd2xpbmVzLGY9bC5zaG93bGFiZWxzLGg9dSYmZixwPXIuY3JlYXRlTGluZXMoYyx1fHxmLGUpLGQ9ci5jcmVhdGVMaW5lQ2xpcChjLGgsbyxzLnRyYWNlLnVpZCksZz10LnNlbGVjdEFsbCgiZy5jb250b3VybGFiZWxzIikuZGF0YShmP1swXTpbXSk7aWYoZy5leGl0KCkucmVtb3ZlKCksZy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJsYWJlbHMiLCEwKSxmKXt2YXIgdj1bXSx5PVtdO2kuY2xlYXJMb2NhdGlvbkNhY2hlKCk7dmFyIHg9ci5sYWJlbEZvcm1hdHRlcihvLHMpLGI9YS50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChhLmZvbnQsbC5sYWJlbGZvbnQpLF89ZVswXS54YXhpcyx3PWVbMF0ueWF4aXMsVD1fLl9sZW5ndGgsaz13Ll9sZW5ndGgsTT1fLnJhbmdlLEE9dy5yYW5nZSxTPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHMueCksRT1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxzLngpLEM9aS5hZ2dOdW1zKE1hdGgubWluLG51bGwscy55KSxMPWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLHMueSksST1NYXRoLm1heChfLmMycChTLCEwKSwwKSxQPU1hdGgubWluKF8uYzJwKEUsITApLFQpLHo9TWF0aC5tYXgody5jMnAoTCwhMCksMCksTz1NYXRoLm1pbih3LmMycChDLCEwKSxrKSxEPXt9O01bMF08TVsxXT8oRC5sZWZ0PUksRC5yaWdodD1QKTooRC5sZWZ0PVAsRC5yaWdodD1JKSxBWzBdPEFbMV0/KEQudG9wPXosRC5ib3R0b209Tyk6KEQudG9wPU8sRC5ib3R0b209eiksRC5taWRkbGU9KEQudG9wK0QuYm90dG9tKS8yLEQuY2VudGVyPShELmxlZnQrRC5yaWdodCkvMix2LnB1c2goW1tELmxlZnQsRC50b3BdLFtELnJpZ2h0LEQudG9wXSxbRC5yaWdodCxELmJvdHRvbV0sW0QubGVmdCxELmJvdHRvbV1dKTt2YXIgUj1NYXRoLnNxcnQoVCpUK2sqayksRj1tLkxBQkVMRElTVEFOQ0UqUi9NYXRoLm1heCgxLGUubGVuZ3RoL20uTEFCRUxJTkNSRUFTRSk7cC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1yLmNhbGNUZXh0T3B0cyh0LmxldmVsLHgsYixvKTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PWkuZ2V0VmlzaWJsZVNlZ21lbnQodGhpcyxELGUuaGVpZ2h0LzIpO2lmKHQmJiEodC5sZW48KGUud2lkdGgrZS5oZWlnaHQpKm0uTEFCRUxNSU4pKWZvcih2YXIgbj1NYXRoLm1pbihNYXRoLmNlaWwodC5sZW4vRiksbS5MQUJFTE1BWCksYT0wO2E8bjthKyspe3ZhciBvPXIuZmluZEJlc3RUZXh0TG9jYXRpb24odGhpcyx0LGUseSxEKTtpZighbylicmVhaztyLmFkZExhYmVsRGF0YShvLGUseSx2KX19KSl9KSksYi5yZW1vdmUoKSxyLmRyYXdMYWJlbHMoZyx5LG8sZCxoP3Y6bnVsbCl9ZiYmIXUmJnAucmVtb3ZlKCl9KHMsayx0LHYsVCksZnVuY3Rpb24odCxlLHIsbixvKXt2YXIgcz1uLnRyYWNlLGw9ci5fZnVsbExheW91dC5fY2xpcHMsYz0iY2xpcCIrcy51aWQsdT1sLnNlbGVjdEFsbCgiIyIrYykuZGF0YShzLmNvbm5lY3RnYXBzP1tdOlswXSk7aWYodS5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjb250b3VyY2xpcCIsITApLmF0dHIoImlkIixjKSx1LmV4aXQoKS5yZW1vdmUoKSwhMT09PXMuY29ubmVjdGdhcHMpe3ZhciBwPXtsZXZlbDouOSxjcm9zc2luZ3M6e30sc3RhcnRzOltdLGVkZ2VwYXRoczpbXSxwYXRoczpbXSx4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMseDpuLngseTpuLnksejpiKG4pLHNtb290aGluZzowfTtmKFtwXSksaChbcF0pLGcoW3BdLHt0eXBlOiJsZXZlbHMifSksaS5lbnN1cmVTaW5nbGUodSwicGF0aCIsIiIpLmF0dHIoImQiLChwLnByZWZpeEJvdW5kYXJ5PyJNIitvLmpvaW4oIkwiKSsiWiI6IiIpK3kocCxvKSl9ZWxzZSBjPW51bGw7YS5zZXRDbGlwVXJsKHQsYyxyKX0ocyxlLHQsdixJKX0pKX0sci5jcmVhdGVMaW5lcz1mdW5jdGlvbih0LGUscil7dmFyIG49clswXS5zbW9vdGhpbmcsaT10LnNlbGVjdEFsbCgiZy5jb250b3VybGV2ZWwiKS5kYXRhKGU/cjpbXSk7aWYoaS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJsZXZlbCIsITApLGUpe3ZhciBvPWkuc2VsZWN0QWxsKCJwYXRoLm9wZW5saW5lIikuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQucGVkZ2VwYXRoc3x8dC5lZGdlcGF0aHN9KSk7by5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoIm9wZW5saW5lIiwhMCksby5hdHRyKCJkIiwoZnVuY3Rpb24odCl7cmV0dXJuIGEuc21vb3Rob3Blbih0LG4pfSkpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKTt2YXIgcz1pLnNlbGVjdEFsbCgicGF0aC5jbG9zZWRsaW5lIikuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQucHBhdGhzfHx0LnBhdGhzfSkpO3MuZXhpdCgpLnJlbW92ZSgpLHMuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJjbG9zZWRsaW5lIiwhMCkscy5hdHRyKCJkIiwoZnVuY3Rpb24odCl7cmV0dXJuIGEuc21vb3RoY2xvc2VkKHQsbil9KSkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpfXJldHVybiBpfSxyLmNyZWF0ZUxpbmVDbGlwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWU/ImNsaXBsaW5lIituOm51bGwsbz1yLl9mdWxsTGF5b3V0Ll9jbGlwcy5zZWxlY3RBbGwoIiMiK2kpLmRhdGEoZT9bMF06W10pO3JldHVybiBvLmV4aXQoKS5yZW1vdmUoKSxvLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImNvbnRvdXJsaW5lY2xpcCIsITApLmF0dHIoImlkIixpKSxhLnNldENsaXBVcmwodCxpLHIpLG99LHIubGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ZS50cmFjZSxpPW4uY29udG91cnMsYT17dHlwZToibGluZWFyIixfaWQ6Inljb250b3VyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIifTtpZihpLmxhYmVsZm9ybWF0KWEudGlja2Zvcm1hdD1pLmxhYmVsZm9ybWF0LGMoYSxyKTtlbHNle3ZhciBzPW8uZXh0cmFjdE9wdHMobik7aWYocyYmcy5jb2xvcmJhciYmcy5jb2xvcmJhci5fYXhpcylhPXMuY29sb3JiYXIuX2F4aXM7ZWxzZXtpZigiY29uc3RyYWludCI9PT1pLnR5cGUpe3ZhciB1PWkudmFsdWU7QXJyYXkuaXNBcnJheSh1KT9hLnJhbmdlPVt1WzBdLHVbdS5sZW5ndGgtMV1dOmEucmFuZ2U9W3UsdV19ZWxzZSBhLnJhbmdlPVtpLnN0YXJ0LGkuZW5kXSxhLm50aWNrcz0oaS5lbmQtaS5zdGFydCkvaS5zaXplO2EucmFuZ2VbMF09PT1hLnJhbmdlWzFdJiYoYS5yYW5nZVsxXSs9YS5yYW5nZVswXXx8MSksYS5udGlja3N8fChhLm50aWNrcz0xZTMpLGMoYSxyKSxsLnByZXBUaWNrcyhhKSxhLl90bWluPW51bGwsYS5fdG1heD1udWxsfX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGwudGlja1RleHQoYSx0KS50ZXh0fX0sci5jYWxjVGV4dE9wdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSh0KTtyLnRleHQoaSkuY2FsbChzLmNvbnZlcnRUb1RzcGFucyxuKTt2YXIgbz1yLm5vZGUoKSxsPWEuYkJveChvLCEwKTtyZXR1cm57dGV4dDppLHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LGZvbnRTaXplOitvLnN0eWxlWyJmb250LXNpemUiXS5yZXBsYWNlKCJweCIsIiIpLGxldmVsOnQsZHk6KGwudG9wK2wuYm90dG9tKS8yfX0sci5maW5kQmVzdFRleHRMb2NhdGlvbj1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHMsbCxjLHUsZj1yLndpZHRoO2UuaXNDbG9zZWQ/KHM9ZS5sZW4vdi5JTklUSUFMU0VBUkNIUE9JTlRTLG89ZS5taW4rcy8yLGw9ZS5tYXgpOihzPShlLmxlbi1mKS8odi5JTklUSUFMU0VBUkNIUE9JTlRTKzEpLG89ZS5taW4rcytmLzIsbD1lLm1heC0ocytmKS8yKTtmb3IodmFyIGg9MS8wLHA9MDtwPHYuSVRFUkFUSU9OUztwKyspe2Zvcih2YXIgZD1vO2Q8bDtkKz1zKXt2YXIgZz1pLmdldFRleHRMb2NhdGlvbih0LGUudG90YWwsZCxmKSxtPXgoZyxyLG4sYSk7bTxoJiYoaD1tLHU9ZyxjPWQpfWlmKGg+Mip2Lk1BWENPU1QpYnJlYWs7cCYmKHMvPTIpLGw9KG89Yy1zLzIpKzEuNSpzfWlmKGg8PXYuTUFYQ09TVClyZXR1cm4gdX0sci5hZGRMYWJlbERhdGE9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZS5mb250U2l6ZSxhPWUud2lkdGgraS8zLG89TWF0aC5tYXgoMCxlLmhlaWdodC1pLzMpLHM9dC54LGw9dC55LGM9dC50aGV0YSx1PU1hdGguc2luKGMpLGY9TWF0aC5jb3MoYyksaD1mdW5jdGlvbih0LGUpe3JldHVybltzK3QqZi1lKnUsbCt0KnUrZSpmXX0scD1baCgtYS8yLC1vLzIpLGgoLWEvMixvLzIpLGgoYS8yLG8vMiksaChhLzIsLW8vMildO3IucHVzaCh7dGV4dDplLnRleHQseDpzLHk6bCxkeTplLmR5LHRoZXRhOmMsbGV2ZWw6ZS5sZXZlbCx3aWR0aDphLGhlaWdodDpvfSksbi5wdXNoKHApfSxyLmRyYXdMYWJlbHM9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgbD10LnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dCsiLCIrdC54KyIsIit0LnkrIiwiK3QudGhldGF9KSk7aWYobC5leGl0KCkucmVtb3ZlKCksbC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoeyJkYXRhLW5vdGV4IjoxLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9KS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LngrTWF0aC5zaW4odC50aGV0YSkqdC5keSxpPXQueS1NYXRoLmNvcyh0LnRoZXRhKSp0LmR5O24uc2VsZWN0KHRoaXMpLnRleHQodC50ZXh0KS5hdHRyKHt4OmUseTppLHRyYW5zZm9ybToicm90YXRlKCIrMTgwKnQudGhldGEvTWF0aC5QSSsiICIrZSsiICIraSsiKSJ9KS5jYWxsKHMuY29udmVydFRvVHNwYW5zLHIpfSkpLG8pe2Zvcih2YXIgYz0iIix1PTA7dTxvLmxlbmd0aDt1KyspYys9Ik0iK29bdV0uam9pbigiTCIpKyJaIjtpLmVuc3VyZVNpbmdsZShhLCJwYXRoIiwiIikuYXR0cigiZCIsYyl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo4NDgsIi4uL2hlYXRtYXAvcGxvdCI6MTA3NiwiLi9jbG9zZV9ib3VuZGFyaWVzIjoxMDEwLCIuL2NvbnN0YW50cyI6MTAxMiwiLi9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIjoxMDE2LCIuL2VtcHR5X3BhdGhpbmZvIjoxMDE4LCIuL2ZpbmRfYWxsX3BhdGhzIjoxMDIwLCIuL21ha2VfY3Jvc3NpbmdzIjoxMDI1LGQzOjE2OX1dLDEwMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBpPXt0eXBlOiJsaW5lYXIiLHJhbmdlOlt0LGVdfTtyZXR1cm4gbi5hdXRvVGlja3MoaSwoZS10KS8ocnx8MTUpKSxpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuY29udG91cnM7aWYodC5hdXRvY29udG91cil7dmFyIG89dC56bWluLHM9dC56bWF4Oyh0LnphdXRvfHx2b2lkIDA9PT1vKSYmKG89aS5hZ2dOdW1zKE1hdGgubWluLG51bGwsZSkpLCh0LnphdXRvfHx2b2lkIDA9PT1zKSYmKHM9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsZSkpO3ZhciBsPWEobyxzLHQubmNvbnRvdXJzKTtyLnNpemU9bC5kdGljayxyLnN0YXJ0PW4udGlja0ZpcnN0KGwpLGwucmFuZ2UucmV2ZXJzZSgpLHIuZW5kPW4udGlja0ZpcnN0KGwpLHIuc3RhcnQ9PT1vJiYoci5zdGFydCs9ci5zaXplKSxyLmVuZD09PXMmJihyLmVuZC09ci5zaXplKSxyLnN0YXJ0PnIuZW5kJiYoci5zdGFydD1yLmVuZD0oci5zdGFydCtyLmVuZCkvMiksdC5faW5wdXQuY29udG91cnN8fCh0Ll9pbnB1dC5jb250b3Vycz17fSksaS5leHRlbmRGbGF0KHQuX2lucHV0LmNvbnRvdXJzLHtzdGFydDpyLnN0YXJ0LGVuZDpyLmVuZCxzaXplOnIuc2l6ZX0pLHQuX2lucHV0LmF1dG9jb250b3VyPSEwfWVsc2UgaWYoImNvbnN0cmFpbnQiIT09ci50eXBlKXt2YXIgYyx1PXIuc3RhcnQsZj1yLmVuZCxoPXQuX2lucHV0LmNvbnRvdXJzO2lmKHU+ZiYmKHIuc3RhcnQ9aC5zdGFydD1mLGY9ci5lbmQ9aC5lbmQ9dSx1PXIuc3RhcnQpLCEoci5zaXplPjApKWM9dT09PWY/MTphKHUsZix0Lm5jb250b3VycykuZHRpY2ssaC5zaXplPXIuc2l6ZT1jfX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjh9XSwxMDI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uL2hlYXRtYXAvc3R5bGUiKSxvPXQoIi4vbWFrZV9jb2xvcl9tYXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmNvbnRvdXIiKTtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZSxhPXIuY29udG91cnMscz1yLmxpbmUsbD1hLnNpemV8fDEsYz1hLnN0YXJ0LHU9ImNvbnN0cmFpbnQiPT09YS50eXBlLGY9IXUmJiJsaW5lcyI9PT1hLmNvbG9yaW5nLGg9IXUmJiJmaWxsIj09PWEuY29sb3JpbmcscD1mfHxoP28ocik6bnVsbDtlLnNlbGVjdEFsbCgiZy5jb250b3VybGV2ZWwiKS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUscy53aWR0aCxmP3AodC5sZXZlbCk6cy5jb2xvcixzLmRhc2gpfSkpO3ZhciBkPWEubGFiZWxmb250O2lmKGUuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMgdGV4dCIpLmVhY2goKGZ1bmN0aW9uKHQpe2kuZm9udChuLnNlbGVjdCh0aGlzKSx7ZmFtaWx5OmQuZmFtaWx5LHNpemU6ZC5zaXplLGNvbG9yOmQuY29sb3J8fChmP3AodC5sZXZlbCk6cy5jb2xvcil9KX0pKSx1KWUuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIHBhdGgiKS5zdHlsZSgiZmlsbCIsci5maWxsY29sb3IpO2Vsc2UgaWYoaCl7dmFyIGc7ZS5zZWxlY3RBbGwoImcuY29udG91cmZpbGwgcGF0aCIpLnN0eWxlKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PWcmJihnPXQubGV2ZWwpLHAodC5sZXZlbCsuNSpsKX0pKSx2b2lkIDA9PT1nJiYoZz1jKSxlLnNlbGVjdEFsbCgiZy5jb250b3VyYmcgcGF0aCIpLnN0eWxlKCJmaWxsIixwKGctLjUqbCkpfX0pKSxhKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2NSwiLi4vaGVhdG1hcC9zdHlsZSI6MTA3NywiLi9tYWtlX2NvbG9yX21hcCI6MTAyNCxkMzoxNjl9XSwxMDI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGk9dCgiLi9sYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzLGw9cigiY29udG91cnMuY29sb3JpbmciKSxjPSIiOyJmaWxsIj09PWwmJihzPXIoImNvbnRvdXJzLnNob3dsaW5lcyIpKSwhMSE9PXMmJigibGluZXMiIT09bCYmKGM9cigibGluZS5jb2xvciIsIiMwMDAiKSkscigibGluZS53aWR0aCIsLjUpLHIoImxpbmUuZGFzaCIpKSwibm9uZSIhPT1sJiYoITAhPT10LnNob3dsZWdlbmQmJihlLnNob3dsZWdlbmQ9ITEpLGUuX2RmbHRTaG93TGVnZW5kPSExLG4odCxlLGEscix7cHJlZml4OiIiLGNMZXR0ZXI6InoifSkpLHIoImxpbmUuc21vb3RoaW5nIiksaShyLGEsYyxvKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NTMsIi4vbGFiZWxfZGVmYXVsdHMiOjEwMjN9XSwxMDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vY29udG91ci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz1pLmNvbnRvdXJzO2UuZXhwb3J0cz1vKHtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx6Om4ueixhOm4ueCxhMDpuLngwLGRhOm4uZHgsYjpuLnksYjA6bi55MCxkYjpuLmR5LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCx0cmFuc3Bvc2U6bi50cmFuc3Bvc2UsYXR5cGU6bi54dHlwZSxidHlwZTpuLnl0eXBlLGZpbGxjb2xvcjppLmZpbGxjb2xvcixhdXRvY29udG91cjppLmF1dG9jb250b3VyLG5jb250b3VyczppLm5jb250b3Vycyxjb250b3Vyczp7dHlwZTpzLnR5cGUsc3RhcnQ6cy5zdGFydCxlbmQ6cy5lbmQsc2l6ZTpzLnNpemUsY29sb3Jpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJsaW5lcyIsIm5vbmUiXSxkZmx0OiJmaWxsIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lczpzLnNob3dsaW5lcyxzaG93bGFiZWxzOnMuc2hvd2xhYmVscyxsYWJlbGZvbnQ6cy5sYWJlbGZvbnQsbGFiZWxmb3JtYXQ6cy5sYWJlbGZvcm1hdCxvcGVyYXRpb246cy5vcGVyYXRpb24sdmFsdWU6cy52YWx1ZSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvY29udG91cjohMX19LGxpbmU6e2NvbG9yOmkubGluZS5jb2xvcix3aWR0aDppLmxpbmUud2lkdGgsZGFzaDppLmxpbmUuZGFzaCxzbW9vdGhpbmc6aS5saW5lLnNtb290aGluZyxlZGl0VHlwZToicGxvdCJ9LHRyYW5zZm9ybXM6dm9pZCAwfSxhKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vY29udG91ci9hdHRyaWJ1dGVzIjoxMDA4LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjEwNjV9XSwxMDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6Iiksbz10KCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5Iikscz10KCIuLi9oZWF0bWFwL2ludGVycDJkIiksbD10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLGM9dCgiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5IiksdT10KCIuL2RlZmF1bHRzIiksZj10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksaD10KCIuLi9jb250b3VyL3NldF9jb250b3VycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWYodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7aWYoIWUuYXx8IWUuYil7dmFyIHA9dC5kYXRhW3IuaW5kZXhdLGQ9dC5kYXRhW2UuaW5kZXhdO2QuYXx8KGQuYT1wLmEpLGQuYnx8KGQuYj1wLmIpLHUoZCxlLGUuX2RlZmF1bHRDb2xvcix0Ll9mdWxsTGF5b3V0KX12YXIgZz1mdW5jdGlvbih0LGUpe3ZhciByLHUsZixoLHAsZCxnLG09ZS5fY2FycGV0VHJhY2Usdj1tLmFheGlzLHk9bS5iYXhpczt2Ll9taW5EdGljaz0wLHkuX21pbkR0aWNrPTAsaS5pc0FycmF5MUQoZS56KSYmYShlLHYseSwiYSIsImIiLFsieiJdKTtyPWUuX2E9ZS5fYXx8ZS5hLGg9ZS5fYj1lLl9ifHxlLmIscj1yP3YubWFrZUNhbGNkYXRhKGUsIl9hIik6W10saD1oP3kubWFrZUNhbGNkYXRhKGUsIl9iIik6W10sdT1lLmEwfHwwLGY9ZS5kYXx8MSxwPWUuYjB8fDAsZD1lLmRifHwxLGc9ZS5fej1vKGUuX3p8fGUueixlLnRyYW5zcG9zZSksZS5fZW1wdHlwb2ludHM9bChnKSxzKGcsZS5fZW1wdHlwb2ludHMpO3ZhciB4PWkubWF4Um93TGVuZ3RoKGcpLGI9InNjYWxlZCI9PT1lLnh0eXBlPyIiOnIsXz1jKGUsYix1LGYseCx2KSx3PSJzY2FsZWQiPT09ZS55dHlwZT8iIjpoLFQ9YyhlLHcscCxkLGcubGVuZ3RoLHkpLGs9e2E6XyxiOlQsejpnfTsibGV2ZWxzIj09PWUuY29udG91cnMudHlwZSYmIm5vbmUiIT09ZS5jb250b3Vycy5jb2xvcmluZyYmbih0LGUse3ZhbHM6Zyxjb250YWluZXJTdHI6IiIsY0xldHRlcjoieiJ9KTtyZXR1cm5ba119KHQsZSk7cmV0dXJuIGgoZSxlLl96KSxnfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY1MSwiLi4vLi4vbGliIjo3NzgsIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjk4MSwiLi4vY29udG91ci9zZXRfY29udG91cnMiOjEwMjcsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjEwNjcsIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6IjoxMDY5LCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyI6MTA3MSwiLi4vaGVhdG1hcC9pbnRlcnAyZCI6MTA3NCwiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5IjoxMDc1LCIuL2RlZmF1bHRzIjoxMDMyfV0sMTAzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0cyIpLHM9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLGw9dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXtmdW5jdGlvbiB1KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9aWYodSgiY2FycGV0IiksdC5hJiZ0LmIpe2lmKCFpKHQsZSx1LGMsImEiLCJiIikpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTt1KCJ0ZXh0IiksImNvbnN0cmFpbnQiPT09dSgiY29udG91cnMudHlwZSIpP28odCxlLHUsYyxyLHtoYXNIb3ZlcjohMX0pOihzKHQsZSx1LChmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxhLHIpfSkpLGwodCxlLHUsYyx7aGFzSG92ZXI6ITF9KSl9ZWxzZSBlLl9kZWZhdWx0Q29sb3I9cixlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo3NzgsIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0cyI6MTAxMywiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyI6MTAxNSwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyI6MTAyOSwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiOjEwNzksIi4vYXR0cmlidXRlcyI6MTAzMH1dLDEwMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9jb250b3VyL2NvbG9yYmFyIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4uL2NvbnRvdXIvc3R5bGUiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY29udG91cmNhcnBldCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsImNhcnBldCIsImNvbnRvdXIiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsImhhc0xpbmVzIiwiY2FycGV0RGVwZW5kZW50Iiwibm9Ib3ZlciIsIm5vU29ydGluZ0J5VmFsdWUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vY29udG91ci9jb2xvcmJhciI6MTAxMSwiLi4vY29udG91ci9zdHlsZSI6MTAyOCwiLi9hdHRyaWJ1dGVzIjoxMDMwLCIuL2NhbGMiOjEwMzEsIi4vZGVmYXVsdHMiOjEwMzIsIi4vcGxvdCI6MTAzNH1dLDEwMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2NhcnBldC9tYXBfMWRfYXJyYXkiKSxhPXQoIi4uL2NhcnBldC9tYWtlcGF0aCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uL2NvbnRvdXIvbWFrZV9jcm9zc2luZ3MiKSxjPXQoIi4uL2NvbnRvdXIvZmluZF9hbGxfcGF0aHMiKSx1PXQoIi4uL2NvbnRvdXIvcGxvdCIpLGY9dCgiLi4vY29udG91ci9jb25zdGFudHMiKSxoPXQoIi4uL2NvbnRvdXIvY29udmVydF90b19jb25zdHJhaW50cyIpLHA9dCgiLi4vY29udG91ci9lbXB0eV9wYXRoaW5mbyIpLGQ9dCgiLi4vY29udG91ci9jbG9zZV9ib3VuZGFyaWVzIiksZz10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksbT10KCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiKTtmdW5jdGlvbiB2KHQsZSxyKXt2YXIgbj10LmdldFBvaW50QXRMZW5ndGgoZSksaT10LmdldFBvaW50QXRMZW5ndGgociksYT1pLngtbi54LG89aS55LW4ueSxzPU1hdGguc3FydChhKmErbypvKTtyZXR1cm5bYS9zLG8vc119ZnVuY3Rpb24geSh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSk7cmV0dXJuW3RbMF0vZSx0WzFdL2VdfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj1NYXRoLmFicyh0WzBdKmVbMF0rdFsxXSplWzFdKTtyZXR1cm4gTWF0aC5zcXJ0KDEtcipyKS9yfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixiKXt2YXIgXz1lLnhheGlzLHc9ZS55YXhpcztzLm1ha2VUcmFjZUdyb3VwcyhiLHIsImNvbnRvdXIiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgYj1uLnNlbGVjdCh0aGlzKSxUPXJbMF0saz1ULnRyYWNlLE09ay5fY2FycGV0VHJhY2U9Zyh0LGspLEE9dC5jYWxjZGF0YVtNLmluZGV4XVswXTtpZihNLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PU0udmlzaWJsZSl7dmFyIFM9VC5hLEU9VC5iLEM9ay5jb250b3VycyxMPXAoQyxlLFQpLEk9ImNvbnN0cmFpbnQiPT09Qy50eXBlLFA9Qy5fb3BlcmF0aW9uLHo9ST8iPSI9PT1QPyJsaW5lcyI6ImZpbGwiOkMuY29sb3JpbmcsTz1bW1NbMF0sRVtFLmxlbmd0aC0xXV0sW1NbUy5sZW5ndGgtMV0sRVtFLmxlbmd0aC0xXV0sW1NbUy5sZW5ndGgtMV0sRVswXV0sW1NbMF0sRVswXV1dO2woTCk7dmFyIEQ9MWUtOCooU1tTLmxlbmd0aC0xXS1TWzBdKSxSPTFlLTgqKEVbRS5sZW5ndGgtMV0tRVswXSk7YyhMLEQsUik7dmFyIEYsQixOLGosVT1MOyJjb25zdHJhaW50Ij09PUMudHlwZSYmKFU9aChMLFApKSxmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtmb3IoYT10W3JdLG89YS5wZWRnZXBhdGhzPVtdLHM9YS5wcGF0aHM9W10sbj0wO248YS5lZGdlcGF0aHMubGVuZ3RoO24rKyl7Zm9yKHU9YS5lZGdlcGF0aHNbbl0sbD1bXSxpPTA7aTx1Lmxlbmd0aDtpKyspbFtpXT1lKHVbaV0pO28ucHVzaChsKX1mb3Iobj0wO248YS5wYXRocy5sZW5ndGg7bisrKXtmb3IodT1hLnBhdGhzW25dLGM9W10saT0wO2k8dS5sZW5ndGg7aSsrKWNbaV09ZSh1W2ldKTtzLnB1c2goYyl9fX0oTCxIKTt2YXIgVj1bXTtmb3Ioaj1BLmNsaXBzZWdtZW50cy5sZW5ndGgtMTtqPj0wO2otLSlGPUEuY2xpcHNlZ21lbnRzW2pdLEI9aShbXSxGLngsXy5jMnApLE49aShbXSxGLnksdy5jMnApLEIucmV2ZXJzZSgpLE4ucmV2ZXJzZSgpLFYucHVzaChhKEIsTixGLmJpY3ViaWMpKTt2YXIgcT0iTSIrVi5qb2luKCJMIikrIloiOyFmdW5jdGlvbih0LGUscixuLG8sbCl7dmFyIGMsdSxmLGgscD1zLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmJnIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCIhPT1sfHxvP1tdOlswXSk7cC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPVtdO2ZvcihoPTA7aDxlLmxlbmd0aDtoKyspYz1lW2hdLHU9aShbXSxjLngsci5jMnApLGY9aShbXSxjLnksbi5jMnApLGQucHVzaChhKHUsZixjLmJpY3ViaWMpKTtwLmF0dHIoImQiLCJNIitkLmpvaW4oIkwiKSsiWiIpLnN0eWxlKCJzdHJva2UiLCJub25lIil9KGIsQS5jbGlwc2VnbWVudHMsXyx3LEkseiksZnVuY3Rpb24odCxlLHIsaSxhLGwsYyx1LGYsaCxwKXt2YXIgZz0iZmlsbCI9PT1oO2cmJmQoYSx0LmNvbnRvdXJzKTt2YXIgdj1zLmVuc3VyZVNpbmdsZShlLCJnIiwiY29udG91cmZpbGwiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKGc/YTpbXSk7di5lbnRlcigpLmFwcGVuZCgicGF0aCIpLHYuZXhpdCgpLnJlbW92ZSgpLHYuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9KHQucHJlZml4Qm91bmRhcnk/cDoiIikrZnVuY3Rpb24odCxlLHIsbixpLGEsbCxjKXt2YXIgdSxmLGgscCxkLGcsdix5PSIiLHg9ZS5lZGdlcGF0aHMubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpLGI9ITAsXz0xZS00Kk1hdGguYWJzKHJbMF1bMF0tclsyXVswXSksdz0xZS00Kk1hdGguYWJzKHJbMF1bMV0tclsyXVsxXSk7ZnVuY3Rpb24gVCh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1yWzBdWzFdKTx3fWZ1bmN0aW9uIGsodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tclsyXVsxXSk8d31mdW5jdGlvbiBNKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLXJbMF1bMF0pPF99ZnVuY3Rpb24gQSh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzJdWzBdKTxffWZ1bmN0aW9uIFModCxlKXt2YXIgcixuLG8scyx1PSIiO2ZvcihUKHQpJiYhQSh0KXx8ayh0KSYmIU0odCk/KHM9aS5hYXhpcyxvPW0oaSxhLFt0WzBdLGVbMF1dLC41Kih0WzFdK2VbMV0pKSk6KHM9aS5iYXhpcyxvPW0oaSxhLC41Kih0WzBdK2VbMF0pLFt0WzFdLGVbMV1dKSkscj0xO3I8by5sZW5ndGg7cisrKWZvcih1Kz1zLnNtb290aGluZz8iQyI6IkwiLG49MDtuPG9bcl0ubGVuZ3RoO24rKyl7dmFyIGY9b1tyXVtuXTt1Kz1bbC5jMnAoZlswXSksYy5jMnAoZlsxXSldKyIgIn1yZXR1cm4gdX11PTAsZj1udWxsO2Zvcig7eC5sZW5ndGg7KXt2YXIgRT1lLmVkZ2VwYXRoc1t1XVswXTtmb3IoZiYmKHkrPVMoZixFKSksdj1vLnNtb290aG9wZW4oZS5lZGdlcGF0aHNbdV0ubWFwKG4pLGUuc21vb3RoaW5nKSx5Kz1iP3Y6di5yZXBsYWNlKC9eTS8sIkwiKSx4LnNwbGljZSh4LmluZGV4T2YodSksMSksZj1lLmVkZ2VwYXRoc1t1XVtlLmVkZ2VwYXRoc1t1XS5sZW5ndGgtMV0sZD0tMSxwPTA7cDw0O3ArKyl7aWYoIWYpe3MubG9nKCJNaXNzaW5nIGVuZD8iLHUsZSk7YnJlYWt9Zm9yKFQoZikmJiFBKGYpP2g9clsxXTpNKGYpP2g9clswXTprKGYpP2g9clszXTpBKGYpJiYoaD1yWzJdKSxnPTA7ZzxlLmVkZ2VwYXRocy5sZW5ndGg7ZysrKXt2YXIgQz1lLmVkZ2VwYXRoc1tnXVswXTtNYXRoLmFicyhmWzBdLWhbMF0pPF8/TWF0aC5hYnMoZlswXS1DWzBdKTxfJiYoQ1sxXS1mWzFdKSooaFsxXS1DWzFdKT49MCYmKGg9QyxkPWcpOk1hdGguYWJzKGZbMV0taFsxXSk8dz9NYXRoLmFicyhmWzFdLUNbMV0pPHcmJihDWzBdLWZbMF0pKihoWzBdLUNbMF0pPj0wJiYoaD1DLGQ9Zyk6cy5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIsZixoLEMpfWlmKGQ+PTApYnJlYWs7eSs9UyhmLGgpLGY9aH1pZihkPT09ZS5lZGdlcGF0aHMubGVuZ3RoKXtzLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha311PWQsKGI9LTE9PT14LmluZGV4T2YodSkpJiYodT14WzBdLHkrPVMoZixoKSsiWiIsZj1udWxsKX1mb3IodT0wO3U8ZS5wYXRocy5sZW5ndGg7dSsrKXkrPW8uc21vb3RoY2xvc2VkKGUucGF0aHNbdV0ubWFwKG4pLGUuc21vb3RoaW5nKTtyZXR1cm4geX0oMCx0LGwsYyx1LGYscixpKTtlP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLCJub25lIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSl9KGssYixfLHcsVSxPLEgsTSxBLHoscSksZnVuY3Rpb24odCxlLHIsaSxhLGwsYyl7dmFyIGg9cy5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJsaW5lcyIpLHA9ITEhPT1hLnNob3dsaW5lcyxkPWEuc2hvd2xhYmVscyxnPXAmJmQsbT11LmNyZWF0ZUxpbmVzKGgscHx8ZCxlKSxiPXUuY3JlYXRlTGluZUNsaXAoaCxnLHIsaS50cmFjZS51aWQpLF89dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEoZD9bMF06W10pO2lmKF8uZXhpdCgpLnJlbW92ZSgpLF8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksZCl7dmFyIHc9bC54YXhpcyxUPWwueWF4aXMsaz13Ll9sZW5ndGgsTT1ULl9sZW5ndGgsQT1bW1swLDBdLFtrLDBdLFtrLE1dLFswLE1dXV0sUz1bXTtzLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciBFPXUubGFiZWxGb3JtYXR0ZXIocixpKSxDPW8udGVzdGVyLmFwcGVuZCgidGV4dCIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwoby5mb250LGEubGFiZWxmb250KSxMPXtsZWZ0OjAscmlnaHQ6ayxjZW50ZXI6ay8yLHRvcDowLGJvdHRvbTpNLG1pZGRsZTpNLzJ9LEk9TWF0aC5zcXJ0KGsqaytNKk0pLFA9Zi5MQUJFTERJU1RBTkNFKkkvTWF0aC5tYXgoMSxlLmxlbmd0aC9mLkxBQkVMSU5DUkVBU0UpO20uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dS5jYWxjVGV4dE9wdHModC5sZXZlbCxFLEMscik7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIG49cy5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLEwsZS5oZWlnaHQvMik7aWYobiYmKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG8scz0wO3M8ci5wZWRnZXBhdGhzLmxlbmd0aDtzKyspZT09PXIucGVkZ2VwYXRoc1tzXSYmKG89ci5lZGdlcGF0aHNbc10pO2lmKCFvKXJldHVybjt2YXIgbD1pLmFbMF0sYz1pLmFbaS5hLmxlbmd0aC0xXSx1PWkuYlswXSxmPWkuYltpLmIubGVuZ3RoLTFdO2Z1bmN0aW9uIGgodCxlKXt2YXIgcixuPTA7cmV0dXJuKE1hdGguYWJzKHRbMF0tbCk8LjF8fE1hdGguYWJzKHRbMF0tYyk8LjEpJiYocj15KGkuZHh5ZGJfcm91Z2godFswXSx0WzFdLC4xKSksbj1NYXRoLm1heChuLGEqeChlLHIpLzIpKSwoTWF0aC5hYnModFsxXS11KTwuMXx8TWF0aC5hYnModFsxXS1mKTwuMSkmJihyPXkoaS5keHlkYV9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSp4KGUscikvMikpLG59dmFyIHA9dih0LDAsMSksZD12KHQsbi50b3RhbCxuLnRvdGFsLTEpLGc9aChvWzBdLHApLG09bi50b3RhbC1oKG9bby5sZW5ndGgtMV0sZCk7bi5taW48ZyYmKG4ubWluPWcpO24ubWF4Pm0mJihuLm1heD1tKTtuLmxlbj1uLm1heC1uLm1pbn0odGhpcyxyLHQsbixjLGUuaGVpZ2h0KSwhKG4ubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpmLkxBQkVMTUlOKSkpZm9yKHZhciBpPU1hdGgubWluKE1hdGguY2VpbChuLmxlbi9QKSxmLkxBQkVMTUFYKSxhPTA7YTxpO2ErKyl7dmFyIG89dS5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLG4sZSxTLEwpO2lmKCFvKWJyZWFrO3UuYWRkTGFiZWxEYXRhKG8sZSxTLEEpfX0pKX0pKSxDLnJlbW92ZSgpLHUuZHJhd0xhYmVscyhfLFMscixiLGc/QTpudWxsKX1kJiYhcCYmbS5yZW1vdmUoKX0oYixMLHQsVCxDLGUsTSksby5zZXRDbGlwVXJsKGIsTS5fY2xpcFBhdGhJZCx0KX1mdW5jdGlvbiBIKHQpe3ZhciBlPU0uYWIyeHkodFswXSx0WzFdLCEwKTtyZXR1cm5bXy5jMnAoZVswXSksdy5jMnAoZVsxXSldfX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2xpYiI6Nzc4LCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiOjk2NSwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCI6OTgxLCIuLi9jYXJwZXQvbWFrZXBhdGgiOjk4MiwiLi4vY2FycGV0L21hcF8xZF9hcnJheSI6OTgzLCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXMiOjEwMTAsIi4uL2NvbnRvdXIvY29uc3RhbnRzIjoxMDEyLCIuLi9jb250b3VyL2NvbnZlcnRfdG9fY29uc3RyYWludHMiOjEwMTYsIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm8iOjEwMTgsIi4uL2NvbnRvdXIvZmluZF9hbGxfcGF0aHMiOjEwMjAsIi4uL2NvbnRvdXIvbWFrZV9jcm9zc2luZ3MiOjEwMjUsIi4uL2NvbnRvdXIvcGxvdCI6MTAyNixkMzoxNjl9XSwxMDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vc2NhdHRlcm1hcGJveC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7bG9uOm8ubG9uLGxhdDpvLmxhdCx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHJhZGl1czp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMCxtaW46MSxkZmx0OjMwfSxiZWxvdzp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LHRleHQ6by50ZXh0LGhvdmVydGV4dDpvLmhvdmVydGV4dCxob3ZlcmluZm86cyh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsb24iLCJsYXQiLCJ6IiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6aSgpLHNob3dsZWdlbmQ6cyh7fSxhLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0sbigiIix7Y0xldHRlcjoieiIsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY1MCwiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjQsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjkwNiwiLi4vc2NhdHRlcm1hcGJveC9hdHRyaWJ1dGVzIjoxMjUyfV0sMTAzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLHM9dCgiLi4vLi4vbGliIikuXztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5fbGVuZ3RoLGw9bmV3IEFycmF5KHIpLGM9ZS56LHU9aShjKSYmYy5sZW5ndGgsZj0wO2Y8cjtmKyspe3ZhciBoPWxbZl09e30scD1lLmxvbltmXSxkPWUubGF0W2ZdO2lmKGgubG9ubGF0PW4ocCkmJm4oZCk/WytwLCtkXTpbYSxhXSx1KXt2YXIgZz1jW2ZdO2guej1uKGcpP2c6YX19cmV0dXJuIG8odCxlLHt2YWxzOnU/YzpbMCwxXSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoieiJ9KSxyJiYobFswXS50PXtsYWJlbHM6e2xhdDpzKHQsImxhdDoiKSsiICIsbG9uOnModCwibG9uOiIpKyIgIn19KSxsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjUxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sMTAzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbD10KCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyIpLm1ha2VCbGFuaztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPSEwPT09ZS52aXNpYmxlJiYwIT09ZS5fbGVuZ3RoLGM9ZS5fb3B0cz17aGVhdG1hcDp7bGF5b3V0Ont2aXNpYmlsaXR5OiJub25lIn0scGFpbnQ6e319LGdlb2pzb246bCgpfTtpZighcilyZXR1cm4gYzt2YXIgdSxmPVtdLGg9ZS56LHA9ZS5yYWRpdXMsZD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoaCkmJmgubGVuZ3RoLGc9aS5pc0FycmF5T3JUeXBlZEFycmF5KHApO2Zvcih1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBtPXRbdV0sdj1tLmxvbmxhdDtpZih2WzBdIT09cyl7dmFyIHk9e307aWYoZCl7dmFyIHg9bS56O3kuej14IT09cz94OjB9ZyYmKHkucj1uKHBbdV0pJiZwW3VdPjA/K3BbdV06MCksZi5wdXNoKHt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOnZ9LHByb3BlcnRpZXM6eX0pfX12YXIgYj1vLmV4dHJhY3RPcHRzKGUpLF89Yi5yZXZlcnNlc2NhbGU/by5mbGlwU2NhbGUoYi5jb2xvcnNjYWxlKTpiLmNvbG9yc2NhbGUsdz1fWzBdWzFdLFQ9WyJpbnRlcnBvbGF0ZSIsWyJsaW5lYXIiXSxbImhlYXRtYXAtZGVuc2l0eSJdLDAsYS5vcGFjaXR5KHcpPDE/dzphLmFkZE9wYWNpdHkodywwKV07Zm9yKHU9MTt1PF8ubGVuZ3RoO3UrKylULnB1c2goX1t1XVswXSxfW3VdWzFdKTt2YXIgaz1bImludGVycG9sYXRlIixbImxpbmVhciJdLFsiZ2V0IiwieiJdLGIubWluLDAsYi5tYXgsMV07cmV0dXJuIGkuZXh0ZW5kRmxhdChjLmhlYXRtYXAucGFpbnQseyJoZWF0bWFwLXdlaWdodCI6ZD9rOjEvKGIubWF4LWIubWluKSwiaGVhdG1hcC1jb2xvciI6VCwiaGVhdG1hcC1yYWRpdXMiOmc/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToiciJ9OmUucmFkaXVzLCJoZWF0bWFwLW9wYWNpdHkiOmUub3BhY2l0eX0pLGMuZ2VvanNvbj17dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOmZ9LGMuaGVhdG1hcC5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsY319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiOjc3MiwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDEwMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9uIil8fFtdLGM9cygibGF0Iil8fFtdLHU9TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpO3U/KGUuX2xlbmd0aD11LHMoInoiKSxzKCJyYWRpdXMiKSxzKCJiZWxvdyIpLHMoInRleHQiKSxzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY1MywiLi4vLi4vbGliIjo3NzgsIi4vYXR0cmlidXRlcyI6MTAzNX1dLDEwMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHQuej1lLnosdH19LHt9XSwxMDQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uL3NjYXR0ZXJtYXBib3gvaG92ZXIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPWEodCxlLHIpO2lmKG8pe3ZhciBzPW9bMF0sbD1zLmNkLGM9bFswXS50cmFjZSx1PWxbcy5pbmRleF07aWYoZGVsZXRlIHMuY29sb3IsInoiaW4gdSl7dmFyIGY9cy5zdWJwbG90Lm1vY2tBeGlzO3Muej11Lnoscy56TGFiZWw9aS50aWNrVGV4dChmLGYuYzJsKHUueiksImhvdmVyIikudGV4dH1yZXR1cm4gcy5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIpe2lmKHQuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIGk9KGUuaGl8fHQuaG92ZXJpbmZvKS5zcGxpdCgiKyIpLGE9LTEhPT1pLmluZGV4T2YoImFsbCIpLG89LTEhPT1pLmluZGV4T2YoImxvbiIpLHM9LTEhPT1pLmluZGV4T2YoImxhdCIpLGw9ZS5sb25sYXQsYz1bXTtmdW5jdGlvbiB1KHQpe3JldHVybiB0KyJceGIwIn1hfHxvJiZzP2MucHVzaCgiKCIrdShsWzBdKSsiLCAiK3UobFsxXSkrIikiKTpvP2MucHVzaChyLmxvbit1KGxbMF0pKTpzJiZjLnB1c2goci5sYXQrdShsWzFdKSk7KGF8fC0xIT09aS5pbmRleE9mKCJ0ZXh0IikpJiZuLmZpbGxUZXh0KGUsdCxjKTtyZXR1cm4gYy5qb2luKCI8YnI+Iil9KGMsdSxsWzBdLnQubGFiZWxzKSxbc119fX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vc2NhdHRlcm1hcGJveC9ob3ZlciI6MTI1N31dLDEwNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4uL3NjYXR0ZXJtYXBib3gvZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLGdldEJlbG93OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuZ2V0TWFwTGF5ZXJzKCksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLGE9aS5pZDtpZigic3ltYm9sIj09PWkudHlwZSYmInN0cmluZyI9PXR5cGVvZiBhJiYtMT09PWEuaW5kZXhPZigicGxvdGx5LSIpKXJldHVybiBhfX0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImRlbnNpdHltYXBib3giLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLGNhdGVnb3JpZXM6WyJtYXBib3giLCJnbCIsInNob3dMZWdlbmQiXSxtZXRhOntocl9uYW1lOiJkZW5zaXR5X21hcGJveCJ9fX0seyIuLi8uLi9wbG90cy9tYXBib3giOjg4NSwiLi4vaGVhdG1hcC9jb2xvcmJhciI6MTA2OCwiLi4vc2NhdHRlcm1hcGJveC9mb3JtYXRfbGFiZWxzIjoxMjU2LCIuL2F0dHJpYnV0ZXMiOjEwMzUsIi4vY2FsYyI6MTAzNiwiLi9kZWZhdWx0cyI6MTAzOCwiLi9ldmVudF9kYXRhIjoxMDM5LCIuL2hvdmVyIjoxMDQwLCIuL3Bsb3QiOjEwNDJ9XSwxMDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29udmVydCIpLGk9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyIpLnRyYWNlTGF5ZXJQcmVmaXg7ZnVuY3Rpb24gYSh0LGUpe3RoaXMudHlwZT0iZGVuc2l0eW1hcGJveCIsdGhpcy5zdWJwbG90PXQsdGhpcy51aWQ9ZSx0aGlzLnNvdXJjZUlkPSJzb3VyY2UtIitlLHRoaXMubGF5ZXJMaXN0PVtbImhlYXRtYXAiLGkrZSsiLWhlYXRtYXAiXV0sdGhpcy5iZWxvdz1udWxsfXZhciBvPWEucHJvdG90eXBlO28udXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3VicGxvdCxyPXRoaXMubGF5ZXJMaXN0LGk9bih0KSxhPWUuYmVsb3dMb29rdXBbInRyYWNlLSIrdGhpcy51aWRdO2UubWFwLmdldFNvdXJjZSh0aGlzLnNvdXJjZUlkKS5zZXREYXRhKGkuZ2VvanNvbiksYSE9PXRoaXMuYmVsb3cmJih0aGlzLl9yZW1vdmVMYXllcnMoKSx0aGlzLl9hZGRMYXllcnMoaSxhKSx0aGlzLmJlbG93PWEpO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dLGw9c1swXSxjPXNbMV0sdT1pW2xdO2Uuc2V0T3B0aW9ucyhjLCJzZXRMYXlvdXRQcm9wZXJ0eSIsdS5sYXlvdXQpLCJ2aXNpYmxlIj09PXUubGF5b3V0LnZpc2liaWxpdHkmJmUuc2V0T3B0aW9ucyhjLCJzZXRQYWludFByb3BlcnR5Iix1LnBhaW50KX19LG8uX2FkZExheWVycz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN1YnBsb3Qsbj10aGlzLmxheWVyTGlzdCxpPXRoaXMuc291cmNlSWQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9b1swXSxsPXRbc107ci5hZGRMYXllcih7dHlwZTpzLGlkOm9bMV0sc291cmNlOmksbGF5b3V0OmwubGF5b3V0LHBhaW50OmwucGFpbnR9LGUpfX0sby5fcmVtb3ZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT10aGlzLmxheWVyTGlzdCxyPWUubGVuZ3RoLTE7cj49MDtyLS0pdC5yZW1vdmVMYXllcihlW3JdWzFdKX0sby5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0aGlzLl9yZW1vdmVMYXllcnMoKSx0LnJlbW92ZVNvdXJjZSh0aGlzLnNvdXJjZUlkKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxpPW5ldyBhKHQsci51aWQpLG89aS5zb3VyY2VJZCxzPW4oZSksbD1pLmJlbG93PXQuYmVsb3dMb29rdXBbInRyYWNlLSIrci51aWRdO3JldHVybiB0Lm1hcC5hZGRTb3VyY2Uobyx7dHlwZToiZ2VvanNvbiIsZGF0YTpzLmdlb2pzb259KSxpLl9hZGRMYXllcnMocyxsKSxpfX0seyIuLi8uLi9wbG90cy9tYXBib3gvY29uc3RhbnRzIjo4ODMsIi4vY29udmVydCI6MTAzN31dLDEwNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bi5tZXJnZUFycmF5KGUudGV4dCx0LCJ0eCIpLG4ubWVyZ2VBcnJheShlLmhvdmVydGV4dCx0LCJodHgiKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuLm1lcmdlQXJyYXkoaS5vcGFjaXR5LHQsIm1vIiksbi5tZXJnZUFycmF5KGkuY29sb3IsdCwibWMiKTt2YXIgYT1pLmxpbmU7YSYmKG4ubWVyZ2VBcnJheShhLmNvbG9yLHQsIm1sYyIpLG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShhLndpZHRoLHQsIm1sdyIpKX19fSx7Ii4uLy4uL2xpYiI6Nzc4fV0sMTA0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikubGluZSxhPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsbD10KCIuL2NvbnN0YW50cyIpLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIik7ZS5leHBvcnRzPXt4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHhwZXJpb2Q6bi54cGVyaW9kLHlwZXJpb2Q6bi55cGVyaW9kLHhwZXJpb2QwOm4ueHBlcmlvZDAseXBlcmlvZDA6bi55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50Om4ueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50Om4ueXBlcmlvZGFsaWdubWVudCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpvKHt9LHtrZXlzOmwuZXZlbnREYXRhS2V5c30pLGhvdmVyaW5mbzpjKHt9LGEuaG92ZXJpbmZvLHtmbGFnczpbIm5hbWUiLCJ4IiwieSIsInRleHQiLCJwZXJjZW50IGluaXRpYWwiLCJwZXJjZW50IHByZXZpb3VzIiwicGVyY2VudCB0b3RhbCJdfSksdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsInBlcmNlbnQgaW5pdGlhbCIsInBlcmNlbnQgcHJldmlvdXMiLCJwZXJjZW50IHRvdGFsIiwidmFsdWUiXSxleHRyYXM6WyJub25lIl0sZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITF9LHRleHR0ZW1wbGF0ZTpzKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOmwuZXZlbnREYXRhS2V5cy5jb25jYXQoWyJsYWJlbCIsInZhbHVlIl0pfSksdGV4dDpuLnRleHQsdGV4dHBvc2l0aW9uOmMoe30sbi50ZXh0cG9zaXRpb24se2RmbHQ6ImF1dG8ifSksaW5zaWRldGV4dGFuY2hvcjpjKHt9LG4uaW5zaWRldGV4dGFuY2hvcix7ZGZsdDoibWlkZGxlIn0pLHRleHRhbmdsZTpjKHt9LG4udGV4dGFuZ2xlLHtkZmx0OjB9KSx0ZXh0Zm9udDpuLnRleHRmb250LGluc2lkZXRleHRmb250Om4uaW5zaWRldGV4dGZvbnQsb3V0c2lkZXRleHRmb250Om4ub3V0c2lkZXRleHRmb250LGNvbnN0cmFpbnRleHQ6bi5jb25zdHJhaW50ZXh0LGNsaXBvbmF4aXM6bi5jbGlwb25heGlzLG9yaWVudGF0aW9uOmMoe30sbi5vcmllbnRhdGlvbix7fSksb2Zmc2V0OmMoe30sbi5vZmZzZXQse2FycmF5T2s6ITF9KSx3aWR0aDpjKHt9LG4ud2lkdGgse2FycmF5T2s6ITF9KSxtYXJrZXI6bi5tYXJrZXIsY29ubmVjdG9yOntmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjpjKHt9LGkuY29sb3Ise2RmbHQ6dS5kZWZhdWx0TGluZX0pLHdpZHRoOmMoe30saS53aWR0aCx7ZGZsdDowLGVkaXRUeXBlOiJwbG90In0pLGRhc2g6aS5kYXNoLGVkaXRUeXBlOiJzdHlsZSJ9LHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyNCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6OTA2LCIuLi9iYXIvYXR0cmlidXRlcyI6OTIxLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExODcsIi4vY29uc3RhbnRzIjoxMDQ2fV0sMTA0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLGE9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdD09PXM/MDp0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsdSxmLGgscCxkPW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxnPW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKTsiaCI9PT1lLm9yaWVudGF0aW9uPyhyPWQubWFrZUNhbGNkYXRhKGUsIngiKSx1PWcubWFrZUNhbGNkYXRhKGUsInkiKSxjPWkoZSxnLCJ5Iix1KSxwPSEhZS55cGVyaW9kYWxpZ25tZW50KToocj1nLm1ha2VDYWxjZGF0YShlLCJ5IiksdT1kLm1ha2VDYWxjZGF0YShlLCJ4IiksYz1pKGUsZCwieCIsdSkscD0hIWUueHBlcmlvZGFsaWdubWVudCk7dmFyIG0sdj1NYXRoLm1pbihjLmxlbmd0aCxyLmxlbmd0aCkseT1uZXcgQXJyYXkodik7Zm9yKGUuX2Jhc2U9W10sZj0wO2Y8djtmKyspe3JbZl08MCYmKHJbZl09cyk7dmFyIHg9ITE7cltmXSE9PXMmJmYrMTx2JiZyW2YrMV0hPT1zJiYoeD0hMCksaD15W2ZdPXtwOmNbZl0sczpyW2ZdLGNOZXh0Onh9LGUuX2Jhc2VbZl09LS41KmgucyxwJiYoeVtmXS5vcmlnX3A9dVtmXSksZS5pZHMmJihoLmlkPVN0cmluZyhlLmlkc1tmXSkpLDA9PT1mJiYoeVswXS52VG90YWw9MCkseVswXS52VG90YWwrPWwoaC5zKSxoLmJlZ1I9bChoLnMpL2woeVswXS5zKX1mb3IoZj0wO2Y8djtmKyspKGg9eVtmXSkucyE9PXMmJihoLnN1bVI9aC5zL3lbMF0udlRvdGFsLGguZGlmUj12b2lkIDAhPT1tP2gucy9tOjEsbT1oLnMpO3JldHVybiBhKHksZSksbyh5LGUpLHl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6ODI1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTg5LCIuL2FycmF5c190b19jYWxjZGF0YSI6MTA0M31dLDEwNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOlsicGVyY2VudEluaXRpYWwiLCJwZXJjZW50UHJldmlvdXMiLCJwZXJjZW50VG90YWwiXX19LHt9XSwxMDQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuc2V0R3JvdXBQb3NpdGlvbnM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPXQuX2Z1bGxMYXlvdXQsbz10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1lLnhheGlzLGM9ZS55YXhpcyx1PVtdLGY9W10saD1bXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcD1vW2ldLGQ9ImgiPT09cC5vcmllbnRhdGlvbjshMD09PXAudmlzaWJsZSYmcC54YXhpcz09PWwuX2lkJiZwLnlheGlzPT09Yy5faWQmJiJmdW5uZWwiPT09cC50eXBlJiYocj1zW2ldLGQ/aC5wdXNoKHIpOmYucHVzaChyKSx1LnB1c2gocikpfXZhciBnPXttb2RlOmEuZnVubmVsbW9kZSxub3JtOmEuZnVubmVsbm9ybSxnYXA6YS5mdW5uZWxnYXAsZ3JvdXBnYXA6YS5mdW5uZWxncm91cGdhcH07Zm9yKG4odCxsLGMsZixnKSxuKHQsYyxsLGgsZyksaT0wO2k8dS5sZW5ndGg7aSsrKXtyPXVbaV07Zm9yKHZhciBtPTA7bTxyLmxlbmd0aDttKyspbSsxPHIubGVuZ3RoJiYoclttXS5uZXh0UDA9clttKzFdLnAwLHJbbV0ubmV4dFMwPXJbbSsxXS5zMCxyW21dLm5leHRQMT1yW20rMV0ucDEsclttXS5uZXh0UzE9clttKzFdLnMxKX19fSx7Ii4uL2Jhci9jcm9zc190cmFjZV9jYWxjIjo5MjR9XSwxMDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlR3JvdXBpbmdEZWZhdWx0cyxhPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQsbz10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIik7ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiB1KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9aWYobyh0LGUsaSx1KSl7cyh0LGUsaSx1KSx1KCJvcmllbnRhdGlvbiIsZS55JiYhZS54PyJ2IjoiaCIpLHUoIm9mZnNldCIpLHUoIndpZHRoIik7dmFyIGY9dSgidGV4dCIpO3UoImhvdmVydGV4dCIpLHUoImhvdmVydGVtcGxhdGUiKTt2YXIgaD11KCJ0ZXh0cG9zaXRpb24iKTthKHQsZSxpLHUsaCx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITAsbW9kdWxlSGFzQ2xpcG9uYXhpczohMCxtb2R1bGVIYXNUZXh0YW5nbGU6ITAsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiEwfSksIm5vbmUiPT09ZS50ZXh0cG9zaXRpb258fGUudGV4dHRlbXBsYXRlfHx1KCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheShmKT8idGV4dCt2YWx1ZSI6InZhbHVlIik7dmFyIHA9dSgibWFya2VyLmNvbG9yIixyKTtpZih1KCJtYXJrZXIubGluZS5jb2xvciIsYy5kZWZhdWx0TGluZSksdSgibWFya2VyLmxpbmUud2lkdGgiKSx1KCJjb25uZWN0b3IudmlzaWJsZSIpKXUoImNvbm5lY3Rvci5maWxsY29sb3IiLGZ1bmN0aW9uKHQpe3ZhciBlPW4uaXNBcnJheU9yVHlwZWRBcnJheSh0KT8iIzAwMCI6dDtyZXR1cm4gYy5hZGRPcGFjaXR5KGUsLjUqYy5vcGFjaXR5KGUpKX0ocCkpLHUoImNvbm5lY3Rvci5saW5lLndpZHRoIikmJih1KCJjb25uZWN0b3IubGluZS5jb2xvciIpLHUoImNvbm5lY3Rvci5saW5lLmRhc2giKSl9ZWxzZSBlLnZpc2libGU9ITF9LGNyb3NzVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByLGE7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbi5jb2VyY2UoYS5faW5wdXQsYSxsLHQpfWlmKCJncm91cCI9PT1lLmZ1bm5lbG1vZGUpZm9yKHZhciBzPTA7czx0Lmxlbmd0aDtzKyspcj0oYT10W3NdKS5faW5wdXQsaShyLGEsZSxvKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vbGliIjo3NzgsIi4uL2Jhci9kZWZhdWx0cyI6OTI1LCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6MTIwNywiLi4vc2NhdHRlci94eV9kZWZhdWx0cyI6MTIxNCwiLi9hdHRyaWJ1dGVzIjoxMDQ0fV0sMTA0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54PSJ4VmFsImluIGU/ZS54VmFsOmUueCx0Lnk9InlWYWwiaW4gZT9lLnlWYWw6ZS55LCJwZXJjZW50SW5pdGlhbCJpbiBlJiYodC5wZXJjZW50SW5pdGlhbD1lLnBlcmNlbnRJbml0aWFsKSwicGVyY2VudFByZXZpb3VzImluIGUmJih0LnBlcmNlbnRQcmV2aW91cz1lLnBlcmNlbnRQcmV2aW91cyksInBlcmNlbnRUb3RhbCJpbiBlJiYodC5wZXJjZW50VG90YWw9ZS5wZXJjZW50VG90YWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLHR9fSx7fV0sMTA1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikub3BhY2l0eSxpPXQoIi4uL2Jhci9ob3ZlciIpLmhvdmVyT25CYXJzLGE9dCgiLi4vLi4vbGliIikuZm9ybWF0UGVyY2VudDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9aSh0LGUscixvKTtpZihzKXt2YXIgbD1zLmNkLGM9bFswXS50cmFjZSx1PSJoIj09PWMub3JpZW50YXRpb24sZj1sW3MuaW5kZXhdO3NbKHU/IngiOiJ5IikrIkxhYmVsVmFsIl09Zi5zLHMucGVyY2VudEluaXRpYWw9Zi5iZWdSLHMucGVyY2VudEluaXRpYWxMYWJlbD1hKGYuYmVnUiwxKSxzLnBlcmNlbnRQcmV2aW91cz1mLmRpZlIscy5wZXJjZW50UHJldmlvdXNMYWJlbD1hKGYuZGlmUiwxKSxzLnBlcmNlbnRUb3RhbD1mLnN1bVIscy5wZXJjZW50VG90YWxMYWJlbD1hKGYuc3VtUiwxKTt2YXIgaD1mLmhpfHxjLmhvdmVyaW5mbyxwPVtdO2lmKGgmJiJub25lIiE9PWgmJiJza2lwIiE9PWgpe3ZhciBkPSJhbGwiPT09aCxnPWguc3BsaXQoIisiKSxtPWZ1bmN0aW9uKHQpe3JldHVybiBkfHwtMSE9PWcuaW5kZXhPZih0KX07bSgicGVyY2VudCBpbml0aWFsIikmJnAucHVzaChzLnBlcmNlbnRJbml0aWFsTGFiZWwrIiBvZiBpbml0aWFsIiksbSgicGVyY2VudCBwcmV2aW91cyIpJiZwLnB1c2gocy5wZXJjZW50UHJldmlvdXNMYWJlbCsiIG9mIHByZXZpb3VzIiksbSgicGVyY2VudCB0b3RhbCIpJiZwLnB1c2gocy5wZXJjZW50VG90YWxMYWJlbCsiIG9mIHRvdGFsIil9cmV0dXJuIHMuZXh0cmFUZXh0PXAuam9pbigiPGJyPiIpLHMuY29sb3I9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hcmtlcixpPWUubWN8fHIuY29sb3IsYT1lLm1sY3x8ci5saW5lLmNvbG9yLG89ZS5tbHd8fHIubGluZS53aWR0aDtpZihuKGkpKXJldHVybiBpO2lmKG4oYSkmJm8pcmV0dXJuIGF9KGMsZiksW3NdfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9saWIiOjc3OCwiLi4vYmFyL2hvdmVyIjo5Mjh9XSwxMDUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiZnVubmVsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJvcmllbnRlZCIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYmFyL3NlbGVjdCI6OTMzLCIuL2F0dHJpYnV0ZXMiOjEwNDQsIi4vY2FsYyI6MTA0NSwiLi9jcm9zc190cmFjZV9jYWxjIjoxMDQ3LCIuL2RlZmF1bHRzIjoxMDQ4LCIuL2V2ZW50X2RhdGEiOjEwNDksIi4vaG92ZXIiOjEwNTAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEwNTIsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMDUzLCIuL3Bsb3QiOjEwNTQsIi4vc3R5bGUiOjEwNTV9XSwxMDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZnVubmVsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJncm91cCIsIm92ZXJsYXkiXSxkZmx0OiJzdGFjayIsZWRpdFR5cGU6ImNhbGMifSxmdW5uZWxnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSxmdW5uZWxncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMDUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ITE7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWZvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdO2lmKGwudmlzaWJsZSYmImZ1bm5lbCI9PT1sLnR5cGUpe2E9ITA7YnJlYWt9fWEmJihvKCJmdW5uZWxtb2RlIiksbygiZnVubmVsZ2FwIiwuMiksbygiZnVubmVsZ3JvdXBnYXAiKSl9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDUyfV0sMTA1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0scz10KCIuLi9iYXIvcGxvdCIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLmNsZWFyTWluVGV4dFNpemU7ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgaT1bXSxhPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gaVswXT1vLmMycCh0LnMwLCEwKSxhWzBdPXMuYzJwKHQucDAsITApLGlbMV09by5jMnAodC5zMSwhMCksYVsxXT1zLmMycCh0LnAxLCEwKSxpWzJdPW8uYzJwKHQubmV4dFMwLCEwKSxhWzJdPXMuYzJwKHQubmV4dFAwLCEwKSxpWzNdPW8uYzJwKHQubmV4dFMxLCEwKSxhWzNdPXMuYzJwKHQubmV4dFAxLCEwKSxuP1tpLGFdOlthLGldfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXt2YXIgZj10Ll9mdWxsTGF5b3V0O2woImZ1bm5lbCIsZiksZnVuY3Rpb24odCxlLHIscyl7dmFyIGw9ZS54YXhpcyx1PWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMocyxyLCJ0cmFjZSBiYXJzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIHM9bi5zZWxlY3QodGhpcyksZj1yWzBdLnRyYWNlLGg9aS5lbnN1cmVTaW5nbGUocywiZyIsInJlZ2lvbnMiKTtpZihmLmNvbm5lY3RvciYmZi5jb25uZWN0b3IudmlzaWJsZSl7dmFyIHA9ImgiPT09Zi5vcmllbnRhdGlvbixkPWguc2VsZWN0QWxsKCJnLnJlZ2lvbiIpLmRhdGEoaS5pZGVudGl0eSk7ZC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJlZ2lvbiIsITApLGQuZXhpdCgpLnJlbW92ZSgpO3ZhciBnPWQuc2l6ZSgpO2QuZWFjaCgoZnVuY3Rpb24ocixzKXtpZihzPT09Zy0xfHxyLmNOZXh0KXt2YXIgZj1jKHIsbCx1LHApLGg9ZlswXSxkPWZbMV0sbT0iIjtoWzBdIT09byYmZFswXSE9PW8mJmhbMV0hPT1vJiZkWzFdIT09byYmaFsyXSE9PW8mJmRbMl0hPT1vJiZoWzNdIT09byYmZFszXSE9PW8mJihtKz1wPyJNIitoWzBdKyIsIitkWzFdKyJMIitoWzJdKyIsIitkWzJdKyJIIitoWzNdKyJMIitoWzFdKyIsIitkWzFdKyJaIjoiTSIraFsxXSsiLCIrZFsxXSsiTCIraFsyXSsiLCIrZFszXSsiViIrZFsyXSsiTCIraFsxXSsiLCIrZFswXSsiWiIpLCIiPT09bSYmKG09Ik0wLDBaIiksaS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInBhdGgiKS5hdHRyKCJkIixtKS5jYWxsKGEuc2V0Q2xpcFVybCxlLmxheWVyQ2xpcElkLHQpfX0pKX1lbHNlIGgucmVtb3ZlKCl9KSl9KHQsZSxyLHUpLGZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPWUueGF4aXMsbD1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKG8sciwidHJhY2UgYmFycyIpLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBvPW4uc2VsZWN0KHRoaXMpLHU9clswXS50cmFjZSxmPWkuZW5zdXJlU2luZ2xlKG8sImciLCJsaW5lcyIpO2lmKHUuY29ubmVjdG9yJiZ1LmNvbm5lY3Rvci52aXNpYmxlJiZ1LmNvbm5lY3Rvci5saW5lLndpZHRoKXt2YXIgaD0iaCI9PT11Lm9yaWVudGF0aW9uLHA9Zi5zZWxlY3RBbGwoImcubGluZSIpLmRhdGEoaS5pZGVudGl0eSk7cC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxpbmUiLCEwKSxwLmV4aXQoKS5yZW1vdmUoKTt2YXIgZD1wLnNpemUoKTtwLmVhY2goKGZ1bmN0aW9uKHIsbyl7aWYobz09PWQtMXx8ci5jTmV4dCl7dmFyIHU9YyhyLHMsbCxoKSxmPXVbMF0scD11WzFdLGc9IiI7dm9pZCAwIT09ZlszXSYmdm9pZCAwIT09cFszXSYmKGg/KGcrPSJNIitmWzBdKyIsIitwWzFdKyJMIitmWzJdKyIsIitwWzJdLGcrPSJNIitmWzFdKyIsIitwWzFdKyJMIitmWzNdKyIsIitwWzJdKTooZys9Ik0iK2ZbMV0rIiwiK3BbMV0rIkwiK2ZbMl0rIiwiK3BbM10sZys9Ik0iK2ZbMV0rIiwiK3BbMF0rIkwiK2ZbMl0rIiwiK3BbMl0pKSwiIj09PWcmJihnPSJNMCwwWiIpLGkuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJwYXRoIikuYXR0cigiZCIsZykuY2FsbChhLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KX19KSl9ZWxzZSBmLnJlbW92ZSgpfSkpfSh0LGUscix1KSxzLnBsb3QodCxlLHIsdSx7bW9kZTpmLmZ1bm5lbG1vZGUsbm9ybTpmLmZ1bm5lbG1vZGUsZ2FwOmYuZnVubmVsZ2FwLGdyb3VwZ2FwOmYuZnVubmVsZ3JvdXBnYXB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vbGliIjo3NzgsIi4uL2Jhci9wbG90Ijo5MzIsIi4uL2Jhci91bmlmb3JtX3RleHQiOjkzNyxkMzoxNjl9XSwxMDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxzPXQoIi4uL2Jhci9zdHlsZSIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQsYz1zLnN0eWxlVGV4dFBvaW50cztlLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgcz1yfHxuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcuZnVubmVsbGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UiKTtsKHQscywiZnVubmVsIikscy5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSkscy5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxzPWVbMF0udHJhY2U7ci5zZWxlY3RBbGwoIi5wb2ludCA+IHBhdGgiKS5lYWNoKChmdW5jdGlvbih0KXtpZighdC5pc0JsYW5rKXt2YXIgZT1zLm1hcmtlcjtuLnNlbGVjdCh0aGlzKS5jYWxsKGEuZmlsbCx0Lm1jfHxlLmNvbG9yKS5jYWxsKGEuc3Ryb2tlLHQubWxjfHxlLmxpbmUuY29sb3IpLmNhbGwoaS5kYXNoTGluZSxlLmxpbmUuZGFzaCx0Lm1sd3x8ZS5saW5lLndpZHRoKS5zdHlsZSgib3BhY2l0eSIscy5zZWxlY3RlZHBvaW50cyYmIXQuc2VsZWN0ZWQ/bzoxKX19KSksYyhyLHMsdCksci5zZWxlY3RBbGwoIi5yZWdpb25zIikuZWFjaCgoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKS5jYWxsKGEuZmlsbCxzLmNvbm5lY3Rvci5maWxsY29sb3IpfSkpLHIuc2VsZWN0QWxsKCIubGluZXMiKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PXMuY29ubmVjdG9yLmxpbmU7aS5saW5lR3JvdXBTdHlsZShuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKSx0LndpZHRoLHQuY29sb3IsdC5kYXNoKX0pKX0pKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjc1MiwiLi4vYmFyL3N0eWxlIjo5MzUsIi4uL2Jhci91bmlmb3JtX3RleHQiOjkzNyxkMzoxNjl9XSwxMDU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3BpZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bGFiZWxzOm4ubGFiZWxzLGxhYmVsMDpuLmxhYmVsMCxkbGFiZWw6bi5kbGFiZWwsdmFsdWVzOm4udmFsdWVzLG1hcmtlcjp7Y29sb3JzOm4ubWFya2VyLmNvbG9ycyxsaW5lOntjb2xvcjpsKHt9LG4ubWFya2VyLmxpbmUuY29sb3Ise2RmbHQ6bnVsbH0pLHdpZHRoOmwoe30sbi5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxzY2FsZWdyb3VwOmwoe30sbi5zY2FsZWdyb3VwLHt9KSx0ZXh0aW5mbzpsKHt9LG4udGV4dGluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50Il19KSx0ZXh0dGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImxhYmVsIiwiY29sb3IiLCJ2YWx1ZSIsInRleHQiLCJwZXJjZW50Il19KSxob3ZlcmluZm86bCh7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsInBlcmNlbnQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOm8oe30se2tleXM6WyJsYWJlbCIsImNvbG9yIiwidmFsdWUiLCJ0ZXh0IiwicGVyY2VudCJdfSksdGV4dHBvc2l0aW9uOmwoe30sbi50ZXh0cG9zaXRpb24se3ZhbHVlczpbImluc2lkZSIsIm5vbmUiXSxkZmx0OiJpbnNpZGUifSksdGV4dGZvbnQ6bi50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpuLmluc2lkZXRleHRmb250LHRpdGxlOnt0ZXh0Om4udGl0bGUudGV4dCxmb250Om4udGl0bGUuZm9udCxwb3NpdGlvbjpsKHt9LG4udGl0bGUucG9zaXRpb24se3ZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCJdLGRmbHQ6InRvcCBjZW50ZXIifSksZWRpdFR5cGU6InBsb3QifSxkb21haW46YSh7bmFtZToiZnVubmVsYXJlYSIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksYXNwZWN0cmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sYmFzZXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjMzMyxlZGl0VHlwZToicGxvdCJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyNCwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjkwNiwiLi4vcGllL2F0dHJpYnV0ZXMiOjExNjF9XSwxMDU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIik7ci5uYW1lPSJmdW5uZWxhcmVhIixyLnBsb3Q9ZnVuY3Rpb24odCxlLGksYSl7bi5wbG90QmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxpLGEpe24uY2xlYW5CYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9fSx7Ii4uLy4uL3Bsb3RzL3Bsb3RzIjo4OTF9XSwxMDU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3BpZS9jYWxjIik7ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uY2FsYyh0LGUpfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0KXtuLmNyb3NzVHJhY2VDYWxjKHQse3R5cGU6ImZ1bm5lbGFyZWEifSl9fX0seyIuLi9waWUvY2FsYyI6MTE2M31dLDEwNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLG89dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxzPXQoIi4uL3BpZS9kZWZhdWx0cyIpLmhhbmRsZUxhYmVsc0FuZFZhbHVlcztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciB1PWMoImxhYmVscyIpLGY9YygidmFsdWVzIiksaD1zKHUsZikscD1oLmxlbjtpZihlLl9oYXNMYWJlbHM9aC5oYXNMYWJlbHMsZS5faGFzVmFsdWVzPWguaGFzVmFsdWVzLCFlLl9oYXNMYWJlbHMmJmUuX2hhc1ZhbHVlcyYmKGMoImxhYmVsMCIpLGMoImRsYWJlbCIpKSxwKXtlLl9sZW5ndGg9cCxjKCJtYXJrZXIubGluZS53aWR0aCIpJiZjKCJtYXJrZXIubGluZS5jb2xvciIsbC5wYXBlcl9iZ2NvbG9yKSxjKCJtYXJrZXIuY29sb3JzIiksYygic2NhbGVncm91cCIpO3ZhciBkLGc9YygidGV4dCIpLG09YygidGV4dHRlbXBsYXRlIik7aWYobXx8KGQ9YygidGV4dGluZm8iLEFycmF5LmlzQXJyYXkoZyk/InRleHQrcGVyY2VudCI6InBlcmNlbnQiKSksYygiaG92ZXJ0ZXh0IiksYygiaG92ZXJ0ZW1wbGF0ZSIpLG18fGQmJiJub25lIiE9PWQpe3ZhciB2PWMoInRleHRwb3NpdGlvbiIpO28odCxlLGwsYyx2LHttb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMSxtb2R1bGVIYXNDbGlwb25heGlzOiExLG1vZHVsZUhhc1RleHRhbmdsZTohMSxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITF9KX1hKGUsbCxjKSxjKCJ0aXRsZS50ZXh0IikmJihjKCJ0aXRsZS5wb3NpdGlvbiIpLG4uY29lcmNlRm9udChjLCJ0aXRsZS5mb250IixsLmZvbnQpKSxjKCJhc3BlY3RyYXRpbyIpLGMoImJhc2VyYXRpbyIpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uL2Jhci9kZWZhdWx0cyI6OTI1LCIuLi9waWUvZGVmYXVsdHMiOjExNjQsIi4vYXR0cmlidXRlcyI6MTA1Nn1dLDEwNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiZnVubmVsYXJlYSIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsicGllLWxpa2UiLCJmdW5uZWxhcmVhIiwic2hvd0xlZ2VuZCJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLGNyb3NzVHJhY2VDYWxjOnQoIi4vY2FsYyIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLHN0eWxlT25lOnQoIi4uL3BpZS9zdHlsZV9vbmUiKSxtZXRhOnt9fX0seyIuLi9waWUvc3R5bGVfb25lIjoxMTcyLCIuL2F0dHJpYnV0ZXMiOjEwNTYsIi4vYmFzZV9wbG90IjoxMDU3LCIuL2NhbGMiOjEwNTgsIi4vZGVmYXVsdHMiOjEwNTksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEwNjEsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMDYyLCIuL3Bsb3QiOjEwNjMsIi4vc3R5bGUiOjEwNjR9XSwxMDYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3BpZS9sYXlvdXRfYXR0cmlidXRlcyIpLmhpZGRlbmxhYmVscztlLmV4cG9ydHM9e2hpZGRlbmxhYmVsczpuLGZ1bm5lbGFyZWFjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZGZ1bm5lbGFyZWFjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vcGllL2xheW91dF9hdHRyaWJ1dGVzIjoxMTY4fV0sMTA2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigiaGlkZGVubGFiZWxzIikscigiZnVubmVsYXJlYWNvbG9yd2F5IixlLmNvbG9yd2F5KSxyKCJleHRlbmRmdW5uZWxhcmVhY29sb3JzIil9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDYxfV0sMTA2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9saWIiKSxvPWEuc3RyU2NhbGUscz1hLnN0clRyYW5zbGF0ZSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vYmFyL3Bsb3QiKS50b01vdmVJbnNpZGVCYXIsdT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IiksZj11LnJlY29yZE1pblRleHRTaXplLGg9dS5jbGVhck1pblRleHRTaXplLHA9dCgiLi4vcGllL2hlbHBlcnMiKSxkPXQoIi4uL3BpZS9wbG90IiksZz1kLmF0dGFjaEZ4SGFuZGxlcnMsbT1kLmRldGVybWluZUluc2lkZVRleHRGb250LHY9ZC5sYXlvdXRBcmVhcyx5PWQucHJlcmVuZGVyVGl0bGVzLHg9ZC5wb3NpdGlvblRpdGxlT3V0c2lkZSxiPWQuZm9ybWF0U2xpY2VMYWJlbDtmdW5jdGlvbiBfKHQsZSl7cmV0dXJuImwiKyhlWzBdLXRbMF0pKyIsIisoZVsxXS10WzFdKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2goImZ1bm5lbGFyZWEiLHIpLHkoZSx0KSx2KGUsci5fc2l6ZSksYS5tYWtlVHJhY2VHcm91cHMoci5fZnVubmVsYXJlYWxheWVyLGUsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHU9bi5zZWxlY3QodGhpcyksaD1lWzBdLGQ9aC50cmFjZTshZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKXJldHVybjt2YXIgZT10WzBdLHI9ZS50cmFjZSxuPXIuYXNwZWN0cmF0aW8saT1yLmJhc2VyYXRpbztpPi45OTkmJihpPS45OTkpO3ZhciBhLG89TWF0aC5wb3coaSwyKSxzPWUudlRvdGFsLGw9cyxjPXMqby8oMS1vKS9zO2Z1bmN0aW9uIHUoKXt2YXIgdCxlPXt4OnQ9TWF0aC5zcXJ0KGMpLHk6LXR9O3JldHVybltlLngsZS55XX12YXIgZixoLHA9W107Zm9yKHAucHVzaCh1KCkpLGY9dC5sZW5ndGgtMTtmPi0xO2YtLSlpZighKGg9dFtmXSkuaGlkZGVuKXt2YXIgZD1oLnYvbDtjKz1kLHAucHVzaCh1KCkpfXZhciBnPTEvMCxtPS0xLzA7Zm9yKGY9MDtmPHAubGVuZ3RoO2YrKylhPXBbZl0sZz1NYXRoLm1pbihnLGFbMV0pLG09TWF0aC5tYXgobSxhWzFdKTtmb3IoZj0wO2Y8cC5sZW5ndGg7ZisrKXBbZl1bMV0tPShtK2cpLzI7dmFyIHY9cFtwLmxlbmd0aC0xXVswXSx5PWUucix4PShtLWcpLzIsYj15L3YsXz15L3gqbjtmb3IoZS5yPV8qeCxmPTA7ZjxwLmxlbmd0aDtmKyspcFtmXVswXSo9YixwW2ZdWzFdKj1fO3ZhciB3PVstKGE9cFswXSlbMF0sYVsxXV0sVD1bYVswXSxhWzFdXSxrPTA7Zm9yKGY9dC5sZW5ndGgtMTtmPi0xO2YtLSlpZighKGg9dFtmXSkuaGlkZGVuKXt2YXIgTT1wW2srPTFdWzBdLEE9cFtrXVsxXTtoLlRMPVstTSxBXSxoLlRSPVtNLEFdLGguQkw9dyxoLkJSPVQsaC5weG1pZD0oUz1oLlRSLEU9aC5CUixbLjUqKFNbMF0rRVswXSksLjUqKFNbMV0rRVsxXSldKSx3PWguVEwsVD1oLlRSfXZhciBTLEV9KGUpLHUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdT1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuc2xpY2UiKS5kYXRhKGUpO3UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaCgoZnVuY3Rpb24obyxzKXtpZihvLmhpZGRlbiluLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgsZyIpLnJlbW92ZSgpO2Vsc2V7by5wb2ludE51bWJlcj1vLmksby5jdXJ2ZU51bWJlcj1kLmluZGV4O3ZhciB1PWguY3gsdj1oLmN5LHk9bi5zZWxlY3QodGhpcykseD15LnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZGF0YShbb10pO3guZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJzdXJmYWNlIiwhMCkuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSx5LmNhbGwoZyx0LGUpO3ZhciB3PSJNIisodStvLlRSWzBdKSsiLCIrKHYrby5UUlsxXSkrXyhvLlRSLG8uQlIpK18oby5CUixvLkJMKStfKG8uQkwsby5UTCkrIloiO3guYXR0cigiZCIsdyksYih0LG8saCk7dmFyIFQ9cC5jYXN0T3B0aW9uKGQudGV4dHBvc2l0aW9uLG8ucHRzKSxrPXkuc2VsZWN0QWxsKCJnLnNsaWNldGV4dCIpLmRhdGEoby50ZXh0JiYibm9uZSIhPT1UP1swXTpbXSk7ay5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLGsuZXhpdCgpLnJlbW92ZSgpLGsuZWFjaCgoZnVuY3Rpb24oKXt2YXIgaD1hLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSkscD1hLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LG0oZCxvLHIuZm9udCkpO2gudGV4dChvLnRleHQpLmF0dHIoe2NsYXNzOiJzbGljZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChpLmZvbnQscCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgZyx5LHgsYj1pLmJCb3goaC5ub2RlKCkpLF89TWF0aC5taW4oby5CTFsxXSxvLkJSWzFdKSt2LHc9TWF0aC5tYXgoby5UTFsxXSxvLlRSWzFdKSt2O3k9TWF0aC5tYXgoby5UTFswXSxvLkJMWzBdKSt1LHg9TWF0aC5taW4oby5UUlswXSxvLkJSWzBdKSt1LChnPWMoeSx4LF8sdyxiLHtpc0hvcml6b250YWw6ITAsY29uc3RyYWluZWQ6ITAsYW5nbGU6MCxhbmNob3I6Im1pZGRsZSJ9KSkuZm9udFNpemU9cC5zaXplLGYoZC50eXBlLGcsciksZVtzXS50cmFuc2Zvcm09ZyxoLmF0dHIoInRyYW5zZm9ybSIsYS5nZXRUZXh0VHJhbnNmb3JtKGcpKX0pKX19KSk7dmFyIHY9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRpdGxldGV4dCIpLmRhdGEoZC50aXRsZS50ZXh0P1swXTpbXSk7di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRpdGxldGV4dCIsITApLHYuZXhpdCgpLnJlbW92ZSgpLHYuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1hLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksYz1kLnRpdGxlLnRleHQ7ZC5fbWV0YSYmKGM9YS50ZW1wbGF0ZVN0cmluZyhjLGQuX21ldGEpKSxlLnRleHQoYykuYXR0cih7Y2xhc3M6InRpdGxldGV4dCIsdHJhbnNmb3JtOiIiLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9KS5jYWxsKGkuZm9udCxkLnRpdGxlLmZvbnQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHU9eChoLHIuX3NpemUpO2UuYXR0cigidHJhbnNmb3JtIixzKHUueCx1LnkpK28oTWF0aC5taW4oMSx1LnNjYWxlKSkrcyh1LnR4LHUudHkpKX0pKX0pKX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMywiLi4vYmFyL3Bsb3QiOjkzMiwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTM3LCIuLi9waWUvaGVscGVycyI6MTE2NiwiLi4vcGllL3Bsb3QiOjExNzAsZDM6MTY5fV0sMTA2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vcGllL3N0eWxlX29uZSIpLGE9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2Z1bm5lbGFyZWFsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpO2EodCxlLCJmdW5uZWxhcmVhIiksZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcyk7ci5zdHlsZSh7b3BhY2l0eTplLm9wYWNpdHl9KSxyLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChpLHQsZSl9KSl9KSl9fSx7Ii4uL2Jhci91bmlmb3JtX3RleHQiOjkzNywiLi4vcGllL3N0eWxlX29uZSI6MTE3MixkMzoxNjl9XSwxMDY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIikscz0odCgiLi4vLi4vY29uc3RhbnRzL2RvY3MiKS5GT1JNQVRfTElOSyx0KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCk7ZS5leHBvcnRzPXMoe3o6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seDpzKHt9LG4ueCx7aW1wbGllZEVkaXRzOnt4dHlwZToiYXJyYXkifX0pLHgwOnMoe30sbi54MCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSxkeDpzKHt9LG4uZHgse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSkseTpzKHt9LG4ueSx7aW1wbGllZEVkaXRzOnt5dHlwZToiYXJyYXkifX0pLHkwOnMoe30sbi55MCx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSxkeTpzKHt9LG4uZHkse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSkseHBlcmlvZDpzKHt9LG4ueHBlcmlvZCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSx5cGVyaW9kOnMoe30sbi55cGVyaW9kLHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLHhwZXJpb2QwOnMoe30sbi54cGVyaW9kMCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSx5cGVyaW9kMDpzKHt9LG4ueXBlcmlvZDAse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSkseHBlcmlvZGFsaWdubWVudDpzKHt9LG4ueHBlcmlvZGFsaWdubWVudCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSx5cGVyaW9kYWxpZ25tZW50OnMoe30sbi55cGVyaW9kYWxpZ25tZW50LHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRyYW5zcG9zZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHh0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhcnJheSIsInNjYWxlZCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFycmF5Iiwic2NhbGVkIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6c21vb3RoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmYXN0IiwiYmVzdCIsITFdLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxob3Zlcm9uZ2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToibm9uZSJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LHhnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJwbG90In0seWdhcDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSx6aG92ZXJmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToibm9uZSJ9LGhvdmVydGVtcGxhdGU6YSgpLHNob3dsZWdlbmQ6cyh7fSxpLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0se3RyYW5zZm9ybXM6dm9pZCAwfSxvKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2NvbnN0YW50cy9kb2NzIjo3NDgsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODI0LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDYsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE4N31dLDEwNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxzPXQoIi4uL2hpc3RvZ3JhbTJkL2NhbGMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYz10KCIuL2NvbnZlcnRfY29sdW1uX3h5eiIpLHU9dCgiLi9jbGVhbl8yZF9hcnJheSIpLGY9dCgiLi9pbnRlcnAyZCIpLGg9dCgiLi9maW5kX2VtcHRpZXMiKSxwPXQoIi4vbWFrZV9ib3VuZF9hcnJheSIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKXt2YXIgaT10W25dO2khPT1kJiZlLnB1c2goaSl9cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbSx2LHkseCxiLF8sdyxULGssTSxBPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxTPWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxFPW4udHJhY2VJcyhlLCJjb250b3VyIiksQz1uLnRyYWNlSXMoZSwiaGlzdG9ncmFtIiksTD1uLnRyYWNlSXMoZSwiZ2wyZCIpLEk9RT8iYmVzdCI6ZS56c21vb3RoO2lmKEEuX21pbkR0aWNrPTAsUy5fbWluRHRpY2s9MCxDKXk9KE09cyh0LGUpKS5vcmlnX3gscj1NLngsbT1NLngwLHY9TS5keCx3PU0ub3JpZ195LHg9TS55LGI9TS55MCxfPU0uZHksVD1NLno7ZWxzZXt2YXIgUD1lLno7aS5pc0FycmF5MUQoUCk/KGMoZSxBLFMsIngiLCJ5IixbInoiXSkscj1lLl94LHg9ZS5feSxQPWUuX3opOih5PWUueD9BLm1ha2VDYWxjZGF0YShlLCJ4Iik6W10sdz1lLnk/Uy5tYWtlQ2FsY2RhdGEoZSwieSIpOltdLHI9byhlLEEsIngiLHkpLHg9byhlLFMsInkiLHcpLGUuX3g9cixlLl95PXgpLG09ZS54MCx2PWUuZHgsYj1lLnkwLF89ZS5keSxUPXUoUCxlLEEsUyl9ZnVuY3Rpb24geih0KXtJPWUuX2lucHV0LnpzbW9vdGg9ZS56c21vb3RoPSExLGkud2FybignY2Fubm90IHVzZSB6c21vb3RoOiAiZmFzdCI6ICcrdCl9aWYoKEEucmFuZ2VicmVha3N8fFMucmFuZ2VicmVha3MpJiYoVD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPVtdLGk9LTEsYT0wO2E8ci5sZW5ndGg7YSsrKWlmKGVbYV0hPT1kKXtpKyssbltpXT1bXTtmb3IodmFyIG89MDtvPHJbYV0ubGVuZ3RoO28rKyl0W29dIT09ZCYmbltpXS5wdXNoKHJbYV1bb10pfXJldHVybiBufShyLHgsVCksQ3x8KHI9ZyhyKSx4PWcoeCksZS5feD1yLGUuX3k9eCkpLEN8fCFFJiYhZS5jb25uZWN0Z2Fwc3x8KGUuX2VtcHR5cG9pbnRzPWgoVCksZihULGUuX2VtcHR5cG9pbnRzKSksImZhc3QiPT09SSlpZigibG9nIj09PUEudHlwZXx8ImxvZyI9PT1TLnR5cGUpeigibG9nIGF4aXMgZm91bmQiKTtlbHNlIGlmKCFDKXtpZihyLmxlbmd0aCl7dmFyIE89KHJbci5sZW5ndGgtMV0tclswXSkvKHIubGVuZ3RoLTEpLEQ9TWF0aC5hYnMoTy8xMDApO2ZvcihrPTA7azxyLmxlbmd0aC0xO2srKylpZihNYXRoLmFicyhyW2srMV0tcltrXS1PKT5EKXt6KCJ4IHNjYWxlIGlzIG5vdCBsaW5lYXIiKTticmVha319aWYoeC5sZW5ndGgmJiJmYXN0Ij09PUkpe3ZhciBSPSh4W3gubGVuZ3RoLTFdLXhbMF0pLyh4Lmxlbmd0aC0xKSxGPU1hdGguYWJzKFIvMTAwKTtmb3Ioaz0wO2s8eC5sZW5ndGgtMTtrKyspaWYoTWF0aC5hYnMoeFtrKzFdLXhba10tUik+Ril7eigieSBzY2FsZSBpcyBub3QgbGluZWFyIik7YnJlYWt9fX12YXIgQj1pLm1heFJvd0xlbmd0aChUKSxOPSJzY2FsZWQiPT09ZS54dHlwZT8iIjpyLGo9cChlLE4sbSx2LEIsQSksVT0ic2NhbGVkIj09PWUueXR5cGU/IiI6eCxWPXAoZSxVLGIsXyxULmxlbmd0aCxTKTtMfHwoZS5fZXh0cmVtZXNbQS5faWRdPWEuZmluZEV4dHJlbWVzKEEsaiksZS5fZXh0cmVtZXNbUy5faWRdPWEuZmluZEV4dHJlbWVzKFMsVikpO3ZhciBxPXt4OmoseTpWLHo6VCx0ZXh0OmUuX3RleHR8fGUudGV4dCxob3ZlcnRleHQ6ZS5faG92ZXJ0ZXh0fHxlLmhvdmVydGV4dH07aWYoZS54cGVyaW9kYWxpZ25tZW50JiZ5JiYocS5vcmlnX3g9eSksZS55cGVyaW9kYWxpZ25tZW50JiZ3JiYocS5vcmlnX3k9dyksTiYmTi5sZW5ndGg9PT1qLmxlbmd0aC0xJiYocS54Q2VudGVyPU4pLFUmJlUubGVuZ3RoPT09Vi5sZW5ndGgtMSYmKHEueUNlbnRlcj1VKSxDJiYocS54UmFuZ2VzPU0ueFJhbmdlcyxxLnlSYW5nZXM9TS55UmFuZ2VzLHEucHRzPU0ucHRzKSxFfHxsKHQsZSx7dmFsczpULGNMZXR0ZXI6InoifSksRSYmZS5jb250b3VycyYmImhlYXRtYXAiPT09ZS5jb250b3Vycy5jb2xvcmluZyl7dmFyIEg9e3R5cGU6ImNvbnRvdXIiPT09ZS50eXBlPyJoZWF0bWFwIjoiaGlzdG9ncmFtMmQiLHhjYWxlbmRhcjplLnhjYWxlbmRhcix5Y2FsZW5kYXI6ZS55Y2FsZW5kYXJ9O3EueGZpbGw9cChILE4sbSx2LEIsQSkscS55ZmlsbD1wKEgsVSxiLF8sVC5sZW5ndGgsUyl9cmV0dXJuW3FdfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjUxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo4MjUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL2hpc3RvZ3JhbTJkL2NhbGMiOjEwOTgsIi4vY2xlYW5fMmRfYXJyYXkiOjEwNjcsIi4vY29udmVydF9jb2x1bW5feHl6IjoxMDY5LCIuL2ZpbmRfZW1wdGllcyI6MTA3MSwiLi9pbnRlcnAyZCI6MTA3NCwiLi9tYWtlX2JvdW5kX2FycmF5IjoxMDc1fV0sMTA2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLGMsdSxmLGg7ZnVuY3Rpb24gcCh0KXtpZihuKHQpKXJldHVybit0fWlmKGUmJmUudHJhbnNwb3NlKXtmb3Iocz0wLGY9MDtmPHQubGVuZ3RoO2YrKylzPU1hdGgubWF4KHMsdFtmXS5sZW5ndGgpO2lmKDA9PT1zKXJldHVybiExO2M9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSx1PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odFtyXXx8W10pW2VdfX1lbHNlIHM9dC5sZW5ndGgsYz1mdW5jdGlvbih0LGUpe3JldHVybiB0W2VdLmxlbmd0aH0sdT1mdW5jdGlvbih0LGUscil7cmV0dXJuKHRbZV18fFtdKVtyXX07dmFyIGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPT09YXx8cj09PWE/YTp1KHQsZSxyKX07ZnVuY3Rpb24gZyh0KXtpZihlJiYiY2FycGV0IiE9PWUudHlwZSYmImNvbnRvdXJjYXJwZXQiIT09ZS50eXBlJiZ0JiYiY2F0ZWdvcnkiPT09dC50eXBlJiZlWyJfIit0Ll9pZC5jaGFyQXQoMCldLmxlbmd0aCl7dmFyIHI9dC5faWQuY2hhckF0KDApLG49e30sbz1lWyJfIityKyJDYXRlZ29yeU1hcCJdfHxlW3JdO2ZvcihmPTA7ZjxvLmxlbmd0aDtmKyspbltvW2ZdXT1mO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1uW3QuX2NhdGVnb3JpZXNbZV1dO3JldHVybiByKzE/cjphfX1yZXR1cm4gaS5pZGVudGl0eX12YXIgbT1nKHIpLHY9ZyhvKTtvJiYiY2F0ZWdvcnkiPT09by50eXBlJiYocz1vLl9jYXRlZ29yaWVzLmxlbmd0aCk7dmFyIHk9bmV3IEFycmF5KHMpO2ZvcihmPTA7ZjxzO2YrKylmb3IobD1yJiYiY2F0ZWdvcnkiPT09ci50eXBlP3IuX2NhdGVnb3JpZXMubGVuZ3RoOmModCxmKSx5W2ZdPW5ldyBBcnJheShsKSxoPTA7aDxsO2grKyl5W2ZdW2hdPXAoZCh0LHYoZiksbShoKSkpO3JldHVybiB5fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sMTA2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21pbjoiem1pbiIsbWF4OiJ6bWF4In19LHt9XSwxMDY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjPXQuX2xlbmd0aCx1PWUubWFrZUNhbGNkYXRhKHQsbyksZj1yLm1ha2VDYWxjZGF0YSh0LHMpO3U9YSh0LGUsbyx1KSxmPWEodCxyLHMsZik7dmFyIGgscCxkLGcsbT10LnRleHQsdj12b2lkIDAhPT1tJiZuLmlzQXJyYXkxRChtKSx5PXQuaG92ZXJ0ZXh0LHg9dm9pZCAwIT09eSYmbi5pc0FycmF5MUQoeSksYj1uLmRpc3RpbmN0VmFscyh1KSxfPWIudmFscyx3PW4uZGlzdGluY3RWYWxzKGYpLFQ9dy52YWxzLGs9W10sTT1ULmxlbmd0aCxBPV8ubGVuZ3RoO2ZvcihoPTA7aDxsLmxlbmd0aDtoKyspa1toXT1uLmluaXQyZEFycmF5KE0sQSk7diYmKGQ9bi5pbml0MmRBcnJheShNLEEpKSx4JiYoZz1uLmluaXQyZEFycmF5KE0sQSkpO3ZhciBTPW4uaW5pdDJkQXJyYXkoTSxBKTtmb3IoaD0wO2g8YztoKyspaWYodVtoXSE9PWkmJmZbaF0hPT1pKXt2YXIgRT1uLmZpbmRCaW4odVtoXStiLm1pbkRpZmYvMixfKSxDPW4uZmluZEJpbihmW2hdK3cubWluRGlmZi8yLFQpO2ZvcihwPTA7cDxsLmxlbmd0aDtwKyspe3ZhciBMPXRbbFtwXV07a1twXVtDXVtFXT1MW2hdLFNbQ11bRV09aH12JiYoZFtDXVtFXT1tW2hdKSx4JiYoZ1tDXVtFXT15W2hdKX1mb3IodFsiXyIrb109Xyx0WyJfIitzXT1ULHA9MDtwPGwubGVuZ3RoO3ArKyl0WyJfIitsW3BdXT1rW3BdO3YmJih0Ll90ZXh0PWQpLHgmJih0Ll9ob3ZlcnRleHQ9ZyksZSYmImNhdGVnb3J5Ij09PWUudHlwZSYmKHRbIl8iK28rIkNhdGVnb3J5TWFwIl09Xy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9jYXRlZ29yaWVzW3RdfSkpKSxyJiYiY2F0ZWdvcnkiPT09ci50eXBlJiYodFsiXyIrcysiQ2F0ZWdvcnlNYXAiXT1ULm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHIuX2NhdGVnb3JpZXNbdF19KSkpLHQuX2FmdGVyMmJlZm9yZT1TfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo4MjV9XSwxMDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi94eXpfZGVmYXVsdHMiKSxhPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksbz10KCIuL3N0eWxlX2RlZmF1bHRzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxsPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXtmdW5jdGlvbiB1KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9aSh0LGUsdSxjKT8oYSh0LGUsYyx1KSx1KCJ0ZXh0IiksdSgiaG92ZXJ0ZXh0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpLG8odCxlLHUsYyksdSgiaG92ZXJvbmdhcHMiKSx1KCJjb25uZWN0Z2FwcyIsbi5pc0FycmF5MUQoZS56KSYmITEhPT1lLnpzbW9vdGgpLHModCxlLGMsdSx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSkpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NTMsIi4uLy4uL2xpYiI6Nzc4LCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6MTIwNywiLi9hdHRyaWJ1dGVzIjoxMDY1LCIuL3N0eWxlX2RlZmF1bHRzIjoxMDc4LCIuL3h5el9kZWZhdWx0cyI6MTA3OX1dLDEwNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikubWF4Um93TGVuZ3RoO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGksYSxvLHMsbCxjLHU9W10sZj17fSxoPVtdLHA9dFswXSxkPVtdLGc9WzAsMCwwXSxtPW4odCk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylmb3IoZT1kLGQ9cCxwPXRbcisxXXx8W10saT0wO2k8bTtpKyspdm9pZCAwPT09ZFtpXSYmKChzPSh2b2lkIDAhPT1kW2ktMV0/MTowKSsodm9pZCAwIT09ZFtpKzFdPzE6MCkrKHZvaWQgMCE9PWVbaV0/MTowKSsodm9pZCAwIT09cFtpXT8xOjApKT8oMD09PXImJnMrKywwPT09aSYmcysrLHI9PT10Lmxlbmd0aC0xJiZzKyssaT09PWQubGVuZ3RoLTEmJnMrKyxzPDQmJihmW1tyLGldXT1bcixpLHNdKSx1LnB1c2goW3IsaSxzXSkpOmgucHVzaChbcixpXSkpO2Zvcig7aC5sZW5ndGg7KXtmb3IobD17fSxjPSExLG89aC5sZW5ndGgtMTtvPj0wO28tLSkocz0oKGZbWyhyPShhPWhbb10pWzBdKS0xLGk9YVsxXV1dfHxnKVsyXSsoZltbcisxLGldXXx8ZylbMl0rKGZbW3IsaS0xXV18fGcpWzJdKyhmW1tyLGkrMV1dfHxnKVsyXSkvMjApJiYobFthXT1bcixpLHNdLGguc3BsaWNlKG8sMSksYz0hMCk7aWYoIWMpdGhyb3ciZmluZEVtcHRpZXMgaXRlcmF0ZWQgd2l0aCBubyBuZXcgbmVpZ2hib3JzIjtmb3IoYSBpbiBsKWZbYV09bFthXSx1LnB1c2gobFthXSl9cmV0dXJuIHUuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZVsyXS10WzJdfSkpfX0seyIuLi8uLi9saWIiOjc3OH1dLDEwNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdSxmLGgscCxkPXQuY2RbMF0sZz1kLnRyYWNlLG09dC54YSx2PXQueWEseT1kLngseD1kLnksYj1kLnosXz1kLnhDZW50ZXIsdz1kLnlDZW50ZXIsVD1kLnptYXNrLGs9Zy56aG92ZXJmb3JtYXQsTT15LEE9eDtpZighMSE9PXQuaW5kZXgpe3RyeXtoPU1hdGgucm91bmQodC5pbmRleFsxXSkscD1NYXRoLnJvdW5kKHQuaW5kZXhbMF0pfWNhdGNoKGUpe3JldHVybiB2b2lkIGkuZXJyb3IoIkVycm9yIGhvdmVyaW5nIG9uIGhlYXRtYXAsIHBvaW50TnVtYmVyIG11c3QgYmUgW3Jvdyxjb2xdLCBmb3VuZDoiLHQuaW5kZXgpfWlmKGg8MHx8aD49YlswXS5sZW5ndGh8fHA8MHx8cD5iLmxlbmd0aClyZXR1cm59ZWxzZXtpZihuLmluYm94KGUteVswXSxlLXlbeS5sZW5ndGgtMV0sMCk+MHx8bi5pbmJveChyLXhbMF0sci14W3gubGVuZ3RoLTFdLDApPjApcmV0dXJuO2lmKGMpe3ZhciBTO2ZvcihNPVsyKnlbMF0teVsxXV0sUz0xO1M8eS5sZW5ndGg7UysrKU0ucHVzaCgoeVtTXSt5W1MtMV0pLzIpO2ZvcihNLnB1c2goWzIqeVt5Lmxlbmd0aC0xXS15W3kubGVuZ3RoLTJdXSksQT1bMip4WzBdLXhbMV1dLFM9MTtTPHgubGVuZ3RoO1MrKylBLnB1c2goKHhbU10reFtTLTFdKS8yKTtBLnB1c2goWzIqeFt4Lmxlbmd0aC0xXS14W3gubGVuZ3RoLTJdXSl9aD1NYXRoLm1heCgwLE1hdGgubWluKE0ubGVuZ3RoLTIsaS5maW5kQmluKGUsTSkpKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oQS5sZW5ndGgtMixpLmZpbmRCaW4ocixBKSkpfXZhciBFLEMsTD1tLmMycCh5W2hdKSxJPW0uYzJwKHlbaCsxXSksUD12LmMycCh4W3BdKSx6PXYuYzJwKHhbcCsxXSk7Yz8oRT1kLm9yaWdfeHx8eSxDPWQub3JpZ195fHx4LEk9TCx1PUVbaF0sej1QLGY9Q1twXSk6KEU9ZC5vcmlnX3h8fF98fHksQz1kLm9yaWdfeXx8d3x8eCx1PV8/RVtoXTooRVtoXStFW2grMV0pLzIsZj13P0NbcF06KENbcF0rQ1twKzFdKS8yLG0mJiJjYXRlZ29yeSI9PT1tLnR5cGUmJih1PXlbaF0pLHYmJiJjYXRlZ29yeSI9PT12LnR5cGUmJihmPXhbcF0pLGcuenNtb290aCYmKEw9ST1tLmMycCh1KSxQPXo9di5jMnAoZikpKTt2YXIgTz1iW3BdW2hdO2lmKFQmJiFUW3BdW2hdJiYoTz12b2lkIDApLHZvaWQgMCE9PU98fGcuaG92ZXJvbmdhcHMpe3ZhciBEO0FycmF5LmlzQXJyYXkoZC5ob3ZlcnRleHQpJiZBcnJheS5pc0FycmF5KGQuaG92ZXJ0ZXh0W3BdKT9EPWQuaG92ZXJ0ZXh0W3BdW2hdOkFycmF5LmlzQXJyYXkoZC50ZXh0KSYmQXJyYXkuaXNBcnJheShkLnRleHRbcF0pJiYoRD1kLnRleHRbcF1baF0pO3ZhciBSPW8oZyksRj17dHlwZToibGluZWFyIixyYW5nZTpbUi5taW4sUi5tYXhdLGhvdmVyZm9ybWF0OmssX3NlcGFyYXRvcnM6bS5fc2VwYXJhdG9ycyxfbnVtRm9ybWF0Om0uX251bUZvcm1hdH0sQj1hLnRpY2tUZXh0KEYsTywiaG92ZXIiKS50ZXh0O3JldHVybltpLmV4dGVuZEZsYXQodCx7aW5kZXg6Zy5fYWZ0ZXIyYmVmb3JlP2cuX2FmdGVyMmJlZm9yZVtwXVtoXTpbcCxoXSxkaXN0YW5jZTp0Lm1heEhvdmVyRGlzdGFuY2Usc3Bpa2VEaXN0YW5jZTp0Lm1heFNwaWtlRGlzdGFuY2UseDA6TCx4MTpJLHkwOlAseTE6eix4TGFiZWxWYWw6dSx5TGFiZWxWYWw6Zix6TGFiZWxWYWw6Tyx6TGFiZWw6Qix0ZXh0OkR9KV19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi4vLi4vY29tcG9uZW50cy9meCI6NjgzLCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOH1dLDEwNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6dCgiLi9jb2xvcmJhciIpLHN0eWxlOnQoIi4vc3R5bGUiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImhlYXRtYXAiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi9hdHRyaWJ1dGVzIjoxMDY1LCIuL2NhbGMiOjEwNjYsIi4vY29sb3JiYXIiOjEwNjgsIi4vZGVmYXVsdHMiOjEwNzAsIi4vaG92ZXIiOjEwNzIsIi4vcGxvdCI6MTA3NiwiLi9zdHlsZSI6MTA3N31dLDEwNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT1bWy0xLDBdLFsxLDBdLFswLC0xXSxbMCwxXV07ZnVuY3Rpb24gYSh0KXtyZXR1cm4uNS0uMjUqTWF0aC5taW4oMSwuNSp0KX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbixhLG8scyxsLGMsdSxmLGgscCxkLGcsbSx2PTA7Zm9yKHM9MDtzPGUubGVuZ3RoO3MrKyl7Zm9yKGE9KG49ZVtzXSlbMF0sbz1uWzFdLGQ9dFthXVtvXSxwPTAsaD0wLGw9MDtsPDQ7bCsrKSh1PXRbYSsoYz1pW2xdKVswXV0pJiZ2b2lkIDAhPT0oZj11W28rY1sxXV0pJiYoMD09PXA/Zz1tPWY6KGc9TWF0aC5taW4oZyxmKSxtPU1hdGgubWF4KG0sZikpLGgrKyxwKz1mKTtpZigwPT09aCl0aHJvdyJpdGVyYXRlSW50ZXJwMmQgb3JkZXIgaXMgd3Jvbmc6IG5vIGRlZmluZWQgbmVpZ2hib3JzIjt0W2FdW29dPXAvaCx2b2lkIDA9PT1kP2g8NCYmKHY9MSk6KHRbYV1bb109KDErcikqdFthXVtvXS1yKmQsbT5nJiYodj1NYXRoLm1heCh2LE1hdGguYWJzKHRbYV1bb10tZCkvKG0tZykpKSl9cmV0dXJuIHZ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT0xO2ZvcihvKHQsZSkscj0wO3I8ZS5sZW5ndGgmJiEoZVtyXVsyXTw0KTtyKyspO2ZvcihlPWUuc2xpY2Uocikscj0wO3I8MTAwJiZpPi4wMTtyKyspaT1vKHQsZSxhKGkpKTtyZXR1cm4gaT4uMDEmJm4ubG9nKCJpbnRlcnAyZCBkaWRuJ3QgY29udmVyZ2UgcXVpY2tseSIsaSksdH19LHsiLi4vLi4vbGliIjo3Nzh9XSwxMDc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGwsYyx1LGY9W10saD1uLnRyYWNlSXModCwiY29udG91ciIpLHA9bi50cmFjZUlzKHQsImhpc3RvZ3JhbSIpLGQ9bi50cmFjZUlzKHQsImdsMmQiKTtpZihpKGUpJiZlLmxlbmd0aD4xJiYhcCYmImNhdGVnb3J5IiE9PXMudHlwZSl7dmFyIGc9ZS5sZW5ndGg7aWYoIShnPD1vKSlyZXR1cm4gaD9lLnNsaWNlKDAsbyk6ZS5zbGljZSgwLG8rMSk7aWYoaHx8ZClmPWUuc2xpY2UoMCxvKTtlbHNlIGlmKDE9PT1vKWY9W2VbMF0tLjUsZVswXSsuNV07ZWxzZXtmb3IoZj1bMS41KmVbMF0tLjUqZVsxXV0sdT0xO3U8Zzt1KyspZi5wdXNoKC41KihlW3UtMV0rZVt1XSkpO2YucHVzaCgxLjUqZVtnLTFdLS41KmVbZy0yXSl9aWYoZzxvKXt2YXIgbT1mW2YubGVuZ3RoLTFdLHY9bS1mW2YubGVuZ3RoLTJdO2Zvcih1PWc7dTxvO3UrKyltKz12LGYucHVzaChtKX19ZWxzZXt2YXIgeT10W3MuX2lkLmNoYXJBdCgwKSsiY2FsZW5kYXIiXTtpZihwKWw9cy5yMmMociwwLHkpO2Vsc2UgaWYoaShlKSYmMT09PWUubGVuZ3RoKWw9ZVswXTtlbHNlIGlmKHZvaWQgMD09PXIpbD0wO2Vsc2V7bD0oImxvZyI9PT1zLnR5cGU/cy5kMmM6cy5yMmMpKHIsMCx5KX1mb3IoYz1hfHwxLHU9aHx8ZD8wOi0uNTt1PG87dSsrKWYucHVzaChsK2MqdSl9cmV0dXJuIGZ9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9yZWdpc3RyeSI6OTExfV0sMTA3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlLGw9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9ZS5sZW5ndGgtMixuPW8uY29uc3RyYWluKG8uZmluZEJpbih0LGUpLDAsciksaT1lW25dLGE9ZVtuKzFdLHM9by5jb25zdHJhaW4obisodC1pKS8oYS1pKS0uNSwwLHIpLGw9TWF0aC5yb3VuZChzKSxjPU1hdGguYWJzKHMtbCk7cmV0dXJuIHMmJnMhPT1yJiZjP3tiaW4wOmwsZnJhYzpjLGJpbjE6TWF0aC5yb3VuZChsK2MvKHMtbCkpfTp7YmluMDpsLGJpbjE6bCxmcmFjOjB9fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1lLmxlbmd0aC0xLG49by5jb25zdHJhaW4oby5maW5kQmluKHQsZSksMCxyKSxpPWVbbl0sYT0odC1pKS8oZVtuKzFdLWkpfHwwO3JldHVybiBhPD0wP3tiaW4wOm4sYmluMTpuLGZyYWM6MH06YTwuNT97YmluMDpuLGJpbjE6bisxLGZyYWM6YX06e2JpbjA6bisxLGJpbjE6bixmcmFjOjEtYX19ZnVuY3Rpb24gZih0LGUscil7dFtlXT1yWzBdLHRbZSsxXT1yWzFdLHRbZSsyXT1yWzJdLHRbZSszXT1NYXRoLnJvdW5kKDI1NSpyWzNdKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7dmFyIHA9ZS54YXhpcyxkPWUueWF4aXM7by5tYWtlVHJhY2VHcm91cHMoaCxyLCJobSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByLGgsZyxtLHYseSx4PW4uc2VsZWN0KHRoaXMpLGI9ZVswXSxfPWIudHJhY2Usdz1iLnosVD1iLngsaz1iLnksTT1iLnhDZW50ZXIsQT1iLnlDZW50ZXIsUz1hLnRyYWNlSXMoXywiY29udG91ciIpLEU9Uz8iYmVzdCI6Xy56c21vb3RoLEM9dy5sZW5ndGgsTD1vLm1heFJvd0xlbmd0aCh3KSxJPSExLFA9ITE7Zm9yKHk9MDt2b2lkIDA9PT1yJiZ5PFQubGVuZ3RoLTE7KXI9cC5jMnAoVFt5XSkseSsrO2Zvcih5PVQubGVuZ3RoLTE7dm9pZCAwPT09aCYmeT4wOyloPXAuYzJwKFRbeV0pLHktLTtmb3IoaDxyJiYoZz1oLGg9cixyPWcsST0hMCkseT0wO3ZvaWQgMD09PW0mJnk8ay5sZW5ndGgtMTspbT1kLmMycChrW3ldKSx5Kys7Zm9yKHk9ay5sZW5ndGgtMTt2b2lkIDA9PT12JiZ5PjA7KXY9ZC5jMnAoa1t5XSkseS0tO2lmKHY8bSYmKGc9bSxtPXYsdj1nLFA9ITApLFMmJihNPVQsQT1rLFQ9Yi54ZmlsbCxrPWIueWZpbGwpLCJmYXN0IiE9PUUpe3ZhciB6PSJiZXN0Ij09PUU/MDouNTtyPU1hdGgubWF4KC16KnAuX2xlbmd0aCxyKSxoPU1hdGgubWluKCgxK3opKnAuX2xlbmd0aCxoKSxtPU1hdGgubWF4KC16KmQuX2xlbmd0aCxtKSx2PU1hdGgubWluKCgxK3opKmQuX2xlbmd0aCx2KX12YXIgTz1NYXRoLnJvdW5kKGgtciksRD1NYXRoLnJvdW5kKHYtbSk7aWYoTzw9MHx8RDw9MCl7eC5zZWxlY3RBbGwoImltYWdlIikuZGF0YShbXSkuZXhpdCgpLnJlbW92ZSgpfWVsc2V7dmFyIFIsRjsiZmFzdCI9PT1FPyhSPUwsRj1DKTooUj1PLEY9RCk7dmFyIEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Qi53aWR0aD1SLEIuaGVpZ2h0PUY7dmFyIE4saixVPUIuZ2V0Q29udGV4dCgiMmQiKSxWPXMoXyx7bm9OdW1lcmljQ2hlY2s6ITAscmV0dXJuQXJyYXk6ITB9KTsiZmFzdCI9PT1FPyhOPUk/ZnVuY3Rpb24odCl7cmV0dXJuIEwtMS10fTpvLmlkZW50aXR5LGo9UD9mdW5jdGlvbih0KXtyZXR1cm4gQy0xLXR9Om8uaWRlbnRpdHkpOihOPWZ1bmN0aW9uKHQpe3JldHVybiBvLmNvbnN0cmFpbihNYXRoLnJvdW5kKHAuYzJwKFRbdF0pLXIpLDAsTyl9LGo9ZnVuY3Rpb24odCl7cmV0dXJuIG8uY29uc3RyYWluKE1hdGgucm91bmQoZC5jMnAoa1t0XSktbSksMCxEKX0pO3ZhciBxLEgsRyxZLFcsWD1qKDApLFo9W1gsWF0sSj1JPzA6MSxLPVA/MDoxLFE9MCwkPTAsdHQ9MCxldD0wO2lmKEUpe3ZhciBydCxudD0wO3RyeXtydD1uZXcgVWludDhBcnJheShPKkQqNCl9Y2F0Y2godCl7cnQ9bmV3IEFycmF5KE8qRCo0KX1pZigiYmVzdCI9PT1FKXt2YXIgaXQsYXQsb3Qsc3Q9TXx8VCxsdD1BfHxrLGN0PW5ldyBBcnJheShzdC5sZW5ndGgpLHV0PW5ldyBBcnJheShsdC5sZW5ndGgpLGZ0PW5ldyBBcnJheShPKSxodD1NP3U6YyxwdD1BP3U6Yztmb3IoeT0wO3k8c3QubGVuZ3RoO3krKyljdFt5XT1NYXRoLnJvdW5kKHAuYzJwKHN0W3ldKS1yKTtmb3IoeT0wO3k8bHQubGVuZ3RoO3krKyl1dFt5XT1NYXRoLnJvdW5kKGQuYzJwKGx0W3ldKS1tKTtmb3IoeT0wO3k8Tzt5KyspZnRbeV09aHQoeSxjdCk7Zm9yKEg9MDtIPEQ7SCsrKWZvcihhdD13WyhpdD1wdChILHV0KSkuYmluMF0sb3Q9d1tpdC5iaW4xXSx5PTA7eTxPO3krKyxudCs9NClmKHJ0LG50LFc9a3QoYXQsb3QsZnRbeV0saXQpKX1lbHNlIGZvcihIPTA7SDxDO0grKylmb3IoWT13W0hdLFo9aihIKSx5PTA7eTxPO3krKylXPVR0KFlbeV0sMSksZihydCxudD00KihaKk8rTih5KSksVyk7dmFyIGR0PVUuY3JlYXRlSW1hZ2VEYXRhKE8sRCk7dHJ5e2R0LmRhdGEuc2V0KHJ0KX1jYXRjaCh0KXt2YXIgZ3Q9ZHQuZGF0YSxtdD1ndC5sZW5ndGg7Zm9yKEg9MDtIPG10O0grKylndFtIXT1ydFtIXX1VLnB1dEltYWdlRGF0YShkdCwwLDApfWVsc2V7dmFyIHZ0PV8ueGdhcCx5dD1fLnlnYXAseHQ9TWF0aC5mbG9vcih2dC8yKSxidD1NYXRoLmZsb29yKHl0LzIpO2ZvcihIPTA7SDxDO0grKylpZihZPXdbSF0sWi5yZXZlcnNlKCksWltLXT1qKEgrMSksWlswXSE9PVpbMV0mJnZvaWQgMCE9PVpbMF0mJnZvaWQgMCE9PVpbMV0pZm9yKHE9W0c9TigwKSxHXSx5PTA7eTxMO3krKylxLnJldmVyc2UoKSxxW0pdPU4oeSsxKSxxWzBdIT09cVsxXSYmdm9pZCAwIT09cVswXSYmdm9pZCAwIT09cVsxXSYmKFc9VHQoWVt5XSwocVsxXS1xWzBdKSooWlsxXS1aWzBdKSksVS5maWxsU3R5bGU9InJnYmEoIitXLmpvaW4oIiwiKSsiKSIsVS5maWxsUmVjdChxWzBdK3h0LFpbMF0rYnQscVsxXS1xWzBdLXZ0LFpbMV0tWlswXS15dCkpfSQ9TWF0aC5yb3VuZCgkL1EpLHR0PU1hdGgucm91bmQodHQvUSksZXQ9TWF0aC5yb3VuZChldC9RKTt2YXIgX3Q9aSgicmdiKCIrJCsiLCIrdHQrIiwiK2V0KyIpIik7dC5faG1waXhjb3VudD0odC5faG1waXhjb3VudHx8MCkrUSx0Ll9obWx1bWNvdW50PSh0Ll9obWx1bWNvdW50fHwwKStRKl90LmdldEx1bWluYW5jZSgpO3ZhciB3dD14LnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGUpO3d0LmVudGVyKCkuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpsLnN2ZyxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHd0LmF0dHIoe2hlaWdodDpELHdpZHRoOk8seDpyLHk6bSwieGxpbms6aHJlZiI6Qi50b0RhdGFVUkwoImltYWdlL3BuZyIpfSl9ZnVuY3Rpb24gVHQodCxlKXtpZih2b2lkIDAhPT10KXt2YXIgcj1WKHQpO3JldHVybiByWzBdPU1hdGgucm91bmQoclswXSksclsxXT1NYXRoLnJvdW5kKHJbMV0pLHJbMl09TWF0aC5yb3VuZChyWzJdKSxRKz1lLCQrPXJbMF0qZSx0dCs9clsxXSplLGV0Kz1yWzJdKmUscn1yZXR1cm5bMCwwLDAsMF19ZnVuY3Rpb24ga3QodCxlLHIsbil7dmFyIGk9dFtyLmJpbjBdO2lmKHZvaWQgMD09PWkpcmV0dXJuIFR0KHZvaWQgMCwxKTt2YXIgYSxvPXRbci5iaW4xXSxzPWVbci5iaW4wXSxsPWVbci5iaW4xXSxjPW8taXx8MCx1PXMtaXx8MDtyZXR1cm4gYT12b2lkIDA9PT1vP3ZvaWQgMD09PWw/MDp2b2lkIDA9PT1zPzIqKGwtaSk6MiooMipsLXMtaSkvMzp2b2lkIDA9PT1sP3ZvaWQgMD09PXM/MDoyKigyKmktby1zKS8zOnZvaWQgMD09PXM/MiooMipsLW8taSkvMzpsK2ktby1zLFR0KGkrci5mcmFjKmMrbi5mcmFjKih1K3IuZnJhYyphKSl9fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjc1NCwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsZDM6MTY5LHRpbnljb2xvcjI6NTc2fV0sMTA3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5obSBpbWFnZSIpLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhY2Uub3BhY2l0eX0pKX19LHtkMzoxNjl9XSwxMDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ITE9PT1yKCJ6c21vb3RoIikmJihyKCJ4Z2FwIikscigieWdhcCIpKSxyKCJ6aG92ZXJmb3JtYXQiKX19LHt9XSwxMDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWUodCk7cmV0dXJuInNjYWxlZCI9PT0ocj9lKHQrInR5cGUiLCJhcnJheSIpOiJzY2FsZWQiKSYmKGUodCsiMCIpLGUoImQiK3QpKSxyfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwsYyl7dmFyIHUsZixoPXIoInoiKTtpZihsPWx8fCJ4IixjPWN8fCJ5Iix2b2lkIDA9PT1ofHwhaC5sZW5ndGgpcmV0dXJuIDA7aWYoaS5pc0FycmF5MUQodC56KSl7dT1yKGwpLGY9cihjKTt2YXIgcD1pLm1pblJvd0xlbmd0aCh1KSxkPWkubWluUm93TGVuZ3RoKGYpO2lmKDA9PT1wfHwwPT09ZClyZXR1cm4gMDtlLl9sZW5ndGg9TWF0aC5taW4ocCxkLGgubGVuZ3RoKX1lbHNle2lmKHU9byhsLHIpLGY9byhjLHIpLCFmdW5jdGlvbih0KXtmb3IodmFyIGUscj0hMCxhPSExLG89ITEscz0wO3M8dC5sZW5ndGg7cysrKXtpZihlPXRbc10sIWkuaXNBcnJheU9yVHlwZWRBcnJheShlKSl7cj0hMTticmVha31lLmxlbmd0aD4wJiYoYT0hMCk7Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDtsKyspaWYobihlW2xdKSl7bz0hMDticmVha319cmV0dXJuIHImJmEmJm99KGgpKXJldHVybiAwO3IoInRyYW5zcG9zZSIpLGUuX2xlbmd0aD1udWxsfXJldHVybiJoZWF0bWFwZ2wiPT09dC50eXBlfHwiY29udG91cmdsIj09PXQudHlwZXx8YS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsW2wsY10scyksITB9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9yZWdpc3RyeSI6OTExLCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sMTA4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIG49dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz1bInoiLCJ4IiwieDAiLCJkeCIsInkiLCJ5MCIsImR5IiwidGV4dCIsInRyYW5zcG9zZSIsInh0eXBlIiwieXR5cGUiXSxsPXt9LGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXTtsW3VdPW5bdV19bC56c21vb3RoPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmYXN0IiwhMV0sZGZsdDoiZmFzdCIsZWRpdFR5cGU6ImNhbGMifSxhKGwsaSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKSxlLmV4cG9ydHM9byhsLCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY1MCwiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MTAsIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6MTA2NX1dLDEwODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtaGVhdG1hcDJkIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpO2Z1bmN0aW9uIG8odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9ImhlYXRtYXBnbCIsdGhpcy5uYW1lPSIiLHRoaXMuaG92ZXJpbmZvPSJhbGwiLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnpEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmlkVG9JbmRleD1bXSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5vcHRpb25zPXt6c21vb3RoOiJmYXN0Iix6OltdLHg6W10seTpbXSxzaGFwZTpbMCwwXSxjb2xvckxldmVsczpbMF0sY29sb3JWYWx1ZXM6WzAsMCwwLDFdfSx0aGlzLmhlYXRtYXA9bih0LmdscGxvdCx0aGlzLm9wdGlvbnMpLHRoaXMuaGVhdG1hcC5fdHJhY2U9dGhpc312YXIgcz1vLnByb3RvdHlwZTtzLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLHI9ZS5zaGFwZSxuPXQucG9pbnRJZCxpPW4lclswXSxhPU1hdGguZmxvb3Iobi9yWzBdKSxvPW47cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6W2UueFtpXSxlLnlbYV0sZS56W29dXSx0ZXh0TGFiZWw6dGhpcy50ZXh0TGFiZWxzW25dLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6W2EsaV0saG92ZXJpbmZvOnRoaXMuaG92ZXJpbmZvfX0scy51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvO3ZhciBuPXIuejt0aGlzLm9wdGlvbnMuej1bXS5jb25jYXQuYXBwbHkoW10sbik7dmFyIG89blswXS5sZW5ndGgscz1uLmxlbmd0aDt0aGlzLm9wdGlvbnMuc2hhcGU9W28sc10sdGhpcy5vcHRpb25zLng9ci54LHRoaXMub3B0aW9ucy55PXIueSx0aGlzLm9wdGlvbnMuenNtb290aD10LnpzbW9vdGg7dmFyIGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY29sb3JzY2FsZSxyPXQuem1pbixuPXQuem1heCxpPWUubGVuZ3RoLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KDQqaSksbD0wO2w8aTtsKyspe3ZhciBjPWVbbF0sdT1hKGNbMV0pO29bbF09citjWzBdKihuLXIpO2Zvcih2YXIgZj0wO2Y8NDtmKyspc1s0KmwrZl09dVtmXX1yZXR1cm57Y29sb3JMZXZlbHM6byxjb2xvclZhbHVlczpzfX0odCk7dGhpcy5vcHRpb25zLmNvbG9yTGV2ZWxzPWwuY29sb3JMZXZlbHMsdGhpcy5vcHRpb25zLmNvbG9yVmFsdWVzPWwuY29sb3JWYWx1ZXMsdGhpcy50ZXh0TGFiZWxzPVtdLmNvbmNhdC5hcHBseShbXSx0LnRleHQpLHRoaXMuaGVhdG1hcC51cGRhdGUodGhpcy5vcHRpb25zKTt2YXIgYyx1LGY9dGhpcy5zY2VuZS54YXhpcyxoPXRoaXMuc2NlbmUueWF4aXM7ITE9PT10LnpzbW9vdGgmJihjPXtwcGFkOnIueFsxXS1yLnhbMF19LHU9e3BwYWQ6ci55WzFdLXIueVswXX0pLHQuX2V4dHJlbWVzW2YuX2lkXT1pLmZpbmRFeHRyZW1lcyhmLHIueCxjKSx0Ll9leHRyZW1lc1toLl9pZF09aS5maW5kRXh0cmVtZXMoaCxyLnksdSl9LHMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuaGVhdG1hcC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IG8odCxlLnVpZCk7cmV0dXJuIG4udXBkYXRlKGUsciksbn19LHsiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCJnbC1oZWF0bWFwMmQiOjI3MX1dLDEwODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLGwscyk/KGwoInRleHQiKSxsKCJ6c21vb3RoIiksYSh0LGUscyxsLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY1MywiLi4vLi4vbGliIjo3NzgsIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIjoxMDc5LCIuL2F0dHJpYnV0ZXMiOjEwODB9XSwxMDgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGNhbGM6dCgiLi4vaGVhdG1hcC9jYWxjIikscGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGVhdG1hcGdsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDJkIiksY2F0ZWdvcmllczpbImdsIiwiZ2wyZCIsIjJkTWFwIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wyZCI6ODY4LCIuLi9oZWF0bWFwL2NhbGMiOjEwNjYsIi4uL2hlYXRtYXAvY29sb3JiYXIiOjEwNjgsIi4vYXR0cmlidXRlcyI6MTA4MCwiLi9jb252ZXJ0IjoxMDgxLCIuL2RlZmF1bHRzIjoxMDgyfV0sMTA4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4vYmluX2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx0ZXh0OnMoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6cyh7fSxuLmhvdmVydGV4dCx7fSksb3JpZW50YXRpb246bi5vcmllbnRhdGlvbixoaXN0ZnVuYzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY291bnQiLCJzdW0iLCJhdmciLCJtaW4iLCJtYXgiXSxkZmx0OiJjb3VudCIsZWRpdFR5cGU6ImNhbGMifSxoaXN0bm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwicGVyY2VudCIsInByb2JhYmlsaXR5IiwiZGVuc2l0eSIsInByb2JhYmlsaXR5IGRlbnNpdHkiXSxkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sY3VtdWxhdGl2ZTp7ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5jcmVhc2luZyIsImRlY3JlYXNpbmciXSxkZmx0OiJpbmNyZWFzaW5nIixlZGl0VHlwZToiY2FsYyJ9LGN1cnJlbnRiaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY2x1ZGUiLCJleGNsdWRlIiwiaGFsZiJdLGRmbHQ6ImluY2x1ZGUiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxuYmluc3g6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHhiaW5zOmEoIngiLCEwKSxuYmluc3k6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHliaW5zOmEoInkiLCEwKSxhdXRvYmlueDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIn0sYXV0b2Jpbnk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LGJpbmdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmkoe30se2tleXM6by5ldmVudERhdGFLZXlzfSksbWFya2VyOm4ubWFya2VyLG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLF9kZXByZWNhdGVkOntiYXJkaXI6bi5fZGVwcmVjYXRlZC5iYXJkaXJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjkwNiwiLi4vYmFyL2F0dHJpYnV0ZXMiOjkyMSwiLi9iaW5fYXR0cmlidXRlcyI6MTA4NiwiLi9jb25zdGFudHMiOjEwOTB9XSwxMDg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTAsaT0wO2k8cjtpKyspZVtpXT8odFtpXS89ZVtpXSxuKz10W2ldKTp0W2ldPW51bGw7cmV0dXJuIG59fSx7fV0sMTA4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57c3RhcnQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxlbmQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxzaXplOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIik7ZS5leHBvcnRzPXtjb3VudDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHJbdF0rKywxfSxzdW06ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtyZXR1cm4gbihhKT8oYT1OdW1iZXIoYSksclt0XSs9YSxhKTowfSxhdmc6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz1pW2VdO3JldHVybiBuKG8pJiYobz1OdW1iZXIobyksclt0XSs9byxhW3RdKyspLDB9LG1pbjpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPmEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfSxtYXg6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtpZihuKGEpKXtpZihhPU51bWJlcihhKSwhbihyW3RdKSlyZXR1cm4gclt0XT1hLGE7aWYoclt0XTxhKXt2YXIgbz1hLXJbdF07cmV0dXJuIHJbdF09YSxvfX1yZXR1cm4gMH19fSx7ImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxpPW4uT05FQVZHWUVBUixhPW4uT05FQVZHTU9OVEgsbz1uLk9ORURBWSxzPW4uT05FSE9VUixsPW4uT05FTUlOLGM9bi5PTkVTRUMsdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLnRpY2tJbmNyZW1lbnQ7ZnVuY3Rpb24gZih0LGUscixuKXtpZih0KmU8PTApcmV0dXJuIDEvMDtmb3IodmFyIGk9TWF0aC5hYnMoZS10KSxhPSJkYXRlIj09PXIudHlwZSxvPWgoaSxhKSxzPTA7czwxMDtzKyspe3ZhciBsPWgoODAqbyxhKTtpZihvPT09bClicmVhaztpZighcChsLHQsZSxhLHIsbikpYnJlYWs7bz1sfXJldHVybiBvfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gZSYmdD5jP3Q+bz90PjEuMSppP2k6dD4xLjEqYT9hOm86dD5zP3M6dD5sP2w6YzpNYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4xMCkpfWZ1bmN0aW9uIHAodCxlLHIsbixhLHMpe2lmKG4mJnQ+byl7dmFyIGw9ZChlLGEscyksYz1kKHIsYSxzKSx1PXQ9PT1pPzA6MTtyZXR1cm4gbFt1XSE9PWNbdV19cmV0dXJuIE1hdGguZmxvb3Ioci90KS1NYXRoLmZsb29yKGUvdCk+LjF9ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49ZS5jMmQodCxpLHIpLnNwbGl0KCItIik7cmV0dXJuIiI9PT1uWzBdJiYobi51bnNoaWZ0KCksblswXT0iLSIrblswXSksbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgcyxsLGM9LTEuMSplLGg9LS4xKmUscD10LWgsZD1yWzBdLGc9clsxXSxtPU1hdGgubWluKGYoZCtoLGQrcCxuLGEpLGYoZytoLGcrcCxuLGEpKSx2PU1hdGgubWluKGYoZCtjLGQraCxuLGEpLGYoZytjLGcraCxuLGEpKTtpZihtPnYmJnY8TWF0aC5hYnMoZy1kKS80ZTM/KHM9bSxsPSExKToocz1NYXRoLm1pbihtLHYpLGw9ITApLCJkYXRlIj09PW4udHlwZSYmcz5vKXt2YXIgeT1zPT09aT8xOjYseD1zPT09aT8iTTEyIjoiTTEiO3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBvPW4uYzJkKGUsaSxhKSxzPW8uaW5kZXhPZigiLSIseSk7cz4wJiYobz1vLnN1YnN0cigwLHMpKTt2YXIgYz1uLmQyYyhvLDAsYSk7aWYoYzxlKXt2YXIgZj11KGMseCwhMSxhKTsoYytmKS8yPGUrdCYmKGM9Zil9cmV0dXJuIHImJmw/dShjLHgsITAsYSk6Y319cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49cypNYXRoLnJvdW5kKGUvcyk7cmV0dXJuIG4rcy8xMDxlJiZuKy45KnM8ZSt0JiYobis9cyksciYmbCYmKG4tPXMpLG59fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjh9XSwxMDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9dCgiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YSIpLGw9dCgiLi9iaW5fZnVuY3Rpb25zIiksYz10KCIuL25vcm1fZnVuY3Rpb25zIiksdT10KCIuL2F2ZXJhZ2UiKSxmPXQoIi4vYmluX2xhYmVsX3ZhbHMiKTtmdW5jdGlvbiBoKHQsZSxyLHMsbCl7dmFyIGMsdSxmLHAsZCxnLG0sdj1zKyJiaW5zIix5PXQuX2Z1bGxMYXlvdXQseD1lWyJfIitzKyJiaW5ncm91cCJdLGI9eS5faGlzdG9ncmFtQmluT3B0c1t4XSxfPSJvdmVybGF5Ij09PXkuYmFybW9kZSx3PWZ1bmN0aW9uKHQpe3JldHVybiByLnIyYyh0LDAscCl9LFQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuYzJyKHQsMCxwKX0saz0iZGF0ZSI9PT1yLnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIHR8fDA9PT10P2kuY2xlYW5EYXRlKHQsbnVsbCxwKTpudWxsfTpmdW5jdGlvbih0KXtyZXR1cm4gbih0KT9OdW1iZXIodCk6bnVsbH07ZnVuY3Rpb24gTSh0LGUscil7ZVt0KyJGb3VuZCJdPyhlW3RdPWsoZVt0XSksbnVsbD09PWVbdF0mJihlW3RdPXJbdF0pKTooZ1t0XT1lW3RdPXJbdF0saS5uZXN0ZWRQcm9wZXJ0eSh1WzBdLHYrIi4iK3QpLnNldChyW3RdKSl9aWYoZVsiXyIrcysiYXV0b0JpbkZpbmlzaGVkIl0pZGVsZXRlIGVbIl8iK3MrImF1dG9CaW5GaW5pc2hlZCJdO2Vsc2V7dT1iLnRyYWNlczt2YXIgQT1bXSxTPSEwLEU9ITEsQz0hMTtmb3IoYz0wO2M8dS5sZW5ndGg7YysrKWlmKChmPXVbY10pLnZpc2libGUpe3ZhciBMPWIuZGlyc1tjXTtkPWZbIl8iK0wrInBvczAiXT1yLm1ha2VDYWxjZGF0YShmLEwpLEE9aS5jb25jYXQoQSxkKSxkZWxldGUgZlsiXyIrcysiYXV0b0JpbkZpbmlzaGVkIl0sITA9PT1lLnZpc2libGUmJihTP1M9ITE6KGRlbGV0ZSBmLl9hdXRvQmluLGZbIl8iK3MrImF1dG9CaW5GaW5pc2hlZCJdPTEpLGEudHJhY2VJcyhmLCIyZE1hcCIpJiYoRT0hMCksImhpc3RvZ3JhbTJkY29udG91ciI9PT1mLnR5cGUmJihDPSEwKSl9cD11WzBdW3MrImNhbGVuZGFyIl07dmFyIEk9by5hdXRvQmluKEEscixiLm5iaW5zLEUscCxiLnNpemVGb3VuZCYmYi5zaXplKSxQPXVbMF0uX2F1dG9CaW49e307aWYoZz1QW2IuZGlyc1swXV09e30sQyYmKGIuc2l6ZXx8KEkuc3RhcnQ9VChvLnRpY2tJbmNyZW1lbnQodyhJLnN0YXJ0KSxJLnNpemUsITAscCkpKSx2b2lkIDA9PT1iLmVuZCYmKEkuZW5kPVQoby50aWNrSW5jcmVtZW50KHcoSS5lbmQpLEkuc2l6ZSwhMSxwKSkpKSxfJiYhYS50cmFjZUlzKGUsIjJkTWFwIikmJjA9PT1JLl9kYXRhU3BhbiYmImNhdGVnb3J5IiE9PXIudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09ci50eXBlKXtpZihsKXJldHVybltJLGQsITBdO0k9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGwsYz10Ll9mdWxsTGF5b3V0LHU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT1lLm9yaWVudGF0aW9uLGE9W10sbz10Ll9mdWxsRGF0YSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107Imhpc3RvZ3JhbSI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLm9yaWVudGF0aW9uPT09aSYmbC54YXhpcz09PXImJmwueWF4aXM9PT1uJiZhLnB1c2gobCl9cmV0dXJuIGF9KHQsZSksZj0hMSxwPTEvMCxkPVtlXTtmb3Iobz0wO288dS5sZW5ndGg7bysrKWlmKChzPXVbb10pPT09ZSlmPSEwO2Vsc2UgaWYoZil7dmFyIGc9aCh0LHMscixuLCEwKSxtPWdbMF0sdj1nWzJdO3NbIl8iK24rImF1dG9CaW5GaW5pc2hlZCJdPTEsc1siXyIrbisicG9zMCJdPWdbMV0sdj9kLnB1c2gocyk6cD1NYXRoLm1pbihwLG0uc2l6ZSl9ZWxzZSBsPWMuX2hpc3RvZ3JhbUJpbk9wdHNbc1siXyIrbisiYmluZ3JvdXAiXV0scD1NYXRoLm1pbihwLGwuc2l6ZXx8c1thXS5zaXplKTt2YXIgeT1uZXcgQXJyYXkoZC5sZW5ndGgpO2ZvcihvPTA7bzxkLmxlbmd0aDtvKyspZm9yKHZhciB4PWRbb11bIl8iK24rInBvczAiXSxiPTA7Yjx4Lmxlbmd0aDtiKyspaWYodm9pZCAwIT09eFtiXSl7eVtvXT14W2JdO2JyZWFrfWlzRmluaXRlKHApfHwocD1pLmRpc3RpbmN0VmFscyh5KS5taW5EaWZmKTtmb3Iobz0wO288ZC5sZW5ndGg7bysrKXt2YXIgXz0ocz1kW29dKVtuKyJjYWxlbmRhciJdLHc9e3N0YXJ0OnIuYzJyKHlbb10tcC8yLDAsXyksZW5kOnIuYzJyKHlbb10rcC8yLDAsXyksc2l6ZTpwfTtzLl9pbnB1dFthXT1zW2FdPXcsKGw9Yy5faGlzdG9ncmFtQmluT3B0c1tzWyJfIituKyJiaW5ncm91cCJdXSkmJmkuZXh0ZW5kRmxhdChsLHcpfXJldHVybiBlW2FdfSh0LGUscixzLHYpfShtPWYuY3VtdWxhdGl2ZXx8e30pLmVuYWJsZWQmJiJpbmNsdWRlIiE9PW0uY3VycmVudGJpbiYmKCJkZWNyZWFzaW5nIj09PW0uZGlyZWN0aW9uP0kuc3RhcnQ9VChvLnRpY2tJbmNyZW1lbnQodyhJLnN0YXJ0KSxJLnNpemUsITAscCkpOkkuZW5kPVQoby50aWNrSW5jcmVtZW50KHcoSS5lbmQpLEkuc2l6ZSwhMSxwKSkpLGIuc2l6ZT1JLnNpemUsYi5zaXplRm91bmR8fChnLnNpemU9SS5zaXplLGkubmVzdGVkUHJvcGVydHkodVswXSx2KyIuc2l6ZSIpLnNldChJLnNpemUpKSxNKCJzdGFydCIsYixJKSxNKCJlbmQiLGIsSSl9ZD1lWyJfIitzKyJwb3MwIl0sZGVsZXRlIGVbIl8iK3MrInBvczAiXTt2YXIgej1lLl9pbnB1dFt2XXx8e30sTz1pLmV4dGVuZEZsYXQoe30sYiksRD1iLnN0YXJ0LFI9ci5yMmwoei5zdGFydCksRj12b2lkIDAhPT1SO2lmKChiLnN0YXJ0Rm91bmR8fEYpJiZSIT09ci5yMmwoRCkpe3ZhciBCPUY/UjppLmFnZ051bXMoTWF0aC5taW4sbnVsbCxkKSxOPXt0eXBlOiJjYXRlZ29yeSI9PT1yLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXIudHlwZT8ibGluZWFyIjpyLnR5cGUscjJsOnIucjJsLGR0aWNrOmIuc2l6ZSx0aWNrMDpELGNhbGVuZGFyOnAscmFuZ2U6W0Isby50aWNrSW5jcmVtZW50KEIsYi5zaXplLCExLHApXS5tYXAoci5sMnIpfSxqPW8udGlja0ZpcnN0KE4pO2o+ci5yMmwoQikmJihqPW8udGlja0luY3JlbWVudChqLGIuc2l6ZSwhMCxwKSksTy5zdGFydD1yLmwycihqKSxGfHxpLm5lc3RlZFByb3BlcnR5KGUsdisiLnN0YXJ0Iikuc2V0KE8uc3RhcnQpfXZhciBVPWIuZW5kLFY9ci5yMmwoei5lbmQpLHE9dm9pZCAwIT09VjtpZigoYi5lbmRGb3VuZHx8cSkmJlYhPT1yLnIybChVKSl7dmFyIEg9cT9WOmkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGQpO08uZW5kPXIubDJyKEgpLHF8fGkubmVzdGVkUHJvcGVydHkoZSx2KyIuc3RhcnQiKS5zZXQoTy5lbmQpfXZhciBHPSJhdXRvYmluIitzO3JldHVybiExPT09ZS5faW5wdXRbR10mJihlLl9pbnB1dFt2XT1pLmV4dGVuZEZsYXQoe30sZVt2XXx8e30pLGRlbGV0ZSBlLl9pbnB1dFtHXSxkZWxldGUgZVtHXSksW08sZF19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxwLGQsZz1bXSxtPVtdLHY9by5nZXRGcm9tSWQodCwiaCI9PT1lLm9yaWVudGF0aW9uP2UueWF4aXM6ZS54YXhpcykseT0iaCI9PT1lLm9yaWVudGF0aW9uPyJ5IjoieCIseD17eDoieSIseToieCJ9W3ldLGI9ZVt5KyJjYWxlbmRhciJdLF89ZS5jdW11bGF0aXZlLHc9aCh0LGUsdix5KSxUPXdbMF0saz13WzFdLE09InN0cmluZyI9PXR5cGVvZiBULnNpemUsQT1bXSxTPU0/QTpULEU9W10sQz1bXSxMPVtdLEk9MCxQPWUuaGlzdG5vcm0sej1lLmhpc3RmdW5jLE89LTEhPT1QLmluZGV4T2YoImRlbnNpdHkiKTtfLmVuYWJsZWQmJk8mJihQPVAucmVwbGFjZSgvID9kZW5zaXR5JC8sIiIpLE89ITEpO3ZhciBELFI9Im1heCI9PT16fHwibWluIj09PXo/bnVsbDowLEY9bC5jb3VudCxCPWNbUF0sTj0hMSxqPWZ1bmN0aW9uKHQpe3JldHVybiB2LnIyYyh0LDAsYil9O2ZvcihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZVt4XSkmJiJjb3VudCIhPT16JiYoRD1lW3hdLE49ImF2ZyI9PT16LEY9bFt6XSkscj1qKFQuc3RhcnQpLHA9aihULmVuZCkrKHItby50aWNrSW5jcmVtZW50KHIsVC5zaXplLCExLGIpKS8xZTY7cjxwJiZnLmxlbmd0aDwxZTYmJihhPW8udGlja0luY3JlbWVudChyLFQuc2l6ZSwhMSxiKSxnLnB1c2goKHIrYSkvMiksbS5wdXNoKFIpLEwucHVzaChbXSksQS5wdXNoKHIpLE8mJkUucHVzaCgxLyhhLXIpKSxOJiZDLnB1c2goMCksIShhPD1yKSk7KXI9YTtBLnB1c2gociksTXx8ImRhdGUiIT09di50eXBlfHwoUz17c3RhcnQ6aihTLnN0YXJ0KSxlbmQ6aihTLmVuZCksc2l6ZTpTLnNpemV9KSx0Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c3x8KHQuX2Z1bGxMYXlvdXQuX3JvdW5kRm5PcHRzPXt9KTt2YXIgVT1lWyJfIit5KyJiaW5ncm91cCJdLFY9e2xlZnRHYXA6MS8wLHJpZ2h0R2FwOjEvMH07VSYmKHQuX2Z1bGxMYXlvdXQuX3JvdW5kRm5PcHRzW1VdfHwodC5fZnVsbExheW91dC5fcm91bmRGbk9wdHNbVV09ViksVj10Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c1tVXSk7dmFyIHEsSD1tLmxlbmd0aCxHPSEwLFk9Vi5sZWZ0R2FwLFc9Vi5yaWdodEdhcCxYPXt9O2ZvcihyPTA7cjxrLmxlbmd0aDtyKyspe3ZhciBaPWtbcl07KGQ9aS5maW5kQmluKFosUykpPj0wJiZkPEgmJihJKz1GKGQscixtLEQsQyksRyYmTFtkXS5sZW5ndGgmJlohPT1rW0xbZF1bMF1dJiYoRz0hMSksTFtkXS5wdXNoKHIpLFhbcl09ZCxZPU1hdGgubWluKFksWi1BW2RdKSxXPU1hdGgubWluKFcsQVtkKzFdLVopKX1WLmxlZnRHYXA9WSxWLnJpZ2h0R2FwPVcsR3x8KHE9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c1tVXTtyZXR1cm4gZihuLmxlZnRHYXAsbi5yaWdodEdhcCxBLHYsYikoZSxyKX19KSxOJiYoST11KG0sQykpLEImJkIobSxJLEUpLF8uZW5hYmxlZCYmZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKGUpe2E9dFtlXSx0W2VdLz0yfWZ1bmN0aW9uIHMoZSl7aT10W2VdLHRbZV09YStpLzIsYSs9aX1pZigiaGFsZiI9PT1yKWlmKCJpbmNyZWFzaW5nIj09PWUpZm9yKG8oMCksbj0xO248dC5sZW5ndGg7bisrKXMobik7ZWxzZSBmb3Iobyh0Lmxlbmd0aC0xKSxuPXQubGVuZ3RoLTI7bj49MDtuLS0pcyhuKTtlbHNlIGlmKCJpbmNyZWFzaW5nIj09PWUpe2ZvcihuPTE7bjx0Lmxlbmd0aDtuKyspdFtuXSs9dFtuLTFdOyJleGNsdWRlIj09PXImJih0LnVuc2hpZnQoMCksdC5wb3AoKSl9ZWxzZXtmb3Iobj10Lmxlbmd0aC0yO24+PTA7bi0tKXRbbl0rPXRbbisxXTsiZXhjbHVkZSI9PT1yJiYodC5wdXNoKDApLHQuc2hpZnQoKSl9fShtLF8uZGlyZWN0aW9uLF8uY3VycmVudGJpbik7dmFyIEo9TWF0aC5taW4oZy5sZW5ndGgsbS5sZW5ndGgpLEs9W10sUT0wLCQ9Si0xO2ZvcihyPTA7cjxKO3IrKylpZihtW3JdKXtRPXI7YnJlYWt9Zm9yKHI9Si0xO3I+PVE7ci0tKWlmKG1bcl0peyQ9cjticmVha31mb3Iocj1RO3I8PSQ7cisrKWlmKG4oZ1tyXSkmJm4obVtyXSkpe3ZhciB0dD17cDpnW3JdLHM6bVtyXSxiOjB9O18uZW5hYmxlZHx8KHR0LnB0cz1MW3JdLEc/dHQucGgwPXR0LnBoMT1MW3JdLmxlbmd0aD9rW0xbcl1bMF1dOmdbcl06KGUuX2NvbXB1dGVQaD0hMCx0dC5waDA9cShBW3JdKSx0dC5waDE9cShBW3IrMV0sITApKSksSy5wdXNoKHR0KX1yZXR1cm4gMT09PUsubGVuZ3RoJiYoS1swXS53aWR0aDE9by50aWNrSW5jcmVtZW50KEtbMF0ucCxULnNpemUsITEsYiktS1swXS5wKSxzKEssZSksaS5pc0FycmF5T3JUeXBlZEFycmF5KGUuc2VsZWN0ZWRwb2ludHMpJiZpLnRhZ1NlbGVjdGVkKEssZSxYKSxLfSxjYWxjQWxsQXV0b0JpbnM6aH19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiOjkyMCwiLi9hdmVyYWdlIjoxMDg1LCIuL2Jpbl9mdW5jdGlvbnMiOjEwODcsIi4vYmluX2xhYmVsX3ZhbHMiOjEwODgsIi4vbm9ybV9mdW5jdGlvbnMiOjEwOTYsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMDkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZXZlbnREYXRhS2V5czpbImJpbk51bWJlciJdfX0se31dLDEwOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMscz1uLm5lc3RlZFByb3BlcnR5LGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLGM9W3thU3RyOnt4OiJ4Ymlucy5zdGFydCIseToieWJpbnMuc3RhcnQifSxuYW1lOiJzdGFydCJ9LHthU3RyOnt4OiJ4Ymlucy5lbmQiLHk6InliaW5zLmVuZCJ9LG5hbWU6ImVuZCJ9LHthU3RyOnt4OiJ4Ymlucy5zaXplIix5OiJ5Ymlucy5zaXplIn0sbmFtZToic2l6ZSJ9LHthU3RyOnt4OiJuYmluc3giLHk6Im5iaW5zeSJ9LG5hbWU6Im5iaW5zIn1dLHU9WyJ4IiwieSJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGYsaCxwLGQsZyxtLHY9ZS5faGlzdG9ncmFtQmluT3B0cz17fSx5PVtdLHg9e30sYj1bXTtmdW5jdGlvbiBfKHQsZSl7cmV0dXJuIG4uY29lcmNlKHIuX2lucHV0LHIsci5fbW9kdWxlLmF0dHJpYnV0ZXMsdCxlKX1mdW5jdGlvbiB3KHQpe3JldHVybiJ2Ij09PXQub3JpZW50YXRpb24/IngiOiJ5In1mdW5jdGlvbiBUKHQscixhKXt2YXIgbz10LnVpZCsiX18iK2E7cnx8KHI9byk7dmFyIHM9ZnVuY3Rpb24odCxyKXtyZXR1cm4gaS5nZXRGcm9tVHJhY2Uoe19mdWxsTGF5b3V0OmV9LHQscikudHlwZX0odCxhKSxsPXRbYSsiY2FsZW5kYXIiXXx8IiIsYz12W3JdLHU9ITA7YyYmKHM9PT1jLmF4VHlwZSYmbD09PWMuY2FsZW5kYXI/KHU9ITEsYy50cmFjZXMucHVzaCh0KSxjLmRpcnMucHVzaChhKSk6KHI9byxzIT09Yy5heFR5cGUmJm4ud2FybihbIkF0dGVtcHRlZCB0byBncm91cCB0aGUgYmlucyBvZiB0cmFjZSIsdC5pbmRleCwic2V0IG9uIGEiLCJ0eXBlOiIrcywiYXhpcyIsIndpdGggYmlucyBvbiIsInR5cGU6IitjLmF4VHlwZSwiYXhpcy4iXS5qb2luKCIgIikpLGwhPT1jLmNhbGVuZGFyJiZuLndhcm4oWyJBdHRlbXB0ZWQgdG8gZ3JvdXAgdGhlIGJpbnMgb2YgdHJhY2UiLHQuaW5kZXgsInNldCB3aXRoIGEiLGwsImNhbGVuZGFyIiwid2l0aCBiaW5zIixjLmNhbGVuZGFyPyJvbiBhICIrYy5jYWxlbmRhcisiIGNhbGVuZGFyIjoidy9vIGEgc2V0IGNhbGVuZGFyIl0uam9pbigiICIpKSkpLHUmJih2W3JdPXt0cmFjZXM6W3RdLGRpcnM6W2FdLGF4VHlwZTpzLGNhbGVuZGFyOnRbYSsiY2FsZW5kYXIiXXx8IiJ9KSx0WyJfIithKyJiaW5ncm91cCJdPXJ9Zm9yKGQ9MDtkPHQubGVuZ3RoO2QrKylyPXRbZF0sYShyLCJoaXN0b2dyYW0iKSYmKHkucHVzaChyKSxkZWxldGUgci5feGF1dG9CaW5GaW5pc2hlZCxkZWxldGUgci5feWF1dG9CaW5GaW5pc2hlZCxhKHIsIjJkTWFwIil8fG8oci5faW5wdXQscixlLF8pKTt2YXIgaz1lLl9hbGlnbm1lbnRPcHRzfHx7fTtmb3IoZD0wO2Q8eS5sZW5ndGg7ZCsrKXtpZihyPXlbZF0saD0iIiwhYShyLCIyZE1hcCIpKXtpZihwPXcociksImdyb3VwIj09PWUuYmFybW9kZSYmci5hbGlnbm1lbnRncm91cCl7dmFyIE09cltwKyJheGlzIl0sQT1sKGUsTSkrci5vcmllbnRhdGlvbjsoa1tBXXx8e30pW3IuYWxpZ25tZW50Z3JvdXBdJiYoaD1BKX1ofHwib3ZlcmxheSI9PT1lLmJhcm1vZGV8fChoPWwoZSxyLnhheGlzKStsKGUsci55YXhpcykrdyhyKSl9aD8oeFtoXXx8KHhbaF09W10pLHhbaF0ucHVzaChyKSk6Yi5wdXNoKHIpfWZvcihoIGluIHgpaWYoMSE9PShmPXhbaF0pLmxlbmd0aCl7dmFyIFM9ITE7Zm9yKGYubGVuZ3RoJiYocj1mWzBdLFM9XygiYmluZ3JvdXAiKSksaD1TfHxoLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIEU9KHI9ZltkXSkuX2lucHV0LmJpbmdyb3VwO0UmJkUhPT1oJiZuLndhcm4oWyJUcmFjZSIsci5pbmRleCwibXVzdCBtYXRjaCIsIndpdGhpbiBiaW5ncm91cCIsaCsiLiIsIklnbm9yaW5nIGl0cyBiaW5ncm91cDoiLEUsInNldHRpbmcuIl0uam9pbigiICIpKSxyLmJpbmdyb3VwPWgsVChyLGgsdyhyKSl9fWVsc2UgYi5wdXNoKGZbMF0pO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspe3I9YltkXTt2YXIgQz1fKCJiaW5ncm91cCIpO2lmKGEociwiMmRNYXAiKSlmb3IobT0wO208MjttKyspe3ZhciBMPV8oKHA9dVttXSkrImJpbmdyb3VwIixDP0MrIl9fIitwOm51bGwpO1QocixMLHApfWVsc2UgVChyLEMsdyhyKSl9Zm9yKGggaW4gdil7dmFyIEk9dltoXTtmb3IoZj1JLnRyYWNlcyxnPTA7ZzxjLmxlbmd0aDtnKyspe3ZhciBQLHosTz1jW2ddLEQ9Ty5uYW1lO2lmKCJuYmlucyIhPT1EfHwhSS5zaXplRm91bmQpe2ZvcihkPTA7ZDxmLmxlbmd0aDtkKyspe2lmKHI9ZltkXSxwPUkuZGlyc1tkXSxQPU8uYVN0cltwXSx2b2lkIDAhPT1zKHIuX2lucHV0LFApLmdldCgpKXtJW0RdPV8oUCksSVtEKyJGb3VuZCJdPSEwO2JyZWFrfSh6PShyLl9hdXRvQmlufHx7fSlbcF18fHt9KVtEXSYmcyhyLFApLnNldCh6W0RdKX1pZigic3RhcnQiPT09RHx8ImVuZCI9PT1EKWZvcig7ZDxmLmxlbmd0aDtkKyspKHI9ZltkXSlbIl8iK3ArImJpbmdyb3VwIl0mJl8oUCwoej0oci5fYXV0b0Jpbnx8e30pW3BdfHx7fSlbRF0pOyJuYmlucyIhPT1EfHxJLnNpemVGb3VuZHx8SS5uYmluc0ZvdW5kfHwocj1mWzBdLElbRF09XyhQKSl9fX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo4MzUsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL2Jhci9kZWZhdWx0cyI6OTI1fV0sMTA5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxzLHIsbil9dmFyIHU9YygieCIpLGY9YygieSIpO2MoImN1bXVsYXRpdmUuZW5hYmxlZCIpJiYoYygiY3VtdWxhdGl2ZS5kaXJlY3Rpb24iKSxjKCJjdW11bGF0aXZlLmN1cnJlbnRiaW4iKSksYygidGV4dCIpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKTt2YXIgaD1jKCJvcmllbnRhdGlvbiIsZiYmIXU/ImgiOiJ2IikscD0idiI9PT1oPyJ4IjoieSIsZD0idiI9PT1oPyJ5IjoieCIsZz11JiZmP01hdGgubWluKGkubWluUm93TGVuZ3RoKHUpJiZpLm1pblJvd0xlbmd0aChmKSk6aS5taW5Sb3dMZW5ndGgoZVtwXXx8W10pO2lmKGcpe2UuX2xlbmd0aD1nLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxsKSxlW2RdJiZjKCJoaXN0ZnVuYyIpLGMoImhpc3Rub3JtIiksYygiYXV0b2JpbiIrcCksbyh0LGUsYyxyLGwpLGkuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGMpO3ZhciBtPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3Isdj1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt2KHQsZSxtfHxhLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLHYodCxlLG18fGEuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6OTM2LCIuL2F0dHJpYnV0ZXMiOjEwODR9XSwxMDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwiekxhYmVsVmFsImluIGUmJih0Lno9ZS56TGFiZWxWYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLCEoci5jdW11bGF0aXZlfHx7fSkuZW5hYmxlZCl7dmFyIGEsbz1BcnJheS5pc0FycmF5KGkpP25bMF0ucHRzW2lbMF1dW2lbMV1dOm5baV0ucHRzO2lmKHQucG9pbnROdW1iZXJzPW8sdC5iaW5OdW1iZXI9dC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludEluZGV4LHIuX2luZGV4VG9Qb2ludHMpe2E9W107Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspYT1hLmNvbmNhdChyLl9pbmRleFRvUG9pbnRzW29bc11dKX1lbHNlIGE9bzt0LnBvaW50SW5kaWNlcz1hfXJldHVybiB0fX0se31dLDEwOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJQb2ludHMsaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8pe3ZhciBzPSh0PW9bMF0pLmNkW3QuaW5kZXhdLGw9dC5jZFswXS50cmFjZTtpZighbC5jdW11bGF0aXZlLmVuYWJsZWQpe3ZhciBjPSJoIj09PWwub3JpZW50YXRpb24/InkiOiJ4Ijt0W2MrIkxhYmVsIl09aSh0W2MrImEiXSxzLnBoMCxzLnBoMSl9cmV0dXJuIG99fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi9iYXIvaG92ZXIiOjkyOH1dLDEwOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi4vYmFyL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi4vYmFyL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dCgiLi4vYmFyL3Bsb3QiKS5wbG90LGxheWVyTmFtZToiYmFybGF5ZXIiLHN0eWxlOnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi4vYmFyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vYmFyL3NlbGVjdCIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGlzdG9ncmFtIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJiYXIiLCJoaXN0b2dyYW0iLCJvcmllbnRlZCIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyI6OTI0LCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXMiOjkzMCwiLi4vYmFyL2xheW91dF9kZWZhdWx0cyI6OTMxLCIuLi9iYXIvcGxvdCI6OTMyLCIuLi9iYXIvc2VsZWN0Ijo5MzMsIi4uL2Jhci9zdHlsZSI6OTM1LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwNSwiLi9hdHRyaWJ1dGVzIjoxMDg0LCIuL2NhbGMiOjEwODksIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjEwOTEsIi4vZGVmYXVsdHMiOjEwOTIsIi4vZXZlbnRfZGF0YSI6MTA5MywiLi9ob3ZlciI6MTA5NH1dLDEwOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtwZXJjZW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MTAwL2UsaT0wO2k8cjtpKyspdFtpXSo9bn0scHJvYmFiaWxpdHk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspdFtuXS89ZX0sZGVuc2l0eTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Lmxlbmd0aDtuPW58fDE7Zm9yKHZhciBhPTA7YTxpO2ErKyl0W2FdKj1yW2FdKm59LCJwcm9iYWJpbGl0eSBkZW5zaXR5IjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Lmxlbmd0aDtuJiYoZS89bik7Zm9yKHZhciBhPTA7YTxpO2ErKyl0W2FdKj1yW2FdL2V9fX0se31dLDEwOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGlzdG9ncmFtL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2hpc3RvZ3JhbS9iaW5fYXR0cmlidXRlcyIpLGE9dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1jKHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxoaXN0bm9ybTpuLmhpc3Rub3JtLGhpc3RmdW5jOm4uaGlzdGZ1bmMsbmJpbnN4Om4ubmJpbnN4LHhiaW5zOmkoIngiKSxuYmluc3k6bi5uYmluc3kseWJpbnM6aSgieSIpLGF1dG9iaW54Om4uYXV0b2JpbngsYXV0b2Jpbnk6bi5hdXRvYmlueSxiaW5ncm91cDpjKHt9LG4uYmluZ3JvdXAse30pLHhiaW5ncm91cDpjKHt9LG4uYmluZ3JvdXAse30pLHliaW5ncm91cDpjKHt9LG4uYmluZ3JvdXAse30pLHhnYXA6YS54Z2FwLHlnYXA6YS55Z2FwLHpzbW9vdGg6YS56c21vb3RoLHpob3ZlcmZvcm1hdDphLnpob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOnMoe30se2tleXM6InoifSksc2hvd2xlZ2VuZDpjKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSxsKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODI0LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDYsIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6MTA2NSwiLi4vaGlzdG9ncmFtL2F0dHJpYnV0ZXMiOjEwODQsIi4uL2hpc3RvZ3JhbS9iaW5fYXR0cmlidXRlcyI6MTA4Nn1dLDEwOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnMiKSxvPXQoIi4uL2hpc3RvZ3JhbS9ub3JtX2Z1bmN0aW9ucyIpLHM9dCgiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiKSxsPXQoIi4uL2hpc3RvZ3JhbS9iaW5fbGFiZWxfdmFscyIpLGM9dCgiLi4vaGlzdG9ncmFtL2NhbGMiKS5jYWxjQWxsQXV0b0JpbnM7ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaSxhPW5ldyBBcnJheSh0KTtpZihuKWZvcihpPTA7aTx0O2krKylhW2ldPTEvKGVbaSsxXS1lW2ldKTtlbHNle3ZhciBvPTEvcjtmb3IoaT0wO2k8dDtpKyspYVtpXT1vfXJldHVybiBhfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm57c3RhcnQ6dChlLnN0YXJ0KSxlbmQ6dChlLmVuZCksc2l6ZTplLnNpemV9fWZ1bmN0aW9uIGgodCxlLHIsbixpLGEpe3ZhciBvLHM9dC5sZW5ndGgtMSxjPW5ldyBBcnJheShzKSx1PWwocixuLHQsaSxhKTtmb3Iobz0wO288cztvKyspe3ZhciBmPShlfHxbXSlbb107Y1tvXT12b2lkIDA9PT1mP1t1KHRbb10pLHUodFtvKzFdLCEwKV06W2YsZl19cmV0dXJuIGN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbCxwLGQsZz1pLmdldEZyb21JZCh0LGUueGF4aXMpLG09aS5nZXRGcm9tSWQodCxlLnlheGlzKSx2PWUueGNhbGVuZGFyLHk9ZS55Y2FsZW5kYXIseD1mdW5jdGlvbih0KXtyZXR1cm4gZy5yMmModCwwLHYpfSxiPWZ1bmN0aW9uKHQpe3JldHVybiBtLnIyYyh0LDAseSl9LF89Yyh0LGUsZywieCIpLHc9X1swXSxUPV9bMV0saz1jKHQsZSxtLCJ5IiksTT1rWzBdLEE9a1sxXSxTPWUuX2xlbmd0aDtULmxlbmd0aD5TJiZULnNwbGljZShTLFQubGVuZ3RoLVMpLEEubGVuZ3RoPlMmJkEuc3BsaWNlKFMsQS5sZW5ndGgtUyk7dmFyIEU9W10sQz1bXSxMPVtdLEk9InN0cmluZyI9PXR5cGVvZiB3LnNpemUsUD0ic3RyaW5nIj09dHlwZW9mIE0uc2l6ZSx6PVtdLE89W10sRD1JP3o6dyxSPVA/TzpNLEY9MCxCPVtdLE49W10saj1lLmhpc3Rub3JtLFU9ZS5oaXN0ZnVuYyxWPS0xIT09ai5pbmRleE9mKCJkZW5zaXR5IikscT0ibWF4Ij09PVV8fCJtaW4iPT09VT9udWxsOjAsSD1hLmNvdW50LEc9b1tqXSxZPSExLFc9W10sWD1bXSxaPSJ6ImluIGU/ZS56OiJtYXJrZXIiaW4gZSYmQXJyYXkuaXNBcnJheShlLm1hcmtlci5jb2xvcik/ZS5tYXJrZXIuY29sb3I6IiI7WiYmImNvdW50IiE9PVUmJihZPSJhdmciPT09VSxIPWFbVV0pO3ZhciBKPXcuc2l6ZSxLPXgody5zdGFydCksUT14KHcuZW5kKSsoSy1pLnRpY2tJbmNyZW1lbnQoSyxKLCExLHYpKS8xZTY7Zm9yKHI9SztyPFE7cj1pLnRpY2tJbmNyZW1lbnQocixKLCExLHYpKUMucHVzaChxKSx6LnB1c2gociksWSYmTC5wdXNoKDApO3oucHVzaChyKTt2YXIgJCx0dD1DLmxlbmd0aCxldD0oci1LKS90dCxydD0oJD1LK2V0LzIsZy5jMnIoJCwwLHYpKSxudD1NLnNpemUsaXQ9YihNLnN0YXJ0KSxhdD1iKE0uZW5kKSsoaXQtaS50aWNrSW5jcmVtZW50KGl0LG50LCExLHkpKS8xZTY7Zm9yKHI9aXQ7cjxhdDtyPWkudGlja0luY3JlbWVudChyLG50LCExLHkpKXtFLnB1c2goQy5zbGljZSgpKSxPLnB1c2gocik7dmFyIG90PW5ldyBBcnJheSh0dCk7Zm9yKGw9MDtsPHR0O2wrKylvdFtsXT1bXTtOLnB1c2gob3QpLFkmJkIucHVzaChMLnNsaWNlKCkpfU8ucHVzaChyKTt2YXIgc3Q9RS5sZW5ndGgsbHQ9KHItaXQpL3N0LGN0PWZ1bmN0aW9uKHQpe3JldHVybiBtLmMycih0LDAseSl9KGl0K2x0LzIpO1YmJihXPXUoQy5sZW5ndGgsRCxldCxJKSxYPXUoRS5sZW5ndGgsUixsdCxQKSksSXx8ImRhdGUiIT09Zy50eXBlfHwoRD1mKHgsRCkpLFB8fCJkYXRlIiE9PW0udHlwZXx8KFI9ZihiLFIpKTt2YXIgdXQ9ITAsZnQ9ITAsaHQ9bmV3IEFycmF5KHR0KSxwdD1uZXcgQXJyYXkoc3QpLGR0PTEvMCxndD0xLzAsbXQ9MS8wLHZ0PTEvMDtmb3Iocj0wO3I8UztyKyspe3ZhciB5dD1UW3JdLHh0PUFbcl07cD1uLmZpbmRCaW4oeXQsRCksZD1uLmZpbmRCaW4oeHQsUikscD49MCYmcDx0dCYmZD49MCYmZDxzdCYmKEYrPUgocCxyLEVbZF0sWixCW2RdKSxOW2RdW3BdLnB1c2gociksdXQmJih2b2lkIDA9PT1odFtwXT9odFtwXT15dDpodFtwXSE9PXl0JiYodXQ9ITEpKSxmdCYmKHZvaWQgMD09PXB0W2RdP3B0W2RdPXh0OnB0W2RdIT09eHQmJihmdD0hMSkpLGR0PU1hdGgubWluKGR0LHl0LXpbcF0pLGd0PU1hdGgubWluKGd0LHpbcCsxXS15dCksbXQ9TWF0aC5taW4obXQseHQtT1tkXSksdnQ9TWF0aC5taW4odnQsT1tkKzFdLXh0KSl9aWYoWSlmb3IoZD0wO2Q8c3Q7ZCsrKUYrPXMoRVtkXSxCW2RdKTtpZihHKWZvcihkPTA7ZDxzdDtkKyspRyhFW2RdLEYsVyxYW2RdKTtyZXR1cm57eDpULHhSYW5nZXM6aCh6LHV0JiZodCxkdCxndCxnLHYpLHgwOnJ0LGR4OmV0LHk6QSx5UmFuZ2VzOmgoTyxmdCYmcHQsbXQsdnQsbSx5KSx5MDpjdCxkeTpsdCx6OkUscHRzOk59fX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiOjEwODUsIi4uL2hpc3RvZ3JhbS9iaW5fZnVuY3Rpb25zIjoxMDg3LCIuLi9oaXN0b2dyYW0vYmluX2xhYmVsX3ZhbHMiOjEwODgsIi4uL2hpc3RvZ3JhbS9jYWxjIjoxMDg5LCIuLi9oaXN0b2dyYW0vbm9ybV9mdW5jdGlvbnMiOjEwOTZ9XSwxMDk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9zYW1wbGVfZGVmYXVsdHMiKSxhPXQoIi4uL2hlYXRtYXAvc3R5bGVfZGVmYXVsdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSxjLGwpLCExIT09ZS52aXNpYmxlJiYoYSh0LGUsYyxsKSxvKHQsZSxsLGMse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pLGMoImhvdmVydGVtcGxhdGUiKSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjUzLCIuLi8uLi9saWIiOjc3OCwiLi4vaGVhdG1hcC9zdHlsZV9kZWZhdWx0cyI6MTA3OCwiLi9hdHRyaWJ1dGVzIjoxMDk3LCIuL3NhbXBsZV9kZWZhdWx0cyI6MTEwMn1dLDExMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGVhdG1hcC9ob3ZlciIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe3ZhciBsPW4odCxlLHIsYSxvLHMpO2lmKGwpe3ZhciBjPSh0PWxbMF0pLmluZGV4LHU9Y1swXSxmPWNbMV0saD10LmNkWzBdLHA9aC54UmFuZ2VzW2ZdLGQ9aC55UmFuZ2VzW3VdO3JldHVybiB0LnhMYWJlbD1pKHQueGEscFswXSxwWzFdKSx0LnlMYWJlbD1pKHQueWEsZFswXSxkWzFdKSxsfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vaGVhdG1hcC9ob3ZlciI6MTA3Mn1dLDExMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vaGlzdG9ncmFtL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY2FsYzp0KCIuLi9oZWF0bWFwL2NhbGMiKSxwbG90OnQoIi4uL2hlYXRtYXAvcGxvdCIpLGxheWVyTmFtZToiaGVhdG1hcGxheWVyIixjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksc3R5bGU6dCgiLi4vaGVhdG1hcC9zdHlsZSIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi4vaGlzdG9ncmFtL2V2ZW50X2RhdGEiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGlzdG9ncmFtMmQiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImhpc3RvZ3JhbSIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vaGVhdG1hcC9jYWxjIjoxMDY2LCIuLi9oZWF0bWFwL2NvbG9yYmFyIjoxMDY4LCIuLi9oZWF0bWFwL3Bsb3QiOjEwNzYsIi4uL2hlYXRtYXAvc3R5bGUiOjEwNzcsIi4uL2hpc3RvZ3JhbS9jcm9zc190cmFjZV9kZWZhdWx0cyI6MTA5MSwiLi4vaGlzdG9ncmFtL2V2ZW50X2RhdGEiOjEwOTMsIi4vYXR0cmlidXRlcyI6MTA5NywiLi9kZWZhdWx0cyI6MTA5OSwiLi9ob3ZlciI6MTEwMH1dLDExMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yKCJ4Iikscz1yKCJ5IiksbD1pLm1pblJvd0xlbmd0aChvKSxjPWkubWluUm93TGVuZ3RoKHMpO2wmJmM/KGUuX2xlbmd0aD1NYXRoLm1pbihsLGMpLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxhKSwocigieiIpfHxyKCJtYXJrZXIuY29sb3IiKSkmJnIoImhpc3RmdW5jIikscigiaGlzdG5vcm0iKSxyKCJhdXRvYmlueCIpLHIoImF1dG9iaW55IikpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTF9XSwxMTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbnRvdXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1vKHt4Om4ueCx5Om4ueSx6Om4ueixtYXJrZXI6bi5tYXJrZXIsaGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLG5iaW5zeDpuLm5iaW5zeCx4YmluczpuLnhiaW5zLG5iaW5zeTpuLm5iaW5zeSx5YmluczpuLnliaW5zLGF1dG9iaW54Om4uYXV0b2JpbngsYXV0b2Jpbnk6bi5hdXRvYmlueSxiaW5ncm91cDpuLmJpbmdyb3VwLHhiaW5ncm91cDpuLnhiaW5ncm91cCx5YmluZ3JvdXA6bi55YmluZ3JvdXAsYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6aS5jb250b3VycyxsaW5lOntjb2xvcjppLmxpbmUuY29sb3Isd2lkdGg6byh7fSxpLmxpbmUud2lkdGgse2RmbHQ6LjV9KSxkYXNoOmkubGluZS5kYXNoLHNtb290aGluZzppLmxpbmUuc21vb3RoaW5nLGVkaXRUeXBlOiJwbG90In0semhvdmVyZm9ybWF0Om4uemhvdmVyZm9ybWF0LGhvdmVydGVtcGxhdGU6bi5ob3ZlcnRlbXBsYXRlfSxhKCIiLHtjTGV0dGVyOiJ6IixlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjUwLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uL2NvbnRvdXIvYXR0cmlidXRlcyI6MTAwOCwiLi4vaGlzdG9ncmFtMmQvYXR0cmlidXRlcyI6MTA5N31dLDExMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9oaXN0b2dyYW0yZC9zYW1wbGVfZGVmYXVsdHMiKSxhPXQoIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHMiKSxvPXQoIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKSwhMSE9PWUudmlzaWJsZSYmKGEodCxlLGMsKGZ1bmN0aW9uKHIpe3JldHVybiBuLmNvZXJjZTIodCxlLHMscil9KSksbyh0LGUsYyxsKSxjKCJob3ZlcnRlbXBsYXRlIikpfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyI6MTAxNSwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyI6MTAyOSwiLi4vaGlzdG9ncmFtMmQvc2FtcGxlX2RlZmF1bHRzIjoxMTAyLCIuL2F0dHJpYnV0ZXMiOjExMDN9XSwxMTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4uL2hpc3RvZ3JhbS9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6dCgiLi4vY29udG91ci9jYWxjIikscGxvdDp0KCIuLi9jb250b3VyL3Bsb3QiKS5wbG90LGxheWVyTmFtZToiY29udG91cmxheWVyIixzdHlsZTp0KCIuLi9jb250b3VyL3N0eWxlIiksY29sb3JiYXI6dCgiLi4vY29udG91ci9jb2xvcmJhciIpLGhvdmVyUG9pbnRzOnQoIi4uL2NvbnRvdXIvaG92ZXIiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGlzdG9ncmFtMmRjb250b3VyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiMmRNYXAiLCJjb250b3VyIiwiaGlzdG9ncmFtIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuLi9jb250b3VyL2NhbGMiOjEwMDksIi4uL2NvbnRvdXIvY29sb3JiYXIiOjEwMTEsIi4uL2NvbnRvdXIvaG92ZXIiOjEwMjEsIi4uL2NvbnRvdXIvcGxvdCI6MTAyNiwiLi4vY29udG91ci9zdHlsZSI6MTAyOCwiLi4vaGlzdG9ncmFtL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjoxMDkxLCIuL2F0dHJpYnV0ZXMiOjExMDMsIi4vZGVmYXVsdHMiOjExMDR9XSwxMTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Zvcih2YXIgbj10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuL2NvbnN0YW50cyIpLmNvbG9ybW9kZWwscz1bInJnYiIsInJnYmEiLCJyZ2JhMjU2IiwiaHNsIiwiaHNsYSJdLGw9W10sYz1bXSx1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBmPW9bc1t1XV07bC5wdXNoKCJGb3IgdGhlIGAiK3NbdV0rImAgY29sb3Jtb2RlbCwgaXQgaXMgWyIrKGYuem1pbkRmbHR8fGYubWluKS5qb2luKCIsICIpKyJdLiIpLGMucHVzaCgiRm9yIHRoZSBgIitzW3VdKyJgIGNvbG9ybW9kZWwsIGl0IGlzIFsiKyhmLnptYXhEZmx0fHxmLm1heCkuam9pbigiLCAiKSsiXS4iKX1lLmV4cG9ydHM9YSh7c291cmNlOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxjb2xvcm1vZGVsOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cyxlZGl0VHlwZToiY2FsYyJ9LHptaW46e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LHptYXg6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGR4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJwbG90In0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVyaW5mbzphKHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbIngiLCJ5IiwieiIsImNvbG9yIiwibmFtZSIsInRleHQiXSxkZmx0OiJ4K3kreit0ZXh0K25hbWUifSksaG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOlsieiIsImNvbG9yIiwiY29sb3Jtb2RlbCJdfSksdHJhbnNmb3Jtczp2b2lkIDB9KX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyNCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6OTA2LCIuL2NvbnN0YW50cyI6MTEwOH1dLDExMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2NvbnN0YW50cyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi8uLi9saWIiKS5tYXhSb3dMZW5ndGgsbD10KCIuL2hlbHBlcnMiKS5nZXRJbWFnZVNpemU7ZnVuY3Rpb24gYyh0LGUscixpKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIG4uY29uc3RyYWluKChhLXQpKmUscixpKX19ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gbi5jb25zdHJhaW4ocix0LGUpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuO2lmKGUuX2hhc1opcj1lLnoubGVuZ3RoLG49cyhlLnopO2Vsc2UgaWYoZS5faGFzU291cmNlKXt2YXIgZj1sKGUuc291cmNlKTtyPWYuaGVpZ2h0LG49Zi53aWR0aH12YXIgaCxwPW8uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxkPW8uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxnPXAuZDJjKGUueDApLWUuZHgvMixtPWQuZDJjKGUueTApLWUuZHkvMix2PVtnLGcrbiplLmR4XSx5PVttLG0rciplLmR5XTtpZihwJiYibG9nIj09PXAudHlwZSlmb3IoaD0wO2g8bjtoKyspdi5wdXNoKGcraCplLmR4KTtpZihkJiYibG9nIj09PWQudHlwZSlmb3IoaD0wO2g8cjtoKyspeS5wdXNoKG0raCplLmR5KTtyZXR1cm4gZS5fZXh0cmVtZXNbcC5faWRdPW8uZmluZEV4dHJlbWVzKHAsdiksZS5fZXh0cmVtZXNbZC5faWRdPW8uZmluZEV4dHJlbWVzKGQseSksZS5fc2NhbGVyPWZ1bmN0aW9uKHQpe3ZhciBlPWkuY29sb3Jtb2RlbFt0LmNvbG9ybW9kZWxdLHI9KGUuY29sb3Jtb2RlbHx8dC5jb2xvcm1vZGVsKS5sZW5ndGg7dC5fc0FycmF5PVtdO2Zvcih2YXIgbj0wO248cjtuKyspZS5taW5bbl0hPT10LnptaW5bbl18fGUubWF4W25dIT09dC56bWF4W25dP3QuX3NBcnJheS5wdXNoKGModC56bWluW25dLChlLm1heFtuXS1lLm1pbltuXSkvKHQuem1heFtuXS10LnptaW5bbl0pLGUubWluW25dLGUubWF4W25dKSk6dC5fc0FycmF5LnB1c2godShlLm1pbltuXSxlLm1heFtuXSkpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49ZS5zbGljZSgwLHIpLGk9MDtpPHI7aSsrKXt2YXIgbz1uW2ldO2lmKCFhKG8pKXJldHVybiExO25baV09dC5fc0FycmF5W2ldKG8pfXJldHVybiBufX0oZSksW3t4MDpnLHkwOm0sejplLnosdzpuLGg6cn1dfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi9jb25zdGFudHMiOjExMDgsIi4vaGVscGVycyI6MTExMSwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDExMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjb2xvcm1vZGVsOntyZ2I6e21pbjpbMCwwLDBdLG1heDpbMjU1LDI1NSwyNTVdLGZtdDpmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgwLDMpfSxzdWZmaXg6WyIiLCIiLCIiXX0scmdiYTp7bWluOlswLDAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1LDFdLGZtdDpmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgwLDQpfSxzdWZmaXg6WyIiLCIiLCIiLCIiXX0scmdiYTI1Njp7Y29sb3Jtb2RlbDoicmdiYSIsem1pbkRmbHQ6WzAsMCwwLDBdLHptYXhEZmx0OlsyNTUsMjU1LDI1NSwyNTVdLG1pbjpbMCwwLDAsMF0sbWF4OlsyNTUsMjU1LDI1NSwxXSxmbXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMCw0KX0sc3VmZml4OlsiIiwiIiwiIiwiIl19LGhzbDp7bWluOlswLDAsMF0sbWF4OlszNjAsMTAwLDEwMF0sZm10OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2UoMCwzKTtyZXR1cm4gZVsxXT1lWzFdKyIlIixlWzJdPWVbMl0rIiUiLGV9LHN1ZmZpeDpbIlx4YjAiLCIlIiwiJSJdfSxoc2xhOnttaW46WzAsMCwwLDBdLG1heDpbMzYwLDEwMCwxMDAsMV0sZm10OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2UoMCw0KTtyZXR1cm4gZVsxXT1lWzFdKyIlIixlWzJdPWVbMl0rIiUiLGV9LHN1ZmZpeDpbIlx4YjAiLCIlIiwiJSIsIiJdfX19fSx7fV0sMTEwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4uLy4uL3NuYXBzaG90L2hlbHBlcnMiKS5JTUFHRV9VUkxfUFJFRklYO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJzb3VyY2UiKSxlLnNvdXJjZSYmIWUuc291cmNlLm1hdGNoKG8pJiZkZWxldGUgZS5zb3VyY2UsZS5faGFzU291cmNlPSEhZS5zb3VyY2U7dmFyIHMsbD1yKCJ6Iik7KGUuX2hhc1o9ISh2b2lkIDA9PT1sfHwhbC5sZW5ndGh8fCFsWzBdfHwhbFswXS5sZW5ndGgpLGUuX2hhc1p8fGUuX2hhc1NvdXJjZSk/KHIoIngwIikscigieTAiKSxyKCJkeCIpLHIoImR5IiksZS5faGFzWj8ocigiY29sb3Jtb2RlbCIsInJnYiIpLHIoInptaW4iLChzPWEuY29sb3Jtb2RlbFtlLmNvbG9ybW9kZWxdKS56bWluRGZsdHx8cy5taW4pLHIoInptYXgiLHMuem1heERmbHR8fHMubWF4KSk6ZS5faGFzU291cmNlJiYoZS5jb2xvcm1vZGVsPSJyZ2JhMjU2IixzPWEuY29sb3Jtb2RlbFtlLmNvbG9ybW9kZWxdLGUuem1pbj1zLnptaW5EZmx0LGUuem1heD1zLnptYXhEZmx0KSxyKCJ0ZXh0IikscigiaG92ZXJ0ZXh0IikscigiaG92ZXJ0ZW1wbGF0ZSIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9zbmFwc2hvdC9oZWxwZXJzIjo5MTUsIi4vYXR0cmlidXRlcyI6MTEwNiwiLi9jb25zdGFudHMiOjExMDh9XSwxMTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiJ4VmFsImluIGUmJih0Lng9ZS54VmFsKSwieVZhbCJpbiBlJiYodC55PWUueVZhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksdC5jb2xvcj1lLmNvbG9yLHQuY29sb3Jtb2RlbD1lLnRyYWNlLmNvbG9ybW9kZWwsdC56fHwodC56PWUuY29sb3IpLHR9fSx7fV0sMTExMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpbWFnZS1zaXplIiksaT10KCIuLi8uLi9zbmFwc2hvdC9oZWxwZXJzIikuSU1BR0VfVVJMX1BSRUZJWCxhPXQoImJ1ZmZlci8iKS5CdWZmZXI7ci5nZXRJbWFnZVNpemU9ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKGksIiIpLHI9bmV3IGEoZSwiYmFzZTY0Iik7cmV0dXJuIG4ocil9fSx7Ii4uLy4uL3NuYXBzaG90L2hlbHBlcnMiOjkxNSwiYnVmZmVyLyI6MTExLCJpbWFnZS1zaXplIjo0NDR9XSwxMTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXQuY2RbMF0scz1vLnRyYWNlLGw9dC54YSxjPXQueWE7aWYoIShuLmluYm94KGUtby54MCxlLShvLngwK28udypzLmR4KSwwKT4wfHxuLmluYm94KHItby55MCxyLShvLnkwK28uaCpzLmR5KSwwKT4wKSl7dmFyIHUsZj1NYXRoLmZsb29yKChlLW8ueDApL3MuZHgpLGg9TWF0aC5mbG9vcihNYXRoLmFicyhyLW8ueTApL3MuZHkpO2lmKHMuX2hhc1o/dT1vLnpbaF1bZl06cy5faGFzU291cmNlJiYodT1zLl9jYW52YXMuZWwuZ2V0Q29udGV4dCgiMmQiKS5nZXRJbWFnZURhdGEoZixoLDEsMSkuZGF0YSksdSl7dmFyIHAsZD1vLmhpfHxzLmhvdmVyaW5mbztpZihkKXt2YXIgZz1kLnNwbGl0KCIrIik7LTEhPT1nLmluZGV4T2YoImFsbCIpJiYoZz1bImNvbG9yIl0pLC0xIT09Zy5pbmRleE9mKCJjb2xvciIpJiYocD0hMCl9dmFyIG0sdj1hLmNvbG9ybW9kZWxbcy5jb2xvcm1vZGVsXSx5PXYuY29sb3Jtb2RlbHx8cy5jb2xvcm1vZGVsLHg9eS5sZW5ndGgsYj1zLl9zY2FsZXIodSksXz12LnN1ZmZpeCx3PVtdOyhzLmhvdmVydGVtcGxhdGV8fHApJiYody5wdXNoKCJbIitbYlswXStfWzBdLGJbMV0rX1sxXSxiWzJdK19bMl1dLmpvaW4oIiwgIikpLDQ9PT14JiZ3LnB1c2goIiwgIitiWzNdK19bM10pLHcucHVzaCgiXSIpLHc9dy5qb2luKCIiKSx0LmV4dHJhVGV4dD15LnRvVXBwZXJDYXNlKCkrIjogIit3KSxBcnJheS5pc0FycmF5KHMuaG92ZXJ0ZXh0KSYmQXJyYXkuaXNBcnJheShzLmhvdmVydGV4dFtoXSk/bT1zLmhvdmVydGV4dFtoXVtmXTpBcnJheS5pc0FycmF5KHMudGV4dCkmJkFycmF5LmlzQXJyYXkocy50ZXh0W2hdKSYmKG09cy50ZXh0W2hdW2ZdKTt2YXIgVD1jLmMycChvLnkwKyhoKy41KSpzLmR5KSxrPW8ueDArKGYrLjUpKnMuZHgsTT1vLnkwKyhoKy41KSpzLmR5LEE9IlsiK3Uuc2xpY2UoMCxzLmNvbG9ybW9kZWwubGVuZ3RoKS5qb2luKCIsICIpKyJdIjtyZXR1cm5baS5leHRlbmRGbGF0KHQse2luZGV4OltoLGZdLHgwOmwuYzJwKG8ueDArZipzLmR4KSx4MTpsLmMycChvLngwKyhmKzEpKnMuZHgpLHkwOlQseTE6VCxjb2xvcjpiLHhWYWw6ayx4TGFiZWxWYWw6ayx5VmFsOk0seUxhYmVsVmFsOk0sekxhYmVsVmFsOkEsdGV4dDptLGhvdmVydGVtcGxhdGVMYWJlbHM6e3pMYWJlbDpBLGNvbG9yTGFiZWw6dywiY29sb3JbMF1MYWJlbCI6YlswXStfWzBdLCJjb2xvclsxXUxhYmVsIjpiWzFdK19bMV0sImNvbG9yWzJdTGFiZWwiOmJbMl0rX1syXSwiY29sb3JbM11MYWJlbCI6YlszXStfWzNdfX0pXX19fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2ODMsIi4uLy4uL2xpYiI6Nzc4LCIuL2NvbnN0YW50cyI6MTEwOH1dLDExMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImltYWdlIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiMmRNYXAiLCJub1NvcnRpbmdCeVZhbHVlIl0sYW5pbWF0YWJsZTohMSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi9hdHRyaWJ1dGVzIjoxMTA2LCIuL2NhbGMiOjExMDcsIi4vZGVmYXVsdHMiOjExMDksIi4vZXZlbnRfZGF0YSI6MTExMCwiLi9ob3ZlciI6MTExMiwiLi9wbG90IjoxMTE0LCIuL3N0eWxlIjoxMTE1fV0sMTExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLnN0clRyYW5zbGF0ZSxvPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIikscz10KCIuL2NvbnN0YW50cyIpLGw9aS5pc0lPUygpfHxpLmlzU2FmYXJpKCl8fGkuaXNJRSgpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXt2YXIgdT1lLnhheGlzLGY9ZS55YXhpcyxoPSEobHx8dC5fY29udGV4dC5fZXhwb3J0ZWRQbG90KTtpLm1ha2VUcmFjZUdyb3VwcyhjLHIsImltIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbD1lWzBdLGM9bC50cmFjZSxwPWgmJiFjLl9oYXNaJiZjLl9oYXNTb3VyY2UmJiJsaW5lYXIiPT09dS50eXBlJiYibGluZWFyIj09PWYudHlwZTtjLl9mYXN0SW1hZ2U9cDt2YXIgZCxnLG0sdix5LHgsYj1sLnosXz1sLngwLHc9bC55MCxUPWwudyxrPWwuaCxNPWMuZHgsQT1jLmR5O2Zvcih4PTA7dm9pZCAwPT09ZCYmeDxUOylkPXUuYzJwKF8reCpNKSx4Kys7Zm9yKHg9VDt2b2lkIDA9PT1nJiZ4PjA7KWc9dS5jMnAoXyt4Kk0pLHgtLTtmb3IoeD0wO3ZvaWQgMD09PXYmJng8azspdj1mLmMycCh3K3gqQSkseCsrO2Zvcih4PWs7dm9pZCAwPT09eSYmeD4wOyl5PWYuYzJwKHcreCpBKSx4LS07aWYoZzxkJiYobT1nLGc9ZCxkPW0pLHk8diYmKG09dix2PXkseT1tKSwhcCl7ZD1NYXRoLm1heCgtLjUqdS5fbGVuZ3RoLGQpLGc9TWF0aC5taW4oMS41KnUuX2xlbmd0aCxnKSx2PU1hdGgubWF4KC0uNSpmLl9sZW5ndGgsdikseT1NYXRoLm1pbigxLjUqZi5fbGVuZ3RoLHkpfXZhciBTPU1hdGgucm91bmQoZy1kKSxFPU1hdGgucm91bmQoeS12KTtpZihTPD0wfHxFPD0wKXtyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKFtdKS5leGl0KCkucmVtb3ZlKCl9ZWxzZXt2YXIgQz1yLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKFtlXSk7Qy5lbnRlcigpLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSxDLmV4aXQoKS5yZW1vdmUoKTt2YXIgTD0iaW1hZ2UtcmVuZGVyaW5nOiBvcHRpbWl6ZVNwZWVkOyBpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7IGltYWdlLXJlbmRlcmluZzogLW8tY3Jpc3AtZWRnZXM7IGltYWdlLXJlbmRlcmluZzogLXdlYmtpdC1vcHRpbWl6ZS1jb250cmFzdDsgaW1hZ2UtcmVuZGVyaW5nOiBvcHRpbWl6ZS1jb250cmFzdDsgaW1hZ2UtcmVuZGVyaW5nOiBjcmlzcC1lZGdlczsgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7IjtpZihwKXt2YXIgST1pLnNpbXBsZU1hcCh1LnJhbmdlLHUucjJsKSxQPWkuc2ltcGxlTWFwKGYucmFuZ2UsZi5yMmwpLHo9SVsxXTxJWzBdLE89UFsxXT5QWzBdO2lmKHp8fE8pe3ZhciBEPWQrUy8yLFI9ditFLzI7TCs9InRyYW5zZm9ybToiK2EoRCsicHgiLFIrInB4IikrInNjYWxlKCIrKHo/LTE6MSkrIiwiKyhPPy0xOjEpKyIpIithKC1EKyJweCIsLVIrInB4IikrIjsifX1DLmF0dHIoInN0eWxlIixMKTt2YXIgRj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7aWYoYy5faGFzWil0KCk7ZWxzZSBpZihjLl9oYXNTb3VyY2UpaWYoYy5fY2FudmFzJiZjLl9jYW52YXMuZWwud2lkdGg9PT1UJiZjLl9jYW52YXMuZWwuaGVpZ2h0PT09ayYmYy5fY2FudmFzLnNvdXJjZT09PWMuc291cmNlKXQoKTtlbHNle3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Uud2lkdGg9VCxlLmhlaWdodD1rO3ZhciByPWUuZ2V0Q29udGV4dCgiMmQiKTtjLl9pbWFnZT1jLl9pbWFnZXx8bmV3IEltYWdlO3ZhciBuPWMuX2ltYWdlO24ub25sb2FkPWZ1bmN0aW9uKCl7ci5kcmF3SW1hZ2UobiwwLDApLGMuX2NhbnZhcz17ZWw6ZSxzb3VyY2U6Yy5zb3VyY2V9LHQoKX0sbi5zZXRBdHRyaWJ1dGUoInNyYyIsYy5zb3VyY2UpfX0pKS50aGVuKChmdW5jdGlvbigpe3ZhciB0O2lmKGMuX2hhc1opdD1CKChmdW5jdGlvbih0LGUpe3JldHVybiBiW2VdW3RdfSkpLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ZWxzZSBpZihjLl9oYXNTb3VyY2UpaWYocCl0PWMuc291cmNlO2Vsc2V7dmFyIGU9Yy5fY2FudmFzLmVsLmdldENvbnRleHQoIjJkIikuZ2V0SW1hZ2VEYXRhKDAsMCxULGspLmRhdGE7dD1CKChmdW5jdGlvbih0LHIpe3ZhciBuPTQqKHIqVCt0KTtyZXR1cm5bZVtuXSxlW24rMV0sZVtuKzJdLGVbbiszXV19KSkudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1DLmF0dHIoeyJ4bGluazpocmVmIjp0LGhlaWdodDpFLHdpZHRoOlMseDpkLHk6dn0pfSkpO3QuX3Byb21pc2VzLnB1c2goRil9ZnVuY3Rpb24gQih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtlLndpZHRoPVMsZS5oZWlnaHQ9RTt2YXIgcixuPWUuZ2V0Q29udGV4dCgiMmQiKSxhPWZ1bmN0aW9uKHQpe3JldHVybiBpLmNvbnN0cmFpbihNYXRoLnJvdW5kKHUuYzJwKF8rdCpNKS1kKSwwLFMpfSxvPWZ1bmN0aW9uKHQpe3JldHVybiBpLmNvbnN0cmFpbihNYXRoLnJvdW5kKGYuYzJwKHcrdCpBKS12KSwwLEUpfSxoPXMuY29sb3Jtb2RlbFtjLmNvbG9ybW9kZWxdLHA9aC5jb2xvcm1vZGVsfHxjLmNvbG9ybW9kZWwsZz1oLmZtdDtmb3IoeD0wO3g8bC53O3grKyl7dmFyIG09YSh4KSx5PWEoeCsxKTtpZih5IT09bSYmIWlzTmFOKHkpJiYhaXNOYU4obSkpZm9yKHZhciBiPTA7YjxsLmg7YisrKXt2YXIgVD1vKGIpLGs9byhiKzEpO2s9PT1UfHxpc05hTihrKXx8aXNOYU4oVCl8fCF0KHgsYil8fChyPWMuX3NjYWxlcih0KHgsYikpLG4uZmlsbFN0eWxlPXI/cCsiKCIrZyhyKS5qb2luKCIsIikrIikiOiJyZ2JhKDAsMCwwLDApIixuLmZpbGxSZWN0KG0sVCx5LW0say1UKSl9fXJldHVybiBlfX0pKX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjc1NCwiLi4vLi4vbGliIjo3NzgsIi4vY29uc3RhbnRzIjoxMTA4LGQzOjE2OX1dLDExMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuaW0gaW1hZ2UiKS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSl9fSx7ZDM6MTY5fV0sMTExNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmREZWVwLGE9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLG89dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxmPXQoIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyIpLGg9KHQoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuRk9STUFUX0xJTkssbyh7ZWRpdFR5cGU6InBsb3QiLGNvbG9yRWRpdFR5cGU6InBsb3QifSkpLHA9e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6cy5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sdGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sZD17dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxnPXUoInN0ZXAiLGkoe30scCx7cmFuZ2U6ZH0pKTtlLmV4cG9ydHM9e21vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJudW1iZXIiLCJkZWx0YSIsImdhdWdlIl0sZGZsdDoibnVtYmVyIn0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjpsKHtuYW1lOiJpbmRpY2F0b3IiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sYWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHt9LGgse30pLGVkaXRUeXBlOiJwbG90In0sbnVtYmVyOnt2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHt9LGgse30pLHByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGRlbHRhOntyZWZlcmVuY2U6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSxwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0sZGZsdDoiYm90dG9tIixlZGl0VHlwZToicGxvdCJ9LHJlbGF0aXZlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCIsZGZsdDohMX0sdmFsdWVmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSxpbmNyZWFzaW5nOntzeW1ib2w6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDpmLklOQ1JFQVNJTkcuU1lNQk9MLGVkaXRUeXBlOiJwbG90In0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmYuSU5DUkVBU0lORy5DT0xPUixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZGVjcmVhc2luZzp7c3ltYm9sOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6Zi5ERUNSRUFTSU5HLlNZTUJPTCxlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpmLkRFQ1JFQVNJTkcuQ09MT1IsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGZvbnQ6bih7fSxoLHt9KSxlZGl0VHlwZToiY2FsYyJ9LGdhdWdlOntzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsZWRpdFR5cGU6InBsb3QiLGRmbHQ6ImFuZ3VsYXIiLHZhbHVlczpbImFuZ3VsYXIiLCJidWxsZXQiXX0sYmFyOmkoe30scCx7Y29sb3I6e2RmbHQ6ImdyZWVuIn19KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6cy5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGF4aXM6YSh7cmFuZ2U6ZCx2aXNpYmxlOm4oe30sYy52aXNpYmxlLHtkZmx0OiEwfSksdGlja21vZGU6Yy50aWNrbW9kZSxudGlja3M6Yy5udGlja3MsdGljazA6Yy50aWNrMCxkdGljazpjLmR0aWNrLHRpY2t2YWxzOmMudGlja3ZhbHMsdGlja3RleHQ6Yy50aWNrdGV4dCx0aWNrczpuKHt9LGMudGlja3Mse2RmbHQ6Im91dHNpZGUifSksdGlja2xlbjpjLnRpY2tsZW4sdGlja3dpZHRoOmMudGlja3dpZHRoLHRpY2tjb2xvcjpjLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpjLnNob3d0aWNrbGFiZWxzLHRpY2tmb250Om8oe30pLHRpY2thbmdsZTpjLnRpY2thbmdsZSx0aWNrZm9ybWF0OmMudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6Yy50aWNrZm9ybWF0c3RvcHMsdGlja3ByZWZpeDpjLnRpY2twcmVmaXgsc2hvd3RpY2twcmVmaXg6Yy5zaG93dGlja3ByZWZpeCx0aWNrc3VmZml4OmMudGlja3N1ZmZpeCxzaG93dGlja3N1ZmZpeDpjLnNob3d0aWNrc3VmZml4LHNlcGFyYXRldGhvdXNhbmRzOmMuc2VwYXJhdGV0aG91c2FuZHMsZXhwb25lbnRmb3JtYXQ6Yy5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDpjLm1pbmV4cG9uZW50LHNob3dleHBvbmVudDpjLnNob3dleHBvbmVudCxlZGl0VHlwZToicGxvdCJ9LCJwbG90Iiksc3RlcHM6Zyx0aHJlc2hvbGQ6e2xpbmU6e2NvbG9yOm4oe30scC5saW5lLmNvbG9yLHt9KSx3aWR0aDpuKHt9LHAubGluZS53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6InBsb3QifSx0aGlja25lc3M6bih7fSxwLnRoaWNrbmVzcyx7ZGZsdDouODV9KSx2YWx1ZTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsZGZsdDohMX0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjY0MiwiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIjo3NDcsIi4uLy4uL2NvbnN0YW50cy9kb2NzIjo3NDgsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODEwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyLCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTZ9XSwxMTE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIik7ci5uYW1lPSJpbmRpY2F0b3IiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MX1dLDExMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj1lLnZhbHVlOyJudW1iZXIiIT10eXBlb2YgZS5fbGFzdFZhbHVlJiYoZS5fbGFzdFZhbHVlPWUudmFsdWUpO3ZhciBpPWUuX2xhc3RWYWx1ZSxhPWk7cmV0dXJuIGUuX2hhc0RlbHRhJiYibnVtYmVyIj09dHlwZW9mIGUuZGVsdGEucmVmZXJlbmNlJiYoYT1lLmRlbHRhLnJlZmVyZW5jZSksclswXT17eTpuLGxhc3RZOmksZGVsdGE6bi1hLHJlbGF0aXZlRGVsdGE6KG4tYSkvYX0scn19fSx7fV0sMTExOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2RlZmF1bHROdW1iZXJGb250U2l6ZTo4MCxidWxsZXROdW1iZXJEb21haW5TaXplOi4yNSxidWxsZXRQYWRkaW5nOi4wMjUsaW5uZXJSYWRpdXM6Ljc1LHZhbHVlVGhpY2tuZXNzOi41LHRpdGxlUGFkZGluZzo1LGhvcml6b250YWxQYWRkaW5nOjEwfX0se31dLDExMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLG89dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHM9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD10KCIuL2NvbnN0YW50cy5qcyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIik7ZnVuY3Rpb24gaCh0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkuZ2F1Z2Uuc3RlcHMscixhKX1yKCJjb2xvciIpLHIoImxpbmUuY29sb3IiKSxyKCJsaW5lLndpZHRoIikscigicmFuZ2UiKSxyKCJ0aGlja25lc3MiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKGUscCxkKSxkKCJtb2RlIiksZS5faGFzTnVtYmVyPS0xIT09ZS5tb2RlLmluZGV4T2YoIm51bWJlciIpLGUuX2hhc0RlbHRhPS0xIT09ZS5tb2RlLmluZGV4T2YoImRlbHRhIiksZS5faGFzR2F1Z2U9LTEhPT1lLm1vZGUuaW5kZXhPZigiZ2F1Z2UiKTt2YXIgZz1kKCJ2YWx1ZSIpO2UuX3JhbmdlPVswLCJudW1iZXIiPT10eXBlb2YgZz8xLjUqZzoxXTt2YXIgbSx2LHkseCxiLF8sdz1uZXcgQXJyYXkoMik7ZnVuY3Rpb24gVCh0LGUpe3JldHVybiBuLmNvZXJjZSh5LHgsaS5nYXVnZSx0LGUpfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4gbi5jb2VyY2UoYixfLGkuZ2F1Z2UuYXhpcyx0LGUpfWlmKGUuX2hhc051bWJlciYmKGQoIm51bWJlci52YWx1ZWZvcm1hdCIpLGQoIm51bWJlci5mb250LmNvbG9yIixwLmZvbnQuY29sb3IpLGQoIm51bWJlci5mb250LmZhbWlseSIscC5mb250LmZhbWlseSksZCgibnVtYmVyLmZvbnQuc2l6ZSIpLHZvaWQgMD09PWUubnVtYmVyLmZvbnQuc2l6ZSYmKGUubnVtYmVyLmZvbnQuc2l6ZT1sLmRlZmF1bHROdW1iZXJGb250U2l6ZSx3WzBdPSEwKSxkKCJudW1iZXIucHJlZml4IiksZCgibnVtYmVyLnN1ZmZpeCIpLG09ZS5udW1iZXIuZm9udC5zaXplKSxlLl9oYXNEZWx0YSYmKGQoImRlbHRhLmZvbnQuY29sb3IiLHAuZm9udC5jb2xvciksZCgiZGVsdGEuZm9udC5mYW1pbHkiLHAuZm9udC5mYW1pbHkpLGQoImRlbHRhLmZvbnQuc2l6ZSIpLHZvaWQgMD09PWUuZGVsdGEuZm9udC5zaXplJiYoZS5kZWx0YS5mb250LnNpemU9KGUuX2hhc051bWJlcj8uNToxKSoobXx8bC5kZWZhdWx0TnVtYmVyRm9udFNpemUpLHdbMV09ITApLGQoImRlbHRhLnJlZmVyZW5jZSIsZS52YWx1ZSksZCgiZGVsdGEucmVsYXRpdmUiKSxkKCJkZWx0YS52YWx1ZWZvcm1hdCIsZS5kZWx0YS5yZWxhdGl2ZT8iMiUiOiIiKSxkKCJkZWx0YS5pbmNyZWFzaW5nLnN5bWJvbCIpLGQoImRlbHRhLmluY3JlYXNpbmcuY29sb3IiKSxkKCJkZWx0YS5kZWNyZWFzaW5nLnN5bWJvbCIpLGQoImRlbHRhLmRlY3JlYXNpbmcuY29sb3IiKSxkKCJkZWx0YS5wb3NpdGlvbiIpLHY9ZS5kZWx0YS5mb250LnNpemUpLGUuX3NjYWxlTnVtYmVycz0oIWUuX2hhc051bWJlcnx8d1swXSkmJighZS5faGFzRGVsdGF8fHdbMV0pfHwhMSxkKCJ0aXRsZS5mb250LmNvbG9yIixwLmZvbnQuY29sb3IpLGQoInRpdGxlLmZvbnQuZmFtaWx5IixwLmZvbnQuZmFtaWx5KSxkKCJ0aXRsZS5mb250LnNpemUiLC4yNSoobXx8dnx8bC5kZWZhdWx0TnVtYmVyRm9udFNpemUpKSxkKCJ0aXRsZS50ZXh0IiksZS5faGFzR2F1Z2Upeyh5PXQuZ2F1Z2UpfHwoeT17fSkseD1vLm5ld0NvbnRhaW5lcihlLCJnYXVnZSIpLFQoInNoYXBlIiksKGUuX2lzQnVsbGV0PSJidWxsZXQiPT09ZS5nYXVnZS5zaGFwZSl8fGQoInRpdGxlLmFsaWduIiwiY2VudGVyIiksKGUuX2lzQW5ndWxhcj0iYW5ndWxhciI9PT1lLmdhdWdlLnNoYXBlKXx8ZCgiYWxpZ24iLCJjZW50ZXIiKSxUKCJiZ2NvbG9yIixwLnBhcGVyX2JnY29sb3IpLFQoImJvcmRlcndpZHRoIiksVCgiYm9yZGVyY29sb3IiKSxUKCJiYXIuY29sb3IiKSxUKCJiYXIubGluZS5jb2xvciIpLFQoImJhci5saW5lLndpZHRoIiksVCgiYmFyLnRoaWNrbmVzcyIsbC52YWx1ZVRoaWNrbmVzcyooImJ1bGxldCI9PT1lLmdhdWdlLnNoYXBlPy41OjEpKSxzKHkseCx7bmFtZToic3RlcHMiLGhhbmRsZUl0ZW1EZWZhdWx0czpofSksVCgidGhyZXNob2xkLnZhbHVlIiksVCgidGhyZXNob2xkLnRoaWNrbmVzcyIpLFQoInRocmVzaG9sZC5saW5lLndpZHRoIiksVCgidGhyZXNob2xkLmxpbmUuY29sb3IiKSxiPXt9LHkmJihiPXkuYXhpc3x8e30pLF89by5uZXdDb250YWluZXIoeCwiYXhpcyIpLGsoInZpc2libGUiKSxlLl9yYW5nZT1rKCJyYW5nZSIsZS5fcmFuZ2UpO3ZhciBNPXtvdXRlclRpY2tzOiEwfTtjKGIsXyxrLCJsaW5lYXIiKSxmKGIsXyxrLCJsaW5lYXIiLE0pLHUoYixfLGssTSl9ZWxzZSBkKCJ0aXRsZS5hbGlnbiIsImNlbnRlciIpLGQoImFsaWduIiwiY2VudGVyIiksZS5faXNBbmd1bGFyPWUuX2lzQnVsbGV0PSExO2UuX2xlbmd0aD1udWxsfX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNywiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo4NDksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjg1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjg1MSwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4vYXR0cmlidXRlcyI6MTExNiwiLi9jb25zdGFudHMuanMiOjExMTl9XSwxMTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImluZGljYXRvciIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsic3ZnIiwibm9PcGFjaXR5Iiwibm9Ib3ZlciJdLGFuaW1hdGFibGU6ITAsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY2FsYzp0KCIuL2NhbGMiKS5jYWxjLHBsb3Q6dCgiLi9wbG90IiksbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjoxMTE2LCIuL2Jhc2VfcGxvdCI6MTExNywiLi9jYWxjIjoxMTE4LCIuL2RlZmF1bHRzIjoxMTIwLCIuL3Bsb3QiOjExMjJ9XSwxMTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPWkuc3RyU2NhbGUsbz1pLnN0clRyYW5zbGF0ZSxzPWkucmFkMmRlZyxsPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5NSURfU0hJRlQsYz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSx1PXQoIi4vY29uc3RhbnRzIiksZj10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyIpLGQ9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzIiksZz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxtPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSx2PXtsZWZ0OiJzdGFydCIsY2VudGVyOiJtaWRkbGUiLHJpZ2h0OiJlbmQifSx5PXtsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjF9LHg9L1t5emFmcG5ceGI1bWtNR1RQRVpZXS87ZnVuY3Rpb24gYih0KXtyZXR1cm4gdCYmdC5kdXJhdGlvbj4wfWZ1bmN0aW9uIF8odCl7dC5lYWNoKChmdW5jdGlvbih0KXttLnN0cm9rZShuLnNlbGVjdCh0aGlzKSx0LmxpbmUuY29sb3IpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe20uZmlsbChuLnNlbGVjdCh0aGlzKSx0LmNvbG9yKX0pKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluZS53aWR0aH0pKX1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0LGE9aS5leHRlbmRGbGF0KHt0eXBlOiJsaW5lYXIiLHRpY2tzOiJvdXRzaWRlIixyYW5nZTpyLHNob3dsaW5lOiEwfSxlKSxvPXt0eXBlOiJsaW5lYXIiLF9pZDoieCIrZS5faWR9LHM9e2xldHRlcjoieCIsZm9udDpuLmZvbnQsbm9Ib3ZlcjohMCxub1RpY2tzb246ITB9O2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gaS5jb2VyY2UoYSxvLGcsdCxlKX1yZXR1cm4gcChhLG8sbCxzLG4pLGQoYSxvLGwscyksb31mdW5jdGlvbiBUKHQsZSxyKXtyZXR1cm5bTWF0aC5taW4oZS90LndpZHRoLHIvdC5oZWlnaHQpLHQsZSsieCIrcl19ZnVuY3Rpb24gayh0LGUscixpKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpLG89bi5zZWxlY3QoYSk7cmV0dXJuIG8udGV4dCh0KS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ0ZXh0LWFuY2hvciIscikuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIsdCkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyxpKS5jYWxsKGMuZm9udCxlKSxjLmJCb3goby5ub2RlKCkpfWZ1bmN0aW9uIE0odCxlLHIsbixhLG8pe3ZhciBzPSJfY2FjaGUiK2U7dFtzXSYmdFtzXS5rZXk9PT1hfHwodFtzXT17a2V5OmEsdmFsdWU6cn0pO3ZhciBsPWkuYWdnTnVtcyhvLG51bGwsW3Rbc10udmFsdWUsbl0sMik7cmV0dXJuIHRbc10udmFsdWU9bCxsfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixwKXt2YXIgZCxnPXQuX2Z1bGxMYXlvdXQ7YihyKSYmcCYmKGQ9cCgpKSxpLm1ha2VUcmFjZUdyb3VwcyhnLl9pbmRpY2F0b3JsYXllcixlLCJ0cmFjZSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBwLEEsUyxFLEMsTD1lWzBdLnRyYWNlLEk9bi5zZWxlY3QodGhpcyksUD1MLl9oYXNHYXVnZSx6PUwuX2lzQW5ndWxhcixPPUwuX2lzQnVsbGV0LEQ9TC5kb21haW4sUj17dzpnLl9zaXplLncqKEQueFsxXS1ELnhbMF0pLGg6Zy5fc2l6ZS5oKihELnlbMV0tRC55WzBdKSxsOmcuX3NpemUubCtnLl9zaXplLncqRC54WzBdLHI6Zy5fc2l6ZS5yK2cuX3NpemUudyooMS1ELnhbMV0pLHQ6Zy5fc2l6ZS50K2cuX3NpemUuaCooMS1ELnlbMV0pLGI6Zy5fc2l6ZS5iK2cuX3NpemUuaCpELnlbMF19LEY9Ui5sK1Iudy8yLEI9Ui50K1IuaC8yLE49TWF0aC5taW4oUi53LzIsUi5oKSxqPXUuaW5uZXJSYWRpdXMqTixVPUwuYWxpZ258fCJjZW50ZXIiO2lmKEE9QixQKXtpZih6JiYocD1GLEE9QitOLzIsUz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQodC53aWR0aC8yKih0LndpZHRoLzIpK3QuaGVpZ2h0KnQuaGVpZ2h0KTtyZXR1cm5bZS9yLHQsZV19KHQsLjkqail9KSxPKXt2YXIgVj11LmJ1bGxldFBhZGRpbmcscT0xLXUuYnVsbGV0TnVtYmVyRG9tYWluU2l6ZStWO3A9Ui5sKyhxKygxLXEpKnlbVV0pKlIudyxTPWZ1bmN0aW9uKHQpe3JldHVybiBUKHQsKHUuYnVsbGV0TnVtYmVyRG9tYWluU2l6ZS1WKSpSLncsUi5oKX19fWVsc2UgcD1SLmwreVtVXSpSLncsUz1mdW5jdGlvbih0KXtyZXR1cm4gVCh0LFIudyxSLmgpfTshZnVuY3Rpb24odCxlLHIscyl7dmFyIGwsdSxwLGQ9clswXS50cmFjZSxnPXMubnVtYmVyc1gsXz1zLm51bWJlcnNZLFQ9ZC5hbGlnbnx8ImNlbnRlciIsQT12W1RdLFM9cy50cmFuc2l0aW9uT3B0cyxFPXMub25Db21wbGV0ZSxDPWkuZW5zdXJlU2luZ2xlKGUsImciLCJudW1iZXJzIiksTD1bXTtkLl9oYXNOdW1iZXImJkwucHVzaCgibnVtYmVyIik7ZC5faGFzRGVsdGEmJihMLnB1c2goImRlbHRhIiksImxlZnQiPT09ZC5kZWx0YS5wb3NpdGlvbiYmTC5yZXZlcnNlKCkpO3ZhciBJPUMuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShMKTtmdW5jdGlvbiBQKGUscixuLGkpe2lmKCFlLm1hdGNoKCJzIil8fG4+PTA9PWk+PTB8fHIobikuc2xpY2UoLTEpLm1hdGNoKHgpfHxyKGkpLnNsaWNlKC0xKS5tYXRjaCh4KSlyZXR1cm4gcjt2YXIgYT1lLnNsaWNlKCkucmVwbGFjZSgicyIsImYiKS5yZXBsYWNlKC9cZCsvLChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VJbnQodCktMX0pKSxvPXcodCx7dGlja2Zvcm1hdDphfSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0KTwxP2gudGlja1RleHQobyx0KS50ZXh0OnIodCl9fUkuZW50ZXIoKS5hcHBlbmQoInRleHQiKSxJLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gQX0pKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoImR4IixudWxsKS5hdHRyKCJkeSIsbnVsbCksSS5leGl0KCkucmVtb3ZlKCk7dmFyIHosTz1kLm1vZGUrZC5hbGlnbjtkLl9oYXNEZWx0YSYmKHo9ZnVuY3Rpb24oKXt2YXIgZT13KHQse3RpY2tmb3JtYXQ6ZC5kZWx0YS52YWx1ZWZvcm1hdH0sZC5fcmFuZ2UpO2Uuc2V0U2NhbGUoKSxoLnByZXBUaWNrcyhlKTt2YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gaC50aWNrVGV4dChlLHQpLnRleHR9LGE9ZnVuY3Rpb24odCl7cmV0dXJuIGQuZGVsdGEucmVsYXRpdmU/dC5yZWxhdGl2ZURlbHRhOnQuZGVsdGF9LG89ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXR8fCJudW1iZXIiIT10eXBlb2YgdHx8aXNOYU4odCk/Ii0iOih0PjA/ZC5kZWx0YS5pbmNyZWFzaW5nLnN5bWJvbDpkLmRlbHRhLmRlY3JlYXNpbmcuc3ltYm9sKStlKHQpfSxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlbHRhPj0wP2QuZGVsdGEuaW5jcmVhc2luZy5jb2xvcjpkLmRlbHRhLmRlY3JlYXNpbmcuY29sb3J9O3ZvaWQgMD09PWQuX2RlbHRhTGFzdFZhbHVlJiYoZC5fZGVsdGFMYXN0VmFsdWU9YShyWzBdKSk7dmFyIGw9Qy5zZWxlY3QoInRleHQuZGVsdGEiKTtmdW5jdGlvbiBwKCl7bC50ZXh0KG8oYShyWzBdKSxpKSkuY2FsbChtLmZpbGwscyhyWzBdKSkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyx0KX1yZXR1cm4gbC5jYWxsKGMuZm9udCxkLmRlbHRhLmZvbnQpLmNhbGwobS5maWxsLHMoe2RlbHRhOmQuX2RlbHRhTGFzdFZhbHVlfSkpLGIoUyk/bC50cmFuc2l0aW9uKCkuZHVyYXRpb24oUy5kdXJhdGlvbikuZWFzZShTLmVhc2luZykudHdlZW4oInRleHQiLChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9YShyWzBdKSxsPWQuX2RlbHRhTGFzdFZhbHVlLGM9UChkLmRlbHRhLnZhbHVlZm9ybWF0LGksbCxlKSx1PW4uaW50ZXJwb2xhdGVOdW1iZXIobCxlKTtyZXR1cm4gZC5fZGVsdGFMYXN0VmFsdWU9ZSxmdW5jdGlvbihlKXt0LnRleHQobyh1KGUpLGMpKSx0LmNhbGwobS5maWxsLHMoe2RlbHRhOnUoZSl9KSl9fSkpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7cCgpLEUmJkUoKX0pKS5lYWNoKCJpbnRlcnJ1cHQiLChmdW5jdGlvbigpe3AoKSxFJiZFKCl9KSk6cCgpLHU9ayhvKGEoclswXSksaSksZC5kZWx0YS5mb250LEEsdCksbH0oKSxPKz1kLmRlbHRhLnBvc2l0aW9uK2QuZGVsdGEuZm9udC5zaXplK2QuZGVsdGEuZm9udC5mYW1pbHkrZC5kZWx0YS52YWx1ZWZvcm1hdCxPKz1kLmRlbHRhLmluY3JlYXNpbmcuc3ltYm9sK2QuZGVsdGEuZGVjcmVhc2luZy5zeW1ib2wscD11KTtkLl9oYXNOdW1iZXImJighZnVuY3Rpb24oKXt2YXIgZT13KHQse3RpY2tmb3JtYXQ6ZC5udW1iZXIudmFsdWVmb3JtYXR9LGQuX3JhbmdlKTtlLnNldFNjYWxlKCksaC5wcmVwVGlja3MoZSk7dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIGgudGlja1RleHQoZSx0KS50ZXh0fSxhPWQubnVtYmVyLnN1ZmZpeCxvPWQubnVtYmVyLnByZWZpeCxzPUMuc2VsZWN0KCJ0ZXh0Lm51bWJlciIpO2Z1bmN0aW9uIHUoKXt2YXIgZT0ibnVtYmVyIj09dHlwZW9mIHJbMF0ueT9vK2koclswXS55KSthOiItIjtzLnRleHQoZSkuY2FsbChjLmZvbnQsZC5udW1iZXIuZm9udCkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyx0KX1iKFMpP3MudHJhbnNpdGlvbigpLmR1cmF0aW9uKFMuZHVyYXRpb24pLmVhc2UoUy5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7dSgpLEUmJkUoKX0pKS5lYWNoKCJpbnRlcnJ1cHQiLChmdW5jdGlvbigpe3UoKSxFJiZFKCl9KSkuYXR0clR3ZWVuKCJ0ZXh0IiwoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPW4uaW50ZXJwb2xhdGVOdW1iZXIoclswXS5sYXN0WSxyWzBdLnkpO2QuX2xhc3RWYWx1ZT1yWzBdLnk7dmFyIHM9UChkLm51bWJlci52YWx1ZWZvcm1hdCxpLHJbMF0ubGFzdFksclswXS55KTtyZXR1cm4gZnVuY3Rpb24ocil7dC50ZXh0KG8rcyhlKHIpKSthKX19KSk6dSgpLGw9ayhvK2koclswXS55KSthLGQubnVtYmVyLmZvbnQsQSx0KX0oKSxPKz1kLm51bWJlci5mb250LnNpemUrZC5udW1iZXIuZm9udC5mYW1pbHkrZC5udW1iZXIudmFsdWVmb3JtYXQrZC5udW1iZXIuc3VmZml4K2QubnVtYmVyLnByZWZpeCxwPWwpO2lmKGQuX2hhc0RlbHRhJiZkLl9oYXNOdW1iZXIpe3ZhciBELFIsRj1bKGwubGVmdCtsLnJpZ2h0KS8yLChsLnRvcCtsLmJvdHRvbSkvMl0sQj1bKHUubGVmdCt1LnJpZ2h0KS8yLCh1LnRvcCt1LmJvdHRvbSkvMl0sTj0uNzUqZC5kZWx0YS5mb250LnNpemU7ImxlZnQiPT09ZC5kZWx0YS5wb3NpdGlvbiYmKEQ9TShkLCJkZWx0YVBvcyIsMCwtMSoobC53aWR0aCp5W2QuYWxpZ25dK3Uud2lkdGgqKDEteVtkLmFsaWduXSkrTiksTyxNYXRoLm1pbiksUj1GWzFdLUJbMV0scD17d2lkdGg6bC53aWR0aCt1LndpZHRoK04saGVpZ2h0Ok1hdGgubWF4KGwuaGVpZ2h0LHUuaGVpZ2h0KSxsZWZ0OnUubGVmdCtELHJpZ2h0OmwucmlnaHQsdG9wOk1hdGgubWluKGwudG9wLHUudG9wK1IpLGJvdHRvbTpNYXRoLm1heChsLmJvdHRvbSx1LmJvdHRvbStSKX0pLCJyaWdodCI9PT1kLmRlbHRhLnBvc2l0aW9uJiYoRD1NKGQsImRlbHRhUG9zIiwwLGwud2lkdGgqKDEteVtkLmFsaWduXSkrdS53aWR0aCp5W2QuYWxpZ25dK04sTyxNYXRoLm1heCksUj1GWzFdLUJbMV0scD17d2lkdGg6bC53aWR0aCt1LndpZHRoK04saGVpZ2h0Ok1hdGgubWF4KGwuaGVpZ2h0LHUuaGVpZ2h0KSxsZWZ0OmwubGVmdCxyaWdodDp1LnJpZ2h0K0QsdG9wOk1hdGgubWluKGwudG9wLHUudG9wK1IpLGJvdHRvbTpNYXRoLm1heChsLmJvdHRvbSx1LmJvdHRvbStSKX0pLCJib3R0b20iPT09ZC5kZWx0YS5wb3NpdGlvbiYmKEQ9bnVsbCxSPXUuaGVpZ2h0LHA9e3dpZHRoOk1hdGgubWF4KGwud2lkdGgsdS53aWR0aCksaGVpZ2h0OmwuaGVpZ2h0K3UuaGVpZ2h0LGxlZnQ6TWF0aC5taW4obC5sZWZ0LHUubGVmdCkscmlnaHQ6TWF0aC5tYXgobC5yaWdodCx1LnJpZ2h0KSx0b3A6bC5ib3R0b20tbC5oZWlnaHQsYm90dG9tOmwuYm90dG9tK3UuaGVpZ2h0fSksInRvcCI9PT1kLmRlbHRhLnBvc2l0aW9uJiYoRD1udWxsLFI9bC50b3AscD17d2lkdGg6TWF0aC5tYXgobC53aWR0aCx1LndpZHRoKSxoZWlnaHQ6bC5oZWlnaHQrdS5oZWlnaHQsbGVmdDpNYXRoLm1pbihsLmxlZnQsdS5sZWZ0KSxyaWdodDpNYXRoLm1heChsLnJpZ2h0LHUucmlnaHQpLHRvcDpsLmJvdHRvbS1sLmhlaWdodC11LmhlaWdodCxib3R0b206bC5ib3R0b219KSx6LmF0dHIoe2R4OkQsZHk6Un0pfShkLl9oYXNOdW1iZXJ8fGQuX2hhc0RlbHRhKSYmQy5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbigpe3ZhciB0PXMubnVtYmVyc1NjYWxlcihwKTtPKz10WzJdO3ZhciBlLHI9TShkLCJudW1iZXJzU2NhbGUiLDEsdFswXSxPLE1hdGgubWluKTtkLl9zY2FsZU51bWJlcnN8fChyPTEpLGU9ZC5faXNBbmd1bGFyP18tcipwLmJvdHRvbTpfLXIqKHAudG9wK3AuYm90dG9tKS8yLGQuX251bWJlcnNUb3A9cipwLnRvcCtlO3ZhciBuPXBbVF07ImNlbnRlciI9PT1UJiYobj0ocC5sZWZ0K3AucmlnaHQpLzIpO3ZhciBpPWctcipuO3JldHVybiBpPU0oZCwibnVtYmVyc1RyYW5zbGF0ZSIsMCxpLE8sTWF0aC5tYXgpLG8oaSxlKSthKHIpfSkpfSh0LEksZSx7bnVtYmVyc1g6cCxudW1iZXJzWTpBLG51bWJlcnNTY2FsZXI6Uyx0cmFuc2l0aW9uT3B0czpyLG9uQ29tcGxldGU6ZH0pLFAmJihFPXtyYW5nZTpMLmdhdWdlLmF4aXMucmFuZ2UsY29sb3I6TC5nYXVnZS5iZ2NvbG9yLGxpbmU6e2NvbG9yOkwuZ2F1Z2UuYm9yZGVyY29sb3Isd2lkdGg6MH0sdGhpY2tuZXNzOjF9LEM9e3JhbmdlOkwuZ2F1Z2UuYXhpcy5yYW5nZSxjb2xvcjoicmdiYSgwLCAwLCAwLCAwKSIsbGluZTp7Y29sb3I6TC5nYXVnZS5ib3JkZXJjb2xvcix3aWR0aDpMLmdhdWdlLmJvcmRlcndpZHRofSx0aGlja25lc3M6MX0pO3ZhciBIPUkuc2VsZWN0QWxsKCJnLmFuZ3VsYXIiKS5kYXRhKHo/ZTpbXSk7SC5leGl0KCkucmVtb3ZlKCk7dmFyIEc9SS5zZWxlY3RBbGwoImcuYW5ndWxhcmF4aXMiKS5kYXRhKHo/ZTpbXSk7Ry5leGl0KCkucmVtb3ZlKCkseiYmZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsYyx1LGYscD1yWzBdLnRyYWNlLGQ9aS5zaXplLGc9aS5yYWRpdXMsbT1pLmlubmVyUmFkaXVzLHY9aS5nYXVnZUJnLHk9aS5nYXVnZU91dGxpbmUseD1bZC5sK2Qudy8yLGQudCtkLmgvMitnLzJdLFQ9aS5nYXVnZSxrPWkubGF5ZXIsTT1pLnRyYW5zaXRpb25PcHRzLEE9aS5vbkNvbXBsZXRlLFM9TWF0aC5QSS8yO2Z1bmN0aW9uIEUodCl7dmFyIGU9cC5nYXVnZS5heGlzLnJhbmdlWzBdLHI9KHQtZSkvKHAuZ2F1Z2UuYXhpcy5yYW5nZVsxXS1lKSpNYXRoLlBJLVM7cmV0dXJuIHI8LVM/LVM6cj5TP1M6cn1mdW5jdGlvbiBDKHQpe3JldHVybiBuLnN2Zy5hcmMoKS5pbm5lclJhZGl1cygobStnKS8yLXQvMiooZy1tKSkub3V0ZXJSYWRpdXMoKG0rZykvMit0LzIqKGctbSkpLnN0YXJ0QW5nbGUoLVMpfWZ1bmN0aW9uIEwodCl7dC5hdHRyKCJkIiwoZnVuY3Rpb24odCl7cmV0dXJuIEModC50aGlja25lc3MpLnN0YXJ0QW5nbGUoRSh0LnJhbmdlWzBdKSkuZW5kQW5nbGUoRSh0LnJhbmdlWzFdKSkoKX0pKX1ULmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ndWxhciIsITApLFQuYXR0cigidHJhbnNmb3JtIixvKHhbMF0seFsxXSkpLGsuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbmd1bGFyYXhpcyIsITApLmNsYXNzZWQoImNyaXNwIiwhMCksay5zZWxlY3RBbGwoImcueGFuZ3VsYXJheGlzdGljayxwYXRoLHRleHQiKS5yZW1vdmUoKSwoYT13KHQscC5nYXVnZS5heGlzKSkudHlwZT0ibGluZWFyIixhLnJhbmdlPXAuZ2F1Z2UuYXhpcy5yYW5nZSxhLl9pZD0ieGFuZ3VsYXJheGlzIixhLnNldFNjYWxlKCk7dmFyIEk9ZnVuY3Rpb24odCl7cmV0dXJuKGEucmFuZ2VbMF0tdC54KS8oYS5yYW5nZVsxXS1hLnJhbmdlWzBdKSpNYXRoLlBJK01hdGguUEl9LFA9e30sej1oLm1ha2VMYWJlbEZucyhhLDApLmxhYmVsU3RhbmRvZmY7UC54Rm49ZnVuY3Rpb24odCl7dmFyIGU9SSh0KTtyZXR1cm4gTWF0aC5jb3MoZSkqen0sUC55Rm49ZnVuY3Rpb24odCl7dmFyIGU9SSh0KSxyPU1hdGguc2luKGUpPjA/LjI6MTtyZXR1cm4tTWF0aC5zaW4oZSkqKHordC5mb250U2l6ZSpyKStNYXRoLmFicyhNYXRoLmNvcyhlKSkqKHQuZm9udFNpemUqbCl9LFAuYW5jaG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9SSh0KSxyPU1hdGguY29zKGUpO3JldHVybiBNYXRoLmFicyhyKTwuMT8ibWlkZGxlIjpyPjA/InN0YXJ0IjoiZW5kIn0sUC5oZWlnaHRGbj1mdW5jdGlvbih0LGUscil7dmFyIG49SSh0KTtyZXR1cm4tLjUqKDErTWF0aC5zaW4obikpKnJ9O3ZhciBPPWZ1bmN0aW9uKHQpe3JldHVybiBvKHhbMF0rZypNYXRoLmNvcyh0KSx4WzFdLWcqTWF0aC5zaW4odCkpfTt1PWZ1bmN0aW9uKHQpe3JldHVybiBPKEkodCkpfTtpZihjPWguY2FsY1RpY2tzKGEpLGY9aC5nZXRUaWNrU2lnbnMoYSlbMl0sYS52aXNpYmxlKXtmPSJpbnNpZGUiPT09YS50aWNrcz8tMToxO3ZhciBEPShhLmxpbmV3aWR0aHx8MSkvMjtoLmRyYXdUaWNrcyh0LGEse3ZhbHM6YyxsYXllcjprLHBhdGg6Ik0iK2YqRCsiLDBoIitmKmEudGlja2xlbix0cmFuc0ZuOmZ1bmN0aW9uKHQpe3ZhciBlPUkodCk7cmV0dXJuIE8oZSkrInJvdGF0ZSgiKy1zKGUpKyIpIn19KSxoLmRyYXdMYWJlbHModCxhLHt2YWxzOmMsbGF5ZXI6ayx0cmFuc0ZuOnUsbGFiZWxGbnM6UH0pfXZhciBSPVt2XS5jb25jYXQocC5nYXVnZS5zdGVwcyksRj1ULnNlbGVjdEFsbCgiZy5iZy1hcmMiKS5kYXRhKFIpO0YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJiZy1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKSxGLnNlbGVjdCgicGF0aCIpLmNhbGwoTCkuY2FsbChfKSxGLmV4aXQoKS5yZW1vdmUoKTt2YXIgQj1DKHAuZ2F1Z2UuYmFyLnRoaWNrbmVzcyksTj1ULnNlbGVjdEFsbCgiZy52YWx1ZS1hcmMiKS5kYXRhKFtwLmdhdWdlLmJhcl0pO04uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ2YWx1ZS1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKTt2YXIgaj1OLnNlbGVjdCgicGF0aCIpO2IoTSk/KGoudHJhbnNpdGlvbigpLmR1cmF0aW9uKE0uZHVyYXRpb24pLmVhc2UoTS5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7QSYmQSgpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7QSYmQSgpfSkpLmF0dHJUd2VlbigiZCIsKFU9QixWPUUoclswXS5sYXN0WSkscT1FKHJbMF0ueSksZnVuY3Rpb24oKXt2YXIgdD1uLmludGVycG9sYXRlKFYscSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBVLmVuZEFuZ2xlKHQoZSkpKCl9fSkpLHAuX2xhc3RWYWx1ZT1yWzBdLnkpOmouYXR0cigiZCIsIm51bWJlciI9PXR5cGVvZiByWzBdLnk/Qi5lbmRBbmdsZShFKHJbMF0ueSkpOiJNMCwwWiIpO3ZhciBVLFYscTtqLmNhbGwoXyksTi5leGl0KCkucmVtb3ZlKCksUj1bXTt2YXIgSD1wLmdhdWdlLnRocmVzaG9sZC52YWx1ZTtIJiZSLnB1c2goe3JhbmdlOltILEhdLGNvbG9yOnAuZ2F1Z2UudGhyZXNob2xkLmNvbG9yLGxpbmU6e2NvbG9yOnAuZ2F1Z2UudGhyZXNob2xkLmxpbmUuY29sb3Isd2lkdGg6cC5nYXVnZS50aHJlc2hvbGQubGluZS53aWR0aH0sdGhpY2tuZXNzOnAuZ2F1Z2UudGhyZXNob2xkLnRoaWNrbmVzc30pO3ZhciBHPVQuc2VsZWN0QWxsKCJnLnRocmVzaG9sZC1hcmMiKS5kYXRhKFIpO0cuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0aHJlc2hvbGQtYXJjIiwhMCkuYXBwZW5kKCJwYXRoIiksRy5zZWxlY3QoInBhdGgiKS5jYWxsKEwpLmNhbGwoXyksRy5leGl0KCkucmVtb3ZlKCk7dmFyIFk9VC5zZWxlY3RBbGwoImcuZ2F1Z2Utb3V0bGluZSIpLmRhdGEoW3ldKTtZLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2F1Z2Utb3V0bGluZSIsITApLmFwcGVuZCgicGF0aCIpLFkuc2VsZWN0KCJwYXRoIikuY2FsbChMKS5jYWxsKF8pLFkuZXhpdCgpLnJlbW92ZSgpfSh0LDAsZSx7cmFkaXVzOk4saW5uZXJSYWRpdXM6aixnYXVnZTpILGxheWVyOkcsc2l6ZTpSLGdhdWdlQmc6RSxnYXVnZU91dGxpbmU6Qyx0cmFuc2l0aW9uT3B0czpyLG9uQ29tcGxldGU6ZH0pO3ZhciBZPUkuc2VsZWN0QWxsKCJnLmJ1bGxldCIpLmRhdGEoTz9lOltdKTtZLmV4aXQoKS5yZW1vdmUoKTt2YXIgVz1JLnNlbGVjdEFsbCgiZy5idWxsZXRheGlzIikuZGF0YShPP2U6W10pO1cuZXhpdCgpLnJlbW92ZSgpLE8mJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEscyxsLGMsZj1yWzBdLnRyYWNlLHA9bi5nYXVnZSxkPW4ubGF5ZXIsZz1uLmdhdWdlQmcsdj1uLmdhdWdlT3V0bGluZSx5PW4uc2l6ZSx4PWYuZG9tYWluLFQ9bi50cmFuc2l0aW9uT3B0cyxrPW4ub25Db21wbGV0ZTtwLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYnVsbGV0IiwhMCkscC5hdHRyKCJ0cmFuc2Zvcm0iLG8oeS5sLHkudCkpLGQuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidWxsZXRheGlzIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxkLnNlbGVjdEFsbCgiZy54YnVsbGV0YXhpc3RpY2sscGF0aCx0ZXh0IikucmVtb3ZlKCk7dmFyIE09eS5oLEE9Zi5nYXVnZS5iYXIudGhpY2tuZXNzKk0sUz14LnhbMF0sRT14LnhbMF0rKHgueFsxXS14LnhbMF0pKihmLl9oYXNOdW1iZXJ8fGYuX2hhc0RlbHRhPzEtdS5idWxsZXROdW1iZXJEb21haW5TaXplOjEpOyhpPXcodCxmLmdhdWdlLmF4aXMpKS5faWQ9InhidWxsZXRheGlzIixpLmRvbWFpbj1bUyxFXSxpLnNldFNjYWxlKCksYT1oLmNhbGNUaWNrcyhpKSxzPWgubWFrZVRyYW5zVGlja0ZuKGkpLGw9aC5nZXRUaWNrU2lnbnMoaSlbMl0sYz15LnQreS5oLGkudmlzaWJsZSYmKGguZHJhd1RpY2tzKHQsaSx7dmFsczoiaW5zaWRlIj09PWkudGlja3M/aC5jbGlwRW5kcyhpLGEpOmEsbGF5ZXI6ZCxwYXRoOmgubWFrZVRpY2tQYXRoKGksYyxsKSx0cmFuc0ZuOnN9KSxoLmRyYXdMYWJlbHModCxpLHt2YWxzOmEsbGF5ZXI6ZCx0cmFuc0ZuOnMsbGFiZWxGbnM6aC5tYWtlTGFiZWxGbnMoaSxjKX0pKTtmdW5jdGlvbiBDKHQpe3QuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxpLmMycCh0LnJhbmdlWzFdKS1pLmMycCh0LnJhbmdlWzBdKSl9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiBpLmMycCh0LnJhbmdlWzBdKX0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuLjUqKDEtdC50aGlja25lc3MpKk19KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGhpY2tuZXNzKk19KSl9dmFyIEw9W2ddLmNvbmNhdChmLmdhdWdlLnN0ZXBzKSxJPXAuc2VsZWN0QWxsKCJnLmJnLWJ1bGxldCIpLmRhdGEoTCk7SS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJnLWJ1bGxldCIsITApLmFwcGVuZCgicmVjdCIpLEkuc2VsZWN0KCJyZWN0IikuY2FsbChDKS5jYWxsKF8pLEkuZXhpdCgpLnJlbW92ZSgpO3ZhciBQPXAuc2VsZWN0QWxsKCJnLnZhbHVlLWJ1bGxldCIpLmRhdGEoW2YuZ2F1Z2UuYmFyXSk7UC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInZhbHVlLWJ1bGxldCIsITApLmFwcGVuZCgicmVjdCIpLFAuc2VsZWN0KCJyZWN0IikuYXR0cigiaGVpZ2h0IixBKS5hdHRyKCJ5IiwoTS1BKS8yKS5jYWxsKF8pLGIoVCk/UC5zZWxlY3QoInJlY3QiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oVC5kdXJhdGlvbikuZWFzZShULmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtrJiZrKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtrJiZrKCl9KSkuYXR0cigid2lkdGgiLE1hdGgubWF4KDAsaS5jMnAoTWF0aC5taW4oZi5nYXVnZS5heGlzLnJhbmdlWzFdLHJbMF0ueSkpKSk6UC5zZWxlY3QoInJlY3QiKS5hdHRyKCJ3aWR0aCIsIm51bWJlciI9PXR5cGVvZiByWzBdLnk/TWF0aC5tYXgoMCxpLmMycChNYXRoLm1pbihmLmdhdWdlLmF4aXMucmFuZ2VbMV0sclswXS55KSkpOjApO1AuZXhpdCgpLnJlbW92ZSgpO3ZhciB6PXIuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiBmLmdhdWdlLnRocmVzaG9sZC52YWx1ZX0pKSxPPXAuc2VsZWN0QWxsKCJnLnRocmVzaG9sZC1idWxsZXQiKS5kYXRhKHopO08uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0aHJlc2hvbGQtYnVsbGV0IiwhMCkuYXBwZW5kKCJsaW5lIiksTy5zZWxlY3QoImxpbmUiKS5hdHRyKCJ4MSIsaS5jMnAoZi5nYXVnZS50aHJlc2hvbGQudmFsdWUpKS5hdHRyKCJ4MiIsaS5jMnAoZi5nYXVnZS50aHJlc2hvbGQudmFsdWUpKS5hdHRyKCJ5MSIsKDEtZi5nYXVnZS50aHJlc2hvbGQudGhpY2tuZXNzKS8yKk0pLmF0dHIoInkyIiwoMS0oMS1mLmdhdWdlLnRocmVzaG9sZC50aGlja25lc3MpLzIpKk0pLmNhbGwobS5zdHJva2UsZi5nYXVnZS50aHJlc2hvbGQubGluZS5jb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZi5nYXVnZS50aHJlc2hvbGQubGluZS53aWR0aCksTy5leGl0KCkucmVtb3ZlKCk7dmFyIEQ9cC5zZWxlY3RBbGwoImcuZ2F1Z2Utb3V0bGluZSIpLmRhdGEoW3ZdKTtELmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2F1Z2Utb3V0bGluZSIsITApLmFwcGVuZCgicmVjdCIpLEQuc2VsZWN0KCJyZWN0IikuY2FsbChDKS5jYWxsKF8pLEQuZXhpdCgpLnJlbW92ZSgpfSh0LDAsZSx7Z2F1Z2U6WSxsYXllcjpXLHNpemU6UixnYXVnZUJnOkUsZ2F1Z2VPdXRsaW5lOkMsdHJhbnNpdGlvbk9wdHM6cixvbkNvbXBsZXRlOmR9KTt2YXIgWD1JLnNlbGVjdEFsbCgidGV4dC50aXRsZSIpLmRhdGEoZSk7WC5leGl0KCkucmVtb3ZlKCksWC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoInRpdGxlIiwhMCksWC5hdHRyKCJ0ZXh0LWFuY2hvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIE8/di5yaWdodDp2W0wudGl0bGUuYWxpZ25dfSkpLnRleHQoTC50aXRsZS50ZXh0KS5jYWxsKGMuZm9udCxMLnRpdGxlLmZvbnQpLmNhbGwoZi5jb252ZXJ0VG9Uc3BhbnMsdCksWC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbigpe3ZhciB0LGU9Ui5sK1Iudyp5W0wudGl0bGUuYWxpZ25dLHI9dS50aXRsZVBhZGRpbmcsbj1jLmJCb3goWC5ub2RlKCkpO2lmKFApe2lmKHopaWYoTC5nYXVnZS5heGlzLnZpc2libGUpdD1jLmJCb3goRy5ub2RlKCkpLnRvcC1yLW4uYm90dG9tO2Vsc2UgdD1SLnQrUi5oLzItTi8yLW4uYm90dG9tLXI7TyYmKHQ9QS0obi50b3Arbi5ib3R0b20pLzIsZT1SLmwtdS5idWxsZXRQYWRkaW5nKlIudyl9ZWxzZSB0PUwuX251bWJlcnNUb3Atci1uLmJvdHRvbTtyZXR1cm4gbyhlLHQpfSkpfSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjY1LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiOjgzMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0cyI6ODQ1LCIuL2NvbnN0YW50cyI6MTExOSxkMzoxNjl9XSwxMTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO3ZhciBjPWUuZXhwb3J0cz1sKHMoe3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHZhbHVlOnt2YWxUeXBlOiJkYXRhX2FycmF5In0saXNvbWluOnt2YWxUeXBlOiJudW1iZXIifSxpc29tYXg6e3ZhbFR5cGU6Im51bWJlciJ9LHN1cmZhY2U6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGNvdW50Ont2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjIsbWluOjF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxwYXR0ZXJuOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJBIiwiQiIsIkMiLCJEIiwiRSJdLGV4dHJhczpbImFsbCIsIm9kZCIsImV2ZW4iXSxkZmx0OiJhbGwifX0sc3BhY2VmcmFtZTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4xNX19LHNsaWNlczp7eDp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19LHk6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fSx6OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX19LGNhcHM6e3g6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0seTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fSx6OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19fSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMH0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMH0saG92ZXJ0ZW1wbGF0ZTppKCksc2hvd2xlZ2VuZDpzKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSxuKCIiLHtjb2xvckF0dHI6ImB2YWx1ZWAiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7b3BhY2l0eTphLm9wYWNpdHksbGlnaHRwb3NpdGlvbjphLmxpZ2h0cG9zaXRpb24sbGlnaHRpbmc6YS5saWdodGluZyxmbGF0c2hhZGluZzphLmZsYXRzaGFkaW5nLGNvbnRvdXI6YS5jb250b3VyLGhvdmVyaW5mbzpzKHt9LG8uaG92ZXJpbmZvKX0pLCJjYWxjIiwibmVzdGVkIik7Yy5mbGF0c2hhZGluZy5kZmx0PSEwLGMubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLmRmbHQ9MCxjLnguZWRpdFR5cGU9Yy55LmVkaXRUeXBlPWMuei5lZGl0VHlwZT1jLnZhbHVlLmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIixjLnRyYW5zZm9ybXM9dm9pZCAwfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODEwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjQsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjkwNiwiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiOjExMjh9XSwxMTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksaT10KCIuLi9zdHJlYW10dWJlL2NhbGMiKS5wcm9jZXNzR3JpZCxhPXQoIi4uL3N0cmVhbXR1YmUvY2FsYyIpLmZpbHRlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLl9sZW49TWF0aC5taW4oZS54Lmxlbmd0aCxlLnkubGVuZ3RoLGUuei5sZW5ndGgsZS52YWx1ZS5sZW5ndGgpLGUuX3g9YShlLngsZS5fbGVuKSxlLl95PWEoZS55LGUuX2xlbiksZS5fej1hKGUueixlLl9sZW4pLGUuX3ZhbHVlPWEoZS52YWx1ZSxlLl9sZW4pO3ZhciByPWkoZSk7ZS5fZ3JpZEZpbGw9ci5maWxsLGUuX1hzPXIuWHMsZS5fWXM9ci5ZcyxlLl9acz1yLlpzLGUuX2xlbj1yLmxlbjtmb3IodmFyIG89MS8wLHM9LTEvMCxsPTA7bDxlLl9sZW47bCsrKXt2YXIgYz1lLl92YWx1ZVtsXTtvPU1hdGgubWluKG8sYykscz1NYXRoLm1heChzLGMpfWUuX21pblZhbHVlcz1vLGUuX21heFZhbHVlcz1zLGUuX3ZNaW49dm9pZCAwPT09ZS5pc29taW58fG51bGw9PT1lLmlzb21pbj9vOmUuaXNvbWluLGUuX3ZNYXg9dm9pZCAwPT09ZS5pc29tYXh8fG51bGw9PT1lLmlzb21pbj9zOmUuaXNvbWF4LG4odCxlLHt2YWxzOltlLl92TWluLGUuX3ZNYXhdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjUxLCIuLi9zdHJlYW10dWJlL2NhbGMiOjEyOTV9XSwxMTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLW1lc2gzZCIpLGk9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxhPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmV4dHJhY3RPcHRzLHM9dCgiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIiksbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aC0xO3I+MDtyLS0pe3ZhciBuPU1hdGgubWluKGVbcl0sZVtyLTFdKSxpPU1hdGgubWF4KGVbcl0sZVtyLTFdKTtpZihpPm4mJm48dCYmdDw9aSlyZXR1cm57aWQ6cixkaXN0UmF0aW86KGktdCkvKGktbil9fXJldHVybntpZDowLGRpc3RSYXRpbzowfX07ZnVuY3Rpb24gYyh0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5tZXNoPWUsdGhpcy5uYW1lPSIiLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9ITF9dmFyIHU9Yy5wcm90b3R5cGU7dS5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmRhdGEuaW5kZXgscj10aGlzLmRhdGEuX21lc2hYW2VdLG49dGhpcy5kYXRhLl9tZXNoWVtlXSxpPXRoaXMuZGF0YS5fbWVzaFpbZV0sYT10aGlzLmRhdGEuX1lzLmxlbmd0aCxvPXRoaXMuZGF0YS5fWnMubGVuZ3RoLHM9bChyLHRoaXMuZGF0YS5fWHMpLmlkLGM9bChuLHRoaXMuZGF0YS5fWXMpLmlkLHU9bChpLHRoaXMuZGF0YS5fWnMpLmlkLGY9dC5pbmRleD11K28qYytvKmEqczt0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLl9tZXNoWFtmXSx0aGlzLmRhdGEuX21lc2hZW2ZdLHRoaXMuZGF0YS5fbWVzaFpbZl0sdGhpcy5kYXRhLl92YWx1ZVtmXV07dmFyIGg9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkoaCkmJnZvaWQgMCE9PWhbZl0/dC50ZXh0TGFiZWw9aFtmXTpoJiYodC50ZXh0TGFiZWw9aCksITB9fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7ZnVuY3Rpb24gbih0LGUscixuKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmQybChlLDAsbikqcn0pKX10aGlzLmRhdGE9aCh0KTt2YXIgbD17cG9zaXRpb25zOnMobihyLnhheGlzLHQuX21lc2hYLGUuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxuKHIueWF4aXMsdC5fbWVzaFksZS5kYXRhU2NhbGVbMV0sdC55Y2FsZW5kYXIpLG4oci56YXhpcyx0Ll9tZXNoWixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpLGNlbGxzOnModC5fbWVzaEksdC5fbWVzaEosdC5fbWVzaEspLGxpZ2h0UG9zaXRpb246W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSxhbWJpZW50OnQubGlnaHRpbmcuYW1iaWVudCxkaWZmdXNlOnQubGlnaHRpbmcuZGlmZnVzZSxzcGVjdWxhcjp0LmxpZ2h0aW5nLnNwZWN1bGFyLHJvdWdobmVzczp0LmxpZ2h0aW5nLnJvdWdobmVzcyxmcmVzbmVsOnQubGlnaHRpbmcuZnJlc25lbCx2ZXJ0ZXhOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uLGZhY2VOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbixvcGFjaXR5OnQub3BhY2l0eSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfSxjPW8odCk7bC52ZXJ0ZXhJbnRlbnNpdHk9dC5fbWVzaEludGVuc2l0eSxsLnZlcnRleEludGVuc2l0eUJvdW5kcz1bYy5taW4sYy5tYXhdLGwuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKGwpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfTt2YXIgZj1bInh5eiIsInh6eSIsInl4eiIsInl6eCIsInp4eSIsInp5eCJdO2Z1bmN0aW9uIGgodCl7dC5fbWVzaEk9W10sdC5fbWVzaEo9W10sdC5fbWVzaEs9W107dmFyIGUscixuLGksYSxvLHMsYz10LnN1cmZhY2Uuc2hvdyx1PXQuc3BhY2VmcmFtZS5zaG93LGg9dC5zdXJmYWNlLmZpbGwscD10LnNwYWNlZnJhbWUuZmlsbCxkPSExLGc9ITEsbT0wLHY9dC5fWHMseT10Ll9Zcyx4PXQuX1pzLGI9di5sZW5ndGgsXz15Lmxlbmd0aCx3PXgubGVuZ3RoLFQ9Zi5pbmRleE9mKHQuX2dyaWRGaWxsLnJlcGxhY2UoLy0vZywiIikucmVwbGFjZSgvXCsvZywiIikpLGs9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChUKXtjYXNlIDU6cmV0dXJuIHIrdyplK3cqXyp0O2Nhc2UgNDpyZXR1cm4gcit3KnQrdypiKmU7Y2FzZSAzOnJldHVybiBlK18qcitfKncqdDtjYXNlIDI6cmV0dXJuIGUrXyp0K18qYipyO2Nhc2UgMTpyZXR1cm4gdCtiKnIrYip3KmU7ZGVmYXVsdDpyZXR1cm4gdCtiKmUrYipfKnJ9fSxNPXQuX21pblZhbHVlcyxBPXQuX21heFZhbHVlcyxTPXQuX3ZNaW4sRT10Ll92TWF4O2Z1bmN0aW9uIEModCxlLHMpe2Zvcih2YXIgbD1vLmxlbmd0aCxjPXI7YzxsO2MrKylpZih0PT09bltjXSYmZT09PWlbY10mJnM9PT1hW2NdKXJldHVybiBjO3JldHVybi0xfWZ1bmN0aW9uIEwoKXtyPWV9ZnVuY3Rpb24gSSgpe249W10saT1bXSxhPVtdLG89W10sZT0wLEwoKX1mdW5jdGlvbiBQKHQscixzLGwpe3JldHVybiBuLnB1c2godCksaS5wdXNoKHIpLGEucHVzaChzKSxvLnB1c2gobCksKytlLTF9ZnVuY3Rpb24geih0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyluW2ldPXRbaV0qKDEtcikrciplW2ldO3JldHVybiBufWZ1bmN0aW9uIE8odCl7cz10fWZ1bmN0aW9uIEQodCxlKXtyZXR1cm4iYWxsIj09PXR8fG51bGw9PT10fHx0LmluZGV4T2YoZSk+LTF9ZnVuY3Rpb24gUih0LGUpe3JldHVybiBudWxsPT09dD9lOnR9ZnVuY3Rpb24gRihlLHIsbil7TCgpO3ZhciBpLGEsbyxsPVtyXSxjPVtuXTtpZihzPj0xKWw9W3JdLGM9W25dO2Vsc2UgaWYocz4wKXt2YXIgdT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKW5baV09KHRbaV0rZVtpXStyW2ldKS8zO3JldHVybiBufShyLG4saSksbz1NYXRoLnNxcnQoMS1zKSxsPXooYSxyLG8pLGM9eihhLG4sbyksdT16KGEsaSxvKSxmPWVbMF0saD1lWzFdLHA9ZVsyXTtyZXR1cm57eHl6djpbW3IsbixjXSxbYyxsLHJdLFtuLGksdV0sW3UsYyxuXSxbaSxyLGxdLFtsLHUsaV1dLGFiYzpbW2YsaCwtMV0sWy0xLC0xLGZdLFtoLHAsLTFdLFstMSwtMSxoXSxbcCxmLC0xXSxbLTEsLTEscF1dfX0ocixuKTtsPXUueHl6dixjPXUuYWJjfWZvcih2YXIgZj0wO2Y8bC5sZW5ndGg7ZisrKXtyPWxbZl0sbj1jW2ZdO2Zvcih2YXIgaD1bXSxwPTA7cDwzO3ArKyl7dmFyIGQ9cltwXVswXSxnPXJbcF1bMV0sdj1yW3BdWzJdLHk9cltwXVszXSx4PW5bcF0+LTE/bltwXTpDKGQsZyx2KTtoW3BdPXg+LTE/eDpQKGQsZyx2LFIoZSx5KSl9aT1oWzBdLGE9aFsxXSxvPWhbMl0sdC5fbWVzaEkucHVzaChpKSx0Ll9tZXNoSi5wdXNoKGEpLHQuX21lc2hLLnB1c2gobyksKyttfX1mdW5jdGlvbiBCKHQsZSxyLG4pe3ZhciBpPXRbM107aTxyJiYoaT1yKSxpPm4mJihpPW4pO2Zvcih2YXIgYT0odFszXS1pKS8odFszXS1lWzNdKzFlLTkpLG89W10scz0wO3M8NDtzKyspb1tzXT0oMS1hKSp0W3NdK2EqZVtzXTtyZXR1cm4gb31mdW5jdGlvbiBOKHQsZSxyKXtyZXR1cm4gdD49ZSYmdDw9cn1mdW5jdGlvbiBqKHQpe3ZhciBlPS4wMDEqKEUtUyk7cmV0dXJuIHQ+PVMtZSYmdDw9RStlfWZ1bmN0aW9uIFUoZSl7Zm9yKHZhciByPVtdLG49MDtuPDQ7bisrKXt2YXIgaT1lW25dO3IucHVzaChbdC5feFtpXSx0Ll95W2ldLHQuX3pbaV0sdC5fdmFsdWVbaV1dKX1yZXR1cm4gcn1mdW5jdGlvbiBWKHQsZSxyLG4saSxhKXthfHwoYT0xKSxyPVstMSwtMSwtMV07dmFyIG89ITEscz1bTihlWzBdWzNdLG4saSksTihlWzFdWzNdLG4saSksTihlWzJdWzNdLG4saSldO2lmKCFzWzBdJiYhc1sxXSYmIXNbMl0pcmV0dXJuITE7dmFyIGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBqKGVbMF1bM10pJiZqKGVbMV1bM10pJiZqKGVbMl1bM10pPyhGKHQsZSxyKSwhMCk6YTwzJiZWKHQsZSxyLFMsRSwrK2EpfTtpZihzWzBdJiZzWzFdJiZzWzJdKXJldHVybiBsKHQsZSxyKXx8bzt2YXIgYz0hMTtyZXR1cm5bWzAsMSwyXSxbMiwwLDFdLFsxLDIsMF1dLmZvckVhY2goKGZ1bmN0aW9uKGEpe2lmKHNbYVswXV0mJnNbYVsxXV0mJiFzW2FbMl1dKXt2YXIgdT1lW2FbMF1dLGY9ZVthWzFdXSxoPWVbYVsyXV0scD1CKGgsdSxuLGkpLGQ9QihoLGYsbixpKTtvPWwodCxbZCxwLHVdLFstMSwtMSxyW2FbMF1dXSl8fG8sbz1sKHQsW3UsZixkXSxbclthWzBdXSxyW2FbMV1dLC0xXSl8fG8sYz0hMH19KSksY3x8W1swLDEsMl0sWzEsMiwwXSxbMiwwLDFdXS5mb3JFYWNoKChmdW5jdGlvbihhKXtpZihzW2FbMF1dJiYhc1thWzFdXSYmIXNbYVsyXV0pe3ZhciB1PWVbYVswXV0sZj1lW2FbMV1dLGg9ZVthWzJdXSxwPUIoZix1LG4saSksZD1CKGgsdSxuLGkpO289bCh0LFtkLHAsdV0sWy0xLC0xLHJbYVswXV1dKXx8byxjPSEwfX0pKSxvfWZ1bmN0aW9uIHEodCxlLHIsbil7dmFyIGk9ITEsYT1VKGUpLG89W04oYVswXVszXSxyLG4pLE4oYVsxXVszXSxyLG4pLE4oYVsyXVszXSxyLG4pLE4oYVszXVszXSxyLG4pXTtpZighKG9bMF18fG9bMV18fG9bMl18fG9bM10pKXJldHVybiBpO2lmKG9bMF0mJm9bMV0mJm9bMl0mJm9bM10pcmV0dXJuIGcmJihpPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbihuLGksYSl7Rih0LFtlW25dLGVbaV0sZVthXV0sW3Jbbl0scltpXSxyW2FdXSl9O24oMCwxLDIpLG4oMywwLDEpLG4oMiwzLDApLG4oMSwyLDMpfSh0LGEsZSl8fGkpLGk7dmFyIHM9ITE7cmV0dXJuW1swLDEsMiwzXSxbMywwLDEsMl0sWzIsMywwLDFdLFsxLDIsMywwXV0uZm9yRWFjaCgoZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmb1tsWzFdXSYmb1tsWzJdXSYmIW9bbFszXV0pe3ZhciBjPWFbbFswXV0sdT1hW2xbMV1dLGY9YVtsWzJdXSxoPWFbbFszXV07aWYoZylpPUYodCxbYyx1LGZdLFtlW2xbMF1dLGVbbFsxXV0sZVtsWzJdXV0pfHxpO2Vsc2V7dmFyIHA9QihoLGMscixuKSxkPUIoaCx1LHIsbiksbT1CKGgsZixyLG4pO2k9RihudWxsLFtwLGQsbV0sWy0xLC0xLC0xXSl8fGl9cz0hMH19KSkscz9pOihbWzAsMSwyLDNdLFsxLDIsMywwXSxbMiwzLDAsMV0sWzMsMCwxLDJdLFswLDIsMywxXSxbMSwzLDIsMF1dLmZvckVhY2goKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJm9bbFsxXV0mJiFvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9YVtsWzBdXSx1PWFbbFsxXV0sZj1hW2xbMl1dLGg9YVtsWzNdXSxwPUIoZixjLHIsbiksZD1CKGYsdSxyLG4pLG09QihoLHUscixuKSx2PUIoaCxjLHIsbik7Zz8oaT1GKHQsW2MsdixwXSxbZVtsWzBdXSwtMSwtMV0pfHxpLGk9Rih0LFt1LGQsbV0sW2VbbFsxXV0sLTEsLTFdKXx8aSk6aT1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24obixpLGEpe0YodCxbZVtuXSxlW2ldLGVbYV1dLFtyW25dLHJbaV0sclthXV0pfTtuKDAsMSwyKSxuKDIsMywwKX0obnVsbCxbcCxkLG0sdl0sWy0xLC0xLC0xLC0xXSl8fGkscz0hMH19KSksc3x8W1swLDEsMiwzXSxbMSwyLDMsMF0sWzIsMywwLDFdLFszLDAsMSwyXV0uZm9yRWFjaCgoZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmIW9bbFsxXV0mJiFvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9YVtsWzBdXSx1PWFbbFsxXV0sZj1hW2xbMl1dLGg9YVtsWzNdXSxwPUIodSxjLHIsbiksZD1CKGYsYyxyLG4pLG09QihoLGMscixuKTtnPyhpPUYodCxbYyxwLGRdLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1GKHQsW2MsZCxtXSxbZVtsWzBdXSwtMSwtMV0pfHxpLGk9Rih0LFtjLG0scF0sW2VbbFswXV0sLTEsLTFdKXx8aSk6aT1GKG51bGwsW3AsZCxtXSxbLTEsLTEsLTFdKXx8aSxzPSEwfX0pKSxpKX1mdW5jdGlvbiBIKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGY9ITE7cmV0dXJuIGQmJihEKHQsIkEiKSYmKGY9cShudWxsLFtlLHIsbixhXSxjLHUpfHxmKSxEKHQsIkIiKSYmKGY9cShudWxsLFtyLG4saSxsXSxjLHUpfHxmKSxEKHQsIkMiKSYmKGY9cShudWxsLFtyLGEsbyxsXSxjLHUpfHxmKSxEKHQsIkQiKSYmKGY9cShudWxsLFtuLGEscyxsXSxjLHUpfHxmKSxEKHQsIkUiKSYmKGY9cShudWxsLFtyLG4sYSxsXSxjLHUpfHxmKSksZyYmKGY9cSh0LFtyLG4sYSxsXSxjLHUpfHxmKSxmfWZ1bmN0aW9uIEcodCxlLHIsbixpLGEsbyxzKXtyZXR1cm5bITA9PT1zWzBdfHxWKHQsVShbZSxyLG5dKSxbZSxyLG5dLGEsbyksITA9PT1zWzFdfHxWKHQsVShbbixpLGVdKSxbbixpLGVdLGEsbyldfWZ1bmN0aW9uIFkodCxlLHIsbixpLGEsbyxzLGwpe3JldHVybiBzP0codCxlLHIsaSxuLGEsbyxsKTpHKHQscixpLG4sZSxhLG8sbCl9ZnVuY3Rpb24gVyh0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxmPSExLGg9ZnVuY3Rpb24oKXtmPVYodCxbcyxsLGNdLFstMSwtMSwtMV0saSxhKXx8ZixmPVYodCxbYyx1LHNdLFstMSwtMSwtMV0saSxhKXx8Zn0scD1vWzBdLGQ9b1sxXSxnPW9bMl07cmV0dXJuIHAmJihzPXooVShbayhlLHItMCxuLTApXSlbMF0sVShbayhlLTEsci0wLG4tMCldKVswXSxwKSxsPXooVShbayhlLHItMCxuLTEpXSlbMF0sVShbayhlLTEsci0wLG4tMSldKVswXSxwKSxjPXooVShbayhlLHItMSxuLTEpXSlbMF0sVShbayhlLTEsci0xLG4tMSldKVswXSxwKSx1PXooVShbayhlLHItMSxuLTApXSlbMF0sVShbayhlLTEsci0xLG4tMCldKVswXSxwKSxoKCkpLGQmJihzPXooVShbayhlLTAscixuLTApXSlbMF0sVShbayhlLTAsci0xLG4tMCldKVswXSxkKSxsPXooVShbayhlLTAscixuLTEpXSlbMF0sVShbayhlLTAsci0xLG4tMSldKVswXSxkKSxjPXooVShbayhlLTEscixuLTEpXSlbMF0sVShbayhlLTEsci0xLG4tMSldKVswXSxkKSx1PXooVShbayhlLTEscixuLTApXSlbMF0sVShbayhlLTEsci0xLG4tMCldKVswXSxkKSxoKCkpLGcmJihzPXooVShbayhlLTAsci0wLG4pXSlbMF0sVShbayhlLTAsci0wLG4tMSldKVswXSxnKSxsPXooVShbayhlLTAsci0xLG4pXSlbMF0sVShbayhlLTAsci0xLG4tMSldKVswXSxnKSxjPXooVShbayhlLTEsci0xLG4pXSlbMF0sVShbayhlLTEsci0xLG4tMSldKVswXSxnKSx1PXooVShbayhlLTEsci0wLG4pXSlbMF0sVShbayhlLTEsci0wLG4tMSldKVswXSxnKSxoKCkpLGZ9ZnVuY3Rpb24gWCh0LGUscixuLGksYSxvLHMsbCxjLHUsZil7dmFyIGg9dDtyZXR1cm4gZj8oZCYmImV2ZW4iPT09dCYmKGg9bnVsbCksSChoLGUscixuLGksYSxvLHMsbCxjLHUpKTooZCYmIm9kZCI9PT10JiYoaD1udWxsKSxIKGgsbCxzLG8sYSxpLG4scixlLGMsdSkpfWZ1bmN0aW9uIFoodCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7Yzx3O2MrKylmb3IodmFyIHU9MTt1PF87dSsrKWEucHVzaChZKHQsayhsLHUtMSxjLTEpLGsobCx1LTEsYyksayhsLHUsYy0xKSxrKGwsdSxjKSxyLG4sKGwrdStjKSUyLGkmJmlbb10/aVtvXTpbXSkpLG8rKztyZXR1cm4gYX1mdW5jdGlvbiBKKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8YjtjKyspZm9yKHZhciB1PTE7dTx3O3UrKylhLnB1c2goWSh0LGsoYy0xLGwsdS0xKSxrKGMsbCx1LTEpLGsoYy0xLGwsdSksayhjLGwsdSkscixuLChjK2wrdSklMixpJiZpW29dP2lbb106W10pKSxvKys7cmV0dXJuIGF9ZnVuY3Rpb24gSyh0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPF87YysrKWZvcih2YXIgdT0xO3U8Yjt1KyspYS5wdXNoKFkodCxrKHUtMSxjLTEsbCksayh1LTEsYyxsKSxrKHUsYy0xLGwpLGsodSxjLGwpLHIsbiwodStjK2wpJTIsaSYmaVtvXT9pW29dOltdKSksbysrO3JldHVybiBhfWZ1bmN0aW9uIFEodCxlLHIpe2Zvcih2YXIgbj0xO248dztuKyspZm9yKHZhciBpPTE7aTxfO2krKylmb3IodmFyIGE9MTthPGI7YSsrKVgodCxrKGEtMSxpLTEsbi0xKSxrKGEtMSxpLTEsbiksayhhLTEsaSxuLTEpLGsoYS0xLGksbiksayhhLGktMSxuLTEpLGsoYSxpLTEsbiksayhhLGksbi0xKSxrKGEsaSxuKSxlLHIsKGEraStuKSUyKX1mdW5jdGlvbiAkKHQsZSxyKXtkPSEwLFEodCxlLHIpLGQ9ITF9ZnVuY3Rpb24gdHQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PHc7dSsrKWZvcih2YXIgZj0xO2Y8XztmKyspby5wdXNoKFcodCxjLGYsdSxyLG4saVtsXSxhJiZhW3NdJiZhW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIGV0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTxiO3UrKylmb3IodmFyIGY9MTtmPHc7ZisrKW8ucHVzaChXKHQsdSxjLGYscixuLGlbbF0sYSYmYVtzXSYmYVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBydCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8Xzt1KyspZm9yKHZhciBmPTE7ZjxiO2YrKylvLnB1c2goVyh0LGYsdSxjLHIsbixpW2xdLGEmJmFbc10mJmFbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gbnQodCxlKXtmb3IodmFyIHI9W10sbj10O248ZTtuKyspci5wdXNoKG4pO3JldHVybiByfXJldHVybiBmdW5jdGlvbigpe2lmKEkoKSxmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8YjtlKyspZm9yKHZhciByPTA7cjxfO3IrKylmb3IodmFyIG49MDtuPHc7bisrKXt2YXIgaT1rKGUscixuKTtQKHQuX3hbaV0sdC5feVtpXSx0Ll96W2ldLHQuX3ZhbHVlW2ldKX19KCksdSYmcCYmKE8ocCksZz0hMCxRKG51bGwsUyxFKSxnPSExKSxjJiZoKXtPKGgpO2Zvcih2YXIgZT10LnN1cmZhY2UucGF0dGVybixyPXQuc3VyZmFjZS5jb3VudCxzPTA7czxyO3MrKyl7dmFyIGY9MT09PXI/LjU6cy8oci0xKSxkPSgxLWYpKlMrZipFLFQ9TWF0aC5hYnMoZC1NKT5NYXRoLmFicyhkLUEpP1tNLGRdOltkLEFdOyQoZSxUWzBdLFRbMV0pfX12YXIgQz1bW01hdGgubWluKFMsQSksTWF0aC5tYXgoUyxBKV0sW01hdGgubWluKE0sRSksTWF0aC5tYXgoTSxFKV1dO1sieCIsInkiLCJ6Il0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7Zm9yKHZhciByPVtdLG49MDtuPEMubGVuZ3RoO24rKyl7dmFyIGk9MCxhPUNbbl1bMF0sbz1DW25dWzFdLHM9dC5zbGljZXNbZV07aWYocy5zaG93JiZzLmZpbGwpe08ocy5maWxsKTt2YXIgYz1bXSx1PVtdLGY9W107aWYocy5sb2NhdGlvbnMubGVuZ3RoKWZvcih2YXIgaD0wO2g8cy5sb2NhdGlvbnMubGVuZ3RoO2grKyl7dmFyIHA9bChzLmxvY2F0aW9uc1toXSwieCI9PT1lP3Y6InkiPT09ZT95OngpOzA9PT1wLmRpc3RSYXRpbz9jLnB1c2gocC5pZCk6cC5pZD4wJiYodS5wdXNoKHAuaWQpLCJ4Ij09PWU/Zi5wdXNoKFtwLmRpc3RSYXRpbywwLDBdKToieSI9PT1lP2YucHVzaChbMCxwLmRpc3RSYXRpbywwXSk6Zi5wdXNoKFswLDAscC5kaXN0UmF0aW9dKSl9ZWxzZSBjPW50KDEsIngiPT09ZT9iLTE6InkiPT09ZT9fLTE6dy0xKTt1Lmxlbmd0aD4wJiYocltpXT0ieCI9PT1lP3R0KG51bGwsdSxhLG8sZixyW2ldKToieSI9PT1lP2V0KG51bGwsdSxhLG8sZixyW2ldKTpydChudWxsLHUsYSxvLGYscltpXSksaSsrKSxjLmxlbmd0aD4wJiYocltpXT0ieCI9PT1lP1oobnVsbCxjLGEsbyxyW2ldKToieSI9PT1lP0oobnVsbCxjLGEsbyxyW2ldKTpLKG51bGwsYyxhLG8scltpXSksaSsrKX12YXIgZD10LmNhcHNbZV07ZC5zaG93JiZkLmZpbGwmJihPKGQuZmlsbCkscltpXT0ieCI9PT1lP1oobnVsbCxbMCxiLTFdLGEsbyxyW2ldKToieSI9PT1lP0oobnVsbCxbMCxfLTFdLGEsbyxyW2ldKTpLKG51bGwsWzAsdy0xXSxhLG8scltpXSksaSsrKX19KSksMD09PW0mJkkoKSx0Ll9tZXNoWD1uLHQuX21lc2hZPWksdC5fbWVzaFo9YSx0Ll9tZXNoSW50ZW5zaXR5PW8sdC5fWHM9dix0Ll9Zcz15LHQuX1pzPXh9KCksdH1lLmV4cG9ydHM9e2ZpbmROZWFyZXN0T25BeGlzOmwsZ2VuZXJhdGVJc29NZXNoZXM6aCxjcmVhdGVJc29zdXJmYWNlVHJhY2U6ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyBjKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6Nzc0LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo4MDIsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODgxLCJnbC1tZXNoM2QiOjMwOX1dLDExMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTtmdW5jdGlvbiBzKHQsZSxyLG4sYSl7dmFyIHM9YSgiaXNvbWluIiksbD1hKCJpc29tYXgiKTtudWxsIT1sJiZudWxsIT1zJiZzPmwmJihlLmlzb21pbj1udWxsLGUuaXNvbWF4PW51bGwpO3ZhciBjPWEoIngiKSx1PWEoInkiKSxmPWEoInoiKSxoPWEoInZhbHVlIik7YyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZmJiZmLmxlbmd0aCYmaCYmaC5sZW5ndGg/KGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiLCJ6Il0sbiksWyJ4IiwieSIsInoiXS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT0iY2Fwcy4iK3Q7YShlKyIuc2hvdyIpJiZhKGUrIi5maWxsIik7dmFyIHI9InNsaWNlcy4iK3Q7YShyKyIuc2hvdyIpJiYoYShyKyIuZmlsbCIpLGEocisiLmxvY2F0aW9ucyIpKX0pKSxhKCJzcGFjZWZyYW1lLnNob3ciKSYmYSgic3BhY2VmcmFtZS5maWxsIiksYSgic3VyZmFjZS5zaG93IikmJihhKCJzdXJmYWNlLmNvdW50IiksYSgic3VyZmFjZS5maWxsIiksYSgic3VyZmFjZS5wYXR0ZXJuIikpLGEoImNvbnRvdXIuc2hvdyIpJiYoYSgiY29udG91ci5jb2xvciIpLGEoImNvbnRvdXIud2lkdGgiKSksWyJ0ZXh0IiwiaG92ZXJ0ZXh0IiwiaG92ZXJ0ZW1wbGF0ZSIsImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24iLCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24iLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJmbGF0c2hhZGluZyIsIm9wYWNpdHkiXS5mb3JFYWNoKChmdW5jdGlvbih0KXthKHQpfSkpLG8odCxlLG4sYSx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe3ModCxlLHIsaSwoZnVuY3Rpb24ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX0pKX0sc3VwcGx5SXNvRGVmYXVsdHM6c319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NTMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuL2F0dHJpYnV0ZXMiOjExMjN9XSwxMTI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY2FsYzp0KCIuL2NhbGMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxwbG90OnQoIi4vY29udmVydCIpLmNyZWF0ZUlzb3N1cmZhY2VUcmFjZSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaXNvc3VyZmFjZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjg3MCwiLi9hdHRyaWJ1dGVzIjoxMTIzLCIuL2NhbGMiOjExMjQsIi4vY29udmVydCI6MTEyNSwiLi9kZWZhdWx0cyI6MTEyNn1dLDExMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsYT10KCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxpOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sazp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmkoe2VkaXRUeXBlOiJjYWxjIn0pLGRlbGF1bmF5YXhpczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsieCIsInkiLCJ6Il0sZGZsdDoieiIsZWRpdFR5cGU6ImNhbGMifSxhbHBoYWh1bGw6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDotMSxlZGl0VHlwZToiY2FsYyJ9LGludGVuc2l0eTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxpbnRlbnNpdHltb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2ZXJ0ZXgiLCJjZWxsIl0sZGZsdDoidmVydGV4IixlZGl0VHlwZToiY2FsYyJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSx2ZXJ0ZXhjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxmYWNlY29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNmb3Jtczp2b2lkIDB9LG4oIiIse2NvbG9yQXR0cjoiYGludGVuc2l0eWAiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7b3BhY2l0eTphLm9wYWNpdHksZmxhdHNoYWRpbmc6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxjb250b3VyOntzaG93OnMoe30sYS5jb250b3Vycy54LnNob3cse30pLGNvbG9yOmEuY29udG91cnMueC5jb2xvcix3aWR0aDphLmNvbnRvdXJzLngud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxsaWdodHBvc2l0aW9uOnt4OnMoe30sYS5saWdodHBvc2l0aW9uLngse2RmbHQ6MWU1fSkseTpzKHt9LGEubGlnaHRwb3NpdGlvbi55LHtkZmx0OjFlNX0pLHo6cyh7fSxhLmxpZ2h0cG9zaXRpb24ueix7ZGZsdDowfSksZWRpdFR5cGU6ImNhbGMifSxsaWdodGluZzpzKHt2ZXJ0ZXhub3JtYWxzZXBzaWxvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjFlLTEyLGVkaXRUeXBlOiJjYWxjIn0sZmFjZW5vcm1hbHNlcHNpbG9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MWUtNixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sYS5saWdodGluZyksaG92ZXJpbmZvOnMoe30sby5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIn0pLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODI0LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDYsIi4uL3N1cmZhY2UvYXR0cmlidXRlcyI6MTMxMX1dLDExMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLmludGVuc2l0eSYmbih0LGUse3ZhbHM6ZS5pbnRlbnNpdHksY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2NTF9XSwxMTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLW1lc2gzZCIpLGk9dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxhPXQoImFscGhhLXNoYXBlIiksbz10KCJjb252ZXgtaHVsbCIpLHM9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxsPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmV4dHJhY3RPcHRzLHU9dCgiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIik7ZnVuY3Rpb24gZih0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5tZXNoPWUsdGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9IiNmZmYiLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9ITF9dmFyIGg9Zi5wcm90b3R5cGU7ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9W10scj10Lmxlbmd0aCxuPTA7bjxyO24rKyllW25dPWwodFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZCh0LGUscixuKXtmb3IodmFyIGk9W10sYT1lLmxlbmd0aCxvPTA7bzxhO28rKylpW29dPXQuZDJsKGVbb10sMCxuKSpyO3JldHVybiBpfWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPVtdLHI9dC5sZW5ndGgsbj0wO248cjtuKyspZVtuXT1NYXRoLnJvdW5kKHRbbl0pO3JldHVybiBlfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYodFtuXTw9LS41fHx0W25dPj1lLS41KXJldHVybiExO3JldHVybiEwfWguaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXg7dC5kYXRhLl9jZWxsQ2VudGVyP3QudHJhY2VDb29yZGluYXRlPXQuZGF0YS5kYXRhQ29vcmRpbmF0ZTp0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLnhbZV0sdGhpcy5kYXRhLnlbZV0sdGhpcy5kYXRhLnpbZV1dO3ZhciByPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KHIpJiZ2b2lkIDAhPT1yW2VdP3QudGV4dExhYmVsPXJbZV06ciYmKHQudGV4dExhYmVsPXIpLCEwfX0saC51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbFNjZW5lTGF5b3V0O3RoaXMuZGF0YT10O3ZhciBuLGY9dC54Lmxlbmd0aCxoPXUoZChyLnhheGlzLHQueCxlLmRhdGFTY2FsZVswXSx0LnhjYWxlbmRhciksZChyLnlheGlzLHQueSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksZChyLnpheGlzLHQueixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpO2lmKHQuaSYmdC5qJiZ0Lmspe2lmKHQuaS5sZW5ndGghPT10LmoubGVuZ3RofHx0LmoubGVuZ3RoIT09dC5rLmxlbmd0aHx8IW0odC5pLGYpfHwhbSh0LmosZil8fCFtKHQuayxmKSlyZXR1cm47bj11KGcodC5pKSxnKHQuaiksZyh0LmspKX1lbHNlIG49MD09PXQuYWxwaGFodWxsP28oaCk6dC5hbHBoYWh1bGw+MD9hKHQuYWxwaGFodWxsLGgpOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVsieCIsInkiLCJ6Il0uaW5kZXhPZih0KSxuPVtdLGE9ZS5sZW5ndGgsbz0wO288YTtvKyspbltvXT1bZVtvXVsocisxKSUzXSxlW29dWyhyKzIpJTNdXTtyZXR1cm4gaShuKX0odC5kZWxhdW5heWF4aXMsaCk7dmFyIHY9e3Bvc2l0aW9uczpoLGNlbGxzOm4sbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmwodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9O2lmKHQuaW50ZW5zaXR5KXt2YXIgeT1jKHQpO3RoaXMuY29sb3I9IiNmZmYiO3ZhciB4PXQuaW50ZW5zaXR5bW9kZTt2W3grIkludGVuc2l0eSJdPXQuaW50ZW5zaXR5LHZbeCsiSW50ZW5zaXR5Qm91bmRzIl09W3kubWluLHkubWF4XSx2LmNvbG9ybWFwPXModCl9ZWxzZSB0LnZlcnRleGNvbG9yPyh0aGlzLmNvbG9yPXQudmVydGV4Y29sb3JbMF0sdi52ZXJ0ZXhDb2xvcnM9cCh0LnZlcnRleGNvbG9yKSk6dC5mYWNlY29sb3I/KHRoaXMuY29sb3I9dC5mYWNlY29sb3JbMF0sdi5jZWxsQ29sb3JzPXAodC5mYWNlY29sb3IpKToodGhpcy5jb2xvcj10LmNvbG9yLHYubWVzaENvbG9yPWwodC5jb2xvcikpO3RoaXMubWVzaC51cGRhdGUodil9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bih7Z2w6cn0pLGE9bmV3IGYodCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTUsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjc3NCwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAyLCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjg4MSwiYWxwaGEtc2hhcGUiOjY5LCJjb252ZXgtaHVsbCI6MTM1LCJkZWxhdW5heS10cmlhbmd1bGF0ZSI6MTcxLCJnbC1tZXNoM2QiOjMwOX1dLDExMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsbyxyLG4pfWZ1bmN0aW9uIGModCl7dmFyIGU9dC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPWwodCk7cmV0dXJuIGUmJmkuaXNBcnJheU9yVHlwZWRBcnJheShlKT9lOm51bGx9KSk7cmV0dXJuIGUuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD09PWVbMF0ubGVuZ3RofSkpJiZlfWMoWyJ4IiwieSIsInoiXSk/KGMoWyJpIiwiaiIsImsiXSksKCFlLml8fGUuaiYmZS5rKSYmKCFlLmp8fGUuayYmZS5pKSYmKCFlLmt8fGUuaSYmZS5qKT8obi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxzKSxbImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24iLCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24iLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJmbGF0c2hhZGluZyIsImFscGhhaHVsbCIsImRlbGF1bmF5YXhpcyIsIm9wYWNpdHkiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtsKHQpfSkpLGwoImNvbnRvdXIuc2hvdyIpJiYobCgiY29udG91ci5jb2xvciIpLGwoImNvbnRvdXIud2lkdGgiKSksImludGVuc2l0eSJpbiB0PyhsKCJpbnRlbnNpdHkiKSxsKCJpbnRlbnNpdHltb2RlIiksYSh0LGUscyxsLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSk6KGUuc2hvd3NjYWxlPSExLCJmYWNlY29sb3IiaW4gdD9sKCJmYWNlY29sb3IiKToidmVydGV4Y29sb3IiaW4gdD9sKCJ2ZXJ0ZXhjb2xvciIpOmwoImNvbG9yIixyKSksbCgidGV4dCIpLGwoImhvdmVydGV4dCIpLGwoImhvdmVydGVtcGxhdGUiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjUzLCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi9hdHRyaWJ1dGVzIjoxMTI4fV0sMTEzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0scGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToibWVzaDNkIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6ODcwLCIuL2F0dHJpYnV0ZXMiOjExMjgsIi4vY2FsYyI6MTEyOSwiLi9jb252ZXJ0IjoxMTMwLCIuL2RlZmF1bHRzIjoxMTMxfV0sMTEzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0LGk9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyIpLGw9cy5JTkNSRUFTSU5HLkNPTE9SLGM9cy5ERUNSRUFTSU5HLkNPTE9SLHU9aS5saW5lO2Z1bmN0aW9uIGYodCl7cmV0dXJue2xpbmU6e2NvbG9yOm4oe30sdS5jb2xvcix7ZGZsdDp0fSksd2lkdGg6dS53aWR0aCxkYXNoOmEsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXt4cGVyaW9kOmkueHBlcmlvZCx4cGVyaW9kMDppLnhwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6aS54cGVyaW9kYWxpZ25tZW50LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sb3Blbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxoaWdoOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxvdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxjbG9zZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOnt3aWR0aDpuKHt9LHUud2lkdGgse30pLGRhc2g6bih7fSxhLHt9KSxlZGl0VHlwZToic3R5bGUifSxpbmNyZWFzaW5nOmYobCksZGVjcmVhc2luZzpmKGMpLHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRpY2t3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6LjUsZGZsdDouMyxlZGl0VHlwZToiY2FsYyJ9LGhvdmVybGFiZWw6bih7fSxvLmhvdmVybGFiZWwse3NwbGl0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJzdHlsZSJ9fSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2NjQsIi4uLy4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyI6Njc0LCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjc0NywiLi4vLi4vbGliIjo3NzgsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE4N31dLDExMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT1uLl8sYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBsKHQsZSxyLG4pe3JldHVybntvOnQsaDplLGw6cixjOm59fWZ1bmN0aW9uIGModCxlLHIsbyxsLGMpe2Zvcih2YXIgdT1sLm1ha2VDYWxjZGF0YShlLCJvcGVuIiksZj1sLm1ha2VDYWxjZGF0YShlLCJoaWdoIiksaD1sLm1ha2VDYWxjZGF0YShlLCJsb3ciKSxwPWwubWFrZUNhbGNkYXRhKGUsImNsb3NlIiksZD1BcnJheS5pc0FycmF5KGUudGV4dCksZz1BcnJheS5pc0FycmF5KGUuaG92ZXJ0ZXh0KSxtPSEwLHY9bnVsbCx5PSEhZS54cGVyaW9kYWxpZ25tZW50LHg9W10sYj0wO2I8by5sZW5ndGg7YisrKXt2YXIgXz1vW2JdLHc9dVtiXSxUPWZbYl0saz1oW2JdLE09cFtiXTtpZihfIT09cyYmdyE9PXMmJlQhPT1zJiZrIT09cyYmTSE9PXMpe009PT13P251bGwhPT12JiZNIT09diYmKG09TT52KTptPU0+dyx2PU07dmFyIEE9Yyh3LFQsayxNKTtBLnBvcz1fLEEueWM9KHcrTSkvMixBLmk9YixBLmRpcj1tPyJpbmNyZWFzaW5nIjoiZGVjcmVhc2luZyIsQS54PUEucG9zLEEueT1bayxUXSx5JiYoQS5vcmlnX3A9cltiXSksZCYmKEEudHg9ZS50ZXh0W2JdKSxnJiYoQS5odHg9ZS5ob3ZlcnRleHRbYl0pLHgucHVzaChBKX1lbHNlIHgucHVzaCh7cG9zOl8sZW1wdHk6ITB9KX1yZXR1cm4gZS5fZXh0cmVtZXNbbC5faWRdPWEuZmluZEV4dHJlbWVzKGwsbi5jb25jYXQoaCxmKSx7cGFkZGVkOiEwfSkseC5sZW5ndGgmJih4WzBdLnQ9e2xhYmVsczp7b3BlbjppKHQsIm9wZW46IikrIiAiLGhpZ2g6aSh0LCJoaWdoOiIpKyIgIixsb3c6aSh0LCJsb3c6IikrIiAiLGNsb3NlOmkodCwiY2xvc2U6IikrIiAifX0pLHh9ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YS5nZXRGcm9tSWQodCxlLnhheGlzKSxpPWEuZ2V0RnJvbUlkKHQsZS55YXhpcykscz1mdW5jdGlvbih0LGUscil7dmFyIGk9ci5fbWluRGlmZjtpZighaSl7dmFyIGEscz10Ll9mdWxsRGF0YSxsPVtdO2ZvcihpPTEvMCxhPTA7YTxzLmxlbmd0aDthKyspe3ZhciBjPXNbYV07aWYoIm9obGMiPT09Yy50eXBlJiYhMD09PWMudmlzaWJsZSYmYy54YXhpcz09PWUuX2lkKXtsLnB1c2goYyk7dmFyIHU9ZS5tYWtlQ2FsY2RhdGEoYywieCIpO2MuX29yaWdYPXU7dmFyIGY9byhyLGUsIngiLHUpO2MuX3hjYWxjPWY7dmFyIGg9bi5kaXN0aW5jdFZhbHMoZikubWluRGlmZjtoJiZpc0Zpbml0ZShoKSYmKGk9TWF0aC5taW4oaSxoKSl9fWZvcihpPT09MS8wJiYoaT0xKSxhPTA7YTxsLmxlbmd0aDthKyspbFthXS5fbWluRGlmZj1pfXJldHVybiBpKnIudGlja3dpZHRofSh0LHIsZSksdT1lLl9taW5EaWZmO2UuX21pbkRpZmY9bnVsbDt2YXIgZj1lLl9vcmlnWDtlLl9vcmlnWD1udWxsO3ZhciBoPWUuX3hjYWxjO2UuX3hjYWxjPW51bGw7dmFyIHA9Yyh0LGUsZixoLGksbCk7cmV0dXJuIGUuX2V4dHJlbWVzW3IuX2lkXT1hLmZpbmRFeHRyZW1lcyhyLGgse3ZwYWQ6dS8yfSkscC5sZW5ndGg/KG4uZXh0ZW5kRmxhdChwWzBdLnQse3dIb3Zlcjp1LzIsdGlja0xlbjpzfSkscCk6W3t0OntlbXB0eTohMH19XX0sY2FsY0NvbW1vbjpjfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo4MjUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjh9XSwxMTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9vaGxjX2RlZmF1bHRzIiksYT10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscixuKXtyKG4rIi5saW5lLmNvbG9yIikscihuKyIubGluZS53aWR0aCIsZS5saW5lLndpZHRoKSxyKG4rIi5saW5lLmRhc2giLGUubGluZS5kYXNoKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLGMsbCk/KGEodCxlLGwsYyx7eDohMH0pLGMoImxpbmUud2lkdGgiKSxjKCJsaW5lLmRhc2giKSxzKHQsZSxjLCJpbmNyZWFzaW5nIikscyh0LGUsYywiZGVjcmVhc2luZyIpLGMoInRleHQiKSxjKCJob3ZlcnRleHQiKSxjKCJ0aWNrd2lkdGgiKSxsLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbZS54YXhpc109ITApOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzgsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjoxMjA3LCIuL2F0dHJpYnV0ZXMiOjExMzMsIi4vb2hsY19kZWZhdWx0cyI6MTEzOH1dLDExMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vbGliIikuZmlsbFRleHQsbD10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxjPXtpbmNyZWFzaW5nOmwuSU5DUkVBU0lORy5TWU1CT0wsZGVjcmVhc2luZzpsLkRFQ1JFQVNJTkcuU1lNQk9MfTtmdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpLHMsbD10LmNkLGM9dC54YSx1PWxbMF0udHJhY2UsZj1sWzBdLnQsaD11LnR5cGUscD0ib2hsYyI9PT1oPyJsIjoibWluIixkPSJvaGxjIj09PWg/ImgiOiJtYXgiLGc9Zi5iUG9zfHwwLG09Zi5iZFBvc3x8Zi50aWNrTGVuLHY9Zi53SG92ZXIseT1NYXRoLm1pbigxLG0vTWF0aC5hYnMoYy5yMmMoYy5yYW5nZVsxXSktYy5yMmMoYy5yYW5nZVswXSkpKTtmdW5jdGlvbiB4KHQpe3ZhciByPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBvcytnLWV9KHQpO3JldHVybiBhLmluYm94KHItdixyK3YsaSl9ZnVuY3Rpb24gYih0KXt2YXIgZT10W3BdLG49dFtkXTtyZXR1cm4gZT09PW58fGEuaW5ib3goZS1yLG4tcixpKX1mdW5jdGlvbiBfKHQpe3JldHVybih4KHQpK2IodCkpLzJ9aT10Lm1heEhvdmVyRGlzdGFuY2UteSxzPXQubWF4U3Bpa2VEaXN0YW5jZS15O3ZhciB3PWEuZ2V0RGlzdGFuY2VGdW5jdGlvbihuLHgsYixfKTtpZihhLmdldENsb3Nlc3QobCx3LHQpLCExPT09dC5pbmRleClyZXR1cm4gbnVsbDt2YXIgVD1sW3QuaW5kZXhdO2lmKFQuZW1wdHkpcmV0dXJuIG51bGw7dmFyIGs9dVtULmRpcl0sTT1rLmxpbmUuY29sb3I7cmV0dXJuIG8ub3BhY2l0eShNKSYmay5saW5lLndpZHRoP3QuY29sb3I9TTp0LmNvbG9yPWsuZmlsbGNvbG9yLHQueDA9Yy5jMnAoVC5wb3MrZy1tLCEwKSx0LngxPWMuYzJwKFQucG9zK2crbSwhMCksdC54TGFiZWxWYWw9dm9pZCAwIT09VC5vcmlnX3A/VC5vcmlnX3A6VC5wb3MsdC5zcGlrZURpc3RhbmNlPV8oVCkqcy9pLHQueFNwaWtlPWMuYzJwKFQucG9zLCEwKSx0fWZ1bmN0aW9uIGYodCxlLHIsYSl7dmFyIG89dC5jZCxzPXQueWEsbD1vWzBdLnRyYWNlLGM9b1swXS50LGY9W10saD11KHQsZSxyLGEpO2lmKCFoKXJldHVybltdO3ZhciBwPW9baC5pbmRleF0uaGl8fGwuaG92ZXJpbmZvLGQ9cC5zcGxpdCgiKyIpO2lmKCEoImFsbCI9PT1wfHwtMSE9PWQuaW5kZXhPZigieSIpKSlyZXR1cm5bXTtmb3IodmFyIGc9WyJoaWdoIiwib3BlbiIsImNsb3NlIiwibG93Il0sbT17fSx2PTA7djxnLmxlbmd0aDt2Kyspe3ZhciB5LHg9Z1t2XSxiPWxbeF1baC5pbmRleF0sXz1zLmMycChiLCEwKTtiIGluIG0/KHk9bVtiXSkueUxhYmVsKz0iPGJyPiIrYy5sYWJlbHNbeF0rbi5ob3ZlckxhYmVsVGV4dChzLGIpOigoeT1pLmV4dGVuZEZsYXQoe30saCkpLnkwPXkueTE9Xyx5LnlMYWJlbFZhbD1iLHkueUxhYmVsPWMubGFiZWxzW3hdK24uaG92ZXJMYWJlbFRleHQocyxiKSx5Lm5hbWU9IiIsZi5wdXNoKHkpLG1bYl09eSl9cmV0dXJuIGZ9ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT10LmNkLG89dC55YSxsPWFbMF0udHJhY2UsZj1hWzBdLnQsaD11KHQsZSxyLGkpO2lmKCFoKXJldHVybltdO3ZhciBwPWFbaC5pbmRleF0sZD1oLmluZGV4PXAuaSxnPXAuZGlyO2Z1bmN0aW9uIG0odCl7cmV0dXJuIGYubGFiZWxzW3RdK24uaG92ZXJMYWJlbFRleHQobyxsW3RdW2RdKX12YXIgdj1wLmhpfHxsLmhvdmVyaW5mbyx5PXYuc3BsaXQoIisiKSx4PSJhbGwiPT09dixiPXh8fC0xIT09eS5pbmRleE9mKCJ5IiksXz14fHwtMSE9PXkuaW5kZXhPZigidGV4dCIpLHc9Yj9bbSgib3BlbiIpLG0oImhpZ2giKSxtKCJsb3ciKSxtKCJjbG9zZSIpKyIgICIrY1tnXV06W107cmV0dXJuIF8mJnMocCxsLHcpLGguZXh0cmFUZXh0PXcuam9pbigiPGJyPiIpLGgueTA9aC55MT1vLmMycChwLnljLCEwKSxbaF19ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdC5jZFswXS50cmFjZS5ob3ZlcmxhYmVsLnNwbGl0P2YodCxlLHIsbik6aCh0LGUscixuKX0saG92ZXJTcGxpdDpmLGhvdmVyT25Qb2ludHM6aH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2ODMsIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyI6NzQ3LCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOH1dLDExMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToib2hsYyIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsInNob3dMZWdlbmQiXSxtZXRhOnt9LGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0Iil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuL2F0dHJpYnV0ZXMiOjExMzMsIi4vY2FsYyI6MTEzNCwiLi9kZWZhdWx0cyI6MTEzNSwiLi9ob3ZlciI6MTEzNiwiLi9wbG90IjoxMTM5LCIuL3NlbGVjdCI6MTE0MCwiLi9zdHlsZSI6MTE0MX1dLDExMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yKCJ4Iikscz1yKCJvcGVuIiksbD1yKCJoaWdoIiksYz1yKCJsb3ciKSx1PXIoImNsb3NlIik7aWYocigiaG92ZXJsYWJlbC5zcGxpdCIpLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCJdLGEpLHMmJmwmJmMmJnUpe3ZhciBmPU1hdGgubWluKHMubGVuZ3RoLGwubGVuZ3RoLGMubGVuZ3RoLHUubGVuZ3RoKTtyZXR1cm4gbyYmKGY9TWF0aC5taW4oZixpLm1pblJvd0xlbmd0aChvKSkpLGUuX2xlbmd0aD1mLGZ9fX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcmVnaXN0cnkiOjkxMX1dLDExMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1lLnlheGlzLHM9ZS54YXhpcyxsPSEhcy5yYW5nZWJyZWFrcztpLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIG9obGMiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0sYT1yLnQ7aWYoITAhPT1yLnRyYWNlLnZpc2libGV8fGEuZW1wdHkpZS5yZW1vdmUoKTtlbHNle3ZhciBjPWEudGlja0xlbix1PWUuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShpLmlkZW50aXR5KTt1LmVudGVyKCkuYXBwZW5kKCJwYXRoIiksdS5leGl0KCkucmVtb3ZlKCksdS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7aWYodC5lbXB0eSlyZXR1cm4iTTAsMFoiO3ZhciBlPXMuYzJwKHQucG9zLWMsITApLHI9cy5jMnAodC5wb3MrYywhMCksbj1sPyhlK3IpLzI6cy5jMnAodC5wb3MsITApO3JldHVybiJNIitlKyIsIitvLmMycCh0Lm8sITApKyJIIituKyJNIituKyIsIitvLmMycCh0LmgsITApKyJWIitvLmMycCh0LmwsITApKyJNIityKyIsIitvLmMycCh0LmMsITApKyJIIitufSkpfX0pKX19LHsiLi4vLi4vbGliIjo3NzgsZDM6MTY5fV0sMTE0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuY2QsaT10LnhheGlzLGE9dC55YXhpcyxvPVtdLHM9blswXS50LmJQb3N8fDA7aWYoITE9PT1lKWZvcihyPTA7cjxuLmxlbmd0aDtyKyspbltyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGw9bltyXTtlLmNvbnRhaW5zKFtpLmMycChsLnBvcytzKSxhLmMycChsLnljKV0sbnVsbCxsLmksdCk/KG8ucHVzaCh7cG9pbnROdW1iZXI6bC5pLHg6aS5jMmQobC5wb3MpLHk6YS5jMmQobC55Yyl9KSxsLnNlbGVjdGVkPTEpOmwuc2VsZWN0ZWQ9MH1yZXR1cm4gb319LHt9XSwxMTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXJ8fG4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy5vaGxjbGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UiKTtvLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxvLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2U7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuZW1wdHkpe3ZhciByPWVbdC5kaXJdLmxpbmU7bi5zZWxlY3QodGhpcykuc3R5bGUoImZpbGwiLCJub25lIikuY2FsbChhLnN0cm9rZSxyLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsci5kYXNoLHIud2lkdGgpLnN0eWxlKCJvcGFjaXR5IixlLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KSl9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsZDM6MTY5fV0sMTE0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbD10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGM9bih7ZWRpdFR5cGU6ImNhbGMifSxvKCJsaW5lIix7ZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7c2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImhzcGxpbmUiXSxkZmx0OiJsaW5lYXIiLGVkaXRUeXBlOiJwbG90In0saG92ZXJ0ZW1wbGF0ZTpzKHtlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMX0se2tleXM6WyJjb3VudCIsInByb2JhYmlsaXR5Il19KX0pO2UuZXhwb3J0cz17ZG9tYWluOmwoe25hbWU6InBhcmNhdHMiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLGhvdmVyaW5mbzpuKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImNvdW50IiwicHJvYmFiaWxpdHkiXSxlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMX0pLGhvdmVyb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNhdGVnb3J5IiwiY29sb3IiLCJkaW1lbnNpb24iXSxkZmx0OiJjYXRlZ29yeSIsZWRpdFR5cGU6InBsb3QifSxob3ZlcnRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx7a2V5czpbImNvdW50IiwicHJvYmFiaWxpdHkiLCJjYXRlZ29yeSIsImNhdGVnb3J5Y291bnQiLCJjb2xvcmNvdW50IiwiYmFuZGNvbG9yY291bnQiXX0pLGFycmFuZ2VtZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwZXJwZW5kaWN1bGFyIiwiZnJlZWZvcm0iLCJmaXhlZCJdLGRmbHQ6InBlcnBlbmRpY3VsYXIiLGVkaXRUeXBlOiJwbG90In0sYnVuZGxlY29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sc29ydHBhdGhzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmb3J3YXJkIiwiYmFja3dhcmQiXSxkZmx0OiJmb3J3YXJkIixlZGl0VHlwZToicGxvdCJ9LGxhYmVsZm9udDphKHtlZGl0VHlwZToiY2FsYyJ9KSx0aWNrZm9udDphKHtlZGl0VHlwZToiY2FsYyJ9KSxkaW1lbnNpb25zOntfaXNMaW5rZWRUb0FycmF5OiJkaW1lbnNpb24iLGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRpY2t0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LGRpc3BsYXlpbmRleDp7dmFsVHlwZToiaW50ZWdlciIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyIsdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fSxsaW5lOmMsY291bnRzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sY3VzdG9tZGF0YTp2b2lkIDAsaG92ZXJsYWJlbDp2b2lkIDAsaWRzOnZvaWQgMCxsZWdlbmRncm91cDp2b2lkIDAsb3BhY2l0eTp2b2lkIDAsc2VsZWN0ZWRwb2ludHM6dm9pZCAwLHNob3dsZWdlbmQ6dm9pZCAwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjUwLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyNCwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDZ9XSwxMTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsaT10KCIuL3Bsb3QiKTtyLm5hbWU9InBhcmNhdHMiLHIucGxvdD1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQuY2FsY2RhdGEsInBhcmNhdHMiKTtpZihvLmxlbmd0aCl7dmFyIHM9b1swXTtpKHQscyxyLGEpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygicGFyY2F0cyIpLGE9ZS5faGFzJiZlLl9oYXMoInBhcmNhdHMiKTtpJiYhYSYmbi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIucGFyY2F0cyIpLnJlbW92ZSgpfX0seyIuLi8uLi9wbG90cy9nZXRfZGF0YSI6ODY1LCIuL3Bsb3QiOjExNDh9XSwxMTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxvPXQoIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiZmFzdC1pc251bWVyaWMiKTtmdW5jdGlvbiB1KHQsZSxyKXt0LnZhbHVlSW5kcy5wdXNoKGUpLHQuY291bnQrPXJ9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJue2NhdGVnb3J5SW5kczp0LGNvbG9yOmUscmF3Q29sb3I6cix2YWx1ZUluZHM6W10sY291bnQ6MH19ZnVuY3Rpb24gaCh0LGUscil7dC52YWx1ZUluZHMucHVzaChlKSx0LmNvdW50Kz1yfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWwuZmlsdGVyVmlzaWJsZShlLmRpbWVuc2lvbnMpO2lmKDA9PT1yLmxlbmd0aClyZXR1cm5bXTt2YXIgcCxkLGcsbT1yLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU7aWYoInRyYWNlIj09PXQuY2F0ZWdvcnlvcmRlcillPW51bGw7ZWxzZSBpZigiYXJyYXkiPT09dC5jYXRlZ29yeW9yZGVyKWU9dC5jYXRlZ29yeWFycmF5O2Vsc2V7ZT1vKHQudmFsdWVzKTtmb3IodmFyIHI9ITAsbj0wO248ZS5sZW5ndGg7bisrKWlmKCFjKGVbbl0pKXtyPSExO2JyZWFrfWUuc29ydChyP2wuc29ydGVyQXNjOnZvaWQgMCksImNhdGVnb3J5IGRlc2NlbmRpbmciPT09dC5jYXRlZ29yeW9yZGVyJiYoZT1lLnJldmVyc2UoKSl9cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ZT1udWxsPT1lP1tdOmUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKTt2YXIgcj17fSxuPXt9LGk9W107ZS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3JbdF09MCxuW3RdPWV9KSk7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvLHM9dFthXTt2b2lkIDA9PT1yW3NdPyhyW3NdPTEsbz1lLnB1c2gocyktMSxuW3NdPW8pOihyW3NdKyssbz1uW3NdKSxpLnB1c2gobyl9dmFyIGw9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiByW3RdfSkpO3JldHVybnt1bmlxdWVWYWx1ZXM6ZSx1bmlxdWVDb3VudHM6bCxpbmRzOml9fSh0LnZhbHVlcyxlKX0pKTtwPWwuaXNBcnJheU9yVHlwZWRBcnJheShlLmNvdW50cyk/ZS5jb3VudHM6W2UuY291bnRzXSxmdW5jdGlvbih0KXt2YXIgZTtpZihmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKHRbcl08MHx8dFtyXT49dC5sZW5ndGgpcmV0dXJuITE7aWYodm9pZCAwIT09ZVt0W3JdXSlyZXR1cm4hMTtlW3Rbcl1dPSEwfXJldHVybiEwfSh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheWluZGV4fSkpKSlmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uX2Rpc3BsYXlpbmRleD10W2VdLmRpc3BsYXlpbmRleDtlbHNlIGZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5fZGlzcGxheWluZGV4PWV9KHIpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXshZnVuY3Rpb24odCxlKXt0Ll9jYXRlZ29yeWFycmF5PWUudW5pcXVlVmFsdWVzLG51bGw9PT10LnRpY2t0ZXh0fHx2b2lkIDA9PT10LnRpY2t0ZXh0P3QuX3RpY2t0ZXh0PVtdOnQuX3RpY2t0ZXh0PXQudGlja3RleHQuc2xpY2UoKTtmb3IodmFyIHI9dC5fdGlja3RleHQubGVuZ3RoO3I8ZS51bmlxdWVWYWx1ZXMubGVuZ3RoO3IrKyl0Ll90aWNrdGV4dC5wdXNoKGUudW5pcXVlVmFsdWVzW3JdKX0odCxtW2VdKX0pKTt2YXIgdix5PWUubGluZTt5PyhpKGUsImxpbmUiKSYmYSh0LGUse3ZhbHM6ZS5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibGluZSIsY0xldHRlcjoiYyJ9KSx2PXMudHJ5Q29sb3JzY2FsZSh5KSk6dj1sLmlkZW50aXR5O3ZhciB4LGIsXyx3LFQsaz1yWzBdLnZhbHVlcy5sZW5ndGgsTT17fSxBPW0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbmRzfSkpO2ZvcihnPTAseD0wO3g8azt4Kyspe3ZhciBTPVtdO2ZvcihiPTA7YjxBLmxlbmd0aDtiKyspUy5wdXNoKEFbYl1beF0pO2Q9cFt4JXAubGVuZ3RoXSxnKz1kO3ZhciBFPShfPXgsdz12b2lkIDAsVD12b2lkIDAsbC5pc0FycmF5T3JUeXBlZEFycmF5KHkuY29sb3IpP1Q9dz15LmNvbG9yW18leS5jb2xvci5sZW5ndGhdOnc9eS5jb2xvcix7Y29sb3I6dih3KSxyYXdDb2xvcjpUfSksQz1TKyItIitFLnJhd0NvbG9yO3ZvaWQgMD09PU1bQ10mJihNW0NdPWYoUyxFLmNvbG9yLEUucmF3Q29sb3IpKSxoKE1bQ10seCxkKX12YXIgTCxJPXIubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGkpe3JldHVybntkaW1lbnNpb25JbmQ6dCxjb250YWluZXJJbmQ6ZSxkaXNwbGF5SW5kOnIsZGltZW5zaW9uTGFiZWw6bixjb3VudDppLGNhdGVnb3JpZXM6W10sZHJhZ1g6bnVsbH19KGUsdC5faW5kZXgsdC5fZGlzcGxheWluZGV4LHQubGFiZWwsZyl9KSk7Zm9yKHg9MDt4PGs7eCsrKWZvcihkPXBbeCVwLmxlbmd0aF0sYj0wO2I8SS5sZW5ndGg7YisrKXt2YXIgUD1JW2JdLmNvbnRhaW5lckluZCx6PW1bYl0uaW5kc1t4XSxPPUlbYl0uY2F0ZWdvcmllcztpZih2b2lkIDA9PT1PW3pdKXt2YXIgRD1lLmRpbWVuc2lvbnNbUF0uX2NhdGVnb3J5YXJyYXlbel0sUj1lLmRpbWVuc2lvbnNbUF0uX3RpY2t0ZXh0W3pdO09bel09e2RpbWVuc2lvbkluZDpiLGNhdGVnb3J5SW5kOkw9eixjYXRlZ29yeVZhbHVlOkQsZGlzcGxheUluZDpMLGNhdGVnb3J5TGFiZWw6Uix2YWx1ZUluZHM6W10sY291bnQ6MCxkcmFnWTpudWxsfX11KE9bel0seCxkKX1yZXR1cm4gbihmdW5jdGlvbih0LGUscil7dmFyIG49dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubGVuZ3RofSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlKX0pKTtyZXR1cm57ZGltZW5zaW9uczp0LHBhdGhzOmUsdHJhY2U6dm9pZCAwLG1heENhdHM6bixjb3VudDpyfX0oSSxNLGcpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY1MSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1NCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvZmlsdGVyX3VuaXF1ZS5qcyI6NzY5LCIuLi8uLi9saWIvZ3VwIjo3NzUsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIiksYz10KCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIik7ZnVuY3Rpb24gdSh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwuZGltZW5zaW9ucyxyLGkpfXZhciBpPXIoInZhbHVlcyIpLGE9cigidmlzaWJsZSIpO2lmKGkmJmkubGVuZ3RofHwoYT1lLnZpc2libGU9ITEpLGEpe3IoImxhYmVsIikscigiZGlzcGxheWluZGV4IixlLl9pbmRleCk7dmFyIG8scz10LmNhdGVnb3J5YXJyYXksYz1BcnJheS5pc0FycmF5KHMpJiZzLmxlbmd0aD4wO2MmJihvPSJhcnJheSIpO3ZhciB1PXIoImNhdGVnb3J5b3JkZXIiLG8pOyJhcnJheSI9PT11PyhyKCJjYXRlZ29yeWFycmF5IikscigidGlja3RleHQiKSk6KGRlbGV0ZSB0LmNhdGVnb3J5YXJyYXksZGVsZXRlIHQudGlja3RleHQpLGN8fCJhcnJheSIhPT11fHwoZS5jYXRlZ29yeW9yZGVyPSJ0cmFjZSIpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gaChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfXZhciBwPXModCxlLHtuYW1lOiJkaW1lbnNpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6dX0pLGQ9ZnVuY3Rpb24odCxlLHIsbyxzKXtzKCJsaW5lLnNoYXBlIikscygibGluZS5ob3ZlcnRlbXBsYXRlIik7dmFyIGw9cygibGluZS5jb2xvciIsby5jb2xvcndheVswXSk7aWYoaSh0LCJsaW5lIikmJm4uaXNBcnJheU9yVHlwZWRBcnJheShsKSl7aWYobC5sZW5ndGgpcmV0dXJuIHMoImxpbmUuY29sb3JzY2FsZSIpLGEodCxlLG8scyx7cHJlZml4OiJsaW5lLiIsY0xldHRlcjoiYyJ9KSxsLmxlbmd0aDtlLmxpbmUuY29sb3I9cn1yZXR1cm4gMS8wfSh0LGUscixmLGgpO28oZSxmLGgpLEFycmF5LmlzQXJyYXkocCkmJnAubGVuZ3RofHwoZS52aXNpYmxlPSExKSxjKGUscCwidmFsdWVzIixkKSxoKCJob3Zlcm9uIiksaCgiaG92ZXJ0ZW1wbGF0ZSIpLGgoImFycmFuZ2VtZW50IiksaCgiYnVuZGxlY29sb3JzIiksaCgic29ydHBhdGhzIiksaCgiY291bnRzIik7dmFyIGc9e2ZhbWlseTpmLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZChmLmZvbnQuc2l6ZSksY29sb3I6Zi5mb250LmNvbG9yfTtuLmNvZXJjZUZvbnQoaCwibGFiZWxmb250IixnKTt2YXIgbT17ZmFtaWx5OmYuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGYuZm9udC5zaXplLzEuMiksY29sb3I6Zi5mb250LmNvbG9yfTtuLmNvZXJjZUZvbnQoaCwidGlja2ZvbnQiLG0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY1MywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1NCwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIzLCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vcGFyY29vcmRzL21lcmdlX2xlbmd0aCI6MTE1OCwiLi9hdHRyaWJ1dGVzIjoxMTQyfV0sMTE0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxjb2xvcmJhcjp7Y29udGFpbmVyOiJsaW5lIixtaW46ImNtaW4iLG1heDoiY21heCJ9LG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJwYXJjYXRzIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6WyJub09wYWNpdHkiXSxtZXRhOnt9fX0seyIuL2F0dHJpYnV0ZXMiOjExNDIsIi4vYmFzZV9wbG90IjoxMTQzLCIuL2NhbGMiOjExNDQsIi4vZGVmYXVsdHMiOjExNDUsIi4vcGxvdCI6MTE0OH1dLDExNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfYXBpIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9saWIiKSxzPW8uc3RyVHJhbnNsYXRlLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCJ0aW55Y29sb3IyIiksdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKTtmdW5jdGlvbiBmKHQsZSxyLGkpe3ZhciBhPXQubWFwKFIuYmluZCgwLGUscikpLGM9aS5zZWxlY3RBbGwoImcucGFyY2F0c2xheWVyIikuZGF0YShbbnVsbF0pO2MuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInBhcmNhdHNsYXllciIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpO3ZhciBmPWMuc2VsZWN0QWxsKCJnLnRyYWNlLnBhcmNhdHMiKS5kYXRhKGEsaCksdj1mLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0cmFjZSBwYXJjYXRzIik7Zi5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gcyh0LngsdC55KX0pKSx2LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicGF0aHMiKTt2YXIgeT1mLnNlbGVjdCgiZy5wYXRocyIpLnNlbGVjdEFsbCgicGF0aC5wYXRoIikuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQucGF0aHN9KSxoKTt5LmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jb2xvcn0pKTt2YXIgXz15LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJwYXRoIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jb2xvcn0pKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO2IoXykseS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnRH0pKSxfLmVtcHR5KCl8fHkuc29ydChkKSx5LmV4aXQoKS5yZW1vdmUoKSx5Lm9uKCJtb3VzZW92ZXIiLGcpLm9uKCJtb3VzZW91dCIsbSkub24oImNsaWNrIix4KSx2LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGltZW5zaW9ucyIpO3ZhciBrPWYuc2VsZWN0KCJnLmRpbWVuc2lvbnMiKS5zZWxlY3RBbGwoImcuZGltZW5zaW9uIikuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30pLGgpO2suZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRpbWVuc2lvbiIpLGsuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHModC54LDApfSkpLGsuZXhpdCgpLnJlbW92ZSgpO3ZhciBNPWsuc2VsZWN0QWxsKCJnLmNhdGVnb3J5IikuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllc30pLGgpLEE9TS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2F0ZWdvcnkiKTtNLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBzKDAsdC55KX0pKSxBLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiY2F0cmVjdCIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLE0uc2VsZWN0KCJyZWN0LmNhdHJlY3QiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLHcoQSk7dmFyIFM9TS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5iYW5kc30pLGgpO1MuZWFjaCgoZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSksUy5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KSk7dmFyIHo9Uy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFuZHJlY3QiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7Uy5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuYXR0cigiY3Vyc29yIiwoZnVuY3Rpb24odCl7cmV0dXJuImZpeGVkIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudD8iZGVmYXVsdCI6InBlcnBlbmRpY3VsYXIiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50PyJucy1yZXNpemUiOiJtb3ZlIn0pKSxUKHopLFMuZXhpdCgpLnJlbW92ZSgpLEEuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJjYXRsYWJlbCIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3ZhciBPPWUuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvcjtNLnNlbGVjdCgidGV4dC5jYXRsYWJlbCIpLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24odCl7cmV0dXJuIHAodCk/InN0YXJ0IjoiZW5kIn0pKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1zaGFkb3ciLE8rIiAtMXB4ICAxcHggMnB4LCAiK08rIiAxcHggIDFweCAycHgsICIrTysiICAxcHggLTFweCAycHgsICIrTysiIC0xcHggLTFweCAycHgiKS5zdHlsZSgiZmlsbCIsInJnYigwLCAwLCAwKSIpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4gcCh0KT90LndpZHRoKzU6LTV9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodC8yfSkpLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNhdGVnb3J5TGFiZWx9KSkuZWFjaCgoZnVuY3Rpb24odCl7bC5mb250KG4uc2VsZWN0KHRoaXMpLHQucGFyY2F0c1ZpZXdNb2RlbC5jYXRlZ29yeWxhYmVsZm9udCksdS5jb252ZXJ0VG9Uc3BhbnMobi5zZWxlY3QodGhpcyksZSl9KSksQS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImRpbWxhYmVsIiksTS5zZWxlY3QoInRleHQuZGltbGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImJhc2VsaW5lIikuYXR0cigiY3Vyc29yIiwoZnVuY3Rpb24odCl7cmV0dXJuImZpeGVkIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudD8iZGVmYXVsdCI6ImV3LXJlc2l6ZSJ9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRoLzJ9KSkuYXR0cigieSIsLTUpLnRleHQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT1lP3QucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zW3QubW9kZWwuZGltZW5zaW9uSW5kXS5kaW1lbnNpb25MYWJlbDpudWxsfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2wuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwubGFiZWxmb250KX0pKSxNLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLm9uKCJtb3VzZW92ZXIiLEUpLm9uKCJtb3VzZW91dCIsQyksTS5leGl0KCkucmVtb3ZlKCksay5jYWxsKG4uYmVoYXZpb3IuZHJhZygpLm9yaWdpbigoZnVuY3Rpb24odCl7cmV0dXJue3g6dC54LHk6MH19KSkub24oImRyYWdzdGFydCIsTCkub24oImRyYWciLEkpLm9uKCJkcmFnZW5kIixQKSksZi5lYWNoKChmdW5jdGlvbih0KXt0LnRyYWNlU2VsZWN0aW9uPW4uc2VsZWN0KHRoaXMpLHQucGF0aFNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcucGF0aHMiKS5zZWxlY3RBbGwoInBhdGgucGF0aCIpLHQuZGltZW5zaW9uU2VsZWN0aW9uPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5kaW1lbnNpb25zIikuc2VsZWN0QWxsKCJnLmRpbWVuc2lvbiIpfSkpLGYuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQua2V5fWZ1bmN0aW9uIHAodCl7dmFyIGU9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLHI9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZS0xXS5tb2RlbC5kaW1lbnNpb25JbmQ7cmV0dXJuIHQubW9kZWwuZGltZW5zaW9uSW5kPT09cn1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQubW9kZWwucmF3Q29sb3I+ZS5tb2RlbC5yYXdDb2xvcj8xOnQubW9kZWwucmF3Q29sb3I8ZS5tb2RlbC5yYXdDb2xvcj8tMTowfWZ1bmN0aW9uIGcodCl7aWYoIXQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uJiYtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpe28ucmFpc2VUb1RvcCh0aGlzKSxfKG4uc2VsZWN0KHRoaXMpKTt2YXIgZT12KHQpLHI9eSh0KTtpZih0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X2hvdmVyIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudCxjb25zdHJhaW50czpyfSksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigibm9uZSIpKXt2YXIgaSxzLGwsdT1uLm1vdXNlKHRoaXMpWzBdLGY9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGg9dC5wYXJjYXRzVmlld01vZGVsLnRyYWNlLHA9Zi5fZnVsbExheW91dCxkPXAuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmb3IobD0wO2w8dC5sZWZ0WHMubGVuZ3RoLTE7bCsrKWlmKHQubGVmdFhzW2xdK3QuZGltV2lkdGhzW2xdLTI8PXUmJnU8PXQubGVmdFhzW2wrMV0rMil7dmFyIG09dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbbF0seD10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tsKzFdO2k9KG0ueCttLndpZHRoK3gueCkvMixzPSh0LnRvcFlzW2xdK3QudG9wWXNbbCsxXSt0LmhlaWdodCkvMjticmVha312YXIgYj10LnBhcmNhdHNWaWV3TW9kZWwueCtpLHc9dC5wYXJjYXRzVmlld01vZGVsLnkrcyxUPWMubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsWyJibGFjayIsIndoaXRlIl0pLGs9dC5tb2RlbC5jb3VudCxNPWsvdC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LEE9e2NvdW50TGFiZWw6ayxwcm9iYWJpbGl0eUxhYmVsOk0udG9GaXhlZCgzKX0sUz1bXTstMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZTLnB1c2goWyJDb3VudDoiLEEuY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiZTLnB1c2goWyJQOiIsQS5wcm9iYWJpbGl0eUxhYmVsXS5qb2luKCIgIikpO3ZhciBFPVMuam9pbigiPGJyPiIpLEM9bi5tb3VzZShmKVswXTthLmxvbmVIb3Zlcih7dHJhY2U6aCx4OmItZC5sZWZ0K2cubGVmdCx5OnctZC50b3ArZy50b3AsdGV4dDpFLGNvbG9yOnQubW9kZWwuY29sb3IsYm9yZGVyQ29sb3I6ImJsYWNrIixmb250RmFtaWx5OidNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZScsZm9udFNpemU6MTAsZm9udENvbG9yOlQsaWRlYWxBbGlnbjpDPGI/InJpZ2h0IjoibGVmdCIsaG92ZXJ0ZW1wbGF0ZTooaC5saW5lfHx7fSkuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOkEsZXZlbnREYXRhOlt7ZGF0YTpoLl9pbnB1dCxmdWxsRGF0YTpoLGNvdW50OmsscHJvYmFiaWxpdHk6TX1dfSx7Y29udGFpbmVyOnAuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnAuX3BhcGVyLm5vZGUoKSxnZDpmfSl9fX1mdW5jdGlvbiBtKHQpe2lmKCF0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbiYmKGIobi5zZWxlY3QodGhpcykpLGEubG9uZVVuaG92ZXIodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSksdC5wYXJjYXRzVmlld01vZGVsLnBhdGhTZWxlY3Rpb24uc29ydChkKSwtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpKXt2YXIgZT12KHQpLHI9eSh0KTt0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6ZSxldmVudDpuLmV2ZW50LGNvbnN0cmFpbnRzOnJ9KX19ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9W10scj16KHQucGFyY2F0c1ZpZXdNb2RlbCksbj0wO248dC5tb2RlbC52YWx1ZUluZHMubGVuZ3RoO24rKyl7dmFyIGk9dC5tb2RlbC52YWx1ZUluZHNbbl07ZS5wdXNoKHtjdXJ2ZU51bWJlcjpyLHBvaW50TnVtYmVyOml9KX1yZXR1cm4gZX1mdW5jdGlvbiB5KHQpe2Zvcih2YXIgZT17fSxyPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxhPWkuY2F0ZWdvcmllc1t0Lm1vZGVsLmNhdGVnb3J5SW5kc1tuXV07ZVtpLmNvbnRhaW5lckluZF09YS5jYXRlZ29yeVZhbHVlfXJldHVybiB2b2lkIDAhPT10Lm1vZGVsLnJhd0NvbG9yJiYoZS5jb2xvcj10Lm1vZGVsLnJhd0NvbG9yKSxlfWZ1bmN0aW9uIHgodCl7aWYoLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKXt2YXIgZT12KHQpLHI9eSh0KTt0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X2NsaWNrIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudCxjb25zdHJhaW50czpyfSl9fWZ1bmN0aW9uIGIodCl7dC5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY29sb3J9KSkuYXR0cigiZmlsbC1vcGFjaXR5IiwuNikuYXR0cigic3Ryb2tlIiwibGlnaHRncmF5IikuYXR0cigic3Ryb2tlLXdpZHRoIiwuMikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDEpfWZ1bmN0aW9uIF8odCl7dC5hdHRyKCJmaWxsLW9wYWNpdHkiLC44KS5hdHRyKCJzdHJva2UiLChmdW5jdGlvbih0KXtyZXR1cm4gYy5tb3N0UmVhZGFibGUodC5tb2RlbC5jb2xvcixbImJsYWNrIiwid2hpdGUiXSl9KSkuYXR0cigic3Ryb2tlLXdpZHRoIiwuMyl9ZnVuY3Rpb24gdyh0KXt0LnNlbGVjdCgicmVjdC5jYXRyZWN0IikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKX1mdW5jdGlvbiBUKHQpe3QuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLC4yKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSkuYXR0cigiZmlsbC1vcGFjaXR5IiwxKX1mdW5jdGlvbiBrKHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbC5wYXRoU2VsZWN0aW9uLHI9dC5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25JbmQsbj10LmNhdGVnb3J5Vmlld01vZGVsLm1vZGVsLmNhdGVnb3J5SW5kO3JldHVybiBlLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUubW9kZWwuY2F0ZWdvcnlJbmRzW3JdPT09biYmZS5tb2RlbC5jb2xvcj09PXQuY29sb3J9KSl9ZnVuY3Rpb24gTSh0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuZGF0dW0oKSxhPWkuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwsbz1pLnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYscz1uLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLGw9W107cy5lYWNoKChmdW5jdGlvbih0KXtrKHQpLmVhY2goKGZ1bmN0aW9uKHQpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGwsdih0KSl9KSl9KSk7dmFyIGM9e307Y1thLmRpbWVuc2lvbkluZF09YS5jYXRlZ29yeVZhbHVlLG8uZW1pdChlLHtwb2ludHM6bCxldmVudDpyLGNvbnN0cmFpbnRzOmN9KX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgaT1uLnNlbGVjdCh0KS5kYXR1bSgpLGE9aS5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbCxvPWkucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixzPWsoaSksbD1bXTtzLmVhY2goKGZ1bmN0aW9uKHQpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGwsdih0KSl9KSk7dmFyIGM9e307Y1thLmRpbWVuc2lvbkluZF09YS5jYXRlZ29yeVZhbHVlLHZvaWQgMCE9PWkucmF3Q29sb3ImJihjLmNvbG9yPWkucmF3Q29sb3IpLG8uZW1pdChlLHtwb2ludHM6bCxldmVudDpyLGNvbnN0cmFpbnRzOmN9KX1mdW5jdGlvbiBTKHQsZSxyKXt0Ll9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybSh0KTt2YXIgaSxhLG89dC5fZnVsbExheW91dC5faW52U2NhbGVYLHM9dC5fZnVsbExheW91dC5faW52U2NhbGVZLGw9bi5zZWxlY3Qoci5wYXJlbnROb2RlKS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLGM9bC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdT1sLmRhdHVtKCksZj11LnBhcmNhdHNWaWV3TW9kZWwsaD1mLm1vZGVsLmRpbWVuc2lvbnNbdS5tb2RlbC5kaW1lbnNpb25JbmRdLHA9Zi50cmFjZSxkPWMudG9wK2MuaGVpZ2h0LzI7Zi5kaW1lbnNpb25zLmxlbmd0aD4xJiZoLmRpc3BsYXlJbmQ9PT1mLmRpbWVuc2lvbnMubGVuZ3RoLTE/KGk9Yy5sZWZ0LGE9ImxlZnQiKTooaT1jLmxlZnQrYy53aWR0aCxhPSJyaWdodCIpO3ZhciBnPXUubW9kZWwuY291bnQsbT11Lm1vZGVsLmNhdGVnb3J5TGFiZWwsdj1nL3UucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5jb3VudCx5PXtjb3VudExhYmVsOmcsY2F0ZWdvcnlMYWJlbDptLHByb2JhYmlsaXR5TGFiZWw6di50b0ZpeGVkKDMpfSx4PVtdOy0xIT09dS5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoImNvdW50IikmJngucHVzaChbIkNvdW50OiIseS5jb3VudExhYmVsXS5qb2luKCIgIikpLC0xIT09dS5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInByb2JhYmlsaXR5IikmJngucHVzaChbIlAoIit5LmNhdGVnb3J5TGFiZWwrIik6Iix5LnByb2JhYmlsaXR5TGFiZWxdLmpvaW4oIiAiKSk7dmFyIGI9eC5qb2luKCI8YnI+Iik7cmV0dXJue3RyYWNlOnAseDpvKihpLWUubGVmdCkseTpzKihkLWUudG9wKSx0ZXh0OmIsY29sb3I6ImxpZ2h0Z3JheSIsYm9yZGVyQ29sb3I6ImJsYWNrIixmb250RmFtaWx5OidNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZScsZm9udFNpemU6MTIsZm9udENvbG9yOiJibGFjayIsaWRlYWxBbGlnbjphLGhvdmVydGVtcGxhdGU6cC5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6eSxldmVudERhdGE6W3tkYXRhOnAuX2lucHV0LGZ1bGxEYXRhOnAsY291bnQ6ZyxjYXRlZ29yeTptLHByb2JhYmlsaXR5OnZ9XX19ZnVuY3Rpb24gRSh0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJi0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSl7aWYobi5tb3VzZSh0aGlzKVsxXTwtMSlyZXR1cm47dmFyIGUscj10LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYsaT1yLl9mdWxsTGF5b3V0LHM9aS5fcGFwZXJkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb247aWYoImNvbG9yIj09PWw/KCFmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5kYXR1bSgpLHI9ayhlKTtfKHIpLHIuZWFjaCgoZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSksbi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yPT09ZS5jb2xvcn0pKS5lYWNoKChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKSxuLnNlbGVjdCh0aGlzKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsMS41KX0pKX0odGhpcyksQSh0aGlzLCJwbG90bHlfaG92ZXIiLG4uZXZlbnQpKTooIWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9ayh0KTtfKGUpLGUuZWFjaCgoZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSl9KSksbi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIiwyLjUpfSh0aGlzKSxNKHRoaXMsInBsb3RseV9ob3ZlciIsbi5ldmVudCkpLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoIm5vbmUiKSkiY2F0ZWdvcnkiPT09bD9lPVMocixzLHRoaXMpOiJjb2xvciI9PT1sP2U9ZnVuY3Rpb24odCxlLHIpe3QuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHQpO3ZhciBpLGEsbz10Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVgscz10Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVksbD1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9bi5zZWxlY3QocikuZGF0dW0oKSxmPXUuY2F0ZWdvcnlWaWV3TW9kZWwsaD1mLnBhcmNhdHNWaWV3TW9kZWwscD1oLm1vZGVsLmRpbWVuc2lvbnNbZi5tb2RlbC5kaW1lbnNpb25JbmRdLGQ9aC50cmFjZSxnPWwueStsLmhlaWdodC8yO2guZGltZW5zaW9ucy5sZW5ndGg+MSYmcC5kaXNwbGF5SW5kPT09aC5kaW1lbnNpb25zLmxlbmd0aC0xPyhpPWwubGVmdCxhPSJsZWZ0Iik6KGk9bC5sZWZ0K2wud2lkdGgsYT0icmlnaHQiKTt2YXIgbT1mLm1vZGVsLmNhdGVnb3J5TGFiZWwsdj11LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuY291bnQseT0wO3UuY2F0ZWdvcnlWaWV3TW9kZWwuYmFuZHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jb2xvcj09PXUuY29sb3ImJih5Kz10LmNvdW50KX0pKTt2YXIgeD1mLm1vZGVsLmNvdW50LGI9MDtoLnBhdGhTZWxlY3Rpb24uZWFjaCgoZnVuY3Rpb24odCl7dC5tb2RlbC5jb2xvcj09PXUuY29sb3ImJihiKz10Lm1vZGVsLmNvdW50KX0pKTt2YXIgXz15L3Ysdz15L2IsVD15L3gsaz17Y291bnRMYWJlbDp2LGNhdGVnb3J5TGFiZWw6bSxwcm9iYWJpbGl0eUxhYmVsOl8udG9GaXhlZCgzKX0sTT1bXTstMSE9PWYucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZNLnB1c2goWyJDb3VudDoiLGsuY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PWYucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiYoTS5wdXNoKCJQKGNvbG9yIFx1MjIyOSAiK20rIik6ICIray5wcm9iYWJpbGl0eUxhYmVsKSxNLnB1c2goIlAoIittKyIgfCBjb2xvcik6ICIrdy50b0ZpeGVkKDMpKSxNLnB1c2goIlAoY29sb3IgfCAiK20rIik6ICIrVC50b0ZpeGVkKDMpKSk7dmFyIEE9TS5qb2luKCI8YnI+IiksUz1jLm1vc3RSZWFkYWJsZSh1LmNvbG9yLFsiYmxhY2siLCJ3aGl0ZSJdKTtyZXR1cm57dHJhY2U6ZCx4Om8qKGktZS5sZWZ0KSx5OnMqKGctZS50b3ApLHRleHQ6QSxjb2xvcjp1LmNvbG9yLGJvcmRlckNvbG9yOiJibGFjayIsZm9udEZhbWlseTonTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLGZvbnRDb2xvcjpTLGZvbnRTaXplOjEwLGlkZWFsQWxpZ246YSxob3ZlcnRlbXBsYXRlOmQuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOmssZXZlbnREYXRhOlt7ZGF0YTpkLl9pbnB1dCxmdWxsRGF0YTpkLGNhdGVnb3J5Om0sY291bnQ6dixwcm9iYWJpbGl0eTpfLGNhdGVnb3J5Y291bnQ6eCxjb2xvcmNvdW50OmIsYmFuZGNvbG9yY291bnQ6eX1dfX0ocixzLHRoaXMpOiJkaW1lbnNpb24iPT09bCYmKGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPVtdO3JldHVybiBuLnNlbGVjdChyLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJnLmNhdGVnb3J5Iikuc2VsZWN0KCJyZWN0LmNhdHJlY3QiKS5lYWNoKChmdW5jdGlvbigpe2kucHVzaChTKHQsZSx0aGlzKSl9KSksaX0ocixzLHRoaXMpKSxlJiZhLmxvbmVIb3ZlcihlLHtjb250YWluZXI6aS5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6aS5fcGFwZXIubm9kZSgpLGdkOnJ9KX19ZnVuY3Rpb24gQyh0KXt2YXIgZT10LnBhcmNhdHNWaWV3TW9kZWw7aWYoIWUuZHJhZ0RpbWVuc2lvbiYmKGIoZS5wYXRoU2VsZWN0aW9uKSx3KGUuZGltZW5zaW9uU2VsZWN0aW9uLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpKSxUKGUuZGltZW5zaW9uU2VsZWN0aW9uLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpKSxhLmxvbmVVbmhvdmVyKGUuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2hvdmVybGF5ZXIubm9kZSgpKSxlLnBhdGhTZWxlY3Rpb24uc29ydChkKSwtMT09PWUuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKSl7ImNvbG9yIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uP0EodGhpcywicGxvdGx5X3VuaG92ZXIiLG4uZXZlbnQpOk0odGhpcywicGxvdGx5X3VuaG92ZXIiLG4uZXZlbnQpfX1mdW5jdGlvbiBMKHQpeyJmaXhlZCIhPT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQmJih0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kPXQubW9kZWwuZGlzcGxheUluZCx0LmluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHM9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpLHQuZHJhZ0hhc01vdmVkPSExLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1udWxsLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLnNlbGVjdCgicmVjdC5jYXRyZWN0IikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5tb3VzZSh0aGlzKVswXSxpPW4ubW91c2UodGhpcylbMV07LTI8PXImJnI8PWUud2lkdGgrMiYmLTI8PWkmJmk8PWUuaGVpZ2h0KzImJih0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQ9ZS5tb2RlbC5kaXNwbGF5SW5kLHQuaW5pdGlhbERyYWdDYXRlZ29yeURpc3BsYXlJbmRzPXQubW9kZWwuY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSksZS5tb2RlbC5kcmFnWT1lLnksby5yYWlzZVRvVG9wKHRoaXMucGFyZW50Tm9kZSksbi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5lYWNoKChmdW5jdGlvbihlKXtlLnk8aSYmaTw9ZS55K2UuaGVpZ2h0JiYodC5wb3RlbnRpYWxDbGlja0JhbmQ9dGhpcyl9KSkpfSkpLHQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uPXQsYS5sb25lVW5ob3Zlcih0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2hvdmVybGF5ZXIubm9kZSgpKSl9ZnVuY3Rpb24gSSh0KXtpZigiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnSGFzTW92ZWQ9ITAsbnVsbCE9PXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpKXt2YXIgZT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kLHI9ZS0xLGk9ZSsxLGE9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZV07aWYobnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl7dmFyIG89YS5jYXRlZ29yaWVzW3QuZHJhZ0NhdGVnb3J5RGlzcGxheUluZF07by5tb2RlbC5kcmFnWSs9bi5ldmVudC5keTt2YXIgcz1vLm1vZGVsLmRyYWdZLGw9by5tb2RlbC5kaXNwbGF5SW5kLGM9YS5jYXRlZ29yaWVzLHU9Y1tsLTFdLGY9Y1tsKzFdO3ZvaWQgMCE9PXUmJnM8dS55K3UuaGVpZ2h0LzImJihvLm1vZGVsLmRpc3BsYXlJbmQ9dS5tb2RlbC5kaXNwbGF5SW5kLHUubW9kZWwuZGlzcGxheUluZD1sKSx2b2lkIDAhPT1mJiZzK28uaGVpZ2h0PmYueStmLmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPWYubW9kZWwuZGlzcGxheUluZCxmLm1vZGVsLmRpc3BsYXlJbmQ9bCksdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW8ubW9kZWwuZGlzcGxheUluZH1pZihudWxsPT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kfHwiZnJlZWZvcm0iPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50KXthLm1vZGVsLmRyYWdYPW4uZXZlbnQueDt2YXIgaD10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tyXSxwPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2ldO3ZvaWQgMCE9PWgmJmEubW9kZWwuZHJhZ1g8aC54K2gud2lkdGgmJihhLm1vZGVsLmRpc3BsYXlJbmQ9aC5tb2RlbC5kaXNwbGF5SW5kLGgubW9kZWwuZGlzcGxheUluZD1lKSx2b2lkIDAhPT1wJiZhLm1vZGVsLmRyYWdYK2Eud2lkdGg+cC54JiYoYS5tb2RlbC5kaXNwbGF5SW5kPXAubW9kZWwuZGlzcGxheUluZCxwLm1vZGVsLmRpc3BsYXlJbmQ9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCksdC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD1hLm1vZGVsLmRpc3BsYXlJbmR9Tih0LnBhcmNhdHNWaWV3TW9kZWwpLEIodC5wYXJjYXRzVmlld01vZGVsKSxEKHQucGFyY2F0c1ZpZXdNb2RlbCksTyh0LnBhcmNhdHNWaWV3TW9kZWwpfX1mdW5jdGlvbiBQKHQpe2lmKCJmaXhlZCIhPT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQmJm51bGwhPT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRleHQiKS5hdHRyKCJmb250LXdlaWdodCIsIm5vcm1hbCIpO3ZhciBlPXt9LHI9eih0LnBhcmNhdHNWaWV3TW9kZWwpLGE9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpLG89dC5pbml0aWFsRHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRzLnNvbWUoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQhPT1hW2VdfSkpO28mJmEuZm9yRWFjaCgoZnVuY3Rpb24ocixuKXt2YXIgaT10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1tuXS5jb250YWluZXJJbmQ7ZVsiZGltZW5zaW9uc1siK2krIl0uZGlzcGxheWluZGV4Il09cn0pKTt2YXIgcz0hMTtpZihudWxsIT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kKXt2YXIgbD10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpO2lmKHM9dC5pbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHMuc29tZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCE9PWxbZV19KSkpe3ZhciBjPXQubW9kZWwuY2F0ZWdvcmllcy5zbGljZSgpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzcGxheUluZC1lLmRpc3BsYXlJbmR9KSksdT1jLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcnlWYWx1ZX0pKSxmPWMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yeUxhYmVsfSkpO2VbImRpbWVuc2lvbnNbIit0Lm1vZGVsLmNvbnRhaW5lckluZCsiXS5jYXRlZ29yeWFycmF5Il09W3VdLGVbImRpbWVuc2lvbnNbIit0Lm1vZGVsLmNvbnRhaW5lckluZCsiXS50aWNrdGV4dCJdPVtmXSxlWyJkaW1lbnNpb25zWyIrdC5tb2RlbC5jb250YWluZXJJbmQrIl0uY2F0ZWdvcnlvcmRlciJdPSJhcnJheSJ9fWlmKC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSYmIXQuZHJhZ0hhc01vdmVkJiZ0LnBvdGVudGlhbENsaWNrQmFuZCYmKCJjb2xvciI9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJvbj9BKHQucG90ZW50aWFsQ2xpY2tCYW5kLCJwbG90bHlfY2xpY2siLG4uZXZlbnQuc291cmNlRXZlbnQpOk0odC5wb3RlbnRpYWxDbGlja0JhbmQsInBsb3RseV9jbGljayIsbi5ldmVudC5zb3VyY2VFdmVudCkpLHQubW9kZWwuZHJhZ1g9bnVsbCxudWxsIT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kKXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW3QuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRdLmNhdGVnb3JpZXNbdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kXS5tb2RlbC5kcmFnWT1udWxsLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1udWxsO3QuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQ9bnVsbCx0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbj1udWxsLHQuZHJhZ0hhc01vdmVkPW51bGwsdC5wb3RlbnRpYWxDbGlja0JhbmQ9bnVsbCxOKHQucGFyY2F0c1ZpZXdNb2RlbCksQih0LnBhcmNhdHNWaWV3TW9kZWwpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKDMwMCkuZWFzZSgiY3ViaWMtaW4tb3V0IikuZWFjaCgoZnVuY3Rpb24oKXtEKHQucGFyY2F0c1ZpZXdNb2RlbCwhMCksTyh0LnBhcmNhdHNWaWV3TW9kZWwsITApfSkpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7KG98fHMpJiZpLnJlc3R5bGUodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGUsW3JdKX0pKX19ZnVuY3Rpb24geih0KXtmb3IodmFyIGUscj10LmdyYXBoRGl2Ll9mdWxsRGF0YSxuPTA7bjxyLmxlbmd0aDtuKyspaWYodC5rZXk9PT1yW25dLnVpZCl7ZT1uO2JyZWFrfXJldHVybiBlfWZ1bmN0aW9uIE8odCxlKXt2YXIgcjt2b2lkIDA9PT1lJiYoZT0hMSksdC5wYXRoU2VsZWN0aW9uLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdGhzfSksaCksKHI9dC5wYXRoU2VsZWN0aW9uLGU/ci50cmFuc2l0aW9uKCk6cikuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0R9KSl9ZnVuY3Rpb24gRCh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/dC50cmFuc2l0aW9uKCk6dH12b2lkIDA9PT1lJiYoZT0hMSksdC5kaW1lbnNpb25TZWxlY3Rpb24uZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30pLGgpO3ZhciBpPXQuZGltZW5zaW9uU2VsZWN0aW9uLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXN9KSxoKTtyKHQuZGltZW5zaW9uU2VsZWN0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gcyh0LngsMCl9KSkscihpKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gcygwLHQueSl9KSksaS5zZWxlY3QoIi5kaW1sYWJlbCIpLnRleHQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT1lP3QucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zW3QubW9kZWwuZGltZW5zaW9uSW5kXS5kaW1lbnNpb25MYWJlbDpudWxsfSkpLGkuc2VsZWN0KCIuY2F0bGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBwKHQpPyJzdGFydCI6ImVuZCJ9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiBwKHQpP3Qud2lkdGgrNTotNX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZSxyO3AodCk/KGU9dC53aWR0aCs1LHI9InN0YXJ0Iik6KGU9LTUscj0iZW5kIiksbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0c3BhbiIpLmF0dHIoIngiLGUpLmF0dHIoInRleHQtYW5jaG9yIixyKX0pKTt2YXIgYT1pLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJhbmRzfSksaCksbD1hLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYW5kcmVjdCIpLmF0dHIoImN1cnNvciIsIm1vdmUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7YS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSksVChsKSxhLmVhY2goKGZ1bmN0aW9uKCl7by5yYWlzZVRvVG9wKHRoaXMpfSkpLGEuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIFIodCxlLHIpe3ZhciBuLGk9clswXSxhPWUubWFyZ2lufHx7bDo4MCxyOjgwLHQ6MTAwLGI6ODB9LG89aS50cmFjZSxzPW8uZG9tYWluLGw9ZS53aWR0aCxjPWUuaGVpZ2h0LHU9TWF0aC5mbG9vcihsKihzLnhbMV0tcy54WzBdKSksZj1NYXRoLmZsb29yKGMqKHMueVsxXS1zLnlbMF0pKSxoPXMueFswXSpsK2EubCxwPWUuaGVpZ2h0LXMueVsxXSplLmhlaWdodCthLnQsZD1vLmxpbmUuc2hhcGU7bj0iYWxsIj09PW8uaG92ZXJpbmZvP1siY291bnQiLCJwcm9iYWJpbGl0eSJdOihvLmhvdmVyaW5mb3x8IiIpLnNwbGl0KCIrIik7dmFyIGc9e3RyYWNlOm8sa2V5Om8udWlkLG1vZGVsOmkseDpoLHk6cCx3aWR0aDp1LGhlaWdodDpmLGhvdmVyb246by5ob3Zlcm9uLGhvdmVyaW5mb0l0ZW1zOm4sYXJyYW5nZW1lbnQ6by5hcnJhbmdlbWVudCxidW5kbGVjb2xvcnM6by5idW5kbGVjb2xvcnMsc29ydHBhdGhzOm8uc29ydHBhdGhzLGxhYmVsZm9udDpvLmxhYmVsZm9udCxjYXRlZ29yeWxhYmVsZm9udDpvLnRpY2tmb250LHBhdGhTaGFwZTpkLGRyYWdEaW1lbnNpb246bnVsbCxtYXJnaW46YSxwYXRoczpbXSxkaW1lbnNpb25zOltdLGdyYXBoRGl2OnQsdHJhY2VTZWxlY3Rpb246bnVsbCxwYXRoU2VsZWN0aW9uOm51bGwsZGltZW5zaW9uU2VsZWN0aW9uOm51bGx9O3JldHVybiBpLmRpbWVuc2lvbnMmJihOKGcpLEIoZykpLGd9ZnVuY3Rpb24gRih0LGUscixpLGEpe3ZhciBvLHMsbD1bXSxjPVtdO2ZvcihzPTA7czxyLmxlbmd0aC0xO3MrKylvPW4uaW50ZXJwb2xhdGVOdW1iZXIocltzXSt0W3NdLHRbcysxXSksbC5wdXNoKG8oYSkpLGMucHVzaChvKDEtYSkpO3ZhciB1PSJNICIrdFswXSsiLCIrZVswXTtmb3IodSs9ImwiK3JbMF0rIiwwICIscz0xO3M8ci5sZW5ndGg7cysrKXUrPSJDIitsW3MtMV0rIiwiK2Vbcy0xXSsiICIrY1tzLTFdKyIsIitlW3NdKyIgIit0W3NdKyIsIitlW3NdLHUrPSJsIityW3NdKyIsMCAiO2Zvcih1Kz0ibDAsIitpKyIgIix1Kz0ibCAtIityW3IubGVuZ3RoLTFdKyIsMCAiLHM9ci5sZW5ndGgtMjtzPj0wO3MtLSl1Kz0iQyIrY1tzXSsiLCIrKGVbcysxXStpKSsiICIrbFtzXSsiLCIrKGVbc10raSkrIiAiKyh0W3NdK3Jbc10pKyIsIisoZVtzXStpKSx1Kz0ibC0iK3Jbc10rIiwwICI7cmV0dXJuIHUrPSJaIn1mdW5jdGlvbiBCKHQpe3ZhciBlPXQuZGltZW5zaW9ucyxyPXQubW9kZWwsbj1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSl9KSksaT10Lm1vZGVsLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKX0pKSxhPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSksbz10LmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5kaW1lbnNpb25JbmR9KSkscz1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKSxsPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pKSxjPVtdO2Zvcih2YXIgdSBpbiByLnBhdGhzKXIucGF0aHMuaGFzT3duUHJvcGVydHkodSkmJmMucHVzaChyLnBhdGhzW3VdKTtmdW5jdGlvbiBmKHQpe3ZhciBlPXQuY2F0ZWdvcnlJbmRzLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gaVtlXVt0XX0pKTtyZXR1cm4gby5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpfWMuc29ydCgoZnVuY3Rpb24oZSxyKXt2YXIgbj1mKGUpLGk9ZihyKTtyZXR1cm4iYmFja3dhcmQiPT09dC5zb3J0cGF0aHMmJihuLnJldmVyc2UoKSxpLnJldmVyc2UoKSksbi5wdXNoKGUudmFsdWVJbmRzWzBdKSxpLnB1c2goci52YWx1ZUluZHNbMF0pLHQuYnVuZGxlY29sb3JzJiYobi51bnNoaWZ0KGUucmF3Q29sb3IpLGkudW5zaGlmdChyLnJhd0NvbG9yKSksbjxpPy0xOm4+aT8xOjB9KSk7Zm9yKHZhciBoPW5ldyBBcnJheShjLmxlbmd0aCkscD1lWzBdLm1vZGVsLmNvdW50LGQ9ZVswXS5jYXRlZ29yaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpLGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIG0sdj1jW2ddO209cD4wP2QqKHYuY291bnQvcCk6MDtmb3IodmFyIHkseD1uZXcgQXJyYXkobi5sZW5ndGgpLGI9MDtiPHYuY2F0ZWdvcnlJbmRzLmxlbmd0aDtiKyspe3ZhciBfPXYuY2F0ZWdvcnlJbmRzW2JdLHc9aVtiXVtfXSxUPWFbYl07eFtUXT1uW1RdW3ddLG5bVF1bd10rPW07dmFyIGs9dC5kaW1lbnNpb25zW1RdLmNhdGVnb3JpZXNbd10sTT1rLmJhbmRzLmxlbmd0aCxBPWsuYmFuZHNbTS0xXTtpZih2b2lkIDA9PT1BfHx2LnJhd0NvbG9yIT09QS5yYXdDb2xvcil7dmFyIFM9dm9pZCAwPT09QT8wOkEueStBLmhlaWdodDtrLmJhbmRzLnB1c2goe2tleTpTLGNvbG9yOnYuY29sb3IscmF3Q29sb3I6di5yYXdDb2xvcixoZWlnaHQ6bSx3aWR0aDprLndpZHRoLGNvdW50OnYuY291bnQseTpTLGNhdGVnb3J5Vmlld01vZGVsOmsscGFyY2F0c1ZpZXdNb2RlbDp0fSl9ZWxzZXt2YXIgRT1rLmJhbmRzW00tMV07RS5oZWlnaHQrPW0sRS5jb3VudCs9di5jb3VudH19eT0iaHNwbGluZSI9PT10LnBhdGhTaGFwZT9GKHMseCxsLG0sLjUpOkYocyx4LGwsbSwwKSxoW2ddPXtrZXk6di52YWx1ZUluZHNbMF0sbW9kZWw6dixoZWlnaHQ6bSxsZWZ0WHM6cyx0b3BZczp4LGRpbVdpZHRoczpsLHN2Z0Q6eSxwYXJjYXRzVmlld01vZGVsOnR9fXQucGF0aHM9aH1mdW5jdGlvbiBOKHQpe3ZhciBlPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5SW5kOnQuZGlzcGxheUluZCxkaW1lbnNpb25JbmQ6dC5kaW1lbnNpb25JbmR9fSkpO2Uuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pKTt2YXIgcj1bXTtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXS5kaW1lbnNpb25JbmQsYT10Lm1vZGVsLmRpbWVuc2lvbnNbaV07ci5wdXNoKGoodCxhKSl9dC5kaW1lbnNpb25zPXJ9ZnVuY3Rpb24gaih0LGUpe3ZhciByLG49dC5tb2RlbC5kaW1lbnNpb25zLmxlbmd0aCxpPWUuZGlzcGxheUluZDtyPTQwKyhuPjE/KHQud2lkdGgtODAtMTYpLyhuLTEpOjApKmk7dmFyIGEsbyxzLGwsYyx1PVtdLGY9dC5tb2RlbC5tYXhDYXRzLGg9ZS5jYXRlZ29yaWVzLmxlbmd0aCxwPWUuY291bnQsZD10LmhlaWdodC04KihmLTEpLGc9OCooZi1oKS8yLG09ZS5jYXRlZ29yaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue2Rpc3BsYXlJbmQ6dC5kaXNwbGF5SW5kLGNhdGVnb3J5SW5kOnQuY2F0ZWdvcnlJbmR9fSkpO2ZvcihtLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzcGxheUluZC1lLmRpc3BsYXlJbmR9KSksYz0wO2M8aDtjKyspbD1tW2NdLmNhdGVnb3J5SW5kLG89ZS5jYXRlZ29yaWVzW2xdLGE9cD4wP28uY291bnQvcCpkOjAscz17a2V5Om8udmFsdWVJbmRzWzBdLG1vZGVsOm8sd2lkdGg6MTYsaGVpZ2h0OmEseTpudWxsIT09by5kcmFnWT9vLmRyYWdZOmcsYmFuZHM6W10scGFyY2F0c1ZpZXdNb2RlbDp0fSxnPWcrYSs4LHUucHVzaChzKTtyZXR1cm57a2V5OmUuZGltZW5zaW9uSW5kLHg6bnVsbCE9PWUuZHJhZ1g/ZS5kcmFnWDpyLHk6MCx3aWR0aDoxNixtb2RlbDplLGNhdGVnb3JpZXM6dSxwYXJjYXRzVmlld01vZGVsOnQsZHJhZ0NhdGVnb3J5RGlzcGxheUluZDpudWxsLGRyYWdEaW1lbnNpb25EaXNwbGF5SW5kOm51bGwsaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kczpudWxsLGluaXRpYWxEcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kczpudWxsLGRyYWdIYXNNb3ZlZDpudWxsLHBvdGVudGlhbENsaWNrQmFuZDpudWxsfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7ZihyLHQsbixlKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY4MywiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAzLCIuLi8uLi9wbG90X2FwaS9wbG90X2FwaSI6ODE0LGQzOjE2OSx0aW55Y29sb3IyOjU3Nn1dLDExNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9wYXJjYXRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1hLl9wYXBlcixzPWEuX3NpemU7bih0LG8sZSx7d2lkdGg6cy53LGhlaWdodDpzLmgsbWFyZ2luOnt0OnMudCxyOnMucixiOnMuYixsOnMubH19LHIsaSl9fSx7Ii4vcGFyY2F0cyI6MTE0N31dLDExNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPXtkb21haW46byh7bmFtZToicGFyY29vcmRzIix0cmFjZTohMCxlZGl0VHlwZToicGxvdCJ9KSxsYWJlbGFuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sbGFiZWxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AiLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250OmEoe2VkaXRUeXBlOiJwbG90In0pLHRpY2tmb250OmEoe2VkaXRUeXBlOiJwbG90In0pLHJhbmdlZm9udDphKHtlZGl0VHlwZToicGxvdCJ9KSxkaW1lbnNpb25zOmwoImRpbWVuc2lvbiIse2xhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sdGlja3ZhbHM6cyh7fSxpLnRpY2t2YWxzLHtlZGl0VHlwZToicGxvdCJ9KSx0aWNrdGV4dDpzKHt9LGkudGlja3RleHQse2VkaXRUeXBlOiJwbG90In0pLHRpY2tmb3JtYXQ6cyh7fSxpLnRpY2tmb3JtYXQse2VkaXRUeXBlOiJwbG90In0pLHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW50cmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZGltZW5zaW9uczoiMS0yIixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9XSxlZGl0VHlwZToicGxvdCJ9LG11bHRpc2VsZWN0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0pLGxpbmU6cyh7ZWRpdFR5cGU6ImNhbGMifSxuKCJsaW5lIix7Y29sb3JzY2FsZURmbHQ6IlZpcmlkaXMiLGF1dG9Db2xvckRmbHQ6ITEsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MiwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2fV0sMTE1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiZDMiKSxhPXQoIi4uLy4uL2xpYi9ndXAiKS5rZXlGdW4sbz10KCIuLi8uLi9saWIvZ3VwIikucmVwZWF0LHM9dCgiLi4vLi4vbGliIikuc29ydGVyQXNjLGw9dCgiLi4vLi4vbGliIikuc3RyVHJhbnNsYXRlLGM9bi5iYXIuc25hcFJhdGlvO2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gdCooMS1jKStlKmN9dmFyIGY9bi5iYXIuc25hcENsb3NlO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gdCooMS1mKStlKmZ9ZnVuY3Rpb24gcCh0LGUscixuKXtpZihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKHQ+PWVbcl1bMF0mJnQ8PWVbcl1bMV0pcmV0dXJuITA7cmV0dXJuITF9KHIsbikpcmV0dXJuIHI7dmFyIGk9dD8tMToxLGE9MCxvPWUubGVuZ3RoLTE7aWYoaTwwKXt2YXIgcz1hO2E9byxvPXN9Zm9yKHZhciBsPWVbYV0sYz1sLGY9YTtpKmY8aSpvO2YrPWkpe3ZhciBwPWYraSxkPWVbcF07aWYoaSpyPGkqaChsLGQpKXJldHVybiB1KGwsYyk7aWYoaSpyPGkqZHx8cD09PW8pcmV0dXJuIHUoZCxsKTtjPWwsbD1kfX1mdW5jdGlvbiBkKHQpe3QuYXR0cigieCIsLW4uYmFyLmNhcHR1cmVXaWR0aC8yKS5hdHRyKCJ3aWR0aCIsbi5iYXIuY2FwdHVyZVdpZHRoKX1mdW5jdGlvbiBnKHQpe3QuYXR0cigidmlzaWJpbGl0eSIsInZpc2libGUiKS5zdHlsZSgidmlzaWJpbGl0eSIsInZpc2libGUiKS5hdHRyKCJmaWxsIiwieWVsbG93IikuYXR0cigib3BhY2l0eSIsMCl9ZnVuY3Rpb24gbSh0KXtpZighdC5icnVzaC5maWx0ZXJTcGVjaWZpZWQpcmV0dXJuIjAsIit0LmhlaWdodDtmb3IodmFyIGUscixuLGk9dih0LmJydXNoLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKSx0LmhlaWdodCksYT1bMF0sbz1pLmxlbmd0aD9pWzBdWzBdOm51bGwscz0wO3M8aS5sZW5ndGg7cysrKXI9KGU9aVtzXSlbMV0tZVswXSxhLnB1c2gobyksYS5wdXNoKHIpLChuPXMrMSk8aS5sZW5ndGgmJihvPWlbbl1bMF0tZVsxXSk7cmV0dXJuIGEucHVzaCh0LmhlaWdodCksYX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLHQqZSl9KSkuc29ydChzKX0pKX1mdW5jdGlvbiB5KCl7aS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoImN1cnNvciIsbnVsbCl9ZnVuY3Rpb24geCh0KXt0LmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLG0pfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1pLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5oaWdobGlnaHQsIC5oaWdobGlnaHQtc2hhZG93Iik7eChlP3IudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4uYmFyLnNuYXBEdXJhdGlvbikuZWFjaCgiZW5kIixlKTpyKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHIsaT10LmJydXNoLGE9TmFOLG89e307aWYoaS5maWx0ZXJTcGVjaWZpZWQpe3ZhciBzPXQuaGVpZ2h0LGw9aS5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCksYz12KGwscyksdT1OYU4sZj1OYU4saD1OYU47Zm9yKHI9MDtyPD1jLmxlbmd0aDtyKyspe3ZhciBwPWNbcl07aWYocCYmcFswXTw9ZSYmZTw9cFsxXSl7dT1yO2JyZWFrfWlmKGY9cj9yLTE6TmFOLHAmJnBbMF0+ZSl7aD1yO2JyZWFrfX1pZihhPXUsaXNOYU4oYSkmJihhPWlzTmFOKGYpfHxpc05hTihoKT9pc05hTihmKT9oOmY6ZS1jW2ZdWzFdPGNbaF1bMF0tZT9mOmgpLCFpc05hTihhKSl7dmFyIGQ9Y1thXSxnPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5iYXIuaGFuZGxlSGVpZ2h0O2lmKCEoZT50WzFdK3J8fGU8dFswXS1yKSlyZXR1cm4gZT49LjkqdFsxXSsuMSp0WzBdPyJuIjplPD0uOSp0WzBdKy4xKnRbMV0/InMiOiJucyJ9KGQsZSk7ZyYmKG8uaW50ZXJ2YWw9bFthXSxvLmludGVydmFsUGl4PWQsby5yZWdpb249Zyl9fWlmKHQub3JkaW5hbCYmIW8ucmVnaW9uKXt2YXIgbT10LnVuaXRUaWNrdmFscyx5PXQudW5pdFRvUGFkZGVkUHguaW52ZXJ0KGUpO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspe3ZhciB4PVsuMjUqbVtNYXRoLm1heChyLTEsMCldKy43NSptW3JdLC4yNSptW01hdGgubWluKHIrMSxtLmxlbmd0aC0xKV0rLjc1Km1bcl1dO2lmKHk+PXhbMF0mJnk8PXhbMV0pe28uY2xpY2thYmxlT3JkaW5hbFJhbmdlPXg7YnJlYWt9fX1yZXR1cm4gb31mdW5jdGlvbiB3KHQsZSl7aS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgcj1lLmhlaWdodC1pLm1vdXNlKHQpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcsYT1lLmJydXNoLnN2Z0JydXNoO2Eud2FzRHJhZ2dlZD0hMCxhLl9kcmFnZ2luZz0hMCxhLmdyYWJiaW5nQmFyP2EubmV3RXh0ZW50PVtyLWEuZ3JhYlBvaW50LHIrYS5iYXJMZW5ndGgtYS5ncmFiUG9pbnRdLm1hcChlLnVuaXRUb1BhZGRlZFB4LmludmVydCk6YS5uZXdFeHRlbnQ9W2Euc3RhcnRFeHRlbnQsZS51bml0VG9QYWRkZWRQeC5pbnZlcnQocildLnNvcnQocyksZS5icnVzaC5maWx0ZXJTcGVjaWZpZWQ9ITAsYS5leHRlbnQ9YS5zdGF5aW5nSW50ZXJ2YWxzLmNvbmNhdChbYS5uZXdFeHRlbnRdKSxhLmJydXNoQ2FsbGJhY2soZSksYih0LnBhcmVudE5vZGUpfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj1fKGUsZS5oZWlnaHQtaS5tb3VzZSh0KVsxXS0yKm4udmVydGljYWxQYWRkaW5nKSxhPSJjcm9zc2hhaXIiO3IuY2xpY2thYmxlT3JkaW5hbFJhbmdlP2E9InBvaW50ZXIiOnIucmVnaW9uJiYoYT1yLnJlZ2lvbisiLXJlc2l6ZSIpLGkuc2VsZWN0KGRvY3VtZW50LmJvZHkpLnN0eWxlKCJjdXJzb3IiLGEpfWZ1bmN0aW9uIGsodCl7dC5vbigibW91c2Vtb3ZlIiwoZnVuY3Rpb24odCl7aS5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLHQucGFyZW50LmluQnJ1c2hEcmFnfHxUKHRoaXMsdCl9KSkub24oIm1vdXNlbGVhdmUiLChmdW5jdGlvbih0KXt0LnBhcmVudC5pbkJydXNoRHJhZ3x8eSgpfSkpLmNhbGwoaS5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIHI9ZS5oZWlnaHQtaS5tb3VzZSh0KVsxXS0yKm4udmVydGljYWxQYWRkaW5nLGE9ZS51bml0VG9QYWRkZWRQeC5pbnZlcnQociksbz1lLmJydXNoLHM9XyhlLHIpLGw9cy5pbnRlcnZhbCxjPW8uc3ZnQnJ1c2g7aWYoYy53YXNEcmFnZ2VkPSExLGMuZ3JhYmJpbmdCYXI9Im5zIj09PXMucmVnaW9uLGMuZ3JhYmJpbmdCYXIpe3ZhciB1PWwubWFwKGUudW5pdFRvUGFkZGVkUHgpO2MuZ3JhYlBvaW50PXItdVswXS1uLnZlcnRpY2FsUGFkZGluZyxjLmJhckxlbmd0aD11WzFdLXVbMF19Yy5jbGlja2FibGVPcmRpbmFsUmFuZ2U9cy5jbGlja2FibGVPcmRpbmFsUmFuZ2UsYy5zdGF5aW5nSW50ZXJ2YWxzPWUubXVsdGlzZWxlY3QmJm8uZmlsdGVyU3BlY2lmaWVkP28uZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpOltdLGwmJihjLnN0YXlpbmdJbnRlcnZhbHM9Yy5zdGF5aW5nSW50ZXJ2YWxzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0hPT1sWzBdJiZ0WzFdIT09bFsxXX0pKSksYy5zdGFydEV4dGVudD1zLnJlZ2lvbj9sWyJzIj09PXMucmVnaW9uPzE6MF06YSxlLnBhcmVudC5pbkJydXNoRHJhZz0hMCxjLmJydXNoU3RhcnRDYWxsYmFjaygpfSh0aGlzLHQpfSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24odCl7dyh0aGlzLHQpfSkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5icnVzaCxuPXIuZmlsdGVyLGE9ci5zdmdCcnVzaDthLl9kcmFnZ2luZ3x8KFQodCxlKSx3KHQsZSksZS5icnVzaC5zdmdCcnVzaC53YXNEcmFnZ2VkPSExKSxhLl9kcmFnZ2luZz0hMSxpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBvPWEuZ3JhYmJpbmdCYXI7aWYoYS5ncmFiYmluZ0Jhcj0hMSxhLmdyYWJMb2NhdGlvbj12b2lkIDAsZS5wYXJlbnQuaW5CcnVzaERyYWc9ITEseSgpLCFhLndhc0RyYWdnZWQpcmV0dXJuIGEud2FzRHJhZ2dlZD12b2lkIDAsYS5jbGlja2FibGVPcmRpbmFsUmFuZ2U/ci5maWx0ZXJTcGVjaWZpZWQmJmUubXVsdGlzZWxlY3Q/YS5leHRlbnQucHVzaChhLmNsaWNrYWJsZU9yZGluYWxSYW5nZSk6KGEuZXh0ZW50PVthLmNsaWNrYWJsZU9yZGluYWxSYW5nZV0sci5maWx0ZXJTcGVjaWZpZWQ9ITApOm8/KGEuZXh0ZW50PWEuc3RheWluZ0ludGVydmFscywwPT09YS5leHRlbnQubGVuZ3RoJiZBKHIpKTpBKHIpLGEuYnJ1c2hDYWxsYmFjayhlKSxiKHQucGFyZW50Tm9kZSksdm9pZCBhLmJydXNoRW5kQ2FsbGJhY2soci5maWx0ZXJTcGVjaWZpZWQ/bi5nZXRDb25zb2xpZGF0ZWQoKTpbXSk7dmFyIHM9ZnVuY3Rpb24oKXtuLnNldChuLmdldENvbnNvbGlkYXRlZCgpKX07aWYoZS5vcmRpbmFsKXt2YXIgbD1lLnVuaXRUaWNrdmFscztsW2wubGVuZ3RoLTFdPGxbMF0mJmwucmV2ZXJzZSgpLGEubmV3RXh0ZW50PVtwKDAsbCxhLm5ld0V4dGVudFswXSxhLnN0YXlpbmdJbnRlcnZhbHMpLHAoMSxsLGEubmV3RXh0ZW50WzFdLGEuc3RheWluZ0ludGVydmFscyldO3ZhciBjPWEubmV3RXh0ZW50WzFdPmEubmV3RXh0ZW50WzBdO2EuZXh0ZW50PWEuc3RheWluZ0ludGVydmFscy5jb25jYXQoYz9bYS5uZXdFeHRlbnRdOltdKSxhLmV4dGVudC5sZW5ndGh8fEEociksYS5icnVzaENhbGxiYWNrKGUpLGM/Yih0LnBhcmVudE5vZGUscyk6KHMoKSxiKHQucGFyZW50Tm9kZSkpfWVsc2UgcygpO2EuYnJ1c2hFbmRDYWxsYmFjayhyLmZpbHRlclNwZWNpZmllZD9uLmdldENvbnNvbGlkYXRlZCgpOltdKX0odGhpcyx0KX0pKSl9ZnVuY3Rpb24gTSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gQSh0KXt0LmZpbHRlclNwZWNpZmllZD0hMSx0LnN2Z0JydXNoLmV4dGVudD1bWy0xLzAsMS8wXV19ZnVuY3Rpb24gUyh0KXtmb3IodmFyIGUscj10LnNsaWNlKCksbj1bXSxpPXIuc2hpZnQoKTtpOyl7Zm9yKGU9aS5zbGljZSgpOyhpPXIuc2hpZnQoKSkmJmlbMF08PWVbMV07KWVbMV09TWF0aC5tYXgoZVsxXSxpWzFdKTtuLnB1c2goZSl9cmV0dXJuIDE9PT1uLmxlbmd0aCYmblswXVswXT5uWzBdWzFdJiYobj1bXSksbn1lLmV4cG9ydHM9e21ha2VCcnVzaDpmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8sbD1mdW5jdGlvbigpe3ZhciB0LGUscj1bXTtyZXR1cm57c2V0OmZ1bmN0aW9uKG4pezE9PT0ocj1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKS5zb3J0KHMpfSkpLnNvcnQoTSkpLmxlbmd0aCYmclswXVswXT09PS0xLzAmJnJbMF1bMV09PT0xLzAmJihyPVtbMCwtMV1dKSx0PVMociksZT1yLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm5bTWF0aC5taW4odFswXSxlWzBdKSxNYXRoLm1heCh0WzFdLGVbMV0pXX0pLFsxLzAsLTEvMF0pfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxnZXRDb25zb2xpZGF0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGV9fX0oKTtyZXR1cm4gbC5zZXQocikse2ZpbHRlcjpsLGZpbHRlclNwZWNpZmllZDplLHN2Z0JydXNoOntleHRlbnQ6W10sYnJ1c2hTdGFydENhbGxiYWNrOm4sYnJ1c2hDYWxsYmFjazoobz1pLGZ1bmN0aW9uKHQpe3ZhciBlPXQuYnJ1c2gscj1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdCcnVzaC5leHRlbnQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkpfShlKS5zbGljZSgpO2UuZmlsdGVyLnNldChyKSxvKCl9KSxicnVzaEVuZENhbGxiYWNrOmF9fX0sZW5zdXJlQXhpc0JydXNoOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuIituLmNuLmF4aXNCcnVzaCkuZGF0YShvLGEpO2UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uYXhpc0JydXNoLCEwKSxmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLmJhY2tncm91bmQiKS5kYXRhKG8pO2UuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJiYWNrZ3JvdW5kIiwhMCkuY2FsbChkKS5jYWxsKGcpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKS5hdHRyKCJ0cmFuc2Zvcm0iLGwoMCxuLnZlcnRpY2FsUGFkZGluZykpLGUuY2FsbChrKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQtbi52ZXJ0aWNhbFBhZGRpbmd9KSk7dmFyIHI9dC5zZWxlY3RBbGwoIi5oaWdobGlnaHQtc2hhZG93IikuZGF0YShvKTtyLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiaGlnaGxpZ2h0LXNoYWRvdyIsITApLmF0dHIoIngiLC1uLmJhci53aWR0aC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLG4uYmFyLndpZHRoK24uYmFyLnN0cm9rZVdpZHRoKS5hdHRyKCJzdHJva2UiLG4uYmFyLnN0cm9rZUNvbG9yKS5hdHRyKCJvcGFjaXR5IixuLmJhci5zdHJva2VPcGFjaXR5KS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKSxyLmF0dHIoInkxIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLmNhbGwoeCk7dmFyIGk9dC5zZWxlY3RBbGwoIi5oaWdobGlnaHQiKS5kYXRhKG8pO2kuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJoaWdobGlnaHQiLCEwKS5hdHRyKCJ4Iiwtbi5iYXIud2lkdGgvMikuYXR0cigic3Ryb2tlLXdpZHRoIixuLmJhci53aWR0aC1uLmJhci5zdHJva2VXaWR0aCkuYXR0cigic3Ryb2tlIixuLmJhci5maWxsQ29sb3IpLmF0dHIoIm9wYWNpdHkiLG4uYmFyLmZpbGxPcGFjaXR5KS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKSxpLmF0dHIoInkxIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLmNhbGwoeCl9KGUpfSxjbGVhblJhbmdlczpmdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodFswXSk/KHQ9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvcnQocyl9KSksdD1lLm11bHRpc2VsZWN0P1ModC5zb3J0KE0pKTpbdFswXV0pOnQ9W3Quc29ydChzKV0sZS50aWNrdmFscyl7dmFyIHI9ZS50aWNrdmFscy5zbGljZSgpLnNvcnQocyk7aWYoISh0PXQubWFwKChmdW5jdGlvbih0KXt2YXIgZT1bcCgwLHIsdFswXSxbXSkscCgxLHIsdFsxXSxbXSldO2lmKGVbMV0+ZVswXSlyZXR1cm4gZX0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpKS5sZW5ndGgpcmV0dXJufXJldHVybiB0Lmxlbmd0aD4xP3Q6dFswXX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvZ3VwIjo3NzUsIi4vY29uc3RhbnRzIjoxMTUzLGQzOjE2OX1dLDExNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KCIuL3Bsb3QiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ci5uYW1lPSJwYXJjb29yZHMiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQuY2FsY2RhdGEsInBhcmNvb3JkcyIpWzBdO2UubGVuZ3RoJiZhKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInBhcmNvb3JkcyIpLGE9ZS5faGFzJiZlLl9oYXMoInBhcmNvb3JkcyIpO2kmJiFhJiYobi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIucGFyY29vcmRzIikucmVtb3ZlKCksbi5fZ2xpbWFnZXMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKChmdW5jdGlvbih0LGUpe3JldHVybiBlPT09ci5zaXplKCktMX0pKS5zZWxlY3RBbGwoIi5nbC1jYW52YXMtY29udGV4dCwgLmdsLWNhbnZhcy1mb2N1cyIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2UuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSl9KSksd2luZG93LnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bi5zZWxlY3RBbGwoIiNmaWx0ZXJCYXJQYXR0ZXJuIikuYXR0cigiaWQiLCJmaWx0ZXJCYXJQYXR0ZXJuIil9KSw2MCl9fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTQsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4NjUsIi4vcGxvdCI6MTE2MCxkMzoxNjl9XSwxMTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxhPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG87cmV0dXJuIGkuaGFzQ29sb3JzY2FsZShlLCJsaW5lIikmJm4oZS5saW5lLmNvbG9yKT8ocj1lLmxpbmUuY29sb3Isbz1pLmV4dHJhY3RPcHRzKGUubGluZSkuY29sb3JzY2FsZSxpLmNhbGModCxlLHt2YWxzOnIsY29udGFpbmVyU3RyOiJsaW5lIixjTGV0dGVyOiJjIn0pKToocj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09LjU7cmV0dXJuIGV9KGUuX2xlbmd0aCksbz1bWzAsZS5saW5lLmNvbG9yXSxbMSxlLmxpbmUuY29sb3JdXSksYSh7bGluZUNvbG9yOnIsY3NjYWxlOm99KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvZ3VwIjo3NzV9XSwxMTUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bWF4RGltZW5zaW9uQ291bnQ6NjAsb3ZlcmRyYWc6NDUsdmVydGljYWxQYWRkaW5nOjIsdGlja0Rpc3RhbmNlOjUwLGNhbnZhc1BpeGVsUmF0aW86MSxibG9ja0xpbmVDb3VudDo1ZTMsbGF5ZXJzOlsiY29udGV4dExpbmVMYXllciIsImZvY3VzTGluZUxheWVyIiwicGlja0xpbmVMYXllciJdLGF4aXNUaXRsZU9mZnNldDoyOCxheGlzRXh0ZW50T2Zmc2V0OjEwLGRlc2VsZWN0ZWRMaW5lQ29sb3I6IiM3NzciLGJhcjp7d2lkdGg6NCxjYXB0dXJlV2lkdGg6MTAsZmlsbENvbG9yOiJtYWdlbnRhIixmaWxsT3BhY2l0eToxLHNuYXBEdXJhdGlvbjoxNTAsc25hcFJhdGlvOi4yNSxzbmFwQ2xvc2U6LjAxLHN0cm9rZUNvbG9yOiJ3aGl0ZSIsc3Ryb2tlT3BhY2l0eToxLHN0cm9rZVdpZHRoOjEsaGFuZGxlSGVpZ2h0OjgsaGFuZGxlT3BhY2l0eToxLGhhbmRsZU92ZXJsYXA6MH0sY246e2F4aXNFeHRlbnRUZXh0OiJheGlzLWV4dGVudC10ZXh0IixwYXJjb29yZHNMaW5lTGF5ZXJzOiJwYXJjb29yZHMtbGluZS1sYXllcnMiLHBhcmNvb3Jkc0xpbmVMYXllcjoicGFyY29vcmRzLWxpbmVzIixwYXJjb29yZHM6InBhcmNvb3JkcyIscGFyY29vcmRzQ29udHJvbFZpZXc6InBhcmNvb3Jkcy1jb250cm9sLXZpZXciLHlBeGlzOiJ5LWF4aXMiLGF4aXNPdmVybGF5czoiYXhpcy1vdmVybGF5cyIsYXhpczoiYXhpcyIsYXhpc0hlYWRpbmc6ImF4aXMtaGVhZGluZyIsYXhpc1RpdGxlOiJheGlzLXRpdGxlIixheGlzRXh0ZW50OiJheGlzLWV4dGVudCIsYXhpc0V4dGVudFRvcDoiYXhpcy1leHRlbnQtdG9wIixheGlzRXh0ZW50VG9wVGV4dDoiYXhpcy1leHRlbnQtdG9wLXRleHQiLGF4aXNFeHRlbnRCb3R0b206ImF4aXMtZXh0ZW50LWJvdHRvbSIsYXhpc0V4dGVudEJvdHRvbVRleHQ6ImF4aXMtZXh0ZW50LWJvdHRvbS10ZXh0IixheGlzQnJ1c2g6ImF4aXMtYnJ1c2gifSxpZDp7ZmlsdGVyQmFyUGF0dGVybjoiZmlsdGVyLWJhci1wYXR0ZXJuIn19fSx7fV0sMTE1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMscz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYz10KCIuL2F0dHJpYnV0ZXMiKSx1PXQoIi4vYXhpc2JydXNoIiksZj10KCIuL2NvbnN0YW50cyIpLm1heERpbWVuc2lvbkNvdW50LGg9dCgiLi9tZXJnZV9sZW5ndGgiKTtmdW5jdGlvbiBwKHQsZSxyLGkpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMuZGltZW5zaW9ucyxyLGkpfXZhciBvPWEoInZhbHVlcyIpLHM9YSgidmlzaWJsZSIpO2lmKG8mJm8ubGVuZ3RofHwocz1lLnZpc2libGU9ITEpLHMpe2EoImxhYmVsIiksYSgidGlja3ZhbHMiKSxhKCJ0aWNrdGV4dCIpLGEoInRpY2tmb3JtYXQiKTt2YXIgZj1hKCJyYW5nZSIpO2UuX2F4PXtfaWQ6InkiLHR5cGU6ImxpbmVhciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIixyYW5nZTpmfSxsLnNldENvbnZlcnQoZS5fYXgsaS5sYXlvdXQpLGEoIm11bHRpc2VsZWN0Iik7dmFyIGg9YSgiY29uc3RyYWludHJhbmdlIik7aCYmKGUuY29uc3RyYWludHJhbmdlPXUuY2xlYW5SYW5nZXMoaCxlKSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiB1KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9dmFyIGQ9dC5kaW1lbnNpb25zO0FycmF5LmlzQXJyYXkoZCkmJmQubGVuZ3RoPmYmJihuLmxvZygicGFyY29vcmRzIHRyYWNlcyBzdXBwb3J0IHVwIHRvICIrZisiIGRpbWVuc2lvbnMgYXQgdGhlIG1vbWVudCIpLGQuc3BsaWNlKGYpKTt2YXIgZz1zKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsbGF5b3V0OmwsaGFuZGxlSXRlbURlZmF1bHRzOnB9KSxtPWZ1bmN0aW9uKHQsZSxyLG8scyl7dmFyIGw9cygibGluZS5jb2xvciIscik7aWYoaSh0LCJsaW5lIikmJm4uaXNBcnJheU9yVHlwZWRBcnJheShsKSl7aWYobC5sZW5ndGgpcmV0dXJuIHMoImxpbmUuY29sb3JzY2FsZSIpLGEodCxlLG8scyx7cHJlZml4OiJsaW5lLiIsY0xldHRlcjoiYyJ9KSxsLmxlbmd0aDtlLmxpbmUuY29sb3I9cn1yZXR1cm4gMS8wfSh0LGUscixsLHUpO28oZSxsLHUpLEFycmF5LmlzQXJyYXkoZykmJmcubGVuZ3RofHwoZS52aXNpYmxlPSExKSxoKGUsZywidmFsdWVzIixtKTt2YXIgdj17ZmFtaWx5OmwuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGwuZm9udC5zaXplLzEuMiksY29sb3I6bC5mb250LmNvbG9yfTtuLmNvZXJjZUZvbnQodSwibGFiZWxmb250Iix2KSxuLmNvZXJjZUZvbnQodSwidGlja2ZvbnQiLHYpLG4uY29lcmNlRm9udCh1LCJyYW5nZWZvbnQiLHYpLHUoImxhYmVsYW5nbGUiKSx1KCJsYWJlbHNpZGUiKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NTMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2NTQsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjgyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4vYXR0cmlidXRlcyI6MTE0OSwiLi9heGlzYnJ1c2giOjExNTAsIi4vY29uc3RhbnRzIjoxMTUzLCIuL21lcmdlX2xlbmd0aCI6MTE1OH1dLDExNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNUeXBlZEFycmF5O3IuY29udmVydFR5cGVkQXJyYXk9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCk/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCk6dH0sci5pc09yZGluYWw9ZnVuY3Rpb24odCl7cmV0dXJuISF0LnRpY2t2YWxzfSxyLmlzVmlzaWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlfHwhKCJ2aXNpYmxlImluIHQpfX0seyIuLi8uLi9saWIiOjc3OH1dLDExNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6e2NvbnRhaW5lcjoibGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToicGFyY29vcmRzIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJub09wYWNpdHkiLCJub0hvdmVyIl0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjoxMTQ5LCIuL2Jhc2VfcGxvdCI6MTE1MSwiLi9jYWxjIjoxMTUyLCIuL2RlZmF1bHRzIjoxMTU0LCIuL3Bsb3QiOjExNjB9XSwxMTU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5hdHRyaWJ1dGUgdmVjNCBwMDFfMDQsIHAwNV8wOCwgcDA5XzEyLCBwMTNfMTYsXG4gICAgICAgICAgICAgICBwMTdfMjAsIHAyMV8yNCwgcDI1XzI4LCBwMjlfMzIsXG4gICAgICAgICAgICAgICBwMzNfMzYsIHAzN180MCwgcDQxXzQ0LCBwNDVfNDgsXG4gICAgICAgICAgICAgICBwNDlfNTIsIHA1M181NiwgcDU3XzYwLCBjb2xvcnM7XG5cbnVuaWZvcm0gbWF0NCBkaW0wQSwgZGltMUEsIGRpbTBCLCBkaW0xQiwgZGltMEMsIGRpbTFDLCBkaW0wRCwgZGltMUQsXG4gICAgICAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQ7XG5cbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLCB2aWV3Qm94UG9zLCB2aWV3Qm94U2l6ZTtcbnVuaWZvcm0gc2FtcGxlcjJEIG1hc2ssIHBhbGV0dGU7XG51bmlmb3JtIGZsb2F0IG1hc2tIZWlnaHQ7XG51bmlmb3JtIGZsb2F0IGRyd0xheWVyOyAvLyAwOiBjb250ZXh0LCAxOiBmb2N1cywgMjogcGlja1xudW5pZm9ybSB2ZWM0IGNvbnRleHRDb2xvcjtcblxuYm9vbCBpc1BpY2sgICAgPSAoZHJ3TGF5ZXIgPiAxLjUpO1xuYm9vbCBpc0NvbnRleHQgPSAoZHJ3TGF5ZXIgPCAwLjUpO1xuXG5jb25zdCB2ZWM0IFpFUk9TID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuY29uc3QgdmVjNCBVTklUUyA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIFVOSVRTLCBVTklUUyk7XG59XG5cbmZsb2F0IGF4aXNZKGZsb2F0IHJhdGlvLCBtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICBmbG9hdCB5MSA9IHZhbChBLCBkaW0wQSkgKyB2YWwoQiwgZGltMEIpICsgdmFsKEMsIGRpbTBDKSArIHZhbChELCBkaW0wRCk7XG4gICAgZmxvYXQgeTIgPSB2YWwoQSwgZGltMUEpICsgdmFsKEIsIGRpbTFCKSArIHZhbChDLCBkaW0xQykgKyB2YWwoRCwgZGltMUQpO1xuICAgIHJldHVybiB5MSAqICgxLjAgLSByYXRpbykgKyB5MiAqIHJhdGlvO1xufVxuXG5pbnQgaU1vZChpbnQgYSwgaW50IGIpIHtcbiAgICByZXR1cm4gYSAtIGIgKiAoYSAvIGIpO1xufVxuXG5ib29sIGZPdXRzaWRlKGZsb2F0IHAsIGZsb2F0IGxvLCBmbG9hdCBoaSkge1xuICAgIHJldHVybiAobG8gPCBoaSkgJiYgKGxvID4gcCB8fCBwID4gaGkpO1xufVxuXG5ib29sIHZPdXRzaWRlKHZlYzQgcCwgdmVjNCBsbywgdmVjNCBoaSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIGZPdXRzaWRlKHBbMF0sIGxvWzBdLCBoaVswXSkgfHxcbiAgICAgICAgZk91dHNpZGUocFsxXSwgbG9bMV0sIGhpWzFdKSB8fFxuICAgICAgICBmT3V0c2lkZShwWzJdLCBsb1syXSwgaGlbMl0pIHx8XG4gICAgICAgIGZPdXRzaWRlKHBbM10sIGxvWzNdLCBoaVszXSlcbiAgICApO1xufVxuXG5ib29sIG1PdXRzaWRlKG1hdDQgcCwgbWF0NCBsbywgbWF0NCBoaSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIHZPdXRzaWRlKHBbMF0sIGxvWzBdLCBoaVswXSkgfHxcbiAgICAgICAgdk91dHNpZGUocFsxXSwgbG9bMV0sIGhpWzFdKSB8fFxuICAgICAgICB2T3V0c2lkZShwWzJdLCBsb1syXSwgaGlbMl0pIHx8XG4gICAgICAgIHZPdXRzaWRlKHBbM10sIGxvWzNdLCBoaVszXSlcbiAgICApO1xufVxuXG5ib29sIG91dHNpZGVCb3VuZGluZ0JveChtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICByZXR1cm4gbU91dHNpZGUoQSwgbG9BLCBoaUEpIHx8XG4gICAgICAgICAgIG1PdXRzaWRlKEIsIGxvQiwgaGlCKSB8fFxuICAgICAgICAgICBtT3V0c2lkZShDLCBsb0MsIGhpQykgfHxcbiAgICAgICAgICAgbU91dHNpZGUoRCwgbG9ELCBoaUQpO1xufVxuXG5ib29sIG91dHNpZGVSYXN0ZXJNYXNrKG1hdDQgQSwgbWF0NCBCLCBtYXQ0IEMsIG1hdDQgRCkge1xuICAgIG1hdDQgcG50c1s0XTtcbiAgICBwbnRzWzBdID0gQTtcbiAgICBwbnRzWzFdID0gQjtcbiAgICBwbnRzWzJdID0gQztcbiAgICBwbnRzWzNdID0gRDtcblxuICAgIGZvcihpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IDQ7ICsraikge1xuICAgICAgICAgICAgZm9yKGludCBrID0gMDsgayA8IDQ7ICsraykge1xuICAgICAgICAgICAgICAgIGlmKDAgPT0gaU1vZChcbiAgICAgICAgICAgICAgICAgICAgaW50KDI1NS4wICogdGV4dHVyZTJEKG1hc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZWMyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdChpICogMiArIGogLyAyKSArIDAuNSkgLyA4LjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBudHNbaV1bal1ba10gKiAobWFza0hlaWdodCAtIDEuMCkgKyAxLjApIC8gbWFza0hlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgKSlbM11cbiAgICAgICAgICAgICAgICAgICAgKSAvIGludChwb3coMi4wLCBmbG9hdChpTW9kKGogKiA0ICsgaywgOCkpKSksXG4gICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICApKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZlYzQgcG9zaXRpb24oYm9vbCBpc0NvbnRleHQsIGZsb2F0IHYsIG1hdDQgQSwgbWF0NCBCLCBtYXQ0IEMsIG1hdDQgRCkge1xuICAgIGZsb2F0IHggPSAwLjUgKiBzaWduKHYpICsgMC41O1xuICAgIGZsb2F0IHkgPSBheGlzWSh4LCBBLCBCLCBDLCBEKTtcbiAgICBmbG9hdCB6ID0gMS4wIC0gYWJzKHYpO1xuXG4gICAgeiArPSBpc0NvbnRleHQgPyAwLjAgOiAyLjAgKiBmbG9hdChcbiAgICAgICAgb3V0c2lkZUJvdW5kaW5nQm94KEEsIEIsIEMsIEQpIHx8XG4gICAgICAgIG91dHNpZGVSYXN0ZXJNYXNrKEEsIEIsIEMsIEQpXG4gICAgKTtcblxuICAgIHJldHVybiB2ZWM0KFxuICAgICAgICAyLjAgKiAodmVjMih4LCB5KSAqIHZpZXdCb3hTaXplICsgdmlld0JveFBvcykgLyByZXNvbHV0aW9uIC0gMS4wLFxuICAgICAgICB6LFxuICAgICAgICAxLjBcbiAgICApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gICAgbWF0NCBBID0gbWF0NChwMDFfMDQsIHAwNV8wOCwgcDA5XzEyLCBwMTNfMTYpO1xuICAgIG1hdDQgQiA9IG1hdDQocDE3XzIwLCBwMjFfMjQsIHAyNV8yOCwgcDI5XzMyKTtcbiAgICBtYXQ0IEMgPSBtYXQ0KHAzM18zNiwgcDM3XzQwLCBwNDFfNDQsIHA0NV80OCk7XG4gICAgbWF0NCBEID0gbWF0NChwNDlfNTIsIHA1M181NiwgcDU3XzYwLCBaRVJPUyk7XG5cbiAgICBmbG9hdCB2ID0gY29sb3JzWzNdO1xuXG4gICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbihpc0NvbnRleHQsIHYsIEEsIEIsIEMsIEQpO1xuXG4gICAgZnJhZ0NvbG9yID1cbiAgICAgICAgaXNDb250ZXh0ID8gdmVjNChjb250ZXh0Q29sb3IpIDpcbiAgICAgICAgaXNQaWNrID8gdmVjNChjb2xvcnMucmdiLCAxLjApIDogdGV4dHVyZTJEKHBhbGV0dGUsIHZlYzIoYWJzKHYpLCAwLjUpKTtcbn1cbiJdKSxhPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xufVxuIl0pLG89dCgiLi9jb25zdGFudHMiKS5tYXhEaW1lbnNpb25Db3VudCxzPXQoIi4uLy4uL2xpYiIpLGw9bmV3IFVpbnQ4QXJyYXkoNCksYz1uZXcgVWludDhBcnJheSg0KSx1PXtzaGFwZTpbMjU2LDFdLGZvcm1hdDoicmdiYSIsdHlwZToidWludDgiLG1hZzoibmVhcmVzdCIsbWluOiJuZWFyZXN0In07ZnVuY3Rpb24gZih0LGUscixuLGkpe3ZhciBhPXQuX2dsO2EuZW5hYmxlKGEuU0NJU1NPUl9URVNUKSxhLnNjaXNzb3IoZSxyLG4saSksdC5jbGVhcih7Y29sb3I6WzAsMCwwLDBdLGRlcHRoOjF9KX1mdW5jdGlvbiBoKHQsZSxyLG4saSxhKXt2YXIgbz1hLmtleTtyLmRyYXdDb21wbGV0ZWR8fCghZnVuY3Rpb24odCl7dC5yZWFkKHt4OjAseTowLHdpZHRoOjEsaGVpZ2h0OjEsZGF0YTpsfSl9KHQpLHIuZHJhd0NvbXBsZXRlZD0hMCksZnVuY3Rpb24gcyhsKXt2YXIgYz1NYXRoLm1pbihuLGktbCpuKTswPT09bCYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyLmN1cnJlbnRSYWZzW29dKSxkZWxldGUgci5jdXJyZW50UmFmc1tvXSxmKHQsYS5zY2lzc29yWCxhLnNjaXNzb3JZLGEuc2Npc3NvcldpZHRoLGEudmlld0JveFNpemVbMV0pKSxyLmNsZWFyT25seXx8KGEuY291bnQ9MipjLGEub2Zmc2V0PTIqbCpuLGUoYSksbCpuK2M8aSYmKHIuY3VycmVudFJhZnNbb109d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXtzKGwrMSl9KSkpLHIuZHJhd0NvbXBsZXRlZD0hMSl9KDApfWZ1bmN0aW9uIHAodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KDI1Niksbj0wO248MjU2O24rKylyW25dPXQobi8yNTUpLmNvbmNhdChlKTtyZXR1cm4gcn1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuKHQ+Pj44KmUpJTI1Ni8yNTV9ZnVuY3Rpb24gZyh0LGUscil7Zm9yKHZhciBuPW5ldyBBcnJheSg4KmUpLGk9MCxhPTA7YTxlO2ErKylmb3IodmFyIG89MDtvPDI7bysrKWZvcih2YXIgcz0wO3M8NDtzKyspe3ZhciBsPTQqdCtzLGM9cls2NCphK2xdOzYzPT09bCYmMD09PW8mJihjKj0tMSksbltpKytdPWN9cmV0dXJuIG59ZnVuY3Rpb24gbSh0KXt2YXIgZT0iMCIrdDtyZXR1cm4gZS5zdWJzdHIoZS5sZW5ndGgtMil9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdDxvPyJwIittKHQrMSkrIl8iK20odCs0KToiY29sb3JzIn1mdW5jdGlvbiB5KHQsZSxyLG4saSxhLG8sbCxjLHUsZixoLHApe2Zvcih2YXIgZD1bW10sW11dLGc9MDtnPDY0O2crKylkWzBdW2ddPWc9PT1pPzE6MCxkWzFdW2ddPWc9PT1hPzE6MDt2YXIgbT10LmxpbmVzLmNhbnZhc092ZXJkcmFnLHY9dC5kb21haW4seT10LmNhbnZhc1dpZHRoLHg9dC5jYW52YXNIZWlnaHQsYj10LmRlc2VsZWN0ZWRMaW5lcy5jb2xvcjtyZXR1cm4gcy5leHRlbmRGbGF0KHtrZXk6ZixyZXNvbHV0aW9uOlt5LHhdLHZpZXdCb3hQb3M6W28rbSxsXSx2aWV3Qm94U2l6ZTpbYyx1XSxpMDppLGkxOmEsZGltMEE6ZFswXS5zbGljZSgwLDE2KSxkaW0wQjpkWzBdLnNsaWNlKDE2LDMyKSxkaW0wQzpkWzBdLnNsaWNlKDMyLDQ4KSxkaW0wRDpkWzBdLnNsaWNlKDQ4LDY0KSxkaW0xQTpkWzFdLnNsaWNlKDAsMTYpLGRpbTFCOmRbMV0uc2xpY2UoMTYsMzIpLGRpbTFDOmRbMV0uc2xpY2UoMzIsNDgpLGRpbTFEOmRbMV0uc2xpY2UoNDgsNjQpLGRyd0xheWVyOmgsY29udGV4dENvbG9yOltiWzBdLzI1NSxiWzFdLzI1NSxiWzJdLzI1NSxiWzNdPDE/YlszXTpNYXRoLm1heCgxLzI1NSxNYXRoLnBvdygxL3QubGluZXMuY29sb3IubGVuZ3RoLDEvMykpXSxzY2lzc29yWDoobj09PWU/MDpvK20pKyh0LnBhZC5sLW0pK3QubGF5b3V0V2lkdGgqdi54WzBdLHNjaXNzb3JXaWR0aDoobj09PXI/eS1vK206YysuNSkrKG49PT1lP28rbTowKSxzY2lzc29yWTpsK3QucGFkLmIrdC5sYXlvdXRIZWlnaHQqdi55WzBdLHNjaXNzb3JIZWlnaHQ6dSx2aWV3cG9ydFg6dC5wYWQubC1tK3QubGF5b3V0V2lkdGgqdi54WzBdLHZpZXdwb3J0WTp0LnBhZC5iK3QubGF5b3V0SGVpZ2h0KnYueVswXSx2aWV3cG9ydFdpZHRoOnksdmlld3BvcnRIZWlnaHQ6eH0scCl9ZnVuY3Rpb24geCh0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGguZmxvb3IoMjA0Nyp0WzBdKSwwKSxyPU1hdGgubWluKDIwNDcsTWF0aC5jZWlsKDIwNDcqdFsxXSksMjA0Nyk7cmV0dXJuW01hdGgubWluKGUsciksTWF0aC5tYXgoZSxyKV19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixsLG0sYixfPWUuY29udGV4dCx3PWUucGljayxUPWUucmVnbCxrPXtjdXJyZW50UmFmczp7fSxkcmF3Q29tcGxldGVkOiEwLGNsZWFyT25seTohMX0sTT1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj0wO3I8PW87cis9NCllW3YocildPXQuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KTtyZXR1cm4gZX0oVCksQT1ULnRleHR1cmUodSksUz1bXTtDKGUpO3ZhciBFPVQoe3Byb2ZpbGU6ITEsYmxlbmQ6e2VuYWJsZTpfLGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOjEsZHN0QWxwaGE6MX0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sY29sb3I6WzAsMCwwLDBdfSxkZXB0aDp7ZW5hYmxlOiFfLG1hc2s6ITAsZnVuYzoibGVzcyIscmFuZ2U6WzAsMV19LGN1bGw6e2VuYWJsZTohMCxmYWNlOiJiYWNrIn0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp7eDpULnByb3AoInNjaXNzb3JYIikseTpULnByb3AoInNjaXNzb3JZIiksd2lkdGg6VC5wcm9wKCJzY2lzc29yV2lkdGgiKSxoZWlnaHQ6VC5wcm9wKCJzY2lzc29ySGVpZ2h0Iil9fSx2aWV3cG9ydDp7eDpULnByb3AoInZpZXdwb3J0WCIpLHk6VC5wcm9wKCJ2aWV3cG9ydFkiKSx3aWR0aDpULnByb3AoInZpZXdwb3J0V2lkdGgiKSxoZWlnaHQ6VC5wcm9wKCJ2aWV3cG9ydEhlaWdodCIpfSxkaXRoZXI6ITEsdmVydDppLGZyYWc6YSxwcmltaXRpdmU6ImxpbmVzIixsaW5lV2lkdGg6MSxhdHRyaWJ1dGVzOk0sdW5pZm9ybXM6e3Jlc29sdXRpb246VC5wcm9wKCJyZXNvbHV0aW9uIiksdmlld0JveFBvczpULnByb3AoInZpZXdCb3hQb3MiKSx2aWV3Qm94U2l6ZTpULnByb3AoInZpZXdCb3hTaXplIiksZGltMEE6VC5wcm9wKCJkaW0wQSIpLGRpbTFBOlQucHJvcCgiZGltMUEiKSxkaW0wQjpULnByb3AoImRpbTBCIiksZGltMUI6VC5wcm9wKCJkaW0xQiIpLGRpbTBDOlQucHJvcCgiZGltMEMiKSxkaW0xQzpULnByb3AoImRpbTFDIiksZGltMEQ6VC5wcm9wKCJkaW0wRCIpLGRpbTFEOlQucHJvcCgiZGltMUQiKSxsb0E6VC5wcm9wKCJsb0EiKSxoaUE6VC5wcm9wKCJoaUEiKSxsb0I6VC5wcm9wKCJsb0IiKSxoaUI6VC5wcm9wKCJoaUIiKSxsb0M6VC5wcm9wKCJsb0MiKSxoaUM6VC5wcm9wKCJoaUMiKSxsb0Q6VC5wcm9wKCJsb0QiKSxoaUQ6VC5wcm9wKCJoaUQiKSxwYWxldHRlOkEsY29udGV4dENvbG9yOlQucHJvcCgiY29udGV4dENvbG9yIiksbWFzazpULnByb3AoIm1hc2tUZXh0dXJlIiksZHJ3TGF5ZXI6VC5wcm9wKCJkcndMYXllciIpLG1hc2tIZWlnaHQ6VC5wcm9wKCJtYXNrSGVpZ2h0Iil9LG9mZnNldDpULnByb3AoIm9mZnNldCIpLGNvdW50OlQucHJvcCgiY291bnQiKX0pO2Z1bmN0aW9uIEModCl7cj10Lm1vZGVsLG49dC52aWV3TW9kZWwsbD1uLmRpbWVuc2lvbnMuc2xpY2UoKSxtPWxbMF0/bFswXS52YWx1ZXMubGVuZ3RoOjA7dmFyIGU9ci5saW5lcyxpPXc/ZS5jb2xvci5tYXAoKGZ1bmN0aW9uKHQscil7cmV0dXJuIHIvZS5jb2xvci5sZW5ndGh9KSk6ZS5jb2xvcixhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1uZXcgQXJyYXkodCoobys0KSksYT0wLHM9MDtzPHQ7cysrKXtmb3IodmFyIGw9MDtsPG87bCsrKWlbYSsrXT1sPGUubGVuZ3RoP2VbbF0ucGFkZGVkVW5pdFZhbHVlc1tzXTouNTtpW2ErK109ZChzLDIpLGlbYSsrXT1kKHMsMSksaVthKytdPWQocywwKSxpW2ErK109KG49cltzXSxNYXRoLm1heCgxZS02LE1hdGgubWluKC45OTk5OTksbikpKX1yZXR1cm4gaX0obSxsLGkpOyFmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjw9bztuKz00KXRbdihuKV0oZyhuLzQsZSxyKSl9KE0sbSxhKSxffHx3fHwoQT1ULnRleHR1cmUocy5leHRlbmRGbGF0KHtkYXRhOnAoci51bml0VG9Db2xvciwyNTUpfSx1KSkpfXJldHVybntyZW5kZXI6ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzPXQubGVuZ3RoLGM9MS8wLHU9LTEvMDtmb3IoaT0wO2k8cztpKyspdFtpXS5kaW0wLmNhbnZhc1g8YyYmKGM9dFtpXS5kaW0wLmNhbnZhc1gsYT1pKSx0W2ldLmRpbTEuY2FudmFzWD51JiYodT10W2ldLmRpbTEuY2FudmFzWCxvPWkpOzA9PT1zJiZmKFQsMCwwLHIuY2FudmFzV2lkdGgsci5jYW52YXNIZWlnaHQpO3ZhciBwPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtbXSxbXV07Zm9yKG49MDtuPDY0O24rKyl7dmFyIGE9IXQmJm48bC5sZW5ndGg/bFtuXS5icnVzaC5maWx0ZXIuZ2V0Qm91bmRzKCk6Wy0xLzAsMS8wXTtpWzBdW25dPWFbMF0saVsxXVtuXT1hWzFdfXZhciBvPW5ldyBBcnJheSgxNjM4NCk7Zm9yKGU9MDtlPDE2Mzg0O2UrKylvW2VdPTI1NTtpZighdClmb3IoZT0wO2U8bC5sZW5ndGg7ZSsrKXt2YXIgcz1lJTgsYz0oZS1zKS84LHU9TWF0aC5wb3coMixzKSxmPWxbZV0uYnJ1c2guZmlsdGVyLmdldCgpO2lmKCEoZi5sZW5ndGg8Mikpe3ZhciBoPXgoZlswXSlbMV07Zm9yKHI9MTtyPGYubGVuZ3RoO3IrKyl7dmFyIHA9eChmW3JdKTtmb3Iobj1oKzE7bjxwWzBdO24rKylvWzgqbitjXSY9fnU7aD1NYXRoLm1heChoLHBbMV0pfX19dmFyIGQ9e3NoYXBlOls4LDIwNDhdLGZvcm1hdDoiYWxwaGEiLHR5cGU6InVpbnQ4IixtYWc6Im5lYXJlc3QiLG1pbjoibmVhcmVzdCIsZGF0YTpvfTtyZXR1cm4gYj9iKGQpOmI9VC50ZXh0dXJlKGQpLHttYXNrVGV4dHVyZTpiLG1hc2tIZWlnaHQ6MjA0OCxsb0E6aVswXS5zbGljZSgwLDE2KSxsb0I6aVswXS5zbGljZSgxNiwzMiksbG9DOmlbMF0uc2xpY2UoMzIsNDgpLGxvRDppWzBdLnNsaWNlKDQ4LDY0KSxoaUE6aVsxXS5zbGljZSgwLDE2KSxoaUI6aVsxXS5zbGljZSgxNiwzMiksaGlDOmlbMV0uc2xpY2UoMzIsNDgpLGhpRDppWzFdLnNsaWNlKDQ4LDY0KX19KF8pO2ZvcihpPTA7aTxzO2krKyl7dmFyIGQ9dFtpXSxnPWQuZGltMC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LHY9ZC5kaW0xLmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsTT1kLmNhbnZhc1gsQT1kLmNhbnZhc1ksQz1NK2QucGFuZWxTaXplWDtpZihlfHwhU1tnXXx8U1tnXVswXSE9PU18fFNbZ11bMV0hPT1DKXtTW2ddPVtNLENdO3ZhciBMPXkocixhLG8saSxnLHYsTSxBLGQucGFuZWxTaXplWCxkLnBhbmVsU2l6ZVksZC5kaW0wLmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsXz8wOnc/MjoxLHApO2suY2xlYXJPbmx5PW47dmFyIEk9ZT9yLmxpbmVzLmJsb2NrTGluZUNvdW50Om07aChULEUsayxJLG0sTCl9fX0scmVhZFBpeGVsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFQucmVhZCh7eDp0LHk6ZSx3aWR0aDoxLGhlaWdodDoxLGRhdGE6Y30pLGN9LHJlYWRQaXhlbHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bmV3IFVpbnQ4QXJyYXkoNCpyKm4pO3JldHVybiBULnJlYWQoe3g6dCx5OmUsd2lkdGg6cixoZWlnaHQ6bixkYXRhOml9KSxpfSxkZXN0cm95OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHQuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLEEuZGVzdHJveSgpLGImJmIuZGVzdHJveSgpLE0pTVtlXS5kZXN0cm95KCl9LHVwZGF0ZTpDfX19LHsiLi4vLi4vbGliIjo3NzgsIi4vY29uc3RhbnRzIjoxMTUzLGdsc2xpZnk6NDM5fV0sMTE1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYTtmb3Iobnx8KG49MS8wKSxpPTA7aTxlLmxlbmd0aDtpKyspKGE9ZVtpXSkudmlzaWJsZSYmKG49TWF0aC5taW4obixhW3JdLmxlbmd0aCkpO2ZvcihuPT09MS8wJiYobj0wKSx0Ll9sZW5ndGg9bixpPTA7aTxlLmxlbmd0aDtpKyspKGE9ZVtpXSkudmlzaWJsZSYmKGEuX2xlbmd0aD1uKTtyZXR1cm4gbn19LHt9XSwxMTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJjb2xvci1yZ2JhIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clJvdGF0ZSxsPW8uc3RyVHJhbnNsYXRlLGM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGg9dCgiLi4vLi4vbGliL2d1cCIpLHA9aC5rZXlGdW4sZD1oLnJlcGVhdCxnPWgudW53cmFwLG09dCgiLi9oZWxwZXJzIiksdj10KCIuL2NvbnN0YW50cyIpLHk9dCgiLi9heGlzYnJ1c2giKSx4PXQoIi4vbGluZXMiKTtmdW5jdGlvbiBiKHQsZSxyKXtyZXR1cm4gby5hZ2dOdW1zKHQsbnVsbCxlLHIpfWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4gVChiKE1hdGgubWluLHQsZSksYihNYXRoLm1heCx0LGUpKX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQucmFuZ2U7cmV0dXJuIGU/VChlWzBdLGVbMV0pOl8odC52YWx1ZXMsdC5fbGVuZ3RoKX1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuIWlzTmFOKHQpJiZpc0Zpbml0ZSh0KXx8KHQ9MCksIWlzTmFOKGUpJiZpc0Zpbml0ZShlKXx8KGU9MCksdD09PWUmJigwPT09dD8odC09MSxlKz0xKToodCo9LjksZSo9MS4xKSksW3QsZV19ZnVuY3Rpb24gayh0LGUscixpLGEpe3ZhciBvLHMsbD13KHIpO3JldHVybiBpP24uc2NhbGUub3JkaW5hbCgpLmRvbWFpbihpLm1hcCgobz1uLmZvcm1hdChyLnRpY2tmb3JtYXQpLHM9YSxzP2Z1bmN0aW9uKHQsZSl7dmFyIHI9c1tlXTtyZXR1cm4gbnVsbD09cj9vKHQpOnJ9Om8pKSkucmFuZ2UoaS5tYXAoKGZ1bmN0aW9uKHIpe3ZhciBuPShyLWxbMF0pLyhsWzFdLWxbMF0pO3JldHVybiB0LWUrbiooMiplLXQpfSkpKTpuLnNjYWxlLmxpbmVhcigpLmRvbWFpbihsKS5yYW5nZShbdC1lLGVdKX1mdW5jdGlvbiBNKHQpe2lmKHQudGlja3ZhbHMpe3ZhciBlPXcodCk7cmV0dXJuIG4uc2NhbGUub3JkaW5hbCgpLmRvbWFpbih0LnRpY2t2YWxzKS5yYW5nZSh0LnRpY2t2YWxzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQtZVswXSkvKGVbMV0tZVswXSl9KSkpfX1mdW5jdGlvbiBBKHQpe3ZhciBlPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKSxyPXQubWFwKChmdW5jdGlvbih0KXt2YXIgZT1pKHRbMV0pO3JldHVybiBuLnJnYigicmdiKCIrZVswXSsiLCIrZVsxXSsiLCIrZVsyXSsiKSIpfSkpLGE9InJnYiIuc3BsaXQoIiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG4uc2NhbGUubGluZWFyKCkuY2xhbXAoITApLmRvbWFpbihlKS5yYW5nZShyLm1hcCgoaT10LGZ1bmN0aW9uKHQpe3JldHVybiB0W2ldfSkpKTt2YXIgaX0pKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGEubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pKX19ZnVuY3Rpb24gUyh0KXtyZXR1cm4gdC5kaW1lbnNpb25zLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJydXNoLmZpbHRlclNwZWNpZmllZH0pKX1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgYT1nKGUpLHM9YS50cmFjZSxsPW0uY29udmVydFR5cGVkQXJyYXkoYS5saW5lQ29sb3IpLGM9cy5saW5lLHU9e2NvbG9yOmkodi5kZXNlbGVjdGVkTGluZUNvbG9yKX0saD1mLmV4dHJhY3RPcHRzKGMpLHA9aC5yZXZlcnNlc2NhbGU/Zi5mbGlwU2NhbGUoYS5jc2NhbGUpOmEuY3NjYWxlLGQ9cy5kb21haW4seT1zLmRpbWVuc2lvbnMseD10LndpZHRoLGI9cy5sYWJlbGFuZ2xlLF89cy5sYWJlbHNpZGUsVD1zLmxhYmVsZm9udCxrPXMudGlja2ZvbnQsTT1zLnJhbmdlZm9udCxTPW8uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LGMse2NvbG9yOmwubWFwKG4uc2NhbGUubGluZWFyKCkuZG9tYWluKHcoe3ZhbHVlczpsLHJhbmdlOltoLm1pbixoLm1heF0sX2xlbmd0aDpzLl9sZW5ndGh9KSkpLGJsb2NrTGluZUNvdW50OnYuYmxvY2tMaW5lQ291bnQsY2FudmFzT3ZlcmRyYWc6di5vdmVyZHJhZyp2LmNhbnZhc1BpeGVsUmF0aW99KSxFPU1hdGguZmxvb3IoeCooZC54WzFdLWQueFswXSkpLEM9TWF0aC5mbG9vcih0LmhlaWdodCooZC55WzFdLWQueVswXSkpLEw9dC5tYXJnaW58fHtsOjgwLHI6ODAsdDoxMDAsYjo4MH0sST1FLFA9QztyZXR1cm57a2V5OnIsY29sQ291bnQ6eS5maWx0ZXIobS5pc1Zpc2libGUpLmxlbmd0aCxkaW1lbnNpb25zOnksdGlja0Rpc3RhbmNlOnYudGlja0Rpc3RhbmNlLHVuaXRUb0NvbG9yOkEocCksbGluZXM6UyxkZXNlbGVjdGVkTGluZXM6dSxsYWJlbEFuZ2xlOmIsbGFiZWxTaWRlOl8sbGFiZWxGb250OlQsdGlja0ZvbnQ6ayxyYW5nZUZvbnQ6TSxsYXlvdXRXaWR0aDp4LGxheW91dEhlaWdodDp0LmhlaWdodCxkb21haW46ZCx0cmFuc2xhdGVYOmQueFswXSp4LHRyYW5zbGF0ZVk6dC5oZWlnaHQtZC55WzFdKnQuaGVpZ2h0LHBhZDpMLGNhbnZhc1dpZHRoOkkqdi5jYW52YXNQaXhlbFJhdGlvKzIqUy5jYW52YXNPdmVyZHJhZyxjYW52YXNIZWlnaHQ6UCp2LmNhbnZhc1BpeGVsUmF0aW8sd2lkdGg6SSxoZWlnaHQ6UCxjYW52YXNQaXhlbFJhdGlvOnYuY2FudmFzUGl4ZWxSYXRpb319ZnVuY3Rpb24gQyh0LGUscil7dmFyIGk9ci53aWR0aCxhPXIuaGVpZ2h0LHM9ci5kaW1lbnNpb25zLGw9ci5jYW52YXNQaXhlbFJhdGlvLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGkqdC9NYXRoLm1heCgxLHIuY29sQ291bnQtMSl9LHU9di52ZXJ0aWNhbFBhZGRpbmcvYSxmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2NhbGUubGluZWFyKCkucmFuZ2UoW2UsdC1lXSl9KGEsdi52ZXJ0aWNhbFBhZGRpbmcpLGg9e2tleTpyLmtleSx4U2NhbGU6Yyxtb2RlbDpyLGluQnJ1c2hEcmFnOiExfSxwPXt9O3JldHVybiBoLmRpbWVuc2lvbnM9cy5maWx0ZXIobS5pc1Zpc2libGUpLm1hcCgoZnVuY3Rpb24oaSxzKXt2YXIgZD1mdW5jdGlvbih0LGUpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLmRvbWFpbih3KHQpKS5yYW5nZShbZSwxLWVdKX0oaSx1KSxnPXBbaS5sYWJlbF07cFtpLmxhYmVsXT0oZ3x8MCkrMTt2YXIgeD1pLmxhYmVsKyhnPyJfXyIrZzoiIiksYj1pLmNvbnN0cmFpbnRyYW5nZSxfPWImJmIubGVuZ3RoO18mJiFBcnJheS5pc0FycmF5KGJbMF0pJiYoYj1bYl0pO3ZhciBUPV8/Yi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChkKX0pKTpbWy0xLzAsMS8wXV0sQT1pLnZhbHVlcztBLmxlbmd0aD5pLl9sZW5ndGgmJihBPUEuc2xpY2UoMCxpLl9sZW5ndGgpKTt2YXIgRSxDPWkudGlja3ZhbHM7ZnVuY3Rpb24gTCh0LGUpe3JldHVybnt2YWw6dCx0ZXh0OkVbZV19fWZ1bmN0aW9uIEkodCxlKXtyZXR1cm4gdC52YWwtZS52YWx9aWYoQXJyYXkuaXNBcnJheShDKSYmQy5sZW5ndGgpe0U9aS50aWNrdGV4dCxBcnJheS5pc0FycmF5KEUpJiZFLmxlbmd0aD9FLmxlbmd0aD5DLmxlbmd0aD9FPUUuc2xpY2UoMCxDLmxlbmd0aCk6Qy5sZW5ndGg+RS5sZW5ndGgmJihDPUMuc2xpY2UoMCxFLmxlbmd0aCkpOkU9Qy5tYXAobi5mb3JtYXQoaS50aWNrZm9ybWF0KSk7Zm9yKHZhciBQPTE7UDxDLmxlbmd0aDtQKyspaWYoQ1tQXTxDW1AtMV0pe2Zvcih2YXIgej1DLm1hcChMKS5zb3J0KEkpLE89MDtPPEMubGVuZ3RoO08rKylDW09dPXpbT10udmFsLEVbT109eltPXS50ZXh0O2JyZWFrfX1lbHNlIEM9dm9pZCAwO3JldHVybiBBPW0uY29udmVydFR5cGVkQXJyYXkoQSkse2tleTp4LGxhYmVsOmkubGFiZWwsdGlja0Zvcm1hdDppLnRpY2tmb3JtYXQsdGlja3ZhbHM6Qyx0aWNrdGV4dDpFLG9yZGluYWw6bS5pc09yZGluYWwoaSksbXVsdGlzZWxlY3Q6aS5tdWx0aXNlbGVjdCx4SW5kZXg6cyxjcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4OnMsdmlzaWJsZUluZGV4OmkuX2luZGV4LGhlaWdodDphLHZhbHVlczpBLHBhZGRlZFVuaXRWYWx1ZXM6QS5tYXAoZCksdW5pdFRpY2t2YWxzOkMmJkMubWFwKGQpLHhTY2FsZTpjLHg6YyhzKSxjYW52YXNYOmMocykqbCx1bml0VG9QYWRkZWRQeDpmLGRvbWFpblNjYWxlOmsoYSx2LnZlcnRpY2FsUGFkZGluZyxpLEMsRSksb3JkaW5hbFNjYWxlOk0oaSkscGFyZW50OmgsbW9kZWw6cixicnVzaDp5Lm1ha2VCcnVzaCh0LF8sVCwoZnVuY3Rpb24oKXt0LmxpbmVQaWNrQWN0aXZlKCExKX0pLChmdW5jdGlvbigpe3ZhciBlPWg7ZS5mb2N1c0xheWVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKTt2YXIgcj1TKGUpOyF0LmNvbnRleHRTaG93bigpJiZyPyhlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSx0LmNvbnRleHRTaG93bighMCkpOnQuY29udGV4dFNob3duKCkmJiFyJiYoZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMCwhMCksdC5jb250ZXh0U2hvd24oITEpKX0pLChmdW5jdGlvbihyKXtpZihoLmZvY3VzTGF5ZXIucmVuZGVyKGgucGFuZWxzLCEwKSxoLnBpY2tMYXllciYmaC5waWNrTGF5ZXIucmVuZGVyKGgucGFuZWxzLCEwKSx0LmxpbmVQaWNrQWN0aXZlKCEwKSxlJiZlLmZpbHRlckNoYW5nZWQpe3ZhciBuPWQuaW52ZXJ0LGE9ci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChuKS5zb3J0KG8uc29ydGVyQXNjKX0pKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KSk7ZS5maWx0ZXJDaGFuZ2VkKGgua2V5LGkuX2luZGV4LGEpfX0pKX19KSksaH1mdW5jdGlvbiBMKHQpe3QuY2xhc3NlZCh2LmNuLmF4aXNFeHRlbnRUZXh0LCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0Iil9ZnVuY3Rpb24gSSh0LGUpe3ZhciByPSJ0b3AiPT09ZT8xOi0xLG49dCpNYXRoLlBJLzE4MDtyZXR1cm57ZGlyOnIsZHg6TWF0aC5zaW4obiksZHk6TWF0aC5jb3MobiksZGVncmVlczp0fX1mdW5jdGlvbiBQKHQsZSl7Zm9yKHZhciByPWUucGFuZWxzfHwoZS5wYW5lbHM9W10pLG49dC5kYXRhKCksaT0wO2k8bi5sZW5ndGgtMTtpKyspe3ZhciBhPXJbaV18fChyW2ldPXt9KSxvPW5baV0scz1uW2krMV07YS5kaW0wPW8sYS5kaW0xPXMsYS5jYW52YXNYPW8uY2FudmFzWCxhLnBhbmVsU2l6ZVg9cy5jYW52YXNYLW8uY2FudmFzWCxhLnBhbmVsU2l6ZVk9ZS5tb2RlbC5jYW52YXNIZWlnaHQsYS55PTAsYS5jYW52YXNZPTB9fWZ1bmN0aW9uIHoodCxlKXtyZXR1cm4gYS50aWNrVGV4dCh0Ll9heCxlLCExKS50ZXh0fWZ1bmN0aW9uIE8odCxlKXtpZih0Lm9yZGluYWwpcmV0dXJuIiI7dmFyIHI9dC5kb21haW5TY2FsZS5kb21haW4oKSxuPXJbZT9yLmxlbmd0aC0xOjBdO3JldHVybiB6KHQubW9kZWwuZGltZW5zaW9uc1t0LnZpc2libGVJbmRleF0sbil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBmPXQuX2Z1bGxMYXlvdXQsaD1mLl90b3BwYXBlcixiPWYuX2dsY29udGFpbmVyOyFmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylmb3IodmFyIHI9MDtyPHRbZV0ubGVuZ3RoO3IrKylmb3IodmFyIG49dFtlXVtyXS50cmFjZSxpPW4uZGltZW5zaW9ucyxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10udmFsdWVzLGw9aVtvXS5fYXg7bCYmKGwucmFuZ2U/bC5yYW5nZT1UKGwucmFuZ2VbMF0sbC5yYW5nZVsxXSk6bC5yYW5nZT1fKHMsbi5fbGVuZ3RoKSxsLmR0aWNrfHwobC5kdGljaz0uMDEqKE1hdGguYWJzKGwucmFuZ2VbMV0tbC5yYW5nZVswXSl8fDEpKSxsLnRpY2tmb3JtYXQ9aVtvXS50aWNrZm9ybWF0LGEuY2FsY1RpY2tzKGwpLGwuY2xlYW5SYW5nZSgpKX19KGUpO3ZhciB3LGssTT0odz0hMCxrPSExLHtsaW5lUGlja0FjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD93PSEhdDp3fSxjb250ZXh0U2hvd246ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/az0hIXQ6a319KSxBPWUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZyh0KS50cmFjZS52aXNpYmxlfSkpLm1hcChFLmJpbmQoMCxyKSkubWFwKEMuYmluZCgwLE0saSkpO2IuZWFjaCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gby5leHRlbmRGbGF0KHQsQVtlXSl9KSk7dmFyIEQ9Yi5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5lYWNoKChmdW5jdGlvbih0KXt0LnZpZXdNb2RlbD1BWzBdLHQubW9kZWw9dC52aWV3TW9kZWw/dC52aWV3TW9kZWwubW9kZWw6bnVsbH0pKSxSPW51bGw7RC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2t9KSkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbih0KXtpZihNLmxpbmVQaWNrQWN0aXZlKCkmJnQubGluZUxheWVyJiZpJiZpLmhvdmVyKXt2YXIgZT1uLmV2ZW50LHI9dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LG89bi5tb3VzZSh0aGlzKSxzPW9bMF0sbD1vWzFdO2lmKHM8MHx8bDwwfHxzPj1yfHxsPj1hKXJldHVybjt2YXIgYz10LmxpbmVMYXllci5yZWFkUGl4ZWwocyxhLTEtbCksdT0wIT09Y1szXSxmPXU/Y1syXSsyNTYqKGNbMV0rMjU2KmNbMF0pOm51bGwsaD17eDpzLHk6bCxjbGllbnRYOmUuY2xpZW50WCxjbGllbnRZOmUuY2xpZW50WSxkYXRhSW5kZXg6dC5tb2RlbC5rZXksY3VydmVOdW1iZXI6Zn07ZiE9PVImJih1P2kuaG92ZXIoaCk6aS51bmhvdmVyJiZpLnVuaG92ZXIoaCksUj1mKX19KSksRC5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2s/MDoxfSkpLGguc3R5bGUoImJhY2tncm91bmQiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDApIik7dmFyIEY9aC5zZWxlY3RBbGwoIi4iK3YuY24ucGFyY29vcmRzKS5kYXRhKEEscCk7Ri5leGl0KCkucmVtb3ZlKCksRi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodi5jbi5wYXJjb29yZHMsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEYuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwodC5tb2RlbC50cmFuc2xhdGVYLHQubW9kZWwudHJhbnNsYXRlWSl9KSk7dmFyIEI9Ri5zZWxlY3RBbGwoIi4iK3YuY24ucGFyY29vcmRzQ29udHJvbFZpZXcpLmRhdGEoZCxwKTtCLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh2LmNuLnBhcmNvb3Jkc0NvbnRyb2xWaWV3LCEwKSxCLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBsKHQubW9kZWwucGFkLmwsdC5tb2RlbC5wYWQudCl9KSk7dmFyIE49Qi5zZWxlY3RBbGwoIi4iK3YuY24ueUF4aXMpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbWVuc2lvbnN9KSxwKTtOLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh2LmNuLnlBeGlzLCEwKSxCLmVhY2goKGZ1bmN0aW9uKHQpe1AoTix0KX0pKSxELmVhY2goKGZ1bmN0aW9uKHQpe2lmKHQudmlld01vZGVsKXshdC5saW5lTGF5ZXJ8fGk/dC5saW5lTGF5ZXI9eCh0aGlzLHQpOnQubGluZUxheWVyLnVwZGF0ZSh0KSwodC5rZXl8fDA9PT10LmtleSkmJih0LnZpZXdNb2RlbFt0LmtleV09dC5saW5lTGF5ZXIpO3ZhciBlPSF0LmNvbnRleHR8fGk7dC5saW5lTGF5ZXIucmVuZGVyKHQudmlld01vZGVsLnBhbmVscyxlKX19KSksTi5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbCh0LnhTY2FsZSh0LnhJbmRleCksMCl9KSksTi5jYWxsKG4uYmVoYXZpb3IuZHJhZygpLm9yaWdpbigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkub24oImRyYWciLChmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudDtNLmxpbmVQaWNrQWN0aXZlKCExKSx0Lng9TWF0aC5tYXgoLXYub3ZlcmRyYWcsTWF0aC5taW4odC5tb2RlbC53aWR0aCt2Lm92ZXJkcmFnLG4uZXZlbnQueCkpLHQuY2FudmFzWD10LngqdC5tb2RlbC5jYW52YXNQaXhlbFJhdGlvLE4uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pKS5lYWNoKChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlLnhJbmRleCksZS5jYW52YXNYPWUueCplLm1vZGVsLmNhbnZhc1BpeGVsUmF0aW99KSksUChOLGUpLE4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gMCE9PU1hdGguYWJzKHQueEluZGV4LWUueEluZGV4KX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbCh0LnhTY2FsZSh0LnhJbmRleCksMCl9KSksbi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIixsKHQueCwwKSksTi5lYWNoKChmdW5jdGlvbihyLG4saSl7aT09PXQucGFyZW50LmtleSYmKGUuZGltZW5zaW9uc1tuXT1yKX0pKSxlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCExLCFTKGUpKSxlLmZvY3VzTGF5ZXIucmVuZGVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzKX0pKS5vbigiZHJhZ2VuZCIsKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50O3QueD10LnhTY2FsZSh0LnhJbmRleCksdC5jYW52YXNYPXQueCp0Lm1vZGVsLmNhbnZhc1BpeGVsUmF0aW8sUChOLGUpLG4uc2VsZWN0KHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBsKHQueCwwKX0pKSxlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCExLCFTKGUpKSxlLmZvY3VzTGF5ZXImJmUuZm9jdXNMYXllci5yZW5kZXIoZS5wYW5lbHMpLGUucGlja0xheWVyJiZlLnBpY2tMYXllci5yZW5kZXIoZS5wYW5lbHMsITApLE0ubGluZVBpY2tBY3RpdmUoITApLGkmJmkuYXhlc01vdmVkJiZpLmF4ZXNNb3ZlZChlLmtleSxlLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4fSkpKX0pKSksTi5leGl0KCkucmVtb3ZlKCk7dmFyIGo9Ti5zZWxlY3RBbGwoIi4iK3YuY24uYXhpc092ZXJsYXlzKS5kYXRhKGQscCk7ai5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodi5jbi5heGlzT3ZlcmxheXMsITApLGouc2VsZWN0QWxsKCIuIit2LmNuLmF4aXMpLnJlbW92ZSgpO3ZhciBVPWouc2VsZWN0QWxsKCIuIit2LmNuLmF4aXMpLmRhdGEoZCxwKTtVLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh2LmNuLmF4aXMsITApLFUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5tb2RlbC5oZWlnaHQvdC5tb2RlbC50aWNrRGlzdGFuY2Uscj10LmRvbWFpblNjYWxlLGk9ci5kb21haW4oKTtuLnNlbGVjdCh0aGlzKS5jYWxsKG4uc3ZnLmF4aXMoKS5vcmllbnQoImxlZnQiKS50aWNrU2l6ZSg0KS5vdXRlclRpY2tTaXplKDIpLnRpY2tzKGUsdC50aWNrRm9ybWF0KS50aWNrVmFsdWVzKHQub3JkaW5hbD9pOm51bGwpLnRpY2tGb3JtYXQoKGZ1bmN0aW9uKGUpe3JldHVybiBtLmlzT3JkaW5hbCh0KT9lOnoodC5tb2RlbC5kaW1lbnNpb25zW3QudmlzaWJsZUluZGV4XSxlKX0pKS5zY2FsZShyKSksdS5mb250KFUuc2VsZWN0QWxsKCJ0ZXh0IiksdC5tb2RlbC50aWNrRm9udCl9KSksVS5zZWxlY3RBbGwoIi5kb21haW4sIC50aWNrPmxpbmUiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLC4yNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IiksVS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1zaGFkb3ciLCIxcHggMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IDFweCAxcHggI2ZmZiIpLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0Iik7dmFyIFY9ai5zZWxlY3RBbGwoIi4iK3YuY24uYXhpc0hlYWRpbmcpLmRhdGEoZCxwKTtWLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh2LmNuLmF4aXNIZWFkaW5nLCEwKTt2YXIgcT1WLnNlbGVjdEFsbCgiLiIrdi5jbi5heGlzVGl0bGUpLmRhdGEoZCxwKTtxLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh2LmNuLmF4aXNUaXRsZSwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiY3Vyc29yIiwiZXctcmVzaXplIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLHEudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubGFiZWx9KSkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7dS5mb250KHIsZS5tb2RlbC5sYWJlbEZvbnQpLGMuY29udmVydFRvVHNwYW5zKHIsdCl9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9SSh0Lm1vZGVsLmxhYmVsQW5nbGUsdC5tb2RlbC5sYWJlbFNpZGUpLHI9di5heGlzVGl0bGVPZmZzZXQ7cmV0dXJuKGUuZGlyPjA/IiI6bCgwLDIqcit0Lm1vZGVsLmhlaWdodCkpK3MoZS5kZWdyZWVzKStsKC1yKmUuZHgsLXIqZS5keSl9KSkuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbih0KXt2YXIgZT1JKHQubW9kZWwubGFiZWxBbmdsZSx0Lm1vZGVsLmxhYmVsU2lkZSk7cmV0dXJuIDIqTWF0aC5hYnMoZS5keCk+TWF0aC5hYnMoZS5keSk/ZS5kaXIqZS5keDwwPyJzdGFydCI6ImVuZCI6Im1pZGRsZSJ9KSk7dmFyIEg9ai5zZWxlY3RBbGwoIi4iK3YuY24uYXhpc0V4dGVudCkuZGF0YShkLHApO0guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHYuY24uYXhpc0V4dGVudCwhMCk7dmFyIEc9SC5zZWxlY3RBbGwoIi4iK3YuY24uYXhpc0V4dGVudFRvcCkuZGF0YShkLHApO0cuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHYuY24uYXhpc0V4dGVudFRvcCwhMCksRy5hdHRyKCJ0cmFuc2Zvcm0iLGwoMCwtdi5heGlzRXh0ZW50T2Zmc2V0KSk7dmFyIFk9Ry5zZWxlY3RBbGwoIi4iK3YuY24uYXhpc0V4dGVudFRvcFRleHQpLmRhdGEoZCxwKTtZLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh2LmNuLmF4aXNFeHRlbnRUb3BUZXh0LCEwKS5jYWxsKEwpLFkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIE8odCwhMCl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dS5mb250KG4uc2VsZWN0KHRoaXMpLHQubW9kZWwucmFuZ2VGb250KX0pKTt2YXIgVz1ILnNlbGVjdEFsbCgiLiIrdi5jbi5heGlzRXh0ZW50Qm90dG9tKS5kYXRhKGQscCk7Vy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodi5jbi5heGlzRXh0ZW50Qm90dG9tLCEwKSxXLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBsKDAsdC5tb2RlbC5oZWlnaHQrdi5heGlzRXh0ZW50T2Zmc2V0KX0pKTt2YXIgWD1XLnNlbGVjdEFsbCgiLiIrdi5jbi5heGlzRXh0ZW50Qm90dG9tVGV4dCkuZGF0YShkLHApO1guZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHYuY24uYXhpc0V4dGVudEJvdHRvbVRleHQsITApLmF0dHIoImR5IiwiMC43NWVtIikuY2FsbChMKSxYLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiBPKHQsITEpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3UuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLnJhbmdlRm9udCl9KSkseS5lbnN1cmVBeGlzQnJ1c2goail9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjU1LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2NSwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9ndXAiOjc3NSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjgsIi4vYXhpc2JydXNoIjoxMTUwLCIuL2NvbnN0YW50cyI6MTE1MywiLi9oZWxwZXJzIjoxMTU1LCIuL2xpbmVzIjoxMTU3LCJjb2xvci1yZ2JhIjoxMjcsZDM6MTY5fV0sMTE2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3BhcmNvb3JkcyIpLGk9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpLGE9dCgiLi9oZWxwZXJzIikuaXNWaXNpYmxlO2Z1bmN0aW9uIG8odCxlLHIpe3ZhciBuPWUuaW5kZXhPZihyKSxpPXQuaW5kZXhPZihuKTtyZXR1cm4tMT09PWkmJihpKz1lLmxlbmd0aCksaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKGkodCkpe3ZhciBzPXt9LGw9e30sYz17fSx1PXt9LGY9ci5fc2l6ZTtlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dmFyIG49ZVswXS50cmFjZTtjW3JdPW4uaW5kZXg7dmFyIGk9dVtyXT1uLl9mdWxsSW5wdXQuaW5kZXg7c1tyXT10LmRhdGFbaV0uZGltZW5zaW9ucyxsW3JdPXQuZGF0YVtpXS5kaW1lbnNpb25zLnNsaWNlKCl9KSk7bih0LGUse3dpZHRoOmYudyxoZWlnaHQ6Zi5oLG1hcmdpbjp7dDpmLnQscjpmLnIsYjpmLmIsbDpmLmx9fSx7ZmlsdGVyQ2hhbmdlZDpmdW5jdGlvbihlLG4saSl7dmFyIGE9bFtlXVtuXSxvPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkpLHM9ImRpbWVuc2lvbnNbIituKyJdLmNvbnN0cmFpbnRyYW5nZSIsZj1yLl90cmFjZVByZUdVSVt0Ll9mdWxsRGF0YVtjW2VdXS5fZnVsbElucHV0LnVpZF07aWYodm9pZCAwPT09ZltzXSl7dmFyIGg9YS5jb25zdHJhaW50cmFuZ2U7ZltzXT1ofHxudWxsfXZhciBwPXQuX2Z1bGxEYXRhW2NbZV1dLmRpbWVuc2lvbnNbbl07by5sZW5ndGg/KDE9PT1vLmxlbmd0aCYmKG89b1swXSksYS5jb25zdHJhaW50cmFuZ2U9byxwLmNvbnN0cmFpbnRyYW5nZT1vLnNsaWNlKCksbz1bb10pOihkZWxldGUgYS5jb25zdHJhaW50cmFuZ2UsZGVsZXRlIHAuY29uc3RyYWludHJhbmdlLG89bnVsbCk7dmFyIGQ9e307ZFtzXT1vLHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLFtkLFt1W2VdXV0pfSxob3ZlcjpmdW5jdGlvbihlKXt0LmVtaXQoInBsb3RseV9ob3ZlciIsZSl9LHVuaG92ZXI6ZnVuY3Rpb24oZSl7dC5lbWl0KCJwbG90bHlfdW5ob3ZlciIsZSl9LGF4ZXNNb3ZlZDpmdW5jdGlvbihlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIG8odCxlLHIpLW8odCxlLG4pfX0ocixsW2VdLmZpbHRlcihhKSk7c1tlXS5zb3J0KG4pLGxbZV0uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hYSh0KX0pKS5zb3J0KChmdW5jdGlvbih0KXtyZXR1cm4gbFtlXS5pbmRleE9mKHQpfSkpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3NbZV0uc3BsaWNlKHNbZV0uaW5kZXhPZih0KSwxKSxzW2VdLnNwbGljZShsW2VdLmluZGV4T2YodCksMCx0KX0pKSx0LmVtaXQoInBsb3RseV9yZXN0eWxlIixbe2RpbWVuc2lvbnM6W3NbZV1dfSxbdVtlXV1dKX19KX19fSx7Ii4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiOjc5MSwiLi9oZWxwZXJzIjoxMTU1LCIuL3BhcmNvb3JkcyI6MTE1OX1dLDExNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT1hKHtlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOiJwbG90In0pO2UuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVsMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkbGFiZWw6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3JzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpvLmRlZmF1bHRMaW5lLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJwbG90In0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxzY2FsZWdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0aW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJpbmZvOmMoe30sbi5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpzKHt9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwicGVyY2VudCIsInRleHQiXX0pLHRleHR0ZW1wbGF0ZTpsKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwicGVyY2VudCIsInRleHQiXX0pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoiYXV0byIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHRleHRmb250OmMoe30sdSx7fSksaW5zaWRldGV4dG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJob3Jpem9udGFsIiwicmFkaWFsIiwidGFuZ2VudGlhbCIsImF1dG8iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToicGxvdCJ9LGluc2lkZXRleHRmb250OmMoe30sdSx7fSksb3V0c2lkZXRleHRmb250OmMoe30sdSx7fSksYXV0b21hcmdpbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxmb250OmMoe30sdSx7fSkscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBjZW50ZXIiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmkoe25hbWU6InBpZSIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG9sZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzb3J0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9ja3dpc2UiLCJjb3VudGVyY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46LTM2MCxtYXg6MzYwLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHB1bGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHRpdGxlZm9udDpjKHt9LHUse30pLHRpdGxlcG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBjZW50ZXIiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxlZGl0VHlwZToiY2FsYyJ9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2NDIsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODI0LCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjkwNn1dLDExNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9InBpZSIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODkxfV0sMTE2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89e307ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4hIWUmJighIShlPWkoZSkpLmlzVmFsaWQoKSYmKGU9YS5hZGRPcGFjaXR5KGUsZS5nZXRBbHBoYSgpKSx0W3JdfHwodFtyXT1lKSxlKSl9fWZ1bmN0aW9uIGwodCxlKXt2YXIgcixuPUpTT04uc3RyaW5naWZ5KHQpLGE9ZVtuXTtpZighYSl7Zm9yKGE9dC5zbGljZSgpLHI9MDtyPHQubGVuZ3RoO3IrKylhLnB1c2goaSh0W3JdKS5saWdodGVuKDIwKS50b0hleFN0cmluZygpKTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWEucHVzaChpKHRbcl0pLmRhcmtlbigyMCkudG9IZXhTdHJpbmcoKSk7ZVtuXT1hfXJldHVybiBhfWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLGksYT1bXSxvPXQuX2Z1bGxMYXlvdXQsbD1vLmhpZGRlbmxhYmVsc3x8W10sYz1lLmxhYmVscyx1PWUubWFya2VyLmNvbG9yc3x8W10sZj1lLnZhbHVlcyxoPWUuX2xlbmd0aCxwPWUuX2hhc1ZhbHVlcyYmaDtpZihlLmRsYWJlbClmb3IoYz1uZXcgQXJyYXkoaCkscj0wO3I8aDtyKyspY1tyXT1TdHJpbmcoZS5sYWJlbDArciplLmRsYWJlbCk7dmFyIGQ9e30sZz1zKG9bIl8iK2UudHlwZSsiY29sb3JtYXAiXSksbT0wLHY9ITE7Zm9yKHI9MDtyPGg7cisrKXt2YXIgeSx4LGI7aWYocCl7aWYoeT1mW3JdLCFuKHkpKWNvbnRpbnVlO2lmKCh5PSt5KTwwKWNvbnRpbnVlfWVsc2UgeT0xO3ZvaWQgMCE9PSh4PWNbcl0pJiYiIiE9PXh8fCh4PXIpO3ZhciBfPWRbeD1TdHJpbmcoeCldO3ZvaWQgMD09PV8/KGRbeF09YS5sZW5ndGgsKGI9LTEhPT1sLmluZGV4T2YoeCkpfHwobSs9eSksYS5wdXNoKHt2OnksbGFiZWw6eCxjb2xvcjpnKHVbcl0seCksaTpyLHB0czpbcl0saGlkZGVuOmJ9KSk6KHY9ITAsKGk9YVtfXSkudis9eSxpLnB0cy5wdXNoKHIpLGkuaGlkZGVufHwobSs9eSksITE9PT1pLmNvbG9yJiZ1W3JdJiYoaS5jb2xvcj1nKHVbcl0seCkpKX1yZXR1cm4oImZ1bm5lbGFyZWEiPT09ZS50eXBlP3Y6ZS5zb3J0KSYmYS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnYtdC52fSkpLGFbMF0mJihhWzBdLnZUb3RhbD1tKSxhfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUpe3ZhciByPShlfHx7fSkudHlwZTtyfHwocj0icGllIik7dmFyIG49dC5fZnVsbExheW91dCxpPXQuY2FsY2RhdGEsYT1uW3IrImNvbG9yd2F5Il0scz1uWyJfIityKyJjb2xvcm1hcCJdO25bImV4dGVuZCIrcisiY29sb3JzIl0mJihhPWwoYSxvKSk7Zm9yKHZhciBjPTAsdT0wO3U8aS5sZW5ndGg7dSsrKXt2YXIgZj1pW3VdO2lmKGZbMF0udHJhY2UudHlwZT09PXIpZm9yKHZhciBoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBwPWZbaF07ITE9PT1wLmNvbG9yJiYoc1twLmxhYmVsXT9wLmNvbG9yPXNbcC5sYWJlbF06KHNbcC5sYWJlbF09cC5jb2xvcj1hW2MlYS5sZW5ndGhdLGMrKykpfX19LG1ha2VQdWxsQ29sb3JGbjpzLGdlbmVyYXRlRXh0ZW5kZWRDb2xvcnM6bH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCJmYXN0LWlzbnVtZXJpYyI6MjQxLHRpbnljb2xvcjI6NTc2fV0sMTE2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dDtmdW5jdGlvbiBsKHQsZSl7dmFyIHI9QXJyYXkuaXNBcnJheSh0KSxhPWkuaXNBcnJheU9yVHlwZWRBcnJheShlKSxvPU1hdGgubWluKHI/dC5sZW5ndGg6MS8wLGE/ZS5sZW5ndGg6MS8wKTtpZihpc0Zpbml0ZShvKXx8KG89MCksbyYmYSl7Zm9yKHZhciBzLGw9MDtsPG87bCsrKXt2YXIgYz1lW2xdO2lmKG4oYykmJmM+MCl7cz0hMDticmVha319c3x8KG89MCl9cmV0dXJue2hhc0xhYmVsczpyLGhhc1ZhbHVlczphLGxlbjpvfX1lLmV4cG9ydHM9e2hhbmRsZUxhYmVsc0FuZFZhbHVlczpsLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGEscixuKX12YXIgdT1sKGMoImxhYmVscyIpLGMoInZhbHVlcyIpKSxmPXUubGVuO2lmKGUuX2hhc0xhYmVscz11Lmhhc0xhYmVscyxlLl9oYXNWYWx1ZXM9dS5oYXNWYWx1ZXMsIWUuX2hhc0xhYmVscyYmZS5faGFzVmFsdWVzJiYoYygibGFiZWwwIiksYygiZGxhYmVsIikpLGYpe2UuX2xlbmd0aD1mLGMoIm1hcmtlci5saW5lLndpZHRoIikmJmMoIm1hcmtlci5saW5lLmNvbG9yIiksYygibWFya2VyLmNvbG9ycyIpLGMoInNjYWxlZ3JvdXAiKTt2YXIgaCxwPWMoInRleHQiKSxkPWMoInRleHR0ZW1wbGF0ZSIpO2lmKGR8fChoPWMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KHApPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50IikpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxkfHxoJiYibm9uZSIhPT1oKXt2YXIgZz1jKCJ0ZXh0cG9zaXRpb24iKTtzKHQsZSxuLGMsZyx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSksKEFycmF5LmlzQXJyYXkoZyl8fCJhdXRvIj09PWd8fCJvdXRzaWRlIj09PWcpJiZjKCJhdXRvbWFyZ2luIiksKCJpbnNpZGUiPT09Z3x8ImF1dG8iPT09Z3x8QXJyYXkuaXNBcnJheShnKSkmJmMoImluc2lkZXRleHRvcmllbnRhdGlvbiIpfW8oZSxuLGMpO3ZhciBtPWMoImhvbGUiKTtpZihjKCJ0aXRsZS50ZXh0Iikpe3ZhciB2PWMoInRpdGxlLnBvc2l0aW9uIixtPyJtaWRkbGUgY2VudGVyIjoidG9wIGNlbnRlciIpO218fCJtaWRkbGUgY2VudGVyIiE9PXZ8fChlLnRpdGxlLnBvc2l0aW9uPSJ0b3AgY2VudGVyIiksaS5jb2VyY2VGb250KGMsInRpdGxlLmZvbnQiLG4uZm9udCl9Yygic29ydCIpLGMoImRpcmVjdGlvbiIpLGMoInJvdGF0aW9uIiksYygicHVsbCIpfWVsc2UgZS52aXNpYmxlPSExfX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi9iYXIvZGVmYXVsdHMiOjkyNSwiLi9hdHRyaWJ1dGVzIjoxMTYxLCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sMTE2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXJzOnQucHRzLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZSxsYWJlbDp0LmxhYmVsLGNvbG9yOnQuY29sb3IsdmFsdWU6dC52LHBlcmNlbnQ6dC5wZXJjZW50LHRleHQ6dC50ZXh0LHY6dC52fTtyZXR1cm4gMT09PXQucHRzLmxlbmd0aCYmKHIucG9pbnROdW1iZXI9ci5pPXQucHRzWzBdKSxuKHIsZSx0LnB0cyksImZ1bm5lbGFyZWEiPT09ZS50eXBlJiYoZGVsZXRlIHIudixkZWxldGUgci5pKSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3OX1dLDExNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZigiZSIpP3QucmVwbGFjZSgvWy5dPzArZS8sImUiKTotMSE9PXQuaW5kZXhPZigiLiIpP3QucmVwbGFjZSgvWy5dPzArJC8sIiIpOnR9ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSgoMTAwKnQpLnRvUHJlY2lzaW9uKDMpKTtyZXR1cm4gbi5udW1TZXBhcmF0ZShyLGUpKyIlIn0sci5mb3JtYXRQaWVWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByPWkodC50b1ByZWNpc2lvbigxMCkpO3JldHVybiBuLm51bVNlcGFyYXRlKHIsZSl9LHIuZ2V0Rmlyc3RGaWxsZWQ9ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKG58fDA9PT1ufHwiIj09PW4pcmV0dXJuIG59fSxyLmNhc3RPcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9yLmdldEZpcnN0RmlsbGVkKHQsZSk6dHx8dm9pZCAwfSxyLmdldFJvdGF0aW9uQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuKCJhdXRvIj09PXQ/MDp0KSpNYXRoLlBJLzE4MH19LHsiLi4vLi4vbGliIjo3Nzh9XSwxMTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uZTp0KCIuL3N0eWxlX29uZSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJwaWUiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInBpZS1saWtlIiwicGllIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTE2MSwiLi9iYXNlX3Bsb3QiOjExNjIsIi4vY2FsYyI6MTE2MywiLi9kZWZhdWx0cyI6MTE2NCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTE2OCwiLi9sYXlvdXRfZGVmYXVsdHMiOjExNjksIi4vcGxvdCI6MTE3MCwiLi9zdHlsZSI6MTE3MSwiLi9zdHlsZV9vbmUiOjExNzJ9XSwxMTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aGlkZGVubGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHBpZWNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGVkaXRUeXBlOiJjYWxjIn0sZXh0ZW5kcGllY29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTE2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigiaGlkZGVubGFiZWxzIikscigicGllY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHBpZWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjc3OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTE2OH1dLDExNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpLGM9bC5zdHJTY2FsZSx1PWwuc3RyVHJhbnNsYXRlLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikscD1oLnJlY29yZE1pblRleHRTaXplLGQ9aC5jbGVhck1pblRleHRTaXplLGc9dCgiLi4vYmFyL2NvbnN0YW50cyIpLlRFWFRQQUQsbT10KCIuL2hlbHBlcnMiKSx2PXQoIi4vZXZlbnRfZGF0YSIpLHk9dCgiLi4vLi4vbGliIikuaXNWYWxpZFRleHRWYWx1ZTtmdW5jdGlvbiB4KHQsZSxyKXt2YXIgaT1yWzBdLG89aS50cmFjZSxzPWkuY3gsYz1pLmN5OyJfaGFzSG92ZXJMYWJlbCJpbiBvfHwoby5faGFzSG92ZXJMYWJlbD0hMSksIl9oYXNIb3ZlckV2ZW50ImluIG98fChvLl9oYXNIb3ZlckV2ZW50PSExKSx0Lm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LHU9ZS5fZnVsbERhdGFbby5pbmRleF07aWYoIWUuX2RyYWdnaW5nJiYhMSE9PXIuaG92ZXJtb2RlKXt2YXIgZj11LmhvdmVyaW5mbztpZihBcnJheS5pc0FycmF5KGYpJiYoZj1hLmNhc3RIb3ZlcmluZm8oe2hvdmVyaW5mbzpbbS5jYXN0T3B0aW9uKGYsdC5wdHMpXSxfbW9kdWxlOm8uX21vZHVsZX0sciwwKSksImFsbCI9PT1mJiYoZj0ibGFiZWwrdGV4dCt2YWx1ZStwZXJjZW50K25hbWUiKSx1LmhvdmVydGVtcGxhdGV8fCJub25lIiE9PWYmJiJza2lwIiE9PWYmJmYpe3ZhciBoPXQuckluc2NyaWJlZHx8MCxwPXMrdC5weG1pZFswXSooMS1oKSxkPWMrdC5weG1pZFsxXSooMS1oKSxnPXIuc2VwYXJhdG9ycyx5PVtdO2lmKGYmJi0xIT09Zi5pbmRleE9mKCJsYWJlbCIpJiZ5LnB1c2godC5sYWJlbCksdC50ZXh0PW0uY2FzdE9wdGlvbih1LmhvdmVydGV4dHx8dS50ZXh0LHQucHRzKSxmJiYtMSE9PWYuaW5kZXhPZigidGV4dCIpKXt2YXIgeD10LnRleHQ7bC5pc1ZhbGlkVGV4dFZhbHVlKHgpJiZ5LnB1c2goeCl9dC52YWx1ZT10LnYsdC52YWx1ZUxhYmVsPW0uZm9ybWF0UGllVmFsdWUodC52LGcpLGYmJi0xIT09Zi5pbmRleE9mKCJ2YWx1ZSIpJiZ5LnB1c2godC52YWx1ZUxhYmVsKSx0LnBlcmNlbnQ9dC52L2kudlRvdGFsLHQucGVyY2VudExhYmVsPW0uZm9ybWF0UGllUGVyY2VudCh0LnBlcmNlbnQsZyksZiYmLTEhPT1mLmluZGV4T2YoInBlcmNlbnQiKSYmeS5wdXNoKHQucGVyY2VudExhYmVsKTt2YXIgYj11LmhvdmVybGFiZWwsXz1iLmZvbnQ7YS5sb25lSG92ZXIoe3RyYWNlOm8seDA6cC1oKmkucix4MTpwK2gqaS5yLHk6ZCx0ZXh0Onkuam9pbigiPGJyPiIpLG5hbWU6dS5ob3ZlcnRlbXBsYXRlfHwtMSE9PWYuaW5kZXhPZigibmFtZSIpP3UubmFtZTp2b2lkIDAsaWRlYWxBbGlnbjp0LnB4bWlkWzBdPDA/ImxlZnQiOiJyaWdodCIsY29sb3I6bS5jYXN0T3B0aW9uKGIuYmdjb2xvcix0LnB0cyl8fHQuY29sb3IsYm9yZGVyQ29sb3I6bS5jYXN0T3B0aW9uKGIuYm9yZGVyY29sb3IsdC5wdHMpLGZvbnRGYW1pbHk6bS5jYXN0T3B0aW9uKF8uZmFtaWx5LHQucHRzKSxmb250U2l6ZTptLmNhc3RPcHRpb24oXy5zaXplLHQucHRzKSxmb250Q29sb3I6bS5jYXN0T3B0aW9uKF8uY29sb3IsdC5wdHMpLG5hbWVMZW5ndGg6bS5jYXN0T3B0aW9uKGIubmFtZWxlbmd0aCx0LnB0cyksdGV4dEFsaWduOm0uY2FzdE9wdGlvbihiLmFsaWduLHQucHRzKSxob3ZlcnRlbXBsYXRlOm0uY2FzdE9wdGlvbih1LmhvdmVydGVtcGxhdGUsdC5wdHMpLGhvdmVydGVtcGxhdGVMYWJlbHM6dCxldmVudERhdGE6W3YodCx1KV19LHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOmV9KSxvLl9oYXNIb3ZlckxhYmVsPSEwfW8uX2hhc0hvdmVyRXZlbnQ9ITAsZS5lbWl0KCJwbG90bHlfaG92ZXIiLHtwb2ludHM6W3YodCx1KV0sZXZlbnQ6bi5ldmVudH0pfX0pKSx0Lm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsaT1lLl9mdWxsRGF0YVtvLmluZGV4XSxzPW4uc2VsZWN0KHRoaXMpLmRhdHVtKCk7by5faGFzSG92ZXJFdmVudCYmKHQub3JpZ2luYWxFdmVudD1uLmV2ZW50LGUuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6W3YocyxpKV0sZXZlbnQ6bi5ldmVudH0pLG8uX2hhc0hvdmVyRXZlbnQ9ITEpLG8uX2hhc0hvdmVyTGFiZWwmJihhLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSxvLl9oYXNIb3ZlckxhYmVsPSExKX0pKSx0Lm9uKCJjbGljayIsKGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsaT1lLl9mdWxsRGF0YVtvLmluZGV4XTtlLl9kcmFnZ2luZ3x8ITE9PT1yLmhvdmVybW9kZXx8KGUuX2hvdmVyZGF0YT1bdih0LGkpXSxhLmNsaWNrKGUsbi5ldmVudCkpfSkpfWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPW0uY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmNvbG9yLGUucHRzKTshbiYmdC5faW5wdXQudGV4dGZvbnQmJihuPW0uY2FzdE9wdGlvbih0Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcixlLnB0cykpO3ZhciBpPW0uY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmZhbWlseSxlLnB0cyl8fG0uY2FzdE9wdGlvbih0LnRleHRmb250LmZhbWlseSxlLnB0cyl8fHIuZmFtaWx5LGE9bS5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuc2l6ZSxlLnB0cyl8fG0uY2FzdE9wdGlvbih0LnRleHRmb250LnNpemUsZS5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm58fG8uY29udHJhc3QoZS5jb2xvciksZmFtaWx5Omksc2l6ZTphfX1mdW5jdGlvbiBfKHQsZSl7Zm9yKHZhciByLG4saT0wO2k8dC5sZW5ndGg7aSsrKWlmKChuPShyPXRbaV1bMF0pLnRyYWNlKS50aXRsZS50ZXh0KXt2YXIgYT1uLnRpdGxlLnRleHQ7bi5fbWV0YSYmKGE9bC50ZW1wbGF0ZVN0cmluZyhhLG4uX21ldGEpKTt2YXIgbz1zLnRlc3Rlci5hcHBlbmQoInRleHQiKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS50ZXh0KGEpLmNhbGwocy5mb250LG4udGl0bGUuZm9udCkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyxlKSxjPXMuYkJveChvLm5vZGUoKSwhMCk7ci50aXRsZUJveD17d2lkdGg6Yy53aWR0aCxoZWlnaHQ6Yy5oZWlnaHR9LG8ucmVtb3ZlKCl9fWZ1bmN0aW9uIHcodCxlLHIpe3ZhciBuPXIucnx8ZS5ycHgxLGk9ZS5ySW5zY3JpYmVkO2lmKGUuc3RhcnRhbmdsZT09PWUuc3RvcGFuZ2xlKXJldHVybntyQ2VudGVyOjEtaSxzY2FsZTowLHJvdGF0ZTowLHRleHRQb3NBbmdsZTowfTt2YXIgYSxvPWUucmluZyxzPTE9PT1vJiZNYXRoLmFicyhlLnN0YXJ0YW5nbGUtZS5zdG9wYW5nbGUpPT09MipNYXRoLlBJLGw9ZS5oYWxmYW5nbGUsYz1lLm1pZGFuZ2xlLHU9ci50cmFjZS5pbnNpZGV0ZXh0b3JpZW50YXRpb24sZj0iaG9yaXpvbnRhbCI9PT11LGg9InRhbmdlbnRpYWwiPT09dSxwPSJyYWRpYWwiPT09dSxkPSJhdXRvIj09PXUsZz1bXTtpZighZCl7dmFyIG0sdj1mdW5jdGlvbihyLGkpe2lmKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFydGFuZ2xlLG49dC5zdG9wYW5nbGU7cmV0dXJuIHI+ZSYmZT5ufHxyPGUmJmU8bn0oZSxyKSl7dmFyIHM9TWF0aC5hYnMoci1lLnN0YXJ0YW5nbGUpLGw9TWF0aC5hYnMoci1lLnN0b3BhbmdsZSksYz1zPGw/czpsOyhhPSJ0YW4iPT09aT9rKHQsbixvLGMsMCk6VCh0LG4sbyxjLE1hdGguUEkvMikpLnRleHRQb3NBbmdsZT1yLGcucHVzaChhKX19O2lmKGZ8fGgpe2ZvcihtPTQ7bT49LTQ7bS09Mil2KE1hdGguUEkqbSwidGFuIik7Zm9yKG09NDttPj0tNDttLT0yKXYoTWF0aC5QSSoobSsxKSwidGFuIil9aWYoZnx8cCl7Zm9yKG09NDttPj0tNDttLT0yKXYoTWF0aC5QSSoobSsxLjUpLCJyYWQiKTtmb3IobT00O20+PS00O20tPTIpdihNYXRoLlBJKihtKy41KSwicmFkIil9fWlmKHN8fGR8fGYpe3ZhciB5PU1hdGguc3FydCh0LndpZHRoKnQud2lkdGgrdC5oZWlnaHQqdC5oZWlnaHQpO2lmKChhPXtzY2FsZTppKm4qMi95LHJDZW50ZXI6MS1pLHJvdGF0ZTowfSkudGV4dFBvc0FuZ2xlPShlLnN0YXJ0YW5nbGUrZS5zdG9wYW5nbGUpLzIsYS5zY2FsZT49MSlyZXR1cm4gYTtnLnB1c2goYSl9KGR8fHApJiYoKGE9VCh0LG4sbyxsLGMpKS50ZXh0UG9zQW5nbGU9KGUuc3RhcnRhbmdsZStlLnN0b3BhbmdsZSkvMixnLnB1c2goYSkpLChkfHxoKSYmKChhPWsodCxuLG8sbCxjKSkudGV4dFBvc0FuZ2xlPShlLnN0YXJ0YW5nbGUrZS5zdG9wYW5nbGUpLzIsZy5wdXNoKGEpKTtmb3IodmFyIHg9MCxiPTAsXz0wO188Zy5sZW5ndGg7XysrKXt2YXIgdz1nW19dLnNjYWxlO2lmKGI8dyYmKGI9dyx4PV8pLCFkJiZiPj0xKWJyZWFrfXJldHVybiBnW3hdfWZ1bmN0aW9uIFQodCxlLHIsbixpKXtlPU1hdGgubWF4KDAsZS0yKmcpO3ZhciBhPXQud2lkdGgvdC5oZWlnaHQsbz1TKGEsbixlLHIpO3JldHVybntzY2FsZToyKm8vdC5oZWlnaHQsckNlbnRlcjpNKGEsby9lKSxyb3RhdGU6QShpKX19ZnVuY3Rpb24gayh0LGUscixuLGkpe2U9TWF0aC5tYXgoMCxlLTIqZyk7dmFyIGE9dC5oZWlnaHQvdC53aWR0aCxvPVMoYSxuLGUscik7cmV0dXJue3NjYWxlOjIqby90LndpZHRoLHJDZW50ZXI6TShhLG8vZSkscm90YXRlOkEoaStNYXRoLlBJLzIpfX1mdW5jdGlvbiBNKHQsZSl7cmV0dXJuIE1hdGguY29zKGUpLXQqZX1mdW5jdGlvbiBBKHQpe3JldHVybigxODAvTWF0aC5QSSp0KzcyMCklMTgwLTkwfWZ1bmN0aW9uIFModCxlLHIsbil7dmFyIGk9dCsxLygyKk1hdGgudGFuKGUpKTtyZXR1cm4gcipNYXRoLm1pbigxLyhNYXRoLnNxcnQoaSppKy41KStpKSxuLyhNYXRoLnNxcnQodCp0K24vMikrdCkpfWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gdC52IT09ZS52VG90YWx8fGUudHJhY2UuaG9sZT9NYXRoLm1pbigxLygxKzEvTWF0aC5zaW4odC5oYWxmYW5nbGUpKSx0LnJpbmcvMik6MX1mdW5jdGlvbiBDKHQsZSl7dmFyIHI9ZS5weG1pZFswXSxuPWUucHhtaWRbMV0saT10LndpZHRoLzIsYT10LmhlaWdodC8yO3JldHVybiByPDAmJihpKj0tMSksbjwwJiYoYSo9LTEpLHtzY2FsZToxLHJDZW50ZXI6MSxyb3RhdGU6MCx4OmkrTWF0aC5hYnMoYSkqKGk+MD8xOi0xKS8yLHk6YS8oMStyKnIvKG4qbikpLG91dHNpZGU6ITB9fWZ1bmN0aW9uIEwodCxlKXt2YXIgcixuLGksYT10LnRyYWNlLG89e3g6dC5jeCx5OnQuY3l9LHM9e3R4OjAsdHk6MH07cy50eSs9YS50aXRsZS5mb250LnNpemUsaT1QKGEpLC0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJ0b3AiKT8oby55LT0oMStpKSp0LnIscy50eS09dC50aXRsZUJveC5oZWlnaHQpOi0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSYmKG8ueSs9KDEraSkqdC5yKTt2YXIgbCxjLHU9KGw9dC5yLGM9dC50cmFjZS5hc3BlY3RyYXRpbyxsLyh2b2lkIDA9PT1jPzE6YykpLGY9ZS53KihhLmRvbWFpbi54WzFdLWEuZG9tYWluLnhbMF0pLzI7cmV0dXJuLTEhPT1hLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImxlZnQiKT8oZis9dSxvLngtPSgxK2kpKnUscy50eCs9dC50aXRsZUJveC53aWR0aC8yKTotMSE9PWEudGl0bGUucG9zaXRpb24uaW5kZXhPZigiY2VudGVyIik/Zio9MjotMSE9PWEudGl0bGUucG9zaXRpb24uaW5kZXhPZigicmlnaHQiKSYmKGYrPXUsby54Kz0oMStpKSp1LHMudHgtPXQudGl0bGVCb3gud2lkdGgvMikscj1mL3QudGl0bGVCb3gud2lkdGgsbj1JKHQsZSkvdC50aXRsZUJveC5oZWlnaHQse3g6by54LHk6by55LHNjYWxlOk1hdGgubWluKHIsbiksdHg6cy50eCx0eTpzLnR5fX1mdW5jdGlvbiBJKHQsZSl7dmFyIHI9dC50cmFjZSxuPWUuaCooci5kb21haW4ueVsxXS1yLmRvbWFpbi55WzBdKTtyZXR1cm4gTWF0aC5taW4odC50aXRsZUJveC5oZWlnaHQsbi8yKX1mdW5jdGlvbiBQKHQpe3ZhciBlLHI9dC5wdWxsO2lmKCFyKXJldHVybiAwO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHI9MCxlPTA7ZTx0LnB1bGwubGVuZ3RoO2UrKyl0LnB1bGxbZV0+ciYmKHI9dC5wdWxsW2VdKTtyZXR1cm4gcn1mdW5jdGlvbiB6KHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXVswXSxhPWkudHJhY2Usbz1hLmRvbWFpbixzPWUudyooby54WzFdLW8ueFswXSksbD1lLmgqKG8ueVsxXS1vLnlbMF0pO2EudGl0bGUudGV4dCYmIm1pZGRsZSBjZW50ZXIiIT09YS50aXRsZS5wb3NpdGlvbiYmKGwtPUkoaSxlKSk7dmFyIGM9cy8yLHU9bC8yOyJmdW5uZWxhcmVhIiE9PWEudHlwZXx8YS5zY2FsZWdyb3VwfHwodS89YS5hc3BlY3RyYXRpbyksaS5yPU1hdGgubWluKGMsdSkvKDErUChhKSksaS5jeD1lLmwrZS53KihhLmRvbWFpbi54WzFdK2EuZG9tYWluLnhbMF0pLzIsaS5jeT1lLnQrZS5oKigxLWEuZG9tYWluLnlbMF0pLWwvMixhLnRpdGxlLnRleHQmJi0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSYmKGkuY3ktPUkoaSxlKSksYS5zY2FsZWdyb3VwJiYtMT09PXIuaW5kZXhPZihhLnNjYWxlZ3JvdXApJiZyLnB1c2goYS5zY2FsZWdyb3VwKX0hZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89MS8wLHM9ZVthXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKHI9dFtuXVswXSwoaT1yLnRyYWNlKS5zY2FsZWdyb3VwPT09cyl7dmFyIGw7aWYoInBpZSI9PT1pLnR5cGUpbD1yLnIqci5yO2Vsc2UgaWYoImZ1bm5lbGFyZWEiPT09aS50eXBlKXt2YXIgYyx1O2kuYXNwZWN0cmF0aW8+MT8oYz1yLnIsdT1jL2kuYXNwZWN0cmF0aW8pOih1PXIucixjPXUqaS5hc3BlY3RyYXRpbyksYyo9KDEraS5iYXNlcmF0aW8pLzIsbD1jKnV9bz1NYXRoLm1pbihvLGwvci52VG90YWwpfWZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYocj10W25dWzBdLChpPXIudHJhY2UpLnNjYWxlZ3JvdXA9PT1zKXt2YXIgZj1vKnIudlRvdGFsOyJmdW5uZWxhcmVhIj09PWkudHlwZSYmKGYvPSgxK2kuYmFzZXJhdGlvKS8yLGYvPWkuYXNwZWN0cmF0aW8pLHIucj1NYXRoLnNxcnQoZil9fX0odCxyKX1mdW5jdGlvbiBPKHQsZSl7cmV0dXJuW3QqTWF0aC5zaW4oZSksLXQqTWF0aC5jb3MoZSldfWZ1bmN0aW9uIEQodCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT1yLnRyYWNlLGE9aS50ZXh0dGVtcGxhdGUsbz1pLnRleHRpbmZvO2lmKCFhJiZvJiYibm9uZSIhPT1vKXt2YXIgcyxjPW8uc3BsaXQoIisiKSx1PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09Yy5pbmRleE9mKHQpfSxmPXUoImxhYmVsIiksaD11KCJ0ZXh0IikscD11KCJ2YWx1ZSIpLGQ9dSgicGVyY2VudCIpLGc9bi5zZXBhcmF0b3JzO2lmKHM9Zj9bZS5sYWJlbF06W10saCl7dmFyIHY9bS5nZXRGaXJzdEZpbGxlZChpLnRleHQsZS5wdHMpO3kodikmJnMucHVzaCh2KX1wJiZzLnB1c2gobS5mb3JtYXRQaWVWYWx1ZShlLnYsZykpLGQmJnMucHVzaChtLmZvcm1hdFBpZVBlcmNlbnQoZS52L3IudlRvdGFsLGcpKSxlLnRleHQ9cy5qb2luKCI8YnI+Iil9aWYoYSl7dmFyIHg9bC5jYXN0T3B0aW9uKGksZS5pLCJ0ZXh0dGVtcGxhdGUiKTtpZih4KXt2YXIgYj1mdW5jdGlvbih0KXtyZXR1cm57bGFiZWw6dC5sYWJlbCx2YWx1ZTp0LnYsdmFsdWVMYWJlbDptLmZvcm1hdFBpZVZhbHVlKHQudixuLnNlcGFyYXRvcnMpLHBlcmNlbnQ6dC52L3IudlRvdGFsLHBlcmNlbnRMYWJlbDptLmZvcm1hdFBpZVBlcmNlbnQodC52L3IudlRvdGFsLG4uc2VwYXJhdG9ycyksY29sb3I6dC5jb2xvcix0ZXh0OnQudGV4dCxjdXN0b21kYXRhOmwuY2FzdE9wdGlvbihpLHQuaSwiY3VzdG9tZGF0YSIpfX0oZSksXz1tLmdldEZpcnN0RmlsbGVkKGkudGV4dCxlLnB0cyk7KHkoXyl8fCIiPT09XykmJihiLnRleHQ9XyksZS50ZXh0PWwudGV4dHRlbXBsYXRlU3RyaW5nKHgsYix0Ll9mdWxsTGF5b3V0Ll9kM2xvY2FsZSxiLGkuX21ldGF8fHt9KX1lbHNlIGUudGV4dD0iIn19ZnVuY3Rpb24gUih0LGUpe3ZhciByPXQucm90YXRlKk1hdGguUEkvMTgwLG49TWF0aC5jb3MociksaT1NYXRoLnNpbihyKSxhPShlLmxlZnQrZS5yaWdodCkvMixvPShlLnRvcCtlLmJvdHRvbSkvMjt0LnRleHRYPWEqbi1vKmksdC50ZXh0WT1hKmkrbypuLHQubm9DZW50ZXI9ITB9ZS5leHBvcnRzPXtwbG90OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxhPXIuX3NpemU7ZCgicGllIixyKSxfKGUsdCkseihlLGEpO3ZhciBoPWwubWFrZVRyYWNlR3JvdXBzKHIuX3BpZWxheWVyLGUsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGg9bi5zZWxlY3QodGhpcyksZD1lWzBdLGc9ZC50cmFjZTshZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dFswXSxhPWkucixvPWkudHJhY2Uscz1tLmdldFJvdGF0aW9uQW5nbGUoby5yb3RhdGlvbiksbD0yKk1hdGguUEkvaS52VG90YWwsYz0icHgwIix1PSJweDEiO2lmKCJjb3VudGVyY2xvY2t3aXNlIj09PW8uZGlyZWN0aW9uKXtmb3IoZT0wO2U8dC5sZW5ndGgmJnRbZV0uaGlkZGVuO2UrKyk7aWYoZT09PXQubGVuZ3RoKXJldHVybjtzKz1sKnRbZV0udixsKj0tMSxjPSJweDEiLHU9InB4MCJ9Zm9yKG49TyhhLHMpLGU9MDtlPHQubGVuZ3RoO2UrKykocj10W2VdKS5oaWRkZW58fChyW2NdPW4sci5zdGFydGFuZ2xlPXMscys9bCpyLnYvMixyLnB4bWlkPU8oYSxzKSxyLm1pZGFuZ2xlPXMscys9bCpyLnYvMixuPU8oYSxzKSxyLnN0b3BhbmdsZT1zLHJbdV09bixyLmxhcmdlQXJjPXIudj5pLnZUb3RhbC8yPzE6MCxyLmhhbGZhbmdsZT1NYXRoLlBJKk1hdGgubWluKHIudi9pLnZUb3RhbCwuNSksci5yaW5nPTEtby5ob2xlLHIuckluc2NyaWJlZD1FKHIsaSkpfShlKSxoLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIiksaC5lYWNoKChmdW5jdGlvbigpe3ZhciB2PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5zbGljZSIpLmRhdGEoZSk7di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCksdi5leGl0KCkucmVtb3ZlKCk7dmFyIHk9W1tbXSxbXV0sW1tdLFtdXV0sXz0hMTt2LmVhY2goKGZ1bmN0aW9uKGksYSl7aWYoaS5oaWRkZW4pbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlbHNle2kucG9pbnROdW1iZXI9aS5pLGkuY3VydmVOdW1iZXI9Zy5pbmRleCx5W2kucHhtaWRbMV08MD8wOjFdW2kucHhtaWRbMF08MD8wOjFdLnB1c2goaSk7dmFyIG89ZC5jeCxjPWQuY3ksdT1uLnNlbGVjdCh0aGlzKSxoPXUuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5kYXRhKFtpXSk7aWYoaC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInN1cmZhY2UiLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLHUuY2FsbCh4LHQsZSksZy5wdWxsKXt2YXIgdj0rbS5jYXN0T3B0aW9uKGcucHVsbCxpLnB0cyl8fDA7dj4wJiYobys9dippLnB4bWlkWzBdLGMrPXYqaS5weG1pZFsxXSl9aS5jeEZpbmFsPW8saS5jeUZpbmFsPWM7dmFyIFQ9Zy5ob2xlO2lmKGkudj09PWQudlRvdGFsKXt2YXIgaz0iTSIrKG8raS5weDBbMF0pKyIsIisoYytpLnB4MFsxXSkrTChpLnB4MCxpLnB4bWlkLCEwLDEpK0woaS5weG1pZCxpLnB4MCwhMCwxKSsiWiI7VD9oLmF0dHIoImQiLCJNIisobytUKmkucHgwWzBdKSsiLCIrKGMrVCppLnB4MFsxXSkrTChpLnB4MCxpLnB4bWlkLCExLFQpK0woaS5weG1pZCxpLnB4MCwhMSxUKSsiWiIrayk6aC5hdHRyKCJkIixrKX1lbHNle3ZhciBNPUwoaS5weDAsaS5weDEsITAsMSk7aWYoVCl7dmFyIEE9MS1UO2guYXR0cigiZCIsIk0iKyhvK1QqaS5weDFbMF0pKyIsIisoYytUKmkucHgxWzFdKStMKGkucHgxLGkucHgwLCExLFQpKyJsIitBKmkucHgwWzBdKyIsIitBKmkucHgwWzFdK00rIloiKX1lbHNlIGguYXR0cigiZCIsIk0iK28rIiwiK2MrImwiK2kucHgwWzBdKyIsIitpLnB4MFsxXStNKyJaIil9RCh0LGksZCk7dmFyIFM9bS5jYXN0T3B0aW9uKGcudGV4dHBvc2l0aW9uLGkucHRzKSxFPXUuc2VsZWN0QWxsKCJnLnNsaWNldGV4dCIpLmRhdGEoaS50ZXh0JiYibm9uZSIhPT1TP1swXTpbXSk7RS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLEUuZXhpdCgpLnJlbW92ZSgpLEUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdT1sLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksaD1sLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LCJvdXRzaWRlIj09PVM/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW0uY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5jb2xvcixlLnB0cyl8fG0uY2FzdE9wdGlvbih0LnRleHRmb250LmNvbG9yLGUucHRzKXx8ci5jb2xvcixpPW0uY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxtLmNhc3RPcHRpb24odC50ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxyLmZhbWlseSxhPW0uY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5zaXplLGUucHRzKXx8bS5jYXN0T3B0aW9uKHQudGV4dGZvbnQuc2l6ZSxlLnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bixmYW1pbHk6aSxzaXplOmF9fShnLGksci5mb250KTpiKGcsaSxyLmZvbnQpKTt1LnRleHQoaS50ZXh0KS5hdHRyKHtjbGFzczoic2xpY2V0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwocy5mb250LGgpLmNhbGwoZi5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHYseT1zLmJCb3godS5ub2RlKCkpO2lmKCJvdXRzaWRlIj09PVMpdj1DKHksaSk7ZWxzZSBpZih2PXcoeSxpLGQpLCJhdXRvIj09PVMmJnYuc2NhbGU8MSl7dmFyIHg9bC5lbnN1cmVVbmlmb3JtRm9udFNpemUodCxnLm91dHNpZGV0ZXh0Zm9udCk7dS5jYWxsKHMuZm9udCx4KSx2PUMoeT1zLmJCb3godS5ub2RlKCkpLGkpfXZhciBUPXYudGV4dFBvc0FuZ2xlLGs9dm9pZCAwPT09VD9pLnB4bWlkOk8oZC5yLFQpO2lmKHYudGFyZ2V0WD1vK2tbMF0qdi5yQ2VudGVyKyh2Lnh8fDApLHYudGFyZ2V0WT1jK2tbMV0qdi5yQ2VudGVyKyh2Lnl8fDApLFIodix5KSx2Lm91dHNpZGUpe3ZhciBNPXYudGFyZ2V0WTtpLnlMYWJlbE1pbj1NLXkuaGVpZ2h0LzIsaS55TGFiZWxNaWQ9TSxpLnlMYWJlbE1heD1NK3kuaGVpZ2h0LzIsaS5sYWJlbEV4dHJhWD0wLGkubGFiZWxFeHRyYVk9MCxfPSEwfXYuZm9udFNpemU9aC5zaXplLHAoZy50eXBlLHYsciksZVthXS50cmFuc2Zvcm09dix1LmF0dHIoInRyYW5zZm9ybSIsbC5nZXRUZXh0VHJhbnNmb3JtKHYpKX0pKX1mdW5jdGlvbiBMKHQsZSxyLG4pe3ZhciBhPW4qKGVbMF0tdFswXSksbz1uKihlWzFdLXRbMV0pO3JldHVybiJhIituKmQucisiLCIrbipkLnIrIiAwICIraS5sYXJnZUFyYysocj8iIDEgIjoiIDAgIikrYSsiLCIrb319KSk7dmFyIFQ9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRpdGxldGV4dCIpLmRhdGEoZy50aXRsZS50ZXh0P1swXTpbXSk7aWYoVC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRpdGxldGV4dCIsITApLFQuZXhpdCgpLnJlbW92ZSgpLFQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZSxyPWwuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxpPWcudGl0bGUudGV4dDtnLl9tZXRhJiYoaT1sLnRlbXBsYXRlU3RyaW5nKGksZy5fbWV0YSkpLHIudGV4dChpKS5hdHRyKHtjbGFzczoidGl0bGV0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwocy5mb250LGcudGl0bGUuZm9udCkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyx0KSxlPSJtaWRkbGUgY2VudGVyIj09PWcudGl0bGUucG9zaXRpb24/ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQudGl0bGVCb3gud2lkdGgqdC50aXRsZUJveC53aWR0aCt0LnRpdGxlQm94LmhlaWdodCp0LnRpdGxlQm94LmhlaWdodCk7cmV0dXJue3g6dC5jeCx5OnQuY3ksc2NhbGU6dC50cmFjZS5ob2xlKnQucioyL2UsdHg6MCx0eTotdC50aXRsZUJveC5oZWlnaHQvMit0LnRyYWNlLnRpdGxlLmZvbnQuc2l6ZX19KGQpOkwoZCxhKSxyLmF0dHIoInRyYW5zZm9ybSIsdShlLngsZS55KStjKE1hdGgubWluKDEsZS5zY2FsZSkpK3UoZS50eCxlLnR5KSl9KSksXyYmZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCxjLHUsZixoLHAsZDtmdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHQucHhtaWRbMV0tZS5weG1pZFsxXX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIGUucHhtaWRbMV0tdC5weG1pZFsxXX1mdW5jdGlvbiB5KHQscil7cnx8KHI9e30pO3ZhciBpLGMsdSxoLHA9ci5sYWJlbEV4dHJhWSsobj9yLnlMYWJlbE1heDpyLnlMYWJlbE1pbiksZD1uP3QueUxhYmVsTWluOnQueUxhYmVsTWF4LGc9bj90LnlMYWJlbE1heDp0LnlMYWJlbE1pbix2PXQuY3lGaW5hbCtvKHQucHgwWzFdLHQucHgxWzFdKSx5PXAtZDtpZih5Kmw+MCYmKHQubGFiZWxFeHRyYVk9eSksQXJyYXkuaXNBcnJheShlLnB1bGwpKWZvcihjPTA7YzxmLmxlbmd0aDtjKyspKHU9ZltjXSk9PT10fHwobS5jYXN0T3B0aW9uKGUucHVsbCx0LnB0cyl8fDApPj0obS5jYXN0T3B0aW9uKGUucHVsbCx1LnB0cyl8fDApfHwoKHQucHhtaWRbMV0tdS5weG1pZFsxXSkqbD4wPyh5PXUuY3lGaW5hbCtvKHUucHgwWzFdLHUucHgxWzFdKS1kLXQubGFiZWxFeHRyYVkpKmw+MCYmKHQubGFiZWxFeHRyYVkrPXkpOihnK3QubGFiZWxFeHRyYVktdikqbD4wJiYoaT0zKnMqTWF0aC5hYnMoYy1mLmluZGV4T2YodCkpLChoPXUuY3hGaW5hbCthKHUucHgwWzBdLHUucHgxWzBdKStpLSh0LmN4RmluYWwrdC5weG1pZFswXSktdC5sYWJlbEV4dHJhWCkqcz4wJiYodC5sYWJlbEV4dHJhWCs9aCkpKX1mb3Iobj0wO248MjtuKyspZm9yKGk9bj9nOnYsbz1uP01hdGgubWF4Ok1hdGgubWluLGw9bj8xOi0xLHI9MDtyPDI7cisrKXtmb3IoYT1yP01hdGgubWF4Ok1hdGgubWluLHM9cj8xOi0xLChjPXRbbl1bcl0pLnNvcnQoaSksdT10WzEtbl1bcl0sZj11LmNvbmNhdChjKSxwPVtdLGg9MDtoPGMubGVuZ3RoO2grKyl2b2lkIDAhPT1jW2hdLnlMYWJlbE1pZCYmcC5wdXNoKGNbaF0pO2ZvcihkPSExLGg9MDtuJiZoPHUubGVuZ3RoO2grKylpZih2b2lkIDAhPT11W2hdLnlMYWJlbE1pZCl7ZD11W2hdO2JyZWFrfWZvcihoPTA7aDxwLmxlbmd0aDtoKyspe3ZhciB4PWgmJnBbaC0xXTtkJiYhaCYmKHg9ZCkseShwW2hdLHgpfX19KHksZyksZnVuY3Rpb24odCxlKXt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQubGFiZWxFeHRyYVh8fHQubGFiZWxFeHRyYVkpe3ZhciBpPXIuc2VsZWN0KCJnLnNsaWNldGV4dCB0ZXh0Iik7dC50cmFuc2Zvcm0udGFyZ2V0WCs9dC5sYWJlbEV4dHJhWCx0LnRyYW5zZm9ybS50YXJnZXRZKz10LmxhYmVsRXh0cmFZLGkuYXR0cigidHJhbnNmb3JtIixsLmdldFRleHRUcmFuc2Zvcm0odC50cmFuc2Zvcm0pKTt2YXIgYT10LmN4RmluYWwrdC5weG1pZFswXSxzPSJNIithKyIsIisodC5jeUZpbmFsK3QucHhtaWRbMV0pLGM9KHQueUxhYmVsTWF4LXQueUxhYmVsTWluKSoodC5weG1pZFswXTwwPy0xOjEpLzQ7aWYodC5sYWJlbEV4dHJhWCl7dmFyIHU9dC5sYWJlbEV4dHJhWCp0LnB4bWlkWzFdL3QucHhtaWRbMF0sZj10LnlMYWJlbE1pZCt0LmxhYmVsRXh0cmFZLSh0LmN5RmluYWwrdC5weG1pZFsxXSk7TWF0aC5hYnModSk+TWF0aC5hYnMoZik/cys9ImwiK2YqdC5weG1pZFswXS90LnB4bWlkWzFdKyIsIitmKyJIIisoYSt0LmxhYmVsRXh0cmFYK2MpOnMrPSJsIit0LmxhYmVsRXh0cmFYKyIsIit1KyJ2IisoZi11KSsiaCIrY31lbHNlIHMrPSJWIisodC55TGFiZWxNaWQrdC5sYWJlbEV4dHJhWSkrImgiK2M7bC5lbnN1cmVTaW5nbGUociwicGF0aCIsInRleHRsaW5lIikuY2FsbChvLnN0cm9rZSxlLm91dHNpZGV0ZXh0Zm9udC5jb2xvcikuYXR0cih7InN0cm9rZS13aWR0aCI6TWF0aC5taW4oMixlLm91dHNpZGV0ZXh0Zm9udC5zaXplLzgpLGQ6cyxmaWxsOiJub25lIn0pfWVsc2Ugci5zZWxlY3QoInBhdGgudGV4dGxpbmUiKS5yZW1vdmUoKX0pKX0odixnKSxfJiZnLmF1dG9tYXJnaW4pe3ZhciBrPXMuYkJveChoLm5vZGUoKSksTT1nLmRvbWFpbixBPWEudyooTS54WzFdLU0ueFswXSksUz1hLmgqKE0ueVsxXS1NLnlbMF0pLEU9KC41KkEtZC5yKS9hLncsST0oLjUqUy1kLnIpL2EuaDtpLmF1dG9NYXJnaW4odCwicGllLiIrZy51aWQrIi5hdXRvbWFyZ2luIix7eGw6TS54WzBdLUUseHI6TS54WzFdK0UseWI6TS55WzBdLUkseXQ6TS55WzFdK0ksbDpNYXRoLm1heChkLmN4LWQuci1rLmxlZnQsMCkscjpNYXRoLm1heChrLnJpZ2h0LShkLmN4K2QuciksMCksYjpNYXRoLm1heChrLmJvdHRvbS0oZC5jeStkLnIpLDApLHQ6TWF0aC5tYXgoZC5jeS1kLnItay50b3AsMCkscGFkOjV9KX19KSl9KSk7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtoLnNlbGVjdEFsbCgidHNwYW4iKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXR0cigiZHkiKSYmdC5hdHRyKCJkeSIsdC5hdHRyKCJkeSIpKX0pKX0pLDApfSxmb3JtYXRTbGljZUxhYmVsOkQsdHJhbnNmb3JtSW5zaWRlVGV4dDp3LGRldGVybWluZUluc2lkZVRleHRGb250OmIscG9zaXRpb25UaXRsZU91dHNpZGU6TCxwcmVyZW5kZXJUaXRsZXM6XyxsYXlvdXRBcmVhczp6LGF0dGFjaEZ4SGFuZGxlcnM6eCxjb21wdXRlVHJhbnNmb3JtOlJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY4MywiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAzLCIuLi8uLi9wbG90cy9wbG90cyI6ODkxLCIuLi9iYXIvY29uc3RhbnRzIjo5MjMsIi4uL2Jhci91bmlmb3JtX3RleHQiOjkzNywiLi9ldmVudF9kYXRhIjoxMTY1LCIuL2hlbHBlcnMiOjExNjYsZDM6MTY5fV0sMTE3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi9zdHlsZV9vbmUiKSxhPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9waWVsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpO2EodCxlLCJwaWUiKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKTtyLnN0eWxlKHtvcGFjaXR5OmUub3BhY2l0eX0pLHIuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5jYWxsKGksdCxlKX0pKX0pKX19LHsiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTM3LCIuL3N0eWxlX29uZSI6MTE3MixkMzoxNjl9XSwxMTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4vaGVscGVycyIpLmNhc3RPcHRpb247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1yLm1hcmtlci5saW5lLG89aShhLmNvbG9yLGUucHRzKXx8bi5kZWZhdWx0TGluZSxzPWkoYS53aWR0aCxlLnB0cyl8fDA7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIixzKS5jYWxsKG4uZmlsbCxlLmNvbG9yKS5jYWxsKG4uc3Ryb2tlLG8pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4vaGVscGVycyI6MTE2Nn1dLDExNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXt4Om4ueCx5Om4ueSx4eTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxpbmRpY2VzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHhib3VuZHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seWJvdW5kczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Om4udGV4dCxtYXJrZXI6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxibGVuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1pbjp7dmFsVHlwZToibnVtYmVyIixtaW46LjEsbWF4OjIsZGZsdDouNSxlZGl0VHlwZToiY2FsYyJ9LHNpemVtYXg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xLGRmbHQ6MjAsZWRpdFR5cGU6ImNhbGMifSxib3JkZXI6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9LGFyZWFyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNmb3Jtczp2b2lkIDB9fSx7Ii4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE4N31dLDExNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtcG9pbnRjbG91ZDJkIiksaT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLG89dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKTtmdW5jdGlvbiBzKHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy50eXBlPSJwb2ludGNsb3VkIix0aGlzLnBpY2tYRGF0YT1bXSx0aGlzLnBpY2tZRGF0YT1bXSx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuY29sb3I9InJnYigwLCAwLCAwKSIsdGhpcy5uYW1lPSIiLHRoaXMuaG92ZXJpbmZvPSJhbGwiLHRoaXMuaWRUb0luZGV4PW5ldyBJbnQzMkFycmF5KDApLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zPXtwb3NpdGlvbnM6bmV3IEZsb2F0MzJBcnJheSgwKSxpZFRvSW5kZXg6dGhpcy5pZFRvSW5kZXgsc2l6ZW1pbjouNSxzaXplbWF4OjEyLGNvbG9yOlswLDAsMCwxXSxhcmVhUmF0aW86MSxib3JkZXJDb2xvcjpbMCwwLDAsMV19LHRoaXMucG9pbnRjbG91ZD1uKHQuZ2xwbG90LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMpLHRoaXMucG9pbnRjbG91ZC5fdHJhY2U9dGhpc312YXIgbD1zLnByb3RvdHlwZTtsLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZFRvSW5kZXhbdC5wb2ludElkXTtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDp0aGlzLnBpY2tYWURhdGE/W3RoaXMucGlja1hZRGF0YVsyKmVdLHRoaXMucGlja1hZRGF0YVsyKmUrMV1dOlt0aGlzLnBpY2tYRGF0YVtlXSx0aGlzLnBpY2tZRGF0YVtlXV0sdGV4dExhYmVsOkFycmF5LmlzQXJyYXkodGhpcy50ZXh0TGFiZWxzKT90aGlzLnRleHRMYWJlbHNbZV06dGhpcy50ZXh0TGFiZWxzLGNvbG9yOnRoaXMuY29sb3IsbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDplLGhvdmVyaW5mbzp0aGlzLmhvdmVyaW5mb319LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLnRleHRMYWJlbHM9dC50ZXh0LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm8sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnVwZGF0ZUZhc3QodCksdGhpcy5jb2xvcj1vKHQse30pfSxsLnVwZGF0ZUZhc3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLG8scyxsLGM9dGhpcy54RGF0YT10aGlzLnBpY2tYRGF0YT10LngsdT10aGlzLnlEYXRhPXRoaXMucGlja1lEYXRhPXQueSxmPXRoaXMucGlja1hZRGF0YT10Lnh5LGg9dC54Ym91bmRzJiZ0Lnlib3VuZHMscD10LmluZGljZXMsZD10aGlzLmJvdW5kcztpZihmKXtpZihuPWYsZT1mLmxlbmd0aD4+PjEsaClkWzBdPXQueGJvdW5kc1swXSxkWzJdPXQueGJvdW5kc1sxXSxkWzFdPXQueWJvdW5kc1swXSxkWzNdPXQueWJvdW5kc1sxXTtlbHNlIGZvcihsPTA7bDxlO2wrKylvPW5bMipsXSxzPW5bMipsKzFdLG88ZFswXSYmKGRbMF09byksbz5kWzJdJiYoZFsyXT1vKSxzPGRbMV0mJihkWzFdPXMpLHM+ZFszXSYmKGRbM109cyk7aWYocClyPXA7ZWxzZSBmb3Iocj1uZXcgSW50MzJBcnJheShlKSxsPTA7bDxlO2wrKylyW2xdPWx9ZWxzZSBmb3IoZT1jLmxlbmd0aCxuPW5ldyBGbG9hdDMyQXJyYXkoMiplKSxyPW5ldyBJbnQzMkFycmF5KGUpLGw9MDtsPGU7bCsrKW89Y1tsXSxzPXVbbF0scltsXT1sLG5bMipsXT1vLG5bMipsKzFdPXMsbzxkWzBdJiYoZFswXT1vKSxvPmRbMl0mJihkWzJdPW8pLHM8ZFsxXSYmKGRbMV09cykscz5kWzNdJiYoZFszXT1zKTt0aGlzLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuaWRUb0luZGV4PXIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5wb3NpdGlvbnM9bjt2YXIgZz1pKHQubWFya2VyLmNvbG9yKSxtPWkodC5tYXJrZXIuYm9yZGVyLmNvbG9yKSx2PXQub3BhY2l0eSp0Lm1hcmtlci5vcGFjaXR5O2dbM10qPXYsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5jb2xvcj1nO3ZhciB5PXQubWFya2VyLmJsZW5kO2lmKG51bGw9PT15KXt5PWMubGVuZ3RoPDEwMHx8dS5sZW5ndGg8MTAwfXRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYmxlbmQ9eSxtWzNdKj12LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYm9yZGVyQ29sb3I9bTt2YXIgeD10Lm1hcmtlci5zaXplbWluLGI9TWF0aC5tYXgodC5tYXJrZXIuc2l6ZW1heCx0Lm1hcmtlci5zaXplbWluKTt0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNaW49eCx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNYXg9Yix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmFyZWFSYXRpbz10Lm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvLHRoaXMucG9pbnRjbG91ZC51cGRhdGUodGhpcy5wb2ludGNsb3VkT3B0aW9ucyk7dmFyIF89dGhpcy5zY2VuZS54YXhpcyx3PXRoaXMuc2NlbmUueWF4aXMsVD1iLzJ8fC41O3QuX2V4dHJlbWVzW18uX2lkXT1hKF8sW2RbMF0sZFsyXV0se3BwYWQ6VH0pLHQuX2V4dHJlbWVzW3cuX2lkXT1hKHcsW2RbMV0sZFszXV0se3BwYWQ6VH0pfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBvaW50Y2xvdWQuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgcyh0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHsiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo4MjcsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMTk3LCJnbC1wb2ludGNsb3VkMmQiOjMyNH1dLDExNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKCJ4IiksYSgieSIpLGEoInhib3VuZHMiKSxhKCJ5Ym91bmRzIiksdC54eSYmdC54eSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmKGUueHk9dC54eSksdC5pbmRpY2VzJiZ0LmluZGljZXMgaW5zdGFuY2VvZiBJbnQzMkFycmF5JiYoZS5pbmRpY2VzPXQuaW5kaWNlcyksYSgidGV4dCIpLGEoIm1hcmtlci5jb2xvciIsciksYSgibWFya2VyLm9wYWNpdHkiKSxhKCJtYXJrZXIuYmxlbmQiKSxhKCJtYXJrZXIuc2l6ZW1pbiIpLGEoIm1hcmtlci5zaXplbWF4IiksYSgibWFya2VyLmJvcmRlci5jb2xvciIsciksYSgibWFya2VyLmJvcmRlci5hcmVhcmF0aW8iKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo3NzgsIi4vYXR0cmlidXRlcyI6MTE3M31dLDExNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4uL3NjYXR0ZXIzZC9jYWxjIikscGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToicG9pbnRjbG91ZCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wyZCIpLGNhdGVnb3JpZXM6WyJnbCIsImdsMmQiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wyZCI6ODY4LCIuLi9zY2F0dGVyM2QvY2FsYyI6MTIxNiwiLi9hdHRyaWJ1dGVzIjoxMTczLCIuL2NvbnZlcnQiOjExNzQsIi4vZGVmYXVsdHMiOjExNzV9XSwxMTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbD10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxmPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGg9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO3QoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuRk9STUFUX0xJTks7KGUuZXhwb3J0cz1oKHtob3ZlcmluZm86Zih7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6W10sYXJyYXlPazohMX0pLGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGRvbWFpbjpzKHtuYW1lOiJzYW5rZXkiLHRyYWNlOiEwfSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZGZsdDoiaCJ9LHZhbHVlZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6Ii4zcyJ9LHZhbHVlc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGFycmFuZ2VtZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzbmFwIiwicGVycGVuZGljdWxhciIsImZyZWVmb3JtIiwiZml4ZWQiXSxkZmx0OiJzbmFwIn0sdGV4dGZvbnQ6bih7fSksY3VzdG9tZGF0YTp2b2lkIDAsbm9kZTp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGdyb3Vwczp7dmFsVHlwZToiaW5mb19hcnJheSIsaW1wbGllZEVkaXRzOnt4OltdLHk6W119LGRpbWVuc2lvbnM6MixmcmVlTGVuZ3RoOiEwLGRmbHQ6W10saXRlbXM6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifX0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfSxjdXN0b21kYXRhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGFycmF5T2s6ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6LjUsYXJyYXlPazohMH19LHBhZDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiExLG1pbjowLGRmbHQ6MjB9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiExLG1pbjoxLGRmbHQ6MjB9LGhvdmVyaW5mbzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwibm9uZSIsInNraXAiXSxkZmx0OiJhbGwifSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxob3ZlcnRlbXBsYXRlOmwoe30se2tleXM6WyJ2YWx1ZSIsImxhYmVsIl19KX0sbGluazp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMH0sY3VzdG9tZGF0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsYXJyYXlPazohMH19LHNvdXJjZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sdGFyZ2V0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSx2YWx1ZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0saG92ZXJpbmZvOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJub25lIiwic2tpcCJdLGRmbHQ6ImFsbCJ9LGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGhvdmVydGVtcGxhdGU6bCh7fSx7a2V5czpbInZhbHVlIiwibGFiZWwiXX0pLGNvbG9yc2NhbGVzOnUoImNvbmNlbnRyYXRpb25zY2FsZXMiLHtlZGl0VHlwZToiY2FsYyIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6IiJ9LGNtYXg6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6MX0sY21pbjp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsZGZsdDowfSxjb2xvcnNjYWxlOmYoYygpLmNvbG9yc2NhbGUse2RmbHQ6W1swLCJ3aGl0ZSJdLFsxLCJibGFjayJdXX0pfSl9fSwiY2FsYyIsIm5lc3RlZCIpKS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjY0MiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY1MCwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo2NzQsIi4uLy4uL2NvbnN0YW50cy9kb2NzIjo3NDgsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODEwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTcsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyNCwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDZ9XSwxMTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KCIuL3Bsb3QiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LHU9dCgiLi4vLi4vbGliIiksZj10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIGgodCxlKXt2YXIgcj10Ll9mdWxsRGF0YVtlXSxuPXQuX2Z1bGxMYXlvdXQsaT1uLmRyYWdtb2RlLGE9InBhbiI9PT1uLmRyYWdtb2RlPyJtb3ZlIjoiY3Jvc3NoYWlyIixvPXIuX2JnUmVjdDtpZigicGFuIiE9PWkmJiJ6b29tIiE9PWkpe3MobyxhKTt2YXIgaD17X2lkOiJ4IixjMnA6dS5pZGVudGl0eSxfb2Zmc2V0OnIuX3NhbmtleS50cmFuc2xhdGVYLF9sZW5ndGg6ci5fc2Fua2V5LndpZHRofSxwPXtfaWQ6InkiLGMycDp1LmlkZW50aXR5LF9vZmZzZXQ6ci5fc2Fua2V5LnRyYW5zbGF0ZVksX2xlbmd0aDpyLl9zYW5rZXkuaGVpZ2h0fSxkPXtnZDp0LGVsZW1lbnQ6by5ub2RlKCkscGxvdGluZm86e2lkOmUseGF4aXM6aCx5YXhpczpwLGZpbGxSYW5nZUl0ZW1zOnUubm9vcH0sc3VicGxvdDplLHhheGVzOltoXSx5YXhlczpbcF0sZG9uZUZuQ29tcGxldGVkOmZ1bmN0aW9uKHIpe3ZhciBuLGk9dC5fZnVsbERhdGFbZV0sYT1pLm5vZGUuZ3JvdXBzLnNsaWNlKCksbz1bXTtmdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1pLl9zYW5rZXkuZ3JhcGgubm9kZXMscj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0ucG9pbnROdW1iZXI9PT10KXJldHVybiBlW3JdfWZvcih2YXIgbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1zKHJbbF0ucG9pbnROdW1iZXIpO2lmKGMpaWYoYy5ncm91cCl7Zm9yKHZhciB1PTA7dTxjLmNoaWxkcmVuTm9kZXMubGVuZ3RoO3UrKylvLnB1c2goYy5jaGlsZHJlbk5vZGVzW3VdLnBvaW50TnVtYmVyKTthW2MucG9pbnROdW1iZXItaS5ub2RlLl9jb3VudF09ITF9ZWxzZSBvLnB1c2goYy5wb2ludE51bWJlcil9bj1hLmZpbHRlcihCb29sZWFuKS5jb25jYXQoW29dKSxmLmNhbGwoIl9ndWlSZXN0eWxlIix0LHsibm9kZS5ncm91cHMiOltuXX0sZSl9LHByZXBGbjpmdW5jdGlvbih0LGUscil7Yyh0LGUscixkLGkpfX07bC5pbml0KGQpfX1yLm5hbWU9InNhbmtleSIsci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LmNhbGNkYXRhLCJzYW5rZXkiKVswXTthKHQsZSksci51cGRhdGVGeCh0KX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygic2Fua2V5IiksYT1lLl9oYXMmJmUuX2hhcygic2Fua2V5Iik7aSYmIWEmJihuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5zYW5rZXkiKS5yZW1vdmUoKSxuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5iZ3NhbmtleSIpLnJlbW92ZSgpKX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQuX2Z1bGxEYXRhLmxlbmd0aDtlKyspaCh0LGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2NjIsIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiOjY4NCwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc5OSwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODEwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0Ijo4NDcsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4NjUsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4vcGxvdCI6MTE4M31dLDExNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLndyYXAsbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkscz1pLmlzSW5kZXgsbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKTtmdW5jdGlvbiBjKHQpe3ZhciBlLHI9dC5ub2RlLGE9dC5saW5rLGM9W10sdT1vKGEuY29sb3IpLGY9byhhLmN1c3RvbWRhdGEpLGg9e30scD17fSxkPWEuY29sb3JzY2FsZXMubGVuZ3RoO2ZvcihlPTA7ZTxkO2UrKyl7dmFyIGc9YS5jb2xvcnNjYWxlc1tlXSxtPWwuZXh0cmFjdFNjYWxlKGcse2NMZXR0ZXI6ImMifSksdj1sLm1ha2VDb2xvclNjYWxlRnVuYyhtKTtwW2cubGFiZWxdPXZ9dmFyIHk9MDtmb3IoZT0wO2U8YS52YWx1ZS5sZW5ndGg7ZSsrKWEuc291cmNlW2VdPnkmJih5PWEuc291cmNlW2VdKSxhLnRhcmdldFtlXT55JiYoeT1hLnRhcmdldFtlXSk7dmFyIHgsYj15KzE7dC5ub2RlLl9jb3VudD1iO3ZhciBfPXQubm9kZS5ncm91cHMsdz17fTtmb3IoZT0wO2U8Xy5sZW5ndGg7ZSsrKXt2YXIgVD1fW2VdO2Zvcih4PTA7eDxULmxlbmd0aDt4Kyspe3ZhciBrPVRbeF0sTT1iK2U7dy5oYXNPd25Qcm9wZXJ0eShrKT9pLndhcm4oIk5vZGUgIitrKyIgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgZ3JvdXAuIik6d1trXT1NfX12YXIgQT17c291cmNlOltdLHRhcmdldDpbXX07Zm9yKGU9MDtlPGEudmFsdWUubGVuZ3RoO2UrKyl7dmFyIFM9YS52YWx1ZVtlXSxFPWEuc291cmNlW2VdLEM9YS50YXJnZXRbZV07aWYoUz4wJiZzKEUsYikmJnMoQyxiKSYmKCF3Lmhhc093blByb3BlcnR5KEUpfHwhdy5oYXNPd25Qcm9wZXJ0eShDKXx8d1tFXSE9PXdbQ10pKXt3Lmhhc093blByb3BlcnR5KEMpJiYoQz13W0NdKSx3Lmhhc093blByb3BlcnR5KEUpJiYoRT13W0VdKSxDPStDLGhbRT0rRV09aFtDXT0hMDt2YXIgTD0iIjthLmxhYmVsJiZhLmxhYmVsW2VdJiYoTD1hLmxhYmVsW2VdKTt2YXIgST1udWxsO0wmJnAuaGFzT3duUHJvcGVydHkoTCkmJihJPXBbTF0pLGMucHVzaCh7cG9pbnROdW1iZXI6ZSxsYWJlbDpMLGNvbG9yOnU/YS5jb2xvcltlXTphLmNvbG9yLGN1c3RvbWRhdGE6Zj9hLmN1c3RvbWRhdGFbZV06YS5jdXN0b21kYXRhLGNvbmNlbnRyYXRpb25zY2FsZTpJLHNvdXJjZTpFLHRhcmdldDpDLHZhbHVlOitTfSksQS5zb3VyY2UucHVzaChFKSxBLnRhcmdldC5wdXNoKEMpfX12YXIgUD1iK18ubGVuZ3RoLHo9byhyLmNvbG9yKSxPPW8oci5jdXN0b21kYXRhKSxEPVtdO2ZvcihlPTA7ZTxQO2UrKylpZihoW2VdKXt2YXIgUj1yLmxhYmVsW2VdO0QucHVzaCh7Z3JvdXA6ZT5iLTEsY2hpbGRyZW5Ob2RlczpbXSxwb2ludE51bWJlcjplLGxhYmVsOlIsY29sb3I6ej9yLmNvbG9yW2VdOnIuY29sb3IsY3VzdG9tZGF0YTpPP3IuY3VzdG9tZGF0YVtlXTpyLmN1c3RvbWRhdGF9KX12YXIgRj0hMTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1pLmluaXQyZEFycmF5KHQsMCksbz0wO288TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpO28rKylpZihpLmlzSW5kZXgoZVtvXSx0KSYmaS5pc0luZGV4KHJbb10sdCkpe2lmKGVbb109PT1yW29dKXJldHVybiEwO2FbZVtvXV0ucHVzaChyW29dKX1yZXR1cm4gbihhKS5jb21wb25lbnRzLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSkpfShQLEEuc291cmNlLEEudGFyZ2V0KSYmKEY9ITApLHtjaXJjdWxhcjpGLGxpbmtzOmMsbm9kZXM6RCxncm91cHM6Xyxncm91cExvb2t1cDp3fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1jKGUpO3JldHVybiBhKHtjaXJjdWxhcjpyLmNpcmN1bGFyLF9ub2RlczpyLm5vZGVzLF9saW5rczpyLmxpbmtzLF9ncm91cHM6ci5ncm91cHMsX2dyb3VwTG9va3VwOnIuZ3JvdXBMb29rdXB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvZ3VwIjo3NzUsInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIjo1Njl9XSwxMTgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOjQsbm9kZVRleHRPZmZzZXRWZXJ0aWNhbDozLG5vZGVQYWRBY3Jvc3M6MTAsc2Fua2V5SXRlcmF0aW9uczo1MCxmb3JjZUl0ZXJhdGlvbnM6NSxmb3JjZVRpY2tzUGVyRnJhbWU6MTAsZHVyYXRpb246NTAwLGVhc2U6ImxpbmVhciIsY246e3NhbmtleToic2Fua2V5IixzYW5rZXlMaW5rczoic2Fua2V5LWxpbmtzIixzYW5rZXlMaW5rOiJzYW5rZXktbGluayIsc2Fua2V5Tm9kZVNldDoic2Fua2V5LW5vZGUtc2V0IixzYW5rZXlOb2RlOiJzYW5rZXktbm9kZSIsbm9kZVJlY3Q6Im5vZGUtcmVjdCIsbm9kZUNhcHR1cmU6Im5vZGUtY2FwdHVyZSIsbm9kZUNlbnRlcmVkOiJub2RlLWVudGVyZWQiLG5vZGVMYWJlbEd1aWRlOiJub2RlLWxhYmVsLWd1aWRlIixub2RlTGFiZWw6Im5vZGUtbGFiZWwiLG5vZGVMYWJlbFRleHRQYXRoOiJub2RlLWxhYmVsLXRleHQtcGF0aCJ9fX0se31dLDExODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoInRpbnljb2xvcjIiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLGw9dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcmxhYmVsX2RlZmF1bHRzIiksYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksdT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKTtmdW5jdGlvbiBmKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaS5saW5rLmNvbG9yc2NhbGVzLHIsYSl9cigibGFiZWwiKSxyKCJjbWluIikscigiY21heCIpLHIoImNvbG9yc2NhbGUiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7ZnVuY3Rpb24gcChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBkPW4uZXh0ZW5kRGVlcChoLmhvdmVybGFiZWwsdC5ob3ZlcmxhYmVsKSxnPXQubm9kZSxtPWMubmV3Q29udGFpbmVyKGUsIm5vZGUiKTtmdW5jdGlvbiB2KHQsZSl7cmV0dXJuIG4uY29lcmNlKGcsbSxpLm5vZGUsdCxlKX12KCJsYWJlbCIpLHYoImdyb3VwcyIpLHYoIngiKSx2KCJ5IiksdigicGFkIiksdigidGhpY2tuZXNzIiksdigibGluZS5jb2xvciIpLHYoImxpbmUud2lkdGgiKSx2KCJob3ZlcmluZm8iLHQuaG92ZXJpbmZvKSxsKGcsbSx2LGQpLHYoImhvdmVydGVtcGxhdGUiKTt2YXIgeT1oLmNvbG9yd2F5O3YoImNvbG9yIixtLmxhYmVsLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5hZGRPcGFjaXR5KGZ1bmN0aW9uKHQpe3JldHVybiB5W3QleS5sZW5ndGhdfShlKSwuOCl9KSkpLHYoImN1c3RvbWRhdGEiKTt2YXIgeD10Lmxpbmt8fHt9LGI9Yy5uZXdDb250YWluZXIoZSwibGluayIpO2Z1bmN0aW9uIF8odCxlKXtyZXR1cm4gbi5jb2VyY2UoeCxiLGkubGluayx0LGUpfV8oImxhYmVsIiksXygic291cmNlIiksXygidGFyZ2V0IiksXygidmFsdWUiKSxfKCJsaW5lLmNvbG9yIiksXygibGluZS53aWR0aCIpLF8oImhvdmVyaW5mbyIsdC5ob3ZlcmluZm8pLGwoeCxiLF8sZCksXygiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB3LFQ9byhoLnBhcGVyX2JnY29sb3IpLmdldEx1bWluYW5jZSgpPC4zMzM/InJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSI6InJnYmEoMCwgMCwgMCwgMC4yKSI7XygiY29sb3IiLG4ucmVwZWF0KFQsYi52YWx1ZS5sZW5ndGgpKSxfKCJjdXN0b21kYXRhIiksdSh4LGIse25hbWU6ImNvbG9yc2NhbGVzIixoYW5kbGVJdGVtRGVmYXVsdHM6Zn0pLHMoZSxoLHApLHAoIm9yaWVudGF0aW9uIikscCgidmFsdWVmb3JtYXQiKSxwKCJ2YWx1ZXN1ZmZpeCIpLG0ueC5sZW5ndGgmJm0ueS5sZW5ndGgmJih3PSJmcmVlZm9ybSIpLHAoImFycmFuZ2VtZW50Iix3KSxuLmNvZXJjZUZvbnQocCwidGV4dGZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxoLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybGFiZWxfZGVmYXVsdHMiOjY4MSwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNywiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjMsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuL2F0dHJpYnV0ZXMiOjExNzcsdGlueWNvbG9yMjo1NzZ9XSwxMTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzYW5rZXkiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90Iiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0LmpzIiksY2F0ZWdvcmllczpbIm5vT3BhY2l0eSJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTE3NywiLi9iYXNlX3Bsb3QiOjExNzgsIi4vY2FsYyI6MTE3OSwiLi9kZWZhdWx0cyI6MTE4MSwiLi9wbG90IjoxMTgzLCIuL3NlbGVjdC5qcyI6MTE4NX1dLDExODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4vcmVuZGVyIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4vY29uc3RhbnRzIikuY24sYz1zLl87ZnVuY3Rpb24gdSh0KXtyZXR1cm4iIiE9PXR9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5PT09ZS50cmFjZUlkfSkpfWZ1bmN0aW9uIGgodCxlKXtuLnNlbGVjdCh0KS5zZWxlY3QoInBhdGgiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKSxuLnNlbGVjdCh0KS5zZWxlY3QoInJlY3QiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKX1mdW5jdGlvbiBwKHQpe24uc2VsZWN0KHQpLnNlbGVjdCgidGV4dC5uYW1lIikuc3R5bGUoImZpbGwiLCJibGFjayIpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi0xIT09dC5ub2RlLnNvdXJjZUxpbmtzLmluZGV4T2YoZS5saW5rKXx8LTEhPT10Lm5vZGUudGFyZ2V0TGlua3MuaW5kZXhPZihlLmxpbmspfX1mdW5jdGlvbiBnKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKHQubGluayl8fC0xIT09ZS5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YodC5saW5rKX19ZnVuY3Rpb24gbSh0LGUscil7ZSYmciYmZihyLGUpLnNlbGVjdEFsbCgiLiIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZChlKSkuY2FsbCh5LmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiB2KHQsZSxyKXtlJiZyJiZmKHIsZSkuc2VsZWN0QWxsKCIuIitsLnNhbmtleUxpbmspLmZpbHRlcihkKGUpKS5jYWxsKHguYmluZCgwLGUsciwhMSkpfWZ1bmN0aW9uIHkodCxlLHIsbil7dmFyIGk9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7aWYoIXQubGluay5jb25jZW50cmF0aW9uc2NhbGUpcmV0dXJuLjR9KSksaSYmZihlLHQpLnNlbGVjdEFsbCgiLiIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsubGFiZWw9PT1pfSkpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLChmdW5jdGlvbih0KXtpZighdC5saW5rLmNvbmNlbnRyYXRpb25zY2FsZSlyZXR1cm4uNH0pKSxyJiZmKGUsdCkuc2VsZWN0QWxsKCIuIitsLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKG0pfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSksaSYmZihlLHQpLnNlbGVjdEFsbCgiLiIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsubGFiZWw9PT1pfSkpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pKSxyJiZmKGUsdCkuc2VsZWN0QWxsKGwuc2Fua2V5Tm9kZSkuZmlsdGVyKGcodCkpLmNhbGwodil9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQuaG92ZXJsYWJlbHx8e30sbj1zLm5lc3RlZFByb3BlcnR5KHIsZSkuZ2V0KCk7cmV0dXJuIUFycmF5LmlzQXJyYXkobikmJm59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQscz1yLl9wYXBlcixmPXIuX3NpemUsZD0wO2Q8dC5fZnVsbERhdGEubGVuZ3RoO2QrKylpZih0Ll9mdWxsRGF0YVtkXS52aXNpYmxlJiZ0Ll9mdWxsRGF0YVtkXS50eXBlPT09bC5zYW5rZXkmJiF0Ll9mdWxsRGF0YVtkXS5fdmlld0luaXRpYWwpe3ZhciBnPXQuX2Z1bGxEYXRhW2RdLm5vZGU7dC5fZnVsbERhdGFbZF0uX3ZpZXdJbml0aWFsPXtub2RlOntncm91cHM6Zy5ncm91cHMuc2xpY2UoKSx4OmcueC5zbGljZSgpLHk6Zy55LnNsaWNlKCl9fX12YXIgXz1jKHQsInNvdXJjZToiKSsiICIsdz1jKHQsInRhcmdldDoiKSsiICIsVD1jKHQsImNvbmNlbnRyYXRpb246IikrIiAiLGs9Yyh0LCJpbmNvbWluZyBmbG93IGNvdW50OiIpKyIgIixNPWModCwib3V0Z29pbmcgZmxvdyBjb3VudDoiKSsiICI7aSh0LHMsZSx7d2lkdGg6Zi53LGhlaWdodDpmLmgsbWFyZ2luOnt0OmYudCxyOmYucixiOmYuYixsOmYubH19LHtsaW5rRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwoeS5iaW5kKDAscixpLCEwKSksInNraXAiIT09ci5saW5rLnRyYWNlLmxpbmsuaG92ZXJpbmZvJiYoci5saW5rLmZ1bGxEYXRhPXIubGluay50cmFjZSx0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltyLmxpbmtdfSkpKX0sZm9sbG93OmZ1bmN0aW9uKGUsaSl7aWYoITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSl7dmFyIHM9aS5saW5rLnRyYWNlLmxpbms7aWYoIm5vbmUiIT09cy5ob3ZlcmluZm8mJiJza2lwIiE9PXMuaG92ZXJpbmZvKXtmb3IodmFyIGw9W10sYz0wLGY9MDtmPGkuZmxvdy5saW5rcy5sZW5ndGg7ZisrKXt2YXIgZD1pLmZsb3cubGlua3NbZl07aWYoImNsb3Nlc3QiIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGV8fGkubGluay5wb2ludE51bWJlcj09PWQucG9pbnROdW1iZXIpe2kubGluay5wb2ludE51bWJlcj09PWQucG9pbnROdW1iZXImJihjPWYpLGQuZnVsbERhdGE9ZC50cmFjZSxzPWkubGluay50cmFjZS5saW5rO3ZhciBnPXYoZCksbT17dmFsdWVMYWJlbDpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShkLnZhbHVlKStpLnZhbHVlU3VmZml4fTtsLnB1c2goe3g6Z1swXSx5OmdbMV0sbmFtZTptLnZhbHVlTGFiZWwsdGV4dDpbZC5sYWJlbHx8IiIsXytkLnNvdXJjZS5sYWJlbCx3K2QudGFyZ2V0LmxhYmVsLGQuY29uY2VudHJhdGlvbnNjYWxlP1Qrbi5mb3JtYXQoIiUwLjJmIikoZC5mbG93LmxhYmVsQ29uY2VudHJhdGlvbik6IiJdLmZpbHRlcih1KS5qb2luKCI8YnI+IiksY29sb3I6YihzLCJiZ2NvbG9yIil8fG8uYWRkT3BhY2l0eShkLmNvbG9yLDEpLGJvcmRlckNvbG9yOmIocywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OmIocywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpiKHMsImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpiKHMsImZvbnQuY29sb3IiKSxuYW1lTGVuZ3RoOmIocywibmFtZWxlbmd0aCIpLHRleHRBbGlnbjpiKHMsImFsaWduIiksaWRlYWxBbGlnbjpuLmV2ZW50Lng8Z1swXT8icmlnaHQiOiJsZWZ0Iixob3ZlcnRlbXBsYXRlOnMuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOm0sZXZlbnREYXRhOltkXX0pfX1hLmxvbmVIb3ZlcihsLHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOnQsYW5jaG9ySW5kZXg6Y30pLmVhY2goKGZ1bmN0aW9uKCl7aS5saW5rLmNvbmNlbnRyYXRpb25zY2FsZXx8aCh0aGlzLC42NSkscCh0aGlzKX0pKX19ZnVuY3Rpb24gdih0KXt2YXIgZSxyO3QuY2lyY3VsYXI/KGU9KHQuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQpLzIscj10LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KTooZT0odC5zb3VyY2UueDErdC50YXJnZXQueDApLzIscj0odC55MCt0LnkxKS8yKTt2YXIgbj1bZSxyXTtyZXR1cm4idiI9PT10LnRyYWNlLm9yaWVudGF0aW9uJiZuLnJldmVyc2UoKSxuWzBdKz1pLnBhcmVudC50cmFuc2xhdGVYLG5bMV0rPWkucGFyZW50LnRyYW5zbGF0ZVksbn19LHVuaG92ZXI6ZnVuY3Rpb24oZSxpLG8peyExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJihuLnNlbGVjdChlKS5jYWxsKHguYmluZCgwLGksbywhMCkpLCJza2lwIiE9PWkubGluay50cmFjZS5saW5rLmhvdmVyaW5mbyYmKGkubGluay5mdWxsRGF0YT1pLmxpbmsudHJhY2UsdC5lbWl0KCJwbG90bHlfdW5ob3ZlciIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltpLmxpbmtdfSkpLGEubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpKX0sc2VsZWN0OmZ1bmN0aW9uKGUscil7dmFyIGk9ci5saW5rO2kub3JpZ2luYWxFdmVudD1uLmV2ZW50LHQuX2hvdmVyZGF0YT1baV0sYS5jbGljayh0LHt0YXJnZXQ6ITB9KX19LG5vZGVFdmVudHM6e2hvdmVyOmZ1bmN0aW9uKGUscixpKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbChtLHIsaSksInNraXAiIT09ci5ub2RlLnRyYWNlLm5vZGUuaG92ZXJpbmZvJiYoci5ub2RlLmZ1bGxEYXRhPXIubm9kZS50cmFjZSx0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltyLm5vZGVdfSkpKX0sZm9sbG93OmZ1bmN0aW9uKGUsaSl7aWYoITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSl7dmFyIG89aS5ub2RlLnRyYWNlLm5vZGU7aWYoIm5vbmUiIT09by5ob3ZlcmluZm8mJiJza2lwIiE9PW8uaG92ZXJpbmZvKXt2YXIgcz1uLnNlbGVjdChlKS5zZWxlY3QoIi4iK2wubm9kZVJlY3QpLGM9dC5fZnVsbExheW91dC5fcGFwZXJkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9cy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1mLmxlZnQtMi1jLmxlZnQsZz1mLnJpZ2h0KzItYy5sZWZ0LG09Zi50b3ArZi5oZWlnaHQvNC1jLnRvcCx2PXt2YWx1ZUxhYmVsOm4uZm9ybWF0KGkudmFsdWVGb3JtYXQpKGkubm9kZS52YWx1ZSkraS52YWx1ZVN1ZmZpeH07aS5ub2RlLmZ1bGxEYXRhPWkubm9kZS50cmFjZSx0Ll9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybSh0KTt2YXIgeT10Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVgseD10Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVksXz1hLmxvbmVIb3Zlcih7eDA6eSpkLHgxOnkqZyx5OngqbSxuYW1lOm4uZm9ybWF0KGkudmFsdWVGb3JtYXQpKGkubm9kZS52YWx1ZSkraS52YWx1ZVN1ZmZpeCx0ZXh0OltpLm5vZGUubGFiZWwsaytpLm5vZGUudGFyZ2V0TGlua3MubGVuZ3RoLE0raS5ub2RlLnNvdXJjZUxpbmtzLmxlbmd0aF0uZmlsdGVyKHUpLmpvaW4oIjxicj4iKSxjb2xvcjpiKG8sImJnY29sb3IiKXx8aS50aW55Q29sb3JIdWUsYm9yZGVyQ29sb3I6YihvLCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6YihvLCJmb250LmZhbWlseSIpLGZvbnRTaXplOmIobywiZm9udC5zaXplIiksZm9udENvbG9yOmIobywiZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6YihvLCJuYW1lbGVuZ3RoIiksdGV4dEFsaWduOmIobywiYWxpZ24iKSxpZGVhbEFsaWduOiJsZWZ0Iixob3ZlcnRlbXBsYXRlOm8uaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOnYsZXZlbnREYXRhOltpLm5vZGVdfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0fSk7aChfLC44NSkscChfKX19fSx1bmhvdmVyOmZ1bmN0aW9uKGUsaSxvKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbCh2LGksbyksInNraXAiIT09aS5ub2RlLnRyYWNlLm5vZGUuaG92ZXJpbmZvJiYoaS5ub2RlLmZ1bGxEYXRhPWkubm9kZS50cmFjZSx0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W2kubm9kZV19KSksYS5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSkpfSxzZWxlY3Q6ZnVuY3Rpb24oZSxyLGkpe3ZhciBvPXIubm9kZTtvLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W29dLG4uc2VsZWN0KGUpLmNhbGwodixyLGkpLGEuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY4MywiLi4vLi4vbGliIjo3NzgsIi4vY29uc3RhbnRzIjoxMTgwLCIuL3JlbmRlciI6MTE4NCxkMzoxNjl9XSwxMTg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCJkMyIpLGE9dCgidGlueWNvbG9yMiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCJAcGxvdGx5L2QzLXNhbmtleSIpLGM9dCgiQHBsb3RseS9kMy1zYW5rZXktY2lyY3VsYXIiKSx1PXQoImQzLWZvcmNlIiksZj10KCIuLi8uLi9saWIiKSxoPWYuc3RyVHJhbnNsYXRlLHA9dCgiLi4vLi4vbGliL2d1cCIpLGQ9cC5rZXlGdW4sZz1wLnJlcGVhdCxtPXAudW53cmFwLHY9dCgiZDMtaW50ZXJwb2xhdGUiKS5pbnRlcnBvbGF0ZU51bWJlcix5PXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24geCh0LGUscil7dmFyIGksbz1tKGUpLHM9by50cmFjZSx1PXMuZG9tYWluLGg9ImgiPT09cy5vcmllbnRhdGlvbixwPXMubm9kZS5wYWQsZD1zLm5vZGUudGhpY2tuZXNzLGc9dC53aWR0aCoodS54WzFdLXUueFswXSksdj10LmhlaWdodCoodS55WzFdLXUueVswXSkseT1vLl9ub2Rlcyx4PW8uX2xpbmtzLGI9by5jaXJjdWxhcjsoaT1iP2Muc2Fua2V5Q2lyY3VsYXIoKS5jaXJjdWxhckxpbmtHYXAoMCk6bC5zYW5rZXkoKSkuaXRlcmF0aW9ucyhuLnNhbmtleUl0ZXJhdGlvbnMpLnNpemUoaD9bZyx2XTpbdixnXSkubm9kZVdpZHRoKGQpLm5vZGVQYWRkaW5nKHApLm5vZGVJZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9pbnROdW1iZXJ9KSkubm9kZXMoeSkubGlua3MoeCk7dmFyIF8sdyxULGs9aSgpO2Zvcih2YXIgTSBpbiBpLm5vZGVQYWRkaW5nKCk8cCYmZi53YXJuKCJub2RlLnBhZCB3YXMgcmVkdWNlZCB0byAiLGkubm9kZVBhZGRpbmcoKSwiIHRvIGZpdCB3aXRoaW4gdGhlIGZpZ3VyZS4iKSxvLl9ncm91cExvb2t1cCl7dmFyIEEsUz1wYXJzZUludChvLl9ncm91cExvb2t1cFtNXSk7Zm9yKF89MDtfPGsubm9kZXMubGVuZ3RoO18rKylpZihrLm5vZGVzW19dLnBvaW50TnVtYmVyPT09Uyl7QT1rLm5vZGVzW19dO2JyZWFrfWlmKEEpe3ZhciBFPXtwb2ludE51bWJlcjpwYXJzZUludChNKSx4MDpBLngwLHgxOkEueDEseTA6QS55MCx5MTpBLnkxLHBhcnRPZkdyb3VwOiEwLHNvdXJjZUxpbmtzOltdLHRhcmdldExpbmtzOltdfTtrLm5vZGVzLnVuc2hpZnQoRSksQS5jaGlsZHJlbk5vZGVzLnVuc2hpZnQoRSl9fWlmKGZ1bmN0aW9uKCl7Zm9yKF89MDtfPGsubm9kZXMubGVuZ3RoO18rKyl7dmFyIHQsZSxyPWsubm9kZXNbX10sbj17fTtmb3Iodz0wO3c8ci50YXJnZXRMaW5rcy5sZW5ndGg7dysrKXQ9KGU9ci50YXJnZXRMaW5rc1t3XSkuc291cmNlLnBvaW50TnVtYmVyKyI6IitlLnRhcmdldC5wb2ludE51bWJlcixuLmhhc093blByb3BlcnR5KHQpfHwoblt0XT1bXSksblt0XS5wdXNoKGUpO3ZhciBpPU9iamVjdC5rZXlzKG4pO2Zvcih3PTA7dzxpLmxlbmd0aDt3Kyspe3ZhciBvPW5bdD1pW3ddXSxzPTAsbD17fTtmb3IoVD0wO1Q8by5sZW5ndGg7VCsrKWxbKGU9b1tUXSkubGFiZWxdfHwobFtlLmxhYmVsXT0wKSxsW2UubGFiZWxdKz1lLnZhbHVlLHMrPWUudmFsdWU7Zm9yKFQ9MDtUPG8ubGVuZ3RoO1QrKykoZT1vW1RdKS5mbG93PXt2YWx1ZTpzLGxhYmVsQ29uY2VudHJhdGlvbjpsW2UubGFiZWxdL3MsY29uY2VudHJhdGlvbjplLnZhbHVlL3MsbGlua3M6b30sZS5jb25jZW50cmF0aW9uc2NhbGUmJihlLmNvbG9yPWEoZS5jb25jZW50cmF0aW9uc2NhbGUoZS5mbG93LmxhYmVsQ29uY2VudHJhdGlvbikpKX12YXIgYz0wO2Zvcih3PTA7dzxyLnNvdXJjZUxpbmtzLmxlbmd0aDt3KyspYys9ci5zb3VyY2VMaW5rc1t3XS52YWx1ZTtmb3Iodz0wO3c8ci5zb3VyY2VMaW5rcy5sZW5ndGg7dysrKShlPXIuc291cmNlTGlua3Nbd10pLmNvbmNlbnRyYXRpb25PdXQ9ZS52YWx1ZS9jO3ZhciB1PTA7Zm9yKHc9MDt3PHIudGFyZ2V0TGlua3MubGVuZ3RoO3crKyl1Kz1yLnRhcmdldExpbmtzW3ddLnZhbHVlO2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspKGU9ci50YXJnZXRMaW5rc1t3XSkuY29uY2VucmF0aW9uSW49ZS52YWx1ZS91fX0oKSxzLm5vZGUueC5sZW5ndGgmJnMubm9kZS55Lmxlbmd0aCl7Zm9yKF89MDtfPE1hdGgubWluKHMubm9kZS54Lmxlbmd0aCxzLm5vZGUueS5sZW5ndGgsay5ub2Rlcy5sZW5ndGgpO18rKylpZihzLm5vZGUueFtfXSYmcy5ub2RlLnlbX10pe3ZhciBDPVtzLm5vZGUueFtfXSpnLHMubm9kZS55W19dKnZdO2subm9kZXNbX10ueDA9Q1swXS1kLzIsay5ub2Rlc1tfXS54MT1DWzBdK2QvMjt2YXIgTD1rLm5vZGVzW19dLnkxLWsubm9kZXNbX10ueTA7ay5ub2Rlc1tfXS55MD1DWzFdLUwvMixrLm5vZGVzW19dLnkxPUNbMV0rTC8yfWlmKCJzbmFwIj09PXMuYXJyYW5nZW1lbnQpIWZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscixuLGk9MCxhPXQubGVuZ3RoO2Zvcih0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueTAtZS55MH0pKSxuPTA7bjxhOysrbikoZT10W25dKS55MD49aXx8KHI9aS1lLnkwKT4xZS02JiYoZS55MCs9cixlLnkxKz1yKSxpPWUueTErcH0pKX0oZnVuY3Rpb24odCl7dmFyIGUscixuPXQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybnt4MDp0LngwLGluZGV4OmV9fSkpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueDAtZS54MH0pKSxpPVtdLGE9LTEsbz0tMS8wO2ZvcihfPTA7XzxuLmxlbmd0aDtfKyspe3ZhciBzPXRbbltfXS5pbmRleF07cy54MD5vK2QmJihhKz0xLGU9cy54MCksbz1zLngwLGlbYV18fChpW2FdPVtdKSxpW2FdLnB1c2gocykscj1lLXMueDAscy54MCs9cixzLngxKz1yfXJldHVybiBpfSh5PWsubm9kZXMpKTtpLnVwZGF0ZShrKX1yZXR1cm57Y2lyY3VsYXI6YixrZXk6cix0cmFjZTpzLGd1aWQ6Zi5yYW5kc3RyKCksaG9yaXpvbnRhbDpoLHdpZHRoOmcsaGVpZ2h0OnYsbm9kZVBhZDpzLm5vZGUucGFkLG5vZGVMaW5lQ29sb3I6cy5ub2RlLmxpbmUuY29sb3Isbm9kZUxpbmVXaWR0aDpzLm5vZGUubGluZS53aWR0aCxsaW5rTGluZUNvbG9yOnMubGluay5saW5lLmNvbG9yLGxpbmtMaW5lV2lkdGg6cy5saW5rLmxpbmUud2lkdGgsdmFsdWVGb3JtYXQ6cy52YWx1ZWZvcm1hdCx2YWx1ZVN1ZmZpeDpzLnZhbHVlc3VmZml4LHRleHRGb250OnMudGV4dGZvbnQsdHJhbnNsYXRlWDp1LnhbMF0qdC53aWR0aCt0Lm1hcmdpbi5sLHRyYW5zbGF0ZVk6dC5oZWlnaHQtdS55WzFdKnQuaGVpZ2h0K3QubWFyZ2luLnQsZHJhZ1BhcmFsbGVsOmg/djpnLGRyYWdQZXJwZW5kaWN1bGFyOmg/Zzp2LGFycmFuZ2VtZW50OnMuYXJyYW5nZW1lbnQsc2Fua2V5OmksZ3JhcGg6ayxmb3JjZUxheW91dHM6e30saW50ZXJhY3Rpb25TdGF0ZTp7ZHJhZ0luUHJvZ3Jlc3M6ITEsaG92ZXJlZDohMX19fWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPWEoZS5jb2xvciksaT1lLnNvdXJjZS5sYWJlbCsifCIrZS50YXJnZXQubGFiZWwrIl9fIityO3JldHVybiBlLnRyYWNlPXQudHJhY2UsZS5jdXJ2ZU51bWJlcj10LnRyYWNlLmluZGV4LHtjaXJjdWxhcjp0LmNpcmN1bGFyLGtleTppLHRyYWNlSWQ6dC5rZXkscG9pbnROdW1iZXI6ZS5wb2ludE51bWJlcixsaW5rOmUsdGlueUNvbG9ySHVlOm8udGlueVJHQihuKSx0aW55Q29sb3JBbHBoYTpuLmdldEFscGhhKCksbGlua1BhdGg6XyxsaW5rTGluZUNvbG9yOnQubGlua0xpbmVDb2xvcixsaW5rTGluZVdpZHRoOnQubGlua0xpbmVXaWR0aCx2YWx1ZUZvcm1hdDp0LnZhbHVlRm9ybWF0LHZhbHVlU3VmZml4OnQudmFsdWVTdWZmaXgsc2Fua2V5OnQuc2Fua2V5LHBhcmVudDp0LGludGVyYWN0aW9uU3RhdGU6dC5pbnRlcmFjdGlvblN0YXRlLGZsb3c6ZS5mbG93fX1mdW5jdGlvbiBfKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQubGluay5jaXJjdWxhcilyZXR1cm4gZT10Lmxpbmsscj1lLndpZHRoLzIsbj1lLmNpcmN1bGFyUGF0aERhdGEsInRvcCI9PT1lLmNpcmN1bGFyTGlua1R5cGU/Ik0gIituLnRhcmdldFgrIiAiKyhuLnRhcmdldFkrcikrIiBMIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnRhcmdldFkrcikrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLnJpZ2h0U21hbGxBcmNSYWRpdXMrcikrIiAwIDAgMSAiKyhuLnJpZ2h0RnVsbEV4dGVudC1yKSsiICIrKG4udGFyZ2V0WS1uLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyJMIisobi5yaWdodEZ1bGxFeHRlbnQtcikrIiAiK24udmVydGljYWxSaWdodElubmVyRXh0ZW50KyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgMCAwIDEgIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudC1yKSsiTCIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudC1yKSsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMrcikrIiAwIDAgMSAiKyhuLmxlZnRGdWxsRXh0ZW50K3IpKyIgIituLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyJMIisobi5sZWZ0RnVsbEV4dGVudCtyKSsiICIrKG4uc291cmNlWS1uLmxlZnRTbWFsbEFyY1JhZGl1cykrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ubGVmdFNtYWxsQXJjUmFkaXVzK3IpKyIgMCAwIDEgIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4uc291cmNlWStyKSsiTCIrbi5zb3VyY2VYKyIgIisobi5zb3VyY2VZK3IpKyJMIituLnNvdXJjZVgrIiAiKyhuLnNvdXJjZVktcikrIkwiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi5zb3VyY2VZLXIpKyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLmxlZnRTbWFsbEFyY1JhZGl1cy1yKSsiIDAgMCAwICIrKG4ubGVmdEZ1bGxFeHRlbnQtcikrIiAiKyhuLnNvdXJjZVktbi5sZWZ0U21hbGxBcmNSYWRpdXMpKyJMIisobi5sZWZ0RnVsbEV4dGVudC1yKSsiICIrbi52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMtcikrIiAwIDAgMCAiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQrcikrIkwiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50K3IpKyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5yaWdodExhcmdlQXJjUmFkaXVzLXIpKyIgMCAwIDAgIisobi5yaWdodEZ1bGxFeHRlbnQrcikrIiAiK24udmVydGljYWxSaWdodElubmVyRXh0ZW50KyJMIisobi5yaWdodEZ1bGxFeHRlbnQrcikrIiAiKyhuLnRhcmdldFktbi5yaWdodFNtYWxsQXJjUmFkaXVzKSsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ucmlnaHRTbWFsbEFyY1JhZGl1cy1yKSsiIDAgMCAwICIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi50YXJnZXRZLXIpKyJMIituLnRhcmdldFgrIiAiKyhuLnRhcmdldFktcikrIloiOiJNICIrbi50YXJnZXRYKyIgIisobi50YXJnZXRZLXIpKyIgTCIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi50YXJnZXRZLXIpKyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5yaWdodFNtYWxsQXJjUmFkaXVzK3IpKyIgMCAwIDAgIisobi5yaWdodEZ1bGxFeHRlbnQtcikrIiAiKyhuLnRhcmdldFkrbi5yaWdodFNtYWxsQXJjUmFkaXVzKSsiTCIrKG4ucmlnaHRGdWxsRXh0ZW50LXIpKyIgIituLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiIDAgMCAwICIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQrcikrIkwiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQrcikrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ubGVmdExhcmdlQXJjUmFkaXVzK3IpKyIgMCAwIDAgIisobi5sZWZ0RnVsbEV4dGVudCtyKSsiICIrbi52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiTCIrKG4ubGVmdEZ1bGxFeHRlbnQrcikrIiAiKyhuLnNvdXJjZVkrbi5sZWZ0U21hbGxBcmNSYWRpdXMpKyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLmxlZnRTbWFsbEFyY1JhZGl1cytyKSsiIDAgMCAwICIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnNvdXJjZVktcikrIkwiK24uc291cmNlWCsiICIrKG4uc291cmNlWS1yKSsiTCIrbi5zb3VyY2VYKyIgIisobi5zb3VyY2VZK3IpKyJMIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4uc291cmNlWStyKSsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5sZWZ0U21hbGxBcmNSYWRpdXMtcikrIiAwIDAgMSAiKyhuLmxlZnRGdWxsRXh0ZW50LXIpKyIgIisobi5zb3VyY2VZK24ubGVmdFNtYWxsQXJjUmFkaXVzKSsiTCIrKG4ubGVmdEZ1bGxFeHRlbnQtcikrIiAiK24udmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgMCAwIDEgIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50LXIpKyJMIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudC1yKSsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiIDAgMCAxICIrKG4ucmlnaHRGdWxsRXh0ZW50K3IpKyIgIituLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiTCIrKG4ucmlnaHRGdWxsRXh0ZW50K3IpKyIgIisobi50YXJnZXRZK24ucmlnaHRTbWFsbEFyY1JhZGl1cykrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLnJpZ2h0U21hbGxBcmNSYWRpdXMtcikrIiAwIDAgMSAiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udGFyZ2V0WStyKSsiTCIrbi50YXJnZXRYKyIgIisobi50YXJnZXRZK3IpKyJaIjt2YXIgZSxyLG4saT10Lmxpbmsuc291cmNlLngxLGE9dC5saW5rLnRhcmdldC54MCxvPXYoaSxhKSxzPW8oLjUpLGw9byguNSksYz10LmxpbmsueTAtdC5saW5rLndpZHRoLzIsdT10LmxpbmsueTArdC5saW5rLndpZHRoLzIsZj10LmxpbmsueTEtdC5saW5rLndpZHRoLzIsaD10LmxpbmsueTErdC5saW5rLndpZHRoLzI7cmV0dXJuIk0iK2krIiwiK2MrIkMiK3MrIiwiK2MrIiAiK2wrIiwiK2YrIiAiK2ErIiwiK2YrIkwiK2ErIiwiK2grIkMiK2wrIiwiK2grIiAiK3MrIiwiK3UrIiAiK2krIiwiK3UrIloifX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9YShlLmNvbG9yKSxpPW4ubm9kZVBhZEFjcm9zcyxzPXQubm9kZVBhZC8yO2UuZHg9ZS54MS1lLngwLGUuZHk9ZS55MS1lLnkwO3ZhciBsPWUuZHgsYz1NYXRoLm1heCguNSxlLmR5KSx1PSJub2RlXyIrZS5wb2ludE51bWJlcjtyZXR1cm4gZS5ncm91cCYmKHU9Zi5yYW5kc3RyKCkpLGUudHJhY2U9dC50cmFjZSxlLmN1cnZlTnVtYmVyPXQudHJhY2UuaW5kZXgse2luZGV4OmUucG9pbnROdW1iZXIsa2V5OnUscGFydE9mR3JvdXA6ZS5wYXJ0T2ZHcm91cHx8ITEsZ3JvdXA6ZS5ncm91cCx0cmFjZUlkOnQua2V5LHRyYWNlOnQudHJhY2Usbm9kZTplLG5vZGVQYWQ6dC5ub2RlUGFkLG5vZGVMaW5lQ29sb3I6dC5ub2RlTGluZUNvbG9yLG5vZGVMaW5lV2lkdGg6dC5ub2RlTGluZVdpZHRoLHRleHRGb250OnQudGV4dEZvbnQsc2l6ZTp0Lmhvcml6b250YWw/dC5oZWlnaHQ6dC53aWR0aCx2aXNpYmxlV2lkdGg6TWF0aC5jZWlsKGwpLHZpc2libGVIZWlnaHQ6Yyx6b25lWDotaSx6b25lWTotcyx6b25lV2lkdGg6bCsyKmksem9uZUhlaWdodDpjKzIqcyxsYWJlbFk6dC5ob3Jpem9udGFsP2UuZHkvMisxOmUuZHgvMisxLGxlZnQ6MT09PWUub3JpZ2luYWxMYXllcixzaXplQWNyb3NzOnQud2lkdGgsZm9yY2VMYXlvdXRzOnQuZm9yY2VMYXlvdXRzLGhvcml6b250YWw6dC5ob3Jpem9udGFsLGRhcmtCYWNrZ3JvdW5kOnIuZ2V0QnJpZ2h0bmVzcygpPD0xMjgsdGlueUNvbG9ySHVlOm8udGlueVJHQihyKSx0aW55Q29sb3JBbHBoYTpyLmdldEFscGhhKCksdmFsdWVGb3JtYXQ6dC52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDp0LnZhbHVlU3VmZml4LHNhbmtleTp0LnNhbmtleSxncmFwaDp0LmdyYXBoLGFycmFuZ2VtZW50OnQuYXJyYW5nZW1lbnQsdW5pcXVlTm9kZUxhYmVsUGF0aElkOlt0Lmd1aWQsdC5rZXksdV0uam9pbigiXyIpLGludGVyYWN0aW9uU3RhdGU6dC5pbnRlcmFjdGlvblN0YXRlLGZpZ3VyZTp0fX1mdW5jdGlvbiBUKHQpe3QuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGgodC5ub2RlLngwLnRvRml4ZWQoMyksdC5ub2RlLnkwLnRvRml4ZWQoMykpfSkpfWZ1bmN0aW9uIGsodCl7dC5jYWxsKFQpfWZ1bmN0aW9uIE0odCxlKXt0LmNhbGwoayksZS5hdHRyKCJkIixfKCkpfWZ1bmN0aW9uIEEodCl7dC5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGUueDEtdC5ub2RlLngwfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGVIZWlnaHR9KSl9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gdC5saW5rLndpZHRoPjF8fHQubGlua0xpbmVXaWR0aD4wfWZ1bmN0aW9uIEUodCl7cmV0dXJuIGgodC50cmFuc2xhdGVYLHQudHJhbnNsYXRlWSkrKHQuaG9yaXpvbnRhbD8ibWF0cml4KDEgMCAwIDEgMCAwKSI6Im1hdHJpeCgwIDEgMSAwIDAgMCkiKX1mdW5jdGlvbiBDKHQpe3JldHVybiBoKHQuaG9yaXpvbnRhbD8wOnQubGFiZWxZLHQuaG9yaXpvbnRhbD90LmxhYmVsWTowKX1mdW5jdGlvbiBMKHQpe3JldHVybiBpLnN2Zy5saW5lKCkoW1t0Lmhvcml6b250YWw/dC5sZWZ0Py10LnNpemVBY3Jvc3M6dC52aXNpYmxlV2lkdGgrbi5ub2RlVGV4dE9mZnNldEhvcml6b250YWw6bi5ub2RlVGV4dE9mZnNldEhvcml6b250YWwsMF0sW3QuaG9yaXpvbnRhbD90LmxlZnQ/LW4ubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOnQuc2l6ZUFjcm9zczp0LnZpc2libGVIZWlnaHQtbi5ub2RlVGV4dE9mZnNldEhvcml6b250YWwsMF1dKX1mdW5jdGlvbiBJKHQpe3JldHVybiB0Lmhvcml6b250YWw/Im1hdHJpeCgxIDAgMCAxIDAgMCkiOiJtYXRyaXgoMCAxIDEgMCAwIDApIn1mdW5jdGlvbiBQKHQpe3JldHVybiB0Lmhvcml6b250YWw/InNjYWxlKDEgMSkiOiJzY2FsZSgtMSAxKSJ9ZnVuY3Rpb24geih0KXtyZXR1cm4gdC5kYXJrQmFja2dyb3VuZCYmIXQuaG9yaXpvbnRhbD8icmdiKDI1NSwyNTUsMjU1KSI6InJnYigwLDAsMCkifWZ1bmN0aW9uIE8odCl7cmV0dXJuIHQuaG9yaXpvbnRhbCYmdC5sZWZ0PyIxMDAlIjoiMCUifWZ1bmN0aW9uIEQodCxlLHIpe3Qub24oIi5iYXNpYyIsbnVsbCkub24oIm1vdXNlb3Zlci5iYXNpYyIsKGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8KHIuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPVt0aGlzLHRdKX0pKS5vbigibW91c2Vtb3ZlLmJhc2ljIiwoZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci5mb2xsb3codGhpcyx0KSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD1bdGhpcyx0XSl9KSkub24oIm1vdXNlb3V0LmJhc2ljIiwoZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSl9KSkub24oImNsaWNrLmJhc2ljIiwoZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLnVuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPSExKSx0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fHIuc2VsZWN0KHRoaXMsdCxlKX0pKX1mdW5jdGlvbiBSKHQsZSxyLGEpe3ZhciBvPWkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbigoZnVuY3Rpb24odCl7cmV0dXJue3g6dC5ub2RlLngwK3QudmlzaWJsZVdpZHRoLzIseTp0Lm5vZGUueTArdC52aXNpYmxlSGVpZ2h0LzJ9fSkpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbihpKXtpZigiZml4ZWQiIT09aS5hcnJhbmdlbWVudCYmKGYuZW5zdXJlU2luZ2xlKGEuX2Z1bGxMYXlvdXQuX2luZm9sYXllciwiZyIsImRyYWdjb3ZlciIsKGZ1bmN0aW9uKHQpe2EuX2Z1bGxMYXlvdXQuX2RyYWdDb3Zlcj10fSkpLGYucmFpc2VUb1RvcCh0aGlzKSxpLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M9aS5ub2RlLEIoaS5ub2RlKSxpLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCYmKHIubm9kZUV2ZW50cy51bmhvdmVyLmFwcGx5KDAsaS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQpLGkuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPSExKSwic25hcCI9PT1pLmFycmFuZ2VtZW50KSl7dmFyIG89aS50cmFjZUlkKyJ8IitpLmtleTtpLmZvcmNlTGF5b3V0c1tvXT9pLmZvcmNlTGF5b3V0c1tvXS5hbHBoYSgxKTpmdW5jdGlvbih0LGUscixpKXshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS55PSh0W2VdLnkwK3RbZV0ueTEpLzIsdFtlXS54PSh0W2VdLngwK3RbZV0ueDEpLzJ9KHIuZ3JhcGgubm9kZXMpO3ZhciBhPXIuZ3JhcGgubm9kZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5vcmlnaW5hbFg9PT1yLm5vZGUub3JpZ2luYWxYfSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIXQucGFydE9mR3JvdXB9KSk7ci5mb3JjZUxheW91dHNbZV09dS5mb3JjZVNpbXVsYXRpb24oYSkuYWxwaGFEZWNheSgwKS5mb3JjZSgiY29sbGlkZSIsdS5mb3JjZUNvbGxpZGUoKS5yYWRpdXMoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmR5LzIrci5ub2RlUGFkLzJ9KSkuc3RyZW5ndGgoMSkuaXRlcmF0aW9ucyhuLmZvcmNlSXRlcmF0aW9ucykpLmZvcmNlKCJjb25zdHJhaW4iLGZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXTtvPT09aS5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPyhvLng9by5sYXN0RHJhZ2dlZFgsby55PW8ubGFzdERyYWdnZWRZKTooby52eD0oby5vcmlnaW5hbFgtby54KS9uLmZvcmNlVGlja3NQZXJGcmFtZSxvLnk9TWF0aC5taW4oaS5zaXplLW8uZHkvMixNYXRoLm1heChvLmR5LzIsby55KSkpLHQ9TWF0aC5tYXgodCxNYXRoLmFicyhvLnZ4KSxNYXRoLmFicyhvLnZ5KSl9IWkuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcyYmdDwuMSYmaS5mb3JjZUxheW91dHNbZV0uYWxwaGEoKT4wJiZpLmZvcmNlTGF5b3V0c1tlXS5hbHBoYSgwKX19KDAsZSxhLHIpKS5zdG9wKCl9KDAsbyxpKSxmdW5jdGlvbih0LGUscixpLGEpe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uIG8oKXt2YXIgcztmb3Iocz0wO3M8bi5mb3JjZVRpY2tzUGVyRnJhbWU7cysrKXIuZm9yY2VMYXlvdXRzW2ldLnRpY2soKTtpZihmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLnkwPXRbZV0ueS10W2VdLmR5LzIsdFtlXS55MT10W2VdLnkwK3RbZV0uZHksdFtlXS54MD10W2VdLngtdFtlXS5keC8yLHRbZV0ueDE9dFtlXS54MCt0W2VdLmR4fShyLmdyYXBoLm5vZGVzKSxyLnNhbmtleS51cGRhdGUoci5ncmFwaCksTSh0LmZpbHRlcihOKHIpKSxlKSxyLmZvcmNlTGF5b3V0c1tpXS5hbHBoYSgpPjApd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShvKTtlbHNle3ZhciBsPXIubm9kZS5vcmlnaW5hbFg7ci5ub2RlLngwPWwtci52aXNpYmxlV2lkdGgvMixyLm5vZGUueDE9bCtyLnZpc2libGVXaWR0aC8yLEYocixhKX19KSl9KHQsZSxpLG8sYSl9fSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24ocil7aWYoImZpeGVkIiE9PXIuYXJyYW5nZW1lbnQpe3ZhciBuPWkuZXZlbnQueCxhPWkuZXZlbnQueTsic25hcCI9PT1yLmFycmFuZ2VtZW50PyhyLm5vZGUueDA9bi1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1uK3IudmlzaWJsZVdpZHRoLzIsci5ub2RlLnkwPWEtci52aXNpYmxlSGVpZ2h0LzIsci5ub2RlLnkxPWErci52aXNpYmxlSGVpZ2h0LzIpOigiZnJlZWZvcm0iPT09ci5hcnJhbmdlbWVudCYmKHIubm9kZS54MD1uLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPW4rci52aXNpYmxlV2lkdGgvMiksYT1NYXRoLm1heCgwLE1hdGgubWluKHIuc2l6ZS1yLnZpc2libGVIZWlnaHQvMixhKSksci5ub2RlLnkwPWEtci52aXNpYmxlSGVpZ2h0LzIsci5ub2RlLnkxPWErci52aXNpYmxlSGVpZ2h0LzIpLEIoci5ub2RlKSwic25hcCIhPT1yLmFycmFuZ2VtZW50JiYoci5zYW5rZXkudXBkYXRlKHIuZ3JhcGgpLE0odC5maWx0ZXIoTihyKSksZSkpfX0pKS5vbigiZHJhZ2VuZCIsKGZ1bmN0aW9uKHQpe2lmKCJmaXhlZCIhPT10LmFycmFuZ2VtZW50KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M9ITE7Zm9yKHZhciBlPTA7ZTx0Lm5vZGUuY2hpbGRyZW5Ob2Rlcy5sZW5ndGg7ZSsrKXQubm9kZS5jaGlsZHJlbk5vZGVzW2VdLng9dC5ub2RlLngsdC5ub2RlLmNoaWxkcmVuTm9kZXNbZV0ueT10Lm5vZGUueTsic25hcCIhPT10LmFycmFuZ2VtZW50JiZGKHQsYSl9fSkpO3Qub24oIi5kcmFnIixudWxsKS5jYWxsKG8pfWZ1bmN0aW9uIEYodCxlKXtmb3IodmFyIHI9W10sbj1bXSxpPTA7aTx0LmdyYXBoLm5vZGVzLmxlbmd0aDtpKyspe3ZhciBhPSh0LmdyYXBoLm5vZGVzW2ldLngwK3QuZ3JhcGgubm9kZXNbaV0ueDEpLzIsbz0odC5ncmFwaC5ub2Rlc1tpXS55MCt0LmdyYXBoLm5vZGVzW2ldLnkxKS8yO3IucHVzaChhL3QuZmlndXJlLndpZHRoKSxuLnB1c2goby90LmZpZ3VyZS5oZWlnaHQpfXkuY2FsbCgiX2d1aVJlc3R5bGUiLGUseyJub2RlLngiOltyXSwibm9kZS55Ijpbbl19LHQudHJhY2UuaW5kZXgpLnRoZW4oKGZ1bmN0aW9uKCl7ZS5fZnVsbExheW91dC5fZHJhZ0NvdmVyJiZlLl9mdWxsTGF5b3V0Ll9kcmFnQ292ZXIucmVtb3ZlKCl9KSl9ZnVuY3Rpb24gQih0KXt0Lmxhc3REcmFnZ2VkWD10LngwK3QuZHgvMix0Lmxhc3REcmFnZ2VkWT10LnkwK3QuZHkvMn1mdW5jdGlvbiBOKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlLm9yaWdpbmFsWD09PXQubm9kZS5vcmlnaW5hbFh9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsLGMpe3ZhciB1PSExO2YuZW5zdXJlU2luZ2xlKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllciwiZyIsImZpcnN0LXJlbmRlciIsKGZ1bmN0aW9uKCl7dT0hMH0pKTt2YXIgaD10Ll9mdWxsTGF5b3V0Ll9kcmFnQ292ZXIscD1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIG0odCkudHJhY2UudmlzaWJsZX0pKS5tYXAoeC5iaW5kKG51bGwsbCkpLHY9ZS5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5KS5kYXRhKHAsZCk7di5leGl0KCkucmVtb3ZlKCksdi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zYW5rZXksITApLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLmF0dHIoInRyYW5zZm9ybSIsRSksdi5lYWNoKChmdW5jdGlvbihlLHIpe3QuX2Z1bGxEYXRhW3JdLl9zYW5rZXk9ZTt2YXIgbj0iYmdzYW5rZXktIitlLnRyYWNlLnVpZCsiLSIrcjtmLmVuc3VyZVNpbmdsZSh0Ll9mdWxsTGF5b3V0Ll9kcmFnZ2VycywicmVjdCIsbiksdC5fZnVsbERhdGFbcl0uX2JnUmVjdD1pLnNlbGVjdCgiLiIrbiksdC5fZnVsbERhdGFbcl0uX2JnUmVjdC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCkuYXR0cigieCIsZS50cmFuc2xhdGVYKS5hdHRyKCJ5IixlLnRyYW5zbGF0ZVkpLmNsYXNzZWQoImJnc2Fua2V5IiwhMCkuc3R5bGUoe2ZpbGw6InRyYW5zcGFyZW50Iiwic3Ryb2tlLXdpZHRoIjowfSl9KSksdi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsRSk7dmFyIHk9di5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5TGlua3MpLmRhdGEoZyxkKTt5LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNhbmtleUxpbmtzLCEwKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTt2YXIgaz15LnNlbGVjdEFsbCgiLiIrbi5jbi5zYW5rZXlMaW5rKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5ncmFwaC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkpLm1hcChiLmJpbmQobnVsbCx0KSl9KSxkKTtrLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLmNuLnNhbmtleUxpbmssITApLmNhbGwoRCx2LGMubGlua0V2ZW50cyksay5zdHlsZSgic3Ryb2tlIiwoZnVuY3Rpb24odCl7cmV0dXJuIFModCk/by50aW55UkdCKGEodC5saW5rTGluZUNvbG9yKSk6dC50aW55Q29sb3JIdWV9KSkuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIFModCk/by5vcGFjaXR5KHQubGlua0xpbmVDb2xvcik6dC50aW55Q29sb3JBbHBoYX0pKS5zdHlsZSgiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckh1ZX0pKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSkuc3R5bGUoInN0cm9rZS13aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiBTKHQpP3QubGlua0xpbmVXaWR0aDoxfSkpLmF0dHIoImQiLF8oKSksay5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NvbnRleHQuc3RhdGljUGxvdHx8dXx8aD8xOjB9KSkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMSksay5leGl0KCkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIE09di5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5Tm9kZVNldCkuZGF0YShnLGQpO00uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Fua2V5Tm9kZVNldCwhMCksTS5zdHlsZSgiY3Vyc29yIiwoZnVuY3Rpb24odCl7c3dpdGNoKHQuYXJyYW5nZW1lbnQpe2Nhc2UiZml4ZWQiOnJldHVybiJkZWZhdWx0IjtjYXNlInBlcnBlbmRpY3VsYXIiOnJldHVybiJucy1yZXNpemUiO2RlZmF1bHQ6cmV0dXJuIm1vdmUifX0pKTt2YXIgRj1NLnNlbGVjdEFsbCgiLiIrbi5jbi5zYW5rZXlOb2RlKS5kYXRhKChmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoLm5vZGVzO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5vcmlnaW5hbFg9KHRbZV0ueDArdFtlXS54MSkvMix0W2VdLm9yaWdpbmFsWT0odFtlXS55MCt0W2VdLnkxKS8yLC0xPT09ci5pbmRleE9mKHRbZV0ub3JpZ2luYWxYKSYmci5wdXNoKHRbZV0ub3JpZ2luYWxYKTtmb3Ioci5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSksZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ub3JpZ2luYWxMYXllckluZGV4PXIuaW5kZXhPZih0W2VdLm9yaWdpbmFsWCksdFtlXS5vcmlnaW5hbExheWVyPXRbZV0ub3JpZ2luYWxMYXllckluZGV4LyhyLmxlbmd0aC0xKX0oZSksZS5tYXAody5iaW5kKG51bGwsdCkpfSksZCk7Ri5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zYW5rZXlOb2RlLCEwKS5jYWxsKFQpLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24oZSl7cmV0dXJuIXQuX2NvbnRleHQuc3RhdGljUGxvdCYmIXV8fGUucGFydE9mR3JvdXA/MDoxfSkpLEYuY2FsbChELHYsYy5ub2RlRXZlbnRzKS5jYWxsKFIsayxjLHQpLEYudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5jYWxsKFQpLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQucGFydE9mR3JvdXA/MDoxfSkpLEYuZXhpdCgpLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpO3ZhciBCPUYuc2VsZWN0QWxsKCIuIituLmNuLm5vZGVSZWN0KS5kYXRhKGcpO0IuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24ubm9kZVJlY3QsITApLmNhbGwoQSksQi5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZUxpbmVXaWR0aH0pKS5zdHlsZSgic3Ryb2tlIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8udGlueVJHQihhKHQubm9kZUxpbmVDb2xvcikpfSkpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiBvLm9wYWNpdHkodC5ub2RlTGluZUNvbG9yKX0pKS5zdHlsZSgiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckh1ZX0pKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSksQi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmNhbGwoQSk7dmFyIE49Ri5zZWxlY3RBbGwoIi4iK24uY24ubm9kZUNhcHR1cmUpLmRhdGEoZyk7Ti5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5ub2RlQ2FwdHVyZSwhMCkuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCksTi5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZVh9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVZfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZVdpZHRofSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVIZWlnaHR9KSk7dmFyIGo9Ri5zZWxlY3RBbGwoIi4iK24uY24ubm9kZUNlbnRlcmVkKS5kYXRhKGcpO2ouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24ubm9kZUNlbnRlcmVkLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLEMpLGoudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLEMpO3ZhciBVPWouc2VsZWN0QWxsKCIuIituLmNuLm5vZGVMYWJlbEd1aWRlKS5kYXRhKGcpO1UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4uY24ubm9kZUxhYmVsR3VpZGUsITApLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudW5pcXVlTm9kZUxhYmVsUGF0aElkfSkpLmF0dHIoImQiLEwpLmF0dHIoInRyYW5zZm9ybSIsSSksVS50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoImQiLEwpLmF0dHIoInRyYW5zZm9ybSIsSSk7dmFyIFY9ai5zZWxlY3RBbGwoIi4iK24uY24ubm9kZUxhYmVsKS5kYXRhKGcpO1YuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKG4uY24ubm9kZUxhYmVsLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLFApLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0Iikuc3R5bGUoImZpbGwiLCJibGFjayIpLFYuc3R5bGUoInRleHQtc2hhZG93IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8iLTFweCAxcHggMXB4ICNmZmYsIDFweCAxcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmYiOiJub25lIn0pKS5lYWNoKChmdW5jdGlvbih0KXtzLmZvbnQoVix0LnRleHRGb250KX0pKSxWLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIixQKTt2YXIgcT1WLnNlbGVjdEFsbCgiLiIrbi5jbi5ub2RlTGFiZWxUZXh0UGF0aCkuZGF0YShnKTtxLmVudGVyKCkuYXBwZW5kKCJ0ZXh0UGF0aCIpLmNsYXNzZWQobi5jbi5ub2RlTGFiZWxUZXh0UGF0aCwhMCkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigieGxpbms6aHJlZiIsKGZ1bmN0aW9uKHQpe3JldHVybiIjIit0LnVuaXF1ZU5vZGVMYWJlbFBhdGhJZH0pKS5hdHRyKCJzdGFydE9mZnNldCIsTykuc3R5bGUoImZpbGwiLHopLHEudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbHx8dC5ub2RlLmR5PjU/dC5ub2RlLmxhYmVsOiIifSkpLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbCYmdC5sZWZ0PyJlbmQiOiJzdGFydCJ9KSkscS50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInN0YXJ0T2Zmc2V0IixPKS5zdHlsZSgiZmlsbCIseil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvZ3VwIjo3NzUsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4vY29uc3RhbnRzIjoxMTgwLCJAcGxvdGx5L2QzLXNhbmtleSI6NTYsIkBwbG90bHkvZDMtc2Fua2V5LWNpcmN1bGFyIjo1NSxkMzoxNjksImQzLWZvcmNlIjoxNjAsImQzLWludGVycG9sYXRlIjoxNjIsdGlueWNvbG9yMjo1NzZ9XSwxMTg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQuY2RbMF0udHJhY2UsaT1uLl9zYW5rZXkuZ3JhcGgubm9kZXMsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKCFvLnBhcnRPZkdyb3VwKXt2YXIgcz1bKG8ueDArby54MSkvMiwoby55MCtvLnkxKS8yXTsidiI9PT1uLm9yaWVudGF0aW9uJiZzLnJldmVyc2UoKSxlJiZlLmNvbnRhaW5zKHMsITEsYSx0KSYmci5wdXNoKHtwb2ludE51bWJlcjpvLnBvaW50TnVtYmVyfSl9fXJldHVybiByfX0se31dLDExODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bi5tZXJnZUFycmF5KGUudGV4dCx0LCJ0eCIpLG4ubWVyZ2VBcnJheShlLnRleHR0ZW1wbGF0ZSx0LCJ0eHQiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iiksbi5tZXJnZUFycmF5KGUuY3VzdG9tZGF0YSx0LCJkYXRhIiksbi5tZXJnZUFycmF5KGUudGV4dHBvc2l0aW9uLHQsInRwIiksZS50ZXh0Zm9udCYmKG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShlLnRleHRmb250LnNpemUsdCwidHMiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5jb2xvcix0LCJ0YyIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmZhbWlseSx0LCJ0ZiIpKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoaS5zaXplLHQsIm1zIiksbi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGkub3BhY2l0eSx0LCJtbyIpLG4ubWVyZ2VBcnJheShpLnN5bWJvbCx0LCJteCIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2kubGluZSYmKG4ubWVyZ2VBcnJheShhLmNvbG9yLHQsIm1sYyIpLG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShhLndpZHRoLHQsIm1sdyIpKTt2YXIgbz1pLmdyYWRpZW50O28mJiJub25lIiE9PW8udHlwZSYmKG4ubWVyZ2VBcnJheShvLnR5cGUsdCwibWd0Iiksbi5tZXJnZUFycmF5KG8uY29sb3IsdCwibWdjIikpfX19LHsiLi4vLi4vbGliIjo3Nzh9XSwxMTg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSx4MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LGR4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LHkwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0sZHk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIixhbmltOiEwfSx4cGVyaW9kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHlwZXJpb2Q6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0seHBlcmlvZDA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx5cGVyaW9kMDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHhwZXJpb2RhbGlnbm1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInN0YXJ0IiwibWlkZGxlIiwiZW5kIl0sZGZsdDoibWlkZGxlIixlZGl0VHlwZToiY2FsYyJ9LHlwZXJpb2RhbGlnbm1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInN0YXJ0IiwibWlkZGxlIiwiZW5kIl0sZGZsdDoibWlkZGxlIixlZGl0VHlwZToiY2FsYyJ9LHN0YWNrZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjIn0sZ3JvdXBub3JtOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyIiLCJmcmFjdGlvbiIsInBlcmNlbnQiXSxkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc3RhY2tnYXBzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmZlciB6ZXJvIiwiaW50ZXJwb2xhdGUiXSxkZmx0OiJpbmZlciB6ZXJvIixlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sdGV4dHRlbXBsYXRlOm4oe30se30pLGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGluZXMiLCJtYXJrZXJzIiwidGV4dCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToiY2FsYyJ9LGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInBvaW50cyIsImZpbGxzIl0sZWRpdFR5cGU6InN0eWxlIn0saG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIixhbmltOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6InN0eWxlIixhbmltOiEwfSxzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwic3BsaW5lIiwiaHYiLCJ2aCIsImh2aCIsInZodiJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxzbW9vdGhpbmc6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEuMyxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxkYXNoOnUoe30scyx7ZWRpdFR5cGU6InN0eWxlIn0pLHNpbXBsaWZ5Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxjb25uZWN0Z2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNsaXBvbmF4aXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxmaWxsOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwidG96ZXJveSIsInRvemVyb3giLCJ0b25leHR5IiwidG9uZXh0eCIsInRvc2VsZiIsInRvbmV4dCJdLGVkaXRUeXBlOiJjYWxjIn0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIixhbmltOiEwfSxtYXJrZXI6dSh7c3ltYm9sOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6bC5zeW1ib2xMaXN0LGRmbHQ6ImNpcmNsZSIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIixhbmltOiEwfSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIixhbmltOiEwfSxtYXhkaXNwbGF5ZWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sc2l6ZXJlZjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxzaXplbWluOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJkaWFtZXRlciIsImFyZWEiXSxkZmx0OiJkaWFtZXRlciIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOnUoe3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIixhbmltOiEwfSxlZGl0VHlwZToiY2FsYyJ9LGEoIm1hcmtlci5saW5lIix7YW5pbTohMH0pKSxncmFkaWVudDp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFkaWFsIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwibm9uZSJdLGFycmF5T2s6ITAsZGZsdDoibm9uZSIsZWRpdFR5cGU6ImNhbGMifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sYSgibWFya2VyIix7YW5pbTohMH0pKSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIGxlZnQiLCJ0b3AgY2VudGVyIiwidG9wIHJpZ2h0IiwibWlkZGxlIGxlZnQiLCJtaWRkbGUgY2VudGVyIiwibWlkZGxlIHJpZ2h0IiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZGZsdDoibWlkZGxlIGNlbnRlciIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHRmb250Om8oe2VkaXRUeXBlOiJjYWxjIixjb2xvckVkaXRUeXBlOiJzdHlsZSIsYXJyYXlPazohMH0pLHI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY1MCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2NjQsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjkwNiwiLi9jb25zdGFudHMiOjExOTF9XSwxMTg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGw9dCgiLi9zdWJ0eXBlcyIpLGM9dCgiLi9jb2xvcnNjYWxlX2NhbGMiKSx1PXQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIiksZj10KCIuL2NhbGNfc2VsZWN0aW9uIik7ZnVuY3Rpb24gaCh0LGUscixuLGksbyxzKXt2YXIgYz1lLl9sZW5ndGgsdT10Ll9mdWxsTGF5b3V0LGY9ci5faWQsaD1uLl9pZCxwPXUuX2ZpcnN0U2NhdHRlcltnKGUpXT09PWUudWlkLGQ9KG0oZSx1LHIsbil8fHt9KS5vcmllbnRhdGlvbix2PWUuZmlsbDtyLl9taW5EdGljaz0wLG4uX21pbkR0aWNrPTA7dmFyIHk9e3BhZGRlZDohMH0seD17cGFkZGVkOiEwfTtzJiYoeS5wcGFkPXgucHBhZD1zKTt2YXIgYj1jPDJ8fGlbMF0hPT1pW2MtMV18fG9bMF0hPT1vW2MtMV07YiYmKCJ0b3plcm94Ij09PXZ8fCJ0b25leHR4Ij09PXYmJihwfHwiaCI9PT1kKSk/eS50b3plcm89ITA6KGUuZXJyb3JfeXx8e30pLnZpc2libGV8fCJ0b25leHR5IiE9PXYmJiJ0b3plcm95IiE9PXYmJihsLmhhc01hcmtlcnMoZSl8fGwuaGFzVGV4dChlKSl8fCh5LnBhZGRlZD0hMSx5LnBwYWQ9MCksYiYmKCJ0b3plcm95Ij09PXZ8fCJ0b25leHR5Ij09PXYmJihwfHwidiI9PT1kKSk/eC50b3plcm89ITA6InRvbmV4dHgiIT09diYmInRvemVyb3giIT09dnx8KHgucGFkZGVkPSExKSxmJiYoZS5fZXh0cmVtZXNbZl09YS5maW5kRXh0cmVtZXMocixpLHkpKSxoJiYoZS5fZXh0cmVtZXNbaF09YS5maW5kRXh0cmVtZXMobixvLHgpKX1mdW5jdGlvbiBwKHQsZSl7aWYobC5oYXNNYXJrZXJzKHQpKXt2YXIgcixuPXQubWFya2VyLG89MS42Kih0Lm1hcmtlci5zaXplcmVmfHwxKTtpZihyPSJhcmVhIj09PXQubWFya2VyLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQoKHR8fDApL28pLDMpfTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoKHR8fDApL28sMyl9LGkuaXNBcnJheU9yVHlwZWRBcnJheShuLnNpemUpKXt2YXIgcz17dHlwZToibGluZWFyIn07YS5zZXRDb252ZXJ0KHMpO2Zvcih2YXIgYz1zLm1ha2VDYWxjZGF0YSh0Lm1hcmtlciwic2l6ZSIpLHU9bmV3IEFycmF5KGUpLGY9MDtmPGU7ZisrKXVbZl09cihjW2ZdKTtyZXR1cm4gdX1yZXR1cm4gcihuLnNpemUpfX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9ZyhlKSxuPXQuX2ZpcnN0U2NhdHRlcjtuW3JdfHwobltyXT1lLnVpZCl9ZnVuY3Rpb24gZyh0KXt2YXIgZT10LnN0YWNrZ3JvdXA7cmV0dXJuIHQueGF4aXMrdC55YXhpcyt0LnR5cGUrKGU/Ii0iK2U6IiIpfWZ1bmN0aW9uIG0odCxlLHIsbil7dmFyIGk9dC5zdGFja2dyb3VwO2lmKGkpe3ZhciBhPWUuX3NjYXR0ZXJTdGFja09wdHNbci5faWQrbi5faWRdW2ldLG89InYiPT09YS5vcmllbnRhdGlvbj9uOnI7cmV0dXJuImxpbmVhciI9PT1vLnR5cGV8fCJsb2ciPT09by50eXBlP2E6dm9pZCAwfX1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcixsLGcsdix5LHgsYj10Ll9mdWxsTGF5b3V0LF89YS5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLHc9YS5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLFQ9Xy5tYWtlQ2FsY2RhdGEoZSwieCIpLGs9dy5tYWtlQ2FsY2RhdGEoZSwieSIpLE09byhlLF8sIngiLFQpLEE9byhlLHcsInkiLGspLFM9ZS5fbGVuZ3RoLEU9bmV3IEFycmF5KFMpLEM9ZS5pZHMsTD1tKGUsYixfLHcpLEk9ITE7ZChiLGUpO3ZhciBQLHo9IngiLE89InkiO0w/KGkucHVzaFVuaXF1ZShMLnRyYWNlSW5kaWNlcyxlLl9leHBhbmRlZEluZGV4KSwocj0idiI9PT1MLm9yaWVudGF0aW9uKT8oTz0icyIsUD0ieCIpOih6PSJzIixQPSJ5IikseT0iaW50ZXJwb2xhdGUiPT09TC5zdGFja2dhcHMpOmgodCxlLF8sdyxNLEEscChlLFMpKTt2YXIgRD0hIWUueHBlcmlvZGFsaWdubWVudCxSPSEhZS55cGVyaW9kYWxpZ25tZW50O2ZvcihsPTA7bDxTO2wrKyl7dmFyIEY9RVtsXT17fSxCPW4oTVtsXSksTj1uKEFbbF0pO0ImJk4/KEZbel09TVtsXSxGW09dPUFbbF0sRCYmKEYub3JpZ194PVRbbF0pLFImJihGLm9yaWdfeT1rW2xdKSk6TCYmKHI/QjpOKT8oRltQXT1yP01bbF06QVtsXSxGLmdhcD0hMCx5PyhGLnM9cyxJPSEwKTpGLnM9MCk6Rlt6XT1GW09dPXMsQyYmKEYuaWQ9U3RyaW5nKENbbF0pKX1pZih1KEUsZSksYyh0LGUpLGYoRSxlKSxMKXtmb3IobD0wO2w8RS5sZW5ndGg7KUVbbF1bUF09PT1zP0Uuc3BsaWNlKGwsMSk6bCsrO2lmKGkuc29ydChFLChmdW5jdGlvbih0LGUpe3JldHVybiB0W1BdLWVbUF18fHQuaS1lLml9KSksSSl7Zm9yKGw9MDtsPEUubGVuZ3RoLTEmJkVbbF0uZ2FwOylsKys7Zm9yKCh4PUVbbF0ucyl8fCh4PUVbbF0ucz0wKSxnPTA7ZzxsO2crKylFW2ddLnM9eDtmb3Iodj1FLmxlbmd0aC0xO3Y+bCYmRVt2XS5nYXA7KXYtLTtmb3IoeD1FW3ZdLnMsZz1FLmxlbmd0aC0xO2c+djtnLS0pRVtnXS5zPXg7Zm9yKDtsPHY7KWlmKEVbKytsXS5nYXApe2ZvcihnPWwrMTtFW2ddLmdhcDspZysrO2Zvcih2YXIgaj1FW2wtMV1bUF0sVT1FW2wtMV0ucyxWPShFW2ddLnMtVSkvKEVbZ11bUF0taik7bDxnOylFW2xdLnM9VSsoRVtsXVtQXS1qKSpWLGwrK319fXJldHVybiBFfSxjYWxjTWFya2VyU2l6ZTpwLGNhbGNBeGlzRXhwYW5zaW9uOmgsc2V0Rmlyc3RTY2F0dGVyOmQsZ2V0U3RhY2tPcHRzOm19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjgyNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjExODYsIi4vY2FsY19zZWxlY3Rpb24iOjExODksIi4vY29sb3JzY2FsZV9jYWxjIjoxMTkwLCIuL3N1YnR5cGVzIjoxMjEyLCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sMTE4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtuLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykmJm4udGFnU2VsZWN0ZWQodCxlKX19LHsiLi4vLi4vbGliIjo3Nzh9XSwxMTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YS5oYXNMaW5lcyhlKSYmbihlLCJsaW5lIikmJmkodCxlLHt2YWxzOmUubGluZS5jb2xvcixjb250YWluZXJTdHI6ImxpbmUiLGNMZXR0ZXI6ImMifSksYS5oYXNNYXJrZXJzKGUpJiYobihlLCJtYXJrZXIiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIiLGNMZXR0ZXI6ImMifSksbihlLCJtYXJrZXIubGluZSIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyLmxpbmUiLGNMZXR0ZXI6ImMifSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjUxLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjU0LCIuL3N1YnR5cGVzIjoxMjEyfV0sMTE5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1BUU19MSU5FU09OTFk6MjAsbWluVG9sZXJhbmNlOi4yLHRvbGVyYW5jZUdyb3d0aDoxMCxtYXhTY3JlZW5zQXdheToyMCxldmVudERhdGFLZXlzOltdfX0se31dLDExOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jYWxjIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSxvKXtpW25dPSEwO3ZhciBzPXtpOm51bGwsZ2FwOiEwLHM6MH07aWYoc1tvXT1yLHQuc3BsaWNlKGUsMCxzKSxlJiZyPT09dFtlLTFdW29dKXt2YXIgbD10W2UtMV07cy5zPWwucyxzLmk9bC5pLHMuZ2FwPWwuZ2FwfWVsc2UgYSYmKHMucz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10W2UtMV0sYT10W2UrMV07cmV0dXJuIGE/aT9pLnMrKGEucy1pLnMpKihyLWlbbl0pLyhhW25dLWlbbl0pOmEuczppLnN9KHQsZSxyLG8pKTtlfHwodFswXS50PXRbMV0udCx0WzBdLnRyYWNlPXRbMV0udHJhY2UsZGVsZXRlIHRbMV0udCxkZWxldGUgdFsxXS50cmFjZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS54YXhpcyxhPWUueWF4aXMsbz1yLl9pZCthLl9pZCxzPXQuX2Z1bGxMYXlvdXQuX3NjYXR0ZXJTdGFja09wdHNbb107aWYocyl7dmFyIGwsYyx1LGYsaCxwLGQsZyxtLHYseSx4LGIsXyx3LFQ9dC5jYWxjZGF0YTtmb3IodmFyIGsgaW4gcyl7dmFyIE09KHY9c1trXSkudHJhY2VJbmRpY2VzO2lmKE0ubGVuZ3RoKXtmb3IoeT0iaW50ZXJwb2xhdGUiPT09di5zdGFja2dhcHMseD12Lmdyb3Vwbm9ybSwidiI9PT12Lm9yaWVudGF0aW9uPyhiPSJ4IixfPSJ5Iik6KGI9InkiLF89IngiKSx3PW5ldyBBcnJheShNLmxlbmd0aCksbD0wO2w8dy5sZW5ndGg7bCsrKXdbbF09ITE7cD1UW01bMF1dO3ZhciBBPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKGw9MDtsPHAubGVuZ3RoO2wrKylBW2xdPXBbbF1bYl07Zm9yKGw9MTtsPE0ubGVuZ3RoO2wrKyl7Zm9yKGg9VFtNW2xdXSxjPXU9MDtjPGgubGVuZ3RoO2MrKyl7Zm9yKGQ9aFtjXVtiXTtkPkFbdV0mJnU8QS5sZW5ndGg7dSsrKWkoaCxjLEFbdV0sbCx3LHksYiksYysrO2lmKGQhPT1BW3VdKXtmb3IoZj0wO2Y8bDtmKyspaShUW01bZl1dLHUsZCxmLHcseSxiKTtBLnNwbGljZSh1LDAsZCl9dSsrfWZvcig7dTxBLmxlbmd0aDt1KyspaShoLGMsQVt1XSxsLHcseSxiKSxjKyt9dmFyIFM9QS5sZW5ndGg7Zm9yKGM9MDtjPHAubGVuZ3RoO2MrKyl7Zm9yKGc9cFtjXVtfXT1wW2NdLnMsbD0xO2w8TS5sZW5ndGg7bCsrKShoPVRbTVtsXV0pWzBdLnRyYWNlLl9yYXdMZW5ndGg9aFswXS50cmFjZS5fbGVuZ3RoLGhbMF0udHJhY2UuX2xlbmd0aD1TLGcrPWhbY10ucyxoW2NdW19dPWc7aWYoeClmb3IobT0oImZyYWN0aW9uIj09PXg/ZzpnLzEwMCl8fDEsbD0wO2w8TS5sZW5ndGg7bCsrKXt2YXIgRT1UW01bbF1dW2NdO0VbX10vPW0sRS5zTm9ybT1FLnMvbX19Zm9yKGw9MDtsPE0ubGVuZ3RoO2wrKyl7dmFyIEM9KGg9VFtNW2xdXSlbMF0udHJhY2UsTD1uLmNhbGNNYXJrZXJTaXplKEMsQy5fcmF3TGVuZ3RoKSxJPUFycmF5LmlzQXJyYXkoTCk7aWYoTCYmd1tsXXx8SSl7dmFyIFA9TDtmb3IoTD1uZXcgQXJyYXkoUyksYz0wO2M8UztjKyspTFtjXT1oW2NdLmdhcD8wOkk/UFtoW2NdLmldOlB9dmFyIHo9bmV3IEFycmF5KFMpLE89bmV3IEFycmF5KFMpO2ZvcihjPTA7YzxTO2MrKyl6W2NdPWhbY10ueCxPW2NdPWhbY10ueTtuLmNhbGNBeGlzRXhwYW5zaW9uKHQsQyxyLGEseixPLEwpLGhbMF0udC5vcmllbnRhdGlvbj12Lm9yaWVudGF0aW9ufX19fX19LHsiLi9jYWxjIjoxMTg4fV0sMTE5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07aWYoInNjYXR0ZXIiPT09ci50eXBlKXt2YXIgbj1yLmZpbGw7aWYoIm5vbmUiIT09biYmInRvc2VsZiIhPT1uJiYoci5vcGFjaXR5PXZvaWQgMCwidG9uZXh0eSI9PT1ufHwidG9uZXh0eCI9PT1uKSlmb3IodmFyIGk9ZS0xO2k+PTA7aS0tKXt2YXIgYT10W2ldO2lmKCJzY2F0dGVyIj09PWEudHlwZSYmYS54YXhpcz09PXIueGF4aXMmJmEueWF4aXM9PT1yLnlheGlzKXthLm9wYWNpdHk9dm9pZCAwO2JyZWFrfX19fX19LHt9XSwxMTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9jb25zdGFudHMiKSxzPXQoIi4vc3VidHlwZXMiKSxsPXQoIi4veHlfZGVmYXVsdHMiKSxjPXQoIi4vcGVyaW9kX2RlZmF1bHRzIiksdT10KCIuL3N0YWNrX2RlZmF1bHRzIiksZj10KCIuL21hcmtlcl9kZWZhdWx0cyIpLGg9dCgiLi9saW5lX2RlZmF1bHRzIikscD10KCIuL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxkPXQoIi4vdGV4dF9kZWZhdWx0cyIpLGc9dCgiLi9maWxsY29sb3JfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbSl7ZnVuY3Rpb24gdihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciB5PWwodCxlLG0sdik7aWYoeXx8KGUudmlzaWJsZT0hMSksZS52aXNpYmxlKXtjKHQsZSxtLHYpO3ZhciB4PXUodCxlLG0sdiksYj0heCYmeTxvLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyI7digidGV4dCIpLHYoImhvdmVydGV4dCIpLHYoIm1vZGUiLGIpLHMuaGFzTGluZXMoZSkmJihoKHQsZSxyLG0sdikscCh0LGUsdiksdigiY29ubmVjdGdhcHMiKSx2KCJsaW5lLnNpbXBsaWZ5IikpLHMuaGFzTWFya2VycyhlKSYmZih0LGUscixtLHYse2dyYWRpZW50OiEwfSkscy5oYXNUZXh0KGUpJiYodigidGV4dHRlbXBsYXRlIiksZCh0LGUsbSx2KSk7dmFyIF89W107KHMuaGFzTWFya2VycyhlKXx8cy5oYXNUZXh0KGUpKSYmKHYoImNsaXBvbmF4aXMiKSx2KCJtYXJrZXIubWF4ZGlzcGxheWVkIiksXy5wdXNoKCJwb2ludHMiKSksdigiZmlsbCIseD94LmZpbGxEZmx0OiJub25lIiksIm5vbmUiIT09ZS5maWxsJiYoZyh0LGUscix2KSxzLmhhc0xpbmVzKGUpfHxwKHQsZSx2KSk7dmFyIHc9KGUubGluZXx8e30pLmNvbG9yLFQ9KGUubWFya2VyfHx7fSkuY29sb3I7InRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHxfLnB1c2goImZpbGxzIiksdigiaG92ZXJvbiIsXy5qb2luKCIrIil8fCJwb2ludHMiKSwiZmlsbHMiIT09ZS5ob3Zlcm9uJiZ2KCJob3ZlcnRlbXBsYXRlIik7dmFyIGs9aS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN1cHBseURlZmF1bHRzIik7ayh0LGUsd3x8VHx8cix7YXhpczoieSJ9KSxrKHQsZSx3fHxUfHxyLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHYpfX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4vYXR0cmlidXRlcyI6MTE4NywiLi9jb25zdGFudHMiOjExOTEsIi4vZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTk1LCIuL2xpbmVfZGVmYXVsdHMiOjEyMDAsIi4vbGluZV9zaGFwZV9kZWZhdWx0cyI6MTIwMiwiLi9tYXJrZXJfZGVmYXVsdHMiOjEyMDYsIi4vcGVyaW9kX2RlZmF1bHRzIjoxMjA3LCIuL3N0YWNrX2RlZmF1bHRzIjoxMjEwLCIuL3N1YnR5cGVzIjoxMjEyLCIuL3RleHRfZGVmYXVsdHMiOjEyMTMsIi4veHlfZGVmYXVsdHMiOjEyMTR9XSwxMTk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPSExO2lmKGUubWFya2VyKXt2YXIgcz1lLm1hcmtlci5jb2xvcixsPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3I7cyYmIWkocyk/bz1zOmwmJiFpKGwpJiYobz1sKX1hKCJmaWxsY29sb3IiLG4uYWRkT3BhY2l0eSgoZS5saW5lfHx7fSkuY29sb3J8fG98fHIsLjUpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9saWIiOjc3OH1dLDExOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXt9LGE9e19mdWxsTGF5b3V0OnJ9LG89bi5nZXRGcm9tVHJhY2UoYSxlLCJ4Iikscz1uLmdldEZyb21UcmFjZShhLGUsInkiKTtyZXR1cm4gaS54TGFiZWw9bi50aWNrVGV4dChvLHQueCwhMCkudGV4dCxpLnlMYWJlbD1uLnRpY2tUZXh0KHMsdC55LCEwKS50ZXh0LGl9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjh9XSwxMTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhO2lmKCJsaW5lcyI9PT10Lm1vZGUpcmV0dXJuKHI9dC5saW5lLmNvbG9yKSYmbi5vcGFjaXR5KHIpP3I6dC5maWxsY29sb3I7aWYoIm5vbmUiPT09dC5tb2RlKXJldHVybiB0LmZpbGw/dC5maWxsY29sb3I6IiI7dmFyIG89ZS5tY2N8fCh0Lm1hcmtlcnx8e30pLmNvbG9yLHM9ZS5tbGNjfHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLmNvbG9yO3JldHVybihhPW8mJm4ub3BhY2l0eShvKT9vOnMmJm4ub3BhY2l0eShzKSYmKGUubWx3fHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLndpZHRoKT9zOiIiKT9uLm9wYWNpdHkoYSk8LjM/bi5hZGRPcGFjaXR5KGEsLjMpOmE6KHI9KHQubGluZXx8e30pLmNvbG9yKSYmbi5vcGFjaXR5KHIpJiZpLmhhc0xpbmVzKHQpJiZ0LmxpbmUud2lkdGg/cjp0LmZpbGxjb2xvcn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuL3N1YnR5cGVzIjoxMjEyfV0sMTE5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuL2dldF90cmFjZV9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9bi5maWxsVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9dC5jZCxmPXVbMF0udHJhY2UsaD10LnhhLHA9dC55YSxkPWguYzJwKGUpLGc9cC5jMnAociksbT1bZCxnXSx2PWYuaG92ZXJvbnx8IiIseT0tMSE9PWYubW9kZS5pbmRleE9mKCJtYXJrZXJzIik/MzouNTtpZigtMSE9PXYuaW5kZXhPZigicG9pbnRzIikpe3ZhciB4PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KHksdC5tcmN8fDApLHI9aC5jMnAodC54KS1kLG49cC5jMnAodC55KS1nO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQocipyK24qbiktZSwxLXkvZSl9LGI9aS5nZXREaXN0YW5jZUZ1bmN0aW9uKGMsKGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApLHI9MS0xL2Usbj1NYXRoLmFicyhoLmMycCh0LngpLWQpO3JldHVybiBuPGU/cipuL2U6bi1lK3J9KSwoZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCkscj0xLTEvZSxuPU1hdGguYWJzKHAuYzJwKHQueSktZyk7cmV0dXJuIG48ZT9yKm4vZTpuLWUrcn0pLHgpO2lmKGkuZ2V0Q2xvc2VzdCh1LGIsdCksITEhPT10LmluZGV4KXt2YXIgXz11W3QuaW5kZXhdLHc9aC5jMnAoXy54LCEwKSxUPXAuYzJwKF8ueSwhMCksaz1fLm1yY3x8MTt0LmluZGV4PV8uaTt2YXIgTT11WzBdLnQub3JpZW50YXRpb24sQT1NJiYoXy5zTm9ybXx8Xy5zKSxTPSJoIj09PU0/QTp2b2lkIDAhPT1fLm9yaWdfeD9fLm9yaWdfeDpfLngsRT0idiI9PT1NP0E6dm9pZCAwIT09Xy5vcmlnX3k/Xy5vcmlnX3k6Xy55O3JldHVybiBuLmV4dGVuZEZsYXQodCx7Y29sb3I6byhmLF8pLHgwOnctayx4MTp3K2sseExhYmVsVmFsOlMseTA6VC1rLHkxOlQrayx5TGFiZWxWYWw6RSxzcGlrZURpc3RhbmNlOngoXyksaG92ZXJ0ZW1wbGF0ZTpmLmhvdmVydGVtcGxhdGV9KSxsKF8sZix0KSxhLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikoXyxmLHQpLFt0XX19aWYoLTEhPT12LmluZGV4T2YoImZpbGxzIikmJmYuX3BvbHlnb25zKXt2YXIgQyxMLEksUCx6LE8sRCxSLEYsQj1mLl9wb2x5Z29ucyxOPVtdLGo9ITEsVT0xLzAsVj0tMS8wLHE9MS8wLEg9LTEvMDtmb3IoQz0wO0M8Qi5sZW5ndGg7QysrKShJPUJbQ10pLmNvbnRhaW5zKG0pJiYoaj0haixOLnB1c2goSSkscT1NYXRoLm1pbihxLEkueW1pbiksSD1NYXRoLm1heChILEkueW1heCkpO2lmKGope3ZhciBHPSgocT1NYXRoLm1heChxLDApKSsoSD1NYXRoLm1pbihILHAuX2xlbmd0aCkpKS8yO2ZvcihDPTA7QzxOLmxlbmd0aDtDKyspZm9yKFA9TltDXS5wdHMsTD0xO0w8UC5sZW5ndGg7TCsrKShSPVBbTC0xXVsxXSk+RyE9KEY9UFtMXVsxXSk+PUcmJihPPVBbTC0xXVswXSxEPVBbTF1bMF0sRi1SJiYoej1PKyhELU8pKihHLVIpLyhGLVIpLFU9TWF0aC5taW4oVSx6KSxWPU1hdGgubWF4KFYseikpKTtVPU1hdGgubWF4KFUsMCksVj1NYXRoLm1pbihWLGguX2xlbmd0aCk7dmFyIFk9cy5kZWZhdWx0TGluZTtyZXR1cm4gcy5vcGFjaXR5KGYuZmlsbGNvbG9yKT9ZPWYuZmlsbGNvbG9yOnMub3BhY2l0eSgoZi5saW5lfHx7fSkuY29sb3IpJiYoWT1mLmxpbmUuY29sb3IpLG4uZXh0ZW5kRmxhdCh0LHtkaXN0YW5jZTp0Lm1heEhvdmVyRGlzdGFuY2UseDA6VSx4MTpWLHkwOkcseTE6Ryxjb2xvcjpZLGhvdmVydGVtcGxhdGU6ITF9KSxkZWxldGUgdC5pbmRleCxmLnRleHQmJiFBcnJheS5pc0FycmF5KGYudGV4dCk/dC50ZXh0PVN0cmluZyhmLnRleHQpOnQudGV4dD1mLm5hbWUsW3RdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9meCI6NjgzLCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi9nZXRfdHJhY2VfY29sb3IiOjExOTd9XSwxMTk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9e2hhc0xpbmVzOm4uaGFzTGluZXMsaGFzTWFya2VyczpuLmhhc01hcmtlcnMsaGFzVGV4dDpuLmhhc1RleHQsaXNCdWJibGU6bi5pc0J1YmJsZSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKSxhcnJheXNUb0NhbGNkYXRhOnQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIikscGxvdDp0KCIuL3Bsb3QiKSxjb2xvcmJhcjp0KCIuL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksYW5pbWF0YWJsZTohMCxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlciIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsInN5bWJvbHMiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjExODYsIi4vYXR0cmlidXRlcyI6MTE4NywiLi9jYWxjIjoxMTg4LCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjExOTIsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjExOTMsIi4vZGVmYXVsdHMiOjExOTQsIi4vZm9ybWF0X2xhYmVscyI6MTE5NiwiLi9ob3ZlciI6MTE5OCwiLi9tYXJrZXJfY29sb3JiYXIiOjEyMDUsIi4vcGxvdCI6MTIwOCwiLi9zZWxlY3QiOjEyMDksIi4vc3R5bGUiOjEyMTEsIi4vc3VidHlwZXMiOjEyMTJ9XSwxMjAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjPSh0Lm1hcmtlcnx8e30pLmNvbG9yOyhzKCJsaW5lLmNvbG9yIixyKSxpKHQsImxpbmUiKSk/YSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pOnMoImxpbmUuY29sb3IiLCFuKGMpJiZjfHxyKTtzKCJsaW5lLndpZHRoIiksKGx8fHt9KS5ub0Rhc2h8fHMoImxpbmUuZGFzaCIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY1MywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1NCwiLi4vLi4vbGliIjo3Nzh9XSwxMjAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxpPW4uQkFETlVNLGE9bi5MT0dfQ0xJUCxvPWErLjUscz1hLS41LGw9dCgiLi4vLi4vbGliIiksYz1sLnNlZ21lbnRzSW50ZXJzZWN0LHU9bC5jb25zdHJhaW4sZj10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxoLHAsZCxnLG0sdix5LHgsYixfLHcsVCxrLE0sQSxTPWUueGF4aXMsRT1lLnlheGlzLEM9ImxvZyI9PT1TLnR5cGUsTD0ibG9nIj09PUUudHlwZSxJPVMuX2xlbmd0aCxQPUUuX2xlbmd0aCx6PWUuY29ubmVjdEdhcHMsTz1lLmJhc2VUb2xlcmFuY2UsRD1lLnNoYXBlLFI9ImxpbmVhciI9PT1ELEY9ZS5maWxsJiYibm9uZSIhPT1lLmZpbGwsQj1bXSxOPWYubWluVG9sZXJhbmNlLGo9dC5sZW5ndGgsVT1uZXcgQXJyYXkoaiksVj0wO2Z1bmN0aW9uIHEocil7dmFyIG49dFtyXTtpZighbilyZXR1cm4hMTt2YXIgYT1lLmxpbmVhcml6ZWQ/Uy5sMnAobi54KTpTLmMycChuLngpLGw9ZS5saW5lYXJpemVkP0UubDJwKG4ueSk6RS5jMnAobi55KTtpZihhPT09aSl7aWYoQyYmKGE9Uy5jMnAobi54LCEwKSksYT09PWkpcmV0dXJuITE7TCYmbD09PWkmJihhKj1NYXRoLmFicyhTLl9tKlAqKFMuX20+MD9vOnMpLyhFLl9tKkkqKEUuX20+MD9vOnMpKSkpLGEqPTFlM31pZihsPT09aSl7aWYoTCYmKGw9RS5jMnAobi55LCEwKSksbD09PWkpcmV0dXJuITE7bCo9MWUzfXJldHVyblthLGxdfWZ1bmN0aW9uIEgodCxlLHIsbil7dmFyIGk9ci10LGE9bi1lLG89LjUtdCxzPS41LWUsbD1pKmkrYSphLGM9aSpvK2EqcztpZihjPjAmJmM8bCl7dmFyIHU9byphLXMqaTtpZih1KnU8bClyZXR1cm4hMH19ZnVuY3Rpb24gRyh0LGUpe3ZhciByPXRbMF0vSSxuPXRbMV0vUCxpPU1hdGgubWF4KDAsLXIsci0xLC1uLG4tMSk7cmV0dXJuIGkmJnZvaWQgMCE9PU0mJkgocixuLE0sQSkmJihpPTApLGkmJmUmJkgocixuLGVbMF0vSSxlWzFdL1ApJiYoaT0wKSwoMStmLnRvbGVyYW5jZUdyb3d0aCppKSpPfWZ1bmN0aW9uIFkodCxlKXt2YXIgcj10WzBdLWVbMF0sbj10WzFdLWVbMV07cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX12YXIgVyxYLFosSixLLFEsJCx0dD1mLm1heFNjcmVlbnNBd2F5LGV0PS1JKnR0LHJ0PUkqKDErdHQpLG50PS1QKnR0LGl0PVAqKDErdHQpLGF0PVtbZXQsbnQscnQsbnRdLFtydCxudCxydCxpdF0sW3J0LGl0LGV0LGl0XSxbZXQsaXQsZXQsbnRdXTtmdW5jdGlvbiBvdCh0KXtpZih0WzBdPGV0fHx0WzBdPnJ0fHx0WzFdPG50fHx0WzFdPml0KXJldHVyblt1KHRbMF0sZXQscnQpLHUodFsxXSxudCxpdCldfWZ1bmN0aW9uIHN0KHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiYodFswXT09PWV0fHx0WzBdPT09cnQpfHwodFsxXT09PWVbMV0mJih0WzFdPT09bnR8fHRbMV09PT1pdCl8fHZvaWQgMCl9ZnVuY3Rpb24gbHQodCxlLHIpe3JldHVybiBmdW5jdGlvbihuLGkpe3ZhciBhPW90KG4pLG89b3QoaSkscz1bXTtpZihhJiZvJiZzdChhLG8pKXJldHVybiBzO2EmJnMucHVzaChhKSxvJiZzLnB1c2gobyk7dmFyIGM9MipsLmNvbnN0cmFpbigoblt0XStpW3RdKS8yLGUsciktKChhfHxuKVt0XSsob3x8aSlbdF0pO2MmJigoYSYmbz9jPjA9PWFbdF0+b1t0XT9hOm86YXx8bylbdF0rPWMpO3JldHVybiBzfX1mdW5jdGlvbiBjdCh0KXt2YXIgZT10WzBdLHI9dFsxXSxuPWU9PT1VW1YtMV1bMF0saT1yPT09VVtWLTFdWzFdO2lmKCFufHwhaSlpZihWPjEpe3ZhciBhPWU9PT1VW1YtMl1bMF0sbz1yPT09VVtWLTJdWzFdO24mJihlPT09ZXR8fGU9PT1ydCkmJmE/bz9WLS06VVtWLTFdPXQ6aSYmKHI9PT1udHx8cj09PWl0KSYmbz9hP1YtLTpVW1YtMV09dDpVW1YrK109dH1lbHNlIFVbVisrXT10fWZ1bmN0aW9uIHV0KHQpe1VbVi0xXVswXSE9PXRbMF0mJlVbVi0xXVsxXSE9PXRbMV0mJmN0KFtaLEpdKSxjdCh0KSxLPW51bGwsWj1KPTB9ZnVuY3Rpb24gZnQodCl7aWYoTT10WzBdL0ksQT10WzFdL1AsVz10WzBdPGV0P2V0OnRbMF0+cnQ/cnQ6MCxYPXRbMV08bnQ/bnQ6dFsxXT5pdD9pdDowLFd8fFgpe2lmKFYpaWYoSyl7dmFyIGU9JChLLHQpO2UubGVuZ3RoPjEmJih1dChlWzBdKSxVW1YrK109ZVsxXSl9ZWxzZSBRPSQoVVtWLTFdLHQpWzBdLFVbVisrXT1RO2Vsc2UgVVtWKytdPVtXfHx0WzBdLFh8fHRbMV1dO3ZhciByPVVbVi0xXTtXJiZYJiYoclswXSE9PVd8fHJbMV0hPT1YKT8oSyYmKFohPT1XJiZKIT09WD9jdChaJiZKPyhuPUssYT0oaT10KVswXS1uWzBdLG89KGlbMV0tblsxXSkvYSwoblsxXSppWzBdLWlbMV0qblswXSkvYT4wP1tvPjA/ZXQ6cnQsaXRdOltvPjA/cnQ6ZXQsbnRdKTpbWnx8VyxKfHxYXSk6WiYmSiYmY3QoW1osSl0pKSxjdChbVyxYXSkpOlotVyYmSi1YJiZjdChbV3x8WixYfHxKXSksSz10LFo9VyxKPVh9ZWxzZSBLJiZ1dCgkKEssdClbMF0pLFVbVisrXT10O3ZhciBuLGksYSxvfWZvcigibGluZWFyIj09PUR8fCJzcGxpbmUiPT09RD8kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MCxpPTA7aTw0O2krKyl7dmFyIGE9YXRbaV0sbz1jKHRbMF0sdFsxXSxlWzBdLGVbMV0sYVswXSxhWzFdLGFbMl0sYVszXSk7byYmKCFufHxNYXRoLmFicyhvLngtclswXVswXSk+MXx8TWF0aC5hYnMoby55LXJbMF1bMV0pPjEpJiYobz1bby54LG8ueV0sbiYmWShvLHQpPFkoclswXSx0KT9yLnVuc2hpZnQobyk6ci5wdXNoKG8pLG4rKyl9cmV0dXJuIHJ9OiJodiI9PT1EfHwidmgiPT09RD8kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj1vdCh0KSxpPW90KGUpO3JldHVybiBuJiZpJiZzdChuLGkpfHwobiYmci5wdXNoKG4pLGkmJnIucHVzaChpKSkscn06Imh2aCI9PT1EPyQ9bHQoMCxldCxydCk6InZodiI9PT1EJiYoJD1sdCgxLG50LGl0KSkscj0wO3I8ajtyKyspaWYobj1xKHIpKXtmb3IoVj0wLEs9bnVsbCxmdChuKSxyKys7cjxqO3IrKyl7aWYoIShoPXEocikpKXtpZih6KWNvbnRpbnVlO2JyZWFrfWlmKFImJmUuc2ltcGxpZnkpe3ZhciBodD1xKHIrMSk7aWYoeT1ZKGgsbiksRiYmKDA9PT1WfHxWPT09ai0xKXx8ISh5PEcoaCxodCkqTikpe2ZvcihtPVsoaFswXS1uWzBdKS95LChoWzFdLW5bMV0pL3ldLHA9bix4PXksYj13PVQ9MCxnPSExLGE9aCxyKys7cjx0Lmxlbmd0aDtyKyspe2lmKGQ9aHQsaHQ9cShyKzEpLCFkKXtpZih6KWNvbnRpbnVlO2JyZWFrfWlmKGs9KHY9W2RbMF0tblswXSxkWzFdLW5bMV1dKVswXSptWzFdLXZbMV0qbVswXSx3PU1hdGgubWluKHcsayksKFQ9TWF0aC5tYXgoVCxrKSktdz5HKGQsaHQpKWJyZWFrO2E9ZCwoXz12WzBdKm1bMF0rdlsxXSptWzFdKT54Pyh4PV8saD1kLGc9ITEpOl88YiYmKGI9XyxwPWQsZz0hMCl9aWYoZz8oZnQoaCksYSE9PXAmJmZ0KHApKToocCE9PW4mJmZ0KHApLGEhPT1oJiZmdChoKSksZnQoYSkscj49dC5sZW5ndGh8fCFkKWJyZWFrO2Z0KGQpLG49ZH19ZWxzZSBmdChoKX1LJiZjdChbWnx8S1swXSxKfHxLWzFdXSksQi5wdXNoKFUuc2xpY2UoMCxWKSl9cmV0dXJuIEJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vbGliIjo3NzgsIi4vY29uc3RhbnRzIjoxMTkxfV0sMTIwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJzcGxpbmUiPT09cigibGluZS5zaGFwZSIpJiZyKCJsaW5lLnNtb290aGluZyIpfX0se31dLDEyMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e3RvbmV4dHg6MSx0b25leHR5OjEsdG9uZXh0OjF9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHMsbCxjPXt9LHU9ITEsZj0tMSxoPTAscD0tMTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKShvPShpPXJbYV1bMF0udHJhY2UpLnN0YWNrZ3JvdXB8fCIiKT9vIGluIGM/bD1jW29dOihsPWNbb109aCxoKyspOmkuZmlsbCBpbiBuJiZwPj0wP2w9cDoobD1wPWgsaCsrKSxsPGYmJih1PSEwKSxpLl9ncm91cEluZGV4PWY9bDt2YXIgZD1yLnNsaWNlKCk7dSYmZC5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXRbMF0udHJhY2Usbj1lWzBdLnRyYWNlO3JldHVybiByLl9ncm91cEluZGV4LW4uX2dyb3VwSW5kZXh8fHIuaW5kZXgtbi5pbmRleH0pKTt2YXIgZz17fTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKW89KGk9ZFthXVswXS50cmFjZSkuc3RhY2tncm91cHx8IiIsITA9PT1pLnZpc2libGU/KGkuX25leHR0cmFjZT1udWxsLGkuZmlsbCBpbiBuJiYocz1nW29dLGkuX3ByZXZ0cmFjZT1zfHxudWxsLHMmJihzLl9uZXh0dHJhY2U9aSkpLGkuX293bmZpbGw9aS5maWxsJiYoInRvemVybyI9PT1pLmZpbGwuc3Vic3RyKDAsNil8fCJ0b3NlbGYiPT09aS5maWxsfHwidG8iPT09aS5maWxsLnN1YnN0cigwLDIpJiYhaS5fcHJldnRyYWNlKSxnW29dPWkpOmkuX3ByZXZ0cmFjZT1pLl9uZXh0dHJhY2U9aS5fb3duZmlsbD1udWxsO3JldHVybiBkfX0se31dLDEyMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXJrZXIscj1lLnNpemVyZWZ8fDEsaT1lLnNpemVtaW58fDAsYT0iYXJlYSI9PT1lLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodC9yKX06ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWEodC8yKTtyZXR1cm4gbihlKSYmZT4wP01hdGgubWF4KGUsaSk6MH19fSx7ImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMjA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y29udGFpbmVyOiJtYXJrZXIiLG1pbjoiY21pbiIsbWF4OiJjbWF4In19LHt9XSwxMjA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwsYyl7dmFyIHU9by5pc0J1YmJsZSh0KSxmPSh0LmxpbmV8fHt9KS5jb2xvcjsoYz1jfHx7fSxmJiYocj1mKSxsKCJtYXJrZXIuc3ltYm9sIiksbCgibWFya2VyLm9wYWNpdHkiLHU/Ljc6MSksbCgibWFya2VyLnNpemUiKSxsKCJtYXJrZXIuY29sb3IiLHIpLGkodCwibWFya2VyIikmJmEodCxlLHMsbCx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLGMubm9TZWxlY3R8fChsKCJzZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxsKCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvciIpLGwoInNlbGVjdGVkLm1hcmtlci5zaXplIiksbCgidW5zZWxlY3RlZC5tYXJrZXIuc2l6ZSIpKSxjLm5vTGluZXx8KGwoIm1hcmtlci5saW5lLmNvbG9yIixmJiYhQXJyYXkuaXNBcnJheShmKSYmZS5tYXJrZXIuY29sb3IhPT1mP2Y6dT9uLmJhY2tncm91bmQ6bi5kZWZhdWx0TGluZSksaSh0LCJtYXJrZXIubGluZSIpJiZhKHQsZSxzLGwse3ByZWZpeDoibWFya2VyLmxpbmUuIixjTGV0dGVyOiJjIn0pLGwoIm1hcmtlci5saW5lLndpZHRoIix1PzE6MCkpLHUmJihsKCJtYXJrZXIuc2l6ZXJlZiIpLGwoIm1hcmtlci5zaXplbWluIiksbCgibWFya2VyLnNpemVtb2RlIikpLGMuZ3JhZGllbnQpJiYoIm5vbmUiIT09bCgibWFya2VyLmdyYWRpZW50LnR5cGUiKSYmbCgibWFya2VyLmdyYWRpZW50LmNvbG9yIikpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjUzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjU0LCIuL3N1YnR5cGVzIjoxMjEyfV0sMTIwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5kYXRlVGljazAsaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuT05FV0VFSztmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG4oZSx0JWk9PTA/MTowKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtpZihpfHwoaT17eDohMCx5OiEwfSksaS54KXt2YXIgbz1uKCJ4cGVyaW9kIik7byYmKG4oInhwZXJpb2QwIixhKG8sZS54Y2FsZW5kYXIpKSxuKCJ4cGVyaW9kYWxpZ25tZW50IikpfWlmKGkueSl7dmFyIHM9bigieXBlcmlvZCIpO3MmJihuKCJ5cGVyaW9kMCIsYShzLGUueWNhbGVuZGFyKSksbigieXBlcmlvZGFsaWdubWVudCIpKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vbGliIjo3Nzh9XSwxMjA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz1hLmVuc3VyZVNpbmdsZSxzPWEuaWRlbnRpdHksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4vc3VidHlwZXMiKSx1PXQoIi4vbGluZV9wb2ludHMiKSxmPXQoIi4vbGlua190cmFjZXMiKSxoPXQoIi4uLy4uL2xpYi9wb2x5Z29uIikudGVzdGVyO2Z1bmN0aW9uIHAodCxlLHIsZixwLGQsZyl7dmFyIG07IWZ1bmN0aW9uKHQsZSxyLGksbyl7dmFyIHM9ci54YXhpcyxsPXIueWF4aXMsdT1uLmV4dGVudChhLnNpbXBsZU1hcChzLnJhbmdlLHMucjJjKSksZj1uLmV4dGVudChhLnNpbXBsZU1hcChsLnJhbmdlLGwucjJjKSksaD1pWzBdLnRyYWNlO2lmKCFjLmhhc01hcmtlcnMoaCkpcmV0dXJuO3ZhciBwPWgubWFya2VyLm1heGRpc3BsYXllZDtpZigwPT09cClyZXR1cm47dmFyIGQ9aS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng+PXVbMF0mJnQueDw9dVsxXSYmdC55Pj1mWzBdJiZ0Lnk8PWZbMV19KSksZz1NYXRoLmNlaWwoZC5sZW5ndGgvcCksbT0wO28uZm9yRWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj10WzBdLnRyYWNlO2MuaGFzTWFya2VycyhuKSYmbi5tYXJrZXIubWF4ZGlzcGxheWVkPjAmJnI8ZSYmbSsrfSkpO3ZhciB2PU1hdGgucm91bmQobSpnLzMrTWF0aC5mbG9vcihtLzMpKmcvNy4xKTtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2RlbGV0ZSB0LnZpc30pKSxkLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7MD09PU1hdGgucm91bmQoKGUrdiklZykmJih0LnZpcz0hMCl9KSl9KDAsZSxyLGYscCk7dmFyIHY9ISFnJiZnLmR1cmF0aW9uPjA7ZnVuY3Rpb24geSh0KXtyZXR1cm4gdj90LnRyYW5zaXRpb24oKTp0fXZhciB4PXIueGF4aXMsYj1yLnlheGlzLF89ZlswXS50cmFjZSx3PV8ubGluZSxUPW4uc2VsZWN0KGQpLGs9byhULCJnIiwiZXJyb3JiYXJzIiksTT1vKFQsImciLCJsaW5lcyIpLEE9byhULCJnIiwicG9pbnRzIiksUz1vKFQsImciLCJ0ZXh0Iik7aWYoaS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInBsb3QiKSh0LGsscixnKSwhMD09PV8udmlzaWJsZSl7dmFyIEUsQzt5KFQpLnN0eWxlKCJvcGFjaXR5IixfLm9wYWNpdHkpO3ZhciBMPV8uZmlsbC5jaGFyQXQoXy5maWxsLmxlbmd0aC0xKTsieCIhPT1MJiYieSIhPT1MJiYoTD0iIiksZlswXVtyLmlzUmFuZ2VQbG90PyJub2RlUmFuZ2VQbG90MyI6Im5vZGUzIl09VDt2YXIgSSxQLHo9IiIsTz1bXSxEPV8uX3ByZXZ0cmFjZTtEJiYoej1ELl9wcmV2UmV2cGF0aHx8IiIsQz1ELl9uZXh0RmlsbCxPPUQuX3BvbHlnb25zKTt2YXIgUixGLEIsTixqLFUsVixxPSIiLEg9IiIsRz1bXSxZPWEubm9vcDtpZihFPV8uX293bkZpbGwsYy5oYXNMaW5lcyhfKXx8Im5vbmUiIT09Xy5maWxsKXtmb3IoQyYmQy5kYXR1bShmKSwtMSE9PVsiaHYiLCJ2aCIsImh2aCIsInZodiJdLmluZGV4T2Yody5zaGFwZSk/KFI9bC5zdGVwcyh3LnNoYXBlKSxGPWwuc3RlcHMody5zaGFwZS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpKSk6Uj1GPSJzcGxpbmUiPT09dy5zaGFwZT9mdW5jdGlvbih0KXt2YXIgZT10W3QubGVuZ3RoLTFdO3JldHVybiB0Lmxlbmd0aD4xJiZ0WzBdWzBdPT09ZVswXSYmdFswXVsxXT09PWVbMV0/bC5zbW9vdGhjbG9zZWQodC5zbGljZSgxKSx3LnNtb290aGluZyk6bC5zbW9vdGhvcGVuKHQsdy5zbW9vdGhpbmcpfTpmdW5jdGlvbih0KXtyZXR1cm4iTSIrdC5qb2luKCJMIil9LEI9ZnVuY3Rpb24odCl7cmV0dXJuIEYodC5yZXZlcnNlKCkpfSxHPXUoZix7eGF4aXM6eCx5YXhpczpiLGNvbm5lY3RHYXBzOl8uY29ubmVjdGdhcHMsYmFzZVRvbGVyYW5jZTpNYXRoLm1heCh3LndpZHRofHwxLDMpLzQsc2hhcGU6dy5zaGFwZSxzaW1wbGlmeTp3LnNpbXBsaWZ5LGZpbGw6Xy5maWxsfSksVj1fLl9wb2x5Z29ucz1uZXcgQXJyYXkoRy5sZW5ndGgpLG09MDttPEcubGVuZ3RoO20rKylfLl9wb2x5Z29uc1ttXT1oKEdbbV0pO0cubGVuZ3RoJiYoTj1HWzBdWzBdLFU9KGo9R1tHLmxlbmd0aC0xXSlbai5sZW5ndGgtMV0pLFk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEk9UihlKSxQPUIoZSkscT9MPyhxKz0iTCIrSS5zdWJzdHIoMSksSD1QKyJMIitILnN1YnN0cigxKSk6KHErPSJaIitJLEg9UCsiWiIrSCk6KHE9SSxIPVApLGMuaGFzTGluZXMoXykmJmUubGVuZ3RoPjEpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHIuZGF0dW0oZiksdCl5KHIuc3R5bGUoIm9wYWNpdHkiLDApLmF0dHIoImQiLEkpLmNhbGwobC5saW5lR3JvdXBTdHlsZSkpLnN0eWxlKCJvcGFjaXR5IiwxKTtlbHNle3ZhciBpPXkocik7aS5hdHRyKCJkIixJKSxsLnNpbmdsZUxpbmVTdHlsZShmLGkpfX19fX12YXIgVz1NLnNlbGVjdEFsbCgiLmpzLWxpbmUiKS5kYXRhKEcpO3koVy5leGl0KCkpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxXLmVhY2goWSghMSkpLFcuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jYWxsKGwubGluZUdyb3VwU3R5bGUpLmVhY2goWSghMCkpLGwuc2V0Q2xpcFVybChXLHIubGF5ZXJDbGlwSWQsdCksRy5sZW5ndGg/KEU/KEUuZGF0dW0oZiksTiYmVSYmKEw/KCJ5Ij09PUw/TlsxXT1VWzFdPWIuYzJwKDAsITApOiJ4Ij09PUwmJihOWzBdPVVbMF09eC5jMnAoMCwhMCkpLHkoRSkuYXR0cigiZCIsIk0iK1UrIkwiK04rIkwiK3Euc3Vic3RyKDEpKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKSk6eShFKS5hdHRyKCJkIixxKyJaIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSkpKTpDJiYoInRvbmV4dCI9PT1fLmZpbGwuc3Vic3RyKDAsNikmJnEmJno/KCJ0b25leHQiPT09Xy5maWxsP3koQykuYXR0cigiZCIscSsiWiIreisiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpOnkoQykuYXR0cigiZCIscSsiTCIrei5zdWJzdHIoMSkrIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKSxfLl9wb2x5Z29ucz1fLl9wb2x5Z29ucy5jb25jYXQoTykpOihaKEMpLF8uX3BvbHlnb25zPW51bGwpKSxfLl9wcmV2UmV2cGF0aD1ILF8uX3ByZXZQb2x5Z29ucz1WKTooRT9aKEUpOkMmJlooQyksXy5fcG9seWdvbnM9Xy5fcHJldlJldnBhdGg9Xy5fcHJldlBvbHlnb25zPW51bGwpLEEuZGF0dW0oZiksUy5kYXR1bShmKSxmdW5jdGlvbihlLGksYSl7dmFyIG8sdT1hWzBdLnRyYWNlLGY9Yy5oYXNNYXJrZXJzKHUpLGg9Yy5oYXNUZXh0KHUpLHA9dHQodSksZD1ldCxnPWV0O2lmKGZ8fGgpe3ZhciBtPXMsXz11LnN0YWNrZ3JvdXAsdz1fJiYiaW5mZXIgemVybyI9PT10Ll9mdWxsTGF5b3V0Ll9zY2F0dGVyU3RhY2tPcHRzW3guX2lkK2IuX2lkXVtfXS5zdGFja2dhcHM7dS5tYXJrZXIubWF4ZGlzcGxheWVkfHx1Ll9uZWVkc0N1bGw/bT13P0s6SjpfJiYhdyYmKG09USksZiYmKGQ9bSksaCYmKGc9bSl9dmFyIFQsaz0obz1lLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLmRhdGEoZCxwKSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJwb2ludCIsITApO3YmJmsuY2FsbChsLnBvaW50U3R5bGUsdSx0KS5jYWxsKGwudHJhbnNsYXRlUG9pbnRzLHgsYikuc3R5bGUoIm9wYWNpdHkiLDApLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSksby5vcmRlcigpLGYmJihUPWwubWFrZVBvaW50U3R5bGVGbnModSkpLG8uZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9bi5zZWxlY3QodGhpcyksYT15KGkpO2wudHJhbnNsYXRlUG9pbnQoZSxhLHgsYik/KGwuc2luZ2xlUG9pbnRTdHlsZShlLGEsdSxULHQpLHIubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KGUsYSx4LGIsdS54Y2FsZW5kYXIsdS55Y2FsZW5kYXIpLHUuY3VzdG9tZGF0YSYmaS5jbGFzc2VkKCJwbG90bHktY3VzdG9tZGF0YSIsbnVsbCE9PWUuZGF0YSYmdm9pZCAwIT09ZS5kYXRhKSk6YS5yZW1vdmUoKX0pKSx2P28uZXhpdCgpLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk6by5leGl0KCkucmVtb3ZlKCksKG89aS5zZWxlY3RBbGwoImciKS5kYXRhKGcscCkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidGV4dHBvaW50IiwhMCkuYXBwZW5kKCJ0ZXh0Iiksby5vcmRlcigpLG8uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcyksaT15KGUuc2VsZWN0KCJ0ZXh0IikpO2wudHJhbnNsYXRlUG9pbnQodCxpLHgsYik/ci5sYXllckNsaXBJZCYmbC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodCxlLHgsYix1LnhjYWxlbmRhcix1LnljYWxlbmRhcik6ZS5yZW1vdmUoKX0pKSxvLnNlbGVjdEFsbCgidGV4dCIpLmNhbGwobC50ZXh0UG9pbnRTdHlsZSx1LHQpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXguYzJwKHQueCkscj1iLmMycCh0LnkpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLmVhY2goKGZ1bmN0aW9uKCl7eShuLnNlbGVjdCh0aGlzKSkuYXR0cih7eDplLHk6cn0pfSkpfSkpLG8uZXhpdCgpLnJlbW92ZSgpfShBLFMsZik7dmFyIFg9ITE9PT1fLmNsaXBvbmF4aXM/bnVsbDpyLmxheWVyQ2xpcElkO2wuc2V0Q2xpcFVybChBLFgsdCksbC5zZXRDbGlwVXJsKFMsWCx0KX1mdW5jdGlvbiBaKHQpe3kodCkuYXR0cigiZCIsIk0wLDBaIil9ZnVuY3Rpb24gSih0KXtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LmdhcCYmdC52aXN9KSl9ZnVuY3Rpb24gSyh0KXtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc30pKX1mdW5jdGlvbiBRKHQpe3JldHVybiB0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIXQuZ2FwfSkpfWZ1bmN0aW9uICQodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gdHQodCl7aWYodC5pZHMpcmV0dXJuICR9ZnVuY3Rpb24gZXQoKXtyZXR1cm4hMX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSxjKXt2YXIgdSxoLGQ9IWEsZz0hIWEmJmEuZHVyYXRpb24+MCxtPWYodCxlLHIpOygodT1pLnNlbGVjdEFsbCgiZy50cmFjZSIpLmRhdGEobSwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSkpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYWNlIHNjYXR0ZXIgdHJhY2UiK3RbMF0udHJhY2UudWlkfSkpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMiksdS5vcmRlcigpLGZ1bmN0aW9uKHQsZSxyKXtlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBpPW8obi5zZWxlY3QodGhpcyksImciLCJmaWxscyIpO2wuc2V0Q2xpcFVybChpLHIubGF5ZXJDbGlwSWQsdCk7dmFyIGE9ZVswXS50cmFjZSxjPVtdO2EuX293bmZpbGwmJmMucHVzaCgiX293bkZpbGwiKSxhLl9uZXh0dHJhY2UmJmMucHVzaCgiX25leHRGaWxsIik7dmFyIHU9aS5zZWxlY3RBbGwoImciKS5kYXRhKGMscyk7dS5lbnRlcigpLmFwcGVuZCgiZyIpLHUuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKHQpe2FbdF09bnVsbH0pKS5yZW1vdmUoKSx1Lm9yZGVyKCkuZWFjaCgoZnVuY3Rpb24odCl7YVt0XT1vKG4uc2VsZWN0KHRoaXMpLCJwYXRoIiwianMtZmlsbCIpfSkpfSkpfSh0LHUsZSksZyk/KGMmJihoPWMoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS5kdXJhdGlvbikuZWFzZShhLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtoJiZoKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtoJiZoKCl9KSkuZWFjaCgoZnVuY3Rpb24oKXtpLnNlbGVjdEFsbCgiZy50cmFjZSIpLmVhY2goKGZ1bmN0aW9uKHIsbil7cCh0LG4sZSxyLG0sdGhpcyxhKX0pKX0pKSk6dS5lYWNoKChmdW5jdGlvbihyLG4pe3AodCxuLGUscixtLHRoaXMsYSl9KSk7ZCYmdS5leGl0KCkucmVtb3ZlKCksaS5zZWxlY3RBbGwoInBhdGg6bm90KFtkXSkiKS5yZW1vdmUoKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvcG9seWdvbiI6NzkwLCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuL2xpbmVfcG9pbnRzIjoxMjAxLCIuL2xpbmtfdHJhY2VzIjoxMjAzLCIuL3N1YnR5cGVzIjoxMjEyLGQzOjE2OX1dLDEyMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHM9dC5jZCxsPXQueGF4aXMsYz10LnlheGlzLHU9W10sZj1zWzBdLnRyYWNlO2lmKCFuLmhhc01hcmtlcnMoZikmJiFuLmhhc1RleHQoZikpcmV0dXJuW107aWYoITE9PT1lKWZvcihyPTA7cjxzLmxlbmd0aDtyKyspc1tyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylpPXNbcl0sYT1sLmMycChpLngpLG89Yy5jMnAoaS55KSxudWxsIT09aS5pJiZlLmNvbnRhaW5zKFthLG9dLCExLHIsdCk/KHUucHVzaCh7cG9pbnROdW1iZXI6aS5pLHg6bC5jMmQoaS54KSx5OmMuYzJkKGkueSl9KSxpLnNlbGVjdGVkPTEpOmkuc2VsZWN0ZWQ9MDtyZXR1cm4gdX19LHsiLi9zdWJ0eXBlcyI6MTIxMn1dLDEyMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49WyJvcmllbnRhdGlvbiIsImdyb3Vwbm9ybSIsInN0YWNrZ2FwcyJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1yLl9zY2F0dGVyU3RhY2tPcHRzLG89aSgic3RhY2tncm91cCIpO2lmKG8pe3ZhciBzPWUueGF4aXMrZS55YXhpcyxsPWFbc107bHx8KGw9YVtzXT17fSk7dmFyIGM9bFtvXSx1PSExO2M/Yy50cmFjZXMucHVzaChlKTooYz1sW29dPXt0cmFjZUluZGljZXM6W10sdHJhY2VzOltlXX0sdT0hMCk7Zm9yKHZhciBmPXtvcmllbnRhdGlvbjplLngmJiFlLnk/ImgiOiJ2In0saD0wO2g8bi5sZW5ndGg7aCsrKXt2YXIgcD1uW2hdLGQ9cCsiRm91bmQiO2lmKCFjW2RdKXt2YXIgZz12b2lkIDAhPT10W3BdLG09Im9yaWVudGF0aW9uIj09PXA7aWYoKGd8fHUpJiYoY1twXT1pKHAsZltwXSksbSYmKGMuZmlsbERmbHQ9ImgiPT09Y1twXT8idG9uZXh0eCI6InRvbmV4dHkiKSxnJiYoY1tkXT0hMCwhdSYmKGRlbGV0ZSBjLnRyYWNlc1swXVtwXSxtKSkpKWZvcih2YXIgdj0wO3Y8Yy50cmFjZXMubGVuZ3RoLTE7disrKXt2YXIgeT1jLnRyYWNlc1t2XTt5Ll9pbnB1dC5maWxsIT09eS5maWxsJiYoeS5maWxsPWMuZmlsbERmbHQpfX19cmV0dXJuIGN9fX0se31dLDEyMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBvKHQsZSxyKXtpLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxlLHIpfWZ1bmN0aW9uIHModCxlLHIpe2kudGV4dFBvaW50U3R5bGUodC5zZWxlY3RBbGwoInRleHQiKSxlLHIpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLnRyYWNlLnNjYXR0ZXIiKTtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxlLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKChmdW5jdGlvbihlKXtvKG4uc2VsZWN0KHRoaXMpLGUudHJhY2V8fGVbMF0udHJhY2UsdCl9KSksZS5zZWxlY3RBbGwoImcudGV4dCIpLmVhY2goKGZ1bmN0aW9uKGUpe3Mobi5zZWxlY3QodGhpcyksZS50cmFjZXx8ZVswXS50cmFjZSx0KX0pKSxlLnNlbGVjdEFsbCgiZy50cmFjZSBwYXRoLmpzLWxpbmUiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUpLGUuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtZmlsbCIpLmNhbGwoaS5maWxsR3JvdXBTdHlsZSksYS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikoZSl9LHN0eWxlUG9pbnRzOm8sc3R5bGVUZXh0OnMsc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXS50cmFjZTtuLnNlbGVjdGVkcG9pbnRzPyhpLnNlbGVjdGVkUG9pbnRTdHlsZShyLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLG4pLGkuc2VsZWN0ZWRUZXh0U3R5bGUoci5zZWxlY3RBbGwoInRleHQiKSxuKSk6KG8ocixuLHQpLHMocixuLHQpKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjY1LCIuLi8uLi9yZWdpc3RyeSI6OTExLGQzOjE2OX1dLDEyMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPXtoYXNMaW5lczpmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlJiZ0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoImxpbmVzIil9LGhhc01hcmtlcnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmKHQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZigibWFya2VycyIpfHwic3Bsb20iPT09dC50eXBlKX0saGFzVGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlJiZ0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoInRleHQiKX0saXNCdWJibGU6ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0Lm1hcmtlcikmJm4uaXNBcnJheU9yVHlwZWRBcnJheSh0Lm1hcmtlci5zaXplKX19fSx7Ii4uLy4uL2xpYiI6Nzc4fV0sMTIxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhKXthPWF8fHt9LGkoInRleHRwb3NpdGlvbiIpLG4uY29lcmNlRm9udChpLCJ0ZXh0Zm9udCIsci5mb250KSxhLm5vU2VsZWN0fHwoaSgic2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxpKCJ1bnNlbGVjdGVkLnRleHRmb250LmNvbG9yIikpfX0seyIuLi8uLi9saWIiOjc3OH1dLDEyMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzPWEoIngiKSxsPWEoInkiKTtpZihpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0scikscyl7dmFyIGM9bi5taW5Sb3dMZW5ndGgocyk7bD9vPU1hdGgubWluKGMsbi5taW5Sb3dMZW5ndGgobCkpOihvPWMsYSgieTAiKSxhKCJkeSIpKX1lbHNle2lmKCFsKXJldHVybiAwO289bi5taW5Sb3dMZW5ndGgobCksYSgieDAiKSxhKCJkeCIpfXJldHVybiBlLl9sZW5ndGg9byxvfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcmVnaXN0cnkiOjkxMX1dLDEyMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyIpLGM9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsZj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaD1uLmxpbmUscD1uLm1hcmtlcixkPXAubGluZSxnPXUoe3dpZHRoOmgud2lkdGgsZGFzaDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGwpLGRmbHQ6InNvbGlkIn19LGkoImxpbmUiKSk7dmFyIG09ZS5leHBvcnRzPWYoe3g6bi54LHk6bi55LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx0ZXh0OnUoe30sbi50ZXh0LHt9KSx0ZXh0dGVtcGxhdGU6byh7fSx7fSksaG92ZXJ0ZXh0OnUoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6YSgpLG1vZGU6dSh7fSxuLm1vZGUse2RmbHQ6ImxpbmVzK21hcmtlcnMifSksc3VyZmFjZWF4aXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbLTEsMCwxLDJdLGRmbHQ6LTF9LHN1cmZhY2Vjb2xvcjp7dmFsVHlwZToiY29sb3IifSxwcm9qZWN0aW9uOnt4OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX0seTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxMCxkZmx0OjIvM319LHo6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fX0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxsaW5lOmcsbWFya2VyOnUoe3N5bWJvbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGMpLGRmbHQ6ImNpcmNsZSIsYXJyYXlPazohMH0sc2l6ZTp1KHt9LHAuc2l6ZSx7ZGZsdDo4fSksc2l6ZXJlZjpwLnNpemVyZWYsc2l6ZW1pbjpwLnNpemVtaW4sc2l6ZW1vZGU6cC5zaXplbW9kZSxvcGFjaXR5OnUoe30scC5vcGFjaXR5LHthcnJheU9rOiExfSksY29sb3JiYXI6cC5jb2xvcmJhcixsaW5lOnUoe3dpZHRoOnUoe30sZC53aWR0aCx7YXJyYXlPazohMX0pfSxpKCJtYXJrZXIubGluZSIpKX0saSgibWFya2VyIikpLHRleHRwb3NpdGlvbjp1KHt9LG4udGV4dHBvc2l0aW9uLHtkZmx0OiJ0b3AgY2VudGVyIn0pLHRleHRmb250Ontjb2xvcjpuLnRleHRmb250LmNvbG9yLHNpemU6bi50ZXh0Zm9udC5zaXplLGZhbWlseTp1KHt9LG4udGV4dGZvbnQuZmFtaWx5LHthcnJheU9rOiExfSl9LGhvdmVyaW5mbzp1KHt9LHMuaG92ZXJpbmZvKX0sImNhbGMiLCJuZXN0ZWQiKTttLnguZWRpdFR5cGU9bS55LmVkaXRUeXBlPW0uei5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyJ9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY1MCwiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIjo3NTAsIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjc1MSwiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MTAsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyNCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6OTA2LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExODd9XSwxMjE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVt7eDohMSx5OiExLHRyYWNlOmUsdDp7fX1dO3JldHVybiBuKHIsZSksaSh0LGUpLHJ9fSx7Ii4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMTg2LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE5MH1dLDEyMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBpKHQsZSxyLGkpe2lmKCFlfHwhZS52aXNpYmxlKXJldHVybiBudWxsO2Zvcih2YXIgYT1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwibWFrZUNvbXB1dGVFcnJvciIpKGUpLG89bmV3IEFycmF5KHQubGVuZ3RoKSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPWEoK3Rbc10scyk7aWYoImxvZyI9PT1pLnR5cGUpe3ZhciBjPWkuYzJsKHRbc10pLHU9dFtzXS1sWzBdLGY9dFtzXStsWzFdO2lmKG9bc109WyhpLmMybCh1LCEwKS1jKSpyLChpLmMybChmLCEwKS1jKSpyXSx1PjApe3ZhciBoPWkuYzJsKHUpO2kuX2xvd2VyTG9nRXJyb3JCb3VuZHx8KGkuX2xvd2VyTG9nRXJyb3JCb3VuZD1oKSxpLl9sb3dlckVycm9yQm91bmQ9TWF0aC5taW4oaS5fbG93ZXJMb2dFcnJvckJvdW5kLGgpfX1lbHNlIG9bc109Wy1sWzBdKnIsbFsxXSpyXX1yZXR1cm4gb31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtpKHQueCx0LmVycm9yX3gsZVswXSxyLnhheGlzKSxpKHQueSx0LmVycm9yX3ksZVsxXSxyLnlheGlzKSxpKHQueix0LmVycm9yX3osZVsyXSxyLnpheGlzKV0sYT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdKXJldHVybiB0W2VdLmxlbmd0aDtyZXR1cm4gMH0obik7aWYoMD09PWEpcmV0dXJuIG51bGw7Zm9yKHZhciBvPW5ldyBBcnJheShhKSxzPTA7czxhO3MrKyl7Zm9yKHZhciBsPVtbMCwwLDBdLFswLDAsMF1dLGM9MDtjPDM7YysrKWlmKG5bY10pZm9yKHZhciB1PTA7dTwyO3UrKylsW3VdW2NdPW5bY11bc11bdV07b1tzXT1sfXJldHVybiBvfX0seyIuLi8uLi9yZWdpc3RyeSI6OTExfV0sMTIxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1saW5lM2QiKSxpPXQoImdsLXNjYXR0ZXIzZCIpLGE9dCgiZ2wtZXJyb3IzZCIpLG89dCgiZ2wtbWVzaDNkIikscz10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLGw9dCgiLi4vLi4vbGliIiksYz10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksdT10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikuZm9ybWF0Q29sb3IsZj10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLGg9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIikscD10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIiksZD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLG09dCgiLi9jYWxjX2Vycm9ycyIpO2Z1bmN0aW9uIHYodCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLmxpbmVQbG90PW51bGwsdGhpcy5zY2F0dGVyUGxvdD1udWxsLHRoaXMuZXJyb3JCYXJzPW51bGwsdGhpcy50ZXh0TWFya2Vycz1udWxsLHRoaXMuZGVsYXVuYXlNZXNoPW51bGwsdGhpcy5jb2xvcj1udWxsLHRoaXMubW9kZT0iIix0aGlzLmRhdGFQb2ludHM9W10sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMudGV4dExhYmVscz1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB5PXYucHJvdG90eXBlO2Z1bmN0aW9uIHgodCl7cmV0dXJuIG51bGw9PXQ/MDp0LmluZGV4T2YoImxlZnQiKT4tMT8tMTp0LmluZGV4T2YoInJpZ2h0Iik+LTE/MTowfWZ1bmN0aW9uIGIodCl7cmV0dXJuIG51bGw9PXQ/MDp0LmluZGV4T2YoInRvcCIpPi0xPy0xOnQuaW5kZXhPZigiYm90dG9tIik+LTE/MTowfWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4gZSg0KnQpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIHBbdF19ZnVuY3Rpb24gVCh0LGUscixuLGkpe3ZhciBhPW51bGw7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKXthPVtdO2Zvcih2YXIgbz0wO288ZTtvKyspdm9pZCAwPT09dFtvXT9hW29dPW46YVtvXT1yKHRbb10saSl9ZWxzZSBhPXIodCxsLmlkZW50aXR5KTtyZXR1cm4gYX1mdW5jdGlvbiBrKHQsZSl7dmFyIHIsbixpLGEsbyxzLGg9W10scD10LmZ1bGxTY2VuZUxheW91dCx2PXQuZGF0YVNjYWxlLHk9cC54YXhpcyxrPXAueWF4aXMsTT1wLnpheGlzLEE9ZS5tYXJrZXIsUz1lLmxpbmUsRT1lLnh8fFtdLEM9ZS55fHxbXSxMPWUuenx8W10sST1FLmxlbmd0aCxQPWUueGNhbGVuZGFyLHo9ZS55Y2FsZW5kYXIsTz1lLnpjYWxlbmRhcjtmb3Iobz0wO288STtvKyspcj15LmQybChFW29dLDAsUCkqdlswXSxuPWsuZDJsKENbb10sMCx6KSp2WzFdLGk9TS5kMmwoTFtvXSwwLE8pKnZbMl0saFtvXT1bcixuLGldO2lmKEFycmF5LmlzQXJyYXkoZS50ZXh0KSlzPWUudGV4dDtlbHNlIGlmKHZvaWQgMCE9PWUudGV4dClmb3Iocz1uZXcgQXJyYXkoSSksbz0wO288STtvKyspc1tvXT1lLnRleHQ7ZnVuY3Rpb24gRCh0LGUpe3ZhciByPXBbdF07cmV0dXJuIGQudGlja1RleHQocixyLmQybChlKSwhMCkudGV4dH12YXIgUj1lLnRleHR0ZW1wbGF0ZTtpZihSKXt2YXIgRj10LmZ1bGxMYXlvdXQuX2QzbG9jYWxlLEI9QXJyYXkuaXNBcnJheShSKSxOPUI/TWF0aC5taW4oUi5sZW5ndGgsSSk6SSxqPUI/ZnVuY3Rpb24odCl7cmV0dXJuIFJbdF19OmZ1bmN0aW9uKCl7cmV0dXJuIFJ9O2ZvcihzPW5ldyBBcnJheShOKSxvPTA7bzxOO28rKyl7dmFyIFU9e3g6RVtvXSx5OkNbb10sejpMW29dfSxWPXt4TGFiZWw6RCgieGF4aXMiLEVbb10pLHlMYWJlbDpEKCJ5YXhpcyIsQ1tvXSksekxhYmVsOkQoInpheGlzIixMW29dKX0scT17fTtnKHEsZSxvKTt2YXIgSD1lLl9tZXRhfHx7fTtzW29dPWwudGV4dHRlbXBsYXRlU3RyaW5nKGoobyksVixGLHEsVSxIKX19aWYoYT17cG9zaXRpb246aCxtb2RlOmUubW9kZSx0ZXh0OnN9LCJsaW5lImluIGUmJihhLmxpbmVDb2xvcj11KFMsMSxJKSxhLmxpbmVXaWR0aD1TLndpZHRoLGEubGluZURhc2hlcz1TLmRhc2gpLCJtYXJrZXIiaW4gZSl7dmFyIEc9ZihlKTthLnNjYXR0ZXJDb2xvcj11KEEsMSxJKSxhLnNjYXR0ZXJTaXplPVQoQS5zaXplLEksXywyMCxHKSxhLnNjYXR0ZXJNYXJrZXI9VChBLnN5bWJvbCxJLHcsIlx1MjVjZiIpLGEuc2NhdHRlckxpbmVXaWR0aD1BLmxpbmUud2lkdGgsYS5zY2F0dGVyTGluZUNvbG9yPXUoQS5saW5lLDEsSSksYS5zY2F0dGVyQW5nbGU9MH0idGV4dHBvc2l0aW9uImluIGUmJihhLnRleHRPZmZzZXQ9ZnVuY3Rpb24odCl7dmFyIGU9WzAsMF07aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdPVswLDBdLHRbcl0mJihlW3JdWzBdPXgodFtyXSksZVtyXVsxXT1iKHRbcl0pKTtlbHNlIGVbMF09eCh0KSxlWzFdPWIodCk7cmV0dXJuIGV9KGUudGV4dHBvc2l0aW9uKSxhLnRleHRDb2xvcj11KGUudGV4dGZvbnQsMSxJKSxhLnRleHRTaXplPVQoZS50ZXh0Zm9udC5zaXplLEksbC5pZGVudGl0eSwxMiksYS50ZXh0Rm9udD1lLnRleHRmb250LmZhbWlseSxhLnRleHRBbmdsZT0wKTt2YXIgWT1bIngiLCJ5IiwieiJdO2ZvcihhLnByb2plY3Q9WyExLCExLCExXSxhLnByb2plY3RTY2FsZT1bMSwxLDFdLGEucHJvamVjdE9wYWNpdHk9WzEsMSwxXSxvPTA7bzwzOysrbyl7dmFyIFc9ZS5wcm9qZWN0aW9uW1lbb11dOyhhLnByb2plY3Rbb109Vy5zaG93KSYmKGEucHJvamVjdE9wYWNpdHlbb109Vy5vcGFjaXR5LGEucHJvamVjdFNjYWxlW29dPVcuc2NhbGUpfWEuZXJyb3JCb3VuZHM9bShlLHYscCk7dmFyIFg9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVswLDAsMF0scj1bWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLG49WzEsMSwxXSxpPTA7aTwzO2krKyl7dmFyIGE9dFtpXTthJiYhMSE9PWEuY29weV96c3R5bGUmJiExIT09dFsyXS52aXNpYmxlJiYoYT10WzJdKSxhJiZhLnZpc2libGUmJihlW2ldPWEud2lkdGgvMixyW2ldPWMoYS5jb2xvciksbltpXT1hLnRoaWNrbmVzcyl9cmV0dXJue2NhcFNpemU6ZSxjb2xvcjpyLGxpbmVXaWR0aDpufX0oW2UuZXJyb3JfeCxlLmVycm9yX3ksZS5lcnJvcl96XSk7cmV0dXJuIGEuZXJyb3JDb2xvcj1YLmNvbG9yLGEuZXJyb3JMaW5lV2lkdGg9WC5saW5lV2lkdGgsYS5lcnJvckNhcFNpemU9WC5jYXBTaXplLGEuZGVsYXVuYXlBeGlzPWUuc3VyZmFjZWF4aXMsYS5kZWxhdW5heUNvbG9yPWMoZS5zdXJmYWNlY29sb3IpLGF9ZnVuY3Rpb24gTSh0KXtpZihsLmlzQXJyYXlPclR5cGVkQXJyYXkodCkpe3ZhciBlPXRbMF07cmV0dXJuIGwuaXNBcnJheU9yVHlwZWRBcnJheShlKSYmKHQ9ZSksInJnYigiK3Quc2xpY2UoMCwzKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDI1NSp0KX0pKSsiKSJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gbC5pc0FycmF5T3JUeXBlZEFycmF5KHQpPzQ9PT10Lmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiB0WzBdP00odCk6dC5tYXAoTSk6bnVsbH15LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3QmJih0Lm9iamVjdD09PXRoaXMubGluZVBsb3R8fHQub2JqZWN0PT09dGhpcy5kZWxhdW5heU1lc2h8fHQub2JqZWN0PT09dGhpcy50ZXh0TWFya2Vyc3x8dC5vYmplY3Q9PT10aGlzLnNjYXR0ZXJQbG90KSl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXg7cmV0dXJuIHQub2JqZWN0LmhpZ2hsaWdodCYmdC5vYmplY3QuaGlnaGxpZ2h0KG51bGwpLHRoaXMuc2NhdHRlclBsb3QmJih0Lm9iamVjdD10aGlzLnNjYXR0ZXJQbG90LHRoaXMuc2NhdHRlclBsb3QuaGlnaGxpZ2h0KHQuZGF0YSkpLHQudGV4dExhYmVsPSIiLHRoaXMudGV4dExhYmVscyYmKEFycmF5LmlzQXJyYXkodGhpcy50ZXh0TGFiZWxzKT8odGhpcy50ZXh0TGFiZWxzW2VdfHwwPT09dGhpcy50ZXh0TGFiZWxzW2VdKSYmKHQudGV4dExhYmVsPXRoaXMudGV4dExhYmVsc1tlXSk6dC50ZXh0TGFiZWw9dGhpcy50ZXh0TGFiZWxzKSx0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLnhbZV0sdGhpcy5kYXRhLnlbZV0sdGhpcy5kYXRhLnpbZV1dLCEwfX0seS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixsLGMsdT10aGlzLnNjZW5lLmdscGxvdC5nbCxmPWguc29saWQ7dGhpcy5kYXRhPXQ7dmFyIHA9ayh0aGlzLnNjZW5lLHQpOyJtb2RlImluIHAmJih0aGlzLm1vZGU9cC5tb2RlKSwibGluZURhc2hlcyJpbiBwJiZwLmxpbmVEYXNoZXMgaW4gaCYmKGY9aFtwLmxpbmVEYXNoZXNdKSx0aGlzLmNvbG9yPUEocC5zY2F0dGVyQ29sb3IpfHxBKHAubGluZUNvbG9yKSx0aGlzLmRhdGFQb2ludHM9cC5wb3NpdGlvbixlPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAubGluZUNvbG9yLGxpbmVXaWR0aDpwLmxpbmVXaWR0aHx8MSxkYXNoZXM6ZlswXSxkYXNoU2NhbGU6ZlsxXSxvcGFjaXR5OnQub3BhY2l0eSxjb25uZWN0R2Fwczp0LmNvbm5lY3RnYXBzfSwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJsaW5lcyIpP3RoaXMubGluZVBsb3Q/dGhpcy5saW5lUGxvdC51cGRhdGUoZSk6KHRoaXMubGluZVBsb3Q9bihlKSx0aGlzLmxpbmVQbG90Ll90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmxpbmVQbG90KSk6dGhpcy5saW5lUGxvdCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmxpbmVQbG90KSx0aGlzLmxpbmVQbG90LmRpc3Bvc2UoKSx0aGlzLmxpbmVQbG90PW51bGwpO3ZhciBkPXQub3BhY2l0eTtpZih0Lm1hcmtlciYmdC5tYXJrZXIub3BhY2l0eSYmKGQqPXQubWFya2VyLm9wYWNpdHkpLHI9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5zY2F0dGVyQ29sb3Isc2l6ZTpwLnNjYXR0ZXJTaXplLGdseXBoOnAuc2NhdHRlck1hcmtlcixvcGFjaXR5OmQsb3J0aG9ncmFwaGljOiEwLGxpbmVXaWR0aDpwLnNjYXR0ZXJMaW5lV2lkdGgsbGluZUNvbG9yOnAuc2NhdHRlckxpbmVDb2xvcixwcm9qZWN0OnAucHJvamVjdCxwcm9qZWN0U2NhbGU6cC5wcm9qZWN0U2NhbGUscHJvamVjdE9wYWNpdHk6cC5wcm9qZWN0T3BhY2l0eX0sLTEhPT10aGlzLm1vZGUuaW5kZXhPZigibWFya2VycyIpP3RoaXMuc2NhdHRlclBsb3Q/dGhpcy5zY2F0dGVyUGxvdC51cGRhdGUocik6KHRoaXMuc2NhdHRlclBsb3Q9aShyKSx0aGlzLnNjYXR0ZXJQbG90Ll90cmFjZT10aGlzLHRoaXMuc2NhdHRlclBsb3QuaGlnaGxpZ2h0U2NhbGU9MSx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5zY2F0dGVyUGxvdCkpOnRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCksdGhpcy5zY2F0dGVyUGxvdD1udWxsKSxjPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGdseXBoOnAudGV4dCxjb2xvcjpwLnRleHRDb2xvcixzaXplOnAudGV4dFNpemUsYW5nbGU6cC50ZXh0QW5nbGUsYWxpZ25tZW50OnAudGV4dE9mZnNldCxmb250OnAudGV4dEZvbnQsb3J0aG9ncmFwaGljOiEwLGxpbmVXaWR0aDowLHByb2plY3Q6ITEsb3BhY2l0eTp0Lm9wYWNpdHl9LHRoaXMudGV4dExhYmVscz10LmhvdmVydGV4dHx8dC50ZXh0LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoInRleHQiKT90aGlzLnRleHRNYXJrZXJzP3RoaXMudGV4dE1hcmtlcnMudXBkYXRlKGMpOih0aGlzLnRleHRNYXJrZXJzPWkoYyksdGhpcy50ZXh0TWFya2Vycy5fdHJhY2U9dGhpcyx0aGlzLnRleHRNYXJrZXJzLmhpZ2hsaWdodFNjYWxlPTEsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMudGV4dE1hcmtlcnMpKTp0aGlzLnRleHRNYXJrZXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMudGV4dE1hcmtlcnMpLHRoaXMudGV4dE1hcmtlcnMuZGlzcG9zZSgpLHRoaXMudGV4dE1hcmtlcnM9bnVsbCksbD17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixjb2xvcjpwLmVycm9yQ29sb3IsZXJyb3I6cC5lcnJvckJvdW5kcyxsaW5lV2lkdGg6cC5lcnJvckxpbmVXaWR0aCxjYXBTaXplOnAuZXJyb3JDYXBTaXplLG9wYWNpdHk6dC5vcGFjaXR5fSx0aGlzLmVycm9yQmFycz9wLmVycm9yQm91bmRzP3RoaXMuZXJyb3JCYXJzLnVwZGF0ZShsKToodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCksdGhpcy5lcnJvckJhcnM9bnVsbCk6cC5lcnJvckJvdW5kcyYmKHRoaXMuZXJyb3JCYXJzPWEobCksdGhpcy5lcnJvckJhcnMuX3RyYWNlPXRoaXMsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuZXJyb3JCYXJzKSkscC5kZWxhdW5heUF4aXM+PTApe3ZhciBnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPShyKzEpJTMsYT0ocisyKSUzLG89W10sbD1bXTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgYz10W25dOyFpc05hTihjW2ldKSYmaXNGaW5pdGUoY1tpXSkmJiFpc05hTihjW2FdKSYmaXNGaW5pdGUoY1thXSkmJihvLnB1c2goW2NbaV0sY1thXV0pLGwucHVzaChuKSl9dmFyIHU9cyhvKTtmb3Iobj0wO248dS5sZW5ndGg7KytuKWZvcih2YXIgZj11W25dLGg9MDtoPGYubGVuZ3RoOysraClmW2hdPWxbZltoXV07cmV0dXJue3Bvc2l0aW9uczp0LGNlbGxzOnUsbWVzaENvbG9yOmV9fShwLnBvc2l0aW9uLHAuZGVsYXVuYXlDb2xvcixwLmRlbGF1bmF5QXhpcyk7Zy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLmRlbGF1bmF5TWVzaD90aGlzLmRlbGF1bmF5TWVzaC51cGRhdGUoZyk6KGcuZ2w9dSx0aGlzLmRlbGF1bmF5TWVzaD1vKGcpLHRoaXMuZGVsYXVuYXlNZXNoLl90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmRlbGF1bmF5TWVzaCkpfWVsc2UgdGhpcy5kZWxhdW5heU1lc2gmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5kZWxhdW5heU1lc2gpLHRoaXMuZGVsYXVuYXlNZXNoLmRpc3Bvc2UoKSx0aGlzLmRlbGF1bmF5TWVzaD1udWxsKX0seS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5saW5lUGxvdCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmxpbmVQbG90KSx0aGlzLmxpbmVQbG90LmRpc3Bvc2UoKSksdGhpcy5zY2F0dGVyUGxvdCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnNjYXR0ZXJQbG90KSx0aGlzLnNjYXR0ZXJQbG90LmRpc3Bvc2UoKSksdGhpcy5lcnJvckJhcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5lcnJvckJhcnMpLHRoaXMuZXJyb3JCYXJzLmRpc3Bvc2UoKSksdGhpcy50ZXh0TWFya2VycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnRleHRNYXJrZXJzKSx0aGlzLnRleHRNYXJrZXJzLmRpc3Bvc2UoKSksdGhpcy5kZWxhdW5heU1lc2gmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5kZWxhdW5heU1lc2gpLHRoaXMuZGVsYXVuYXlNZXNoLmRpc3Bvc2UoKSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyB2KHQsZS51aWQpO3JldHVybiByLnVwZGF0ZShlKSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3OSwiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIjo3NTAsIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjc1MSwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjc3NCwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTIwNCwiLi9jYWxjX2Vycm9ycyI6MTIxNywiZGVsYXVuYXktdHJpYW5ndWxhdGUiOjE3MSwiZ2wtZXJyb3IzZCI6MjY2LCJnbC1saW5lM2QiOjI3NSwiZ2wtbWVzaDNkIjozMDksImdsLXNjYXR0ZXIzZCI6MzMwfV0sMTIxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBmKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxjLHIsbil9aWYoZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9MCxvPXIoIngiKSxzPXIoInkiKSxsPXIoInoiKTtuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5IiwieiJdLGkpLG8mJnMmJmwmJihhPU1hdGgubWluKG8ubGVuZ3RoLHMubGVuZ3RoLGwubGVuZ3RoKSxlLl9sZW5ndGg9ZS5feGxlbmd0aD1lLl95bGVuZ3RoPWUuX3psZW5ndGg9YSk7cmV0dXJuIGF9KHQsZSxmLHUpKXtmKCJ0ZXh0IiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpLGYoIm1vZGUiKSxhLmhhc0xpbmVzKGUpJiYoZigiY29ubmVjdGdhcHMiKSxzKHQsZSxyLHUsZikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscix1LGYse25vU2VsZWN0OiEwfSksYS5oYXNUZXh0KGUpJiYoZigidGV4dHRlbXBsYXRlIiksbCh0LGUsdSxmLHtub1NlbGVjdDohMH0pKTt2YXIgaD0oZS5saW5lfHx7fSkuY29sb3IscD0oZS5tYXJrZXJ8fHt9KS5jb2xvcjtmKCJzdXJmYWNlYXhpcyIpPj0wJiZmKCJzdXJmYWNlY29sb3IiLGh8fHApO2Zvcih2YXIgZD1bIngiLCJ5IiwieiJdLGc9MDtnPDM7KytnKXt2YXIgbT0icHJvamVjdGlvbi4iK2RbZ107ZihtKyIuc2hvdyIpJiYoZihtKyIub3BhY2l0eSIpLGYobSsiLnNjYWxlIikpfXZhciB2PW4uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO3YodCxlLGh8fHB8fHIse2F4aXM6InoifSksdih0LGUsaHx8cHx8cix7YXhpczoieSIsaW5oZXJpdDoieiJ9KSx2KHQsZSxofHxwfHxyLHtheGlzOiJ4Iixpbmhlcml0OiJ6In0pfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMjAwLCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTIwNiwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxMiwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMjEzLCIuL2F0dHJpYnV0ZXMiOjEyMTV9XSwxMjIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17cGxvdDp0KCIuL2NvbnZlcnQiKSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLG1hcmtlclN5bWJvbHM6dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjpbe2NvbnRhaW5lcjoibWFya2VyIixtaW46ImNtaW4iLG1heDoiY21heCJ9LHtjb250YWluZXI6ImxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In1dLGNhbGM6dCgiLi9jYWxjIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXIzZCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxtZXRhOnt9fX0seyIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo3NTEsIi4uLy4uL3Bsb3RzL2dsM2QiOjg3MCwiLi9hdHRyaWJ1dGVzIjoxMjE1LCIuL2NhbGMiOjEyMTYsIi4vY29udmVydCI6MTIxOCwiLi9kZWZhdWx0cyI6MTIxOX1dLDEyMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9bi5tYXJrZXIsdT1uLmxpbmUsZj1jLmxpbmU7ZS5leHBvcnRzPXtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbW9kZTpsKHt9LG4ubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0Omwoe30sbi50ZXh0LHt9KSx0ZXh0dGVtcGxhdGU6byh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImEiLCJiIiwidGV4dCJdfSksaG92ZXJ0ZXh0Omwoe30sbi5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aCxkYXNoOnUuZGFzaCxzaGFwZTpsKHt9LHUuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOnUuc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsOmwoe30sbi5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il0sZGZsdDoibm9uZSJ9KSxmaWxsY29sb3I6bi5maWxsY29sb3IsbWFya2VyOmwoe3N5bWJvbDpjLnN5bWJvbCxvcGFjaXR5OmMub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6Yy5tYXhkaXNwbGF5ZWQsc2l6ZTpjLnNpemUsc2l6ZXJlZjpjLnNpemVyZWYsc2l6ZW1pbjpjLnNpemVtaW4sc2l6ZW1vZGU6Yy5zaXplbW9kZSxsaW5lOmwoe3dpZHRoOmYud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDpjLmdyYWRpZW50LGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyIikpLHRleHRmb250Om4udGV4dGZvbnQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmwoe30saS5ob3ZlcmluZm8se2ZsYWdzOlsiYSIsImIiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJvbjpuLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTphKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODI0LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDYsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE4N31dLDEyMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksYT10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLG89dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLHM9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsbD10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fY2FycGV0VHJhY2U9bCh0LGUpO2lmKHImJnIudmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09ci52aXNpYmxlKXt2YXIgYztlLnhheGlzPXIueGF4aXMsZS55YXhpcz1yLnlheGlzO3ZhciB1LGYsaD1lLl9sZW5ndGgscD1uZXcgQXJyYXkoaCksZD0hMTtmb3IoYz0wO2M8aDtjKyspaWYodT1lLmFbY10sZj1lLmJbY10sbih1KSYmbihmKSl7dmFyIGc9ci5hYjJ4eSgrdSwrZiwhMCksbT1yLmlzVmlzaWJsZSgrdSwrZik7bXx8KGQ9ITApLHBbY109e3g6Z1swXSx5OmdbMV0sYTp1LGI6Zix2aXM6bX19ZWxzZSBwW2NdPXt4OiExLHk6ITF9O3JldHVybiBlLl9uZWVkc0N1bGw9ZCxwWzBdLmNhcnBldD1yLHBbMF0udHJhY2U9ZSxzKGUsaCksaSh0LGUpLGEocCxlKSxvKHAsZSkscH19fSx7Ii4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjk4MSwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjExODYsIi4uL3NjYXR0ZXIvY2FsYyI6MTE4OCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE4OSwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExOTAsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMjIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGY9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGYscixpKX1wKCJjYXJwZXQiKSxlLnhheGlzPSJ4IixlLnlheGlzPSJ5Ijt2YXIgZD1wKCJhIiksZz1wKCJiIiksbT1NYXRoLm1pbihkLmxlbmd0aCxnLmxlbmd0aCk7aWYobSl7ZS5fbGVuZ3RoPW0scCgidGV4dCIpLHAoInRleHR0ZW1wbGF0ZSIpLHAoImhvdmVydGV4dCIpLHAoIm1vZGUiLG08aS5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixoLHApLGwodCxlLHApLHAoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixoLHAse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiZjKHQsZSxoLHApO3ZhciB2PVtdOyhhLmhhc01hcmtlcnMoZSl8fGEuaGFzVGV4dChlKSkmJihwKCJtYXJrZXIubWF4ZGlzcGxheWVkIiksdi5wdXNoKCJwb2ludHMiKSkscCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKHUodCxlLHIscCksYS5oYXNMaW5lcyhlKXx8bCh0LGUscCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8di5wdXNoKCJmaWxscyIpLCJmaWxscyIhPT1wKCJob3Zlcm9uIix2LmpvaW4oIisiKXx8InBvaW50cyIpJiZwKCJob3ZlcnRlbXBsYXRlIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTE5MSwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExOTUsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTIwMCwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjoxMjAyLCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTIwNiwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxMiwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMjEzLCIuL2F0dHJpYnV0ZXMiOjEyMjF9XSwxMjI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW5baV07cmV0dXJuIHQuYT1hLmEsdC5iPWEuYix0Lnk9YS55LHR9fSx7fV0sMTIyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxuPWUuX2NhcnBldCxpPW4uYWIyaWooW3QuYSx0LmJdKSxhPU1hdGguZmxvb3IoaVswXSksbz1pWzBdLWEscz1NYXRoLmZsb29yKGlbMV0pLGw9aVsxXS1zLGM9bi5ldmFseHkoW10sYSxzLG8sbCk7cmV0dXJuIHIueUxhYmVsPWNbMV0udG9GaXhlZCgzKSxyfX0se31dLDEyMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9ob3ZlciIpLGk9dCgiLi4vLi4vbGliIikuZmlsbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odCxlLHIsYSk7aWYobyYmITEhPT1vWzBdLmluZGV4KXt2YXIgcz1vWzBdO2lmKHZvaWQgMD09PXMuaW5kZXgpe3ZhciBsPTEtcy55MC90LnlhLl9sZW5ndGgsYz10LnhhLl9sZW5ndGgsdT1jKmwvMixmPWMtdTtyZXR1cm4gcy54MD1NYXRoLm1heChNYXRoLm1pbihzLngwLGYpLHUpLHMueDE9TWF0aC5tYXgoTWF0aC5taW4ocy54MSxmKSx1KSxvfXZhciBoPXMuY2Rbcy5pbmRleF07cy5hPWguYSxzLmI9aC5iLHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDA7dmFyIHA9cy50cmFjZSxkPXAuX2NhcnBldCxnPXAuX21vZHVsZS5mb3JtYXRMYWJlbHMoaCxwKTtzLnlMYWJlbD1nLnlMYWJlbCxkZWxldGUgcy50ZXh0O3ZhciBtPVtdO2lmKCFwLmhvdmVydGVtcGxhdGUpe3ZhciB2PShoLmhpfHxwLmhvdmVyaW5mbykuc3BsaXQoIisiKTstMSE9PXYuaW5kZXhPZigiYWxsIikmJih2PVsiYSIsImIiLCJ0ZXh0Il0pLC0xIT09di5pbmRleE9mKCJhIikmJnkoZC5hYXhpcyxoLmEpLC0xIT09di5pbmRleE9mKCJiIikmJnkoZC5iYXhpcyxoLmIpLG0ucHVzaCgieTogIitzLnlMYWJlbCksLTEhPT12LmluZGV4T2YoInRleHQiKSYmaShoLHAsbSkscy5leHRyYVRleHQ9bS5qb2luKCI8YnI+Iil9cmV0dXJuIG99ZnVuY3Rpb24geSh0LGUpe3ZhciByO3I9dC5sYWJlbHByZWZpeCYmdC5sYWJlbHByZWZpeC5sZW5ndGg+MD90LmxhYmVscHJlZml4LnJlcGxhY2UoLyA9ICQvLCIiKTp0Ll9ob3ZlcnRpdGxlLG0ucHVzaChyKyI6ICIrZS50b0ZpeGVkKDMpK3QubGFiZWxzdWZmaXgpfX19LHsiLi4vLi4vbGliIjo3NzgsIi4uL3NjYXR0ZXIvaG92ZXIiOjExOTh9XSwxMjI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vc2NhdHRlci9zZWxlY3QiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJjYXJwZXQiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJzdmciLCJjYXJwZXQiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsImNhcnBldERlcGVuZGVudCIsInpvb21TY2FsZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwNSwiLi4vc2NhdHRlci9zZWxlY3QiOjEyMDksIi4uL3NjYXR0ZXIvc3R5bGUiOjEyMTEsIi4vYXR0cmlidXRlcyI6MTIyMSwiLi9jYWxjIjoxMjIyLCIuL2RlZmF1bHRzIjoxMjIzLCIuL2V2ZW50X2RhdGEiOjEyMjQsIi4vZm9ybWF0X2xhYmVscyI6MTIyNSwiLi9ob3ZlciI6MTIyNiwiLi9wbG90IjoxMjI4fV0sMTIyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3Bsb3QiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbCxjLHU9clswXVswXS5jYXJwZXQsZj17eGF4aXM6aS5nZXRGcm9tSWQodCx1LnhheGlzfHwieCIpLHlheGlzOmkuZ2V0RnJvbUlkKHQsdS55YXhpc3x8InkiKSxwbG90OmUucGxvdH07Zm9yKG4odCxmLHIsbykscz0wO3M8ci5sZW5ndGg7cysrKWw9cltzXVswXS50cmFjZSxjPW8uc2VsZWN0QWxsKCJnLnRyYWNlIitsLnVpZCsiIC5qcy1saW5lIiksYS5zZXRDbGlwVXJsKGMscltzXVswXS5jYXJwZXQuX2NsaXBQYXRoSWQsdCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjY1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi9zY2F0dGVyL3Bsb3QiOjEyMDh9XSwxMjI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxmPWEubWFya2VyLGg9YS5saW5lLHA9Zi5saW5lO2UuZXhwb3J0cz11KHtsb246e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsYXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIklTTy0zIiwiVVNBLXN0YXRlcyIsImNvdW50cnkgbmFtZXMiLCJnZW9qc29uLWlkIl0sZGZsdDoiSVNPLTMifSxnZW9qc29uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sZmVhdHVyZWlka2V5Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJpZCJ9LG1vZGU6Yyh7fSxhLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpjKHt9LGEudGV4dCx7fSksdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJsYXQiLCJsb24iLCJsb2NhdGlvbiIsInRleHQiXX0pLGhvdmVydGV4dDpjKHt9LGEuaG92ZXJ0ZXh0LHt9KSx0ZXh0Zm9udDphLnRleHRmb250LHRleHRwb3NpdGlvbjphLnRleHRwb3NpdGlvbixsaW5lOntjb2xvcjpoLmNvbG9yLHdpZHRoOmgud2lkdGgsZGFzaDpsfSxjb25uZWN0Z2FwczphLmNvbm5lY3RnYXBzLG1hcmtlcjpjKHtzeW1ib2w6Zi5zeW1ib2wsb3BhY2l0eTpmLm9wYWNpdHksc2l6ZTpmLnNpemUsc2l6ZXJlZjpmLnNpemVyZWYsc2l6ZW1pbjpmLnNpemVtaW4sc2l6ZW1vZGU6Zi5zaXplbW9kZSxjb2xvcmJhcjpmLmNvbG9yYmFyLGxpbmU6Yyh7d2lkdGg6cC53aWR0aH0scygibWFya2VyLmxpbmUiKSksZ3JhZGllbnQ6Zi5ncmFkaWVudH0scygibWFya2VyIikpLGZpbGw6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiXSxkZmx0OiJub25lIn0sZmlsbGNvbG9yOmEuZmlsbGNvbG9yLHNlbGVjdGVkOmEuc2VsZWN0ZWQsdW5zZWxlY3RlZDphLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmMoe30sby5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwibG9jYXRpb24iLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpuKCl9LCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY1MCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjY2NCwiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MTAsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyNCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6OTA2LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExODd9XSwxMjMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxvPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIikscz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIiksbD10KCIuLi8uLi9saWIiKS5fO2Z1bmN0aW9uIGModCl7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1PUFycmF5LmlzQXJyYXkoZS5sb2NhdGlvbnMpLGY9dT9lLmxvY2F0aW9ucy5sZW5ndGg6ZS5fbGVuZ3RoLGg9bmV3IEFycmF5KGYpO3I9ZS5nZW9qc29uP2Z1bmN0aW9uKHQpe3JldHVybiBjKHQpfHxuKHQpfTpjO2Zvcih2YXIgcD0wO3A8ZjtwKyspe3ZhciBkPWhbcF09e307aWYodSl7dmFyIGc9ZS5sb2NhdGlvbnNbcF07ZC5sb2M9cihnKT9nOm51bGx9ZWxzZXt2YXIgbT1lLmxvbltwXSx2PWUubGF0W3BdO24obSkmJm4odik/ZC5sb25sYXQ9WyttLCt2XTpkLmxvbmxhdD1baSxpXX19cmV0dXJuIG8oaCxlKSxhKHQsZSkscyhoLGUpLGYmJihoWzBdLnQ9e2xhYmVsczp7bGF0OmwodCwibGF0OiIpKyIgIixsb246bCh0LCJsb246IikrIiAifX0pLGh9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vbGliIjo3NzgsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMTg2LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTg5LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE5MCwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDEyMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfXZhciBoLHA9ZigibG9jYXRpb25zIik7aWYocCYmcC5sZW5ndGgpe3ZhciBkLGc9ZigiZ2VvanNvbiIpOygic3RyaW5nIj09dHlwZW9mIGcmJiIiIT09Z3x8bi5pc1BsYWluT2JqZWN0KGcpKSYmKGQ9Imdlb2pzb24taWQiKSwiZ2VvanNvbi1pZCI9PT1mKCJsb2NhdGlvbm1vZGUiLGQpJiZmKCJmZWF0dXJlaWRrZXkiKSxoPXAubGVuZ3RofWVsc2V7dmFyIG09ZigibG9uIil8fFtdLHY9ZigibGF0Iil8fFtdO2g9TWF0aC5taW4obS5sZW5ndGgsdi5sZW5ndGgpfWg/KGUuX2xlbmd0aD1oLGYoInRleHQiKSxmKCJob3ZlcnRleHQiKSxmKCJob3ZlcnRlbXBsYXRlIiksZigibW9kZSIpLGkuaGFzTGluZXMoZSkmJihvKHQsZSxyLHUsZiksZigiY29ubmVjdGdhcHMiKSksaS5oYXNNYXJrZXJzKGUpJiZhKHQsZSxyLHUsZix7Z3JhZGllbnQ6ITB9KSxpLmhhc1RleHQoZSkmJihmKCJ0ZXh0dGVtcGxhdGUiKSxzKHQsZSx1LGYpKSxmKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZsKHQsZSxyLGYpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGYpKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTE5NSwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMjAwLCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTIwNiwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxMiwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMjEzLCIuL2F0dHJpYnV0ZXMiOjEyMjl9XSwxMjMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3QubG9uPWUubG9uLHQubGF0PWUubGF0LHQubG9jYXRpb249ZS5sb2M/ZS5sb2M6bnVsbDt2YXIgYT1uW2ldO3JldHVybiBhLmZJbiYmYS5mSW4ucHJvcGVydGllcyYmKHQucHJvcGVydGllcz1hLmZJbi5wcm9wZXJ0aWVzKSx0fX0se31dLDEyMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXt9LGE9cltlLmdlb10uX3N1YnBsb3QubW9ja0F4aXMsbz10LmxvbmxhdDtyZXR1cm4gaS5sb25MYWJlbD1uLnRpY2tUZXh0KGEsYS5jMmwob1swXSksITApLnRleHQsaS5sYXRMYWJlbD1uLnRpY2tUZXh0KGEsYS5jMmwob1sxXSksITApLnRleHQsaX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOH1dLDEyMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIiksbz10KCIuLi8uLi9saWIiKS5maWxsVGV4dCxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9dC5jZCxjPWxbMF0udHJhY2UsdT10LnhhLGY9dC55YSxoPXQuc3VicGxvdCxwPWgucHJvamVjdGlvbi5pc0xvbkxhdE92ZXJFZGdlcyxkPWgucHJvamVjdDtpZihuLmdldENsb3Nlc3QobCwoZnVuY3Rpb24odCl7dmFyIG49dC5sb25sYXQ7aWYoblswXT09PWkpcmV0dXJuIDEvMDtpZihwKG4pKXJldHVybiAxLzA7dmFyIGE9ZChuKSxvPWQoW2Uscl0pLHM9TWF0aC5hYnMoYVswXS1vWzBdKSxsPU1hdGguYWJzKGFbMV0tb1sxXSksYz1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KHMqcytsKmwpLWMsMS0zL2MpfSksdCksITEhPT10LmluZGV4KXt2YXIgZz1sW3QuaW5kZXhdLG09Zy5sb25sYXQsdj1bdS5jMnAobSksZi5jMnAobSldLHk9Zy5tcmN8fDE7dC54MD12WzBdLXksdC54MT12WzBdK3ksdC55MD12WzFdLXksdC55MT12WzFdK3ksdC5sb2M9Zy5sb2MsdC5sb249bVswXSx0LmxhdD1tWzFdO3ZhciB4PXt9O3hbYy5nZW9dPXtfc3VicGxvdDpofTt2YXIgYj1jLl9tb2R1bGUuZm9ybWF0TGFiZWxzKGcsYyx4KTtyZXR1cm4gdC5sb25MYWJlbD1iLmxvbkxhYmVsLHQubGF0TGFiZWw9Yi5sYXRMYWJlbCx0LmNvbG9yPWEoYyxnKSx0LmV4dHJhVGV4dD1mdW5jdGlvbih0LGUscixuKXtpZih0LmhvdmVydGVtcGxhdGUpcmV0dXJuO3ZhciBpPWUuaGl8fHQuaG92ZXJpbmZvLGE9ImFsbCI9PT1pP3MuaG92ZXJpbmZvLmZsYWdzOmkuc3BsaXQoIisiKSxsPS0xIT09YS5pbmRleE9mKCJsb2NhdGlvbiIpJiZBcnJheS5pc0FycmF5KHQubG9jYXRpb25zKSxjPS0xIT09YS5pbmRleE9mKCJsb24iKSx1PS0xIT09YS5pbmRleE9mKCJsYXQiKSxmPS0xIT09YS5pbmRleE9mKCJ0ZXh0IiksaD1bXTtmdW5jdGlvbiBwKHQpe3JldHVybiB0KyJceGIwIn1sP2gucHVzaChlLmxvYyk6YyYmdT9oLnB1c2goIigiK3Aoci5sb25MYWJlbCkrIiwgIitwKHIubGF0TGFiZWwpKyIpIik6Yz9oLnB1c2gobi5sb24rcChyLmxvbkxhYmVsKSk6dSYmaC5wdXNoKG4ubGF0K3Aoci5sYXRMYWJlbCkpO2YmJm8oZSx0LGgpO3JldHVybiBoLmpvaW4oIjxicj4iKX0oYyxnLHQsbFswXS50LmxhYmVscyksdC5ob3ZlcnRlbXBsYXRlPWMuaG92ZXJ0ZW1wbGF0ZSxbdF19fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2ODMsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vbGliIjo3NzgsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMTk3LCIuL2F0dHJpYnV0ZXMiOjEyMjl9XSwxMjM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxjYWxjR2VvSlNPTjp0KCIuL3Bsb3QiKS5jYWxjR2VvSlNPTixwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLHN0eWxlT25TZWxlY3Q6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcmdlbyIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2VvIiksY2F0ZWdvcmllczpbImdlbyIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2VvIjo4NjAsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA1LCIuLi9zY2F0dGVyL3N0eWxlIjoxMjExLCIuL2F0dHJpYnV0ZXMiOjEyMjksIi4vY2FsYyI6MTIzMCwiLi9kZWZhdWx0cyI6MTIzMSwiLi9ldmVudF9kYXRhIjoxMjMyLCIuL2Zvcm1hdF9sYWJlbHMiOjEyMzMsIi4vaG92ZXIiOjEyMzQsIi4vcGxvdCI6MTIzNiwiLi9zZWxlY3QiOjEyMzcsIi4vc3R5bGUiOjEyMzh9XSwxMjM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyIpLmdldFRvcG9qc29uRmVhdHVyZXMsbz10KCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyIpLHM9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmZpbmRFeHRyZW1lcyxjPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sdT10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxmPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxoPXQoIi4vc3R5bGUiKTtlLmV4cG9ydHM9e2NhbGNHZW9KU09OOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0udHJhY2Usbz1lW2kuZ2VvXSxmPW8uX3N1YnBsb3QsaD1pLl9sZW5ndGg7aWYoQXJyYXkuaXNBcnJheShpLmxvY2F0aW9ucykpe3ZhciBwPWkubG9jYXRpb25tb2RlLGQ9Imdlb2pzb24taWQiPT09cD9zLmV4dHJhY3RUcmFjZUZlYXR1cmUodCk6YShpLGYudG9wb2pzb24pO2ZvcihyPTA7cjxoO3IrKyl7bj10W3JdO3ZhciBnPSJnZW9qc29uLWlkIj09PXA/bi5mT3V0OnMubG9jYXRpb25Ub0ZlYXR1cmUocCxuLmxvYyxkKTtuLmxvbmxhdD1nP2cucHJvcGVydGllcy5jdDpbYyxjXX19dmFyIG0sdix5PXtwYWRkZWQ6ITB9O2lmKCJnZW9qc29uIj09PW8uZml0Ym91bmRzJiYiZ2VvanNvbi1pZCI9PT1pLmxvY2F0aW9ubW9kZSl7dmFyIHg9cy5jb21wdXRlQmJveChzLmdldFRyYWNlR2VvanNvbihpKSk7bT1beFswXSx4WzJdXSx2PVt4WzFdLHhbM11dfWVsc2V7Zm9yKG09bmV3IEFycmF5KGgpLHY9bmV3IEFycmF5KGgpLHI9MDtyPGg7cisrKW49dFtyXSxtW3JdPW4ubG9ubGF0WzBdLHZbcl09bi5sb25sYXRbMV07eS5wcGFkPXUoaSxoKX1pLl9leHRyZW1lcy5sb249bChvLmxvbmF4aXMuX2F4LG0seSksaS5fZXh0cmVtZXMubGF0PWwoby5sYXRheGlzLl9heCx2LHkpfSxwbG90OmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIikscz1pLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIHNjYXR0ZXJnZW8iKTtmdW5jdGlvbiBsKHQsZSl7dC5sb25sYXRbMF09PT1jJiZuLnNlbGVjdChlKS5yZW1vdmUoKX1zLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpLHMuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT1lWzBdLnRyYWNlO2lmKGYuaGFzTGluZXMoYSl8fCJub25lIiE9PWEuZmlsbCl7dmFyIHM9by5jYWxjVHJhY2VUb0xpbmVDb29yZHMoZSksYz0ibm9uZSIhPT1hLmZpbGw/by5tYWtlUG9seWdvbihzKTpvLm1ha2VMaW5lKHMpO3Iuc2VsZWN0QWxsKCJwYXRoLmpzLWxpbmUiKS5kYXRhKFt7Z2VvanNvbjpjLHRyYWNlOmF9XSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKX1mLmhhc01hcmtlcnMoYSkmJnIuc2VsZWN0QWxsKCJwYXRoLnBvaW50IikuZGF0YShpLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCkuZWFjaCgoZnVuY3Rpb24odCl7bCh0LHRoaXMpfSkpLGYuaGFzVGV4dChhKSYmci5zZWxlY3RBbGwoImciKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuZWFjaCgoZnVuY3Rpb24odCl7bCh0LHRoaXMpfSkpLGgodCxlKX0pKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjc3MSwiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiOjc3MiwiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIjo4MDYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjgyNywiLi4vc2NhdHRlci9jYWxjIjoxMTg4LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMjEyLCIuL3N0eWxlIjoxMjM4LGQzOjE2OX1dLDEyMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scyxsLGM9dC5jZCx1PXQueGF4aXMsZj10LnlheGlzLGg9W10scD1jWzBdLnRyYWNlO2lmKCFuLmhhc01hcmtlcnMocCkmJiFuLmhhc1RleHQocCkpcmV0dXJuW107aWYoITE9PT1lKWZvcihsPTA7bDxjLmxlbmd0aDtsKyspY1tsXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKGw9MDtsPGMubGVuZ3RoO2wrKykoYT0ocj1jW2xdKS5sb25sYXQpWzBdIT09aSYmKG89dS5jMnAoYSkscz1mLmMycChhKSxlLmNvbnRhaW5zKFtvLHNdLG51bGwsbCx0KT8oaC5wdXNoKHtwb2ludE51bWJlcjpsLGxvbjphWzBdLGxhdDphWzFdfSksci5zZWxlY3RlZD0xKTpyLnNlbGVjdGVkPTApO3JldHVybiBofX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTJ9XSwxMjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uL3NjYXR0ZXIvc3R5bGUiKSxzPW8uc3R5bGVQb2ludHMsbD1vLnN0eWxlVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlJiZmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2Usbz1lWzBdLm5vZGUzO28uc3R5bGUoIm9wYWNpdHkiLGVbMF0udHJhY2Uub3BhY2l0eSkscyhvLHIsdCksbChvLHIsdCksby5zZWxlY3RBbGwoInBhdGguanMtbGluZSIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dC50cmFjZSxvPXIubGluZXx8e307ZS5jYWxsKGEuc3Ryb2tlLG8uY29sb3IpLmNhbGwoaS5kYXNoTGluZSxvLmRhc2h8fCIiLG8ud2lkdGh8fDApLCJub25lIiE9PXIuZmlsbCYmZS5jYWxsKGEuZmlsbCxyLmZpbGxjb2xvcil9KSl9KHQsZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uL3NjYXR0ZXIvc3R5bGUiOjEyMTEsZDM6MTY5fV0sMTIzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxsPXQoIi4vY29uc3RhbnRzIikuREFTSEVTLGM9aS5saW5lLHU9aS5tYXJrZXIsZj11LmxpbmUsaD1lLmV4cG9ydHM9cyh7eDppLngseDA6aS54MCxkeDppLmR4LHk6aS55LHkwOmkueTAsZHk6aS5keSx4cGVyaW9kOmkueHBlcmlvZCx5cGVyaW9kOmkueXBlcmlvZCx4cGVyaW9kMDppLnhwZXJpb2QwLHlwZXJpb2QwOmkueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDppLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDppLnlwZXJpb2RhbGlnbm1lbnQsdGV4dDppLnRleHQsaG92ZXJ0ZXh0OmkuaG92ZXJ0ZXh0LHRleHRwb3NpdGlvbjppLnRleHRwb3NpdGlvbix0ZXh0Zm9udDppLnRleHRmb250LG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwibWFya2VycyIsInRleHQiXSxleHRyYXM6WyJub25lIl19LGxpbmU6e2NvbG9yOmMuY29sb3Isd2lkdGg6Yy53aWR0aCxzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiaHYiLCJ2aCIsImh2aCIsInZodiJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxkYXNoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMobCksZGZsdDoic29saWQifX0sbWFya2VyOm8oe30sYSgibWFya2VyIikse3N5bWJvbDp1LnN5bWJvbCxzaXplOnUuc2l6ZSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLG9wYWNpdHk6dS5vcGFjaXR5LGNvbG9yYmFyOnUuY29sb3JiYXIsbGluZTpvKHt9LGEoIm1hcmtlci5saW5lIikse3dpZHRoOmYud2lkdGh9KX0pLGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsZmlsbDpvKHt9LGkuZmlsbCx7ZGZsdDoibm9uZSJ9KSxmaWxsY29sb3I6aS5maWxsY29sb3Isc2VsZWN0ZWQ6e21hcmtlcjppLnNlbGVjdGVkLm1hcmtlcix0ZXh0Zm9udDppLnNlbGVjdGVkLnRleHRmb250fSx1bnNlbGVjdGVkOnttYXJrZXI6aS51bnNlbGVjdGVkLm1hcmtlcix0ZXh0Zm9udDppLnVuc2VsZWN0ZWQudGV4dGZvbnR9LG9wYWNpdHk6bi5vcGFjaXR5fSwiY2FsYyIsIm5lc3RlZCIpO2gueC5lZGl0VHlwZT1oLnkuZWRpdFR5cGU9aC54MC5lZGl0VHlwZT1oLnkwLmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIixoLmhvdmVydGVtcGxhdGU9aS5ob3ZlcnRlbXBsYXRlLGgudGV4dHRlbXBsYXRlPWkudGV4dHRlbXBsYXRlfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODEwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjQsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE4NywiLi9jb25zdGFudHMiOjEyNDF9XSwxMjQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvcG9pbnQtY2x1c3RlciIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5maW5kRXh0cmVtZXMscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIiksbD10KCIuLi9zY2F0dGVyL2NhbGMiKSxjPWwuY2FsY01hcmtlclNpemUsdT1sLmNhbGNBeGlzRXhwYW5zaW9uLGY9bC5zZXRGaXJzdFNjYXR0ZXIsaD10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLHA9dCgiLi9jb252ZXJ0IiksZD10KCIuL3NjZW5lX3VwZGF0ZSIpLGc9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxtPXQoIi4vY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2Z1bmN0aW9uIHYodCxlLHIpe3ZhciBuPXQuX2V4dHJlbWVzW2UuX2lkXSxpPW8oZSxyLl9ibmRzLHtwYWRkZWQ6ITB9KTtuLm1pbj1uLm1pbi5jb25jYXQoaS5taW4pLG4ubWF4PW4ubWF4LmNvbmNhdChpLm1heCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbyxsLHk9dC5fZnVsbExheW91dCx4PWEuZ2V0RnJvbUlkKHQsZS54YXhpcyksYj1hLmdldEZyb21JZCh0LGUueWF4aXMpLF89eS5fcGxvdHNbZS54YXhpcytlLnlheGlzXSx3PWUuX2xlbmd0aCxUPXc+PW0saz0yKncsTT17fSxBPXgubWFrZUNhbGNkYXRhKGUsIngiKSxTPWIubWFrZUNhbGNkYXRhKGUsInkiKSxFPXMoZSx4LCJ4IixBKSxDPXMoZSxiLCJ5IixTKTtlLl94PUUsZS5feT1DLGUueHBlcmlvZGFsaWdubWVudCYmKGUuX29yaWdYPUEpLGUueXBlcmlvZGFsaWdubWVudCYmKGUuX29yaWdZPVMpO3ZhciBMPW5ldyBBcnJheShrKTtmb3Iocj0wO3I8dztyKyspbz1FW3JdLGw9Q1tyXSxMWzIqcl09bz09PWc/TmFOOm8sTFsyKnIrMV09bD09PWc/TmFOOmw7aWYoImxvZyI9PT14LnR5cGUpZm9yKHI9MDtyPGs7cis9MilMW3JdPXguYzJsKExbcl0pO2lmKCJsb2ciPT09Yi50eXBlKWZvcihyPTE7cjxrO3IrPTIpTFtyXT1iLmMybChMW3JdKTtpZihUJiYibG9nIiE9PXgudHlwZSYmImxvZyIhPT1iLnR5cGUpTS50cmVlPW4oTCk7ZWxzZXt2YXIgST1NLmlkcz1uZXcgQXJyYXkodyk7Zm9yKHI9MDtyPHc7cisrKUlbcl09cn1oKHQsZSk7dmFyIFAsej1mdW5jdGlvbih0LGUscixuLGEsbyl7dmFyIHM9cC5zdHlsZSh0LHIpO3MubWFya2VyJiYocy5tYXJrZXIucG9zaXRpb25zPW4pO3MubGluZSYmbi5sZW5ndGg+MSYmaS5leHRlbmRGbGF0KHMubGluZSxwLmxpbmVQb3NpdGlvbnModCxyLG4pKTtpZihzLmVycm9yWHx8cy5lcnJvclkpe3ZhciBsPXAuZXJyb3JCYXJQb3NpdGlvbnModCxyLG4sYSxvKTtzLmVycm9yWCYmaS5leHRlbmRGbGF0KHMuZXJyb3JYLGwueCkscy5lcnJvclkmJmkuZXh0ZW5kRmxhdChzLmVycm9yWSxsLnkpfXMudGV4dCYmKGkuZXh0ZW5kRmxhdChzLnRleHQse3Bvc2l0aW9uczpufSxwLnRleHRQb3NpdGlvbih0LHIscy50ZXh0LHMubWFya2VyKSksaS5leHRlbmRGbGF0KHMudGV4dFNlbCx7cG9zaXRpb25zOm59LHAudGV4dFBvc2l0aW9uKHQscixzLnRleHQscy5tYXJrZXJTZWwpKSxpLmV4dGVuZEZsYXQocy50ZXh0VW5zZWwse3Bvc2l0aW9uczpufSxwLnRleHRQb3NpdGlvbih0LHIscy50ZXh0LHMubWFya2VyVW5zZWwpKSk7cmV0dXJuIHN9KHQsMCxlLEwsRSxDKSxPPWQodCxfKTtyZXR1cm4gZih5LGUpLFQ/ei5tYXJrZXImJihQPTIqKHoubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KHoubWFya2VyLnNpemUsMykpKTpQPWMoZSx3KSx1KHQsZSx4LGIsRSxDLFApLHouZXJyb3JYJiZ2KGUseCx6LmVycm9yWCksei5lcnJvclkmJnYoZSxiLHouZXJyb3JZKSx6LmZpbGwmJiFPLmZpbGwyZCYmKE8uZmlsbDJkPSEwKSx6Lm1hcmtlciYmIU8uc2NhdHRlcjJkJiYoTy5zY2F0dGVyMmQ9ITApLHoubGluZSYmIU8ubGluZTJkJiYoTy5saW5lMmQ9ITApLCF6LmVycm9yWCYmIXouZXJyb3JZfHxPLmVycm9yMmR8fChPLmVycm9yMmQ9ITApLHoudGV4dCYmIU8uZ2xUZXh0JiYoTy5nbFRleHQ9ITApLHoubWFya2VyJiYoei5tYXJrZXIuc25hcD13KSxPLmxpbmVPcHRpb25zLnB1c2goei5saW5lKSxPLmVycm9yWE9wdGlvbnMucHVzaCh6LmVycm9yWCksTy5lcnJvcllPcHRpb25zLnB1c2goei5lcnJvclkpLE8uZmlsbE9wdGlvbnMucHVzaCh6LmZpbGwpLE8ubWFya2VyT3B0aW9ucy5wdXNoKHoubWFya2VyKSxPLm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKHoubWFya2VyU2VsKSxPLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goei5tYXJrZXJVbnNlbCksTy50ZXh0T3B0aW9ucy5wdXNoKHoudGV4dCksTy50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goei50ZXh0U2VsKSxPLnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHoudGV4dFVuc2VsKSxPLnNlbGVjdEJhdGNoLnB1c2goW10pLE8udW5zZWxlY3RCYXRjaC5wdXNoKFtdKSxNLl9zY2VuZT1PLE0uaW5kZXg9Ty5jb3VudCxNLng9RSxNLnk9QyxNLnBvc2l0aW9ucz1MLE8uY291bnQrKyxbe3g6ITEseTohMSx0Ok0sdHJhY2U6ZX1dfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo4MjUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjgyNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4uL3NjYXR0ZXIvY2FsYyI6MTE4OCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExOTAsIi4vY29uc3RhbnRzIjoxMjQxLCIuL2NvbnZlcnQiOjEyNDIsIi4vc2NlbmVfdXBkYXRlIjoxMjUwLCJAcGxvdGx5L3BvaW50LWNsdXN0ZXIiOjU3fV0sMTI0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1RPT19NQU5ZX1BPSU5UUzoxZTUsU1lNQk9MX1NERl9TSVpFOjIwMCxTWU1CT0xfU0laRToyMCxTWU1CT0xfU1RST0tFOjEsRE9UX1JFOi8tZG90LyxPUEVOX1JFOi8tb3Blbi8sREFTSEVTOntzb2xpZDpbMV0sZG90OlsxLDFdLGRhc2g6WzQsMV0sbG9uZ2Rhc2g6WzgsMV0sZGFzaGRvdDpbNCwxLDEsMV0sbG9uZ2Rhc2hkb3Q6WzgsMSwxLDFdfX19LHt9XSwxMjQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJzdmctcGF0aC1zZGYiKSxhPXQoImNvbG9yLW5vcm1hbGl6ZSIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSx1PXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5mb3JtYXRDb2xvcixmPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxoPXQoIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIikscD10KCIuL2hlbHBlcnMiKSxkPXQoIi4vY29uc3RhbnRzIiksZz10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0sbT17c3RhcnQ6MSxsZWZ0OjEsZW5kOi0xLHJpZ2h0Oi0xLG1pZGRsZTowLGNlbnRlcjowLGJvdHRvbToxLHRvcDotMX0sdj10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWU7ZnVuY3Rpb24geSh0LGUpe3ZhciByLGk9dC5fZnVsbExheW91dCxhPWUuX2xlbmd0aCxvPWUudGV4dGZvbnQsbD1lLnRleHRwb3NpdGlvbixjPUFycmF5LmlzQXJyYXkobCk/bDpbbF0sdT1vLmNvbG9yLGY9by5zaXplLGg9by5mYW1pbHkscD17fSxkPWUudGV4dHRlbXBsYXRlO2lmKGQpe3AudGV4dD1bXTt2YXIgZz1pLl9kM2xvY2FsZSxtPUFycmF5LmlzQXJyYXkoZCkseT1tP01hdGgubWluKGQubGVuZ3RoLGEpOmEseD1tP2Z1bmN0aW9uKHQpe3JldHVybiBkW3RdfTpmdW5jdGlvbigpe3JldHVybiBkfTtmb3Iocj0wO3I8eTtyKyspe3ZhciBiPXtpOnJ9LF89ZS5fbW9kdWxlLmZvcm1hdExhYmVscyhiLGUsaSksdz17fTt2KHcsZSxyKTt2YXIgVD1lLl9tZXRhfHx7fTtwLnRleHQucHVzaChzLnRleHR0ZW1wbGF0ZVN0cmluZyh4KHIpLF8sZyx3LGIsVCkpfX1lbHNlIEFycmF5LmlzQXJyYXkoZS50ZXh0KSYmZS50ZXh0Lmxlbmd0aDxhP3AudGV4dD1lLnRleHQuc2xpY2UoKTpwLnRleHQ9ZS50ZXh0O2lmKEFycmF5LmlzQXJyYXkocC50ZXh0KSlmb3Iocj1wLnRleHQubGVuZ3RoO3I8YTtyKyspcC50ZXh0W3JdPSIiO2ZvcihwLm9wYWNpdHk9ZS5vcGFjaXR5LHAuZm9udD17fSxwLmFsaWduPVtdLHAuYmFzZWxpbmU9W10scj0wO3I8Yy5sZW5ndGg7cisrKXt2YXIgaz1jW3JdLnNwbGl0KC9ccysvKTtzd2l0Y2goa1sxXSl7Y2FzZSJsZWZ0IjpwLmFsaWduLnB1c2goInJpZ2h0Iik7YnJlYWs7Y2FzZSJyaWdodCI6cC5hbGlnbi5wdXNoKCJsZWZ0Iik7YnJlYWs7ZGVmYXVsdDpwLmFsaWduLnB1c2goa1sxXSl9c3dpdGNoKGtbMF0pe2Nhc2UidG9wIjpwLmJhc2VsaW5lLnB1c2goImJvdHRvbSIpO2JyZWFrO2Nhc2UiYm90dG9tIjpwLmJhc2VsaW5lLnB1c2goInRvcCIpO2JyZWFrO2RlZmF1bHQ6cC5iYXNlbGluZS5wdXNoKGtbMF0pfX1pZihBcnJheS5pc0FycmF5KHUpKWZvcihwLmNvbG9yPW5ldyBBcnJheShhKSxyPTA7cjxhO3IrKylwLmNvbG9yW3JdPXVbcl07ZWxzZSBwLmNvbG9yPXU7aWYocy5pc0FycmF5T3JUeXBlZEFycmF5KGYpfHxBcnJheS5pc0FycmF5KGgpKWZvcihwLmZvbnQ9bmV3IEFycmF5KGEpLHI9MDtyPGE7cisrKXt2YXIgTT1wLmZvbnRbcl09e307TS5zaXplPXMuaXNUeXBlZEFycmF5KGYpP2Zbcl06QXJyYXkuaXNBcnJheShmKT9uKGZbcl0pP2Zbcl06MDpmLE0uZmFtaWx5PUFycmF5LmlzQXJyYXkoaCk/aFtyXTpofWVsc2UgcC5mb250PXtzaXplOmYsZmFtaWx5Omh9O3JldHVybiBwfWZ1bmN0aW9uIHgodCl7dmFyIGUscixuPXQuX2xlbmd0aCxpPXQubWFya2VyLG89e30sbD1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5zeW1ib2wpLGM9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkuY29sb3IpLGY9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkubGluZS5jb2xvciksZD1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5vcGFjaXR5KSxnPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLnNpemUpLG09cy5pc0FycmF5T3JUeXBlZEFycmF5KGkubGluZS53aWR0aCk7aWYobHx8KHI9cC5pc09wZW5TeW1ib2woaS5zeW1ib2wpKSxsfHxjfHxmfHxkKXtvLmNvbG9ycz1uZXcgQXJyYXkobiksby5ib3JkZXJDb2xvcnM9bmV3IEFycmF5KG4pO3ZhciB2PXUoaSxpLm9wYWNpdHksbikseT11KGkubGluZSxpLm9wYWNpdHksbik7aWYoIUFycmF5LmlzQXJyYXkoeVswXSkpe3ZhciB4PXk7Zm9yKHk9QXJyYXkobiksZT0wO2U8bjtlKyspeVtlXT14fWlmKCFBcnJheS5pc0FycmF5KHZbMF0pKXt2YXIgYj12O2Zvcih2PUFycmF5KG4pLGU9MDtlPG47ZSsrKXZbZV09Yn1mb3Ioby5jb2xvcnM9dixvLmJvcmRlckNvbG9ycz15LGU9MDtlPG47ZSsrKXtpZihsKXt2YXIgXz1pLnN5bWJvbFtlXTtyPXAuaXNPcGVuU3ltYm9sKF8pfXImJih5W2VdPXZbZV0uc2xpY2UoKSx2W2VdPXZbZV0uc2xpY2UoKSx2W2VdWzNdPTApfW8ub3BhY2l0eT10Lm9wYWNpdHl9ZWxzZSByPyhvLmNvbG9yPWEoaS5jb2xvciwidWludDgiKSxvLmNvbG9yWzNdPTAsby5ib3JkZXJDb2xvcj1hKGkuY29sb3IsInVpbnQ4IikpOihvLmNvbG9yPWEoaS5jb2xvciwidWludDgiKSxvLmJvcmRlckNvbG9yPWEoaS5saW5lLmNvbG9yLCJ1aW50OCIpKSxvLm9wYWNpdHk9dC5vcGFjaXR5Kmkub3BhY2l0eTtpZihsKWZvcihvLm1hcmtlcnM9bmV3IEFycmF5KG4pLGU9MDtlPG47ZSsrKW8ubWFya2Vyc1tlXT1FKGkuc3ltYm9sW2VdKTtlbHNlIG8ubWFya2VyPUUoaS5zeW1ib2wpO3ZhciB3LFQ9aCh0KTtpZihnfHxtKXt2YXIgayxNPW8uc2l6ZXM9bmV3IEFycmF5KG4pLEE9by5ib3JkZXJTaXplcz1uZXcgQXJyYXkobiksUz0wO2lmKGcpe2ZvcihlPTA7ZTxuO2UrKylNW2VdPVQoaS5zaXplW2VdKSxTKz1NW2VdO2s9Uy9ufWVsc2UgZm9yKHc9VChpLnNpemUpLGU9MDtlPG47ZSsrKU1bZV09dztpZihtKWZvcihlPTA7ZTxuO2UrKylBW2VdPWkubGluZS53aWR0aFtlXS8yO2Vsc2UgZm9yKHc9aS5saW5lLndpZHRoLzIsZT0wO2U8bjtlKyspQVtlXT13O28uc2l6ZUF2Zz1rfWVsc2Ugby5zaXplPVQoaSYmaS5zaXplfHwxMCksby5ib3JkZXJTaXplcz1UKGkubGluZS53aWR0aCk7cmV0dXJuIG99ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQubWFya2VyLG49e307cmV0dXJuIGU/KGUubWFya2VyJiZlLm1hcmtlci5zeW1ib2w/bj14KHMuZXh0ZW5kRmxhdCh7fSxyLGUubWFya2VyKSk6ZS5tYXJrZXImJihlLm1hcmtlci5zaXplJiYobi5zaXplPWUubWFya2VyLnNpemUvMiksZS5tYXJrZXIuY29sb3ImJihuLmNvbG9ycz1lLm1hcmtlci5jb2xvciksdm9pZCAwIT09ZS5tYXJrZXIub3BhY2l0eSYmKG4ub3BhY2l0eT1lLm1hcmtlci5vcGFjaXR5KSksbik6bn1mdW5jdGlvbiBfKHQsZSxyKXt2YXIgbj17fTtpZighcilyZXR1cm4gbjtpZihyLnRleHRmb250KXt2YXIgaT17b3BhY2l0eToxLHRleHQ6ZS50ZXh0LHRleHR0ZW1wbGF0ZTplLnRleHR0ZW1wbGF0ZSx0ZXh0cG9zaXRpb246ZS50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6cy5leHRlbmRGbGF0KHt9LGUudGV4dGZvbnQpfTtyLnRleHRmb250JiZzLmV4dGVuZEZsYXQoaS50ZXh0Zm9udCxyLnRleHRmb250KSxuPXkodCxpKX1yZXR1cm4gbn1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9e2NhcFNpemU6MiplLndpZHRoLGxpbmVXaWR0aDplLnRoaWNrbmVzcyxjb2xvcjplLmNvbG9yfTtyZXR1cm4gZS5jb3B5X3lzdHlsZSYmKHI9dC5lcnJvcl95KSxyfXZhciBUPWQuU1lNQk9MX1NERl9TSVpFLGs9ZC5TWU1CT0xfU0laRSxNPWQuU1lNQk9MX1NUUk9LRSxBPXt9LFM9bC5zeW1ib2xGdW5jc1swXSguMDUqayk7ZnVuY3Rpb24gRSh0KXtpZigiY2lyY2xlIj09PXQpcmV0dXJuIG51bGw7dmFyIGUscixuPWwuc3ltYm9sTnVtYmVyKHQpLGE9bC5zeW1ib2xGdW5jc1tuJTEwMF0sbz0hIWwuc3ltYm9sTm9Eb3RbbiUxMDBdLHM9ISFsLnN5bWJvbE5vRmlsbFtuJTEwMF0sYz1wLmlzRG90U3ltYm9sKHQpO3JldHVybiBBW3RdP0FbdF06KGU9YyYmIW8/YSgxLjEqaykrUzphKGspLHI9aShlLHt3OlQsaDpULHZpZXdCb3g6Wy1rLC1rLGssa10sc3Ryb2tlOnM/TTotTX0pLEFbdF09cixyfHxudWxsKX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj17bWFya2VyOnZvaWQgMCxtYXJrZXJTZWw6dm9pZCAwLG1hcmtlclVuc2VsOnZvaWQgMCxsaW5lOnZvaWQgMCxmaWxsOnZvaWQgMCxlcnJvclg6dm9pZCAwLGVycm9yWTp2b2lkIDAsdGV4dDp2b2lkIDAsdGV4dFNlbDp2b2lkIDAsdGV4dFVuc2VsOnZvaWQgMH07aWYoITAhPT1lLnZpc2libGUpcmV0dXJuIG47aWYoZi5oYXNUZXh0KGUpJiYobi50ZXh0PXkodCxlKSxuLnRleHRTZWw9Xyh0LGUsZS5zZWxlY3RlZCksbi50ZXh0VW5zZWw9Xyh0LGUsZS51bnNlbGVjdGVkKSksZi5oYXNNYXJrZXJzKGUpJiYobi5tYXJrZXI9eChlKSxuLm1hcmtlclNlbD1iKGUsZS5zZWxlY3RlZCksbi5tYXJrZXJVbnNlbD1iKGUsZS51bnNlbGVjdGVkKSwhZS51bnNlbGVjdGVkJiZzLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5tYXJrZXIub3BhY2l0eSkpKXt2YXIgaT1lLm1hcmtlci5vcGFjaXR5O2ZvcihuLm1hcmtlclVuc2VsLm9wYWNpdHk9bmV3IEFycmF5KGkubGVuZ3RoKSxyPTA7cjxpLmxlbmd0aDtyKyspbi5tYXJrZXJVbnNlbC5vcGFjaXR5W3JdPWcqaVtyXX1pZihmLmhhc0xpbmVzKGUpKXtuLmxpbmU9e292ZXJsYXk6ITAsdGhpY2tuZXNzOmUubGluZS53aWR0aCxjb2xvcjplLmxpbmUuY29sb3Isb3BhY2l0eTplLm9wYWNpdHl9O3ZhciBhPShkLkRBU0hFU1tlLmxpbmUuZGFzaF18fFsxXSkuc2xpY2UoKTtmb3Iocj0wO3I8YS5sZW5ndGg7KytyKWFbcl0qPWUubGluZS53aWR0aDtuLmxpbmUuZGFzaGVzPWF9cmV0dXJuIGUuZXJyb3JfeCYmZS5lcnJvcl94LnZpc2libGUmJihuLmVycm9yWD13KGUsZS5lcnJvcl94KSksZS5lcnJvcl95JiZlLmVycm9yX3kudmlzaWJsZSYmKG4uZXJyb3JZPXcoZSxlLmVycm9yX3kpKSxlLmZpbGwmJiJub25lIiE9PWUuZmlsbCYmKG4uZmlsbD17Y2xvc2VkOiEwLGZpbGw6ZS5maWxsY29sb3IsdGhpY2tuZXNzOjB9KSxufSxtYXJrZXJTdHlsZTp4LG1hcmtlclNlbGVjdGlvbjpiLGxpbmVQb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPWEvMjtpZihmLmhhc0xpbmVzKGUpJiZvKWlmKCJodiI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOLE5hTixOYU4pOihuLnB1c2goclsyKmldLHJbMippKzFdKSxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippKzJdLHJbMippKzFdKSk7bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoImh2aCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaWYoaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pfHxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKSlpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrMV0pLG4ucHVzaChOYU4sTmFOKTtlbHNle3ZhciBzPShyWzIqaV0rclsyKmkrMl0pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxzLHJbMippKzFdLHMsclsyKmkrM10pfW4ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKCJ2aHYiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlmKGlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKXx8aXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSkpaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmldLHJbMippKzFdKSxuLnB1c2goTmFOLE5hTik7ZWxzZXt2YXIgbD0oclsyKmkrMV0rclsyKmkrM10pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxyWzIqaV0sbCxyWzIqaSsyXSxsKX1uLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBpZigidmgiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTixOYU4sTmFOKToobi5wdXNoKHJbMippXSxyWzIqaSsxXSksaXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrM10pKTtuLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBuPXI7dmFyIGM9ITE7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylpZihpc05hTihuW2ldKSl7Yz0hMDticmVha312YXIgdT1jfHxuLmxlbmd0aD5kLlRPT19NQU5ZX1BPSU5UU3x8Zi5oYXNNYXJrZXJzKGUpPyJyZWN0Ijoicm91bmQiO2lmKGMmJmUuY29ubmVjdGdhcHMpe3ZhciBoPW5bMF0scD1uWzFdO2ZvcihpPTA7aTxuLmxlbmd0aDtpKz0yKWlzTmFOKG5baV0pfHxpc05hTihuW2krMV0pPyhuW2ldPWgsbltpKzFdPXApOihoPW5baV0scD1uW2krMV0pfXJldHVybntqb2luOnUscG9zaXRpb25zOm59fSxlcnJvckJhclBvc2l0aW9uczpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBzPW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJtYWtlQ29tcHV0ZUVycm9yIiksbD1jLmdldEZyb21JZCh0LGUueGF4aXMpLHU9Yy5nZXRGcm9tSWQodCxlLnlheGlzKSxmPXIubGVuZ3RoLzIsaD17fTtmdW5jdGlvbiBwKHQsaSl7dmFyIGE9aS5faWQuY2hhckF0KDApLG89ZVsiZXJyb3JfIithXTtpZihvJiZvLnZpc2libGUmJigibGluZWFyIj09PWkudHlwZXx8ImxvZyI9PT1pLnR5cGUpKXtmb3IodmFyIGw9cyhvKSxjPXt4OjAseToxfVthXSx1PXt4OlswLDEsMiwzXSx5OlsyLDMsMCwxXX1bYV0scD1uZXcgRmxvYXQ2NEFycmF5KDQqZiksZD0xLzAsZz0tMS8wLG09MCx2PTA7bTxmO20rKyx2Kz00KXt2YXIgeT10W21dO2lmKG4oeSkpe3ZhciB4PXJbMiptK2NdLGI9bCh5LG0pLF89YlswXSx3PWJbMV07aWYobihfKSYmbih3KSl7dmFyIFQ9eS1fLGs9eSt3O3Bbdit1WzBdXT14LWkuYzJsKFQpLHBbdit1WzFdXT1pLmMybChrKS14LHBbdit1WzJdXT0wLHBbdit1WzNdXT0wLGQ9TWF0aC5taW4oZCx5LV8pLGc9TWF0aC5tYXgoZyx5K3cpfX19aFthXT17cG9zaXRpb25zOnIsZXJyb3JzOnAsX2JuZHM6W2QsZ119fX1yZXR1cm4gcChpLGwpLHAoYSx1KSxofSx0ZXh0UG9zaXRpb246ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1lLl9sZW5ndGgsbz17fTtpZihmLmhhc01hcmtlcnMoZSkpe3ZhciBzPXIuZm9udCxsPXIuYWxpZ24sYz1yLmJhc2VsaW5lO2ZvcihvLm9mZnNldD1uZXcgQXJyYXkoYSksaT0wO2k8YTtpKyspe3ZhciB1PW4uc2l6ZXM/bi5zaXplc1tpXTpuLnNpemUsaD1BcnJheS5pc0FycmF5KHMpP3NbaV0uc2l6ZTpzLnNpemUscD1BcnJheS5pc0FycmF5KGwpP2wubGVuZ3RoPjE/bFtpXTpsWzBdOmwsZD1BcnJheS5pc0FycmF5KGMpP2MubGVuZ3RoPjE/Y1tpXTpjWzBdOmMsZz1tW3BdLHY9bVtkXSx5PXU/dS8uOCsxOjAseD0tdip5LS41KnY7by5vZmZzZXRbaV09W2cqeS9oLHgvaF19fXJldHVybiBvfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6Njc5LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3NTIsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODMxLCIuLi8uLi9yZWdpc3RyeSI6OTExLCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTIwNCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxMiwiLi9jb25zdGFudHMiOjEyNDEsIi4vaGVscGVycyI6MTI0NiwiY29sb3Itbm9ybWFsaXplIjoxMjUsImZhc3QtaXNudW1lcmljIjoyNDEsInN2Zy1wYXRoLXNkZiI6NTc0fV0sMTI0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuL2hlbHBlcnMiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxsPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxjPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksZj10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLGg9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGQ9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGcpe2Z1bmN0aW9uIG0ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX12YXIgdj0hIXQubWFya2VyJiZhLmlzT3BlblN5bWJvbCh0Lm1hcmtlci5zeW1ib2wpLHk9bC5pc0J1YmJsZSh0KSx4PWModCxlLGcsbSk7aWYoeCl7dSh0LGUsZyxtKTt2YXIgYj14PHMuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIjttKCJ0ZXh0IiksbSgiaG92ZXJ0ZXh0IiksbSgiaG92ZXJ0ZW1wbGF0ZSIpLG0oIm1vZGUiLGIpLGwuaGFzTGluZXMoZSkmJihtKCJjb25uZWN0Z2FwcyIpLGgodCxlLHIsZyxtKSxtKCJsaW5lLnNoYXBlIikpLGwuaGFzTWFya2VycyhlKSYmKGYodCxlLHIsZyxtKSxtKCJtYXJrZXIubGluZS53aWR0aCIsdnx8eT8xOjApKSxsLmhhc1RleHQoZSkmJihtKCJ0ZXh0dGVtcGxhdGUiKSxkKHQsZSxnLG0pKTt2YXIgXz0oZS5saW5lfHx7fSkuY29sb3Isdz0oZS5tYXJrZXJ8fHt9KS5jb2xvcjttKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZwKHQsZSxyLG0pO3ZhciBUPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO1QodCxlLF98fHd8fHIse2F4aXM6InkifSksVCh0LGUsX3x8d3x8cix7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxtKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMTkxLCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTE5NSwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMjAwLCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTIwNiwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjEyMDcsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTIsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxMywiLi4vc2NhdHRlci94eV9kZWZhdWx0cyI6MTIxNCwiLi9hdHRyaWJ1dGVzIjoxMjM5LCIuL2hlbHBlcnMiOjEyNDZ9XSwxMjQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNO2UuZXhwb3J0cz17c3R5bGVUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbz10WzBdLHM9by50cmFjZSxsPW8udCxjPWwuX3NjZW5lLHU9bC5pbmRleCxmPWMuc2VsZWN0QmF0Y2hbdV0saD1jLnVuc2VsZWN0QmF0Y2hbdV0scD1jLnRleHRPcHRpb25zW3VdLGQ9Yy50ZXh0U2VsZWN0ZWRPcHRpb25zW3VdfHx7fSxnPWMudGV4dFVuc2VsZWN0ZWRPcHRpb25zW3VdfHx7fSxtPW4uZXh0ZW5kRmxhdCh7fSxwKTtpZihmLmxlbmd0aHx8aC5sZW5ndGgpe3ZhciB2PWQuY29sb3IseT1nLmNvbG9yLHg9cC5jb2xvcixiPUFycmF5LmlzQXJyYXkoeCk7Zm9yKG0uY29sb3I9bmV3IEFycmF5KHMuX2xlbmd0aCksZT0wO2U8Zi5sZW5ndGg7ZSsrKXI9ZltlXSxtLmNvbG9yW3JdPXZ8fChiP3hbcl06eCk7Zm9yKGU9MDtlPGgubGVuZ3RoO2UrKyl7cj1oW2VdO3ZhciBfPWI/eFtyXTp4O20uY29sb3Jbcl09eXx8KHY/XzppLmFkZE9wYWNpdHkoXyxhKSl9fWMuZ2xUZXh0W3VdLnVwZGF0ZShtKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzUyLCIuLi8uLi9saWIiOjc3OH1dLDEyNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9mb3JtYXRfbGFiZWxzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Lmk7cmV0dXJuIngiaW4gdHx8KHQueD1lLl94W2ldKSwieSJpbiB0fHwodC55PWUuX3lbaV0pLG4odCxlLHIpfX0seyIuLi9zY2F0dGVyL2Zvcm1hdF9sYWJlbHMiOjExOTZ9XSwxMjQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ci5pc09wZW5TeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P24uT1BFTl9SRS50ZXN0KHQpOnQlMjAwPjEwMH0sci5pc0RvdFN5bWJvbD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bi5ET1RfUkUudGVzdCh0KTp0PjIwMH19LHsiLi9jb25zdGFudHMiOjEyNDF9XSwxMjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIik7ZnVuY3Rpb24gbyh0LGUscixvKXt2YXIgcz10LnhhLGw9dC55YSxjPXQuZGlzdGFuY2UsdT10LmR4eSxmPXQuaW5kZXgsaD17cG9pbnROdW1iZXI6Zix4OmVbZl0seTpyW2ZdfTtoLnR4PUFycmF5LmlzQXJyYXkoby50ZXh0KT9vLnRleHRbZl06by50ZXh0LGguaHR4PUFycmF5LmlzQXJyYXkoby5ob3ZlcnRleHQpP28uaG92ZXJ0ZXh0W2ZdOm8uaG92ZXJ0ZXh0LGguZGF0YT1BcnJheS5pc0FycmF5KG8uY3VzdG9tZGF0YSk/by5jdXN0b21kYXRhW2ZdOm8uY3VzdG9tZGF0YSxoLnRwPUFycmF5LmlzQXJyYXkoby50ZXh0cG9zaXRpb24pP28udGV4dHBvc2l0aW9uW2ZdOm8udGV4dHBvc2l0aW9uO3ZhciBwPW8udGV4dGZvbnQ7cCYmKGgudHM9aS5pc0FycmF5T3JUeXBlZEFycmF5KHAuc2l6ZSk/cC5zaXplW2ZdOnAuc2l6ZSxoLnRjPUFycmF5LmlzQXJyYXkocC5jb2xvcik/cC5jb2xvcltmXTpwLmNvbG9yLGgudGY9QXJyYXkuaXNBcnJheShwLmZhbWlseSk/cC5mYW1pbHlbZl06cC5mYW1pbHkpO3ZhciBkPW8ubWFya2VyO2QmJihoLm1zPWkuaXNBcnJheU9yVHlwZWRBcnJheShkLnNpemUpP2Quc2l6ZVtmXTpkLnNpemUsaC5tbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZC5vcGFjaXR5KT9kLm9wYWNpdHlbZl06ZC5vcGFjaXR5LGgubXg9aS5pc0FycmF5T3JUeXBlZEFycmF5KGQuc3ltYm9sKT9kLnN5bWJvbFtmXTpkLnN5bWJvbCxoLm1jPWkuaXNBcnJheU9yVHlwZWRBcnJheShkLmNvbG9yKT9kLmNvbG9yW2ZdOmQuY29sb3IpO3ZhciBnPWQmJmQubGluZTtnJiYoaC5tbGM9QXJyYXkuaXNBcnJheShnLmNvbG9yKT9nLmNvbG9yW2ZdOmcuY29sb3IsaC5tbHc9aS5pc0FycmF5T3JUeXBlZEFycmF5KGcud2lkdGgpP2cud2lkdGhbZl06Zy53aWR0aCk7dmFyIG09ZCYmZC5ncmFkaWVudDttJiYibm9uZSIhPT1tLnR5cGUmJihoLm1ndD1BcnJheS5pc0FycmF5KG0udHlwZSk/bS50eXBlW2ZdOm0udHlwZSxoLm1nYz1BcnJheS5pc0FycmF5KG0uY29sb3IpP20uY29sb3JbZl06bS5jb2xvcik7dmFyIHY9cy5jMnAoaC54LCEwKSx5PWwuYzJwKGgueSwhMCkseD1oLm1yY3x8MSxiPW8uaG92ZXJsYWJlbDtiJiYoaC5oYmc9QXJyYXkuaXNBcnJheShiLmJnY29sb3IpP2IuYmdjb2xvcltmXTpiLmJnY29sb3IsaC5oYmM9QXJyYXkuaXNBcnJheShiLmJvcmRlcmNvbG9yKT9iLmJvcmRlcmNvbG9yW2ZdOmIuYm9yZGVyY29sb3IsaC5odHM9aS5pc0FycmF5T3JUeXBlZEFycmF5KGIuZm9udC5zaXplKT9iLmZvbnQuc2l6ZVtmXTpiLmZvbnQuc2l6ZSxoLmh0Yz1BcnJheS5pc0FycmF5KGIuZm9udC5jb2xvcik/Yi5mb250LmNvbG9yW2ZdOmIuZm9udC5jb2xvcixoLmh0Zj1BcnJheS5pc0FycmF5KGIuZm9udC5mYW1pbHkpP2IuZm9udC5mYW1pbHlbZl06Yi5mb250LmZhbWlseSxoLmhubD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoYi5uYW1lbGVuZ3RoKT9iLm5hbWVsZW5ndGhbZl06Yi5uYW1lbGVuZ3RoKTt2YXIgXz1vLmhvdmVyaW5mbztfJiYoaC5oaT1BcnJheS5pc0FycmF5KF8pP19bZl06Xyk7dmFyIHc9by5ob3ZlcnRlbXBsYXRlO3cmJihoLmh0PUFycmF5LmlzQXJyYXkodyk/d1tmXTp3KTt2YXIgVD17fTtUW3QuaW5kZXhdPWg7dmFyIGs9by5fb3JpZ1gsTT1vLl9vcmlnWSxBPWkuZXh0ZW5kRmxhdCh7fSx0LHtjb2xvcjphKG8saCkseDA6di14LHgxOnYreCx4TGFiZWxWYWw6az9rW2ZdOmgueCx5MDp5LXgseTE6eSt4LHlMYWJlbFZhbDpNP01bZl06aC55LGNkOlQsZGlzdGFuY2U6YyxzcGlrZURpc3RhbmNlOnUsaG92ZXJ0ZW1wbGF0ZTpoLmh0fSk7cmV0dXJuIGguaHR4P0EudGV4dD1oLmh0eDpoLnR4P0EudGV4dD1oLnR4Om8udGV4dCYmKEEudGV4dD1vLnRleHQpLGkuZmlsbFRleHQoaCxvLEEpLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJob3ZlckluZm8iKShoLG8sQSksQX1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEscyxsLGMsdSxmLGgscCxkPXQuY2QsZz1kWzBdLnQsbT1kWzBdLnRyYWNlLHY9dC54YSx5PXQueWEseD1nLngsYj1nLnksXz12LmMycChlKSx3PXkuYzJwKHIpLFQ9dC5kaXN0YW5jZTtpZihnLnRyZWUpe3ZhciBrPXYucDJjKF8tVCksTT12LnAyYyhfK1QpLEE9eS5wMmMody1UKSxTPXkucDJjKHcrVCk7aT0ieCI9PT1uP2cudHJlZS5yYW5nZShNYXRoLm1pbihrLE0pLE1hdGgubWluKHkuX3JsWzBdLHkuX3JsWzFdKSxNYXRoLm1heChrLE0pLE1hdGgubWF4KHkuX3JsWzBdLHkuX3JsWzFdKSk6Zy50cmVlLnJhbmdlKE1hdGgubWluKGssTSksTWF0aC5taW4oQSxTKSxNYXRoLm1heChrLE0pLE1hdGgubWF4KEEsUykpfWVsc2UgaT1nLmlkczt2YXIgRT1UO2lmKCJ4Ij09PW4pZm9yKGM9MDtjPGkubGVuZ3RoO2MrKylzPXhbaVtjXV0sKHU9TWF0aC5hYnModi5jMnAocyktXykpPEUmJihFPXUsZj15LmMycChiW2lbY11dKS13LHA9TWF0aC5zcXJ0KHUqdStmKmYpLGE9aVtjXSk7ZWxzZSBmb3IoYz1pLmxlbmd0aC0xO2M+LTE7Yy0tKXM9eFtpW2NdXSxsPWJbaVtjXV0sdT12LmMycChzKS1fLGY9eS5jMnAobCktdywoaD1NYXRoLnNxcnQodSp1K2YqZikpPEUmJihFPXA9aCxhPWlbY10pO3JldHVybiB0LmluZGV4PWEsdC5kaXN0YW5jZT1FLHQuZHh5PXAsdm9pZCAwPT09YT9bdF06W28odCx4LGIsbSldfSxjYWxjSG92ZXI6b319LHsiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMTk3fV0sMTI0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2hvdmVyIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcmdsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiZ2wiLCJyZWdsIiwiY2FydGVzaWFuIiwic3ltYm9scyIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuLi9zY2F0dGVyL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGhvdmVyUG9pbnRzOm4uaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4NDEsIi4uL3NjYXR0ZXIvY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjExOTMsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA1LCIuL2F0dHJpYnV0ZXMiOjEyMzksIi4vY2FsYyI6MTI0MCwiLi9kZWZhdWx0cyI6MTI0MywiLi9mb3JtYXRfbGFiZWxzIjoxMjQ1LCIuL2hvdmVyIjoxMjQ3LCIuL3Bsb3QiOjEyNDksIi4vc2VsZWN0IjoxMjUxfV0sMTI0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLXNjYXR0ZXIyZCIpLGk9dCgicmVnbC1saW5lMmQiKSxhPXQoInJlZ2wtZXJyb3IyZCIpLG89dCgiZ2wtdGV4dCIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKS5zZWxlY3RNb2RlLGM9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpLHU9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGY9dCgiLi4vc2NhdHRlci9saW5rX3RyYWNlcyIpLGg9dCgiLi9lZGl0X3N0eWxlIikuc3R5bGVUZXh0U2VsZWN0aW9uO2Z1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXQuX3NpemUsaT10LndpZHRoLGE9dC5oZWlnaHQ7cmV0dXJuW24ubCtlLmRvbWFpblswXSpuLncsbi5iK3IuZG9tYWluWzBdKm4uaCxpLW4uci0oMS1lLmRvbWFpblsxXSkqbi53LGEtbi50LSgxLXIuZG9tYWluWzFdKSpuLmhdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciBkLGcsbT10Ll9mdWxsTGF5b3V0LHY9ZS5fc2NlbmUseT1lLnhheGlzLHg9ZS55YXhpcztpZih2KWlmKGModCxbIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiLCJPRVNfZWxlbWVudF9pbmRleF91aW50Il0pKXt2YXIgYj12LmNvdW50LF89bS5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2w7aWYoZih0LGUsciksdi5kaXJ0eSl7aWYoITA9PT12LmVycm9yMmQmJih2LmVycm9yMmQ9YShfKSksITA9PT12LmxpbmUyZCYmKHYubGluZTJkPWkoXykpLCEwPT09di5zY2F0dGVyMmQmJih2LnNjYXR0ZXIyZD1uKF8se2NvbnN0UG9pbnRTaXplOiEwfSkpLCEwPT09di5maWxsMmQmJih2LmZpbGwyZD1pKF8pKSwhMD09PXYuZ2xUZXh0KWZvcih2LmdsVGV4dD1uZXcgQXJyYXkoYiksZD0wO2Q8YjtkKyspdi5nbFRleHRbZF09bmV3IG8oXyk7aWYodi5nbFRleHQpe2lmKGI+di5nbFRleHQubGVuZ3RoKXt2YXIgdz1iLXYuZ2xUZXh0Lmxlbmd0aDtmb3IoZD0wO2Q8dztkKyspdi5nbFRleHQucHVzaChuZXcgbyhfKSl9ZWxzZSBpZihiPHYuZ2xUZXh0Lmxlbmd0aCl7dmFyIFQ9di5nbFRleHQubGVuZ3RoLWI7di5nbFRleHQuc3BsaWNlKGIsVCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5kZXN0cm95KCl9KSl9Zm9yKGQ9MDtkPGI7ZCsrKXYuZ2xUZXh0W2RdLnVwZGF0ZSh2LnRleHRPcHRpb25zW2RdKX1pZih2LmxpbmUyZCYmKHYubGluZTJkLnVwZGF0ZSh2LmxpbmVPcHRpb25zKSx2LmxpbmVPcHRpb25zPXYubGluZU9wdGlvbnMubWFwKChmdW5jdGlvbih0KXtpZih0JiZ0LnBvc2l0aW9ucyl7Zm9yKHZhciBlPXQucG9zaXRpb25zLHI9MDtyPGUubGVuZ3RoJiYoaXNOYU4oZVtyXSl8fGlzTmFOKGVbcisxXSkpOylyKz0yO2Zvcih2YXIgbj1lLmxlbmd0aC0yO24+ciYmKGlzTmFOKGVbbl0pfHxpc05hTihlW24rMV0pKTspbi09Mjt0LnBvc2l0aW9ucz1lLnNsaWNlKHIsbisyKX1yZXR1cm4gdH0pKSx2LmxpbmUyZC51cGRhdGUodi5saW5lT3B0aW9ucykpLHYuZXJyb3IyZCl7dmFyIGs9KHYuZXJyb3JYT3B0aW9uc3x8W10pLmNvbmNhdCh2LmVycm9yWU9wdGlvbnN8fFtdKTt2LmVycm9yMmQudXBkYXRlKGspfXYuc2NhdHRlcjJkJiZ2LnNjYXR0ZXIyZC51cGRhdGUodi5tYXJrZXJPcHRpb25zKSx2LmZpbGxPcmRlcj1zLnJlcGVhdChudWxsLGIpLHYuZmlsbDJkJiYodi5maWxsT3B0aW9ucz12LmZpbGxPcHRpb25zLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgbj1yW2VdO2lmKHQmJm4mJm5bMF0mJm5bMF0udHJhY2Upe3ZhciBpLGEsbz1uWzBdLHM9by50cmFjZSxsPW8udCxjPXYubGluZU9wdGlvbnNbZV0sdT1bXTtzLl9vd25maWxsJiZ1LnB1c2goZSkscy5fbmV4dHRyYWNlJiZ1LnB1c2goZSsxKSx1Lmxlbmd0aCYmKHYuZmlsbE9yZGVyW2VdPXUpO3ZhciBmLGgscD1bXSxkPWMmJmMucG9zaXRpb25zfHxsLnBvc2l0aW9ucztpZigidG96ZXJveSI9PT1zLmZpbGwpe2ZvcihmPTA7ZjxkLmxlbmd0aCYmaXNOYU4oZFtmKzFdKTspZis9Mjtmb3IoaD1kLmxlbmd0aC0yO2g+ZiYmaXNOYU4oZFtoKzFdKTspaC09MjswIT09ZFtmKzFdJiYocD1bZFtmXSwwXSkscD1wLmNvbmNhdChkLnNsaWNlKGYsaCsyKSksMCE9PWRbaCsxXSYmKHA9cC5jb25jYXQoW2RbaF0sMF0pKX1lbHNlIGlmKCJ0b3plcm94Ij09PXMuZmlsbCl7Zm9yKGY9MDtmPGQubGVuZ3RoJiZpc05hTihkW2ZdKTspZis9Mjtmb3IoaD1kLmxlbmd0aC0yO2g+ZiYmaXNOYU4oZFtoXSk7KWgtPTI7MCE9PWRbZl0mJihwPVswLGRbZisxXV0pLHA9cC5jb25jYXQoZC5zbGljZShmLGgrMikpLDAhPT1kW2hdJiYocD1wLmNvbmNhdChbMCxkW2grMV1dKSl9ZWxzZSBpZigidG9zZWxmIj09PXMuZmlsbHx8InRvbmV4dCI9PT1zLmZpbGwpe2ZvcihwPVtdLGk9MCxhPTA7YTxkLmxlbmd0aDthKz0yKShpc05hTihkW2FdKXx8aXNOYU4oZFthKzFdKSkmJigocD1wLmNvbmNhdChkLnNsaWNlKGksYSkpKS5wdXNoKGRbaV0sZFtpKzFdKSxpPWErMik7cD1wLmNvbmNhdChkLnNsaWNlKGkpKSxpJiZwLnB1c2goZFtpXSxkW2krMV0pfWVsc2V7dmFyIGc9cy5fbmV4dHRyYWNlO2lmKGcpe3ZhciBtPXYubGluZU9wdGlvbnNbZSsxXTtpZihtKXt2YXIgeT1tLnBvc2l0aW9ucztpZigidG9uZXh0eSI9PT1zLmZpbGwpe2ZvcihwPWQuc2xpY2UoKSxlPU1hdGguZmxvb3IoeS5sZW5ndGgvMik7ZS0tOyl7dmFyIHg9eVsyKmVdLGI9eVsyKmUrMV07aXNOYU4oeCl8fGlzTmFOKGIpfHxwLnB1c2goeCxiKX10LmZpbGw9Zy5maWxsY29sb3J9fX19aWYocy5fcHJldnRyYWNlJiYidG9uZXh0Ij09PXMuX3ByZXZ0cmFjZS5maWxsKXt2YXIgXz12LmxpbmVPcHRpb25zW2UtMV0ucG9zaXRpb25zLHc9cC5sZW5ndGgvMixUPVtpPXddO2ZvcihhPTA7YTxfLmxlbmd0aDthKz0yKShpc05hTihfW2FdKXx8aXNOYU4oX1thKzFdKSkmJihULnB1c2goYS8yK3crMSksaT1hKzIpO3A9cC5jb25jYXQoXyksdC5ob2xlPVR9cmV0dXJuIHQuZmlsbG1vZGU9cy5maWxsLHQub3BhY2l0eT1zLm9wYWNpdHksdC5wb3NpdGlvbnM9cCx0fX0pKSx2LmZpbGwyZC51cGRhdGUodi5maWxsT3B0aW9ucykpfXZhciBNPW0uZHJhZ21vZGUsQT1sKE0pLFM9bS5jbGlja21vZGUuaW5kZXhPZigic2VsZWN0Iik+LTE7Zm9yKGQ9MDtkPGI7ZCsrKXt2YXIgRT1yW2RdWzBdLEM9RS50cmFjZSxMPUUudCxJPUwuaW5kZXgsUD1DLl9sZW5ndGgsej1MLngsTz1MLnk7aWYoQy5zZWxlY3RlZHBvaW50c3x8QXx8Uyl7aWYoQXx8KEE9ITApLEMuc2VsZWN0ZWRwb2ludHMpe3ZhciBEPXYuc2VsZWN0QmF0Y2hbSV09cy5zZWxJbmRpY2VzMnNlbFBvaW50cyhDKSxSPXt9O2ZvcihnPTA7ZzxELmxlbmd0aDtnKyspUltEW2ddXT0xO3ZhciBGPVtdO2ZvcihnPTA7ZzxQO2crKylSW2ddfHxGLnB1c2goZyk7di51bnNlbGVjdEJhdGNoW0ldPUZ9dmFyIEI9TC54cHg9bmV3IEFycmF5KFApLE49TC55cHg9bmV3IEFycmF5KFApO2ZvcihnPTA7ZzxQO2crKylCW2ddPXkuYzJwKHpbZ10pLE5bZ109eC5jMnAoT1tnXSl9ZWxzZSBMLnhweD1MLnlweD1udWxsfWlmKEEpe2lmKHYuc2VsZWN0MmR8fCh2LnNlbGVjdDJkPW4obS5fZ2xjYW52YXMuZGF0YSgpWzFdLnJlZ2wpKSx2LnNjYXR0ZXIyZCl7dmFyIGo9bmV3IEFycmF5KGIpO2ZvcihkPTA7ZDxiO2QrKylqW2RdPXYuc2VsZWN0QmF0Y2hbZF0ubGVuZ3RofHx2LnVuc2VsZWN0QmF0Y2hbZF0ubGVuZ3RoP3YubWFya2VyVW5zZWxlY3RlZE9wdGlvbnNbZF06e307di5zY2F0dGVyMmQudXBkYXRlKGopfXYuc2VsZWN0MmQmJih2LnNlbGVjdDJkLnVwZGF0ZSh2Lm1hcmtlck9wdGlvbnMpLHYuc2VsZWN0MmQudXBkYXRlKHYubWFya2VyU2VsZWN0ZWRPcHRpb25zKSksdi5nbFRleHQmJnIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9KCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e307dS5oYXNUZXh0KGUpJiZoKHQpfSkpfWVsc2Ugdi5zY2F0dGVyMmQmJnYuc2NhdHRlcjJkLnVwZGF0ZSh2Lm1hcmtlck9wdGlvbnMpO3ZhciBVPXt2aWV3cG9ydDpwKG0seSx4KSxyYW5nZTpbKHkuX3JsfHx5LnJhbmdlKVswXSwoeC5fcmx8fHgucmFuZ2UpWzBdLCh5Ll9ybHx8eS5yYW5nZSlbMV0sKHguX3JsfHx4LnJhbmdlKVsxXV19LFY9cy5yZXBlYXQoVSx2LmNvdW50KTt2LmZpbGwyZCYmdi5maWxsMmQudXBkYXRlKFYpLHYubGluZTJkJiZ2LmxpbmUyZC51cGRhdGUoViksdi5lcnJvcjJkJiZ2LmVycm9yMmQudXBkYXRlKFYuY29uY2F0KFYpKSx2LnNjYXR0ZXIyZCYmdi5zY2F0dGVyMmQudXBkYXRlKFYpLHYuc2VsZWN0MmQmJnYuc2VsZWN0MmQudXBkYXRlKFYpLHYuZ2xUZXh0JiZ2LmdsVGV4dC5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnVwZGF0ZShVKX0pKX1lbHNlIHYuaW5pdCgpfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NjEsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsIjo3OTEsIi4uL3NjYXR0ZXIvbGlua190cmFjZXMiOjEyMDMsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTIsIi4vZWRpdF9zdHlsZSI6MTI0NCwiZ2wtdGV4dCI6MzUyLCJyZWdsLWVycm9yMmQiOjUzNCwicmVnbC1saW5lMmQiOjUzNSwicmVnbC1zY2F0dGVyMmQiOjUzN31dLDEyNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fc2NlbmUsaT17Y291bnQ6MCxkaXJ0eTohMCxsaW5lT3B0aW9uczpbXSxmaWxsT3B0aW9uczpbXSxtYXJrZXJPcHRpb25zOltdLG1hcmtlclNlbGVjdGVkT3B0aW9uczpbXSxtYXJrZXJVbnNlbGVjdGVkT3B0aW9uczpbXSxlcnJvclhPcHRpb25zOltdLGVycm9yWU9wdGlvbnM6W10sdGV4dE9wdGlvbnM6W10sdGV4dFNlbGVjdGVkT3B0aW9uczpbXSx0ZXh0VW5zZWxlY3RlZE9wdGlvbnM6W10sc2VsZWN0QmF0Y2g6W10sdW5zZWxlY3RCYXRjaDpbXX0sYT17ZmlsbDJkOiExLHNjYXR0ZXIyZDohMSxlcnJvcjJkOiExLGxpbmUyZDohMSxnbFRleHQ6ITEsc2VsZWN0MmQ6ITF9O3JldHVybiBlLl9zY2VuZXx8KChyPWUuX3NjZW5lPXt9KS5pbml0PWZ1bmN0aW9uKCl7bi5leHRlbmRGbGF0KHIsYSxpKX0sci5pbml0KCksci51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9bi5yZXBlYXQodCxyLmNvdW50KTtpZihyLmZpbGwyZCYmci5maWxsMmQudXBkYXRlKGUpLHIuc2NhdHRlcjJkJiZyLnNjYXR0ZXIyZC51cGRhdGUoZSksci5saW5lMmQmJnIubGluZTJkLnVwZGF0ZShlKSxyLmVycm9yMmQmJnIuZXJyb3IyZC51cGRhdGUoZS5jb25jYXQoZSkpLHIuc2VsZWN0MmQmJnIuc2VsZWN0MmQudXBkYXRlKGUpLHIuZ2xUZXh0KWZvcih2YXIgaT0wO2k8ci5jb3VudDtpKyspci5nbFRleHRbaV0udXBkYXRlKHQpfSxyLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ci5jb3VudCxlPXIuZmlsbDJkLGk9ci5lcnJvcjJkLGE9ci5saW5lMmQsbz1yLnNjYXR0ZXIyZCxzPXIuZ2xUZXh0LGw9ci5zZWxlY3QyZCxjPXIuc2VsZWN0QmF0Y2gsdT1yLnVuc2VsZWN0QmF0Y2gsZj0wO2Y8dDtmKyspe2lmKGUmJnIuZmlsbE9yZGVyW2ZdJiZlLmRyYXcoci5maWxsT3JkZXJbZl0pLGEmJnIubGluZU9wdGlvbnNbZl0mJmEuZHJhdyhmKSxpJiYoci5lcnJvclhPcHRpb25zW2ZdJiZpLmRyYXcoZiksci5lcnJvcllPcHRpb25zW2ZdJiZpLmRyYXcoZit0KSksbyYmci5tYXJrZXJPcHRpb25zW2ZdKWlmKHVbZl0ubGVuZ3RoKXt2YXIgaD1uLnJlcGVhdChbXSxyLmNvdW50KTtoW2ZdPXVbZl0sby5kcmF3KGgpfWVsc2UgY1tmXS5sZW5ndGh8fG8uZHJhdyhmKTtzW2ZdJiZyLnRleHRPcHRpb25zW2ZdJiZzW2ZdLnJlbmRlcigpfWwmJmwuZHJhdyhjKSxyLmRpcnR5PSExfSxyLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyLmZpbGwyZCYmci5maWxsMmQuZGVzdHJveSYmci5maWxsMmQuZGVzdHJveSgpLHIuc2NhdHRlcjJkJiZyLnNjYXR0ZXIyZC5kZXN0cm95JiZyLnNjYXR0ZXIyZC5kZXN0cm95KCksci5lcnJvcjJkJiZyLmVycm9yMmQuZGVzdHJveSYmci5lcnJvcjJkLmRlc3Ryb3koKSxyLmxpbmUyZCYmci5saW5lMmQuZGVzdHJveSYmci5saW5lMmQuZGVzdHJveSgpLHIuc2VsZWN0MmQmJnIuc2VsZWN0MmQuZGVzdHJveSYmci5zZWxlY3QyZC5kZXN0cm95KCksci5nbFRleHQmJnIuZ2xUZXh0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSYmdC5kZXN0cm95KCl9KSksci5saW5lT3B0aW9ucz1udWxsLHIuZmlsbE9wdGlvbnM9bnVsbCxyLm1hcmtlck9wdGlvbnM9bnVsbCxyLm1hcmtlclNlbGVjdGVkT3B0aW9ucz1udWxsLHIubWFya2VyVW5zZWxlY3RlZE9wdGlvbnM9bnVsbCxyLmVycm9yWE9wdGlvbnM9bnVsbCxyLmVycm9yWU9wdGlvbnM9bnVsbCxyLnRleHRPcHRpb25zPW51bGwsci50ZXh0U2VsZWN0ZWRPcHRpb25zPW51bGwsci50ZXh0VW5zZWxlY3RlZE9wdGlvbnM9bnVsbCxyLnNlbGVjdEJhdGNoPW51bGwsci51bnNlbGVjdEJhdGNoPW51bGwsZS5fc2NlbmU9bnVsbH0pLHIuZGlydHl8fG4uZXh0ZW5kRmxhdChyLGkpLHJ9fSx7Ii4uLy4uL2xpYiI6Nzc4fV0sMTI1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksaT10KCIuL2VkaXRfc3R5bGUiKS5zdHlsZVRleHRTZWxlY3Rpb247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jZCxhPVtdLG89clswXS50cmFjZSxzPXJbMF0udCxsPW8uX2xlbmd0aCxjPXMueCx1PXMueSxmPXMuX3NjZW5lLGg9cy5pbmRleDtpZighZilyZXR1cm4gYTt2YXIgcD1uLmhhc1RleHQobyksZD1uLmhhc01hcmtlcnMobyksZz0hZCYmIXA7aWYoITAhPT1vLnZpc2libGV8fGcpcmV0dXJuIGE7dmFyIG09W10sdj1bXTtpZighMSE9PWUmJiFlLmRlZ2VuZXJhdGUpZm9yKHZhciB5PTA7eTxsO3krKyllLmNvbnRhaW5zKFtzLnhweFt5XSxzLnlweFt5XV0sITEseSx0KT8obS5wdXNoKHkpLGEucHVzaCh7cG9pbnROdW1iZXI6eSx4OmNbeV0seTp1W3ldfSkpOnYucHVzaCh5KTtpZihkKXt2YXIgeD1mLnNjYXR0ZXIyZDtpZihtLmxlbmd0aHx8di5sZW5ndGgpe2lmKCFmLnNlbGVjdEJhdGNoW2hdLmxlbmd0aCYmIWYudW5zZWxlY3RCYXRjaFtoXS5sZW5ndGgpe3ZhciBiPW5ldyBBcnJheShmLmNvdW50KTtiW2hdPWYubWFya2VyVW5zZWxlY3RlZE9wdGlvbnNbaF0seC51cGRhdGUuYXBwbHkoeCxiKX19ZWxzZXt2YXIgXz1uZXcgQXJyYXkoZi5jb3VudCk7X1toXT1mLm1hcmtlck9wdGlvbnNbaF0seC51cGRhdGUuYXBwbHkoeCxfKX19cmV0dXJuIGYuc2VsZWN0QmF0Y2hbaF09bSxmLnVuc2VsZWN0QmF0Y2hbaF09dixwJiZpKHIpLGF9fSx7Ii4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTIsIi4vZWRpdF9zdHlsZSI6MTI0NH1dLDEyNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyIpLG89dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxmPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxoPWEubGluZSxwPWEubWFya2VyO2UuZXhwb3J0cz1mKHtsb246YS5sb24sbGF0OmEubGF0LG1vZGU6dSh7fSxvLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDp1KHt9LG8udGV4dCx7fSksdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJsYXQiLCJsb24iLCJ0ZXh0Il19KSxob3ZlcnRleHQ6dSh7fSxvLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6aC5jb2xvcix3aWR0aDpoLndpZHRofSxjb25uZWN0Z2FwczpvLmNvbm5lY3RnYXBzLG1hcmtlcjp1KHtzeW1ib2w6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwfSxhbmdsZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OiJhdXRvIixhcnJheU9rOiEwfSxhbGxvd292ZXJsYXA6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6cC5vcGFjaXR5LHNpemU6cC5zaXplLHNpemVyZWY6cC5zaXplcmVmLHNpemVtaW46cC5zaXplbWluLHNpemVtb2RlOnAuc2l6ZW1vZGV9LGMoIm1hcmtlciIpKSxmaWxsOmEuZmlsbCxmaWxsY29sb3I6by5maWxsY29sb3IsdGV4dGZvbnQ6cy5sYXllcnMuc3ltYm9sLnRleHRmb250LHRleHRwb3NpdGlvbjpzLmxheWVycy5zeW1ib2wudGV4dHBvc2l0aW9uLGJlbG93Ont2YWxUeXBlOiJzdHJpbmcifSxzZWxlY3RlZDp7bWFya2VyOm8uc2VsZWN0ZWQubWFya2VyfSx1bnNlbGVjdGVkOnttYXJrZXI6by51bnNlbGVjdGVkLm1hcmtlcn0saG92ZXJpbmZvOnUoe30sbC5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpfSwiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODEwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjQsIi4uLy4uL3Bsb3RzL21hcGJveC9sYXlvdXRfYXR0cmlidXRlcyI6ODg3LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDYsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE4NywiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIjoxMjI5fV0sMTI1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLG89dCgiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHU9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGY9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnZlcnRfdGV4dF9vcHRzIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUscD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKS5ORVdMSU5FUyxkPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLkJSX1RBR19BTEw7ZnVuY3Rpb24gZygpe3JldHVybntnZW9qc29uOm8ubWFrZUJsYW5rKCksbGF5b3V0Ont2aXNpYmlsaXR5OiJub25lIn0scGFpbnQ6e319fWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gaS5pc0FycmF5T3JUeXBlZEFycmF5KHQpP2U/ZnVuY3Rpb24oZSl7cmV0dXJuIG4odFtlXSk/K3RbZV06MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19OnQ/ZnVuY3Rpb24oKXtyZXR1cm4gdH06dn1mdW5jdGlvbiB2KCl7cmV0dXJuIiJ9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdFswXT09PWF9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYT1lWzBdLnRyYWNlLHg9ITA9PT1hLnZpc2libGUmJjAhPT1hLl9sZW5ndGgsYj0ibm9uZSIhPT1hLmZpbGwsXz11Lmhhc0xpbmVzKGEpLHc9dS5oYXNNYXJrZXJzKGEpLFQ9dS5oYXNUZXh0KGEpLGs9dyYmImNpcmNsZSI9PT1hLm1hcmtlci5zeW1ib2wsTT13JiYiY2lyY2xlIiE9PWEubWFya2VyLnN5bWJvbCxBPWcoKSxTPWcoKSxFPWcoKSxDPWcoKSxMPXtmaWxsOkEsbGluZTpTLGNpcmNsZTpFLHN5bWJvbDpDfTtpZigheClyZXR1cm4gTDtpZigoYnx8XykmJihyPW8uY2FsY1RyYWNlVG9MaW5lQ29vcmRzKGUpKSxiJiYoQS5nZW9qc29uPW8ubWFrZVBvbHlnb24ociksQS5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsaS5leHRlbmRGbGF0KEEucGFpbnQseyJmaWxsLWNvbG9yIjphLmZpbGxjb2xvcn0pKSxfJiYoUy5nZW9qc29uPW8ubWFrZUxpbmUociksUy5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsaS5leHRlbmRGbGF0KFMucGFpbnQseyJsaW5lLXdpZHRoIjphLmxpbmUud2lkdGgsImxpbmUtY29sb3IiOmEubGluZS5jb2xvciwibGluZS1vcGFjaXR5IjphLm9wYWNpdHl9KSksayl7dmFyIEk9ZnVuY3Rpb24odCl7dmFyIGUscixhLG8sdT10WzBdLnRyYWNlLGY9dS5tYXJrZXIsaD11LnNlbGVjdGVkcG9pbnRzLHA9aS5pc0FycmF5T3JUeXBlZEFycmF5KGYuY29sb3IpLGQ9aS5pc0FycmF5T3JUeXBlZEFycmF5KGYuc2l6ZSksZz1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5vcGFjaXR5KTtmdW5jdGlvbiBtKHQpe3JldHVybiB1Lm9wYWNpdHkqdH1wJiYocj1zLmhhc0NvbG9yc2NhbGUodSwibWFya2VyIik/cy5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2UoZik6aS5pZGVudGl0eSk7ZCYmKGE9Yyh1KSk7ZyYmKG89ZnVuY3Rpb24odCl7cmV0dXJuIG0obih0KT8raS5jb25zdHJhaW4odCwwLDEpOjApfSk7dmFyIHYseD1bXTtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgYj10W2VdLF89Yi5sb25sYXQ7aWYoIXkoXykpe3ZhciB3PXt9O3ImJih3Lm1jYz1iLm1jYz1yKGIubWMpKSxhJiYody5tcmM9Yi5tcmM9YShiLm1zKSksbyYmKHcubW89byhiLm1vKSksaCYmKHcuc2VsZWN0ZWQ9Yi5zZWxlY3RlZHx8MCkseC5wdXNoKHt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOl99LHByb3BlcnRpZXM6d30pfX1pZihoKWZvcih2PWwubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyh1KSxlPTA7ZTx4Lmxlbmd0aDtlKyspe3ZhciBUPXhbZV0ucHJvcGVydGllczt2LnNlbGVjdGVkT3BhY2l0eUZuJiYoVC5tbz1tKHYuc2VsZWN0ZWRPcGFjaXR5Rm4oVCkpKSx2LnNlbGVjdGVkQ29sb3JGbiYmKFQubWNjPXYuc2VsZWN0ZWRDb2xvckZuKFQpKSx2LnNlbGVjdGVkU2l6ZUZuJiYoVC5tcmM9di5zZWxlY3RlZFNpemVGbihUKSl9cmV0dXJue2dlb2pzb246e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczp4fSxtY2M6cHx8diYmdi5zZWxlY3RlZENvbG9yRm4/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibWNjIn06Zi5jb2xvcixtcmM6ZHx8diYmdi5zZWxlY3RlZFNpemVGbj97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtcmMifTooaz1mLnNpemUsay8yKSxtbzpnfHx2JiZ2LnNlbGVjdGVkT3BhY2l0eUZuP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1vIn06bShmLm9wYWNpdHkpfTt2YXIga30oZSk7RS5nZW9qc29uPUkuZ2VvanNvbixFLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixpLmV4dGVuZEZsYXQoRS5wYWludCx7ImNpcmNsZS1jb2xvciI6SS5tY2MsImNpcmNsZS1yYWRpdXMiOkkubXJjLCJjaXJjbGUtb3BhY2l0eSI6SS5tb30pfWlmKChNfHxUKSYmKEMuZ2VvanNvbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9mdWxsTGF5b3V0LG49dFswXS50cmFjZSxhPW4ubWFya2VyfHx7fSxvPWEuc3ltYm9sLHM9YS5hbmdsZSxsPSJjaXJjbGUiIT09bz9tKG8pOnYsYz0iYXV0byIhPT1zP20ocywhMCk6dixmPXUuaGFzVGV4dChuKT9tKG4udGV4dCk6dixnPVtdLHg9MDt4PHQubGVuZ3RoO3grKyl7dmFyIGI9dFt4XTtpZigheShiLmxvbmxhdCkpe3ZhciBfLHc9bi50ZXh0dGVtcGxhdGU7aWYodyl7dmFyIFQ9QXJyYXkuaXNBcnJheSh3KT93W3hdfHwiIjp3LGs9bi5fbW9kdWxlLmZvcm1hdExhYmVscyhiLG4sciksTT17fTtoKE0sbixiLmkpO3ZhciBBPW4uX21ldGF8fHt9O189aS50ZXh0dGVtcGxhdGVTdHJpbmcoVCxrLHIuX2QzbG9jYWxlLE0sYixBKX1lbHNlIF89Zih4KTtfJiYoXz1fLnJlcGxhY2UocCwiIikucmVwbGFjZShkLCJcbiIpKSxnLnB1c2goe3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6Yi5sb25sYXR9LHByb3BlcnRpZXM6e3N5bWJvbDpsKHgpLGFuZ2xlOmMoeCksdGV4dDpffX0pfX1yZXR1cm57dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOmd9fShlLHQpLGkuZXh0ZW5kRmxhdChDLmxheW91dCx7dmlzaWJpbGl0eToidmlzaWJsZSIsImljb24taW1hZ2UiOiJ7c3ltYm9sfS0xNSIsInRleHQtZmllbGQiOiJ7dGV4dH0ifSksTSYmKGkuZXh0ZW5kRmxhdChDLmxheW91dCx7Imljb24tc2l6ZSI6YS5tYXJrZXIuc2l6ZS8xMH0pLCJhbmdsZSJpbiBhLm1hcmtlciYmImF1dG8iIT09YS5tYXJrZXIuYW5nbGUmJmkuZXh0ZW5kRmxhdChDLmxheW91dCx7Imljb24tcm90YXRlIjp7dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJhbmdsZSJ9LCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6Im1hcCJ9KSxDLmxheW91dFsiaWNvbi1hbGxvdy1vdmVybGFwIl09YS5tYXJrZXIuYWxsb3dvdmVybGFwLGkuZXh0ZW5kRmxhdChDLnBhaW50LHsiaWNvbi1vcGFjaXR5IjphLm9wYWNpdHkqYS5tYXJrZXIub3BhY2l0eSwiaWNvbi1jb2xvciI6YS5tYXJrZXIuY29sb3J9KSksVCkpe3ZhciBQPShhLm1hcmtlcnx8e30pLnNpemUsej1mKGEudGV4dHBvc2l0aW9uLFApO2kuZXh0ZW5kRmxhdChDLmxheW91dCx7InRleHQtc2l6ZSI6YS50ZXh0Zm9udC5zaXplLCJ0ZXh0LWFuY2hvciI6ei5hbmNob3IsInRleHQtb2Zmc2V0Ijp6Lm9mZnNldH0pLGkuZXh0ZW5kRmxhdChDLnBhaW50LHsidGV4dC1jb2xvciI6YS50ZXh0Zm9udC5jb2xvciwidGV4dC1vcGFjaXR5IjphLm9wYWNpdHl9KX1yZXR1cm4gTH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjY1LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3OSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiOjc3MiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uLy4uL3Bsb3RzL21hcGJveC9jb252ZXJ0X3RleHRfb3B0cyI6ODg0LCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTIwNCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxMiwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDEyNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfWlmKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKCJsb24iKXx8W10saT1yKCJsYXQiKXx8W10sYT1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aCk7cmV0dXJuIGUuX2xlbmd0aD1hLGF9KDAsZSxmKSl7aWYoZigidGV4dCIpLGYoInRleHR0ZW1wbGF0ZSIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJtb2RlIiksZigiYmVsb3ciKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscix1LGYse25vRGFzaDohMH0pLGYoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSl7YSh0LGUscix1LGYse25vTGluZTohMH0pLGYoIm1hcmtlci5hbGxvd292ZXJsYXAiKSxmKCJtYXJrZXIuYW5nbGUiKTt2YXIgaD1lLm1hcmtlcjsiY2lyY2xlIiE9PWguc3ltYm9sJiYobi5pc0FycmF5T3JUeXBlZEFycmF5KGguc2l6ZSkmJihoLnNpemU9aC5zaXplWzBdKSxuLmlzQXJyYXlPclR5cGVkQXJyYXkoaC5jb2xvcikmJihoLmNvbG9yPWguY29sb3JbMF0pKX1pLmhhc1RleHQoZSkmJnModCxlLHUsZix7bm9TZWxlY3Q6ITB9KSxmKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZsKHQsZSxyLGYpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGYpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExOTUsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTIwMCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMDYsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTIsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxMywiLi9hdHRyaWJ1dGVzIjoxMjUyfV0sMTI1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb249ZS5sb24sdC5sYXQ9ZS5sYXQsdH19LHt9XSwxMjU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT17fSxhPXJbZS5zdWJwbG90XS5fc3VicGxvdC5tb2NrQXhpcyxvPXQubG9ubGF0O3JldHVybiBpLmxvbkxhYmVsPW4udGlja1RleHQoYSxhLmMybChvWzBdKSwhMCkudGV4dCxpLmxhdExhYmVsPW4udGlja1RleHQoYSxhLmMybChvWzFdKSwhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4fV0sMTI1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIiksbz1pLmZpbGxUZXh0LHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsPXQuY2QsYz1sWzBdLnRyYWNlLHU9dC54YSxmPXQueWEsaD10LnN1YnBsb3QscD0zNjAqKGU+PTA/TWF0aC5mbG9vcigoZSsxODApLzM2MCk6TWF0aC5jZWlsKChlLTE4MCkvMzYwKSksZD1lLXA7aWYobi5nZXRDbG9zZXN0KGwsKGZ1bmN0aW9uKHQpe3ZhciBlPXQubG9ubGF0O2lmKGVbMF09PT1zKXJldHVybiAxLzA7dmFyIG49aS5tb2RIYWxmKGVbMF0sMzYwKSxhPWVbMV0sbz1oLnByb2plY3QoW24sYV0pLGw9by54LXUuYzJwKFtkLGFdKSxjPW8ueS1mLmMycChbbixyXSkscD1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KGwqbCtjKmMpLXAsMS0zL3ApfSksdCksITEhPT10LmluZGV4KXt2YXIgZz1sW3QuaW5kZXhdLG09Zy5sb25sYXQsdj1baS5tb2RIYWxmKG1bMF0sMzYwKStwLG1bMV1dLHk9dS5jMnAodikseD1mLmMycCh2KSxiPWcubXJjfHwxO3QueDA9eS1iLHQueDE9eStiLHQueTA9eC1iLHQueTE9eCtiO3ZhciBfPXt9O19bYy5zdWJwbG90XT17X3N1YnBsb3Q6aH07dmFyIHc9Yy5fbW9kdWxlLmZvcm1hdExhYmVscyhnLGMsXyk7cmV0dXJuIHQubG9uTGFiZWw9dy5sb25MYWJlbCx0LmxhdExhYmVsPXcubGF0TGFiZWwsdC5jb2xvcj1hKGMsZyksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIpe2lmKHQuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIG49KGUuaGl8fHQuaG92ZXJpbmZvKS5zcGxpdCgiKyIpLGk9LTEhPT1uLmluZGV4T2YoImFsbCIpLGE9LTEhPT1uLmluZGV4T2YoImxvbiIpLHM9LTEhPT1uLmluZGV4T2YoImxhdCIpLGw9ZS5sb25sYXQsYz1bXTtmdW5jdGlvbiB1KHQpe3JldHVybiB0KyJceGIwIn1pfHxhJiZzP2MucHVzaCgiKCIrdShsWzBdKSsiLCAiK3UobFsxXSkrIikiKTphP2MucHVzaChyLmxvbit1KGxbMF0pKTpzJiZjLnB1c2goci5sYXQrdShsWzFdKSk7KGl8fC0xIT09bi5pbmRleE9mKCJ0ZXh0IikpJiZvKGUsdCxjKTtyZXR1cm4gYy5qb2luKCI8YnI+Iil9KGMsZyxsWzBdLnQubGFiZWxzKSx0LmhvdmVydGVtcGxhdGU9Yy5ob3ZlcnRlbXBsYXRlLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY4MywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi8uLi9saWIiOjc3OCwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjExOTd9XSwxMjU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuLi9zY2F0dGVyZ2VvL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0Iiksc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe2UmJmVbMF0udHJhY2UuX2dsVHJhY2UudXBkYXRlKGUpfSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcm1hcGJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvbWFwYm94IiksY2F0ZWdvcmllczpbIm1hcGJveCIsImdsIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9tYXBib3giOjg4NSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDUsIi4uL3NjYXR0ZXJnZW8vY2FsYyI6MTIzMCwiLi9hdHRyaWJ1dGVzIjoxMjUyLCIuL2RlZmF1bHRzIjoxMjU0LCIuL2V2ZW50X2RhdGEiOjEyNTUsIi4vZm9ybWF0X2xhYmVscyI6MTI1NiwiLi9ob3ZlciI6MTI1NywiLi9wbG90IjoxMjU5LCIuL3NlbGVjdCI6MTI2MH1dLDEyNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb252ZXJ0IiksaT10KCIuLi8uLi9wbG90cy9tYXBib3gvY29uc3RhbnRzIikudHJhY2VMYXllclByZWZpeCxhPVsiZmlsbCIsImxpbmUiLCJjaXJjbGUiLCJzeW1ib2wiXTtmdW5jdGlvbiBvKHQsZSl7dGhpcy50eXBlPSJzY2F0dGVybWFwYm94Iix0aGlzLnN1YnBsb3Q9dCx0aGlzLnVpZD1lLHRoaXMuc291cmNlSWRzPXtmaWxsOiJzb3VyY2UtIitlKyItZmlsbCIsbGluZToic291cmNlLSIrZSsiLWxpbmUiLGNpcmNsZToic291cmNlLSIrZSsiLWNpcmNsZSIsc3ltYm9sOiJzb3VyY2UtIitlKyItc3ltYm9sIn0sdGhpcy5sYXllcklkcz17ZmlsbDppK2UrIi1maWxsIixsaW5lOmkrZSsiLWxpbmUiLGNpcmNsZTppK2UrIi1jaXJjbGUiLHN5bWJvbDppK2UrIi1zeW1ib2wifSx0aGlzLmJlbG93PW51bGx9dmFyIHM9by5wcm90b3R5cGU7cy5hZGRTb3VyY2U9ZnVuY3Rpb24odCxlKXt0aGlzLnN1YnBsb3QubWFwLmFkZFNvdXJjZSh0aGlzLnNvdXJjZUlkc1t0XSx7dHlwZToiZ2VvanNvbiIsZGF0YTplLmdlb2pzb259KX0scy5zZXRTb3VyY2VEYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0pLnNldERhdGEoZS5nZW9qc29uKX0scy5hZGRMYXllcj1mdW5jdGlvbih0LGUscil7dGhpcy5zdWJwbG90LmFkZExheWVyKHt0eXBlOnQsaWQ6dGhpcy5sYXllcklkc1t0XSxzb3VyY2U6dGhpcy5zb3VyY2VJZHNbdF0sbGF5b3V0OmUubGF5b3V0LHBhaW50OmUucGFpbnR9LHIpfSxzLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLGksbz10aGlzLnN1YnBsb3Qscz1vLm1hcCxsPW4oby5nZCx0KSxjPW8uYmVsb3dMb29rdXBbInRyYWNlLSIrdGhpcy51aWRdO2lmKGMhPT10aGlzLmJlbG93KXtmb3IoZT1hLmxlbmd0aC0xO2U+PTA7ZS0tKXI9YVtlXSxzLnJlbW92ZUxheWVyKHRoaXMubGF5ZXJJZHNbcl0pO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspaT1sW3I9YVtlXV0sdGhpcy5hZGRMYXllcihyLGksYyk7dGhpcy5iZWxvdz1jfWZvcihlPTA7ZTxhLmxlbmd0aDtlKyspaT1sW3I9YVtlXV0sby5zZXRPcHRpb25zKHRoaXMubGF5ZXJJZHNbcl0sInNldExheW91dFByb3BlcnR5IixpLmxheW91dCksInZpc2libGUiPT09aS5sYXlvdXQudmlzaWJpbGl0eSYmKHRoaXMuc2V0U291cmNlRGF0YShyLGkpLG8uc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW3JdLCJzZXRQYWludFByb3BlcnR5IixpLnBhaW50KSk7dFswXS50cmFjZS5fZ2xUcmFjZT10aGlzfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdWJwbG90Lm1hcCxlPWEubGVuZ3RoLTE7ZT49MDtlLS0pe3ZhciByPWFbZV07dC5yZW1vdmVMYXllcih0aGlzLmxheWVySWRzW3JdKSx0LnJlbW92ZVNvdXJjZSh0aGlzLnNvdXJjZUlkc1tyXSl9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVswXS50cmFjZSxpPW5ldyBvKHQsci51aWQpLHM9bih0LmdkLGUpLGw9aS5iZWxvdz10LmJlbG93TG9va3VwWyJ0cmFjZS0iK3IudWlkXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10sZj1zW3VdO2kuYWRkU291cmNlKHUsZiksaS5hZGRMYXllcih1LGYsbCl9cmV0dXJuIGVbMF0udHJhY2UuX2dsVHJhY2U9aSxpfX0seyIuLi8uLi9wbG90cy9tYXBib3gvY29uc3RhbnRzIjo4ODMsIi4vY29udmVydCI6MTI1M31dLDEyNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG89dC5jZCxzPXQueGF4aXMsbD10LnlheGlzLGM9W10sdT1vWzBdLnRyYWNlO2lmKCFpLmhhc01hcmtlcnModSkpcmV0dXJuW107aWYoITE9PT1lKWZvcihyPTA7cjxvLmxlbmd0aDtyKyspb1tyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGY9b1tyXSxoPWYubG9ubGF0O2lmKGhbMF0hPT1hKXt2YXIgcD1bbi5tb2RIYWxmKGhbMF0sMzYwKSxoWzFdXSxkPVtzLmMycChwKSxsLmMycChwKV07ZS5jb250YWlucyhkLG51bGwscix0KT8oYy5wdXNoKHtwb2ludE51bWJlcjpyLGxvbjpoWzBdLGxhdDpoWzFdfSksZi5zZWxlY3RlZD0xKTpmLnNlbGVjdGVkPTB9fXJldHVybiBjfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMjEyfV0sMTI2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPW8ubGluZTtlLmV4cG9ydHM9e21vZGU6by5tb2RlLHI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdGhldGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0scjA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZHI6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sdGhldGEwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGR0aGV0YTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHRoZXRhdW5pdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFkaWFucyIsImRlZ3JlZXMiLCJncmFkaWFucyJdLGRmbHQ6ImRlZ3JlZXMiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdGV4dDpvLnRleHQsdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJyIiwidGhldGEiLCJ0ZXh0Il19KSxob3ZlcnRleHQ6by5ob3ZlcnRleHQsbGluZTp7Y29sb3I6bC5jb2xvcix3aWR0aDpsLndpZHRoLGRhc2g6bC5kYXNoLHNoYXBlOmEoe30sbC5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6bC5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczpvLmNvbm5lY3RnYXBzLG1hcmtlcjpvLm1hcmtlcixjbGlwb25heGlzOmEoe30sby5jbGlwb25heGlzLHtkZmx0OiExfSksdGV4dHBvc2l0aW9uOm8udGV4dHBvc2l0aW9uLHRleHRmb250Om8udGV4dGZvbnQsZmlsbDphKHt9LG8uZmlsbCx7dmFsdWVzOlsibm9uZSIsInRvc2VsZiIsInRvbmV4dCJdLGRmbHQ6Im5vbmUifSksZmlsbGNvbG9yOm8uZmlsbGNvbG9yLGhvdmVyaW5mbzphKHt9LHMuaG92ZXJpbmZvLHtmbGFnczpbInIiLCJ0aGV0YSIsInRleHQiLCJuYW1lIl19KSxob3Zlcm9uOm8uaG92ZXJvbixob3ZlcnRlbXBsYXRlOm4oKSxzZWxlY3RlZDpvLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6by51bnNlbGVjdGVkfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyNCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6OTA2LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExODd9XSwxMjYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIikscz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLGw9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGM9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQsdT1lLnN1YnBsb3QsZj1yW3VdLnJhZGlhbGF4aXMsaD1yW3VdLmFuZ3VsYXJheGlzLHA9Zi5tYWtlQ2FsY2RhdGEoZSwiciIpLGQ9aC5tYWtlQ2FsY2RhdGEoZSwidGhldGEiKSxnPWUuX2xlbmd0aCxtPW5ldyBBcnJheShnKSx2PTA7djxnO3YrKyl7dmFyIHk9cFt2XSx4PWRbdl0sYj1tW3ZdPXt9O24oeSkmJm4oeCk/KGIucj15LGIudGhldGE9eCk6Yi5yPWl9dmFyIF89YyhlLGcpO3JldHVybiBlLl9leHRyZW1lcy54PWEuZmluZEV4dHJlbWVzKGYscCx7cHBhZDpffSksbyh0LGUpLHMobSxlKSxsKG0sZSksbX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTE4NiwiLi4vc2NhdHRlci9jYWxjIjoxMTg4LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTg5LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE5MCwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDEyNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIikuUFRTX0xJTkVTT05MWSxmPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIGgodCxlLHIsbil7dmFyIGksYT1uKCJyIiksbz1uKCJ0aGV0YSIpO2lmKGEpbz9pPU1hdGgubWluKGEubGVuZ3RoLG8ubGVuZ3RoKTooaT1hLmxlbmd0aCxuKCJ0aGV0YTAiKSxuKCJkdGhldGEiKSk7ZWxzZXtpZighbylyZXR1cm4gMDtpPWUudGhldGEubGVuZ3RoLG4oInIwIiksbigiZHIiKX1yZXR1cm4gZS5fbGVuZ3RoPWksaX1lLmV4cG9ydHM9e2hhbmRsZVJUaGV0YURlZmF1bHRzOmgsc3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIscCl7ZnVuY3Rpb24gZChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsZixyLGkpfXZhciBnPWgodCxlLHAsZCk7aWYoZyl7ZCgidGhldGF1bml0IiksZCgibW9kZSIsZzx1PyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxkKCJ0ZXh0IiksZCgiaG92ZXJ0ZXh0IiksImZpbGxzIiE9PWUuaG92ZXJvbiYmZCgiaG92ZXJ0ZW1wbGF0ZSIpLGkuaGFzTGluZXMoZSkmJihvKHQsZSxyLHAsZCkscyh0LGUsZCksZCgiY29ubmVjdGdhcHMiKSksaS5oYXNNYXJrZXJzKGUpJiZhKHQsZSxyLHAsZCx7Z3JhZGllbnQ6ITB9KSxpLmhhc1RleHQoZSkmJihkKCJ0ZXh0dGVtcGxhdGUiKSxsKHQsZSxwLGQpKTt2YXIgbT1bXTsoaS5oYXNNYXJrZXJzKGUpfHxpLmhhc1RleHQoZSkpJiYoZCgiY2xpcG9uYXhpcyIpLGQoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSxtLnB1c2goInBvaW50cyIpKSxkKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYoYyh0LGUscixkKSxpLmhhc0xpbmVzKGUpfHxzKHQsZSxkKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHxtLnB1c2goImZpbGxzIiksZCgiaG92ZXJvbiIsbS5qb2luKCIrIil8fCJwb2ludHMiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxkKX1lbHNlIGUudmlzaWJsZT0hMX19fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTE5MSwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExOTUsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTIwMCwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjoxMjAyLCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTIwNiwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxMiwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMjEzLCIuL2F0dHJpYnV0ZXMiOjEyNjF9XSwxMjY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scz17fSxsPXJbZS5zdWJwbG90XS5fc3VicGxvdDtsPyhhPWwucmFkaWFsQXhpcyxvPWwuYW5ndWxhckF4aXMpOihhPShsPXJbZS5zdWJwbG90XSkucmFkaWFsYXhpcyxvPWwuYW5ndWxhcmF4aXMpO3ZhciBjPWEuYzJsKHQucik7cy5yTGFiZWw9aS50aWNrVGV4dChhLGMsITApLnRleHQ7dmFyIHU9ImRlZ3JlZXMiPT09by50aGV0YXVuaXQ/bi5yYWQyZGVnKHQudGhldGEpOnQudGhldGE7cmV0dXJuIHMudGhldGFMYWJlbD1pLnRpY2tUZXh0KG8sdSwhMCkudGV4dCxzfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOH1dLDEyNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9ob3ZlciIpO2Z1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9ci5yYWRpYWxBeGlzLGE9ci5hbmd1bGFyQXhpcztpLl9ob3ZlcnRpdGxlPSJyIixhLl9ob3ZlcnRpdGxlPSJcdTAzYjgiO3ZhciBvPXt9O29bZS5zdWJwbG90XT17X3N1YnBsb3Q6cn07dmFyIHM9ZS5fbW9kdWxlLmZvcm1hdExhYmVscyh0LGUsbyk7bi5yTGFiZWw9cy5yTGFiZWwsbi50aGV0YUxhYmVsPXMudGhldGFMYWJlbDt2YXIgbD10LmhpfHxlLmhvdmVyaW5mbyxjPVtdO2Z1bmN0aW9uIHUodCxlKXtjLnB1c2godC5faG92ZXJ0aXRsZSsiOiAiK2UpfWlmKCFlLmhvdmVydGVtcGxhdGUpe3ZhciBmPWwuc3BsaXQoIisiKTstMSE9PWYuaW5kZXhPZigiYWxsIikmJihmPVsiciIsInRoZXRhIiwidGV4dCJdKSwtMSE9PWYuaW5kZXhPZigiciIpJiZ1KGksbi5yTGFiZWwpLC0xIT09Zi5pbmRleE9mKCJ0aGV0YSIpJiZ1KGEsbi50aGV0YUxhYmVsKSwtMSE9PWYuaW5kZXhPZigidGV4dCIpJiZuLnRleHQmJihjLnB1c2gobi50ZXh0KSxkZWxldGUgbi50ZXh0KSxuLmV4dHJhVGV4dD1jLmpvaW4oIjxicj4iKX19ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8mJiExIT09b1swXS5pbmRleCl7dmFyIHM9b1swXTtpZih2b2lkIDA9PT1zLmluZGV4KXJldHVybiBvO3ZhciBsPXQuc3VicGxvdCxjPXMuY2Rbcy5pbmRleF0sdT1zLnRyYWNlO2lmKGwuaXNQdEluc2lkZShjKSlyZXR1cm4gcy54TGFiZWxWYWw9dm9pZCAwLHMueUxhYmVsVmFsPXZvaWQgMCxpKGMsdSxsLHMpLHMuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsb319LG1ha2VIb3ZlclBvaW50VGV4dDppfX0seyIuLi9zY2F0dGVyL2hvdmVyIjoxMTk4fV0sMTI2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVycG9sYXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbInBvbGFyIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9zY2F0dGVyL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo4OTQsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA1LCIuLi9zY2F0dGVyL3NlbGVjdCI6MTIwOSwiLi4vc2NhdHRlci9zdHlsZSI6MTIxMSwiLi9hdHRyaWJ1dGVzIjoxMjYxLCIuL2NhbGMiOjEyNjIsIi4vZGVmYXVsdHMiOjEyNjMsIi4vZm9ybWF0X2xhYmVscyI6MTI2NCwiLi9ob3ZlciI6MTI2NSwiLi9wbG90IjoxMjY3fV0sMTI2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3Bsb3QiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGE9ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiZy5zY2F0dGVybGF5ZXIiKSxvPXt4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMscGxvdDplLmZyYW1ld29yayxsYXllckNsaXBJZDplLl9oYXNDbGlwT25BeGlzRmFsc2U/ZS5jbGlwSWRzLmZvclRyYWNlczpudWxsfSxzPWUucmFkaWFsQXhpcyxsPWUuYW5ndWxhckF4aXMsYz0wO2M8ci5sZW5ndGg7YysrKWZvcih2YXIgdT1yW2NdLGY9MDtmPHUubGVuZ3RoO2YrKyl7dmFyIGg9dVtmXSxwPWgucjtpZihwPT09aSloLng9aC55PWk7ZWxzZXt2YXIgZD1zLmMyZyhwKSxnPWwuYzJnKGgudGhldGEpO2gueD1kKk1hdGguY29zKGcpLGgueT1kKk1hdGguc2luKGcpfX1uKHQsbyxyLGEpfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uL3NjYXR0ZXIvcGxvdCI6MTIwOH1dLDEyNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlcnBvbGFyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnM7ZS5leHBvcnRzPXttb2RlOm4ubW9kZSxyOm4ucix0aGV0YTpuLnRoZXRhLHIwOm4ucjAsZHI6bi5kcix0aGV0YTA6bi50aGV0YTAsZHRoZXRhOm4uZHRoZXRhLHRoZXRhdW5pdDpuLnRoZXRhdW5pdCx0ZXh0Om4udGV4dCx0ZXh0dGVtcGxhdGU6YSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbInIiLCJ0aGV0YSIsInRleHQiXX0pLGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSxsaW5lOmkubGluZSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLG1hcmtlcjppLm1hcmtlcixmaWxsOmkuZmlsbCxmaWxsY29sb3I6aS5maWxsY29sb3IsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHRleHRmb250OmkudGV4dGZvbnQsaG92ZXJpbmZvOm4uaG92ZXJpbmZvLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWR9fSx7Ii4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjkwNiwiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjEyMzksIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIjoxMjYxfV0sMTI2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGk9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsYT10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxsPWUuc3VicGxvdCxjPXJbbF0ucmFkaWFsYXhpcyx1PXJbbF0uYW5ndWxhcmF4aXMsZj1lLl9yPWMubWFrZUNhbGNkYXRhKGUsInIiKSxoPWUuX3RoZXRhPXUubWFrZUNhbGNkYXRhKGUsInRoZXRhIikscD1lLl9sZW5ndGgsZD17fTtwPGYubGVuZ3RoJiYoZj1mLnNsaWNlKDAscCkpLHA8aC5sZW5ndGgmJihoPWguc2xpY2UoMCxwKSksZC5yPWYsZC50aGV0YT1oLG4odCxlKTt2YXIgZyxtPWQub3B0cz1hLnN0eWxlKHQsZSk7cmV0dXJuIHA8cz9nPWkoZSxwKTptLm1hcmtlciYmKGc9MioobS5tYXJrZXIuc2l6ZUF2Z3x8TWF0aC5tYXgobS5tYXJrZXIuc2l6ZSwzKSkpLGUuX2V4dHJlbWVzLng9by5maW5kRXh0cmVtZXMoYyxmLHtwcGFkOmd9KSxbe3g6ITEseTohMSx0OmQsdHJhY2U6ZX1dfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi9zY2F0dGVyL2NhbGMiOjExODgsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMTkwLCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIjoxMjQxLCIuLi9zY2F0dGVyZ2wvY29udmVydCI6MTI0Mn1dLDEyNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHMiKS5oYW5kbGVSVGhldGFEZWZhdWx0cyxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIikuUFRTX0xJTkVTT05MWSxmPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxmLHIsaSl9dmFyIGQ9YSh0LGUsaCxwKTtkPyhwKCJ0aGV0YXVuaXQiKSxwKCJtb2RlIixkPHU/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyIpLHAoInRleHQiKSxwKCJob3ZlcnRleHQiKSwiZmlsbHMiIT09ZS5ob3Zlcm9uJiZwKCJob3ZlcnRlbXBsYXRlIiksaS5oYXNMaW5lcyhlKSYmKHModCxlLHIsaCxwKSxwKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsaCxwKSxpLmhhc1RleHQoZSkmJihwKCJ0ZXh0dGVtcGxhdGUiKSxsKHQsZSxoLHApKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZjKHQsZSxyLHApLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTE5MSwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExOTUsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTIwMCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMDYsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTIsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxMywiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIjoxMjYzLCIuL2F0dHJpYnV0ZXMiOjEyNjh9XSwxMjcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJwb2xhci9mb3JtYXRfbGFiZWxzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Lmk7cmV0dXJuInIiaW4gdHx8KHQucj1lLl9yW2ldKSwidGhldGEiaW4gdHx8KHQudGhldGE9ZS5fdGhldGFbaV0pLG4odCxlLHIpfX0seyIuLi9zY2F0dGVycG9sYXIvZm9ybWF0X2xhYmVscyI6MTI2NH1dLDEyNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlcmdsL2hvdmVyIiksaT10KCIuLi9zY2F0dGVycG9sYXIvaG92ZXIiKS5tYWtlSG92ZXJQb2ludFRleHQ7ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixhKXt2YXIgbz10LmNkWzBdLnQscz1vLnIsbD1vLnRoZXRhLGM9bi5ob3ZlclBvaW50cyh0LGUscixhKTtpZihjJiYhMSE9PWNbMF0uaW5kZXgpe3ZhciB1PWNbMF07aWYodm9pZCAwPT09dS5pbmRleClyZXR1cm4gYzt2YXIgZj10LnN1YnBsb3QsaD11LmNkW3UuaW5kZXhdLHA9dS50cmFjZTtpZihoLnI9c1t1LmluZGV4XSxoLnRoZXRhPWxbdS5pbmRleF0sZi5pc1B0SW5zaWRlKGgpKXJldHVybiB1LnhMYWJlbFZhbD12b2lkIDAsdS55TGFiZWxWYWw9dm9pZCAwLGkoaCxwLGYsdSksY319fX0seyIuLi9zY2F0dGVyZ2wvaG92ZXIiOjEyNDcsIi4uL3NjYXR0ZXJwb2xhci9ob3ZlciI6MTI2NX1dLDEyNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcnBvbGFyZ2wiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsInBvbGFyIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9zY2F0dGVyZ2wvc2VsZWN0IiksbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvcG9sYXIiOjg5NCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDUsIi4uL3NjYXR0ZXJnbC9zZWxlY3QiOjEyNTEsIi4vYXR0cmlidXRlcyI6MTI2OCwiLi9jYWxjIjoxMjY5LCIuL2RlZmF1bHRzIjoxMjcwLCIuL2Zvcm1hdF9sYWJlbHMiOjEyNzEsIi4vaG92ZXIiOjEyNzIsIi4vcGxvdCI6MTI3NH1dLDEyNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9wb2ludC1jbHVzdGVyIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vc2NhdHRlcmdsL3Bsb3QiKSxvPXQoIi4uL3NjYXR0ZXJnbC9zY2VuZV91cGRhdGUiKSxzPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IiksbD10KCIuLi8uLi9saWIiKSxjPXQoIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aCl7dmFyIHU9ZS5yYWRpYWxBeGlzLGY9ZS5hbmd1bGFyQXhpcyxoPW8odCxlKTtyZXR1cm4gci5mb3JFYWNoKChmdW5jdGlvbihyKXtpZihyJiZyWzBdJiZyWzBdLnRyYWNlKXt2YXIgYSxvPXJbMF0scD1vLnRyYWNlLGQ9by50LGc9cC5fbGVuZ3RoLG09ZC5yLHY9ZC50aGV0YSx5PWQub3B0cyx4PW0uc2xpY2UoKSxiPXYuc2xpY2UoKTtmb3IoYT0wO2E8bS5sZW5ndGg7YSsrKWUuaXNQdEluc2lkZSh7cjptW2FdLHRoZXRhOnZbYV19KXx8KHhbYV09TmFOLGJbYV09TmFOKTt2YXIgXz1uZXcgQXJyYXkoMipnKSx3PUFycmF5KGcpLFQ9QXJyYXkoZyk7Zm9yKGE9MDthPGc7YSsrKXt2YXIgayxNLEE9eFthXTtpZihpKEEpKXt2YXIgUz11LmMyZyhBKSxFPWYuYzJnKGJbYV0scC50aGV0YXVuaXQpO2s9UypNYXRoLmNvcyhFKSxNPVMqTWF0aC5zaW4oRSl9ZWxzZSBrPU09TmFOO3dbYV09X1syKmFdPWssVFthXT1fWzIqYSsxXT1NfWQudHJlZT1uKF8pLHkubWFya2VyJiZnPj1jJiYoeS5tYXJrZXIuY2x1c3Rlcj1kLnRyZWUpLHkubWFya2VyJiYoeS5tYXJrZXJTZWwucG9zaXRpb25zPXkubWFya2VyVW5zZWwucG9zaXRpb25zPXkubWFya2VyLnBvc2l0aW9ucz1fKSx5LmxpbmUmJl8ubGVuZ3RoPjEmJmwuZXh0ZW5kRmxhdCh5LmxpbmUscy5saW5lUG9zaXRpb25zKHQscCxfKSkseS50ZXh0JiYobC5leHRlbmRGbGF0KHkudGV4dCx7cG9zaXRpb25zOl99LHMudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXIpKSxsLmV4dGVuZEZsYXQoeS50ZXh0U2VsLHtwb3NpdGlvbnM6X30scy50ZXh0UG9zaXRpb24odCxwLHkudGV4dCx5Lm1hcmtlclNlbCkpLGwuZXh0ZW5kRmxhdCh5LnRleHRVbnNlbCx7cG9zaXRpb25zOl99LHMudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJVbnNlbCkpKSx5LmZpbGwmJiFoLmZpbGwyZCYmKGguZmlsbDJkPSEwKSx5Lm1hcmtlciYmIWguc2NhdHRlcjJkJiYoaC5zY2F0dGVyMmQ9ITApLHkubGluZSYmIWgubGluZTJkJiYoaC5saW5lMmQ9ITApLHkudGV4dCYmIWguZ2xUZXh0JiYoaC5nbFRleHQ9ITApLGgubGluZU9wdGlvbnMucHVzaCh5LmxpbmUpLGguZmlsbE9wdGlvbnMucHVzaCh5LmZpbGwpLGgubWFya2VyT3B0aW9ucy5wdXNoKHkubWFya2VyKSxoLm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyU2VsKSxoLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goeS5tYXJrZXJVbnNlbCksaC50ZXh0T3B0aW9ucy5wdXNoKHkudGV4dCksaC50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goeS50ZXh0U2VsKSxoLnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFVuc2VsKSxoLnNlbGVjdEJhdGNoLnB1c2goW10pLGgudW5zZWxlY3RCYXRjaC5wdXNoKFtdKSxkLng9dyxkLnk9VCxkLnJhd3g9dyxkLnJhd3k9VCxkLnI9bSxkLnRoZXRhPXYsZC5wb3NpdGlvbnM9XyxkLl9zY2VuZT1oLGQuaW5kZXg9aC5jb3VudCxoLmNvdW50Kyt9fSkpLGEodCxlLHIpfX19LHsiLi4vLi4vbGliIjo3NzgsIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiOjEyNDEsIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IjoxMjQyLCIuLi9zY2F0dGVyZ2wvcGxvdCI6MTI0OSwiLi4vc2NhdHRlcmdsL3NjZW5lX3VwZGF0ZSI6MTI1MCwiQHBsb3RseS9wb2ludC1jbHVzdGVyIjo1NywiZmFzdC1pc251bWVyaWMiOjI0MX1dLDEyNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9YS5tYXJrZXIsZj1hLmxpbmUsaD11LmxpbmU7ZS5leHBvcnRzPXthOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzdW06e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sbW9kZTpjKHt9LGEubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0OmMoe30sYS50ZXh0LHt9KSx0ZXh0dGVtcGxhdGU6aSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImEiLCJiIiwiYyIsInRleHQiXX0pLGhvdmVydGV4dDpjKHt9LGEuaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjpmLmNvbG9yLHdpZHRoOmYud2lkdGgsZGFzaDpsLHNoYXBlOmMoe30sZi5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6Zi5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczphLmNvbm5lY3RnYXBzLGNsaXBvbmF4aXM6YS5jbGlwb25heGlzLGZpbGw6Yyh7fSxhLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXSxkZmx0OiJub25lIn0pLGZpbGxjb2xvcjphLmZpbGxjb2xvcixtYXJrZXI6Yyh7c3ltYm9sOnUuc3ltYm9sLG9wYWNpdHk6dS5vcGFjaXR5LG1heGRpc3BsYXllZDp1Lm1heGRpc3BsYXllZCxzaXplOnUuc2l6ZSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLGxpbmU6Yyh7d2lkdGg6aC53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LHMoIm1hcmtlci5saW5lIikpLGdyYWRpZW50OnUuZ3JhZGllbnQsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIiKSksdGV4dGZvbnQ6YS50ZXh0Zm9udCx0ZXh0cG9zaXRpb246YS50ZXh0cG9zaXRpb24sc2VsZWN0ZWQ6YS5zZWxlY3RlZCx1bnNlbGVjdGVkOmEudW5zZWxlY3RlZCxob3ZlcmluZm86Yyh7fSxvLmhvdmVyaW5mbyx7ZmxhZ3M6WyJhIiwiYiIsImMiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJvbjphLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTpuKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2NjQsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODI0LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDYsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE4N31dLDEyNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksYT10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLG89dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLHM9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsbD1bImEiLCJiIiwiYyJdLGM9e2E6WyJiIiwiYyJdLGI6WyJhIiwiYyJdLGM6WyJhIiwiYiJdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGYsaCxwLGQsZz10Ll9mdWxsTGF5b3V0W2Uuc3VicGxvdF0uc3VtLG09ZS5zdW18fGcsdj17YTplLmEsYjplLmIsYzplLmN9O2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspaWYoIXZbZj1sW3JdXSl7Zm9yKHA9dltjW2ZdWzBdXSxkPXZbY1tmXVsxXV0saD1uZXcgQXJyYXkocC5sZW5ndGgpLHU9MDt1PHAubGVuZ3RoO3UrKyloW3VdPW0tcFt1XS1kW3VdO3ZbZl09aH12YXIgeSx4LGIsXyx3LFQsaz1lLl9sZW5ndGgsTT1uZXcgQXJyYXkoayk7Zm9yKHI9MDtyPGs7cisrKXk9di5hW3JdLHg9di5iW3JdLGI9di5jW3JdLG4oeSkmJm4oeCkmJm4oYik/KDEhPT0oXz1nLygoeT0reSkrKHg9K3gpKyhiPStiKSkpJiYoeSo9Xyx4Kj1fLGIqPV8pLFQ9eSx3PWIteCxNW3JdPXt4OncseTpULGE6eSxiOngsYzpifSk6TVtyXT17eDohMSx5OiExfTtyZXR1cm4gcyhlLGspLGkodCxlKSxhKE0sZSksbyhNLGUpLE19fSx7Ii4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMTg2LCIuLi9zY2F0dGVyL2NhbGMiOjExODgsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExODksIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMTkwLCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sMTI3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxmPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxmLHIsaSl9dmFyIGQsZz1wKCJhIiksbT1wKCJiIiksdj1wKCJjIik7aWYoZz8oZD1nLmxlbmd0aCxtPyhkPU1hdGgubWluKGQsbS5sZW5ndGgpLHYmJihkPU1hdGgubWluKGQsdi5sZW5ndGgpKSk6ZD12P01hdGgubWluKGQsdi5sZW5ndGgpOjApOm0mJnYmJihkPU1hdGgubWluKG0ubGVuZ3RoLHYubGVuZ3RoKSksZCl7ZS5fbGVuZ3RoPWQscCgic3VtIikscCgidGV4dCIpLHAoImhvdmVydGV4dCIpLCJmaWxscyIhPT1lLmhvdmVyb24mJnAoImhvdmVydGVtcGxhdGUiKSxwKCJtb2RlIixkPGkuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksYS5oYXNMaW5lcyhlKSYmKHModCxlLHIsaCxwKSxsKHQsZSxwKSxwKCJjb25uZWN0Z2FwcyIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsaCxwLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmKHAoInRleHR0ZW1wbGF0ZSIpLGModCxlLGgscCkpO3ZhciB5PVtdOyhhLmhhc01hcmtlcnMoZSl8fGEuaGFzVGV4dChlKSkmJihwKCJjbGlwb25heGlzIikscCgibWFya2VyLm1heGRpc3BsYXllZCIpLHkucHVzaCgicG9pbnRzIikpLHAoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJih1KHQsZSxyLHApLGEuaGFzTGluZXMoZSl8fGwodCxlLHApKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fHkucHVzaCgiZmlsbHMiKSxwKCJob3Zlcm9uIix5LmpvaW4oIisiKXx8InBvaW50cyIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vc2NhdHRlci9jb25zdGFudHMiOjExOTEsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTk1LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEyMDAsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6MTIwMiwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMDYsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTIsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxMywiLi9hdHRyaWJ1dGVzIjoxMjc1fV0sMTI3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtpZihlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSxuW2ldKXt2YXIgYT1uW2ldO3QuYT1hLmEsdC5iPWEuYix0LmM9YS5jfWVsc2UgdC5hPWUuYSx0LmI9ZS5iLHQuYz1lLmM7cmV0dXJuIHR9fSx7fV0sMTI3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9e30sYT1yW2Uuc3VicGxvdF0uX3N1YnBsb3Q7cmV0dXJuIGkuYUxhYmVsPW4udGlja1RleHQoYS5hYXhpcyx0LmEsITApLnRleHQsaS5iTGFiZWw9bi50aWNrVGV4dChhLmJheGlzLHQuYiwhMCkudGV4dCxpLmNMYWJlbD1uLnRpY2tUZXh0KGEuY2F4aXMsdC5jLCEwKS50ZXh0LGl9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjh9XSwxMjgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bih0LGUscixpKTtpZihhJiYhMSE9PWFbMF0uaW5kZXgpe3ZhciBvPWFbMF07aWYodm9pZCAwPT09by5pbmRleCl7dmFyIHM9MS1vLnkwL3QueWEuX2xlbmd0aCxsPXQueGEuX2xlbmd0aCxjPWwqcy8yLHU9bC1jO3JldHVybiBvLngwPU1hdGgubWF4KE1hdGgubWluKG8ueDAsdSksYyksby54MT1NYXRoLm1heChNYXRoLm1pbihvLngxLHUpLGMpLGF9dmFyIGY9by5jZFtvLmluZGV4XSxoPW8udHJhY2UscD1vLnN1YnBsb3Q7by5hPWYuYSxvLmI9Zi5iLG8uYz1mLmMsby54TGFiZWxWYWw9dm9pZCAwLG8ueUxhYmVsVmFsPXZvaWQgMDt2YXIgZD17fTtkW2guc3VicGxvdF09e19zdWJwbG90OnB9O3ZhciBnPWguX21vZHVsZS5mb3JtYXRMYWJlbHMoZixoLGQpO28uYUxhYmVsPWcuYUxhYmVsLG8uYkxhYmVsPWcuYkxhYmVsLG8uY0xhYmVsPWcuY0xhYmVsO3ZhciBtPWYuaGl8fGguaG92ZXJpbmZvLHY9W107aWYoIWguaG92ZXJ0ZW1wbGF0ZSl7dmFyIHk9bS5zcGxpdCgiKyIpOy0xIT09eS5pbmRleE9mKCJhbGwiKSYmKHk9WyJhIiwiYiIsImMiXSksLTEhPT15LmluZGV4T2YoImEiKSYmeChwLmFheGlzLG8uYUxhYmVsKSwtMSE9PXkuaW5kZXhPZigiYiIpJiZ4KHAuYmF4aXMsby5iTGFiZWwpLC0xIT09eS5pbmRleE9mKCJjIikmJngocC5jYXhpcyxvLmNMYWJlbCl9cmV0dXJuIG8uZXh0cmFUZXh0PXYuam9pbigiPGJyPiIpLG8uaG92ZXJ0ZW1wbGF0ZT1oLmhvdmVydGVtcGxhdGUsYX1mdW5jdGlvbiB4KHQsZSl7di5wdXNoKHQuX2hvdmVydGl0bGUrIjogIitlKX19fSx7Ii4uL3NjYXR0ZXIvaG92ZXIiOjExOTh9XSwxMjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vc2NhdHRlci9zZWxlY3QiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJ0ZXJuYXJ5IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy90ZXJuYXJ5IiksY2F0ZWdvcmllczpbInRlcm5hcnkiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3Rlcm5hcnkiOjkwNywiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDUsIi4uL3NjYXR0ZXIvc2VsZWN0IjoxMjA5LCIuLi9zY2F0dGVyL3N0eWxlIjoxMjExLCIuL2F0dHJpYnV0ZXMiOjEyNzUsIi4vY2FsYyI6MTI3NiwiLi9kZWZhdWx0cyI6MTI3NywiLi9ldmVudF9kYXRhIjoxMjc4LCIuL2Zvcm1hdF9sYWJlbHMiOjEyNzksIi4vaG92ZXIiOjEyODAsIi4vcGxvdCI6MTI4Mn1dLDEyODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLnBsb3RDb250YWluZXI7aS5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTt2YXIgYT17eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHBsb3Q6aSxsYXllckNsaXBJZDplLl9oYXNDbGlwT25BeGlzRmFsc2U/ZS5jbGlwSWRSZWxhdGl2ZTpudWxsfSxvPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuc2NhdHRlcmxheWVyIik7bih0LGEscixvKX19LHsiLi4vc2NhdHRlci9wbG90IjoxMjA4fV0sMTI4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKS5pZFJlZ2V4LGw9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT1uLm1hcmtlcixmPXUubGluZSxoPWMoaSgibWFya2VyLmxpbmUiLHtlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHt3aWR0aDpjKHt9LGYud2lkdGgse2VkaXRUeXBlOiJjYWxjIn0pLGVkaXRUeXBlOiJjYWxjIn0pLHA9YyhpKCJtYXJrZXIiKSx7c3ltYm9sOnUuc3ltYm9sLHNpemU6Yyh7fSx1LnNpemUse2VkaXRUeXBlOiJtYXJrZXJTaXplIn0pLHNpemVyZWY6dS5zaXplcmVmLHNpemVtaW46dS5zaXplbWluLHNpemVtb2RlOnUuc2l6ZW1vZGUsb3BhY2l0eTp1Lm9wYWNpdHksY29sb3JiYXI6dS5jb2xvcmJhcixsaW5lOmgsZWRpdFR5cGU6ImNhbGMifSk7ZnVuY3Rpb24gZCh0KXtyZXR1cm57dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxlZGl0VHlwZToiY2FsYyIsaXRlbXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIscmVnZXg6c1t0XSxlZGl0VHlwZToicGxvdCJ9fX1wLmNvbG9yLmVkaXRUeXBlPXAuY21pbi5lZGl0VHlwZT1wLmNtYXguZWRpdFR5cGU9InN0eWxlIixlLmV4cG9ydHM9e2RpbWVuc2lvbnM6bCgiZGltZW5zaW9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGF4aXM6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sbWF0Y2hlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSksdGV4dDpjKHt9LG8udGV4dCx7fSksaG92ZXJ0ZXh0OmMoe30sby5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6YSgpLG1hcmtlcjpwLHhheGVzOmQoIngiKSx5YXhlczpkKCJ5IiksZGlhZ29uYWw6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHNob3d1cHBlcmhhbGY6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxzaG93bG93ZXJoYWxmOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2VsZWN0ZWQ6e21hcmtlcjpvLnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToiY2FsYyJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjpvLnVuc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOiJjYWxjIn0sb3BhY2l0eTpvLm9wYWNpdHl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzQsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjkwNiwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTg3LCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlcyI6MTIzOX1dLDEyODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVnbC1saW5lMmQiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsIiksbz10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKS5nZXRGcm9tSWQsYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLnNob3VsZFNob3daZXJvTGluZTtmdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIG49ci5tYXRyaXhPcHRpb25zLmRhdGEubGVuZ3RoLGk9ZS5fdmlzaWJsZURpbXMsYT1yLnZpZXdPcHRzLnJhbmdlcz1uZXcgQXJyYXkobiksbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGM9YVtvXT1uZXcgQXJyYXkoNCksdT1sKHQsZS5fZGlhZ1tzXVswXSk7dSYmKGNbMF09dS5yMmwodS5yYW5nZVswXSksY1syXT11LnIybCh1LnJhbmdlWzFdKSk7dmFyIGY9bCh0LGUuX2RpYWdbc11bMV0pO2YmJihjWzFdPWYucjJsKGYucmFuZ2VbMF0pLGNbM109Zi5yMmwoZi5yYW5nZVsxXSkpfXIuc2VsZWN0QmF0Y2gubGVuZ3RofHxyLnVuc2VsZWN0QmF0Y2gubGVuZ3RoP3IubWF0cml4LnVwZGF0ZSh7cmFuZ2VzOmF9LHtyYW5nZXM6YX0pOnIubWF0cml4LnVwZGF0ZSh7cmFuZ2VzOmF9KX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbCxpPWUuX3NwbG9tR3JpZDtpfHwoaT1lLl9zcGxvbUdyaWQ9bihyKSksaS51cGRhdGUoZnVuY3Rpb24odCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0LG49ci5fc2l6ZSxpPVswLDAsci53aWR0aCxyLmhlaWdodF0sYT17fTtmdW5jdGlvbiBvKHQsZSxyLG4sbyxzKXt2YXIgbD1lW3QrImNvbG9yIl0sYz1lW3QrIndpZHRoIl0sdT1TdHJpbmcobCtjKTt1IGluIGE/YVt1XS5kYXRhLnB1c2goTmFOLE5hTixyLG4sbyxzKTphW3VdPXtkYXRhOltyLG4sbyxzXSxqb2luOiJyZWN0Iix0aGlja25lc3M6Yyxjb2xvcjpsLHZpZXdwb3J0OmkscmFuZ2U6aSxvdmVybGF5OiExfX1mb3IoZSBpbiByLl9zcGxvbVN1YnBsb3RzKXt2YXIgcyxsLHU9ci5fcGxvdHNbZV0sZj11LnhheGlzLGg9dS55YXhpcyxwPWYuX2dyaWRWYWxzLGQ9aC5fZ3JpZFZhbHMsZz1uLmIraC5kb21haW5bMF0qbi5oLG09LWguX20sdj0tbSpoLnIybChoLnJhbmdlWzBdLGguY2FsZW5kYXIpO2lmKGYuc2hvd2dyaWQpZm9yKGU9MDtlPHAubGVuZ3RoO2UrKylzPWYuX29mZnNldCtmLmwycChwW2VdLngpLG8oImdyaWQiLGYscyxnLHMsZytoLl9sZW5ndGgpO2lmKGguc2hvd2dyaWQpZm9yKGU9MDtlPGQubGVuZ3RoO2UrKylsPWcrdittKmRbZV0ueCxvKCJncmlkIixoLGYuX29mZnNldCxsLGYuX29mZnNldCtmLl9sZW5ndGgsbCk7Yyh0LGYsaCkmJihzPWYuX29mZnNldCtmLmwycCgwKSxvKCJ6ZXJvbGluZSIsZixzLGcscyxnK2guX2xlbmd0aCkpLGModCxoLGYpJiYobD1nK3YrMCxvKCJ6ZXJvbGluZSIsaCxmLl9vZmZzZXQsbCxmLl9vZmZzZXQrZi5fbGVuZ3RoLGwpKX12YXIgeT1bXTtmb3IoZSBpbiBhKXkucHVzaChhW2VdKTtyZXR1cm4geX0odCkpfWUuZXhwb3J0cz17bmFtZToic3Bsb20iLGF0dHI6cy5hdHRyLGF0dHJSZWdleDpzLmF0dHJSZWdleCxsYXlvdXRBdHRyaWJ1dGVzOnMubGF5b3V0QXR0cmlidXRlcyxzdXBwbHlMYXlvdXREZWZhdWx0czpzLnN1cHBseUxheW91dERlZmF1bHRzLGRyYXdGcmFtZXdvcms6cy5kcmF3RnJhbWV3b3JrLHBsb3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWkuZ2V0TW9kdWxlKCJzcGxvbSIpLG49byh0LmNhbGNkYXRhLHIpWzBdO2EodCxbIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiLCJPRVNfZWxlbWVudF9pbmRleF91aW50Il0pJiYoZS5faGFzT25seUxhcmdlU3Bsb21zJiZmKHQpLHIucGxvdCh0LHt9LG4pKX0sZHJhZzpmdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtyLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmYodCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl1bMF0udHJhY2UsYT1yLl9zcGxvbVNjZW5lc1tpLnVpZF07InNwbG9tIj09PWkudHlwZSYmYSYmYS5tYXRyaXgmJnUodCxpLGEpfX0sdXBkYXRlR3JpZDpmLGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9e307aWYobi5fc3Bsb21TY2VuZXMpe2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07InNwbG9tIj09PW8udHlwZSYmKGFbby51aWRdPTEpfWZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBsPXJbaV07aWYoIWFbbC51aWRdKXt2YXIgYz1uLl9zcGxvbVNjZW5lc1tsLnVpZF07YyYmYy5kZXN0cm95JiZjLmRlc3Ryb3koKSxuLl9zcGxvbVNjZW5lc1tsLnVpZF09bnVsbCxkZWxldGUgbi5fc3Bsb21TY2VuZXNbbC51aWRdfX19MD09PU9iamVjdC5rZXlzKG4uX3NwbG9tU2NlbmVzfHx7fSkubGVuZ3RoJiZkZWxldGUgbi5fc3Bsb21TY2VuZXMsbi5fc3Bsb21HcmlkJiYhZS5faGFzT25seUxhcmdlU3Bsb21zJiZuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJihuLl9zcGxvbUdyaWQuZGVzdHJveSgpLG4uX3NwbG9tR3JpZD1udWxsLGRlbGV0ZSBuLl9zcGxvbUdyaWQpLHMuY2xlYW4odCxlLHIsbil9LHVwZGF0ZUZ4OnMudXBkYXRlRngsdG9TVkc6cy50b1NWR319LHsiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6NzkxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4NjUsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsInJlZ2wtbGluZTJkIjo1MzV9XSwxMjg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYT10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxvPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNBeGlzRXhwYW5zaW9uLHM9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxsPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IikubWFya2VyU2VsZWN0aW9uLGM9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKS5tYXJrZXJTdHlsZSx1PXQoIi4vc2NlbmVfdXBkYXRlIiksZj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGg9dCgiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyIpLlRPT19NQU5ZX1BPSU5UUztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixwLGQsZyxtLHYseT1lLmRpbWVuc2lvbnMseD1lLl9sZW5ndGgsYj17fSxfPWIuY2RhdGE9W10sdz1iLmRhdGE9W10sVD1lLl92aXNpYmxlRGltcz1bXTtmdW5jdGlvbiBrKHQscil7Zm9yKHZhciBpPXQubWFrZUNhbGNkYXRhKHt2OnIudmFsdWVzLHZjYWxlbmRhcjplLmNhbGVuZGFyfSwidiIpLGE9MDthPGkubGVuZ3RoO2ErKylpW2FdPWlbYV09PT1mP05hTjppW2FdO18ucHVzaChpKSx3LnB1c2goImxvZyI9PT10LnR5cGU/bi5zaW1wbGVNYXAoaSx0LmMybCk6aSl9Zm9yKHI9MDtyPHkubGVuZ3RoO3IrKylpZigoZD15W3JdKS52aXNpYmxlKXtpZihnPWkuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVswXSksbT1pLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMV0pLGcmJm0mJmcudHlwZSE9PW0udHlwZSl7bi5sb2coIlNraXBwaW5nIHNwbG9tIGRpbWVuc2lvbiAiK3IrIiB3aXRoIGNvbmZsaWN0aW5nIGF4aXMgdHlwZXMiKTtjb250aW51ZX1nPyhrKGcsZCksbSYmImNhdGVnb3J5Ij09PW0udHlwZSYmKG0uX2NhdGVnb3JpZXM9Zy5fY2F0ZWdvcmllcy5zbGljZSgpKSk6ayhtLGQpLFQucHVzaChyKX1mb3Iocyh0LGUpLG4uZXh0ZW5kRmxhdChiLGMoZSkpLHY9Xy5sZW5ndGgqeD5oPzIqKGIuc2l6ZUF2Z3x8TWF0aC5tYXgoYi5zaXplLDMpKTphKGUseCkscD0wO3A8VC5sZW5ndGg7cCsrKWQ9eVtyPVRbcF1dLGc9aS5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzBdKXx8e30sbT1pLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMV0pfHx7fSxvKHQsZSxnLG0sX1twXSxfW3BdLHYpO3ZhciBNPXUodCxlKTtyZXR1cm4gTS5tYXRyaXh8fChNLm1hdHJpeD0hMCksTS5tYXRyaXhPcHRpb25zPWIsTS5zZWxlY3RlZE9wdGlvbnM9bChlLGUuc2VsZWN0ZWQpLE0udW5zZWxlY3RlZE9wdGlvbnM9bChlLGUudW5zZWxlY3RlZCksW3t4OiExLHk6ITEsdDp7fSx0cmFjZTplfV19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODMxLCIuLi9zY2F0dGVyL2NhbGMiOjExODgsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMTkwLCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIjoxMjQxLCIuLi9zY2F0dGVyZ2wvY29udmVydCI6MTI0MiwiLi9zY2VuZV91cGRhdGUiOjEyOTJ9XSwxMjg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxzPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIiksbD10KCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIiksYz10KCIuLi9zY2F0dGVyZ2wvaGVscGVycyIpLmlzT3BlblN5bWJvbDtmdW5jdGlvbiB1KHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYS5kaW1lbnNpb25zLHIsaSl9cigibGFiZWwiKTt2YXIgaT1yKCJ2YWx1ZXMiKTtpJiZpLmxlbmd0aD9yKCJ2aXNpYmxlIik6ZS52aXNpYmxlPSExLHIoImF4aXMudHlwZSIpLHIoImF4aXMubWF0Y2hlcyIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBoKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIHA9aSh0LGUse25hbWU6ImRpbWVuc2lvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czp1fSksZD1oKCJkaWFnb25hbC52aXNpYmxlIiksZz1oKCJzaG93dXBwZXJoYWxmIiksbT1oKCJzaG93bG93ZXJoYWxmIik7aWYobChlLHAsInZhbHVlcyIpJiYoZHx8Z3x8bSkpe2goInRleHQiKSxoKCJob3ZlcnRleHQiKSxoKCJob3ZlcnRlbXBsYXRlIikscyh0LGUscixmLGgpO3ZhciB2PWMoZS5tYXJrZXIuc3ltYm9sKSx5PW8uaXNCdWJibGUoZSk7aCgibWFya2VyLmxpbmUud2lkdGgiLHZ8fHk/MTowKSxmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG89ZS5kaW1lbnNpb25zLHM9by5sZW5ndGgsbD1lLnNob3d1cHBlcmhhbGYsYz1lLnNob3dsb3dlcmhhbGYsdT1lLmRpYWdvbmFsLnZpc2libGUsZj1uZXcgQXJyYXkocyksaD1uZXcgQXJyYXkocyk7Zm9yKGk9MDtpPHM7aSsrKXt2YXIgcD1pP2krMToiIjtmW2ldPSJ4IitwLGhbaV09InkiK3B9dmFyIGQ9bigieGF4ZXMiLGYpLGc9bigieWF4ZXMiLGgpLG09ZS5fZGlhZz1uZXcgQXJyYXkocyk7ZS5feGF4ZXM9e30sZS5feWF4ZXM9e307dmFyIHY9W10seT1bXTtmdW5jdGlvbiB4KHQsbixpLGEpe2lmKHQpe3ZhciBvPXQuY2hhckF0KDApLHM9ci5fc3Bsb21BeGVzW29dO2lmKGVbIl8iK28rImF4ZXMiXVt0XT0xLGEucHVzaCh0KSwhKHQgaW4gcykpe3ZhciBsPXNbdF09e307aSYmKGwubGFiZWw9aS5sYWJlbHx8IiIsaS52aXNpYmxlJiZpLmF4aXMmJihpLmF4aXMudHlwZSYmKGwudHlwZT1pLmF4aXMudHlwZSksaS5heGlzLm1hdGNoZXMmJihsLm1hdGNoZXM9bikpKX19fXZhciBiPSF1JiYhYyxfPSF1JiYhbDtmb3IoZS5fYXhlc0RpbT17fSxpPTA7aTxzO2krKyl7dmFyIHc9b1tpXSxUPTA9PT1pLGs9aT09PXMtMSxNPVQmJmJ8fGsmJl8/dm9pZCAwOmRbaV0sQT1UJiZffHxrJiZiP3ZvaWQgMDpnW2ldO3goTSxBLHcsdikseChBLE0sdyx5KSxtW2ldPVtNLEFdLGUuX2F4ZXNEaW1bTV09aSxlLl9heGVzRGltW0FdPWl9Zm9yKGk9MDtpPHYubGVuZ3RoO2krKylmb3IoYT0wO2E8eS5sZW5ndGg7YSsrKXt2YXIgUz12W2ldK3lbYV07aT5hJiZsfHxpPGEmJmM/ci5fc3Bsb21TdWJwbG90c1tTXT0xOmkhPT1hfHwhdSYmYyYmbHx8KHIuX3NwbG9tU3VicGxvdHNbU109MSl9KCFjfHwhdSYmbCYmYykmJihyLl9zcGxvbUdyaWREZmx0LnhzaWRlPSJib3R0b20iLHIuX3NwbG9tR3JpZERmbHQueXNpZGU9ImxlZnQiKX0oMCxlLGYsaCksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsaCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjgyMywiLi4vcGFyY29vcmRzL21lcmdlX2xlbmd0aCI6MTE1OCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMDYsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTIsIi4uL3NjYXR0ZXJnbC9oZWxwZXJzIjoxMjQ2LCIuL2F0dHJpYnV0ZXMiOjEyODN9XSwxMjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxhPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IikubWFya2VyU3R5bGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS50cmFjZSxvPXQuX2Z1bGxMYXlvdXQuX3NwbG9tU2NlbmVzW3IudWlkXTtpZihvKXtpKHQsciksbi5leHRlbmRGbGF0KG8ubWF0cml4T3B0aW9ucyxhKHIpKTt2YXIgcz1uLmV4dGVuZEZsYXQoe30sby5tYXRyaXhPcHRpb25zLG8udmlld09wdHMpO28ubWF0cml4LnVwZGF0ZShzLG51bGwpfX19LHsiLi4vLi4vbGliIjo3NzgsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMTkwLCIuLi9zY2F0dGVyZ2wvY29udmVydCI6MTI0Mn1dLDEyODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5nZXREaW1JbmRleD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9pZCxuPXt4OjAseToxfVtyLmNoYXJBdCgwKV0saT10Ll92aXNpYmxlRGltcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07aWYodC5fZGlhZ1tvXVtuXT09PXIpcmV0dXJuIGF9cmV0dXJuITF9fSx7fV0sMTI4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2hlbHBlcnMiKSxpPXQoIi4uL3NjYXR0ZXJnbC9ob3ZlciIpLmNhbGNIb3ZlcjtlLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10LmNkWzBdLnRyYWNlLG89dC5zY2VuZS5tYXRyaXhPcHRpb25zLmNkYXRhLHM9dC54YSxsPXQueWEsYz1zLmMycChlKSx1PWwuYzJwKHIpLGY9dC5kaXN0YW5jZSxoPW4uZ2V0RGltSW5kZXgoYSxzKSxwPW4uZ2V0RGltSW5kZXgoYSxsKTtpZighMT09PWh8fCExPT09cClyZXR1cm5bdF07Zm9yKHZhciBkLGcsbT1vW2hdLHY9b1twXSx5PWYseD0wO3g8bS5sZW5ndGg7eCsrKXt2YXIgYj1tW3hdLF89dlt4XSx3PXMuYzJwKGIpLWMsVD1sLmMycChfKS11LGs9TWF0aC5zcXJ0KHcqdytUKlQpO2s8eSYmKHk9Zz1rLGQ9eCl9cmV0dXJuIHQuaW5kZXg9ZCx0LmRpc3RhbmNlPXksdC5keHk9Zyx2b2lkIDA9PT1kP1t0XTpbaSh0LG0sdixhKV19fX0seyIuLi9zY2F0dGVyZ2wvaG92ZXIiOjEyNDcsIi4vaGVscGVycyI6MTI4OH1dLDEyOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZ3JpZCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNwbG9tIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJjYXJ0ZXNpYW4iLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKSxlZGl0U3R5bGU6dCgiLi9lZGl0X3N0eWxlIiksbWV0YTp7fX0sbi5yZWdpc3RlcihpKX0seyIuLi8uLi9jb21wb25lbnRzL2dyaWQiOjY4NywiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDUsIi4vYXR0cmlidXRlcyI6MTI4MywiLi9iYXNlX3Bsb3QiOjEyODQsIi4vY2FsYyI6MTI4NSwiLi9kZWZhdWx0cyI6MTI4NiwiLi9lZGl0X3N0eWxlIjoxMjg3LCIuL2hvdmVyIjoxMjg5LCIuL3Bsb3QiOjEyOTEsIi4vc2VsZWN0IjoxMjkzfV0sMTI5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLXNwbG9tIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikuc2VsZWN0TW9kZTtmdW5jdGlvbiBzKHQsZSl7dmFyIHIscyxsLGMsdSxmPXQuX2Z1bGxMYXlvdXQsaD1mLl9zaXplLHA9ZS50cmFjZSxkPWUudCxnPWYuX3NwbG9tU2NlbmVzW3AudWlkXSxtPWcubWF0cml4T3B0aW9ucyx2PW0uY2RhdGEseT1mLl9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbCx4PWYuZHJhZ21vZGU7aWYoMCE9PXYubGVuZ3RoKXttLmxvd2VyPXAuc2hvd3VwcGVyaGFsZixtLnVwcGVyPXAuc2hvd2xvd2VyaGFsZixtLmRpYWdvbmFsPXAuZGlhZ29uYWwudmlzaWJsZTt2YXIgYj1wLl92aXNpYmxlRGltcyxfPXYubGVuZ3RoLHc9Zy52aWV3T3B0cz17fTtmb3Iody5yYW5nZXM9bmV3IEFycmF5KF8pLHcuZG9tYWlucz1uZXcgQXJyYXkoXyksdT0wO3U8Yi5sZW5ndGg7dSsrKXtsPWJbdV07dmFyIFQ9dy5yYW5nZXNbdV09bmV3IEFycmF5KDQpLGs9dy5kb21haW5zW3VdPW5ldyBBcnJheSg0KTsocj1hLmdldEZyb21JZCh0LHAuX2RpYWdbbF1bMF0pKSYmKFRbMF09ci5fcmxbMF0sVFsyXT1yLl9ybFsxXSxrWzBdPXIuZG9tYWluWzBdLGtbMl09ci5kb21haW5bMV0pLChzPWEuZ2V0RnJvbUlkKHQscC5fZGlhZ1tsXVsxXSkpJiYoVFsxXT1zLl9ybFswXSxUWzNdPXMuX3JsWzFdLGtbMV09cy5kb21haW5bMF0sa1szXT1zLmRvbWFpblsxXSl9dy52aWV3cG9ydD1baC5sLGguYixoLncraC5sLGguaCtoLmJdLCEwPT09Zy5tYXRyaXgmJihnLm1hdHJpeD1uKHkpKTt2YXIgTT1mLmNsaWNrbW9kZS5pbmRleE9mKCJzZWxlY3QiKT4tMSxBPSEwO2lmKG8oeCl8fCEhcC5zZWxlY3RlZHBvaW50c3x8TSl7dmFyIFM9cC5fbGVuZ3RoO2lmKHAuc2VsZWN0ZWRwb2ludHMpe2cuc2VsZWN0QmF0Y2g9cC5zZWxlY3RlZHBvaW50czt2YXIgRT1wLnNlbGVjdGVkcG9pbnRzLEM9e307Zm9yKGw9MDtsPEUubGVuZ3RoO2wrKylDW0VbbF1dPSEwO3ZhciBMPVtdO2ZvcihsPTA7bDxTO2wrKylDW2xdfHxMLnB1c2gobCk7Zy51bnNlbGVjdEJhdGNoPUx9dmFyIEk9ZC54cHg9bmV3IEFycmF5KF8pLFA9ZC55cHg9bmV3IEFycmF5KF8pO2Zvcih1PTA7dTxiLmxlbmd0aDt1Kyspe2lmKGw9Ylt1XSxyPWEuZ2V0RnJvbUlkKHQscC5fZGlhZ1tsXVswXSkpZm9yKElbdV09bmV3IEFycmF5KFMpLGM9MDtjPFM7YysrKUlbdV1bY109ci5jMnAodlt1XVtjXSk7aWYocz1hLmdldEZyb21JZCh0LHAuX2RpYWdbbF1bMV0pKWZvcihQW3VdPW5ldyBBcnJheShTKSxjPTA7YzxTO2MrKylQW3VdW2NdPXMuYzJwKHZbdV1bY10pfWlmKGcuc2VsZWN0QmF0Y2gubGVuZ3RofHxnLnVuc2VsZWN0QmF0Y2gubGVuZ3RoKXt2YXIgej1pLmV4dGVuZEZsYXQoe30sbSxnLnVuc2VsZWN0ZWRPcHRpb25zLHcpLE89aS5leHRlbmRGbGF0KHt9LG0sZy5zZWxlY3RlZE9wdGlvbnMsdyk7Zy5tYXRyaXgudXBkYXRlKHosTyksQT0hMX19ZWxzZSBkLnhweD1kLnlweD1udWxsO2lmKEEpe3ZhciBEPWkuZXh0ZW5kRmxhdCh7fSxtLHcpO2cubWF0cml4LnVwZGF0ZShELG51bGwpfX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aClmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKylzKHQscltuXVswXSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6NjYxLCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsInJlZ2wtc3Bsb20iOjUzOX1dLDEyOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPWUudWlkLGE9ci5fc3Bsb21TY2VuZXM7YXx8KGE9ci5fc3Bsb21TY2VuZXM9e30pO3ZhciBvPXtkaXJ0eTohMCxzZWxlY3RCYXRjaDpbXSx1bnNlbGVjdEJhdGNoOltdfSxzPWFbZS51aWRdO3JldHVybiBzfHwoKHM9YVtpXT1uLmV4dGVuZEZsYXQoe30sbyx7bWF0cml4OiExLHNlbGVjdEJhdGNoOltdLHVuc2VsZWN0QmF0Y2g6W119KSkuZHJhdz1mdW5jdGlvbigpe3MubWF0cml4JiZzLm1hdHJpeC5kcmF3JiYocy5zZWxlY3RCYXRjaC5sZW5ndGh8fHMudW5zZWxlY3RCYXRjaC5sZW5ndGg/cy5tYXRyaXguZHJhdyhzLnVuc2VsZWN0QmF0Y2gscy5zZWxlY3RCYXRjaCk6cy5tYXRyaXguZHJhdygpKSxzLmRpcnR5PSExfSxzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtzLm1hdHJpeCYmcy5tYXRyaXguZGVzdHJveSYmcy5tYXRyaXguZGVzdHJveSgpLHMubWF0cml4T3B0aW9ucz1udWxsLHMuc2VsZWN0QmF0Y2g9bnVsbCxzLnVuc2VsZWN0QmF0Y2g9bnVsbCxzPW51bGx9KSxzLmRpcnR5fHxuLmV4dGVuZEZsYXQocyxvKSxzfX0seyIuLi8uLi9saWIiOjc3OH1dLDEyOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNkLG89clswXS50cmFjZSxzPXJbMF0udCxsPXQuc2NlbmUsYz1sLm1hdHJpeE9wdGlvbnMuY2RhdGEsdT10LnhheGlzLGY9dC55YXhpcyxoPVtdO2lmKCFsKXJldHVybiBoO3ZhciBwPSFpLmhhc01hcmtlcnMobykmJiFpLmhhc1RleHQobyk7aWYoITAhPT1vLnZpc2libGV8fHApcmV0dXJuIGg7dmFyIGQ9YS5nZXREaW1JbmRleChvLHUpLGc9YS5nZXREaW1JbmRleChvLGYpO2lmKCExPT09ZHx8ITE9PT1nKXJldHVybiBoO3ZhciBtPXMueHB4W2RdLHY9cy55cHhbZ10seT1jW2RdLHg9Y1tnXSxiPVtdLF89W107aWYoITEhPT1lJiYhZS5kZWdlbmVyYXRlKWZvcih2YXIgdz0wO3c8eS5sZW5ndGg7dysrKWUuY29udGFpbnMoW21bd10sdlt3XV0sbnVsbCx3LHQpPyhiLnB1c2godyksaC5wdXNoKHtwb2ludE51bWJlcjp3LHg6eVt3XSx5Onhbd119KSk6Xy5wdXNoKHcpO3ZhciBUPWwubWF0cml4T3B0aW9ucztyZXR1cm4gYi5sZW5ndGh8fF8ubGVuZ3RoP2wuc2VsZWN0QmF0Y2gubGVuZ3RofHxsLnVuc2VsZWN0QmF0Y2gubGVuZ3RofHxsLm1hdHJpeC51cGRhdGUobC51bnNlbGVjdGVkT3B0aW9ucyxuLmV4dGVuZEZsYXQoe30sVCxsLnNlbGVjdGVkT3B0aW9ucyxsLnZpZXdPcHRzKSk6bC5tYXRyaXgudXBkYXRlKFQsbnVsbCksbC5zZWxlY3RCYXRjaD1iLGwudW5zZWxlY3RCYXRjaD1fLGh9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMjEyLCIuL2hlbHBlcnMiOjEyODh9XSwxMjk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx3Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0czp7eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxtYXhkaXNwbGF5ZWQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MWUzLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZXJlZjp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjAsZGZsdDoxfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGVtcGxhdGU6aSh7ZWRpdFR5cGU6ImNhbGMifSx7a2V5czpbInR1YmV4IiwidHViZXkiLCJ0dWJleiIsInR1YmV1IiwidHViZXYiLCJ0dWJldyIsIm5vcm0iLCJkaXZlcmdlbmNlIl19KSxzaG93bGVnZW5kOnMoe30sby5zaG93bGVnZW5kLHtkZmx0OiExfSl9O3MobCxuKCIiLHtjb2xvckF0dHI6InUvdi93IG5vcm0iLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSk7WyJvcGFjaXR5IiwibGlnaHRwb3NpdGlvbiIsImxpZ2h0aW5nIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7bFt0XT1hW3RdfSkpLGwuaG92ZXJpbmZvPXMoe30sby5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIixmbGFnczpbIngiLCJ5IiwieiIsInUiLCJ2IiwidyIsIm5vcm0iLCJkaXZlcmdlbmNlIiwidGV4dCIsIm5hbWUiXSxkZmx0OiJ4K3kreitub3JtK3RleHQrbmFtZSJ9KSxsLnRyYW5zZm9ybXM9dm9pZCAwLGUuZXhwb3J0cz1sfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODI0LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDYsIi4uL21lc2gzZC9hdHRyaWJ1dGVzIjoxMTI4fV0sMTI5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZnVuY3Rpb24gYSh0KXt2YXIgZSxyLGksYSxzLGwsYyx1LGYsaCxwLGQsZz10Ll94LG09dC5feSx2PXQuX3oseT10Ll9sZW4seD0tMS8wLGI9MS8wLF89LTEvMCx3PTEvMCxUPS0xLzAsaz0xLzAsTT0iIjtmb3IoeSYmKGM9Z1swXSxmPW1bMF0scD12WzBdKSx5PjEmJih1PWdbeS0xXSxoPW1beS0xXSxkPXZbeS0xXSksZT0wO2U8eTtlKyspeD1NYXRoLm1heCh4LGdbZV0pLGI9TWF0aC5taW4oYixnW2VdKSxfPU1hdGgubWF4KF8sbVtlXSksdz1NYXRoLm1pbih3LG1bZV0pLFQ9TWF0aC5tYXgoVCx2W2VdKSxrPU1hdGgubWluKGssdltlXSksYXx8Z1tlXT09PWN8fChhPSEwLE0rPSJ4Iiksc3x8bVtlXT09PWZ8fChzPSEwLE0rPSJ5IiksbHx8dltlXT09PXB8fChsPSEwLE0rPSJ6Iik7YXx8KE0rPSJ4Iiksc3x8KE0rPSJ5IiksbHx8KE0rPSJ6Iik7dmFyIEE9byh0Ll94KSxTPW8odC5feSksRT1vKHQuX3opO009KE09KE09TS5yZXBsYWNlKCJ4IiwoYz51PyItIjoiKyIpKyJ4IikpLnJlcGxhY2UoInkiLChmPmg/Ii0iOiIrIikrInkiKSkucmVwbGFjZSgieiIsKHA+ZD8iLSI6IisiKSsieiIpO3ZhciBDPWZ1bmN0aW9uKCl7eT0wLEE9W10sUz1bXSxFPVtdfTsoIXl8fHk8QS5sZW5ndGgqUy5sZW5ndGgqRS5sZW5ndGgpJiZDKCk7dmFyIEw9ZnVuY3Rpb24odCl7cmV0dXJuIngiPT09dD9nOiJ5Ij09PXQ/bTp2fSxJPWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQ/QToieSI9PT10P1M6RX0sUD1mdW5jdGlvbih0KXtyZXR1cm4gdFt5LTFdPHRbMF0/LTE6MX0sej1MKE1bMV0pLE89TChNWzNdKSxEPUwoTVs1XSksUj1JKE1bMV0pLmxlbmd0aCxGPUkoTVszXSkubGVuZ3RoLEI9SShNWzVdKS5sZW5ndGgsTj0hMSxqPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUiooRip0K2UpK3J9LFU9UChMKE1bMV0pKSxWPVAoTChNWzNdKSkscT1QKEwoTVs1XSkpO2ZvcihlPTA7ZTxCLTE7ZSsrKXtmb3Iocj0wO3I8Ri0xO3IrKyl7Zm9yKGk9MDtpPFItMTtpKyspe3ZhciBIPWooZSxyLGkpLEc9aihlLHIsaSsxKSxZPWooZSxyKzEsaSksVz1qKGUrMSxyLGkpO2lmKHpbSF0qVTx6W0ddKlUmJk9bSF0qVjxPW1ldKlYmJkRbSF0qcTxEW1ddKnF8fChOPSEwKSxOKWJyZWFrfWlmKE4pYnJlYWt9aWYoTilicmVha31yZXR1cm4gTiYmKG4ud2FybigiRW5jb3VudGVyZWQgYXJiaXRyYXJ5IGNvb3JkaW5hdGVzISBVbmFibGUgdG8gaW5wdXQgZGF0YSBncmlkLiIpLEMoKSkse3hNaW46Yix5TWluOncsek1pbjprLHhNYXg6eCx5TWF4Ol8sek1heDpULFhzOkEsWXM6UyxaczpFLGxlbjp5LGZpbGw6TX19ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbi5kaXN0aW5jdFZhbHModCkudmFsc31mdW5jdGlvbiBzKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9dC5sZW5ndGgpLG4uaXNUeXBlZEFycmF5KHQpKXJldHVybiB0LnN1YmFycmF5KDAsZSk7Zm9yKHZhciByPVtdLGk9MDtpPGU7aSsrKXJbaV09K3RbaV07cmV0dXJuIHJ9ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7ZS5fbGVuPU1hdGgubWluKGUudS5sZW5ndGgsZS52Lmxlbmd0aCxlLncubGVuZ3RoLGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoKSxlLl91PXMoZS51LGUuX2xlbiksZS5fdj1zKGUudixlLl9sZW4pLGUuX3c9cyhlLncsZS5fbGVuKSxlLl94PXMoZS54LGUuX2xlbiksZS5feT1zKGUueSxlLl9sZW4pLGUuX3o9cyhlLnosZS5fbGVuKTt2YXIgcj1hKGUpO2UuX2dyaWRGaWxsPXIuZmlsbCxlLl9Ycz1yLlhzLGUuX1lzPXIuWXMsZS5fWnM9ci5acyxlLl9sZW49ci5sZW47dmFyIG4sbyxsLGM9MDtlLnN0YXJ0cyYmKG49cyhlLnN0YXJ0cy54fHxbXSksbz1zKGUuc3RhcnRzLnl8fFtdKSxsPXMoZS5zdGFydHMuenx8W10pLGM9TWF0aC5taW4obi5sZW5ndGgsby5sZW5ndGgsbC5sZW5ndGgpKSxlLl9zdGFydHNYPW58fFtdLGUuX3N0YXJ0c1k9b3x8W10sZS5fc3RhcnRzWj1sfHxbXTt2YXIgdSxmPTAsaD0xLzA7Zm9yKHU9MDt1PGUuX2xlbjt1Kyspe3ZhciBwPWUuX3VbdV0sZD1lLl92W3VdLGc9ZS5fd1t1XSxtPU1hdGguc3FydChwKnArZCpkK2cqZyk7Zj1NYXRoLm1heChmLG0pLGg9TWF0aC5taW4oaCxtKX1mb3IoaSh0LGUse3ZhbHM6W2gsZl0sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSksdT0wO3U8Yzt1Kyspe3ZhciB2PW5bdV07ci54TWF4PU1hdGgubWF4KHIueE1heCx2KSxyLnhNaW49TWF0aC5taW4oci54TWluLHYpO3ZhciB5PW9bdV07ci55TWF4PU1hdGgubWF4KHIueU1heCx5KSxyLnlNaW49TWF0aC5taW4oci55TWluLHkpO3ZhciB4PWxbdV07ci56TWF4PU1hdGgubWF4KHIuek1heCx4KSxyLnpNaW49TWF0aC5taW4oci56TWluLHgpfWUuX3NsZW49YyxlLl9ub3JtTWF4PWYsZS5feGJuZHM9W3IueE1pbixyLnhNYXhdLGUuX3libmRzPVtyLnlNaW4sci55TWF4XSxlLl96Ym5kcz1bci56TWluLHIuek1heF19LGZpbHRlcjpzLHByb2Nlc3NHcmlkOmF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2NTEsIi4uLy4uL2xpYiI6Nzc4fV0sMTI5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zdHJlYW10dWJlM2QiKSxpPW4uY3JlYXRlVHViZU1lc2gsYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxsPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpLGM9e3hheGlzOjAseWF4aXM6MSx6YXhpczoyfTtmdW5jdGlvbiB1KHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5tZXNoPW51bGwsdGhpcy5kYXRhPW51bGx9dmFyIGY9dS5wcm90b3R5cGU7ZnVuY3Rpb24gaCh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZT4yP3Quc2xpY2UoMSxlLTEpOjI9PT1lP1sodFswXSt0WzFdKS8yXTp0fWZ1bmN0aW9uIHAodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIDE9PT1lP1suNSwuNV06W3RbMV0tdFswXSx0W2UtMV0tdFtlLTJdXX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsaT10LmRhdGFTY2FsZSx1PWUuX2xlbixmPXt9O2Z1bmN0aW9uIGQodCxlKXt2YXIgbj1yW2VdLG89aVtjW2VdXTtyZXR1cm4gYS5zaW1wbGVNYXAodCwoZnVuY3Rpb24odCl7cmV0dXJuIG4uZDJsKHQpKm99KSl9aWYoZi52ZWN0b3JzPWwoZChlLl91LCJ4YXhpcyIpLGQoZS5fdiwieWF4aXMiKSxkKGUuX3csInpheGlzIiksdSksIXUpcmV0dXJue3Bvc2l0aW9uczpbXSxjZWxsczpbXX07dmFyIGc9ZChlLl9YcywieGF4aXMiKSxtPWQoZS5fWXMsInlheGlzIiksdj1kKGUuX1pzLCJ6YXhpcyIpO2lmKGYubWVzaGdyaWQ9W2csbSx2XSxmLmdyaWRGaWxsPWUuX2dyaWRGaWxsLGUuX3NsZW4pZi5zdGFydGluZ1Bvc2l0aW9ucz1sKGQoZS5fc3RhcnRzWCwieGF4aXMiKSxkKGUuX3N0YXJ0c1ksInlheGlzIiksZChlLl9zdGFydHNaLCJ6YXhpcyIpKTtlbHNle2Zvcih2YXIgeT1tWzBdLHg9aChnKSxiPWgodiksXz1uZXcgQXJyYXkoeC5sZW5ndGgqYi5sZW5ndGgpLHc9MCxUPTA7VDx4Lmxlbmd0aDtUKyspZm9yKHZhciBrPTA7azxiLmxlbmd0aDtrKyspX1t3KytdPVt4W1RdLHksYltrXV07Zi5zdGFydGluZ1Bvc2l0aW9ucz1ffWYuY29sb3JtYXA9byhlKSxmLnR1YmVTaXplPWUuc2l6ZXJlZixmLm1heExlbmd0aD1lLm1heGRpc3BsYXllZDt2YXIgTT1kKGUuX3hibmRzLCJ4YXhpcyIpLEE9ZChlLl95Ym5kcywieWF4aXMiKSxTPWQoZS5femJuZHMsInpheGlzIiksRT1wKGcpLEM9cChtKSxMPXAodiksST1bW01bMF0tRVswXSxBWzBdLUNbMF0sU1swXS1MWzBdXSxbTVsxXStFWzFdLEFbMV0rQ1sxXSxTWzFdK0xbMV1dXSxQPW4oZixJKSx6PXMoZSk7UC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3oubWluL2UuX25vcm1NYXgsei5tYXgvZS5fbm9ybU1heF07dmFyIE89ZS5saWdodHBvc2l0aW9uO3JldHVybiBQLmxpZ2h0UG9zaXRpb249W08ueCxPLnksTy56XSxQLmFtYmllbnQ9ZS5saWdodGluZy5hbWJpZW50LFAuZGlmZnVzZT1lLmxpZ2h0aW5nLmRpZmZ1c2UsUC5zcGVjdWxhcj1lLmxpZ2h0aW5nLnNwZWN1bGFyLFAucm91Z2huZXNzPWUubGlnaHRpbmcucm91Z2huZXNzLFAuZnJlc25lbD1lLmxpZ2h0aW5nLmZyZXNuZWwsUC5vcGFjaXR5PWUub3BhY2l0eSxlLl9wYWQ9UC50dWJlU2NhbGUqZS5zaXplcmVmKjIsUH1mLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQscj10aGlzLnNjZW5lLmRhdGFTY2FsZTtmdW5jdGlvbiBuKHQsbil7dmFyIGk9ZVtuXSxhPXJbY1tuXV07cmV0dXJuIGkubDJjKHQpL2F9aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBpPXQuZGF0YS5wb3NpdGlvbixhPXQuZGF0YS52ZWxvY2l0eTtyZXR1cm4gdC50cmFjZUNvb3JkaW5hdGU9W24oaVswXSwieGF4aXMiKSxuKGlbMV0sInlheGlzIiksbihpWzJdLCJ6YXhpcyIpLG4oYVswXSwieGF4aXMiKSxuKGFbMV0sInlheGlzIiksbihhWzJdLCJ6YXhpcyIpLHQuZGF0YS5pbnRlbnNpdHkqdGhpcy5kYXRhLl9ub3JtTWF4LHQuZGF0YS5kaXZlcmdlbmNlXSx0LnRleHRMYWJlbD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dCwhMH19LGYudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YT10O3ZhciBlPWQodGhpcy5zY2VuZSx0KTt0aGlzLm1lc2gudXBkYXRlKGUpfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxuPWQodCxlKSxhPWkocixuKSxvPW5ldyB1KHQsZS51aWQpO3JldHVybiBvLm1lc2g9YSxvLmRhdGE9ZSxhLl90cmFjZT1vLHQuZ2xwbG90LmFkZChhKSxvfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjc3NCwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo4ODEsImdsLXN0cmVhbXR1YmUzZCI6MzQ4fV0sMTI5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKCJ1IiksYz1zKCJ2IiksdT1zKCJ3IiksZj1zKCJ4IiksaD1zKCJ5IikscD1zKCJ6Iik7bCYmbC5sZW5ndGgmJmMmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmZiYmZi5sZW5ndGgmJmgmJmgubGVuZ3RoJiZwJiZwLmxlbmd0aD8ocygic3RhcnRzLngiKSxzKCJzdGFydHMueSIpLHMoInN0YXJ0cy56IikscygibWF4ZGlzcGxheWVkIikscygic2l6ZXJlZiIpLHMoImxpZ2h0aW5nLmFtYmllbnQiKSxzKCJsaWdodGluZy5kaWZmdXNlIikscygibGlnaHRpbmcuc3BlY3VsYXIiKSxzKCJsaWdodGluZy5yb3VnaG5lc3MiKSxzKCJsaWdodGluZy5mcmVzbmVsIikscygibGlnaHRwb3NpdGlvbi54IikscygibGlnaHRwb3NpdGlvbi55IikscygibGlnaHRwb3NpdGlvbi56IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjUzLCIuLi8uLi9saWIiOjc3OCwiLi9hdHRyaWJ1dGVzIjoxMjk0fV0sMTI5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzdHJlYW10dWJlIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCJzaG93TGVnZW5kIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0sY2FsYzp0KCIuL2NhbGMiKS5jYWxjLHBsb3Q6dCgiLi9jb252ZXJ0IiksZXZlbnREYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudHViZXg9dC54LHQudHViZXk9dC55LHQudHViZXo9dC56LHQudHViZXU9ZS50cmFjZUNvb3JkaW5hdGVbM10sdC50dWJldj1lLnRyYWNlQ29vcmRpbmF0ZVs0XSx0LnR1YmV3PWUudHJhY2VDb29yZGluYXRlWzVdLHQubm9ybT1lLnRyYWNlQ29vcmRpbmF0ZVs2XSx0LmRpdmVyZ2VuY2U9ZS50cmFjZUNvb3JkaW5hdGVbN10sZGVsZXRlIHQueCxkZWxldGUgdC55LGRlbGV0ZSB0LnosdH0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6ODcwLCIuL2F0dHJpYnV0ZXMiOjEyOTQsIi4vY2FsYyI6MTI5NSwiLi9jb252ZXJ0IjoxMjk2LCIuL2RlZmF1bHRzIjoxMjk3fV0sMTI5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbD10KCIuLi9waWUvYXR0cmlidXRlcyIpLGM9dCgiLi9jb25zdGFudHMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHBhcmVudHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGJyYW5jaHZhbHVlczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmVtYWluZGVyIiwidG90YWwiXSxkZmx0OiJyZW1haW5kZXIiLGVkaXRUeXBlOiJjYWxjIn0sY291bnQ6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImJyYW5jaGVzIiwibGVhdmVzIl0sZGZsdDoibGVhdmVzIixlZGl0VHlwZToiY2FsYyJ9LGxldmVsOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixhbmltOiEwfSxtYXhkZXB0aDp7dmFsVHlwZToiaW50ZWdlciIsZWRpdFR5cGU6InBsb3QiLGRmbHQ6LTF9LG1hcmtlcjp1KHtjb2xvcnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbGluZTp7Y29sb3I6dSh7fSxsLm1hcmtlci5saW5lLmNvbG9yLHtkZmx0Om51bGx9KSx3aWR0aDp1KHt9LGwubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxvKCJtYXJrZXIiLHtjb2xvckF0dHI6ImNvbG9ycyIsYW5pbTohMX0pKSxsZWFmOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJzdHlsZSIsbWluOjAsbWF4OjF9LGVkaXRUeXBlOiJwbG90In0sdGV4dDpsLnRleHQsdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwiY3VycmVudCBwYXRoIiwicGVyY2VudCByb290IiwicGVyY2VudCBlbnRyeSIsInBlcmNlbnQgcGFyZW50Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJwbG90In0sdGV4dHRlbXBsYXRlOmEoe2VkaXRUeXBlOiJwbG90In0se2tleXM6Yy5ldmVudERhdGFLZXlzLmNvbmNhdChbImxhYmVsIiwidmFsdWUiXSl9KSxob3ZlcnRleHQ6bC5ob3ZlcnRleHQsaG92ZXJpbmZvOnUoe30sbi5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJuYW1lIiwiY3VycmVudCBwYXRoIiwicGVyY2VudCByb290IiwicGVyY2VudCBlbnRyeSIsInBlcmNlbnQgcGFyZW50Il0sZGZsdDoibGFiZWwrdGV4dCt2YWx1ZStuYW1lIn0pLGhvdmVydGVtcGxhdGU6aSh7fSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSx0ZXh0Zm9udDpsLnRleHRmb250LGluc2lkZXRleHRvcmllbnRhdGlvbjpsLmluc2lkZXRleHRvcmllbnRhdGlvbixpbnNpZGV0ZXh0Zm9udDpsLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDp1KHt9LGwub3V0c2lkZXRleHRmb250LHt9KSxyb3RhdGlvbjp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LHNvcnQ6bC5zb3J0LHJvb3Q6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6InJnYmEoMCwwLDAsMCkifSxlZGl0VHlwZToiY2FsYyJ9LGRvbWFpbjpzKHtuYW1lOiJzdW5idXJzdCIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODI0LCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6OTA2LCIuLi9waWUvYXR0cmlidXRlcyI6MTE2MSwiLi9jb25zdGFudHMiOjEzMDJ9XSwxMzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIik7ci5uYW1lPSJzdW5idXJzdCIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODkxfV0sMTMwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMy1oaWVyYXJjaHkiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZSxzPXQoIi4uL3BpZS9jYWxjIikubWFrZVB1bGxDb2xvckZuLGw9dCgiLi4vcGllL2NhbGMiKS5nZW5lcmF0ZUV4dGVuZGVkQ29sb3JzLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuY2FsYyx1PXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5BTE1PU1RfRVFVQUwsZj17fSxoPXt9O3IuY2FsYz1mdW5jdGlvbih0LGUpe3ZhciByLGwsZixoLHAsZCxnPXQuX2Z1bGxMYXlvdXQsbT1lLmlkcyx2PWEuaXNBcnJheU9yVHlwZWRBcnJheShtKSx5PWUubGFiZWxzLHg9ZS5wYXJlbnRzLGI9ZS52YWx1ZXMsXz1hLmlzQXJyYXlPclR5cGVkQXJyYXkoYiksdz1bXSxUPXt9LGs9e30sTT1mdW5jdGlvbih0KXtyZXR1cm4gdHx8Im51bWJlciI9PXR5cGVvZiB0fSxBPWZ1bmN0aW9uKHQpe3JldHVybiFffHxpKGJbdF0pJiZiW3RdPj0wfTt2PyhyPU1hdGgubWluKG0ubGVuZ3RoLHgubGVuZ3RoKSxsPWZ1bmN0aW9uKHQpe3JldHVybiBNKG1bdF0pJiZBKHQpfSxmPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcobVt0XSl9KToocj1NYXRoLm1pbih5Lmxlbmd0aCx4Lmxlbmd0aCksbD1mdW5jdGlvbih0KXtyZXR1cm4gTSh5W3RdKSYmQSh0KX0sZj1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHlbdF0pfSksXyYmKHI9TWF0aC5taW4ocixiLmxlbmd0aCkpO2Zvcih2YXIgUz0wO1M8cjtTKyspaWYobChTKSl7dmFyIEU9ZihTKSxDPU0oeFtTXSk/U3RyaW5nKHhbU10pOiIiLEw9e2k6UyxpZDpFLHBpZDpDLGxhYmVsOk0oeVtTXSk/U3RyaW5nKHlbU10pOiIifTtfJiYoTC52PStiW1NdKSx3LnB1c2goTCkscD1FLFRbaD1DXT9UW2hdLnB1c2gocCk6VFtoXT1bcF0sa1twXT0xfWlmKFRbIiJdKXtpZihUWyIiXS5sZW5ndGg+MSl7Zm9yKHZhciBJPWEucmFuZHN0cigpLFA9MDtQPHcubGVuZ3RoO1ArKykiIj09PXdbUF0ucGlkJiYod1tQXS5waWQ9SSk7dy51bnNoaWZ0KHtoYXNNdWx0aXBsZVJvb3RzOiEwLGlkOkkscGlkOiIiLGxhYmVsOiIifSl9fWVsc2V7dmFyIHosTz1bXTtmb3IoeiBpbiBUKWtbel18fE8ucHVzaCh6KTtpZigxIT09Ty5sZW5ndGgpcmV0dXJuIGEud2FybihbIk11bHRpcGxlIGltcGxpZWQgcm9vdHMsIGNhbm5vdCBidWlsZCIsZS50eXBlLCJoaWVyYXJjaHkgb2YiLGUubmFtZSsiLiIsIlRoZXNlIHJvb3RzIGluY2x1ZGU6IixPLmpvaW4oIiwgIildLmpvaW4oIiAiKSk7ej1PWzBdLHcudW5zaGlmdCh7aGFzSW1wbGllZFJvb3Q6ITAsaWQ6eixwaWQ6IiIsbGFiZWw6en0pfXRyeXtkPW4uc3RyYXRpZnkoKS5pZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkucGFyZW50SWQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpZH0pKSh3KX1jYXRjaCh0KXtyZXR1cm4gYS53YXJuKFsiRmFpbGVkIHRvIGJ1aWxkIixlLnR5cGUsImhpZXJhcmNoeSBvZiIsZS5uYW1lKyIuIiwiRXJyb3I6Iix0Lm1lc3NhZ2VdLmpvaW4oIiAiKSl9dmFyIEQ9bi5oaWVyYXJjaHkoZCksUj0hMTtpZihfKXN3aXRjaChlLmJyYW5jaHZhbHVlcyl7Y2FzZSJyZW1haW5kZXIiOkQuc3VtKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLnZ9KSk7YnJlYWs7Y2FzZSJ0b3RhbCI6RC5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj10LmRhdGEuZGF0YSxuPXIudjtpZih0LmNoaWxkcmVuKXt2YXIgaT10LmNoaWxkcmVuLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLmRhdGEuZGF0YS52fSksMCk7aWYoKHIuaGFzSW1wbGllZFJvb3R8fHIuaGFzTXVsdGlwbGVSb290cykmJihuPWkpLG48aSp1KXJldHVybiBSPSEwLGEud2FybihbIlRvdGFsIHZhbHVlIGZvciBub2RlIix0LmRhdGEuZGF0YS5pZCwib2YiLGUubmFtZSwiaXMgc21hbGxlciB0aGFuIHRoZSBzdW0gb2YgaXRzIGNoaWxkcmVuLiIsIlxucGFyZW50IHZhbHVlID0iLG4sIlxuY2hpbGRyZW4gc3VtID0iLGldLmpvaW4oIiAiKSl9dC52YWx1ZT1ufSkpfWVsc2UhZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9MCxhPWUuY2hpbGRyZW47aWYoYSl7Zm9yKHZhciBvPWEubGVuZ3RoLHM9MDtzPG87cysrKWkrPXQoYVtzXSxyLG4pO24uYnJhbmNoZXMmJmkrK31lbHNlIG4ubGVhdmVzJiZpKys7ZS52YWx1ZT1lLmRhdGEuZGF0YS52YWx1ZT1pLHIuX3ZhbHVlc3x8KHIuX3ZhbHVlcz1bXSk7cmV0dXJuIHIuX3ZhbHVlc1tlLmRhdGEuZGF0YS5pXT1pLGl9KEQsZSx7YnJhbmNoZXM6LTEhPT1lLmNvdW50LmluZGV4T2YoImJyYW5jaGVzIiksbGVhdmVzOi0xIT09ZS5jb3VudC5pbmRleE9mKCJsZWF2ZXMiKX0pO2lmKCFSKXt2YXIgRixCO2Uuc29ydCYmRC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9KSk7dmFyIE49ZS5tYXJrZXIuY29sb3JzfHxbXSxqPSEhTi5sZW5ndGg7cmV0dXJuIGUuX2hhc0NvbG9yc2NhbGU/KGp8fChOPV8/ZS52YWx1ZXM6ZS5fdmFsdWVzKSxjKHQsZSx7dmFsczpOLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLEI9byhlLm1hcmtlcikpOkY9cyhnWyJfIitlLnR5cGUrImNvbG9ybWFwIl0pLEQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9dC5kYXRhLmRhdGE7ci5jb2xvcj1lLl9oYXNDb2xvcnNjYWxlP0IoTltyLmldKTpGKE5bci5pXSxyLmlkKX0pKSx3WzBdLmhpZXJhcmNoeT1ELHd9fSxyLl9ydW5Dcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2Z1bGxMYXlvdXQsbj1lLmNhbGNkYXRhLGk9clt0KyJjb2xvcndheSJdLGE9clsiXyIrdCsiY29sb3JtYXAiXTtyWyJleHRlbmQiK3QrImNvbG9ycyJdJiYoaT1sKGksInRyZWVtYXAiPT09dD9oOmYpKTt2YXIgbyxzPTA7ZnVuY3Rpb24gYyh0KXt2YXIgZT10LmRhdGEuZGF0YSxyPWUuaWQ7ITE9PT1lLmNvbG9yJiYoYVtyXT9lLmNvbG9yPWFbcl06dC5wYXJlbnQ/dC5wYXJlbnQucGFyZW50P2UuY29sb3I9dC5wYXJlbnQuZGF0YS5kYXRhLmNvbG9yOihhW3JdPWUuY29sb3I9aVtzJWkubGVuZ3RoXSxzKyspOmUuY29sb3I9byl9Zm9yKHZhciB1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBwPW5bdV1bMF07cC50cmFjZS50eXBlPT09dCYmcC5oaWVyYXJjaHkmJihvPXAudHJhY2Uucm9vdC5jb2xvcixwLmhpZXJhcmNoeS5lYWNoKGMpKX19LHIuY3Jvc3NUcmFjZUNhbGM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuX3J1bkNyb3NzVHJhY2VDYWxjKCJzdW5idXJzdCIsdCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjU1LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCIuLi9waWUvY2FsYyI6MTE2MywiZDMtaGllcmFyY2h5IjoxNjEsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMzAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Q0xJQ0tfVFJBTlNJVElPTl9USU1FOjc1MCxDTElDS19UUkFOU0lUSU9OX0VBU0lORzoibGluZWFyIixldmVudERhdGFLZXlzOlsiY3VycmVudFBhdGgiLCJyb290IiwiZW50cnkiLCJwZXJjZW50Um9vdCIsInBlcmNlbnRFbnRyeSIsInBlcmNlbnRQYXJlbnQiXX19LHt9XSwxMzAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxsPXMuaGFzQ29sb3JzY2FsZSxjPXMuaGFuZGxlRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIHUocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgZj11KCJsYWJlbHMiKSxoPXUoInBhcmVudHMiKTtpZihmJiZmLmxlbmd0aCYmaCYmaC5sZW5ndGgpe3ZhciBwPXUoInZhbHVlcyIpO3AmJnAubGVuZ3RoP3UoImJyYW5jaHZhbHVlcyIpOnUoImNvdW50IiksdSgibGV2ZWwiKSx1KCJtYXhkZXB0aCIpLHUoIm1hcmtlci5saW5lLndpZHRoIikmJnUoIm1hcmtlci5saW5lLmNvbG9yIixzLnBhcGVyX2JnY29sb3IpLHUoIm1hcmtlci5jb2xvcnMiKTt2YXIgZD1lLl9oYXNDb2xvcnNjYWxlPWwodCwibWFya2VyIiwiY29sb3JzIil8fCh0Lm1hcmtlcnx8e30pLmNvbG9yYXhpcztkJiZjKHQsZSxzLHUse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KSx1KCJsZWFmLm9wYWNpdHkiLGQ/MTouNyk7dmFyIGc9dSgidGV4dCIpO3UoInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHx1KCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheShnKT8idGV4dCtsYWJlbCI6ImxhYmVsIiksdSgiaG92ZXJ0ZXh0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpO28odCxlLHMsdSwiYXV0byIse21vZHVsZUhhc1NlbGVjdGVkOiExLG1vZHVsZUhhc1Vuc2VsZWN0ZWQ6ITEsbW9kdWxlSGFzQ29uc3RyYWluOiExLG1vZHVsZUhhc0NsaXBvbmF4aXM6ITEsbW9kdWxlSGFzVGV4dGFuZ2xlOiExLG1vZHVsZUhhc0luc2lkZWFuY2hvcjohMX0pLHUoImluc2lkZXRleHRvcmllbnRhdGlvbiIpLHUoInNvcnQiKSx1KCJyb3RhdGlvbiIpLHUoInJvb3QuY29sb3IiKSxhKGUscyx1KSxlLl9sZW5ndGg9bnVsbH1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vYmFyL2RlZmF1bHRzIjo5MjUsIi4vYXR0cmlidXRlcyI6MTI5OX1dLDEzMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUsbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9ldmVudHMiKSxjPXQoIi4vaGVscGVycyIpLHU9dCgiLi4vcGllL2hlbHBlcnMiKS5mb3JtYXRQaWVWYWx1ZTtmdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49dC5kYXRhLmRhdGEsaT17Y3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcjpuLmksZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplfSxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBzPXJbb107cyBpbiB0JiYoaVtzXT10W3NdKX1yZXR1cm4icGFyZW50U3RyaW5nImluIHQmJiFjLmlzSGllcmFyY2h5Um9vdCh0KSYmKGkucGFyZW50PXQucGFyZW50U3RyaW5nKSxhKGksZSxuLmkpLGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsaCl7dmFyIHA9YVswXSxkPXAudHJhY2UsZz1wLmhpZXJhcmNoeSxtPSJzdW5idXJzdCI9PT1kLnR5cGUsdj0idHJlZW1hcCI9PT1kLnR5cGU7Il9oYXNIb3ZlckxhYmVsImluIGR8fChkLl9oYXNIb3ZlckxhYmVsPSExKSwiX2hhc0hvdmVyRXZlbnQiaW4gZHx8KGQuX2hhc0hvdmVyRXZlbnQ9ITEpO3Qub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKGkpe3ZhciBhPXIuX2Z1bGxMYXlvdXQ7aWYoIXIuX2RyYWdnaW5nJiYhMSE9PWEuaG92ZXJtb2RlKXt2YXIgbD1yLl9mdWxsRGF0YVtkLmluZGV4XSx5PWkuZGF0YS5kYXRhLHg9eS5pLGI9Yy5pc0hpZXJhcmNoeVJvb3QoaSksXz1jLmdldFBhcmVudChnLGkpLHc9Yy5nZXRWYWx1ZShpKSxUPWZ1bmN0aW9uKHQpe3JldHVybiBzLmNhc3RPcHRpb24obCx4LHQpfSxrPVQoImhvdmVydGVtcGxhdGUiKSxNPW8uY2FzdEhvdmVyaW5mbyhsLGEseCksQT1hLnNlcGFyYXRvcnM7aWYoa3x8TSYmIm5vbmUiIT09TSYmInNraXAiIT09TSl7dmFyIFMsRTttJiYoUz1wLmN4K2kucHhtaWRbMF0qKDEtaS5ySW5zY3JpYmVkKSxFPXAuY3kraS5weG1pZFsxXSooMS1pLnJJbnNjcmliZWQpKSx2JiYoUz1pLl9ob3ZlclgsRT1pLl9ob3ZlclkpO3ZhciBDLEw9e30sST1bXSxQPVtdLHo9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1JLmluZGV4T2YodCl9O00mJihJPSJhbGwiPT09TT9sLl9tb2R1bGUuYXR0cmlidXRlcy5ob3ZlcmluZm8uZmxhZ3M6TS5zcGxpdCgiKyIpKSxMLmxhYmVsPXkubGFiZWwseigibGFiZWwiKSYmTC5sYWJlbCYmUC5wdXNoKEwubGFiZWwpLHkuaGFzT3duUHJvcGVydHkoInYiKSYmKEwudmFsdWU9eS52LEwudmFsdWVMYWJlbD11KEwudmFsdWUsQSkseigidmFsdWUiKSYmUC5wdXNoKEwudmFsdWVMYWJlbCkpLEwuY3VycmVudFBhdGg9aS5jdXJyZW50UGF0aD1jLmdldFBhdGgoaS5kYXRhKSx6KCJjdXJyZW50IHBhdGgiKSYmIWImJlAucHVzaChMLmN1cnJlbnRQYXRoKTt2YXIgTz1bXSxEPWZ1bmN0aW9uKCl7LTE9PT1PLmluZGV4T2YoQykmJihQLnB1c2goQyksTy5wdXNoKEMpKX07TC5wZXJjZW50UGFyZW50PWkucGVyY2VudFBhcmVudD13L2MuZ2V0VmFsdWUoXyksTC5wYXJlbnQ9aS5wYXJlbnRTdHJpbmc9Yy5nZXRQdExhYmVsKF8pLHooInBlcmNlbnQgcGFyZW50IikmJihDPWMuZm9ybWF0UGVyY2VudChMLnBlcmNlbnRQYXJlbnQsQSkrIiBvZiAiK0wucGFyZW50LEQoKSksTC5wZXJjZW50RW50cnk9aS5wZXJjZW50RW50cnk9dy9jLmdldFZhbHVlKGUpLEwuZW50cnk9aS5lbnRyeT1jLmdldFB0TGFiZWwoZSksIXooInBlcmNlbnQgZW50cnkiKXx8Ynx8aS5vblBhdGhiYXJ8fChDPWMuZm9ybWF0UGVyY2VudChMLnBlcmNlbnRFbnRyeSxBKSsiIG9mICIrTC5lbnRyeSxEKCkpLEwucGVyY2VudFJvb3Q9aS5wZXJjZW50Um9vdD13L2MuZ2V0VmFsdWUoZyksTC5yb290PWkucm9vdD1jLmdldFB0TGFiZWwoZykseigicGVyY2VudCByb290IikmJiFiJiYoQz1jLmZvcm1hdFBlcmNlbnQoTC5wZXJjZW50Um9vdCxBKSsiIG9mICIrTC5yb290LEQoKSksTC50ZXh0PVQoImhvdmVydGV4dCIpfHxUKCJ0ZXh0IikseigidGV4dCIpJiYoQz1MLnRleHQscy5pc1ZhbGlkVGV4dFZhbHVlKEMpJiZQLnB1c2goQykpO3ZhciBSPXt0cmFjZTpsLHk6RSx0ZXh0OlAuam9pbigiPGJyPiIpLG5hbWU6a3x8eigibmFtZSIpP2wubmFtZTp2b2lkIDAsY29sb3I6VCgiaG92ZXJsYWJlbC5iZ2NvbG9yIil8fHkuY29sb3IsYm9yZGVyQ29sb3I6VCgiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6VCgiaG92ZXJsYWJlbC5mb250LmZhbWlseSIpLGZvbnRTaXplOlQoImhvdmVybGFiZWwuZm9udC5zaXplIiksZm9udENvbG9yOlQoImhvdmVybGFiZWwuZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6VCgiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoIiksdGV4dEFsaWduOlQoImhvdmVybGFiZWwuYWxpZ24iKSxob3ZlcnRlbXBsYXRlOmssaG92ZXJ0ZW1wbGF0ZUxhYmVsczpMLGV2ZW50RGF0YTpbZihpLGwsaC5ldmVudERhdGFLZXlzKV19O20mJihSLngwPVMtaS5ySW5zY3JpYmVkKmkucnB4MSxSLngxPVMraS5ySW5zY3JpYmVkKmkucnB4MSxSLmlkZWFsQWxpZ249aS5weG1pZFswXTwwPyJsZWZ0IjoicmlnaHQiKSx2JiYoUi54PVMsUi5pZGVhbEFsaWduPVM8MD8ibGVmdCI6InJpZ2h0Iiksby5sb25lSG92ZXIoUix7Y29udGFpbmVyOmEuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOmEuX3BhcGVyLm5vZGUoKSxnZDpyfSksZC5faGFzSG92ZXJMYWJlbD0hMH1pZih2KXt2YXIgRj10LnNlbGVjdCgicGF0aC5zdXJmYWNlIik7aC5zdHlsZU9uZShGLGksbCx7aG92ZXJlZDohMH0pfWQuX2hhc0hvdmVyRXZlbnQ9ITAsci5lbWl0KCJwbG90bHlfaG92ZXIiLHtwb2ludHM6W2YoaSxsLGguZXZlbnREYXRhS2V5cyldLGV2ZW50Om4uZXZlbnR9KX19KSksdC5vbigibW91c2VvdXQiLChmdW5jdGlvbihlKXt2YXIgaT1yLl9mdWxsTGF5b3V0LGE9ci5fZnVsbERhdGFbZC5pbmRleF0scz1uLnNlbGVjdCh0aGlzKS5kYXR1bSgpO2lmKGQuX2hhc0hvdmVyRXZlbnQmJihlLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCxyLmVtaXQoInBsb3RseV91bmhvdmVyIix7cG9pbnRzOltmKHMsYSxoLmV2ZW50RGF0YUtleXMpXSxldmVudDpuLmV2ZW50fSksZC5faGFzSG92ZXJFdmVudD0hMSksZC5faGFzSG92ZXJMYWJlbCYmKG8ubG9uZVVuaG92ZXIoaS5faG92ZXJsYXllci5ub2RlKCkpLGQuX2hhc0hvdmVyTGFiZWw9ITEpLHYpe3ZhciBsPXQuc2VsZWN0KCJwYXRoLnN1cmZhY2UiKTtoLnN0eWxlT25lKGwscyxhLHtob3ZlcmVkOiExfSl9fSkpLHQub24oImNsaWNrIiwoZnVuY3Rpb24odCl7dmFyIGU9ci5fZnVsbExheW91dCxhPXIuX2Z1bGxEYXRhW2QuaW5kZXhdLHM9bSYmKGMuaXNIaWVyYXJjaHlSb290KHQpfHxjLmlzTGVhZih0KSksdT1jLmdldFB0SWQodCkscD1jLmlzRW50cnkodCk/Yy5maW5kRW50cnlXaXRoQ2hpbGQoZyx1KTpjLmZpbmRFbnRyeVdpdGhMZXZlbChnLHUpLHY9Yy5nZXRQdElkKHApLHk9e3BvaW50czpbZih0LGEsaC5ldmVudERhdGFLZXlzKV0sZXZlbnQ6bi5ldmVudH07c3x8KHkubmV4dExldmVsPXYpO3ZhciB4PWwudHJpZ2dlckhhbmRsZXIociwicGxvdGx5XyIrZC50eXBlKyJjbGljayIseSk7aWYoITEhPT14JiZlLmhvdmVybW9kZSYmKHIuX2hvdmVyZGF0YT1bZih0LGEsaC5ldmVudERhdGFLZXlzKV0sby5jbGljayhyLG4uZXZlbnQpKSwhcyYmITEhPT14JiYhci5fZHJhZ2dpbmcmJiFyLl90cmFuc2l0aW9uaW5nKXtpLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLGEsZS5fdHJhY2VQcmVHVUlbYS51aWRdLHtsZXZlbDphLmxldmVsfSk7dmFyIGI9e2RhdGE6W3tsZXZlbDp2fV0sdHJhY2VzOltkLmluZGV4XX0sXz17ZnJhbWU6e3JlZHJhdzohMSxkdXJhdGlvbjpoLnRyYW5zaXRpb25UaW1lfSx0cmFuc2l0aW9uOntkdXJhdGlvbjpoLnRyYW5zaXRpb25UaW1lLGVhc2luZzpoLnRyYW5zaXRpb25FYXNpbmd9LG1vZGU6ImltbWVkaWF0ZSIsZnJvbWN1cnJlbnQ6ITB9O28ubG9uZVVuaG92ZXIoZS5faG92ZXJsYXllci5ub2RlKCkpLGkuY2FsbCgiYW5pbWF0ZSIscixiLF8pfX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjgzLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3OSwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL2xpYi9ldmVudHMiOjc2NywiLi4vLi4vcmVnaXN0cnkiOjkxMSwiLi4vcGllL2hlbHBlcnMiOjExNjYsIi4vaGVscGVycyI6MTMwNSxkMzoxNjl9XSwxMzA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLG89dCgiLi4vcGllL2hlbHBlcnMiKTtmdW5jdGlvbiBzKHQpe3JldHVybiB0LmRhdGEuZGF0YS5waWR9ci5maW5kRW50cnlXaXRoTGV2ZWw9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gZSYmdC5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKHQpe2lmKHIuZ2V0UHRJZCh0KT09PWUpcmV0dXJuIG49dC5jb3B5KCl9KSksbnx8dH0sci5maW5kRW50cnlXaXRoQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gdC5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT10LmNoaWxkcmVufHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07aWYoci5nZXRQdElkKG8pPT09ZSlyZXR1cm4gbj10LmNvcHkoKX19KSksbnx8dH0sci5pc0VudHJ5PWZ1bmN0aW9uKHQpe3JldHVybiF0LnBhcmVudH0sci5pc0xlYWY9ZnVuY3Rpb24odCl7cmV0dXJuIXQuY2hpbGRyZW59LHIuZ2V0UHRJZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLmRhdGEuaWR9LHIuZ2V0UHRMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLmRhdGEubGFiZWx9LHIuZ2V0VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9LHIuaXNIaWVyYXJjaHlSb290PWZ1bmN0aW9uKHQpe3JldHVybiIiPT09cyh0KX0sci5zZXRTbGljZUN1cnNvcj1mdW5jdGlvbih0LGUsbil7dmFyIGk9bi5pc1RyYW5zaXRpb25pbmc7aWYoIWkpe3ZhciBvPXQuZGF0dW0oKTtpPW4uaGlkZU9uUm9vdCYmci5pc0hpZXJhcmNoeVJvb3Qobyl8fG4uaGlkZU9uTGVhdmVzJiZyLmlzTGVhZihvKX1hKHQsaT9udWxsOiJwb2ludGVyIil9LHIuZ2V0SW5zaWRlVGV4dEZvbnRLZXk9ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz0oYXx8e30pLm9uUGF0aGJhcj8icGF0aGJhci50ZXh0Zm9udCI6Imluc2lkZXRleHRmb250IixzPXIuZGF0YS5kYXRhLmk7cmV0dXJuIG4uY2FzdE9wdGlvbihlLHMsbysiLiIrdCl8fG4uY2FzdE9wdGlvbihlLHMsInRleHRmb250LiIrdCl8fGkuc2l6ZX0sci5nZXRPdXRzaWRlVGV4dEZvbnRLZXk9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9ci5kYXRhLmRhdGEuaTtyZXR1cm4gbi5jYXN0T3B0aW9uKGUsYSwib3V0c2lkZXRleHRmb250LiIrdCl8fG4uY2FzdE9wdGlvbihlLGEsInRleHRmb250LiIrdCl8fGkuc2l6ZX0sci5pc091dHNpZGVUZXh0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIXQuX2hhc0NvbG9yc2NhbGUmJnIuaXNIaWVyYXJjaHlSb290KGUpfSxyLmRldGVybWluZVRleHRGb250PWZ1bmN0aW9uKHQsZSxhLG8pe3JldHVybiByLmlzT3V0c2lkZVRleHQodCxlKT9mdW5jdGlvbih0LGUsbil7cmV0dXJue2NvbG9yOnIuZ2V0T3V0c2lkZVRleHRGb250S2V5KCJjb2xvciIsdCxlLG4pLGZhbWlseTpyLmdldE91dHNpZGVUZXh0Rm9udEtleSgiZmFtaWx5Iix0LGUsbiksc2l6ZTpyLmdldE91dHNpZGVUZXh0Rm9udEtleSgic2l6ZSIsdCxlLG4pfX0odCxlLGEpOmZ1bmN0aW9uKHQsZSxhLG8pe3ZhciBzPShvfHx7fSkub25QYXRoYmFyLGw9ZS5kYXRhLmRhdGEsYz1sLmksdT1uLmNhc3RPcHRpb24odCxjLChzPyJwYXRoYmFyLnRleHRmb250IjoiaW5zaWRldGV4dGZvbnQiKSsiLmNvbG9yIik7cmV0dXJuIXUmJnQuX2lucHV0LnRleHRmb250JiYodT1uLmNhc3RPcHRpb24odC5faW5wdXQsYywidGV4dGZvbnQuY29sb3IiKSkse2NvbG9yOnV8fGkuY29udHJhc3QobC5jb2xvciksZmFtaWx5OnIuZ2V0SW5zaWRlVGV4dEZvbnRLZXkoImZhbWlseSIsdCxlLGEsbyksc2l6ZTpyLmdldEluc2lkZVRleHRGb250S2V5KCJzaXplIix0LGUsYSxvKX19KHQsZSxhLG8pfSxyLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuISEodCYmdC5kdXJhdGlvbj4wKX0sci5nZXRNYXhEZXB0aD1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXhkZXB0aD49MD90Lm1heGRlcHRoOjEvMH0sci5pc0hlYWRlcj1mdW5jdGlvbih0LGUpe3JldHVybiEoci5pc0xlYWYodCl8fHQuZGVwdGg9PT1lLl9tYXhEZXB0aC0xKX0sci5nZXRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5maW5kRW50cnlXaXRoTGV2ZWwodCxzKGUpKX0sci5saXN0UGF0aD1mdW5jdGlvbih0LGUpe3ZhciBuPXQucGFyZW50O2lmKCFuKXJldHVybltdO3ZhciBpPWU/W24uZGF0YVtlXV06W25dO3JldHVybiByLmxpc3RQYXRoKG4sZSkuY29uY2F0KGkpfSxyLmdldFBhdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHIubGlzdFBhdGgodCwibGFiZWwiKS5qb2luKCIvIikrIi8ifSxyLmZvcm1hdFZhbHVlPW8uZm9ybWF0UGllVmFsdWUsci5mb3JtYXRQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5mb3JtYXRQZXJjZW50KHQsMCk7cmV0dXJuIjAlIj09PXImJihyPW8uZm9ybWF0UGllUGVyY2VudCh0LGUpKSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3OTksIi4uL3BpZS9oZWxwZXJzIjoxMTY2fV0sMTMwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzdW5idXJzdCIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOltdLGFuaW1hdGFibGU6ITAsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG1ldGE6e319fSx7Ii4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA1LCIuL2F0dHJpYnV0ZXMiOjEyOTksIi4vYmFzZV9wbG90IjoxMzAwLCIuL2NhbGMiOjEzMDEsIi4vZGVmYXVsdHMiOjEzMDMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEzMDcsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMzA4LCIuL3Bsb3QiOjEzMDksIi4vc3R5bGUiOjEzMTB9XSwxMzA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c3VuYnVyc3Rjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZHN1bmJ1cnN0Y29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTMwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigic3VuYnVyc3Rjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kc3VuYnVyc3Rjb2xvcnMiKX19LHsiLi4vLi4vbGliIjo3NzgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEzMDd9XSwxMzA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJkMy1oaWVyYXJjaHkiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxsPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKSxjPWwucmVjb3JkTWluVGV4dFNpemUsdT1sLmNsZWFyTWluVGV4dFNpemUsZj10KCIuLi9waWUvcGxvdCIpLGg9dCgiLi4vcGllL2hlbHBlcnMiKS5nZXRSb3RhdGlvbkFuZ2xlLHA9Zi5jb21wdXRlVHJhbnNmb3JtLGQ9Zi50cmFuc2Zvcm1JbnNpZGVUZXh0LGc9dCgiLi9zdHlsZSIpLnN0eWxlT25lLG09dCgiLi4vYmFyL3N0eWxlIikucmVzaXplVGV4dCx2PXQoIi4vZngiKSx5PXQoIi4vY29uc3RhbnRzIikseD10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBiKHQsZSxsLHUpe3ZhciBmPXQuX2Z1bGxMYXlvdXQsbT0hZi51bmlmb3JtdGV4dC5tb2RlJiZ4Lmhhc1RyYW5zaXRpb24odSksYj1uLnNlbGVjdChsKS5zZWxlY3RBbGwoImcuc2xpY2UiKSx3PWVbMF0sVD13LnRyYWNlLGs9dy5oaWVyYXJjaHksTT14LmZpbmRFbnRyeVdpdGhMZXZlbChrLFQubGV2ZWwpLEE9eC5nZXRNYXhEZXB0aChUKSxTPWYuX3NpemUsRT1ULmRvbWFpbixDPVMudyooRS54WzFdLUUueFswXSksTD1TLmgqKEUueVsxXS1FLnlbMF0pLEk9LjUqTWF0aC5taW4oQyxMKSxQPXcuY3g9Uy5sK1MudyooRS54WzFdK0UueFswXSkvMix6PXcuY3k9Uy50K1MuaCooMS1FLnlbMF0pLUwvMjtpZighTSlyZXR1cm4gYi5yZW1vdmUoKTt2YXIgTz1udWxsLEQ9e307bSYmYi5lYWNoKChmdW5jdGlvbih0KXtEW3guZ2V0UHRJZCh0KV09e3JweDA6dC5ycHgwLHJweDE6dC5ycHgxLHgwOnQueDAseDE6dC54MSx0cmFuc2Zvcm06dC50cmFuc2Zvcm19LCFPJiZ4LmlzRW50cnkodCkmJihPPXQpfSkpO3ZhciBSPWZ1bmN0aW9uKHQpe3JldHVybiBpLnBhcnRpdGlvbigpLnNpemUoWzIqTWF0aC5QSSx0LmhlaWdodCsxXSkodCl9KE0pLmRlc2NlbmRhbnRzKCksRj1NLmhlaWdodCsxLEI9MCxOPUE7dy5oYXNNdWx0aXBsZVJvb3RzJiZ4LmlzSGllcmFyY2h5Um9vdChNKSYmKFI9Ui5zbGljZSgxKSxGLT0xLEI9MSxOKz0xKSxSPVIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC55MTw9Tn0pKTt2YXIgaj1oKFQucm90YXRpb24pO2omJlIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC54MCs9aix0LngxKz1qfSkpO3ZhciBVPU1hdGgubWluKEYsQSksVj1mdW5jdGlvbih0KXtyZXR1cm4odC1CKS9VKkl9LHE9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSwtdCpNYXRoLnNpbihlKV19LEg9ZnVuY3Rpb24odCl7cmV0dXJuIG8ucGF0aEFubnVsdXModC5ycHgwLHQucnB4MSx0LngwLHQueDEsUCx6KX0sRz1mdW5jdGlvbih0KXtyZXR1cm4gUCtfKHQpWzBdKih0LnRyYW5zZm9ybS5yQ2VudGVyfHwwKSsodC50cmFuc2Zvcm0ueHx8MCl9LFk9ZnVuY3Rpb24odCl7cmV0dXJuIHorXyh0KVsxXSoodC50cmFuc2Zvcm0uckNlbnRlcnx8MCkrKHQudHJhbnNmb3JtLnl8fDApfTsoYj1iLmRhdGEoUix4LmdldFB0SWQpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCksbT9iLmV4aXQoKS50cmFuc2l0aW9uKCkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LnNlbGVjdCgicGF0aC5zdXJmYWNlIikudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsKGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9eC5nZXRQdElkKHQpLGk9RFtyXSxhPURbeC5nZXRQdElkKE0pXTtpZihhKXt2YXIgbz0odC54MT5hLngxPzIqTWF0aC5QSTowKStqO2U9dC5ycHgxPGEucnB4MT97cnB4MDowLHJweDE6MH06e3gwOm8seDE6b319ZWxzZXt2YXIgcyxsPXguZ2V0UHRJZCh0LnBhcmVudCk7Yi5lYWNoKChmdW5jdGlvbih0KXtpZih4LmdldFB0SWQodCk9PT1sKXJldHVybiBzPXR9KSk7dmFyIGMsdT1zLmNoaWxkcmVuO3UuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtpZih4LmdldFB0SWQodCk9PT1yKXJldHVybiBjPWV9KSk7dmFyIGY9dS5sZW5ndGgsaD1uLmludGVycG9sYXRlKHMueDAscy54MSk7ZT17cnB4MDpJLHJweDE6SSx4MDpoKGMvZikseDE6aCgoYysxKS9mKX19cmV0dXJuIG4uaW50ZXJwb2xhdGUoaSxlKX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBIKGUodCkpfX0pKSx0LnNlbGVjdCgiZy5zbGljZXRleHQiKS5hdHRyKCJvcGFjaXR5IiwwKX0pKS5yZW1vdmUoKTpiLmV4aXQoKS5yZW1vdmUoKSxiLm9yZGVyKCk7dmFyIFc9bnVsbDtpZihtJiZPKXt2YXIgWD14LmdldFB0SWQoTyk7Yi5lYWNoKChmdW5jdGlvbih0KXtudWxsPT09VyYmeC5nZXRQdElkKHQpPT09WCYmKFc9dC54MSl9KSl9dmFyIFo9YjtmdW5jdGlvbiBKKHQpe3ZhciBlPXQucGFyZW50LHI9RFt4LmdldFB0SWQoZSldLGk9e307aWYocil7dmFyIGE9ZS5jaGlsZHJlbixvPWEuaW5kZXhPZih0KSxzPWEubGVuZ3RoLGw9bi5pbnRlcnBvbGF0ZShyLngwLHIueDEpO2kueDA9bChvL3MpLGkueDE9bChvL3MpfWVsc2UgaS54MD1pLngxPTA7cmV0dXJuIGl9bSYmKFo9Wi50cmFuc2l0aW9uKCkuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKTt4LnNldFNsaWNlQ3Vyc29yKGUsdCx7aGlkZU9uUm9vdDohMCxoaWRlT25MZWF2ZXM6ITAsaXNUcmFuc2l0aW9uaW5nOiExfSl9KSkpLFouZWFjaCgoZnVuY3Rpb24oaSl7dmFyIGw9bi5zZWxlY3QodGhpcyksdT1vLmVuc3VyZVNpbmdsZShsLCJwYXRoIiwic3VyZmFjZSIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7aS5ycHgwPVYoaS55MCksaS5ycHgxPVYoaS55MSksaS54bWlkPShpLngwK2kueDEpLzIsaS5weG1pZD1xKGkucnB4MSxpLnhtaWQpLGkubWlkYW5nbGU9LShpLnhtaWQtTWF0aC5QSS8yKSxpLnN0YXJ0YW5nbGU9LShpLngwLU1hdGguUEkvMiksaS5zdG9wYW5nbGU9LShpLngxLU1hdGguUEkvMiksaS5oYWxmYW5nbGU9LjUqTWF0aC5taW4oby5hbmdsZURlbHRhKGkueDAsaS54MSl8fE1hdGguUEksTWF0aC5QSSksaS5yaW5nPTEtaS5ycHgwL2kucnB4MSxpLnJJbnNjcmliZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10LnJweDAmJm8uaXNGdWxsQ2lyY2xlKFt0LngwLHQueDFdKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMS8oMSsxL01hdGguc2luKHQuaGFsZmFuZ2xlKSksdC5yaW5nLzIpKX0oaSksbT91LnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPURbeC5nZXRQdElkKHQpXSxpPXt4MDp0LngwLHgxOnQueDEscnB4MDp0LnJweDAscnB4MTp0LnJweDF9O2lmKHIpZT1yO2Vsc2UgaWYoTylpZih0LnBhcmVudClpZihXKXt2YXIgYT0odC54MT5XPzIqTWF0aC5QSTowKStqO2U9e3gwOmEseDE6YX19ZWxzZSBlPXtycHgwOkkscnB4MTpJfSxvLmV4dGVuZEZsYXQoZSxKKHQpKTtlbHNlIGU9e3JweDA6MCxycHgxOjB9O2Vsc2UgZT17eDA6aix4MTpqfTtyZXR1cm4gbi5pbnRlcnBvbGF0ZShlLGkpfSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEgoZSh0KSl9fSkpOnUuYXR0cigiZCIsSCksbC5jYWxsKHYsTSx0LGUse2V2ZW50RGF0YUtleXM6eS5ldmVudERhdGFLZXlzLHRyYW5zaXRpb25UaW1lOnkuQ0xJQ0tfVFJBTlNJVElPTl9USU1FLHRyYW5zaXRpb25FYXNpbmc6eS5DTElDS19UUkFOU0lUSU9OX0VBU0lOR30pLmNhbGwoeC5zZXRTbGljZUN1cnNvcix0LHtoaWRlT25Sb290OiEwLGhpZGVPbkxlYXZlczohMCxpc1RyYW5zaXRpb25pbmc6dC5fdHJhbnNpdGlvbmluZ30pLHUuY2FsbChnLGksVCk7dmFyIGg9by5lbnN1cmVTaW5nbGUobCwiZyIsInNsaWNldGV4dCIpLGI9by5lbnN1cmVTaW5nbGUoaCwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksXz1vLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LHguZGV0ZXJtaW5lVGV4dEZvbnQoVCxpLGYuZm9udCkpO2IudGV4dChyLmZvcm1hdFNsaWNlTGFiZWwoaSxNLFQsZSxmKSkuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGEuZm9udCxfKS5jYWxsKHMuY29udmVydFRvVHNwYW5zLHQpO3ZhciBrPWEuYkJveChiLm5vZGUoKSk7aS50cmFuc2Zvcm09ZChrLGksdyksaS50cmFuc2Zvcm0udGFyZ2V0WD1HKGkpLGkudHJhbnNmb3JtLnRhcmdldFk9WShpKTt2YXIgQT1mdW5jdGlvbih0LGUpe3ZhciByPXQudHJhbnNmb3JtO3JldHVybiBwKHIsZSksci5mb250U2l6ZT1fLnNpemUsYyhULnR5cGUscixmKSxvLmdldFRleHRUcmFuc2Zvcm0ocil9O20/Yi50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPURbeC5nZXRQdElkKHQpXSxpPXQudHJhbnNmb3JtO2lmKHIpZT1yO2Vsc2UgaWYoZT17cnB4MTp0LnJweDEsdHJhbnNmb3JtOnt0ZXh0UG9zQW5nbGU6aS50ZXh0UG9zQW5nbGUsc2NhbGU6MCxyb3RhdGU6aS5yb3RhdGUsckNlbnRlcjppLnJDZW50ZXIseDppLngseTppLnl9fSxPKWlmKHQucGFyZW50KWlmKFcpe3ZhciBhPXQueDE+Vz8yKk1hdGguUEk6MDtlLngwPWUueDE9YX1lbHNlIG8uZXh0ZW5kRmxhdChlLEoodCkpO2Vsc2UgZS54MD1lLngxPWo7ZWxzZSBlLngwPWUueDE9ajt2YXIgcz1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnRleHRQb3NBbmdsZSx0LnRyYW5zZm9ybS50ZXh0UG9zQW5nbGUpLGw9bi5pbnRlcnBvbGF0ZShlLnJweDEsdC5ycHgxKSx1PW4uaW50ZXJwb2xhdGUoZS54MCx0LngwKSxoPW4uaW50ZXJwb2xhdGUoZS54MSx0LngxKSxwPW4uaW50ZXJwb2xhdGUoZS50cmFuc2Zvcm0uc2NhbGUsaS5zY2FsZSksZD1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnJvdGF0ZSxpLnJvdGF0ZSksZz0wPT09aS5yQ2VudGVyPzM6MD09PWUudHJhbnNmb3JtLnJDZW50ZXI/MS8zOjEsbT1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnJDZW50ZXIsaS5yQ2VudGVyKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bCh0KSxyPXUodCksbj1oKHQpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIG0oTWF0aC5wb3codCxnKSl9KHQpLG89e3B4bWlkOnEoZSwocituKS8yKSxycHgxOmUsdHJhbnNmb3JtOnt0ZXh0UG9zQW5nbGU6cyh0KSxyQ2VudGVyOmEseDppLngseTppLnl9fTtyZXR1cm4gYyhULnR5cGUsaSxmKSx7dHJhbnNmb3JtOnt0YXJnZXRYOkcobyksdGFyZ2V0WTpZKG8pLHNjYWxlOnAodCkscm90YXRlOmQodCksckNlbnRlcjphfX19fSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEoZSh0KSxrKX19KSk6Yi5hdHRyKCJ0cmFuc2Zvcm0iLEEoaSxrKSl9KSl9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gZT10LnJweDEscj10LnRyYW5zZm9ybS50ZXh0UG9zQW5nbGUsW2UqTWF0aC5zaW4ociksLWUqTWF0aC5jb3MocildO3ZhciBlLHJ9ci5wbG90PWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5fc3VuYnVyc3RsYXllcixjPSFyLGY9IXMudW5pZm9ybXRleHQubW9kZSYmeC5oYXNUcmFuc2l0aW9uKHIpOyh1KCJzdW5idXJzdCIscyksKGE9bC5zZWxlY3RBbGwoImcudHJhY2Uuc3VuYnVyc3QiKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0cmFjZSIsITApLmNsYXNzZWQoInN1bmJ1cnN0IiwhMCkuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKSxhLm9yZGVyKCksZik/KGkmJihvPWkoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtvJiZvKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtvJiZvKCl9KSkuZWFjaCgoZnVuY3Rpb24oKXtsLnNlbGVjdEFsbCgiZy50cmFjZSIpLmVhY2goKGZ1bmN0aW9uKGUpe2IodCxlLHRoaXMscil9KSl9KSkpOihhLmVhY2goKGZ1bmN0aW9uKGUpe2IodCxlLHRoaXMscil9KSkscy51bmlmb3JtdGV4dC5tb2RlJiZtKHQscy5fc3VuYnVyc3RsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpLCJzdW5idXJzdCIpKTtjJiZhLmV4aXQoKS5yZW1vdmUoKX0sci5mb3JtYXRTbGljZUxhYmVsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ci50ZXh0dGVtcGxhdGUscz1yLnRleHRpbmZvO2lmKCEoYXx8cyYmIm5vbmUiIT09cykpcmV0dXJuIiI7dmFyIGw9aS5zZXBhcmF0b3JzLGM9blswXSx1PXQuZGF0YS5kYXRhLGY9Yy5oaWVyYXJjaHksaD14LmlzSGllcmFyY2h5Um9vdCh0KSxwPXguZ2V0UGFyZW50KGYsdCksZD14LmdldFZhbHVlKHQpO2lmKCFhKXt2YXIgZyxtPXMuc3BsaXQoIisiKSx2PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09bS5pbmRleE9mKHQpfSx5PVtdO2lmKHYoImxhYmVsIikmJnUubGFiZWwmJnkucHVzaCh1LmxhYmVsKSx1Lmhhc093blByb3BlcnR5KCJ2IikmJnYoInZhbHVlIikmJnkucHVzaCh4LmZvcm1hdFZhbHVlKHUudixsKSksIWgpe3YoImN1cnJlbnQgcGF0aCIpJiZ5LnB1c2goeC5nZXRQYXRoKHQuZGF0YSkpO3ZhciBiPTA7digicGVyY2VudCBwYXJlbnQiKSYmYisrLHYoInBlcmNlbnQgZW50cnkiKSYmYisrLHYoInBlcmNlbnQgcm9vdCIpJiZiKys7dmFyIF89Yj4xO2lmKGIpe3ZhciB3LFQ9ZnVuY3Rpb24odCl7Zz14LmZvcm1hdFBlcmNlbnQodyxsKSxfJiYoZys9IiBvZiAiK3QpLHkucHVzaChnKX07digicGVyY2VudCBwYXJlbnQiKSYmIWgmJih3PWQveC5nZXRWYWx1ZShwKSxUKCJwYXJlbnQiKSksdigicGVyY2VudCBlbnRyeSIpJiYodz1kL3guZ2V0VmFsdWUoZSksVCgiZW50cnkiKSksdigicGVyY2VudCByb290IikmJih3PWQveC5nZXRWYWx1ZShmKSxUKCJyb290IikpfX1yZXR1cm4gdigidGV4dCIpJiYoZz1vLmNhc3RPcHRpb24ocix1LmksInRleHQiKSxvLmlzVmFsaWRUZXh0VmFsdWUoZykmJnkucHVzaChnKSkseS5qb2luKCI8YnI+Iil9dmFyIGs9by5jYXN0T3B0aW9uKHIsdS5pLCJ0ZXh0dGVtcGxhdGUiKTtpZighaylyZXR1cm4iIjt2YXIgTT17fTt1LmxhYmVsJiYoTS5sYWJlbD11LmxhYmVsKSx1Lmhhc093blByb3BlcnR5KCJ2IikmJihNLnZhbHVlPXUudixNLnZhbHVlTGFiZWw9eC5mb3JtYXRWYWx1ZSh1LnYsbCkpLE0uY3VycmVudFBhdGg9eC5nZXRQYXRoKHQuZGF0YSksaHx8KE0ucGVyY2VudFBhcmVudD1kL3guZ2V0VmFsdWUocCksTS5wZXJjZW50UGFyZW50TGFiZWw9eC5mb3JtYXRQZXJjZW50KE0ucGVyY2VudFBhcmVudCxsKSxNLnBhcmVudD14LmdldFB0TGFiZWwocCkpLE0ucGVyY2VudEVudHJ5PWQveC5nZXRWYWx1ZShlKSxNLnBlcmNlbnRFbnRyeUxhYmVsPXguZm9ybWF0UGVyY2VudChNLnBlcmNlbnRFbnRyeSxsKSxNLmVudHJ5PXguZ2V0UHRMYWJlbChlKSxNLnBlcmNlbnRSb290PWQveC5nZXRWYWx1ZShmKSxNLnBlcmNlbnRSb290TGFiZWw9eC5mb3JtYXRQZXJjZW50KE0ucGVyY2VudFJvb3QsbCksTS5yb290PXguZ2V0UHRMYWJlbChmKSx1Lmhhc093blByb3BlcnR5KCJjb2xvciIpJiYoTS5jb2xvcj11LmNvbG9yKTt2YXIgQT1vLmNhc3RPcHRpb24ocix1LmksInRleHQiKTtyZXR1cm4oby5pc1ZhbGlkVGV4dFZhbHVlKEEpfHwiIj09PUEpJiYoTS50ZXh0PUEpLE0uY3VzdG9tZGF0YT1vLmNhc3RPcHRpb24ocix1LmksImN1c3RvbWRhdGEiKSxvLnRleHR0ZW1wbGF0ZVN0cmluZyhrLE0saS5fZDNsb2NhbGUsTSxyLl9tZXRhfHx7fSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjY1LCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uL2Jhci9zdHlsZSI6OTM1LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzcsIi4uL3BpZS9oZWxwZXJzIjoxMTY2LCIuLi9waWUvcGxvdCI6MTE3MCwiLi9jb25zdGFudHMiOjEzMDIsIi4vZngiOjEzMDQsIi4vaGVscGVycyI6MTMwNSwiLi9zdHlsZSI6MTMxMCxkMzoxNjksImQzLWhpZXJhcmNoeSI6MTYxfV0sMTMxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dDtmdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1lLmRhdGEuZGF0YSxvPSFlLmNoaWxkcmVuLHM9bi5pLGw9YS5jYXN0T3B0aW9uKHIscywibWFya2VyLmxpbmUuY29sb3IiKXx8aS5kZWZhdWx0TGluZSxjPWEuY2FzdE9wdGlvbihyLHMsIm1hcmtlci5saW5lLndpZHRoIil8fDA7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIixjKS5jYWxsKGkuZmlsbCxuLmNvbG9yKS5jYWxsKGkuc3Ryb2tlLGwpLnN0eWxlKCJvcGFjaXR5IixvP3IubGVhZi5vcGFjaXR5Om51bGwpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fc3VuYnVyc3RsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpO28odCxlLCJzdW5idXJzdCIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10WzBdLnRyYWNlO2Uuc3R5bGUoIm9wYWNpdHkiLHIub3BhY2l0eSksZS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwocyx0LHIpfSkpfSkpfSxzdHlsZU9uZTpzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uL2xpYiI6Nzc4LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzcsZDM6MTY5fV0sMTMxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO2Z1bmN0aW9uIGModCl7cmV0dXJue3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHN0YXJ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToicGxvdCJ9LGVuZDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QifSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxtaW46MCxlZGl0VHlwZToicGxvdCJ9LHByb2plY3Q6e3g6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHo6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sdXNlY29sb3JtYXA6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLG1heDoxNixkZmx0OjJ9LGhpZ2hsaWdodDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0saGlnaGxpZ2h0Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LGhpZ2hsaWdodHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLG1heDoxNixkZmx0OjJ9fX12YXIgdT1lLmV4cG9ydHM9bChzKHt6Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMH0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMH0saG92ZXJ0ZW1wbGF0ZTphKCksY29ubmVjdGdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxzdXJmYWNlY29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifX0saSgiIix7Y29sb3JBdHRyOiJ6IG9yIHN1cmZhY2Vjb2xvciIsc2hvd1NjYWxlRGZsdDohMCxhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbnRvdXJzOnt4OmMoKSx5OmMoKSx6OmMoKX0saGlkZXN1cmZhY2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxpZ2h0cG9zaXRpb246e3g6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjEwfSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDoxZTR9LHo6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjB9fSxsaWdodGluZzp7YW1iaWVudDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi44fSxkaWZmdXNlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6Ljh9LHNwZWN1bGFyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoyLGRmbHQ6LjA1fSxyb3VnaG5lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNX0sZnJlc25lbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6NSxkZmx0Oi4yfX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LG9wYWNpdHlzY2FsZTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LF9kZXByZWNhdGVkOnt6YXV0bzpzKHt9LGkuemF1dG8se30pLHptaW46cyh7fSxpLnptaW4se30pLHptYXg6cyh7fSxpLnptYXgse30pfSxob3ZlcmluZm86cyh7fSxvLmhvdmVyaW5mbyksc2hvd2xlZ2VuZDpzKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSksImNhbGMiLCJuZXN0ZWQiKTt1LnguZWRpdFR5cGU9dS55LmVkaXRUeXBlPXUuei5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyIsdS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODEwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjQsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjkwNn1dLDEzMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLnN1cmZhY2Vjb2xvcj9uKHQsZSx7dmFsczplLnN1cmZhY2Vjb2xvcixjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KTpuKHQsZSx7dmFsczplLnosY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2NTF9XSwxMzEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXN1cmZhY2UzZCIpLGk9dCgibmRhcnJheSIpLGE9dCgibmRhcnJheS1saW5lYXItaW50ZXJwb2xhdGUiKS5kMixvPXQoIi4uL2hlYXRtYXAvaW50ZXJwMmQiKSxzPXQoIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzIiksbD10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGM9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSx1PXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmV4dHJhY3RPcHRzO2Z1bmN0aW9uIGgodCxlLHIpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1yLHRoaXMuc3VyZmFjZT1lLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9WyExLCExLCExXSx0aGlzLmNvbnRvdXJTdGFydD1bbnVsbCxudWxsLG51bGxdLHRoaXMuY29udG91ckVuZD1bbnVsbCxudWxsLG51bGxdLHRoaXMuY29udG91clNpemU9WzAsMCwwXSx0aGlzLm1pblZhbHVlcz1bMS8wLDEvMCwxLzBdLHRoaXMubWF4VmFsdWVzPVstMS8wLC0xLzAsLTEvMF0sdGhpcy5kYXRhU2NhbGVYPTEsdGhpcy5kYXRhU2NhbGVZPTEsdGhpcy5yZWZpbmVEYXRhPSEwLHRoaXMub2JqZWN0T2Zmc2V0PVswLDAsMF19dmFyIHA9aC5wcm90b3R5cGU7cC5nZXRYYXQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bCh0aGlzLmRhdGEueCk/bCh0aGlzLmRhdGEueFswXSk/dGhpcy5kYXRhLnhbZV1bdF06dGhpcy5kYXRhLnhbdF06dDtyZXR1cm4gdm9pZCAwPT09cj9pOm4uZDJsKGksMCxyKX0scC5nZXRZYXQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bCh0aGlzLmRhdGEueSk/bCh0aGlzLmRhdGEueVswXSk/dGhpcy5kYXRhLnlbZV1bdF06dGhpcy5kYXRhLnlbZV06ZTtyZXR1cm4gdm9pZCAwPT09cj9pOm4uZDJsKGksMCxyKX0scC5nZXRaYXQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5kYXRhLnpbZV1bdF07cmV0dXJuIG51bGw9PT1pJiZ0aGlzLmRhdGEuY29ubmVjdGdhcHMmJnRoaXMuZGF0YS5faW50ZXJwb2xhdGVkWiYmKGk9dGhpcy5kYXRhLl9pbnRlcnBvbGF0ZWRaW2VdW3RdKSx2b2lkIDA9PT1yP2k6bi5kMmwoaSwwLHIpfSxwLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLnN1cmZhY2Upe3ZhciBlPSh0LmRhdGEuaW5kZXhbMF0tMSkvdGhpcy5kYXRhU2NhbGVYLTEscj0odC5kYXRhLmluZGV4WzFdLTEpL3RoaXMuZGF0YVNjYWxlWS0xLG49TWF0aC5tYXgoTWF0aC5taW4oTWF0aC5yb3VuZChlKSx0aGlzLmRhdGEuelswXS5sZW5ndGgtMSksMCksaT1NYXRoLm1heChNYXRoLm1pbihNYXRoLnJvdW5kKHIpLHRoaXMuZGF0YS5feWxlbmd0aC0xKSwwKTt0LmluZGV4PVtuLGldLHQudHJhY2VDb29yZGluYXRlPVt0aGlzLmdldFhhdChuLGkpLHRoaXMuZ2V0WWF0KG4saSksdGhpcy5nZXRaYXQobixpKV0sdC5kYXRhQ29vcmRpbmF0ZT1bdGhpcy5nZXRYYXQobixpLHRoaXMuZGF0YS54Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQueGF4aXMpLHRoaXMuZ2V0WWF0KG4saSx0aGlzLmRhdGEueWNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnlheGlzKSx0aGlzLmdldFphdChuLGksdGhpcy5kYXRhLnpjYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC56YXhpcyldO2Zvcih2YXIgYT0wO2E8MzthKyspe3ZhciBvPXQuZGF0YUNvb3JkaW5hdGVbYV07bnVsbCE9byYmKHQuZGF0YUNvb3JkaW5hdGVbYV0qPXRoaXMuc2NlbmUuZGF0YVNjYWxlW2FdKX12YXIgcz10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShzKSYmc1tpXSYmdm9pZCAwIT09c1tpXVtuXT90LnRleHRMYWJlbD1zW2ldW25dOnQudGV4dExhYmVsPXN8fCIiLHQuZGF0YS5kYXRhQ29vcmRpbmF0ZT10LmRhdGFDb29yZGluYXRlLnNsaWNlKCksdGhpcy5zdXJmYWNlLmhpZ2hsaWdodCh0LmRhdGEpLHRoaXMuc2NlbmUuZ2xwbG90LnNwaWtlcy5wb3NpdGlvbj10LmRhdGFDb29yZGluYXRlLCEwfX07dmFyIGQ9WzIsMyw1LDcsMTEsMTMsMTcsMTksMjMsMjksMzEsMzcsNDEsNDMsNDcsNTMsNTksNjEsNjcsNzEsNzMsNzksODMsODksOTcsMTAxLDEwMywxMDcsMTA5LDExMywxMjcsMTMxLDEzNywxMzksMTQ5LDE1MSwxNTcsMTYzLDE2NywxNzMsMTc5LDE4MSwxOTEsMTkzLDE5NywxOTksMjExLDIyMywyMjcsMjI5LDIzMywyMzksMjQxLDI1MSwyNTcsMjYzLDI2OSwyNzEsMjc3LDI4MSwyODMsMjkzLDMwNywzMTEsMzEzLDMxNywzMzEsMzM3LDM0NywzNDksMzUzLDM1OSwzNjcsMzczLDM3OSwzODMsMzg5LDM5Nyw0MDEsNDA5LDQxOSw0MjEsNDMxLDQzMyw0MzksNDQzLDQ0OSw0NTcsNDYxLDQ2Myw0NjcsNDc5LDQ4Nyw0OTEsNDk5LDUwMyw1MDksNTIxLDUyMyw1NDEsNTQ3LDU1Nyw1NjMsNTY5LDU3MSw1NzcsNTg3LDU5Myw1OTksNjAxLDYwNyw2MTMsNjE3LDYxOSw2MzEsNjQxLDY0Myw2NDcsNjUzLDY1OSw2NjEsNjczLDY3Nyw2ODMsNjkxLDcwMSw3MDksNzE5LDcyNyw3MzMsNzM5LDc0Myw3NTEsNzU3LDc2MSw3NjksNzczLDc4Nyw3OTcsODA5LDgxMSw4MjEsODIzLDgyNyw4MjksODM5LDg1Myw4NTcsODU5LDg2Myw4NzcsODgxLDg4Myw4ODcsOTA3LDkxMSw5MTksOTI5LDkzNyw5NDEsOTQ3LDk1Myw5NjcsOTcxLDk3Nyw5ODMsOTkxLDk5NywxMDA5LDEwMTMsMTAxOSwxMDIxLDEwMzEsMTAzMywxMDM5LDEwNDksMTA1MSwxMDYxLDEwNjMsMTA2OSwxMDg3LDEwOTEsMTA5MywxMDk3LDExMDMsMTEwOSwxMTE3LDExMjMsMTEyOSwxMTUxLDExNTMsMTE2MywxMTcxLDExODEsMTE4NywxMTkzLDEyMDEsMTIxMywxMjE3LDEyMjMsMTIyOSwxMjMxLDEyMzcsMTI0OSwxMjU5LDEyNzcsMTI3OSwxMjgzLDEyODksMTI5MSwxMjk3LDEzMDEsMTMwMywxMzA3LDEzMTksMTMyMSwxMzI3LDEzNjEsMTM2NywxMzczLDEzODEsMTM5OSwxNDA5LDE0MjMsMTQyNywxNDI5LDE0MzMsMTQzOSwxNDQ3LDE0NTEsMTQ1MywxNDU5LDE0NzEsMTQ4MSwxNDgzLDE0ODcsMTQ4OSwxNDkzLDE0OTksMTUxMSwxNTIzLDE1MzEsMTU0MywxNTQ5LDE1NTMsMTU1OSwxNTY3LDE1NzEsMTU3OSwxNTgzLDE1OTcsMTYwMSwxNjA3LDE2MDksMTYxMywxNjE5LDE2MjEsMTYyNywxNjM3LDE2NTcsMTY2MywxNjY3LDE2NjksMTY5MywxNjk3LDE2OTksMTcwOSwxNzIxLDE3MjMsMTczMywxNzQxLDE3NDcsMTc1MywxNzU5LDE3NzcsMTc4MywxNzg3LDE3ODksMTgwMSwxODExLDE4MjMsMTgzMSwxODQ3LDE4NjEsMTg2NywxODcxLDE4NzMsMTg3NywxODc5LDE4ODksMTkwMSwxOTA3LDE5MTMsMTkzMSwxOTMzLDE5NDksMTk1MSwxOTczLDE5NzksMTk4NywxOTkzLDE5OTcsMTk5OSwyMDAzLDIwMTEsMjAxNywyMDI3LDIwMjksMjAzOSwyMDUzLDIwNjMsMjA2OSwyMDgxLDIwODMsMjA4NywyMDg5LDIwOTksMjExMSwyMTEzLDIxMjksMjEzMSwyMTM3LDIxNDEsMjE0MywyMTUzLDIxNjEsMjE3OSwyMjAzLDIyMDcsMjIxMywyMjIxLDIyMzcsMjIzOSwyMjQzLDIyNTEsMjI2NywyMjY5LDIyNzMsMjI4MSwyMjg3LDIyOTMsMjI5NywyMzA5LDIzMTEsMjMzMywyMzM5LDIzNDEsMjM0NywyMzUxLDIzNTcsMjM3MSwyMzc3LDIzODEsMjM4MywyMzg5LDIzOTMsMjM5OSwyNDExLDI0MTcsMjQyMywyNDM3LDI0NDEsMjQ0NywyNDU5LDI0NjcsMjQ3MywyNDc3LDI1MDMsMjUyMSwyNTMxLDI1MzksMjU0MywyNTQ5LDI1NTEsMjU1NywyNTc5LDI1OTEsMjU5MywyNjA5LDI2MTcsMjYyMSwyNjMzLDI2NDcsMjY1NywyNjU5LDI2NjMsMjY3MSwyNjc3LDI2ODMsMjY4NywyNjg5LDI2OTMsMjY5OSwyNzA3LDI3MTEsMjcxMywyNzE5LDI3MjksMjczMSwyNzQxLDI3NDksMjc1MywyNzY3LDI3NzcsMjc4OSwyNzkxLDI3OTcsMjgwMSwyODAzLDI4MTksMjgzMywyODM3LDI4NDMsMjg1MSwyODU3LDI4NjEsMjg3OSwyODg3LDI4OTcsMjkwMywyOTA5LDI5MTcsMjkyNywyOTM5LDI5NTMsMjk1NywyOTYzLDI5NjksMjk3MSwyOTk5XTtmdW5jdGlvbiBnKHQsZSl7aWYodDxlKXJldHVybiAwO2Zvcih2YXIgcj0wOzA9PT1NYXRoLmZsb29yKHQlZSk7KXQvPWUscisrO3JldHVybiByfWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPVtdLHI9MDtyPGQubGVuZ3RoO3IrKyl7dmFyIG49ZFtyXTtlLnB1c2goZyh0LG4pKX1yZXR1cm4gZX1mdW5jdGlvbiB2KHQpe2Zvcih2YXIgZT1tKHQpLHI9dCxuPTA7bjxkLmxlbmd0aDtuKyspaWYoZVtuXT4wKXtyPWRbbl07YnJlYWt9cmV0dXJuIHJ9ZnVuY3Rpb24geSh0LGUpe2lmKCEodDwxfHxlPDEpKXtmb3IodmFyIHI9bSh0KSxuPW0oZSksaT0xLGE9MDthPGQubGVuZ3RoO2ErKylpKj1NYXRoLnBvdyhkW2FdLE1hdGgubWF4KHJbYV0sblthXSkpO3JldHVybiBpfX1wLmNhbGNYbnVtcz1mdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTE7ZTx0O2UrKyl7dmFyIG49dGhpcy5nZXRYYXQoZS0xLDApLGk9dGhpcy5nZXRYYXQoZSwwKTtyW2UtMV09aSE9PW4mJm51bGwhPW4mJm51bGwhPWk/TWF0aC5hYnMoaS1uKTowfXZhciBhPTA7Zm9yKGU9MTtlPHQ7ZSsrKWErPXJbZS0xXTtmb3IoZT0xO2U8dDtlKyspMD09PXJbZS0xXT9yW2UtMV09MTpyW2UtMV09TWF0aC5yb3VuZChhL3JbZS0xXSk7cmV0dXJuIHJ9LHAuY2FsY1ludW1zPWZ1bmN0aW9uKHQpe3ZhciBlLHI9W107Zm9yKGU9MTtlPHQ7ZSsrKXt2YXIgbj10aGlzLmdldFlhdCgwLGUtMSksaT10aGlzLmdldFlhdCgwLGUpO3JbZS0xXT1pIT09biYmbnVsbCE9biYmbnVsbCE9aT9NYXRoLmFicyhpLW4pOjB9dmFyIGE9MDtmb3IoZT0xO2U8dDtlKyspYSs9cltlLTFdO2ZvcihlPTE7ZTx0O2UrKykwPT09cltlLTFdP3JbZS0xXT0xOnJbZS0xXT1NYXRoLnJvdW5kKGEvcltlLTFdKTtyZXR1cm4gcn07dmFyIHg9WzEsMiw0LDYsMTIsMjQsMzYsNDgsNjAsMTIwLDE4MCwyNDAsMzYwLDcyMCw4NDAsMTI2MF0sYj14WzldLF89eFsxM107ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49cls4XStyWzJdKmVbMF0rcls1XSplWzFdO3JldHVybiB0WzBdPShyWzZdK3JbMF0qZVswXStyWzNdKmVbMV0pL24sdFsxXT0ocls3XStyWzFdKmVbMF0rcls0XSplWzFdKS9uLHR9ZnVuY3Rpb24gVCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1bMCwwXSxvPXQuc2hhcGVbMF0scz10LnNoYXBlWzFdLGw9MDtsPG87bCsrKWZvcih2YXIgYz0wO2M8cztjKyspcihpLFtsLGNdLG4pLHQuc2V0KGwsYyxhKGUsaVswXSxpWzFdKSl9KHQsZSx3LHIpLHR9ZnVuY3Rpb24gayh0LGUpe2Zvcih2YXIgcj0hMSxuPTA7bjx0Lmxlbmd0aDtuKyspaWYoZT09PXRbbl0pe3I9ITA7YnJlYWt9ITE9PT1yJiZ0LnB1c2goZSl9cC5lc3RpbWF0ZVNjYWxlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTErZnVuY3Rpb24odCl7aWYoMCE9PXQubGVuZ3RoKXtmb3IodmFyIGU9MSxyPTA7cjx0Lmxlbmd0aDtyKyspZT15KGUsdFtyXSk7cmV0dXJuIGV9fSgwPT09ZT90aGlzLmNhbGNYbnVtcyh0KTp0aGlzLmNhbGNZbnVtcyh0KSk7cjxiOylyKj0yO2Zvcig7cj5fOylyLS0sci89dihyKSwrK3I8YiYmKHI9Xyk7dmFyIG49TWF0aC5yb3VuZChyL3QpO3JldHVybiBuPjE/bjoxfSxwLnJlZmluZUNvb3Jkcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5kYXRhU2NhbGVYLHI9dGhpcy5kYXRhU2NhbGVZLG49dFswXS5zaGFwZVswXSxhPXRbMF0uc2hhcGVbMV0sbz0wfE1hdGguZmxvb3IodFswXS5zaGFwZVswXSplKzEpLHM9MHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMV0qcisxKSxsPTErbisxLGM9MSthKzEsdT1pKG5ldyBGbG9hdDMyQXJyYXkobCpjKSxbbCxjXSksZj1bMS9lLDAsMCwwLDEvciwwLDAsMCwxXSxoPTA7aDx0Lmxlbmd0aDsrK2gpe3RoaXMuc3VyZmFjZS5wYWRGaWVsZCh1LHRbaF0pO3ZhciBwPWkobmV3IEZsb2F0MzJBcnJheShvKnMpLFtvLHNdKTtUKHAsdSxmKSx0W2hdPXB9fSxwLnNldENvbnRvdXJMZXZlbHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj1bW10sW10sW11dLGk9WyExLCExLCExXSxhPSExO2Zvcih0PTA7dDwzOysrdClpZih0aGlzLnNob3dDb250b3VyW3RdJiYoYT0hMCx0aGlzLmNvbnRvdXJTaXplW3RdPjAmJm51bGwhPT10aGlzLmNvbnRvdXJTdGFydFt0XSYmbnVsbCE9PXRoaXMuY29udG91ckVuZFt0XSYmdGhpcy5jb250b3VyRW5kW3RdPnRoaXMuY29udG91clN0YXJ0W3RdKSlmb3IoaVt0XT0hMCxlPXRoaXMuY29udG91clN0YXJ0W3RdO2U8dGhpcy5jb250b3VyRW5kW3RdO2UrPXRoaXMuY29udG91clNpemVbdF0pcj1lKnRoaXMuc2NlbmUuZGF0YVNjYWxlW3RdLGsoblt0XSxyKTtpZihhKXt2YXIgbz1bW10sW10sW11dO2Zvcih0PTA7dDwzOysrdCl0aGlzLnNob3dDb250b3VyW3RdJiYob1t0XT1pW3RdP25bdF06dGhpcy5zY2VuZS5jb250b3VyTGV2ZWxzW3RdKTt0aGlzLnN1cmZhY2UudXBkYXRlKHtsZXZlbHM6b30pfX0scC51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixuLGEsbD10aGlzLnNjZW5lLGg9bC5mdWxsU2NlbmVMYXlvdXQscD10aGlzLnN1cmZhY2UsZD1jKHQpLGc9bC5kYXRhU2NhbGUsbT10LnpbMF0ubGVuZ3RoLHY9dC5feWxlbmd0aCx5PWwuY29udG91ckxldmVsczt0aGlzLmRhdGE9dDt2YXIgeD1bXTtmb3IoZT0wO2U8MztlKyspZm9yKHhbZV09W10scj0wO3I8bTtyKyspeFtlXVtyXT1bXTtmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHY7bisrKXhbMF1bcl1bbl09dGhpcy5nZXRYYXQocixuLHQueGNhbGVuZGFyLGgueGF4aXMpLHhbMV1bcl1bbl09dGhpcy5nZXRZYXQocixuLHQueWNhbGVuZGFyLGgueWF4aXMpLHhbMl1bcl1bbl09dGhpcy5nZXRaYXQocixuLHQuemNhbGVuZGFyLGguemF4aXMpO2lmKHQuY29ubmVjdGdhcHMpZm9yKHQuX2VtcHR5cG9pbnRzPXMoeFsyXSksbyh4WzJdLHQuX2VtcHR5cG9pbnRzKSx0Ll9pbnRlcnBvbGF0ZWRaPVtdLHI9MDtyPG07cisrKWZvcih0Ll9pbnRlcnBvbGF0ZWRaW3JdPVtdLG49MDtuPHY7bisrKXQuX2ludGVycG9sYXRlZFpbcl1bbl09eFsyXVtyXVtuXTtmb3IoZT0wO2U8MztlKyspZm9yKHI9MDtyPG07cisrKWZvcihuPTA7bjx2O24rKyludWxsPT0oYT14W2VdW3JdW25dKT94W2VdW3JdW25dPU5hTjphPXhbZV1bcl1bbl0qPWdbZV07Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxtO3IrKylmb3Iobj0wO248djtuKyspbnVsbCE9KGE9eFtlXVtyXVtuXSkmJih0aGlzLm1pblZhbHVlc1tlXT5hJiYodGhpcy5taW5WYWx1ZXNbZV09YSksdGhpcy5tYXhWYWx1ZXNbZV08YSYmKHRoaXMubWF4VmFsdWVzW2VdPWEpKTtmb3IoZT0wO2U8MztlKyspdGhpcy5vYmplY3RPZmZzZXRbZV09LjUqKHRoaXMubWluVmFsdWVzW2VdK3RoaXMubWF4VmFsdWVzW2VdKTtmb3IoZT0wO2U8MztlKyspZm9yKHI9MDtyPG07cisrKWZvcihuPTA7bjx2O24rKyludWxsIT0oYT14W2VdW3JdW25dKSYmKHhbZV1bcl1bbl0tPXRoaXMub2JqZWN0T2Zmc2V0W2VdKTt2YXIgYj1baShuZXcgRmxvYXQzMkFycmF5KG0qdiksW20sdl0pLGkobmV3IEZsb2F0MzJBcnJheShtKnYpLFttLHZdKSxpKG5ldyBGbG9hdDMyQXJyYXkobSp2KSxbbSx2XSldO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHY7bisrKWJbZV0uc2V0KHIsbix4W2VdW3JdW25dKTt4PVtdO3ZhciB3PXtjb2xvcm1hcDpkLGxldmVsczpbW10sW10sW11dLHNob3dDb250b3VyOlshMCwhMCwhMF0sc2hvd1N1cmZhY2U6IXQuaGlkZXN1cmZhY2UsY29udG91clByb2plY3Q6W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSxjb250b3VyV2lkdGg6WzEsMSwxXSxjb250b3VyQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxjb250b3VyVGludDpbMSwxLDFdLGR5bmFtaWNDb2xvcjpbWzEsMSwxLDFdLFsxLDEsMSwxXSxbMSwxLDEsMV1dLGR5bmFtaWNXaWR0aDpbMSwxLDFdLGR5bmFtaWNUaW50OlsxLDEsMV0sb3BhY2l0eXNjYWxlOnQub3BhY2l0eXNjYWxlLG9wYWNpdHk6dC5vcGFjaXR5fSxUPWYodCk7aWYody5pbnRlbnNpdHlCb3VuZHM9W1QubWluLFQubWF4XSx0LnN1cmZhY2Vjb2xvcil7dmFyIGs9aShuZXcgRmxvYXQzMkFycmF5KG0qdiksW20sdl0pO2ZvcihyPTA7cjxtO3IrKylmb3Iobj0wO248djtuKyspay5zZXQocixuLHQuc3VyZmFjZWNvbG9yW25dW3JdKTtiLnB1c2goayl9ZWxzZSB3LmludGVuc2l0eUJvdW5kc1swXSo9Z1syXSx3LmludGVuc2l0eUJvdW5kc1sxXSo9Z1syXTsoXzxiWzBdLnNoYXBlWzBdfHxfPGJbMF0uc2hhcGVbMV0pJiYodGhpcy5yZWZpbmVEYXRhPSExKSwhMD09PXRoaXMucmVmaW5lRGF0YSYmKHRoaXMuZGF0YVNjYWxlWD10aGlzLmVzdGltYXRlU2NhbGUoYlswXS5zaGFwZVswXSwwKSx0aGlzLmRhdGFTY2FsZVk9dGhpcy5lc3RpbWF0ZVNjYWxlKGJbMF0uc2hhcGVbMV0sMSksMT09PXRoaXMuZGF0YVNjYWxlWCYmMT09PXRoaXMuZGF0YVNjYWxlWXx8dGhpcy5yZWZpbmVDb29yZHMoYikpLHQuc3VyZmFjZWNvbG9yJiYody5pbnRlbnNpdHk9Yi5wb3AoKSk7dmFyIE09WyEwLCEwLCEwXSxBPVsieCIsInkiLCJ6Il07Zm9yKGU9MDtlPDM7KytlKXt2YXIgUz10LmNvbnRvdXJzW0FbZV1dO01bZV09Uy5oaWdobGlnaHQsdy5zaG93Q29udG91cltlXT1TLnNob3d8fFMuaGlnaGxpZ2h0LHcuc2hvd0NvbnRvdXJbZV0mJih3LmNvbnRvdXJQcm9qZWN0W2VdPVtTLnByb2plY3QueCxTLnByb2plY3QueSxTLnByb2plY3Quel0sUy5zaG93Pyh0aGlzLnNob3dDb250b3VyW2VdPSEwLHcubGV2ZWxzW2VdPXlbZV0scC5oaWdobGlnaHRDb2xvcltlXT13LmNvbnRvdXJDb2xvcltlXT11KFMuY29sb3IpLFMudXNlY29sb3JtYXA/cC5oaWdobGlnaHRUaW50W2VdPXcuY29udG91clRpbnRbZV09MDpwLmhpZ2hsaWdodFRpbnRbZV09dy5jb250b3VyVGludFtlXT0xLHcuY29udG91cldpZHRoW2VdPVMud2lkdGgsdGhpcy5jb250b3VyU3RhcnRbZV09Uy5zdGFydCx0aGlzLmNvbnRvdXJFbmRbZV09Uy5lbmQsdGhpcy5jb250b3VyU2l6ZVtlXT1TLnNpemUpOih0aGlzLnNob3dDb250b3VyW2VdPSExLHRoaXMuY29udG91clN0YXJ0W2VdPW51bGwsdGhpcy5jb250b3VyRW5kW2VdPW51bGwsdGhpcy5jb250b3VyU2l6ZVtlXT0wKSxTLmhpZ2hsaWdodCYmKHcuZHluYW1pY0NvbG9yW2VdPXUoUy5oaWdobGlnaHRjb2xvciksdy5keW5hbWljV2lkdGhbZV09Uy5oaWdobGlnaHR3aWR0aCkpfShmdW5jdGlvbih0KXt2YXIgZT10WzBdLnJnYixyPXRbdC5sZW5ndGgtMV0ucmdiO3JldHVybiBlWzBdPT09clswXSYmZVsxXT09PXJbMV0mJmVbMl09PT1yWzJdJiZlWzNdPT09clszXX0pKGQpJiYody52ZXJ0ZXhDb2xvcj0hMCksdy5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsdy5jb29yZHM9YixwLnVwZGF0ZSh3KSxwLnZpc2libGU9dC52aXNpYmxlLHAuZW5hYmxlRHluYW1pYz1NLHAuZW5hYmxlSGlnaGxpZ2h0PU0scC5zbmFwVG9EYXRhPSEwLCJsaWdodGluZyJpbiB0JiYocC5hbWJpZW50TGlnaHQ9dC5saWdodGluZy5hbWJpZW50LHAuZGlmZnVzZUxpZ2h0PXQubGlnaHRpbmcuZGlmZnVzZSxwLnNwZWN1bGFyTGlnaHQ9dC5saWdodGluZy5zcGVjdWxhcixwLnJvdWdobmVzcz10LmxpZ2h0aW5nLnJvdWdobmVzcyxwLmZyZXNuZWw9dC5saWdodGluZy5mcmVzbmVsKSwibGlnaHRwb3NpdGlvbiJpbiB0JiYocC5saWdodFBvc2l0aW9uPVt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0pfSxwLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zdXJmYWNlKSx0aGlzLnN1cmZhY2UuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyBoKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjU1LCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6Nzc0LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo4MDIsIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzIjoxMDcxLCIuLi9oZWF0bWFwL2ludGVycDJkIjoxMDc0LCJnbC1zdXJmYWNlM2QiOjM1MSxuZGFycmF5OjQ5NSwibmRhcnJheS1saW5lYXItaW50ZXJwb2xhdGUiOjQ4OX1dLDEzMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBpPW4oIm9wYWNpdHlzY2FsZSIpOyJtYXgiPT09aT9lLm9wYWNpdHlzY2FsZT1bWzAsLjFdLFsxLDFdXToibWluIj09PWk/ZS5vcGFjaXR5c2NhbGU9W1swLDFdLFsxLC4xXV06ImV4dHJlbWVzIj09PWk/ZS5vcGFjaXR5c2NhbGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wO248MzI7bisrKXt2YXIgaT1uLzMxLGE9ZSsoMS1lKSooMS1NYXRoLnBvdyhNYXRoLnNpbih0KmkqTWF0aC5QSSksMikpO3IucHVzaChbaSxNYXRoLm1heCgwLE1hdGgubWluKDEsYSkpXSl9cmV0dXJuIHJ9KDEsLjEpOmZ1bmN0aW9uKHQpe3ZhciBlPTA7aWYoIUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDIpcmV0dXJuITE7aWYoIXRbMF18fCF0W3QubGVuZ3RoLTFdKXJldHVybiExO2lmKDAhPSt0WzBdWzBdfHwxIT0rdFt0Lmxlbmd0aC0xXVswXSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZigyIT09bi5sZW5ndGh8fCtuWzBdPGUpcmV0dXJuITE7ZT0rblswXX1yZXR1cm4hMH0oaSl8fChlLm9wYWNpdHlzY2FsZT12b2lkIDApfWZ1bmN0aW9uIGwodCxlLHIpe2UgaW4gdCYmIShyIGluIHQpJiYodFtyXT10W2VdKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1LGY7ZnVuY3Rpb24gaChyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsbyxyLG4pfXZhciBwPWgoIngiKSxkPWgoInkiKSxnPWgoInoiKTtpZighZ3x8IWcubGVuZ3RofHxwJiZwLmxlbmd0aDwxfHxkJiZkLmxlbmd0aDwxKWUudmlzaWJsZT0hMTtlbHNle2UuX3hsZW5ndGg9QXJyYXkuaXNBcnJheShwKSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KHBbMF0pP2cubGVuZ3RoOmdbMF0ubGVuZ3RoLGUuX3lsZW5ndGg9Zy5sZW5ndGgsbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxjKSxoKCJ0ZXh0IiksaCgiaG92ZXJ0ZXh0IiksaCgiaG92ZXJ0ZW1wbGF0ZSIpLFsibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJoaWRlc3VyZmFjZSIsImNvbm5lY3RnYXBzIiwib3BhY2l0eSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2godCl9KSk7dmFyIG09aCgic3VyZmFjZWNvbG9yIiksdj1bIngiLCJ5IiwieiJdO2Zvcih1PTA7dTwzOysrdSl7dmFyIHk9ImNvbnRvdXJzLiIrdlt1XSx4PWgoeSsiLnNob3ciKSxiPWgoeSsiLmhpZ2hsaWdodCIpO2lmKHh8fGIpZm9yKGY9MDtmPDM7KytmKWgoeSsiLnByb2plY3QuIit2W2ZdKTt4JiYoaCh5KyIuY29sb3IiKSxoKHkrIi53aWR0aCIpLGgoeSsiLnVzZWNvbG9ybWFwIikpLGImJihoKHkrIi5oaWdobGlnaHRjb2xvciIpLGgoeSsiLmhpZ2hsaWdodHdpZHRoIikpLGgoeSsiLnN0YXJ0IiksaCh5KyIuZW5kIiksaCh5KyIuc2l6ZSIpfW18fChsKHQsInptaW4iLCJjbWluIiksbCh0LCJ6bWF4IiwiY21heCIpLGwodCwiemF1dG8iLCJjYXV0byIpKSxhKHQsZSxjLGgse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pLHModCxlLGMsaCksZS5fbGVuZ3RoPW51bGx9fSxvcGFjaXR5c2NhbGVEZWZhdWx0czpzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY1MywiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MTEsIi4vYXR0cmlidXRlcyI6MTMxMX1dLDEzMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9jb252ZXJ0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InN1cmZhY2UiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsIjJkTWFwIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjg3MCwiLi9hdHRyaWJ1dGVzIjoxMzExLCIuL2NhbGMiOjEzMTIsIi4vY29udmVydCI6MTMxMywiLi9kZWZhdWx0cyI6MTMxNH1dLDEzMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlczt0KCIuLi8uLi9jb25zdGFudHMvZG9jcyIpLkZPUk1BVF9MSU5LOyhlLmV4cG9ydHM9YSh7ZG9tYWluOnMoe25hbWU6InRhYmxlIix0cmFjZTohMH0pLGNvbHVtbndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsZGZsdDpudWxsfSxjb2x1bW5vcmRlcjp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGhlYWRlcjp7dmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmb3JtYXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LHByZWZpeDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoyOH0sYWxpZ246aSh7fSxuLmFsaWduLHthcnJheU9rOiEwfSksbGluZTp7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0OjF9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxkZmx0OiJncmV5In19LGZpbGw6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxkZmx0OiJ3aGl0ZSJ9fSxmb250Omkoe30sbyh7YXJyYXlPazohMH0pKX0sY2VsbHM6e3ZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZm9ybWF0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MjB9LGFsaWduOmkoe30sbi5hbGlnbix7YXJyYXlPazohMH0pLGxpbmU6e3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsZGZsdDoxfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoiZ3JleSJ9fSxmaWxsOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoid2hpdGUifX0sZm9udDppKHt9LG8oe2FycmF5T2s6ITB9KSl9fSwiY2FsYyIsImZyb20tcm9vdCIpKS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjYyNiwiLi4vLi4vY29uc3RhbnRzL2RvY3MiOjc0OCwiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MTAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1Nn1dLDEzMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxpPXQoIi4vcGxvdCIpO3IubmFtZT0idGFibGUiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1uKHQuY2FsY2RhdGEsInRhYmxlIilbMF07ZS5sZW5ndGgmJmkodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygidGFibGUiKSxhPWUuX2hhcyYmZS5faGFzKCJ0YWJsZSIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi50YWJsZSIpLnJlbW92ZSgpfX0seyIuLi8uLi9wbG90cy9nZXRfZGF0YSI6ODY1LCIuL3Bsb3QiOjEzMjR9XSwxMzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwO2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBuKHt9KX19LHsiLi4vLi4vbGliL2d1cCI6Nzc1fV0sMTMxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NlbGxQYWQ6OCxjb2x1bW5FeHRlbnRPZmZzZXQ6MTAsY29sdW1uVGl0bGVPZmZzZXQ6MjgsZW1wdHlIZWFkZXJIZWlnaHQ6MTYsbGF0ZXhDaGVjazovXlwkLipcJCQvLGdvbGRlblJhdGlvOjEuNjE4LGxpbmVCcmVha2VyOiI8YnI+IixtYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSxyZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uOjEyMCxyZWxlYXNlVHJhbnNpdGlvbkVhc2U6ImN1YmljLW91dCIsc2Nyb2xsYmFyQ2FwdHVyZVdpZHRoOjE4LHNjcm9sbGJhckhpZGVEZWxheToxZTMsc2Nyb2xsYmFySGlkZUR1cmF0aW9uOjFlMyxzY3JvbGxiYXJPZmZzZXQ6NSxzY3JvbGxiYXJXaWR0aDo4LHRyYW5zaXRpb25EdXJhdGlvbjoxMDAsdHJhbnNpdGlvbkVhc2U6ImN1YmljLW91dCIsdXBsaWZ0OjUsd3JhcFNwYWNlcjoiICIsd3JhcFNwbGl0Q2hhcmFjdGVyOiIgIixjbjp7dGFibGU6InRhYmxlIix0YWJsZUNvbnRyb2xWaWV3OiJ0YWJsZS1jb250cm9sLXZpZXciLHNjcm9sbEJhY2tncm91bmQ6InNjcm9sbC1iYWNrZ3JvdW5kIix5Q29sdW1uOiJ5LWNvbHVtbiIsY29sdW1uQmxvY2s6ImNvbHVtbi1ibG9jayIsc2Nyb2xsQXJlYUNsaXA6InNjcm9sbC1hcmVhLWNsaXAiLHNjcm9sbEFyZWFDbGlwUmVjdDoic2Nyb2xsLWFyZWEtY2xpcC1yZWN0Iixjb2x1bW5Cb3VuZGFyeToiY29sdW1uLWJvdW5kYXJ5Iixjb2x1bW5Cb3VuZGFyeUNsaXBwYXRoOiJjb2x1bW4tYm91bmRhcnktY2xpcHBhdGgiLGNvbHVtbkJvdW5kYXJ5UmVjdDoiY29sdW1uLWJvdW5kYXJ5LXJlY3QiLGNvbHVtbkNlbGxzOiJjb2x1bW4tY2VsbHMiLGNvbHVtbkNlbGw6ImNvbHVtbi1jZWxsIixjZWxsUmVjdDoiY2VsbC1yZWN0IixjZWxsVGV4dDoiY2VsbC10ZXh0IixjZWxsVGV4dEhvbGRlcjoiY2VsbC10ZXh0LWhvbGRlciIsc2Nyb2xsYmFyS2l0OiJzY3JvbGxiYXIta2l0IixzY3JvbGxiYXI6InNjcm9sbGJhciIsc2Nyb2xsYmFyU2xpZGVyOiJzY3JvbGxiYXItc2xpZGVyIixzY3JvbGxiYXJHbHlwaDoic2Nyb2xsYmFyLWdseXBoIixzY3JvbGxiYXJDYXB0dXJlWm9uZToic2Nyb2xsYmFyLWNhcHR1cmUtem9uZSJ9fX0se31dLDEzMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiZmFzdC1pc251bWVyaWMiKTtmdW5jdGlvbiBvKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyllPU1hdGgubWF4KGUsbyh0W3JdKSk7cmV0dXJuIGV9cmV0dXJuIHR9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0K2V9ZnVuY3Rpb24gbCh0KXt2YXIgZSxyPXQuc2xpY2UoKSxuPTEvMCxpPTA7Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylBcnJheS5pc0FycmF5KHJbZV0pfHwocltlXT1bcltlXV0pLG49TWF0aC5taW4obixyW2VdLmxlbmd0aCksaT1NYXRoLm1heChpLHJbZV0ubGVuZ3RoKTtpZihuIT09aSlmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgYT1pLXJbZV0ubGVuZ3RoO2EmJihyW2VdPXJbZV0uY29uY2F0KGMoYSkpKX1yZXR1cm4gcn1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0iIjtyZXR1cm4gZX1mdW5jdGlvbiB1KHQpe3JldHVybiB0LmNhbGNkYXRhLmNvbHVtbnMucmVkdWNlKChmdW5jdGlvbihlLHIpe3JldHVybiByLnhJbmRleDx0LnhJbmRleD9lK3IuY29sdW1uV2lkdGg6ZX0pLDApfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKChmdW5jdGlvbihyKXtyZXR1cm4gaSh7fSx0W3JdLHthdXhpbGlhcnlCbG9ja3M6ZX0pfSkpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHIsbj17fSxpPTAsYT0wLG89e2ZpcnN0Um93SW5kZXg6bnVsbCxsYXN0Um93SW5kZXg6bnVsbCxyb3dzOltdfSxzPTAsbD0wLGM9MDtjPHQubGVuZ3RoO2MrKylyPXRbY10sby5yb3dzLnB1c2goe3Jvd0luZGV4OmMscm93SGVpZ2h0OnJ9KSwoKGErPXIpPj1lfHxjPT09dC5sZW5ndGgtMSkmJihuW2ldPW8sby5rZXk9bCsrLG8uZmlyc3RSb3dJbmRleD1zLG8ubGFzdFJvd0luZGV4PWMsbz17Zmlyc3RSb3dJbmRleDpudWxsLGxhc3RSb3dJbmRleDpudWxsLHJvd3M6W119LGkrPWEscz1jKzEsYT0wKTtyZXR1cm4gbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1sKGUuY2VsbHMudmFsdWVzKSxwPWZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKGUuaGVhZGVyLnZhbHVlcy5sZW5ndGgsdC5sZW5ndGgpfSxkPWwoZS5oZWFkZXIudmFsdWVzKTtkLmxlbmd0aCYmIWRbMF0ubGVuZ3RoJiYoZFswXT1bIiJdLGQ9bChkKSk7dmFyIGc9ZC5jb25jYXQocChyKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGMoKGRbMF18fFsiIl0pLmxlbmd0aCl9KSkpLG09ZS5kb21haW4sdj1NYXRoLmZsb29yKHQuX2Z1bGxMYXlvdXQuX3NpemUudyoobS54WzFdLW0ueFswXSkpLHk9TWF0aC5mbG9vcih0Ll9mdWxsTGF5b3V0Ll9zaXplLmgqKG0ueVsxXS1tLnlbMF0pKSx4PWUuaGVhZGVyLnZhbHVlcy5sZW5ndGg/Z1swXS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuaGVhZGVyLmhlaWdodH0pKTpbbi5lbXB0eUhlYWRlckhlaWdodF0sYj1yLmxlbmd0aD9yWzBdLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5jZWxscy5oZWlnaHR9KSk6W10sXz14LnJlZHVjZShzLDApLHc9aChiLHktXytuLnVwbGlmdCksVD1mKGgoeCxfKSxbXSksaz1mKHcsVCksTT17fSxBPWUuX2Z1bGxJbnB1dC5jb2x1bW5vcmRlci5jb25jYXQocChyLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKSkpLFM9Zy5tYXAoKGZ1bmN0aW9uKHQscil7dmFyIG49QXJyYXkuaXNBcnJheShlLmNvbHVtbndpZHRoKT9lLmNvbHVtbndpZHRoW01hdGgubWluKHIsZS5jb2x1bW53aWR0aC5sZW5ndGgtMSldOmUuY29sdW1ud2lkdGg7cmV0dXJuIGEobik/TnVtYmVyKG4pOjF9KSksRT1TLnJlZHVjZShzLDApO1M9Uy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0L0Uqdn0pKTt2YXIgQz1NYXRoLm1heChvKGUuaGVhZGVyLmxpbmUud2lkdGgpLG8oZS5jZWxscy5saW5lLndpZHRoKSksTD17a2V5OmUudWlkK3QuX2NvbnRleHQuc3RhdGljUGxvdCx0cmFuc2xhdGVYOm0ueFswXSp0Ll9mdWxsTGF5b3V0Ll9zaXplLncsdHJhbnNsYXRlWTp0Ll9mdWxsTGF5b3V0Ll9zaXplLmgqKDEtbS55WzFdKSxzaXplOnQuX2Z1bGxMYXlvdXQuX3NpemUsd2lkdGg6dixtYXhMaW5lV2lkdGg6QyxoZWlnaHQ6eSxjb2x1bW5PcmRlcjpBLGdyb3VwSGVpZ2h0Onkscm93QmxvY2tzOmssaGVhZGVyUm93QmxvY2tzOlQsc2Nyb2xsWTowLGNlbGxzOmkoe30sZS5jZWxscyx7dmFsdWVzOnJ9KSxoZWFkZXJDZWxsczppKHt9LGUuaGVhZGVyLHt2YWx1ZXM6Z30pLGdkQ29sdW1uczpnLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksZ2RDb2x1bW5zT3JpZ2luYWxPcmRlcjpnLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSkscHJldlBhZ2VzOlswLDBdLHNjcm9sbGJhclN0YXRlOntzY3JvbGxiYXJTY3JvbGxJblByb2dyZXNzOiExfSxjb2x1bW5zOmcubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPU1bdF07cmV0dXJuIE1bdF09KHJ8fDApKzEse2tleTp0KyJfXyIrTVt0XSxsYWJlbDp0LHNwZWNJbmRleDplLHhJbmRleDpBW2VdLHhTY2FsZTp1LHg6dm9pZCAwLGNhbGNkYXRhOnZvaWQgMCxjb2x1bW5XaWR0aDpTW2VdfX0pKX07cmV0dXJuIEwuY29sdW1ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNhbGNkYXRhPUwsdC54PXUodCl9KSksTH19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuL2NvbnN0YW50cyI6MTMxOSwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDEzMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ci5zcGxpdFRvUGFuZWxzPWZ1bmN0aW9uKHQpe3ZhciBlPVswLDBdLHI9bih7fSx0LHtrZXk6ImhlYWRlciIsdHlwZToiaGVhZGVyIixwYWdlOjAscHJldlBhZ2VzOmUsY3VycmVudFJlcGFpbnQ6W251bGwsbnVsbF0sZHJhZ0hhbmRsZTohMCx2YWx1ZXM6dC5jYWxjZGF0YS5oZWFkZXJDZWxscy52YWx1ZXNbdC5zcGVjSW5kZXhdLHJvd0Jsb2Nrczp0LmNhbGNkYXRhLmhlYWRlclJvd0Jsb2NrcyxjYWxjZGF0YTpuKHt9LHQuY2FsY2RhdGEse2NlbGxzOnQuY2FsY2RhdGEuaGVhZGVyQ2VsbHN9KX0pO3JldHVybltuKHt9LHQse2tleToiY2VsbHMxIix0eXBlOiJjZWxscyIscGFnZTowLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITEsdmFsdWVzOnQuY2FsY2RhdGEuY2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5yb3dCbG9ja3N9KSxuKHt9LHQse2tleToiY2VsbHMyIix0eXBlOiJjZWxscyIscGFnZToxLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITEsdmFsdWVzOnQuY2FsY2RhdGEuY2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5yb3dCbG9ja3N9KSxyXX0sci5zcGxpdFRvQ2VsbHM9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5yb3dCbG9ja3NbdC5wYWdlXSxyPWU/ZS5yb3dzWzBdLnJvd0luZGV4OjAsbj1lP3IrZS5yb3dzLmxlbmd0aDowO3JldHVybltyLG5dfSh0KTtyZXR1cm4odC52YWx1ZXN8fFtdKS5zbGljZShlWzBdLGVbMV0pLm1hcCgoZnVuY3Rpb24ocixuKXtyZXR1cm57a2V5V2l0aGluQmxvY2s6bisoInN0cmluZyI9PXR5cGVvZiByJiZyLm1hdGNoKC9bPCQmPiBdLyk/Il9rZXlidXN0ZXJfIitNYXRoLnJhbmRvbSgpOiIiKSxrZXk6ZVswXStuLGNvbHVtbjp0LGNhbGNkYXRhOnQuY2FsY2RhdGEscGFnZTp0LnBhZ2Uscm93QmxvY2tzOnQucm93QmxvY2tzLHZhbHVlOnJ9fSkpfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3Njh9XSwxMzIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEoZSxvLHMpLHMoImNvbHVtbndpZHRoIikscygiaGVhZGVyLnZhbHVlcyIpLHMoImhlYWRlci5mb3JtYXQiKSxzKCJoZWFkZXIuYWxpZ24iKSxzKCJoZWFkZXIucHJlZml4IikscygiaGVhZGVyLnN1ZmZpeCIpLHMoImhlYWRlci5oZWlnaHQiKSxzKCJoZWFkZXIubGluZS53aWR0aCIpLHMoImhlYWRlci5saW5lLmNvbG9yIikscygiaGVhZGVyLmZpbGwuY29sb3IiKSxuLmNvZXJjZUZvbnQocywiaGVhZGVyLmZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvbHVtbm9yZGVyfHxbXSxuPXQuaGVhZGVyLnZhbHVlcy5sZW5ndGgsaT1yLnNsaWNlKDAsbiksYT1pLnNsaWNlKCkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpLG89aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBhLmluZGV4T2YodCl9KSkscz1vLmxlbmd0aDtzPG47cysrKW8ucHVzaChzKTtlKCJjb2x1bW5vcmRlciIsbyl9KGUscykscygiY2VsbHMudmFsdWVzIikscygiY2VsbHMuZm9ybWF0IikscygiY2VsbHMuYWxpZ24iKSxzKCJjZWxscy5wcmVmaXgiKSxzKCJjZWxscy5zdWZmaXgiKSxzKCJjZWxscy5oZWlnaHQiKSxzKCJjZWxscy5saW5lLndpZHRoIikscygiY2VsbHMubGluZS5jb2xvciIpLHMoImNlbGxzLmZpbGwuY29sb3IiKSxuLmNvZXJjZUZvbnQocywiY2VsbHMuZm9udCIsbi5leHRlbmRGbGF0KHt9LG8uZm9udCkpLGUuX2xlbmd0aD1udWxsfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4vYXR0cmlidXRlcyI6MTMxNn1dLDEzMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InRhYmxlIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6WyJub09wYWNpdHkiXSxtZXRhOnt9fX0seyIuL2F0dHJpYnV0ZXMiOjEzMTYsIi4vYmFzZV9wbG90IjoxMzE3LCIuL2NhbGMiOjEzMTgsIi4vZGVmYXVsdHMiOjEzMjIsIi4vcGxvdCI6MTMyNH1dLDEzMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoImQzIiksYT10KCIuLi8uLi9saWIvZ3VwIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGw9dCgiLi4vLi4vbGliIikucmFpc2VUb1RvcCxjPXQoIi4uLy4uL2xpYiIpLnN0clRyYW5zbGF0ZSx1PXQoIi4uLy4uL2xpYiIpLmNhbmNlbFRyYW5zaXRpb24sZj10KCIuL2RhdGFfcHJlcGFyYXRpb25faGVscGVyIiksaD10KCIuL2RhdGFfc3BsaXRfaGVscGVycyIpLHA9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2Z1bmN0aW9uIGQodCl7cmV0dXJuIE1hdGguY2VpbCh0LmNhbGNkYXRhLm1heExpbmVXaWR0aC8yKX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuImNsaXAiK3QuX2Z1bGxMYXlvdXQuX3VpZCsiX3Njcm9sbEFyZWFCb3R0b21DbGlwXyIrZS5rZXl9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiJjbGlwIit0Ll9mdWxsTGF5b3V0Ll91aWQrIl9jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoXyIrZS5jYWxjZGF0YS5rZXkrIl8iK2Uuc3BlY0luZGV4fWZ1bmN0aW9uIHYodCl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5fX2RhdGFfX30pKX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbz10LnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJLaXQpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO28uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyS2l0LCEwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIiksby5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnNjcm9sbGJhclN0YXRlO2UudG90YWxIZWlnaHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5yb3dCbG9ja3M7cmV0dXJuIE8oZSxlLmxlbmd0aC0xKSsoZS5sZW5ndGg/RChlW2UubGVuZ3RoLTFdLDEvMCk6MSl9KHQpLGUuc2Nyb2xsYWJsZUFyZWFIZWlnaHQ9dC5ncm91cEhlaWdodC1BKHQpLGUuY3VycmVudGx5VmlzaWJsZUhlaWdodD1NYXRoLm1pbihlLnRvdGFsSGVpZ2h0LGUuc2Nyb2xsYWJsZUFyZWFIZWlnaHQpLGUucmF0aW89ZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0L2UudG90YWxIZWlnaHQsZS5iYXJMZW5ndGg9TWF0aC5tYXgoZS5yYXRpbyplLmN1cnJlbnRseVZpc2libGVIZWlnaHQsbi5nb2xkZW5SYXRpbypuLnNjcm9sbGJhcldpZHRoKSxlLmJhcldpZ2dsZVJvb209ZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0LWUuYmFyTGVuZ3RoLGUud2lnZ2xlUm9vbT1NYXRoLm1heCgwLGUudG90YWxIZWlnaHQtZS5zY3JvbGxhYmxlQXJlYUhlaWdodCksZS50b3BZPTA9PT1lLmJhcldpZ2dsZVJvb20/MDp0LnNjcm9sbFkvZS53aWdnbGVSb29tKmUuYmFyV2lnZ2xlUm9vbSxlLmJvdHRvbVk9ZS50b3BZK2UuYmFyTGVuZ3RoLGUuZHJhZ011bHRpcGxpZXI9ZS53aWdnbGVSb29tL2UuYmFyV2lnZ2xlUm9vbX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT10LndpZHRoK24uc2Nyb2xsYmFyV2lkdGgvMituLnNjcm9sbGJhck9mZnNldDtyZXR1cm4gYyhlLEEodCkpfSkpO3ZhciBzPW8uc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhcikuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7cy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXIsITApO3ZhciBsPXMuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhclNsaWRlcikuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJTbGlkZXIsITApLGwuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGMoMCx0LnNjcm9sbGJhclN0YXRlLnRvcFl8fDApfSkpO3ZhciB1PWwuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhckdseXBoKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTt1LmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhckdseXBoLCEwKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5zY3JvbGxiYXJXaWR0aCkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJyb3VuZCIpLmF0dHIoInkxIixuLnNjcm9sbGJhcldpZHRoLzIpLHUuYXR0cigieTIiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5iYXJMZW5ndGgtbi5zY3JvbGxiYXJXaWR0aC8yfSkpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uRHJhZ0luUHJvZ3Jlc3N8fCF0LnNjcm9sbGJhclN0YXRlLmJhcldpZ2dsZVJvb218fHI/MDouNH0pKSx1LnRyYW5zaXRpb24oKS5kZWxheSgwKS5kdXJhdGlvbigwKSx1LnRyYW5zaXRpb24oKS5kZWxheShuLnNjcm9sbGJhckhpZGVEZWxheSkuZHVyYXRpb24obi5zY3JvbGxiYXJIaWRlRHVyYXRpb24pLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKTt2YXIgZj1zLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJDYXB0dXJlWm9uZSkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7Zi5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJDYXB0dXJlWm9uZSwhMCkuYXR0cigic3Ryb2tlIiwid2hpdGUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjAxKS5hdHRyKCJzdHJva2Utd2lkdGgiLG4uc2Nyb2xsYmFyQ2FwdHVyZVdpZHRoKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKS5hdHRyKCJ5MSIsMCkub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKHIpe3ZhciBuPWkuZXZlbnQueSxhPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yLnNjcm9sbGJhclN0YXRlLHM9bi1hLnRvcCxsPWkuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLG8uc2Nyb2xsYWJsZUFyZWFIZWlnaHRdKS5yYW5nZShbMCxvLnRvdGFsSGVpZ2h0XSkuY2xhbXAoITApO28udG9wWTw9cyYmczw9by5ib3R0b21ZfHxFKGUsdCxudWxsLGwocy1vLmJhckxlbmd0aC8yKSkocil9KSkuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLHQuc2Nyb2xsYmFyU3RhdGUuc2Nyb2xsYmFyU2Nyb2xsSW5Qcm9ncmVzcz0hMCx0fSkpLm9uKCJkcmFnIixFKGUsdCkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24oKXt9KSkpLGYuYXR0cigieTIiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxhYmxlQXJlYUhlaWdodH0pKSxlLl9jb250ZXh0LnN0YXRpY1Bsb3QmJih1LnJlbW92ZSgpLGYucmVtb3ZlKCkpfWZ1bmN0aW9uIHgodCxlLHIscyl7dmFyIGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbCkuZGF0YShoLnNwbGl0VG9DZWxscywoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQ2VsbCwhMCksZS5leGl0KCkucmVtb3ZlKCksZX0oZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbHMpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkNlbGxzLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlfShyKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LmNhbGNkYXRhLmNlbGxzLmZvbnQsbj10LmNvbHVtbi5zcGVjSW5kZXgsaT17c2l6ZTp3KHIuc2l6ZSxuLGUpLGNvbG9yOncoci5jb2xvcixuLGUpLGZhbWlseTp3KHIuZmFtaWx5LG4sZSl9O3Qucm93TnVtYmVyPXQua2V5LHQuYWxpZ249dyh0LmNhbGNkYXRhLmNlbGxzLmFsaWduLG4sZSksdC5jZWxsQm9yZGVyV2lkdGg9dyh0LmNhbGNkYXRhLmNlbGxzLmxpbmUud2lkdGgsbixlKSx0LmZvbnQ9aX0pKX0obCksZnVuY3Rpb24odCl7dC5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbi5jb2x1bW5XaWR0aH0pKS5hdHRyKCJzdHJva2Utd2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jZWxsQm9yZGVyV2lkdGh9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcyk7cC5zdHJva2UoZSx3KHQuY2FsY2RhdGEuY2VsbHMubGluZS5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKSxwLmZpbGwoZSx3KHQuY2FsY2RhdGEuY2VsbHMuZmlsbC5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKX0pKX0oZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFJlY3QpLmRhdGEoYS5yZXBlYXQsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSkpO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLmNlbGxSZWN0LCEwKSxlfShsKSk7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFRleHQpLmRhdGEoYS5yZXBlYXQsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSkpO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChuLmNuLmNlbGxUZXh0LCEwKS5zdHlsZSgiY3Vyc29yIiwoZnVuY3Rpb24oKXtyZXR1cm4iYXV0byJ9KSkub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKCl7aS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pKSxlfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsVGV4dEhvbGRlcikuZGF0YShhLnJlcGVhdCwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY2VsbFRleHRIb2xkZXIsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKSxlfShsKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaCgoZnVuY3Rpb24odCl7by5mb250KGkuc2VsZWN0KHRoaXMpLHQuZm9udCl9KSl9KGMpLGIoYyxlLHMsdCkseihsKX1mdW5jdGlvbiBiKHQsZSxyLGEpe3QudGV4dCgoZnVuY3Rpb24odCl7dmFyIGU9dC5jb2x1bW4uc3BlY0luZGV4LHI9dC5yb3dOdW1iZXIsYT10LnZhbHVlLG89InN0cmluZyI9PXR5cGVvZiBhLHM9byYmYS5tYXRjaCgvPGJyPi9pKSxsPSFvfHxzO3QubWF5SGF2ZU1hcmt1cD1vJiZhLm1hdGNoKC9bPCY+XS8pO3ZhciBjLHU9InN0cmluZyI9PXR5cGVvZihjPWEpJiZjLm1hdGNoKG4ubGF0ZXhDaGVjayk7dC5sYXRleD11O3ZhciBmLGgscD11PyIiOncodC5jYWxjZGF0YS5jZWxscy5wcmVmaXgsZSxyKXx8IiIsZD11PyIiOncodC5jYWxjZGF0YS5jZWxscy5zdWZmaXgsZSxyKXx8IiIsZz11P251bGw6dyh0LmNhbGNkYXRhLmNlbGxzLmZvcm1hdCxlLHIpfHxudWxsLG09cCsoZz9pLmZvcm1hdChnKSh0LnZhbHVlKTp0LnZhbHVlKStkO2lmKHQud3JhcHBpbmdOZWVkZWQ9IXQud3JhcHBlZCYmIWwmJiF1JiYoZj1fKG0pKSx0LmNlbGxIZWlnaHRNYXlJbmNyZWFzZT1zfHx1fHx0Lm1heUhhdmVNYXJrdXB8fCh2b2lkIDA9PT1mP18obSk6ZiksdC5uZWVkc0NvbnZlcnRUb1RzcGFucz10Lm1heUhhdmVNYXJrdXB8fHQud3JhcHBpbmdOZWVkZWR8fHQubGF0ZXgsdC53cmFwcGluZ05lZWRlZCl7dmFyIHY9KCIgIj09PW4ud3JhcFNwbGl0Q2hhcmFjdGVyP20ucmVwbGFjZSgvPGEgaHJlZj0vZ2ksIjxhX2hyZWY9Iik6bSkuc3BsaXQobi53cmFwU3BsaXRDaGFyYWN0ZXIpLHk9IiAiPT09bi53cmFwU3BsaXRDaGFyYWN0ZXI/di5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLzxhX2hyZWY9L2dpLCI8YSBocmVmPSIpfSkpOnY7dC5mcmFnbWVudHM9eS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybnt0ZXh0OnQsd2lkdGg6bnVsbH19KSksdC5mcmFnbWVudHMucHVzaCh7ZnJhZ21lbnQ6bi53cmFwU3BhY2VyLHdpZHRoOm51bGx9KSxoPXkuam9pbihuLmxpbmVCcmVha2VyKStuLmxpbmVCcmVha2VyK24ud3JhcFNwYWNlcn1lbHNlIGRlbGV0ZSB0LmZyYWdtZW50cyxoPW07cmV0dXJuIGh9KSkuYXR0cigiZHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5uZWVkc0NvbnZlcnRUb1RzcGFucz8wOiIwLjc1ZW0ifSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBvPWkuc2VsZWN0KHRoaXMpLGw9dC53cmFwcGluZ05lZWRlZD9MOkk7dC5uZWVkc0NvbnZlcnRUb1RzcGFucz9zLmNvbnZlcnRUb1RzcGFucyhvLGEsbChyLHRoaXMsZSxhLHQpKTppLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBjKFAodCksbi5jZWxsUGFkKX0pKS5hdHRyKCJ0ZXh0LWFuY2hvciIsKGZ1bmN0aW9uKHQpe3JldHVybntsZWZ0OiJzdGFydCIsY2VudGVyOiJtaWRkbGUiLHJpZ2h0OiJlbmQifVt0LmFsaWduXX0pKX0pKX1mdW5jdGlvbiBfKHQpe3JldHVybi0xIT09dC5pbmRleE9mKG4ud3JhcFNwbGl0Q2hhcmFjdGVyKX1mdW5jdGlvbiB3KHQsZSxyKXtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbj10W01hdGgubWluKGUsdC5sZW5ndGgtMSldO3JldHVybiBBcnJheS5pc0FycmF5KG4pP25bTWF0aC5taW4ocixuLmxlbmd0aC0xKV06bn1yZXR1cm4gdH1mdW5jdGlvbiBUKHQsZSxyKXt0LnRyYW5zaXRpb24oKS5lYXNlKG4ucmVsZWFzZVRyYW5zaXRpb25FYXNlKS5kdXJhdGlvbihuLnJlbGVhc2VUcmFuc2l0aW9uRHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsYyhlLngscikpfWZ1bmN0aW9uIGsodCl7cmV0dXJuImNlbGxzIj09PXQudHlwZX1mdW5jdGlvbiBNKHQpe3JldHVybiJoZWFkZXIiPT09dC50eXBlfWZ1bmN0aW9uIEEodCl7cmV0dXJuKHQucm93QmxvY2tzLmxlbmd0aD90LnJvd0Jsb2Nrc1swXS5hdXhpbGlhcnlCbG9ja3M6W10pLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtEKGUsMS8wKX0pLDApfWZ1bmN0aW9uIFModCxlLHIpe3ZhciBuPXYoZSlbMF07aWYodm9pZCAwIT09bil7dmFyIGk9bi5yb3dCbG9ja3MsYT1uLmNhbGNkYXRhLG89TyhpLGkubGVuZ3RoKSxzPW4uY2FsY2RhdGEuZ3JvdXBIZWlnaHQtQShuKSxsPWEuc2Nyb2xsWT1NYXRoLm1heCgwLE1hdGgubWluKG8tcyxhLnNjcm9sbFkpKSx1PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49W10saT0wLGE9MDthPHQubGVuZ3RoO2ErKyl7Zm9yKHZhciBvPXRbYV0scz1vLnJvd3MsbD0wLGM9MDtjPHMubGVuZ3RoO2MrKylsKz1zW2NdLnJvd0hlaWdodDtvLmFsbFJvd3NIZWlnaHQ9bDtlPGkrbCYmZStyPmkmJm4ucHVzaChhKSxpKz1sfXJldHVybiBufShpLGwscyk7MT09PXUubGVuZ3RoJiYodVswXT09PWkubGVuZ3RoLTE/dS51bnNoaWZ0KHVbMF0tMSk6dS5wdXNoKHVbMF0rMSkpLHVbMF0lMiYmdS5yZXZlcnNlKCksZS5lYWNoKChmdW5jdGlvbih0LGUpe3QucGFnZT11W2VdLHQuc2Nyb2xsWT1sfSkpLGUuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9Tyh0LnJvd0Jsb2Nrcyx0LnBhZ2UpLXQuc2Nyb2xsWTtyZXR1cm4gYygwLGUpfSkpLHQmJihDKHQscixlLHUsbi5wcmV2UGFnZXMsbiwwKSxDKHQscixlLHUsbi5wcmV2UGFnZXMsbiwxKSx5KHIsdCkpfX1mdW5jdGlvbiBFKHQsZSxyLGEpe3JldHVybiBmdW5jdGlvbihvKXt2YXIgcz1vLmNhbGNkYXRhP28uY2FsY2RhdGE6byxsPWUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gcy5rZXk9PT10LmtleX0pKSxjPXJ8fHMuc2Nyb2xsYmFyU3RhdGUuZHJhZ011bHRpcGxpZXIsdT1zLnNjcm9sbFk7cy5zY3JvbGxZPXZvaWQgMD09PWE/cy5zY3JvbGxZK2MqaS5ldmVudC5keTphO3ZhciBmPWwuc2VsZWN0QWxsKCIuIituLmNuLnlDb2x1bW4pLnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5CbG9jaykuZmlsdGVyKGspO3JldHVybiBTKHQsZixsKSxzLnNjcm9sbFk9PT11fX1mdW5jdGlvbiBDKHQsZSxyLG4saSxhLG8pe25bb10hPT1pW29dJiYoY2xlYXJUaW1lb3V0KGEuY3VycmVudFJlcGFpbnRbb10pLGEuY3VycmVudFJlcGFpbnRbb109c2V0VGltZW91dCgoZnVuY3Rpb24oKXt2YXIgYT1yLmZpbHRlcigoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT09PW8mJm5bZV0hPT1pW2VdfSkpO3godCxlLGEsciksaVtvXT1uW29dfSkpKX1mdW5jdGlvbiBMKHQsZSxyLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBvPWkuc2VsZWN0KGUucGFyZW50Tm9kZSk7by5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LmZyYWdtZW50cztvLnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLmVhY2goKGZ1bmN0aW9uKHQscil7ZVtyXS53aWR0aD10aGlzLmdldENvbXB1dGVkVGV4dExlbmd0aCgpfSkpO3ZhciByLGksYT1lW2UubGVuZ3RoLTFdLndpZHRoLHM9ZS5zbGljZSgwLC0xKSxsPVtdLGM9MCx1PXQuY29sdW1uLmNvbHVtbldpZHRoLTIqbi5jZWxsUGFkO2Zvcih0LnZhbHVlPSIiO3MubGVuZ3RoOyljKyhpPShyPXMuc2hpZnQoKSkud2lkdGgrYSk+dSYmKHQudmFsdWUrPWwuam9pbihuLndyYXBTcGFjZXIpK24ubGluZUJyZWFrZXIsbD1bXSxjPTApLGwucHVzaChyLnRleHQpLGMrPWk7YyYmKHQudmFsdWUrPWwuam9pbihuLndyYXBTcGFjZXIpKSx0LndyYXBwZWQ9ITB9KSksby5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5yZW1vdmUoKSxiKG8uc2VsZWN0KCIuIituLmNuLmNlbGxUZXh0KSxyLHQsYSksaS5zZWxlY3QoZS5wYXJlbnROb2RlLnBhcmVudE5vZGUpLmNhbGwoeil9fWZ1bmN0aW9uIEkodCxlLHIsYSxvKXtyZXR1cm4gZnVuY3Rpb24oKXtpZighby5zZXR0bGVkWSl7dmFyIHM9aS5zZWxlY3QoZS5wYXJlbnROb2RlKSxsPUYobyksdT1vLmtleS1sLmZpcnN0Um93SW5kZXgsZj1sLnJvd3NbdV0ucm93SGVpZ2h0LGg9by5jZWxsSGVpZ2h0TWF5SW5jcmVhc2U/ZS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCsyKm4uY2VsbFBhZDpmLHA9TWF0aC5tYXgoaCxmKTtwLWwucm93c1t1XS5yb3dIZWlnaHQmJihsLnJvd3NbdV0ucm93SGVpZ2h0PXAsdC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbCkuY2FsbCh6KSxTKG51bGwsdC5maWx0ZXIoayksMCkseShyLGEsITApKSxzLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGU9aS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3QoIi4iK24uY24uY2VsbFJlY3QpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSxhPWUudG9wLXQudG9wKyhyP3IubWF0cml4LmY6bi5jZWxsUGFkKTtyZXR1cm4gYyhQKG8saS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3QoIi4iK24uY24uY2VsbFRleHRIb2xkZXIpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCksYSl9KSksby5zZXR0bGVkWT0hMH19fWZ1bmN0aW9uIFAodCxlKXtzd2l0Y2godC5hbGlnbil7Y2FzZSJsZWZ0IjpyZXR1cm4gbi5jZWxsUGFkO2Nhc2UicmlnaHQiOnJldHVybiB0LmNvbHVtbi5jb2x1bW5XaWR0aC0oZXx8MCktbi5jZWxsUGFkO2Nhc2UiY2VudGVyIjpyZXR1cm4odC5jb2x1bW4uY29sdW1uV2lkdGgtKGV8fDApKS8yO2RlZmF1bHQ6cmV0dXJuIG4uY2VsbFBhZH19ZnVuY3Rpb24geih0KXt0LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2Nrcy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrRChlLDEvMCl9KSwwKSxyPUQoRih0KSx0LmtleSk7cmV0dXJuIGMoMCxyK2UpfSkpLnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsUmVjdCkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuKGU9Rih0KSxyPXQua2V5LGUucm93c1tyLWUuZmlyc3RSb3dJbmRleF0pLnJvd0hlaWdodDt2YXIgZSxyfSkpfWZ1bmN0aW9uIE8odCxlKXtmb3IodmFyIHI9MCxuPWUtMTtuPj0wO24tLSlyKz1SKHRbbl0pO3JldHVybiByfWZ1bmN0aW9uIEQodCxlKXtmb3IodmFyIHI9MCxuPTA7bjx0LnJvd3MubGVuZ3RoJiZ0LnJvd3Nbbl0ucm93SW5kZXg8ZTtuKyspcis9dC5yb3dzW25dLnJvd0hlaWdodDtyZXR1cm4gcn1mdW5jdGlvbiBSKHQpe3ZhciBlPXQuYWxsUm93c0hlaWdodDtpZih2b2lkIDAhPT1lKXJldHVybiBlO2Zvcih2YXIgcj0wLG49MDtuPHQucm93cy5sZW5ndGg7bisrKXIrPXQucm93c1tuXS5yb3dIZWlnaHQ7cmV0dXJuIHQuYWxsUm93c0hlaWdodD1yLHJ9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5yb3dCbG9ja3NbdC5wYWdlXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0hdC5fY29udGV4dC5zdGF0aWNQbG90LHM9dC5fZnVsbExheW91dC5fcGFwZXIuc2VsZWN0QWxsKCIuIituLmNuLnRhYmxlKS5kYXRhKGUubWFwKChmdW5jdGlvbihlKXt2YXIgcj1hLnVud3JhcChlKS50cmFjZTtyZXR1cm4gZih0LHIpfSkpLGEua2V5RnVuKTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnRhYmxlLCEwKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94Iikuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgibGVmdCIsMCkuc3R5bGUoIm92ZXJmbG93IiwidmlzaWJsZSIpLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikscy5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRoK3Quc2l6ZS5sK3Quc2l6ZS5yfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodCt0LnNpemUudCt0LnNpemUuYn0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYyh0LnRyYW5zbGF0ZVgsdC50cmFuc2xhdGVZKX0pKTt2YXIgcD1zLnNlbGVjdEFsbCgiLiIrbi5jbi50YWJsZUNvbnRyb2xWaWV3KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKSxiPXAuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24udGFibGVDb250cm9sVmlldywhMCkuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpO2lmKHIpe3ZhciBfPSJvbndoZWVsImluIGRvY3VtZW50PyJ3aGVlbCI6Im1vdXNld2hlZWwiO2Iub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKGUpe3AuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZT09PXR9KSkuY2FsbCh5LHQpfSkpLm9uKF8sKGZ1bmN0aW9uKGUpe2lmKCFlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nKXtlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nPSEwO3ZhciByPWUuc2Nyb2xsWStpLmV2ZW50LmRlbHRhWTtFKHQscCxudWxsLHIpKGUpfHwoaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSxpLmV2ZW50LnByZXZlbnREZWZhdWx0KCkpLGUuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmc9ITF9fSkpLmNhbGwoeSx0LCEwKX1wLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBjKHQuc2l6ZS5sLHQuc2l6ZS50KX0pKTt2YXIgdz1wLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxCYWNrZ3JvdW5kKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTt3LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLnNjcm9sbEJhY2tncm91bmQsITApLmF0dHIoImZpbGwiLCJub25lIiksdy5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKSxwLmVhY2goKGZ1bmN0aW9uKGUpe28uc2V0Q2xpcFVybChpLnNlbGVjdCh0aGlzKSxnKHQsZSksdCl9KSk7dmFyIEE9cC5zZWxlY3RBbGwoIi4iK24uY24ueUNvbHVtbikuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uc30pLGEua2V5RnVuKTtBLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnlDb2x1bW4sITApLEEuZXhpdCgpLnJlbW92ZSgpLEEuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGModC54LDApfSkpLHImJkEuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKGUpe3JldHVybiBUKGkuc2VsZWN0KHRoaXMpLGUsLW4udXBsaWZ0KSxsKHRoaXMpLGUuY2FsY2RhdGEuY29sdW1uRHJhZ0luUHJvZ3Jlc3M9ITAseShwLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsY2RhdGEua2V5PT09dC5rZXl9KSksdCksZX0pKS5vbigiZHJhZyIsKGZ1bmN0aW9uKHQpe3ZhciBlPWkuc2VsZWN0KHRoaXMpLHI9ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9PT1lP2kuZXZlbnQueDplLngpK2UuY29sdW1uV2lkdGgvMn07dC54PU1hdGgubWF4KC1uLm92ZXJkcmFnLE1hdGgubWluKHQuY2FsY2RhdGEud2lkdGgrbi5vdmVyZHJhZy10LmNvbHVtbldpZHRoLGkuZXZlbnQueCkpLHYoQSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jYWxjZGF0YS5rZXk9PT10LmNhbGNkYXRhLmtleX0pKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiByKHQpLXIoZSl9KSkuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtlLnhJbmRleD1yLGUueD10PT09ZT9lLng6ZS54U2NhbGUoZSl9KSksQS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB0IT09ZX0pKS50cmFuc2l0aW9uKCkuZWFzZShuLnRyYW5zaXRpb25FYXNlKS5kdXJhdGlvbihuLnRyYW5zaXRpb25EdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGModC54LDApfSkpLGUuY2FsbCh1KS5hdHRyKCJ0cmFuc2Zvcm0iLGModC54LC1uLnVwbGlmdCkpfSkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24oZSl7dmFyIHI9aS5zZWxlY3QodGhpcyksbj1lLmNhbGNkYXRhO2UueD1lLnhTY2FsZShlKSxlLmNhbGNkYXRhLmNvbHVtbkRyYWdJblByb2dyZXNzPSExLFQocixlLDApLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmdkQ29sdW1uc09yaWdpbmFsT3JkZXI7ZS5nZENvbHVtbnMuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gcltuLmluZGV4T2YodCldLXJbbi5pbmRleE9mKGUpXX0pKSxlLmNvbHVtbm9yZGVyPXIsdC5lbWl0KCJwbG90bHlfcmVzdHlsZSIpfSh0LG4sbi5jb2x1bW5zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueEluZGV4fSkpKX0pKSksQS5lYWNoKChmdW5jdGlvbihlKXtvLnNldENsaXBVcmwoaS5zZWxlY3QodGhpcyksbSh0LGUpLHQpfSkpO3ZhciBDPUEuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJsb2NrKS5kYXRhKGguc3BsaXRUb1BhbmVscyxhLmtleUZ1bik7Qy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jb2x1bW5CbG9jaywhMCkuYXR0cigiaWQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSksQy5zdHlsZSgiY3Vyc29yIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHJhZ0hhbmRsZT8iZXctcmVzaXplIjp0LmNhbGNkYXRhLnNjcm9sbGJhclN0YXRlLmJhcldpZ2dsZVJvb20/Im5zLXJlc2l6ZSI6ImRlZmF1bHQifSkpO3ZhciBMPUMuZmlsdGVyKE0pLEk9Qy5maWx0ZXIoayk7ciYmSS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbigoZnVuY3Rpb24odCl7cmV0dXJuIGkuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksdH0pKS5vbigiZHJhZyIsRSh0LHAsLTEpKS5vbigiZHJhZ2VuZCIsKGZ1bmN0aW9uKCl7fSkpKSx4KHQscCxMLEMpLHgodCxwLEksQyk7dmFyIFA9cC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsQXJlYUNsaXApLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO1AuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZChuLmNuLnNjcm9sbEFyZWFDbGlwLCEwKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKGUpe3JldHVybiBnKHQsZSl9KSk7dmFyIHo9UC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsQXJlYUNsaXBSZWN0KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTt6LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLnNjcm9sbEFyZWFDbGlwUmVjdCwhMCkuYXR0cigieCIsLW4ub3ZlcmRyYWcpLmF0dHIoInkiLC1uLnVwbGlmdCkuYXR0cigiZmlsbCIsIm5vbmUiKSx6LmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGgrMipuLm92ZXJkcmFnfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodCtuLnVwbGlmdH0pKSxBLnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5Cb3VuZGFyeSkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bikuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnksITApO3ZhciBPPUEuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJvdW5kYXJ5Q2xpcHBhdGgpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO08uZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5Q2xpcHBhdGgsITApLE8uYXR0cigiaWQiLChmdW5jdGlvbihlKXtyZXR1cm4gbSh0LGUpfSkpO3ZhciBEPU8uc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJvdW5kYXJ5UmVjdCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7RC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeVJlY3QsITApLmF0dHIoImZpbGwiLCJub25lIiksRC5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbldpZHRoKzIqZCh0KX0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYWxjZGF0YS5oZWlnaHQrMipkKHQpK24udXBsaWZ0fSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4tZCh0KX0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuLWQodCl9KSksUyhudWxsLEkscCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvZ3VwIjo3NzUsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAzLCIuL2NvbnN0YW50cyI6MTMxOSwiLi9kYXRhX3ByZXBhcmF0aW9uX2hlbHBlciI6MTMyMCwiLi9kYXRhX3NwbGl0X2hlbHBlcnMiOjEzMjEsZDM6MTY5fV0sMTMyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMscz10KCIuLi9waWUvYXR0cmlidXRlcyIpLGw9dCgiLi4vc3VuYnVyc3QvYXR0cmlidXRlcyIpLGM9dCgiLi9jb25zdGFudHMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bGFiZWxzOmwubGFiZWxzLHBhcmVudHM6bC5wYXJlbnRzLHZhbHVlczpsLnZhbHVlcyxicmFuY2h2YWx1ZXM6bC5icmFuY2h2YWx1ZXMsY291bnQ6bC5jb3VudCxsZXZlbDpsLmxldmVsLG1heGRlcHRoOmwubWF4ZGVwdGgsdGlsaW5nOntwYWNraW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzcXVhcmlmeSIsImJpbmFyeSIsImRpY2UiLCJzbGljZSIsInNsaWNlLWRpY2UiLCJkaWNlLXNsaWNlIl0sZGZsdDoic3F1YXJpZnkiLGVkaXRUeXBlOiJwbG90In0sc3F1YXJpZnlyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MSxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxmbGlwOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJ4IiwieSJdLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6dSh7cGFkOnt0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90In0sbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCJ9LHI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxiOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMifSxjb2xvcnM6bC5tYXJrZXIuY29sb3JzLGRlcHRoZmFkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwicmV2ZXJzZWQiXSxlZGl0VHlwZToic3R5bGUifSxsaW5lOmwubWFya2VyLmxpbmUsZWRpdFR5cGU6ImNhbGMifSxhKCJtYXJrZXIiLHtjb2xvckF0dHI6ImNvbG9ycyIsYW5pbTohMX0pKSxwYXRoYmFyOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIl0sZGZsdDoidG9wIixlZGl0VHlwZToicGxvdCJ9LGVkZ2VzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiPiIsIjwiLCJ8IiwiLyIsIlxcIl0sZGZsdDoiPiIsZWRpdFR5cGU6InBsb3QifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEyLGVkaXRUeXBlOiJwbG90In0sdGV4dGZvbnQ6dSh7fSxzLnRleHRmb250LHt9KSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6cy50ZXh0LHRleHRpbmZvOmwudGV4dGluZm8sdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6Yy5ldmVudERhdGFLZXlzLmNvbmNhdChbImxhYmVsIiwidmFsdWUiXSl9KSxob3ZlcnRleHQ6cy5ob3ZlcnRleHQsaG92ZXJpbmZvOmwuaG92ZXJpbmZvLGhvdmVydGVtcGxhdGU6bih7fSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSx0ZXh0Zm9udDpzLnRleHRmb250LGluc2lkZXRleHRmb250OnMuaW5zaWRldGV4dGZvbnQsb3V0c2lkZXRleHRmb250OnUoe30scy5vdXRzaWRldGV4dGZvbnQse30pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIGxlZnQiLCJ0b3AgY2VudGVyIiwidG9wIHJpZ2h0IiwibWlkZGxlIGxlZnQiLCJtaWRkbGUgY2VudGVyIiwibWlkZGxlIHJpZ2h0IiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZGZsdDoidG9wIGxlZnQiLGVkaXRUeXBlOiJwbG90In0sc29ydDpzLnNvcnQscm9vdDpsLnJvb3QsZG9tYWluOm8oe25hbWU6InRyZWVtYXAiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjUwLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDYsIi4uL3BpZS9hdHRyaWJ1dGVzIjoxMTYxLCIuLi9zdW5idXJzdC9hdHRyaWJ1dGVzIjoxMjk5LCIuL2NvbnN0YW50cyI6MTMyOH1dLDEzMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9InRyZWVtYXAiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MX1dLDEzMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc3VuYnVyc3QvY2FsYyIpO3IuY2FsYz1mdW5jdGlvbih0LGUpe3JldHVybiBuLmNhbGModCxlKX0sci5jcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0KXtyZXR1cm4gbi5fcnVuQ3Jvc3NUcmFjZUNhbGMoInRyZWVtYXAiLHQpfX0seyIuLi9zdW5idXJzdC9jYWxjIjoxMzAxfV0sMTMyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0NMSUNLX1RSQU5TSVRJT05fVElNRTo3NTAsQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkc6InBvbHkiLGV2ZW50RGF0YUtleXM6WyJjdXJyZW50UGF0aCIsInJvb3QiLCJlbnRyeSIsInBlcmNlbnRSb290IiwicGVyY2VudEVudHJ5IiwicGVyY2VudFBhcmVudCJdLGdhcFdpdGhQYXRoYmFyOjF9fSx7fV0sMTMyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMscz10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVUZXh0LGw9dCgiLi4vYmFyL2NvbnN0YW50cyIpLlRFWFRQQUQsYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSx1PWMuaGFzQ29sb3JzY2FsZSxmPWMuaGFuZGxlRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIGgocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgcD1oKCJsYWJlbHMiKSxkPWgoInBhcmVudHMiKTtpZihwJiZwLmxlbmd0aCYmZCYmZC5sZW5ndGgpe3ZhciBnPWgoInZhbHVlcyIpO2cmJmcubGVuZ3RoP2goImJyYW5jaHZhbHVlcyIpOmgoImNvdW50IiksaCgibGV2ZWwiKSxoKCJtYXhkZXB0aCIpLCJzcXVhcmlmeSI9PT1oKCJ0aWxpbmcucGFja2luZyIpJiZoKCJ0aWxpbmcuc3F1YXJpZnlyYXRpbyIpLGgoInRpbGluZy5mbGlwIiksaCgidGlsaW5nLnBhZCIpO3ZhciBtPWgoInRleHQiKTtoKCJ0ZXh0dGVtcGxhdGUiKSxlLnRleHR0ZW1wbGF0ZXx8aCgidGV4dGluZm8iLEFycmF5LmlzQXJyYXkobSk/InRleHQrbGFiZWwiOiJsYWJlbCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKTt2YXIgdj1oKCJwYXRoYmFyLnZpc2libGUiKTtzKHQsZSxjLGgsImF1dG8iLHtoYXNQYXRoYmFyOnYsbW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSksaCgidGV4dHBvc2l0aW9uIik7dmFyIHk9LTEhPT1lLnRleHRwb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKTtoKCJtYXJrZXIubGluZS53aWR0aCIpJiZoKCJtYXJrZXIubGluZS5jb2xvciIsYy5wYXBlcl9iZ2NvbG9yKTt2YXIgeD1oKCJtYXJrZXIuY29sb3JzIiksYj1lLl9oYXNDb2xvcnNjYWxlPXUodCwibWFya2VyIiwiY29sb3JzIil8fCh0Lm1hcmtlcnx8e30pLmNvbG9yYXhpcztiP2YodCxlLGMsaCx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pOmgoIm1hcmtlci5kZXB0aGZhZGUiLCEoeHx8W10pLmxlbmd0aCk7dmFyIF89MiplLnRleHRmb250LnNpemU7aCgibWFya2VyLnBhZC50Iix5P18vNDpfKSxoKCJtYXJrZXIucGFkLmwiLF8vNCksaCgibWFya2VyLnBhZC5yIixfLzQpLGgoIm1hcmtlci5wYWQuYiIseT9fOl8vNCksYiYmZih0LGUsYyxoLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSksZS5faG92ZXJlZD17bWFya2VyOntsaW5lOnt3aWR0aDoyLGNvbG9yOmEuY29udHJhc3QoYy5wYXBlcl9iZ2NvbG9yKX19fSx2JiYoaCgicGF0aGJhci50aGlja25lc3MiLGUucGF0aGJhci50ZXh0Zm9udC5zaXplKzIqbCksaCgicGF0aGJhci5zaWRlIiksaCgicGF0aGJhci5lZGdlc2hhcGUiKSksaCgic29ydCIpLGgoInJvb3QuY29sb3IiKSxvKGUsYyxoKSxlLl9sZW5ndGg9bnVsbH1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi9iYXIvY29uc3RhbnRzIjo5MjMsIi4uL2Jhci9kZWZhdWx0cyI6OTI1LCIuL2F0dHJpYnV0ZXMiOjEzMjV9XSwxMzMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuL3BhcnRpdGlvbiIpLGw9dCgiLi9zdHlsZSIpLnN0eWxlT25lLGM9dCgiLi9jb25zdGFudHMiKSx1PXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxmPXQoIi4uL3N1bmJ1cnN0L2Z4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgscCl7dmFyIGQ9cC5iYXJEaWZZLGc9cC53aWR0aCxtPXAuaGVpZ2h0LHY9cC52aWV3WCx5PXAudmlld1kseD1wLnBhdGhTbGljZSxiPXAudG9Nb3ZlSW5zaWRlU2xpY2UsXz1wLnN0clRyYW5zZm9ybSx3PXAuaGFzVHJhbnNpdGlvbixUPXAuaGFuZGxlU2xpY2VzRXhpdCxrPXAubWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yLE09cC5tYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcixBPXt9LFM9dC5fZnVsbExheW91dCxFPWVbMF0sQz1FLnRyYWNlLEw9RS5oaWVyYXJjaHksST1nL0MuX2VudHJ5RGVwdGgsUD11Lmxpc3RQYXRoKHIuZGF0YSwiaWQiKSx6PXMoTC5jb3B5KCksW2csbV0se3BhY2tpbmc6ImRpY2UiLHBhZDp7aW5uZXI6MCx0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MH19KS5kZXNjZW5kYW50cygpOyh6PXouZmlsdGVyKChmdW5jdGlvbih0KXt2YXIgZT1QLmluZGV4T2YodC5kYXRhLmlkKTtyZXR1cm4tMSE9PWUmJih0LngwPUkqZSx0LngxPUkqKGUrMSksdC55MD1kLHQueTE9ZCttLHQub25QYXRoYmFyPSEwLCEwKX0pKSkucmV2ZXJzZSgpLChoPWguZGF0YSh6LHUuZ2V0UHRJZCkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicGF0aGJhciIsITApLFQoaCwhMCxBLFtnLG1dLHgpLGgub3JkZXIoKTt2YXIgTz1oO3cmJihPPU8udHJhbnNpdGlvbigpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7dS5zZXRTbGljZUN1cnNvcihlLHQse2hpZGVPblJvb3Q6ITEsaGlkZU9uTGVhdmVzOiExLGlzVHJhbnNpdGlvbmluZzohMX0pfSkpKSxPLmVhY2goKGZ1bmN0aW9uKHMpe3MuX2hvdmVyWD12KHMueDEtTWF0aC5taW4oZyxtKS8yKSxzLl9ob3Zlclk9eShzLnkxLW0vMik7dmFyIGg9bi5zZWxlY3QodGhpcykscD1pLmVuc3VyZVNpbmdsZShoLCJwYXRoIiwic3VyZmFjZSIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7dz9wLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1rKHQsITAsQSxbZyxtXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB4KGUodCkpfX0pKTpwLmF0dHIoImQiLHgpLGguY2FsbChmLHIsdCxlLHtzdHlsZU9uZTpsLGV2ZW50RGF0YUtleXM6Yy5ldmVudERhdGFLZXlzLHRyYW5zaXRpb25UaW1lOmMuQ0xJQ0tfVFJBTlNJVElPTl9USU1FLHRyYW5zaXRpb25FYXNpbmc6Yy5DTElDS19UUkFOU0lUSU9OX0VBU0lOR30pLmNhbGwodS5zZXRTbGljZUN1cnNvcix0LHtoaWRlT25Sb290OiExLGhpZGVPbkxlYXZlczohMSxpc1RyYW5zaXRpb25pbmc6dC5fdHJhbnNpdGlvbmluZ30pLHAuY2FsbChsLHMsQyx7aG92ZXJlZDohMX0pLHMuX3RleHQ9KHUuZ2V0UHRMYWJlbChzKXx8IiIpLnNwbGl0KCI8YnI+Iikuam9pbigiICIpfHwiIjt2YXIgZD1pLmVuc3VyZVNpbmdsZShoLCJnIiwic2xpY2V0ZXh0IiksVD1pLmVuc3VyZVNpbmdsZShkLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxFPWkuZW5zdXJlVW5pZm9ybUZvbnRTaXplKHQsdS5kZXRlcm1pbmVUZXh0Rm9udChDLHMsUy5mb250LHtvblBhdGhiYXI6ITB9KSk7VC50ZXh0KHMuX3RleHR8fCIgIikuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmNhbGwoYS5mb250LEUpLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCkscy50ZXh0QkI9YS5iQm94KFQubm9kZSgpKSxzLnRyYW5zZm9ybT1iKHMse2ZvbnRTaXplOkUuc2l6ZSxvblBhdGhiYXI6ITB9KSxzLnRyYW5zZm9ybS5mb250U2l6ZT1FLnNpemUsdz9ULnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPU0odCwhMCxBLFtnLG1dKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF8oZSh0KSl9fSkpOlQuYXR0cigidHJhbnNmb3JtIixfKHMpKX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMywiLi4vc3VuYnVyc3QvZngiOjEzMDQsIi4uL3N1bmJ1cnN0L2hlbHBlcnMiOjEzMDUsIi4vY29uc3RhbnRzIjoxMzI4LCIuL3BhcnRpdGlvbiI6MTMzNSwiLi9zdHlsZSI6MTMzNyxkMzoxNjl9XSwxMzMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuL3BhcnRpdGlvbiIpLGw9dCgiLi9zdHlsZSIpLnN0eWxlT25lLGM9dCgiLi9jb25zdGFudHMiKSx1PXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxmPXQoIi4uL3N1bmJ1cnN0L2Z4IiksaD10KCIuLi9zdW5idXJzdC9wbG90IikuZm9ybWF0U2xpY2VMYWJlbDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscCxkKXt2YXIgZz1kLndpZHRoLG09ZC5oZWlnaHQsdj1kLnZpZXdYLHk9ZC52aWV3WSx4PWQucGF0aFNsaWNlLGI9ZC50b01vdmVJbnNpZGVTbGljZSxfPWQuc3RyVHJhbnNmb3JtLHc9ZC5oYXNUcmFuc2l0aW9uLFQ9ZC5oYW5kbGVTbGljZXNFeGl0LGs9ZC5tYWtlVXBkYXRlU2xpY2VJbnRlcnBvbGF0b3IsTT1kLm1ha2VVcGRhdGVUZXh0SW50ZXJwb2xhdG9yLEE9ZC5wcmV2RW50cnksUz10Ll9mdWxsTGF5b3V0LEU9ZVswXS50cmFjZSxDPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigibGVmdCIpLEw9LTEhPT1FLnRleHRwb3NpdGlvbi5pbmRleE9mKCJyaWdodCIpLEk9LTEhPT1FLnRleHRwb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSxQPSFJJiYhRS5tYXJrZXIucGFkLnR8fEkmJiFFLm1hcmtlci5wYWQuYix6PXMocixbZyxtXSx7cGFja2luZzpFLnRpbGluZy5wYWNraW5nLHNxdWFyaWZ5cmF0aW86RS50aWxpbmcuc3F1YXJpZnlyYXRpbyxmbGlwWDpFLnRpbGluZy5mbGlwLmluZGV4T2YoIngiKT4tMSxmbGlwWTpFLnRpbGluZy5mbGlwLmluZGV4T2YoInkiKT4tMSxwYWQ6e2lubmVyOkUudGlsaW5nLnBhZCx0b3A6RS5tYXJrZXIucGFkLnQsbGVmdDpFLm1hcmtlci5wYWQubCxyaWdodDpFLm1hcmtlci5wYWQucixib3R0b206RS5tYXJrZXIucGFkLmJ9fSkuZGVzY2VuZGFudHMoKSxPPTEvMCxEPS0xLzA7ei5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LmRlcHRoO2U+PUUuX21heERlcHRoPyh0LngwPXQueDE9KHQueDArdC54MSkvMix0LnkwPXQueTE9KHQueTArdC55MSkvMik6KE89TWF0aC5taW4oTyxlKSxEPU1hdGgubWF4KEQsZSkpfSkpLHA9cC5kYXRhKHosdS5nZXRQdElkKSxFLl9tYXhWaXNpYmxlTGF5ZXJzPWlzRmluaXRlKEQpP0QtTysxOjAscC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCksVChwLCExLHt9LFtnLG1dLHgpLHAub3JkZXIoKTt2YXIgUj1udWxsO2lmKHcmJkEpe3ZhciBGPXUuZ2V0UHRJZChBKTtwLmVhY2goKGZ1bmN0aW9uKHQpe251bGw9PT1SJiZ1LmdldFB0SWQodCk9PT1GJiYoUj17eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX0pfSkpfXZhciBCPWZ1bmN0aW9uKCl7cmV0dXJuIFJ8fHt4MDowLHgxOmcseTA6MCx5MTptfX0sTj1wO3JldHVybiB3JiYoTj1OLnRyYW5zaXRpb24oKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO3Uuc2V0U2xpY2VDdXJzb3IoZSx0LHtoaWRlT25Sb290OiEwLGhpZGVPbkxlYXZlczohMSxpc1RyYW5zaXRpb25pbmc6ITF9KX0pKSksTi5lYWNoKChmdW5jdGlvbihzKXt2YXIgcD11LmlzSGVhZGVyKHMsRSk7cy5faG92ZXJYPXYocy54MS1FLm1hcmtlci5wYWQucikscy5faG92ZXJZPXkoST9zLnkxLUUubWFya2VyLnBhZC5iLzI6cy55MCtFLm1hcmtlci5wYWQudC8yKTt2YXIgZD1uLnNlbGVjdCh0aGlzKSxUPWkuZW5zdXJlU2luZ2xlKGQsInBhdGgiLCJzdXJmYWNlIiwoZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKTt3P1QudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsKGZ1bmN0aW9uKHQpe3ZhciBlPWsodCwhMSxCKCksW2csbV0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geChlKHQpKX19KSk6VC5hdHRyKCJkIix4KSxkLmNhbGwoZixyLHQsZSx7c3R5bGVPbmU6bCxldmVudERhdGFLZXlzOmMuZXZlbnREYXRhS2V5cyx0cmFuc2l0aW9uVGltZTpjLkNMSUNLX1RSQU5TSVRJT05fVElNRSx0cmFuc2l0aW9uRWFzaW5nOmMuQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkd9KS5jYWxsKHUuc2V0U2xpY2VDdXJzb3IsdCx7aXNUcmFuc2l0aW9uaW5nOnQuX3RyYW5zaXRpb25pbmd9KSxULmNhbGwobCxzLEUse2hvdmVyZWQ6ITF9KSxzLngwPT09cy54MXx8cy55MD09PXMueTE/cy5fdGV4dD0iIjpzLl90ZXh0PXA/UD8iIjp1LmdldFB0TGFiZWwocyl8fCIiOmgocyxyLEUsZSxTKXx8IiI7dmFyIEE9aS5lbnN1cmVTaW5nbGUoZCwiZyIsInNsaWNldGV4dCIpLHo9aS5lbnN1cmVTaW5nbGUoQSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksTz1pLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LHUuZGV0ZXJtaW5lVGV4dEZvbnQoRSxzLFMuZm9udCkpO3oudGV4dChzLl90ZXh0fHwiICIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLmF0dHIoInRleHQtYW5jaG9yIixMPyJlbmQiOkN8fHA/InN0YXJ0IjoibWlkZGxlIikuY2FsbChhLmZvbnQsTykuY2FsbChvLmNvbnZlcnRUb1RzcGFucyx0KSxzLnRleHRCQj1hLmJCb3goei5ub2RlKCkpLHMudHJhbnNmb3JtPWIocyx7Zm9udFNpemU6Ty5zaXplLGlzSGVhZGVyOnB9KSxzLnRyYW5zZm9ybS5mb250U2l6ZT1PLnNpemUsdz96LnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPU0odCwhMSxCKCksW2csbV0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gXyhlKHQpKX19KSk6ei5hdHRyKCJ0cmFuc2Zvcm0iLF8ocykpfSkpLFJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjY1LCIuLi8uLi9saWIiOjc3OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDMsIi4uL3N1bmJ1cnN0L2Z4IjoxMzA0LCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMzA1LCIuLi9zdW5idXJzdC9wbG90IjoxMzA5LCIuL2NvbnN0YW50cyI6MTMyOCwiLi9wYXJ0aXRpb24iOjEzMzUsIi4vc3R5bGUiOjEzMzcsZDM6MTY5fV0sMTMzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJ0cmVlbWFwIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG1ldGE6e319fSx7Ii4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA1LCIuL2F0dHJpYnV0ZXMiOjEzMjUsIi4vYmFzZV9wbG90IjoxMzI2LCIuL2NhbGMiOjEzMjcsIi4vZGVmYXVsdHMiOjEzMjksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEzMzMsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMzM0LCIuL3Bsb3QiOjEzMzYsIi4vc3R5bGUiOjEzMzd9XSwxMzMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dHJlZW1hcGNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGVkaXRUeXBlOiJjYWxjIn0sZXh0ZW5kdHJlZW1hcGNvbG9yczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDEzMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXIoInRyZWVtYXBjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kdHJlZW1hcGNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjc3OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTMzM31dLDEzMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMtaGllcmFyY2h5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhPXIuZmxpcFgsbz1yLmZsaXBZLHM9ImRpY2Utc2xpY2UiPT09ci5wYWNraW5nLGw9ci5wYWRbbz8iYm90dG9tIjoidG9wIl0sYz1yLnBhZFthPyJyaWdodCI6ImxlZnQiXSx1PXIucGFkW2E/ImxlZnQiOiJyaWdodCJdLGY9ci5wYWRbbz8idG9wIjoiYm90dG9tIl07cyYmKGk9YyxjPWwsbD1pLGk9dSx1PWYsZj1pKTt2YXIgaD1uLnRyZWVtYXAoKS50aWxlKGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQpe2Nhc2Uic3F1YXJpZnkiOnJldHVybiBuLnRyZWVtYXBTcXVhcmlmeS5yYXRpbyhlKTtjYXNlImJpbmFyeSI6cmV0dXJuIG4udHJlZW1hcEJpbmFyeTtjYXNlImRpY2UiOnJldHVybiBuLnRyZWVtYXBEaWNlO2Nhc2Uic2xpY2UiOnJldHVybiBuLnRyZWVtYXBTbGljZTtkZWZhdWx0OnJldHVybiBuLnRyZWVtYXBTbGljZURpY2V9fShyLnBhY2tpbmcsci5zcXVhcmlmeXJhdGlvKSkucGFkZGluZ0lubmVyKHIucGFkLmlubmVyKS5wYWRkaW5nTGVmdChjKS5wYWRkaW5nUmlnaHQodSkucGFkZGluZ1RvcChsKS5wYWRkaW5nQm90dG9tKGYpLnNpemUocz9bZVsxXSxlWzBdXTplKSh0KTtyZXR1cm4oc3x8YXx8bykmJmZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpO24uc3dhcFhZJiYoaT1lLngwLGUueDA9ZS55MCxlLnkwPWksaT1lLngxLGUueDE9ZS55MSxlLnkxPWkpO24uZmxpcFgmJihpPWUueDAsZS54MD1yWzBdLWUueDEsZS54MT1yWzBdLWkpO24uZmxpcFkmJihpPWUueTAsZS55MD1yWzFdLWUueTEsZS55MT1yWzFdLWkpO3ZhciBhPWUuY2hpbGRyZW47aWYoYSlmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKyl0KGFbb10scixuKX0oaCxlLHtzd2FwWFk6cyxmbGlwWDphLGZsaXBZOm99KSxofX0seyJkMy1oaWVyYXJjaHkiOjE2MX1dLDEzMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vYmFyL2NvbnN0YW50cyIpLlRFWFRQQUQscz10KCIuLi9iYXIvcGxvdCIpLnRvTW92ZUluc2lkZUJhcixsPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKSxjPWwucmVjb3JkTWluVGV4dFNpemUsdT1sLmNsZWFyTWluVGV4dFNpemUsZj10KCIuLi9iYXIvc3R5bGUiKS5yZXNpemVUZXh0LGg9dCgiLi9jb25zdGFudHMiKSxwPXQoIi4vZHJhd19kZXNjZW5kYW50cyIpLGQ9dCgiLi9kcmF3X2FuY2VzdG9ycyIpO2Z1bmN0aW9uIGcodCl7cmV0dXJuIGkuaXNIaWVyYXJjaHlSb290KHQpPyIiOmkuZ2V0UHRJZCh0KX1mdW5jdGlvbiBtKHQsZSxyLGwpe3ZhciB1PXQuX2Z1bGxMYXlvdXQsZj1lWzBdLG09Zi50cmFjZSx2PWYuaGllcmFyY2h5LHk9aS5maW5kRW50cnlXaXRoTGV2ZWwodixtLmxldmVsKSx4PW4uc2VsZWN0KHIpLGI9eC5zZWxlY3RBbGwoImcucGF0aGJhciIpLF89eC5zZWxlY3RBbGwoImcuc2xpY2UiKTtpZigheSlyZXR1cm4gYi5yZW1vdmUoKSx2b2lkIF8ucmVtb3ZlKCk7dmFyIHc9aS5pc0hpZXJhcmNoeVJvb3QoeSksVD0hdS51bmlmb3JtdGV4dC5tb2RlJiZpLmhhc1RyYW5zaXRpb24obCksaz1pLmdldE1heERlcHRoKG0pLE09dS5fc2l6ZSxBPW0uZG9tYWluLFM9TS53KihBLnhbMV0tQS54WzBdKSxFPU0uaCooQS55WzFdLUEueVswXSksQz1TLEw9bS5wYXRoYmFyLnRoaWNrbmVzcyxJPW0ubWFya2VyLmxpbmUud2lkdGgraC5nYXBXaXRoUGF0aGJhcixQPW0ucGF0aGJhci52aXNpYmxlP20ucGF0aGJhci5zaWRlLmluZGV4T2YoImJvdHRvbSIpPi0xP0UrSTotKEwrSSk6MCx6PXt4MDpDLHgxOkMseTA6UCx5MTpQK0x9LE89ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW0udGlsaW5nLnBhZCxpPWZ1bmN0aW9uKHQpe3JldHVybiB0LW48PWUueDB9LGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQrbj49ZS54MX0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdC1uPD1lLnkwfSxzPWZ1bmN0aW9uKHQpe3JldHVybiB0K24+PWUueTF9O3JldHVybnt4MDppKHQueDAtbik/MDphKHQueDAtbik/clswXTp0LngwLHgxOmkodC54MStuKT8wOmEodC54MStuKT9yWzBdOnQueDEseTA6byh0LnkwLW4pPzA6cyh0LnkwLW4pP3JbMV06dC55MCx5MTpvKHQueTErbik/MDpzKHQueTErbik/clsxXTp0LnkxfX0sRD1udWxsLFI9e30sRj17fSxCPW51bGwsTj1mdW5jdGlvbih0LGUpe3JldHVybiBlP1JbZyh0KV06RltnKHQpXX0saj1mdW5jdGlvbih0LGUscixuKXtpZihlKXJldHVybiBSW2codildfHx6O3ZhciBpPUZbbS5sZXZlbF18fHI7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGEuZGVwdGgteS5kYXRhLmRlcHRoPGt9KHQpP08odCxpLG4pOnt9fTtmLmhhc011bHRpcGxlUm9vdHMmJncmJmsrKyxtLl9tYXhEZXB0aD1rLG0uX2JhY2tncm91bmRDb2xvcj11LnBhcGVyX2JnY29sb3IsbS5fZW50cnlEZXB0aD15LmRhdGEuZGVwdGgsbS5fYXRSb290TGV2ZWw9dzt2YXIgVT0tUy8yK00ubCtNLncqKEEueFsxXStBLnhbMF0pLzIsVj0tRS8yK00udCtNLmgqKDEtKEEueVsxXStBLnlbMF0pLzIpLHE9ZnVuY3Rpb24odCl7cmV0dXJuIFUrdH0sSD1mdW5jdGlvbih0KXtyZXR1cm4gVit0fSxHPUgoMCksWT1xKDApLFc9ZnVuY3Rpb24odCl7cmV0dXJuIFkrdH0sWD1mdW5jdGlvbih0KXtyZXR1cm4gRyt0fTtmdW5jdGlvbiBaKHQsZSl7cmV0dXJuIHQrIiwiK2V9dmFyIEo9VygwKSxLPWZ1bmN0aW9uKHQpe3QueD1NYXRoLm1heChKLHQueCl9LFE9bS5wYXRoYmFyLmVkZ2VzaGFwZSwkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54MCxuPXQueDEsaT10LnkwLGE9dC55MSxsPXQudGV4dEJCLGY9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1tLnRleHRwb3NpdGlvbi5pbmRleE9mKHQpfSxoPWYoImJvdHRvbSIpLHA9ZigidG9wIil8fGUuaXNIZWFkZXImJiFoPyJzdGFydCI6aD8iZW5kIjoibWlkZGxlIixkPWYoInJpZ2h0IiksZz1mKCJsZWZ0Iil8fGUub25QYXRoYmFyPy0xOmQ/MTowLHY9bS5tYXJrZXIucGFkO2lmKGUuaXNIZWFkZXIpe2lmKChyKz12Lmwtbyk+PShuLT12LnItbykpe3ZhciB5PShyK24pLzI7cj15LG49eX12YXIgeDtoP2k8KHg9YS12LmIpJiZ4PGEmJihpPXgpOmk8KHg9aSt2LnQpJiZ4PGEmJihhPXgpfXZhciBiPXMocixuLGksYSxsLHtpc0hvcml6b250YWw6ITEsY29uc3RyYWluZWQ6ITAsYW5nbGU6MCxhbmNob3I6cCxsZWZ0VG9SaWdodDpnfSk7cmV0dXJuIGIuZm9udFNpemU9ZS5mb250U2l6ZSxiLnRhcmdldFg9cShiLnRhcmdldFgpLGIudGFyZ2V0WT1IKGIudGFyZ2V0WSksaXNOYU4oYi50YXJnZXRYKXx8aXNOYU4oYi50YXJnZXRZKT97fToociE9PW4mJmkhPT1hJiZjKG0udHlwZSxiLHUpLHtzY2FsZTpiLnNjYWxlLHJvdGF0ZTpiLnJvdGF0ZSx0ZXh0WDpiLnRleHRYLHRleHRZOmIudGV4dFksYW5jaG9yWDpiLmFuY2hvclgsYW5jaG9yWTpiLmFuY2hvclksdGFyZ2V0WDpiLnRhcmdldFgsdGFyZ2V0WTpiLnRhcmdldFl9KX0sdHQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj0wLGk9dDshciYmbjxrOyluKyssKGk9aS5wYXJlbnQpP3I9TihpLGUpOm49aztyZXR1cm4gcnx8e319LGV0PWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvLHM9Tih0LGUpO2lmKHMpbz1zO2Vsc2UgaWYoZSlvPXo7ZWxzZSBpZihEKWlmKHQucGFyZW50KXt2YXIgbD1CfHxyO2wmJiFlP289Tyh0LGwsaSk6KG89e30sYS5leHRlbmRGbGF0KG8sdHQodCxlKSkpfWVsc2Ugbz10O2Vsc2Ugbz17fTtyZXR1cm4gbi5pbnRlcnBvbGF0ZShvLHt4MDp0LngwLHgxOnQueDEseTA6dC55MCx5MTp0LnkxfSl9LHJ0PWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPU4odCxlKSxsPXt9LGY9aih0LGUscixvKTthLmV4dGVuZEZsYXQobCx7dHJhbnNmb3JtOiQoe3gwOmYueDAseDE6Zi54MSx5MDpmLnkwLHkxOmYueTEsdGV4dEJCOnQudGV4dEJCLF90ZXh0OnQuX3RleHR9LHtpc0hlYWRlcjppLmlzSGVhZGVyKHQsbSl9KX0pLHM/bD1zOnQucGFyZW50JiZhLmV4dGVuZEZsYXQobCx0dCh0LGUpKTt2YXIgaD10LnRyYW5zZm9ybTtyZXR1cm4gdC54MCE9PXQueDEmJnQueTAhPT10LnkxJiZjKG0udHlwZSxoLHUpLG4uaW50ZXJwb2xhdGUobCx7dHJhbnNmb3JtOntzY2FsZTpoLnNjYWxlLHJvdGF0ZTpoLnJvdGF0ZSx0ZXh0WDpoLnRleHRYLHRleHRZOmgudGV4dFksYW5jaG9yWDpoLmFuY2hvclgsYW5jaG9yWTpoLmFuY2hvclksdGFyZ2V0WDpoLnRhcmdldFgsdGFyZ2V0WTpoLnRhcmdldFl9fSl9LG50PWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG89aVswXSxzPWlbMV07VD90LmV4aXQoKS50cmFuc2l0aW9uKCkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LnNlbGVjdCgicGF0aC5zdXJmYWNlIikudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsKGZ1bmN0aW9uKHQpe3ZhciByPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG89Tih0LGUpO2lmKGUpYT16O2Vsc2V7dmFyIHM9Tih5LGUpO2E9cz9PKHQscyxpKTp7fX1yZXR1cm4gbi5pbnRlcnBvbGF0ZShvLGEpfSh0LGUsMCxbbyxzXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhKHIodCkpfX0pKSx0LnNlbGVjdCgiZy5zbGljZXRleHQiKS5hdHRyKCJvcGFjaXR5IiwwKX0pKS5yZW1vdmUoKTp0LmV4aXQoKS5yZW1vdmUoKX0saXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFuc2Zvcm07cmV0dXJuIHQueDAhPT10LngxJiZ0LnkwIT09dC55MSYmYyhtLnR5cGUsZSx1KSxhLmdldFRleHRUcmFuc2Zvcm0oe3RleHRYOmUudGV4dFgsdGV4dFk6ZS50ZXh0WSxhbmNob3JYOmUuYW5jaG9yWCxhbmNob3JZOmUuYW5jaG9yWSx0YXJnZXRYOmUudGFyZ2V0WCx0YXJnZXRZOmUudGFyZ2V0WSxzY2FsZTplLnNjYWxlLHJvdGF0ZTplLnJvdGF0ZX0pfTtUJiYoYi5lYWNoKChmdW5jdGlvbih0KXtSW2codCldPXt4MDp0LngwLHgxOnQueDEseTA6dC55MCx5MTp0LnkxfSx0LnRyYW5zZm9ybSYmKFJbZyh0KV0udHJhbnNmb3JtPXt0ZXh0WDp0LnRyYW5zZm9ybS50ZXh0WCx0ZXh0WTp0LnRyYW5zZm9ybS50ZXh0WSxhbmNob3JYOnQudHJhbnNmb3JtLmFuY2hvclgsYW5jaG9yWTp0LnRyYW5zZm9ybS5hbmNob3JZLHRhcmdldFg6dC50cmFuc2Zvcm0udGFyZ2V0WCx0YXJnZXRZOnQudHJhbnNmb3JtLnRhcmdldFksc2NhbGU6dC50cmFuc2Zvcm0uc2NhbGUscm90YXRlOnQudHJhbnNmb3JtLnJvdGF0ZX0pfSkpLF8uZWFjaCgoZnVuY3Rpb24odCl7RltnKHQpXT17eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX0sdC50cmFuc2Zvcm0mJihGW2codCldLnRyYW5zZm9ybT17dGV4dFg6dC50cmFuc2Zvcm0udGV4dFgsdGV4dFk6dC50cmFuc2Zvcm0udGV4dFksYW5jaG9yWDp0LnRyYW5zZm9ybS5hbmNob3JYLGFuY2hvclk6dC50cmFuc2Zvcm0uYW5jaG9yWSx0YXJnZXRYOnQudHJhbnNmb3JtLnRhcmdldFgsdGFyZ2V0WTp0LnRyYW5zZm9ybS50YXJnZXRZLHNjYWxlOnQudHJhbnNmb3JtLnNjYWxlLHJvdGF0ZTp0LnRyYW5zZm9ybS5yb3RhdGV9KSwhRCYmaS5pc0VudHJ5KHQpJiYoRD10KX0pKSksQj1wKHQsZSx5LF8se3dpZHRoOlMsaGVpZ2h0OkUsdmlld1g6cSx2aWV3WTpILHBhdGhTbGljZTpmdW5jdGlvbih0KXt2YXIgZT1xKHQueDApLHI9cSh0LngxKSxuPUgodC55MCksaT1IKHQueTEpLGE9ci1lLG89aS1uO2lmKCFhfHwhbylyZXR1cm4iIjtyZXR1cm4iTSIrWihlLG4rMCkrIkwiK1ooci0wLG4pKyJMIitaKHIsaS0wKSsiTCIrWihlKzAsaSkrIloifSx0b01vdmVJbnNpZGVTbGljZTokLHByZXZFbnRyeTpELG1ha2VVcGRhdGVTbGljZUludGVycG9sYXRvcjpldCxtYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcjpydCxoYW5kbGVTbGljZXNFeGl0Om50LGhhc1RyYW5zaXRpb246VCxzdHJUcmFuc2Zvcm06aXR9KSxtLnBhdGhiYXIudmlzaWJsZT9kKHQsZSx5LGIse2JhckRpZlk6UCx3aWR0aDpDLGhlaWdodDpMLHZpZXdYOlcsdmlld1k6WCxwYXRoU2xpY2U6ZnVuY3Rpb24odCl7dmFyIGU9VyhNYXRoLm1heChNYXRoLm1pbih0LngwLHQueDApLDApKSxyPVcoTWF0aC5taW4oTWF0aC5tYXgodC54MSx0LngxKSxDKSksbj1YKHQueTApLGk9WCh0LnkxKSxhPUwvMixvPXt9LHM9e307by54PWUscy54PXIsby55PXMueT0obitpKS8yO3ZhciBsPXt4OmUseTpufSxjPXt4OnIseTpufSx1PXt4OnIseTppfSxmPXt4OmUseTppfTtyZXR1cm4iPiI9PT1RPyhsLngtPWEsYy54LT1hLHUueC09YSxmLngtPWEpOiIvIj09PVE/KHUueC09YSxmLngtPWEsby54LT1hLzIscy54LT1hLzIpOiJcXCI9PT1RPyhsLngtPWEsYy54LT1hLG8ueC09YS8yLHMueC09YS8yKToiPCI9PT1RJiYoby54LT1hLHMueC09YSksSyhsKSxLKGYpLEsobyksSyhjKSxLKHUpLEsocyksIk0iK1oobC54LGwueSkrIkwiK1ooYy54LGMueSkrIkwiK1oocy54LHMueSkrIkwiK1oodS54LHUueSkrIkwiK1ooZi54LGYueSkrIkwiK1ooby54LG8ueSkrIloifSx0b01vdmVJbnNpZGVTbGljZTokLG1ha2VVcGRhdGVTbGljZUludGVycG9sYXRvcjpldCxtYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcjpydCxoYW5kbGVTbGljZXNFeGl0Om50LGhhc1RyYW5zaXRpb246VCxzdHJUcmFuc2Zvcm06aXR9KTpiLnJlbW92ZSgpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGw9dC5fZnVsbExheW91dCxjPWwuX3RyZWVtYXBsYXllcixoPSFyOyh1KCJ0cmVlbWFwIixsKSwobz1jLnNlbGVjdEFsbCgiZy50cmFjZS50cmVlbWFwIikuZGF0YShlLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidHJhY2UiLCEwKS5jbGFzc2VkKCJ0cmVlbWFwIiwhMCksby5vcmRlcigpLCFsLnVuaWZvcm10ZXh0Lm1vZGUmJmkuaGFzVHJhbnNpdGlvbihyKSk/KGEmJihzPWEoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtzJiZzKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtzJiZzKCl9KSkuZWFjaCgoZnVuY3Rpb24oKXtjLnNlbGVjdEFsbCgiZy50cmFjZSIpLmVhY2goKGZ1bmN0aW9uKGUpe20odCxlLHRoaXMscil9KSl9KSkpOihvLmVhY2goKGZ1bmN0aW9uKGUpe20odCxlLHRoaXMscil9KSksbC51bmlmb3JtdGV4dC5tb2RlJiZmKHQsbC5fdHJlZW1hcGxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIiksInRyZWVtYXAiKSk7aCYmby5leGl0KCkucmVtb3ZlKCl9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9iYXIvY29uc3RhbnRzIjo5MjMsIi4uL2Jhci9wbG90Ijo5MzIsIi4uL2Jhci9zdHlsZSI6OTM1LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzcsIi4uL3N1bmJ1cnN0L2hlbHBlcnMiOjEzMDUsIi4vY29uc3RhbnRzIjoxMzI4LCIuL2RyYXdfYW5jZXN0b3JzIjoxMzMwLCIuL2RyYXdfZGVzY2VuZGFudHMiOjEzMzEsZDM6MTY5fV0sMTMzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi9zdW5idXJzdC9oZWxwZXJzIikscz10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dDtmdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBzLGwsYz0obnx8e30pLmhvdmVyZWQsdT1lLmRhdGEuZGF0YSxmPXUuaSxoPXUuY29sb3IscD1vLmlzSGllcmFyY2h5Um9vdChlKSxkPTE7aWYoYylzPXIuX2hvdmVyZWQubWFya2VyLmxpbmUuY29sb3IsbD1yLl9ob3ZlcmVkLm1hcmtlci5saW5lLndpZHRoO2Vsc2UgaWYocCYmaD09PXIucm9vdC5jb2xvcilkPTEwMCxzPSJyZ2JhKDAsMCwwLDApIixsPTA7ZWxzZSBpZihzPWEuY2FzdE9wdGlvbihyLGYsIm1hcmtlci5saW5lLmNvbG9yIil8fGkuZGVmYXVsdExpbmUsbD1hLmNhc3RPcHRpb24ocixmLCJtYXJrZXIubGluZS53aWR0aCIpfHwwLCFyLl9oYXNDb2xvcnNjYWxlJiYhZS5vblBhdGhiYXIpe3ZhciBnPXIubWFya2VyLmRlcHRoZmFkZTtpZihnKXt2YXIgbSx2PWkuY29tYmluZShpLmFkZE9wYWNpdHkoci5fYmFja2dyb3VuZENvbG9yLC43NSksaCk7aWYoITA9PT1nKXt2YXIgeT1vLmdldE1heERlcHRoKHIpO209aXNGaW5pdGUoeSk/by5pc0xlYWYoZSk/MDpyLl9tYXhWaXNpYmxlTGF5ZXJzLShlLmRhdGEuZGVwdGgtci5fZW50cnlEZXB0aCk6ZS5kYXRhLmhlaWdodCsxfWVsc2UgbT1lLmRhdGEuZGVwdGgtci5fZW50cnlEZXB0aCxyLl9hdFJvb3RMZXZlbHx8bSsrO2lmKG0+MClmb3IodmFyIHg9MDt4PG07eCsrKXt2YXIgYj0uNSp4L207aD1pLmNvbWJpbmUoaS5hZGRPcGFjaXR5KHYsYiksaCl9fX10LnN0eWxlKCJzdHJva2Utd2lkdGgiLGwpLmNhbGwoaS5maWxsLGgpLmNhbGwoaS5zdHJva2Uscykuc3R5bGUoIm9wYWNpdHkiLGQpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fdHJlZW1hcGxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7cyh0LGUsInRyZWVtYXAiKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZTtlLnN0eWxlKCJvcGFjaXR5IixyLm9wYWNpdHkpLGUuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5jYWxsKGwsdCxyLHtob3ZlcmVkOiExfSl9KSl9KSl9LHN0eWxlT25lOmx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vbGliIjo3NzgsIi4uL2Jhci91bmlmb3JtX3RleHQiOjkzNywiLi4vc3VuYnVyc3QvaGVscGVycyI6MTMwNSxkMzoxNjl9XSwxMzM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2JveC9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3k6bi55LHg6bi54LHgwOm4ueDAseTA6bi55MCxuYW1lOmkoe30sbi5uYW1lLHt9KSxvcmllbnRhdGlvbjppKHt9LG4ub3JpZW50YXRpb24se30pLGJhbmR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToiY2FsYyJ9LHNjYWxlZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNjYWxlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsid2lkdGgiLCJjb3VudCJdLGRmbHQ6IndpZHRoIixlZGl0VHlwZToiY2FsYyJ9LHNwYW5tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzb2Z0IiwiaGFyZCIsIm1hbnVhbCJdLGRmbHQ6InNvZnQiLGVkaXRUeXBlOiJjYWxjIn0sc3Bhbjp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifV0sZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LGZpbGxjb2xvcjpuLmZpbGxjb2xvcixwb2ludHM6aSh7fSxuLmJveHBvaW50cyx7fSksaml0dGVyOmkoe30sbi5qaXR0ZXIse30pLHBvaW50cG9zOmkoe30sbi5wb2ludHBvcyx7fSksd2lkdGg6aSh7fSxuLndpZHRoLHt9KSxtYXJrZXI6bi5tYXJrZXIsdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6bi5ob3ZlcnRlbXBsYXRlLGJveDp7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjI1LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LG1lYW5saW5lOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJvdGgiLCJwb3NpdGl2ZSIsIm5lZ2F0aXZlIl0sZGZsdDoiYm90aCIsZWRpdFR5cGU6ImNhbGMifSxvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4uYWxpZ25tZW50Z3JvdXAsc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZCxob3Zlcm9uOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJ2aW9saW5zIiwicG9pbnRzIiwia2RlIl0sZGZsdDoidmlvbGlucytwb2ludHMra2RlIixleHRyYXM6WyJhbGwiXSxlZGl0VHlwZToic3R5bGUifX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY4LCIuLi9ib3gvYXR0cmlidXRlcyI6OTQ2fV0sMTMzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9ib3gvY2FsYyIpLG89dCgiLi9oZWxwZXJzIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCxlLHIpe3ZhciBpPWUubWF4LWUubWluO2lmKCFpKXJldHVybiB0LmJhbmR3aWR0aD90LmJhbmR3aWR0aDowO2lmKHQuYmFuZHdpZHRoKXJldHVybiBNYXRoLm1heCh0LmJhbmR3aWR0aCxpLzFlNCk7dmFyIGE9ci5sZW5ndGgsbz1uLnN0ZGV2KHIsYS0xLGUubWVhbik7cmV0dXJuIE1hdGgubWF4KGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMS4wNTkqTWF0aC5taW4oZSxyLzEuMzQ5KSpNYXRoLnBvdyh0LC0uMil9KGEsbyxlLnEzLWUucTEpLGkvMTAwKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBhLG89dC5zcGFubW9kZSxsPXQuc3Bhbnx8W10sYz1bZS5taW4sZS5tYXhdLHU9W2UubWluLTIqbixlLm1heCsyKm5dO2Z1bmN0aW9uIGYobil7dmFyIGk9bFtuXSxhPSJtdWx0aWNhdGVnb3J5Ij09PXIudHlwZT9yLnIyYyhpKTpyLmQyYyhpLDAsdFtlLnZhbExldHRlcisiY2FsZW5kYXIiXSk7cmV0dXJuIGE9PT1zP3Vbbl06YX12YXIgaD17dHlwZToibGluZWFyIixyYW5nZTphPSJzb2Z0Ij09PW8/dToiaGFyZCI9PT1vP2M6W2YoMCksZigxKV19O3JldHVybiBpLnNldENvbnZlcnQoaCksaC5jbGVhblJhbmdlKCksYX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1hKHQsZSk7aWYoclswXS50LmVtcHR5KXJldHVybiByO2Zvcih2YXIgcz10Ll9mdWxsTGF5b3V0LHU9aS5nZXRGcm9tSWQodCxlWyJoIj09PWUub3JpZW50YXRpb24/InhheGlzIjoieWF4aXMiXSksZj0xLzAsaD0tMS8wLHA9MCxkPTAsZz0wO2c8ci5sZW5ndGg7ZysrKXt2YXIgbT1yW2ddLHY9bS5wdHMubWFwKG8uZXh0cmFjdFZhbCkseT1tLmJhbmR3aWR0aD1sKGUsbSx2KSx4PW0uc3Bhbj1jKGUsbSx1LHkpO2lmKG0ubWluPT09bS5tYXgmJjA9PT15KXg9bS5zcGFuPVttLm1pbixtLm1heF0sbS5kZW5zaXR5PVt7djoxLHQ6eFswXX1dLG0uYmFuZHdpZHRoPXkscD1NYXRoLm1heChwLDEpO2Vsc2V7dmFyIGI9eFsxXS14WzBdLF89TWF0aC5jZWlsKGIvKHkvMykpLHc9Yi9fO2lmKCFpc0Zpbml0ZSh3KXx8IWlzRmluaXRlKF8pKXJldHVybiBuLmVycm9yKCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGNvbXB1dGluZyB0aGUgdmlvbGluIHNwYW4iKSxyWzBdLnQuZW1wdHk9ITAscjt2YXIgVD1vLm1ha2VLREUobSxlLHYpO20uZGVuc2l0eT1uZXcgQXJyYXkoXyk7Zm9yKHZhciBrPTAsTT14WzBdO008eFsxXSt3LzI7aysrLE0rPXcpe3ZhciBBPVQoTSk7bS5kZW5zaXR5W2tdPXt2OkEsdDpNfSxwPU1hdGgubWF4KHAsQSl9fWQ9TWF0aC5tYXgoZCx2Lmxlbmd0aCksZj1NYXRoLm1pbihmLHhbMF0pLGg9TWF0aC5tYXgoaCx4WzFdKX12YXIgUz1pLmZpbmRFeHRyZW1lcyh1LFtmLGhdLHtwYWRkZWQ6ITB9KTtpZihlLl9leHRyZW1lc1t1Ll9pZF09UyxlLndpZHRoKXJbMF0udC5tYXhLREU9cDtlbHNle3ZhciBFPXMuX3Zpb2xpblNjYWxlR3JvdXBTdGF0cyxDPWUuc2NhbGVncm91cCxMPUVbQ107TD8oTC5tYXhLREU9TWF0aC5tYXgoTC5tYXhLREUscCksTC5tYXhDb3VudD1NYXRoLm1heChMLm1heENvdW50LGQpKTpFW0NdPXttYXhLREU6cCxtYXhDb3VudDpkfX1yZXR1cm4gclswXS50LmxhYmVscy5rZGU9bi5fKHQsImtkZToiKSxyfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uLy4uL2xpYiI6Nzc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi9ib3gvY2FsYyI6OTQ3LCIuL2hlbHBlcnMiOjEzNDJ9XSwxMzQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2JveC9jcm9zc190cmFjZV9jYWxjIikuc2V0UG9zaXRpb25PZmZzZXQsaT1bInYiLCJoIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY2FsY2RhdGEsYT1lLnhheGlzLG89ZS55YXhpcyxzPTA7czxpLmxlbmd0aDtzKyspe2Zvcih2YXIgbD1pW3NdLGM9ImgiPT09bD9vOmEsdT1bXSxmPTA7ZjxyLmxlbmd0aDtmKyspe3ZhciBoPXJbZl0scD1oWzBdLnQsZD1oWzBdLnRyYWNlOyEwIT09ZC52aXNpYmxlfHwidmlvbGluIiE9PWQudHlwZXx8cC5lbXB0eXx8ZC5vcmllbnRhdGlvbiE9PWx8fGQueGF4aXMhPT1hLl9pZHx8ZC55YXhpcyE9PW8uX2lkfHx1LnB1c2goZil9bigidmlvbGluIix0LHUsYyl9fX0seyIuLi9ib3gvY3Jvc3NfdHJhY2VfY2FsYyI6OTQ4fV0sMTM0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uL2JveC9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1mdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlMih0LGUsbyxyLGkpfWlmKGEuaGFuZGxlU2FtcGxlRGVmYXVsdHModCxlLGwscyksITEhPT1lLnZpc2libGUpe2woImJhbmR3aWR0aCIpLGwoInNpZGUiKSxsKCJ3aWR0aCIpfHwobCgic2NhbGVncm91cCIsZS5uYW1lKSxsKCJzY2FsZW1vZGUiKSk7dmFyIHUsZj1sKCJzcGFuIik7QXJyYXkuaXNBcnJheShmKSYmKHU9Im1hbnVhbCIpLGwoInNwYW5tb2RlIix1KTt2YXIgaD1sKCJsaW5lLmNvbG9yIiwodC5tYXJrZXJ8fHt9KS5jb2xvcnx8cikscD1sKCJsaW5lLndpZHRoIiksZD1sKCJmaWxsY29sb3IiLGkuYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsLjUpKTthLmhhbmRsZVBvaW50c0RlZmF1bHRzKHQsZSxsLHtwcmVmaXg6IiJ9KTt2YXIgZz1jKCJib3gud2lkdGgiKSxtPWMoImJveC5maWxsY29sb3IiLGQpLHY9YygiYm94LmxpbmUuY29sb3IiLGgpLHk9YygiYm94LmxpbmUud2lkdGgiLHApO2woImJveC52aXNpYmxlIixCb29sZWFuKGd8fG18fHZ8fHkpKXx8KGUuYm94PXt2aXNpYmxlOiExfSk7dmFyIHg9YygibWVhbmxpbmUuY29sb3IiLGgpLGI9YygibWVhbmxpbmUud2lkdGgiLHApO2woIm1lYW5saW5lLnZpc2libGUiLEJvb2xlYW4oeHx8YikpfHwoZS5tZWFubGluZT17dmlzaWJsZTohMX0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9saWIiOjc3OCwiLi4vYm94L2RlZmF1bHRzIjo5NDksIi4vYXR0cmlidXRlcyI6MTMzOH1dLDEzNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gMS9NYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLmV4cCgtLjUqdCp0KX07ci5tYWtlS0RFPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLmxlbmd0aCxhPWksbz10LmJhbmR3aWR0aCxzPTEvKG4qbyk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLGk9MDtpPG47aSsrKWUrPWEoKHQtcltpXSkvbyk7cmV0dXJuIHMqZX19LHIuZ2V0UG9zaXRpb25PbktkZVBhdGg9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGE7ImgiPT09ZS5vcmllbnRhdGlvbj8oaT0ieSIsYT0ieCIpOihpPSJ4IixhPSJ5Iik7dmFyIG89bi5maW5kUG9pbnRPblBhdGgodC5wYXRoLHIsYSx7cGF0aExlbmd0aDp0LnBhdGhMZW5ndGh9KSxzPXQucG9zQ2VudGVyUHgsbD1vW2ldO3JldHVybltsLCJib3RoIj09PWUuc2lkZT8yKnMtbDpzXX0sci5nZXRLZGVWYWx1ZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5wdHMubWFwKHIuZXh0cmFjdFZhbCk7cmV0dXJuIHIubWFrZUtERSh0LGUsaSkobikvdC5wb3NEZW5zaXR5U2NhbGV9LHIuZXh0cmFjdFZhbD1mdW5jdGlvbih0KXtyZXR1cm4gdC52fX0seyIuLi8uLi9saWIiOjc3OH1dLDEzNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vYm94L2hvdmVyIiksbz10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsKXt2YXIgYyx1LGY9dC5jZCxoPWZbMF0udHJhY2UscD1oLmhvdmVyb24sZD0tMSE9PXAuaW5kZXhPZigidmlvbGlucyIpLGc9LTEhPT1wLmluZGV4T2YoImtkZSIpLG09W107aWYoZHx8Zyl7dmFyIHY9YS5ob3Zlck9uQm94ZXModCxlLHIscyk7aWYoZyYmdi5sZW5ndGg+MCl7dmFyIHkseCxiLF8sdyxUPXQueGEsaz10LnlhOyJoIj09PWgub3JpZW50YXRpb24/KHc9ZSx5PSJ5IixiPWsseD0ieCIsXz1UKToodz1yLHk9IngiLGI9VCx4PSJ5IixfPWspO3ZhciBNPWZbdC5pbmRleF07aWYodz49TS5zcGFuWzBdJiZ3PD1NLnNwYW5bMV0pe3ZhciBBPW4uZXh0ZW5kRmxhdCh7fSx0KSxTPV8uYzJwKHcsITApLEU9by5nZXRLZGVWYWx1ZShNLGgsdyksQz1vLmdldFBvc2l0aW9uT25LZGVQYXRoKE0saCxTKSxMPWIuX29mZnNldCxJPWIuX2xlbmd0aDtBW3krIjAiXT1DWzBdLEFbeSsiMSJdPUNbMV0sQVt4KyIwIl09QVt4KyIxIl09UyxBW3grIkxhYmVsIl09eCsiOiAiK2kuaG92ZXJMYWJlbFRleHQoXyx3KSsiLCAiK2ZbMF0udC5sYWJlbHMua2RlKyIgIitFLnRvRml4ZWQoMyksQS5zcGlrZURpc3RhbmNlPXZbMF0uc3Bpa2VEaXN0YW5jZTt2YXIgUD15KyJTcGlrZSI7QVtQXT12WzBdW1BdLHZbMF0uc3Bpa2VEaXN0YW5jZT12b2lkIDAsdlswXVtQXT12b2lkIDAsQS5ob3ZlcnRlbXBsYXRlPSExLG0ucHVzaChBKSwodT17c3Ryb2tlOnQuY29sb3J9KVt5KyIxIl09bi5jb25zdHJhaW4oTCtDWzBdLEwsTCtJKSx1W3krIjIiXT1uLmNvbnN0cmFpbihMK0NbMV0sTCxMK0kpLHVbeCsiMSJdPXVbeCsiMiJdPV8uX29mZnNldCtTfX1kJiYobT1tLmNvbmNhdCh2KSl9LTEhPT1wLmluZGV4T2YoInBvaW50cyIpJiYoYz1hLmhvdmVyT25Qb2ludHModCxlLHIpKTt2YXIgej1sLnNlbGVjdEFsbCgiLnZpb2xpbmxpbmUtIitoLnVpZCkuZGF0YSh1P1swXTpbXSk7cmV0dXJuIHouZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJ2aW9saW5saW5lLSIraC51aWQsITApLmF0dHIoInN0cm9rZS13aWR0aCIsMS41KSx6LmV4aXQoKS5yZW1vdmUoKSx6LmF0dHIodSksImNsb3Nlc3QiPT09cz9jP1tjXTptOmM/KG0ucHVzaChjKSxtKTptfX0seyIuLi8uLi9saWIiOjc3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vYm94L2hvdmVyIjo5NTEsIi4vaGVscGVycyI6MTM0Mn1dLDEzNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vYm94L2RlZmF1bHRzIikuY3Jvc3NUcmFjZURlZmF1bHRzLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vYm94L3NlbGVjdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJ2aW9saW4iLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzeW1ib2xzIiwib3JpZW50ZWQiLCJib3gtdmlvbGluIiwic2hvd0xlZ2VuZCIsInZpb2xpbkxheW91dCIsInpvb21TY2FsZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuLi9ib3gvZGVmYXVsdHMiOjk0OSwiLi4vYm94L3NlbGVjdCI6OTU2LCIuLi9zY2F0dGVyL3N0eWxlIjoxMjExLCIuL2F0dHJpYnV0ZXMiOjEzMzgsIi4vY2FsYyI6MTMzOSwiLi9jcm9zc190cmFjZV9jYWxjIjoxMzQwLCIuL2RlZmF1bHRzIjoxMzQxLCIuL2hvdmVyIjoxMzQzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMzQ1LCIuL2xheW91dF9kZWZhdWx0cyI6MTM0NiwiLi9wbG90IjoxMzQ3LCIuL3N0eWxlIjoxMzQ4fV0sMTM0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt2aW9saW5tb2RlOmkoe30sbi5ib3htb2RlLHt9KSx2aW9saW5nYXA6aSh7fSxuLmJveGdhcCx7fSksdmlvbGluZ3JvdXBnYXA6aSh7fSxuLmJveGdyb3VwZ2FwLHt9KX19LHsiLi4vLi4vbGliIjo3NzgsIi4uL2JveC9sYXlvdXRfYXR0cmlidXRlcyI6OTUzfV0sMTM0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EuX3N1cHBseSh0LGUsciwoZnVuY3Rpb24ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX0pLCJ2aW9saW4iKX19LHsiLi4vLi4vbGliIjo3NzgsIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiOjk1NCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTM0NX1dLDEzNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi9ib3gvcGxvdCIpLHM9dCgiLi4vc2NhdHRlci9saW5lX3BvaW50cyIpLGw9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuX2Z1bGxMYXlvdXQsZj1lLnhheGlzLGg9ZS55YXhpcztmdW5jdGlvbiBwKHQpe3ZhciBlPXModCx7eGF4aXM6Zix5YXhpczpoLGNvbm5lY3RHYXBzOiEwLGJhc2VUb2xlcmFuY2U6Ljc1LHNoYXBlOiJzcGxpbmUiLHNpbXBsaWZ5OiEwLGxpbmVhcml6ZWQ6ITB9KTtyZXR1cm4gYS5zbW9vdGhvcGVuKGVbMF0sMSl9aS5tYWtlVHJhY2VHcm91cHMoYyxyLCJ0cmFjZSB2aW9saW5zIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT10WzBdLHM9YS50LGM9YS50cmFjZTtpZighMCE9PWMudmlzaWJsZXx8cy5lbXB0eSlyLnJlbW92ZSgpO2Vsc2V7dmFyIGQ9cy5iUG9zLGc9cy5iZFBvcyxtPWVbcy52YWxMZXR0ZXIrImF4aXMiXSx2PWVbcy5wb3NMZXR0ZXIrImF4aXMiXSx5PSJib3RoIj09PWMuc2lkZSx4PXl8fCJwb3NpdGl2ZSI9PT1jLnNpZGUsYj15fHwibmVnYXRpdmUiPT09Yy5zaWRlLF89ci5zZWxlY3RBbGwoInBhdGgudmlvbGluIikuZGF0YShpLmlkZW50aXR5KTtfLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJjbGFzcyIsInZpb2xpbiIpLF8uZXhpdCgpLnJlbW92ZSgpLF8uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscixpLGEsbyxsLGYsaCxfPW4uc2VsZWN0KHRoaXMpLHc9dC5kZW5zaXR5LFQ9dy5sZW5ndGgsaz12LmMybCh0LnBvcytkLCEwKSxNPXYubDJwKGspO2lmKGMud2lkdGgpZT1zLm1heEtERS9nO2Vsc2V7dmFyIEE9dS5fdmlvbGluU2NhbGVHcm91cFN0YXRzW2Muc2NhbGVncm91cF07ZT0iY291bnQiPT09Yy5zY2FsZW1vZGU/QS5tYXhLREUvZyooQS5tYXhDb3VudC90LnB0cy5sZW5ndGgpOkEubWF4S0RFL2d9aWYoeCl7Zm9yKGY9bmV3IEFycmF5KFQpLG89MDtvPFQ7bysrKShoPWZbb109e30pW3MucG9zTGV0dGVyXT1rK3dbb10udi9lLGhbcy52YWxMZXR0ZXJdPW0uYzJsKHdbb10udCwhMCk7cj1wKGYpfWlmKGIpe2ZvcihmPW5ldyBBcnJheShUKSxsPTAsbz1ULTE7bDxUO2wrKyxvLS0pKGg9ZltsXT17fSlbcy5wb3NMZXR0ZXJdPWstd1tvXS52L2UsaFtzLnZhbExldHRlcl09bS5jMmwod1tvXS50LCEwKTtpPXAoZil9aWYoeSlhPXIrIkwiK2kuc3Vic3RyKDEpKyJaIjtlbHNle3ZhciBTPVtNLG0uYzJwKHdbMF0udCldLEU9W00sbS5jMnAod1tULTFdLnQpXTsiaCI9PT1jLm9yaWVudGF0aW9uJiYoUy5yZXZlcnNlKCksRS5yZXZlcnNlKCkpLGE9eD8iTSIrUysiTCIrci5zdWJzdHIoMSkrIkwiK0U6Ik0iK0UrIkwiK2kuc3Vic3RyKDEpKyJMIitTfV8uYXR0cigiZCIsYSksdC5wb3NDZW50ZXJQeD1NLHQucG9zRGVuc2l0eVNjYWxlPWUqZyx0LnBhdGg9Xy5ub2RlKCksdC5wYXRoTGVuZ3RoPXQucGF0aC5nZXRUb3RhbExlbmd0aCgpLyh5PzI6MSl9KSk7dmFyIHcsVCxrLE09Yy5ib3gsQT1NLndpZHRoLFM9KE0ubGluZXx8e30pLndpZHRoO3k/KHc9ZypBLFQ9MCk6eD8odz1bMCxnKkEvMl0sVD1TKnt4OjEseTotMX1bcy5wb3NMZXR0ZXJdKToodz1bZypBLzIsMF0sVD1TKnt4Oi0xLHk6MX1bcy5wb3NMZXR0ZXJdKSxvLnBsb3RCb3hBbmRXaGlza2VycyhyLHtwb3M6dix2YWw6bX0sYyx7YlBvczpkLGJkUG9zOncsYlBvc1B4T2Zmc2V0OlR9KSxvLnBsb3RCb3hNZWFuKHIse3Bvczp2LHZhbDptfSxjLHtiUG9zOmQsYmRQb3M6dyxiUG9zUHhPZmZzZXQ6VH0pLCFjLmJveC52aXNpYmxlJiZjLm1lYW5saW5lLnZpc2libGUmJihrPWkuaWRlbnRpdHkpO3ZhciBFPXIuc2VsZWN0QWxsKCJwYXRoLm1lYW5saW5lIikuZGF0YShrfHxbXSk7RS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibWVhbmxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLEUuZXhpdCgpLnJlbW92ZSgpLEUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bS5jMnAodC5tZWFuLCEwKSxyPWwuZ2V0UG9zaXRpb25PbktkZVBhdGgodCxjLGUpO24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJoIj09PWMub3JpZW50YXRpb24/Ik0iK2UrIiwiK3JbMF0rIlYiK3JbMV06Ik0iK3JbMF0rIiwiK2UrIkgiK3JbMV0pfSkpLG8ucGxvdFBvaW50cyhyLHt4OmYseTpofSxjLHMpfX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2xpYiI6Nzc4LCIuLi9ib3gvcGxvdCI6OTU1LCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzIjoxMjAxLCIuL2hlbHBlcnMiOjEzNDIsZDM6MTY5fV0sMTM0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlUG9pbnRzO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UudmlvbGlucyIpO2Uuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLGUuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXS50cmFjZSxvPW4uc2VsZWN0KHRoaXMpLHM9ci5ib3h8fHt9LGw9cy5saW5lfHx7fSxjPXIubWVhbmxpbmV8fHt9LHU9Yy53aWR0aDtvLnNlbGVjdEFsbCgicGF0aC52aW9saW4iKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLmxpbmUud2lkdGgrInB4IikuY2FsbChpLnN0cm9rZSxyLmxpbmUuY29sb3IpLmNhbGwoaS5maWxsLHIuZmlsbGNvbG9yKSxvLnNlbGVjdEFsbCgicGF0aC5ib3giKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixsLndpZHRoKyJweCIpLmNhbGwoaS5zdHJva2UsbC5jb2xvcikuY2FsbChpLmZpbGwscy5maWxsY29sb3IpO3ZhciBmPXsic3Ryb2tlLXdpZHRoIjp1KyJweCIsInN0cm9rZS1kYXNoYXJyYXkiOjIqdSsicHgsIit1KyJweCJ9O28uc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5zdHlsZShmKS5jYWxsKGkuc3Ryb2tlLGMuY29sb3IpLG8uc2VsZWN0QWxsKCJwYXRoLm1lYW5saW5lIikuc3R5bGUoZikuY2FsbChpLnN0cm9rZSxjLmNvbG9yKSxhKG8scix0KX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi9zY2F0dGVyL3N0eWxlIjoxMjExLGQzOjE2OX1dLDEzNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2lzb3N1cmZhY2UvYXR0cmlidXRlcyIpLGE9dCgiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxjPWUuZXhwb3J0cz1sKHMoe3g6aS54LHk6aS55LHo6aS56LHZhbHVlOmkudmFsdWUsaXNvbWluOmkuaXNvbWluLGlzb21heDppLmlzb21heCxzdXJmYWNlOmkuc3VyZmFjZSxzcGFjZWZyYW1lOntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19LHNsaWNlczppLnNsaWNlcyxjYXBzOmkuY2Fwcyx0ZXh0OmkudGV4dCxob3ZlcnRleHQ6aS5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTppLmhvdmVydGVtcGxhdGV9LG4oIiIse2NvbG9yQXR0cjoiYHZhbHVlYCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb2xvcmJhcjppLmNvbG9yYmFyLG9wYWNpdHk6aS5vcGFjaXR5LG9wYWNpdHlzY2FsZTphLm9wYWNpdHlzY2FsZSxsaWdodHBvc2l0aW9uOmkubGlnaHRwb3NpdGlvbixsaWdodGluZzppLmxpZ2h0aW5nLGZsYXRzaGFkaW5nOmkuZmxhdHNoYWRpbmcsY29udG91cjppLmNvbnRvdXIsaG92ZXJpbmZvOnMoe30sby5ob3ZlcmluZm8pLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0pLCJjYWxjIiwibmVzdGVkIik7Yy54LmVkaXRUeXBlPWMueS5lZGl0VHlwZT1jLnouZWRpdFR5cGU9Yy52YWx1ZS5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyIsYy50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjUwLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgxMCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODI0LCIuLi9pc29zdXJmYWNlL2F0dHJpYnV0ZXMiOjExMjMsIi4uL3N1cmZhY2UvYXR0cmlidXRlcyI6MTMxMX1dLDEzNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtbWVzaDNkIiksaT10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLGE9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMscz10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKSxsPXQoIi4uL2lzb3N1cmZhY2UvY29udmVydCIpLmZpbmROZWFyZXN0T25BeGlzLGM9dCgiLi4vaXNvc3VyZmFjZS9jb252ZXJ0IikuZ2VuZXJhdGVJc29NZXNoZXM7ZnVuY3Rpb24gdSh0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5tZXNoPWUsdGhpcy5uYW1lPSIiLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9ITF9dmFyIGY9dS5wcm90b3R5cGU7Zi5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmRhdGEuaW5kZXgscj10aGlzLmRhdGEuX21lc2hYW2VdLG49dGhpcy5kYXRhLl9tZXNoWVtlXSxpPXRoaXMuZGF0YS5fbWVzaFpbZV0sYT10aGlzLmRhdGEuX1lzLmxlbmd0aCxvPXRoaXMuZGF0YS5fWnMubGVuZ3RoLHM9bChyLHRoaXMuZGF0YS5fWHMpLmlkLGM9bChuLHRoaXMuZGF0YS5fWXMpLmlkLHU9bChpLHRoaXMuZGF0YS5fWnMpLmlkLGY9dC5pbmRleD11K28qYytvKmEqczt0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLl9tZXNoWFtmXSx0aGlzLmRhdGEuX21lc2hZW2ZdLHRoaXMuZGF0YS5fbWVzaFpbZl0sdGhpcy5kYXRhLl92YWx1ZVtmXV07dmFyIGg9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkoaCkmJnZvaWQgMCE9PWhbZl0/dC50ZXh0TGFiZWw9aFtmXTpoJiYodC50ZXh0TGFiZWw9aCksITB9fSxmLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7ZnVuY3Rpb24gbih0LGUscixuKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmQybChlLDAsbikqcn0pKX10aGlzLmRhdGE9Yyh0KTt2YXIgbD17cG9zaXRpb25zOnMobihyLnhheGlzLHQuX21lc2hYLGUuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxuKHIueWF4aXMsdC5fbWVzaFksZS5kYXRhU2NhbGVbMV0sdC55Y2FsZW5kYXIpLG4oci56YXhpcyx0Ll9tZXNoWixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpLGNlbGxzOnModC5fbWVzaEksdC5fbWVzaEosdC5fbWVzaEspLGxpZ2h0UG9zaXRpb246W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSxhbWJpZW50OnQubGlnaHRpbmcuYW1iaWVudCxkaWZmdXNlOnQubGlnaHRpbmcuZGlmZnVzZSxzcGVjdWxhcjp0LmxpZ2h0aW5nLnNwZWN1bGFyLHJvdWdobmVzczp0LmxpZ2h0aW5nLnJvdWdobmVzcyxmcmVzbmVsOnQubGlnaHRpbmcuZnJlc25lbCx2ZXJ0ZXhOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uLGZhY2VOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbixvcGFjaXR5OnQub3BhY2l0eSxvcGFjaXR5c2NhbGU6dC5vcGFjaXR5c2NhbGUsY29udG91ckVuYWJsZTp0LmNvbnRvdXIuc2hvdyxjb250b3VyQ29sb3I6YSh0LmNvbnRvdXIuY29sb3IpLnNsaWNlKDAsMyksY29udG91cldpZHRoOnQuY29udG91ci53aWR0aCx1c2VGYWNldE5vcm1hbHM6dC5mbGF0c2hhZGluZ30sdT1vKHQpO2wudmVydGV4SW50ZW5zaXR5PXQuX21lc2hJbnRlbnNpdHksbC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3UubWluLHUubWF4XSxsLmNvbG9ybWFwPWkodCksdGhpcy5tZXNoLnVwZGF0ZShsKX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgdSh0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1NSwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6Nzc0LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo4MDIsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODgxLCIuLi9pc29zdXJmYWNlL2NvbnZlcnQiOjExMjUsImdsLW1lc2gzZCI6MzA5fV0sMTM1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vaXNvc3VyZmFjZS9kZWZhdWx0cyIpLnN1cHBseUlzb0RlZmF1bHRzLG89dCgiLi4vc3VyZmFjZS9kZWZhdWx0cyIpLm9wYWNpdHlzY2FsZURlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YSh0LGUscixzLGwpLG8odCxlLHMsbCl9fSx7Ii4uLy4uL2xpYiI6Nzc4LCIuLi9pc29zdXJmYWNlL2RlZmF1bHRzIjoxMTI2LCIuLi9zdXJmYWNlL2RlZmF1bHRzIjoxMzE0LCIuL2F0dHJpYnV0ZXMiOjEzNDl9XSwxMzUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuLi9pc29zdXJmYWNlL2NhbGMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxwbG90OnQoIi4vY29udmVydCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJ2b2x1bWUiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDNkIjo4NzAsIi4uL2lzb3N1cmZhY2UvY2FsYyI6MTEyNCwiLi9hdHRyaWJ1dGVzIjoxMzQ5LCIuL2NvbnZlcnQiOjEzNTAsIi4vZGVmYXVsdHMiOjEzNTF9XSwxMzUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKS5saW5lLGE9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxsPXQoIi4vY29uc3RhbnRzIiksYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtmdW5jdGlvbiBmKHQpe3JldHVybnttYXJrZXI6e2NvbG9yOmMoe30sbi5tYXJrZXIuY29sb3Ise2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLGxpbmU6e2NvbG9yOmMoe30sbi5tYXJrZXIubGluZS5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksd2lkdGg6Yyh7fSxuLm1hcmtlci5saW5lLndpZHRoLHthcnJheU9rOiExLGVkaXRUeXBlOiJzdHlsZSJ9KSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifX1lLmV4cG9ydHM9e21lYXN1cmU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W10sZWRpdFR5cGU6ImNhbGMifSxiYXNlOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0seDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx4cGVyaW9kOm4ueHBlcmlvZCx5cGVyaW9kOm4ueXBlcmlvZCx4cGVyaW9kMDpuLnhwZXJpb2QwLHlwZXJpb2QwOm4ueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDpuLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDpuLnlwZXJpb2RhbGlnbm1lbnQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6byh7fSx7a2V5czpsLmV2ZW50RGF0YUtleXN9KSxob3ZlcmluZm86Yyh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6WyJuYW1lIiwieCIsInkiLCJ0ZXh0IiwiaW5pdGlhbCIsImRlbHRhIiwiZmluYWwiXX0pLHRleHRpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJpbml0aWFsIiwiZGVsdGEiLCJmaW5hbCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMX0sdGV4dHRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90In0se2tleXM6bC5ldmVudERhdGFLZXlzLmNvbmNhdChbImxhYmVsIl0pfSksdGV4dDpuLnRleHQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLGluc2lkZXRleHRhbmNob3I6bi5pbnNpZGV0ZXh0YW5jaG9yLHRleHRhbmdsZTpuLnRleHRhbmdsZSx0ZXh0Zm9udDpuLnRleHRmb250LGluc2lkZXRleHRmb250Om4uaW5zaWRldGV4dGZvbnQsb3V0c2lkZXRleHRmb250Om4ub3V0c2lkZXRleHRmb250LGNvbnN0cmFpbnRleHQ6bi5jb25zdHJhaW50ZXh0LGNsaXBvbmF4aXM6bi5jbGlwb25heGlzLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24sb2Zmc2V0Om4ub2Zmc2V0LHdpZHRoOm4ud2lkdGgsaW5jcmVhc2luZzpmKCksZGVjcmVhc2luZzpmKCksdG90YWxzOmYoKSxjb25uZWN0b3I6e2xpbmU6e2NvbG9yOmMoe30saS5jb2xvcix7ZGZsdDp1LmRlZmF1bHRMaW5lfSksd2lkdGg6Yyh7fSxpLndpZHRoLHtlZGl0VHlwZToicGxvdCJ9KSxkYXNoOmkuZGFzaCxlZGl0VHlwZToicGxvdCJ9LG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNwYW5uaW5nIiwiYmV0d2VlbiJdLGRmbHQ6ImJldHdlZW4iLGVkaXRUeXBlOiJwbG90In0sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sb2Zmc2V0Z3JvdXA6bi5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDpuLmFsaWdubWVudGdyb3VwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2NDMsIi4uLy4uL2xpYi9leHRlbmQiOjc2OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODI0LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo5MDYsIi4uL2Jhci9hdHRyaWJ1dGVzIjo5MjEsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE4NywiLi9jb25zdGFudHMiOjEzNTV9XSwxMzU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIiksYT10KCIuLi8uLi9saWIiKS5tZXJnZUFycmF5LG89dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBsKHQpe3JldHVybiJhIj09PXR8fCJhYnNvbHV0ZSI9PT10fWZ1bmN0aW9uIGModCl7cmV0dXJuInQiPT09dHx8InRvdGFsIj09PXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxmLGgscD1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksZD1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iik7ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1wLm1ha2VDYWxjZGF0YShlLCJ4IiksZj1kLm1ha2VDYWxjZGF0YShlLCJ5IiksdT1pKGUsZCwieSIsZiksaD0hIWUueXBlcmlvZGFsaWdubWVudCk6KHI9ZC5tYWtlQ2FsY2RhdGEoZSwieSIpLGY9cC5tYWtlQ2FsY2RhdGEoZSwieCIpLHU9aShlLHAsIngiLGYpLGg9ISFlLnhwZXJpb2RhbGlnbm1lbnQpO2Zvcih2YXIgZyxtPU1hdGgubWluKHUubGVuZ3RoLHIubGVuZ3RoKSx2PW5ldyBBcnJheShtKSx5PTAseD0hMSxiPTA7YjxtO2IrKyl7dmFyIF89cltiXXx8MCx3PSExOyhyW2JdIT09c3x8YyhlLm1lYXN1cmVbYl0pfHxsKGUubWVhc3VyZVtiXSkpJiZiKzE8bSYmKHJbYisxXSE9PXN8fGMoZS5tZWFzdXJlW2IrMV0pfHxsKGUubWVhc3VyZVtiKzFdKSkmJih3PSEwKTt2YXIgVD12W2JdPXtpOmIscDp1W2JdLHM6XyxyYXdTOl8sY05leHQ6d307bChlLm1lYXN1cmVbYl0pPyh5PVQucyxULmlzU3VtPSEwLFQuZGlyPSJ0b3RhbHMiLFQucz15KTpjKGUubWVhc3VyZVtiXSk/KFQuaXNTdW09ITAsVC5kaXI9InRvdGFscyIsVC5zPXkpOihULmlzU3VtPSExLFQuZGlyPVQucmF3UzwwPyJkZWNyZWFzaW5nIjoiaW5jcmVhc2luZyIsZz1ULnMsVC5zPXkrZyx5Kz1nKSwidG90YWxzIj09PVQuZGlyJiYoeD0hMCksaCYmKHZbYl0ub3JpZ19wPWZbYl0pLGUuaWRzJiYoVC5pZD1TdHJpbmcoZS5pZHNbYl0pKSxULnY9KGUuYmFzZXx8MCkreX1yZXR1cm4gdi5sZW5ndGgmJih2WzBdLmhhc1RvdGFscz14KSxhKGUudGV4dCx2LCJ0eCIpLGEoZS5ob3ZlcnRleHQsdiwiaHR4Iiksbyh2LGUpLHZ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MywiLi4vLi4vbGliIjo3NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjgyNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE4OX1dLDEzNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOlsiaW5pdGlhbCIsImRlbHRhIiwiZmluYWwiXX19LHt9XSwxMzU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuc2V0R3JvdXBQb3NpdGlvbnM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPXQuX2Z1bGxMYXlvdXQsbz10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1lLnhheGlzLGM9ZS55YXhpcyx1PVtdLGY9W10saD1bXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcD1vW2ldOyEwPT09cC52aXNpYmxlJiZwLnhheGlzPT09bC5faWQmJnAueWF4aXM9PT1jLl9pZCYmIndhdGVyZmFsbCI9PT1wLnR5cGUmJihyPXNbaV0sImgiPT09cC5vcmllbnRhdGlvbj9oLnB1c2gocik6Zi5wdXNoKHIpLHUucHVzaChyKSl9dmFyIGQ9e21vZGU6YS53YXRlcmZhbGxtb2RlLG5vcm06YS53YXRlcmZhbGxub3JtLGdhcDphLndhdGVyZmFsbGdhcCxncm91cGdhcDphLndhdGVyZmFsbGdyb3VwZ2FwfTtmb3Iobih0LGwsYyxmLGQpLG4odCxjLGwsaCxkKSxpPTA7aTx1Lmxlbmd0aDtpKyspe3I9dVtpXTtmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIG09cltnXTshMT09PW0uaXNTdW0mJihtLnMwKz0wPT09Zz8wOnJbZy0xXS5zKSxnKzE8ci5sZW5ndGgmJihyW2ddLm5leHRQMD1yW2crMV0ucDAscltnXS5uZXh0UzA9cltnKzFdLnMwKX19fX0seyIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyI6OTI0fV0sMTM1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsYT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVUZXh0LG89dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxsPXQoIi4vYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHU9dCgiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIiksZj11LklOQ1JFQVNJTkcuQ09MT1IsaD11LkRFQ1JFQVNJTkcuQ09MT1I7ZnVuY3Rpb24gcCh0LGUscil7dChlKyIubWFya2VyLmNvbG9yIixyKSx0KGUrIi5tYXJrZXIubGluZS5jb2xvciIsYy5kZWZhdWx0TGluZSksdChlKyIubWFya2VyLmxpbmUud2lkdGgiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pZihvKHQsZSxpLGMpKXtzKHQsZSxpLGMpLGMoIm1lYXN1cmUiKSxjKCJvcmllbnRhdGlvbiIsZS54JiYhZS55PyJoIjoidiIpLGMoImJhc2UiKSxjKCJvZmZzZXQiKSxjKCJ3aWR0aCIpLGMoInRleHQiKSxjKCJob3ZlcnRleHQiKSxjKCJob3ZlcnRlbXBsYXRlIik7dmFyIHU9YygidGV4dHBvc2l0aW9uIik7aWYoYSh0LGUsaSxjLHUse21vZHVsZUhhc1NlbGVjdGVkOiExLG1vZHVsZUhhc1Vuc2VsZWN0ZWQ6ITEsbW9kdWxlSGFzQ29uc3RyYWluOiEwLG1vZHVsZUhhc0NsaXBvbmF4aXM6ITAsbW9kdWxlSGFzVGV4dGFuZ2xlOiEwLG1vZHVsZUhhc0luc2lkZWFuY2hvcjohMH0pLCJub25lIiE9PWUudGV4dHBvc2l0aW9uJiYoYygidGV4dHRlbXBsYXRlIiksZS50ZXh0dGVtcGxhdGV8fGMoInRleHRpbmZvIikpLHAoYywiaW5jcmVhc2luZyIsZikscChjLCJkZWNyZWFzaW5nIixoKSxwKGMsInRvdGFscyIsIiM0NDk5RkYiKSxjKCJjb25uZWN0b3IudmlzaWJsZSIpKWMoImNvbm5lY3Rvci5tb2RlIiksYygiY29ubmVjdG9yLmxpbmUud2lkdGgiKSYmKGMoImNvbm5lY3Rvci5saW5lLmNvbG9yIiksYygiY29ubmVjdG9yLmxpbmUuZGFzaCIpKX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuLmNvZXJjZShhLl9pbnB1dCxhLGwsdCl9aWYoImdyb3VwIj09PWUud2F0ZXJmYWxsbW9kZSlmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKylyPShhPXRbc10pLl9pbnB1dCxpKHIsYSxlLG8pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjc0NywiLi4vLi4vbGliIjo3NzgsIi4uL2Jhci9kZWZhdWx0cyI6OTI1LCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6MTIwNywiLi4vc2NhdHRlci94eV9kZWZhdWx0cyI6MTIxNCwiLi9hdHRyaWJ1dGVzIjoxMzUzfV0sMTM1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54PSJ4VmFsImluIGU/ZS54VmFsOmUueCx0Lnk9InlWYWwiaW4gZT9lLnlWYWw6ZS55LCJpbml0aWFsImluIGUmJih0LmluaXRpYWw9ZS5pbml0aWFsKSwiZGVsdGEiaW4gZSYmKHQuZGVsdGE9ZS5kZWx0YSksImZpbmFsImluIGUmJih0LmZpbmFsPWUuZmluYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLHR9fSx7fV0sMTM1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0LGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLm9wYWNpdHksYT10KCIuLi9iYXIvaG92ZXIiKS5ob3Zlck9uQmFycyxvPXQoIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyIpLHM9by5JTkNSRUFTSU5HLlNZTUJPTCxsPW8uREVDUkVBU0lORy5TWU1CT0w7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBjPWEodCxlLHIsbyk7aWYoYyl7dmFyIHU9Yy5jZCxmPXVbMF0udHJhY2UsaD0iaCI9PT1mLm9yaWVudGF0aW9uLHA9aD90LnhhOnQueWEsZD11W2MuaW5kZXhdLGc9ZC5pc1N1bT9kLmIrZC5zOmQucmF3UztpZighZC5pc1N1bSl7Yy5pbml0aWFsPWQuYitkLnMtZyxjLmRlbHRhPWcsYy5maW5hbD1jLmluaXRpYWwrYy5kZWx0YTt2YXIgbT13KE1hdGguYWJzKGMuZGVsdGEpKTtjLmRlbHRhTGFiZWw9ZzwwPyIoIittKyIpIjptLGMuZmluYWxMYWJlbD13KGMuZmluYWwpLGMuaW5pdGlhbExhYmVsPXcoYy5pbml0aWFsKX12YXIgdj1kLmhpfHxmLmhvdmVyaW5mbyx5PVtdO2lmKHYmJiJub25lIiE9PXYmJiJza2lwIiE9PXYpe3ZhciB4PSJhbGwiPT09dixiPXYuc3BsaXQoIisiKSxfPWZ1bmN0aW9uKHQpe3JldHVybiB4fHwtMSE9PWIuaW5kZXhPZih0KX07ZC5pc1N1bXx8KCFfKCJmaW5hbCIpfHxfKGg/IngiOiJ5Iil8fHkucHVzaChjLmZpbmFsTGFiZWwpLF8oImRlbHRhIikmJihnPDA/eS5wdXNoKGMuZGVsdGFMYWJlbCsiICIrbCk6eS5wdXNoKGMuZGVsdGFMYWJlbCsiICIrcykpLF8oImluaXRpYWwiKSYmeS5wdXNoKCJJbml0aWFsOiAiK2MuaW5pdGlhbExhYmVsKSl9cmV0dXJuIHkubGVuZ3RoJiYoYy5leHRyYVRleHQ9eS5qb2luKCI8YnI+IikpLGMuY29sb3I9ZnVuY3Rpb24odCxlKXt2YXIgcj10W2UuZGlyXS5tYXJrZXIsbj1yLmNvbG9yLGE9ci5saW5lLmNvbG9yLG89ci5saW5lLndpZHRoO2lmKGkobikpcmV0dXJuIG47aWYoaShhKSYmbylyZXR1cm4gYX0oZixkKSxbY119ZnVuY3Rpb24gdyh0KXtyZXR1cm4gbihwLHQpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjQzLCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjc0NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi4vYmFyL2hvdmVyIjo5Mjh9XSwxMzYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToid2F0ZXJmYWxsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJvcmllbnRlZCIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYmFyL3NlbGVjdCI6OTMzLCIuL2F0dHJpYnV0ZXMiOjEzNTMsIi4vY2FsYyI6MTM1NCwiLi9jcm9zc190cmFjZV9jYWxjIjoxMzU2LCIuL2RlZmF1bHRzIjoxMzU3LCIuL2V2ZW50X2RhdGEiOjEzNTgsIi4vaG92ZXIiOjEzNTksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEzNjEsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMzYyLCIuL3Bsb3QiOjEzNjMsIi4vc3R5bGUiOjEzNjR9XSwxMzYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17d2F0ZXJmYWxsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTM2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPSExO2Z1bmN0aW9uIG8ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1mb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZihsLnZpc2libGUmJiJ3YXRlcmZhbGwiPT09bC50eXBlKXthPSEwO2JyZWFrfX1hJiYobygid2F0ZXJmYWxsbW9kZSIpLG8oIndhdGVyZmFsbGdhcCIsLjIpLG8oIndhdGVyZmFsbGdyb3VwZ2FwIikpfX0seyIuLi8uLi9saWIiOjc3OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTM2MX1dLDEzNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHM9dCgiLi4vYmFyL3Bsb3QiKSxsPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5jbGVhck1pblRleHRTaXplO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXt2YXIgdT10Ll9mdWxsTGF5b3V0O2woIndhdGVyZmFsbCIsdSkscy5wbG90KHQsZSxyLGMse21vZGU6dS53YXRlcmZhbGxtb2RlLG5vcm06dS53YXRlcmZhbGxtb2RlLGdhcDp1LndhdGVyZmFsbGdhcCxncm91cGdhcDp1LndhdGVyZmFsbGdyb3VwZ2FwfSksZnVuY3Rpb24odCxlLHIscyl7dmFyIGw9ZS54YXhpcyxjPWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMocyxyLCJ0cmFjZSBiYXJzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIHM9bi5zZWxlY3QodGhpcyksdT1yWzBdLnRyYWNlLGY9aS5lbnN1cmVTaW5nbGUocywiZyIsImxpbmVzIik7aWYodS5jb25uZWN0b3ImJnUuY29ubmVjdG9yLnZpc2libGUpe3ZhciBoPSJoIj09PXUub3JpZW50YXRpb24scD11LmNvbm5lY3Rvci5tb2RlLGQ9Zi5zZWxlY3RBbGwoImcubGluZSIpLmRhdGEoaS5pZGVudGl0eSk7ZC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxpbmUiLCEwKSxkLmV4aXQoKS5yZW1vdmUoKTt2YXIgZz1kLnNpemUoKTtkLmVhY2goKGZ1bmN0aW9uKHIscyl7aWYocz09PWctMXx8ci5jTmV4dCl7dmFyIHU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9W10sYT1bXSxvPW4/ZTpyLHM9bj9yOmU7cmV0dXJuIGlbMF09by5jMnAodC5zMCwhMCksYVswXT1zLmMycCh0LnAwLCEwKSxpWzFdPW8uYzJwKHQuczEsITApLGFbMV09cy5jMnAodC5wMSwhMCksaVsyXT1vLmMycCh0Lm5leHRTMCwhMCksYVsyXT1zLmMycCh0Lm5leHRQMCwhMCksbj9baSxhXTpbYSxpXX0ocixsLGMsaCksZj11WzBdLGQ9dVsxXSxtPSIiO2ZbMF0hPT1vJiZkWzBdIT09byYmZlsxXSE9PW8mJmRbMV0hPT1vJiYoInNwYW5uaW5nIj09PXAmJiFyLmlzU3VtJiZzPjAmJihtKz1oPyJNIitmWzBdKyIsIitkWzFdKyJWIitkWzBdOiJNIitmWzFdKyIsIitkWzBdKyJIIitmWzBdKSwiYmV0d2VlbiIhPT1wJiYoci5pc1N1bXx8czxnLTEpJiYobSs9aD8iTSIrZlsxXSsiLCIrZFswXSsiViIrZFsxXToiTSIrZlswXSsiLCIrZFsxXSsiSCIrZlsxXSksZlsyXSE9PW8mJmRbMl0hPT1vJiYobSs9aD8iTSIrZlsxXSsiLCIrZFsxXSsiViIrZFsyXToiTSIrZlsxXSsiLCIrZFsxXSsiSCIrZlsyXSkpLCIiPT09bSYmKG09Ik0wLDBaIiksaS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInBhdGgiKS5hdHRyKCJkIixtKS5jYWxsKGEuc2V0Q2xpcFVybCxlLmxheWVyQ2xpcElkLHQpfX0pKX1lbHNlIGYucmVtb3ZlKCl9KSl9KHQsZSxyLGMpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2NSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi8uLi9saWIiOjc3OCwiLi4vYmFyL3Bsb3QiOjkzMiwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTM3LGQzOjE2OX1dLDEzNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLHM9dCgiLi4vYmFyL3N0eWxlIiksbD10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dCxjPXMuc3R5bGVUZXh0UG9pbnRzO2UuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBzPXJ8fG4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy53YXRlcmZhbGxsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpO2wodCxzLCJ3YXRlcmZhbGwiKSxzLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxzLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLHM9ZVswXS50cmFjZTtyLnNlbGVjdEFsbCgiLnBvaW50ID4gcGF0aCIpLmVhY2goKGZ1bmN0aW9uKHQpe2lmKCF0LmlzQmxhbmspe3ZhciBlPXNbdC5kaXJdLm1hcmtlcjtuLnNlbGVjdCh0aGlzKS5jYWxsKGEuZmlsbCxlLmNvbG9yKS5jYWxsKGEuc3Ryb2tlLGUubGluZS5jb2xvcikuY2FsbChpLmRhc2hMaW5lLGUubGluZS5kYXNoLGUubGluZS53aWR0aCkuc3R5bGUoIm9wYWNpdHkiLHMuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkP286MSl9fSkpLGMocixzLHQpLHIuc2VsZWN0QWxsKCIubGluZXMiKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PXMuY29ubmVjdG9yLmxpbmU7aS5saW5lR3JvdXBTdHlsZShuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKSx0LndpZHRoLHQuY29sb3IsdC5kYXNoKX0pKX0pKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjY0MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjUsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjc1MiwiLi4vYmFyL3N0eWxlIjo5MzUsIi4uL2Jhci91bmlmb3JtX3RleHQiOjkzNyxkMzoxNjl9XSwxMzY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi9saWIiKSxhPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksbz10KCIuL2hlbHBlcnMiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uLHM9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtyLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJhZ2dyZWdhdGUiO3ZhciBsPXIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGdyb3Vwczp7dmFsVHlwZToic3RyaW5nIixzdHJpY3Q6ITAsbm9CbGFuazohMCxhcnJheU9rOiEwLGRmbHQ6IngiLGVkaXRUeXBlOiJjYWxjIn0sYWdncmVnYXRpb25zOntfaXNMaW5rZWRUb0FycmF5OiJhZ2dyZWdhdGlvbiIsdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sZnVuYzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY291bnQiLCJzdW0iLCJhdmciLCJtZWRpYW4iLCJtb2RlIiwicm1zIiwic3RkZGV2IiwibWluIiwibWF4IiwiZmlyc3QiLCJsYXN0IiwiY2hhbmdlIiwicmFuZ2UiXSxkZmx0OiJmaXJzdCIsZWRpdFR5cGU6ImNhbGMifSxmdW5jbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2FtcGxlIiwicG9wdWxhdGlvbiJdLGRmbHQ6InNhbXBsZSIsZWRpdFR5cGU6ImNhbGMifSxlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGM9bC5hZ2dyZWdhdGlvbnM7ZnVuY3Rpb24gdSh0LGUscixhKXtpZihhLmVuYWJsZWQpe2Zvcih2YXIgbz1hLnRhcmdldCxsPWkubmVzdGVkUHJvcGVydHkoZSxvKSxjPWwuZ2V0KCksdT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZnVuYyxuPWUuZDJjLGE9ZS5jMmQ7c3dpdGNoKHIpe2Nhc2UiY291bnQiOnJldHVybiBmO2Nhc2UiZmlyc3QiOnJldHVybiBoO2Nhc2UibGFzdCI6cmV0dXJuIHA7Y2FzZSJzdW0iOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89bih0W2VbaV1dKTtvIT09cyYmKHIrPW8pfXJldHVybiBhKHIpfTtjYXNlImF2ZyI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsaT0wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmKHIrPWwsaSsrKX1yZXR1cm4gaT9hKHIvaSk6c307Y2FzZSJtaW4iOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLzAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1uKHRbZVtpXV0pO28hPT1zJiYocj1NYXRoLm1pbihyLG8pKX1yZXR1cm4gcj09PTEvMD9zOmEocil9O2Nhc2UibWF4IjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9LTEvMCxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPW4odFtlW2ldXSk7byE9PXMmJihyPU1hdGgubWF4KHIsbykpfXJldHVybiByPT09LTEvMD9zOmEocil9O2Nhc2UicmFuZ2UiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLzAsaT0tMS8wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmKHI9TWF0aC5taW4ocixsKSxpPU1hdGgubWF4KGksbCkpfXJldHVybiBpPT09LTEvMHx8cj09PTEvMD9zOmEoaS1yKX07Y2FzZSJjaGFuZ2UiOnJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPW4odFtlWzBdXSksaT1uKHRbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByPT09c3x8aT09PXM/czphKGktcil9O2Nhc2UibWVkaWFuIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1uKHRbZVtvXV0pO2whPT1zJiZyLnB1c2gobCl9aWYoIXIubGVuZ3RoKXJldHVybiBzO3Iuc29ydChpLnNvcnRlckFzYyk7dmFyIGM9KHIubGVuZ3RoLTEpLzI7cmV0dXJuIGEoKHJbTWF0aC5mbG9vcihjKV0rcltNYXRoLmNlaWwoYyldKS8yKX07Y2FzZSJtb2RlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30saT0wLG89cyxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBjPW4odFtlW2xdXSk7aWYoYyE9PXMpe3ZhciB1PXJbY109KHJbY118fDApKzE7dT5pJiYoaT11LG89Yyl9fXJldHVybiBpP2Eobyk6c307Y2FzZSJybXMiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGk9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyKz1sKmwsaSsrKX1yZXR1cm4gaT9hKE1hdGguc3FydChyL2kpKTpzfTtjYXNlInN0ZGRldiI6cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIGksYT0wLG89MCxsPTEsYz1zO2ZvcihpPTA7aTxyLmxlbmd0aCYmYz09PXM7aSsrKWM9bihlW3JbaV1dKTtpZihjPT09cylyZXR1cm4gcztmb3IoO2k8ci5sZW5ndGg7aSsrKXt2YXIgdT1uKGVbcltpXV0pO2lmKHUhPT1zKXt2YXIgZj11LWM7YSs9ZixvKz1mKmYsbCsrfX12YXIgaD0ic2FtcGxlIj09PXQuZnVuY21vZGU/bC0xOmw7cmV0dXJuIGg/TWF0aC5zcXJ0KChvLWEqYS9sKS9oKTowfX19KGEsbi5nZXREYXRhQ29udmVyc2lvbnModCxlLG8sYykpLGQ9bmV3IEFycmF5KHIubGVuZ3RoKSxnPTA7ZzxyLmxlbmd0aDtnKyspZFtnXT11KGMscltnXSk7bC5zZXQoZCksImNvdW50Ij09PWEuZnVuYyYmaS5wdXNoVW5pcXVlKGUuX2FycmF5QXR0cnMsbyl9fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gZS5sZW5ndGh9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0W2VbMF1dfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdFtlW2UubGVuZ3RoLTFdXX1yLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj17fTtmdW5jdGlvbiBvKGUscil7cmV0dXJuIGkuY29lcmNlKHQsbixsLGUscil9aWYoIW8oImVuYWJsZWQiKSlyZXR1cm4gbjt2YXIgcz1hLmZpbmRBcnJheUF0dHJpYnV0ZXMoZSksdT17fTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXVbc1tyXV09MTt2YXIgZj1vKCJncm91cHMiKTtpZighQXJyYXkuaXNBcnJheShmKSl7aWYoIXVbZl0pcmV0dXJuIG4uZW5hYmxlZD0hMSxuO3VbZl09MH12YXIgaCxwPXQuYWdncmVnYXRpb25zfHxbXSxkPW4uYWdncmVnYXRpb25zPW5ldyBBcnJheShwLmxlbmd0aCk7ZnVuY3Rpb24gZyh0LGUpe3JldHVybiBpLmNvZXJjZShwW3JdLGgsYyx0LGUpfWZvcihyPTA7cjxwLmxlbmd0aDtyKyspe2g9e19pbmRleDpyfTt2YXIgbT1nKCJ0YXJnZXQiKSx2PWcoImZ1bmMiKTtnKCJlbmFibGVkIikmJm0mJih1W21dfHwiY291bnQiPT09diYmdm9pZCAwPT09dVttXSk/KCJzdGRkZXYiPT09diYmZygiZnVuY21vZGUiKSx1W21dPTAsZFtyXT1oKTpkW3JdPXtlbmFibGVkOiExLF9pbmRleDpyfX1mb3Iocj0wO3I8cy5sZW5ndGg7cisrKXVbc1tyXV0mJmQucHVzaCh7dGFyZ2V0OnNbcl0sZnVuYzpjLmZ1bmMuZGZsdCxlbmFibGVkOiEwLF9pbmRleDotMX0pO3JldHVybiBufSxyLmNhbGNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe2lmKHIuZW5hYmxlZCl7dmFyIG49ci5ncm91cHMsYT1pLmdldFRhcmdldEFycmF5KGUse3RhcmdldDpufSk7aWYoYSl7dmFyIHMsbCxjLGYsaD17fSxwPXt9LGQ9W10sZz1vKGUudHJhbnNmb3JtcyxyKSxtPWEubGVuZ3RoO2ZvcihlLl9sZW5ndGgmJihtPU1hdGgubWluKG0sZS5fbGVuZ3RoKSkscz0wO3M8bTtzKyspdm9pZCAwPT09KGM9aFtsPWFbc11dKT8oaFtsXT1kLmxlbmd0aCxmPVtzXSxkLnB1c2goZikscFtoW2xdXT1nKHMpKTooZFtjXS5wdXNoKHMpLHBbaFtsXV09KHBbaFtsXV18fFtdKS5jb25jYXQoZyhzKSkpO3IuX2luZGV4VG9Qb2ludHM9cDt2YXIgdj1yLmFnZ3JlZ2F0aW9ucztmb3Iocz0wO3M8di5sZW5ndGg7cysrKXUodCxlLGQsdltzXSk7InN0cmluZyI9PXR5cGVvZiBuJiZ1KHQsZSxkLHt0YXJnZXQ6bixmdW5jOiJmaXJzdCIsZW5hYmxlZDohMH0pLGUuX2xlbmd0aD1kLmxlbmd0aH19fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTMsIi4uL2xpYiI6Nzc4LCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6ODE2LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuL2hlbHBlcnMiOjEzNjh9XSwxMzY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuL2hlbHBlcnMiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uLHM9dCgiLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiKSxsPXMuQ09NUEFSSVNPTl9PUFMsYz1zLklOVEVSVkFMX09QUyx1PXMuU0VUX09QUztyLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJmaWx0ZXIiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixzdHJpY3Q6ITAsbm9CbGFuazohMCxhcnJheU9rOiEwLGRmbHQ6IngiLGVkaXRUeXBlOiJjYWxjIn0sb3BlcmF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10uY29uY2F0KGwpLmNvbmNhdChjKS5jb25jYXQodSksZGZsdDoiPSIsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZTp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxwcmVzZXJ2ZWdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gYShpLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsci5hdHRyaWJ1dGVzLGksYSl9aWYoYSgiZW5hYmxlZCIpKXt2YXIgbz1hKCJ0YXJnZXQiKTtpZihuLmlzQXJyYXlPclR5cGVkQXJyYXkobykmJjA9PT1vLmxlbmd0aClyZXR1cm4gZS5lbmFibGVkPSExLGU7YSgicHJlc2VydmVnYXBzIiksYSgib3BlcmF0aW9uIiksYSgidmFsdWUiKTt2YXIgcz1pLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKTtzKHQsZSwidmFsdWVjYWxlbmRhciIsbnVsbCkscyh0LGUsInRhcmdldGNhbGVuZGFyIixudWxsKX1yZXR1cm4gZX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBpPW4uZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihpKXt2YXIgcz1yLnRhcmdldCxmPWkubGVuZ3RoO2UuX2xlbmd0aCYmKGY9TWF0aC5taW4oZixlLl9sZW5ndGgpKTt2YXIgaD1yLnRhcmdldGNhbGVuZGFyLHA9ZS5fYXJyYXlBdHRycyxkPXIucHJlc2VydmVnYXBzO2lmKCJzdHJpbmciPT10eXBlb2Ygcyl7dmFyIGc9bi5uZXN0ZWRQcm9wZXJ0eShlLHMrImNhbGVuZGFyIikuZ2V0KCk7ZyYmKGg9Zyl9dmFyIG0sdix5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lm9wZXJhdGlvbixpPXQudmFsdWUsYT1BcnJheS5pc0FycmF5KGkpO2Z1bmN0aW9uIG8odCl7cmV0dXJuLTEhPT10LmluZGV4T2Yobil9dmFyIHMsZj1mdW5jdGlvbihyKXtyZXR1cm4gZShyLDAsdC52YWx1ZWNhbGVuZGFyKX0saD1mdW5jdGlvbih0KXtyZXR1cm4gZSh0LDAscil9O28obCk/cz1mKGE/aVswXTppKTpvKGMpP3M9YT9bZihpWzBdKSxmKGlbMV0pXTpbZihpKSxmKGkpXTpvKHUpJiYocz1hP2kubWFwKGYpOltmKGkpXSk7c3dpdGNoKG4pe2Nhc2UiPSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPT09c307Y2FzZSIhPSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpIT09c307Y2FzZSI8IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGgodCk8c307Y2FzZSI8PSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPD1zfTtjYXNlIj4iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KT5zfTtjYXNlIj49IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGgodCk+PXN9O2Nhc2UiW10iOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1oKHQpO3JldHVybiBlPj1zWzBdJiZlPD1zWzFdfTtjYXNlIigpIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT5zWzBdJiZlPHNbMV19O2Nhc2UiWykiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1oKHQpO3JldHVybiBlPj1zWzBdJiZlPHNbMV19O2Nhc2UiKF0iOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1oKHQpO3JldHVybiBlPnNbMF0mJmU8PXNbMV19O2Nhc2UiXVsiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1oKHQpO3JldHVybiBlPD1zWzBdfHxlPj1zWzFdfTtjYXNlIikoIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTxzWzBdfHxlPnNbMV19O2Nhc2UiXSgiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1oKHQpO3JldHVybiBlPD1zWzBdfHxlPnNbMV19O2Nhc2UiKVsiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1oKHQpO3JldHVybiBlPHNbMF18fGU+PXNbMV19O2Nhc2Uie30iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMSE9PXMuaW5kZXhPZihoKHQpKX07Y2FzZSJ9eyI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi0xPT09cy5pbmRleE9mKGgodCkpfX19KHIsYS5nZXREYXRhVG9Db29yZEZ1bmModCxlLHMsaSksaCkseD17fSxiPXt9LF89MDtkPyhtPWZ1bmN0aW9uKHQpe3hbdC5hc3RyXT1uLmV4dGVuZERlZXAoW10sdC5nZXQoKSksdC5zZXQobmV3IEFycmF5KGYpKX0sdj1mdW5jdGlvbih0LGUpe3ZhciByPXhbdC5hc3RyXVtlXTt0LmdldCgpW2VdPXJ9KToobT1mdW5jdGlvbih0KXt4W3QuYXN0cl09bi5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KFtdKX0sdj1mdW5jdGlvbih0LGUpe3ZhciByPXhbdC5hc3RyXVtlXTt0LmdldCgpLnB1c2gocil9KSxrKG0pO2Zvcih2YXIgdz1vKGUudHJhbnNmb3JtcyxyKSxUPTA7VDxmO1QrKyl7eShpW1RdKT8oayh2LFQpLGJbXysrXT13KFQpKTpkJiZfKyt9ci5faW5kZXhUb1BvaW50cz1iLGUuX2xlbmd0aD1ffX1mdW5jdGlvbiBrKHQscil7Zm9yKHZhciBpPTA7aTxwLmxlbmd0aDtpKyspe3Qobi5uZXN0ZWRQcm9wZXJ0eShlLHBbaV0pLHIpfX19fSx7Ii4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIjo3NDksIi4uL2xpYiI6Nzc4LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI4LCIuLi9yZWdpc3RyeSI6OTExLCIuL2hlbHBlcnMiOjEzNjh9XSwxMzY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiKSxhPXQoIi4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuL2hlbHBlcnMiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uO2Z1bmN0aW9uIHModCxlKXt2YXIgcixzLGwsYyx1LGYsaCxwLGQsZyxtPWUudHJhbnNmb3JtLHY9ZS50cmFuc2Zvcm1JbmRleCx5PXQudHJhbnNmb3Jtc1t2XS5ncm91cHMseD1vKHQudHJhbnNmb3JtcyxtKTtpZighbi5pc0FycmF5T3JUeXBlZEFycmF5KHkpfHwwPT09eS5sZW5ndGgpcmV0dXJuW3RdO3ZhciBiPW4uZmlsdGVyVW5pcXVlKHkpLF89bmV3IEFycmF5KGIubGVuZ3RoKSx3PXkubGVuZ3RoLFQ9aS5maW5kQXJyYXlBdHRyaWJ1dGVzKHQpLGs9bS5zdHlsZXN8fFtdLE09e307Zm9yKHI9MDtyPGsubGVuZ3RoO3IrKylNW2tbcl0udGFyZ2V0XT1rW3JdLnZhbHVlO20uc3R5bGVzJiYoZz1uLmtleWVkQ29udGFpbmVyKG0sInN0eWxlcyIsInRhcmdldCIsInZhbHVlLm5hbWUiKSk7dmFyIEE9e30sUz17fTtmb3Iocj0wO3I8Yi5sZW5ndGg7cisrKXtBW2Y9YltyXV09cixTW2ZdPTAsKGg9X1tyXT1uLmV4dGVuZERlZXBOb0FycmF5cyh7fSx0KSkuX2dyb3VwPWYsaC50cmFuc2Zvcm1zW3ZdLl9pbmRleFRvUG9pbnRzPXt9O3ZhciBFPW51bGw7Zm9yKGcmJihFPWcuZ2V0KGYpKSxoLm5hbWU9RXx8IiI9PT1FP0U6bi50ZW1wbGF0ZVN0cmluZyhtLm5hbWVmb3JtYXQse3RyYWNlOnQubmFtZSxncm91cDpmfSkscD1oLnRyYW5zZm9ybXMsaC50cmFuc2Zvcm1zPVtdLHM9MDtzPHAubGVuZ3RoO3MrKyloLnRyYW5zZm9ybXNbc109bi5leHRlbmREZWVwTm9BcnJheXMoe30scFtzXSk7Zm9yKHM9MDtzPFQubGVuZ3RoO3MrKyluLm5lc3RlZFByb3BlcnR5KGgsVFtzXSkuc2V0KFtdKX1mb3IobD0wO2w8VC5sZW5ndGg7bCsrKXtmb3IoYz1UW2xdLHM9MCxkPVtdO3M8Yi5sZW5ndGg7cysrKWRbc109bi5uZXN0ZWRQcm9wZXJ0eShfW3NdLGMpLmdldCgpO2Zvcih1PW4ubmVzdGVkUHJvcGVydHkodCxjKS5nZXQoKSxzPTA7czx3O3MrKylkW0FbeVtzXV1dLnB1c2godVtzXSl9Zm9yKHM9MDtzPHc7cysrKXsoaD1fW0FbeVtzXV1dKS50cmFuc2Zvcm1zW3ZdLl9pbmRleFRvUG9pbnRzW1NbeVtzXV1dPXgocyksU1t5W3NdXSsrfWZvcihyPTA7cjxiLmxlbmd0aDtyKyspZj1iW3JdLGg9X1tyXSxhLmNsZWFyRXhwYW5kZWRUcmFjZURlZmF1bHRDb2xvcnMoaCksaD1uLmV4dGVuZERlZXBOb0FycmF5cyhoLE1bZl18fHt9KTtyZXR1cm4gX31yLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJncm91cGJ5IixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxncm91cHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W10sZWRpdFR5cGU6ImNhbGMifSxuYW1lZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sc3R5bGVzOntfaXNMaW5rZWRUb0FycmF5OiJzdHlsZSIsdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fSxlZGl0VHlwZToiY2FsYyIsX2NvbXBhcmVBc0pTT046ITB9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxpKXt2YXIgYSxvPXt9O2Z1bmN0aW9uIHMoZSxpKXtyZXR1cm4gbi5jb2VyY2UodCxvLHIuYXR0cmlidXRlcyxlLGkpfWlmKCFzKCJlbmFibGVkIikpcmV0dXJuIG87cygiZ3JvdXBzIikscygibmFtZWZvcm1hdCIsaS5fZGF0YUxlbmd0aD4xPyIle2dyb3VwfSAoJXt0cmFjZX0pIjoiJXtncm91cH0iKTt2YXIgbD10LnN0eWxlcyxjPW8uc3R5bGVzPVtdO2lmKGwpZm9yKGE9MDthPGwubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXT17fTtuLmNvZXJjZShsW2FdLGNbYV0sci5hdHRyaWJ1dGVzLnN0eWxlcywidGFyZ2V0Iik7dmFyIGY9bi5jb2VyY2UobFthXSxjW2FdLHIuYXR0cmlidXRlcy5zdHlsZXMsInZhbHVlIik7bi5pc1BsYWluT2JqZWN0KGYpP3UudmFsdWU9bi5leHRlbmREZWVwKHt9LGYpOmYmJmRlbGV0ZSB1LnZhbHVlfXJldHVybiBvfSxyLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspZm9yKHI9cyh0W25dLGUpLGk9MDtpPHIubGVuZ3RoO2krKylhLnB1c2gocltpXSk7cmV0dXJuIGF9fSx7Ii4uL2xpYiI6Nzc4LCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6ODE2LCIuLi9wbG90cy9wbG90cyI6ODkxLCIuL2hlbHBlcnMiOjEzNjh9XSwxMzY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IucG9pbnRzQWNjZXNzb3JGdW5jdGlvbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9MDtpPHQubGVuZ3RoJiYocj10W2ldKSE9PWU7aSsrKXIuX2luZGV4VG9Qb2ludHMmJiExIT09ci5lbmFibGVkJiYobj1yLl9pbmRleFRvUG9pbnRzKTtyZXR1cm4gbj9mdW5jdGlvbih0KXtyZXR1cm4gblt0XX06ZnVuY3Rpb24odCl7cmV0dXJuW3RdfX19LHt9XSwxMzY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vaGVscGVycyIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb24sbz10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9InNvcnQiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixzdHJpY3Q6ITAsbm9CbGFuazohMCxhcnJheU9rOiEwLGRmbHQ6IngiLGVkaXRUeXBlOiJjYWxjIn0sb3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFzY2VuZGluZyIsImRlc2NlbmRpbmciXSxkZmx0OiJhc2NlbmRpbmciLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIGkoaSxhKXtyZXR1cm4gbi5jb2VyY2UodCxlLHIuYXR0cmlidXRlcyxpLGEpfXJldHVybiBpKCJlbmFibGVkIikmJihpKCJ0YXJnZXQiKSxpKCJvcmRlciIpKSxlfSxyLmNhbGNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe2lmKHIuZW5hYmxlZCl7dmFyIHM9bi5nZXRUYXJnZXRBcnJheShlLHIpO2lmKHMpe3ZhciBsPXIudGFyZ2V0LGM9cy5sZW5ndGg7ZS5fbGVuZ3RoJiYoYz1NYXRoLm1pbihjLGUuX2xlbmd0aCkpO3ZhciB1LGYsaD1lLl9hcnJheUF0dHJzLHA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobik7Zm9yKGk9MDtpPG47aSsrKWFbaV09e3Y6ZVtpXSxpOml9O2ZvcihhLnNvcnQoZnVuY3Rpb24odCxlKXtzd2l0Y2godC5vcmRlcil7Y2FzZSJhc2NlbmRpbmciOnJldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodC52KSxpPWUoci52KTtyZXR1cm4gbj09PW8/MTppPT09bz8tMTpuLWl9O2Nhc2UiZGVzY2VuZGluZyI6cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSh0LnYpLGk9ZShyLnYpO3JldHVybiBuPT09bz8xOmk9PT1vPy0xOmktbn19fSh0LHIpKSxpPTA7aTxuO2krKylzW2ldPWFbaV0uaTtyZXR1cm4gc30ocixzLGkuZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxsLHMpLGMpLGQ9YShlLnRyYW5zZm9ybXMsciksZz17fTtmb3IodT0wO3U8aC5sZW5ndGg7dSsrKXt2YXIgbT1uLm5lc3RlZFByb3BlcnR5KGUsaFt1XSksdj1tLmdldCgpLHk9bmV3IEFycmF5KGMpO2ZvcihmPTA7ZjxjO2YrKyl5W2ZdPXZbcFtmXV07bS5zZXQoeSl9Zm9yKGY9MDtmPGM7ZisrKWdbZl09ZChwW2ZdKTtyLl9pbmRleFRvUG9pbnRzPWcsZS5fbGVuZ3RoPWN9fX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUzLCIuLi9saWIiOjc3OCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyOCwiLi9oZWxwZXJzIjoxMzY4fV0sMTM3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnZlcnNpb249IjEuNTguNCJ9LHt9XX0se30sWzI2XSkoMjYpfSkpOw=="; export default content;