const content = `LyoqCiogcGxvdGx5LmpzIChiYXNpYyAtIG1pbmlmaWVkKSB2Mi44LjEKKiBDb3B5cmlnaHQgMjAxMi0yMDIxLCBQbG90bHksIEluYy4KKiBBbGwgcmlnaHRzIHJlc2VydmVkLgoqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwohZnVuY3Rpb24oZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxlKTtlbHNleygidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpLlBsb3RseT1lKCl9fSgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LHIsbil7ZnVuY3Rpb24gYShvLGwpe2lmKCFyW29dKXtpZighdFtvXSl7dmFyIHM9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWwmJnMpcmV0dXJuIHMobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgYz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgYy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixjfXZhciB1PXJbb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbCh1LmV4cG9ydHMsKGZ1bmN0aW9uKGUpe3JldHVybiBhKHRbb11bMV1bZV18fGUpfSksdSx1LmV4cG9ydHMsZSx0LHIsbil9cmV0dXJuIHJbb10uZXhwb3J0c31mb3IodmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsbz0wO288bi5sZW5ndGg7bysrKWEobltvXSk7cmV0dXJuIGF9KHsxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL3NyYy9saWIiKSxhPXsiWCxYIGRpdiI6J2RpcmVjdGlvbjpsdHI7Zm9udC1mYW1pbHk6Ik9wZW4gU2FucyIsdmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDsnLCJYIGlucHV0LFggYnV0dG9uIjonZm9udC1mYW1pbHk6Ik9wZW4gU2FucyIsdmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmOycsIlggaW5wdXQ6Zm9jdXMsWCBidXR0b246Zm9jdXMiOiJvdXRsaW5lOm5vbmU7IiwiWCBhIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCBhOmhvdmVyIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCAuY3Jpc3AiOiJzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC51c2VyLXNlbGVjdC1ub25lIjoiLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7IiwiWCBzdmciOiJvdmVyZmxvdzpoaWRkZW47IiwiWCBzdmcgYSI6ImZpbGw6IzQ0N2FkYjsiLCJYIHN2ZyBhOmhvdmVyIjoiZmlsbDojM2M2ZGM1OyIsIlggLm1haW4tc3ZnIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7IiwiWCAubWFpbi1zdmcgLmRyYWdsYXllciI6InBvaW50ZXItZXZlbnRzOmFsbDsiLCJYIC5jdXJzb3ItZGVmYXVsdCI6ImN1cnNvcjpkZWZhdWx0OyIsIlggLmN1cnNvci1wb2ludGVyIjoiY3Vyc29yOnBvaW50ZXI7IiwiWCAuY3Vyc29yLWNyb3NzaGFpciI6ImN1cnNvcjpjcm9zc2hhaXI7IiwiWCAuY3Vyc29yLW1vdmUiOiJjdXJzb3I6bW92ZTsiLCJYIC5jdXJzb3ItY29sLXJlc2l6ZSI6ImN1cnNvcjpjb2wtcmVzaXplOyIsIlggLmN1cnNvci1yb3ctcmVzaXplIjoiY3Vyc29yOnJvdy1yZXNpemU7IiwiWCAuY3Vyc29yLW5zLXJlc2l6ZSI6ImN1cnNvcjpucy1yZXNpemU7IiwiWCAuY3Vyc29yLWV3LXJlc2l6ZSI6ImN1cnNvcjpldy1yZXNpemU7IiwiWCAuY3Vyc29yLXN3LXJlc2l6ZSI6ImN1cnNvcjpzdy1yZXNpemU7IiwiWCAuY3Vyc29yLXMtcmVzaXplIjoiY3Vyc29yOnMtcmVzaXplOyIsIlggLmN1cnNvci1zZS1yZXNpemUiOiJjdXJzb3I6c2UtcmVzaXplOyIsIlggLmN1cnNvci13LXJlc2l6ZSI6ImN1cnNvcjp3LXJlc2l6ZTsiLCJYIC5jdXJzb3ItZS1yZXNpemUiOiJjdXJzb3I6ZS1yZXNpemU7IiwiWCAuY3Vyc29yLW53LXJlc2l6ZSI6ImN1cnNvcjpudy1yZXNpemU7IiwiWCAuY3Vyc29yLW4tcmVzaXplIjoiY3Vyc29yOm4tcmVzaXplOyIsIlggLmN1cnNvci1uZS1yZXNpemUiOiJjdXJzb3I6bmUtcmVzaXplOyIsIlggLmN1cnNvci1ncmFiIjoiY3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYjsiLCJYIC5tb2RlYmFyIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDtyaWdodDoycHg7IiwiWCAuZWFzZS1iZyI6Ii13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcyBlYXNlIDBzOy1tcy10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcyBlYXNlIDBzO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuM3MgZWFzZSAwczsiLCJYIC5tb2RlYmFyLS1ob3Zlcj46bm90KC53YXRlcm1hcmspIjoib3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBlYXNlIDBzOy1tcy10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBlYXNlIDBzO3RyYW5zaXRpb246b3BhY2l0eSAuM3MgZWFzZSAwczsiLCJYOmhvdmVyIC5tb2RlYmFyLS1ob3ZlciAubW9kZWJhci1ncm91cCI6Im9wYWNpdHk6MTsiLCJYIC5tb2RlYmFyLWdyb3VwIjoiZmxvYXQ6bGVmdDtkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy1sZWZ0OjhweDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwOyIsIlggLm1vZGViYXItYnRuIjoicG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE2cHg7cGFkZGluZzozcHggNHB4O2hlaWdodDoyMnB4O2N1cnNvcjpwb2ludGVyO2xpbmUtaGVpZ2h0Om5vcm1hbDtib3gtc2l6aW5nOmJvcmRlci1ib3g7IiwiWCAubW9kZWJhci1idG4gc3ZnIjoicG9zaXRpb246cmVsYXRpdmU7dG9wOjJweDsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIjoiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LXdyYXA6d3JhcDthbGlnbi1jb250ZW50OmZsZXgtZW5kO21heC1oZWlnaHQ6MTAwJTsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIHN2ZyI6InRvcDotMXB4OyIsIlggLm1vZGViYXIudmVydGljYWwgLm1vZGViYXItZ3JvdXAiOiJkaXNwbGF5OmJsb2NrO2Zsb2F0Om5vbmU7cGFkZGluZy1sZWZ0OjBweDtwYWRkaW5nLWJvdHRvbTo4cHg7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCAubW9kZWJhci1ncm91cCAubW9kZWJhci1idG4iOiJkaXNwbGF5OmJsb2NrO3RleHQtYWxpZ246Y2VudGVyOyIsIlggW2RhdGEtdGl0bGVdOmJlZm9yZSxYIFtkYXRhLXRpdGxlXTphZnRlciI6InBvc2l0aW9uOmFic29sdXRlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW8tdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTtkaXNwbGF5Om5vbmU7b3BhY2l0eTowO3otaW5kZXg6MTAwMTtwb2ludGVyLWV2ZW50czpub25lO3RvcDoxMTAlO3JpZ2h0OjUwJTsiLCJYIFtkYXRhLXRpdGxlXTpob3ZlcjpiZWZvcmUsWCBbZGF0YS10aXRsZV06aG92ZXI6YWZ0ZXIiOiJkaXNwbGF5OmJsb2NrO29wYWNpdHk6MTsiLCJYIFtkYXRhLXRpdGxlXTpiZWZvcmUiOidjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjZweCBzb2xpZCB0cmFuc3BhcmVudDt6LWluZGV4OjEwMDI7bWFyZ2luLXRvcDotMTJweDtib3JkZXItYm90dG9tLWNvbG9yOiM2OTczOGE7bWFyZ2luLXJpZ2h0Oi02cHg7JywiWCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJjb250ZW50OmF0dHIoZGF0YS10aXRsZSk7YmFja2dyb3VuZDojNjk3MzhhO2NvbG9yOiNmZmY7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxMnB4O3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tcmlnaHQ6LTE4cHg7Ym9yZGVyLXJhZGl1czoycHg7IiwiWCAudmVydGljYWwgW2RhdGEtdGl0bGVdOmJlZm9yZSxYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJ0b3A6MCU7cmlnaHQ6MjAwJTsiLCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlIjoiYm9yZGVyOjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdC1jb2xvcjojNjk3MzhhO21hcmdpbi10b3A6OHB4O21hcmdpbi1yaWdodDotMzBweDsiLCJYIC5zZWxlY3Qtb3V0bGluZSI6ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MTtzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC5zZWxlY3Qtb3V0bGluZS0xIjoic3Ryb2tlOiNmZmY7IiwiWCAuc2VsZWN0LW91dGxpbmUtMiI6InN0cm9rZTojMDAwO3N0cm9rZS1kYXNoYXJyYXk6MnB4IDJweDsiLFk6J2ZvbnQtZmFtaWx5OiJPcGVuIFNhbnMiLHZlcmRhbmEsYXJpYWwsc2Fucy1zZXJpZjtwb3NpdGlvbjpmaXhlZDt0b3A6NTBweDtyaWdodDoyMHB4O3otaW5kZXg6MTAwMDA7Zm9udC1zaXplOjEwcHQ7bWF4LXdpZHRoOjE4MHB4OycsIlkgcCI6Im1hcmdpbjowOyIsIlkgLm5vdGlmaWVyLW5vdGUiOiJtaW4td2lkdGg6MTgwcHg7bWF4LXdpZHRoOjI1MHB4O2JvcmRlcjoxcHggc29saWQgI2ZmZjt6LWluZGV4OjMwMDA7bWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjojOGM5N2FmO2JhY2tncm91bmQtY29sb3I6cmdiYSgxNDAsMTUxLDE3NSwuOSk7Y29sb3I6I2ZmZjtwYWRkaW5nOjEwcHg7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkO3dvcmQtd3JhcDpicmVhay13b3JkOy1tcy1oeXBoZW5zOmF1dG87LXdlYmtpdC1oeXBoZW5zOmF1dG87aHlwaGVuczphdXRvOyIsIlkgLm5vdGlmaWVyLWNsb3NlIjoiY29sb3I6I2ZmZjtvcGFjaXR5Oi44O2Zsb2F0OnJpZ2h0O3BhZGRpbmc6MCA1cHg7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDsiLCJZIC5ub3RpZmllci1jbG9zZTpob3ZlciI6ImNvbG9yOiM0NDQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7In07Zm9yKHZhciBpIGluIGEpe3ZhciBvPWkucmVwbGFjZSgvXiwvLCIgLCIpLnJlcGxhY2UoL1gvZywiLmpzLXBsb3RseS1wbG90IC5wbG90bHkiKS5yZXBsYWNlKC9ZL2csIi5wbG90bHktbm90aWZpZXIiKTtuLmFkZFN0eWxlUnVsZShvLGFbaV0pfX0seyIuLi9zcmMvbGliIjoyMzJ9XSwyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1lKCIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGUiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGUiOjM4Nn1dLDM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWUoIi4uL3NyYy90cmFjZXMvYmFyIil9LHsiLi4vc3JjL3RyYWNlcy9iYXIiOjMzNn1dLDQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWUoIi4uL3NyYy9jb21wb25lbnRzL2NhbGVuZGFycyIpfSx7Ii4uL3NyYy9jb21wb25lbnRzL2NhbGVuZGFycyI6MTAwfV0sNTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZSgiLi4vc3JjL2NvcmUiKX0seyIuLi9zcmMvY29yZSI6MjE0fV0sNjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZSgiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIjozODd9XSw3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1lKCIuLi9zcmMvdHJhbnNmb3Jtcy9ncm91cGJ5Iil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvZ3JvdXBieSI6Mzg4fV0sODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL2NvcmUiKTtuLnJlZ2lzdGVyKFtlKCIuL2JhciIpLGUoIi4vcGllIiksZSgiLi9hZ2dyZWdhdGUiKSxlKCIuL2ZpbHRlciIpLGUoIi4vZ3JvdXBieSIpLGUoIi4vc29ydCIpLGUoIi4vY2FsZW5kYXJzIildKSx0LmV4cG9ydHM9bn0seyIuL2FnZ3JlZ2F0ZSI6MiwiLi9iYXIiOjMsIi4vY2FsZW5kYXJzIjo0LCIuL2NvcmUiOjUsIi4vZmlsdGVyIjo2LCIuL2dyb3VwYnkiOjcsIi4vcGllIjo5LCIuL3NvcnQiOjEwfV0sOTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZSgiLi4vc3JjL3RyYWNlcy9waWUiKX0seyIuLi9zcmMvdHJhY2VzL3BpZSI6MzUxfV0sMTA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWUoIi4uL3NyYy90cmFuc2Zvcm1zL3NvcnQiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9zb3J0IjozOTB9XSwxMTpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbigpe3ZhciBlPXt2ZXJzaW9uOiIzLjguMCJ9LHI9W10uc2xpY2Usbj1mdW5jdGlvbihlKXtyZXR1cm4gci5jYWxsKGUpfSxhPXNlbGYuZG9jdW1lbnQ7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZSYmKGUub3duZXJEb2N1bWVudHx8ZS5kb2N1bWVudHx8ZSkuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJihlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlldyl9aWYoYSl0cnl7bihhLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzKVswXS5ub2RlVHlwZX1jYXRjaChlKXtuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTt0LS07KXJbdF09ZVt0XTtyZXR1cm4gcn19aWYoRGF0ZS5ub3d8fChEYXRlLm5vdz1mdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0pLGEpdHJ5e2EuY3JlYXRlRWxlbWVudCgiRElWIikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKGUpe3ZhciBsPXRoaXMuRWxlbWVudC5wcm90b3R5cGUscz1sLnNldEF0dHJpYnV0ZSxjPWwuc2V0QXR0cmlidXRlTlMsdT10aGlzLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLGQ9dS5zZXRQcm9wZXJ0eTtsLnNldEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQpe3MuY2FsbCh0aGlzLGUsdCsiIil9LGwuc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24oZSx0LHIpe2MuY2FsbCh0aGlzLGUsdCxyKyIiKX0sdS5zZXRQcm9wZXJ0eT1mdW5jdGlvbihlLHQscil7ZC5jYWxsKHRoaXMsZSx0KyIiLHIpfX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIG51bGw9PT1lP05hTjorZX1mdW5jdGlvbiBoKGUpe3JldHVybiFpc05hTihlKX1mdW5jdGlvbiBnKGUpe3JldHVybntsZWZ0OmZ1bmN0aW9uKHQscixuLGEpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihuPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKGE9dC5sZW5ndGgpO248YTspe3ZhciBpPW4rYT4+PjE7ZSh0W2ldLHIpPDA/bj1pKzE6YT1pfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixhKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihhPXQubGVuZ3RoKTtuPGE7KXt2YXIgaT1uK2E+Pj4xO2UodFtpXSxyKT4wP2E9aTpuPWkrMX1yZXR1cm4gbn19fWUuYXNjZW5kaW5nPWYsZS5kZXNjZW5kaW5nPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfSxlLm1pbj1mdW5jdGlvbihlLHQpe3ZhciByLG4sYT0tMSxpPWUubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrYTxpOylpZihudWxsIT0obj1lW2FdKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KythPGk7KW51bGwhPShuPWVbYV0pJiZyPm4mJihyPW4pfWVsc2V7Zm9yKDsrK2E8aTspaWYobnVsbCE9KG49dC5jYWxsKGUsZVthXSxhKSkmJm4+PW4pe3I9bjticmVha31mb3IoOysrYTxpOyludWxsIT0obj10LmNhbGwoZSxlW2FdLGEpKSYmcj5uJiYocj1uKX1yZXR1cm4gcn0sZS5tYXg9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGE9LTEsaT1lLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KG49ZVthXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysrYTxpOyludWxsIT0obj1lW2FdKSYmbj5yJiYocj1uKX1lbHNle2Zvcig7KythPGk7KWlmKG51bGwhPShuPXQuY2FsbChlLGVbYV0sYSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2E8aTspbnVsbCE9KG49dC5jYWxsKGUsZVthXSxhKSkmJm4+ciYmKHI9bil9cmV0dXJuIHJ9LGUuZXh0ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9LTEsbz1lLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8bzspaWYobnVsbCE9KG49ZVtpXSkmJm4+PW4pe3I9YT1uO2JyZWFrfWZvcig7KytpPG87KW51bGwhPShuPWVbaV0pJiYocj5uJiYocj1uKSxhPG4mJihhPW4pKX1lbHNle2Zvcig7KytpPG87KWlmKG51bGwhPShuPXQuY2FsbChlLGVbaV0saSkpJiZuPj1uKXtyPWE9bjticmVha31mb3IoOysraTxvOyludWxsIT0obj10LmNhbGwoZSxlW2ldLGkpKSYmKHI+biYmKHI9biksYTxuJiYoYT1uKSl9cmV0dXJuW3IsYV19LGUuc3VtPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj0wLGE9ZS5sZW5ndGgsaT0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTxhOyloKHI9K2VbaV0pJiYobis9cik7ZWxzZSBmb3IoOysraTxhOyloKHI9K3QuY2FsbChlLGVbaV0saSkpJiYobis9cik7cmV0dXJuIG59LGUubWVhbj1mdW5jdGlvbihlLHQpe3ZhciByLG49MCxhPWUubGVuZ3RoLGk9LTEsbz1hO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytpPGE7KWgocj1wKGVbaV0pKT9uKz1yOi0tbztlbHNlIGZvcig7KytpPGE7KWgocj1wKHQuY2FsbChlLGVbaV0saSkpKT9uKz1yOi0tbztpZihvKXJldHVybiBuL299LGUucXVhbnRpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj0oZS5sZW5ndGgtMSkqdCsxLG49TWF0aC5mbG9vcihyKSxhPStlW24tMV0saT1yLW47cmV0dXJuIGk/YStpKihlW25dLWEpOmF9LGUubWVkaWFuPWZ1bmN0aW9uKHQscil7dmFyIG4sYT1bXSxpPXQubGVuZ3RoLG89LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK288aTspaChuPXAodFtvXSkpJiZhLnB1c2gobik7ZWxzZSBmb3IoOysrbzxpOyloKG49cChyLmNhbGwodCx0W29dLG8pKSkmJmEucHVzaChuKTtpZihhLmxlbmd0aClyZXR1cm4gZS5xdWFudGlsZShhLnNvcnQoZiksLjUpfSxlLnZhcmlhbmNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhPWUubGVuZ3RoLGk9MCxvPTAsbD0tMSxzPTA7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2w8YTspaChyPXAoZVtsXSkpJiYobys9KG49ci1pKSooci0oaSs9bi8rK3MpKSk7ZWxzZSBmb3IoOysrbDxhOyloKHI9cCh0LmNhbGwoZSxlW2xdLGwpKSkmJihvKz0obj1yLWkpKihyLShpKz1uLysrcykpKTtpZihzPjEpcmV0dXJuIG8vKHMtMSl9LGUuZGV2aWF0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9ZS52YXJpYW5jZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHQ/TWF0aC5zcXJ0KHQpOnR9O3ZhciBtPWcoZik7ZnVuY3Rpb24gdihlKXtyZXR1cm4gZS5sZW5ndGh9ZS5iaXNlY3RMZWZ0PW0ubGVmdCxlLmJpc2VjdD1lLmJpc2VjdFJpZ2h0PW0ucmlnaHQsZS5iaXNlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gZygxPT09ZS5sZW5ndGg/ZnVuY3Rpb24odCxyKXtyZXR1cm4gZihlKHQpLHIpfTplKX0sZS5zaHVmZmxlPWZ1bmN0aW9uKGUsdCxyKXsoaT1hcmd1bWVudHMubGVuZ3RoKTwzJiYocj1lLmxlbmd0aCxpPDImJih0PTApKTtmb3IodmFyIG4sYSxpPXItdDtpOylhPU1hdGgucmFuZG9tKCkqaS0tfDAsbj1lW2krdF0sZVtpK3RdPWVbYSt0XSxlW2ErdF09bjtyZXR1cm4gZX0sZS5wZXJtdXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT1lW3Rbcl1dO3JldHVybiBufSxlLnBhaXJzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGgtMSxuPWVbMF0sYT1uZXcgQXJyYXkocjwwPzA6cik7dDxyOylhW3RdPVtuLG49ZVsrK3RdXTtyZXR1cm4gYX0sZS50cmFuc3Bvc2U9ZnVuY3Rpb24odCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIHI9LTEsbj1lLm1pbih0LHYpLGE9bmV3IEFycmF5KG4pOysrcjxuOylmb3IodmFyIGksbz0tMSxsPWFbcl09bmV3IEFycmF5KGkpOysrbzxpOylsW29dPXRbb11bcl07cmV0dXJuIGF9LGUuemlwPWZ1bmN0aW9uKCl7cmV0dXJuIGUudHJhbnNwb3NlKGFyZ3VtZW50cyl9LGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2gocik7cmV0dXJuIHR9LGUudmFsdWVzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChlW3JdKTtyZXR1cm4gdH0sZS5lbnRyaWVzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fSxlLm1lcmdlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4sYT1lLmxlbmd0aCxpPS0xLG89MDsrK2k8YTspbys9ZVtpXS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pOy0tYT49MDspZm9yKHQ9KG49ZVthXSkubGVuZ3RoOy0tdD49MDspclstLW9dPW5bdF07cmV0dXJuIHJ9O3ZhciB5PU1hdGguYWJzO2Z1bmN0aW9uIHgoZSl7Zm9yKHZhciB0PTE7ZSp0JTE7KXQqPTEwO3JldHVybiB0fWZ1bmN0aW9uIGIoZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUscix7dmFsdWU6dFtyXSxlbnVtZXJhYmxlOiExfSl9ZnVuY3Rpb24gXygpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWUucmFuZ2U9ZnVuY3Rpb24oZSx0LHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MSxhcmd1bWVudHMubGVuZ3RoPDImJih0PWUsZT0wKSksKHQtZSkvcj09MS8wKXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgcmFuZ2UiKTt2YXIgbixhPVtdLGk9eCh5KHIpKSxvPS0xO2lmKGUqPWksdCo9aSwocio9aSk8MClmb3IoOyhuPWUrciorK28pPnQ7KWEucHVzaChuL2kpO2Vsc2UgZm9yKDsobj1lK3IqKytvKTx0OylhLnB1c2gobi9pKTtyZXR1cm4gYX0sZS5tYXA9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgXztpZihlIGluc3RhbmNlb2YgXyllLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7ci5zZXQoZSx0KX0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBuLGE9LTEsaT1lLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylyLnNldChhLGVbYV0pO2Vsc2UgZm9yKDsrK2E8aTspci5zZXQodC5jYWxsKGUsbj1lW2FdLGEpLG4pfWVsc2UgZm9yKHZhciBvIGluIGUpci5zZXQobyxlW29dKTtyZXR1cm4gcn07ZnVuY3Rpb24gdyhlKXtyZXR1cm4iX19wcm90b19fIj09KGUrPSIiKXx8IlwwIj09PWVbMF0/IlwwIitlOmV9ZnVuY3Rpb24gVChlKXtyZXR1cm4iXDAiPT09KGUrPSIiKVswXT9lLnNsaWNlKDEpOmV9ZnVuY3Rpb24gTShlKXtyZXR1cm4gdyhlKWluIHRoaXMuX31mdW5jdGlvbiBrKGUpe3JldHVybihlPXcoZSkpaW4gdGhpcy5fJiZkZWxldGUgdGhpcy5fW2VdfWZ1bmN0aW9uIEEoKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcy5fKWUucHVzaChUKHQpKTtyZXR1cm4gZX1mdW5jdGlvbiBMKCl7dmFyIGU9MDtmb3IodmFyIHQgaW4gdGhpcy5fKSsrZTtyZXR1cm4gZX1mdW5jdGlvbiBTKCl7Zm9yKHZhciBlIGluIHRoaXMuXylyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBEKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZX1mdW5jdGlvbiBPKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1yLmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gbj09PXQ/ZTpufX1mdW5jdGlvbiBQKGUsdCl7aWYodCBpbiBlKXJldHVybiB0O3Q9dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO2Zvcih2YXIgcj0wLG49SS5sZW5ndGg7cjxuOysrcil7dmFyIGE9SVtyXSt0O2lmKGEgaW4gZSlyZXR1cm4gYX19YihfLHtoYXM6TSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX1t3KGUpXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX1t3KGUpXT10fSxyZW1vdmU6ayxrZXlzOkEsdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMuXyllLnB1c2godGhpcy5fW3RdKTtyZXR1cm4gZX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzLl8pZS5wdXNoKHtrZXk6VCh0KSx2YWx1ZTp0aGlzLl9bdF19KTtyZXR1cm4gZX0sc2l6ZTpMLGVtcHR5OlMsZm9yRWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcy5fKWUuY2FsbCh0aGlzLFQodCksdGhpcy5fW3RdKX19KSxlLm5lc3Q9ZnVuY3Rpb24oKXt2YXIgdCxyLG49e30sYT1bXSxpPVtdO2Z1bmN0aW9uIG8oZSxpLGwpe2lmKGw+PWEubGVuZ3RoKXJldHVybiByP3IuY2FsbChuLGkpOnQ/aS5zb3J0KHQpOmk7Zm9yKHZhciBzLGMsdSxkLGY9LTEscD1pLmxlbmd0aCxoPWFbbCsrXSxnPW5ldyBfOysrZjxwOykoZD1nLmdldChzPWgoYz1pW2ZdKSkpP2QucHVzaChjKTpnLnNldChzLFtjXSk7cmV0dXJuIGU/KGM9ZSgpLHU9ZnVuY3Rpb24odCxyKXtjLnNldCh0LG8oZSxyLGwpKX0pOihjPXt9LHU9ZnVuY3Rpb24odCxyKXtjW3RdPW8oZSxyLGwpfSksZy5mb3JFYWNoKHUpLGN9cmV0dXJuIG4ubWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8odCxlLDApfSxuLmVudHJpZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxyKXtpZihyPj1hLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1bXSxvPWlbcisrXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LGEpe24ucHVzaCh7a2V5OnQsdmFsdWVzOmUoYSxyKX0pfSkpLG8/bi5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBvKGUua2V5LHQua2V5KX0pKTpufShvKGUubWFwLHQsMCksMCl9LG4ua2V5PWZ1bmN0aW9uKGUpe3JldHVybiBhLnB1c2goZSksbn0sbi5zb3J0S2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gaVthLmxlbmd0aC0xXT1lLG59LG4uc29ydFZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LG4ucm9sbHVwPWZ1bmN0aW9uKGUpe3JldHVybiByPWUsbn0sbn0sZS5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEQ7aWYoZSlmb3IodmFyIHI9MCxuPWUubGVuZ3RoO3I8bjsrK3IpdC5hZGQoZVtyXSk7cmV0dXJuIHR9LGIoRCx7aGFzOk0sYWRkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9bdyhlKz0iIildPSEwLGV9LHJlbW92ZTprLHZhbHVlczpBLHNpemU6TCxlbXB0eTpTLGZvckVhY2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMuXyllLmNhbGwodGhpcyxUKHQpKX19KSxlLmJlaGF2aW9yPXt9LGUucmViaW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLG49MSxhPWFyZ3VtZW50cy5sZW5ndGg7KytuPGE7KWVbcj1hcmd1bWVudHNbbl1dPU8oZSx0LHRbcl0pO3JldHVybiBlfTt2YXIgST1bIndlYmtpdCIsIm1zIiwibW96IiwiTW96IiwibyIsIk8iXTtmdW5jdGlvbiBSKCl7fWZ1bmN0aW9uIHooKXt9ZnVuY3Rpb24gTihlKXt2YXIgdD1bXSxyPW5ldyBfO2Z1bmN0aW9uIG4oKXtmb3IodmFyIHIsbj10LGE9LTEsaT1uLmxlbmd0aDsrK2E8aTspKHI9blthXS5vbikmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlfXJldHVybiBuLm9uPWZ1bmN0aW9uKG4sYSl7dmFyIGksbz1yLmdldChuKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP28mJm8ub246KG8mJihvLm9uPW51bGwsdD10LnNsaWNlKDAsaT10LmluZGV4T2YobykpLmNvbmNhdCh0LnNsaWNlKGkrMSkpLHIucmVtb3ZlKG4pKSxhJiZ0LnB1c2goci5zZXQobix7b246YX0pKSxlKX0sbn1mdW5jdGlvbiBGKCl7ZS5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIEUoKXtmb3IodmFyIHQscj1lLmV2ZW50O3Q9ci5zb3VyY2VFdmVudDspcj10O3JldHVybiByfWZ1bmN0aW9uIGoodCl7Zm9yKHZhciByPW5ldyB6LG49MCxhPWFyZ3VtZW50cy5sZW5ndGg7KytuPGE7KXJbYXJndW1lbnRzW25dXT1OKHIpO3JldHVybiByLm9mPWZ1bmN0aW9uKG4sYSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RyeXt2YXIgbz1pLnNvdXJjZUV2ZW50PWUuZXZlbnQ7aS50YXJnZXQ9dCxlLmV2ZW50PWkscltpLnR5cGVdLmFwcGx5KG4sYSl9ZmluYWxseXtlLmV2ZW50PW99fX0scn1lLmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyB6LHQ9LTEscj1hcmd1bWVudHMubGVuZ3RoOysrdDxyOyllW2FyZ3VtZW50c1t0XV09TihlKTtyZXR1cm4gZX0sei5wcm90b3R5cGUub249ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmluZGV4T2YoIi4iKSxuPSIiO2lmKHI+PTAmJihuPWUuc2xpY2UocisxKSxlPWUuc2xpY2UoMCxyKSksZSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbZV0ub24obik6dGhpc1tlXS5vbihuLHQpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT10KWZvcihlIGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eShlKSYmdGhpc1tlXS5vbihuLG51bGwpO3JldHVybiB0aGlzfX0sZS5ldmVudD1udWxsLGUucmVxdW90ZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKEgsIlxcJCYiKX07dmFyIEg9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLEI9e30uX19wcm90b19fP2Z1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH06ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCllW3JdPXRbcl19O2Z1bmN0aW9uIFkoZSl7cmV0dXJuIEIoZSxHKSxlfXZhciBWPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQucXVlcnlTZWxlY3RvcihlKX0sVT1mdW5jdGlvbihlLHQpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9LHE9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLm1hdGNoZXN8fGVbUChlLCJtYXRjaGVzU2VsZWN0b3IiKV07cmV0dXJuKHE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5jYWxsKGUsdCl9KShlLHQpfTsiZnVuY3Rpb24iPT10eXBlb2YgU2l6emxlJiYoVj1mdW5jdGlvbihlLHQpe3JldHVybiBTaXp6bGUoZSx0KVswXXx8bnVsbH0sVT1TaXp6bGUscT1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yKSxlLnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBlLnNlbGVjdChhLmRvY3VtZW50RWxlbWVudCl9O3ZhciBHPWUuc2VsZWN0aW9uLnByb3RvdHlwZT1bXTtmdW5jdGlvbiBaKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24oKXtyZXR1cm4gVihlLHRoaXMpfX1mdW5jdGlvbiBXKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24oKXtyZXR1cm4gVShlLHRoaXMpfX1HLnNlbGVjdD1mdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxpPVtdO2U9WihlKTtmb3IodmFyIG89LTEsbD10aGlzLmxlbmd0aDsrK288bDspe2kucHVzaCh0PVtdKSx0LnBhcmVudE5vZGU9KG49dGhpc1tvXSkucGFyZW50Tm9kZTtmb3IodmFyIHM9LTEsYz1uLmxlbmd0aDsrK3M8YzspKGE9bltzXSk/KHQucHVzaChyPWUuY2FsbChhLGEuX19kYXRhX18scyxvKSksciYmIl9fZGF0YV9fImluIGEmJihyLl9fZGF0YV9fPWEuX19kYXRhX18pKTp0LnB1c2gobnVsbCl9cmV0dXJuIFkoaSl9LEcuc2VsZWN0QWxsPWZ1bmN0aW9uKGUpe3ZhciB0LHIsYT1bXTtlPVcoZSk7Zm9yKHZhciBpPS0xLG89dGhpcy5sZW5ndGg7KytpPG87KWZvcih2YXIgbD10aGlzW2ldLHM9LTEsYz1sLmxlbmd0aDsrK3M8YzspKHI9bFtzXSkmJihhLnB1c2godD1uKGUuY2FsbChyLHIuX19kYXRhX18scyxpKSkpLHQucGFyZW50Tm9kZT1yKTtyZXR1cm4gWShhKX07dmFyIFg9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOlgseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBRKHQscil7cmV0dXJuIHQ9ZS5ucy5xdWFsaWZ5KHQpLG51bGw9PXI/dC5sb2NhbD9mdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX06ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX06ImZ1bmN0aW9uIj09dHlwZW9mIHI/dC5sb2NhbD9mdW5jdGlvbigpe3ZhciBlPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfTpmdW5jdGlvbigpe3ZhciBlPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX06dC5sb2NhbD9mdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLHIpfTpmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQscil9fWZ1bmN0aW9uIEsoZSl7cmV0dXJuIGUudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIil9ZnVuY3Rpb24gJCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIrZS5yZXF1b3RlKHQpKyIoPzpcXHMrfCQpIiwiZyIpfWZ1bmN0aW9uIGVlKGUpe3JldHVybihlKyIiKS50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gdGUoZSx0KXt2YXIgcj0oZT1lZShlKS5tYXAocmUpKS5sZW5ndGg7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXtmb3IodmFyIG49LTEsYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsrK248cjspZVtuXSh0aGlzLGEpfTpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248cjspZVtuXSh0aGlzLHQpfX1mdW5jdGlvbiByZShlKXt2YXIgdD0kKGUpO3JldHVybiBmdW5jdGlvbihyLG4pe2lmKGE9ci5jbGFzc0xpc3QpcmV0dXJuIG4/YS5hZGQoZSk6YS5yZW1vdmUoZSk7dmFyIGE9ci5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiO24/KHQubGFzdEluZGV4PTAsdC50ZXN0KGEpfHxyLnNldEF0dHJpYnV0ZSgiY2xhc3MiLEsoYSsiICIrZSkpKTpyLnNldEF0dHJpYnV0ZSgiY2xhc3MiLEsoYS5yZXBsYWNlKHQsIiAiKSkpfX1mdW5jdGlvbiBuZShlLHQscil7cmV0dXJuIG51bGw9PXQ/ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfToiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX06ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gYWUoZSx0KXtyZXR1cm4gbnVsbD09dD9mdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfToiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfTpmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gaWUodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDoodD1lLm5zLnF1YWxpZnkodCkpLmxvY2FsP2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX06ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PVgmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVg/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKHIsdCl9fWZ1bmN0aW9uIG9lKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gbGUoZSl7cmV0dXJue19fZGF0YV9fOmV9fWZ1bmN0aW9uIHNlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBxKHRoaXMsZSl9fWZ1bmN0aW9uIGNlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwoZT1mKSxmdW5jdGlvbih0LHIpe3JldHVybiB0JiZyP2UodC5fX2RhdGFfXyxyLl9fZGF0YV9fKTohdC0hcn19ZnVuY3Rpb24gdWUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBhLGk9ZVtyXSxvPTAsbD1pLmxlbmd0aDtvPGw7bysrKShhPWlbb10pJiZ0KGEsbyxyKTtyZXR1cm4gZX1mdW5jdGlvbiBkZShlKXtyZXR1cm4gQihlLGZlKSxlfWUubnM9e3ByZWZpeDpKLHF1YWxpZnk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleE9mKCI6Iikscj1lO3JldHVybiB0Pj0wJiYieG1sbnMiIT09KHI9ZS5zbGljZSgwLHQpKSYmKGU9ZS5zbGljZSh0KzEpKSxKLmhhc093blByb3BlcnR5KHIpP3tzcGFjZTpKW3JdLGxvY2FsOmV9OmV9fSxHLmF0dHI9ZnVuY3Rpb24odCxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIG49dGhpcy5ub2RlKCk7cmV0dXJuKHQ9ZS5ucy5xdWFsaWZ5KHQpKS5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUodCl9Zm9yKHIgaW4gdCl0aGlzLmVhY2goUShyLHRbcl0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKFEodCxyKSl9LEcuY2xhc3NlZD1mdW5jdGlvbihlLHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgcj10aGlzLm5vZGUoKSxuPShlPWVlKGUpKS5sZW5ndGgsYT0tMTtpZih0PXIuY2xhc3NMaXN0KXtmb3IoOysrYTxuOylpZighdC5jb250YWlucyhlW2FdKSlyZXR1cm4hMX1lbHNlIGZvcih0PXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysrYTxuOylpZighJChlW2FdKS50ZXN0KHQpKXJldHVybiExO3JldHVybiEwfWZvcih0IGluIGUpdGhpcy5lYWNoKHRlKHQsZVt0XSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2godGUoZSx0KSl9LEcuc3R5bGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpe2ZvcihyIGluIG48MiYmKHQ9IiIpLGUpdGhpcy5lYWNoKG5lKHIsZVtyXSx0KSk7cmV0dXJuIHRoaXN9aWYobjwyKXt2YXIgYT10aGlzLm5vZGUoKTtyZXR1cm4gbyhhKS5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1yPSIifXJldHVybiB0aGlzLmVhY2gobmUoZSx0LHIpKX0sRy5wcm9wZXJ0eT1mdW5jdGlvbihlLHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB0aGlzLm5vZGUoKVtlXTtmb3IodCBpbiBlKXRoaXMuZWFjaChhZSh0LGVbdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKGFlKGUsdCkpfSxHLnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT10PyIiOnR9Om51bGw9PWU/ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxHLmh0bWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09dD8iIjp0fTpudWxsPT1lP2Z1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9IiJ9OmZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX0pOnRoaXMubm9kZSgpLmlubmVySFRNTH0sRy5hcHBlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9aWUoZSksdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxHLmluc2VydD1mdW5jdGlvbihlLHQpe3JldHVybiBlPWllKGUpLHQ9Wih0KSx0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxHLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2gob2UpfSxHLmRhdGE9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGE9LTEsaT10aGlzLmxlbmd0aDtpZighYXJndW1lbnRzLmxlbmd0aCl7Zm9yKGU9bmV3IEFycmF5KGk9KHI9dGhpc1swXSkubGVuZ3RoKTsrK2E8aTspKG49clthXSkmJihlW2FdPW4uX19kYXRhX18pO3JldHVybiBlfWZ1bmN0aW9uIG8oZSxyKXt2YXIgbixhLGksbz1lLmxlbmd0aCx1PXIubGVuZ3RoLGQ9TWF0aC5taW4obyx1KSxmPW5ldyBBcnJheSh1KSxwPW5ldyBBcnJheSh1KSxoPW5ldyBBcnJheShvKTtpZih0KXt2YXIgZyxtPW5ldyBfLHY9bmV3IEFycmF5KG8pO2ZvcihuPS0xOysrbjxvOykoYT1lW25dKSYmKG0uaGFzKGc9dC5jYWxsKGEsYS5fX2RhdGFfXyxuKSk/aFtuXT1hOm0uc2V0KGcsYSksdltuXT1nKTtmb3Iobj0tMTsrK248dTspKGE9bS5nZXQoZz10LmNhbGwocixpPXJbbl0sbikpKT8hMCE9PWEmJihmW25dPWEsYS5fX2RhdGFfXz1pKTpwW25dPWxlKGkpLG0uc2V0KGcsITApO2ZvcihuPS0xOysrbjxvOyluIGluIHYmJiEwIT09bS5nZXQodltuXSkmJihoW25dPWVbbl0pfWVsc2V7Zm9yKG49LTE7KytuPGQ7KWE9ZVtuXSxpPXJbbl0sYT8oYS5fX2RhdGFfXz1pLGZbbl09YSk6cFtuXT1sZShpKTtmb3IoO248dTsrK24pcFtuXT1sZShyW25dKTtmb3IoO248bzsrK24paFtuXT1lW25dfXAudXBkYXRlPWYscC5wYXJlbnROb2RlPWYucGFyZW50Tm9kZT1oLnBhcmVudE5vZGU9ZS5wYXJlbnROb2RlLGwucHVzaChwKSxzLnB1c2goZiksYy5wdXNoKGgpfXZhciBsPWRlKFtdKSxzPVkoW10pLGM9WShbXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpZm9yKDsrK2E8aTspbyhyPXRoaXNbYV0sZS5jYWxsKHIsci5wYXJlbnROb2RlLl9fZGF0YV9fLGEpKTtlbHNlIGZvcig7KythPGk7KW8ocj10aGlzW2FdLGUpO3JldHVybiBzLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGx9LHMuZXhpdD1mdW5jdGlvbigpe3JldHVybiBjfSxzfSxHLmRhdHVtPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIpfSxHLmZpbHRlcj1mdW5jdGlvbihlKXt2YXIgdCxyLG4sYT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgZSYmKGU9c2UoZSkpO2Zvcih2YXIgaT0wLG89dGhpcy5sZW5ndGg7aTxvO2krKyl7YS5wdXNoKHQ9W10pLHQucGFyZW50Tm9kZT0ocj10aGlzW2ldKS5wYXJlbnROb2RlO2Zvcih2YXIgbD0wLHM9ci5sZW5ndGg7bDxzO2wrKykobj1yW2xdKSYmZS5jYWxsKG4sbi5fX2RhdGFfXyxsLGkpJiZ0LnB1c2gobil9cmV0dXJuIFkoYSl9LEcub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTEsdD10aGlzLmxlbmd0aDsrK2U8dDspZm9yKHZhciByLG49dGhpc1tlXSxhPW4ubGVuZ3RoLTEsaT1uW2FdOy0tYT49MDspKHI9blthXSkmJihpJiZpIT09ci5uZXh0U2libGluZyYmaS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGkpLGk9cik7cmV0dXJuIHRoaXN9LEcuc29ydD1mdW5jdGlvbihlKXtlPWNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIHQ9LTEscj10aGlzLmxlbmd0aDsrK3Q8cjspdGhpc1t0XS5zb3J0KGUpO3JldHVybiB0aGlzLm9yZGVyKCl9LEcuZWFjaD1mdW5jdGlvbihlKXtyZXR1cm4gdWUodGhpcywoZnVuY3Rpb24odCxyLG4pe2UuY2FsbCh0LHQuX19kYXRhX18scixuKX0pKX0sRy5jYWxsPWZ1bmN0aW9uKGUpe3ZhciB0PW4oYXJndW1lbnRzKTtyZXR1cm4gZS5hcHBseSh0WzBdPXRoaXMsdCksdGhpc30sRy5lbXB0eT1mdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sRy5ub2RlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD10aGlzLmxlbmd0aDtlPHQ7ZSsrKWZvcih2YXIgcj10aGlzW2VdLG49MCxhPXIubGVuZ3RoO248YTtuKyspe3ZhciBpPXJbbl07aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH0sRy5zaXplPWZ1bmN0aW9uKCl7dmFyIGU9MDtyZXR1cm4gdWUodGhpcywoZnVuY3Rpb24oKXsrK2V9KSksZX07dmFyIGZlPVtdO2Z1bmN0aW9uIHBlKGUpe3ZhciB0LHI7cmV0dXJuIGZ1bmN0aW9uKG4sYSxpKXt2YXIgbyxsPWVbaV0udXBkYXRlLHM9bC5sZW5ndGg7Zm9yKGkhPXImJihyPWksdD0wKSxhPj10JiYodD1hKzEpOyEobz1sW3RdKSYmKyt0PHM7KTtyZXR1cm4gb319ZnVuY3Rpb24gaGUodCxyLGEpe3ZhciBpPSJfX29uIit0LG89dC5pbmRleE9mKCIuIiksbD1tZTtvPjAmJih0PXQuc2xpY2UoMCxvKSk7dmFyIHM9Z2UuZ2V0KHQpO2Z1bmN0aW9uIGMoKXt2YXIgZT10aGlzW2ldO2UmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxlLGUuJCksZGVsZXRlIHRoaXNbaV0pfXJldHVybiBzJiYodD1zLGw9dmUpLG8/cj9mdW5jdGlvbigpe3ZhciBlPWwocixuKGFyZ3VtZW50cykpO2MuY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIodCx0aGlzW2ldPWUsZS4kPWEpLGUuXz1yfTpjOnI/UjpmdW5jdGlvbigpe3ZhciByLG49bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIitlLnJlcXVvdGUodCkrIiQiKTtmb3IodmFyIGEgaW4gdGhpcylpZihyPWEubWF0Y2gobikpe3ZhciBpPXRoaXNbYV07dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHJbMV0saSxpLiQpLGRlbGV0ZSB0aGlzW2FdfX19ZS5zZWxlY3Rpb24uZW50ZXI9ZGUsZS5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPWZlLGZlLmFwcGVuZD1HLmFwcGVuZCxmZS5lbXB0eT1HLmVtcHR5LGZlLm5vZGU9Ry5ub2RlLGZlLmNhbGw9Ry5jYWxsLGZlLnNpemU9Ry5zaXplLGZlLnNlbGVjdD1mdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGEsaSxvPVtdLGw9LTEscz10aGlzLmxlbmd0aDsrK2w8czspe249KGE9dGhpc1tsXSkudXBkYXRlLG8ucHVzaCh0PVtdKSx0LnBhcmVudE5vZGU9YS5wYXJlbnROb2RlO2Zvcih2YXIgYz0tMSx1PWEubGVuZ3RoOysrYzx1OykoaT1hW2NdKT8odC5wdXNoKG5bY109cj1lLmNhbGwoYS5wYXJlbnROb2RlLGkuX19kYXRhX18sYyxsKSksci5fX2RhdGFfXz1pLl9fZGF0YV9fKTp0LnB1c2gobnVsbCl9cmV0dXJuIFkobyl9LGZlLmluc2VydD1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PXBlKHRoaXMpKSxHLmluc2VydC5jYWxsKHRoaXMsZSx0KX0sZS5zZWxlY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlPyh0PVtWKGUsYSldKS5wYXJlbnROb2RlPWEuZG9jdW1lbnRFbGVtZW50Oih0PVtlXSkucGFyZW50Tm9kZT1pKGUpLFkoW3RdKX0sZS5zZWxlY3RBbGw9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlPyh0PW4oVShlLGEpKSkucGFyZW50Tm9kZT1hLmRvY3VtZW50RWxlbWVudDoodD1uKGUpKS5wYXJlbnROb2RlPW51bGwsWShbdF0pfSxHLm9uPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXtmb3IociBpbiBuPDImJih0PSExKSxlKXRoaXMuZWFjaChoZShyLGVbcl0sdCkpO3JldHVybiB0aGlzfWlmKG48MilyZXR1cm4obj10aGlzLm5vZGUoKVsiX19vbiIrZV0pJiZuLl87cj0hMX1yZXR1cm4gdGhpcy5lYWNoKGhlKGUsdCxyKSl9O3ZhciBnZT1lLm1hcCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KTtmdW5jdGlvbiBtZSh0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgYT1lLmV2ZW50O2UuZXZlbnQ9bixyWzBdPXRoaXMuX19kYXRhX187dHJ5e3QuYXBwbHkodGhpcyxyKX1maW5hbGx5e2UuZXZlbnQ9YX19fWZ1bmN0aW9uIHZlKGUsdCl7dmFyIHI9bWUoZSx0KTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZWxhdGVkVGFyZ2V0O3QmJih0PT09dGhpc3x8OCZ0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8ci5jYWxsKHRoaXMsZSl9fWEmJmdlLmZvckVhY2goKGZ1bmN0aW9uKGUpeyJvbiIrZSBpbiBhJiZnZS5yZW1vdmUoZSl9KSk7dmFyIHllLHhlPTA7ZnVuY3Rpb24gYmUodCl7dmFyIHI9Ii5kcmFnc3VwcHJlc3MtIisgKyt4ZSxuPSJjbGljayIrcixhPWUuc2VsZWN0KG8odCkpLm9uKCJ0b3VjaG1vdmUiK3IsRikub24oImRyYWdzdGFydCIrcixGKS5vbigic2VsZWN0c3RhcnQiK3IsRik7aWYobnVsbD09eWUmJih5ZT0hKCJvbnNlbGVjdHN0YXJ0ImluIHQpJiZQKHQuc3R5bGUsInVzZXJTZWxlY3QiKSkseWUpe3ZhciBsPWkodCkuc3R5bGUscz1sW3llXTtsW3llXT0ibm9uZSJ9cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGEub24ocixudWxsKSx5ZSYmKGxbeWVdPXMpLGUpe3ZhciB0PWZ1bmN0aW9uKCl7YS5vbihuLG51bGwpfTthLm9uKG4sKGZ1bmN0aW9uKCl7RigpLHQoKX0pLCEwKSxzZXRUaW1lb3V0KHQsMCl9fX1lLm1vdXNlPWZ1bmN0aW9uKGUpe3JldHVybiB3ZShlLEUoKSl9O3ZhciBfZT10aGlzLm5hdmlnYXRvciYmL1dlYktpdC8udGVzdCh0aGlzLm5hdmlnYXRvci51c2VyQWdlbnQpPy0xOjA7ZnVuY3Rpb24gd2UodCxyKXtyLmNoYW5nZWRUb3VjaGVzJiYocj1yLmNoYW5nZWRUb3VjaGVzWzBdKTt2YXIgbj10Lm93bmVyU1ZHRWxlbWVudHx8dDtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgYT1uLmNyZWF0ZVNWR1BvaW50KCk7aWYoX2U8MCl7dmFyIGk9byh0KTtpZihpLnNjcm9sbFh8fGkuc2Nyb2xsWSl7dmFyIGw9KG49ZS5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpKVswXVswXS5nZXRTY3JlZW5DVE0oKTtfZT0hKGwuZnx8bC5lKSxuLnJlbW92ZSgpfX1yZXR1cm4gX2U/KGEueD1yLnBhZ2VYLGEueT1yLnBhZ2VZKTooYS54PXIuY2xpZW50WCxhLnk9ci5jbGllbnRZKSxbKGE9YS5tYXRyaXhUcmFuc2Zvcm0odC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGEueV19dmFyIHM9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bci5jbGllbnRYLXMubGVmdC10LmNsaWVudExlZnQsci5jbGllbnRZLXMudG9wLXQuY2xpZW50VG9wXX1mdW5jdGlvbiBUZSgpe3JldHVybiBlLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9ZS50b3VjaD1mdW5jdGlvbihlLHQscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9RSgpLmNoYW5nZWRUb3VjaGVzKSx0KWZvcih2YXIgbixhPTAsaT10Lmxlbmd0aDthPGk7KythKWlmKChuPXRbYV0pLmlkZW50aWZpZXI9PT1yKXJldHVybiB3ZShlLG4pfSxlLmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXt2YXIgdD1qKGksImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIikscj1udWxsLG49bChSLGUubW91c2UsbywibW91c2Vtb3ZlIiwibW91c2V1cCIpLGE9bChUZSxlLnRvdWNoLEMsInRvdWNobW92ZSIsInRvdWNoZW5kIik7ZnVuY3Rpb24gaSgpe3RoaXMub24oIm1vdXNlZG93bi5kcmFnIixuKS5vbigidG91Y2hzdGFydC5kcmFnIixhKX1mdW5jdGlvbiBsKG4sYSxpLG8sbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsYz10aGlzLHU9ZS5ldmVudC50YXJnZXQuY29ycmVzcG9uZGluZ0VsZW1lbnR8fGUuZXZlbnQudGFyZ2V0LGQ9Yy5wYXJlbnROb2RlLGY9dC5vZihjLGFyZ3VtZW50cykscD0wLGg9bigpLGc9Ii5kcmFnIisobnVsbD09aD8iIjoiLSIraCksbT1lLnNlbGVjdChpKHUpKS5vbihvK2cseCkub24obCtnLGIpLHY9YmUodSkseT1hKGQsaCk7ZnVuY3Rpb24geCgpe3ZhciBlLHQscj1hKGQsaCk7ciYmKGU9clswXS15WzBdLHQ9clsxXS15WzFdLHB8PWV8dCx5PXIsZih7dHlwZToiZHJhZyIseDpyWzBdK3NbMF0seTpyWzFdK3NbMV0sZHg6ZSxkeTp0fSkpfWZ1bmN0aW9uIGIoKXthKGQsaCkmJihtLm9uKG8rZyxudWxsKS5vbihsK2csbnVsbCksdihwKSxmKHt0eXBlOiJkcmFnZW5kIn0pKX1zPXI/WyhzPXIuYXBwbHkoYyxhcmd1bWVudHMpKS54LXlbMF0scy55LXlbMV1dOlswLDBdLGYoe3R5cGU6ImRyYWdzdGFydCJ9KX19cmV0dXJuIGkub3JpZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsaSk6cn0sZS5yZWJpbmQoaSx0LCJvbiIpfSxlLnRvdWNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD1FKCkudG91Y2hlcyksdD9uKHQpLm1hcCgoZnVuY3Rpb24odCl7dmFyIHI9d2UoZSx0KTtyZXR1cm4gci5pZGVudGlmaWVyPXQuaWRlbnRpZmllcixyfSkpOltdfTt2YXIgTWU9MWUtNixrZT1NYXRoLlBJLEFlPTIqa2UsTGU9QWUtTWUsU2U9a2UvMixEZT1rZS8xODAsQ2U9MTgwL2tlO2Z1bmN0aW9uIE9lKGUpe3JldHVybiBlPjE/U2U6ZTwtMT8tU2U6TWF0aC5hc2luKGUpfWZ1bmN0aW9uIFBlKGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfXZhciBJZT1NYXRoLlNRUlQyO2UuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhPWVbMF0saT1lWzFdLG89ZVsyXSxsPXRbMF0scz10WzFdLGM9dFsyXSx1PWwtYSxkPXMtaSxmPXUqdStkKmQ7aWYoZjwxZS0xMiluPU1hdGgubG9nKGMvbykvSWUscj1mdW5jdGlvbihlKXtyZXR1cm5bYStlKnUsaStlKmQsbypNYXRoLmV4cChJZSplKm4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoZiksaD0oYypjLW8qbys0KmYpLygyKm8qMipwKSxnPShjKmMtbypvLTQqZikvKDIqYyoyKnApLG09TWF0aC5sb2coTWF0aC5zcXJ0KGgqaCsxKS1oKSx2PU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7bj0odi1tKS9JZSxyPWZ1bmN0aW9uKGUpe3ZhciB0LHI9ZSpuLGw9UGUobSkscz1vLygyKnApKihsKih0PUllKnIrbSwoKHQ9TWF0aC5leHAoMip0KSktMSkvKHQrMSkpLWZ1bmN0aW9uKGUpe3JldHVybigoZT1NYXRoLmV4cChlKSktMS9lKS8yfShtKSk7cmV0dXJuW2Ercyp1LGkrcypkLG8qbC9QZShJZSpyK20pXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sZS5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7dmFyIHQscixuLGksbCxzLGMsdSxkLGY9e3g6MCx5OjAsazoxfSxwPVs5NjAsNTAwXSxoPU5lLGc9MjUwLG09MCx2PSJtb3VzZWRvd24uem9vbSIseT0ibW91c2Vtb3ZlLnpvb20iLHg9Im1vdXNldXAuem9vbSIsYj0idG91Y2hzdGFydC56b29tIixfPWoodywiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKTtmdW5jdGlvbiB3KGUpe2Uub24odixPKS5vbih6ZSsiLnpvb20iLEkpLm9uKCJkYmxjbGljay56b29tIixSKS5vbihiLFApfWZ1bmN0aW9uIFQoZSl7cmV0dXJuWyhlWzBdLWYueCkvZi5rLChlWzFdLWYueSkvZi5rXX1mdW5jdGlvbiBNKGUpe2Yuaz1NYXRoLm1heChoWzBdLE1hdGgubWluKGhbMV0sZSkpfWZ1bmN0aW9uIGsoZSx0KXt0PWZ1bmN0aW9uKGUpe3JldHVybltlWzBdKmYuaytmLngsZVsxXSpmLmsrZi55XX0odCksZi54Kz1lWzBdLXRbMF0sZi55Kz1lWzFdLXRbMV19ZnVuY3Rpb24gQSh0LG4sYSxpKXt0Ll9fY2hhcnRfXz17eDpmLngseTpmLnksazpmLmt9LE0oTWF0aC5wb3coMixpKSksayhyPW4sYSksdD1lLnNlbGVjdCh0KSxnPjAmJih0PXQudHJhbnNpdGlvbigpLmR1cmF0aW9uKGcpKSx0LmNhbGwody5ldmVudCl9ZnVuY3Rpb24gTCgpe2MmJmMuZG9tYWluKHMucmFuZ2UoKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybihlLWYueCkvZi5rfSkpLm1hcChzLmludmVydCkpLGQmJmQuZG9tYWluKHUucmFuZ2UoKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybihlLWYueSkvZi5rfSkpLm1hcCh1LmludmVydCkpfWZ1bmN0aW9uIFMoZSl7bSsrfHxlKHt0eXBlOiJ6b29tc3RhcnQifSl9ZnVuY3Rpb24gRChlKXtMKCksZSh7dHlwZToiem9vbSIsc2NhbGU6Zi5rLHRyYW5zbGF0ZTpbZi54LGYueV19KX1mdW5jdGlvbiBDKGUpey0tbXx8KGUoe3R5cGU6Inpvb21lbmQifSkscj1udWxsKX1mdW5jdGlvbiBPKCl7dmFyIHQ9dGhpcyxyPV8ub2YodCxhcmd1bWVudHMpLG49MCxhPWUuc2VsZWN0KG8odCkpLm9uKHkscykub24oeCxjKSxpPVQoZS5tb3VzZSh0KSksbD1iZSh0KTtmdW5jdGlvbiBzKCl7bj0xLGsoZS5tb3VzZSh0KSxpKSxEKHIpfWZ1bmN0aW9uIGMoKXthLm9uKHksbnVsbCkub24oeCxudWxsKSxsKG4pLEMocil9emEuY2FsbCh0KSxTKHIpfWZ1bmN0aW9uIFAoKXt2YXIgdCxyPXRoaXMsbj1fLm9mKHIsYXJndW1lbnRzKSxhPXt9LGk9MCxvPSIuem9vbS0iK2UuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcixzPSJ0b3VjaG1vdmUiK28sYz0idG91Y2hlbmQiK28sdT1bXSxkPWUuc2VsZWN0KHIpLHA9YmUocik7ZnVuY3Rpb24gaCgpe3ZhciBuPWUudG91Y2hlcyhyKTtyZXR1cm4gdD1mLmssbi5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlkZW50aWZpZXIgaW4gYSYmKGFbZS5pZGVudGlmaWVyXT1UKGUpKX0pKSxufWZ1bmN0aW9uIGcoKXt2YXIgdD1lLmV2ZW50LnRhcmdldDtlLnNlbGVjdCh0KS5vbihzLG0pLm9uKGMseSksdS5wdXNoKHQpO2Zvcih2YXIgbj1lLmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89MCxkPW4ubGVuZ3RoO288ZDsrK28pYVtuW29dLmlkZW50aWZpZXJdPW51bGw7dmFyIHA9aCgpLGc9RGF0ZS5ub3coKTtpZigxPT09cC5sZW5ndGgpe2lmKGctbDw1MDApe3ZhciB2PXBbMF07QShyLHYsYVt2LmlkZW50aWZpZXJdLE1hdGguZmxvb3IoTWF0aC5sb2coZi5rKS9NYXRoLkxOMikrMSksRigpfWw9Z31lbHNlIGlmKHAubGVuZ3RoPjEpe3Y9cFswXTt2YXIgeD1wWzFdLGI9dlswXS14WzBdLF89dlsxXS14WzFdO2k9YipiK18qX319ZnVuY3Rpb24gbSgpe3ZhciBvLHMsYyx1LGQ9ZS50b3VjaGVzKHIpO3phLmNhbGwocik7Zm9yKHZhciBmPTAscD1kLmxlbmd0aDtmPHA7KytmLHU9bnVsbClpZihjPWRbZl0sdT1hW2MuaWRlbnRpZmllcl0pe2lmKHMpYnJlYWs7bz1jLHM9dX1pZih1KXt2YXIgaD0oaD1jWzBdLW9bMF0pKmgrKGg9Y1sxXS1vWzFdKSpoLGc9aSYmTWF0aC5zcXJ0KGgvaSk7bz1bKG9bMF0rY1swXSkvMiwob1sxXStjWzFdKS8yXSxzPVsoc1swXSt1WzBdKS8yLChzWzFdK3VbMV0pLzJdLE0oZyp0KX1sPW51bGwsayhvLHMpLEQobil9ZnVuY3Rpb24geSgpe2lmKGUuZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgdD1lLmV2ZW50LmNoYW5nZWRUb3VjaGVzLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpZGVsZXRlIGFbdFtyXS5pZGVudGlmaWVyXTtmb3IodmFyIGwgaW4gYSlyZXR1cm4gdm9pZCBoKCl9ZS5zZWxlY3RBbGwodSkub24obyxudWxsKSxkLm9uKHYsTykub24oYixQKSxwKCksQyhuKX1nKCksUyhuKSxkLm9uKHYsbnVsbCkub24oYixnKX1mdW5jdGlvbiBJKCl7dmFyIGE9Xy5vZih0aGlzLGFyZ3VtZW50cyk7aT9jbGVhclRpbWVvdXQoaSk6KHphLmNhbGwodGhpcyksdD1UKHI9bnx8ZS5tb3VzZSh0aGlzKSksUyhhKSksaT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2k9bnVsbCxDKGEpfSksNTApLEYoKSxNKE1hdGgucG93KDIsLjAwMipSZSgpKSpmLmspLGsocix0KSxEKGEpfWZ1bmN0aW9uIFIoKXt2YXIgdD1lLm1vdXNlKHRoaXMpLHI9TWF0aC5sb2coZi5rKS9NYXRoLkxOMjtBKHRoaXMsdCxUKHQpLGUuZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWlsKHIpLTE6TWF0aC5mbG9vcihyKSsxKX1yZXR1cm4gemV8fCh6ZT0ib253aGVlbCJpbiBhPyhSZT1mdW5jdGlvbigpe3JldHVybi1lLmV2ZW50LmRlbHRhWSooZS5ldmVudC5kZWx0YU1vZGU/MTIwOjEpfSwid2hlZWwiKToib25tb3VzZXdoZWVsImluIGE/KFJlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZXZlbnQud2hlZWxEZWx0YX0sIm1vdXNld2hlZWwiKTooUmU9ZnVuY3Rpb24oKXtyZXR1cm4tZS5ldmVudC5kZXRhaWx9LCJNb3pNb3VzZVBpeGVsU2Nyb2xsIikpLHcuZXZlbnQ9ZnVuY3Rpb24odCl7dC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PV8ub2YodGhpcyxhcmd1bWVudHMpLG49ZjtFYT9lLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsKGZ1bmN0aW9uKCl7Zj10aGlzLl9fY2hhcnRfX3x8e3g6MCx5OjAsazoxfSxTKHQpfSkpLnR3ZWVuKCJ6b29tOnpvb20iLChmdW5jdGlvbigpe3ZhciBhPXBbMF0saT1wWzFdLG89cj9yWzBdOmEvMixsPXI/clsxXTppLzIscz1lLmludGVycG9sYXRlWm9vbShbKG8tZi54KS9mLmssKGwtZi55KS9mLmssYS9mLmtdLFsoby1uLngpL24uaywobC1uLnkpL24uayxhL24ua10pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1zKGUpLG49YS9yWzJdO3RoaXMuX19jaGFydF9fPWY9e3g6by1yWzBdKm4seTpsLXJbMV0qbixrOm59LEQodCl9fSkpLmVhY2goImludGVycnVwdC56b29tIiwoZnVuY3Rpb24oKXtDKHQpfSkpLmVhY2goImVuZC56b29tIiwoZnVuY3Rpb24oKXtDKHQpfSkpOih0aGlzLl9fY2hhcnRfXz1mLFModCksRCh0KSxDKHQpKX0pKX0sdy50cmFuc2xhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9e3g6K2VbMF0seTorZVsxXSxrOmYua30sTCgpLHcpOltmLngsZi55XX0sdy5zY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj17eDpmLngseTpmLnksazpudWxsfSxNKCtlKSxMKCksdyk6Zi5rfSx3LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPW51bGw9PWU/TmU6WytlWzBdLCtlWzFdXSx3KTpofSx3LmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lJiZbK2VbMF0sK2VbMV1dLHcpOm59LHcuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1lJiZbK2VbMF0sK2VbMV1dLHcpOnB9LHcuZHVyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K2Usdyk6Z30sdy54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPWUscz1lLmNvcHkoKSxmPXt4OjAseTowLGs6MX0sdyk6Y30sdy55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPWUsdT1lLmNvcHkoKSxmPXt4OjAseTowLGs6MX0sdyk6ZH0sZS5yZWJpbmQodyxfLCJvbiIpfTt2YXIgUmUsemUsTmU9WzAsMS8wXTtmdW5jdGlvbiBGZSgpe31mdW5jdGlvbiBFZShlLHQscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBFZT8odGhpcy5oPStlLHRoaXMucz0rdCx2b2lkKHRoaXMubD0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj9lIGluc3RhbmNlb2YgRWU/bmV3IEVlKGUuaCxlLnMsZS5sKTpudCgiIitlLGF0LEVlKTpuZXcgRWUoZSx0LHIpfWUuY29sb3I9RmUsRmUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LGUuaHNsPUVlO3ZhciBqZT1FZS5wcm90b3R5cGU9bmV3IEZlO2Z1bmN0aW9uIEhlKGUsdCxyKXt2YXIgbixhO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIE1hdGgucm91bmQoMjU1KmZ1bmN0aW9uKGUpe3JldHVybiBlPjM2MD9lLT0zNjA6ZTwwJiYoZSs9MzYwKSxlPDYwP24rKGEtbikqZS82MDplPDE4MD9hOmU8MjQwP24rKGEtbikqKDI0MC1lKS82MDpufShlKSl9cmV0dXJuIGU9aXNOYU4oZSk/MDooZSU9MzYwKTwwP2UrMzYwOmUsdD1pc05hTih0KXx8dDwwPzA6dD4xPzE6dCxuPTIqKHI9cjwwPzA6cj4xPzE6ciktKGE9cjw9LjU/ciooMSt0KTpyK3Qtcip0KSxuZXcgS2UoaShlKzEyMCksaShlKSxpKGUtMTIwKSl9ZnVuY3Rpb24gQmUodCxyLG4pe3JldHVybiB0aGlzIGluc3RhbmNlb2YgQmU/KHRoaXMuaD0rdCx0aGlzLmM9K3Isdm9pZCh0aGlzLmw9K24pKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIEJlP25ldyBCZSh0LmgsdC5jLHQubCk6V2UodCBpbnN0YW5jZW9mIFVlP3QubDoodD1pdCgodD1lLnJnYih0KSkucix0LmcsdC5iKSkubCx0LmEsdC5iKTpuZXcgQmUodCxyLG4pfWplLmJyaWdodGVyPWZ1bmN0aW9uKGUpe3JldHVybiBlPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/ZToxKSxuZXcgRWUodGhpcy5oLHRoaXMucyx0aGlzLmwvZSl9LGplLmRhcmtlcj1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP2U6MSksbmV3IEVlKHRoaXMuaCx0aGlzLnMsZSp0aGlzLmwpfSxqZS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gSGUodGhpcy5oLHRoaXMucyx0aGlzLmwpfSxlLmhjbD1CZTt2YXIgWWU9QmUucHJvdG90eXBlPW5ldyBGZTtmdW5jdGlvbiBWZShlLHQscil7cmV0dXJuIGlzTmFOKGUpJiYoZT0wKSxpc05hTih0KSYmKHQ9MCksbmV3IFVlKHIsTWF0aC5jb3MoZSo9RGUpKnQsTWF0aC5zaW4oZSkqdCl9ZnVuY3Rpb24gVWUoZSx0LHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgVWU/KHRoaXMubD0rZSx0aGlzLmE9K3Qsdm9pZCh0aGlzLmI9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/ZSBpbnN0YW5jZW9mIFVlP25ldyBVZShlLmwsZS5hLGUuYik6ZSBpbnN0YW5jZW9mIEJlP1ZlKGUuaCxlLmMsZS5sKTppdCgoZT1LZShlKSkucixlLmcsZS5iKTpuZXcgVWUoZSx0LHIpfVllLmJyaWdodGVyPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQmUodGhpcy5oLHRoaXMuYyxNYXRoLm1pbigxMDAsdGhpcy5sK3FlKihhcmd1bWVudHMubGVuZ3RoP2U6MSkpKX0sWWUuZGFya2VyPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQmUodGhpcy5oLHRoaXMuYyxNYXRoLm1heCgwLHRoaXMubC1xZSooYXJndW1lbnRzLmxlbmd0aD9lOjEpKSl9LFllLnJnYj1mdW5jdGlvbigpe3JldHVybiBWZSh0aGlzLmgsdGhpcy5jLHRoaXMubCkucmdiKCl9LGUubGFiPVVlO3ZhciBxZT0xOCxHZT1VZS5wcm90b3R5cGU9bmV3IEZlO2Z1bmN0aW9uIFplKGUsdCxyKXt2YXIgbj0oZSsxNikvMTE2LGE9bit0LzUwMCxpPW4tci8yMDA7cmV0dXJuIG5ldyBLZShRZSgzLjI0MDQ1NDIqKGE9Ljk1MDQ3KlhlKGEpKS0xLjUzNzEzODUqKG49MSpYZShuKSktLjQ5ODUzMTQqKGk9MS4wODg4MypYZShpKSkpLFFlKC0uOTY5MjY2KmErMS44NzYwMTA4Km4rLjA0MTU1NippKSxRZSguMDU1NjQzNCphLS4yMDQwMjU5Km4rMS4wNTcyMjUyKmkpKX1mdW5jdGlvbiBXZShlLHQscil7cmV0dXJuIGU+MD9uZXcgQmUoTWF0aC5hdGFuMihyLHQpKkNlLE1hdGguc3FydCh0KnQrcipyKSxlKTpuZXcgQmUoTmFOLE5hTixlKX1mdW5jdGlvbiBYZShlKXtyZXR1cm4gZT4uMjA2ODkzMDM0P2UqZSplOihlLTQvMjkpLzcuNzg3MDM3fWZ1bmN0aW9uIEplKGUpe3JldHVybiBlPi4wMDg4NTY/TWF0aC5wb3coZSwxLzMpOjcuNzg3MDM3KmUrNC8yOX1mdW5jdGlvbiBRZShlKXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqKGU8PS4wMDMwND8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpKX1mdW5jdGlvbiBLZShlLHQscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBLZT8odGhpcy5yPX5+ZSx0aGlzLmc9fn50LHZvaWQodGhpcy5iPX5+cikpOmFyZ3VtZW50cy5sZW5ndGg8Mj9lIGluc3RhbmNlb2YgS2U/bmV3IEtlKGUucixlLmcsZS5iKTpudCgiIitlLEtlLEhlKTpuZXcgS2UoZSx0LHIpfWZ1bmN0aW9uICRlKGUpe3JldHVybiBuZXcgS2UoZT4+MTYsZT4+OCYyNTUsMjU1JmUpfWZ1bmN0aW9uIGV0KGUpe3JldHVybiAkZShlKSsiIn1HZS5icmlnaHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVlKE1hdGgubWluKDEwMCx0aGlzLmwrcWUqKGFyZ3VtZW50cy5sZW5ndGg/ZToxKSksdGhpcy5hLHRoaXMuYil9LEdlLmRhcmtlcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVlKE1hdGgubWF4KDAsdGhpcy5sLXFlKihhcmd1bWVudHMubGVuZ3RoP2U6MSkpLHRoaXMuYSx0aGlzLmIpfSxHZS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gWmUodGhpcy5sLHRoaXMuYSx0aGlzLmIpfSxlLnJnYj1LZTt2YXIgdHQ9S2UucHJvdG90eXBlPW5ldyBGZTtmdW5jdGlvbiBydChlKXtyZXR1cm4gZTwxNj8iMCIrTWF0aC5tYXgoMCxlKS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LGUpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBudChlLHQscil7dmFyIG4sYSxpLG89MCxsPTAscz0wO2lmKG49LyhbYS16XSspXCgoLiopXCkvLmV4ZWMoZT1lLnRvTG93ZXJDYXNlKCkpKXN3aXRjaChhPW5bMl0uc3BsaXQoIiwiKSxuWzFdKXtjYXNlImhzbCI6cmV0dXJuIHIocGFyc2VGbG9hdChhWzBdKSxwYXJzZUZsb2F0KGFbMV0pLzEwMCxwYXJzZUZsb2F0KGFbMl0pLzEwMCk7Y2FzZSJyZ2IiOnJldHVybiB0KGx0KGFbMF0pLGx0KGFbMV0pLGx0KGFbMl0pKX1yZXR1cm4oaT1zdC5nZXQoZSkpP3QoaS5yLGkuZyxpLmIpOihudWxsPT1lfHwiIyIhPT1lLmNoYXJBdCgwKXx8aXNOYU4oaT1wYXJzZUludChlLnNsaWNlKDEpLDE2KSl8fCg0PT09ZS5sZW5ndGg/KG89KDM4NDAmaSk+PjQsb3w9bz4+NCxsPTI0MCZpLGx8PWw+PjQscz0xNSZpLHN8PXM8PDQpOjc9PT1lLmxlbmd0aCYmKG89KDE2NzExNjgwJmkpPj4xNixsPSg2NTI4MCZpKT4+OCxzPTI1NSZpKSksdChvLGwscykpfWZ1bmN0aW9uIGF0KGUsdCxyKXt2YXIgbixhLGk9TWF0aC5taW4oZS89MjU1LHQvPTI1NSxyLz0yNTUpLG89TWF0aC5tYXgoZSx0LHIpLGw9by1pLHM9KG8raSkvMjtyZXR1cm4gbD8oYT1zPC41P2wvKG8raSk6bC8oMi1vLWkpLG49ZT09bz8odC1yKS9sKyh0PHI/NjowKTp0PT1vPyhyLWUpL2wrMjooZS10KS9sKzQsbio9NjApOihuPU5hTixhPXM+MCYmczwxPzA6biksbmV3IEVlKG4sYSxzKX1mdW5jdGlvbiBpdChlLHQscil7dmFyIG49SmUoKC40MTI0NTY0KihlPW90KGUpKSsuMzU3NTc2MSoodD1vdCh0KSkrLjE4MDQzNzUqKHI9b3QocikpKS8uOTUwNDcpLGE9SmUoKC4yMTI2NzI5KmUrLjcxNTE1MjIqdCsuMDcyMTc1KnIpLzEpO3JldHVybiBVZSgxMTYqYS0xNiw1MDAqKG4tYSksMjAwKihhLUplKCguMDE5MzMzOSplKy4xMTkxOTIqdCsuOTUwMzA0MSpyKS8xLjA4ODgzKSkpfWZ1bmN0aW9uIG90KGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIGx0KGUpe3ZhciB0PXBhcnNlRmxvYXQoZSk7cmV0dXJuIiUiPT09ZS5jaGFyQXQoZS5sZW5ndGgtMSk/TWF0aC5yb3VuZCgyLjU1KnQpOnR9dHQuYnJpZ2h0ZXI9ZnVuY3Rpb24oZSl7ZT1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP2U6MSk7dmFyIHQ9dGhpcy5yLHI9dGhpcy5nLG49dGhpcy5iLGE9MzA7cmV0dXJuIHR8fHJ8fG4/KHQmJnQ8YSYmKHQ9YSksciYmcjxhJiYocj1hKSxuJiZuPGEmJihuPWEpLG5ldyBLZShNYXRoLm1pbigyNTUsdC9lKSxNYXRoLm1pbigyNTUsci9lKSxNYXRoLm1pbigyNTUsbi9lKSkpOm5ldyBLZShhLGEsYSl9LHR0LmRhcmtlcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEtlKChlPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/ZToxKSkqdGhpcy5yLGUqdGhpcy5nLGUqdGhpcy5iKX0sdHQuaHNsPWZ1bmN0aW9uKCl7cmV0dXJuIGF0KHRoaXMucix0aGlzLmcsdGhpcy5iKX0sdHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIrcnQodGhpcy5yKStydCh0aGlzLmcpK3J0KHRoaXMuYil9O3ZhciBzdD1lLm1hcCh7YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7ZnVuY3Rpb24gY3QoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiB1dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxkdCh0LHIsZSxuKX19ZnVuY3Rpb24gZHQodCxyLGEsaSl7dmFyIG89e30sbD1lLmRpc3BhdGNoKCJiZWZvcmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxzPXt9LGM9bmV3IFhNTEh0dHBSZXF1ZXN0LHU9bnVsbDtmdW5jdGlvbiBkKCl7dmFyIGUsdD1jLnN0YXR1cztpZighdCYmZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXNwb25zZVR5cGU7cmV0dXJuIHQmJiJ0ZXh0IiE9PXQ/ZS5yZXNwb25zZTplLnJlc3BvbnNlVGV4dH0oYyl8fHQ+PTIwMCYmdDwzMDB8fDMwND09PXQpe3RyeXtlPWEuY2FsbChvLGMpfWNhdGNoKGUpe3JldHVybiB2b2lkIGwuZXJyb3IuY2FsbChvLGUpfWwubG9hZC5jYWxsKG8sZSl9ZWxzZSBsLmVycm9yLmNhbGwobyxjKX1yZXR1cm4gc2VsZi5YRG9tYWluUmVxdWVzdCYmISgid2l0aENyZWRlbnRpYWxzImluIGMpJiYvXihodHRwKHMpPzopP1wvXC8vLnRlc3QodCkmJihjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj1kOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJmQoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKHQpe3ZhciByPWUuZXZlbnQ7ZS5ldmVudD10O3RyeXtsLnByb2dyZXNzLmNhbGwobyxjKX1maW5hbGx5e2UuZXZlbnQ9cn19LG8uaGVhZGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9KGUrIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP3NbZV06KG51bGw9PXQ/ZGVsZXRlIHNbZV06c1tlXT10KyIiLG8pfSxvLm1pbWVUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PWU/bnVsbDplKyIiLG8pOnJ9LG8ucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWUsbyk6dX0sby5yZXNwb25zZT1mdW5jdGlvbihlKXtyZXR1cm4gYT1lLG99LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe29bZV09ZnVuY3Rpb24oKXtyZXR1cm4gby5zZW5kLmFwcGx5KG8sW2VdLmNvbmNhdChuKGFyZ3VtZW50cykpKX19KSksby5zZW5kPWZ1bmN0aW9uKGUsbixhKXtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihhPW4sbj1udWxsKSxjLm9wZW4oZSx0LCEwKSxudWxsPT1yfHwiYWNjZXB0ImluIHN8fChzLmFjY2VwdD1yKyIsKi8qIiksYy5zZXRSZXF1ZXN0SGVhZGVyKWZvcih2YXIgaSBpbiBzKWMuc2V0UmVxdWVzdEhlYWRlcihpLHNbaV0pO3JldHVybiBudWxsIT1yJiZjLm92ZXJyaWRlTWltZVR5cGUmJmMub3ZlcnJpZGVNaW1lVHlwZShyKSxudWxsIT11JiYoYy5yZXNwb25zZVR5cGU9dSksbnVsbCE9YSYmby5vbigiZXJyb3IiLGEpLm9uKCJsb2FkIiwoZnVuY3Rpb24oZSl7YShudWxsLGUpfSkpLGwuYmVmb3Jlc2VuZC5jYWxsKG8sYyksYy5zZW5kKG51bGw9PW4/bnVsbDpuKSxvfSxvLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxvfSxlLnJlYmluZChvLGwsIm9uIiksbnVsbD09aT9vOm8uZ2V0KGZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5sZW5ndGg/ZnVuY3Rpb24odCxyKXtlKG51bGw9PXQ/cjpudWxsKX06ZX0oaSkpfXN0LmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7c3Quc2V0KGUsJGUodCkpfSkpLGUuZnVuY3Rvcj1jdCxlLnhocj11dChDKSxlLmRzdj1mdW5jdGlvbihlLHQpe3ZhciByPW5ldyBSZWdFeHAoJ1siJytlKyJcbl0iKSxuPWUuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBhKGUscixuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPXIscj1udWxsKTt2YXIgYT1kdChlLHQsbnVsbD09cj9pOm8ociksbik7cmV0dXJuIGEucm93PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EucmVzcG9uc2UobnVsbD09KHI9ZSk/aTpvKGUpKTpyfSxhfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGEucGFyc2UoZS5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhLnBhcnNlKHQucmVzcG9uc2VUZXh0LGUpfX1mdW5jdGlvbiBsKHQpe3JldHVybiB0Lm1hcChzKS5qb2luKGUpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHIudGVzdChlKT8nIicrZS5yZXBsYWNlKC9cIi9nLCciIicpKyciJzplfXJldHVybiBhLnBhcnNlPWZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIGEucGFyc2VSb3dzKGUsKGZ1bmN0aW9uKGUsbil7aWYocilyZXR1cm4gcihlLG4tMSk7dmFyIGE9ZnVuY3Rpb24odCl7Zm9yKHZhciByPXt9LG49ZS5sZW5ndGgsYT0wO2E8bjsrK2EpcltlW2FdXT10W2FdO3JldHVybiByfTtyPXQ/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdChhKGUpLHIpfTphfSkpfSxhLnBhcnNlUm93cz1mdW5jdGlvbihlLHQpe3ZhciByLGEsaT17fSxvPXt9LGw9W10scz1lLmxlbmd0aCxjPTAsdT0wO2Z1bmN0aW9uIGQoKXtpZihjPj1zKXJldHVybiBvO2lmKGEpcmV0dXJuIGE9ITEsaTt2YXIgdD1jO2lmKDM0PT09ZS5jaGFyQ29kZUF0KHQpKXtmb3IodmFyIHI9dDtyKys8czspaWYoMzQ9PT1lLmNoYXJDb2RlQXQocikpe2lmKDM0IT09ZS5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXJldHVybiBjPXIrMiwxMz09PShsPWUuY2hhckNvZGVBdChyKzEpKT8oYT0hMCwxMD09PWUuY2hhckNvZGVBdChyKzIpJiYrK2MpOjEwPT09bCYmKGE9ITApLGUuc2xpY2UodCsxLHIpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2M8czspe3ZhciBsLHU9MTtpZigxMD09PShsPWUuY2hhckNvZGVBdChjKyspKSlhPSEwO2Vsc2UgaWYoMTM9PT1sKWE9ITAsMTA9PT1lLmNoYXJDb2RlQXQoYykmJigrK2MsKyt1KTtlbHNlIGlmKGwhPT1uKWNvbnRpbnVlO3JldHVybiBlLnNsaWNlKHQsYy11KX1yZXR1cm4gZS5zbGljZSh0KX1mb3IoOyhyPWQoKSkhPT1vOyl7Zm9yKHZhciBmPVtdO3IhPT1pJiZyIT09bzspZi5wdXNoKHIpLHI9ZCgpO3QmJm51bGw9PShmPXQoZix1KyspKXx8bC5wdXNoKGYpfXJldHVybiBsfSxhLmZvcm1hdD1mdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHRbMF0pKXJldHVybiBhLmZvcm1hdFJvd3ModCk7dmFyIHI9bmV3IEQsbj1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlyLmhhcyh0KXx8bi5wdXNoKHIuYWRkKHQpKX0pKSxbbi5tYXAocykuam9pbihlKV0uY29uY2F0KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBzKHRbZV0pfSkpLmpvaW4oZSl9KSkpLmpvaW4oIlxuIil9LGEuZm9ybWF0Um93cz1mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAobCkuam9pbigiXG4iKX0sYX0sZS5jc3Y9ZS5kc3YoIiwiLCJ0ZXh0L2NzdiIpLGUudHN2PWUuZHN2KCJcdCIsInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiKTt2YXIgZnQscHQsaHQsZ3QsbXQ9dGhpc1tQKHRoaXMsInJlcXVlc3RBbmltYXRpb25GcmFtZSIpXXx8ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07ZnVuY3Rpb24gdnQoZSx0LHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7bjwyJiYodD0wKSxuPDMmJihyPURhdGUubm93KCkpO3ZhciBhPXIrdCxpPXtjOmUsdDphLG46bnVsbH07cmV0dXJuIHB0P3B0Lm49aTpmdD1pLHB0PWksaHR8fChndD1jbGVhclRpbWVvdXQoZ3QpLGh0PTEsbXQoeXQpKSxpfWZ1bmN0aW9uIHl0KCl7dmFyIGU9eHQoKSx0PWJ0KCktZTt0PjI0Pyhpc0Zpbml0ZSh0KSYmKGNsZWFyVGltZW91dChndCksZ3Q9c2V0VGltZW91dCh5dCx0KSksaHQ9MCk6KGh0PTEsbXQoeXQpKX1mdW5jdGlvbiB4dCgpe2Zvcih2YXIgZT1EYXRlLm5vdygpLHQ9ZnQ7dDspZT49dC50JiZ0LmMoZS10LnQpJiYodC5jPW51bGwpLHQ9dC5uO3JldHVybiBlfWZ1bmN0aW9uIGJ0KCl7Zm9yKHZhciBlLHQ9ZnQscj0xLzA7dDspdC5jPyh0LnQ8ciYmKHI9dC50KSx0PShlPXQpLm4pOnQ9ZT9lLm49dC5uOmZ0PXQubjtyZXR1cm4gcHQ9ZSxyfWZ1bmN0aW9uIF90KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIHd0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIFR0KGUpe2Zvcih2YXIgdCxyLG4sYT1lLmxlbmd0aCxpPVswLDFdLG89MixsPTI7bDxhO2wrKyl7Zm9yKDtvPjEmJih0PWVbaVtvLTJdXSxyPWVbaVtvLTFdXSxuPWVbbF0sKHJbMF0tdFswXSkqKG5bMV0tdFsxXSktKHJbMV0tdFsxXSkqKG5bMF0tdFswXSk8PTApOyktLW87aVtvKytdPWx9cmV0dXJuIGkuc2xpY2UoMCxvKX1mdW5jdGlvbiBNdChlLHQpe3JldHVybiBlWzBdLXRbMF18fGVbMV0tdFsxXX1lLnRpbWVyPWZ1bmN0aW9uKCl7dnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLnRpbWVyLmZsdXNoPWZ1bmN0aW9uKCl7eHQoKSxidCgpfSxlLnJvdW5kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/TWF0aC5yb3VuZChlKih0PU1hdGgucG93KDEwLHQpKSkvdDpNYXRoLnJvdW5kKGUpfSxlLmdlb209e30sZS5nZW9tLmh1bGw9ZnVuY3Rpb24oZSl7dmFyIHQ9X3Qscj13dDtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuKGUpO2Z1bmN0aW9uIG4oZSl7aWYoZS5sZW5ndGg8MylyZXR1cm5bXTt2YXIgbixhPWN0KHQpLGk9Y3Qociksbz1lLmxlbmd0aCxsPVtdLHM9W107Zm9yKG49MDtuPG87bisrKWwucHVzaChbK2EuY2FsbCh0aGlzLGVbbl0sbiksK2kuY2FsbCh0aGlzLGVbbl0sbiksbl0pO2ZvcihsLnNvcnQoTXQpLG49MDtuPG87bisrKXMucHVzaChbbFtuXVswXSwtbFtuXVsxXV0pO3ZhciBjPVR0KGwpLHU9VHQocyksZD11WzBdPT09Y1swXSxmPXVbdS5sZW5ndGgtMV09PT1jW2MubGVuZ3RoLTFdLHA9W107Zm9yKG49Yy5sZW5ndGgtMTtuPj0wOy0tbilwLnB1c2goZVtsW2Nbbl1dWzJdXSk7Zm9yKG49K2Q7bjx1Lmxlbmd0aC1mOysrbilwLnB1c2goZVtsW3Vbbl1dWzJdXSk7cmV0dXJuIHB9cmV0dXJuIG4ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4ueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLG4pOnJ9LG59LGUuZ2VvbS5wb2x5Z29uPWZ1bmN0aW9uKGUpe3JldHVybiBCKGUsa3QpLGV9O3ZhciBrdD1lLmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gQXQoZSx0LHIpe3JldHVybihyWzBdLXRbMF0pKihlWzFdLXRbMV0pPChyWzFdLXRbMV0pKihlWzBdLXRbMF0pfWZ1bmN0aW9uIEx0KGUsdCxyLG4pe3ZhciBhPWVbMF0saT1yWzBdLG89dFswXS1hLGw9blswXS1pLHM9ZVsxXSxjPXJbMV0sdT10WzFdLXMsZD1uWzFdLWMsZj0obCoocy1jKS1kKihhLWkpKS8oZCpvLWwqdSk7cmV0dXJuW2ErZipvLHMrZip1XX1mdW5jdGlvbiBTdChlKXt2YXIgdD1lWzBdLHI9ZVtlLmxlbmd0aC0xXTtyZXR1cm4hKHRbMF0tclswXXx8dFsxXS1yWzFdKX1rdC5hcmVhPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9LTEscj10aGlzLmxlbmd0aCxuPXRoaXNbci0xXSxhPTA7Kyt0PHI7KWU9bixuPXRoaXNbdF0sYSs9ZVsxXSpuWzBdLWVbMF0qblsxXTtyZXR1cm4uNSphfSxrdC5jZW50cm9pZD1mdW5jdGlvbihlKXt2YXIgdCxyLG49LTEsYT10aGlzLmxlbmd0aCxpPTAsbz0wLGw9dGhpc1thLTFdO2Zvcihhcmd1bWVudHMubGVuZ3RofHwoZT0tMS8oNip0aGlzLmFyZWEoKSkpOysrbjxhOyl0PWwsbD10aGlzW25dLHI9dFswXSpsWzFdLWxbMF0qdFsxXSxpKz0odFswXStsWzBdKSpyLG8rPSh0WzFdK2xbMV0pKnI7cmV0dXJuW2kqZSxvKmVdfSxrdC5jbGlwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4sYSxpLG8sbD1TdChlKSxzPS0xLGM9dGhpcy5sZW5ndGgtU3QodGhpcyksdT10aGlzW2MtMV07KytzPGM7KXtmb3IodD1lLnNsaWNlKCksZS5sZW5ndGg9MCxhPXRoaXNbc10saT10WyhuPXQubGVuZ3RoLWwpLTFdLHI9LTE7KytyPG47KUF0KG89dFtyXSx1LGEpPyhBdChpLHUsYSl8fGUucHVzaChMdChpLG8sdSxhKSksZS5wdXNoKG8pKTpBdChpLHUsYSkmJmUucHVzaChMdChpLG8sdSxhKSksaT1vO2wmJmUucHVzaChlWzBdKSx1PWF9cmV0dXJuIGV9O3ZhciBEdCxDdCxPdCxQdCxJdCxSdD1bXSx6dD1bXTtmdW5jdGlvbiBOdCgpe3RyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBGdChlKXt2YXIgdD1SdC5wb3AoKXx8bmV3IE50O3JldHVybiB0LnNpdGU9ZSx0fWZ1bmN0aW9uIEV0KGUpe1p0KGUpLE90LnJlbW92ZShlKSxSdC5wdXNoKGUpLHRyKGUpfWZ1bmN0aW9uIGp0KGUpe3ZhciB0PWUuY2lyY2xlLHI9dC54LG49dC5jeSxhPXt4OnIseTpufSxpPWUuUCxvPWUuTixsPVtlXTtFdChlKTtmb3IodmFyIHM9aTtzLmNpcmNsZSYmeShyLXMuY2lyY2xlLngpPE1lJiZ5KG4tcy5jaXJjbGUuY3kpPE1lOylpPXMuUCxsLnVuc2hpZnQocyksRXQocykscz1pO2wudW5zaGlmdChzKSxadChzKTtmb3IodmFyIGM9bztjLmNpcmNsZSYmeShyLWMuY2lyY2xlLngpPE1lJiZ5KG4tYy5jaXJjbGUuY3kpPE1lOylvPWMuTixsLnB1c2goYyksRXQoYyksYz1vO2wucHVzaChjKSxadChjKTt2YXIgdSxkPWwubGVuZ3RoO2Zvcih1PTE7dTxkOysrdSljPWxbdV0scz1sW3UtMV0sS3QoYy5lZGdlLHMuc2l0ZSxjLnNpdGUsYSk7cz1sWzBdLChjPWxbZC0xXSkuZWRnZT1KdChzLnNpdGUsYy5zaXRlLG51bGwsYSksR3QocyksR3QoYyl9ZnVuY3Rpb24gSHQoZSl7Zm9yKHZhciB0LHIsbixhLGk9ZS54LG89ZS55LGw9T3QuXztsOylpZigobj1CdChsLG8pLWkpPk1lKWw9bC5MO2Vsc2V7aWYoISgoYT1pLVl0KGwsbykpPk1lKSl7bj4tTWU/KHQ9bC5QLHI9bCk6YT4tTWU/KHQ9bCxyPWwuTik6dD1yPWw7YnJlYWt9aWYoIWwuUil7dD1sO2JyZWFrfWw9bC5SfXZhciBzPUZ0KGUpO2lmKE90Lmluc2VydCh0LHMpLHR8fHIpe2lmKHQ9PT1yKXJldHVybiBadCh0KSxyPUZ0KHQuc2l0ZSksT3QuaW5zZXJ0KHMscikscy5lZGdlPXIuZWRnZT1KdCh0LnNpdGUscy5zaXRlKSxHdCh0KSx2b2lkIEd0KHIpO2lmKHIpe1p0KHQpLFp0KHIpO3ZhciBjPXQuc2l0ZSx1PWMueCxkPWMueSxmPWUueC11LHA9ZS55LWQsaD1yLnNpdGUsZz1oLngtdSxtPWgueS1kLHY9MiooZiptLXAqZykseT1mKmYrcCpwLHg9ZypnK20qbSxiPXt4OihtKnktcCp4KS92K3UseTooZip4LWcqeSkvditkfTtLdChyLmVkZ2UsYyxoLGIpLHMuZWRnZT1KdChjLGUsbnVsbCxiKSxyLmVkZ2U9SnQoZSxoLG51bGwsYiksR3QodCksR3Qocil9ZWxzZSBzLmVkZ2U9SnQodC5zaXRlLHMuc2l0ZSl9fWZ1bmN0aW9uIEJ0KGUsdCl7dmFyIHI9ZS5zaXRlLG49ci54LGE9ci55LGk9YS10O2lmKCFpKXJldHVybiBuO3ZhciBvPWUuUDtpZighbylyZXR1cm4tMS8wO3ZhciBsPShyPW8uc2l0ZSkueCxzPXIueSxjPXMtdDtpZighYylyZXR1cm4gbDt2YXIgdT1sLW4sZD0xL2ktMS9jLGY9dS9jO3JldHVybiBkPygtZitNYXRoLnNxcnQoZipmLTIqZCoodSp1LygtMipjKS1zK2MvMithLWkvMikpKS9kK246KG4rbCkvMn1mdW5jdGlvbiBZdChlLHQpe3ZhciByPWUuTjtpZihyKXJldHVybiBCdChyLHQpO3ZhciBuPWUuc2l0ZTtyZXR1cm4gbi55PT09dD9uLng6MS8wfWZ1bmN0aW9uIFZ0KGUpe3RoaXMuc2l0ZT1lLHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gVXQoZSx0KXtyZXR1cm4gdC5hbmdsZS1lLmFuZ2xlfWZ1bmN0aW9uIHF0KCl7dHIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIEd0KGUpe3ZhciB0PWUuUCxyPWUuTjtpZih0JiZyKXt2YXIgbj10LnNpdGUsYT1lLnNpdGUsaT1yLnNpdGU7aWYobiE9PWkpe3ZhciBvPWEueCxsPWEueSxzPW4ueC1vLGM9bi55LWwsdT1pLngtbyxkPTIqKHMqKG09aS55LWwpLWMqdSk7aWYoIShkPj0tMWUtMTIpKXt2YXIgZj1zKnMrYypjLHA9dSp1K20qbSxoPShtKmYtYypwKS9kLGc9KHMqcC11KmYpL2QsbT1nK2wsdj16dC5wb3AoKXx8bmV3IHF0O3YuYXJjPWUsdi5zaXRlPWEsdi54PWgrbyx2Lnk9bStNYXRoLnNxcnQoaCpoK2cqZyksdi5jeT1tLGUuY2lyY2xlPXY7Zm9yKHZhciB5PW51bGwseD1JdC5fO3g7KWlmKHYueTx4Lnl8fHYueT09PXgueSYmdi54PD14Lngpe2lmKCF4Lkwpe3k9eC5QO2JyZWFrfXg9eC5MfWVsc2V7aWYoIXguUil7eT14O2JyZWFrfXg9eC5SfUl0Lmluc2VydCh5LHYpLHl8fChQdD12KX19fX1mdW5jdGlvbiBadChlKXt2YXIgdD1lLmNpcmNsZTt0JiYodC5QfHwoUHQ9dC5OKSxJdC5yZW1vdmUodCksenQucHVzaCh0KSx0cih0KSxlLmNpcmNsZT1udWxsKX1mdW5jdGlvbiBXdChlLHQpe3ZhciByPWUuYjtpZihyKXJldHVybiEwO3ZhciBuLGEsaT1lLmEsbz10WzBdWzBdLGw9dFsxXVswXSxzPXRbMF1bMV0sYz10WzFdWzFdLHU9ZS5sLGQ9ZS5yLGY9dS54LHA9dS55LGg9ZC54LGc9ZC55LG09KGYraCkvMix2PShwK2cpLzI7aWYoZz09PXApe2lmKG08b3x8bT49bClyZXR1cm47aWYoZj5oKXtpZihpKXtpZihpLnk+PWMpcmV0dXJufWVsc2UgaT17eDptLHk6c307cj17eDptLHk6Y319ZWxzZXtpZihpKXtpZihpLnk8cylyZXR1cm59ZWxzZSBpPXt4Om0seTpjfTtyPXt4Om0seTpzfX19ZWxzZSBpZihhPXYtKG49KGYtaCkvKGctcCkpKm0sbjwtMXx8bj4xKWlmKGY+aCl7aWYoaSl7aWYoaS55Pj1jKXJldHVybn1lbHNlIGk9e3g6KHMtYSkvbix5OnN9O3I9e3g6KGMtYSkvbix5OmN9fWVsc2V7aWYoaSl7aWYoaS55PHMpcmV0dXJufWVsc2UgaT17eDooYy1hKS9uLHk6Y307cj17eDoocy1hKS9uLHk6c319ZWxzZSBpZihwPGcpe2lmKGkpe2lmKGkueD49bClyZXR1cm59ZWxzZSBpPXt4Om8seTpuKm8rYX07cj17eDpsLHk6bipsK2F9fWVsc2V7aWYoaSl7aWYoaS54PG8pcmV0dXJufWVsc2UgaT17eDpsLHk6bipsK2F9O3I9e3g6byx5Om4qbythfX1yZXR1cm4gZS5hPWksZS5iPXIsITB9ZnVuY3Rpb24gWHQoZSx0KXt0aGlzLmw9ZSx0aGlzLnI9dCx0aGlzLmE9dGhpcy5iPW51bGx9ZnVuY3Rpb24gSnQoZSx0LHIsbil7dmFyIGE9bmV3IFh0KGUsdCk7cmV0dXJuIER0LnB1c2goYSksciYmS3QoYSxlLHQsciksbiYmS3QoYSx0LGUsbiksQ3RbZS5pXS5lZGdlcy5wdXNoKG5ldyAkdChhLGUsdCkpLEN0W3QuaV0uZWRnZXMucHVzaChuZXcgJHQoYSx0LGUpKSxhfWZ1bmN0aW9uIFF0KGUsdCxyKXt2YXIgbj1uZXcgWHQoZSxudWxsKTtyZXR1cm4gbi5hPXQsbi5iPXIsRHQucHVzaChuKSxufWZ1bmN0aW9uIEt0KGUsdCxyLG4pe2UuYXx8ZS5iP2UubD09PXI/ZS5iPW46ZS5hPW46KGUuYT1uLGUubD10LGUucj1yKX1mdW5jdGlvbiAkdChlLHQscil7dmFyIG49ZS5hLGE9ZS5iO3RoaXMuZWRnZT1lLHRoaXMuc2l0ZT10LHRoaXMuYW5nbGU9cj9NYXRoLmF0YW4yKHIueS10Lnksci54LXQueCk6ZS5sPT09dD9NYXRoLmF0YW4yKGEueC1uLngsbi55LWEueSk6TWF0aC5hdGFuMihuLngtYS54LGEueS1uLnkpfWZ1bmN0aW9uIGVyKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdHIoZSl7ZS5VPWUuQz1lLkw9ZS5SPWUuUD1lLk49bnVsbH1mdW5jdGlvbiBycihlLHQpe3ZhciByPXQsbj10LlIsYT1yLlU7YT9hLkw9PT1yP2EuTD1uOmEuUj1uOmUuXz1uLG4uVT1hLHIuVT1uLHIuUj1uLkwsci5SJiYoci5SLlU9ciksbi5MPXJ9ZnVuY3Rpb24gbnIoZSx0KXt2YXIgcj10LG49dC5MLGE9ci5VO2E/YS5MPT09cj9hLkw9bjphLlI9bjplLl89bixuLlU9YSxyLlU9bixyLkw9bi5SLHIuTCYmKHIuTC5VPXIpLG4uUj1yfWZ1bmN0aW9uIGFyKGUpe2Zvcig7ZS5MOyllPWUuTDtyZXR1cm4gZX1mdW5jdGlvbiBpcihlLHQpe3ZhciByLG4sYSxpPWUuc29ydChvcikucG9wKCk7Zm9yKER0PVtdLEN0PW5ldyBBcnJheShlLmxlbmd0aCksT3Q9bmV3IGVyLEl0PW5ldyBlcjs7KWlmKGE9UHQsaSYmKCFhfHxpLnk8YS55fHxpLnk9PT1hLnkmJmkueDxhLngpKWkueD09PXImJmkueT09PW58fChDdFtpLmldPW5ldyBWdChpKSxIdChpKSxyPWkueCxuPWkueSksaT1lLnBvcCgpO2Vsc2V7aWYoIWEpYnJlYWs7anQoYS5hcmMpfXQmJihmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGEsaSxvPUR0LGw9KHI9ZVswXVswXSxuPWVbMF1bMV0sYT1lWzFdWzBdLGk9ZVsxXVsxXSxmdW5jdGlvbihlKXt2YXIgdCxvPWUuYSxsPWUuYixzPW8ueCxjPW8ueSx1PTAsZD0xLGY9bC54LXMscD1sLnktYztpZih0PXItcyxmfHwhKHQ+MCkpe2lmKHQvPWYsZjwwKXtpZih0PHUpcmV0dXJuO3Q8ZCYmKGQ9dCl9ZWxzZSBpZihmPjApe2lmKHQ+ZClyZXR1cm47dD51JiYodT10KX1pZih0PWEtcyxmfHwhKHQ8MCkpe2lmKHQvPWYsZjwwKXtpZih0PmQpcmV0dXJuO3Q+dSYmKHU9dCl9ZWxzZSBpZihmPjApe2lmKHQ8dSlyZXR1cm47dDxkJiYoZD10KX1pZih0PW4tYyxwfHwhKHQ+MCkpe2lmKHQvPXAscDwwKXtpZih0PHUpcmV0dXJuO3Q8ZCYmKGQ9dCl9ZWxzZSBpZihwPjApe2lmKHQ+ZClyZXR1cm47dD51JiYodT10KX1pZih0PWktYyxwfHwhKHQ8MCkpe2lmKHQvPXAscDwwKXtpZih0PmQpcmV0dXJuO3Q+dSYmKHU9dCl9ZWxzZSBpZihwPjApe2lmKHQ8dSlyZXR1cm47dDxkJiYoZD10KX1yZXR1cm4gdT4wJiYoZS5hPXt4OnMrdSpmLHk6Yyt1KnB9KSxkPDEmJihlLmI9e3g6cytkKmYseTpjK2QqcH0pLGV9fX19fSkscz1vLmxlbmd0aDtzLS07KSghV3QodD1vW3NdLGUpfHwhbCh0KXx8eSh0LmEueC10LmIueCk8TWUmJnkodC5hLnktdC5iLnkpPE1lKSYmKHQuYT10LmI9bnVsbCxvLnNwbGljZShzLDEpKX0odCksZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixhLGksbyxsLHMsYyx1LGQ9ZVswXVswXSxmPWVbMV1bMF0scD1lWzBdWzFdLGg9ZVsxXVsxXSxnPUN0LG09Zy5sZW5ndGg7bS0tOylpZigoaT1nW21dKSYmaS5wcmVwYXJlKCkpZm9yKHM9KGw9aS5lZGdlcykubGVuZ3RoLG89MDtvPHM7KW49KHU9bFtvXS5lbmQoKSkueCxhPXUueSx0PShjPWxbKytvJXNdLnN0YXJ0KCkpLngscj1jLnksKHkobi10KT5NZXx8eShhLXIpPk1lKSYmKGwuc3BsaWNlKG8sMCxuZXcgJHQoUXQoaS5zaXRlLHUseShuLWQpPE1lJiZoLWE+TWU/e3g6ZCx5OnkodC1kKTxNZT9yOmh9OnkoYS1oKTxNZSYmZi1uPk1lP3t4Onkoci1oKTxNZT90OmYseTpofTp5KG4tZik8TWUmJmEtcD5NZT97eDpmLHk6eSh0LWYpPE1lP3I6cH06eShhLXApPE1lJiZuLWQ+TWU/e3g6eShyLXApPE1lP3Q6ZCx5OnB9Om51bGwpLGkuc2l0ZSxudWxsKSksKytzKX0odCkpO3ZhciBvPXtjZWxsczpDdCxlZGdlczpEdH07cmV0dXJuIE90PUl0PUR0PUN0PW51bGwsb31mdW5jdGlvbiBvcihlLHQpe3JldHVybiB0LnktZS55fHx0LngtZS54fVZ0LnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9dGhpcy5lZGdlcyxyPXQubGVuZ3RoO3ItLTspKGU9dFtyXS5lZGdlKS5iJiZlLmF8fHQuc3BsaWNlKHIsMSk7cmV0dXJuIHQuc29ydChVdCksdC5sZW5ndGh9LCR0LnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmE6dGhpcy5lZGdlLmJ9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYjp0aGlzLmVkZ2UuYX19LGVyLnByb3RvdHlwZT17aW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O3I9ZX1lbHNlIHRoaXMuXz8oZT1hcih0aGlzLl8pLHQuUD1udWxsLHQuTj1lLGUuUD1lLkw9dCxyPWUpOih0LlA9dC5OPW51bGwsdGhpcy5fPXQscj1udWxsKTtmb3IodC5MPXQuUj1udWxsLHQuVT1yLHQuQz0hMCxlPXQ7ciYmci5DOylyPT09KG49ci5VKS5MPyhhPW4uUikmJmEuQz8oci5DPWEuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuUiYmKHJyKHRoaXMscikscj0oZT1yKS5VKSxyLkM9ITEsbi5DPSEwLG5yKHRoaXMsbikpOihhPW4uTCkmJmEuQz8oci5DPWEuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuTCYmKG5yKHRoaXMscikscj0oZT1yKS5VKSxyLkM9ITEsbi5DPSEwLHJyKHRoaXMsbikpLHI9ZS5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5OJiYoZS5OLlA9ZS5QKSxlLlAmJihlLlAuTj1lLk4pLGUuTj1lLlA9bnVsbDt2YXIgdCxyLG4sYT1lLlUsaT1lLkwsbz1lLlI7aWYocj1pP28/YXIobyk6aTpvLGE/YS5MPT09ZT9hLkw9cjphLlI9cjp0aGlzLl89cixpJiZvPyhuPXIuQyxyLkM9ZS5DLHIuTD1pLGkuVT1yLHIhPT1vPyhhPXIuVSxyLlU9ZS5VLGU9ci5SLGEuTD1lLHIuUj1vLG8uVT1yKTooci5VPWEsYT1yLGU9ci5SKSk6KG49ZS5DLGU9ciksZSYmKGUuVT1hKSwhbilpZihlJiZlLkMpZS5DPSExO2Vsc2V7ZG97aWYoZT09PXRoaXMuXylicmVhaztpZihlPT09YS5MKXtpZigodD1hLlIpLkMmJih0LkM9ITEsYS5DPSEwLHJyKHRoaXMsYSksdD1hLlIpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuUiYmdC5SLkN8fCh0LkwuQz0hMSx0LkM9ITAsbnIodGhpcyx0KSx0PWEuUiksdC5DPWEuQyxhLkM9dC5SLkM9ITEscnIodGhpcyxhKSxlPXRoaXMuXzticmVha319ZWxzZSBpZigodD1hLkwpLkMmJih0LkM9ITEsYS5DPSEwLG5yKHRoaXMsYSksdD1hLkwpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuTCYmdC5MLkN8fCh0LlIuQz0hMSx0LkM9ITAscnIodGhpcyx0KSx0PWEuTCksdC5DPWEuQyxhLkM9dC5MLkM9ITEsbnIodGhpcyxhKSxlPXRoaXMuXzticmVha310LkM9ITAsZT1hLGE9YS5VfXdoaWxlKCFlLkMpO2UmJihlLkM9ITEpfX19LGUuZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKGUpe3ZhciB0PV90LHI9d3Qsbj10LGE9cixpPWxyO2lmKGUpcmV0dXJuIG8oZSk7ZnVuY3Rpb24gbyhlKXt2YXIgdD1uZXcgQXJyYXkoZS5sZW5ndGgpLHI9aVswXVswXSxuPWlbMF1bMV0sYT1pWzFdWzBdLG89aVsxXVsxXTtyZXR1cm4gaXIobChlKSxpKS5jZWxscy5mb3JFYWNoKChmdW5jdGlvbihpLGwpe3ZhciBzPWkuZWRnZXMsYz1pLnNpdGU7KHRbbF09cy5sZW5ndGg/cy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RhcnQoKTtyZXR1cm5bdC54LHQueV19KSk6Yy54Pj1yJiZjLng8PWEmJmMueT49biYmYy55PD1vP1tbcixvXSxbYSxvXSxbYSxuXSxbcixuXV06W10pLnBvaW50PWVbbF19KSksdH1mdW5jdGlvbiBsKGUpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm57eDpNYXRoLnJvdW5kKG4oZSx0KS9NZSkqTWUseTpNYXRoLnJvdW5kKGEoZSx0KS9NZSkqTWUsaTp0fX0pKX1yZXR1cm4gby5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gaXIobChlKSkuZWRnZXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5sJiZlLnJ9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOmVbdC5sLmldLHRhcmdldDplW3Quci5pXX19KSl9LG8udHJpYW5nbGVzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBpcihsKGUpKS5jZWxscy5mb3JFYWNoKChmdW5jdGlvbihyLG4pe2Zvcih2YXIgYSxpLG8sbCxzPXIuc2l0ZSxjPXIuZWRnZXMuc29ydChVdCksdT0tMSxkPWMubGVuZ3RoLGY9Y1tkLTFdLmVkZ2UscD1mLmw9PT1zP2YucjpmLmw7Kyt1PGQ7KWYsYT1wLHA9KGY9Y1t1XS5lZGdlKS5sPT09cz9mLnI6Zi5sLG48YS5pJiZuPHAuaSYmKG89YSxsPXAsKChpPXMpLngtbC54KSooby55LWkueSktKGkueC1vLngpKihsLnktaS55KTwwKSYmdC5wdXNoKFtlW25dLGVbYS5pXSxlW3AuaV1dKX0pKSx0fSxvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Y3QodD1lKSxvKTp0fSxvLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Y3Qocj1lKSxvKTpyfSxvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09ZT9scjplLG8pOmk9PT1scj9udWxsOml9LG8uc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLmNsaXBFeHRlbnQoZSYmW1swLDBdLGVdKTppPT09bHI/bnVsbDppJiZpWzFdfSxvfTt2YXIgbHI9W1stMWU2LC0xZTZdLFsxZTYsMWU2XV07ZnVuY3Rpb24gc3IoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBjcihlKXtyZXR1cm4gZS55fWZ1bmN0aW9uIHVyKGUsdCxyLG4sYSxpKXtpZighZSh0LHIsbixhLGkpKXt2YXIgbz0uNSoocithKSxsPS41KihuK2kpLHM9dC5ub2RlcztzWzBdJiZ1cihlLHNbMF0scixuLG8sbCksc1sxXSYmdXIoZSxzWzFdLG8sbixhLGwpLHNbMl0mJnVyKGUsc1syXSxyLGwsbyxpKSxzWzNdJiZ1cihlLHNbM10sbyxsLGEsaSl9fWZ1bmN0aW9uIGRyKGUsdCxyLG4sYSxpLG8pe3ZhciBsLHM9MS8wO3JldHVybiBmdW5jdGlvbiBlKGMsdSxkLGYscCl7aWYoISh1Pml8fGQ+b3x8ZjxufHxwPGEpKXtpZihoPWMucG9pbnQpe3ZhciBoLGc9dC1jLngsbT1yLWMueSx2PWcqZyttKm07aWYodjxzKXt2YXIgeT1NYXRoLnNxcnQocz12KTtuPXQteSxhPXIteSxpPXQreSxvPXIreSxsPWh9fWZvcih2YXIgeD1jLm5vZGVzLGI9LjUqKHUrZiksXz0uNSooZCtwKSx3PShyPj1fKTw8MXx0Pj1iLFQ9dys0O3c8VDsrK3cpaWYoYz14WzMmd10pc3dpdGNoKDMmdyl7Y2FzZSAwOmUoYyx1LGQsYixfKTticmVhaztjYXNlIDE6ZShjLGIsZCxmLF8pO2JyZWFrO2Nhc2UgMjplKGMsdSxfLGIscCk7YnJlYWs7Y2FzZSAzOmUoYyxiLF8sZixwKX19fShlLG4sYSxpLG8pLGx9ZnVuY3Rpb24gZnIodCxyKXt0PWUucmdiKHQpLHI9ZS5yZ2Iocik7dmFyIG49dC5yLGE9dC5nLGk9dC5iLG89ci5yLW4sbD1yLmctYSxzPXIuYi1pO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iIyIrcnQoTWF0aC5yb3VuZChuK28qZSkpK3J0KE1hdGgucm91bmQoYStsKmUpKStydChNYXRoLnJvdW5kKGkrcyplKSl9fWZ1bmN0aW9uIHByKGUsdCl7dmFyIHIsbj17fSxhPXt9O2ZvcihyIGluIGUpciBpbiB0P25bcl09eXIoZVtyXSx0W3JdKTphW3JdPWVbcl07Zm9yKHIgaW4gdClyIGluIGV8fChhW3JdPXRbcl0pO3JldHVybiBmdW5jdGlvbihlKXtmb3IociBpbiBuKWFbcl09bltyXShlKTtyZXR1cm4gYX19ZnVuY3Rpb24gaHIoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19ZnVuY3Rpb24gZ3IoZSx0KXt2YXIgcixuLGEsaT1tci5sYXN0SW5kZXg9dnIubGFzdEluZGV4PTAsbz0tMSxsPVtdLHM9W107Zm9yKGUrPSIiLHQrPSIiOyhyPW1yLmV4ZWMoZSkpJiYobj12ci5leGVjKHQpKTspKGE9bi5pbmRleCk+aSYmKGE9dC5zbGljZShpLGEpLGxbb10/bFtvXSs9YTpsWysrb109YSksKHI9clswXSk9PT0obj1uWzBdKT9sW29dP2xbb10rPW46bFsrK29dPW46KGxbKytvXT1udWxsLHMucHVzaCh7aTpvLHg6aHIocixuKX0pKSxpPXZyLmxhc3RJbmRleDtyZXR1cm4gaTx0Lmxlbmd0aCYmKGE9dC5zbGljZShpKSxsW29dP2xbb10rPWE6bFsrK29dPWEpLGwubGVuZ3RoPDI/c1swXT8odD1zWzBdLngsZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9KTpmdW5jdGlvbigpe3JldHVybiB0fToodD1zLmxlbmd0aCxmdW5jdGlvbihlKXtmb3IodmFyIHIsbj0wO248dDsrK24pbFsocj1zW25dKS5pXT1yLngoZSk7cmV0dXJuIGwuam9pbigiIil9KX1lLmdlb20uZGVsYXVuYXk9ZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKHQpfSxlLmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaSxvPV90LGw9d3Q7aWYoaT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBvPXNyLGw9Y3IsMz09PWkmJihhPXIsbj10LHI9dD0wKSxzKGUpO2Z1bmN0aW9uIHMoZSl7dmFyIHMsYyx1LGQsZixwLGgsZyxtLHY9Y3QobykseD1jdChsKTtpZihudWxsIT10KXA9dCxoPXIsZz1uLG09YTtlbHNlIGlmKGc9bT0tKHA9aD0xLzApLGM9W10sdT1bXSxmPWUubGVuZ3RoLGkpZm9yKGQ9MDtkPGY7KytkKShzPWVbZF0pLng8cCYmKHA9cy54KSxzLnk8aCYmKGg9cy55KSxzLng+ZyYmKGc9cy54KSxzLnk+bSYmKG09cy55KSxjLnB1c2gocy54KSx1LnB1c2gocy55KTtlbHNlIGZvcihkPTA7ZDxmOysrZCl7dmFyIGI9K3Yocz1lW2RdLGQpLF89K3gocyxkKTtiPHAmJihwPWIpLF88aCYmKGg9XyksYj5nJiYoZz1iKSxfPm0mJihtPV8pLGMucHVzaChiKSx1LnB1c2goXyl9dmFyIHc9Zy1wLFQ9bS1oO2Z1bmN0aW9uIE0oZSx0LHIsbixhLGksbyxsKXtpZighaXNOYU4ocikmJiFpc05hTihuKSlpZihlLmxlYWYpe3ZhciBzPWUueCxjPWUueTtpZihudWxsIT1zKWlmKHkocy1yKSt5KGMtbik8LjAxKWsoZSx0LHIsbixhLGksbyxsKTtlbHNle3ZhciB1PWUucG9pbnQ7ZS54PWUueT1lLnBvaW50PW51bGwsayhlLHUscyxjLGEsaSxvLGwpLGsoZSx0LHIsbixhLGksbyxsKX1lbHNlIGUueD1yLGUueT1uLGUucG9pbnQ9dH1lbHNlIGsoZSx0LHIsbixhLGksbyxsKX1mdW5jdGlvbiBrKGUsdCxyLG4sYSxpLG8sbCl7dmFyIHM9LjUqKGErbyksYz0uNSooaStsKSx1PXI+PXMsZD1uPj1jLGY9ZDw8MXx1O2UubGVhZj0hMSx1P2E9czpvPXMsZD9pPWM6bD1jLE0oZT1lLm5vZGVzW2ZdfHwoZS5ub2Rlc1tmXT17bGVhZjohMCxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGx9KSx0LHIsbixhLGksbyxsKX13PlQ/bT1oK3c6Zz1wK1Q7dmFyIEE9e2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsLGFkZDpmdW5jdGlvbihlKXtNKEEsZSwrdihlLCsrZCksK3goZSxkKSxwLGgsZyxtKX0sdmlzaXQ6ZnVuY3Rpb24oZSl7dXIoZSxBLHAsaCxnLG0pfSxmaW5kOmZ1bmN0aW9uKGUpe3JldHVybiBkcihBLGVbMF0sZVsxXSxwLGgsZyxtKX19O2lmKGQ9LTEsbnVsbD09dCl7Zm9yKDsrK2Q8ZjspTShBLGVbZF0sY1tkXSx1W2RdLHAsaCxnLG0pOy0tZH1lbHNlIGUuZm9yRWFjaChBLmFkZCk7cmV0dXJuIGM9dT1lPXM9bnVsbCxBfXJldHVybiBzLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSxzKTpvfSxzLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSxzKTpsfSxzLmV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09ZT90PXI9bj1hPW51bGw6KHQ9K2VbMF1bMF0scj0rZVswXVsxXSxuPStlWzFdWzBdLGE9K2VbMV1bMV0pLHMpOm51bGw9PXQ/bnVsbDpbW3Qscl0sW24sYV1dfSxzLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PWU/dD1yPW49YT1udWxsOih0PXI9MCxuPStlWzBdLGE9K2VbMV0pLHMpOm51bGw9PXQ/bnVsbDpbbi10LGEtcl19LHN9LGUuaW50ZXJwb2xhdGVSZ2I9ZnIsZS5pbnRlcnBvbGF0ZU9iamVjdD1wcixlLmludGVycG9sYXRlTnVtYmVyPWhyLGUuaW50ZXJwb2xhdGVTdHJpbmc9Z3I7dmFyIG1yPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyx2cj1uZXcgUmVnRXhwKG1yLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHlyKHQscil7Zm9yKHZhciBuLGE9ZS5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLWE+PTAmJiEobj1lLmludGVycG9sYXRvcnNbYV0odCxyKSk7KTtyZXR1cm4gbn1mdW5jdGlvbiB4cihlLHQpe3ZhciByLG49W10sYT1bXSxpPWUubGVuZ3RoLG89dC5sZW5ndGgsbD1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKHI9MDtyPGw7KytyKW4ucHVzaCh5cihlW3JdLHRbcl0pKTtmb3IoO3I8aTsrK3IpYVtyXT1lW3JdO2Zvcig7cjxvOysrcilhW3JdPXRbcl07cmV0dXJuIGZ1bmN0aW9uKGUpe2ZvcihyPTA7cjxsOysrcilhW3JdPW5bcl0oZSk7cmV0dXJuIGF9fWUuaW50ZXJwb2xhdGU9eXIsZS5pbnRlcnBvbGF0b3JzPVtmdW5jdGlvbihlLHQpe3ZhciByPXR5cGVvZiB0O3JldHVybigic3RyaW5nIj09PXI/c3QuaGFzKHQudG9Mb3dlckNhc2UoKSl8fC9eKCN8cmdiXCh8aHNsXCgpL2kudGVzdCh0KT9mcjpncjp0IGluc3RhbmNlb2YgRmU/ZnI6QXJyYXkuaXNBcnJheSh0KT94cjoib2JqZWN0Ij09PXImJmlzTmFOKHQpP3ByOmhyKShlLHQpfV0sZS5pbnRlcnBvbGF0ZUFycmF5PXhyO3ZhciBicj1mdW5jdGlvbigpe3JldHVybiBDfSxfcj1lLm1hcCh7bGluZWFyOmJyLHBvbHk6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfX0scXVhZDpmdW5jdGlvbigpe3JldHVybiBBcn0sY3ViaWM6ZnVuY3Rpb24oKXtyZXR1cm4gTHJ9LHNpbjpmdW5jdGlvbigpe3JldHVybiBEcn0sZXhwOmZ1bmN0aW9uKCl7cmV0dXJuIENyfSxjaXJjbGU6ZnVuY3Rpb24oKXtyZXR1cm4gT3J9LGVsYXN0aWM6ZnVuY3Rpb24oZSx0KXt2YXIgcjthcmd1bWVudHMubGVuZ3RoPDImJih0PS40NSk7YXJndW1lbnRzLmxlbmd0aD9yPXQvQWUqTWF0aC5hc2luKDEvZSk6KGU9MSxyPXQvNCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiAxK2UqTWF0aC5wb3coMiwtMTAqbikqTWF0aC5zaW4oKG4tcikqQWUvdCl9fSxiYWNrOmZ1bmN0aW9uKGUpe2V8fChlPTEuNzAxNTgpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCp0KigoZSsxKSp0LWUpfX0sYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIFByfX0pLHdyPWUubWFwKHtpbjpDLG91dDpNciwiaW4tb3V0Ijprciwib3V0LWluIjpmdW5jdGlvbihlKXtyZXR1cm4ga3IoTXIoZSkpfX0pO2Z1bmN0aW9uIFRyKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9MD8wOnQ+PTE/MTplKHQpfX1mdW5jdGlvbiBNcihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtZSgxLXQpfX1mdW5jdGlvbiBrcihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLjUqKHQ8LjU/ZSgyKnQpOjItZSgyLTIqdCkpfX1mdW5jdGlvbiBBcihlKXtyZXR1cm4gZSplfWZ1bmN0aW9uIExyKGUpe3JldHVybiBlKmUqZX1mdW5jdGlvbiBTcihlKXtpZihlPD0wKXJldHVybiAwO2lmKGU+PTEpcmV0dXJuIDE7dmFyIHQ9ZSplLHI9dCplO3JldHVybiA0KihlPC41P3I6MyooZS10KStyLS43NSl9ZnVuY3Rpb24gRHIoZSl7cmV0dXJuIDEtTWF0aC5jb3MoZSpTZSl9ZnVuY3Rpb24gQ3IoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqKGUtMSkpfWZ1bmN0aW9uIE9yKGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24gUHIoZSl7cmV0dXJuIGU8MS8yLjc1PzcuNTYyNSplKmU6ZTwyLzIuNzU/Ny41NjI1KihlLT0xLjUvMi43NSkqZSsuNzU6ZTwyLjUvMi43NT83LjU2MjUqKGUtPTIuMjUvMi43NSkqZSsuOTM3NTo3LjU2MjUqKGUtPTIuNjI1LzIuNzUpKmUrLjk4NDM3NX1mdW5jdGlvbiBJcihlLHQpe3JldHVybiB0LT1lLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKGUrdCpyKX19ZnVuY3Rpb24gUnIoZSl7dmFyIHQscixuLGE9W2UuYSxlLmJdLGk9W2UuYyxlLmRdLG89TnIoYSksbD16cihhLGkpLHM9TnIoKCh0PWkpWzBdKz0obj0tbCkqKHI9YSlbMF0sdFsxXSs9bipyWzFdLHQpKXx8MDthWzBdKmlbMV08aVswXSphWzFdJiYoYVswXSo9LTEsYVsxXSo9LTEsbyo9LTEsbCo9LTEpLHRoaXMucm90YXRlPShvP01hdGguYXRhbjIoYVsxXSxhWzBdKTpNYXRoLmF0YW4yKC1pWzBdLGlbMV0pKSpDZSx0aGlzLnRyYW5zbGF0ZT1bZS5lLGUuZl0sdGhpcy5zY2FsZT1bbyxzXSx0aGlzLnNrZXc9cz9NYXRoLmF0YW4yKGwscykqQ2U6MH1mdW5jdGlvbiB6cihlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdfWZ1bmN0aW9uIE5yKGUpe3ZhciB0PU1hdGguc3FydCh6cihlLGUpKTtyZXR1cm4gdCYmKGVbMF0vPXQsZVsxXS89dCksdH1lLmVhc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleE9mKCItIiksbj10Pj0wP2Uuc2xpY2UoMCx0KTplLGE9dD49MD9lLnNsaWNlKHQrMSk6ImluIjtyZXR1cm4gbj1fci5nZXQobil8fGJyLFRyKChhPXdyLmdldChhKXx8Qykobi5hcHBseShudWxsLHIuY2FsbChhcmd1bWVudHMsMSkpKSl9LGUuaW50ZXJwb2xhdGVIY2w9ZnVuY3Rpb24odCxyKXt0PWUuaGNsKHQpLHI9ZS5oY2wocik7dmFyIG49dC5oLGE9dC5jLGk9dC5sLG89ci5oLW4sbD1yLmMtYSxzPXIubC1pO2lzTmFOKGwpJiYobD0wLGE9aXNOYU4oYSk/ci5jOmEpO2lzTmFOKG8pPyhvPTAsbj1pc05hTihuKT9yLmg6bik6bz4xODA/by09MzYwOm88LTE4MCYmKG8rPTM2MCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBWZShuK28qZSxhK2wqZSxpK3MqZSkrIiJ9fSxlLmludGVycG9sYXRlSHNsPWZ1bmN0aW9uKHQscil7dD1lLmhzbCh0KSxyPWUuaHNsKHIpO3ZhciBuPXQuaCxhPXQucyxpPXQubCxvPXIuaC1uLGw9ci5zLWEscz1yLmwtaTtpc05hTihsKSYmKGw9MCxhPWlzTmFOKGEpP3IuczphKTtpc05hTihvKT8obz0wLG49aXNOYU4obik/ci5oOm4pOm8+MTgwP28tPTM2MDpvPC0xODAmJihvKz0zNjApO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gSGUobitvKmUsYStsKmUsaStzKmUpKyIifX0sZS5pbnRlcnBvbGF0ZUxhYj1mdW5jdGlvbih0LHIpe3Q9ZS5sYWIodCkscj1lLmxhYihyKTt2YXIgbj10LmwsYT10LmEsaT10LmIsbz1yLmwtbixsPXIuYS1hLHM9ci5iLWk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBaZShuK28qZSxhK2wqZSxpK3MqZSkrIiJ9fSxlLmludGVycG9sYXRlUm91bmQ9SXIsZS50cmFuc2Zvcm09ZnVuY3Rpb24odCl7dmFyIHI9YS5jcmVhdGVFbGVtZW50TlMoZS5ucy5wcmVmaXguc3ZnLCJnIik7cmV0dXJuKGUudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpe3Iuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpO3ZhciB0PXIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1cm4gbmV3IFJyKHQ/dC5tYXRyaXg6RnIpfSkodCl9LFJyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLnRyYW5zbGF0ZSsiKXJvdGF0ZSgiK3RoaXMucm90YXRlKyIpc2tld1goIit0aGlzLnNrZXcrIilzY2FsZSgiK3RoaXMuc2NhbGUrIikifTt2YXIgRnI9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtmdW5jdGlvbiBFcihlKXtyZXR1cm4gZS5sZW5ndGg/ZS5wb3AoKSsiLCI6IiJ9ZnVuY3Rpb24ganIodCxyKXt2YXIgbj1bXSxhPVtdO3JldHVybiB0PWUudHJhbnNmb3JtKHQpLHI9ZS50cmFuc2Zvcm0ociksZnVuY3Rpb24oZSx0LHIsbil7aWYoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdKXt2YXIgYT1yLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsIiwiLG51bGwsIikiKTtuLnB1c2goe2k6YS00LHg6aHIoZVswXSx0WzBdKX0se2k6YS0yLHg6aHIoZVsxXSx0WzFdKX0pfWVsc2UodFswXXx8dFsxXSkmJnIucHVzaCgidHJhbnNsYXRlKCIrdCsiKSIpfSh0LnRyYW5zbGF0ZSxyLnRyYW5zbGF0ZSxuLGEpLGZ1bmN0aW9uKGUsdCxyLG4pe2UhPT10PyhlLXQ+MTgwP3QrPTM2MDp0LWU+MTgwJiYoZSs9MzYwKSxuLnB1c2goe2k6ci5wdXNoKEVyKHIpKyJyb3RhdGUoIixudWxsLCIpIiktMix4OmhyKGUsdCl9KSk6dCYmci5wdXNoKEVyKHIpKyJyb3RhdGUoIit0KyIpIil9KHQucm90YXRlLHIucm90YXRlLG4sYSksZnVuY3Rpb24oZSx0LHIsbil7ZSE9PXQ/bi5wdXNoKHtpOnIucHVzaChFcihyKSsic2tld1goIixudWxsLCIpIiktMix4OmhyKGUsdCl9KTp0JiZyLnB1c2goRXIocikrInNrZXdYKCIrdCsiKSIpfSh0LnNrZXcsci5za2V3LG4sYSksZnVuY3Rpb24oZSx0LHIsbil7aWYoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdKXt2YXIgYT1yLnB1c2goRXIocikrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO24ucHVzaCh7aTphLTQseDpocihlWzBdLHRbMF0pfSx7aTphLTIseDpocihlWzFdLHRbMV0pfSl9ZWxzZSAxPT09dFswXSYmMT09PXRbMV18fHIucHVzaChFcihyKSsic2NhbGUoIit0KyIpIil9KHQuc2NhbGUsci5zY2FsZSxuLGEpLHQ9cj1udWxsLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPS0xLGk9YS5sZW5ndGg7KytyPGk7KW5bKHQ9YVtyXSkuaV09dC54KGUpO3JldHVybiBuLmpvaW4oIiIpfX1mdW5jdGlvbiBIcihlLHQpe3JldHVybiB0PSh0LT1lPStlKXx8MS90LGZ1bmN0aW9uKHIpe3JldHVybihyLWUpL3R9fWZ1bmN0aW9uIEJyKGUsdCl7cmV0dXJuIHQ9KHQtPWU9K2UpfHwxL3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSwoci1lKS90KSl9fWZ1bmN0aW9uIFlyKGUpe2Zvcih2YXIgdD1lLnNvdXJjZSxyPWUudGFyZ2V0LG49ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gZTt2YXIgcj1WcihlKSxuPVZyKHQpLGE9ci5wb3AoKSxpPW4ucG9wKCksbz1udWxsO2Zvcig7YT09PWk7KW89YSxhPXIucG9wKCksaT1uLnBvcCgpO3JldHVybiBvfSh0LHIpLGE9W3RdO3QhPT1uOyl0PXQucGFyZW50LGEucHVzaCh0KTtmb3IodmFyIGk9YS5sZW5ndGg7ciE9PW47KWEuc3BsaWNlKGksMCxyKSxyPXIucGFyZW50O3JldHVybiBhfWZ1bmN0aW9uIFZyKGUpe2Zvcih2YXIgdD1bXSxyPWUucGFyZW50O251bGwhPXI7KXQucHVzaChlKSxlPXIscj1yLnBhcmVudDtyZXR1cm4gdC5wdXNoKGUpLHR9ZnVuY3Rpb24gVXIoZSl7ZS5maXhlZHw9Mn1mdW5jdGlvbiBxcihlKXtlLmZpeGVkJj0tN31mdW5jdGlvbiBHcihlKXtlLmZpeGVkfD00LGUucHg9ZS54LGUucHk9ZS55fWZ1bmN0aW9uIFpyKGUpe2UuZml4ZWQmPS01fWUuaW50ZXJwb2xhdGVUcmFuc2Zvcm09anIsZS5sYXlvdXQ9e30sZS5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXQucHVzaChZcihlW3JdKSk7cmV0dXJuIHR9fSxlLmxheW91dC5jaG9yZD1mdW5jdGlvbigpe3ZhciB0LHIsbixhLGksbyxsLHM9e30sYz0wO2Z1bmN0aW9uIHUoKXt2YXIgcyx1LGYscCxoLGc9e30sbT1bXSx2PWUucmFuZ2UoYSkseT1bXTtmb3IodD1bXSxyPVtdLHM9MCxwPS0xOysrcDxhOyl7Zm9yKHU9MCxoPS0xOysraDxhOyl1Kz1uW3BdW2hdO20ucHVzaCh1KSx5LnB1c2goZS5yYW5nZShhKSkscys9dX1mb3IoaSYmdi5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBpKG1bZV0sbVt0XSl9KSksbyYmeS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2Uuc29ydCgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gbyhuW3RdW2VdLG5bdF1bcl0pfSkpfSkpLHM9KEFlLWMqYSkvcyx1PTAscD0tMTsrK3A8YTspe2ZvcihmPXUsaD0tMTsrK2g8YTspe3ZhciB4PXZbcF0sYj15W3hdW2hdLF89blt4XVtiXSx3PXUsVD11Kz1fKnM7Z1t4KyItIitiXT17aW5kZXg6eCxzdWJpbmRleDpiLHN0YXJ0QW5nbGU6dyxlbmRBbmdsZTpULHZhbHVlOl99fXJbeF09e2luZGV4Ongsc3RhcnRBbmdsZTpmLGVuZEFuZ2xlOnUsdmFsdWU6bVt4XX0sdSs9Y31mb3IocD0tMTsrK3A8YTspZm9yKGg9cC0xOysraDxhOyl7dmFyIE09Z1twKyItIitoXSxrPWdbaCsiLSIrcF07KE0udmFsdWV8fGsudmFsdWUpJiZ0LnB1c2goTS52YWx1ZTxrLnZhbHVlP3tzb3VyY2U6ayx0YXJnZXQ6TX06e3NvdXJjZTpNLHRhcmdldDprfSl9bCYmZCgpfWZ1bmN0aW9uIGQoKXt0LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwoKGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlKS8yLCh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSkvMil9KSl9cmV0dXJuIHMubWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPShuPWUpJiZuLmxlbmd0aCx0PXI9bnVsbCxzKTpufSxzLnBhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ZSx0PXI9bnVsbCxzKTpjfSxzLnNvcnRHcm91cHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSx0PXI9bnVsbCxzKTppfSxzLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSx0PW51bGwscyk6b30scy5zb3J0Q2hvcmRzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsdCYmZCgpLHMpOmx9LHMuY2hvcmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHR8fHUoKSx0fSxzLmdyb3Vwcz1mdW5jdGlvbigpe3JldHVybiByfHx1KCkscn0sc30sZS5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXt2YXIgdCxyLG4sYSxpLG8sbD17fSxzPWUuZGlzcGF0Y2goInN0YXJ0IiwidGljayIsImVuZCIpLGM9WzEsMV0sdT0uOSxkPVdyLGY9WHIscD0tMzAsaD1KcixnPS4xLG09LjY0LHY9W10seT1bXTtmdW5jdGlvbiB4KGUpe3JldHVybiBmdW5jdGlvbih0LHIsbixhKXtpZih0LnBvaW50IT09ZSl7dmFyIGk9dC5jeC1lLngsbz10LmN5LWUueSxsPWEtcixzPWkqaStvKm87aWYobCpsL208cyl7aWYoczxoKXt2YXIgYz10LmNoYXJnZS9zO2UucHgtPWkqYyxlLnB5LT1vKmN9cmV0dXJuITB9aWYodC5wb2ludCYmcyYmczxoKXtjPXQucG9pbnRDaGFyZ2UvcztlLnB4LT1pKmMsZS5weS09bypjfX1yZXR1cm4hdC5jaGFyZ2V9fWZ1bmN0aW9uIGIodCl7dC5weD1lLmV2ZW50LngsdC5weT1lLmV2ZW50LnksbC5yZXN1bWUoKX1yZXR1cm4gbC50aWNrPWZ1bmN0aW9uKCl7aWYoKG4qPS45OSk8LjAwNSlyZXR1cm4gdD1udWxsLHMuZW5kKHt0eXBlOiJlbmQiLGFscGhhOm49MH0pLCEwO3ZhciByLGwsZCxmLGgsbSxiLF8sdyxUPXYubGVuZ3RoLE09eS5sZW5ndGg7Zm9yKGw9MDtsPE07KytsKWY9KGQ9eVtsXSkuc291cmNlLChtPShfPShoPWQudGFyZ2V0KS54LWYueCkqXysodz1oLnktZi55KSp3KSYmKF8qPW09bippW2xdKigobT1NYXRoLnNxcnQobSkpLWFbbF0pL20sdyo9bSxoLngtPV8qKGI9Zi53ZWlnaHQraC53ZWlnaHQ/Zi53ZWlnaHQvKGYud2VpZ2h0K2gud2VpZ2h0KTouNSksaC55LT13KmIsZi54Kz1fKihiPTEtYiksZi55Kz13KmIpO2lmKChiPW4qZykmJihfPWNbMF0vMix3PWNbMV0vMixsPS0xLGIpKWZvcig7KytsPFQ7KShkPXZbbF0pLngrPShfLWQueCkqYixkLnkrPSh3LWQueSkqYjtpZihwKWZvcighZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE9MCxpPTA7aWYodC5jaGFyZ2U9MCwhdC5sZWFmKWZvcih2YXIgbyxsPXQubm9kZXMscz1sLmxlbmd0aCxjPS0xOysrYzxzOyludWxsIT0obz1sW2NdKSYmKGUobyxyLG4pLHQuY2hhcmdlKz1vLmNoYXJnZSxhKz1vLmNoYXJnZSpvLmN4LGkrPW8uY2hhcmdlKm8uY3kpO2lmKHQucG9pbnQpe3QubGVhZnx8KHQucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSx0LnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciB1PXIqblt0LnBvaW50LmluZGV4XTt0LmNoYXJnZSs9dC5wb2ludENoYXJnZT11LGErPXUqdC5wb2ludC54LGkrPXUqdC5wb2ludC55fXQuY3g9YS90LmNoYXJnZSx0LmN5PWkvdC5jaGFyZ2V9KHI9ZS5nZW9tLnF1YWR0cmVlKHYpLG4sbyksbD0tMTsrK2w8VDspKGQ9dltsXSkuZml4ZWR8fHIudmlzaXQoeChkKSk7Zm9yKGw9LTE7KytsPFQ7KShkPXZbbF0pLmZpeGVkPyhkLng9ZC5weCxkLnk9ZC5weSk6KGQueC09KGQucHgtKGQucHg9ZC54KSkqdSxkLnktPShkLnB5LShkLnB5PWQueSkpKnUpO3MudGljayh7dHlwZToidGljayIsYWxwaGE6bn0pfSxsLm5vZGVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWUsbCk6dn0sbC5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1lLGwpOnl9LGwuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLGwpOmN9LGwubGlua0Rpc3RhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6K2UsbCk6ZH0sbC5kaXN0YW5jZT1sLmxpbmtEaXN0YW5jZSxsLmxpbmtTdHJlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOitlLGwpOmZ9LGwuZnJpY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K2UsbCk6dX0sbC5jaGFyZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTorZSxsKTpwfSxsLmNoYXJnZURpc3RhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWUqZSxsKTpNYXRoLnNxcnQoaCl9LGwuZ3Jhdml0eT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rZSxsKTpnfSxsLnRoZXRhPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWUqZSxsKTpNYXRoLnNxcnQobSl9LGwuYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2Usbj9lPjA/bj1lOih0LmM9bnVsbCx0LnQ9TmFOLHQ9bnVsbCxzLmVuZCh7dHlwZToiZW5kIixhbHBoYTpuPTB9KSk6ZT4wJiYocy5zdGFydCh7dHlwZToic3RhcnQiLGFscGhhOm49ZX0pLHQ9dnQobC50aWNrKSksbCk6bn0sbC5zdGFydD1mdW5jdGlvbigpe3ZhciBlLHQscixuPXYubGVuZ3RoLHM9eS5sZW5ndGgsdT1jWzBdLGg9Y1sxXTtmb3IoZT0wO2U8bjsrK2UpKHI9dltlXSkuaW5kZXg9ZSxyLndlaWdodD0wO2ZvcihlPTA7ZTxzOysrZSkibnVtYmVyIj09dHlwZW9mKHI9eVtlXSkuc291cmNlJiYoci5zb3VyY2U9dltyLnNvdXJjZV0pLCJudW1iZXIiPT10eXBlb2Ygci50YXJnZXQmJihyLnRhcmdldD12W3IudGFyZ2V0XSksKytyLnNvdXJjZS53ZWlnaHQsKytyLnRhcmdldC53ZWlnaHQ7Zm9yKGU9MDtlPG47KytlKXI9dltlXSxpc05hTihyLngpJiYoci54PWcoIngiLHUpKSxpc05hTihyLnkpJiYoci55PWcoInkiLGgpKSxpc05hTihyLnB4KSYmKHIucHg9ci54KSxpc05hTihyLnB5KSYmKHIucHk9ci55KTtpZihhPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBkKWZvcihlPTA7ZTxzOysrZSlhW2VdPStkLmNhbGwodGhpcyx5W2VdLGUpO2Vsc2UgZm9yKGU9MDtlPHM7KytlKWFbZV09ZDtpZihpPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBmKWZvcihlPTA7ZTxzOysrZSlpW2VdPStmLmNhbGwodGhpcyx5W2VdLGUpO2Vsc2UgZm9yKGU9MDtlPHM7KytlKWlbZV09ZjtpZihvPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBwKWZvcihlPTA7ZTxuOysrZSlvW2VdPStwLmNhbGwodGhpcyx2W2VdLGUpO2Vsc2UgZm9yKGU9MDtlPG47KytlKW9bZV09cDtmdW5jdGlvbiBnKHIsYSl7aWYoIXQpe2Zvcih0PW5ldyBBcnJheShuKSxjPTA7YzxuOysrYyl0W2NdPVtdO2ZvcihjPTA7YzxzOysrYyl7dmFyIGk9eVtjXTt0W2kuc291cmNlLmluZGV4XS5wdXNoKGkudGFyZ2V0KSx0W2kudGFyZ2V0LmluZGV4XS5wdXNoKGkuc291cmNlKX19Zm9yKHZhciBvLGw9dFtlXSxjPS0xLHU9bC5sZW5ndGg7KytjPHU7KWlmKCFpc05hTihvPWxbY11bcl0pKXJldHVybiBvO3JldHVybiBNYXRoLnJhbmRvbSgpKmF9cmV0dXJuIGwucmVzdW1lKCl9LGwucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGwuYWxwaGEoLjEpfSxsLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gbC5hbHBoYSgwKX0sbC5kcmFnPWZ1bmN0aW9uKCl7aWYocnx8KHI9ZS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKEMpLm9uKCJkcmFnc3RhcnQuZm9yY2UiLFVyKS5vbigiZHJhZy5mb3JjZSIsYikub24oImRyYWdlbmQuZm9yY2UiLHFyKSksIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI7dGhpcy5vbigibW91c2VvdmVyLmZvcmNlIixHcikub24oIm1vdXNlb3V0LmZvcmNlIixacikuY2FsbChyKX0sZS5yZWJpbmQobCxzLCJvbiIpfTt2YXIgV3I9MjAsWHI9MSxKcj0xLzA7ZnVuY3Rpb24gUXIodCxyKXtyZXR1cm4gZS5yZWJpbmQodCxyLCJzb3J0IiwiY2hpbGRyZW4iLCJ2YWx1ZSIpLHQubm9kZXM9dCx0LmxpbmtzPW5uLHR9ZnVuY3Rpb24gS3IoZSx0KXtmb3IodmFyIHI9W2VdO251bGwhPShlPXIucG9wKCkpOylpZih0KGUpLChhPWUuY2hpbGRyZW4pJiYobj1hLmxlbmd0aCkpZm9yKHZhciBuLGE7LS1uPj0wOylyLnB1c2goYVtuXSl9ZnVuY3Rpb24gJHIoZSx0KXtmb3IodmFyIHI9W2VdLG49W107bnVsbCE9KGU9ci5wb3AoKSk7KWlmKG4ucHVzaChlKSwoaT1lLmNoaWxkcmVuKSYmKGE9aS5sZW5ndGgpKWZvcih2YXIgYSxpLG89LTE7KytvPGE7KXIucHVzaChpW29dKTtmb3IoO251bGwhPShlPW4ucG9wKCkpOyl0KGUpfWZ1bmN0aW9uIGVuKGUpe3JldHVybiBlLmNoaWxkcmVufWZ1bmN0aW9uIHRuKGUpe3JldHVybiBlLnZhbHVlfWZ1bmN0aW9uIHJuKGUsdCl7cmV0dXJuIHQudmFsdWUtZS52YWx1ZX1mdW5jdGlvbiBubih0KXtyZXR1cm4gZS5tZXJnZSh0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKGUuY2hpbGRyZW58fFtdKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6ZSx0YXJnZXQ6dH19KSl9KSkpfWUubGF5b3V0LmhpZXJhcmNoeT1mdW5jdGlvbigpe3ZhciBlPXJuLHQ9ZW4scj10bjtmdW5jdGlvbiBuKGEpe3ZhciBpLG89W2FdLGw9W107Zm9yKGEuZGVwdGg9MDtudWxsIT0oaT1vLnBvcCgpKTspaWYobC5wdXNoKGkpLChjPXQuY2FsbChuLGksaS5kZXB0aCkpJiYocz1jLmxlbmd0aCkpe2Zvcih2YXIgcyxjLHU7LS1zPj0wOylvLnB1c2godT1jW3NdKSx1LnBhcmVudD1pLHUuZGVwdGg9aS5kZXB0aCsxO3ImJihpLnZhbHVlPTApLGkuY2hpbGRyZW49Y31lbHNlIHImJihpLnZhbHVlPStyLmNhbGwobixpLGkuZGVwdGgpfHwwKSxkZWxldGUgaS5jaGlsZHJlbjtyZXR1cm4gJHIoYSwoZnVuY3Rpb24odCl7dmFyIG4sYTtlJiYobj10LmNoaWxkcmVuKSYmbi5zb3J0KGUpLHImJihhPXQucGFyZW50KSYmKGEudmFsdWUrPXQudmFsdWUpfSkpLGx9cmV0dXJuIG4uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4uY2hpbGRyZW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsbik6cn0sbi5yZXZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByJiYoS3IoZSwoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmKGUudmFsdWU9MCl9KSksJHIoZSwoZnVuY3Rpb24oZSl7dmFyIHQ7ZS5jaGlsZHJlbnx8KGUudmFsdWU9K3IuY2FsbChuLGUsZS5kZXB0aCl8fDApLCh0PWUucGFyZW50KSYmKHQudmFsdWUrPWUudmFsdWUpfSkpKSxlfSxufSxlLmxheW91dC5wYXJ0aXRpb249ZnVuY3Rpb24oKXt2YXIgdD1lLmxheW91dC5oaWVyYXJjaHkoKSxyPVsxLDFdO2Z1bmN0aW9uIG4oZSxuKXt2YXIgYT10LmNhbGwodGhpcyxlLG4pO3JldHVybiBmdW5jdGlvbiBlKHQscixuLGEpe3ZhciBpPXQuY2hpbGRyZW47aWYodC54PXIsdC55PXQuZGVwdGgqYSx0LmR4PW4sdC5keT1hLGkmJihvPWkubGVuZ3RoKSl7dmFyIG8sbCxzLGM9LTE7Zm9yKG49dC52YWx1ZT9uL3QudmFsdWU6MDsrK2M8bzspZShsPWlbY10scixzPWwudmFsdWUqbixhKSxyKz1zfX0oYVswXSwwLHJbMF0sclsxXS9mdW5jdGlvbiBlKHQpe3ZhciByPXQuY2hpbGRyZW4sbj0wO2lmKHImJihhPXIubGVuZ3RoKSlmb3IodmFyIGEsaT0tMTsrK2k8YTspbj1NYXRoLm1heChuLGUocltpXSkpO3JldHVybiAxK259KGFbMF0pKSxhfXJldHVybiBuLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxuKTpyfSxRcihuLHQpfSxlLmxheW91dC5waWU9ZnVuY3Rpb24oKXt2YXIgdD1OdW1iZXIscj1hbixuPTAsYT1BZSxpPTA7ZnVuY3Rpb24gbyhsKXt2YXIgcyxjPWwubGVuZ3RoLHU9bC5tYXAoKGZ1bmN0aW9uKGUscil7cmV0dXJuK3QuY2FsbChvLGUscil9KSksZD0rKCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLGY9KCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmEpLWQscD1NYXRoLm1pbihNYXRoLmFicyhmKS9jLCsoImZ1bmN0aW9uIj09dHlwZW9mIGk/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aSkpLGg9cCooZjwwPy0xOjEpLGc9ZS5zdW0odSksbT1nPyhmLWMqaCkvZzowLHY9ZS5yYW5nZShjKSx5PVtdO3JldHVybiBudWxsIT1yJiZ2LnNvcnQocj09PWFuP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHVbdF0tdVtlXX06ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihsW2VdLGxbdF0pfSksdi5mb3JFYWNoKChmdW5jdGlvbihlKXt5W2VdPXtkYXRhOmxbZV0sdmFsdWU6cz11W2VdLHN0YXJ0QW5nbGU6ZCxlbmRBbmdsZTpkKz1zKm0raCxwYWRBbmdsZTpwfX0pKSx5fXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6dH0sby5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsbyk6cn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsbyk6bn0sby5lbmRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLG8pOmF9LG8ucGFkQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSxvKTppfSxvfTt2YXIgYW49e307ZnVuY3Rpb24gb24oZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBsbihlKXtyZXR1cm4gZS55fWZ1bmN0aW9uIHNuKGUsdCxyKXtlLnkwPXQsZS55PXJ9ZS5sYXlvdXQuc3RhY2s9ZnVuY3Rpb24oKXt2YXIgdD1DLHI9ZG4sbj1mbixhPXNuLGk9b24sbz1sbjtmdW5jdGlvbiBsKHMsYyl7aWYoIShwPXMubGVuZ3RoKSlyZXR1cm4gczt2YXIgdT1zLm1hcCgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5jYWxsKGwsZSxyKX0pKSxkPXUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW2kuY2FsbChsLGUsdCksby5jYWxsKGwsZSx0KV19KSl9KSksZj1yLmNhbGwobCxkLGMpO3U9ZS5wZXJtdXRlKHUsZiksZD1lLnBlcm11dGUoZCxmKTt2YXIgcCxoLGcsbSx2PW4uY2FsbChsLGQsYykseT11WzBdLmxlbmd0aDtmb3IoZz0wO2c8eTsrK2cpZm9yKGEuY2FsbChsLHVbMF1bZ10sbT12W2ddLGRbMF1bZ11bMV0pLGg9MTtoPHA7KytoKWEuY2FsbChsLHVbaF1bZ10sbSs9ZFtoLTFdW2ddWzFdLGRbaF1bZ11bMV0pO3JldHVybiBzfXJldHVybiBsLnZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGwpOnR9LGwub3JkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpjbi5nZXQoZSl8fGRuLGwpOnJ9LGwub2Zmc2V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6dW4uZ2V0KGUpfHxmbixsKTpufSxsLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSxsKTppfSxsLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSxsKTpvfSxsLm91dD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLGwpOmF9LGx9O3ZhciBjbj1lLm1hcCh7Imluc2lkZS1vdXQiOmZ1bmN0aW9uKHQpe3ZhciByLG4sYT10Lmxlbmd0aCxpPXQubWFwKHBuKSxvPXQubWFwKGhuKSxsPWUucmFuZ2UoYSkuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaVtlXS1pW3RdfSkpLHM9MCxjPTAsdT1bXSxkPVtdO2ZvcihyPTA7cjxhOysrciluPWxbcl0sczxjPyhzKz1vW25dLHUucHVzaChuKSk6KGMrPW9bbl0sZC5wdXNoKG4pKTtyZXR1cm4gZC5yZXZlcnNlKCkuY29uY2F0KHUpfSxyZXZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBlLnJhbmdlKHQubGVuZ3RoKS5yZXZlcnNlKCl9LGRlZmF1bHQ6ZG59KSx1bj1lLm1hcCh7c2lsaG91ZXR0ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG4sYT1lLmxlbmd0aCxpPWVbMF0ubGVuZ3RoLG89W10sbD0wLHM9W107Zm9yKHI9MDtyPGk7KytyKXtmb3IodD0wLG49MDt0PGE7dCsrKW4rPWVbdF1bcl1bMV07bj5sJiYobD1uKSxvLnB1c2gobil9Zm9yKHI9MDtyPGk7KytyKXNbcl09KGwtb1tyXSkvMjtyZXR1cm4gc30sd2lnZ2xlOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhLGksbyxsLHMsYyx1PWUubGVuZ3RoLGQ9ZVswXSxmPWQubGVuZ3RoLHA9W107Zm9yKHBbMF09cz1jPTAscj0xO3I8ZjsrK3Ipe2Zvcih0PTAsYT0wO3Q8dTsrK3QpYSs9ZVt0XVtyXVsxXTtmb3IodD0wLGk9MCxsPWRbcl1bMF0tZFtyLTFdWzBdO3Q8dTsrK3Qpe2ZvcihuPTAsbz0oZVt0XVtyXVsxXS1lW3RdW3ItMV1bMV0pLygyKmwpO248dDsrK24pbys9KGVbbl1bcl1bMV0tZVtuXVtyLTFdWzFdKS9sO2krPW8qZVt0XVtyXVsxXX1wW3JdPXMtPWE/aS9hKmw6MCxzPGMmJihjPXMpfWZvcihyPTA7cjxmOysrcilwW3JdLT1jO3JldHVybiBwfSxleHBhbmQ6ZnVuY3Rpb24oZSl7dmFyIHQscixuLGE9ZS5sZW5ndGgsaT1lWzBdLmxlbmd0aCxvPTEvYSxsPVtdO2ZvcihyPTA7cjxpOysrcil7Zm9yKHQ9MCxuPTA7dDxhO3QrKyluKz1lW3RdW3JdWzFdO2lmKG4pZm9yKHQ9MDt0PGE7dCsrKWVbdF1bcl1bMV0vPW47ZWxzZSBmb3IodD0wO3Q8YTt0KyspZVt0XVtyXVsxXT1vfWZvcihyPTA7cjxpOysrcilsW3JdPTA7cmV0dXJuIGx9LHplcm86Zm59KTtmdW5jdGlvbiBkbih0KXtyZXR1cm4gZS5yYW5nZSh0Lmxlbmd0aCl9ZnVuY3Rpb24gZm4oZSl7Zm9yKHZhciB0PS0xLHI9ZVswXS5sZW5ndGgsbj1bXTsrK3Q8cjspblt0XT0wO3JldHVybiBufWZ1bmN0aW9uIHBuKGUpe2Zvcih2YXIgdCxyPTEsbj0wLGE9ZVswXVsxXSxpPWUubGVuZ3RoO3I8aTsrK3IpKHQ9ZVtyXVsxXSk+YSYmKG49cixhPXQpO3JldHVybiBufWZ1bmN0aW9uIGhuKGUpe3JldHVybiBlLnJlZHVjZShnbiwwKX1mdW5jdGlvbiBnbihlLHQpe3JldHVybiBlK3RbMV19ZnVuY3Rpb24gbW4oZSx0KXtyZXR1cm4gdm4oZSxNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKzEpKX1mdW5jdGlvbiB2bihlLHQpe2Zvcih2YXIgcj0tMSxuPStlWzBdLGE9KGVbMV0tbikvdCxpPVtdOysrcjw9dDspaVtyXT1hKnIrbjtyZXR1cm4gaX1mdW5jdGlvbiB5bih0KXtyZXR1cm5bZS5taW4odCksZS5tYXgodCldfWZ1bmN0aW9uIHhuKGUsdCl7cmV0dXJuIGUudmFsdWUtdC52YWx1ZX1mdW5jdGlvbiBibihlLHQpe3ZhciByPWUuX3BhY2tfbmV4dDtlLl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9ZSx0Ll9wYWNrX25leHQ9cixyLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiBfbihlLHQpe2UuX3BhY2tfbmV4dD10LHQuX3BhY2tfcHJldj1lfWZ1bmN0aW9uIHduKGUsdCl7dmFyIHI9dC54LWUueCxuPXQueS1lLnksYT1lLnIrdC5yO3JldHVybi45OTkqYSphPnIqcituKm59ZnVuY3Rpb24gVG4oZSl7aWYoKHQ9ZS5jaGlsZHJlbikmJihzPXQubGVuZ3RoKSl7dmFyIHQscixuLGEsaSxvLGwscyxjPTEvMCx1PS0xLzAsZD0xLzAsZj0tMS8wO2lmKHQuZm9yRWFjaChNbiksKHI9dFswXSkueD0tci5yLHIueT0wLHgocikscz4xJiYoKG49dFsxXSkueD1uLnIsbi55PTAseChuKSxzPjIpKWZvcihBbihyLG4sYT10WzJdKSx4KGEpLGJuKHIsYSksci5fcGFja19wcmV2PWEsYm4oYSxuKSxuPXIuX3BhY2tfbmV4dCxpPTM7aTxzO2krKyl7QW4ocixuLGE9dFtpXSk7dmFyIHA9MCxoPTEsZz0xO2ZvcihvPW4uX3BhY2tfbmV4dDtvIT09bjtvPW8uX3BhY2tfbmV4dCxoKyspaWYod24obyxhKSl7cD0xO2JyZWFrfWlmKDE9PXApZm9yKGw9ci5fcGFja19wcmV2O2whPT1vLl9wYWNrX3ByZXYmJiF3bihsLGEpO2w9bC5fcGFja19wcmV2LGcrKyk7cD8oaDxnfHxoPT1nJiZuLnI8ci5yP19uKHIsbj1vKTpfbihyPWwsbiksaS0tKTooYm4ocixhKSxuPWEseChhKSl9dmFyIG09KGMrdSkvMix2PShkK2YpLzIseT0wO2ZvcihpPTA7aTxzO2krKykoYT10W2ldKS54LT1tLGEueS09dix5PU1hdGgubWF4KHksYS5yK01hdGguc3FydChhLngqYS54K2EueSphLnkpKTtlLnI9eSx0LmZvckVhY2goa24pfWZ1bmN0aW9uIHgoZSl7Yz1NYXRoLm1pbihlLngtZS5yLGMpLHU9TWF0aC5tYXgoZS54K2Uucix1KSxkPU1hdGgubWluKGUueS1lLnIsZCksZj1NYXRoLm1heChlLnkrZS5yLGYpfX1mdW5jdGlvbiBNbihlKXtlLl9wYWNrX25leHQ9ZS5fcGFja19wcmV2PWV9ZnVuY3Rpb24ga24oZSl7ZGVsZXRlIGUuX3BhY2tfbmV4dCxkZWxldGUgZS5fcGFja19wcmV2fWZ1bmN0aW9uIEFuKGUsdCxyKXt2YXIgbj1lLnIrci5yLGE9dC54LWUueCxpPXQueS1lLnk7aWYobiYmKGF8fGkpKXt2YXIgbz10LnIrci5yLGw9YSphK2kqaSxzPS41Kygobio9biktKG8qPW8pKS8oMipsKSxjPU1hdGguc3FydChNYXRoLm1heCgwLDIqbyoobitsKS0obi09bCkqbi1vKm8pKS8oMipsKTtyLng9ZS54K3MqYStjKmksci55PWUueStzKmktYyphfWVsc2Ugci54PWUueCtuLHIueT1lLnl9ZnVuY3Rpb24gTG4oZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBTbihlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0Lmxlbmd0aD90WzBdOmUudH1mdW5jdGlvbiBEbihlKXt2YXIgdCxyPWUuY2hpbGRyZW47cmV0dXJuKHQ9ci5sZW5ndGgpP3JbdC0xXTplLnR9ZnVuY3Rpb24gQ24oZSx0LHIpe3ZhciBuPXIvKHQuaS1lLmkpO3QuYy09bix0LnMrPXIsZS5jKz1uLHQueis9cix0Lm0rPXJ9ZnVuY3Rpb24gT24oZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gUG4oZSl7cmV0dXJue3g6ZS54LHk6ZS55LGR4OmUuZHgsZHk6ZS5keX19ZnVuY3Rpb24gSW4oZSx0KXt2YXIgcj1lLngrdFszXSxuPWUueSt0WzBdLGE9ZS5keC10WzFdLXRbM10saT1lLmR5LXRbMF0tdFsyXTtyZXR1cm4gYTwwJiYocis9YS8yLGE9MCksaTwwJiYobis9aS8yLGk9MCkse3g6cix5Om4sZHg6YSxkeTppfX1mdW5jdGlvbiBSbihlKXt2YXIgdD1lWzBdLHI9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdDxyP1t0LHJdOltyLHRdfWZ1bmN0aW9uIHpuKGUpe3JldHVybiBlLnJhbmdlRXh0ZW50P2UucmFuZ2VFeHRlbnQoKTpSbihlLnJhbmdlKCkpfWZ1bmN0aW9uIE5uKGUsdCxyLG4pe3ZhciBhPXIoZVswXSxlWzFdKSxpPW4odFswXSx0WzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGkoYShlKSl9fWZ1bmN0aW9uIEZuKGUsdCl7dmFyIHIsbj0wLGE9ZS5sZW5ndGgtMSxpPWVbbl0sbz1lW2FdO3JldHVybiBvPGkmJihyPW4sbj1hLGE9cixyPWksaT1vLG89ciksZVtuXT10LmZsb29yKGkpLGVbYV09dC5jZWlsKG8pLGV9ZnVuY3Rpb24gRW4oZSl7cmV0dXJuIGU/e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmZsb29yKHQvZSkqZX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKHQvZSkqZX19OmpufWUubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe3ZhciB0PSEwLHI9TnVtYmVyLG49eW4sYT1tbjtmdW5jdGlvbiBpKGksbyl7Zm9yKHZhciBsLHMsYz1bXSx1PWkubWFwKHIsdGhpcyksZD1uLmNhbGwodGhpcyx1LG8pLGY9YS5jYWxsKHRoaXMsZCx1LG8pLHA9KG89LTEsdS5sZW5ndGgpLGg9Zi5sZW5ndGgtMSxnPXQ/MToxL3A7KytvPGg7KShsPWNbb109W10pLmR4PWZbbysxXS0obC54PWZbb10pLGwueT0wO2lmKGg+MClmb3Iobz0tMTsrK288cDspKHM9dVtvXSk+PWRbMF0mJnM8PWRbMV0mJigobD1jW2UuYmlzZWN0KGYscywxLGgpLTFdKS55Kz1nLGwucHVzaChpW29dKSk7cmV0dXJuIGN9cmV0dXJuIGkudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxpKTpyfSxpLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWN0KGUpLGkpOm59LGkuYmlucz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0ibnVtYmVyIj09dHlwZW9mIGU/ZnVuY3Rpb24odCl7cmV0dXJuIHZuKHQsZSl9OmN0KGUpLGkpOmF9LGkuZnJlcXVlbmN5PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZSxpKTp0fSxpfSxlLmxheW91dC5wYWNrPWZ1bmN0aW9uKCl7dmFyIHQscj1lLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KHhuKSxuPTAsYT1bMSwxXTtmdW5jdGlvbiBpKGUsaSl7dmFyIG89ci5jYWxsKHRoaXMsZSxpKSxsPW9bMF0scz1hWzBdLGM9YVsxXSx1PW51bGw9PXQ/TWF0aC5zcXJ0OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdH07aWYobC54PWwueT0wLCRyKGwsKGZ1bmN0aW9uKGUpe2Uucj0rdShlLnZhbHVlKX0pKSwkcihsLFRuKSxuKXt2YXIgZD1uKih0PzE6TWF0aC5tYXgoMipsLnIvcywyKmwuci9jKSkvMjskcihsLChmdW5jdGlvbihlKXtlLnIrPWR9KSksJHIobCxUbiksJHIobCwoZnVuY3Rpb24oZSl7ZS5yLT1kfSkpfXJldHVybiBmdW5jdGlvbiBlKHQscixuLGEpe3ZhciBpPXQuY2hpbGRyZW47aWYodC54PXIrPWEqdC54LHQueT1uKz1hKnQueSx0LnIqPWEsaSlmb3IodmFyIG89LTEsbD1pLmxlbmd0aDsrK288bDspZShpW29dLHIsbixhKX0obCxzLzIsYy8yLHQ/MToxL01hdGgubWF4KDIqbC5yL3MsMipsLnIvYykpLG99cmV0dXJuIGkuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLGkpOmF9LGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PWV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6K2UsaSk6dH0saS5wYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStlLGkpOm59LFFyKGkscil9LGUubGF5b3V0LnRyZWU9ZnVuY3Rpb24oKXt2YXIgdD1lLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9TG4sbj1bMSwxXSxhPW51bGw7ZnVuY3Rpb24gaShlLGkpe3ZhciBjPXQuY2FsbCh0aGlzLGUsaSksdT1jWzBdLGQ9ZnVuY3Rpb24oZSl7dmFyIHQscj17QTpudWxsLGNoaWxkcmVuOltlXX0sbj1bcl07Zm9yKDtudWxsIT0odD1uLnBvcCgpKTspZm9yKHZhciBhLGk9dC5jaGlsZHJlbixvPTAsbD1pLmxlbmd0aDtvPGw7KytvKW4ucHVzaCgoaVtvXT1hPXtfOmlbb10scGFyZW50OnQsY2hpbGRyZW46KGE9aVtvXS5jaGlsZHJlbikmJmEuc2xpY2UoKXx8W10sQTpudWxsLGE6bnVsbCx6OjAsbTowLGM6MCxzOjAsdDpudWxsLGk6b30pLmE9YSk7cmV0dXJuIHIuY2hpbGRyZW5bMF19KHUpO2lmKCRyKGQsbyksZC5wYXJlbnQubT0tZC56LEtyKGQsbCksYSlLcih1LHMpO2Vsc2V7dmFyIGY9dSxwPXUsaD11O0tyKHUsKGZ1bmN0aW9uKGUpe2UueDxmLngmJihmPWUpLGUueD5wLngmJihwPWUpLGUuZGVwdGg+aC5kZXB0aCYmKGg9ZSl9KSk7dmFyIGc9cihmLHApLzItZi54LG09blswXS8ocC54K3IocCxmKS8yK2cpLHY9blsxXS8oaC5kZXB0aHx8MSk7S3IodSwoZnVuY3Rpb24oZSl7ZS54PShlLngrZykqbSxlLnk9ZS5kZXB0aCp2fSkpfXJldHVybiBjfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUucGFyZW50LmNoaWxkcmVuLGE9ZS5pP25bZS5pLTFdOm51bGw7aWYodC5sZW5ndGgpeyFmdW5jdGlvbihlKXt2YXIgdCxyPTAsbj0wLGE9ZS5jaGlsZHJlbixpPWEubGVuZ3RoO2Zvcig7LS1pPj0wOykodD1hW2ldKS56Kz1yLHQubSs9cixyKz10LnMrKG4rPXQuYyl9KGUpO3ZhciBpPSh0WzBdLnordFt0Lmxlbmd0aC0xXS56KS8yO2E/KGUuej1hLnorcihlLl8sYS5fKSxlLm09ZS56LWkpOmUuej1pfWVsc2UgYSYmKGUuej1hLnorcihlLl8sYS5fKSk7ZS5wYXJlbnQuQT1mdW5jdGlvbihlLHQsbil7aWYodCl7Zm9yKHZhciBhLGk9ZSxvPWUsbD10LHM9aS5wYXJlbnQuY2hpbGRyZW5bMF0sYz1pLm0sdT1vLm0sZD1sLm0sZj1zLm07bD1EbihsKSxpPVNuKGkpLGwmJmk7KXM9U24ocyksKG89RG4obykpLmE9ZSwoYT1sLnorZC1pLnotYytyKGwuXyxpLl8pKT4wJiYoQ24oT24obCxlLG4pLGUsYSksYys9YSx1Kz1hKSxkKz1sLm0sYys9aS5tLGYrPXMubSx1Kz1vLm07bCYmIURuKG8pJiYoby50PWwsby5tKz1kLXUpLGkmJiFTbihzKSYmKHMudD1pLHMubSs9Yy1mLG49ZSl9cmV0dXJuIG59KGUsYSxlLnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBsKGUpe2UuXy54PWUueitlLnBhcmVudC5tLGUubSs9ZS5wYXJlbnQubX1mdW5jdGlvbiBzKGUpe2UueCo9blswXSxlLnk9ZS5kZXB0aCpuWzFdfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxpKTpyfSxpLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09KG49ZSk/czpudWxsLGkpOmE/bnVsbDpufSxpLm5vZGVTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PShuPWUpP251bGw6cyxpKTphP246bnVsbH0sUXIoaSx0KX0sZS5sYXlvdXQuY2x1c3Rlcj1mdW5jdGlvbigpe3ZhciB0PWUubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1MbixuPVsxLDFdLGE9ITE7ZnVuY3Rpb24gaShpLG8pe3ZhciBsLHM9dC5jYWxsKHRoaXMsaSxvKSxjPXNbMF0sdT0wOyRyKGMsKGZ1bmN0aW9uKHQpe3ZhciBuPXQuY2hpbGRyZW47biYmbi5sZW5ndGg/KHQueD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC54fSksMCkvZS5sZW5ndGh9KG4pLHQueT1mdW5jdGlvbih0KXtyZXR1cm4gMStlLm1heCh0LChmdW5jdGlvbihlKXtyZXR1cm4gZS55fSkpfShuKSk6KHQueD1sP3UrPXIodCxsKTowLHQueT0wLGw9dCl9KSk7dmFyIGQ9ZnVuY3Rpb24gZSh0KXt2YXIgcj10LmNoaWxkcmVuO3JldHVybiByJiZyLmxlbmd0aD9lKHJbMF0pOnR9KGMpLGY9ZnVuY3Rpb24gZSh0KXt2YXIgcixuPXQuY2hpbGRyZW47cmV0dXJuIG4mJihyPW4ubGVuZ3RoKT9lKG5bci0xXSk6dH0oYykscD1kLngtcihkLGYpLzIsaD1mLngrcihmLGQpLzI7cmV0dXJuICRyKGMsYT9mdW5jdGlvbihlKXtlLng9KGUueC1jLngpKm5bMF0sZS55PShjLnktZS55KSpuWzFdfTpmdW5jdGlvbihlKXtlLng9KGUueC1wKS8oaC1wKSpuWzBdLGUueT0oMS0oYy55P2UueS9jLnk6MSkpKm5bMV19KSxzfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxpKTpyfSxpLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09KG49ZSksaSk6YT9udWxsOm59LGkubm9kZVNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbCE9KG49ZSksaSk6YT9uOm51bGx9LFFyKGksdCl9LGUubGF5b3V0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgdCxyPWUubGF5b3V0LmhpZXJhcmNoeSgpLG49TWF0aC5yb3VuZCxhPVsxLDFdLGk9bnVsbCxvPVBuLGw9ITEscz0ic3F1YXJpZnkiLGM9LjUqKDErTWF0aC5zcXJ0KDUpKTtmdW5jdGlvbiB1KGUsdCl7Zm9yKHZhciByLG4sYT0tMSxpPWUubGVuZ3RoOysrYTxpOyluPShyPWVbYV0pLnZhbHVlKih0PDA/MDp0KSxyLmFyZWE9aXNOYU4obil8fG48PTA/MDpufWZ1bmN0aW9uIGQoZSl7dmFyIHQ9ZS5jaGlsZHJlbjtpZih0JiZ0Lmxlbmd0aCl7dmFyIHIsbixhLGk9byhlKSxsPVtdLGM9dC5zbGljZSgpLGY9MS8wLGc9InNsaWNlIj09PXM/aS5keDoiZGljZSI9PT1zP2kuZHk6InNsaWNlLWRpY2UiPT09cz8xJmUuZGVwdGg/aS5keTppLmR4Ok1hdGgubWluKGkuZHgsaS5keSk7Zm9yKHUoYyxpLmR4KmkuZHkvZS52YWx1ZSksbC5hcmVhPTA7KGE9Yy5sZW5ndGgpPjA7KWwucHVzaChyPWNbYS0xXSksbC5hcmVhKz1yLmFyZWEsInNxdWFyaWZ5IiE9PXN8fChuPXAobCxnKSk8PWY/KGMucG9wKCksZj1uKToobC5hcmVhLT1sLnBvcCgpLmFyZWEsaChsLGcsaSwhMSksZz1NYXRoLm1pbihpLmR4LGkuZHkpLGwubGVuZ3RoPWwuYXJlYT0wLGY9MS8wKTtsLmxlbmd0aCYmKGgobCxnLGksITApLGwubGVuZ3RoPWwuYXJlYT0wKSx0LmZvckVhY2goZCl9fWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZS5jaGlsZHJlbjtpZih0JiZ0Lmxlbmd0aCl7dmFyIHIsbj1vKGUpLGE9dC5zbGljZSgpLGk9W107Zm9yKHUoYSxuLmR4Km4uZHkvZS52YWx1ZSksaS5hcmVhPTA7cj1hLnBvcCgpOylpLnB1c2gociksaS5hcmVhKz1yLmFyZWEsbnVsbCE9ci56JiYoaChpLHIuej9uLmR4Om4uZHksbiwhYS5sZW5ndGgpLGkubGVuZ3RoPWkuYXJlYT0wKTt0LmZvckVhY2goZil9fWZ1bmN0aW9uIHAoZSx0KXtmb3IodmFyIHIsbj1lLmFyZWEsYT0wLGk9MS8wLG89LTEsbD1lLmxlbmd0aDsrK288bDspKHI9ZVtvXS5hcmVhKSYmKHI8aSYmKGk9cikscj5hJiYoYT1yKSk7cmV0dXJuIHQqPXQsKG4qPW4pP01hdGgubWF4KHQqYSpjL24sbi8odCppKmMpKToxLzB9ZnVuY3Rpb24gaChlLHQscixhKXt2YXIgaSxvPS0xLGw9ZS5sZW5ndGgscz1yLngsYz1yLnksdT10P24oZS5hcmVhL3QpOjA7aWYodD09ci5keCl7Zm9yKChhfHx1PnIuZHkpJiYodT1yLmR5KTsrK288bDspKGk9ZVtvXSkueD1zLGkueT1jLGkuZHk9dSxzKz1pLmR4PU1hdGgubWluKHIueCtyLmR4LXMsdT9uKGkuYXJlYS91KTowKTtpLno9ITAsaS5keCs9ci54K3IuZHgtcyxyLnkrPXUsci5keS09dX1lbHNle2ZvcigoYXx8dT5yLmR4KSYmKHU9ci5keCk7KytvPGw7KShpPWVbb10pLng9cyxpLnk9YyxpLmR4PXUsYys9aS5keT1NYXRoLm1pbihyLnkrci5keS1jLHU/bihpLmFyZWEvdSk6MCk7aS56PSExLGkuZHkrPXIueStyLmR5LWMsci54Kz11LHIuZHgtPXV9fWZ1bmN0aW9uIGcoZSl7dmFyIG49dHx8cihlKSxpPW5bMF07cmV0dXJuIGkueD1pLnk9MCxpLnZhbHVlPyhpLmR4PWFbMF0saS5keT1hWzFdKTppLmR4PWkuZHk9MCx0JiZyLnJldmFsdWUoaSksdShbaV0saS5keCppLmR5L2kudmFsdWUpLCh0P2Y6ZCkoaSksbCYmKHQ9biksbn1yZXR1cm4gZy5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUsZyk6YX0sZy5wYWRkaW5nPWZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpO2Z1bmN0aW9uIHQodCl7dmFyIHI9ZS5jYWxsKGcsdCx0LmRlcHRoKTtyZXR1cm4gbnVsbD09cj9Qbih0KTpJbih0LCJudW1iZXIiPT10eXBlb2Ygcj9bcixyLHIscl06cil9ZnVuY3Rpb24gcih0KXtyZXR1cm4gSW4odCxlKX12YXIgbjtyZXR1cm4gbz1udWxsPT0oaT1lKT9QbjoiZnVuY3Rpb24iPT0obj10eXBlb2YgZSk/dDoibnVtYmVyIj09PW4/KGU9W2UsZSxlLGVdLHIpOnIsZ30sZy5yb3VuZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lP01hdGgucm91bmQ6TnVtYmVyLGcpOm4hPU51bWJlcn0sZy5zdGlja3k9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSx0PW51bGwsZyk6bH0sZy5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLGcpOmN9LGcubW9kZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1lKyIiLGcpOnN9LFFyKGcscil9LGUucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiByPDImJih0PTEpLHI8MSYmKGU9MCksZnVuY3Rpb24oKXt2YXIgcixuLGE7ZG97YT0ocj0yKk1hdGgucmFuZG9tKCktMSkqcisobj0yKk1hdGgucmFuZG9tKCktMSkqbn13aGlsZSghYXx8YT4xKTtyZXR1cm4gZSt0KnIqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIHQ9ZS5yYW5kb20ubm9ybWFsLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19LGJhdGVzOmZ1bmN0aW9uKHQpe3ZhciByPWUucmFuZG9tLmlyd2luSGFsbCh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL3R9fSxpcndpbkhhbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAscj0wO3I8ZTtyKyspdCs9TWF0aC5yYW5kb20oKTtyZXR1cm4gdH19fSxlLnNjYWxlPXt9O3ZhciBqbj17Zmxvb3I6QyxjZWlsOkN9O2Z1bmN0aW9uIEhuKHQscixuLGEpe3ZhciBpPVtdLG89W10sbD0wLHM9TWF0aC5taW4odC5sZW5ndGgsci5sZW5ndGgpLTE7Zm9yKHRbc108dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxyPXIuc2xpY2UoKS5yZXZlcnNlKCkpOysrbDw9czspaS5wdXNoKG4odFtsLTFdLHRbbF0pKSxvLnB1c2goYShyW2wtMV0scltsXSkpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1lLmJpc2VjdCh0LHIsMSxzKS0xO3JldHVybiBvW25dKGlbbl0ocikpfX1mdW5jdGlvbiBCbih0LHIpe3JldHVybiBlLnJlYmluZCh0LHIsInJhbmdlIiwicmFuZ2VSb3VuZCIsImludGVycG9sYXRlIiwiY2xhbXAiKX1mdW5jdGlvbiBZbihlLHQpe3JldHVybiBGbihlLEVuKFZuKGUsdClbMl0pKSxGbihlLEVuKFZuKGUsdClbMl0pKSxlfWZ1bmN0aW9uIFZuKGUsdCl7bnVsbD09dCYmKHQ9MTApO3ZhciByPVJuKGUpLG49clsxXS1yWzBdLGE9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuL3QpL01hdGguTE4xMCkpLGk9dC9uKmE7cmV0dXJuIGk8PS4xNT9hKj0xMDppPD0uMzU/YSo9NTppPD0uNzUmJihhKj0yKSxyWzBdPU1hdGguY2VpbChyWzBdL2EpKmEsclsxXT1NYXRoLmZsb29yKHJbMV0vYSkqYSsuNSphLHJbMl09YSxyfWZ1bmN0aW9uIFVuKHQscil7cmV0dXJuIGUucmFuZ2UuYXBwbHkoZSxWbih0LHIpKX1lLnNjYWxlLmxpbmVhcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQscixuLGEpe3ZhciBpLG87ZnVuY3Rpb24gbCgpe3ZhciBlPU1hdGgubWluKHQubGVuZ3RoLHIubGVuZ3RoKT4yP0huOk5uLGw9YT9CcjpIcjtyZXR1cm4gaT1lKHQscixsLG4pLG89ZShyLHQsbCx5ciksc31mdW5jdGlvbiBzKGUpe3JldHVybiBpKGUpfXJldHVybiBzLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKX0scy5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZS5tYXAoTnVtYmVyKSxsKCkpOnR9LHMucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxsKCkpOnJ9LHMucmFuZ2VSb3VuZD1mdW5jdGlvbihlKXtyZXR1cm4gcy5yYW5nZShlKS5pbnRlcnBvbGF0ZShJcil9LHMuY2xhbXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZSxsKCkpOmF9LHMuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSxsKCkpOm59LHMudGlja3M9ZnVuY3Rpb24oZSl7cmV0dXJuIFVuKHQsZSl9LHMudGlja0Zvcm1hdD1mdW5jdGlvbihlLHIpe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KHQsZSxyKX0scy5uaWNlPWZ1bmN0aW9uKGUpe3JldHVybiBZbih0LGUpLGwoKX0scy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUodCxyLG4sYSl9LGwoKX0oWzAsMV0sWzAsMV0seXIsITEpfTtlLnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQscixuLGEpe2Z1bmN0aW9uIGkoZSl7cmV0dXJuKG4/TWF0aC5sb2coZTwwPzA6ZSk6LU1hdGgubG9nKGU+MD8wOi1lKSkvTWF0aC5sb2cocil9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbj9NYXRoLnBvdyhyLGUpOi1NYXRoLnBvdyhyLC1lKX1mdW5jdGlvbiBsKGUpe3JldHVybiB0KGkoZSkpfXJldHVybiBsLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4gbyh0LmludmVydChlKSl9LGwuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWVbMF0+PTAsdC5kb21haW4oKGE9ZS5tYXAoTnVtYmVyKSkubWFwKGkpKSxsKTphfSxsLmJhc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2UsdC5kb21haW4oYS5tYXAoaSkpLGwpOnJ9LGwubmljZT1mdW5jdGlvbigpe3ZhciBlPUZuKGEubWFwKGkpLG4/TWF0aDpxbik7cmV0dXJuIHQuZG9tYWluKGUpLGE9ZS5tYXAobyksbH0sbC50aWNrcz1mdW5jdGlvbigpe3ZhciBlPVJuKGEpLHQ9W10sbD1lWzBdLHM9ZVsxXSxjPU1hdGguZmxvb3IoaShsKSksdT1NYXRoLmNlaWwoaShzKSksZD1yJTE/MjpyO2lmKGlzRmluaXRlKHUtYykpe2lmKG4pe2Zvcig7Yzx1O2MrKylmb3IodmFyIGY9MTtmPGQ7ZisrKXQucHVzaChvKGMpKmYpO3QucHVzaChvKGMpKX1lbHNlIGZvcih0LnB1c2gobyhjKSk7YysrPHU7KWZvcihmPWQtMTtmPjA7Zi0tKXQucHVzaChvKGMpKmYpO2ZvcihjPTA7dFtjXTxsO2MrKyk7Zm9yKHU9dC5sZW5ndGg7dFt1LTFdPnM7dS0tKTt0PXQuc2xpY2UoYyx1KX1yZXR1cm4gdH0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUodC5jb3B5KCkscixuLGEpfSxCbihsLHQpfShlLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCwxXSksMTAsITAsWzEsMTBdKX07dmFyIHFuPXtmbG9vcjpmdW5jdGlvbihlKXtyZXR1cm4tTWF0aC5jZWlsKC1lKX0sY2VpbDpmdW5jdGlvbihlKXtyZXR1cm4tTWF0aC5mbG9vcigtZSl9fTtmdW5jdGlvbiBHbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD8tTWF0aC5wb3coLXQsZSk6TWF0aC5wb3codCxlKX19ZS5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE9R24ociksaT1HbigxL3IpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIHQoYShlKSl9cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBpKHQuaW52ZXJ0KGUpKX0sby5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQuZG9tYWluKChuPWUubWFwKE51bWJlcikpLm1hcChhKSksbyk6bn0sby50aWNrcz1mdW5jdGlvbihlKXtyZXR1cm4gVW4obixlKX0sby50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGQzX3NjYWxlX2xpbmVhclRpY2tGb3JtYXQobixlLHQpfSxvLm5pY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uZG9tYWluKFluKG4sZSkpfSxvLmV4cG9uZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUduKHI9ZSksaT1HbigxL3IpLHQuZG9tYWluKG4ubWFwKGEpKSxvKTpyfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmNvcHkoKSxyLG4pfSxCbihvLHQpfShlLnNjYWxlLmxpbmVhcigpLDEsWzAsMV0pfSxlLnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5zY2FsZS5wb3coKS5leHBvbmVudCguNSl9LGUuc2NhbGUub3JkaW5hbD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KHIsbil7dmFyIGEsaSxvO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGlbKChhLmdldChlKXx8KCJyYW5nZSI9PT1uLnQ/YS5zZXQoZSxyLnB1c2goZSkpOk5hTikpLTEpJWkubGVuZ3RoXX1mdW5jdGlvbiBzKHQsbil7cmV0dXJuIGUucmFuZ2Uoci5sZW5ndGgpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQrbiplfSkpfXJldHVybiBsLmRvbWFpbj1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjtyPVtdLGE9bmV3IF87Zm9yKHZhciB0LGk9LTEsbz1lLmxlbmd0aDsrK2k8bzspYS5oYXModD1lW2ldKXx8YS5zZXQodCxyLnB1c2godCkpO3JldHVybiBsW24udF0uYXBwbHkobCxuLmEpfSxsLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsbz0wLG49e3Q6InJhbmdlIixhOmFyZ3VtZW50c30sbCk6aX0sbC5yYW5nZVBvaW50cz1mdW5jdGlvbihlLHQpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9MCk7dmFyIGE9ZVswXSxjPWVbMV0sdT1yLmxlbmd0aDwyPyhhPShhK2MpLzIsMCk6KGMtYSkvKHIubGVuZ3RoLTErdCk7cmV0dXJuIGk9cyhhK3UqdC8yLHUpLG89MCxuPXt0OiJyYW5nZVBvaW50cyIsYTphcmd1bWVudHN9LGx9LGwucmFuZ2VSb3VuZFBvaW50cz1mdW5jdGlvbihlLHQpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9MCk7dmFyIGE9ZVswXSxjPWVbMV0sdT1yLmxlbmd0aDwyPyhhPWM9TWF0aC5yb3VuZCgoYStjKS8yKSwwKTooYy1hKS8oci5sZW5ndGgtMSt0KXwwO3JldHVybiBpPXMoYStNYXRoLnJvdW5kKHUqdC8yKyhjLWEtKHIubGVuZ3RoLTErdCkqdSkvMiksdSksbz0wLG49e3Q6InJhbmdlUm91bmRQb2ludHMiLGE6YXJndW1lbnRzfSxsfSxsLnJhbmdlQmFuZHM9ZnVuY3Rpb24oZSx0LGEpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoYT10KTt2YXIgYz1lWzFdPGVbMF0sdT1lW2MtMF0sZD1lWzEtY10sZj0oZC11KS8oci5sZW5ndGgtdCsyKmEpO3JldHVybiBpPXModStmKmEsZiksYyYmaS5yZXZlcnNlKCksbz1mKigxLXQpLG49e3Q6InJhbmdlQmFuZHMiLGE6YXJndW1lbnRzfSxsfSxsLnJhbmdlUm91bmRCYW5kcz1mdW5jdGlvbihlLHQsYSl7YXJndW1lbnRzLmxlbmd0aDwyJiYodD0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihhPXQpO3ZhciBjPWVbMV08ZVswXSx1PWVbYy0wXSxkPWVbMS1jXSxmPU1hdGguZmxvb3IoKGQtdSkvKHIubGVuZ3RoLXQrMiphKSk7cmV0dXJuIGk9cyh1K01hdGgucm91bmQoKGQtdS0oci5sZW5ndGgtdCkqZikvMiksZiksYyYmaS5yZXZlcnNlKCksbz1NYXRoLnJvdW5kKGYqKDEtdCkpLG49e3Q6InJhbmdlUm91bmRCYW5kcyIsYTphcmd1bWVudHN9LGx9LGwucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGwucmFuZ2VFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gUm4obi5hWzBdKX0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQocixuKX0sbC5kb21haW4ocil9KFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LGUuc2NhbGUuY2F0ZWdvcnkxMD1mdW5jdGlvbigpe3JldHVybiBlLnNjYWxlLm9yZGluYWwoKS5yYW5nZShabil9LGUuc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigpe3JldHVybiBlLnNjYWxlLm9yZGluYWwoKS5yYW5nZShXbil9LGUuc2NhbGUuY2F0ZWdvcnkyMGI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoWG4pfSxlLnNjYWxlLmNhdGVnb3J5MjBjPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2NhbGUub3JkaW5hbCgpLnJhbmdlKEpuKX07dmFyIFpuPVsyMDYyMjYwLDE2NzQ0MjA2LDI5MjQ1ODgsMTQwMzQ3MjgsOTcyNTg4NSw5MTk3MTMxLDE0OTA3MzMwLDgzNTU3MTEsMTIzNjkxODYsMTU1NjE3NV0ubWFwKGV0KSxXbj1bMjA2MjI2MCwxMTQ1NDQ0MCwxNjc0NDIwNiwxNjc1OTY3MiwyOTI0NTg4LDEwMDE4Njk4LDE0MDM0NzI4LDE2NzUwNzQyLDk3MjU4ODUsMTI5NTU4NjEsOTE5NzEzMSwxMjg4NTE0MCwxNDkwNzMzMCwxNjIzNDE5NCw4MzU1NzExLDEzMDkyODA3LDEyMzY5MTg2LDE0NDA4NTg5LDE1NTYxNzUsMTA0MTA3MjVdLm1hcChldCksWG49WzM3NTA3NzcsNTM5NTYxOSw3MDQwNzE5LDEwMjY0Mjg2LDY1MTkwOTcsOTIxNjU5NCwxMTkxNTExNSwxMzU1NjYzNiw5MjAyOTkzLDEyNDI2ODA5LDE1MTg2NTE0LDE1MTkwOTMyLDg2NjYxNjksMTEzNTY0OTAsMTQwNDk2NDMsMTUxNzczNzIsODA3NzY4MywxMDgzNDMyNCwxMzUyODUwOSwxNDU4OTY1NF0ubWFwKGV0KSxKbj1bMzI0NDczMyw3MDU3MTEwLDEwNDA2NjI1LDEzMDMyNDMxLDE1MDk1MDUzLDE2NjE2NzY0LDE2NjI1MjU5LDE2NjM0MDE4LDMyNTMwNzYsNzY1MjQ3MCwxMDYwNzAwMywxMzEwMTUwNCw3Njk1MjgxLDEwMzk0MzEyLDEyMzY5MzcyLDE0MzQyODkxLDY1MTM1MDcsOTg2ODk1MCwxMjQzNDg3NywxNDI3NzA4MV0ubWFwKGV0KTtmdW5jdGlvbiBRbigpe3JldHVybiAwfWUuc2NhbGUucXVhbnRpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChyLG4pe3ZhciBhO2Z1bmN0aW9uIGkoKXt2YXIgdD0wLGk9bi5sZW5ndGg7Zm9yKGE9W107Kyt0PGk7KWFbdC0xXT1lLnF1YW50aWxlKHIsdC9pKTtyZXR1cm4gb31mdW5jdGlvbiBvKHQpe2lmKCFpc05hTih0PSt0KSlyZXR1cm4gbltlLmJpc2VjdChhLHQpXX1yZXR1cm4gby5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZS5tYXAocCkuZmlsdGVyKGgpLnNvcnQoZiksaSgpKTpyfSxvLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsaSgpKTpufSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBhfSxvLmludmVydEV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4oZT1uLmluZGV4T2YoZSkpPDA/W05hTixOYU5dOltlPjA/YVtlLTFdOnJbMF0sZTxhLmxlbmd0aD9hW2VdOnJbci5sZW5ndGgtMV1dfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChyLG4pfSxpKCl9KFtdLFtdKX0sZS5zY2FsZS5xdWFudGl6ZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQscixuKXt2YXIgYSxpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIG5bTWF0aC5tYXgoMCxNYXRoLm1pbihpLE1hdGguZmxvb3IoYSooZS10KSkpKV19ZnVuY3Rpb24gbCgpe3JldHVybiBhPW4ubGVuZ3RoLyhyLXQpLGk9bi5sZW5ndGgtMSxvfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZVswXSxyPStlW2UubGVuZ3RoLTFdLGwoKSk6W3Qscl19LG8ucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSxsKCkpOm59LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybltlPShlPW4uaW5kZXhPZihlKSk8MD9OYU46ZS9hK3QsZSsxL2FdfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZSh0LHIsbil9LGwoKX0oMCwxLFswLDFdKX0sZS5zY2FsZS50aHJlc2hvbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChyLG4pe2Z1bmN0aW9uIGEodCl7aWYodDw9dClyZXR1cm4gbltlLmJpc2VjdChyLHQpXX1yZXR1cm4gYS5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxhKTpyfSxhLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsYSk6bn0sYS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9bi5pbmRleE9mKGUpLFtyW2UtMV0scltlXV19LGEuY29weT1mdW5jdGlvbigpe3JldHVybiB0KHIsbil9LGF9KFsuNV0sWzAsMV0pfSxlLnNjYWxlLmlkZW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihlKXtyZXR1cm4rZX1yZXR1cm4gci5pbnZlcnQ9cixyLmRvbWFpbj1yLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUubWFwKHIpLHIpOnR9LHIudGlja3M9ZnVuY3Rpb24oZSl7cmV0dXJuIFVuKHQsZSl9LHIudGlja0Zvcm1hdD1mdW5jdGlvbihlLHIpe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KHQsZSxyKX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUodCl9LHJ9KFswLDFdKX0sZS5zdmc9e30sZS5zdmcuYXJjPWZ1bmN0aW9uKCl7dmFyIGU9JG4sdD1lYSxyPVFuLG49S24sYT10YSxpPXJhLG89bmE7ZnVuY3Rpb24gbCgpe3ZhciBsPU1hdGgubWF4KDAsK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxjPU1hdGgubWF4KDAsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx1PWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLVNlLGQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktU2UsZj1NYXRoLmFicyhkLXUpLHA9dT5kPzA6MTtpZihjPGwmJihoPWMsYz1sLGw9aCksZj49TGUpcmV0dXJuIHMoYyxwKSsobD9zKGwsMS1wKToiIikrIloiO3ZhciBoLGcsbSx2LHkseCxiLF8sdyxULE0sayxBPTAsTD0wLFM9W107aWYoKHY9KCtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MCkvMikmJihtPW49PT1Lbj9NYXRoLnNxcnQobCpsK2MqYyk6K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLHB8fChMKj0tMSksYyYmKEw9T2UobS9jKk1hdGguc2luKHYpKSksbCYmKEE9T2UobS9sKk1hdGguc2luKHYpKSkpLGMpe3k9YypNYXRoLmNvcyh1K0wpLHg9YypNYXRoLnNpbih1K0wpLGI9YypNYXRoLmNvcyhkLUwpLF89YypNYXRoLnNpbihkLUwpO3ZhciBEPU1hdGguYWJzKGQtdS0yKkwpPD1rZT8wOjE7aWYoTCYmYWEoeSx4LGIsXyk9PT1wXkQpe3ZhciBDPSh1K2QpLzI7eT1jKk1hdGguY29zKEMpLHg9YypNYXRoLnNpbihDKSxiPV89bnVsbH19ZWxzZSB5PXg9MDtpZihsKXt3PWwqTWF0aC5jb3MoZC1BKSxUPWwqTWF0aC5zaW4oZC1BKSxNPWwqTWF0aC5jb3ModStBKSxrPWwqTWF0aC5zaW4odStBKTt2YXIgTz1NYXRoLmFicyh1LWQrMipBKTw9a2U/MDoxO2lmKEEmJmFhKHcsVCxNLGspPT09MS1wXk8pe3ZhciBQPSh1K2QpLzI7dz1sKk1hdGguY29zKFApLFQ9bCpNYXRoLnNpbihQKSxNPWs9bnVsbH19ZWxzZSB3PVQ9MDtpZihmPk1lJiYoaD1NYXRoLm1pbihNYXRoLmFicyhjLWwpLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSk+LjAwMSl7Zz1sPGNecD8wOjE7dmFyIEk9aCxSPWg7aWYoZjxrZSl7dmFyIHo9bnVsbD09TT9bdyxUXTpudWxsPT1iP1t5LHhdOkx0KFt5LHhdLFtNLGtdLFtiLF9dLFt3LFRdKSxOPXktelswXSxGPXgtelsxXSxFPWItelswXSxqPV8telsxXSxIPTEvTWF0aC5zaW4oTWF0aC5hY29zKChOKkUrRipqKS8oTWF0aC5zcXJ0KE4qTitGKkYpKk1hdGguc3FydChFKkUraipqKSkpLzIpLEI9TWF0aC5zcXJ0KHpbMF0qelswXSt6WzFdKnpbMV0pO1I9TWF0aC5taW4oaCwobC1CKS8oSC0xKSksST1NYXRoLm1pbihoLChjLUIpLyhIKzEpKX1pZihudWxsIT1iKXt2YXIgWT1pYShudWxsPT1NP1t3LFRdOltNLGtdLFt5LHhdLGMsSSxwKSxWPWlhKFtiLF9dLFt3LFRdLGMsSSxwKTtoPT09ST9TLnB1c2goIk0iLFlbMF0sIkEiLEksIiwiLEksIiAwIDAsIixnLCIgIixZWzFdLCJBIixjLCIsIixjLCIgMCAiLDEtcF5hYShZWzFdWzBdLFlbMV1bMV0sVlsxXVswXSxWWzFdWzFdKSwiLCIscCwiICIsVlsxXSwiQSIsSSwiLCIsSSwiIDAgMCwiLGcsIiAiLFZbMF0pOlMucHVzaCgiTSIsWVswXSwiQSIsSSwiLCIsSSwiIDAgMSwiLGcsIiAiLFZbMF0pfWVsc2UgUy5wdXNoKCJNIix5LCIsIix4KTtpZihudWxsIT1NKXt2YXIgVT1pYShbeSx4XSxbTSxrXSxsLC1SLHApLHE9aWEoW3csVF0sbnVsbD09Yj9beSx4XTpbYixfXSxsLC1SLHApO2g9PT1SP1MucHVzaCgiTCIscVswXSwiQSIsUiwiLCIsUiwiIDAgMCwiLGcsIiAiLHFbMV0sIkEiLGwsIiwiLGwsIiAwICIscF5hYShxWzFdWzBdLHFbMV1bMV0sVVsxXVswXSxVWzFdWzFdKSwiLCIsMS1wLCIgIixVWzFdLCJBIixSLCIsIixSLCIgMCAwLCIsZywiICIsVVswXSk6Uy5wdXNoKCJMIixxWzBdLCJBIixSLCIsIixSLCIgMCAwLCIsZywiICIsVVswXSl9ZWxzZSBTLnB1c2goIkwiLHcsIiwiLFQpfWVsc2UgUy5wdXNoKCJNIix5LCIsIix4KSxudWxsIT1iJiZTLnB1c2goIkEiLGMsIiwiLGMsIiAwICIsRCwiLCIscCwiICIsYiwiLCIsXyksUy5wdXNoKCJMIix3LCIsIixUKSxudWxsIT1NJiZTLnB1c2goIkEiLGwsIiwiLGwsIiAwICIsTywiLCIsMS1wLCIgIixNLCIsIixrKTtyZXR1cm4gUy5wdXNoKCJaIiksUy5qb2luKCIiKX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIk0wLCIrZSsiQSIrZSsiLCIrZSsiIDAgMSwiK3QrIiAwLCIrLWUrIkEiK2UrIiwiK2UrIiAwIDEsIit0KyIgMCwiK2V9cmV0dXJuIGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Y3QodCksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1jdChlKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1jdChlKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lPT1Lbj9LbjpjdChlKSxsKTpufSxsLnN0YXJ0QW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Y3QoZSksbCk6YX0sbC5lbmRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1jdChlKSxsKTppfSxsLnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWN0KGUpLGwpOm99LGwuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgcj0oK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsbj0oK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKyAraS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItU2U7cmV0dXJuW01hdGguY29zKG4pKnIsTWF0aC5zaW4obikqcl19LGx9O3ZhciBLbj0iYXV0byI7ZnVuY3Rpb24gJG4oZSl7cmV0dXJuIGUuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gZWEoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gdGEoZSl7cmV0dXJuIGUuc3RhcnRBbmdsZX1mdW5jdGlvbiByYShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBuYShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBhYShlLHQscixuKXtyZXR1cm4oZS1yKSp0LSh0LW4pKmU+MD8wOjF9ZnVuY3Rpb24gaWEoZSx0LHIsbixhKXt2YXIgaT1lWzBdLXRbMF0sbz1lWzFdLXRbMV0sbD0oYT9uOi1uKS9NYXRoLnNxcnQoaSppK28qbykscz1sKm8sYz0tbCppLHU9ZVswXStzLGQ9ZVsxXStjLGY9dFswXStzLHA9dFsxXStjLGg9KHUrZikvMixnPShkK3ApLzIsbT1mLXUsdj1wLWQseT1tKm0rdip2LHg9ci1uLGI9dSpwLWYqZCxfPSh2PDA/LTE6MSkqTWF0aC5zcXJ0KE1hdGgubWF4KDAseCp4KnktYipiKSksdz0oYip2LW0qXykveSxUPSgtYiptLXYqXykveSxNPShiKnYrbSpfKS95LGs9KC1iKm0rdipfKS95LEE9dy1oLEw9VC1nLFM9TS1oLEQ9ay1nO3JldHVybiBBKkErTCpMPlMqUytEKkQmJih3PU0sVD1rKSxbW3ctcyxULWNdLFt3KnIveCxUKnIveF1dfWZ1bmN0aW9uIG9hKCl7cmV0dXJuITB9ZnVuY3Rpb24gbGEoZSl7dmFyIHQ9X3Qscj13dCxuPW9hLGE9Y2EsaT1hLmtleSxvPS43O2Z1bmN0aW9uIGwoaSl7dmFyIGwscz1bXSxjPVtdLHU9LTEsZD1pLmxlbmd0aCxmPWN0KHQpLHA9Y3Qocik7ZnVuY3Rpb24gaCgpe3MucHVzaCgiTSIsYShlKGMpLG8pKX1mb3IoOysrdTxkOyluLmNhbGwodGhpcyxsPWlbdV0sdSk/Yy5wdXNoKFsrZi5jYWxsKHRoaXMsbCx1KSwrcC5jYWxsKHRoaXMsbCx1KV0pOmMubGVuZ3RoJiYoaCgpLGM9W10pO3JldHVybiBjLmxlbmd0aCYmaCgpLHMubGVuZ3RoP3Muam9pbigiIik6bnVsbH1yZXR1cm4gbC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbCk6dH0sbC55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsbCk6cn0sbC5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsbCk6bn0sbC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgZT9hPWU6KGE9c2EuZ2V0KGUpfHxjYSkua2V5LGwpOml9LGwudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLGwpOm99LGx9ZS5zdmcubGluZT1mdW5jdGlvbigpe3JldHVybiBsYShDKX07dmFyIHNhPWUubWFwKHtsaW5lYXI6Y2EsImxpbmVhci1jbG9zZWQiOnVhLHN0ZXA6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxyPWUubGVuZ3RoLG49ZVswXSxhPVtuWzBdLCIsIixuWzFdXTtmb3IoOysrdDxyOylhLnB1c2goIkgiLChuWzBdKyhuPWVbdF0pWzBdKS8yLCJWIixuWzFdKTtyPjEmJmEucHVzaCgiSCIsblswXSk7cmV0dXJuIGEuam9pbigiIil9LCJzdGVwLWJlZm9yZSI6ZGEsInN0ZXAtYWZ0ZXIiOmZhLGJhc2lzOmdhLCJiYXNpcy1vcGVuIjpmdW5jdGlvbihlKXtpZihlLmxlbmd0aDw0KXJldHVybiBjYShlKTt2YXIgdCxyPVtdLG49LTEsYT1lLmxlbmd0aCxpPVswXSxvPVswXTtmb3IoOysrbjwzOyl0PWVbbl0saS5wdXNoKHRbMF0pLG8ucHVzaCh0WzFdKTtyLnB1c2gobWEoeGEsaSkrIiwiK21hKHhhLG8pKSwtLW47Zm9yKDsrK248YTspdD1lW25dLGkuc2hpZnQoKSxpLnB1c2godFswXSksby5zaGlmdCgpLG8ucHVzaCh0WzFdKSxiYShyLGksbyk7cmV0dXJuIHIuam9pbigiIil9LCJiYXNpcy1jbG9zZWQiOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbj0tMSxhPWUubGVuZ3RoLGk9YSs0LG89W10sbD1bXTtmb3IoOysrbjw0OylyPWVbbiVhXSxvLnB1c2goclswXSksbC5wdXNoKHJbMV0pO3Q9W21hKHhhLG8pLCIsIixtYSh4YSxsKV0sLS1uO2Zvcig7KytuPGk7KXI9ZVtuJWFdLG8uc2hpZnQoKSxvLnB1c2goclswXSksbC5zaGlmdCgpLGwucHVzaChyWzFdKSxiYSh0LG8sbCk7cmV0dXJuIHQuam9pbigiIil9LGJ1bmRsZTpmdW5jdGlvbihlLHQpe3ZhciByPWUubGVuZ3RoLTE7aWYocilmb3IodmFyIG4sYSxpPWVbMF1bMF0sbz1lWzBdWzFdLGw9ZVtyXVswXS1pLHM9ZVtyXVsxXS1vLGM9LTE7KytjPD1yOyluPWVbY10sYT1jL3IsblswXT10Km5bMF0rKDEtdCkqKGkrYSpsKSxuWzFdPXQqblsxXSsoMS10KSoobythKnMpO3JldHVybiBnYShlKX0sY2FyZGluYWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5sZW5ndGg8Mz9jYShlKTplWzBdK3BhKGUsaGEoZSx0KSl9LCJjYXJkaW5hbC1vcGVuIjpmdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aDw0P2NhKGUpOmVbMV0rcGEoZS5zbGljZSgxLC0xKSxoYShlLHQpKX0sImNhcmRpbmFsLWNsb3NlZCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5sZW5ndGg8Mz91YShlKTplWzBdK3BhKChlLnB1c2goZVswXSksZSksaGEoW2VbZS5sZW5ndGgtMl1dLmNvbmNhdChlLFtlWzFdXSksdCkpfSxtb25vdG9uZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg8Mz9jYShlKTplWzBdK3BhKGUsZnVuY3Rpb24oZSl7dmFyIHQscixuLGEsaT1bXSxvPWZ1bmN0aW9uKGUpe3ZhciB0PTAscj1lLmxlbmd0aC0xLG49W10sYT1lWzBdLGk9ZVsxXSxvPW5bMF09X2EoYSxpKTtmb3IoOysrdDxyOyluW3RdPShvKyhvPV9hKGE9aSxpPWVbdCsxXSkpKS8yO3JldHVybiBuW3RdPW8sbn0oZSksbD0tMSxzPWUubGVuZ3RoLTE7Zm9yKDsrK2w8czspdD1fYShlW2xdLGVbbCsxXSkseSh0KTxNZT9vW2xdPW9bbCsxXT0wOihyPW9bbF0vdCxuPW9bbCsxXS90LChhPXIqcituKm4pPjkmJihhPTMqdC9NYXRoLnNxcnQoYSksb1tsXT1hKnIsb1tsKzFdPWEqbikpO2w9LTE7Zm9yKDsrK2w8PXM7KWE9KGVbTWF0aC5taW4ocyxsKzEpXVswXS1lW01hdGgubWF4KDAsbC0xKV1bMF0pLyg2KigxK29bbF0qb1tsXSkpLGkucHVzaChbYXx8MCxvW2xdKmF8fDBdKTtyZXR1cm4gaX0oZSkpfX0pO2Z1bmN0aW9uIGNhKGUpe3JldHVybiBlLmxlbmd0aD4xP2Uuam9pbigiTCIpOmUrIloifWZ1bmN0aW9uIHVhKGUpe3JldHVybiBlLmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24gZGEoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aCxuPWVbMF0sYT1bblswXSwiLCIsblsxXV07Kyt0PHI7KWEucHVzaCgiViIsKG49ZVt0XSlbMV0sIkgiLG5bMF0pO3JldHVybiBhLmpvaW4oIiIpfWZ1bmN0aW9uIGZhKGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGgsbj1lWzBdLGE9W25bMF0sIiwiLG5bMV1dOysrdDxyOylhLnB1c2goIkgiLChuPWVbdF0pWzBdLCJWIixuWzFdKTtyZXR1cm4gYS5qb2luKCIiKX1mdW5jdGlvbiBwYShlLHQpe2lmKHQubGVuZ3RoPDF8fGUubGVuZ3RoIT10Lmxlbmd0aCYmZS5sZW5ndGghPXQubGVuZ3RoKzIpcmV0dXJuIGNhKGUpO3ZhciByPWUubGVuZ3RoIT10Lmxlbmd0aCxuPSIiLGE9ZVswXSxpPWVbMV0sbz10WzBdLGw9byxzPTE7aWYociYmKG4rPSJRIisoaVswXS0yKm9bMF0vMykrIiwiKyhpWzFdLTIqb1sxXS8zKSsiLCIraVswXSsiLCIraVsxXSxhPWVbMV0scz0yKSx0Lmxlbmd0aD4xKXtsPXRbMV0saT1lW3NdLHMrKyxuKz0iQyIrKGFbMF0rb1swXSkrIiwiKyhhWzFdK29bMV0pKyIsIisoaVswXS1sWzBdKSsiLCIrKGlbMV0tbFsxXSkrIiwiK2lbMF0rIiwiK2lbMV07Zm9yKHZhciBjPTI7Yzx0Lmxlbmd0aDtjKysscysrKWk9ZVtzXSxsPXRbY10sbis9IlMiKyhpWzBdLWxbMF0pKyIsIisoaVsxXS1sWzFdKSsiLCIraVswXSsiLCIraVsxXX1pZihyKXt2YXIgdT1lW3NdO24rPSJRIisoaVswXSsyKmxbMF0vMykrIiwiKyhpWzFdKzIqbFsxXS8zKSsiLCIrdVswXSsiLCIrdVsxXX1yZXR1cm4gbn1mdW5jdGlvbiBoYShlLHQpe2Zvcih2YXIgcixuPVtdLGE9KDEtdCkvMixpPWVbMF0sbz1lWzFdLGw9MSxzPWUubGVuZ3RoOysrbDxzOylyPWksaT1vLG89ZVtsXSxuLnB1c2goW2EqKG9bMF0tclswXSksYSoob1sxXS1yWzFdKV0pO3JldHVybiBufWZ1bmN0aW9uIGdhKGUpe2lmKGUubGVuZ3RoPDMpcmV0dXJuIGNhKGUpO3ZhciB0PTEscj1lLmxlbmd0aCxuPWVbMF0sYT1uWzBdLGk9blsxXSxvPVthLGEsYSwobj1lWzFdKVswXV0sbD1baSxpLGksblsxXV0scz1bYSwiLCIsaSwiTCIsbWEoeGEsbyksIiwiLG1hKHhhLGwpXTtmb3IoZS5wdXNoKGVbci0xXSk7Kyt0PD1yOyluPWVbdF0sby5zaGlmdCgpLG8ucHVzaChuWzBdKSxsLnNoaWZ0KCksbC5wdXNoKG5bMV0pLGJhKHMsbyxsKTtyZXR1cm4gZS5wb3AoKSxzLnB1c2goIkwiLG4pLHMuam9pbigiIil9ZnVuY3Rpb24gbWEoZSx0KXtyZXR1cm4gZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl0rZVszXSp0WzNdfXNhLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dC5rZXk9ZSx0LmNsb3NlZD0vLWNsb3NlZCQvLnRlc3QoZSl9KSk7dmFyIHZhPVswLDIvMywxLzMsMF0seWE9WzAsMS8zLDIvMywwXSx4YT1bMCwxLzYsMi8zLDEvNl07ZnVuY3Rpb24gYmEoZSx0LHIpe2UucHVzaCgiQyIsbWEodmEsdCksIiwiLG1hKHZhLHIpLCIsIixtYSh5YSx0KSwiLCIsbWEoeWEsciksIiwiLG1hKHhhLHQpLCIsIixtYSh4YSxyKSl9ZnVuY3Rpb24gX2EoZSx0KXtyZXR1cm4odFsxXS1lWzFdKS8odFswXS1lWzBdKX1mdW5jdGlvbiB3YShlKXtmb3IodmFyIHQscixuLGE9LTEsaT1lLmxlbmd0aDsrK2E8aTspcj0odD1lW2FdKVswXSxuPXRbMV0tU2UsdFswXT1yKk1hdGguY29zKG4pLHRbMV09cipNYXRoLnNpbihuKTtyZXR1cm4gZX1mdW5jdGlvbiBUYShlKXt2YXIgdD1fdCxyPV90LG49MCxhPXd0LGk9b2Esbz1jYSxsPW8ua2V5LHM9byxjPSJMIix1PS43O2Z1bmN0aW9uIGQobCl7dmFyIGQsZixwLGg9W10sZz1bXSxtPVtdLHY9LTEseT1sLmxlbmd0aCx4PWN0KHQpLGI9Y3QobiksXz10PT09cj9mdW5jdGlvbigpe3JldHVybiBmfTpjdChyKSx3PW49PT1hP2Z1bmN0aW9uKCl7cmV0dXJuIHB9OmN0KGEpO2Z1bmN0aW9uIFQoKXtoLnB1c2goIk0iLG8oZShtKSx1KSxjLHMoZShnLnJldmVyc2UoKSksdSksIloiKX1mb3IoOysrdjx5OylpLmNhbGwodGhpcyxkPWxbdl0sdik/KGcucHVzaChbZj0reC5jYWxsKHRoaXMsZCx2KSxwPStiLmNhbGwodGhpcyxkLHYpXSksbS5wdXNoKFsrXy5jYWxsKHRoaXMsZCx2KSwrdy5jYWxsKHRoaXMsZCx2KV0pKTpnLmxlbmd0aCYmKFQoKSxnPVtdLG09W10pO3JldHVybiBnLmxlbmd0aCYmVCgpLGgubGVuZ3RoP2guam9pbigiIik6bnVsbH1yZXR1cm4gZC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXI9ZSxkKTpyfSxkLngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsZCk6dH0sZC54MT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLGQpOnJ9LGQueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1hPWUsZCk6YX0sZC55MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLGQpOm59LGQueTE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZSxkKTphfSxkLmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSxkKTppfSxkLmludGVycG9sYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBlP289ZToobz1zYS5nZXQoZSl8fGNhKS5rZXkscz1vLnJldmVyc2V8fG8sYz1vLmNsb3NlZD8iTSI6IkwiLGQpOmx9LGQudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLGQpOnV9LGR9ZnVuY3Rpb24gTWEoZSl7cmV0dXJuIGUuc291cmNlfWZ1bmN0aW9uIGthKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBBYShlKXtyZXR1cm4gZS5yYWRpdXN9ZnVuY3Rpb24gTGEoZSl7cmV0dXJuW2UueCxlLnldfWZ1bmN0aW9uIFNhKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9dFswXSxuPXRbMV0tU2U7cmV0dXJuW3IqTWF0aC5jb3MobikscipNYXRoLnNpbihuKV19fWZ1bmN0aW9uIERhKCl7cmV0dXJuIDY0fWZ1bmN0aW9uIENhKCl7cmV0dXJuImNpcmNsZSJ9ZnVuY3Rpb24gT2EoZSl7dmFyIHQ9TWF0aC5zcXJ0KGUva2UpO3JldHVybiJNMCwiK3QrIkEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrLXQrIkEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrdCsiWiJ9ZS5zdmcubGluZS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgZT1sYSh3YSk7cmV0dXJuIGUucmFkaXVzPWUueCxkZWxldGUgZS54LGUuYW5nbGU9ZS55LGRlbGV0ZSBlLnksZX0sZGEucmV2ZXJzZT1mYSxmYS5yZXZlcnNlPWRhLGUuc3ZnLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gVGEoQyl9LGUuc3ZnLmFyZWEucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIGU9VGEod2EpO3JldHVybiBlLnJhZGl1cz1lLngsZGVsZXRlIGUueCxlLmlubmVyUmFkaXVzPWUueDAsZGVsZXRlIGUueDAsZS5vdXRlclJhZGl1cz1lLngxLGRlbGV0ZSBlLngxLGUuYW5nbGU9ZS55LGRlbGV0ZSBlLnksZS5zdGFydEFuZ2xlPWUueTAsZGVsZXRlIGUueTAsZS5lbmRBbmdsZT1lLnkxLGRlbGV0ZSBlLnkxLGV9LGUuc3ZnLmNob3JkPWZ1bmN0aW9uKCl7dmFyIGU9TWEsdD1rYSxyPUFhLG49dGEsYT1yYTtmdW5jdGlvbiBpKHIsbil7dmFyIGEsaSxjPW8odGhpcyxlLHIsbiksdT1vKHRoaXMsdCxyLG4pO3JldHVybiJNIitjLnAwK2woYy5yLGMucDEsYy5hMS1jLmEwKSsoaT11LCgoYT1jKS5hMD09aS5hMCYmYS5hMT09aS5hMT9zKGMucixjLnAxLGMucixjLnAwKTpzKGMucixjLnAxLHUucix1LnAwKStsKHUucix1LnAxLHUuYTEtdS5hMCkrcyh1LnIsdS5wMSxjLnIsYy5wMCkpKyJaIil9ZnVuY3Rpb24gbyhlLHQsaSxvKXt2YXIgbD10LmNhbGwoZSxpLG8pLHM9ci5jYWxsKGUsbCxvKSxjPW4uY2FsbChlLGwsbyktU2UsdT1hLmNhbGwoZSxsLG8pLVNlO3JldHVybntyOnMsYTA6YyxhMTp1LHAwOltzKk1hdGguY29zKGMpLHMqTWF0aC5zaW4oYyldLHAxOltzKk1hdGguY29zKHUpLHMqTWF0aC5zaW4odSldfX1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4iQSIrZSsiLCIrZSsiIDAgIisgKyhyPmtlKSsiLDEgIit0fWZ1bmN0aW9uIHMoZSx0LHIsbil7cmV0dXJuIlEgMCwwICIrbn1yZXR1cm4gaS5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Y3QoZSksaSk6cn0saS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Y3QodCksaSk6ZX0saS50YXJnZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9Y3QoZSksaSk6dH0saS5zdGFydEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWN0KGUpLGkpOm59LGkuZW5kQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Y3QoZSksaSk6YX0saX0sZS5zdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXt2YXIgZT1NYSx0PWthLHI9TGE7ZnVuY3Rpb24gbihuLGEpe3ZhciBpPWUuY2FsbCh0aGlzLG4sYSksbz10LmNhbGwodGhpcyxuLGEpLGw9KGkueStvLnkpLzIscz1baSx7eDppLngseTpsfSx7eDpvLngseTpsfSxvXTtyZXR1cm4iTSIrKHM9cy5tYXAocikpWzBdKyJDIitzWzFdKyIgIitzWzJdKyIgIitzWzNdfXJldHVybiBuLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1jdCh0KSxuKTplfSxuLnRhcmdldD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1jdChlKSxuKTp0fSxuLnByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxuKTpyfSxufSxlLnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1lLnN2Zy5kaWFnb25hbCgpLHI9TGEsbj10LnByb2plY3Rpb247cmV0dXJuIHQucHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKFNhKHI9ZSkpOnJ9LHR9LGUuc3ZnLnN5bWJvbD1mdW5jdGlvbigpe3ZhciBlPUNhLHQ9RGE7ZnVuY3Rpb24gcihyLG4pe3JldHVybihQYS5nZXQoZS5jYWxsKHRoaXMscixuKSl8fE9hKSh0LmNhbGwodGhpcyxyLG4pKX1yZXR1cm4gci50eXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWN0KHQpLHIpOmV9LHIuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1jdChlKSxyKTp0fSxyfTt2YXIgUGE9ZS5tYXAoe2NpcmNsZTpPYSxjcm9zczpmdW5jdGlvbihlKXt2YXIgdD1NYXRoLnNxcnQoZS81KS8yO3JldHVybiJNIistMyp0KyIsIistdCsiSCIrLXQrIlYiKy0zKnQrIkgiK3QrIlYiKy10KyJIIiszKnQrIlYiK3QrIkgiK3QrIlYiKzMqdCsiSCIrLXQrIlYiK3QrIkgiKy0zKnQrIloifSxkaWFtb25kOmZ1bmN0aW9uKGUpe3ZhciB0PU1hdGguc3FydChlLygyKlJhKSkscj10KlJhO3JldHVybiJNMCwiKy10KyJMIityKyIsMCAwLCIrdCsiICIrLXIrIiwwWiJ9LHNxdWFyZTpmdW5jdGlvbihlKXt2YXIgdD1NYXRoLnNxcnQoZSkvMjtyZXR1cm4iTSIrLXQrIiwiKy10KyJMIit0KyIsIistdCsiICIrdCsiLCIrdCsiICIrLXQrIiwiK3QrIloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5zcXJ0KGUvSWEpLHI9dCpJYS8yO3JldHVybiJNMCwiK3IrIkwiK3QrIiwiKy1yKyIgIistdCsiLCIrLXIrIloifSwidHJpYW5nbGUtdXAiOmZ1bmN0aW9uKGUpe3ZhciB0PU1hdGguc3FydChlL0lhKSxyPXQqSWEvMjtyZXR1cm4iTTAsIistcisiTCIrdCsiLCIrcisiICIrLXQrIiwiK3IrIloifX0pO2Uuc3ZnLnN5bWJvbFR5cGVzPVBhLmtleXMoKTt2YXIgSWE9TWF0aC5zcXJ0KDMpLFJhPU1hdGgudGFuKDMwKkRlKTtHLnRyYW5zaXRpb249ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbj1FYXx8KytCYSxhPVVhKGUpLGk9W10sbz1qYXx8e3RpbWU6RGF0ZS5ub3coKSxlYXNlOlNyLGRlbGF5OjAsZHVyYXRpb246MjUwfSxsPS0xLHM9dGhpcy5sZW5ndGg7KytsPHM7KXtpLnB1c2godD1bXSk7Zm9yKHZhciBjPXRoaXNbbF0sdT0tMSxkPWMubGVuZ3RoOysrdTxkOykocj1jW3VdKSYmcWEocix1LGEsbixvKSx0LnB1c2gocil9cmV0dXJuIEZhKGksYSxuKX0sRy5pbnRlcnJ1cHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChudWxsPT1lP3phOk5hKFVhKGUpKSl9O3ZhciB6YT1OYShVYSgpKTtmdW5jdGlvbiBOYShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdCxyLG47KHQ9dGhpc1tlXSkmJihuPXRbcj10LmFjdGl2ZV0pJiYobi50aW1lci5jPW51bGwsbi50aW1lci50PU5hTiwtLXQuY291bnQ/ZGVsZXRlIHRbcl06ZGVsZXRlIHRoaXNbZV0sdC5hY3RpdmUrPS41LG4uZXZlbnQmJm4uZXZlbnQuaW50ZXJydXB0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLG4uaW5kZXgpKX19ZnVuY3Rpb24gRmEoZSx0LHIpe3JldHVybiBCKGUsSGEpLGUubmFtZXNwYWNlPXQsZS5pZD1yLGV9dmFyIEVhLGphLEhhPVtdLEJhPTA7ZnVuY3Rpb24gWWEoZSx0LHIsbil7dmFyIGE9ZS5pZCxpPWUubmFtZXNwYWNlO3JldHVybiB1ZShlLCJmdW5jdGlvbiI9PXR5cGVvZiByP2Z1bmN0aW9uKGUsbyxsKXtlW2ldW2FdLnR3ZWVuLnNldCh0LG4oci5jYWxsKGUsZS5fX2RhdGFfXyxvLGwpKSl9OihyPW4ociksZnVuY3Rpb24oZSl7ZVtpXVthXS50d2Vlbi5zZXQodCxyKX0pKX1mdW5jdGlvbiBWYShlKXtyZXR1cm4gbnVsbD09ZSYmKGU9IiIpLGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBVYShlKXtyZXR1cm4gbnVsbD09ZT8iX190cmFuc2l0aW9uX18iOiJfX3RyYW5zaXRpb25fIitlKyJfXyJ9ZnVuY3Rpb24gcWEoZSx0LHIsbixhKXt2YXIgaSxvLGwscyxjLHU9ZVtyXXx8KGVbcl09e2FjdGl2ZTowLGNvdW50OjB9KSxkPXVbbl07ZnVuY3Rpb24gZihyKXt2YXIgYT11LmFjdGl2ZSxmPXVbYV07Zm9yKHZhciBoIGluIGYmJihmLnRpbWVyLmM9bnVsbCxmLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVthXSxmLmV2ZW50JiZmLmV2ZW50LmludGVycnVwdC5jYWxsKGUsZS5fX2RhdGFfXyxmLmluZGV4KSksdSlpZigraDxuKXt2YXIgZz11W2hdO2cudGltZXIuYz1udWxsLGcudGltZXIudD1OYU4sLS11LmNvdW50LGRlbGV0ZSB1W2hdfW8uYz1wLHZ0KChmdW5jdGlvbigpe3JldHVybiBvLmMmJnAocnx8MSkmJihvLmM9bnVsbCxvLnQ9TmFOKSwxfSksMCxpKSx1LmFjdGl2ZT1uLGQuZXZlbnQmJmQuZXZlbnQuc3RhcnQuY2FsbChlLGUuX19kYXRhX18sdCksYz1bXSxkLnR3ZWVuLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7KG49bi5jYWxsKGUsZS5fX2RhdGFfXyx0KSkmJmMucHVzaChuKX0pKSxzPWQuZWFzZSxsPWQuZHVyYXRpb259ZnVuY3Rpb24gcChhKXtmb3IodmFyIGk9YS9sLG89cyhpKSxmPWMubGVuZ3RoO2Y+MDspY1stLWZdLmNhbGwoZSxvKTtpZihpPj0xKXJldHVybiBkLmV2ZW50JiZkLmV2ZW50LmVuZC5jYWxsKGUsZS5fX2RhdGFfXyx0KSwtLXUuY291bnQ/ZGVsZXRlIHVbbl06ZGVsZXRlIGVbcl0sMX1kfHwoaT1hLnRpbWUsbz12dCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZC5kZWxheTtpZihvLnQ9dCtpLHQ8PWUpcmV0dXJuIGYoZS10KTtvLmM9Zn0pLDAsaSksZD11W25dPXt0d2VlbjpuZXcgXyx0aW1lOmksdGltZXI6byxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsaW5kZXg6dH0sYT1udWxsLCsrdS5jb3VudCl9SGEuY2FsbD1HLmNhbGwsSGEuZW1wdHk9Ry5lbXB0eSxIYS5ub2RlPUcubm9kZSxIYS5zaXplPUcuc2l6ZSxlLnRyYW5zaXRpb249ZnVuY3Rpb24odCxyKXtyZXR1cm4gdCYmdC50cmFuc2l0aW9uP0VhP3QudHJhbnNpdGlvbihyKTp0OmUuc2VsZWN0aW9uKCkudHJhbnNpdGlvbih0KX0sZS50cmFuc2l0aW9uLnByb3RvdHlwZT1IYSxIYS5zZWxlY3Q9ZnVuY3Rpb24oZSl7dmFyIHQscixuLGE9dGhpcy5pZCxpPXRoaXMubmFtZXNwYWNlLG89W107ZT1aKGUpO2Zvcih2YXIgbD0tMSxzPXRoaXMubGVuZ3RoOysrbDxzOyl7by5wdXNoKHQ9W10pO2Zvcih2YXIgYz10aGlzW2xdLHU9LTEsZD1jLmxlbmd0aDsrK3U8ZDspKG49Y1t1XSkmJihyPWUuY2FsbChuLG4uX19kYXRhX18sdSxsKSk/KCJfX2RhdGFfXyJpbiBuJiYoci5fX2RhdGFfXz1uLl9fZGF0YV9fKSxxYShyLHUsaSxhLG5baV1bYV0pLHQucHVzaChyKSk6dC5wdXNoKG51bGwpfXJldHVybiBGYShvLGksYSl9LEhhLnNlbGVjdEFsbD1mdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxpLG89dGhpcy5pZCxsPXRoaXMubmFtZXNwYWNlLHM9W107ZT1XKGUpO2Zvcih2YXIgYz0tMSx1PXRoaXMubGVuZ3RoOysrYzx1Oylmb3IodmFyIGQ9dGhpc1tjXSxmPS0xLHA9ZC5sZW5ndGg7KytmPHA7KWlmKG49ZFtmXSl7aT1uW2xdW29dLHI9ZS5jYWxsKG4sbi5fX2RhdGFfXyxmLGMpLHMucHVzaCh0PVtdKTtmb3IodmFyIGg9LTEsZz1yLmxlbmd0aDsrK2g8ZzspKGE9cltoXSkmJnFhKGEsaCxsLG8saSksdC5wdXNoKGEpfXJldHVybiBGYShzLGwsbyl9LEhhLmZpbHRlcj1mdW5jdGlvbihlKXt2YXIgdCxyLG49W107ImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPXNlKGUpKTtmb3IodmFyIGE9MCxpPXRoaXMubGVuZ3RoO2E8aTthKyspe24ucHVzaCh0PVtdKTtmb3IodmFyIG8sbD0wLHM9KG89dGhpc1thXSkubGVuZ3RoO2w8cztsKyspKHI9b1tsXSkmJmUuY2FsbChyLHIuX19kYXRhX18sbCxhKSYmdC5wdXNoKHIpfXJldHVybiBGYShuLHRoaXMubmFtZXNwYWNlLHRoaXMuaWQpfSxIYS50d2Vlbj1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXMubm9kZSgpW25dW3JdLnR3ZWVuLmdldChlKTp1ZSh0aGlzLG51bGw9PXQ/ZnVuY3Rpb24odCl7dFtuXVtyXS50d2Vlbi5yZW1vdmUoZSl9OmZ1bmN0aW9uKGEpe2Fbbl1bcl0udHdlZW4uc2V0KGUsdCl9KX0sSGEuYXR0cj1mdW5jdGlvbih0LHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHIgaW4gdCl0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc312YXIgbj0idHJhbnNmb3JtIj09dD9qcjp5cixhPWUubnMucXVhbGlmeSh0KTtmdW5jdGlvbiBpKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYSl9ZnVuY3Rpb24gbygpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKX1mdW5jdGlvbiBsKGUpe3JldHVybiBudWxsPT1lP2k6KGUrPSIiLGZ1bmN0aW9uKCl7dmFyIHQscj10aGlzLmdldEF0dHJpYnV0ZShhKTtyZXR1cm4gciE9PWUmJih0PW4ocixlKSxmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZShhLHQoZSkpfSl9KX1mdW5jdGlvbiBzKGUpe3JldHVybiBudWxsPT1lP286KGUrPSIiLGZ1bmN0aW9uKCl7dmFyIHQscj10aGlzLmdldEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk7cmV0dXJuIHIhPT1lJiYodD1uKHIsZSksZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwsdChlKSl9KX0pfXJldHVybiBZYSh0aGlzLCJhdHRyLiIrdCxyLGEubG9jYWw/czpsKX0sSGEuYXR0clR3ZWVuPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5ucy5xdWFsaWZ5KHQpO3JldHVybiB0aGlzLnR3ZWVuKCJhdHRyLiIrdCxuLmxvY2FsP2Z1bmN0aW9uKGUsdCl7dmFyIGE9ci5jYWxsKHRoaXMsZSx0LHRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk7cmV0dXJuIGEmJmZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGEoZSkpfX06ZnVuY3Rpb24oZSx0KXt2YXIgYT1yLmNhbGwodGhpcyxlLHQsdGhpcy5nZXRBdHRyaWJ1dGUobikpO3JldHVybiBhJiZmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZShuLGEoZSkpfX0pfSxIYS5zdHlsZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl7Zm9yKHIgaW4gbjwyJiYodD0iIiksZSl0aGlzLnN0eWxlKHIsZVtyXSx0KTtyZXR1cm4gdGhpc31yPSIifWZ1bmN0aW9uIGEoKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIG51bGw9PXQ/YToodCs9IiIsZnVuY3Rpb24oKXt2YXIgbixhPW8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSk7cmV0dXJuIGEhPT10JiYobj15cihhLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuKHQpLHIpfSl9KX1yZXR1cm4gWWEodGhpcywic3R5bGUuIitlLHQsaSl9LEhhLnN0eWxlVHdlZW49ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4obixhKXt2YXIgaT10LmNhbGwodGhpcyxuLGEsbyh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKSk7cmV0dXJuIGkmJmZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxpKHQpLHIpfX1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYocj0iIiksdGhpcy50d2Vlbigic3R5bGUuIitlLG4pfSxIYS50ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBZYSh0aGlzLCJ0ZXh0IixlLFZhKX0sSGEucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIHRoaXMuZWFjaCgiZW5kLnRyYW5zaXRpb24iLChmdW5jdGlvbigpe3ZhciB0O3RoaXNbZV0uY291bnQ8MiYmKHQ9dGhpcy5wYXJlbnROb2RlKSYmdC5yZW1vdmVDaGlsZCh0aGlzKX0pKX0sSGEuZWFzZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtuXVtyXS5lYXNlOigiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZS5lYXNlLmFwcGx5KGUsYXJndW1lbnRzKSksdWUodGhpcywoZnVuY3Rpb24oZSl7ZVtuXVtyXS5lYXNlPXR9KSkpfSxIYS5kZWxheT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVt0XS5kZWxheTp1ZSh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKG4sYSxpKXtuW3JdW3RdLmRlbGF5PStlLmNhbGwobixuLl9fZGF0YV9fLGEsaSl9OihlPStlLGZ1bmN0aW9uKG4pe25bcl1bdF0uZGVsYXk9ZX0pKX0sSGEuZHVyYXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bdF0uZHVyYXRpb246dWUodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihuLGEsaSl7bltyXVt0XS5kdXJhdGlvbj1NYXRoLm1heCgxLGUuY2FsbChuLG4uX19kYXRhX18sYSxpKSl9OihlPU1hdGgubWF4KDEsZSksZnVuY3Rpb24obil7bltyXVt0XS5kdXJhdGlvbj1lfSkpfSxIYS5lYWNoPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5pZCxhPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGk9amEsbz1FYTt0cnl7RWE9bix1ZSh0aGlzLChmdW5jdGlvbihlLHIsaSl7amE9ZVthXVtuXSx0LmNhbGwoZSxlLl9fZGF0YV9fLHIsaSl9KSl9ZmluYWxseXtqYT1pLEVhPW99fWVsc2UgdWUodGhpcywoZnVuY3Rpb24oaSl7dmFyIG89aVthXVtuXTsoby5ldmVudHx8KG8uZXZlbnQ9ZS5kaXNwYXRjaCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSkpLm9uKHQscil9KSk7cmV0dXJuIHRoaXN9LEhhLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIGUsdCxyLG49dGhpcy5pZCxhPSsrQmEsaT10aGlzLm5hbWVzcGFjZSxvPVtdLGw9MCxzPXRoaXMubGVuZ3RoO2w8cztsKyspe28ucHVzaChlPVtdKTtmb3IodmFyIGMsdT0wLGQ9KGM9dGhpc1tsXSkubGVuZ3RoO3U8ZDt1KyspKHQ9Y1t1XSkmJnFhKHQsdSxpLGEse3RpbWU6KHI9dFtpXVtuXSkudGltZSxlYXNlOnIuZWFzZSxkZWxheTpyLmRlbGF5K3IuZHVyYXRpb24sZHVyYXRpb246ci5kdXJhdGlvbn0pLGUucHVzaCh0KX1yZXR1cm4gRmEobyxpLGEpfSxlLnN2Zy5heGlzPWZ1bmN0aW9uKCl7dmFyIHQscj1lLnNjYWxlLmxpbmVhcigpLGE9R2EsaT02LG89NixsPTMscz1bMTBdLGM9bnVsbDtmdW5jdGlvbiB1KG4pe24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbix1PWUuc2VsZWN0KHRoaXMpLGQ9dGhpcy5fX2NoYXJ0X198fHIsZj10aGlzLl9fY2hhcnRfXz1yLmNvcHkoKSxwPW51bGw9PWM/Zi50aWNrcz9mLnRpY2tzLmFwcGx5KGYscyk6Zi5kb21haW4oKTpjLGg9bnVsbD09dD9mLnRpY2tGb3JtYXQ/Zi50aWNrRm9ybWF0LmFwcGx5KGYscyk6Qzp0LGc9dS5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLGYpLG09Zy5lbnRlcigpLmluc2VydCgiZyIsIi5kb21haW4iKS5hdHRyKCJjbGFzcyIsInRpY2siKS5zdHlsZSgib3BhY2l0eSIsTWUpLHY9ZS50cmFuc2l0aW9uKGcuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsTWUpLnJlbW92ZSgpLHk9ZS50cmFuc2l0aW9uKGcub3JkZXIoKSkuc3R5bGUoIm9wYWNpdHkiLDEpLHg9TWF0aC5tYXgoaSwwKStsLGI9em4oZiksXz11LnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoWzBdKSx3PShfLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJkb21haW4iKSxlLnRyYW5zaXRpb24oXykpO20uYXBwZW5kKCJsaW5lIiksbS5hcHBlbmQoInRleHQiKTt2YXIgVCxNLGssQSxMPW0uc2VsZWN0KCJsaW5lIiksUz15LnNlbGVjdCgibGluZSIpLEQ9Zy5zZWxlY3QoInRleHQiKS50ZXh0KGgpLE89bS5zZWxlY3QoInRleHQiKSxQPXkuc2VsZWN0KCJ0ZXh0IiksST0idG9wIj09PWF8fCJsZWZ0Ij09PWE/LTE6MTtpZigiYm90dG9tIj09PWF8fCJ0b3AiPT09YT8obj1XYSxUPSJ4IixrPSJ5IixNPSJ4MiIsQT0ieTIiLEQuYXR0cigiZHkiLEk8MD8iMGVtIjoiLjcxZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSx3LmF0dHIoImQiLCJNIitiWzBdKyIsIitJKm8rIlYwSCIrYlsxXSsiViIrSSpvKSk6KG49WGEsVD0ieSIsaz0ieCIsTT0ieTIiLEE9IngyIixELmF0dHIoImR5IiwiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLEk8MD8iZW5kIjoic3RhcnQiKSx3LmF0dHIoImQiLCJNIitJKm8rIiwiK2JbMF0rIkgwViIrYlsxXSsiSCIrSSpvKSksTC5hdHRyKEEsSSppKSxPLmF0dHIoayxJKngpLFMuYXR0cihNLDApLmF0dHIoQSxJKmkpLFAuYXR0cihULDApLmF0dHIoayxJKngpLGYucmFuZ2VCYW5kKXt2YXIgUj1mLHo9Ui5yYW5nZUJhbmQoKS8yO2Q9Zj1mdW5jdGlvbihlKXtyZXR1cm4gUihlKSt6fX1lbHNlIGQucmFuZ2VCYW5kP2Q9Zjp2LmNhbGwobixmLGQpO20uY2FsbChuLGQsZikseS5jYWxsKG4sZixmKX0pKX1yZXR1cm4gdS5zY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLHUpOnJ9LHUub3JpZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUgaW4gWmE/ZSsiIjpHYSx1KTphfSx1LnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bihhcmd1bWVudHMpLHUpOnN9LHUudGlja1ZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLHUpOmN9LHUudGlja0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHUpOnR9LHUudGlja1NpemU9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gdD8oaT0rZSxvPSthcmd1bWVudHNbdC0xXSx1KTppfSx1LmlubmVyVGlja1NpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2UsdSk6aX0sdS5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStlLHUpOm99LHUudGlja1BhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K2UsdSk6bH0sdS50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnV9LHV9O3ZhciBHYT0iYm90dG9tIixaYT17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O2Z1bmN0aW9uIFdhKGUsdCxyKXtlLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKGUpe3ZhciBuPXQoZSk7cmV0dXJuInRyYW5zbGF0ZSgiKyhpc0Zpbml0ZShuKT9uOnIoZSkpKyIsMCkifSkpfWZ1bmN0aW9uIFhhKGUsdCxyKXtlLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKGUpe3ZhciBuPXQoZSk7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGlzRmluaXRlKG4pP246cihlKSkrIikifSkpfWUuc3ZnLmJydXNoPWZ1bmN0aW9uKCl7dmFyIHQscixuPWooZiwiYnJ1c2hzdGFydCIsImJydXNoIiwiYnJ1c2hlbmQiKSxhPW51bGwsaT1udWxsLGw9WzAsMF0scz1bMCwwXSxjPSEwLHU9ITAsZD1RYVswXTtmdW5jdGlvbiBmKHQpe3QuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1lLnNlbGVjdCh0aGlzKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2giLG0pLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixtKSxyPXQuc2VsZWN0QWxsKCIuYmFja2dyb3VuZCIpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5zdHlsZSgiY3Vyc29yIiwiY3Jvc3NoYWlyIiksdC5zZWxlY3RBbGwoIi5leHRlbnQiKS5kYXRhKFswXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImV4dGVudCIpLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIik7dmFyIG49dC5zZWxlY3RBbGwoIi5yZXNpemUiKS5kYXRhKGQsQyk7bi5leGl0KCkucmVtb3ZlKCksbi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24oZSl7cmV0dXJuInJlc2l6ZSAiK2V9KSkuc3R5bGUoImN1cnNvciIsKGZ1bmN0aW9uKGUpe3JldHVybiBKYVtlXX0pKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwoZnVuY3Rpb24oZSl7cmV0dXJuL1tld10kLy50ZXN0KGUpPy0zOm51bGx9KSkuYXR0cigieSIsKGZ1bmN0aW9uKGUpe3JldHVybi9eW25zXS8udGVzdChlKT8tMzpudWxsfSkpLmF0dHIoIndpZHRoIiw2KS5hdHRyKCJoZWlnaHQiLDYpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIiksbi5zdHlsZSgiZGlzcGxheSIsZi5lbXB0eSgpPyJub25lIjpudWxsKTt2YXIgbyxsPWUudHJhbnNpdGlvbih0KSxzPWUudHJhbnNpdGlvbihyKTthJiYobz16bihhKSxzLmF0dHIoIngiLG9bMF0pLmF0dHIoIndpZHRoIixvWzFdLW9bMF0pLGgobCkpLGkmJihvPXpuKGkpLHMuYXR0cigieSIsb1swXSkuYXR0cigiaGVpZ2h0IixvWzFdLW9bMF0pLGcobCkpLHAobCl9KSl9ZnVuY3Rpb24gcChlKXtlLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitsWysvZSQvLnRlc3QoZSldKyIsIitzWysvXnMvLnRlc3QoZSldKyIpIn0pKX1mdW5jdGlvbiBoKGUpe2Uuc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieCIsbFswXSksZS5zZWxlY3RBbGwoIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0IikuYXR0cigid2lkdGgiLGxbMV0tbFswXSl9ZnVuY3Rpb24gZyhlKXtlLnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoInkiLHNbMF0pLGUuc2VsZWN0QWxsKCIuZXh0ZW50LC5lPnJlY3QsLnc+cmVjdCIpLmF0dHIoImhlaWdodCIsc1sxXS1zWzBdKX1mdW5jdGlvbiBtKCl7dmFyIGQsbSx2PXRoaXMseT1lLnNlbGVjdChlLmV2ZW50LnRhcmdldCkseD1uLm9mKHYsYXJndW1lbnRzKSxiPWUuc2VsZWN0KHYpLF89eS5kYXR1bSgpLHc9IS9eKG58cykkLy50ZXN0KF8pJiZhLFQ9IS9eKGV8dykkLy50ZXN0KF8pJiZpLE09eS5jbGFzc2VkKCJleHRlbnQiKSxrPWJlKHYpLEE9ZS5tb3VzZSh2KSxMPWUuc2VsZWN0KG8odikpLm9uKCJrZXlkb3duLmJydXNoIixDKS5vbigia2V5dXAuYnJ1c2giLE8pO2lmKGUuZXZlbnQuY2hhbmdlZFRvdWNoZXM/TC5vbigidG91Y2htb3ZlLmJydXNoIixQKS5vbigidG91Y2hlbmQuYnJ1c2giLFIpOkwub24oIm1vdXNlbW92ZS5icnVzaCIsUCkub24oIm1vdXNldXAuYnJ1c2giLFIpLGIuaW50ZXJydXB0KCkuc2VsZWN0QWxsKCIqIikuaW50ZXJydXB0KCksTSlBWzBdPWxbMF0tQVswXSxBWzFdPXNbMF0tQVsxXTtlbHNlIGlmKF8pe3ZhciBTPSsvdyQvLnRlc3QoXyksRD0rL15uLy50ZXN0KF8pO209W2xbMS1TXS1BWzBdLHNbMS1EXS1BWzFdXSxBWzBdPWxbU10sQVsxXT1zW0RdfWVsc2UgZS5ldmVudC5hbHRLZXkmJihkPUEuc2xpY2UoKSk7ZnVuY3Rpb24gQygpezMyPT1lLmV2ZW50LmtleUNvZGUmJihNfHwoZD1udWxsLEFbMF0tPWxbMV0sQVsxXS09c1sxXSxNPTIpLEYoKSl9ZnVuY3Rpb24gTygpezMyPT1lLmV2ZW50LmtleUNvZGUmJjI9PU0mJihBWzBdKz1sWzFdLEFbMV0rPXNbMV0sTT0wLEYoKSl9ZnVuY3Rpb24gUCgpe3ZhciB0PWUubW91c2Uodikscj0hMTttJiYodFswXSs9bVswXSx0WzFdKz1tWzFdKSxNfHwoZS5ldmVudC5hbHRLZXk/KGR8fChkPVsobFswXStsWzFdKS8yLChzWzBdK3NbMV0pLzJdKSxBWzBdPWxbKyh0WzBdPGRbMF0pXSxBWzFdPXNbKyh0WzFdPGRbMV0pXSk6ZD1udWxsKSx3JiZJKHQsYSwwKSYmKGgoYikscj0hMCksVCYmSSh0LGksMSkmJihnKGIpLHI9ITApLHImJihwKGIpLHgoe3R5cGU6ImJydXNoIixtb2RlOk0/Im1vdmUiOiJyZXNpemUifSkpfWZ1bmN0aW9uIEkoZSxuLGEpe3ZhciBpLG8sZj16bihuKSxwPWZbMF0saD1mWzFdLGc9QVthXSxtPWE/czpsLHY9bVsxXS1tWzBdO2lmKE0mJihwLT1nLGgtPXYrZyksaT0oYT91OmMpP01hdGgubWF4KHAsTWF0aC5taW4oaCxlW2FdKSk6ZVthXSxNP289KGkrPWcpK3Y6KGQmJihnPU1hdGgubWF4KHAsTWF0aC5taW4oaCwyKmRbYV0taSkpKSxnPGk/KG89aSxpPWcpOm89ZyksbVswXSE9aXx8bVsxXSE9bylyZXR1cm4gYT9yPW51bGw6dD1udWxsLG1bMF09aSxtWzFdPW8sITB9ZnVuY3Rpb24gUigpe1AoKSxiLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixmLmVtcHR5KCk/Im5vbmUiOm51bGwpLGUuc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsbnVsbCksTC5vbigibW91c2Vtb3ZlLmJydXNoIixudWxsKS5vbigibW91c2V1cC5icnVzaCIsbnVsbCkub24oInRvdWNobW92ZS5icnVzaCIsbnVsbCkub24oInRvdWNoZW5kLmJydXNoIixudWxsKS5vbigia2V5ZG93bi5icnVzaCIsbnVsbCkub24oImtleXVwLmJydXNoIixudWxsKSxrKCkseCh7dHlwZToiYnJ1c2hlbmQifSl9Yi5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLGUuc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIseS5zdHlsZSgiY3Vyc29yIikpLHgoe3R5cGU6ImJydXNoc3RhcnQifSksUCgpfXJldHVybiBmLmV2ZW50PWZ1bmN0aW9uKGEpe2EuZWFjaCgoZnVuY3Rpb24oKXt2YXIgYT1uLm9mKHRoaXMsYXJndW1lbnRzKSxpPXt4OmwseTpzLGk6dCxqOnJ9LG89dGhpcy5fX2NoYXJ0X198fGk7dGhpcy5fX2NoYXJ0X189aSxFYT9lLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuYnJ1c2giLChmdW5jdGlvbigpe3Q9by5pLHI9by5qLGw9by54LHM9by55LGEoe3R5cGU6ImJydXNoc3RhcnQifSl9KSkudHdlZW4oImJydXNoOmJydXNoIiwoZnVuY3Rpb24oKXt2YXIgZT14cihsLGkueCksbj14cihzLGkueSk7cmV0dXJuIHQ9cj1udWxsLGZ1bmN0aW9uKHQpe2w9aS54PWUodCkscz1pLnk9bih0KSxhKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pfX0pKS5lYWNoKCJlbmQuYnJ1c2giLChmdW5jdGlvbigpe3Q9aS5pLHI9aS5qLGEoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksYSh7dHlwZToiYnJ1c2hlbmQifSl9KSk6KGEoe3R5cGU6ImJydXNoc3RhcnQifSksYSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSxhKHt0eXBlOiJicnVzaGVuZCJ9KSl9KSl9LGYueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1RYVshKGE9ZSk8PDF8IWldLGYpOmF9LGYueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1RYVshYTw8MXwhKGk9ZSldLGYpOml9LGYuY2xhbXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEmJmk/KGM9ISFlWzBdLHU9ISFlWzFdKTphP2M9ISFlOmkmJih1PSEhZSksZik6YSYmaT9bYyx1XTphP2M6aT91Om51bGx9LGYuZXh0ZW50PWZ1bmN0aW9uKGUpe3ZhciBuLG8sYyx1LGQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEmJihuPWVbMF0sbz1lWzFdLGkmJihuPW5bMF0sbz1vWzBdKSx0PVtuLG9dLGEuaW52ZXJ0JiYobj1hKG4pLG89YShvKSksbzxuJiYoZD1uLG49byxvPWQpLG49PWxbMF0mJm89PWxbMV18fChsPVtuLG9dKSksaSYmKGM9ZVswXSx1PWVbMV0sYSYmKGM9Y1sxXSx1PXVbMV0pLHI9W2MsdV0saS5pbnZlcnQmJihjPWkoYyksdT1pKHUpKSx1PGMmJihkPWMsYz11LHU9ZCksYz09c1swXSYmdT09c1sxXXx8KHM9W2MsdV0pKSxmKTooYSYmKHQ/KG49dFswXSxvPXRbMV0pOihuPWxbMF0sbz1sWzFdLGEuaW52ZXJ0JiYobj1hLmludmVydChuKSxvPWEuaW52ZXJ0KG8pKSxvPG4mJihkPW4sbj1vLG89ZCkpKSxpJiYocj8oYz1yWzBdLHU9clsxXSk6KGM9c1swXSx1PXNbMV0saS5pbnZlcnQmJihjPWkuaW52ZXJ0KGMpLHU9aS5pbnZlcnQodSkpLHU8YyYmKGQ9YyxjPXUsdT1kKSkpLGEmJmk/W1tuLGNdLFtvLHVdXTphP1tuLG9dOmkmJltjLHVdKX0sZi5jbGVhcj1mdW5jdGlvbigpe3JldHVybiBmLmVtcHR5KCl8fChsPVswLDBdLHM9WzAsMF0sdD1yPW51bGwpLGZ9LGYuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hIWEmJmxbMF09PWxbMV18fCEhaSYmc1swXT09c1sxXX0sZS5yZWJpbmQoZixuLCJvbiIpfTt2YXIgSmE9e246Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sUWE9W1sibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV07ZnVuY3Rpb24gS2EoZSl7cmV0dXJuIEpTT04ucGFyc2UoZS5yZXNwb25zZVRleHQpfWZ1bmN0aW9uICRhKGUpe3ZhciB0PWEuY3JlYXRlUmFuZ2UoKTtyZXR1cm4gdC5zZWxlY3ROb2RlKGEuYm9keSksdC5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZS5yZXNwb25zZVRleHQpfWUudGV4dD11dCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVzcG9uc2VUZXh0fSkpLGUuanNvbj1mdW5jdGlvbihlLHQpe3JldHVybiBkdChlLCJhcHBsaWNhdGlvbi9qc29uIixLYSx0KX0sZS5odG1sPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGR0KGUsInRleHQvaHRtbCIsJGEsdCl9LGUueG1sPXV0KChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNwb25zZVhNTH0pKSwib2JqZWN0Ij09dHlwZW9mIHQmJnQuZXhwb3J0cz90LmV4cG9ydHM9ZTp0aGlzLmQzPWV9KS5hcHBseShzZWxmKX0se31dLDEyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuLGE9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxpPWEmJiJmdW5jdGlvbiI9PXR5cGVvZiBhLmFwcGx5P2EuYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlLHQscil9O249YSYmImZ1bmN0aW9uIj09dHlwZW9mIGEub3duS2V5cz9hLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSkpfTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSl9O3ZhciBvPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPWV9O2Z1bmN0aW9uIGwoKXtsLmluaXQuY2FsbCh0aGlzKX10LmV4cG9ydHM9bCx0LmV4cG9ydHMub25jZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXtmdW5jdGlvbiBhKCl7dm9pZCAwIT09aSYmZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGkpLHIoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX12YXIgaTsiZXJyb3IiIT09dCYmKGk9ZnVuY3Rpb24ocil7ZS5yZW1vdmVMaXN0ZW5lcih0LGEpLG4ocil9LGUub25jZSgiZXJyb3IiLGkpKSxlLm9uY2UodCxhKX0pKX0sbC5FdmVudEVtaXR0ZXI9bCxsLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxsLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxsLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgcz0xMDtmdW5jdGlvbiBjKGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKX1mdW5jdGlvbiB1KGUpe3JldHVybiB2b2lkIDA9PT1lLl9tYXhMaXN0ZW5lcnM/bC5kZWZhdWx0TWF4TGlzdGVuZXJzOmUuX21heExpc3RlbmVyc31mdW5jdGlvbiBkKGUsdCxyLG4pe3ZhciBhLGksbyxsO2lmKGMociksdm9pZCAwPT09KGk9ZS5fZXZlbnRzKT8oaT1lLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09aS5uZXdMaXN0ZW5lciYmKGUuZW1pdCgibmV3TGlzdGVuZXIiLHQsci5saXN0ZW5lcj9yLmxpc3RlbmVyOnIpLGk9ZS5fZXZlbnRzKSxvPWlbdF0pLHZvaWQgMD09PW8pbz1pW3RdPXIsKytlLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBvP289aVt0XT1uP1tyLG9dOltvLHJdOm4/by51bnNoaWZ0KHIpOm8ucHVzaChyKSwoYT11KGUpKT4wJiZvLmxlbmd0aD5hJiYhby53YXJuZWQpe28ud2FybmVkPSEwO3ZhciBzPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK28ubGVuZ3RoKyIgIitTdHJpbmcodCkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7cy5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLHMuZW1pdHRlcj1lLHMudHlwZT10LHMuY291bnQ9by5sZW5ndGgsbD1zLGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGwpfXJldHVybiBlfWZ1bmN0aW9uIGYoKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIHAoZSx0LHIpe3ZhciBuPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDplLHR5cGU6dCxsaXN0ZW5lcjpyfSxhPWYuYmluZChuKTtyZXR1cm4gYS5saXN0ZW5lcj1yLG4ud3JhcEZuPWEsYX1mdW5jdGlvbiBoKGUsdCxyKXt2YXIgbj1lLl9ldmVudHM7aWYodm9pZCAwPT09bilyZXR1cm5bXTt2YXIgYT1uW3RdO3JldHVybiB2b2lkIDA9PT1hP1tdOiJmdW5jdGlvbiI9PXR5cGVvZiBhP3I/W2EubGlzdGVuZXJ8fGFdOlthXTpyP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgQXJyYXkoZS5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcil0W3JdPWVbcl0ubGlzdGVuZXJ8fGVbcl07cmV0dXJuIHR9KGEpOm0oYSxhLmxlbmd0aCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09dCl7dmFyIHI9dFtlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgcilyZXR1cm4gMTtpZih2b2lkIDAhPT1yKXJldHVybiByLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBtKGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWVbbl07cmV0dXJuIHJ9T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlfHxlPDB8fG8oZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytlKyIuIik7cz1lfX0pLGwuaW5pdD1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9LGwucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGV8fGU8MHx8byhlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2UrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPWUsdGhpc30sbC5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcyl9LGwucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXQucHVzaChhcmd1bWVudHNbcl0pO3ZhciBuPSJlcnJvciI9PT1lLGE9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWEpbj1uJiZ2b2lkIDA9PT1hLmVycm9yO2Vsc2UgaWYoIW4pcmV0dXJuITE7aWYobil7dmFyIG87aWYodC5sZW5ndGg+MCYmKG89dFswXSksbyBpbnN0YW5jZW9mIEVycm9yKXRocm93IG87dmFyIGw9bmV3IEVycm9yKCJVbmhhbmRsZWQgZXJyb3IuIisobz8iICgiK28ubWVzc2FnZSsiKSI6IiIpKTt0aHJvdyBsLmNvbnRleHQ9byxsfXZhciBzPWFbZV07aWYodm9pZCAwPT09cylyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgcylpKHMsdGhpcyx0KTtlbHNle3ZhciBjPXMubGVuZ3RoLHU9bShzLGMpO2ZvcihyPTA7cjxjOysrcilpKHVbcl0sdGhpcyx0KX1yZXR1cm4hMH0sbC5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZCh0aGlzLGUsdCwhMSl9LGwucHJvdG90eXBlLm9uPWwucHJvdG90eXBlLmFkZExpc3RlbmVyLGwucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBkKHRoaXMsZSx0LCEwKX0sbC5wcm90b3R5cGUub25jZT1mdW5jdGlvbihlLHQpe3JldHVybiBjKHQpLHRoaXMub24oZSxwKHRoaXMsZSx0KSksdGhpc30sbC5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBjKHQpLHRoaXMucHJlcGVuZExpc3RlbmVyKGUscCh0aGlzLGUsdCkpLHRoaXN9LGwucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGksbztpZihjKHQpLHZvaWQgMD09PShuPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KHI9bltlXSkpcmV0dXJuIHRoaXM7aWYocj09PXR8fHIubGlzdGVuZXI9PT10KTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBuW2VdLG4ucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGUsci5saXN0ZW5lcnx8dCkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIHIpe2ZvcihhPS0xLGk9ci5sZW5ndGgtMTtpPj0wO2ktLSlpZihyW2ldPT09dHx8cltpXS5saXN0ZW5lcj09PXQpe289cltpXS5saXN0ZW5lcixhPWk7YnJlYWt9aWYoYTwwKXJldHVybiB0aGlzOzA9PT1hP3Iuc2hpZnQoKTpmdW5jdGlvbihlLHQpe2Zvcig7dCsxPGUubGVuZ3RoO3QrKyllW3RdPWVbdCsxXTtlLnBvcCgpfShyLGEpLDE9PT1yLmxlbmd0aCYmKG5bZV09clswXSksdm9pZCAwIT09bi5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsZSxvfHx0KX1yZXR1cm4gdGhpc30sbC5wcm90b3R5cGUub2ZmPWwucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLGwucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihlKXt2YXIgdCxyLG47aWYodm9pZCAwPT09KHI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1yLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09cltlXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIHJbZV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhLGk9T2JqZWN0LmtleXMocik7Zm9yKG49MDtuPGkubGVuZ3RoOysrbikicmVtb3ZlTGlzdGVuZXIiIT09KGE9aVtuXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGEpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKHQ9cltlXSkpdGhpcy5yZW1vdmVMaXN0ZW5lcihlLHQpO2Vsc2UgaWYodm9pZCAwIT09dClmb3Iobj10Lmxlbmd0aC0xO24+PTA7bi0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoZSx0W25dKTtyZXR1cm4gdGhpc30sbC5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBoKHRoaXMsZSwhMCl9LGwucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4gaCh0aGlzLGUsITEpfSxsLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5saXN0ZW5lckNvdW50P2UubGlzdGVuZXJDb3VudCh0KTpnLmNhbGwoZSx0KX0sbC5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1nLGwucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9uKHRoaXMuX2V2ZW50cyk6W119fSx7fV0sMTM6W2Z1bmN0aW9uKGUsdCxyKXshZnVuY3Rpb24oZSxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PXQ/bihyKTpuKChlPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmQzPWUuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0KXtpZigocj0oZT10P2UudG9FeHBvbmVudGlhbCh0LTEpOmUudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIHIsbj1lLnNsaWNlKDAscik7cmV0dXJuW24ubGVuZ3RoPjE/blswXStuLnNsaWNlKDIpOm4sK2Uuc2xpY2UocisxKV19ZnVuY3Rpb24gcihlKXtyZXR1cm4oZT10KE1hdGguYWJzKGUpKSk/ZVsxXTpOYU59dmFyIG4sYT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBpKGUpe2lmKCEodD1hLmV4ZWMoZSkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrZSk7dmFyIHQ7cmV0dXJuIG5ldyBvKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIG8oZSl7dGhpcy5maWxsPXZvaWQgMD09PWUuZmlsbD8iICI6ZS5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09ZS5hbGlnbj8iPiI6ZS5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09ZS5zaWduPyItIjplLnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09ZS5zeW1ib2w/IiI6ZS5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhZS56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09ZS53aWR0aD92b2lkIDA6K2Uud2lkdGgsdGhpcy5jb21tYT0hIWUuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09ZS5wcmVjaXNpb24/dm9pZCAwOitlLnByZWNpc2lvbix0aGlzLnRyaW09ISFlLnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PWUudHlwZT8iIjplLnR5cGUrIiJ9ZnVuY3Rpb24gbChlLHIpe3ZhciBuPXQoZSxyKTtpZighbilyZXR1cm4gZSsiIjt2YXIgYT1uWzBdLGk9blsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrYTphLmxlbmd0aD5pKzE/YS5zbGljZSgwLGkrMSkrIi4iK2Euc2xpY2UoaSsxKTphK25ldyBBcnJheShpLWEubGVuZ3RoKzIpLmpvaW4oIjAiKX1pLnByb3RvdHlwZT1vLnByb3RvdHlwZSxvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBzPXsiJSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMTAwKmUpLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrIiJ9LGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguYWJzKGU9TWF0aC5yb3VuZChlKSk+PTFlMjE/ZS50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmUudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9FeHBvbmVudGlhbCh0KX0sZjpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRml4ZWQodCl9LGc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b1ByZWNpc2lvbih0KX0sbzpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZyg4KX0scDpmdW5jdGlvbihlLHQpe3JldHVybiBsKDEwMCplLHQpfSxyOmwsczpmdW5jdGlvbihlLHIpe3ZhciBhPXQoZSxyKTtpZighYSlyZXR1cm4gZSsiIjt2YXIgaT1hWzBdLG89YVsxXSxsPW8tKG49MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Ioby8zKSkpKSsxLHM9aS5sZW5ndGg7cmV0dXJuIGw9PT1zP2k6bD5zP2krbmV3IEFycmF5KGwtcysxKS5qb2luKCIwIik6bD4wP2kuc2xpY2UoMCxsKSsiLiIraS5zbGljZShsKToiMC4iK25ldyBBcnJheSgxLWwpLmpvaW4oIjAiKSt0KGUsTWF0aC5tYXgoMCxyK2wtMSkpWzBdfSxYOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGV9dmFyIHUsZD1BcnJheS5wcm90b3R5cGUubWFwLGY9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gcChlKXt2YXIgdCxhLG89dm9pZCAwPT09ZS5ncm91cGluZ3x8dm9pZCAwPT09ZS50aG91c2FuZHM/YzoodD1kLmNhbGwoZS5ncm91cGluZyxOdW1iZXIpLGE9ZS50aG91c2FuZHMrIiIsZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5sZW5ndGgsaT1bXSxvPTAsbD10WzBdLHM9MDtuPjAmJmw+MCYmKHMrbCsxPnImJihsPU1hdGgubWF4KDEsci1zKSksaS5wdXNoKGUuc3Vic3RyaW5nKG4tPWwsbitsKSksISgocys9bCsxKT5yKSk7KWw9dFtvPShvKzEpJXQubGVuZ3RoXTtyZXR1cm4gaS5yZXZlcnNlKCkuam9pbihhKX0pLGw9dm9pZCAwPT09ZS5jdXJyZW5jeT8iIjplLmN1cnJlbmN5WzBdKyIiLHU9dm9pZCAwPT09ZS5jdXJyZW5jeT8iIjplLmN1cnJlbmN5WzFdKyIiLHA9dm9pZCAwPT09ZS5kZWNpbWFsPyIuIjplLmRlY2ltYWwrIiIsaD12b2lkIDA9PT1lLm51bWVyYWxzP2M6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csKGZ1bmN0aW9uKHQpe3JldHVybiBlWyt0XX0pKX19KGQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGc9dm9pZCAwPT09ZS5wZXJjZW50PyIlIjplLnBlcmNlbnQrIiIsbT12b2lkIDA9PT1lLm1pbnVzPyItIjplLm1pbnVzKyIiLHY9dm9pZCAwPT09ZS5uYW4/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24geShlKXt2YXIgdD0oZT1pKGUpKS5maWxsLHI9ZS5hbGlnbixhPWUuc2lnbixjPWUuc3ltYm9sLGQ9ZS56ZXJvLHk9ZS53aWR0aCx4PWUuY29tbWEsYj1lLnByZWNpc2lvbixfPWUudHJpbSx3PWUudHlwZTsibiI9PT13Pyh4PSEwLHc9ImciKTpzW3ddfHwodm9pZCAwPT09YiYmKGI9MTIpLF89ITAsdz0iZyIpLChkfHwiMCI9PT10JiYiPSI9PT1yKSYmKGQ9ITAsdD0iMCIscj0iPSIpO3ZhciBUPSIkIj09PWM/bDoiIyI9PT1jJiYvW2JveFhdLy50ZXN0KHcpPyIwIit3LnRvTG93ZXJDYXNlKCk6IiIsTT0iJCI9PT1jP3U6L1slcF0vLnRlc3Qodyk/ZzoiIixrPXNbd10sQT0vW2RlZmdwcnMlXS8udGVzdCh3KTtmdW5jdGlvbiBMKGUpe3ZhciBpLGwscyxjPVQsdT1NO2lmKCJjIj09PXcpdT1rKGUpK3UsZT0iIjtlbHNle3ZhciBnPShlPStlKTwwfHwxL2U8MDtpZihlPWlzTmFOKGUpP3Y6ayhNYXRoLmFicyhlKSxiKSxfJiYoZT1mdW5jdGlvbihlKXtlOmZvcih2YXIgdCxyPWUubGVuZ3RoLG49MSxhPS0xO248cjsrK24pc3dpdGNoKGVbbl0pe2Nhc2UiLiI6YT10PW47YnJlYWs7Y2FzZSIwIjowPT09YSYmKGE9biksdD1uO2JyZWFrO2RlZmF1bHQ6aWYoIStlW25dKWJyZWFrIGU7YT4wJiYoYT0wKX1yZXR1cm4gYT4wP2Uuc2xpY2UoMCxhKStlLnNsaWNlKHQrMSk6ZX0oZSkpLGcmJjA9PStlJiYiKyIhPT1hJiYoZz0hMSksYz0oZz8iKCI9PT1hP2E6bToiLSI9PT1hfHwiKCI9PT1hPyIiOmEpK2MsdT0oInMiPT09dz9mWzgrbi8zXToiIikrdSsoZyYmIigiPT09YT8iKSI6IiIpLEEpZm9yKGk9LTEsbD1lLmxlbmd0aDsrK2k8bDspaWYoNDg+KHM9ZS5jaGFyQ29kZUF0KGkpKXx8cz41Nyl7dT0oNDY9PT1zP3ArZS5zbGljZShpKzEpOmUuc2xpY2UoaSkpK3UsZT1lLnNsaWNlKDAsaSk7YnJlYWt9fXgmJiFkJiYoZT1vKGUsMS8wKSk7dmFyIEw9Yy5sZW5ndGgrZS5sZW5ndGgrdS5sZW5ndGgsUz1MPHk/bmV3IEFycmF5KHktTCsxKS5qb2luKHQpOiIiO3N3aXRjaCh4JiZkJiYoZT1vKFMrZSxTLmxlbmd0aD95LXUubGVuZ3RoOjEvMCksUz0iIikscil7Y2FzZSI8IjplPWMrZSt1K1M7YnJlYWs7Y2FzZSI9IjplPWMrUytlK3U7YnJlYWs7Y2FzZSJeIjplPVMuc2xpY2UoMCxMPVMubGVuZ3RoPj4xKStjK2UrdStTLnNsaWNlKEwpO2JyZWFrO2RlZmF1bHQ6ZT1TK2MrZSt1fXJldHVybiBoKGUpfXJldHVybiBiPXZvaWQgMD09PWI/NjovW2dwcnNdLy50ZXN0KHcpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpLEwudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZSsiIn0sTH1yZXR1cm57Zm9ybWF0OnksZm9ybWF0UHJlZml4OmZ1bmN0aW9uKGUsdCl7dmFyIG49eSgoKGU9aShlKSkudHlwZT0iZiIsZSkpLGE9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Iocih0KS8zKSkpLG89TWF0aC5wb3coMTAsLWEpLGw9Zls4K2EvM107cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuKG8qZSkrbH19fX1mdW5jdGlvbiBoKHQpe3JldHVybiB1PXAodCksZS5mb3JtYXQ9dS5mb3JtYXQsZS5mb3JtYXRQcmVmaXg9dS5mb3JtYXRQcmVmaXgsdX1oKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KSxlLkZvcm1hdFNwZWNpZmllcj1vLGUuZm9ybWF0RGVmYXVsdExvY2FsZT1oLGUuZm9ybWF0TG9jYWxlPXAsZS5mb3JtYXRTcGVjaWZpZXI9aSxlLnByZWNpc2lvbkZpeGVkPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heCgwLC1yKE1hdGguYWJzKGUpKSl9LGUucHJlY2lzaW9uUHJlZml4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Iocih0KS8zKSkpLXIoTWF0aC5hYnMoZSkpKX0sZS5wcmVjaXNpb25Sb3VuZD1mdW5jdGlvbihlLHQpe3JldHVybiBlPU1hdGguYWJzKGUpLHQ9TWF0aC5hYnModCktZSxNYXRoLm1heCgwLHIodCktcihlKSkrMX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTQ6W2Z1bmN0aW9uKGUsdCxyKXshZnVuY3Rpb24obixhKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PXQ/YShyLGUoImQzLXRpbWUiKSk6YSgobj1ufHxzZWxmKS5kMz1uLmQzfHx7fSxuLmQzKX0odGhpcywoZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKTtyZXR1cm4gdC5zZXRGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCl9ZnVuY3Rpb24gbihlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKX1mdW5jdGlvbiBhKGUsdCxyKXtyZXR1cm57eTplLG06dCxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBpKGUpe3ZhciBpPWUuZGF0ZVRpbWUsbz1lLmRhdGUscz1lLnRpbWUsYz1lLnBlcmlvZHMsdT1lLmRheXMsZD1lLnNob3J0RGF5cyxmPWUubW9udGhzLHllPWUuc2hvcnRNb250aHMseGU9cChjKSxiZT1oKGMpLF9lPXAodSksd2U9aCh1KSxUZT1wKGQpLE1lPWgoZCksa2U9cChmKSxBZT1oKGYpLExlPXAoeWUpLFNlPWgoeWUpLERlPXthOmZ1bmN0aW9uKGUpe3JldHVybiBkW2UuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKGUpe3JldHVybiB1W2UuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKGUpe3JldHVybiB5ZVtlLmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKGUpe3JldHVybiBmW2UuZ2V0TW9udGgoKV19LGM6bnVsbCxkOnosZTp6LGY6SCxIOk4sSTpGLGo6RSxMOmosbTpCLE06WSxwOmZ1bmN0aW9uKGUpe3JldHVybiBjWysoZS5nZXRIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKGUpe3JldHVybiAxK35+KGUuZ2V0TW9udGgoKS8zKX0sUTptZSxzOnZlLFM6Vix1OlUsVTpxLFY6Ryx3OlosVzpXLHg6bnVsbCxYOm51bGwseTpYLFk6SixaOlEsIiUiOmdlfSxDZT17YTpmdW5jdGlvbihlKXtyZXR1cm4gZFtlLmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbihlKXtyZXR1cm4gdVtlLmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbihlKXtyZXR1cm4geWVbZS5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbihlKXtyZXR1cm4gZltlLmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpLLGU6SyxmOm5lLEg6JCxJOmVlLGo6dGUsTDpyZSxtOmFlLE06aWUscDpmdW5jdGlvbihlKXtyZXR1cm4gY1srKGUuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbihlKXtyZXR1cm4gMSt+fihlLmdldFVUQ01vbnRoKCkvMyl9LFE6bWUsczp2ZSxTOm9lLHU6bGUsVTpzZSxWOmNlLHc6dWUsVzpkZSx4Om51bGwsWDpudWxsLHk6ZmUsWTpwZSxaOmhlLCIlIjpnZX0sT2U9e2E6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVRlLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUudz1NZVtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1fZS5leGVjKHQuc2xpY2UocikpO3JldHVybiBuPyhlLnc9d2VbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbihlLHQscil7dmFyIG49TGUuZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5tPVNlW25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWtlLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUubT1BZVtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gUmUoZSxpLHQscil9LGQ6ayxlOmssZjpPLEg6TCxJOkwsajpBLEw6QyxtOk0sTTpTLHA6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXhlLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUucD1iZVtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxxOlQsUTpJLHM6UixTOkQsdTptLFU6dixWOnksdzpnLFc6eCx4OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gUmUoZSxvLHQscil9LFg6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBSZShlLHMsdCxyKX0seTpfLFk6YixaOncsIiUiOlB9O2Z1bmN0aW9uIFBlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuLGEsaSxvPVtdLHM9LTEsYz0wLHU9ZS5sZW5ndGg7Zm9yKHIgaW5zdGFuY2VvZiBEYXRlfHwocj1uZXcgRGF0ZSgrcikpOysrczx1OykzNz09PWUuY2hhckNvZGVBdChzKSYmKG8ucHVzaChlLnNsaWNlKGMscykpLG51bGwhPShhPWxbbj1lLmNoYXJBdCgrK3MpXSk/bj1lLmNoYXJBdCgrK3MpOmE9ImUiPT09bj8iICI6IjAiLChpPXRbbl0pJiYobj1pKHIsYSkpLG8ucHVzaChuKSxjPXMrMSk7cmV0dXJuIG8ucHVzaChlLnNsaWNlKGMscykpLG8uam9pbigiIil9fWZ1bmN0aW9uIEllKGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBsLHMsYz1hKDE5MDAsdm9pZCAwLDEpO2lmKFJlKGMsZSxvKz0iIiwwKSE9by5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gYylyZXR1cm4gbmV3IERhdGUoYy5RKTtpZigicyJpbiBjKXJldHVybiBuZXcgRGF0ZSgxZTMqYy5zKygiTCJpbiBjP2MuTDowKSk7aWYoaSYmISgiWiJpbiBjKSYmKGMuWj0wKSwicCJpbiBjJiYoYy5IPWMuSCUxMisxMipjLnApLHZvaWQgMD09PWMubSYmKGMubT0icSJpbiBjP2MucTowKSwiViJpbiBjKXtpZihjLlY8MXx8Yy5WPjUzKXJldHVybiBudWxsOyJ3ImluIGN8fChjLnc9MSksIloiaW4gYz8ocz0obD1uKGEoYy55LDAsMSkpKS5nZXRVVENEYXkoKSxsPXM+NHx8MD09PXM/dC51dGNNb25kYXkuY2VpbChsKTp0LnV0Y01vbmRheShsKSxsPXQudXRjRGF5Lm9mZnNldChsLDcqKGMuVi0xKSksYy55PWwuZ2V0VVRDRnVsbFllYXIoKSxjLm09bC5nZXRVVENNb250aCgpLGMuZD1sLmdldFVUQ0RhdGUoKSsoYy53KzYpJTcpOihzPShsPXIoYShjLnksMCwxKSkpLmdldERheSgpLGw9cz40fHwwPT09cz90LnRpbWVNb25kYXkuY2VpbChsKTp0LnRpbWVNb25kYXkobCksbD10LnRpbWVEYXkub2Zmc2V0KGwsNyooYy5WLTEpKSxjLnk9bC5nZXRGdWxsWWVhcigpLGMubT1sLmdldE1vbnRoKCksYy5kPWwuZ2V0RGF0ZSgpKyhjLncrNiklNyl9ZWxzZSgiVyJpbiBjfHwiVSJpbiBjKSYmKCJ3ImluIGN8fChjLnc9InUiaW4gYz9jLnUlNzoiVyJpbiBjPzE6MCkscz0iWiJpbiBjP24oYShjLnksMCwxKSkuZ2V0VVRDRGF5KCk6cihhKGMueSwwLDEpKS5nZXREYXkoKSxjLm09MCxjLmQ9IlciaW4gYz8oYy53KzYpJTcrNypjLlctKHMrNSklNzpjLncrNypjLlUtKHMrNiklNyk7cmV0dXJuIloiaW4gYz8oYy5IKz1jLlovMTAwfDAsYy5NKz1jLlolMTAwLG4oYykpOnIoYyl9fWZ1bmN0aW9uIFJlKGUsdCxyLG4pe2Zvcih2YXIgYSxpLG89MCxzPXQubGVuZ3RoLGM9ci5sZW5ndGg7bzxzOyl7aWYobj49YylyZXR1cm4tMTtpZigzNz09PShhPXQuY2hhckNvZGVBdChvKyspKSl7aWYoYT10LmNoYXJBdChvKyspLCEoaT1PZVthIGluIGw/dC5jaGFyQXQobysrKTphXSl8fChuPWkoZSxyLG4pKTwwKXJldHVybi0xfWVsc2UgaWYoYSE9ci5jaGFyQ29kZUF0KG4rKykpcmV0dXJuLTF9cmV0dXJuIG59cmV0dXJuIERlLng9UGUobyxEZSksRGUuWD1QZShzLERlKSxEZS5jPVBlKGksRGUpLENlLng9UGUobyxDZSksQ2UuWD1QZShzLENlKSxDZS5jPVBlKGksQ2UpLHtmb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9UGUoZSs9IiIsRGUpO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHR9LHBhcnNlOmZ1bmN0aW9uKGUpe3ZhciB0PUllKGUrPSIiLCExKTtyZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlfSx0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9UGUoZSs9IiIsQ2UpO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHR9LHV0Y1BhcnNlOmZ1bmN0aW9uKGUpe3ZhciB0PUllKGUrPSIiLCEwKTtyZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlfSx0fX19dmFyIG8sbD17Ii0iOiIiLF86IiAiLDA6IjAifSxzPS9eXHMqXGQrLyxjPS9eJS8sdT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gZChlLHQscil7dmFyIG49ZTwwPyItIjoiIixhPShuPy1lOmUpKyIiLGk9YS5sZW5ndGg7cmV0dXJuIG4rKGk8cj9uZXcgQXJyYXkoci1pKzEpLmpvaW4odCkrYTphKX1mdW5jdGlvbiBmKGUpe3JldHVybiBlLnJlcGxhY2UodSwiXFwkJiIpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKGYpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBoKGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIGcoZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBtKGUsdCxyKXt2YXIgbj1zLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdihlLHQscil7dmFyIG49cy5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHkoZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj1zLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYihlLHQscil7dmFyIG49cy5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF8oZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHcoZSx0LHIpe3ZhciBuPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKHQuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8oZS5aPW5bMV0/MDotKG5bMl0rKG5bM118fCIwMCIpKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUKGUsdCxyKXt2YXIgbj1zLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnE9MypuWzBdLTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTShlLHQscil7dmFyIG49cy5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrKGUsdCxyKXt2YXIgbj1zLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQShlLHQscil7dmFyIG49cy5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5tPTAsZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwoZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBTKGUsdCxyKXt2YXIgbj1zLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRChlLHQscil7dmFyIG49cy5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEMoZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPKGUsdCxyKXt2YXIgbj1zLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUChlLHQscil7dmFyIG49Yy5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIEkoZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFIoZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHooZSx0KXtyZXR1cm4gZChlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIE4oZSx0KXtyZXR1cm4gZChlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBGKGUsdCl7cmV0dXJuIGQoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIEUoZSxyKXtyZXR1cm4gZCgxK3QudGltZURheS5jb3VudCh0LnRpbWVZZWFyKGUpLGUpLHIsMyl9ZnVuY3Rpb24gaihlLHQpe3JldHVybiBkKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBIKGUsdCl7cmV0dXJuIGooZSx0KSsiMDAwIn1mdW5jdGlvbiBCKGUsdCl7cmV0dXJuIGQoZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBZKGUsdCl7cmV0dXJuIGQoZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBWKGUsdCl7cmV0dXJuIGQoZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIDA9PT10Pzc6dH1mdW5jdGlvbiBxKGUscil7cmV0dXJuIGQodC50aW1lU3VuZGF5LmNvdW50KHQudGltZVllYXIoZSktMSxlKSxyLDIpfWZ1bmN0aW9uIEcoZSxyKXt2YXIgbj1lLmdldERheSgpO3JldHVybiBlPW4+PTR8fDA9PT1uP3QudGltZVRodXJzZGF5KGUpOnQudGltZVRodXJzZGF5LmNlaWwoZSksZCh0LnRpbWVUaHVyc2RheS5jb3VudCh0LnRpbWVZZWFyKGUpLGUpKyg0PT09dC50aW1lWWVhcihlKS5nZXREYXkoKSksciwyKX1mdW5jdGlvbiBaKGUpe3JldHVybiBlLmdldERheSgpfWZ1bmN0aW9uIFcoZSxyKXtyZXR1cm4gZCh0LnRpbWVNb25kYXkuY291bnQodC50aW1lWWVhcihlKS0xLGUpLHIsMil9ZnVuY3Rpb24gWChlLHQpe3JldHVybiBkKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBKKGUsdCl7cmV0dXJuIGQoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIFEoZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOih0Kj0tMSwiKyIpKStkKHQvNjB8MCwiMCIsMikrZCh0JTYwLCIwIiwyKX1mdW5jdGlvbiBLKGUsdCl7cmV0dXJuIGQoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiAkKGUsdCl7cmV0dXJuIGQoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gZWUoZSx0KXtyZXR1cm4gZChlLmdldFVUQ0hvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gdGUoZSxyKXtyZXR1cm4gZCgxK3QudXRjRGF5LmNvdW50KHQudXRjWWVhcihlKSxlKSxyLDMpfWZ1bmN0aW9uIHJlKGUsdCl7cmV0dXJuIGQoZS5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIG5lKGUsdCl7cmV0dXJuIHJlKGUsdCkrIjAwMCJ9ZnVuY3Rpb24gYWUoZSx0KXtyZXR1cm4gZChlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGllKGUsdCl7cmV0dXJuIGQoZS5nZXRVVENNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBvZShlLHQpe3JldHVybiBkKGUuZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gbGUoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gMD09PXQ/Nzp0fWZ1bmN0aW9uIHNlKGUscil7cmV0dXJuIGQodC51dGNTdW5kYXkuY291bnQodC51dGNZZWFyKGUpLTEsZSksciwyKX1mdW5jdGlvbiBjZShlLHIpe3ZhciBuPWUuZ2V0VVRDRGF5KCk7cmV0dXJuIGU9bj49NHx8MD09PW4/dC51dGNUaHVyc2RheShlKTp0LnV0Y1RodXJzZGF5LmNlaWwoZSksZCh0LnV0Y1RodXJzZGF5LmNvdW50KHQudXRjWWVhcihlKSxlKSsoND09PXQudXRjWWVhcihlKS5nZXRVVENEYXkoKSksciwyKX1mdW5jdGlvbiB1ZShlKXtyZXR1cm4gZS5nZXRVVENEYXkoKX1mdW5jdGlvbiBkZShlLHIpe3JldHVybiBkKHQudXRjTW9uZGF5LmNvdW50KHQudXRjWWVhcihlKS0xLGUpLHIsMil9ZnVuY3Rpb24gZmUoZSx0KXtyZXR1cm4gZChlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gcGUoZSx0KXtyZXR1cm4gZChlLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gaGUoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIGdlKCl7cmV0dXJuIiUifWZ1bmN0aW9uIG1lKGUpe3JldHVybitlfWZ1bmN0aW9uIHZlKGUpe3JldHVybiBNYXRoLmZsb29yKCtlLzFlMyl9ZnVuY3Rpb24geWUodCl7cmV0dXJuIG89aSh0KSxlLnRpbWVGb3JtYXQ9by5mb3JtYXQsZS50aW1lUGFyc2U9by5wYXJzZSxlLnV0Y0Zvcm1hdD1vLnV0Y0Zvcm1hdCxlLnV0Y1BhcnNlPW8udXRjUGFyc2Usb315ZSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO3ZhciB4ZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbihlKXtyZXR1cm4gZS50b0lTT1N0cmluZygpfTplLnV0Y0Zvcm1hdCgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7dmFyIGJlPStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGUoZSk7cmV0dXJuIGlzTmFOKHQpP251bGw6dH06ZS51dGNQYXJzZSgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7ZS5pc29Gb3JtYXQ9eGUsZS5pc29QYXJzZT1iZSxlLnRpbWVGb3JtYXREZWZhdWx0TG9jYWxlPXllLGUudGltZUZvcm1hdExvY2FsZT1pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0seyJkMy10aW1lIjoxNX1dLDE1OltmdW5jdGlvbihlLHQscil7IWZ1bmN0aW9uKGUsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT10P24ocik6bigoZT1lfHxzZWxmKS5kMz1lLmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1uZXcgRGF0ZSxyPW5ldyBEYXRlO2Z1bmN0aW9uIG4oZSxhLGksbyl7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZSh0PTA9PT1hcmd1bWVudHMubGVuZ3RoP25ldyBEYXRlOm5ldyBEYXRlKCt0KSksdH1yZXR1cm4gbC5mbG9vcj1mdW5jdGlvbih0KXtyZXR1cm4gZSh0PW5ldyBEYXRlKCt0KSksdH0sbC5jZWlsPWZ1bmN0aW9uKHQpe3JldHVybiBlKHQ9bmV3IERhdGUodC0xKSksYSh0LDEpLGUodCksdH0sbC5yb3VuZD1mdW5jdGlvbihlKXt2YXIgdD1sKGUpLHI9bC5jZWlsKGUpO3JldHVybiBlLXQ8ci1lP3Q6cn0sbC5vZmZzZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlPW5ldyBEYXRlKCtlKSxudWxsPT10PzE6TWF0aC5mbG9vcih0KSksZX0sbC5yYW5nZT1mdW5jdGlvbih0LHIsbil7dmFyIGksbz1bXTtpZih0PWwuY2VpbCh0KSxuPW51bGw9PW4/MTpNYXRoLmZsb29yKG4pLCEodDxyJiZuPjApKXJldHVybiBvO2Rve28ucHVzaChpPW5ldyBEYXRlKCt0KSksYSh0LG4pLGUodCl9d2hpbGUoaTx0JiZ0PHIpO3JldHVybiBvfSxsLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbigoZnVuY3Rpb24ocil7aWYocj49cilmb3IoO2UociksIXQocik7KXIuc2V0VGltZShyLTEpfSksKGZ1bmN0aW9uKGUscil7aWYoZT49ZSlpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7YShlLC0xKSwhdChlKTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7YShlLDEpLCF0KGUpOyk7fSkpfSxpJiYobC5jb3VudD1mdW5jdGlvbihuLGEpe3JldHVybiB0LnNldFRpbWUoK24pLHIuc2V0VGltZSgrYSksZSh0KSxlKHIpLE1hdGguZmxvb3IoaSh0LHIpKX0sbC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLGlzRmluaXRlKGUpJiZlPjA/ZT4xP2wuZmlsdGVyKG8/ZnVuY3Rpb24odCl7cmV0dXJuIG8odCklZT09MH06ZnVuY3Rpb24odCl7cmV0dXJuIGwuY291bnQoMCx0KSVlPT0wfSk6bDpudWxsfSksbH12YXIgYT1uKChmdW5jdGlvbigpe30pLChmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0pLChmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KSk7YS5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLGlzRmluaXRlKGUpJiZlPjA/ZT4xP24oKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9KSwoZnVuY3Rpb24odCxyKXt0LnNldFRpbWUoK3QrciplKX0pLChmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KSk6YTpudWxsfTt2YXIgaT1hLnJhbmdlLG89bigoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrMWUzKnQpfSksKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvMWUzfSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ1NlY29uZHMoKX0pKSxsPW8ucmFuZ2Uscz1uKChmdW5jdGlvbihlKXtlLnNldFRpbWUoZS1lLmdldE1pbGxpc2Vjb25kcygpLTFlMyplLmdldFNlY29uZHMoKSl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrNmU0KnQpfSksKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvNmU0fSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pKSxjPXMucmFuZ2UsdT1uKChmdW5jdGlvbihlKXtlLnNldFRpbWUoZS1lLmdldE1pbGxpc2Vjb25kcygpLTFlMyplLmdldFNlY29uZHMoKS02ZTQqZS5nZXRNaW51dGVzKCkpfSksKGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlKzM2ZTUqdCl9KSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS8zNmU1fSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEhvdXJzKCl9KSksZD11LnJhbmdlLGY9bigoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0pLChmdW5jdGlvbihlLHQpe3JldHVybih0LWUtNmU0Kih0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSkvODY0ZTV9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RGF0ZSgpLTF9KSkscD1mLnJhbmdlO2Z1bmN0aW9uIGgoZSl7cmV0dXJuIG4oKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrNyp0KX0pLChmdW5jdGlvbihlLHQpe3JldHVybih0LWUtNmU0Kih0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSkvNjA0OGU1fSkpfXZhciBnPWgoMCksbT1oKDEpLHY9aCgyKSx5PWgoMykseD1oKDQpLGI9aCg1KSxfPWgoNiksdz1nLnJhbmdlLFQ9bS5yYW5nZSxNPXYucmFuZ2Usaz15LnJhbmdlLEE9eC5yYW5nZSxMPWIucmFuZ2UsUz1fLnJhbmdlLEQ9bigoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldE1vbnRoKGUuZ2V0TW9udGgoKSt0KX0pLChmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKzEyKih0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfSkpLEM9RC5yYW5nZSxPPW4oKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9KSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSkpO08uZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSkmJmU+MD9uKChmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pKTpudWxsfTt2YXIgUD1PLnJhbmdlLEk9bigoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrNmU0KnQpfSksKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvNmU0fSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01pbnV0ZXMoKX0pKSxSPUkucmFuZ2Usej1uKChmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlKzM2ZTUqdCl9KSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS8zNmU1fSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0hvdXJzKCl9KSksTj16LnJhbmdlLEY9bigoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKSt0KX0pLChmdW5jdGlvbihlLHQpe3JldHVybih0LWUpLzg2NGU1fSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSkpLEU9Ri5yYW5nZTtmdW5jdGlvbiBqKGUpe3JldHVybiBuKChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1lKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpKzcqdCl9KSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS82MDQ4ZTV9KSl9dmFyIEg9aigwKSxCPWooMSksWT1qKDIpLFY9aigzKSxVPWooNCkscT1qKDUpLEc9aig2KSxaPUgucmFuZ2UsVz1CLnJhbmdlLFg9WS5yYW5nZSxKPVYucmFuZ2UsUT1VLnJhbmdlLEs9cS5yYW5nZSwkPUcucmFuZ2UsZWU9bigoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0pLChmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKzEyKih0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNb250aCgpfSkpLHRlPWVlLnJhbmdlLHJlPW4oKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9KSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpfSkpO3JlLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiBpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpJiZlPjA/bigoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KSk6bnVsbH07dmFyIG5lPXJlLnJhbmdlO2UudGltZURheT1mLGUudGltZURheXM9cCxlLnRpbWVGcmlkYXk9YixlLnRpbWVGcmlkYXlzPUwsZS50aW1lSG91cj11LGUudGltZUhvdXJzPWQsZS50aW1lSW50ZXJ2YWw9bixlLnRpbWVNaWxsaXNlY29uZD1hLGUudGltZU1pbGxpc2Vjb25kcz1pLGUudGltZU1pbnV0ZT1zLGUudGltZU1pbnV0ZXM9YyxlLnRpbWVNb25kYXk9bSxlLnRpbWVNb25kYXlzPVQsZS50aW1lTW9udGg9RCxlLnRpbWVNb250aHM9QyxlLnRpbWVTYXR1cmRheT1fLGUudGltZVNhdHVyZGF5cz1TLGUudGltZVNlY29uZD1vLGUudGltZVNlY29uZHM9bCxlLnRpbWVTdW5kYXk9ZyxlLnRpbWVTdW5kYXlzPXcsZS50aW1lVGh1cnNkYXk9eCxlLnRpbWVUaHVyc2RheXM9QSxlLnRpbWVUdWVzZGF5PXYsZS50aW1lVHVlc2RheXM9TSxlLnRpbWVXZWRuZXNkYXk9eSxlLnRpbWVXZWRuZXNkYXlzPWssZS50aW1lV2Vlaz1nLGUudGltZVdlZWtzPXcsZS50aW1lWWVhcj1PLGUudGltZVllYXJzPVAsZS51dGNEYXk9RixlLnV0Y0RheXM9RSxlLnV0Y0ZyaWRheT1xLGUudXRjRnJpZGF5cz1LLGUudXRjSG91cj16LGUudXRjSG91cnM9TixlLnV0Y01pbGxpc2Vjb25kPWEsZS51dGNNaWxsaXNlY29uZHM9aSxlLnV0Y01pbnV0ZT1JLGUudXRjTWludXRlcz1SLGUudXRjTW9uZGF5PUIsZS51dGNNb25kYXlzPVcsZS51dGNNb250aD1lZSxlLnV0Y01vbnRocz10ZSxlLnV0Y1NhdHVyZGF5PUcsZS51dGNTYXR1cmRheXM9JCxlLnV0Y1NlY29uZD1vLGUudXRjU2Vjb25kcz1sLGUudXRjU3VuZGF5PUgsZS51dGNTdW5kYXlzPVosZS51dGNUaHVyc2RheT1VLGUudXRjVGh1cnNkYXlzPVEsZS51dGNUdWVzZGF5PVksZS51dGNUdWVzZGF5cz1YLGUudXRjV2VkbmVzZGF5PVYsZS51dGNXZWRuZXNkYXlzPUosZS51dGNXZWVrPUgsZS51dGNXZWVrcz1aLGUudXRjWWVhcj1yZSxlLnV0Y1llYXJzPW5lLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE2OltmdW5jdGlvbihlLHQscil7YXJndW1lbnRzWzRdWzE1XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTV9XSwxNzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJpcy1zdHJpbmctYmxhbmsiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIGU7aWYoInN0cmluZyI9PT10KXt2YXIgcj1lO2lmKDA9PT0oZT0rZSkmJm4ocikpcmV0dXJuITF9ZWxzZSBpZigibnVtYmVyIiE9PXQpcmV0dXJuITE7cmV0dXJuIGUtZTwxfX0seyJpcy1zdHJpbmctYmxhbmsiOjUyfV0sMTg6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzBdLG49dFsxXSxhPXRbMl0saT10WzNdLG89dFs0XSxsPXRbNV0scz10WzZdLGM9dFs3XSx1PXRbOF0sZD10WzldLGY9dFsxMF0scD10WzExXSxoPXRbMTJdLGc9dFsxM10sbT10WzE0XSx2PXRbMTVdO3JldHVybiBlWzBdPWwqKGYqdi1wKm0pLWQqKHMqdi1jKm0pK2cqKHMqcC1jKmYpLGVbMV09LShuKihmKnYtcCptKS1kKihhKnYtaSptKStnKihhKnAtaSpmKSksZVsyXT1uKihzKnYtYyptKS1sKihhKnYtaSptKStnKihhKmMtaSpzKSxlWzNdPS0obioocypwLWMqZiktbCooYSpwLWkqZikrZCooYSpjLWkqcykpLGVbNF09LShvKihmKnYtcCptKS11KihzKnYtYyptKStoKihzKnAtYypmKSksZVs1XT1yKihmKnYtcCptKS11KihhKnYtaSptKStoKihhKnAtaSpmKSxlWzZdPS0ocioocyp2LWMqbSktbyooYSp2LWkqbSkraCooYSpjLWkqcykpLGVbN109cioocypwLWMqZiktbyooYSpwLWkqZikrdSooYSpjLWkqcyksZVs4XT1vKihkKnYtcCpnKS11KihsKnYtYypnKStoKihsKnAtYypkKSxlWzldPS0ociooZCp2LXAqZyktdSoobip2LWkqZykraCoobipwLWkqZCkpLGVbMTBdPXIqKGwqdi1jKmcpLW8qKG4qdi1pKmcpK2gqKG4qYy1pKmwpLGVbMTFdPS0ocioobCpwLWMqZCktbyoobipwLWkqZCkrdSoobipjLWkqbCkpLGVbMTJdPS0obyooZCptLWYqZyktdSoobCptLXMqZykraCoobCpmLXMqZCkpLGVbMTNdPXIqKGQqbS1mKmcpLXUqKG4qbS1hKmcpK2gqKG4qZi1hKmQpLGVbMTRdPS0ocioobCptLXMqZyktbyoobiptLWEqZykraCoobipzLWEqbCkpLGVbMTVdPXIqKGwqZi1zKmQpLW8qKG4qZi1hKmQpK3UqKG4qcy1hKmwpLGV9fSx7fV0sMTk6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fX0se31dLDIwOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlfX0se31dLDIxOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIGVbMF09MSxlWzFdPTAsZVsyXT0wLGVbM109MCxlWzRdPTAsZVs1XT0xLGVbNl09MCxlWzddPTAsZVs4XT0wLGVbOV09MCxlWzEwXT0xLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSxlfX0se31dLDIyOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0scj1lWzFdLG49ZVsyXSxhPWVbM10saT1lWzRdLG89ZVs1XSxsPWVbNl0scz1lWzddLGM9ZVs4XSx1PWVbOV0sZD1lWzEwXSxmPWVbMTFdLHA9ZVsxMl0saD1lWzEzXSxnPWVbMTRdLG09ZVsxNV07cmV0dXJuKHQqby1yKmkpKihkKm0tZipnKS0odCpsLW4qaSkqKHUqbS1mKmgpKyh0KnMtYSppKSoodSpnLWQqaCkrKHIqbC1uKm8pKihjKm0tZipwKS0ocipzLWEqbykqKGMqZy1kKnApKyhuKnMtYSpsKSooYypoLXUqcCl9fSx7fV0sMjM6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzBdLG49dFsxXSxhPXRbMl0saT10WzNdLG89cityLGw9bituLHM9YSthLGM9cipvLHU9bipvLGQ9bipsLGY9YSpvLHA9YSpsLGg9YSpzLGc9aSpvLG09aSpsLHY9aSpzO3JldHVybiBlWzBdPTEtZC1oLGVbMV09dSt2LGVbMl09Zi1tLGVbM109MCxlWzRdPXUtdixlWzVdPTEtYy1oLGVbNl09cCtnLGVbN109MCxlWzhdPWYrbSxlWzldPXAtZyxlWzEwXT0xLWMtZCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsZX19LHt9XSwyNDpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpLG89clswXSxsPXJbMV0scz1yWzJdLGM9TWF0aC5zcXJ0KG8qbytsKmwrcypzKTtpZihNYXRoLmFicyhjKTwxZS02KXJldHVybiBudWxsO3JldHVybiBvKj1jPTEvYyxsKj1jLHMqPWMsbj1NYXRoLnNpbih0KSxhPU1hdGguY29zKHQpLGk9MS1hLGVbMF09bypvKmkrYSxlWzFdPWwqbyppK3MqbixlWzJdPXMqbyppLWwqbixlWzNdPTAsZVs0XT1vKmwqaS1zKm4sZVs1XT1sKmwqaSthLGVbNl09cypsKmkrbypuLGVbN109MCxlWzhdPW8qcyppK2wqbixlWzldPWwqcyppLW8qbixlWzEwXT1zKnMqaSthLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSxlfX0se31dLDI1OltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10WzBdLGE9dFsxXSxpPXRbMl0sbz10WzNdLGw9bituLHM9YSthLGM9aStpLHU9bipsLGQ9bipzLGY9bipjLHA9YSpzLGg9YSpjLGc9aSpjLG09bypsLHY9bypzLHk9bypjO3JldHVybiBlWzBdPTEtKHArZyksZVsxXT1kK3ksZVsyXT1mLXYsZVszXT0wLGVbNF09ZC15LGVbNV09MS0odStnKSxlWzZdPWgrbSxlWzddPTAsZVs4XT1mK3YsZVs5XT1oLW0sZVsxMF09MS0odStwKSxlWzExXT0wLGVbMTJdPXJbMF0sZVsxM109clsxXSxlWzE0XT1yWzJdLGVbMTVdPTEsZX19LHt9XSwyNjpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBlWzBdPXRbMF0sZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT0wLGVbNV09dFsxXSxlWzZdPTAsZVs3XT0wLGVbOF09MCxlWzldPTAsZVsxMF09dFsyXSxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsZX19LHt9XSwyNzpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBlWzBdPTEsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT0wLGVbNV09MSxlWzZdPTAsZVs3XT0wLGVbOF09MCxlWzldPTAsZVsxMF09MSxlWzExXT0wLGVbMTJdPXRbMF0sZVsxM109dFsxXSxlWzE0XT10WzJdLGVbMTVdPTEsZX19LHt9XSwyODpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc2luKHQpLG49TWF0aC5jb3ModCk7cmV0dXJuIGVbMF09MSxlWzFdPTAsZVsyXT0wLGVbM109MCxlWzRdPTAsZVs1XT1uLGVbNl09cixlWzddPTAsZVs4XT0wLGVbOV09LXIsZVsxMF09bixlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsZX19LHt9XSwyOTpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc2luKHQpLG49TWF0aC5jb3ModCk7cmV0dXJuIGVbMF09bixlWzFdPTAsZVsyXT0tcixlWzNdPTAsZVs0XT0wLGVbNV09MSxlWzZdPTAsZVs3XT0wLGVbOF09cixlWzldPTAsZVsxMF09bixlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsZX19LHt9XSwzMDpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc2luKHQpLG49TWF0aC5jb3ModCk7cmV0dXJuIGVbMF09bixlWzFdPXIsZVsyXT0wLGVbM109MCxlWzRdPS1yLGVbNV09bixlWzZdPTAsZVs3XT0wLGVbOF09MCxlWzldPTAsZVsxMF09MSxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsZX19LHt9XSwzMTpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixuLGEsaSxvKXt2YXIgbD0xLyhyLXQpLHM9MS8oYS1uKSxjPTEvKGktbyk7cmV0dXJuIGVbMF09MippKmwsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT0wLGVbNV09MippKnMsZVs2XT0wLGVbN109MCxlWzhdPShyK3QpKmwsZVs5XT0oYStuKSpzLGVbMTBdPShvK2kpKmMsZVsxMV09LTEsZVsxMl09MCxlWzEzXT0wLGVbMTRdPW8qaSoyKmMsZVsxNV09MCxlfX0se31dLDMyOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPTEsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT0wLGVbNV09MSxlWzZdPTAsZVs3XT0wLGVbOF09MCxlWzldPTAsZVsxMF09MSxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsZX19LHt9XSwzMzpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz17Y3JlYXRlOmUoIi4vY3JlYXRlIiksY2xvbmU6ZSgiLi9jbG9uZSIpLGNvcHk6ZSgiLi9jb3B5IiksaWRlbnRpdHk6ZSgiLi9pZGVudGl0eSIpLHRyYW5zcG9zZTplKCIuL3RyYW5zcG9zZSIpLGludmVydDplKCIuL2ludmVydCIpLGFkam9pbnQ6ZSgiLi9hZGpvaW50IiksZGV0ZXJtaW5hbnQ6ZSgiLi9kZXRlcm1pbmFudCIpLG11bHRpcGx5OmUoIi4vbXVsdGlwbHkiKSx0cmFuc2xhdGU6ZSgiLi90cmFuc2xhdGUiKSxzY2FsZTplKCIuL3NjYWxlIikscm90YXRlOmUoIi4vcm90YXRlIikscm90YXRlWDplKCIuL3JvdGF0ZVgiKSxyb3RhdGVZOmUoIi4vcm90YXRlWSIpLHJvdGF0ZVo6ZSgiLi9yb3RhdGVaIiksZnJvbVJvdGF0aW9uOmUoIi4vZnJvbVJvdGF0aW9uIiksZnJvbVJvdGF0aW9uVHJhbnNsYXRpb246ZSgiLi9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiIpLGZyb21TY2FsaW5nOmUoIi4vZnJvbVNjYWxpbmciKSxmcm9tVHJhbnNsYXRpb246ZSgiLi9mcm9tVHJhbnNsYXRpb24iKSxmcm9tWFJvdGF0aW9uOmUoIi4vZnJvbVhSb3RhdGlvbiIpLGZyb21ZUm90YXRpb246ZSgiLi9mcm9tWVJvdGF0aW9uIiksZnJvbVpSb3RhdGlvbjplKCIuL2Zyb21aUm90YXRpb24iKSxmcm9tUXVhdDplKCIuL2Zyb21RdWF0IiksZnJ1c3R1bTplKCIuL2ZydXN0dW0iKSxwZXJzcGVjdGl2ZTplKCIuL3BlcnNwZWN0aXZlIikscGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXc6ZSgiLi9wZXJzcGVjdGl2ZUZyb21GaWVsZE9mVmlldyIpLG9ydGhvOmUoIi4vb3J0aG8iKSxsb29rQXQ6ZSgiLi9sb29rQXQiKSxzdHI6ZSgiLi9zdHIiKX19LHsiLi9hZGpvaW50IjoxOCwiLi9jbG9uZSI6MTksIi4vY29weSI6MjAsIi4vY3JlYXRlIjoyMSwiLi9kZXRlcm1pbmFudCI6MjIsIi4vZnJvbVF1YXQiOjIzLCIuL2Zyb21Sb3RhdGlvbiI6MjQsIi4vZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iOjI1LCIuL2Zyb21TY2FsaW5nIjoyNiwiLi9mcm9tVHJhbnNsYXRpb24iOjI3LCIuL2Zyb21YUm90YXRpb24iOjI4LCIuL2Zyb21ZUm90YXRpb24iOjI5LCIuL2Zyb21aUm90YXRpb24iOjMwLCIuL2ZydXN0dW0iOjMxLCIuL2lkZW50aXR5IjozMiwiLi9pbnZlcnQiOjM0LCIuL2xvb2tBdCI6MzUsIi4vbXVsdGlwbHkiOjM2LCIuL29ydGhvIjozNywiLi9wZXJzcGVjdGl2ZSI6MzgsIi4vcGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXciOjM5LCIuL3JvdGF0ZSI6NDAsIi4vcm90YXRlWCI6NDEsIi4vcm90YXRlWSI6NDIsIi4vcm90YXRlWiI6NDMsIi4vc2NhbGUiOjQ0LCIuL3N0ciI6NDUsIi4vdHJhbnNsYXRlIjo0NiwiLi90cmFuc3Bvc2UiOjQ3fV0sMzQ6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzBdLG49dFsxXSxhPXRbMl0saT10WzNdLG89dFs0XSxsPXRbNV0scz10WzZdLGM9dFs3XSx1PXRbOF0sZD10WzldLGY9dFsxMF0scD10WzExXSxoPXRbMTJdLGc9dFsxM10sbT10WzE0XSx2PXRbMTVdLHk9cipsLW4qbyx4PXIqcy1hKm8sYj1yKmMtaSpvLF89bipzLWEqbCx3PW4qYy1pKmwsVD1hKmMtaSpzLE09dSpnLWQqaCxrPXUqbS1mKmgsQT11KnYtcCpoLEw9ZCptLWYqZyxTPWQqdi1wKmcsRD1mKnYtcCptLEM9eSpELXgqUytiKkwrXypBLXcqaytUKk07aWYoIUMpcmV0dXJuIG51bGw7cmV0dXJuIEM9MS9DLGVbMF09KGwqRC1zKlMrYypMKSpDLGVbMV09KGEqUy1uKkQtaSpMKSpDLGVbMl09KGcqVC1tKncrdipfKSpDLGVbM109KGYqdy1kKlQtcCpfKSpDLGVbNF09KHMqQS1vKkQtYyprKSpDLGVbNV09KHIqRC1hKkEraSprKSpDLGVbNl09KG0qYi1oKlQtdip4KSpDLGVbN109KHUqVC1mKmIrcCp4KSpDLGVbOF09KG8qUy1sKkErYypNKSpDLGVbOV09KG4qQS1yKlMtaSpNKSpDLGVbMTBdPShoKnctZypiK3YqeSkqQyxlWzExXT0oZCpiLXUqdy1wKnkpKkMsZVsxMl09KGwqay1vKkwtcypNKSpDLGVbMTNdPShyKkwtbiprK2EqTSkqQyxlWzE0XT0oZyp4LWgqXy1tKnkpKkMsZVsxNV09KHUqXy1kKngrZip5KSpDLGV9fSx7fV0sMzU6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKCIuL2lkZW50aXR5Iik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBpLG8sbCxzLGMsdSxkLGYscCxoLGc9dFswXSxtPXRbMV0sdj10WzJdLHk9YVswXSx4PWFbMV0sYj1hWzJdLF89clswXSx3PXJbMV0sVD1yWzJdO2lmKE1hdGguYWJzKGctXyk8MWUtNiYmTWF0aC5hYnMobS13KTwxZS02JiZNYXRoLmFicyh2LVQpPDFlLTYpcmV0dXJuIG4oZSk7ZD1nLV8sZj1tLXcscD12LVQsaD0xL01hdGguc3FydChkKmQrZipmK3AqcCksaT14KihwKj1oKS1iKihmKj1oKSxvPWIqKGQqPWgpLXkqcCxsPXkqZi14KmQsKGg9TWF0aC5zcXJ0KGkqaStvKm8rbCpsKSk/KGkqPWg9MS9oLG8qPWgsbCo9aCk6KGk9MCxvPTAsbD0wKTtzPWYqbC1wKm8sYz1wKmktZCpsLHU9ZCpvLWYqaSwoaD1NYXRoLnNxcnQocypzK2MqYyt1KnUpKT8ocyo9aD0xL2gsYyo9aCx1Kj1oKToocz0wLGM9MCx1PTApO3JldHVybiBlWzBdPWksZVsxXT1zLGVbMl09ZCxlWzNdPTAsZVs0XT1vLGVbNV09YyxlWzZdPWYsZVs3XT0wLGVbOF09bCxlWzldPXUsZVsxMF09cCxlWzExXT0wLGVbMTJdPS0oaSpnK28qbStsKnYpLGVbMTNdPS0ocypnK2MqbSt1KnYpLGVbMTRdPS0oZCpnK2YqbStwKnYpLGVbMTVdPTEsZX19LHsiLi9pZGVudGl0eSI6MzJ9XSwzNjpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIG49dFswXSxhPXRbMV0saT10WzJdLG89dFszXSxsPXRbNF0scz10WzVdLGM9dFs2XSx1PXRbN10sZD10WzhdLGY9dFs5XSxwPXRbMTBdLGg9dFsxMV0sZz10WzEyXSxtPXRbMTNdLHY9dFsxNF0seT10WzE1XSx4PXJbMF0sYj1yWzFdLF89clsyXSx3PXJbM107cmV0dXJuIGVbMF09eCpuK2IqbCtfKmQrdypnLGVbMV09eCphK2IqcytfKmYrdyptLGVbMl09eCppK2IqYytfKnArdyp2LGVbM109eCpvK2IqdStfKmgrdyp5LHg9cls0XSxiPXJbNV0sXz1yWzZdLHc9cls3XSxlWzRdPXgqbitiKmwrXypkK3cqZyxlWzVdPXgqYStiKnMrXypmK3cqbSxlWzZdPXgqaStiKmMrXypwK3cqdixlWzddPXgqbytiKnUrXypoK3cqeSx4PXJbOF0sYj1yWzldLF89clsxMF0sdz1yWzExXSxlWzhdPXgqbitiKmwrXypkK3cqZyxlWzldPXgqYStiKnMrXypmK3cqbSxlWzEwXT14KmkrYipjK18qcCt3KnYsZVsxMV09eCpvK2IqdStfKmgrdyp5LHg9clsxMl0sYj1yWzEzXSxfPXJbMTRdLHc9clsxNV0sZVsxMl09eCpuK2IqbCtfKmQrdypnLGVbMTNdPXgqYStiKnMrXypmK3cqbSxlWzE0XT14KmkrYipjK18qcCt3KnYsZVsxNV09eCpvK2IqdStfKmgrdyp5LGV9fSx7fV0sMzc6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7dmFyIGw9MS8odC1yKSxzPTEvKG4tYSksYz0xLyhpLW8pO3JldHVybiBlWzBdPS0yKmwsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT0wLGVbNV09LTIqcyxlWzZdPTAsZVs3XT0wLGVbOF09MCxlWzldPTAsZVsxMF09MipjLGVbMTFdPTAsZVsxMl09KHQrcikqbCxlWzEzXT0oYStuKSpzLGVbMTRdPShvK2kpKmMsZVsxNV09MSxlfX0se31dLDM4OltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9MS9NYXRoLnRhbih0LzIpLG89MS8obi1hKTtyZXR1cm4gZVswXT1pL3IsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT0wLGVbNV09aSxlWzZdPTAsZVs3XT0wLGVbOF09MCxlWzldPTAsZVsxMF09KGErbikqbyxlWzExXT0tMSxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MiphKm4qbyxlWzE1XT0wLGV9fSx7fV0sMzk6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9TWF0aC50YW4odC51cERlZ3JlZXMqTWF0aC5QSS8xODApLGk9TWF0aC50YW4odC5kb3duRGVncmVlcypNYXRoLlBJLzE4MCksbz1NYXRoLnRhbih0LmxlZnREZWdyZWVzKk1hdGguUEkvMTgwKSxsPU1hdGgudGFuKHQucmlnaHREZWdyZWVzKk1hdGguUEkvMTgwKSxzPTIvKG8rbCksYz0yLyhhK2kpO3JldHVybiBlWzBdPXMsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT0wLGVbNV09YyxlWzZdPTAsZVs3XT0wLGVbOF09LShvLWwpKnMqLjUsZVs5XT0oYS1pKSpjKi41LGVbMTBdPW4vKHItbiksZVsxMV09LTEsZVsxMl09MCxlWzEzXT0wLGVbMTRdPW4qci8oci1uKSxlWzE1XT0wLGV9fSx7fV0sNDA6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaSxvLGwscyxjLHUsZCxmLHAsaCxnLG0sdix5LHgsYixfLHcsVCxNLGssQSxMLFM9blswXSxEPW5bMV0sQz1uWzJdLE89TWF0aC5zcXJ0KFMqUytEKkQrQypDKTtpZihNYXRoLmFicyhPKTwxZS02KXJldHVybiBudWxsO1MqPU89MS9PLEQqPU8sQyo9TyxhPU1hdGguc2luKHIpLGk9TWF0aC5jb3Mociksbz0xLWksbD10WzBdLHM9dFsxXSxjPXRbMl0sdT10WzNdLGQ9dFs0XSxmPXRbNV0scD10WzZdLGg9dFs3XSxnPXRbOF0sbT10WzldLHY9dFsxMF0seT10WzExXSx4PVMqUypvK2ksYj1EKlMqbytDKmEsXz1DKlMqby1EKmEsdz1TKkQqby1DKmEsVD1EKkQqbytpLE09QypEKm8rUyphLGs9UypDKm8rRCphLEE9RCpDKm8tUyphLEw9QypDKm8raSxlWzBdPWwqeCtkKmIrZypfLGVbMV09cyp4K2YqYittKl8sZVsyXT1jKngrcCpiK3YqXyxlWzNdPXUqeCtoKmIreSpfLGVbNF09bCp3K2QqVCtnKk0sZVs1XT1zKncrZipUK20qTSxlWzZdPWMqdytwKlQrdipNLGVbN109dSp3K2gqVCt5Kk0sZVs4XT1sKmsrZCpBK2cqTCxlWzldPXMqaytmKkErbSpMLGVbMTBdPWMqaytwKkErdipMLGVbMTFdPXUqaytoKkEreSpMLHQhPT1lJiYoZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0pO3JldHVybiBlfX0se31dLDQxOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1NYXRoLnNpbihyKSxhPU1hdGguY29zKHIpLGk9dFs0XSxvPXRbNV0sbD10WzZdLHM9dFs3XSxjPXRbOF0sdT10WzldLGQ9dFsxMF0sZj10WzExXTt0IT09ZSYmKGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSk7cmV0dXJuIGVbNF09aSphK2MqbixlWzVdPW8qYSt1Km4sZVs2XT1sKmErZCpuLGVbN109cyphK2YqbixlWzhdPWMqYS1pKm4sZVs5XT11KmEtbypuLGVbMTBdPWQqYS1sKm4sZVsxMV09ZiphLXMqbixlfX0se31dLDQyOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1NYXRoLnNpbihyKSxhPU1hdGguY29zKHIpLGk9dFswXSxvPXRbMV0sbD10WzJdLHM9dFszXSxjPXRbOF0sdT10WzldLGQ9dFsxMF0sZj10WzExXTt0IT09ZSYmKGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSk7cmV0dXJuIGVbMF09aSphLWMqbixlWzFdPW8qYS11Km4sZVsyXT1sKmEtZCpuLGVbM109cyphLWYqbixlWzhdPWkqbitjKmEsZVs5XT1vKm4rdSphLGVbMTBdPWwqbitkKmEsZVsxMV09cypuK2YqYSxlfX0se31dLDQzOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1NYXRoLnNpbihyKSxhPU1hdGguY29zKHIpLGk9dFswXSxvPXRbMV0sbD10WzJdLHM9dFszXSxjPXRbNF0sdT10WzVdLGQ9dFs2XSxmPXRbN107dCE9PWUmJihlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdKTtyZXR1cm4gZVswXT1pKmErYypuLGVbMV09byphK3UqbixlWzJdPWwqYStkKm4sZVszXT1zKmErZipuLGVbNF09YyphLWkqbixlWzVdPXUqYS1vKm4sZVs2XT1kKmEtbCpuLGVbN109ZiphLXMqbixlfX0se31dLDQ0OltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yWzBdLGE9clsxXSxpPXJbMl07cmV0dXJuIGVbMF09dFswXSpuLGVbMV09dFsxXSpuLGVbMl09dFsyXSpuLGVbM109dFszXSpuLGVbNF09dFs0XSphLGVbNV09dFs1XSphLGVbNl09dFs2XSphLGVbN109dFs3XSphLGVbOF09dFs4XSppLGVbOV09dFs5XSppLGVbMTBdPXRbMTBdKmksZVsxMV09dFsxMV0qaSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlfX0se31dLDQ1OltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJtYXQ0KCIrZVswXSsiLCAiK2VbMV0rIiwgIitlWzJdKyIsICIrZVszXSsiLCAiK2VbNF0rIiwgIitlWzVdKyIsICIrZVs2XSsiLCAiK2VbN10rIiwgIitlWzhdKyIsICIrZVs5XSsiLCAiK2VbMTBdKyIsICIrZVsxMV0rIiwgIitlWzEyXSsiLCAiK2VbMTNdKyIsICIrZVsxNF0rIiwgIitlWzE1XSsiKSJ9fSx7fV0sNDY6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvLGwscyxjLHUsZCxmLHAsaCxnPXJbMF0sbT1yWzFdLHY9clsyXTt0PT09ZT8oZVsxMl09dFswXSpnK3RbNF0qbSt0WzhdKnYrdFsxMl0sZVsxM109dFsxXSpnK3RbNV0qbSt0WzldKnYrdFsxM10sZVsxNF09dFsyXSpnK3RbNl0qbSt0WzEwXSp2K3RbMTRdLGVbMTVdPXRbM10qZyt0WzddKm0rdFsxMV0qdit0WzE1XSk6KG49dFswXSxhPXRbMV0saT10WzJdLG89dFszXSxsPXRbNF0scz10WzVdLGM9dFs2XSx1PXRbN10sZD10WzhdLGY9dFs5XSxwPXRbMTBdLGg9dFsxMV0sZVswXT1uLGVbMV09YSxlWzJdPWksZVszXT1vLGVbNF09bCxlWzVdPXMsZVs2XT1jLGVbN109dSxlWzhdPWQsZVs5XT1mLGVbMTBdPXAsZVsxMV09aCxlWzEyXT1uKmcrbCptK2Qqdit0WzEyXSxlWzEzXT1hKmcrcyptK2Yqdit0WzEzXSxlWzE0XT1pKmcrYyptK3Aqdit0WzE0XSxlWzE1XT1vKmcrdSptK2gqdit0WzE1XSk7cmV0dXJuIGV9fSx7fV0sNDc6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPT09dCl7dmFyIHI9dFsxXSxuPXRbMl0sYT10WzNdLGk9dFs2XSxvPXRbN10sbD10WzExXTtlWzFdPXRbNF0sZVsyXT10WzhdLGVbM109dFsxMl0sZVs0XT1yLGVbNl09dFs5XSxlWzddPXRbMTNdLGVbOF09bixlWzldPWksZVsxMV09dFsxNF0sZVsxMl09YSxlWzEzXT1vLGVbMTRdPWx9ZWxzZSBlWzBdPXRbMF0sZVsxXT10WzRdLGVbMl09dFs4XSxlWzNdPXRbMTJdLGVbNF09dFsxXSxlWzVdPXRbNV0sZVs2XT10WzldLGVbN109dFsxM10sZVs4XT10WzJdLGVbOV09dFs2XSxlWzEwXT10WzEwXSxlWzExXT10WzE0XSxlWzEyXT10WzNdLGVbMTNdPXRbN10sZVsxNF09dFsxMV0sZVsxNV09dFsxNV07cmV0dXJuIGV9fSx7fV0sNDg6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuLGE9ZSgiaXMtYnJvd3NlciIpO249ImZ1bmN0aW9uIj09dHlwZW9mIHIubWF0Y2hNZWRpYT8hci5tYXRjaE1lZGlhKCIoaG92ZXI6IG5vbmUpIikubWF0Y2hlczphLHQuZXhwb3J0cz1ufSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJpcy1icm93c2VyIjo1MH1dLDQ5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImlzLWJyb3dzZXIiKTt0LmV4cG9ydHM9biYmZnVuY3Rpb24oKXt2YXIgZT0hMTt0cnl7dmFyIHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7ZT0hMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCx0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCx0KX1jYXRjaCh0KXtlPSExfXJldHVybiBlfSgpfSx7ImlzLWJyb3dzZXIiOjUwfV0sNTA6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ITB9LHt9XSw1MTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9aSx0LmV4cG9ydHMuaXNNb2JpbGU9aSx0LmV4cG9ydHMuZGVmYXVsdD1pO3ZhciBuPS8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllc1s0Nl0wfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm8vaSxhPS8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllc1s0Nl0wfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm98YW5kcm9pZHxpcGFkfHBsYXlib29rfHNpbGsvaTtmdW5jdGlvbiBpKGUpe2V8fChlPXt9KTt2YXIgdD1lLnVhO2lmKHR8fCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwodD1uYXZpZ2F0b3IudXNlckFnZW50KSx0JiZ0LmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgdC5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJih0PXQuaGVhZGVyc1sidXNlci1hZ2VudCJdKSwic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuITE7dmFyIHI9ZS50YWJsZXQ/YS50ZXN0KHQpOm4udGVzdCh0KTtyZXR1cm4hciYmZS50YWJsZXQmJmUuZmVhdHVyZURldGVjdCYmbmF2aWdhdG9yJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MSYmLTEhPT10LmluZGV4T2YoIk1hY2ludG9zaCIpJiYtMSE9PXQuaW5kZXhPZigiU2FmYXJpIikmJihyPSEwKSxyfX0se31dLDUyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lLmxlbmd0aCxuPTA7bjxyO24rKylpZigoKHQ9ZS5jaGFyQ29kZUF0KG4pKTw5fHx0PjEzKSYmMzIhPT10JiYxMzMhPT10JiYxNjAhPT10JiY1NzYwIT09dCYmNjE1OCE9PXQmJih0PDgxOTJ8fHQ+ODIwNSkmJjgyMzIhPT10JiY4MjMzIT09dCYmODIzOSE9PXQmJjgyODchPT10JiY4Mjg4IT09dCYmMTIyODghPT10JiY2NTI3OSE9PXQpcmV0dXJuITE7cmV0dXJuITB9fSx7fV0sNTM6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj17bGVmdDowLHRvcDowfTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3Q9dHx8ZS5jdXJyZW50VGFyZ2V0fHxlLnNyY0VsZW1lbnQsQXJyYXkuaXNBcnJheShyKXx8KHI9WzAsMF0pO3ZhciBhPWUuY2xpZW50WHx8MCxpPWUuY2xpZW50WXx8MCxvPShsPXQsbD09PXdpbmRvd3x8bD09PWRvY3VtZW50fHxsPT09ZG9jdW1lbnQuYm9keT9uOmwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO3ZhciBsO3JldHVybiByWzBdPWEtby5sZWZ0LHJbMV09aS1vLnRvcCxyfX0se31dLDU0OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKGUscil7KGZ1bmN0aW9uKCl7Ci8qISBOYXRpdmUgUHJvbWlzZSBPbmx5CiAgICB2MC44LjEgKGMpIEt5bGUgU2ltcHNvbgogICAgTUlUIExpY2Vuc2U6IGh0dHA6Ly9nZXRpZnkubWl0LWxpY2Vuc2Uub3JnCiovCnZhciBuLGEsaTtpPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlLHQsbixhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT12b2lkIDAhPT1yP2Z1bmN0aW9uKGUpe3JldHVybiByKGUpfTpzZXRUaW1lb3V0O3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KSxlPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSE9PW59KX19Y2F0Y2godCl7ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cixlfX1mdW5jdGlvbiBvKGUscil7bi5hZGQoZSxyKSx0fHwodD1pKG4uZHJhaW4pKX1mdW5jdGlvbiBsKGUpe3ZhciB0LHI9dHlwZW9mIGU7cmV0dXJuIG51bGw9PWV8fCJvYmplY3QiIT1yJiYiZnVuY3Rpb24iIT1yfHwodD1lLnRoZW4pLCJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0fWZ1bmN0aW9uIHMoKXtmb3IodmFyIGU9MDtlPHRoaXMuY2hhaW4ubGVuZ3RoO2UrKyljKHRoaXMsMT09PXRoaXMuc3RhdGU/dGhpcy5jaGFpbltlXS5zdWNjZXNzOnRoaXMuY2hhaW5bZV0uZmFpbHVyZSx0aGlzLmNoYWluW2VdKTt0aGlzLmNoYWluLmxlbmd0aD0wfWZ1bmN0aW9uIGMoZSx0LHIpe3ZhciBuLGE7dHJ5eyExPT09dD9yLnJlamVjdChlLm1zZyk6KG49ITA9PT10P2UubXNnOnQuY2FsbCh2b2lkIDAsZS5tc2cpKT09PXIucHJvbWlzZT9yLnJlamVjdChUeXBlRXJyb3IoIlByb21pc2UtY2hhaW4gY3ljbGUiKSk6KGE9bChuKSk/YS5jYWxsKG4sci5yZXNvbHZlLHIucmVqZWN0KTpyLnJlc29sdmUobil9Y2F0Y2goZSl7ci5yZWplY3QoZSl9fWZ1bmN0aW9uIHUoZSl7dmFyIHQscj10aGlzO2lmKCFyLnRyaWdnZXJlZCl7ci50cmlnZ2VyZWQ9ITAsci5kZWYmJihyPXIuZGVmKTt0cnl7KHQ9bChlKSk/bygoZnVuY3Rpb24oKXt2YXIgbj1uZXcgcChyKTt0cnl7dC5jYWxsKGUsKGZ1bmN0aW9uKCl7dS5hcHBseShuLGFyZ3VtZW50cyl9KSwoZnVuY3Rpb24oKXtkLmFwcGx5KG4sYXJndW1lbnRzKX0pKX1jYXRjaChlKXtkLmNhbGwobixlKX19KSk6KHIubXNnPWUsci5zdGF0ZT0xLHIuY2hhaW4ubGVuZ3RoPjAmJm8ocyxyKSl9Y2F0Y2goZSl7ZC5jYWxsKG5ldyBwKHIpLGUpfX19ZnVuY3Rpb24gZChlKXt2YXIgdD10aGlzO3QudHJpZ2dlcmVkfHwodC50cmlnZ2VyZWQ9ITAsdC5kZWYmJih0PXQuZGVmKSx0Lm1zZz1lLHQuc3RhdGU9Mix0LmNoYWluLmxlbmd0aD4wJiZvKHMsdCkpfWZ1bmN0aW9uIGYoZSx0LHIsbil7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspIWZ1bmN0aW9uKGEpe2UucmVzb2x2ZSh0W2FdKS50aGVuKChmdW5jdGlvbihlKXtyKGEsZSl9KSxuKX0oYSl9ZnVuY3Rpb24gcChlKXt0aGlzLmRlZj1lLHRoaXMudHJpZ2dlcmVkPSExfWZ1bmN0aW9uIGgoZSl7dGhpcy5wcm9taXNlPWUsdGhpcy5zdGF0ZT0wLHRoaXMudHJpZ2dlcmVkPSExLHRoaXMuY2hhaW49W10sdGhpcy5tc2c9dm9pZCAwfWZ1bmN0aW9uIGcoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBmdW5jdGlvbiIpO2lmKDAhPT10aGlzLl9fTlBPX18pdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBwcm9taXNlIik7dGhpcy5fX05QT19fPTE7dmFyIHQ9bmV3IGgodGhpcyk7dGhpcy50aGVuPWZ1bmN0aW9uKGUscil7dmFyIG49e3N1Y2Nlc3M6ImZ1bmN0aW9uIiE9dHlwZW9mIGV8fGUsZmFpbHVyZToiZnVuY3Rpb24iPT10eXBlb2YgciYmcn07cmV0dXJuIG4ucHJvbWlzZT1uZXcgdGhpcy5jb25zdHJ1Y3RvcigoZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBmdW5jdGlvbiIpO24ucmVzb2x2ZT1lLG4ucmVqZWN0PXR9KSksdC5jaGFpbi5wdXNoKG4pLDAhPT10LnN0YXRlJiZvKHMsdCksbi5wcm9taXNlfSx0aGlzLmNhdGNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLGUpfTt0cnl7ZS5jYWxsKHZvaWQgMCwoZnVuY3Rpb24oZSl7dS5jYWxsKHQsZSl9KSwoZnVuY3Rpb24oZSl7ZC5jYWxsKHQsZSl9KSl9Y2F0Y2goZSl7ZC5jYWxsKHQsZSl9fW49ZnVuY3Rpb24oKXt2YXIgZSxyLG47ZnVuY3Rpb24gYShlLHQpe3RoaXMuZm49ZSx0aGlzLnNlbGY9dCx0aGlzLm5leHQ9dm9pZCAwfXJldHVybnthZGQ6ZnVuY3Rpb24odCxpKXtuPW5ldyBhKHQsaSkscj9yLm5leHQ9bjplPW4scj1uLG49dm9pZCAwfSxkcmFpbjpmdW5jdGlvbigpe3ZhciBuPWU7Zm9yKGU9cj10PXZvaWQgMDtuOyluLmZuLmNhbGwobi5zZWxmKSxuPW4ubmV4dH19fSgpO3ZhciBtPWUoe30sImNvbnN0cnVjdG9yIixnLCExKTtyZXR1cm4gZy5wcm90b3R5cGU9bSxlKG0sIl9fTlBPX18iLDAsITEpLGUoZywicmVzb2x2ZSIsKGZ1bmN0aW9uKGUpe3JldHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGUmJjE9PT1lLl9fTlBPX18/ZTpuZXcgdGhpcygoZnVuY3Rpb24odCxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBmdW5jdGlvbiIpO3QoZSl9KSl9KSksZShnLCJyZWplY3QiLChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHRoaXMoKGZ1bmN0aW9uKHQscil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fCJmdW5jdGlvbiIhPXR5cGVvZiByKXRocm93IFR5cGVFcnJvcigiTm90IGEgZnVuY3Rpb24iKTtyKGUpfSkpfSkpLGUoZywiYWxsIiwoZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4iW29iamVjdCBBcnJheV0iIT1hLmNhbGwoZSk/dC5yZWplY3QoVHlwZUVycm9yKCJOb3QgYW4gYXJyYXkiKSk6MD09PWUubGVuZ3RoP3QucmVzb2x2ZShbXSk6bmV3IHQoKGZ1bmN0aW9uKHIsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHJ8fCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IFR5cGVFcnJvcigiTm90IGEgZnVuY3Rpb24iKTt2YXIgYT1lLmxlbmd0aCxpPUFycmF5KGEpLG89MDtmKHQsZSwoZnVuY3Rpb24oZSx0KXtpW2VdPXQsKytvPT09YSYmcihpKX0pLG4pfSkpfSkpLGUoZywicmFjZSIsKGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIltvYmplY3QgQXJyYXldIiE9YS5jYWxsKGUpP3QucmVqZWN0KFR5cGVFcnJvcigiTm90IGFuIGFycmF5IikpOm5ldyB0KChmdW5jdGlvbihyLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiByfHwiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBUeXBlRXJyb3IoIk5vdCBhIGZ1bmN0aW9uIik7Zih0LGUsKGZ1bmN0aW9uKGUsdCl7cih0KX0pLG4pfSkpfSkpLGd9LChhPXZvaWQgMCE9PWU/ZTp0aGlzKVtuPSJQcm9taXNlIl09YVtuXXx8aSgpLHZvaWQgMCE9PXQmJnQuZXhwb3J0cyYmKHQuZXhwb3J0cz1hW25dKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxlKCJ0aW1lcnMiKS5zZXRJbW1lZGlhdGUpfSx7dGltZXJzOjY2fV0sNTU6W2Z1bmN0aW9uKGUsdCxyKXsKLyoKb2JqZWN0LWFzc2lnbgooYykgU2luZHJlIFNvcmh1cwpAbGljZW5zZSBNSVQKKi8KInVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGk9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtmdW5jdGlvbiBvKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gT2JqZWN0KGUpfXQuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgZT1uZXcgU3RyaW5nKCJhYmMiKTtpZihlWzVdPSJkZSIsIjUiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSlbMF0pcmV0dXJuITE7Zm9yKHZhciB0PXt9LHI9MDtyPDEwO3IrKyl0WyJfIitTdHJpbmcuZnJvbUNoYXJDb2RlKHIpXT1yO2lmKCIwMTIzNDU2Nzg5IiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSkuam9pbigiIikpcmV0dXJuITE7dmFyIG49e307cmV0dXJuImFiY2RlZmdoaWprbG1ub3BxcnN0Ii5zcGxpdCgiIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bltlXT1lfSkpLCJhYmNkZWZnaGlqa2xtbm9wcXJzdCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LG4pKS5qb2luKCIiKX1jYXRjaChlKXtyZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixsLHM9byhlKSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7Zm9yKHZhciB1IGluIHI9T2JqZWN0KGFyZ3VtZW50c1tjXSkpYS5jYWxsKHIsdSkmJihzW3VdPXJbdV0pO2lmKG4pe2w9bihyKTtmb3IodmFyIGQ9MDtkPGwubGVuZ3RoO2QrKylpLmNhbGwocixsW2RdKSYmKHNbbFtkXV09cltsW2RdXSl9fXJldHVybiBzfX0se31dLDU2OltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBlLnJlcGxhY2UoYSwoZnVuY3Rpb24oZSxyLGEpe3ZhciBvPXIudG9Mb3dlckNhc2UoKTtmb3IoYT1mdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKGkpO3JldHVybiB0P3QubWFwKE51bWJlcik6W119KGEpLCJtIj09byYmYS5sZW5ndGg+MiYmKHQucHVzaChbcl0uY29uY2F0KGEuc3BsaWNlKDAsMikpKSxvPSJsIixyPSJtIj09cj8ibCI6IkwiKTs7KXtpZihhLmxlbmd0aD09bltvXSlyZXR1cm4gYS51bnNoaWZ0KHIpLHQucHVzaChhKTtpZihhLmxlbmd0aDxuW29dKXRocm93IG5ldyBFcnJvcigibWFsZm9ybWVkIHBhdGggZGF0YSIpO3QucHVzaChbcl0uY29uY2F0KGEuc3BsaWNlKDAsbltvXSkpKX19KSksdH07dmFyIG49e2E6NyxjOjYsaDoxLGw6MixtOjIscTo0LHM6NCx0OjIsdjoxLHo6MH0sYT0vKFthc3R2enFtaGxjXSkoW15hc3R2enFtaGxjXSopL2dpO3ZhciBpPS8tP1swLTldKlwuP1swLTldKyg/OmVbLStdP1xkKyk/L2dpfSx7fV0sNTc6W2Z1bmN0aW9uKGUsdCxyKXsKLyoKICogQGNvcHlyaWdodCAyMDE2IFNlYW4gQ29ubmVsbHkgKEB2b2lkcWspLCBodHRwOi8vc3ludGhldGkuY2MKICogQGxpY2Vuc2UgTUlUCiAqIEBwcmVzZXJ2ZSBQcm9qZWN0IEhvbWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkcWsvcG9seWJvb2xqcwogKi8KdmFyIG4sYT1lKCIuL2xpYi9idWlsZC1sb2ciKSxpPWUoIi4vbGliL2Vwc2lsb24iKSxvPWUoIi4vbGliL2ludGVyc2VjdGVyIiksbD1lKCIuL2xpYi9zZWdtZW50LWNoYWluZXIiKSxzPWUoIi4vbGliL3NlZ21lbnQtc2VsZWN0b3IiKSxjPWUoIi4vbGliL2dlb2pzb24iKSx1PSExLGQ9aSgpO2Z1bmN0aW9uIGYoZSx0LHIpe3ZhciBhPW4uc2VnbWVudHMoZSksaT1uLnNlZ21lbnRzKHQpLG89cihuLmNvbWJpbmUoYSxpKSk7cmV0dXJuIG4ucG9seWdvbihvKX1uPXtidWlsZExvZzpmdW5jdGlvbihlKXtyZXR1cm4hMD09PWU/dT1hKCk6ITE9PT1lJiYodT0hMSksITEhPT11JiZ1Lmxpc3R9LGVwc2lsb246ZnVuY3Rpb24oZSl7cmV0dXJuIGQuZXBzaWxvbihlKX0sc2VnbWVudHM6ZnVuY3Rpb24oZSl7dmFyIHQ9byghMCxkLHUpO3JldHVybiBlLnJlZ2lvbnMuZm9yRWFjaCh0LmFkZFJlZ2lvbikse3NlZ21lbnRzOnQuY2FsY3VsYXRlKGUuaW52ZXJ0ZWQpLGludmVydGVkOmUuaW52ZXJ0ZWR9fSxjb21iaW5lOmZ1bmN0aW9uKGUsdCl7cmV0dXJue2NvbWJpbmVkOm8oITEsZCx1KS5jYWxjdWxhdGUoZS5zZWdtZW50cyxlLmludmVydGVkLHQuc2VnbWVudHMsdC5pbnZlcnRlZCksaW52ZXJ0ZWQxOmUuaW52ZXJ0ZWQsaW52ZXJ0ZWQyOnQuaW52ZXJ0ZWR9fSxzZWxlY3RVbmlvbjpmdW5jdGlvbihlKXtyZXR1cm57c2VnbWVudHM6cy51bmlvbihlLmNvbWJpbmVkLHUpLGludmVydGVkOmUuaW52ZXJ0ZWQxfHxlLmludmVydGVkMn19LHNlbGVjdEludGVyc2VjdDpmdW5jdGlvbihlKXtyZXR1cm57c2VnbWVudHM6cy5pbnRlcnNlY3QoZS5jb21iaW5lZCx1KSxpbnZlcnRlZDplLmludmVydGVkMSYmZS5pbnZlcnRlZDJ9fSxzZWxlY3REaWZmZXJlbmNlOmZ1bmN0aW9uKGUpe3JldHVybntzZWdtZW50czpzLmRpZmZlcmVuY2UoZS5jb21iaW5lZCx1KSxpbnZlcnRlZDplLmludmVydGVkMSYmIWUuaW52ZXJ0ZWQyfX0sc2VsZWN0RGlmZmVyZW5jZVJldjpmdW5jdGlvbihlKXtyZXR1cm57c2VnbWVudHM6cy5kaWZmZXJlbmNlUmV2KGUuY29tYmluZWQsdSksaW52ZXJ0ZWQ6IWUuaW52ZXJ0ZWQxJiZlLmludmVydGVkMn19LHNlbGVjdFhvcjpmdW5jdGlvbihlKXtyZXR1cm57c2VnbWVudHM6cy54b3IoZS5jb21iaW5lZCx1KSxpbnZlcnRlZDplLmludmVydGVkMSE9PWUuaW52ZXJ0ZWQyfX0scG9seWdvbjpmdW5jdGlvbihlKXtyZXR1cm57cmVnaW9uczpsKGUuc2VnbWVudHMsZCx1KSxpbnZlcnRlZDplLmludmVydGVkfX0scG9seWdvbkZyb21HZW9KU09OOmZ1bmN0aW9uKGUpe3JldHVybiBjLnRvUG9seWdvbihuLGUpfSxwb2x5Z29uVG9HZW9KU09OOmZ1bmN0aW9uKGUpe3JldHVybiBjLmZyb21Qb2x5Z29uKG4sZCxlKX0sdW5pb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLHQsbi5zZWxlY3RVbmlvbil9LGludGVyc2VjdDpmdW5jdGlvbihlLHQpe3JldHVybiBmKGUsdCxuLnNlbGVjdEludGVyc2VjdCl9LGRpZmZlcmVuY2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLHQsbi5zZWxlY3REaWZmZXJlbmNlKX0sZGlmZmVyZW5jZVJldjpmdW5jdGlvbihlLHQpe3JldHVybiBmKGUsdCxuLnNlbGVjdERpZmZlcmVuY2VSZXYpfSx4b3I6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLHQsbi5zZWxlY3RYb3IpfX0sIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuUG9seUJvb2w9biksdC5leHBvcnRzPW59LHsiLi9saWIvYnVpbGQtbG9nIjo1OCwiLi9saWIvZXBzaWxvbiI6NTksIi4vbGliL2dlb2pzb24iOjYwLCIuL2xpYi9pbnRlcnNlY3RlciI6NjEsIi4vbGliL3NlZ21lbnQtY2hhaW5lciI6NjMsIi4vbGliL3NlZ21lbnQtc2VsZWN0b3IiOjY0fV0sNTg6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZSx0PTAscj0hMTtmdW5jdGlvbiBuKHQscil7cmV0dXJuIGUubGlzdC5wdXNoKHt0eXBlOnQsZGF0YTpyP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocikpOnZvaWQgMH0pLGV9cmV0dXJuIGU9e2xpc3Q6W10sc2VnbWVudElkOmZ1bmN0aW9uKCl7cmV0dXJuIHQrK30sY2hlY2tJbnRlcnNlY3Rpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbigiY2hlY2siLHtzZWcxOmUsc2VnMjp0fSl9LHNlZ21lbnRDaG9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oImRpdl9zZWciLHtzZWc6ZSxwdDp0fSksbigiY2hvcCIse3NlZzplLHB0OnR9KX0sc3RhdHVzUmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiBuKCJwb3Bfc2VnIix7c2VnOmV9KX0sc2VnbWVudFVwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gbigic2VnX3VwZGF0ZSIse3NlZzplfSl9LHNlZ21lbnROZXc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbigibmV3X3NlZyIse3NlZzplLHByaW1hcnk6dH0pfSxzZWdtZW50UmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiBuKCJyZW1fc2VnIix7c2VnOmV9KX0sdGVtcFN0YXR1czpmdW5jdGlvbihlLHQscil7cmV0dXJuIG4oInRlbXBfc3RhdHVzIix7c2VnOmUsYWJvdmU6dCxiZWxvdzpyfSl9LHJld2luZDpmdW5jdGlvbihlKXtyZXR1cm4gbigicmV3aW5kIix7c2VnOmV9KX0sc3RhdHVzOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbigic3RhdHVzIix7c2VnOmUsYWJvdmU6dCxiZWxvdzpyfSl9LHZlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1yP2U6KHI9dCxuKCJ2ZXJ0Iix7eDp0fSkpfSxsb2c6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYoZT1KU09OLnN0cmluZ2lmeShlLCExLCIgICIpKSxuKCJsb2ciLHt0eHQ6ZX0pfSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBuKCJyZXNldCIpfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gbigic2VsZWN0ZWQiLHtzZWdzOmV9KX0sY2hhaW5TdGFydDpmdW5jdGlvbihlKXtyZXR1cm4gbigiY2hhaW5fc3RhcnQiLHtzZWc6ZX0pfSxjaGFpblJlbW92ZUhlYWQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbigiY2hhaW5fcmVtX2hlYWQiLHtpbmRleDplLHB0OnR9KX0sY2hhaW5SZW1vdmVUYWlsOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oImNoYWluX3JlbV90YWlsIix7aW5kZXg6ZSxwdDp0fSl9LGNoYWluTmV3OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oImNoYWluX25ldyIse3B0MTplLHB0Mjp0fSl9LGNoYWluTWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImNoYWluX21hdGNoIix7aW5kZXg6ZX0pfSxjaGFpbkNsb3NlOmZ1bmN0aW9uKGUpe3JldHVybiBuKCJjaGFpbl9jbG9zZSIse2luZGV4OmV9KX0sY2hhaW5BZGRIZWFkOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oImNoYWluX2FkZF9oZWFkIix7aW5kZXg6ZSxwdDp0fSl9LGNoYWluQWRkVGFpbDpmdW5jdGlvbihlLHQpe3JldHVybiBuKCJjaGFpbl9hZGRfdGFpbCIse2luZGV4OmUscHQ6dH0pfSxjaGFpbkNvbm5lY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbigiY2hhaW5fY29uIix7aW5kZXgxOmUsaW5kZXgyOnR9KX0sY2hhaW5SZXZlcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBuKCJjaGFpbl9yZXYiLHtpbmRleDplfSl9LGNoYWluSm9pbjpmdW5jdGlvbihlLHQpe3JldHVybiBuKCJjaGFpbl9qb2luIix7aW5kZXgxOmUsaW5kZXgyOnR9KX0sZG9uZTpmdW5jdGlvbigpe3JldHVybiBuKCJkb25lIil9fX19LHt9XSw1OTpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlKXsibnVtYmVyIiE9dHlwZW9mIGUmJihlPTFlLTEwKTt2YXIgdD17ZXBzaWxvbjpmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJihlPXQpLGV9LHBvaW50QWJvdmVPck9uTGluZTpmdW5jdGlvbih0LHIsbil7dmFyIGE9clswXSxpPXJbMV0sbz1uWzBdLGw9blsxXSxzPXRbMF07cmV0dXJuKG8tYSkqKHRbMV0taSktKGwtaSkqKHMtYSk+PS1lfSxwb2ludEJldHdlZW46ZnVuY3Rpb24odCxyLG4pe3ZhciBhPXRbMV0tclsxXSxpPW5bMF0tclswXSxvPXRbMF0tclswXSxsPW5bMV0tclsxXSxzPW8qaSthKmw7cmV0dXJuIShzPGUpJiYhKHMtKGkqaStsKmwpPi1lKX0scG9pbnRzU2FtZVg6ZnVuY3Rpb24odCxyKXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzBdKTxlfSxwb2ludHNTYW1lWTpmdW5jdGlvbih0LHIpe3JldHVybiBNYXRoLmFicyh0WzFdLXJbMV0pPGV9LHBvaW50c1NhbWU6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5wb2ludHNTYW1lWChlLHIpJiZ0LnBvaW50c1NhbWVZKGUscil9LHBvaW50c0NvbXBhcmU6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5wb2ludHNTYW1lWChlLHIpP3QucG9pbnRzU2FtZVkoZSxyKT8wOmVbMV08clsxXT8tMToxOmVbMF08clswXT8tMToxfSxwb2ludHNDb2xsaW5lYXI6ZnVuY3Rpb24odCxyLG4pe3ZhciBhPXRbMF0tclswXSxpPXRbMV0tclsxXSxvPXJbMF0tblswXSxsPXJbMV0tblsxXTtyZXR1cm4gTWF0aC5hYnMoYSpsLW8qaSk8ZX0sbGluZXNJbnRlcnNlY3Q6ZnVuY3Rpb24odCxyLG4sYSl7dmFyIGk9clswXS10WzBdLG89clsxXS10WzFdLGw9YVswXS1uWzBdLHM9YVsxXS1uWzFdLGM9aSpzLW8qbDtpZihNYXRoLmFicyhjKTxlKXJldHVybiExO3ZhciB1PXRbMF0tblswXSxkPXRbMV0tblsxXSxmPShsKmQtcyp1KS9jLHA9KGkqZC1vKnUpL2MsaD17YWxvbmdBOjAsYWxvbmdCOjAscHQ6W3RbMF0rZippLHRbMV0rZipvXX07cmV0dXJuIGguYWxvbmdBPWY8PS1lPy0yOmY8ZT8tMTpmLTE8PS1lPzA6Zi0xPGU/MToyLGguYWxvbmdCPXA8PS1lPy0yOnA8ZT8tMTpwLTE8PS1lPzA6cC0xPGU/MToyLGh9LHBvaW50SW5zaWRlUmVnaW9uOmZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPXRbMF0sYT10WzFdLGk9cltyLmxlbmd0aC0xXVswXSxvPXJbci5sZW5ndGgtMV1bMV0sbD0hMSxzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBjPXJbc11bMF0sdT1yW3NdWzFdO3UtYT5lIT1vLWE+ZSYmKGktYykqKGEtdSkvKG8tdSkrYy1uPmUmJihsPSFsKSxpPWMsbz11fXJldHVybiBsfX07cmV0dXJuIHR9fSx7fV0sNjA6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj17dG9Qb2x5Z29uOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcih0KXtpZih0Lmxlbmd0aDw9MClyZXR1cm4gZS5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbXX0pO2Z1bmN0aW9uIHIodCl7dmFyIHI9dC5zbGljZSgwLHQubGVuZ3RoLTEpO3JldHVybiBlLnNlZ21lbnRzKHtpbnZlcnRlZDohMSxyZWdpb25zOltyXX0pfWZvcih2YXIgbj1yKHRbMF0pLGE9MTthPHQubGVuZ3RoO2ErKyluPWUuc2VsZWN0RGlmZmVyZW5jZShlLmNvbWJpbmUobixyKHRbYV0pKSk7cmV0dXJuIG59aWYoIlBvbHlnb24iPT09dC50eXBlKXJldHVybiBlLnBvbHlnb24ocih0LmNvb3JkaW5hdGVzKSk7aWYoIk11bHRpUG9seWdvbiI9PT10LnR5cGUpe2Zvcih2YXIgbj1lLnNlZ21lbnRzKHtpbnZlcnRlZDohMSxyZWdpb25zOltdfSksYT0wO2E8dC5jb29yZGluYXRlcy5sZW5ndGg7YSsrKW49ZS5zZWxlY3RVbmlvbihlLmNvbWJpbmUobixyKHQuY29vcmRpbmF0ZXNbYV0pKSk7cmV0dXJuIGUucG9seWdvbihuKX10aHJvdyBuZXcgRXJyb3IoIlBvbHlCb29sOiBDYW5ub3QgY29udmVydCBHZW9KU09OIG9iamVjdCB0byBQb2x5Qm9vbCBwb2x5Z29uIil9LGZyb21Qb2x5Z29uOmZ1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBuKGUscil7cmV0dXJuIHQucG9pbnRJbnNpZGVSZWdpb24oWy41KihlWzBdWzBdK2VbMV1bMF0pLC41KihlWzBdWzFdK2VbMV1bMV0pXSxyKX1mdW5jdGlvbiBhKGUpe3JldHVybntyZWdpb246ZSxjaGlsZHJlbjpbXX19cj1lLnBvbHlnb24oZS5zZWdtZW50cyhyKSk7dmFyIGk9YShudWxsKTtmdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjxlLmNoaWxkcmVuLmxlbmd0aDtyKyspe2lmKG4odCwobD1lLmNoaWxkcmVuW3JdKS5yZWdpb24pKXJldHVybiB2b2lkIG8obCx0KX12YXIgaT1hKHQpO2ZvcihyPTA7cjxlLmNoaWxkcmVuLmxlbmd0aDtyKyspe3ZhciBsO24oKGw9ZS5jaGlsZHJlbltyXSkucmVnaW9uLHQpJiYoaS5jaGlsZHJlbi5wdXNoKGwpLGUuY2hpbGRyZW4uc3BsaWNlKHIsMSksci0tKX1lLmNoaWxkcmVuLnB1c2goaSl9Zm9yKHZhciBsPTA7bDxyLnJlZ2lvbnMubGVuZ3RoO2wrKyl7dmFyIHM9ci5yZWdpb25zW2xdO3MubGVuZ3RoPDN8fG8oaSxzKX1mdW5jdGlvbiBjKGUsdCl7Zm9yKHZhciByPTAsbj1lW2UubGVuZ3RoLTFdWzBdLGE9ZVtlLmxlbmd0aC0xXVsxXSxpPVtdLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9ZVtvXVswXSxzPWVbb11bMV07aS5wdXNoKFtsLHNdKSxyKz1zKm4tbCphLG49bCxhPXN9cmV0dXJuIHI8MCE9PXQmJmkucmV2ZXJzZSgpLGkucHVzaChbaVswXVswXSxpWzBdWzFdXSksaX12YXIgdT1bXTtmdW5jdGlvbiBkKGUpe3ZhciB0PVtjKGUucmVnaW9uLCExKV07dS5wdXNoKHQpO2Zvcih2YXIgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKXQucHVzaChmKGUuY2hpbGRyZW5bcl0pKX1mdW5jdGlvbiBmKGUpe2Zvcih2YXIgdD0wO3Q8ZS5jaGlsZHJlbi5sZW5ndGg7dCsrKWQoZS5jaGlsZHJlblt0XSk7cmV0dXJuIGMoZS5yZWdpb24sITApfWZvcihsPTA7bDxpLmNoaWxkcmVuLmxlbmd0aDtsKyspZChpLmNoaWxkcmVuW2xdKTtyZXR1cm4gdS5sZW5ndGg8PTA/e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltdfToxPT11Lmxlbmd0aD97dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dVswXX06e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6dX19fTt0LmV4cG9ydHM9bn0se31dLDYxOltmdW5jdGlvbihlLHQscil7dmFyIG49ZSgiLi9saW5rZWQtbGlzdCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJue2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDplLGVuZDp0LG15RmlsbDp7YWJvdmU6bi5teUZpbGwuYWJvdmUsYmVsb3c6bi5teUZpbGwuYmVsb3d9LG90aGVyRmlsbDpudWxsfX12YXIgaT1uLmNyZWF0ZSgpO2Z1bmN0aW9uIG8oZSxyKXtpLmluc2VydEJlZm9yZShlLChmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4sYSxpLG8pe3ZhciBsPXQucG9pbnRzQ29tcGFyZShyLGkpO3JldHVybiAwIT09bD9sOnQucG9pbnRzU2FtZShuLG8pPzA6ZSE9PWE/ZT8xOi0xOnQucG9pbnRBYm92ZU9yT25MaW5lKG4sYT9pOm8sYT9vOmkpPzE6LTF9KGUuaXNTdGFydCxlLnB0LHIsbi5pc1N0YXJ0LG4ucHQsbi5vdGhlci5wdCk8MH0pKX1mdW5jdGlvbiBsKGUsdCl7dmFyIHI9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uLm5vZGUoe2lzU3RhcnQ6ITAscHQ6ZS5zdGFydCxzZWc6ZSxwcmltYXJ5OnQsb3RoZXI6bnVsbCxzdGF0dXM6bnVsbH0pO3JldHVybiBvKHIsZS5lbmQpLHJ9KGUsdCk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1uLm5vZGUoe2lzU3RhcnQ6ITEscHQ6dC5lbmQsc2VnOnQscHJpbWFyeTpyLG90aGVyOmUsc3RhdHVzOm51bGx9KTtlLm90aGVyPWEsbyhhLGUucHQpfShyLGUsdCkscn1mdW5jdGlvbiBzKGUsdCl7dmFyIG49YSh0LGUuc2VnLmVuZCxlLnNlZyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7ciYmci5zZWdtZW50Q2hvcChlLnNlZyx0KSxlLm90aGVyLnJlbW92ZSgpLGUuc2VnLmVuZD10LGUub3RoZXIucHQ9dCxvKGUub3RoZXIsZS5wdCl9KGUsdCksbChuLGUucHJpbWFyeSl9ZnVuY3Rpb24gYyhhLG8pe3ZhciBsPW4uY3JlYXRlKCk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gbC5maW5kVHJhbnNpdGlvbigoZnVuY3Rpb24ocil7dmFyIG4sYSxpLG8sbCxzO3JldHVybihuPWUsYT1yLmV2LGk9bi5zZWcuc3RhcnQsbz1uLnNlZy5lbmQsbD1hLnNlZy5zdGFydCxzPWEuc2VnLmVuZCx0LnBvaW50c0NvbGxpbmVhcihpLGwscyk/dC5wb2ludHNDb2xsaW5lYXIobyxsLHMpfHx0LnBvaW50QWJvdmVPck9uTGluZShvLGwscyk/MTotMTp0LnBvaW50QWJvdmVPck9uTGluZShpLGwscyk/MTotMSk+MH0pKX1mdW5jdGlvbiB1KGUsbil7dmFyIGE9ZS5zZWcsaT1uLnNlZyxvPWEuc3RhcnQsbD1hLmVuZCxjPWkuc3RhcnQsdT1pLmVuZDtyJiZyLmNoZWNrSW50ZXJzZWN0aW9uKGEsaSk7dmFyIGQ9dC5saW5lc0ludGVyc2VjdChvLGwsYyx1KTtpZighMT09PWQpe2lmKCF0LnBvaW50c0NvbGxpbmVhcihvLGwsYykpcmV0dXJuITE7aWYodC5wb2ludHNTYW1lKG8sdSl8fHQucG9pbnRzU2FtZShsLGMpKXJldHVybiExO3ZhciBmPXQucG9pbnRzU2FtZShvLGMpLHA9dC5wb2ludHNTYW1lKGwsdSk7aWYoZiYmcClyZXR1cm4gbjt2YXIgaD0hZiYmdC5wb2ludEJldHdlZW4obyxjLHUpLGc9IXAmJnQucG9pbnRCZXR3ZWVuKGwsYyx1KTtpZihmKXJldHVybiBnP3MobixsKTpzKGUsdSksbjtoJiYocHx8KGc/cyhuLGwpOnMoZSx1KSkscyhuLG8pKX1lbHNlIDA9PT1kLmFsb25nQSYmKC0xPT09ZC5hbG9uZ0I/cyhlLGMpOjA9PT1kLmFsb25nQj9zKGUsZC5wdCk6MT09PWQuYWxvbmdCJiZzKGUsdSkpLDA9PT1kLmFsb25nQiYmKC0xPT09ZC5hbG9uZ0E/cyhuLG8pOjA9PT1kLmFsb25nQT9zKG4sZC5wdCk6MT09PWQuYWxvbmdBJiZzKG4sbCkpO3JldHVybiExfWZvcih2YXIgZD1bXTshaS5pc0VtcHR5KCk7KXt2YXIgZj1pLmdldEhlYWQoKTtpZihyJiZyLnZlcnQoZi5wdFswXSksZi5pc1N0YXJ0KXtyJiZyLnNlZ21lbnROZXcoZi5zZWcsZi5wcmltYXJ5KTt2YXIgcD1jKGYpLGg9cC5iZWZvcmU/cC5iZWZvcmUuZXY6bnVsbCxnPXAuYWZ0ZXI/cC5hZnRlci5ldjpudWxsO2Z1bmN0aW9uIG0oKXtpZihoKXt2YXIgZT11KGYsaCk7aWYoZSlyZXR1cm4gZX1yZXR1cm4hIWcmJnUoZixnKX1yJiZyLnRlbXBTdGF0dXMoZi5zZWcsISFoJiZoLnNlZywhIWcmJmcuc2VnKTt2YXIgdix5PW0oKTtpZih5KXt2YXIgeDtpZihlKSh4PW51bGw9PT1mLnNlZy5teUZpbGwuYmVsb3d8fGYuc2VnLm15RmlsbC5hYm92ZSE9PWYuc2VnLm15RmlsbC5iZWxvdykmJih5LnNlZy5teUZpbGwuYWJvdmU9IXkuc2VnLm15RmlsbC5hYm92ZSk7ZWxzZSB5LnNlZy5vdGhlckZpbGw9Zi5zZWcubXlGaWxsO3ImJnIuc2VnbWVudFVwZGF0ZSh5LnNlZyksZi5vdGhlci5yZW1vdmUoKSxmLnJlbW92ZSgpfWlmKGkuZ2V0SGVhZCgpIT09Zil7ciYmci5yZXdpbmQoZi5zZWcpO2NvbnRpbnVlfWlmKGUpeD1udWxsPT09Zi5zZWcubXlGaWxsLmJlbG93fHxmLnNlZy5teUZpbGwuYWJvdmUhPT1mLnNlZy5teUZpbGwuYmVsb3csZi5zZWcubXlGaWxsLmJlbG93PWc/Zy5zZWcubXlGaWxsLmFib3ZlOmEsZi5zZWcubXlGaWxsLmFib3ZlPXg/IWYuc2VnLm15RmlsbC5iZWxvdzpmLnNlZy5teUZpbGwuYmVsb3c7ZWxzZSBpZihudWxsPT09Zi5zZWcub3RoZXJGaWxsKXY9Zz9mLnByaW1hcnk9PT1nLnByaW1hcnk/Zy5zZWcub3RoZXJGaWxsLmFib3ZlOmcuc2VnLm15RmlsbC5hYm92ZTpmLnByaW1hcnk/bzphLGYuc2VnLm90aGVyRmlsbD17YWJvdmU6dixiZWxvdzp2fTtyJiZyLnN0YXR1cyhmLnNlZywhIWgmJmguc2VnLCEhZyYmZy5zZWcpLGYub3RoZXIuc3RhdHVzPXAuaW5zZXJ0KG4ubm9kZSh7ZXY6Zn0pKX1lbHNle3ZhciBiPWYuc3RhdHVzO2lmKG51bGw9PT1iKXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlIik7aWYobC5leGlzdHMoYi5wcmV2KSYmbC5leGlzdHMoYi5uZXh0KSYmdShiLnByZXYuZXYsYi5uZXh0LmV2KSxyJiZyLnN0YXR1c1JlbW92ZShiLmV2LnNlZyksYi5yZW1vdmUoKSwhZi5wcmltYXJ5KXt2YXIgXz1mLnNlZy5teUZpbGw7Zi5zZWcubXlGaWxsPWYuc2VnLm90aGVyRmlsbCxmLnNlZy5vdGhlckZpbGw9X31kLnB1c2goZi5zZWcpfWkuZ2V0SGVhZCgpLnJlbW92ZSgpfXJldHVybiByJiZyLmRvbmUoKSxkfXJldHVybiBlP3thZGRSZWdpb246ZnVuY3Rpb24oZSl7Zm9yKHZhciBuLGEsaSxvPWVbZS5sZW5ndGgtMV0scz0wO3M8ZS5sZW5ndGg7cysrKXtuPW8sbz1lW3NdO3ZhciBjPXQucG9pbnRzQ29tcGFyZShuLG8pOzAhPT1jJiZsKChhPWM8MD9uOm8saT1jPDA/bzpuLHtpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6YSxlbmQ6aSxteUZpbGw6e2Fib3ZlOm51bGwsYmVsb3c6bnVsbH0sb3RoZXJGaWxsOm51bGx9KSwhMCl9fSxjYWxjdWxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwhMSl9fTp7Y2FsY3VsYXRlOmZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2woYShlLnN0YXJ0LGUuZW5kLGUpLCEwKX0pKSxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe2woYShlLnN0YXJ0LGUuZW5kLGUpLCExKX0pKSxjKHQsbil9fX19LHsiLi9saW5rZWQtbGlzdCI6NjJ9XSw2MjpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz17Y3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9e3Jvb3Q6e3Jvb3Q6ITAsbmV4dDpudWxsfSxleGlzdHM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10JiZ0IT09ZS5yb290fSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT1lLnJvb3QubmV4dH0sZ2V0SGVhZDpmdW5jdGlvbigpe3JldHVybiBlLnJvb3QubmV4dH0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPWUucm9vdCxhPWUucm9vdC5uZXh0O251bGwhPT1hOyl7aWYocihhKSlyZXR1cm4gdC5wcmV2PWEucHJldix0Lm5leHQ9YSxhLnByZXYubmV4dD10LHZvaWQoYS5wcmV2PXQpO249YSxhPWEubmV4dH1uLm5leHQ9dCx0LnByZXY9bix0Lm5leHQ9bnVsbH0sZmluZFRyYW5zaXRpb246ZnVuY3Rpb24odCl7Zm9yKHZhciByPWUucm9vdCxuPWUucm9vdC5uZXh0O251bGwhPT1uJiYhdChuKTspcj1uLG49bi5uZXh0O3JldHVybntiZWZvcmU6cj09PWUucm9vdD9udWxsOnIsYWZ0ZXI6bixpbnNlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJldj1yLGUubmV4dD1uLHIubmV4dD1lLG51bGwhPT1uJiYobi5wcmV2PWUpLGV9fX19O3JldHVybiBlfSxub2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnByZXY9bnVsbCxlLm5leHQ9bnVsbCxlLnJlbW92ZT1mdW5jdGlvbigpe2UucHJldi5uZXh0PWUubmV4dCxlLm5leHQmJihlLm5leHQucHJldj1lLnByZXYpLGUucHJldj1udWxsLGUubmV4dD1udWxsfSxlfX19LHt9XSw2MzpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIG49W10sYT1bXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgaT1lLnN0YXJ0LG89ZS5lbmQ7aWYodC5wb2ludHNTYW1lKGksbykpY29uc29sZS53YXJuKCJQb2x5Qm9vbDogV2FybmluZzogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2UiKTtlbHNle3ImJnIuY2hhaW5TdGFydChlKTtmb3IodmFyIGw9e2luZGV4OjAsbWF0Y2hlc19oZWFkOiExLG1hdGNoZXNfcHQxOiExfSxzPXtpbmRleDowLG1hdGNoZXNfaGVhZDohMSxtYXRjaGVzX3B0MTohMX0sYz1sLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGQ9KG09blt1XSlbMF0sZj0obVsxXSxtW20ubGVuZ3RoLTFdKTttW20ubGVuZ3RoLTJdO2lmKHQucG9pbnRzU2FtZShkLGkpKXtpZihNKHUsITAsITApKWJyZWFrfWVsc2UgaWYodC5wb2ludHNTYW1lKGQsbykpe2lmKE0odSwhMCwhMSkpYnJlYWt9ZWxzZSBpZih0LnBvaW50c1NhbWUoZixpKSl7aWYoTSh1LCExLCEwKSlicmVha31lbHNlIGlmKHQucG9pbnRzU2FtZShmLG8pJiZNKHUsITEsITEpKWJyZWFrfWlmKGM9PT1sKXJldHVybiBuLnB1c2goW2ksb10pLHZvaWQociYmci5jaGFpbk5ldyhpLG8pKTtpZihjPT09cyl7ciYmci5jaGFpbk1hdGNoKGwuaW5kZXgpO3ZhciBwPWwuaW5kZXgsaD1sLm1hdGNoZXNfcHQxP286aSxnPWwubWF0Y2hlc19oZWFkLG09bltwXSx2PWc/bVswXTptW20ubGVuZ3RoLTFdLHk9Zz9tWzFdOm1bbS5sZW5ndGgtMl0seD1nP21bbS5sZW5ndGgtMV06bVswXSxiPWc/bVttLmxlbmd0aC0yXTptWzFdO3JldHVybiB0LnBvaW50c0NvbGxpbmVhcih5LHYsaCkmJihnPyhyJiZyLmNoYWluUmVtb3ZlSGVhZChsLmluZGV4LGgpLG0uc2hpZnQoKSk6KHImJnIuY2hhaW5SZW1vdmVUYWlsKGwuaW5kZXgsaCksbS5wb3AoKSksdj15KSx0LnBvaW50c1NhbWUoeCxoKT8obi5zcGxpY2UocCwxKSx0LnBvaW50c0NvbGxpbmVhcihiLHgsdikmJihnPyhyJiZyLmNoYWluUmVtb3ZlVGFpbChsLmluZGV4LHYpLG0ucG9wKCkpOihyJiZyLmNoYWluUmVtb3ZlSGVhZChsLmluZGV4LHYpLG0uc2hpZnQoKSkpLHImJnIuY2hhaW5DbG9zZShsLmluZGV4KSx2b2lkIGEucHVzaChtKSk6dm9pZChnPyhyJiZyLmNoYWluQWRkSGVhZChsLmluZGV4LGgpLG0udW5zaGlmdChoKSk6KHImJnIuY2hhaW5BZGRUYWlsKGwuaW5kZXgsaCksbS5wdXNoKGgpKSl9dmFyIF89bC5pbmRleCx3PXMuaW5kZXg7ciYmci5jaGFpbkNvbm5lY3QoXyx3KTt2YXIgVD1uW19dLmxlbmd0aDxuW3ddLmxlbmd0aDtsLm1hdGNoZXNfaGVhZD9zLm1hdGNoZXNfaGVhZD9UPyhrKF8pLEEoXyx3KSk6KGsodyksQSh3LF8pKTpBKHcsXyk6cy5tYXRjaGVzX2hlYWQ/QShfLHcpOlQ/KGsoXyksQSh3LF8pKTooayh3KSxBKF8sdykpfWZ1bmN0aW9uIE0oZSx0LHIpe3JldHVybiBjLmluZGV4PWUsYy5tYXRjaGVzX2hlYWQ9dCxjLm1hdGNoZXNfcHQxPXIsYz09PWw/KGM9cywhMSk6KGM9bnVsbCwhMCl9ZnVuY3Rpb24gayhlKXtyJiZyLmNoYWluUmV2ZXJzZShlKSxuW2VdLnJldmVyc2UoKX1mdW5jdGlvbiBBKGUsYSl7dmFyIGk9bltlXSxvPW5bYV0sbD1pW2kubGVuZ3RoLTFdLHM9aVtpLmxlbmd0aC0yXSxjPW9bMF0sdT1vWzFdO3QucG9pbnRzQ29sbGluZWFyKHMsbCxjKSYmKHImJnIuY2hhaW5SZW1vdmVUYWlsKGUsbCksaS5wb3AoKSxsPXMpLHQucG9pbnRzQ29sbGluZWFyKGwsYyx1KSYmKHImJnIuY2hhaW5SZW1vdmVIZWFkKGEsYyksby5zaGlmdCgpKSxyJiZyLmNoYWluSm9pbihlLGEpLG5bZV09aS5jb25jYXQobyksbi5zcGxpY2UoYSwxKX19KSksYX19LHt9XSw2NDpbZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oZSx0LHIpe3ZhciBuPVtdO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBhPShlLm15RmlsbC5hYm92ZT84OjApKyhlLm15RmlsbC5iZWxvdz80OjApKyhlLm90aGVyRmlsbCYmZS5vdGhlckZpbGwuYWJvdmU/MjowKSsoZS5vdGhlckZpbGwmJmUub3RoZXJGaWxsLmJlbG93PzE6MCk7MCE9PXRbYV0mJm4ucHVzaCh7aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OmUuc3RhcnQsZW5kOmUuZW5kLG15RmlsbDp7YWJvdmU6MT09PXRbYV0sYmVsb3c6Mj09PXRbYV19LG90aGVyRmlsbDpudWxsfSl9KSksciYmci5zZWxlY3RlZChuKSxufXZhciBhPXt1bmlvbjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsWzAsMiwxLDAsMiwyLDAsMCwxLDAsMSwwLDAsMCwwLDBdLHQpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLFswLDAsMCwwLDAsMiwwLDIsMCwwLDEsMSwwLDIsMSwwXSx0KX0sZGlmZmVyZW5jZTpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsWzAsMCwwLDAsMiwwLDIsMCwxLDEsMCwwLDAsMSwyLDBdLHQpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSxbMCwyLDEsMCwwLDAsMSwxLDAsMiwwLDIsMCwwLDAsMF0sdCl9LHhvcjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsWzAsMiwxLDAsMiwwLDAsMSwxLDAsMCwyLDAsMSwyLDBdLHQpfX07dC5leHBvcnRzPWF9LHt9XSw2NTpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaT10LmV4cG9ydHM9e307ZnVuY3Rpb24gbygpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGwoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIHMoZSl7aWYobj09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigobj09PW98fCFuKSYmc2V0VGltZW91dClyZXR1cm4gbj1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIG4oZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIG4uY2FsbCh0aGlzLGUsMCl9fX0hZnVuY3Rpb24oKXt0cnl7bj0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Om99Y2F0Y2goZSl7bj1vfXRyeXthPSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Omx9Y2F0Y2goZSl7YT1sfX0oKTt2YXIgYyx1PVtdLGQ9ITEsZj0tMTtmdW5jdGlvbiBwKCl7ZCYmYyYmKGQ9ITEsYy5sZW5ndGg/dT1jLmNvbmNhdCh1KTpmPS0xLHUubGVuZ3RoJiZoKCkpfWZ1bmN0aW9uIGgoKXtpZighZCl7dmFyIGU9cyhwKTtkPSEwO2Zvcih2YXIgdD11Lmxlbmd0aDt0Oyl7Zm9yKGM9dSx1PVtdOysrZjx0OyljJiZjW2ZdLnJ1bigpO2Y9LTEsdD11Lmxlbmd0aH1jPW51bGwsZD0hMSxmdW5jdGlvbihlKXtpZihhPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKGE9PT1sfHwhYSkmJmNsZWFyVGltZW91dClyZXR1cm4gYT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXthKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gYS5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIGEuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiBnKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9ZnVuY3Rpb24gbSgpe31pLm5leHRUaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07dS5wdXNoKG5ldyBnKGUsdCkpLDEhPT11Lmxlbmd0aHx8ZHx8cyhoKX0sZy5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0saS50aXRsZT0iYnJvd3NlciIsaS5icm93c2VyPSEwLGkuZW52PXt9LGkuYXJndj1bXSxpLnZlcnNpb249IiIsaS52ZXJzaW9ucz17fSxpLm9uPW0saS5hZGRMaXN0ZW5lcj1tLGkub25jZT1tLGkub2ZmPW0saS5yZW1vdmVMaXN0ZW5lcj1tLGkucmVtb3ZlQWxsTGlzdGVuZXJzPW0saS5lbWl0PW0saS5wcmVwZW5kTGlzdGVuZXI9bSxpLnByZXBlbmRPbmNlTGlzdGVuZXI9bSxpLmxpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm5bXX0saS5iaW5kaW5nPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0saS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGkuY2hkaXI9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0saS51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0se31dLDY2OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQsbil7KGZ1bmN0aW9uKCl7dmFyIGE9ZSgicHJvY2Vzcy9icm93c2VyLmpzIikubmV4dFRpY2ssaT1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHksbz1BcnJheS5wcm90b3R5cGUuc2xpY2UsbD17fSxzPTA7ZnVuY3Rpb24gYyhlLHQpe3RoaXMuX2lkPWUsdGhpcy5fY2xlYXJGbj10fXIuc2V0VGltZW91dD1mdW5jdGlvbigpe3JldHVybiBuZXcgYyhpLmNhbGwoc2V0VGltZW91dCx3aW5kb3csYXJndW1lbnRzKSxjbGVhclRpbWVvdXQpfSxyLnNldEludGVydmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjKGkuY2FsbChzZXRJbnRlcnZhbCx3aW5kb3csYXJndW1lbnRzKSxjbGVhckludGVydmFsKX0sci5jbGVhclRpbWVvdXQ9ci5jbGVhckludGVydmFsPWZ1bmN0aW9uKGUpe2UuY2xvc2UoKX0sYy5wcm90b3R5cGUudW5yZWY9Yy5wcm90b3R5cGUucmVmPWZ1bmN0aW9uKCl7fSxjLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuX2NsZWFyRm4uY2FsbCh3aW5kb3csdGhpcy5faWQpfSxyLmVucm9sbD1mdW5jdGlvbihlLHQpe2NsZWFyVGltZW91dChlLl9pZGxlVGltZW91dElkKSxlLl9pZGxlVGltZW91dD10fSxyLnVuZW5yb2xsPWZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dChlLl9pZGxlVGltZW91dElkKSxlLl9pZGxlVGltZW91dD0tMX0sci5fdW5yZWZBY3RpdmU9ci5hY3RpdmU9ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpO3ZhciB0PWUuX2lkbGVUaW1lb3V0O3Q+PTAmJihlLl9pZGxlVGltZW91dElkPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5fb25UaW1lb3V0JiZlLl9vblRpbWVvdXQoKX0pLHQpKX0sci5zZXRJbW1lZGlhdGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbihlKXt2YXIgdD1zKyssbj0hKGFyZ3VtZW50cy5sZW5ndGg8MikmJm8uY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGxbdF09ITAsYSgoZnVuY3Rpb24oKXtsW3RdJiYobj9lLmFwcGx5KG51bGwsbik6ZS5jYWxsKG51bGwpLHIuY2xlYXJJbW1lZGlhdGUodCkpfSkpLHR9LHIuY2xlYXJJbW1lZGlhdGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmdW5jdGlvbihlKXtkZWxldGUgbFtlXX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGUoInRpbWVycyIpLnNldEltbWVkaWF0ZSxlKCJ0aW1lcnMiKS5jbGVhckltbWVkaWF0ZSl9LHsicHJvY2Vzcy9icm93c2VyLmpzIjo2NSx0aW1lcnM6NjZ9XSw2NzpbZnVuY3Rpb24oZSx0LHIpeyFmdW5jdGlvbihlKXt2YXIgcj0vXlxzKy8sbj0vXHMrJC8sYT0wLGk9ZS5yb3VuZCxvPWUubWluLGw9ZS5tYXgscz1lLnJhbmRvbTtmdW5jdGlvbiBjKHQscyl7aWYocz1zfHx7fSwodD10fHwiIilpbnN0YW5jZW9mIGMpcmV0dXJuIHQ7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKHQscyk7dmFyIHU9ZnVuY3Rpb24odCl7dmFyIGE9e3I6MCxnOjAsYjowfSxpPTEscz1udWxsLGM9bnVsbCx1PW51bGwsZD0hMSxmPSExOyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UociwiIikucmVwbGFjZShuLCIiKS50b0xvd2VyQ2FzZSgpO3ZhciB0LGE9ITE7aWYoTFtlXSllPUxbZV0sYT0hMDtlbHNlIGlmKCJ0cmFuc3BhcmVudCI9PWUpcmV0dXJue3I6MCxnOjAsYjowLGE6MCxmb3JtYXQ6Im5hbWUifTtpZih0PUgucmdiLmV4ZWMoZSkpcmV0dXJue3I6dFsxXSxnOnRbMl0sYjp0WzNdfTtpZih0PUgucmdiYS5leGVjKGUpKXJldHVybntyOnRbMV0sZzp0WzJdLGI6dFszXSxhOnRbNF19O2lmKHQ9SC5oc2wuZXhlYyhlKSlyZXR1cm57aDp0WzFdLHM6dFsyXSxsOnRbM119O2lmKHQ9SC5oc2xhLmV4ZWMoZSkpcmV0dXJue2g6dFsxXSxzOnRbMl0sbDp0WzNdLGE6dFs0XX07aWYodD1ILmhzdi5leGVjKGUpKXJldHVybntoOnRbMV0sczp0WzJdLHY6dFszXX07aWYodD1ILmhzdmEuZXhlYyhlKSlyZXR1cm57aDp0WzFdLHM6dFsyXSx2OnRbM10sYTp0WzRdfTtpZih0PUguaGV4OC5leGVjKGUpKXJldHVybntyOlAodFsxXSksZzpQKHRbMl0pLGI6UCh0WzNdKSxhOk4odFs0XSksZm9ybWF0OmE/Im5hbWUiOiJoZXg4In07aWYodD1ILmhleDYuZXhlYyhlKSlyZXR1cm57cjpQKHRbMV0pLGc6UCh0WzJdKSxiOlAodFszXSksZm9ybWF0OmE/Im5hbWUiOiJoZXgifTtpZih0PUguaGV4NC5leGVjKGUpKXJldHVybntyOlAodFsxXSsiIit0WzFdKSxnOlAodFsyXSsiIit0WzJdKSxiOlAodFszXSsiIit0WzNdKSxhOk4odFs0XSsiIit0WzRdKSxmb3JtYXQ6YT8ibmFtZSI6ImhleDgifTtpZih0PUguaGV4My5leGVjKGUpKXJldHVybntyOlAodFsxXSsiIit0WzFdKSxnOlAodFsyXSsiIit0WzJdKSxiOlAodFszXSsiIit0WzNdKSxmb3JtYXQ6YT8ibmFtZSI6ImhleCJ9O3JldHVybiExfSh0KSk7Im9iamVjdCI9PXR5cGVvZiB0JiYoQih0LnIpJiZCKHQuZykmJkIodC5iKT8ocD10LnIsaD10LmcsZz10LmIsYT17cjoyNTUqQyhwLDI1NSksZzoyNTUqQyhoLDI1NSksYjoyNTUqQyhnLDI1NSl9LGQ9ITAsZj0iJSI9PT1TdHJpbmcodC5yKS5zdWJzdHIoLTEpPyJwcmdiIjoicmdiIik6Qih0LmgpJiZCKHQucykmJkIodC52KT8ocz1SKHQucyksYz1SKHQudiksYT1mdW5jdGlvbih0LHIsbil7dD02KkModCwzNjApLHI9QyhyLDEwMCksbj1DKG4sMTAwKTt2YXIgYT1lLmZsb29yKHQpLGk9dC1hLG89biooMS1yKSxsPW4qKDEtaSpyKSxzPW4qKDEtKDEtaSkqciksYz1hJTY7cmV0dXJue3I6MjU1KltuLGwsbyxvLHMsbl1bY10sZzoyNTUqW3MsbixuLGwsbyxvXVtjXSxiOjI1NSpbbyxvLHMsbixuLGxdW2NdfX0odC5oLHMsYyksZD0hMCxmPSJoc3YiKTpCKHQuaCkmJkIodC5zKSYmQih0LmwpJiYocz1SKHQucyksdT1SKHQubCksYT1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpO2Z1bmN0aW9uIG8oZSx0LHIpe3JldHVybiByPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPDEvNj9lKzYqKHQtZSkqcjpyPC41P3Q6cjwyLzM/ZSsodC1lKSooMi8zLXIpKjY6ZX1pZihlPUMoZSwzNjApLHQ9Qyh0LDEwMCkscj1DKHIsMTAwKSwwPT09dCluPWE9aT1yO2Vsc2V7dmFyIGw9cjwuNT9yKigxK3QpOnIrdC1yKnQscz0yKnItbDtuPW8ocyxsLGUrMS8zKSxhPW8ocyxsLGUpLGk9byhzLGwsZS0xLzMpfXJldHVybntyOjI1NSpuLGc6MjU1KmEsYjoyNTUqaX19KHQuaCxzLHUpLGQ9ITAsZj0iaHNsIiksdC5oYXNPd25Qcm9wZXJ0eSgiYSIpJiYoaT10LmEpKTt2YXIgcCxoLGc7cmV0dXJuIGk9RChpKSx7b2s6ZCxmb3JtYXQ6dC5mb3JtYXR8fGYscjpvKDI1NSxsKGEuciwwKSksZzpvKDI1NSxsKGEuZywwKSksYjpvKDI1NSxsKGEuYiwwKSksYTppfX0odCk7dGhpcy5fb3JpZ2luYWxJbnB1dD10LHRoaXMuX3I9dS5yLHRoaXMuX2c9dS5nLHRoaXMuX2I9dS5iLHRoaXMuX2E9dS5hLHRoaXMuX3JvdW5kQT1pKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PXMuZm9ybWF0fHx1LmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9cy5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1pKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPWkodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9aSh0aGlzLl9iKSksdGhpcy5fb2s9dS5vayx0aGlzLl90Y19pZD1hKyt9ZnVuY3Rpb24gdShlLHQscil7ZT1DKGUsMjU1KSx0PUModCwyNTUpLHI9QyhyLDI1NSk7dmFyIG4sYSxpPWwoZSx0LHIpLHM9byhlLHQsciksYz0oaStzKS8yO2lmKGk9PXMpbj1hPTA7ZWxzZXt2YXIgdT1pLXM7c3dpdGNoKGE9Yz4uNT91LygyLWktcyk6dS8oaStzKSxpKXtjYXNlIGU6bj0odC1yKS91Kyh0PHI/NjowKTticmVhaztjYXNlIHQ6bj0oci1lKS91KzI7YnJlYWs7Y2FzZSByOm49KGUtdCkvdSs0fW4vPTZ9cmV0dXJue2g6bixzOmEsbDpjfX1mdW5jdGlvbiBkKGUsdCxyKXtlPUMoZSwyNTUpLHQ9Qyh0LDI1NSkscj1DKHIsMjU1KTt2YXIgbixhLGk9bChlLHQscikscz1vKGUsdCxyKSxjPWksdT1pLXM7aWYoYT0wPT09aT8wOnUvaSxpPT1zKW49MDtlbHNle3N3aXRjaChpKXtjYXNlIGU6bj0odC1yKS91Kyh0PHI/NjowKTticmVhaztjYXNlIHQ6bj0oci1lKS91KzI7YnJlYWs7Y2FzZSByOm49KGUtdCkvdSs0fW4vPTZ9cmV0dXJue2g6bixzOmEsdjpjfX1mdW5jdGlvbiBmKGUsdCxyLG4pe3ZhciBhPVtJKGkoZSkudG9TdHJpbmcoMTYpKSxJKGkodCkudG9TdHJpbmcoMTYpKSxJKGkocikudG9TdHJpbmcoMTYpKV07cmV0dXJuIG4mJmFbMF0uY2hhckF0KDApPT1hWzBdLmNoYXJBdCgxKSYmYVsxXS5jaGFyQXQoMCk9PWFbMV0uY2hhckF0KDEpJiZhWzJdLmNoYXJBdCgwKT09YVsyXS5jaGFyQXQoMSk/YVswXS5jaGFyQXQoMCkrYVsxXS5jaGFyQXQoMCkrYVsyXS5jaGFyQXQoMCk6YS5qb2luKCIiKX1mdW5jdGlvbiBwKGUsdCxyLG4pe3JldHVybltJKHoobikpLEkoaShlKS50b1N0cmluZygxNikpLEkoaSh0KS50b1N0cmluZygxNikpLEkoaShyKS50b1N0cmluZygxNikpXS5qb2luKCIiKX1mdW5jdGlvbiBoKGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciByPWMoZSkudG9Ic2woKTtyZXR1cm4gci5zLT10LzEwMCxyLnM9TyhyLnMpLGMocil9ZnVuY3Rpb24gZyhlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgcj1jKGUpLnRvSHNsKCk7cmV0dXJuIHIucys9dC8xMDAsci5zPU8oci5zKSxjKHIpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIGMoZSkuZGVzYXR1cmF0ZSgxMDApfWZ1bmN0aW9uIHYoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIHI9YyhlKS50b0hzbCgpO3JldHVybiByLmwrPXQvMTAwLHIubD1PKHIubCksYyhyKX1mdW5jdGlvbiB5KGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciByPWMoZSkudG9SZ2IoKTtyZXR1cm4gci5yPWwoMCxvKDI1NSxyLnItaSgtdC8xMDAqMjU1KSkpLHIuZz1sKDAsbygyNTUsci5nLWkoLXQvMTAwKjI1NSkpKSxyLmI9bCgwLG8oMjU1LHIuYi1pKC10LzEwMCoyNTUpKSksYyhyKX1mdW5jdGlvbiB4KGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciByPWMoZSkudG9Ic2woKTtyZXR1cm4gci5sLT10LzEwMCxyLmw9TyhyLmwpLGMocil9ZnVuY3Rpb24gYihlLHQpe3ZhciByPWMoZSkudG9Ic2woKSxuPShyLmgrdCklMzYwO3JldHVybiByLmg9bjwwPzM2MCtuOm4sYyhyKX1mdW5jdGlvbiBfKGUpe3ZhciB0PWMoZSkudG9Ic2woKTtyZXR1cm4gdC5oPSh0LmgrMTgwKSUzNjAsYyh0KX1mdW5jdGlvbiB3KGUpe3ZhciB0PWMoZSkudG9Ic2woKSxyPXQuaDtyZXR1cm5bYyhlKSxjKHtoOihyKzEyMCklMzYwLHM6dC5zLGw6dC5sfSksYyh7aDoocisyNDApJTM2MCxzOnQucyxsOnQubH0pXX1mdW5jdGlvbiBUKGUpe3ZhciB0PWMoZSkudG9Ic2woKSxyPXQuaDtyZXR1cm5bYyhlKSxjKHtoOihyKzkwKSUzNjAsczp0LnMsbDp0Lmx9KSxjKHtoOihyKzE4MCklMzYwLHM6dC5zLGw6dC5sfSksYyh7aDoocisyNzApJTM2MCxzOnQucyxsOnQubH0pXX1mdW5jdGlvbiBNKGUpe3ZhciB0PWMoZSkudG9Ic2woKSxyPXQuaDtyZXR1cm5bYyhlKSxjKHtoOihyKzcyKSUzNjAsczp0LnMsbDp0Lmx9KSxjKHtoOihyKzIxNiklMzYwLHM6dC5zLGw6dC5sfSldfWZ1bmN0aW9uIGsoZSx0LHIpe3Q9dHx8NixyPXJ8fDMwO3ZhciBuPWMoZSkudG9Ic2woKSxhPTM2MC9yLGk9W2MoZSldO2ZvcihuLmg9KG4uaC0oYSp0Pj4xKSs3MjApJTM2MDstLXQ7KW4uaD0obi5oK2EpJTM2MCxpLnB1c2goYyhuKSk7cmV0dXJuIGl9ZnVuY3Rpb24gQShlLHQpe3Q9dHx8Njtmb3IodmFyIHI9YyhlKS50b0hzdigpLG49ci5oLGE9ci5zLGk9ci52LG89W10sbD0xL3Q7dC0tOylvLnB1c2goYyh7aDpuLHM6YSx2Oml9KSksaT0oaStsKSUxO3JldHVybiBvfWMucHJvdG90eXBlPXtpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCk8MTI4fSxpc0xpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNEYXJrKCl9LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2t9LGdldE9yaWdpbmFsSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dH0sZ2V0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvcm1hdH0sZ2V0QWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYX0sZ2V0QnJpZ2h0bmVzczpmdW5jdGlvbigpe3ZhciBlPXRoaXMudG9SZ2IoKTtyZXR1cm4oMjk5KmUucis1ODcqZS5nKzExNCplLmIpLzFlM30sZ2V0THVtaW5hbmNlOmZ1bmN0aW9uKCl7dmFyIHQscixuLGE9dGhpcy50b1JnYigpO3JldHVybiB0PWEuci8yNTUscj1hLmcvMjU1LG49YS5iLzI1NSwuMjEyNioodDw9LjAzOTI4P3QvMTIuOTI6ZS5wb3coKHQrLjA1NSkvMS4wNTUsMi40KSkrLjcxNTIqKHI8PS4wMzkyOD9yLzEyLjkyOmUucG93KChyKy4wNTUpLzEuMDU1LDIuNCkpKy4wNzIyKihuPD0uMDM5Mjg/bi8xMi45MjplLnBvdygobisuMDU1KS8xLjA1NSwyLjQpKX0sc2V0QWxwaGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2E9RChlKSx0aGlzLl9yb3VuZEE9aSgxMDAqdGhpcy5fYSkvMTAwLHRoaXN9LHRvSHN2OmZ1bmN0aW9uKCl7dmFyIGU9ZCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKmUuaCxzOmUucyx2OmUudixhOnRoaXMuX2F9fSx0b0hzdlN0cmluZzpmdW5jdGlvbigpe3ZhciBlPWQodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLHQ9aSgzNjAqZS5oKSxyPWkoMTAwKmUucyksbj1pKDEwMCplLnYpO3JldHVybiAxPT10aGlzLl9hPyJoc3YoIit0KyIsICIrcisiJSwgIituKyIlKSI6ImhzdmEoIit0KyIsICIrcisiJSwgIituKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvSHNsOmZ1bmN0aW9uKCl7dmFyIGU9dSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKmUuaCxzOmUucyxsOmUubCxhOnRoaXMuX2F9fSx0b0hzbFN0cmluZzpmdW5jdGlvbigpe3ZhciBlPXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLHQ9aSgzNjAqZS5oKSxyPWkoMTAwKmUucyksbj1pKDEwMCplLmwpO3JldHVybiAxPT10aGlzLl9hPyJoc2woIit0KyIsICIrcisiJSwgIituKyIlKSI6ImhzbGEoIit0KyIsICIrcisiJSwgIituKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvSGV4OmZ1bmN0aW9uKGUpe3JldHVybiBmKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLGUpfSx0b0hleFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4iIyIrdGhpcy50b0hleChlKX0sdG9IZXg4OmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlLHQscixuLGEpe3ZhciBvPVtJKGkoZSkudG9TdHJpbmcoMTYpKSxJKGkodCkudG9TdHJpbmcoMTYpKSxJKGkocikudG9TdHJpbmcoMTYpKSxJKHoobikpXTtpZihhJiZvWzBdLmNoYXJBdCgwKT09b1swXS5jaGFyQXQoMSkmJm9bMV0uY2hhckF0KDApPT1vWzFdLmNoYXJBdCgxKSYmb1syXS5jaGFyQXQoMCk9PW9bMl0uY2hhckF0KDEpJiZvWzNdLmNoYXJBdCgwKT09b1szXS5jaGFyQXQoMSkpcmV0dXJuIG9bMF0uY2hhckF0KDApK29bMV0uY2hhckF0KDApK29bMl0uY2hhckF0KDApK29bM10uY2hhckF0KDApO3JldHVybiBvLmpvaW4oIiIpfSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hLGUpfSx0b0hleDhTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIiMiK3RoaXMudG9IZXg4KGUpfSx0b1JnYjpmdW5jdGlvbigpe3JldHVybntyOmkodGhpcy5fciksZzppKHRoaXMuX2cpLGI6aSh0aGlzLl9iKSxhOnRoaXMuX2F9fSx0b1JnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hPyJyZ2IoIitpKHRoaXMuX3IpKyIsICIraSh0aGlzLl9nKSsiLCAiK2kodGhpcy5fYikrIikiOiJyZ2JhKCIraSh0aGlzLl9yKSsiLCAiK2kodGhpcy5fZykrIiwgIitpKHRoaXMuX2IpKyIsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9QZXJjZW50YWdlUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6aSgxMDAqQyh0aGlzLl9yLDI1NSkpKyIlIixnOmkoMTAwKkModGhpcy5fZywyNTUpKSsiJSIsYjppKDEwMCpDKHRoaXMuX2IsMjU1KSkrIiUiLGE6dGhpcy5fYX19LHRvUGVyY2VudGFnZVJnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hPyJyZ2IoIitpKDEwMCpDKHRoaXMuX3IsMjU1KSkrIiUsICIraSgxMDAqQyh0aGlzLl9nLDI1NSkpKyIlLCAiK2koMTAwKkModGhpcy5fYiwyNTUpKSsiJSkiOiJyZ2JhKCIraSgxMDAqQyh0aGlzLl9yLDI1NSkpKyIlLCAiK2koMTAwKkModGhpcy5fZywyNTUpKSsiJSwgIitpKDEwMCpDKHRoaXMuX2IsMjU1KSkrIiUsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9OYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9hPyJ0cmFuc3BhcmVudCI6ISh0aGlzLl9hPDEpJiYoU1tmKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLCEwKV18fCExKX0sdG9GaWx0ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9IiMiK3AodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSkscj10LG49dGhpcy5fZ3JhZGllbnRUeXBlPyJHcmFkaWVudFR5cGUgPSAxLCAiOiIiO2lmKGUpe3ZhciBhPWMoZSk7cj0iIyIrcChhLl9yLGEuX2csYS5fYixhLl9hKX1yZXR1cm4icHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCIrbisic3RhcnRDb2xvcnN0cj0iK3QrIixlbmRDb2xvcnN0cj0iK3IrIikifSx0b1N0cmluZzpmdW5jdGlvbihlKXt2YXIgdD0hIWU7ZT1lfHx0aGlzLl9mb3JtYXQ7dmFyIHI9ITEsbj10aGlzLl9hPDEmJnRoaXMuX2E+PTA7cmV0dXJuIHR8fCFufHwiaGV4IiE9PWUmJiJoZXg2IiE9PWUmJiJoZXgzIiE9PWUmJiJoZXg0IiE9PWUmJiJoZXg4IiE9PWUmJiJuYW1lIiE9PWU/KCJyZ2IiPT09ZSYmKHI9dGhpcy50b1JnYlN0cmluZygpKSwicHJnYiI9PT1lJiYocj10aGlzLnRvUGVyY2VudGFnZVJnYlN0cmluZygpKSwiaGV4IiE9PWUmJiJoZXg2IiE9PWV8fChyPXRoaXMudG9IZXhTdHJpbmcoKSksImhleDMiPT09ZSYmKHI9dGhpcy50b0hleFN0cmluZyghMCkpLCJoZXg0Ij09PWUmJihyPXRoaXMudG9IZXg4U3RyaW5nKCEwKSksImhleDgiPT09ZSYmKHI9dGhpcy50b0hleDhTdHJpbmcoKSksIm5hbWUiPT09ZSYmKHI9dGhpcy50b05hbWUoKSksImhzbCI9PT1lJiYocj10aGlzLnRvSHNsU3RyaW5nKCkpLCJoc3YiPT09ZSYmKHI9dGhpcy50b0hzdlN0cmluZygpKSxyfHx0aGlzLnRvSGV4U3RyaW5nKCkpOiJuYW1lIj09PWUmJjA9PT10aGlzLl9hP3RoaXMudG9OYW1lKCk6dGhpcy50b1JnYlN0cmluZygpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBjKHRoaXMudG9TdHJpbmcoKSl9LF9hcHBseU1vZGlmaWNhdGlvbjpmdW5jdGlvbihlLHQpe3ZhciByPWUuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwodCkpKTtyZXR1cm4gdGhpcy5fcj1yLl9yLHRoaXMuX2c9ci5fZyx0aGlzLl9iPXIuX2IsdGhpcy5zZXRBbHBoYShyLl9hKSx0aGlzfSxsaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHYsYXJndW1lbnRzKX0sYnJpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oeSxhcmd1bWVudHMpfSxkYXJrZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oeCxhcmd1bWVudHMpfSxkZXNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGgsYXJndW1lbnRzKX0sc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZyxhcmd1bWVudHMpfSxncmV5c2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obSxhcmd1bWVudHMpfSxzcGluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGIsYXJndW1lbnRzKX0sX2FwcGx5Q29tYmluYXRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbCh0KSkpfSxhbmFsb2dvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihrLGFyZ3VtZW50cyl9LGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihfLGFyZ3VtZW50cyl9LG1vbm9jaHJvbWF0aWM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihBLGFyZ3VtZW50cyl9LHNwbGl0Y29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKE0sYXJndW1lbnRzKX0sdHJpYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih3LGFyZ3VtZW50cyl9LHRldHJhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKFQsYXJndW1lbnRzKX19LGMuZnJvbVJhdGlvPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYocltuXT0iYSI9PT1uP2Vbbl06UihlW25dKSk7ZT1yfXJldHVybiBjKGUsdCl9LGMuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISghZXx8IXQpJiZjKGUpLnRvUmdiU3RyaW5nKCk9PWModCkudG9SZ2JTdHJpbmcoKX0sYy5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gYy5mcm9tUmF0aW8oe3I6cygpLGc6cygpLGI6cygpfSl9LGMubWl4PWZ1bmN0aW9uKGUsdCxyKXtyPTA9PT1yPzA6cnx8NTA7dmFyIG49YyhlKS50b1JnYigpLGE9Yyh0KS50b1JnYigpLGk9ci8xMDA7cmV0dXJuIGMoe3I6KGEuci1uLnIpKmkrbi5yLGc6KGEuZy1uLmcpKmkrbi5nLGI6KGEuYi1uLmIpKmkrbi5iLGE6KGEuYS1uLmEpKmkrbi5hfSl9LGMucmVhZGFiaWxpdHk9ZnVuY3Rpb24odCxyKXt2YXIgbj1jKHQpLGE9YyhyKTtyZXR1cm4oZS5tYXgobi5nZXRMdW1pbmFuY2UoKSxhLmdldEx1bWluYW5jZSgpKSsuMDUpLyhlLm1pbihuLmdldEx1bWluYW5jZSgpLGEuZ2V0THVtaW5hbmNlKCkpKy4wNSl9LGMuaXNSZWFkYWJsZT1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpPWMucmVhZGFiaWxpdHkoZSx0KTtzd2l0Y2goYT0hMSwobj1mdW5jdGlvbihlKXt2YXIgdCxyO3Q9KChlPWV8fHtsZXZlbDoiQUEiLHNpemU6InNtYWxsIn0pLmxldmVsfHwiQUEiKS50b1VwcGVyQ2FzZSgpLHI9KGUuc2l6ZXx8InNtYWxsIikudG9Mb3dlckNhc2UoKSwiQUEiIT09dCYmIkFBQSIhPT10JiYodD0iQUEiKTsic21hbGwiIT09ciYmImxhcmdlIiE9PXImJihyPSJzbWFsbCIpO3JldHVybntsZXZlbDp0LHNpemU6cn19KHIpKS5sZXZlbCtuLnNpemUpe2Nhc2UiQUFzbWFsbCI6Y2FzZSJBQUFsYXJnZSI6YT1pPj00LjU7YnJlYWs7Y2FzZSJBQWxhcmdlIjphPWk+PTM7YnJlYWs7Y2FzZSJBQUFzbWFsbCI6YT1pPj03fXJldHVybiBhfSxjLm1vc3RSZWFkYWJsZT1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpLG8sbD1udWxsLHM9MDthPShyPXJ8fHt9KS5pbmNsdWRlRmFsbGJhY2tDb2xvcnMsaT1yLmxldmVsLG89ci5zaXplO2Zvcih2YXIgdT0wO3U8dC5sZW5ndGg7dSsrKShuPWMucmVhZGFiaWxpdHkoZSx0W3VdKSk+cyYmKHM9bixsPWModFt1XSkpO3JldHVybiBjLmlzUmVhZGFibGUoZSxsLHtsZXZlbDppLHNpemU6b30pfHwhYT9sOihyLmluY2x1ZGVGYWxsYmFja0NvbG9ycz0hMSxjLm1vc3RSZWFkYWJsZShlLFsiI2ZmZiIsIiMwMDAiXSxyKSl9O3ZhciBMPWMubmFtZXM9e2FsaWNlYmx1ZToiZjBmOGZmIixhbnRpcXVld2hpdGU6ImZhZWJkNyIsYXF1YToiMGZmIixhcXVhbWFyaW5lOiI3ZmZmZDQiLGF6dXJlOiJmMGZmZmYiLGJlaWdlOiJmNWY1ZGMiLGJpc3F1ZToiZmZlNGM0IixibGFjazoiMDAwIixibGFuY2hlZGFsbW9uZDoiZmZlYmNkIixibHVlOiIwMGYiLGJsdWV2aW9sZXQ6IjhhMmJlMiIsYnJvd246ImE1MmEyYSIsYnVybHl3b29kOiJkZWI4ODciLGJ1cm50c2llbm5hOiJlYTdlNWQiLGNhZGV0Ymx1ZToiNWY5ZWEwIixjaGFydHJldXNlOiI3ZmZmMDAiLGNob2NvbGF0ZToiZDI2OTFlIixjb3JhbDoiZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiNjQ5NWVkIixjb3Juc2lsazoiZmZmOGRjIixjcmltc29uOiJkYzE0M2MiLGN5YW46IjBmZiIsZGFya2JsdWU6IjAwMDA4YiIsZGFya2N5YW46IjAwOGI4YiIsZGFya2dvbGRlbnJvZDoiYjg4NjBiIixkYXJrZ3JheToiYTlhOWE5IixkYXJrZ3JlZW46IjAwNjQwMCIsZGFya2dyZXk6ImE5YTlhOSIsZGFya2toYWtpOiJiZGI3NmIiLGRhcmttYWdlbnRhOiI4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiI1NTZiMmYiLGRhcmtvcmFuZ2U6ImZmOGMwMCIsZGFya29yY2hpZDoiOTkzMmNjIixkYXJrcmVkOiI4YjAwMDAiLGRhcmtzYWxtb246ImU5OTY3YSIsZGFya3NlYWdyZWVuOiI4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IjQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IjAwY2VkMSIsZGFya3Zpb2xldDoiOTQwMGQzIixkZWVwcGluazoiZmYxNDkzIixkZWVwc2t5Ymx1ZToiMDBiZmZmIixkaW1ncmF5OiI2OTY5NjkiLGRpbWdyZXk6IjY5Njk2OSIsZG9kZ2VyYmx1ZToiMWU5MGZmIixmaXJlYnJpY2s6ImIyMjIyMiIsZmxvcmFsd2hpdGU6ImZmZmFmMCIsZm9yZXN0Z3JlZW46IjIyOGIyMiIsZnVjaHNpYToiZjBmIixnYWluc2Jvcm86ImRjZGNkYyIsZ2hvc3R3aGl0ZToiZjhmOGZmIixnb2xkOiJmZmQ3MDAiLGdvbGRlbnJvZDoiZGFhNTIwIixncmF5OiI4MDgwODAiLGdyZWVuOiIwMDgwMDAiLGdyZWVueWVsbG93OiJhZGZmMmYiLGdyZXk6IjgwODA4MCIsaG9uZXlkZXc6ImYwZmZmMCIsaG90cGluazoiZmY2OWI0IixpbmRpYW5yZWQ6ImNkNWM1YyIsaW5kaWdvOiI0YjAwODIiLGl2b3J5OiJmZmZmZjAiLGtoYWtpOiJmMGU2OGMiLGxhdmVuZGVyOiJlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6ImZmZjBmNSIsbGF3bmdyZWVuOiI3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiZmZmYWNkIixsaWdodGJsdWU6ImFkZDhlNiIsbGlnaHRjb3JhbDoiZjA4MDgwIixsaWdodGN5YW46ImUwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ImZhZmFkMiIsbGlnaHRncmF5OiJkM2QzZDMiLGxpZ2h0Z3JlZW46IjkwZWU5MCIsbGlnaHRncmV5OiJkM2QzZDMiLGxpZ2h0cGluazoiZmZiNmMxIixsaWdodHNhbG1vbjoiZmZhMDdhIixsaWdodHNlYWdyZWVuOiIyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiODdjZWZhIixsaWdodHNsYXRlZ3JheToiNzg5IixsaWdodHNsYXRlZ3JleToiNzg5IixsaWdodHN0ZWVsYmx1ZToiYjBjNGRlIixsaWdodHllbGxvdzoiZmZmZmUwIixsaW1lOiIwZjAiLGxpbWVncmVlbjoiMzJjZDMyIixsaW5lbjoiZmFmMGU2IixtYWdlbnRhOiJmMGYiLG1hcm9vbjoiODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiI2NmNkYWEiLG1lZGl1bWJsdWU6IjAwMDBjZCIsbWVkaXVtb3JjaGlkOiJiYTU1ZDMiLG1lZGl1bXB1cnBsZToiOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IjdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IjAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiI0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiYzcxNTg1IixtaWRuaWdodGJsdWU6IjE5MTk3MCIsbWludGNyZWFtOiJmNWZmZmEiLG1pc3R5cm9zZToiZmZlNGUxIixtb2NjYXNpbjoiZmZlNGI1IixuYXZham93aGl0ZToiZmZkZWFkIixuYXZ5OiIwMDAwODAiLG9sZGxhY2U6ImZkZjVlNiIsb2xpdmU6IjgwODAwMCIsb2xpdmVkcmFiOiI2YjhlMjMiLG9yYW5nZToiZmZhNTAwIixvcmFuZ2VyZWQ6ImZmNDUwMCIsb3JjaGlkOiJkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6ImVlZThhYSIscGFsZWdyZWVuOiI5OGZiOTgiLHBhbGV0dXJxdW9pc2U6ImFmZWVlZSIscGFsZXZpb2xldHJlZDoiZGI3MDkzIixwYXBheWF3aGlwOiJmZmVmZDUiLHBlYWNocHVmZjoiZmZkYWI5IixwZXJ1OiJjZDg1M2YiLHBpbms6ImZmYzBjYiIscGx1bToiZGRhMGRkIixwb3dkZXJibHVlOiJiMGUwZTYiLHB1cnBsZToiODAwMDgwIixyZWJlY2NhcHVycGxlOiI2NjMzOTkiLHJlZDoiZjAwIixyb3N5YnJvd246ImJjOGY4ZiIscm95YWxibHVlOiI0MTY5ZTEiLHNhZGRsZWJyb3duOiI4YjQ1MTMiLHNhbG1vbjoiZmE4MDcyIixzYW5keWJyb3duOiJmNGE0NjAiLHNlYWdyZWVuOiIyZThiNTciLHNlYXNoZWxsOiJmZmY1ZWUiLHNpZW5uYToiYTA1MjJkIixzaWx2ZXI6ImMwYzBjMCIsc2t5Ymx1ZToiODdjZWViIixzbGF0ZWJsdWU6IjZhNWFjZCIsc2xhdGVncmF5OiI3MDgwOTAiLHNsYXRlZ3JleToiNzA4MDkwIixzbm93OiJmZmZhZmEiLHNwcmluZ2dyZWVuOiIwMGZmN2YiLHN0ZWVsYmx1ZToiNDY4MmI0Iix0YW46ImQyYjQ4YyIsdGVhbDoiMDA4MDgwIix0aGlzdGxlOiJkOGJmZDgiLHRvbWF0bzoiZmY2MzQ3Iix0dXJxdW9pc2U6IjQwZTBkMCIsdmlvbGV0OiJlZTgyZWUiLHdoZWF0OiJmNWRlYjMiLHdoaXRlOiJmZmYiLHdoaXRlc21va2U6ImY1ZjVmNSIseWVsbG93OiJmZjAiLHllbGxvd2dyZWVuOiI5YWNkMzIifSxTPWMuaGV4TmFtZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307Zm9yKHZhciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKHRbZVtyXV09cik7cmV0dXJuIHR9KEwpO2Z1bmN0aW9uIEQoZSl7cmV0dXJuIGU9cGFyc2VGbG9hdChlKSwoaXNOYU4oZSl8fGU8MHx8ZT4xKSYmKGU9MSksZX1mdW5jdGlvbiBDKHQscil7KGZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmLTEhPWUuaW5kZXhPZigiLiIpJiYxPT09cGFyc2VGbG9hdChlKX0pKHQpJiYodD0iMTAwJSIpO3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmLTEhPWUuaW5kZXhPZigiJSIpfSh0KTtyZXR1cm4gdD1vKHIsbCgwLHBhcnNlRmxvYXQodCkpKSxuJiYodD1wYXJzZUludCh0KnIsMTApLzEwMCksZS5hYnModC1yKTwxZS02PzE6dCVyL3BhcnNlRmxvYXQocil9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gbygxLGwoMCxlKSl9ZnVuY3Rpb24gUChlKXtyZXR1cm4gcGFyc2VJbnQoZSwxNil9ZnVuY3Rpb24gSShlKXtyZXR1cm4gMT09ZS5sZW5ndGg/IjAiK2U6IiIrZX1mdW5jdGlvbiBSKGUpe3JldHVybiBlPD0xJiYoZT0xMDAqZSsiJSIpLGV9ZnVuY3Rpb24geih0KXtyZXR1cm4gZS5yb3VuZCgyNTUqcGFyc2VGbG9hdCh0KSkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIE4oZSl7cmV0dXJuIFAoZSkvMjU1fXZhciBGLEUsaixIPShFPSJbXFxzfFxcKF0rKCIrKEY9Iig/OlstXFwrXT9cXGQqXFwuXFxkKyU/KXwoPzpbLVxcK10/XFxkKyU/KSIpKyIpWyx8XFxzXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpXFxzKlxcKT8iLGo9IltcXHN8XFwoXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpXFxzKlxcKT8iLHtDU1NfVU5JVDpuZXcgUmVnRXhwKEYpLHJnYjpuZXcgUmVnRXhwKCJyZ2IiK0UpLHJnYmE6bmV3IFJlZ0V4cCgicmdiYSIraiksaHNsOm5ldyBSZWdFeHAoImhzbCIrRSksaHNsYTpuZXcgUmVnRXhwKCJoc2xhIitqKSxoc3Y6bmV3IFJlZ0V4cCgiaHN2IitFKSxoc3ZhOm5ldyBSZWdFeHAoImhzdmEiK2opLGhleDM6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDY6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvLGhleDQ6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg4Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC99KTtmdW5jdGlvbiBCKGUpe3JldHVybiEhSC5DU1NfVU5JVC5leGVjKGUpfXZvaWQgMCE9PXQmJnQuZXhwb3J0cz90LmV4cG9ydHM9Yzp3aW5kb3cudGlueWNvbG9yPWN9KE1hdGgpfSx7fV0sNjg6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKCIuLi9tYWluIiksYT1lKCJvYmplY3QtYXNzaWduIiksaT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyhlKXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW2V8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixhKG8ucHJvdG90eXBlLHtuYW1lOiJDaGluZXNlIixqZEVwb2NoOjE3MjE0MjUuNSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJDaGluZXNlIixlcG9jaHM6WyJCRUMiLCJFQyJdLG1vbnRoTnVtYmVyczpmdW5jdGlvbihlLHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIHI9ZS5tYXRjaChzKTtyZXR1cm4gcj9yWzBdOiIifXZhciBuPXRoaXMuX3ZhbGlkYXRlWWVhcihlKSxhPWUubW9udGgoKSxpPSIiK3RoaXMudG9DaGluZXNlTW9udGgobixhKTtyZXR1cm4gdCYmaS5sZW5ndGg8MiYmKGk9IjAiK2kpLHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKG4sYSkmJihpKz0iaSIpLGl9LG1vbnRoTmFtZXM6ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgdD1lLm1hdGNoKGMpO3JldHVybiB0P3RbMF06IiJ9dmFyIHI9dGhpcy5fdmFsaWRhdGVZZWFyKGUpLG49ZS5tb250aCgpLGE9WyJcdTRlMDBcdTY3MDgiLCJcdTRlOGNcdTY3MDgiLCJcdTRlMDlcdTY3MDgiLCJcdTU2ZGJcdTY3MDgiLCJcdTRlOTRcdTY3MDgiLCJcdTUxNmRcdTY3MDgiLCJcdTRlMDNcdTY3MDgiLCJcdTUxNmJcdTY3MDgiLCJcdTRlNWRcdTY3MDgiLCJcdTUzNDFcdTY3MDgiLCJcdTUzNDFcdTRlMDBcdTY3MDgiLCJcdTUzNDFcdTRlOGNcdTY3MDgiXVt0aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihhPSJcdTk1ZjAiK2EpLGF9LG1vbnRoTmFtZXNTaG9ydDpmdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciB0PWUubWF0Y2godSk7cmV0dXJuIHQ/dFswXToiIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIoZSksbj1lLm1vbnRoKCksYT1bIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdW3RoaXMudG9DaGluZXNlTW9udGgocixuKS0xXTtyZXR1cm4gdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgocixuKSYmKGE9Ilx1OTVmMCIrYSksYX0scGFyc2VNb250aDpmdW5jdGlvbihlLHQpe2U9dGhpcy5fdmFsaWRhdGVZZWFyKGUpO3ZhciByLG49cGFyc2VJbnQodCk7aWYoaXNOYU4obikpIlx1OTVmMCI9PT10WzBdJiYocj0hMCx0PXQuc3Vic3RyaW5nKDEpKSwiXHU2NzA4Ij09PXRbdC5sZW5ndGgtMV0mJih0PXQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMSkpLG49MStbIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdLmluZGV4T2YodCk7ZWxzZXt2YXIgYT10W3QubGVuZ3RoLTFdO3I9ImkiPT09YXx8IkkiPT09YX1yZXR1cm4gdGhpcy50b01vbnRoSW5kZXgoZSxuLHIpfSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sX3ZhbGlkYXRlWWVhcjpmdW5jdGlvbihlLHQpe2lmKGUueWVhciYmKGU9ZS55ZWFyKCkpLCJudW1iZXIiIT10eXBlb2YgZXx8ZTwxODg4fHxlPjIxMTEpdGhyb3cgdC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gZX0sdG9Nb250aEluZGV4OmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10aGlzLmludGVyY2FsYXJ5TW9udGgoZSk7aWYociYmdCE9PWF8fHQ8MXx8dD4xMil0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gYT8hciYmdDw9YT90LTE6dDp0LTF9LHRvQ2hpbmVzZU1vbnRoOmZ1bmN0aW9uKGUsdCl7ZS55ZWFyJiYodD0oZT1lLnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKGUpO2lmKHQ8MHx8dD4ocj8xMjoxMSkpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHI/dDxyP3QrMTp0OnQrMX0saW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbihlKXtyZXR1cm4gZT10aGlzLl92YWxpZGF0ZVllYXIoZSksZFtlLWRbMF1dPj4xM30saXNJbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKGUsdCl7ZS55ZWFyJiYodD0oZT1lLnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKGUpO3JldHVybiEhciYmcj09PXR9LGxlYXBZZWFyOmZ1bmN0aW9uKGUpe3JldHVybiAwIT09dGhpcy5pbnRlcmNhbGFyeU1vbnRoKGUpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYSxvPXRoaXMuX3ZhbGlkYXRlWWVhcihlLG4ubG9jYWwuaW52YWxpZHllYXIpLGw9ZltvLWZbMF1dLHM9bD4+OSY0MDk1LGM9bD4+NSYxNSx1PTMxJmw7KGE9aS5uZXdEYXRlKHMsYyx1KSkuYWRkKDQtKGEuZGF5T2ZXZWVrKCl8fDcpLCJkIik7dmFyIGQ9dGhpcy50b0pEKGUsdCxyKS1hLnRvSkQoKTtyZXR1cm4gMStNYXRoLmZsb29yKGQvNyl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sZWFwWWVhcihlKT8xMzoxMn0sZGF5c0luTW9udGg6ZnVuY3Rpb24oZSx0KXtlLnllYXImJih0PWUubW9udGgoKSxlPWUueWVhcigpKSxlPXRoaXMuX3ZhbGlkYXRlWWVhcihlKTt2YXIgcj1kW2UtZFswXV07aWYodD4ocj4+MTM/MTI6MTEpKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByJjE8PDEyLXQ/MzA6Mjl9LHdlZWtEYXk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybih0aGlzLmRheU9mV2VlayhlLHQscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKGUsbCxyLG4ubG9jYWwuaW52YWxpZERhdGUpO2U9dGhpcy5fdmFsaWRhdGVZZWFyKGEueWVhcigpKSx0PWEubW9udGgoKSxyPWEuZGF5KCk7dmFyIG89dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgoZSx0KSxsPXRoaXMudG9DaGluZXNlTW9udGgoZSx0KSxzPWZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGksbyxsO2lmKCJvYmplY3QiPT10eXBlb2YgZSlvPWUsaT10fHx7fTtlbHNle3ZhciBzO2lmKCEoIm51bWJlciI9PXR5cGVvZiBlJiZlPj0xODg4JiZlPD0yMTExKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTtpZighKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MSYmdDw9MTIpKXRocm93IG5ldyBFcnJvcigiTHVuYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTtpZighKCJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzApKXRocm93IG5ldyBFcnJvcigiTHVuYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMwIik7Im9iamVjdCI9PXR5cGVvZiBuPyhzPSExLGk9bik6KHM9ISFuLGk9YXx8e30pLG89e3llYXI6ZSxtb250aDp0LGRheTpyLGlzSW50ZXJjYWxhcnk6c319bD1vLmRheS0xO3ZhciBjLHU9ZFtvLnllYXItZFswXV0scD11Pj4xMztjPXAmJihvLm1vbnRoPnB8fG8uaXNJbnRlcmNhbGFyeSk/by5tb250aDpvLm1vbnRoLTE7Zm9yKHZhciBoPTA7aDxjO2grKyl7bCs9dSYxPDwxMi1oPzMwOjI5fXZhciBnPWZbby55ZWFyLWZbMF1dLG09bmV3IERhdGUoZz4+OSY0MDk1LChnPj41JjE1KS0xLCgzMSZnKStsKTtyZXR1cm4gaS55ZWFyPW0uZ2V0RnVsbFllYXIoKSxpLm1vbnRoPTErbS5nZXRNb250aCgpLGkuZGF5PW0uZ2V0RGF0ZSgpLGl9KGUsbCxyLG8pO3JldHVybiBpLnRvSkQocy55ZWFyLHMubW9udGgscy5kYXkpfSxmcm9tSkQ6ZnVuY3Rpb24oZSl7dmFyIHQ9aS5mcm9tSkQoZSkscj1mdW5jdGlvbihlLHQscixuKXt2YXIgYSxpO2lmKCJvYmplY3QiPT10eXBlb2YgZSlhPWUsaT10fHx7fTtlbHNle2lmKCEoIm51bWJlciI9PXR5cGVvZiBlJiZlPj0xODg4JiZlPD0yMTExKSl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTtpZighKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MSYmdDw9MTIpKXRocm93IG5ldyBFcnJvcigiU29sYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTtpZighKCJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzEpKXRocm93IG5ldyBFcnJvcigiU29sYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMxIik7YT17eWVhcjplLG1vbnRoOnQsZGF5OnJ9LGk9bnx8e319dmFyIG89ZlthLnllYXItZlswXV0sbD1hLnllYXI8PDl8YS5tb250aDw8NXxhLmRheTtpLnllYXI9bD49bz9hLnllYXI6YS55ZWFyLTEsbz1mW2kueWVhci1mWzBdXTt2YXIgcyxjPW5ldyBEYXRlKG8+PjkmNDA5NSwobz4+NSYxNSktMSwzMSZvKSx1PW5ldyBEYXRlKGEueWVhcixhLm1vbnRoLTEsYS5kYXkpO3M9TWF0aC5yb3VuZCgodS1jKS84NjRlNSk7dmFyIHAsaD1kW2kueWVhci1kWzBdXTtmb3IocD0wO3A8MTM7cCsrKXt2YXIgZz1oJjE8PDEyLXA/MzA6Mjk7aWYoczxnKWJyZWFrO3MtPWd9dmFyIG09aD4+MTM7IW18fHA8bT8oaS5pc0ludGVyY2FsYXJ5PSExLGkubW9udGg9MStwKTpwPT09bT8oaS5pc0ludGVyY2FsYXJ5PSEwLGkubW9udGg9cCk6KGkuaXNJbnRlcmNhbGFyeT0hMSxpLm1vbnRoPXApO3JldHVybiBpLmRheT0xK3MsaX0odC55ZWFyKCksdC5tb250aCgpLHQuZGF5KCkpLG49dGhpcy50b01vbnRoSW5kZXgoci55ZWFyLHIubW9udGgsci5pc0ludGVyY2FsYXJ5KTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIueWVhcixuLHIuZGF5KX0sZnJvbVN0cmluZzpmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKGwpLHI9dGhpcy5fdmFsaWRhdGVZZWFyKCt0WzFdKSxuPSt0WzJdLGE9ISF0WzNdLGk9dGhpcy50b01vbnRoSW5kZXgocixuLGEpLG89K3RbNF07cmV0dXJuIHRoaXMubmV3RGF0ZShyLGksbyl9LGFkZDpmdW5jdGlvbihlLHQscil7dmFyIG49ZS55ZWFyKCksYT1lLm1vbnRoKCksaT10aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGEpLGw9dGhpcy50b0NoaW5lc2VNb250aChuLGEpLHM9T2JqZWN0LmdldFByb3RvdHlwZU9mKG8ucHJvdG90eXBlKS5hZGQuY2FsbCh0aGlzLGUsdCxyKTtpZigieSI9PT1yKXt2YXIgYz1zLnllYXIoKSx1PXMubW9udGgoKSxkPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKGMsbCksZj1pJiZkP3RoaXMudG9Nb250aEluZGV4KGMsbCwhMCk6dGhpcy50b01vbnRoSW5kZXgoYyxsLCExKTtmIT09dSYmcy5tb250aChmKX1yZXR1cm4gc319KTt2YXIgbD0vXlxzKigtP1xkXGRcZFxkfFxkXGQpWy0vXShcZD9cZCkoW2lJXT8pWy0vXShcZD9cZCkvbSxzPS9eXGQ/XGRbaUldPy9tLGM9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdP1x1NjcwOC9tLHU9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdPy9tO24uY2FsZW5kYXJzLmNoaW5lc2U9bzt2YXIgZD1bMTg4Nyw1NzgwLDU4MDIsMTkxNTcsMjc0Miw1MDM1OSwxMTk4LDI2NDYsNDYzNzgsNzQ2NiwzNDEyLDMwMTIyLDU0ODIsNjc5NDksMjM5Niw1Mjk0LDQzNTk3LDY3MzIsNjk1NCwzNjE4MSwyNzcyLDQ5NTQsMTg3ODEsMjM5Niw1NDQyNyw1Mjc0LDY3MzAsNDc3ODEsNTgwMCw2ODY4LDIxMjEwLDQ3OTAsNTk3MDMsMjM1MCw1MjcwLDQ2NjY3LDM0MDIsMzQ5NiwzODMyNSwxMzg4LDQ3ODIsMTg3MzUsMjM1MCw1MjM3NCw2ODA0LDc0OTgsNDQ0NTcsMjkwNiwxMzg4LDI5Mjk0LDQ3MDAsNjM3ODksNjQ0Miw2ODA0LDU2MTM4LDU4MDIsMjc3MiwzODIzNSwxMjEwLDQ2OTgsMjI4MjcsNTQxOCw2MzEyNSwzNDc2LDU4MDIsNDM3MDEsMjQ4NCw1MzAyLDI3MjIzLDI2NDYsNzA5NTQsNzQ2NiwzNDEyLDU0Njk4LDU0ODIsMjQxMiwzODA2Miw1Mjk0LDI2MzYsMzIwMzgsNjk1NCw2MDI0NSwyNzcyLDQ4MjYsNDMzNTcsMjM5NCw1Mjc0LDM5NTAxLDY3MzAsNzIzNTcsNTgwMCw1ODQ0LDUzOTc4LDQ3OTAsMjM1OCwzODAzOSw1MjcwLDg3NjI3LDM0MDIsMzQ5Niw1NDcwOCw1NDg0LDQ3ODIsNDMzMTEsMjM1MCwzMjIyLDI3OTc4LDc0OTgsNjg5NjUsMjkwNCw1NDg0LDQ1Njc3LDQ3MDAsNjQ0NCwzOTU3Myw2ODA0LDY5ODYsMTkyODUsMjc3Miw2MjgxMSwxMjEwLDQ2OTgsNDc0MDMsNTQxOCw1NzgwLDM4NTcwLDU1NDYsNzY0NjksMjQyMCw1MzAyLDUxNzk5LDI2NDYsNTQxNCwzNjUwMSwzNDEyLDU1NDYsMTg4NjksMjQxMiw1NDQ0Niw1Mjc2LDY3MzIsNDg0MjIsNjgyMiwyOTAwLDI4MDEwLDQ4MjYsOTI1MDksMjM5NCw1Mjc0LDU1ODgzLDY3MzAsNjgyMCw0Nzk1Niw1ODEyLDI3NzgsMTg3NzksMjM1OCw2MjYxNSw1MjcwLDU0NTAsNDY3NTcsMzQ5Miw1NTU2LDI3MzE4LDQ3MTgsNjc4ODcsMjM1MCwzMjIyLDUyNTU0LDc0OTgsMzQyOCwzODI1Miw1NDY4LDQ3MDAsMzEwMjIsNjQ0NCw2NDE0OSw2ODA0LDY5ODYsNDM4NjEsMjc3Miw1MzM4LDM1NDIxLDI2NTAsNzA5NTUsNTQxOCw1NzgwLDU0OTU0LDU1NDYsMjc0MCwzODA3NCw1MzAyLDI2NDYsMjk5OTEsMzM2Niw2MTAxMSwzNDEyLDU1NDYsNDM0NDUsMjQxMiw1Mjk0LDM1NDA2LDY3MzIsNzI5OTgsNjgyMCw2OTk2LDUyNTg2LDI3NzgsMjM5NiwzODA0NSw1Mjc0LDY2OTgsMjMzMzMsNjgyMCw2NDMzOCw1ODEyLDI3NDYsNDMzNTUsMjM1OCw1MjcwLDM5NDk5LDU0NTAsNzk1MjUsMzQ5Miw1NTQ4XSxmPVsxODg3LDk2NjczMiw5NjcyMzEsOTY3NzMzLDk2ODI2NSw5Njg3NjYsOTY5Mjk3LDk2OTc5OCw5NzAyOTgsOTcwODI5LDk3MTMzMCw5NzE4MzAsOTcyMzYyLDk3Mjg2Myw5NzMzOTUsOTczODk2LDk3NDM5Nyw5NzQ5MjgsOTc1NDI4LDk3NTkyOSw5NzY0NjEsOTc2OTYyLDk3NzQ2Miw5Nzc5OTQsOTc4NDk0LDk3OTAyNiw5Nzk1MjYsOTgwMDI2LDk4MDU1OCw5ODEwNTksOTgxNTU5LDk4MjA5MSw5ODI1OTMsOTgzMTI0LDk4MzYyNCw5ODQxMjQsOTg0NjU2LDk4NTE1Nyw5ODU2NTYsOTg2MTg5LDk4NjY5MCw5ODcxOTEsOTg3NzIyLDk4ODIyMiw5ODg3NTMsOTg5MjU0LDk4OTc1NCw5OTAyODYsOTkwNzg4LDk5MTI4OCw5OTE4MTksOTkyMzE5LDk5Mjg1MSw5OTMzNTIsOTkzODUxLDk5NDM4Myw5OTQ4ODUsOTk1Mzg1LDk5NTkxNyw5OTY0MTgsOTk2OTE4LDk5NzQ1MCw5OTc5NDksOTk4NDgxLDk5ODk4Miw5OTk0ODMsMTAwMDAxNCwxMDAwNTE1LDEwMDEwMTYsMTAwMTU0OCwxMDAyMDQ3LDEwMDI1NzgsMTAwMzA4MCwxMDAzNTgwLDEwMDQxMTEsMTAwNDYxMywxMDA1MTEzLDEwMDU2NDUsMTAwNjE0NiwxMDA2NjQ1LDEwMDcxNzcsMTAwNzY3OCwxMDA4MjA5LDEwMDg3MTAsMTAwOTIxMSwxMDA5NzQzLDEwMTAyNDMsMTAxMDc0MywxMDExMjc1LDEwMTE3NzUsMTAxMjMwNiwxMDEyODA3LDEwMTMzMDgsMTAxMzg0MCwxMDE0MzQxLDEwMTQ4NDEsMTAxNTM3MywxMDE1ODc0LDEwMTY0MDQsMTAxNjkwNSwxMDE3NDA1LDEwMTc5MzcsMTAxODQzOCwxMDE4OTM5LDEwMTk0NzEsMTAxOTk3MiwxMDIwNDcxLDEwMjEwMDIsMTAyMTUwMywxMDIyMDM1LDEwMjI1MzUsMTAyMzAzNiwxMDIzNTY4LDEwMjQwNjksMTAyNDU2OCwxMDI1MTAwLDEwMjU2MDEsMTAyNjEwMiwxMDI2NjMzLDEwMjcxMzMsMTAyNzY2NiwxMDI4MTY3LDEwMjg2NjYsMTAyOTE5OCwxMDI5Njk5LDEwMzAxOTksMTAzMDczMCwxMDMxMjMxLDEwMzE3NjMsMTAzMjI2NCwxMDMyNzY0LDEwMzMyOTYsMTAzMzc5NywxMDM0Mjk3LDEwMzQ4MjgsMTAzNTMyOSwxMDM1ODMwLDEwMzYzNjIsMTAzNjg2MSwxMDM3MzkzLDEwMzc4OTQsMTAzODM5NCwxMDM4OTI1LDEwMzk0MjcsMTAzOTkyNywxMDQwNDU5LDEwNDA5NTksMTA0MTQ5MSwxMDQxOTkyLDEwNDI0OTIsMTA0MzAyMywxMDQzNTI0LDEwNDQwMjQsMTA0NDU1NiwxMDQ1MDU3LDEwNDU1NTgsMTA0NjA5MCwxMDQ2NTkwLDEwNDcxMjEsMTA0NzYyMiwxMDQ4MTIyLDEwNDg2NTQsMTA0OTE1NCwxMDQ5NjU1LDEwNTAxODcsMTA1MDY4OSwxMDUxMjE5LDEwNTE3MjAsMTA1MjIyMCwxMDUyNzUxLDEwNTMyNTIsMTA1Mzc1MiwxMDU0Mjg0LDEwNTQ3ODYsMTA1NTI4NSwxMDU1ODE3LDEwNTYzMTcsMTA1Njg0OSwxMDU3MzQ5LDEwNTc4NTAsMTA1ODM4MiwxMDU4ODgzLDEwNTkzODMsMTA1OTkxNSwxMDYwNDE1LDEwNjA5NDcsMTA2MTQ0NywxMDYxOTQ3LDEwNjI0NzksMTA2Mjk4MSwxMDYzNDgwLDEwNjQwMTIsMTA2NDUxNCwxMDY1MDE0LDEwNjU1NDUsMTA2NjA0NSwxMDY2NTc3LDEwNjcwNzgsMTA2NzU3OCwxMDY4MTEwLDEwNjg2MTEsMTA2OTExMiwxMDY5NjQyLDEwNzAxNDIsMTA3MDY3NCwxMDcxMTc1LDEwNzE2NzUsMTA3MjIwNywxMDcyNzA5LDEwNzMyMDksMTA3Mzc0MCwxMDc0MjQxLDEwNzQ3NDEsMTA3NTI3MywxMDc1NzczLDEwNzYzMDUsMTA3NjgwNywxMDc3MzA4LDEwNzc4MzksMTA3ODM0MCwxMDc4ODQwLDEwNzkzNzIsMTA3OTg3MSwxMDgwNDAzLDEwODA5MDRdfSx7Ii4uL21haW4iOjgyLCJvYmplY3QtYXNzaWduIjo1NX1dLDY5OltmdW5jdGlvbihlLHQscil7dmFyIG49ZSgiLi4vbWFpbiIpLGE9ZSgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkoZSl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1tlfHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1pLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsYShpLnByb3RvdHlwZSx7bmFtZToiQ29wdGljIixqZEVwb2NoOjE4MjUwMjkuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkNvcHRpYyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiVGhvdXQiLCJQYW9waSIsIkhhdGhvciIsIktvaWFrIiwiVG9iaSIsIk1lc2hpciIsIlBhcmVtaGF0IiwiUGFyZW1vdWRlIiwiUGFzaG9ucyIsIlBhb25pIiwiRXBpcCIsIk1lc29yaSIsIlBpIEtvZ2kgRW5hdm90Il0sbW9udGhOYW1lc1Nob3J0OlsiVGhvIiwiUGFvIiwiSGF0aCIsIktvaSIsIlRvYiIsIk1lc2giLCJQYXQiLCJQYWQiLCJQYXNoIiwiUGFvIiwiRXBpIiwiTWVzbyIsIlBpSyJdLGRheU5hbWVzOlsiVGt5cmlha2EiLCJQZXNuYXUiLCJQc2hvbWVudCIsIlBlZnRvb3UiLCJQdGlvdSIsIlBzb291IiwiUHNhYmJhdG9uIl0sZGF5TmFtZXNTaG9ydDpbIlRreSIsIlBlcyIsIlBzaCIsIlBlZiIsIlB0aSIsIlBzbyIsIlBzYSJdLGRheU5hbWVzTWluOlsiVGsiLCJQZXMiLCJQc2giLCJQZWYiLCJQdCIsIlBzbyIsIlBzYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92YWxpZGF0ZShlLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKGU9dC55ZWFyKCkrKHQueWVhcigpPDA/MTowKSklND09M3x8ZSU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZShlLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcnx8bi5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5uZXdEYXRlKGUsdCxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fdmFsaWRhdGUoZSx0LHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbihlLHQscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKGUsdCxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUoZSx0LHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKGU9YS55ZWFyKCkpPDAmJmUrKyxhLmRheSgpKzMwKihhLm1vbnRoKCktMSkrMzY1KihlLTEpK01hdGguZmxvb3IoZS80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKGUpe3ZhciB0PU1hdGguZmxvb3IoZSkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigodC1NYXRoLmZsb29yKCh0KzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sdD1NYXRoLmZsb29yKGUpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IodC8zMCkrMSxhPXQtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixhKX19KSxuLmNhbGVuZGFycy5jb3B0aWM9aX0seyIuLi9tYWluIjo4Miwib2JqZWN0LWFzc2lnbiI6NTV9XSw3MDpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoIi4uL21haW4iKSxhPWUoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBpKGUpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbZXx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19aS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGEoaS5wcm90b3R5cGUse25hbWU6IkRpc2N3b3JsZCIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlsxNiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiRGlzY3dvcmxkIixlcG9jaHM6WyJCVUMiLCJVQyJdLG1vbnRoTmFtZXM6WyJJY2siLCJPZmZsZSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJHcnVuZSIsIkF1Z3VzdCIsIlNwdW5lIiwiU2VrdG9iZXIiLCJFbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSWNrIiwiT2ZmIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiR3J1IiwiQXVnIiwiU3B1IiwiU2VrIiwiRW1iIiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJPY3RlZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiT2N0IiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk9jIiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Mixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZShlLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksITF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUoZSx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDEzfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZShlLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksNDAwfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLm5ld0RhdGUoZSx0LHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvOCkrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl92YWxpZGF0ZShlLHQsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV19LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gOH0sZGF5T2ZXZWVrOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4odGhpcy5fdmFsaWRhdGUoZSx0LHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCkrMSklOH0sd2Vla0RheTpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5kYXlPZldlZWsoZSx0LHIpO3JldHVybiBuPj0yJiZuPD02fSxleHRyYUluZm86ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKGUsdCxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybntjZW50dXJ5Om9bTWF0aC5mbG9vcigoYS55ZWFyKCktMSkvMTAwKSsxXXx8IiJ9fSx0b0pEOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10aGlzLl92YWxpZGF0ZShlLHQscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gZT1hLnllYXIoKSsoYS55ZWFyKCk8MD8xOjApLHQ9YS5tb250aCgpLChyPWEuZGF5KCkpKyh0PjE/MTY6MCkrKHQ+Mj8zMioodC0yKTowKSs0MDAqKGUtMSkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbihlKXtlPU1hdGguZmxvb3IoZSsuNSktTWF0aC5mbG9vcih0aGlzLmpkRXBvY2gpLTE7dmFyIHQ9TWF0aC5mbG9vcihlLzQwMCkrMTtlLT00MDAqKHQtMSksZSs9ZT4xNT8xNjowO3ZhciByPU1hdGguZmxvb3IoZS8zMikrMSxuPWUtMzIqKHItMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHQ8PTA/dC0xOnQscixuKX19KTt2YXIgbz17MjA6IkZydWl0YmF0IiwyMToiQW5jaG92eSJ9O24uY2FsZW5kYXJzLmRpc2N3b3JsZD1pfSx7Ii4uL21haW4iOjgyLCJvYmplY3QtYXNzaWduIjo1NX1dLDcxOltmdW5jdGlvbihlLHQscil7dmFyIG49ZSgiLi4vbWFpbiIpLGE9ZSgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkoZSl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1tlfHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1pLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsYShpLnByb3RvdHlwZSx7bmFtZToiRXRoaW9waWFuIixqZEVwb2NoOjE3MjQyMjAuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkV0aGlvcGlhbiIsZXBvY2hzOlsiQkVFIiwiRUUiXSxtb250aE5hbWVzOlsiTWVza2VyZW0iLCJUaWtlbWV0IiwiSGlkYXIiLCJUYWhlc2FzIiwiVGlyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc2UiLCJQYWd1bWUiXSxtb250aE5hbWVzU2hvcnQ6WyJNZXMiLCJUaWsiLCJIaWQiLCJUYWgiLCJUaXIiLCJZZWsiLCJNZWciLCJNaWEiLCJHZW4iLCJTZW4iLCJIYW0iLCJOZWgiLCJQYWciXSxkYXlOYW1lczpbIkVodWQiLCJTZWdubyIsIk1ha3NlZ25vIiwiSXJvYiIsIkhhbXVzIiwiQXJiIiwiS2lkYW1lIl0sZGF5TmFtZXNTaG9ydDpbIkVodSIsIlNlZyIsIk1hayIsIklybyIsIkhhbSIsIkFyYiIsIktpZCJdLGRheU5hbWVzTWluOlsiRWgiLCJTZSIsIk1hIiwiSXIiLCJIYSIsIkFyIiwiS2kiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdmFsaWRhdGUoZSx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybihlPXQueWVhcigpKyh0LnllYXIoKTwwPzE6MCkpJTQ9PTN8fGUlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUoZSx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMubmV3RGF0ZShlLHQscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKGUsdCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTM9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybih0aGlzLmRheU9mV2VlayhlLHQscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKGUsdCxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybihlPWEueWVhcigpKTwwJiZlKyssYS5kYXkoKSszMCooYS5tb250aCgpLTEpKzM2NSooZS0xKStNYXRoLmZsb29yKGUvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbihlKXt2YXIgdD1NYXRoLmZsb29yKGUpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKHQtTWF0aC5mbG9vcigodCszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLHQ9TWF0aC5mbG9vcihlKSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKHQvMzApKzEsYT10LTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4sYSl9fSksbi5jYWxlbmRhcnMuZXRoaW9waWFuPWl9LHsiLi4vbWFpbiI6ODIsIm9iamVjdC1hc3NpZ24iOjU1fV0sNzI6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKCIuLi9tYWluIiksYT1lKCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gaShlKXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW2V8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZS10Kk1hdGguZmxvb3IoZS90KX1pLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsYShpLnByb3RvdHlwZSx7bmFtZToiSGVicmV3IixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkhlYnJldyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW1tdXoiLCJBdiIsIkVsdWwiLCJUaXNocmVpIiwiQ2hlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIiLCJBZGFyIElJIl0sbW9udGhOYW1lc1Nob3J0OlsiTmlzIiwiSXlhIiwiU2l2IiwiVGFtIiwiQXYiLCJFbHUiLCJUaXMiLCJDaGUiLCJLaXMiLCJUZXYiLCJTaGUiLCJBZGEiLCJBZDIiXSxkYXlOYW1lczpbIllvbSBSaXNob24iLCJZb20gU2hlbmkiLCJZb20gU2hsaXNoaSIsIllvbSBSZXZpJ2kiLCJZb20gQ2hhbWlzaGkiLCJZb20gU2hpc2hpIiwiWW9tIFNoYWJiYXQiXSxkYXlOYW1lc1Nob3J0OlsiUmlzIiwiU2hlIiwiU2hsIiwiUmV2IiwiQ2hhIiwiU2hpIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJSaSIsIlNoZSIsIlNobCIsIlJlIiwiQ2giLCJTaGkiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdmFsaWRhdGUoZSx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcih0LnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbihlKXtyZXR1cm4gbyg3KihlPWU8MD9lKzE6ZSkrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZShlLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIoZS55ZWFyP2UueWVhcigpOmUpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLm5ld0RhdGUoZSx0LHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZT10aGlzLl92YWxpZGF0ZShlLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHRoaXMudG9KRCgtMT09PWU/MTplKzEsNywxKS10aGlzLnRvSkQoZSw3LDEpfSxkYXlzSW5Nb250aDpmdW5jdGlvbihlLHQpe3JldHVybiBlLnllYXImJih0PWUubW9udGgoKSxlPWUueWVhcigpKSx0aGlzLl92YWxpZGF0ZShlLHQsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDEyPT09dCYmdGhpcy5sZWFwWWVhcihlKXx8OD09PXQmJjU9PT1vKHRoaXMuZGF5c0luWWVhcihlKSwxMCk/MzA6OT09PXQmJjM9PT1vKHRoaXMuZGF5c0luWWVhcihlKSwxMCk/Mjk6dGhpcy5kYXlzUGVyTW9udGhbdC0xXX0sd2Vla0RheTpmdW5jdGlvbihlLHQscil7cmV0dXJuIDYhPT10aGlzLmRheU9mV2VlayhlLHQscil9LGV4dHJhSW5mbzpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUoZSx0LHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJue3llYXJUeXBlOih0aGlzLmxlYXBZZWFyKGEpPyJlbWJvbGlzbWljIjoiY29tbW9uIikrIiAiK1siZGVmaWNpZW50IiwicmVndWxhciIsImNvbXBsZXRlIl1bdGhpcy5kYXlzSW5ZZWFyKGEpJTEwLTNdfX0sdG9KRDpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUoZSx0LHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7ZT1hLnllYXIoKSx0PWEubW9udGgoKSxyPWEuZGF5KCk7dmFyIGk9ZTw9MD9lKzE6ZSxvPXRoaXMuamRFcG9jaCt0aGlzLl9kZWxheTEoaSkrdGhpcy5fZGVsYXkyKGkpK3IrMTtpZih0PDcpe2Zvcih2YXIgbD03O2w8PXRoaXMubW9udGhzSW5ZZWFyKGUpO2wrKylvKz10aGlzLmRheXNJbk1vbnRoKGUsbCk7Zm9yKGw9MTtsPHQ7bCsrKW8rPXRoaXMuZGF5c0luTW9udGgoZSxsKX1lbHNlIGZvcihsPTc7bDx0O2wrKylvKz10aGlzLmRheXNJbk1vbnRoKGUsbCk7cmV0dXJuIG99LF9kZWxheTE6ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5mbG9vcigoMjM1KmUtMjM0KS8xOSkscj0xMjA4NCsxMzc1Myp0LG49MjkqdCtNYXRoLmZsb29yKHIvMjU5MjApO3JldHVybiBvKDMqKG4rMSksNyk8MyYmbisrLG59LF9kZWxheTI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZGVsYXkxKGUtMSkscj10aGlzLl9kZWxheTEoZSk7cmV0dXJuIHRoaXMuX2RlbGF5MShlKzEpLXI9PTM1Nj8yOnItdD09MzgyPzE6MH0sZnJvbUpEOmZ1bmN0aW9uKGUpe2U9TWF0aC5mbG9vcihlKSsuNTtmb3IodmFyIHQ9TWF0aC5mbG9vcig5ODQ5NiooZS10aGlzLmpkRXBvY2gpLzM1OTc1MzUxKS0xO2U+PXRoaXMudG9KRCgtMT09PXQ/MTp0KzEsNywxKTspdCsrO2Zvcih2YXIgcj1lPHRoaXMudG9KRCh0LDEsMSk/NzoxO2U+dGhpcy50b0pEKHQscix0aGlzLmRheXNJbk1vbnRoKHQscikpOylyKys7dmFyIG49ZS10aGlzLnRvSkQodCxyLDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZSh0LHIsbil9fSksbi5jYWxlbmRhcnMuaGVicmV3PWl9LHsiLi4vbWFpbiI6ODIsIm9iamVjdC1hc3NpZ24iOjU1fV0sNzM6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKCIuLi9tYWluIiksYT1lKCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gaShlKXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW2V8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWkucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixhKGkucHJvdG90eXBlLHtuYW1lOiJJc2xhbWljIixqZEVwb2NoOjE5NDg0MzkuNSxkYXlzUGVyTW9udGg6WzMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJJc2xhbWljIixlcG9jaHM6WyJCSCIsIkFIIl0sbW9udGhOYW1lczpbIk11aGFycmFtIiwiU2FmYXIiLCJSYWJpJyBhbC1hd3dhbCIsIlJhYmknIGFsLXRoYW5pIiwiSnVtYWRhIGFsLWF3d2FsIiwiSnVtYWRhIGFsLXRoYW5pIiwiUmFqYWIiLCJTaGEnYWJhbiIsIlJhbWFkYW4iLCJTaGF3d2FsIiwiRGh1IGFsLVFpJ2RhaCIsIkRodSBhbC1IaWpqYWgiXSxtb250aE5hbWVzU2hvcnQ6WyJNdWgiLCJTYWYiLCJSYWIxIiwiUmFiMiIsIkp1bTEiLCJKdW0yIiwiUmFqIiwiU2hhJyIsIlJhbSIsIlNoYXciLCJEaHVRIiwiRGh1SCJdLGRheU5hbWVzOlsiWWF3bSBhbC1haGFkIiwiWWF3bSBhbC1pdGhuYXluIiwiWWF3bSBhdGgtdGh1bGFhdGhhYSciLCJZYXdtIGFsLWFyYmknYWEnIiwiWWF3bSBhbC1raGFtXHUwMTJicyIsIllhd20gYWwtanVtJ2EiLCJZYXdtIGFzLXNhYnQiXSxkYXlOYW1lc1Nob3J0OlsiQWhhIiwiSXRoIiwiVGh1IiwiQXJiIiwiS2hhIiwiSnVtIiwiU2FiIl0sZGF5TmFtZXNNaW46WyJBaCIsIkl0IiwiVGgiLCJBciIsIktoIiwiSnUiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjYsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbihlKXtyZXR1cm4oMTEqdGhpcy5fdmFsaWRhdGUoZSx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKSsxNCklMzA8MTF9LHdlZWtPZlllYXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMubmV3RGF0ZShlLHQscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxlYXBZZWFyKGUpPzM1NTozNTR9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fdmFsaWRhdGUoZSx0LHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbihlLHQscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2VlayhlLHQscil9LHRvSkQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKGUsdCxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiBlPWEueWVhcigpLHQ9YS5tb250aCgpLGU9ZTw9MD9lKzE6ZSwocj1hLmRheSgpKStNYXRoLmNlaWwoMjkuNSoodC0xKSkrMzU0KihlLTEpK01hdGguZmxvb3IoKDMrMTEqZSkvMzApK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24oZSl7ZT1NYXRoLmZsb29yKGUpKy41O3ZhciB0PU1hdGguZmxvb3IoKDMwKihlLXRoaXMuamRFcG9jaCkrMTA2NDYpLzEwNjMxKTt0PXQ8PTA/dC0xOnQ7dmFyIHI9TWF0aC5taW4oMTIsTWF0aC5jZWlsKChlLTI5LXRoaXMudG9KRCh0LDEsMSkpLzI5LjUpKzEpLG49ZS10aGlzLnRvSkQodCxyLDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZSh0LHIsbil9fSksbi5jYWxlbmRhcnMuaXNsYW1pYz1pfSx7Ii4uL21haW4iOjgyLCJvYmplY3QtYXNzaWduIjo1NX1dLDc0OltmdW5jdGlvbihlLHQscil7dmFyIG49ZSgiLi4vbWFpbiIpLGE9ZSgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkoZSl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1tlfHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1pLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsYShpLnByb3RvdHlwZSx7bmFtZToiSnVsaWFuIixqZEVwb2NoOjE3MjE0MjMuNSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJKdWxpYW4iLGVwb2NoczpbIkJDIiwiQUQiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJtbS9kZC95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdmFsaWRhdGUoZSx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybihlPXQueWVhcigpPDA/dC55ZWFyKCkrMTp0LnllYXIoKSklND09MH0sd2Vla09mWWVhcjpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5uZXdEYXRlKGUsdCxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fdmFsaWRhdGUoZSx0LHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsoZSx0LHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10aGlzLl92YWxpZGF0ZShlLHQscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gZT1hLnllYXIoKSx0PWEubW9udGgoKSxyPWEuZGF5KCksZTwwJiZlKyssdDw9MiYmKGUtLSx0Kz0xMiksTWF0aC5mbG9vcigzNjUuMjUqKGUrNDcxNikpK01hdGguZmxvb3IoMzAuNjAwMSoodCsxKSkrci0xNTI0LjV9LGZyb21KRDpmdW5jdGlvbihlKXt2YXIgdD1NYXRoLmZsb29yKGUrLjUpKzE1MjQscj1NYXRoLmZsb29yKCh0LTEyMi4xKS8zNjUuMjUpLG49TWF0aC5mbG9vcigzNjUuMjUqciksYT1NYXRoLmZsb29yKCh0LW4pLzMwLjYwMDEpLGk9YS1NYXRoLmZsb29yKGE8MTQ/MToxMyksbz1yLU1hdGguZmxvb3IoaT4yPzQ3MTY6NDcxNSksbD10LW4tTWF0aC5mbG9vcigzMC42MDAxKmEpO3JldHVybiBvPD0wJiZvLS0sdGhpcy5uZXdEYXRlKG8saSxsKX19KSxuLmNhbGVuZGFycy5qdWxpYW49aX0seyIuLi9tYWluIjo4Miwib2JqZWN0LWFzc2lnbiI6NTV9XSw3NTpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoIi4uL21haW4iKSxhPWUoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBpKGUpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbZXx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlLXQqTWF0aC5mbG9vcihlL3QpfWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gbyhlLTEsdCkrMX1pLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsYShpLnByb3RvdHlwZSx7bmFtZToiTWF5YW4iLGpkRXBvY2g6NTg0MjgyLjUsaGFzWWVhclplcm86ITAsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjAscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiTWF5YW4iLGVwb2NoczpbIiIsIiJdLG1vbnRoTmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyJdLG1vbnRoTmFtZXNTaG9ydDpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3Il0sZGF5TmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkYXlOYW1lc1Nob3J0OlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5Il0sZGF5TmFtZXNNaW46WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJZWVlZLm0uZCIsZmlyc3REYXk6MCxpc1JUTDohMSxoYWFiTW9udGhzOlsiUG9wIiwiVW8iLCJaaXAiLCJab3R6IiwiVHplYyIsIlh1bCIsIllheGtpbiIsIk1vbCIsIkNoZW4iLCJZYXgiLCJaYWMiLCJDZWgiLCJNYWMiLCJLYW5raW4iLCJNdWFuIiwiUGF4IiwiS2F5YWIiLCJDdW1rdSIsIlVheWViIl0sdHpvbGtpbk1vbnRoczpbIkltaXgiLCJJayIsIkFrYmFsIiwiS2FuIiwiQ2hpY2NoYW4iLCJDaW1pIiwiTWFuaWsiLCJMYW1hdCIsIk11bHVjIiwiT2MiLCJDaHVlbiIsIkViIiwiQmVuIiwiSXgiLCJNZW4iLCJDaWIiLCJDYWJhbiIsIkV0em5hYiIsIkNhdWFjIiwiQWhhdSJdfX0sbGVhcFllYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKGUsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwhMX0sZm9ybWF0WWVhcjpmdW5jdGlvbihlKXtlPXRoaXMuX3ZhbGlkYXRlKGUsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCk7dmFyIHQ9TWF0aC5mbG9vcihlLzQwMCk7cmV0dXJuIGUlPTQwMCxlKz1lPDA/NDAwOjAsdCsiLiIrTWF0aC5mbG9vcihlLzIwKSsiLiIrZSUyMH0sZm9yWWVhcjpmdW5jdGlvbihlKXtpZigoZT1lLnNwbGl0KCIuIikpLmxlbmd0aDwzKXRocm93IkludmFsaWQgTWF5YW4geWVhciI7Zm9yKHZhciB0PTAscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1wYXJzZUludChlW3JdLDEwKTtpZihNYXRoLmFicyhuKT4xOXx8cj4wJiZuPDApdGhyb3ciSW52YWxpZCBNYXlhbiB5ZWFyIjt0PTIwKnQrbn1yZXR1cm4gdH0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZShlLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMTh9LHdlZWtPZlllYXI6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZShlLHQscixuLmxvY2FsLmludmFsaWREYXRlKSwwfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZShlLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMzYwfSxkYXlzSW5Nb250aDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZShlLHQsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDIwfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDV9LGRheU9mV2VlazpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKGUsdCxyLG4ubG9jYWwuaW52YWxpZERhdGUpLmRheSgpfSx3ZWVrRGF5OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUoZSx0LHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksITB9LGV4dHJhSW5mbzpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUoZSx0LHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkudG9KRCgpLGk9dGhpcy5fdG9IYWFiKGEpLG89dGhpcy5fdG9Uem9sa2luKGEpO3JldHVybntoYWFiTW9udGhOYW1lOnRoaXMubG9jYWwuaGFhYk1vbnRoc1tpWzBdLTFdLGhhYWJNb250aDppWzBdLGhhYWJEYXk6aVsxXSx0em9sa2luRGF5TmFtZTp0aGlzLmxvY2FsLnR6b2xraW5Nb250aHNbb1swXS0xXSx0em9sa2luRGF5Om9bMF0sdHpvbGtpblRyZWNlbmE6b1sxXX19LF90b0hhYWI6ZnVuY3Rpb24oZSl7dmFyIHQ9bygoZS09dGhpcy5qZEVwb2NoKSs4KzM0MCwzNjUpO3JldHVybltNYXRoLmZsb29yKHQvMjApKzEsbyh0LDIwKV19LF90b1R6b2xraW46ZnVuY3Rpb24oZSl7cmV0dXJuW2woKGUtPXRoaXMuamRFcG9jaCkrMjAsMjApLGwoZSs0LDEzKV19LHRvSkQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKGUsdCxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiBhLmRheSgpKzIwKmEubW9udGgoKSszNjAqYS55ZWFyKCkrdGhpcy5qZEVwb2NofSxmcm9tSkQ6ZnVuY3Rpb24oZSl7ZT1NYXRoLmZsb29yKGUpKy41LXRoaXMuamRFcG9jaDt2YXIgdD1NYXRoLmZsb29yKGUvMzYwKTtlJT0zNjAsZSs9ZTwwPzM2MDowO3ZhciByPU1hdGguZmxvb3IoZS8yMCksbj1lJTIwO3JldHVybiB0aGlzLm5ld0RhdGUodCxyLG4pfX0pLG4uY2FsZW5kYXJzLm1heWFuPWl9LHsiLi4vbWFpbiI6ODIsIm9iamVjdC1hc3NpZ24iOjU1fV0sNzY6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKCIuLi9tYWluIiksYT1lKCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gaShlKXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW2V8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWkucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcjt2YXIgbz1uLmluc3RhbmNlKCJncmVnb3JpYW4iKTthKGkucHJvdG90eXBlLHtuYW1lOiJOYW5ha3NoYWhpIixqZEVwb2NoOjIyNTc2NzMuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDMwLDMwXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJOYW5ha3NoYWhpIixlcG9jaHM6WyJCTiIsIkFOIl0sbW9udGhOYW1lczpbIkNoZXQiLCJWYWlzYWtoIiwiSmV0aCIsIkhhcmgiLCJTYXdhbiIsIkJoYWRvbiIsIkFzc3UiLCJLYXRhayIsIk1hZ2hhciIsIlBvaCIsIk1hZ2giLCJQaGFndW4iXSxtb250aE5hbWVzU2hvcnQ6WyJDaGUiLCJWYWkiLCJKZXQiLCJIYXIiLCJTYXciLCJCaGEiLCJBc3MiLCJLYXQiLCJNZ3IiLCJQb2giLCJNZ2giLCJQaGEiXSxkYXlOYW1lczpbIlNvbXZhYXIiLCJNYW5nYWx2YXIiLCJCdWRodmFhciIsIlZlZXJ2YWFyIiwiU2h1a2FydmFhciIsIlNhbmljaGFydmFhciIsIkV0dmFhciJdLGRheU5hbWVzU2hvcnQ6WyJTb20iLCJNYW5nYWwiLCJCdWRoIiwiVmVlciIsIlNodWthciIsIlNhbmljaGFyIiwiRXQiXSxkYXlOYW1lc01pbjpbIlNvIiwiTWEiLCJCdSIsIlZlIiwiU2giLCJTYSIsIkV0Il0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQtbW0teXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ZhbGlkYXRlKGUsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybiBvLmxlYXBZZWFyKHQueWVhcigpKyh0LnllYXIoKTwxPzE6MCkrMTQ2OSl9LHdlZWtPZlllYXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMubmV3RGF0ZShlLHQscik7cmV0dXJuIG4uYWRkKDEtKG4uZGF5T2ZXZWVrKCl8fDcpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKGUsdCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybih0aGlzLmRheU9mV2VlayhlLHQscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKGUsdCxyLG4ubG9jYWwuaW52YWxpZE1vbnRoKTsoZT1hLnllYXIoKSk8MCYmZSsrO2Zvcih2YXIgaT1hLmRheSgpLGw9MTtsPGEubW9udGgoKTtsKyspaSs9dGhpcy5kYXlzUGVyTW9udGhbbC0xXTtyZXR1cm4gaStvLnRvSkQoZSsxNDY4LDMsMTMpfSxmcm9tSkQ6ZnVuY3Rpb24oZSl7ZT1NYXRoLmZsb29yKGUrLjUpO2Zvcih2YXIgdD1NYXRoLmZsb29yKChlLSh0aGlzLmpkRXBvY2gtMSkpLzM2Nik7ZT49dGhpcy50b0pEKHQrMSwxLDEpOyl0Kys7Zm9yKHZhciByPWUtTWF0aC5mbG9vcih0aGlzLnRvSkQodCwxLDEpKy41KSsxLG49MTtyPnRoaXMuZGF5c0luTW9udGgodCxuKTspci09dGhpcy5kYXlzSW5Nb250aCh0LG4pLG4rKztyZXR1cm4gdGhpcy5uZXdEYXRlKHQsbixyKX19KSxuLmNhbGVuZGFycy5uYW5ha3NoYWhpPWl9LHsiLi4vbWFpbiI6ODIsIm9iamVjdC1hc3NpZ24iOjU1fV0sNzc6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKCIuLi9tYWluIiksYT1lKCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gaShlKXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW2V8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWkucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixhKGkucHJvdG90eXBlLHtuYW1lOiJOZXBhbGkiLGpkRXBvY2g6MTcwMDcwOS41LGRheXNQZXJNb250aDpbMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLGRheXNQZXJZZWFyOjM2NSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJOZXBhbGkiLGVwb2NoczpbIkJCUyIsIkFCUyJdLG1vbnRoTmFtZXM6WyJCYWlzYWtoIiwiSmVzdGhhIiwiQXNoYWRoIiwiU2hyYXdhbiIsIkJoYWRyYSIsIkFzaHdpbiIsIkthcnRpayIsIk1hbmdzaXIiLCJQYXVzaCIsIk1hbmdoIiwiRmFsZ3VuIiwiQ2hhaXRyYSJdLG1vbnRoTmFtZXNTaG9ydDpbIkJhaSIsIkplIiwiQXMiLCJTaHJhIiwiQmhhIiwiQXNoIiwiS2FyIiwiTWFuZyIsIlBhdSIsIk1hIiwiRmFsIiwiQ2hhaSJdLGRheU5hbWVzOlsiQWFpdGFiYWFyIiwiU29tYmFhciIsIk1hbmdsYmFhciIsIkJ1ZGhhYmFhciIsIkJpaGliYWFyIiwiU2h1a3JhYmFhciIsIlNoYW5pYmFhciJdLGRheU5hbWVzU2hvcnQ6WyJBYWl0YSIsIlNvbSIsIk1hbmdsIiwiQnVkaGEiLCJCaWhpIiwiU2h1a3JhIiwiU2hhbmkiXSxkYXlOYW1lc01pbjpbIkFhaSIsIlNvIiwiTWFuIiwiQnUiLCJCaSIsIlNodSIsIlNoYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjEsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kYXlzSW5ZZWFyKGUpIT09dGhpcy5kYXlzUGVyWWVhcn0sd2Vla09mWWVhcjpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5uZXdEYXRlKGUsdCxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24oZSl7aWYoZT10aGlzLl92YWxpZGF0ZShlLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHZvaWQgMD09PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbZV0pcmV0dXJuIHRoaXMuZGF5c1BlclllYXI7Zm9yKHZhciB0PTAscj10aGlzLm1pbk1vbnRoO3I8PTEyO3IrKyl0Kz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2VdW3JdO3JldHVybiB0fSxkYXlzSW5Nb250aDpmdW5jdGlvbihlLHQpe3JldHVybiBlLnllYXImJih0PWUubW9udGgoKSxlPWUueWVhcigpKSx0aGlzLl92YWxpZGF0ZShlLHQsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLHZvaWQgMD09PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbZV0/dGhpcy5kYXlzUGVyTW9udGhbdC0xXTp0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2VdW3RdfSx3ZWVrRGF5OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKGUsdCxyKX0sdG9KRDpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUoZSx0LHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7ZT1hLnllYXIoKSx0PWEubW9udGgoKSxyPWEuZGF5KCk7dmFyIGk9bi5pbnN0YW5jZSgpLG89MCxsPXQscz1lO3RoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEoZSk7dmFyIGM9ZS0obD45fHw5PT09bCYmcj49dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtzXVswXT81Njo1Nyk7Zm9yKDkhPT10JiYobz1yLGwtLSk7OSE9PWw7KWw8PTAmJihsPTEyLHMtLSksbys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtzXVtsXSxsLS07cmV0dXJuIDk9PT10PyhvKz1yLXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbc11bMF0pPDAmJihvKz1pLmRheXNJblllYXIoYykpOm8rPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbc11bOV0tdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtzXVswXSxpLm5ld0RhdGUoYywxLDEpLmFkZChvLCJkIikudG9KRCgpfSxmcm9tSkQ6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5pbnN0YW5jZSgpLmZyb21KRChlKSxyPXQueWVhcigpLGE9dC5kYXlPZlllYXIoKSxpPXIrNTY7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YShpKTtmb3IodmFyIG89OSxsPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbaV1bMF0scz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2ldW29dLWwrMTthPnM7KSsrbz4xMiYmKG89MSxpKyspLHMrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbaV1bb107dmFyIGM9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtpXVtvXS0ocy1hKTtyZXR1cm4gdGhpcy5uZXdEYXRlKGksbyxjKX0sX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kYXlzUGVyTW9udGguc2xpY2UoMCk7dC51bnNoaWZ0KDE3KTtmb3IodmFyIHI9ZS0xO3I8ZSsyO3IrKyl2b2lkIDA9PT10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdJiYodGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtyXT10KX0sTkVQQUxJX0NBTEVOREFSX0RBVEE6ezE5NzA6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcxOlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDE5NzM6WzE5LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTc0OlsxOSwzMSwzMSwzMiwzMCwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NTpbMTgsMzEsMzEsMzIsMzIsMzAsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTc3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMTk3ODpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5Nzk6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTgwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4MTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODI6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTgzOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODU6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwxOTg2OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4NzpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODg6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTg5OlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTE6WzE4LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5MzpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTQ6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk5NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5OTc6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDJlMzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAyOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDQ6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDA1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAwOTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTA6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDExOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxMjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTM6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE0OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDE3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxODpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDIwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDIzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyNDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAyNzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI5OlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzMDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzFdLDIwMzE6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMxLDMxLDMxLDMxLDMxLDMxXSwyMDMyOlsxNywzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0sMjAzMzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM1OlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAzNjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMzc6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzOTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDA6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQxOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDM6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQ0OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQ3OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDUwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1MTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTI6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDI5LDMwXSwyMDU2OlsxNywzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNTg6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDYyOlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMjA2MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjQ6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2NjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwNjc6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY4OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDcxOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNzM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDc0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzY6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDc3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA3ODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDgwOlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA4MTpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgzOlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODU6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NzpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODg6WzE2LDMwLDMxLDMyLDMyLDMwLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTE6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkyOlsxNiwzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwzMCwzMF0sMjA5NjpbMTcsMzAsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwOTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwyOSwzMCwyOSwzMCwzMCwzMV0sMjA5OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMjksMzAsMzAsMzBdLDIxMDA6WzE3LDMxLDMyLDMxLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXX19KSxuLmNhbGVuZGFycy5uZXBhbGk9aX0seyIuLi9tYWluIjo4Miwib2JqZWN0LWFzc2lnbiI6NTV9XSw3ODpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoIi4uL21haW4iKSxhPWUoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBpKGUpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbZXx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlLXQqTWF0aC5mbG9vcihlL3QpfWkucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixhKGkucHJvdG90eXBlLHtuYW1lOiJQZXJzaWFuIixqZEVwb2NoOjE5NDgzMjAuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJQZXJzaWFuIixlcG9jaHM6WyJCUCIsIkFQIl0sbW9udGhOYW1lczpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRheSIsIkJhaG1hbiIsIkVzZmFuZCJdLG1vbnRoTmFtZXNTaG9ydDpbIkZhciIsIk9yZCIsIktobyIsIlRpciIsIk1vciIsIlNoYSIsIk1laCIsIkFiYSIsIkF6YSIsIkRheSIsIkJhaCIsIkVzZiJdLGRheU5hbWVzOlsiWWVrc2hhbWJlIiwiRG9zaGFtYmUiLCJTZXNoYW1iZSIsIkNoXHhlNmhhcnNoYW1iZSIsIlBhbmpzaGFtYmUiLCJKb20nZSIsIlNoYW1iZSJdLGRheU5hbWVzU2hvcnQ6WyJZZWsiLCJEbyIsIlNlIiwiQ2hceGU2IiwiUGFuaiIsIkpvbSIsIlNoYSJdLGRheU5hbWVzTWluOlsiWWUiLCJEbyIsIlNlIiwiQ2giLCJQYSIsIkpvIiwiU2giXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdmFsaWRhdGUoZSx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiA2ODIqKCh0LnllYXIoKS0odC55ZWFyKCk+MD80NzQ6NDczKSklMjgyMCs0NzQrMzgpJTI4MTY8NjgyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLm5ld0RhdGUoZSx0LHIpO3JldHVybiBuLmFkZCgtKG4uZGF5T2ZXZWVrKCkrMSklNywiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl92YWxpZGF0ZShlLHQsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKGUsdCxyKX0sdG9KRDpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUoZSx0LHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7ZT1hLnllYXIoKSx0PWEubW9udGgoKSxyPWEuZGF5KCk7dmFyIGk9ZS0oZT49MD80NzQ6NDczKSxsPTQ3NCtvKGksMjgyMCk7cmV0dXJuIHIrKHQ8PTc/MzEqKHQtMSk6MzAqKHQtMSkrNikrTWF0aC5mbG9vcigoNjgyKmwtMTEwKS8yODE2KSszNjUqKGwtMSkrMTAyOTk4MypNYXRoLmZsb29yKGkvMjgyMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbihlKXt2YXIgdD0oZT1NYXRoLmZsb29yKGUpKy41KS10aGlzLnRvSkQoNDc1LDEsMSkscj1NYXRoLmZsb29yKHQvMTAyOTk4Myksbj1vKHQsMTAyOTk4MyksYT0yODIwO2lmKDEwMjk5ODIhPT1uKXt2YXIgaT1NYXRoLmZsb29yKG4vMzY2KSxsPW8obiwzNjYpO2E9TWF0aC5mbG9vcigoMjEzNCppKzI4MTYqbCsyODE1KS8xMDI4NTIyKStpKzF9dmFyIHM9YSsyODIwKnIrNDc0O3M9czw9MD9zLTE6czt2YXIgYz1lLXRoaXMudG9KRChzLDEsMSkrMSx1PWM8PTE4Nj9NYXRoLmNlaWwoYy8zMSk6TWF0aC5jZWlsKChjLTYpLzMwKSxkPWUtdGhpcy50b0pEKHMsdSwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUocyx1LGQpfX0pLG4uY2FsZW5kYXJzLnBlcnNpYW49aSxuLmNhbGVuZGFycy5qYWxhbGk9aX0seyIuLi9tYWluIjo4Miwib2JqZWN0LWFzc2lnbiI6NTV9XSw3OTpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoIi4uL21haW4iKSxhPWUoIm9iamVjdC1hc3NpZ24iKSxpPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKGUpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbZXx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGEoby5wcm90b3R5cGUse25hbWU6IlRhaXdhbiIsamRFcG9jaDoyNDE5NDAyLjUseWVhcnNPZmZzZXQ6MTkxMSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJUYWl3YW4iLGVwb2NoczpbIkJST0MiLCJST0MiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdmFsaWRhdGUoZSx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO2U9dGhpcy5fdDJnWWVhcih0LnllYXIoKSk7cmV0dXJuIGkubGVhcFllYXIoZSl9LHdlZWtPZlllYXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKGUsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtlPXRoaXMuX3QyZ1llYXIoYS55ZWFyKCkpO3JldHVybiBpLndlZWtPZlllYXIoZSxhLm1vbnRoKCksYS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fdmFsaWRhdGUoZSx0LHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsoZSx0LHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10aGlzLl92YWxpZGF0ZShlLHQscixuLmxvY2FsLmludmFsaWREYXRlKTtlPXRoaXMuX3QyZ1llYXIoYS55ZWFyKCkpO3JldHVybiBpLnRvSkQoZSxhLm1vbnRoKCksYS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbihlKXt2YXIgdD1pLmZyb21KRChlKSxyPXRoaXMuX2cydFllYXIodC55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocix0Lm1vbnRoKCksdC5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlK3RoaXMueWVhcnNPZmZzZXQrKGU+PS10aGlzLnllYXJzT2Zmc2V0JiZlPD0tMT8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZS10aGlzLnllYXJzT2Zmc2V0LShlPj0xJiZlPD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9fSksbi5jYWxlbmRhcnMudGFpd2FuPW99LHsiLi4vbWFpbiI6ODIsIm9iamVjdC1hc3NpZ24iOjU1fV0sODA6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKCIuLi9tYWluIiksYT1lKCJvYmplY3QtYXNzaWduIiksaT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyhlKXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW2V8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixhKG8ucHJvdG90eXBlLHtuYW1lOiJUaGFpIixqZEVwb2NoOjE1MjMwOTguNSx5ZWFyc09mZnNldDo1NDMsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGhhaSIsZXBvY2hzOlsiQkJFIiwiQkUiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdmFsaWRhdGUoZSx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO2U9dGhpcy5fdDJnWWVhcih0LnllYXIoKSk7cmV0dXJuIGkubGVhcFllYXIoZSl9LHdlZWtPZlllYXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKGUsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtlPXRoaXMuX3QyZ1llYXIoYS55ZWFyKCkpO3JldHVybiBpLndlZWtPZlllYXIoZSxhLm1vbnRoKCksYS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fdmFsaWRhdGUoZSx0LHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsoZSx0LHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10aGlzLl92YWxpZGF0ZShlLHQscixuLmxvY2FsLmludmFsaWREYXRlKTtlPXRoaXMuX3QyZ1llYXIoYS55ZWFyKCkpO3JldHVybiBpLnRvSkQoZSxhLm1vbnRoKCksYS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbihlKXt2YXIgdD1pLmZyb21KRChlKSxyPXRoaXMuX2cydFllYXIodC55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocix0Lm1vbnRoKCksdC5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlLXRoaXMueWVhcnNPZmZzZXQtKGU+PTEmJmU8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrdGhpcy55ZWFyc09mZnNldCsoZT49LXRoaXMueWVhcnNPZmZzZXQmJmU8PS0xPzE6MCl9fSksbi5jYWxlbmRhcnMudGhhaT1vfSx7Ii4uL21haW4iOjgyLCJvYmplY3QtYXNzaWduIjo1NX1dLDgxOltmdW5jdGlvbihlLHQscil7dmFyIG49ZSgiLi4vbWFpbiIpLGE9ZSgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkoZSl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1tlfHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1pLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsYShpLnByb3RvdHlwZSx7bmFtZToiVW1tQWxRdXJhIixoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJVbW0gYWwtUXVyYSIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJBbC1NdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBBbC1UaGFuaSIsIkp1bWFkYSBBbC1Bd3dhbCIsIkp1bWFkYSBBbC1UaGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtQWhhZCIsIllhd20gYWwtSXRobmFpbiIsIllhd20gYWwtVGhhbFx1MDEwMXRoXHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1BcmJhXHUyMDE4XHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1LaGFtXHUwMTJicyIsIllhd20gYWwtSnVtXHUyMDE4YSIsIllhd20gYWwtU2FidCJdLGRheU5hbWVzTWluOlsiQWgiLCJJdGgiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMH19LGxlYXBZZWFyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ZhbGlkYXRlKGUsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gMzU1PT09dGhpcy5kYXlzSW5ZZWFyKHQueWVhcigpKX0sd2Vla09mWWVhcjpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5uZXdEYXRlKGUsdCxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj0xO3I8PTEyO3IrKyl0Kz10aGlzLmRheXNJbk1vbnRoKGUscik7cmV0dXJuIHR9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRoaXMuX3ZhbGlkYXRlKGUsdCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCkudG9KRCgpLTI0ZTUrLjUsYT0wLGk9MDtpPG8ubGVuZ3RoO2krKyl7aWYob1tpXT5yKXJldHVybiBvW2FdLW9bYS0xXTthKyt9cmV0dXJuIDMwfSx3ZWVrRGF5OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKGUsdCxyKX0sdG9KRDpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUoZSx0LHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksaT0xMiooYS55ZWFyKCktMSkrYS5tb250aCgpLTE1MjkyO3JldHVybiBhLmRheSgpK29baS0xXS0xKzI0ZTUtLjV9LGZyb21KRDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS0yNGU1Ky41LHI9MCxuPTA7bjxvLmxlbmd0aCYmIShvW25dPnQpO24rKylyKys7dmFyIGE9cisxNTI5MixpPU1hdGguZmxvb3IoKGEtMSkvMTIpLGw9aSsxLHM9YS0xMippLGM9dC1vW3ItMV0rMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGwscyxjKX0saXNWYWxpZDpmdW5jdGlvbihlLHQscil7dmFyIGE9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLmlzVmFsaWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhJiYoYT0oZT1udWxsIT1lLnllYXI/ZS55ZWFyOmUpPj0xMjc2JiZlPD0xNTAwKSxhfSxfdmFsaWRhdGU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIGk9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoaS55ZWFyPDEyNzZ8fGkueWVhcj4xNTAwKXRocm93IGEucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGl9fSksbi5jYWxlbmRhcnMudW1tYWxxdXJhPWk7dmFyIG89WzIwLDUwLDc5LDEwOSwxMzgsMTY4LDE5NywyMjcsMjU2LDI4NiwzMTUsMzQ1LDM3NCw0MDQsNDMzLDQ2Myw0OTIsNTIyLDU1MSw1ODEsNjExLDY0MSw2NzAsNzAwLDcyOSw3NTksNzg4LDgxOCw4NDcsODc3LDkwNiw5MzYsOTY1LDk5NSwxMDI0LDEwNTQsMTA4MywxMTEzLDExNDIsMTE3MiwxMjAxLDEyMzEsMTI2MCwxMjkwLDEzMjAsMTM1MCwxMzc5LDE0MDksMTQzOCwxNDY4LDE0OTcsMTUyNywxNTU2LDE1ODYsMTYxNSwxNjQ1LDE2NzQsMTcwNCwxNzMzLDE3NjMsMTc5MiwxODIyLDE4NTEsMTg4MSwxOTEwLDE5NDAsMTk2OSwxOTk5LDIwMjgsMjA1OCwyMDg3LDIxMTcsMjE0NiwyMTc2LDIyMDUsMjIzNSwyMjY0LDIyOTQsMjMyMywyMzUzLDIzODMsMjQxMywyNDQyLDI0NzIsMjUwMSwyNTMxLDI1NjAsMjU5MCwyNjE5LDI2NDksMjY3OCwyNzA4LDI3MzcsMjc2NywyNzk2LDI4MjYsMjg1NSwyODg1LDI5MTQsMjk0NCwyOTczLDMwMDMsMzAzMiwzMDYyLDMwOTEsMzEyMSwzMTUwLDMxODAsMzIwOSwzMjM5LDMyNjgsMzI5OCwzMzI3LDMzNTcsMzM4NiwzNDE2LDM0NDYsMzQ3NiwzNTA1LDM1MzUsMzU2NCwzNTk0LDM2MjMsMzY1MywzNjgyLDM3MTIsMzc0MSwzNzcxLDM4MDAsMzgzMCwzODU5LDM4ODksMzkxOCwzOTQ4LDM5NzcsNDAwNyw0MDM2LDQwNjYsNDA5NSw0MTI1LDQxNTUsNDE4NSw0MjE0LDQyNDQsNDI3Myw0MzAzLDQzMzIsNDM2Miw0MzkxLDQ0MjEsNDQ1MCw0NDgwLDQ1MDksNDUzOSw0NTY4LDQ1OTgsNDYyNyw0NjU3LDQ2ODYsNDcxNiw0NzQ1LDQ3NzUsNDgwNCw0ODM0LDQ4NjMsNDg5Myw0OTIyLDQ5NTIsNDk4MSw1MDExLDUwNDAsNTA3MCw1MDk5LDUxMjksNTE1OCw1MTg4LDUyMTgsNTI0OCw1Mjc3LDUzMDcsNTMzNiw1MzY2LDUzOTUsNTQyNSw1NDU0LDU0ODQsNTUxMyw1NTQzLDU1NzIsNTYwMiw1NjMxLDU2NjEsNTY5MCw1NzIwLDU3NDksNTc3OSw1ODA4LDU4MzgsNTg2Nyw1ODk3LDU5MjYsNTk1Niw1OTg1LDYwMTUsNjA0NCw2MDc0LDYxMDMsNjEzMyw2MTYyLDYxOTIsNjIyMSw2MjUxLDYyODEsNjMxMSw2MzQwLDYzNzAsNjM5OSw2NDI5LDY0NTgsNjQ4OCw2NTE3LDY1NDcsNjU3Niw2NjA2LDY2MzUsNjY2NSw2Njk0LDY3MjQsNjc1Myw2NzgzLDY4MTIsNjg0Miw2ODcxLDY5MDEsNjkzMCw2OTYwLDY5ODksNzAxOSw3MDQ4LDcwNzgsNzEwNyw3MTM3LDcxNjYsNzE5Niw3MjI1LDcyNTUsNzI4NCw3MzE0LDczNDQsNzM3NCw3NDAzLDc0MzMsNzQ2Miw3NDkyLDc1MjEsNzU1MSw3NTgwLDc2MTAsNzYzOSw3NjY5LDc2OTgsNzcyOCw3NzU3LDc3ODcsNzgxNiw3ODQ2LDc4NzUsNzkwNSw3OTM0LDc5NjQsNzk5Myw4MDIzLDgwNTMsODA4Myw4MTEyLDgxNDIsODE3MSw4MjAxLDgyMzAsODI2MCw4Mjg5LDgzMTksODM0OCw4Mzc4LDg0MDcsODQzNyw4NDY2LDg0OTYsODUyNSw4NTU1LDg1ODQsODYxNCw4NjQzLDg2NzMsODcwMiw4NzMyLDg3NjEsODc5MSw4ODIxLDg4NTAsODg4MCw4OTA5LDg5MzgsODk2OCw4OTk3LDkwMjcsOTA1Niw5MDg2LDkxMTUsOTE0NSw5MTc1LDkyMDUsOTIzNCw5MjY0LDkyOTMsOTMyMiw5MzUyLDkzODEsOTQxMCw5NDQwLDk0NzAsOTQ5OSw5NTI5LDk1NTksOTU4OSw5NjE4LDk2NDgsOTY3Nyw5NzA2LDk3MzYsOTc2NSw5Nzk0LDk4MjQsOTg1Myw5ODgzLDk5MTMsOTk0Myw5OTcyLDEwMDAyLDEwMDMyLDEwMDYxLDEwMDkwLDEwMTIwLDEwMTQ5LDEwMTc4LDEwMjA4LDEwMjM3LDEwMjY3LDEwMjk3LDEwMzI2LDEwMzU2LDEwMzg2LDEwNDE1LDEwNDQ1LDEwNDc0LDEwNTA0LDEwNTMzLDEwNTYyLDEwNTkyLDEwNjIxLDEwNjUxLDEwNjgwLDEwNzEwLDEwNzQwLDEwNzcwLDEwNzk5LDEwODI5LDEwODU4LDEwODg4LDEwOTE3LDEwOTQ3LDEwOTc2LDExMDA1LDExMDM1LDExMDY0LDExMDk0LDExMTI0LDExMTUzLDExMTgzLDExMjEzLDExMjQyLDExMjcyLDExMzAxLDExMzMxLDExMzYwLDExMzg5LDExNDE5LDExNDQ4LDExNDc4LDExNTA3LDExNTM3LDExNTY3LDExNTk2LDExNjI2LDExNjU1LDExNjg1LDExNzE1LDExNzQ0LDExNzc0LDExODAzLDExODMyLDExODYyLDExODkxLDExOTIxLDExOTUwLDExOTgwLDEyMDEwLDEyMDM5LDEyMDY5LDEyMDk5LDEyMTI4LDEyMTU4LDEyMTg3LDEyMjE2LDEyMjQ2LDEyMjc1LDEyMzA0LDEyMzM0LDEyMzY0LDEyMzkzLDEyNDIzLDEyNDUzLDEyNDgzLDEyNTEyLDEyNTQyLDEyNTcxLDEyNjAwLDEyNjMwLDEyNjU5LDEyNjg4LDEyNzE4LDEyNzQ3LDEyNzc3LDEyODA3LDEyODM3LDEyODY2LDEyODk2LDEyOTI2LDEyOTU1LDEyOTg0LDEzMDE0LDEzMDQzLDEzMDcyLDEzMTAyLDEzMTMxLDEzMTYxLDEzMTkxLDEzMjIwLDEzMjUwLDEzMjgwLDEzMzEwLDEzMzM5LDEzMzY4LDEzMzk4LDEzNDI3LDEzNDU2LDEzNDg2LDEzNTE1LDEzNTQ1LDEzNTc0LDEzNjA0LDEzNjM0LDEzNjY0LDEzNjkzLDEzNzIzLDEzNzUyLDEzNzgyLDEzODExLDEzODQwLDEzODcwLDEzODk5LDEzOTI5LDEzOTU4LDEzOTg4LDE0MDE4LDE0MDQ3LDE0MDc3LDE0MTA3LDE0MTM2LDE0MTY2LDE0MTk1LDE0MjI0LDE0MjU0LDE0MjgzLDE0MzEzLDE0MzQyLDE0MzcyLDE0NDAxLDE0NDMxLDE0NDYxLDE0NDkwLDE0NTIwLDE0NTUwLDE0NTc5LDE0NjA5LDE0NjM4LDE0NjY3LDE0Njk3LDE0NzI2LDE0NzU2LDE0Nzg1LDE0ODE1LDE0ODQ0LDE0ODc0LDE0OTA0LDE0OTMzLDE0OTYzLDE0OTkzLDE1MDIxLDE1MDUxLDE1MDgxLDE1MTEwLDE1MTQwLDE1MTY5LDE1MTk5LDE1MjI4LDE1MjU4LDE1Mjg3LDE1MzE3LDE1MzQ3LDE1Mzc3LDE1NDA2LDE1NDM2LDE1NDY1LDE1NDk0LDE1NTI0LDE1NTUzLDE1NTgyLDE1NjEyLDE1NjQxLDE1NjcxLDE1NzAxLDE1NzMxLDE1NzYwLDE1NzkwLDE1ODIwLDE1ODQ5LDE1ODc4LDE1OTA4LDE1OTM3LDE1OTY2LDE1OTk2LDE2MDI1LDE2MDU1LDE2MDg1LDE2MTE0LDE2MTQ0LDE2MTc0LDE2MjA0LDE2MjMzLDE2MjYyLDE2MjkyLDE2MzIxLDE2MzUwLDE2MzgwLDE2NDA5LDE2NDM5LDE2NDY4LDE2NDk4LDE2NTI4LDE2NTU4LDE2NTg3LDE2NjE3LDE2NjQ2LDE2Njc2LDE2NzA1LDE2NzM0LDE2NzY0LDE2NzkzLDE2ODIzLDE2ODUyLDE2ODgyLDE2OTEyLDE2OTQxLDE2OTcxLDE3MDAxLDE3MDMwLDE3MDYwLDE3MDg5LDE3MTE4LDE3MTQ4LDE3MTc3LDE3MjA3LDE3MjM2LDE3MjY2LDE3Mjk1LDE3MzI1LDE3MzU1LDE3Mzg0LDE3NDE0LDE3NDQ0LDE3NDczLDE3NTAyLDE3NTMyLDE3NTYxLDE3NTkxLDE3NjIwLDE3NjUwLDE3Njc5LDE3NzA5LDE3NzM4LDE3NzY4LDE3Nzk4LDE3ODI3LDE3ODU3LDE3ODg2LDE3OTE2LDE3OTQ1LDE3OTc1LDE4MDA0LDE4MDM0LDE4MDYzLDE4MDkzLDE4MTIyLDE4MTUyLDE4MTgxLDE4MjExLDE4MjQxLDE4MjcwLDE4MzAwLDE4MzMwLDE4MzU5LDE4Mzg4LDE4NDE4LDE4NDQ3LDE4NDc2LDE4NTA2LDE4NTM1LDE4NTY1LDE4NTk1LDE4NjI1LDE4NjU0LDE4Njg0LDE4NzE0LDE4NzQzLDE4NzcyLDE4ODAyLDE4ODMxLDE4ODYwLDE4ODkwLDE4OTE5LDE4OTQ5LDE4OTc5LDE5MDA4LDE5MDM4LDE5MDY4LDE5MDk4LDE5MTI3LDE5MTU2LDE5MTg2LDE5MjE1LDE5MjQ0LDE5Mjc0LDE5MzAzLDE5MzMzLDE5MzYyLDE5MzkyLDE5NDIyLDE5NDUyLDE5NDgxLDE5NTExLDE5NTQwLDE5NTcwLDE5NTk5LDE5NjI4LDE5NjU4LDE5Njg3LDE5NzE3LDE5NzQ2LDE5Nzc2LDE5ODA2LDE5ODM2LDE5ODY1LDE5ODk1LDE5OTI0LDE5OTU0LDE5OTgzLDIwMDEyLDIwMDQyLDIwMDcxLDIwMTAxLDIwMTMwLDIwMTYwLDIwMTkwLDIwMjE5LDIwMjQ5LDIwMjc5LDIwMzA4LDIwMzM4LDIwMzY3LDIwMzk2LDIwNDI2LDIwNDU1LDIwNDg1LDIwNTE0LDIwNTQ0LDIwNTczLDIwNjAzLDIwNjMzLDIwNjYyLDIwNjkyLDIwNzIxLDIwNzUxLDIwNzgwLDIwODEwLDIwODM5LDIwODY5LDIwODk4LDIwOTI4LDIwOTU3LDIwOTg3LDIxMDE2LDIxMDQ2LDIxMDc2LDIxMTA1LDIxMTM1LDIxMTY0LDIxMTk0LDIxMjIzLDIxMjUzLDIxMjgyLDIxMzEyLDIxMzQxLDIxMzcxLDIxNDAwLDIxNDMwLDIxNDU5LDIxNDg5LDIxNTE5LDIxNTQ4LDIxNTc4LDIxNjA3LDIxNjM3LDIxNjY2LDIxNjk2LDIxNzI1LDIxNzU0LDIxNzg0LDIxODEzLDIxODQzLDIxODczLDIxOTAyLDIxOTMyLDIxOTYyLDIxOTkxLDIyMDIxLDIyMDUwLDIyMDgwLDIyMTA5LDIyMTM4LDIyMTY4LDIyMTk3LDIyMjI3LDIyMjU2LDIyMjg2LDIyMzE2LDIyMzQ2LDIyMzc1LDIyNDA1LDIyNDM0LDIyNDY0LDIyNDkzLDIyNTIyLDIyNTUyLDIyNTgxLDIyNjExLDIyNjQwLDIyNjcwLDIyNzAwLDIyNzMwLDIyNzU5LDIyNzg5LDIyODE4LDIyODQ4LDIyODc3LDIyOTA2LDIyOTM2LDIyOTY1LDIyOTk0LDIzMDI0LDIzMDU0LDIzMDgzLDIzMTEzLDIzMTQzLDIzMTczLDIzMjAyLDIzMjMyLDIzMjYxLDIzMjkwLDIzMzIwLDIzMzQ5LDIzMzc5LDIzNDA4LDIzNDM4LDIzNDY3LDIzNDk3LDIzNTI3LDIzNTU2LDIzNTg2LDIzNjE2LDIzNjQ1LDIzNjc0LDIzNzA0LDIzNzMzLDIzNzYzLDIzNzkyLDIzODIyLDIzODUxLDIzODgxLDIzOTEwLDIzOTQwLDIzOTcwLDIzOTk5LDI0MDI5LDI0MDU4LDI0MDg4LDI0MTE3LDI0MTQ3LDI0MTc2LDI0MjA2LDI0MjM1LDI0MjY1LDI0Mjk0LDI0MzI0LDI0MzUzLDI0MzgzLDI0NDEzLDI0NDQyLDI0NDcyLDI0NTAxLDI0NTMxLDI0NTYwLDI0NTkwLDI0NjE5LDI0NjQ4LDI0Njc4LDI0NzA3LDI0NzM3LDI0NzY3LDI0Nzk2LDI0ODI2LDI0ODU2LDI0ODg1LDI0OTE1LDI0OTQ0LDI0OTc0LDI1MDAzLDI1MDMyLDI1MDYyLDI1MDkxLDI1MTIxLDI1MTUwLDI1MTgwLDI1MjEwLDI1MjQwLDI1MjY5LDI1Mjk5LDI1MzI4LDI1MzU4LDI1Mzg3LDI1NDE2LDI1NDQ2LDI1NDc1LDI1NTA1LDI1NTM0LDI1NTY0LDI1NTk0LDI1NjI0LDI1NjUzLDI1NjgzLDI1NzEyLDI1NzQyLDI1NzcxLDI1ODAwLDI1ODMwLDI1ODU5LDI1ODg4LDI1OTE4LDI1OTQ4LDI1OTc3LDI2MDA3LDI2MDM3LDI2MDY3LDI2MDk2LDI2MTI2LDI2MTU1LDI2MTg0LDI2MjE0LDI2MjQzLDI2MjcyLDI2MzAyLDI2MzMyLDI2MzYxLDI2MzkxLDI2NDIxLDI2NDUxLDI2NDgwLDI2NTEwLDI2NTM5LDI2NTY4LDI2NTk4LDI2NjI3LDI2NjU2LDI2Njg2LDI2NzE1LDI2NzQ1LDI2Nzc1LDI2ODA1LDI2ODM0LDI2ODY0LDI2ODkzLDI2OTIzLDI2OTUyLDI2OTgyLDI3MDExLDI3MDQxLDI3MDcwLDI3MDk5LDI3MTI5LDI3MTU5LDI3MTg4LDI3MjE4LDI3MjQ4LDI3Mjc3LDI3MzA3LDI3MzM2LDI3MzY2LDI3Mzk1LDI3NDI1LDI3NDU0LDI3NDg0LDI3NTEzLDI3NTQyLDI3NTcyLDI3NjAyLDI3NjMxLDI3NjYxLDI3NjkxLDI3NzIwLDI3NzUwLDI3Nzc5LDI3ODA5LDI3ODM4LDI3ODY4LDI3ODk3LDI3OTI2LDI3OTU2LDI3OTg1LDI4MDE1LDI4MDQ1LDI4MDc0LDI4MTA0LDI4MTM0LDI4MTYzLDI4MTkzLDI4MjIyLDI4MjUyLDI4MjgxLDI4MzEwLDI4MzQwLDI4MzY5LDI4Mzk5LDI4NDI4LDI4NDU4LDI4NDg4LDI4NTE3LDI4NTQ3LDI4NTc3LDI4NjA3LDI4NjM2LDI4NjY1LDI4Njk1LDI4NzI0LDI4NzU0LDI4NzgzLDI4ODEzLDI4ODQzLDI4ODcyLDI4OTAxLDI4OTMxLDI4OTYwLDI4OTkwLDI5MDE5LDI5MDQ5LDI5MDc4LDI5MTA4LDI5MTM3LDI5MTY3LDI5MTk2LDI5MjI2LDI5MjU1LDI5Mjg1LDI5MzE1LDI5MzQ1LDI5Mzc1LDI5NDA0LDI5NDM0LDI5NDYzLDI5NDkyLDI5NTIyLDI5NTUxLDI5NTgwLDI5NjEwLDI5NjQwLDI5NjY5LDI5Njk5LDI5NzI5LDI5NzU5LDI5Nzg4LDI5ODE4LDI5ODQ3LDI5ODc2LDI5OTA2LDI5OTM1LDI5OTY0LDI5OTk0LDMwMDIzLDMwMDUzLDMwMDgyLDMwMTEyLDMwMTQxLDMwMTcxLDMwMjAwLDMwMjMwLDMwMjU5LDMwMjg5LDMwMzE4LDMwMzQ4LDMwMzc4LDMwNDA4LDMwNDM3LDMwNDY3LDMwNDk2LDMwNTI2LDMwNTU1LDMwNTg1LDMwNjE0LDMwNjQ0LDMwNjczLDMwNzAzLDMwNzMyLDMwNzYyLDMwNzkxLDMwODIxLDMwODUwLDMwODgwLDMwOTA5LDMwOTM5LDMwOTY4LDMwOTk4LDMxMDI3LDMxMDU3LDMxMDg2LDMxMTE2LDMxMTQ1LDMxMTc1LDMxMjA0LDMxMjM0LDMxMjYzLDMxMjkzLDMxMzIyLDMxMzUyLDMxMzgxLDMxNDExLDMxNDQxLDMxNDcxLDMxNTAwLDMxNTMwLDMxNTU5LDMxNTg5LDMxNjE4LDMxNjQ4LDMxNjc2LDMxNzA2LDMxNzM2LDMxNzY2LDMxNzk1LDMxODI1LDMxODU0LDMxODg0LDMxOTEzLDMxOTQzLDMxOTcyLDMyMDAyLDMyMDMxLDMyMDYxLDMyMDkwLDMyMTIwLDMyMTUwLDMyMTgwLDMyMjA5LDMyMjM5LDMyMjY4LDMyMjk4LDMyMzI3LDMyMzU3LDMyMzg2LDMyNDE2LDMyNDQ1LDMyNDc1LDMyNTA0LDMyNTM0LDMyNTYzLDMyNTkzLDMyNjIyLDMyNjUyLDMyNjgxLDMyNzExLDMyNzQwLDMyNzcwLDMyNzk5LDMyODI5LDMyODU4LDMyODg4LDMyOTE3LDMyOTQ3LDMyOTc2LDMzMDA2LDMzMDM1LDMzMDY1LDMzMDk0LDMzMTI0LDMzMTUzLDMzMTgzLDMzMjEzLDMzMjQzLDMzMjcyLDMzMzAyLDMzMzMxLDMzMzYxLDMzMzkwLDMzNDIwLDMzNDUwLDMzNDc5LDMzNTA5LDMzNTM5LDMzNTY4LDMzNTk4LDMzNjI3LDMzNjU3LDMzNjg2LDMzNzE2LDMzNzQ1LDMzNzc1LDMzODA0LDMzODM0LDMzODYzLDMzODkzLDMzOTIyLDMzOTUyLDMzOTgxLDM0MDExLDM0MDQwLDM0MDY5LDM0MDk5LDM0MTI4LDM0MTU4LDM0MTg3LDM0MjE3LDM0MjQ3LDM0Mjc3LDM0MzA2LDM0MzM2LDM0MzY1LDM0Mzk1LDM0NDI0LDM0NDU0LDM0NDgzLDM0NTEyLDM0NTQyLDM0NTcxLDM0NjAxLDM0NjMxLDM0NjYwLDM0NjkwLDM0NzE5LDM0NzQ5LDM0Nzc4LDM0ODA4LDM0ODM3LDM0ODY3LDM0ODk2LDM0OTI2LDM0OTU1LDM0OTg1LDM1MDE1LDM1MDQ0LDM1MDc0LDM1MTAzLDM1MTMzLDM1MTYyLDM1MTkyLDM1MjIyLDM1MjUxLDM1MjgwLDM1MzEwLDM1MzQwLDM1MzcwLDM1Mzk5LDM1NDI5LDM1NDU4LDM1NDg4LDM1NTE3LDM1NTQ3LDM1NTc2LDM1NjA1LDM1NjM1LDM1NjY1LDM1Njk0LDM1NzIzLDM1NzUzLDM1NzgyLDM1ODExLDM1ODQxLDM1ODcxLDM1OTAxLDM1OTMwLDM1OTYwLDM1OTg5LDM2MDE5LDM2MDQ4LDM2MDc4LDM2MTA3LDM2MTM2LDM2MTY2LDM2MTk1LDM2MjI1LDM2MjU0LDM2Mjg0LDM2MzE0LDM2MzQzLDM2MzczLDM2NDAzLDM2NDMzLDM2NDYyLDM2NDkyLDM2NTIxLDM2NTUxLDM2NTgwLDM2NjEwLDM2NjM5LDM2NjY5LDM2Njk4LDM2NzI4LDM2NzU3LDM2Nzg2LDM2ODE2LDM2ODQ1LDM2ODc1LDM2OTA0LDM2OTM0LDM2OTYzLDM2OTkzLDM3MDIyLDM3MDUyLDM3MDgxLDM3MTExLDM3MTQxLDM3MTcwLDM3MjAwLDM3MjI5LDM3MjU5LDM3Mjg4LDM3MzE4LDM3MzQ3LDM3Mzc3LDM3NDA2LDM3NDM2LDM3NDY1LDM3NDk1LDM3NTI0LDM3NTU0LDM3NTg0LDM3NjEzLDM3NjQzLDM3NjcyLDM3NzAxLDM3NzMxLDM3NzYwLDM3NzkwLDM3ODE5LDM3ODQ5LDM3ODc4LDM3OTA4LDM3OTM4LDM3OTY3LDM3OTk3LDM4MDI3LDM4MDU2LDM4MDg1LDM4MTE1LDM4MTQ0LDM4MTc0LDM4MjAzLDM4MjMzLDM4MjYyLDM4MjkyLDM4MzIyLDM4MzUxLDM4MzgxLDM4NDEwLDM4NDQwLDM4NDY5LDM4NDk5LDM4NTI4LDM4NTU4LDM4NTg3LDM4NjE3LDM4NjQ2LDM4Njc2LDM4NzA1LDM4NzM1LDM4NzY0LDM4Nzk0LDM4ODIzLDM4ODUzLDM4ODgyLDM4OTEyLDM4OTQxLDM4OTcxLDM5MDAxLDM5MDMwLDM5MDU5LDM5MDg5LDM5MTE4LDM5MTQ4LDM5MTc4LDM5MjA4LDM5MjM3LDM5MjY3LDM5Mjk3LDM5MzI2LDM5MzU1LDM5Mzg1LDM5NDE0LDM5NDQ0LDM5NDczLDM5NTAzLDM5NTMyLDM5NTYyLDM5NTkyLDM5NjIxLDM5NjUwLDM5NjgwLDM5NzA5LDM5NzM5LDM5NzY4LDM5Nzk4LDM5ODI3LDM5ODU3LDM5ODg2LDM5OTE2LDM5OTQ2LDM5OTc1LDQwMDA1LDQwMDM1LDQwMDY0LDQwMDk0LDQwMTIzLDQwMTUzLDQwMTgyLDQwMjEyLDQwMjQxLDQwMjcxLDQwMzAwLDQwMzMwLDQwMzU5LDQwMzg5LDQwNDE4LDQwNDQ4LDQwNDc3LDQwNTA3LDQwNTM2LDQwNTY2LDQwNTk1LDQwNjI1LDQwNjU1LDQwNjg1LDQwNzE0LDQwNzQ0LDQwNzczLDQwODAzLDQwODMyLDQwODYyLDQwODkyLDQwOTIxLDQwOTUxLDQwOTgwLDQxMDA5LDQxMDM5LDQxMDY4LDQxMDk4LDQxMTI3LDQxMTU3LDQxMTg2LDQxMjE2LDQxMjQ1LDQxMjc1LDQxMzA0LDQxMzM0LDQxMzY0LDQxMzkzLDQxNDIyLDQxNDUyLDQxNDgxLDQxNTExLDQxNTQwLDQxNTcwLDQxNTk5LDQxNjI5LDQxNjU4LDQxNjg4LDQxNzE4LDQxNzQ4LDQxNzc3LDQxODA3LDQxODM2LDQxODY1LDQxODk0LDQxOTI0LDQxOTUzLDQxOTgzLDQyMDEyLDQyMDQyLDQyMDcyLDQyMTAyLDQyMTMxLDQyMTYxLDQyMTkwLDQyMjIwLDQyMjQ5LDQyMjc5LDQyMzA4LDQyMzM3LDQyMzY3LDQyMzk3LDQyNDI2LDQyNDU2LDQyNDg1LDQyNTE1LDQyNTQ1LDQyNTc0LDQyNjA0LDQyNjMzLDQyNjYyLDQyNjkyLDQyNzIxLDQyNzUxLDQyNzgwLDQyODEwLDQyODM5LDQyODY5LDQyODk5LDQyOTI5LDQyOTU4LDQyOTg4LDQzMDE3LDQzMDQ2LDQzMDc2LDQzMTA1LDQzMTM1LDQzMTY0LDQzMTk0LDQzMjIzLDQzMjUzLDQzMjgzLDQzMzEyLDQzMzQyLDQzMzcxLDQzNDAxLDQzNDMwLDQzNDYwLDQzNDg5LDQzNTE5LDQzNTQ4LDQzNTc4LDQzNjA3LDQzNjM3LDQzNjY2LDQzNjk2LDQzNzI2LDQzNzU1LDQzNzg1LDQzODE0LDQzODQ0LDQzODczLDQzOTAzLDQzOTMyLDQzOTYyLDQzOTkxLDQ0MDIxLDQ0MDUwLDQ0MDgwLDQ0MTA5LDQ0MTM5LDQ0MTY5LDQ0MTk4LDQ0MjI4LDQ0MjU4LDQ0Mjg3LDQ0MzE3LDQ0MzQ2LDQ0Mzc1LDQ0NDA1LDQ0NDM0LDQ0NDY0LDQ0NDkzLDQ0NTIzLDQ0NTUzLDQ0NTgyLDQ0NjEyLDQ0NjQxLDQ0NjcxLDQ0NzAwLDQ0NzMwLDQ0NzU5LDQ0Nzg4LDQ0ODE4LDQ0ODQ3LDQ0ODc3LDQ0OTA2LDQ0OTM2LDQ0OTY2LDQ0OTk2LDQ1MDI1LDQ1MDU1LDQ1MDg0LDQ1MTE0LDQ1MTQzLDQ1MTcyLDQ1MjAyLDQ1MjMxLDQ1MjYxLDQ1MjkwLDQ1MzIwLDQ1MzUwLDQ1MzgwLDQ1NDA5LDQ1NDM5LDQ1NDY4LDQ1NDk4LDQ1NTI3LDQ1NTU2LDQ1NTg2LDQ1NjE1LDQ1NjQ0LDQ1Njc0LDQ1NzA0LDQ1NzMzLDQ1NzYzLDQ1NzkzLDQ1ODIzLDQ1ODUyLDQ1ODgyLDQ1OTExLDQ1OTQwLDQ1OTcwLDQ1OTk5LDQ2MDI4LDQ2MDU4LDQ2MDg4LDQ2MTE3LDQ2MTQ3LDQ2MTc3LDQ2MjA2LDQ2MjM2LDQ2MjY1LDQ2Mjk1LDQ2MzI0LDQ2MzU0LDQ2MzgzLDQ2NDEzLDQ2NDQyLDQ2NDcyLDQ2NTAxLDQ2NTMxLDQ2NTYwLDQ2NTkwLDQ2NjIwLDQ2NjQ5LDQ2Njc5LDQ2NzA4LDQ2NzM4LDQ2NzY3LDQ2Nzk3LDQ2ODI2LDQ2ODU2LDQ2ODg1LDQ2OTE1LDQ2OTQ0LDQ2OTc0LDQ3MDAzLDQ3MDMzLDQ3MDYzLDQ3MDkyLDQ3MTIyLDQ3MTUxLDQ3MTgxLDQ3MjEwLDQ3MjQwLDQ3MjY5LDQ3Mjk4LDQ3MzI4LDQ3MzU3LDQ3Mzg3LDQ3NDE3LDQ3NDQ2LDQ3NDc2LDQ3NTA2LDQ3NTM1LDQ3NTY1LDQ3NTk0LDQ3NjI0LDQ3NjUzLDQ3NjgyLDQ3NzEyLDQ3NzQxLDQ3NzcxLDQ3ODAwLDQ3ODMwLDQ3ODYwLDQ3ODkwLDQ3OTE5LDQ3OTQ5LDQ3OTc4LDQ4MDA4LDQ4MDM3LDQ4MDY2LDQ4MDk2LDQ4MTI1LDQ4MTU1LDQ4MTg0LDQ4MjE0LDQ4MjQ0LDQ4MjczLDQ4MzAzLDQ4MzMzLDQ4MzYyLDQ4MzkyLDQ4NDIxLDQ4NDUwLDQ4NDgwLDQ4NTA5LDQ4NTM4LDQ4NTY4LDQ4NTk4LDQ4NjI3LDQ4NjU3LDQ4Njg3LDQ4NzE3LDQ4NzQ2LDQ4Nzc2LDQ4ODA1LDQ4ODM0LDQ4ODY0LDQ4ODkzLDQ4OTIyLDQ4OTUyLDQ4OTgyLDQ5MDExLDQ5MDQxLDQ5MDcxLDQ5MTAwLDQ5MTMwLDQ5MTYwLDQ5MTg5LDQ5MjE4LDQ5MjQ4LDQ5Mjc3LDQ5MzA2LDQ5MzM2LDQ5MzY1LDQ5Mzk1LDQ5NDI1LDQ5NDU1LDQ5NDg0LDQ5NTE0LDQ5NTQzLDQ5NTczLDQ5NjAyLDQ5NjMyLDQ5NjYxLDQ5NjkwLDQ5NzIwLDQ5NzQ5LDQ5Nzc5LDQ5ODA5LDQ5ODM4LDQ5ODY4LDQ5ODk4LDQ5OTI3LDQ5OTU3LDQ5OTg2LDUwMDE2LDUwMDQ1LDUwMDc1LDUwMTA0LDUwMTMzLDUwMTYzLDUwMTkyLDUwMjIyLDUwMjUyLDUwMjgxLDUwMzExLDUwMzQwLDUwMzcwLDUwNDAwLDUwNDI5LDUwNDU5LDUwNDg4LDUwNTE4LDUwNTQ3LDUwNTc2LDUwNjA2LDUwNjM1LDUwNjY1LDUwNjk0LDUwNzI0LDUwNzU0LDUwNzg0LDUwODEzLDUwODQzLDUwODcyLDUwOTAyLDUwOTMxLDUwOTYwLDUwOTkwLDUxMDE5LDUxMDQ5LDUxMDc4LDUxMTA4LDUxMTM4LDUxMTY3LDUxMTk3LDUxMjI3LDUxMjU2LDUxMjg2LDUxMzE1LDUxMzQ1LDUxMzc0LDUxNDAzLDUxNDMzLDUxNDYyLDUxNDkyLDUxNTIyLDUxNTUyLDUxNTgyLDUxNjExLDUxNjQxLDUxNjcwLDUxNjk5LDUxNzI5LDUxNzU4LDUxNzg3LDUxODE2LDUxODQ2LDUxODc2LDUxOTA2LDUxOTM2LDUxOTY1LDUxOTk1LDUyMDI1LDUyMDU0LDUyMDgzLDUyMTEzLDUyMTQyLDUyMTcxLDUyMjAwLDUyMjMwLDUyMjYwLDUyMjkwLDUyMzE5LDUyMzQ5LDUyMzc5LDUyNDA4LDUyNDM4LDUyNDY3LDUyNDk3LDUyNTI2LDUyNTU1LDUyNTg1LDUyNjE0LDUyNjQ0LDUyNjczLDUyNzAzLDUyNzMzLDUyNzYyLDUyNzkyLDUyODIyLDUyODUxLDUyODgxLDUyOTEwLDUyOTM5LDUyOTY5LDUyOTk4LDUzMDI4LDUzMDU3LDUzMDg3LDUzMTE2LDUzMTQ2LDUzMTc2LDUzMjA1LDUzMjM1LDUzMjY0LDUzMjk0LDUzMzI0LDUzMzUzLDUzMzgzLDUzNDEyLDUzNDQxLDUzNDcxLDUzNTAwLDUzNTMwLDUzNTU5LDUzNTg5LDUzNjE5LDUzNjQ4LDUzNjc4LDUzNzA4LDUzNzM3LDUzNzY3LDUzNzk2LDUzODI1LDUzODU1LDUzODg0LDUzOTEzLDUzOTQzLDUzOTczLDU0MDAzLDU0MDMyLDU0MDYyLDU0MDkyLDU0MTIxLDU0MTUxLDU0MTgwLDU0MjA5LDU0MjM5LDU0MjY4LDU0Mjk3LDU0MzI3LDU0MzU3LDU0Mzg3LDU0NDE2LDU0NDQ2LDU0NDc2LDU0NTA1LDU0NTM1LDU0NTY0LDU0NTkzLDU0NjIzLDU0NjUyLDU0NjgxLDU0NzExLDU0NzQxLDU0NzcwLDU0ODAwLDU0ODMwLDU0ODU5LDU0ODg5LDU0OTE5LDU0OTQ4LDU0OTc3LDU1MDA3LDU1MDM2LDU1MDY2LDU1MDk1LDU1MTI1LDU1MTU0LDU1MTg0LDU1MjEzLDU1MjQzLDU1MjczLDU1MzAyLDU1MzMyLDU1MzYxLDU1MzkxLDU1NDIwLDU1NDUwLDU1NDc5LDU1NTA4LDU1NTM4LDU1NTY3LDU1NTk3LDU1NjI3LDU1NjU3LDU1Njg2LDU1NzE2LDU1NzQ1LDU1Nzc1LDU1ODA0LDU1ODM0LDU1ODYzLDU1ODkyLDU1OTIyLDU1OTUxLDU1OTgxLDU2MDExLDU2MDQwLDU2MDcwLDU2MTAwLDU2MTI5LDU2MTU5LDU2MTg4LDU2MjE4LDU2MjQ3LDU2Mjc2LDU2MzA2LDU2MzM1LDU2MzY1LDU2Mzk0LDU2NDI0LDU2NDU0LDU2NDgzLDU2NTEzLDU2NTQzLDU2NTcyLDU2NjAxLDU2NjMxLDU2NjYwLDU2NjkwLDU2NzE5LDU2NzQ5LDU2Nzc4LDU2ODA4LDU2ODM3LDU2ODY3LDU2ODk3LDU2OTI2LDU2OTU2LDU2OTg1LDU3MDE1LDU3MDQ0LDU3MDc0LDU3MTAzLDU3MTMzLDU3MTYyLDU3MTkyLDU3MjIxLDU3MjUxLDU3MjgwLDU3MzEwLDU3MzQwLDU3MzY5LDU3Mzk5LDU3NDI5LDU3NDU4LDU3NDg3LDU3NTE3LDU3NTQ2LDU3NTc2LDU3NjA1LDU3NjM0LDU3NjY0LDU3Njk0LDU3NzIzLDU3NzUzLDU3NzgzLDU3ODEzLDU3ODQyLDU3ODcxLDU3OTAxLDU3OTMwLDU3OTU5LDU3OTg5LDU4MDE4LDU4MDQ4LDU4MDc3LDU4MTA3LDU4MTM3LDU4MTY3LDU4MTk2LDU4MjI2LDU4MjU1LDU4Mjg1LDU4MzE0LDU4MzQzLDU4MzczLDU4NDAyLDU4NDMyLDU4NDYxLDU4NDkxLDU4NTIxLDU4NTUxLDU4NTgwLDU4NjEwLDU4NjM5LDU4NjY5LDU4Njk4LDU4NzI3LDU4NzU3LDU4Nzg2LDU4ODE2LDU4ODQ1LDU4ODc1LDU4OTA1LDU4OTM0LDU4OTY0LDU4OTk0LDU5MDIzLDU5MDUzLDU5MDgyLDU5MTExLDU5MTQxLDU5MTcwLDU5MjAwLDU5MjI5LDU5MjU5LDU5Mjg4LDU5MzE4LDU5MzQ4LDU5Mzc3LDU5NDA3LDU5NDM2LDU5NDY2LDU5NDk1LDU5NTI1LDU5NTU0LDU5NTg0LDU5NjEzLDU5NjQzLDU5NjcyLDU5NzAyLDU5NzMxLDU5NzYxLDU5NzkxLDU5ODIwLDU5ODUwLDU5ODc5LDU5OTA5LDU5OTM5LDU5OTY4LDU5OTk3LDYwMDI3LDYwMDU2LDYwMDg2LDYwMTE1LDYwMTQ1LDYwMTc0LDYwMjA0LDYwMjM0LDYwMjY0LDYwMjkzLDYwMzIzLDYwMzUyLDYwMzgxLDYwNDExLDYwNDQwLDYwNDY5LDYwNDk5LDYwNTI4LDYwNTU4LDYwNTg4LDYwNjE4LDYwNjQ4LDYwNjc3LDYwNzA3LDYwNzM2LDYwNzY1LDYwNzk1LDYwODI0LDYwODUzLDYwODgzLDYwOTEyLDYwOTQyLDYwOTcyLDYxMDAyLDYxMDMxLDYxMDYxLDYxMDkwLDYxMTIwLDYxMTQ5LDYxMTc5LDYxMjA4LDYxMjM3LDYxMjY3LDYxMjk2LDYxMzI2LDYxMzU2LDYxMzg1LDYxNDE1LDYxNDQ1LDYxNDc0LDYxNTA0LDYxNTMzLDYxNTYzLDYxNTkyLDYxNjIxLDYxNjUxLDYxNjgwLDYxNzEwLDYxNzM5LDYxNzY5LDYxNzk5LDYxODI4LDYxODU4LDYxODg4LDYxOTE3LDYxOTQ3LDYxOTc2LDYyMDA2LDYyMDM1LDYyMDY0LDYyMDk0LDYyMTIzLDYyMTUzLDYyMTgyLDYyMjEyLDYyMjQyLDYyMjcxLDYyMzAxLDYyMzMxLDYyMzYwLDYyMzkwLDYyNDE5LDYyNDQ4LDYyNDc4LDYyNTA3LDYyNTM3LDYyNTY2LDYyNTk2LDYyNjI1LDYyNjU1LDYyNjg1LDYyNzE1LDYyNzQ0LDYyNzc0LDYyODAzLDYyODMyLDYyODYyLDYyODkxLDYyOTIxLDYyOTUwLDYyOTgwLDYzMDA5LDYzMDM5LDYzMDY5LDYzMDk5LDYzMTI4LDYzMTU3LDYzMTg3LDYzMjE2LDYzMjQ2LDYzMjc1LDYzMzA1LDYzMzM0LDYzMzYzLDYzMzkzLDYzNDIzLDYzNDUzLDYzNDgyLDYzNTEyLDYzNTQxLDYzNTcxLDYzNjAwLDYzNjMwLDYzNjU5LDYzNjg5LDYzNzE4LDYzNzQ3LDYzNzc3LDYzODA3LDYzODM2LDYzODY2LDYzODk1LDYzOTI1LDYzOTU1LDYzOTg0LDY0MDE0LDY0MDQzLDY0MDczLDY0MTAyLDY0MTMxLDY0MTYxLDY0MTkwLDY0MjIwLDY0MjQ5LDY0Mjc5LDY0MzA5LDY0MzM5LDY0MzY4LDY0Mzk4LDY0NDI3LDY0NDU3LDY0NDg2LDY0NTE1LDY0NTQ1LDY0NTc0LDY0NjAzLDY0NjMzLDY0NjYzLDY0NjkyLDY0NzIyLDY0NzUyLDY0NzgyLDY0ODExLDY0ODQxLDY0ODcwLDY0ODk5LDY0OTI5LDY0OTU4LDY0OTg3LDY1MDE3LDY1MDQ3LDY1MDc2LDY1MTA2LDY1MTM2LDY1MTY2LDY1MTk1LDY1MjI1LDY1MjU0LDY1MjgzLDY1MzEzLDY1MzQyLDY1MzcxLDY1NDAxLDY1NDMxLDY1NDYwLDY1NDkwLDY1NTIwLDY1NTQ5LDY1NTc5LDY1NjA4LDY1NjM4LDY1NjY3LDY1Njk3LDY1NzI2LDY1NzU1LDY1Nzg1LDY1ODE1LDY1ODQ0LDY1ODc0LDY1OTAzLDY1OTMzLDY1OTYzLDY1OTkyLDY2MDIyLDY2MDUxLDY2MDgxLDY2MTEwLDY2MTQwLDY2MTY5LDY2MTk5LDY2MjI4LDY2MjU4LDY2Mjg3LDY2MzE3LDY2MzQ2LDY2Mzc2LDY2NDA1LDY2NDM1LDY2NDY1LDY2NDk0LDY2NTI0LDY2NTUzLDY2NTgzLDY2NjEyLDY2NjQxLDY2NjcxLDY2NzAwLDY2NzMwLDY2NzYwLDY2Nzg5LDY2ODE5LDY2ODQ5LDY2ODc4LDY2OTA4LDY2OTM3LDY2OTY3LDY2OTk2LDY3MDI1LDY3MDU1LDY3MDg0LDY3MTE0LDY3MTQzLDY3MTczLDY3MjAzLDY3MjMzLDY3MjYyLDY3MjkyLDY3MzIxLDY3MzUxLDY3MzgwLDY3NDA5LDY3NDM5LDY3NDY4LDY3NDk3LDY3NTI3LDY3NTU3LDY3NTg3LDY3NjE3LDY3NjQ2LDY3Njc2LDY3NzA1LDY3NzM1LDY3NzY0LDY3NzkzLDY3ODIzLDY3ODUyLDY3ODgyLDY3OTExLDY3OTQxLDY3OTcxLDY4ZTMsNjgwMzAsNjgwNjAsNjgwODksNjgxMTksNjgxNDgsNjgxNzcsNjgyMDcsNjgyMzYsNjgyNjYsNjgyOTUsNjgzMjUsNjgzNTQsNjgzODQsNjg0MTQsNjg0NDMsNjg0NzMsNjg1MDIsNjg1MzIsNjg1NjEsNjg1OTEsNjg2MjAsNjg2NTAsNjg2NzksNjg3MDgsNjg3MzgsNjg3NjgsNjg3OTcsNjg4MjcsNjg4NTcsNjg4ODYsNjg5MTYsNjg5NDYsNjg5NzUsNjkwMDQsNjkwMzQsNjkwNjMsNjkwOTIsNjkxMjIsNjkxNTIsNjkxODEsNjkyMTEsNjkyNDAsNjkyNzAsNjkzMDAsNjkzMzAsNjkzNTksNjkzODgsNjk0MTgsNjk0NDcsNjk0NzYsNjk1MDYsNjk1MzUsNjk1NjUsNjk1OTUsNjk2MjQsNjk2NTQsNjk2ODQsNjk3MTMsNjk3NDMsNjk3NzIsNjk4MDIsNjk4MzEsNjk4NjEsNjk4OTAsNjk5MTksNjk5NDksNjk5NzgsNzAwMDgsNzAwMzgsNzAwNjcsNzAwOTcsNzAxMjYsNzAxNTYsNzAxODYsNzAyMTUsNzAyNDUsNzAyNzQsNzAzMDMsNzAzMzMsNzAzNjIsNzAzOTIsNzA0MjEsNzA0NTEsNzA0ODEsNzA1MTAsNzA1NDAsNzA1NzAsNzA1OTksNzA2MjksNzA2NTgsNzA2ODcsNzA3MTcsNzA3NDYsNzA3NzYsNzA4MDUsNzA4MzUsNzA4NjQsNzA4OTQsNzA5MjQsNzA5NTQsNzA5ODMsNzEwMTMsNzEwNDIsNzEwNzEsNzExMDEsNzExMzAsNzExNTksNzExODksNzEyMTgsNzEyNDgsNzEyNzgsNzEzMDgsNzEzMzcsNzEzNjcsNzEzOTcsNzE0MjYsNzE0NTUsNzE0ODUsNzE1MTQsNzE1NDMsNzE1NzMsNzE2MDIsNzE2MzIsNzE2NjIsNzE2OTEsNzE3MjEsNzE3NTEsNzE3ODEsNzE4MTAsNzE4MzksNzE4NjksNzE4OTgsNzE5MjcsNzE5NTcsNzE5ODYsNzIwMTYsNzIwNDYsNzIwNzUsNzIxMDUsNzIxMzUsNzIxNjQsNzIxOTQsNzIyMjMsNzIyNTMsNzIyODIsNzIzMTEsNzIzNDEsNzIzNzAsNzI0MDAsNzI0MjksNzI0NTksNzI0ODksNzI1MTgsNzI1NDgsNzI1NzcsNzI2MDcsNzI2MzcsNzI2NjYsNzI2OTUsNzI3MjUsNzI3NTQsNzI3ODQsNzI4MTMsNzI4NDMsNzI4NzIsNzI5MDIsNzI5MzEsNzI5NjEsNzI5OTEsNzMwMjAsNzMwNTAsNzMwODAsNzMxMDksNzMxMzksNzMxNjgsNzMxOTcsNzMyMjcsNzMyNTYsNzMyODYsNzMzMTUsNzMzNDUsNzMzNzUsNzM0MDQsNzM0MzQsNzM0NjQsNzM0OTMsNzM1MjMsNzM1NTIsNzM1ODEsNzM2MTEsNzM2NDAsNzM2NjksNzM2OTksNzM3MjksNzM3NTgsNzM3ODgsNzM4MTgsNzM4NDgsNzM4NzcsNzM5MDcsNzM5MzYsNzM5NjUsNzM5OTUsNzQwMjQsNzQwNTMsNzQwODMsNzQxMTMsNzQxNDIsNzQxNzIsNzQyMDIsNzQyMzEsNzQyNjEsNzQyOTEsNzQzMjAsNzQzNDksNzQzNzksNzQ0MDgsNzQ0MzcsNzQ0NjcsNzQ0OTcsNzQ1MjYsNzQ1NTYsNzQ1ODYsNzQ2MTUsNzQ2NDUsNzQ2NzUsNzQ3MDQsNzQ3MzMsNzQ3NjMsNzQ3OTIsNzQ4MjIsNzQ4NTEsNzQ4ODEsNzQ5MTAsNzQ5NDAsNzQ5NjksNzQ5OTksNzUwMjksNzUwNTgsNzUwODgsNzUxMTcsNzUxNDcsNzUxNzYsNzUyMDYsNzUyMzUsNzUyNjQsNzUyOTQsNzUzMjMsNzUzNTMsNzUzODMsNzU0MTIsNzU0NDIsNzU0NzIsNzU1MDEsNzU1MzEsNzU1NjAsNzU1OTAsNzU2MTksNzU2NDgsNzU2NzgsNzU3MDcsNzU3MzcsNzU3NjYsNzU3OTYsNzU4MjYsNzU4NTYsNzU4ODUsNzU5MTUsNzU5NDQsNzU5NzQsNzYwMDMsNzYwMzIsNzYwNjIsNzYwOTEsNzYxMjEsNzYxNTAsNzYxODAsNzYyMTAsNzYyMzksNzYyNjksNzYyOTksNzYzMjgsNzYzNTgsNzYzODcsNzY0MTYsNzY0NDYsNzY0NzUsNzY1MDUsNzY1MzQsNzY1NjQsNzY1OTMsNzY2MjMsNzY2NTMsNzY2ODIsNzY3MTIsNzY3NDEsNzY3NzEsNzY4MDEsNzY4MzAsNzY4NTksNzY4ODksNzY5MTgsNzY5NDgsNzY5NzcsNzcwMDcsNzcwMzYsNzcwNjYsNzcwOTYsNzcxMjUsNzcxNTUsNzcxODUsNzcyMTQsNzcyNDMsNzcyNzMsNzczMDIsNzczMzIsNzczNjEsNzczOTAsNzc0MjAsNzc0NTAsNzc0NzksNzc1MDksNzc1MzksNzc1NjksNzc1OTgsNzc2MjcsNzc2NTcsNzc2ODYsNzc3MTUsNzc3NDUsNzc3NzQsNzc4MDQsNzc4MzMsNzc4NjMsNzc4OTMsNzc5MjMsNzc5NTIsNzc5ODIsNzgwMTEsNzgwNDEsNzgwNzAsNzgwOTksNzgxMjksNzgxNTgsNzgxODgsNzgyMTcsNzgyNDcsNzgyNzcsNzgzMDcsNzgzMzYsNzgzNjYsNzgzOTUsNzg0MjUsNzg0NTQsNzg0ODMsNzg1MTMsNzg1NDIsNzg1NzIsNzg2MDEsNzg2MzEsNzg2NjEsNzg2OTAsNzg3MjAsNzg3NTAsNzg3NzksNzg4MDgsNzg4MzgsNzg4NjcsNzg4OTcsNzg5MjYsNzg5NTYsNzg5ODUsNzkwMTUsNzkwNDQsNzkwNzQsNzkxMDQsNzkxMzMsNzkxNjMsNzkxOTIsNzkyMjIsNzkyNTEsNzkyODEsNzkzMTAsNzkzNDAsNzkzNjksNzkzOTksNzk0MjgsNzk0NTgsNzk0ODcsNzk1MTcsNzk1NDYsNzk1NzYsNzk2MDYsNzk2MzUsNzk2NjUsNzk2OTUsNzk3MjQsNzk3NTMsNzk3ODMsNzk4MTIsNzk4NDEsNzk4NzEsNzk5MDAsNzk5MzAsNzk5NjAsNzk5OTBdfSx7Ii4uL21haW4iOjgyLCJvYmplY3QtYXNzaWduIjo1NX1dLDgyOltmdW5jdGlvbihlLHQscil7dmFyIG49ZSgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEoKXt0aGlzLnJlZ2lvbmFsT3B0aW9ucz1bXSx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl09e2ludmFsaWRDYWxlbmRhcjoiQ2FsZW5kYXIgezB9IG5vdCBmb3VuZCIsaW52YWxpZERhdGU6IkludmFsaWQgezB9IGRhdGUiLGludmFsaWRNb250aDoiSW52YWxpZCB7MH0gbW9udGgiLGludmFsaWRZZWFyOiJJbnZhbGlkIHswfSB5ZWFyIixkaWZmZXJlbnRDYWxlbmRhcnM6IkNhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMifSx0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zWyIiXSx0aGlzLmNhbGVuZGFycz17fSx0aGlzLl9sb2NhbENhbHM9e319ZnVuY3Rpb24gaShlLHQscixuKXtpZih0aGlzLl9jYWxlbmRhcj1lLHRoaXMuX3llYXI9dCx0aGlzLl9tb250aD1yLHRoaXMuX2RheT1uLDA9PT10aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodGhpcy5feWVhcix0aGlzLl9tb250aCx0aGlzLl9kYXkpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4iMDAwMDAwIi5zdWJzdHJpbmcoMCx0LShlPSIiK2UpLmxlbmd0aCkrZX1mdW5jdGlvbiBsKCl7dGhpcy5zaG9ydFllYXJDdXRvZmY9IisxMCJ9ZnVuY3Rpb24gcyhlKXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW2VdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19bihhLnByb3RvdHlwZSx7aW5zdGFuY2U6ZnVuY3Rpb24oZSx0KXtlPShlfHwiZ3JlZ29yaWFuIikudG9Mb3dlckNhc2UoKSx0PXR8fCIiO3ZhciByPXRoaXMuX2xvY2FsQ2Fsc1tlKyItIit0XTtpZighciYmdGhpcy5jYWxlbmRhcnNbZV0mJihyPW5ldyB0aGlzLmNhbGVuZGFyc1tlXSh0KSx0aGlzLl9sb2NhbENhbHNbZSsiLSIrdF09ciksIXIpdGhyb3codGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXJ8fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQ2FsZW5kYXIpLnJlcGxhY2UoL1x7MFx9LyxlKTtyZXR1cm4gcn0sbmV3RGF0ZTpmdW5jdGlvbihlLHQscixuLGEpe3JldHVybihuPShudWxsIT1lJiZlLnllYXI/ZS5jYWxlbmRhcigpOiJzdHJpbmciPT10eXBlb2Ygbj90aGlzLmluc3RhbmNlKG4sYSk6bil8fHRoaXMuaW5zdGFuY2UoKSkubmV3RGF0ZShlLHQscil9LHN1YnN0aXR1dGVEaWdpdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKX19LHN1YnN0aXR1dGVDaGluZXNlRGlnaXRzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0iIixhPTA7cj4wOyl7dmFyIGk9ciUxMDtuPSgwPT09aT8iIjplW2ldK3RbYV0pK24sYSsrLHI9TWF0aC5mbG9vcihyLzEwKX1yZXR1cm4gMD09PW4uaW5kZXhPZihlWzFdK3RbMV0pJiYobj1uLnN1YnN0cigxKSksbnx8ZVswXX19fSksbihpLnByb3RvdHlwZSx7bmV3RGF0ZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm5ld0RhdGUobnVsbD09ZT90aGlzOmUsdCxyKX0seWVhcjpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5feWVhcjp0aGlzLnNldChlLCJ5Iil9LG1vbnRoOmZ1bmN0aW9uKGUpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9tb250aDp0aGlzLnNldChlLCJtIil9LGRheTpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fZGF5OnRoaXMuc2V0KGUsImQiKX0sZGF0ZTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQoZSx0LHIpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO3JldHVybiB0aGlzLl95ZWFyPWUsdGhpcy5fbW9udGg9dCx0aGlzLl9kYXk9cix0aGlzfSxsZWFwWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5sZWFwWWVhcih0aGlzKX0sZXBvY2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZXBvY2godGhpcyl9LGZvcm1hdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZm9ybWF0WWVhcih0aGlzKX0sbW9udGhPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubW9udGhPZlllYXIodGhpcyl9LHdlZWtPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla09mWWVhcih0aGlzKX0sZGF5c0luWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5ZZWFyKHRoaXMpfSxkYXlPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZZZWFyKHRoaXMpfSxkYXlzSW5Nb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5Nb250aCh0aGlzKX0sZGF5T2ZXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mV2Vlayh0aGlzKX0sd2Vla0RheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrRGF5KHRoaXMpfSxleHRyYUluZm86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZXh0cmFJbmZvKHRoaXMpfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMsZSx0KX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnNldCh0aGlzLGUsdCl9LGNvbXBhcmVUbzpmdW5jdGlvbihlKXtpZih0aGlzLl9jYWxlbmRhci5uYW1lIT09ZS5fY2FsZW5kYXIubmFtZSl0aHJvdyhjLmxvY2FsLmRpZmZlcmVudENhbGVuZGFyc3x8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpLnJlcGxhY2UoL1x7MVx9LyxlLl9jYWxlbmRhci5sb2NhbC5uYW1lKTt2YXIgdD10aGlzLl95ZWFyIT09ZS5feWVhcj90aGlzLl95ZWFyLWUuX3llYXI6dGhpcy5fbW9udGghPT1lLl9tb250aD90aGlzLm1vbnRoT2ZZZWFyKCktZS5tb250aE9mWWVhcigpOnRoaXMuX2RheS1lLl9kYXk7cmV0dXJuIDA9PT10PzA6dDwwPy0xOjF9LGNhbGVuZGFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyfSx0b0pEOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSkQodGhpcyl9LGZyb21KRDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpEKGUpfSx0b0pTRGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pTRGF0ZSh0aGlzKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpTRGF0ZShlKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy55ZWFyKCk8MD8iLSI6IiIpK28oTWF0aC5hYnModGhpcy55ZWFyKCkpLDQpKyItIitvKHRoaXMubW9udGgoKSwyKSsiLSIrbyh0aGlzLmRheSgpLDIpfX0pLG4obC5wcm90b3R5cGUse192YWxpZGF0ZUxldmVsOjAsbmV3RGF0ZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIG51bGw9PWU/dGhpcy50b2RheSgpOihlLnllYXImJih0aGlzLl92YWxpZGF0ZShlLHQscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHI9ZS5kYXkoKSx0PWUubW9udGgoKSxlPWUueWVhcigpKSxuZXcgaSh0aGlzLGUsdCxyKSl9LHRvZGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbUpTRGF0ZShuZXcgRGF0ZSl9LGVwb2NoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZShlLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKS55ZWFyKCk8MD90aGlzLmxvY2FsLmVwb2Noc1swXTp0aGlzLmxvY2FsLmVwb2Noc1sxXX0sZm9ybWF0WWVhcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92YWxpZGF0ZShlLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4odC55ZWFyKCk8MD8iLSI6IiIpK28oTWF0aC5hYnModC55ZWFyKCkpLDQpfSxtb250aHNJblllYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKGUsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLDEyfSxtb250aE9mWWVhcjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKGUsdCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRNb250aCk7cmV0dXJuKHIubW9udGgoKSt0aGlzLm1vbnRoc0luWWVhcihyKS10aGlzLmZpcnN0TW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHIpK3RoaXMubWluTW9udGh9LGZyb21Nb250aE9mWWVhcjpmdW5jdGlvbihlLHQpe3ZhciByPSh0K3RoaXMuZmlyc3RNb250aC0yKnRoaXMubWluTW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKGUpK3RoaXMubWluTW9udGg7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKGUscix0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRNb250aCkscn0sZGF5c0luWWVhcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92YWxpZGF0ZShlLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8zNjY6MzY1fSxkYXlPZlllYXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKGUsdCxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIG4udG9KRCgpLXRoaXMubmV3RGF0ZShuLnllYXIoKSx0aGlzLmZyb21Nb250aE9mWWVhcihuLnllYXIoKSx0aGlzLm1pbk1vbnRoKSx0aGlzLm1pbkRheSkudG9KRCgpKzF9LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gN30sZGF5T2ZXZWVrOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZShlLHQscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybihNYXRoLmZsb29yKHRoaXMudG9KRChuKSkrMikldGhpcy5kYXlzSW5XZWVrKCl9LGV4dHJhSW5mbzpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKGUsdCxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkse319LGFkZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKGUsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHRoaXMuX2NvcnJlY3RBZGQoZSx0aGlzLl9hZGQoZSx0LHIpLHQscil9LF9hZGQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKywiZCI9PT1yfHwidyI9PT1yKXt2YXIgbj1lLnRvSkQoKSt0KigidyI9PT1yP3RoaXMuZGF5c0luV2VlaygpOjEpLGE9ZS5jYWxlbmRhcigpLmZyb21KRChuKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLFthLnllYXIoKSxhLm1vbnRoKCksYS5kYXkoKV19dHJ5e3ZhciBpPWUueWVhcigpKygieSI9PT1yP3Q6MCksbz1lLm1vbnRoT2ZZZWFyKCkrKCJtIj09PXI/dDowKTthPWUuZGF5KCk7InkiPT09cj8oZS5tb250aCgpIT09dGhpcy5mcm9tTW9udGhPZlllYXIoaSxvKSYmKG89dGhpcy5uZXdEYXRlKGksZS5tb250aCgpLHRoaXMubWluRGF5KS5tb250aE9mWWVhcigpKSxvPU1hdGgubWluKG8sdGhpcy5tb250aHNJblllYXIoaSkpLGE9TWF0aC5taW4oYSx0aGlzLmRheXNJbk1vbnRoKGksdGhpcy5mcm9tTW9udGhPZlllYXIoaSxvKSkpKToibSI9PT1yJiYoIWZ1bmN0aW9uKGUpe2Zvcig7bzxlLm1pbk1vbnRoOylpLS0sbys9ZS5tb250aHNJblllYXIoaSk7Zm9yKHZhciB0PWUubW9udGhzSW5ZZWFyKGkpO28+dC0xK2UubWluTW9udGg7KWkrKyxvLT10LHQ9ZS5tb250aHNJblllYXIoaSl9KHRoaXMpLGE9TWF0aC5taW4oYSx0aGlzLmRheXNJbk1vbnRoKGksdGhpcy5mcm9tTW9udGhPZlllYXIoaSxvKSkpKTt2YXIgbD1baSx0aGlzLmZyb21Nb250aE9mWWVhcihpLG8pLGFdO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sbH1jYXRjaChlKXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sZX19LF9jb3JyZWN0QWRkOmZ1bmN0aW9uKGUsdCxyLG4pe2lmKCEodGhpcy5oYXNZZWFyWmVyb3x8InkiIT09biYmIm0iIT09bnx8MCE9PXRbMF0mJmUueWVhcigpPjA9PXRbMF0+MCkpe3ZhciBhPXt5OlsxLDEsInkiXSxtOlsxLHRoaXMubW9udGhzSW5ZZWFyKC0xKSwibSJdLHc6W3RoaXMuZGF5c0luV2VlaygpLHRoaXMuZGF5c0luWWVhcigtMSksImQiXSxkOlsxLHRoaXMuZGF5c0luWWVhcigtMSksImQiXX1bbl0saT1yPDA/LTE6MTt0PXRoaXMuX2FkZChlLHIqYVswXStpKmFbMV0sYVsyXSl9cmV0dXJuIGUuZGF0ZSh0WzBdLHRbMV0sdFsyXSl9LHNldDpmdW5jdGlvbihlLHQscil7dGhpcy5fdmFsaWRhdGUoZSx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7dmFyIG49InkiPT09cj90OmUueWVhcigpLGE9Im0iPT09cj90OmUubW9udGgoKSxpPSJkIj09PXI/dDplLmRheSgpO3JldHVybiJ5IiE9PXImJiJtIiE9PXJ8fChpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChuLGEpKSksZS5kYXRlKG4sYSxpKX0saXNWYWxpZDpmdW5jdGlvbihlLHQscil7dGhpcy5fdmFsaWRhdGVMZXZlbCsrO3ZhciBuPXRoaXMuaGFzWWVhclplcm98fDAhPT1lO2lmKG4pe3ZhciBhPXRoaXMubmV3RGF0ZShlLHQsdGhpcy5taW5EYXkpO249dD49dGhpcy5taW5Nb250aCYmdC10aGlzLm1pbk1vbnRoPHRoaXMubW9udGhzSW5ZZWFyKGEpJiZyPj10aGlzLm1pbkRheSYmci10aGlzLm1pbkRheTx0aGlzLmRheXNJbk1vbnRoKGEpfXJldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sbn0sdG9KU0RhdGU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKGUsdCxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIGMuaW5zdGFuY2UoKS5mcm9tSkQodGhpcy50b0pEKG4pKS50b0pTRGF0ZSgpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZyb21KRChjLmluc3RhbmNlKCkuZnJvbUpTRGF0ZShlKS50b0pEKCkpfSxfdmFsaWRhdGU6ZnVuY3Rpb24oZSx0LHIsbil7aWYoZS55ZWFyKXtpZigwPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmdGhpcy5uYW1lIT09ZS5jYWxlbmRhcigpLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpLnJlcGxhY2UoL1x7MVx9LyxlLmNhbGVuZGFyKCkubG9jYWwubmFtZSk7cmV0dXJuIGV9dHJ5e2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKywxPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuaXNWYWxpZChlLHQscikpdGhyb3cgbi5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTt2YXIgYT10aGlzLm5ld0RhdGUoZSx0LHIpO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sYX1jYXRjaChlKXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sZX19fSkscy5wcm90b3R5cGU9bmV3IGwsbihzLnByb3RvdHlwZSx7bmFtZToiR3JlZ29yaWFuIixqZEVwb2NoOjE3MjE0MjUuNSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJHcmVnb3JpYW4iLGVwb2NoczpbIkJDRSIsIkNFIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoibW0vZGQveXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ZhbGlkYXRlKGUsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybihlPXQueWVhcigpKyh0LnllYXIoKTwwPzE6MCkpJTQ9PTAmJihlJTEwMCE9MHx8ZSU0MDA9PTApfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLm5ld0RhdGUoZSx0LHIpO3JldHVybiBuLmFkZCg0LShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl92YWxpZGF0ZShlLHQsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybih0aGlzLmRheU9mV2VlayhlLHQscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKGUsdCxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7ZT1uLnllYXIoKSx0PW4ubW9udGgoKSxyPW4uZGF5KCksZTwwJiZlKyssdDwzJiYodCs9MTIsZS0tKTt2YXIgYT1NYXRoLmZsb29yKGUvMTAwKSxpPTItYStNYXRoLmZsb29yKGEvNCk7cmV0dXJuIE1hdGguZmxvb3IoMzY1LjI1KihlKzQ3MTYpKStNYXRoLmZsb29yKDMwLjYwMDEqKHQrMSkpK3IraS0xNTI0LjV9LGZyb21KRDpmdW5jdGlvbihlKXt2YXIgdD1NYXRoLmZsb29yKGUrLjUpLHI9TWF0aC5mbG9vcigodC0xODY3MjE2LjI1KS8zNjUyNC4yNSksbj0ocj10KzErci1NYXRoLmZsb29yKHIvNCkpKzE1MjQsYT1NYXRoLmZsb29yKChuLTEyMi4xKS8zNjUuMjUpLGk9TWF0aC5mbG9vcigzNjUuMjUqYSksbz1NYXRoLmZsb29yKChuLWkpLzMwLjYwMDEpLGw9bi1pLU1hdGguZmxvb3IoMzAuNjAwMSpvKSxzPW8tKG8+MTMuNT8xMzoxKSxjPWEtKHM+Mi41PzQ3MTY6NDcxNSk7cmV0dXJuIGM8PTAmJmMtLSx0aGlzLm5ld0RhdGUoYyxzLGwpfSx0b0pTRGF0ZTpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fdmFsaWRhdGUoZSx0LHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSxhPW5ldyBEYXRlKG4ueWVhcigpLG4ubW9udGgoKS0xLG4uZGF5KCkpO3JldHVybiBhLnNldEhvdXJzKDApLGEuc2V0TWludXRlcygwKSxhLnNldFNlY29uZHMoMCksYS5zZXRNaWxsaXNlY29uZHMoMCksYS5zZXRIb3VycyhhLmdldEhvdXJzKCk+MTI/YS5nZXRIb3VycygpKzI6MCksYX0sZnJvbUpTRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uZXdEYXRlKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCkrMSxlLmdldERhdGUoKSl9fSk7dmFyIGM9dC5leHBvcnRzPW5ldyBhO2MuY2RhdGU9aSxjLmJhc2VDYWxlbmRhcj1sLGMuY2FsZW5kYXJzLmdyZWdvcmlhbj1zfSx7Im9iamVjdC1hc3NpZ24iOjU1fV0sODM6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKCJvYmplY3QtYXNzaWduIiksYT1lKCIuL21haW4iKTtuKGEucmVnaW9uYWxPcHRpb25zWyIiXSx7aW52YWxpZEFyZ3VtZW50czoiSW52YWxpZCBhcmd1bWVudHMiLGludmFsaWRGb3JtYXQ6IkNhbm5vdCBmb3JtYXQgYSBkYXRlIGZyb20gYW5vdGhlciBjYWxlbmRhciIsbWlzc2luZ051bWJlckF0OiJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiB7MH0iLHVua25vd25OYW1lQXQ6IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRMaXRlcmFsQXQ6IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRUZXh0OiJBZGRpdGlvbmFsIHRleHQgZm91bmQgYXQgZW5kIn0pLGEubG9jYWw9YS5yZWdpb25hbE9wdGlvbnNbIiJdLG4oYS5jZGF0ZS5wcm90b3R5cGUse2Zvcm1hdERhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iIiksdGhpcy5fY2FsZW5kYXIuZm9ybWF0RGF0ZShlfHwiIix0aGlzLHQpfX0pLG4oYS5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLHtVTklYX0VQT0NIOmEuaW5zdGFuY2UoKS5uZXdEYXRlKDE5NzAsMSwxKS50b0pEKCksU0VDU19QRVJfREFZOjg2NDAwLFRJQ0tTX0VQT0NIOmEuaW5zdGFuY2UoKS5qZEVwb2NoLFRJQ0tTX1BFUl9EQVk6ODY0ZTksQVRPTToieXl5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5eXkiLEZVTEw6IkRELCBNTSBkLCB5eXl5IixJU09fODYwMToieXl5eS1tbS1kZCIsSlVMSUFOOiJKIixSRkNfODIyOiJELCBkIE0geXkiLFJGQ184NTA6IkRELCBkZC1NLXl5IixSRkNfMTAzNjoiRCwgZCBNIHl5IixSRkNfMTEyMzoiRCwgZCBNIHl5eXkiLFJGQ18yODIyOiJELCBkIE0geXl5eSIsUlNTOiJELCBkIE0geXkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXl5eS1tbS1kZCIsZm9ybWF0RGF0ZTpmdW5jdGlvbihlLHQscil7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYocj10LHQ9ZSxlPSIiKSwhdClyZXR1cm4iIjtpZih0LmNhbGVuZGFyKCkhPT10aGlzKXRocm93IGEubG9jYWwuaW52YWxpZEZvcm1hdHx8YS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRGb3JtYXQ7ZT1lfHx0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7Zm9yKHZhciBuLGksbyxsLHM9KHI9cnx8e30pLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxjPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMsdT1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsZD1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsZj1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxwPShyLmNhbGN1bGF0ZVdlZWt8fHRoaXMubG9jYWwuY2FsY3VsYXRlV2VlayxmdW5jdGlvbih0LHIpe2Zvcih2YXIgbj0xO3crbjxlLmxlbmd0aCYmZS5jaGFyQXQodytuKT09PXQ7KW4rKztyZXR1cm4gdys9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9KSxoPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPSIiK3Q7aWYocChlLG4pKWZvcig7YS5sZW5ndGg8cjspYT0iMCIrYTtyZXR1cm4gYX0sZz10aGlzLG09ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5jYWxsKGcsZSxwKCJtIikpOngoaCgibSIsZS5tb250aCgpLDIpKX0sdj1mdW5jdGlvbihlLHQpe3JldHVybiB0PyJmdW5jdGlvbiI9PXR5cGVvZiBmP2YuY2FsbChnLGUpOmZbZS5tb250aCgpLWcubWluTW9udGhdOiJmdW5jdGlvbiI9PXR5cGVvZiBkP2QuY2FsbChnLGUpOmRbZS5tb250aCgpLWcubWluTW9udGhdfSx5PXRoaXMubG9jYWwuZGlnaXRzLHg9ZnVuY3Rpb24oZSl7cmV0dXJuIHIubG9jYWxOdW1iZXJzJiZ5P3koZSk6ZX0sYj0iIixfPSExLHc9MDt3PGUubGVuZ3RoO3crKylpZihfKSInIiE9PWUuY2hhckF0KHcpfHxwKCInIik/Yis9ZS5jaGFyQXQodyk6Xz0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdCh3KSl7Y2FzZSJkIjpiKz14KGgoImQiLHQuZGF5KCksMikpO2JyZWFrO2Nhc2UiRCI6Yis9KG49IkQiLGk9dC5kYXlPZldlZWsoKSxvPXMsbD1jLHAobik/bFtpXTpvW2ldKTticmVhaztjYXNlIm8iOmIrPWgoIm8iLHQuZGF5T2ZZZWFyKCksMyk7YnJlYWs7Y2FzZSJ3IjpiKz1oKCJ3Iix0LndlZWtPZlllYXIoKSwyKTticmVhaztjYXNlIm0iOmIrPW0odCk7YnJlYWs7Y2FzZSJNIjpiKz12KHQscCgiTSIpKTticmVhaztjYXNlInkiOmIrPXAoInkiLDIpP3QueWVhcigpOih0LnllYXIoKSUxMDA8MTA/IjAiOiIiKSt0LnllYXIoKSUxMDA7YnJlYWs7Y2FzZSJZIjpwKCJZIiwyKSxiKz10LmZvcm1hdFllYXIoKTticmVhaztjYXNlIkoiOmIrPXQudG9KRCgpO2JyZWFrO2Nhc2UiQCI6Yis9KHQudG9KRCgpLXRoaXMuVU5JWF9FUE9DSCkqdGhpcy5TRUNTX1BFUl9EQVk7YnJlYWs7Y2FzZSIhIjpiKz0odC50b0pEKCktdGhpcy5USUNLU19FUE9DSCkqdGhpcy5USUNLU19QRVJfREFZO2JyZWFrO2Nhc2UiJyI6cCgiJyIpP2IrPSInIjpfPSEwO2JyZWFrO2RlZmF1bHQ6Yis9ZS5jaGFyQXQodyl9cmV0dXJuIGJ9LHBhcnNlRGF0ZTpmdW5jdGlvbihlLHQscil7aWYobnVsbD09dCl0aHJvdyBhLmxvY2FsLmludmFsaWRBcmd1bWVudHN8fGEucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQXJndW1lbnRzO2lmKCIiPT09KHQ9Im9iamVjdCI9PXR5cGVvZiB0P3QudG9TdHJpbmcoKTp0KyIiKSlyZXR1cm4gbnVsbDtlPWV8fHRoaXMubG9jYWwuZGF0ZUZvcm1hdDt2YXIgbj0ocj1yfHx7fSkuc2hvcnRZZWFyQ3V0b2ZmfHx0aGlzLnNob3J0WWVhckN1dG9mZjtuPSJzdHJpbmciIT10eXBlb2Ygbj9uOnRoaXMudG9kYXkoKS55ZWFyKCklMTAwK3BhcnNlSW50KG4sMTApO2Zvcih2YXIgaT1yLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxvPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMsbD1yLnBhcnNlTW9udGh8fHRoaXMubG9jYWwucGFyc2VNb250aCxzPXIubW9udGhOdW1iZXJzfHx0aGlzLmxvY2FsLm1vbnRoTnVtYmVycyxjPXIubW9udGhOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydCx1PXIubW9udGhOYW1lc3x8dGhpcy5sb2NhbC5tb250aE5hbWVzLGQ9LTEsZj0tMSxwPS0xLGg9LTEsZz0tMSxtPSExLHY9ITEseT1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj0xO0ErbjxlLmxlbmd0aCYmZS5jaGFyQXQoQStuKT09PXQ7KW4rKztyZXR1cm4gQSs9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9LHg9ZnVuY3Rpb24oZSxyKXt2YXIgbj15KGUsciksaT1bMiwzLG4/NDoyLG4/NDoyLDEwLDExLDIwXVsib3lZSkAhIi5pbmRleE9mKGUpKzFdLG89bmV3IFJlZ0V4cCgiXi0/XFxkezEsIitpKyJ9IiksbD10LnN1YnN0cmluZyhrKS5tYXRjaChvKTtpZighbCl0aHJvdyhhLmxvY2FsLm1pc3NpbmdOdW1iZXJBdHx8YS5yZWdpb25hbE9wdGlvbnNbIiJdLm1pc3NpbmdOdW1iZXJBdCkucmVwbGFjZSgvXHswXH0vLGspO3JldHVybiBrKz1sWzBdLmxlbmd0aCxwYXJzZUludChsWzBdLDEwKX0sYj10aGlzLF89ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcyl7eSgibSIpO3ZhciBlPXMuY2FsbChiLHQuc3Vic3RyaW5nKGspKTtyZXR1cm4gays9ZS5sZW5ndGgsZX1yZXR1cm4geCgibSIpfSx3PWZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgbz15KGUsaSk/bjpyLGw9MDtsPG8ubGVuZ3RoO2wrKylpZih0LnN1YnN0cihrLG9bbF0ubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09b1tsXS50b0xvd2VyQ2FzZSgpKXJldHVybiBrKz1vW2xdLmxlbmd0aCxsK2IubWluTW9udGg7dGhyb3coYS5sb2NhbC51bmtub3duTmFtZUF0fHxhLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5rbm93bk5hbWVBdCkucmVwbGFjZSgvXHswXH0vLGspfSxUPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHUpe3ZhciBlPXkoIk0iKT91LmNhbGwoYix0LnN1YnN0cmluZyhrKSk6Yy5jYWxsKGIsdC5zdWJzdHJpbmcoaykpO3JldHVybiBrKz1lLmxlbmd0aCxlfXJldHVybiB3KCJNIixjLHUpfSxNPWZ1bmN0aW9uKCl7aWYodC5jaGFyQXQoaykhPT1lLmNoYXJBdChBKSl0aHJvdyhhLmxvY2FsLnVuZXhwZWN0ZWRMaXRlcmFsQXR8fGEucmVnaW9uYWxPcHRpb25zWyIiXS51bmV4cGVjdGVkTGl0ZXJhbEF0KS5yZXBsYWNlKC9cezBcfS8sayk7aysrfSxrPTAsQT0wO0E8ZS5sZW5ndGg7QSsrKWlmKHYpIiciIT09ZS5jaGFyQXQoQSl8fHkoIiciKT9NKCk6dj0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdChBKSl7Y2FzZSJkIjpoPXgoImQiKTticmVhaztjYXNlIkQiOncoIkQiLGksbyk7YnJlYWs7Y2FzZSJvIjpnPXgoIm8iKTticmVhaztjYXNlInciOngoInciKTticmVhaztjYXNlIm0iOnA9XygpO2JyZWFrO2Nhc2UiTSI6cD1UKCk7YnJlYWs7Y2FzZSJ5Ijp2YXIgTD1BO209IXkoInkiLDIpLEE9TCxmPXgoInkiLDIpO2JyZWFrO2Nhc2UiWSI6Zj14KCJZIiwyKTticmVhaztjYXNlIkoiOmQ9eCgiSiIpKy41LCIuIj09PXQuY2hhckF0KGspJiYoaysrLHgoIkoiKSk7YnJlYWs7Y2FzZSJAIjpkPXgoIkAiKS90aGlzLlNFQ1NfUEVSX0RBWSt0aGlzLlVOSVhfRVBPQ0g7YnJlYWs7Y2FzZSIhIjpkPXgoIiEiKS90aGlzLlRJQ0tTX1BFUl9EQVkrdGhpcy5USUNLU19FUE9DSDticmVhaztjYXNlIioiOms9dC5sZW5ndGg7YnJlYWs7Y2FzZSInIjp5KCInIik/TSgpOnY9ITA7YnJlYWs7ZGVmYXVsdDpNKCl9aWYoazx0Lmxlbmd0aCl0aHJvdyBhLmxvY2FsLnVuZXhwZWN0ZWRUZXh0fHxhLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5leHBlY3RlZFRleHQ7aWYoLTE9PT1mP2Y9dGhpcy50b2RheSgpLnllYXIoKTpmPDEwMCYmbSYmKGYrPS0xPT09bj8xOTAwOnRoaXMudG9kYXkoKS55ZWFyKCktdGhpcy50b2RheSgpLnllYXIoKSUxMDAtKGY8PW4/MDoxMDApKSwic3RyaW5nIj09dHlwZW9mIHAmJihwPWwuY2FsbCh0aGlzLGYscCkpLGc+LTEpe3A9MSxoPWc7Zm9yKHZhciBTPXRoaXMuZGF5c0luTW9udGgoZixwKTtoPlM7Uz10aGlzLmRheXNJbk1vbnRoKGYscCkpcCsrLGgtPVN9cmV0dXJuIGQ+LTE/dGhpcy5mcm9tSkQoZCk6dGhpcy5uZXdEYXRlKGYscCxoKX0sZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbihlLHQscixuLGEpe3ImJiJvYmplY3QiIT10eXBlb2YgciYmKGE9bixuPXIscj1udWxsKSwic3RyaW5nIiE9dHlwZW9mIG4mJihhPW4sbj0iIik7dmFyIGk9dGhpcztyZXR1cm4gdD10P3QubmV3RGF0ZSgpOm51bGwsZT1udWxsPT1lP3Q6InN0cmluZyI9PXR5cGVvZiBlP2Z1bmN0aW9uKGUpe3RyeXtyZXR1cm4gaS5wYXJzZURhdGUobixlLGEpfWNhdGNoKGUpe31mb3IodmFyIHQ9KChlPWUudG9Mb3dlckNhc2UoKSkubWF0Y2goL15jLykmJnI/ci5uZXdEYXRlKCk6bnVsbCl8fGkudG9kYXkoKSxvPS8oWystXT9bMC05XSspXHMqKGR8d3xtfHkpPy9nLGw9by5leGVjKGUpO2w7KXQuYWRkKHBhcnNlSW50KGxbMV0sMTApLGxbMl18fCJkIiksbD1vLmV4ZWMoZSk7cmV0dXJuIHR9KGUpOiJudW1iZXIiPT10eXBlb2YgZT9pc05hTihlKXx8ZT09PTEvMHx8ZT09PS0xLzA/dDppLnRvZGF5KCkuYWRkKGUsImQiKTppLm5ld0RhdGUoZSl9fSl9LHsiLi9tYWluIjo4Miwib2JqZWN0LWFzc2lnbiI6NTV9XSw4NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9W3twYXRoOiIiLGJhY2tvZmY6MH0se3BhdGg6Ik0tMi40LC0zVjNMMC42LDBaIixiYWNrb2ZmOi42fSx7cGF0aDoiTS0zLjcsLTIuNVYyLjVMMS4zLDBaIixiYWNrb2ZmOjEuM30se3BhdGg6Ik0tNC40NSwtM0wtMS42NSwtMC4yVjAuMkwtNC40NSwzTDEuNTUsMFoiLGJhY2tvZmY6MS41NX0se3BhdGg6Ik0tMi4yLC0yLjJMLTAuMiwtMC4yVjAuMkwtMi4yLDIuMkwtMS40LDNMMS42LDBMLTEuNCwtM1oiLGJhY2tvZmY6MS42fSx7cGF0aDoiTS00LjQsLTIuMUwtMC42LC0wLjJWMC4yTC00LjQsMi4xTC00LDNMMiwwTC00LC0zWiIsYmFja29mZjoyfSx7cGF0aDoiTTIsMEEyLDIgMCAxLDEgMCwtMkEyLDIgMCAwLDEgMiwwWiIsYmFja29mZjowLG5vUm90YXRlOiEwfSx7cGF0aDoiTTIsMlYtMkgtMlYyWiIsYmFja29mZjowLG5vUm90YXRlOiEwfV19LHt9XSw4NTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL2Fycm93X3BhdGhzIiksYT1lKCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxvPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlKCIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyIpO3QuZXhwb3J0cz1vKCJhbm5vdGF0aW9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHRleHRhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxmb250OmEoe2VkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyIsY29sb3JFZGl0VHlwZToiYXJyYXlkcmF3In0pLHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoiY2VudGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0sdmFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJtaWRkbGUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcnBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHNob3dhcnJvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxhcnJvd2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93aGVhZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sc3RhcnRhcnJvd2hlYWQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDpuLmxlbmd0aCxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93c2lkZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiZW5kIiwic3RhcnQiXSxleHRyYXM6WyJub25lIl0sZGZsdDoiZW5kIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3dzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMyxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc3RhcnRhcnJvd3NpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxhcnJvd3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc3RhcnRzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXg6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXk6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6InBpeGVsIix2YWx1ZXM6WyJwaXhlbCIsaS5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSxheXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoicGl4ZWwiLHZhbHVlczpbInBpeGVsIixpLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixpLmlkUmVnZXgueC50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHg6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHhzaGlmdDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLGkuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxjbGlja3Rvc2hvdzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwib25vZmYiLCJvbm91dCJdLGRmbHQ6ITEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhjbGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXJyYXlkcmF3In0seWNsaWNrOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGhvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZm9udDphKHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLGVkaXRUeXBlOiJhcnJheWRyYXcifSxjYXB0dXJlZXZlbnRzOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOntyZWY6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifX19KX0seyIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyI6MjA4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyNjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjI4NiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjozMTAsIi4vYXJyb3dfcGF0aHMiOjg0fV0sODY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9ZSgiLi9kcmF3IikuZHJhdztmdW5jdGlvbiBvKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQ7bi5maWx0ZXJWaXNpYmxlKHQuYW5ub3RhdGlvbnMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPWEuZ2V0RnJvbUlkKGUsdC54cmVmKSxuPWEuZ2V0RnJvbUlkKGUsdC55cmVmKSxpPWEuZ2V0UmVmVHlwZSh0LnhyZWYpLG89YS5nZXRSZWZUeXBlKHQueXJlZik7dC5fZXh0cmVtZXM9e30sInJhbmdlIj09PWkmJmwodCxyKSwicmFuZ2UiPT09byYmbCh0LG4pfSkpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcixuPXQuX2lkLGk9bi5jaGFyQXQoMCksbz1lW2ldLGw9ZVsiYSIraV0scz1lW2krInJlZiJdLGM9ZVsiYSIraSsicmVmIl0sdT1lWyJfIitpKyJwYWRwbHVzIl0sZD1lWyJfIitpKyJwYWRtaW51cyJdLGY9e3g6MSx5Oi0xfVtpXSplW2krInNoaWZ0Il0scD0zKmUuYXJyb3dzaXplKmUuYXJyb3d3aWR0aHx8MCxoPXArZixnPXAtZixtPTMqZS5zdGFydGFycm93c2l6ZSplLmFycm93d2lkdGh8fDAsdj1tK2YseT1tLWY7aWYoYz09PXMpe3ZhciB4PWEuZmluZEV4dHJlbWVzKHQsW3QucjJjKG8pXSx7cHBhZHBsdXM6aCxwcGFkbWludXM6Z30pLGI9YS5maW5kRXh0cmVtZXModCxbdC5yMmMobCldLHtwcGFkcGx1czpNYXRoLm1heCh1LHYpLHBwYWRtaW51czpNYXRoLm1heChkLHkpfSk7cj17bWluOlt4Lm1pblswXSxiLm1pblswXV0sbWF4Olt4Lm1heFswXSxiLm1heFswXV19fWVsc2Ugdj1sP3YrbDp2LHk9bD95LWw6eSxyPWEuZmluZEV4dHJlbWVzKHQsW3QucjJjKG8pXSx7cHBhZHBsdXM6TWF0aC5tYXgodSxoLHYpLHBwYWRtaW51czpNYXRoLm1heChkLGcseSl9KTtlLl9leHRyZW1lc1tuXT1yfXQuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0O2lmKG4uZmlsdGVyVmlzaWJsZSh0LmFubm90YXRpb25zKS5sZW5ndGgmJmUuX2Z1bGxEYXRhLmxlbmd0aClyZXR1cm4gbi5zeW5jT3JBc3luYyhbaSxvXSxlKX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjoyNzksIi4vZHJhdyI6OTF9XSw4NzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL3JlZ2lzdHJ5IiksaT1lKCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3I7ZnVuY3Rpb24gbyhlLHQpe3ZhciByLG4sYSxpLG8scyxjLHU9ZS5fZnVsbExheW91dC5hbm5vdGF0aW9ucyxkPVtdLGY9W10scD1bXSxoPSh0fHxbXSkubGVuZ3RoO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspaWYoaT0oYT11W3JdKS5jbGlja3Rvc2hvdyl7Zm9yKG49MDtuPGg7bisrKWlmKHM9KG89dFtuXSkueGF4aXMsYz1vLnlheGlzLHMuX2lkPT09YS54cmVmJiZjLl9pZD09PWEueXJlZiYmcy5kMnIoby54KT09PWwoYS5feGNsaWNrLHMpJiZjLmQycihvLnkpPT09bChhLl95Y2xpY2ssYykpeyhhLnZpc2libGU/Im9ub3V0Ij09PWk/ZjpwOmQpLnB1c2gocik7YnJlYWt9bj09PWgmJmEudmlzaWJsZSYmIm9ub3V0Ij09PWkmJmYucHVzaChyKX1yZXR1cm57b246ZCxvZmY6ZixleHBsaWNpdE9mZjpwfX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuImxvZyI9PT10LnR5cGU/dC5sMnIoZSk6dC5kMnIoZSl9dC5leHBvcnRzPXtoYXNDbGlja1RvU2hvdzpmdW5jdGlvbihlLHQpe3ZhciByPW8oZSx0KTtyZXR1cm4gci5vbi5sZW5ndGg+MHx8ci5leHBsaWNpdE9mZi5sZW5ndGg+MH0sb25DbGljazpmdW5jdGlvbihlLHQpe3ZhciByLGwscz1vKGUsdCksYz1zLm9uLHU9cy5vZmYuY29uY2F0KHMuZXhwbGljaXRPZmYpLGQ9e30sZj1lLl9mdWxsTGF5b3V0LmFubm90YXRpb25zO2lmKCFjLmxlbmd0aCYmIXUubGVuZ3RoKXJldHVybjtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKShsPWkoZS5sYXlvdXQsImFubm90YXRpb25zIixmW2Nbcl1dKSkubW9kaWZ5SXRlbSgidmlzaWJsZSIsITApLG4uZXh0ZW5kRmxhdChkLGwuZ2V0VXBkYXRlT2JqKCkpO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspKGw9aShlLmxheW91dCwiYW5ub3RhdGlvbnMiLGZbdVtyXV0pKS5tb2RpZnlJdGVtKCJ2aXNpYmxlIiwhMSksbi5leHRlbmRGbGF0KGQsbC5nZXRVcGRhdGVPYmooKSk7cmV0dXJuIGEuY2FsbCgidXBkYXRlIixlLHt9LGQpfX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjI2OCwiLi4vLi4vcmVnaXN0cnkiOjMxOH1dLDg4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vY29sb3IiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsaSl7aSgib3BhY2l0eSIpO3ZhciBvPWkoImJnY29sb3IiKSxsPWkoImJvcmRlcmNvbG9yIikscz1hLm9wYWNpdHkobCk7aSgiYm9yZGVycGFkIik7dmFyIGM9aSgiYm9yZGVyd2lkdGgiKSx1PWkoInNob3dhcnJvdyIpO2lmKGkoInRleHQiLHU/IiAiOnIuX2RmbHRUaXRsZS5hbm5vdGF0aW9uKSxpKCJ0ZXh0YW5nbGUiKSxuLmNvZXJjZUZvbnQoaSwiZm9udCIsci5mb250KSxpKCJ3aWR0aCIpLGkoImFsaWduIiksaSgiaGVpZ2h0IikmJmkoInZhbGlnbiIpLHUpe3ZhciBkLGYscD1pKCJhcnJvd3NpZGUiKTstMSE9PXAuaW5kZXhPZigiZW5kIikmJihkPWkoImFycm93aGVhZCIpLGY9aSgiYXJyb3dzaXplIikpLC0xIT09cC5pbmRleE9mKCJzdGFydCIpJiYoaSgic3RhcnRhcnJvd2hlYWQiLGQpLGkoInN0YXJ0YXJyb3dzaXplIixmKSksaSgiYXJyb3djb2xvciIscz90LmJvcmRlcmNvbG9yOmEuZGVmYXVsdExpbmUpLGkoImFycm93d2lkdGgiLDIqKHMmJmN8fDEpKSxpKCJzdGFuZG9mZiIpLGkoInN0YXJ0c3RhbmRvZmYiKX12YXIgaD1pKCJob3ZlcnRleHQiKSxnPXIuaG92ZXJsYWJlbHx8e307aWYoaCl7dmFyIG09aSgiaG92ZXJsYWJlbC5iZ2NvbG9yIixnLmJnY29sb3J8fChhLm9wYWNpdHkobyk/YS5yZ2Iobyk6YS5kZWZhdWx0TGluZSkpLHY9aSgiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIsZy5ib3JkZXJjb2xvcnx8YS5jb250cmFzdChtKSk7bi5jb2VyY2VGb250KGksImhvdmVybGFiZWwuZm9udCIse2ZhbWlseTpnLmZvbnQuZmFtaWx5LHNpemU6Zy5mb250LnNpemUsY29sb3I6Zy5mb250LmNvbG9yfHx2fSl9aSgiY2FwdHVyZWV2ZW50cyIsISFoKX19LHsiLi4vLi4vbGliIjoyMzIsIi4uL2NvbG9yIjoxMDJ9XSw4OTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixpKXt0PXR8fHt9O3ZhciBvPSJsb2ciPT09ciYmImxpbmVhciI9PT10LnR5cGUsbD0ibGluZWFyIj09PXImJiJsb2ciPT09dC50eXBlO2lmKG98fGwpZm9yKHZhciBzLGMsdT1lLl9mdWxsTGF5b3V0LmFubm90YXRpb25zLGQ9dC5faWQuY2hhckF0KDApLGY9MDtmPHUubGVuZ3RoO2YrKylzPXVbZl0sYz0iYW5ub3RhdGlvbnNbIitmKyJdLiIsc1tkKyJyZWYiXT09PXQuX2lkJiZwKGQpLHNbImEiK2QrInJlZiJdPT09dC5faWQmJnAoImEiK2QpO2Z1bmN0aW9uIHAoZSl7dmFyIHI9c1tlXSxsPW51bGw7bD1vP2Eocix0LnJhbmdlKTpNYXRoLnBvdygxMCxyKSxuKGwpfHwobD1udWxsKSxpKGMrZSxsKX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjI1NywiZmFzdC1pc251bWVyaWMiOjE3fV0sOTA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9ZSgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz1lKCIuL2NvbW1vbl9kZWZhdWx0cyIpLGw9ZSgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyhlLHQscil7ZnVuY3Rpb24gaShyLGEpe3JldHVybiBuLmNvZXJjZShlLHQsbCxyLGEpfXZhciBzPWkoInZpc2libGUiKSxjPWkoImNsaWNrdG9zaG93Iik7aWYoc3x8Yyl7byhlLHQscixpKTtmb3IodmFyIHU9dC5zaG93YXJyb3csZD1bIngiLCJ5Il0sZj1bLTEwLC0zMF0scD17X2Z1bGxMYXlvdXQ6cn0saD0wO2g8MjtoKyspe3ZhciBnPWRbaF0sbT1hLmNvZXJjZVJlZihlLHQscCxnLCIiLCJwYXBlciIpO2lmKCJwYXBlciIhPT1tKWEuZ2V0RnJvbUlkKHAsbSkuX2FubkluZGljZXMucHVzaCh0Ll9pbmRleCk7aWYoYS5jb2VyY2VQb3NpdGlvbih0LHAsaSxtLGcsLjUpLHUpe3ZhciB2PSJhIitnLHk9YS5jb2VyY2VSZWYoZSx0LHAsdiwicGl4ZWwiLFsicGl4ZWwiLCJwYXBlciJdKTsicGl4ZWwiIT09eSYmeSE9PW0mJih5PXRbdl09InBpeGVsIik7dmFyIHg9InBpeGVsIj09PXk/ZltoXTouNDthLmNvZXJjZVBvc2l0aW9uKHQscCxpLHksdix4KX1pKGcrImFuY2hvciIpLGkoZysic2hpZnQiKX1pZihuLm5vbmVPckFsbChlLHQsWyJ4IiwieSJdKSx1JiZuLm5vbmVPckFsbChlLHQsWyJheCIsImF5Il0pLGMpe3ZhciBiPWkoInhjbGljayIpLF89aSgieWNsaWNrIik7dC5feGNsaWNrPXZvaWQgMD09PWI/dC54OmEuY2xlYW5Qb3NpdGlvbihiLHAsdC54cmVmKSx0Ll95Y2xpY2s9dm9pZCAwPT09Xz90Lnk6YS5jbGVhblBvc2l0aW9uKF8scCx0LnlyZWYpfX19dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aShlLHQse25hbWU6ImFubm90YXRpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6c30pfX0seyIuLi8uLi9saWIiOjIzMiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjoyNzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjoyNzksIi4vYXR0cmlidXRlcyI6ODUsIi4vY29tbW9uX2RlZmF1bHRzIjo4OH1dLDkxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4uLy4uL3JlZ2lzdHJ5IiksaT1lKCIuLi8uLi9wbG90cy9wbG90cyIpLG89ZSgiLi4vLi4vbGliIiksbD1vLnN0clRyYW5zbGF0ZSxzPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYz1lKCIuLi9jb2xvciIpLHU9ZSgiLi4vZHJhd2luZyIpLGQ9ZSgiLi4vZngiKSxmPWUoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHA9ZSgiLi4vLi4vbGliL3NldGN1cnNvciIpLGg9ZSgiLi4vZHJhZ2VsZW1lbnQiKSxnPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixtPWUoIi4vZHJhd19hcnJvd19oZWFkIik7ZnVuY3Rpb24gdihlLHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbdF18fHt9LG49cy5nZXRGcm9tSWQoZSxyLnhyZWYpLGE9cy5nZXRGcm9tSWQoZSxyLnlyZWYpO24mJm4uc2V0U2NhbGUoKSxhJiZhLnNldFNjYWxlKCkseChlLHIsdCwhMSxuLGEpfWZ1bmN0aW9uIHkoZSx0LHIsbixhKXt2YXIgaT1hW3JdLG89YVtyKyJyZWYiXSxsPS0xIT09ci5pbmRleE9mKCJ5IiksYz0iZG9tYWluIj09PXMuZ2V0UmVmVHlwZShvKSx1PWw/bi5oOm4udztyZXR1cm4gZT9jP2krKGw/LXQ6dCkvZS5fbGVuZ3RoOmUucDJyKGUucjJwKGkpK3QpOmkrKGw/LXQ6dCkvdX1mdW5jdGlvbiB4KGUsdCxyLGksdix4KXt2YXIgYixfLHc9ZS5fZnVsbExheW91dCxUPWUuX2Z1bGxMYXlvdXQuX3NpemUsTT1lLl9jb250ZXh0LmVkaXRzO2k/KGI9ImFubm90YXRpb24tIitpLF89aSsiLmFubm90YXRpb25zIik6KGI9ImFubm90YXRpb24iLF89ImFubm90YXRpb25zIik7dmFyIGs9ZyhlLmxheW91dCxfLHQpLEE9ay5tb2RpZnlCYXNlLEw9ay5tb2RpZnlJdGVtLFM9ay5nZXRVcGRhdGVPYmo7dy5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrYisnW2RhdGEtaW5kZXg9IicrcisnIl0nKS5yZW1vdmUoKTt2YXIgRD0iY2xpcCIrdy5fdWlkKyJfYW5uIityO2lmKHQuX2lucHV0JiYhMSE9PXQudmlzaWJsZSl7dmFyIEM9e3g6e30seTp7fX0sTz0rdC50ZXh0YW5nbGV8fDAsUD13Ll9pbmZvbGF5ZXIuYXBwZW5kKCJnIikuY2xhc3NlZChiLCEwKS5hdHRyKCJkYXRhLWluZGV4IixTdHJpbmcocikpLnN0eWxlKCJvcGFjaXR5Iix0Lm9wYWNpdHkpLEk9UC5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQtZyIsITApLFI9TVt0LnNob3dhcnJvdz8iYW5ub3RhdGlvblRhaWwiOiJhbm5vdGF0aW9uUG9zaXRpb24iXSx6PXQuY2FwdHVyZWV2ZW50c3x8TS5hbm5vdGF0aW9uVGV4dHx8UixOPUkuYXBwZW5kKCJnIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIix6PyJhbGwiOm51bGwpLmNhbGwocCwicG9pbnRlciIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7ZS5fZHJhZ2dpbmc9ITEsZS5lbWl0KCJwbG90bHlfY2xpY2thbm5vdGF0aW9uIixHKG4uZXZlbnQpKX0pKTt0LmhvdmVydGV4dCYmTi5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXt2YXIgcj10LmhvdmVybGFiZWwsbj1yLmZvbnQsYT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLmxvbmVIb3Zlcih7eDA6YS5sZWZ0LWkubGVmdCx4MTphLnJpZ2h0LWkubGVmdCx5OihhLnRvcCthLmJvdHRvbSkvMi1pLnRvcCx0ZXh0OnQuaG92ZXJ0ZXh0LGNvbG9yOnIuYmdjb2xvcixib3JkZXJDb2xvcjpyLmJvcmRlcmNvbG9yLGZvbnRGYW1pbHk6bi5mYW1pbHksZm9udFNpemU6bi5zaXplLGZvbnRDb2xvcjpuLmNvbG9yfSx7Y29udGFpbmVyOncuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOncuX3BhcGVyLm5vZGUoKSxnZDplfSl9KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtkLmxvbmVVbmhvdmVyKHcuX2hvdmVybGF5ZXIubm9kZSgpKX0pKTt2YXIgRj10LmJvcmRlcndpZHRoLEU9dC5ib3JkZXJwYWQsaj1GK0UsSD1OLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmciKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixGKyJweCIpLmNhbGwoYy5zdHJva2UsdC5ib3JkZXJjb2xvcikuY2FsbChjLmZpbGwsdC5iZ2NvbG9yKSxCPXQud2lkdGh8fHQuaGVpZ2h0LFk9dy5fdG9wY2xpcHMuc2VsZWN0QWxsKCIjIitEKS5kYXRhKEI/WzBdOltdKTtZLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImFubmNsaXAiLCEwKS5hdHRyKCJpZCIsRCkuYXBwZW5kKCJyZWN0IiksWS5leGl0KCkucmVtb3ZlKCk7dmFyIFY9dC5mb250LFU9dy5fbWV0YT9vLnRlbXBsYXRlU3RyaW5nKHQudGV4dCx3Ll9tZXRhKTp0LnRleHQscT1OLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImFubm90YXRpb24tdGV4dCIsITApLnRleHQoVSk7TS5hbm5vdGF0aW9uVGV4dD9xLmNhbGwoZi5tYWtlRWRpdGFibGUse2RlbGVnYXRlOk4sZ2Q6ZX0pLmNhbGwoWikub24oImVkaXQiLChmdW5jdGlvbihyKXt0LnRleHQ9cix0aGlzLmNhbGwoWiksTCgidGV4dCIsciksdiYmdi5hdXRvcmFuZ2UmJkEodi5fbmFtZSsiLmF1dG9yYW5nZSIsITApLHgmJnguYXV0b3JhbmdlJiZBKHguX25hbWUrIi5hdXRvcmFuZ2UiLCEwKSxhLmNhbGwoIl9ndWlSZWxheW91dCIsZSxTKCkpfSkpOnEuY2FsbChaKX1lbHNlIG4uc2VsZWN0QWxsKCIjIitEKS5yZW1vdmUoKTtmdW5jdGlvbiBHKGUpe3ZhciBuPXtpbmRleDpyLGFubm90YXRpb246dC5faW5wdXQsZnVsbEFubm90YXRpb246dCxldmVudDplfTtyZXR1cm4gaSYmKG4uc3VicGxvdElkPWkpLG59ZnVuY3Rpb24gWihyKXtyZXR1cm4gci5jYWxsKHUuZm9udCxWKS5hdHRyKHsidGV4dC1hbmNob3IiOntsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9W3QuYWxpZ25dfHwibWlkZGxlIn0pLGYuY29udmVydFRvVHNwYW5zKHIsZSxXKSxyfWZ1bmN0aW9uIFcoKXt2YXIgcj1xLnNlbGVjdEFsbCgiYSIpOzE9PT1yLnNpemUoKSYmci50ZXh0KCk9PT1xLnRleHQoKSYmTi5pbnNlcnQoImEiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHsieGxpbms6eGxpbms6aHJlZiI6ci5hdHRyKCJ4bGluazpocmVmIiksInhsaW5rOnhsaW5rOnNob3ciOnIuYXR0cigieGxpbms6c2hvdyIpfSkuc3R5bGUoe2N1cnNvcjoicG9pbnRlciJ9KS5ub2RlKCkuYXBwZW5kQ2hpbGQoSC5ub2RlKCkpO3ZhciBuPU4uc2VsZWN0KCIuYW5ub3RhdGlvbi10ZXh0LW1hdGgtZ3JvdXAiKSxkPSFuLmVtcHR5KCksZz11LmJCb3goKGQ/bjpxKS5ub2RlKCkpLGI9Zy53aWR0aCxfPWcuaGVpZ2h0LGs9dC53aWR0aHx8Yix6PXQuaGVpZ2h0fHxfLEU9TWF0aC5yb3VuZChrKzIqaiksVj1NYXRoLnJvdW5kKHorMipqKTtmdW5jdGlvbiBVKGUsdCl7cmV0dXJuImF1dG8iPT09dCYmKHQ9ZTwxLzM/ImxlZnQiOmU+Mi8zPyJyaWdodCI6ImNlbnRlciIpLHtjZW50ZXI6MCxtaWRkbGU6MCxsZWZ0Oi41LGJvdHRvbTotLjUscmlnaHQ6LS41LHRvcDouNX1bdF19Zm9yKHZhciBaPSExLFc9WyJ4IiwieSJdLFg9MDtYPFcubGVuZ3RoO1grKyl7dmFyIEosUSxLLCQsZWUsdGU9V1tYXSxyZT10W3RlKyJyZWYiXXx8dGUsbmU9dFsiYSIrdGUrInJlZiJdLGFlPXt4OnYseTp4fVt0ZV0saWU9KE8rKCJ4Ij09PXRlPzA6LTkwKSkqTWF0aC5QSS8xODAsb2U9RSpNYXRoLmNvcyhpZSksbGU9VipNYXRoLnNpbihpZSksc2U9TWF0aC5hYnMob2UpK01hdGguYWJzKGxlKSxjZT10W3RlKyJhbmNob3IiXSx1ZT10W3RlKyJzaGlmdCJdKigieCI9PT10ZT8xOi0xKSxkZT1DW3RlXSxmZT1zLmdldFJlZlR5cGUocmUpO2lmKGFlJiYiZG9tYWluIiE9PWZlKXt2YXIgcGU9YWUucjJmcmFjdGlvbih0W3RlXSk7KHBlPDB8fHBlPjEpJiYobmU9PT1yZT8oKHBlPWFlLnIyZnJhY3Rpb24odFsiYSIrdGVdKSk8MHx8cGU+MSkmJihaPSEwKTpaPSEwKSxKPWFlLl9vZmZzZXQrYWUucjJwKHRbdGVdKSwkPS41fWVsc2V7dmFyIGhlPSJkb21haW4iPT09ZmU7IngiPT09dGU/KEs9dFt0ZV0sSj1oZT9hZS5fb2Zmc2V0K2FlLl9sZW5ndGgqSzpKPVQubCtULncqSyk6KEs9MS10W3RlXSxKPWhlP2FlLl9vZmZzZXQrYWUuX2xlbmd0aCpLOko9VC50K1QuaCpLKSwkPXQuc2hvd2Fycm93Py41Okt9aWYodC5zaG93YXJyb3cpe2RlLmhlYWQ9Sjt2YXIgZ2U9dFsiYSIrdGVdO2lmKGVlPW9lKlUoLjUsdC54YW5jaG9yKS1sZSpVKC41LHQueWFuY2hvciksbmU9PT1yZSl7dmFyIG1lPXMuZ2V0UmVmVHlwZShuZSk7ImRvbWFpbiI9PT1tZT8oInkiPT09dGUmJihnZT0xLWdlKSxkZS50YWlsPWFlLl9vZmZzZXQrYWUuX2xlbmd0aCpnZSk6InBhcGVyIj09PW1lPyJ5Ij09PXRlPyhnZT0xLWdlLGRlLnRhaWw9VC50K1QuaCpnZSk6ZGUudGFpbD1ULmwrVC53KmdlOmRlLnRhaWw9YWUuX29mZnNldCthZS5yMnAoZ2UpLFE9ZWV9ZWxzZSBkZS50YWlsPUorZ2UsUT1lZStnZTtkZS50ZXh0PWRlLnRhaWwrZWU7dmFyIHZlPXdbIngiPT09dGU/IndpZHRoIjoiaGVpZ2h0Il07aWYoInBhcGVyIj09PXJlJiYoZGUuaGVhZD1vLmNvbnN0cmFpbihkZS5oZWFkLDEsdmUtMSkpLCJwaXhlbCI9PT1uZSl7dmFyIHllPS1NYXRoLm1heChkZS50YWlsLTMsZGUudGV4dCkseGU9TWF0aC5taW4oZGUudGFpbCszLGRlLnRleHQpLXZlO3llPjA/KGRlLnRhaWwrPXllLGRlLnRleHQrPXllKTp4ZT4wJiYoZGUudGFpbC09eGUsZGUudGV4dC09eGUpfWRlLnRhaWwrPXVlLGRlLmhlYWQrPXVlfWVsc2UgUT1lZT1zZSpVKCQsY2UpLGRlLnRleHQ9SitlZTtkZS50ZXh0Kz11ZSxlZSs9dWUsUSs9dWUsdFsiXyIrdGUrInBhZHBsdXMiXT1zZS8yK1EsdFsiXyIrdGUrInBhZG1pbnVzIl09c2UvMi1RLHRbIl8iK3RlKyJzaXplIl09c2UsdFsiXyIrdGUrInNoaWZ0Il09ZWV9aWYoWilOLnJlbW92ZSgpO2Vsc2V7dmFyIGJlPTAsX2U9MDtpZigibGVmdCIhPT10LmFsaWduJiYoYmU9KGstYikqKCJjZW50ZXIiPT09dC5hbGlnbj8uNToxKSksInRvcCIhPT10LnZhbGlnbiYmKF9lPSh6LV8pKigibWlkZGxlIj09PXQudmFsaWduPy41OjEpKSxkKW4uc2VsZWN0KCJzdmciKS5hdHRyKHt4OmorYmUtMSx5OmorX2V9KS5jYWxsKHUuc2V0Q2xpcFVybCxCP0Q6bnVsbCxlKTtlbHNle3ZhciB3ZT1qK19lLWcudG9wLFRlPWorYmUtZy5sZWZ0O3EuY2FsbChmLnBvc2l0aW9uVGV4dCxUZSx3ZSkuY2FsbCh1LnNldENsaXBVcmwsQj9EOm51bGwsZSl9WS5zZWxlY3QoInJlY3QiKS5jYWxsKHUuc2V0UmVjdCxqLGosayx6KSxILmNhbGwodS5zZXRSZWN0LEYvMixGLzIsRS1GLFYtRiksTi5jYWxsKHUuc2V0VHJhbnNsYXRlLE1hdGgucm91bmQoQy54LnRleHQtRS8yKSxNYXRoLnJvdW5kKEMueS50ZXh0LVYvMikpLEkuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitPKyIsIitDLngudGV4dCsiLCIrQy55LnRleHQrIikifSk7dmFyIE1lLGtlPWZ1bmN0aW9uKHIsbil7UC5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWFycm93LWciKS5yZW1vdmUoKTt2YXIgcz1DLnguaGVhZCxkPUMueS5oZWFkLGY9Qy54LnRhaWwrcixwPUMueS50YWlsK24sZz1DLngudGV4dCtyLGI9Qy55LnRleHQrbixfPW8ucm90YXRpb25YWU1hdHJpeChPLGcsYiksdz1vLmFwcGx5MkRUcmFuc2Zvcm0oXyksaz1vLmFwcGx5MkRUcmFuc2Zvcm0yKF8pLEQ9K0guYXR0cigid2lkdGgiKSxSPStILmF0dHIoImhlaWdodCIpLHo9Zy0uNSpELEY9eitELEU9Yi0uNSpSLGo9RStSLEI9W1t6LEUseixqXSxbeixqLEYsal0sW0YsaixGLEVdLFtGLEUseixFXV0ubWFwKGspO2lmKCFCLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZV4hIW8uc2VnbWVudHNJbnRlcnNlY3QocyxkLHMrMWU2LGQrMWU2LHRbMF0sdFsxXSx0WzJdLHRbM10pfSksITEpKXtCLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PW8uc2VnbWVudHNJbnRlcnNlY3QoZixwLHMsZCxlWzBdLGVbMV0sZVsyXSxlWzNdKTt0JiYoZj10LngscD10LnkpfSkpO3ZhciBZPXQuYXJyb3d3aWR0aCxWPXQuYXJyb3djb2xvcixVPXQuYXJyb3dzaWRlLHE9UC5hcHBlbmQoImciKS5zdHlsZSh7b3BhY2l0eTpjLm9wYWNpdHkoVil9KS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93LWciLCEwKSxHPXEuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0iK2YrIiwiK3ArIkwiK3MrIiwiK2QpLnN0eWxlKCJzdHJva2Utd2lkdGgiLFkrInB4IikuY2FsbChjLnN0cm9rZSxjLnJnYihWKSk7aWYobShHLFUsdCksTS5hbm5vdGF0aW9uUG9zaXRpb24mJkcubm9kZSgpLnBhcmVudE5vZGUmJiFpKXt2YXIgWj1zLFc9ZDtpZih0LnN0YW5kb2ZmKXt2YXIgWD1NYXRoLnNxcnQoTWF0aC5wb3cocy1mLDIpK01hdGgucG93KGQtcCwyKSk7Wis9dC5zdGFuZG9mZiooZi1zKS9YLFcrPXQuc3RhbmRvZmYqKHAtZCkvWH12YXIgSixRLEs9cS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93IiwhMCkuY2xhc3NlZCgiYW5uZHJhZyIsITApLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCkuYXR0cih7ZDoiTTMsM0gtM1YtM0gzWk0wLDBMIisoZi1aKSsiLCIrKHAtVyksdHJhbnNmb3JtOmwoWixXKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLFkrNisicHgiKS5jYWxsKGMuc3Ryb2tlLCJyZ2JhKDAsMCwwLDApIikuY2FsbChjLmZpbGwsInJnYmEoMCwwLDAsMCkiKTtoLmluaXQoe2VsZW1lbnQ6Sy5ub2RlKCksZ2Q6ZSxwcmVwRm46ZnVuY3Rpb24oKXt2YXIgZT11LmdldFRyYW5zbGF0ZShOKTtKPWUueCxRPWUueSx2JiZ2LmF1dG9yYW5nZSYmQSh2Ll9uYW1lKyIuYXV0b3JhbmdlIiwhMCkseCYmeC5hdXRvcmFuZ2UmJkEoeC5fbmFtZSsiLmF1dG9yYW5nZSIsITApfSxtb3ZlRm46ZnVuY3Rpb24oZSxyKXt2YXIgbj13KEosUSksYT1uWzBdK2UsaT1uWzFdK3I7Ti5jYWxsKHUuc2V0VHJhbnNsYXRlLGEsaSksTCgieCIseSh2LGUsIngiLFQsdCkpLEwoInkiLHkoeCxyLCJ5IixULHQpKSx0LmF4cmVmPT09dC54cmVmJiZMKCJheCIseSh2LGUsImF4IixULHQpKSx0LmF5cmVmPT09dC55cmVmJiZMKCJheSIseSh4LHIsImF5IixULHQpKSxxLmF0dHIoInRyYW5zZm9ybSIsbChlLHIpKSxJLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrTysiLCIrYSsiLCIraSsiKSJ9KX0sZG9uZUZuOmZ1bmN0aW9uKCl7YS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsUygpKTt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuanMtbm90ZXMtYm94LXBhbmVsIik7dCYmdC5yZWRyYXcodC5zZWxlY3RlZE9iail9fSl9fX07aWYodC5zaG93YXJyb3cmJmtlKDAsMCksUiloLmluaXQoe2VsZW1lbnQ6Ti5ub2RlKCksZ2Q6ZSxwcmVwRm46ZnVuY3Rpb24oKXtNZT1JLmF0dHIoInRyYW5zZm9ybSIpfSxtb3ZlRm46ZnVuY3Rpb24oZSxyKXt2YXIgbj0icG9pbnRlciI7aWYodC5zaG93YXJyb3cpdC5heHJlZj09PXQueHJlZj9MKCJheCIseSh2LGUsImF4IixULHQpKTpMKCJheCIsdC5heCtlKSx0LmF5cmVmPT09dC55cmVmP0woImF5Iix5KHgsciwiYXkiLFQudyx0KSk6TCgiYXkiLHQuYXkrciksa2UoZSxyKTtlbHNle2lmKGkpcmV0dXJuO3ZhciBhLG87aWYodilhPXkodixlLCJ4IixULHQpO2Vsc2V7dmFyIHM9dC5feHNpemUvVC53LGM9dC54Kyh0Ll94c2hpZnQtdC54c2hpZnQpL1Qudy1zLzI7YT1oLmFsaWduKGMrZS9ULncscywwLDEsdC54YW5jaG9yKX1pZih4KW89eSh4LHIsInkiLFQsdCk7ZWxzZXt2YXIgdT10Ll95c2l6ZS9ULmgsZD10LnktKHQuX3lzaGlmdCt0LnlzaGlmdCkvVC5oLXUvMjtvPWguYWxpZ24oZC1yL1QuaCx1LDAsMSx0LnlhbmNob3IpfUwoIngiLGEpLEwoInkiLG8pLHYmJnh8fChuPWguZ2V0Q3Vyc29yKHY/LjU6YSx4Py41Om8sdC54YW5jaG9yLHQueWFuY2hvcikpfUkuYXR0cih7dHJhbnNmb3JtOmwoZSxyKStNZX0pLHAoTixuKX0sY2xpY2tGbjpmdW5jdGlvbihyLG4pe3QuY2FwdHVyZWV2ZW50cyYmZS5lbWl0KCJwbG90bHlfY2xpY2thbm5vdGF0aW9uIixHKG4pKX0sZG9uZUZuOmZ1bmN0aW9uKCl7cChOKSxhLmNhbGwoIl9ndWlSZWxheW91dCIsZSxTKCkpO3ZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5qcy1ub3Rlcy1ib3gtcGFuZWwiKTt0JiZ0LnJlZHJhdyh0LnNlbGVjdGVkT2JqKX19KX19fXQuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0O3QuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uIikucmVtb3ZlKCk7Zm9yKHZhciByPTA7cjx0LmFubm90YXRpb25zLmxlbmd0aDtyKyspdC5hbm5vdGF0aW9uc1tyXS52aXNpYmxlJiZ2KGUscik7cmV0dXJuIGkucHJldmlvdXNQcm9taXNlcyhlKX0sZHJhd09uZTp2LGRyYXdSYXc6eH19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjI1MiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjoyNTUsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjI2OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI3OSwiLi4vLi4vcGxvdHMvcGxvdHMiOjMxNiwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi4vY29sb3IiOjEwMiwiLi4vZHJhZ2VsZW1lbnQiOjEyMSwiLi4vZHJhd2luZyI6MTI0LCIuLi9meCI6MTQyLCIuL2RyYXdfYXJyb3dfaGVhZCI6OTIsIkBwbG90bHkvZDMiOjExfV0sOTI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgiLi4vY29sb3IiKSxpPWUoIi4vYXJyb3dfcGF0aHMiKSxvPWUoIi4uLy4uL2xpYiIpLGw9by5zdHJTY2FsZSxzPW8uc3RyUm90YXRlLGM9by5zdHJUcmFuc2xhdGU7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbyx1LGQsZixwPWUubm9kZSgpLGg9aVtyLmFycm93aGVhZHx8MF0sZz1pW3Iuc3RhcnRhcnJvd2hlYWR8fDBdLG09KHIuYXJyb3d3aWR0aHx8MSkqKHIuYXJyb3dzaXplfHwxKSx2PShyLmFycm93d2lkdGh8fDEpKihyLnN0YXJ0YXJyb3dzaXplfHwxKSx5PXQuaW5kZXhPZigic3RhcnQiKT49MCx4PXQuaW5kZXhPZigiZW5kIik+PTAsYj1oLmJhY2tvZmYqbStyLnN0YW5kb2ZmLF89Zy5iYWNrb2ZmKnYrci5zdGFydHN0YW5kb2ZmO2lmKCJsaW5lIj09PXAubm9kZU5hbWUpe289e3g6K2UuYXR0cigieDEiKSx5OitlLmF0dHIoInkxIil9LHU9e3g6K2UuYXR0cigieDIiKSx5OitlLmF0dHIoInkyIil9O3ZhciB3PW8ueC11LngsVD1vLnktdS55O2lmKGY9KGQ9TWF0aC5hdGFuMihULHcpKStNYXRoLlBJLGImJl8mJmIrXz5NYXRoLnNxcnQodyp3K1QqVCkpcmV0dXJuIHZvaWQgUigpO2lmKGIpe2lmKGIqYj53KncrVCpUKXJldHVybiB2b2lkIFIoKTt2YXIgTT1iKk1hdGguY29zKGQpLGs9YipNYXRoLnNpbihkKTt1LngrPU0sdS55Kz1rLGUuYXR0cih7eDI6dS54LHkyOnUueX0pfWlmKF8pe2lmKF8qXz53KncrVCpUKXJldHVybiB2b2lkIFIoKTt2YXIgQT1fKk1hdGguY29zKGQpLEw9XypNYXRoLnNpbihkKTtvLngtPUEsby55LT1MLGUuYXR0cih7eDE6by54LHkxOm8ueX0pfX1lbHNlIGlmKCJwYXRoIj09PXAubm9kZU5hbWUpe3ZhciBTPXAuZ2V0VG90YWxMZW5ndGgoKSxEPSIiO2lmKFM8YitfKXJldHVybiB2b2lkIFIoKTt2YXIgQz1wLmdldFBvaW50QXRMZW5ndGgoMCksTz1wLmdldFBvaW50QXRMZW5ndGgoLjEpO2Q9TWF0aC5hdGFuMihDLnktTy55LEMueC1PLngpLG89cC5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWluKF8sUykpLEQ9IjBweCwiK18rInB4LCI7dmFyIFA9cC5nZXRQb2ludEF0TGVuZ3RoKFMpLEk9cC5nZXRQb2ludEF0TGVuZ3RoKFMtLjEpO2Y9TWF0aC5hdGFuMihQLnktSS55LFAueC1JLngpLHU9cC5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWF4KDAsUy1iKSksRCs9Uy0oRD9fK2I6YikrInB4LCIrUysicHgiLGUuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLEQpfWZ1bmN0aW9uIFIoKXtlLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMHB4LDEwMHB4Iil9ZnVuY3Rpb24geih0LGksbyx1KXt0LnBhdGgmJih0Lm5vUm90YXRlJiYobz0wKSxuLnNlbGVjdChwLnBhcmVudE5vZGUpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2NsYXNzOmUuYXR0cigiY2xhc3MiKSxkOnQucGF0aCx0cmFuc2Zvcm06YyhpLngsaS55KStzKDE4MCpvL01hdGguUEkpK2wodSl9KS5zdHlsZSh7ZmlsbDphLnJnYihyLmFycm93Y29sb3IpLCJzdHJva2Utd2lkdGgiOjB9KSl9eSYmeihnLG8sZCx2KSx4JiZ6KGgsdSxmLG0pfX0seyIuLi8uLi9saWIiOjIzMiwiLi4vY29sb3IiOjEwMiwiLi9hcnJvd19wYXRocyI6ODQsIkBwbG90bHkvZDMiOjExfV0sOTM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9kcmF3IiksYT1lKCIuL2NsaWNrIik7dC5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImFubm90YXRpb25zIixsYXlvdXRBdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKSxpbmNsdWRlQmFzZVBsb3Q6ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyIpKCJhbm5vdGF0aW9ucyIpLGNhbGNBdXRvcmFuZ2U6ZSgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lLGRyYXdSYXc6bi5kcmF3UmF3LGhhc0NsaWNrVG9TaG93OmEuaGFzQ2xpY2tUb1Nob3csb25DbGljazphLm9uQ2xpY2ssY29udmVydENvb3JkczplKCIuL2NvbnZlcnRfY29vcmRzIil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjI5MiwiLi9hdHRyaWJ1dGVzIjo4NSwiLi9jYWxjX2F1dG9yYW5nZSI6ODYsIi4vY2xpY2siOjg3LCIuL2NvbnZlcnRfY29vcmRzIjo4OSwiLi9kZWZhdWx0cyI6OTAsIi4vZHJhdyI6OTF9XSw5NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksYT1lKCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT1lKCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7dC5leHBvcnRzPWEoaSgiYW5ub3RhdGlvbiIse3Zpc2libGU6bi52aXNpYmxlLHg6e3ZhbFR5cGU6ImFueSJ9LHk6e3ZhbFR5cGU6ImFueSJ9LHo6e3ZhbFR5cGU6ImFueSJ9LGF4Ont2YWxUeXBlOiJudW1iZXIifSxheTp7dmFsVHlwZToibnVtYmVyIn0seGFuY2hvcjpuLnhhbmNob3IseHNoaWZ0Om4ueHNoaWZ0LHlhbmNob3I6bi55YW5jaG9yLHlzaGlmdDpuLnlzaGlmdCx0ZXh0Om4udGV4dCx0ZXh0YW5nbGU6bi50ZXh0YW5nbGUsZm9udDpuLmZvbnQsd2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsb3BhY2l0eTpuLm9wYWNpdHksYWxpZ246bi5hbGlnbix2YWxpZ246bi52YWxpZ24sYmdjb2xvcjpuLmJnY29sb3IsYm9yZGVyY29sb3I6bi5ib3JkZXJjb2xvcixib3JkZXJwYWQ6bi5ib3JkZXJwYWQsYm9yZGVyd2lkdGg6bi5ib3JkZXJ3aWR0aCxzaG93YXJyb3c6bi5zaG93YXJyb3csYXJyb3djb2xvcjpuLmFycm93Y29sb3IsYXJyb3doZWFkOm4uYXJyb3doZWFkLHN0YXJ0YXJyb3doZWFkOm4uc3RhcnRhcnJvd2hlYWQsYXJyb3dzaWRlOm4uYXJyb3dzaWRlLGFycm93c2l6ZTpuLmFycm93c2l6ZSxzdGFydGFycm93c2l6ZTpuLnN0YXJ0YXJyb3dzaXplLGFycm93d2lkdGg6bi5hcnJvd3dpZHRoLHN0YW5kb2ZmOm4uc3RhbmRvZmYsc3RhcnRzdGFuZG9mZjpuLnN0YXJ0c3RhbmRvZmYsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVybGFiZWw6bi5ob3ZlcmxhYmVsLGNhcHR1cmVldmVudHM6bi5jYXB0dXJlZXZlbnRzfSksImNhbGMiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjoyNjEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjI2OCwiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyI6ODV9XSw5NTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZnVuY3Rpb24gaShlLHQpe3ZhciByPXQuZnVsbFNjZW5lTGF5b3V0LmRvbWFpbixpPXQuZnVsbExheW91dC5fc2l6ZSxvPXtwZGF0YTpudWxsLHR5cGU6ImxpbmVhciIsYXV0b3JhbmdlOiExLHJhbmdlOlstMS8wLDEvMF19O2UuX3hhPXt9LG4uZXh0ZW5kRmxhdChlLl94YSxvKSxhLnNldENvbnZlcnQoZS5feGEpLGUuX3hhLl9vZmZzZXQ9aS5sK3IueFswXSppLncsZS5feGEubDJwPWZ1bmN0aW9uKCl7cmV0dXJuLjUqKDErZS5fcGRhdGFbMF0vZS5fcGRhdGFbM10pKmkudyooci54WzFdLXIueFswXSl9LGUuX3lhPXt9LG4uZXh0ZW5kRmxhdChlLl95YSxvKSxhLnNldENvbnZlcnQoZS5feWEpLGUuX3lhLl9vZmZzZXQ9aS50KygxLXIueVsxXSkqaS5oLGUuX3lhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxLWUuX3BkYXRhWzFdL2UuX3BkYXRhWzNdKSppLmgqKHIueVsxXS1yLnlbMF0pfX10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuZnVsbFNjZW5lTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPHQubGVuZ3RoO3IrKylpKHRbcl0sZSk7ZS5mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi0iK2UuaWQpLnJlbW92ZSgpfX0seyIuLi8uLi9saWIiOjIzMiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI3OX1dLDk2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPWUoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89ZSgiLi4vYW5ub3RhdGlvbnMvY29tbW9uX2RlZmF1bHRzIiksbD1lKCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKGUsdCxyLGkpe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UoZSx0LGwscixhKX1mdW5jdGlvbiBjKGUpe3ZhciBuPWUrImF4aXMiLGk9e19mdWxsTGF5b3V0Ont9fTtyZXR1cm4gaS5fZnVsbExheW91dFtuXT1yW25dLGEuY29lcmNlUG9zaXRpb24odCxpLHMsZSxlLC41KX1zKCJ2aXNpYmxlIikmJihvKGUsdCxpLmZ1bGxMYXlvdXQscyksYygieCIpLGMoInkiKSxjKCJ6Iiksbi5ub25lT3JBbGwoZSx0LFsieCIsInkiLCJ6Il0pLHQueHJlZj0ieCIsdC55cmVmPSJ5Iix0LnpyZWY9InoiLHMoInhhbmNob3IiKSxzKCJ5YW5jaG9yIikscygieHNoaWZ0IikscygieXNoaWZ0IiksdC5zaG93YXJyb3cmJih0LmF4cmVmPSJwaXhlbCIsdC5heXJlZj0icGl4ZWwiLHMoImF4IiwtMTApLHMoImF5IiwtMzApLG4ubm9uZU9yQWxsKGUsdCxbImF4IiwiYXkiXSkpKX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2koZSx0LHtuYW1lOiJhbm5vdGF0aW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOnMsZnVsbExheW91dDpyLmZ1bGxMYXlvdXR9KX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6Mjc0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Mjc5LCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHMiOjg4LCIuL2F0dHJpYnV0ZXMiOjk0fV0sOTc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vYW5ub3RhdGlvbnMvZHJhdyIpLmRyYXdSYXcsYT1lKCIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3QiKSxpPVsieCIsInkiLCJ6Il07dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmZ1bGxTY2VuZUxheW91dCxyPWUuZGF0YVNjYWxlLG89dC5hbm5vdGF0aW9ucyxsPTA7bDxvLmxlbmd0aDtsKyspe2Zvcih2YXIgcz1vW2xdLGM9ITEsdT0wO3U8Mzt1Kyspe3ZhciBkPWlbdV0sZj1zW2RdLHA9dFtkKyJheGlzIl0ucjJmcmFjdGlvbihmKTtpZihwPDB8fHA+MSl7Yz0hMDticmVha319Yz9lLmZ1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3QoIi5hbm5vdGF0aW9uLSIrZS5pZCsnW2RhdGEtaW5kZXg9IicrbCsnIl0nKS5yZW1vdmUoKToocy5fcGRhdGE9YShlLmdscGxvdC5jYW1lcmFQYXJhbXMsW3QueGF4aXMucjJsKHMueCkqclswXSx0LnlheGlzLnIybChzLnkpKnJbMV0sdC56YXhpcy5yMmwocy56KSpyWzJdXSksbihlLmdyYXBoRGl2LHMsbCxlLmlkLHMuX3hhLHMuX3lhKSl9fX0seyIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3QiOjMxMywiLi4vYW5ub3RhdGlvbnMvZHJhdyI6OTF9XSw5ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9yZWdpc3RyeSIpLGE9ZSgiLi4vLi4vbGliIik7dC5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImFubm90YXRpb25zM2QiLHNjaGVtYTp7c3VicGxvdHM6e3NjZW5lOnthbm5vdGF0aW9uczplKCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKSxpbmNsdWRlQmFzZVBsb3Q6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZDtpZighcilyZXR1cm47Zm9yKHZhciBpPXIuYXR0clJlZ2V4LG89T2JqZWN0LmtleXMoZSksbD0wO2w8by5sZW5ndGg7bCsrKXt2YXIgcz1vW2xdO2kudGVzdChzKSYmKGVbc10uYW5ub3RhdGlvbnN8fFtdKS5sZW5ndGgmJihhLnB1c2hVbmlxdWUodC5fYmFzZVBsb3RNb2R1bGVzLHIpLGEucHVzaFVuaXF1ZSh0Ll9zdWJwbG90cy5nbDNkLHMpKX19LGNvbnZlcnQ6ZSgiLi9jb252ZXJ0IiksZHJhdzplKCIuL2RyYXciKX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4vYXR0cmlidXRlcyI6OTQsIi4vY29udmVydCI6OTUsIi4vZGVmYXVsdHMiOjk2LCIuL2RyYXciOjk3fV0sOTk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWUoIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW4iKSxlKCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9wbHVzIiksZSgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiKSxlKCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljIiksZSgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2Rpc2N3b3JsZCIpLGUoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iKSxlKCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3IiksZSgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2lzbGFtaWMiKSxlKCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIiksZSgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuIiksZSgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25hbmFrc2hhaGkiKSxlKCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIiksZSgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW4iKSxlKCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGFpd2FuIiksZSgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiKSxlKCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhIil9LHsid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiOjY4LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljIjo2OSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2Rpc2N3b3JsZCI6NzAsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iOjcxLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3Ijo3Miwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2lzbGFtaWMiOjczLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIjo3NCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuIjo3NSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25hbmFrc2hhaGkiOjc2LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIjo3Nywid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW4iOjc4LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGFpd2FuIjo3OSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiOjgwLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhIjo4MSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvbWFpbiI6ODIsIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXMiOjgzfV0sMTAwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vY2FsZW5kYXJzIiksYT1lKCIuLi8uLi9saWIiKSxpPWUoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxvPWkuRVBPQ0hKRCxsPWkuT05FREFZLHM9e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczphLnNvcnRPYmplY3RLZXlzKG4uY2FsZW5kYXJzKSxlZGl0VHlwZToiY2FsYyIsZGZsdDoiZ3JlZ29yaWFuIn0sYz1mdW5jdGlvbihlLHQscixuKXt2YXIgaT17fTtyZXR1cm4gaVtyXT1zLGEuY29lcmNlKGUsdCxpLHIsbil9LHU9e2Q6ezA6ImRkIiwiLSI6ImQifSxlOnswOiJkIiwiLSI6ImQifSxhOnswOiJEIiwiLSI6IkQifSxBOnswOiJERCIsIi0iOiJERCJ9LGo6ezA6Im9vIiwiLSI6Im8ifSxXOnswOiJ3dyIsIi0iOiJ3In0sbTp7MDoibW0iLCItIjoibSJ9LGI6ezA6Ik0iLCItIjoiTSJ9LEI6ezA6Ik1NIiwiLSI6Ik1NIn0seTp7MDoieXkiLCItIjoieXkifSxZOnswOiJ5eXl5IiwiLSI6Inl5eXkifSxVOiIjIyIsdzoiIyMiLGM6ezA6IkQgTSBkICVYIHl5eXkiLCItIjoiRCBNIGQgJVggeXl5eSJ9LHg6ezA6Im1tL2RkL3l5eXkiLCItIjoibW0vZGQveXl5eSJ9fTt2YXIgZD17fTtmdW5jdGlvbiBmKGUpe3ZhciB0PWRbZV07cmV0dXJuIHR8fCh0PWRbZV09bi5pbnN0YW5jZShlKSl9ZnVuY3Rpb24gcChlKXtyZXR1cm4gYS5leHRlbmRGbGF0KHt9LHMse2Rlc2NyaXB0aW9uOmV9KX1mdW5jdGlvbiBoKGUpe3JldHVybiJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIHdpdGggYCIrZSsiYCBkYXRlIGRhdGEuIn12YXIgZz17eGNhbGVuZGFyOnAoaCgieCIpKX0sbT1hLmV4dGVuZEZsYXQoe30sZyx7eWNhbGVuZGFyOnAoaCgieSIpKX0pLHY9YS5leHRlbmRGbGF0KHt9LG0se3pjYWxlbmRhcjpwKGgoInoiKSl9KSx5PXAoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgcmFuZ2VgIGFuZCBgdGljazBgIiwiaWYgdGhpcyBpcyBhIGRhdGUgYXhpcy4gVGhpcyBkb2VzIG5vdCBzZXQgdGhlIGNhbGVuZGFyIGZvciIsImludGVycHJldGluZyBkYXRhIG9uIHRoaXMgYXhpcywgdGhhdCdzIHNwZWNpZmllZCBpbiB0aGUgdHJhY2UiLCJvciB2aWEgdGhlIGdsb2JhbCBgbGF5b3V0LmNhbGVuZGFyYCJdLmpvaW4oIiAiKSk7dC5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNhbGVuZGFycyIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6bSxiYXI6bSxib3g6bSxoZWF0bWFwOm0sY29udG91cjptLGhpc3RvZ3JhbTptLGhpc3RvZ3JhbTJkOm0saGlzdG9ncmFtMmRjb250b3VyOm0sc2NhdHRlcjNkOnYsc3VyZmFjZTp2LG1lc2gzZDp2LHNjYXR0ZXJnbDptLG9obGM6ZyxjYW5kbGVzdGljazpnfSxsYXlvdXQ6e2NhbGVuZGFyOnAoWyJTZXRzIHRoZSBkZWZhdWx0IGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGludGVycHJldGluZyBhbmQiLCJkaXNwbGF5aW5nIGRhdGVzIHRocm91Z2hvdXQgdGhlIHBsb3QuIl0uam9pbigiICIpKX0sc3VicGxvdHM6e3hheGlzOntjYWxlbmRhcjp5fSx5YXhpczp7Y2FsZW5kYXI6eX0sc2NlbmU6e3hheGlzOntjYWxlbmRhcjp5fSx5YXhpczp7Y2FsZW5kYXI6eX0semF4aXM6e2NhbGVuZGFyOnl9fSxwb2xhcjp7cmFkaWFsYXhpczp7Y2FsZW5kYXI6eX19fSx0cmFuc2Zvcm1zOntmaWx0ZXI6e3ZhbHVlY2FsZW5kYXI6cChbIldBUk5JTkc6IEFsbCB0cmFuc2Zvcm1zIGFyZSBkZXByZWNhdGVkIGFuZCBtYXkgYmUgcmVtb3ZlZCBmcm9tIHRoZSBBUEkgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLiIsIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB2YWx1ZWAsIGlmIGl0IGlzIGEgZGF0ZS4iXS5qb2luKCIgIikpLHRhcmdldGNhbGVuZGFyOnAoWyJXQVJOSU5HOiBBbGwgdHJhbnNmb3JtcyBhcmUgZGVwcmVjYXRlZCBhbmQgbWF5IGJlIHJlbW92ZWQgZnJvbSB0aGUgQVBJIGluIG5leHQgbWFqb3IgdmVyc2lvbi4iLCJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdGFyZ2V0YCwgaWYgaXQgaXMgYW4iLCJhcnJheSBvZiBkYXRlcy4gSWYgYHRhcmdldGAgaXMgYSBzdHJpbmcgKGVnICp4Kikgd2UgdXNlIHRoZSIsImNvcnJlc3BvbmRpbmcgdHJhY2UgYXR0cmlidXRlIChlZyBgeGNhbGVuZGFyYCkgaWYgaXQgZXhpc3RzLCIsImV2ZW4gaWYgYHRhcmdldGNhbGVuZGFyYCBpcyBwcm92aWRlZC4iXS5qb2luKCIgIikpfX19LGxheW91dEF0dHJpYnV0ZXM6cyxoYW5kbGVEZWZhdWx0czpjLGhhbmRsZVRyYWNlRGVmYXVsdHM6ZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspYyhlLHQsclthXSsiY2FsZW5kYXIiLG4uY2FsZW5kYXIpfSxDQU5PTklDQUxfU1VOREFZOntjaGluZXNlOiIyMDAwLTAxLTAyIixjb3B0aWM6IjIwMDAtMDEtMDMiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMyIsZXRoaW9waWFuOiIyMDAwLTAxLTA1IixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDIiLGp1bGlhbjoiMjAwMC0wMS0wMyIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDUiLG5lcGFsaToiMjAwMC0wMS0wNSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDQiLHRoYWk6IjIwMDAtMDEtMDQiLHVtbWFscXVyYToiMTQwMC0wMS0wNiJ9LENBTk9OSUNBTF9USUNLOntjaGluZXNlOiIyMDAwLTAxLTAxIixjb3B0aWM6IjIwMDAtMDEtMDEiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMSIsZXRoaW9waWFuOiIyMDAwLTAxLTAxIixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDEiLGp1bGlhbjoiMjAwMC0wMS0wMSIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDEiLG5lcGFsaToiMjAwMC0wMS0wMSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDEiLHRoYWk6IjIwMDAtMDEtMDEiLHVtbWFscXVyYToiMTQwMC0wMS0wMSJ9LERGTFRSQU5HRTp7Y2hpbmVzZTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0sY29wdGljOlsiMTcwMC0wMS0wMSIsIjE3MDEtMDEtMDEiXSxkaXNjd29ybGQ6WyIxODAwLTAxLTAxIiwiMTgwMS0wMS0wMSJdLGV0aGlvcGlhbjpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0saGVicmV3OlsiNTcwMC0wMS0wMSIsIjU3MDEtMDEtMDEiXSxpc2xhbWljOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSxqdWxpYW46WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLG1heWFuOlsiNTIwMC0wMS0wMSIsIjUyMDEtMDEtMDEiXSxuYW5ha3NoYWhpOlsiMDUwMC0wMS0wMSIsIjA1MDEtMDEtMDEiXSxuZXBhbGk6WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLHBlcnNpYW46WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLGphbGFsaTpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0sdGFpd2FuOlsiMDEwMC0wMS0wMSIsIjAxMDEtMDEtMDEiXSx0aGFpOlsiMjUwMC0wMS0wMSIsIjI1MDEtMDEtMDEiXSx1bW1hbHF1cmE6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdfSxnZXRDYWw6Zix3b3JsZENhbEZtdDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuLGEsaSxzLGMsZD1NYXRoLmZsb29yKCh0Ky4wNSkvbCkrbyxwPWYocikuZnJvbUpEKGQpLGg9MDstMSE9PShoPWUuaW5kZXhPZigiJSIsaCkpOykiMCI9PT0obj1lLmNoYXJBdChoKzEpKXx8Ii0iPT09bnx8Il8iPT09bj8oaT0zLGE9ZS5jaGFyQXQoaCsyKSwiXyI9PT1uJiYobj0iLSIpKTooYT1uLG49IjAiLGk9MiksKHM9dVthXSk/KGM9IiMjIj09PXM/IiMjIjpwLmZvcm1hdERhdGUoc1tuXSksZT1lLnN1YnN0cigwLGgpK2MrZS5zdWJzdHIoaCtpKSxoKz1jLmxlbmd0aCk6aCs9aTtyZXR1cm4gZX19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjIxMiwiLi4vLi4vbGliIjoyMzIsIi4vY2FsZW5kYXJzIjo5OX1dLDEwMTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyLmRlZmF1bHRzPVsiIzFmNzdiNCIsIiNmZjdmMGUiLCIjMmNhMDJjIiwiI2Q2MjcyOCIsIiM5NDY3YmQiLCIjOGM1NjRiIiwiI2UzNzdjMiIsIiM3ZjdmN2YiLCIjYmNiZDIyIiwiIzE3YmVjZiJdLHIuZGVmYXVsdExpbmU9IiM0NDQiLHIubGlnaHRMaW5lPSIjZWVlIixyLmJhY2tncm91bmQ9IiNmZmYiLHIuYm9yZGVyTGluZT0iI0JFQzhEOSIsci5saWdodEZyYWN0aW9uPTFlMy8xMX0se31dLDEwMjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJ0aW55Y29sb3IyIiksYT1lKCJmYXN0LWlzbnVtZXJpYyIpLGk9ZSgiLi4vLi4vbGliL2FycmF5IikuaXNUeXBlZEFycmF5LG89dC5leHBvcnRzPXt9LGw9ZSgiLi9hdHRyaWJ1dGVzIik7by5kZWZhdWx0cz1sLmRlZmF1bHRzO3ZhciBzPW8uZGVmYXVsdExpbmU9bC5kZWZhdWx0TGluZTtvLmxpZ2h0TGluZT1sLmxpZ2h0TGluZTt2YXIgYz1vLmJhY2tncm91bmQ9bC5iYWNrZ3JvdW5kO2Z1bmN0aW9uIHUoZSl7aWYoYShlKXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBlO3ZhciB0PWUudHJpbSgpO2lmKCJyZ2IiIT09dC5zdWJzdHIoMCwzKSlyZXR1cm4gZTt2YXIgcj10Lm1hdGNoKC9ecmdiYT9ccypcKChbXigpXSopXCkkLyk7aWYoIXIpcmV0dXJuIGU7dmFyIG49clsxXS50cmltKCkuc3BsaXQoL1xzKltccyxdXHMqLyksaT0iYSI9PT10LmNoYXJBdCgzKSYmND09PW4ubGVuZ3RoO2lmKCFpJiYzIT09bi5sZW5ndGgpcmV0dXJuIGU7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspe2lmKCFuW29dLmxlbmd0aClyZXR1cm4gZTtpZihuW29dPU51bWJlcihuW29dKSwhKG5bb10+PTApKXJldHVybiBlO2lmKDM9PT1vKW5bb10+MSYmKG5bb109MSk7ZWxzZSBpZihuW29dPj0xKXJldHVybiBlfXZhciBsPU1hdGgucm91bmQoMjU1Km5bMF0pKyIsICIrTWF0aC5yb3VuZCgyNTUqblsxXSkrIiwgIitNYXRoLnJvdW5kKDI1NSpuWzJdKTtyZXR1cm4gaT8icmdiYSgiK2wrIiwgIituWzNdKyIpIjoicmdiKCIrbCsiKSJ9by50aW55UkdCPWZ1bmN0aW9uKGUpe3ZhciB0PWUudG9SZ2IoKTtyZXR1cm4icmdiKCIrTWF0aC5yb3VuZCh0LnIpKyIsICIrTWF0aC5yb3VuZCh0LmcpKyIsICIrTWF0aC5yb3VuZCh0LmIpKyIpIn0sby5yZ2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG8udGlueVJHQihuKGUpKX0sby5vcGFjaXR5PWZ1bmN0aW9uKGUpe3JldHVybiBlP24oZSkuZ2V0QWxwaGEoKTowfSxvLmFkZE9wYWNpdHk9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKGUpLnRvUmdiKCk7cmV0dXJuInJnYmEoIitNYXRoLnJvdW5kKHIucikrIiwgIitNYXRoLnJvdW5kKHIuZykrIiwgIitNYXRoLnJvdW5kKHIuYikrIiwgIit0KyIpIn0sby5jb21iaW5lPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bihlKS50b1JnYigpO2lmKDE9PT1yLmEpcmV0dXJuIG4oZSkudG9SZ2JTdHJpbmcoKTt2YXIgYT1uKHR8fGMpLnRvUmdiKCksaT0xPT09YS5hP2E6e3I6MjU1KigxLWEuYSkrYS5yKmEuYSxnOjI1NSooMS1hLmEpK2EuZyphLmEsYjoyNTUqKDEtYS5hKSthLmIqYS5hfSxvPXtyOmkuciooMS1yLmEpK3IucipyLmEsZzppLmcqKDEtci5hKStyLmcqci5hLGI6aS5iKigxLXIuYSkrci5iKnIuYX07cmV0dXJuIG4obykudG9SZ2JTdHJpbmcoKX0sby5jb250cmFzdD1mdW5jdGlvbihlLHQscil7dmFyIGE9bihlKTtyZXR1cm4gMSE9PWEuZ2V0QWxwaGEoKSYmKGE9bihvLmNvbWJpbmUoZSxjKSkpLChhLmlzRGFyaygpP3Q/YS5saWdodGVuKHQpOmM6cj9hLmRhcmtlbihyKTpzKS50b1N0cmluZygpfSxvLnN0cm9rZT1mdW5jdGlvbihlLHQpe3ZhciByPW4odCk7ZS5zdHlsZSh7c3Ryb2tlOm8udGlueVJHQihyKSwic3Ryb2tlLW9wYWNpdHkiOnIuZ2V0QWxwaGEoKX0pfSxvLmZpbGw9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKHQpO2Uuc3R5bGUoe2ZpbGw6by50aW55UkdCKHIpLCJmaWxsLW9wYWNpdHkiOnIuZ2V0QWxwaGEoKX0pfSxvLmNsZWFuPWZ1bmN0aW9uKGUpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7dmFyIHQscixuLGEsbD1PYmplY3Qua2V5cyhlKTtmb3IodD0wO3Q8bC5sZW5ndGg7dCsrKWlmKGE9ZVtuPWxbdF1dLCJjb2xvciI9PT1uLnN1YnN0cihuLmxlbmd0aC01KSlpZihBcnJheS5pc0FycmF5KGEpKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspYVtyXT11KGFbcl0pO2Vsc2UgZVtuXT11KGEpO2Vsc2UgaWYoImNvbG9yc2NhbGUiPT09bi5zdWJzdHIobi5sZW5ndGgtMTApJiZBcnJheS5pc0FycmF5KGEpKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspQXJyYXkuaXNBcnJheShhW3JdKSYmKGFbcl1bMV09dShhW3JdWzFdKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGEpKXt2YXIgcz1hWzBdO2lmKCFBcnJheS5pc0FycmF5KHMpJiZzJiYib2JqZWN0Ij09dHlwZW9mIHMpZm9yKHI9MDtyPGEubGVuZ3RoO3IrKylvLmNsZWFuKGFbcl0pfWVsc2UgYSYmIm9iamVjdCI9PXR5cGVvZiBhJiYhaShhKSYmby5jbGVhbihhKX19fSx7Ii4uLy4uL2xpYi9hcnJheSI6MjE4LCIuL2F0dHJpYnV0ZXMiOjEwMSwiZmFzdC1pc251bWVyaWMiOjE3LHRpbnljb2xvcjI6Njd9XSwxMDM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksYT1lKCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPWUoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89ZSgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO3QuZXhwb3J0cz1vKHtvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaCIsInYiXSxkZmx0OiJ2In0sdGhpY2tuZXNzbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJwaXhlbHMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozfSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXX0seHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl19LHlwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0sb3V0bGluZWNvbG9yOm4ubGluZWNvbG9yLG91dGxpbmV3aWR0aDpuLmxpbmV3aWR0aCxib3JkZXJjb2xvcjpuLmxpbmVjb2xvcixib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIn0sdGlja21vZGU6bi50aWNrbW9kZSxudGlja3M6bi5udGlja3MsdGljazA6bi50aWNrMCxkdGljazpuLmR0aWNrLHRpY2t2YWxzOm4udGlja3ZhbHMsdGlja3RleHQ6bi50aWNrdGV4dCx0aWNrczppKHt9LG4udGlja3Mse2RmbHQ6IiJ9KSx0aWNrbGFiZWxvdmVyZmxvdzppKHt9LG4udGlja2xhYmVsb3ZlcmZsb3cse30pLHRpY2tsYWJlbHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvdXRzaWRlIiwiaW5zaWRlIiwib3V0c2lkZSB0b3AiLCJpbnNpZGUgdG9wIiwib3V0c2lkZSBsZWZ0IiwiaW5zaWRlIGxlZnQiLCJvdXRzaWRlIHJpZ2h0IiwiaW5zaWRlIHJpZ2h0Iiwib3V0c2lkZSBib3R0b20iLCJpbnNpZGUgYm90dG9tIl0sZGZsdDoib3V0c2lkZSJ9LHRpY2tsZW46bi50aWNrbGVuLHRpY2t3aWR0aDpuLnRpY2t3aWR0aCx0aWNrY29sb3I6bi50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6bi5zaG93dGlja2xhYmVscyx0aWNrZm9udDphKHt9KSx0aWNrYW5nbGU6bi50aWNrYW5nbGUsdGlja2Zvcm1hdDpuLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOm4udGlja2Zvcm1hdHN0b3BzLHRpY2twcmVmaXg6bi50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Om4uc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDpuLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6bi5zaG93dGlja3N1ZmZpeCxzZXBhcmF0ZXRob3VzYW5kczpuLnNlcGFyYXRldGhvdXNhbmRzLGV4cG9uZW50Zm9ybWF0Om4uZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6bi5taW5leHBvbmVudCxzaG93ZXhwb25lbnQ6bi5zaG93ZXhwb25lbnQsdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyJ9LGZvbnQ6YSh7fSksc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmlnaHQiLCJ0b3AiLCJib3R0b20iXX19LF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZToic3RyaW5nIn0sdGl0bGVmb250OmEoe30pLHRpdGxlc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmlnaHQiLCJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AifX19LCJjb2xvcmJhcnMiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjoyMjYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjI2MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjoyOTQsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6MzEwfV0sMTA0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17Y246e2NvbG9yYmFyOiJjb2xvcmJhciIsY2JiZzoiY2JiZyIsY2JmaWxsOiJjYmZpbGwiLGNiZmlsbHM6ImNiZmlsbHMiLGNibGluZToiY2JsaW5lIixjYmxpbmVzOiJjYmxpbmVzIixjYmF4aXM6ImNiYXhpcyIsY2J0aXRsZXVuc2hpZnQ6ImNidGl0bGV1bnNoaWZ0IixjYnRpdGxlOiJjYnRpdGxlIixjYm91dGxpbmU6ImNib3V0bGluZSIsY3Jpc3A6ImNyaXNwIixqc1BsYWNlaG9sZGVyOiJqcy1wbGFjZWhvbGRlciJ9fX0se31dLDEwNTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxpPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksbz1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksbD1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLHM9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3ByZWZpeF9zdWZmaXhfZGVmYXVsdHMiKSxjPWUoIi4vYXR0cmlidXRlcyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIHU9YS5uZXdDb250YWluZXIodCwiY29sb3JiYXIiKSxkPWUuY29sb3JiYXJ8fHt9O2Z1bmN0aW9uIGYoZSx0KXtyZXR1cm4gbi5jb2VyY2UoZCx1LGMsZSx0KX12YXIgcD1yLm1hcmdpbnx8e3Q6MCxiOjAsbDowLHI6MH0saD1yLndpZHRoLXAubC1wLnIsZz1yLmhlaWdodC1wLnQtcC5iLG09InYiPT09Zigib3JpZW50YXRpb24iKSx2PWYoInRoaWNrbmVzc21vZGUiKTtmKCJ0aGlja25lc3MiLCJmcmFjdGlvbiI9PT12PzMwLyhtP2g6Zyk6MzApO3ZhciB5PWYoImxlbm1vZGUiKTtmKCJsZW4iLCJmcmFjdGlvbiI9PT15PzE6bT9nOmgpLGYoIngiLG0/MS4wMjouNSksZigieGFuY2hvciIsbT8ibGVmdCI6ImNlbnRlciIpLGYoInhwYWQiKSxmKCJ5IixtPy41OjEuMDIpLGYoInlhbmNob3IiLG0/Im1pZGRsZSI6ImJvdHRvbSIpLGYoInlwYWQiKSxuLm5vbmVPckFsbChkLHUsWyJ4IiwieSJdKSxmKCJvdXRsaW5lY29sb3IiKSxmKCJvdXRsaW5ld2lkdGgiKSxmKCJib3JkZXJjb2xvciIpLGYoImJvcmRlcndpZHRoIiksZigiYmdjb2xvciIpO3ZhciB4PW4uY29lcmNlKGQsdSx7dGlja2xhYmVscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6Im91dHNpZGUiLHZhbHVlczptP1sib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgdG9wIiwiaW5zaWRlIHRvcCIsIm91dHNpZGUgYm90dG9tIiwiaW5zaWRlIGJvdHRvbSJdOlsib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgbGVmdCIsImluc2lkZSBsZWZ0Iiwib3V0c2lkZSByaWdodCIsImluc2lkZSByaWdodCJdfX0sInRpY2tsYWJlbHBvc2l0aW9uIik7ZigidGlja2xhYmVsb3ZlcmZsb3ciLC0xIT09eC5pbmRleE9mKCJpbnNpZGUiKT8iaGlkZSBwYXN0IGRvbWFpbiI6ImhpZGUgcGFzdCBkaXYiKSxpKGQsdSxmLCJsaW5lYXIiKTt2YXIgYj1yLmZvbnQsXz17b3V0ZXJUaWNrczohMSxmb250OmJ9Oy0xIT09eC5pbmRleE9mKCJpbnNpZGUiKSYmKF8uYmdDb2xvcj0iYmxhY2siKSxzKGQsdSxmLCJsaW5lYXIiLF8pLGwoZCx1LGYsImxpbmVhciIsXyksbyhkLHUsZiwibGluZWFyIixfKSxmKCJ0aXRsZS50ZXh0IixyLl9kZmx0VGl0bGUuY29sb3JiYXIpO3ZhciB3PXUudGlja2ZvbnQsVD1uLmV4dGVuZEZsYXQoe30sdyx7Y29sb3I6Yi5jb2xvcixzaXplOm4uYmlnRm9udCh3LnNpemUpfSk7bi5jb2VyY2VGb250KGYsInRpdGxlLmZvbnQiLFQpLGYoInRpdGxlLnNpZGUiLG0/InRvcCI6InJpZ2h0Iil9fSx7Ii4uLy4uL2xpYiI6MjMyLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyNjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wcmVmaXhfc3VmZml4X2RlZmF1bHRzIjoyOTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjozMDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjMwNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjMwNSwiLi9hdHRyaWJ1dGVzIjoxMDN9XSwxMDY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgidGlueWNvbG9yMiIpLGk9ZSgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPWUoIi4uLy4uL3JlZ2lzdHJ5IiksbD1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9ZSgiLi4vZHJhZ2VsZW1lbnQiKSxjPWUoIi4uLy4uL2xpYiIpLHU9Yy5zdHJUcmFuc2xhdGUsZD1lKCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxmPWUoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxwPWUoIi4uL2RyYXdpbmciKSxoPWUoIi4uL2NvbG9yIiksZz1lKCIuLi90aXRsZXMiKSxtPWUoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHY9ZSgiLi4vY29sb3JzY2FsZS9oZWxwZXJzIikuZmxpcFNjYWxlLHk9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiKSx4PWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0cyIpLGI9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksXz1lKCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Iiksdz1fLkxJTkVfU1BBQ0lORyxUPV8uRlJPTV9UTCxNPV8uRlJPTV9CUixrPWUoIi4vY29uc3RhbnRzIikuY247dC5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitrLmNvbG9yYmFyKS5kYXRhKGZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhLGk9ZS5fZnVsbExheW91dCxvPWUuY2FsY2RhdGEsbD1bXTtmdW5jdGlvbiBzKGUpe3JldHVybiBkKGUse19maWxsY29sb3I6bnVsbCxfbGluZTp7Y29sb3I6bnVsbCx3aWR0aDpudWxsLGRhc2g6bnVsbH0sX2xldmVsczp7c3RhcnQ6bnVsbCxlbmQ6bnVsbCxzaXplOm51bGx9LF9maWxsbGV2ZWxzOm51bGwsX2ZpbGxncmFkaWVudDpudWxsLF96cmFuZ2U6bnVsbH0pfWZ1bmN0aW9uIGMoKXsiZnVuY3Rpb24iPT10eXBlb2YgYS5jYWxjP2EuY2FsYyhlLG4sdCk6KHQuX2ZpbGxncmFkaWVudD1yLnJldmVyc2VzY2FsZT92KHIuY29sb3JzY2FsZSk6ci5jb2xvcnNjYWxlLHQuX3pyYW5nZT1bclthLm1pbl0sclthLm1heF1dKX1mb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGY9b1t1XSxwPShuPWZbMF0udHJhY2UpLl9tb2R1bGUuY29sb3JiYXI7aWYoITA9PT1uLnZpc2libGUmJnApZm9yKHZhciBoPUFycmF5LmlzQXJyYXkocCksZz1oP3A6W3BdLG09MDttPGcubGVuZ3RoO20rKyl7dmFyIHk9KGE9Z1ttXSkuY29udGFpbmVyOyhyPXk/blt5XTpuKSYmci5zaG93c2NhbGUmJigodD1zKHIuY29sb3JiYXIpKS5faWQ9ImNiIituLnVpZCsoaCYmeT8iLSIreToiIiksdC5fdHJhY2VJbmRleD1uLmluZGV4LHQuX3Byb3BQcmVmaXg9KHk/eSsiLiI6IiIpKyJjb2xvcmJhci4iLHQuX21ldGE9bi5fbWV0YSxjKCksbC5wdXNoKHQpKX19Zm9yKHZhciB4IGluIGkuX2NvbG9yQXhlcylpZigocj1pW3hdKS5zaG93c2NhbGUpe3ZhciBiPWkuX2NvbG9yQXhlc1t4XTsodD1zKHIuY29sb3JiYXIpKS5faWQ9ImNiIit4LHQuX3Byb3BQcmVmaXg9eCsiLmNvbG9yYmFyLiIsdC5fbWV0YT1pLl9tZXRhLGE9e21pbjoiY21pbiIsbWF4OiJjbWF4In0sImhlYXRtYXAiIT09YlswXSYmKG49YlsxXSxhLmNhbGM9bi5fbW9kdWxlLmNvbG9yYmFyLmNhbGMpLGMoKSxsLnB1c2godCl9cmV0dXJuIGx9KGUpLChmdW5jdGlvbihlKXtyZXR1cm4gZS5faWR9KSk7dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2lkfSkpLmNsYXNzZWQoay5jb2xvcmJhciwhMCksdC5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtjLmVuc3VyZVNpbmdsZShyLCJyZWN0IixrLmNiYmcpLGMuZW5zdXJlU2luZ2xlKHIsImciLGsuY2JmaWxscyksYy5lbnN1cmVTaW5nbGUociwiZyIsay5jYmxpbmVzKSxjLmVuc3VyZVNpbmdsZShyLCJnIixrLmNiYXhpcywoZnVuY3Rpb24oZSl7ZS5jbGFzc2VkKGsuY3Jpc3AsITApfSkpLGMuZW5zdXJlU2luZ2xlKHIsImciLGsuY2J0aXRsZXVuc2hpZnQsKGZ1bmN0aW9uKGUpe2UuYXBwZW5kKCJnIikuY2xhc3NlZChrLmNidGl0bGUsITApfSkpLGMuZW5zdXJlU2luZ2xlKHIsInJlY3QiLGsuY2JvdXRsaW5lKTt2YXIgdj1mdW5jdGlvbihlLHQscil7dmFyIG89InYiPT09dC5vcmllbnRhdGlvbixzPXQubGVuLGY9dC5sZW5tb2RlLHY9dC50aGlja25lc3MsXz10LnRoaWNrbmVzc21vZGUsQT10Lm91dGxpbmV3aWR0aCxMPXQuYm9yZGVyd2lkdGgsUz10LmJnY29sb3IsRD10LnhhbmNob3IsQz10LnlhbmNob3IsTz10LnhwYWQsUD10LnlwYWQsST10LngsUj1vP3QueToxLXQueSx6PXIuX2Z1bGxMYXlvdXQsTj16Ll9zaXplLEY9dC5fZmlsbGNvbG9yLEU9dC5fbGluZSxqPXQudGl0bGUsSD1qLnNpZGUsQj10Ll96cmFuZ2V8fG4uZXh0ZW50KCgiZnVuY3Rpb24iPT10eXBlb2YgRj9GOkUuY29sb3IpLmRvbWFpbigpKSxZPSJmdW5jdGlvbiI9PXR5cGVvZiBFLmNvbG9yP0UuY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gRS5jb2xvcn0sVj0iZnVuY3Rpb24iPT10eXBlb2YgRj9GOmZ1bmN0aW9uKCl7cmV0dXJuIEZ9LFU9dC5fbGV2ZWxzLHE9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaT10Ll9sZXZlbHMsbz1bXSxsPVtdLHM9aS5lbmQraS5zaXplLzEwMCxjPWkuc2l6ZSx1PTEuMDAxKnJbMF0tLjAwMSpyWzFdLGQ9MS4wMDEqclsxXS0uMDAxKnJbMF07Zm9yKGE9MDthPDFlNSYmKG49aS5zdGFydCthKmMsIShjPjA/bj49czpuPD1zKSk7YSsrKW4+dSYmbjxkJiZvLnB1c2gobik7aWYodC5fZmlsbGdyYWRpZW50KWw9WzBdO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHQuX2ZpbGxjb2xvcil7dmFyIGY9dC5fZmlsbGxldmVscztpZihmKWZvcihzPWYuZW5kK2Yuc2l6ZS8xMDAsYz1mLnNpemUsYT0wO2E8MWU1JiYobj1mLnN0YXJ0K2EqYywhKGM+MD9uPj1zOm48PXMpKTthKyspbj5yWzBdJiZuPHJbMV0mJmwucHVzaChuKTtlbHNlKGw9by5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLWkuc2l6ZS8yfSkpKS5wdXNoKGxbbC5sZW5ndGgtMV0raS5zaXplKX1lbHNlIHQuX2ZpbGxjb2xvciYmInN0cmluZyI9PXR5cGVvZiB0Ll9maWxsY29sb3ImJihsPVswXSk7aS5zaXplPDAmJihvLnJldmVyc2UoKSxsLnJldmVyc2UoKSk7cmV0dXJue2xpbmU6byxmaWxsOmx9fSgwLHQsQiksRz1xLmZpbGwsWj1xLmxpbmUsVz1NYXRoLnJvdW5kKHYqKCJmcmFjdGlvbiI9PT1fP28/Ti53Ok4uaDoxKSksWD1XLyhvP04udzpOLmgpLEo9TWF0aC5yb3VuZChzKigiZnJhY3Rpb24iPT09Zj9vP04uaDpOLnc6MSkpLFE9Si8obz9OLmg6Ti53KSxLPU1hdGgucm91bmQobz9JKk4udytPOlIqTi5oK1ApLCQ9e2NlbnRlcjouNSxyaWdodDoxfVtEXXx8MCxlZT17dG9wOjEsbWlkZGxlOi41fVtDXXx8MCx0ZT1vP0ktJCpYOlItZWUqWCxyZT1vP1ItZWUqUTpJLSQqUSxuZT1NYXRoLnJvdW5kKG8/Ti5oKigxLXJlKTpOLncqcmUpO3QuX2xlbkZyYWM9USx0Ll90aGlja0ZyYWM9WCx0Ll91RnJhYz10ZSx0Ll92RnJhYz1yZTt2YXIgYWU9dC5fYXhpcz1mdW5jdGlvbihlLHQscil7dmFyIG49ZS5fZnVsbExheW91dCxhPSJ2Ij09PXQub3JpZW50YXRpb24saT17dHlwZToibGluZWFyIixyYW5nZTpyLHRpY2ttb2RlOnQudGlja21vZGUsbnRpY2tzOnQubnRpY2tzLHRpY2swOnQudGljazAsZHRpY2s6dC5kdGljayx0aWNrdmFsczp0LnRpY2t2YWxzLHRpY2t0ZXh0OnQudGlja3RleHQsdGlja3M6dC50aWNrcyx0aWNrbGVuOnQudGlja2xlbix0aWNrd2lkdGg6dC50aWNrd2lkdGgsdGlja2NvbG9yOnQudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOnQuc2hvd3RpY2tsYWJlbHMsdGlja2xhYmVscG9zaXRpb246dC50aWNrbGFiZWxwb3NpdGlvbix0aWNrbGFiZWxvdmVyZmxvdzp0LnRpY2tsYWJlbG92ZXJmbG93LHRpY2tmb250OnQudGlja2ZvbnQsdGlja2FuZ2xlOnQudGlja2FuZ2xlLHRpY2tmb3JtYXQ6dC50aWNrZm9ybWF0LGV4cG9uZW50Zm9ybWF0OnQuZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6dC5taW5leHBvbmVudCxzZXBhcmF0ZXRob3VzYW5kczp0LnNlcGFyYXRldGhvdXNhbmRzLHNob3dleHBvbmVudDp0LnNob3dleHBvbmVudCxzaG93dGlja3ByZWZpeDp0LnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6dC50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4OnQuc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDp0LnRpY2tzdWZmaXgsdGl0bGU6dC50aXRsZSxzaG93bGluZTohMCxhbmNob3I6ImZyZWUiLHNpZGU6YT8icmlnaHQiOiJib3R0b20iLHBvc2l0aW9uOjF9LG89YT8ieSI6IngiLGw9e3R5cGU6ImxpbmVhciIsX2lkOm8rdC5faWR9LHM9e2xldHRlcjpvLGZvbnQ6bi5mb250LG5vSG92ZXI6ITAsbm9UaWNrc29uOiEwLG5vVGlja2xhYmVsbW9kZTohMCxjYWxlbmRhcjpuLmNhbGVuZGFyfTtmdW5jdGlvbiB1KGUsdCl7cmV0dXJuIGMuY29lcmNlKGksbCxiLGUsdCl9cmV0dXJuIHkoaSxsLHUscyxuKSx4KGksbCx1LHMpLGx9KHIsdCxCKTthZS5wb3NpdGlvbj1YKyhvP0krTy9OLnc6UitQL04uaCk7dmFyIGllPS0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKEgpO28mJmllJiYoYWUudGl0bGUuc2lkZT1ILGFlLnRpdGxleD1JK08vTi53LGFlLnRpdGxleT1yZSsoInRvcCI9PT1qLnNpZGU/US1QL04uaDpQL04uaCkpO298fGllfHwoYWUudGl0bGUuc2lkZT1ILGFlLnRpdGxleT1SK1AvTi5oLGFlLnRpdGxleD1yZStPL04udyk7aWYoRS5jb2xvciYmImF1dG8iPT09dC50aWNrbW9kZSl7YWUudGlja21vZGU9ImxpbmVhciIsYWUudGljazA9VS5zdGFydDt2YXIgb2U9VS5zaXplLGxlPWMuY29uc3RyYWluKEovNTAsNCwxNSkrMSxzZT0oQlsxXS1CWzBdKS8oKHQubnRpY2tzfHxsZSkqb2UpO2lmKHNlPjEpe3ZhciBjZT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHNlKS9NYXRoLkxOMTApKTtvZSo9Y2UqYy5yb3VuZFVwKHNlL2NlLFsyLDUsMTBdKSwoTWF0aC5hYnMoVS5zdGFydCkvVS5zaXplKzFlLTYpJTE8MmUtNiYmKGFlLnRpY2swPTApfWFlLmR0aWNrPW9lfWFlLmRvbWFpbj1vP1tyZStQL04uaCxyZStRLVAvTi5oXTpbcmUrTy9OLncscmUrUS1PL04ud10sYWUuc2V0U2NhbGUoKSxlLmF0dHIoInRyYW5zZm9ybSIsdShNYXRoLnJvdW5kKE4ubCksTWF0aC5yb3VuZChOLnQpKSk7dmFyIHVlLGRlPWUuc2VsZWN0KCIuIitrLmNidGl0bGV1bnNoaWZ0KS5hdHRyKCJ0cmFuc2Zvcm0iLHUoLU1hdGgucm91bmQoTi5sKSwtTWF0aC5yb3VuZChOLnQpKSksZmU9YWUudGlja2xhYmVscG9zaXRpb24scGU9YWUudGl0bGUuZm9udC5zaXplLGhlPWUuc2VsZWN0KCIuIitrLmNiYXhpcyksZ2U9MCxtZT0wO2Z1bmN0aW9uIHZlKG4sYSl7dmFyIGk9e3Byb3BDb250YWluZXI6YWUscHJvcE5hbWU6dC5fcHJvcFByZWZpeCsidGl0bGUiLHRyYWNlSW5kZXg6dC5fdHJhY2VJbmRleCxfbWV0YTp0Ll9tZXRhLHBsYWNlaG9sZGVyOnouX2RmbHRUaXRsZS5jb2xvcmJhcixjb250YWluZXJHcm91cDplLnNlbGVjdCgiLiIray5jYnRpdGxlKX0sbz0iaCI9PT1uLmNoYXJBdCgwKT9uLnN1YnN0cigxKToiaCIrbjtlLnNlbGVjdEFsbCgiLiIrbysiLC4iK28rIi1tYXRoLWdyb3VwIikucmVtb3ZlKCksZy5kcmF3KHIsbixkKGksYXx8e30pKX1yZXR1cm4gYy5zeW5jT3JBc3luYyhbaS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dmFyIGUsdDsobyYmaWV8fCFvJiYhaWUpJiYoInRvcCI9PT1IJiYoZT1PK04ubCtOLncqSSx0PVArTi50K04uaCooMS1yZS1RKSszKy43NSpwZSksImJvdHRvbSI9PT1IJiYoZT1PK04ubCtOLncqSSx0PVArTi50K04uaCooMS1yZSktMy0uMjUqcGUpLCJyaWdodCI9PT1IJiYodD1QK04udCtOLmgqUiszKy43NSpwZSxlPU8rTi5sK04udypyZSksdmUoYWUuX2lkKyJ0aXRsZSIse2F0dHJpYnV0ZXM6e3g6ZSx5OnQsInRleHQtYW5jaG9yIjpvPyJzdGFydCI6Im1pZGRsZSJ9fSkpfSxmdW5jdGlvbigpe2lmKCFvJiYhaWV8fG8mJmllKXt2YXIgaSxzPWUuc2VsZWN0KCIuIitrLmNidGl0bGUpLGQ9cy5zZWxlY3QoInRleHQiKSxmPVstQS8yLEEvMl0saD1zLnNlbGVjdCgiLmgiK2FlLl9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKSxnPTE1LjY7aWYoZC5ub2RlKCkmJihnPXBhcnNlSW50KGQubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSp3KSxoPyhpPXAuYkJveChoKSxtZT1pLndpZHRoLChnZT1pLmhlaWdodCk+ZyYmKGZbMV0tPShnZS1nKS8yKSk6ZC5ub2RlKCkmJiFkLmNsYXNzZWQoay5qc1BsYWNlaG9sZGVyKSYmKGk9cC5iQm94KGQubm9kZSgpKSxtZT1pLndpZHRoLGdlPWkuaGVpZ2h0KSxvKXtpZihnZSl7aWYoZ2UrPTUsInRvcCI9PT1IKWFlLmRvbWFpblsxXS09Z2UvTi5oLGZbMV0qPS0xO2Vsc2V7YWUuZG9tYWluWzBdKz1nZS9OLmg7dmFyIHY9bS5saW5lQ291bnQoZCk7ZlsxXSs9KDEtdikqZ31zLmF0dHIoInRyYW5zZm9ybSIsdShmWzBdLGZbMV0pKSxhZS5zZXRTY2FsZSgpfX1lbHNlIG1lJiYoInJpZ2h0Ij09PUgmJihhZS5kb21haW5bMF0rPShtZStwZS8yKS9OLncpLHMuYXR0cigidHJhbnNmb3JtIix1KGZbMF0sZlsxXSkpLGFlLnNldFNjYWxlKCkpfWUuc2VsZWN0QWxsKCIuIitrLmNiZmlsbHMrIiwuIitrLmNibGluZXMpLmF0dHIoInRyYW5zZm9ybSIsbz91KDAsTWF0aC5yb3VuZChOLmgqKDEtYWUuZG9tYWluWzFdKSkpOnUoTWF0aC5yb3VuZChOLncqYWUuZG9tYWluWzBdKSwwKSksaGUuYXR0cigidHJhbnNmb3JtIixvP3UoMCxNYXRoLnJvdW5kKC1OLnQpKTp1KE1hdGgucm91bmQoLU4ubCksMCkpO3ZhciB5PWUuc2VsZWN0KCIuIitrLmNiZmlsbHMpLnNlbGVjdEFsbCgicmVjdC4iK2suY2JmaWxsKS5hdHRyKCJzdHlsZSIsIiIpLmRhdGEoRyk7eS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoay5jYmZpbGwsITApLnN0eWxlKCJzdHJva2UiLCJub25lIikseS5leGl0KCkucmVtb3ZlKCk7dmFyIHg9Qi5tYXAoYWUuYzJwKS5tYXAoTWF0aC5yb3VuZCkuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSkpO3kuZWFjaCgoZnVuY3Rpb24oZSxpKXt2YXIgbD1bMD09PWk/QlswXTooR1tpXStHW2ktMV0pLzIsaT09PUcubGVuZ3RoLTE/QlsxXTooR1tpXStHW2krMV0pLzJdLm1hcChhZS5jMnApLm1hcChNYXRoLnJvdW5kKTtvJiYobFsxXT1jLmNvbnN0cmFpbihsWzFdKyhsWzFdPmxbMF0pPzE6LTEseFswXSx4WzFdKSk7dmFyIHM9bi5zZWxlY3QodGhpcykuYXR0cihvPyJ4IjoieSIsSykuYXR0cihvPyJ5IjoieCIsbi5taW4obCkpLmF0dHIobz8id2lkdGgiOiJoZWlnaHQiLE1hdGgubWF4KFcsMikpLmF0dHIobz8iaGVpZ2h0Ijoid2lkdGgiLE1hdGgubWF4KG4ubWF4KGwpLW4ubWluKGwpLDIpKTtpZih0Ll9maWxsZ3JhZGllbnQpcC5ncmFkaWVudChzLHIsdC5faWQsbz8idmVydGljYWwiOiJob3Jpem9udGFscmV2ZXJzZWQiLHQuX2ZpbGxncmFkaWVudCwiZmlsbCIpO2Vsc2V7dmFyIHU9VihlKS5yZXBsYWNlKCJlLSIsIiIpO3MuYXR0cigiZmlsbCIsYSh1KS50b0hleFN0cmluZygpKX19KSk7dmFyIGI9ZS5zZWxlY3QoIi4iK2suY2JsaW5lcykuc2VsZWN0QWxsKCJwYXRoLiIray5jYmxpbmUpLmRhdGEoRS5jb2xvciYmRS53aWR0aD9aOltdKTtiLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChrLmNibGluZSwhMCksYi5leGl0KCkucmVtb3ZlKCksYi5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1LLHI9TWF0aC5yb3VuZChhZS5jMnAoZSkpK0Uud2lkdGgvMiUxO24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIisobz90KyIsIityOnIrIiwiK3QpKyhvPyJoIjoidiIpK1cpLmNhbGwocC5saW5lR3JvdXBTdHlsZSxFLndpZHRoLFkoZSksRS5kYXNoKX0pKSxoZS5zZWxlY3RBbGwoImcuIithZS5faWQrInRpY2sscGF0aCIpLnJlbW92ZSgpO3ZhciBfPUsrVysoQXx8MCkvMi0oIm91dHNpZGUiPT09dC50aWNrcz8xOjApLFQ9bC5jYWxjVGlja3MoYWUpLE09bC5nZXRUaWNrU2lnbnMoYWUpWzJdO3JldHVybiBsLmRyYXdUaWNrcyhyLGFlLHt2YWxzOiJpbnNpZGUiPT09YWUudGlja3M/bC5jbGlwRW5kcyhhZSxUKTpULGxheWVyOmhlLHBhdGg6bC5tYWtlVGlja1BhdGgoYWUsXyxNKSx0cmFuc0ZuOmwubWFrZVRyYW5zVGlja0ZuKGFlKX0pLGwuZHJhd0xhYmVscyhyLGFlLHt2YWxzOlQsbGF5ZXI6aGUsdHJhbnNGbjpsLm1ha2VUcmFuc1RpY2tMYWJlbEZuKGFlKSxsYWJlbEZuczpsLm1ha2VMYWJlbEZucyhhZSxfKX0pfSxmdW5jdGlvbigpe2lmKG8mJiFpZXx8IW8mJmllKXt2YXIgZSxhLGk9YWUucG9zaXRpb258fDAsbD1hZS5fb2Zmc2V0K2FlLl9sZW5ndGgvMjtpZigicmlnaHQiPT09SClhPWwsZT1OLmwrTi53KmkrMTArcGUqKGFlLnNob3d0aWNrbGFiZWxzPzE6LjUpO2Vsc2UgaWYoZT1sLCJib3R0b20iPT09SCYmKGE9Ti50K04uaCppKzEwKygtMT09PWZlLmluZGV4T2YoImluc2lkZSIpP2FlLnRpY2tmb250LnNpemU6MCkrKCJpbnRzaWRlIiE9PWFlLnRpY2tzJiZ0LnRpY2tsZW58fDApKSwidG9wIj09PUgpe3ZhciBzPWoudGV4dC5zcGxpdCgiPGJyPiIpLmxlbmd0aDthPU4udCtOLmgqaSsxMC1XLXcqcGUqc312ZSgobz8iaCI6InYiKSthZS5faWQrInRpdGxlIix7YXZvaWQ6e3NlbGVjdGlvbjpuLnNlbGVjdChyKS5zZWxlY3RBbGwoImcuIithZS5faWQrInRpY2siKSxzaWRlOkgsb2Zmc2V0VG9wOm8/MDpOLnQsb2Zmc2V0TGVmdDpvP04ubDowLG1heFNoaWZ0Om8/ei53aWR0aDp6LmhlaWdodH0sYXR0cmlidXRlczp7eDplLHk6YSwidGV4dC1hbmNob3IiOiJtaWRkbGUifSx0cmFuc2Zvcm06e3JvdGF0ZTpvPy05MDowLG9mZnNldDowfX0pfX0saS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dmFyIG4sbD1XK0EvMjstMT09PWZlLmluZGV4T2YoImluc2lkZSIpJiYobj1wLmJCb3goaGUubm9kZSgpKSxsKz1vP24ud2lkdGg6bi5oZWlnaHQpLHVlPWRlLnNlbGVjdCgidGV4dCIpO3ZhciBjPTAsZD1vJiYidG9wIj09PUgsZz0hbyYmInJpZ2h0Ij09PUgsbT0wO2lmKHVlLm5vZGUoKSYmIXVlLmNsYXNzZWQoay5qc1BsYWNlaG9sZGVyKSl7dmFyIHkseD1kZS5zZWxlY3QoIi5oIithZS5faWQrInRpdGxlLW1hdGgtZ3JvdXAiKS5ub2RlKCk7eCYmKG8mJmllfHwhbyYmIWllKT8oYz0obj1wLmJCb3goeCkpLndpZHRoLHk9bi5oZWlnaHQpOihjPShuPXAuYkJveChkZS5ub2RlKCkpKS5yaWdodC1OLmwtKG8/SzpuZSkseT1uLmJvdHRvbS1OLnQtKG8/bmU6Syksb3x8InRvcCIhPT1IfHwobCs9bi5oZWlnaHQsbT1uLmhlaWdodCkpLGcmJih1ZS5hdHRyKCJ0cmFuc2Zvcm0iLHUoYy8yK3BlLzIsMCkpLGMqPTIpLGw9TWF0aC5tYXgobCxvP2M6eSl9dmFyIGI9Mioobz9POlApK2wrTCtBLzIsdz0wOyFvJiZqLnRleHQmJiJib3R0b20iPT09QyYmUjw9MCYmKGIrPXc9Yi8yLG0rPXcpLHouX2hDb2xvcmJhck1vdmVUaXRsZT13LHouX2hDb2xvcmJhck1vdmVDQlRpdGxlPW07dmFyIEY9TCtBO2Uuc2VsZWN0KCIuIitrLmNiYmcpLmF0dHIoIngiLChvP0s6bmUpLUYvMi0obz9POjApKS5hdHRyKCJ5Iiwobz9uZTpLKS0obz9KOlArbS13KSkuYXR0cihvPyJ3aWR0aCI6ImhlaWdodCIsTWF0aC5tYXgoYi13LDIpKS5hdHRyKG8/ImhlaWdodCI6IndpZHRoIixNYXRoLm1heChKK0YsMikpLmNhbGwoaC5maWxsLFMpLmNhbGwoaC5zdHJva2UsdC5ib3JkZXJjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsTCk7dmFyIEU9Zz9NYXRoLm1heChjLTEwLDApOjA7aWYoZS5zZWxlY3RBbGwoIi4iK2suY2JvdXRsaW5lKS5hdHRyKCJ4Iiwobz9LOm5lK08pK0UpLmF0dHIoInkiLChvP25lK1AtSjpLKSsoZD9nZTowKSkuYXR0cihvPyJ3aWR0aCI6ImhlaWdodCIsTWF0aC5tYXgoVywyKSkuYXR0cihvPyJoZWlnaHQiOiJ3aWR0aCIsTWF0aC5tYXgoSi0obz8yKlArZ2U6MipPK0UpLDIpKS5jYWxsKGguc3Ryb2tlLHQub3V0bGluZWNvbG9yKS5zdHlsZSh7ZmlsbDoibm9uZSIsInN0cm9rZS13aWR0aCI6QX0pLGUuYXR0cigidHJhbnNmb3JtIix1KE4ubC0obz8kKmI6MCksTi50LShvPzA6KDEtZWUpKmItbSkpKSwhbyYmKEx8fGEoUykuZ2V0QWxwaGEoKSYmIWEuZXF1YWxzKHoucGFwZXJfYmdjb2xvcixTKSkpe3ZhciBCPWhlLnNlbGVjdEFsbCgidGV4dCIpLFk9QlswXS5sZW5ndGgsVj1lLnNlbGVjdCgiLiIray5jYmJnKS5ub2RlKCksVT1wLmJCb3goVikscT1wLmdldFRyYW5zbGF0ZShlKTtCLmVhY2goKGZ1bmN0aW9uKGUsdCl7dmFyIHI9WS0xO2lmKDA9PT10fHx0PT09cil7dmFyIG4sYT1wLmJCb3godGhpcyksaT1wLmdldFRyYW5zbGF0ZSh0aGlzKTtpZih0PT09cil7dmFyIG89YS5yaWdodCtpLng7KG49VS5yaWdodCtxLngrbmUtTC0yK0ktbyk+MCYmKG49MCl9ZWxzZSBpZigwPT09dCl7dmFyIGw9YS5sZWZ0K2kueDsobj1VLmxlZnQrcS54K25lK0wrMi1sKTwwJiYobj0wKX1uJiYoWTwzP3RoaXMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyIsMCkgIit0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIikpOnRoaXMuc2V0QXR0cmlidXRlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikpfX0pKX12YXIgRz17fSxaPVRbRF0sWD1NW0RdLFE9VFtDXSx0ZT1NW0NdLHJlPWItVztvPygicGl4ZWxzIj09PWY/KEcueT1SLEcudD1KKlEsRy5iPUoqdGUpOihHLnQ9Ry5iPTAsRy55dD1SK3MqUSxHLnliPVItcyp0ZSksInBpeGVscyI9PT1fPyhHLng9SSxHLmw9YipaLEcucj1iKlgpOihHLmw9cmUqWixHLnI9cmUqWCxHLnhsPUktdipaLEcueHI9SSt2KlgpKTooInBpeGVscyI9PT1mPyhHLng9SSxHLmw9SipaLEcucj1KKlgpOihHLmw9Ry5yPTAsRy54bD1JK3MqWixHLnhyPUktcypYKSwicGl4ZWxzIj09PV8/KEcueT0xLVIsRy50PWIqUSxHLmI9Yip0ZSk6KEcudD1yZSpRLEcuYj1yZSp0ZSxHLnl0PVItdipRLEcueWI9Uit2KnRlKSksaS5hdXRvTWFyZ2luKHIsdC5faWQsRyl9XSxyKX0ocix0LGUpO3YmJnYudGhlbiYmKGUuX3Byb21pc2VzfHxbXSkucHVzaCh2KSxlLl9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24mJmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbD0idiI9PT10Lm9yaWVudGF0aW9uLGM9ci5fZnVsbExheW91dC5fc2l6ZTtzLmluaXQoe2VsZW1lbnQ6ZS5ub2RlKCksZ2Q6cixwcmVwRm46ZnVuY3Rpb24oKXtuPWUuYXR0cigidHJhbnNmb3JtIiksZihlKX0sbW92ZUZuOmZ1bmN0aW9uKHIsbyl7ZS5hdHRyKCJ0cmFuc2Zvcm0iLG4rdShyLG8pKSxhPXMuYWxpZ24oKGw/dC5fdUZyYWM6dC5fdkZyYWMpK3IvYy53LGw/dC5fdGhpY2tGcmFjOnQuX2xlbkZyYWMsMCwxLHQueGFuY2hvciksaT1zLmFsaWduKChsP3QuX3ZGcmFjOjEtdC5fdUZyYWMpLW8vYy5oLGw/dC5fbGVuRnJhYzp0Ll90aGlja0ZyYWMsMCwxLHQueWFuY2hvcik7dmFyIGQ9cy5nZXRDdXJzb3IoYSxpLHQueGFuY2hvcix0LnlhbmNob3IpO2YoZSxkKX0sZG9uZUZuOmZ1bmN0aW9uKCl7aWYoZihlKSx2b2lkIDAhPT1hJiZ2b2lkIDAhPT1pKXt2YXIgbj17fTtuW3QuX3Byb3BQcmVmaXgrIngiXT1hLG5bdC5fcHJvcFByZWZpeCsieSJdPWksdm9pZCAwIT09dC5fdHJhY2VJbmRleD9vLmNhbGwoIl9ndWlSZXN0eWxlIixyLG4sdC5fdHJhY2VJbmRleCk6by5jYWxsKCJfZ3VpUmVsYXlvdXQiLHIsbil9fX0pfShyLHQsZSl9KSksdC5leGl0KCkuZWFjaCgoZnVuY3Rpb24odCl7aS5hdXRvTWFyZ2luKGUsdC5faWQpfSkpLnJlbW92ZSgpLHQub3JkZXIoKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjIwNywiLi4vLi4vbGliIjoyMzIsIi4uLy4uL2xpYi9leHRlbmQiOjIyNiwiLi4vLi4vbGliL3NldGN1cnNvciI6MjUyLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjI1NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI3OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiOjI4MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjoyOTQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0cyI6Mjk3LCIuLi8uLi9wbG90cy9wbG90cyI6MzE2LCIuLi8uLi9yZWdpc3RyeSI6MzE4LCIuLi9jb2xvciI6MTAyLCIuLi9jb2xvcnNjYWxlL2hlbHBlcnMiOjExMywiLi4vZHJhZ2VsZW1lbnQiOjEyMSwiLi4vZHJhd2luZyI6MTI0LCIuLi90aXRsZXMiOjIwMCwiLi9jb25zdGFudHMiOjEwNCwiQHBsb3RseS9kMyI6MTEsdGlueWNvbG9yMjo2N31dLDEwNzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uaXNQbGFpbk9iamVjdChlLmNvbG9yYmFyKX19LHsiLi4vLi4vbGliIjoyMzJ9XSwxMDg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNvbG9yYmFyIixhdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKSxkcmF3OmUoIi4vZHJhdyIpLmRyYXcsaGFzQ29sb3JiYXI6ZSgiLi9oYXNfY29sb3JiYXIiKX19LHsiLi9hdHRyaWJ1dGVzIjoxMDMsIi4vZGVmYXVsdHMiOjEwNSwiLi9kcmF3IjoxMDYsIi4vaGFzX2NvbG9yYmFyIjoxMDd9XSwxMDk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vY29sb3JiYXIvYXR0cmlidXRlcyIpLGE9ZSgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcixpPWUoIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIiksbz1lKCIuL3NjYWxlcy5qcyIpLnNjYWxlcztpKG8pO2Z1bmN0aW9uIGwoZSl7cmV0dXJuImAiK2UrImAifXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2U9ZXx8IiI7dmFyIHIsaT0odD10fHx7fSkuY0xldHRlcnx8ImMiLHM9KCJvbmx5SWZOdW1lcmljYWwiaW4gdD90Lm9ubHlJZk51bWVyaWNhbDpCb29sZWFuKGUpLCJub1NjYWxlImluIHQ/dC5ub1NjYWxlOiJtYXJrZXIubGluZSI9PT1lKSxjPSJzaG93U2NhbGVEZmx0ImluIHQ/dC5zaG93U2NhbGVEZmx0OiJ6Ij09PWksdT0ic3RyaW5nIj09dHlwZW9mIHQuY29sb3JzY2FsZURmbHQ/b1t0LmNvbG9yc2NhbGVEZmx0XTpudWxsLGQ9dC5lZGl0VHlwZU92ZXJyaWRlfHwiIixmPWU/ZSsiLiI6IiI7ImNvbG9yQXR0ciJpbiB0PyhyPXQuY29sb3JBdHRyLHQuY29sb3JBdHRyKTpsKGYrKHI9e3o6InoiLGM6ImNvbG9yIn1baV0pKTt2YXIgcD1pKyJhdXRvIixoPWkrIm1pbiIsZz1pKyJtYXgiLG09aSsibWlkIix2PShsKGYrcCksbChmK2gpLGwoZitnKSx7fSk7dltoXT12W2ddPXZvaWQgMDt2YXIgeT17fTt5W3BdPSExO3ZhciB4PXt9O3JldHVybiJjb2xvciI9PT1yJiYoeC5jb2xvcj17dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6ZHx8InN0eWxlIn0sdC5hbmltJiYoeC5jb2xvci5hbmltPSEwKSkseFtwXT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnZ9LHhbaF09e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOmR8fCJwbG90IixpbXBsaWVkRWRpdHM6eX0seFtnXT17dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6ZHx8InBsb3QiLGltcGxpZWRFZGl0czp5fSx4W21dPXt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnZ9LHguY29sb3JzY2FsZT17dmFsVHlwZToiY29sb3JzY2FsZSIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6dSxpbXBsaWVkRWRpdHM6e2F1dG9jb2xvcnNjYWxlOiExfX0seC5hdXRvY29sb3JzY2FsZT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSE9PXQuYXV0b0NvbG9yRGZsdCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOntjb2xvcnNjYWxlOnZvaWQgMH19LHgucmV2ZXJzZXNjYWxlPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sc3x8KHguc2hvd3NjYWxlPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OmMsZWRpdFR5cGU6ImNhbGMifSx4LmNvbG9yYmFyPW4pLHQubm9Db2xvckF4aXN8fCh4LmNvbG9yYXhpcz17dmFsVHlwZToic3VicGxvdGlkIixyZWdleDphKCJjb2xvcmF4aXMiKSxkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSkseH19LHsiLi4vLi4vbGliL3JlZ2V4IjoyNDgsIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIjoyNTMsIi4uL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjEwMywiLi9zY2FsZXMuanMiOjExN31dLDExMDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi4vLi4vbGliIiksaT1lKCIuL2hlbHBlcnMiKS5leHRyYWN0T3B0czt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvLGw9ZS5fZnVsbExheW91dCxzPXIudmFscyxjPXIuY29udGFpbmVyU3RyLHU9Yz9hLm5lc3RlZFByb3BlcnR5KHQsYykuZ2V0KCk6dCxkPWkodSksZj0hMSE9PWQuYXV0byxwPWQubWluLGg9ZC5tYXgsZz1kLm1pZCxtPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWdnTnVtcyhNYXRoLm1pbixudWxsLHMpfSx2PWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWdnTnVtcyhNYXRoLm1heCxudWxsLHMpfTsodm9pZCAwPT09cD9wPW0oKTpmJiYocD11Ll9jb2xvckF4JiZuKHApP01hdGgubWluKHAsbSgpKTptKCkpLHZvaWQgMD09PWg/aD12KCk6ZiYmKGg9dS5fY29sb3JBeCYmbihoKT9NYXRoLm1heChoLHYoKSk6digpKSxmJiZ2b2lkIDAhPT1nJiYoaC1nPmctcD9wPWctKGgtZyk6aC1nPGctcCYmKGg9ZysoZy1wKSkpLHA9PT1oJiYocC09LjUsaCs9LjUpLGQuX3N5bmMoIm1pbiIscCksZC5fc3luYygibWF4IixoKSxkLmF1dG9jb2xvcnNjYWxlKSYmKG89cCpoPDA/bC5jb2xvcnNjYWxlLmRpdmVyZ2luZzpwPj0wP2wuY29sb3JzY2FsZS5zZXF1ZW50aWFsOmwuY29sb3JzY2FsZS5zZXF1ZW50aWFsbWludXMsZC5fc3luYygiY29sb3JzY2FsZSIsbykpfX0seyIuLi8uLi9saWIiOjIzMiwiLi9oZWxwZXJzIjoxMTMsImZhc3QtaXNudW1lcmljIjoxN31dLDExMTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4vaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsaT1lKCIuL2hlbHBlcnMiKS5leHRyYWN0T3B0czt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUsdCl7dmFyIHI9ZVsiXyIrdF07dm9pZCAwIT09ciYmKGVbdF09cil9ZnVuY3Rpb24gbyhlLGEpe3ZhciBvPWEuY29udGFpbmVyP24ubmVzdGVkUHJvcGVydHkoZSxhLmNvbnRhaW5lcikuZ2V0KCk6ZTtpZihvKWlmKG8uY29sb3JheGlzKW8uX2NvbG9yQXg9dFtvLmNvbG9yYXhpc107ZWxzZXt2YXIgbD1pKG8pLHM9bC5hdXRvOyhzfHx2b2lkIDA9PT1sLm1pbikmJnIobyxhLm1pbiksKHN8fHZvaWQgMD09PWwubWF4KSYmcihvLGEubWF4KSxsLmF1dG9jb2xvcnNjYWxlJiZyKG8sImNvbG9yc2NhbGUiKX19Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBzPWVbbF0sYz1zLl9tb2R1bGUuY29sb3JiYXI7aWYoYylpZihBcnJheS5pc0FycmF5KGMpKWZvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKW8ocyxjW3VdKTtlbHNlIG8ocyxjKTthKHMsIm1hcmtlci5saW5lIikmJm8ocyx7Y29udGFpbmVyOiJtYXJrZXIubGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSl9Zm9yKHZhciBkIGluIHQuX2NvbG9yQXhlcylvKHRbZF0se21pbjoiY21pbiIsbWF4OiJjbWF4In0pfX0seyIuLi8uLi9saWIiOjIzMiwiLi9oZWxwZXJzIjoxMTN9XSwxMTI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZmFzdC1pc251bWVyaWMiKSxhPWUoIi4uLy4uL2xpYiIpLGk9ZSgiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIiksbz1lKCIuLi9jb2xvcmJhci9kZWZhdWx0cyIpLGw9ZSgiLi9zY2FsZXMiKS5pc1ZhbGlkLHM9ZSgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzO2Z1bmN0aW9uIGMoZSx0KXt2YXIgcj10LnNsaWNlKDAsdC5sZW5ndGgtMSk7cmV0dXJuIHQ/YS5uZXN0ZWRQcm9wZXJ0eShlLHIpLmdldCgpfHx7fTplfXQuZXhwb3J0cz1mdW5jdGlvbiBlKHQscix1LGQsZil7dmFyIHA9Zi5wcmVmaXgsaD1mLmNMZXR0ZXIsZz0iX21vZHVsZSJpbiByLG09Yyh0LHApLHY9YyhyLHApLHk9YyhyLl90ZW1wbGF0ZXx8e30scCl8fHt9LHg9ZnVuY3Rpb24oKXtyZXR1cm4gZGVsZXRlIHQuY29sb3JheGlzLGRlbGV0ZSByLmNvbG9yYXhpcyxlKHQscix1LGQsZil9O2lmKGcpe3ZhciBiPXUuX2NvbG9yQXhlc3x8e30sXz1kKHArImNvbG9yYXhpcyIpO2lmKF8pe3ZhciB3PXMociwiY29udG91ciIpJiZhLm5lc3RlZFByb3BlcnR5KHIsImNvbnRvdXJzLmNvbG9yaW5nIikuZ2V0KCl8fCJoZWF0bWFwIixUPWJbX107cmV0dXJuIHZvaWQoVD8oVFsyXS5wdXNoKHgpLFRbMF0hPT13JiYoVFswXT0hMSxhLndhcm4oWyJJZ25vcmluZyBjb2xvcmF4aXM6IixfLCJzZXR0aW5nIiwiYXMgaXQgaXMgbGlua2VkIHRvIGluY29tcGF0aWJsZSBjb2xvcnNjYWxlcy4iXS5qb2luKCIgIikpKSk6YltfXT1bdyxyLFt4XV0pfX12YXIgTT1tW2grIm1pbiJdLGs9bVtoKyJtYXgiXSxBPW4oTSkmJm4oaykmJk08aztkKHAraCsiYXV0byIsIUEpP2QocCtoKyJtaWQiKTooZChwK2grIm1pbiIpLGQocCtoKyJtYXgiKSk7dmFyIEwsUyxEPW0uY29sb3JzY2FsZSxDPXkuY29sb3JzY2FsZTsodm9pZCAwIT09RCYmKEw9IWwoRCkpLHZvaWQgMCE9PUMmJihMPSFsKEMpKSxkKHArImF1dG9jb2xvcnNjYWxlIixMKSxkKHArImNvbG9yc2NhbGUiKSxkKHArInJldmVyc2VzY2FsZSIpLCJtYXJrZXIubGluZS4iIT09cCkmJihwJiZnJiYoUz1pKG0pKSxkKHArInNob3dzY2FsZSIsUykmJihwJiZ5JiYodi5fdGVtcGxhdGU9eSksbyhtLHYsdSkpKX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4uL2NvbG9yYmFyL2RlZmF1bHRzIjoxMDUsIi4uL2NvbG9yYmFyL2hhc19jb2xvcmJhciI6MTA3LCIuL3NjYWxlcyI6MTE3LCJmYXN0LWlzbnVtZXJpYyI6MTd9XSwxMTM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgidGlueWNvbG9yMiIpLGk9ZSgiZmFzdC1pc251bWVyaWMiKSxvPWUoIi4uLy4uL2xpYiIpLGw9ZSgiLi4vY29sb3IiKSxzPWUoIi4vc2NhbGVzIikuaXNWYWxpZDt2YXIgYz1bInNob3dzY2FsZSIsImF1dG9jb2xvcnNjYWxlIiwiY29sb3JzY2FsZSIsInJldmVyc2VzY2FsZSIsImNvbG9yYmFyIl0sdT1bIm1pbiIsIm1heCIsIm1pZCIsImF1dG8iXTtmdW5jdGlvbiBkKGUpe3ZhciB0LHIsbixhPWUuX2NvbG9yQXgsaT1hfHxlLG89e307Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKylvW249Y1tyXV09aVtuXTtpZihhKWZvcih0PSJjIixyPTA7cjx1Lmxlbmd0aDtyKyspb1tuPXVbcl1dPWlbImMiK25dO2Vsc2V7dmFyIGw7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKykoKGw9ImMiKyhuPXVbcl0pKWluIGl8fChsPSJ6IituKWluIGkpJiYob1tuXT1pW2xdKTt0PWwuY2hhckF0KDApfXJldHVybiBvLl9zeW5jPWZ1bmN0aW9uKGUscil7dmFyIG49LTEhPT11LmluZGV4T2YoZSk/dCtlOmU7aVtuXT1pWyJfIituXT1yfSxvfWZ1bmN0aW9uIGYoZSl7Zm9yKHZhciB0PWQoZSkscj10Lm1pbixuPXQubWF4LGE9dC5yZXZlcnNlc2NhbGU/cCh0LmNvbG9yc2NhbGUpOnQuY29sb3JzY2FsZSxpPWEubGVuZ3RoLG89bmV3IEFycmF5KGkpLGw9bmV3IEFycmF5KGkpLHM9MDtzPGk7cysrKXt2YXIgYz1hW3NdO29bc109citjWzBdKihuLXIpLGxbc109Y1sxXX1yZXR1cm57ZG9tYWluOm8scmFuZ2U6bH19ZnVuY3Rpb24gcChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1uZXcgQXJyYXkodCksbj10LTEsYT0wO24+PTA7bi0tLGErKyl7dmFyIGk9ZVtuXTtyW2FdPVsxLWlbMF0saVsxXV19cmV0dXJuIHJ9ZnVuY3Rpb24gaChlLHQpe3Q9dHx8e307Zm9yKHZhciByPWUuZG9tYWluLG89ZS5yYW5nZSxzPW8ubGVuZ3RoLGM9bmV3IEFycmF5KHMpLHU9MDt1PHM7dSsrKXt2YXIgZD1hKG9bdV0pLnRvUmdiKCk7Y1t1XT1bZC5yLGQuZyxkLmIsZC5hXX12YXIgZixwPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKHIpLnJhbmdlKGMpLmNsYW1wKCEwKSxoPXQubm9OdW1lcmljQ2hlY2ssbT10LnJldHVybkFycmF5O3JldHVybihmPWgmJm0/cDpoP2Z1bmN0aW9uKGUpe3JldHVybiBnKHAoZSkpfTptP2Z1bmN0aW9uKGUpe3JldHVybiBpKGUpP3AoZSk6YShlKS5pc1ZhbGlkKCk/ZTpsLmRlZmF1bHRMaW5lfTpmdW5jdGlvbihlKXtyZXR1cm4gaShlKT9nKHAoZSkpOmEoZSkuaXNWYWxpZCgpP2U6bC5kZWZhdWx0TGluZX0pLmRvbWFpbj1wLmRvbWFpbixmLnJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGZ9ZnVuY3Rpb24gZyhlKXt2YXIgdD17cjplWzBdLGc6ZVsxXSxiOmVbMl0sYTplWzNdfTtyZXR1cm4gYSh0KS50b1JnYlN0cmluZygpfXQuZXhwb3J0cz17aGFzQ29sb3JzY2FsZTpmdW5jdGlvbihlLHQscil7dmFyIG49dD9vLm5lc3RlZFByb3BlcnR5KGUsdCkuZ2V0KCl8fHt9OmUsYT1uW3J8fCJjb2xvciJdLGw9ITE7aWYoby5pc0FycmF5T3JUeXBlZEFycmF5KGEpKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGkoYVtjXSkpe2w9ITA7YnJlYWt9cmV0dXJuIG8uaXNQbGFpbk9iamVjdChuKSYmKGx8fCEwPT09bi5zaG93c2NhbGV8fGkobi5jbWluKSYmaShuLmNtYXgpfHxzKG4uY29sb3JzY2FsZSl8fG8uaXNQbGFpbk9iamVjdChuLmNvbG9yYmFyKSl9LGV4dHJhY3RPcHRzOmQsZXh0cmFjdFNjYWxlOmYsZmxpcFNjYWxlOnAsbWFrZUNvbG9yU2NhbGVGdW5jOmgsbWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGgoZihlKSx0KX19fSx7Ii4uLy4uL2xpYiI6MjMyLCIuLi9jb2xvciI6MTAyLCIuL3NjYWxlcyI6MTE3LCJAcGxvdGx5L2QzIjoxMSwiZmFzdC1pc251bWVyaWMiOjE3LHRpbnljb2xvcjI6Njd9XSwxMTQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9zY2FsZXMiKSxhPWUoIi4vaGVscGVycyIpO3QuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJjb2xvcnNjYWxlIixhdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6ZSgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOmUoIi4vbGF5b3V0X2RlZmF1bHRzIiksaGFuZGxlRGVmYXVsdHM6ZSgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czplKCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY2FsYzplKCIuL2NhbGMiKSxzY2FsZXM6bi5zY2FsZXMsZGVmYXVsdFNjYWxlOm4uZGVmYXVsdFNjYWxlLGdldFNjYWxlOm4uZ2V0LGlzVmFsaWRTY2FsZTpuLmlzVmFsaWQsaGFzQ29sb3JzY2FsZTphLmhhc0NvbG9yc2NhbGUsZXh0cmFjdE9wdHM6YS5leHRyYWN0T3B0cyxleHRyYWN0U2NhbGU6YS5leHRyYWN0U2NhbGUsZmxpcFNjYWxlOmEuZmxpcFNjYWxlLG1ha2VDb2xvclNjYWxlRnVuYzphLm1ha2VDb2xvclNjYWxlRnVuYyxtYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2U6YS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2V9fSx7Ii4vYXR0cmlidXRlcyI6MTA5LCIuL2NhbGMiOjExMCwiLi9jcm9zc190cmFjZV9kZWZhdWx0cyI6MTExLCIuL2RlZmF1bHRzIjoxMTIsIi4vaGVscGVycyI6MTEzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMTUsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMTYsIi4vc2NhbGVzIjoxMTd9XSwxMTU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYT1lKCIuL2F0dHJpYnV0ZXMiKSxpPWUoIi4vc2NhbGVzIikuc2NhbGVzO3QuZXhwb3J0cz17ZWRpdFR5cGU6ImNhbGMiLGNvbG9yc2NhbGU6e2VkaXRUeXBlOiJjYWxjIixzZXF1ZW50aWFsOnt2YWxUeXBlOiJjb2xvcnNjYWxlIixkZmx0OmkuUmVkcyxlZGl0VHlwZToiY2FsYyJ9LHNlcXVlbnRpYWxtaW51czp7dmFsVHlwZToiY29sb3JzY2FsZSIsZGZsdDppLkJsdWVzLGVkaXRUeXBlOiJjYWxjIn0sZGl2ZXJnaW5nOnt2YWxUeXBlOiJjb2xvcnNjYWxlIixkZmx0OmkuUmRCdSxlZGl0VHlwZToiY2FsYyJ9fSxjb2xvcmF4aXM6bih7X2lzU3VicGxvdE9iajohMCxlZGl0VHlwZToiY2FsYyJ9LGEoIiIse2NvbG9yQXR0cjoiY29ycmVzcG9uZGluZyB0cmFjZSBjb2xvciBhcnJheShzKSIsbm9Db2xvckF4aXM6ITAsc2hvd1NjYWxlRGZsdDohMH0pKX19LHsiLi4vLi4vbGliL2V4dGVuZCI6MjI2LCIuL2F0dHJpYnV0ZXMiOjEwOSwiLi9zY2FsZXMiOjExN31dLDExNjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxpPWUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPWUoIi4vZGVmYXVsdHMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKGUsdCxpLHIsYSl9cigiY29sb3JzY2FsZS5zZXF1ZW50aWFsIikscigiY29sb3JzY2FsZS5zZXF1ZW50aWFsbWludXMiKSxyKCJjb2xvcnNjYWxlLmRpdmVyZ2luZyIpO3ZhciBsLHMsYz10Ll9jb2xvckF4ZXM7ZnVuY3Rpb24gdShlLHQpe3JldHVybiBuLmNvZXJjZShsLHMsaS5jb2xvcmF4aXMsZSx0KX1mb3IodmFyIGQgaW4gYyl7dmFyIGY9Y1tkXTtpZihmWzBdKWw9ZVtkXXx8e30sKHM9YS5uZXdDb250YWluZXIodCxkLCJjb2xvcmF4aXMiKSkuX25hbWU9ZCxvKGwscyx0LHUse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pO2Vsc2V7Zm9yKHZhciBwPTA7cDxmWzJdLmxlbmd0aDtwKyspZlsyXVtwXSgpO2RlbGV0ZSB0Ll9jb2xvckF4ZXNbZF19fX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjI2OCwiLi9kZWZhdWx0cyI6MTEyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMTV9XSwxMTc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgidGlueWNvbG9yMiIpLGE9e0dyZXlzOltbMCwicmdiKDAsMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLFlsR25CdTpbWzAsInJnYig4LDI5LDg4KSJdLFsuMTI1LCJyZ2IoMzcsNTIsMTQ4KSJdLFsuMjUsInJnYigzNCw5NCwxNjgpIl0sWy4zNzUsInJnYigyOSwxNDUsMTkyKSJdLFsuNSwicmdiKDY1LDE4MiwxOTYpIl0sWy42MjUsInJnYigxMjcsMjA1LDE4NykiXSxbLjc1LCJyZ2IoMTk5LDIzMywxODApIl0sWy44NzUsInJnYigyMzcsMjQ4LDIxNykiXSxbMSwicmdiKDI1NSwyNTUsMjE3KSJdXSxHcmVlbnM6W1swLCJyZ2IoMCw2OCwyNykiXSxbLjEyNSwicmdiKDAsMTA5LDQ0KSJdLFsuMjUsInJnYigzNSwxMzksNjkpIl0sWy4zNzUsInJnYig2NSwxNzEsOTMpIl0sWy41LCJyZ2IoMTE2LDE5NiwxMTgpIl0sWy42MjUsInJnYigxNjEsMjE3LDE1NSkiXSxbLjc1LCJyZ2IoMTk5LDIzMywxOTIpIl0sWy44NzUsInJnYigyMjksMjQ1LDIyNCkiXSxbMSwicmdiKDI0NywyNTIsMjQ1KSJdXSxZbE9yUmQ6W1swLCJyZ2IoMTI4LDAsMzgpIl0sWy4xMjUsInJnYigxODksMCwzOCkiXSxbLjI1LCJyZ2IoMjI3LDI2LDI4KSJdLFsuMzc1LCJyZ2IoMjUyLDc4LDQyKSJdLFsuNSwicmdiKDI1MywxNDEsNjApIl0sWy42MjUsInJnYigyNTQsMTc4LDc2KSJdLFsuNzUsInJnYigyNTQsMjE3LDExOCkiXSxbLjg3NSwicmdiKDI1NSwyMzcsMTYwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyMDQpIl1dLEJsdWVyZWQ6W1swLCJyZ2IoMCwwLDI1NSkiXSxbMSwicmdiKDI1NSwwLDApIl1dLFJkQnU6W1swLCJyZ2IoNSwxMCwxNzIpIl0sWy4zNSwicmdiKDEwNiwxMzcsMjQ3KSJdLFsuNSwicmdiKDE5MCwxOTAsMTkwKSJdLFsuNiwicmdiKDIyMCwxNzAsMTMyKSJdLFsuNywicmdiKDIzMCwxNDUsOTApIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLFJlZHM6W1swLCJyZ2IoMjIwLDIyMCwyMjApIl0sWy4yLCJyZ2IoMjQ1LDE5NSwxNTcpIl0sWy40LCJyZ2IoMjQ1LDE2MCwxMDUpIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLEJsdWVzOltbMCwicmdiKDUsMTAsMTcyKSJdLFsuMzUsInJnYig0MCw2MCwxOTApIl0sWy41LCJyZ2IoNzAsMTAwLDI0NSkiXSxbLjYsInJnYig5MCwxMjAsMjQ1KSJdLFsuNywicmdiKDEwNiwxMzcsMjQ3KSJdLFsxLCJyZ2IoMjIwLDIyMCwyMjApIl1dLFBpY25pYzpbWzAsInJnYigwLDAsMjU1KSJdLFsuMSwicmdiKDUxLDE1MywyNTUpIl0sWy4yLCJyZ2IoMTAyLDIwNCwyNTUpIl0sWy4zLCJyZ2IoMTUzLDIwNCwyNTUpIl0sWy40LCJyZ2IoMjA0LDIwNCwyNTUpIl0sWy41LCJyZ2IoMjU1LDI1NSwyNTUpIl0sWy42LCJyZ2IoMjU1LDIwNCwyNTUpIl0sWy43LCJyZ2IoMjU1LDE1MywyNTUpIl0sWy44LCJyZ2IoMjU1LDEwMiwyMDQpIl0sWy45LCJyZ2IoMjU1LDEwMiwxMDIpIl0sWzEsInJnYigyNTUsMCwwKSJdXSxSYWluYm93OltbMCwicmdiKDE1MCwwLDkwKSJdLFsuMTI1LCJyZ2IoMCwwLDIwMCkiXSxbLjI1LCJyZ2IoMCwyNSwyNTUpIl0sWy4zNzUsInJnYigwLDE1MiwyNTUpIl0sWy41LCJyZ2IoNDQsMjU1LDE1MCkiXSxbLjYyNSwicmdiKDE1MSwyNTUsMCkiXSxbLjc1LCJyZ2IoMjU1LDIzNCwwKSJdLFsuODc1LCJyZ2IoMjU1LDExMSwwKSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUG9ydGxhbmQ6W1swLCJyZ2IoMTIsNTEsMTMxKSJdLFsuMjUsInJnYigxMCwxMzYsMTg2KSJdLFsuNSwicmdiKDI0MiwyMTEsNTYpIl0sWy43NSwicmdiKDI0MiwxNDMsNTYpIl0sWzEsInJnYigyMTcsMzAsMzApIl1dLEpldDpbWzAsInJnYigwLDAsMTMxKSJdLFsuMTI1LCJyZ2IoMCw2MCwxNzApIl0sWy4zNzUsInJnYig1LDI1NSwyNTUpIl0sWy42MjUsInJnYigyNTUsMjU1LDApIl0sWy44NzUsInJnYigyNTAsMCwwKSJdLFsxLCJyZ2IoMTI4LDAsMCkiXV0sSG90OltbMCwicmdiKDAsMCwwKSJdLFsuMywicmdiKDIzMCwwLDApIl0sWy42LCJyZ2IoMjU1LDIxMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLEJsYWNrYm9keTpbWzAsInJnYigwLDAsMCkiXSxbLjIsInJnYigyMzAsMCwwKSJdLFsuNCwicmdiKDIzMCwyMTAsMCkiXSxbLjcsInJnYigyNTUsMjU1LDI1NSkiXSxbMSwicmdiKDE2MCwyMDAsMjU1KSJdXSxFYXJ0aDpbWzAsInJnYigwLDAsMTMwKSJdLFsuMSwicmdiKDAsMTgwLDE4MCkiXSxbLjIsInJnYig0MCwyMTAsNDApIl0sWy40LCJyZ2IoMjMwLDIzMCw1MCkiXSxbLjYsInJnYigxMjAsNzAsMjApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sRWxlY3RyaWM6W1swLCJyZ2IoMCwwLDApIl0sWy4xNSwicmdiKDMwLDAsMTAwKSJdLFsuNCwicmdiKDEyMCwwLDEwMCkiXSxbLjYsInJnYigxNjAsOTAsMCkiXSxbLjgsInJnYigyMzAsMjAwLDApIl0sWzEsInJnYigyNTUsMjUwLDIyMCkiXV0sVmlyaWRpczpbWzAsIiM0NDAxNTQiXSxbLjA2Mjc0NTA5ODAzOTIxNTY5LCIjNDgxODZhIl0sWy4xMjU0OTAxOTYwNzg0MzEzNywiIzQ3MmQ3YiJdLFsuMTg4MjM1Mjk0MTE3NjQ3MDYsIiM0MjQwODYiXSxbLjI1MDk4MDM5MjE1Njg2Mjc0LCIjM2I1MjhiIl0sWy4zMTM3MjU0OTAxOTYwNzg0LCIjMzM2MzhkIl0sWy4zNzY0NzA1ODgyMzUyOTQxLCIjMmM3MjhlIl0sWy40MzkyMTU2ODYyNzQ1MDk4LCIjMjY4MjhlIl0sWy41MDE5NjA3ODQzMTM3MjU1LCIjMjE5MThjIl0sWy41NjQ3MDU4ODIzNTI5NDEyLCIjMWZhMDg4Il0sWy42Mjc0NTA5ODAzOTIxNTY5LCIjMjhhZTgwIl0sWy42OTAxOTYwNzg0MzEzNzI1LCIjM2ZiYzczIl0sWy43NTI5NDExNzY0NzA1ODgyLCIjNWVjOTYyIl0sWy44MTU2ODYyNzQ1MDk4MDM5LCIjODRkNDRiIl0sWy44Nzg0MzEzNzI1NDkwMTk2LCIjYWRkYzMwIl0sWy45NDExNzY0NzA1ODgyMzUzLCIjZDhlMjE5Il0sWzEsIiNmZGU3MjUiXV0sQ2l2aWRpczpbWzAsInJnYigwLDMyLDc2KSJdLFsuMDU4ODI0LCJyZ2IoMCw0MiwxMDIpIl0sWy4xMTc2NDcsInJnYigwLDUyLDExMCkiXSxbLjE3NjQ3MSwicmdiKDM5LDYzLDEwOCkiXSxbLjIzNTI5NCwicmdiKDYwLDc0LDEwNykiXSxbLjI5NDExOCwicmdiKDc2LDg1LDEwNykiXSxbLjM1Mjk0MSwicmdiKDkxLDk1LDEwOSkiXSxbLjQxMTc2NSwicmdiKDEwNCwxMDYsMTEyKSJdLFsuNDcwNTg4LCJyZ2IoMTE3LDExNywxMTcpIl0sWy41Mjk0MTIsInJnYigxMzEsMTI5LDEyMCkiXSxbLjU4ODIzNSwicmdiKDE0NiwxNDAsMTIwKSJdLFsuNjQ3MDU5LCJyZ2IoMTYxLDE1MiwxMTgpIl0sWy43MDU4ODIsInJnYigxNzYsMTY1LDExNCkiXSxbLjc2NDcwNiwicmdiKDE5MiwxNzcsMTA5KSJdLFsuODIzNTI5LCJyZ2IoMjA5LDE5MSwxMDIpIl0sWy44ODIzNTMsInJnYigyMjUsMjA0LDkyKSJdLFsuOTQxMTc2LCJyZ2IoMjQzLDIxOSw3OSkiXSxbMSwicmdiKDI1NSwyMzMsNjkpIl1dfSxpPWEuUmRCdTtmdW5jdGlvbiBvKGUpe3ZhciB0PTA7aWYoIUFycmF5LmlzQXJyYXkoZSl8fGUubGVuZ3RoPDIpcmV0dXJuITE7aWYoIWVbMF18fCFlW2UubGVuZ3RoLTFdKXJldHVybiExO2lmKDAhPStlWzBdWzBdfHwxIT0rZVtlLmxlbmd0aC0xXVswXSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGE9ZVtyXTtpZigyIT09YS5sZW5ndGh8fCthWzBdPHR8fCFuKGFbMV0pLmlzVmFsaWQoKSlyZXR1cm4hMTt0PSthWzBdfXJldHVybiEwfXQuZXhwb3J0cz17c2NhbGVzOmEsZGVmYXVsdFNjYWxlOmksZ2V0OmZ1bmN0aW9uKGUsdCl7aWYodHx8KHQ9aSksIWUpcmV0dXJuIHQ7ZnVuY3Rpb24gcigpe3RyeXtlPWFbZV18fEpTT04ucGFyc2UoZSl9Y2F0Y2gocil7ZT10fX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihyKCksInN0cmluZyI9PXR5cGVvZiBlJiZyKCkpLG8oZSk/ZTp0fSxpc1ZhbGlkOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1hW2VdfHxvKGUpfX19LHt0aW55Y29sb3IyOjY3fV0sMTE4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixuLGEpe3ZhciBpPShlLXIpLyhuLXIpLG89aSt0LyhuLXIpLGw9KGkrbykvMjtyZXR1cm4ibGVmdCI9PT1hfHwiYm90dG9tIj09PWE/aToiY2VudGVyIj09PWF8fCJtaWRkbGUiPT09YT9sOiJyaWdodCI9PT1hfHwidG9wIj09PWE/bzppPDIvMy1sP2k6bz40LzMtbD9vOmx9fSx7fV0sMTE5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9W1sic3ctcmVzaXplIiwicy1yZXNpemUiLCJzZS1yZXNpemUiXSxbInctcmVzaXplIiwibW92ZSIsImUtcmVzaXplIl0sWyJudy1yZXNpemUiLCJuLXJlc2l6ZSIsIm5lLXJlc2l6ZSJdXTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsaSl7cmV0dXJuIGU9ImxlZnQiPT09cj8wOiJjZW50ZXIiPT09cj8xOiJyaWdodCI9PT1yPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKmUpLDAsMiksdD0iYm90dG9tIj09PWk/MDoibWlkZGxlIj09PWk/MToidG9wIj09PWk/MjpuLmNvbnN0cmFpbihNYXRoLmZsb29yKDMqdCksMCwyKSxhW3RdW2VdfX0seyIuLi8uLi9saWIiOjIzMn1dLDEyMDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyLnNlbGVjdE1vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuImxhc3NvIj09PWV8fCJzZWxlY3QiPT09ZX0sci5kcmF3TW9kZT1mdW5jdGlvbihlKXtyZXR1cm4iZHJhd2Nsb3NlZHBhdGgiPT09ZXx8ImRyYXdvcGVucGF0aCI9PT1lfHwiZHJhd2xpbmUiPT09ZXx8ImRyYXdyZWN0Ij09PWV8fCJkcmF3Y2lyY2xlIj09PWV9LHIub3Blbk1vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuImRyYXdsaW5lIj09PWV8fCJkcmF3b3BlbnBhdGgiPT09ZX0sci5yZWN0TW9kZT1mdW5jdGlvbihlKXtyZXR1cm4ic2VsZWN0Ij09PWV8fCJkcmF3bGluZSI9PT1lfHwiZHJhd3JlY3QiPT09ZXx8ImRyYXdjaXJjbGUiPT09ZX0sci5mcmVlTW9kZT1mdW5jdGlvbihlKXtyZXR1cm4ibGFzc28iPT09ZXx8ImRyYXdjbG9zZWRwYXRoIj09PWV8fCJkcmF3b3BlbnBhdGgiPT09ZX0sci5zZWxlY3RpbmdPckRyYXdpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuZnJlZU1vZGUoZSl8fHIucmVjdE1vZGUoZSl9fSx7fV0sMTIxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGE9ZSgiaGFzLWhvdmVyIiksaT1lKCJoYXMtcGFzc2l2ZS1ldmVudHMiKSxvPWUoIi4uLy4uL2xpYiIpLnJlbW92ZUVsZW1lbnQsbD1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikscz10LmV4cG9ydHM9e307cy5hbGlnbj1lKCIuL2FsaWduIikscy5nZXRDdXJzb3I9ZSgiLi9jdXJzb3IiKTt2YXIgYz1lKCIuL3VuaG92ZXIiKTtmdW5jdGlvbiB1KCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS5jbGFzc05hbWU9ImRyYWdjb3ZlciI7dmFyIHQ9ZS5zdHlsZTtyZXR1cm4gdC5wb3NpdGlvbj0iZml4ZWQiLHQubGVmdD0wLHQucmlnaHQ9MCx0LnRvcD0wLHQuYm90dG9tPTAsdC56SW5kZXg9OTk5OTk5OTk5LHQuYmFja2dyb3VuZD0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSxlfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIG4oZS5jaGFuZ2VkVG91Y2hlcz9lLmNoYW5nZWRUb3VjaGVzWzBdOmUsZG9jdW1lbnQuYm9keSl9cy51bmhvdmVyPWMud3JhcHBlZCxzLnVuaG92ZXJSYXc9Yy5yYXcscy5pbml0PWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixjLGYscCxoLGcsbT1lLmdkLHY9MSx5PW0uX2NvbnRleHQuZG91YmxlQ2xpY2tEZWxheSx4PWUuZWxlbWVudDttLl9tb3VzZURvd25UaW1lfHwobS5fbW91c2VEb3duVGltZT0wKSx4LnN0eWxlLnBvaW50ZXJFdmVudHM9ImFsbCIseC5vbm1vdXNlZG93bj1fLGk/KHguX29udG91Y2hzdGFydCYmeC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix4Ll9vbnRvdWNoc3RhcnQpLHguX29udG91Y2hzdGFydD1fLHguYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsXyx7cGFzc2l2ZTohMX0pKTp4Lm9udG91Y2hzdGFydD1fO3ZhciBiPWUuY2xhbXBGbnx8ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBNYXRoLmFicyhlKTxyJiYoZT0wKSxNYXRoLmFicyh0KTxyJiYodD0wKSxbZSx0XX07ZnVuY3Rpb24gXyhpKXttLl9kcmFnZ2VkPSExLG0uX2RyYWdnaW5nPSEwO3ZhciBvPWQoaSk7dD1vWzBdLHI9b1sxXSxoPWkudGFyZ2V0LHA9aSxnPTI9PT1pLmJ1dHRvbnN8fGkuY3RybEtleSx2b2lkIDA9PT1pLmNsaWVudFgmJnZvaWQgMD09PWkuY2xpZW50WSYmKGkuY2xpZW50WD10LGkuY2xpZW50WT1yKSwobj0obmV3IERhdGUpLmdldFRpbWUoKSktbS5fbW91c2VEb3duVGltZTx5P3YrPTE6KHY9MSxtLl9tb3VzZURvd25UaW1lPW4pLGUucHJlcEZuJiZlLnByZXBGbihpLHQsciksYSYmIWc/KGY9dSgpKS5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoeCkuY3Vyc29yOmF8fChmPWRvY3VtZW50LGM9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jdXJzb3IsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh4KS5jdXJzb3IpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLFQpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixUKSwhMSE9PWUuZHJhZ21vZGUmJihpLnByZXZlbnREZWZhdWx0KCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix3KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHcse3Bhc3NpdmU6ITF9KSl9ZnVuY3Rpb24gdyhuKXtuLnByZXZlbnREZWZhdWx0KCk7dmFyIGE9ZChuKSxpPWUubWluRHJhZ3x8bC5NSU5EUkFHLG89YihhWzBdLXQsYVsxXS1yLGkpLGM9b1swXSx1PW9bMV07KGN8fHUpJiYobS5fZHJhZ2dlZD0hMCxzLnVuaG92ZXIobSxuKSksbS5fZHJhZ2dlZCYmZS5tb3ZlRm4mJiFnJiYobS5fZHJhZ2RhdGE9e2VsZW1lbnQ6eCxkeDpjLGR5OnV9LGUubW92ZUZuKGMsdSkpfWZ1bmN0aW9uIFQodCl7aWYoZGVsZXRlIG0uX2RyYWdkYXRhLCExIT09ZS5kcmFnbW9kZSYmKHQucHJldmVudERlZmF1bHQoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHcpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdykpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLFQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixUKSxhP28oZik6YyYmKGYuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcj1jLGM9bnVsbCksbS5fZHJhZ2dpbmcpe2lmKG0uX2RyYWdnaW5nPSExLChuZXcgRGF0ZSkuZ2V0VGltZSgpLW0uX21vdXNlRG93blRpbWU+eSYmKHY9TWF0aC5tYXgodi0xLDEpKSxtLl9kcmFnZ2VkKWUuZG9uZUZuJiZlLmRvbmVGbigpO2Vsc2UgaWYoZS5jbGlja0ZuJiZlLmNsaWNrRm4odixwKSwhZyl7dmFyIHI7dHJ5e3I9bmV3IE1vdXNlRXZlbnQoImNsaWNrIix0KX1jYXRjaChlKXt2YXIgbj1kKHQpOyhyPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpKS5pbml0TW91c2VFdmVudCgiY2xpY2siLHQuYnViYmxlcyx0LmNhbmNlbGFibGUsdC52aWV3LHQuZGV0YWlsLHQuc2NyZWVuWCx0LnNjcmVlblksblswXSxuWzFdLHQuY3RybEtleSx0LmFsdEtleSx0LnNoaWZ0S2V5LHQubWV0YUtleSx0LmJ1dHRvbix0LnJlbGF0ZWRUYXJnZXQpfWguZGlzcGF0Y2hFdmVudChyKX1tLl9kcmFnZ2luZz0hMSxtLl9kcmFnZ2VkPSExfWVsc2UgbS5fZHJhZ2dlZD0hMX19LHMuY292ZXJTbGlwPXV9LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjI4NiwiLi9hbGlnbiI6MTE4LCIuL2N1cnNvciI6MTE5LCIuL3VuaG92ZXIiOjEyMiwiaGFzLWhvdmVyIjo0OCwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0OSwibW91c2UtZXZlbnQtb2Zmc2V0Ijo1M31dLDEyMjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIvZXZlbnRzIiksYT1lKCIuLi8uLi9saWIvdGhyb3R0bGUiKSxpPWUoIi4uLy4uL2xpYi9kb20iKS5nZXRHcmFwaERpdixvPWUoIi4uL2Z4L2NvbnN0YW50cyIpLGw9dC5leHBvcnRzPXt9O2wud3JhcHBlZD1mdW5jdGlvbihlLHQscil7KGU9aShlKSkuX2Z1bGxMYXlvdXQmJmEuY2xlYXIoZS5fZnVsbExheW91dC5fdWlkK28uSE9WRVJJRCksbC5yYXcoZSx0LHIpfSxsLnJhdz1mdW5jdGlvbihlLHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsYT1lLl9ob3ZlcmRhdGE7dHx8KHQ9e30pLHQudGFyZ2V0JiYhZS5fZHJhZ2dlZCYmITE9PT1uLnRyaWdnZXJIYW5kbGVyKGUsInBsb3RseV9iZWZvcmVob3ZlciIsdCl8fChyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksci5faG92ZXJsYXllci5zZWxlY3RBbGwoImNpcmNsZSIpLnJlbW92ZSgpLGUuX2hvdmVyZGF0YT12b2lkIDAsdC50YXJnZXQmJmEmJmUuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDp0LHBvaW50czphfSkpfX0seyIuLi8uLi9saWIvZG9tIjoyMjQsIi4uLy4uL2xpYi9ldmVudHMiOjIyNSwiLi4vLi4vbGliL3Rocm90dGxlIjoyNTYsIi4uL2Z4L2NvbnN0YW50cyI6MTM2fV0sMTIzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IuZGFzaD17dmFsVHlwZToic3RyaW5nIix2YWx1ZXM6WyJzb2xpZCIsImRvdCIsImRhc2giLCJsb25nZGFzaCIsImRhc2hkb3QiLCJsb25nZGFzaGRvdCJdLGRmbHQ6InNvbGlkIixlZGl0VHlwZToic3R5bGUifSxyLnBhdHRlcm49e3NoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyIiLCIvIiwiXFwiLCJ4IiwiLSIsInwiLCIrIiwiLiJdLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxmaWxsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmVwbGFjZSIsIm92ZXJsYXkiXSxkZmx0OiJyZXBsYWNlIixlZGl0VHlwZToic3R5bGUifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxmZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxmZ29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIixtaW46MCxtYXg6MX0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxzb2xpZGl0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn19LHt9XSwxMjQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgiLi4vLi4vbGliIiksaT1hLm51bWJlckZvcm1hdCxvPWUoImZhc3QtaXNudW1lcmljIiksbD1lKCJ0aW55Y29sb3IyIikscz1lKCIuLi8uLi9yZWdpc3RyeSIpLGM9ZSgiLi4vY29sb3IiKSx1PWUoIi4uL2NvbG9yc2NhbGUiKSxkPWEuc3RyVHJhbnNsYXRlLGY9ZSgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscD1lKCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGg9ZSgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxnPWUoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxtPWUoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIiksdj1lKCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSx5PWUoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSx4PXQuZXhwb3J0cz17fTt4LmZvbnQ9ZnVuY3Rpb24oZSx0LHIsbil7YS5pc1BsYWluT2JqZWN0KHQpJiYobj10LmNvbG9yLHI9dC5zaXplLHQ9dC5mYW1pbHkpLHQmJmUuc3R5bGUoImZvbnQtZmFtaWx5Iix0KSxyKzEmJmUuc3R5bGUoImZvbnQtc2l6ZSIscisicHgiKSxuJiZlLmNhbGwoYy5maWxsLG4pfSx4LnNldFBvc2l0aW9uPWZ1bmN0aW9uKGUsdCxyKXtlLmF0dHIoIngiLHQpLmF0dHIoInkiLHIpfSx4LnNldFNpemU9ZnVuY3Rpb24oZSx0LHIpe2UuYXR0cigid2lkdGgiLHQpLmF0dHIoImhlaWdodCIscil9LHguc2V0UmVjdD1mdW5jdGlvbihlLHQscixuLGEpe2UuY2FsbCh4LnNldFBvc2l0aW9uLHQscikuY2FsbCh4LnNldFNpemUsbixhKX0seC50cmFuc2xhdGVQb2ludD1mdW5jdGlvbihlLHQscixuKXt2YXIgYT1yLmMycChlLngpLGk9bi5jMnAoZS55KTtyZXR1cm4hIShvKGEpJiZvKGkpJiZ0Lm5vZGUoKSkmJigidGV4dCI9PT10Lm5vZGUoKS5ub2RlTmFtZT90LmF0dHIoIngiLGEpLmF0dHIoInkiLGkpOnQuYXR0cigidHJhbnNmb3JtIixkKGEsaSkpLCEwKX0seC50cmFuc2xhdGVQb2ludHM9ZnVuY3Rpb24oZSx0LHIpe2UuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGE9bi5zZWxlY3QodGhpcyk7eC50cmFuc2xhdGVQb2ludChlLGEsdCxyKX0pKX0seC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQ9ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3QuYXR0cigiZGlzcGxheSIsci5pc1B0V2l0aGluUmFuZ2UoZSxhKSYmbi5pc1B0V2l0aGluUmFuZ2UoZSxpKT9udWxsOiJub25lIil9LHguaGlkZU91dHNpZGVSYW5nZVBvaW50cz1mdW5jdGlvbihlLHQpe2lmKHQuX2hhc0NsaXBPbkF4aXNGYWxzZSl7dmFyIHI9dC54YXhpcyxhPXQueWF4aXM7ZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgaT10WzBdLnRyYWNlLG89aS54Y2FsZW5kYXIsbD1pLnljYWxlbmRhcixjPXMudHJhY2VJcyhpLCJiYXItbGlrZSIpPyIuYmFydGV4dCI6Ii5wb2ludCwudGV4dHBvaW50IjtlLnNlbGVjdEFsbChjKS5lYWNoKChmdW5jdGlvbihlKXt4LmhpZGVPdXRzaWRlUmFuZ2VQb2ludChlLG4uc2VsZWN0KHRoaXMpLHIsYSxvLGwpfSkpfSkpfX0seC5jcmlzcFJvdW5kPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdCYmbyh0KT9lLl9jb250ZXh0LnN0YXRpY1Bsb3Q/dDp0PDE/MTpNYXRoLnJvdW5kKHQpOnJ8fDB9LHguc2luZ2xlTGluZVN0eWxlPWZ1bmN0aW9uKGUsdCxyLG4sYSl7dC5zdHlsZSgiZmlsbCIsIm5vbmUiKTt2YXIgaT0oKChlfHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89cnx8aS53aWR0aHx8MCxsPWF8fGkuZGFzaHx8IiI7Yy5zdHJva2UodCxufHxpLmNvbG9yKSx4LmRhc2hMaW5lKHQsbCxvKX0seC5saW5lR3JvdXBTdHlsZT1mdW5jdGlvbihlLHQscixhKXtlLnN0eWxlKCJmaWxsIiwibm9uZSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBpPSgoKGV8fFtdKVswXXx8e30pLnRyYWNlfHx7fSkubGluZXx8e30sbz10fHxpLndpZHRofHwwLGw9YXx8aS5kYXNofHwiIjtuLnNlbGVjdCh0aGlzKS5jYWxsKGMuc3Ryb2tlLHJ8fGkuY29sb3IpLmNhbGwoeC5kYXNoTGluZSxsLG8pfSkpfSx4LmRhc2hMaW5lPWZ1bmN0aW9uKGUsdCxyKXtyPStyfHwwLHQ9eC5kYXNoU3R5bGUodCxyKSxlLnN0eWxlKHsic3Ryb2tlLWRhc2hhcnJheSI6dCwic3Ryb2tlLXdpZHRoIjpyKyJweCJ9KX0seC5kYXNoU3R5bGU9ZnVuY3Rpb24oZSx0KXt0PSt0fHwxO3ZhciByPU1hdGgubWF4KHQsMyk7cmV0dXJuInNvbGlkIj09PWU/ZT0iIjoiZG90Ij09PWU/ZT1yKyJweCwiK3IrInB4IjoiZGFzaCI9PT1lP2U9MypyKyJweCwiKzMqcisicHgiOiJsb25nZGFzaCI9PT1lP2U9NSpyKyJweCwiKzUqcisicHgiOiJkYXNoZG90Ij09PWU/ZT0zKnIrInB4LCIrcisicHgsIityKyJweCwiK3IrInB4IjoibG9uZ2Rhc2hkb3QiPT09ZSYmKGU9NSpyKyJweCwiKzIqcisicHgsIityKyJweCwiKzIqcisicHgiKSxlfSx4LnNpbmdsZUZpbGxTdHlsZT1mdW5jdGlvbihlKXt2YXIgdD0oKChuLnNlbGVjdChlLm5vZGUoKSkuZGF0YSgpWzBdfHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmZpbGxjb2xvcjt0JiZlLmNhbGwoYy5maWxsLHQpfSx4LmZpbGxHcm91cFN0eWxlPWZ1bmN0aW9uKGUpe2Uuc3R5bGUoInN0cm9rZS13aWR0aCIsMCkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7ZVswXS50cmFjZSYmdC5jYWxsKGMuZmlsbCxlWzBdLnRyYWNlLmZpbGxjb2xvcil9KSl9O3ZhciBiPWUoIi4vc3ltYm9sX2RlZnMiKTt4LnN5bWJvbE5hbWVzPVtdLHguc3ltYm9sRnVuY3M9W10seC5zeW1ib2xOZWVkTGluZXM9e30seC5zeW1ib2xOb0RvdD17fSx4LnN5bWJvbE5vRmlsbD17fSx4LnN5bWJvbExpc3Q9W10sT2JqZWN0LmtleXMoYikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9YltlXSxyPXQubjt4LnN5bWJvbExpc3QucHVzaChyLFN0cmluZyhyKSxlLHIrMTAwLFN0cmluZyhyKzEwMCksZSsiLW9wZW4iKSx4LnN5bWJvbE5hbWVzW3JdPWUseC5zeW1ib2xGdW5jc1tyXT10LmYsdC5uZWVkTGluZSYmKHguc3ltYm9sTmVlZExpbmVzW3JdPSEwKSx0Lm5vRG90P3guc3ltYm9sTm9Eb3Rbcl09ITA6eC5zeW1ib2xMaXN0LnB1c2gocisyMDAsU3RyaW5nKHIrMjAwKSxlKyItZG90IixyKzMwMCxTdHJpbmcociszMDApLGUrIi1vcGVuLWRvdCIpLHQubm9GaWxsJiYoeC5zeW1ib2xOb0ZpbGxbcl09ITApfSkpO3ZhciBfPXguc3ltYm9sTmFtZXMubGVuZ3RoO2Z1bmN0aW9uIHcoZSx0KXt2YXIgcj1lJTEwMDtyZXR1cm4geC5zeW1ib2xGdW5jc1tyXSh0KSsoZT49MjAwPyJNMCwwLjVMMC41LDBMMCwtMC41TC0wLjUsMFoiOiIiKX14LnN5bWJvbE51bWJlcj1mdW5jdGlvbihlKXtpZihvKGUpKWU9K2U7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciB0PTA7ZS5pbmRleE9mKCItb3BlbiIpPjAmJih0PTEwMCxlPWUucmVwbGFjZSgiLW9wZW4iLCIiKSksZS5pbmRleE9mKCItZG90Iik+MCYmKHQrPTIwMCxlPWUucmVwbGFjZSgiLWRvdCIsIiIpKSwoZT14LnN5bWJvbE5hbWVzLmluZGV4T2YoZSkpPj0wJiYoZSs9dCl9cmV0dXJuIGUlMTAwPj1ffHxlPj00MDA/MDpNYXRoLmZsb29yKE1hdGgubWF4KGUsMCkpfTt2YXIgVD17eDE6MSx4MjowLHkxOjAseTI6MH0sTT17eDE6MCx4MjowLHkxOjEseTI6MH0saz1pKCJ+ZiIpLEE9e3JhZGlhbDp7bm9kZToicmFkaWFsR3JhZGllbnQifSxyYWRpYWxyZXZlcnNlZDp7bm9kZToicmFkaWFsR3JhZGllbnQiLHJldmVyc2VkOiEwfSxob3Jpem9udGFsOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6VH0saG9yaXpvbnRhbHJldmVyc2VkOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6VCxyZXZlcnNlZDohMH0sdmVydGljYWw6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczpNfSx2ZXJ0aWNhbHJldmVyc2VkOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6TSxyZXZlcnNlZDohMH19O3guZ3JhZGllbnQ9ZnVuY3Rpb24oZSx0LHIsaSxvLHMpe2Zvcih2YXIgdT1vLmxlbmd0aCxkPUFbaV0sZj1uZXcgQXJyYXkodSkscD0wO3A8dTtwKyspZC5yZXZlcnNlZD9mW3UtMS1wXT1baygxMDAqKDEtb1twXVswXSkpLG9bcF1bMV1dOmZbcF09W2soMTAwKm9bcF1bMF0pLG9bcF1bMV1dO3ZhciBoPXQuX2Z1bGxMYXlvdXQsZz0iZyIraC5fdWlkKyItIityLG09aC5fZGVmcy5zZWxlY3QoIi5ncmFkaWVudHMiKS5zZWxlY3RBbGwoIiMiK2cpLmRhdGEoW2krZi5qb2luKCI7IildLGEuaWRlbnRpdHkpO20uZXhpdCgpLnJlbW92ZSgpLG0uZW50ZXIoKS5hcHBlbmQoZC5ub2RlKS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2QuYXR0cnMmJmUuYXR0cihkLmF0dHJzKSxlLmF0dHIoImlkIixnKTt2YXIgdD1lLnNlbGVjdEFsbCgic3RvcCIpLmRhdGEoZik7dC5leGl0KCkucmVtb3ZlKCksdC5lbnRlcigpLmFwcGVuZCgic3RvcCIpLHQuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9bChlWzFdKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtvZmZzZXQ6ZVswXSsiJSIsInN0b3AtY29sb3IiOmMudGlueVJHQih0KSwic3RvcC1vcGFjaXR5Ijp0LmdldEFscGhhKCl9KX0pKX0pKSxlLnN0eWxlKHMseihnLHQpKS5zdHlsZShzKyItb3BhY2l0eSIsbnVsbCk7dmFyIHY9ZnVuY3Rpb24oZSl7cmV0dXJuIi4iK2UuYXR0cigiY2xhc3MiKS5yZXBsYWNlKC9ccy9nLCIuIil9LHk9dihuLnNlbGVjdChlLm5vZGUoKS5wYXJlbnROb2RlKSkrIj4iK3YoZSk7aC5fZ3JhZGllbnRVcmxRdWVyeVBhcnRzW3ldPTF9LHgucGF0dGVybj1mdW5jdGlvbihlLHQscixpLG8sbCxzLHUsZCxmLHAsaCl7dmFyIGc9ImxlZ2VuZCI9PT10O3UmJigib3ZlcmxheSI9PT1kPyhmPXUscD1jLmNvbnRyYXN0KGYpKTooZj12b2lkIDAscD11KSk7dmFyIG0sdix5LHgsYixfLHcsVCxNLGssQSxMPXIuX2Z1bGxMYXlvdXQsUz0icCIrTC5fdWlkKyItIitpLEQ9e307c3dpdGNoKG8pe2Nhc2UiLyI6bT1sKk1hdGguc3FydCgyKSx2PWwqTWF0aC5zcXJ0KDIpLF89InBhdGgiLEQ9e2Q6eT0iTS0iK20vNCsiLCIrdi80KyJsIittLzIrIiwtIit2LzIrIk0wLCIrdisiTCIrbSsiLDBNIittLzQqMysiLCIrdi80KjUrImwiK20vMisiLC0iK3YvMixvcGFjaXR5Omgsc3Ryb2tlOnAsInN0cm9rZS13aWR0aCI6KHg9cypsKSsicHgifTticmVhaztjYXNlIlxcIjptPWwqTWF0aC5zcXJ0KDIpLHY9bCpNYXRoLnNxcnQoMiksXz0icGF0aCIsRD17ZDp5PSJNIittLzQqMysiLC0iK3YvNCsibCIrbS8yKyIsIit2LzIrIk0wLDBMIittKyIsIit2KyJNLSIrbS80KyIsIit2LzQqMysibCIrbS8yKyIsIit2LzIsb3BhY2l0eTpoLHN0cm9rZTpwLCJzdHJva2Utd2lkdGgiOih4PXMqbCkrInB4In07YnJlYWs7Y2FzZSJ4IjptPWwqTWF0aC5zcXJ0KDIpLHY9bCpNYXRoLnNxcnQoMikseT0iTS0iK20vNCsiLCIrdi80KyJsIittLzIrIiwtIit2LzIrIk0wLCIrdisiTCIrbSsiLDBNIittLzQqMysiLCIrdi80KjUrImwiK20vMisiLC0iK3YvMisiTSIrbS80KjMrIiwtIit2LzQrImwiK20vMisiLCIrdi8yKyJNMCwwTCIrbSsiLCIrdisiTS0iK20vNCsiLCIrdi80KjMrImwiK20vMisiLCIrdi8yLHg9bC1sKk1hdGguc3FydCgxLXMpLF89InBhdGgiLEQ9e2Q6eSxvcGFjaXR5Omgsc3Ryb2tlOnAsInN0cm9rZS13aWR0aCI6eCsicHgifTticmVhaztjYXNlInwiOl89InBhdGgiLF89InBhdGgiLEQ9e2Q6eT0iTSIrKG09bCkvMisiLDBMIittLzIrIiwiKyh2PWwpLG9wYWNpdHk6aCxzdHJva2U6cCwic3Ryb2tlLXdpZHRoIjooeD1zKmwpKyJweCJ9O2JyZWFrO2Nhc2UiLSI6Xz0icGF0aCIsXz0icGF0aCIsRD17ZDp5PSJNMCwiKyh2PWwpLzIrIkwiKyhtPWwpKyIsIit2LzIsb3BhY2l0eTpoLHN0cm9rZTpwLCJzdHJva2Utd2lkdGgiOih4PXMqbCkrInB4In07YnJlYWs7Y2FzZSIrIjpfPSJwYXRoIix5PSJNIisobT1sKS8yKyIsMEwiK20vMisiLCIrKHY9bCkrIk0wLCIrdi8yKyJMIittKyIsIit2LzIseD1sLWwqTWF0aC5zcXJ0KDEtcyksXz0icGF0aCIsRD17ZDp5LG9wYWNpdHk6aCxzdHJva2U6cCwic3Ryb2tlLXdpZHRoIjp4KyJweCJ9O2JyZWFrO2Nhc2UiLiI6bT1sLHY9bCxzPE1hdGguUEkvND9iPU1hdGguc3FydChzKmwqbC9NYXRoLlBJKToodz1zLFQ9TWF0aC5QSS80LE09MSxrPWwvMixBPWwvTWF0aC5zcXJ0KDIpLGI9aysoQS1rKSoody1UKS8oTS1UKSksXz0iY2lyY2xlIixEPXtjeDptLzIsY3k6di8yLHI6YixvcGFjaXR5OmgsZmlsbDpwfX12YXIgQz1bb3x8Im5vU2giLGZ8fCJub0JnIixwfHwibm9GZyIsbCxzXS5qb2luKCI7IiksTz1MLl9kZWZzLnNlbGVjdCgiLnBhdHRlcm5zIikuc2VsZWN0QWxsKCIjIitTKS5kYXRhKFtDXSxhLmlkZW50aXR5KTtPLmV4aXQoKS5yZW1vdmUoKSxPLmVudGVyKCkuYXBwZW5kKCJwYXR0ZXJuIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKTtpZihlLmF0dHIoe2lkOlMsd2lkdGg6bSsicHgiLGhlaWdodDp2KyJweCIscGF0dGVyblVuaXRzOiJ1c2VyU3BhY2VPblVzZSIscGF0dGVyblRyYW5zZm9ybTpnPyJzY2FsZSgwLjgpIjoiIn0pLGYpe3ZhciB0PWUuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShbMF0pO3QuZXhpdCgpLnJlbW92ZSgpLHQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKHt3aWR0aDptKyJweCIsaGVpZ2h0OnYrInB4IixmaWxsOmZ9KX12YXIgcj1lLnNlbGVjdEFsbChfKS5kYXRhKFswXSk7ci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZChfKS5hdHRyKEQpfSkpLGUuc3R5bGUoImZpbGwiLHooUyxyKSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsbnVsbCksZS5jbGFzc2VkKCJwYXR0ZXJuX2ZpbGxlZCIsITApO3ZhciBQPSIuIituLnNlbGVjdChlLm5vZGUoKS5wYXJlbnROb2RlKS5hdHRyKCJjbGFzcyIpLnJlcGxhY2UoL1xzL2csIi4iKSsiPi5wYXR0ZXJuX2ZpbGxlZCI7TC5fcGF0dGVyblVybFF1ZXJ5UGFydHNbUF09MX0seC5pbml0R3JhZGllbnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQ7YS5lbnN1cmVTaW5nbGUodC5fZGVmcywiZyIsImdyYWRpZW50cyIpLnNlbGVjdEFsbCgibGluZWFyR3JhZGllbnQscmFkaWFsR3JhZGllbnQiKS5yZW1vdmUoKSx0Ll9ncmFkaWVudFVybFF1ZXJ5UGFydHM9e319LHguaW5pdFBhdHRlcm5zPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQ7YS5lbnN1cmVTaW5nbGUodC5fZGVmcywiZyIsInBhdHRlcm5zIikuc2VsZWN0QWxsKCJwYXR0ZXJuIikucmVtb3ZlKCksdC5fcGF0dGVyblVybFF1ZXJ5UGFydHM9e319LHguZ2V0UGF0dGVybkF0dHI9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlJiZhLmlzQXJyYXlPclR5cGVkQXJyYXkoZSk/dDxlLmxlbmd0aD9lW3RdOnI6ZX0seC5wb2ludFN0eWxlPWZ1bmN0aW9uKGUsdCxyKXtpZihlLnNpemUoKSl7dmFyIGE9eC5tYWtlUG9pbnRTdHlsZUZucyh0KTtlLmVhY2goKGZ1bmN0aW9uKGUpe3guc2luZ2xlUG9pbnRTdHlsZShlLG4uc2VsZWN0KHRoaXMpLHQsYSxyKX0pKX19LHguc2luZ2xlUG9pbnRTdHlsZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPXIubWFya2VyLGw9by5saW5lO2lmKHQuc3R5bGUoIm9wYWNpdHkiLG4uc2VsZWN0ZWRPcGFjaXR5Rm4/bi5zZWxlY3RlZE9wYWNpdHlGbihlKTp2b2lkIDA9PT1lLm1vP28ub3BhY2l0eTplLm1vKSxuLm1zMm1yYyl7dmFyIHM7cz0idmFyaW91cyI9PT1lLm1zfHwidmFyaW91cyI9PT1vLnNpemU/MzpuLm1zMm1yYyhlLm1zKSxlLm1yYz1zLG4uc2VsZWN0ZWRTaXplRm4mJihzPWUubXJjPW4uc2VsZWN0ZWRTaXplRm4oZSkpO3ZhciB1PXguc3ltYm9sTnVtYmVyKGUubXh8fG8uc3ltYm9sKXx8MDtlLm9tPXUlMjAwPj0xMDAsdC5hdHRyKCJkIix3KHUscykpfXZhciBkLGYscCxoPSExO2lmKGUuc28pcD1sLm91dGxpZXJ3aWR0aCxmPWwub3V0bGllcmNvbG9yLGQ9by5vdXRsaWVyY29sb3I7ZWxzZXt2YXIgZz0obHx8e30pLndpZHRoO3A9KGUubWx3KzF8fGcrMXx8KGUudHJhY2U/KGUudHJhY2UubWFya2VyLmxpbmV8fHt9KS53aWR0aDowKSsxKS0xfHwwLGY9Im1sYyJpbiBlP2UubWxjYz1uLmxpbmVTY2FsZShlLm1sYyk6YS5pc0FycmF5T3JUeXBlZEFycmF5KGwuY29sb3IpP2MuZGVmYXVsdExpbmU6bC5jb2xvcixhLmlzQXJyYXlPclR5cGVkQXJyYXkoby5jb2xvcikmJihkPWMuZGVmYXVsdExpbmUsaD0hMCksZD0ibWMiaW4gZT9lLm1jYz1uLm1hcmtlclNjYWxlKGUubWMpOm8uY29sb3J8fCJyZ2JhKDAsMCwwLDApIixuLnNlbGVjdGVkQ29sb3JGbiYmKGQ9bi5zZWxlY3RlZENvbG9yRm4oZSkpfWlmKGUub20pdC5jYWxsKGMuc3Ryb2tlLGQpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjoocHx8MSkrInB4IixmaWxsOiJub25lIn0pO2Vsc2V7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoZS5pc0JsYW5rPzA6cCkrInB4Iik7dmFyIG09by5ncmFkaWVudCx2PWUubWd0O3Y/aD0hMDp2PW0mJm0udHlwZSxhLmlzQXJyYXlPclR5cGVkQXJyYXkodikmJih2PXZbMF0sQVt2XXx8KHY9MCkpO3ZhciB5PW8ucGF0dGVybixiPXkmJnguZ2V0UGF0dGVybkF0dHIoeS5zaGFwZSxlLmksIiIpO2lmKHYmJiJub25lIiE9PXYpe3ZhciBfPWUubWdjO18/aD0hMDpfPW0uY29sb3I7dmFyIFQ9ci51aWQ7aCYmKFQrPSItIitlLmkpLHguZ3JhZGllbnQodCxpLFQsdixbWzAsX10sWzEsZF1dLCJmaWxsIil9ZWxzZSBpZihiKXt2YXIgTT14LmdldFBhdHRlcm5BdHRyKHkuYmdjb2xvcixlLmksbnVsbCksaz14LmdldFBhdHRlcm5BdHRyKHkuZmdjb2xvcixlLmksbnVsbCksTD15LmZnb3BhY2l0eSxTPXguZ2V0UGF0dGVybkF0dHIoeS5zaXplLGUuaSw4KSxEPXguZ2V0UGF0dGVybkF0dHIoeS5zb2xpZGl0eSxlLmksLjMpLEM9ZS5tY2N8fGEuaXNBcnJheU9yVHlwZWRBcnJheSh5LnNoYXBlKXx8YS5pc0FycmF5T3JUeXBlZEFycmF5KHkuYmdjb2xvcil8fGEuaXNBcnJheU9yVHlwZWRBcnJheSh5LnNpemUpfHxhLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5zb2xpZGl0eSksTz1yLnVpZDtDJiYoTys9Ii0iK2UuaSkseC5wYXR0ZXJuKHQsInBvaW50IixpLE8sYixTLEQsZS5tY2MseS5maWxsbW9kZSxNLGssTCl9ZWxzZSBjLmZpbGwodCxkKTtwJiZjLnN0cm9rZSh0LGYpfX0seC5tYWtlUG9pbnRTdHlsZUZucz1mdW5jdGlvbihlKXt2YXIgdD17fSxyPWUubWFya2VyO3JldHVybiB0Lm1hcmtlclNjYWxlPXgudHJ5Q29sb3JzY2FsZShyLCIiKSx0LmxpbmVTY2FsZT14LnRyeUNvbG9yc2NhbGUociwibGluZSIpLHMudHJhY2VJcyhlLCJzeW1ib2xzIikmJih0Lm1zMm1yYz1tLmlzQnViYmxlKGUpP3YoZSk6ZnVuY3Rpb24oKXtyZXR1cm4oci5zaXplfHw2KS8yfSksZS5zZWxlY3RlZHBvaW50cyYmYS5leHRlbmRGbGF0KHQseC5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKGUpKSx0fSx4Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9e30scj1lLnNlbGVjdGVkfHx7fSxuPWUudW5zZWxlY3RlZHx8e30saT1lLm1hcmtlcnx8e30sbz1yLm1hcmtlcnx8e30sbD1uLm1hcmtlcnx8e30sYz1pLm9wYWNpdHksdT1vLm9wYWNpdHksZD1sLm9wYWNpdHksZj12b2lkIDAhPT11LHA9dm9pZCAwIT09ZDsoYS5pc0FycmF5T3JUeXBlZEFycmF5KGMpfHxmfHxwKSYmKHQuc2VsZWN0ZWRPcGFjaXR5Rm49ZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwPT09ZS5tbz9pLm9wYWNpdHk6ZS5tbztyZXR1cm4gZS5zZWxlY3RlZD9mP3U6dDpwP2Q6Zyp0fSk7dmFyIGg9aS5jb2xvcixtPW8uY29sb3Isdj1sLmNvbG9yOyhtfHx2KSYmKHQuc2VsZWN0ZWRDb2xvckZuPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWNjfHxoO3JldHVybiBlLnNlbGVjdGVkP218fHQ6dnx8dH0pO3ZhciB5PWkuc2l6ZSx4PW8uc2l6ZSxiPWwuc2l6ZSxfPXZvaWQgMCE9PXgsdz12b2lkIDAhPT1iO3JldHVybiBzLnRyYWNlSXMoZSwic3ltYm9scyIpJiYoX3x8dykmJih0LnNlbGVjdGVkU2l6ZUZuPWZ1bmN0aW9uKGUpe3ZhciB0PWUubXJjfHx5LzI7cmV0dXJuIGUuc2VsZWN0ZWQ/Xz94LzI6dDp3P2IvMjp0fSksdH0seC5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9e30scj1lLnNlbGVjdGVkfHx7fSxuPWUudW5zZWxlY3RlZHx8e30sYT1lLnRleHRmb250fHx7fSxpPXIudGV4dGZvbnR8fHt9LG89bi50ZXh0Zm9udHx8e30sbD1hLmNvbG9yLHM9aS5jb2xvcix1PW8uY29sb3I7cmV0dXJuIHQuc2VsZWN0ZWRUZXh0Q29sb3JGbj1mdW5jdGlvbihlKXt2YXIgdD1lLnRjfHxsO3JldHVybiBlLnNlbGVjdGVkP3N8fHQ6dXx8KHM/dDpjLmFkZE9wYWNpdHkodCxnKSl9LHR9LHguc2VsZWN0ZWRQb2ludFN0eWxlPWZ1bmN0aW9uKGUsdCl7aWYoZS5zaXplKCkmJnQuc2VsZWN0ZWRwb2ludHMpe3ZhciByPXgubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyh0KSxhPXQubWFya2VyfHx7fSxpPVtdO3Iuc2VsZWN0ZWRPcGFjaXR5Rm4mJmkucHVzaCgoZnVuY3Rpb24oZSx0KXtlLnN0eWxlKCJvcGFjaXR5IixyLnNlbGVjdGVkT3BhY2l0eUZuKHQpKX0pKSxyLnNlbGVjdGVkQ29sb3JGbiYmaS5wdXNoKChmdW5jdGlvbihlLHQpe2MuZmlsbChlLHIuc2VsZWN0ZWRDb2xvckZuKHQpKX0pKSxyLnNlbGVjdGVkU2l6ZUZuJiZpLnB1c2goKGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5teHx8YS5zeW1ib2x8fDAsaT1yLnNlbGVjdGVkU2l6ZUZuKHQpO2UuYXR0cigiZCIsdyh4LnN5bWJvbE51bWJlcihuKSxpKSksdC5tcmMyPWl9KSksaS5sZW5ndGgmJmUuZWFjaCgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW4uc2VsZWN0KHRoaXMpLHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdKHQsZSl9KSl9fSx4LnRyeUNvbG9yc2NhbGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj10P2EubmVzdGVkUHJvcGVydHkoZSx0KS5nZXQoKTplO2lmKHIpe3ZhciBuPXIuY29sb3I7aWYoKHIuY29sb3JzY2FsZXx8ci5fY29sb3JBeCkmJmEuaXNBcnJheU9yVHlwZWRBcnJheShuKSlyZXR1cm4gdS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2Uocil9cmV0dXJuIGEuaWRlbnRpdHl9O3ZhciBMPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIFMoZSx0LHIsYSxpKXt2YXIgbz1uLnNlbGVjdChlLm5vZGUoKS5wYXJlbnROb2RlKSxsPS0xIT09dC5pbmRleE9mKCJ0b3AiKT8idG9wIjotMSE9PXQuaW5kZXhPZigiYm90dG9tIik/ImJvdHRvbSI6Im1pZGRsZSIscz0tMSE9PXQuaW5kZXhPZigibGVmdCIpPyJlbmQiOi0xIT09dC5pbmRleE9mKCJyaWdodCIpPyJzdGFydCI6Im1pZGRsZSIsYz1hP2EvLjgrMTowLHU9KGYubGluZUNvdW50KGUpLTEpKmgrMSxwPUxbc10qYyxnPS43NSpyK0xbbF0qYysoTFtsXS0xKSp1KnIvMjtlLmF0dHIoInRleHQtYW5jaG9yIixzKSxpfHxvLmF0dHIoInRyYW5zZm9ybSIsZChwLGcpKX1mdW5jdGlvbiBEKGUsdCl7dmFyIHI9ZS50c3x8dC50ZXh0Zm9udC5zaXplO3JldHVybiBvKHIpJiZyPjA/cjowfXgudGV4dFBvaW50U3R5bGU9ZnVuY3Rpb24oZSx0LHIpe2lmKGUuc2l6ZSgpKXt2YXIgaTtpZih0LnNlbGVjdGVkcG9pbnRzKXt2YXIgbz14Lm1ha2VTZWxlY3RlZFRleHRTdHlsZUZucyh0KTtpPW8uc2VsZWN0ZWRUZXh0Q29sb3JGbn12YXIgbD10LnRleHR0ZW1wbGF0ZSxzPXIuX2Z1bGxMYXlvdXQ7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgbz1uLnNlbGVjdCh0aGlzKSxjPWw/YS5leHRyYWN0T3B0aW9uKGUsdCwidHh0IiwidGV4dHRlbXBsYXRlIik6YS5leHRyYWN0T3B0aW9uKGUsdCwidHgiLCJ0ZXh0Iik7aWYoY3x8MD09PWMpe2lmKGwpe3ZhciB1PXQuX21vZHVsZS5mb3JtYXRMYWJlbHMsZD11P3UoZSx0LHMpOnt9LHA9e307eShwLHQsZS5pKTt2YXIgaD10Ll9tZXRhfHx7fTtjPWEudGV4dHRlbXBsYXRlU3RyaW5nKGMsZCxzLl9kM2xvY2FsZSxwLGUsaCl9dmFyIGc9ZS50cHx8dC50ZXh0cG9zaXRpb24sbT1EKGUsdCksdj1pP2koZSk6ZS50Y3x8dC50ZXh0Zm9udC5jb2xvcjtvLmNhbGwoeC5mb250LGUudGZ8fHQudGV4dGZvbnQuZmFtaWx5LG0sdikudGV4dChjKS5jYWxsKGYuY29udmVydFRvVHNwYW5zLHIpLmNhbGwoUyxnLG0sZS5tcmMpfWVsc2Ugby5yZW1vdmUoKX0pKX19LHguc2VsZWN0ZWRUZXh0U3R5bGU9ZnVuY3Rpb24oZSx0KXtpZihlLnNpemUoKSYmdC5zZWxlY3RlZHBvaW50cyl7dmFyIHI9eC5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnModCk7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxpPXIuc2VsZWN0ZWRUZXh0Q29sb3JGbihlKSxvPWUudHB8fHQudGV4dHBvc2l0aW9uLGw9RChlLHQpO2MuZmlsbChhLGkpO3ZhciB1PXMudHJhY2VJcyh0LCJiYXItbGlrZSIpO1MoYSxvLGwsZS5tcmMyfHxlLm1yYyx1KX0pKX19O2Z1bmN0aW9uIEMoZSx0LHIsYSl7dmFyIGk9ZVswXS10WzBdLG89ZVsxXS10WzFdLGw9clswXS10WzBdLHM9clsxXS10WzFdLGM9TWF0aC5wb3coaSppK28qbywuMjUpLHU9TWF0aC5wb3cobCpsK3MqcywuMjUpLGQ9KHUqdSppLWMqYypsKSphLGY9KHUqdSpvLWMqYypzKSphLHA9Myp1KihjK3UpLGg9MypjKihjK3UpO3JldHVybltbbi5yb3VuZCh0WzBdKyhwJiZkL3ApLDIpLG4ucm91bmQodFsxXSsocCYmZi9wKSwyKV0sW24ucm91bmQodFswXS0oaCYmZC9oKSwyKSxuLnJvdW5kKHRbMV0tKGgmJmYvaCksMildXX14LnNtb290aG9wZW49ZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aDwzKXJldHVybiJNIitlLmpvaW4oIkwiKTt2YXIgcixuPSJNIitlWzBdLGE9W107Zm9yKHI9MTtyPGUubGVuZ3RoLTE7cisrKWEucHVzaChDKGVbci0xXSxlW3JdLGVbcisxXSx0KSk7Zm9yKG4rPSJRIithWzBdWzBdKyIgIitlWzFdLHI9MjtyPGUubGVuZ3RoLTE7cisrKW4rPSJDIithW3ItMl1bMV0rIiAiK2Fbci0xXVswXSsiICIrZVtyXTtyZXR1cm4gbis9IlEiK2FbZS5sZW5ndGgtM11bMV0rIiAiK2VbZS5sZW5ndGgtMV19LHguc21vb3RoY2xvc2VkPWZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg8MylyZXR1cm4iTSIrZS5qb2luKCJMIikrIloiO3ZhciByLG49Ik0iK2VbMF0sYT1lLmxlbmd0aC0xLGk9W0MoZVthXSxlWzBdLGVbMV0sdCldO2ZvcihyPTE7cjxhO3IrKylpLnB1c2goQyhlW3ItMV0sZVtyXSxlW3IrMV0sdCkpO2ZvcihpLnB1c2goQyhlW2EtMV0sZVthXSxlWzBdLHQpKSxyPTE7cjw9YTtyKyspbis9IkMiK2lbci0xXVsxXSsiICIraVtyXVswXSsiICIrZVtyXTtyZXR1cm4gbis9IkMiK2lbYV1bMV0rIiAiK2lbMF1bMF0rIiAiK2VbMF0rIloifTt2YXIgTz17aHY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4iSCIrbi5yb3VuZCh0WzBdLDIpKyJWIituLnJvdW5kKHRbMV0sMil9LHZoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIlYiK24ucm91bmQodFsxXSwyKSsiSCIrbi5yb3VuZCh0WzBdLDIpfSxodmg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4iSCIrbi5yb3VuZCgoZVswXSt0WzBdKS8yLDIpKyJWIituLnJvdW5kKHRbMV0sMikrIkgiK24ucm91bmQodFswXSwyKX0sdmh2OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIlYiK24ucm91bmQoKGVbMV0rdFsxXSkvMiwyKSsiSCIrbi5yb3VuZCh0WzBdLDIpKyJWIituLnJvdW5kKHRbMV0sMil9fSxQPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIkwiK24ucm91bmQodFswXSwyKSsiLCIrbi5yb3VuZCh0WzFdLDIpfTt4LnN0ZXBzPWZ1bmN0aW9uKGUpe3ZhciB0PU9bZV18fFA7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0iTSIrbi5yb3VuZChlWzBdWzBdLDIpKyIsIituLnJvdW5kKGVbMF1bMV0sMiksYT0xO2E8ZS5sZW5ndGg7YSsrKXIrPXQoZVthLTFdLGVbYV0pO3JldHVybiByfX0seC5tYWtlVGVzdGVyPWZ1bmN0aW9uKCl7dmFyIGU9YS5lbnN1cmVTaW5nbGVCeUlkKG4uc2VsZWN0KCJib2R5IiksInN2ZyIsImpzLXBsb3RseS10ZXN0ZXIiLChmdW5jdGlvbihlKXtlLmF0dHIocC5zdmdBdHRycykuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiLTEwMDAwcHgiLHRvcDoiLTEwMDAwcHgiLHdpZHRoOiI5MDAwcHgiLGhlaWdodDoiOTAwMHB4Iiwiei1pbmRleCI6IjEifSl9KSksdD1hLmVuc3VyZVNpbmdsZShlLCJwYXRoIiwianMtcmVmZXJlbmNlLXBvaW50IiwoZnVuY3Rpb24oZSl7ZS5hdHRyKCJkIiwiTTAsMEgxVjFIMFoiKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6MCxmaWxsOiJibGFjayJ9KX0pKTt4LnRlc3Rlcj1lLHgudGVzdHJlZj10fSx4LnNhdmVkQkJveGVzPXt9O3ZhciBJPTA7ZnVuY3Rpb24gUihlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZSgiZGF0YS11bmZvcm1hdHRlZCIpO2lmKG51bGwhPT10KXJldHVybiB0K2UuZ2V0QXR0cmlidXRlKCJkYXRhLW1hdGgiKStlLmdldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiKStlLmdldEF0dHJpYnV0ZSgic3R5bGUiKX1mdW5jdGlvbiB6KGUsdCl7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHI9dC5fY29udGV4dCxuPXIuX2V4cG9ydGVkUGxvdD8iIjpyLl9iYXNlVXJsfHwiIjtyZXR1cm4gbj8idXJsKCciK24rIiMiK2UrIicpIjoidXJsKCMiK2UrIikifXguYkJveD1mdW5jdGlvbihlLHQscil7dmFyIGksbyxsO2lmKHJ8fChyPVIoZSkpLHIpe2lmKGk9eC5zYXZlZEJCb3hlc1tyXSlyZXR1cm4gYS5leHRlbmRGbGF0KHt9LGkpfWVsc2UgaWYoMT09PWUuY2hpbGROb2Rlcy5sZW5ndGgpe3ZhciBzPWUuY2hpbGROb2Rlc1swXTtpZihyPVIocykpe3ZhciBjPStzLmdldEF0dHJpYnV0ZSgieCIpfHwwLHU9K3MuZ2V0QXR0cmlidXRlKCJ5Iil8fDAsZD1zLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIik7aWYoIWQpe3ZhciBwPXguYkJveChzLCExLHIpO3JldHVybiBjJiYocC5sZWZ0Kz1jLHAucmlnaHQrPWMpLHUmJihwLnRvcCs9dSxwLmJvdHRvbSs9dSkscH1pZihyKz0ifiIrYysifiIrdSsifiIrZCxpPXguc2F2ZWRCQm94ZXNbcl0pcmV0dXJuIGEuZXh0ZW5kRmxhdCh7fSxpKX19dD9vPWU6KGw9eC50ZXN0ZXIubm9kZSgpLG89ZS5jbG9uZU5vZGUoITApLGwuYXBwZW5kQ2hpbGQobykpLG4uc2VsZWN0KG8pLmF0dHIoInRyYW5zZm9ybSIsbnVsbCkuY2FsbChmLnBvc2l0aW9uVGV4dCwwLDApO3ZhciBoPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZz14LnRlc3RyZWYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3R8fGwucmVtb3ZlQ2hpbGQobyk7dmFyIG09e2hlaWdodDpoLmhlaWdodCx3aWR0aDpoLndpZHRoLGxlZnQ6aC5sZWZ0LWcubGVmdCx0b3A6aC50b3AtZy50b3AscmlnaHQ6aC5yaWdodC1nLmxlZnQsYm90dG9tOmguYm90dG9tLWcudG9wfTtyZXR1cm4gST49MWU0JiYoeC5zYXZlZEJCb3hlcz17fSxJPTApLHImJih4LnNhdmVkQkJveGVzW3JdPW0pLEkrKyxhLmV4dGVuZEZsYXQoe30sbSl9LHguc2V0Q2xpcFVybD1mdW5jdGlvbihlLHQscil7ZS5hdHRyKCJjbGlwLXBhdGgiLHoodCxyKSl9LHguZ2V0VHJhbnNsYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PShlW2UuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSJdKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoLy4qXGJ0cmFuc2xhdGVcKCgtP1xkKlwuP1xkKilbXi1cZF0qKC0/XGQqXC4/XGQqKVteXGRdLiovLChmdW5jdGlvbihlLHQscil7cmV0dXJuW3Qscl0uam9pbigiICIpfSkpLnNwbGl0KCIgIik7cmV0dXJue3g6K3RbMF18fDAseTordFsxXXx8MH19LHguc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGE9ZS5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixpPWVbbl0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gdD10fHwwLHI9cnx8MCxpPWkucmVwbGFjZSgvKFxidHJhbnNsYXRlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxpPShpKz1kKHQscikpLnRyaW0oKSxlW2FdKCJ0cmFuc2Zvcm0iLGkpLGl9LHguZ2V0U2NhbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9KGVbZS5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIl0oInRyYW5zZm9ybSIpfHwiIikucmVwbGFjZSgvLipcYnNjYWxlXCgoXGQqXC4/XGQqKVteXGRdKihcZCpcLj9cZCopW15cZF0uKi8sKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm5bdCxyXS5qb2luKCIgIil9KSkuc3BsaXQoIiAiKTtyZXR1cm57eDordFswXXx8MSx5Oit0WzFdfHwxfX0seC5zZXRTY2FsZT1mdW5jdGlvbihlLHQscil7dmFyIG49ZS5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIixhPWUuYXR0cj8iYXR0ciI6InNldEF0dHJpYnV0ZSIsaT1lW25dKCJ0cmFuc2Zvcm0iKXx8IiI7cmV0dXJuIHQ9dHx8MSxyPXJ8fDEsaT1pLnJlcGxhY2UoLyhcYnNjYWxlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxpPShpKz0ic2NhbGUoIit0KyIsIityKyIpIikudHJpbSgpLGVbYV0oInRyYW5zZm9ybSIsaSksaX07dmFyIE49L1xzKnNjLiovO3guc2V0UG9pbnRHcm91cFNjYWxlPWZ1bmN0aW9uKGUsdCxyKXtpZih0PXR8fDEscj1yfHwxLGUpe3ZhciBuPTE9PT10JiYxPT09cj8iIjoic2NhbGUoIit0KyIsIityKyIpIjtlLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoTiwiIik7ZT0oZSs9bikudHJpbSgpLHRoaXMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpfSkpfX07dmFyIEY9L3RyYW5zbGF0ZVwoW14pXSpcKVxzKiQvO3guc2V0VGV4dFBvaW50c1NjYWxlPWZ1bmN0aW9uKGUsdCxyKXtlJiZlLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGUsYT1uLnNlbGVjdCh0aGlzKSxpPWEuc2VsZWN0KCJ0ZXh0Iik7aWYoaS5ub2RlKCkpe3ZhciBvPXBhcnNlRmxvYXQoaS5hdHRyKCJ4Iil8fDApLGw9cGFyc2VGbG9hdChpLmF0dHIoInkiKXx8MCkscz0oYS5hdHRyKCJ0cmFuc2Zvcm0iKXx8IiIpLm1hdGNoKEYpO2U9MT09PXQmJjE9PT1yP1tdOltkKG8sbCksInNjYWxlKCIrdCsiLCIrcisiKSIsZCgtbywtbCldLHMmJmUucHVzaChzKSxhLmF0dHIoInRyYW5zZm9ybSIsZS5qb2luKCIiKSl9fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjEzOCwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6MjA3LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjoyMTEsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjoyMTMsIi4uLy4uL2xpYiI6MjMyLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjI1NSwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjozNzUsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjozODMsIi4uL2NvbG9yIjoxMDIsIi4uL2NvbG9yc2NhbGUiOjExNCwiLi9zeW1ib2xfZGVmcyI6MTI1LCJAcGxvdGx5L2QzIjoxMSwiZmFzdC1pc251bWVyaWMiOjE3LHRpbnljb2xvcjI6Njd9XSwxMjU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpO3QuZXhwb3J0cz17Y2lyY2xlOntuOjAsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUsMik7cmV0dXJuIk0iK3QrIiwwQSIrdCsiLCIrdCsiIDAgMSwxIDAsLSIrdCsiQSIrdCsiLCIrdCsiIDAgMCwxICIrdCsiLDBaIn19LHNxdWFyZTp7bjoxLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZChlLDIpO3JldHVybiJNIit0KyIsIit0KyJILSIrdCsiVi0iK3QrIkgiK3QrIloifX0sZGlhbW9uZDp7bjoyLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgxLjMqZSwyKTtyZXR1cm4iTSIrdCsiLDBMMCwiK3QrIkwtIit0KyIsMEwwLC0iK3QrIloifX0sY3Jvc3M6e246MyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoLjQqZSwyKSxyPW4ucm91bmQoMS4yKmUsMik7cmV0dXJuIk0iK3IrIiwiK3QrIkgiK3QrIlYiK3IrIkgtIit0KyJWIit0KyJILSIrcisiVi0iK3QrIkgtIit0KyJWLSIrcisiSCIrdCsiVi0iK3QrIkgiK3IrIloifX0seDp7bjo0LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCguOCplL01hdGguc3FydCgyKSwyKSxyPSJsIit0KyIsIit0LGE9ImwiK3QrIiwtIit0LGk9ImwtIit0KyIsLSIrdCxvPSJsLSIrdCsiLCIrdDtyZXR1cm4iTTAsIit0K3IrYStpK2EraStvK2krbytyK28rcisiWiJ9fSwidHJpYW5nbGUtdXAiOntuOjUsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKDIqZS9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIit0KyIsIituLnJvdW5kKGUvMiwyKSsiSCIrdCsiTDAsLSIrbi5yb3VuZChlLDIpKyJaIn19LCJ0cmlhbmdsZS1kb3duIjp7bjo2LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgyKmUvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrdCsiLC0iK24ucm91bmQoZS8yLDIpKyJIIit0KyJMMCwiK24ucm91bmQoZSwyKSsiWiJ9fSwidHJpYW5nbGUtbGVmdCI6e246NyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMiplL01hdGguc3FydCgzKSwyKTtyZXR1cm4iTSIrbi5yb3VuZChlLzIsMikrIiwtIit0KyJWIit0KyJMLSIrbi5yb3VuZChlLDIpKyIsMFoifX0sInRyaWFuZ2xlLXJpZ2h0Ijp7bjo4LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgyKmUvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrbi5yb3VuZChlLzIsMikrIiwtIit0KyJWIit0KyJMIituLnJvdW5kKGUsMikrIiwwWiJ9fSwidHJpYW5nbGUtbmUiOntuOjksZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKC42KmUsMikscj1uLnJvdW5kKDEuMiplLDIpO3JldHVybiJNLSIrcisiLC0iK3QrIkgiK3QrIlYiK3IrIloifX0sInRyaWFuZ2xlLXNlIjp7bjoxMCxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoLjYqZSwyKSxyPW4ucm91bmQoMS4yKmUsMik7cmV0dXJuIk0iK3QrIiwtIityKyJWIit0KyJILSIrcisiWiJ9fSwidHJpYW5nbGUtc3ciOntuOjExLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCguNiplLDIpLHI9bi5yb3VuZCgxLjIqZSwyKTtyZXR1cm4iTSIrcisiLCIrdCsiSC0iK3QrIlYtIityKyJaIn19LCJ0cmlhbmdsZS1udyI6e246MTIsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKC42KmUsMikscj1uLnJvdW5kKDEuMiplLDIpO3JldHVybiJNLSIrdCsiLCIrcisiVi0iK3QrIkgiK3IrIloifX0scGVudGFnb246e246MTMsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKC45NTEqZSwyKSxyPW4ucm91bmQoLjU4OCplLDIpLGE9bi5yb3VuZCgtZSwyKSxpPW4ucm91bmQoLS4zMDkqZSwyKTtyZXR1cm4iTSIrdCsiLCIraSsiTCIrcisiLCIrbi5yb3VuZCguODA5KmUsMikrIkgtIityKyJMLSIrdCsiLCIraSsiTDAsIithKyJaIn19LGhleGFnb246e246MTQsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUsMikscj1uLnJvdW5kKGUvMiwyKSxhPW4ucm91bmQoZSpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm4iTSIrYSsiLC0iK3IrIlYiK3IrIkwwLCIrdCsiTC0iK2ErIiwiK3IrIlYtIityKyJMMCwtIit0KyJaIn19LGhleGFnb24yOntuOjE1LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZChlLDIpLHI9bi5yb3VuZChlLzIsMiksYT1uLnJvdW5kKGUqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuIk0tIityKyIsIithKyJIIityKyJMIit0KyIsMEwiK3IrIiwtIithKyJILSIrcisiTC0iK3QrIiwwWiJ9fSxvY3RhZ29uOntuOjE2LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCguOTI0KmUsMikscj1uLnJvdW5kKC4zODMqZSwyKTtyZXR1cm4iTS0iK3IrIiwtIit0KyJIIityKyJMIit0KyIsLSIrcisiViIrcisiTCIrcisiLCIrdCsiSC0iK3IrIkwtIit0KyIsIityKyJWLSIrcisiWiJ9fSxzdGFyOntuOjE3LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9MS40KmUscj1uLnJvdW5kKC4yMjUqdCwyKSxhPW4ucm91bmQoLjk1MSp0LDIpLGk9bi5yb3VuZCguMzYzKnQsMiksbz1uLnJvdW5kKC41ODgqdCwyKSxsPW4ucm91bmQoLXQsMikscz1uLnJvdW5kKC0uMzA5KnQsMiksYz1uLnJvdW5kKC4xMTgqdCwyKSx1PW4ucm91bmQoLjgwOSp0LDIpO3JldHVybiJNIityKyIsIitzKyJIIithKyJMIitpKyIsIitjKyJMIitvKyIsIit1KyJMMCwiK24ucm91bmQoLjM4Mip0LDIpKyJMLSIrbysiLCIrdSsiTC0iK2krIiwiK2MrIkwtIithKyIsIitzKyJILSIrcisiTDAsIitsKyJaIn19LGhleGFncmFtOntuOjE4LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCguNjYqZSwyKSxyPW4ucm91bmQoLjM4KmUsMiksYT1uLnJvdW5kKC43NiplLDIpO3JldHVybiJNLSIrYSsiLDBsLSIrcisiLC0iK3QrImgiK2ErImwiK3IrIiwtIit0KyJsIityKyIsIit0KyJoIithKyJsLSIrcisiLCIrdCsibCIrcisiLCIrdCsiaC0iK2ErImwtIityKyIsIit0KyJsLSIrcisiLC0iK3QrImgtIithKyJaIn19LCJzdGFyLXRyaWFuZ2xlLXVwIjp7bjoxOSxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoZSpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KmUsMiksYT1uLnJvdW5kKDEuNiplLDIpLGk9bi5yb3VuZCg0KmUsMiksbz0iQSAiK2krIiwiK2krIiAwIDAgMSAiO3JldHVybiJNLSIrdCsiLCIrcitvK3QrIiwiK3IrbysiMCwtIithK28rIi0iK3QrIiwiK3IrIloifX0sInN0YXItdHJpYW5nbGUtZG93biI6e246MjAsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCplLDIpLGE9bi5yb3VuZCgxLjYqZSwyKSxpPW4ucm91bmQoNCplLDIpLG89IkEgIitpKyIsIitpKyIgMCAwIDEgIjtyZXR1cm4iTSIrdCsiLC0iK3IrbysiLSIrdCsiLC0iK3IrbysiMCwiK2Erbyt0KyIsLSIrcisiWiJ9fSwic3Rhci1zcXVhcmUiOntuOjIxLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgxLjEqZSwyKSxyPW4ucm91bmQoMiplLDIpLGE9IkEgIityKyIsIityKyIgMCAwIDEgIjtyZXR1cm4iTS0iK3QrIiwtIit0K2ErIi0iK3QrIiwiK3QrYSt0KyIsIit0K2ErdCsiLC0iK3QrYSsiLSIrdCsiLC0iK3QrIloifX0sInN0YXItZGlhbW9uZCI6e246MjIsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKDEuNCplLDIpLHI9bi5yb3VuZCgxLjkqZSwyKSxhPSJBICIrcisiLCIrcisiIDAgMCAxICI7cmV0dXJuIk0tIit0KyIsMCIrYSsiMCwiK3QrYSt0KyIsMCIrYSsiMCwtIit0K2ErIi0iK3QrIiwwWiJ9fSwiZGlhbW9uZC10YWxsIjp7bjoyMyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoLjcqZSwyKSxyPW4ucm91bmQoMS40KmUsMik7cmV0dXJuIk0wLCIrcisiTCIrdCsiLDBMMCwtIityKyJMLSIrdCsiLDBaIn19LCJkaWFtb25kLXdpZGUiOntuOjI0LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgxLjQqZSwyKSxyPW4ucm91bmQoLjcqZSwyKTtyZXR1cm4iTTAsIityKyJMIit0KyIsMEwwLC0iK3IrIkwtIit0KyIsMFoifX0saG91cmdsYXNzOntuOjI1LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZChlLDIpO3JldHVybiJNIit0KyIsIit0KyJILSIrdCsiTCIrdCsiLC0iK3QrIkgtIit0KyJaIn0sbm9Eb3Q6ITB9LGJvd3RpZTp7bjoyNixmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoZSwyKTtyZXR1cm4iTSIrdCsiLCIrdCsiVi0iK3QrIkwtIit0KyIsIit0KyJWLSIrdCsiWiJ9LG5vRG90OiEwfSwiY2lyY2xlLWNyb3NzIjp7bjoyNyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoZSwyKTtyZXR1cm4iTTAsIit0KyJWLSIrdCsiTSIrdCsiLDBILSIrdCsiTSIrdCsiLDBBIit0KyIsIit0KyIgMCAxLDEgMCwtIit0KyJBIit0KyIsIit0KyIgMCAwLDEgIit0KyIsMFoifSxuZWVkTGluZTohMCxub0RvdDohMH0sImNpcmNsZS14Ijp7bjoyOCxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoZSwyKSxyPW4ucm91bmQoZS9NYXRoLnNxcnQoMiksMik7cmV0dXJuIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityKyJNIit0KyIsMEEiK3QrIiwiK3QrIiAwIDEsMSAwLC0iK3QrIkEiK3QrIiwiK3QrIiAwIDAsMSAiK3QrIiwwWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwic3F1YXJlLWNyb3NzIjp7bjoyOSxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoZSwyKTtyZXR1cm4iTTAsIit0KyJWLSIrdCsiTSIrdCsiLDBILSIrdCsiTSIrdCsiLCIrdCsiSC0iK3QrIlYtIit0KyJIIit0KyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJzcXVhcmUteCI6e246MzAsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUsMik7cmV0dXJuIk0iK3QrIiwiK3QrIkwtIit0KyIsLSIrdCsiTSIrdCsiLC0iK3QrIkwtIit0KyIsIit0KyJNIit0KyIsIit0KyJILSIrdCsiVi0iK3QrIkgiK3QrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQtY3Jvc3MiOntuOjMxLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgxLjMqZSwyKTtyZXR1cm4iTSIrdCsiLDBMMCwiK3QrIkwtIit0KyIsMEwwLC0iK3QrIlpNMCwtIit0KyJWIit0KyJNLSIrdCsiLDBIIit0fSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQteCI6e246MzIsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKDEuMyplLDIpLHI9bi5yb3VuZCguNjUqZSwyKTtyZXR1cm4iTSIrdCsiLDBMMCwiK3QrIkwtIit0KyIsMEwwLC0iK3QrIlpNLSIrcisiLC0iK3IrIkwiK3IrIiwiK3IrIk0tIityKyIsIityKyJMIityKyIsLSIrcn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJjcm9zcy10aGluIjp7bjozMyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMS40KmUsMik7cmV0dXJuIk0wLCIrdCsiVi0iK3QrIk0iK3QrIiwwSC0iK3R9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sIngtdGhpbiI6e246MzQsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUsMik7cmV0dXJuIk0iK3QrIiwiK3QrIkwtIit0KyIsLSIrdCsiTSIrdCsiLC0iK3QrIkwtIit0KyIsIit0fSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGFzdGVyaXNrOntuOjM1LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgxLjIqZSwyKSxyPW4ucm91bmQoLjg1KmUsMik7cmV0dXJuIk0wLCIrdCsiVi0iK3QrIk0iK3QrIiwwSC0iK3QrIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGhhc2g6e246MzYsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUvMiwyKSxyPW4ucm91bmQoZSwyKTtyZXR1cm4iTSIrdCsiLCIrcisiVi0iK3IrIm0tIityKyIsMFYiK3IrIk0iK3IrIiwiK3QrIkgtIityKyJtMCwtIityKyJIIityfSxuZWVkTGluZTohMCxub0ZpbGw6ITB9LCJ5LXVwIjp7bjozNyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMS4yKmUsMikscj1uLnJvdW5kKDEuNiplLDIpLGE9bi5yb3VuZCguOCplLDIpO3JldHVybiJNLSIrdCsiLCIrYSsiTDAsME0iK3QrIiwiK2ErIkwwLDBNMCwtIityKyJMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwieS1kb3duIjp7bjozOCxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMS4yKmUsMikscj1uLnJvdW5kKDEuNiplLDIpLGE9bi5yb3VuZCguOCplLDIpO3JldHVybiJNLSIrdCsiLC0iK2ErIkwwLDBNIit0KyIsLSIrYSsiTDAsME0wLCIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktbGVmdCI6e246MzksZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKDEuMiplLDIpLHI9bi5yb3VuZCgxLjYqZSwyKSxhPW4ucm91bmQoLjgqZSwyKTtyZXR1cm4iTSIrYSsiLCIrdCsiTDAsME0iK2ErIiwtIit0KyJMMCwwTS0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktcmlnaHQiOntuOjQwLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgxLjIqZSwyKSxyPW4ucm91bmQoMS42KmUsMiksYT1uLnJvdW5kKC44KmUsMik7cmV0dXJuIk0tIithKyIsIit0KyJMMCwwTS0iK2ErIiwtIit0KyJMMCwwTSIrcisiLDBMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1ldyI6e246NDEsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKDEuNCplLDIpO3JldHVybiJNIit0KyIsMEgtIit0fSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW5zIjp7bjo0MixmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMS40KmUsMik7cmV0dXJuIk0wLCIrdCsiVi0iK3R9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbmUiOntuOjQzLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZChlLDIpO3JldHVybiJNIit0KyIsLSIrdCsiTC0iK3QrIiwiK3R9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbnciOntuOjQ0LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZChlLDIpO3JldHVybiJNIit0KyIsIit0KyJMLSIrdCsiLC0iK3R9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImFycm93LXVwIjp7bjo0NSxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoZSwyKTtyZXR1cm4iTTAsMEwtIit0KyIsIituLnJvdW5kKDIqZSwyKSsiSCIrdCsiWiJ9LG5vRG90OiEwfSwiYXJyb3ctZG93biI6e246NDYsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUsMik7cmV0dXJuIk0wLDBMLSIrdCsiLC0iK24ucm91bmQoMiplLDIpKyJIIit0KyJaIn0sbm9Eb3Q6ITB9LCJhcnJvdy1sZWZ0Ijp7bjo0NyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMiplLDIpLHI9bi5yb3VuZChlLDIpO3JldHVybiJNMCwwTCIrdCsiLC0iK3IrIlYiK3IrIloifSxub0RvdDohMH0sImFycm93LXJpZ2h0Ijp7bjo0OCxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMiplLDIpLHI9bi5yb3VuZChlLDIpO3JldHVybiJNMCwwTC0iK3QrIiwtIityKyJWIityKyJaIn0sbm9Eb3Q6ITB9LCJhcnJvdy1iYXItdXAiOntuOjQ5LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZChlLDIpO3JldHVybiJNLSIrdCsiLDBIIit0KyJNMCwwTC0iK3QrIiwiK24ucm91bmQoMiplLDIpKyJIIit0KyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJhcnJvdy1iYXItZG93biI6e246NTAsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUsMik7cmV0dXJuIk0tIit0KyIsMEgiK3QrIk0wLDBMLSIrdCsiLC0iK24ucm91bmQoMiplLDIpKyJIIit0KyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJhcnJvdy1iYXItbGVmdCI6e246NTEsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKDIqZSwyKSxyPW4ucm91bmQoZSwyKTtyZXR1cm4iTTAsLSIrcisiViIrcisiTTAsMEwiK3QrIiwtIityKyJWIityKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJhcnJvdy1iYXItcmlnaHQiOntuOjUyLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgyKmUsMikscj1uLnJvdW5kKGUsMik7cmV0dXJuIk0wLC0iK3IrIlYiK3IrIk0wLDBMLSIrdCsiLC0iK3IrIlYiK3IrIloifSxuZWVkTGluZTohMCxub0RvdDohMH19fSx7IkBwbG90bHkvZDMiOjExfV0sMTI2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwZXJjZW50IiwiY29uc3RhbnQiLCJzcXJ0IiwiZGF0YSJdLGVkaXRUeXBlOiJjYWxjIn0sc3ltbWV0cmljOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LGFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGFycmF5bWludXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlbWludXM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHRyYWNlcmVmOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0sdHJhY2VyZWZtaW51czp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJzdHlsZSJ9LGNvcHlfeXN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvcHlfenN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIn19fX0se31dLDEyNzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz1lKCIuLi8uLi9saWIiKSxsPWUoIi4vY29tcHV0ZV9lcnJvciIpO2Z1bmN0aW9uIHMoZSx0LHIsYSl7dmFyIHM9dFsiZXJyb3JfIithXXx8e30sYz1bXTtpZihzLnZpc2libGUmJi0xIT09WyJsaW5lYXIiLCJsb2ciXS5pbmRleE9mKHIudHlwZSkpe2Zvcih2YXIgdT1sKHMpLGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIGY9ZVtkXSxwPWYuaTtpZih2b2lkIDA9PT1wKXA9ZDtlbHNlIGlmKG51bGw9PT1wKWNvbnRpbnVlO3ZhciBoPWZbYV07aWYobihyLmMybChoKSkpe3ZhciBnPXUoaCxwKTtpZihuKGdbMF0pJiZuKGdbMV0pKXt2YXIgbT1mW2ErInMiXT1oLWdbMF0sdj1mW2ErImgiXT1oK2dbMV07Yy5wdXNoKG0sdil9fX12YXIgeT1yLl9pZCx4PXQuX2V4dHJlbWVzW3ldLGI9aS5maW5kRXh0cmVtZXMocixjLG8uZXh0ZW5kRmxhdCh7dG96ZXJvOngub3B0cy50b3plcm99LHtwYWRkZWQ6ITB9KSk7eC5taW49eC5taW4uY29uY2F0KGIubWluKSx4Lm1heD14Lm1heC5jb25jYXQoYi5tYXgpfX10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuY2FsY2RhdGEscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdLG89blswXS50cmFjZTtpZighMD09PW8udmlzaWJsZSYmYS50cmFjZUlzKG8sImVycm9yQmFyc09LIikpe3ZhciBsPWkuZ2V0RnJvbUlkKGUsby54YXhpcyksYz1pLmdldEZyb21JZChlLG8ueWF4aXMpO3MobixvLGwsIngiKSxzKG4sbyxjLCJ5Iil9fX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjoyNzksIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4vY29tcHV0ZV9lcnJvciI6MTI4LCJmYXN0LWlzbnVtZXJpYyI6MTd9XSwxMjg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3JldHVybiJwZXJjZW50Ij09PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguYWJzKGUqdC8xMDApfToiY29uc3RhbnQiPT09ZT9mdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyh0KX06InNxcnQiPT09ZT9mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGguYWJzKGUpKX06dm9pZCAwfXQuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLnR5cGUscj1lLnN5bW1ldHJpYztpZigiZGF0YSI9PT10KXt2YXIgYT1lLmFycmF5fHxbXTtpZihyKXJldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPSthW3RdO3JldHVybltyLHJdfTt2YXIgaT1lLmFycmF5bWludXN8fFtdO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPSthW3RdLG49K2lbdF07cmV0dXJuIGlzTmFOKHIpJiZpc05hTihuKT9bTmFOLE5hTl06W258fDAscnx8MF19fXZhciBvPW4odCxlLnZhbHVlKSxsPW4odCxlLnZhbHVlbWludXMpO3JldHVybiByfHx2b2lkIDA9PT1lLnZhbHVlbWludXM/ZnVuY3Rpb24oZSl7dmFyIHQ9byhlKTtyZXR1cm5bdCx0XX06ZnVuY3Rpb24oZSl7cmV0dXJuW2woZSksbyhlKV19fX0se31dLDEyOTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL2xpYiIpLG89ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGw9ZSgiLi9hdHRyaWJ1dGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLHMpe3ZhciBjPSJlcnJvcl8iK3MuYXhpcyx1PW8ubmV3Q29udGFpbmVyKHQsYyksZD1lW2NdfHx7fTtmdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGkuY29lcmNlKGQsdSxsLGUsdCl9aWYoITEhPT1mKCJ2aXNpYmxlIix2b2lkIDAhPT1kLmFycmF5fHx2b2lkIDAhPT1kLnZhbHVlfHwic3FydCI9PT1kLnR5cGUpKXt2YXIgcD1mKCJ0eXBlIiwiYXJyYXkiaW4gZD8iZGF0YSI6InBlcmNlbnQiKSxoPSEwOyJzcXJ0IiE9PXAmJihoPWYoInN5bW1ldHJpYyIsISgoImRhdGEiPT09cD8iYXJyYXltaW51cyI6InZhbHVlbWludXMiKWluIGQpKSksImRhdGEiPT09cD8oZigiYXJyYXkiKSxmKCJ0cmFjZXJlZiIpLGh8fChmKCJhcnJheW1pbnVzIiksZigidHJhY2VyZWZtaW51cyIpKSk6InBlcmNlbnQiIT09cCYmImNvbnN0YW50IiE9PXB8fChmKCJ2YWx1ZSIpLGh8fGYoInZhbHVlbWludXMiKSk7dmFyIGc9ImNvcHlfIitzLmluaGVyaXQrInN0eWxlIjtpZihzLmluaGVyaXQpKHRbImVycm9yXyIrcy5pbmhlcml0XXx8e30pLnZpc2libGUmJmYoZywhKGQuY29sb3J8fG4oZC50aGlja25lc3MpfHxuKGQud2lkdGgpKSk7cy5pbmhlcml0JiZ1W2ddfHwoZigiY29sb3IiLHIpLGYoInRoaWNrbmVzcyIpLGYoIndpZHRoIixhLnRyYWNlSXModCwiZ2wzZCIpPzA6NCkpfX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjI2OCwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi9hdHRyaWJ1dGVzIjoxMjYsImZhc3QtaXNudW1lcmljIjoxN31dLDEzMDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxpPWUoIi4vYXR0cmlidXRlcyIpLG89e2Vycm9yX3g6bi5leHRlbmRGbGF0KHt9LGkpLGVycm9yX3k6bi5leHRlbmRGbGF0KHt9LGkpfTtkZWxldGUgby5lcnJvcl94LmNvcHlfenN0eWxlLGRlbGV0ZSBvLmVycm9yX3kuY29weV96c3R5bGUsZGVsZXRlIG8uZXJyb3JfeS5jb3B5X3lzdHlsZTt2YXIgbD17ZXJyb3JfeDpuLmV4dGVuZEZsYXQoe30saSksZXJyb3JfeTpuLmV4dGVuZEZsYXQoe30saSksZXJyb3JfejpuLmV4dGVuZEZsYXQoe30saSl9O2RlbGV0ZSBsLmVycm9yX3guY29weV95c3R5bGUsZGVsZXRlIGwuZXJyb3JfeS5jb3B5X3lzdHlsZSxkZWxldGUgbC5lcnJvcl96LmNvcHlfeXN0eWxlLGRlbGV0ZSBsLmVycm9yX3ouY29weV96c3R5bGUsdC5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImVycm9yYmFycyIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6byxiYXI6byxoaXN0b2dyYW06byxzY2F0dGVyM2Q6YShsLCJjYWxjIiwibmVzdGVkIiksc2NhdHRlcmdsOmEobywiY2FsYyIsIm5lc3RlZCIpfX0sc3VwcGx5RGVmYXVsdHM6ZSgiLi9kZWZhdWx0cyIpLGNhbGM6ZSgiLi9jYWxjIiksbWFrZUNvbXB1dGVFcnJvcjplKCIuL2NvbXB1dGVfZXJyb3IiKSxwbG90OmUoIi4vcGxvdCIpLHN0eWxlOmUoIi4vc3R5bGUiKSxob3ZlckluZm86ZnVuY3Rpb24oZSx0LHIpeyh0LmVycm9yX3l8fHt9KS52aXNpYmxlJiYoci55ZXJyPWUueWgtZS55LHQuZXJyb3JfeS5zeW1tZXRyaWN8fChyLnllcnJuZWc9ZS55LWUueXMpKTsodC5lcnJvcl94fHx7fSkudmlzaWJsZSYmKHIueGVycj1lLnhoLWUueCx0LmVycm9yX3guc3ltbWV0cmljfHwoci54ZXJybmVnPWUueC1lLnhzKSl9fX0seyIuLi8uLi9saWIiOjIzMiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6MjYxLCIuL2F0dHJpYnV0ZXMiOjEyNiwiLi9jYWxjIjoxMjcsIi4vY29tcHV0ZV9lcnJvciI6MTI4LCIuL2RlZmF1bHRzIjoxMjksIi4vcGxvdCI6MTMxLCIuL3N0eWxlIjoxMzJ9XSwxMzE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgiZmFzdC1pc251bWVyaWMiKSxpPWUoIi4uL2RyYXdpbmciKSxvPWUoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGwpe3ZhciBzPXIueGF4aXMsYz1yLnlheGlzLHU9bCYmbC5kdXJhdGlvbj4wO3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGQsZj10WzBdLnRyYWNlLHA9Zi5lcnJvcl94fHx7fSxoPWYuZXJyb3JfeXx8e307Zi5pZHMmJihkPWZ1bmN0aW9uKGUpe3JldHVybiBlLmlkfSk7dmFyIGc9by5oYXNNYXJrZXJzKGYpJiZmLm1hcmtlci5tYXhkaXNwbGF5ZWQ+MDtoLnZpc2libGV8fHAudmlzaWJsZXx8KHQ9W10pO3ZhciBtPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5lcnJvcmJhciIpLmRhdGEodCxkKTtpZihtLmV4aXQoKS5yZW1vdmUoKSx0Lmxlbmd0aCl7cC52aXNpYmxlfHxtLnNlbGVjdEFsbCgicGF0aC54ZXJyb3IiKS5yZW1vdmUoKSxoLnZpc2libGV8fG0uc2VsZWN0QWxsKCJwYXRoLnllcnJvciIpLnJlbW92ZSgpLG0uc3R5bGUoIm9wYWNpdHkiLDEpO3ZhciB2PW0uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJlcnJvcmJhciIsITApO3UmJnYuc3R5bGUoIm9wYWNpdHkiLDApLnRyYW5zaXRpb24oKS5kdXJhdGlvbihsLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMSksaS5zZXRDbGlwVXJsKG0sci5sYXllckNsaXBJZCxlKSxtLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLHI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXt4OnQuYzJwKGUueCkseTpyLmMycChlLnkpfTt2b2lkIDAhPT1lLnloJiYobi55aD1yLmMycChlLnloKSxuLnlzPXIuYzJwKGUueXMpLGEobi55cyl8fChuLm5vWVM9ITAsbi55cz1yLmMycChlLnlzLCEwKSkpO3ZvaWQgMCE9PWUueGgmJihuLnhoPXQuYzJwKGUueGgpLG4ueHM9dC5jMnAoZS54cyksYShuLnhzKXx8KG4ubm9YUz0hMCxuLnhzPXQuYzJwKGUueHMsITApKSk7cmV0dXJuIG59KGUscyxjKTtpZighZ3x8ZS52aXMpe3ZhciBpLG89dC5zZWxlY3QoInBhdGgueWVycm9yIik7aWYoaC52aXNpYmxlJiZhKHIueCkmJmEoci55aCkmJmEoci55cykpe3ZhciBkPWgud2lkdGg7aT0iTSIrKHIueC1kKSsiLCIrci55aCsiaCIrMipkKyJtLSIrZCsiLDBWIityLnlzLHIubm9ZU3x8KGkrPSJtLSIrZCsiLDBoIisyKmQpLCFvLnNpemUoKT9vPXQuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jbGFzc2VkKCJ5ZXJyb3IiLCEwKTp1JiYobz1vLnRyYW5zaXRpb24oKS5kdXJhdGlvbihsLmR1cmF0aW9uKS5lYXNlKGwuZWFzaW5nKSksby5hdHRyKCJkIixpKX1lbHNlIG8ucmVtb3ZlKCk7dmFyIGY9dC5zZWxlY3QoInBhdGgueGVycm9yIik7aWYocC52aXNpYmxlJiZhKHIueSkmJmEoci54aCkmJmEoci54cykpe3ZhciBtPShwLmNvcHlfeXN0eWxlP2g6cCkud2lkdGg7aT0iTSIrci54aCsiLCIrKHIueS1tKSsidiIrMiptKyJtMCwtIittKyJIIityLnhzLHIubm9YU3x8KGkrPSJtMCwtIittKyJ2IisyKm0pLCFmLnNpemUoKT9mPXQuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jbGFzc2VkKCJ4ZXJyb3IiLCEwKTp1JiYoZj1mLnRyYW5zaXRpb24oKS5kdXJhdGlvbihsLmR1cmF0aW9uKS5lYXNlKGwuZWFzaW5nKSksZi5hdHRyKCJkIixpKX1lbHNlIGYucmVtb3ZlKCl9fSkpfX0pKX19LHsiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjM4MywiLi4vZHJhd2luZyI6MTI0LCJAcGxvdGx5L2QzIjoxMSwiZmFzdC1pc251bWVyaWMiOjE3fV0sMTMyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4uL2NvbG9yIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2UuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50cmFjZSxyPXQuZXJyb3JfeXx8e30saT10LmVycm9yX3h8fHt9LG89bi5zZWxlY3QodGhpcyk7by5zZWxlY3RBbGwoInBhdGgueWVycm9yIikuc3R5bGUoInN0cm9rZS13aWR0aCIsci50aGlja25lc3MrInB4IikuY2FsbChhLnN0cm9rZSxyLmNvbG9yKSxpLmNvcHlfeXN0eWxlJiYoaT1yKSxvLnNlbGVjdEFsbCgicGF0aC54ZXJyb3IiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixpLnRoaWNrbmVzcysicHgiKS5jYWxsKGEuc3Ryb2tlLGkuY29sb3IpfSkpfX0seyIuLi9jb2xvciI6MTAyLCJAcGxvdGx5L2QzIjoxMX1dLDEzMzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPWUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKS5ob3ZlcmxhYmVsLGk9ZSgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7dC5leHBvcnRzPXtob3ZlcmxhYmVsOntiZ2NvbG9yOmkoe30sYS5iZ2NvbG9yLHthcnJheU9rOiEwfSksYm9yZGVyY29sb3I6aSh7fSxhLmJvcmRlcmNvbG9yLHthcnJheU9rOiEwfSksZm9udDpuKHthcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0pLGFsaWduOmkoe30sYS5hbGlnbix7YXJyYXlPazohMH0pLG5hbWVsZW5ndGg6aSh7fSxhLm5hbWVsZW5ndGgse2FycmF5T2s6ITB9KSxlZGl0VHlwZToibm9uZSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjoyMjYsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6MzEwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxNDN9XSwxMzQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIGkoZSx0LHIsYSl7YT1hfHxuLmlkZW50aXR5LEFycmF5LmlzQXJyYXkoZSkmJih0WzBdW3JdPWEoZSkpfXQuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLmNhbGNkYXRhLHI9ZS5fZnVsbExheW91dDtmdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzp0fSx7X21vZHVsZTplLl9tb2R1bGV9LHIpfX1mb3IodmFyIGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIHM9dFtsXSxjPXNbMF0udHJhY2U7aWYoIWEudHJhY2VJcyhjLCJwaWUtbGlrZSIpKXt2YXIgdT1hLnRyYWNlSXMoYywiMmRNYXAiKT9pOm4uZmlsbEFycmF5O3UoYy5ob3ZlcmluZm8scywiaGkiLG8oYykpLGMuaG92ZXJ0ZW1wbGF0ZSYmdShjLmhvdmVydGVtcGxhdGUscywiaHQiKSxjLmhvdmVybGFiZWwmJih1KGMuaG92ZXJsYWJlbC5iZ2NvbG9yLHMsImhiZyIpLHUoYy5ob3ZlcmxhYmVsLmJvcmRlcmNvbG9yLHMsImhiYyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuc2l6ZSxzLCJodHMiKSx1KGMuaG92ZXJsYWJlbC5mb250LmNvbG9yLHMsImh0YyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuZmFtaWx5LHMsImh0ZiIpLHUoYy5ob3ZlcmxhYmVsLm5hbWVsZW5ndGgscywiaG5sIiksdShjLmhvdmVybGFiZWwuYWxpZ24scywiaHRhIikpfX19fSx7Ii4uLy4uL2xpYiI6MjMyLCIuLi8uLi9yZWdpc3RyeSI6MzE4fV0sMTM1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3JlZ2lzdHJ5IiksYT1lKCIuL2hvdmVyIikuaG92ZXI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1uLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJvbkNsaWNrIikoZSxlLl9ob3ZlcmRhdGEpO2Z1bmN0aW9uIG8oKXtlLmVtaXQoInBsb3RseV9jbGljayIse3BvaW50czplLl9ob3ZlcmRhdGEsZXZlbnQ6dH0pfXZvaWQgMCE9PXImJmEoZSx0LHIsITApLGUuX2hvdmVyZGF0YSYmdCYmdC50YXJnZXQmJihpJiZpLnRoZW4/aS50aGVuKG8pOm8oKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4vaG92ZXIiOjEzOX1dLDEzNjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e1lBTkdMRTo2MCxIT1ZFUkFSUk9XU0laRTo2LEhPVkVSVEVYVFBBRDozLEhPVkVSRk9OVFNJWkU6MTMsSE9WRVJGT05UOiJBcmlhbCwgc2Fucy1zZXJpZiIsSE9WRVJNSU5USU1FOjUwLEhPVkVSSUQ6Ii1ob3ZlciJ9fSx7fV0sMTM3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi9hdHRyaWJ1dGVzIiksaT1lKCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbyl7dmFyIGw9bi5leHRlbmRGbGF0KHt9LG8uaG92ZXJsYWJlbCk7dC5ob3ZlcnRlbXBsYXRlJiYobC5uYW1lbGVuZ3RoPS0xKSxpKGUsdCwoZnVuY3Rpb24ocixpKXtyZXR1cm4gbi5jb2VyY2UoZSx0LGEscixpKX0pLGwpfX0seyIuLi8uLi9saWIiOjIzMiwiLi9hdHRyaWJ1dGVzIjoxMzMsIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyI6MTQwfV0sMTM4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpO3IuZ2V0U3VicGxvdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5zdWJwbG90fHxlLnhheGlzK2UueWF4aXN8fGUuZ2VvfSxyLmlzVHJhY2VJblN1YnBsb3RzPWZ1bmN0aW9uKGUsdCl7aWYoInNwbG9tIj09PWUudHlwZSl7Zm9yKHZhciBuPWUueGF4ZXN8fFtdLGE9ZS55YXhlc3x8W10saT0wO2k8bi5sZW5ndGg7aSsrKWZvcih2YXIgbz0wO288YS5sZW5ndGg7bysrKWlmKC0xIT09dC5pbmRleE9mKG5baV0rYVtvXSkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuLTEhPT10LmluZGV4T2Yoci5nZXRTdWJwbG90KGUpKX0sci5mbGF0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj0wO248ZS5sZW5ndGg7bisrKXJbbl09dDtyZXR1cm4gcn0sci5wMmM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxuPTA7bjxlLmxlbmd0aDtuKyspcltuXT1lW25dLnAyYyh0KTtyZXR1cm4gcn0sci5nZXREaXN0YW5jZUZ1bmN0aW9uPWZ1bmN0aW9uKGUsdCxuLGEpe3JldHVybiJjbG9zZXN0Ij09PWU/YXx8ci5xdWFkcmF0dXJlKHQsbik6IngiPT09ZS5jaGFyQXQoMCk/dDpufSxyLmdldENsb3Nlc3Q9ZnVuY3Rpb24oZSx0LHIpe2lmKCExIT09ci5pbmRleClyLmluZGV4Pj0wJiZyLmluZGV4PGUubGVuZ3RoP3IuZGlzdGFuY2U9MDpyLmluZGV4PSExO2Vsc2UgZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPXQoZVtuXSk7YTw9ci5kaXN0YW5jZSYmKHIuaW5kZXg9bixyLmRpc3RhbmNlPWEpfXJldHVybiByfSxyLmluYm94PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZSp0PDB8fDA9PT1lP3I6MS8wfSxyLnF1YWRyYXR1cmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49ZShyKSxhPXQocik7cmV0dXJuIE1hdGguc3FydChuKm4rYSphKX19LHIubWFrZUV2ZW50RGF0YT1mdW5jdGlvbihlLHQsbil7dmFyIGE9ImluZGV4ImluIGU/ZS5pbmRleDplLnBvaW50TnVtYmVyLGk9e2RhdGE6dC5faW5wdXQsZnVsbERhdGE6dCxjdXJ2ZU51bWJlcjp0LmluZGV4LHBvaW50TnVtYmVyOmF9O2lmKHQuX2luZGV4VG9Qb2ludHMpe3ZhciBvPXQuX2luZGV4VG9Qb2ludHNbYV07MT09PW8ubGVuZ3RoP2kucG9pbnRJbmRleD1vWzBdOmkucG9pbnRJbmRpY2VzPW99ZWxzZSBpLnBvaW50SW5kZXg9YTtyZXR1cm4gdC5fbW9kdWxlLmV2ZW50RGF0YT9pPXQuX21vZHVsZS5ldmVudERhdGEoaSxlLHQsbixhKTooInhWYWwiaW4gZT9pLng9ZS54VmFsOiJ4ImluIGUmJihpLng9ZS54KSwieVZhbCJpbiBlP2kueT1lLnlWYWw6InkiaW4gZSYmKGkueT1lLnkpLGUueGEmJihpLnhheGlzPWUueGEpLGUueWEmJihpLnlheGlzPWUueWEpLHZvaWQgMCE9PWUuekxhYmVsVmFsJiYoaS56PWUuekxhYmVsVmFsKSksci5hcHBlbmRBcnJheVBvaW50VmFsdWUoaSx0LGEpLGl9LHIuYXBwZW5kQXJyYXlQb2ludFZhbHVlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10Ll9hcnJheUF0dHJzO2lmKGEpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBzPWFbbF0sYz1pKHMpO2lmKHZvaWQgMD09PWVbY10pe3ZhciB1PW8obi5uZXN0ZWRQcm9wZXJ0eSh0LHMpLmdldCgpLHIpO3ZvaWQgMCE9PXUmJihlW2NdPXUpfX19LHIuYXBwZW5kQXJyYXlNdWx0aVBvaW50VmFsdWVzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10Ll9hcnJheUF0dHJzO2lmKGEpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBzPWFbbF0sYz1pKHMpO2lmKHZvaWQgMD09PWVbY10pe2Zvcih2YXIgdT1uLm5lc3RlZFByb3BlcnR5KHQscykuZ2V0KCksZD1uZXcgQXJyYXkoci5sZW5ndGgpLGY9MDtmPHIubGVuZ3RoO2YrKylkW2ZdPW8odSxyW2ZdKTtlW2NdPWR9fX07dmFyIGE9e2lkczoiaWQiLGxvY2F0aW9uczoibG9jYXRpb24iLGxhYmVsczoibGFiZWwiLHZhbHVlczoidmFsdWUiLCJtYXJrZXIuY29sb3JzIjoiY29sb3IiLHBhcmVudHM6InBhcmVudCJ9O2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGFbZV18fGV9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP0FycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkoZVt0WzBdXSk/ZVt0WzBdXVt0WzFdXTp2b2lkIDA6ZVt0XX12YXIgbD17eDohMCx5OiEwfSxzPXsieCB1bmlmaWVkIjohMCwieSB1bmlmaWVkIjohMH07ci5pc1VuaWZpZWRIb3Zlcj1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJiEhc1tlXX0sci5pc1hZaG92ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYhIWxbZV19fSx7Ii4uLy4uL2xpYiI6MjMyfV0sMTM5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoImZhc3QtaXNudW1lcmljIiksaT1lKCJ0aW55Y29sb3IyIiksbz1lKCIuLi8uLi9saWIiKSxsPW8uc3RyVHJhbnNsYXRlLHM9by5zdHJSb3RhdGUsYz1lKCIuLi8uLi9saWIvZXZlbnRzIiksdT1lKCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxkPWUoIi4uLy4uL2xpYi9vdmVycmlkZV9jdXJzb3IiKSxmPWUoIi4uL2RyYXdpbmciKSxwPWUoIi4uL2NvbG9yIiksaD1lKCIuLi9kcmFnZWxlbWVudCIpLGc9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxtPWUoIi4uLy4uL3JlZ2lzdHJ5Iiksdj1lKCIuL2hlbHBlcnMiKSx5PWUoIi4vY29uc3RhbnRzIikseD1lKCIuLi9sZWdlbmQvZGVmYXVsdHMiKSxiPWUoIi4uL2xlZ2VuZC9kcmF3IiksXz15LllBTkdMRSx3PU1hdGguUEkqXy8xODAsVD0xL01hdGguc2luKHcpLE09TWF0aC5jb3Modyksaz1NYXRoLnNpbih3KSxBPXkuSE9WRVJBUlJPV1NJWkUsTD15LkhPVkVSVEVYVFBBRCxTPXtib3g6ITAsb2hsYzohMCx2aW9saW46ITAsY2FuZGxlc3RpY2s6ITB9LEQ9e3NjYXR0ZXI6ITAsc2NhdHRlcmdsOiEwLHNwbG9tOiEwfTtmdW5jdGlvbiBDKGUpe3JldHVybltlLnRyYWNlLmluZGV4LGUuaW5kZXgsZS54MCxlLnkwLGUubmFtZSxlLmF0dHIsZS54YT9lLnhhLl9pZDoiIixlLnlhP2UueWEuX2lkOiIiXS5qb2luKCIsIil9ci5ob3Zlcj1mdW5jdGlvbihlLHQscixpKXtlPW8uZ2V0R3JhcGhEaXYoZSk7dmFyIGw9dC50YXJnZXQ7by50aHJvdHRsZShlLl9mdWxsTGF5b3V0Ll91aWQreS5IT1ZFUklELHkuSE9WRVJNSU5USU1FLChmdW5jdGlvbigpeyFmdW5jdGlvbihlLHQscixpLGwpe3J8fChyPSJ4eSIpO3ZhciBzPUFycmF5LmlzQXJyYXkocik/cjpbcl0sdT1lLl9mdWxsTGF5b3V0LGY9dS5fcGxvdHN8fFtdLGc9ZltyXSx5PXUuX2hhcygiY2FydGVzaWFuIik7aWYoZyl7dmFyIHg9Zy5vdmVybGF5cy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkfSkpO3M9cy5jb25jYXQoeCl9Zm9yKHZhciBiPXMubGVuZ3RoLF89bmV3IEFycmF5KGIpLHc9bmV3IEFycmF5KGIpLE09ITEsaz0wO2s8YjtrKyspe3ZhciBBPXNba107aWYoZltBXSlNPSEwLF9ba109ZltBXS54YXhpcyx3W2tdPWZbQV0ueWF4aXM7ZWxzZXtpZighdVtBXXx8IXVbQV0uX3N1YnBsb3QpcmV0dXJuIHZvaWQgby53YXJuKCJVbnJlY29nbml6ZWQgc3VicGxvdDogIitBKTt2YXIgTD11W0FdLl9zdWJwbG90O19ba109TC54YXhpcyx3W2tdPUwueWF4aXN9fXZhciBPPXQuaG92ZXJtb2RlfHx1LmhvdmVybW9kZTtPJiYhTSYmKE89ImNsb3Nlc3QiKTtpZigtMT09PVsieCIsInkiLCJjbG9zZXN0IiwieCB1bmlmaWVkIiwieSB1bmlmaWVkIl0uaW5kZXhPZihPKXx8IWUuY2FsY2RhdGF8fGUucXVlcnlTZWxlY3RvcigiLnpvb21ib3giKXx8ZS5fZHJhZ2dpbmcpcmV0dXJuIGgudW5ob3ZlclJhdyhlLHQpO3ZhciBJPXUuaG92ZXJkaXN0YW5jZTstMT09PUkmJihJPTEvMCk7dmFyIEU9dS5zcGlrZWRpc3RhbmNlOy0xPT09RSYmKEU9MS8wKTt2YXIgWSxWLFUscSxHLFosVyxYLEosUSxLLCQsZWUsdGU9W10scmU9W10sbmU9e2hMaW5lUG9pbnQ6bnVsbCx2TGluZVBvaW50Om51bGx9LGFlPSExO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKE89ImFycmF5IixVPTA7VTx0Lmxlbmd0aDtVKyspKEc9ZS5jYWxjZGF0YVt0W1VdLmN1cnZlTnVtYmVyfHwwXSkmJihaPUdbMF0udHJhY2UsInNraXAiIT09R1swXS50cmFjZS5ob3ZlcmluZm8mJihyZS5wdXNoKEcpLCJoIj09PVoub3JpZW50YXRpb24mJihhZT0hMCkpKTtlbHNle2ZvcihxPTA7cTxlLmNhbGNkYXRhLmxlbmd0aDtxKyspRz1lLmNhbGNkYXRhW3FdLCJza2lwIiE9PShaPUdbMF0udHJhY2UpLmhvdmVyaW5mbyYmdi5pc1RyYWNlSW5TdWJwbG90cyhaLHMpJiYocmUucHVzaChHKSwiaCI9PT1aLm9yaWVudGF0aW9uJiYoYWU9ITApKTt2YXIgaWUsb2U7aWYoIWwpaWU9InhweCJpbiB0P3QueHB4Ol9bMF0uX2xlbmd0aC8yLG9lPSJ5cHgiaW4gdD90LnlweDp3WzBdLl9sZW5ndGgvMjtlbHNle2lmKCExPT09Yy50cmlnZ2VySGFuZGxlcihlLCJwbG90bHlfYmVmb3JlaG92ZXIiLHQpKXJldHVybjt2YXIgbGU9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZT10LmNsaWVudFgtbGUubGVmdCxvZT10LmNsaWVudFktbGUudG9wLHUuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKGUpO3ZhciBzZT1vLmFwcGx5M0RUcmFuc2Zvcm0odS5faW52VHJhbnNmb3JtKShpZSxvZSk7aWYoaWU9c2VbMF0sb2U9c2VbMV0saWU8MHx8aWU+X1swXS5fbGVuZ3RofHxvZTwwfHxvZT53WzBdLl9sZW5ndGgpcmV0dXJuIGgudW5ob3ZlclJhdyhlLHQpfWlmKHQucG9pbnRlclg9aWUrX1swXS5fb2Zmc2V0LHQucG9pbnRlclk9b2Urd1swXS5fb2Zmc2V0LFk9Inh2YWwiaW4gdD92LmZsYXQocyx0Lnh2YWwpOnYucDJjKF8saWUpLFY9Inl2YWwiaW4gdD92LmZsYXQocyx0Lnl2YWwpOnYucDJjKHcsb2UpLCFhKFlbMF0pfHwhYShWWzBdKSlyZXR1cm4gby53YXJuKCJGeC5ob3ZlciBmYWlsZWQiLHQsZSksaC51bmhvdmVyUmF3KGUsdCl9dmFyIGNlPTEvMDtmdW5jdGlvbiB1ZShlLHIpe2ZvcihxPTA7cTxyZS5sZW5ndGg7cSsrKWlmKChHPXJlW3FdKSYmR1swXSYmR1swXS50cmFjZSYmITA9PT0oWj1HWzBdLnRyYWNlKS52aXNpYmxlJiYwIT09Wi5fbGVuZ3RoJiYtMT09PVsiY2FycGV0IiwiY29udG91cmNhcnBldCJdLmluZGV4T2YoWi5fbW9kdWxlLm5hbWUpKXtpZigic3Bsb20iPT09Wi50eXBlP1c9c1tYPTBdOihXPXYuZ2V0U3VicGxvdChaKSxYPXMuaW5kZXhPZihXKSksSj1PLHYuaXNVbmlmaWVkSG92ZXIoSikmJihKPUouY2hhckF0KDApKSwkPXtjZDpHLHRyYWNlOloseGE6X1tYXSx5YTp3W1hdLG1heEhvdmVyRGlzdGFuY2U6SSxtYXhTcGlrZURpc3RhbmNlOkUsaW5kZXg6ITEsZGlzdGFuY2U6TWF0aC5taW4oY2UsSSksc3Bpa2VEaXN0YW5jZToxLzAseFNwaWtlOnZvaWQgMCx5U3Bpa2U6dm9pZCAwLGNvbG9yOnAuZGVmYXVsdExpbmUsbmFtZTpaLm5hbWUseDA6dm9pZCAwLHgxOnZvaWQgMCx5MDp2b2lkIDAseTE6dm9pZCAwLHhMYWJlbFZhbDp2b2lkIDAseUxhYmVsVmFsOnZvaWQgMCx6TGFiZWxWYWw6dm9pZCAwLHRleHQ6dm9pZCAwfSx1W1ddJiYoJC5zdWJwbG90PXVbV10uX3N1YnBsb3QpLHUuX3NwbG9tU2NlbmVzJiZ1Ll9zcGxvbVNjZW5lc1taLnVpZF0mJigkLnNjZW5lPXUuX3NwbG9tU2NlbmVzW1oudWlkXSksZWU9dGUubGVuZ3RoLCJhcnJheSI9PT1KKXt2YXIgbj10W3FdOyJwb2ludE51bWJlciJpbiBuPygkLmluZGV4PW4ucG9pbnROdW1iZXIsSj0iY2xvc2VzdCIpOihKPSIiLCJ4dmFsImluIG4mJihRPW4ueHZhbCxKPSJ4IiksInl2YWwiaW4gbiYmKEs9bi55dmFsLEo9Sj8iY2xvc2VzdCI6InkiKSl9ZWxzZSB2b2lkIDAhPT1lJiZ2b2lkIDAhPT1yPyhRPWUsSz1yKTooUT1ZW1hdLEs9VltYXSk7aWYoMCE9PUkpaWYoWi5fbW9kdWxlJiZaLl9tb2R1bGUuaG92ZXJQb2ludHMpe3ZhciBpPVouX21vZHVsZS5ob3ZlclBvaW50cygkLFEsSyxKLHtmaW5pdGVSYW5nZTohMCxob3ZlckxheWVyOnUuX2hvdmVybGF5ZXJ9KTtpZihpKWZvcih2YXIgbCxjPTA7YzxpLmxlbmd0aDtjKyspbD1pW2NdLGEobC54MCkmJmEobC55MCkmJnRlLnB1c2goeihsLE8pKX1lbHNlIG8ubG9nKCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSBpbiBob3ZlcjoiLFopO2lmKCJjbG9zZXN0Ij09PU8mJnRlLmxlbmd0aD5lZSYmKHRlLnNwbGljZSgwLGVlKSxjZT10ZVswXS5kaXN0YW5jZSkseSYmMCE9PUUmJjA9PT10ZS5sZW5ndGgpeyQuZGlzdGFuY2U9RSwkLmluZGV4PSExO3ZhciBkPVouX21vZHVsZS5ob3ZlclBvaW50cygkLFEsSywiY2xvc2VzdCIse2hvdmVyTGF5ZXI6dS5faG92ZXJsYXllcn0pO2lmKGQmJihkPWQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGlrZURpc3RhbmNlPD1FfSkpKSxkJiZkLmxlbmd0aCl7dmFyIGYsaD1kLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUueGEuc2hvd3NwaWtlcyYmImhvdmVyZWQgZGF0YSIhPT1lLnhhLnNwaWtlc25hcH0pKTtpZihoLmxlbmd0aCl7dmFyIGc9aFswXTthKGcueDApJiZhKGcueTApJiYoZj1mZShnKSwoIW5lLnZMaW5lUG9pbnR8fG5lLnZMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT5mLnNwaWtlRGlzdGFuY2UpJiYobmUudkxpbmVQb2ludD1mKSl9dmFyIG09ZC5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnlhLnNob3dzcGlrZXMmJiJob3ZlcmVkIGRhdGEiIT09ZS55YS5zcGlrZXNuYXB9KSk7aWYobS5sZW5ndGgpe3ZhciB4PW1bMF07YSh4LngwKSYmYSh4LnkwKSYmKGY9ZmUoeCksKCFuZS5oTGluZVBvaW50fHxuZS5oTGluZVBvaW50LnNwaWtlRGlzdGFuY2U+Zi5zcGlrZURpc3RhbmNlKSYmKG5lLmhMaW5lUG9pbnQ9ZikpfX19fX1mdW5jdGlvbiBkZShlLHQscil7Zm9yKHZhciBuLGE9bnVsbCxpPTEvMCxvPTA7bzxlLmxlbmd0aDtvKyspbj1lW29dLnNwaWtlRGlzdGFuY2UsciYmMD09PW8mJihuPS0xLzApLG48PWkmJm48PXQmJihhPWVbb10saT1uKTtyZXR1cm4gYX1mdW5jdGlvbiBmZShlKXtyZXR1cm4gZT97eGE6ZS54YSx5YTplLnlhLHg6dm9pZCAwIT09ZS54U3Bpa2U/ZS54U3Bpa2U6KGUueDArZS54MSkvMix5OnZvaWQgMCE9PWUueVNwaWtlP2UueVNwaWtlOihlLnkwK2UueTEpLzIsZGlzdGFuY2U6ZS5kaXN0YW5jZSxzcGlrZURpc3RhbmNlOmUuc3Bpa2VEaXN0YW5jZSxjdXJ2ZU51bWJlcjplLnRyYWNlLmluZGV4LGNvbG9yOmUuY29sb3IscG9pbnROdW1iZXI6ZS5pbmRleH06bnVsbH11ZSgpO3ZhciBwZT17ZnVsbExheW91dDp1LGNvbnRhaW5lcjp1Ll9ob3ZlcmxheWVyLGV2ZW50OnR9LGhlPWUuX3NwaWtlcG9pbnRzLGdlPXt2TGluZVBvaW50Om5lLnZMaW5lUG9pbnQsaExpbmVQb2ludDpuZS5oTGluZVBvaW50fTtlLl9zcGlrZXBvaW50cz1nZTt2YXIgbWU9ZnVuY3Rpb24oKXt0ZS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLmRpc3RhbmNlLXQuZGlzdGFuY2V9KSksdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dC5jaGFyQXQoMCksbj1bXSxhPVtdLGk9W10sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1lW29dO20udHJhY2VJcyhsLnRyYWNlLCJiYXItbGlrZSIpfHxtLnRyYWNlSXMobC50cmFjZSwiYm94LXZpb2xpbiIpP2kucHVzaChsKTpsLnRyYWNlW3IrInBlcmlvZCJdP2EucHVzaChsKTpuLnB1c2gobCl9cmV0dXJuIG4uY29uY2F0KGEpLmNvbmNhdChpKX0odGUsTyl9O21lKCk7dmFyIHZlPU8uY2hhckF0KDApLHllPSgieCI9PT12ZXx8InkiPT09dmUpJiZ0ZVswXSYmRFt0ZVswXS50cmFjZS50eXBlXTtpZih5JiYwIT09RSYmMCE9PXRlLmxlbmd0aCl7dmFyIHhlPWRlKHRlLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUueWEuc2hvd3NwaWtlc30pKSxFLHllKTtuZS5oTGluZVBvaW50PWZlKHhlKTt2YXIgYmU9ZGUodGUuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS54YS5zaG93c3Bpa2VzfSkpLEUseWUpO25lLnZMaW5lUG9pbnQ9ZmUoYmUpfWlmKDA9PT10ZS5sZW5ndGgpe3ZhciBfZT1oLnVuaG92ZXJSYXcoZSx0KTtyZXR1cm4heXx8bnVsbD09PW5lLmhMaW5lUG9pbnQmJm51bGw9PT1uZS52TGluZVBvaW50fHxGKGhlKSYmTihlLG5lLHBlKSxfZX15JiZGKGhlKSYmTihlLG5lLHBlKTtpZih2LmlzWFlob3ZlcihKKSYmMCE9PXRlWzBdLmxlbmd0aCYmInNwbG9tIiE9PXRlWzBdLnRyYWNlLnR5cGUpe3ZhciB3ZT10ZVswXSxUZT0odGU9U1t3ZS50cmFjZS50eXBlXT90ZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyYWNlLmluZGV4PT09d2UudHJhY2UuaW5kZXh9KSk6W3dlXSkubGVuZ3RoLE1lPWooIngiLHdlLHUpLGtlPWooInkiLHdlLHUpO3VlKE1lLGtlKTt2YXIgQWUsTGU9W10sU2U9e30sRGU9MCxDZT1mdW5jdGlvbihlKXt2YXIgdD1TW2UudHJhY2UudHlwZV0/QyhlKTplLnRyYWNlLmluZGV4O2lmKFNlW3RdKXt2YXIgcj1TZVt0XS0xLG49TGVbcl07cj4wJiZNYXRoLmFicyhlLmRpc3RhbmNlKTxNYXRoLmFicyhuLmRpc3RhbmNlKSYmKExlW3JdPWUpfWVsc2UgRGUrKyxTZVt0XT1EZSxMZS5wdXNoKGUpfTtmb3IoQWU9MDtBZTxUZTtBZSsrKUNlKHRlW0FlXSk7Zm9yKEFlPXRlLmxlbmd0aC0xO0FlPlRlLTE7QWUtLSlDZSh0ZVtBZV0pO3RlPUxlLG1lKCl9dmFyIE9lPWUuX2hvdmVyZGF0YSxQZT1bXSxJZT1IKGUpLFJlPUIoZSk7Zm9yKFU9MDtVPHRlLmxlbmd0aDtVKyspe3ZhciB6ZT10ZVtVXSxOZT12Lm1ha2VFdmVudERhdGEoemUsemUudHJhY2UsemUuY2QpO2lmKCExIT09emUuaG92ZXJ0ZW1wbGF0ZSl7dmFyIEZlPSExO3plLmNkW3plLmluZGV4XSYmemUuY2RbemUuaW5kZXhdLmh0JiYoRmU9emUuY2RbemUuaW5kZXhdLmh0KSx6ZS5ob3ZlcnRlbXBsYXRlPUZlfHx6ZS50cmFjZS5ob3ZlcnRlbXBsYXRlfHwhMX1pZih6ZS54YSYmemUueWEpe3ZhciBFZT16ZS54MCt6ZS54YS5fb2Zmc2V0LGplPXplLngxK3plLnhhLl9vZmZzZXQsSGU9emUueTAremUueWEuX29mZnNldCxCZT16ZS55MSt6ZS55YS5fb2Zmc2V0LFllPU1hdGgubWluKEVlLGplKSxWZT1NYXRoLm1heChFZSxqZSksVWU9TWF0aC5taW4oSGUsQmUpLHFlPU1hdGgubWF4KEhlLEJlKTtOZS5iYm94PXt4MDpZZStSZSx4MTpWZStSZSx5MDpVZStJZSx5MTpxZStJZX19emUuZXZlbnREYXRhPVtOZV0sUGUucHVzaChOZSl9ZS5faG92ZXJkYXRhPVBlO3ZhciBHZT0ieSI9PT1PJiYocmUubGVuZ3RoPjF8fHRlLmxlbmd0aD4xKXx8ImNsb3Nlc3QiPT09TyYmYWUmJnRlLmxlbmd0aD4xLFplPXAuY29tYmluZSh1LnBsb3RfYmdjb2xvcnx8cC5iYWNrZ3JvdW5kLHUucGFwZXJfYmdjb2xvciksV2U9UCh0ZSx7Z2Q6ZSxob3Zlcm1vZGU6Tyxyb3RhdGVMYWJlbHM6R2UsYmdDb2xvcjpaZSxjb250YWluZXI6dS5faG92ZXJsYXllcixvdXRlckNvbnRhaW5lcjp1Ll9wYXBlci5ub2RlKCksY29tbW9uTGFiZWxPcHRzOnUuaG92ZXJsYWJlbCxob3ZlcmRpc3RhbmNlOnUuaG92ZXJkaXN0YW5jZX0pO3YuaXNVbmlmaWVkSG92ZXIoTyl8fCghZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvLGwscyxjLHU9MCxkPTEsZj1lLnNpemUoKSxwPW5ldyBBcnJheShmKSxoPTA7ZnVuY3Rpb24gZyhlKXt2YXIgdD1lWzBdLHI9ZVtlLmxlbmd0aC0xXTtpZihhPXQucG1pbi10LnBvcy10LmRwK3Quc2l6ZSxpPXIucG9zK3IuZHArci5zaXplLXQucG1heCxhPi4wMSl7Zm9yKGw9ZS5sZW5ndGgtMTtsPj0wO2wtLSllW2xdLmRwKz1hO249ITF9aWYoIShpPC4wMSkpe2lmKGE8LS4wMSl7Zm9yKGw9ZS5sZW5ndGgtMTtsPj0wO2wtLSllW2xdLmRwLT1pO249ITF9aWYobil7dmFyIGM9MDtmb3Iobz0wO288ZS5sZW5ndGg7bysrKShzPWVbb10pLnBvcytzLmRwK3Muc2l6ZT50LnBtYXgmJmMrKztmb3Iobz1lLmxlbmd0aC0xO28+PTAmJiEoYzw9MCk7by0tKShzPWVbb10pLnBvcz50LnBtYXgtMSYmKHMuZGVsPSEwLGMtLSk7Zm9yKG89MDtvPGUubGVuZ3RoJiYhKGM8PTApO28rKylpZigocz1lW29dKS5wb3M8dC5wbWluKzEpZm9yKHMuZGVsPSEwLGMtLSxpPTIqcy5zaXplLGw9ZS5sZW5ndGgtMTtsPj0wO2wtLSllW2xdLmRwLT1pO2ZvcihvPWUubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKHM9ZVtvXSkucG9zK3MuZHArcy5zaXplPnQucG1heCYmKHMuZGVsPSEwLGMtLSl9fX1lLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPWVbdF0sYT0ieCI9PT1uLl9pZC5jaGFyQXQoMCksaT1uLnJhbmdlOzA9PT1oJiZpJiZpWzBdPmlbMV0hPT1hJiYoZD0tMSkscFtoKytdPVt7ZGF0dW06ZSx0cmFjZUluZGV4OmUudHJhY2UuaW5kZXgsZHA6MCxwb3M6ZS5wb3MscG9zcmVmOmUucG9zcmVmLHNpemU6ZS5ieSooYT9UOjEpLzIscG1pbjowLHBtYXg6YT9yLndpZHRoOnIuaGVpZ2h0fV19KSkscC5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlWzBdLnBvc3JlZi10WzBdLnBvc3JlZnx8ZCoodFswXS50cmFjZUluZGV4LWVbMF0udHJhY2VJbmRleCl9KSk7Zm9yKDshbiYmdTw9Zjspe2Zvcih1Kyssbj0hMCxvPTA7bzxwLmxlbmd0aC0xOyl7dmFyIG09cFtvXSx2PXBbbysxXSx5PW1bbS5sZW5ndGgtMV0seD12WzBdO2lmKChhPXkucG9zK3kuZHAreS5zaXplLXgucG9zLXguZHAreC5zaXplKT4uMDEmJnkucG1pbj09PXgucG1pbiYmeS5wbWF4PT09eC5wbWF4KXtmb3IobD12Lmxlbmd0aC0xO2w+PTA7bC0tKXZbbF0uZHArPWE7Zm9yKG0ucHVzaC5hcHBseShtLHYpLHAuc3BsaWNlKG8rMSwxKSxjPTAsbD1tLmxlbmd0aC0xO2w+PTA7bC0tKWMrPW1bbF0uZHA7Zm9yKGk9Yy9tLmxlbmd0aCxsPW0ubGVuZ3RoLTE7bD49MDtsLS0pbVtsXS5kcC09aTtuPSExfWVsc2UgbysrfXAuZm9yRWFjaChnKX1mb3Iobz1wLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgYj1wW29dO2ZvcihsPWIubGVuZ3RoLTE7bD49MDtsLS0pe3ZhciBfPWJbbF0sdz1fLmRhdHVtO3cub2Zmc2V0PV8uZHAsdy5kZWw9Xy5kZWx9fX0oV2UsR2U/InhhIjoieWEiLHUpLFIoV2UsR2UsdS5faW52U2NhbGVYLHUuX2ludlNjYWxlWSkpO2lmKGwmJmwudGFnTmFtZSl7dmFyIFhlPW0uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImhhc0NsaWNrVG9TaG93IikoZSxQZSk7ZChuLnNlbGVjdChsKSxYZT8icG9pbnRlciI6IiIpfWlmKCFsfHxpfHwhZnVuY3Rpb24oZSx0LHIpe2lmKCFyfHxyLmxlbmd0aCE9PWUuX2hvdmVyZGF0YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBuPXIubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBhPXJbbl0saT1lLl9ob3ZlcmRhdGFbbl07aWYoYS5jdXJ2ZU51bWJlciE9PWkuY3VydmVOdW1iZXJ8fFN0cmluZyhhLnBvaW50TnVtYmVyKSE9PVN0cmluZyhpLnBvaW50TnVtYmVyKXx8U3RyaW5nKGEucG9pbnROdW1iZXJzKSE9PVN0cmluZyhpLnBvaW50TnVtYmVycykpcmV0dXJuITB9cmV0dXJuITF9KGUsMCxPZSkpcmV0dXJuO09lJiZlLmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6dCxwb2ludHM6T2V9KTtlLmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OnQscG9pbnRzOmUuX2hvdmVyZGF0YSx4YXhlczpfLHlheGVzOncseHZhbHM6WSx5dmFsczpWfSl9KGUsdCxyLGksbCl9KSl9LHIubG9uZUhvdmVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ITA7QXJyYXkuaXNBcnJheShlKXx8KHI9ITEsZT1bZV0pO3ZhciBhPXQuZ2QsaT1IKGEpLG89QihhKSxsPVAoZS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPWUuX3gwfHxlLngwfHxlLnh8fDAsbj1lLl94MXx8ZS54MXx8ZS54fHwwLGw9ZS5feTB8fGUueTB8fGUueXx8MCxzPWUuX3kxfHxlLnkxfHxlLnl8fDAsYz1lLmV2ZW50RGF0YTtpZihjKXt2YXIgdT1NYXRoLm1pbihyLG4pLGQ9TWF0aC5tYXgocixuKSxmPU1hdGgubWluKGwscyksaD1NYXRoLm1heChsLHMpLGc9ZS50cmFjZTtpZihtLnRyYWNlSXMoZywiZ2wzZCIpKXt2YXIgdj1hLl9mdWxsTGF5b3V0W2cuc2NlbmVdLl9zY2VuZS5jb250YWluZXIseT12Lm9mZnNldExlZnQseD12Lm9mZnNldFRvcDt1Kz15LGQrPXksZis9eCxoKz14fWMuYmJveD17eDA6dStvLHgxOmQrbyx5MDpmK2kseTE6aCtpfSx0LmluT3V0X2Jib3gmJnQuaW5PdXRfYmJveC5wdXNoKGMuYmJveCl9ZWxzZSBjPSExO3JldHVybntjb2xvcjplLmNvbG9yfHxwLmRlZmF1bHRMaW5lLHgwOmUueDB8fGUueHx8MCx4MTplLngxfHxlLnh8fDAseTA6ZS55MHx8ZS55fHwwLHkxOmUueTF8fGUueXx8MCx4TGFiZWw6ZS54TGFiZWwseUxhYmVsOmUueUxhYmVsLHpMYWJlbDplLnpMYWJlbCx0ZXh0OmUudGV4dCxuYW1lOmUubmFtZSxpZGVhbEFsaWduOmUuaWRlYWxBbGlnbixib3JkZXJDb2xvcjplLmJvcmRlckNvbG9yLGZvbnRGYW1pbHk6ZS5mb250RmFtaWx5LGZvbnRTaXplOmUuZm9udFNpemUsZm9udENvbG9yOmUuZm9udENvbG9yLG5hbWVMZW5ndGg6ZS5uYW1lTGVuZ3RoLHRleHRBbGlnbjplLnRleHRBbGlnbix0cmFjZTplLnRyYWNlfHx7aW5kZXg6MCxob3ZlcmluZm86IiJ9LHhhOntfb2Zmc2V0OjB9LHlhOntfb2Zmc2V0OjB9LGluZGV4OjAsaG92ZXJ0ZW1wbGF0ZTplLmhvdmVydGVtcGxhdGV8fCExLGhvdmVydGVtcGxhdGVMYWJlbHM6ZS5ob3ZlcnRlbXBsYXRlTGFiZWxzfHwhMSxldmVudERhdGE6Y319KSkse2dkOmEsaG92ZXJtb2RlOiJjbG9zZXN0Iixyb3RhdGVMYWJlbHM6ITEsYmdDb2xvcjp0LmJnQ29sb3J8fHAuYmFja2dyb3VuZCxjb250YWluZXI6bi5zZWxlY3QodC5jb250YWluZXIpLG91dGVyQ29udGFpbmVyOnQub3V0ZXJDb250YWluZXJ8fHQuY29udGFpbmVyfSkscz0wLGM9MDtyZXR1cm4gbC5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLnkwLXQueTB9KSkuZWFjaCgoZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnkwLWUuYnkvMjtlLm9mZnNldD1uLTU8cz9zLW4rNTowLHM9bitlLmJ5K2Uub2Zmc2V0LHI9PT10LmFuY2hvckluZGV4JiYoYz1lLm9mZnNldCl9KSkuZWFjaCgoZnVuY3Rpb24oZSl7ZS5vZmZzZXQtPWN9KSksUihsLCExLGEuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxhLl9mdWxsTGF5b3V0Ll9pbnZTY2FsZVkpLHI/bDpsLm5vZGUoKX07dmFyIE89LzxleHRyYT4oW1xzXFNdKik8XC9leHRyYT4vO2Z1bmN0aW9uIFAoZSx0KXt2YXIgcj10LmdkLGE9ci5fZnVsbExheW91dCxpPXQuaG92ZXJtb2RlLGM9dC5yb3RhdGVMYWJlbHMsZD10LmJnQ29sb3IsaD10LmNvbnRhaW5lcixnPXQub3V0ZXJDb250YWluZXIsdz10LmNvbW1vbkxhYmVsT3B0c3x8e307aWYoMD09PWUubGVuZ3RoKXJldHVybltbXV07dmFyIFQ9dC5mb250RmFtaWx5fHx5LkhPVkVSRk9OVCxNPXQuZm9udFNpemV8fHkuSE9WRVJGT05UU0laRSxrPWVbMF0sUz1rLnhhLEQ9ay55YSxPPWkuY2hhckF0KDApLFA9a1tPKyJMYWJlbCJdLFI9WShyLGcpLHo9Ui50b3AsTj1SLndpZHRoLEY9Ui5oZWlnaHQsRT12b2lkIDAhPT1QJiZrLmRpc3RhbmNlPD10LmhvdmVyZGlzdGFuY2UmJigieCI9PT1pfHwieSI9PT1pKTtpZihFKXt2YXIgaixILEI9ITA7Zm9yKGo9MDtqPGUubGVuZ3RoO2orKylpZihCJiZ2b2lkIDA9PT1lW2pdLnpMYWJlbCYmKEI9ITEpLEg9ZVtqXS5ob3ZlcmluZm98fGVbal0udHJhY2UuaG92ZXJpbmZvKXt2YXIgVj1BcnJheS5pc0FycmF5KEgpP0g6SC5zcGxpdCgiKyIpO2lmKC0xPT09Vi5pbmRleE9mKCJhbGwiKSYmLTE9PT1WLmluZGV4T2YoaSkpe0U9ITE7YnJlYWt9fUImJihFPSExKX12YXIgVT1oLnNlbGVjdEFsbCgiZy5heGlzdGV4dCIpLmRhdGEoRT9bMF06W10pO2lmKFUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzdGV4dCIsITApLFUuZXhpdCgpLnJlbW92ZSgpLFUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKSx0PW8uZW5zdXJlU2luZ2xlKGUsInBhdGgiLCIiLChmdW5jdGlvbihlKXtlLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjoiMXB4In0pfSkpLHM9by5lbnN1cmVTaW5nbGUoZSwidGV4dCIsIiIsKGZ1bmN0aW9uKGUpe2UuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksYz13LmJnY29sb3J8fHAuZGVmYXVsdExpbmUsZD13LmJvcmRlcmNvbG9yfHxwLmNvbnRyYXN0KGMpLGg9cC5jb250cmFzdChjKSxnPXtmYW1pbHk6dy5mb250LmZhbWlseXx8VCxzaXplOncuZm9udC5zaXplfHxNLGNvbG9yOncuZm9udC5jb2xvcnx8aH07dC5zdHlsZSh7ZmlsbDpjLHN0cm9rZTpkfSkscy50ZXh0KFApLmNhbGwoZi5mb250LGcpLmNhbGwodS5wb3NpdGlvblRleHQsMCwwKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHIpLGUuYXR0cigidHJhbnNmb3JtIiwiIik7dmFyIG0sdix5PVkocixzLm5vZGUoKSk7aWYoIngiPT09aSl7dmFyIHg9InRvcCI9PT1TLnNpZGU/Ii0iOiIiO3MuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKHUucG9zaXRpb25UZXh0LDAsInRvcCI9PT1TLnNpZGU/ei15LmJvdHRvbS1BLUw6ei15LnRvcCtBK0wpLG09Uy5fb2Zmc2V0KyhrLngwK2sueDEpLzIsdj1ELl9vZmZzZXQrKCJ0b3AiPT09Uy5zaWRlPzA6RC5fbGVuZ3RoKTt2YXIgYj15LndpZHRoLzIrTDttPGI/KG09Yix0LmF0dHIoImQiLCJNLSIrKGItQSkrIiwwTC0iKyhiLTIqQSkrIiwiK3grQSsiSCIrKEwreS53aWR0aC8yKSsidiIreCsoMipMK3kuaGVpZ2h0KSsiSC0iK2IrIlYiK3grQSsiWiIpKTptPmEud2lkdGgtYj8obT1hLndpZHRoLWIsdC5hdHRyKCJkIiwiTSIrKGItQSkrIiwwTCIrYisiLCIreCtBKyJ2Iit4KygyKkwreS5oZWlnaHQpKyJILSIrYisiViIreCtBKyJIIisoYi0yKkEpKyJaIikpOnQuYXR0cigiZCIsIk0wLDBMIitBKyIsIit4K0ErIkgiKyhMK3kud2lkdGgvMikrInYiK3grKDIqTCt5LmhlaWdodCkrIkgtIisoTCt5LndpZHRoLzIpKyJWIit4K0ErIkgtIitBKyJaIil9ZWxzZXt2YXIgXyxDLE87InJpZ2h0Ij09PUQuc2lkZT8oXz0ic3RhcnQiLEM9MSxPPSIiLG09Uy5fb2Zmc2V0K1MuX2xlbmd0aCk6KF89ImVuZCIsQz0tMSxPPSItIixtPVMuX29mZnNldCksdj1ELl9vZmZzZXQrKGsueTAray55MSkvMixzLmF0dHIoInRleHQtYW5jaG9yIixfKSx0LmF0dHIoImQiLCJNMCwwTCIrTytBKyIsIitBKyJWIisoTCt5LmhlaWdodC8yKSsiaCIrTysoMipMK3kud2lkdGgpKyJWLSIrKEwreS5oZWlnaHQvMikrIkgiK08rQSsiVi0iK0ErIloiKTt2YXIgSSxSPXkuaGVpZ2h0LzIsTj16LXkudG9wLVIsRj0iY2xpcCIrYS5fdWlkKyJjb21tb25sYWJlbCIrRC5faWQ7aWYobTx5LndpZHRoKzIqTCtBKXtJPSJNLSIrKEErTCkrIi0iK1IrImgtIisoeS53aWR0aC1MKSsiViIrUisiaCIrKHkud2lkdGgtTCkrIloiO3ZhciBFPXkud2lkdGgtbStMO3UucG9zaXRpb25UZXh0KHMsRSxOKSwiZW5kIj09PV8mJnMuc2VsZWN0QWxsKCJ0c3BhbiIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyksdD1mLnRlc3Rlci5hcHBlbmQoInRleHQiKS50ZXh0KGUudGV4dCgpKS5jYWxsKGYuZm9udCxnKSxhPVkocix0Lm5vZGUoKSk7TWF0aC5yb3VuZChhLndpZHRoKTxNYXRoLnJvdW5kKHkud2lkdGgpJiZlLmF0dHIoIngiLEUtYS53aWR0aCksdC5yZW1vdmUoKX0pKX1lbHNlIHUucG9zaXRpb25UZXh0KHMsQyooTCtBKSxOKSxJPW51bGw7dmFyIGo9YS5fdG9wY2xpcHMuc2VsZWN0QWxsKCIjIitGKS5kYXRhKEk/WzBdOltdKTtqLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixGKS5hcHBlbmQoInBhdGgiKSxqLmV4aXQoKS5yZW1vdmUoKSxqLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEkpLGYuc2V0Q2xpcFVybChzLEk/RjpudWxsLHIpfWUuYXR0cigidHJhbnNmb3JtIixsKG0sdikpfSkpLHYuaXNVbmlmaWVkSG92ZXIoaSkpe2guc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLnJlbW92ZSgpO3ZhciBxPWUuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4ibm9uZSIhPT1lLmhvdmVyaW5mb30pKTtpZigwPT09cS5sZW5ndGgpcmV0dXJuO3ZhciBHPWEuaG92ZXJsYWJlbCxaPUcuZm9udCxXPXtzaG93bGVnZW5kOiEwLGxlZ2VuZDp7dGl0bGU6e3RleHQ6UCxmb250Olp9LGZvbnQ6WixiZ2NvbG9yOkcuYmdjb2xvcixib3JkZXJjb2xvcjpHLmJvcmRlcmNvbG9yLGJvcmRlcndpZHRoOjEsdHJhY2Vncm91cGdhcDo3LHRyYWNlb3JkZXI6YS5sZWdlbmQ/YS5sZWdlbmQudHJhY2VvcmRlcjp2b2lkIDAsb3JpZW50YXRpb246InYifX0sWD17Zm9udDpafTt4KFcsWCxyLl9mdWxsRGF0YSk7dmFyIEo9WC5sZWdlbmQ7Si5lbnRyaWVzPVtdO2Zvcih2YXIgUT0wO1E8cS5sZW5ndGg7USsrKXt2YXIgSz1xW1FdO2lmKCJub25lIiE9PUsuaG92ZXJpbmZvKXt2YXIgJD1JKEssITAsaSxhLFApLGVlPSRbMF0sdGU9JFsxXTtLLm5hbWU9dGUsSy50ZXh0PSIiIT09dGU/dGUrIiA6ICIrZWU6ZWU7dmFyIHJlPUsuY2RbSy5pbmRleF07cmUmJihyZS5tYyYmKEsubWM9cmUubWMpLHJlLm1jYyYmKEsubWM9cmUubWNjKSxyZS5tbGMmJihLLm1sYz1yZS5tbGMpLHJlLm1sY2MmJihLLm1sYz1yZS5tbGNjKSxyZS5tbHcmJihLLm1sdz1yZS5tbHcpLHJlLm1yYyYmKEsubXJjPXJlLm1yYykscmUuZGlyJiYoSy5kaXI9cmUuZGlyKSksSy5fZGlzdGluY3Q9ITAsSi5lbnRyaWVzLnB1c2goW0tdKX19Si5lbnRyaWVzLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbMF0udHJhY2UuaW5kZXgtdFswXS50cmFjZS5pbmRleH0pKSxKLmxheWVyPWgsSi5faW5Ib3Zlcj0hMCxKLl9ncm91cFRpdGxlRm9udD1HLmdyb3VwdGl0bGVmb250LGIocixKKTt2YXIgbmUsYWUsaWUsb2UsbGU9aC5zZWxlY3QoImcubGVnZW5kIiksc2U9WShyLGxlLm5vZGUoKSksY2U9c2Uud2lkdGgrMipMLHVlPXNlLmhlaWdodCsyKkwsZGU9cVswXSxmZT0oZGUueDArZGUueDEpLzIscGU9KGRlLnkwK2RlLnkxKS8yLGhlPSEobS50cmFjZUlzKGRlLnRyYWNlLCJiYXItbGlrZSIpfHxtLnRyYWNlSXMoZGUudHJhY2UsImJveC12aW9saW4iKSk7InkiPT09Tz9oZT8oYWU9cGUtTCxuZT1wZStMKTooYWU9TWF0aC5taW4uYXBwbHkobnVsbCxxLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWluKGUueTAsZS55MSl9KSkpLG5lPU1hdGgubWF4LmFwcGx5KG51bGwscS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChlLnkwLGUueTEpfSkpKSk6YWU9bmU9by5tZWFuKHEubWFwKChmdW5jdGlvbihlKXtyZXR1cm4oZS55MCtlLnkxKS8yfSkpKS11ZS8yLCJ4Ij09PU8/aGU/KGllPWZlK0wsb2U9ZmUtTCk6KGllPU1hdGgubWF4LmFwcGx5KG51bGwscS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChlLngwLGUueDEpfSkpKSxvZT1NYXRoLm1pbi5hcHBseShudWxsLHEubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5taW4oZS54MCxlLngxKX0pKSkpOmllPW9lPW8ubWVhbihxLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKGUueDArZS54MSkvMn0pKSktY2UvMjt2YXIgZ2UsbWUsdmU9Uy5fb2Zmc2V0LHllPUQuX29mZnNldDtyZXR1cm4gb2UrPXZlLWNlLGFlKz15ZS11ZSxnZT0oaWUrPXZlKStjZTxOJiZpZT49MD9pZTpvZStjZTxOJiZvZT49MD9vZTp2ZStjZTxOP3ZlOmllLWZlPGZlLW9lK2NlP04tY2U6MCxnZSs9TCxtZT0obmUrPXllKSt1ZTxGJiZuZT49MD9uZTphZSt1ZTxGJiZhZT49MD9hZTp5ZSt1ZTxGP3llOm5lLXBlPHBlLWFlK3VlP0YtdWU6MCxtZSs9TCxsZS5hdHRyKCJ0cmFuc2Zvcm0iLGwoZ2UtMSxtZS0xKSksbGV9dmFyIHhlPWguc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLmRhdGEoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIEMoZSl9KSk7cmV0dXJuIHhlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJ0ZXh0IiwhMCkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKTtlLmFwcGVuZCgicmVjdCIpLmNhbGwocC5maWxsLHAuYWRkT3BhY2l0eShkLC44KSksZS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJuYW1lIiwhMCksZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwiMXB4IiksZS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJudW1zIiwhMCkuY2FsbChmLmZvbnQsVCxNKX0pKSx4ZS5leGl0KCkucmVtb3ZlKCkseGUuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9bi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwiIiksbz1lLmNvbG9yO0FycmF5LmlzQXJyYXkobykmJihvPW9bZS5ldmVudERhdGFbMF0ucG9pbnROdW1iZXJdKTt2YXIgaD1lLmJnY29sb3J8fG8sZz1wLmNvbWJpbmUocC5vcGFjaXR5KGgpP2g6cC5kZWZhdWx0TGluZSxkKSxtPXAuY29tYmluZShwLm9wYWNpdHkobyk/bzpwLmRlZmF1bHRMaW5lLGQpLHY9ZS5ib3JkZXJDb2xvcnx8cC5jb250cmFzdChnKSx5PUkoZSxFLGksYSxQLHQpLHg9eVswXSxiPXlbMV0sdz10LnNlbGVjdCgidGV4dC5udW1zIikuY2FsbChmLmZvbnQsZS5mb250RmFtaWx5fHxULGUuZm9udFNpemV8fE0sZS5mb250Q29sb3J8fHYpLnRleHQoeCkuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMsciksaz10LnNlbGVjdCgidGV4dC5uYW1lIiksUz0wLEQ9MDtpZihiJiZiIT09eCl7ay5jYWxsKGYuZm9udCxlLmZvbnRGYW1pbHl8fFQsZS5mb250U2l6ZXx8TSxtKS50ZXh0KGIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwodS5wb3NpdGlvblRleHQsMCwwKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHIpO3ZhciBDPVkocixrLm5vZGUoKSk7Uz1DLndpZHRoKzIqTCxEPUMuaGVpZ2h0KzIqTH1lbHNlIGsucmVtb3ZlKCksdC5zZWxlY3QoInJlY3QiKS5yZW1vdmUoKTt0LnNlbGVjdCgicGF0aCIpLnN0eWxlKHtmaWxsOmcsc3Ryb2tlOnZ9KTt2YXIgTz1lLnhhLl9vZmZzZXQrKGUueDArZS54MSkvMixSPWUueWEuX29mZnNldCsoZS55MCtlLnkxKS8yLGo9TWF0aC5hYnMoZS54MS1lLngwKSxIPU1hdGguYWJzKGUueTEtZS55MCksQj1ZKHIsdy5ub2RlKCkpLFY9Qi53aWR0aC9hLl9pbnZTY2FsZVgsVT1CLmhlaWdodC9hLl9pbnZTY2FsZVk7ZS50eTA9KHotQi50b3ApL2EuX2ludlNjYWxlWSxlLmJ4PVYrMipMLGUuYnk9TWF0aC5tYXgoVSsyKkwsRCksZS5hbmNob3I9InN0YXJ0IixlLnR4d2lkdGg9VixlLnR4MndpZHRoPVMsZS5vZmZzZXQ9MDt2YXIgcSxHLFo9KFYrQStMK1MpKmEuX2ludlNjYWxlWDtpZihjKWUucG9zPU8scT1SK0gvMitaPD1GLEc9Ui1ILzItWj49MCwidG9wIiE9PWUuaWRlYWxBbGlnbiYmcXx8IUc/cT8oUis9SC8yLGUuYW5jaG9yPSJzdGFydCIpOmUuYW5jaG9yPSJtaWRkbGUiOihSLT1ILzIsZS5hbmNob3I9ImVuZCIpO2Vsc2UgaWYoZS5wb3M9UixxPU8rai8yK1o8PU4sRz1PLWovMi1aPj0wLCJsZWZ0IiE9PWUuaWRlYWxBbGlnbiYmcXx8IUcpaWYocSlPKz1qLzIsZS5hbmNob3I9InN0YXJ0IjtlbHNle2UuYW5jaG9yPSJtaWRkbGUiO3ZhciBXPVovMixYPU8rVy1OLEo9Ty1XO1g+MCYmKE8tPVgpLEo8MCYmKE8rPS1KKX1lbHNlIE8tPWovMixlLmFuY2hvcj0iZW5kIjt3LmF0dHIoInRleHQtYW5jaG9yIixlLmFuY2hvciksUyYmay5hdHRyKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLHQuYXR0cigidHJhbnNmb3JtIixsKE8sUikrKGM/cyhfKToiIikpfSkpLHhlfWZ1bmN0aW9uIEkoZSx0LHIsbixhLGkpe3ZhciBsPSIiLHM9IiI7dm9pZCAwIT09ZS5uYW1lT3ZlcnJpZGUmJihlLm5hbWU9ZS5uYW1lT3ZlcnJpZGUpLGUubmFtZSYmKGUudHJhY2UuX21ldGEmJihlLm5hbWU9by50ZW1wbGF0ZVN0cmluZyhlLm5hbWUsZS50cmFjZS5fbWV0YSkpLGw9RShlLm5hbWUsZS5uYW1lTGVuZ3RoKSk7dmFyIGM9ci5jaGFyQXQoMCksdT0ieCI9PT1jPyJ5IjoieCI7dm9pZCAwIT09ZS56TGFiZWw/KHZvaWQgMCE9PWUueExhYmVsJiYocys9Ing6ICIrZS54TGFiZWwrIjxicj4iKSx2b2lkIDAhPT1lLnlMYWJlbCYmKHMrPSJ5OiAiK2UueUxhYmVsKyI8YnI+IiksImNob3JvcGxldGgiIT09ZS50cmFjZS50eXBlJiYiY2hvcm9wbGV0aG1hcGJveCIhPT1lLnRyYWNlLnR5cGUmJihzKz0ocz8iejogIjoiIikrZS56TGFiZWwpKTp0JiZlW2MrIkxhYmVsIl09PT1hP3M9ZVt1KyJMYWJlbCJdfHwiIjp2b2lkIDA9PT1lLnhMYWJlbD92b2lkIDAhPT1lLnlMYWJlbCYmInNjYXR0ZXJjYXJwZXQiIT09ZS50cmFjZS50eXBlJiYocz1lLnlMYWJlbCk6cz12b2lkIDA9PT1lLnlMYWJlbD9lLnhMYWJlbDoiKCIrZS54TGFiZWwrIiwgIitlLnlMYWJlbCsiKSIsIWUudGV4dCYmMCE9PWUudGV4dHx8QXJyYXkuaXNBcnJheShlLnRleHQpfHwocys9KHM/Ijxicj4iOiIiKStlLnRleHQpLHZvaWQgMCE9PWUuZXh0cmFUZXh0JiYocys9KHM/Ijxicj4iOiIiKStlLmV4dHJhVGV4dCksaSYmIiI9PT1zJiYhZS5ob3ZlcnRlbXBsYXRlJiYoIiI9PT1sJiZpLnJlbW92ZSgpLHM9bCk7dmFyIGQ9ZS5ob3ZlcnRlbXBsYXRlfHwhMTtpZihkKXt2YXIgZj1lLmhvdmVydGVtcGxhdGVMYWJlbHN8fGU7ZVtjKyJMYWJlbCJdIT09YSYmKGZbYysib3RoZXIiXT1mW2MrIlZhbCJdLGZbYysib3RoZXJMYWJlbCJdPWZbYysiTGFiZWwiXSkscz0ocz1vLmhvdmVydGVtcGxhdGVTdHJpbmcoZCxmLG4uX2QzbG9jYWxlLGUuZXZlbnREYXRhWzBdfHx7fSxlLnRyYWNlLl9tZXRhKSkucmVwbGFjZShPLChmdW5jdGlvbih0LHIpe3JldHVybiBsPUUocixlLm5hbWVMZW5ndGgpLCIifSkpfXJldHVybltzLGxdfWZ1bmN0aW9uIFIoZSx0LHIsYSl7dmFyIGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUqcn0sbz1mdW5jdGlvbihlKXtyZXR1cm4gZSphfTtlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKGUuZGVsKXJldHVybiByLnJlbW92ZSgpO3ZhciBhPXIuc2VsZWN0KCJ0ZXh0Lm51bXMiKSxsPWUuYW5jaG9yLHM9ImVuZCI9PT1sPy0xOjEsYz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W2xdLGQ9YyooQStMKSxwPWQrYyooZS50eHdpZHRoK0wpLGg9MCxnPWUub2Zmc2V0LG09Im1pZGRsZSI9PT1sO20mJihkLT1lLnR4MndpZHRoLzIscCs9ZS50eHdpZHRoLzIrTCksdCYmKGcqPS1rLGg9ZS5vZmZzZXQqTSksci5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixtPyJNLSIraShlLmJ4LzIrZS50eDJ3aWR0aC8yKSsiLCIrbyhnLWUuYnkvMikrImgiK2koZS5ieCkrInYiK28oZS5ieSkrImgtIitpKGUuYngpKyJaIjoiTTAsMEwiK2kocypBK2gpKyIsIitvKEErZykrInYiK28oZS5ieS8yLUEpKyJoIitpKHMqZS5ieCkrInYtIitvKGUuYnkpKyJIIitpKHMqQStoKSsiViIrbyhnLUEpKyJaIik7dmFyIHY9aCtkLHk9ZytlLnR5MC1lLmJ5LzIrTCx4PWUudGV4dEFsaWdufHwiYXV0byI7ImF1dG8iIT09eCYmKCJsZWZ0Ij09PXgmJiJzdGFydCIhPT1sPyhhLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKSx2PW0/LWUuYngvMi1lLnR4MndpZHRoLzIrTDotZS5ieC1MKToicmlnaHQiPT09eCYmImVuZCIhPT1sJiYoYS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLHY9bT9lLmJ4LzItZS50eDJ3aWR0aC8yLUw6ZS5ieCtMKSksYS5jYWxsKHUucG9zaXRpb25UZXh0LGkodiksbyh5KSksZS50eDJ3aWR0aCYmKHIuc2VsZWN0KCJ0ZXh0Lm5hbWUiKS5jYWxsKHUucG9zaXRpb25UZXh0LGkocCtjKkwraCksbyhnK2UudHkwLWUuYnkvMitMKSksci5zZWxlY3QoInJlY3QiKS5jYWxsKGYuc2V0UmVjdCxpKHArKGMtMSkqZS50eDJ3aWR0aC8yK2gpLG8oZy1lLmJ5LzItMSksaShlLnR4MndpZHRoKSxvKGUuYnkrMikpKX0pKX1mdW5jdGlvbiB6KGUsdCl7dmFyIHI9ZS5pbmRleCxuPWUudHJhY2V8fHt9LGk9ZS5jZFswXSxsPWUuY2Rbcl18fHt9O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGV8fGEoZSkmJjA9PT1lfXZhciBjPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24oZSx0KXt2YXIgYT1vLmNhc3RPcHRpb24oaSxyLGUpO3JldHVybiBzKGEpP2E6by5leHRyYWN0T3B0aW9uKHt9LG4sIiIsdCl9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8uZXh0cmFjdE9wdGlvbihsLG4sZSx0KX07ZnVuY3Rpb24gdSh0LHIsbil7dmFyIGE9YyhyLG4pO3MoYSkmJihlW3RdPWEpfWlmKHUoImhvdmVyaW5mbyIsImhpIiwiaG92ZXJpbmZvIiksdSgiYmdjb2xvciIsImhiZyIsImhvdmVybGFiZWwuYmdjb2xvciIpLHUoImJvcmRlckNvbG9yIiwiaGJjIiwiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLHUoImZvbnRGYW1pbHkiLCJodGYiLCJob3ZlcmxhYmVsLmZvbnQuZmFtaWx5IiksdSgiZm9udFNpemUiLCJodHMiLCJob3ZlcmxhYmVsLmZvbnQuc2l6ZSIpLHUoImZvbnRDb2xvciIsImh0YyIsImhvdmVybGFiZWwuZm9udC5jb2xvciIpLHUoIm5hbWVMZW5ndGgiLCJobmwiLCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiKSx1KCJ0ZXh0QWxpZ24iLCJodGEiLCJob3ZlcmxhYmVsLmFsaWduIiksZS5wb3NyZWY9InkiPT09dHx8ImNsb3Nlc3QiPT09dCYmImgiPT09bi5vcmllbnRhdGlvbj9lLnhhLl9vZmZzZXQrKGUueDArZS54MSkvMjplLnlhLl9vZmZzZXQrKGUueTArZS55MSkvMixlLngwPW8uY29uc3RyYWluKGUueDAsMCxlLnhhLl9sZW5ndGgpLGUueDE9by5jb25zdHJhaW4oZS54MSwwLGUueGEuX2xlbmd0aCksZS55MD1vLmNvbnN0cmFpbihlLnkwLDAsZS55YS5fbGVuZ3RoKSxlLnkxPW8uY29uc3RyYWluKGUueTEsMCxlLnlhLl9sZW5ndGgpLHZvaWQgMCE9PWUueExhYmVsVmFsJiYoZS54TGFiZWw9InhMYWJlbCJpbiBlP2UueExhYmVsOmcuaG92ZXJMYWJlbFRleHQoZS54YSxlLnhMYWJlbFZhbCxuLnhob3ZlcmZvcm1hdCksZS54VmFsPWUueGEuYzJkKGUueExhYmVsVmFsKSksdm9pZCAwIT09ZS55TGFiZWxWYWwmJihlLnlMYWJlbD0ieUxhYmVsImluIGU/ZS55TGFiZWw6Zy5ob3ZlckxhYmVsVGV4dChlLnlhLGUueUxhYmVsVmFsLG4ueWhvdmVyZm9ybWF0KSxlLnlWYWw9ZS55YS5jMmQoZS55TGFiZWxWYWwpKSx2b2lkIDAhPT1lLnpMYWJlbFZhbCYmdm9pZCAwPT09ZS56TGFiZWwmJihlLnpMYWJlbD1TdHJpbmcoZS56TGFiZWxWYWwpKSwhKGlzTmFOKGUueGVycil8fCJsb2ciPT09ZS54YS50eXBlJiZlLnhlcnI8PTApKXt2YXIgZD1nLnRpY2tUZXh0KGUueGEsZS54YS5jMmwoZS54ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PWUueGVycm5lZz9lLnhMYWJlbCs9IiArIitkKyIgLyAtIitnLnRpY2tUZXh0KGUueGEsZS54YS5jMmwoZS54ZXJybmVnKSwiaG92ZXIiKS50ZXh0OmUueExhYmVsKz0iIFx4YjEgIitkLCJ4Ij09PXQmJihlLmRpc3RhbmNlKz0xKX1pZighKGlzTmFOKGUueWVycil8fCJsb2ciPT09ZS55YS50eXBlJiZlLnllcnI8PTApKXt2YXIgZj1nLnRpY2tUZXh0KGUueWEsZS55YS5jMmwoZS55ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PWUueWVycm5lZz9lLnlMYWJlbCs9IiArIitmKyIgLyAtIitnLnRpY2tUZXh0KGUueWEsZS55YS5jMmwoZS55ZXJybmVnKSwiaG92ZXIiKS50ZXh0OmUueUxhYmVsKz0iIFx4YjEgIitmLCJ5Ij09PXQmJihlLmRpc3RhbmNlKz0xKX12YXIgcD1lLmhvdmVyaW5mb3x8ZS50cmFjZS5ob3ZlcmluZm87cmV0dXJuIHAmJiJhbGwiIT09cCYmKC0xPT09KHA9QXJyYXkuaXNBcnJheShwKT9wOnAuc3BsaXQoIisiKSkuaW5kZXhPZigieCIpJiYoZS54TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigieSIpJiYoZS55TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigieiIpJiYoZS56TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigidGV4dCIpJiYoZS50ZXh0PXZvaWQgMCksLTE9PT1wLmluZGV4T2YoIm5hbWUiKSYmKGUubmFtZT12b2lkIDApKSxlfWZ1bmN0aW9uIE4oZSx0LHIpe3ZhciBuLGEsbz1yLmNvbnRhaW5lcixsPXIuZnVsbExheW91dCxzPWwuX3NpemUsYz1yLmV2ZW50LHU9ISF0LmhMaW5lUG9pbnQsZD0hIXQudkxpbmVQb2ludDtpZihvLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpLGR8fHUpe3ZhciBoPXAuY29tYmluZShsLnBsb3RfYmdjb2xvcixsLnBhcGVyX2JnY29sb3IpO2lmKHUpe3ZhciBtLHYseT10LmhMaW5lUG9pbnQ7bj15JiZ5LnhhLCJjdXJzb3IiPT09KGE9eSYmeS55YSkuc3Bpa2VzbmFwPyhtPWMucG9pbnRlclgsdj1jLnBvaW50ZXJZKToobT1uLl9vZmZzZXQreS54LHY9YS5fb2Zmc2V0K3kueSk7dmFyIHgsYixfPWkucmVhZGFiaWxpdHkoeS5jb2xvcixoKTwxLjU/cC5jb250cmFzdChoKTp5LmNvbG9yLHc9YS5zcGlrZW1vZGUsVD1hLnNwaWtldGhpY2tuZXNzLE09YS5zcGlrZWNvbG9yfHxfLGs9Zy5nZXRQeFBvc2l0aW9uKGUsYSk7aWYoLTEhPT13LmluZGV4T2YoInRvYXhpcyIpfHwtMSE9PXcuaW5kZXhPZigiYWNyb3NzIikpe2lmKC0xIT09dy5pbmRleE9mKCJ0b2F4aXMiKSYmKHg9ayxiPW0pLC0xIT09dy5pbmRleE9mKCJhY3Jvc3MiKSl7dmFyIEE9YS5fY291bnRlckRvbWFpbk1pbixMPWEuX2NvdW50ZXJEb21haW5NYXg7ImZyZWUiPT09YS5hbmNob3ImJihBPU1hdGgubWluKEEsYS5wb3NpdGlvbiksTD1NYXRoLm1heChMLGEucG9zaXRpb24pKSx4PXMubCtBKnMudyxiPXMubCtMKnMud31vLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOngseDI6Yix5MTp2LHkyOnYsInN0cm9rZS13aWR0aCI6VCxzdHJva2U6TSwic3Ryb2tlLWRhc2hhcnJheSI6Zi5kYXNoU3R5bGUoYS5zcGlrZWRhc2gsVCl9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApLG8uaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6eCx4MjpiLHkxOnYseTI6diwic3Ryb2tlLXdpZHRoIjpUKzIsc3Ryb2tlOmh9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApfS0xIT09dy5pbmRleE9mKCJtYXJrZXIiKSYmby5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe2N4OmsrKCJyaWdodCIhPT1hLnNpZGU/VDotVCksY3k6dixyOlQsZmlsbDpNfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCl9aWYoZCl7dmFyIFMsRCxDPXQudkxpbmVQb2ludDtuPUMmJkMueGEsYT1DJiZDLnlhLCJjdXJzb3IiPT09bi5zcGlrZXNuYXA/KFM9Yy5wb2ludGVyWCxEPWMucG9pbnRlclkpOihTPW4uX29mZnNldCtDLngsRD1hLl9vZmZzZXQrQy55KTt2YXIgTyxQLEk9aS5yZWFkYWJpbGl0eShDLmNvbG9yLGgpPDEuNT9wLmNvbnRyYXN0KGgpOkMuY29sb3IsUj1uLnNwaWtlbW9kZSx6PW4uc3Bpa2V0aGlja25lc3MsTj1uLnNwaWtlY29sb3J8fEksRj1nLmdldFB4UG9zaXRpb24oZSxuKTtpZigtMSE9PVIuaW5kZXhPZigidG9heGlzIil8fC0xIT09Ui5pbmRleE9mKCJhY3Jvc3MiKSl7aWYoLTEhPT1SLmluZGV4T2YoInRvYXhpcyIpJiYoTz1GLFA9RCksLTEhPT1SLmluZGV4T2YoImFjcm9zcyIpKXt2YXIgRT1uLl9jb3VudGVyRG9tYWluTWluLGo9bi5fY291bnRlckRvbWFpbk1heDsiZnJlZSI9PT1uLmFuY2hvciYmKEU9TWF0aC5taW4oRSxuLnBvc2l0aW9uKSxqPU1hdGgubWF4KGosbi5wb3NpdGlvbikpLE89cy50KygxLWopKnMuaCxQPXMudCsoMS1FKSpzLmh9by5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTpTLHgyOlMseTE6Tyx5MjpQLCJzdHJva2Utd2lkdGgiOnosc3Ryb2tlOk4sInN0cm9rZS1kYXNoYXJyYXkiOmYuZGFzaFN0eWxlKG4uc3Bpa2VkYXNoLHopfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxvLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOlMseDI6Uyx5MTpPLHkyOlAsInN0cm9rZS13aWR0aCI6eisyLHN0cm9rZTpofSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKX0tMSE9PVIuaW5kZXhPZigibWFya2VyIikmJm8uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHtjeDpTLGN5OkYtKCJ0b3AiIT09bi5zaWRlP3o6LXopLHI6eixmaWxsOk59KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX19fWZ1bmN0aW9uIEYoZSx0KXtyZXR1cm4hdHx8KHQudkxpbmVQb2ludCE9PWUuX3NwaWtlcG9pbnRzLnZMaW5lUG9pbnR8fHQuaExpbmVQb2ludCE9PWUuX3NwaWtlcG9pbnRzLmhMaW5lUG9pbnQpfWZ1bmN0aW9uIEUoZSx0KXtyZXR1cm4gdS5wbGFpblRleHQoZXx8IiIse2xlbjp0LGFsbG93ZWRUYWdzOlsiYnIiLCJzdWIiLCJzdXAiLCJiIiwiaSIsImVtIl19KX1mdW5jdGlvbiBqKGUsdCxyKXt2YXIgbj10W2UrImEiXSxhPXRbZSsiVmFsIl0saT10LmNkWzBdO2lmKCJjYXRlZ29yeSI9PT1uLnR5cGUpYT1uLl9jYXRlZ29yaWVzTWFwW2FdO2Vsc2UgaWYoImRhdGUiPT09bi50eXBlKXt2YXIgbz10LnRyYWNlW2UrInBlcmlvZGFsaWdubWVudCJdO2lmKG8pe3ZhciBsPXQuY2RbdC5pbmRleF0scz1sW2UrIlN0YXJ0Il07dm9pZCAwPT09cyYmKHM9bFtlXSk7dmFyIGM9bFtlKyJFbmQiXTt2b2lkIDA9PT1jJiYoYz1sW2VdKTt2YXIgdT1jLXM7ImVuZCI9PT1vP2ErPXU6Im1pZGRsZSI9PT1vJiYoYSs9dS8yKX1hPW4uZDJjKGEpfXJldHVybiBpJiZpLnQmJmkudC5wb3NMZXR0ZXI9PT1uLl9pZCYmKCJncm91cCIhPT1yLmJveG1vZGUmJiJncm91cCIhPT1yLnZpb2xpbm1vZGV8fChhKz1pLnQuZFBvcykpLGF9ZnVuY3Rpb24gSChlKXtyZXR1cm4gZS5vZmZzZXRUb3ArZS5jbGllbnRUb3B9ZnVuY3Rpb24gQihlKXtyZXR1cm4gZS5vZmZzZXRMZWZ0K2UuY2xpZW50TGVmdH1mdW5jdGlvbiBZKGUsdCl7dmFyIHI9ZS5fZnVsbExheW91dCxuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1uLngsaT1uLnksbD1hK24ud2lkdGgscz1pK24uaGVpZ2h0LGM9by5hcHBseTNEVHJhbnNmb3JtKHIuX2ludlRyYW5zZm9ybSkoYSxpKSx1PW8uYXBwbHkzRFRyYW5zZm9ybShyLl9pbnZUcmFuc2Zvcm0pKGwscyksZD1jWzBdLGY9Y1sxXSxwPXVbMF0saD11WzFdO3JldHVybnt4OmQseTpmLHdpZHRoOnAtZCxoZWlnaHQ6aC1mLHRvcDpNYXRoLm1pbihmLGgpLGxlZnQ6TWF0aC5taW4oZCxwKSxyaWdodDpNYXRoLm1heChkLHApLGJvdHRvbTpNYXRoLm1heChmLGgpfX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL2xpYi9ldmVudHMiOjIyNSwiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciI6MjQzLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjI1NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI3OSwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi4vY29sb3IiOjEwMiwiLi4vZHJhZ2VsZW1lbnQiOjEyMSwiLi4vZHJhd2luZyI6MTI0LCIuLi9sZWdlbmQvZGVmYXVsdHMiOjE1NCwiLi4vbGVnZW5kL2RyYXciOjE1NSwiLi9jb25zdGFudHMiOjEzNiwiLi9oZWxwZXJzIjoxMzgsIkBwbG90bHkvZDMiOjExLCJmYXN0LWlzbnVtZXJpYyI6MTcsdGlueWNvbG9yMjo2N31dLDE0MDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uL2NvbG9yIiksaT1lKCIuL2hlbHBlcnMiKS5pc1VuaWZpZWRIb3Zlcjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbyl7bz1vfHx7fTt2YXIgbD10LmxlZ2VuZDtmdW5jdGlvbiBzKGUpe28uZm9udFtlXXx8KG8uZm9udFtlXT1sP3QubGVnZW5kLmZvbnRbZV06dC5mb250W2VdKX10JiZpKHQuaG92ZXJtb2RlKSYmKG8uZm9udHx8KG8uZm9udD17fSkscygic2l6ZSIpLHMoImZhbWlseSIpLHMoImNvbG9yIiksbD8oby5iZ2NvbG9yfHwoby5iZ2NvbG9yPWEuY29tYmluZSh0LmxlZ2VuZC5iZ2NvbG9yLHQucGFwZXJfYmdjb2xvcikpLG8uYm9yZGVyY29sb3J8fChvLmJvcmRlcmNvbG9yPXQubGVnZW5kLmJvcmRlcmNvbG9yKSk6by5iZ2NvbG9yfHwoby5iZ2NvbG9yPXQucGFwZXJfYmdjb2xvcikpLHIoImhvdmVybGFiZWwuYmdjb2xvciIsby5iZ2NvbG9yKSxyKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIixvLmJvcmRlcmNvbG9yKSxyKCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiLG8ubmFtZWxlbmd0aCksbi5jb2VyY2VGb250KHIsImhvdmVybGFiZWwuZm9udCIsby5mb250KSxyKCJob3ZlcmxhYmVsLmFsaWduIixvLmFsaWduKX19LHsiLi4vLi4vbGliIjoyMzIsIi4uL2NvbG9yIjoxMDIsIi4vaGVscGVycyI6MTM4fV0sMTQxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gdm9pZCAwIT09dFtyXT90W3JdOm4uY29lcmNlKGUsdCxhLHIsaSl9cmV0dXJuIHIoImNsaWNrbW9kZSIpLHIoImhvdmVybW9kZSIpfX0seyIuLi8uLi9saWIiOjIzMiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTQzfV0sMTQyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4uLy4uL2xpYiIpLGk9ZSgiLi4vZHJhZ2VsZW1lbnQiKSxvPWUoIi4vaGVscGVycyIpLGw9ZSgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9ZSgiLi9ob3ZlciIpO3QuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJmeCIsY29uc3RhbnRzOmUoIi4vY29uc3RhbnRzIiksc2NoZW1hOntsYXlvdXQ6bH0sYXR0cmlidXRlczplKCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOmwsc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM6ZSgiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIiksc3VwcGx5RGVmYXVsdHM6ZSgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOmUoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzplKCIuL2NhbGMiKSxnZXREaXN0YW5jZUZ1bmN0aW9uOm8uZ2V0RGlzdGFuY2VGdW5jdGlvbixnZXRDbG9zZXN0Om8uZ2V0Q2xvc2VzdCxpbmJveDpvLmluYm94LHF1YWRyYXR1cmU6by5xdWFkcmF0dXJlLGFwcGVuZEFycmF5UG9pbnRWYWx1ZTpvLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxjYXN0SG92ZXJPcHRpb246ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhLmNhc3RPcHRpb24oZSx0LCJob3ZlcmxhYmVsLiIrcil9LGNhc3RIb3ZlcmluZm86ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhLmNhc3RPcHRpb24oZSxyLCJob3ZlcmluZm8iLChmdW5jdGlvbihyKXtyZXR1cm4gYS5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzpyfSx7X21vZHVsZTplLl9tb2R1bGV9LHQpfSkpfSxob3ZlcjpzLmhvdmVyLHVuaG92ZXI6aS51bmhvdmVyLGxvbmVIb3ZlcjpzLmxvbmVIb3Zlcixsb25lVW5ob3ZlcjpmdW5jdGlvbihlKXt2YXIgdD1hLmlzRDNTZWxlY3Rpb24oZSk/ZTpuLnNlbGVjdChlKTt0LnNlbGVjdEFsbCgiZy5ob3ZlcnRleHQiKS5yZW1vdmUoKSx0LnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpfSxjbGljazplKCIuL2NsaWNrIil9fSx7Ii4uLy4uL2xpYiI6MjMyLCIuLi9kcmFnZWxlbWVudCI6MTIxLCIuL2F0dHJpYnV0ZXMiOjEzMywiLi9jYWxjIjoxMzQsIi4vY2xpY2siOjEzNSwiLi9jb25zdGFudHMiOjEzNiwiLi9kZWZhdWx0cyI6MTM3LCIuL2hlbHBlcnMiOjEzOCwiLi9ob3ZlciI6MTM5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxNDMsIi4vbGF5b3V0X2RlZmF1bHRzIjoxNDQsIi4vbGF5b3V0X2dsb2JhbF9kZWZhdWx0cyI6MTQ1LCJAcGxvdGx5L2QzIjoxMX1dLDE0MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL2NvbnN0YW50cyIpLGE9ZSgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT1hKHtlZGl0VHlwZToibm9uZSJ9KTtpLmZhbWlseS5kZmx0PW4uSE9WRVJGT05ULGkuc2l6ZS5kZmx0PW4uSE9WRVJGT05UU0laRSx0LmV4cG9ydHM9e2NsaWNrbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiZXZlbnQiLCJzZWxlY3QiXSxkZmx0OiJldmVudCIsZWRpdFR5cGU6InBsb3QiLGV4dHJhczpbIm5vbmUiXX0sZHJhZ21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInpvb20iLCJwYW4iLCJzZWxlY3QiLCJsYXNzbyIsImRyYXdjbG9zZWRwYXRoIiwiZHJhd29wZW5wYXRoIiwiZHJhd2xpbmUiLCJkcmF3cmVjdCIsImRyYXdjaXJjbGUiLCJvcmJpdCIsInR1cm50YWJsZSIsITFdLGRmbHQ6Inpvb20iLGVkaXRUeXBlOiJtb2RlYmFyIn0saG92ZXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ4IiwieSIsImNsb3Nlc3QiLCExLCJ4IHVuaWZpZWQiLCJ5IHVuaWZpZWQiXSxkZmx0OiJjbG9zZXN0IixlZGl0VHlwZToibW9kZWJhciJ9LGhvdmVyZGlzdGFuY2U6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjIwLGVkaXRUeXBlOiJub25lIn0sc3Bpa2VkaXN0YW5jZTp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6LTEsZWRpdFR5cGU6Im5vbmUifSxob3ZlcmxhYmVsOntiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im5vbmUifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJub25lIn0sZm9udDppLGdyb3VwdGl0bGVmb250OmEoe2VkaXRUeXBlOiJub25lIn0pLGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwicmlnaHQiLCJhdXRvIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6Im5vbmUifSxuYW1lbGVuZ3RoOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoxNSxlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJub25lIn0sc2VsZWN0ZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJoIiwidiIsImQiLCJhbnkiXSxkZmx0OiJhbnkiLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6MzEwLCIuL2NvbnN0YW50cyI6MTM2fV0sMTQ0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGk9ZSgiLi9ob3Zlcm1vZGVfZGVmYXVsdHMiKSxvPWUoIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UoZSx0LGEscixpKX1pKGUsdCkmJihyKCJob3ZlcmRpc3RhbmNlIikscigic3Bpa2VkaXN0YW5jZSIpKSwic2VsZWN0Ij09PXIoImRyYWdtb2RlIikmJnIoInNlbGVjdGRpcmVjdGlvbiIpO3ZhciBsPXQuX2hhcygibWFwYm94Iikscz10Ll9oYXMoImdlbyIpLGM9dC5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aDsiem9vbSI9PT10LmRyYWdtb2RlJiYoKGx8fHMpJiYxPT09Y3x8bCYmcyYmMj09PWMpJiYodC5kcmFnbW9kZT0icGFuIiksbyhlLHQsciksbi5jb2VyY2VGb250KHIsImhvdmVybGFiZWwuZ3JvdXB0aXRsZWZvbnQiLHQuaG92ZXJsYWJlbC5mb250KX19LHsiLi4vLi4vbGliIjoyMzIsIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyI6MTQwLCIuL2hvdmVybW9kZV9kZWZhdWx0cyI6MTQxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxNDN9XSwxNDU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKSxpPWUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXthKGUsdCwoZnVuY3Rpb24ocixhKXtyZXR1cm4gbi5jb2VyY2UoZSx0LGkscixhKX0pKX19LHsiLi4vLi4vbGliIjoyMzIsIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyI6MTQwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxNDN9XSwxNDY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9saWIvcmVnZXgiKS5jb3VudGVyLGk9ZSgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxvPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKS5pZFJlZ2V4LGw9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHM9e3Jvd3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjoxLGVkaXRUeXBlOiJwbG90In0scm93b3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCB0byBib3R0b20iLCJib3R0b20gdG8gdG9wIl0sZGZsdDoidG9wIHRvIGJvdHRvbSIsZWRpdFR5cGU6InBsb3QifSxjb2x1bW5zOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxlZGl0VHlwZToicGxvdCJ9LHN1YnBsb3RzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6MixpdGVtczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlthKCJ4eSIpLnRvU3RyaW5nKCksIiJdLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx4YXhlczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltvLngudG9TdHJpbmcoKSwiIl0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHlheGVzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W28ueS50b1N0cmluZygpLCIiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0scGF0dGVybjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5kZXBlbmRlbnQiLCJjb3VwbGVkIl0sZGZsdDoiY291cGxlZCIsZWRpdFR5cGU6InBsb3QifSx4Z2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0seWdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjppKHtuYW1lOiJncmlkIixlZGl0VHlwZToicGxvdCIsbm9HcmlkQ2VsbDohMH0se30pLHhzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJib3R0b20iLCJib3R0b20gcGxvdCIsInRvcCBwbG90IiwidG9wIl0sZGZsdDoiYm90dG9tIHBsb3QiLGVkaXRUeXBlOiJwbG90In0seXNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJsZWZ0IHBsb3QiLCJyaWdodCBwbG90IiwicmlnaHQiXSxkZmx0OiJsZWZ0IHBsb3QiLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifTtmdW5jdGlvbiBjKGUsdCxyKXt2YXIgbj10W3IrImF4ZXMiXSxhPU9iamVjdC5rZXlzKChlLl9zcGxvbUF4ZXN8fHt9KVtyXXx8e30pO3JldHVybiBBcnJheS5pc0FycmF5KG4pP246YS5sZW5ndGg/YTp2b2lkIDB9ZnVuY3Rpb24gdShlLHQscixuLGEsaSl7dmFyIG89dChlKyJnYXAiLHIpLGw9dCgiZG9tYWluLiIrZSk7dChlKyJzaWRlIixuKTtmb3IodmFyIHM9bmV3IEFycmF5KGEpLGM9bFswXSx1PShsWzFdLWMpLyhhLW8pLGQ9dSooMS1vKSxmPTA7ZjxhO2YrKyl7dmFyIHA9Yyt1KmY7c1tpP2EtMS1mOmZdPVtwLHArZF19cmV0dXJuIHN9ZnVuY3Rpb24gZChlLHQscixuLGEpe3ZhciBpLG89bmV3IEFycmF5KHIpO2Z1bmN0aW9uIGwoZSxyKXstMSE9PXQuaW5kZXhPZihyKSYmdm9pZCAwPT09bltyXT8ob1tlXT1yLG5bcl09ZSk6b1tlXT0iIn1pZihBcnJheS5pc0FycmF5KGUpKWZvcihpPTA7aTxyO2krKylsKGksZVtpXSk7ZWxzZSBmb3IobCgwLGEpLGk9MTtpPHI7aSsrKWwoaSxhKyhpKzEpKTtyZXR1cm4gb310LmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZ3JpZCIsc2NoZW1hOntsYXlvdXQ6e2dyaWQ6c319LGxheW91dEF0dHJpYnV0ZXM6cyxzaXplRGVmYXVsdHM6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmdyaWR8fHt9LGE9Yyh0LHIsIngiKSxpPWModCxyLCJ5Iik7aWYoZS5ncmlkfHxhfHxpKXt2YXIgbyxkLGY9QXJyYXkuaXNBcnJheShyLnN1YnBsb3RzKSYmQXJyYXkuaXNBcnJheShyLnN1YnBsb3RzWzBdKSxwPUFycmF5LmlzQXJyYXkoYSksaD1BcnJheS5pc0FycmF5KGkpLGc9cCYmYSE9PXIueGF4ZXMmJmgmJmkhPT1yLnlheGVzO2Y/KG89ci5zdWJwbG90cy5sZW5ndGgsZD1yLnN1YnBsb3RzWzBdLmxlbmd0aCk6KGgmJihvPWkubGVuZ3RoKSxwJiYoZD1hLmxlbmd0aCkpO3ZhciBtPWwubmV3Q29udGFpbmVyKHQsImdyaWQiKSx2PU0oInJvd3MiLG8pLHk9TSgiY29sdW1ucyIsZCk7aWYodip5PjEpe2lmKCFmJiYhcCYmIWgpImluZGVwZW5kZW50Ij09PU0oInBhdHRlcm4iKSYmKGY9ITApO20uX2hhc1N1YnBsb3RHcmlkPWY7dmFyIHgsYixfPSJ0b3AgdG8gYm90dG9tIj09PU0oInJvd29yZGVyIiksdz1mPy4yOi4xLFQ9Zj8uMzouMTtnJiZ0Ll9zcGxvbUdyaWREZmx0JiYoeD10Ll9zcGxvbUdyaWREZmx0LnhzaWRlLGI9dC5fc3Bsb21HcmlkRGZsdC55c2lkZSksbS5fZG9tYWlucz17eDp1KCJ4IixNLHcseCx5KSx5OnUoInkiLE0sVCxiLHYsXyl9fWVsc2UgZGVsZXRlIHQuZ3JpZH1mdW5jdGlvbiBNKGUsdCl7cmV0dXJuIG4uY29lcmNlKHIsbSxzLGUsdCl9fSxjb250ZW50RGVmYXVsdHM6ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmdyaWQ7aWYociYmci5fZG9tYWlucyl7dmFyIG4sYSxpLG8sbCxzLHUsZj1lLmdyaWR8fHt9LHA9dC5fc3VicGxvdHMsaD1yLl9oYXNTdWJwbG90R3JpZCxnPXIucm93cyxtPXIuY29sdW1ucyx2PSJpbmRlcGVuZGVudCI9PT1yLnBhdHRlcm4seT1yLl9heGlzTWFwPXt9O2lmKGgpe3ZhciB4PWYuc3VicGxvdHN8fFtdO3M9ci5zdWJwbG90cz1uZXcgQXJyYXkoZyk7dmFyIGI9MTtmb3Iobj0wO248ZztuKyspe3ZhciBfPXNbbl09bmV3IEFycmF5KG0pLHc9eFtuXXx8W107Zm9yKGE9MDthPG07YSsrKWlmKHY/KGw9MT09PWI/Inh5IjoieCIrYisieSIrYixiKyspOmw9d1thXSxfW2FdPSIiLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihsKSl7aWYodT1sLmluZGV4T2YoInkiKSxpPWwuc2xpY2UoMCx1KSxvPWwuc2xpY2UodSksdm9pZCAwIT09eVtpXSYmeVtpXSE9PWF8fHZvaWQgMCE9PXlbb10mJnlbb10hPT1uKWNvbnRpbnVlO19bYV09bCx5W2ldPWEseVtvXT1ufX19ZWxzZXt2YXIgVD1jKHQsZiwieCIpLE09Yyh0LGYsInkiKTtyLnhheGVzPWQoVCxwLnhheGlzLG0seSwieCIpLHIueWF4ZXM9ZChNLHAueWF4aXMsZyx5LCJ5Iil9dmFyIGs9ci5fYW5jaG9ycz17fSxBPSJ0b3AgdG8gYm90dG9tIj09PXIucm93b3JkZXI7Zm9yKHZhciBMIGluIHkpe3ZhciBTLEQsQyxPPUwuY2hhckF0KDApLFA9cltPKyJzaWRlIl07aWYoUC5sZW5ndGg8OClrW0xdPSJmcmVlIjtlbHNlIGlmKCJ4Ij09PU8pe2lmKCJ0Ij09PVAuY2hhckF0KDApPT09QT8oUz0wLEQ9MSxDPWcpOihTPWctMSxEPS0xLEM9LTEpLGgpe3ZhciBJPXlbTF07Zm9yKG49UztuIT09QztuKz1EKWlmKChsPXNbbl1bSV0pJiYodT1sLmluZGV4T2YoInkiKSxsLnNsaWNlKDAsdSk9PT1MKSl7a1tMXT1sLnNsaWNlKHUpO2JyZWFrfX1lbHNlIGZvcihuPVM7biE9PUM7bis9RClpZihvPXIueWF4ZXNbbl0sLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKEwrbykpe2tbTF09bzticmVha319ZWxzZSBpZigibCI9PT1QLmNoYXJBdCgwKT8oUz0wLEQ9MSxDPW0pOihTPW0tMSxEPS0xLEM9LTEpLGgpe3ZhciBSPXlbTF07Zm9yKG49UztuIT09QztuKz1EKWlmKChsPXNbUl1bbl0pJiYodT1sLmluZGV4T2YoInkiKSxsLnNsaWNlKHUpPT09TCkpe2tbTF09bC5zbGljZSgwLHUpO2JyZWFrfX1lbHNlIGZvcihuPVM7biE9PUM7bis9RClpZihpPXIueGF4ZXNbbl0sLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKGkrTCkpe2tbTF09aTticmVha319fX19fSx7Ii4uLy4uL2xpYiI6MjMyLCIuLi8uLi9saWIvcmVnZXgiOjI0OCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjY4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjoyODYsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6MzA5fV0sMTQ3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxhPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlKCIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyIpO3QuZXhwb3J0cz1hKCJpbWFnZSIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNvdXJjZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiYXJyYXlkcmF3In0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemV4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6ZXk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXppbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJjb250YWluIiwic3RyZXRjaCJdLGRmbHQ6ImNvbnRhaW4iLGVkaXRUeXBlOiJhcnJheWRyYXcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0seDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHk6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToiYXJyYXlkcmF3In0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIixlZGl0VHlwZToiYXJyYXlkcmF3In0seHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLG4uaWRSZWdleC54LnRvU3RyaW5nKCldLGRmbHQ6InBhcGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLG4uaWRSZWdleC55LnRvU3RyaW5nKCldLGRmbHQ6InBhcGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KX0seyIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyI6MjA4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyNjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjI4Nn1dLDE0ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixpKXt0PXR8fHt9O3ZhciBvPSJsb2ciPT09ciYmImxpbmVhciI9PT10LnR5cGUsbD0ibGluZWFyIj09PXImJiJsb2ciPT09dC50eXBlO2lmKG98fGwpZm9yKHZhciBzLGMsdT1lLl9mdWxsTGF5b3V0LmltYWdlcyxkPXQuX2lkLmNoYXJBdCgwKSxmPTA7Zjx1Lmxlbmd0aDtmKyspaWYoYz0iaW1hZ2VzWyIrZisiXS4iLChzPXVbZl0pW2QrInJlZiJdPT09dC5faWQpe3ZhciBwPXNbZF0saD1zWyJzaXplIitkXSxnPW51bGwsbT1udWxsO2lmKG8pe2c9YShwLHQucmFuZ2UpO3ZhciB2PWgvTWF0aC5wb3coMTAsZykvMjttPTIqTWF0aC5sb2coditNYXRoLnNxcnQoMSt2KnYpKS9NYXRoLkxOMTB9ZWxzZSBtPShnPU1hdGgucG93KDEwLHApKSooTWF0aC5wb3coMTAsaC8yKS1NYXRoLnBvdygxMCwtaC8yKSk7bihnKT9uKG0pfHwobT1udWxsKTooZz1udWxsLG09bnVsbCksaShjK2QsZyksaShjKyJzaXplIitkLG0pfX19LHsiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSI6MjU3LCJmYXN0LWlzbnVtZXJpYyI6MTd9XSwxNDk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9ZSgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz1lKCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKGUsdCxyKXtmdW5jdGlvbiBpKHIsYSl7cmV0dXJuIG4uY29lcmNlKGUsdCxvLHIsYSl9dmFyIGw9aSgic291cmNlIik7aWYoIWkoInZpc2libGUiLCEhbCkpcmV0dXJuIHQ7aSgibGF5ZXIiKSxpKCJ4YW5jaG9yIiksaSgieWFuY2hvciIpLGkoInNpemV4IiksaSgic2l6ZXkiKSxpKCJzaXppbmciKSxpKCJvcGFjaXR5Iik7Zm9yKHZhciBzPXtfZnVsbExheW91dDpyfSxjPVsieCIsInkiXSx1PTA7dTwyO3UrKyl7dmFyIGQ9Y1t1XSxmPWEuY29lcmNlUmVmKGUsdCxzLGQsInBhcGVyIix2b2lkIDApO2lmKCJwYXBlciIhPT1mKWEuZ2V0RnJvbUlkKHMsZikuX2ltZ0luZGljZXMucHVzaCh0Ll9pbmRleCk7YS5jb2VyY2VQb3NpdGlvbih0LHMsaSxmLGQsMCl9cmV0dXJuIHR9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aShlLHQse25hbWU6ImltYWdlcyIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6Mjc0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Mjc5LCIuL2F0dHJpYnV0ZXMiOjE0N31dLDE1MDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJAcGxvdGx5L2QzIiksYT1lKCIuLi9kcmF3aW5nIiksaT1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbD1lKCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxyLHM9ZS5fZnVsbExheW91dCxjPVtdLHU9e30sZD1bXTtmb3Iocj0wO3I8cy5pbWFnZXMubGVuZ3RoO3IrKyl7dmFyIGY9cy5pbWFnZXNbcl07aWYoZi52aXNpYmxlKWlmKCJiZWxvdyI9PT1mLmxheWVyJiYicGFwZXIiIT09Zi54cmVmJiYicGFwZXIiIT09Zi55cmVmKXt0PW8ucmVmMmlkKGYueHJlZikrby5yZWYyaWQoZi55cmVmKTt2YXIgcD1zLl9wbG90c1t0XTtpZighcCl7ZC5wdXNoKGYpO2NvbnRpbnVlfXAubWFpbnBsb3QmJih0PXAubWFpbnBsb3QuaWQpLHVbdF18fCh1W3RdPVtdKSx1W3RdLnB1c2goZil9ZWxzZSJhYm92ZSI9PT1mLmxheWVyP2MucHVzaChmKTpkLnB1c2goZil9dmFyIGg9e2xlZnQ6e3NpemluZzoieE1pbiIsb2Zmc2V0OjB9LGNlbnRlcjp7c2l6aW5nOiJ4TWlkIixvZmZzZXQ6LS41fSxyaWdodDp7c2l6aW5nOiJ4TWF4IixvZmZzZXQ6LTF9fSxnPXt0b3A6e3NpemluZzoiWU1pbiIsb2Zmc2V0OjB9LG1pZGRsZTp7c2l6aW5nOiJZTWlkIixvZmZzZXQ6LS41fSxib3R0b206e3NpemluZzoiWU1heCIsb2Zmc2V0Oi0xfX07ZnVuY3Rpb24gbSh0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZih0aGlzLl9pbWdTcmMhPT10LnNvdXJjZSlpZihyLmF0dHIoInhtbG5zIixsLnN2ZyksdC5zb3VyY2UmJiJkYXRhOiI9PT10LnNvdXJjZS5zbGljZSgwLDUpKXIuYXR0cigieGxpbms6aHJlZiIsdC5zb3VyY2UpLHRoaXMuX2ltZ1NyYz10LnNvdXJjZTtlbHNle3ZhciBhPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBJbWFnZTtmdW5jdGlvbiBhKCl7ci5yZW1vdmUoKSxlKCl9dGhpcy5pbWc9bixuLnNldEF0dHJpYnV0ZSgiY3Jvc3NPcmlnaW4iLCJhbm9ueW1vdXMiKSxuLm9uZXJyb3I9YSxuLm9ubG9hZD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3Qud2lkdGg9dGhpcy53aWR0aCx0LmhlaWdodD10aGlzLmhlaWdodCx0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHRoaXMsMCwwKTt2YXIgbj10LnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ci5hdHRyKCJ4bGluazpocmVmIixuKSxlKCl9LHIub24oImVycm9yIixhKSxuLnNyYz10LnNvdXJjZSx0aGlzLl9pbWdTcmM9dC5zb3VyY2V9LmJpbmQodGhpcykpO2UuX3Byb21pc2VzLnB1c2goYSl9fWZ1bmN0aW9uIHYodCl7dmFyIHIsbyxsPW4uc2VsZWN0KHRoaXMpLGM9aS5nZXRGcm9tSWQoZSx0LnhyZWYpLHU9aS5nZXRGcm9tSWQoZSx0LnlyZWYpLGQ9ImRvbWFpbiI9PT1pLmdldFJlZlR5cGUodC54cmVmKSxmPSJkb21haW4iPT09aS5nZXRSZWZUeXBlKHQueXJlZikscD1zLl9zaXplO3I9dm9pZCAwIT09Yz8ic3RyaW5nIj09dHlwZW9mIHQueHJlZiYmZD9jLl9sZW5ndGgqdC5zaXpleDpNYXRoLmFicyhjLmwycCh0LnNpemV4KS1jLmwycCgwKSk6dC5zaXpleCpwLncsbz12b2lkIDAhPT11PyJzdHJpbmciPT10eXBlb2YgdC55cmVmJiZmP3UuX2xlbmd0aCp0LnNpemV5Ok1hdGguYWJzKHUubDJwKHQuc2l6ZXkpLXUubDJwKDApKTp0LnNpemV5KnAuaDt2YXIgbSx2LHk9cipoW3QueGFuY2hvcl0ub2Zmc2V0LHg9bypnW3QueWFuY2hvcl0ub2Zmc2V0LGI9aFt0LnhhbmNob3JdLnNpemluZytnW3QueWFuY2hvcl0uc2l6aW5nO3N3aXRjaChtPXZvaWQgMCE9PWM/InN0cmluZyI9PXR5cGVvZiB0LnhyZWYmJmQ/Yy5fbGVuZ3RoKnQueCtjLl9vZmZzZXQ6Yy5yMnAodC54KStjLl9vZmZzZXQ6dC54KnAudytwLmwsbSs9eSx2PXZvaWQgMCE9PXU/InN0cmluZyI9PXR5cGVvZiB0LnlyZWYmJmY/dS5fbGVuZ3RoKigxLXQueSkrdS5fb2Zmc2V0OnUucjJwKHQueSkrdS5fb2Zmc2V0OnAuaC10LnkqcC5oK3AudCx2Kz14LHQuc2l6aW5nKXtjYXNlImZpbGwiOmIrPSIgc2xpY2UiO2JyZWFrO2Nhc2Uic3RyZXRjaCI6Yj0ibm9uZSJ9bC5hdHRyKHt4Om0seTp2LHdpZHRoOnIsaGVpZ2h0Om8scHJlc2VydmVBc3BlY3RSYXRpbzpiLG9wYWNpdHk6dC5vcGFjaXR5fSk7dmFyIF89KGMmJiJkb21haW4iIT09aS5nZXRSZWZUeXBlKHQueHJlZik/Yy5faWQ6IiIpKyh1JiYiZG9tYWluIiE9PWkuZ2V0UmVmVHlwZSh0LnlyZWYpP3UuX2lkOiIiKTthLnNldENsaXBVcmwobCxfPyJjbGlwIitzLl91aWQrXzpudWxsLGUpfXZhciB5PXMuX2ltYWdlTG93ZXJMYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShkKSx4PXMuX2ltYWdlVXBwZXJMYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShjKTt5LmVudGVyKCkuYXBwZW5kKCJpbWFnZSIpLHguZW50ZXIoKS5hcHBlbmQoImltYWdlIikseS5leGl0KCkucmVtb3ZlKCkseC5leGl0KCkucmVtb3ZlKCkseS5lYWNoKChmdW5jdGlvbihlKXttLmJpbmQodGhpcykoZSksdi5iaW5kKHRoaXMpKGUpfSkpLHguZWFjaCgoZnVuY3Rpb24oZSl7bS5iaW5kKHRoaXMpKGUpLHYuYmluZCh0aGlzKShlKX0pKTt2YXIgYj1PYmplY3Qua2V5cyhzLl9wbG90cyk7Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKyl7dD1iW3JdO3ZhciBfPXMuX3Bsb3RzW3RdO2lmKF8uaW1hZ2VsYXllcil7dmFyIHc9Xy5pbWFnZWxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKHVbdF18fFtdKTt3LmVudGVyKCkuYXBwZW5kKCJpbWFnZSIpLHcuZXhpdCgpLnJlbW92ZSgpLHcuZWFjaCgoZnVuY3Rpb24oZSl7bS5iaW5kKHRoaXMpKGUpLHYuYmluZCh0aGlzKShlKX0pKX19fX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6MjEzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Mjc5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjI4MywiLi4vZHJhd2luZyI6MTI0LCJAcGxvdGx5L2QzIjoxMX1dLDE1MTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiaW1hZ2VzIixsYXlvdXRBdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKSxpbmNsdWRlQmFzZVBsb3Q6ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyIpKCJpbWFnZXMiKSxkcmF3OmUoIi4vZHJhdyIpLGNvbnZlcnRDb29yZHM6ZSgiLi9jb252ZXJ0X2Nvb3JkcyIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIjoyOTIsIi4vYXR0cmlidXRlcyI6MTQ3LCIuL2NvbnZlcnRfY29vcmRzIjoxNDgsIi4vZGVmYXVsdHMiOjE0OSwiLi9kcmF3IjoxNTB9XSwxNTI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT1lKCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7dC5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJsZWdlbmQifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImxlZ2VuZCJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImxlZ2VuZCJ9KSxncm91cHRpdGxlZm9udDpuKHtlZGl0VHlwZToibGVnZW5kIn0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6InYiLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZW9yZGVyOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJyZXZlcnNlZCIsImdyb3VwZWQiXSxleHRyYXM6WyJub3JtYWwiXSxlZGl0VHlwZToibGVnZW5kIn0sdHJhY2Vncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNvbnN0YW50Il0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjMwLGRmbHQ6MzAsZWRpdFR5cGU6ImxlZ2VuZCJ9LGl0ZW1jbGljazp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9nZ2xlIiwidG9nZ2xlb3RoZXJzIiwhMV0sZGZsdDoidG9nZ2xlIixlZGl0VHlwZToibGVnZW5kIn0saXRlbWRvdWJsZWNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b2dnbGUiLCJ0b2dnbGVvdGhlcnMiLCExXSxkZmx0OiJ0b2dnbGVvdGhlcnMiLGVkaXRUeXBlOiJsZWdlbmQifSxncm91cGNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b2dnbGVpdGVtIiwidG9nZ2xlZ3JvdXAiXSxkZmx0OiJ0b2dnbGVncm91cCIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJsZWdlbmQifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJsZWdlbmQifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImxlZ2VuZCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImxlZ2VuZCJ9KSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJsZWZ0IiwidG9wIGxlZnQiXSxlZGl0VHlwZToibGVnZW5kIn0sZWRpdFR5cGU6ImxlZ2VuZCJ9LGVkaXRUeXBlOiJsZWdlbmQifX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjMxMCwiLi4vY29sb3IvYXR0cmlidXRlcyI6MTAxfV0sMTUzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17c2Nyb2xsQmFyV2lkdGg6NixzY3JvbGxCYXJNaW5IZWlnaHQ6MjAsc2Nyb2xsQmFyQ29sb3I6IiM4MDhCQTQiLHNjcm9sbEJhck1hcmdpbjo0LHNjcm9sbEJhckVudGVyQXR0cnM6e3J4OjIwLHJ5OjMsd2lkdGg6MCxoZWlnaHQ6MH0sdGl0bGVQYWQ6MixpdGVtR2FwOjV9fSx7fV0sMTU0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3JlZ2lzdHJ5IiksYT1lKCIuLi8uLi9saWIiKSxpPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPWUoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPWUoIi4vYXR0cmlidXRlcyIpLHM9ZSgiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxjPWUoIi4vaGVscGVycyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIHUsZD1lLmxlZ2VuZHx8e30sZj1pLm5ld0NvbnRhaW5lcih0LCJsZWdlbmQiKTtmdW5jdGlvbiBwKGUsdCl7cmV0dXJuIGEuY29lcmNlKGQsZixsLGUsdCl9Zm9yKHZhciBoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dS5faW5wdXQsbj11O3JldHVybiBhLmNvZXJjZShyLG4sbyxlLHQpfSxnPXQuZm9udHx8e30sbT1hLmNvZXJjZUZvbnQocCwiZ3JvdXB0aXRsZWZvbnQiLGEuZXh0ZW5kRmxhdCh7fSxnLHtzaXplOk1hdGgucm91bmQoMS4xKmcuc2l6ZSl9KSksdj0wLHk9ITEseD0ibm9ybWFsIixiPTA7YjxyLmxlbmd0aDtiKyspKHU9cltiXSkudmlzaWJsZSYmKCh1LnNob3dsZWdlbmR8fHUuX2RmbHRTaG93TGVnZW5kJiYhKHUuX21vZHVsZSYmdS5fbW9kdWxlLmF0dHJpYnV0ZXMmJnUuX21vZHVsZS5hdHRyaWJ1dGVzLnNob3dsZWdlbmQmJiExPT09dS5fbW9kdWxlLmF0dHJpYnV0ZXMuc2hvd2xlZ2VuZC5kZmx0KSkmJih2KyssdS5zaG93bGVnZW5kJiYoeT0hMCwobi50cmFjZUlzKHUsInBpZS1saWtlIil8fCEwPT09dS5faW5wdXQuc2hvd2xlZ2VuZCkmJnYrKyksYS5jb2VyY2VGb250KGgsImxlZ2VuZGdyb3VwdGl0bGUuZm9udCIsbSkpLChuLnRyYWNlSXModSwiYmFyIikmJiJzdGFjayI9PT10LmJhcm1vZGV8fC0xIT09WyJ0b25leHR4IiwidG9uZXh0eSJdLmluZGV4T2YodS5maWxsKSkmJih4PWMuaXNHcm91cGVkKHt0cmFjZW9yZGVyOnh9KT8iZ3JvdXBlZCtyZXZlcnNlZCI6InJldmVyc2VkIiksdm9pZCAwIT09dS5sZWdlbmRncm91cCYmIiIhPT11LmxlZ2VuZGdyb3VwJiYoeD1jLmlzUmV2ZXJzZWQoe3RyYWNlb3JkZXI6eH0pPyJyZXZlcnNlZCtncm91cGVkIjoiZ3JvdXBlZCIpKTt2YXIgXz1hLmNvZXJjZShlLHQscywic2hvd2xlZ2VuZCIseSYmdj4xKTtpZighMT09PV8mJih0LmxlZ2VuZD12b2lkIDApLCghMSE9PV98fGQudWlyZXZpc2lvbikmJihwKCJ1aXJldmlzaW9uIix0LnVpcmV2aXNpb24pLCExIT09Xykpe3AoImJnY29sb3IiLHQucGFwZXJfYmdjb2xvcikscCgiYm9yZGVyY29sb3IiKSxwKCJib3JkZXJ3aWR0aCIpO3ZhciB3LFQsTSxrPWEuY29lcmNlRm9udChwLCJmb250Iix0LmZvbnQpLEE9ImgiPT09cCgib3JpZW50YXRpb24iKTtpZihBPyh3PTAsbi5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoZS54YXhpcyk/KFQ9MS4xLE09ImJvdHRvbSIpOihUPS0uMSxNPSJ0b3AiKSk6KHc9MS4wMixUPTEsTT0iYXV0byIpLHAoInRyYWNlb3JkZXIiLHgpLGMuaXNHcm91cGVkKHQubGVnZW5kKSYmcCgidHJhY2Vncm91cGdhcCIpLHAoIml0ZW1zaXppbmciKSxwKCJpdGVtd2lkdGgiKSxwKCJpdGVtY2xpY2siKSxwKCJpdGVtZG91YmxlY2xpY2siKSxwKCJncm91cGNsaWNrIikscCgieCIsdykscCgieGFuY2hvciIpLHAoInkiLFQpLHAoInlhbmNob3IiLE0pLHAoInZhbGlnbiIpLGEubm9uZU9yQWxsKGQsZixbIngiLCJ5Il0pLHAoInRpdGxlLnRleHQiKSl7cCgidGl0bGUuc2lkZSIsQT8ibGVmdCI6InRvcCIpO3ZhciBMPWEuZXh0ZW5kRmxhdCh7fSxrLHtzaXplOmEuYmlnRm9udChrLnNpemUpfSk7YS5jb2VyY2VGb250KHAsInRpdGxlLmZvbnQiLEwpfX19fSx7Ii4uLy4uL2xpYiI6MjMyLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyNjgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjI3NSwiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjMxNCwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi9hdHRyaWJ1dGVzIjoxNTIsIi4vaGVscGVycyI6MTU4fV0sMTU1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4uLy4uL2xpYiIpLGk9ZSgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPWUoIi4uLy4uL3JlZ2lzdHJ5IiksbD1lKCIuLi8uLi9saWIvZXZlbnRzIikscz1lKCIuLi9kcmFnZWxlbWVudCIpLGM9ZSgiLi4vZHJhd2luZyIpLHU9ZSgiLi4vY29sb3IiKSxkPWUoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGY9ZSgiLi9oYW5kbGVfY2xpY2siKSxwPWUoIi4vY29uc3RhbnRzIiksaD1lKCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IiksZz1oLkxJTkVfU1BBQ0lORyxtPWguRlJPTV9UTCx2PWguRlJPTV9CUix5PWUoIi4vZ2V0X2xlZ2VuZF9kYXRhIikseD1lKCIuL3N0eWxlIiksYj1lKCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBfKGUsdCxyLG4sYSl7dmFyIGk9ci5kYXRhKClbMF1bMF0udHJhY2Uscz17ZXZlbnQ6YSxub2RlOnIubm9kZSgpLGN1cnZlTnVtYmVyOmkuaW5kZXgsZXhwYW5kZWRJbmRleDppLl9leHBhbmRlZEluZGV4LGRhdGE6ZS5kYXRhLGxheW91dDplLmxheW91dCxmcmFtZXM6ZS5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxjb25maWc6ZS5fY29udGV4dCxmdWxsRGF0YTplLl9mdWxsRGF0YSxmdWxsTGF5b3V0OmUuX2Z1bGxMYXlvdXR9O2lmKGkuX2dyb3VwJiYocy5ncm91cD1pLl9ncm91cCksby50cmFjZUlzKGksInBpZS1saWtlIikmJihzLmxhYmVsPXIuZGF0dW0oKVswXS5sYWJlbCksITEhPT1sLnRyaWdnZXJIYW5kbGVyKGUsInBsb3RseV9sZWdlbmRjbGljayIscykpaWYoMT09PW4pdC5fY2xpY2tUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5fZnVsbExheW91dCYmZihyLGUsbil9KSxlLl9jb250ZXh0LmRvdWJsZUNsaWNrRGVsYXkpO2Vsc2UgaWYoMj09PW4pe3QuX2NsaWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHQuX2NsaWNrVGltZW91dCksZS5fbGVnZW5kTW91c2VEb3duVGltZT0wLCExIT09bC50cmlnZ2VySGFuZGxlcihlLCJwbG90bHlfbGVnZW5kZG91YmxlY2xpY2siLHMpJiZmKHIsZSxuKX19ZnVuY3Rpb24gdyhlLHQscil7dmFyIG4saSxsPWUuZGF0YSgpWzBdWzBdLHM9bC50cmFjZSx1PW8udHJhY2VJcyhzLCJwaWUtbGlrZSIpLGY9IXIuX2luSG92ZXImJnQuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dCYmIXUsaD1yLl9tYXhOYW1lTGVuZ3RoO2wuZ3JvdXBUaXRsZT8obj1sLmdyb3VwVGl0bGUudGV4dCxpPWwuZ3JvdXBUaXRsZS5mb250KTooaT1yLmZvbnQsci5lbnRyaWVzP249bC50ZXh0OihuPXU/bC5sYWJlbDpzLm5hbWUscy5fbWV0YSYmKG49YS50ZW1wbGF0ZVN0cmluZyhuLHMuX21ldGEpKSkpO3ZhciBnPWEuZW5zdXJlU2luZ2xlKGUsInRleHQiLCJsZWdlbmR0ZXh0Iik7Zy5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikuY2FsbChjLmZvbnQsaSkudGV4dChmP1QobixoKTpuKTt2YXIgbT1yLml0ZW13aWR0aCsyKnAuaXRlbUdhcDtkLnBvc2l0aW9uVGV4dChnLG0sMCksZj9nLmNhbGwoZC5tYWtlRWRpdGFibGUse2dkOnQsdGV4dDpufSkuY2FsbChrLGUsdCxyKS5vbigiZWRpdCIsKGZ1bmN0aW9uKG4pe3RoaXMudGV4dChUKG4saCkpLmNhbGwoayxlLHQscik7dmFyIGk9bC50cmFjZS5fZnVsbElucHV0fHx7fSxjPXt9O2lmKG8uaGFzVHJhbnNmb3JtKGksImdyb3VwYnkiKSl7dmFyIHU9by5nZXRUcmFuc2Zvcm1JbmRpY2VzKGksImdyb3VwYnkiKSxkPXVbdS5sZW5ndGgtMV0sZj1hLmtleWVkQ29udGFpbmVyKGksInRyYW5zZm9ybXNbIitkKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLm5hbWUiKTtmLnNldChsLnRyYWNlLl9ncm91cCxuKSxjPWYuY29uc3RydWN0VXBkYXRlKCl9ZWxzZSBjLm5hbWU9bjtyZXR1cm4gby5jYWxsKCJfZ3VpUmVzdHlsZSIsdCxjLHMuaW5kZXgpfSkpOmsoZyxlLHQscil9ZnVuY3Rpb24gVChlLHQpe3ZhciByPU1hdGgubWF4KDQsdCk7aWYoZSYmZS50cmltKCkubGVuZ3RoPj1yLzIpcmV0dXJuIGU7Zm9yKHZhciBuPXItKGU9ZXx8IiIpLmxlbmd0aDtuPjA7bi0tKWUrPSIgIjtyZXR1cm4gZX1mdW5jdGlvbiBNKGUsdCl7dmFyIHIsaT10Ll9jb250ZXh0LmRvdWJsZUNsaWNrRGVsYXksbz0xLGw9YS5lbnN1cmVTaW5nbGUoZSwicmVjdCIsImxlZ2VuZHRvZ2dsZSIsKGZ1bmN0aW9uKGUpe3QuX2NvbnRleHQuc3RhdGljUGxvdHx8ZS5zdHlsZSgiY3Vyc29yIiwicG9pbnRlciIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksZS5jYWxsKHUuZmlsbCwicmdiYSgwLDAsMCwwKSIpfSkpO3QuX2NvbnRleHQuc3RhdGljUGxvdHx8KGwub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKCl7KHI9KG5ldyBEYXRlKS5nZXRUaW1lKCkpLXQuX2xlZ2VuZE1vdXNlRG93blRpbWU8aT9vKz0xOihvPTEsdC5fbGVnZW5kTW91c2VEb3duVGltZT1yKX0pKSxsLm9uKCJtb3VzZXVwIiwoZnVuY3Rpb24oKXtpZighdC5fZHJhZ2dlZCYmIXQuX2VkaXRpbmcpe3ZhciByPXQuX2Z1bGxMYXlvdXQubGVnZW5kOyhuZXcgRGF0ZSkuZ2V0VGltZSgpLXQuX2xlZ2VuZE1vdXNlRG93blRpbWU+aSYmKG89TWF0aC5tYXgoby0xLDEpKSxfKHQscixlLG8sbi5ldmVudCl9fSkpKX1mdW5jdGlvbiBrKGUsdCxyLG4sYSl7bi5faW5Ib3ZlciYmZS5hdHRyKCJkYXRhLW5vdGV4IiwhMCksZC5jb252ZXJ0VG9Uc3BhbnMoZSxyLChmdW5jdGlvbigpeyFmdW5jdGlvbihlLHQscixuKXt2YXIgYT1lLmRhdGEoKVswXVswXTtpZighci5faW5Ib3ZlciYmYSYmIWEudHJhY2Uuc2hvd2xlZ2VuZClyZXR1cm4gdm9pZCBlLnJlbW92ZSgpO3ZhciBpPWUuc2VsZWN0KCJnW2NsYXNzKj1tYXRoLWdyb3VwXSIpLG89aS5ub2RlKCk7cnx8KHI9dC5fZnVsbExheW91dC5sZWdlbmQpO3ZhciBsLHM9ci5ib3JkZXJ3aWR0aDtsPTE9PT1uP3IudGl0bGUuZm9udDphLmdyb3VwVGl0bGU/YS5ncm91cFRpdGxlLmZvbnQ6ci5mb250O3ZhciB1LGYsaD1sLnNpemUqZztpZihvKXt2YXIgbT1jLmJCb3gobyk7dT1tLmhlaWdodCxmPW0ud2lkdGgsMT09PW4/Yy5zZXRUcmFuc2xhdGUoaSxzLHMrLjc1KnUpOmMuc2V0VHJhbnNsYXRlKGksMCwuMjUqdSl9ZWxzZXt2YXIgdj1lLnNlbGVjdCgxPT09bj8iLmxlZ2VuZHRpdGxldGV4dCI6Ii5sZWdlbmR0ZXh0IikseT1kLmxpbmVDb3VudCh2KSx4PXYubm9kZSgpO2lmKHU9aCp5LGY9eD9jLmJCb3goeCkud2lkdGg6MCwxPT09bikibGVmdCI9PT1yLnRpdGxlLnNpZGUmJihmKz0yKnAuaXRlbUdhcCksZC5wb3NpdGlvblRleHQodixzK3AudGl0bGVQYWQscytoKTtlbHNle3ZhciBiPTIqcC5pdGVtR2FwK3IuaXRlbXdpZHRoO2EuZ3JvdXBUaXRsZSYmKGI9cC5pdGVtR2FwLGYtPXIuaXRlbXdpZHRoKSxkLnBvc2l0aW9uVGV4dCh2LGIsLWgqKCh5LTEpLzItLjMpKX19MT09PW4/KHIuX3RpdGxlV2lkdGg9ZixyLl90aXRsZUhlaWdodD11KTooYS5saW5lSGVpZ2h0PWgsYS5oZWlnaHQ9TWF0aC5tYXgodSwxNikrMyxhLndpZHRoPWYpfSh0LHIsbixhKX0pKX1mdW5jdGlvbiBBKGUpe3JldHVybiBhLmlzUmlnaHRBbmNob3IoZSk/InJpZ2h0IjphLmlzQ2VudGVyQW5jaG9yKGUpPyJjZW50ZXIiOiJsZWZ0In1mdW5jdGlvbiBMKGUpe3JldHVybiBhLmlzQm90dG9tQW5jaG9yKGUpPyJib3R0b20iOmEuaXNNaWRkbGVBbmNob3IoZSk/Im1pZGRsZSI6InRvcCJ9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fCh0PWUuX2Z1bGxMYXlvdXQubGVnZW5kfHx7fSksZnVuY3Rpb24oZSx0KXt2YXIgcixsLGQ9ZS5fZnVsbExheW91dCxmPSJsZWdlbmQiK2QuX3VpZCxoPXQuX2luSG92ZXI7aD8ocj10LmxheWVyLGYrPSItaG92ZXIiKTpyPWQuX2luZm9sYXllcjtpZighcilyZXR1cm47ZS5fbGVnZW5kTW91c2VEb3duVGltZXx8KGUuX2xlZ2VuZE1vdXNlRG93blRpbWU9MCk7aWYoaCl7aWYoIXQuZW50cmllcylyZXR1cm47bD15KHQuZW50cmllcyx0KX1lbHNle2lmKCFlLmNhbGNkYXRhKXJldHVybjtsPWQuc2hvd2xlZ2VuZCYmeShlLmNhbGNkYXRhLHQpfXZhciBnPWQuaGlkZGVubGFiZWxzfHxbXTtpZighKGh8fGQuc2hvd2xlZ2VuZCYmbC5sZW5ndGgpKXJldHVybiByLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLnJlbW92ZSgpLGQuX3RvcGRlZnMuc2VsZWN0KCIjIitmKS5yZW1vdmUoKSxpLmF1dG9NYXJnaW4oZSwibGVnZW5kIik7dmFyIFQ9YS5lbnN1cmVTaW5nbGUociwiZyIsImxlZ2VuZCIsKGZ1bmN0aW9uKGUpe2h8fGUuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKSxTPWEuZW5zdXJlU2luZ2xlQnlJZChkLl90b3BkZWZzLCJjbGlwUGF0aCIsZiwoZnVuY3Rpb24oZSl7ZS5hcHBlbmQoInJlY3QiKX0pKSxEPWEuZW5zdXJlU2luZ2xlKFQsInJlY3QiLCJiZyIsKGZ1bmN0aW9uKGUpe2UuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpfSkpO0QuY2FsbCh1LnN0cm9rZSx0LmJvcmRlcmNvbG9yKS5jYWxsKHUuZmlsbCx0LmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHQuYm9yZGVyd2lkdGgrInB4Iik7dmFyIEM9YS5lbnN1cmVTaW5nbGUoVCwiZyIsInNjcm9sbGJveCIpLE89dC50aXRsZTtpZih0Ll90aXRsZVdpZHRoPTAsdC5fdGl0bGVIZWlnaHQ9MCxPLnRleHQpe3ZhciBQPWEuZW5zdXJlU2luZ2xlKEMsInRleHQiLCJsZWdlbmR0aXRsZXRleHQiKTtQLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5jYWxsKGMuZm9udCxPLmZvbnQpLnRleHQoTy50ZXh0KSxrKFAsQyxlLHQsMSl9ZWxzZSBDLnNlbGVjdEFsbCgiLmxlZ2VuZHRpdGxldGV4dCIpLnJlbW92ZSgpO3ZhciBJPWEuZW5zdXJlU2luZ2xlKFQsInJlY3QiLCJzY3JvbGxiYXIiLChmdW5jdGlvbihlKXtlLmF0dHIocC5zY3JvbGxCYXJFbnRlckF0dHJzKS5jYWxsKHUuZmlsbCxwLnNjcm9sbEJhckNvbG9yKX0pKSxSPUMuc2VsZWN0QWxsKCJnLmdyb3VwcyIpLmRhdGEobCk7Ui5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JvdXBzIiksUi5leGl0KCkucmVtb3ZlKCk7dmFyIHo9Ui5zZWxlY3RBbGwoImcudHJhY2VzIikuZGF0YShhLmlkZW50aXR5KTt6LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0cmFjZXMiKSx6LmV4aXQoKS5yZW1vdmUoKSx6LnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50cmFjZTtyZXR1cm4gby50cmFjZUlzKHQsInBpZS1saWtlIik/LTEhPT1nLmluZGV4T2YoZVswXS5sYWJlbCk/LjU6MToibGVnZW5kb25seSI9PT10LnZpc2libGU/LjU6MX0pKS5lYWNoKChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLmNhbGwodyxlLHQpfSkpLmNhbGwoeCxlLHQpLmVhY2goKGZ1bmN0aW9uKCl7aHx8bi5zZWxlY3QodGhpcykuY2FsbChNLGUpfSkpLGEuc3luY09yQXN5bmMoW2kucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQscixhKXt2YXIgaT1lLl9mdWxsTGF5b3V0O2F8fChhPWkubGVnZW5kKTt2YXIgbz1pLl9zaXplLGw9Yi5pc1ZlcnRpY2FsKGEpLHM9Yi5pc0dyb3VwZWQoYSksdT1hLmJvcmRlcndpZHRoLGQ9Mip1LGY9cC5pdGVtR2FwLGg9YS5pdGVtd2lkdGgrMipmLGc9MioodStmKSxtPUwoYSksdj1hLnk8MHx8MD09PWEueSYmInRvcCI9PT1tLHk9YS55PjF8fDE9PT1hLnkmJiJib3R0b20iPT09bSx4PWEudHJhY2Vncm91cGdhcDthLl9tYXhIZWlnaHQ9TWF0aC5tYXgodnx8eT9pLmhlaWdodC8yOm8uaCwzMCk7dmFyIF89MDthLl93aWR0aD0wLGEuX2hlaWdodD0wO3ZhciB3PWZ1bmN0aW9uKGUpe3ZhciB0PTAscj0wLG49ZS50aXRsZS5zaWRlO24mJigtMSE9PW4uaW5kZXhPZigibGVmdCIpJiYodD1lLl90aXRsZVdpZHRoKSwtMSE9PW4uaW5kZXhPZigidG9wIikmJihyPWUuX3RpdGxlSGVpZ2h0KSk7cmV0dXJuW3Qscl19KGEpO2lmKGwpci5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLmhlaWdodDtjLnNldFRyYW5zbGF0ZSh0aGlzLHUrd1swXSx1K3dbMV0rYS5faGVpZ2h0K3QvMitmKSxhLl9oZWlnaHQrPXQsYS5fd2lkdGg9TWF0aC5tYXgoYS5fd2lkdGgsZVswXS53aWR0aCl9KSksXz1oK2EuX3dpZHRoLGEuX3dpZHRoKz1mK2grZCxhLl9oZWlnaHQrPWcscyYmKHQuZWFjaCgoZnVuY3Rpb24oZSx0KXtjLnNldFRyYW5zbGF0ZSh0aGlzLDAsdCphLnRyYWNlZ3JvdXBnYXApfSkpLGEuX2hlaWdodCs9KGEuX2xncm91cHNMZW5ndGgtMSkqYS50cmFjZWdyb3VwZ2FwKTtlbHNle3ZhciBUPUEoYSksTT1hLng8MHx8MD09PWEueCYmInJpZ2h0Ij09PVQsaz1hLng+MXx8MT09PWEueCYmImxlZnQiPT09VCxTPXl8fHYsRD1pLndpZHRoLzI7YS5fbWF4V2lkdGg9TWF0aC5tYXgoTT9TJiYibGVmdCI9PT1UP28ubCtvLnc6RDprP1MmJiJyaWdodCI9PT1UP28ucitvLnc6RDpvLncsMipoKTt2YXIgQz0wLE89MDtyLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0ud2lkdGgraDtDPU1hdGgubWF4KEMsdCksTys9dH0pKSxfPW51bGw7dmFyIFA9MDtpZihzKXt2YXIgST0wLFI9MCx6PTA7dC5lYWNoKChmdW5jdGlvbigpe3ZhciBlPTAsdD0wO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy50cmFjZXMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgbj1yWzBdLndpZHRoLGE9clswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcyx3WzBdLHdbMV0rdStmK2EvMit0KSx0Kz1hLGU9TWF0aC5tYXgoZSxoK24pfSkpLEk9TWF0aC5tYXgoSSx0KTt2YXIgcj1lK2Y7Uj4wJiZyK3UrUj5hLl9tYXhXaWR0aCYmKFA9TWF0aC5tYXgoUCxSKSxSPTAseis9SSt4LEk9dCksYy5zZXRUcmFuc2xhdGUodGhpcyxSLHopLFIrPXJ9KSksYS5fd2lkdGg9TWF0aC5tYXgoUCxSKSt1LGEuX2hlaWdodD16K0krZ31lbHNle3ZhciBOPXIuc2l6ZSgpLEY9TytkKyhOLTEpKmY8YS5fbWF4V2lkdGgsRT0wLGo9MCxIPTAsQj0wO3IuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS5oZWlnaHQscj1oK2VbMF0ud2lkdGgsbj0oRj9yOkMpK2Y7bit1K2otZj49YS5fbWF4V2lkdGgmJihQPU1hdGgubWF4KFAsQiksaj0wLEgrPUUsYS5faGVpZ2h0Kz1FLEU9MCksYy5zZXRUcmFuc2xhdGUodGhpcyx3WzBdK3Uraix3WzFdK3UrSCt0LzIrZiksQj1qK3IrZixqKz1uLEU9TWF0aC5tYXgoRSx0KX0pKSxGPyhhLl93aWR0aD1qK2QsYS5faGVpZ2h0PUUrZyk6KGEuX3dpZHRoPU1hdGgubWF4KFAsQikrZCxhLl9oZWlnaHQrPUUrZyl9fWEuX3dpZHRoPU1hdGguY2VpbChNYXRoLm1heChhLl93aWR0aCt3WzBdLGEuX3RpdGxlV2lkdGgrMioodStwLnRpdGxlUGFkKSkpLGEuX2hlaWdodD1NYXRoLmNlaWwoTWF0aC5tYXgoYS5faGVpZ2h0K3dbMV0sYS5fdGl0bGVIZWlnaHQrMioodStwLml0ZW1HYXApKSksYS5fZWZmSGVpZ2h0PU1hdGgubWluKGEuX2hlaWdodCxhLl9tYXhIZWlnaHQpO3ZhciBZPWUuX2NvbnRleHQuZWRpdHMsVj1ZLmxlZ2VuZFRleHR8fFkubGVnZW5kUG9zaXRpb247ci5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoIi5sZWdlbmR0b2dnbGUiKSxyPWVbMF0uaGVpZ2h0LGE9Vj9oOl98fGgrZVswXS53aWR0aDtsfHwoYSs9Zi8yKSxjLnNldFJlY3QodCwwLC1yLzIsYSxyKX0pKX0oZSxSLHosdCl9LGZ1bmN0aW9uKCl7dmFyIGwsdSxnLHkseD1kLl9zaXplLGI9dC5ib3JkZXJ3aWR0aDtpZighaCl7aWYoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dC5sZWdlbmQscj1BKHQpLG49TCh0KTtyZXR1cm4gaS5hdXRvTWFyZ2luKGUsImxlZ2VuZCIse3g6dC54LHk6dC55LGw6dC5fd2lkdGgqbVtyXSxyOnQuX3dpZHRoKnZbcl0sYjp0Ll9lZmZIZWlnaHQqdltuXSx0OnQuX2VmZkhlaWdodCptW25dfSl9KGUpKXJldHVybjt2YXIgdz14LmwreC53KnQueC1tW0EodCldKnQuX3dpZHRoLE09eC50K3guaCooMS10LnkpLW1bTCh0KV0qdC5fZWZmSGVpZ2h0O2lmKGQubWFyZ2luLmF1dG9leHBhbmQpe3ZhciBrPXcsTz1NO3c9YS5jb25zdHJhaW4odywwLGQud2lkdGgtdC5fd2lkdGgpLE09YS5jb25zdHJhaW4oTSwwLGQuaGVpZ2h0LXQuX2VmZkhlaWdodCksdyE9PWsmJmEubG9nKCJDb25zdHJhaW4gbGVnZW5kLnggdG8gbWFrZSBsZWdlbmQgZml0IGluc2lkZSBncmFwaCIpLE0hPT1PJiZhLmxvZygiQ29uc3RyYWluIGxlZ2VuZC55IHRvIG1ha2UgbGVnZW5kIGZpdCBpbnNpZGUgZ3JhcGgiKX1jLnNldFRyYW5zbGF0ZShULHcsTSl9aWYoSS5vbigiLmRyYWciLG51bGwpLFQub24oIndoZWVsIixudWxsKSxofHx0Ll9oZWlnaHQ8PXQuX21heEhlaWdodHx8ZS5fY29udGV4dC5zdGF0aWNQbG90KXt2YXIgUD10Ll9lZmZIZWlnaHQ7aCYmKFA9dC5faGVpZ2h0KSxELmF0dHIoe3dpZHRoOnQuX3dpZHRoLWIsaGVpZ2h0OlAtYix4OmIvMix5OmIvMn0pLGMuc2V0VHJhbnNsYXRlKEMsMCwwKSxTLnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOnQuX3dpZHRoLTIqYixoZWlnaHQ6UC0yKmIseDpiLHk6Yn0pLGMuc2V0Q2xpcFVybChDLGYsZSksYy5zZXRSZWN0KEksMCwwLDAsMCksZGVsZXRlIHQuX3Njcm9sbFl9ZWxzZXt2YXIgUix6LE4sRj1NYXRoLm1heChwLnNjcm9sbEJhck1pbkhlaWdodCx0Ll9lZmZIZWlnaHQqdC5fZWZmSGVpZ2h0L3QuX2hlaWdodCksRT10Ll9lZmZIZWlnaHQtRi0yKnAuc2Nyb2xsQmFyTWFyZ2luLGo9dC5faGVpZ2h0LXQuX2VmZkhlaWdodCxIPUUvaixCPU1hdGgubWluKHQuX3Njcm9sbFl8fDAsaik7RC5hdHRyKHt3aWR0aDp0Ll93aWR0aC0yKmIrcC5zY3JvbGxCYXJXaWR0aCtwLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6dC5fZWZmSGVpZ2h0LWIseDpiLzIseTpiLzJ9KSxTLnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOnQuX3dpZHRoLTIqYitwLnNjcm9sbEJhcldpZHRoK3Auc2Nyb2xsQmFyTWFyZ2luLGhlaWdodDp0Ll9lZmZIZWlnaHQtMipiLHg6Yix5OmIrQn0pLGMuc2V0Q2xpcFVybChDLGYsZSksVShCLEYsSCksVC5vbigid2hlZWwiLChmdW5jdGlvbigpe1UoQj1hLmNvbnN0cmFpbih0Ll9zY3JvbGxZK24uZXZlbnQuZGVsdGFZL0UqaiwwLGopLEYsSCksMCE9PUImJkIhPT1qJiZuLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9KSk7dmFyIFk9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7dmFyIGU9bi5ldmVudC5zb3VyY2VFdmVudDtSPSJ0b3VjaHN0YXJ0Ij09PWUudHlwZT9lLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk6ZS5jbGllbnRZLE49Qn0pKS5vbigiZHJhZyIsKGZ1bmN0aW9uKCl7dmFyIGU9bi5ldmVudC5zb3VyY2VFdmVudDsyPT09ZS5idXR0b25zfHxlLmN0cmxLZXl8fCh6PSJ0b3VjaG1vdmUiPT09ZS50eXBlP2UuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTplLmNsaWVudFksVShCPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj0oci10KS9IK2U7cmV0dXJuIGEuY29uc3RyYWluKG4sMCxqKX0oTixSLHopLEYsSCkpfSkpO0kuY2FsbChZKTt2YXIgVj1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oKXt2YXIgZT1uLmV2ZW50LnNvdXJjZUV2ZW50OyJ0b3VjaHN0YXJ0Ij09PWUudHlwZSYmKFI9ZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZLE49Qil9KSkub24oImRyYWciLChmdW5jdGlvbigpe3ZhciBlPW4uZXZlbnQuc291cmNlRXZlbnQ7InRvdWNobW92ZSI9PT1lLnR5cGUmJih6PWUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WSxVKEI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPSh0LXIpL0grZTtyZXR1cm4gYS5jb25zdHJhaW4obiwwLGopfShOLFIseiksRixIKSl9KSk7Qy5jYWxsKFYpfWZ1bmN0aW9uIFUocixuLGEpe3QuX3Njcm9sbFk9ZS5fZnVsbExheW91dC5sZWdlbmQuX3Njcm9sbFk9cixjLnNldFRyYW5zbGF0ZShDLDAsLXIpLGMuc2V0UmVjdChJLHQuX3dpZHRoLHAuc2Nyb2xsQmFyTWFyZ2luK3IqYSxwLnNjcm9sbEJhcldpZHRoLG4pLFMuc2VsZWN0KCJyZWN0IikuYXR0cigieSIsYityKX1lLl9jb250ZXh0LmVkaXRzLmxlZ2VuZFBvc2l0aW9uJiYoVC5jbGFzc2VkKCJjdXJzb3ItbW92ZSIsITApLHMuaW5pdCh7ZWxlbWVudDpULm5vZGUoKSxnZDplLHByZXBGbjpmdW5jdGlvbigpe3ZhciBlPWMuZ2V0VHJhbnNsYXRlKFQpO2c9ZS54LHk9ZS55fSxtb3ZlRm46ZnVuY3Rpb24oZSxyKXt2YXIgbj1nK2UsYT15K3I7Yy5zZXRUcmFuc2xhdGUoVCxuLGEpLGw9cy5hbGlnbihuLDAseC5sLHgubCt4LncsdC54YW5jaG9yKSx1PXMuYWxpZ24oYSwwLHgudCt4LmgseC50LHQueWFuY2hvcil9LGRvbmVGbjpmdW5jdGlvbigpe3ZvaWQgMCE9PWwmJnZvaWQgMCE9PXUmJm8uY2FsbCgiX2d1aVJlbGF5b3V0IixlLHsibGVnZW5kLngiOmwsImxlZ2VuZC55Ijp1fSl9LGNsaWNrRm46ZnVuY3Rpb24odCxuKXt2YXIgYT1yLnNlbGVjdEFsbCgiZy50cmFjZXMiKS5maWx0ZXIoKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbi5jbGllbnRYPj1lLmxlZnQmJm4uY2xpZW50WDw9ZS5yaWdodCYmbi5jbGllbnRZPj1lLnRvcCYmbi5jbGllbnRZPD1lLmJvdHRvbX0pKTthLnNpemUoKT4wJiZfKGUsVCxhLHQsbil9fSkpfV0sZSl9KGUsdCl9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjIwNywiLi4vLi4vbGliIjoyMzIsIi4uLy4uL2xpYi9ldmVudHMiOjIyNSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjoyNTUsIi4uLy4uL3Bsb3RzL3Bsb3RzIjozMTYsIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4uL2NvbG9yIjoxMDIsIi4uL2RyYWdlbGVtZW50IjoxMjEsIi4uL2RyYXdpbmciOjEyNCwiLi9jb25zdGFudHMiOjE1MywiLi9nZXRfbGVnZW5kX2RhdGEiOjE1NiwiLi9oYW5kbGVfY2xpY2siOjE1NywiLi9oZWxwZXJzIjoxNTgsIi4vc3R5bGUiOjE2MCwiQHBsb3RseS9kMyI6MTF9XSwxNTY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcmVnaXN0cnkiKSxhPWUoIi4vaGVscGVycyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByLGksbz10Ll9pbkhvdmVyLGw9YS5pc0dyb3VwZWQodCkscz1hLmlzUmV2ZXJzZWQodCksYz17fSx1PVtdLGQ9ITEsZj17fSxwPTAsaD0wO2Z1bmN0aW9uIGcoZSxyKXtpZigiIiE9PWUmJmEuaXNHcm91cGVkKHQpKS0xPT09dS5pbmRleE9mKGUpPyh1LnB1c2goZSksZD0hMCxjW2VdPVtyXSk6Y1tlXS5wdXNoKHIpO2Vsc2V7dmFyIG49In5+aSIrcDt1LnB1c2gobiksY1tuXT1bcl0scCsrfX1mb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbT1lW3JdLHY9bVswXSx5PXYudHJhY2UseD15LmxlZ2VuZGdyb3VwO2lmKG98fHkudmlzaWJsZSYmeS5zaG93bGVnZW5kKWlmKG4udHJhY2VJcyh5LCJwaWUtbGlrZSIpKWZvcihmW3hdfHwoZlt4XT17fSksaT0wO2k8bS5sZW5ndGg7aSsrKXt2YXIgYj1tW2ldLmxhYmVsO2ZbeF1bYl18fChnKHgse2xhYmVsOmIsY29sb3I6bVtpXS5jb2xvcixpOm1baV0uaSx0cmFjZTp5LHB0czptW2ldLnB0c30pLGZbeF1bYl09ITAsaD1NYXRoLm1heChoLChifHwiIikubGVuZ3RoKSl9ZWxzZSBnKHgsdiksaD1NYXRoLm1heChoLCh5Lm5hbWV8fCIiKS5sZW5ndGgpfWlmKCF1Lmxlbmd0aClyZXR1cm5bXTt2YXIgXz0hZHx8IWwsdz1bXTtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKXt2YXIgVD1jW3Vbcl1dO18/dy5wdXNoKFRbMF0pOncucHVzaChUKX1mb3IoXyYmKHc9W3ddKSxyPTA7cjx3Lmxlbmd0aDtyKyspe3ZhciBNPTEvMDtmb3IoaT0wO2k8d1tyXS5sZW5ndGg7aSsrKXt2YXIgaz13W3JdW2ldLnRyYWNlLmxlZ2VuZHJhbms7TT5rJiYoTT1rKX13W3JdWzBdLl9ncm91cE1pblJhbms9TSx3W3JdWzBdLl9wcmVHcm91cFNvcnQ9cn12YXIgQT1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRyYWNlLmxlZ2VuZHJhbmstdC50cmFjZS5sZWdlbmRyYW5rfHxlLl9wcmVTb3J0LXQuX3ByZVNvcnR9O2Zvcih3LmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7ZVswXS5fcHJlR3JvdXBTb3J0PXR9KSksdy5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlWzBdLl9ncm91cE1pblJhbmstdFswXS5fZ3JvdXBNaW5SYW5rfHxlWzBdLl9wcmVHcm91cFNvcnQtdFswXS5fcHJlR3JvdXBTb3J0fSkpLHI9MDtyPHcubGVuZ3RoO3IrKyl7d1tyXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2UuX3ByZVNvcnQ9dH0pKSx3W3JdLnNvcnQoQSk7dmFyIEw9d1tyXVswXS50cmFjZSxTPW51bGw7Zm9yKGk9MDtpPHdbcl0ubGVuZ3RoO2krKyl7dmFyIEQ9d1tyXVtpXS50cmFjZS5sZWdlbmRncm91cHRpdGxlO2lmKEQmJkQudGV4dCl7Uz1ELG8mJihELmZvbnQ9dC5fZ3JvdXBUaXRsZUZvbnQpO2JyZWFrfX1pZihzJiZ3W3JdLnJldmVyc2UoKSxTKXt2YXIgQz0hMTtmb3IoaT0wO2k8d1tyXS5sZW5ndGg7aSsrKWlmKG4udHJhY2VJcyh3W3JdW2ldLnRyYWNlLCJwaWUtbGlrZSIpKXtDPSEwO2JyZWFrfXdbcl0udW5zaGlmdCh7aTotMSxncm91cFRpdGxlOlMsbm9DbGljazpDLHRyYWNlOntzaG93bGVnZW5kOkwuc2hvd2xlZ2VuZCxsZWdlbmRncm91cDpMLmxlZ2VuZGdyb3VwLHZpc2libGU6InRvZ2dsZWl0ZW0iPT09dC5ncm91cGNsaWNrfHxMLnZpc2libGV9fSl9Zm9yKGk9MDtpPHdbcl0ubGVuZ3RoO2krKyl3W3JdW2ldPVt3W3JdW2ldXX1yZXR1cm4gdC5fbGdyb3Vwc0xlbmd0aD13Lmxlbmd0aCx0Ll9tYXhOYW1lTGVuZ3RoPWgsd319LHsiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi9oZWxwZXJzIjoxNTh9XSwxNTc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9yZWdpc3RyeSIpLGk9ITA7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbz10Ll9mdWxsTGF5b3V0O2lmKCF0Ll9kcmFnZ2VkJiYhdC5fZWRpdGluZyl7dmFyIGwscz1vLmxlZ2VuZC5pdGVtY2xpY2ssYz1vLmxlZ2VuZC5pdGVtZG91YmxlY2xpY2ssdT1vLmxlZ2VuZC5ncm91cGNsaWNrO2lmKDE9PT1yJiYidG9nZ2xlIj09PXMmJiJ0b2dnbGVvdGhlcnMiPT09YyYmaSYmdC5kYXRhJiZ0Ll9jb250ZXh0LnNob3dUaXBzPyhuLm5vdGlmaWVyKG4uXyh0LCJEb3VibGUtY2xpY2sgb24gbGVnZW5kIHRvIGlzb2xhdGUgb25lIHRyYWNlIiksImxvbmciKSxpPSExKTppPSExLDE9PT1yP2w9czoyPT09ciYmKGw9YyksbCl7dmFyIGQ9InRvZ2dsZWdyb3VwIj09PXUsZj1vLmhpZGRlbmxhYmVscz9vLmhpZGRlbmxhYmVscy5zbGljZSgpOltdLHA9ZS5kYXRhKClbMF1bMF07aWYoIXAuZ3JvdXBUaXRsZXx8IXAubm9DbGljayl7dmFyIGgsZyxtLHYseSx4PXQuX2Z1bGxEYXRhLGI9cC50cmFjZSxfPWIubGVnZW5kZ3JvdXAsdz17fSxUPVtdLE09W10saz1bXTtpZihhLnRyYWNlSXMoYiwicGllLWxpa2UiKSl7dmFyIEE9cC5sYWJlbCxMPWYuaW5kZXhPZihBKTsidG9nZ2xlIj09PWw/LTE9PT1MP2YucHVzaChBKTpmLnNwbGljZShMLDEpOiJ0b2dnbGVvdGhlcnMiPT09bCYmKGY9W10sdC5jYWxjZGF0YVswXS5mb3JFYWNoKChmdW5jdGlvbihlKXtBIT09ZS5sYWJlbCYmZi5wdXNoKGUubGFiZWwpfSkpLHQuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzJiZ0Ll9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscy5sZW5ndGg9PT1mLmxlbmd0aCYmLTE9PT1MJiYoZj1bXSkpLGEuY2FsbCgiX2d1aVJlbGF5b3V0Iix0LCJoaWRkZW5sYWJlbHMiLGYpfWVsc2V7dmFyIFMsRD1fJiZfLmxlbmd0aCxDPVtdO2lmKEQpZm9yKGg9MDtoPHgubGVuZ3RoO2grKykoUz14W2hdKS52aXNpYmxlJiZTLmxlZ2VuZGdyb3VwPT09XyYmQy5wdXNoKGgpO2lmKCJ0b2dnbGUiPT09bCl7dmFyIE87c3dpdGNoKGIudmlzaWJsZSl7Y2FzZSEwOk89ImxlZ2VuZG9ubHkiO2JyZWFrO2Nhc2UhMTpPPSExO2JyZWFrO2Nhc2UibGVnZW5kb25seSI6Tz0hMH1pZihEKWlmKGQpZm9yKGg9MDtoPHgubGVuZ3RoO2grKykhMSE9PXhbaF0udmlzaWJsZSYmeFtoXS5sZWdlbmRncm91cD09PV8mJkgoeFtoXSxPKTtlbHNlIEgoYixPKTtlbHNlIEgoYixPKX1lbHNlIGlmKCJ0b2dnbGVvdGhlcnMiPT09bCl7dmFyIFAsSSxSLHosTj0hMDtmb3IoaD0wO2g8eC5sZW5ndGg7aCsrKWlmKFA9eFtoXT09PWIsUj0hMCE9PXhbaF0uc2hvd2xlZ2VuZCwhKFB8fFJ8fChJPUQmJnhbaF0ubGVnZW5kZ3JvdXA9PT1fKXx8ITAhPT14W2hdLnZpc2libGV8fGEudHJhY2VJcyh4W2hdLCJub3RMZWdlbmRJc29sYXRhYmxlIikpKXtOPSExO2JyZWFrfWZvcihoPTA7aDx4Lmxlbmd0aDtoKyspaWYoITEhPT14W2hdLnZpc2libGUmJiFhLnRyYWNlSXMoeFtoXSwibm90TGVnZW5kSXNvbGF0YWJsZSIpKXN3aXRjaChiLnZpc2libGUpe2Nhc2UibGVnZW5kb25seSI6SCh4W2hdLCEwKTticmVhaztjYXNlITA6ej0hIU58fCJsZWdlbmRvbmx5IixQPXhbaF09PT1iLFI9ITAhPT14W2hdLnNob3dsZWdlbmQmJiF4W2hdLmxlZ2VuZGdyb3VwLEk9UHx8RCYmeFtoXS5sZWdlbmRncm91cD09PV8sSCh4W2hdLCEoIUkmJiFSKXx8eil9fWZvcihoPTA7aDxNLmxlbmd0aDtoKyspaWYobT1NW2hdKXt2YXIgRj1tLmNvbnN0cnVjdFVwZGF0ZSgpLEU9T2JqZWN0LmtleXMoRik7Zm9yKGc9MDtnPEUubGVuZ3RoO2crKyl2PUVbZ10sKHdbdl09d1t2XXx8W10pW2tbaF1dPUZbdl19Zm9yKHk9T2JqZWN0LmtleXModyksaD0wO2g8eS5sZW5ndGg7aCsrKWZvcih2PXlbaF0sZz0wO2c8VC5sZW5ndGg7ZysrKXdbdl0uaGFzT3duUHJvcGVydHkoZyl8fCh3W3ZdW2ddPXZvaWQgMCk7YS5jYWxsKCJfZ3VpUmVzdHlsZSIsdCx3LFQpfX19fWZ1bmN0aW9uIGooZSx0LHIpe3ZhciBuPVQuaW5kZXhPZihlKSxhPXdbdF07cmV0dXJuIGF8fChhPXdbdF09W10pLC0xPT09VC5pbmRleE9mKGUpJiYoVC5wdXNoKGUpLG49VC5sZW5ndGgtMSksYVtuXT1yLG59ZnVuY3Rpb24gSChlLHQpe2lmKCFwLmdyb3VwVGl0bGV8fGQpe3ZhciByPWUuX2Z1bGxJbnB1dDtpZihhLmhhc1RyYW5zZm9ybShyLCJncm91cGJ5Iikpe3ZhciBpPU1bci5pbmRleF07aWYoIWkpe3ZhciBvPWEuZ2V0VHJhbnNmb3JtSW5kaWNlcyhyLCJncm91cGJ5IiksbD1vW28ubGVuZ3RoLTFdO2k9bi5rZXllZENvbnRhaW5lcihyLCJ0cmFuc2Zvcm1zWyIrbCsiXS5zdHlsZXMiLCJ0YXJnZXQiLCJ2YWx1ZS52aXNpYmxlIiksTVtyLmluZGV4XT1pfXZhciBzPWkuZ2V0KGUuX2dyb3VwKTt2b2lkIDA9PT1zJiYocz0hMCksITEhPT1zJiZpLnNldChlLl9ncm91cCx0KSxrW3IuaW5kZXhdPWooci5pbmRleCwidmlzaWJsZSIsITEhPT1yLnZpc2libGUpfWVsc2V7dmFyIGM9ITEhPT1yLnZpc2libGUmJnQ7aihyLmluZGV4LCJ2aXNpYmxlIixjKX19fX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3JlZ2lzdHJ5IjozMTh9XSwxNTg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ci5pc0dyb3VwZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT0oZS50cmFjZW9yZGVyfHwiIikuaW5kZXhPZigiZ3JvdXBlZCIpfSxyLmlzVmVydGljYWw9ZnVuY3Rpb24oZSl7cmV0dXJuImgiIT09ZS5vcmllbnRhdGlvbn0sci5pc1JldmVyc2VkPWZ1bmN0aW9uKGUpe3JldHVybi0xIT09KGUudHJhY2VvcmRlcnx8IiIpLmluZGV4T2YoInJldmVyc2VkIil9fSx7fV0sMTU5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJsZWdlbmQiLGxheW91dEF0dHJpYnV0ZXM6ZSgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6ZSgiLi9kZWZhdWx0cyIpLGRyYXc6ZSgiLi9kcmF3Iiksc3R5bGU6ZSgiLi9zdHlsZSIpfX0seyIuL2F0dHJpYnV0ZXMiOjE1MiwiLi9kZWZhdWx0cyI6MTU0LCIuL2RyYXciOjE1NSwiLi9zdHlsZSI6MTYwfV0sMTYwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4uLy4uL3JlZ2lzdHJ5IiksaT1lKCIuLi8uLi9saWIiKSxvPWkuc3RyVHJhbnNsYXRlLGw9ZSgiLi4vZHJhd2luZyIpLHM9ZSgiLi4vY29sb3IiKSxjPWUoIi4uL2NvbG9yc2NhbGUvaGVscGVycyIpLmV4dHJhY3RPcHRzLHU9ZSgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSxkPWUoIi4uLy4uL3RyYWNlcy9waWUvc3R5bGVfb25lIiksZj1lKCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnMiKS5jYXN0T3B0aW9uLHA9ZSgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBoKGUsdCl7cmV0dXJuKHQ/InJhZGlhbCI6Imhvcml6b250YWwiKSsoZT8iIjoicmV2ZXJzZWQiKX1mdW5jdGlvbiBnKGUpe3ZhciB0PWVbMF0udHJhY2Uscj10LmNvbnRvdXJzLG49dS5oYXNMaW5lcyh0KSxhPXUuaGFzTWFya2Vycyh0KSxpPXQudmlzaWJsZSYmdC5maWxsJiYibm9uZSIhPT10LmZpbGwsbz0hMSxsPSExO2lmKHIpe3ZhciBzPXIuY29sb3Jpbmc7ImxpbmVzIj09PXM/bz0hMDpuPSJub25lIj09PXN8fCJoZWF0bWFwIj09PXN8fHIuc2hvd2xpbmVzLCJjb25zdHJhaW50Ij09PXIudHlwZT9pPSI9IiE9PXIuX29wZXJhdGlvbjoiZmlsbCIhPT1zJiYiaGVhdG1hcCIhPT1zfHwobD0hMCl9cmV0dXJue3Nob3dNYXJrZXI6YSxzaG93TGluZTpuLHNob3dGaWxsOmksc2hvd0dyYWRpZW50TGluZTpvLHNob3dHcmFkaWVudEZpbGw6bCxhbnlMaW5lOm58fG8sYW55RmlsbDppfHxsfX1mdW5jdGlvbiBtKGUsdCxyKXtyZXR1cm4gZSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KGUpP3Q6ZT5yP3I6ZX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciB2PXQuX2Z1bGxMYXlvdXQ7cnx8KHI9di5sZWdlbmQpO3ZhciB5PSJjb25zdGFudCI9PT1yLml0ZW1zaXppbmcseD1yLml0ZW13aWR0aCxiPSh4KzIqcC5pdGVtR2FwKS8yLF89byhiLDApLHc9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE7aWYoZSsxKWE9ZTtlbHNle2lmKCEodCYmdC53aWR0aD4wKSlyZXR1cm4gMDthPXQud2lkdGh9cmV0dXJuIHk/bjpNYXRoLm1pbihhLHIpfTtmdW5jdGlvbiBUKGUsaSxvKXt2YXIgdT1lWzBdLnRyYWNlLGQ9dS5tYXJrZXJ8fHt9LGY9ZC5saW5lfHx7fSxwPW8/dS52aXNpYmxlJiZ1LnR5cGU9PT1vOmEudHJhY2VJcyh1LCJiYXIiKSxoPW4uc2VsZWN0KGkpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kIitvKS5kYXRhKHA/W2VdOltdKTtoLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kIitvLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsXyksaC5leGl0KCkucmVtb3ZlKCksaC5lYWNoKChmdW5jdGlvbihlKXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxpPWVbMF0sbz13KGkubWx3LGQubGluZSw1LDIpO2Euc3R5bGUoInN0cm9rZS13aWR0aCIsbysicHgiKTt2YXIgcD1pLm1jYztpZighci5faW5Ib3ZlciYmIm1jImluIGkpe3ZhciBoPWMoZCksZz1oLm1pZDt2b2lkIDA9PT1nJiYoZz0oaC5tYXgraC5taW4pLzIpLHA9bC50cnlDb2xvcnNjYWxlKGQsIiIpKGcpfXZhciB2PXB8fGkubWN8fGQuY29sb3IseT1kLnBhdHRlcm4seD15JiZsLmdldFBhdHRlcm5BdHRyKHkuc2hhcGUsMCwiIik7aWYoeCl7dmFyIGI9bC5nZXRQYXR0ZXJuQXR0cih5LmJnY29sb3IsMCxudWxsKSxfPWwuZ2V0UGF0dGVybkF0dHIoeS5mZ2NvbG9yLDAsbnVsbCksVD15LmZnb3BhY2l0eSxNPW0oeS5zaXplLDgsMTApLGs9bSh5LnNvbGlkaXR5LC41LDEpLEE9ImxlZ2VuZC0iK3UudWlkO2EuY2FsbChsLnBhdHRlcm4sImxlZ2VuZCIsdCxBLHgsTSxrLHAseS5maWxsbW9kZSxiLF8sVCl9ZWxzZSBhLmNhbGwocy5maWxsLHYpO28mJnMuc3Ryb2tlKGEsaS5tbGN8fGYuY29sb3IpfSkpfWZ1bmN0aW9uIE0oZSx0LHIpe3ZhciBvPWVbMF0sbD1vLnRyYWNlLHM9cj9sLnZpc2libGUmJmwudHlwZT09PXI6YS50cmFjZUlzKGwsciksYz1uLnNlbGVjdCh0KS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZCIrcikuZGF0YShzP1tlXTpbXSk7aWYoYy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZCIrciwhMCkuYXR0cigiZCIsIk02LDZILTZWLTZINloiKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLGMuZXhpdCgpLnJlbW92ZSgpLGMuc2l6ZSgpKXt2YXIgdT0obC5tYXJrZXJ8fHt9KS5saW5lLHA9dyhmKHUud2lkdGgsby5wdHMpLHUsNSwyKSxoPWkubWluRXh0ZW5kKGwse21hcmtlcjp7bGluZTp7d2lkdGg6cH19fSk7aC5tYXJrZXIubGluZS5jb2xvcj11LmNvbG9yO3ZhciBnPWkubWluRXh0ZW5kKG8se3RyYWNlOmh9KTtkKGMsZyxoKX19ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxhPWkuZW5zdXJlU2luZ2xlKHQsImciLCJsYXllcnMiKTthLnN0eWxlKCJvcGFjaXR5IixlWzBdLnRyYWNlLm9wYWNpdHkpO3ZhciBsPXIudmFsaWduLHM9ZVswXS5saW5lSGVpZ2h0LGM9ZVswXS5oZWlnaHQ7aWYoIm1pZGRsZSIhPT1sJiZzJiZjKXt2YXIgdT17dG9wOjEsYm90dG9tOi0xfVtsXSooLjUqKHMtYyszKSk7YS5hdHRyKCJ0cmFuc2Zvcm0iLG8oMCx1KSl9ZWxzZSBhLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7YS5zZWxlY3RBbGwoImcubGVnZW5kZmlsbCIpLmRhdGEoW2VdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZGZpbGwiLCEwKSxhLnNlbGVjdEFsbCgiZy5sZWdlbmRsaW5lcyIpLmRhdGEoW2VdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZGxpbmVzIiwhMCk7dmFyIGQ9YS5zZWxlY3RBbGwoImcubGVnZW5kc3ltYm9scyIpLmRhdGEoW2VdKTtkLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kc3ltYm9scyIsITApLGQuc2VsZWN0QWxsKCJnLmxlZ2VuZHBvaW50cyIpLmRhdGEoW2VdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZHBvaW50cyIsITApfSkpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByLGE9ZVswXS50cmFjZSxvPVtdO2lmKGEudmlzaWJsZSlzd2l0Y2goYS50eXBlKXtjYXNlImhpc3RvZ3JhbTJkIjpjYXNlImhlYXRtYXAiOm89W1siTS0xNSwtMlY0SDE1Vi0yWiJdXSxyPSEwO2JyZWFrO2Nhc2UiY2hvcm9wbGV0aCI6Y2FzZSJjaG9yb3BsZXRobWFwYm94IjpvPVtbIk0tNiwtNlY2SDZWLTZaIl1dLHI9ITA7YnJlYWs7Y2FzZSJkZW5zaXR5bWFwYm94IjpvPVtbIk0tNiwwIGE2LDYgMCAxLDAgMTIsMCBhIDYsNiAwIDEsMCAtMTIsMCJdXSxyPSJyYWRpYWwiO2JyZWFrO2Nhc2UiY29uZSI6bz1bWyJNLTYsMiBBMiwyIDAgMCwwIC02LDYgVjZMNiw0WiJdLFsiTS02LC02IEEyLDIgMCAwLDAgLTYsLTIgTDYsLTRaIl0sWyJNLTYsLTIgQTIsMiAwIDAsMCAtNiwyIEw2LDBaIl1dLHI9ITE7YnJlYWs7Y2FzZSJzdHJlYW10dWJlIjpvPVtbIk0tNiwyIEEyLDIgMCAwLDAgLTYsNiBINiBBMiwyIDAgMCwxIDYsMiBaIl0sWyJNLTYsLTYgQTIsMiAwIDAsMCAtNiwtMiBINiBBMiwyIDAgMCwxIDYsLTYgWiJdLFsiTS02LC0yIEEyLDIgMCAwLDAgLTYsMiBINiBBMiwyIDAgMCwxIDYsLTIgWiJdXSxyPSExO2JyZWFrO2Nhc2Uic3VyZmFjZSI6bz1bWyJNLTYsLTYgQTIsMyAwIDAsMCAtNiwwIEg2IEEyLDMgMCAwLDEgNiwtNiBaIl0sWyJNLTYsMSBBMiwzIDAgMCwxIC02LDYgSDYgQTIsMyAwIDAsMCA2LDAgWiJdXSxyPSEwO2JyZWFrO2Nhc2UibWVzaDNkIjpvPVtbIk0tNiw2SDBMLTYsLTZaIl0sWyJNNiw2SDBMNiwtNloiXSxbIk0tNiwtNkg2TDAsNloiXV0scj0hMTticmVhaztjYXNlInZvbHVtZSI6bz1bWyJNLTYsNkgwTC02LC02WiJdLFsiTTYsNkgwTDYsLTZaIl0sWyJNLTYsLTZINkwwLDZaIl1dLHI9ITA7YnJlYWs7Y2FzZSJpc29zdXJmYWNlIjpvPVtbIk0tNiw2SDBMLTYsLTZaIl0sWyJNNiw2SDBMNiwtNloiXSxbIk0tNiwtNiBBMTIsMjQgMCAwLDAgNiwtNiBMMCw2WiJdXSxyPSExfXZhciB1PW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kM2RhbmRmcmllbmRzIikuZGF0YShvKTt1LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kM2RhbmRmcmllbmRzIiwhMCkuYXR0cigidHJhbnNmb3JtIixfKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaCgoZnVuY3Rpb24oZSxvKXt2YXIgdSxkPW4uc2VsZWN0KHRoaXMpLGY9YyhhKSxwPWYuY29sb3JzY2FsZSxnPWYucmV2ZXJzZXNjYWxlO2lmKHApe2lmKCFyKXt2YXIgbT1wLmxlbmd0aDt1PTA9PT1vP3BbZz9tLTE6MF1bMV06MT09PW8/cFtnPzA6bS0xXVsxXTpwW01hdGguZmxvb3IoKG0tMSkvMildWzFdfX1lbHNle3ZhciB2PWEudmVydGV4Y29sb3J8fGEuZmFjZWNvbG9yfHxhLmNvbG9yO3U9aS5pc0FycmF5T3JUeXBlZEFycmF5KHYpP3Zbb118fHZbMF06dn1kLmF0dHIoImQiLGVbMF0pLHU/ZC5jYWxsKHMuZmlsbCx1KTpkLmNhbGwoKGZ1bmN0aW9uKGUpe2lmKGUuc2l6ZSgpKXt2YXIgbj0ibGVnZW5kZmlsbC0iK2EudWlkO2wuZ3JhZGllbnQoZSx0LG4saChnLCJyYWRpYWwiPT09cikscCwiZmlsbCIpfX0pKX0pKX0pKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnRyYWNlLHI9IndhdGVyZmFsbCI9PT10LnR5cGU7aWYoZVswXS5fZGlzdGluY3QmJnIpe3ZhciBhPWVbMF0udHJhY2VbZVswXS5kaXJdLm1hcmtlcjtyZXR1cm4gZVswXS5tYz1hLmNvbG9yLGVbMF0ubWx3PWEubGluZS53aWR0aCxlWzBdLm1sYz1hLmxpbmUuY29sb3IsVChlLHRoaXMsIndhdGVyZmFsbCIpfXZhciBpPVtdO3QudmlzaWJsZSYmciYmKGk9ZVswXS5oYXNUb3RhbHM/W1siaW5jcmVhc2luZyIsIk0tNiwtNlY2SDBaIl0sWyJ0b3RhbHMiLCJNNiw2SDBMLTYsLTZILTBaIl0sWyJkZWNyZWFzaW5nIiwiTTYsNlYtNkgwWiJdXTpbWyJpbmNyZWFzaW5nIiwiTS02LC02VjZINloiXSxbImRlY3JlYXNpbmciLCJNNiw2Vi02SC02WiJdXSk7dmFyIG89bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmR3YXRlcmZhbGwiKS5kYXRhKGkpO28uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmR3YXRlcmZhbGwiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPXRbZVswXV0ubWFya2VyLGk9dyh2b2lkIDAsYS5saW5lLDUsMik7ci5hdHRyKCJkIixlWzFdKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixpKyJweCIpLmNhbGwocy5maWxsLGEuY29sb3IpLGkmJnIuY2FsbChzLnN0cm9rZSxhLmxpbmUuY29sb3IpfSkpfSkpLmVhY2goKGZ1bmN0aW9uKGUpe1QoZSx0aGlzLCJmdW5uZWwiKX0pKS5lYWNoKChmdW5jdGlvbihlKXtUKGUsdGhpcyl9KSkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXS50cmFjZSxvPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kYm94IikuZGF0YShyLnZpc2libGUmJmEudHJhY2VJcyhyLCJib3gtdmlvbGluIik/W2VdOltdKTtvLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kYm94IiwhMCkuYXR0cigiZCIsIk02LDZILTZWLTZINloiKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLG8uZXhpdCgpLnJlbW92ZSgpLG8uZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKTtpZigiYWxsIiE9PXIuYm94cG9pbnRzJiYiYWxsIiE9PXIucG9pbnRzfHwwIT09cy5vcGFjaXR5KHIuZmlsbGNvbG9yKXx8MCE9PXMub3BhY2l0eSgoci5saW5lfHx7fSkuY29sb3IpKXt2YXIgYT13KHZvaWQgMCxyLmxpbmUsNSwyKTtlLnN0eWxlKCJzdHJva2Utd2lkdGgiLGErInB4IikuY2FsbChzLmZpbGwsci5maWxsY29sb3IpLGEmJnMuc3Ryb2tlKGUsci5saW5lLmNvbG9yKX1lbHNle3ZhciBjPWkubWluRXh0ZW5kKHIse21hcmtlcjp7c2l6ZTp5PzEyOmkuY29uc3RyYWluKHIubWFya2VyLnNpemUsMiwxNiksc2l6ZXJlZjoxLHNpemVtaW46MSxzaXplbW9kZToiZGlhbWV0ZXIifX0pO28uY2FsbChsLnBvaW50U3R5bGUsYyx0KX19KSl9KSkuZWFjaCgoZnVuY3Rpb24oZSl7TShlLHRoaXMsImZ1bm5lbGFyZWEiKX0pKS5lYWNoKChmdW5jdGlvbihlKXtNKGUsdGhpcywicGllIil9KSkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHIsYSxvPWcoZSkscz1vLnNob3dGaWxsLGQ9by5zaG93TGluZSxmPW8uc2hvd0dyYWRpZW50TGluZSxwPW8uc2hvd0dyYWRpZW50RmlsbCxtPW8uYW55RmlsbCx2PW8uYW55TGluZSx5PWVbMF0sYj15LnRyYWNlLF89YyhiKSxUPV8uY29sb3JzY2FsZSxNPV8ucmV2ZXJzZXNjYWxlLGs9dS5oYXNNYXJrZXJzKGIpfHwhbT8iTTUsMCI6dj8iTTUsLTIiOiJNNSwtMyIsQT1uLnNlbGVjdCh0aGlzKSxMPUEuc2VsZWN0KCIubGVnZW5kZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoc3x8cD9bZV06W10pO2lmKEwuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1maWxsIiwhMCksTC5leGl0KCkucmVtb3ZlKCksTC5hdHRyKCJkIixrKyJoIit4KyJ2NmgtIit4KyJ6IikuY2FsbChzP2wuZmlsbEdyb3VwU3R5bGU6ZnVuY3Rpb24oZSl7aWYoZS5zaXplKCkpe3ZhciByPSJsZWdlbmRmaWxsLSIrYi51aWQ7bC5ncmFkaWVudChlLHQscixoKE0pLFQsImZpbGwiKX19KSxkfHxmKXt2YXIgUz13KHZvaWQgMCxiLmxpbmUsMTAsNSk7YT1pLm1pbkV4dGVuZChiLHtsaW5lOnt3aWR0aDpTfX0pLHI9W2kubWluRXh0ZW5kKHkse3RyYWNlOmF9KV19dmFyIEQ9QS5zZWxlY3QoIi5sZWdlbmRsaW5lcyIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoZHx8Zj9bcl06W10pO0QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCksRC5leGl0KCkucmVtb3ZlKCksRC5hdHRyKCJkIixrKyhmPyJsIit4KyIsMC4wMDAxIjoiaCIreCkpLmNhbGwoZD9sLmxpbmVHcm91cFN0eWxlOmZ1bmN0aW9uKGUpe2lmKGUuc2l6ZSgpKXt2YXIgcj0ibGVnZW5kbGluZS0iK2IudWlkO2wubGluZUdyb3VwU3R5bGUoZSksbC5ncmFkaWVudChlLHQscixoKE0pLFQsInN0cm9rZSIpfX0pfSkpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByLGEsbz1nKGUpLHM9by5hbnlGaWxsLGM9by5hbnlMaW5lLGQ9by5zaG93TGluZSxmPW8uc2hvd01hcmtlcixwPWVbMF0saD1wLnRyYWNlLG09IWYmJiFjJiYhcyYmdS5oYXNUZXh0KGgpO2Z1bmN0aW9uIHYoZSx0LHIsbil7dmFyIGE9aS5uZXN0ZWRQcm9wZXJ0eShoLGUpLmdldCgpLG89aS5pc0FycmF5T3JUeXBlZEFycmF5KGEpJiZ0P3QoYSk6YTtpZih5JiZvJiZ2b2lkIDAhPT1uJiYobz1uKSxyKXtpZihvPHJbMF0pcmV0dXJuIHJbMF07aWYobz5yWzFdKXJldHVybiByWzFdfXJldHVybiBvfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIHAuX2Rpc3RpbmN0JiZwLmluZGV4JiZlW3AuaW5kZXhdP2VbcC5pbmRleF06ZVswXX1pZihmfHxtfHxkKXt2YXIgYj17fSx3PXt9O2lmKGYpe2IubWM9digibWFya2VyLmNvbG9yIix4KSxiLm14PXYoIm1hcmtlci5zeW1ib2wiLHgpLGIubW89digibWFya2VyLm9wYWNpdHkiLGkubWVhbixbLjIsMV0pLGIubWxjPXYoIm1hcmtlci5saW5lLmNvbG9yIix4KSxiLm1sdz12KCJtYXJrZXIubGluZS53aWR0aCIsaS5tZWFuLFswLDVdLDIpLHcubWFya2VyPXtzaXplcmVmOjEsc2l6ZW1pbjoxLHNpemVtb2RlOiJkaWFtZXRlciJ9O3ZhciBUPXYoIm1hcmtlci5zaXplIixpLm1lYW4sWzIsMTZdLDEyKTtiLm1zPVQsdy5tYXJrZXIuc2l6ZT1UfWQmJih3LmxpbmU9e3dpZHRoOnYoImxpbmUud2lkdGgiLHgsWzAsMTBdLDUpfSksbSYmKGIudHg9IkFhIixiLnRwPXYoInRleHRwb3NpdGlvbiIseCksYi50cz0xMCxiLnRjPXYoInRleHRmb250LmNvbG9yIix4KSxiLnRmPXYoInRleHRmb250LmZhbWlseSIseCkpLHI9W2kubWluRXh0ZW5kKHAsYildLChhPWkubWluRXh0ZW5kKGgsdykpLnNlbGVjdGVkcG9pbnRzPW51bGwsYS50ZXh0dGVtcGxhdGU9bnVsbH12YXIgTT1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIiksaz1NLnNlbGVjdEFsbCgicGF0aC5zY2F0dGVycHRzIikuZGF0YShmP3I6W10pO2suZW50ZXIoKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKCJzY2F0dGVycHRzIiwhMCkuYXR0cigidHJhbnNmb3JtIixfKSxrLmV4aXQoKS5yZW1vdmUoKSxrLmNhbGwobC5wb2ludFN0eWxlLGEsdCksZiYmKHJbMF0ubXJjPTMpO3ZhciBBPU0uc2VsZWN0QWxsKCJnLnBvaW50dGV4dCIpLmRhdGEobT9yOltdKTtBLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicG9pbnR0ZXh0IiwhMCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixfKSxBLmV4aXQoKS5yZW1vdmUoKSxBLnNlbGVjdEFsbCgidGV4dCIpLmNhbGwobC50ZXh0UG9pbnRTdHlsZSxhLHQpfSkpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZGNhbmRsZSIpLmRhdGEodC52aXNpYmxlJiYiY2FuZGxlc3RpY2siPT09dC50eXBlP1tlLGVdOltdKTtyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kY2FuZGxlIiwhMCkuYXR0cigiZCIsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/Ik0tMTUsMEgtOE0tOCw2Vi02SDhaIjoiTTE1LDBIOE04LC02VjZILThaIn0pKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSksci5leGl0KCkucmVtb3ZlKCksci5lYWNoKChmdW5jdGlvbihlLHIpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLGk9dFtyPyJpbmNyZWFzaW5nIjoiZGVjcmVhc2luZyJdLG89dyh2b2lkIDAsaS5saW5lLDUsMik7YS5zdHlsZSgic3Ryb2tlLXdpZHRoIixvKyJweCIpLmNhbGwocy5maWxsLGkuZmlsbGNvbG9yKSxvJiZzLnN0cm9rZShhLGkubGluZS5jb2xvcil9KSl9KSkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kb2hsYyIpLmRhdGEodC52aXNpYmxlJiYib2hsYyI9PT10LnR5cGU/W2UsZV06W10pO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRvaGxjIiwhMCkuYXR0cigiZCIsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/Ik0tMTUsMEgwTS04LC02VjAiOiJNMTUsMEgwTTgsNlYwIn0pKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSksci5leGl0KCkucmVtb3ZlKCksci5lYWNoKChmdW5jdGlvbihlLHIpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLGk9dFtyPyJpbmNyZWFzaW5nIjoiZGVjcmVhc2luZyJdLG89dyh2b2lkIDAsaS5saW5lLDUsMik7YS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jYWxsKGwuZGFzaExpbmUsaS5saW5lLmRhc2gsbyksbyYmcy5zdHJva2UoYSxpLmxpbmUuY29sb3IpfSkpfSkpfX0seyIuLi8uLi9saWIiOjIzMiwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi4vLi4vdHJhY2VzL3BpZS9oZWxwZXJzIjozNTAsIi4uLy4uL3RyYWNlcy9waWUvc3R5bGVfb25lIjozNTYsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjozODMsIi4uL2NvbG9yIjoxMDIsIi4uL2NvbG9yc2NhbGUvaGVscGVycyI6MTEzLCIuLi9kcmF3aW5nIjoxMjQsIi4vY29uc3RhbnRzIjoxNTMsIkBwbG90bHkvZDMiOjExfV0sMTYxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UoIi4vY29uc3RhbnRzIik7dC5leHBvcnRzPXtlZGl0VHlwZToibW9kZWJhciIsb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZGZsdDoiaCIsZWRpdFR5cGU6Im1vZGViYXIifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im1vZGViYXIifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJtb2RlYmFyIn0sYWN0aXZlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibW9kZWJhciJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxhZGQ6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0OiIiLGVkaXRUeXBlOiJtb2RlYmFyIn0scmVtb3ZlOnt2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDoiIixlZGl0VHlwZToibW9kZWJhciJ9fX0seyIuL2NvbnN0YW50cyI6MTYzfV0sMTYyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3JlZ2lzdHJ5IiksYT1lKCIuLi8uLi9wbG90cy9wbG90cyIpLGk9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz1lKCIuLi8uLi9mb250cy9wbG90aWNvbiIpLGw9ZSgiLi4vc2hhcGVzL2RyYXciKS5lcmFzZUFjdGl2ZVNoYXBlLHM9ZSgiLi4vLi4vbGliIiksYz1zLl8sdT10LmV4cG9ydHM9e307ZnVuY3Rpb24gZChlLHQpe3ZhciByLGEsbz10LmN1cnJlbnRUYXJnZXQsbD1vLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIikscz1vLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsYz1lLl9mdWxsTGF5b3V0LHU9e30sZD1pLmxpc3QoZSxudWxsLCEwKSxmPWMuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ7aWYoInpvb20iPT09bCl7dmFyIHAsaD0iaW4iPT09cz8uNToyLGc9KDEraCkvMixtPSgxLWgpLzI7Zm9yKGE9MDthPGQubGVuZ3RoO2ErKylpZighKHI9ZFthXSkuZml4ZWRyYW5nZSlpZihwPXIuX25hbWUsImF1dG8iPT09cyl1W3ArIi5hdXRvcmFuZ2UiXT0hMDtlbHNlIGlmKCJyZXNldCI9PT1zKXtpZih2b2lkIDA9PT1yLl9yYW5nZUluaXRpYWwpdVtwKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgdj1yLl9yYW5nZUluaXRpYWwuc2xpY2UoKTt1W3ArIi5yYW5nZVswXSJdPXZbMF0sdVtwKyIucmFuZ2VbMV0iXT12WzFdfXZvaWQgMCE9PXIuX3Nob3dTcGlrZUluaXRpYWwmJih1W3ArIi5zaG93c3Bpa2VzIl09ci5fc2hvd1NwaWtlSW5pdGlhbCwib24iIT09Znx8ci5fc2hvd1NwaWtlSW5pdGlhbHx8KGY9Im9mZiIpKX1lbHNle3ZhciB5PVtyLnIybChyLnJhbmdlWzBdKSxyLnIybChyLnJhbmdlWzFdKV0seD1bZyp5WzBdK20qeVsxXSxnKnlbMV0rbSp5WzBdXTt1W3ArIi5yYW5nZVswXSJdPXIubDJyKHhbMF0pLHVbcCsiLnJhbmdlWzFdIl09ci5sMnIoeFsxXSl9fWVsc2UiaG92ZXJtb2RlIiE9PWx8fCJ4IiE9PXMmJiJ5IiE9PXN8fChzPWMuX2lzSG9yaXo/InkiOiJ4IixvLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLHMpKSx1W2xdPXM7Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1mLG4uY2FsbCgiX2d1aVJlbGF5b3V0IixlLHUpfWZ1bmN0aW9uIGYoZSx0KXtmb3IodmFyIHI9dC5jdXJyZW50VGFyZ2V0LGE9ci5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9ci5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIil8fCEwLG89ZS5fZnVsbExheW91dC5fc3VicGxvdHMuZ2wzZHx8W10sbD17fSxzPWEuc3BsaXQoIi4iKSxjPTA7YzxvLmxlbmd0aDtjKyspbFtvW2NdKyIuIitzWzFdXT1pO3ZhciB1PSJwYW4iPT09aT9pOiJ6b29tIjtsLmRyYWdtb2RlPXUsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsbCl9ZnVuY3Rpb24gcChlLHQpe2Zvcih2YXIgcj10LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxhPSJyZXNldExhc3RTYXZlIj09PXIsaT0icmVzZXREZWZhdWx0Ij09PXIsbz1lLl9mdWxsTGF5b3V0LGw9by5fc3VicGxvdHMuZ2wzZHx8W10scz17fSxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1LGQ9bFtjXSxmPWQrIi5jYW1lcmEiLHA9ZCsiLmFzcGVjdHJhdGlvIixoPWQrIi5hc3BlY3Rtb2RlIixnPW9bZF0uX3NjZW5lO2E/KHNbZisiLnVwIl09Zy52aWV3SW5pdGlhbC51cCxzW2YrIi5leWUiXT1nLnZpZXdJbml0aWFsLmV5ZSxzW2YrIi5jZW50ZXIiXT1nLnZpZXdJbml0aWFsLmNlbnRlcix1PSEwKTppJiYoc1tmKyIudXAiXT1udWxsLHNbZisiLmV5ZSJdPW51bGwsc1tmKyIuY2VudGVyIl09bnVsbCx1PSEwKSx1JiYoc1twKyIueCJdPWcudmlld0luaXRpYWwuYXNwZWN0cmF0aW8ueCxzW3ArIi55Il09Zy52aWV3SW5pdGlhbC5hc3BlY3RyYXRpby55LHNbcCsiLnoiXT1nLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvLnosc1toXT1nLnZpZXdJbml0aWFsLmFzcGVjdG1vZGUpfW4uY2FsbCgiX2d1aVJlbGF5b3V0IixlLHMpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj10LmN1cnJlbnRUYXJnZXQsbj1yLl9wcmV2aW91c1ZhbCxhPWUuX2Z1bGxMYXlvdXQsaT1hLl9zdWJwbG90cy5nbDNkfHxbXSxvPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0sbD17fSxzPXt9O2lmKG4pcz1uLHIuX3ByZXZpb3VzVmFsPW51bGw7ZWxzZXtmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXSxkPWFbdV0sZj11KyIuaG92ZXJtb2RlIjtsW2ZdPWQuaG92ZXJtb2RlLHNbZl09ITE7Zm9yKHZhciBwPTA7cDwzO3ArKyl7dmFyIGg9b1twXSxnPXUrIi4iK2grIi5zaG93c3Bpa2VzIjtzW2ddPSExLGxbZ109ZFtoXS5zaG93c3Bpa2VzfX1yLl9wcmV2aW91c1ZhbD1sfXJldHVybiBzfWZ1bmN0aW9uIGcoZSx0KXtmb3IodmFyIHI9dC5jdXJyZW50VGFyZ2V0LGE9ci5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9ci5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIil8fCEwLG89ZS5fZnVsbExheW91dCxsPW8uX3N1YnBsb3RzLmdlb3x8W10scz0wO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdLHU9b1tjXTtpZigiem9vbSI9PT1hKXt2YXIgZD11LnByb2plY3Rpb24uc2NhbGUsZj0iaW4iPT09aT8yKmQ6LjUqZDtuLmNhbGwoIl9ndWlSZWxheW91dCIsZSxjKyIucHJvamVjdGlvbi5zY2FsZSIsZil9fSJyZXNldCI9PT1hJiZ4KGUsImdlbyIpfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9ZS5fZnVsbExheW91dDtyZXR1cm4hdC5ob3Zlcm1vZGUmJih0Ll9oYXMoImNhcnRlc2lhbiIpP3QuX2lzSG9yaXo/InkiOiJ4IjoiY2xvc2VzdCIpfWZ1bmN0aW9uIHYoZSl7dmFyIHQ9bShlKTtuLmNhbGwoIl9ndWlSZWxheW91dCIsZSwiaG92ZXJtb2RlIix0KX1mdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciByPXQuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIiksYT1lLl9mdWxsTGF5b3V0LGk9YS5fc3VicGxvdHMubWFwYm94fHxbXSxvPXt9LGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIHM9aVtsXSxjPWFbc10uem9vbSx1PSJpbiI9PT1yPzEuMDUqYzpjLzEuMDU7b1tzKyIuem9vbSJdPXV9bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsbyl9ZnVuY3Rpb24geChlLHQpe2Zvcih2YXIgcj1lLl9mdWxsTGF5b3V0LGE9ci5fc3VicGxvdHNbdF18fFtdLGk9e30sbz0wO288YS5sZW5ndGg7bysrKWZvcih2YXIgbD1hW29dLHM9cltsXS5fc3VicGxvdC52aWV3SW5pdGlhbCxjPU9iamVjdC5rZXlzKHMpLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGQ9Y1t1XTtpW2wrIi4iK2RdPXNbZF19bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsaSl9dS50b0ltYWdlPXtuYW1lOiJ0b0ltYWdlIix0aXRsZTpmdW5jdGlvbihlKXt2YXIgdD0oZS5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9uc3x8e30pLmZvcm1hdHx8InBuZyI7cmV0dXJuIGMoZSwicG5nIj09PXQ/IkRvd25sb2FkIHBsb3QgYXMgYSBwbmciOiJEb3dubG9hZCBwbG90Iil9LGljb246by5jYW1lcmEsY2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9ucyxyPXtmb3JtYXQ6dC5mb3JtYXR8fCJwbmcifTtzLm5vdGlmaWVyKGMoZSwiVGFraW5nIHNuYXBzaG90IC0gdGhpcyBtYXkgdGFrZSBhIGZldyBzZWNvbmRzIiksImxvbmciKSwic3ZnIiE9PXIuZm9ybWF0JiZzLmlzSUUoKSYmKHMubm90aWZpZXIoYyhlLCJJRSBvbmx5IHN1cHBvcnRzIHN2Zy4gIENoYW5naW5nIGZvcm1hdCB0byBzdmcuIiksImxvbmciKSxyLmZvcm1hdD0ic3ZnIiksWyJmaWxlbmFtZSIsIndpZHRoIiwiaGVpZ2h0Iiwic2NhbGUiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtlIGluIHQmJihyW2VdPXRbZV0pfSkpLG4uY2FsbCgiZG93bmxvYWRJbWFnZSIsZSxyKS50aGVuKChmdW5jdGlvbih0KXtzLm5vdGlmaWVyKGMoZSwiU25hcHNob3Qgc3VjY2VlZGVkIikrIiAtICIrdCwibG9uZyIpfSkpLmNhdGNoKChmdW5jdGlvbigpe3Mubm90aWZpZXIoYyhlLCJTb3JyeSwgdGhlcmUgd2FzIGEgcHJvYmxlbSBkb3dubG9hZGluZyB5b3VyIHNuYXBzaG90ISIpLCJsb25nIil9KSl9fSx1LnNlbmREYXRhVG9DbG91ZD17bmFtZToic2VuZERhdGFUb0Nsb3VkIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJFZGl0IGluIENoYXJ0IFN0dWRpbyIpfSxpY29uOm8uZGlzayxjbGljazpmdW5jdGlvbihlKXthLnNlbmREYXRhVG9DbG91ZChlKX19LHUuZWRpdEluQ2hhcnRTdHVkaW89e25hbWU6ImVkaXRJbkNoYXJ0U3R1ZGlvIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJFZGl0IGluIENoYXJ0IFN0dWRpbyIpfSxpY29uOm8ucGVuY2lsLGNsaWNrOmZ1bmN0aW9uKGUpe2Euc2VuZERhdGFUb0Nsb3VkKGUpfX0sdS56b29tMmQ9e25hbWU6Inpvb20yZCIsX2NhdDoiem9vbSIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiWm9vbSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJ6b29tIixpY29uOm8uem9vbWJveCxjbGljazpkfSx1LnBhbjJkPXtuYW1lOiJwYW4yZCIsX2NhdDoicGFuIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJQYW4iKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoicGFuIixpY29uOm8ucGFuLGNsaWNrOmR9LHUuc2VsZWN0MmQ9e25hbWU6InNlbGVjdDJkIixfY2F0OiJzZWxlY3QiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIkJveCBTZWxlY3QiKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoic2VsZWN0IixpY29uOm8uc2VsZWN0Ym94LGNsaWNrOmR9LHUubGFzc28yZD17bmFtZToibGFzc28yZCIsX2NhdDoibGFzc28iLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIkxhc3NvIFNlbGVjdCIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJsYXNzbyIsaWNvbjpvLmxhc3NvLGNsaWNrOmR9LHUuZHJhd2Nsb3NlZHBhdGg9e25hbWU6ImRyYXdjbG9zZWRwYXRoIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJEcmF3IGNsb3NlZCBmcmVlZm9ybSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3Y2xvc2VkcGF0aCIsaWNvbjpvLmRyYXdjbG9zZWRwYXRoLGNsaWNrOmR9LHUuZHJhd29wZW5wYXRoPXtuYW1lOiJkcmF3b3BlbnBhdGgiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIkRyYXcgb3BlbiBmcmVlZm9ybSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3b3BlbnBhdGgiLGljb246by5kcmF3b3BlbnBhdGgsY2xpY2s6ZH0sdS5kcmF3bGluZT17bmFtZToiZHJhd2xpbmUiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIkRyYXcgbGluZSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3bGluZSIsaWNvbjpvLmRyYXdsaW5lLGNsaWNrOmR9LHUuZHJhd3JlY3Q9e25hbWU6ImRyYXdyZWN0Iix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJEcmF3IHJlY3RhbmdsZSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3cmVjdCIsaWNvbjpvLmRyYXdyZWN0LGNsaWNrOmR9LHUuZHJhd2NpcmNsZT17bmFtZToiZHJhd2NpcmNsZSIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiRHJhdyBjaXJjbGUiKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoiZHJhd2NpcmNsZSIsaWNvbjpvLmRyYXdjaXJjbGUsY2xpY2s6ZH0sdS5lcmFzZXNoYXBlPXtuYW1lOiJlcmFzZXNoYXBlIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJFcmFzZSBhY3RpdmUgc2hhcGUiKX0saWNvbjpvLmVyYXNlc2hhcGUsY2xpY2s6bH0sdS56b29tSW4yZD17bmFtZToiem9vbUluMmQiLF9jYXQ6Inpvb21pbiIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiWm9vbSBpbiIpfSxhdHRyOiJ6b29tIix2YWw6ImluIixpY29uOm8uem9vbV9wbHVzLGNsaWNrOmR9LHUuem9vbU91dDJkPXtuYW1lOiJ6b29tT3V0MmQiLF9jYXQ6Inpvb21vdXQiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIlpvb20gb3V0Iil9LGF0dHI6Inpvb20iLHZhbDoib3V0IixpY29uOm8uem9vbV9taW51cyxjbGljazpkfSx1LmF1dG9TY2FsZTJkPXtuYW1lOiJhdXRvU2NhbGUyZCIsX2NhdDoiYXV0b3NjYWxlIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJBdXRvc2NhbGUiKX0sYXR0cjoiem9vbSIsdmFsOiJhdXRvIixpY29uOm8uYXV0b3NjYWxlLGNsaWNrOmR9LHUucmVzZXRTY2FsZTJkPXtuYW1lOiJyZXNldFNjYWxlMmQiLF9jYXQ6InJlc2V0c2NhbGUiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIlJlc2V0IGF4ZXMiKX0sYXR0cjoiem9vbSIsdmFsOiJyZXNldCIsaWNvbjpvLmhvbWUsY2xpY2s6ZH0sdS5ob3ZlckNsb3Nlc3RDYXJ0ZXNpYW49e25hbWU6ImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsX2NhdDoiaG92ZXJjbG9zZXN0Iix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJTaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDoiY2xvc2VzdCIsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmR9LHUuaG92ZXJDb21wYXJlQ2FydGVzaWFuPXtuYW1lOiJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iLF9jYXQ6ImhvdmVyQ29tcGFyZSIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiQ29tcGFyZSBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9mdWxsTGF5b3V0Ll9pc0hvcml6PyJ5IjoieCJ9LGljb246by50b29sdGlwX2NvbXBhcmUsZ3Jhdml0eToibmUiLGNsaWNrOmR9LHUuem9vbTNkPXtuYW1lOiJ6b29tM2QiLF9jYXQ6Inpvb20iLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIlpvb20iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoiem9vbSIsaWNvbjpvLnpvb21ib3gsY2xpY2s6Zn0sdS5wYW4zZD17bmFtZToicGFuM2QiLF9jYXQ6InBhbiIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiUGFuIil9LGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6InBhbiIsaWNvbjpvLnBhbixjbGljazpmfSx1Lm9yYml0Um90YXRpb249e25hbWU6Im9yYml0Um90YXRpb24iLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIk9yYml0YWwgcm90YXRpb24iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoib3JiaXQiLGljb246b1siM2Rfcm90YXRlIl0sY2xpY2s6Zn0sdS50YWJsZVJvdGF0aW9uPXtuYW1lOiJ0YWJsZVJvdGF0aW9uIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJUdXJudGFibGUgcm90YXRpb24iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoidHVybnRhYmxlIixpY29uOm9bInotYXhpcyJdLGNsaWNrOmZ9LHUucmVzZXRDYW1lcmFEZWZhdWx0M2Q9e25hbWU6InJlc2V0Q2FtZXJhRGVmYXVsdDNkIixfY2F0OiJyZXNldENhbWVyYURlZmF1bHQiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIlJlc2V0IGNhbWVyYSB0byBkZWZhdWx0Iil9LGF0dHI6InJlc2V0RGVmYXVsdCIsaWNvbjpvLmhvbWUsY2xpY2s6cH0sdS5yZXNldENhbWVyYUxhc3RTYXZlM2Q9e25hbWU6InJlc2V0Q2FtZXJhTGFzdFNhdmUzZCIsX2NhdDoicmVzZXRDYW1lcmFMYXN0U2F2ZSIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiUmVzZXQgY2FtZXJhIHRvIGxhc3Qgc2F2ZSIpfSxhdHRyOiJyZXNldExhc3RTYXZlIixpY29uOm8ubW92aWUsY2xpY2s6cH0sdS5ob3ZlckNsb3Nlc3QzZD17bmFtZToiaG92ZXJDbG9zZXN0M2QiLF9jYXQ6ImhvdmVyY2xvc2VzdCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpmdW5jdGlvbihlLHQpe3ZhciByPWgoZSx0KTtuLmNhbGwoIl9ndWlSZWxheW91dCIsZSxyKX19LHUuem9vbUluR2VvPXtuYW1lOiJ6b29tSW5HZW8iLF9jYXQ6Inpvb21pbiIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiWm9vbSBpbiIpfSxhdHRyOiJ6b29tIix2YWw6ImluIixpY29uOm8uem9vbV9wbHVzLGNsaWNrOmd9LHUuem9vbU91dEdlbz17bmFtZToiem9vbU91dEdlbyIsX2NhdDoiem9vbW91dCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246by56b29tX21pbnVzLGNsaWNrOmd9LHUucmVzZXRHZW89e25hbWU6InJlc2V0R2VvIixfY2F0OiJyZXNldCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiUmVzZXQiKX0sYXR0cjoicmVzZXQiLHZhbDpudWxsLGljb246by5hdXRvc2NhbGUsY2xpY2s6Z30sdS5ob3ZlckNsb3Nlc3RHZW89e25hbWU6ImhvdmVyQ2xvc2VzdEdlbyIsX2NhdDoiaG92ZXJjbG9zZXN0Iix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOnZ9LHUuaG92ZXJDbG9zZXN0R2wyZD17bmFtZToiaG92ZXJDbG9zZXN0R2wyZCIsX2NhdDoiaG92ZXJjbG9zZXN0Iix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOnZ9LHUuaG92ZXJDbG9zZXN0UGllPXtuYW1lOiJob3ZlckNsb3Nlc3RQaWUiLF9jYXQ6ImhvdmVyY2xvc2VzdCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOiJjbG9zZXN0IixpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6dn0sdS5yZXNldFZpZXdTYW5rZXk9e25hbWU6InJlc2V0U2Fua2V5R3JvdXAiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIlJlc2V0IHZpZXciKX0saWNvbjpvLmhvbWUsY2xpY2s6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXsibm9kZS5ncm91cHMiOltdLCJub2RlLngiOltdLCJub2RlLnkiOltdfSxyPTA7cjxlLl9mdWxsRGF0YS5sZW5ndGg7cisrKXt2YXIgYT1lLl9mdWxsRGF0YVtyXS5fdmlld0luaXRpYWw7dFsibm9kZS5ncm91cHMiXS5wdXNoKGEubm9kZS5ncm91cHMuc2xpY2UoKSksdFsibm9kZS54Il0ucHVzaChhLm5vZGUueC5zbGljZSgpKSx0WyJub2RlLnkiXS5wdXNoKGEubm9kZS55LnNsaWNlKCkpfW4uY2FsbCgicmVzdHlsZSIsZSx0KX19LHUudG9nZ2xlSG92ZXI9e25hbWU6InRvZ2dsZUhvdmVyIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmZ1bmN0aW9uKGUsdCl7dmFyIHI9aChlLHQpO3IuaG92ZXJtb2RlPW0oZSksbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUscil9fSx1LnJlc2V0Vmlld3M9e25hbWU6InJlc2V0Vmlld3MiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIlJlc2V0IHZpZXdzIil9LGljb246by5ob21lLGNsaWNrOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5jdXJyZW50VGFyZ2V0O3Iuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLCJ6b29tIiksci5zZXRBdHRyaWJ1dGUoImRhdGEtdmFsIiwicmVzZXQiKSxkKGUsdCksci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsInJlc2V0TGFzdFNhdmUiKSxwKGUsdCkseChlLCJnZW8iKSx4KGUsIm1hcGJveCIpfX0sdS50b2dnbGVTcGlrZWxpbmVzPXtuYW1lOiJ0b2dnbGVTcGlrZWxpbmVzIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJUb2dnbGUgU3Bpa2UgTGluZXMiKX0saWNvbjpvLnNwaWtlbGluZSxhdHRyOiJfY2FydGVzaWFuU3Bpa2VzRW5hYmxlZCIsdmFsOiJvbiIsY2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dCxyPXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ7dC5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD0ib24iPT09cj8ib2ZmIjoib24iLG4uY2FsbCgiX2d1aVJlbGF5b3V0IixlLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0ib24iPT09ZS5fZnVsbExheW91dC5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZCxyPWkubGlzdChlLG51bGwsITApLG49e30sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbz1yW2FdO25bby5fbmFtZSsiLnNob3dzcGlrZXMiXT0hIXR8fG8uX3Nob3dTcGlrZUluaXRpYWx9cmV0dXJuIG59KGUpKX19LHUucmVzZXRWaWV3TWFwYm94PXtuYW1lOiJyZXNldFZpZXdNYXBib3giLF9jYXQ6InJlc2V0VmlldyIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiUmVzZXQgdmlldyIpfSxhdHRyOiJyZXNldCIsaWNvbjpvLmhvbWUsY2xpY2s6ZnVuY3Rpb24oZSl7eChlLCJtYXBib3giKX19LHUuem9vbUluTWFwYm94PXtuYW1lOiJ6b29tSW5NYXBib3giLF9jYXQ6Inpvb21pbiIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiWm9vbSBpbiIpfSxhdHRyOiJ6b29tIix2YWw6ImluIixpY29uOm8uem9vbV9wbHVzLGNsaWNrOnl9LHUuem9vbU91dE1hcGJveD17bmFtZToiem9vbU91dE1hcGJveCIsX2NhdDoiem9vbW91dCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246by56b29tX21pbnVzLGNsaWNrOnl9fSx7Ii4uLy4uL2ZvbnRzL3Bsb3RpY29uIjoyMTUsIi4uLy4uL2xpYiI6MjMyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjI4MywiLi4vLi4vcGxvdHMvcGxvdHMiOjMxNiwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi4vc2hhcGVzL2RyYXciOjE4Nn1dLDE2MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL2J1dHRvbnMiKSxhPU9iamVjdC5rZXlzKG4pLGk9WyJkcmF3bGluZSIsImRyYXdvcGVucGF0aCIsImRyYXdjbG9zZWRwYXRoIiwiZHJhd2NpcmNsZSIsImRyYXdyZWN0IiwiZXJhc2VzaGFwZSJdLG89WyJ2MWhvdmVybW9kZSIsImhvdmVyY2xvc2VzdCIsImhvdmVyY29tcGFyZSIsInRvZ2dsZWhvdmVyIiwidG9nZ2xlc3Bpa2VsaW5lcyJdLmNvbmNhdChpKSxsPVtdO2EuZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2lmKC0xPT09by5pbmRleE9mKGUuX2NhdHx8ZS5uYW1lKSl7dmFyIHQ9ZS5uYW1lLHI9KGUuX2NhdHx8ZS5uYW1lKS50b0xvd2VyQ2FzZSgpOy0xPT09bC5pbmRleE9mKHQpJiZsLnB1c2godCksLTE9PT1sLmluZGV4T2YocikmJmwucHVzaChyKX19KG5bZV0pfSkpLGwuc29ydCgpLHQuZXhwb3J0cz17RFJBV19NT0RFUzppLGJhY2tCdXR0b25zOm8sZm9yZUJ1dHRvbnM6bH19LHsiLi9idXR0b25zIjoxNjJ9XSwxNjQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi9jb2xvciIpLGk9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89ZSgiLi9hdHRyaWJ1dGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5tb2RlYmFyfHx7fSxsPWkubmV3Q29udGFpbmVyKHQsIm1vZGViYXIiKTtmdW5jdGlvbiBzKGUsdCl7cmV0dXJuIG4uY29lcmNlKHIsbCxvLGUsdCl9cygib3JpZW50YXRpb24iKSxzKCJiZ2NvbG9yIixhLmFkZE9wYWNpdHkodC5wYXBlcl9iZ2NvbG9yLC41KSk7dmFyIGM9YS5jb250cmFzdChhLnJnYih0Lm1vZGViYXIuYmdjb2xvcikpO3MoImNvbG9yIixhLmFkZE9wYWNpdHkoYywuMykpLHMoImFjdGl2ZWNvbG9yIixhLmFkZE9wYWNpdHkoYywuNykpLHMoInVpcmV2aXNpb24iLHQudWlyZXZpc2lvbikscygiYWRkIikscygicmVtb3ZlIil9fSx7Ii4uLy4uL2xpYiI6MjMyLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyNjgsIi4uL2NvbG9yIjoxMDIsIi4vYXR0cmlidXRlcyI6MTYxfV0sMTY1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJtb2RlYmFyIixsYXlvdXRBdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKSxtYW5hZ2U6ZSgiLi9tYW5hZ2UiKX19LHsiLi9hdHRyaWJ1dGVzIjoxNjEsIi4vZGVmYXVsdHMiOjE2NCwiLi9tYW5hZ2UiOjE2Nn1dLDE2NjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxhPWUoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIiksaT1lKCIuLi8uLi9yZWdpc3RyeSIpLG89ZSgiLi4vZngvaGVscGVycyIpLmlzVW5pZmllZEhvdmVyLGw9ZSgiLi9tb2RlYmFyIikscz1lKCIuL2J1dHRvbnMiKSxjPWUoIi4vY29uc3RhbnRzIikuRFJBV19NT0RFUzt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dCxyPWUuX2NvbnRleHQsdT10Ll9tb2RlQmFyO2lmKHIuZGlzcGxheU1vZGVCYXJ8fHIud2F0ZXJtYXJrKXtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUpKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9uc1RvUmVtb3ZlKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJtdXN0IGJlIGFuIGFycmF5LiJdLmpvaW4oIiAiKSk7aWYoIUFycmF5LmlzQXJyYXkoci5tb2RlQmFyQnV0dG9uc1RvQWRkKSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnNUb0FkZCogY29uZmlndXJhdGlvbiBvcHRpb25zIiwibXVzdCBiZSBhbiBhcnJheS4iXS5qb2luKCIgIikpO3ZhciBkLGY9ci5tb2RlQmFyQnV0dG9ucztkPUFycmF5LmlzQXJyYXkoZikmJmYubGVuZ3RoP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWZvcih2YXIgcj1lW3RdLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGE9cltuXTtpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKHZvaWQgMD09PXNbYV0pdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJpbnZhbGlkIGJ1dHRvbiBuYW1lIl0uam9pbigiICIpKTtlW3RdW25dPXNbYV19fXJldHVybiBlfShmKTohci5kaXNwbGF5TW9kZUJhciYmci53YXRlcm1hcms/W106ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dCxyPWUuX2Z1bGxEYXRhLGw9ZS5fY29udGV4dDtmdW5jdGlvbiB1KGUsdCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZih0LnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuITB9ZWxzZXt2YXIgcj10Lm5hbWUsbj10Ll9jYXR8fHQubmFtZTtpZihyPT09ZXx8bj09PWUudG9Mb3dlckNhc2UoKSlyZXR1cm4hMH1yZXR1cm4hMX12YXIgZD10Lm1vZGViYXIuYWRkOyJzdHJpbmciPT10eXBlb2YgZCYmKGQ9W2RdKTt2YXIgZj10Lm1vZGViYXIucmVtb3ZlOyJzdHJpbmciPT10eXBlb2YgZiYmKGY9W2ZdKTt2YXIgcD1sLm1vZGVCYXJCdXR0b25zVG9BZGQuY29uY2F0KGQuZmlsdGVyKChmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGwubW9kZUJhckJ1dHRvbnNUb1JlbW92ZS5sZW5ndGg7dCsrKWlmKHUoZSxsLm1vZGVCYXJCdXR0b25zVG9SZW1vdmVbdF0pKXJldHVybiExO3JldHVybiEwfSkpKSxoPWwubW9kZUJhckJ1dHRvbnNUb1JlbW92ZS5jb25jYXQoZi5maWx0ZXIoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8bC5tb2RlQmFyQnV0dG9uc1RvQWRkLmxlbmd0aDt0KyspaWYodShlLGwubW9kZUJhckJ1dHRvbnNUb0FkZFt0XSkpcmV0dXJuITE7cmV0dXJuITB9KSkpLGc9dC5faGFzKCJjYXJ0ZXNpYW4iKSxtPXQuX2hhcygiZ2wzZCIpLHY9dC5faGFzKCJnZW8iKSx5PXQuX2hhcygicGllIikseD10Ll9oYXMoImZ1bm5lbGFyZWEiKSxiPXQuX2hhcygiZ2wyZCIpLF89dC5faGFzKCJ0ZXJuYXJ5Iiksdz10Ll9oYXMoIm1hcGJveCIpLFQ9dC5faGFzKCJwb2xhciIpLE09dC5faGFzKCJzbWl0aCIpLGs9dC5faGFzKCJzYW5rZXkiKSxBPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uLmxpc3Qoe19mdWxsTGF5b3V0OmV9LG51bGwsITApLHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiExO3JldHVybiEwfSh0KSxMPW8odC5ob3Zlcm1vZGUpLFM9W107ZnVuY3Rpb24gRChlKXtpZihlLmxlbmd0aCl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl7Zm9yKHZhciBuPWVbcl0sYT1zW25dLGk9YS5uYW1lLnRvTG93ZXJDYXNlKCksbz0oYS5fY2F0fHxhLm5hbWUpLnRvTG93ZXJDYXNlKCksbD0hMSxjPTA7YzxoLmxlbmd0aDtjKyspe3ZhciB1PWhbY10udG9Mb3dlckNhc2UoKTtpZih1PT09aXx8dT09PW8pe2w9ITA7YnJlYWt9fWx8fHQucHVzaChzW25dKX1TLnB1c2godCl9fXZhciBDPVsidG9JbWFnZSJdO2wuc2hvd0VkaXRJbkNoYXJ0U3R1ZGlvP0MucHVzaCgiZWRpdEluQ2hhcnRTdHVkaW8iKTpsLnNob3dTZW5kVG9DbG91ZCYmQy5wdXNoKCJzZW5kRGF0YVRvQ2xvdWQiKTtEKEMpO3ZhciBPPVtdLFA9W10sST1bXSxSPVtdOyhnfHxifHx5fHx4fHxfKSt2K20rdytUK00+MT8oUD1bInRvZ2dsZUhvdmVyIl0sST1bInJlc2V0Vmlld3MiXSk6dj8oTz1bInpvb21JbkdlbyIsInpvb21PdXRHZW8iXSxQPVsiaG92ZXJDbG9zZXN0R2VvIl0sST1bInJlc2V0R2VvIl0pOm0/KFA9WyJob3ZlckNsb3Nlc3QzZCJdLEk9WyJyZXNldENhbWVyYURlZmF1bHQzZCIsInJlc2V0Q2FtZXJhTGFzdFNhdmUzZCJdKTp3PyhPPVsiem9vbUluTWFwYm94Iiwiem9vbU91dE1hcGJveCJdLFA9WyJ0b2dnbGVIb3ZlciJdLEk9WyJyZXNldFZpZXdNYXBib3giXSk6Yj9QPVsiaG92ZXJDbG9zZXN0R2wyZCJdOnk/UD1bImhvdmVyQ2xvc2VzdFBpZSJdOms/KFA9WyJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iLCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iXSxJPVsicmVzZXRWaWV3U2Fua2V5Il0pOlA9WyJ0b2dnbGVIb3ZlciJdO2cmJihQPVsidG9nZ2xlU3Bpa2VsaW5lcyIsImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsImhvdmVyQ29tcGFyZUNhcnRlc2lhbiJdKTsoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoIWkudHJhY2VJcyhlW3RdLCJub0hvdmVyIikpcmV0dXJuITE7cmV0dXJuITB9KHIpfHxMKSYmKFA9W10pOyFnJiYhYnx8QXx8KE89WyJ6b29tSW4yZCIsInpvb21PdXQyZCIsImF1dG9TY2FsZTJkIl0sInJlc2V0Vmlld3MiIT09SVswXSYmKEk9WyJyZXNldFNjYWxlMmQiXSkpO20/Uj1bInpvb20zZCIsInBhbjNkIiwib3JiaXRSb3RhdGlvbiIsInRhYmxlUm90YXRpb24iXTooZ3x8YikmJiFBfHxfP1I9WyJ6b29tMmQiLCJwYW4yZCJdOnd8fHY/Uj1bInBhbjJkIl06VCYmKFI9WyJ6b29tMmQiXSk7KGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMSxyPTA7cjxlLmxlbmd0aCYmIXQ7cisrKXt2YXIgbj1lW3JdO24uX21vZHVsZSYmbi5fbW9kdWxlLnNlbGVjdFBvaW50cyYmKGkudHJhY2VJcyhuLCJzY2F0dGVyLWxpa2UiKT8oYS5oYXNNYXJrZXJzKG4pfHxhLmhhc1RleHQobikpJiYodD0hMCk6aS50cmFjZUlzKG4sImJveC12aW9saW4iKSYmImFsbCIhPT1uLmJveHBvaW50cyYmImFsbCIhPT1uLnBvaW50c3x8KHQ9ITApKX1yZXR1cm4gdH0pKHIpJiZSLnB1c2goInNlbGVjdDJkIiwibGFzc28yZCIpO3ZhciB6PVtdLE49ZnVuY3Rpb24oZSl7LTE9PT16LmluZGV4T2YoZSkmJi0xIT09UC5pbmRleE9mKGUpJiZ6LnB1c2goZSl9O2lmKEFycmF5LmlzQXJyYXkocCkpe2Zvcih2YXIgRj1bXSxFPTA7RTxwLmxlbmd0aDtFKyspe3ZhciBqPXBbRV07InN0cmluZyI9PXR5cGVvZiBqPyhqPWoudG9Mb3dlckNhc2UoKSwtMSE9PWMuaW5kZXhPZihqKT8odC5faGFzKCJtYXBib3giKXx8dC5faGFzKCJjYXJ0ZXNpYW4iKSkmJlIucHVzaChqKToidG9nZ2xlc3Bpa2VsaW5lcyI9PT1qP04oInRvZ2dsZVNwaWtlbGluZXMiKToidG9nZ2xlaG92ZXIiPT09aj9OKCJ0b2dnbGVIb3ZlciIpOiJob3ZlcmNvbXBhcmUiPT09aj9OKCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iKToiaG92ZXJjbG9zZXN0Ij09PWo/KE4oImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIpLE4oImhvdmVyQ2xvc2VzdEdlbyIpLE4oImhvdmVyQ2xvc2VzdDNkIiksTigiaG92ZXJDbG9zZXN0R2wyZCIpLE4oImhvdmVyQ2xvc2VzdFBpZSIpKToidjFob3Zlcm1vZGUiPT09aiYmKE4oInRvZ2dsZUhvdmVyIiksTigiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIiksTigiaG92ZXJDb21wYXJlQ2FydGVzaWFuIiksTigiaG92ZXJDbG9zZXN0R2VvIiksTigiaG92ZXJDbG9zZXN0M2QiKSxOKCJob3ZlckNsb3Nlc3RHbDJkIiksTigiaG92ZXJDbG9zZXN0UGllIikpKTpGLnB1c2goail9cD1GfXJldHVybiBEKFIpLEQoTy5jb25jYXQoSSkpLEQoeiksZnVuY3Rpb24oZSx0KXtpZih0Lmxlbmd0aClpZihBcnJheS5pc0FycmF5KHRbMF0pKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUucHVzaCh0W3JdKTtlbHNlIGUucHVzaCh0KTtyZXR1cm4gZX0oUyxwKX0oZSksdT91LnVwZGF0ZShlLGQpOnQuX21vZGVCYXI9bChlLGQpfWVsc2UgdSYmKHUuZGVzdHJveSgpLGRlbGV0ZSB0Ll9tb2RlQmFyKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjoyODMsIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjozODMsIi4uL2Z4L2hlbHBlcnMiOjEzOCwiLi9idXR0b25zIjoxNjIsIi4vY29uc3RhbnRzIjoxNjMsIi4vbW9kZWJhciI6MTY3fV0sMTY3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoImZhc3QtaXNudW1lcmljIiksaT1lKCIuLi8uLi9saWIiKSxvPWUoIi4uLy4uL2ZvbnRzL3Bsb3RpY29uIiksbD1uZXcgRE9NUGFyc2VyO2Z1bmN0aW9uIHMoZSl7dGhpcy5jb250YWluZXI9ZS5jb250YWluZXIsdGhpcy5lbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMudXBkYXRlKGUuZ3JhcGhJbmZvLGUuYnV0dG9ucyksdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KX12YXIgYz1zLnByb3RvdHlwZTtjLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMuZ3JhcGhJbmZvPWU7dmFyIHI9dGhpcy5ncmFwaEluZm8uX2NvbnRleHQsbj10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxhPSJtb2RlYmFyLSIrbi5fdWlkO3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImlkIixhKSx0aGlzLl91aWQ9YSx0aGlzLmVsZW1lbnQuY2xhc3NOYW1lPSJtb2RlYmFyIiwiaG92ZXIiPT09ci5kaXNwbGF5TW9kZUJhciYmKHRoaXMuZWxlbWVudC5jbGFzc05hbWUrPSIgbW9kZWJhci0taG92ZXIgZWFzZS1iZyIpLCJ2Ij09PW4ubW9kZWJhci5vcmllbnRhdGlvbiYmKHRoaXMuZWxlbWVudC5jbGFzc05hbWUrPSIgdmVydGljYWwiLHQ9dC5yZXZlcnNlKCkpO3ZhciBvPW4ubW9kZWJhcixsPSJob3ZlciI9PT1yLmRpc3BsYXlNb2RlQmFyPyIuanMtcGxvdGx5LXBsb3QgLnBsb3RseTpob3ZlciAiOiIiO2kuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZShhKSxpLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoYSxsKyIjIithKyIgLm1vZGViYXItZ3JvdXAiLCJiYWNrZ3JvdW5kLWNvbG9yOiAiK28uYmdjb2xvciksaS5hZGRSZWxhdGVkU3R5bGVSdWxlKGEsIiMiK2ErIiAubW9kZWJhci1idG4gLmljb24gcGF0aCIsImZpbGw6ICIrby5jb2xvciksaS5hZGRSZWxhdGVkU3R5bGVSdWxlKGEsIiMiK2ErIiAubW9kZWJhci1idG46aG92ZXIgLmljb24gcGF0aCIsImZpbGw6ICIrby5hY3RpdmVjb2xvciksaS5hZGRSZWxhdGVkU3R5bGVSdWxlKGEsIiMiK2ErIiAubW9kZWJhci1idG4uYWN0aXZlIC5pY29uIHBhdGgiLCJmaWxsOiAiK28uYWN0aXZlY29sb3IpO3ZhciBzPSF0aGlzLmhhc0J1dHRvbnModCksYz10aGlzLmhhc0xvZ28hPT1yLmRpc3BsYXlsb2dvLHU9dGhpcy5sb2NhbGUhPT1yLmxvY2FsZTtpZih0aGlzLmxvY2FsZT1yLmxvY2FsZSwoc3x8Y3x8dSkmJih0aGlzLnJlbW92ZUFsbEJ1dHRvbnMoKSx0aGlzLnVwZGF0ZUJ1dHRvbnModCksci53YXRlcm1hcmt8fHIuZGlzcGxheWxvZ28pKXt2YXIgZD10aGlzLmdldExvZ28oKTtyLndhdGVybWFyayYmKGQuY2xhc3NOYW1lPWQuY2xhc3NOYW1lKyIgd2F0ZXJtYXJrIiksInYiPT09bi5tb2RlYmFyLm9yaWVudGF0aW9uP3RoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUoZCx0aGlzLmVsZW1lbnQuY2hpbGROb2Rlc1swXSk6dGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGQpLHRoaXMuaGFzTG9nbz0hMH10aGlzLnVwZGF0ZUFjdGl2ZUJ1dHRvbigpfSxjLnVwZGF0ZUJ1dHRvbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLmJ1dHRvbnM9ZSx0aGlzLmJ1dHRvbkVsZW1lbnRzPVtdLHRoaXMuYnV0dG9uc05hbWVzPVtdLHRoaXMuYnV0dG9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj10LmNyZWF0ZUdyb3VwKCk7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1lLm5hbWU7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgYnV0dG9uICduYW1lJyBpbiBidXR0b24gY29uZmlnIik7aWYoLTEhPT10LmJ1dHRvbnNOYW1lcy5pbmRleE9mKG4pKXRocm93IG5ldyBFcnJvcigiYnV0dG9uIG5hbWUgJyIrbisiJyBpcyB0YWtlbiIpO3QuYnV0dG9uc05hbWVzLnB1c2gobik7dmFyIGE9dC5jcmVhdGVCdXR0b24oZSk7dC5idXR0b25FbGVtZW50cy5wdXNoKGEpLHIuYXBwZW5kQ2hpbGQoYSl9KSksdC5lbGVtZW50LmFwcGVuZENoaWxkKHIpfSkpfSxjLmNyZWF0ZUdyb3VwPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuY2xhc3NOYW1lPSJtb2RlYmFyLWdyb3VwIixlfSxjLmNyZWF0ZUJ1dHRvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3Iuc2V0QXR0cmlidXRlKCJyZWwiLCJ0b29sdGlwIiksci5jbGFzc05hbWU9Im1vZGViYXItYnRuIjt2YXIgYT1lLnRpdGxlO3ZvaWQgMD09PWE/YT1lLm5hbWU6ImZ1bmN0aW9uIj09dHlwZW9mIGEmJihhPWEodGhpcy5ncmFwaEluZm8pKSwoYXx8MD09PWEpJiZyLnNldEF0dHJpYnV0ZSgiZGF0YS10aXRsZSIsYSksdm9pZCAwIT09ZS5hdHRyJiZyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIixlLmF0dHIpO3ZhciBpPWUudmFsO2lmKHZvaWQgMCE9PWkmJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKGk9aSh0aGlzLmdyYXBoSW5mbykpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsaSkpLCJmdW5jdGlvbiIhPXR5cGVvZiBlLmNsaWNrKXRocm93IG5ldyBFcnJvcigibXVzdCBwcm92aWRlIGJ1dHRvbiAnY2xpY2snIGZ1bmN0aW9uIGluIGJ1dHRvbiBjb25maWciKTtyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24ocil7ZS5jbGljayh0LmdyYXBoSW5mbyxyKSx0LnVwZGF0ZUFjdGl2ZUJ1dHRvbihyLmN1cnJlbnRUYXJnZXQpfSkpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXRvZ2dsZSIsZS50b2dnbGV8fCExKSxlLnRvZ2dsZSYmbi5zZWxlY3QocikuY2xhc3NlZCgiYWN0aXZlIiwhMCk7dmFyIGw9ZS5pY29uO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBsP3IuYXBwZW5kQ2hpbGQobCgpKTpyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbihsfHxvLnF1ZXN0aW9uKSksci5zZXRBdHRyaWJ1dGUoImRhdGEtZ3Jhdml0eSIsZS5ncmF2aXR5fHwibiIpLHJ9LGMuY3JlYXRlSWNvbj1mdW5jdGlvbihlKXt2YXIgdCxyPWEoZS5oZWlnaHQpP051bWJlcihlLmhlaWdodCk6ZS5hc2NlbnQtZS5kZXNjZW50LG49Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtpZihlLnBhdGgpeyh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLCJzdmciKSkuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixbMCwwLGUud2lkdGgscl0uam9pbigiICIpKSx0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJpY29uIik7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sInBhdGgiKTtpLnNldEF0dHJpYnV0ZSgiZCIsZS5wYXRoKSxlLnRyYW5zZm9ybT9pLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixlLnRyYW5zZm9ybSk6dm9pZCAwIT09ZS5hc2NlbnQmJmkuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJtYXRyaXgoMSAwIDAgLTEgMCAiK2UuYXNjZW50KyIpIiksdC5hcHBlbmRDaGlsZChpKX1lLnN2ZyYmKHQ9bC5wYXJzZUZyb21TdHJpbmcoZS5zdmcsImFwcGxpY2F0aW9uL3htbCIpLmNoaWxkTm9kZXNbMF0pO3JldHVybiB0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMWVtIiksdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMWVtIiksdH0sYy51cGRhdGVBY3RpdmVCdXR0b249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5ncmFwaEluZm8uX2Z1bGxMYXlvdXQscj12b2lkIDAhPT1lP2UuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKTpudWxsO3RoaXMuYnV0dG9uRWxlbWVudHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIil8fCEwLG89ZS5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGw9InRydWUiPT09ZS5nZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIikscz1uLnNlbGVjdChlKTtpZihsKW89PT1yJiZzLmNsYXNzZWQoImFjdGl2ZSIsIXMuY2xhc3NlZCgiYWN0aXZlIikpO2Vsc2V7dmFyIGM9bnVsbD09PW8/bzppLm5lc3RlZFByb3BlcnR5KHQsbykuZ2V0KCk7cy5jbGFzc2VkKCJhY3RpdmUiLGM9PT1hKX19KSl9LGMuaGFzQnV0dG9ucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ1dHRvbnM7aWYoIXQpcmV0dXJuITE7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil7aWYoZVtyXS5sZW5ndGghPT10W3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPGVbcl0ubGVuZ3RoO24rKylpZihlW3JdW25dLm5hbWUhPT10W3JdW25dLm5hbWUpcmV0dXJuITF9cmV0dXJuITB9LGMuZ2V0TG9nbz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlR3JvdXAoKSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gdC5ocmVmPSJodHRwczovL3Bsb3RseS5jb20vIix0LnRhcmdldD0iX2JsYW5rIix0LnNldEF0dHJpYnV0ZSgiZGF0YS10aXRsZSIsaS5fKHRoaXMuZ3JhcGhJbmZvLCJQcm9kdWNlZCB3aXRoIFBsb3RseSIpKSx0LmNsYXNzTmFtZT0ibW9kZWJhci1idG4gcGxvdGx5anNpY29uIG1vZGViYXItYnRuLS1sb2dvIix0LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbihvLm5ld3Bsb3RseWxvZ28pKSxlLmFwcGVuZENoaWxkKHQpLGV9LGMucmVtb3ZlQWxsQnV0dG9ucz1mdW5jdGlvbigpe2Zvcig7dGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQ7KXRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7dGhpcy5oYXNMb2dvPSExfSxjLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLnJlbW92ZUVsZW1lbnQodGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLm1vZGViYXIiKSksaS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKHRoaXMuX3VpZCl9LHQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsYT1uZXcgcyh7Z3JhcGhJbmZvOmUsY29udGFpbmVyOnIuX21vZGViYXJkaXYubm9kZSgpLGJ1dHRvbnM6dH0pO3JldHVybiByLl9wcml2YXRlcGxvdCYmbi5zZWxlY3QoYS5lbGVtZW50KS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJiYWRnZS1wcml2YXRlIGZsb2F0LS1sZWZ0IiwhMCkudGV4dCgiUFJJVkFURSIpLGF9fSx7Ii4uLy4uL2ZvbnRzL3Bsb3RpY29uIjoyMTUsIi4uLy4uL2xpYiI6MjMyLCJAcGxvdGx5L2QzIjoxMSwiZmFzdC1pc251bWVyaWMiOjE3fV0sMTY4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9ZSgiLi4vY29sb3IvYXR0cmlidXRlcyIpLGk9KDAsZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5KSgiYnV0dG9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHN0ZXA6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm1vbnRoIiwieWVhciIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJhbGwiXSxkZmx0OiJtb250aCIsZWRpdFR5cGU6InBsb3QifSxzdGVwbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmFja3dhcmQiLCJ0b2RhdGUiXSxkZmx0OiJiYWNrd2FyZCIsZWRpdFR5cGU6InBsb3QifSxjb3VudDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0pO3QuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxidXR0b25zOmkseDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6InBsb3QifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6InBsb3QifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxlZGl0VHlwZToicGxvdCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJib3R0b20iLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHtlZGl0VHlwZToicGxvdCJ9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmxpZ2h0TGluZSxlZGl0VHlwZToicGxvdCJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In19LHsiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjY4LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjMxMCwiLi4vY29sb3IvYXR0cmlidXRlcyI6MTAxfV0sMTY5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17eVBhZDouMDIsbWluQnV0dG9uV2lkdGg6MzAscng6MyxyeTozLGxpZ2h0QW1vdW50OjI1LGRhcmtBbW91bnQ6MTB9fSx7fV0sMTcwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vY29sb3IiKSxpPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPWUoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGw9ZSgiLi9hdHRyaWJ1dGVzIikscz1lKCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGMoZSx0LHIsYSl7dmFyIGk9YS5jYWxlbmRhcjtmdW5jdGlvbiBvKHIsYSl7cmV0dXJuIG4uY29lcmNlKGUsdCxsLmJ1dHRvbnMscixhKX1pZihvKCJ2aXNpYmxlIikpe3ZhciBzPW8oInN0ZXAiKTsiYWxsIiE9PXMmJighaXx8ImdyZWdvcmlhbiI9PT1pfHwibW9udGgiIT09cyYmInllYXIiIT09cz9vKCJzdGVwbW9kZSIpOnQuc3RlcG1vZGU9ImJhY2t3YXJkIixvKCJjb3VudCIpKSxvKCJsYWJlbCIpfX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsdSxkKXt2YXIgZj1lLnJhbmdlc2VsZWN0b3J8fHt9LHA9aS5uZXdDb250YWluZXIodCwicmFuZ2VzZWxlY3RvciIpO2Z1bmN0aW9uIGgoZSx0KXtyZXR1cm4gbi5jb2VyY2UoZixwLGwsZSx0KX1pZihoKCJ2aXNpYmxlIixvKGYscCx7bmFtZToiYnV0dG9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmMsY2FsZW5kYXI6ZH0pLmxlbmd0aD4wKSl7dmFyIGc9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj1yLmZpbHRlcigoZnVuY3Rpb24ocil7cmV0dXJuIHRbcl0uYW5jaG9yPT09ZS5faWR9KSksYT0wLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89dFtuW2ldXS5kb21haW47byYmKGE9TWF0aC5tYXgob1sxXSxhKSl9cmV0dXJuW2UuZG9tYWluWzBdLGErcy55UGFkXX0odCxyLHUpO2goIngiLGdbMF0pLGgoInkiLGdbMV0pLG4ubm9uZU9yQWxsKGUsdCxbIngiLCJ5Il0pLGgoInhhbmNob3IiKSxoKCJ5YW5jaG9yIiksbi5jb2VyY2VGb250KGgsImZvbnQiLHIuZm9udCk7dmFyIG09aCgiYmdjb2xvciIpO2goImFjdGl2ZWNvbG9yIixhLmNvbnRyYXN0KG0scy5saWdodEFtb3VudCxzLmRhcmtBbW91bnQpKSxoKCJib3JkZXJjb2xvciIpLGgoImJvcmRlcndpZHRoIil9fX0seyIuLi8uLi9saWIiOjIzMiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjY4LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjI3NCwiLi4vY29sb3IiOjEwMiwiLi9hdHRyaWJ1dGVzIjoxNjgsIi4vY29uc3RhbnRzIjoxNjl9XSwxNzE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz1lKCIuLi9jb2xvciIpLGw9ZSgiLi4vZHJhd2luZyIpLHM9ZSgiLi4vLi4vbGliIiksYz1zLnN0clRyYW5zbGF0ZSx1PWUoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGQ9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksZj1lKCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikscD1mLkxJTkVfU1BBQ0lORyxoPWYuRlJPTV9UTCxnPWYuRlJPTV9CUixtPWUoIi4vY29uc3RhbnRzIiksdj1lKCIuL2dldF91cGRhdGVfb2JqZWN0Iik7ZnVuY3Rpb24geShlKXtyZXR1cm4gZS5faWR9ZnVuY3Rpb24geChlLHQscil7dmFyIG49cy5lbnN1cmVTaW5nbGUoZSwicmVjdCIsInNlbGVjdG9yLXJlY3QiLChmdW5jdGlvbihlKXtlLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pKTtuLmF0dHIoe3J4Om0ucngscnk6bS5yeX0pLG4uY2FsbChvLnN0cm9rZSx0LmJvcmRlcmNvbG9yKS5jYWxsKG8uZmlsbCxmdW5jdGlvbihlLHQpe3JldHVybiB0Ll9pc0FjdGl2ZXx8dC5faXNIb3ZlcmVkP2UuYWN0aXZlY29sb3I6ZS5iZ2NvbG9yfSh0LHIpKS5zdHlsZSgic3Ryb2tlLXdpZHRoIix0LmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIGIoZSx0LHIsbil7cy5lbnN1cmVTaW5nbGUoZSwidGV4dCIsInNlbGVjdG9yLXRleHQiLChmdW5jdGlvbihlKXtlLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIil9KSkuY2FsbChsLmZvbnQsdC5mb250KS50ZXh0KGZ1bmN0aW9uKGUsdCl7aWYoZS5sYWJlbClyZXR1cm4gdD9zLnRlbXBsYXRlU3RyaW5nKGUubGFiZWwsdCk6ZS5sYWJlbDtyZXR1cm4iYWxsIj09PWUuc3RlcD8iYWxsIjplLmNvdW50K2Uuc3RlcC5jaGFyQXQoMCl9KHIsbi5fZnVsbExheW91dC5fbWV0YSkpLmNhbGwoKGZ1bmN0aW9uKGUpe3UuY29udmVydFRvVHNwYW5zKGUsbil9KSl9dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi5yYW5nZXNlbGVjdG9yIikuZGF0YShmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZC5saXN0KGUsIngiLCEwKSxyPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9dFtuXTthLnJhbmdlc2VsZWN0b3ImJmEucmFuZ2VzZWxlY3Rvci52aXNpYmxlJiZyLnB1c2goYSl9cmV0dXJuIHJ9KGUpLHkpO3QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJyYW5nZXNlbGVjdG9yIiwhMCksdC5leGl0KCkucmVtb3ZlKCksdC5zdHlsZSh7Y3Vyc29yOiJwb2ludGVyIiwicG9pbnRlci1ldmVudHMiOiJhbGwifSksdC5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPXQsZD1vLnJhbmdlc2VsZWN0b3IsZj1yLnNlbGVjdEFsbCgiZy5idXR0b24iKS5kYXRhKHMuZmlsdGVyVmlzaWJsZShkLmJ1dHRvbnMpKTtmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYnV0dG9uIiwhMCksZi5leGl0KCkucmVtb3ZlKCksZi5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXYobyx0KTt0Ll9pc0FjdGl2ZT1mdW5jdGlvbihlLHQscil7aWYoImFsbCI9PT10LnN0ZXApcmV0dXJuITA9PT1lLmF1dG9yYW5nZTt2YXIgbj1PYmplY3Qua2V5cyhyKTtyZXR1cm4gZS5yYW5nZVswXT09PXJbblswXV0mJmUucmFuZ2VbMV09PT1yW25bMV1dfShvLHQsaSksci5jYWxsKHgsZCx0KSxyLmNhbGwoYixkLHQsZSksci5vbigiY2xpY2siLChmdW5jdGlvbigpe2UuX2RyYWdnZWR8fGEuY2FsbCgiX2d1aVJlbGF5b3V0IixlLGkpfSkpLHIub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7dC5faXNIb3ZlcmVkPSEwLHIuY2FsbCh4LGQsdCl9KSksci5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe3QuX2lzSG92ZXJlZD0hMSxyLmNhbGwoeCxkLHQpfSkpfSkpLGZ1bmN0aW9uKGUsdCxyLGEsbyl7dmFyIGQ9MCxmPTAsdj1yLmJvcmRlcndpZHRoO3QuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoIi5zZWxlY3Rvci10ZXh0IiksdD1yLmZvbnQuc2l6ZSpwLGE9TWF0aC5tYXgodCp1LmxpbmVDb3VudChlKSwxNikrMztmPU1hdGgubWF4KGYsYSl9KSksdC5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHQ9ZS5zZWxlY3QoIi5zZWxlY3Rvci1yZWN0IiksYT1lLnNlbGVjdCgiLnNlbGVjdG9yLXRleHQiKSxpPWEubm9kZSgpJiZsLmJCb3goYS5ub2RlKCkpLndpZHRoLG89ci5mb250LnNpemUqcCxzPXUubGluZUNvdW50KGEpLGg9TWF0aC5tYXgoaSsxMCxtLm1pbkJ1dHRvbldpZHRoKTtlLmF0dHIoInRyYW5zZm9ybSIsYyh2K2QsdikpLHQuYXR0cih7eDowLHk6MCx3aWR0aDpoLGhlaWdodDpmfSksdS5wb3NpdGlvblRleHQoYSxoLzIsZi8yLShzLTEpKm8vMiszKSxkKz1oKzV9KSk7dmFyIHk9ZS5fZnVsbExheW91dC5fc2l6ZSx4PXkubCt5Lncqci54LGI9eS50K3kuaCooMS1yLnkpLF89ImxlZnQiO3MuaXNSaWdodEFuY2hvcihyKSYmKHgtPWQsXz0icmlnaHQiKTtzLmlzQ2VudGVyQW5jaG9yKHIpJiYoeC09ZC8yLF89ImNlbnRlciIpO3ZhciB3PSJ0b3AiO3MuaXNCb3R0b21BbmNob3IocikmJihiLT1mLHc9ImJvdHRvbSIpO3MuaXNNaWRkbGVBbmNob3IocikmJihiLT1mLzIsdz0ibWlkZGxlIik7ZD1NYXRoLmNlaWwoZCksZj1NYXRoLmNlaWwoZikseD1NYXRoLnJvdW5kKHgpLGI9TWF0aC5yb3VuZChiKSxpLmF1dG9NYXJnaW4oZSxhKyItcmFuZ2Utc2VsZWN0b3IiLHt4OnIueCx5OnIueSxsOmQqaFtfXSxyOmQqZ1tfXSxiOmYqZ1t3XSx0OmYqaFt3XX0pLG8uYXR0cigidHJhbnNmb3JtIixjKHgsYikpfShlLGYsZCxvLl9uYW1lLHIpfSkpfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IjoyMDcsIi4uLy4uL2xpYiI6MjMyLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjI1NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjoyODMsIi4uLy4uL3Bsb3RzL3Bsb3RzIjozMTYsIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4uL2NvbG9yIjoxMDIsIi4uL2RyYXdpbmciOjEyNCwiLi9jb25zdGFudHMiOjE2OSwiLi9nZXRfdXBkYXRlX29iamVjdCI6MTcyLCJAcGxvdGx5L2QzIjoxMX1dLDE3MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMy10aW1lIiksYT1lKCIuLi8uLi9saWIiKS50aXRsZUNhc2U7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fbmFtZSxpPXt9O2lmKCJhbGwiPT09dC5zdGVwKWlbcisiLmF1dG9yYW5nZSJdPSEwO2Vsc2V7dmFyIG89ZnVuY3Rpb24oZSx0KXt2YXIgcixpPWUucmFuZ2Usbz1uZXcgRGF0ZShlLnIybChpWzFdKSksbD10LnN0ZXAscz1uWyJ1dGMiK2EobCldLGM9dC5jb3VudDtzd2l0Y2godC5zdGVwbW9kZSl7Y2FzZSJiYWNrd2FyZCI6cj1lLmwycigrcy5vZmZzZXQobywtYykpO2JyZWFrO2Nhc2UidG9kYXRlIjp2YXIgdT1zLm9mZnNldChvLC1jKTtyPWUubDJyKCtzLmNlaWwodSkpfXZhciBkPWlbMV07cmV0dXJuW3IsZF19KGUsdCk7aVtyKyIucmFuZ2VbMF0iXT1vWzBdLGlbcisiLnJhbmdlWzFdIl09b1sxXX1yZXR1cm4gaX19LHsiLi4vLi4vbGliIjoyMzIsImQzLXRpbWUiOjE2fV0sMTczOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNlbGVjdG9yIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzZWxlY3RvcjplKCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKSxkcmF3OmUoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjE2OCwiLi9kZWZhdWx0cyI6MTcwLCIuL2RyYXciOjE3MX1dLDE3NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7dC5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmQsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9fSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDouMTUsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi9jb2xvci9hdHRyaWJ1dGVzIjoxMDF9XSwxNzU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikubGlzdCxhPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2UsaT1lKCIuL2NvbnN0YW50cyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bihlLCJ4IiwhMCkscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdLGw9b1tpLm5hbWVdO2wmJmwudmlzaWJsZSYmbC5hdXRvcmFuZ2UmJihsLl9pbnB1dC5hdXRvcmFuZ2U9ITAsbC5faW5wdXQucmFuZ2U9bC5yYW5nZT1hKGUsbykpfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6Mjc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjI4MywiLi9jb25zdGFudHMiOjE3Nn1dLDE3NjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e25hbWU6InJhbmdlc2xpZGVyIixjb250YWluZXJDbGFzc05hbWU6InJhbmdlc2xpZGVyLWNvbnRhaW5lciIsYmdDbGFzc05hbWU6InJhbmdlc2xpZGVyLWJnIixyYW5nZVBsb3RDbGFzc05hbWU6InJhbmdlc2xpZGVyLXJhbmdlcGxvdCIsbWFza01pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1taW4iLG1hc2tNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4IixzbGlkZUJveENsYXNzTmFtZToicmFuZ2VzbGlkZXItc2xpZGVib3giLGdyYWJiZXJNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWluIixncmFiQXJlYU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWluIixoYW5kbGVNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1taW4iLGdyYWJiZXJNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWF4IixncmFiQXJlYU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWF4IixoYW5kbGVNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1tYXgiLG1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1pbi1vcHAtYXhpcyIsbWFza01heE9wcEF4aXNDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4LW9wcC1heGlzIixtYXNrQ29sb3I6InJnYmEoMCwwLDAsMC40KSIsbWFza09wcEF4aXNDb2xvcjoicmdiYSgwLDAsMCwwLjIpIixzbGlkZUJveEZpbGw6InRyYW5zcGFyZW50IixzbGlkZUJveEN1cnNvcjoiZXctcmVzaXplIixncmFiQXJlYUZpbGw6InRyYW5zcGFyZW50IixncmFiQXJlYUN1cnNvcjoiY29sLXJlc2l6ZSIsZ3JhYkFyZWFXaWR0aDoxMCxoYW5kbGVXaWR0aDo0LGhhbmRsZVJhZGl1czoxLGhhbmRsZVN0cm9rZVdpZHRoOjEsZXh0cmFQYWQ6MTV9fSx7fV0sMTc3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGk9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz1lKCIuL2F0dHJpYnV0ZXMiKSxsPWUoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz1lW3JdLGM9dFtyXTtpZihzLnJhbmdlc2xpZGVyfHx0Ll9yZXF1ZXN0UmFuZ2VzbGlkZXJbYy5faWRdKXtuLmlzUGxhaW5PYmplY3Qocy5yYW5nZXNsaWRlcil8fChzLnJhbmdlc2xpZGVyPXt9KTt2YXIgdSxkLGY9cy5yYW5nZXNsaWRlcixwPWEubmV3Q29udGFpbmVyKGMsInJhbmdlc2xpZGVyIik7aWYoXygidmlzaWJsZSIpKXtfKCJiZ2NvbG9yIix0LnBsb3RfYmdjb2xvciksXygiYm9yZGVyY29sb3IiKSxfKCJib3JkZXJ3aWR0aCIpLF8oInRoaWNrbmVzcyIpLF8oImF1dG9yYW5nZSIsIWMuaXNWYWxpZFJhbmdlKGYucmFuZ2UpKSxfKCJyYW5nZSIpO3ZhciBoPXQuX3N1YnBsb3RzO2lmKGgpZm9yKHZhciBnPWguY2FydGVzaWFuLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3Vic3RyKDAsZS5pbmRleE9mKCJ5IikpPT09aS5uYW1lMmlkKHIpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3Vic3RyKGUuaW5kZXhPZigieSIpLGUubGVuZ3RoKX0pKSxtPW4uc2ltcGxlTWFwKGcsaS5pZDJuYW1lKSx2PTA7djxtLmxlbmd0aDt2Kyspe3ZhciB5PW1bdl07dT1mW3ldfHx7fSxkPWEubmV3Q29udGFpbmVyKHAseSwieWF4aXMiKTt2YXIgeCxiPXRbeV07dS5yYW5nZSYmYi5pc1ZhbGlkUmFuZ2UodS5yYW5nZSkmJih4PSJmaXhlZCIpLCJtYXRjaCIhPT13KCJyYW5nZW1vZGUiLHgpJiZ3KCJyYW5nZSIsYi5yYW5nZS5zbGljZSgpKX1wLl9pbnB1dD1mfX1mdW5jdGlvbiBfKGUsdCl7cmV0dXJuIG4uY29lcmNlKGYscCxvLGUsdCl9ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBuLmNvZXJjZSh1LGQsbCxlLHQpfX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjI2OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjoyODMsIi4vYXR0cmlidXRlcyI6MTc0LCIuL29wcGF4aXNfYXR0cmlidXRlcyI6MTgxfV0sMTc4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4uLy4uL3JlZ2lzdHJ5IiksaT1lKCIuLi8uLi9wbG90cy9wbG90cyIpLG89ZSgiLi4vLi4vbGliIiksbD1vLnN0clRyYW5zbGF0ZSxzPWUoIi4uL2RyYXdpbmciKSxjPWUoIi4uL2NvbG9yIiksdT1lKCIuLi90aXRsZXMiKSxkPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGY9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikscD1lKCIuLi9kcmFnZWxlbWVudCIpLGg9ZSgiLi4vLi4vbGliL3NldGN1cnNvciIpLGc9ZSgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBtKGUsdCxyLG4pe3ZhciBhPW8uZW5zdXJlU2luZ2xlKGUsInJlY3QiLGcuYmdDbGFzc05hbWUsKGZ1bmN0aW9uKGUpe2UuYXR0cih7eDowLHk6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKSxpPW4uYm9yZGVyd2lkdGglMj09MD9uLmJvcmRlcndpZHRoOm4uYm9yZGVyd2lkdGgtMSxjPS1uLl9vZmZzZXRTaGlmdCx1PXMuY3Jpc3BSb3VuZCh0LG4uYm9yZGVyd2lkdGgpO2EuYXR0cih7d2lkdGg6bi5fd2lkdGgraSxoZWlnaHQ6bi5faGVpZ2h0K2ksdHJhbnNmb3JtOmwoYyxjKSxmaWxsOm4uYmdjb2xvcixzdHJva2U6bi5ib3JkZXJjb2xvciwic3Ryb2tlLXdpZHRoIjp1fSl9ZnVuY3Rpb24gdihlLHQscixuKXt2YXIgYT10Ll9mdWxsTGF5b3V0O28uZW5zdXJlU2luZ2xlQnlJZChhLl90b3BkZWZzLCJjbGlwUGF0aCIsbi5fY2xpcElkLChmdW5jdGlvbihlKXtlLmFwcGVuZCgicmVjdCIpLmF0dHIoe3g6MCx5OjB9KX0pKS5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpuLl93aWR0aCxoZWlnaHQ6bi5faGVpZ2h0fSl9ZnVuY3Rpb24geShlLHQscixhKXt2YXIgbCxjPXQuY2FsY2RhdGEsdT1lLnNlbGVjdEFsbCgiZy4iK2cucmFuZ2VQbG90Q2xhc3NOYW1lKS5kYXRhKHIuX3N1YnBsb3RzV2l0aCxvLmlkZW50aXR5KTt1LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbihlKXtyZXR1cm4gZy5yYW5nZVBsb3RDbGFzc05hbWUrIiAiK2V9KSkuY2FsbChzLnNldENsaXBVcmwsYS5fY2xpcElkLHQpLHUub3JkZXIoKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVhY2goKGZ1bmN0aW9uKGUsbyl7dmFyIHM9bi5zZWxlY3QodGhpcyksdT0wPT09byxwPWYuZ2V0RnJvbUlkKHQsZSwieSIpLGg9cC5fbmFtZSxnPWFbaF0sbT17ZGF0YTpbXSxsYXlvdXQ6e3hheGlzOnt0eXBlOnIudHlwZSxkb21haW46WzAsMV0scmFuZ2U6YS5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHdpZHRoOmEuX3dpZHRoLGhlaWdodDphLl9oZWlnaHQsbWFyZ2luOnt0OjAsYjowLGw6MCxyOjB9fSxfY29udGV4dDp0Ll9jb250ZXh0fTtyLnJhbmdlYnJlYWtzJiYobS5sYXlvdXQueGF4aXMucmFuZ2VicmVha3M9ci5yYW5nZWJyZWFrcyksbS5sYXlvdXRbaF09e3R5cGU6cC50eXBlLGRvbWFpbjpbMCwxXSxyYW5nZToibWF0Y2giIT09Zy5yYW5nZW1vZGU/Zy5yYW5nZS5zbGljZSgpOnAucmFuZ2Uuc2xpY2UoKSxjYWxlbmRhcjpwLmNhbGVuZGFyfSxwLnJhbmdlYnJlYWtzJiYobS5sYXlvdXRbaF0ucmFuZ2VicmVha3M9cC5yYW5nZWJyZWFrcyksaS5zdXBwbHlEZWZhdWx0cyhtKTt2YXIgdj1tLl9mdWxsTGF5b3V0LnhheGlzLHk9bS5fZnVsbExheW91dFtoXTt2LmNsZWFyQ2FsYygpLHYuc2V0U2NhbGUoKSx5LmNsZWFyQ2FsYygpLHkuc2V0U2NhbGUoKTt2YXIgeD17aWQ6ZSxwbG90Z3JvdXA6cyx4YXhpczp2LHlheGlzOnksaXNSYW5nZVBsb3Q6ITB9O3U/bD14Oih4Lm1haW5wbG90PSJ4eSIseC5tYWlucGxvdGluZm89bCksZC5yYW5nZVBsb3QodCx4LGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXSxpPWFbMF0udHJhY2U7aS54YXhpcytpLnlheGlzPT09dCYmci5wdXNoKGEpfXJldHVybiByfShjLGUpKX0pKX1mdW5jdGlvbiB4KGUsdCxyLG4sYSl7KG8uZW5zdXJlU2luZ2xlKGUsInJlY3QiLGcubWFza01pbkNsYXNzTmFtZSwoZnVuY3Rpb24oZSl7ZS5hdHRyKHt4OjAseTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KS5jYWxsKGMuZmlsbCxnLm1hc2tDb2xvciksby5lbnN1cmVTaW5nbGUoZSwicmVjdCIsZy5tYXNrTWF4Q2xhc3NOYW1lLChmdW5jdGlvbihlKXtlLmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCkuY2FsbChjLmZpbGwsZy5tYXNrQ29sb3IpLCJtYXRjaCIhPT1hLnJhbmdlbW9kZSkmJihvLmVuc3VyZVNpbmdsZShlLCJyZWN0IixnLm1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lLChmdW5jdGlvbihlKXtlLmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKCJ3aWR0aCIsbi5fd2lkdGgpLmNhbGwoYy5maWxsLGcubWFza09wcEF4aXNDb2xvciksby5lbnN1cmVTaW5nbGUoZSwicmVjdCIsZy5tYXNrTWF4T3BwQXhpc0NsYXNzTmFtZSwoZnVuY3Rpb24oZSl7ZS5hdHRyKHt5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cigid2lkdGgiLG4uX3dpZHRoKS5zdHlsZSgiYm9yZGVyLXRvcCIsZy5tYXNrT3BwQm9yZGVyKS5jYWxsKGMuZmlsbCxnLm1hc2tPcHBBeGlzQ29sb3IpKX1mdW5jdGlvbiBiKGUsdCxyLG4pe3QuX2NvbnRleHQuc3RhdGljUGxvdHx8by5lbnN1cmVTaW5nbGUoZSwicmVjdCIsZy5zbGlkZUJveENsYXNzTmFtZSwoZnVuY3Rpb24oZSl7ZS5hdHRyKHt5OjAsY3Vyc29yOmcuc2xpZGVCb3hDdXJzb3IsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cih7aGVpZ2h0Om4uX2hlaWdodCxmaWxsOmcuc2xpZGVCb3hGaWxsfSl9ZnVuY3Rpb24gXyhlLHQscixuKXt2YXIgYT1vLmVuc3VyZVNpbmdsZShlLCJnIixnLmdyYWJiZXJNaW5DbGFzc05hbWUpLGk9by5lbnN1cmVTaW5nbGUoZSwiZyIsZy5ncmFiYmVyTWF4Q2xhc3NOYW1lKSxsPXt4OjAsd2lkdGg6Zy5oYW5kbGVXaWR0aCxyeDpnLmhhbmRsZVJhZGl1cyxmaWxsOmMuYmFja2dyb3VuZCxzdHJva2U6Yy5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjpnLmhhbmRsZVN0cm9rZVdpZHRoLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0scz17eTpNYXRoLnJvdW5kKG4uX2hlaWdodC80KSxoZWlnaHQ6TWF0aC5yb3VuZChuLl9oZWlnaHQvMil9O28uZW5zdXJlU2luZ2xlKGEsInJlY3QiLGcuaGFuZGxlTWluQ2xhc3NOYW1lLChmdW5jdGlvbihlKXtlLmF0dHIobCl9KSkuYXR0cihzKSxvLmVuc3VyZVNpbmdsZShpLCJyZWN0IixnLmhhbmRsZU1heENsYXNzTmFtZSwoZnVuY3Rpb24oZSl7ZS5hdHRyKGwpfSkpLmF0dHIocyk7dmFyIHU9e3dpZHRoOmcuZ3JhYkFyZWFXaWR0aCx4OjAseTowLGZpbGw6Zy5ncmFiQXJlYUZpbGwsY3Vyc29yOnQuX2NvbnRleHQuc3RhdGljUGxvdD92b2lkIDA6Zy5ncmFiQXJlYUN1cnNvcn07by5lbnN1cmVTaW5nbGUoYSwicmVjdCIsZy5ncmFiQXJlYU1pbkNsYXNzTmFtZSwoZnVuY3Rpb24oZSl7ZS5hdHRyKHUpfSkpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KSxvLmVuc3VyZVNpbmdsZShpLCJyZWN0IixnLmdyYWJBcmVhTWF4Q2xhc3NOYW1lLChmdW5jdGlvbihlKXtlLmF0dHIodSl9KSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpfXQuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5fZnVsbExheW91dCxyPXQuX3JhbmdlU2xpZGVyRGF0YSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBzPXJbaV1bZy5uYW1lXTtzLl9jbGlwSWQ9cy5faWQrIi0iK3QuX3VpZH12YXIgYz10Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIrZy5jb250YWluZXJDbGFzc05hbWUpLmRhdGEociwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuX25hbWV9KSk7Yy5leGl0KCkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVtnLm5hbWVdO3QuX3RvcGRlZnMuc2VsZWN0KCIjIityLl9jbGlwSWQpLnJlbW92ZSgpfSkpLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCYmKGMuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGcuY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGMuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9bi5zZWxlY3QodGhpcykscz1yW2cubmFtZV0sYz10W2YuaWQybmFtZShyLmFuY2hvcildLGQ9c1tmLmlkMm5hbWUoci5hbmNob3IpXTtpZihzLnJhbmdlKXt2YXIgdyxUPW8uc2ltcGxlTWFwKHMucmFuZ2Usci5yMmwpLE09by5zaW1wbGVNYXAoci5yYW5nZSxyLnIybCk7dz1NWzBdPE1bMV0/W01hdGgubWluKFRbMF0sTVswXSksTWF0aC5tYXgoVFsxXSxNWzFdKV06W01hdGgubWF4KFRbMF0sTVswXSksTWF0aC5taW4oVFsxXSxNWzFdKV0scy5yYW5nZT1zLl9pbnB1dC5yYW5nZT1vLnNpbXBsZU1hcCh3LHIubDJyKX1yLmNsZWFuUmFuZ2UoInJhbmdlc2xpZGVyLnJhbmdlIik7dmFyIGs9dC5fc2l6ZSxBPXIuZG9tYWluO3MuX3dpZHRoPWsudyooQVsxXS1BWzBdKTt2YXIgTD1NYXRoLnJvdW5kKGsubCtrLncqQVswXSksUz1NYXRoLnJvdW5kKGsudCtrLmgqKDEtci5fY291bnRlckRvbWFpbk1pbikrKCJib3R0b20iPT09ci5zaWRlP3IuX2RlcHRoOjApK3MuX29mZnNldFNoaWZ0K2cuZXh0cmFQYWQpO2kuYXR0cigidHJhbnNmb3JtIixsKEwsUykpLHMuX3JsPW8uc2ltcGxlTWFwKHMucmFuZ2Usci5yMmwpO3ZhciBEPXMuX3JsWzBdLEM9cy5fcmxbMV0sTz1DLUQ7aWYocy5wMmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUvcy5fd2lkdGgqTytEfSxzLmQycD1mdW5jdGlvbihlKXtyZXR1cm4oZS1EKS9PKnMuX3dpZHRofSxyLnJhbmdlYnJlYWtzKXt2YXIgUD1yLmxvY2F0ZUJyZWFrcyhELEMpO2lmKFAubGVuZ3RoKXt2YXIgSSxSLHo9MDtmb3IoST0wO0k8UC5sZW5ndGg7SSsrKXorPShSPVBbSV0pLm1heC1SLm1pbjt2YXIgTj1zLl93aWR0aC8oQy1ELXopLEY9Wy1OKkRdO2ZvcihJPTA7STxQLmxlbmd0aDtJKyspUj1QW0ldLEYucHVzaChGW0YubGVuZ3RoLTFdLU4qKFIubWF4LVIubWluKSk7Zm9yKHMuZDJwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1GWzBdLHI9MDtyPFAubGVuZ3RoO3IrKyl7dmFyIG49UFtyXTtpZihlPj1uLm1heCl0PUZbcisxXTtlbHNlIGlmKGU8bi5taW4pYnJlYWt9cmV0dXJuIHQrTiplfSxJPTA7STxQLmxlbmd0aDtJKyspKFI9UFtJXSkucG1pbj1zLmQycChSLm1pbiksUi5wbWF4PXMuZDJwKFIubWF4KTtzLnAyZD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9RlswXSxyPTA7cjxQLmxlbmd0aDtyKyspe3ZhciBuPVBbcl07aWYoZT49bi5wbWF4KXQ9RltyKzFdO2Vsc2UgaWYoZTxuLnBtaW4pYnJlYWt9cmV0dXJuKGUtdCkvTn19fWlmKCJtYXRjaCIhPT1kLnJhbmdlbW9kZSl7dmFyIEU9Yy5yMmwoZC5yYW5nZVswXSksaj1jLnIybChkLnJhbmdlWzFdKS1FO3MuZDJwT3BwQXhpcz1mdW5jdGlvbihlKXtyZXR1cm4oZS1FKS9qKnMuX2hlaWdodH19aS5jYWxsKG0sZSxyLHMpLmNhbGwodixlLHIscykuY2FsbCh5LGUscixzKS5jYWxsKHgsZSxyLHMsZCkuY2FsbChiLGUscixzKS5jYWxsKF8sZSxyLHMpLGZ1bmN0aW9uKGUsdCxyLGkpe2lmKHQuX2NvbnRleHQuc3RhdGljUGxvdClyZXR1cm47dmFyIGw9ZS5zZWxlY3QoInJlY3QuIitnLnNsaWRlQm94Q2xhc3NOYW1lKS5ub2RlKCkscz1lLnNlbGVjdCgicmVjdC4iK2cuZ3JhYkFyZWFNaW5DbGFzc05hbWUpLm5vZGUoKSxjPWUuc2VsZWN0KCJyZWN0LiIrZy5ncmFiQXJlYU1heENsYXNzTmFtZSkubm9kZSgpO2Z1bmN0aW9uIHUoKXt2YXIgdT1uLmV2ZW50LGQ9dS50YXJnZXQsZj11LmNsaWVudFh8fHUudG91Y2hlc1swXS5jbGllbnRYLGc9Zi1lLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LG09aS5kMnAoci5fcmxbMF0pLHY9aS5kMnAoci5fcmxbMV0pLHk9cC5jb3ZlclNsaXAoKTtmdW5jdGlvbiB4KGUpe3ZhciB1LHAseCxiPSsoZS5jbGllbnRYfHxlLnRvdWNoZXNbMF0uY2xpZW50WCktZjtzd2l0Y2goZCl7Y2FzZSBsOng9ImV3LXJlc2l6ZSIsdT1tK2IscD12K2I7YnJlYWs7Y2FzZSBzOng9ImNvbC1yZXNpemUiLHU9bStiLHA9djticmVhaztjYXNlIGM6eD0iY29sLXJlc2l6ZSIsdT1tLHA9ditiO2JyZWFrO2RlZmF1bHQ6eD0iZXctcmVzaXplIix1PWcscD1nK2J9aWYocDx1KXt2YXIgXz1wO3A9dSx1PV99aS5fcGl4ZWxNaW49dSxpLl9waXhlbE1heD1wLGgobi5zZWxlY3QoeSkseCksZnVuY3Rpb24oZSx0LHIsbil7ZnVuY3Rpb24gaShlKXtyZXR1cm4gci5sMnIoby5jb25zdHJhaW4oZSxuLl9ybFswXSxuLl9ybFsxXSkpfXZhciBsPWkobi5wMmQobi5fcGl4ZWxNaW4pKSxzPWkobi5wMmQobi5fcGl4ZWxNYXgpKTt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe2EuY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHIuX25hbWUrIi5yYW5nZSIsW2wsc10pfSkpfSgwLHQscixpKX1mdW5jdGlvbiBiKCl7eS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHgpLHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsYiksdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHgpLHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGIpLG8ucmVtb3ZlRWxlbWVudCh5KX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsYikseS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHgpLHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsYil9ZS5vbigibW91c2Vkb3duIix1KSxlLm9uKCJ0b3VjaHN0YXJ0Iix1KX0oaSxlLHIscyksZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBzPWcuaGFuZGxlV2lkdGgvMjtmdW5jdGlvbiBjKGUpe3JldHVybiBvLmNvbnN0cmFpbihlLDAsbi5fd2lkdGgpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIG8uY29uc3RyYWluKGUsMCxuLl9oZWlnaHQpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIG8uY29uc3RyYWluKGUsLXMsbi5fd2lkdGgrcyl9dmFyIGY9YyhuLmQycChyLl9ybFswXSkpLHA9YyhuLmQycChyLl9ybFsxXSkpO2lmKGUuc2VsZWN0KCJyZWN0LiIrZy5zbGlkZUJveENsYXNzTmFtZSkuYXR0cigieCIsZikuYXR0cigid2lkdGgiLHAtZiksZS5zZWxlY3QoInJlY3QuIitnLm1hc2tNaW5DbGFzc05hbWUpLmF0dHIoIndpZHRoIixmKSxlLnNlbGVjdCgicmVjdC4iK2cubWFza01heENsYXNzTmFtZSkuYXR0cigieCIscCkuYXR0cigid2lkdGgiLG4uX3dpZHRoLXApLCJtYXRjaCIhPT1pLnJhbmdlbW9kZSl7dmFyIGg9bi5faGVpZ2h0LXUobi5kMnBPcHBBeGlzKGEuX3JsWzFdKSksbT1uLl9oZWlnaHQtdShuLmQycE9wcEF4aXMoYS5fcmxbMF0pKTtlLnNlbGVjdCgicmVjdC4iK2cubWFza01pbk9wcEF4aXNDbGFzc05hbWUpLmF0dHIoIngiLGYpLmF0dHIoImhlaWdodCIsaCkuYXR0cigid2lkdGgiLHAtZiksZS5zZWxlY3QoInJlY3QuIitnLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKCJ4IixmKS5hdHRyKCJ5IixtKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodC1tKS5hdHRyKCJ3aWR0aCIscC1mKSxlLnNlbGVjdCgicmVjdC4iK2cuc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoInkiLGgpLmF0dHIoImhlaWdodCIsbS1oKX12YXIgdj1NYXRoLnJvdW5kKGQoZi1zKSktLjUseT1NYXRoLnJvdW5kKGQocC1zKSkrLjU7ZS5zZWxlY3QoImcuIitnLmdyYWJiZXJNaW5DbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIsbCh2LC41KSksZS5zZWxlY3QoImcuIitnLmdyYWJiZXJNYXhDbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIsbCh5LC41KSl9KGksMCxyLHMsYyxkKSwiYm90dG9tIj09PXIuc2lkZSYmdS5kcmF3KGUsci5faWQrInRpdGxlIix7cHJvcENvbnRhaW5lcjpyLHByb3BOYW1lOnIuX25hbWUrIi50aXRsZSIscGxhY2Vob2xkZXI6dC5fZGZsdFRpdGxlLngsYXR0cmlidXRlczp7eDpyLl9vZmZzZXQrci5fbGVuZ3RoLzIseTpTK3MuX2hlaWdodCtzLl9vZmZzZXRTaGlmdCsxMCsxLjUqci50aXRsZS5mb250LnNpemUsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX0pKSl9fSx7Ii4uLy4uL2xpYiI6MjMyLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjoyNTIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6MjkzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjI4MywiLi4vLi4vcGxvdHMvcGxvdHMiOjMxNiwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi4vY29sb3IiOjEwMiwiLi4vZHJhZ2VsZW1lbnQiOjEyMSwiLi4vZHJhd2luZyI6MTI0LCIuLi90aXRsZXMiOjIwMCwiLi9jb25zdGFudHMiOjE3NiwiQHBsb3RseS9kMyI6MTF9XSwxNzk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYT1lKCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxpPWUoIi4vY29uc3RhbnRzIiksbz1lKCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLGw9aS5uYW1lO2Z1bmN0aW9uIHMoZSl7dmFyIHQ9ZSYmZVtsXTtyZXR1cm4gdCYmdC52aXNpYmxlfXIuaXNWaXNpYmxlPXMsci5tYWtlRGF0YT1mdW5jdGlvbihlKXt2YXIgdD1uLmxpc3Qoe19mdWxsTGF5b3V0OmV9LCJ4IiwhMCkscj1lLm1hcmdpbixhPVtdO2lmKCFlLl9oYXMoImdsMmQiKSlmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXTtpZihzKG8pKXthLnB1c2gobyk7dmFyIGM9b1tsXTtjLl9pZD1sK28uX2lkLGMuX2hlaWdodD0oZS5oZWlnaHQtci5iLXIudCkqYy50aGlja25lc3MsYy5fb2Zmc2V0U2hpZnQ9TWF0aC5mbG9vcihjLmJvcmRlcndpZHRoLzIpfX1lLl9yYW5nZVNsaWRlckRhdGE9YX0sci5hdXRvTWFyZ2luT3B0cz1mdW5jdGlvbihlLHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsbj10W2xdLHM9dC5faWQuY2hhckF0KDApLGM9MCx1PTA7ImJvdHRvbSI9PT10LnNpZGUmJihjPXQuX2RlcHRoLHQudGl0bGUudGV4dCE9PXIuX2RmbHRUaXRsZVtzXSYmKHU9MS41KnQudGl0bGUuZm9udC5zaXplKzEwK24uX29mZnNldFNoaWZ0LHUrPSh0LnRpdGxlLnRleHQubWF0Y2goYS5CUl9UQUdfQUxMKXx8W10pLmxlbmd0aCp0LnRpdGxlLmZvbnQuc2l6ZSpvKSk7cmV0dXJue3g6MCx5OnQuX2NvdW50ZXJEb21haW5NaW4sbDowLHI6MCx0OjAsYjpuLl9oZWlnaHQrYytNYXRoLm1heChyLm1hcmdpbi5iLHUpLHBhZDppLmV4dHJhUGFkKzIqbi5fb2Zmc2V0U2hpZnR9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IjoyMDcsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6MjU1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjI4MywiLi9jb25zdGFudHMiOjE3Nn1dLDE4MDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4vYXR0cmlidXRlcyIpLGk9ZSgiLi9vcHBheGlzX2F0dHJpYnV0ZXMiKSxvPWUoIi4vaGVscGVycyIpO3QuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNsaWRlciIsc2NoZW1hOntzdWJwbG90czp7eGF4aXM6e3Jhbmdlc2xpZGVyOm4uZXh0ZW5kRmxhdCh7fSxhLHt5YXhpczppfSl9fX0sbGF5b3V0QXR0cmlidXRlczplKCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czplKCIuL2RlZmF1bHRzIiksY2FsY0F1dG9yYW5nZTplKCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzplKCIuL2RyYXciKSxpc1Zpc2libGU6by5pc1Zpc2libGUsbWFrZURhdGE6by5tYWtlRGF0YSxhdXRvTWFyZ2luT3B0czpvLmF1dG9NYXJnaW5PcHRzfX0seyIuLi8uLi9saWIiOjIzMiwiLi9hdHRyaWJ1dGVzIjoxNzQsIi4vY2FsY19hdXRvcmFuZ2UiOjE3NSwiLi9kZWZhdWx0cyI6MTc3LCIuL2RyYXciOjE3OCwiLi9oZWxwZXJzIjoxNzksIi4vb3BwYXhpc19hdHRyaWJ1dGVzIjoxODF9XSwxODE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtfaXNTdWJwbG90T2JqOiEwLHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImZpeGVkIiwibWF0Y2giXSxkZmx0OiJtYXRjaCIsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9fSx7fV0sMTgyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxhPWUoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKS5saW5lLGk9ZSgiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPWUoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O2UoIi4uLy4uL2NvbnN0YW50cy9heGlzX3BsYWNlYWJsZV9vYmplY3RzIik7dC5leHBvcnRzPWwoInNoYXBlIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJyZWN0IiwicGF0aCIsImxpbmUiXSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmVsb3ciLCJhYm92ZSJdLGRmbHQ6ImFib3ZlIixlZGl0VHlwZToiYXJyYXlkcmF3In0seHJlZjpvKHt9LG4ueHJlZix7fSkseHNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzY2FsZWQiLCJwaXhlbCJdLGRmbHQ6InNjYWxlZCIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4MTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5cmVmOm8oe30sbi55cmVmLHt9KSx5c2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNjYWxlZCIsInBpeGVsIl0sZGZsdDoic2NhbGVkIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5YW5jaG9yOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHkxOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHBhdGg6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGxpbmU6e2NvbG9yOm8oe30sYS5jb2xvcix7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx3aWR0aDpvKHt9LGEud2lkdGgse2VkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9KSxkYXNoOm8oe30saSx7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZmlsbHJ1bGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImV2ZW5vZGQiLCJub256ZXJvIl0sZGZsdDoiZXZlbm9kZCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRhYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGVkaXRUeXBlOiJhcnJheWRyYXcifSl9LHsiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiOjIwOCwiLi4vLi4vbGliL2V4dGVuZCI6MjI2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyNjgsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjM1OCwiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyI6ODUsIi4uL2RyYXdpbmcvYXR0cmlidXRlcyI6MTIzfV0sMTgzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPWUoIi4vY29uc3RhbnRzIiksbz1lKCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBsKGUpe3JldHVybiBjKGUubGluZS53aWR0aCxlLnhzaXplbW9kZSxlLngwLGUueDEsZS5wYXRoLCExKX1mdW5jdGlvbiBzKGUpe3JldHVybiBjKGUubGluZS53aWR0aCxlLnlzaXplbW9kZSxlLnkwLGUueTEsZS5wYXRoLCEwKX1mdW5jdGlvbiBjKGUsdCxyLGEsbCxzKXt2YXIgYz1lLzIsdT1zO2lmKCJwaXhlbCI9PT10KXt2YXIgZD1sP28uZXh0cmFjdFBhdGhDb29yZHMobCxzP2kucGFyYW1Jc1k6aS5wYXJhbUlzWCk6W3IsYV0sZj1uLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxkKSxwPW4uYWdnTnVtcyhNYXRoLm1pbixudWxsLGQpLGg9cDwwP01hdGguYWJzKHApK2M6YyxnPWY+MD9mK2M6YztyZXR1cm57cHBhZDpjLHBwYWRwbHVzOnU/aDpnLHBwYWRtaW51czp1P2c6aH19cmV0dXJue3BwYWQ6Y319ZnVuY3Rpb24gdShlLHQscixuLGEpe3ZhciBsPSJjYXRlZ29yeSI9PT1lLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZT9lLnIyYzplLmQyYztpZih2b2lkIDAhPT10KXJldHVybltsKHQpLGwocildO2lmKG4pe3ZhciBzLGMsdSxkLGY9MS8wLHA9LTEvMCxoPW4ubWF0Y2goaS5zZWdtZW50UkUpO2ZvcigiZGF0ZSI9PT1lLnR5cGUmJihsPW8uZGVjb2RlRGF0ZShsKSkscz0wO3M8aC5sZW5ndGg7cysrKXZvaWQgMCE9PShjPWFbaFtzXS5jaGFyQXQoMCldLmRyYXduKSYmKCEodT1oW3NdLnN1YnN0cigxKS5tYXRjaChpLnBhcmFtUkUpKXx8dS5sZW5ndGg8Y3x8KChkPWwodVtjXSkpPGYmJihmPWQpLGQ+cCYmKHA9ZCkpKTtyZXR1cm4gcD49Zj9bZixwXTp2b2lkIDB9fXQuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9bi5maWx0ZXJWaXNpYmxlKHQuc2hhcGVzKTtpZihyLmxlbmd0aCYmZS5fZnVsbERhdGEubGVuZ3RoKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYyxkLGY9cltvXTtmLl9leHRyZW1lcz17fTt2YXIgcD1hLmdldFJlZlR5cGUoZi54cmVmKSxoPWEuZ2V0UmVmVHlwZShmLnlyZWYpO2lmKCJwYXBlciIhPT1mLnhyZWYmJiJkb21haW4iIT09cCl7dmFyIGc9InBpeGVsIj09PWYueHNpemVtb2RlP2YueGFuY2hvcjpmLngwLG09InBpeGVsIj09PWYueHNpemVtb2RlP2YueGFuY2hvcjpmLngxOyhkPXUoYz1hLmdldEZyb21JZChlLGYueHJlZiksZyxtLGYucGF0aCxpLnBhcmFtSXNYKSkmJihmLl9leHRyZW1lc1tjLl9pZF09YS5maW5kRXh0cmVtZXMoYyxkLGwoZikpKX1pZigicGFwZXIiIT09Zi55cmVmJiYiZG9tYWluIiE9PWgpe3ZhciB2PSJwaXhlbCI9PT1mLnlzaXplbW9kZT9mLnlhbmNob3I6Zi55MCx5PSJwaXhlbCI9PT1mLnlzaXplbW9kZT9mLnlhbmNob3I6Zi55MTsoZD11KGM9YS5nZXRGcm9tSWQoZSxmLnlyZWYpLHYseSxmLnBhdGgsaS5wYXJhbUlzWSkpJiYoZi5fZXh0cmVtZXNbYy5faWRdPWEuZmluZEV4dHJlbWVzKGMsZCxzKGYpKSl9fX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjoyNzksIi4vY29uc3RhbnRzIjoxODQsIi4vaGVscGVycyI6MTkzfV0sMTg0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17c2VnbWVudFJFOi9bTUxIVlFDVFNaXVteTUxIVlFDVFNaXSovZyxwYXJhbVJFOi9bXlxzLF0rL2cscGFyYW1Jc1g6e006ezA6ITAsZHJhd246MH0sTDp7MDohMCxkcmF3bjowfSxIOnswOiEwLGRyYXduOjB9LFY6e30sUTp7MDohMCwyOiEwLGRyYXduOjJ9LEM6ezA6ITAsMjohMCw0OiEwLGRyYXduOjR9LFQ6ezA6ITAsZHJhd246MH0sUzp7MDohMCwyOiEwLGRyYXduOjJ9LFo6e319LHBhcmFtSXNZOntNOnsxOiEwLGRyYXduOjF9LEw6ezE6ITAsZHJhd246MX0sSDp7fSxWOnswOiEwLGRyYXduOjB9LFE6ezE6ITAsMzohMCxkcmF3bjozfSxDOnsxOiEwLDM6ITAsNTohMCxkcmF3bjo1fSxUOnsxOiEwLGRyYXduOjF9LFM6ezE6ITAsMzohMCxkcmF3bjo1fSxaOnt9fSxudW1QYXJhbXM6e006MixMOjIsSDoxLFY6MSxROjQsQzo2LFQ6MixTOjQsWjowfX19LHt9XSwxODU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9ZSgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz1lKCIuL2F0dHJpYnV0ZXMiKSxsPWUoIi4vaGVscGVycyIpO2Z1bmN0aW9uIHMoZSx0LHIpe2Z1bmN0aW9uIGkocixhKXtyZXR1cm4gbi5jb2VyY2UoZSx0LG8scixhKX1pZihpKCJ2aXNpYmxlIikpe3ZhciBzPWkoInBhdGgiKSxjPWkoInR5cGUiLHM/InBhdGgiOiJyZWN0Iik7InBhdGgiIT09dC50eXBlJiZkZWxldGUgdC5wYXRoLGkoImVkaXRhYmxlIiksaSgibGF5ZXIiKSxpKCJvcGFjaXR5IiksaSgiZmlsbGNvbG9yIiksaSgiZmlsbHJ1bGUiKSxpKCJsaW5lLndpZHRoIikmJihpKCJsaW5lLmNvbG9yIiksaSgibGluZS5kYXNoIikpO2Zvcih2YXIgdT1pKCJ4c2l6ZW1vZGUiKSxkPWkoInlzaXplbW9kZSIpLGY9WyJ4IiwieSJdLHA9MDtwPDI7cCsrKXt2YXIgaCxnLG0sdj1mW3BdLHk9disiYW5jaG9yIix4PSJ4Ij09PXY/dTpkLGI9e19mdWxsTGF5b3V0OnJ9LF89YS5jb2VyY2VSZWYoZSx0LGIsdix2b2lkIDAsInBhcGVyIik7aWYoInJhbmdlIj09PWEuZ2V0UmVmVHlwZShfKT8oKGg9YS5nZXRGcm9tSWQoYixfKSkuX3NoYXBlSW5kaWNlcy5wdXNoKHQuX2luZGV4KSxtPWwucmFuZ2VUb1NoYXBlUG9zaXRpb24oaCksZz1sLnNoYXBlUG9zaXRpb25Ub1JhbmdlKGgpKTpnPW09bi5pZGVudGl0eSwicGF0aCIhPT1jKXt2YXIgdz12KyIwIixUPXYrIjEiLE09ZVt3XSxrPWVbVF07ZVt3XT1nKGVbd10sITApLGVbVF09ZyhlW1RdLCEwKSwicGl4ZWwiPT09eD8oaSh3LDApLGkoVCwxMCkpOihhLmNvZXJjZVBvc2l0aW9uKHQsYixpLF8sdywuMjUpLGEuY29lcmNlUG9zaXRpb24odCxiLGksXyxULC43NSkpLHRbd109bSh0W3ddKSx0W1RdPW0odFtUXSksZVt3XT1NLGVbVF09a31pZigicGl4ZWwiPT09eCl7dmFyIEE9ZVt5XTtlW3ldPWcoZVt5XSwhMCksYS5jb2VyY2VQb3NpdGlvbih0LGIsaSxfLHksLjI1KSx0W3ldPW0odFt5XSksZVt5XT1BfX0icGF0aCI9PT1jP2koInBhdGgiKTpuLm5vbmVPckFsbChlLHQsWyJ4MCIsIngxIiwieTAiLCJ5MSJdKX19dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aShlLHQse25hbWU6InNoYXBlcyIsaGFuZGxlSXRlbURlZmF1bHRzOnN9KX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6Mjc0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Mjc5LCIuL2F0dHJpYnV0ZXMiOjE4MiwiLi9oZWxwZXJzIjoxOTN9XSwxODY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcmVnaXN0cnkiKSxhPWUoIi4uLy4uL2xpYiIpLGk9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPWUoIi4vZHJhd19uZXdzaGFwZS9oZWxwZXJzIikucmVhZFBhdGhzLGw9ZSgiLi9kcmF3X25ld3NoYXBlL2Rpc3BsYXlfb3V0bGluZXMiKSxzPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSIpLmNsZWFyT3V0bGluZUNvbnRyb2xsZXJzLGM9ZSgiLi4vY29sb3IiKSx1PWUoIi4uL2RyYXdpbmciKSxkPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixmPWUoIi4uL2RyYWdlbGVtZW50IikscD1lKCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksaD1lKCIuL2NvbnN0YW50cyIpLGc9ZSgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gbShlKXt2YXIgdD1lLl9mdWxsTGF5b3V0O2Zvcih2YXIgciBpbiB0Ll9zaGFwZVVwcGVyTGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksdC5fc2hhcGVMb3dlckxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLHQuX3Bsb3RzKXt2YXIgbj10Ll9wbG90c1tyXS5zaGFwZWxheWVyO24mJm4uc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCl9Zm9yKHZhciBhPTA7YTx0LnNoYXBlcy5sZW5ndGg7YSsrKXQuc2hhcGVzW2FdLnZpc2libGUmJngoZSxhKX1mdW5jdGlvbiB2KGUpe3JldHVybiEhZS5fZnVsbExheW91dC5fZHJhd2luZ31mdW5jdGlvbiB5KGUpe3JldHVybiFlLl9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb259ZnVuY3Rpb24geChlLHQpe2UuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2LnNlbGVjdEFsbCgnLnNoYXBlbGF5ZXIgW2RhdGEtaW5kZXg9IicrdCsnIl0nKS5yZW1vdmUoKTt2YXIgcj1nLm1ha2VPcHRpb25zQW5kUGxvdGluZm8oZSx0KSxzPXIub3B0aW9ucyx4PXIucGxvdGluZm87aWYocy5faW5wdXQmJiExIT09cy52aXNpYmxlKWlmKCJiZWxvdyIhPT1zLmxheWVyKU0oZS5fZnVsbExheW91dC5fc2hhcGVVcHBlckxheWVyKTtlbHNlIGlmKCJwYXBlciI9PT1zLnhyZWZ8fCJwYXBlciI9PT1zLnlyZWYpTShlLl9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpO2Vsc2V7aWYoeC5faGFkUGxvdGluZm8pTSgoeC5tYWlucGxvdGluZm98fHgpLnNoYXBlbGF5ZXIpO2Vsc2UgTShlLl9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpfWZ1bmN0aW9uIE0ocil7dmFyIE09XyhlLHMpLGs9eyJkYXRhLWluZGV4Ijp0LCJmaWxsLXJ1bGUiOnMuZmlsbHJ1bGUsZDpNfSxBPXMub3BhY2l0eSxMPXMuZmlsbGNvbG9yLFM9cy5saW5lLndpZHRoP3MubGluZS5jb2xvcjoicmdiYSgwLDAsMCwwKSIsRD1zLmxpbmUud2lkdGgsQz1zLmxpbmUuZGFzaDtEfHwhMCE9PXMuZWRpdGFibGV8fChEPTUsQz0ic29saWQiKTt2YXIgTz0iWiIhPT1NW00ubGVuZ3RoLTFdLFA9eShlKSYmcy5lZGl0YWJsZSYmZS5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD09PXQ7UCYmKEw9Tz8icmdiYSgwLDAsMCwwKSI6ZS5fZnVsbExheW91dC5hY3RpdmVzaGFwZS5maWxsY29sb3IsQT1lLl9mdWxsTGF5b3V0LmFjdGl2ZXNoYXBlLm9wYWNpdHkpO3ZhciBJLFI9ci5hcHBlbmQoInBhdGgiKS5hdHRyKGspLnN0eWxlKCJvcGFjaXR5IixBKS5jYWxsKGMuc3Ryb2tlLFMpLmNhbGwoYy5maWxsLEwpLmNhbGwodS5kYXNoTGluZSxDLEQpO2lmKGIoUixlLHMpLChQfHxlLl9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb24pJiYoST1kKGUubGF5b3V0LCJzaGFwZXMiLHMpKSxQKXtSLnN0eWxlKHtjdXJzb3I6Im1vdmUifSk7dmFyIHo9e2VsZW1lbnQ6Ui5ub2RlKCkscGxvdGluZm86eCxnZDplLGVkaXRIZWxwZXJzOkksaXNBY3RpdmVTaGFwZTohMH0sTj1vKE0sZSk7bChOLFIseil9ZWxzZSBlLl9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb24/ZnVuY3Rpb24oZSx0LHIsbyxsLHMpe3ZhciBjLGQsbSx5LHgsVCxNLGssQSxMLFMsRCxDLE8sUCxJLFI9InBpeGVsIj09PXIueHNpemVtb2RlLHo9InBpeGVsIj09PXIueXNpemVtb2RlLE49ImxpbmUiPT09ci50eXBlLEY9InBhdGgiPT09ci50eXBlLEU9cy5tb2RpZnlJdGVtLGo9aS5nZXRGcm9tSWQoZSxyLnhyZWYpLEg9aS5nZXRSZWZUeXBlKHIueHJlZiksQj1pLmdldEZyb21JZChlLHIueXJlZiksWT1pLmdldFJlZlR5cGUoci55cmVmKSxWPWcuZ2V0RGF0YVRvUGl4ZWwoZSxqLCExLEgpLFU9Zy5nZXREYXRhVG9QaXhlbChlLEIsITAsWSkscT1nLmdldFBpeGVsVG9EYXRhKGUsaiwhMSxIKSxHPWcuZ2V0UGl4ZWxUb0RhdGEoZSxCLCEwLFkpLFo9Tj9mdW5jdGlvbigpe3ZhciBlPU1hdGgubWF4KHIubGluZS53aWR0aCwxMCksbj1sLmFwcGVuZCgiZyIpLmF0dHIoImRhdGEtaW5kZXgiLG8pO24uYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsdC5hdHRyKCJkIikpLnN0eWxlKHtjdXJzb3I6Im1vdmUiLCJzdHJva2Utd2lkdGgiOmUsInN0cm9rZS1vcGFjaXR5IjoiMCJ9KTt2YXIgYT17ImZpbGwtb3BhY2l0eSI6IjAifSxpPU1hdGgubWF4KGUvMiwxMCk7cmV0dXJuIG4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHsiZGF0YS1saW5lLXBvaW50Ijoic3RhcnQtcG9pbnQiLGN4OlI/VihyLnhhbmNob3IpK3IueDA6VihyLngwKSxjeTp6P1Uoci55YW5jaG9yKS1yLnkwOlUoci55MCkscjppfSkuc3R5bGUoYSkuY2xhc3NlZCgiY3Vyc29yLWdyYWIiLCEwKSxuLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7ImRhdGEtbGluZS1wb2ludCI6ImVuZC1wb2ludCIsY3g6Uj9WKHIueGFuY2hvcikrci54MTpWKHIueDEpLGN5Ono/VShyLnlhbmNob3IpLXIueTE6VShyLnkxKSxyOml9KS5zdHlsZShhKS5jbGFzc2VkKCJjdXJzb3ItZ3JhYiIsITApLG59KCk6dCxXPXtlbGVtZW50Oloubm9kZSgpLGdkOmUscHJlcEZuOmZ1bmN0aW9uKG4pe2lmKHYoZSkpcmV0dXJuO1ImJih4PVYoci54YW5jaG9yKSk7eiYmKFQ9VShyLnlhbmNob3IpKTsicGF0aCI9PT1yLnR5cGU/UD1yLnBhdGg6KGM9Uj9yLngwOlYoci54MCksZD16P3IueTA6VShyLnkwKSxtPVI/ci54MTpWKHIueDEpLHk9ej9yLnkxOlUoci55MSkpO2M8bT8oQT1jLEM9IngwIixMPW0sTz0ieDEiKTooQT1tLEM9IngxIixMPWMsTz0ieDAiKTsheiYmZDx5fHx6JiZkPnk/KE09ZCxTPSJ5MCIsaz15LEQ9InkxIik6KE09eSxTPSJ5MSIsaz1kLEQ9InkwIik7WChuKSxLKGwsciksZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQueHJlZixhPXQueXJlZixvPWkuZ2V0RnJvbUlkKHIsbiksbD1pLmdldEZyb21JZChyLGEpLHM9IiI7InBhcGVyIj09PW58fG8uYXV0b3JhbmdlfHwocys9bik7InBhcGVyIj09PWF8fGwuYXV0b3JhbmdlfHwocys9YSk7dS5zZXRDbGlwVXJsKGUscz8iY2xpcCIrci5fZnVsbExheW91dC5fdWlkK3M6bnVsbCxyKX0odCxyLGUpLFcubW92ZUZuPSJtb3ZlIj09PUk/SjpRLFcuYWx0S2V5PW4uYWx0S2V5fSxkb25lRm46ZnVuY3Rpb24oKXtpZih2KGUpKXJldHVybjtwKHQpLCQobCksYih0LGUsciksbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUscy5nZXRVcGRhdGVPYmooKSl9LGNsaWNrRm46ZnVuY3Rpb24oKXtpZih2KGUpKXJldHVybjskKGwpfX07ZnVuY3Rpb24gWChyKXtpZih2KGUpKUk9bnVsbDtlbHNlIGlmKE4pST0icGF0aCI9PT1yLnRhcmdldC50YWdOYW1lPyJtb3ZlIjoic3RhcnQtcG9pbnQiPT09ci50YXJnZXQuYXR0cmlidXRlc1siZGF0YS1saW5lLXBvaW50Il0udmFsdWU/InJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50IjoicmVzaXplLW92ZXItZW5kLXBvaW50IjtlbHNle3ZhciBuPVcuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPW4ucmlnaHQtbi5sZWZ0LGk9bi5ib3R0b20tbi50b3Asbz1yLmNsaWVudFgtbi5sZWZ0LGw9ci5jbGllbnRZLW4udG9wLHM9IUYmJmE+MTAmJmk+MTAmJiFyLnNoaWZ0S2V5P2YuZ2V0Q3Vyc29yKG8vYSwxLWwvaSk6Im1vdmUiO3AodCxzKSxJPXMuc3BsaXQoIi0iKVswXX19ZnVuY3Rpb24gSihuLGEpe2lmKCJwYXRoIj09PXIudHlwZSl7dmFyIGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG89aSxzPWk7Uj9FKCJ4YW5jaG9yIixyLnhhbmNob3I9cSh4K24pKToobz1mdW5jdGlvbihlKXtyZXR1cm4gcShWKGUpK24pfSxqJiYiZGF0ZSI9PT1qLnR5cGUmJihvPWcuZW5jb2RlRGF0ZShvKSkpLHo/RSgieWFuY2hvciIsci55YW5jaG9yPUcoVCthKSk6KHM9ZnVuY3Rpb24oZSl7cmV0dXJuIEcoVShlKSthKX0sQiYmImRhdGUiPT09Qi50eXBlJiYocz1nLmVuY29kZURhdGUocykpKSxFKCJwYXRoIixyLnBhdGg9dyhQLG8scykpfWVsc2UgUj9FKCJ4YW5jaG9yIixyLnhhbmNob3I9cSh4K24pKTooRSgieDAiLHIueDA9cShjK24pKSxFKCJ4MSIsci54MT1xKG0rbikpKSx6P0UoInlhbmNob3IiLHIueWFuY2hvcj1HKFQrYSkpOihFKCJ5MCIsci55MD1HKGQrYSkpLEUoInkxIixyLnkxPUcoeSthKSkpO3QuYXR0cigiZCIsXyhlLHIpKSxLKGwscil9ZnVuY3Rpb24gUShuLGEpe2lmKEYpe3ZhciBpPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxvPWkscz1pO1I/RSgieGFuY2hvciIsci54YW5jaG9yPXEoeCtuKSk6KG89ZnVuY3Rpb24oZSl7cmV0dXJuIHEoVihlKStuKX0saiYmImRhdGUiPT09ai50eXBlJiYobz1nLmVuY29kZURhdGUobykpKSx6P0UoInlhbmNob3IiLHIueWFuY2hvcj1HKFQrYSkpOihzPWZ1bmN0aW9uKGUpe3JldHVybiBHKFUoZSkrYSl9LEImJiJkYXRlIj09PUIudHlwZSYmKHM9Zy5lbmNvZGVEYXRlKHMpKSksRSgicGF0aCIsci5wYXRoPXcoUCxvLHMpKX1lbHNlIGlmKE4pe2lmKCJyZXNpemUtb3Zlci1zdGFydC1wb2ludCI9PT1JKXt2YXIgdT1jK24sZj16P2QtYTpkK2E7RSgieDAiLHIueDA9Uj91OnEodSkpLEUoInkwIixyLnkwPXo/ZjpHKGYpKX1lbHNlIGlmKCJyZXNpemUtb3Zlci1lbmQtcG9pbnQiPT09SSl7dmFyIHA9bStuLGg9ej95LWE6eSthO0UoIngxIixyLngxPVI/cDpxKHApKSxFKCJ5MSIsci55MT16P2g6RyhoKSl9fWVsc2V7dmFyIHY9ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1JLmluZGV4T2YoZSl9LGI9digibiIpLEg9digicyIpLFk9digidyIpLFo9digiZSIpLFc9Yj9NK2E6TSxYPUg/aythOmssSj1ZP0ErbjpBLFE9Wj9MK246TDt6JiYoYiYmKFc9TS1hKSxIJiYoWD1rLWEpKSwoIXomJlgtVz4xMHx8eiYmVy1YPjEwKSYmKEUoUyxyW1NdPXo/VzpHKFcpKSxFKEQscltEXT16P1g6RyhYKSkpLFEtSj4xMCYmKEUoQyxyW0NdPVI/SjpxKEopKSxFKE8scltPXT1SP1E6cShRKSkpfXQuYXR0cigiZCIsXyhlLHIpKSxLKGwscil9ZnVuY3Rpb24gSyhlLHQpeyhSfHx6KSYmZnVuY3Rpb24oKXt2YXIgcj0icGF0aCIhPT10LnR5cGUsbj1lLnNlbGVjdEFsbCgiLnZpc3VhbC1jdWUiKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2ZpbGw6IiNmZmYiLCJmaWxsLXJ1bGUiOiJldmVub2RkIixzdHJva2U6IiMwMDAiLCJzdHJva2Utd2lkdGgiOjF9KS5jbGFzc2VkKCJ2aXN1YWwtY3VlIiwhMCk7dmFyIGk9VihSP3QueGFuY2hvcjphLm1pZFJhbmdlKHI/W3QueDAsdC54MV06Zy5leHRyYWN0UGF0aENvb3Jkcyh0LnBhdGgsaC5wYXJhbUlzWCkpKSxvPVUoej90LnlhbmNob3I6YS5taWRSYW5nZShyP1t0LnkwLHQueTFdOmcuZXh0cmFjdFBhdGhDb29yZHModC5wYXRoLGgucGFyYW1Jc1kpKSk7aWYoaT1nLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZyhpLDEpLG89Zy5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmcobywxKSxSJiZ6KXt2YXIgbD0iTSIrKGktMS0xKSsiLCIrKG8tMS0xKSsiaC04djJoOCB2OGgydi04IGg4di0yaC04IHYtOGgtMiBaIjtuLmF0dHIoImQiLGwpfWVsc2UgaWYoUil7dmFyIHM9Ik0iKyhpLTEtMSkrIiwiKyhvLTktMSkrInYxOCBoMiB2LTE4IFoiO24uYXR0cigiZCIscyl9ZWxzZXt2YXIgYz0iTSIrKGktOS0xKSsiLCIrKG8tMS0xKSsiaDE4IHYyIGgtMTggWiI7bi5hdHRyKCJkIixjKX19KCl9ZnVuY3Rpb24gJChlKXtlLnNlbGVjdEFsbCgiLnZpc3VhbC1jdWUiKS5yZW1vdmUoKX1mLmluaXQoVyksWi5ub2RlKCkub25tb3VzZW1vdmU9WH0oZSxSLHMsdCxyLEkpOiEwPT09cy5lZGl0YWJsZSYmUi5zdHlsZSgicG9pbnRlci1ldmVudHMiLE98fGMub3BhY2l0eShMKSpBPD0uNT8ic3Ryb2tlIjoiYWxsIik7Ui5ub2RlKCkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCF5KGUpKXJldHVybjt2YXIgcj0rdC5ub2RlKCkuZ2V0QXR0cmlidXRlKCJkYXRhLWluZGV4Iik7aWYocj49MCl7aWYocj09PWUuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgpcmV0dXJuIHZvaWQgVChlKTtlLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4PXIsZS5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlPVQsbShlKX19KGUsUil9KSl9fWZ1bmN0aW9uIGIoZSx0LHIpe3ZhciBuPShyLnhyZWYrci55cmVmKS5yZXBsYWNlKC9wYXBlci9nLCIiKS5yZXBsYWNlKC9beHl6XVsxLTldKiAqZG9tYWluL2csIiIpO3Uuc2V0Q2xpcFVybChlLG4/ImNsaXAiK3QuX2Z1bGxMYXlvdXQuX3VpZCtuOm51bGwsdCl9ZnVuY3Rpb24gXyhlLHQpe3ZhciByLG4sbyxsLHMsYyx1LGQsZj10LnR5cGUscD1pLmdldFJlZlR5cGUodC54cmVmKSxtPWkuZ2V0UmVmVHlwZSh0LnlyZWYpLHY9aS5nZXRGcm9tSWQoZSx0LnhyZWYpLHk9aS5nZXRGcm9tSWQoZSx0LnlyZWYpLHg9ZS5fZnVsbExheW91dC5fc2l6ZTtpZih2PyJkb21haW4iPT09cD9uPWZ1bmN0aW9uKGUpe3JldHVybiB2Ll9vZmZzZXQrdi5fbGVuZ3RoKmV9OihyPWcuc2hhcGVQb3NpdGlvblRvUmFuZ2Uodiksbj1mdW5jdGlvbihlKXtyZXR1cm4gdi5fb2Zmc2V0K3YucjJwKHIoZSwhMCkpfSk6bj1mdW5jdGlvbihlKXtyZXR1cm4geC5sK3gudyplfSx5PyJkb21haW4iPT09bT9sPWZ1bmN0aW9uKGUpe3JldHVybiB5Ll9vZmZzZXQreS5fbGVuZ3RoKigxLWUpfToobz1nLnNoYXBlUG9zaXRpb25Ub1JhbmdlKHkpLGw9ZnVuY3Rpb24oZSl7cmV0dXJuIHkuX29mZnNldCt5LnIycChvKGUsITApKX0pOmw9ZnVuY3Rpb24oZSl7cmV0dXJuIHgudCt4LmgqKDEtZSl9LCJwYXRoIj09PWYpcmV0dXJuIHYmJiJkYXRlIj09PXYudHlwZSYmKG49Zy5kZWNvZGVEYXRlKG4pKSx5JiYiZGF0ZSI9PT15LnR5cGUmJihsPWcuZGVjb2RlRGF0ZShsKSksZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUucGF0aCxpPWUueHNpemVtb2RlLG89ZS55c2l6ZW1vZGUsbD1lLnhhbmNob3Iscz1lLnlhbmNob3I7cmV0dXJuIG4ucmVwbGFjZShoLnNlZ21lbnRSRSwoZnVuY3Rpb24oZSl7dmFyIG49MCxjPWUuY2hhckF0KDApLHU9aC5wYXJhbUlzWFtjXSxkPWgucGFyYW1Jc1lbY10sZj1oLm51bVBhcmFtc1tjXSxwPWUuc3Vic3RyKDEpLnJlcGxhY2UoaC5wYXJhbVJFLChmdW5jdGlvbihlKXtyZXR1cm4gdVtuXT9lPSJwaXhlbCI9PT1pP3QobCkrTnVtYmVyKGUpOnQoZSk6ZFtuXSYmKGU9InBpeGVsIj09PW8/cihzKS1OdW1iZXIoZSk6cihlKSksKytuPmYmJihlPSJYIiksZX0pKTtyZXR1cm4gbj5mJiYocD1wLnJlcGxhY2UoL1tccyxdKlguKi8sIiIpLGEubG9nKCJJZ25vcmluZyBleHRyYSBwYXJhbXMgaW4gc2VnbWVudCAiK2UpKSxjK3B9KSl9KHQsbixsKTtpZigicGl4ZWwiPT09dC54c2l6ZW1vZGUpe3ZhciBiPW4odC54YW5jaG9yKTtzPWIrdC54MCxjPWIrdC54MX1lbHNlIHM9bih0LngwKSxjPW4odC54MSk7aWYoInBpeGVsIj09PXQueXNpemVtb2RlKXt2YXIgXz1sKHQueWFuY2hvcik7dT1fLXQueTAsZD1fLXQueTF9ZWxzZSB1PWwodC55MCksZD1sKHQueTEpO2lmKCJsaW5lIj09PWYpcmV0dXJuIk0iK3MrIiwiK3UrIkwiK2MrIiwiK2Q7aWYoInJlY3QiPT09ZilyZXR1cm4iTSIrcysiLCIrdSsiSCIrYysiViIrZCsiSCIrcysiWiI7dmFyIHc9KHMrYykvMixUPSh1K2QpLzIsTT1NYXRoLmFicyh3LXMpLGs9TWF0aC5hYnMoVC11KSxBPSJBIitNKyIsIitrLEw9dytNKyIsIitUO3JldHVybiJNIitMK0ErIiAwIDEsMSAiKyh3KyIsIisoVC1rKSkrQSsiIDAgMCwxICIrTCsiWiJ9ZnVuY3Rpb24gdyhlLHQscil7cmV0dXJuIGUucmVwbGFjZShoLnNlZ21lbnRSRSwoZnVuY3Rpb24oZSl7dmFyIG49MCxhPWUuY2hhckF0KDApLGk9aC5wYXJhbUlzWFthXSxvPWgucGFyYW1Jc1lbYV0sbD1oLm51bVBhcmFtc1thXTtyZXR1cm4gYStlLnN1YnN0cigxKS5yZXBsYWNlKGgucGFyYW1SRSwoZnVuY3Rpb24oZSl7cmV0dXJuIG4+PWx8fChpW25dP2U9dChlKTpvW25dJiYoZT1yKGUpKSxuKyspLGV9KSl9KSl9ZnVuY3Rpb24gVChlKXt5KGUpJiYoZS5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD49MCYmKHMoZSksZGVsZXRlIGUuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgsbShlKSkpfXQuZXhwb3J0cz17ZHJhdzptLGRyYXdPbmU6eCxlcmFzZUFjdGl2ZVNoYXBlOmZ1bmN0aW9uKGUpe2lmKCF5KGUpKXJldHVybjtzKGUpO3ZhciB0PWUuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgscj0oZS5sYXlvdXR8fHt9KS5zaGFwZXN8fFtdO2lmKHQ8ci5sZW5ndGgpe2Zvcih2YXIgYT1bXSxpPTA7aTxyLmxlbmd0aDtpKyspaSE9PXQmJmEucHVzaChyW2ldKTtkZWxldGUgZS5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleCxuLmNhbGwoIl9ndWlSZWxheW91dCIsZSx7c2hhcGVzOmF9KX19fX0seyIuLi8uLi9saWIiOjIzMiwiLi4vLi4vbGliL3NldGN1cnNvciI6MjUyLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyNjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjoyNzksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSI6MjkwLCIuLi8uLi9yZWdpc3RyeSI6MzE4LCIuLi9jb2xvciI6MTAyLCIuLi9kcmFnZWxlbWVudCI6MTIxLCIuLi9kcmF3aW5nIjoxMjQsIi4vY29uc3RhbnRzIjoxODQsIi4vZHJhd19uZXdzaGFwZS9kaXNwbGF5X291dGxpbmVzIjoxOTAsIi4vZHJhd19uZXdzaGFwZS9oZWxwZXJzIjoxOTEsIi4vaGVscGVycyI6MTkzfV0sMTg3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsYT1lKCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDt0LmV4cG9ydHM9e25ld3NoYXBlOntsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJub25lIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo0LGVkaXRUeXBlOiJub25lIn0sZGFzaDphKHt9LG4se2RmbHQ6InNvbGlkIixlZGl0VHlwZToibm9uZSJ9KSxlZGl0VHlwZToibm9uZSJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJub25lIn0sZmlsbHJ1bGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImV2ZW5vZGQiLCJub256ZXJvIl0sZGZsdDoiZXZlbm9kZCIsZWRpdFR5cGU6Im5vbmUifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToibm9uZSJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJub25lIn0sZHJhd2RpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3J0aG8iLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJkaWFnb25hbCJdLGRmbHQ6ImRpYWdvbmFsIixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJub25lIn0sYWN0aXZlc2hhcGU6e2ZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYigyNTUsMCwyNTUpIixlZGl0VHlwZToibm9uZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uLy4uL2xpYi9leHRlbmQiOjIyNiwiLi4vLi4vZHJhd2luZy9hdHRyaWJ1dGVzIjoxMjN9XSwxODg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtDSVJDTEVfU0lERVM6MzIsaTAwMDowLGkwOTA6OCxpMTgwOjE2LGkyNzA6MjQsY29zNDU6TWF0aC5jb3MoTWF0aC5QSS80KSxzaW40NTpNYXRoLnNpbihNYXRoLlBJLzQpLFNRUlQyOk1hdGguc3FydCgyKX19LHt9XSwxODk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vY29sb3IiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2lmKHIoIm5ld3NoYXBlLmRyYXdkaXJlY3Rpb24iKSxyKCJuZXdzaGFwZS5sYXllciIpLHIoIm5ld3NoYXBlLmZpbGxjb2xvciIpLHIoIm5ld3NoYXBlLmZpbGxydWxlIikscigibmV3c2hhcGUub3BhY2l0eSIpLHIoIm5ld3NoYXBlLmxpbmUud2lkdGgiKSl7dmFyIGE9KGV8fHt9KS5wbG90X2JnY29sb3J8fCIjRkZGIjtyKCJuZXdzaGFwZS5saW5lLmNvbG9yIixuLmNvbnRyYXN0KGEpKSxyKCJuZXdzaGFwZS5saW5lLmRhc2giKX1yKCJhY3RpdmVzaGFwZS5maWxsY29sb3IiKSxyKCJhY3RpdmVzaGFwZS5vcGFjaXR5Iil9fSx7Ii4uLy4uL2NvbG9yIjoxMDJ9XSwxOTA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vZHJhZ2VsZW1lbnQiKSxhPWUoIi4uLy4uL2RyYWdlbGVtZW50L2hlbHBlcnMiKS5kcmF3TW9kZSxpPWUoIi4uLy4uLy4uL3JlZ2lzdHJ5Iiksbz1lKCIuL2NvbnN0YW50cyIpLGw9by5pMDAwLHM9by5pMDkwLGM9by5pMTgwLHU9by5pMjcwLGQ9ZSgiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJPdXRsaW5lQ29udHJvbGxlcnMsZj1lKCIuL2hlbHBlcnMiKSxwPWYucG9pbnRzU2hhcGVSZWN0YW5nbGUsaD1mLnBvaW50c1NoYXBlRWxsaXBzZSxnPWYud3JpdGVQYXRocyxtPWUoIi4vbmV3c2hhcGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uIGUodCxyLG8sZil7Znx8KGY9MCk7dmFyIHY9by5nZDtmdW5jdGlvbiB5KCl7ZSh0LHIsbyxmKyspLGgodFswXSkmJngoe3JlZHJhd2luZzohMH0pfWZ1bmN0aW9uIHgoZSl7by5pc0FjdGl2ZVNoYXBlPSExO3ZhciB0PW0ocixvKTtPYmplY3Qua2V5cyh0KS5sZW5ndGgmJmkuY2FsbCgoZXx8e30pLnJlZHJhd2luZz8icmVsYXlvdXQiOiJfZ3VpUmVsYXlvdXQiLHYsdCl9dmFyIGIsXyx3LFQsTSxrPW8uaXNBY3RpdmVTaGFwZSxBPXYuX2Z1bGxMYXlvdXQuX3pvb21sYXllcixMPW8uZHJhZ21vZGU7KGEoTCk/di5fZnVsbExheW91dC5fZHJhd2luZz0hMDp2Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wJiZkKHYpLHIuYXR0cigiZCIsZyh0KSksayYmIWYpJiYoTT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2Vbcl09W107Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspe2Vbcl1bYV09W107Zm9yKHZhciBpPTA7aTxuW2FdLmxlbmd0aDtpKyspZVtyXVthXVtpXT1uW2FdW2ldfX1yZXR1cm4gZX0oW10sdCksZnVuY3Rpb24oZSl7Yj1bXTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXSxpPSFwKGEpJiZoKGEpO2Jbcl09W107Zm9yKHZhciBvPTA7bzxhLmxlbmd0aDtvKyspaWYoIloiIT09YVtvXVswXSYmKCFpfHxvPT09bHx8bz09PXN8fG89PT1jfHxvPT09dSkpe3ZhciBkPWFbb11bMV0sZj1hW29dWzJdLGc9ZS5hcHBlbmQoImNpcmNsZSIpLmNsYXNzZWQoImN1cnNvci1ncmFiIiwhMCkuYXR0cigiZGF0YS1pIixyKS5hdHRyKCJkYXRhLWoiLG8pLmF0dHIoImN4IixkKS5hdHRyKCJjeSIsZikuYXR0cigiciIsNCkuc3R5bGUoeyJtaXgtYmxlbmQtbW9kZSI6Imx1bWlub3NpdHkiLGZpbGw6ImJsYWNrIixzdHJva2U6IndoaXRlIiwic3Ryb2tlLXdpZHRoIjoxfSk7YltyXVtvXT17ZWxlbWVudDpnLm5vZGUoKSxnZDp2LHByZXBGbjpTLGRvbmVGbjpDLGNsaWNrRm46T30sbi5pbml0KGJbcl1bb10pfX19KEEuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lLWNvbnRyb2xsZXJzIikpLGZ1bmN0aW9uKCl7aWYoXz1bXSwhdC5sZW5ndGgpcmV0dXJuO19bMF09e2VsZW1lbnQ6clswXVswXSxnZDp2LHByZXBGbjpJLGRvbmVGbjpSfSxuLmluaXQoX1swXSl9KCkpO2Z1bmN0aW9uIFMoZSl7dz0rZS5zcmNFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1pIiksVD0rZS5zcmNFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1qIiksYlt3XVtUXS5tb3ZlRm49RH1mdW5jdGlvbiBEKGUscil7aWYodC5sZW5ndGgpe3ZhciBuPU1bd11bVF1bMV0sYT1NW3ddW1RdWzJdLGk9dFt3XSxvPWkubGVuZ3RoO2lmKHAoaSkpe2Zvcih2YXIgbD0wO2w8bztsKyspaWYobCE9PVQpe3ZhciBzPWlbbF07c1sxXT09PWlbVF1bMV0mJihzWzFdPW4rZSksc1syXT09PWlbVF1bMl0mJihzWzJdPWErcil9aWYoaVtUXVsxXT1uK2UsaVtUXVsyXT1hK3IsIXAoaSkpZm9yKHZhciBjPTA7YzxvO2MrKylmb3IodmFyIHU9MDt1PGlbY10ubGVuZ3RoO3UrKylpW2NdW3VdPU1bd11bY11bdV19ZWxzZSBpW1RdWzFdPW4rZSxpW1RdWzJdPWErcjt5KCl9fWZ1bmN0aW9uIEMoKXt4KCl9ZnVuY3Rpb24gTyhlLHIpe2lmKDI9PT1lKXt3PStyLnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKSxUPStyLnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWoiKTt2YXIgbj10W3ddO3Aobil8fGgobil8fGZ1bmN0aW9uKCl7aWYodC5sZW5ndGgmJnRbd10mJnRbd10ubGVuZ3RoKXtmb3IodmFyIGU9W10scj0wO3I8dFt3XS5sZW5ndGg7cisrKXIhPT1UJiZlLnB1c2godFt3XVtyXSk7ZS5sZW5ndGg+MSYmKDIhPT1lLmxlbmd0aHx8IloiIT09ZVsxXVswXSkmJigwPT09VCYmKGVbMF1bMF09Ik0iKSx0W3ddPWUseSgpLHgoKSl9fSgpfX1mdW5jdGlvbiBQKGUscil7IWZ1bmN0aW9uKGUscil7aWYodC5sZW5ndGgpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspZm9yKHZhciBhPTA7YTx0W25dLmxlbmd0aDthKyspZm9yKHZhciBpPTA7aSsyPHRbbl1bYV0ubGVuZ3RoO2krPTIpdFtuXVthXVtpKzFdPU1bbl1bYV1baSsxXStlLHRbbl1bYV1baSsyXT1NW25dW2FdW2krMl0rcn0oZSxyKSx5KCl9ZnVuY3Rpb24gSShlKXsodz0rZS5zcmNFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1pIikpfHwodz0wKSxfW3ddLm1vdmVGbj1QfWZ1bmN0aW9uIFIoKXt4KCl9fX0seyIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiOjI5MCwiLi4vLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi4vLi4vZHJhZ2VsZW1lbnQiOjEyMSwiLi4vLi4vZHJhZ2VsZW1lbnQvaGVscGVycyI6MTIwLCIuL2NvbnN0YW50cyI6MTg4LCIuL2hlbHBlcnMiOjE5MSwiLi9uZXdzaGFwZXMiOjE5Mn1dLDE5MTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJwYXJzZS1zdmctcGF0aCIpLGE9ZSgiLi9jb25zdGFudHMiKSxpPWEuQ0lSQ0xFX1NJREVTLG89YS5TUVJUMixsPWUoIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIikscz1sLnAycixjPWwucjJwLHU9WzAsMyw0LDUsNiwxLDJdLGQ9WzAsMyw0LDEsMl07ZnVuY3Rpb24gZihlLHQpe3JldHVybiBNYXRoLmFicyhlLXQpPD0xZS02fWZ1bmN0aW9uIHAoZSx0KXt2YXIgcj10WzFdLWVbMV0sbj10WzJdLWVbMl07cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX1yLndyaXRlUGF0aHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYoIXQpcmV0dXJuIk0wLDBaIjtmb3IodmFyIHI9IiIsbj0wO248dDtuKyspZm9yKHZhciBhPWVbbl0ubGVuZ3RoLGk9MDtpPGE7aSsrKXt2YXIgbz1lW25dW2ldWzBdO2lmKCJaIj09PW8pcis9IloiO2Vsc2UgZm9yKHZhciBsPWVbbl1baV0ubGVuZ3RoLHM9MDtzPGw7cysrKXt2YXIgYz1zOyJRIj09PW98fCJTIj09PW8/Yz1kW3NdOiJDIj09PW8mJihjPXVbc10pLHIrPWVbbl1baV1bY10scz4wJiZzPGwtMSYmKHIrPSIsIil9fXJldHVybiByfSxyLnJlYWRQYXRocz1mdW5jdGlvbihlLHQscixhKXt2YXIgbyxsLHUsZD1uKGUpLGY9W10scD0tMSxoPTAsZz0wLG09ZnVuY3Rpb24oKXtsPWgsdT1nfTttKCk7Zm9yKHZhciB2PTA7djxkLmxlbmd0aDt2Kyspe3ZhciB5LHgsYixfLHc9W10sVD1kW3ZdWzBdLE09VDtzd2l0Y2goVCl7Y2FzZSJNIjpwKyssZltwXT1bXSxoPStkW3ZdWzFdLGc9K2Rbdl1bMl0sdy5wdXNoKFtNLGgsZ10pLG0oKTticmVhaztjYXNlIlEiOmNhc2UiUyI6eT0rZFt2XVsxXSxiPStkW3ZdWzJdLGg9K2Rbdl1bM10sZz0rZFt2XVs0XSx3LnB1c2goW00saCxnLHksYl0pO2JyZWFrO2Nhc2UiQyI6eT0rZFt2XVsxXSxiPStkW3ZdWzJdLHg9K2Rbdl1bM10sXz0rZFt2XVs0XSxoPStkW3ZdWzVdLGc9K2Rbdl1bNl0sdy5wdXNoKFtNLGgsZyx5LGIseCxfXSk7YnJlYWs7Y2FzZSJUIjpjYXNlIkwiOmg9K2Rbdl1bMV0sZz0rZFt2XVsyXSx3LnB1c2goW00saCxnXSk7YnJlYWs7Y2FzZSJIIjpNPSJMIixoPStkW3ZdWzFdLHcucHVzaChbTSxoLGddKTticmVhaztjYXNlIlYiOk09IkwiLGc9K2Rbdl1bMV0sdy5wdXNoKFtNLGgsZ10pO2JyZWFrO2Nhc2UiQSI6TT0iTCI7dmFyIGs9K2Rbdl1bMV0sQT0rZFt2XVsyXTsrZFt2XVs0XXx8KGs9LWssQT0tQSk7dmFyIEw9aC1rLFM9Zztmb3Iobz0xO288PWkvMjtvKyspe3ZhciBEPTIqTWF0aC5QSSpvL2k7dy5wdXNoKFtNLEwraypNYXRoLmNvcyhEKSxTK0EqTWF0aC5zaW4oRCldKX1icmVhaztjYXNlIloiOmg9PT1sJiZnPT09dXx8KGg9bCxnPXUsdy5wdXNoKFtNLGgsZ10pKX1mb3IodmFyIEM9KHJ8fHt9KS5kb21haW4sTz10Ll9mdWxsTGF5b3V0Ll9zaXplLFA9ciYmInBpeGVsIj09PXIueHNpemVtb2RlLEk9ciYmInBpeGVsIj09PXIueXNpemVtb2RlLFI9ITE9PT1hLHo9MDt6PHcubGVuZ3RoO3orKyl7Zm9yKG89MDtvKzI8NztvKz0yKXt2YXIgTj13W3pdW28rMV0sRj13W3pdW28rMl07dm9pZCAwIT09TiYmdm9pZCAwIT09RiYmKGg9TixnPUYsciYmKHIueGF4aXMmJnIueGF4aXMucDJyPyhSJiYoTi09ci54YXhpcy5fb2Zmc2V0KSxOPVA/YyhyLnhheGlzLHIueGFuY2hvcikrTjpzKHIueGF4aXMsTikpOihSJiYoTi09Ty5sKSxDP049Qy54WzBdK04vTy53Ok4vPU8udyksci55YXhpcyYmci55YXhpcy5wMnI/KFImJihGLT1yLnlheGlzLl9vZmZzZXQpLEY9ST9jKHIueWF4aXMsci55YW5jaG9yKS1GOnMoci55YXhpcyxGKSk6KFImJihGLT1PLnQpLEY9Qz9DLnlbMV0tRi9PLmg6MS1GL08uaCkpLHdbel1bbysxXT1OLHdbel1bbysyXT1GKX1mW3BdLnB1c2god1t6XS5zbGljZSgpKX19cmV0dXJuIGZ9LHIucG9pbnRzU2hhcGVSZWN0YW5nbGU9ZnVuY3Rpb24oZSl7aWYoNSE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgdD0xO3Q8Mzt0Kyspe2lmKCFmKGVbMF1bdF0tZVsxXVt0XSxlWzNdW3RdLWVbMl1bdF0pKXJldHVybiExO2lmKCFmKGVbMF1bdF0tZVszXVt0XSxlWzFdW3RdLWVbMl1bdF0pKXJldHVybiExfXJldHVybiEoIWYoZVswXVsxXSxlWzFdWzFdKSYmIWYoZVswXVsxXSxlWzNdWzFdKSkmJiEhKHAoZVswXSxlWzFdKSpwKGVbMF0sZVszXSkpfSxyLnBvaW50c1NoYXBlRWxsaXBzZT1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0IT09aSsxKXJldHVybiExO3Q9aTtmb3IodmFyIHI9MDtyPHQ7cisrKXt2YXIgbj0oMip0LXIpJXQsYT0odC8yK24pJXQsbz0odC8yK3IpJXQ7aWYoIWYocChlW3JdLGVbb10pLHAoZVtuXSxlW2FdKSkpcmV0dXJuITF9cmV0dXJuITB9LHIuaGFuZGxlRWxsaXBzZT1mdW5jdGlvbihlLHQsbil7aWYoIWUpcmV0dXJuW3Qsbl07dmFyIGE9ci5lbGxpcHNlT3Zlcih7eDA6dFswXSx5MDp0WzFdLHgxOm5bMF0seTE6blsxXX0pLGw9KGEueDErYS54MCkvMixzPShhLnkxK2EueTApLzIsYz0oYS54MS1hLngwKS8yLHU9KGEueTEtYS55MCkvMjtjfHwoYz11Lz1vKSx1fHwodT1jLz1vKTtmb3IodmFyIGQ9W10sZj0wO2Y8aTtmKyspe3ZhciBwPTIqZipNYXRoLlBJL2k7ZC5wdXNoKFtsK2MqTWF0aC5jb3MocCkscyt1Kk1hdGguc2luKHApXSl9cmV0dXJuIGR9LHIuZWxsaXBzZU92ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54MCxyPWUueTAsbj1lLngxLGE9ZS55MSxpPW4tdCxsPWEtcixzPSgodC09aSkrbikvMixjPSgoci09bCkrYSkvMjtyZXR1cm57eDA6cy0oaSo9bykseTA6Yy0obCo9bykseDE6cytpLHkxOmMrbH19fSx7Ii4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIjoyOTEsIi4vY29uc3RhbnRzIjoxODgsInBhcnNlLXN2Zy1wYXRoIjo1Nn1dLDE5MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9kcmFnZWxlbWVudC9oZWxwZXJzIiksYT1uLmRyYXdNb2RlLGk9bi5vcGVuTW9kZSxvPWUoIi4vY29uc3RhbnRzIiksbD1vLmkwMDAscz1vLmkwOTAsYz1vLmkxODAsdT1vLmkyNzAsZD1vLmNvczQ1LGY9by5zaW40NSxwPWUoIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIiksaD1wLnAycixnPXAucjJwLG09ZSgiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJTZWxlY3Qsdj1lKCIuL2hlbHBlcnMiKSx5PXYucmVhZFBhdGhzLHg9di53cml0ZVBhdGhzLGI9di5lbGxpcHNlT3Zlcjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aCl7dmFyIHI9ZVswXVswXTtpZihyKXt2YXIgbj1yLmdldEF0dHJpYnV0ZSgiZCIpLG89dC5nZCxwPW8uX2Z1bGxMYXlvdXQubmV3c2hhcGUsdj10LnBsb3RpbmZvLF89di54YXhpcyx3PXYueWF4aXMsVD0hIXYuZG9tYWlufHwhdi54YXhpcyxNPSEhdi5kb21haW58fCF2LnlheGlzLGs9dC5pc0FjdGl2ZVNoYXBlLEE9dC5kcmFnbW9kZSxMPShvLmxheW91dHx8e30pLnNoYXBlc3x8W107aWYoIWEoQSkmJnZvaWQgMCE9PWspe3ZhciBTPW8uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg7aWYoUzxMLmxlbmd0aClzd2l0Y2goby5fZnVsbExheW91dC5zaGFwZXNbU10udHlwZSl7Y2FzZSJyZWN0IjpBPSJkcmF3cmVjdCI7YnJlYWs7Y2FzZSJjaXJjbGUiOkE9ImRyYXdjaXJjbGUiO2JyZWFrO2Nhc2UibGluZSI6QT0iZHJhd2xpbmUiO2JyZWFrO2Nhc2UicGF0aCI6dmFyIEQ9TFtTXS5wYXRofHwiIjtBPSJaIj09PURbRC5sZW5ndGgtMV0/ImRyYXdjbG9zZWRwYXRoIjoiZHJhd29wZW5wYXRoIn19dmFyIEMsTz1pKEEpLFA9eShuLG8sdixrKSxJPXtlZGl0YWJsZTohMCx4cmVmOlQ/InBhcGVyIjpfLl9pZCx5cmVmOk0/InBhcGVyIjp3Ll9pZCxsYXllcjpwLmxheWVyLG9wYWNpdHk6cC5vcGFjaXR5LGxpbmU6e2NvbG9yOnAubGluZS5jb2xvcix3aWR0aDpwLmxpbmUud2lkdGgsZGFzaDpwLmxpbmUuZGFzaH19O2lmKE98fChJLmZpbGxjb2xvcj1wLmZpbGxjb2xvcixJLmZpbGxydWxlPXAuZmlsbHJ1bGUpLDE9PT1QLmxlbmd0aCYmKEM9UFswXSksQyYmImRyYXdyZWN0Ij09PUEpSS50eXBlPSJyZWN0IixJLngwPUNbMF1bMV0sSS55MD1DWzBdWzJdLEkueDE9Q1syXVsxXSxJLnkxPUNbMl1bMl07ZWxzZSBpZihDJiYiZHJhd2xpbmUiPT09QSlJLnR5cGU9ImxpbmUiLEkueDA9Q1swXVsxXSxJLnkwPUNbMF1bMl0sSS54MT1DWzFdWzFdLEkueTE9Q1sxXVsyXTtlbHNlIGlmKEMmJiJkcmF3Y2lyY2xlIj09PUEpe0kudHlwZT0iY2lyY2xlIjt2YXIgUj1DW2xdWzFdLHo9Q1tzXVsxXSxOPUNbY11bMV0sRj1DW3VdWzFdLEU9Q1tsXVsyXSxqPUNbc11bMl0sSD1DW2NdWzJdLEI9Q1t1XVsyXSxZPXYueGF4aXMmJigiZGF0ZSI9PT12LnhheGlzLnR5cGV8fCJsb2ciPT09di54YXhpcy50eXBlKSxWPXYueWF4aXMmJigiZGF0ZSI9PT12LnlheGlzLnR5cGV8fCJsb2ciPT09di55YXhpcy50eXBlKTtZJiYoUj1nKHYueGF4aXMsUiksej1nKHYueGF4aXMseiksTj1nKHYueGF4aXMsTiksRj1nKHYueGF4aXMsRikpLFYmJihFPWcodi55YXhpcyxFKSxqPWcodi55YXhpcyxqKSxIPWcodi55YXhpcyxIKSxCPWcodi55YXhpcyxCKSk7dmFyIFU9KHorRikvMixxPShFK0gpLzIsRz1iKHt4MDpVLHkwOnEseDE6VSsoRi16K04tUikvMipkLHkxOnErKEItaitILUUpLzIqZn0pO1kmJihHLngwPWgodi54YXhpcyxHLngwKSxHLngxPWgodi54YXhpcyxHLngxKSksViYmKEcueTA9aCh2LnlheGlzLEcueTApLEcueTE9aCh2LnlheGlzLEcueTEpKSxJLngwPUcueDAsSS55MD1HLnkwLEkueDE9Ry54MSxJLnkxPUcueTF9ZWxzZSBJLnR5cGU9InBhdGgiLF8mJncmJmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj0iZGF0ZSI9PT10LnR5cGUsYT0iZGF0ZSI9PT1yLnR5cGU7aWYoIW4mJiFhKXJldHVybiBlO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgbz0wO288ZVtpXS5sZW5ndGg7bysrKWZvcih2YXIgbD0wO2wrMjxlW2ldW29dLmxlbmd0aDtsKz0yKW4mJihlW2ldW29dW2wrMV09ZVtpXVtvXVtsKzFdLnJlcGxhY2UoIiAiLCJfIikpLGEmJihlW2ldW29dW2wrMl09ZVtpXVtvXVtsKzJdLnJlcGxhY2UoIiAiLCJfIikpfShQLF8sdyksSS5wYXRoPXgoUCksQz1udWxsO20obyk7Zm9yKHZhciBaPXQuZWRpdEhlbHBlcnMsVz0oWnx8e30pLm1vZGlmeUl0ZW0sWD1bXSxKPTA7SjxMLmxlbmd0aDtKKyspe3ZhciBRPW8uX2Z1bGxMYXlvdXQuc2hhcGVzW0pdO2lmKFhbSl09US5faW5wdXQsdm9pZCAwIT09ayYmSj09PW8uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgpe3ZhciBLPUk7c3dpdGNoKFEudHlwZSl7Y2FzZSJsaW5lIjpjYXNlInJlY3QiOmNhc2UiY2lyY2xlIjpXKCJ4MCIsSy54MCksVygieDEiLEsueDEpLFcoInkwIixLLnkwKSxXKCJ5MSIsSy55MSk7YnJlYWs7Y2FzZSJwYXRoIjpXKCJwYXRoIixLLnBhdGgpfX19cmV0dXJuIHZvaWQgMD09PWs/KFgucHVzaChJKSxYKTpaP1ouZ2V0VXBkYXRlT2JqKCk6e319fX19LHsiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIjoyOTAsIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIjoyOTEsIi4uLy4uL2RyYWdlbGVtZW50L2hlbHBlcnMiOjEyMCwiLi9jb25zdGFudHMiOjE4OCwiLi9oZWxwZXJzIjoxOTF9XSwxOTM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9jb25zdGFudHMiKSxhPWUoIi4uLy4uL2xpYiIpO3IucmFuZ2VUb1NoYXBlUG9zaXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuImxvZyI9PT1lLnR5cGU/ZS5yMmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxyLnNoYXBlUG9zaXRpb25Ub1JhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiJsb2ciPT09ZS50eXBlP2UuZDJyOmZ1bmN0aW9uKGUpe3JldHVybiBlfX0sci5kZWNvZGVEYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlJiYodD10LnJlcGxhY2UoIl8iLCIgIikpLGUodCl9fSxyLmVuY29kZURhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpLnJlcGxhY2UoIiAiLCJfIil9fSxyLmV4dHJhY3RQYXRoQ29vcmRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9W107cmV0dXJuIGUubWF0Y2gobi5zZWdtZW50UkUpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBpPXRbZS5jaGFyQXQoMCldLmRyYXduO2lmKHZvaWQgMCE9PWkpe3ZhciBvPWUuc3Vic3RyKDEpLm1hdGNoKG4ucGFyYW1SRSk7IW98fG8ubGVuZ3RoPGl8fHIucHVzaChhLmNsZWFuTnVtYmVyKG9baV0pKX19KSkscn0sci5nZXREYXRhVG9QaXhlbD1mdW5jdGlvbihlLHQsbixhKXt2YXIgaSxvPWUuX2Z1bGxMYXlvdXQuX3NpemU7aWYodClpZigiZG9tYWluIj09PWEpaT1mdW5jdGlvbihlKXtyZXR1cm4gdC5fbGVuZ3RoKihuPzEtZTplKSt0Ll9vZmZzZXR9O2Vsc2V7dmFyIGw9ci5zaGFwZVBvc2l0aW9uVG9SYW5nZSh0KTtpPWZ1bmN0aW9uKGUpe3JldHVybiB0Ll9vZmZzZXQrdC5yMnAobChlLCEwKSl9LCJkYXRlIj09PXQudHlwZSYmKGk9ci5kZWNvZGVEYXRlKGkpKX1lbHNlIGk9bj9mdW5jdGlvbihlKXtyZXR1cm4gby50K28uaCooMS1lKX06ZnVuY3Rpb24oZSl7cmV0dXJuIG8ubCtvLncqZX07cmV0dXJuIGl9LHIuZ2V0UGl4ZWxUb0RhdGE9ZnVuY3Rpb24oZSx0LG4sYSl7dmFyIGksbz1lLl9mdWxsTGF5b3V0Ll9zaXplO2lmKHQpaWYoImRvbWFpbiI9PT1hKWk9ZnVuY3Rpb24oZSl7dmFyIHI9KGUtdC5fb2Zmc2V0KS90Ll9sZW5ndGg7cmV0dXJuIG4/MS1yOnJ9O2Vsc2V7dmFyIGw9ci5yYW5nZVRvU2hhcGVQb3NpdGlvbih0KTtpPWZ1bmN0aW9uKGUpe3JldHVybiBsKHQucDJyKGUtdC5fb2Zmc2V0KSl9fWVsc2UgaT1uP2Z1bmN0aW9uKGUpe3JldHVybiAxLShlLW8udCkvby5ofTpmdW5jdGlvbihlKXtyZXR1cm4oZS1vLmwpL28ud307cmV0dXJuIGl9LHIucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MT09PU1hdGgucm91bmQodCUyKSxuPU1hdGgucm91bmQoZSk7cmV0dXJuIHI/bisuNTpufSxyLm1ha2VPcHRpb25zQW5kUGxvdGluZm89ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LnNoYXBlc1t0XXx8e30sbj1lLl9mdWxsTGF5b3V0Ll9wbG90c1tyLnhyZWYrci55cmVmXTtyZXR1cm4hIW4/bi5faGFkUGxvdGluZm89ITA6KG49e30sci54cmVmJiYicGFwZXIiIT09ci54cmVmJiYobi54YXhpcz1lLl9mdWxsTGF5b3V0W3IueHJlZisiYXhpcyJdKSxyLnlyZWYmJiJwYXBlciIhPT1yLnlyZWYmJihuLnlheGlzPWUuX2Z1bGxMYXlvdXRbci55cmVmKyJheGlzIl0pKSxuLnhzaXplbW9kZT1yLnhzaXplbW9kZSxuLnlzaXplbW9kZT1yLnlzaXplbW9kZSxuLnhhbmNob3I9ci54YW5jaG9yLG4ueWFuY2hvcj1yLnlhbmNob3Ise29wdGlvbnM6cixwbG90aW5mbzpufX19LHsiLi4vLi4vbGliIjoyMzIsIi4vY29uc3RhbnRzIjoxODR9XSwxOTQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9kcmF3Iik7dC5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6InNoYXBlcyIsbGF5b3V0QXR0cmlidXRlczplKCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czplKCIuL2RlZmF1bHRzIiksc3VwcGx5RHJhd05ld1NoYXBlRGVmYXVsdHM6ZSgiLi9kcmF3X25ld3NoYXBlL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OmUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiKSgic2hhcGVzIiksY2FsY0F1dG9yYW5nZTplKCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzpuLmRyYXcsZHJhd09uZTpuLmRyYXdPbmV9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjI5MiwiLi9hdHRyaWJ1dGVzIjoxODIsIi4vY2FsY19hdXRvcmFuZ2UiOjE4MywiLi9kZWZhdWx0cyI6MTg1LCIuL2RyYXciOjE4NiwiLi9kcmF3X25ld3NoYXBlL2RlZmF1bHRzIjoxODl9XSwxOTU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT1lKCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyIpLGk9ZSgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZERlZXBBbGwsbz1lKCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbD1lKCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyIpLHM9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGM9ZSgiLi9jb25zdGFudHMiKSx1PXMoInN0ZXAiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlc3R5bGUiLCJyZWxheW91dCIsImFuaW1hdGUiLCJ1cGRhdGUiLCJza2lwIl0sZGZsdDoicmVzdHlsZSJ9LGFyZ3M6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmcifSxleGVjdXRlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0pO3QuZXhwb3J0cz1vKHMoInNsaWRlciIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGFjdGl2ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LHN0ZXBzOnUsbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MH0scGFkOmkoYSh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx7fSx7dDp7ZGZsdDoyMH19KSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MH0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHRyYW5zaXRpb246e2R1cmF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTUwfSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpsLnRyYW5zaXRpb24uZWFzaW5nLnZhbHVlcyxkZmx0OiJjdWJpYy1pbi1vdXQifX0sY3VycmVudHZhbHVlOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTB9LHByZWZpeDp7dmFsVHlwZToic3RyaW5nIn0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmcifSxmb250Om4oe30pfSxmb250Om4oe30pLGFjdGl2ZWJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMuZ3JpcEJnQWN0aXZlQ29sb3J9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMucmFpbEJnQ29sb3J9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnJhaWxCb3JkZXJDb2xvcn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpjLnJhaWxCb3JkZXJXaWR0aH0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmMudGlja0xlbmd0aH0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnRpY2tDb2xvcn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sbWlub3J0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Yy5taW5vclRpY2tMZW5ndGh9fSksImFycmF5ZHJhdyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjIyNiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6MjYxLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyNjgsIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjoyNzMsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6MzEwLCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyI6MzE1LCIuL2NvbnN0YW50cyI6MTk2fV0sMTk2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17bmFtZToic2xpZGVycyIsY29udGFpbmVyQ2xhc3NOYW1lOiJzbGlkZXItY29udGFpbmVyIixncm91cENsYXNzTmFtZToic2xpZGVyLWdyb3VwIixpbnB1dEFyZWFDbGFzczoic2xpZGVyLWlucHV0LWFyZWEiLHJhaWxSZWN0Q2xhc3M6InNsaWRlci1yYWlsLXJlY3QiLHJhaWxUb3VjaFJlY3RDbGFzczoic2xpZGVyLXJhaWwtdG91Y2gtcmVjdCIsZ3JpcFJlY3RDbGFzczoic2xpZGVyLWdyaXAtcmVjdCIsdGlja1JlY3RDbGFzczoic2xpZGVyLXRpY2stcmVjdCIsaW5wdXRQcm94eUNsYXNzOiJzbGlkZXItaW5wdXQtcHJveHkiLGxhYmVsc0NsYXNzOiJzbGlkZXItbGFiZWxzIixsYWJlbEdyb3VwQ2xhc3M6InNsaWRlci1sYWJlbC1ncm91cCIsbGFiZWxDbGFzczoic2xpZGVyLWxhYmVsIixjdXJyZW50VmFsdWVDbGFzczoic2xpZGVyLWN1cnJlbnQtdmFsdWUiLHJhaWxIZWlnaHQ6NSxtZW51SW5kZXhBdHRyTmFtZToic2xpZGVyLWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoic2xpZGVyLSIsbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjQwLGFycm93T2Zmc2V0WDo0LHJhaWxSYWRpdXM6MixyYWlsV2lkdGg6NSxyYWlsQm9yZGVyOjQscmFpbEJvcmRlcldpZHRoOjEscmFpbEJvcmRlckNvbG9yOiIjYmVjOGQ5IixyYWlsQmdDb2xvcjoiI2Y4ZmFmYyIscmFpbEluc2V0Ojgsc3RlcEluc2V0OjEwLGdyaXBSYWRpdXM6MTAsZ3JpcFdpZHRoOjIwLGdyaXBIZWlnaHQ6MjAsZ3JpcEJvcmRlcjoyMCxncmlwQm9yZGVyV2lkdGg6MSxncmlwQm9yZGVyQ29sb3I6IiNiZWM4ZDkiLGdyaXBCZ0NvbG9yOiIjZjZmOGZhIixncmlwQmdBY3RpdmVDb2xvcjoiI2RiZGRlMCIsbGFiZWxQYWRkaW5nOjgsbGFiZWxPZmZzZXQ6MCx0aWNrV2lkdGg6MSx0aWNrQ29sb3I6IiMzMzMiLHRpY2tPZmZzZXQ6MjUsdGlja0xlbmd0aDo3LG1pbm9yVGlja09mZnNldDoyNSxtaW5vclRpY2tDb2xvcjoiIzMzMyIsbWlub3JUaWNrTGVuZ3RoOjQsY3VycmVudFZhbHVlUGFkZGluZzo4LGN1cnJlbnRWYWx1ZUluc2V0OjB9fSx7fV0sMTk3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksaT1lKCIuL2F0dHJpYnV0ZXMiKSxvPWUoIi4vY29uc3RhbnRzIikubmFtZSxsPWkuc3RlcHM7ZnVuY3Rpb24gcyhlLHQscil7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZShlLHQsaSxyLGEpfWZvcih2YXIgbD1hKGUsdCx7bmFtZToic3RlcHMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSkscz0wLHU9MDt1PGwubGVuZ3RoO3UrKylsW3VdLnZpc2libGUmJnMrKztpZihzPDI/dC52aXNpYmxlPSExOm8oInZpc2libGUiKSl7dC5fc3RlcENvdW50PXM7dmFyIGQ9dC5fdmlzaWJsZVN0ZXBzPW4uZmlsdGVyVmlzaWJsZShsKTsobFtvKCJhY3RpdmUiKV18fHt9KS52aXNpYmxlfHwodC5hY3RpdmU9ZFswXS5faW5kZXgpLG8oIngiKSxvKCJ5Iiksbi5ub25lT3JBbGwoZSx0LFsieCIsInkiXSksbygieGFuY2hvciIpLG8oInlhbmNob3IiKSxvKCJsZW4iKSxvKCJsZW5tb2RlIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJjdXJyZW50dmFsdWUudmlzaWJsZSIpJiYobygiY3VycmVudHZhbHVlLnhhbmNob3IiKSxvKCJjdXJyZW50dmFsdWUucHJlZml4IiksbygiY3VycmVudHZhbHVlLnN1ZmZpeCIpLG8oImN1cnJlbnR2YWx1ZS5vZmZzZXQiKSxuLmNvZXJjZUZvbnQobywiY3VycmVudHZhbHVlLmZvbnQiLHQuZm9udCkpLG8oInRyYW5zaXRpb24uZHVyYXRpb24iKSxvKCJ0cmFuc2l0aW9uLmVhc2luZyIpLG8oImJnY29sb3IiKSxvKCJhY3RpdmViZ2NvbG9yIiksbygiYm9yZGVyY29sb3IiKSxvKCJib3JkZXJ3aWR0aCIpLG8oInRpY2tsZW4iKSxvKCJ0aWNrd2lkdGgiKSxvKCJ0aWNrY29sb3IiKSxvKCJtaW5vcnRpY2tsZW4iKX19ZnVuY3Rpb24gYyhlLHQpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UoZSx0LGwscixhKX1pZigic2tpcCI9PT1lLm1ldGhvZHx8QXJyYXkuaXNBcnJheShlLmFyZ3MpP3IoInZpc2libGUiKTp0LnZpc2libGU9ITEpe3IoIm1ldGhvZCIpLHIoImFyZ3MiKTt2YXIgYT1yKCJsYWJlbCIsInN0ZXAtIit0Ll9pbmRleCk7cigidmFsdWUiLGEpLHIoImV4ZWN1dGUiKX19dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7YShlLHQse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6c30pfX0seyIuLi8uLi9saWIiOjIzMiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjoyNzQsIi4vYXR0cmlidXRlcyI6MTk1LCIuL2NvbnN0YW50cyI6MTk2fV0sMTk4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaT1lKCIuLi9jb2xvciIpLG89ZSgiLi4vZHJhd2luZyIpLGw9ZSgiLi4vLi4vbGliIikscz1sLnN0clRyYW5zbGF0ZSxjPWUoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHU9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLGQ9ZSgiLi9jb25zdGFudHMiKSxmPWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxwPWYuTElORV9TUEFDSU5HLGg9Zi5GUk9NX1RMLGc9Zi5GUk9NX0JSO2Z1bmN0aW9uIG0oZSl7cmV0dXJuIGQuYXV0b01hcmdpbklkUm9vdCtlLl9pbmRleH1mdW5jdGlvbiB2KGUpe3JldHVybiBlLl9pbmRleH1mdW5jdGlvbiB5KGUsdCl7dmFyIHI9by50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrZC5sYWJlbEdyb3VwQ2xhc3MpLmRhdGEodC5fdmlzaWJsZVN0ZXBzKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChkLmxhYmVsR3JvdXBDbGFzcywhMCk7dmFyIGk9MCxzPTA7ci5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1fKG4uc2VsZWN0KHRoaXMpLHtzdGVwOmV9LHQpLm5vZGUoKTtpZihyKXt2YXIgYT1vLmJCb3gocik7cz1NYXRoLm1heChzLGEuaGVpZ2h0KSxpPU1hdGgubWF4KGksYS53aWR0aCl9fSkpLHIucmVtb3ZlKCk7dmFyIHU9dC5fZGltcz17fTt1LmlucHV0QXJlYVdpZHRoPU1hdGgubWF4KGQucmFpbFdpZHRoLGQuZ3JpcEhlaWdodCk7dmFyIGY9ZS5fZnVsbExheW91dC5fc2l6ZTt1Lmx4PWYubCtmLncqdC54LHUubHk9Zi50K2YuaCooMS10LnkpLCJmcmFjdGlvbiI9PT10Lmxlbm1vZGU/dS5vdXRlckxlbmd0aD1NYXRoLnJvdW5kKGYudyp0Lmxlbik6dS5vdXRlckxlbmd0aD10Lmxlbix1LmlucHV0QXJlYVN0YXJ0PTAsdS5pbnB1dEFyZWFMZW5ndGg9TWF0aC5yb3VuZCh1Lm91dGVyTGVuZ3RoLXQucGFkLmwtdC5wYWQucik7dmFyIHA9KHUuaW5wdXRBcmVhTGVuZ3RoLTIqZC5zdGVwSW5zZXQpLyh0Ll9zdGVwQ291bnQtMSksdj1pK2QubGFiZWxQYWRkaW5nO2lmKHUubGFiZWxTdHJpZGU9TWF0aC5tYXgoMSxNYXRoLmNlaWwodi9wKSksdS5sYWJlbEhlaWdodD1zLHUuY3VycmVudFZhbHVlTWF4V2lkdGg9MCx1LmN1cnJlbnRWYWx1ZUhlaWdodD0wLHUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9MCx1LmN1cnJlbnRWYWx1ZU1heExpbmVzPTEsdC5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIHk9by50ZXN0ZXIuYXBwZW5kKCJnIik7ci5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj14KHksdCxlLmxhYmVsKSxuPXIubm9kZSgpJiZvLmJCb3goci5ub2RlKCkpfHx7d2lkdGg6MCxoZWlnaHQ6MH0sYT1jLmxpbmVDb3VudChyKTt1LmN1cnJlbnRWYWx1ZU1heFdpZHRoPU1hdGgubWF4KHUuY3VycmVudFZhbHVlTWF4V2lkdGgsTWF0aC5jZWlsKG4ud2lkdGgpKSx1LmN1cnJlbnRWYWx1ZUhlaWdodD1NYXRoLm1heCh1LmN1cnJlbnRWYWx1ZUhlaWdodCxNYXRoLmNlaWwobi5oZWlnaHQpKSx1LmN1cnJlbnRWYWx1ZU1heExpbmVzPU1hdGgubWF4KHUuY3VycmVudFZhbHVlTWF4TGluZXMsYSl9KSksdS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodD11LmN1cnJlbnRWYWx1ZUhlaWdodCt0LmN1cnJlbnR2YWx1ZS5vZmZzZXQseS5yZW1vdmUoKX11LmhlaWdodD11LmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0K2QudGlja09mZnNldCt0LnRpY2tsZW4rZC5sYWJlbE9mZnNldCt1LmxhYmVsSGVpZ2h0K3QucGFkLnQrdC5wYWQuYjt2YXIgYj0ibGVmdCI7bC5pc1JpZ2h0QW5jaG9yKHQpJiYodS5seC09dS5vdXRlckxlbmd0aCxiPSJyaWdodCIpLGwuaXNDZW50ZXJBbmNob3IodCkmJih1Lmx4LT11Lm91dGVyTGVuZ3RoLzIsYj0iY2VudGVyIik7dmFyIHc9InRvcCI7bC5pc0JvdHRvbUFuY2hvcih0KSYmKHUubHktPXUuaGVpZ2h0LHc9ImJvdHRvbSIpLGwuaXNNaWRkbGVBbmNob3IodCkmJih1Lmx5LT11LmhlaWdodC8yLHc9Im1pZGRsZSIpLHUub3V0ZXJMZW5ndGg9TWF0aC5jZWlsKHUub3V0ZXJMZW5ndGgpLHUuaGVpZ2h0PU1hdGguY2VpbCh1LmhlaWdodCksdS5seD1NYXRoLnJvdW5kKHUubHgpLHUubHk9TWF0aC5yb3VuZCh1Lmx5KTt2YXIgVD17eTp0LnksYjp1LmhlaWdodCpnW3ddLHQ6dS5oZWlnaHQqaFt3XX07ImZyYWN0aW9uIj09PXQubGVubW9kZT8oVC5sPTAsVC54bD10LngtdC5sZW4qaFtiXSxULnI9MCxULnhyPXQueCt0LmxlbipnW2JdKTooVC54PXQueCxULmw9dS5vdXRlckxlbmd0aCpoW2JdLFQucj11Lm91dGVyTGVuZ3RoKmdbYl0pLGEuYXV0b01hcmdpbihlLG0odCksVCl9ZnVuY3Rpb24geChlLHQscil7aWYodC5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIG4sYSxpPXQuX2RpbXM7c3dpdGNoKHQuY3VycmVudHZhbHVlLnhhbmNob3Ipe2Nhc2UicmlnaHQiOm49aS5pbnB1dEFyZWFMZW5ndGgtZC5jdXJyZW50VmFsdWVJbnNldC1pLmN1cnJlbnRWYWx1ZU1heFdpZHRoLGE9ImxlZnQiO2JyZWFrO2Nhc2UiY2VudGVyIjpuPS41KmkuaW5wdXRBcmVhTGVuZ3RoLGE9Im1pZGRsZSI7YnJlYWs7ZGVmYXVsdDpuPWQuY3VycmVudFZhbHVlSW5zZXQsYT0ibGVmdCJ9dmFyIHM9bC5lbnN1cmVTaW5nbGUoZSwidGV4dCIsZC5sYWJlbENsYXNzLChmdW5jdGlvbihlKXtlLmF0dHIoeyJ0ZXh0LWFuY2hvciI6YSwiZGF0YS1ub3RleCI6MX0pfSkpLHU9dC5jdXJyZW50dmFsdWUucHJlZml4P3QuY3VycmVudHZhbHVlLnByZWZpeDoiIjtpZigic3RyaW5nIj09dHlwZW9mIHIpdSs9cjtlbHNle3ZhciBmPXQuc3RlcHNbdC5hY3RpdmVdLmxhYmVsLGg9dC5fZ2QuX2Z1bGxMYXlvdXQuX21ldGE7aCYmKGY9bC50ZW1wbGF0ZVN0cmluZyhmLGgpKSx1Kz1mfXQuY3VycmVudHZhbHVlLnN1ZmZpeCYmKHUrPXQuY3VycmVudHZhbHVlLnN1ZmZpeCkscy5jYWxsKG8uZm9udCx0LmN1cnJlbnR2YWx1ZS5mb250KS50ZXh0KHUpLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsdC5fZ2QpO3ZhciBnPWMubGluZUNvdW50KHMpLG09KGkuY3VycmVudFZhbHVlTWF4TGluZXMrMS1nKSp0LmN1cnJlbnR2YWx1ZS5mb250LnNpemUqcDtyZXR1cm4gYy5wb3NpdGlvblRleHQocyxuLG0pLHN9fWZ1bmN0aW9uIGIoZSx0LHIpe2wuZW5zdXJlU2luZ2xlKGUsInJlY3QiLGQuZ3JpcFJlY3RDbGFzcywoZnVuY3Rpb24obil7bi5jYWxsKGssdCxlLHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLmF0dHIoe3dpZHRoOmQuZ3JpcFdpZHRoLGhlaWdodDpkLmdyaXBIZWlnaHQscng6ZC5ncmlwUmFkaXVzLHJ5OmQuZ3JpcFJhZGl1c30pLmNhbGwoaS5zdHJva2Usci5ib3JkZXJjb2xvcikuY2FsbChpLmZpbGwsci5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIF8oZSx0LHIpe3ZhciBuPWwuZW5zdXJlU2luZ2xlKGUsInRleHQiLGQubGFiZWxDbGFzcywoZnVuY3Rpb24oZSl7ZS5hdHRyKHsidGV4dC1hbmNob3IiOiJtaWRkbGUiLCJkYXRhLW5vdGV4IjoxfSl9KSksYT10LnN0ZXAubGFiZWwsaT1yLl9nZC5fZnVsbExheW91dC5fbWV0YTtyZXR1cm4gaSYmKGE9bC50ZW1wbGF0ZVN0cmluZyhhLGkpKSxuLmNhbGwoby5mb250LHIuZm9udCkudGV4dChhKS5jYWxsKGMuY29udmVydFRvVHNwYW5zLHIuX2dkKSxufWZ1bmN0aW9uIHcoZSx0KXt2YXIgcj1sLmVuc3VyZVNpbmdsZShlLCJnIixkLmxhYmVsc0NsYXNzKSxhPXQuX2RpbXMsaT1yLnNlbGVjdEFsbCgiZy4iK2QubGFiZWxHcm91cENsYXNzKS5kYXRhKGEubGFiZWxTdGVwcyk7aS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZC5sYWJlbEdyb3VwQ2xhc3MsITApLGkuZXhpdCgpLnJlbW92ZSgpLGkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ci5jYWxsKF8sZSx0KSxvLnNldFRyYW5zbGF0ZShyLFModCxlLmZyYWN0aW9uKSxkLnRpY2tPZmZzZXQrdC50aWNrbGVuK3QuZm9udC5zaXplKnArZC5sYWJlbE9mZnNldCthLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pKX1mdW5jdGlvbiBUKGUsdCxyLG4sYSl7dmFyIGk9TWF0aC5yb3VuZChuKihyLl9zdGVwQ291bnQtMSkpLG89ci5fdmlzaWJsZVN0ZXBzW2ldLl9pbmRleDtvIT09ci5hY3RpdmUmJk0oZSx0LHIsbywhMCxhKX1mdW5jdGlvbiBNKGUsdCxyLG4saSxvKXt2YXIgbD1yLmFjdGl2ZTtyLmFjdGl2ZT1uLHUoZS5sYXlvdXQsZC5uYW1lLHIpLmFwcGx5VXBkYXRlKCJhY3RpdmUiLG4pO3ZhciBzPXIuc3RlcHNbci5hY3RpdmVdO3QuY2FsbChMLHIsbyksdC5jYWxsKHgsciksZS5lbWl0KCJwbG90bHlfc2xpZGVyY2hhbmdlIix7c2xpZGVyOnIsc3RlcDpyLnN0ZXBzW3IuYWN0aXZlXSxpbnRlcmFjdGlvbjppLHByZXZpb3VzQWN0aXZlOmx9KSxzJiZzLm1ldGhvZCYmaSYmKHQuX25leHRNZXRob2Q/KHQuX25leHRNZXRob2Quc3RlcD1zLHQuX25leHRNZXRob2QuZG9DYWxsYmFjaz1pLHQuX25leHRNZXRob2QuZG9UcmFuc2l0aW9uPW8pOih0Ll9uZXh0TWV0aG9kPXtzdGVwOnMsZG9DYWxsYmFjazppLGRvVHJhbnNpdGlvbjpvfSx0Ll9uZXh0TWV0aG9kUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7dmFyIHI9dC5fbmV4dE1ldGhvZC5zdGVwO3IubWV0aG9kJiYoci5leGVjdXRlJiZhLmV4ZWN1dGVBUElDb21tYW5kKGUsci5tZXRob2Qsci5hcmdzKSx0Ll9uZXh0TWV0aG9kPW51bGwsdC5fbmV4dE1ldGhvZFJhZj1udWxsKX0pKSkpfWZ1bmN0aW9uIGsoZSx0LHIpe3ZhciBhPXIubm9kZSgpLG89bi5zZWxlY3QodCk7ZnVuY3Rpb24gbCgpe3JldHVybiByLmRhdGEoKVswXX1mdW5jdGlvbiBzKCl7dmFyIGU9bCgpO3QuZW1pdCgicGxvdGx5X3NsaWRlcnN0YXJ0Iix7c2xpZGVyOmV9KTt2YXIgcz1yLnNlbGVjdCgiLiIrZC5ncmlwUmVjdENsYXNzKTtuLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLG4uZXZlbnQucHJldmVudERlZmF1bHQoKSxzLmNhbGwoaS5maWxsLGUuYWN0aXZlYmdjb2xvcik7dmFyIGM9RChlLG4ubW91c2UoYSlbMF0pO2Z1bmN0aW9uIHUoKXt2YXIgZT1sKCksaT1EKGUsbi5tb3VzZShhKVswXSk7VCh0LHIsZSxpLCExKX1mdW5jdGlvbiBmKCl7dmFyIGU9bCgpO2UuX2RyYWdnaW5nPSExLHMuY2FsbChpLmZpbGwsZS5iZ2NvbG9yKSxvLm9uKCJtb3VzZXVwIixudWxsKSxvLm9uKCJtb3VzZW1vdmUiLG51bGwpLG8ub24oInRvdWNoZW5kIixudWxsKSxvLm9uKCJ0b3VjaG1vdmUiLG51bGwpLHQuZW1pdCgicGxvdGx5X3NsaWRlcmVuZCIse3NsaWRlcjplLHN0ZXA6ZS5zdGVwc1tlLmFjdGl2ZV19KX1UKHQscixlLGMsITApLGUuX2RyYWdnaW5nPSEwLG8ub24oIm1vdXNlbW92ZSIsdSksby5vbigidG91Y2htb3ZlIix1KSxvLm9uKCJtb3VzZXVwIixmKSxvLm9uKCJ0b3VjaGVuZCIsZil9ZS5vbigibW91c2Vkb3duIixzKSxlLm9uKCJ0b3VjaHN0YXJ0IixzKX1mdW5jdGlvbiBBKGUsdCl7dmFyIHI9ZS5zZWxlY3RBbGwoInJlY3QuIitkLnRpY2tSZWN0Q2xhc3MpLmRhdGEodC5fdmlzaWJsZVN0ZXBzKSxhPXQuX2RpbXM7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoZC50aWNrUmVjdENsYXNzLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmF0dHIoe3dpZHRoOnQudGlja3dpZHRoKyJweCIsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksci5lYWNoKChmdW5jdGlvbihlLHIpe3ZhciBsPXIlYS5sYWJlbFN0cmlkZT09MCxzPW4uc2VsZWN0KHRoaXMpO3MuYXR0cih7aGVpZ2h0Omw/dC50aWNrbGVuOnQubWlub3J0aWNrbGVufSkuY2FsbChpLmZpbGwsdC50aWNrY29sb3IpLG8uc2V0VHJhbnNsYXRlKHMsUyh0LHIvKHQuX3N0ZXBDb3VudC0xKSktLjUqdC50aWNrd2lkdGgsKGw/ZC50aWNrT2Zmc2V0OmQubWlub3JUaWNrT2Zmc2V0KSthLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pKX1mdW5jdGlvbiBMKGUsdCxyKXtmb3IodmFyIG49ZS5zZWxlY3QoInJlY3QuIitkLmdyaXBSZWN0Q2xhc3MpLGE9MCxpPTA7aTx0Ll9zdGVwQ291bnQ7aSsrKWlmKHQuX3Zpc2libGVTdGVwc1tpXS5faW5kZXg9PT10LmFjdGl2ZSl7YT1pO2JyZWFrfXZhciBvPVModCxhLyh0Ll9zdGVwQ291bnQtMSkpO2lmKCF0Ll9pbnZva2luZ0NvbW1hbmQpe3ZhciBsPW47ciYmdC50cmFuc2l0aW9uLmR1cmF0aW9uPjAmJihsPWwudHJhbnNpdGlvbigpLmR1cmF0aW9uKHQudHJhbnNpdGlvbi5kdXJhdGlvbikuZWFzZSh0LnRyYW5zaXRpb24uZWFzaW5nKSksbC5hdHRyKCJ0cmFuc2Zvcm0iLHMoby0uNSpkLmdyaXBXaWR0aCx0Ll9kaW1zLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KSl9fWZ1bmN0aW9uIFMoZSx0KXt2YXIgcj1lLl9kaW1zO3JldHVybiByLmlucHV0QXJlYVN0YXJ0K2Quc3RlcEluc2V0KyhyLmlucHV0QXJlYUxlbmd0aC0yKmQuc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsdCkpfWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1lLl9kaW1zO3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsKHQtZC5zdGVwSW5zZXQtci5pbnB1dEFyZWFTdGFydCkvKHIuaW5wdXRBcmVhTGVuZ3RoLTIqZC5zdGVwSW5zZXQtMipyLmlucHV0QXJlYVN0YXJ0KSkpfWZ1bmN0aW9uIEMoZSx0LHIpe3ZhciBuPXIuX2RpbXMsYT1sLmVuc3VyZVNpbmdsZShlLCJyZWN0IixkLnJhaWxUb3VjaFJlY3RDbGFzcywoZnVuY3Rpb24obil7bi5jYWxsKGssdCxlLHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpO2EuYXR0cih7d2lkdGg6bi5pbnB1dEFyZWFMZW5ndGgsaGVpZ2h0Ok1hdGgubWF4KG4uaW5wdXRBcmVhV2lkdGgsZC50aWNrT2Zmc2V0K3IudGlja2xlbituLmxhYmVsSGVpZ2h0KX0pLmNhbGwoaS5maWxsLHIuYmdjb2xvcikuYXR0cigib3BhY2l0eSIsMCksby5zZXRUcmFuc2xhdGUoYSwwLG4uY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Ll9kaW1zLG49ci5pbnB1dEFyZWFMZW5ndGgtMipkLnJhaWxJbnNldCxhPWwuZW5zdXJlU2luZ2xlKGUsInJlY3QiLGQucmFpbFJlY3RDbGFzcyk7YS5hdHRyKHt3aWR0aDpuLGhlaWdodDpkLnJhaWxXaWR0aCxyeDpkLnJhaWxSYWRpdXMscnk6ZC5yYWlsUmFkaXVzLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLmNhbGwoaS5zdHJva2UsdC5ib3JkZXJjb2xvcikuY2FsbChpLmZpbGwsdC5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIix0LmJvcmRlcndpZHRoKyJweCIpLG8uc2V0VHJhbnNsYXRlKGEsZC5yYWlsSW5zZXQsLjUqKHIuaW5wdXRBcmVhV2lkdGgtZC5yYWlsV2lkdGgpK3IuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfXQuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZVtkLm5hbWVdLG49W10sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaT1yW2FdO2kudmlzaWJsZSYmKGkuX2dkPXQsbi5wdXNoKGkpKX1yZXR1cm4gbn0odCxlKSxpPXQuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitkLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7ZnVuY3Rpb24gbCh0KXt0Ll9jb21tYW5kT2JzZXJ2ZXImJih0Ll9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZGVsZXRlIHQuX2NvbW1hbmRPYnNlcnZlciksYS5hdXRvTWFyZ2luKGUsbSh0KSl9aWYoaS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZC5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKSxpLmV4aXQoKS5lYWNoKChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK2QuZ3JvdXBDbGFzc05hbWUpLmVhY2gobCl9KSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoKXt2YXIgcz1pLnNlbGVjdEFsbCgiZy4iK2QuZ3JvdXBDbGFzc05hbWUpLmRhdGEocix2KTtzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChkLmdyb3VwQ2xhc3NOYW1lLCEwKSxzLmV4aXQoKS5lYWNoKGwpLnJlbW92ZSgpO2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgdT1yW2NdO3koZSx1KX1zLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpOyFmdW5jdGlvbihlKXt2YXIgdD1lLl9kaW1zO3QubGFiZWxTdGVwcz1bXTtmb3IodmFyIHI9ZS5fc3RlcENvdW50LG49MDtuPHI7bis9dC5sYWJlbFN0cmlkZSl0LmxhYmVsU3RlcHMucHVzaCh7ZnJhY3Rpb246bi8oci0xKSxzdGVwOmUuX3Zpc2libGVTdGVwc1tuXX0pfSh0KSxhLm1hbmFnZUNvbW1hbmRPYnNlcnZlcihlLHQsdC5fdmlzaWJsZVN0ZXBzLChmdW5jdGlvbih0KXt2YXIgbj1yLmRhdGEoKVswXTtuLmFjdGl2ZSE9PXQuaW5kZXgmJihuLl9kcmFnZ2luZ3x8TShlLHIsbix0LmluZGV4LCExLCEwKSl9KSksZnVuY3Rpb24oZSx0LHIpeyhyLnN0ZXBzW3IuYWN0aXZlXXx8e30pLnZpc2libGV8fChyLmFjdGl2ZT1yLl92aXNpYmxlU3RlcHNbMF0uX2luZGV4KTt0LmNhbGwoeCxyKS5jYWxsKE8scikuY2FsbCh3LHIpLmNhbGwoQSxyKS5jYWxsKEMsZSxyKS5jYWxsKGIsZSxyKTt2YXIgbj1yLl9kaW1zO28uc2V0VHJhbnNsYXRlKHQsbi5seCtyLnBhZC5sLG4ubHkrci5wYWQudCksdC5jYWxsKEwsciwhMSksdC5jYWxsKHgscil9KGUsbi5zZWxlY3QodGhpcyksdCl9KSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IjoyMDcsIi4uLy4uL2xpYiI6MjMyLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjI1NSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjY4LCIuLi8uLi9wbG90cy9wbG90cyI6MzE2LCIuLi9jb2xvciI6MTAyLCIuLi9kcmF3aW5nIjoxMjQsIi4vY29uc3RhbnRzIjoxOTYsIkBwbG90bHkvZDMiOjExfV0sMTk5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vY29uc3RhbnRzIik7dC5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6bi5uYW1lLGxheW91dEF0dHJpYnV0ZXM6ZSgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6ZSgiLi9kZWZhdWx0cyIpLGRyYXc6ZSgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6MTk1LCIuL2NvbnN0YW50cyI6MTk2LCIuL2RlZmF1bHRzIjoxOTcsIi4vZHJhdyI6MTk4fV0sMjAwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoImZhc3QtaXNudW1lcmljIiksaT1lKCIuLi8uLi9wbG90cy9wbG90cyIpLG89ZSgiLi4vLi4vcmVnaXN0cnkiKSxsPWUoIi4uLy4uL2xpYiIpLHM9bC5zdHJUcmFuc2xhdGUsYz1lKCIuLi9kcmF3aW5nIiksdT1lKCIuLi9jb2xvciIpLGQ9ZSgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj1lKCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikscD1lKCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuT1BQT1NJVEVfU0lERSxoPS8gW1hZXVswLTldKiAvO3QuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbihlLHQscil7dmFyIGcsbT1yLnByb3BDb250YWluZXIsdj1yLnByb3BOYW1lLHk9ci5wbGFjZWhvbGRlcix4PXIudHJhY2VJbmRleCxiPXIuYXZvaWR8fHt9LF89ci5hdHRyaWJ1dGVzLHc9ci50cmFuc2Zvcm0sVD1yLmNvbnRhaW5lckdyb3VwLE09ZS5fZnVsbExheW91dCxrPTEsQT0hMSxMPW0udGl0bGUsUz0oTCYmTC50ZXh0P0wudGV4dDoiIikudHJpbSgpLEQ9TCYmTC5mb250P0wuZm9udDp7fSxDPUQuZmFtaWx5LE89RC5zaXplLFA9RC5jb2xvcjsidGl0bGUudGV4dCI9PT12P2c9InRpdGxlVGV4dCI6LTEhPT12LmluZGV4T2YoImF4aXMiKT9nPSJheGlzVGl0bGVUZXh0Ijp2LmluZGV4T2YoITApJiYoZz0iY29sb3JiYXJUaXRsZVRleHQiKTt2YXIgST1lLl9jb250ZXh0LmVkaXRzW2ddOyIiPT09Uz9rPTA6Uy5yZXBsYWNlKGgsIiAlICIpPT09eS5yZXBsYWNlKGgsIiAlICIpJiYoaz0uMixBPSEwLEl8fChTPSIiKSksci5fbWV0YT9TPWwudGVtcGxhdGVTdHJpbmcoUyxyLl9tZXRhKTpNLl9tZXRhJiYoUz1sLnRlbXBsYXRlU3RyaW5nKFMsTS5fbWV0YSkpO3ZhciBSLHo9U3x8STtUfHwoVD1sLmVuc3VyZVNpbmdsZShNLl9pbmZvbGF5ZXIsImciLCJnLSIrdCksUj1NLl9oQ29sb3JiYXJNb3ZlVGl0bGUpO3ZhciBOPVQuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YSh6P1swXTpbXSk7aWYoTi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLE4udGV4dChTKS5hdHRyKCJjbGFzcyIsdCksTi5leGl0KCkucmVtb3ZlKCksIXopcmV0dXJuIFQ7ZnVuY3Rpb24gRihlKXtsLnN5bmNPckFzeW5jKFtFLGpdLGUpfWZ1bmN0aW9uIEUodCl7dmFyIHI7cmV0dXJuIXcmJlImJih3PXt9KSx3PyhyPSIiLHcucm90YXRlJiYocis9InJvdGF0ZSgiK1t3LnJvdGF0ZSxfLngsXy55XSsiKSIpLCh3Lm9mZnNldHx8UikmJihyKz1zKDAsKHcub2Zmc2V0fHwwKS0oUnx8MCkpKSk6cj1udWxsLHQuYXR0cigidHJhbnNmb3JtIixyKSx0LnN0eWxlKHsiZm9udC1mYW1pbHkiOkMsImZvbnQtc2l6ZSI6bi5yb3VuZChPLDIpKyJweCIsZmlsbDp1LnJnYihQKSxvcGFjaXR5OmsqdS5vcGFjaXR5KFApLCJmb250LXdlaWdodCI6aS5mb250V2VpZ2h0fSkuYXR0cihfKS5jYWxsKGQuY29udmVydFRvVHNwYW5zLGUpLGkucHJldmlvdXNQcm9taXNlcyhlKX1mdW5jdGlvbiBqKGUpe3ZhciB0PW4uc2VsZWN0KGUubm9kZSgpLnBhcmVudE5vZGUpO2lmKGImJmIuc2VsZWN0aW9uJiZiLnNpZGUmJlMpe3QuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgcj1wW2Iuc2lkZV0saT0ibGVmdCI9PT1iLnNpZGV8fCJ0b3AiPT09Yi5zaWRlPy0xOjEsbz1hKGIucGFkKT9iLnBhZDoyLHU9Yy5iQm94KHQubm9kZSgpKSxkPXtsZWZ0OjAsdG9wOjAscmlnaHQ6TS53aWR0aCxib3R0b206TS5oZWlnaHR9LGY9Yi5tYXhTaGlmdHx8aSooZFtiLnNpZGVdLXVbYi5zaWRlXSksaD0wO2lmKGY8MCloPWY7ZWxzZXt2YXIgZz1iLm9mZnNldExlZnR8fDAsbT1iLm9mZnNldFRvcHx8MDt1LmxlZnQtPWcsdS5yaWdodC09Zyx1LnRvcC09bSx1LmJvdHRvbS09bSxiLnNlbGVjdGlvbi5lYWNoKChmdW5jdGlvbigpe3ZhciBlPWMuYkJveCh0aGlzKTtsLmJCb3hJbnRlcnNlY3QodSxlLG8pJiYoaD1NYXRoLm1heChoLGkqKGVbYi5zaWRlXS11W3JdKStvKSl9KSksaD1NYXRoLm1pbihmLGgpfWlmKGg+MHx8ZjwwKXt2YXIgdj17bGVmdDpbLWgsMF0scmlnaHQ6W2gsMF0sdG9wOlswLC1oXSxib3R0b206WzAsaF19W2Iuc2lkZV07dC5hdHRyKCJ0cmFuc2Zvcm0iLHModlswXSx2WzFdKSl9fX1yZXR1cm4gTi5jYWxsKEYpLEkmJihTP04ub24oIi5vcGFjaXR5IixudWxsKTooaz0wLEE9ITAsTi50ZXh0KHkpLm9uKCJtb3VzZW92ZXIub3BhY2l0eSIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGYuU0hPV19QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDEpfSkpLm9uKCJtb3VzZW91dC5vcGFjaXR5IiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZi5ISURFX1BMQUNFSE9MREVSKS5zdHlsZSgib3BhY2l0eSIsMCl9KSkpLE4uY2FsbChkLm1ha2VFZGl0YWJsZSx7Z2Q6ZX0pLm9uKCJlZGl0IiwoZnVuY3Rpb24odCl7dm9pZCAwIT09eD9vLmNhbGwoIl9ndWlSZXN0eWxlIixlLHYsdCx4KTpvLmNhbGwoIl9ndWlSZWxheW91dCIsZSx2LHQpfSkpLm9uKCJjYW5jZWwiLChmdW5jdGlvbigpe3RoaXMudGV4dCh0aGlzLmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiKSkuY2FsbChGKX0pKS5vbigiaW5wdXQiLChmdW5jdGlvbihlKXt0aGlzLnRleHQoZXx8IiAiKS5jYWxsKGQucG9zaXRpb25UZXh0LF8ueCxfLnkpfSkpKSxOLmNsYXNzZWQoImpzLXBsYWNlaG9sZGVyIixBKSxUfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6MjA3LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjoyMTEsIi4uLy4uL2xpYiI6MjMyLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjI1NSwiLi4vLi4vcGxvdHMvcGxvdHMiOjMxNiwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi4vY29sb3IiOjEwMiwiLi4vZHJhd2luZyI6MTI0LCJAcGxvdGx5L2QzIjoxMSwiZmFzdC1pc251bWVyaWMiOjE3fV0sMjAxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9ZSgiLi4vY29sb3IvYXR0cmlidXRlcyIpLGk9ZSgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz1lKCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbD1lKCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyIpLHM9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGM9cygiYnV0dG9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiJ9LG1ldGhvZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmVzdHlsZSIsInJlbGF5b3V0IiwiYW5pbWF0ZSIsInVwZGF0ZSIsInNraXAiXSxkZmx0OiJyZXN0eWxlIn0sYXJnczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In1dfSxhcmdzMjp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In1dfSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxleGVjdXRlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0pO3QuZXhwb3J0cz1vKHMoInVwZGF0ZW1lbnUiLHtfYXJyYXlBdHRyUmVnZXhwczpbL151cGRhdGVtZW51c1xbKDB8WzEtOV1bMC05XSspXF1cLmJ1dHRvbnMvXSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZHJvcGRvd24iLCJidXR0b25zIl0sZGZsdDoiZHJvcGRvd24ifSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJyaWdodCIsInVwIiwiZG93biJdLGRmbHQ6ImRvd24ifSxhY3RpdmU6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjB9LHNob3dhY3RpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGJ1dHRvbnM6Yyx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0Oi0uMDV9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJyaWdodCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MX0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHBhZDppKGwoe2VkaXRUeXBlOiJhcnJheWRyYXcifSkse30pLGZvbnQ6bih7fSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5ib3JkZXJMaW5lfSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9fSksImFycmF5ZHJhdyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjIyNiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6MjYxLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyNjgsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6MzEwLCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyI6MzE1LCIuLi9jb2xvci9hdHRyaWJ1dGVzIjoxMDF9XSwyMDI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtuYW1lOiJ1cGRhdGVtZW51cyIsY29udGFpbmVyQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWNvbnRhaW5lciIsaGVhZGVyR3JvdXBDbGFzc05hbWU6InVwZGF0ZW1lbnUtaGVhZGVyLWdyb3VwIixoZWFkZXJDbGFzc05hbWU6InVwZGF0ZW1lbnUtaGVhZGVyIixoZWFkZXJBcnJvd0NsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXItYXJyb3ciLGRyb3Bkb3duQnV0dG9uR3JvdXBDbGFzc05hbWU6InVwZGF0ZW1lbnUtZHJvcGRvd24tYnV0dG9uLWdyb3VwIixkcm9wZG93bkJ1dHRvbkNsYXNzTmFtZToidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24iLGJ1dHRvbkNsYXNzTmFtZToidXBkYXRlbWVudS1idXR0b24iLGl0ZW1SZWN0Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWl0ZW0tcmVjdCIsaXRlbVRleHRDbGFzc05hbWU6InVwZGF0ZW1lbnUtaXRlbS10ZXh0IixtZW51SW5kZXhBdHRyTmFtZToidXBkYXRlbWVudS1hY3RpdmUtaW5kZXgiLGF1dG9NYXJnaW5JZFJvb3Q6InVwZGF0ZW1lbnUtIixibGFua0hlYWRlck9wdHM6e2xhYmVsOiIgICJ9LG1pbldpZHRoOjMwLG1pbkhlaWdodDozMCx0ZXh0UGFkWDoyNCxhcnJvd1BhZFg6MTYscng6MixyeToyLHRleHRPZmZzZXRYOjEyLHRleHRPZmZzZXRZOjMsYXJyb3dPZmZzZXRYOjQsZ2FwQnV0dG9uSGVhZGVyOjUsZ2FwQnV0dG9uOjIsYWN0aXZlQ29sb3I6IiNGNEZBRkYiLGhvdmVyQ29sb3I6IiNGNEZBRkYiLGFycm93U3ltYm9sOntsZWZ0OiJcdTI1YzQiLHJpZ2h0OiJcdTI1YmEiLHVwOiJcdTI1YjIiLGRvd246Ilx1MjViYyJ9fX0se31dLDIwMzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGk9ZSgiLi9hdHRyaWJ1dGVzIiksbz1lKCIuL2NvbnN0YW50cyIpLm5hbWUsbD1pLmJ1dHRvbnM7ZnVuY3Rpb24gcyhlLHQscil7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZShlLHQsaSxyLGEpfW8oInZpc2libGUiLGEoZSx0LHtuYW1lOiJidXR0b25zIixoYW5kbGVJdGVtRGVmYXVsdHM6Y30pLmxlbmd0aD4wKSYmKG8oImFjdGl2ZSIpLG8oImRpcmVjdGlvbiIpLG8oInR5cGUiKSxvKCJzaG93YWN0aXZlIiksbygieCIpLG8oInkiKSxuLm5vbmVPckFsbChlLHQsWyJ4IiwieSJdKSxvKCJ4YW5jaG9yIiksbygieWFuY2hvciIpLG8oInBhZC50IiksbygicGFkLnIiKSxvKCJwYWQuYiIpLG8oInBhZC5sIiksbi5jb2VyY2VGb250KG8sImZvbnQiLHIuZm9udCksbygiYmdjb2xvciIsci5wYXBlcl9iZ2NvbG9yKSxvKCJib3JkZXJjb2xvciIpLG8oImJvcmRlcndpZHRoIikpfWZ1bmN0aW9uIGMoZSx0KXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKGUsdCxsLHIsYSl9cigidmlzaWJsZSIsInNraXAiPT09ZS5tZXRob2R8fEFycmF5LmlzQXJyYXkoZS5hcmdzKSkmJihyKCJtZXRob2QiKSxyKCJhcmdzIikscigiYXJnczIiKSxyKCJsYWJlbCIpLHIoImV4ZWN1dGUiKSl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7YShlLHQse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6c30pfX0seyIuLi8uLi9saWIiOjIzMiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjoyNzQsIi4vYXR0cmlidXRlcyI6MjAxLCIuL2NvbnN0YW50cyI6MjAyfV0sMjA0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaT1lKCIuLi9jb2xvciIpLG89ZSgiLi4vZHJhd2luZyIpLGw9ZSgiLi4vLi4vbGliIikscz1lKCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcix1PWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsZD1lKCIuL2NvbnN0YW50cyIpLGY9ZSgiLi9zY3JvbGxib3giKTtmdW5jdGlvbiBwKGUpe3JldHVybiBlLl9pbmRleH1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuK2UuYXR0cihkLm1lbnVJbmRleEF0dHJOYW1lKT09PXQuX2luZGV4fWZ1bmN0aW9uIGcoZSx0LHIsbixhLGksbyxsKXt0LmFjdGl2ZT1vLGMoZS5sYXlvdXQsZC5uYW1lLHQpLmFwcGx5VXBkYXRlKCJhY3RpdmUiLG8pLCJidXR0b25zIj09PXQudHlwZT92KGUsbixudWxsLG51bGwsdCk6ImRyb3Bkb3duIj09PXQudHlwZSYmKGEuYXR0cihkLm1lbnVJbmRleEF0dHJOYW1lLCItMSIpLG0oZSxuLGEsaSx0KSxsfHx2KGUsbixhLGksdCkpfWZ1bmN0aW9uIG0oZSx0LHIsbixhKXt2YXIgaT1sLmVuc3VyZVNpbmdsZSh0LCJnIixkLmhlYWRlckNsYXNzTmFtZSwoZnVuY3Rpb24oZSl7ZS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKSxzPWEuX2RpbXMsYz1hLmFjdGl2ZSx1PWEuYnV0dG9uc1tjXXx8ZC5ibGFua0hlYWRlck9wdHMsZj17eTphLnBhZC50LHlQYWQ6MCx4OmEucGFkLmwseFBhZDowLGluZGV4OjB9LHA9e3dpZHRoOnMuaGVhZGVyV2lkdGgsaGVpZ2h0OnMuaGVhZGVySGVpZ2h0fTtpLmNhbGwoeSxhLHUsZSkuY2FsbChBLGEsZixwKSxsLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IixkLmhlYWRlckFycm93Q2xhc3NOYW1lLChmdW5jdGlvbihlKXtlLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuY2FsbChvLmZvbnQsYS5mb250KS50ZXh0KGQuYXJyb3dTeW1ib2xbYS5kaXJlY3Rpb25dKX0pKS5hdHRyKHt4OnMuaGVhZGVyV2lkdGgtZC5hcnJvd09mZnNldFgrYS5wYWQubCx5OnMuaGVhZGVySGVpZ2h0LzIrZC50ZXh0T2Zmc2V0WSthLnBhZC50fSksaS5vbigiY2xpY2siLChmdW5jdGlvbigpe3IuY2FsbChMLFN0cmluZyhoKHIsYSk/LTE6YS5faW5kZXgpKSx2KGUsdCxyLG4sYSl9KSksaS5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXtpLmNhbGwodyl9KSksaS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2kuY2FsbChULGEpfSkpLG8uc2V0VHJhbnNsYXRlKHQscy5seCxzLmx5KX1mdW5jdGlvbiB2KGUsdCxyLGksbyl7cnx8KHI9dCkuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKTt2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4tMT09K2UuYXR0cihkLm1lbnVJbmRleEF0dHJOYW1lKX0ocikmJiJidXR0b25zIiE9PW8udHlwZT9bXTpvLmJ1dHRvbnMsYz0iZHJvcGRvd24iPT09by50eXBlP2QuZHJvcGRvd25CdXR0b25DbGFzc05hbWU6ZC5idXR0b25DbGFzc05hbWUsdT1yLnNlbGVjdEFsbCgiZy4iK2MpLmRhdGEobC5maWx0ZXJWaXNpYmxlKHMpKSxmPXUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGMsITApLHA9dS5leGl0KCk7ImRyb3Bkb3duIj09PW8udHlwZT8oZi5hdHRyKCJvcGFjaXR5IiwiMCIpLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMSIpLHAudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikucmVtb3ZlKCkpOnAucmVtb3ZlKCk7dmFyIGg9MCxtPTAsdj1vLl9kaW1zLHg9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2Yoby5kaXJlY3Rpb24pOyJkcm9wZG93biI9PT1vLnR5cGUmJih4P209di5oZWFkZXJIZWlnaHQrZC5nYXBCdXR0b25IZWFkZXI6aD12LmhlYWRlcldpZHRoK2QuZ2FwQnV0dG9uSGVhZGVyKSwiZHJvcGRvd24iPT09by50eXBlJiYidXAiPT09by5kaXJlY3Rpb24mJihtPS1kLmdhcEJ1dHRvbkhlYWRlcitkLmdhcEJ1dHRvbi12Lm9wZW5IZWlnaHQpLCJkcm9wZG93biI9PT1vLnR5cGUmJiJsZWZ0Ij09PW8uZGlyZWN0aW9uJiYoaD0tZC5nYXBCdXR0b25IZWFkZXIrZC5nYXBCdXR0b24tdi5vcGVuV2lkdGgpO3ZhciBiPXt4OnYubHgraCtvLnBhZC5sLHk6di5seSttK28ucGFkLnQseVBhZDpkLmdhcEJ1dHRvbix4UGFkOmQuZ2FwQnV0dG9uLGluZGV4OjB9LE09e2w6Yi54K28uYm9yZGVyd2lkdGgsdDpiLnkrby5ib3JkZXJ3aWR0aH07dS5lYWNoKChmdW5jdGlvbihsLHMpe3ZhciBjPW4uc2VsZWN0KHRoaXMpO2MuY2FsbCh5LG8sbCxlKS5jYWxsKEEsbyxiKSxjLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7bi5ldmVudC5kZWZhdWx0UHJldmVudGVkfHwobC5leGVjdXRlJiYobC5hcmdzMiYmby5hY3RpdmU9PT1zPyhnKGUsbywwLHQscixpLC0xKSxhLmV4ZWN1dGVBUElDb21tYW5kKGUsbC5tZXRob2QsbC5hcmdzMikpOihnKGUsbywwLHQscixpLHMpLGEuZXhlY3V0ZUFQSUNvbW1hbmQoZSxsLm1ldGhvZCxsLmFyZ3MpKSksZS5lbWl0KCJwbG90bHlfYnV0dG9uY2xpY2tlZCIse21lbnU6byxidXR0b246bCxhY3RpdmU6by5hY3RpdmV9KSl9KSksYy5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXtjLmNhbGwodyl9KSksYy5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2MuY2FsbChULG8pLHUuY2FsbChfLG8pfSkpfSkpLHUuY2FsbChfLG8pLHg/KE0udz1NYXRoLm1heCh2Lm9wZW5XaWR0aCx2LmhlYWRlcldpZHRoKSxNLmg9Yi55LU0udCk6KE0udz1iLngtTS5sLE0uaD1NYXRoLm1heCh2Lm9wZW5IZWlnaHQsdi5oZWFkZXJIZWlnaHQpKSxNLmRpcmVjdGlvbj1vLmRpcmVjdGlvbixpJiYodS5zaXplKCk/ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvLGwscyxjPWEuZGlyZWN0aW9uLHU9InVwIj09PWN8fCJkb3duIj09PWMsZj1hLl9kaW1zLHA9YS5hY3RpdmU7aWYodSlmb3IobD0wLHM9MDtzPHA7cysrKWwrPWYuaGVpZ2h0c1tzXStkLmdhcEJ1dHRvbjtlbHNlIGZvcihvPTAscz0wO3M8cDtzKyspbys9Zi53aWR0aHNbc10rZC5nYXBCdXR0b247bi5lbmFibGUoaSxvLGwpLG4uaGJhciYmbi5oYmFyLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIik7bi52YmFyJiZuLnZiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKX0oMCwwLDAsaSxvLE0pOmZ1bmN0aW9uKGUpe3ZhciB0PSEhZS5oYmFyLHI9ISFlLnZiYXI7dCYmZS5oYmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7dD0hMSxyfHxlLmRpc2FibGUoKX0pKTtyJiZlLnZiYXIudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtyPSExLHR8fGUuZGlzYWJsZSgpfSkpfShpKSl9ZnVuY3Rpb24geShlLHQscixuKXtlLmNhbGwoeCx0KS5jYWxsKGIsdCxyLG4pfWZ1bmN0aW9uIHgoZSx0KXtsLmVuc3VyZVNpbmdsZShlLCJyZWN0IixkLml0ZW1SZWN0Q2xhc3NOYW1lLChmdW5jdGlvbihlKXtlLmF0dHIoe3J4OmQucngscnk6ZC5yeSwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5jYWxsKGkuc3Ryb2tlLHQuYm9yZGVyY29sb3IpLmNhbGwoaS5maWxsLHQuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsdC5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBiKGUsdCxyLG4pe3ZhciBhPWwuZW5zdXJlU2luZ2xlKGUsInRleHQiLGQuaXRlbVRleHRDbGFzc05hbWUsKGZ1bmN0aW9uKGUpe2UuYXR0cih7InRleHQtYW5jaG9yIjoic3RhcnQiLCJkYXRhLW5vdGV4IjoxfSl9KSksaT1yLmxhYmVsLGM9bi5fZnVsbExheW91dC5fbWV0YTtjJiYoaT1sLnRlbXBsYXRlU3RyaW5nKGksYykpLGEuY2FsbChvLmZvbnQsdC5mb250KS50ZXh0KGkpLmNhbGwocy5jb252ZXJ0VG9Uc3BhbnMsbil9ZnVuY3Rpb24gXyhlLHQpe3ZhciByPXQuYWN0aXZlO2UuZWFjaCgoZnVuY3Rpb24oZSxhKXt2YXIgbz1uLnNlbGVjdCh0aGlzKTthPT09ciYmdC5zaG93YWN0aXZlJiZvLnNlbGVjdCgicmVjdC4iK2QuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoaS5maWxsLGQuYWN0aXZlQ29sb3IpfSkpfWZ1bmN0aW9uIHcoZSl7ZS5zZWxlY3QoInJlY3QuIitkLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGkuZmlsbCxkLmhvdmVyQ29sb3IpfWZ1bmN0aW9uIFQoZSx0KXtlLnNlbGVjdCgicmVjdC4iK2QuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoaS5maWxsLHQuYmdjb2xvcil9ZnVuY3Rpb24gTShlLHQpe3ZhciByPXQuX2RpbXM9e3dpZHRoMTowLGhlaWdodDE6MCxoZWlnaHRzOltdLHdpZHRoczpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCxvcGVuV2lkdGg6MCxvcGVuSGVpZ2h0OjAsbHg6MCxseTowfSxpPW8udGVzdGVyLnNlbGVjdEFsbCgiZy4iK2QuZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLmRhdGEobC5maWx0ZXJWaXNpYmxlKHQuYnV0dG9ucykpO2kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGQuZHJvcGRvd25CdXR0b25DbGFzc05hbWUsITApO3ZhciBjPS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKHQuZGlyZWN0aW9uKTtpLmVhY2goKGZ1bmN0aW9uKGEsaSl7dmFyIGw9bi5zZWxlY3QodGhpcyk7bC5jYWxsKHksdCxhLGUpO3ZhciBmPWwuc2VsZWN0KCIuIitkLml0ZW1UZXh0Q2xhc3NOYW1lKSxwPWYubm9kZSgpJiZvLmJCb3goZi5ub2RlKCkpLndpZHRoLGg9TWF0aC5tYXgocCtkLnRleHRQYWRYLGQubWluV2lkdGgpLGc9dC5mb250LnNpemUqdSxtPXMubGluZUNvdW50KGYpLHY9TWF0aC5tYXgoZyptLGQubWluSGVpZ2h0KStkLnRleHRPZmZzZXRZO3Y9TWF0aC5jZWlsKHYpLGg9TWF0aC5jZWlsKGgpLHIud2lkdGhzW2ldPWgsci5oZWlnaHRzW2ldPXYsci5oZWlnaHQxPU1hdGgubWF4KHIuaGVpZ2h0MSx2KSxyLndpZHRoMT1NYXRoLm1heChyLndpZHRoMSxoKSxjPyhyLnRvdGFsV2lkdGg9TWF0aC5tYXgoci50b3RhbFdpZHRoLGgpLHIub3BlbldpZHRoPXIudG90YWxXaWR0aCxyLnRvdGFsSGVpZ2h0Kz12K2QuZ2FwQnV0dG9uLHIub3BlbkhlaWdodCs9ditkLmdhcEJ1dHRvbik6KHIudG90YWxXaWR0aCs9aCtkLmdhcEJ1dHRvbixyLm9wZW5XaWR0aCs9aCtkLmdhcEJ1dHRvbixyLnRvdGFsSGVpZ2h0PU1hdGgubWF4KHIudG90YWxIZWlnaHQsdiksci5vcGVuSGVpZ2h0PXIudG90YWxIZWlnaHQpfSkpLGM/ci50b3RhbEhlaWdodC09ZC5nYXBCdXR0b246ci50b3RhbFdpZHRoLT1kLmdhcEJ1dHRvbixyLmhlYWRlcldpZHRoPXIud2lkdGgxK2QuYXJyb3dQYWRYLHIuaGVhZGVySGVpZ2h0PXIuaGVpZ2h0MSwiZHJvcGRvd24iPT09dC50eXBlJiYoYz8oci53aWR0aDErPWQuYXJyb3dQYWRYLHIudG90YWxIZWlnaHQ9ci5oZWlnaHQxKTpyLnRvdGFsV2lkdGg9ci53aWR0aDEsci50b3RhbFdpZHRoKz1kLmFycm93UGFkWCksaS5yZW1vdmUoKTt2YXIgZj1yLnRvdGFsV2lkdGgrdC5wYWQubCt0LnBhZC5yLHA9ci50b3RhbEhlaWdodCt0LnBhZC50K3QucGFkLmIsaD1lLl9mdWxsTGF5b3V0Ll9zaXplO3IubHg9aC5sK2gudyp0Lngsci5seT1oLnQraC5oKigxLXQueSk7dmFyIGc9ImxlZnQiO2wuaXNSaWdodEFuY2hvcih0KSYmKHIubHgtPWYsZz0icmlnaHQiKSxsLmlzQ2VudGVyQW5jaG9yKHQpJiYoci5seC09Zi8yLGc9ImNlbnRlciIpO3ZhciBtPSJ0b3AiO2wuaXNCb3R0b21BbmNob3IodCkmJihyLmx5LT1wLG09ImJvdHRvbSIpLGwuaXNNaWRkbGVBbmNob3IodCkmJihyLmx5LT1wLzIsbT0ibWlkZGxlIiksci50b3RhbFdpZHRoPU1hdGguY2VpbChyLnRvdGFsV2lkdGgpLHIudG90YWxIZWlnaHQ9TWF0aC5jZWlsKHIudG90YWxIZWlnaHQpLHIubHg9TWF0aC5yb3VuZChyLmx4KSxyLmx5PU1hdGgucm91bmQoci5seSksYS5hdXRvTWFyZ2luKGUsayh0KSx7eDp0LngseTp0LnksbDpmKih7cmlnaHQ6MSxjZW50ZXI6LjV9W2ddfHwwKSxyOmYqKHtsZWZ0OjEsY2VudGVyOi41fVtnXXx8MCksYjpwKih7dG9wOjEsbWlkZGxlOi41fVttXXx8MCksdDpwKih7Ym90dG9tOjEsbWlkZGxlOi41fVttXXx8MCl9KX1mdW5jdGlvbiBrKGUpe3JldHVybiBkLmF1dG9NYXJnaW5JZFJvb3QrZS5faW5kZXh9ZnVuY3Rpb24gQShlLHQscixuKXtuPW58fHt9O3ZhciBhPWUuc2VsZWN0KCIuIitkLml0ZW1SZWN0Q2xhc3NOYW1lKSxpPWUuc2VsZWN0KCIuIitkLml0ZW1UZXh0Q2xhc3NOYW1lKSxsPXQuYm9yZGVyd2lkdGgsYz1yLmluZGV4LGY9dC5fZGltcztvLnNldFRyYW5zbGF0ZShlLGwrci54LGwrci55KTt2YXIgcD0tMSE9PVsidXAiLCJkb3duIl0uaW5kZXhPZih0LmRpcmVjdGlvbiksaD1uLmhlaWdodHx8KHA/Zi5oZWlnaHRzW2NdOmYuaGVpZ2h0MSk7YS5hdHRyKHt4OjAseTowLHdpZHRoOm4ud2lkdGh8fChwP2Yud2lkdGgxOmYud2lkdGhzW2NdKSxoZWlnaHQ6aH0pO3ZhciBnPXQuZm9udC5zaXplKnUsbT0ocy5saW5lQ291bnQoaSktMSkqZy8yO3MucG9zaXRpb25UZXh0KGksZC50ZXh0T2Zmc2V0WCxoLzItbStkLnRleHRPZmZzZXRZKSxwP3IueSs9Zi5oZWlnaHRzW2NdK3IueVBhZDpyLngrPWYud2lkdGhzW2NdK3IueFBhZCxyLmluZGV4Kyt9ZnVuY3Rpb24gTChlLHQpe2UuYXR0cihkLm1lbnVJbmRleEF0dHJOYW1lLHR8fCItMSIpLnNlbGVjdEFsbCgiZy4iK2QuZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLnJlbW92ZSgpfXQuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9bC5maWx0ZXJWaXNpYmxlKHRbZC5uYW1lXSk7ZnVuY3Rpb24gaSh0KXthLmF1dG9NYXJnaW4oZSxrKHQpKX12YXIgbz10Ll9tZW51bGF5ZXIuc2VsZWN0QWxsKCJnLiIrZC5jb250YWluZXJDbGFzc05hbWUpLmRhdGEoci5sZW5ndGg+MD9bMF06W10pO2lmKG8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGQuY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5zdHlsZSgiY3Vyc29yIiwicG9pbnRlciIpLG8uZXhpdCgpLmVhY2goKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLiIrZC5oZWFkZXJHcm91cENsYXNzTmFtZSkuZWFjaChpKX0pKS5yZW1vdmUoKSwwIT09ci5sZW5ndGgpe3ZhciBzPW8uc2VsZWN0QWxsKCJnLiIrZC5oZWFkZXJHcm91cENsYXNzTmFtZSkuZGF0YShyLHApO3MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGQuaGVhZGVyR3JvdXBDbGFzc05hbWUsITApO2Zvcih2YXIgYz1sLmVuc3VyZVNpbmdsZShvLCJnIixkLmRyb3Bkb3duQnV0dG9uR3JvdXBDbGFzc05hbWUsKGZ1bmN0aW9uKGUpe2Uuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSksdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgeT1yW3VdO00oZSx5KX12YXIgeD0idXBkYXRlbWVudXMiK3QuX3VpZCxiPW5ldyBmKGUsYyx4KTtzLmVudGVyKCkuc2l6ZSgpJiYoYy5ub2RlKCkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjLm5vZGUoKSksYy5jYWxsKEwpKSxzLmV4aXQoKS5lYWNoKChmdW5jdGlvbihlKXtjLmNhbGwoTCksaShlKX0pKS5yZW1vdmUoKSxzLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ImRyb3Bkb3duIj09PXQudHlwZT9jOm51bGw7YS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIoZSx0LHQuYnV0dG9ucywoZnVuY3Rpb24obil7ZyhlLHQsdC5idXR0b25zW24uaW5kZXhdLHIsaSxiLG4uaW5kZXgsITApfSkpLCJkcm9wZG93biI9PT10LnR5cGU/KG0oZSxyLGMsYix0KSxoKGMsdCkmJnYoZSxyLGMsYix0KSk6dihlLHIsbnVsbCxudWxsLHQpfSkpfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6MjA3LCIuLi8uLi9saWIiOjIzMiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjoyNTUsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjI2OCwiLi4vLi4vcGxvdHMvcGxvdHMiOjMxNiwiLi4vY29sb3IiOjEwMiwiLi4vZHJhd2luZyI6MTI0LCIuL2NvbnN0YW50cyI6MjAyLCIuL3Njcm9sbGJveCI6MjA2LCJAcGxvdGx5L2QzIjoxMX1dLDIwNTpbZnVuY3Rpb24oZSx0LHIpe2FyZ3VtZW50c1s0XVsxOTldWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL2F0dHJpYnV0ZXMiOjIwMSwiLi9jb25zdGFudHMiOjIwMiwiLi9kZWZhdWx0cyI6MjAzLCIuL2RyYXciOjIwNCxkdXA6MTk5fV0sMjA2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1sO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4uL2NvbG9yIiksaT1lKCIuLi9kcmF3aW5nIiksbz1lKCIuLi8uLi9saWIiKTtmdW5jdGlvbiBsKGUsdCxyKXt0aGlzLmdkPWUsdGhpcy5jb250YWluZXI9dCx0aGlzLmlkPXIsdGhpcy5wb3NpdGlvbj1udWxsLHRoaXMudHJhbnNsYXRlWD1udWxsLHRoaXMudHJhbnNsYXRlWT1udWxsLHRoaXMuaGJhcj1udWxsLHRoaXMudmJhcj1udWxsLHRoaXMuYmc9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJveC1iZyIpLmRhdGEoWzBdKSx0aGlzLmJnLmV4aXQoKS5vbigiLmRyYWciLG51bGwpLm9uKCJ3aGVlbCIsbnVsbCkucmVtb3ZlKCksdGhpcy5iZy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJveC1iZyIsITApLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoe29wYWNpdHk6MCx4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9KX1sLmJhcldpZHRoPTIsbC5iYXJMZW5ndGg9MjAsbC5iYXJSYWRpdXM9MixsLmJhclBhZD0xLGwuYmFyQ29sb3I9IiM4MDhCQTQiLGwucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbihlLHQscil7dmFyIG89dGhpcy5nZC5fZnVsbExheW91dCxzPW8ud2lkdGgsYz1vLmhlaWdodDt0aGlzLnBvc2l0aW9uPWU7dmFyIHUsZCxmLHAsaD10aGlzLnBvc2l0aW9uLmwsZz10aGlzLnBvc2l0aW9uLncsbT10aGlzLnBvc2l0aW9uLnQsdj10aGlzLnBvc2l0aW9uLmgseT10aGlzLnBvc2l0aW9uLmRpcmVjdGlvbix4PSJkb3duIj09PXksYj0ibGVmdCI9PT15LF89InVwIj09PXksdz1nLFQ9djt4fHxifHwicmlnaHQiPT09eXx8X3x8KHRoaXMucG9zaXRpb24uZGlyZWN0aW9uPSJkb3duIix4PSEwKSx4fHxfPyhkPSh1PWgpK3cseD8oZj1tLFQ9KHA9TWF0aC5taW4oZitULGMpKS1mKTpUPShwPW0rVCktKGY9TWF0aC5tYXgocC1ULDApKSk6KHA9KGY9bSkrVCxiP3c9KGQ9aCt3KS0odT1NYXRoLm1heChkLXcsMCkpOih1PWgsdz0oZD1NYXRoLm1pbih1K3cscykpLXUpKSx0aGlzLl9ib3g9e2w6dSx0OmYsdzp3LGg6VH07dmFyIE09Zz53LGs9bC5iYXJMZW5ndGgrMipsLmJhclBhZCxBPWwuYmFyV2lkdGgrMipsLmJhclBhZCxMPWgsUz1tK3Y7UytBPmMmJihTPWMtQSk7dmFyIEQ9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhci1ob3Jpem9udGFsIikuZGF0YShNP1swXTpbXSk7RC5leGl0KCkub24oIi5kcmFnIixudWxsKS5yZW1vdmUoKSxELmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2Nyb2xsYmFyLWhvcml6b250YWwiLCEwKS5jYWxsKGEuZmlsbCxsLmJhckNvbG9yKSxNPyh0aGlzLmhiYXI9RC5hdHRyKHtyeDpsLmJhclJhZGl1cyxyeTpsLmJhclJhZGl1cyx4OkwseTpTLHdpZHRoOmssaGVpZ2h0OkF9KSx0aGlzLl9oYmFyWE1pbj1MK2svMix0aGlzLl9oYmFyVHJhbnNsYXRlTWF4PXctayk6KGRlbGV0ZSB0aGlzLmhiYXIsZGVsZXRlIHRoaXMuX2hiYXJYTWluLGRlbGV0ZSB0aGlzLl9oYmFyVHJhbnNsYXRlTWF4KTt2YXIgQz12PlQsTz1sLmJhcldpZHRoKzIqbC5iYXJQYWQsUD1sLmJhckxlbmd0aCsyKmwuYmFyUGFkLEk9aCtnLFI9bTtJK08+cyYmKEk9cy1PKTt2YXIgej10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc2Nyb2xsYmFyLXZlcnRpY2FsIikuZGF0YShDP1swXTpbXSk7ei5leGl0KCkub24oIi5kcmFnIixudWxsKS5yZW1vdmUoKSx6LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2Nyb2xsYmFyLXZlcnRpY2FsIiwhMCkuY2FsbChhLmZpbGwsbC5iYXJDb2xvciksQz8odGhpcy52YmFyPXouYXR0cih7cng6bC5iYXJSYWRpdXMscnk6bC5iYXJSYWRpdXMseDpJLHk6Uix3aWR0aDpPLGhlaWdodDpQfSksdGhpcy5fdmJhcllNaW49UitQLzIsdGhpcy5fdmJhclRyYW5zbGF0ZU1heD1ULVApOihkZWxldGUgdGhpcy52YmFyLGRlbGV0ZSB0aGlzLl92YmFyWU1pbixkZWxldGUgdGhpcy5fdmJhclRyYW5zbGF0ZU1heCk7dmFyIE49dGhpcy5pZCxGPXUtLjUsRT1DP2QrTysuNTpkKy41LGo9Zi0uNSxIPU0/cCtBKy41OnArLjUsQj1vLl90b3BkZWZzLnNlbGVjdEFsbCgiIyIrTikuZGF0YShNfHxDP1swXTpbXSk7aWYoQi5leGl0KCkucmVtb3ZlKCksQi5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsTikuYXBwZW5kKCJyZWN0IiksTXx8Qz8odGhpcy5fY2xpcFJlY3Q9Qi5zZWxlY3QoInJlY3QiKS5hdHRyKHt4Ok1hdGguZmxvb3IoRikseTpNYXRoLmZsb29yKGopLHdpZHRoOk1hdGguY2VpbChFKS1NYXRoLmZsb29yKEYpLGhlaWdodDpNYXRoLmNlaWwoSCktTWF0aC5mbG9vcihqKX0pLHRoaXMuY29udGFpbmVyLmNhbGwoaS5zZXRDbGlwVXJsLE4sdGhpcy5nZCksdGhpcy5iZy5hdHRyKHt4OmgseTptLHdpZHRoOmcsaGVpZ2h0OnZ9KSk6KHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIi5kcmFnIixudWxsKS5jYWxsKGkuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLE18fEMpe3ZhciBZPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbigpe24uZXZlbnQuc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKX0pKS5vbigiZHJhZyIsdGhpcy5fb25Cb3hEcmFnLmJpbmQodGhpcykpO3RoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIndoZWVsIix0aGlzLl9vbkJveFdoZWVsLmJpbmQodGhpcykpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChZKTt2YXIgVj1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oKXtuLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCksbi5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKX0pKS5vbigiZHJhZyIsdGhpcy5fb25CYXJEcmFnLmJpbmQodGhpcykpO00mJnRoaXMuaGJhci5vbigiLmRyYWciLG51bGwpLmNhbGwoViksQyYmdGhpcy52YmFyLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChWKX10aGlzLnNldFRyYW5zbGF0ZSh0LHIpfSxsLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7KHRoaXMuaGJhcnx8dGhpcy52YmFyKSYmKHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIi5kcmFnIixudWxsKS5jYWxsKGkuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLHRoaXMuaGJhciYmKHRoaXMuaGJhci5vbigiLmRyYWciLG51bGwpLHRoaXMuaGJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCksdGhpcy52YmFyJiYodGhpcy52YmFyLm9uKCIuZHJhZyIsbnVsbCksdGhpcy52YmFyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnZiYXIsZGVsZXRlIHRoaXMuX3ZiYXJZTWluLGRlbGV0ZSB0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX0sbC5wcm90b3R5cGUuX29uQm94RHJhZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMudHJhbnNsYXRlWCx0PXRoaXMudHJhbnNsYXRlWTt0aGlzLmhiYXImJihlLT1uLmV2ZW50LmR4KSx0aGlzLnZiYXImJih0LT1uLmV2ZW50LmR5KSx0aGlzLnNldFRyYW5zbGF0ZShlLHQpfSxsLnByb3RvdHlwZS5fb25Cb3hXaGVlbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMudHJhbnNsYXRlWCx0PXRoaXMudHJhbnNsYXRlWTt0aGlzLmhiYXImJihlKz1uLmV2ZW50LmRlbHRhWSksdGhpcy52YmFyJiYodCs9bi5ldmVudC5kZWx0YVkpLHRoaXMuc2V0VHJhbnNsYXRlKGUsdCl9LGwucHJvdG90eXBlLl9vbkJhckRyYWc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRyYW5zbGF0ZVgsdD10aGlzLnRyYW5zbGF0ZVk7aWYodGhpcy5oYmFyKXt2YXIgcj1lK3RoaXMuX2hiYXJYTWluLGE9cit0aGlzLl9oYmFyVHJhbnNsYXRlTWF4O2U9KG8uY29uc3RyYWluKG4uZXZlbnQueCxyLGEpLXIpLyhhLXIpKih0aGlzLnBvc2l0aW9uLnctdGhpcy5fYm94LncpfWlmKHRoaXMudmJhcil7dmFyIGk9dCt0aGlzLl92YmFyWU1pbixsPWkrdGhpcy5fdmJhclRyYW5zbGF0ZU1heDt0PShvLmNvbnN0cmFpbihuLmV2ZW50LnksaSxsKS1pKS8obC1pKSoodGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oKX10aGlzLnNldFRyYW5zbGF0ZShlLHQpfSxsLnByb3RvdHlwZS5zZXRUcmFuc2xhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLnBvc2l0aW9uLnctdGhpcy5fYm94Lncsbj10aGlzLnBvc2l0aW9uLmgtdGhpcy5fYm94Lmg7aWYoZT1vLmNvbnN0cmFpbihlfHwwLDAsciksdD1vLmNvbnN0cmFpbih0fHwwLDAsbiksdGhpcy50cmFuc2xhdGVYPWUsdGhpcy50cmFuc2xhdGVZPXQsdGhpcy5jb250YWluZXIuY2FsbChpLnNldFRyYW5zbGF0ZSx0aGlzLl9ib3gubC10aGlzLnBvc2l0aW9uLmwtZSx0aGlzLl9ib3gudC10aGlzLnBvc2l0aW9uLnQtdCksdGhpcy5fY2xpcFJlY3QmJnRoaXMuX2NsaXBSZWN0LmF0dHIoe3g6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLmwrZS0uNSkseTpNYXRoLmZsb29yKHRoaXMucG9zaXRpb24udCt0LS41KX0pLHRoaXMuaGJhcil7dmFyIGE9ZS9yO3RoaXMuaGJhci5jYWxsKGkuc2V0VHJhbnNsYXRlLGUrYSp0aGlzLl9oYmFyVHJhbnNsYXRlTWF4LHQpfWlmKHRoaXMudmJhcil7dmFyIGw9dC9uO3RoaXMudmJhci5jYWxsKGkuc2V0VHJhbnNsYXRlLGUsdCtsKnRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpfX19LHsiLi4vLi4vbGliIjoyMzIsIi4uL2NvbG9yIjoxMDIsIi4uL2RyYXdpbmciOjEyNCwiQHBsb3RseS9kMyI6MTF9XSwyMDc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtGUk9NX0JMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxGUk9NX1RMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjEsbWlkZGxlOi41LHRvcDowfSxGUk9NX0JSOntsZWZ0OjEsY2VudGVyOi41LHJpZ2h0OjAsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxMSU5FX1NQQUNJTkc6MS4zLENBUF9TSElGVDouNyxNSURfU0hJRlQ6LjM1LE9QUE9TSVRFX1NJREU6e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn19fSx7fV0sMjA4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17YXhpc1JlZkRlc2NyaXB0aW9uOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm5bIklmIHNldCB0byBhIixlLCJheGlzIGlkIChlLmcuICoiK2UrIiogb3IiLCIqIitlKyIyKiksIHRoZSBgIitlKyJgIHBvc2l0aW9uIHJlZmVycyB0byBhIixlLCJjb29yZGluYXRlLiBJZiBzZXQgdG8gKnBhcGVyKiwgdGhlIGAiK2UrImAiLCJwb3NpdGlvbiByZWZlcnMgdG8gdGhlIGRpc3RhbmNlIGZyb20gdGhlIix0LCJvZiB0aGUgcGxvdHRpbmciLCJhcmVhIGluIG5vcm1hbGl6ZWQgY29vcmRpbmF0ZXMgd2hlcmUgKjAqICgqMSopIGNvcnJlc3BvbmRzIHRvIHRoZSIsdCwiKCIrcisiKS4gSWYgc2V0IHRvIGEiLGUsImF4aXMgSUQgZm9sbG93ZWQgYnkiLCIqZG9tYWluKiAoc2VwYXJhdGVkIGJ5IGEgc3BhY2UpLCB0aGUgcG9zaXRpb24gYmVoYXZlcyBsaWtlIGZvciIsIipwYXBlciosIGJ1dCByZWZlcnMgdG8gdGhlIGRpc3RhbmNlIGluIGZyYWN0aW9ucyBvZiB0aGUgZG9tYWluIiwibGVuZ3RoIGZyb20gdGhlIix0LCJvZiB0aGUgZG9tYWluIG9mIHRoYXQgYXhpczogZS5nLiwiLCIqIitlKyIyIGRvbWFpbiogcmVmZXJzIHRvIHRoZSBkb21haW4gb2YgdGhlIHNlY29uZCIsZSwiIGF4aXMgYW5kIGEiLGUsInBvc2l0aW9uIG9mIDAuNSByZWZlcnMgdG8gdGhlIiwicG9pbnQgYmV0d2VlbiB0aGUiLHQsImFuZCB0aGUiLHIsIm9mIHRoZSBkb21haW4gb2YgdGhlIiwic2Vjb25kIixlLCJheGlzLiJdLmpvaW4oIiAiKX19fSx7fV0sMjA5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17Rk9STUFUX0xJTks6Imh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1mb3JtYXQvdHJlZS92MS40LjUjZDMtZm9ybWF0IixEQVRFX0ZPUk1BVF9MSU5LOiJodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtdGltZS1mb3JtYXQvdHJlZS92Mi4yLjMjbG9jYWxlX2Zvcm1hdCJ9fSx7fV0sMjEwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17Q09NUEFSSVNPTl9PUFM6WyI9IiwiIT0iLCI8IiwiPj0iLCI+IiwiPD0iXSxDT01QQVJJU09OX09QUzI6WyI9IiwiPCIsIj49IiwiPiIsIjw9Il0sSU5URVJWQUxfT1BTOlsiW10iLCIoKSIsIlspIiwiKF0iLCJdWyIsIikoIiwiXSgiLCIpWyJdLFNFVF9PUFM6WyJ7fSIsIn17Il0sQ09OU1RSQUlOVF9SRURVQ1RJT046eyI9IjoiPSIsIjwiOiI8IiwiPD0iOiI8IiwiPiI6Ij4iLCI+PSI6Ij4iLCJbXSI6IltdIiwiKCkiOiJbXSIsIlspIjoiW10iLCIoXSI6IltdIiwiXVsiOiJdWyIsIikoIjoiXVsiLCJdKCI6Il1bIiwiKVsiOiJdWyJ9fX0se31dLDIxMTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e1NIT1dfUExBQ0VIT0xERVI6MTAwLEhJREVfUExBQ0VIT0xERVI6MWUzLERFU0VMRUNURElNOi4yfX0se31dLDIxMjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e0JBRE5VTTp2b2lkIDAsRlBfU0FGRToxZS00Kk51bWJlci5NQVhfVkFMVUUsT05FTUFYWUVBUjozMTYyMjRlNSxPTkVBVkdZRUFSOjMxNTU3NmU1LE9ORU1JTllFQVI6MzE1MzZlNixPTkVNQVhRVUFSVEVSOjc5NDg4ZTUsT05FQVZHUVVBUlRFUjo3ODg5NGU1LE9ORU1JTlFVQVJURVI6NzY4OTZlNSxPTkVNQVhNT05USDoyNjc4NGU1LE9ORUFWR01PTlRIOjI2Mjk4ZTUsT05FTUlOTU9OVEg6MjQxOTJlNSxPTkVXRUVLOjYwNDhlNSxPTkVEQVk6ODY0ZTUsT05FSE9VUjozNmU1LE9ORU1JTjo2ZTQsT05FU0VDOjFlMyxFUE9DSEpEOjI0NDA1ODcuNSxBTE1PU1RfRVFVQUw6Ljk5OTk5OSxMT0dfQ0xJUDoxMCxNSU5VU19TSUdOOiJcdTIyMTIifX0se31dLDIxMzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyLnhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsci5zdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixyLnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixyLnN2Z0F0dHJzPXt4bWxuczpyLnN2ZywieG1sbnM6eGxpbmsiOnIueGxpbmt9fSx7fV0sMjE0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IudmVyc2lvbj1lKCIuL3ZlcnNpb24iKS52ZXJzaW9uLGUoIm5hdGl2ZS1wcm9taXNlLW9ubHkiKSxlKCIuLi9idWlsZC9wbG90Y3NzIik7Zm9yKHZhciBuPWUoIi4vcmVnaXN0cnkiKSxhPXIucmVnaXN0ZXI9bi5yZWdpc3RlcixpPWUoIi4vcGxvdF9hcGkiKSxvPU9iamVjdC5rZXlzKGkpLGw9MDtsPG8ubGVuZ3RoO2wrKyl7dmFyIHM9b1tsXTsiXyIhPT1zLmNoYXJBdCgwKSYmKHJbc109aVtzXSksYSh7bW9kdWxlVHlwZToiYXBpTWV0aG9kIixuYW1lOnMsZm46aVtzXX0pfWEoZSgiLi90cmFjZXMvc2NhdHRlciIpKSxhKFtlKCIuL2NvbXBvbmVudHMvbGVnZW5kIiksZSgiLi9jb21wb25lbnRzL2Z4IiksZSgiLi9jb21wb25lbnRzL2Fubm90YXRpb25zIiksZSgiLi9jb21wb25lbnRzL2Fubm90YXRpb25zM2QiKSxlKCIuL2NvbXBvbmVudHMvc2hhcGVzIiksZSgiLi9jb21wb25lbnRzL2ltYWdlcyIpLGUoIi4vY29tcG9uZW50cy91cGRhdGVtZW51cyIpLGUoIi4vY29tcG9uZW50cy9zbGlkZXJzIiksZSgiLi9jb21wb25lbnRzL3Jhbmdlc2xpZGVyIiksZSgiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3IiKSxlKCIuL2NvbXBvbmVudHMvZ3JpZCIpLGUoIi4vY29tcG9uZW50cy9lcnJvcmJhcnMiKSxlKCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGUoIi4vY29tcG9uZW50cy9jb2xvcmJhciIpLGUoIi4vY29tcG9uZW50cy9tb2RlYmFyIildKSxhKFtlKCIuL2xvY2FsZS1lbiIpLGUoIi4vbG9jYWxlLWVuLXVzIildKSx3aW5kb3cuUGxvdGx5TG9jYWxlcyYmQXJyYXkuaXNBcnJheSh3aW5kb3cuUGxvdGx5TG9jYWxlcykmJihhKHdpbmRvdy5QbG90bHlMb2NhbGVzKSxkZWxldGUgd2luZG93LlBsb3RseUxvY2FsZXMpLHIuSWNvbnM9ZSgiLi9mb250cy9wbG90aWNvbiIpO3ZhciBjPWUoIi4vY29tcG9uZW50cy9meCIpLHU9ZSgiLi9wbG90cy9wbG90cyIpO3IuUGxvdHM9e3Jlc2l6ZTp1LnJlc2l6ZSxncmFwaEpzb246dS5ncmFwaEpzb24sc2VuZERhdGFUb0Nsb3VkOnUuc2VuZERhdGFUb0Nsb3VkfSxyLkZ4PXtob3ZlcjpjLmhvdmVyLHVuaG92ZXI6Yy51bmhvdmVyLGxvbmVIb3ZlcjpjLmxvbmVIb3Zlcixsb25lVW5ob3ZlcjpjLmxvbmVVbmhvdmVyfSxyLlNuYXBzaG90PWUoIi4vc25hcHNob3QiKSxyLlBsb3RTY2hlbWE9ZSgiLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpfSx7Ii4uL2J1aWxkL3Bsb3Rjc3MiOjEsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucyI6OTMsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uczNkIjo5OCwiLi9jb21wb25lbnRzL2NvbG9yYmFyIjoxMDgsIi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjoxMTQsIi4vY29tcG9uZW50cy9lcnJvcmJhcnMiOjEzMCwiLi9jb21wb25lbnRzL2Z4IjoxNDIsIi4vY29tcG9uZW50cy9ncmlkIjoxNDYsIi4vY29tcG9uZW50cy9pbWFnZXMiOjE1MSwiLi9jb21wb25lbnRzL2xlZ2VuZCI6MTU5LCIuL2NvbXBvbmVudHMvbW9kZWJhciI6MTY1LCIuL2NvbXBvbmVudHMvcmFuZ2VzZWxlY3RvciI6MTczLCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXIiOjE4MCwiLi9jb21wb25lbnRzL3NoYXBlcyI6MTk0LCIuL2NvbXBvbmVudHMvc2xpZGVycyI6MTk5LCIuL2NvbXBvbmVudHMvdXBkYXRlbWVudXMiOjIwNSwiLi9mb250cy9wbG90aWNvbiI6MjE1LCIuL2xvY2FsZS1lbiI6MjU5LCIuL2xvY2FsZS1lbi11cyI6MjU4LCIuL3Bsb3RfYXBpIjoyNjMsIi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjI2NywiLi9wbG90cy9wbG90cyI6MzE2LCIuL3JlZ2lzdHJ5IjozMTgsIi4vc25hcHNob3QiOjMyMywiLi90cmFjZXMvc2NhdHRlciI6MzcwLCIuL3ZlcnNpb24iOjM5MSwibmF0aXZlLXByb21pc2Utb25seSI6NTR9XSwyMTU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXt1bmRvOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6Im04NTcgMzUwcTAtODctMzQtMTY2dC05MS0xMzctMTM3LTkyLTE2Ni0zNHEtOTYgMC0xODMgNDF0LTE0NyAxMTRxLTQgNi00IDEzdDUgMTFsNzYgNzdxNiA1IDE0IDUgOS0xIDEzLTcgNDEtNTMgMTAwLTgydDEyNi0yOXE1OCAwIDExMCAyM3Q5MiA2MSA2MSA5MSAyMiAxMTEtMjIgMTExLTYxIDkxLTkyIDYxLTExMCAyM3EtNTUgMC0xMDUtMjB0LTkwLTU3bDc3LTc3cTE3LTE2IDgtMzgtMTAtMjMtMzMtMjNoLTI1MHEtMTUgMC0yNSAxMXQtMTEgMjV2MjUwcTAgMjQgMjIgMzMgMjIgMTAgMzktOGw3Mi03MnE2MCA1NyAxMzcgODh0MTU5IDMxcTg3IDAgMTY2LTM0dDEzNy05MiA5MS0xMzcgMzQtMTY2eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0saG9tZTp7d2lkdGg6OTI4LjYsaGVpZ2h0OjFlMyxwYXRoOiJtNzg2IDI5NnYtMjY3cTAtMTUtMTEtMjZ0LTI1LTEwaC0yMTR2MjE0aC0xNDN2LTIxNGgtMjE0cS0xNSAwLTI1IDEwdC0xMSAyNnYyNjdxMCAxIDAgMnQwIDJsMzIxIDI2NCAzMjEtMjY0cTEtMSAxLTR6IG0xMjQgMzlsLTM0LTQxcS01LTUtMTItNmgtMnEtNyAwLTEyIDNsLTM4NiAzMjItMzg2LTMyMnEtNy00LTEzLTQtNyAyLTEyIDdsLTM1IDQxcS00IDUtMyAxM3Q2IDEybDQwMSAzMzRxMTggMTUgNDIgMTV0NDMtMTVsMTM2LTExNHYxMDlxMCA4IDUgMTN0MTMgNWgxMDdxOCAwIDEzLTV0NS0xM3YtMjI3bDEyMi0xMDJxNS01IDYtMTJ0LTQtMTN6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSwiY2FtZXJhLXJldHJvIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTUxOCAzODZxMCA4LTUgMTN0LTEzIDVxLTM3IDAtNjMtMjd0LTI2LTYzcTAtOCA1LTEzdDEzLTUgMTIgNSA1IDEzcTAgMjMgMTYgMzh0MzggMTZxOCAwIDEzIDV0NSAxM3ogbTEyNS03M3EwLTU5LTQyLTEwMXQtMTAxLTQyLTEwMSA0Mi00MiAxMDEgNDIgMTAxIDEwMSA0MiAxMDEtNDIgNDItMTAxeiBtLTU3Mi0zMjBoODU4djcxaC04NTh2LTcxeiBtNjQzIDMyMHEwIDg5LTYyIDE1MnQtMTUyIDYyLTE1MS02Mi02My0xNTIgNjMtMTUxIDE1MS02MyAxNTIgNjMgNjIgMTUxeiBtLTU3MSAzNThoMjE0djcyaC0yMTR2LTcyeiBtLTcyLTEwN2g4NTh2MTQzaC00NjJsLTM2LTcxaC0zNjB2LTcyeiBtOTI5IDE0M3YtNzE0cTAtMzAtMjEtNTF0LTUwLTIxaC04NThxLTI5IDAtNTAgMjF0LTIxIDUxdjcxNHEwIDMwIDIxIDUxdDUwIDIxaDg1OHEyOSAwIDUwLTIxdDIxLTUxeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbWJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTEwMDAtMjVsLTI1MCAyNTFjNDAgNjMgNjMgMTM4IDYzIDIxOCAwIDIyNC0xODIgNDA2LTQwNyA0MDYtMjI0IDAtNDA2LTE4Mi00MDYtNDA2czE4My00MDYgNDA3LTQwNmM4MCAwIDE1NSAyMiAyMTggNjJsMjUwLTI1MCAxMjUgMTI1eiBtLTgxMiAyNTBsMCA0MzggNDM3IDAgMC00MzgtNDM3IDB6IG02MiAzNzVsMzEzIDAgMC0zMTItMzEzIDAgMCAzMTJ6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxwYW46e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0xMDAwIDM1MGwtMTg3IDE4OCAwLTEyNS0yNTAgMCAwIDI1MCAxMjUgMC0xODggMTg3LTE4Ny0xODcgMTI1IDAgMC0yNTAtMjUwIDAgMCAxMjUtMTg4LTE4OCAxODYtMTg3IDAgMTI1IDI1MiAwIDAtMjUwLTEyNSAwIDE4Ny0xODggMTg4IDE4OC0xMjUgMCAwIDI1MCAyNTAgMCAwLTEyNiAxODcgMTg4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbV9wbHVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOiJtMSA3ODdsMC04NzUgODc1IDAgMCA4NzUtODc1IDB6IG02ODctNTAwbC0xODcgMCAwLTE4Ny0xMjUgMCAwIDE4Ny0xODggMCAwIDEyNSAxODggMCAwIDE4NyAxMjUgMCAwLTE4NyAxODcgMCAwLTEyNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21fbWludXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6Im0wIDc4OGwwLTg3NiA4NzUgMCAwIDg3Ni04NzUgMHogbTY4OC01MDBsLTUwMCAwIDAgMTI1IDUwMCAwIDAtMTI1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sYXV0b3NjYWxlOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMjUwIDg1MGwtMTg3IDAtNjMgMCAwLTYyIDAtMTg4IDYzIDAgMCAxODggMTg3IDAgMCA2MnogbTY4OCAwbC0xODggMCAwLTYyIDE4OCAwIDAtMTg4IDYyIDAgMCAxODggMCA2Mi02MiAweiBtLTg3NS05MzhsMCAxODgtNjMgMCAwLTE4OCAwLTYyIDYzIDAgMTg3IDAgMCA2Mi0xODcgMHogbTg3NSAxODhsMC0xODgtMTg4IDAgMC02MiAxODggMCA2MiAwIDAgNjIgMCAxODgtNjIgMHogbS0xMjUgMTg4bC0xIDAtOTMtOTQtMTU2IDE1NiAxNTYgMTU2IDkyLTkzIDIgMCAwIDI1MC0yNTAgMCAwLTIgOTMtOTItMTU2LTE1Ni0xNTYgMTU2IDk0IDkyIDAgMi0yNTAgMCAwLTI1MCAwIDAgOTMgOTMgMTU3LTE1Ni0xNTctMTU2LTkzIDk0IDAgMCAwLTI1MCAyNTAgMCAwIDAtOTQgOTMgMTU2IDE1NyAxNTYtMTU3LTkzLTkzIDAgMCAyNTAgMCAwIDI1MHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHRvb2x0aXBfYmFzaWM6e3dpZHRoOjE1MDAsaGVpZ2h0OjFlMyxwYXRoOiJtMzc1IDcyNWwwIDAtMzc1LTM3NSAzNzUtMzc0IDAtMSAxMTI1IDAgMCA3NTAtMTEyNSAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sdG9vbHRpcF9jb21wYXJlOnt3aWR0aDoxMTI1LGhlaWdodDoxZTMscGF0aDoibTE4NyA3ODZsMCAyLTE4Ny0xODggMTg4LTE4NyAwIDAgOTM3IDAgMCAzNzMtOTM4IDB6IG0wLTQ5OWwwIDEtMTg3LTE4OCAxODgtMTg4IDAgMCA5MzcgMCAwIDM3Ni05MzgtMXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHBsb3RseWxvZ286e3dpZHRoOjE1NDIsaGVpZ2h0OjFlMyxwYXRoOiJtMC0xMGgxODJ2LTE0MGgtMTgydjE0MHogbTIyOCAxNDZoMTgzdi0yODZoLTE4M3YyODZ6IG0yMjUgNzE0aDE4MnYtMTAwMGgtMTgydjEwMDB6IG0yMjUtMjg1aDE4MnYtNzE1aC0xODJ2NzE1eiBtMjI1IDE0MmgxODN2LTg1N2gtMTgzdjg1N3ogbTIzMS00MjhoMTgydi00MjloLTE4MnY0Mjl6IG0yMjUtMjkxaDE4M3YtMTM4aC0xODN2MTM4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sInotYXhpcyI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im04MzMgNWwtMTcgMTA4djQxbC0xMzAtNjUgMTMwLTY2YzAgMCAwIDM4IDAgMzkgMC0xIDM2LTE0IDM5LTI1IDQtMTUtNi0yMi0xNi0zMC0xNS0xMi0zOS0xNi01Ni0yMC05MC0yMi0xODctMjMtMjc5LTIzLTI2MSAwLTM0MSAzNC0zNTMgNTkgMyA2MCAyMjggMTEwIDIyOCAxMTAtMTQwLTgtMzUxLTM1LTM1MS0xMTYgMC0xMjAgMjkzLTE0MiA0NzQtMTQyIDE1NSAwIDQ3NyAyMiA0NzcgMTQyIDAgNTAtNzQgNzktMTYzIDk2eiBtLTM3NCA5NGMtNTgtNS05OS0yMS05OS00MCAwLTI0IDY1LTQzIDE0NC00MyA3OSAwIDE0MyAxOSAxNDMgNDMgMCAxOS00MiAzNC05OCA0MHYyMTZoODdsLTEzMiAxMzUtMTMzLTEzNWg4OHYtMjE2eiBtMTY3IDUxNWgtMTM2djFjMTYgMTYgMzEgMzQgNDYgNTJsODQgMTA5djU0aC0yMzB2LTcxaDEyNHYtMWMtMTYtMTctMjgtMzItNDQtNTFsLTg5LTExNHYtNTFoMjQ1djcyeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sIjNkX3JvdGF0ZSI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im05MjIgNjYwYy01IDQtOSA3LTE0IDExLTM1OSAyNjMtNTgwLTMxLTU4MC0zMWwtMTAyIDI4IDU4LTQwMGMwIDEgMSAxIDIgMiAxMTggMTA4IDM1MSAyNDkgMzUxIDI0OXMtNjIgMjctMTAwIDQyYzg4IDgzIDIyMiAxODMgMzQ3IDEyMiAxNi04IDMwLTE3IDQ0LTI3LTIgMS00IDItNiA0eiBtMzYtMzI5YzAgMCA2NCAyMjktODggMjk2LTYyIDI3LTEyNCAxNC0xNzUtMTEgMTU3LTc4IDIyNS0yMDggMjQ5LTI2NiA4LTE5IDExLTMxIDExLTMxIDIgNSA2IDE1IDExIDMyLTUtMTMtOC0yMC04LTIweiBtLTc3NS0yMzljNzAtMzEgMTE3LTUwIDE5OC0zMi0xMjEgODAtMTk5IDM0Ni0xOTkgMzQ2bC05Ni0xNS01OC0xMmMwIDAgNTUtMjI2IDE1NS0yODd6IG02MDMgMTMzbC0zMTctMTM5YzAgMCA0LTQgMTktMTQgNy01IDI0LTE1IDI0LTE1cy0xNzctMTQ3LTM4OSA0YzIzNS0yODcgNTM2LTExMiA1MzYtMTEybDMxLTIyIDEwMCAyOTktNC0xeiBtLTI5OC0xNTNjNi00IDE0LTkgMjQtMTUgMCAwLTE3IDEwLTI0IDE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sY2FtZXJhOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDQ1MGMtODMgMC0xNTAtNjctMTUwLTE1MCAwLTgzIDY3LTE1MCAxNTAtMTUwIDgzIDAgMTUwIDY3IDE1MCAxNTAgMCA4My02NyAxNTAtMTUwIDE1MHogbTQwMCAxNTBoLTEyMGMtMTYgMC0zNCAxMy0zOSAyOWwtMzEgOTNjLTYgMTUtMjMgMjgtNDAgMjhoLTM0MGMtMTYgMC0zNC0xMy0zOS0yOGwtMzEtOTRjLTYtMTUtMjMtMjgtNDAtMjhoLTEyMGMtNTUgMC0xMDAtNDUtMTAwLTEwMHYtNDUwYzAtNTUgNDUtMTAwIDEwMC0xMDBoODAwYzU1IDAgMTAwIDQ1IDEwMCAxMDB2NDUwYzAgNTUtNDUgMTAwLTEwMCAxMDB6IG0tNDAwLTU1MGMtMTM4IDAtMjUwIDExMi0yNTAgMjUwIDAgMTM4IDExMiAyNTAgMjUwIDI1MCAxMzggMCAyNTAtMTEyIDI1MC0yNTAgMC0xMzgtMTEyLTI1MC0yNTAtMjUweiBtMzY1IDM4MGMtMTkgMC0zNSAxNi0zNSAzNSAwIDE5IDE2IDM1IDM1IDM1IDE5IDAgMzUtMTYgMzUtMzUgMC0xOS0xNi0zNS0zNS0zNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LG1vdmllOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtOTM4IDQxM2wtMTg4LTEyNWMwIDM3LTE3IDcxLTQ0IDk0IDY0IDM4IDEwNyAxMDcgMTA3IDE4NyAwIDEyMS05OCAyMTktMjE5IDIxOS0xMjEgMC0yMTktOTgtMjE5LTIxOSAwLTYxIDI1LTExNyA2Ni0xNTZoLTExNWMzMCAzMyA0OSA3NiA0OSAxMjUgMCAxMDMtODQgMTg3LTE4NyAxODdzLTE4OC04NC0xODgtMTg3YzAtNTcgMjYtMTA3IDY1LTE0MS0zOC0yMi02NS02Mi02NS0xMDl2LTI1MGMwLTcwIDU2LTEyNiAxMjUtMTI2aDUwMGM2OSAwIDEyNSA1NiAxMjUgMTI2bDE4OC0xMjZjMzQgMCA2MiAyOCA2MiA2M3YzNzVjMCAzNS0yOCA2My02MiA2M3ogbS03NTAgMGMtNjkgMC0xMjUgNTYtMTI1IDEyNXM1NiAxMjUgMTI1IDEyNSAxMjUtNTYgMTI1LTEyNS01Ni0xMjUtMTI1LTEyNXogbTQwNi0xYy04NyAwLTE1NyA3MC0xNTcgMTU3IDAgODYgNzAgMTU2IDE1NyAxNTZzMTU2LTcwIDE1Ni0xNTYtNzAtMTU3LTE1Ni0xNTd6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxxdWVzdGlvbjp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDgydjEwN3EwIDgtNSAxM3QtMTMgNWgtMTA3cS04IDAtMTMtNXQtNS0xM3YtMTA3cTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTN6IG0xNDMgMzc1cTAgNDktMzEgOTF0LTc3IDY1LTk1IDIzcS0xMzYgMC0yMDctMTE5LTktMTQgNC0yNGw3NC01NXE0LTQgMTAtNCA5IDAgMTQgNyAzMCAzOCA0OCA1MSAxOSAxNCA0OCAxNCAyNyAwIDQ4LTE1dDIxLTMzcTAtMjEtMTEtMzR0LTM4LTI1cS0zNS0xNi02NS00OHQtMjktNzB2LTIwcTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTNxMCAxMCAxMiAyN3QzMCAyOHExOCAxMCAyOCAxNnQyNSAxOSAyNSAyNyAxNiAzNCA3IDQ1eiBtMjE0LTEwN3EwLTExNy01Ny0yMTV0LTE1Ni0xNTYtMjE1LTU4LTIxNiA1OC0xNTUgMTU2LTU4IDIxNSA1OCAyMTUgMTU1IDE1NiAyMTYgNTggMjE1LTU4IDE1Ni0xNTYgNTctMjE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZGlzazp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtMjE0LTdoNDI5djIxNGgtNDI5di0yMTR6IG01MDAgMGg3MnY1MDBxMCA4LTYgMjF0LTExIDIwbC0xNTcgMTU2cS01IDYtMTkgMTJ0LTIyIDV2LTIzMnEwLTIyLTE1LTM4dC0zOC0xNmgtMzIycS0yMiAwLTM3IDE2dC0xNiAzOHYyMzJoLTcydi03MTRoNzJ2MjMycTAgMjIgMTYgMzh0MzcgMTZoNDY1cTIyIDAgMzgtMTZ0MTUtMzh2LTIzMnogbS0yMTQgNTE4djE3OHEwIDgtNSAxM3QtMTMgNWgtMTA3cS03IDAtMTMtNXQtNS0xM3YtMTc4cTAtOCA1LTEzdDEzLTVoMTA3cTcgMCAxMyA1dDUgMTN6IG0zNTctMTh2LTUxOHEwLTIyLTE1LTM4dC0zOC0xNmgtNzUwcS0yMyAwLTM4IDE2dC0xNiAzOHY3NTBxMCAyMiAxNiAzOHQzOCAxNmg1MTdxMjMgMCA1MC0xMnQ0Mi0yNmwxNTYtMTU3cTE2LTE1IDI3LTQydDExLTQ5eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZHJhd29wZW5wYXRoOnt3aWR0aDo3MCxoZWlnaHQ6NzAscGF0aDoiTTMzLjIxLDg1LjY1YTcuMzEsNy4zMSwwLDAsMS0yLjU5LS40OGMtOC4xNi0zLjExLTkuMjctMTkuOC05Ljg4LTQxLjMtLjEtMy41OC0uMTktNi42OC0uMzUtOS0uMTUtMi4xLS42Ny0zLjQ4LTEuNDMtMy43OS0yLjEzLS44OC03LjkxLDIuMzItMTIsNS44NkwzLDMyLjM4YzEuODctMS42NCwxMS41NS05LjY2LDE4LjI3LTYuOSwyLjEzLjg3LDQuNzUsMy4xNCw1LjE3LDksLjE3LDIuNDMuMjYsNS41OS4zNiw5LjI1YTIyNC4xNywyMjQuMTcsMCwwLDAsMS41LDIzLjRjMS41NCwxMC43Niw0LDEyLjIyLDQuNDgsMTIuNC44NC4zMiwyLjc5LS40Niw1Ljc2LTMuNTlMNDMsODAuMDdDNDEuNTMsODEuNTcsMzcuNjgsODUuNjQsMzMuMjEsODUuNjVaTTc0LjgxLDY5YTExLjM0LDExLjM0LDAsMCwwLDYuMDktNi43Mkw4Ny4yNiw0NC41LDc0LjcyLDMyLDU2LjksMzguMzVjLTIuMzcuODYtNS41NywzLjQyLTYuNjEsNkwzOC42NSw3Mi4xNGw4LjQyLDguNDNaTTU1LDQ2LjI3YTcuOTEsNy45MSwwLDAsMSwzLjY0LTMuMTdsMTQuOC01LjMsOCw4TDc2LjExLDYwLjZsLS4wNi4xOWE2LjM3LDYuMzcsMCwwLDEtMywzLjQzTDQ4LjI1LDc0LjU5LDQ0LjYyLDcxWm0xNi41Nyw3LjgyQTYuOSw2LjksMCwxLDAsNjQuNjQsNjEsNi45MSw2LjkxLDAsMCwwLDcxLjU0LDU0LjA5Wm0tNC4wNSwwYTIuODUsMi44NSwwLDEsMS0yLjg1LTIuODVBMi44NiwyLjg2LDAsMCwxLDY3LjQ5LDU0LjA5Wm0tNC4xMyw1LjIyTDYwLjUsNTYuNDUsNDQuMjYsNzIuN2wyLjg2LDIuODZaTTk3LjgzLDM1LjY3LDg0LjE0LDIybC04LjU3LDguNTdMODkuMjYsNDQuMjRabS0xMy42OS04LDgsOC0yLjg1LDIuODUtOC04WiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTUgLTE1KSJ9LGRyYXdjbG9zZWRwYXRoOnt3aWR0aDo5MCxoZWlnaHQ6OTAscGF0aDoiTTg4LjQxLDIxLjEyYTI2LjU2LDI2LjU2LDAsMCwwLTM2LjE4LDBsLTIuMDcsMi0yLjA3LTJhMjYuNTcsMjYuNTcsMCwwLDAtMzYuMTgsMCwyMy43NCwyMy43NCwwLDAsMCwwLDM0LjhMNDgsOTAuMTJhMy4yMiwzLjIyLDAsMCwwLDQuNDIsMGwzNi0zNC4yMWEyMy43MywyMy43MywwLDAsMCwwLTM0Ljc5Wk04NCw1MS4yNCw1MC4xNiw4My4zNSwxNi4zNSw1MS4yNWExNy4yOCwxNy4yOCwwLDAsMSwwLTI1LjQ3LDIwLDIwLDAsMCwxLDI3LjMsMGw0LjI5LDQuMDdhMy4yMywzLjIzLDAsMCwwLDQuNDQsMGw0LjI5LTQuMDdhMjAsMjAsMCwwLDEsMjcuMywwLDE3LjI3LDE3LjI3LDAsMCwxLDAsMjUuNDZaTTY2Ljc2LDQ3LjY4aC0zM3Y2LjkxaDMzWk01My4zNSwzNUg0Ni40NFY2OGg2LjkxWiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtNSAtNSkifSxsYXNzbzp7d2lkdGg6MTAzMSxoZWlnaHQ6MWUzLHBhdGg6Im0xMDE4IDUzOGMtMzYgMjA3LTI5MCAzMzYtNTY4IDI4Ni0yNzctNDgtNDczLTI1Ni00MzYtNDYzIDEwLTU3IDM2LTEwOCA3Ni0xNTEtMTMtNjYgMTEtMTM3IDY4LTE4MyAzNC0yOCA3NS00MSAxMTQtNDJsLTU1LTcwIDAgMGMtMi0xLTMtMi00LTMtMTAtMTQtOC0zNCA1LTQ1IDE0LTExIDM0LTggNDUgNCAxIDEgMiAzIDIgNWwwIDAgMTEzIDE0MGMxNiAxMSAzMSAyNCA0NSA0MCA0IDMgNiA3IDggMTEgNDgtMyAxMDAgMCAxNTEgOSAyNzggNDggNDczIDI1NSA0MzYgNDYyeiBtLTYyNC0zNzljLTgwIDE0LTE0OSA0OC0xOTcgOTYgNDIgNDIgMTA5IDQ3IDE1NiA5IDMzLTI2IDQ3LTY2IDQxLTEwNXogbS0xODctNzRjLTE5IDE2LTMzIDM3LTM5IDYwIDUwLTMyIDEwOS01NSAxNzQtNjgtNDItMjUtOTUtMjQtMTM1IDh6IG0zNjAgNzVjLTM0LTctNjktOS0xMDItOCA4IDYyLTE2IDEyOC02OCAxNzAtNzMgNTktMTc1IDU0LTI0NC01LTkgMjAtMTYgNDAtMjAgNjEtMjggMTU5IDEyMSAzMTcgMzMzIDM1NHM0MDctNjAgNDM0LTIxN2MyOC0xNTktMTIxLTMxOC0zMzMtMzU1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sc2VsZWN0Ym94Ont3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMCA4NTBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NSAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTg1NyAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODVsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg2bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZHJhd2xpbmU6e3dpZHRoOjcwLGhlaWdodDo3MCxwYXRoOiJNNjAuNjQsNjIuM2ExMS4yOSwxMS4yOSwwLDAsMCw2LjA5LTYuNzJsNi4zNS0xNy43Mkw2MC41NCwyNS4zMWwtMTcuODIsNi40Yy0yLjM2Ljg2LTUuNTcsMy40MS02LjYsNkwyNC40OCw2NS41bDguNDIsOC40MlpNNDAuNzksMzkuNjNhNy44OSw3Ljg5LDAsMCwxLDMuNjUtMy4xN2wxNC43OS01LjMxLDgsOEw2MS45NCw1NGwtLjA2LjE5YTYuNDQsNi40NCwwLDAsMS0zLDMuNDNMMzQuMDcsNjhsLTMuNjItMy42M1ptMTYuNTcsNy44MWE2LjksNi45LDAsMSwwLTYuODksNi45QTYuOSw2LjksMCwwLDAsNTcuMzYsNDcuNDRabS00LDBhMi44NiwyLjg2LDAsMSwxLTIuODUtMi44NUEyLjg2LDIuODYsMCwwLDEsNTMuMzIsNDcuNDRabS00LjEzLDUuMjJMNDYuMzMsNDkuOCwzMC4wOCw2Ni4wNWwyLjg2LDIuODZaTTgzLjY1LDI5LDcwLDE1LjM0LDYxLjQsMjMuOSw3NS4wOSwzNy41OVpNNzAsMjEuMDZsOCw4LTIuODQsMi44NS04LThaTTg3LDgwLjQ5SDEwLjY3Vjg3SDg3WiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTUgLTE1KSJ9LGRyYXdyZWN0Ont3aWR0aDo4MCxoZWlnaHQ6ODAscGF0aDoiTTc4LDIyVjc5SDIxVjIySDc4bTktOUgxMlY4OEg4N1YxM1pNNjgsNDYuMjJIMzFWNTRINjhaTTUzLDMySDQ1LjIyVjY5SDUzWiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTAgLTEwKSJ9LGRyYXdjaXJjbGU6e3dpZHRoOjgwLGhlaWdodDo4MCxwYXRoOiJNNTAsODQuNzJDMjYuODQsODQuNzIsOCw2OS4yOCw4LDUwLjNTMjYuODQsMTUuODcsNTAsMTUuODcsOTIsMzEuMzEsOTIsNTAuMyw3My4xNiw4NC43Miw1MCw4NC43MlptMC02MC41OWMtMTguNiwwLTMzLjc0LDExLjc0LTMzLjc0LDI2LjE3UzMxLjQsNzYuNDYsNTAsNzYuNDYsODMuNzQsNjQuNzIsODMuNzQsNTAuMyw2OC42LDI0LjEzLDUwLDI0LjEzWm0xNy4xNSwyMmgtMzR2Ny4xMWgzNFptLTEzLjgtMTNINDYuMjR2MzRoNy4xMVoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTEwIC0xMCkifSxlcmFzZXNoYXBlOnt3aWR0aDo4MCxoZWlnaHQ6ODAscGF0aDoiTTgyLjc3LDc4SDMxLjg1TDYsNDkuNTcsMzEuODUsMjEuMTRIODIuNzdhOC43Miw4LjcyLDAsMCwxLDguNjUsOC43N1Y2OS4yNEE4LjcyLDguNzIsMCwwLDEsODIuNzcsNzhaTTM1LjQ2LDY5Ljg0SDgyLjc3YS41Ny41NywwLDAsMCwuNDktLjZWMjkuOTFhLjU3LjU3LDAsMCwwLS40OS0uNjFIMzUuNDZMMTcsNDkuNTdabTMyLjY4LTM0LjctMjQsMjQsNSw1LDI0LTI0Wm0tMTksLjUzLTUsNSwyNCwyNCw1LTVaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC0xMCAtMTApIn0sc3Bpa2VsaW5lOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJNNTEyIDQwOWMwLTU3LTQ2LTEwNC0xMDMtMTA0LTU3IDAtMTA0IDQ3LTEwNCAxMDQgMCA1NyA0NyAxMDMgMTA0IDEwMyA1NyAwIDEwMy00NiAxMDMtMTAzeiBtLTMyNy0zOWw5MiAwIDAgOTItOTIgMHogbS0xODUgMGw5MiAwIDAgOTItOTIgMHogbTM3MC0xODZsOTIgMCAwIDkzLTkyIDB6IG0wLTE4NGw5MiAwIDAgOTItOTIgMHoiLHRyYW5zZm9ybToibWF0cml4KDEuNSAwIDAgLTEuNSAwIDg1MCkifSxwZW5jaWw6e3dpZHRoOjE3OTIsaGVpZ2h0OjE3OTIscGF0aDoiTTQ5MSAxNTM2bDkxLTkxLTIzNS0yMzUtOTEgOTF2MTA3aDEyOHYxMjhoMTA3em01MjMtOTI4cTAtMjItMjItMjItMTAgMC0xNyA3bC01NDIgNTQycS03IDctNyAxNyAwIDIyIDIyIDIyIDEwIDAgMTctN2w1NDItNTQycTctNyA3LTE3em0tNTQtMTkybDQxNiA0MTYtODMyIDgzMmgtNDE2di00MTZ6bTY4MyA5NnEwIDUzLTM3IDkwbC0xNjYgMTY2LTQxNi00MTYgMTY2LTE2NXEzNi0zOCA5MC0zOCA1MyAwIDkxIDM4bDIzNSAyMzRxMzcgMzkgMzcgOTF6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIDAgMSkifSxuZXdwbG90bHlsb2dvOntuYW1lOiJuZXdwbG90bHlsb2dvIixzdmc6IjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTMyIDEzMic+PGRlZnM+PHN0eWxlPi5jbHMtMSB7ZmlsbDogIzNmNGY3NTt9IC5jbHMtMiB7ZmlsbDogIzgwY2ZiZTt9IC5jbHMtMyB7ZmlsbDogI2ZmZjt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPnBsb3RseS1sb2dvbWFyazwvdGl0bGU+PGcgaWQ9J3N5bWJvbCc+PHJlY3QgY2xhc3M9J2Nscy0xJyB3aWR0aD0nMTMyJyBoZWlnaHQ9JzEzMicgcng9JzYnIHJ5PSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSc3OCcgY3k9JzU0JyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PScxMDInIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNzgnIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNTQnIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMzAnIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMzAnIGN5PSc1NCcgcj0nNicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTMwLDcyYTYsNiwwLDAsMC02LDZ2MjRhNiw2LDAsMCwwLDEyLDBWNzhBNiw2LDAsMCwwLDMwLDcyWicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTc4LDcyYTYsNiwwLDAsMC02LDZ2MjRhNiw2LDAsMCwwLDEyLDBWNzhBNiw2LDAsMCwwLDc4LDcyWicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTU0LDQ4YTYsNiwwLDAsMC02LDZ2NDhhNiw2LDAsMCwwLDEyLDBWNTRBNiw2LDAsMCwwLDU0LDQ4WicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTEwMiw0OGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjU0QTYsNiwwLDAsMCwxMDIsNDhaJy8+PC9nPjwvc3ZnPiJ9fX0se31dLDIxNjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyLmlzTGVmdEFuY2hvcj1mdW5jdGlvbihlKXtyZXR1cm4ibGVmdCI9PT1lLnhhbmNob3J8fCJhdXRvIj09PWUueGFuY2hvciYmZS54PD0xLzN9LHIuaXNDZW50ZXJBbmNob3I9ZnVuY3Rpb24oZSl7cmV0dXJuImNlbnRlciI9PT1lLnhhbmNob3J8fCJhdXRvIj09PWUueGFuY2hvciYmZS54PjEvMyYmZS54PDIvM30sci5pc1JpZ2h0QW5jaG9yPWZ1bmN0aW9uKGUpe3JldHVybiJyaWdodCI9PT1lLnhhbmNob3J8fCJhdXRvIj09PWUueGFuY2hvciYmZS54Pj0yLzN9LHIuaXNUb3BBbmNob3I9ZnVuY3Rpb24oZSl7cmV0dXJuInRvcCI9PT1lLnlhbmNob3J8fCJhdXRvIj09PWUueWFuY2hvciYmZS55Pj0yLzN9LHIuaXNNaWRkbGVBbmNob3I9ZnVuY3Rpb24oZSl7cmV0dXJuIm1pZGRsZSI9PT1lLnlhbmNob3J8fCJhdXRvIj09PWUueWFuY2hvciYmZS55PjEvMyYmZS55PDIvM30sci5pc0JvdHRvbUFuY2hvcj1mdW5jdGlvbihlKXtyZXR1cm4iYm90dG9tIj09PWUueWFuY2hvcnx8ImF1dG8iPT09ZS55YW5jaG9yJiZlLnk8PTEvM319LHt9XSwyMTc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9tb2QiKSxhPW4ubW9kLGk9bi5tb2RIYWxmLG89TWF0aC5QSSxsPTIqbztmdW5jdGlvbiBzKGUpe3JldHVybiBNYXRoLmFicyhlWzFdLWVbMF0pPmwtMWUtMTR9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBpKHQtZSxsKX1mdW5jdGlvbiB1KGUsdCl7aWYocyh0KSlyZXR1cm4hMDt2YXIgcixuO3RbMF08dFsxXT8ocj10WzBdLG49dFsxXSk6KHI9dFsxXSxuPXRbMF0pLChyPWEocixsKSk+KG49YShuLGwpKSYmKG4rPWwpO3ZhciBpPWEoZSxsKSxvPWkrbDtyZXR1cm4gaT49ciYmaTw9bnx8bz49ciYmbzw9bn1mdW5jdGlvbiBkKGUsdCxyLG4sYSxpLGMpe2E9YXx8MCxpPWl8fDA7dmFyIHUsZCxmLHAsaCxnPXMoW3Isbl0pO2Z1bmN0aW9uIG0oZSx0KXtyZXR1cm5bZSpNYXRoLmNvcyh0KSthLGktZSpNYXRoLnNpbih0KV19Zz8odT0wLGQ9byxmPWwpOnI8bj8odT1yLGY9bik6KHU9bixmPXIpLGU8dD8ocD1lLGg9dCk6KHA9dCxoPWUpO3ZhciB2LHk9TWF0aC5hYnMoZi11KTw9bz8wOjE7ZnVuY3Rpb24geChlLHQscil7cmV0dXJuIkEiK1tlLGVdKyIgIitbMCx5LHJdKyIgIittKGUsdCl9cmV0dXJuIGc/dj1udWxsPT09cD8iTSIrbShoLHUpK3goaCxkLDApK3goaCxmLDApKyJaIjoiTSIrbShwLHUpK3gocCxkLDApK3gocCxmLDApKyJaTSIrbShoLHUpK3goaCxkLDEpK3goaCxmLDEpKyJaIjpudWxsPT09cD8odj0iTSIrbShoLHUpK3goaCxmLDApLGMmJih2Kz0iTDAsMFoiKSk6dj0iTSIrbShwLHUpKyJMIittKGgsdSkreChoLGYsMCkrIkwiK20ocCxmKSt4KHAsdSwxKSsiWiIsdn10LmV4cG9ydHM9e2RlZzJyYWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUvMTgwKm99LHJhZDJkZWc6ZnVuY3Rpb24oZSl7cmV0dXJuIGUvbyoxODB9LGFuZ2xlRGVsdGE6YyxhbmdsZURpc3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5hYnMoYyhlLHQpKX0saXNGdWxsQ2lyY2xlOnMsaXNBbmdsZUluc2lkZVNlY3Rvcjp1LGlzUHRJbnNpZGVTZWN0b3I6ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuISF1KHQsbikmJihyWzBdPHJbMV0/KGE9clswXSxpPXJbMV0pOihhPXJbMV0saT1yWzBdKSxlPj1hJiZlPD1pKTt2YXIgYSxpfSxwYXRoQXJjOmZ1bmN0aW9uKGUsdCxyLG4sYSl7cmV0dXJuIGQobnVsbCxlLHQscixuLGEsMCl9LHBhdGhTZWN0b3I6ZnVuY3Rpb24oZSx0LHIsbixhKXtyZXR1cm4gZChudWxsLGUsdCxyLG4sYSwxKX0scGF0aEFubnVsdXM6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3JldHVybiBkKGUsdCxyLG4sYSxpLDEpfX19LHsiLi9tb2QiOjIzOX1dLDIxODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1BcnJheS5pc0FycmF5LGE9QXJyYXlCdWZmZXIsaT1EYXRhVmlldztmdW5jdGlvbiBvKGUpe3JldHVybiBhLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgaSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbihlKXx8byhlKX1mdW5jdGlvbiBzKGUsdCxyKXtpZihsKGUpKXtpZihsKGVbMF0pKXtmb3IodmFyIG49cixhPTA7YTxlLmxlbmd0aDthKyspbj10KG4sZVthXS5sZW5ndGgpO3JldHVybiBufXJldHVybiBlLmxlbmd0aH1yZXR1cm4gMH1yLmlzVHlwZWRBcnJheT1vLHIuaXNBcnJheU9yVHlwZWRBcnJheT1sLHIuaXNBcnJheTFEPWZ1bmN0aW9uKGUpe3JldHVybiFsKGVbMF0pfSxyLmVuc3VyZUFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSl8fChlPVtdKSxlLmxlbmd0aD10LGV9LHIuY29uY2F0PWZ1bmN0aW9uKCl7dmFyIGUsdCxyLGEsaSxvLGwscyxjPVtdLHU9ITAsZD0wO2ZvcihyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKykobz0oYT1hcmd1bWVudHNbcl0pLmxlbmd0aCkmJih0P2MucHVzaChhKToodD1hLGk9byksbihhKT9lPSExOih1PSExLGQ/ZSE9PWEuY29uc3RydWN0b3ImJihlPSExKTplPWEuY29uc3RydWN0b3IpLGQrPW8pO2lmKCFkKXJldHVybltdO2lmKCFjLmxlbmd0aClyZXR1cm4gdDtpZih1KXJldHVybiB0LmNvbmNhdC5hcHBseSh0LGMpO2lmKGUpe2ZvcigobD1uZXcgZShkKSkuc2V0KHQpLHI9MDtyPGMubGVuZ3RoO3IrKylhPWNbcl0sbC5zZXQoYSxpKSxpKz1hLmxlbmd0aDtyZXR1cm4gbH1mb3IobD1uZXcgQXJyYXkoZCkscz0wO3M8dC5sZW5ndGg7cysrKWxbc109dFtzXTtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKXtmb3IoYT1jW3JdLHM9MDtzPGEubGVuZ3RoO3MrKylsW2krc109YVtzXTtpKz1zfXJldHVybiBsfSxyLm1heFJvd0xlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gcyhlLE1hdGgubWF4LDApfSxyLm1pblJvd0xlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gcyhlLE1hdGgubWluLDEvMCl9fSx7fV0sMjE5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGk9L15bJyIlLCQjXHMnXSt8WywgXXxbJyIlLCQjXHMnXSskL2c7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZS5yZXBsYWNlKGksIiIpKSxuKGUpP051bWJlcihlKTphfX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjoyMTIsImZhc3QtaXNudW1lcmljIjoxN31dLDIyMDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dDt0Ll9nbGNhbnZhcyYmdC5fZ2xjYW52YXMuc2l6ZSgpJiZ0Ll9nbGNhbnZhcy5lYWNoKChmdW5jdGlvbihlKXtlLnJlZ2wmJmUucmVnbC5jbGVhcih7Y29sb3I6ITAsZGVwdGg6ITB9KX0pKX19LHt9XSwyMjE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2UuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXImJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixlLl9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKSxkZWxldGUgZS5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcil9fSx7fV0sMjIyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCJ0aW55Y29sb3IyIiksaT1lKCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbz1lKCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzIiksbD1lKCIuLi9jb21wb25lbnRzL2NvbG9yIikscz1lKCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0sYz1lKCIuL25lc3RlZF9wcm9wZXJ0eSIpLHU9ZSgiLi9yZWdleCIpLmNvdW50ZXIsZD1lKCIuL21vZCIpLm1vZEhhbGYsZj1lKCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiBwKGUsdCl7dmFyIG49ci52YWxPYmplY3RNZXRhW3QudmFsVHlwZV07aWYodC5hcnJheU9rJiZmKGUpKXJldHVybiEwO2lmKG4udmFsaWRhdGVGdW5jdGlvbilyZXR1cm4gbi52YWxpZGF0ZUZ1bmN0aW9uKGUsdCk7dmFyIGE9e30saT1hLG89e3NldDpmdW5jdGlvbihlKXtpPWV9fTtyZXR1cm4gbi5jb2VyY2VGdW5jdGlvbihlLG8sYSx0KSxpIT09YX1yLnZhbE9iamVjdE1ldGE9e2RhdGFfYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCxyKXtmKGUpP3Quc2V0KGUpOnZvaWQgMCE9PXImJnQuc2V0KHIpfX0sZW51bWVyYXRlZDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24oZSx0LHIsbil7bi5jb2VyY2VOdW1iZXImJihlPStlKSwtMT09PW4udmFsdWVzLmluZGV4T2YoZSk/dC5zZXQocik6dC5zZXQoZSl9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24oZSx0KXt0LmNvZXJjZU51bWJlciYmKGU9K2UpO2Zvcih2YXIgcj10LnZhbHVlcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBhPVN0cmluZyhyW25dKTtpZigiLyI9PT1hLmNoYXJBdCgwKSYmIi8iPT09YS5jaGFyQXQoYS5sZW5ndGgtMSkpe2lmKG5ldyBSZWdFeHAoYS5zdWJzdHIoMSxhLmxlbmd0aC0yKSkudGVzdChlKSlyZXR1cm4hMH1lbHNlIGlmKGU9PT1yW25dKXJldHVybiEwfXJldHVybiExfX0sYm9vbGVhbjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24oZSx0LHIpeyEwPT09ZXx8ITE9PT1lP3Quc2V0KGUpOnQuc2V0KHIpfX0sbnVtYmVyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbihlLHQscixhKXshbihlKXx8dm9pZCAwIT09YS5taW4mJmU8YS5taW58fHZvaWQgMCE9PWEubWF4JiZlPmEubWF4P3Quc2V0KHIpOnQuc2V0KCtlKX19LGludGVnZXI6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCxyLGEpe2UlMXx8IW4oZSl8fHZvaWQgMCE9PWEubWluJiZlPGEubWlufHx2b2lkIDAhPT1hLm1heCYmZT5hLm1heD90LnNldChyKTp0LnNldCgrZSl9fSxzdHJpbmc6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJzdHJpbmciIT10eXBlb2YgZSl7dmFyIGE9Im51bWJlciI9PXR5cGVvZiBlOyEwIT09bi5zdHJpY3QmJmE/dC5zZXQoU3RyaW5nKGUpKTp0LnNldChyKX1lbHNlIG4ubm9CbGFuayYmIWU/dC5zZXQocik6dC5zZXQoZSl9fSxjb2xvcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24oZSx0LHIpe2EoZSkuaXNWYWxpZCgpP3Quc2V0KGUpOnQuc2V0KHIpfX0sY29sb3JsaXN0Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbihlLHQscil7QXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGgmJmUuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBhKGUpLmlzVmFsaWQoKX0pKT90LnNldChlKTp0LnNldChyKX19LGNvbG9yc2NhbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCxyKXt0LnNldChvLmdldChlLHIpKX19LGFuZ2xlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbihlLHQscil7ImF1dG8iPT09ZT90LnNldCgiYXV0byIpOm4oZSk/dC5zZXQoZCgrZSwzNjApKTp0LnNldChyKX19LHN1YnBsb3RpZDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9bi5yZWdleHx8dShyKTsic3RyaW5nIj09dHlwZW9mIGUmJmEudGVzdChlKT90LnNldChlKTp0LnNldChyKX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbihlLHQpe3ZhciByPXQuZGZsdDtyZXR1cm4gZT09PXJ8fCJzdHJpbmciPT10eXBlb2YgZSYmISF1KHIpLnRlc3QoZSl9fSxmbGFnbGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKWlmKC0xPT09KG4uZXh0cmFzfHxbXSkuaW5kZXhPZihlKSl7Zm9yKHZhciBhPWUuc3BsaXQoIisiKSxpPTA7aTxhLmxlbmd0aDspe3ZhciBvPWFbaV07LTE9PT1uLmZsYWdzLmluZGV4T2Yobyl8fGEuaW5kZXhPZihvKTxpP2Euc3BsaWNlKGksMSk6aSsrfWEubGVuZ3RoP3Quc2V0KGEuam9pbigiKyIpKTp0LnNldChyKX1lbHNlIHQuc2V0KGUpO2Vsc2UgdC5zZXQocil9fSxhbnk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCxyKXt2b2lkIDA9PT1lP3Quc2V0KHIpOnQuc2V0KGUpfX0saW5mb19hcnJheTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24oZSx0LG4sYSl7ZnVuY3Rpb24gaShlLHQsbil7dmFyIGEsaT17c2V0OmZ1bmN0aW9uKGUpe2E9ZX19O3JldHVybiB2b2lkIDA9PT1uJiYobj10LmRmbHQpLHIudmFsT2JqZWN0TWV0YVt0LnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uKGUsaSxuLHQpLGF9dmFyIG89Mj09PWEuZGltZW5zaW9uc3x8IjEtMiI9PT1hLmRpbWVuc2lvbnMmJkFycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkoZVswXSk7aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIGwscyxjLHUsZCxmLHA9YS5pdGVtcyxoPVtdLGc9QXJyYXkuaXNBcnJheShwKSxtPWcmJm8mJkFycmF5LmlzQXJyYXkocFswXSksdj1vJiZnJiYhbSx5PWcmJiF2P3AubGVuZ3RoOmUubGVuZ3RoO2lmKG49QXJyYXkuaXNBcnJheShuKT9uOltdLG8pZm9yKGw9MDtsPHk7bCsrKWZvcihoW2xdPVtdLGM9QXJyYXkuaXNBcnJheShlW2xdKT9lW2xdOltdLGQ9dj9wLmxlbmd0aDpnP3BbbF0ubGVuZ3RoOmMubGVuZ3RoLHM9MDtzPGQ7cysrKXU9dj9wW3NdOmc/cFtsXVtzXTpwLHZvaWQgMCE9PShmPWkoY1tzXSx1LChuW2xdfHxbXSlbc10pKSYmKGhbbF1bc109Zik7ZWxzZSBmb3IobD0wO2w8eTtsKyspdm9pZCAwIT09KGY9aShlW2xdLGc/cFtsXTpwLG5bbF0pKSYmKGhbbF09Zik7dC5zZXQoaCl9ZWxzZSB0LnNldChuKX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiExO3ZhciByPXQuaXRlbXMsbj1BcnJheS5pc0FycmF5KHIpLGE9Mj09PXQuZGltZW5zaW9ucztpZighdC5mcmVlTGVuZ3RoJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKGEpe2lmKCFBcnJheS5pc0FycmF5KGVbaV0pfHwhdC5mcmVlTGVuZ3RoJiZlW2ldLmxlbmd0aCE9PXJbaV0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbz0wO288ZVtpXS5sZW5ndGg7bysrKWlmKCFwKGVbaV1bb10sbj9yW2ldW29dOnIpKXJldHVybiExfWVsc2UgaWYoIXAoZVtpXSxuP3JbaV06cikpcmV0dXJuITE7cmV0dXJuITB9fX0sci5jb2VyY2U9ZnVuY3Rpb24oZSx0LG4sYSxpKXt2YXIgbz1jKG4sYSkuZ2V0KCksbD1jKGUsYSkscz1jKHQsYSksdT1sLmdldCgpLGQ9dC5fdGVtcGxhdGU7aWYodm9pZCAwPT09dSYmZCYmKHU9YyhkLGEpLmdldCgpLGQ9MCksdm9pZCAwPT09aSYmKGk9by5kZmx0KSxvLmFycmF5T2smJmYodSkpcmV0dXJuIHMuc2V0KHUpLHU7dmFyIGg9ci52YWxPYmplY3RNZXRhW28udmFsVHlwZV0uY29lcmNlRnVuY3Rpb247aCh1LHMsaSxvKTt2YXIgZz1zLmdldCgpO3JldHVybiBkJiZnPT09aSYmIXAodSxvKSYmKGgodT1jKGQsYSkuZ2V0KCkscyxpLG8pLGc9cy5nZXQoKSksZ30sci5jb2VyY2UyPWZ1bmN0aW9uKGUsdCxuLGEsaSl7dmFyIG89YyhlLGEpLGw9ci5jb2VyY2UoZSx0LG4sYSxpKSxzPW8uZ2V0KCk7cmV0dXJuIG51bGwhPXMmJmx9LHIuY29lcmNlRm9udD1mdW5jdGlvbihlLHQscil7dmFyIG49e307cmV0dXJuIHI9cnx8e30sbi5mYW1pbHk9ZSh0KyIuZmFtaWx5IixyLmZhbWlseSksbi5zaXplPWUodCsiLnNpemUiLHIuc2l6ZSksbi5jb2xvcj1lKHQrIi5jb2xvciIsci5jb2xvciksbn0sci5jb2VyY2VQYXR0ZXJuPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGUodCsiLnNoYXBlIikpe2UodCsiLnNvbGlkaXR5IiksZSh0KyIuc2l6ZSIpO3ZhciBhPSJvdmVybGF5Ij09PWUodCsiLmZpbGxtb2RlIik7aWYoIW4pe3ZhciBpPWUodCsiLmJnY29sb3IiLGE/cjp2b2lkIDApO2UodCsiLmZnY29sb3IiLGE/bC5jb250cmFzdChpKTpyKX1lKHQrIi5mZ29wYWNpdHkiLGE/LjU6MSl9fSxyLmNvZXJjZUhvdmVyaW5mbz1mdW5jdGlvbihlLHQsbil7dmFyIGEsbz10Ll9tb2R1bGUuYXR0cmlidXRlcyxsPW8uaG92ZXJpbmZvP286aSxzPWwuaG92ZXJpbmZvO2lmKDE9PT1uLl9kYXRhTGVuZ3RoKXt2YXIgYz0iYWxsIj09PXMuZGZsdD9zLmZsYWdzLnNsaWNlKCk6cy5kZmx0LnNwbGl0KCIrIik7Yy5zcGxpY2UoYy5pbmRleE9mKCJuYW1lIiksMSksYT1jLmpvaW4oIisiKX1yZXR1cm4gci5jb2VyY2UoZSx0LGwsImhvdmVyaW5mbyIsYSl9LHIuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1mdW5jdGlvbihlLHQpe2lmKGUubWFya2VyKXt2YXIgcixuLGE9ZS5tYXJrZXIub3BhY2l0eTtpZih2b2lkIDAhPT1hKWYoYSl8fGUuc2VsZWN0ZWR8fGUudW5zZWxlY3RlZHx8KHI9YSxuPXMqYSksdCgic2VsZWN0ZWQubWFya2VyLm9wYWNpdHkiLHIpLHQoInVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHkiLG4pfX0sci52YWxpZGF0ZT1wfSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjEwMiwiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyI6MTE3LCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjoyMTEsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjI3NSwiLi9hcnJheSI6MjE4LCIuL21vZCI6MjM5LCIuL25lc3RlZF9wcm9wZXJ0eSI6MjQwLCIuL3JlZ2V4IjoyNDgsImZhc3QtaXNudW1lcmljIjoxNyx0aW55Y29sb3IyOjY3fV0sMjIzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuLGEsaT1lKCJkMy10aW1lLWZvcm1hdCIpLnRpbWVGb3JtYXQsbz1lKCJmYXN0LWlzbnVtZXJpYyIpLGw9ZSgiLi9sb2dnZXJzIikscz1lKCIuL21vZCIpLm1vZCxjPWUoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKSx1PWMuQkFETlVNLGQ9Yy5PTkVEQVksZj1jLk9ORUhPVVIscD1jLk9ORU1JTixoPWMuT05FU0VDLGc9Yy5FUE9DSEpELG09ZSgiLi4vcmVnaXN0cnkiKSx2PWUoImQzLXRpbWUtZm9ybWF0IikudXRjRm9ybWF0LHk9L15ccyooLT9cZFxkXGRcZHxcZFxkKSgtKFxkP1xkKSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkKDo/XGRcZCk/KT8pPyk/KT8pP1xzKiQvbSx4PS9eXHMqKC0/XGRcZFxkXGR8XGRcZCkoLShcZD9cZGk/KSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkKDo/XGRcZCk/KT8pPyk/KT8pP1xzKiQvbSxiPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS03MDtmdW5jdGlvbiBfKGUpe3JldHVybiBlJiZtLmNvbXBvbmVudHNSZWdpc3RyeS5jYWxlbmRhcnMmJiJzdHJpbmciPT10eXBlb2YgZSYmImdyZWdvcmlhbiIhPT1lfWZ1bmN0aW9uIHcoZSx0KXtyZXR1cm4gU3RyaW5nKGUrTWF0aC5wb3coMTAsdCkpLnN1YnN0cigxKX1yLmRhdGVUaWNrMD1mdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIF8oZSk/dD9tLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiQ0FOT05JQ0FMX1NVTkRBWSIpW2VdOm0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJDQU5PTklDQUxfVElDSyIpW2VdOnQ/IjIwMDAtMDEtMDIiOiIyMDAwLTAxLTAxIn0oZSwhIXQpO2lmKHQ8MilyZXR1cm4gbjt2YXIgYT1yLmRhdGVUaW1lMm1zKG4sZSk7cmV0dXJuIGErPWQqKHQtMSksci5tczJEYXRlVGltZShhLDAsZSl9LHIuZGZsdFJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBfKGUpP20uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJERkxUUkFOR0UiKVtlXTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl19LHIuaXNKU0RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0VGltZX0sci5kYXRlVGltZTJtcz1mdW5jdGlvbihlLHQpe2lmKHIuaXNKU0RhdGUoZSkpe3ZhciBpPWUuZ2V0VGltZXpvbmVPZmZzZXQoKSpwLG89KGUuZ2V0VVRDTWludXRlcygpLWUuZ2V0TWludXRlcygpKSpwKyhlLmdldFVUQ1NlY29uZHMoKS1lLmdldFNlY29uZHMoKSkqaCsoZS5nZXRVVENNaWxsaXNlY29uZHMoKS1lLmdldE1pbGxpc2Vjb25kcygpKTtpZihvKXt2YXIgbD0zKnA7aT1pLWwvMitzKG8taStsLzIsbCl9cmV0dXJuKGU9TnVtYmVyKGUpLWkpPj1uJiZlPD1hP2U6dX1pZigic3RyaW5nIiE9dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZSlyZXR1cm4gdTtlPVN0cmluZyhlKTt2YXIgYz1fKHQpLHY9ZS5jaGFyQXQoMCk7IWN8fCJHIiE9PXYmJiJnIiE9PXZ8fChlPWUuc3Vic3RyKDEpLHQ9IiIpO3ZhciB3PWMmJiJjaGluZXNlIj09PXQuc3Vic3RyKDAsNyksVD1lLm1hdGNoKHc/eDp5KTtpZighVClyZXR1cm4gdTt2YXIgTT1UWzFdLGs9VFszXXx8IjEiLEE9TnVtYmVyKFRbNV18fDEpLEw9TnVtYmVyKFRbN118fDApLFM9TnVtYmVyKFRbOV18fDApLEQ9TnVtYmVyKFRbMTFdfHwwKTtpZihjKXtpZigyPT09TS5sZW5ndGgpcmV0dXJuIHU7dmFyIEM7TT1OdW1iZXIoTSk7dHJ5e3ZhciBPPW0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKSh0KTtpZih3KXt2YXIgUD0iaSI9PT1rLmNoYXJBdChrLmxlbmd0aC0xKTtrPXBhcnNlSW50KGssMTApLEM9Ty5uZXdEYXRlKE0sTy50b01vbnRoSW5kZXgoTSxrLFApLEEpfWVsc2UgQz1PLm5ld0RhdGUoTSxOdW1iZXIoayksQSl9Y2F0Y2goZSl7cmV0dXJuIHV9cmV0dXJuIEM/KEMudG9KRCgpLWcpKmQrTCpmK1MqcCtEKmg6dX1NPTI9PT1NLmxlbmd0aD8oTnVtYmVyKE0pKzJlMy1iKSUxMDArYjpOdW1iZXIoTSksay09MTt2YXIgST1uZXcgRGF0ZShEYXRlLlVUQygyZTMsayxBLEwsUykpO3JldHVybiBJLnNldFVUQ0Z1bGxZZWFyKE0pLEkuZ2V0VVRDTW9udGgoKSE9PWt8fEkuZ2V0VVRDRGF0ZSgpIT09QT91OkkuZ2V0VGltZSgpK0QqaH0sbj1yLk1JTl9NUz1yLmRhdGVUaW1lMm1zKCItOTk5OSIpLGE9ci5NQVhfTVM9ci5kYXRlVGltZTJtcygiOTk5OS0xMi0zMSAyMzo1OTo1OS45OTk5Iiksci5pc0RhdGVUaW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGF0ZVRpbWUybXMoZSx0KSE9PXV9O3ZhciBUPTkwKmQsTT0zKmYsaz01KnA7ZnVuY3Rpb24gQShlLHQscixuLGEpe2lmKCh0fHxyfHxufHxhKSYmKGUrPSIgIit3KHQsMikrIjoiK3cociwyKSwobnx8YSkmJihlKz0iOiIrdyhuLDIpLGEpKSl7Zm9yKHZhciBpPTQ7YSUxMD09MDspaS09MSxhLz0xMDtlKz0iLiIrdyhhLGkpfXJldHVybiBlfXIubXMyRGF0ZVRpbWU9ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiIT10eXBlb2YgZXx8IShlPj1uJiZlPD1hKSlyZXR1cm4gdTt0fHwodD0wKTt2YXIgaSxvLGwsYyx5LHgsYj1NYXRoLmZsb29yKDEwKnMoZSsuMDUsMSkpLHc9TWF0aC5yb3VuZChlLWIvMTApO2lmKF8ocikpe3ZhciBMPU1hdGguZmxvb3Iody9kKStnLFM9TWF0aC5mbG9vcihzKGUsZCkpO3RyeXtpPW0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKS5mcm9tSkQoTCkuZm9ybWF0RGF0ZSgieXl5eS1tbS1kZCIpfWNhdGNoKGUpe2k9digiRyVZLSVtLSVkIikobmV3IERhdGUodykpfWlmKCItIj09PWkuY2hhckF0KDApKWZvcig7aS5sZW5ndGg8MTE7KWk9Ii0wIitpLnN1YnN0cigxKTtlbHNlIGZvcig7aS5sZW5ndGg8MTA7KWk9IjAiK2k7bz10PFQ/TWF0aC5mbG9vcihTL2YpOjAsbD10PFQ/TWF0aC5mbG9vcihTJWYvcCk6MCxjPXQ8TT9NYXRoLmZsb29yKFMlcC9oKTowLHk9dDxrP1MlaCoxMCtiOjB9ZWxzZSB4PW5ldyBEYXRlKHcpLGk9digiJVktJW0tJWQiKSh4KSxvPXQ8VD94LmdldFVUQ0hvdXJzKCk6MCxsPXQ8VD94LmdldFVUQ01pbnV0ZXMoKTowLGM9dDxNP3guZ2V0VVRDU2Vjb25kcygpOjAseT10PGs/MTAqeC5nZXRVVENNaWxsaXNlY29uZHMoKStiOjA7cmV0dXJuIEEoaSxvLGwsYyx5KX0sci5tczJEYXRlVGltZUxvY2FsPWZ1bmN0aW9uKGUpe2lmKCEoZT49bitkJiZlPD1hLWQpKXJldHVybiB1O3ZhciB0PU1hdGguZmxvb3IoMTAqcyhlKy4wNSwxKSkscj1uZXcgRGF0ZShNYXRoLnJvdW5kKGUtdC8xMCkpO3JldHVybiBBKGkoIiVZLSVtLSVkIikociksci5nZXRIb3VycygpLHIuZ2V0TWludXRlcygpLHIuZ2V0U2Vjb25kcygpLDEwKnIuZ2V0VVRDTWlsbGlzZWNvbmRzKCkrdCl9LHIuY2xlYW5EYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZihlPT09dSlyZXR1cm4gdDtpZihyLmlzSlNEYXRlKGUpfHwibnVtYmVyIj09dHlwZW9mIGUmJmlzRmluaXRlKGUpKXtpZihfKG4pKXJldHVybiBsLmVycm9yKCJKUyBEYXRlcyBhbmQgbWlsbGlzZWNvbmRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB3b3JsZCBjYWxlbmRhcnMiLGUpLHQ7aWYoIShlPXIubXMyRGF0ZVRpbWVMb2NhbCgrZSkpJiZ2b2lkIDAhPT10KXJldHVybiB0fWVsc2UgaWYoIXIuaXNEYXRlVGltZShlLG4pKXJldHVybiBsLmVycm9yKCJ1bnJlY29nbml6ZWQgZGF0ZSIsZSksdDtyZXR1cm4gZX07dmFyIEw9LyVcZD9mL2csUz0vJWgvZyxEPXsxOiIxIiwyOiIxIiwzOiIyIiw0OiIyIn07ZnVuY3Rpb24gQyhlLHQscixuKXtlPWUucmVwbGFjZShMLChmdW5jdGlvbihlKXt2YXIgcj1NYXRoLm1pbigrZS5jaGFyQXQoMSl8fDYsNik7cmV0dXJuKHQvMWUzJTErMikudG9GaXhlZChyKS5zdWJzdHIoMikucmVwbGFjZSgvMCskLywiIil8fCIwIn0pKTt2YXIgYT1uZXcgRGF0ZShNYXRoLmZsb29yKHQrLjA1KSk7aWYoZT1lLnJlcGxhY2UoUywoZnVuY3Rpb24oKXtyZXR1cm4gRFtyKCIlcSIpKGEpXX0pKSxfKG4pKXRyeXtlPW0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJ3b3JsZENhbEZtdCIpKGUsdCxuKX1jYXRjaChlKXtyZXR1cm4iSW52YWxpZCJ9cmV0dXJuIHIoZSkoYSl9dmFyIE89WzU5LDU5LjksNTkuOTksNTkuOTk5LDU5Ljk5OTldO3IuZm9ybWF0RGF0ZT1mdW5jdGlvbihlLHQscixuLGEsaSl7aWYoYT1fKGEpJiZhLCF0KWlmKCJ5Ij09PXIpdD1pLnllYXI7ZWxzZSBpZigibSI9PT1yKXQ9aS5tb250aDtlbHNle2lmKCJkIiE9PXIpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIHI9cyhlKy4wNSxkKSxuPXcoTWF0aC5mbG9vcihyL2YpLDIpKyI6Iit3KHMoTWF0aC5mbG9vcihyL3ApLDYwKSwyKTtpZigiTSIhPT10KXtvKHQpfHwodD0wKTt2YXIgYT0oMTAwK01hdGgubWluKHMoZS9oLDYwKSxPW3RdKSkudG9GaXhlZCh0KS5zdWJzdHIoMSk7dD4wJiYoYT1hLnJlcGxhY2UoLzArJC8sIiIpLnJlcGxhY2UoL1tcLl0kLywiIikpLG4rPSI6IithfXJldHVybiBufShlLHIpKyJcbiIrQyhpLmRheU1vbnRoWWVhcixlLG4sYSk7dD1pLmRheU1vbnRoKyJcbiIraS55ZWFyfXJldHVybiBDKHQsZSxuLGEpfTt2YXIgUD0zKmQ7ci5pbmNyZW1lbnRNb250aD1mdW5jdGlvbihlLHQscil7cj1fKHIpJiZyO3ZhciBuPXMoZSxkKTtpZihlPU1hdGgucm91bmQoZS1uKSxyKXRyeXt2YXIgYT1NYXRoLnJvdW5kKGUvZCkrZyxpPW0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKSxvPWkuZnJvbUpEKGEpO3JldHVybiB0JTEyP2kuYWRkKG8sdCwibSIpOmkuYWRkKG8sdC8xMiwieSIpLChvLnRvSkQoKS1nKSpkK259Y2F0Y2godCl7bC5lcnJvcigiaW52YWxpZCBtcyAiK2UrIiBpbiBjYWxlbmRhciAiK3IpfXZhciBjPW5ldyBEYXRlKGUrUCk7cmV0dXJuIGMuc2V0VVRDTW9udGgoYy5nZXRVVENNb250aCgpK3QpK24tUH0sci5maW5kRXhhY3REYXRlcz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGE9MCxpPTAsbD0wLHM9MCxjPV8odCkmJm0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKSh0KSx1PTA7dTxlLmxlbmd0aDt1KyspaWYobj1lW3VdLG8obikpe2lmKCEobiVkKSlpZihjKXRyeXsxPT09KHI9Yy5mcm9tSkQobi9kK2cpKS5kYXkoKT8xPT09ci5tb250aCgpP2ErKzppKys6bCsrfWNhdGNoKGUpe31lbHNlIDE9PT0ocj1uZXcgRGF0ZShuKSkuZ2V0VVRDRGF0ZSgpPzA9PT1yLmdldFVUQ01vbnRoKCk/YSsrOmkrKzpsKyt9ZWxzZSBzKys7bCs9aSs9YTt2YXIgZj1lLmxlbmd0aC1zO3JldHVybntleGFjdFllYXJzOmEvZixleGFjdE1vbnRoczppL2YsZXhhY3REYXlzOmwvZn19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjIxMiwiLi4vcmVnaXN0cnkiOjMxOCwiLi9sb2dnZXJzIjoyMzYsIi4vbW9kIjoyMzksImQzLXRpbWUtZm9ybWF0IjoxNCwiZmFzdC1pc251bWVyaWMiOjE3fV0sMjI0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4vbG9nZ2VycyIpLGk9ZSgiLi9tYXRyaXgiKSxvPWUoImdsLW1hdDQiKTtmdW5jdGlvbiBsKGUpe3ZhciB0PWUmJmUucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKGUpfWZ1bmN0aW9uIHMoZSx0LHIpe3ZhciBuPSJwbG90bHkuanMtc3R5bGUtIitlLGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobik7aXx8KChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIikpLnNldEF0dHJpYnV0ZSgiaWQiLG4pLGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGkpKTt2YXIgbz1pLnNoZWV0O28uaW5zZXJ0UnVsZT9vLmluc2VydFJ1bGUodCsieyIrcisifSIsMCk6by5hZGRSdWxlP28uYWRkUnVsZSh0LHIsMCk6YS53YXJuKCJhZGRTdHlsZVJ1bGUgZmFpbGVkIil9ZnVuY3Rpb24gYyhlKXt2YXIgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLHI9dC5nZXRQcm9wZXJ0eVZhbHVlKCItd2Via2l0LXRyYW5zZm9ybSIpfHx0LmdldFByb3BlcnR5VmFsdWUoIi1tb3otdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW1zLXRyYW5zZm9ybSIpfHx0LmdldFByb3BlcnR5VmFsdWUoIi1vLXRyYW5zZm9ybSIpfHx0LmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpO3JldHVybiJub25lIj09PXI/bnVsbDpyLnJlcGxhY2UoIm1hdHJpeCIsIiIpLnJlcGxhY2UoIjNkIiwiIikuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybitlfSkpfWZ1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PVtdO2QoZSk7KXQucHVzaChlKSxlPWUucGFyZW50Tm9kZTtyZXR1cm4gdH1mdW5jdGlvbiBkKGUpe3JldHVybiBlJiYoZSBpbnN0YW5jZW9mIEVsZW1lbnR8fGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl9dC5leHBvcnRzPXtnZXRHcmFwaERpdjpmdW5jdGlvbihlKXt2YXIgdDtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKG51bGw9PT0odD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSkpdGhyb3cgbmV3IEVycm9yKCJObyBET00gZWxlbWVudCB3aXRoIGlkICciK2UrIicgZXhpc3RzIG9uIHRoZSBwYWdlLiIpO3JldHVybiB0fWlmKG51bGw9PWUpdGhyb3cgbmV3IEVycm9yKCJET00gZWxlbWVudCBwcm92aWRlZCBpcyBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBlfSxpc1Bsb3REaXY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5zZWxlY3QoZSk7cmV0dXJuIHQubm9kZSgpaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmdC5zaXplKCkmJnQuY2xhc3NlZCgianMtcGxvdGx5LXBsb3QiKX0scmVtb3ZlRWxlbWVudDpsLGFkZFN0eWxlUnVsZTpmdW5jdGlvbihlLHQpe3MoImdsb2JhbCIsZSx0KX0sYWRkUmVsYXRlZFN0eWxlUnVsZTpzLGRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9InBsb3RseS5qcy1zdHlsZS0iK2Uscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtyJiZsKHIpfSxnZXRGdWxsVHJhbnNmb3JtTWF0cml4OmZ1bmN0aW9uKGUpe3ZhciB0PXUoZSkscj1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9YyhlKTtpZih0KXt2YXIgbj1pLmNvbnZlcnRDc3NNYXRyaXgodCk7cj1vLm11bHRpcGx5KHIscixuKX19KSkscn0sZ2V0RWxlbWVudFRyYW5zZm9ybU1hdHJpeDpjLGdldEVsZW1lbnRBbmRBbmNlc3RvcnM6dSxlcXVhbERvbVJlY3RzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJnQmJmUueD09PXQueCYmZS55PT09dC55JiZlLnRvcD09PXQudG9wJiZlLmxlZnQ9PT10LmxlZnQmJmUucmlnaHQ9PT10LnJpZ2h0JiZlLmJvdHRvbT09PXQuYm90dG9tfX19LHsiLi9sb2dnZXJzIjoyMzYsIi4vbWF0cml4IjoyMzgsIkBwbG90bHkvZDMiOjExLCJnbC1tYXQ0IjozM31dLDIyNTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJldmVudHMiKS5FdmVudEVtaXR0ZXIsYT17aW5pdDpmdW5jdGlvbihlKXtpZihlLl9ldiBpbnN0YW5jZW9mIG4pcmV0dXJuIGU7dmFyIHQ9bmV3IG4scj1uZXcgbjtyZXR1cm4gZS5fZXY9dCxlLl9pbnRlcm5hbEV2PXIsZS5vbj10Lm9uLmJpbmQodCksZS5vbmNlPXQub25jZS5iaW5kKHQpLGUucmVtb3ZlTGlzdGVuZXI9dC5yZW1vdmVMaXN0ZW5lci5iaW5kKHQpLGUucmVtb3ZlQWxsTGlzdGVuZXJzPXQucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQodCksZS5faW50ZXJuYWxPbj1yLm9uLmJpbmQociksZS5faW50ZXJuYWxPbmNlPXIub25jZS5iaW5kKHIpLGUuX3JlbW92ZUludGVybmFsTGlzdGVuZXI9ci5yZW1vdmVMaXN0ZW5lci5iaW5kKHIpLGUuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzPXIucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQociksZS5lbWl0PWZ1bmN0aW9uKG4sYSl7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJmpRdWVyeShlKS50cmlnZ2VyKG4sYSksdC5lbWl0KG4sYSksci5lbWl0KG4sYSl9LGV9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhOyJ1bmRlZmluZWQiIT10eXBlb2YgalF1ZXJ5JiYobj1qUXVlcnkoZSkudHJpZ2dlckhhbmRsZXIodCxyKSk7dmFyIGk9ZS5fZXY7aWYoIWkpcmV0dXJuIG47dmFyIG8sbD1pLl9ldmVudHNbdF07aWYoIWwpcmV0dXJuIG47ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS5saXN0ZW5lcj8oaS5yZW1vdmVMaXN0ZW5lcih0LGUubGlzdGVuZXIpLGUuZmlyZWQ/dm9pZCAwOihlLmZpcmVkPSEwLGUubGlzdGVuZXIuYXBwbHkoaSxbcl0pKSk6ZS5hcHBseShpLFtyXSl9Zm9yKGw9QXJyYXkuaXNBcnJheShsKT9sOltsXSxvPTA7bzxsLmxlbmd0aC0xO28rKylzKGxbb10pO3JldHVybiBhPXMobFtvXSksdm9pZCAwIT09bj9uOmF9LHB1cmdlOmZ1bmN0aW9uKGUpe3JldHVybiBkZWxldGUgZS5fZXYsZGVsZXRlIGUub24sZGVsZXRlIGUub25jZSxkZWxldGUgZS5yZW1vdmVMaXN0ZW5lcixkZWxldGUgZS5yZW1vdmVBbGxMaXN0ZW5lcnMsZGVsZXRlIGUuZW1pdCxkZWxldGUgZS5fZXYsZGVsZXRlIGUuX2ludGVybmFsRXYsZGVsZXRlIGUuX2ludGVybmFsT24sZGVsZXRlIGUuX2ludGVybmFsT25jZSxkZWxldGUgZS5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcixkZWxldGUgZS5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnMsZX19O3QuZXhwb3J0cz1hfSx7ZXZlbnRzOjEyfV0sMjI2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vaXNfcGxhaW5fb2JqZWN0LmpzIiksYT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIGkoZSx0LHIsbyl7dmFyIGwscyxjLHUsZCxmLHA9ZVswXSxoPWUubGVuZ3RoO2lmKDI9PT1oJiZhKHApJiZhKGVbMV0pJiYwPT09cC5sZW5ndGgpe2lmKGZ1bmN0aW9uKGUsdCl7dmFyIHIsbjtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXtpZihudWxsIT09KG49ZVtyXSkmJiJvYmplY3QiPT10eXBlb2YgbilyZXR1cm4hMTt2b2lkIDAhPT1uJiYodFtyXT1uKX1yZXR1cm4hMH0oZVsxXSxwKSlyZXR1cm4gcDtwLnNwbGljZSgwLHAubGVuZ3RoKX1mb3IodmFyIGc9MTtnPGg7ZysrKWZvcihzIGluIGw9ZVtnXSljPXBbc10sdT1sW3NdLG8mJmEodSk/cFtzXT11OnQmJnUmJihuKHUpfHwoZD1hKHUpKSk/KGQ/KGQ9ITEsZj1jJiZhKGMpP2M6W10pOmY9YyYmbihjKT9jOnt9LHBbc109aShbZix1XSx0LHIsbykpOih2b2lkIDAhPT11fHxyKSYmKHBbc109dSk7cmV0dXJuIHB9ci5leHRlbmRGbGF0PWZ1bmN0aW9uKCl7cmV0dXJuIGkoYXJndW1lbnRzLCExLCExLCExKX0sci5leHRlbmREZWVwPWZ1bmN0aW9uKCl7cmV0dXJuIGkoYXJndW1lbnRzLCEwLCExLCExKX0sci5leHRlbmREZWVwQWxsPWZ1bmN0aW9uKCl7cmV0dXJuIGkoYXJndW1lbnRzLCEwLCEwLCExKX0sci5leHRlbmREZWVwTm9BcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gaShhcmd1bWVudHMsITAsITEsITApfX0seyIuL2lzX3BsYWluX29iamVjdC5qcyI6MjMzfV0sMjI3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9e30scj1bXSxuPTAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgaT1lW2FdOzEhPT10W2ldJiYodFtpXT0xLHJbbisrXT1pKX1yZXR1cm4gcn19LHt9XSwyMjg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4hMD09PWUudmlzaWJsZX1mdW5jdGlvbiBhKGUpe3ZhciB0PWVbMF0udHJhY2U7cmV0dXJuITA9PT10LnZpc2libGUmJjAhPT10Ll9sZW5ndGh9dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPSh0PWUsQXJyYXkuaXNBcnJheSh0KSYmQXJyYXkuaXNBcnJheSh0WzBdKSYmdFswXVswXSYmdFswXVswXS50cmFjZT9hOm4pLGk9W10sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1lW29dO3IobCkmJmkucHVzaChsKX1yZXR1cm4gaX19LHt9XSwyMjk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG4sYSxpLG89ZSgiLi9tb2QiKS5tb2Q7ZnVuY3Rpb24gbChlLHQscixuLGEsaSxvLGwpe3ZhciBzPXItZSxjPWEtZSx1PW8tYSxkPW4tdCxmPWktdCxwPWwtaSxoPXMqcC11KmQ7aWYoMD09PWgpcmV0dXJuIG51bGw7dmFyIGc9KGMqcC11KmYpL2gsbT0oYypkLXMqZikvaDtyZXR1cm4gbTwwfHxtPjF8fGc8MHx8Zz4xP251bGw6e3g6ZStzKmcseTp0K2QqZ319ZnVuY3Rpb24gcyhlLHQscixuLGEpe3ZhciBpPW4qZSthKnQ7aWYoaTwwKXJldHVybiBuKm4rYSphO2lmKGk+cil7dmFyIG89bi1lLGw9YS10O3JldHVybiBvKm8rbCpsfXZhciBzPW4qdC1hKmU7cmV0dXJuIHMqcy9yfXIuc2VnbWVudHNJbnRlcnNlY3Q9bCxyLnNlZ21lbnREaXN0YW5jZT1mdW5jdGlvbihlLHQscixuLGEsaSxvLGMpe2lmKGwoZSx0LHIsbixhLGksbyxjKSlyZXR1cm4gMDt2YXIgdT1yLWUsZD1uLXQsZj1vLWEscD1jLWksaD11KnUrZCpkLGc9ZipmK3AqcCxtPU1hdGgubWluKHModSxkLGgsYS1lLGktdCkscyh1LGQsaCxvLWUsYy10KSxzKGYscCxnLGUtYSx0LWkpLHMoZixwLGcsci1hLG4taSkpO3JldHVybiBNYXRoLnNxcnQobSl9LHIuZ2V0VGV4dExvY2F0aW9uPWZ1bmN0aW9uKGUsdCxyLGwpe2lmKGU9PT1hJiZsPT09aXx8KG49e30sYT1lLGk9bCksbltyXSlyZXR1cm4gbltyXTt2YXIgcz1lLmdldFBvaW50QXRMZW5ndGgobyhyLWwvMix0KSksYz1lLmdldFBvaW50QXRMZW5ndGgobyhyK2wvMix0KSksdT1NYXRoLmF0YW4oKGMueS1zLnkpLyhjLngtcy54KSksZD1lLmdldFBvaW50QXRMZW5ndGgobyhyLHQpKSxmPXt4Oig0KmQueCtzLngrYy54KS82LHk6KDQqZC55K3MueStjLnkpLzYsdGhldGE6dX07cmV0dXJuIG5bcl09ZixmfSxyLmNsZWFyTG9jYXRpb25DYWNoZT1mdW5jdGlvbigpe2E9bnVsbH0sci5nZXRWaXNpYmxlU2VnbWVudD1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpPXQubGVmdCxvPXQucmlnaHQsbD10LnRvcCxzPXQuYm90dG9tLGM9MCx1PWUuZ2V0VG90YWxMZW5ndGgoKSxkPXU7ZnVuY3Rpb24gZih0KXt2YXIgcj1lLmdldFBvaW50QXRMZW5ndGgodCk7MD09PXQ/bj1yOnQ9PT11JiYoYT1yKTt2YXIgYz1yLng8aT9pLXIueDpyLng+bz9yLngtbzowLGQ9ci55PGw/bC1yLnk6ci55PnM/ci55LXM6MDtyZXR1cm4gTWF0aC5zcXJ0KGMqYytkKmQpfWZvcih2YXIgcD1mKGMpO3A7KXtpZigoYys9cCtyKT5kKXJldHVybjtwPWYoYyl9Zm9yKHA9ZihkKTtwOyl7aWYoYz4oZC09cCtyKSlyZXR1cm47cD1mKGQpfXJldHVybnttaW46YyxtYXg6ZCxsZW46ZC1jLHRvdGFsOnUsaXNDbG9zZWQ6MD09PWMmJmQ9PT11JiZNYXRoLmFicyhuLngtYS54KTwuMSYmTWF0aC5hYnMobi55LWEueSk8LjF9fSxyLmZpbmRQb2ludE9uUGF0aD1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGEsaSxvLGw9KG49bnx8e30pLnBhdGhMZW5ndGh8fGUuZ2V0VG90YWxMZW5ndGgoKSxzPW4udG9sZXJhbmNlfHwuMDAxLGM9bi5pdGVyYXRpb25MaW1pdHx8MzAsdT1lLmdldFBvaW50QXRMZW5ndGgoMClbcl0+ZS5nZXRQb2ludEF0TGVuZ3RoKGwpW3JdPy0xOjEsZD0wLGY9MCxwPWw7ZDxjOyl7aWYoYT0oZitwKS8yLG89KGk9ZS5nZXRQb2ludEF0TGVuZ3RoKGEpKVtyXS10LE1hdGguYWJzKG8pPHMpcmV0dXJuIGk7dSpvPjA/cD1hOmY9YSxkKyt9cmV0dXJuIGl9fSx7Ii4vbW9kIjoyMzl9XSwyMzA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlfX0se31dLDIzMTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighdClyZXR1cm4gZTt2YXIgcj0xL01hdGguYWJzKHQpLG49cj4xPyhyKmUrcip0KS9yOmUrdCxhPVN0cmluZyhuKS5sZW5ndGg7aWYoYT4xNil7dmFyIGk9U3RyaW5nKHQpLmxlbmd0aDtpZihhPj1TdHJpbmcoZSkubGVuZ3RoK2kpe3ZhciBvPXBhcnNlRmxvYXQobikudG9QcmVjaXNpb24oMTIpOy0xPT09by5pbmRleE9mKCJlKyIpJiYobj0rbyl9fXJldHVybiBufX0se31dLDIzMjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJAcGxvdGx5L2QzIiksYT1lKCJkMy10aW1lLWZvcm1hdCIpLnV0Y0Zvcm1hdCxpPWUoImQzLWZvcm1hdCIpLmZvcm1hdCxvPWUoImZhc3QtaXNudW1lcmljIiksbD1lKCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikscz1sLkZQX1NBRkUsYz0tcyx1PWwuQkFETlVNLGQ9dC5leHBvcnRzPXt9O2QuYWRqdXN0Rm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVybiFlfHwvXlxkWy5dXGRmLy50ZXN0KGUpfHwvWy5dXGQlLy50ZXN0KGUpP2U6IjAuZiI9PT1lPyJ+ZiI6L15cZCUvLnRlc3QoZSk/In4lIjovXlxkcy8udGVzdChlKT8ifnMiOiEvXlt+LC4wJF0vLnRlc3QoZSkmJi9bJmZwc10vLnRlc3QoZSk/In4iK2U6ZX07dmFyIGY9e307ZC53YXJuQmFkRm9ybWF0PWZ1bmN0aW9uKGUpe3ZhciB0PVN0cmluZyhlKTtmW3RdfHwoZlt0XT0xLGQud2FybignZW5jb3VudGVyZWQgYmFkIGZvcm1hdDogIicrdCsnIicpKX0sZC5ub0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfSxkLm51bWJlckZvcm1hdD1mdW5jdGlvbihlKXt2YXIgdDt0cnl7dD1pKGQuYWRqdXN0Rm9ybWF0KGUpKX1jYXRjaCh0KXtyZXR1cm4gZC53YXJuQmFkRm9ybWF0KGUpLGQubm9Gb3JtYXR9cmV0dXJuIHR9LGQubmVzdGVkUHJvcGVydHk9ZSgiLi9uZXN0ZWRfcHJvcGVydHkiKSxkLmtleWVkQ29udGFpbmVyPWUoIi4va2V5ZWRfY29udGFpbmVyIiksZC5yZWxhdGl2ZUF0dHI9ZSgiLi9yZWxhdGl2ZV9hdHRyIiksZC5pc1BsYWluT2JqZWN0PWUoIi4vaXNfcGxhaW5fb2JqZWN0IiksZC50b0xvZ1JhbmdlPWUoIi4vdG9fbG9nX3JhbmdlIiksZC5yZWxpbmtQcml2YXRlS2V5cz1lKCIuL3JlbGlua19wcml2YXRlIik7dmFyIHA9ZSgiLi9hcnJheSIpO2QuaXNUeXBlZEFycmF5PXAuaXNUeXBlZEFycmF5LGQuaXNBcnJheU9yVHlwZWRBcnJheT1wLmlzQXJyYXlPclR5cGVkQXJyYXksZC5pc0FycmF5MUQ9cC5pc0FycmF5MUQsZC5lbnN1cmVBcnJheT1wLmVuc3VyZUFycmF5LGQuY29uY2F0PXAuY29uY2F0LGQubWF4Um93TGVuZ3RoPXAubWF4Um93TGVuZ3RoLGQubWluUm93TGVuZ3RoPXAubWluUm93TGVuZ3RoO3ZhciBoPWUoIi4vbW9kIik7ZC5tb2Q9aC5tb2QsZC5tb2RIYWxmPWgubW9kSGFsZjt2YXIgZz1lKCIuL2NvZXJjZSIpO2QudmFsT2JqZWN0TWV0YT1nLnZhbE9iamVjdE1ldGEsZC5jb2VyY2U9Zy5jb2VyY2UsZC5jb2VyY2UyPWcuY29lcmNlMixkLmNvZXJjZUZvbnQ9Zy5jb2VyY2VGb250LGQuY29lcmNlUGF0dGVybj1nLmNvZXJjZVBhdHRlcm4sZC5jb2VyY2VIb3ZlcmluZm89Zy5jb2VyY2VIb3ZlcmluZm8sZC5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5PWcuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eSxkLnZhbGlkYXRlPWcudmFsaWRhdGU7dmFyIG09ZSgiLi9kYXRlcyIpO2QuZGF0ZVRpbWUybXM9bS5kYXRlVGltZTJtcyxkLmlzRGF0ZVRpbWU9bS5pc0RhdGVUaW1lLGQubXMyRGF0ZVRpbWU9bS5tczJEYXRlVGltZSxkLm1zMkRhdGVUaW1lTG9jYWw9bS5tczJEYXRlVGltZUxvY2FsLGQuY2xlYW5EYXRlPW0uY2xlYW5EYXRlLGQuaXNKU0RhdGU9bS5pc0pTRGF0ZSxkLmZvcm1hdERhdGU9bS5mb3JtYXREYXRlLGQuaW5jcmVtZW50TW9udGg9bS5pbmNyZW1lbnRNb250aCxkLmRhdGVUaWNrMD1tLmRhdGVUaWNrMCxkLmRmbHRSYW5nZT1tLmRmbHRSYW5nZSxkLmZpbmRFeGFjdERhdGVzPW0uZmluZEV4YWN0RGF0ZXMsZC5NSU5fTVM9bS5NSU5fTVMsZC5NQVhfTVM9bS5NQVhfTVM7dmFyIHY9ZSgiLi9zZWFyY2giKTtkLmZpbmRCaW49di5maW5kQmluLGQuc29ydGVyQXNjPXYuc29ydGVyQXNjLGQuc29ydGVyRGVzPXYuc29ydGVyRGVzLGQuZGlzdGluY3RWYWxzPXYuZGlzdGluY3RWYWxzLGQucm91bmRVcD12LnJvdW5kVXAsZC5zb3J0PXYuc29ydCxkLmZpbmRJbmRleE9mTWluPXYuZmluZEluZGV4T2ZNaW4sZC5zb3J0T2JqZWN0S2V5cz1lKCIuL3NvcnRfb2JqZWN0X2tleXMiKTt2YXIgeT1lKCIuL3N0YXRzIik7ZC5hZ2dOdW1zPXkuYWdnTnVtcyxkLmxlbj15LmxlbixkLm1lYW49eS5tZWFuLGQubWVkaWFuPXkubWVkaWFuLGQubWlkUmFuZ2U9eS5taWRSYW5nZSxkLnZhcmlhbmNlPXkudmFyaWFuY2UsZC5zdGRldj15LnN0ZGV2LGQuaW50ZXJwPXkuaW50ZXJwO3ZhciB4PWUoIi4vbWF0cml4Iik7ZC5pbml0MmRBcnJheT14LmluaXQyZEFycmF5LGQudHJhbnNwb3NlUmFnZ2VkPXgudHJhbnNwb3NlUmFnZ2VkLGQuZG90PXguZG90LGQudHJhbnNsYXRpb25NYXRyaXg9eC50cmFuc2xhdGlvbk1hdHJpeCxkLnJvdGF0aW9uTWF0cml4PXgucm90YXRpb25NYXRyaXgsZC5yb3RhdGlvblhZTWF0cml4PXgucm90YXRpb25YWU1hdHJpeCxkLmFwcGx5M0RUcmFuc2Zvcm09eC5hcHBseTNEVHJhbnNmb3JtLGQuYXBwbHkyRFRyYW5zZm9ybT14LmFwcGx5MkRUcmFuc2Zvcm0sZC5hcHBseTJEVHJhbnNmb3JtMj14LmFwcGx5MkRUcmFuc2Zvcm0yLGQuY29udmVydENzc01hdHJpeD14LmNvbnZlcnRDc3NNYXRyaXgsZC5pbnZlcnNlVHJhbnNmb3JtTWF0cml4PXguaW52ZXJzZVRyYW5zZm9ybU1hdHJpeDt2YXIgYj1lKCIuL2FuZ2xlcyIpO2QuZGVnMnJhZD1iLmRlZzJyYWQsZC5yYWQyZGVnPWIucmFkMmRlZyxkLmFuZ2xlRGVsdGE9Yi5hbmdsZURlbHRhLGQuYW5nbGVEaXN0PWIuYW5nbGVEaXN0LGQuaXNGdWxsQ2lyY2xlPWIuaXNGdWxsQ2lyY2xlLGQuaXNBbmdsZUluc2lkZVNlY3Rvcj1iLmlzQW5nbGVJbnNpZGVTZWN0b3IsZC5pc1B0SW5zaWRlU2VjdG9yPWIuaXNQdEluc2lkZVNlY3RvcixkLnBhdGhBcmM9Yi5wYXRoQXJjLGQucGF0aFNlY3Rvcj1iLnBhdGhTZWN0b3IsZC5wYXRoQW5udWx1cz1iLnBhdGhBbm51bHVzO3ZhciBfPWUoIi4vYW5jaG9yX3V0aWxzIik7ZC5pc0xlZnRBbmNob3I9Xy5pc0xlZnRBbmNob3IsZC5pc0NlbnRlckFuY2hvcj1fLmlzQ2VudGVyQW5jaG9yLGQuaXNSaWdodEFuY2hvcj1fLmlzUmlnaHRBbmNob3IsZC5pc1RvcEFuY2hvcj1fLmlzVG9wQW5jaG9yLGQuaXNNaWRkbGVBbmNob3I9Xy5pc01pZGRsZUFuY2hvcixkLmlzQm90dG9tQW5jaG9yPV8uaXNCb3R0b21BbmNob3I7dmFyIHc9ZSgiLi9nZW9tZXRyeTJkIik7ZC5zZWdtZW50c0ludGVyc2VjdD13LnNlZ21lbnRzSW50ZXJzZWN0LGQuc2VnbWVudERpc3RhbmNlPXcuc2VnbWVudERpc3RhbmNlLGQuZ2V0VGV4dExvY2F0aW9uPXcuZ2V0VGV4dExvY2F0aW9uLGQuY2xlYXJMb2NhdGlvbkNhY2hlPXcuY2xlYXJMb2NhdGlvbkNhY2hlLGQuZ2V0VmlzaWJsZVNlZ21lbnQ9dy5nZXRWaXNpYmxlU2VnbWVudCxkLmZpbmRQb2ludE9uUGF0aD13LmZpbmRQb2ludE9uUGF0aDt2YXIgVD1lKCIuL2V4dGVuZCIpO2QuZXh0ZW5kRmxhdD1ULmV4dGVuZEZsYXQsZC5leHRlbmREZWVwPVQuZXh0ZW5kRGVlcCxkLmV4dGVuZERlZXBBbGw9VC5leHRlbmREZWVwQWxsLGQuZXh0ZW5kRGVlcE5vQXJyYXlzPVQuZXh0ZW5kRGVlcE5vQXJyYXlzO3ZhciBNPWUoIi4vbG9nZ2VycyIpO2QubG9nPU0ubG9nLGQud2Fybj1NLndhcm4sZC5lcnJvcj1NLmVycm9yO3ZhciBrPWUoIi4vcmVnZXgiKTtkLmNvdW50ZXJSZWdleD1rLmNvdW50ZXI7dmFyIEE9ZSgiLi90aHJvdHRsZSIpO2QudGhyb3R0bGU9QS50aHJvdHRsZSxkLnRocm90dGxlRG9uZT1BLmRvbmUsZC5jbGVhclRocm90dGxlPUEuY2xlYXI7dmFyIEw9ZSgiLi9kb20iKTtmdW5jdGlvbiBTKGUpe3ZhciB0PXt9O2Zvcih2YXIgciBpbiBlKWZvcih2YXIgbj1lW3JdLGE9MDthPG4ubGVuZ3RoO2ErKyl0W25bYV1dPStyO3JldHVybiB0fWQuZ2V0R3JhcGhEaXY9TC5nZXRHcmFwaERpdixkLmlzUGxvdERpdj1MLmlzUGxvdERpdixkLnJlbW92ZUVsZW1lbnQ9TC5yZW1vdmVFbGVtZW50LGQuYWRkU3R5bGVSdWxlPUwuYWRkU3R5bGVSdWxlLGQuYWRkUmVsYXRlZFN0eWxlUnVsZT1MLmFkZFJlbGF0ZWRTdHlsZVJ1bGUsZC5kZWxldGVSZWxhdGVkU3R5bGVSdWxlPUwuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZSxkLmdldEZ1bGxUcmFuc2Zvcm1NYXRyaXg9TC5nZXRGdWxsVHJhbnNmb3JtTWF0cml4LGQuZ2V0RWxlbWVudFRyYW5zZm9ybU1hdHJpeD1MLmdldEVsZW1lbnRUcmFuc2Zvcm1NYXRyaXgsZC5nZXRFbGVtZW50QW5kQW5jZXN0b3JzPUwuZ2V0RWxlbWVudEFuZEFuY2VzdG9ycyxkLmVxdWFsRG9tUmVjdHM9TC5lcXVhbERvbVJlY3RzLGQuY2xlYXJSZXNwb25zaXZlPWUoIi4vY2xlYXJfcmVzcG9uc2l2ZSIpLGQucHJlc2VydmVEcmF3aW5nQnVmZmVyPWUoIi4vcHJlc2VydmVfZHJhd2luZ19idWZmZXIiKSxkLm1ha2VUcmFjZUdyb3Vwcz1lKCIuL21ha2VfdHJhY2VfZ3JvdXBzIiksZC5fPWUoIi4vbG9jYWxpemUiKSxkLm5vdGlmaWVyPWUoIi4vbm90aWZpZXIiKSxkLmZpbHRlclVuaXF1ZT1lKCIuL2ZpbHRlcl91bmlxdWUiKSxkLmZpbHRlclZpc2libGU9ZSgiLi9maWx0ZXJfdmlzaWJsZSIpLGQucHVzaFVuaXF1ZT1lKCIuL3B1c2hfdW5pcXVlIiksZC5pbmNyZW1lbnQ9ZSgiLi9pbmNyZW1lbnQiKSxkLmNsZWFuTnVtYmVyPWUoIi4vY2xlYW5fbnVtYmVyIiksZC5lbnN1cmVOdW1iZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSk/KGU9TnVtYmVyKGUpKT5zfHxlPGM/dTplOnV9LGQuaXNJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiEodm9pZCAwIT09dCYmZT49dCkmJihvKGUpJiZlPj0wJiZlJTE9PTApfSxkLm5vb3A9ZSgiLi9ub29wIiksZC5pZGVudGl0eT1lKCIuL2lkZW50aXR5IiksZC5yZXBlYXQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7bisrKXJbbl09ZTtyZXR1cm4gcn0sZC5zd2FwQXR0cnM9ZnVuY3Rpb24oZSx0LHIsbil7cnx8KHI9IngiKSxufHwobj0ieSIpO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgaT10W2FdLG89ZC5uZXN0ZWRQcm9wZXJ0eShlLGkucmVwbGFjZSgiPyIscikpLGw9ZC5uZXN0ZWRQcm9wZXJ0eShlLGkucmVwbGFjZSgiPyIsbikpLHM9by5nZXQoKTtvLnNldChsLmdldCgpKSxsLnNldChzKX19LGQucmFpc2VUb1RvcD1mdW5jdGlvbihlKXtlLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZSl9LGQuY2FuY2VsVHJhbnNpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCl9LGQuY29uc3RyYWluPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdD5yP01hdGgubWF4KHIsTWF0aC5taW4odCxlKSk6TWF0aC5tYXgodCxNYXRoLm1pbihyLGUpKX0sZC5iQm94SW50ZXJzZWN0PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gcj1yfHwwLGUubGVmdDw9dC5yaWdodCtyJiZ0LmxlZnQ8PWUucmlnaHQrciYmZS50b3A8PXQuYm90dG9tK3ImJnQudG9wPD1lLmJvdHRvbStyfSxkLnNpbXBsZU1hcD1mdW5jdGlvbihlLHQscixuLGEpe2Zvcih2YXIgaT1lLmxlbmd0aCxvPW5ldyBBcnJheShpKSxsPTA7bDxpO2wrKylvW2xdPXQoZVtsXSxyLG4sYSk7cmV0dXJuIG99LGQucmFuZHN0cj1mdW5jdGlvbiBlKHQscixuLGEpe2lmKG58fChuPTE2KSx2b2lkIDA9PT1yJiYocj0yNCkscjw9MClyZXR1cm4iMCI7dmFyIGksbyxsPU1hdGgubG9nKE1hdGgucG93KDIscikpL01hdGgubG9nKG4pLHM9IiI7Zm9yKGk9MjtsPT09MS8wO2kqPTIpbD1NYXRoLmxvZyhNYXRoLnBvdygyLHIvaSkpL01hdGgubG9nKG4pKmk7dmFyIGM9bC1NYXRoLmZsb29yKGwpO2ZvcihpPTA7aTxNYXRoLmZsb29yKGwpO2krKylzPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpuKS50b1N0cmluZyhuKStzO2MmJihvPU1hdGgucG93KG4sYykscz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbykudG9TdHJpbmcobikrcyk7dmFyIHU9cGFyc2VJbnQocyxuKTtyZXR1cm4gdCYmdFtzXXx8dSE9PTEvMCYmdT49TWF0aC5wb3coMixyKT9hPjEwPyhkLndhcm4oInJhbmRzdHIgZmFpbGVkIHVuaXF1ZW5lc3MiKSxzKTplKHQscixuLChhfHwwKSsxKTpzfSxkLk9wdGlvbkNvbnRyb2w9ZnVuY3Rpb24oZSx0KXtlfHwoZT17fSksdHx8KHQ9Im9wdCIpO3ZhciByPXtvcHRpb25MaXN0OltdLF9uZXdvcHRpb246ZnVuY3Rpb24obil7blt0XT1lLHJbbi5uYW1lXT1uLHIub3B0aW9uTGlzdC5wdXNoKG4pfX07cmV0dXJuIHJbIl8iK3RdPWUscn0sZC5zbW9vdGg9ZnVuY3Rpb24oZSx0KXtpZigodD1NYXRoLnJvdW5kKHQpfHwwKTwyKXJldHVybiBlO3ZhciByLG4sYSxpLG89ZS5sZW5ndGgsbD0yKm8scz0yKnQtMSxjPW5ldyBBcnJheShzKSx1PW5ldyBBcnJheShvKTtmb3Iocj0wO3I8cztyKyspY1tyXT0oMS1NYXRoLmNvcyhNYXRoLlBJKihyKzEpL3QpKS8oMip0KTtmb3Iocj0wO3I8bztyKyspe2ZvcihpPTAsbj0wO248cztuKyspKGE9cituKzEtdCk8LW8/YS09bCpNYXRoLnJvdW5kKGEvbCk6YT49bCYmKGEtPWwqTWF0aC5mbG9vcihhL2wpKSxhPDA/YT0tMS1hOmE+PW8mJihhPWwtMS1hKSxpKz1lW2FdKmNbbl07dVtyXT1pfXJldHVybiB1fSxkLnN5bmNPckFzeW5jPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbjtmdW5jdGlvbiBhKCl7cmV0dXJuIGQuc3luY09yQXN5bmMoZSx0LHIpfWZvcig7ZS5sZW5ndGg7KWlmKChuPSgwLGUuc3BsaWNlKDAsMSlbMF0pKHQpKSYmbi50aGVuKXJldHVybiBuLnRoZW4oYSk7cmV0dXJuIHImJnIodCl9LGQuc3RyaXBUcmFpbGluZ1NsYXNoPWZ1bmN0aW9uKGUpe3JldHVybiIvIj09PWUuc3Vic3RyKC0xKT9lLnN1YnN0cigwLGUubGVuZ3RoLTEpOmV9LGQubm9uZU9yQWxsPWZ1bmN0aW9uKGUsdCxyKXtpZihlKXt2YXIgbixhPSExLGk9ITA7Zm9yKG49MDtuPHIubGVuZ3RoO24rKyludWxsIT1lW3Jbbl1dP2E9ITA6aT0hMTtpZihhJiYhaSlmb3Iobj0wO248ci5sZW5ndGg7bisrKWVbcltuXV09dFtyW25dXX19LGQubWVyZ2VBcnJheT1mdW5jdGlvbihlLHQscixuKXt2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgbjtpZihkLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkpZm9yKHZhciBpPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKSxvPTA7bzxpO28rKyl7dmFyIGw9ZVtvXTt0W29dW3JdPWE/bihsKTpsfX0sZC5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZC5tZXJnZUFycmF5KGUsdCxyLChmdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gaXNGaW5pdGUodCkmJnQ+MD90OjB9KSl9LGQuZmlsbEFycmF5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKG49bnx8ZC5pZGVudGl0eSxkLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspdFthXVtyXT1uKGVbYV0pfSxkLmNhc3RPcHRpb249ZnVuY3Rpb24oZSx0LHIsbil7bj1ufHxkLmlkZW50aXR5O3ZhciBhPWQubmVzdGVkUHJvcGVydHkoZSxyKS5nZXQoKTtyZXR1cm4gZC5pc0FycmF5T3JUeXBlZEFycmF5KGEpP0FycmF5LmlzQXJyYXkodCkmJmQuaXNBcnJheU9yVHlwZWRBcnJheShhW3RbMF1dKT9uKGFbdFswXV1bdFsxXV0pOm4oYVt0XSk6YX0sZC5leHRyYWN0T3B0aW9uPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHIgaW4gZSlyZXR1cm4gZVtyXTt2YXIgYT1kLm5lc3RlZFByb3BlcnR5KHQsbikuZ2V0KCk7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/dm9pZCAwOmF9LGQudGFnU2VsZWN0ZWQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaT10LnNlbGVjdGVkcG9pbnRzLG89dC5faW5kZXhUb1BvaW50cztvJiYobj1TKG8pKTtmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIHM9aVtsXTtpZihkLmlzSW5kZXgocyl8fGQuaXNBcnJheU9yVHlwZWRBcnJheShzKSYmZC5pc0luZGV4KHNbMF0pJiZkLmlzSW5kZXgoc1sxXSkpe3ZhciBjPW4/bltzXTpzLHU9cj9yW2NdOmM7dm9pZCAwIT09KGE9dSkmJmE8ZS5sZW5ndGgmJihlW3VdLnNlbGVjdGVkPTEpfX19LGQuc2VsSW5kaWNlczJzZWxQb2ludHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3RlZHBvaW50cyxyPWUuX2luZGV4VG9Qb2ludHM7aWYocil7Zm9yKHZhciBuPVMociksYT1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07aWYoZC5pc0luZGV4KG8pKXt2YXIgbD1uW29dO2QuaXNJbmRleChsKSYmYS5wdXNoKGwpfX1yZXR1cm4gYX1yZXR1cm4gdH0sZC5nZXRUYXJnZXRBcnJheT1mdW5jdGlvbihlLHQpe3ZhciByPXQudGFyZ2V0O2lmKCJzdHJpbmciPT10eXBlb2YgciYmcil7dmFyIG49ZC5uZXN0ZWRQcm9wZXJ0eShlLHIpLmdldCgpO3JldHVybiEhQXJyYXkuaXNBcnJheShuKSYmbn1yZXR1cm4hIUFycmF5LmlzQXJyYXkocikmJnJ9LGQubWluRXh0ZW5kPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e307Im9iamVjdCIhPXR5cGVvZiB0JiYodD17fSk7dmFyIG4sYSxpLG89T2JqZWN0LmtleXMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylpPWVbYT1vW25dXSwiXyIhPT1hLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGkmJigibW9kdWxlIj09PWE/clthXT1pOkFycmF5LmlzQXJyYXkoaSk/clthXT0iY29sb3JzY2FsZSI9PT1hP2kuc2xpY2UoKTppLnNsaWNlKDAsMyk6ZC5pc1R5cGVkQXJyYXkoaSk/clthXT1pLnN1YmFycmF5KDAsMyk6clthXT1pJiYib2JqZWN0Ij09dHlwZW9mIGk/ZC5taW5FeHRlbmQoZVthXSx0W2FdKTppKTtmb3Iobz1PYmplY3Qua2V5cyh0KSxuPTA7bjxvLmxlbmd0aDtuKyspIm9iamVjdCI9PXR5cGVvZihpPXRbYT1vW25dXSkmJmEgaW4gciYmIm9iamVjdCI9PXR5cGVvZiByW2FdfHwoclthXT1pKTtyZXR1cm4gcn0sZC50aXRsZUNhc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHIoMSl9LGQuY29udGFpbnNBbnk9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZigtMSE9PWUuaW5kZXhPZih0W3JdKSlyZXR1cm4hMDtyZXR1cm4hMX0sZC5pc0lFPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYn07dmFyIEQ9L1ZlcnNpb25cL1tcZFwuXSsuKlNhZmFyaS87ZC5pc1NhZmFyaT1mdW5jdGlvbigpe3JldHVybiBELnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpfTt2YXIgQz0vaVBhZHxpUGhvbmV8aVBvZC87ZC5pc0lPUz1mdW5jdGlvbigpe3JldHVybiBDLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpfTt2YXIgTz0vRmlyZWZveFwvKFxkKylcLlxkKy87ZC5nZXRGaXJlZm94VmVyc2lvbj1mdW5jdGlvbigpe3ZhciBlPU8uZXhlYyh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7aWYoZSYmMj09PWUubGVuZ3RoKXt2YXIgdD1wYXJzZUludChlWzFdKTtpZighaXNOYU4odCkpcmV0dXJuIHR9cmV0dXJuIG51bGx9LGQuaXNEM1NlbGVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4uc2VsZWN0aW9ufSxkLmVuc3VyZVNpbmdsZT1mdW5jdGlvbihlLHQscixuKXt2YXIgYT1lLnNlbGVjdCh0KyhyPyIuIityOiIiKSk7aWYoYS5zaXplKCkpcmV0dXJuIGE7dmFyIGk9ZS5hcHBlbmQodCk7cmV0dXJuIHImJmkuY2xhc3NlZChyLCEwKSxuJiZpLmNhbGwobiksaX0sZC5lbnN1cmVTaW5nbGVCeUlkPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPWUuc2VsZWN0KHQrIiMiK3IpO2lmKGEuc2l6ZSgpKXJldHVybiBhO3ZhciBpPWUuYXBwZW5kKHQpLmF0dHIoImlkIixyKTtyZXR1cm4gbiYmaS5jYWxsKG4pLGl9LGQub2JqZWN0RnJvbVBhdGg9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbj1lLnNwbGl0KCIuIiksYT1yPXt9LGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXSxsPW51bGwscz1uW2ldLm1hdGNoKC8oLiopXFsoWzAtOV0rKVxdLyk7cz8obz1zWzFdLGw9c1syXSxyPXJbb109W10saT09PW4ubGVuZ3RoLTE/cltsXT10OnJbbF09e30scj1yW2xdKTooaT09PW4ubGVuZ3RoLTE/cltvXT10OnJbb109e30scj1yW29dKX1yZXR1cm4gYX07dmFyIFA9L14oW15cW1wuXSspXC4oLispPy8sST0vXihbXlwuXSspXFsoWzAtOV0rKVxdKFwuKT8oLispPy87ZC5leHBhbmRPYmplY3RQYXRocz1mdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxpLG8sbDtpZigib2JqZWN0Ij09dHlwZW9mIGUmJiFBcnJheS5pc0FycmF5KGUpKWZvcihyIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKCh0PXIubWF0Y2goUCkpPyhhPWVbcl0sbj10WzFdLGRlbGV0ZSBlW3JdLGVbbl09ZC5leHRlbmREZWVwTm9BcnJheXMoZVtuXXx8e30sZC5vYmplY3RGcm9tUGF0aChyLGQuZXhwYW5kT2JqZWN0UGF0aHMoYSkpW25dKSk6KHQ9ci5tYXRjaChJKSk/KGE9ZVtyXSxuPXRbMV0saT1wYXJzZUludCh0WzJdKSxkZWxldGUgZVtyXSxlW25dPWVbbl18fFtdLCIuIj09PXRbM10/KGw9dFs0XSxvPWVbbl1baV09ZVtuXVtpXXx8e30sZC5leHRlbmREZWVwTm9BcnJheXMobyxkLm9iamVjdEZyb21QYXRoKGwsZC5leHBhbmRPYmplY3RQYXRocyhhKSkpKTplW25dW2ldPWQuZXhwYW5kT2JqZWN0UGF0aHMoYSkpOmVbcl09ZC5leHBhbmRPYmplY3RQYXRocyhlW3JdKSk7cmV0dXJuIGV9LGQubnVtU2VwYXJhdGU9ZnVuY3Rpb24oZSx0LHIpe2lmKHJ8fChyPSExKSwic3RyaW5nIiE9dHlwZW9mIHR8fDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNlcGFyYXRvciBzdHJpbmcgcmVxdWlyZWQgZm9yIGZvcm1hdHRpbmchIik7Im51bWJlciI9PXR5cGVvZiBlJiYoZT1TdHJpbmcoZSkpO3ZhciBuPS8oXGQrKShcZHszfSkvLGE9dC5jaGFyQXQoMCksaT10LmNoYXJBdCgxKSxvPWUuc3BsaXQoIi4iKSxsPW9bMF0scz1vLmxlbmd0aD4xP2Erb1sxXToiIjtpZihpJiYoby5sZW5ndGg+MXx8bC5sZW5ndGg+NHx8cikpZm9yKDtuLnRlc3QobCk7KWw9bC5yZXBsYWNlKG4sIiQxIitpKyIkMiIpO3JldHVybiBsK3N9LGQuVEVNUExBVEVfU1RSSU5HX1JFR0VYPS8leyhbXlxzJXt9Ol0qKShbOnxcfF1bXn1dKik/fS9nO3ZhciBSPS9eXHcqJC87ZC50ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbihlLHQpe3ZhciByPXt9O3JldHVybiBlLnJlcGxhY2UoZC5URU1QTEFURV9TVFJJTkdfUkVHRVgsKGZ1bmN0aW9uKGUsbil7dmFyIGE7cmV0dXJuIFIudGVzdChuKT9hPXRbbl06KHJbbl09cltuXXx8ZC5uZXN0ZWRQcm9wZXJ0eSh0LG4pLmdldCxhPXJbbl0oKSksZC5pc1ZhbGlkVGV4dFZhbHVlKGEpP2E6IiJ9KSl9O3ZhciB6PXttYXg6MTAsY291bnQ6MCxuYW1lOiJob3ZlcnRlbXBsYXRlIn07ZC5ob3ZlcnRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXBwbHkoeixhcmd1bWVudHMpfTt2YXIgTj17bWF4OjEwLGNvdW50OjAsbmFtZToidGV4dHRlbXBsYXRlIn07ZC50ZXh0dGVtcGxhdGVTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hcHBseShOLGFyZ3VtZW50cyl9O3ZhciBGPS9eWzp8XHxdLztmdW5jdGlvbiBFKGUsdCxyKXt2YXIgbj10aGlzLGk9YXJndW1lbnRzO3R8fCh0PXt9KTt2YXIgbz17fTtyZXR1cm4gZS5yZXBsYWNlKGQuVEVNUExBVEVfU1RSSU5HX1JFR0VYLChmdW5jdGlvbihlLGwscyl7dmFyIGMsdSxmLHA9Il94b3RoZXIiPT09bHx8Il95b3RoZXIiPT09bCxoPSJfeG90aGVyXyI9PT1sfHwiX3lvdGhlcl8iPT09bCxnPSJ4b3RoZXJfIj09PWx8fCJ5b3RoZXJfIj09PWwsbT0ieG90aGVyIj09PWx8fCJ5b3RoZXIiPT09bHx8cHx8Z3x8aCx2PWw7aWYoKHB8fGgpJiYodj12LnN1YnN0cmluZygxKSksKGd8fGgpJiYodj12LnN1YnN0cmluZygwLHYubGVuZ3RoLTEpKSxtKXtpZih2b2lkIDA9PT0oYz10W3ZdKSlyZXR1cm4iIn1lbHNlIGZvcihmPTM7ZjxpLmxlbmd0aDtmKyspaWYodT1pW2ZdKXtpZih1Lmhhc093blByb3BlcnR5KHYpKXtjPXVbdl07YnJlYWt9aWYoUi50ZXN0KHYpfHwoYz1kLm5lc3RlZFByb3BlcnR5KHUsdikuZ2V0KCksKGM9b1t2XXx8ZC5uZXN0ZWRQcm9wZXJ0eSh1LHYpLmdldCgpKSYmKG9bdl09YykpLHZvaWQgMCE9PWMpYnJlYWt9aWYodm9pZCAwPT09YyYmbilyZXR1cm4gbi5jb3VudDxuLm1heCYmKGQud2FybigiVmFyaWFibGUgJyIrdisiJyBpbiAiK24ubmFtZSsiIGNvdWxkIG5vdCBiZSBmb3VuZCEiKSxjPWUpLG4uY291bnQ9PT1uLm1heCYmZC53YXJuKCJUb28gbWFueSAiK24ubmFtZSsiIHdhcm5pbmdzIC0gYWRkaXRpb25hbCB3YXJuaW5ncyB3aWxsIGJlIHN1cHByZXNzZWQiKSxuLmNvdW50KyssZTtpZihzKXt2YXIgeTtpZigiOiI9PT1zWzBdJiYoYz0oeT1yP3IubnVtYmVyRm9ybWF0OmQubnVtYmVyRm9ybWF0KShzLnJlcGxhY2UoRiwiIikpKGMpKSwifCI9PT1zWzBdKXt5PXI/ci50aW1lRm9ybWF0OmE7dmFyIHg9ZC5kYXRlVGltZTJtcyhjKTtjPWQuZm9ybWF0RGF0ZSh4LHMucmVwbGFjZShGLCIiKSwhMSx5KX19ZWxzZXt2YXIgYj12KyJMYWJlbCI7dC5oYXNPd25Qcm9wZXJ0eShiKSYmKGM9dFtiXSl9cmV0dXJuIG0mJihjPSIoIitjKyIpIiwocHx8aCkmJihjPSIgIitjKSwoZ3x8aCkmJihjKz0iICIpKSxjfSkpfWQuc3VicGxvdFNvcnQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpKzEsbj0wLGE9MCxpPTA7aTxyO2krKyl7dmFyIG89ZS5jaGFyQ29kZUF0KGkpfHwwLGw9dC5jaGFyQ29kZUF0KGkpfHwwLHM9bz49NDgmJm88PTU3LGM9bD49NDgmJmw8PTU3O2lmKHMmJihuPTEwKm4rby00OCksYyYmKGE9MTAqYStsLTQ4KSwhc3x8IWMpe2lmKG4hPT1hKXJldHVybiBuLWE7aWYobyE9PWwpcmV0dXJuIG8tbH19cmV0dXJuIGEtbn07dmFyIGo9MmU5O2Quc2VlZFBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe2o9MmU5fSxkLnBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe3ZhciBlPWo7cmV0dXJuIGo9KDY5MDY5KmorMSklNDI5NDk2NzI5NixNYXRoLmFicyhqLWUpPDQyOTQ5NjcyOT9kLnBzZXVkb1JhbmRvbSgpOmovNDI5NDk2NzI5Nn0sZC5maWxsVGV4dD1mdW5jdGlvbihlLHQscil7dmFyIG49QXJyYXkuaXNBcnJheShyKT9mdW5jdGlvbihlKXtyLnB1c2goZSl9OmZ1bmN0aW9uKGUpe3IudGV4dD1lfSxhPWQuZXh0cmFjdE9wdGlvbihlLHQsImh0eCIsImhvdmVydGV4dCIpO2lmKGQuaXNWYWxpZFRleHRWYWx1ZShhKSlyZXR1cm4gbihhKTt2YXIgaT1kLmV4dHJhY3RPcHRpb24oZSx0LCJ0eCIsInRleHQiKTtyZXR1cm4gZC5pc1ZhbGlkVGV4dFZhbHVlKGkpP24oaSk6dm9pZCAwfSxkLmlzVmFsaWRUZXh0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fDA9PT1lfSxkLmZvcm1hdFBlcmNlbnQ9ZnVuY3Rpb24oZSx0KXt0PXR8fDA7Zm9yKHZhciByPShNYXRoLnJvdW5kKDEwMCplKk1hdGgucG93KDEwLHQpKSpNYXRoLnBvdyguMSx0KSkudG9GaXhlZCh0KSsiJSIsbj0wO248dDtuKyspLTEhPT1yLmluZGV4T2YoIi4iKSYmKHI9KHI9ci5yZXBsYWNlKCIwJSIsIiUiKSkucmVwbGFjZSgiLiUiLCIlIikpO3JldHVybiByfSxkLmlzSGlkZGVuPWZ1bmN0aW9uKGUpe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmRpc3BsYXk7cmV0dXJuIXR8fCJub25lIj09PXR9LGQuc3RyVHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV8fHQ/InRyYW5zbGF0ZSgiK2UrIiwiK3QrIikiOiIifSxkLnN0clJvdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZT8icm90YXRlKCIrZSsiKSI6IiJ9LGQuc3RyU2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIDEhPT1lPyJzY2FsZSgiK2UrIikiOiIifSxkLmdldFRleHRUcmFuc2Zvcm09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub0NlbnRlcixyPWUudGV4dFgsbj1lLnRleHRZLGE9ZS50YXJnZXRYLGk9ZS50YXJnZXRZLG89ZS5hbmNob3JYfHwwLGw9ZS5hbmNob3JZfHwwLHM9ZS5yb3RhdGUsYz1lLnNjYWxlO3JldHVybiBjP2M+MSYmKGM9MSk6Yz0wLGQuc3RyVHJhbnNsYXRlKGEtYyoocitvKSxpLWMqKG4rbCkpK2Quc3RyU2NhbGUoYykrKHM/InJvdGF0ZSgiK3MrKHQ/IiI6IiAiK3IrIiAiK24pKyIpIjoiIil9LGQuZW5zdXJlVW5pZm9ybUZvbnRTaXplPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZC5leHRlbmRGbGF0KHt9LHQpO3JldHVybiByLnNpemU9TWF0aC5tYXgodC5zaXplLGUuX2Z1bGxMYXlvdXQudW5pZm9ybXRleHQubWluc2l6ZXx8MCkscn0sZC5qb2luMj1mdW5jdGlvbihlLHQscil7dmFyIG49ZS5sZW5ndGg7cmV0dXJuIG4+MT9lLnNsaWNlKDAsLTEpLmpvaW4odCkrcitlW24tMV06ZS5qb2luKHQpfSxkLmJpZ0ZvbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoMS4yKmUpfTt2YXIgSD1kLmdldEZpcmVmb3hWZXJzaW9uKCksQj1udWxsIT09SCYmSDw4NjtkLmdldFBvc2l0aW9uRnJvbUQzRXZlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gQj9bbi5ldmVudC5sYXllclgsbi5ldmVudC5sYXllclldOltuLmV2ZW50Lm9mZnNldFgsbi5ldmVudC5vZmZzZXRZXX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6MjEyLCIuL2FuY2hvcl91dGlscyI6MjE2LCIuL2FuZ2xlcyI6MjE3LCIuL2FycmF5IjoyMTgsIi4vY2xlYW5fbnVtYmVyIjoyMTksIi4vY2xlYXJfcmVzcG9uc2l2ZSI6MjIxLCIuL2NvZXJjZSI6MjIyLCIuL2RhdGVzIjoyMjMsIi4vZG9tIjoyMjQsIi4vZXh0ZW5kIjoyMjYsIi4vZmlsdGVyX3VuaXF1ZSI6MjI3LCIuL2ZpbHRlcl92aXNpYmxlIjoyMjgsIi4vZ2VvbWV0cnkyZCI6MjI5LCIuL2lkZW50aXR5IjoyMzAsIi4vaW5jcmVtZW50IjoyMzEsIi4vaXNfcGxhaW5fb2JqZWN0IjoyMzMsIi4va2V5ZWRfY29udGFpbmVyIjoyMzQsIi4vbG9jYWxpemUiOjIzNSwiLi9sb2dnZXJzIjoyMzYsIi4vbWFrZV90cmFjZV9ncm91cHMiOjIzNywiLi9tYXRyaXgiOjIzOCwiLi9tb2QiOjIzOSwiLi9uZXN0ZWRfcHJvcGVydHkiOjI0MCwiLi9ub29wIjoyNDEsIi4vbm90aWZpZXIiOjI0MiwiLi9wcmVzZXJ2ZV9kcmF3aW5nX2J1ZmZlciI6MjQ1LCIuL3B1c2hfdW5pcXVlIjoyNDYsIi4vcmVnZXgiOjI0OCwiLi9yZWxhdGl2ZV9hdHRyIjoyNDksIi4vcmVsaW5rX3ByaXZhdGUiOjI1MCwiLi9zZWFyY2giOjI1MSwiLi9zb3J0X29iamVjdF9rZXlzIjoyNTMsIi4vc3RhdHMiOjI1NCwiLi90aHJvdHRsZSI6MjU2LCIuL3RvX2xvZ19yYW5nZSI6MjU3LCJAcGxvdGx5L2QzIjoxMSwiZDMtZm9ybWF0IjoxMywiZDMtdGltZS1mb3JtYXQiOjE0LCJmYXN0LWlzbnVtZXJpYyI6MTd9XSwyMzM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiB3aW5kb3cmJndpbmRvdy5wcm9jZXNzJiZ3aW5kb3cucHJvY2Vzcy52ZXJzaW9ucz8iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKToiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpLmhhc093blByb3BlcnR5KCJoYXNPd25Qcm9wZXJ0eSIpfX0se31dLDIzNDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL25lc3RlZF9wcm9wZXJ0eSIpLGE9L15cdyokLzt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG8sbCxzO3I9cnx8Im5hbWUiLGk9aXx8InZhbHVlIjt2YXIgYz17fTt0JiZ0Lmxlbmd0aD8ocz1uKGUsdCksbD1zLmdldCgpKTpsPWUsdD10fHwiIjt2YXIgdT17fTtpZihsKWZvcihvPTA7bzxsLmxlbmd0aDtvKyspdVtsW29dW3JdXT1vO3ZhciBkPWEudGVzdChpKSxmPXtzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgYT1udWxsPT09dD80OjA7aWYoIWwpe2lmKCFzfHw0PT09YSlyZXR1cm47bD1bXSxzLnNldChsKX12YXIgbz11W2VdO2lmKHZvaWQgMD09PW8pe2lmKDQ9PT1hKXJldHVybjthfD0zLG89bC5sZW5ndGgsdVtlXT1vfWVsc2UgdCE9PShkP2xbb11baV06bihsW29dLGkpLmdldCgpKSYmKGF8PTIpO3ZhciBwPWxbb109bFtvXXx8e307cmV0dXJuIHBbcl09ZSxkP3BbaV09dDpuKHAsaSkuc2V0KHQpLG51bGwhPT10JiYoYSY9LTUpLGNbb109Y1tvXXxhLGZ9LGdldDpmdW5jdGlvbihlKXtpZihsKXt2YXIgdD11W2VdO3JldHVybiB2b2lkIDA9PT10P3ZvaWQgMDpkP2xbdF1baV06bihsW3RdLGkpLmdldCgpfX0scmVuYW1lOmZ1bmN0aW9uKGUsdCl7dmFyIG49dVtlXTtyZXR1cm4gdm9pZCAwPT09bnx8KGNbbl09MXxjW25dLHVbdF09bixkZWxldGUgdVtlXSxsW25dW3JdPXQpLGZ9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD11W2VdO2lmKHZvaWQgMD09PXQpcmV0dXJuIGY7dmFyIGE9bFt0XTtpZihPYmplY3Qua2V5cyhhKS5sZW5ndGg+MilyZXR1cm4gY1t0XT0yfGNbdF0sZi5zZXQoZSxudWxsKTtpZihkKXtmb3Iobz10O288bC5sZW5ndGg7bysrKWNbb109M3xjW29dO2ZvcihvPXQ7bzxsLmxlbmd0aDtvKyspdVtsW29dW3JdXS0tO2wuc3BsaWNlKHQsMSksZGVsZXRlIHVbZV19ZWxzZSBuKGEsaSkuc2V0KG51bGwpLGNbdF09NnxjW3RdO3JldHVybiBmfSxjb25zdHJ1Y3RVcGRhdGU6ZnVuY3Rpb24oKXtmb3IodmFyIGUsYSxvPXt9LHM9T2JqZWN0LmtleXMoYyksdT0wO3U8cy5sZW5ndGg7dSsrKWE9c1t1XSxlPXQrIlsiK2ErIl0iLGxbYV0/KDEmY1thXSYmKG9bZSsiLiIrcl09bFthXVtyXSksMiZjW2FdJiYob1tlKyIuIitpXT1kPzQmY1thXT9udWxsOmxbYV1baV06NCZjW2FdP251bGw6bihsW2FdLGkpLmdldCgpKSk6b1tlXT1udWxsO3JldHVybiBvfX07cmV0dXJuIGZ9fSx7Ii4vbmVzdGVkX3Byb3BlcnR5IjoyNDB9XSwyMzU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vcmVnaXN0cnkiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5fY29udGV4dC5sb2NhbGUsYT0wO2E8MjthKyspe2Zvcih2YXIgaT1lLl9jb250ZXh0LmxvY2FsZXMsbz0wO288MjtvKyspe3ZhciBsPShpW3JdfHx7fSkuZGljdGlvbmFyeTtpZihsKXt2YXIgcz1sW3RdO2lmKHMpcmV0dXJuIHN9aT1uLmxvY2FsZVJlZ2lzdHJ5fXZhciBjPXIuc3BsaXQoIi0iKVswXTtpZihjPT09cilicmVhaztyPWN9cmV0dXJuIHR9fSx7Ii4uL3JlZ2lzdHJ5IjozMTh9XSwyMzY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vcGxvdF9hcGkvcGxvdF9jb25maWciKS5kZmx0Q29uZmlnLGE9ZSgiLi9ub3RpZmllciIpLGk9dC5leHBvcnRzPXt9O2kubG9nPWZ1bmN0aW9uKCl7dmFyIGU7aWYobi5sb2dnaW5nPjEpe3ZhciB0PVsiTE9HOiJdO2ZvcihlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnB1c2goYXJndW1lbnRzW2VdKTtjb25zb2xlLnRyYWNlLmFwcGx5KGNvbnNvbGUsdCl9aWYobi5ub3RpZnlPbkxvZ2dpbmc+MSl7dmFyIHI9W107Zm9yKGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXIucHVzaChhcmd1bWVudHNbZV0pO2Eoci5qb2luKCI8YnI+IiksImxvbmciKX19LGkud2Fybj1mdW5jdGlvbigpe3ZhciBlO2lmKG4ubG9nZ2luZz4wKXt2YXIgdD1bIldBUk46Il07Zm9yKGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQucHVzaChhcmd1bWVudHNbZV0pO2NvbnNvbGUudHJhY2UuYXBwbHkoY29uc29sZSx0KX1pZihuLm5vdGlmeU9uTG9nZ2luZz4wKXt2YXIgcj1bXTtmb3IoZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspci5wdXNoKGFyZ3VtZW50c1tlXSk7YShyLmpvaW4oIjxicj4iKSwic3RpY2siKX19LGkuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgZTtpZihuLmxvZ2dpbmc+MCl7dmFyIHQ9WyJFUlJPUjoiXTtmb3IoZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7Y29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLHQpfWlmKG4ubm90aWZ5T25Mb2dnaW5nPjApe3ZhciByPVtdO2ZvcihlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKylyLnB1c2goYXJndW1lbnRzW2VdKTthKHIuam9pbigiPGJyPiIpLCJzdGljayIpfX19LHsiLi4vcGxvdF9hcGkvcGxvdF9jb25maWciOjI2NiwiLi9ub3RpZmllciI6MjQyfV0sMjM3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPWUuc2VsZWN0QWxsKCJnLiIrci5yZXBsYWNlKC9ccy9nLCIuIikpLmRhdGEodCwoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF0udHJhY2UudWlkfSkpO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsciksYS5vcmRlcigpO3ZhciBpPWUuY2xhc3NlZCgicmFuZ2VwbG90Iik/Im5vZGVSYW5nZVBsb3QzIjoibm9kZTMiO3JldHVybiBhLmVhY2goKGZ1bmN0aW9uKGUpe2VbMF1baV09bi5zZWxlY3QodGhpcyl9KSksYX19LHsiQHBsb3RseS9kMyI6MTF9XSwyMzg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZ2wtbWF0NCIpO3IuaW5pdDJkQXJyYXk9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09bmV3IEFycmF5KHQpO3JldHVybiByfSxyLnRyYW5zcG9zZVJhZ2dlZD1mdW5jdGlvbihlKXt2YXIgdCxyLG49MCxhPWUubGVuZ3RoO2Zvcih0PTA7dDxhO3QrKyluPU1hdGgubWF4KG4sZVt0XS5sZW5ndGgpO3ZhciBpPW5ldyBBcnJheShuKTtmb3IodD0wO3Q8bjt0KyspZm9yKGlbdF09bmV3IEFycmF5KGEpLHI9MDtyPGE7cisrKWlbdF1bcl09ZVtyXVt0XTtyZXR1cm4gaX0sci5kb3Q9ZnVuY3Rpb24oZSx0KXtpZighZS5sZW5ndGh8fCF0Lmxlbmd0aHx8ZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgbixhLGk9ZS5sZW5ndGg7aWYoZVswXS5sZW5ndGgpZm9yKG49bmV3IEFycmF5KGkpLGE9MDthPGk7YSsrKW5bYV09ci5kb3QoZVthXSx0KTtlbHNlIGlmKHRbMF0ubGVuZ3RoKXt2YXIgbz1yLnRyYW5zcG9zZVJhZ2dlZCh0KTtmb3Iobj1uZXcgQXJyYXkoby5sZW5ndGgpLGE9MDthPG8ubGVuZ3RoO2ErKyluW2FdPXIuZG90KGUsb1thXSl9ZWxzZSBmb3Iobj0wLGE9MDthPGk7YSsrKW4rPWVbYV0qdFthXTtyZXR1cm4gbn0sci50cmFuc2xhdGlvbk1hdHJpeD1mdW5jdGlvbihlLHQpe3JldHVybltbMSwwLGVdLFswLDEsdF0sWzAsMCwxXV19LHIucm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSpNYXRoLlBJLzE4MDtyZXR1cm5bW01hdGguY29zKHQpLC1NYXRoLnNpbih0KSwwXSxbTWF0aC5zaW4odCksTWF0aC5jb3ModCksMF0sWzAsMCwxXV19LHIucm90YXRpb25YWU1hdHJpeD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuZG90KHIuZG90KHIudHJhbnNsYXRpb25NYXRyaXgodCxuKSxyLnJvdGF0aW9uTWF0cml4KGUpKSxyLnRyYW5zbGF0aW9uTWF0cml4KC10LC1uKSl9LHIuYXBwbHkzRFRyYW5zZm9ybT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMsbj0xPT09YXJndW1lbnRzLmxlbmd0aD90WzBdOlt0WzBdLHRbMV0sdFsyXXx8MF07cmV0dXJuIHIuZG90KGUsW25bMF0sblsxXSxuWzJdLDFdKS5zbGljZSgwLDMpfX0sci5hcHBseTJEVHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50czszPT09dC5sZW5ndGgmJih0PXRbMF0pO3ZhciBuPTE9PT1hcmd1bWVudHMubGVuZ3RoP3RbMF06W3RbMF0sdFsxXV07cmV0dXJuIHIuZG90KGUsW25bMF0sblsxXSwxXSkuc2xpY2UoMCwyKX19LHIuYXBwbHkyRFRyYW5zZm9ybTI9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5hcHBseTJEVHJhbnNmb3JtKGUpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlLnNsaWNlKDAsMikpLmNvbmNhdCh0KGUuc2xpY2UoMiw0KSkpfX0sci5jb252ZXJ0Q3NzTWF0cml4PWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PWUubGVuZ3RoO2lmKDE2PT09dClyZXR1cm4gZTtpZig2PT09dClyZXR1cm5bZVswXSxlWzFdLDAsMCxlWzJdLGVbM10sMCwwLDAsMCwxLDAsZVs0XSxlWzVdLDAsMV19cmV0dXJuWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdfSxyLmludmVyc2VUcmFuc2Zvcm1NYXRyaXg9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIG4uaW52ZXJ0KHQsZSksW1t0WzBdLHRbMV0sdFsyXSx0WzNdXSxbdFs0XSx0WzVdLHRbNl0sdFs3XV0sW3RbOF0sdFs5XSx0WzEwXSx0WzExXV0sW3RbMTJdLHRbMTNdLHRbMTRdLHRbMTVdXV19fSx7ImdsLW1hdDQiOjMzfV0sMjM5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17bW9kOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZSV0O3JldHVybiByPDA/cit0OnJ9LG1vZEhhbGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5hYnMoZSk+dC8yP2UtTWF0aC5yb3VuZChlL3QpKnQ6ZX19fSx7fV0sMjQwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbixvLGwscyxjPWU7Zm9yKGw9MDtsPHQubGVuZ3RoLTE7bCsrKXtpZigtMT09PShyPXRbbF0pKXtmb3Iobj0hMCxvPVtdLHM9MDtzPGMubGVuZ3RoO3MrKylvW3NdPWkoY1tzXSx0LnNsaWNlKGwrMSkpKCksb1tzXSE9PW9bMF0mJihuPSExKTtyZXR1cm4gbj9vWzBdOm99aWYoIm51bWJlciI9PXR5cGVvZiByJiYhYShjKSlyZXR1cm47aWYoIm9iamVjdCIhPXR5cGVvZihjPWNbcl0pfHxudWxsPT09YylyZXR1cm59aWYoIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09YyYmbnVsbCE9PShvPWNbdFtsXV0pKXJldHVybiBvfX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihuKHQpKXQ9U3RyaW5nKHQpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiB0fHwiWy0xXSI9PT10LnN1YnN0cih0Lmxlbmd0aC00KSl0aHJvdyJiYWQgcHJvcGVydHkgc3RyaW5nIjtmb3IodmFyIHIsYSxvLGw9MCxjPXQuc3BsaXQoIi4iKTtsPGMubGVuZ3RoOyl7aWYocj1TdHJpbmcoY1tsXSkubWF0Y2goL14oW15cW1xdXSopKChcW1wtP1swLTldKlxdKSspJC8pKXtpZihyWzFdKWNbbF09clsxXTtlbHNle2lmKDAhPT1sKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Muc3BsaWNlKDAsMSl9Zm9yKGE9clsyXS5zdWJzdHIoMSxyWzJdLmxlbmd0aC0yKS5zcGxpdCgiXVsiKSxvPTA7bzxhLmxlbmd0aDtvKyspbCsrLGMuc3BsaWNlKGwsMCxOdW1iZXIoYVtvXSkpfWwrK31yZXR1cm4ib2JqZWN0IiE9dHlwZW9mIGU/ZnVuY3Rpb24oZSx0LHIpe3JldHVybntzZXQ6ZnVuY3Rpb24oKXt0aHJvdyJiYWQgY29udGFpbmVyIn0sZ2V0OmZ1bmN0aW9uKCl7fSxhc3RyOnQscGFydHM6cixvYmo6ZX19KGUsdCxjKTp7c2V0OnMoZSxjLHQpLGdldDppKGUsYyksYXN0cjp0LHBhcnRzOmMsb2JqOmV9fTt2YXIgbz0vKF58XC4pYXJnc1xbLztmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIHZvaWQgMD09PWV8fG51bGw9PT1lJiYhdC5tYXRjaChvKX1mdW5jdGlvbiBzKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGksbyxzPWUsZj0iIixwPVtbZSxmXV0saD1sKG4scik7Zm9yKG89MDtvPHQubGVuZ3RoLTE7bysrKXtpZigibnVtYmVyIj09dHlwZW9mKGk9dFtvXSkmJiFhKHMpKXRocm93ImFycmF5IGluZGV4IGJ1dCBjb250YWluZXIgaXMgbm90IGFuIGFycmF5IjtpZigtMT09PWkpe2lmKGg9IXUocyx0LnNsaWNlKG8rMSksbixyKSlicmVhaztyZXR1cm59aWYoIWQocyxpLHRbbysxXSxoKSlicmVhaztpZigib2JqZWN0IiE9dHlwZW9mKHM9c1tpXSl8fG51bGw9PT1zKXRocm93ImNvbnRhaW5lciBpcyBub3QgYW4gb2JqZWN0IjtmPWMoZixpKSxwLnB1c2goW3MsZl0pfWlmKGgpe2lmKG89PT10Lmxlbmd0aC0xJiYoZGVsZXRlIHNbdFtvXV0sQXJyYXkuaXNBcnJheShzKSYmK3Rbb109PXMubGVuZ3RoLTEpKWZvcig7cy5sZW5ndGgmJnZvaWQgMD09PXNbcy5sZW5ndGgtMV07KXMucG9wKCl9ZWxzZSBzW3Rbb11dPW59fWZ1bmN0aW9uIGMoZSx0KXt2YXIgcj10O3JldHVybiBuKHQpP3I9IlsiK3QrIl0iOmUmJihyPSIuIit0KSxlK3J9ZnVuY3Rpb24gdShlLHQscixuKXt2YXIgaSxvPWEociksYz0hMCx1PXIsZj1uLnJlcGxhY2UoIi0xIiwwKSxwPSFvJiZsKHIsZiksaD10WzBdO2ZvcihpPTA7aTxlLmxlbmd0aDtpKyspZj1uLnJlcGxhY2UoIi0xIixpKSxvJiYocD1sKHU9cltpJXIubGVuZ3RoXSxmKSkscCYmKGM9ITEpLGQoZSxpLGgscCkmJnMoZVtpXSx0LG4ucmVwbGFjZSgiLTEiLGkpKSh1KTtyZXR1cm4gY31mdW5jdGlvbiBkKGUsdCxyLG4pe2lmKHZvaWQgMD09PWVbdF0pe2lmKG4pcmV0dXJuITE7ZVt0XT0ibnVtYmVyIj09dHlwZW9mIHI/W106e319cmV0dXJuITB9fSx7Ii4vYXJyYXkiOjIxOCwiZmFzdC1pc251bWVyaWMiOjE3fV0sMjQxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSwyNDI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgiZmFzdC1pc251bWVyaWMiKSxpPVtdO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKC0xPT09aS5pbmRleE9mKGUpKXtpLnB1c2goZSk7dmFyIHI9MWUzO2EodCk/cj10OiJsb25nIj09PXQmJihyPTNlMyk7dmFyIG89bi5zZWxlY3QoImJvZHkiKS5zZWxlY3RBbGwoIi5wbG90bHktbm90aWZpZXIiKS5kYXRhKFswXSk7by5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdGx5LW5vdGlmaWVyIiwhMCksby5zZWxlY3RBbGwoIi5ub3RpZmllci1ub3RlIikuZGF0YShpKS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgibm90aWZpZXItbm90ZSIsITApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgYT1uLnNlbGVjdCh0aGlzKTthLmFwcGVuZCgiYnV0dG9uIikuY2xhc3NlZCgibm90aWZpZXItY2xvc2UiLCEwKS5odG1sKCImdGltZXM7Iikub24oImNsaWNrIiwoZnVuY3Rpb24oKXthLnRyYW5zaXRpb24oKS5jYWxsKGwpfSkpO2Zvcih2YXIgaT1hLmFwcGVuZCgicCIpLG89ZS5zcGxpdCgvPGJyXHMqXC8/Pi9nKSxzPTA7czxvLmxlbmd0aDtzKyspcyYmaS5hcHBlbmQoImJyIiksaS5hcHBlbmQoInNwYW4iKS50ZXh0KG9bc10pOyJzdGljayI9PT10P2EudHJhbnNpdGlvbigpLmR1cmF0aW9uKDM1MCkuc3R5bGUoIm9wYWNpdHkiLDEpOmEudHJhbnNpdGlvbigpLmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDEpLnRyYW5zaXRpb24oKS5kZWxheShyKS5jYWxsKGwpfSkpfWZ1bmN0aW9uIGwoZSl7ZS5kdXJhdGlvbig3MDApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKCJlbmQiLChmdW5jdGlvbihlKXt2YXIgdD1pLmluZGV4T2YoZSk7LTEhPT10JiZpLnNwbGljZSh0LDEpLG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSkpfX19LHsiQHBsb3RseS9kMyI6MTEsImZhc3QtaXNudW1lcmljIjoxN31dLDI0MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL3NldGN1cnNvciIpLGE9ImRhdGEtc2F2ZWRjdXJzb3IiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPWUuYXR0cihhKTtpZih0KXtpZighcil7Zm9yKHZhciBpPShlLmF0dHIoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGw9aVtvXTswPT09bC5pbmRleE9mKCJjdXJzb3ItIikmJmUuYXR0cihhLGwuc3Vic3RyKDcpKS5jbGFzc2VkKGwsITEpfWUuYXR0cihhKXx8ZS5hdHRyKGEsIiEhIil9bihlLHQpfWVsc2UgciYmKGUuYXR0cihhLG51bGwpLCIhISI9PT1yP24oZSk6bihlLHIpKX19LHsiLi9zZXRjdXJzb3IiOjI1Mn1dLDI0NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL21hdHJpeCIpLmRvdCxhPWUoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0saT10LmV4cG9ydHM9e307aS50ZXN0ZXI9ZnVuY3Rpb24oZSl7dmFyIHQscj1lLnNsaWNlKCksbj1yWzBdWzBdLGk9bixvPXJbMF1bMV0sbD1vO2ZvcihyLnB1c2goclswXSksdD0xO3Q8ci5sZW5ndGg7dCsrKW49TWF0aC5taW4obixyW3RdWzBdKSxpPU1hdGgubWF4KGksclt0XVswXSksbz1NYXRoLm1pbihvLHJbdF1bMV0pLGw9TWF0aC5tYXgobCxyW3RdWzFdKTt2YXIgcyxjPSExOzU9PT1yLmxlbmd0aCYmKHJbMF1bMF09PT1yWzFdWzBdP3JbMl1bMF09PT1yWzNdWzBdJiZyWzBdWzFdPT09clszXVsxXSYmclsxXVsxXT09PXJbMl1bMV0mJihjPSEwLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT1yWzBdWzBdfSk6clswXVsxXT09PXJbMV1bMV0mJnJbMl1bMV09PT1yWzNdWzFdJiZyWzBdWzBdPT09clszXVswXSYmclsxXVswXT09PXJbMl1bMF0mJihjPSEwLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09PT1yWzBdWzFdfSkpO3ZhciB1PSEwLGQ9clswXTtmb3IodD0xO3Q8ci5sZW5ndGg7dCsrKWlmKGRbMF0hPT1yW3RdWzBdfHxkWzFdIT09clt0XVsxXSl7dT0hMTticmVha31yZXR1cm57eG1pbjpuLHhtYXg6aSx5bWluOm8seW1heDpsLHB0czpyLGNvbnRhaW5zOmM/ZnVuY3Rpb24oZSx0KXt2YXIgcj1lWzBdLGM9ZVsxXTtyZXR1cm4hKHI9PT1hfHxyPG58fHI+aXx8Yz09PWF8fGM8b3x8Yz5sKSYmKCF0fHwhcyhlKSl9OmZ1bmN0aW9uKGUsdCl7dmFyIHM9ZVswXSxjPWVbMV07aWYocz09PWF8fHM8bnx8cz5pfHxjPT09YXx8YzxvfHxjPmwpcmV0dXJuITE7dmFyIHUsZCxmLHAsaCxnPXIubGVuZ3RoLG09clswXVswXSx2PXJbMF1bMV0seT0wO2Zvcih1PTE7dTxnO3UrKylpZihkPW0sZj12LG09clt1XVswXSx2PXJbdV1bMV0sIShzPChwPU1hdGgubWluKGQsbSkpfHxzPk1hdGgubWF4KGQsbSl8fGM+TWF0aC5tYXgoZix2KSkpaWYoYzxNYXRoLm1pbihmLHYpKXMhPT1wJiZ5Kys7ZWxzZXtpZihjPT09KGg9bT09PWQ/YzpmKyhzLWQpKih2LWYpLyhtLWQpKSlyZXR1cm4gMSE9PXV8fCF0O2M8PWgmJnMhPT1wJiZ5Kyt9cmV0dXJuIHklMj09MX0saXNSZWN0OmMsZGVnZW5lcmF0ZTp1fX0saS5pc1NlZ21lbnRCZW50PWZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBpLG8sbCxzPWVbdF0sYz1bZVtyXVswXS1zWzBdLGVbcl1bMV0tc1sxXV0sdT1uKGMsYyksZD1NYXRoLnNxcnQodSksZj1bLWNbMV0vZCxjWzBdL2RdO2ZvcihpPXQrMTtpPHI7aSsrKWlmKG89W2VbaV1bMF0tc1swXSxlW2ldWzFdLXNbMV1dLChsPW4obyxjKSk8MHx8bD51fHxNYXRoLmFicyhuKG8sZikpPmEpcmV0dXJuITA7cmV0dXJuITF9LGkuZmlsdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9W2VbMF1dLG49MCxhPTA7ZnVuY3Rpb24gbyhvKXtlLnB1c2gobyk7dmFyIGw9ci5sZW5ndGgscz1uO3Iuc3BsaWNlKGErMSk7Zm9yKHZhciBjPXMrMTtjPGUubGVuZ3RoO2MrKykoYz09PWUubGVuZ3RoLTF8fGkuaXNTZWdtZW50QmVudChlLHMsYysxLHQpKSYmKHIucHVzaChlW2NdKSxyLmxlbmd0aDxsLTImJihuPWMsYT1yLmxlbmd0aC0xKSxzPWMpfWUubGVuZ3RoPjEmJm8oZS5wb3AoKSk7cmV0dXJue2FkZFB0Om8scmF3OmUsZmlsdGVyZWQ6cn19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjIxMiwiLi9tYXRyaXgiOjIzOH1dLDI0NTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiaXMtbW9iaWxlIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKCJzdHJpbmciIT10eXBlb2YodD1lJiZlLmhhc093blByb3BlcnR5KCJ1c2VyQWdlbnQiKT9lLnVzZXJBZ2VudDpmdW5jdGlvbigpe3ZhciBlOyJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYoZT1uYXZpZ2F0b3IudXNlckFnZW50KTtlJiZlLmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgZS5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJihlPWUuaGVhZGVyc1sidXNlci1hZ2VudCJdKTtyZXR1cm4gZX0oKSkpcmV0dXJuITA7dmFyIHI9YSh7dWE6e2hlYWRlcnM6eyJ1c2VyLWFnZW50Ijp0fX0sdGFibGV0OiEwLGZlYXR1cmVEZXRlY3Q6ITF9KTtpZighcilmb3IodmFyIGk9dC5zcGxpdCgiICIpLG89MTtvPGkubGVuZ3RoO28rKyl7aWYoLTEhPT1pW29dLmluZGV4T2YoIlNhZmFyaSIpKWZvcih2YXIgbD1vLTE7bD4tMTtsLS0pe3ZhciBzPWlbbF07aWYoIlZlcnNpb24vIj09PXMuc3Vic3RyKDAsOCkpe3ZhciBjPXMuc3Vic3RyKDgpLnNwbGl0KCIuIilbMF07aWYobihjKSYmKGM9K2MpLGM+PTEzKXJldHVybiEwfX19cmV0dXJuIHJ9fSx7ImZhc3QtaXNudW1lcmljIjoxNywiaXMtbW9iaWxlIjo1MX1dLDI0NjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZih0IGluc3RhbmNlb2YgUmVnRXhwKXtmb3IodmFyIHI9dC50b1N0cmluZygpLG49MDtuPGUubGVuZ3RoO24rKylpZihlW25daW5zdGFuY2VvZiBSZWdFeHAmJmVbbl0udG9TdHJpbmcoKT09PXIpcmV0dXJuIGU7ZS5wdXNoKHQpfWVsc2UhdCYmMCE9PXR8fC0xIT09ZS5pbmRleE9mKHQpfHxlLnB1c2godCk7cmV0dXJuIGV9fSx7fV0sMjQ3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL2xpYiIpLGE9ZSgiLi4vcGxvdF9hcGkvcGxvdF9jb25maWciKS5kZmx0Q29uZmlnO3ZhciBpPXthZGQ6ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbyxsO2UudW5kb1F1ZXVlPWUudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0sbD1lLnVuZG9RdWV1ZS5pbmRleCxlLmF1dG9wbGF5P2UudW5kb1F1ZXVlLmluU2VxdWVuY2V8fChlLmF1dG9wbGF5PSExKTooIWUudW5kb1F1ZXVlLnNlcXVlbmNlfHxlLnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPyhvPXt1bmRvOntjYWxsczpbXSxhcmdzOltdfSxyZWRvOntjYWxsczpbXSxhcmdzOltdfX0sZS51bmRvUXVldWUucXVldWUuc3BsaWNlKGwsZS51bmRvUXVldWUucXVldWUubGVuZ3RoLWwsbyksZS51bmRvUXVldWUuaW5kZXgrPTEpOm89ZS51bmRvUXVldWUucXVldWVbbC0xXSxlLnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExLG8mJihvLnVuZG8uY2FsbHMudW5zaGlmdCh0KSxvLnVuZG8uYXJncy51bnNoaWZ0KHIpLG8ucmVkby5jYWxscy5wdXNoKG4pLG8ucmVkby5hcmdzLnB1c2goaSkpLGUudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aD5hLnF1ZXVlTGVuZ3RoJiYoZS51bmRvUXVldWUucXVldWUuc2hpZnQoKSxlLnVuZG9RdWV1ZS5pbmRleC0tKSl9LHN0YXJ0U2VxdWVuY2U6ZnVuY3Rpb24oZSl7ZS51bmRvUXVldWU9ZS51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSxlLnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMCxlLnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSEwfSxzdG9wU2VxdWVuY2U6ZnVuY3Rpb24oZSl7ZS51bmRvUXVldWU9ZS51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSxlLnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMSxlLnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExfSx1bmRvOmZ1bmN0aW9uKGUpe3ZhciB0LHI7aWYoISh2b2lkIDA9PT1lLnVuZG9RdWV1ZXx8aXNOYU4oZS51bmRvUXVldWUuaW5kZXgpfHxlLnVuZG9RdWV1ZS5pbmRleDw9MCkpe2ZvcihlLnVuZG9RdWV1ZS5pbmRleC0tLHQ9ZS51bmRvUXVldWUucXVldWVbZS51bmRvUXVldWUuaW5kZXhdLGUudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITAscj0wO3I8dC51bmRvLmNhbGxzLmxlbmd0aDtyKyspaS5wbG90RG8oZSx0LnVuZG8uY2FsbHNbcl0sdC51bmRvLmFyZ3Nbcl0pO2UudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITEsZS5hdXRvcGxheT0hMX19LHJlZG86ZnVuY3Rpb24oZSl7dmFyIHQscjtpZighKHZvaWQgMD09PWUudW5kb1F1ZXVlfHxpc05hTihlLnVuZG9RdWV1ZS5pbmRleCl8fGUudW5kb1F1ZXVlLmluZGV4Pj1lLnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgpKXtmb3IodD1lLnVuZG9RdWV1ZS5xdWV1ZVtlLnVuZG9RdWV1ZS5pbmRleF0sZS51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjx0LnJlZG8uY2FsbHMubGVuZ3RoO3IrKylpLnBsb3REbyhlLHQucmVkby5jYWxsc1tyXSx0LnJlZG8uYXJnc1tyXSk7ZS51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSxlLmF1dG9wbGF5PSExLGUudW5kb1F1ZXVlLmluZGV4Kyt9fX07aS5wbG90RG89ZnVuY3Rpb24oZSx0LHIpe2UuYXV0b3BsYXk9ITAscj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixhPVtdLGk9MDtpPHQubGVuZ3RoO2krKylyPXRbaV0sYVtpXT1yPT09ZT9yOiJvYmplY3QiPT10eXBlb2Ygcj9BcnJheS5pc0FycmF5KHIpP24uZXh0ZW5kRGVlcChbXSxyKTpuLmV4dGVuZERlZXBBbGwoe30scik6cjtyZXR1cm4gYX0oZSxyKSx0LmFwcGx5KG51bGwscil9LHQuZXhwb3J0cz1pfSx7Ii4uL2xpYiI6MjMyLCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyI6MjY2fV0sMjQ4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IuY291bnRlcj1mdW5jdGlvbihlLHQscixuKXt2YXIgYT0odHx8IiIpKyhyPyIiOiIkIiksaT0hMT09PW4/IiI6Il4iO3JldHVybiJ4eSI9PT1lP25ldyBSZWdFeHAoaSsieChbMi05XXxbMS05XVswLTldKyk/eShbMi05XXxbMS05XVswLTldKyk/IithKTpuZXcgUmVnRXhwKGkrZSsiKFsyLTldfFsxLTldWzAtOV0rKT8iK2EpfX0se31dLDI0OTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0vXiguKikoXC5bXlwuXFtcXV0rfFxbXGRcXSkkLyxhPS9eW15cLlxbXF1dKyQvO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcig7dDspe3ZhciByPWUubWF0Y2gobik7aWYocillPXJbMV07ZWxzZXtpZighZS5tYXRjaChhKSl0aHJvdyBuZXcgRXJyb3IoImJhZCByZWxhdGl2ZUF0dHIgY2FsbDoiK1tlLHRdKTtlPSIifWlmKCJeIiE9PXQuY2hhckF0KDApKWJyZWFrO3Q9dC5zbGljZSgxKX1yZXR1cm4gZSYmIlsiIT09dC5jaGFyQXQoMCk/ZSsiLiIrdDplK3R9fSx7fV0sMjUwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9ZSgiLi9pc19wbGFpbl9vYmplY3QiKTt0LmV4cG9ydHM9ZnVuY3Rpb24gZSh0LHIpe2Zvcih2YXIgaSBpbiByKXt2YXIgbz1yW2ldLGw9dFtpXTtpZihsIT09bylpZigiXyI9PT1pLmNoYXJBdCgwKXx8ImZ1bmN0aW9uIj09dHlwZW9mIG8pe2lmKGkgaW4gdCljb250aW51ZTt0W2ldPW99ZWxzZSBpZihuKG8pJiZuKGwpJiZhKG9bMF0pKXtpZigiY3VzdG9tZGF0YSI9PT1pfHwiaWRzIj09PWkpY29udGludWU7Zm9yKHZhciBzPU1hdGgubWluKG8ubGVuZ3RoLGwubGVuZ3RoKSxjPTA7YzxzO2MrKylsW2NdIT09b1tjXSYmYShvW2NdKSYmYShsW2NdKSYmZShsW2NdLG9bY10pfWVsc2UgYShvKSYmYShsKSYmKGUobCxvKSxPYmplY3Qua2V5cyhsKS5sZW5ndGh8fGRlbGV0ZSB0W2ldKX19fSx7Ii4vYXJyYXkiOjIxOCwiLi9pc19wbGFpbl9vYmplY3QiOjIzM31dLDI1MTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi9sb2dnZXJzIiksaT1lKCIuL2lkZW50aXR5Iiksbz1lKCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZTx0fWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZTw9dH1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGU+dH1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIGU+PXR9ci5maW5kQmluPWZ1bmN0aW9uKGUsdCxyKXtpZihuKHQuc3RhcnQpKXJldHVybiByP01hdGguY2VpbCgoZS10LnN0YXJ0KS90LnNpemUtMWUtOSktMTpNYXRoLmZsb29yKChlLXQuc3RhcnQpL3Quc2l6ZSsxZS05KTt2YXIgaSxvLGQ9MCxmPXQubGVuZ3RoLHA9MCxoPWY+MT8odFtmLTFdLXRbMF0pLyhmLTEpOjE7Zm9yKG89aD49MD9yP2w6czpyP3U6YyxlKz0xZS05KmgqKHI/LTE6MSkqKGg+PTA/MTotMSk7ZDxmJiZwKys8MTAwOylvKHRbaT1NYXRoLmZsb29yKChkK2YpLzIpXSxlKT9kPWkrMTpmPWk7cmV0dXJuIHA+OTAmJmEubG9nKCJMb25nIGJpbmFyeSBzZWFyY2guLi4iKSxkLTF9LHIuc29ydGVyQXNjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0sci5zb3J0ZXJEZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSxyLmRpc3RpbmN0VmFscz1mdW5jdGlvbihlKXt2YXIgdCxuPWUuc2xpY2UoKTtmb3Iobi5zb3J0KHIuc29ydGVyQXNjKSx0PW4ubGVuZ3RoLTE7dD4tMSYmblt0XT09PW87dC0tKTtmb3IodmFyIGEsaT1uW3RdLW5bMF18fDEsbD1pLyh0fHwxKS8xZTQscz1bXSxjPTA7Yzw9dDtjKyspe3ZhciB1PW5bY10sZD11LWE7dm9pZCAwPT09YT8ocy5wdXNoKHUpLGE9dSk6ZD5sJiYoaT1NYXRoLm1pbihpLGQpLHMucHVzaCh1KSxhPXUpfXJldHVybnt2YWxzOnMsbWluRGlmZjppfX0sci5yb3VuZFVwPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG4sYT0wLGk9dC5sZW5ndGgtMSxvPTAsbD1yPzA6MSxzPXI/MTowLGM9cj9NYXRoLmNlaWw6TWF0aC5mbG9vcjthPGkmJm8rKzwxMDA7KXRbbj1jKChhK2kpLzIpXTw9ZT9hPW4rbDppPW4tcztyZXR1cm4gdFthXX0sci5zb3J0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTAsbj0wLGE9MTthPGUubGVuZ3RoO2ErKyl7dmFyIGk9dChlW2FdLGVbYS0xXSk7aWYoaTwwP3I9MTppPjAmJihuPTEpLHImJm4pcmV0dXJuIGUuc29ydCh0KX1yZXR1cm4gbj9lOmUucmV2ZXJzZSgpfSxyLmZpbmRJbmRleE9mTWluPWZ1bmN0aW9uKGUsdCl7dD10fHxpO2Zvcih2YXIgcixuPTEvMCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPXQoZVthXSk7bzxuJiYobj1vLHI9YSl9cmV0dXJuIHJ9fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjIxMiwiLi9pZGVudGl0eSI6MjMwLCIuL2xvZ2dlcnMiOjIzNiwiZmFzdC1pc251bWVyaWMiOjE3fV0sMjUyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpeyhlLmF0dHIoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKHQpezA9PT10LmluZGV4T2YoImN1cnNvci0iKSYmZS5jbGFzc2VkKHQsITEpfSkpLHQmJmUuY2xhc3NlZCgiY3Vyc29yLSIrdCwhMCl9fSx7fV0sMjUzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuc29ydCgpfX0se31dLDI1NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ci5hZ2dOdW1zPWZ1bmN0aW9uKGUsdCxpLG8pe3ZhciBsLHM7aWYoKCFvfHxvPmkubGVuZ3RoKSYmKG89aS5sZW5ndGgpLG4odCl8fCh0PSExKSxhKGlbMF0pKXtmb3Iocz1uZXcgQXJyYXkobyksbD0wO2w8bztsKyspc1tsXT1yLmFnZ051bXMoZSx0LGlbbF0pO2k9c31mb3IobD0wO2w8bztsKyspbih0KT9uKGlbbF0pJiYodD1lKCt0LCtpW2xdKSk6dD1pW2xdO3JldHVybiB0fSxyLmxlbj1mdW5jdGlvbihlKXtyZXR1cm4gci5hZ2dOdW1zKChmdW5jdGlvbihlKXtyZXR1cm4gZSsxfSksMCxlKX0sci5tZWFuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fCh0PXIubGVuKGUpKSxyLmFnZ051bXMoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLDAsZSkvdH0sci5taWRSYW5nZT1mdW5jdGlvbihlKXtpZih2b2lkIDAhPT1lJiYwIT09ZS5sZW5ndGgpcmV0dXJuKHIuYWdnTnVtcyhNYXRoLm1heCxudWxsLGUpK3IuYWdnTnVtcyhNYXRoLm1pbixudWxsLGUpKS8yfSxyLnZhcmlhbmNlPWZ1bmN0aW9uKGUsdCxhKXtyZXR1cm4gdHx8KHQ9ci5sZW4oZSkpLG4oYSl8fChhPXIubWVhbihlLHQpKSxyLmFnZ051bXMoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrTWF0aC5wb3codC1hLDIpfSksMCxlKS90fSxyLnN0ZGV2PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gTWF0aC5zcXJ0KHIudmFyaWFuY2UoZSx0LG4pKX0sci5tZWRpYW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zbGljZSgpLnNvcnQoKTtyZXR1cm4gci5pbnRlcnAodCwuNSl9LHIuaW50ZXJwPWZ1bmN0aW9uKGUsdCl7aWYoIW4odCkpdGhyb3cibiBzaG91bGQgYmUgYSBmaW5pdGUgbnVtYmVyIjtpZigodD10KmUubGVuZ3RoLS41KTwwKXJldHVybiBlWzBdO2lmKHQ+ZS5sZW5ndGgtMSlyZXR1cm4gZVtlLmxlbmd0aC0xXTt2YXIgcj10JTE7cmV0dXJuIHIqZVtNYXRoLmNlaWwodCldKygxLXIpKmVbTWF0aC5mbG9vcih0KV19fSx7Ii4vYXJyYXkiOjIxOCwiZmFzdC1pc251bWVyaWMiOjE3fV0sMjU1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4uL2xpYiIpLGk9YS5zdHJUcmFuc2xhdGUsbz1lKCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGw9ZSgiLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxzPS8oW14kXSopKFskXStbXiRdKlskXSspKFteJF0qKS87ci5jb252ZXJ0VG9Uc3BhbnM9ZnVuY3Rpb24oZSx0LGgpe3ZhciBrPWUudGV4dCgpLEE9IWUuYXR0cigiZGF0YS1ub3RleCIpJiYidW5kZWZpbmVkIiE9dHlwZW9mIE1hdGhKYXgmJmsubWF0Y2gocyksRD1uLnNlbGVjdChlLm5vZGUoKS5wYXJlbnROb2RlKTtpZighRC5lbXB0eSgpKXt2YXIgQz1lLmF0dHIoImNsYXNzIik/ZS5hdHRyKCJjbGFzcyIpLnNwbGl0KCIgIilbMF06InRleHQiO3JldHVybiBDKz0iLW1hdGgiLEQuc2VsZWN0QWxsKCJzdmcuIitDKS5yZW1vdmUoKSxELnNlbGVjdEFsbCgiZy4iK0MrIi1ncm91cCIpLnJlbW92ZSgpLGUuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjprLCJkYXRhLW1hdGgiOiJOIn0pLEE/KHQmJnQuX3Byb21pc2VzfHxbXSkucHVzaChuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7ZS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKTt2YXIgcj1wYXJzZUludChlLm5vZGUoKS5zdHlsZS5mb250U2l6ZSwxMCksbz17Zm9udFNpemU6cn07IWZ1bmN0aW9uKGUsdCxyKXt2YXIgaSxvLGwscztNYXRoSmF4Lkh1Yi5RdWV1ZSgoZnVuY3Rpb24oKXtyZXR1cm4gbz1hLmV4dGVuZERlZXBBbGwoe30sTWF0aEpheC5IdWIuY29uZmlnKSxsPU1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXksdm9pZCAwIT09TWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheSYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9MCksTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6Im5vbmUiLHRleDJqYXg6e2lubGluZU1hdGg6W1siJCIsIiQiXSxbIlxcKCIsIlxcKSJdXX0sZGlzcGxheUFsaWduOiJsZWZ0In0pfSksKGZ1bmN0aW9uKCl7aWYoIlNWRyIhPT0oaT1NYXRoSmF4Lkh1Yi5jb25maWcubWVudVNldHRpbmdzLnJlbmRlcmVyKSlyZXR1cm4gTWF0aEpheC5IdWIuc2V0UmVuZGVyZXIoIlNWRyIpfSksKGZ1bmN0aW9uKCl7dmFyIHI9Im1hdGgtb3V0cHV0LSIrYS5yYW5kc3RyKHt9LDY0KTtyZXR1cm4gcz1uLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cih7aWQ6cn0pLnN0eWxlKHt2aXNpYmlsaXR5OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSJ9KS5zdHlsZSh7ImZvbnQtc2l6ZSI6dC5mb250U2l6ZSsicHgifSkudGV4dChlLnJlcGxhY2UoYywiXFxsdCAiKS5yZXBsYWNlKHUsIlxcZ3QgIikpLE1hdGhKYXguSHViLlR5cGVzZXQocy5ub2RlKCkpfSksKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QoImJvZHkiKS5zZWxlY3QoIiNNYXRoSmF4X1NWR19nbHlwaHMiKTtpZihzLnNlbGVjdCgiLk1hdGhKYXhfU1ZHIikuZW1wdHkoKXx8IXMuc2VsZWN0KCJzdmciKS5ub2RlKCkpYS5sb2coIlRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgdGV4IHN5bnRheC4iLGUpLHIoKTtlbHNle3ZhciBvPXMuc2VsZWN0KCJzdmciKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cihzLnNlbGVjdCgiLk1hdGhKYXhfU1ZHIiksdCxvKX1pZihzLnJlbW92ZSgpLCJTVkciIT09aSlyZXR1cm4gTWF0aEpheC5IdWIuc2V0UmVuZGVyZXIoaSl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09bCYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9bCksTWF0aEpheC5IdWIuQ29uZmlnKG8pfSkpfShBWzJdLG8sKGZ1bmN0aW9uKG4sYSxvKXtELnNlbGVjdEFsbCgic3ZnLiIrQykucmVtb3ZlKCksRC5zZWxlY3RBbGwoImcuIitDKyItZ3JvdXAiKS5yZW1vdmUoKTt2YXIgbD1uJiZuLnNlbGVjdCgic3ZnIik7aWYoIWx8fCFsLm5vZGUoKSlyZXR1cm4gTygpLHZvaWQgdCgpO3ZhciBzPUQuYXBwZW5kKCJnIikuY2xhc3NlZChDKyItZ3JvdXAiLCEwKS5hdHRyKHsicG9pbnRlci1ldmVudHMiOiJub25lIiwiZGF0YS11bmZvcm1hdHRlZCI6aywiZGF0YS1tYXRoIjoiWSJ9KTtzLm5vZGUoKS5hcHBlbmRDaGlsZChsLm5vZGUoKSksYSYmYS5ub2RlKCkmJmwubm9kZSgpLmluc2VydEJlZm9yZShhLm5vZGUoKS5jbG9uZU5vZGUoITApLGwubm9kZSgpLmZpcnN0Q2hpbGQpO3ZhciBjPW8ud2lkdGgsdT1vLmhlaWdodDtsLmF0dHIoe2NsYXNzOkMsaGVpZ2h0OnUscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4gbWVldCJ9KS5zdHlsZSh7b3ZlcmZsb3c6InZpc2libGUiLCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSk7dmFyIGQ9ZS5ub2RlKCkuc3R5bGUuZmlsbHx8ImJsYWNrIixmPWwuc2VsZWN0KCJnIik7Zi5hdHRyKHtmaWxsOmQsc3Ryb2tlOmR9KTt2YXIgcD1mLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPXAud2lkdGgsbT1wLmhlaWdodDsoZz5jfHxtPnUpJiYobC5zdHlsZSgib3ZlcmZsb3ciLCJoaWRkZW4iKSxnPShwPWwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKS53aWR0aCxtPXAuaGVpZ2h0KTt2YXIgdj0rZS5hdHRyKCJ4IikseT0rZS5hdHRyKCJ5IikseD0tKHJ8fGUubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkvNDtpZigieSI9PT1DWzBdKXMuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitbLTkwLHYseV0rIikiK2koLWcvMix4LW0vMil9KTtlbHNlIGlmKCJsIj09PUNbMF0peT14LW0vMjtlbHNlIGlmKCJhIj09PUNbMF0mJjAhPT1DLmluZGV4T2YoImF0aXRsZSIpKXY9MCx5PXg7ZWxzZXt2YXIgYj1lLmF0dHIoInRleHQtYW5jaG9yIik7di09ZyooIm1pZGRsZSI9PT1iPy41OiJlbmQiPT09Yj8xOjApLHk9eSt4LW0vMn1sLmF0dHIoe3g6dix5Onl9KSxoJiZoLmNhbGwoZSxzKSx0KHMpfSkpfSkpKTpPKCksZX1mdW5jdGlvbiBPKCl7RC5lbXB0eSgpfHwoQz1lLmF0dHIoImNsYXNzIikrIi1tYXRoIixELnNlbGVjdCgic3ZnLiIrQykucmVtb3ZlKCkpLGUudGV4dCgiIikuc3R5bGUoIndoaXRlLXNwYWNlIiwicHJlIiksZnVuY3Rpb24oZSx0KXt0PXQucmVwbGFjZShnLCIgIik7dmFyIHIsaT0hMSxzPVtdLGM9LTE7ZnVuY3Rpb24gdSgpe2MrKzt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoby5zdmcsInRzcGFuIik7bi5zZWxlY3QodCkuYXR0cih7Y2xhc3M6ImxpbmUiLGR5OmMqbCsiZW0ifSksZS5hcHBlbmRDaGlsZCh0KSxyPXQ7dmFyIGE9cztpZihzPVt7bm9kZTp0fV0sYS5sZW5ndGg+MSlmb3IodmFyIGk9MTtpPGEubGVuZ3RoO2krKyloKGFbaV0pfWZ1bmN0aW9uIGgoZSl7dmFyIHQsYT1lLnR5cGUsaT17fTtpZigiYSI9PT1hKXt0PSJhIjt2YXIgbD1lLnRhcmdldCxjPWUuaHJlZix1PWUucG9wdXA7YyYmKGk9eyJ4bGluazp4bGluazpzaG93IjoiX2JsYW5rIj09PWx8fCJfIiE9PWwuY2hhckF0KDApPyJuZXciOiJyZXBsYWNlIix0YXJnZXQ6bCwieGxpbms6eGxpbms6aHJlZiI6Y30sdSYmKGkub25jbGljaz0nd2luZG93Lm9wZW4odGhpcy5ocmVmLmJhc2VWYWwsdGhpcy50YXJnZXQuYmFzZVZhbCwiJyt1KyciKTtyZXR1cm4gZmFsc2U7JykpfWVsc2UgdD0idHNwYW4iO2Uuc3R5bGUmJihpLnN0eWxlPWUuc3R5bGUpO3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2Zyx0KTtpZigic3VwIj09PWF8fCJzdWIiPT09YSl7ayhyLCJcdTIwMGIiKSxyLmFwcGVuZENoaWxkKGQpO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2ZywidHNwYW4iKTtrKGgsIlx1MjAwYiIpLG4uc2VsZWN0KGgpLmF0dHIoImR5IixwW2FdKSxpLmR5PWZbYV0sci5hcHBlbmRDaGlsZChkKSxyLmFwcGVuZENoaWxkKGgpfWVsc2Ugci5hcHBlbmRDaGlsZChkKTtuLnNlbGVjdChkKS5hdHRyKGkpLHI9ZS5ub2RlPWQscy5wdXNoKGUpfWZ1bmN0aW9uIGsoZSx0KXtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpKX1mdW5jdGlvbiBBKGUpe2lmKDEhPT1zLmxlbmd0aCl7dmFyIG49cy5wb3AoKTtlIT09bi50eXBlJiZhLmxvZygiU3RhcnQgdGFnIDwiK24udHlwZSsiPiBkb2VzbnQgbWF0Y2ggZW5kIHRhZyA8IitlKyI+LiBQcmV0ZW5kaW5nIGl0IGRpZCBtYXRjaC4iLHQpLHI9c1tzLmxlbmd0aC0xXS5ub2RlfWVsc2UgYS5sb2coIklnbm9yaW5nIHVuZXhwZWN0ZWQgZW5kIHRhZyA8LyIrZSsiPi4iLHQpfXkudGVzdCh0KT91KCk6KHI9ZSxzPVt7bm9kZTplfV0pO2Zvcih2YXIgRD10LnNwbGl0KG0pLEM9MDtDPEQubGVuZ3RoO0MrKyl7dmFyIE89RFtDXSxQPU8ubWF0Y2godiksST1QJiZQWzJdLnRvTG93ZXJDYXNlKCksUj1kW0ldO2lmKCJiciI9PT1JKXUoKTtlbHNlIGlmKHZvaWQgMD09PVIpayhyLEwoTykpO2Vsc2UgaWYoUFsxXSlBKEkpO2Vsc2V7dmFyIHo9UFs0XSxOPXt0eXBlOkl9LEY9VCh6LHgpO2lmKEY/KEY9Ri5yZXBsYWNlKE0sIiQxIGZpbGw6IiksUiYmKEYrPSI7IitSKSk6UiYmKEY9UiksRiYmKE4uc3R5bGU9RiksImEiPT09SSl7aT0hMDt2YXIgRT1UKHosYik7aWYoRSl7dmFyIGo9UyhFKTtqJiYoTi5ocmVmPWosTi50YXJnZXQ9VCh6LF8pfHwiX2JsYW5rIixOLnBvcHVwPVQoeix3KSl9fWgoTil9fXJldHVybiBpfShlLm5vZGUoKSxrKSYmZS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKSxyLnBvc2l0aW9uVGV4dChlKSxoJiZoLmNhbGwoZSl9fTt2YXIgYz0vKDx8Jmx0O3wmIzYwOykvZyx1PS8oPnwmZ3Q7fCYjNjI7KS9nO3ZhciBkPXtzdXA6ImZvbnQtc2l6ZTo3MCUiLHN1YjoiZm9udC1zaXplOjcwJSIsYjoiZm9udC13ZWlnaHQ6Ym9sZCIsaToiZm9udC1zdHlsZTppdGFsaWMiLGE6ImN1cnNvcjpwb2ludGVyIixzcGFuOiIiLGVtOiJmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDpib2xkIn0sZj17c3ViOiIwLjNlbSIsc3VwOiItMC42ZW0ifSxwPXtzdWI6Ii0wLjIxZW0iLHN1cDoiMC40MmVtIn0saD1bImh0dHA6IiwiaHR0cHM6IiwibWFpbHRvOiIsIiIsdm9pZCAwLCI6Il0sZz1yLk5FV0xJTkVTPS8oXHJcbj98XG4pL2csbT0vKDxbXjw+XSo+KS8sdj0vPChcLz8pKFteID5dKikoXHMrKC4qKSk/Pi9pLHk9LzxicihccysuKik/Pi9pO3IuQlJfVEFHX0FMTD0vPGJyKFxzKy4qKT8+L2dpO3ZhciB4PS8oXnxbXHMiJ10pc3R5bGVccyo9XHMqKCIoW14iXSopOz8ifCcoW14nXSopOz8nKS9pLGI9LyhefFtccyInXSlocmVmXHMqPVxzKigiKFteIl0qKSJ8JyhbXiddKiknKS9pLF89LyhefFtccyInXSl0YXJnZXRccyo9XHMqKCIoW14iXHNdKikifCcoW14nXHNdKiknKS9pLHc9LyhefFtccyInXSlwb3B1cFxzKj1ccyooIihbXHc9LF0qKSJ8JyhbXHc9LF0qKScpL2k7ZnVuY3Rpb24gVChlLHQpe2lmKCFlKXJldHVybiBudWxsO3ZhciByPWUubWF0Y2godCksbj1yJiYoclszXXx8cls0XSk7cmV0dXJuIG4mJkwobil9dmFyIE09LyhefDspXHMqY29sb3I6LztyLnBsYWluVGV4dD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj12b2lkIDAhPT0odD10fHx7fSkubGVuJiYtMSE9PXQubGVuP3QubGVuOjEvMCxuPXZvaWQgMCE9PXQuYWxsb3dlZFRhZ3M/dC5hbGxvd2VkVGFnczpbImJyIl0sYT0iLi4uIi5sZW5ndGgsaT1lLnNwbGl0KG0pLG89W10sbD0iIixzPTAsYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1pW2NdLGQ9dS5tYXRjaCh2KSxmPWQmJmRbMl0udG9Mb3dlckNhc2UoKTtpZihmKS0xIT09bi5pbmRleE9mKGYpJiYoby5wdXNoKHUpLGw9Zik7ZWxzZXt2YXIgcD11Lmxlbmd0aDtpZihzK3A8cilvLnB1c2godSkscys9cDtlbHNlIGlmKHM8cil7dmFyIGg9ci1zO2wmJigiYnIiIT09bHx8aDw9YXx8cDw9YSkmJm8ucG9wKCkscj5hP28ucHVzaCh1LnN1YnN0cigwLGgtYSkrIi4uLiIpOm8ucHVzaCh1LnN1YnN0cigwLGgpKTticmVha31sPSIifX1yZXR1cm4gby5qb2luKCIiKX07dmFyIGs9e211OiJcdTAzYmMiLGFtcDoiJiIsbHQ6IjwiLGd0OiI+IixuYnNwOiJceGEwIix0aW1lczoiXHhkNyIscGx1c21uOiJceGIxIixkZWc6Ilx4YjAifSxBPS8mKCNcZCt8I3hbXGRhLWZBLUZdK3xbYS16XSspOy9nO2Z1bmN0aW9uIEwoZSl7cmV0dXJuIGUucmVwbGFjZShBLChmdW5jdGlvbihlLHQpe3JldHVybigiIyI9PT10LmNoYXJBdCgwKT9mdW5jdGlvbihlKXtpZihlPjExMTQxMTEpcmV0dXJuO3ZhciB0PVN0cmluZy5mcm9tQ29kZVBvaW50O2lmKHQpcmV0dXJuIHQoZSk7dmFyIHI9U3RyaW5nLmZyb21DaGFyQ29kZTtyZXR1cm4gZTw9NjU1MzU/cihlKTpyKDU1MjMyKyhlPj4xMCksZSUxMDI0KzU2MzIwKX0oIngiPT09dC5jaGFyQXQoMSk/cGFyc2VJbnQodC5zdWJzdHIoMiksMTYpOnBhcnNlSW50KHQuc3Vic3RyKDEpLDEwKSk6a1t0XSl8fGV9KSl9ZnVuY3Rpb24gUyhlKXt2YXIgdD1lbmNvZGVVUkkoZGVjb2RlVVJJKGUpKSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLmhyZWY9ZSxuLmhyZWY9dDt2YXIgYT1yLnByb3RvY29sLGk9bi5wcm90b2NvbDtyZXR1cm4tMSE9PWguaW5kZXhPZihhKSYmLTEhPT1oLmluZGV4T2YoaSk/dDoiIn1mdW5jdGlvbiBEKGUsdCxyKXt2YXIgbixpLG8sbD1yLmhvcml6b250YWxBbGlnbixzPXIudmVydGljYWxBbGlnbnx8InRvcCIsYz1lLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx1PXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBpPSJib3R0b20iPT09cz9mdW5jdGlvbigpe3JldHVybiBjLmJvdHRvbS1uLmhlaWdodH06Im1pZGRsZSI9PT1zP2Z1bmN0aW9uKCl7cmV0dXJuIGMudG9wKyhjLmhlaWdodC1uLmhlaWdodCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gYy50b3B9LG89InJpZ2h0Ij09PWw/ZnVuY3Rpb24oKXtyZXR1cm4gYy5yaWdodC1uLndpZHRofToiY2VudGVyIj09PWw/ZnVuY3Rpb24oKXtyZXR1cm4gYy5sZWZ0KyhjLndpZHRoLW4ud2lkdGgpLzJ9OmZ1bmN0aW9uKCl7cmV0dXJuIGMubGVmdH0sZnVuY3Rpb24oKXtuPXRoaXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciBlPW8oKS11LmxlZnQsdD1pKCktdS50b3AsbD1yLmdkfHx7fTtpZihyLmdkKXtsLl9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybShsKTt2YXIgcz1hLmFwcGx5M0RUcmFuc2Zvcm0obC5fZnVsbExheW91dC5faW52VHJhbnNmb3JtKShlLHQpO2U9c1swXSx0PXNbMV19cmV0dXJuIHRoaXMuc3R5bGUoe3RvcDp0KyJweCIsbGVmdDplKyJweCIsInotaW5kZXgiOjFlM30pLHRoaXN9fXIuY29udmVydEVudGl0aWVzPUwsci5zYW5pdGl6ZUhUTUw9ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UoZywiICIpO2Zvcih2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIikscj10LGE9W10saT1lLnNwbGl0KG0pLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGw9aVtvXSxzPWwubWF0Y2godiksYz1zJiZzWzJdLnRvTG93ZXJDYXNlKCk7aWYoYyBpbiBkKWlmKHNbMV0pYS5sZW5ndGgmJihyPWEucG9wKCkpO2Vsc2V7dmFyIHU9c1s0XSxmPVQodSx4KSxwPWY/e3N0eWxlOmZ9Ont9O2lmKCJhIj09PWMpe3ZhciBoPVQodSxiKTtpZihoKXt2YXIgeT1TKGgpO2lmKHkpe3AuaHJlZj15O3ZhciB3PVQodSxfKTt3JiYocC50YXJnZXQ9dyl9fX12YXIgTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGMpO3IuYXBwZW5kQ2hpbGQoTSksbi5zZWxlY3QoTSkuYXR0cihwKSxyPU0sYS5wdXNoKE0pfWVsc2Ugci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShMKGwpKSl9cmV0dXJuIHQuaW5uZXJIVE1MfSxyLmxpbmVDb3VudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5zaXplKCl8fDF9LHIucG9zaXRpb25UZXh0PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2Z1bmN0aW9uIGEodCxyKXtyZXR1cm4gdm9pZCAwPT09cj9udWxsPT09KHI9ZS5hdHRyKHQpKSYmKGUuYXR0cih0LDApLHI9MCk6ZS5hdHRyKHQscikscn12YXIgaT1hKCJ4Iix0KSxvPWEoInkiLHIpOyJ0ZXh0Ij09PXRoaXMubm9kZU5hbWUmJmUuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuYXR0cih7eDppLHk6b30pfSkpfTtyLm1ha2VUZXh0U2hhZG93PWZ1bmN0aW9uKGUpe3ZhciB0PSIxcHggIixyPSIxcHggIixuPSIxcHggIjtyZXR1cm4gdCtyK24rZSsiLCAtIit0KyItIityK24rZSsiLCAiK3QrIi0iK3IrbitlKyIsIC0iK3QrcituK2V9LHIubWFrZUVkaXRhYmxlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5nZCxhPXQuZGVsZWdhdGUsaT1uLmRpc3BhdGNoKCJlZGl0IiwiaW5wdXQiLCJjYW5jZWwiKSxvPWF8fGU7aWYoZS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjphPyJub25lIjoiYWxsIn0pLDEhPT1lLnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoImJvbyIpO2Z1bmN0aW9uIGwoKXshZnVuY3Rpb24oKXt2YXIgYT1uLnNlbGVjdChyKS5zZWxlY3QoIi5zdmctY29udGFpbmVyIiksbz1hLmFwcGVuZCgiZGl2IiksbD1lLm5vZGUoKS5zdHlsZSxjPXBhcnNlRmxvYXQobC5mb250U2l6ZXx8MTIpLHU9dC50ZXh0O3ZvaWQgMD09PXUmJih1PWUuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIpKTtvLmNsYXNzZWQoInBsdWdpbi1lZGl0YWJsZSBlZGl0YWJsZSIsITApLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLCJmb250LWZhbWlseSI6bC5mb250RmFtaWx5fHwiQXJpYWwiLCJmb250LXNpemUiOmMsY29sb3I6dC5maWxsfHxsLmZpbGx8fCJibGFjayIsb3BhY2l0eToxLCJiYWNrZ3JvdW5kLWNvbG9yIjp0LmJhY2tncm91bmR8fCJ0cmFuc3BhcmVudCIsb3V0bGluZToiI2ZmZmZmZjMzIDFweCBzb2xpZCIsbWFyZ2luOlstYy84KzEsMCwwLC0xXS5qb2luKCJweCAiKSsicHgiLHBhZGRpbmc6IjAiLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCJ9KS5hdHRyKHtjb250ZW50ZWRpdGFibGU6ITB9KS50ZXh0KHUpLmNhbGwoRChlLGEsdCkpLm9uKCJibHVyIiwoZnVuY3Rpb24oKXtyLl9lZGl0aW5nPSExLGUudGV4dCh0aGlzLnRleHRDb250ZW50KS5zdHlsZSh7b3BhY2l0eToxfSk7dmFyIHQsYT1uLnNlbGVjdCh0aGlzKS5hdHRyKCJjbGFzcyIpOyh0PWE/Ii4iK2Euc3BsaXQoIiAiKVswXSsiLW1hdGgtZ3JvdXAiOiJbY2xhc3MqPS1tYXRoLWdyb3VwXSIpJiZuLnNlbGVjdChlLm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3QodCkuc3R5bGUoe29wYWNpdHk6MH0pO3ZhciBvPXRoaXMudGV4dENvbnRlbnQ7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLnJlbW92ZSgpLG4uc2VsZWN0KGRvY3VtZW50KS5vbigibW91c2V1cCIsbnVsbCksaS5lZGl0LmNhbGwoZSxvKX0pKS5vbigiZm9jdXMiLChmdW5jdGlvbigpe3ZhciBlPXRoaXM7ci5fZWRpdGluZz0hMCxuLnNlbGVjdChkb2N1bWVudCkub24oIm1vdXNldXAiLChmdW5jdGlvbigpe2lmKG4uZXZlbnQudGFyZ2V0PT09ZSlyZXR1cm4hMTtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09by5ub2RlKCkmJm8ubm9kZSgpLmJsdXIoKX0pKX0pKS5vbigia2V5dXAiLChmdW5jdGlvbigpezI3PT09bi5ldmVudC53aGljaD8oci5fZWRpdGluZz0hMSxlLnN0eWxlKHtvcGFjaXR5OjF9KSxuLnNlbGVjdCh0aGlzKS5zdHlsZSh7b3BhY2l0eTowfSkub24oImJsdXIiLChmdW5jdGlvbigpe3JldHVybiExfSkpLnRyYW5zaXRpb24oKS5yZW1vdmUoKSxpLmNhbmNlbC5jYWxsKGUsdGhpcy50ZXh0Q29udGVudCkpOihpLmlucHV0LmNhbGwoZSx0aGlzLnRleHRDb250ZW50KSxuLnNlbGVjdCh0aGlzKS5jYWxsKEQoZSxhLHQpKSl9KSkub24oImtleWRvd24iLChmdW5jdGlvbigpezEzPT09bi5ldmVudC53aGljaCYmdGhpcy5ibHVyKCl9KSkuY2FsbChzKX0oKSxlLnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgYSxsPW8uYXR0cigiY2xhc3MiKTsoYT1sPyIuIitsLnNwbGl0KCIgIilbMF0rIi1tYXRoLWdyb3VwIjoiW2NsYXNzKj0tbWF0aC1ncm91cF0iKSYmbi5zZWxlY3QoZS5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0KGEpLnN0eWxlKHtvcGFjaXR5OjB9KX1mdW5jdGlvbiBzKGUpe3ZhciB0PWUubm9kZSgpLHI9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyLnNlbGVjdE5vZGVDb250ZW50cyh0KTt2YXIgbj13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7bi5yZW1vdmVBbGxSYW5nZXMoKSxuLmFkZFJhbmdlKHIpLHQuZm9jdXMoKX1yZXR1cm4gdC5pbW1lZGlhdGU/bCgpOm8ub24oImNsaWNrIixsKSxuLnJlYmluZChlLGksIm9uIil9fSx7Ii4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjIwNywiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjIxMywiLi4vbGliIjoyMzIsIkBwbG90bHkvZDMiOjExfV0sMjU2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O2Z1bmN0aW9uIGEoZSl7ZSYmbnVsbCE9PWUudGltZXImJihjbGVhclRpbWVvdXQoZS50aW1lciksZS50aW1lcj1udWxsKX1yLnRocm90dGxlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1uW2VdLG89RGF0ZS5ub3coKTtpZighaSl7Zm9yKHZhciBsIGluIG4pbltsXS50czxvLTZlNCYmZGVsZXRlIG5bbF07aT1uW2VdPXt0czowLHRpbWVyOm51bGx9fWZ1bmN0aW9uIHMoKXtyKCksaS50cz1EYXRlLm5vdygpLGkub25Eb25lJiYoaS5vbkRvbmUoKSxpLm9uRG9uZT1udWxsKX1hKGkpLG8+aS50cyt0P3MoKTppLnRpbWVyPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cygpLGkudGltZXI9bnVsbH0pLHQpfSxyLmRvbmU9ZnVuY3Rpb24oZSl7dmFyIHQ9bltlXTtyZXR1cm4gdCYmdC50aW1lcj9uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dmFyIHI9dC5vbkRvbmU7dC5vbkRvbmU9ZnVuY3Rpb24oKXtyJiZyKCksZSgpLHQub25Eb25lPW51bGx9fSkpOlByb21pc2UucmVzb2x2ZSgpfSxyLmNsZWFyPWZ1bmN0aW9uKGUpe2lmKGUpYShuW2VdKSxkZWxldGUgbltlXTtlbHNlIGZvcih2YXIgdCBpbiBuKXIuY2xlYXIodCl9fSx7fV0sMjU3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoZT4wKXJldHVybiBNYXRoLmxvZyhlKS9NYXRoLkxOMTA7dmFyIHI9TWF0aC5sb2coTWF0aC5taW4odFswXSx0WzFdKSkvTWF0aC5MTjEwO3JldHVybiBuKHIpfHwocj1NYXRoLmxvZyhNYXRoLm1heCh0WzBdLHRbMV0pKS9NYXRoLkxOMTAtNikscn19LHsiZmFzdC1pc251bWVyaWMiOjE3fV0sMjU4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17bW9kdWxlVHlwZToibG9jYWxlIixuYW1lOiJlbi1VUyIsZGljdGlvbmFyeTp7IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiOiJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlIn0sZm9ybWF0OntkYXRlOiIlbS8lZC8lWSJ9fX0se31dLDI1OTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e21vZHVsZVR5cGU6ImxvY2FsZSIsbmFtZToiZW4iLGRpY3Rpb25hcnk6eyJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlIjoiQ2xpY2sgdG8gZW50ZXIgQ29sb3Vyc2NhbGUgdGl0bGUifSxmb3JtYXQ6e2RheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxwZXJpb2RzOlsiQU0iLCJQTSJdLGRhdGVUaW1lOiIlYSAlYiAlZSAlWCAlWSIsZGF0ZToiJWQvJW0vJVkiLHRpbWU6IiVIOiVNOiVTIixkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSx5ZWFyOiIlWSIsbW9udGg6IiViICVZIixkYXlNb250aDoiJWIgJS1kIixkYXlNb250aFllYXI6IiViICUtZCwgJVkifX19LHt9XSwyNjA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vcmVnaXN0cnkiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsYT1uLmxheW91dEFycmF5Q29udGFpbmVycyxpPW4ubGF5b3V0QXJyYXlSZWdleGVzLG89ZS5zcGxpdCgiWyIpWzBdLGw9MDtsPGkubGVuZ3RoO2wrKylpZigocj1lLm1hdGNoKGlbbF0pKSYmMD09PXIuaW5kZXgpe3Q9clswXTticmVha31pZih0fHwodD1hW2EuaW5kZXhPZihvKV0pLCF0KXJldHVybiExO3ZhciBzPWUuc3Vic3RyKHQubGVuZ3RoKTtyZXR1cm4gcz8hIShyPXMubWF0Y2goL15cWygwfFsxLTldWzAtOV0qKVxdKFwuKC4rKSk/JC8pKSYme2FycmF5OnQsaW5kZXg6TnVtYmVyKHJbMV0pLHByb3BlcnR5OnJbM118fCIifTp7YXJyYXk6dCxpbmRleDoiIixwcm9wZXJ0eToiIn19fSx7Ii4uL3JlZ2lzdHJ5IjozMTh9XSwyNjE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vbGliIiksYT1uLmV4dGVuZEZsYXQsaT1uLmlzUGxhaW5PYmplY3Qsbz17dmFsVHlwZToiZmxhZ2xpc3QiLGV4dHJhczpbIm5vbmUiXSxmbGFnczpbImNhbGMiLCJjbGVhckF4aXNUeXBlcyIsInBsb3QiLCJzdHlsZSIsIm1hcmtlclNpemUiLCJjb2xvcmJhcnMiXX0sbD17dmFsVHlwZToiZmxhZ2xpc3QiLGV4dHJhczpbIm5vbmUiXSxmbGFnczpbImNhbGMiLCJwbG90IiwibGVnZW5kIiwidGlja3MiLCJheHJhbmdlIiwibGF5b3V0c3R5bGUiLCJtb2RlYmFyIiwiY2FtZXJhIiwiYXJyYXlkcmF3IiwiY29sb3JiYXJzIl19LHM9by5mbGFncy5zbGljZSgpLmNvbmNhdChbImZ1bGxSZXBsb3QiXSksYz1sLmZsYWdzLnNsaWNlKCkuY29uY2F0KCJsYXlvdXRSZXBsb3QiKTtmdW5jdGlvbiB1KGUpe2Zvcih2YXIgdD17fSxyPTA7cjxlLmxlbmd0aDtyKyspdFtlW3JdXT0hMTtyZXR1cm4gdH1mdW5jdGlvbiBkKGUsdCxyKXt2YXIgbj1hKHt9LGUpO2Zvcih2YXIgbyBpbiBuKXt2YXIgbD1uW29dO2kobCkmJihuW29dPWYobCx0LHIsbykpfXJldHVybiJmcm9tLXJvb3QiPT09ciYmKG4uZWRpdFR5cGU9dCksbn1mdW5jdGlvbiBmKGUsdCxyLG4pe2lmKGUudmFsVHlwZSl7dmFyIGk9YSh7fSxlKTtpZihpLmVkaXRUeXBlPXQsQXJyYXkuaXNBcnJheShlLml0ZW1zKSl7aS5pdGVtcz1uZXcgQXJyYXkoZS5pdGVtcy5sZW5ndGgpO2Zvcih2YXIgbz0wO288ZS5pdGVtcy5sZW5ndGg7bysrKWkuaXRlbXNbb109ZihlLml0ZW1zW29dLHQsImZyb20tcm9vdCIpfXJldHVybiBpfXJldHVybiBkKGUsdCwiXyI9PT1uLmNoYXJBdCgwKT8ibmVzdGVkIjoiZnJvbS1yb290Iil9dC5leHBvcnRzPXt0cmFjZXM6byxsYXlvdXQ6bCx0cmFjZUZsYWdzOmZ1bmN0aW9uKCl7cmV0dXJuIHUocyl9LGxheW91dEZsYWdzOmZ1bmN0aW9uKCl7cmV0dXJuIHUoYyl9LHVwZGF0ZTpmdW5jdGlvbihlLHQpe3ZhciByPXQuZWRpdFR5cGU7aWYociYmIm5vbmUiIT09cilmb3IodmFyIG49ci5zcGxpdCgiKyIpLGE9MDthPG4ubGVuZ3RoO2ErKyllW25bYV1dPSEwfSxvdmVycmlkZUFsbDpkfX0seyIuLi9saWIiOjIzMn1dLDI2MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiZ2wtbWF0NC9mcm9tUXVhdCIpLGk9ZSgiLi4vcmVnaXN0cnkiKSxvPWUoIi4uL2xpYiIpLGw9ZSgiLi4vcGxvdHMvcGxvdHMiKSxzPWUoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGM9ZSgiLi4vY29tcG9uZW50cy9jb2xvciIpLHU9cy5jbGVhbklkLGQ9cy5nZXRGcm9tVHJhY2UsZj1pLnRyYWNlSXM7ZnVuY3Rpb24gcChlLHQpe3ZhciByPWVbdF0sbj10LmNoYXJBdCgwKTtyJiYicGFwZXIiIT09ciYmKGVbdF09dShyLG4sITApKX1mdW5jdGlvbiBoKGUpe2Z1bmN0aW9uIHQodCxyKXt2YXIgbj1lW3RdLGE9ZS50aXRsZSYmZS50aXRsZVtyXTtuJiYhYSYmKGUudGl0bGV8fChlLnRpdGxlPXt9KSxlLnRpdGxlW3JdPWVbdF0sZGVsZXRlIGVbdF0pfWUmJigic3RyaW5nIiE9dHlwZW9mIGUudGl0bGUmJiJudW1iZXIiIT10eXBlb2YgZS50aXRsZXx8KGUudGl0bGU9e3RleHQ6ZS50aXRsZX0pLHQoInRpdGxlZm9udCIsImZvbnQiKSx0KCJ0aXRsZXBvc2l0aW9uIiwicG9zaXRpb24iKSx0KCJ0aXRsZXNpZGUiLCJzaWRlIiksdCgidGl0bGVvZmZzZXQiLCJvZmZzZXQiKSl9ZnVuY3Rpb24gZyhlKXtpZighby5pc1BsYWluT2JqZWN0KGUpKXJldHVybiExO3ZhciB0PWUubmFtZTtyZXR1cm4gZGVsZXRlIGUubmFtZSxkZWxldGUgZS5zaG93bGVnZW5kLCgic3RyaW5nIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdCkmJlN0cmluZyh0KX1mdW5jdGlvbiBtKGUsdCxyLG4pe2lmKHImJiFuKXJldHVybiBlO2lmKG4mJiFyKXJldHVybiB0O2lmKCFlLnRyaW0oKSlyZXR1cm4gdDtpZighdC50cmltKCkpcmV0dXJuIGU7dmFyIGEsaT1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKGE9MDthPGkmJmUuY2hhckF0KGEpPT09dC5jaGFyQXQoYSk7YSsrKTtyZXR1cm4gZS5zdWJzdHIoMCxhKS50cmltKCl9ZnVuY3Rpb24gdihlKXt2YXIgdD0ibWlkZGxlIixyPSJjZW50ZXIiO3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKC0xIT09ZS5pbmRleE9mKCJ0b3AiKT90PSJ0b3AiOi0xIT09ZS5pbmRleE9mKCJib3R0b20iKSYmKHQ9ImJvdHRvbSIpLC0xIT09ZS5pbmRleE9mKCJsZWZ0Iik/cj0ibGVmdCI6LTEhPT1lLmluZGV4T2YoInJpZ2h0IikmJihyPSJyaWdodCIpKSx0KyIgIityfWZ1bmN0aW9uIHkoZSx0KXtyZXR1cm4gdCBpbiBlJiYib2JqZWN0Ij09dHlwZW9mIGVbdF0mJjA9PT1PYmplY3Qua2V5cyhlW3RdKS5sZW5ndGh9ci5jbGVhclByb21pc2VRdWV1ZT1mdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUuX3Byb21pc2VzKSYmZS5fcHJvbWlzZXMubGVuZ3RoPjAmJm8ubG9nKCJDbGVhcmluZyBwcmV2aW91cyByZWplY3RlZCBwcm9taXNlcyBmcm9tIHF1ZXVlLiIpLGUuX3Byb21pc2VzPVtdfSxyLmNsZWFuTGF5b3V0PWZ1bmN0aW9uKGUpe3ZhciB0LG47ZXx8KGU9e30pLGUueGF4aXMxJiYoZS54YXhpc3x8KGUueGF4aXM9ZS54YXhpczEpLGRlbGV0ZSBlLnhheGlzMSksZS55YXhpczEmJihlLnlheGlzfHwoZS55YXhpcz1lLnlheGlzMSksZGVsZXRlIGUueWF4aXMxKSxlLnNjZW5lMSYmKGUuc2NlbmV8fChlLnNjZW5lPWUuc2NlbmUxKSxkZWxldGUgZS5zY2VuZTEpO3ZhciBpPShsLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFufHx7fSkuYXR0clJlZ2V4LHM9KGwuc3VicGxvdHNSZWdpc3RyeS5wb2xhcnx8e30pLmF0dHJSZWdleCxkPShsLnN1YnBsb3RzUmVnaXN0cnkudGVybmFyeXx8e30pLmF0dHJSZWdleCxmPShsLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZHx8e30pLmF0dHJSZWdleCxnPU9iamVjdC5rZXlzKGUpO2Zvcih0PTA7dDxnLmxlbmd0aDt0Kyspe3ZhciBtPWdbdF07aWYoaSYmaS50ZXN0KG0pKXt2YXIgdj1lW21dO3YuYW5jaG9yJiYiZnJlZSIhPT12LmFuY2hvciYmKHYuYW5jaG9yPXUodi5hbmNob3IpKSx2Lm92ZXJsYXlpbmcmJih2Lm92ZXJsYXlpbmc9dSh2Lm92ZXJsYXlpbmcpKSx2LnR5cGV8fCh2LmlzZGF0ZT92LnR5cGU9ImRhdGUiOnYuaXNsb2c/di50eXBlPSJsb2ciOiExPT09di5pc2RhdGUmJiExPT09di5pc2xvZyYmKHYudHlwZT0ibGluZWFyIikpLCJ3aXRoemVybyIhPT12LmF1dG9yYW5nZSYmInRvemVybyIhPT12LmF1dG9yYW5nZXx8KHYuYXV0b3JhbmdlPSEwLHYucmFuZ2Vtb2RlPSJ0b3plcm8iKSxkZWxldGUgdi5pc2xvZyxkZWxldGUgdi5pc2RhdGUsZGVsZXRlIHYuY2F0ZWdvcmllcyx5KHYsImRvbWFpbiIpJiZkZWxldGUgdi5kb21haW4sdm9pZCAwIT09di5hdXRvdGljayYmKHZvaWQgMD09PXYudGlja21vZGUmJih2LnRpY2ttb2RlPXYuYXV0b3RpY2s/ImF1dG8iOiJsaW5lYXIiKSxkZWxldGUgdi5hdXRvdGljayksaCh2KX1lbHNlIGlmKHMmJnMudGVzdChtKSl7aChlW21dLnJhZGlhbGF4aXMpfWVsc2UgaWYoZCYmZC50ZXN0KG0pKXt2YXIgeD1lW21dO2goeC5hYXhpcyksaCh4LmJheGlzKSxoKHguY2F4aXMpfWVsc2UgaWYoZiYmZi50ZXN0KG0pKXt2YXIgYj1lW21dLF89Yi5jYW1lcmFwb3NpdGlvbjtpZihBcnJheS5pc0FycmF5KF8pJiY0PT09X1swXS5sZW5ndGgpe3ZhciB3PV9bMF0sVD1fWzFdLE09X1syXSxrPWEoW10sdyksQT1bXTtmb3Iobj0wO248MzsrK24pQVtuXT1UW25dK00qa1syKzQqbl07Yi5jYW1lcmE9e2V5ZTp7eDpBWzBdLHk6QVsxXSx6OkFbMl19LGNlbnRlcjp7eDpUWzBdLHk6VFsxXSx6OlRbMl19LHVwOnt4OjAseTowLHo6MX19LGRlbGV0ZSBiLmNhbWVyYXBvc2l0aW9ufWgoYi54YXhpcyksaChiLnlheGlzKSxoKGIuemF4aXMpfX12YXIgTD1BcnJheS5pc0FycmF5KGUuYW5ub3RhdGlvbnMpP2UuYW5ub3RhdGlvbnMubGVuZ3RoOjA7Zm9yKHQ9MDt0PEw7dCsrKXt2YXIgUz1lLmFubm90YXRpb25zW3RdO28uaXNQbGFpbk9iamVjdChTKSYmKFMucmVmJiYoInBhcGVyIj09PVMucmVmPyhTLnhyZWY9InBhcGVyIixTLnlyZWY9InBhcGVyIik6ImRhdGEiPT09Uy5yZWYmJihTLnhyZWY9IngiLFMueXJlZj0ieSIpLGRlbGV0ZSBTLnJlZikscChTLCJ4cmVmIikscChTLCJ5cmVmIikpfXZhciBEPUFycmF5LmlzQXJyYXkoZS5zaGFwZXMpP2Uuc2hhcGVzLmxlbmd0aDowO2Zvcih0PTA7dDxEO3QrKyl7dmFyIEM9ZS5zaGFwZXNbdF07by5pc1BsYWluT2JqZWN0KEMpJiYocChDLCJ4cmVmIikscChDLCJ5cmVmIikpfXZhciBPPUFycmF5LmlzQXJyYXkoZS5pbWFnZXMpP2UuaW1hZ2VzLmxlbmd0aDowO2Zvcih0PTA7dDxPO3QrKyl7dmFyIFA9ZS5pbWFnZXNbdF07by5pc1BsYWluT2JqZWN0KFApJiYocChQLCJ4cmVmIikscChQLCJ5cmVmIikpfXZhciBJPWUubGVnZW5kO3JldHVybiBJJiYoSS54PjM/KEkueD0xLjAyLEkueGFuY2hvcj0ibGVmdCIpOkkueDwtMiYmKEkueD0tLjAyLEkueGFuY2hvcj0icmlnaHQiKSxJLnk+Mz8oSS55PTEuMDIsSS55YW5jaG9yPSJib3R0b20iKTpJLnk8LTImJihJLnk9LS4wMixJLnlhbmNob3I9InRvcCIpKSxoKGUpLCJyb3RhdGUiPT09ZS5kcmFnbW9kZSYmKGUuZHJhZ21vZGU9Im9yYml0IiksYy5jbGVhbihlKSxlLnRlbXBsYXRlJiZlLnRlbXBsYXRlLmxheW91dCYmci5jbGVhbkxheW91dChlLnRlbXBsYXRlLmxheW91dCksZX0sci5jbGVhbkRhdGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuLGE9ZVt0XTtpZigiaGlzdG9ncmFteSI9PT1hLnR5cGUmJiJ4YmlucyJpbiBhJiYhKCJ5YmlucyJpbiBhKSYmKGEueWJpbnM9YS54YmlucyxkZWxldGUgYS54YmlucyksYS5lcnJvcl95JiYib3BhY2l0eSJpbiBhLmVycm9yX3kpe3ZhciBzPWMuZGVmYXVsdHMsZD1hLmVycm9yX3kuY29sb3J8fChmKGEsImJhciIpP2MuZGVmYXVsdExpbmU6c1t0JXMubGVuZ3RoXSk7YS5lcnJvcl95LmNvbG9yPWMuYWRkT3BhY2l0eShjLnJnYihkKSxjLm9wYWNpdHkoZCkqYS5lcnJvcl95Lm9wYWNpdHkpLGRlbGV0ZSBhLmVycm9yX3kub3BhY2l0eX1pZigiYmFyZGlyImluIGEmJigiaCIhPT1hLmJhcmRpcnx8IWYoYSwiYmFyIikmJiJoaXN0b2dyYW0iIT09YS50eXBlLnN1YnN0cigwLDkpfHwoYS5vcmllbnRhdGlvbj0iaCIsci5zd2FwWFlEYXRhKGEpKSxkZWxldGUgYS5iYXJkaXIpLCJoaXN0b2dyYW15Ij09PWEudHlwZSYmci5zd2FwWFlEYXRhKGEpLCJoaXN0b2dyYW14IiE9PWEudHlwZSYmImhpc3RvZ3JhbXkiIT09YS50eXBlfHwoYS50eXBlPSJoaXN0b2dyYW0iKSwic2NsImluIGEmJiEoImNvbG9yc2NhbGUiaW4gYSkmJihhLmNvbG9yc2NhbGU9YS5zY2wsZGVsZXRlIGEuc2NsKSwicmV2ZXJzZXNjbCJpbiBhJiYhKCJyZXZlcnNlc2NhbGUiaW4gYSkmJihhLnJldmVyc2VzY2FsZT1hLnJldmVyc2VzY2wsZGVsZXRlIGEucmV2ZXJzZXNjbCksYS54YXhpcyYmKGEueGF4aXM9dShhLnhheGlzLCJ4IikpLGEueWF4aXMmJihhLnlheGlzPXUoYS55YXhpcywieSIpKSxmKGEsImdsM2QiKSYmYS5zY2VuZSYmKGEuc2NlbmU9bC5zdWJwbG90c1JlZ2lzdHJ5LmdsM2QuY2xlYW5JZChhLnNjZW5lKSksIWYoYSwicGllLWxpa2UiKSYmIWYoYSwiYmFyLWxpa2UiKSlpZihBcnJheS5pc0FycmF5KGEudGV4dHBvc2l0aW9uKSlmb3Iobj0wO248YS50ZXh0cG9zaXRpb24ubGVuZ3RoO24rKylhLnRleHRwb3NpdGlvbltuXT12KGEudGV4dHBvc2l0aW9uW25dKTtlbHNlIGEudGV4dHBvc2l0aW9uJiYoYS50ZXh0cG9zaXRpb249dihhLnRleHRwb3NpdGlvbikpO3ZhciBwPWkuZ2V0TW9kdWxlKGEpO2lmKHAmJnAuY29sb3JiYXIpe3ZhciB4PXAuY29sb3JiYXIuY29udGFpbmVyLGI9eD9hW3hdOmE7YiYmYi5jb2xvcnNjYWxlJiYoIllJR25CdSI9PT1iLmNvbG9yc2NhbGUmJihiLmNvbG9yc2NhbGU9IllsR25CdSIpLCJZSU9yUmQiPT09Yi5jb2xvcnNjYWxlJiYoYi5jb2xvcnNjYWxlPSJZbE9yUmQiKSl9aWYoInN1cmZhY2UiPT09YS50eXBlJiZvLmlzUGxhaW5PYmplY3QoYS5jb250b3Vycykpe3ZhciBfPVsieCIsInkiLCJ6Il07Zm9yKG49MDtuPF8ubGVuZ3RoO24rKyl7dmFyIHc9YS5jb250b3Vyc1tfW25dXTtvLmlzUGxhaW5PYmplY3QodykmJih3LmhpZ2hsaWdodENvbG9yJiYody5oaWdobGlnaHRjb2xvcj13LmhpZ2hsaWdodENvbG9yLGRlbGV0ZSB3LmhpZ2hsaWdodENvbG9yKSx3LmhpZ2hsaWdodFdpZHRoJiYody5oaWdobGlnaHR3aWR0aD13LmhpZ2hsaWdodFdpZHRoLGRlbGV0ZSB3LmhpZ2hsaWdodFdpZHRoKSl9fWlmKCJjYW5kbGVzdGljayI9PT1hLnR5cGV8fCJvaGxjIj09PWEudHlwZSl7dmFyIFQ9ITEhPT0oYS5pbmNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxNPSExIT09KGEuZGVjcmVhc2luZ3x8e30pLnNob3dsZWdlbmQsaz1nKGEuaW5jcmVhc2luZyksQT1nKGEuZGVjcmVhc2luZyk7aWYoITEhPT1rJiYhMSE9PUEpe3ZhciBMPW0oayxBLFQsTSk7TCYmKGEubmFtZT1MKX1lbHNlIWsmJiFBfHxhLm5hbWV8fChhLm5hbWU9a3x8QSl9aWYoQXJyYXkuaXNBcnJheShhLnRyYW5zZm9ybXMpKXt2YXIgUz1hLnRyYW5zZm9ybXM7Zm9yKG49MDtuPFMubGVuZ3RoO24rKyl7dmFyIEQ9U1tuXTtpZihvLmlzUGxhaW5PYmplY3QoRCkpc3dpdGNoKEQudHlwZSl7Y2FzZSJmaWx0ZXIiOkQuZmlsdGVyc3JjJiYoRC50YXJnZXQ9RC5maWx0ZXJzcmMsZGVsZXRlIEQuZmlsdGVyc3JjKSxELmNhbGVuZGFyJiYoRC52YWx1ZWNhbGVuZGFyfHwoRC52YWx1ZWNhbGVuZGFyPUQuY2FsZW5kYXIpLGRlbGV0ZSBELmNhbGVuZGFyKTticmVhaztjYXNlImdyb3VwYnkiOmlmKEQuc3R5bGVzPUQuc3R5bGVzfHxELnN0eWxlLEQuc3R5bGVzJiYhQXJyYXkuaXNBcnJheShELnN0eWxlcykpe3ZhciBDPUQuc3R5bGVzLE89T2JqZWN0LmtleXMoQyk7RC5zdHlsZXM9W107Zm9yKHZhciBQPTA7UDxPLmxlbmd0aDtQKyspRC5zdHlsZXMucHVzaCh7dGFyZ2V0Ok9bUF0sdmFsdWU6Q1tPW1BdXX0pfX19fXkoYSwibGluZSIpJiZkZWxldGUgYS5saW5lLCJtYXJrZXIiaW4gYSYmKHkoYS5tYXJrZXIsImxpbmUiKSYmZGVsZXRlIGEubWFya2VyLmxpbmUseShhLCJtYXJrZXIiKSYmZGVsZXRlIGEubWFya2VyKSxjLmNsZWFuKGEpLGEuYXV0b2JpbngmJihkZWxldGUgYS5hdXRvYmlueCxkZWxldGUgYS54YmlucyksYS5hdXRvYmlueSYmKGRlbGV0ZSBhLmF1dG9iaW55LGRlbGV0ZSBhLnliaW5zKSxoKGEpLGEuY29sb3JiYXImJmgoYS5jb2xvcmJhciksYS5tYXJrZXImJmEubWFya2VyLmNvbG9yYmFyJiZoKGEubWFya2VyLmNvbG9yYmFyKSxhLmxpbmUmJmEubGluZS5jb2xvcmJhciYmaChhLmxpbmUuY29sb3JiYXIpLGEuYWF4aXMmJmgoYS5hYXhpcyksYS5iYXhpcyYmaChhLmJheGlzKX19LHIuc3dhcFhZRGF0YT1mdW5jdGlvbihlKXt2YXIgdDtpZihvLnN3YXBBdHRycyhlLFsiPyIsIj8wIiwiZD8iLCI/YmlucyIsIm5iaW5zPyIsImF1dG9iaW4/IiwiP3NyYyIsImVycm9yXz8iXSksQXJyYXkuaXNBcnJheShlLnopJiZBcnJheS5pc0FycmF5KGUuelswXSkmJihlLnRyYW5zcG9zZT9kZWxldGUgZS50cmFuc3Bvc2U6ZS50cmFuc3Bvc2U9ITApLGUuZXJyb3JfeCYmZS5lcnJvcl95KXt2YXIgcj1lLmVycm9yX3ksbj0iY29weV95c3R5bGUiaW4gcj9yLmNvcHlfeXN0eWxlOiEoci5jb2xvcnx8ci50aGlja25lc3N8fHIud2lkdGgpO28uc3dhcEF0dHJzKGUsWyJlcnJvcl8/LmNvcHlfeXN0eWxlIl0pLG4mJm8uc3dhcEF0dHJzKGUsWyJlcnJvcl8/LmNvbG9yIiwiZXJyb3JfPy50aGlja25lc3MiLCJlcnJvcl8/LndpZHRoIl0pfWlmKCJzdHJpbmciPT10eXBlb2YgZS5ob3ZlcmluZm8pe3ZhciBhPWUuaG92ZXJpbmZvLnNwbGl0KCIrIik7Zm9yKHQ9MDt0PGEubGVuZ3RoO3QrKykieCI9PT1hW3RdP2FbdF09InkiOiJ5Ij09PWFbdF0mJihhW3RdPSJ4Iik7ZS5ob3ZlcmluZm89YS5qb2luKCIrIil9fSxyLmNvZXJjZVRyYWNlSW5kaWNlcz1mdW5jdGlvbihlLHQpe2lmKG4odCkpcmV0dXJuW3RdO2lmKCFBcnJheS5pc0FycmF5KHQpfHwhdC5sZW5ndGgpcmV0dXJuIGUuZGF0YS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KSk7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciByPVtdLGE9MDthPHQubGVuZ3RoO2ErKylvLmlzSW5kZXgodFthXSxlLmRhdGEubGVuZ3RoKT9yLnB1c2godFthXSk6by53YXJuKCJ0cmFjZSBpbmRleCAoIix0W2FdLCIpIGlzIG5vdCBhIG51bWJlciBvciBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHJ9cmV0dXJuIHR9LHIubWFuYWdlQXJyYXlDb250YWluZXJzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1lLm9iaixpPWUucGFydHMsbD1pLmxlbmd0aCxzPWlbbC0xXSxjPW4ocyk7aWYoYyYmbnVsbD09PXQpe3ZhciB1PWkuc2xpY2UoMCxsLTEpLmpvaW4oIi4iKTtvLm5lc3RlZFByb3BlcnR5KGEsdSkuZ2V0KCkuc3BsaWNlKHMsMSl9ZWxzZSBjJiZ2b2lkIDA9PT1lLmdldCgpPyh2b2lkIDA9PT1lLmdldCgpJiYocltlLmFzdHJdPW51bGwpLGUuc2V0KHQpKTplLnNldCh0KX07dmFyIHg9LyhcLlteXFtcXVwuXSt8XFtbXlxbXF1cLl0rXF0pJC87ZnVuY3Rpb24gYihlKXt2YXIgdD1lLnNlYXJjaCh4KTtpZih0PjApcmV0dXJuIGUuc3Vic3RyKDAsdCl9ci5oYXNQYXJlbnQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9Yih0KTtyOyl7aWYociBpbiBlKXJldHVybiEwO3I9YihyKX1yZXR1cm4hMX07dmFyIF89WyJ4IiwieSIsInoiXTtyLmNsZWFyQXhpc1R5cGVzPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylmb3IodmFyIGE9ZS5fZnVsbERhdGFbbl0saT0wO2k8MztpKyspe3ZhciBsPWQoZSxhLF9baV0pO2lmKGwmJiJsb2ciIT09bC50eXBlKXt2YXIgcz1sLl9uYW1lLGM9bC5faWQuc3Vic3RyKDEpO2lmKCJzY2VuZSI9PT1jLnN1YnN0cigwLDUpKXtpZih2b2lkIDAhPT1yW2NdKWNvbnRpbnVlO3M9YysiLiIrc312YXIgdT1zKyIudHlwZSI7dm9pZCAwPT09cltzXSYmdm9pZCAwPT09clt1XSYmby5uZXN0ZWRQcm9wZXJ0eShlLmxheW91dCx1KS5zZXQobnVsbCl9fX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6MTAyLCIuLi9saWIiOjIzMiwiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjoyODMsIi4uL3Bsb3RzL3Bsb3RzIjozMTYsIi4uL3JlZ2lzdHJ5IjozMTgsImZhc3QtaXNudW1lcmljIjoxNywiZ2wtbWF0NC9mcm9tUXVhdCI6MjN9XSwyNjM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9wbG90X2FwaSIpO3IuX2RvUGxvdD1uLl9kb1Bsb3Qsci5uZXdQbG90PW4ubmV3UGxvdCxyLnJlc3R5bGU9bi5yZXN0eWxlLHIucmVsYXlvdXQ9bi5yZWxheW91dCxyLnJlZHJhdz1uLnJlZHJhdyxyLnVwZGF0ZT1uLnVwZGF0ZSxyLl9ndWlSZXN0eWxlPW4uX2d1aVJlc3R5bGUsci5fZ3VpUmVsYXlvdXQ9bi5fZ3VpUmVsYXlvdXQsci5fZ3VpVXBkYXRlPW4uX2d1aVVwZGF0ZSxyLl9zdG9yZURpcmVjdEdVSUVkaXQ9bi5fc3RvcmVEaXJlY3RHVUlFZGl0LHIucmVhY3Q9bi5yZWFjdCxyLmV4dGVuZFRyYWNlcz1uLmV4dGVuZFRyYWNlcyxyLnByZXBlbmRUcmFjZXM9bi5wcmVwZW5kVHJhY2VzLHIuYWRkVHJhY2VzPW4uYWRkVHJhY2VzLHIuZGVsZXRlVHJhY2VzPW4uZGVsZXRlVHJhY2VzLHIubW92ZVRyYWNlcz1uLm1vdmVUcmFjZXMsci5wdXJnZT1uLnB1cmdlLHIuYWRkRnJhbWVzPW4uYWRkRnJhbWVzLHIuZGVsZXRlRnJhbWVzPW4uZGVsZXRlRnJhbWVzLHIuYW5pbWF0ZT1uLmFuaW1hdGUsci5zZXRQbG90Q29uZmlnPW4uc2V0UGxvdENvbmZpZyxyLnRvSW1hZ2U9ZSgiLi90b19pbWFnZSIpLHIudmFsaWRhdGU9ZSgiLi92YWxpZGF0ZSIpLHIuZG93bmxvYWRJbWFnZT1lKCIuLi9zbmFwc2hvdC9kb3dubG9hZCIpO3ZhciBhPWUoIi4vdGVtcGxhdGVfYXBpIik7ci5tYWtlVGVtcGxhdGU9YS5tYWtlVGVtcGxhdGUsci52YWxpZGF0ZVRlbXBsYXRlPWEudmFsaWRhdGVUZW1wbGF0ZX0seyIuLi9zbmFwc2hvdC9kb3dubG9hZCI6MzIwLCIuL3Bsb3RfYXBpIjoyNjUsIi4vdGVtcGxhdGVfYXBpIjoyNzAsIi4vdG9faW1hZ2UiOjI3MSwiLi92YWxpZGF0ZSI6MjcyfV0sMjY0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL2xpYi9pc19wbGFpbl9vYmplY3QiKSxhPWUoIi4uL2xpYi9ub29wIiksaT1lKCIuLi9saWIvbG9nZ2VycyIpLG89ZSgiLi4vbGliL3NlYXJjaCIpLnNvcnRlckFzYyxsPWUoIi4uL3JlZ2lzdHJ5Iik7ci5jb250YWluZXJBcnJheU1hdGNoPWUoIi4vY29udGFpbmVyX2FycmF5X21hdGNoIik7dmFyIHM9ci5pc0FkZFZhbD1mdW5jdGlvbihlKXtyZXR1cm4iYWRkIj09PWV8fG4oZSl9LGM9ci5pc1JlbW92ZVZhbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fCJyZW1vdmUiPT09ZX07ci5hcHBseUNvbnRhaW5lckFycmF5Q2hhbmdlcz1mdW5jdGlvbihlLHQscixuLHUpe3ZhciBkPXQuYXN0cixmPWwuZ2V0Q29tcG9uZW50TWV0aG9kKGQsInN1cHBseUxheW91dERlZmF1bHRzIikscD1sLmdldENvbXBvbmVudE1ldGhvZChkLCJkcmF3IiksaD1sLmdldENvbXBvbmVudE1ldGhvZChkLCJkcmF3T25lIiksZz1uLnJlcGxvdHx8bi5yZWNhbGN8fGY9PT1hfHxwPT09YSxtPWUubGF5b3V0LHY9ZS5fZnVsbExheW91dDtpZihyWyIiXSl7T2JqZWN0LmtleXMocikubGVuZ3RoPjEmJmkud2FybigiRnVsbCBhcnJheSBlZGl0cyBhcmUgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgZWRpdHMiLGQpO3ZhciB5PXJbIiJdWyIiXTtpZihjKHkpKXQuc2V0KG51bGwpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoeSkpcmV0dXJuIGkud2FybigiVW5yZWNvZ25pemVkIGZ1bGwgYXJyYXkgZWRpdCB2YWx1ZSIsZCx5KSwhMDt0LnNldCh5KX1yZXR1cm4hZyYmKGYobSx2KSxwKGUpLCEwKX12YXIgeCxiLF8sdyxULE0sayxBLEw9T2JqZWN0LmtleXMocikubWFwKE51bWJlcikuc29ydChvKSxTPXQuZ2V0KCksRD1TfHxbXSxDPXUodixkKS5nZXQoKSxPPVtdLFA9LTEsST1ELmxlbmd0aDtmb3IoeD0wO3g8TC5sZW5ndGg7eCsrKWlmKHc9cltfPUxbeF1dLFQ9T2JqZWN0LmtleXModyksTT13WyIiXSxrPXMoTSksXzwwfHxfPkQubGVuZ3RoLShrPzA6MSkpaS53YXJuKCJpbmRleCBvdXQgb2YgcmFuZ2UiLGQsXyk7ZWxzZSBpZih2b2lkIDAhPT1NKVQubGVuZ3RoPjEmJmkud2FybigiSW5zZXJ0aW9uICYgcmVtb3ZhbCBhcmUgaW5jb21wYXRpYmxlIHdpdGggZWRpdHMgdG8gdGhlIHNhbWUgaW5kZXguIixkLF8pLGMoTSk/Ty5wdXNoKF8pOms/KCJhZGQiPT09TSYmKE09e30pLEQuc3BsaWNlKF8sMCxNKSxDJiZDLnNwbGljZShfLDAse30pKTppLndhcm4oIlVucmVjb2duaXplZCBmdWxsIG9iamVjdCBlZGl0IHZhbHVlIixkLF8sTSksLTE9PT1QJiYoUD1fKTtlbHNlIGZvcihiPTA7YjxULmxlbmd0aDtiKyspQT1kKyJbIitfKyJdLiIsdShEW19dLFRbYl0sQSkuc2V0KHdbVFtiXV0pO2Zvcih4PU8ubGVuZ3RoLTE7eD49MDt4LS0pRC5zcGxpY2UoT1t4XSwxKSxDJiZDLnNwbGljZShPW3hdLDEpO2lmKEQubGVuZ3RoP1N8fHQuc2V0KEQpOnQuc2V0KG51bGwpLGcpcmV0dXJuITE7aWYoZihtLHYpLGghPT1hKXt2YXIgUjtpZigtMT09PVApUj1MO2Vsc2V7Zm9yKEk9TWF0aC5tYXgoRC5sZW5ndGgsSSksUj1bXSx4PTA7eDxMLmxlbmd0aCYmISgoXz1MW3hdKT49UCk7eCsrKVIucHVzaChfKTtmb3IoeD1QO3g8STt4KyspUi5wdXNoKHgpfWZvcih4PTA7eDxSLmxlbmd0aDt4KyspaChlLFJbeF0pfWVsc2UgcChlKTtyZXR1cm4hMH19LHsiLi4vbGliL2lzX3BsYWluX29iamVjdCI6MjMzLCIuLi9saWIvbG9nZ2VycyI6MjM2LCIuLi9saWIvbm9vcCI6MjQxLCIuLi9saWIvc2VhcmNoIjoyNTEsIi4uL3JlZ2lzdHJ5IjozMTgsIi4vY29udGFpbmVyX2FycmF5X21hdGNoIjoyNjB9XSwyNjU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgiZmFzdC1pc251bWVyaWMiKSxpPWUoImhhcy1ob3ZlciIpLG89ZSgiLi4vbGliIiksbD1vLm5lc3RlZFByb3BlcnR5LHM9ZSgiLi4vbGliL2V2ZW50cyIpLGM9ZSgiLi4vbGliL3F1ZXVlIiksdT1lKCIuLi9yZWdpc3RyeSIpLGQ9ZSgiLi9wbG90X3NjaGVtYSIpLGY9ZSgiLi4vcGxvdHMvcGxvdHMiKSxwPWUoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaD1lKCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSxnPWUoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxtPWUoIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCIpLmluaXRJbnRlcmFjdGlvbnMsdj1lKCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHk9ZSgiLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LHg9ZSgiLi9wbG90X2NvbmZpZyIpLmRmbHRDb25maWcsYj1lKCIuL21hbmFnZV9hcnJheXMiKSxfPWUoIi4vaGVscGVycyIpLHc9ZSgiLi9zdWJyb3V0aW5lcyIpLFQ9ZSgiLi9lZGl0X3R5cGVzIiksTT1lKCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuQVhfTkFNRV9QQVRURVJOLGs9MDtmdW5jdGlvbiBBKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQ7dC5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD90Ll9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50LS06ZS5lbWl0KCJwbG90bHlfYWZ0ZXJwbG90Iil9ZnVuY3Rpb24gTChlLHQpe3RyeXtlLl9mdWxsTGF5b3V0Ll9wYXBlci5zdHlsZSgiYmFja2dyb3VuZCIsdCl9Y2F0Y2goZSl7by5lcnJvcihlKX19ZnVuY3Rpb24gUyhlLHQpe0woZSxnLmNvbWJpbmUodCwid2hpdGUiKSl9ZnVuY3Rpb24gRChlLHQpe2lmKCFlLl9jb250ZXh0KXtlLl9jb250ZXh0PW8uZXh0ZW5kRGVlcCh7fSx4KTt2YXIgcj1uLnNlbGVjdCgiYmFzZSIpO2UuX2NvbnRleHQuX2Jhc2VVcmw9ci5zaXplKCkmJnIuYXR0cigiaHJlZiIpP3dpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF06IiJ9dmFyIGEsbCxzLGM9ZS5fY29udGV4dDtpZih0KXtmb3IobD1PYmplY3Qua2V5cyh0KSxhPTA7YTxsLmxlbmd0aDthKyspImVkaXRhYmxlIiE9PShzPWxbYV0pJiYiZWRpdHMiIT09cyYmcyBpbiBjJiYoInNldEJhY2tncm91bmQiPT09cyYmIm9wYXF1ZSI9PT10W3NdP2Nbc109UzpjW3NdPXRbc10pO3QucGxvdDNkUGl4ZWxSYXRpbyYmIWMucGxvdEdsUGl4ZWxSYXRpbyYmKGMucGxvdEdsUGl4ZWxSYXRpbz1jLnBsb3QzZFBpeGVsUmF0aW8pO3ZhciB1PXQuZWRpdGFibGU7aWYodm9pZCAwIT09dSlmb3IoYy5lZGl0YWJsZT11LGw9T2JqZWN0LmtleXMoYy5lZGl0cyksYT0wO2E8bC5sZW5ndGg7YSsrKWMuZWRpdHNbbFthXV09dTtpZih0LmVkaXRzKWZvcihsPU9iamVjdC5rZXlzKHQuZWRpdHMpLGE9MDthPGwubGVuZ3RoO2ErKykocz1sW2FdKWluIGMuZWRpdHMmJihjLmVkaXRzW3NdPXQuZWRpdHNbc10pO2MuX2V4cG9ydGVkUGxvdD10Ll9leHBvcnRlZFBsb3R9Yy5zdGF0aWNQbG90JiYoYy5lZGl0YWJsZT0hMSxjLmVkaXRzPXt9LGMuYXV0b3NpemFibGU9ITEsYy5zY3JvbGxab29tPSExLGMuZG91YmxlQ2xpY2s9ITEsYy5zaG93VGlwcz0hMSxjLnNob3dMaW5rPSExLGMuZGlzcGxheU1vZGVCYXI9ITEpLCJob3ZlciIhPT1jLmRpc3BsYXlNb2RlQmFyfHxpfHwoYy5kaXNwbGF5TW9kZUJhcj0hMCksInRyYW5zcGFyZW50IiE9PWMuc2V0QmFja2dyb3VuZCYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc2V0QmFja2dyb3VuZHx8KGMuc2V0QmFja2dyb3VuZD1MKSxjLl9oYXNaZXJvSGVpZ2h0PWMuX2hhc1plcm9IZWlnaHR8fDA9PT1lLmNsaWVudEhlaWdodCxjLl9oYXNaZXJvV2lkdGg9Yy5faGFzWmVyb1dpZHRofHwwPT09ZS5jbGllbnRXaWR0aDt2YXIgZD1jLnNjcm9sbFpvb20sZj1jLl9zY3JvbGxab29tPXt9O2lmKCEwPT09ZClmLmNhcnRlc2lhbj0xLGYuZ2wzZD0xLGYuZ2VvPTEsZi5tYXBib3g9MTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZCl7dmFyIHA9ZC5zcGxpdCgiKyIpO2ZvcihhPTA7YTxwLmxlbmd0aDthKyspZltwW2FdXT0xfWVsc2UhMSE9PWQmJihmLmdsM2Q9MSxmLmdlbz0xLGYubWFwYm94PTEpfWZ1bmN0aW9uIEMoZSx0KXt2YXIgcixuLGE9dCsxLGk9W107Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKykobj1lW3JdKTwwP2kucHVzaChhK24pOmkucHVzaChuKTtyZXR1cm4gaX1mdW5jdGlvbiBPKGUsdCxyKXt2YXIgbixhO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspe2lmKChhPXRbbl0pIT09cGFyc2VJbnQoYSwxMCkpdGhyb3cgbmV3IEVycm9yKCJhbGwgdmFsdWVzIGluICIrcisiIG11c3QgYmUgaW50ZWdlcnMiKTtpZihhPj1lLmRhdGEubGVuZ3RofHxhPC1lLmRhdGEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihyKyIgbXVzdCBiZSB2YWxpZCBpbmRpY2VzIGZvciBnZC5kYXRhLiIpO2lmKHQuaW5kZXhPZihhLG4rMSk+LTF8fGE+PTAmJnQuaW5kZXhPZigtZS5kYXRhLmxlbmd0aCthKT4tMXx8YTwwJiZ0LmluZGV4T2YoZS5kYXRhLmxlbmd0aCthKT4tMSl0aHJvdyBuZXcgRXJyb3IoImVhY2ggaW5kZXggaW4gIityKyIgbXVzdCBiZSB1bmlxdWUuIil9fWZ1bmN0aW9uIFAoZSx0LHIpe2lmKCFBcnJheS5pc0FycmF5KGUuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoImN1cnJlbnRJbmRpY2VzIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuIik7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKSxPKGUsdCwiY3VycmVudEluZGljZXMiKSx2b2lkIDA9PT1yfHxBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHZvaWQgMCE9PXImJk8oZSxyLCJuZXdJbmRpY2VzIiksdm9pZCAwIT09ciYmdC5sZW5ndGghPT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN1cnJlbnQgYW5kIG5ldyBpbmRpY2VzIG11c3QgYmUgb2YgZXF1YWwgbGVuZ3RoLiIpfWZ1bmN0aW9uIEkoZSx0LHIsbixpKXshZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9by5pc1BsYWluT2JqZWN0KG4pO2lmKCFBcnJheS5pc0FycmF5KGUuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkiKTtpZighby5pc1BsYWluT2JqZWN0KHQpKXRocm93IG5ldyBFcnJvcigidXBkYXRlIG11c3QgYmUgYSBrZXk6dmFsdWUgb2JqZWN0Iik7aWYodm9pZCAwPT09cil0aHJvdyBuZXcgRXJyb3IoImluZGljZXMgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIGFycmF5IG9mIGludGVnZXJzIik7Zm9yKHZhciBpIGluIE8oZSxyLCJpbmRpY2VzIiksdCl7aWYoIUFycmF5LmlzQXJyYXkodFtpXSl8fHRbaV0ubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRyaWJ1dGUgIitpKyIgbXVzdCBiZSBhbiBhcnJheSBvZiBsZW5ndGggZXF1YWwgdG8gaW5kaWNlcyBhcnJheSBsZW5ndGgiKTtpZihhJiYoIShpIGluIG4pfHwhQXJyYXkuaXNBcnJheShuW2ldKXx8bltpXS5sZW5ndGghPT10W2ldLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKCJ3aGVuIG1heFBvaW50cyBpcyBzZXQgYXMgYSBrZXk6dmFsdWUgb2JqZWN0IGl0IG11c3QgY29udGFpbiBhIDE6MSBjb3JyaXNwb25kZW5jZSB3aXRoIHRoZSBrZXlzIGFuZCBudW1iZXIgb2YgdHJhY2VzIGluIHRoZSB1cGRhdGUgb2JqZWN0Iil9fShlLHQscixuKTtmb3IodmFyIHM9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGkscyxjLHUsZCxmPW8uaXNQbGFpbk9iamVjdChuKSxwPVtdO2Zvcih2YXIgaCBpbiBBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHI9QyhyLGUuZGF0YS5sZW5ndGgtMSksdClmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKyl7aWYoaT1lLmRhdGFbcltnXV0scz0oYz1sKGksaCkpLmdldCgpLHU9dFtoXVtnXSwhby5pc0FycmF5T3JUeXBlZEFycmF5KHUpKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlOiAiK2grIiBpbmRleDogIitnKyIgbXVzdCBiZSBhbiBhcnJheSIpO2lmKCFvLmlzQXJyYXlPclR5cGVkQXJyYXkocykpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIG1pc3Npbmcgb3Igbm9uLWFycmF5IGF0dHJpYnV0ZTogIitoKTtpZihzLmNvbnN0cnVjdG9yIT09dS5jb25zdHJ1Y3Rvcil0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBleHRlbmQgYXJyYXkgd2l0aCBhbiBhcnJheSBvZiBhIGRpZmZlcmVudCB0eXBlOiAiK2gpO2Q9Zj9uW2hdW2ddOm4sYShkKXx8KGQ9LTEpLHAucHVzaCh7cHJvcDpjLHRhcmdldDpzLGluc2VydDp1LG1heHA6TWF0aC5mbG9vcihkKX0pfXJldHVybiBwfShlLHQscixuKSxjPXt9LHU9e30sZD0wO2Q8cy5sZW5ndGg7ZCsrKXt2YXIgZj1zW2RdLnByb3AscD1zW2RdLm1heHAsaD1pKHNbZF0udGFyZ2V0LHNbZF0uaW5zZXJ0LHApO2Yuc2V0KGhbMF0pLEFycmF5LmlzQXJyYXkoY1tmLmFzdHJdKXx8KGNbZi5hc3RyXT1bXSksY1tmLmFzdHJdLnB1c2goaFsxXSksQXJyYXkuaXNBcnJheSh1W2YuYXN0cl0pfHwodVtmLmFzdHJdPVtdKSx1W2YuYXN0cl0ucHVzaChzW2RdLnRhcmdldC5sZW5ndGgpfXJldHVybnt1cGRhdGU6YyxtYXhQb2ludHM6dX19ZnVuY3Rpb24gUihlLHQpe3ZhciByPW5ldyBlLmNvbnN0cnVjdG9yKGUubGVuZ3RoK3QubGVuZ3RoKTtyZXR1cm4gci5zZXQoZSksci5zZXQodCxlLmxlbmd0aCkscn1mdW5jdGlvbiB6KGUsdCxuLGEpe2U9by5nZXRHcmFwaERpdihlKSxfLmNsZWFyUHJvbWlzZVF1ZXVlKGUpO3ZhciBpPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgdClpW3RdPW47ZWxzZXtpZighby5pc1BsYWluT2JqZWN0KHQpKXJldHVybiBvLndhcm4oIlJlc3R5bGUgZmFpbC4iLHQsbixhKSxQcm9taXNlLnJlamVjdCgpO2k9by5leHRlbmRGbGF0KHt9LHQpLHZvaWQgMD09PWEmJihhPW4pfU9iamVjdC5rZXlzKGkpLmxlbmd0aCYmKGUuY2hhbmdlZD0hMCk7dmFyIGw9Xy5jb2VyY2VUcmFjZUluZGljZXMoZSxhKSxzPWooZSxpLGwpLHU9cy5mbGFnczt1LmNhbGMmJihlLmNhbGNkYXRhPXZvaWQgMCksdS5jbGVhckF4aXNUeXBlcyYmXy5jbGVhckF4aXNUeXBlcyhlLGwse30pO3ZhciBkPVtdO3UuZnVsbFJlcGxvdD9kLnB1c2goci5fZG9QbG90KTooZC5wdXNoKGYucHJldmlvdXNQcm9taXNlcyksZi5zdXBwbHlEZWZhdWx0cyhlKSx1Lm1hcmtlclNpemUmJihmLmRvQ2FsY2RhdGEoZSksVihkKSksdS5zdHlsZSYmZC5wdXNoKHcuZG9UcmFjZVN0eWxlKSx1LmNvbG9yYmFycyYmZC5wdXNoKHcuZG9Db2xvckJhcnMpLGQucHVzaChBKSksZC5wdXNoKGYucmVob3ZlcixmLnJlZHJhZyksYy5hZGQoZSx6LFtlLHMudW5kb2l0LHMudHJhY2VzXSx6LFtlLHMucmVkb2l0LHMudHJhY2VzXSk7dmFyIHA9by5zeW5jT3JBc3luYyhkLGUpO3JldHVybiBwJiZwLnRoZW58fChwPVByb21pc2UucmVzb2x2ZSgpKSxwLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLHMuZXZlbnREYXRhKSxlfSkpfWZ1bmN0aW9uIE4oZSl7cmV0dXJuIHZvaWQgMD09PWU/bnVsbDplfWZ1bmN0aW9uIEYoZSx0KXtyZXR1cm4gdD9mdW5jdGlvbih0LHIsbil7dmFyIGE9bCh0LHIpLGk9YS5zZXQ7cmV0dXJuIGEuc2V0PWZ1bmN0aW9uKHQpe0UoKG58fCIiKStyLGEuZ2V0KCksdCxlKSxpKHQpfSxhfTpsfWZ1bmN0aW9uIEUoZSx0LHIsbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8QXJyYXkuaXNBcnJheShyKSlmb3IodmFyIGE9QXJyYXkuaXNBcnJheSh0KT90OltdLGk9QXJyYXkuaXNBcnJheShyKT9yOltdLGw9TWF0aC5tYXgoYS5sZW5ndGgsaS5sZW5ndGgpLHM9MDtzPGw7cysrKUUoZSsiWyIrcysiXSIsYVtzXSxpW3NdLG4pO2Vsc2UgaWYoby5pc1BsYWluT2JqZWN0KHQpfHxvLmlzUGxhaW5PYmplY3Qocikpe3ZhciBjPW8uaXNQbGFpbk9iamVjdCh0KT90Ont9LHU9by5pc1BsYWluT2JqZWN0KHIpP3I6e30sZD1vLmV4dGVuZEZsYXQoe30sYyx1KTtmb3IodmFyIGYgaW4gZClFKGUrIi4iK2YsY1tmXSx1W2ZdLG4pfWVsc2Ugdm9pZCAwPT09bltlXSYmKG5bZV09Tih0KSl9ZnVuY3Rpb24gaihlLHQscil7dmFyIG4sYT1lLl9mdWxsTGF5b3V0LGk9ZS5fZnVsbERhdGEscz1lLmRhdGEsYz1hLl9ndWlFZGl0aW5nLGg9RihhLl9wcmVHVUksYyksZz1vLmV4dGVuZERlZXBBbGwoe30sdCk7SCh0KTt2YXIgbSx2PVQudHJhY2VGbGFncygpLHk9e30seD17fTtmdW5jdGlvbiBiKCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbigpe30pKX1mdW5jdGlvbiB3KGUpe3ZhciB0PXAuaWQybmFtZShlKTstMT09PW0uaW5kZXhPZih0KSYmbS5wdXNoKHQpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIkxBWU9VVCIrZSsiLmF1dG9yYW5nZSJ9ZnVuY3Rpb24gayhlKXtyZXR1cm4iTEFZT1VUIitlKyIucmFuZ2UifWZ1bmN0aW9uIEEoZSl7Zm9yKHZhciB0PWU7dDxpLmxlbmd0aDt0KyspaWYoaVt0XS5faW5wdXQ9PT1zW2VdKXJldHVybiBpW3RdfWZ1bmN0aW9uIEwobixpLG8pe2lmKEFycmF5LmlzQXJyYXkobikpbi5mb3JFYWNoKChmdW5jdGlvbihlKXtMKGUsaSxvKX0pKTtlbHNlIGlmKCEobiBpbiB0KSYmIV8uaGFzUGFyZW50KHQsbikpe3ZhciBsO2lmKCJMQVlPVVQiPT09bi5zdWJzdHIoMCw2KSlsPWgoZS5sYXlvdXQsbi5yZXBsYWNlKCJMQVlPVVQiLCIiKSk7ZWxzZXt2YXIgdT1yW29dO2w9RihhLl90cmFjZVByZUdVSVtBKHUpLl9mdWxsSW5wdXQudWlkXSxjKShzW3VdLG4pfW4gaW4geHx8KHhbbl09YigpKSx2b2lkIDA9PT14W25dW29dJiYoeFtuXVtvXT1OKGwuZ2V0KCkpKSx2b2lkIDAhPT1pJiZsLnNldChpKX19ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGlbdF1bZV19fWZ1bmN0aW9uIEQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuITE9PT10P2lbcltuXV1bZV06bnVsbH19Zm9yKHZhciBDIGluIHQpe2lmKF8uaGFzUGFyZW50KHQsQykpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2V0ICIrQysiIGFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHkiKTt2YXIgTyxQLEksUix6LEUsaj10W0NdO2lmKCJhdXRvYmlueCIhPT1DJiYiYXV0b2JpbnkiIT09Q3x8KEM9Qy5jaGFyQXQoQy5sZW5ndGgtMSkrImJpbnMiLGo9QXJyYXkuaXNBcnJheShqKT9qLm1hcChEKEMpKTohMT09PWo/ci5tYXAoUyhDKSk6bnVsbCkseVtDXT1qLCJMQVlPVVQiIT09Qy5zdWJzdHIoMCw2KSl7Zm9yKHhbQ109YigpLG49MDtuPHIubGVuZ3RoO24rKyl7aWYoTz1zW3Jbbl1dLFA9QShyW25dKSxSPShJPUYoYS5fdHJhY2VQcmVHVUlbUC5fZnVsbElucHV0LnVpZF0sYykoTyxDKSkuZ2V0KCksdm9pZCAwIT09KHo9QXJyYXkuaXNBcnJheShqKT9qW24lai5sZW5ndGhdOmopKXt2YXIgQj1JLnBhcnRzW0kucGFydHMubGVuZ3RoLTFdLFk9Qy5zdWJzdHIoMCxDLmxlbmd0aC1CLmxlbmd0aC0xKSxWPVk/WSsiLiI6IiIsVT1ZP2woUCxZKS5nZXQoKTpQO2lmKChFPWQuZ2V0VHJhY2VWYWxPYmplY3QoUCxJLnBhcnRzKSkmJkUuaW1wbGllZEVkaXRzJiZudWxsIT09eilmb3IodmFyIHEgaW4gRS5pbXBsaWVkRWRpdHMpTChvLnJlbGF0aXZlQXR0cihDLHEpLEUuaW1wbGllZEVkaXRzW3FdLG4pO2Vsc2UgaWYoInRoaWNrbmVzc21vZGUiIT09QiYmImxlbm1vZGUiIT09Qnx8Uj09PXp8fCJmcmFjdGlvbiIhPT16JiYicGl4ZWxzIiE9PXp8fCFVKXtpZigidHlwZSI9PT1DJiYoInBpZSI9PT16IT0oInBpZSI9PT1SKXx8ImZ1bm5lbGFyZWEiPT09eiE9KCJmdW5uZWxhcmVhIj09PVIpKSl7dmFyIEc9IngiLFo9InkiOyJiYXIiIT09eiYmImJhciIhPT1SfHwiaCIhPT1PLm9yaWVudGF0aW9ufHwoRz0ieSIsWj0ieCIpLG8uc3dhcEF0dHJzKE8sWyI/IiwiP3NyYyJdLCJsYWJlbHMiLEcpLG8uc3dhcEF0dHJzKE8sWyJkPyIsIj8wIl0sImxhYmVsIixHKSxvLnN3YXBBdHRycyhPLFsiPyIsIj9zcmMiXSwidmFsdWVzIixaKSwicGllIj09PVJ8fCJmdW5uZWxhcmVhIj09PVI/KGwoTywibWFya2VyLmNvbG9yIikuc2V0KGwoTywibWFya2VyLmNvbG9ycyIpLmdldCgpKSxhLl9waWVsYXllci5zZWxlY3RBbGwoImcudHJhY2UiKS5yZW1vdmUoKSk6dS50cmFjZUlzKE8sImNhcnRlc2lhbiIpJiZsKE8sIm1hcmtlci5jb2xvcnMiKS5zZXQobChPLCJtYXJrZXIuY29sb3IiKS5nZXQoKSl9fWVsc2V7dmFyIFc9YS5fc2l6ZSxYPVUub3JpZW50LEo9InRvcCI9PT1YfHwiYm90dG9tIj09PVg7aWYoInRoaWNrbmVzc21vZGUiPT09Qil7dmFyIFE9Sj9XLmg6Vy53O0woVisidGhpY2tuZXNzIixVLnRoaWNrbmVzcyooImZyYWN0aW9uIj09PXo/MS9ROlEpLG4pfWVsc2V7dmFyIEs9Sj9XLnc6Vy5oO0woVisibGVuIixVLmxlbiooImZyYWN0aW9uIj09PXo/MS9LOkspLG4pfX14W0NdW25dPU4oUik7aWYoLTEhPT1bInN3YXB4eSIsInN3YXB4eWF4ZXMiLCJvcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uYXhlcyJdLmluZGV4T2YoQykpe2lmKCJvcmllbnRhdGlvbiI9PT1DKXtJLnNldCh6KTt2YXIgJD1PLngmJiFPLnk/ImgiOiJ2IjtpZigoSS5nZXQoKXx8JCk9PT1QLm9yaWVudGF0aW9uKWNvbnRpbnVlfWVsc2Uib3JpZW50YXRpb25heGVzIj09PUMmJihPLm9yaWVudGF0aW9uPXt2OiJoIixoOiJ2In1bUC5vcmllbnRhdGlvbl0pO18uc3dhcFhZRGF0YShPKSx2LmNhbGM9di5jbGVhckF4aXNUeXBlcz0hMH1lbHNlLTEhPT1mLmRhdGFBcnJheUNvbnRhaW5lcnMuaW5kZXhPZihJLnBhcnRzWzBdKT8oXy5tYW5hZ2VBcnJheUNvbnRhaW5lcnMoSSx6LHgpLHYuY2FsYz0hMCk6KEU/RS5hcnJheU9rJiYhdS50cmFjZUlzKFAsInJlZ2wiKSYmKG8uaXNBcnJheU9yVHlwZWRBcnJheSh6KXx8by5pc0FycmF5T3JUeXBlZEFycmF5KFIpKT92LmNhbGM9ITA6VC51cGRhdGUodixFKTp2LmNhbGM9ITAsSS5zZXQoeikpfX1pZigtMSE9PVsic3dhcHh5YXhlcyIsIm9yaWVudGF0aW9uYXhlcyJdLmluZGV4T2YoQykmJnAuc3dhcChlLHIpLCJvcmllbnRhdGlvbmF4ZXMiPT09Qyl7dmFyIGVlPWwoZS5sYXlvdXQsImhvdmVybW9kZSIpLHRlPWVlLmdldCgpOyJ4Ij09PXRlP2VlLnNldCgieSIpOiJ5Ij09PXRlP2VlLnNldCgieCIpOiJ4IHVuaWZpZWQiPT09dGU/ZWUuc2V0KCJ5IHVuaWZpZWQiKToieSB1bmlmaWVkIj09PXRlJiZlZS5zZXQoInggdW5pZmllZCIpfWlmKC0xIT09WyJvcmllbnRhdGlvbiIsInR5cGUiXS5pbmRleE9mKEMpKXtmb3IobT1bXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciByZT1zW3Jbbl1dO3UudHJhY2VJcyhyZSwiY2FydGVzaWFuIikmJih3KHJlLnhheGlzfHwieCIpLHcocmUueWF4aXN8fCJ5IikpfUwobS5tYXAoTSksITAsMCksTChtLm1hcChrKSxbMCwxXSwwKX19ZWxzZSBJPWgoZS5sYXlvdXQsQy5yZXBsYWNlKCJMQVlPVVQiLCIiKSkseFtDXT1bTihJLmdldCgpKV0sSS5zZXQoQXJyYXkuaXNBcnJheShqKT9qWzBdOmopLHYuY2FsYz0hMH1yZXR1cm4odi5jYWxjfHx2LnBsb3QpJiYodi5mdWxsUmVwbG90PSEwKSx7ZmxhZ3M6dix1bmRvaXQ6eCxyZWRvaXQ6eSx0cmFjZXM6cixldmVudERhdGE6by5leHRlbmREZWVwTm9BcnJheXMoW10sW2cscl0pfX1mdW5jdGlvbiBIKGUpe3ZhciB0LHIsbixhPW8uY291bnRlclJlZ2V4KCJheGlzIiwiLnRpdGxlIiwhMSwhMSksaT0vY29sb3JiYXJcLnRpdGxlJC8sbD1PYmplY3Qua2V5cyhlKTtmb3IodD0wO3Q8bC5sZW5ndGg7dCsrKXI9bFt0XSxuPWVbcl0sInRpdGxlIiE9PXImJiFhLnRlc3QocikmJiFpLnRlc3Qocil8fCJzdHJpbmciIT10eXBlb2YgbiYmIm51bWJlciIhPXR5cGVvZiBuP3IuaW5kZXhPZigidGl0bGVmb250Iik+LTEmJi0xPT09ci5pbmRleE9mKCJncm91cHRpdGxlZm9udCIpP3MocixyLnJlcGxhY2UoInRpdGxlZm9udCIsInRpdGxlLmZvbnQiKSk6ci5pbmRleE9mKCJ0aXRsZXBvc2l0aW9uIik+LTE/cyhyLHIucmVwbGFjZSgidGl0bGVwb3NpdGlvbiIsInRpdGxlLnBvc2l0aW9uIikpOnIuaW5kZXhPZigidGl0bGVzaWRlIik+LTE/cyhyLHIucmVwbGFjZSgidGl0bGVzaWRlIiwidGl0bGUuc2lkZSIpKTpyLmluZGV4T2YoInRpdGxlb2Zmc2V0Iik+LTEmJnMocixyLnJlcGxhY2UoInRpdGxlb2Zmc2V0IiwidGl0bGUub2Zmc2V0IikpOnMocixyLnJlcGxhY2UoInRpdGxlIiwidGl0bGUudGV4dCIpKTtmdW5jdGlvbiBzKHQscil7ZVtyXT1lW3RdLGRlbGV0ZSBlW3RdfX1mdW5jdGlvbiBCKGUsdCxyKXtlPW8uZ2V0R3JhcGhEaXYoZSksXy5jbGVhclByb21pc2VRdWV1ZShlKTt2YXIgbj17fTtpZigic3RyaW5nIj09dHlwZW9mIHQpblt0XT1yO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdCh0KSlyZXR1cm4gby53YXJuKCJSZWxheW91dCBmYWlsLiIsdCxyKSxQcm9taXNlLnJlamVjdCgpO249by5leHRlbmRGbGF0KHt9LHQpfU9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKGUuY2hhbmdlZD0hMCk7dmFyIGE9WihlLG4pLGk9YS5mbGFncztpLmNhbGMmJihlLmNhbGNkYXRhPXZvaWQgMCk7dmFyIGw9W2YucHJldmlvdXNQcm9taXNlc107aS5sYXlvdXRSZXBsb3Q/bC5wdXNoKHcubGF5b3V0UmVwbG90KTpPYmplY3Qua2V5cyhuKS5sZW5ndGgmJihZKGUsaSxhKXx8Zi5zdXBwbHlEZWZhdWx0cyhlKSxpLmxlZ2VuZCYmbC5wdXNoKHcuZG9MZWdlbmQpLGkubGF5b3V0c3R5bGUmJmwucHVzaCh3LmxheW91dFN0eWxlcyksaS5heHJhbmdlJiZWKGwsYS5yYW5nZXNBbHRlcmVkKSxpLnRpY2tzJiZsLnB1c2gody5kb1RpY2tzUmVsYXlvdXQpLGkubW9kZWJhciYmbC5wdXNoKHcuZG9Nb2RlQmFyKSxpLmNhbWVyYSYmbC5wdXNoKHcuZG9DYW1lcmEpLGkuY29sb3JiYXJzJiZsLnB1c2gody5kb0NvbG9yQmFycyksbC5wdXNoKEEpKSxsLnB1c2goZi5yZWhvdmVyLGYucmVkcmFnKSxjLmFkZChlLEIsW2UsYS51bmRvaXRdLEIsW2UsYS5yZWRvaXRdKTt2YXIgcz1vLnN5bmNPckFzeW5jKGwsZSk7cmV0dXJuIHMmJnMudGhlbnx8KHM9UHJvbWlzZS5yZXNvbHZlKGUpKSxzLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixhLmV2ZW50RGF0YSksZX0pKX1mdW5jdGlvbiBZKGUsdCxyKXt2YXIgbj1lLl9mdWxsTGF5b3V0O2lmKCF0LmF4cmFuZ2UpcmV0dXJuITE7Zm9yKHZhciBhIGluIHQpaWYoImF4cmFuZ2UiIT09YSYmdFthXSlyZXR1cm4hMTtmb3IodmFyIGkgaW4gci5yYW5nZXNBbHRlcmVkKXt2YXIgbz1wLmlkMm5hbWUoaSksbD1lLmxheW91dFtvXSxzPW5bb107aWYocy5hdXRvcmFuZ2U9bC5hdXRvcmFuZ2UsbC5yYW5nZSYmKHMucmFuZ2U9bC5yYW5nZS5zbGljZSgpKSxzLmNsZWFuUmFuZ2UoKSxzLl9tYXRjaEdyb3VwKWZvcih2YXIgYyBpbiBzLl9tYXRjaEdyb3VwKWlmKGMhPT1pKXt2YXIgdT1uW3AuaWQybmFtZShjKV07dS5hdXRvcmFuZ2U9cy5hdXRvcmFuZ2UsdS5yYW5nZT1zLnJhbmdlLnNsaWNlKCksdS5faW5wdXQucmFuZ2U9cy5yYW5nZS5zbGljZSgpfX1yZXR1cm4hMH1mdW5jdGlvbiBWKGUsdCl7dmFyIHI9dD9mdW5jdGlvbihlKXt2YXIgcj1bXSxuPSEwO2Zvcih2YXIgYSBpbiB0KXt2YXIgaT1wLmdldEZyb21JZChlLGEpO2lmKHIucHVzaChhKSwtMSE9PShpLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIikmJmkuX2FuY2hvckF4aXMmJnIucHVzaChpLl9hbmNob3JBeGlzLl9pZCksaS5fbWF0Y2hHcm91cClmb3IodmFyIG8gaW4gaS5fbWF0Y2hHcm91cCl0W29dfHxyLnB1c2gobyk7aS5hdXRvbWFyZ2luJiYobj0hMSl9cmV0dXJuIHAuZHJhdyhlLHIse3NraXBUaXRsZTpufSl9OmZ1bmN0aW9uKGUpe3JldHVybiBwLmRyYXcoZSwicmVkcmF3Iil9O2UucHVzaCh5LHcuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyxyLHcuZHJhd0RhdGEsdy5maW5hbERyYXcpfXZhciBVPS9eW3h5el1heGlzWzAtOV0qXC5yYW5nZShcW1swfDFdXF0pPyQvLHE9L15beHl6XWF4aXNbMC05XSpcLmF1dG9yYW5nZSQvLEc9L15beHl6XWF4aXNbMC05XSpcLmRvbWFpbihcW1swfDFdXF0pPyQvO2Z1bmN0aW9uIFooZSx0KXt2YXIgcixuLGEsaT1lLmxheW91dCxzPWUuX2Z1bGxMYXlvdXQsYz1zLl9ndWlFZGl0aW5nLGY9RihzLl9wcmVHVUksYyksaD1PYmplY3Qua2V5cyh0KSxnPXAubGlzdChlKSxtPW8uZXh0ZW5kRGVlcEFsbCh7fSx0KSx2PXt9O2ZvcihIKHQpLGg9T2JqZWN0LmtleXModCksbj0wO248aC5sZW5ndGg7bisrKWlmKDA9PT1oW25dLmluZGV4T2YoImFsbGF4ZXMiKSl7Zm9yKGE9MDthPGcubGVuZ3RoO2ErKyl7dmFyIHk9Z1thXS5faWQuc3Vic3RyKDEpLHg9LTEhPT15LmluZGV4T2YoInNjZW5lIik/eSsiLiI6IiIsdz1oW25dLnJlcGxhY2UoImFsbGF4ZXMiLHgrZ1thXS5fbmFtZSk7dFt3XXx8KHRbd109dFtoW25dXSl9ZGVsZXRlIHRbaFtuXV19dmFyIGs9VC5sYXlvdXRGbGFncygpLEE9e30sTD17fTtmdW5jdGlvbiBTKGUscil7aWYoQXJyYXkuaXNBcnJheShlKSllLmZvckVhY2goKGZ1bmN0aW9uKGUpe1MoZSxyKX0pKTtlbHNlIGlmKCEoZSBpbiB0KSYmIV8uaGFzUGFyZW50KHQsZSkpe3ZhciBuPWYoaSxlKTtlIGluIEx8fChMW2VdPU4obi5nZXQoKSkpLHZvaWQgMCE9PXImJm4uc2V0KHIpfX12YXIgRCxDPXt9O2Z1bmN0aW9uIE8oZSl7dmFyIHQ9cC5uYW1lMmlkKGUuc3BsaXQoIi4iKVswXSk7cmV0dXJuIENbdF09MSx0fWZvcih2YXIgUCBpbiB0KXtpZihfLmhhc1BhcmVudCh0LFApKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK1ArIiBhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5Iik7Zm9yKHZhciBJPWYoaSxQKSxSPXRbUF0sej1JLnBhcnRzLmxlbmd0aC0xO3o+MCYmInN0cmluZyIhPXR5cGVvZiBJLnBhcnRzW3pdOyl6LS07dmFyIEU9SS5wYXJ0c1t6XSxqPUkucGFydHNbei0xXSsiLiIrRSxCPUkucGFydHMuc2xpY2UoMCx6KS5qb2luKCIuIiksWT1sKGUubGF5b3V0LEIpLmdldCgpLFY9bChzLEIpLmdldCgpLFo9SS5nZXQoKTtpZih2b2lkIDAhPT1SKXtBW1BdPVIsTFtQXT0icmV2ZXJzZSI9PT1FP1I6TihaKTt2YXIgWD1kLmdldExheW91dFZhbE9iamVjdChzLEkucGFydHMpO2lmKFgmJlguaW1wbGllZEVkaXRzJiZudWxsIT09Uilmb3IodmFyIEogaW4gWC5pbXBsaWVkRWRpdHMpUyhvLnJlbGF0aXZlQXR0cihQLEopLFguaW1wbGllZEVkaXRzW0pdKTtpZigtMSE9PVsid2lkdGgiLCJoZWlnaHQiXS5pbmRleE9mKFApKWlmKFIpe1MoImF1dG9zaXplIixudWxsKTt2YXIgUT0iaGVpZ2h0Ij09PVA/IndpZHRoIjoiaGVpZ2h0IjtTKFEsc1tRXSl9ZWxzZSBzW1BdPWUuX2luaXRpYWxBdXRvU2l6ZVtQXTtlbHNlIGlmKCJhdXRvc2l6ZSI9PT1QKVMoIndpZHRoIixSP251bGw6cy53aWR0aCksUygiaGVpZ2h0IixSP251bGw6cy5oZWlnaHQpO2Vsc2UgaWYoai5tYXRjaChVKSlPKGopLGwocyxCKyIuX2lucHV0UmFuZ2UiKS5zZXQobnVsbCk7ZWxzZSBpZihqLm1hdGNoKHEpKXtPKGopLGwocyxCKyIuX2lucHV0UmFuZ2UiKS5zZXQobnVsbCk7dmFyIEs9bChzLEIpLmdldCgpO0suX2lucHV0RG9tYWluJiYoSy5faW5wdXQuZG9tYWluPUsuX2lucHV0RG9tYWluLnNsaWNlKCkpfWVsc2Ugai5tYXRjaChHKSYmbChzLEIrIi5faW5wdXREb21haW4iKS5zZXQobnVsbCk7aWYoInR5cGUiPT09RSl7RD1ZO3ZhciAkPSJsaW5lYXIiPT09Vi50eXBlJiYibG9nIj09PVIsZWU9ImxvZyI9PT1WLnR5cGUmJiJsaW5lYXIiPT09UjtpZigkfHxlZSl7aWYoRCYmRC5yYW5nZSlpZihWLmF1dG9yYW5nZSkkJiYoRC5yYW5nZT1ELnJhbmdlWzFdPkQucmFuZ2VbMF0/WzEsMl06WzIsMV0pO2Vsc2V7dmFyIHRlPUQucmFuZ2VbMF0scmU9RC5yYW5nZVsxXTskPyh0ZTw9MCYmcmU8PTAmJlMoQisiLmF1dG9yYW5nZSIsITApLHRlPD0wP3RlPXJlLzFlNjpyZTw9MCYmKHJlPXRlLzFlNiksUyhCKyIucmFuZ2VbMF0iLE1hdGgubG9nKHRlKS9NYXRoLkxOMTApLFMoQisiLnJhbmdlWzFdIixNYXRoLmxvZyhyZSkvTWF0aC5MTjEwKSk6KFMoQisiLnJhbmdlWzBdIixNYXRoLnBvdygxMCx0ZSkpLFMoQisiLnJhbmdlWzFdIixNYXRoLnBvdygxMCxyZSkpKX1lbHNlIFMoQisiLmF1dG9yYW5nZSIsITApO0FycmF5LmlzQXJyYXkocy5fc3VicGxvdHMucG9sYXIpJiZzLl9zdWJwbG90cy5wb2xhci5sZW5ndGgmJnNbSS5wYXJ0c1swXV0mJiJyYWRpYWxheGlzIj09PUkucGFydHNbMV0mJmRlbGV0ZSBzW0kucGFydHNbMF1dLl9zdWJwbG90LnZpZXdJbml0aWFsWyJyYWRpYWxheGlzLnJhbmdlIl0sdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY29udmVydENvb3JkcyIpKGUsVixSLFMpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJjb252ZXJ0Q29vcmRzIikoZSxWLFIsUyl9ZWxzZSBTKEIrIi5hdXRvcmFuZ2UiLCEwKSxTKEIrIi5yYW5nZSIsbnVsbCk7bChzLEIrIi5faW5wdXRSYW5nZSIpLnNldChudWxsKX1lbHNlIGlmKEUubWF0Y2goTSkpe3ZhciBuZT1sKHMsUCkuZ2V0KCksYWU9KFJ8fHt9KS50eXBlO2FlJiYiLSIhPT1hZXx8KGFlPSJsaW5lYXIiKSx1LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJjb252ZXJ0Q29vcmRzIikoZSxuZSxhZSxTKSx1LmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKGUsbmUsYWUsUyl9dmFyIGllPWIuY29udGFpbmVyQXJyYXlNYXRjaChQKTtpZihpZSl7cj1pZS5hcnJheSxuPWllLmluZGV4O3ZhciBvZT1pZS5wcm9wZXJ0eSxsZT1YfHx7ZWRpdFR5cGU6ImNhbGMifTsiIiE9PW4mJiIiPT09b2UmJihiLmlzQWRkVmFsKFIpP0xbUF09bnVsbDpiLmlzUmVtb3ZlVmFsKFIpP0xbUF09KGwoaSxyKS5nZXQoKXx8W10pW25dOm8ud2FybigidW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IHZhbHVlIix0KSksVC51cGRhdGUoayxsZSksdltyXXx8KHZbcl09e30pO3ZhciBzZT12W3JdW25dO3NlfHwoc2U9dltyXVtuXT17fSksc2Vbb2VdPVIsZGVsZXRlIHRbUF19ZWxzZSJyZXZlcnNlIj09PUU/KFkucmFuZ2U/WS5yYW5nZS5yZXZlcnNlKCk6KFMoQisiLmF1dG9yYW5nZSIsITApLFkucmFuZ2U9WzEsMF0pLFYuYXV0b3JhbmdlP2suY2FsYz0hMDprLnBsb3Q9ITApOihzLl9oYXMoInNjYXR0ZXItbGlrZSIpJiZzLl9oYXMoInJlZ2wiKSYmImRyYWdtb2RlIj09PVAmJigibGFzc28iPT09Unx8InNlbGVjdCI9PT1SKSYmImxhc3NvIiE9PVomJiJzZWxlY3QiIT09Wnx8cy5faGFzKCJnbDJkIik/ay5wbG90PSEwOlg/VC51cGRhdGUoayxYKTprLmNhbGM9ITAsSS5zZXQoUikpfX1mb3IociBpbiB2KXtiLmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzKGUsZihpLHIpLHZbcl0sayxmKXx8KGsucGxvdD0hMCl9Zm9yKHZhciBjZSBpbiBDKXt2YXIgdWU9KEQ9cC5nZXRGcm9tSWQoZSxjZSkpJiZELl9jb25zdHJhaW50R3JvdXA7aWYodWUpZm9yKHZhciBkZSBpbiBrLmNhbGM9ITAsdWUpQ1tkZV18fChwLmdldEZyb21JZChlLGRlKS5fY29uc3RyYWludFNocmlua2FibGU9ITApfXJldHVybihXKGUpfHx0LmhlaWdodHx8dC53aWR0aCkmJihrLnBsb3Q9ITApLChrLnBsb3R8fGsuY2FsYykmJihrLmxheW91dFJlcGxvdD0hMCkse2ZsYWdzOmsscmFuZ2VzQWx0ZXJlZDpDLHVuZG9pdDpMLHJlZG9pdDpBLGV2ZW50RGF0YTptfX1mdW5jdGlvbiBXKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQscj10LndpZHRoLG49dC5oZWlnaHQ7cmV0dXJuIGUubGF5b3V0LmF1dG9zaXplJiZmLnBsb3RBdXRvU2l6ZShlLGUubGF5b3V0LHQpLHQud2lkdGghPT1yfHx0LmhlaWdodCE9PW59ZnVuY3Rpb24gWChlLHQsbixhKXtlPW8uZ2V0R3JhcGhEaXYoZSksXy5jbGVhclByb21pc2VRdWV1ZShlKSxvLmlzUGxhaW5PYmplY3QodCl8fCh0PXt9KSxvLmlzUGxhaW5PYmplY3Qobil8fChuPXt9KSxPYmplY3Qua2V5cyh0KS5sZW5ndGgmJihlLmNoYW5nZWQ9ITApLE9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKGUuY2hhbmdlZD0hMCk7dmFyIGk9Xy5jb2VyY2VUcmFjZUluZGljZXMoZSxhKSxsPWooZSxvLmV4dGVuZEZsYXQoe30sdCksaSkscz1sLmZsYWdzLHU9WihlLG8uZXh0ZW5kRmxhdCh7fSxuKSksZD11LmZsYWdzOyhzLmNhbGN8fGQuY2FsYykmJihlLmNhbGNkYXRhPXZvaWQgMCkscy5jbGVhckF4aXNUeXBlcyYmXy5jbGVhckF4aXNUeXBlcyhlLGksbik7dmFyIHA9W107ZC5sYXlvdXRSZXBsb3Q/cC5wdXNoKHcubGF5b3V0UmVwbG90KTpzLmZ1bGxSZXBsb3Q/cC5wdXNoKHIuX2RvUGxvdCk6KHAucHVzaChmLnByZXZpb3VzUHJvbWlzZXMpLFkoZSxkLHUpfHxmLnN1cHBseURlZmF1bHRzKGUpLHMuc3R5bGUmJnAucHVzaCh3LmRvVHJhY2VTdHlsZSksKHMuY29sb3JiYXJzfHxkLmNvbG9yYmFycykmJnAucHVzaCh3LmRvQ29sb3JCYXJzKSxkLmxlZ2VuZCYmcC5wdXNoKHcuZG9MZWdlbmQpLGQubGF5b3V0c3R5bGUmJnAucHVzaCh3LmxheW91dFN0eWxlcyksZC5heHJhbmdlJiZWKHAsdS5yYW5nZXNBbHRlcmVkKSxkLnRpY2tzJiZwLnB1c2gody5kb1RpY2tzUmVsYXlvdXQpLGQubW9kZWJhciYmcC5wdXNoKHcuZG9Nb2RlQmFyKSxkLmNhbWVyYSYmcC5wdXNoKHcuZG9DYW1lcmEpLHAucHVzaChBKSkscC5wdXNoKGYucmVob3ZlcixmLnJlZHJhZyksYy5hZGQoZSxYLFtlLGwudW5kb2l0LHUudW5kb2l0LGwudHJhY2VzXSxYLFtlLGwucmVkb2l0LHUucmVkb2l0LGwudHJhY2VzXSk7dmFyIGg9by5zeW5jT3JBc3luYyhwLGUpO3JldHVybiBoJiZoLnRoZW58fChoPVByb21pc2UucmVzb2x2ZShlKSksaC50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLmVtaXQoInBsb3RseV91cGRhdGUiLHtkYXRhOmwuZXZlbnREYXRhLGxheW91dDp1LmV2ZW50RGF0YX0pLGV9KSl9ZnVuY3Rpb24gSihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMDt2YXIgcj1lLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdC5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMSxyfX12YXIgUT1be3BhdHRlcm46L15oaWRkZW5sYWJlbHMvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L14oKHh8eSlheGlzXGQqKVwuKChhdXRvKT9yYW5nZXx0aXRsZVwudGV4dCkvfSx7cGF0dGVybjovYXhpc1xkKlwuc2hvd3NwaWtlcyQvLGF0dHI6Im1vZGViYXIudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi8oaG92ZXJ8ZHJhZyltb2RlJC8sYXR0cjoibW9kZWJhci51aXJldmlzaW9uIn0se3BhdHRlcm46L14oc2NlbmVcZCopXC5jYW1lcmEvfSx7cGF0dGVybjovXihnZW9cZCopXC4ocHJvamVjdGlvbnxjZW50ZXJ8Zml0Ym91bmRzKS99LHtwYXR0ZXJuOi9eKHRlcm5hcnlcZCpcLlthYmNdYXhpcylcLihtaW58dGl0bGVcLnRleHQpJC99LHtwYXR0ZXJuOi9eKHBvbGFyXGQqXC5yYWRpYWxheGlzKVwuKChhdXRvKT9yYW5nZXxhbmdsZXx0aXRsZVwudGV4dCkvfSx7cGF0dGVybjovXihwb2xhclxkKlwuYW5ndWxhcmF4aXMpXC5yb3RhdGlvbi99LHtwYXR0ZXJuOi9eKG1hcGJveFxkKilcLihjZW50ZXJ8em9vbXxiZWFyaW5nfHBpdGNoKS99LHtwYXR0ZXJuOi9ebGVnZW5kXC4oeHx5KSQvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eKHNoYXBlc3xhbm5vdGF0aW9ucykvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9edGl0bGVcLnRleHQkLyxhdHRyOiJlZGl0cmV2aXNpb24ifV0sSz1be3BhdHRlcm46L15zZWxlY3RlZHBvaW50cyQvLGF0dHI6InNlbGVjdGlvbnJldmlzaW9uIn0se3BhdHRlcm46LyhefHZhbHVlXC4pdmlzaWJsZSQvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L15kaW1lbnNpb25zXFtcZCtcXVwuY29uc3RyYWludHJhbmdlL30se3BhdHRlcm46L15ub2RlXC4oeHx5fGdyb3VwcykvfSx7cGF0dGVybjovXmxldmVsJC99LHtwYXR0ZXJuOi8oXnx2YWx1ZVwuKW5hbWUkL30se3BhdHRlcm46L2NvbG9yYmFyXC50aXRsZVwudGV4dCQvfSx7cGF0dGVybjovY29sb3JiYXJcLih4fHkpJC8sYXR0cjoiZWRpdHJldmlzaW9uIn1dO2Z1bmN0aW9uICQoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXSxhPWUubWF0Y2gobi5wYXR0ZXJuKTtpZihhKXt2YXIgaT1hWzFdfHwiIjtyZXR1cm57aGVhZDppLHRhaWw6ZS5zdWJzdHIoaS5sZW5ndGgrMSksYXR0cjpuLmF0dHJ9fX19ZnVuY3Rpb24gZWUoZSx0KXt2YXIgcj1sKHQsZSkuZ2V0KCk7aWYodm9pZCAwIT09cilyZXR1cm4gcjt2YXIgbj1lLnNwbGl0KCIuIik7Zm9yKG4ucG9wKCk7bi5sZW5ndGg+MTspaWYobi5wb3AoKSx2b2lkIDAhPT0ocj1sKHQsbi5qb2luKCIuIikrIi51aXJldmlzaW9uIikuZ2V0KCkpKXJldHVybiByO3JldHVybiB0LnVpcmV2aXNpb259ZnVuY3Rpb24gdGUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdLl9mdWxsSW5wdXQudWlkPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiByZShlLHQscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXS51aWQ9PT1lKXJldHVybiBuO3JldHVybiF0W3JdfHx0W3JdLnVpZD8tMTpyfWZ1bmN0aW9uIG5lKGUsdCl7dmFyIHI9by5pc1BsYWluT2JqZWN0KGUpLG49QXJyYXkuaXNBcnJheShlKTtyZXR1cm4gcnx8bj8ociYmby5pc1BsYWluT2JqZWN0KHQpfHxuJiZBcnJheS5pc0FycmF5KHQpKSYmSlNPTi5zdHJpbmdpZnkoZSk9PT1KU09OLnN0cmluZ2lmeSh0KTplPT09dH1mdW5jdGlvbiBhZShlLHQscixuKXt2YXIgYSxpLHMsYz1uLmdldFZhbE9iamVjdCx1PW4uZmxhZ3MsZD1uLmltbXV0YWJsZSxmPW4uaW5BcnJheSxwPW4uYXJyYXlJbmRleDtmdW5jdGlvbiBoKCl7dmFyIGU9YS5lZGl0VHlwZTtmJiYtMSE9PWUuaW5kZXhPZigiYXJyYXlkcmF3Iik/by5wdXNoVW5pcXVlKHUuYXJyYXlzW2ZdLHApOihULnVwZGF0ZSh1LGEpLCJub25lIiE9PWUmJnUubkNoYW5nZXMrKyxuLnRyYW5zaXRpb24mJmEuYW5pbSYmdS5uQ2hhbmdlc0FuaW0rKywoVS50ZXN0KHMpfHxxLnRlc3QocykpJiYodS5yYW5nZXNBbHRlcmVkW3JbMF1dPTEpLEcudGVzdChzKSYmbCh0LCJfaW5wdXREb21haW4iKS5zZXQobnVsbCksImRhdGFyZXZpc2lvbiI9PT1pJiYodS5uZXdEYXRhUmV2aXNpb249MSkpfWZ1bmN0aW9uIGcoZSl7cmV0dXJuImRhdGFfYXJyYXkiPT09ZS52YWxUeXBlfHxlLmFycmF5T2t9Zm9yKGkgaW4gZSl7aWYodS5jYWxjJiYhbi50cmFuc2l0aW9uKXJldHVybjt2YXIgbT1lW2ldLHY9dFtpXSx5PXIuY29uY2F0KGkpO2lmKHM9eS5qb2luKCIuIiksIl8iIT09aS5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBtJiZtIT09dil7aWYoKCJ0aWNrMCI9PT1pfHwiZHRpY2siPT09aSkmJiJnZW8iIT09clswXSl7dmFyIHg9dC50aWNrbW9kZTtpZigiYXV0byI9PT14fHwiYXJyYXkiPT09eHx8IXgpY29udGludWV9aWYoKCJyYW5nZSIhPT1pfHwhdC5hdXRvcmFuZ2UpJiYoInptaW4iIT09aSYmInptYXgiIT09aXx8ImNvbnRvdXJjYXJwZXQiIT09dC50eXBlKSYmKGE9Yyh5KSkmJighYS5fY29tcGFyZUFzSlNPTnx8SlNPTi5zdHJpbmdpZnkobSkhPT1KU09OLnN0cmluZ2lmeSh2KSkpe3ZhciBiLF89YS52YWxUeXBlLHc9ZyhhKSxNPUFycmF5LmlzQXJyYXkobSksaz1BcnJheS5pc0FycmF5KHYpO2lmKE0mJmspe3ZhciBBPSJfaW5wdXRfIitpLEw9ZVtBXSxTPXRbQV07aWYoQXJyYXkuaXNBcnJheShMKSYmTD09PVMpY29udGludWV9aWYodm9pZCAwPT09dil3JiZNP3UuY2FsYz0hMDpoKCk7ZWxzZSBpZihhLl9pc0xpbmtlZFRvQXJyYXkpe3ZhciBEPVtdLEM9ITE7Znx8KHUuYXJyYXlzW2ldPUQpO3ZhciBPPU1hdGgubWluKG0ubGVuZ3RoLHYubGVuZ3RoKSxQPU1hdGgubWF4KG0ubGVuZ3RoLHYubGVuZ3RoKTtpZihPIT09UCl7aWYoImFycmF5ZHJhdyIhPT1hLmVkaXRUeXBlKXtoKCk7Y29udGludWV9Qz0hMH1mb3IoYj0wO2I8TztiKyspYWUobVtiXSx2W2JdLHkuY29uY2F0KGIpLG8uZXh0ZW5kRmxhdCh7aW5BcnJheTppLGFycmF5SW5kZXg6Yn0sbikpO2lmKEMpZm9yKGI9TztiPFA7YisrKUQucHVzaChiKX1lbHNlIV8mJm8uaXNQbGFpbk9iamVjdChtKT9hZShtLHYseSxuKTp3P00mJms/KGQmJih1LmNhbGM9ITApLChkfHxuLm5ld0RhdGFSZXZpc2lvbikmJmgoKSk6TSE9PWs/dS5jYWxjPSEwOmgoKTpNJiZrJiZtLmxlbmd0aD09PXYubGVuZ3RoJiZTdHJpbmcobSk9PT1TdHJpbmcodil8fGgoKX19fWZvcihpIGluIHQpaWYoIShpIGluIGUpJiYiXyIhPT1pLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIHRbaV0pe2lmKGcoYT1jKHIuY29uY2F0KGkpKSkmJkFycmF5LmlzQXJyYXkodFtpXSkpcmV0dXJuIHZvaWQodS5jYWxjPSEwKTtoKCl9fWZ1bmN0aW9uIGllKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQscj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFvLmVxdWFsRG9tUmVjdHMocix0Ll9sYXN0QkJveCkpe3ZhciBuPXQuX2ludlRyYW5zZm9ybT1vLmludmVyc2VUcmFuc2Zvcm1NYXRyaXgoby5nZXRGdWxsVHJhbnNmb3JtTWF0cml4KGUpKTt0Ll9pbnZTY2FsZVg9TWF0aC5zcXJ0KG5bMF1bMF0qblswXVswXStuWzBdWzFdKm5bMF1bMV0rblswXVsyXSpuWzBdWzJdKSx0Ll9pbnZTY2FsZVk9TWF0aC5zcXJ0KG5bMV1bMF0qblsxXVswXStuWzFdWzFdKm5bMV1bMV0rblsxXVsyXSpuWzFdWzJdKSx0Ll9sYXN0QkJveD1yfX1yLmFuaW1hdGU9ZnVuY3Rpb24oZSx0LHIpe2lmKGU9by5nZXRHcmFwaERpdihlKSwhby5pc1Bsb3REaXYoZSkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrZSsiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYW5pbWF0aW5nIGl0LiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90bHkuY29tL2phdmFzY3JpcHQvYW5pbWF0aW9ucy8iKTt2YXIgbj1lLl90cmFuc2l0aW9uRGF0YTtuLl9mcmFtZVF1ZXVlfHwobi5fZnJhbWVRdWV1ZT1bXSk7dmFyIGE9KHI9Zi5zdXBwbHlBbmltYXRpb25EZWZhdWx0cyhyKSkudHJhbnNpdGlvbixpPXIuZnJhbWU7ZnVuY3Rpb24gbChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9lPj1hLmxlbmd0aD9hWzBdOmFbZV06YX1mdW5jdGlvbiBzKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGkpP2U+PWkubGVuZ3RoP2lbMF06aVtlXTppfWZ1bmN0aW9uIGMoZSx0KXt2YXIgcj0wO3JldHVybiBmdW5jdGlvbigpe2lmKGUmJisrcj09PXQpcmV0dXJuIGUoKX19cmV0dXJuIHZvaWQgMD09PW4uX2ZyYW1lV2FpdGluZ0NudCYmKG4uX2ZyYW1lV2FpdGluZ0NudD0wKSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oaSx1KXtmdW5jdGlvbiBkKCl7bi5fY3VycmVudEZyYW1lJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSYmbi5fY3VycmVudEZyYW1lLm9uQ29tcGxldGUoKTt2YXIgdD1uLl9jdXJyZW50RnJhbWU9bi5fZnJhbWVRdWV1ZS5zaGlmdCgpO2lmKHQpe3ZhciByPXQubmFtZT90Lm5hbWUudG9TdHJpbmcoKTpudWxsO2UuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZT1yLG4uX2xhc3RGcmFtZUF0PURhdGUubm93KCksbi5fdGltZVRvTmV4dD10LmZyYW1lT3B0cy5kdXJhdGlvbixmLnRyYW5zaXRpb24oZSx0LmZyYW1lLmRhdGEsdC5mcmFtZS5sYXlvdXQsXy5jb2VyY2VUcmFjZUluZGljZXMoZSx0LmZyYW1lLnRyYWNlcyksdC5mcmFtZU9wdHMsdC50cmFuc2l0aW9uT3B0cykudGhlbigoZnVuY3Rpb24oKXt0Lm9uQ29tcGxldGUmJnQub25Db21wbGV0ZSgpfSkpLGUuZW1pdCgicGxvdGx5X2FuaW1hdGluZ2ZyYW1lIix7bmFtZTpyLGZyYW1lOnQuZnJhbWUsYW5pbWF0aW9uOntmcmFtZTp0LmZyYW1lT3B0cyx0cmFuc2l0aW9uOnQudHJhbnNpdGlvbk9wdHN9fSl9ZWxzZSBlLmVtaXQoInBsb3RseV9hbmltYXRlZCIpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShuLl9hbmltYXRpb25SYWYpLG4uX2FuaW1hdGlvblJhZj1udWxsfWZ1bmN0aW9uIHAoKXtlLmVtaXQoInBsb3RseV9hbmltYXRpbmciKSxuLl9sYXN0RnJhbWVBdD0tMS8wLG4uX3RpbWVUb05leHQ9MCxuLl9ydW5uaW5nVHJhbnNpdGlvbnM9MCxuLl9jdXJyZW50RnJhbWU9bnVsbDt2YXIgdD1mdW5jdGlvbigpe24uX2FuaW1hdGlvblJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpLERhdGUubm93KCktbi5fbGFzdEZyYW1lQXQ+bi5fdGltZVRvTmV4dCYmZCgpfTt0KCl9dmFyIGgsZyxtPTA7ZnVuY3Rpb24gdihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9tPj1hLmxlbmd0aD9lLnRyYW5zaXRpb25PcHRzPWFbbV06ZS50cmFuc2l0aW9uT3B0cz1hWzBdOmUudHJhbnNpdGlvbk9wdHM9YSxtKyssZX12YXIgeT1bXSx4PW51bGw9PXQsYj1BcnJheS5pc0FycmF5KHQpO2lmKCF4JiYhYiYmby5pc1BsYWluT2JqZWN0KHQpKXkucHVzaCh7dHlwZToib2JqZWN0IixkYXRhOnYoby5leHRlbmRGbGF0KHt9LHQpKX0pO2Vsc2UgaWYoeHx8LTEhPT1bInN0cmluZyIsIm51bWJlciJdLmluZGV4T2YodHlwZW9mIHQpKWZvcihoPTA7aDxuLl9mcmFtZXMubGVuZ3RoO2grKykoZz1uLl9mcmFtZXNbaF0pJiYoeHx8U3RyaW5nKGcuZ3JvdXApPT09U3RyaW5nKHQpKSYmeS5wdXNoKHt0eXBlOiJieW5hbWUiLG5hbWU6U3RyaW5nKGcubmFtZSksZGF0YTp2KHtuYW1lOmcubmFtZX0pfSk7ZWxzZSBpZihiKWZvcihoPTA7aDx0Lmxlbmd0aDtoKyspe3ZhciB3PXRbaF07LTEhPT1bIm51bWJlciIsInN0cmluZyJdLmluZGV4T2YodHlwZW9mIHcpPyh3PVN0cmluZyh3KSx5LnB1c2goe3R5cGU6ImJ5bmFtZSIsbmFtZTp3LGRhdGE6dih7bmFtZTp3fSl9KSk6by5pc1BsYWluT2JqZWN0KHcpJiZ5LnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTp2KG8uZXh0ZW5kRmxhdCh7fSx3KSl9KX1mb3IoaD0wO2g8eS5sZW5ndGg7aCsrKWlmKCJieW5hbWUiPT09KGc9eVtoXSkudHlwZSYmIW4uX2ZyYW1lSGFzaFtnLmRhdGEubmFtZV0pcmV0dXJuIG8ud2FybignYW5pbWF0ZSBmYWlsdXJlOiBmcmFtZSBub3QgZm91bmQ6ICInK2cuZGF0YS5uYW1lKyciJyksdm9pZCB1KCk7LTEhPT1bIm5leHQiLCJpbW1lZGlhdGUiXS5pbmRleE9mKHIubW9kZSkmJmZ1bmN0aW9uKCl7aWYoMCE9PW4uX2ZyYW1lUXVldWUubGVuZ3RoKXtmb3IoO24uX2ZyYW1lUXVldWUubGVuZ3RoOyl7dmFyIHQ9bi5fZnJhbWVRdWV1ZS5wb3AoKTt0Lm9uSW50ZXJydXB0JiZ0Lm9uSW50ZXJydXB0KCl9ZS5lbWl0KCJwbG90bHlfYW5pbWF0aW9uaW50ZXJydXB0ZWQiLFtdKX19KCksInJldmVyc2UiPT09ci5kaXJlY3Rpb24mJnkucmV2ZXJzZSgpO3ZhciBUPWUuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZTtpZihUJiZyLmZyb21jdXJyZW50KXt2YXIgTT0tMTtmb3IoaD0wO2g8eS5sZW5ndGg7aCsrKWlmKCJieW5hbWUiPT09KGc9eVtoXSkudHlwZSYmZy5uYW1lPT09VCl7TT1oO2JyZWFrfWlmKE0+MCYmTTx5Lmxlbmd0aC0xKXt2YXIgaz1bXTtmb3IoaD0wO2g8eS5sZW5ndGg7aCsrKWc9eVtoXSwoImJ5bmFtZSIhPT15W2hdLnR5cGV8fGg+TSkmJmsucHVzaChnKTt5PWt9fXkubGVuZ3RoPjA/ZnVuY3Rpb24odCl7aWYoMCE9PXQubGVuZ3RoKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG87bz0iYnluYW1lIj09PXRbYV0udHlwZT9mLmNvbXB1dGVGcmFtZShlLHRbYV0ubmFtZSk6dFthXS5kYXRhO3ZhciBkPXMoYSksaD1sKGEpO2guZHVyYXRpb249TWF0aC5taW4oaC5kdXJhdGlvbixkLmR1cmF0aW9uKTt2YXIgZz17ZnJhbWU6byxuYW1lOnRbYV0ubmFtZSxmcmFtZU9wdHM6ZCx0cmFuc2l0aW9uT3B0czpofTthPT09dC5sZW5ndGgtMSYmKGcub25Db21wbGV0ZT1jKGksMiksZy5vbkludGVycnVwdD11KSxuLl9mcmFtZVF1ZXVlLnB1c2goZyl9ImltbWVkaWF0ZSI9PT1yLm1vZGUmJihuLl9sYXN0RnJhbWVBdD0tMS8wKSxuLl9hbmltYXRpb25SYWZ8fHAoKX19KHkpOihlLmVtaXQoInBsb3RseV9hbmltYXRlZCIpLGkoKSl9KSl9LHIuYWRkRnJhbWVzPWZ1bmN0aW9uKGUsdCxyKXtpZihlPW8uZ2V0R3JhcGhEaXYoZSksbnVsbD09dClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7aWYoIW8uaXNQbG90RGl2KGUpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK2UrIi4gSXQncyBsaWtlbHkgdGhhdCB5b3UndmUgZmFpbGVkIHRvIGNyZWF0ZSBhIHBsb3QgYmVmb3JlIGFkZGluZyBmcmFtZXMuIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL3Bsb3RseS5jb20vamF2YXNjcmlwdC9hbmltYXRpb25zLyIpO3ZhciBuLGEsaSxsLHM9ZS5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyx1PWUuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJhZGRGcmFtZXMgZmFpbHVyZTogZnJhbWVMaXN0IG11c3QgYmUgYW4gQXJyYXkgb2YgZnJhbWUgZGVmaW5pdGlvbnMiK3QpO3ZhciBkPXMubGVuZ3RoKzIqdC5sZW5ndGgscD1bXSxoPXt9O2ZvcihuPXQubGVuZ3RoLTE7bj49MDtuLS0paWYoby5pc1BsYWluT2JqZWN0KHRbbl0pKXt2YXIgZz10W25dLm5hbWUsbT0odVtnXXx8aFtnXXx8e30pLm5hbWUsdj10W25dLm5hbWUseT11W21dfHxoW21dO20mJnYmJiJudW1iZXIiPT10eXBlb2YgdiYmeSYmazw1JiYoaysrLG8ud2FybignYWRkRnJhbWVzOiBvdmVyd3JpdGluZyBmcmFtZSAiJysodVttXXx8aFttXSkubmFtZSsnIiB3aXRoIGEgZnJhbWUgd2hvc2UgbmFtZSBvZiB0eXBlICJudW1iZXIiIGFsc28gZXF1YXRlcyB0byAiJyttKyciLiBUaGlzIGlzIHZhbGlkIGJ1dCBtYXkgcG90ZW50aWFsbHkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIHNpbmNlIGFsbCBwbG90bHkuanMgZnJhbWUgbmFtZXMgYXJlIHN0b3JlZCBpbnRlcm5hbGx5IGFzIHN0cmluZ3MuJyksNT09PWsmJm8ud2FybigiYWRkRnJhbWVzOiBUaGlzIEFQSSBjYWxsIGhhcyB5aWVsZGVkIHRvbyBtYW55IG9mIHRoZXNlIHdhcm5pbmdzLiBGb3IgdGhlIHJlc3Qgb2YgdGhpcyBjYWxsLCBmdXJ0aGVyIHdhcm5pbmdzIGFib3V0IG51bWVyaWMgZnJhbWUgbmFtZXMgd2lsbCBiZSBzdXBwcmVzc2VkLiIpKSxoW2ddPXtuYW1lOmd9LHAucHVzaCh7ZnJhbWU6Zi5zdXBwbHlGcmFtZURlZmF1bHRzKHRbbl0pLGluZGV4OnImJnZvaWQgMCE9PXJbbl0mJm51bGwhPT1yW25dP3Jbbl06ZCtufSl9cC5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLmluZGV4PnQuaW5kZXg/LTE6ZS5pbmRleDx0LmluZGV4PzE6MH0pKTt2YXIgeD1bXSxiPVtdLF89cy5sZW5ndGg7Zm9yKG49cC5sZW5ndGgtMTtuPj0wO24tLSl7aWYoIm51bWJlciI9PXR5cGVvZihhPXBbbl0uZnJhbWUpLm5hbWUmJm8ud2FybigiV2FybmluZzogYWRkRnJhbWVzIGFjY2VwdHMgZnJhbWVzIHdpdGggbnVtZXJpYyBuYW1lcywgYnV0IHRoZSBudW1iZXJzIGFyZWltcGxpY2l0bHkgY2FzdCB0byBzdHJpbmdzIiksIWEubmFtZSlmb3IoO3VbYS5uYW1lPSJmcmFtZSAiK2UuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyKytdOyk7aWYodVthLm5hbWVdKXtmb3IoaT0wO2k8cy5sZW5ndGgmJihzW2ldfHx7fSkubmFtZSE9PWEubmFtZTtpKyspO3gucHVzaCh7dHlwZToicmVwbGFjZSIsaW5kZXg6aSx2YWx1ZTphfSksYi51bnNoaWZ0KHt0eXBlOiJyZXBsYWNlIixpbmRleDppLHZhbHVlOnNbaV19KX1lbHNlIGw9TWF0aC5tYXgoMCxNYXRoLm1pbihwW25dLmluZGV4LF8pKSx4LnB1c2goe3R5cGU6Imluc2VydCIsaW5kZXg6bCx2YWx1ZTphfSksYi51bnNoaWZ0KHt0eXBlOiJkZWxldGUiLGluZGV4Omx9KSxfKyt9dmFyIHc9Zi5tb2RpZnlGcmFtZXMsVD1mLm1vZGlmeUZyYW1lcyxNPVtlLGJdLEE9W2UseF07cmV0dXJuIGMmJmMuYWRkKGUsdyxNLFQsQSksZi5tb2RpZnlGcmFtZXMoZSx4KX0sci5kZWxldGVGcmFtZXM9ZnVuY3Rpb24oZSx0KXtpZihlPW8uZ2V0R3JhcGhEaXYoZSksIW8uaXNQbG90RGl2KGUpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK2UpO3ZhciByLG4sYT1lLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLGk9W10sbD1bXTtpZighdClmb3IodD1bXSxyPTA7cjxhLmxlbmd0aDtyKyspdC5wdXNoKHIpO2ZvcigodD10LnNsaWNlKCkpLnNvcnQoKSxyPXQubGVuZ3RoLTE7cj49MDtyLS0pbj10W3JdLGkucHVzaCh7dHlwZToiZGVsZXRlIixpbmRleDpufSksbC51bnNoaWZ0KHt0eXBlOiJpbnNlcnQiLGluZGV4Om4sdmFsdWU6YVtuXX0pO3ZhciBzPWYubW9kaWZ5RnJhbWVzLHU9Zi5tb2RpZnlGcmFtZXMsZD1bZSxsXSxwPVtlLGldO3JldHVybiBjJiZjLmFkZChlLHMsZCx1LHApLGYubW9kaWZ5RnJhbWVzKGUsaSl9LHIuYWRkVHJhY2VzPWZ1bmN0aW9uIGUodCxuLGEpe3Q9by5nZXRHcmFwaERpdih0KTt2YXIgaSxsLHM9W10sdT1yLmRlbGV0ZVRyYWNlcyxkPWUsZj1bdCxzXSxwPVt0LG5dO2ZvcihmdW5jdGlvbihlLHQscil7dmFyIG4sYTtpZighQXJyYXkuaXNBcnJheShlLmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5LiIpO2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IEVycm9yKCJ0cmFjZXMgbXVzdCBiZSBkZWZpbmVkLiIpO2ZvcihBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pLG49MDtuPHQubGVuZ3RoO24rKylpZigib2JqZWN0IiE9dHlwZW9mKGE9dFtuXSl8fEFycmF5LmlzQXJyYXkoYSl8fG51bGw9PT1hKXRocm93IG5ldyBFcnJvcigiYWxsIHZhbHVlcyBpbiB0cmFjZXMgYXJyYXkgbXVzdCBiZSBub24tYXJyYXkgb2JqZWN0cyIpO2lmKHZvaWQgMD09PXJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksdm9pZCAwIT09ciYmci5sZW5ndGghPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImlmIGluZGljZXMgaXMgc3BlY2lmaWVkLCB0cmFjZXMubGVuZ3RoIG11c3QgZXF1YWwgaW5kaWNlcy5sZW5ndGgiKX0odCxuLGEpLEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksbj1uLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG8uZXh0ZW5kRmxhdCh7fSxlKX0pKSxfLmNsZWFuRGF0YShuKSxpPTA7aTxuLmxlbmd0aDtpKyspdC5kYXRhLnB1c2gobltpXSk7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylzLnB1c2goLW4ubGVuZ3RoK2kpO2lmKHZvaWQgMD09PWEpcmV0dXJuIGw9ci5yZWRyYXcodCksYy5hZGQodCx1LGYsZCxwKSxsO0FycmF5LmlzQXJyYXkoYSl8fChhPVthXSk7dHJ5e1AodCxzLGEpfWNhdGNoKGUpe3Rocm93IHQuZGF0YS5zcGxpY2UodC5kYXRhLmxlbmd0aC1uLmxlbmd0aCxuLmxlbmd0aCksZX1yZXR1cm4gYy5zdGFydFNlcXVlbmNlKHQpLGMuYWRkKHQsdSxmLGQscCksbD1yLm1vdmVUcmFjZXModCxzLGEpLGMuc3RvcFNlcXVlbmNlKHQpLGx9LHIuZGVsZXRlVHJhY2VzPWZ1bmN0aW9uIGUodCxuKXt0PW8uZ2V0R3JhcGhEaXYodCk7dmFyIGEsaSxsPVtdLHM9ci5hZGRUcmFjZXMsdT1lLGQ9W3QsbCxuXSxmPVt0LG5dO2lmKHZvaWQgMD09PW4pdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2Vycy4iKTtmb3IoQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSxPKHQsbiwiaW5kaWNlcyIpLChuPUMobix0LmRhdGEubGVuZ3RoLTEpKS5zb3J0KG8uc29ydGVyRGVzKSxhPTA7YTxuLmxlbmd0aDthKz0xKWk9dC5kYXRhLnNwbGljZShuW2FdLDEpWzBdLGwucHVzaChpKTt2YXIgcD1yLnJlZHJhdyh0KTtyZXR1cm4gYy5hZGQodCxzLGQsdSxmKSxwfSxyLmV4dGVuZFRyYWNlcz1mdW5jdGlvbiBlKHQsbixhLGkpe2Z1bmN0aW9uIGwoZSx0LHIpe3ZhciBuLGE7aWYoby5pc1R5cGVkQXJyYXkoZSkpaWYocjwwKXt2YXIgaT1uZXcgZS5jb25zdHJ1Y3RvcigwKSxsPVIoZSx0KTtyPDA/KG49bCxhPWkpOihuPWksYT1sKX1lbHNlIGlmKG49bmV3IGUuY29uc3RydWN0b3IociksYT1uZXcgZS5jb25zdHJ1Y3RvcihlLmxlbmd0aCt0Lmxlbmd0aC1yKSxyPT09dC5sZW5ndGgpbi5zZXQodCksYS5zZXQoZSk7ZWxzZSBpZihyPHQubGVuZ3RoKXt2YXIgcz10Lmxlbmd0aC1yO24uc2V0KHQuc3ViYXJyYXkocykpLGEuc2V0KGUpLGEuc2V0KHQuc3ViYXJyYXkoMCxzKSxlLmxlbmd0aCl9ZWxzZXt2YXIgYz1yLXQubGVuZ3RoLHU9ZS5sZW5ndGgtYztuLnNldChlLnN1YmFycmF5KHUpKSxuLnNldCh0LGMpLGEuc2V0KGUuc3ViYXJyYXkoMCx1KSl9ZWxzZSBuPWUuY29uY2F0KHQpLGE9cj49MCYmcjxuLmxlbmd0aD9uLnNwbGljZSgwLG4ubGVuZ3RoLXIpOltdO3JldHVybltuLGFdfXZhciBzPUkodD1vLmdldEdyYXBoRGl2KHQpLG4sYSxpLGwpLHU9ci5yZWRyYXcodCksZD1bdCxzLnVwZGF0ZSxhLHMubWF4UG9pbnRzXTtyZXR1cm4gYy5hZGQodCxyLnByZXBlbmRUcmFjZXMsZCxlLGFyZ3VtZW50cyksdX0sci5tb3ZlVHJhY2VzPWZ1bmN0aW9uIGUodCxuLGEpe3ZhciBpLGw9W10scz1bXSx1PWUsZD1lLGY9W3Q9by5nZXRHcmFwaERpdih0KSxhLG5dLHA9W3QsbixhXTtpZihQKHQsbixhKSxuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sdm9pZCAwPT09YSlmb3IoYT1bXSxpPTA7aTxuLmxlbmd0aDtpKyspYS5wdXNoKC1uLmxlbmd0aCtpKTtmb3IoYT1BcnJheS5pc0FycmF5KGEpP2E6W2FdLG49QyhuLHQuZGF0YS5sZW5ndGgtMSksYT1DKGEsdC5kYXRhLmxlbmd0aC0xKSxpPTA7aTx0LmRhdGEubGVuZ3RoO2krKyktMT09PW4uaW5kZXhPZihpKSYmbC5wdXNoKHQuZGF0YVtpXSk7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylzLnB1c2goe25ld0luZGV4OmFbaV0sdHJhY2U6dC5kYXRhW25baV1dfSk7Zm9yKHMuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5uZXdJbmRleC10Lm5ld0luZGV4fSkpLGk9MDtpPHMubGVuZ3RoO2krPTEpbC5zcGxpY2Uoc1tpXS5uZXdJbmRleCwwLHNbaV0udHJhY2UpO3QuZGF0YT1sO3ZhciBoPXIucmVkcmF3KHQpO3JldHVybiBjLmFkZCh0LHUsZixkLHApLGh9LHIucHJlcGVuZFRyYWNlcz1mdW5jdGlvbiBlKHQsbixhLGkpe2Z1bmN0aW9uIGwoZSx0LHIpe3ZhciBuLGE7aWYoby5pc1R5cGVkQXJyYXkoZSkpaWYocjw9MCl7dmFyIGk9bmV3IGUuY29uc3RydWN0b3IoMCksbD1SKHQsZSk7cjwwPyhuPWwsYT1pKToobj1pLGE9bCl9ZWxzZSBpZihuPW5ldyBlLmNvbnN0cnVjdG9yKHIpLGE9bmV3IGUuY29uc3RydWN0b3IoZS5sZW5ndGgrdC5sZW5ndGgtcikscj09PXQubGVuZ3RoKW4uc2V0KHQpLGEuc2V0KGUpO2Vsc2UgaWYocjx0Lmxlbmd0aCl7dmFyIHM9dC5sZW5ndGgtcjtuLnNldCh0LnN1YmFycmF5KDAscykpLGEuc2V0KHQuc3ViYXJyYXkocykpLGEuc2V0KGUscyl9ZWxzZXt2YXIgYz1yLXQubGVuZ3RoO24uc2V0KHQpLG4uc2V0KGUuc3ViYXJyYXkoMCxjKSx0Lmxlbmd0aCksYS5zZXQoZS5zdWJhcnJheShjKSl9ZWxzZSBuPXQuY29uY2F0KGUpLGE9cj49MCYmcjxuLmxlbmd0aD9uLnNwbGljZShyLG4ubGVuZ3RoKTpbXTtyZXR1cm5bbixhXX12YXIgcz1JKHQ9by5nZXRHcmFwaERpdih0KSxuLGEsaSxsKSx1PXIucmVkcmF3KHQpLGQ9W3Qscy51cGRhdGUsYSxzLm1heFBvaW50c107cmV0dXJuIGMuYWRkKHQsci5leHRlbmRUcmFjZXMsZCxlLGFyZ3VtZW50cyksdX0sci5uZXdQbG90PWZ1bmN0aW9uKGUsdCxuLGEpe3JldHVybiBlPW8uZ2V0R3JhcGhEaXYoZSksZi5jbGVhblBsb3QoW10se30sZS5fZnVsbERhdGF8fFtdLGUuX2Z1bGxMYXlvdXR8fHt9KSxmLnB1cmdlKGUpLHIuX2RvUGxvdChlLHQsbixhKX0sci5fZG9QbG90PWZ1bmN0aW9uKGUsdCxhLGkpe3ZhciBsO2lmKGU9by5nZXRHcmFwaERpdihlKSxzLmluaXQoZSksby5pc1BsYWluT2JqZWN0KHQpKXt2YXIgYz10O3Q9Yy5kYXRhLGE9Yy5sYXlvdXQsaT1jLmNvbmZpZyxsPWMuZnJhbWVzfWlmKCExPT09cy50cmlnZ2VySGFuZGxlcihlLCJwbG90bHlfYmVmb3JlcGxvdCIsW3QsYSxpXSkpcmV0dXJuIFByb21pc2UucmVqZWN0KCk7dHx8YXx8by5pc1Bsb3REaXYoZSl8fG8ud2FybigiQ2FsbGluZyBfZG9QbG90IGFzIGlmIHJlZHJhd2luZyBidXQgdGhpcyBjb250YWluZXIgZG9lc24ndCB5ZXQgaGF2ZSBhIHBsb3QuIixlKSxEKGUsaSksYXx8KGE9e30pLG4uc2VsZWN0KGUpLmNsYXNzZWQoImpzLXBsb3RseS1wbG90IiwhMCksaC5tYWtlVGVzdGVyKCksQXJyYXkuaXNBcnJheShlLl9wcm9taXNlcyl8fChlLl9wcm9taXNlcz1bXSk7dmFyIGQ9MD09PShlLmRhdGF8fFtdKS5sZW5ndGgmJkFycmF5LmlzQXJyYXkodCk7QXJyYXkuaXNBcnJheSh0KSYmKF8uY2xlYW5EYXRhKHQpLGQ/ZS5kYXRhPXQ6ZS5kYXRhLnB1c2guYXBwbHkoZS5kYXRhLHQpLGUuZW1wdHk9ITEpLGUubGF5b3V0JiYhZHx8KGUubGF5b3V0PV8uY2xlYW5MYXlvdXQoYSkpLGYuc3VwcGx5RGVmYXVsdHMoZSk7dmFyIGc9ZS5fZnVsbExheW91dCx5PWcuX2hhcygiY2FydGVzaWFuIik7Zy5fcmVwbG90dGluZz0hMCwoZHx8Zy5fc2hvdWxkQ3JlYXRlQmdMYXllcikmJighZnVuY3Rpb24oZSl7dmFyIHQ9bi5zZWxlY3QoZSkscj1lLl9mdWxsTGF5b3V0O2lmKHIuX2NhbGNJbnZlcnNlVHJhbnNmb3JtPWllLHIuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKGUpLHIuX2NvbnRhaW5lcj10LnNlbGVjdEFsbCgiLnBsb3QtY29udGFpbmVyIikuZGF0YShbMF0pLHIuX2NvbnRhaW5lci5lbnRlcigpLmluc2VydCgiZGl2IiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgicGxvdC1jb250YWluZXIiLCEwKS5jbGFzc2VkKCJwbG90bHkiLCEwKSxyLl9wYXBlcmRpdj1yLl9jb250YWluZXIuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9wYXBlcmRpdi5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmNsYXNzZWQoInN2Zy1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLHIuX2dsY29udGFpbmVyPXIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLmdsLWNvbnRhaW5lciIpLmRhdGEoW3t9XSksci5fZ2xjb250YWluZXIuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoImdsLWNvbnRhaW5lciIsITApLHIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLm1haW4tc3ZnIikucmVtb3ZlKCksci5fcGFwZXJkaXYuc2VsZWN0KCIubW9kZWJhci1jb250YWluZXIiKS5yZW1vdmUoKSxyLl9wYXBlcj1yLl9wYXBlcmRpdi5pbnNlcnQoInN2ZyIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksci5fdG9wcGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLHIuX21vZGViYXJkaXY9ci5fcGFwZXJkaXYuYXBwZW5kKCJkaXYiKSxkZWxldGUgci5fbW9kZUJhcixyLl9ob3ZlcnBhcGVyPXIuX3BhcGVyZGl2LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgibWFpbi1zdmciLCEwKSwhci5fdWlkKXt2YXIgYT17fTtuLnNlbGVjdEFsbCgiZGVmcyIpLmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5pZCYmKGFbdGhpcy5pZC5zcGxpdCgiLSIpWzFdXT0xKX0pKSxyLl91aWQ9by5yYW5kc3RyKGEpfXIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuYXR0cih2LnN2Z0F0dHJzKSxyLl9kZWZzPXIuX3BhcGVyLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwiZGVmcy0iK3IuX3VpZCksci5fY2xpcHM9ci5fZGVmcy5hcHBlbmQoImciKS5jbGFzc2VkKCJjbGlwcyIsITApLHIuX3RvcGRlZnM9ci5fdG9wcGFwZXIuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJ0b3BkZWZzLSIrci5fdWlkKSxyLl90b3BjbGlwcz1yLl90b3BkZWZzLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNsaXBzIiwhMCksci5fYmdMYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJiZ2xheWVyIiwhMCksci5fZHJhZ2dlcnM9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZHJhZ2xheWVyIiwhMCk7dmFyIGk9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXItYmVsb3ciLCEwKTtyLl9pbWFnZUxvd2VyTGF5ZXI9aS5hcHBlbmQoImciKS5jbGFzc2VkKCJpbWFnZWxheWVyIiwhMCksci5fc2hhcGVMb3dlckxheWVyPWkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2hhcGVsYXllciIsITApLHIuX2NhcnRlc2lhbmxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNhcnRlc2lhbmxheWVyIiwhMCksci5fcG9sYXJsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2xhcmxheWVyIiwhMCksci5fc21pdGhsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJzbWl0aGxheWVyIiwhMCksci5fdGVybmFyeWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRlcm5hcnlsYXllciIsITApLHIuX2dlb2xheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdlb2xheWVyIiwhMCksci5fZnVubmVsYXJlYWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImZ1bm5lbGFyZWFsYXllciIsITApLHIuX3BpZWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBpZWxheWVyIiwhMCksci5faWNpY2xlbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaWNpY2xlbGF5ZXIiLCEwKSxyLl90cmVlbWFwbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgidHJlZW1hcGxheWVyIiwhMCksci5fc3VuYnVyc3RsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJzdW5idXJzdGxheWVyIiwhMCksci5faW5kaWNhdG9ybGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW5kaWNhdG9ybGF5ZXIiLCEwKSxyLl9nbGltYWdlcz1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJnbGltYWdlcyIsITApO3ZhciBsPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxheWVyLWFib3ZlIiwhMCk7ci5faW1hZ2VVcHBlckxheWVyPWwuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW1hZ2VsYXllciIsITApLHIuX3NoYXBlVXBwZXJMYXllcj1sLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNoYXBlbGF5ZXIiLCEwKSxyLl9pbmZvbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW5mb2xheWVyIiwhMCksci5fbWVudWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoIm1lbnVsYXllciIsITApLHIuX3pvb21sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJ6b29tbGF5ZXIiLCEwKSxyLl9ob3ZlcmxheWVyPXIuX2hvdmVycGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJsYXllciIsITApLHIuX21vZGViYXJkaXYuY2xhc3NlZCgibW9kZWJhci1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJ0b3AiLCIwcHgiKS5zdHlsZSgicmlnaHQiLCIwcHgiKSxlLmVtaXQoInBsb3RseV9mcmFtZXdvcmsiKX0oZSksZy5fc2hvdWxkQ3JlYXRlQmdMYXllciYmZGVsZXRlIGcuX3Nob3VsZENyZWF0ZUJnTGF5ZXIpLGguaW5pdEdyYWRpZW50cyhlKSxoLmluaXRQYXR0ZXJucyhlKSxkJiZwLnNhdmVTaG93U3Bpa2VJbml0aWFsKGUpO3ZhciB4PSFlLmNhbGNkYXRhfHxlLmNhbGNkYXRhLmxlbmd0aCE9PShlLl9mdWxsRGF0YXx8W10pLmxlbmd0aDt4JiZmLmRvQ2FsY2RhdGEoZSk7Zm9yKHZhciBiPTA7YjxlLmNhbGNkYXRhLmxlbmd0aDtiKyspZS5jYWxjZGF0YVtiXVswXS50cmFjZT1lLl9mdWxsRGF0YVtiXTtlLl9jb250ZXh0LnJlc3BvbnNpdmU/ZS5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcnx8KGUuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXI9ZnVuY3Rpb24oKXtvLmlzSGlkZGVuKGUpfHxmLnJlc2l6ZShlKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsZS5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcikpOm8uY2xlYXJSZXNwb25zaXZlKGUpO3ZhciBUPW8uZXh0ZW5kRmxhdCh7fSxnLl9zaXplKSxNPTA7ZnVuY3Rpb24gaygpe2lmKGYuY2xlYXJBdXRvTWFyZ2luSWRzKGUpLHcuZHJhd01hcmdpblB1c2hlcnMoZSkscC5hbGxvd0F1dG9NYXJnaW4oZSksZy5faGFzKCJwaWUiKSlmb3IodmFyIHQ9ZS5fZnVsbERhdGEscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOyJwaWUiPT09bi50eXBlJiZuLmF1dG9tYXJnaW4mJmYuYWxsb3dBdXRvTWFyZ2luKGUsInBpZS4iK24udWlkKyIuYXV0b21hcmdpbiIpfXJldHVybiBmLmRvQXV0b01hcmdpbihlKSxmLnByZXZpb3VzUHJvbWlzZXMoZSl9ZnVuY3Rpb24gTCgpe2UuX3RyYW5zaXRpb25pbmd8fCh3LmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHMoZSksZCYmcC5zYXZlUmFuZ2VJbml0aWFsKGUpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImNhbGNBdXRvcmFuZ2UiKShlKSl9dmFyIFM9W2YucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKGwpcmV0dXJuIHIuYWRkRnJhbWVzKGUsbCl9LGZ1bmN0aW9uIHQoKXtmb3IodmFyIHI9Zy5fYmFzZVBsb3RNb2R1bGVzLG49MDtuPHIubGVuZ3RoO24rKylyW25dLmRyYXdGcmFtZXdvcmsmJnJbbl0uZHJhd0ZyYW1ld29yayhlKTshZy5fZ2xjYW52YXMmJmcuX2hhcygiZ2wiKSYmKGcuX2dsY2FudmFzPWcuX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLmRhdGEoW3trZXk6ImNvbnRleHRMYXllciIsY29udGV4dDohMCxwaWNrOiExfSx7a2V5OiJmb2N1c0xheWVyIixjb250ZXh0OiExLHBpY2s6ITF9LHtrZXk6InBpY2tMYXllciIsY29udGV4dDohMSxwaWNrOiEwfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pKSxnLl9nbGNhbnZhcy5lbnRlcigpLmFwcGVuZCgiY2FudmFzIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbihlKXtyZXR1cm4iZ2wtY2FudmFzIGdsLWNhbnZhcy0iK2Uua2V5LnJlcGxhY2UoIkxheWVyIiwiIil9KSkuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLG92ZXJmbG93OiJ2aXNpYmxlIiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pKTt2YXIgYT1lLl9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW87aWYoZy5fZ2xjYW52YXMpe2cuX2dsY2FudmFzLmF0dHIoIndpZHRoIixnLndpZHRoKmEpLmF0dHIoImhlaWdodCIsZy5oZWlnaHQqYSkuc3R5bGUoIndpZHRoIixnLndpZHRoKyJweCIpLnN0eWxlKCJoZWlnaHQiLGcuaGVpZ2h0KyJweCIpO3ZhciBpPWcuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsO2lmKGkmJihNYXRoLmZsb29yKGcud2lkdGgqYSkhPT1pLl9nbC5kcmF3aW5nQnVmZmVyV2lkdGh8fE1hdGguZmxvb3IoZy5oZWlnaHQqYSkhPT1pLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0KSl7dmFyIGw9IldlYkdMIGNvbnRleHQgYnVmZmVyIGFuZCBjYW52YXMgZGltZW5zaW9ucyBkbyBub3QgbWF0Y2ggZHVlIHRvIGJyb3dzZXIvV2ViR0wgYnVnLiI7aWYoIU0pcmV0dXJuIG8ubG9nKGwrIiBDbGVhcmluZyBncmFwaCBhbmQgcGxvdHRpbmcgYWdhaW4uIiksZi5jbGVhblBsb3QoW10se30sZS5fZnVsbERhdGEsZyksZi5zdXBwbHlEZWZhdWx0cyhlKSxnPWUuX2Z1bGxMYXlvdXQsZi5kb0NhbGNkYXRhKGUpLE0rKyx0KCk7by5lcnJvcihsKX19cmV0dXJuImgiPT09Zy5tb2RlYmFyLm9yaWVudGF0aW9uP2cuX21vZGViYXJkaXYuc3R5bGUoImhlaWdodCIsbnVsbCkuc3R5bGUoIndpZHRoIiwiMTAwJSIpOmcuX21vZGViYXJkaXYuc3R5bGUoIndpZHRoIixudWxsKS5zdHlsZSgiaGVpZ2h0IixnLmhlaWdodCsicHgiKSxmLnByZXZpb3VzUHJvbWlzZXMoZSl9LGssZnVuY3Rpb24oKXtpZihmLmRpZE1hcmdpbkNoYW5nZShULGcuX3NpemUpKXJldHVybiBvLnN5bmNPckFzeW5jKFtrLHcubGF5b3V0U3R5bGVzXSxlKX1dO3kmJlMucHVzaCgoZnVuY3Rpb24oKXtpZih4KXJldHVybiBvLnN5bmNPckFzeW5jKFt1LmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiY2FsY0F1dG9yYW5nZSIpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNhbGNBdXRvcmFuZ2UiKSxMXSxlKTtMKCl9KSksUy5wdXNoKHcubGF5b3V0U3R5bGVzKSx5JiZTLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIHAuZHJhdyhlLGQ/IiI6InJlZHJhdyIpfSksKGZ1bmN0aW9uKGUpe2UuX2Z1bGxMYXlvdXQuX2luc2lkZVRpY2tMYWJlbHNBdXRvcmFuZ2UmJkIoZSxlLl9mdWxsTGF5b3V0Ll9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlKS50aGVuKChmdW5jdGlvbigpe2UuX2Z1bGxMYXlvdXQuX2luc2lkZVRpY2tMYWJlbHNBdXRvcmFuZ2U9dm9pZCAwfSkpfSkpLFMucHVzaCh3LmRyYXdEYXRhLHcuZmluYWxEcmF3LG0sZi5hZGRMaW5rcyxmLnJlaG92ZXIsZi5yZWRyYWcsZi5kb0F1dG9NYXJnaW4sKGZ1bmN0aW9uKGUpe2UuX2Z1bGxMYXlvdXQuX2luc2lkZVRpY2tMYWJlbHNBdXRvcmFuZ2UmJmQmJnAuc2F2ZVJhbmdlSW5pdGlhbChlLCEwKX0pLGYucHJldmlvdXNQcm9taXNlcyk7dmFyIEM9by5zeW5jT3JBc3luYyhTLGUpO3JldHVybiBDJiZDLnRoZW58fChDPVByb21pc2UucmVzb2x2ZSgpKSxDLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIEEoZSksZX0pKX0sci5wdXJnZT1mdW5jdGlvbihlKXt2YXIgdD0oZT1vLmdldEdyYXBoRGl2KGUpKS5fZnVsbExheW91dHx8e30scj1lLl9mdWxsRGF0YXx8W107cmV0dXJuIGYuY2xlYW5QbG90KFtdLHt9LHIsdCksZi5wdXJnZShlKSxzLnB1cmdlKGUpLHQuX2NvbnRhaW5lciYmdC5fY29udGFpbmVyLnJlbW92ZSgpLGRlbGV0ZSBlLl9jb250ZXh0LGV9LHIucmVhY3Q9ZnVuY3Rpb24oZSx0LG4sYSl7dmFyIGkscztlPW8uZ2V0R3JhcGhEaXYoZSksXy5jbGVhclByb21pc2VRdWV1ZShlKTt2YXIgYz1lLl9mdWxsRGF0YSxwPWUuX2Z1bGxMYXlvdXQ7aWYoby5pc1Bsb3REaXYoZSkmJmMmJnApe2lmKG8uaXNQbGFpbk9iamVjdCh0KSl7dmFyIGg9dDt0PWguZGF0YSxuPWgubGF5b3V0LGE9aC5jb25maWcsaT1oLmZyYW1lc312YXIgZz0hMTtpZihhKXt2YXIgbT1vLmV4dGVuZERlZXAoe30sZS5fY29udGV4dCk7ZS5fY29udGV4dD12b2lkIDAsRChlLGEpLGc9ZnVuY3Rpb24gZSh0LHIpe3ZhciBuO2ZvcihuIGluIHQpaWYoIl8iIT09bi5jaGFyQXQoMCkpe3ZhciBhPXRbbl0saT1yW25dO2lmKGEhPT1pKWlmKG8uaXNQbGFpbk9iamVjdChhKSYmby5pc1BsYWluT2JqZWN0KGkpKXtpZihlKGEsaSkpcmV0dXJuITB9ZWxzZXtpZighQXJyYXkuaXNBcnJheShhKXx8IUFycmF5LmlzQXJyYXkoaSkpcmV0dXJuITA7aWYoYS5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKylpZihhW2xdIT09aVtsXSl7aWYoIW8uaXNQbGFpbk9iamVjdChhW2xdKXx8IW8uaXNQbGFpbk9iamVjdChpW2xdKSlyZXR1cm4hMDtpZihlKGFbbF0saVtsXSkpcmV0dXJuITB9fX19KG0sZS5fY29udGV4dCl9ZS5kYXRhPXR8fFtdLF8uY2xlYW5EYXRhKGUuZGF0YSksZS5sYXlvdXQ9bnx8e30sXy5jbGVhbkxheW91dChlLmxheW91dCksZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaSxzLGMsdSxkLGYscCxoLGcsbT1uLl9wcmVHVUksdj1bXSx5PXt9LHg9e307Zm9yKGEgaW4gbSl7aWYodT0kKGEsUSkpe2lmKGg9dS5oZWFkLGc9dS50YWlsLGk9dS5hdHRyfHxoKyIudWlyZXZpc2lvbiIsKGM9KHM9bChuLGkpLmdldCgpKSYmZWUoaSx0KSkmJmM9PT1zKXtpZihudWxsPT09KGQ9bVthXSkmJihkPXZvaWQgMCksbmUocD0oZj1sKHQsYSkpLmdldCgpLGQpKXt2b2lkIDA9PT1wJiYiYXV0b3JhbmdlIj09PWcmJnYucHVzaChoKSxmLnNldChOKGwobixhKS5nZXQoKSkpO2NvbnRpbnVlfWlmKCJhdXRvcmFuZ2UiPT09Z3x8InJhbmdlWyI9PT1nLnN1YnN0cigwLDYpKXt2YXIgYj1tW2grIi5yYW5nZVswXSJdLF89bVtoKyIucmFuZ2VbMV0iXSx3PW1baCsiLmF1dG9yYW5nZSJdO2lmKHd8fG51bGw9PT13JiZudWxsPT09YiYmbnVsbD09PV8pe2lmKCEoaCBpbiB5KSl7dmFyIFQ9bCh0LGgpLmdldCgpO3lbaF09VCYmKFQuYXV0b3JhbmdlfHwhMSE9PVQuYXV0b3JhbmdlJiYoIVQucmFuZ2V8fDIhPT1ULnJhbmdlLmxlbmd0aCkpfWlmKHlbaF0pe2Yuc2V0KE4obChuLGEpLmdldCgpKSk7Y29udGludWV9fX19fWVsc2Ugby53YXJuKCJ1bnJlY29nbml6ZWQgR1VJIGVkaXQ6ICIrYSk7ZGVsZXRlIG1bYV0sdSYmInJhbmdlWyI9PT11LnRhaWwuc3Vic3RyKDAsNikmJih4W3UuaGVhZF09MSl9Zm9yKHZhciBNPTA7TTx2Lmxlbmd0aDtNKyspe3ZhciBrPXZbTV07aWYoeFtrXSl7dmFyIEE9bCh0LGspLmdldCgpO0EmJmRlbGV0ZSBBLmF1dG9yYW5nZX19dmFyIEw9bi5fdHJhY2VQcmVHVUk7Zm9yKHZhciBTIGluIEwpe3ZhciBELEM9TFtTXSxPPW51bGw7Zm9yKGEgaW4gQyl7aWYoIU8pe3ZhciBQPXRlKFMscik7aWYoUDwwKXtkZWxldGUgTFtTXTticmVha312YXIgST1yZShTLGUsKEQ9cltQXS5fZnVsbElucHV0KS5pbmRleCk7aWYoSTwwKXtkZWxldGUgTFtTXTticmVha31PPWVbSV19aWYodT0kKGEsSykpe2lmKHUuYXR0cj9jPShzPWwobix1LmF0dHIpLmdldCgpKSYmZWUodS5hdHRyLHQpOihzPUQudWlyZXZpc2lvbix2b2lkIDA9PT0oYz1PLnVpcmV2aXNpb24pJiYoYz10LnVpcmV2aXNpb24pKSxjJiZjPT09cyYmKG51bGw9PT0oZD1DW2FdKSYmKGQ9dm9pZCAwKSxuZShwPShmPWwoTyxhKSkuZ2V0KCksZCkpKXtmLnNldChOKGwoRCxhKS5nZXQoKSkpO2NvbnRpbnVlfX1lbHNlIG8ud2FybigidW5yZWNvZ25pemVkIEdVSSBlZGl0OiAiK2ErIiBpbiB0cmFjZSB1aWQgIitTKTtkZWxldGUgQ1thXX19fShlLmRhdGEsZS5sYXlvdXQsYyxwKSxmLnN1cHBseURlZmF1bHRzKGUse3NraXBVcGRhdGVDYWxjOiEwfSk7dmFyIHY9ZS5fZnVsbERhdGEseT1lLl9mdWxsTGF5b3V0LHg9dm9pZCAwPT09eS5kYXRhcmV2aXNpb24sYj15LnRyYW5zaXRpb24sTT1mdW5jdGlvbihlLHQscixuLGEpe3ZhciBpPVQubGF5b3V0RmxhZ3MoKTtmdW5jdGlvbiBvKGUpe3JldHVybiBkLmdldExheW91dFZhbE9iamVjdChyLGUpfWkuYXJyYXlzPXt9LGkucmFuZ2VzQWx0ZXJlZD17fSxpLm5DaGFuZ2VzPTAsaS5uQ2hhbmdlc0FuaW09MCxhZSh0LHIsW10se2dldFZhbE9iamVjdDpvLGZsYWdzOmksaW1tdXRhYmxlOm4sdHJhbnNpdGlvbjphLGdkOmV9KSwoaS5wbG90fHxpLmNhbGMpJiYoaS5sYXlvdXRSZXBsb3Q9ITApO2EmJmkubkNoYW5nZXMmJmkubkNoYW5nZXNBbmltJiYoaS5hbmltPWkubkNoYW5nZXM9PT1pLm5DaGFuZ2VzQW5pbT8iYWxsIjoic29tZSIpO3JldHVybiBpfShlLHAseSx4LGIpLGs9TS5uZXdEYXRhUmV2aXNpb24sTD1mdW5jdGlvbihlLHQscixuLGEsaSl7dmFyIG89dC5sZW5ndGg9PT1yLmxlbmd0aDtpZighYSYmIW8pcmV0dXJue2Z1bGxSZXBsb3Q6ITAsY2FsYzohMH07dmFyIGwscyxjPVQudHJhY2VGbGFncygpO2MuYXJyYXlzPXt9LGMubkNoYW5nZXM9MCxjLm5DaGFuZ2VzQW5pbT0wO3ZhciB1PXtnZXRWYWxPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9ZC5nZXRUcmFjZVZhbE9iamVjdChzLGUpO3JldHVybiFzLl9tb2R1bGUuYW5pbWF0YWJsZSYmdC5hbmltJiYodC5hbmltPSExKSx0fSxmbGFnczpjLGltbXV0YWJsZTpuLHRyYW5zaXRpb246YSxuZXdEYXRhUmV2aXNpb246aSxnZDplfSxwPXt9O2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspaWYocltsXSl7aWYocz1yW2xdLl9mdWxsSW5wdXQsZi5oYXNNYWtlc0RhdGFUcmFuc2Zvcm0ocykmJihzPXJbbF0pLHBbcy51aWRdKWNvbnRpbnVlO3Bbcy51aWRdPTEsYWUodFtsXS5fZnVsbElucHV0LHMsW10sdSl9KGMuY2FsY3x8Yy5wbG90KSYmKGMuZnVsbFJlcGxvdD0hMCk7YSYmYy5uQ2hhbmdlcyYmYy5uQ2hhbmdlc0FuaW0mJihjLmFuaW09Yy5uQ2hhbmdlcz09PWMubkNoYW5nZXNBbmltJiZvPyJhbGwiOiJzb21lIik7cmV0dXJuIGN9KGUsYyx2LHgsYixrKTtpZihXKGUpJiYoTS5sYXlvdXRSZXBsb3Q9ITApLEwuY2FsY3x8TS5jYWxjKXtlLmNhbGNkYXRhPXZvaWQgMDtmb3IodmFyIFM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoeSksQz0wO0M8Uy5sZW5ndGg7QysrKXt2YXIgTz1TW0NdLFA9Ty5zdWJzdHJpbmcoMCw1KTtpZigieGF4aXMiPT09UHx8InlheGlzIj09PVApe3ZhciBJPXlbT10uX2VtcHR5Q2F0ZWdvcmllcztJJiZJKCl9fX1lbHNlIGYuc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjKGUuY2FsY2RhdGEsdik7dmFyIFI9W107aWYoaSYmKGUuX3RyYW5zaXRpb25EYXRhPXt9LGYuY3JlYXRlVHJhbnNpdGlvbkRhdGEoZSksUi5wdXNoKChmdW5jdGlvbigpe3JldHVybiByLmFkZEZyYW1lcyhlLGkpfSkpKSx5LnRyYW5zaXRpb24mJiFnJiYoTC5hbmltfHxNLmFuaW0pKU0udGlja3MmJlIucHVzaCh3LmRvVGlja3NSZWxheW91dCksZi5kb0NhbGNkYXRhKGUpLHcuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyhlKSxSLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIGYudHJhbnNpdGlvbkZyb21SZWFjdChlLEwsTSxwKX0pKTtlbHNlIGlmKEwuZnVsbFJlcGxvdHx8TS5sYXlvdXRSZXBsb3R8fGcpZS5fZnVsbExheW91dC5fc2tpcERlZmF1bHRzPSEwLFIucHVzaChyLl9kb1Bsb3QpO2Vsc2V7Zm9yKHZhciB6IGluIE0uYXJyYXlzKXt2YXIgRj1NLmFycmF5c1t6XTtpZihGLmxlbmd0aCl7dmFyIEU9dS5nZXRDb21wb25lbnRNZXRob2QoeiwiZHJhd09uZSIpO2lmKEUhPT1vLm5vb3ApZm9yKHZhciBqPTA7ajxGLmxlbmd0aDtqKyspRShlLEZbal0pO2Vsc2V7dmFyIEg9dS5nZXRDb21wb25lbnRNZXRob2QoeiwiZHJhdyIpO2lmKEg9PT1vLm5vb3ApdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZHJhdyBjb21wb25lbnRzOiAiK3opO0goZSl9fX1SLnB1c2goZi5wcmV2aW91c1Byb21pc2VzKSxMLnN0eWxlJiZSLnB1c2gody5kb1RyYWNlU3R5bGUpLChMLmNvbG9yYmFyc3x8TS5jb2xvcmJhcnMpJiZSLnB1c2gody5kb0NvbG9yQmFycyksTS5sZWdlbmQmJlIucHVzaCh3LmRvTGVnZW5kKSxNLmxheW91dHN0eWxlJiZSLnB1c2gody5sYXlvdXRTdHlsZXMpLE0uYXhyYW5nZSYmVihSKSxNLnRpY2tzJiZSLnB1c2gody5kb1RpY2tzUmVsYXlvdXQpLE0ubW9kZWJhciYmUi5wdXNoKHcuZG9Nb2RlQmFyKSxNLmNhbWVyYSYmUi5wdXNoKHcuZG9DYW1lcmEpLFIucHVzaChBKX1SLnB1c2goZi5yZWhvdmVyLGYucmVkcmFnKSwocz1vLnN5bmNPckFzeW5jKFIsZSkpJiZzLnRoZW58fChzPVByb21pc2UucmVzb2x2ZShlKSl9ZWxzZSBzPXIubmV3UGxvdChlLHQsbixhKTtyZXR1cm4gcy50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLmVtaXQoInBsb3RseV9yZWFjdCIse2RhdGE6dCxsYXlvdXQ6bn0pLGV9KSl9LHIucmVkcmF3PWZ1bmN0aW9uKGUpe2lmKGU9by5nZXRHcmFwaERpdihlKSwhby5pc1Bsb3REaXYoZSkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrZSk7cmV0dXJuIF8uY2xlYW5EYXRhKGUuZGF0YSksXy5jbGVhbkxheW91dChlLmxheW91dCksZS5jYWxjZGF0YT12b2lkIDAsci5fZG9QbG90KGUpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZW1pdCgicGxvdGx5X3JlZHJhdyIpLGV9KSl9LHIucmVsYXlvdXQ9QixyLnJlc3R5bGU9eixyLnNldFBsb3RDb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uZXh0ZW5kRmxhdCh4LGUpfSxyLnVwZGF0ZT1YLHIuX2d1aVJlbGF5b3V0PUooQiksci5fZ3VpUmVzdHlsZT1KKHopLHIuX2d1aVVwZGF0ZT1KKFgpLHIuX3N0b3JlRGlyZWN0R1VJRWRpdD1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuIGluIHIpe0UobixsKGUsbikuZ2V0KCkscltuXSx0KX19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjEwMiwiLi4vY29tcG9uZW50cy9kcmF3aW5nIjoxMjQsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjoyMTMsIi4uL2xpYiI6MjMyLCIuLi9saWIvZXZlbnRzIjoyMjUsIi4uL2xpYi9xdWV1ZSI6MjQ3LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Mjc5LCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjoyODYsIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCI6Mjg5LCIuLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0IjozMDAsIi4uL3Bsb3RzL3Bsb3RzIjozMTYsIi4uL3JlZ2lzdHJ5IjozMTgsIi4vZWRpdF90eXBlcyI6MjYxLCIuL2hlbHBlcnMiOjI2MiwiLi9tYW5hZ2VfYXJyYXlzIjoyNjQsIi4vcGxvdF9jb25maWciOjI2NiwiLi9wbG90X3NjaGVtYSI6MjY3LCIuL3N1YnJvdXRpbmVzIjoyNjksIkBwbG90bHkvZDMiOjExLCJmYXN0LWlzbnVtZXJpYyI6MTcsImhhcy1ob3ZlciI6NDh9XSwyNjY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49e3N0YXRpY1Bsb3Q6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHBsb3RseVNlcnZlclVSTDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxlZGl0YWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZWRpdHM6e2Fubm90YXRpb25Qb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYW5ub3RhdGlvblRhaWw6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGFubm90YXRpb25UZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxheGlzVGl0bGVUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxjb2xvcmJhclBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxjb2xvcmJhclRpdGxlVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGVnZW5kUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxlZ2VuZFRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHNoYXBlUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHRpdGxlVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX19LGF1dG9zaXphYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxyZXNwb25zaXZlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxmaWxsRnJhbWU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZyYW1lTWFyZ2luczp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjAsbWF4Oi41fSxzY3JvbGxab29tOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJjYXJ0ZXNpYW4iLCJnbDNkIiwiZ2VvIiwibWFwYm94Il0sZXh0cmFzOlshMCwhMV0sZGZsdDoiZ2wzZCtnZW8rbWFwYm94In0sZG91YmxlQ2xpY2s6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITEsInJlc2V0IiwiYXV0b3NpemUiLCJyZXNldCthdXRvc2l6ZSJdLGRmbHQ6InJlc2V0K2F1dG9zaXplIn0sZG91YmxlQ2xpY2tEZWxheTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjMwMCxtaW46MH0sc2hvd0F4aXNEcmFnSGFuZGxlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd0F4aXNSYW5nZUVudHJ5Qm94ZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dUaXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93TGluazp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGlua1RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiRWRpdCBjaGFydCIsbm9CbGFuazohMH0sc2VuZERhdGE6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dTb3VyY2VzOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGRpc3BsYXlNb2RlQmFyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJob3ZlciIsITAsITFdLGRmbHQ6ImhvdmVyIn0sc2hvd1NlbmRUb0Nsb3VkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzaG93RWRpdEluQ2hhcnRTdHVkaW86e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG1vZGVCYXJCdXR0b25zVG9SZW1vdmU6e3ZhbFR5cGU6ImFueSIsZGZsdDpbXX0sbW9kZUJhckJ1dHRvbnNUb0FkZDp7dmFsVHlwZToiYW55IixkZmx0OltdfSxtb2RlQmFyQnV0dG9uczp7dmFsVHlwZToiYW55IixkZmx0OiExfSx0b0ltYWdlQnV0dG9uT3B0aW9uczp7dmFsVHlwZToiYW55IixkZmx0Ont9fSxkaXNwbGF5bG9nbzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sd2F0ZXJtYXJrOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxwbG90R2xQaXhlbFJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MixtaW46MSxtYXg6NH0sc2V0QmFja2dyb3VuZDp7dmFsVHlwZToiYW55IixkZmx0OiJ0cmFuc3BhcmVudCJ9LHRvcG9qc29uVVJMOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsZGZsdDoiaHR0cHM6Ly9jZG4ucGxvdC5seS8ifSxtYXBib3hBY2Nlc3NUb2tlbjp7dmFsVHlwZToic3RyaW5nIixkZmx0Om51bGx9LGxvZ2dpbmc6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDoyLGRmbHQ6MX0sbm90aWZ5T25Mb2dnaW5nOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6MixkZmx0OjB9LHF1ZXVlTGVuZ3RoOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LGdsb2JhbFRyYW5zZm9ybXM6e3ZhbFR5cGU6ImFueSIsZGZsdDpbXX0sbG9jYWxlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6ImVuLVVTIn0sbG9jYWxlczp7dmFsVHlwZToiYW55IixkZmx0Ont9fX0sYT17fTshZnVuY3Rpb24gZSh0LHIpe2Zvcih2YXIgbiBpbiB0KXt2YXIgYT10W25dO2EudmFsVHlwZT9yW25dPWEuZGZsdDoocltuXXx8KHJbbl09e30pLGUoYSxyW25dKSl9fShuLGEpLHQuZXhwb3J0cz17Y29uZmlnQXR0cmlidXRlczpuLGRmbHRDb25maWc6YX19LHt9XSwyNjc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vcmVnaXN0cnkiKSxhPWUoIi4uL2xpYiIpLGk9ZSgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89ZSgiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPWUoIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXMiKSxzPWUoIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksYz1lKCIuL3Bsb3RfY29uZmlnIikuY29uZmlnQXR0cmlidXRlcyx1PWUoIi4vZWRpdF90eXBlcyIpLGQ9YS5leHRlbmREZWVwQWxsLGY9YS5pc1BsYWluT2JqZWN0LHA9YS5pc0FycmF5T3JUeXBlZEFycmF5LGg9YS5uZXN0ZWRQcm9wZXJ0eSxnPWEudmFsT2JqZWN0TWV0YSxtPVsiX2lzU3VicGxvdE9iaiIsIl9pc0xpbmtlZFRvQXJyYXkiLCJfYXJyYXlBdHRyUmVnZXhwcyIsIl9kZXByZWNhdGVkIl07ZnVuY3Rpb24gdihlLHQscil7aWYoIWUpcmV0dXJuITE7aWYoZS5faXNMaW5rZWRUb0FycmF5KWlmKHkodFtyXSkpcisrO2Vsc2UgaWYocjx0Lmxlbmd0aClyZXR1cm4hMTtmb3IoO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1lW3Rbcl1dO2lmKCFmKG4pKWJyZWFrO2lmKGU9bixyPT09dC5sZW5ndGgtMSlicmVhaztpZihlLl9pc0xpbmtlZFRvQXJyYXkpe2lmKCF5KHRbKytyXSkpcmV0dXJuITF9ZWxzZSBpZigiaW5mb19hcnJheSI9PT1lLnZhbFR5cGUpe3ZhciBhPXRbKytyXTtpZigheShhKSlyZXR1cm4hMTt2YXIgaT1lLml0ZW1zO2lmKEFycmF5LmlzQXJyYXkoaSkpe2lmKGE+PWkubGVuZ3RoKXJldHVybiExO2lmKDI9PT1lLmRpbWVuc2lvbnMpe2lmKHIrKyx0Lmxlbmd0aD09PXIpcmV0dXJuIGU7dmFyIG89dFtyXTtpZigheShvKSlyZXR1cm4hMTtlPWlbYV1bb119ZWxzZSBlPWlbYV19ZWxzZSBlPWl9fXJldHVybiBlfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGU9PT1NYXRoLnJvdW5kKGUpJiZlPj0wfWZ1bmN0aW9uIHgoKXt2YXIgZSx0LHI9e307Zm9yKGUgaW4gZChyLG8pLG4uc3VicGxvdHNSZWdpc3RyeSl7aWYoKHQ9bi5zdWJwbG90c1JlZ2lzdHJ5W2VdKS5sYXlvdXRBdHRyaWJ1dGVzKWlmKEFycmF5LmlzQXJyYXkodC5hdHRyKSlmb3IodmFyIGE9MDthPHQuYXR0ci5sZW5ndGg7YSsrKXcocix0LHQuYXR0clthXSk7ZWxzZSB3KHIsdCwic3VicGxvdCI9PT10LmF0dHI/dC5uYW1lOnQuYXR0cil9Zm9yKGUgaW4gbi5jb21wb25lbnRzUmVnaXN0cnkpe3ZhciBpPSh0PW4uY29tcG9uZW50c1JlZ2lzdHJ5W2VdKS5zY2hlbWE7aWYoaSYmKGkuc3VicGxvdHN8fGkubGF5b3V0KSl7dmFyIGw9aS5zdWJwbG90cztpZihsJiZsLnhheGlzJiYhbC55YXhpcylmb3IodmFyIHMgaW4gbC54YXhpcylkZWxldGUgci55YXhpc1tzXX1lbHNlImNvbG9yc2NhbGUiPT09dC5uYW1lP2Qocix0LmxheW91dEF0dHJpYnV0ZXMpOnQubGF5b3V0QXR0cmlidXRlcyYmVChyLHQubGF5b3V0QXR0cmlidXRlcyx0Lm5hbWUpfXJldHVybntsYXlvdXRBdHRyaWJ1dGVzOl8ocil9fWZ1bmN0aW9uIGIoKXt2YXIgZT17ZnJhbWVzOmQoe30sbCl9O3JldHVybiBfKGUpLGUuZnJhbWVzfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3IuY3Jhd2woZSwoZnVuY3Rpb24oZSx0LG4pe3IuaXNWYWxPYmplY3QoZSk/ITAhPT1lLmFycmF5T2smJiJkYXRhX2FycmF5IiE9PWUudmFsVHlwZXx8KG5bdCsic3JjIl09e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifSk6ZihlKSYmKGUucm9sZT0ib2JqZWN0Iil9KSl9KGUpLGZ1bmN0aW9uKGUpe3IuY3Jhd2woZSwoZnVuY3Rpb24oZSx0LHIpe2lmKGUpe3ZhciBuPWUuX2lzTGlua2VkVG9BcnJheTtuJiYoZGVsZXRlIGUuX2lzTGlua2VkVG9BcnJheSxyW3RdPXtpdGVtczp7fX0sclt0XS5pdGVtc1tuXT1lLHJbdF0ucm9sZT0ib2JqZWN0Iil9fSkpfShlKSxmdW5jdGlvbihlKXshZnVuY3Rpb24gZSh0KXtmb3IodmFyIHIgaW4gdClpZihmKHRbcl0pKWUodFtyXSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHRbcl0pKWZvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7bisrKWUodFtyXVtuXSk7ZWxzZSB0W3JdaW5zdGFuY2VvZiBSZWdFeHAmJih0W3JdPXRbcl0udG9TdHJpbmcoKSl9KGUpfShlKSxlfWZ1bmN0aW9uIHcoZSx0LHIpe3ZhciBuPWgoZSxyKSxhPWQoe30sdC5sYXlvdXRBdHRyaWJ1dGVzKTthLl9pc1N1YnBsb3RPYmo9ITAsbi5zZXQoYSl9ZnVuY3Rpb24gVChlLHQscil7dmFyIG49aChlLHIpO24uc2V0KGQobi5nZXQoKXx8e30sdCkpfXIuSVNfU1VCUExPVF9PQko9Il9pc1N1YnBsb3RPYmoiLHIuSVNfTElOS0VEX1RPX0FSUkFZPSJfaXNMaW5rZWRUb0FycmF5IixyLkRFUFJFQ0FURUQ9Il9kZXByZWNhdGVkIixyLlVOREVSU0NPUkVfQVRUUlM9bSxyLmdldD1mdW5jdGlvbigpe3ZhciBlPXt9O24uYWxsVHlwZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT1mdW5jdGlvbihlKXt2YXIgdCxhO3Q9bi5tb2R1bGVzW2VdLl9tb2R1bGUsYT10LmJhc2VQbG90TW9kdWxlO3ZhciBvPXt0eXBlOm51bGx9LGw9ZCh7fSxpKSxzPWQoe30sdC5hdHRyaWJ1dGVzKTtyLmNyYXdsKHMsKGZ1bmN0aW9uKGUsdCxyLG4sYSl7aChsLGEpLnNldCh2b2lkIDApLHZvaWQgMD09PWUmJmgocyxhKS5zZXQodm9pZCAwKX0pKSxkKG8sbCksbi50cmFjZUlzKGUsIm5vT3BhY2l0eSIpJiZkZWxldGUgby5vcGFjaXR5O24udHJhY2VJcyhlLCJzaG93TGVnZW5kIil8fChkZWxldGUgby5zaG93bGVnZW5kLGRlbGV0ZSBvLmxlZ2VuZGdyb3VwKTtuLnRyYWNlSXMoZSwibm9Ib3ZlciIpJiYoZGVsZXRlIG8uaG92ZXJpbmZvLGRlbGV0ZSBvLmhvdmVybGFiZWwpO3Quc2VsZWN0UG9pbnRzfHxkZWxldGUgby5zZWxlY3RlZHBvaW50cztkKG8scyksYS5hdHRyaWJ1dGVzJiZkKG8sYS5hdHRyaWJ1dGVzKTtvLnR5cGU9ZTt2YXIgYz17bWV0YTp0Lm1ldGF8fHt9LGNhdGVnb3JpZXM6dC5jYXRlZ29yaWVzfHx7fSxhbmltYXRhYmxlOkJvb2xlYW4odC5hbmltYXRhYmxlKSx0eXBlOmUsYXR0cmlidXRlczpfKG8pfTtpZih0LmxheW91dEF0dHJpYnV0ZXMpe3ZhciB1PXt9O2QodSx0LmxheW91dEF0dHJpYnV0ZXMpLGMubGF5b3V0QXR0cmlidXRlcz1fKHUpfXQuYW5pbWF0YWJsZXx8ci5jcmF3bChjLChmdW5jdGlvbihlKXtyLmlzVmFsT2JqZWN0KGUpJiYiYW5pbSJpbiBlJiZkZWxldGUgZS5hbmltfSkpO3JldHVybiBjfSh0KX0pKTt2YXIgdD17fTtyZXR1cm4gT2JqZWN0LmtleXMobi50cmFuc2Zvcm1zUmVnaXN0cnkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24oZSl7dmFyIHQ9bi50cmFuc2Zvcm1zUmVnaXN0cnlbZV0scj1kKHt9LHQuYXR0cmlidXRlcyk7cmV0dXJuIE9iamVjdC5rZXlzKG4uY29tcG9uZW50c1JlZ2lzdHJ5KS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgYT1uLmNvbXBvbmVudHNSZWdpc3RyeVt0XTthLnNjaGVtYSYmYS5zY2hlbWEudHJhbnNmb3JtcyYmYS5zY2hlbWEudHJhbnNmb3Jtc1tlXSYmT2JqZWN0LmtleXMoYS5zY2hlbWEudHJhbnNmb3Jtc1tlXSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7VChyLGEuc2NoZW1hLnRyYW5zZm9ybXNbZV1bdF0sdCl9KSl9KSkse2F0dHJpYnV0ZXM6XyhyKX19KGUpfSkpLHtkZWZzOnt2YWxPYmplY3RzOmcsbWV0YUtleXM6bS5jb25jYXQoWyJkZXNjcmlwdGlvbiIsInJvbGUiLCJlZGl0VHlwZSIsImltcGxpZWRFZGl0cyJdKSxlZGl0VHlwZTp7dHJhY2VzOnUudHJhY2VzLGxheW91dDp1LmxheW91dH0saW1wbGllZEVkaXRzOnt9fSx0cmFjZXM6ZSxsYXlvdXQ6eCgpLHRyYW5zZm9ybXM6dCxmcmFtZXM6YigpLGFuaW1hdGlvbjpfKHMpLGNvbmZpZzpfKGMpfX0sci5jcmF3bD1mdW5jdGlvbihlLHQsbixhKXt2YXIgaT1ufHwwO2E9YXx8IiIsT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIG89ZVtuXTtpZigtMT09PW0uaW5kZXhPZihuKSl7dmFyIGw9KGE/YSsiLiI6IiIpK247dChvLG4sZSxpLGwpLHIuaXNWYWxPYmplY3Qobyl8fGYobykmJiJpbXBsaWVkRWRpdHMiIT09biYmci5jcmF3bChvLHQsaSsxLGwpfX0pKX0sci5pc1ZhbE9iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmdm9pZCAwIT09ZS52YWxUeXBlfSxyLmZpbmRBcnJheUF0dHJpYnV0ZXM9ZnVuY3Rpb24oZSl7dmFyIHQsbixhPVtdLG89W10sbD1bXTtmdW5jdGlvbiBzKGUscixpLHMpe289by5zbGljZSgwLHMpLmNvbmNhdChbcl0pLGw9bC5zbGljZSgwLHMpLmNvbmNhdChbZSYmZS5faXNMaW5rZWRUb0FycmF5XSksZSYmKCJkYXRhX2FycmF5Ij09PWUudmFsVHlwZXx8ITA9PT1lLmFycmF5T2spJiYhKCJjb2xvcmJhciI9PT1vW3MtMV0mJigidGlja3RleHQiPT09cnx8InRpY2t2YWxzIj09PXIpKSYmZnVuY3Rpb24gZSh0LHIsaSl7dmFyIHM9dFtvW3JdXSxjPWkrb1tyXTtpZihyPT09by5sZW5ndGgtMSlwKHMpJiZhLnB1c2gobitjKTtlbHNlIGlmKGxbcl0pe2lmKEFycmF5LmlzQXJyYXkocykpZm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1KyspZihzW3VdKSYmZShzW3VdLHIrMSxjKyJbIit1KyJdLiIpfWVsc2UgZihzKSYmZShzLHIrMSxjKyIuIil9KHQsMCwiIil9dD1lLG49IiIsci5jcmF3bChpLHMpLGUuX21vZHVsZSYmZS5fbW9kdWxlLmF0dHJpYnV0ZXMmJnIuY3Jhd2woZS5fbW9kdWxlLmF0dHJpYnV0ZXMscyk7dmFyIGM9ZS50cmFuc2Zvcm1zO2lmKGMpZm9yKHZhciB1PTA7dTxjLmxlbmd0aDt1Kyspe3ZhciBkPWNbdV0saD1kLl9tb2R1bGU7aCYmKG49InRyYW5zZm9ybXNbIit1KyJdLiIsdD1kLHIuY3Jhd2woaC5hdHRyaWJ1dGVzLHMpKX1yZXR1cm4gYX0sci5nZXRUcmFjZVZhbE9iamVjdD1mdW5jdGlvbihlLHQpe3ZhciByLGEsbz10WzBdLGw9MTtpZigidHJhbnNmb3JtcyI9PT1vKXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIGkudHJhbnNmb3Jtczt2YXIgcz1lLnRyYW5zZm9ybXM7aWYoIUFycmF5LmlzQXJyYXkocyl8fCFzLmxlbmd0aClyZXR1cm4hMTt2YXIgYz10WzFdO2lmKCF5KGMpfHxjPj1zLmxlbmd0aClyZXR1cm4hMTthPShyPShuLnRyYW5zZm9ybXNSZWdpc3RyeVtzW2NdLnR5cGVdfHx7fSkuYXR0cmlidXRlcykmJnJbdFsyXV0sbD0zfWVsc2V7dmFyIHU9ZS5fbW9kdWxlO2lmKHV8fCh1PShuLm1vZHVsZXNbZS50eXBlfHxpLnR5cGUuZGZsdF18fHt9KS5fbW9kdWxlKSwhdSlyZXR1cm4hMTtpZighKGE9KHI9dS5hdHRyaWJ1dGVzKSYmcltvXSkpe3ZhciBkPXUuYmFzZVBsb3RNb2R1bGU7ZCYmZC5hdHRyaWJ1dGVzJiYoYT1kLmF0dHJpYnV0ZXNbb10pfWF8fChhPWlbb10pfXJldHVybiB2KGEsdCxsKX0sci5nZXRMYXlvdXRWYWxPYmplY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdihmdW5jdGlvbihlLHQpe3ZhciByLGEsaSxsLHM9ZS5fYmFzZVBsb3RNb2R1bGVzO2lmKHMpe3ZhciBjO2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspe2lmKChpPXNbcl0pLmF0dHJSZWdleCYmaS5hdHRyUmVnZXgudGVzdCh0KSl7aWYoaS5sYXlvdXRBdHRyT3ZlcnJpZGVzKXJldHVybiBpLmxheW91dEF0dHJPdmVycmlkZXM7IWMmJmkubGF5b3V0QXR0cmlidXRlcyYmKGM9aS5sYXlvdXRBdHRyaWJ1dGVzKX12YXIgdT1pLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzO2lmKHUmJnQgaW4gdSlyZXR1cm4gdVt0XX1pZihjKXJldHVybiBjfXZhciBkPWUuX21vZHVsZXM7aWYoZClmb3Iocj0wO3I8ZC5sZW5ndGg7cisrKWlmKChsPWRbcl0ubGF5b3V0QXR0cmlidXRlcykmJnQgaW4gbClyZXR1cm4gbFt0XTtmb3IoYSBpbiBuLmNvbXBvbmVudHNSZWdpc3RyeSl7aWYoImNvbG9yc2NhbGUiPT09KGk9bi5jb21wb25lbnRzUmVnaXN0cnlbYV0pLm5hbWUmJjA9PT10LmluZGV4T2YoImNvbG9yYXhpcyIpKXJldHVybiBpLmxheW91dEF0dHJpYnV0ZXNbdF07aWYoIWkuc2NoZW1hJiZ0PT09aS5uYW1lKXJldHVybiBpLmxheW91dEF0dHJpYnV0ZXN9cmV0dXJuIHQgaW4gbyYmb1t0XX0oZSx0WzBdKSx0LDEpfX0seyIuLi9saWIiOjIzMiwiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjI3MywiLi4vcGxvdHMvYXR0cmlidXRlcyI6Mjc1LCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzIjozMTEsIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjozMTQsIi4uL3JlZ2lzdHJ5IjozMTgsIi4vZWRpdF90eXBlcyI6MjYxLCIuL3Bsb3RfY29uZmlnIjoyNjZ9XSwyNjg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vbGliIiksYT1lKCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksaT17bmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibm9uZSJ9fTtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiYic3RyaW5nIj09dHlwZW9mIGV9ZnVuY3Rpb24gbChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiJzIiE9PWUuY2hhckF0KHQpJiZuLndhcm4oImJhZCBhcmd1bWVudCB0byBhcnJheURlZmF1bHRLZXk6ICIrZSksZS5zdWJzdHIoMCxlLmxlbmd0aC0xKSsiZGVmYXVsdHMifWkudGVtcGxhdGVpdGVtbmFtZT17dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHIudGVtcGxhdGVkQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5faXNMaW5rZWRUb0FycmF5PWUsdC5uYW1lPWkubmFtZSx0LnRlbXBsYXRlaXRlbW5hbWU9aS50ZW1wbGF0ZWl0ZW1uYW1lLHR9LHIudHJhY2VUZW1wbGF0ZXI9ZnVuY3Rpb24oZSl7dmFyIHQscixpPXt9O2Zvcih0IGluIGUpcj1lW3RdLEFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoJiYoaVt0XT0wKTtyZXR1cm57bmV3VHJhY2U6ZnVuY3Rpb24obyl7dmFyIGw9e3R5cGU6dD1uLmNvZXJjZShvLHt9LGEsInR5cGUiKSxfdGVtcGxhdGU6bnVsbH07aWYodCBpbiBpKXtyPWVbdF07dmFyIHM9aVt0XSVyLmxlbmd0aDtpW3RdKyssbC5fdGVtcGxhdGU9cltzXX1yZXR1cm4gbH19fSxyLm5ld0NvbnRhaW5lcj1mdW5jdGlvbihlLHQscil7dmFyIGE9ZS5fdGVtcGxhdGUsaT1hJiYoYVt0XXx8ciYmYVtyXSk7cmV0dXJuIG4uaXNQbGFpbk9iamVjdChpKXx8KGk9bnVsbCksZVt0XT17X3RlbXBsYXRlOml9fSxyLmFycmF5VGVtcGxhdGVyPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLl90ZW1wbGF0ZSxhPW4mJm5bbCh0KV0saT1uJiZuW3RdO0FycmF5LmlzQXJyYXkoaSkmJmkubGVuZ3RofHwoaT1bXSk7dmFyIHM9e307cmV0dXJue25ld0l0ZW06ZnVuY3Rpb24oZSl7dmFyIHQ9e25hbWU6ZS5uYW1lLF9pbnB1dDplfSxuPXQudGVtcGxhdGVpdGVtbmFtZT1lLnRlbXBsYXRlaXRlbW5hbWU7aWYoIW8obikpcmV0dXJuIHQuX3RlbXBsYXRlPWEsdDtmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXTtpZihjLm5hbWU9PT1uKXJldHVybiBzW25dPTEsdC5fdGVtcGxhdGU9Yyx0fXJldHVybiB0W3JdPWVbcl18fCExLHQuX3RlbXBsYXRlPSExLHR9LGRlZmF1bHRJdGVtczpmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxpLmxlbmd0aDt0Kyspe3ZhciByPWlbdF0sbj1yLm5hbWU7aWYobyhuKSYmIXNbbl0pe3ZhciBhPXtfdGVtcGxhdGU6cixuYW1lOm4sX2lucHV0OntfdGVtcGxhdGVpdGVtbmFtZTpufX07YS50ZW1wbGF0ZWl0ZW1uYW1lPXIudGVtcGxhdGVpdGVtbmFtZSxlLnB1c2goYSksc1tuXT0xfX1yZXR1cm4gZX19fSxyLmFycmF5RGVmYXVsdEtleT1sLHIuYXJyYXlFZGl0b3I9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPShuLm5lc3RlZFByb3BlcnR5KGUsdCkuZ2V0KCl8fFtdKS5sZW5ndGgsaT1yLl9pbmRleCxvPWk+PWEmJihyLl9pbnB1dHx8e30pLl90ZW1wbGF0ZWl0ZW1uYW1lO28mJihpPWEpO3ZhciBsLHM9dCsiWyIraSsiXSI7ZnVuY3Rpb24gYygpe2w9e30sbyYmKGxbc109e30sbFtzXS50ZW1wbGF0ZWl0ZW1uYW1lPW8pfWZ1bmN0aW9uIHUoZSx0KXtvP24ubmVzdGVkUHJvcGVydHkobFtzXSxlKS5zZXQodCk6bFtzKyIuIitlXT10fWZ1bmN0aW9uIGQoKXt2YXIgZT1sO3JldHVybiBjKCksZX1yZXR1cm4gYygpLHttb2RpZnlCYXNlOmZ1bmN0aW9uKGUsdCl7bFtlXT10fSxtb2RpZnlJdGVtOnUsZ2V0VXBkYXRlT2JqOmQsYXBwbHlVcGRhdGU6ZnVuY3Rpb24odCxyKXt0JiZ1KHQscik7dmFyIGE9ZCgpO2Zvcih2YXIgaSBpbiBhKW4ubmVzdGVkUHJvcGVydHkoZSxpKS5zZXQoYVtpXSl9fX19LHsiLi4vbGliIjoyMzIsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjI3NX1dLDI2OTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJAcGxvdGx5L2QzIiksYT1lKCIuLi9yZWdpc3RyeSIpLGk9ZSgiLi4vcGxvdHMvcGxvdHMiKSxvPWUoIi4uL2xpYiIpLGw9ZSgiLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIikscz1lKCIuLi9jb21wb25lbnRzL2NvbG9yIiksYz1lKCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSx1PWUoIi4uL2NvbXBvbmVudHMvdGl0bGVzIiksZD1lKCIuLi9jb21wb25lbnRzL21vZGViYXIiKSxmPWUoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscD1lKCIuLi9jb25zdGFudHMvYWxpZ25tZW50IiksaD1lKCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiKSxnPWguZW5mb3JjZSxtPWguY2xlYW4sdj1lKCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZG9BdXRvUmFuZ2U7ZnVuY3Rpb24geShlLHQscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBhPXJbbl1bMF0saT1yW25dWzFdO2lmKCEoYVswXT49ZVsxXXx8YVsxXTw9ZVswXSkmJihpWzBdPHRbMV0mJmlbMV0+dFswXSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24geChlKXt2YXIgdCxhLGwsdSxoLGcsbT1lLl9mdWxsTGF5b3V0LHY9bS5fc2l6ZSx4PXYucCxfPWYubGlzdChlLCIiLCEwKTtpZihtLl9wYXBlcmRpdi5zdHlsZSh7d2lkdGg6ZS5fY29udGV4dC5yZXNwb25zaXZlJiZtLmF1dG9zaXplJiYhZS5fY29udGV4dC5faGFzWmVyb1dpZHRoJiYhZS5sYXlvdXQud2lkdGg/IjEwMCUiOm0ud2lkdGgrInB4IixoZWlnaHQ6ZS5fY29udGV4dC5yZXNwb25zaXZlJiZtLmF1dG9zaXplJiYhZS5fY29udGV4dC5faGFzWmVyb0hlaWdodCYmIWUubGF5b3V0LmhlaWdodD8iMTAwJSI6bS5oZWlnaHQrInB4In0pLnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuY2FsbChjLnNldFNpemUsbS53aWR0aCxtLmhlaWdodCksZS5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKGUsbS5wYXBlcl9iZ2NvbG9yKSxyLmRyYXdNYWluVGl0bGUoZSksZC5tYW5hZ2UoZSksIW0uX2hhcygiY2FydGVzaWFuIikpcmV0dXJuIGkucHJldmlvdXNQcm9taXNlcyhlKTtmdW5jdGlvbiBUKGUsdCxyKXt2YXIgbj1lLl9sdy8yO3JldHVybiJ4Ij09PWUuX2lkLmNoYXJBdCgwKT90PyJ0b3AiPT09cj90Ll9vZmZzZXQteC1uOnQuX29mZnNldCt0Ll9sZW5ndGgreCtuOnYudCt2LmgqKDEtKGUucG9zaXRpb258fDApKStuJTE6dD8icmlnaHQiPT09cj90Ll9vZmZzZXQrdC5fbGVuZ3RoK3grbjp0Ll9vZmZzZXQteC1uOnYubCt2LncqKGUucG9zaXRpb258fDApK24lMX1mb3IodD0wO3Q8Xy5sZW5ndGg7dCsrKXt2YXIgTT0odT1fW3RdKS5fYW5jaG9yQXhpczt1Ll9saW5lcG9zaXRpb25zPXt9LHUuX2x3PWMuY3Jpc3BSb3VuZChlLHUubGluZXdpZHRoLDEpLHUuX21haW5MaW5lUG9zaXRpb249VCh1LE0sdS5zaWRlKSx1Ll9tYWluTWlycm9yUG9zaXRpb249dS5taXJyb3ImJk0/VCh1LE0scC5PUFBPU0lURV9TSURFW3Uuc2lkZV0pOm51bGx9dmFyIGs9W10sQT1bXSxMPVtdLFM9MT09PXMub3BhY2l0eShtLnBhcGVyX2JnY29sb3IpJiYxPT09cy5vcGFjaXR5KG0ucGxvdF9iZ2NvbG9yKSYmbS5wYXBlcl9iZ2NvbG9yPT09bS5wbG90X2JnY29sb3I7Zm9yKGEgaW4gbS5fcGxvdHMpaWYoKGw9bS5fcGxvdHNbYV0pLm1haW5wbG90KWwuYmcmJmwuYmcucmVtb3ZlKCksbC5iZz12b2lkIDA7ZWxzZXt2YXIgRD1sLnhheGlzLmRvbWFpbixDPWwueWF4aXMuZG9tYWluLE89bC5wbG90Z3JvdXA7aWYoeShELEMsTCkpe3ZhciBQPU8ubm9kZSgpLEk9bC5iZz1vLmVuc3VyZVNpbmdsZShPLCJyZWN0IiwiYmciKTtQLmluc2VydEJlZm9yZShJLm5vZGUoKSxQLmNoaWxkTm9kZXNbMF0pLEEucHVzaChhKX1lbHNlIE8uc2VsZWN0KCJyZWN0LmJnIikucmVtb3ZlKCksTC5wdXNoKFtELENdKSxTfHwoay5wdXNoKGEpLEEucHVzaChhKSl9dmFyIFIseixOLEYsRSxqLEgsQixZLFYsVSxxLEcsWj1tLl9iZ0xheWVyLnNlbGVjdEFsbCgiLmJnIikuZGF0YShrKTtmb3IoWi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImJnIiwhMCksWi5leGl0KCkucmVtb3ZlKCksWi5lYWNoKChmdW5jdGlvbihlKXttLl9wbG90c1tlXS5iZz1uLnNlbGVjdCh0aGlzKX0pKSx0PTA7dDxBLmxlbmd0aDt0KyspbD1tLl9wbG90c1tBW3RdXSxoPWwueGF4aXMsZz1sLnlheGlzLGwuYmcmJnZvaWQgMCE9PWguX29mZnNldCYmdm9pZCAwIT09Zy5fb2Zmc2V0JiZsLmJnLmNhbGwoYy5zZXRSZWN0LGguX29mZnNldC14LGcuX29mZnNldC14LGguX2xlbmd0aCsyKngsZy5fbGVuZ3RoKzIqeCkuY2FsbChzLmZpbGwsbS5wbG90X2JnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDApO2lmKCFtLl9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKGEgaW4gbS5fcGxvdHMpe2w9bS5fcGxvdHNbYV0saD1sLnhheGlzLGc9bC55YXhpczt2YXIgVyxYLEo9bC5jbGlwSWQ9ImNsaXAiK20uX3VpZCthKyJwbG90IixRPW8uZW5zdXJlU2luZ2xlQnlJZChtLl9jbGlwcywiY2xpcFBhdGgiLEosKGZ1bmN0aW9uKGUpe2UuY2xhc3NlZCgicGxvdGNsaXAiLCEwKS5hcHBlbmQoInJlY3QiKX0pKTtsLmNsaXBSZWN0PVEuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6aC5fbGVuZ3RoLGhlaWdodDpnLl9sZW5ndGh9KSxjLnNldFRyYW5zbGF0ZShsLnBsb3QsaC5fb2Zmc2V0LGcuX29mZnNldCksbC5faGFzQ2xpcE9uQXhpc0ZhbHNlPyhXPW51bGwsWD1KKTooVz1KLFg9bnVsbCksYy5zZXRDbGlwVXJsKGwucGxvdCxXLGUpLGwubGF5ZXJDbGlwSWQ9WH1mdW5jdGlvbiBLKGUpe3JldHVybiJNIitSKyIsIitlKyJIIit6fWZ1bmN0aW9uICQoZSl7cmV0dXJuIk0iK2guX29mZnNldCsiLCIrZSsiaCIraC5fbGVuZ3RofWZ1bmN0aW9uIGVlKGUpe3JldHVybiJNIitlKyIsIitCKyJWIitIfWZ1bmN0aW9uIHRlKGUpe3JldHVybiJNIitlKyIsIitnLl9vZmZzZXQrInYiK2cuX2xlbmd0aH1mdW5jdGlvbiByZShlLHQscil7aWYoIWUuc2hvd2xpbmV8fGEhPT1lLl9tYWluU3VicGxvdClyZXR1cm4iIjtpZighZS5fYW5jaG9yQXhpcylyZXR1cm4gcihlLl9tYWluTGluZVBvc2l0aW9uKTt2YXIgbj10KGUuX21haW5MaW5lUG9zaXRpb24pO3JldHVybiBlLm1pcnJvciYmKG4rPXQoZS5fbWFpbk1pcnJvclBvc2l0aW9uKSksbn1mb3IoYSBpbiBtLl9wbG90cyl7bD1tLl9wbG90c1thXSxoPWwueGF4aXMsZz1sLnlheGlzO3ZhciBuZT0iTTAsMCI7YihoLGEpJiYoRT13KGgsImxlZnQiLGcsXyksUj1oLl9vZmZzZXQtKEU/eCtFOjApLGo9dyhoLCJyaWdodCIsZyxfKSx6PWguX29mZnNldCtoLl9sZW5ndGgrKGo/eCtqOjApLE49VChoLGcsImJvdHRvbSIpLEY9VChoLGcsInRvcCIpLCEoRz0haC5fYW5jaG9yQXhpc3x8YSE9PWguX21haW5TdWJwbG90KXx8ImFsbHRpY2tzIiE9PWgubWlycm9yJiYiYWxsIiE9PWgubWlycm9yfHwoaC5fbGluZXBvc2l0aW9uc1thXT1bTixGXSksbmU9cmUoaCxLLCQpLEcmJmguc2hvd2xpbmUmJigiYWxsIj09PWgubWlycm9yfHwiYWxsdGlja3MiPT09aC5taXJyb3IpJiYobmUrPUsoTikrSyhGKSksbC54bGluZXMuc3R5bGUoInN0cm9rZS13aWR0aCIsaC5fbHcrInB4IikuY2FsbChzLnN0cm9rZSxoLnNob3dsaW5lP2gubGluZWNvbG9yOiJyZ2JhKDAsMCwwLDApIikpLGwueGxpbmVzLmF0dHIoImQiLG5lKTt2YXIgYWU9Ik0wLDAiO2IoZyxhKSYmKFU9dyhnLCJib3R0b20iLGgsXyksSD1nLl9vZmZzZXQrZy5fbGVuZ3RoKyhVP3g6MCkscT13KGcsInRvcCIsaCxfKSxCPWcuX29mZnNldC0ocT94OjApLFk9VChnLGgsImxlZnQiKSxWPVQoZyxoLCJyaWdodCIpLCEoRz0hZy5fYW5jaG9yQXhpc3x8YSE9PWcuX21haW5TdWJwbG90KXx8ImFsbHRpY2tzIiE9PWcubWlycm9yJiYiYWxsIiE9PWcubWlycm9yfHwoZy5fbGluZXBvc2l0aW9uc1thXT1bWSxWXSksYWU9cmUoZyxlZSx0ZSksRyYmZy5zaG93bGluZSYmKCJhbGwiPT09Zy5taXJyb3J8fCJhbGx0aWNrcyI9PT1nLm1pcnJvcikmJihhZSs9ZWUoWSkrZWUoVikpLGwueWxpbmVzLnN0eWxlKCJzdHJva2Utd2lkdGgiLGcuX2x3KyJweCIpLmNhbGwocy5zdHJva2UsZy5zaG93bGluZT9nLmxpbmVjb2xvcjoicmdiYSgwLDAsMCwwKSIpKSxsLnlsaW5lcy5hdHRyKCJkIixhZSl9cmV0dXJuIGYubWFrZUNsaXBQYXRocyhlKSxpLnByZXZpb3VzUHJvbWlzZXMoZSl9ZnVuY3Rpb24gYihlLHQpe3JldHVybihlLnRpY2tzfHxlLnNob3dsaW5lKSYmKHQ9PT1lLl9tYWluU3VicGxvdHx8ImFsbCI9PT1lLm1pcnJvcnx8ImFsbHRpY2tzIj09PWUubWlycm9yKX1mdW5jdGlvbiBfKGUsdCxyKXtpZighci5zaG93bGluZXx8IXIuX2x3KXJldHVybiExO2lmKCJhbGwiPT09ci5taXJyb3J8fCJhbGx0aWNrcyI9PT1yLm1pcnJvcilyZXR1cm4hMDt2YXIgbj1yLl9hbmNob3JBeGlzO2lmKCFuKXJldHVybiExO3ZhciBhPXAuRlJPTV9CTFt0XTtyZXR1cm4gci5zaWRlPT09dD9uLmRvbWFpblthXT09PWUuZG9tYWluW2FdOnIubWlycm9yJiZuLmRvbWFpblsxLWFdPT09ZS5kb21haW5bMS1hXX1mdW5jdGlvbiB3KGUsdCxyLG4pe2lmKF8oZSx0LHIpKXJldHVybiByLl9sdztmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIGk9blthXTtpZihpLl9tYWluQXhpcz09PXIuX21haW5BeGlzJiZfKGUsdCxpKSlyZXR1cm4gaS5fbHd9cmV0dXJuIDB9ZnVuY3Rpb24gVChlLHQpe3ZhciByPWUudGl0bGUsbj1lLl9zaXplLGE9MDtzd2l0Y2goInN0YXJ0Ij09PXQ/YT1yLnBhZC5sOiJlbmQiPT09dCYmKGE9LXIucGFkLnIpLHIueHJlZil7Y2FzZSJwYXBlciI6cmV0dXJuIG4ubCtuLncqci54K2E7Y2FzZSJjb250YWluZXIiOmRlZmF1bHQ6cmV0dXJuIGUud2lkdGgqci54K2F9fWZ1bmN0aW9uIE0oZSx0KXt2YXIgcj1lLnRpdGxlLG49ZS5fc2l6ZSxhPTA7aWYoIjBlbSIhPT10JiZ0P3Q9PT1wLkNBUF9TSElGVCsiZW0iJiYoYT1yLnBhZC50KTphPS1yLnBhZC5iLCJhdXRvIj09PXIueSlyZXR1cm4gbi50LzI7c3dpdGNoKHIueXJlZil7Y2FzZSJwYXBlciI6cmV0dXJuIG4udCtuLmgtbi5oKnIueSthO2Nhc2UiY29udGFpbmVyIjpkZWZhdWx0OnJldHVybiBlLmhlaWdodC1lLmhlaWdodCpyLnkrYX19ci5sYXlvdXRTdHlsZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uc3luY09yQXN5bmMoW2kuZG9BdXRvTWFyZ2luLHhdLGUpfSxyLmRyYXdNYWluVGl0bGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dCxyPWZ1bmN0aW9uKGUpe3ZhciB0PWUudGl0bGUscj0ibWlkZGxlIjtvLmlzUmlnaHRBbmNob3IodCk/cj0iZW5kIjpvLmlzTGVmdEFuY2hvcih0KSYmKHI9InN0YXJ0Iik7cmV0dXJuIHJ9KHQpLG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50aXRsZSxyPSIwZW0iO28uaXNUb3BBbmNob3IodCk/cj1wLkNBUF9TSElGVCsiZW0iOm8uaXNNaWRkbGVBbmNob3IodCkmJihyPXAuTUlEX1NISUZUKyJlbSIpO3JldHVybiByfSh0KTt1LmRyYXcoZSwiZ3RpdGxlIix7cHJvcENvbnRhaW5lcjp0LHByb3BOYW1lOiJ0aXRsZS50ZXh0IixwbGFjZWhvbGRlcjp0Ll9kZmx0VGl0bGUucGxvdCxhdHRyaWJ1dGVzOnt4OlQodCxyKSx5Ok0odCxuKSwidGV4dC1hbmNob3IiOnIsZHk6bn19KX0sci5kb1RyYWNlU3R5bGU9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLmNhbGNkYXRhLG89W107Zm9yKHQ9MDt0PG4ubGVuZ3RoO3QrKyl7dmFyIHM9blt0XSxjPXNbMF18fHt9LHU9Yy50cmFjZXx8e30sZD11Ll9tb2R1bGV8fHt9LGY9ZC5hcnJheXNUb0NhbGNkYXRhO2YmJmYocyx1KTt2YXIgcD1kLmVkaXRTdHlsZTtwJiZvLnB1c2goe2ZuOnAsY2QwOmN9KX1pZihvLmxlbmd0aCl7Zm9yKHQ9MDt0PG8ubGVuZ3RoO3QrKyl7dmFyIGg9b1t0XTtoLmZuKGUsaC5jZDApfWwoZSksci5yZWRyYXdSZWdsVHJhY2VzKGUpfXJldHVybiBpLnN0eWxlKGUpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikoZSksaS5wcmV2aW91c1Byb21pc2VzKGUpfSxyLmRvQ29sb3JCYXJzPWZ1bmN0aW9uKGUpe3JldHVybiBhLmdldENvbXBvbmVudE1ldGhvZCgiY29sb3JiYXIiLCJkcmF3IikoZSksaS5wcmV2aW91c1Byb21pc2VzKGUpfSxyLmxheW91dFJlcGxvdD1mdW5jdGlvbihlKXt2YXIgdD1lLmxheW91dDtyZXR1cm4gZS5sYXlvdXQ9dm9pZCAwLGEuY2FsbCgiX2RvUGxvdCIsZSwiIix0KX0sci5kb0xlZ2VuZD1mdW5jdGlvbihlKXtyZXR1cm4gYS5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKShlKSxpLnByZXZpb3VzUHJvbWlzZXMoZSl9LHIuZG9UaWNrc1JlbGF5b3V0PWZ1bmN0aW9uKGUpe3JldHVybiBmLmRyYXcoZSwicmVkcmF3IiksZS5fZnVsbExheW91dC5faGFzT25seUxhcmdlU3Bsb21zJiYoYS5zdWJwbG90c1JlZ2lzdHJ5LnNwbG9tLnVwZGF0ZUdyaWQoZSksbChlKSxyLnJlZHJhd1JlZ2xUcmFjZXMoZSkpLHIuZHJhd01haW5UaXRsZShlKSxpLnByZXZpb3VzUHJvbWlzZXMoZSl9LHIuZG9Nb2RlQmFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQ7ZC5tYW5hZ2UoZSk7Zm9yKHZhciByPTA7cjx0Ll9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoO3IrKyl7dmFyIG49dC5fYmFzZVBsb3RNb2R1bGVzW3JdLnVwZGF0ZUZ4O24mJm4oZSl9cmV0dXJuIGkucHJldmlvdXNQcm9taXNlcyhlKX0sci5kb0NhbWVyYT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5fZnVsbExheW91dCxyPXQuX3N1YnBsb3RzLmdsM2Qsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgYT10W3Jbbl1dO2EuX3NjZW5lLnNldFZpZXdwb3J0KGEpfX0sci5kcmF3RGF0YT1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0O2woZSk7Zm9yKHZhciBuPXQuX2Jhc2VQbG90TW9kdWxlcyxvPTA7bzxuLmxlbmd0aDtvKyspbltvXS5wbG90KGUpO3JldHVybiByLnJlZHJhd1JlZ2xUcmFjZXMoZSksaS5zdHlsZShlKSxhLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhdyIpKGUpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXciKShlKSxhLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiZHJhdyIpKGUpLHQuX3JlcGxvdHRpbmc9ITEsaS5wcmV2aW91c1Byb21pc2VzKGUpfSxyLnJlZHJhd1JlZ2xUcmFjZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dDtpZih0Ll9oYXMoInJlZ2wiKSl7dmFyIHIsbixhPWUuX2Z1bGxEYXRhLGk9W10sbD1bXTtmb3IodC5faGFzT25seUxhcmdlU3Bsb21zJiZ0Ll9zcGxvbUdyaWQuZHJhdygpLHI9MDtyPGEubGVuZ3RoO3IrKyl7dmFyIHM9YVtyXTshMD09PXMudmlzaWJsZSYmMCE9PXMuX2xlbmd0aCYmKCJzcGxvbSI9PT1zLnR5cGU/dC5fc3Bsb21TY2VuZXNbcy51aWRdLmRyYXcoKToic2NhdHRlcmdsIj09PXMudHlwZT9vLnB1c2hVbmlxdWUoaSxzLnhheGlzK3MueWF4aXMpOiJzY2F0dGVycG9sYXJnbCI9PT1zLnR5cGUmJm8ucHVzaFVuaXF1ZShsLHMuc3VicGxvdCkpfWZvcihyPTA7cjxpLmxlbmd0aDtyKyspKG49dC5fcGxvdHNbaVtyXV0pLl9zY2VuZSYmbi5fc2NlbmUuZHJhdygpO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspKG49dFtsW3JdXS5fc3VicGxvdCkuX3NjZW5lJiZuLl9zY2VuZS5kcmF3KCl9fSxyLmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9Zi5saXN0KGUsIiIsITApLG49e30sYT0wO2E8ci5sZW5ndGg7YSsrKWlmKCFuWyh0PXJbYV0pLl9pZF0pe25bdC5faWRdPTEsbShlLHQpLHYoZSx0KTt2YXIgaT10Ll9tYXRjaEdyb3VwO2lmKGkpZm9yKHZhciBvIGluIGkpe3ZhciBsPWYuZ2V0RnJvbUlkKGUsbyk7dihlLGwsdC5yYW5nZSksbltvXT0xfX1nKGUpfSxyLmZpbmFsRHJhdz1mdW5jdGlvbihlKXthLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJkcmF3IikoZSksYS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2VsZWN0b3IiLCJkcmF3IikoZSl9LHIuZHJhd01hcmdpblB1c2hlcnM9ZnVuY3Rpb24oZSl7YS5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKShlKSxhLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImRyYXciKShlKSxhLmdldENvbXBvbmVudE1ldGhvZCgic2xpZGVycyIsImRyYXciKShlKSxhLmdldENvbXBvbmVudE1ldGhvZCgidXBkYXRlbWVudXMiLCJkcmF3IikoZSksYS5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKGUpfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjoxMDIsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6MTI0LCIuLi9jb21wb25lbnRzL21vZGViYXIiOjE2NSwiLi4vY29tcG9uZW50cy90aXRsZXMiOjIwMCwiLi4vY29uc3RhbnRzL2FsaWdubWVudCI6MjA3LCIuLi9saWIiOjIzMiwiLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjoyMjAsIi4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjI3OCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI3OSwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjoyODcsIi4uL3Bsb3RzL3Bsb3RzIjozMTYsIi4uL3JlZ2lzdHJ5IjozMTgsIkBwbG90bHkvZDMiOjExfV0sMjcwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL2xpYiIpLGE9bi5pc1BsYWluT2JqZWN0LGk9ZSgiLi9wbG90X3NjaGVtYSIpLG89ZSgiLi4vcGxvdHMvcGxvdHMiKSxsPWUoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPWUoIi4vcGxvdF90ZW1wbGF0ZSIpLGM9ZSgiLi9wbG90X2NvbmZpZyIpLmRmbHRDb25maWc7ZnVuY3Rpb24gdShlLHQpe2U9bi5leHRlbmREZWVwKHt9LGUpO3ZhciByLGksbz1PYmplY3Qua2V5cyhlKS5zb3J0KCk7ZnVuY3Rpb24gbCh0LHIsbil7aWYoYShyKSYmYSh0KSl1KHQscik7ZWxzZSBpZihBcnJheS5pc0FycmF5KHIpJiZBcnJheS5pc0FycmF5KHQpKXt2YXIgbz1zLmFycmF5VGVtcGxhdGVyKHtfdGVtcGxhdGU6ZX0sbik7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGw9cltpXSxjPW8ubmV3SXRlbShsKS5fdGVtcGxhdGU7YyYmdShjLGwpfXZhciBkPW8uZGVmYXVsdEl0ZW1zKCk7Zm9yKGk9MDtpPGQubGVuZ3RoO2krKylyLnB1c2goZFtpXS5fdGVtcGxhdGUpO2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspZGVsZXRlIHJbaV0udGVtcGxhdGVpdGVtbmFtZX19Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGM9b1tyXSxmPWVbY107aWYoYyBpbiB0P2woZix0W2NdLGMpOnRbY109ZixkKGMpPT09Yylmb3IodmFyIHAgaW4gdCl7dmFyIGg9ZChwKTtwPT09aHx8aCE9PWN8fHAgaW4gZXx8bChmLHRbcF0sYyl9fX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldKyQvLCIiKX1mdW5jdGlvbiBmKGUsdCxyLGksbyl7dmFyIGw9byYmcihvKTtmb3IodmFyIGMgaW4gZSl7dmFyIHU9ZVtjXSxwPWcoZSxjLGkpLGg9ZyhlLGMsbyksbT1yKGgpO2lmKCFtKXt2YXIgdj1kKGMpO3YhPT1jJiYobT1yKGg9ZyhlLHYsbykpKX1pZigoIWx8fGwhPT1tKSYmISghbXx8bS5fbm9UZW1wbGF0aW5nfHwiZGF0YV9hcnJheSI9PT1tLnZhbFR5cGV8fG0uYXJyYXlPayYmQXJyYXkuaXNBcnJheSh1KSkpaWYoIW0udmFsVHlwZSYmYSh1KSlmKHUsdCxyLHAsaCk7ZWxzZSBpZihtLl9pc0xpbmtlZFRvQXJyYXkmJkFycmF5LmlzQXJyYXkodSkpZm9yKHZhciB5PSExLHg9MCxiPXt9LF89MDtfPHUubGVuZ3RoO18rKyl7dmFyIHc9dVtfXTtpZihhKHcpKXt2YXIgVD13Lm5hbWU7aWYoVCliW1RdfHwoZih3LHQscixnKHUseCxwKSxnKHUseCxoKSkseCsrLGJbVF09MSk7ZWxzZSBpZigheSl7dmFyIE09ZyhlLHMuYXJyYXlEZWZhdWx0S2V5KGMpLGkpLGs9Zyh1LHgscCk7Zih3LHQscixrLGcodSx4LGgpKTt2YXIgQT1uLm5lc3RlZFByb3BlcnR5KHQsayk7bi5uZXN0ZWRQcm9wZXJ0eSh0LE0pLnNldChBLmdldCgpKSxBLnNldChudWxsKSx5PSEwfX19ZWxzZXtuLm5lc3RlZFByb3BlcnR5KHQscCkuc2V0KHUpfX19ZnVuY3Rpb24gcChlLHQpe3JldHVybiBpLmdldExheW91dFZhbE9iamVjdChlLG4ubmVzdGVkUHJvcGVydHkoe30sdCkucGFydHMpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gaS5nZXRUcmFjZVZhbE9iamVjdChlLG4ubmVzdGVkUHJvcGVydHkoe30sdCkucGFydHMpfWZ1bmN0aW9uIGcoZSx0LHIpe3JldHVybiByP0FycmF5LmlzQXJyYXkoZSk/cisiWyIrdCsiXSI6cisiLiIrdDp0fWZ1bmN0aW9uIG0oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoYShlW3RdKSlyZXR1cm4hMH1mdW5jdGlvbiB2KGUpe3ZhciB0O3N3aXRjaChlLmNvZGUpe2Nhc2UiZGF0YSI6dD0iVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgZGF0YS4iO2JyZWFrO2Nhc2UibGF5b3V0Ijp0PSJUaGUgdGVtcGxhdGUgaGFzIG5vIGtleSBsYXlvdXQuIjticmVhaztjYXNlIm1pc3NpbmciOnQ9ZS5wYXRoPyJUaGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciBpdGVtICIrZS5wYXRoKyIgd2l0aCBuYW1lICIrZS50ZW1wbGF0ZWl0ZW1uYW1lOiJUaGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciB0cmFjZSAiK2UuaW5kZXgrIiwgb2YgdHlwZSAiK2UudHJhY2VUeXBlKyIuIjticmVhaztjYXNlInVudXNlZCI6dD1lLnBhdGg/IlRoZSB0ZW1wbGF0ZSBpdGVtIGF0ICIrZS5wYXRoKyIgd2FzIG5vdCB1c2VkIGluIGNvbnN0cnVjdGluZyB0aGUgcGxvdC4iOmUuZGF0YUNvdW50PyJTb21lIG9mIHRoZSB0ZW1wbGF0ZXMgb2YgdHlwZSAiK2UudHJhY2VUeXBlKyIgd2VyZSBub3QgdXNlZC4gVGhlIHRlbXBsYXRlIGhhcyAiK2UudGVtcGxhdGVDb3VudCsiIHRyYWNlcywgdGhlIGRhdGEgb25seSBoYXMgIitlLmRhdGFDb3VudCsiIG9mIHRoaXMgdHlwZS4iOiJUaGUgdGVtcGxhdGUgaGFzICIrZS50ZW1wbGF0ZUNvdW50KyIgdHJhY2VzIG9mIHR5cGUgIitlLnRyYWNlVHlwZSsiIGJ1dCB0aGVyZSBhcmUgbm9uZSBpbiB0aGUgZGF0YS4iO2JyZWFrO2Nhc2UicmV1c2VkIjp0PSJTb21lIG9mIHRoZSB0ZW1wbGF0ZXMgb2YgdHlwZSAiK2UudHJhY2VUeXBlKyIgd2VyZSB1c2VkIG1vcmUgdGhhbiBvbmNlLiBUaGUgdGVtcGxhdGUgaGFzICIrZS50ZW1wbGF0ZUNvdW50KyIgdHJhY2VzLCB0aGUgZGF0YSBoYXMgIitlLmRhdGFDb3VudCsiIG9mIHRoaXMgdHlwZS4ifXJldHVybiBlLm1zZz10LGV9ci5tYWtlVGVtcGxhdGU9ZnVuY3Rpb24oZSl7ZT1uLmlzUGxhaW5PYmplY3QoZSk/ZTpuLmdldEdyYXBoRGl2KGUpLGU9bi5leHRlbmREZWVwKHtfY29udGV4dDpjfSx7ZGF0YTplLmRhdGEsbGF5b3V0OmUubGF5b3V0fSksby5zdXBwbHlEZWZhdWx0cyhlKTt2YXIgdD1lLmRhdGF8fFtdLHI9ZS5sYXlvdXR8fHt9O3IuX2Jhc2VQbG90TW9kdWxlcz1lLl9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsci5fbW9kdWxlcz1lLl9mdWxsTGF5b3V0Ll9tb2R1bGVzO3ZhciBpPXtkYXRhOnt9LGxheW91dDp7fX07dC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD17fTtmKGUsdCxoLmJpbmQobnVsbCxlKSk7dmFyIHI9bi5jb2VyY2UoZSx7fSxsLCJ0eXBlIiksYT1pLmRhdGFbcl07YXx8KGE9aS5kYXRhW3JdPVtdKSxhLnB1c2godCl9KSksZihyLGkubGF5b3V0LHAuYmluZChudWxsLHIpKSxkZWxldGUgaS5sYXlvdXQudGVtcGxhdGU7dmFyIHM9ci50ZW1wbGF0ZTtpZihhKHMpKXt2YXIgZCxnLG0sdix5LHgsYj1zLmxheW91dDthKGIpJiZ1KGIsaS5sYXlvdXQpO3ZhciBfPXMuZGF0YTtpZihhKF8pKXtmb3IoZyBpbiBpLmRhdGEpaWYobT1fW2ddLEFycmF5LmlzQXJyYXkobSkpe2Zvcih4PSh5PWkuZGF0YVtnXSkubGVuZ3RoLHY9bS5sZW5ndGgsZD0wO2Q8eDtkKyspdShtW2Qldl0seVtkXSk7Zm9yKGQ9eDtkPHY7ZCsrKXkucHVzaChuLmV4dGVuZERlZXAoe30sbVtkXSkpfWZvcihnIGluIF8pZyBpbiBpLmRhdGF8fChpLmRhdGFbZ109bi5leHRlbmREZWVwKFtdLF9bZ10pKX19cmV0dXJuIGl9LHIudmFsaWRhdGVUZW1wbGF0ZT1mdW5jdGlvbihlLHQpe3ZhciByPW4uZXh0ZW5kRGVlcCh7fSx7X2NvbnRleHQ6YyxkYXRhOmUuZGF0YSxsYXlvdXQ6ZS5sYXlvdXR9KSxpPXIubGF5b3V0fHx7fTthKHQpfHwodD1pLnRlbXBsYXRlfHx7fSk7dmFyIGw9dC5sYXlvdXQscz10LmRhdGEsdT1bXTtyLmxheW91dD1pLHIubGF5b3V0LnRlbXBsYXRlPXQsby5zdXBwbHlEZWZhdWx0cyhyKTt2YXIgZj1yLl9mdWxsTGF5b3V0LHA9ci5fZnVsbERhdGEsaD17fTtpZihhKGwpPyghZnVuY3Rpb24gZSh0LHIpe2Zvcih2YXIgbiBpbiB0KWlmKCJfIiE9PW4uY2hhckF0KDApJiZhKHRbbl0pKXt2YXIgaSxvPWQobiksbD1bXTtmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKWwucHVzaChnKHQsbixyW2ldKSksbyE9PW4mJmwucHVzaChnKHQsbyxyW2ldKSk7Zm9yKGk9MDtpPGwubGVuZ3RoO2krKyloW2xbaV1dPTE7ZSh0W25dLGwpfX0oZixbImxheW91dCJdKSxmdW5jdGlvbiBlKHQscil7Zm9yKHZhciBuIGluIHQpaWYoLTE9PT1uLmluZGV4T2YoImRlZmF1bHRzIikmJmEodFtuXSkpe3ZhciBpPWcodCxuLHIpO2hbaV0/ZSh0W25dLGkpOnUucHVzaCh7Y29kZToidW51c2VkIixwYXRoOml9KX19KGwsImxheW91dCIpKTp1LnB1c2goe2NvZGU6ImxheW91dCJ9KSxhKHMpKXtmb3IodmFyIHkseD17fSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBfPXBbYl07eFt5PV8udHlwZV09KHhbeV18fDApKzEsXy5fZnVsbElucHV0Ll90ZW1wbGF0ZXx8dS5wdXNoKHtjb2RlOiJtaXNzaW5nIixpbmRleDpfLl9mdWxsSW5wdXQuaW5kZXgsdHJhY2VUeXBlOnl9KX1mb3IoeSBpbiBzKXt2YXIgdz1zW3ldLmxlbmd0aCxUPXhbeV18fDA7dz5UP3UucHVzaCh7Y29kZToidW51c2VkIix0cmFjZVR5cGU6eSx0ZW1wbGF0ZUNvdW50OncsZGF0YUNvdW50OlR9KTpUPncmJnUucHVzaCh7Y29kZToicmV1c2VkIix0cmFjZVR5cGU6eSx0ZW1wbGF0ZUNvdW50OncsZGF0YUNvdW50OlR9KX19ZWxzZSB1LnB1c2goe2NvZGU6ImRhdGEifSk7aWYoZnVuY3Rpb24gZSh0LHIpe2Zvcih2YXIgbiBpbiB0KWlmKCJfIiE9PW4uY2hhckF0KDApKXt2YXIgaT10W25dLG89Zyh0LG4scik7YShpKT8oQXJyYXkuaXNBcnJheSh0KSYmITE9PT1pLl90ZW1wbGF0ZSYmaS50ZW1wbGF0ZWl0ZW1uYW1lJiZ1LnB1c2goe2NvZGU6Im1pc3NpbmciLHBhdGg6byx0ZW1wbGF0ZWl0ZW1uYW1lOmkudGVtcGxhdGVpdGVtbmFtZX0pLGUoaSxvKSk6QXJyYXkuaXNBcnJheShpKSYmbShpKSYmZShpLG8pfX0oe2RhdGE6cCxsYXlvdXQ6Zn0sIiIpLHUubGVuZ3RoKXJldHVybiB1Lm1hcCh2KX19LHsiLi4vbGliIjoyMzIsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjI3NSwiLi4vcGxvdHMvcGxvdHMiOjMxNiwiLi9wbG90X2NvbmZpZyI6MjY2LCIuL3Bsb3Rfc2NoZW1hIjoyNjcsIi4vcGxvdF90ZW1wbGF0ZSI6MjY4fV0sMjcxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuL3Bsb3RfYXBpIiksaT1lKCIuLi9wbG90cy9wbG90cyIpLG89ZSgiLi4vbGliIiksbD1lKCIuLi9zbmFwc2hvdC9oZWxwZXJzIikscz1lKCIuLi9zbmFwc2hvdC90b3N2ZyIpLGM9ZSgiLi4vc25hcHNob3Qvc3ZndG9pbWciKSx1PWUoIi4uL3ZlcnNpb24iKS52ZXJzaW9uLGQ9e2Zvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicG5nIiwianBlZyIsIndlYnAiLCJzdmciLCJmdWxsLWpzb24iXSxkZmx0OiJwbmcifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MX0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNldEJhY2tncm91bmQ6e3ZhbFR5cGU6ImFueSIsZGZsdDohMX0saW1hZ2VEYXRhT25seTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX19O3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByLGYscCxoO2Z1bmN0aW9uIGcoZSl7cmV0dXJuIShlIGluIHQpfHxvLnZhbGlkYXRlKHRbZV0sZFtlXSl9aWYodD10fHx7fSxvLmlzUGxhaW5PYmplY3QoZSk/KHI9ZS5kYXRhfHxbXSxmPWUubGF5b3V0fHx7fSxwPWUuY29uZmlnfHx7fSxoPXt9KTooZT1vLmdldEdyYXBoRGl2KGUpLHI9by5leHRlbmREZWVwKFtdLGUuZGF0YSksZj1vLmV4dGVuZERlZXAoe30sZS5sYXlvdXQpLHA9ZS5fY29udGV4dCxoPWUuX2Z1bGxMYXlvdXR8fHt9KSwhZygid2lkdGgiKSYmbnVsbCE9PXQud2lkdGh8fCFnKCJoZWlnaHQiKSYmbnVsbCE9PXQuaGVpZ2h0KXRocm93IG5ldyBFcnJvcigiSGVpZ2h0IGFuZCB3aWR0aCBzaG91bGQgYmUgcGl4ZWwgdmFsdWVzLiIpO2lmKCFnKCJmb3JtYXQiKSl0aHJvdyBuZXcgRXJyb3IoIkV4cG9ydCBmb3JtYXQgaXMgbm90ICIrby5qb2luMihkLmZvcm1hdC52YWx1ZXMsIiwgIiwiIG9yICIpKyIuIik7dmFyIG09e307ZnVuY3Rpb24gdihlLHIpe3JldHVybiBvLmNvZXJjZSh0LG0sZCxlLHIpfXZhciB5PXYoImZvcm1hdCIpLHg9digid2lkdGgiKSxiPXYoImhlaWdodCIpLF89digic2NhbGUiKSx3PXYoInNldEJhY2tncm91bmQiKSxUPXYoImltYWdlRGF0YU9ubHkiKSxNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO00uc3R5bGUucG9zaXRpb249ImFic29sdXRlIixNLnN0eWxlLmxlZnQ9Ii01MDAwcHgiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTSk7dmFyIGs9by5leHRlbmRGbGF0KHt9LGYpO3g/ay53aWR0aD14Om51bGw9PT10LndpZHRoJiZuKGgud2lkdGgpJiYoay53aWR0aD1oLndpZHRoKSxiP2suaGVpZ2h0PWI6bnVsbD09PXQuaGVpZ2h0JiZuKGguaGVpZ2h0KSYmKGsuaGVpZ2h0PWguaGVpZ2h0KTt2YXIgQT1vLmV4dGVuZEZsYXQoe30scCx7X2V4cG9ydGVkUGxvdDohMCxzdGF0aWNQbG90OiEwLHNldEJhY2tncm91bmQ6d30pLEw9bC5nZXRSZWRyYXdGdW5jKE0pO2Z1bmN0aW9uIFMoKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSxsLmdldERlbGF5KE0uX2Z1bGxMYXlvdXQpKX0pKX1mdW5jdGlvbiBEKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe3ZhciByPXMoTSx5LF8pLG49TS5fZnVsbExheW91dC53aWR0aCxkPU0uX2Z1bGxMYXlvdXQuaGVpZ2h0O2Z1bmN0aW9uIGYoKXthLnB1cmdlKE0pLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoTSl9aWYoImZ1bGwtanNvbiI9PT15KXt2YXIgcD1pLmdyYXBoSnNvbihNLCExLCJrZWVwZGF0YSIsIm9iamVjdCIsITAsITApO3JldHVybiBwLnZlcnNpb249dSxwPUpTT04uc3RyaW5naWZ5KHApLGYoKSxlKFQ/cDpsLmVuY29kZUpTT04ocCkpfWlmKGYoKSwic3ZnIj09PXkpcmV0dXJuIGUoVD9yOmwuZW5jb2RlU1ZHKHIpKTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtoLmlkPW8ucmFuZHN0cigpLGMoe2Zvcm1hdDp5LHdpZHRoOm4saGVpZ2h0OmQsc2NhbGU6XyxjYW52YXM6aCxzdmc6cixwcm9taXNlOiEwfSkudGhlbihlKS5jYXRjaCh0KX0pKX1yZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7YS5uZXdQbG90KE0scixrLEEpLnRoZW4oTCkudGhlbihTKS50aGVuKEQpLnRoZW4oKGZ1bmN0aW9uKHQpe2UoZnVuY3Rpb24oZSl7cmV0dXJuIFQ/ZS5yZXBsYWNlKGwuSU1BR0VfVVJMX1BSRUZJWCwiIik6ZX0odCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt0KGUpfSkpfSkpfX0seyIuLi9saWIiOjIzMiwiLi4vcGxvdHMvcGxvdHMiOjMxNiwiLi4vc25hcHNob3QvaGVscGVycyI6MzIyLCIuLi9zbmFwc2hvdC9zdmd0b2ltZyI6MzI0LCIuLi9zbmFwc2hvdC90b3N2ZyI6MzI2LCIuLi92ZXJzaW9uIjozOTEsIi4vcGxvdF9hcGkiOjI2NSwiZmFzdC1pc251bWVyaWMiOjE3fV0sMjcyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL2xpYiIpLGE9ZSgiLi4vcGxvdHMvcGxvdHMiKSxpPWUoIi4vcGxvdF9zY2hlbWEiKSxvPWUoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnLGw9bi5pc1BsYWluT2JqZWN0LHM9QXJyYXkuaXNBcnJheSxjPW4uaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiB1KGUsdCxyLGEsaSxvKXtvPW98fFtdO2Zvcih2YXIgZD1PYmplY3Qua2V5cyhlKSxmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciBwPWRbZl07aWYoInRyYW5zZm9ybXMiIT09cCl7dmFyIHY9by5zbGljZSgpO3YucHVzaChwKTt2YXIgeT1lW3BdLHg9dFtwXSxiPW0ocixwKSxfPShifHx7fSkudmFsVHlwZSx3PSJpbmZvX2FycmF5Ij09PV8sVD0iY29sb3JzY2FsZSI9PT1fLE09KGJ8fHt9KS5pdGVtcztpZihnKHIscCkpaWYobCh5KSYmbCh4KSYmImFueSIhPT1fKXUoeSx4LGIsYSxpLHYpO2Vsc2UgaWYodyYmcyh5KSl7eS5sZW5ndGg+eC5sZW5ndGgmJmEucHVzaChoKCJ1bnVzZWQiLGksdi5jb25jYXQoeC5sZW5ndGgpKSk7dmFyIGssQSxMLFMsRCxDPXgubGVuZ3RoLE89QXJyYXkuaXNBcnJheShNKTtpZihPJiYoQz1NYXRoLm1pbihDLE0ubGVuZ3RoKSksMj09PWIuZGltZW5zaW9ucylmb3IoQT0wO0E8QztBKyspaWYocyh5W0FdKSl7eVtBXS5sZW5ndGg+eFtBXS5sZW5ndGgmJmEucHVzaChoKCJ1bnVzZWQiLGksdi5jb25jYXQoQSx4W0FdLmxlbmd0aCkpKTt2YXIgUD14W0FdLmxlbmd0aDtmb3Ioaz0wO2s8KE8/TWF0aC5taW4oUCxNW0FdLmxlbmd0aCk6UCk7aysrKUw9Tz9NW0FdW2tdOk0sUz15W0FdW2tdLEQ9eFtBXVtrXSxuLnZhbGlkYXRlKFMsTCk/RCE9PVMmJkQhPT0rUyYmYS5wdXNoKGgoImR5bmFtaWMiLGksdi5jb25jYXQoQSxrKSxTLEQpKTphLnB1c2goaCgidmFsdWUiLGksdi5jb25jYXQoQSxrKSxTKSl9ZWxzZSBhLnB1c2goaCgiYXJyYXkiLGksdi5jb25jYXQoQSkseVtBXSkpO2Vsc2UgZm9yKEE9MDtBPEM7QSsrKUw9Tz9NW0FdOk0sUz15W0FdLEQ9eFtBXSxuLnZhbGlkYXRlKFMsTCk/RCE9PVMmJkQhPT0rUyYmYS5wdXNoKGgoImR5bmFtaWMiLGksdi5jb25jYXQoQSksUyxEKSk6YS5wdXNoKGgoInZhbHVlIixpLHYuY29uY2F0KEEpLFMpKX1lbHNlIGlmKGIuaXRlbXMmJiF3JiZzKHkpKXt2YXIgSSxSLHo9TVtPYmplY3Qua2V5cyhNKVswXV0sTj1bXTtmb3IoST0wO0k8eC5sZW5ndGg7SSsrKXt2YXIgRj14W0ldLl9pbmRleHx8STtpZigoUj12LnNsaWNlKCkpLnB1c2goRiksbCh5W0ZdKSYmbCh4W0ldKSl7Ti5wdXNoKEYpO3ZhciBFPXlbRl0saj14W0ldO2woRSkmJiExIT09RS52aXNpYmxlJiYhMT09PWoudmlzaWJsZT9hLnB1c2goaCgiaW52aXNpYmxlIixpLFIpKTp1KEUsaix6LGEsaSxSKX19Zm9yKEk9MDtJPHkubGVuZ3RoO0krKykoUj12LnNsaWNlKCkpLnB1c2goSSksbCh5W0ldKT8tMT09PU4uaW5kZXhPZihJKSYmYS5wdXNoKGgoInVudXNlZCIsaSxSKSk6YS5wdXNoKGgoIm9iamVjdCIsaSxSLHlbSV0pKX1lbHNlIWwoeSkmJmwoeCk/YS5wdXNoKGgoIm9iamVjdCIsaSx2LHkpKTpjKHkpfHwhYyh4KXx8d3x8VD9wIGluIHQ/bi52YWxpZGF0ZSh5LGIpPyJlbnVtZXJhdGVkIj09PWIudmFsVHlwZSYmKGIuY29lcmNlTnVtYmVyJiZ5IT09K3h8fHkhPT14KSYmYS5wdXNoKGgoImR5bmFtaWMiLGksdix5LHgpKTphLnB1c2goaCgidmFsdWUiLGksdix5KSk6YS5wdXNoKGgoInVudXNlZCIsaSx2LHkpKTphLnB1c2goaCgiYXJyYXkiLGksdix5KSk7ZWxzZSBhLnB1c2goaCgic2NoZW1hIixpLHYpKX19cmV0dXJuIGF9ZnVuY3Rpb24gZChlLHQpe2Zvcih2YXIgcj1lLmxheW91dC5sYXlvdXRBdHRyaWJ1dGVzLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGk9dFthXSxvPWUudHJhY2VzW2kudHlwZV0sbD1vLmxheW91dEF0dHJpYnV0ZXM7bCYmKGkuc3VicGxvdD9uLmV4dGVuZEZsYXQocltvLmF0dHJpYnV0ZXMuc3VicGxvdC5kZmx0XSxsKTpuLmV4dGVuZEZsYXQocixsKSl9cmV0dXJuIHJ9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09ZSYmKGU9W10pLHZvaWQgMD09PXQmJih0PXt9KTt2YXIgcixjLGY9aS5nZXQoKSxwPVtdLGc9e19jb250ZXh0Om4uZXh0ZW5kRmxhdCh7fSxvKX07cyhlKT8oZy5kYXRhPW4uZXh0ZW5kRGVlcChbXSxlKSxyPWUpOihnLmRhdGE9W10scj1bXSxwLnB1c2goaCgiYXJyYXkiLCJkYXRhIikpKSxsKHQpPyhnLmxheW91dD1uLmV4dGVuZERlZXAoe30sdCksYz10KTooZy5sYXlvdXQ9e30sYz17fSxhcmd1bWVudHMubGVuZ3RoPjEmJnAucHVzaChoKCJvYmplY3QiLCJsYXlvdXQiKSkpLGEuc3VwcGx5RGVmYXVsdHMoZyk7Zm9yKHZhciBtPWcuX2Z1bGxEYXRhLHY9ci5sZW5ndGgseT0wO3k8djt5Kyspe3ZhciB4PXJbeV0sYj1bImRhdGEiLHldO2lmKGwoeCkpe3ZhciBfPW1beV0sdz1fLnR5cGUsVD1mLnRyYWNlc1t3XS5hdHRyaWJ1dGVzO1QudHlwZT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlt3XX0sITE9PT1fLnZpc2libGUmJiExIT09eC52aXNpYmxlJiZwLnB1c2goaCgiaW52aXNpYmxlIixiKSksdSh4LF8sVCxwLGIpO3ZhciBNPXgudHJhbnNmb3JtcyxrPV8udHJhbnNmb3JtcztpZihNKXtzKE0pfHxwLnB1c2goaCgiYXJyYXkiLGIsWyJ0cmFuc2Zvcm1zIl0pKSxiLnB1c2goInRyYW5zZm9ybXMiKTtmb3IodmFyIEE9MDtBPE0ubGVuZ3RoO0ErKyl7dmFyIEw9WyJ0cmFuc2Zvcm1zIixBXSxTPU1bQV0udHlwZTtpZihsKE1bQV0pKXt2YXIgRD1mLnRyYW5zZm9ybXNbU10/Zi50cmFuc2Zvcm1zW1NdLmF0dHJpYnV0ZXM6e307RC50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMoZi50cmFuc2Zvcm1zKX0sdShNW0FdLGtbQV0sRCxwLGIsTCl9ZWxzZSBwLnB1c2goaCgib2JqZWN0IixiLEwpKX19fWVsc2UgcC5wdXNoKGgoIm9iamVjdCIsYikpfXZhciBDPWcuX2Z1bGxMYXlvdXQsTz1kKGYsbSk7cmV0dXJuIHUoYyxDLE8scCwibGF5b3V0IiksMD09PXAubGVuZ3RoP3ZvaWQgMDpwfTt2YXIgZj17b2JqZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuKCJsYXlvdXQiPT09ZSYmIiI9PT10PyJUaGUgbGF5b3V0IGFyZ3VtZW50IjoiZGF0YSI9PT1lWzBdJiYiIj09PXQ/IlRyYWNlICIrZVsxXSsiIGluIHRoZSBkYXRhIGFyZ3VtZW50IjpwKGUpKyJrZXkgIit0KSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIG9iamVjdCBjb250YWluZXIifSxhcnJheTpmdW5jdGlvbihlLHQpe3JldHVybigiZGF0YSI9PT1lPyJUaGUgZGF0YSBhcmd1bWVudCI6cChlKSsia2V5ICIrdCkrIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBhcnJheSBjb250YWluZXIifSxzY2hlbWE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlKSsia2V5ICIrdCsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBzY2hlbWEifSx1bnVzZWQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWwocik/ImNvbnRhaW5lciI6ImtleSI7cmV0dXJuIHAoZSkrbisiICIrdCsiIGRpZCBub3QgZ2V0IGNvZXJjZWQifSxkeW5hbWljOmZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybltwKGUpKyJrZXkiLHQsIihzZXQgdG8gJyIrcisiJykiLCJnb3QgcmVzZXQgdG8iLCInIituKyInIiwiZHVyaW5nIGRlZmF1bHRzLiJdLmpvaW4oIiAiKX0saW52aXNpYmxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ/cChlKSsiaXRlbSAiK3Q6IlRyYWNlICIrZVsxXSkrIiBnb3QgZGVmYXVsdGVkIHRvIGJlIG5vdCB2aXNpYmxlIn0sdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3JldHVybltwKGUpKyJrZXkgIit0LCJpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAoIityKyIpIl0uam9pbigiICIpfX07ZnVuY3Rpb24gcChlKXtyZXR1cm4gcyhlKT8iSW4gZGF0YSB0cmFjZSAiK2VbMV0rIiwgIjoiSW4gIitlKyIsICJ9ZnVuY3Rpb24gaChlLHQscixhLGkpe3ZhciBvLGw7cj1yfHwiIixzKHQpPyhvPXRbMF0sbD10WzFdKToobz10LGw9bnVsbCk7dmFyIGM9ZnVuY3Rpb24oZSl7aWYoIXMoZSkpcmV0dXJuIFN0cmluZyhlKTtmb3IodmFyIHQ9IiIscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdOyJudW1iZXIiPT10eXBlb2Ygbj90PXQuc3Vic3RyKDAsdC5sZW5ndGgtMSkrIlsiK24rIl0iOnQrPW4scjxlLmxlbmd0aC0xJiYodCs9Ii4iKX1yZXR1cm4gdH0ociksdT1mW2VdKHQsYyxhLGkpO3JldHVybiBuLmxvZyh1KSx7Y29kZTplLGNvbnRhaW5lcjpvLHRyYWNlOmwscGF0aDpyLGFzdHI6Yyxtc2c6dX19ZnVuY3Rpb24gZyhlLHQpe3ZhciByPXkodCksbj1yLmtleU1pbnVzSWQsYT1yLmlkO3JldHVybiEhKG4gaW4gZSYmZVtuXS5faXNTdWJwbG90T2JqJiZhKXx8dCBpbiBlfWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gdCBpbiBlP2VbdF06ZVt5KHQpLmtleU1pbnVzSWRdfXZhciB2PW4uY291bnRlclJlZ2V4KCIoW2Etel0rKSIpO2Z1bmN0aW9uIHkoZSl7dmFyIHQ9ZS5tYXRjaCh2KTtyZXR1cm57a2V5TWludXNJZDp0JiZ0WzFdLGlkOnQmJnRbMl19fX0seyIuLi9saWIiOjIzMiwiLi4vcGxvdHMvcGxvdHMiOjMxNiwiLi9wbG90X2NvbmZpZyI6MjY2LCIuL3Bsb3Rfc2NoZW1hIjoyNjd9XSwyNzM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhZnRlcmFsbCIsdmFsdWVzOlsiaW1tZWRpYXRlIiwibmV4dCIsImFmdGVyYWxsIl19LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZm9yd2FyZCIsInJldmVyc2UiXSxkZmx0OiJmb3J3YXJkIn0sZnJvbWN1cnJlbnQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZyYW1lOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMH0scmVkcmF3Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1MDAsZWRpdFR5cGU6Im5vbmUifSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImN1YmljLWluLW91dCIsdmFsdWVzOlsibGluZWFyIiwicXVhZCIsImN1YmljIiwic2luIiwiZXhwIiwiY2lyY2xlIiwiZWxhc3RpYyIsImJhY2siLCJib3VuY2UiLCJsaW5lYXItaW4iLCJxdWFkLWluIiwiY3ViaWMtaW4iLCJzaW4taW4iLCJleHAtaW4iLCJjaXJjbGUtaW4iLCJlbGFzdGljLWluIiwiYmFjay1pbiIsImJvdW5jZS1pbiIsImxpbmVhci1vdXQiLCJxdWFkLW91dCIsImN1YmljLW91dCIsInNpbi1vdXQiLCJleHAtb3V0IiwiY2lyY2xlLW91dCIsImVsYXN0aWMtb3V0IiwiYmFjay1vdXQiLCJib3VuY2Utb3V0IiwibGluZWFyLWluLW91dCIsInF1YWQtaW4tb3V0IiwiY3ViaWMtaW4tb3V0Iiwic2luLWluLW91dCIsImV4cC1pbi1vdXQiLCJjaXJjbGUtaW4tb3V0IiwiZWxhc3RpYy1pbi1vdXQiLCJiYWNrLWluLW91dCIsImJvdW5jZS1pbi1vdXQiXSxlZGl0VHlwZToibm9uZSJ9LG9yZGVyaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsYXlvdXQgZmlyc3QiLCJ0cmFjZXMgZmlyc3QiXSxkZmx0OiJsYXlvdXQgZmlyc3QiLGVkaXRUeXBlOiJub25lIn19fX0se31dLDI3NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIiKSxhPWUoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLG8sbD1yLm5hbWUscz1yLmluY2x1c2lvbkF0dHJ8fCJ2aXNpYmxlIixjPXRbbF0sdT1uLmlzQXJyYXlPclR5cGVkQXJyYXkoZVtsXSk/ZVtsXTpbXSxkPXRbbF09W10sZj1hLmFycmF5VGVtcGxhdGVyKHQsbCxzKTtmb3IoaT0wO2k8dS5sZW5ndGg7aSsrKXt2YXIgcD11W2ldO24uaXNQbGFpbk9iamVjdChwKT9vPWYubmV3SXRlbShwKToobz1mLm5ld0l0ZW0oe30pKVtzXT0hMSxvLl9pbmRleD1pLCExIT09b1tzXSYmci5oYW5kbGVJdGVtRGVmYXVsdHMocCxvLHQsciksZC5wdXNoKG8pfXZhciBoPWYuZGVmYXVsdEl0ZW1zKCk7Zm9yKGk9MDtpPGgubGVuZ3RoO2krKykobz1oW2ldKS5faW5kZXg9ZC5sZW5ndGgsci5oYW5kbGVJdGVtRGVmYXVsdHMoe30sbyx0LHIse30pLGQucHVzaChvKTtpZihuLmlzQXJyYXlPclR5cGVkQXJyYXkoYykpe3ZhciBnPU1hdGgubWluKGMubGVuZ3RoLGQubGVuZ3RoKTtmb3IoaT0wO2k8ZztpKyspbi5yZWxpbmtQcml2YXRlS2V5cyhkW2ldLGNbaV0pfXJldHVybiBkfX0seyIuLi9saWIiOjIzMiwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjY4fV0sMjc1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vZm9udF9hdHRyaWJ1dGVzIiksYT1lKCIuLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKTt0LmV4cG9ydHM9e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXSxkZmx0OiJzY2F0dGVyIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsX25vVGVtcGxhdGluZzohMH0sdmlzaWJsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwibGVnZW5kb25seSJdLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxzaG93bGVnZW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGxlZ2VuZGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InN0eWxlIn0sbGVnZW5kZ3JvdXB0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJzdHlsZSJ9LGZvbnQ6bih7ZWRpdFR5cGU6InN0eWxlIn0pLGVkaXRUeXBlOiJzdHlsZSJ9LGxlZ2VuZHJhbms6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxZTMsZWRpdFR5cGU6InN0eWxlIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToic3R5bGUifSx1aWQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QiLGFuaW06ITB9LGlkczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LGN1c3RvbWRhdGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbWV0YTp7dmFsVHlwZToiYW55IixhcnJheU9rOiEwLGVkaXRUeXBlOiJwbG90In0sc2VsZWN0ZWRwb2ludHM6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcmluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIngiLCJ5IiwieiIsInRleHQiLCJuYW1lIl0sZXh0cmFzOlsiYWxsIiwibm9uZSIsInNraXAiXSxhcnJheU9rOiEwLGRmbHQ6ImFsbCIsZWRpdFR5cGU6Im5vbmUifSxob3ZlcmxhYmVsOmEuaG92ZXJsYWJlbCxzdHJlYW06e3Rva2VuOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWF4cG9pbnRzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxZTQsZGZsdDo1MDAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRyYW5zZm9ybXM6e19pc0xpbmtlZFRvQXJyYXk6InRyYW5zZm9ybSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyI6MTMzLCIuL2ZvbnRfYXR0cmlidXRlcyI6MzEwfV0sMjc2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuLi8uLi9saWIiKSxpPWEuZGF0ZVRpbWUybXMsbz1hLmluY3JlbWVudE1vbnRoLGw9ZSgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLk9ORUFWR01PTlRIO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixhKXtpZigiZGF0ZSIhPT10LnR5cGUpcmV0dXJue3ZhbHM6YX07dmFyIHM9ZVtyKyJwZXJpb2RhbGlnbm1lbnQiXTtpZighcylyZXR1cm57dmFsczphfTt2YXIgYyx1PWVbcisicGVyaW9kIl07aWYobih1KSl7aWYoKHU9K3UpPD0wKXJldHVybnt2YWxzOmF9fWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB1JiYiTSI9PT11LmNoYXJBdCgwKSl7dmFyIGQ9K3Uuc3Vic3RyaW5nKDEpO2lmKCEoZD4wJiZNYXRoLnJvdW5kKGQpPT09ZCkpcmV0dXJue3ZhbHM6YX07Yz1kfWZvcih2YXIgZj10LmNhbGVuZGFyLHA9InN0YXJ0Ij09PXMsaD0iZW5kIj09PXMsZz1lW3IrInBlcmlvZDAiXSxtPWkoZyxmKXx8MCx2PVtdLHk9W10seD1bXSxiPWEubGVuZ3RoLF89MDtfPGI7XysrKXt2YXIgdyxULE0saz1hW19dO2lmKGMpe2Zvcih3PU1hdGgucm91bmQoKGstbSkvKGMqbCkpLE09byhtLGMqdyxmKTtNPms7KU09byhNLC1jLGYpO2Zvcig7TTw9azspTT1vKE0sYyxmKTtUPW8oTSwtYyxmKX1lbHNle2ZvcihNPW0rKHc9TWF0aC5yb3VuZCgoay1tKS91KSkqdTtNPms7KU0tPXU7Zm9yKDtNPD1rOylNKz11O1Q9TS11fXZbX109cD9UOmg/TTooVCtNKS8yLHlbX109VCx4W19dPU19cmV0dXJue3ZhbHM6dixzdGFydHM6eSxlbmRzOnh9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjoyMTIsIi4uLy4uL2xpYiI6MjMyLCJmYXN0LWlzbnVtZXJpYyI6MTd9XSwyNzc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXt4YXhpczp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ4IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHlheGlzOnt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6InkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn19fSx7fV0sMjc4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoImZhc3QtaXNudW1lcmljIiksaT1lKCIuLi8uLi9saWIiKSxvPWUoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5GUF9TQUZFLGw9ZSgiLi4vLi4vcmVnaXN0cnkiKSxzPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9ZSgiLi9heGlzX2lkcyIpLHU9Yy5nZXRGcm9tSWQsZD1jLmlzTGlua2VkO2Z1bmN0aW9uIGYoZSx0KXt2YXIgcixuLGE9W10sbz1lLl9mdWxsTGF5b3V0LGw9aChvLHQsMCkscz1oKG8sdCwxKSxjPWcoZSx0KSx1PWMubWluLGQ9Yy5tYXg7aWYoMD09PXUubGVuZ3RofHwwPT09ZC5sZW5ndGgpcmV0dXJuIGkuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO3ZhciBmPXVbMF0udmFsLG09ZFswXS52YWw7Zm9yKHI9MTtyPHUubGVuZ3RoJiZmPT09bTtyKyspZj1NYXRoLm1pbihmLHVbcl0udmFsKTtmb3Iocj0xO3I8ZC5sZW5ndGgmJmY9PT1tO3IrKyltPU1hdGgubWF4KG0sZFtyXS52YWwpO3ZhciB2PSExO2lmKHQucmFuZ2Upe3ZhciB5PWkuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO3Y9eVsxXTx5WzBdfSJyZXZlcnNlZCI9PT10LmF1dG9yYW5nZSYmKHY9ITAsdC5hdXRvcmFuZ2U9ITApO3ZhciB4LGIsXyx3LFQsTSxrPXQucmFuZ2Vtb2RlLEE9InRvemVybyI9PT1rLEw9Im5vbm5lZ2F0aXZlIj09PWssUz10Ll9sZW5ndGgsRD1TLzEwLEM9MDtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKWZvcih4PXVbcl0sbj0wO248ZC5sZW5ndGg7bisrKShNPShiPWRbbl0pLnZhbC14LnZhbC1wKHQseC52YWwsYi52YWwpKT4wJiYoKFQ9Uy1sKHgpLXMoYikpPkQ/TS9UPkMmJihfPXgsdz1iLEM9TS9UKTpNL1M+QyYmKF89e3ZhbDp4LnZhbCxub3BhZDoxfSx3PXt2YWw6Yi52YWwsbm9wYWQ6MX0sQz1NL1MpKTtpZihmPT09bSl7dmFyIE89Zi0xLFA9ZisxO2lmKEEpaWYoMD09PWYpYT1bMCwxXTtlbHNle3ZhciBJPShmPjA/ZDp1KS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUscyh0KSl9KSwwKSxSPWYvKDEtTWF0aC5taW4oLjUsSS9TKSk7YT1mPjA/WzAsUl06W1IsMF19ZWxzZSBhPUw/W01hdGgubWF4KDAsTyksTWF0aC5tYXgoMSxQKV06W08sUF19ZWxzZSBBPyhfLnZhbD49MCYmKF89e3ZhbDowLG5vcGFkOjF9KSx3LnZhbDw9MCYmKHc9e3ZhbDowLG5vcGFkOjF9KSk6TCYmKF8udmFsLUMqbChfKTwwJiYoXz17dmFsOjAsbm9wYWQ6MX0pLHcudmFsPD0wJiYodz17dmFsOjEsbm9wYWQ6MX0pKSxDPSh3LnZhbC1fLnZhbC1wKHQseC52YWwsYi52YWwpKS8oUy1sKF8pLXModykpLGE9W18udmFsLUMqbChfKSx3LnZhbCtDKnModyldO3JldHVybiB2JiZhLnJldmVyc2UoKSxpLnNpbXBsZU1hcChhLHQubDJyfHxOdW1iZXIpfWZ1bmN0aW9uIHAoZSx0LHIpe3ZhciBuPTA7aWYoZS5yYW5nZWJyZWFrcylmb3IodmFyIGE9ZS5sb2NhdGVCcmVha3ModCxyKSxpPTA7aTxhLmxlbmd0aDtpKyspe3ZhciBvPWFbaV07bis9by5tYXgtby5taW59cmV0dXJuIG59ZnVuY3Rpb24gaChlLHQscil7dmFyIGE9LjA1KnQuX2xlbmd0aCxvPXQuX2FuY2hvckF4aXN8fHt9O2lmKC0xIT09KHQudGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKXx8LTEhPT0oby50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpKXt2YXIgbD0icmV2ZXJzZWQiPT09dC5hdXRvcmFuZ2U7aWYoIWwpe3ZhciBjPWkuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2w9Y1sxXTxjWzBdfWwmJihyPSFyKX12YXIgdT0wO3JldHVybiBkKGUsdC5faWQpfHwodT1mdW5jdGlvbihlLHQscil7dmFyIGE9MCxvPSJ4Ij09PXQuX2lkLmNoYXJBdCgwKTtmb3IodmFyIGwgaW4gZS5fcGxvdHMpe3ZhciBjPWUuX3Bsb3RzW2xdO2lmKHQuX2lkPT09Yy54YXhpcy5faWR8fHQuX2lkPT09Yy55YXhpcy5faWQpe3ZhciB1PShvP2MueWF4aXM6Yy54YXhpcyl8fHt9O2lmKC0xIT09KHUudGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKSYmKCFyJiYoImxlZnQiPT09dS5zaWRlfHwiYm90dG9tIj09PXUuc2lkZSl8fHImJigidG9wIj09PXUuc2lkZXx8InJpZ2h0Ij09PXUuc2lkZSkpKXtpZih1Ll92YWxzKXt2YXIgZD1pLmRlZzJyYWQodS5fdGlja0FuZ2xlc1t1Ll9pZCsidGljayJdfHwwKSxmPU1hdGguYWJzKE1hdGguY29zKGQpKSxwPU1hdGguYWJzKE1hdGguc2luKGQpKTtpZighdS5fdmFsc1swXS5iYil7dmFyIGg9dS5faWQrInRpY2siO3UuX3NlbGVjdGlvbnNbaF0uZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5zZWxlY3QoIi50ZXh0LW1hdGgtZ3JvdXAiKS5lbXB0eSgpJiYoZS5iYj1zLmJCb3godC5ub2RlKCkpKX0pKX1mb3IodmFyIGc9MDtnPHUuX3ZhbHMubGVuZ3RoO2crKyl7dmFyIG09dS5fdmFsc1tnXS5iYjtpZihtKXt2YXIgdj02K20ud2lkdGgseT02K20uaGVpZ2h0O2E9TWF0aC5tYXgoYSxvP01hdGgubWF4KHYqZix5KnApOk1hdGgubWF4KHkqZix2KnApKX19fSJpbnNpZGUiPT09dS50aWNrcyYmImluc2lkZSI9PT11LnRpY2tsYWJlbHBvc2l0aW9uJiYoYSs9dS50aWNrbGVufHwwKX19fXJldHVybiBhfShlLHQscikpLGE9TWF0aC5tYXgodSxhKSwiZG9tYWluIj09PXQuY29uc3RyYWluJiZ0Ll9pbnB1dERvbWFpbiYmKGEqPSh0Ll9pbnB1dERvbWFpblsxXS10Ll9pbnB1dERvbWFpblswXSkvKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9wYWQ/MDplLnBhZCsoZS5leHRyYXBhZD9hOnUpfX10LmV4cG9ydHM9e2dldEF1dG9SYW5nZTpmLG1ha2VQYWRGbjpoLGRvQXV0b1JhbmdlOmZ1bmN0aW9uKGUsdCxyKXtpZih0LnNldFNjYWxlKCksdC5hdXRvcmFuZ2Upe3QucmFuZ2U9cj9yLnNsaWNlKCk6ZihlLHQpLHQuX3I9dC5yYW5nZS5zbGljZSgpLHQuX3JsPWkuc2ltcGxlTWFwKHQuX3IsdC5yMmwpO3ZhciBuPXQuX2lucHV0LGE9e307YVt0Ll9hdHRyKyIucmFuZ2UiXT10LnJhbmdlLGFbdC5fYXR0cisiLmF1dG9yYW5nZSJdPXQuYXV0b3JhbmdlLGwuY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsZS5sYXlvdXQsZS5fZnVsbExheW91dC5fcHJlR1VJLGEpLG4ucmFuZ2U9dC5yYW5nZS5zbGljZSgpLG4uYXV0b3JhbmdlPXQuYXV0b3JhbmdlfXZhciBvPXQuX2FuY2hvckF4aXM7aWYobyYmby5yYW5nZXNsaWRlcil7dmFyIHM9by5yYW5nZXNsaWRlclt0Ll9uYW1lXTtzJiYiYXV0byI9PT1zLnJhbmdlbW9kZSYmKHMucmFuZ2U9ZihlLHQpKSxvLl9pbnB1dC5yYW5nZXNsaWRlclt0Ll9uYW1lXT1pLmV4dGVuZEZsYXQoe30scyl9fSxmaW5kRXh0cmVtZXM6ZnVuY3Rpb24oZSx0LHIpe3J8fChyPXt9KTtlLl9tfHxlLnNldFNjYWxlKCk7dmFyIG4saSxsLHMsYyx1LGQsZixwLGg9W10sZz1bXSx5PXQubGVuZ3RoLGI9ci5wYWRkZWR8fCExLF89ci50b3plcm8mJigibGluZWFyIj09PWUudHlwZXx8Ii0iPT09ZS50eXBlKSx3PSJsb2ciPT09ZS50eXBlLFQ9ITEsTT1yLnZwYWRMaW5lYXJpemVkfHwhMTtmdW5jdGlvbiBrKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIFQ9ITAsZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KE51bWJlcihlW3RdfHwwKSwwKX07dmFyIHQ9TWF0aC5tYXgoTnVtYmVyKGV8fDApLDApO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgQT1rKChlLl9tPjA/ci5wcGFkcGx1czpyLnBwYWRtaW51cyl8fHIucHBhZHx8MCksTD1rKChlLl9tPjA/ci5wcGFkbWludXM6ci5wcGFkcGx1cyl8fHIucHBhZHx8MCksUz1rKHIudnBhZHBsdXN8fHIudnBhZCksRD1rKHIudnBhZG1pbnVzfHxyLnZwYWQpO2lmKCFUKXtpZihmPTEvMCxwPS0xLzAsdylmb3Iobj0wO248eTtuKyspKGk9dFtuXSk8ZiYmaT4wJiYoZj1pKSxpPnAmJmk8byYmKHA9aSk7ZWxzZSBmb3Iobj0wO248eTtuKyspKGk9dFtuXSk8ZiYmaT4tbyYmKGY9aSksaT5wJiZpPG8mJihwPWkpO3Q9W2YscF0seT0yfXZhciBDPXt0b3plcm86XyxleHRyYXBhZDpifTtmdW5jdGlvbiBPKHIpe2w9dFtyXSxhKGwpJiYodT1BKHIpLGQ9TChyKSxNPyhzPWUuYzJsKGwpLUQociksYz1lLmMybChsKStTKHIpKTooZj1sLUQocikscD1sK1MociksdyYmZjxwLzEwJiYoZj1wLzEwKSxzPWUuYzJsKGYpLGM9ZS5jMmwocCkpLF8mJihzPU1hdGgubWluKDAscyksYz1NYXRoLm1heCgwLGMpKSx4KHMpJiZtKGgscyxkLEMpLHgoYykmJnYoZyxjLHUsQykpfXZhciBQPU1hdGgubWluKDYseSk7Zm9yKG49MDtuPFA7bisrKU8obik7Zm9yKG49eS0xO24+PVA7bi0tKU8obik7cmV0dXJue21pbjpoLG1heDpnLG9wdHM6cn19LGNvbmNhdEV4dHJlbWVzOmd9O2Z1bmN0aW9uIGcoZSx0LHIpe3ZhciBuLGEsaSxvPXQuX2lkLGw9ZS5fZnVsbERhdGEscz1lLl9mdWxsTGF5b3V0LGM9W10sZD1bXTtmdW5jdGlvbiBmKGUsdCl7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9ZVt0W25dXSxsPShyLl9leHRyZW1lc3x8e30pW29dO2lmKCEwPT09ci52aXNpYmxlJiZsKXtmb3IoYT0wO2E8bC5taW4ubGVuZ3RoO2ErKylpPWwubWluW2FdLG0oYyxpLnZhbCxpLnBhZCx7ZXh0cmFwYWQ6aS5leHRyYXBhZH0pO2ZvcihhPTA7YTxsLm1heC5sZW5ndGg7YSsrKWk9bC5tYXhbYV0sdihkLGkudmFsLGkucGFkLHtleHRyYXBhZDppLmV4dHJhcGFkfSl9fX1pZihmKGwsdC5fdHJhY2VJbmRpY2VzKSxmKHMuYW5ub3RhdGlvbnN8fFtdLHQuX2FubkluZGljZXN8fFtdKSxmKHMuc2hhcGVzfHxbXSx0Ll9zaGFwZUluZGljZXN8fFtdKSx0Ll9tYXRjaEdyb3VwJiYhcilmb3IodmFyIHAgaW4gdC5fbWF0Y2hHcm91cClpZihwIT09dC5faWQpe3ZhciBoPXUoZSxwKSx5PWcoZSxoLCEwKSx4PXQuX2xlbmd0aC9oLl9sZW5ndGg7Zm9yKGE9MDthPHkubWluLmxlbmd0aDthKyspaT15Lm1pblthXSxtKGMsaS52YWwsaS5wYWQqeCx7ZXh0cmFwYWQ6aS5leHRyYXBhZH0pO2ZvcihhPTA7YTx5Lm1heC5sZW5ndGg7YSsrKWk9eS5tYXhbYV0sdihkLGkudmFsLGkucGFkKngse2V4dHJhcGFkOmkuZXh0cmFwYWR9KX1yZXR1cm57bWluOmMsbWF4OmR9fWZ1bmN0aW9uIG0oZSx0LHIsbil7eShlLHQscixuLGIpfWZ1bmN0aW9uIHYoZSx0LHIsbil7eShlLHQscixuLF8pfWZ1bmN0aW9uIHkoZSx0LHIsbixhKXtmb3IodmFyIGk9bi50b3plcm8sbz1uLmV4dHJhcGFkLGw9ITAscz0wO3M8ZS5sZW5ndGgmJmw7cysrKXt2YXIgYz1lW3NdO2lmKGEoYy52YWwsdCkmJmMucGFkPj1yJiYoYy5leHRyYXBhZHx8IW8pKXtsPSExO2JyZWFrfWEodCxjLnZhbCkmJmMucGFkPD1yJiYob3x8IWMuZXh0cmFwYWQpJiYoZS5zcGxpY2UocywxKSxzLS0pfWlmKGwpe3ZhciB1PWkmJjA9PT10O2UucHVzaCh7dmFsOnQscGFkOnU/MDpyLGV4dHJhcGFkOiF1JiZvfSl9fWZ1bmN0aW9uIHgoZSl7cmV0dXJuIGEoZSkmJk1hdGguYWJzKGUpPG99ZnVuY3Rpb24gYihlLHQpe3JldHVybiBlPD10fWZ1bmN0aW9uIF8oZSx0KXtyZXR1cm4gZT49dH19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjoxMjQsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjIxMiwiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4vYXhpc19pZHMiOjI4MywiQHBsb3RseS9kMyI6MTEsImZhc3QtaXNudW1lcmljIjoxN31dLDI3OTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJAcGxvdGx5L2QzIiksYT1lKCJmYXN0LWlzbnVtZXJpYyIpLGk9ZSgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPWUoIi4uLy4uL3JlZ2lzdHJ5IiksbD1lKCIuLi8uLi9saWIiKSxzPWwuc3RyVHJhbnNsYXRlLGM9ZSgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdT1lKCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyIpLGQ9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGY9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscD1lKCIuL2xheW91dF9hdHRyaWJ1dGVzIiksaD1lKCIuL2NsZWFuX3RpY2tzIiksZz1lKCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbT1nLk9ORU1BWFlFQVIsdj1nLk9ORUFWR1lFQVIseT1nLk9ORU1JTllFQVIseD1nLk9ORU1BWFFVQVJURVIsYj1nLk9ORUFWR1FVQVJURVIsXz1nLk9ORU1JTlFVQVJURVIsdz1nLk9ORU1BWE1PTlRILFQ9Zy5PTkVBVkdNT05USCxNPWcuT05FTUlOTU9OVEgsaz1nLk9ORVdFRUssQT1nLk9ORURBWSxMPUEvMixTPWcuT05FSE9VUixEPWcuT05FTUlOLEM9Zy5PTkVTRUMsTz1nLk1JTlVTX1NJR04sUD1nLkJBRE5VTSxJPXtLOiJ6ZXJvbGluZSJ9LFI9e0s6ImdyaWRsaW5lIixMOiJwYXRoIn0sej17SzoidGljayIsTDoicGF0aCJ9LE49e0s6InRpY2siLEw6InRleHQifSxGPWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxFPUYuTUlEX1NISUZULGo9Ri5DQVBfU0hJRlQsSD1GLkxJTkVfU1BBQ0lORyxCPUYuT1BQT1NJVEVfU0lERSxZPXQuZXhwb3J0cz17fTtZLnNldENvbnZlcnQ9ZSgiLi9zZXRfY29udmVydCIpO3ZhciBWPWUoIi4vYXhpc19hdXRvdHlwZSIpLFU9ZSgiLi9heGlzX2lkcyIpLHE9VS5pZFNvcnQsRz1VLmlzTGlua2VkO1kuaWQybmFtZT1VLmlkMm5hbWUsWS5uYW1lMmlkPVUubmFtZTJpZCxZLmNsZWFuSWQ9VS5jbGVhbklkLFkubGlzdD1VLmxpc3QsWS5saXN0SWRzPVUubGlzdElkcyxZLmdldEZyb21JZD1VLmdldEZyb21JZCxZLmdldEZyb21UcmFjZT1VLmdldEZyb21UcmFjZTt2YXIgWj1lKCIuL2F1dG9yYW5nZSIpO1kuZ2V0QXV0b1JhbmdlPVouZ2V0QXV0b1JhbmdlLFkuZmluZEV4dHJlbWVzPVouZmluZEV4dHJlbWVzO2Z1bmN0aW9uIFcoZSl7dmFyIHQ9MWUtNCooZVsxXS1lWzBdKTtyZXR1cm5bZVswXS10LGVbMV0rdF19WS5jb2VyY2VSZWY9ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvPW4uY2hhckF0KG4ubGVuZ3RoLTEpLHM9ci5fZnVsbExheW91dC5fc3VicGxvdHNbbysiYXhpcyJdLGM9bisicmVmIix1PXt9O3JldHVybiBhfHwoYT1zWzBdfHwoInN0cmluZyI9PXR5cGVvZiBpP2k6aVswXSkpLGl8fChpPWEpLHM9cy5jb25jYXQocy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlKyIgZG9tYWluIn0pKSksdVtjXT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMuY29uY2F0KGk/InN0cmluZyI9PXR5cGVvZiBpP1tpXTppOltdKSxkZmx0OmF9LGwuY29lcmNlKGUsdCx1LGMpfSxZLmdldFJlZlR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/ZToicGFwZXIiPT09ZT8icGFwZXIiOiJwaXhlbCI9PT1lPyJwaXhlbCI6LyggZG9tYWluKSQvLnRlc3QoZSk/ImRvbWFpbiI6InJhbmdlIn0sWS5jb2VyY2VQb3NpdGlvbj1mdW5jdGlvbihlLHQscixuLGEsaSl7dmFyIG8scztpZigicmFuZ2UiIT09WS5nZXRSZWZUeXBlKG4pKW89bC5lbnN1cmVOdW1iZXIscz1yKGEsaSk7ZWxzZXt2YXIgYz1ZLmdldEZyb21JZCh0LG4pO3M9cihhLGk9Yy5mcmFjdGlvbjJyKGkpKSxvPWMuY2xlYW5Qb3N9ZVthXT1vKHMpfSxZLmNsZWFuUG9zaXRpb249ZnVuY3Rpb24oZSx0LHIpe3JldHVybigicGFwZXIiPT09cnx8InBpeGVsIj09PXI/bC5lbnN1cmVOdW1iZXI6WS5nZXRGcm9tSWQodCxyKS5jbGVhblBvcykoZSl9LFkucmVkcmF3Q29tcG9uZW50cz1mdW5jdGlvbihlLHQpe3Q9dHx8WS5saXN0SWRzKGUpO3ZhciByPWUuX2Z1bGxMYXlvdXQ7ZnVuY3Rpb24gbihuLGEsaSxsKXtmb3IodmFyIHM9by5nZXRDb21wb25lbnRNZXRob2QobixhKSxjPXt9LHU9MDt1PHQubGVuZ3RoO3UrKylmb3IodmFyIGQ9cltZLmlkMm5hbWUodFt1XSldW2ldLGY9MDtmPGQubGVuZ3RoO2YrKyl7dmFyIHA9ZFtmXTtpZighY1twXSYmKHMoZSxwKSxjW3BdPTEsbCkpcmV0dXJufX1uKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiLCJfYW5uSW5kaWNlcyIpLG4oInNoYXBlcyIsImRyYXdPbmUiLCJfc2hhcGVJbmRpY2VzIiksbigiaW1hZ2VzIiwiZHJhdyIsIl9pbWdJbmRpY2VzIiwhMCl9O3ZhciBYPVkuZ2V0RGF0YUNvbnZlcnNpb25zPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGk9IngiPT09cnx8InkiPT09cnx8InoiPT09cj9yOm47aWYoQXJyYXkuaXNBcnJheShpKSl7aWYoYT17dHlwZTpWKG4sdm9pZCAwLHthdXRvdHlwZW51bWJlcnM6ZS5fZnVsbExheW91dC5hdXRvdHlwZW51bWJlcnN9KSxfY2F0ZWdvcmllczpbXX0sWS5zZXRDb252ZXJ0KGEpLCJjYXRlZ29yeSI9PT1hLnR5cGUpZm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspYS5kMmMobltvXSl9ZWxzZSBhPVkuZ2V0RnJvbVRyYWNlKGUsdCxpKTtyZXR1cm4gYT97ZDJjOmEuZDJjLGMyZDphLmMyZH06ImlkcyI9PT1pP3tkMmM6USxjMmQ6UX06e2QyYzpKLGMyZDpKfX07ZnVuY3Rpb24gSihlKXtyZXR1cm4rZX1mdW5jdGlvbiBRKGUpe3JldHVybiBTdHJpbmcoZSl9ZnVuY3Rpb24gSyhlKXtyZXR1cm4rZS5zdWJzdHJpbmcoMSl9WS5nZXREYXRhVG9Db29yZEZ1bmM9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFgoZSx0LHIsbikuZDJjfSxZLmNvdW50ZXJMZXR0ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGFyQXQoMCk7cmV0dXJuIngiPT09dD8ieSI6InkiPT09dD8ieCI6dm9pZCAwfSxZLm1pbkR0aWNrPWZ1bmN0aW9uKGUsdCxyLG4pey0xPT09WyJsb2ciLCJjYXRlZ29yeSIsIm11bHRpY2F0ZWdvcnkiXS5pbmRleE9mKGUudHlwZSkmJm4/dm9pZCAwPT09ZS5fbWluRHRpY2s/KGUuX21pbkR0aWNrPXQsZS5fZm9yY2VUaWNrMD1yKTplLl9taW5EdGljayYmKChlLl9taW5EdGljay90KzFlLTYpJTE8MmUtNiYmKChyLWUuX2ZvcmNlVGljazApL3QlMSsxLjAwMDAwMSklMTwyZS02PyhlLl9taW5EdGljaz10LGUuX2ZvcmNlVGljazA9cik6KCh0L2UuX21pbkR0aWNrKzFlLTYpJTE+MmUtNnx8KChyLWUuX2ZvcmNlVGljazApL2UuX21pbkR0aWNrJTErMS4wMDAwMDEpJTE+MmUtNikmJihlLl9taW5EdGljaz0wKSk6ZS5fbWluRHRpY2s9MH0sWS5zYXZlUmFuZ2VJbml0aWFsPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVkubGlzdChlLCIiLCEwKSxuPSExLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGk9clthXSxvPXZvaWQgMD09PWkuX3JhbmdlSW5pdGlhbCxsPW98fCEoaS5yYW5nZVswXT09PWkuX3JhbmdlSW5pdGlhbFswXSYmaS5yYW5nZVsxXT09PWkuX3JhbmdlSW5pdGlhbFsxXSk7KG8mJiExPT09aS5hdXRvcmFuZ2V8fHQmJmwpJiYoaS5fcmFuZ2VJbml0aWFsPWkucmFuZ2Uuc2xpY2UoKSxuPSEwKX1yZXR1cm4gbn0sWS5zYXZlU2hvd1NwaWtlSW5pdGlhbD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1ZLmxpc3QoZSwiIiwhMCksbj0hMSxhPSJvbiIsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldLGw9dm9pZCAwPT09by5fc2hvd1NwaWtlSW5pdGlhbCxzPWx8fCEoby5zaG93c3Bpa2VzPT09by5fc2hvd3NwaWtlcyk7KGx8fHQmJnMpJiYoby5fc2hvd1NwaWtlSW5pdGlhbD1vLnNob3dzcGlrZXMsbj0hMCksIm9uIiE9PWF8fG8uc2hvd3NwaWtlc3x8KGE9Im9mZiIpfXJldHVybiBlLl9mdWxsTGF5b3V0Ll9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWEsbn0sWS5hdXRvQmluPWZ1bmN0aW9uKGUsdCxyLG4saSxvKXt2YXIgcyxjPWwuYWdnTnVtcyhNYXRoLm1pbixudWxsLGUpLHU9bC5hZ2dOdW1zKE1hdGgubWF4LG51bGwsZSk7aWYoImNhdGVnb3J5Ij09PXQudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlKXJldHVybntzdGFydDpjLS41LGVuZDp1Ky41LHNpemU6TWF0aC5tYXgoMSxNYXRoLnJvdW5kKG8pfHwxKSxfZGF0YVNwYW46dS1jfTtpZihpfHwoaT10LmNhbGVuZGFyKSxzPSJsb2ciPT09dC50eXBlP3t0eXBlOiJsaW5lYXIiLHJhbmdlOltjLHVdfTp7dHlwZTp0LnR5cGUscmFuZ2U6bC5zaW1wbGVNYXAoW2MsdV0sdC5jMnIsMCxpKSxjYWxlbmRhcjppfSxZLnNldENvbnZlcnQocyksbz1vJiZoLmR0aWNrKG8scy50eXBlKSlzLmR0aWNrPW8scy50aWNrMD1oLnRpY2swKHZvaWQgMCxzLnR5cGUsaSk7ZWxzZXt2YXIgZDtpZihyKWQ9KHUtYykvcjtlbHNle3ZhciBmPWwuZGlzdGluY3RWYWxzKGUpLHA9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhmLm1pbkRpZmYpL01hdGguTE4xMCkpLGc9cCpsLnJvdW5kVXAoZi5taW5EaWZmL3AsWy45LDEuOSw0LjksOS45XSwhMCk7ZD1NYXRoLm1heChnLDIqbC5zdGRldihlKS9NYXRoLnBvdyhlLmxlbmd0aCxuPy4yNTouNCkpLGEoZCl8fChkPTEpfVkuYXV0b1RpY2tzKHMsZCl9dmFyIG0sdj1zLmR0aWNrLHk9WS50aWNrSW5jcmVtZW50KFkudGlja0ZpcnN0KHMpLHYsInJldmVyc2UiLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdiltPSh5PWZ1bmN0aW9uKGUsdCxyLG4saSl7dmFyIG89MCxsPTAscz0wLGM9MDtmdW5jdGlvbiB1KHQpe3JldHVybigxKzEwMCoodC1lKS9yLmR0aWNrKSUxMDA8Mn1mb3IodmFyIGQ9MDtkPHQubGVuZ3RoO2QrKyl0W2RdJTE9PTA/cysrOmEodFtkXSl8fGMrKyx1KHRbZF0pJiZvKyssdSh0W2RdK3IuZHRpY2svMikmJmwrKzt2YXIgZj10Lmxlbmd0aC1jO2lmKHM9PT1mJiYiZGF0ZSIhPT1yLnR5cGUpci5kdGljazwxP2U9bi0uNSpyLmR0aWNrOihlLT0uNSkrci5kdGljazxuJiYoZSs9ci5kdGljayk7ZWxzZSBpZihsPC4xKmYmJihvPi4zKmZ8fHUobil8fHUoaSkpKXt2YXIgcD1yLmR0aWNrLzI7ZSs9ZStwPG4/cDotcH1yZXR1cm4gZX0oeSxlLHMsYyx1KSkrKDErTWF0aC5mbG9vcigodS15KS92KSkqdjtlbHNlIGZvcigiTSI9PT1zLmR0aWNrLmNoYXJBdCgwKSYmKHk9ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaT1sLmZpbmRFeGFjdERhdGVzKHQsYSk7aWYoaS5leGFjdERheXM+Ljgpe3ZhciBvPU51bWJlcihyLnN1YnN0cigxKSk7aS5leGFjdFllYXJzPi44JiZvJTEyPT0wP2U9WS50aWNrSW5jcmVtZW50KGUsIk02IiwicmV2ZXJzZSIpKzEuNSpBOmkuZXhhY3RNb250aHM+Ljg/ZT1ZLnRpY2tJbmNyZW1lbnQoZSwiTTEiLCJyZXZlcnNlIikrMTUuNSpBOmUtPUw7dmFyIHM9WS50aWNrSW5jcmVtZW50KGUscik7aWYoczw9bilyZXR1cm4gc31yZXR1cm4gZX0oeSxlLHYsYyxpKSksbT15LDA7bTw9dTspbT1ZLnRpY2tJbmNyZW1lbnQobSx2LCExLGkpO3JldHVybntzdGFydDp0LmMycih5LDAsaSksZW5kOnQuYzJyKG0sMCxpKSxzaXplOnYsX2RhdGFTcGFuOnUtY319LFkucHJlcFRpY2tzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bC5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCx2b2lkIDAsdm9pZCAwLHQpO2lmKGUuX2R0aWNrSW5pdD1lLmR0aWNrLGUuX3RpY2swSW5pdD1lLnRpY2swLCJhdXRvIj09PWUudGlja21vZGV8fCFlLmR0aWNrKXt2YXIgbixpPWUubnRpY2tzO2l8fCgiY2F0ZWdvcnkiPT09ZS50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGU/KG49ZS50aWNrZm9udD9sLmJpZ0ZvbnQoZS50aWNrZm9udC5zaXplfHwxMik6MTUsaT1lLl9sZW5ndGgvbik6KG49InkiPT09ZS5faWQuY2hhckF0KDApPzQwOjgwLGk9bC5jb25zdHJhaW4oZS5fbGVuZ3RoL24sNCw5KSsxKSwicmFkaWFsYXhpcyI9PT1lLl9uYW1lJiYoaSo9MikpLCJhcnJheSI9PT1lLnRpY2ttb2RlJiYoaSo9MTAwKSxlLl9yb3VnaERUaWNrPU1hdGguYWJzKHJbMV0tclswXSkvaSxZLmF1dG9UaWNrcyhlLGUuX3JvdWdoRFRpY2spLGUuX21pbkR0aWNrPjAmJmUuZHRpY2s8MiplLl9taW5EdGljayYmKGUuZHRpY2s9ZS5fbWluRHRpY2ssZS50aWNrMD1lLmwycihlLl9mb3JjZVRpY2swKSl9InBlcmlvZCI9PT1lLnRpY2tsYWJlbG1vZGUmJmZ1bmN0aW9uKGUpe3ZhciB0O2Z1bmN0aW9uIHIoKXtyZXR1cm4hKGEoZS5kdGljayl8fCJNIiE9PWUuZHRpY2suY2hhckF0KDApKX12YXIgbj1yKCksaT1ZLmdldFRpY2tGb3JtYXQoZSk7aWYoaSl7dmFyIG89ZS5fZHRpY2tJbml0IT09ZS5kdGljazsvJVtmTFFzU01YXS8udGVzdChpKXx8KC8lW0hJXS8udGVzdChpKT8odD1TLG8mJiFuJiZlLmR0aWNrPFMmJihlLmR0aWNrPVMpKTovJXAvLnRlc3QoaSk/KHQ9TCxvJiYhbiYmZS5kdGljazxMJiYoZS5kdGljaz1MKSk6LyVbQWFkZWp1d3hdLy50ZXN0KGkpPyh0PUEsbyYmIW4mJmUuZHRpY2s8QSYmKGUuZHRpY2s9QSkpOi8lW1VWV10vLnRlc3QoaSk/KHQ9ayxvJiYhbiYmZS5kdGljazxrJiYoZS5kdGljaz1rKSk6LyVbQmJtXS8udGVzdChpKT8odD1ULG8mJihuP0soZS5kdGljayk8MTplLmR0aWNrPE0pJiYoZS5kdGljaz0iTTEiKSk6LyVbcV0vLnRlc3QoaSk/KHQ9YixvJiYobj9LKGUuZHRpY2spPDM6ZS5kdGljazxfKSYmKGUuZHRpY2s9Ik0zIikpOi8lW1l5XS8udGVzdChpKSYmKHQ9dixvJiYobj9LKGUuZHRpY2spPDEyOmUuZHRpY2s8eSkmJihlLmR0aWNrPSJNMTIiKSkpfShuPXIoKSkmJmUudGljazA9PT1lLl9kb3dUaWNrMCYmKGUudGljazA9ZS5fcmF3VGljazApO2UuX2RlZmluZWREZWx0YT10fShlKSxlLnRpY2swfHwoZS50aWNrMD0iZGF0ZSI9PT1lLnR5cGU/IjIwMDAtMDEtMDEiOjApLCJkYXRlIj09PWUudHlwZSYmZS5kdGljazwuMSYmKGUuZHRpY2s9LjEpLGxlKGUpfSxZLmNhbGNUaWNrcz1mdW5jdGlvbihlLHQpe1kucHJlcFRpY2tzKGUsdCk7dmFyIHI9bC5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCx2b2lkIDAsdm9pZCAwLHQpO2lmKCJhcnJheSI9PT1lLnRpY2ttb2RlKXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLnRpY2t2YWxzLHI9ZS50aWNrdGV4dCxuPW5ldyBBcnJheSh0Lmxlbmd0aCksYT1XKGwuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpKSxpPU1hdGgubWluKGFbMF0sYVsxXSksbz1NYXRoLm1heChhWzBdLGFbMV0pLHM9MDtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7dmFyIGM9ImNhdGVnb3J5Ij09PWUudHlwZT9lLmQybF9ub2FkZDplLmQybDsibG9nIj09PWUudHlwZSYmIkwiIT09U3RyaW5nKGUuZHRpY2spLmNoYXJBdCgwKSYmKGUuZHRpY2s9IkwiK01hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5taW4oZS5yYW5nZVswXSxlLnJhbmdlWzFdKSktMSkpO2Zvcih2YXIgdT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgZD1jKHRbdV0pO2Q+aSYmZDxvJiYodm9pZCAwPT09clt1XT9uW3NdPVkudGlja1RleHQoZSxkKTpuW3NdPXNlKGUsZCxTdHJpbmcoclt1XSkpLHMrKyl9czx0Lmxlbmd0aCYmbi5zcGxpY2Uocyx0Lmxlbmd0aC1zKTtlLnJhbmdlYnJlYWtzJiYobj1uLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGUubWFza0JyZWFrcyh0LngpIT09UH0pKSk7cmV0dXJuIG59KGUpO3ZhciBuPVcociksaT1uWzBdLG89blsxXSxzPXJbMV08clswXSxjPU1hdGgubWluKHJbMF0sclsxXSksdT1NYXRoLm1heChyWzBdLHJbMV0pLGQ9ImxvZyI9PT1lLnR5cGUmJiEoYShlLmR0aWNrKXx8IkwiPT09ZS5kdGljay5jaGFyQXQoMCkpLGY9InBlcmlvZCI9PT1lLnRpY2tsYWJlbG1vZGU7aWYoZS5fdG1pbj1ZLnRpY2tGaXJzdChlLHQpLGUuX3RtaW48aSE9PXMpcmV0dXJuW107ImNhdGVnb3J5IiE9PWUudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09ZS50eXBlfHwobz1zP01hdGgubWF4KC0uNSxvKTpNYXRoLm1pbihlLl9jYXRlZ29yaWVzLmxlbmd0aC0uNSxvKSk7dmFyIHA9ZS5fdG1pbjtlLnJhbmdlYnJlYWtzJiZlLl90aWNrMEluaXQhPT1lLnRpY2swJiYocD1BZShwLGUpLHN8fChwPVkudGlja0luY3JlbWVudChwLGUuZHRpY2ssIXMsZS5jYWxlbmRhcikpKSxmJiYocD1ZLnRpY2tJbmNyZW1lbnQocCxlLmR0aWNrLCFzLGUuY2FsZW5kYXIpKTtmb3IodmFyIGgsZz1NYXRoLm1heCgxZTMsZS5fbGVuZ3RofHwwKSxEPVtdLEM9bnVsbDtzP3A+PW86cDw9bztwPVkudGlja0luY3JlbWVudChwLGUuZHRpY2sscyxlLmNhbGVuZGFyKSl7aWYoZS5yYW5nZWJyZWFrcyYmIXMpe2lmKHA8aSljb250aW51ZTtpZihlLm1hc2tCcmVha3MocCk9PT1QJiZBZShwLGUpPj11KWJyZWFrfWlmKEQubGVuZ3RoPmd8fHA9PT1DKWJyZWFrO0M9cDt2YXIgTz0hMTtkJiZwIT09KDB8cCkmJihPPSEwKSxELnB1c2goe21pbm9yOk8sdmFsdWU6cH0pfWlmKGYmJmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXS52YWx1ZSxpPW4sbz1uKzE7bjxlLmxlbmd0aC0xPyhpPW4sbz1uKzEpOm4+MD8oaT1uLTEsbz1uKTooaT1uLG89bik7dmFyIGwscz1lW2ldLnZhbHVlLGM9ZVtvXS52YWx1ZSx1PU1hdGguYWJzKGMtcyksZD1yfHx1LGY9MDtkPj15P2Y9dT49eSYmdTw9bT91OnY6cj09PWImJmQ+PV8/Zj11Pj1fJiZ1PD14P3U6YjpkPj1NP2Y9dT49TSYmdTw9dz91OlQ6cj09PWsmJmQ+PWs/Zj1rOmQ+PUE/Zj1BOnI9PT1MJiZkPj1MP2Y9TDpyPT09UyYmZD49UyYmKGY9UyksZj49dSYmKGY9dSxsPSEwKTt2YXIgcD1hK2Y7aWYodC5yYW5nZWJyZWFrcyYmZj4wKXtmb3IodmFyIGg9MCxnPTA7Zzw4NDtnKyspe3ZhciBEPShnKy41KS84NDt0Lm1hc2tCcmVha3MoYSooMS1EKStEKnApIT09UCYmaCsrfShmKj1oLzg0KXx8KGVbbl0uZHJvcD0hMCksbCYmdT5rJiYoZj11KX0oZj4wfHwwPT09bikmJihlW25dLnBlcmlvZFg9YStmLzIpfX0oRCxlLGUuX2RlZmluZWREZWx0YSksZS5yYW5nZWJyZWFrcyl7dmFyIEk9InkiPT09ZS5faWQuY2hhckF0KDApLFI9MTsiYXV0byI9PT1lLnRpY2ttb2RlJiYoUj1lLnRpY2tmb250P2UudGlja2ZvbnQuc2l6ZToxMik7dmFyIHo9TmFOO2ZvcihoPUQubGVuZ3RoLTE7aD4tMTtoLS0paWYoRFtoXS5kcm9wKUQuc3BsaWNlKGgsMSk7ZWxzZXtEW2hdLnZhbHVlPUFlKERbaF0udmFsdWUsZSk7dmFyIE49ZS5jMnAoRFtoXS52YWx1ZSk7KEk/ej5OLVI6ejxOK1IpP0Quc3BsaWNlKHM/aCsxOmgsMSk6ej1OfX1rZShlKSYmMzYwPT09TWF0aC5hYnMoclsxXS1yWzBdKSYmRC5wb3AoKSxlLl90bWF4PShEW0QubGVuZ3RoLTFdfHx7fSkudmFsdWUsZS5fcHJldkRhdGVIZWFkPSIiLGUuX2luQ2FsY1RpY2tzPSEwO3ZhciBGLEUsaj1bXTtmb3IoaD0wO2g8RC5sZW5ndGg7aCsrKXt2YXIgSD1EW2hdLm1pbm9yLEI9RFtoXS52YWx1ZTtGPVkudGlja1RleHQoZSxCLCExLEgpLHZvaWQgMCE9PShFPURbaF0ucGVyaW9kWCkmJihGLnBlcmlvZFg9RSwoRT51fHxFPGMpJiYoRT51JiYoRi5wZXJpb2RYPXUpLEU8YyYmKEYucGVyaW9kWD1jKSxGLnRleHQ9IiAiLGUuX3ByZXZEYXRlSGVhZD0iIikpLGoucHVzaChGKX1yZXR1cm4gZS5faW5DYWxjVGlja3M9ITEsan07dmFyICQ9WzIsNSwxMF0sZWU9WzEsMiwzLDYsMTJdLHRlPVsxLDIsNSwxMCwxNSwzMF0scmU9WzEsMiwzLDcsMTRdLG5lPVstLjA0NiwwLC4zMDEsLjQ3NywuNjAyLC42OTksLjc3OCwuODQ1LC45MDMsLjk1NCwxXSxhZT1bLS4zMDEsMCwuMzAxLC42OTksMV0saWU9WzE1LDMwLDQ1LDkwLDE4MF07ZnVuY3Rpb24gb2UoZSx0LHIpe3JldHVybiB0Kmwucm91bmRVcChlL3Qscil9ZnVuY3Rpb24gbGUoZSl7dmFyIHQ9ZS5kdGljaztpZihlLl90aWNrZXhwb25lbnQ9MCxhKHQpfHwic3RyaW5nIj09dHlwZW9mIHR8fCh0PTEpLCJjYXRlZ29yeSIhPT1lLnR5cGUmJiJtdWx0aWNhdGVnb3J5IiE9PWUudHlwZXx8KGUuX3RpY2tyb3VuZD1udWxsKSwiZGF0ZSI9PT1lLnR5cGUpe3ZhciByPWUucjJsKGUudGljazApLG49ZS5sMnIocikucmVwbGFjZSgvKF4tfGkpL2csIiIpLGk9bi5sZW5ndGg7aWYoIk0iPT09U3RyaW5nKHQpLmNoYXJBdCgwKSlpPjEwfHwiMDEtMDEiIT09bi5zdWJzdHIoNSk/ZS5fdGlja3JvdW5kPSJkIjplLl90aWNrcm91bmQ9K3Quc3Vic3RyKDEpJTEyPT0wPyJ5IjoibSI7ZWxzZSBpZih0Pj1BJiZpPD0xMHx8dD49MTUqQSllLl90aWNrcm91bmQ9ImQiO2Vsc2UgaWYodD49RCYmaTw9MTZ8fHQ+PVMpZS5fdGlja3JvdW5kPSJNIjtlbHNlIGlmKHQ+PUMmJmk8PTE5fHx0Pj1EKWUuX3RpY2tyb3VuZD0iUyI7ZWxzZXt2YXIgbz1lLmwycihyK3QpLnJlcGxhY2UoL14tLywiIikubGVuZ3RoO2UuX3RpY2tyb3VuZD1NYXRoLm1heChpLG8pLTIwLGUuX3RpY2tyb3VuZDwwJiYoZS5fdGlja3JvdW5kPTQpfX1lbHNlIGlmKGEodCl8fCJMIj09PXQuY2hhckF0KDApKXt2YXIgbD1lLnJhbmdlLm1hcChlLnIyZHx8TnVtYmVyKTthKHQpfHwodD1OdW1iZXIodC5zdWJzdHIoMSkpKSxlLl90aWNrcm91bmQ9Mi1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4xMCsuMDEpO3ZhciBzPU1hdGgubWF4KE1hdGguYWJzKGxbMF0pLE1hdGguYWJzKGxbMV0pKSxjPU1hdGguZmxvb3IoTWF0aC5sb2cocykvTWF0aC5MTjEwKy4wMSksdT12b2lkIDA9PT1lLm1pbmV4cG9uZW50PzM6ZS5taW5leHBvbmVudDtNYXRoLmFicyhjKT51JiYodWUoZS5leHBvbmVudGZvcm1hdCkmJiFkZShjKT9lLl90aWNrZXhwb25lbnQ9MypNYXRoLnJvdW5kKChjLTEpLzMpOmUuX3RpY2tleHBvbmVudD1jKX1lbHNlIGUuX3RpY2tyb3VuZD1udWxsfWZ1bmN0aW9uIHNlKGUsdCxyKXt2YXIgbj1lLnRpY2tmb250fHx7fTtyZXR1cm57eDp0LGR4OjAsZHk6MCx0ZXh0OnJ8fCIiLGZvbnRTaXplOm4uc2l6ZSxmb250Om4uZmFtaWx5LGZvbnRDb2xvcjpuLmNvbG9yfX1ZLmF1dG9UaWNrcz1mdW5jdGlvbihlLHQpe3ZhciByO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIE1hdGgucG93KGUsTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMTApKX1pZigiZGF0ZSI9PT1lLnR5cGUpe2UudGljazA9bC5kYXRlVGljazAoZS5jYWxlbmRhciwwKTt2YXIgaT0yKnQ7aWYoaT52KXQvPXYscj1uKDEwKSxlLmR0aWNrPSJNIisxMipvZSh0LHIsJCk7ZWxzZSBpZihpPlQpdC89VCxlLmR0aWNrPSJNIitvZSh0LDEsZWUpO2Vsc2UgaWYoaT5BKXtlLmR0aWNrPW9lKHQsQSxlLl9oYXNEYXlPZldlZWtCcmVha3M/WzEsMiw3LDE0XTpyZSk7dmFyIG89WS5nZXRUaWNrRm9ybWF0KGUpLHM9InBlcmlvZCI9PT1lLnRpY2tsYWJlbG1vZGU7cyYmKGUuX3Jhd1RpY2swPWUudGljazApLC8lW3VWV10vLnRlc3Qobyk/ZS50aWNrMD1sLmRhdGVUaWNrMChlLmNhbGVuZGFyLDIpOmUudGljazA9bC5kYXRlVGljazAoZS5jYWxlbmRhciwxKSxzJiYoZS5fZG93VGljazA9ZS50aWNrMCl9ZWxzZSBpPlM/ZS5kdGljaz1vZSh0LFMsZWUpOmk+RD9lLmR0aWNrPW9lKHQsRCx0ZSk6aT5DP2UuZHRpY2s9b2UodCxDLHRlKToocj1uKDEwKSxlLmR0aWNrPW9lKHQsciwkKSl9ZWxzZSBpZigibG9nIj09PWUudHlwZSl7ZS50aWNrMD0wO3ZhciBjPWwuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpO2lmKHQ+LjcpZS5kdGljaz1NYXRoLmNlaWwodCk7ZWxzZSBpZihNYXRoLmFicyhjWzFdLWNbMF0pPDEpe3ZhciB1PTEuNSpNYXRoLmFicygoY1sxXS1jWzBdKS90KTt0PU1hdGguYWJzKE1hdGgucG93KDEwLGNbMV0pLU1hdGgucG93KDEwLGNbMF0pKS91LHI9bigxMCksZS5kdGljaz0iTCIrb2UodCxyLCQpfWVsc2UgZS5kdGljaz10Pi4zPyJEMiI6IkQxIn1lbHNlImNhdGVnb3J5Ij09PWUudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09ZS50eXBlPyhlLnRpY2swPTAsZS5kdGljaz1NYXRoLmNlaWwoTWF0aC5tYXgodCwxKSkpOmtlKGUpPyhlLnRpY2swPTAscj0xLGUuZHRpY2s9b2UodCxyLGllKSk6KGUudGljazA9MCxyPW4oMTApLGUuZHRpY2s9b2UodCxyLCQpKTtpZigwPT09ZS5kdGljayYmKGUuZHRpY2s9MSksIWEoZS5kdGljaykmJiJzdHJpbmciIT10eXBlb2YgZS5kdGljayl7dmFyIGQ9ZS5kdGljazt0aHJvdyBlLmR0aWNrPTEsImF4LmR0aWNrIGVycm9yOiAiK1N0cmluZyhkKX19LFkudGlja0luY3JlbWVudD1mdW5jdGlvbihlLHQscixpKXt2YXIgbz1yPy0xOjE7aWYoYSh0KSlyZXR1cm4gbC5pbmNyZW1lbnQoZSxvKnQpO3ZhciBzPXQuY2hhckF0KDApLGM9bypOdW1iZXIodC5zdWJzdHIoMSkpO2lmKCJNIj09PXMpcmV0dXJuIGwuaW5jcmVtZW50TW9udGgoZSxjLGkpO2lmKCJMIj09PXMpcmV0dXJuIE1hdGgubG9nKE1hdGgucG93KDEwLGUpK2MpL01hdGguTE4xMDtpZigiRCI9PT1zKXt2YXIgdT0iRDIiPT09dD9hZTpuZSxkPWUrLjAxKm8sZj1sLnJvdW5kVXAobC5tb2QoZCwxKSx1LHIpO3JldHVybiBNYXRoLmZsb29yKGQpK01hdGgubG9nKG4ucm91bmQoTWF0aC5wb3coMTAsZiksMSkpL01hdGguTE4xMH10aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcodCl9LFkudGlja0ZpcnN0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5yMmx8fE51bWJlcixpPWwuc2ltcGxlTWFwKGUucmFuZ2Uscix2b2lkIDAsdm9pZCAwLHQpLG89aVsxXTxpWzBdLHM9bz9NYXRoLmZsb29yOk1hdGguY2VpbCxjPVcoaSlbMF0sdT1lLmR0aWNrLGQ9cihlLnRpY2swKTtpZihhKHUpKXt2YXIgZj1zKChjLWQpL3UpKnUrZDtyZXR1cm4iY2F0ZWdvcnkiIT09ZS50eXBlJiYibXVsdGljYXRlZ29yeSIhPT1lLnR5cGV8fChmPWwuY29uc3RyYWluKGYsMCxlLl9jYXRlZ29yaWVzLmxlbmd0aC0xKSksZn12YXIgcD11LmNoYXJBdCgwKSxoPU51bWJlcih1LnN1YnN0cigxKSk7aWYoIk0iPT09cCl7Zm9yKHZhciBnLG0sdix5PTAseD1kO3k8MTA7KXtpZigoKGc9WS50aWNrSW5jcmVtZW50KHgsdSxvLGUuY2FsZW5kYXIpKS1jKSooeC1jKTw9MClyZXR1cm4gbz9NYXRoLm1pbih4LGcpOk1hdGgubWF4KHgsZyk7bT0oYy0oeCtnKS8yKS8oZy14KSx2PXArKE1hdGguYWJzKE1hdGgucm91bmQobSkpfHwxKSpoLHg9WS50aWNrSW5jcmVtZW50KHgsdixtPDA/IW86byxlLmNhbGVuZGFyKSx5Kyt9cmV0dXJuIGwuZXJyb3IoInRpY2tGaXJzdCBkaWQgbm90IGNvbnZlcmdlIixlKSx4fWlmKCJMIj09PXApcmV0dXJuIE1hdGgubG9nKHMoKE1hdGgucG93KDEwLGMpLWQpL2gpKmgrZCkvTWF0aC5MTjEwO2lmKCJEIj09PXApe3ZhciBiPSJEMiI9PT11P2FlOm5lLF89bC5yb3VuZFVwKGwubW9kKGMsMSksYixvKTtyZXR1cm4gTWF0aC5mbG9vcihjKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLF8pLDEpKS9NYXRoLkxOMTB9dGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKHUpfSxZLnRpY2tUZXh0PWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpLG89c2UoZSx0KSxzPSJhcnJheSI9PT1lLnRpY2ttb2RlLGM9cnx8cyx1PWUudHlwZSxkPSJjYXRlZ29yeSI9PT11P2UuZDJsX25vYWRkOmUuZDJsO2lmKHMmJkFycmF5LmlzQXJyYXkoZS50aWNrdGV4dCkpe3ZhciBmPWwuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpLHA9KE1hdGguYWJzKGZbMV0tZlswXSktKGUuX2xCcmVha3N8fDApKS8xZTQ7Zm9yKGk9MDtpPGUudGlja3RleHQubGVuZ3RoJiYhKE1hdGguYWJzKHQtZChlLnRpY2t2YWxzW2ldKSk8cCk7aSsrKTtpZihpPGUudGlja3RleHQubGVuZ3RoKXJldHVybiBvLnRleHQ9U3RyaW5nKGUudGlja3RleHRbaV0pLG99ZnVuY3Rpb24gaChuKXtpZih2b2lkIDA9PT1uKXJldHVybiEwO2lmKHIpcmV0dXJuIm5vbmUiPT09bjt2YXIgYT17Zmlyc3Q6ZS5fdG1pbixsYXN0OmUuX3RtYXh9W25dO3JldHVybiJhbGwiIT09biYmdCE9PWF9dmFyIGc9cj8ibmV2ZXIiOiJub25lIiE9PWUuZXhwb25lbnRmb3JtYXQmJmgoZS5zaG93ZXhwb25lbnQpPyJoaWRlIjoiIjtpZigiZGF0ZSI9PT11P2Z1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPWUuX3RpY2tyb3VuZCxvPXImJmUuaG92ZXJmb3JtYXR8fFkuZ2V0VGlja0Zvcm1hdChlKTtuJiYoaT1hKGkpPzQ6e3k6Im0iLG06ImQiLGQ6Ik0iLE06IlMiLFM6NH1baV0pO3ZhciBzLGM9bC5mb3JtYXREYXRlKHQueCxvLGksZS5fZGF0ZUZvcm1hdCxlLmNhbGVuZGFyLGUuX2V4dHJhRm9ybWF0KSx1PWMuaW5kZXhPZigiXG4iKTstMSE9PXUmJihzPWMuc3Vic3RyKHUrMSksYz1jLnN1YnN0cigwLHUpKTtuJiYoIjAwOjAwOjAwIj09PWN8fCIwMDowMCI9PT1jPyhjPXMscz0iIik6OD09PWMubGVuZ3RoJiYoYz1jLnJlcGxhY2UoLzowMCQvLCIiKSkpO2lmKHMpaWYocikiZCI9PT1pP2MrPSIsICIrczpjPXMrKGM/IiwgIitjOiIiKTtlbHNlIGlmKGUuX2luQ2FsY1RpY2tzJiZlLl9wcmV2RGF0ZUhlYWQ9PT1zKXt2YXIgZD1MZShlKSxmPWUuX3RydWVTaWRlfHxlLnNpZGU7KCFkJiYidG9wIj09PWZ8fGQmJiJib3R0b20iPT09ZikmJihjKz0iPGJyPiAiKX1lbHNlIGUuX3ByZXZEYXRlSGVhZD1zLGMrPSI8YnI+IitzO3QudGV4dD1jfShlLG8scixjKToibG9nIj09PXU/ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz1lLmR0aWNrLHM9dC54LGM9ZS50aWNrZm9ybWF0LHU9InN0cmluZyI9PXR5cGVvZiBvJiZvLmNoYXJBdCgwKTsibmV2ZXIiPT09aSYmKGk9IiIpO24mJiJMIiE9PXUmJihvPSJMMyIsdT0iTCIpO2lmKGN8fCJMIj09PXUpdC50ZXh0PWZlKE1hdGgucG93KDEwLHMpLGUsaSxuKTtlbHNlIGlmKGEobyl8fCJEIj09PXUmJmwubW9kKHMrLjAxLDEpPC4xKXt2YXIgZD1NYXRoLnJvdW5kKHMpLGY9TWF0aC5hYnMoZCkscD1lLmV4cG9uZW50Zm9ybWF0OyJwb3dlciI9PT1wfHx1ZShwKSYmZGUoZCk/KHQudGV4dD0wPT09ZD8xOjE9PT1kPyIxMCI6IjEwPHN1cD4iKyhkPjE/IiI6TykrZisiPC9zdXA+Iix0LmZvbnRTaXplKj0xLjI1KTooImUiPT09cHx8IkUiPT09cCkmJmY+Mj90LnRleHQ9IjEiK3ArKGQ+MD8iKyI6TykrZjoodC50ZXh0PWZlKE1hdGgucG93KDEwLHMpLGUsIiIsImZha2Vob3ZlciIpLCJEMSI9PT1vJiYieSI9PT1lLl9pZC5jaGFyQXQoMCkmJih0LmR5LT10LmZvbnRTaXplLzYpKX1lbHNle2lmKCJEIiE9PXUpdGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKG8pO3QudGV4dD1TdHJpbmcoTWF0aC5yb3VuZChNYXRoLnBvdygxMCxsLm1vZChzLDEpKSkpLHQuZm9udFNpemUqPS43NX1pZigiRDEiPT09ZS5kdGljayl7dmFyIGg9U3RyaW5nKHQudGV4dCkuY2hhckF0KDApOyIwIiE9PWgmJiIxIiE9PWh8fCgieSI9PT1lLl9pZC5jaGFyQXQoMCk/dC5keC09dC5mb250U2l6ZS80Oih0LmR5Kz10LmZvbnRTaXplLzIsdC5keCs9KGUucmFuZ2VbMV0+ZS5yYW5nZVswXT8xOi0xKSp0LmZvbnRTaXplKihzPDA/LjU6LjI1KSkpfX0oZSxvLDAsYyxnKToiY2F0ZWdvcnkiPT09dT9mdW5jdGlvbihlLHQpe3ZhciByPWUuX2NhdGVnb3JpZXNbTWF0aC5yb3VuZCh0LngpXTt2b2lkIDA9PT1yJiYocj0iIik7dC50ZXh0PVN0cmluZyhyKX0oZSxvKToibXVsdGljYXRlZ29yeSI9PT11P2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1NYXRoLnJvdW5kKHQueCksYT1lLl9jYXRlZ29yaWVzW25dfHxbXSxpPXZvaWQgMD09PWFbMV0/IiI6U3RyaW5nKGFbMV0pLG89dm9pZCAwPT09YVswXT8iIjpTdHJpbmcoYVswXSk7cj90LnRleHQ9bysiIC0gIitpOih0LnRleHQ9aSx0LnRleHQyPW8pfShlLG8scik6a2UoZSk/ZnVuY3Rpb24oZSx0LHIsbixhKXtpZigicmFkaWFucyIhPT1lLnRoZXRhdW5pdHx8cil0LnRleHQ9ZmUodC54LGUsYSxuKTtlbHNle3ZhciBpPXQueC8xODA7aWYoMD09PWkpdC50ZXh0PSIwIjtlbHNle3ZhciBvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0KXtyZXR1cm4gTWF0aC5hYnMoZS10KTw9MWUtNn12YXIgcj1mdW5jdGlvbihlKXtmb3IodmFyIHI9MTshdChNYXRoLnJvdW5kKGUqcikvcixlKTspcio9MTA7cmV0dXJuIHJ9KGUpLG49ZSpyLGE9TWF0aC5hYnMoZnVuY3Rpb24gZShyLG4pe3JldHVybiB0KG4sMCk/cjplKG4sciVuKX0obixyKSk7cmV0dXJuW01hdGgucm91bmQobi9hKSxNYXRoLnJvdW5kKHIvYSldfShpKTtpZihvWzFdPj0xMDApdC50ZXh0PWZlKGwuZGVnMnJhZCh0LngpLGUsYSxuKTtlbHNle3ZhciBzPXQueDwwOzE9PT1vWzFdPzE9PT1vWzBdP3QudGV4dD0iXHUwM2MwIjp0LnRleHQ9b1swXSsiXHUwM2MwIjp0LnRleHQ9WyI8c3VwPiIsb1swXSwiPC9zdXA+IiwiXHUyMDQ0IiwiPHN1Yj4iLG9bMV0sIjwvc3ViPiIsIlx1MDNjMCJdLmpvaW4oIiIpLHMmJih0LnRleHQ9Tyt0LnRleHQpfX19fShlLG8scixjLGcpOmZ1bmN0aW9uKGUsdCxyLG4sYSl7Im5ldmVyIj09PWE/YT0iIjoiYWxsIj09PWUuc2hvd2V4cG9uZW50JiZNYXRoLmFicyh0LngvZS5kdGljayk8MWUtNiYmKGE9ImhpZGUiKTt0LnRleHQ9ZmUodC54LGUsYSxuKX0oZSxvLDAsYyxnKSxufHwoZS50aWNrcHJlZml4JiYhaChlLnNob3d0aWNrcHJlZml4KSYmKG8udGV4dD1lLnRpY2twcmVmaXgrby50ZXh0KSxlLnRpY2tzdWZmaXgmJiFoKGUuc2hvd3RpY2tzdWZmaXgpJiYoby50ZXh0Kz1lLnRpY2tzdWZmaXgpKSwiYm91bmRhcmllcyI9PT1lLnRpY2tzb258fGUuc2hvd2RpdmlkZXJzKXt2YXIgbT1mdW5jdGlvbih0KXt2YXIgcj1lLmwycCh0KTtyZXR1cm4gcj49MCYmcjw9ZS5fbGVuZ3RoP3Q6bnVsbH07by54Ym5kPVttKG8ueC0uNSksbShvLngrZS5kdGljay0uNSldfXJldHVybiBvfSxZLmhvdmVyTGFiZWxUZXh0PWZ1bmN0aW9uKGUsdCxyKXtyJiYoZT1sLmV4dGVuZEZsYXQoe30sZSx7aG92ZXJmb3JtYXQ6cn0pKTt2YXIgbj1BcnJheS5pc0FycmF5KHQpP3RbMF06dCxhPUFycmF5LmlzQXJyYXkodCk/dFsxXTp2b2lkIDA7aWYodm9pZCAwIT09YSYmYSE9PW4pcmV0dXJuIFkuaG92ZXJMYWJlbFRleHQoZSxuLHIpKyIgLSAiK1kuaG92ZXJMYWJlbFRleHQoZSxhLHIpO3ZhciBpPSJsb2ciPT09ZS50eXBlJiZuPD0wLG89WS50aWNrVGV4dChlLGUuYzJsKGk/LW46biksImhvdmVyIikudGV4dDtyZXR1cm4gaT8wPT09bj8iMCI6TytvOm99O3ZhciBjZT1bImYiLCJwIiwibiIsIlx1MDNiYyIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIl07ZnVuY3Rpb24gdWUoZSl7cmV0dXJuIlNJIj09PWV8fCJCIj09PWV9ZnVuY3Rpb24gZGUoZSl7cmV0dXJuIGU+MTR8fGU8LTE1fWZ1bmN0aW9uIGZlKGUsdCxyLG4pe3ZhciBpPWU8MCxvPXQuX3RpY2tyb3VuZCxzPXJ8fHQuZXhwb25lbnRmb3JtYXR8fCJCIixjPXQuX3RpY2tleHBvbmVudCx1PVkuZ2V0VGlja0Zvcm1hdCh0KSxkPXQuc2VwYXJhdGV0aG91c2FuZHM7aWYobil7dmFyIGY9e2V4cG9uZW50Zm9ybWF0OnMsbWluZXhwb25lbnQ6dC5taW5leHBvbmVudCxkdGljazoibm9uZSI9PT10LnNob3dleHBvbmVudD90LmR0aWNrOmEoZSkmJk1hdGguYWJzKGUpfHwxLHJhbmdlOiJub25lIj09PXQuc2hvd2V4cG9uZW50P3QucmFuZ2UubWFwKHQucjJkKTpbMCxlfHwxXX07bGUoZiksbz0oTnVtYmVyKGYuX3RpY2tyb3VuZCl8fDApKzQsYz1mLl90aWNrZXhwb25lbnQsdC5ob3ZlcmZvcm1hdCYmKHU9dC5ob3ZlcmZvcm1hdCl9aWYodSlyZXR1cm4gdC5fbnVtRm9ybWF0KHUpKGUpLnJlcGxhY2UoLy0vZyxPKTt2YXIgcCxoPU1hdGgucG93KDEwLC1vKS8yO2lmKCJub25lIj09PXMmJihjPTApLChlPU1hdGguYWJzKGUpKTxoKWU9IjAiLGk9ITE7ZWxzZXtpZihlKz1oLGMmJihlKj1NYXRoLnBvdygxMCwtYyksbys9YyksMD09PW8pZT1TdHJpbmcoTWF0aC5mbG9vcihlKSk7ZWxzZSBpZihvPDApe2U9KGU9U3RyaW5nKE1hdGgucm91bmQoZSkpKS5zdWJzdHIoMCxlLmxlbmd0aCtvKTtmb3IodmFyIGc9bztnPDA7ZysrKWUrPSIwIn1lbHNle3ZhciBtPShlPVN0cmluZyhlKSkuaW5kZXhPZigiLiIpKzE7bSYmKGU9ZS5zdWJzdHIoMCxtK28pLnJlcGxhY2UoL1wuPzArJC8sIiIpKX1lPWwubnVtU2VwYXJhdGUoZSx0Ll9zZXBhcmF0b3JzLGQpfWMmJiJoaWRlIiE9PXMmJih1ZShzKSYmZGUoYykmJihzPSJwb3dlciIpLHA9YzwwP08rLWM6InBvd2VyIiE9PXM/IisiK2M6U3RyaW5nKGMpLCJlIj09PXN8fCJFIj09PXM/ZSs9cytwOiJwb3dlciI9PT1zP2UrPSJceGQ3MTA8c3VwPiIrcCsiPC9zdXA+IjoiQiI9PT1zJiY5PT09Yz9lKz0iQiI6dWUocykmJihlKz1jZVtjLzMrNV0pKTtyZXR1cm4gaT9PK2U6ZX1mdW5jdGlvbiBwZShlLHQpe2Zvcih2YXIgcj1bXSxuPXt9LGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGk9dFthXTtuW2kudGV4dDJdP25baS50ZXh0Ml0ucHVzaChpLngpOm5baS50ZXh0Ml09W2kueF19Zm9yKHZhciBvIGluIG4pci5wdXNoKHNlKGUsbC5pbnRlcnAobltvXSwuNSksbykpO3JldHVybiByfWZ1bmN0aW9uIGhlKGUpe3JldHVybiB2b2lkIDAhPT1lLnBlcmlvZFg/ZS5wZXJpb2RYOmUueH1mdW5jdGlvbiBnZShlKXtyZXR1cm5bZS50ZXh0LGUueCxlLmF4SW5mbyxlLmZvbnQsZS5mb250U2l6ZSxlLmZvbnRDb2xvcl0uam9pbigiXyIpfWZ1bmN0aW9uIG1lKGUpe3ZhciB0PWUudGl0bGUuZm9udC5zaXplLHI9KGUudGl0bGUudGV4dC5tYXRjaChjLkJSX1RBR19BTEwpfHxbXSkubGVuZ3RoO3JldHVybiBlLnRpdGxlLmhhc093blByb3BlcnR5KCJzdGFuZG9mZiIpP3I/dCooaityKkgpOnQqajpyP3QqKHIrMSkqSDp0fWZ1bmN0aW9uIHZlKGUsdCl7dmFyIHI9ZS5sMnAodCk7cmV0dXJuIHI+MSYmcjxlLl9sZW5ndGgtMX1mdW5jdGlvbiB5ZShlKXt2YXIgdD1uLnNlbGVjdChlKSxyPXQuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIik7cmV0dXJuIHIuZW1wdHkoKT90LnNlbGVjdCgidGV4dCIpOnJ9ZnVuY3Rpb24geGUoZSl7cmV0dXJuIGUuX2lkKyIuYXV0b21hcmdpbiJ9ZnVuY3Rpb24gYmUoZSl7cmV0dXJuIHhlKGUpKyIubWlycm9yIn1mdW5jdGlvbiBfZShlKXtyZXR1cm4gZS5faWQrIi5yYW5nZXNsaWRlciJ9ZnVuY3Rpb24gd2UoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyktMT09PWUuaW5kZXhPZih0W3JdKSYmZS5wdXNoKHRbcl0pfWZ1bmN0aW9uIFRlKGUsdCxyKXt2YXIgbixhLGk9W10sbz1bXSxzPWUubGF5b3V0O2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaS5wdXNoKFkuZ2V0RnJvbUlkKGUsdFtuXSkpO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspby5wdXNoKFkuZ2V0RnJvbUlkKGUscltuXSkpO3ZhciBjPU9iamVjdC5rZXlzKHApLHU9WyJhbmNob3IiLCJkb21haW4iLCJvdmVybGF5aW5nIiwicG9zaXRpb24iLCJzaWRlIiwidGlja2FuZ2xlIiwiZWRpdFR5cGUiXSxkPVsibGluZWFyIiwibG9nIl07Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7dmFyIGY9Y1tuXSxoPWlbMF1bZl0sZz1vWzBdW2ZdLG09ITAsdj0hMSx5PSExO2lmKCJfIiE9PWYuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgaCYmLTE9PT11LmluZGV4T2YoZikpe2ZvcihhPTE7YTxpLmxlbmd0aCYmbTthKyspe3ZhciB4PWlbYV1bZl07InR5cGUiPT09ZiYmLTEhPT1kLmluZGV4T2YoaCkmJi0xIT09ZC5pbmRleE9mKHgpJiZoIT09eD92PSEwOnghPT1oJiYobT0hMSl9Zm9yKGE9MTthPG8ubGVuZ3RoJiZtO2ErKyl7dmFyIGI9b1thXVtmXTsidHlwZSI9PT1mJiYtMSE9PWQuaW5kZXhPZihnKSYmLTEhPT1kLmluZGV4T2YoYikmJmchPT1iP3k9ITA6b1thXVtmXSE9PWcmJihtPSExKX1tJiYodiYmKHNbaVswXS5fbmFtZV0udHlwZT0ibGluZWFyIikseSYmKHNbb1swXS5fbmFtZV0udHlwZT0ibGluZWFyIiksTWUocyxmLGksbyxlLl9mdWxsTGF5b3V0Ll9kZmx0VGl0bGUpKX19Zm9yKG49MDtuPGUuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMubGVuZ3RoO24rKyl7dmFyIF89ZS5fZnVsbExheW91dC5hbm5vdGF0aW9uc1tuXTstMSE9PXQuaW5kZXhPZihfLnhyZWYpJiYtMSE9PXIuaW5kZXhPZihfLnlyZWYpJiZsLnN3YXBBdHRycyhzLmFubm90YXRpb25zW25dLFsiPyJdKX19ZnVuY3Rpb24gTWUoZSx0LHIsbixhKXt2YXIgaSxvPWwubmVzdGVkUHJvcGVydHkscz1vKGVbclswXS5fbmFtZV0sdCkuZ2V0KCksYz1vKGVbblswXS5fbmFtZV0sdCkuZ2V0KCk7Zm9yKCJ0aXRsZSI9PT10JiYocyYmcy50ZXh0PT09YS54JiYocy50ZXh0PWEueSksYyYmYy50ZXh0PT09YS55JiYoYy50ZXh0PWEueCkpLGk9MDtpPHIubGVuZ3RoO2krKylvKGUscltpXS5fbmFtZSsiLiIrdCkuc2V0KGMpO2ZvcihpPTA7aTxuLmxlbmd0aDtpKyspbyhlLG5baV0uX25hbWUrIi4iK3QpLnNldChzKX1mdW5jdGlvbiBrZShlKXtyZXR1cm4iYW5ndWxhcmF4aXMiPT09ZS5faWR9ZnVuY3Rpb24gQWUoZSx0KXtmb3IodmFyIHI9dC5fcmFuZ2VicmVha3MubGVuZ3RoLG49MDtuPHI7bisrKXt2YXIgYT10Ll9yYW5nZWJyZWFrc1tuXTtpZihlPj1hLm1pbiYmZTxhLm1heClyZXR1cm4gYS5tYXh9cmV0dXJuIGV9ZnVuY3Rpb24gTGUoZSl7cmV0dXJuLTEhPT0oZS50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpfWZ1bmN0aW9uIFNlKGUsdCl7TGUoZS5fYW5jaG9yQXhpc3x8e30pJiZlLl9oaWRlQ291bnRlckF4aXNJbnNpZGVUaWNrTGFiZWxzJiZlLl9oaWRlQ291bnRlckF4aXNJbnNpZGVUaWNrTGFiZWxzKHQpfVkuZ2V0VGlja0Zvcm1hdD1mdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxpLG8sbCxzO2Z1bmN0aW9uIGMoZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlP2U6TnVtYmVyKGUucmVwbGFjZSgiTSIsIiIpKSpUfWZ1bmN0aW9uIHUoZSx0KXt2YXIgcj1bIkwiLCJEIl07aWYodHlwZW9mIGU9PXR5cGVvZiB0KXtpZigibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIGUtdDt2YXIgbj1yLmluZGV4T2YoZS5jaGFyQXQoMCkpLGE9ci5pbmRleE9mKHQuY2hhckF0KDApKTtyZXR1cm4gbj09PWE/TnVtYmVyKGUucmVwbGFjZSgvKEx8RCkvZywiIikpLU51bWJlcih0LnJlcGxhY2UoLyhMfEQpL2csIiIpKTpuLWF9cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlPzE6LTF9ZnVuY3Rpb24gZChlLHQpe3ZhciByPW51bGw9PT10WzBdLG49bnVsbD09PXRbMV0sYT11KGUsdFswXSk+PTAsaT11KGUsdFsxXSk8PTA7cmV0dXJuKHJ8fGEpJiYobnx8aSl9aWYoZS50aWNrZm9ybWF0c3RvcHMmJmUudGlja2Zvcm1hdHN0b3BzLmxlbmd0aD4wKXN3aXRjaChlLnR5cGUpe2Nhc2UiZGF0ZSI6Y2FzZSJsaW5lYXIiOmZvcih0PTA7dDxlLnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg7dCsrKWlmKChuPWUudGlja2Zvcm1hdHN0b3BzW3RdKS5lbmFibGVkJiYoYT1lLmR0aWNrLGk9bi5kdGlja3JhbmdlLG89dm9pZCAwLGw9dm9pZCAwLHM9dm9pZCAwLG89Y3x8ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGw9aVswXSxzPWlbMV0sKCFsJiYibnVtYmVyIiE9dHlwZW9mIGx8fG8obCk8PW8oYSkpJiYoIXMmJiJudW1iZXIiIT10eXBlb2Ygc3x8byhzKT49byhhKSkpKXtyPW47YnJlYWt9YnJlYWs7Y2FzZSJsb2ciOmZvcih0PTA7dDxlLnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg7dCsrKWlmKChuPWUudGlja2Zvcm1hdHN0b3BzW3RdKS5lbmFibGVkJiZkKGUuZHRpY2ssbi5kdGlja3JhbmdlKSl7cj1uO2JyZWFrfX1yZXR1cm4gcj9yLnZhbHVlOmUudGlja2Zvcm1hdH0sWS5nZXRTdWJwbG90cz1mdW5jdGlvbihlLHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLG49ci5jYXJ0ZXNpYW4uY29uY2F0KHIuZ2wyZHx8W10pLGE9dD9ZLmZpbmRTdWJwbG90c1dpdGhBeGlzKG4sdCk6bjtyZXR1cm4gYS5zb3J0KChmdW5jdGlvbihlLHQpe3ZhciByPWUuc3Vic3RyKDEpLnNwbGl0KCJ5Iiksbj10LnN1YnN0cigxKS5zcGxpdCgieSIpO3JldHVybiByWzBdPT09blswXT8rclsxXS0rblsxXTorclswXS0rblswXX0pKSxhfSxZLmZpbmRTdWJwbG90c1dpdGhBeGlzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPW5ldyBSZWdFeHAoIngiPT09dC5faWQuY2hhckF0KDApPyJeIit0Ll9pZCsieSI6dC5faWQrIiQiKSxuPVtdLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIGk9ZVthXTtyLnRlc3QoaSkmJm4ucHVzaChpKX1yZXR1cm4gbn0sWS5tYWtlQ2xpcFBhdGhzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQ7aWYoIXQuX2hhc09ubHlMYXJnZVNwbG9tcyl7dmFyIHIsYSxpPXtfb2Zmc2V0OjAsX2xlbmd0aDp0LndpZHRoLF9pZDoiIn0sbz17X29mZnNldDowLF9sZW5ndGg6dC5oZWlnaHQsX2lkOiIifSxsPVkubGlzdChlLCJ4IiwhMCkscz1ZLmxpc3QoZSwieSIsITApLGM9W107Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKylmb3IoYy5wdXNoKHt4Omxbcl0seTpvfSksYT0wO2E8cy5sZW5ndGg7YSsrKTA9PT1yJiZjLnB1c2goe3g6aSx5OnNbYV19KSxjLnB1c2goe3g6bFtyXSx5OnNbYV19KTt2YXIgdT10Ll9jbGlwcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLmRhdGEoYywoZnVuY3Rpb24oZSl7cmV0dXJuIGUueC5faWQrZS55Ll9pZH0pKTt1LmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImF4ZXNjbGlwIiwhMCkuYXR0cigiaWQiLChmdW5jdGlvbihlKXtyZXR1cm4iY2xpcCIrdC5fdWlkK2UueC5faWQrZS55Ll9pZH0pKS5hcHBlbmQoInJlY3QiKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVhY2goKGZ1bmN0aW9uKGUpe24uc2VsZWN0KHRoaXMpLnNlbGVjdCgicmVjdCIpLmF0dHIoe3g6ZS54Ll9vZmZzZXR8fDAseTplLnkuX29mZnNldHx8MCx3aWR0aDplLnguX2xlbmd0aHx8MSxoZWlnaHQ6ZS55Ll9sZW5ndGh8fDF9KX0pKX19LFkuZHJhdz1mdW5jdGlvbihlLHQscil7dmFyIG49ZS5fZnVsbExheW91dDsicmVkcmF3Ij09PXQmJm4uX3BhcGVyLnNlbGVjdEFsbCgiZy5zdWJwbG90IikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXSxyPW4uX3Bsb3RzW3RdO2lmKHIpe3ZhciBhPXIueGF4aXMsaT1yLnlheGlzO3IueGF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2EuX2lkKyJ0aWNrIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIraS5faWQrInRpY2siKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIithLl9pZCsidGljazIiKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsidGljazIiKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIithLl9pZCsiZGl2aWRlciIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2kuX2lkKyJkaXZpZGVyIikucmVtb3ZlKCksci5ncmlkbGF5ZXImJnIuZ3JpZGxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLHIuemVyb2xpbmVsYXllciYmci56ZXJvbGluZWxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoIi5nLSIrYS5faWQrInRpdGxlIikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdCgiLmctIitpLl9pZCsidGl0bGUiKS5yZW1vdmUoKX19KSk7dmFyIGE9dCYmInJlZHJhdyIhPT10P3Q6WS5saXN0SWRzKGUpO3JldHVybiBsLnN5bmNPckFzeW5jKGEubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtpZih0KXt2YXIgbj1ZLmdldEZyb21JZChlLHQpLGE9WS5kcmF3T25lKGUsbixyKTtyZXR1cm4gbi5fcj1uLnJhbmdlLnNsaWNlKCksbi5fcmw9bC5zaW1wbGVNYXAobi5fcixuLnIybCksYX19fSkpKX0sWS5kcmF3T25lPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLHM7cj1yfHx7fSx0LnNldFNjYWxlKCk7dmFyIGM9ZS5fZnVsbExheW91dCxwPXQuX2lkLGg9cC5jaGFyQXQoMCksZz1ZLmNvdW50ZXJMZXR0ZXIocCksbT1jLl9wbG90c1t0Ll9tYWluU3VicGxvdF07aWYobSl7dmFyIHY9bVtoKyJheGlzbGF5ZXIiXSx5PXQuX21haW5MaW5lUG9zaXRpb24seD10Ll9tYWluTWlycm9yUG9zaXRpb24sYj10Ll92YWxzPVkuY2FsY1RpY2tzKHQpLF89W3QubWlycm9yLHkseF0uam9pbigiXyIpO2ZvcihuPTA7bjxiLmxlbmd0aDtuKyspYltuXS5heEluZm89Xzt0Ll9zZWxlY3Rpb25zPXt9LHQuX3RpY2tBbmdsZXMmJih0Ll9wcmV2VGlja0FuZ2xlcz10Ll90aWNrQW5nbGVzKSx0Ll90aWNrQW5nbGVzPXt9LHQuX2RlcHRoPW51bGw7dmFyIHc9e307aWYodC52aXNpYmxlKXt2YXIgVCxNLGs9WS5tYWtlVHJhbnNUaWNrRm4odCksQT1ZLm1ha2VUcmFuc1RpY2tMYWJlbEZuKHQpLEw9Imluc2lkZSI9PT10LnRpY2tzLFM9Im91dHNpZGUiPT09dC50aWNrcztpZigiYm91bmRhcmllcyI9PT10LnRpY2tzb24pe3ZhciBEPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1bXSxhPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS54Ym5kW3RdO251bGwhPT1yJiZuLnB1c2gobC5leHRlbmRGbGF0KHt9LGUse3g6cn0pKX07aWYodC5sZW5ndGgpe2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspYSh0W3JdLDApO2EodFtyLTFdLDEpfXJldHVybiBufSgwLGIpO009WS5jbGlwRW5kcyh0LEQpLFQ9TD9NOkR9ZWxzZSBNPVkuY2xpcEVuZHModCxiKSxUPUwmJiJwZXJpb2QiIT09dC50aWNrbGFiZWxtb2RlP006Yjt2YXIgQz10Ll9ncmlkVmFscz1NLE89ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGE9W10saT10Lmxlbmd0aCYmdFt0Lmxlbmd0aC0xXS54PHRbMF0ueCxvPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS54Ym5kW3RdO251bGwhPT1yJiZhLnB1c2gobC5leHRlbmRGbGF0KHt9LGUse3g6cn0pKX07aWYoZS5zaG93ZGl2aWRlcnMmJnQubGVuZ3RoKXtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgcz10W3JdO3MudGV4dDIhPT1uJiZvKHMsaT8xOjApLG49cy50ZXh0Mn1vKHRbci0xXSxpPzA6MSl9cmV0dXJuIGF9KHQsYik7aWYoIWMuX2hhc09ubHlMYXJnZVNwbG9tcyl7dmFyIFA9dC5fc3VicGxvdHNXaXRoLEk9e307Zm9yKG49MDtuPFAubGVuZ3RoO24rKyl7YT1QW25dO3ZhciBSPShzPWMuX3Bsb3RzW2FdKVtnKyJheGlzIl0sej1SLl9tYWluQXhpcy5faWQ7aWYoIUlbel0pe0lbel09MTt2YXIgTj0ieCI9PT1oPyJNMCwiK1IuX29mZnNldCsidiIrUi5fbGVuZ3RoOiJNIitSLl9vZmZzZXQrIiwwaCIrUi5fbGVuZ3RoO1kuZHJhd0dyaWQoZSx0LHt2YWxzOkMsY291bnRlckF4aXM6UixsYXllcjpzLmdyaWRsYXllci5zZWxlY3QoIi4iK3ApLHBhdGg6Tix0cmFuc0ZuOmt9KSxZLmRyYXdaZXJvTGluZShlLHQse2NvdW50ZXJBeGlzOlIsbGF5ZXI6cy56ZXJvbGluZWxheWVyLHBhdGg6Tix0cmFuc0ZuOmt9KX19fXZhciBGPVkuZ2V0VGlja1NpZ25zKHQpLEU9W107aWYodC50aWNrcyl7dmFyIGosVixVLHE9WS5tYWtlVGlja1BhdGgodCx5LEZbMl0pO2lmKHQuX2FuY2hvckF4aXMmJnQubWlycm9yJiYhMCE9PXQubWlycm9yPyhqPVkubWFrZVRpY2tQYXRoKHQseCxGWzNdKSxWPXEraik6KGo9IiIsVj1xKSx0LnNob3dkaXZpZGVycyYmUyYmImJvdW5kYXJpZXMiPT09dC50aWNrc29uKXt2YXIgRz17fTtmb3Iobj0wO248Ty5sZW5ndGg7bisrKUdbT1tuXS54XT0xO1U9ZnVuY3Rpb24oZSl7cmV0dXJuIEdbZS54XT9qOlZ9fWVsc2UgVT1WO1kuZHJhd1RpY2tzKGUsdCx7dmFsczpULGxheWVyOnYscGF0aDpVLHRyYW5zRm46a30pLCJhbGx0aWNrcyI9PT10Lm1pcnJvciYmKEU9T2JqZWN0LmtleXModC5fbGluZXBvc2l0aW9uc3x8e30pKX1mb3Iobj0wO248RS5sZW5ndGg7bisrKXthPUVbbl0scz1jLl9wbG90c1thXTt2YXIgWj10Ll9saW5lcG9zaXRpb25zW2FdfHxbXSxXPVkubWFrZVRpY2tQYXRoKHQsWlswXSxGWzBdKStZLm1ha2VUaWNrUGF0aCh0LFpbMV0sRlsxXSk7WS5kcmF3VGlja3MoZSx0LHt2YWxzOlQsbGF5ZXI6c1toKyJheGlzbGF5ZXIiXSxwYXRoOlcsdHJhbnNGbjprfSl9dmFyIFg9W107aWYoWC5wdXNoKChmdW5jdGlvbigpe3JldHVybiBZLmRyYXdMYWJlbHMoZSx0LHt2YWxzOmIsbGF5ZXI6dixwbG90aW5mbzpzLHRyYW5zRm46QSxsYWJlbEZuczpZLm1ha2VMYWJlbEZucyh0LHkpfSl9KSksIm11bHRpY2F0ZWdvcnkiPT09dC50eXBlKXt2YXIgSj17eDoyLHk6MTB9W2hdO1gucHVzaCgoZnVuY3Rpb24oKXt2YXIgcj17eDoiaGVpZ2h0Iix5OiJ3aWR0aCJ9W2hdLG49SygpW3JdK0orKHQuX3RpY2tBbmdsZXNbcCsidGljayJdP3QudGlja2ZvbnQuc2l6ZSpIOjApO3JldHVybiBZLmRyYXdMYWJlbHMoZSx0LHt2YWxzOnBlKHQsYiksbGF5ZXI6dixjbHM6cCsidGljazIiLHJlcG9zaXRpb25PblVwZGF0ZTohMCxzZWNvbmRhcnk6ITAsdHJhbnNGbjprLGxhYmVsRm5zOlkubWFrZUxhYmVsRm5zKHQseStuKkZbNF0pfSl9KSksWC5wdXNoKChmdW5jdGlvbigpe3JldHVybiB0Ll9kZXB0aD1GWzRdKihLKCJ0aWNrMiIpW3Quc2lkZV0teSksZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQuX2lkKyJkaXZpZGVyIixhPXIudmFscyxpPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShhLGdlKTtpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoImNyaXNwIiwxKS5jYWxsKGQuc3Ryb2tlLHQuZGl2aWRlcmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixmLmNyaXNwUm91bmQoZSx0LmRpdmlkZXJ3aWR0aCwxKSsicHgiKSxpLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKS5hdHRyKCJkIixyLnBhdGgpfShlLHQse3ZhbHM6TyxsYXllcjp2LHBhdGg6WS5tYWtlVGlja1BhdGgodCx5LEZbNF0sdC5fZGVwdGgpLHRyYW5zRm46a30pfSkpfWVsc2UgdC50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKSYmWC5wdXNoKChmdW5jdGlvbigpe3QuX2RlcHRoPUZbNF0qKEsoKVt0LnNpZGVdLXkpfSkpO3ZhciBRPW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKHQpO3JldHVybiBYLnB1c2goKGZ1bmN0aW9uKCl7dmFyIHIsbixhLGwscz10LnNpZGUuY2hhckF0KDApLHU9Qlt0LnNpZGVdLmNoYXJBdCgwKSxkPVkuZ2V0UHhQb3NpdGlvbihlLHQpLGY9Uz90LnRpY2tsZW46MDtpZigodC5hdXRvbWFyZ2lufHxRKSYmKCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT9yPUsoInRpY2syIik6KHI9SygpLCJ4Ij09PWgmJiJiIj09PXMmJih0Ll9kZXB0aD1NYXRoLm1heChyLndpZHRoPjA/ci5ib3R0b20tZDowLGYpKSkpLHQuYXV0b21hcmdpbil7bj17eDowLHk6MCxyOjAsbDowLHQ6MCxiOjB9O3ZhciBwPVswLDFdO2lmKCJ4Ij09PWgpe2lmKCJiIj09PXM/bltzXT10Ll9kZXB0aDoobltzXT10Ll9kZXB0aD1NYXRoLm1heChyLndpZHRoPjA/ZC1yLnRvcDowLGYpLHAucmV2ZXJzZSgpKSxyLndpZHRoPjApe3ZhciBtPXIucmlnaHQtKHQuX29mZnNldCt0Ll9sZW5ndGgpO20+MCYmKG4ueHI9MSxuLnI9bSk7dmFyIHY9dC5fb2Zmc2V0LXIubGVmdDt2PjAmJihuLnhsPTAsbi5sPXYpfX1lbHNlIGlmKCJsIj09PXM/bltzXT10Ll9kZXB0aD1NYXRoLm1heChyLmhlaWdodD4wP2Qtci5sZWZ0OjAsZik6KG5bc109dC5fZGVwdGg9TWF0aC5tYXgoci5oZWlnaHQ+MD9yLnJpZ2h0LWQ6MCxmKSxwLnJldmVyc2UoKSksci5oZWlnaHQ+MCl7dmFyIHk9ci5ib3R0b20tKHQuX29mZnNldCt0Ll9sZW5ndGgpO3k+MCYmKG4ueWI9MCxuLmI9eSk7dmFyIHg9dC5fb2Zmc2V0LXIudG9wO3g+MCYmKG4ueXQ9MSxuLnQ9eCl9bltnXT0iZnJlZSI9PT10LmFuY2hvcj90LnBvc2l0aW9uOnQuX2FuY2hvckF4aXMuZG9tYWluW3BbMF1dLHQudGl0bGUudGV4dCE9PWMuX2RmbHRUaXRsZVtoXSYmKG5bc10rPW1lKHQpKyh0LnRpdGxlLnN0YW5kb2ZmfHwwKSksdC5taXJyb3ImJiJmcmVlIiE9PXQuYW5jaG9yJiYoKGE9e3g6MCx5OjAscjowLGw6MCx0OjAsYjowfSlbdV09dC5saW5ld2lkdGgsdC5taXJyb3ImJiEwIT09dC5taXJyb3ImJihhW3VdKz1mKSwhMD09PXQubWlycm9yfHwidGlja3MiPT09dC5taXJyb3I/YVtnXT10Ll9hbmNob3JBeGlzLmRvbWFpbltwWzFdXToiYWxsIiE9PXQubWlycm9yJiYiYWxsdGlja3MiIT09dC5taXJyb3J8fChhW2ddPVt0Ll9jb3VudGVyRG9tYWluTWluLHQuX2NvdW50ZXJEb21haW5NYXhdW3BbMV1dKSl9USYmKGw9by5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiYXV0b01hcmdpbk9wdHMiKShlLHQpKSxpLmF1dG9NYXJnaW4oZSx4ZSh0KSxuKSxpLmF1dG9NYXJnaW4oZSxiZSh0KSxhKSxpLmF1dG9NYXJnaW4oZSxfZSh0KSxsKX0pKSxyLnNraXBUaXRsZXx8USYmImJvdHRvbSI9PT10LnNpZGV8fFgucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgcixuPWUuX2Z1bGxMYXlvdXQsYT10Ll9pZCxpPWEuY2hhckF0KDApLG89dC50aXRsZS5mb250LnNpemU7aWYodC50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKSlyPXQuX2RlcHRoK3QudGl0bGUuc3RhbmRvZmYrbWUodCk7ZWxzZXt2YXIgbD1MZSh0KTtpZigibXVsdGljYXRlZ29yeSI9PT10LnR5cGUpcj10Ll9kZXB0aDtlbHNle3ZhciBzPTEuNSpvO2wmJihzPS41Km8sIm91dHNpZGUiPT09dC50aWNrcyYmKHMrPXQudGlja2xlbikpLHI9MTArcysodC5saW5ld2lkdGg/dC5saW5ld2lkdGgtMTowKX1sfHwocis9IngiPT09aT8idG9wIj09PXQuc2lkZT9vKih0LnNob3d0aWNrbGFiZWxzPzE6MCk6byoodC5zaG93dGlja2xhYmVscz8xLjU6LjUpOiJyaWdodCI9PT10LnNpZGU/byoodC5zaG93dGlja2xhYmVscz8xOi41KTpvKih0LnNob3d0aWNrbGFiZWxzPy41OjApKX12YXIgYyxkLHAsaCxnPVkuZ2V0UHhQb3NpdGlvbihlLHQpOyJ4Ij09PWk/KGQ9dC5fb2Zmc2V0K3QuX2xlbmd0aC8yLHA9InRvcCI9PT10LnNpZGU/Zy1yOmcrcik6KHA9dC5fb2Zmc2V0K3QuX2xlbmd0aC8yLGQ9InJpZ2h0Ij09PXQuc2lkZT9nK3I6Zy1yLGM9e3JvdGF0ZToiLTkwIixvZmZzZXQ6MH0pO2lmKCJtdWx0aWNhdGVnb3J5IiE9PXQudHlwZSl7dmFyIG09dC5fc2VsZWN0aW9uc1t0Ll9pZCsidGljayJdO2lmKGg9e3NlbGVjdGlvbjptLHNpZGU6dC5zaWRlfSxtJiZtLm5vZGUoKSYmbS5ub2RlKCkucGFyZW50Tm9kZSl7dmFyIHY9Zi5nZXRUcmFuc2xhdGUobS5ub2RlKCkucGFyZW50Tm9kZSk7aC5vZmZzZXRMZWZ0PXYueCxoLm9mZnNldFRvcD12Lnl9dC50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKSYmKGgucGFkPTApfXJldHVybiB1LmRyYXcoZSxhKyJ0aXRsZSIse3Byb3BDb250YWluZXI6dCxwcm9wTmFtZTp0Ll9uYW1lKyIudGl0bGUudGV4dCIscGxhY2Vob2xkZXI6bi5fZGZsdFRpdGxlW2ldLGF2b2lkOmgsdHJhbnNmb3JtOmMsYXR0cmlidXRlczp7eDpkLHk6cCwidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pfShlLHQpfSkpLGwuc3luY09yQXN5bmMoWCl9fWZ1bmN0aW9uIEsoZSl7dmFyIHI9cCsoZXx8InRpY2siKTtyZXR1cm4gd1tyXXx8KHdbcl09ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaTtlLl9zZWxlY3Rpb25zW3RdLnNpemUoKT8ocj0xLzAsbj0tMS8wLGE9MS8wLGk9LTEvMCxlLl9zZWxlY3Rpb25zW3RdLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9eWUodGhpcyksdD1mLmJCb3goZS5ub2RlKCkucGFyZW50Tm9kZSk7cj1NYXRoLm1pbihyLHQudG9wKSxuPU1hdGgubWF4KG4sdC5ib3R0b20pLGE9TWF0aC5taW4oYSx0LmxlZnQpLGk9TWF0aC5tYXgoaSx0LnJpZ2h0KX0pKSk6KHI9MCxuPTAsYT0wLGk9MCk7cmV0dXJue3RvcDpyLGJvdHRvbTpuLGxlZnQ6YSxyaWdodDppLGhlaWdodDpuLXIsd2lkdGg6aS1hfX0odCxyKSksd1tyXX19LFkuZ2V0VGlja1NpZ25zPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2lkLmNoYXJBdCgwKSxyPXt4OiJ0b3AiLHk6InJpZ2h0In1bdF0sbj1lLnNpZGU9PT1yPzE6LTEsYT1bLTEsMSxuLC1uXTtyZXR1cm4iaW5zaWRlIiE9PWUudGlja3M9PSgieCI9PT10KSYmKGE9YS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybi1lfSkpKSxlLnNpZGUmJmEucHVzaCh7bDotMSx0Oi0xLHI6MSxiOjF9W2Uuc2lkZS5jaGFyQXQoMCldKSxhfSxZLm1ha2VUcmFuc1RpY2tGbj1mdW5jdGlvbihlKXtyZXR1cm4ieCI9PT1lLl9pZC5jaGFyQXQoMCk/ZnVuY3Rpb24odCl7cmV0dXJuIHMoZS5fb2Zmc2V0K2UubDJwKHQueCksMCl9OmZ1bmN0aW9uKHQpe3JldHVybiBzKDAsZS5fb2Zmc2V0K2UubDJwKHQueCkpfX0sWS5tYWtlVHJhbnNUaWNrTGFiZWxGbj1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD1lLnRpY2tsYWJlbHBvc2l0aW9ufHwiIixyPWZ1bmN0aW9uKGUpe3JldHVybi0xIT09dC5pbmRleE9mKGUpfSxuPXIoInRvcCIpLGE9cigibGVmdCIpLGk9cigicmlnaHQiKSxvPXIoImJvdHRvbSIpLGw9cigiaW5zaWRlIikscz1vfHxhfHxufHxpO2lmKCFzJiYhbClyZXR1cm5bMCwwXTt2YXIgYz1lLnNpZGUsdT1zPyhlLnRpY2t3aWR0aHx8MCkvMjowLGQ9MyxmPWUudGlja2ZvbnQ/ZS50aWNrZm9udC5zaXplOjEyOyhvfHxuKSYmKHUrPWYqaixkKz0oZS5saW5ld2lkdGh8fDApLzIpOyhhfHxpKSYmKHUrPShlLmxpbmV3aWR0aHx8MCkvMixkKz0zKTtsJiYidG9wIj09PWMmJihkLT1mKigxLWopKTsoYXx8bikmJih1PS11KTsiYm90dG9tIiE9PWMmJiJyaWdodCIhPT1jfHwoZD0tZCk7cmV0dXJuW3M/dTowLGw/ZDowXX0oZSkscj10WzBdLG49dFsxXTtyZXR1cm4ieCI9PT1lLl9pZC5jaGFyQXQoMCk/ZnVuY3Rpb24odCl7cmV0dXJuIHMocitlLl9vZmZzZXQrZS5sMnAoaGUodCkpLG4pfTpmdW5jdGlvbih0KXtyZXR1cm4gcyhuLHIrZS5fb2Zmc2V0K2UubDJwKGhlKHQpKSl9fSxZLm1ha2VUaWNrUGF0aD1mdW5jdGlvbihlLHQscixuKXtuPXZvaWQgMCE9PW4/bjplLnRpY2tsZW47dmFyIGE9ZS5faWQuY2hhckF0KDApLGk9KGUubGluZXdpZHRofHwxKS8yO3JldHVybiJ4Ij09PWE/Ik0wLCIrKHQraSpyKSsidiIrbipyOiJNIisodCtpKnIpKyIsMGgiK24qcn0sWS5tYWtlTGFiZWxGbnM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUudGlja2xhYmVscG9zaXRpb258fCIiLGk9ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1uLmluZGV4T2YoZSl9LG89aSgidG9wIikscz1pKCJsZWZ0IiksYz1pKCJyaWdodCIpLHU9aSgiYm90dG9tIil8fHN8fG98fGMsZD1pKCJpbnNpZGUiKSxmPSJpbnNpZGUiPT09biYmImluc2lkZSI9PT1lLnRpY2tzfHwhZCYmIm91dHNpZGUiPT09ZS50aWNrcyYmImJvdW5kYXJpZXMiIT09ZS50aWNrc29uLHA9MCxoPTAsZz1mP2UudGlja2xlbjowO2lmKGQ/Zyo9LTE6dSYmKGc9MCksZiYmKHArPWcscikpe3ZhciBtPWwuZGVnMnJhZChyKTtwPWcqTWF0aC5jb3MobSkrMSxoPWcqTWF0aC5zaW4obSl9ZS5zaG93dGlja2xhYmVscyYmKGZ8fGUuc2hvd2xpbmUpJiYocCs9LjIqZS50aWNrZm9udC5zaXplKTt2YXIgdix5LHgsYixfLHc9e2xhYmVsU3RhbmRvZmY6cCs9KGUubGluZXdpZHRofHwxKS8yKihkPy0xOjEpLGxhYmVsU2hpZnQ6aH0sVD0wLE09ZS5zaWRlLGs9ZS5faWQuY2hhckF0KDApLEE9ZS50aWNrYW5nbGU7aWYoIngiPT09ayliPShfPSFkJiYiYm90dG9tIj09PU18fGQmJiJ0b3AiPT09TSk/MTotMSxkJiYoYio9LTEpLHY9aCpiLHk9dCtwKmIseD1fPzE6LS4yLDkwPT09TWF0aC5hYnMoQSkmJihkP3grPUU6eD0tOTA9PT1BJiYiYm90dG9tIj09PU0/ajo5MD09PUEmJiJ0b3AiPT09TT9FOi41LFQ9RS8yKihBLzkwKSksdy54Rm49ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZHgrditUKmUuZm9udFNpemV9LHcueUZuPWZ1bmN0aW9uKGUpe3JldHVybiBlLmR5K3krZS5mb250U2l6ZSp4fSx3LmFuY2hvckZuPWZ1bmN0aW9uKGUsdCl7aWYodSl7aWYocylyZXR1cm4iZW5kIjtpZihjKXJldHVybiJzdGFydCJ9cmV0dXJuIGEodCkmJjAhPT10JiYxODAhPT10P3QqYjwwIT09ZD8iZW5kIjoic3RhcnQiOiJtaWRkbGUifSx3LmhlaWdodEZuPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gcjwtNjB8fHI+NjA/LS41Km46InRvcCI9PT1lLnNpZGUhPT1kPy1uOjB9O2Vsc2UgaWYoInkiPT09ayl7aWYoYj0oXz0hZCYmImxlZnQiPT09TXx8ZCYmInJpZ2h0Ij09PU0pPzE6LTEsZCYmKGIqPS0xKSx2PXAseT1oKmIseD0wLGR8fDkwIT09TWF0aC5hYnMoQSl8fCh4PS05MD09PUEmJiJsZWZ0Ij09PU18fDkwPT09QSYmInJpZ2h0Ij09PU0/ajouNSksZCl7dmFyIEw9YShBKT8rQTowO2lmKDAhPT1MKXt2YXIgUz1sLmRlZzJyYWQoTCk7VD1NYXRoLmFicyhNYXRoLnNpbihTKSkqaipiLHg9MH19dy54Rm49ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZHgrdC0oditlLmZvbnRTaXplKngpKmIrVCplLmZvbnRTaXplfSx3LnlGbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5keSt5K2UuZm9udFNpemUqRX0sdy5hbmNob3JGbj1mdW5jdGlvbihlLHQpe3JldHVybiBhKHQpJiY5MD09PU1hdGguYWJzKHQpPyJtaWRkbGUiOl8/ImVuZCI6InN0YXJ0In0sdy5oZWlnaHRGbj1mdW5jdGlvbih0LHIsbil7cmV0dXJuInJpZ2h0Ij09PWUuc2lkZSYmKHIqPS0xKSxyPC0zMD8tbjpyPDMwPy0uNSpuOjB9fXJldHVybiB3fSxZLmRyYXdUaWNrcz1mdW5jdGlvbihlLHQscil7cj1yfHx7fTt2YXIgbj10Ll9pZCsidGljayIsYT1yLnZhbHM7InBlcmlvZCI9PT10LnRpY2tsYWJlbG1vZGUmJihhPWEuc2xpY2UoKSkuc2hpZnQoKTt2YXIgaT1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEodC50aWNrcz9hOltdLGdlKTtpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoInRpY2tzIiwxKS5jbGFzc2VkKCJjcmlzcCIsITEhPT1yLmNyaXNwKS5jYWxsKGQuc3Ryb2tlLHQudGlja2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixmLmNyaXNwUm91bmQoZSx0LnRpY2t3aWR0aCwxKSsicHgiKS5hdHRyKCJkIixyLnBhdGgpLnN0eWxlKCJkaXNwbGF5IixudWxsKSxTZSh0LFt6XSksaS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbil9LFkuZHJhd0dyaWQ9ZnVuY3Rpb24oZSx0LHIpe3I9cnx8e307dmFyIG49dC5faWQrImdyaWQiLGE9ci52YWxzLGk9ci5jb3VudGVyQXhpcztpZighMT09PXQuc2hvd2dyaWQpYT1bXTtlbHNlIGlmKGkmJlkuc2hvdWxkU2hvd1plcm9MaW5lKGUsdCxpKSlmb3IodmFyIG89ImFycmF5Ij09PXQudGlja21vZGUsbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgcz1hW2xdLng7aWYobz8hczpNYXRoLmFicyhzKTx0LmR0aWNrLzEwMCl7aWYoYT1hLnNsaWNlKDAsbCkuY29uY2F0KGEuc2xpY2UobCsxKSksIW8pYnJlYWs7bC0tfX12YXIgYz1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoYSxnZSk7Yy5leGl0KCkucmVtb3ZlKCksYy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJjcmlzcCIsITEhPT1yLmNyaXNwKSx0Ll9ndz1mLmNyaXNwUm91bmQoZSx0LmdyaWR3aWR0aCwxKSxjLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKS5hdHRyKCJkIixyLnBhdGgpLmNhbGwoZC5zdHJva2UsdC5ncmlkY29sb3J8fCIjZGRkIikuc3R5bGUoInN0cm9rZS13aWR0aCIsdC5fZ3crInB4Iikuc3R5bGUoImRpc3BsYXkiLG51bGwpLFNlKHQsW1JdKSwiZnVuY3Rpb24iPT10eXBlb2Ygci5wYXRoJiZjLmF0dHIoImQiLHIucGF0aCl9LFkuZHJhd1plcm9MaW5lPWZ1bmN0aW9uKGUsdCxyKXtyPXJ8fHI7dmFyIG49dC5faWQrInpsIixhPVkuc2hvdWxkU2hvd1plcm9MaW5lKGUsdCxyLmNvdW50ZXJBeGlzKSxpPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShhP1t7eDowLGlkOnQuX2lkfV06W10pO2kuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgiemwiLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLmVhY2goKGZ1bmN0aW9uKCl7ci5sYXllci5zZWxlY3RBbGwoInBhdGgiKS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBxKGUuaWQsdC5pZCl9KSl9KSksaS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbikuYXR0cigiZCIsci5wYXRoKS5jYWxsKGQuc3Ryb2tlLHQuemVyb2xpbmVjb2xvcnx8ZC5kZWZhdWx0TGluZSkuc3R5bGUoInN0cm9rZS13aWR0aCIsZi5jcmlzcFJvdW5kKGUsdC56ZXJvbGluZXdpZHRoLHQuX2d3fHwxKSsicHgiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksU2UodCxbSV0pfSxZLmRyYXdMYWJlbHM9ZnVuY3Rpb24oZSx0LHIpe3I9cnx8e307dmFyIGk9ZS5fZnVsbExheW91dCxvPXQuX2lkLHU9by5jaGFyQXQoMCksZD1yLmNsc3x8bysidGljayIscD1yLnZhbHMsaD1yLmxhYmVsRm5zLGc9ci5zZWNvbmRhcnk/MDp0LnRpY2thbmdsZSxtPSh0Ll9wcmV2VGlja0FuZ2xlc3x8e30pW2RdLHY9ci5sYXllci5zZWxlY3RBbGwoImcuIitkKS5kYXRhKHQuc2hvd3RpY2tsYWJlbHM/cDpbXSxnZSkseT1bXTtmdW5jdGlvbiB4KGUsaSl7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgbz1uLnNlbGVjdCh0aGlzKSxsPW8uc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIiksdT1oLmFuY2hvckZuKGUsaSksZD1yLnRyYW5zRm4uY2FsbChvLm5vZGUoKSxlKSsoYShpKSYmMCE9K2k/IiByb3RhdGUoIitpKyIsIitoLnhGbihlKSsiLCIrKGgueUZuKGUpLWUuZm9udFNpemUvMikrIikiOiIiKSxwPWMubGluZUNvdW50KG8pLGc9SCplLmZvbnRTaXplLG09aC5oZWlnaHRGbihlLGEoaSk/K2k6MCwocC0xKSpnKTtpZihtJiYoZCs9cygwLG0pKSxsLmVtcHR5KCkpe3ZhciB2PW8uc2VsZWN0KCJ0ZXh0Iik7di5hdHRyKHt0cmFuc2Zvcm06ZCwidGV4dC1hbmNob3IiOnV9KSx2LnN0eWxlKCJvcGFjaXR5IiwxKSx0Ll9hZGp1c3RUaWNrTGFiZWxzT3ZlcmZsb3cmJnQuX2FkanVzdFRpY2tMYWJlbHNPdmVyZmxvdygpfWVsc2V7dmFyIHk9Zi5iQm94KGwubm9kZSgpKS53aWR0aCp7ZW5kOi0uNSxzdGFydDouNX1bdV07bC5hdHRyKCJ0cmFuc2Zvcm0iLGQrcyh5LDApKX19KSl9di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZCwxKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9ZS5fcHJvbWlzZXMubGVuZ3RoO3IuY2FsbChjLnBvc2l0aW9uVGV4dCxoLnhGbih0KSxoLnlGbih0KSkuY2FsbChmLmZvbnQsdC5mb250LHQuZm9udFNpemUsdC5mb250Q29sb3IpLnRleHQodC50ZXh0KS5jYWxsKGMuY29udmVydFRvVHNwYW5zLGUpLGUuX3Byb21pc2VzW2FdP3kucHVzaChlLl9wcm9taXNlcy5wb3AoKS50aGVuKChmdW5jdGlvbigpe3gocixnKX0pKSk6eChyLGcpfSkpLFNlKHQsW05dKSx2LmV4aXQoKS5yZW1vdmUoKSxyLnJlcG9zaXRpb25PblVwZGF0ZSYmdi5lYWNoKChmdW5jdGlvbihlKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5jYWxsKGMucG9zaXRpb25UZXh0LGgueEZuKGUpLGgueUZuKGUpKX0pKSx0Ll9hZGp1c3RUaWNrTGFiZWxzT3ZlcmZsb3c9ZnVuY3Rpb24oKXt2YXIgcj10LnRpY2tsYWJlbG92ZXJmbG93O2lmKHImJiJhbGxvdyIhPT1yKXt2YXIgYT0tMSE9PXIuaW5kZXhPZigiaGlkZSIpLG89IngiPT09dC5faWQuY2hhckF0KDApLHM9MCxjPW8/ZS5fZnVsbExheW91dC53aWR0aDplLl9mdWxsTGF5b3V0LmhlaWdodDtpZigtMSE9PXIuaW5kZXhPZigiZG9tYWluIikpe3ZhciB1PWwuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO3M9dC5sMnAodVswXSkrdC5fb2Zmc2V0LGM9dC5sMnAodVsxXSkrdC5fb2Zmc2V0fXZhciBkPU1hdGgubWluKHMsYykscD1NYXRoLm1heChzLGMpLGg9dC5zaWRlLGc9MS8wLG09LTEvMDtmb3IodmFyIHkgaW4gdi5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZihyLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpLmVtcHR5KCkpe3ZhciBpPWYuYkJveChyLm5vZGUoKSksbD0wO28/KGkucmlnaHQ+cHx8aS5sZWZ0PGQpJiYobD0xKTooaS5ib3R0b20+cHx8aS50b3ArKHQudGlja2FuZ2xlPzA6ZS5mb250U2l6ZS80KTxkKSYmKGw9MSk7dmFyIHM9ci5zZWxlY3QoInRleHQiKTtsP2EmJnMuc3R5bGUoIm9wYWNpdHkiLDApOihzLnN0eWxlKCJvcGFjaXR5IiwxKSxnPSJib3R0b20iPT09aHx8InJpZ2h0Ij09PWg/TWF0aC5taW4oZyxvP2kudG9wOmkubGVmdCk6LTEvMCxtPSJ0b3AiPT09aHx8ImxlZnQiPT09aD9NYXRoLm1heChtLG8/aS5ib3R0b206aS5yaWdodCk6MS8wKX19KSksaS5fcGxvdHMpe3ZhciB4PWkuX3Bsb3RzW3ldO2lmKHQuX2lkPT09eC54YXhpcy5faWR8fHQuX2lkPT09eC55YXhpcy5faWQpe3ZhciBiPW8/eC55YXhpczp4LnhheGlzO2ImJihiWyJfdmlzaWJsZUxhYmVsTWluXyIrdC5faWRdPWcsYlsiX3Zpc2libGVMYWJlbE1heF8iK3QuX2lkXT1tKX19fX0sdC5faGlkZUNvdW50ZXJBeGlzSW5zaWRlVGlja0xhYmVscz1mdW5jdGlvbihlKXt2YXIgcj0ieCI9PT10Ll9pZC5jaGFyQXQoMCksYT1bXTtmb3IodmFyIG8gaW4gaS5fcGxvdHMpe3ZhciBsPWkuX3Bsb3RzW29dO3QuX2lkIT09bC54YXhpcy5faWQmJnQuX2lkIT09bC55YXhpcy5faWR8fGEucHVzaChyP2wueWF4aXM6bC54YXhpcyl9YS5mb3JFYWNoKChmdW5jdGlvbihyLGEpe3ImJkxlKHIpJiYoZXx8W0ksUix6LE5dKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbz0idGljayI9PT1lLksmJiJ0ZXh0Ij09PWUuTCYmInBlcmlvZCI9PT10LnRpY2tsYWJlbG1vZGUsbD1pLl9wbG90c1t0Ll9tYWluU3VicGxvdF07KGUuSz09PUkuSz9sLnplcm9saW5lbGF5ZXIuc2VsZWN0QWxsKCIuIit0Ll9pZCsiemwiKTplLks9PT1SLks/bC5ncmlkbGF5ZXIuc2VsZWN0QWxsKCIuIit0Ll9pZCk6bFt0Ll9pZC5jaGFyQXQoMCkrImF4aXNsYXllciJdKS5lYWNoKChmdW5jdGlvbigpe3ZhciBpPW4uc2VsZWN0KHRoaXMpO2UuTCYmKGk9aS5zZWxlY3RBbGwoZS5MKSksaS5lYWNoKChmdW5jdGlvbihpKXt2YXIgbD10LmwycChvP2hlKGkpOmkueCkrdC5fb2Zmc2V0LHM9bi5zZWxlY3QodGhpcyk7bDx0WyJfdmlzaWJsZUxhYmVsTWF4XyIrci5faWRdJiZsPnRbIl92aXNpYmxlTGFiZWxNaW5fIityLl9pZF0/cy5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKToidGljayIhPT1lLkt8fGF8fHMuc3R5bGUoImRpc3BsYXkiLG51bGwpfSkpfSkpfSkpfSkpfSx4KHYsbSsxP206Zyk7dmFyIGI9bnVsbDt0Ll9zZWxlY3Rpb25zJiYodC5fc2VsZWN0aW9uc1tkXT12KTt2YXIgXz1bZnVuY3Rpb24oKXtyZXR1cm4geS5sZW5ndGgmJlByb21pc2UuYWxsKHkpfV07dC5hdXRvbWFyZ2luJiZpLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50JiY5MD09PW0/KGI9OTAsXy5wdXNoKChmdW5jdGlvbigpe3godixtKX0pKSk6Xy5wdXNoKChmdW5jdGlvbigpe2lmKHgodixnKSxwLmxlbmd0aCYmIngiPT09dSYmIWEoZykmJigibG9nIiE9PXQudHlwZXx8IkQiIT09U3RyaW5nKHQuZHRpY2spLmNoYXJBdCgwKSkpe2I9MDt2YXIgZSxuPTAsaT1bXTtpZih2LmVhY2goKGZ1bmN0aW9uKGUpe249TWF0aC5tYXgobixlLmZvbnRTaXplKTt2YXIgcj10LmwycChlLngpLGE9eWUodGhpcyksbz1mLmJCb3goYS5ub2RlKCkpO2kucHVzaCh7dG9wOjAsYm90dG9tOjEwLGhlaWdodDoxMCxsZWZ0OnItby53aWR0aC8yLHJpZ2h0OnIrby53aWR0aC8yKzIsd2lkdGg6by53aWR0aCsyfSl9KSksImJvdW5kYXJpZXMiIT09dC50aWNrc29uJiYhdC5zaG93ZGl2aWRlcnN8fHIuc2Vjb25kYXJ5KXt2YXIgbz1wLmxlbmd0aCxzPU1hdGguYWJzKChwW28tMV0ueC1wWzBdLngpKnQuX20pLyhvLTEpLGM9dC50aWNrbGFiZWxwb3NpdGlvbnx8IiIsZD1mdW5jdGlvbihlKXtyZXR1cm4tMSE9PWMuaW5kZXhPZihlKX0saD1kKCJ0b3AiKSxtPWQoImxlZnQiKSx5PWQoInJpZ2h0IiksXz1kKCJib3R0b20iKXx8bXx8aHx8eT8odC50aWNrd2lkdGh8fDApKzY6MCx3PXM8Mi41Km58fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZXx8InJlYWxheGlzIj09PXQuX25hbWU7Zm9yKGU9MDtlPGkubGVuZ3RoLTE7ZSsrKWlmKGwuYkJveEludGVyc2VjdChpW2VdLGlbZSsxXSxfKSl7Yj13PzkwOjMwO2JyZWFrfX1lbHNle3ZhciBUPTI7Zm9yKHQudGlja3MmJihUKz10LnRpY2t3aWR0aC8yKSxlPTA7ZTxpLmxlbmd0aDtlKyspe3ZhciBNPXBbZV0ueGJuZCxrPWlbZV07aWYobnVsbCE9PU1bMF0mJmsubGVmdC10LmwycChNWzBdKTxUfHxudWxsIT09TVsxXSYmdC5sMnAoTVsxXSktay5yaWdodDxUKXtiPTkwO2JyZWFrfX19YiYmeCh2LGIpfX0pKSx0Ll90aWNrQW5nbGVzJiZfLnB1c2goKGZ1bmN0aW9uKCl7dC5fdGlja0FuZ2xlc1tkXT1udWxsPT09Yj9hKGcpP2c6MDpifSkpO3ZhciB3PXQuX2FuY2hvckF4aXM7dyYmdy5hdXRvcmFuZ2UmJkxlKHQpJiYhRyhpLHQuX2lkKSYmKGkuX2luc2lkZVRpY2tMYWJlbHNBdXRvcmFuZ2V8fChpLl9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlPXt9KSxpLl9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlW3cuX25hbWUrIi5hdXRvcmFuZ2UiXT13LmF1dG9yYW5nZSxfLnB1c2goKGZ1bmN0aW9uKCl7di5lYWNoKChmdW5jdGlvbihlLHIpe3ZhciBuPXllKHRoaXMpO24uc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIikuZW1wdHkoKSYmKHQuX3ZhbHNbcl0uYmI9Zi5iQm94KG4ubm9kZSgpKSl9KSl9KSkpO3ZhciBUPWwuc3luY09yQXN5bmMoXyk7cmV0dXJuIFQmJlQudGhlbiYmZS5fcHJvbWlzZXMucHVzaChUKSxUfSxZLmdldFB4UG9zaXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWUuX2Z1bGxMYXlvdXQuX3NpemUsYT10Ll9pZC5jaGFyQXQoMCksaT10LnNpZGU7cmV0dXJuImZyZWUiIT09dC5hbmNob3I/cj10Ll9hbmNob3JBeGlzOiJ4Ij09PWE/cj17X29mZnNldDpuLnQrKDEtKHQucG9zaXRpb258fDApKSpuLmgsX2xlbmd0aDowfToieSI9PT1hJiYocj17X29mZnNldDpuLmwrKHQucG9zaXRpb258fDApKm4udyxfbGVuZ3RoOjB9KSwidG9wIj09PWl8fCJsZWZ0Ij09PWk/ci5fb2Zmc2V0OiJib3R0b20iPT09aXx8InJpZ2h0Ij09PWk/ci5fb2Zmc2V0K3IuX2xlbmd0aDp2b2lkIDB9LFkuc2hvdWxkU2hvd1plcm9MaW5lPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1sLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKTtyZXR1cm4gblswXSpuWzFdPD0wJiZ0Lnplcm9saW5lJiYoImxpbmVhciI9PT10LnR5cGV8fCItIj09PXQudHlwZSkmJiEodC5yYW5nZWJyZWFrcyYmdC5tYXNrQnJlYWtzKDApPT09UCkmJih2ZSh0LDApfHwhZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9ci5fbWFpbkF4aXM7aWYoIWEpcmV0dXJuO3ZhciBpPWUuX2Z1bGxMYXlvdXQsbz10Ll9pZC5jaGFyQXQoMCksbD1ZLmNvdW50ZXJMZXR0ZXIodC5faWQpLHM9dC5fb2Zmc2V0KyhNYXRoLmFicyhuWzBdKTxNYXRoLmFicyhuWzFdKT09KCJ4Ij09PW8pPzA6dC5fbGVuZ3RoKTtmdW5jdGlvbiBjKGUpe2lmKCFlLnNob3dsaW5lfHwhZS5saW5ld2lkdGgpcmV0dXJuITE7dmFyIHI9TWF0aC5tYXgoKGUubGluZXdpZHRoK3QuemVyb2xpbmV3aWR0aCkvMiwxKTtmdW5jdGlvbiBuKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZSYmTWF0aC5hYnMoZS1zKTxyfWlmKG4oZS5fbWFpbkxpbmVQb3NpdGlvbil8fG4oZS5fbWFpbk1pcnJvclBvc2l0aW9uKSlyZXR1cm4hMDt2YXIgYT1lLl9saW5lcG9zaXRpb25zfHx7fTtmb3IodmFyIGkgaW4gYSlpZihuKGFbaV1bMF0pfHxuKGFbaV1bMV0pKXJldHVybiEwfXZhciB1PWkuX3Bsb3RzW3IuX21haW5TdWJwbG90XTtpZighKHUubWFpbnBsb3RpbmZvfHx1KS5vdmVybGF5cy5sZW5ndGgpcmV0dXJuIGMocik7Zm9yKHZhciBkPVkubGlzdChlLGwpLGY9MDtmPGQubGVuZ3RoO2YrKyl7dmFyIHA9ZFtmXTtpZihwLl9tYWluQXhpcz09PWEmJmMocCkpcmV0dXJuITB9fShlLHQscixuKXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5fZnVsbERhdGEsbj10Ll9tYWluU3VicGxvdCxhPXQuX2lkLmNoYXJBdCgwKSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBsPXJbaV07aWYoITA9PT1sLnZpc2libGUmJmwueGF4aXMrbC55YXhpcz09PW4pe2lmKG8udHJhY2VJcyhsLCJiYXItbGlrZSIpJiZsLm9yaWVudGF0aW9uPT09e3g6ImgiLHk6InYifVthXSlyZXR1cm4hMDtpZihsLmZpbGwmJmwuZmlsbC5jaGFyQXQobC5maWxsLmxlbmd0aC0xKT09PWEpcmV0dXJuITB9fXJldHVybiExfShlLHQpKX0sWS5jbGlwRW5kcz1mdW5jdGlvbihlLHQpe3JldHVybiB0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHZlKGUsdC54KX0pKX0sWS5hbGxvd0F1dG9NYXJnaW49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVkubGlzdChlLCIiLCEwKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5hdXRvbWFyZ2luJiYoaS5hbGxvd0F1dG9NYXJnaW4oZSx4ZShuKSksbi5taXJyb3ImJmkuYWxsb3dBdXRvTWFyZ2luKGUsYmUobikpKSxvLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShuKSYmaS5hbGxvd0F1dG9NYXJnaW4oZSxfZShuKSl9fSxZLnN3YXA9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGE9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9W10sbz1lLl9mdWxsRGF0YVt0W3JdXS54YXhpcyxsPWUuX2Z1bGxEYXRhW3Rbcl1dLnlheGlzO2lmKG8mJmwpe2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspLTE9PT1hW25dLnguaW5kZXhPZihvKSYmLTE9PT1hW25dLnkuaW5kZXhPZihsKXx8aS5wdXNoKG4pO2lmKGkubGVuZ3RoKXt2YXIgcyxjPWFbaVswXV07aWYoaS5sZW5ndGg+MSlmb3Iobj0xO248aS5sZW5ndGg7bisrKXM9YVtpW25dXSx3ZShjLngscy54KSx3ZShjLnkscy55KTt3ZShjLngsW29dKSx3ZShjLnksW2xdKX1lbHNlIGEucHVzaCh7eDpbb10seTpbbF19KX19cmV0dXJuIGF9KGUsdCksbj0wO248ci5sZW5ndGg7bisrKVRlKGUscltuXS54LHJbbl0ueSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjEwMiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjoxMjQsIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIjoyMDAsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjIwNywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6MjEyLCIuLi8uLi9saWIiOjIzMiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjoyNTUsIi4uLy4uL3Bsb3RzL3Bsb3RzIjozMTYsIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4vYXV0b3JhbmdlIjoyNzgsIi4vYXhpc19hdXRvdHlwZSI6MjgwLCIuL2F4aXNfaWRzIjoyODMsIi4vY2xlYW5fdGlja3MiOjI4NSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6Mjk0LCIuL3NldF9jb252ZXJ0IjozMDEsIkBwbG90bHkvZDMiOjExLCJmYXN0LWlzbnVtZXJpYyI6MTd9XSwyODA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZmFzdC1pc251bWVyaWMiKSxhPWUoIi4uLy4uL2xpYiIpLGk9ZSgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPWEuaXNBcnJheU9yVHlwZWRBcnJheSxsPWEuaXNEYXRlVGltZSxzPWEuY2xlYW5OdW1iZXIsYz1NYXRoLnJvdW5kO2Z1bmN0aW9uIHUoZSx0KXtyZXR1cm4gdD9uKGUpOiJudW1iZXIiPT10eXBlb2YgZX1mdW5jdGlvbiBkKGUpe3JldHVybiBNYXRoLm1heCgxLChlLTEpLzFlMyl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1lLGY9ci5ub011bHRpQ2F0ZWdvcnk7aWYobyhhKSYmIWEubGVuZ3RoKXJldHVybiItIjtpZighZiYmZnVuY3Rpb24oZSl7cmV0dXJuIG8oZVswXSkmJm8oZVsxXSl9KGEpKXJldHVybiJtdWx0aWNhdGVnb3J5IjtpZihmJiZBcnJheS5pc0FycmF5KGFbMF0pKXtmb3IodmFyIHA9W10saD0wO2g8YS5sZW5ndGg7aCsrKWlmKG8oYVtoXSkpZm9yKHZhciBnPTA7ZzxhW2hdLmxlbmd0aDtnKyspcC5wdXNoKGFbaF1bZ10pO2E9cH1pZihmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aCxhPWQociksaT0wLG89MCxzPXt9LHU9MDt1PHI7dSs9YSl7dmFyIGY9Yyh1KSxwPWVbZl0saD1TdHJpbmcocCk7c1toXXx8KHNbaF09MSxsKHAsdCkmJmkrKyxuKHApJiZvKyspfXJldHVybiBpPjIqb30oYSx0KSlyZXR1cm4iZGF0ZSI7dmFyIG09InN0cmljdCIhPT1yLmF1dG90eXBlbnVtYmVycztyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1kKHIpLGE9MCxvPTAsbD17fSx1PTA7dTxyO3UrPW4pe3ZhciBmPWModSkscD1lW2ZdLGg9U3RyaW5nKHApO2lmKCFsW2hdKXtsW2hdPTE7dmFyIGc9dHlwZW9mIHA7ImJvb2xlYW4iPT09Zz9vKys6KHQ/cyhwKSE9PWk6Im51bWJlciI9PT1nKT9hKys6InN0cmluZyI9PT1nJiZvKyt9fXJldHVybiBvPjIqYX0oYSxtKT8iY2F0ZWdvcnkiOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49MDtuPHI7bisrKWlmKHUoZVtuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0oYSxtKT8ibGluZWFyIjoiLSJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjIxMiwiLi4vLi4vbGliIjoyMzIsImZhc3QtaXNudW1lcmljIjoxN31dLDI4MTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL2xpYiIpLG89ZSgiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD1lKCIuL2xheW91dF9hdHRyaWJ1dGVzIikscz1lKCIuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxjPWUoIi4vdGlja19tYXJrX2RlZmF1bHRzIiksdT1lKCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxkPWUoIi4vcHJlZml4X3N1ZmZpeF9kZWZhdWx0cyIpLGY9ZSgiLi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyIpLHA9ZSgiLi9saW5lX2dyaWRfZGVmYXVsdHMiKSxoPWUoIi4vc2V0X2NvbnZlcnQiKSxnPWUoIi4vY29uc3RhbnRzIikuV0VFS0RBWV9QQVRURVJOLG09ZSgiLi9jb25zdGFudHMiKS5IT1VSX1BBVFRFUk47ZnVuY3Rpb24gdihlLHQscil7ZnVuY3Rpb24gYShyLG4pe3JldHVybiBpLmNvZXJjZShlLHQsbC5yYW5nZWJyZWFrcyxyLG4pfWlmKGEoImVuYWJsZWQiKSl7dmFyIG89YSgiYm91bmRzIik7aWYobyYmby5sZW5ndGg+PTIpe3ZhciBzLGMsdT0iIjtpZigyPT09by5sZW5ndGgpZm9yKHM9MDtzPDI7cysrKWlmKGM9eChvW3NdKSl7dT1nO2JyZWFrfXZhciBkPWEoInBhdHRlcm4iLHUpO2lmKGQ9PT1nKWZvcihzPTA7czwyO3MrKykoYz14KG9bc10pKSYmKHQuYm91bmRzW3NdPW9bc109Yy0xKTtpZihkKWZvcihzPTA7czwyO3MrKylzd2l0Y2goYz1vW3NdLGQpe2Nhc2UgZzppZighbihjKSlyZXR1cm4gdm9pZCh0LmVuYWJsZWQ9ITEpO2lmKChjPStjKSE9PU1hdGguZmxvb3IoYyl8fGM8MHx8Yz49NylyZXR1cm4gdm9pZCh0LmVuYWJsZWQ9ITEpO3QuYm91bmRzW3NdPW9bc109YzticmVhaztjYXNlIG06aWYoIW4oYykpcmV0dXJuIHZvaWQodC5lbmFibGVkPSExKTtpZigoYz0rYyk8MHx8Yz4yNClyZXR1cm4gdm9pZCh0LmVuYWJsZWQ9ITEpO3QuYm91bmRzW3NdPW9bc109Y31pZighMT09PXIuYXV0b3JhbmdlKXt2YXIgZj1yLnJhbmdlO2lmKGZbMF08ZlsxXSl7aWYob1swXTxmWzBdJiZvWzFdPmZbMV0pcmV0dXJuIHZvaWQodC5lbmFibGVkPSExKX1lbHNlIGlmKG9bMF0+ZlswXSYmb1sxXTxmWzFdKXJldHVybiB2b2lkKHQuZW5hYmxlZD0hMSl9fWVsc2V7dmFyIHA9YSgidmFsdWVzIik7aWYoIXB8fCFwLmxlbmd0aClyZXR1cm4gdm9pZCh0LmVuYWJsZWQ9ITEpO2EoImR2YWx1ZSIpfX19dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4sbSl7dmFyIHkseD1uLmxldHRlcixiPW4uZm9udHx8e30sXz1uLnNwbG9tU3Rhc2h8fHt9LHc9cigidmlzaWJsZSIsIW4udmlzaWJsZURmbHQpLFQ9dC5fdGVtcGxhdGV8fHt9LE09dC50eXBlfHxULnR5cGV8fCItIjsiZGF0ZSI9PT1NJiYoYS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikoZSx0LCJjYWxlbmRhciIsbi5jYWxlbmRhciksbi5ub1RpY2tsYWJlbG1vZGV8fCh5PXIoInRpY2tsYWJlbG1vZGUiKSkpO3ZhciBrPSIiO24ubm9UaWNrbGFiZWxwb3NpdGlvbiYmIm11bHRpY2F0ZWdvcnkiIT09TXx8KGs9aS5jb2VyY2UoZSx0LHt0aWNrbGFiZWxwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoib3V0c2lkZSIsdmFsdWVzOiJwZXJpb2QiPT09eT9bIm91dHNpZGUiLCJpbnNpZGUiXToieCI9PT14P1sib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgbGVmdCIsImluc2lkZSBsZWZ0Iiwib3V0c2lkZSByaWdodCIsImluc2lkZSByaWdodCJdOlsib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgdG9wIiwiaW5zaWRlIHRvcCIsIm91dHNpZGUgYm90dG9tIiwiaW5zaWRlIGJvdHRvbSJdfX0sInRpY2tsYWJlbHBvc2l0aW9uIikpLG4ubm9UaWNrbGFiZWxvdmVyZmxvd3x8cigidGlja2xhYmVsb3ZlcmZsb3ciLC0xIT09ay5pbmRleE9mKCJpbnNpZGUiKT8iaGlkZSBwYXN0IGRvbWFpbiI6ImNhdGVnb3J5Ij09PU18fCJtdWx0aWNhdGVnb3J5Ij09PU0/ImFsbG93IjoiaGlkZSBwYXN0IGRpdiIpLGgodCxtKTt2YXIgQT0hdC5pc1ZhbGlkUmFuZ2UoZS5yYW5nZSk7QSYmbi5yZXZlcnNlRGZsdCYmKEE9InJldmVyc2VkIiksIXIoImF1dG9yYW5nZSIsQSl8fCJsaW5lYXIiIT09TSYmIi0iIT09TXx8cigicmFuZ2Vtb2RlIikscigicmFuZ2UiKSx0LmNsZWFuUmFuZ2UoKSxmKGUsdCxyLG4pLCJjYXRlZ29yeSI9PT1NfHxuLm5vSG92ZXJ8fHIoImhvdmVyZm9ybWF0Iik7dmFyIEw9cigiY29sb3IiKSxTPUwhPT1sLmNvbG9yLmRmbHQ/TDpiLmNvbG9yLEQ9Xy5sYWJlbHx8bS5fZGZsdFRpdGxlW3hdO2lmKGQoZSx0LHIsTSxuKSwhdylyZXR1cm4gdDtyKCJ0aXRsZS50ZXh0IixEKSxpLmNvZXJjZUZvbnQociwidGl0bGUuZm9udCIse2ZhbWlseTpiLmZhbWlseSxzaXplOmkuYmlnRm9udChiLnNpemUpLGNvbG9yOlN9KSxzKGUsdCxyLE0pLHUoZSx0LHIsTSxuKSxjKGUsdCxyLG4pLHAoZSx0LHIse2RmbHRDb2xvcjpMLGJnQ29sb3I6bi5iZ0NvbG9yLHNob3dHcmlkOm4uc2hvd0dyaWQsYXR0cmlidXRlczpsfSksKHQuc2hvd2xpbmV8fHQudGlja3MpJiZyKCJtaXJyb3IiKSxuLmF1dG9tYXJnaW4mJnIoImF1dG9tYXJnaW4iKTt2YXIgQyxPPSJtdWx0aWNhdGVnb3J5Ij09PU07bi5ub1RpY2tzb258fCJjYXRlZ29yeSIhPT1NJiYhT3x8IXQudGlja3MmJiF0LnNob3dncmlkfHwoTyYmKEM9ImJvdW5kYXJpZXMiKSwiYm91bmRhcmllcyI9PT1yKCJ0aWNrc29uIixDKSYmZGVsZXRlIHQudGlja2xhYmVscG9zaXRpb24pO08mJihyKCJzaG93ZGl2aWRlcnMiKSYmKHIoImRpdmlkZXJjb2xvciIpLHIoImRpdmlkZXJ3aWR0aCIpKSk7aWYoImRhdGUiPT09TSlpZihvKGUsdCx7bmFtZToicmFuZ2VicmVha3MiLGluY2x1c2lvbkF0dHI6ImVuYWJsZWQiLGhhbmRsZUl0ZW1EZWZhdWx0czp2fSksdC5yYW5nZWJyZWFrcy5sZW5ndGgpe2Zvcih2YXIgUD0wO1A8dC5yYW5nZWJyZWFrcy5sZW5ndGg7UCsrKWlmKHQucmFuZ2VicmVha3NbUF0ucGF0dGVybj09PWcpe3QuX2hhc0RheU9mV2Vla0JyZWFrcz0hMDticmVha31pZihoKHQsbSksbS5faGFzKCJzY2F0dGVyZ2wiKXx8bS5faGFzKCJzcGxvbSIpKWZvcih2YXIgST0wO0k8bi5kYXRhLmxlbmd0aDtJKyspe3ZhciBSPW4uZGF0YVtJXTsic2NhdHRlcmdsIiE9PVIudHlwZSYmInNwbG9tIiE9PVIudHlwZXx8KFIudmlzaWJsZT0hMSxpLndhcm4oUi50eXBlKyIgdHJhY2VzIGRvIG5vdCB3b3JrIG9uIGF4ZXMgd2l0aCByYW5nZWJyZWFrcy4gU2V0dGluZyB0cmFjZSAiK1IuaW5kZXgrIiB0byBgdmlzaWJsZTogZmFsc2VgLiIpKX19ZWxzZSBkZWxldGUgdC5yYW5nZWJyZWFrcztyZXR1cm4gdH07dmFyIHk9e3N1bjoxLG1vbjoyLHR1ZTozLHdlZDo0LHRodTo1LGZyaTo2LHNhdDo3fTtmdW5jdGlvbiB4KGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4geVtlLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCldfX0seyIuLi8uLi9saWIiOjIzMiwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjoyNzQsIi4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiOjI4NCwiLi9jb25zdGFudHMiOjI4NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6Mjk0LCIuL2xpbmVfZ3JpZF9kZWZhdWx0cyI6Mjk2LCIuL3ByZWZpeF9zdWZmaXhfZGVmYXVsdHMiOjI5OCwiLi9zZXRfY29udmVydCI6MzAxLCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjMwMywiLi90aWNrX21hcmtfZGVmYXVsdHMiOjMwNCwiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIjozMDUsImZhc3QtaXNudW1lcmljIjoxN31dLDI4MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9jb25zdGFudHMvZG9jcyIpLGE9bi5GT1JNQVRfTElOSyxpPW4uREFURV9GT1JNQVRfTElOSztmdW5jdGlvbiBvKGUsdCl7cmV0dXJuWyJTZXRzIHRoZSAiK2UrIiBmb3JtYXR0aW5nIHJ1bGUiKyh0PyJmb3IgYCIrdCsiYCAiOiIiKSwidXNpbmcgZDMgZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlcyIsIndoaWNoIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gdGhvc2UgaW4gUHl0aG9uLiBGb3IgbnVtYmVycywgc2VlOiAiK2ErIi4iXS5qb2luKCIgIil9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBvKGUsdCkrWyIgQW5kIGZvciBkYXRlcyBzZWU6ICIraSsiLiIsIldlIGFkZCB0d28gaXRlbXMgdG8gZDMncyBkYXRlIGZvcm1hdHRlcjoiLCIqJWgqIGZvciBoYWxmIG9mIHRoZSB5ZWFyIGFzIGEgZGVjaW1hbCBudW1iZXIgYXMgd2VsbCBhcyIsIiole259ZiogZm9yIGZyYWN0aW9uYWwgc2Vjb25kcyIsIndpdGggbiBkaWdpdHMuIEZvciBleGFtcGxlLCAqMjAxNi0xMC0xMyAwOToxNToyMy40NTYqIHdpdGggdGlja2Zvcm1hdCIsIiolSH4lTX4lUy4lMmYqIHdvdWxkIGRpc3BsYXkgKjA5fjE1fjIzLjQ2KiJdLmpvaW4oIiAiKX10LmV4cG9ydHM9e2F4aXNIb3ZlckZvcm1hdDpmdW5jdGlvbihlLHQpe3JldHVybnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6Im5vbmUiLGRlc2NyaXB0aW9uOih0P286bCkoImhvdmVyIHRleHQiLGUpK1siQnkgZGVmYXVsdCB0aGUgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgdXNpbmcgIisodD8iZ2VuZXJpYyBudW1iZXIgZm9ybWF0IjoiYCIrZSsiYXhpcy5ob3ZlcmZvcm1hdGAiKSsiLiJdLmpvaW4oIiAiKX19LGRlc2NyaXB0aW9uT25seU51bWJlcnM6byxkZXNjcmlwdGlvbldpdGhEYXRlczpsfX0seyIuLi8uLi9jb25zdGFudHMvZG9jcyI6MjA5fV0sMjgzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3JlZ2lzdHJ5IiksYT1lKCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGkoZSx0KXtpZih0JiZ0Lmxlbmd0aClmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdW2VdKXJldHVybiEwO3JldHVybiExfXIuaWQybmFtZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJmUubWF0Y2goYS5BWF9JRF9QQVRURVJOKSl7dmFyIHQ9ZS5zcGxpdCgiICIpWzBdLnN1YnN0cigxKTtyZXR1cm4iMSI9PT10JiYodD0iIiksZS5jaGFyQXQoMCkrImF4aXMiK3R9fSxyLm5hbWUyaWQ9ZnVuY3Rpb24oZSl7aWYoZS5tYXRjaChhLkFYX05BTUVfUEFUVEVSTikpe3ZhciB0PWUuc3Vic3RyKDUpO3JldHVybiIxIj09PXQmJih0PSIiKSxlLmNoYXJBdCgwKSt0fX0sci5jbGVhbklkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj0vKCBkb21haW4pJC8udGVzdChlKTtpZigic3RyaW5nIj09dHlwZW9mIGUmJmUubWF0Y2goYS5BWF9JRF9QQVRURVJOKSYmKCF0fHxlLmNoYXJBdCgwKT09PXQpJiYoIW58fHIpKXt2YXIgaT1lLnNwbGl0KCIgIilbMF0uc3Vic3RyKDEpLnJlcGxhY2UoL14wKy8sIiIpO3JldHVybiIxIj09PWkmJihpPSIiKSxlLmNoYXJBdCgwKStpKyhuJiZyPyIgZG9tYWluIjoiIil9fSxyLmxpc3Q9ZnVuY3Rpb24oZSx0LG4pe3ZhciBhPWUuX2Z1bGxMYXlvdXQ7aWYoIWEpcmV0dXJuW107dmFyIGksbz1yLmxpc3RJZHMoZSx0KSxsPW5ldyBBcnJheShvLmxlbmd0aCk7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7dmFyIHM9b1tpXTtsW2ldPWFbcy5jaGFyQXQoMCkrImF4aXMiK3Muc3Vic3RyKDEpXX1pZighbil7dmFyIGM9YS5fc3VicGxvdHMuZ2wzZHx8W107Zm9yKGk9MDtpPGMubGVuZ3RoO2krKyl7dmFyIHU9YVtjW2ldXTt0P2wucHVzaCh1W3QrImF4aXMiXSk6bC5wdXNoKHUueGF4aXMsdS55YXhpcyx1LnpheGlzKX19cmV0dXJuIGx9LHIubGlzdElkcz1mdW5jdGlvbihlLHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQ7aWYoIXIpcmV0dXJuW107dmFyIG49ci5fc3VicGxvdHM7cmV0dXJuIHQ/blt0KyJheGlzIl06bi54YXhpcy5jb25jYXQobi55YXhpcyl9LHIuZ2V0RnJvbUlkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgYT1lLl9mdWxsTGF5b3V0O3JldHVybiB0PXZvaWQgMD09PXR8fCJzdHJpbmciIT10eXBlb2YgdD90OnQucmVwbGFjZSgiIGRvbWFpbiIsIiIpLCJ4Ij09PW4/dD10LnJlcGxhY2UoL3lbMC05XSovLCIiKToieSI9PT1uJiYodD10LnJlcGxhY2UoL3hbMC05XSovLCIiKSksYVtyLmlkMm5hbWUodCldfSxyLmdldEZyb21UcmFjZT1mdW5jdGlvbihlLHQsYSl7dmFyIGk9ZS5fZnVsbExheW91dCxvPW51bGw7aWYobi50cmFjZUlzKHQsImdsM2QiKSl7dmFyIGw9dC5zY2VuZTsic2NlbmUiPT09bC5zdWJzdHIoMCw1KSYmKG89aVtsXVthKyJheGlzIl0pfWVsc2Ugbz1yLmdldEZyb21JZChlLHRbYSsiYXhpcyJdfHxhKTtyZXR1cm4gb30sci5pZFNvcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmNoYXJBdCgwKSxuPXQuY2hhckF0KDApO3JldHVybiByIT09bj9yPm4/MTotMTorKGUuc3Vic3RyKDEpfHwxKS0rKHQuc3Vic3RyKDEpfHwxKX0sci5yZWYyaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuISEvXlt4eXpdLy50ZXN0KGUpJiZlLnNwbGl0KCIgIilbMF19LHIuaXNMaW5rZWQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaSh0LGUuX2F4aXNNYXRjaEdyb3Vwcyl8fGkodCxlLl9heGlzQ29uc3RyYWludEdyb3Vwcyl9fSx7Ii4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4vY29uc3RhbnRzIjoyODZ9XSwyODQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJjYXRlZ29yeSI9PT10LnR5cGUpe3ZhciBhLGk9ZS5jYXRlZ29yeWFycmF5LG89QXJyYXkuaXNBcnJheShpKSYmaS5sZW5ndGg+MDtvJiYoYT0iYXJyYXkiKTt2YXIgbCxzPXIoImNhdGVnb3J5b3JkZXIiLGEpOyJhcnJheSI9PT1zJiYobD1yKCJjYXRlZ29yeWFycmF5IikpLG98fCJhcnJheSIhPT1zfHwocz10LmNhdGVnb3J5b3JkZXI9InRyYWNlIiksInRyYWNlIj09PXM/dC5faW5pdGlhbENhdGVnb3JpZXM9W106ImFycmF5Ij09PXM/dC5faW5pdGlhbENhdGVnb3JpZXM9bC5zbGljZSgpOihsPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9dC5kYXRhQXR0cnx8ZS5faWQuY2hhckF0KDApLG89e307aWYodC5heERhdGEpcj10LmF4RGF0YTtlbHNlIGZvcihyPVtdLG49MDtuPHQuZGF0YS5sZW5ndGg7bisrKXt2YXIgbD10LmRhdGFbbl07bFtpKyJheGlzIl09PT1lLl9pZCYmci5wdXNoKGwpfWZvcihuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBzPXJbbl1baV07Zm9yKGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGM9c1thXTtudWxsIT1jJiYob1tjXT0xKX19cmV0dXJuIE9iamVjdC5rZXlzKG8pfSh0LG4pLnNvcnQoKSwiY2F0ZWdvcnkgYXNjZW5kaW5nIj09PXM/dC5faW5pdGlhbENhdGVnb3JpZXM9bDoiY2F0ZWdvcnkgZGVzY2VuZGluZyI9PT1zJiYodC5faW5pdGlhbENhdGVnb3JpZXM9bC5yZXZlcnNlKCkpKX19fSx7fV0sMjg1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuLi8uLi9saWIiKSxpPWUoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxvPWkuT05FREFZLGw9aS5PTkVXRUVLO3IuZHRpY2s9ZnVuY3Rpb24oZSx0KXt2YXIgcj0ibG9nIj09PXQsYT0iZGF0ZSI9PT10LGk9ImNhdGVnb3J5Ij09PXQsbD1hP286MTtpZighZSlyZXR1cm4gbDtpZihuKGUpKXJldHVybihlPU51bWJlcihlKSk8PTA/bDppP01hdGgubWF4KDEsTWF0aC5yb3VuZChlKSk6YT9NYXRoLm1heCguMSxlKTplO2lmKCJzdHJpbmciIT10eXBlb2YgZXx8IWEmJiFyKXJldHVybiBsO3ZhciBzPWUuY2hhckF0KDApLGM9ZS5zdWJzdHIoMSk7cmV0dXJuKGM9bihjKT9OdW1iZXIoYyk6MCk8PTB8fCEoYSYmIk0iPT09cyYmYz09PU1hdGgucm91bmQoYyl8fHImJiJMIj09PXN8fHImJiJEIj09PXMmJigxPT09Y3x8Mj09PWMpKT9sOmV9LHIudGljazA9ZnVuY3Rpb24oZSx0LHIsaSl7cmV0dXJuImRhdGUiPT09dD9hLmNsZWFuRGF0ZShlLGEuZGF0ZVRpY2swKHIsaSVsPT0wPzE6MCkpOiJEMSIhPT1pJiYiRDIiIT09aT9uKGUpP051bWJlcihlKTowOnZvaWQgMH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6MjEyLCIuLi8uLi9saWIiOjIzMiwiZmFzdC1pc251bWVyaWMiOjE3fV0sMjg2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYi9yZWdleCIpLmNvdW50ZXI7dC5leHBvcnRzPXtpZFJlZ2V4Ont4Om4oIngiLCIoIGRvbWFpbik/IikseTpuKCJ5IiwiKCBkb21haW4pPyIpfSxhdHRyUmVnZXg6bigiW3h5XWF4aXMiKSx4QXhpc01hdGNoOm4oInhheGlzIikseUF4aXNNYXRjaDpuKCJ5YXhpcyIpLEFYX0lEX1BBVFRFUk46L15beHl6XVswLTldKiggZG9tYWluKT8kLyxBWF9OQU1FX1BBVFRFUk46L15beHl6XWF4aXNbMC05XSokLyxTVUJQTE9UX1BBVFRFUk46L154KFswLTldKil5KFswLTldKikkLyxIT1VSX1BBVFRFUk46ImhvdXIiLFdFRUtEQVlfUEFUVEVSTjoiZGF5IG9mIHdlZWsiLE1JTkRSQUc6OCxNSU5TRUxFQ1Q6MTIsTUlOWk9PTToyMCxEUkFHR0VSU0laRToyMCxCRU5EUFg6MS41LFJFRFJBV0RFTEFZOjUwLFNFTEVDVERFTEFZOjEwMCxTRUxFQ1RJRDoiLXNlbGVjdCIsREZMVFJBTkdFWDpbLTEsNl0sREZMVFJBTkdFWTpbLTEsNF0sdHJhY2VMYXllckNsYXNzZXM6WyJpbWFnZWxheWVyIiwiaGVhdG1hcGxheWVyIiwiY29udG91cmNhcnBldGxheWVyIiwiY29udG91cmxheWVyIiwiZnVubmVsbGF5ZXIiLCJ3YXRlcmZhbGxsYXllciIsImJhcmxheWVyIiwiY2FycGV0bGF5ZXIiLCJ2aW9saW5sYXllciIsImJveGxheWVyIiwib2hsY2xheWVyIiwic2NhdHRlcmNhcnBldGxheWVyIiwic2NhdHRlcmxheWVyIl0sY2xpcE9uQXhpc0ZhbHNlUXVlcnk6WyIuc2NhdHRlcmxheWVyIiwiLmJhcmxheWVyIiwiLmZ1bm5lbGxheWVyIiwiLndhdGVyZmFsbGxheWVyIl0sbGF5ZXJWYWx1ZTJsYXllckNsYXNzOnsiYWJvdmUgdHJhY2VzIjoiYWJvdmUiLCJiZWxvdyB0cmFjZXMiOiJiZWxvdyJ9fX0seyIuLi8uLi9saWIvcmVnZXgiOjI0OH1dLDI4NzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4vYXV0b3JhbmdlIiksaT1lKCIuL2F4aXNfaWRzIikuaWQybmFtZSxvPWUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPWUoIi4vc2NhbGVfem9vbSIpLHM9ZSgiLi9zZXRfY29udmVydCIpLGM9ZSgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkFMTU9TVF9FUVVBTCx1PWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX0JMO2Z1bmN0aW9uIGQoZSx0LHIpe3ZhciBhPXIuYXhJZHMsbD1yLmxheW91dE91dCxzPXIuaGFzSW1hZ2UsYz1sLl9heGlzQ29uc3RyYWludEdyb3Vwcyx1PWwuX2F4aXNNYXRjaEdyb3VwcyxkPXQuX2lkLGc9ZC5jaGFyQXQoMCksbT0oKGwuX3NwbG9tQXhlc3x8e30pW2ddfHx7fSlbZF18fHt9LHY9dC5faWQseT0ieCI9PT12LmNoYXJBdCgwKTtmdW5jdGlvbiB4KHIsYSl7cmV0dXJuIG4uY29lcmNlKGUsdCxvLHIsYSl9dC5fbWF0Y2hHcm91cD1udWxsLHQuX2NvbnN0cmFpbnRHcm91cD1udWxsLHgoImNvbnN0cmFpbiIscz8iZG9tYWluIjoicmFuZ2UiKSxuLmNvZXJjZShlLHQse2NvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnk/WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXTpbImJvdHRvbSIsIm1pZGRsZSIsInRvcCJdLGRmbHQ6eT8iY2VudGVyIjoibWlkZGxlIn19LCJjb25zdHJhaW50b3dhcmQiKTt2YXIgYixfLHc9dC50eXBlLFQ9W107Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKyl7aWYoKF89YVtiXSkhPT12KWxbaShfKV0udHlwZT09PXcmJlQucHVzaChfKX12YXIgTT1wKGMsdik7aWYoTSl7dmFyIGs9W107Zm9yKGI9MDtiPFQubGVuZ3RoO2IrKylNW189VFtiXV18fGsucHVzaChfKTtUPWt9dmFyIEEsTCxTPVQubGVuZ3RoO1MmJihlLm1hdGNoZXN8fG0ubWF0Y2hlcykmJihBPW4uY29lcmNlKGUsdCx7bWF0Y2hlczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlQsZGZsdDotMSE9PVQuaW5kZXhPZihtLm1hdGNoZXMpP20ubWF0Y2hlczp2b2lkIDB9fSwibWF0Y2hlcyIpKTt2YXIgRD1zJiYheT90LmFuY2hvcjp2b2lkIDA7aWYoUyYmIUEmJihlLnNjYWxlYW5jaG9yfHxEKSYmKEw9bi5jb2VyY2UoZSx0LHtzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlR9fSwic2NhbGVhbmNob3IiLEQpKSxBKXt0Ll9tYXRjaEdyb3VwPWgodSx2LEEsMSk7dmFyIEM9bFtpKEEpXSxPPWYobCx0KS9mKGwsQyk7eSE9PSgieCI9PT1BLmNoYXJBdCgwKSkmJihPPSh5PyJ4IjoieSIpK08pLGgoYyx2LEEsTyl9ZWxzZSBlLm1hdGNoZXMmJi0xIT09YS5pbmRleE9mKGUubWF0Y2hlcykmJm4ud2FybigiaWdub3JlZCAiK3QuX25hbWUrJy5tYXRjaGVzOiAiJytlLm1hdGNoZXMrJyIgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcCcpO2lmKEwpe3ZhciBQPXgoInNjYWxlcmF0aW8iKTtQfHwoUD10LnNjYWxlcmF0aW89MSksaChjLHYsTCxQKX1lbHNlIGUuc2NhbGVhbmNob3ImJi0xIT09YS5pbmRleE9mKGUuc2NhbGVhbmNob3IpJiZuLndhcm4oImlnbm9yZWQgIit0Ll9uYW1lKycuc2NhbGVhbmNob3I6ICInK2Uuc2NhbGVhbmNob3IrJyIgdG8gYXZvaWQgZWl0aGVyIGFuIGluZmluaXRlIGxvb3AgYW5kIHBvc3NpYmx5IGluY29uc2lzdGVudCBzY2FsZXJhdGlvcywgb3IgYmVjYXVzZSB0aGlzIGF4aXMgZGVjbGFyZXMgYSAqbWF0Y2hlcyogY29uc3RyYWludC4nKX1mdW5jdGlvbiBmKGUsdCl7dmFyIHI9dC5kb21haW47cmV0dXJuIHJ8fChyPWVbaSh0Lm92ZXJsYXlpbmcpXS5kb21haW4pLHJbMV0tclswXX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXVt0XSlyZXR1cm4gZVtyXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBoKGUsdCxyLG4pe3ZhciBhLGksbyxsLHMsYz1wKGUsdCk7bnVsbD09PWM/KChjPXt9KVt0XT0xLHM9ZS5sZW5ndGgsZS5wdXNoKGMpKTpzPWUuaW5kZXhPZihjKTt2YXIgdT1PYmplY3Qua2V5cyhjKTtmb3IoYT0wO2E8ZS5sZW5ndGg7YSsrKWlmKG89ZVthXSxhIT09cyYmb1tyXSl7dmFyIGQ9b1tyXTtmb3IoaT0wO2k8dS5sZW5ndGg7aSsrKW9bbD11W2ldXT1nKGQsZyhuLGNbbF0pKTtyZXR1cm4gdm9pZCBlLnNwbGljZShzLDEpfWlmKDEhPT1uKWZvcihpPTA7aTx1Lmxlbmd0aDtpKyspe3ZhciBmPXVbaV07Y1tmXT1nKG4sY1tmXSl9Y1tyXT0xfWZ1bmN0aW9uIGcoZSx0KXt2YXIgcixuLGE9IiIsaT0iIjsic3RyaW5nIj09dHlwZW9mIGUmJihyPShhPWUubWF0Y2goL15beHldKi8pWzBdKS5sZW5ndGgsZT0rZS5zdWJzdHIocikpLCJzdHJpbmciPT10eXBlb2YgdCYmKG49KGk9dC5tYXRjaCgvXlt4eV0qLylbMF0pLmxlbmd0aCx0PSt0LnN1YnN0cihuKSk7dmFyIG89ZSp0O3JldHVybiByfHxuP3ImJm4mJmEuY2hhckF0KDApIT09aS5jaGFyQXQoMCk/cj09PW4/bzoocj5uP2Euc3Vic3RyKG4pOmkuc3Vic3RyKHIpKStvOmEraStlKnQ6b31mdW5jdGlvbiBtKGUsdCl7Zm9yKHZhciByPXQuX3NpemUsbj1yLmgvci53LGE9e30saT1PYmplY3Qua2V5cyhlKSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBsPWlbb10scz1lW2xdO2lmKCJzdHJpbmciPT10eXBlb2Ygcyl7dmFyIGM9cy5tYXRjaCgvXlt4eV0qLylbMF0sdT1jLmxlbmd0aDtzPStzLnN1YnN0cih1KTtmb3IodmFyIGQ9InkiPT09Yy5jaGFyQXQoMCk/bjoxL24sZj0wO2Y8dTtmKyspcyo9ZH1hW2xdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gdihlLHQpe3ZhciByPWUuX2lucHV0RG9tYWluLG49dVtlLmNvbnN0cmFpbnRvd2FyZF0sYT1yWzBdKyhyWzFdLXJbMF0pKm47ZS5kb21haW49ZS5faW5wdXQuZG9tYWluPVthKyhyWzBdLWEpL3QsYSsoclsxXS1hKS90XSxlLnNldFNjYWxlKCl9ci5oYW5kbGVEZWZhdWx0cz1mdW5jdGlvbihlLHQscil7dmFyIGEsbyxsLGMsdSxmLHAsaCxnPXIuYXhJZHMsbT1yLmF4SGFzSW1hZ2Usdj10Ll9heGlzQ29uc3RyYWludEdyb3Vwcz1bXSx5PXQuX2F4aXNNYXRjaEdyb3Vwcz1bXTtmb3IoYT0wO2E8Zy5sZW5ndGg7YSsrKWQodT1lW2M9aShnW2FdKV0sZj10W2NdLHtheElkczpnLGxheW91dE91dDp0LGhhc0ltYWdlOm1bY119KTtmdW5jdGlvbiB4KGUscil7Zm9yKGE9MDthPGUubGVuZ3RoO2ErKylmb3IobCBpbiBvPWVbYV0pdFtpKGwpXVtyXT1vfWZvcih4KHksIl9tYXRjaEdyb3VwIiksYT0wO2E8di5sZW5ndGg7YSsrKWZvcihsIGluIG89dlthXSlpZigoZj10W2kobCldKS5maXhlZHJhbmdlKXtmb3IodmFyIGIgaW4gbyl7dmFyIF89aShiKTshMT09PShlW19dfHx7fSkuZml4ZWRyYW5nZSYmbi53YXJuKCJmaXhlZHJhbmdlIHdhcyBzcGVjaWZpZWQgYXMgZmFsc2UgZm9yIGF4aXMgIitfKyIgYnV0IHdhcyBvdmVycmlkZGVuIGJlY2F1c2UgYW5vdGhlciBheGlzIGluIGl0cyBjb25zdHJhaW50IGdyb3VwIGhhcyBmaXhlZHJhbmdlIHRydWUiKSx0W19dLmZpeGVkcmFuZ2U9ITB9YnJlYWt9Zm9yKGE9MDthPHYubGVuZ3RoOyl7Zm9yKGwgaW4gbz12W2FdKXsoZj10W2kobCldKS5fbWF0Y2hHcm91cCYmT2JqZWN0LmtleXMoZi5fbWF0Y2hHcm91cCkubGVuZ3RoPT09T2JqZWN0LmtleXMobykubGVuZ3RoJiYodi5zcGxpY2UoYSwxKSxhLS0pO2JyZWFrfWErK314KHYsIl9jb25zdHJhaW50R3JvdXAiKTt2YXIgdz1bImNvbnN0cmFpbiIsInJhbmdlIiwiYXV0b3JhbmdlIiwicmFuZ2Vtb2RlIiwicmFuZ2VicmVha3MiLCJjYXRlZ29yeW9yZGVyIiwiY2F0ZWdvcnlhcnJheSJdLFQ9ITEsTT0hMTtmdW5jdGlvbiBrKCl7aD1mW3BdLCJyYW5nZWJyZWFrcyI9PT1wJiYoTT1mLl9oYXNEYXlPZldlZWtCcmVha3MpfWZvcihhPTA7YTx5Lmxlbmd0aDthKyspe289eVthXTtmb3IodmFyIEE9MDtBPHcubGVuZ3RoO0ErKyl7dmFyIEw7Zm9yKGwgaW4gcD13W0FdLGg9bnVsbCxvKWlmKHU9ZVtjPWkobCldLGY9dFtjXSxwIGluIGYpe2lmKCFmLm1hdGNoZXMmJihMPWYscCBpbiB1KSl7aygpO2JyZWFrfW51bGw9PT1oJiZwIGluIHUmJmsoKX1pZigicmFuZ2UiPT09cCYmaCYmKFQ9ITApLCJhdXRvcmFuZ2UiPT09cCYmbnVsbD09PWgmJlQmJihoPSExKSxudWxsPT09aCYmcCBpbiBMJiYoaD1MW3BdKSxudWxsIT09aClmb3IobCBpbiBvKShmPXRbaShsKV0pW3BdPSJyYW5nZSI9PT1wP2guc2xpY2UoKTpoLCJyYW5nZWJyZWFrcyI9PT1wJiYoZi5faGFzRGF5T2ZXZWVrQnJlYWtzPU0scyhmLHQpKX19fSxyLmVuZm9yY2U9ZnVuY3Rpb24oZSl7dmFyIHQscixuLG8scyx1LGQsZixwPWUuX2Z1bGxMYXlvdXQsaD1wLl9heGlzQ29uc3RyYWludEdyb3Vwc3x8W107Zm9yKHQ9MDt0PGgubGVuZ3RoO3QrKyl7bj1tKGhbdF0scCk7dmFyIGc9T2JqZWN0LmtleXMobikseT0xLzAseD0wLGI9MS8wLF89e30sdz17fSxUPSExO2ZvcihyPTA7cjxnLmxlbmd0aDtyKyspd1tvPWdbcl1dPXM9cFtpKG8pXSxzLl9pbnB1dERvbWFpbj9zLmRvbWFpbj1zLl9pbnB1dERvbWFpbi5zbGljZSgpOnMuX2lucHV0RG9tYWluPXMuZG9tYWluLnNsaWNlKCkscy5faW5wdXRSYW5nZXx8KHMuX2lucHV0UmFuZ2U9cy5yYW5nZS5zbGljZSgpKSxzLnNldFNjYWxlKCksX1tvXT11PU1hdGguYWJzKHMuX20pL25bb10seT1NYXRoLm1pbih5LHUpLCJkb21haW4iIT09cy5jb25zdHJhaW4mJnMuX2NvbnN0cmFpbnRTaHJpbmthYmxlfHwoYj1NYXRoLm1pbihiLHUpKSxkZWxldGUgcy5fY29uc3RyYWludFNocmlua2FibGUseD1NYXRoLm1heCh4LHUpLCJkb21haW4iPT09cy5jb25zdHJhaW4mJihUPSEwKTtpZighKHk+Yyp4KXx8VClmb3Iocj0wO3I8Zy5sZW5ndGg7cisrKWlmKHU9X1tvPWdbcl1dLGQ9KHM9d1tvXSkuY29uc3RyYWluLHUhPT1ifHwiZG9tYWluIj09PWQpaWYoZj11L2IsInJhbmdlIj09PWQpbChzLGYpO2Vsc2V7dmFyIE09cy5faW5wdXREb21haW4saz0ocy5kb21haW5bMV0tcy5kb21haW5bMF0pLyhNWzFdLU1bMF0pLEE9KHMucjJsKHMucmFuZ2VbMV0pLXMucjJsKHMucmFuZ2VbMF0pKS8ocy5yMmwocy5faW5wdXRSYW5nZVsxXSktcy5yMmwocy5faW5wdXRSYW5nZVswXSkpO2lmKChmLz1rKSpBPDEpe3MuZG9tYWluPXMuX2lucHV0LmRvbWFpbj1NLnNsaWNlKCksbChzLGYpO2NvbnRpbnVlfWlmKEE8MSYmKHMucmFuZ2U9cy5faW5wdXQucmFuZ2U9cy5faW5wdXRSYW5nZS5zbGljZSgpLGYqPUEpLHMuYXV0b3JhbmdlKXt2YXIgTD1zLnIybChzLnJhbmdlWzBdKSxTPXMucjJsKHMucmFuZ2VbMV0pLEQ9KEwrUykvMixDPUQsTz1ELFA9TWF0aC5hYnMoUy1EKSxJPUQtUCpmKjEuMDAwMSxSPUQrUCpmKjEuMDAwMSx6PWEubWFrZVBhZEZuKHAscywwKSxOPWEubWFrZVBhZEZuKHAscywxKTt2KHMsZik7dmFyIEYsRSxqPU1hdGguYWJzKHMuX20pLEg9YS5jb25jYXRFeHRyZW1lcyhlLHMpLEI9SC5taW4sWT1ILm1heDtmb3IoRT0wO0U8Qi5sZW5ndGg7RSsrKShGPUJbRV0udmFsLXooQltFXSkvaik+SSYmRjxDJiYoQz1GKTtmb3IoRT0wO0U8WS5sZW5ndGg7RSsrKShGPVlbRV0udmFsK04oWVtFXSkvaik8UiYmRj5PJiYoTz1GKTtmLz0oTy1DKS8oMipQKSxDPXMubDJyKEMpLE89cy5sMnIoTykscy5yYW5nZT1zLl9pbnB1dC5yYW5nZT1MPFM/W0MsT106W08sQ119dihzLGYpfX19LHIuZ2V0QXhpc0dyb3VwPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuX2F4aXNNYXRjaEdyb3VwcyxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKHJbbl1bdF0pcmV0dXJuImciK259cmV0dXJuIHR9LHIuY2xlYW49ZnVuY3Rpb24oZSx0KXtpZih0Ll9pbnB1dERvbWFpbil7Zm9yKHZhciByPSExLG49dC5faWQsYT1lLl9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxpPTA7aTxhLmxlbmd0aDtpKyspaWYoYVtpXVtuXSl7cj0hMDticmVha31yJiYiZG9tYWluIj09PXQuY29uc3RyYWlufHwodC5faW5wdXQuZG9tYWluPXQuZG9tYWluPXQuX2lucHV0RG9tYWluLGRlbGV0ZSB0Ll9pbnB1dERvbWFpbil9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IjoyMDcsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjIxMiwiLi4vLi4vbGliIjoyMzIsIi4vYXV0b3JhbmdlIjoyNzgsIi4vYXhpc19pZHMiOjI4MywiLi9sYXlvdXRfYXR0cmlidXRlcyI6Mjk0LCIuL3NjYWxlX3pvb20iOjI5OSwiLi9zZXRfY29udmVydCI6MzAxfV0sMjg4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4uLy4uL2xpYiIpLGk9YS5udW1iZXJGb3JtYXQsbz1lKCJ0aW55Y29sb3IyIiksbD1lKCJoYXMtcGFzc2l2ZS1ldmVudHMiKSxzPWUoIi4uLy4uL3JlZ2lzdHJ5IiksYz1hLnN0clRyYW5zbGF0ZSx1PWUoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGQ9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGY9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscD1lKCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaD1lKCIuL2F4ZXMiKSxnPWUoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxtPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSx2PWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyIpLHk9di5zZWxlY3RpbmdPckRyYXdpbmcseD12LmZyZWVNb2RlLGI9ZSgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkZST01fVEwsXz1lKCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiKSx3PWUoIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIikucmVkcmF3UmVnbFRyYWNlcyxUPWUoIi4uL3Bsb3RzIiksTT1lKCIuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLGs9ZSgiLi9zZWxlY3QiKS5wcmVwU2VsZWN0LEE9ZSgiLi9zZWxlY3QiKS5jbGVhclNlbGVjdCxMPWUoIi4vc2VsZWN0Iikuc2VsZWN0T25DbGljayxTPWUoIi4vc2NhbGVfem9vbSIpLEQ9ZSgiLi9jb25zdGFudHMiKSxDPUQuTUlORFJBRyxPPUQuTUlOWk9PTSxQPSEwO2Z1bmN0aW9uIEkoZSx0LHIsbil7dmFyIGk9YS5lbnN1cmVTaW5nbGUoZS5kcmFnbGF5ZXIsdCxyLChmdW5jdGlvbih0KXt0LmNsYXNzZWQoImRyYWciLCEwKS5zdHlsZSh7ZmlsbDoidHJhbnNwYXJlbnQiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJkYXRhLXN1YnBsb3QiLGUuaWQpfSkpO3JldHVybiBpLmNhbGwoZyxuKSxpLm5vZGUoKX1mdW5jdGlvbiBSKGUsdCxyLGEsaSxvLGwpe3ZhciBzPUkoZSwicmVjdCIsdCxyKTtyZXR1cm4gbi5zZWxlY3QocykuY2FsbChmLnNldFJlY3QsYSxpLG8sbCksc31mdW5jdGlvbiB6KGUsdCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoIWVbcl0uZml4ZWRyYW5nZSlyZXR1cm4gdDtyZXR1cm4iIn1mdW5jdGlvbiBOKGUsdCxyLG4sYSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07aWYoIW8uZml4ZWRyYW5nZSlpZihvLnJhbmdlYnJlYWtzKXt2YXIgbD0ieSI9PT1vLl9pZC5jaGFyQXQoMCkscz1sPzEtdDp0LGM9bD8xLXI6cjtuW28uX25hbWUrIi5yYW5nZVswXSJdPW8ubDJyKG8ucDJsKHMqby5fbGVuZ3RoKSksbltvLl9uYW1lKyIucmFuZ2VbMV0iXT1vLmwycihvLnAybChjKm8uX2xlbmd0aCkpfWVsc2V7dmFyIHU9by5fcmxbMF0sZD1vLl9ybFsxXS11O25bby5fbmFtZSsiLnJhbmdlWzBdIl09by5sMnIodStkKnQpLG5bby5fbmFtZSsiLnJhbmdlWzFdIl09by5sMnIodStkKnIpfX1pZihhJiZhLmxlbmd0aCl7dmFyIGY9KHQrKDEtcikpLzI7TihhLGYsMS1mLG4sW10pfX1mdW5jdGlvbiBGKGUsdCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYoIW4uZml4ZWRyYW5nZSlpZihuLnJhbmdlYnJlYWtzKXt2YXIgYT1uLl9sZW5ndGgsaT0obi5wMmwoMCt0KS1uLnAybCgwKSsobi5wMmwoYSt0KS1uLnAybChhKSkpLzI7bi5yYW5nZT1bbi5sMnIobi5fcmxbMF0taSksbi5sMnIobi5fcmxbMV0taSldfWVsc2Ugbi5yYW5nZT1bbi5sMnIobi5fcmxbMF0tdC9uLl9tKSxuLmwycihuLl9ybFsxXS10L24uX20pXX19ZnVuY3Rpb24gRShlKXtyZXR1cm4gMS0oZT49MD9NYXRoLm1pbihlLC45KToxLygxL01hdGgubWF4KGUsLS4zKSszLjIyMikpfWZ1bmN0aW9uIGooZSx0LHIsbixhKXtyZXR1cm4gZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3giKS5zdHlsZSh7ZmlsbDp0Pi4yPyJyZ2JhKDAsMCwwLDApIjoicmdiYSgyNTUsMjU1LDI1NSwwKSIsInN0cm9rZS13aWR0aCI6MH0pLmF0dHIoInRyYW5zZm9ybSIsYyhyLG4pKS5hdHRyKCJkIixhKyJaIil9ZnVuY3Rpb24gSChlLHQscil7cmV0dXJuIGUuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94LWNvcm5lcnMiKS5zdHlsZSh7ZmlsbDpkLmJhY2tncm91bmQsc3Ryb2tlOmQuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MSxvcGFjaXR5OjB9KS5hdHRyKCJ0cmFuc2Zvcm0iLGModCxyKSkuYXR0cigiZCIsIk0wLDBaIil9ZnVuY3Rpb24gQihlLHQscixuLGEsaSl7ZS5hdHRyKCJkIixuKyJNIityLmwrIiwiK3IudCsidiIrci5oKyJoIityLncrInYtIityLmgrImgtIityLncrIloiKSxZKGUsdCxhLGkpfWZ1bmN0aW9uIFkoZSx0LHIsbil7cnx8KGUudHJhbnNpdGlvbigpLnN0eWxlKCJmaWxsIixuPi4yPyJyZ2JhKDAsMCwwLDAuNCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiKS5kdXJhdGlvbigyMDApLHQudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwxKS5kdXJhdGlvbigyMDApKX1mdW5jdGlvbiBWKGUpe24uc2VsZWN0KGUpLnNlbGVjdEFsbCgiLnpvb21ib3gsLmpzLXpvb21ib3gtYmFja2Ryb3AsLmpzLXpvb21ib3gtbWVudSwuem9vbWJveC1jb3JuZXJzIikucmVtb3ZlKCl9ZnVuY3Rpb24gVShlKXtQJiZlLmRhdGEmJmUuX2NvbnRleHQuc2hvd1RpcHMmJihhLm5vdGlmaWVyKGEuXyhlLCJEb3VibGUtY2xpY2sgdG8gem9vbSBiYWNrIG91dCIpLCJsb25nIiksUD0hMSl9ZnVuY3Rpb24gcShlKXt2YXIgdD1NYXRoLmZsb29yKE1hdGgubWluKGUuYi1lLnQsZS5yLWUubCxPKS8yKTtyZXR1cm4iTSIrKGUubC0zLjUpKyIsIisoZS50LS41K3QpKyJoM3YiKy10KyJoIit0KyJ2LTNoLSIrKHQrMykrIlpNIisoZS5yKzMuNSkrIiwiKyhlLnQtLjUrdCkrImgtM3YiKy10KyJoIistdCsidi0zaCIrKHQrMykrIlpNIisoZS5yKzMuNSkrIiwiKyhlLmIrLjUtdCkrImgtM3YiK3QrImgiKy10KyJ2M2giKyh0KzMpKyJaTSIrKGUubC0zLjUpKyIsIisoZS5iKy41LXQpKyJoM3YiK3QrImgiK3QrInYzaC0iKyh0KzMpKyJaIn1mdW5jdGlvbiBHKGUsdCxyLG4saSl7Zm9yKHZhciBvLGwscyxjLHU9ITEsZD17fSxmPXt9LHA9KGl8fHt9KS54YUhhc2gsaD0oaXx8e30pLnlhSGFzaCxnPTA7Zzx0Lmxlbmd0aDtnKyspe3ZhciBtPXRbZ107Zm9yKG8gaW4gcilpZihtW29dKXtmb3IocyBpbiBtKWkmJihwW3NdfHxoW3NdKXx8KCJ4Ij09PXMuY2hhckF0KDApP3I6bilbc118fChkW3NdPW8pO2ZvcihsIGluIG4paSYmKHBbbF18fGhbbF0pfHwhbVtsXXx8KHU9ITApfWZvcihsIGluIG4paWYobVtsXSlmb3IoYyBpbiBtKWkmJihwW2NdfHxoW2NdKXx8KCJ4Ij09PWMuY2hhckF0KDApP3I6bilbY118fChmW2NdPWwpfXUmJihhLmV4dGVuZEZsYXQoZCxmKSxmPXt9KTt2YXIgdj17fSx5PVtdO2ZvcihzIGluIGQpe3ZhciB4PU0oZSxzKTt5LnB1c2goeCksdlt4Ll9pZF09eH12YXIgYj17fSxfPVtdO2ZvcihjIGluIGYpe3ZhciB3PU0oZSxjKTtfLnB1c2godyksYlt3Ll9pZF09d31yZXR1cm57eGFIYXNoOnYseWFIYXNoOmIseGF4ZXM6eSx5YXhlczpfLHhMaW5rczpkLHlMaW5rczpmLGlzU3VicGxvdENvbnN0cmFpbmVkOnV9fWZ1bmN0aW9uIFooZSx0KXtpZihsKXt2YXIgcj12b2lkIDAhPT1lLm9ud2hlZWw/IndoZWVsIjoibW91c2V3aGVlbCI7ZS5fb253aGVlbCYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHIsZS5fb253aGVlbCksZS5fb253aGVlbD10LGUuYWRkRXZlbnRMaXN0ZW5lcihyLHQse3Bhc3NpdmU6ITF9KX1lbHNlIHZvaWQgMCE9PWUub253aGVlbD9lLm9ud2hlZWw9dDp2b2lkIDAhPT1lLm9ubW91c2V3aGVlbD9lLm9ubW91c2V3aGVlbD10OmUuaXNBZGRlZFdoZWVsRXZlbnR8fChlLmlzQWRkZWRXaGVlbEV2ZW50PSEwLGUuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHQse3Bhc3NpdmU6ITF9KSl9ZnVuY3Rpb24gVyhlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dC5leHBvcnRzPXttYWtlRHJhZ0JveDpmdW5jdGlvbihlLHQscixsLGMsZCxnLHYpe3ZhciBQLEksWSxYLEosUSxLLCQsZWUsdGUscmUsbmUsYWUsaWUsb2UsbGUsc2UsY2UsdWUsZGUsZmUscGUsaGUsZ2U9ZS5fZnVsbExheW91dC5fem9vbWxheWVyLG1lPWcrdj09PSJuc2V3Iix2ZT0xPT09KGcrdikubGVuZ3RoO2Z1bmN0aW9uIHllKCl7aWYoUD10LnhheGlzLEk9dC55YXhpcyxlZT1QLl9sZW5ndGgsdGU9SS5fbGVuZ3RoLEs9UC5fb2Zmc2V0LCQ9SS5fb2Zmc2V0LChZPXt9KVtQLl9pZF09UCwoWD17fSlbSS5faWRdPUksZyYmdilmb3IodmFyIHI9dC5vdmVybGF5cyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBhPXJbbl0ueGF4aXM7WVthLl9pZF09YTt2YXIgaT1yW25dLnlheGlzO1hbaS5faWRdPWl9Sj1XKFkpLFE9VyhYKSxhZT16KEosdiksaWU9eihRLGcpLG9lPSFpZSYmIWFlLG5lPUcoZSxlLl9mdWxsTGF5b3V0Ll9heGlzTWF0Y2hHcm91cHMsWSxYKTt2YXIgbz0ocmU9RyhlLGUuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLFksWCxuZSkpLmlzU3VicGxvdENvbnN0cmFpbmVkfHxuZS5pc1N1YnBsb3RDb25zdHJhaW5lZDtsZT12fHxvLHNlPWd8fG87dmFyIGw9ZS5fZnVsbExheW91dDtjZT1sLl9oYXMoInNjYXR0ZXJnbCIpLHVlPWwuX2hhcygic3Bsb20iKSxkZT1sLl9oYXMoInN2ZyIpfXllKCk7dmFyIHhlPWZ1bmN0aW9uKGUsdCxyKXtpZighZSlyZXR1cm4icG9pbnRlciI7aWYoIm5zZXciPT09ZSlyZXR1cm4gcj8iIjoicGFuIj09PXQ/Im1vdmUiOiJjcm9zc2hhaXIiO3JldHVybiBlLnRvTG93ZXJDYXNlKCkrIi1yZXNpemUifShpZSthZSxlLl9mdWxsTGF5b3V0LmRyYWdtb2RlLG1lKSxiZT1SKHQsZyt2KyJkcmFnIix4ZSxyLGwsYyxkKTtpZihvZSYmIW1lKXJldHVybiBiZS5vbm1vdXNlZG93bj1udWxsLGJlLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLGJlO3ZhciBfZSx3ZSxUZSxNZSxrZSxBZSxMZSxTZSxEZSxDZSxPZT17ZWxlbWVudDpiZSxnZDplLHBsb3RpbmZvOnR9O2Z1bmN0aW9uIFBlKCl7T2UucGxvdGluZm8uc2VsZWN0aW9uPSExLEEoZSl9ZnVuY3Rpb24gSWUoZSxyKXt2YXIgYT1PZS5nZDtpZihhLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wKWEuX2Z1bGxMYXlvdXQuX2RlYWN0aXZhdGVTaGFwZShhKTtlbHNle3ZhciBvPWEuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO2lmKFYoYSksMiE9PWV8fHZlfHxVZSgpLG1lKW8uaW5kZXhPZigic2VsZWN0Iik+LTEmJkwocixhLEosUSx0LmlkLE9lKSxvLmluZGV4T2YoImV2ZW50Iik+LTEmJnAuY2xpY2soYSxyLHQuaWQpO2Vsc2UgaWYoMT09PWUmJnZlKXt2YXIgbD1nP0k6UCxjPSJzIj09PWd8fCJ3Ij09PXY/MDoxLGQ9bC5fbmFtZSsiLnJhbmdlWyIrYysiXSIsZj1mdW5jdGlvbihlLHQpe3ZhciByLG49ZS5yYW5nZVt0XSxhPU1hdGguYWJzKG4tZS5yYW5nZVsxLXRdKTtyZXR1cm4iZGF0ZSI9PT1lLnR5cGU/bjoibG9nIj09PWUudHlwZT8ocj1NYXRoLmNlaWwoTWF0aC5tYXgoMCwtTWF0aC5sb2coYSkvTWF0aC5MTjEwKSkrMyxpKCIuIityKyJnIikoTWF0aC5wb3coMTAsbikpKToocj1NYXRoLmZsb29yKE1hdGgubG9nKE1hdGguYWJzKG4pKS9NYXRoLkxOMTApLU1hdGguZmxvb3IoTWF0aC5sb2coYSkvTWF0aC5MTjEwKSs0LGkoIi4iK1N0cmluZyhyKSsiZyIpKG4pKX0obCxjKSxoPSJsZWZ0IixtPSJtaWRkbGUiO2lmKGwuZml4ZWRyYW5nZSlyZXR1cm47Zz8obT0ibiI9PT1nPyJ0b3AiOiJib3R0b20iLCJyaWdodCI9PT1sLnNpZGUmJihoPSJyaWdodCIpKToiZSI9PT12JiYoaD0icmlnaHQiKSxhLl9jb250ZXh0LnNob3dBeGlzUmFuZ2VFbnRyeUJveGVzJiZuLnNlbGVjdChiZSkuY2FsbCh1Lm1ha2VFZGl0YWJsZSx7Z2Q6YSxpbW1lZGlhdGU6ITAsYmFja2dyb3VuZDphLl9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3IsdGV4dDpTdHJpbmcoZiksZmlsbDpsLnRpY2tmb250P2wudGlja2ZvbnQuY29sb3I6IiM0NDQiLGhvcml6b250YWxBbGlnbjpoLHZlcnRpY2FsQWxpZ246bX0pLm9uKCJlZGl0IiwoZnVuY3Rpb24oZSl7dmFyIHQ9bC5kMnIoZSk7dm9pZCAwIT09dCYmcy5jYWxsKCJfZ3VpUmVsYXlvdXQiLGEsZCx0KX0pKX19fWZ1bmN0aW9uIFJlKHQscil7aWYoZS5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbilyZXR1cm4hMTt2YXIgbj1NYXRoLm1heCgwLE1hdGgubWluKGVlLHBlKnQrX2UpKSxhPU1hdGgubWF4KDAsTWF0aC5taW4odGUsaGUqcit3ZSkpLGk9TWF0aC5hYnMobi1fZSksbz1NYXRoLmFicyhhLXdlKTtmdW5jdGlvbiBsKCl7TGU9IiIsVGUucj1UZS5sLFRlLnQ9VGUuYixEZS5hdHRyKCJkIiwiTTAsMFoiKX1pZihUZS5sPU1hdGgubWluKF9lLG4pLFRlLnI9TWF0aC5tYXgoX2UsbiksVGUudD1NYXRoLm1pbih3ZSxhKSxUZS5iPU1hdGgubWF4KHdlLGEpLHJlLmlzU3VicGxvdENvbnN0cmFpbmVkKWk+T3x8bz5PPyhMZT0ieHkiLGkvZWU+by90ZT8obz1pKnRlL2VlLHdlPmE/VGUudD13ZS1vOlRlLmI9d2Urbyk6KGk9byplZS90ZSxfZT5uP1RlLmw9X2UtaTpUZS5yPV9lK2kpLERlLmF0dHIoImQiLHEoVGUpKSk6bCgpO2Vsc2UgaWYobmUuaXNTdWJwbG90Q29uc3RyYWluZWQpaWYoaT5PfHxvPk8pe0xlPSJ4eSI7dmFyIHM9TWF0aC5taW4oVGUubC9lZSwodGUtVGUuYikvdGUpLGM9TWF0aC5tYXgoVGUuci9lZSwodGUtVGUudCkvdGUpO1RlLmw9cyplZSxUZS5yPWMqZWUsVGUuYj0oMS1zKSp0ZSxUZS50PSgxLWMpKnRlLERlLmF0dHIoImQiLHEoVGUpKX1lbHNlIGwoKTtlbHNlIWllfHxvPE1hdGgubWluKE1hdGgubWF4KC42KmksQyksTyk/aTxDfHwhYWU/bCgpOihUZS50PTAsVGUuYj10ZSxMZT0ieCIsRGUuYXR0cigiZCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4iTSIrKGUubC0uNSkrIiwiKyh0LU8tLjUpKyJoLTN2IisoMipPKzEpKyJoM1pNIisoZS5yKy41KSsiLCIrKHQtTy0uNSkrImgzdiIrKDIqTysxKSsiaC0zWiJ9KFRlLHdlKSkpOiFhZXx8aTxNYXRoLm1pbiguNipvLE8pPyhUZS5sPTAsVGUucj1lZSxMZT0ieSIsRGUuYXR0cigiZCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4iTSIrKHQtTy0uNSkrIiwiKyhlLnQtLjUpKyJ2LTNoIisoMipPKzEpKyJ2M1pNIisodC1PLS41KSsiLCIrKGUuYisuNSkrInYzaCIrKDIqTysxKSsidi0zWiJ9KFRlLF9lKSkpOihMZT0ieHkiLERlLmF0dHIoImQiLHEoVGUpKSk7VGUudz1UZS5yLVRlLmwsVGUuaD1UZS5iLVRlLnQsTGUmJihDZT0hMCksZS5fZHJhZ2dlZD1DZSxCKFNlLERlLFRlLGtlLEFlLE1lKSx6ZSgpLGUuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixmZSksQWU9ITB9ZnVuY3Rpb24gemUoKXtmZT17fSwieHkiIT09TGUmJiJ4IiE9PUxlfHwoTihKLFRlLmwvZWUsVGUuci9lZSxmZSxyZS54YXhlcyksWWUoIngiLGZlKSksInh5IiE9PUxlJiYieSIhPT1MZXx8KE4oUSwodGUtVGUuYikvdGUsKHRlLVRlLnQpL3RlLGZlLHJlLnlheGVzKSxZZSgieSIsZmUpKX1mdW5jdGlvbiBOZSgpe3plKCksVihlKSxxZSgpLFUoZSl9T2UucHJlcEZuPWZ1bmN0aW9uKHQscixuKXt2YXIgaT1PZS5kcmFnbW9kZSxsPWUuX2Z1bGxMYXlvdXQuZHJhZ21vZGU7bCE9PWkmJihPZS5kcmFnbW9kZT1sKSx5ZSgpLHBlPWUuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxoZT1lLl9mdWxsTGF5b3V0Ll9pbnZTY2FsZVksb2V8fChtZT90LnNoaWZ0S2V5PyJwYW4iPT09bD9sPSJ6b29tIjp5KGwpfHwobD0icGFuIik6dC5jdHJsS2V5JiYobD0icGFuIik6bD0icGFuIikseChsKT9PZS5taW5EcmFnPTE6T2UubWluRHJhZz12b2lkIDAseShsKT8oT2UueGF4ZXM9SixPZS55YXhlcz1RLGsodCxyLG4sT2UsbCkpOihPZS5jbGlja0ZuPUllLHkoaSkmJlBlKCksb2V8fCgiem9vbSI9PT1sPyhPZS5tb3ZlRm49UmUsT2UuZG9uZUZuPU5lLE9lLm1pbkRyYWc9MSxmdW5jdGlvbih0LHIsbil7dmFyIGk9YmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7X2U9ci1pLmxlZnQsd2U9bi1pLnRvcCxlLl9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybShlKTt2YXIgbD1hLmFwcGx5M0RUcmFuc2Zvcm0oZS5fZnVsbExheW91dC5faW52VHJhbnNmb3JtKShfZSx3ZSk7X2U9bFswXSx3ZT1sWzFdLFRlPXtsOl9lLHI6X2UsdzowLHQ6d2UsYjp3ZSxoOjB9LE1lPWUuX2htcGl4Y291bnQ/ZS5faG1sdW1jb3VudC9lLl9obXBpeGNvdW50Om8oZS5fZnVsbExheW91dC5wbG90X2JnY29sb3IpLmdldEx1bWluYW5jZSgpLEFlPSExLExlPSJ4eSIsQ2U9ITEsU2U9aihnZSxNZSxLLCQsa2U9Ik0wLDBIIitlZSsiViIrdGUrIkgwVjAiKSxEZT1IKGdlLEssJCl9KDAscixuKSk6InBhbiI9PT1sJiYoT2UubW92ZUZuPUJlLE9lLmRvbmVGbj1xZSkpKSxlLl9mdWxsTGF5b3V0Ll9yZWRyYWc9ZnVuY3Rpb24oKXt2YXIgdD1lLl9kcmFnZGF0YTtpZih0JiZ0LmVsZW1lbnQ9PT1iZSl7dmFyIHI9ZS5fZnVsbExheW91dC5kcmFnbW9kZTt5KHIpfHwoeWUoKSxHZShbMCwwLGVlLHRlXSksT2UubW92ZUZuKHQuZHgsdC5keSkpfX19LG0uaW5pdChPZSk7dmFyIEZlPVswLDAsZWUsdGVdLEVlPW51bGwsamU9RC5SRURSQVdERUxBWSxIZT10Lm1haW5wbG90P2UuX2Z1bGxMYXlvdXQuX3Bsb3RzW3QubWFpbnBsb3RdOnQ7ZnVuY3Rpb24gQmUodCxyKXtpZih0Kj1wZSxyKj1oZSwhZS5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbil7aWYoZS5fZnVsbExheW91dC5fcmVwbG90dGluZz0hMCwiZXciPT09YWV8fCJucyI9PT1pZSl7dmFyIG49YWU/LXQ6MCxhPWllPy1yOjA7aWYobmUuaXNTdWJwbG90Q29uc3RyYWluZWQpe2lmKGFlJiZpZSl7dmFyIGk9KHQvZWUtci90ZSkvMjtuPS0odD1pKmVlKSxhPS0ocj0taSp0ZSl9aWU/bj0tYSplZS90ZTphPS1uKnRlL2VlfXJldHVybiBhZSYmKEYoSix0KSxZZSgieCIpKSxpZSYmKEYoUSxyKSxZZSgieSIpKSxHZShbbixhLGVlLHRlXSksVmUoKSx2b2lkIGUuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixmZSl9dmFyIG8sbCxzPSJ3Ij09PWFlPT0oIm4iPT09aWUpPzE6LTE7aWYoYWUmJmllJiYocmUuaXNTdWJwbG90Q29uc3RyYWluZWR8fG5lLmlzU3VicGxvdENvbnN0cmFpbmVkKSl7dmFyIGM9KHQvZWUrcypyL3RlKS8yO3Q9YyplZSxyPXMqYyp0ZX1pZigidyI9PT1hZT90PXAoSiwwLHQpOiJlIj09PWFlP3Q9cChKLDEsLXQpOmFlfHwodD0wKSwibiI9PT1pZT9yPXAoUSwxLHIpOiJzIj09PWllP3I9cChRLDAsLXIpOmllfHwocj0wKSxvPSJ3Ij09PWFlP3Q6MCxsPSJuIj09PWllP3I6MCxyZS5pc1N1YnBsb3RDb25zdHJhaW5lZCYmIW5lLmlzU3VicGxvdENvbnN0cmFpbmVkfHxuZS5pc1N1YnBsb3RDb25zdHJhaW5lZCYmYWUmJmllJiZzPjApe3ZhciB1O2lmKG5lLmlzU3VicGxvdENvbnN0cmFpbmVkfHwhYWUmJjE9PT1pZS5sZW5ndGgpe2Zvcih1PTA7dTxKLmxlbmd0aDt1KyspSlt1XS5yYW5nZT1KW3VdLl9yLnNsaWNlKCksUyhKW3VdLDEtci90ZSk7bz0odD1yKmVlL3RlKS8yfWlmKG5lLmlzU3VicGxvdENvbnN0cmFpbmVkfHwhaWUmJjE9PT1hZS5sZW5ndGgpe2Zvcih1PTA7dTxRLmxlbmd0aDt1KyspUVt1XS5yYW5nZT1RW3VdLl9yLnNsaWNlKCksUyhRW3VdLDEtdC9lZSk7bD0ocj10KnRlL2VlKS8yfX1uZS5pc1N1YnBsb3RDb25zdHJhaW5lZCYmaWV8fFllKCJ4IiksbmUuaXNTdWJwbG90Q29uc3RyYWluZWQmJmFlfHxZZSgieSIpO3ZhciBkPWVlLXQsZj10ZS1yOyFuZS5pc1N1YnBsb3RDb25zdHJhaW5lZHx8YWUmJmllfHwoYWU/KGw9bz8wOnQqdGUvZWUsZj1kKnRlL2VlKToobz1sPzA6ciplZS90ZSxkPWYqZWUvdGUpKSxHZShbbyxsLGQsZl0pLFZlKCksZS5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGZlKX1mdW5jdGlvbiBwKGUsdCxyKXtmb3IodmFyIG4sYSxpPTEtdCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPWVbb107aWYoIWwuZml4ZWRyYW5nZSl7bj1sLGE9bC5fcmxbaV0rKGwuX3JsW3RdLWwuX3JsW2ldKS9FKHIvbC5fbGVuZ3RoKTt2YXIgcz1sLmwycihhKTshMSE9PXMmJnZvaWQgMCE9PXMmJihsLnJhbmdlW3RdPXMpfX1yZXR1cm4gbi5fbGVuZ3RoKihuLl9ybFt0XS1hKS8obi5fcmxbdF0tbi5fcmxbaV0pfX1mdW5jdGlvbiBZZShlLHQpe2Zvcih2YXIgcj1uZS5pc1N1YnBsb3RDb25zdHJhaW5lZD97eDpRLHk6Sn1bZV06bmVbZSsiYXhlcyJdLG49bmUuaXNTdWJwbG90Q29uc3RyYWluZWQ/e3g6Six5OlF9W2VdOltdLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGk9clthXSxvPWkuX2lkLGw9bmUueExpbmtzW29dfHxuZS55TGlua3Nbb10scz1uWzBdfHxZW2xdfHxYW2xdO3MmJih0Pyh0W2kuX25hbWUrIi5yYW5nZVswXSJdPXRbcy5fbmFtZSsiLnJhbmdlWzBdIl0sdFtpLl9uYW1lKyIucmFuZ2VbMV0iXT10W3MuX25hbWUrIi5yYW5nZVsxXSJdKTppLnJhbmdlPXMucmFuZ2Uuc2xpY2UoKSl9fWZ1bmN0aW9uIFZlKCl7dmFyIHQscj1bXTtmdW5jdGlvbiBuKGUpe2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5maXhlZHJhbmdlfHxyLnB1c2goZVt0XS5faWQpfWZvcihsZSYmKG4oSiksbihyZS54YXhlcyksbihuZS54YXhlcykpLHNlJiYobihRKSxuKHJlLnlheGVzKSxuKG5lLnlheGVzKSksZmU9e30sdD0wO3Q8ci5sZW5ndGg7dCsrKXt2YXIgYT1yW3RdLGk9TShlLGEpO2guZHJhd09uZShlLGkse3NraXBUaXRsZTohMH0pLGZlW2kuX25hbWUrIi5yYW5nZVswXSJdPWkucmFuZ2VbMF0sZmVbaS5fbmFtZSsiLnJhbmdlWzFdIl09aS5yYW5nZVsxXX1oLnJlZHJhd0NvbXBvbmVudHMoZSxyKX1mdW5jdGlvbiBVZSgpe2lmKCFlLl90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXt2YXIgdD1lLl9jb250ZXh0LmRvdWJsZUNsaWNrLHI9W107YWUmJihyPXIuY29uY2F0KEopKSxpZSYmKHI9ci5jb25jYXQoUSkpLG5lLnhheGVzJiYocj1yLmNvbmNhdChuZS54YXhlcykpLG5lLnlheGVzJiYocj1yLmNvbmNhdChuZS55YXhlcykpO3ZhciBuLGEsaSxvPXt9O2lmKCJyZXNldCthdXRvc2l6ZSI9PT10KWZvcih0PSJhdXRvc2l6ZSIsYT0wO2E8ci5sZW5ndGg7YSsrKWlmKChuPXJbYV0pLl9yYW5nZUluaXRpYWwmJihuLnJhbmdlWzBdIT09bi5fcmFuZ2VJbml0aWFsWzBdfHxuLnJhbmdlWzFdIT09bi5fcmFuZ2VJbml0aWFsWzFdKXx8IW4uX3JhbmdlSW5pdGlhbCYmIW4uYXV0b3JhbmdlKXt0PSJyZXNldCI7YnJlYWt9aWYoImF1dG9zaXplIj09PXQpZm9yKGE9MDthPHIubGVuZ3RoO2ErKykobj1yW2FdKS5maXhlZHJhbmdlfHwob1tuLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApO2Vsc2UgaWYoInJlc2V0Ij09PXQpZm9yKChhZXx8cmUuaXNTdWJwbG90Q29uc3RyYWluZWQpJiYocj1yLmNvbmNhdChyZS54YXhlcykpLGllJiYhcmUuaXNTdWJwbG90Q29uc3RyYWluZWQmJihyPXIuY29uY2F0KHJlLnlheGVzKSkscmUuaXNTdWJwbG90Q29uc3RyYWluZWQmJihhZT9pZXx8KHI9ci5jb25jYXQoUSkpOnI9ci5jb25jYXQoSikpLGE9MDthPHIubGVuZ3RoO2ErKykobj1yW2FdKS5maXhlZHJhbmdlfHwobi5fcmFuZ2VJbml0aWFsPyhpPW4uX3JhbmdlSW5pdGlhbCxvW24uX25hbWUrIi5yYW5nZVswXSJdPWlbMF0sb1tuLl9uYW1lKyIucmFuZ2VbMV0iXT1pWzFdKTpvW24uX25hbWUrIi5hdXRvcmFuZ2UiXT0hMCk7ZS5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLHMuY2FsbCgiX2d1aVJlbGF5b3V0IixlLG8pfX1mdW5jdGlvbiBxZSgpe0dlKFswLDAsZWUsdGVdKSxhLnN5bmNPckFzeW5jKFtULnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtlLl9mdWxsTGF5b3V0Ll9yZXBsb3R0aW5nPSExLHMuY2FsbCgiX2d1aVJlbGF5b3V0IixlLGZlKX1dLGUpfWZ1bmN0aW9uIEdlKHQpe3ZhciByLG4saSxvLGw9ZS5fZnVsbExheW91dCxjPWwuX3Bsb3RzLHU9bC5fc3VicGxvdHMuY2FydGVzaWFuO2lmKHVlJiZzLnN1YnBsb3RzUmVnaXN0cnkuc3Bsb20uZHJhZyhlKSxjZSlmb3Iocj0wO3I8dS5sZW5ndGg7cisrKWlmKGk9KG49Y1t1W3JdXSkueGF4aXMsbz1uLnlheGlzLG4uX3NjZW5lKXt2YXIgZD1hLnNpbXBsZU1hcChpLnJhbmdlLGkucjJsKSxwPWEuc2ltcGxlTWFwKG8ucmFuZ2Usby5yMmwpO24uX3NjZW5lLnVwZGF0ZSh7cmFuZ2U6W2RbMF0scFswXSxkWzFdLHBbMV1dfSl9aWYoKHVlfHxjZSkmJihfKGUpLHcoZSkpLGRlKXt2YXIgaD10WzJdL1AuX2xlbmd0aCxtPXRbM10vSS5fbGVuZ3RoO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspe2k9KG49Y1t1W3JdXSkueGF4aXMsbz1uLnlheGlzO3ZhciB5LHgsYixULE09KGxlfHxuZS5pc1N1YnBsb3RDb25zdHJhaW5lZCkmJiFpLmZpeGVkcmFuZ2UmJllbaS5faWRdLGs9KHNlfHxuZS5pc1N1YnBsb3RDb25zdHJhaW5lZCkmJiFvLmZpeGVkcmFuZ2UmJlhbby5faWRdO2lmKE0/KHk9aCxiPXZ8fG5lLmlzU3VicGxvdENvbnN0cmFpbmVkP3RbMF06WGUoaSx5KSk6bmUueGFIYXNoW2kuX2lkXT8oeT1oLGI9dFswXSppLl9sZW5ndGgvUC5fbGVuZ3RoKTpuZS55YUhhc2hbaS5faWRdPyh5PW0sYj0ibnMiPT09aWU/LXRbMV0qaS5fbGVuZ3RoL0kuX2xlbmd0aDpYZShpLHkse246InRvcCIsczoiYm90dG9tIn1baWVdKSk6Yj1XZShpLHk9WmUoaSxoLG0pKSxrPyh4PW0sVD1nfHxuZS5pc1N1YnBsb3RDb25zdHJhaW5lZD90WzFdOlhlKG8seCkpOm5lLnlhSGFzaFtvLl9pZF0/KHg9bSxUPXRbMV0qby5fbGVuZ3RoL0kuX2xlbmd0aCk6bmUueGFIYXNoW28uX2lkXT8oeD1oLFQ9ImV3Ij09PWFlPy10WzBdKm8uX2xlbmd0aC9QLl9sZW5ndGg6WGUobyx4LHtlOiJyaWdodCIsdzoibGVmdCJ9W2FlXSkpOlQ9V2Uobyx4PVplKG8saCxtKSkseXx8eCl7eXx8KHk9MSkseHx8KHg9MSk7dmFyIEE9aS5fb2Zmc2V0LWIveSxMPW8uX29mZnNldC1UL3g7bi5jbGlwUmVjdC5jYWxsKGYuc2V0VHJhbnNsYXRlLGIsVCkuY2FsbChmLnNldFNjYWxlLHkseCksbi5wbG90LmNhbGwoZi5zZXRUcmFuc2xhdGUsQSxMKS5jYWxsKGYuc2V0U2NhbGUsMS95LDEveCkseT09PW4ueFNjYWxlRmFjdG9yJiZ4PT09bi55U2NhbGVGYWN0b3J8fChmLnNldFBvaW50R3JvdXBTY2FsZShuLnpvb21TY2FsZVB0cyx5LHgpLGYuc2V0VGV4dFBvaW50c1NjYWxlKG4uem9vbVNjYWxlVHh0LHkseCkpLGYuaGlkZU91dHNpZGVSYW5nZVBvaW50cyhuLmNsaXBPbkF4aXNGYWxzZVRyYWNlcyxuKSxuLnhTY2FsZUZhY3Rvcj15LG4ueVNjYWxlRmFjdG9yPXh9fX19ZnVuY3Rpb24gWmUoZSx0LHIpe3JldHVybiBlLmZpeGVkcmFuZ2U/MDpsZSYmcmUueGFIYXNoW2UuX2lkXT90OnNlJiYocmUuaXNTdWJwbG90Q29uc3RyYWluZWQ/cmUueGFIYXNoOnJlLnlhSGFzaClbZS5faWRdP3I6MH1mdW5jdGlvbiBXZShlLHQpe3JldHVybiB0PyhlLnJhbmdlPWUuX3Iuc2xpY2UoKSxTKGUsdCksWGUoZSx0KSk6MH1mdW5jdGlvbiBYZShlLHQscil7cmV0dXJuIGUuX2xlbmd0aCooMS10KSpiW3J8fGUuY29uc3RyYWludG93YXJkfHwibWlkZGxlIl19cmV0dXJuIGcubGVuZ3RoKnYubGVuZ3RoIT0xJiZaKGJlLChmdW5jdGlvbih0KXtpZihlLl9jb250ZXh0Ll9zY3JvbGxab29tLmNhcnRlc2lhbnx8ZS5fZnVsbExheW91dC5fZW5hYmxlc2Nyb2xsem9vbSl7aWYoUGUoKSxlLl90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksdm9pZCB0LnN0b3BQcm9wYWdhdGlvbigpO3llKCksY2xlYXJUaW1lb3V0KEVlKTt2YXIgcj0tdC5kZWx0YVk7aWYoaXNGaW5pdGUocil8fChyPXQud2hlZWxEZWx0YS8xMCksaXNGaW5pdGUocikpe3ZhciBuLGk9TWF0aC5leHAoLU1hdGgubWluKE1hdGgubWF4KHIsLTIwKSwyMCkvMjAwKSxvPUhlLmRyYWdsYXllci5zZWxlY3QoIi5uc2V3ZHJhZyIpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsPSh0LmNsaWVudFgtby5sZWZ0KS9vLndpZHRoLHM9KG8uYm90dG9tLXQuY2xpZW50WSkvby5oZWlnaHQ7aWYobGUpe2Zvcih2fHwobD0uNSksbj0wO248Si5sZW5ndGg7bisrKWMoSltuXSxsLGkpO1llKCJ4IiksRmVbMl0qPWksRmVbMF0rPUZlWzJdKmwqKDEvaS0xKX1pZihzZSl7Zm9yKGd8fChzPS41KSxuPTA7bjxRLmxlbmd0aDtuKyspYyhRW25dLHMsaSk7WWUoInkiKSxGZVszXSo9aSxGZVsxXSs9RmVbM10qKDEtcykqKDEvaS0xKX1HZShGZSksVmUoKSxlLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsZmUpLEVlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5fZnVsbExheW91dCYmKEZlPVswLDAsZWUsdGVdLHFlKCkpfSksamUpLHQucHJldmVudERlZmF1bHQoKX1lbHNlIGEubG9nKCJEaWQgbm90IGZpbmQgd2hlZWwgbW90aW9uIGF0dHJpYnV0ZXM6ICIsdCl9ZnVuY3Rpb24gYyhlLHQscil7aWYoIWUuZml4ZWRyYW5nZSl7dmFyIG49YS5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCksaT1uWzBdKyhuWzFdLW5bMF0pKnQ7ZS5yYW5nZT1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUubDJyKGkrKHQtaSkqcil9KSl9fX0pKSxiZX0sbWFrZURyYWdnZXI6SSxtYWtlUmVjdERyYWdnZXI6UixtYWtlWm9vbWJveDpqLG1ha2VDb3JuZXJzOkgsdXBkYXRlWm9vbWJveDpCLHh5Q29ybmVyczpxLHRyYW5zaXRpb25ab29tYm94OlkscmVtb3ZlWm9vbWJveDpWLHNob3dEb3VibGVDbGlja05vdGlmaWVyOlUsYXR0YWNoV2hlZWxFdmVudEhhbmRsZXI6Wn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MTAyLCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IjoxMjEsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6MTIwLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjEyNCwiLi4vLi4vY29tcG9uZW50cy9meCI6MTQyLCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IjoyMDcsIi4uLy4uL2xpYiI6MjMyLCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiOjIyMCwiLi4vLi4vbGliL3NldGN1cnNvciI6MjUyLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjI1NSwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiOjI2OSwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi4vcGxvdHMiOjMxNiwiLi9heGVzIjoyNzksIi4vYXhpc19pZHMiOjI4MywiLi9jb25zdGFudHMiOjI4NiwiLi9zY2FsZV96b29tIjoyOTksIi4vc2VsZWN0IjozMDAsIkBwbG90bHkvZDMiOjExLCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQ5LHRpbnljb2xvcjI6Njd9XSwyODk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLG89ZSgiLi4vLi4vbGliL3NldGN1cnNvciIpLGw9ZSgiLi9kcmFnYm94IikubWFrZURyYWdCb3gscz1lKCIuL2NvbnN0YW50cyIpLkRSQUdHRVJTSVpFO3IuaW5pdEludGVyYWN0aW9ucz1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0O2lmKGUuX2NvbnRleHQuc3RhdGljUGxvdCluLnNlbGVjdChlKS5zZWxlY3RBbGwoIi5kcmFnIikucmVtb3ZlKCk7ZWxzZSBpZih0Ll9oYXMoImNhcnRlc2lhbiIpfHx0Ll9oYXMoInNwbG9tIikpe09iamVjdC5rZXlzKHQuX3Bsb3RzfHx7fSkuc29ydCgoZnVuY3Rpb24oZSxyKXtpZigodC5fcGxvdHNbZV0ubWFpbnBsb3QmJiEwKT09PSh0Ll9wbG90c1tyXS5tYWlucGxvdCYmITApKXt2YXIgbj1lLnNwbGl0KCJ5IiksYT1yLnNwbGl0KCJ5Iik7cmV0dXJuIG5bMF09PT1hWzBdP051bWJlcihuWzFdfHwxKS1OdW1iZXIoYVsxXXx8MSk6TnVtYmVyKG5bMF18fDEpLU51bWJlcihhWzBdfHwxKX1yZXR1cm4gdC5fcGxvdHNbZV0ubWFpbnBsb3Q/MTotMX0pKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj10Ll9wbG90c1tyXSxvPW4ueGF4aXMsYz1uLnlheGlzO2lmKCFuLm1haW5wbG90KXt2YXIgdT1sKGUsbixvLl9vZmZzZXQsYy5fb2Zmc2V0LG8uX2xlbmd0aCxjLl9sZW5ndGgsIm5zIiwiZXciKTt1Lm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe2UuX2Z1bGxMYXlvdXQuX3JlaG92ZXI9ZnVuY3Rpb24oKXtlLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9PT1yJiZlLl9mdWxsTGF5b3V0Ll9wbG90c1tyXSYmYS5ob3ZlcihlLHQscil9LGEuaG92ZXIoZSx0LHIpLGUuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj11LGUuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yfSx1Lm9ubW91c2VvdXQ9ZnVuY3Rpb24odCl7ZS5fZHJhZ2dpbmd8fChlLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbCxpLnVuaG92ZXIoZSx0KSl9LGUuX2NvbnRleHQuc2hvd0F4aXNEcmFnSGFuZGxlcyYmKGwoZSxuLG8uX29mZnNldC1zLGMuX29mZnNldC1zLHMscywibiIsInciKSxsKGUsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldC1zLHMscywibiIsImUiKSxsKGUsbixvLl9vZmZzZXQtcyxjLl9vZmZzZXQrYy5fbGVuZ3RoLHMscywicyIsInciKSxsKGUsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldCtjLl9sZW5ndGgscyxzLCJzIiwiZSIpKX1pZihlLl9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMpe2lmKHI9PT1vLl9tYWluU3VicGxvdCl7dmFyIGQ9by5fbWFpbkxpbmVQb3NpdGlvbjsidG9wIj09PW8uc2lkZSYmKGQtPXMpLGwoZSxuLG8uX29mZnNldCsuMSpvLl9sZW5ndGgsZCwuOCpvLl9sZW5ndGgscywiIiwiZXciKSxsKGUsbixvLl9vZmZzZXQsZCwuMSpvLl9sZW5ndGgscywiIiwidyIpLGwoZSxuLG8uX29mZnNldCsuOSpvLl9sZW5ndGgsZCwuMSpvLl9sZW5ndGgscywiIiwiZSIpfWlmKHI9PT1jLl9tYWluU3VicGxvdCl7dmFyIGY9Yy5fbWFpbkxpbmVQb3NpdGlvbjsicmlnaHQiIT09Yy5zaWRlJiYoZi09cyksbChlLG4sZixjLl9vZmZzZXQrLjEqYy5fbGVuZ3RoLHMsLjgqYy5fbGVuZ3RoLCJucyIsIiIpLGwoZSxuLGYsYy5fb2Zmc2V0Ky45KmMuX2xlbmd0aCxzLC4xKmMuX2xlbmd0aCwicyIsIiIpLGwoZSxuLGYsYy5fb2Zmc2V0LHMsLjEqYy5fbGVuZ3RoLCJuIiwiIil9fX0pKTt2YXIgbz10Ll9ob3ZlcmxheWVyLm5vZGUoKTtvLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHIpe3IudGFyZ2V0PWUuX2Z1bGxMYXlvdXQuX2xhc3Rob3ZlcixhLmhvdmVyKGUscix0Ll9ob3ZlcnN1YnBsb3QpfSxvLm9uY2xpY2s9ZnVuY3Rpb24odCl7dC50YXJnZXQ9ZS5fZnVsbExheW91dC5fbGFzdGhvdmVyLGEuY2xpY2soZSx0KX0sby5vbm1vdXNlZG93bj1mdW5jdGlvbih0KXtlLl9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIub25tb3VzZWRvd24odCl9LHIudXBkYXRlRngoZSl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQscj0icGFuIj09PXQuZHJhZ21vZGU/Im1vdmUiOiJjcm9zc2hhaXIiO28odC5fZHJhZ2dlcnMscil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjEyMSwiLi4vLi4vY29tcG9uZW50cy9meCI6MTQyLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjoyNTIsIi4vY29uc3RhbnRzIjoyODYsIi4vZHJhZ2JveCI6Mjg4LCJAcGxvdGx5L2QzIjoxMX1dLDI5MDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e2NsZWFyT3V0bGluZUNvbnRyb2xsZXJzOmZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQuX3pvb21sYXllcjt0JiZ0LnNlbGVjdEFsbCgiLm91dGxpbmUtY29udHJvbGxlcnMiKS5yZW1vdmUoKX0sY2xlYXJTZWxlY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dC5fem9vbWxheWVyO3QmJnQuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKSxlLl9mdWxsTGF5b3V0Ll9kcmF3aW5nPSExfX19LHt9XSwyOTE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIikuc3RyVHJhbnNsYXRlO2Z1bmN0aW9uIGEoZSx0KXtzd2l0Y2goZS50eXBlKXtjYXNlImxvZyI6cmV0dXJuIGUucDJkKHQpO2Nhc2UiZGF0ZSI6cmV0dXJuIGUucDJyKHQsMCxlLmNhbGVuZGFyKTtkZWZhdWx0OnJldHVybiBlLnAycih0KX19dC5leHBvcnRzPXtwMnI6YSxyMnA6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZS50eXBlKXtjYXNlImxvZyI6cmV0dXJuIGUuZDJwKHQpO2Nhc2UiZGF0ZSI6cmV0dXJuIGUucjJwKHQsMCxlLmNhbGVuZGFyKTtkZWZhdWx0OnJldHVybiBlLnIycCh0KX19LGF4VmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9InkiPT09ZS5faWQuY2hhckF0KDApPzE6MDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGEoZSxyW3RdKX19LGdldFRyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gbihlLnhheGlzLl9vZmZzZXQsZS55YXhpcy5fb2Zmc2V0KX19fSx7Ii4uLy4uL2xpYiI6MjMyfV0sMjkyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3JlZ2lzdHJ5IiksYT1lKCIuLi8uLi9saWIiKSxpPWUoIi4vYXhpc19pZHMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG89dFtlXTtpZihBcnJheS5pc0FycmF5KG8pKWZvcih2YXIgbD1uLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuLHM9bC5pZFJlZ2V4LGM9ci5fc3VicGxvdHMsdT1jLnhheGlzLGQ9Yy55YXhpcyxmPWMuY2FydGVzaWFuLHA9ci5faGFzKCJjYXJ0ZXNpYW4iKXx8ci5faGFzKCJnbDJkIiksaD0wO2g8by5sZW5ndGg7aCsrKXt2YXIgZz1vW2hdO2lmKGEuaXNQbGFpbk9iamVjdChnKSl7dmFyIG09aS5jbGVhbklkKGcueHJlZiwieCIsITEpLHY9aS5jbGVhbklkKGcueXJlZiwieSIsITEpLHk9cy54LnRlc3QobSkseD1zLnkudGVzdCh2KTtpZih5fHx4KXtwfHxhLnB1c2hVbmlxdWUoci5fYmFzZVBsb3RNb2R1bGVzLGwpO3ZhciBiPSExO3kmJi0xPT09dS5pbmRleE9mKG0pJiYodS5wdXNoKG0pLGI9ITApLHgmJi0xPT09ZC5pbmRleE9mKHYpJiYoZC5wdXNoKHYpLGI9ITApLGImJnkmJngmJmYucHVzaChtK3YpfX19fX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4vYXhpc19pZHMiOjI4M31dLDI5MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJAcGxvdGx5L2QzIiksYT1lKCIuLi8uLi9yZWdpc3RyeSIpLGk9ZSgiLi4vLi4vbGliIiksbz1lKCIuLi9wbG90cyIpLGw9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz1lKCIuLi9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLGM9ZSgiLi9heGlzX2lkcyIpLHU9ZSgiLi9jb25zdGFudHMiKSxkPWUoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksZj1pLmVuc3VyZVNpbmdsZTtmdW5jdGlvbiBwKGUsdCxyKXtyZXR1cm4gaS5lbnN1cmVTaW5nbGUoZSx0LHIsKGZ1bmN0aW9uKGUpe2UuZGF0dW0ocil9KSl9ZnVuY3Rpb24gaChlLHQscixpLG8pe2Zvcih2YXIgYyxkLGYscD11LnRyYWNlTGF5ZXJDbGFzc2VzLGg9ZS5fZnVsbExheW91dCxnPWguX21vZHVsZXMsbT1bXSx2PVtdLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIHg9KGM9Z1t5XSkubmFtZSxiPWEubW9kdWxlc1t4XS5jYXRlZ29yaWVzO2lmKGIuc3ZnKXt2YXIgXz1jLmxheWVyTmFtZXx8eCsibGF5ZXIiLHc9Yy5wbG90O2Y9KGQ9cyhyLHcpKVswXSxyPWRbMV0sZi5sZW5ndGgmJm0ucHVzaCh7aTpwLmluZGV4T2YoXyksY2xhc3NOYW1lOl8scGxvdE1ldGhvZDp3LGNkTW9kdWxlOmZ9KSxiLnpvb21TY2FsZSYmdi5wdXNoKCIuIitfKX19bS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLmktdC5pfSkpO3ZhciBUPXQucGxvdC5zZWxlY3RBbGwoImcubWxheWVyIikuZGF0YShtLChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWV9KSk7aWYoVC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lfSkpLmNsYXNzZWQoIm1sYXllciIsITApLmNsYXNzZWQoInJhbmdlcGxvdCIsdC5pc1JhbmdlUGxvdCksVC5leGl0KCkucmVtb3ZlKCksVC5vcmRlcigpLFQuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGE9bi5zZWxlY3QodGhpcykscz1yLmNsYXNzTmFtZTtyLnBsb3RNZXRob2QoZSx0LHIuY2RNb2R1bGUsYSxpLG8pLC0xPT09dS5jbGlwT25BeGlzRmFsc2VRdWVyeS5pbmRleE9mKCIuIitzKSYmbC5zZXRDbGlwVXJsKGEsdC5sYXllckNsaXBJZCxlKX0pKSxoLl9oYXMoInNjYXR0ZXJnbCIpJiYoYz1hLmdldE1vZHVsZSgic2NhdHRlcmdsIiksZj1zKHIsYylbMF0sYy5wbG90KGUsdCxmKSksIWUuX2NvbnRleHQuc3RhdGljUGxvdCYmKHQuX2hhc0NsaXBPbkF4aXNGYWxzZSYmKHQuY2xpcE9uQXhpc0ZhbHNlVHJhY2VzPXQucGxvdC5zZWxlY3RBbGwodS5jbGlwT25BeGlzRmFsc2VRdWVyeS5qb2luKCIsIikpLnNlbGVjdEFsbCgiLnRyYWNlIikpLHYubGVuZ3RoKSl7dmFyIE09dC5wbG90LnNlbGVjdEFsbCh2LmpvaW4oIiwiKSkuc2VsZWN0QWxsKCIudHJhY2UiKTt0Lnpvb21TY2FsZVB0cz1NLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLHQuem9vbVNjYWxlVHh0PU0uc2VsZWN0QWxsKCIudGV4dHBvaW50Iil9fWZ1bmN0aW9uIGcoZSx0KXt2YXIgcj10LnBsb3Rncm91cCxuPXQuaWQsYT11LmxheWVyVmFsdWUybGF5ZXJDbGFzc1t0LnhheGlzLmxheWVyXSxpPXUubGF5ZXJWYWx1ZTJsYXllckNsYXNzW3QueWF4aXMubGF5ZXJdLG89ZS5fZnVsbExheW91dC5faGFzT25seUxhcmdlU3Bsb21zO2lmKHQubWFpbnBsb3Qpe3ZhciBsPXQubWFpbnBsb3RpbmZvLHM9bC5wbG90Z3JvdXAsZD1uKyIteCIsaD1uKyIteSI7dC5ncmlkbGF5ZXI9bC5ncmlkbGF5ZXIsdC56ZXJvbGluZWxheWVyPWwuemVyb2xpbmVsYXllcixmKGwub3ZlcmxpbmVzQmVsb3csInBhdGgiLGQpLGYobC5vdmVybGluZXNCZWxvdywicGF0aCIsaCksZihsLm92ZXJheGVzQmVsb3csImciLGQpLGYobC5vdmVyYXhlc0JlbG93LCJnIixoKSx0LnBsb3Q9ZihsLm92ZXJwbG90LCJnIixuKSxmKGwub3ZlcmxpbmVzQWJvdmUsInBhdGgiLGQpLGYobC5vdmVybGluZXNBYm92ZSwicGF0aCIsaCksZihsLm92ZXJheGVzQWJvdmUsImciLGQpLGYobC5vdmVyYXhlc0Fib3ZlLCJnIixoKSx0LnhsaW5lcz1zLnNlbGVjdCgiLm92ZXJsaW5lcy0iK2EpLnNlbGVjdCgiLiIrZCksdC55bGluZXM9cy5zZWxlY3QoIi5vdmVybGluZXMtIitpKS5zZWxlY3QoIi4iK2gpLHQueGF4aXNsYXllcj1zLnNlbGVjdCgiLm92ZXJheGVzLSIrYSkuc2VsZWN0KCIuIitkKSx0LnlheGlzbGF5ZXI9cy5zZWxlY3QoIi5vdmVyYXhlcy0iK2kpLnNlbGVjdCgiLiIraCl9ZWxzZSBpZihvKXQueGxpbmVzPWYociwicGF0aCIsInhsaW5lcy1hYm92ZSIpLHQueWxpbmVzPWYociwicGF0aCIsInlsaW5lcy1hYm92ZSIpLHQueGF4aXNsYXllcj1mKHIsImciLCJ4YXhpc2xheWVyLWFib3ZlIiksdC55YXhpc2xheWVyPWYociwiZyIsInlheGlzbGF5ZXItYWJvdmUiKTtlbHNle3ZhciBnPWYociwiZyIsImxheWVyLXN1YnBsb3QiKTt0LnNoYXBlbGF5ZXI9ZihnLCJnIiwic2hhcGVsYXllciIpLHQuaW1hZ2VsYXllcj1mKGcsImciLCJpbWFnZWxheWVyIiksdC5ncmlkbGF5ZXI9ZihyLCJnIiwiZ3JpZGxheWVyIiksdC56ZXJvbGluZWxheWVyPWYociwiZyIsInplcm9saW5lbGF5ZXIiKSxmKHIsInBhdGgiLCJ4bGluZXMtYmVsb3ciKSxmKHIsInBhdGgiLCJ5bGluZXMtYmVsb3ciKSx0Lm92ZXJsaW5lc0JlbG93PWYociwiZyIsIm92ZXJsaW5lcy1iZWxvdyIpLGYociwiZyIsInhheGlzbGF5ZXItYmVsb3ciKSxmKHIsImciLCJ5YXhpc2xheWVyLWJlbG93IiksdC5vdmVyYXhlc0JlbG93PWYociwiZyIsIm92ZXJheGVzLWJlbG93IiksdC5wbG90PWYociwiZyIsInBsb3QiKSx0Lm92ZXJwbG90PWYociwiZyIsIm92ZXJwbG90IiksdC54bGluZXM9ZihyLCJwYXRoIiwieGxpbmVzLWFib3ZlIiksdC55bGluZXM9ZihyLCJwYXRoIiwieWxpbmVzLWFib3ZlIiksdC5vdmVybGluZXNBYm92ZT1mKHIsImciLCJvdmVybGluZXMtYWJvdmUiKSxmKHIsImciLCJ4YXhpc2xheWVyLWFib3ZlIiksZihyLCJnIiwieWF4aXNsYXllci1hYm92ZSIpLHQub3ZlcmF4ZXNBYm92ZT1mKHIsImciLCJvdmVyYXhlcy1hYm92ZSIpLHQueGxpbmVzPXIuc2VsZWN0KCIueGxpbmVzLSIrYSksdC55bGluZXM9ci5zZWxlY3QoIi55bGluZXMtIitpKSx0LnhheGlzbGF5ZXI9ci5zZWxlY3QoIi54YXhpc2xheWVyLSIrYSksdC55YXhpc2xheWVyPXIuc2VsZWN0KCIueWF4aXNsYXllci0iK2kpfW98fChwKHQuZ3JpZGxheWVyLCJnIix0LnhheGlzLl9pZCkscCh0LmdyaWRsYXllciwiZyIsdC55YXhpcy5faWQpLHQuZ3JpZGxheWVyLnNlbGVjdEFsbCgiZyIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19KSkuc29ydChjLmlkU29ydCkpLHQueGxpbmVzLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNsYXNzZWQoImNyaXNwIiwhMCksdC55bGluZXMuc3R5bGUoImZpbGwiLCJub25lIikuY2xhc3NlZCgiY3Jpc3AiLCEwKX1mdW5jdGlvbiBtKGUsdCl7aWYoZSl7dmFyIHI9e307Zm9yKHZhciBhIGluIGUuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGE9ZVswXTtuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKSx2KGEsdCksclthXT0hMH0pKSx0Ll9wbG90cylmb3IodmFyIGk9dC5fcGxvdHNbYV0ub3ZlcmxheXN8fFtdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGw9aVtvXTtyW2wuaWRdJiZsLnBsb3Quc2VsZWN0QWxsKCIudHJhY2UiKS5yZW1vdmUoKX19fWZ1bmN0aW9uIHYoZSx0KXt0Ll9kcmFnZ2Vycy5zZWxlY3RBbGwoImcuIitlKS5yZW1vdmUoKSx0Ll9kZWZzLnNlbGVjdCgiI2NsaXAiK3QuX3VpZCtlKyJwbG90IikucmVtb3ZlKCl9ci5uYW1lPSJjYXJ0ZXNpYW4iLHIuYXR0cj1bInhheGlzIiwieWF4aXMiXSxyLmlkUm9vdD1bIngiLCJ5Il0sci5pZFJlZ2V4PXUuaWRSZWdleCxyLmF0dHJSZWdleD11LmF0dHJSZWdleCxyLmF0dHJpYnV0ZXM9ZSgiLi9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPWUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPWUoIi4vbGF5b3V0X2RlZmF1bHRzIiksci50cmFuc2l0aW9uQXhlcz1lKCIuL3RyYW5zaXRpb25fYXhlcyIpLHIuZmluYWxpemVTdWJwbG90cz1mdW5jdGlvbihlLHQpe3ZhciByLG4sYSxvPXQuX3N1YnBsb3RzLGw9by54YXhpcyxzPW8ueWF4aXMsZD1vLmNhcnRlc2lhbixmPWQuY29uY2F0KG8uZ2wyZHx8W10pLHA9e30saD17fTtmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKXt2YXIgZz1mW3JdLnNwbGl0KCJ5Iik7cFtnWzBdXT0xLGhbInkiK2dbMV1dPTF9Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKylwW249bFtyXV18fChhPShlW2MuaWQybmFtZShuKV18fHt9KS5hbmNob3IsdS5pZFJlZ2V4LnkudGVzdChhKXx8KGE9InkiKSxkLnB1c2gobithKSxmLnB1c2gobithKSxoW2FdfHwoaFthXT0xLGkucHVzaFVuaXF1ZShzLGEpKSk7Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyloW2E9c1tyXV18fChuPShlW2MuaWQybmFtZShhKV18fHt9KS5hbmNob3IsdS5pZFJlZ2V4LngudGVzdChuKXx8KG49IngiKSxkLnB1c2gobithKSxmLnB1c2gobithKSxwW25dfHwocFtuXT0xLGkucHVzaFVuaXF1ZShsLG4pKSk7aWYoIWYubGVuZ3RoKXtmb3IodmFyIG0gaW4gbj0iIixhPSIiLGUpe2lmKHUuYXR0clJlZ2V4LnRlc3QobSkpIngiPT09bS5jaGFyQXQoMCk/KCFufHwrbS5zdWJzdHIoNSk8K24uc3Vic3RyKDUpKSYmKG49bSk6KCFhfHwrbS5zdWJzdHIoNSk8K2Euc3Vic3RyKDUpKSYmKGE9bSl9bj1uP2MubmFtZTJpZChuKToieCIsYT1hP2MubmFtZTJpZChhKToieSIsbC5wdXNoKG4pLHMucHVzaChhKSxkLnB1c2gobithKX19LHIucGxvdD1mdW5jdGlvbihlLHQscixuKXt2YXIgYSxpPWUuX2Z1bGxMYXlvdXQsbz1pLl9zdWJwbG90cy5jYXJ0ZXNpYW4sbD1lLmNhbGNkYXRhO2lmKCFBcnJheS5pc0FycmF5KHQpKWZvcih0PVtdLGE9MDthPGwubGVuZ3RoO2ErKyl0LnB1c2goYSk7Zm9yKGE9MDthPG8ubGVuZ3RoO2ErKyl7Zm9yKHZhciBzLGM9b1thXSx1PWkuX3Bsb3RzW2NdLGQ9W10sZj0wO2Y8bC5sZW5ndGg7ZisrKXt2YXIgcD1sW2ZdLGc9cFswXS50cmFjZTtnLnhheGlzK2cueWF4aXM9PT1jJiYoKC0xIT09dC5pbmRleE9mKGcuaW5kZXgpfHxnLmNhcnBldCkmJihzJiZzWzBdLnRyYWNlLnhheGlzK3NbMF0udHJhY2UueWF4aXM9PT1jJiYtMSE9PVsidG9uZXh0eCIsInRvbmV4dHkiLCJ0b25leHQiXS5pbmRleE9mKGcuZmlsbCkmJi0xPT09ZC5pbmRleE9mKHMpJiZkLnB1c2gocyksZC5wdXNoKHApKSxzPXApfWgoZSx1LGQscixuKX19LHIuY2xlYW49ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaSxvLGw9bi5fcGxvdHN8fHt9LHM9dC5fcGxvdHN8fHt9LHU9bi5fc3VicGxvdHN8fHt9O2lmKG4uX2hhc09ubHlMYXJnZVNwbG9tcyYmIXQuX2hhc09ubHlMYXJnZVNwbG9tcylmb3IobyBpbiBsKShhPWxbb10pLnBsb3Rncm91cCYmYS5wbG90Z3JvdXAucmVtb3ZlKCk7dmFyIGQ9bi5faGFzJiZuLl9oYXMoImdsIiksZj10Ll9oYXMmJnQuX2hhcygiZ2wiKTtpZihkJiYhZilmb3IobyBpbiBsKShhPWxbb10pLl9zY2VuZSYmYS5fc2NlbmUuZGVzdHJveSgpO2lmKHUueGF4aXMmJnUueWF4aXMpe3ZhciBwPWMubGlzdElkcyh7X2Z1bGxMYXlvdXQ6bn0pO2ZvcihpPTA7aTxwLmxlbmd0aDtpKyspe3ZhciBoPXBbaV07dFtjLmlkMm5hbWUoaCldfHxuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuZy0iK2grInRpdGxlIikucmVtb3ZlKCl9fXZhciBnPW4uX2hhcyYmbi5faGFzKCJjYXJ0ZXNpYW4iKSx5PXQuX2hhcyYmdC5faGFzKCJjYXJ0ZXNpYW4iKTtpZihnJiYheSltKG4uX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbCgiLnN1YnBsb3QiKSxuKSxuLl9kZWZzLnNlbGVjdEFsbCgiLmF4ZXNjbGlwIikucmVtb3ZlKCksZGVsZXRlIG4uX2F4aXNDb25zdHJhaW50R3JvdXBzLGRlbGV0ZSBuLl9heGlzTWF0Y2hHcm91cHM7ZWxzZSBpZih1LmNhcnRlc2lhbilmb3IoaT0wO2k8dS5jYXJ0ZXNpYW4ubGVuZ3RoO2krKyl7dmFyIHg9dS5jYXJ0ZXNpYW5baV07aWYoIXNbeF0pe3ZhciBiPSIuIit4KyIsLiIreCsiLXgsLiIreCsiLXkiO24uX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbChiKS5yZW1vdmUoKSx2KHgsbil9fX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxpLG8sbD1lLl9mdWxsTGF5b3V0LHM9bC5fc3VicGxvdHMuY2FydGVzaWFuLGM9cy5sZW5ndGgsdT1bXSxkPVtdO2Zvcih0PTA7dDxjO3QrKyl7bj1zW3RdLGE9bC5fcGxvdHNbbl0saT1hLnhheGlzLG89YS55YXhpczt2YXIgZj1pLl9tYWluQXhpcyxwPW8uX21haW5BeGlzLGg9Zi5faWQrcC5faWQsZz1sLl9wbG90c1toXTthLm92ZXJsYXlzPVtdLGghPT1uJiZnPyhhLm1haW5wbG90PWgsYS5tYWlucGxvdGluZm89ZyxkLnB1c2gobikpOihhLm1haW5wbG90PXZvaWQgMCxhLm1haW5wbG90aW5mbz12b2lkIDAsdS5wdXNoKG4pKX1mb3IodD0wO3Q8ZC5sZW5ndGg7dCsrKW49ZFt0XSwoYT1sLl9wbG90c1tuXSkubWFpbnBsb3RpbmZvLm92ZXJsYXlzLnB1c2goYSk7dmFyIG09dS5jb25jYXQoZCksdj1uZXcgQXJyYXkoYyk7Zm9yKHQ9MDt0PGM7dCsrKXtuPW1bdF0sYT1sLl9wbG90c1tuXSxpPWEueGF4aXMsbz1hLnlheGlzO3ZhciB5PVtuLGkubGF5ZXIsby5sYXllcixpLm92ZXJsYXlpbmd8fCIiLG8ub3ZlcmxheWluZ3x8IiJdO2ZvcihyPTA7cjxhLm92ZXJsYXlzLmxlbmd0aDtyKyspeS5wdXNoKGEub3ZlcmxheXNbcl0uaWQpO3ZbdF09eX1yZXR1cm4gdn0oZSksYT10Ll9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90IikuZGF0YShyLFN0cmluZyk7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24oZSl7cmV0dXJuInN1YnBsb3QgIitlWzBdfSkpLGEub3JkZXIoKSxhLmV4aXQoKS5jYWxsKG0sdCksYS5lYWNoKChmdW5jdGlvbihyKXt2YXIgYT1yWzBdLGk9dC5fcGxvdHNbYV07aS5wbG90Z3JvdXA9bi5zZWxlY3QodGhpcyksZyhlLGkpLGkuZHJhZ2xheWVyPWYodC5fZHJhZ2dlcnMsImciLGEpfSkpfSxyLnJhbmdlUGxvdD1mdW5jdGlvbihlLHQscil7ZyhlLHQpLGgoZSx0LHIpLG8uc3R5bGUoZSl9LHIudG9TVkc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dC5fZ2xpbWFnZXMscj1uLnNlbGVjdChlKS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIik7ci5maWx0ZXIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9PT1yLnNpemUoKS0xfSkpLnNlbGVjdEFsbCgiLmdsLWNhbnZhcy1jb250ZXh0LCAuZ2wtY2FudmFzLWZvY3VzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7dC5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmQuc3ZnLCJ4bGluazpocmVmIjplLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLHg6MCx5OjAsd2lkdGg6dGhpcy5zdHlsZS53aWR0aCxoZWlnaHQ6dGhpcy5zdHlsZS5oZWlnaHR9KX0pKX0sci51cGRhdGVGeD1lKCIuL2dyYXBoX2ludGVyYWN0IikudXBkYXRlRnh9LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjoxMjQsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjoyMTMsIi4uLy4uL2xpYiI6MjMyLCIuLi8uLi9yZWdpc3RyeSI6MzE4LCIuLi9nZXRfZGF0YSI6MzEyLCIuLi9wbG90cyI6MzE2LCIuL2F0dHJpYnV0ZXMiOjI3NywiLi9heGlzX2lkcyI6MjgzLCIuL2NvbnN0YW50cyI6Mjg2LCIuL2dyYXBoX2ludGVyYWN0IjoyODksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjI5NCwiLi9sYXlvdXRfZGVmYXVsdHMiOjI5NSwiLi90cmFuc2l0aW9uX2F4ZXMiOjMwNiwiQHBsb3RseS9kMyI6MTF9XSwyOTQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vZm9udF9hdHRyaWJ1dGVzIiksYT1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPWUoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LHM9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5kZXNjcmlwdGlvbldpdGhEYXRlcyxjPWUoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVEQVksdT1lKCIuL2NvbnN0YW50cyIpLGQ9dS5IT1VSX1BBVFRFUk4sZj11LldFRUtEQVlfUEFUVEVSTjt0LmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90In0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InRpY2tzIn0sZm9udDpuKHtlZGl0VHlwZToidGlja3MifSksc3RhbmRvZmY6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InRpY2tzIn0sZWRpdFR5cGU6InRpY2tzIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSIsIm11bHRpY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyIsX25vVGVtcGxhdGluZzohMH0sYXV0b3R5cGVudW1iZXJzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb252ZXJ0IHR5cGVzIiwic3RyaWN0Il0sZGZsdDoiY29udmVydCB0eXBlcyIsZWRpdFR5cGU6ImNhbGMifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsInJldmVyc2VkIl0sZGZsdDohMCxlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsicmFuZ2VbMF0iOnZvaWQgMCwicmFuZ2VbMV0iOnZvaWQgMH19LHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9ybWFsIiwidG96ZXJvIiwibm9ubmVnYXRpdmUiXSxkZmx0OiJub3JtYWwiLGVkaXRUeXBlOiJwbG90In0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9LGFuaW06ITB9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJheHJhbmdlIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX0sYW5pbTohMH1dLGVkaXRUeXBlOiJheHJhbmdlIixpbXBsaWVkRWRpdHM6e2F1dG9yYW5nZTohMX0sYW5pbTohMH0sZml4ZWRyYW5nZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHNjYWxlYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W3UuaWRSZWdleC54LnRvU3RyaW5nKCksdS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxzY2FsZXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGNvbnN0cmFpbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFuZ2UiLCJkb21haW4iXSxlZGl0VHlwZToicGxvdCJ9LGNvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6InBsb3QifSxtYXRjaGVzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W3UuaWRSZWdleC54LnRvU3RyaW5nKCksdS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSxyYW5nZWJyZWFrczpsKCJyYW5nZWJyZWFrIix7ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGJvdW5kczp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifV0sZWRpdFR5cGU6ImNhbGMifSxwYXR0ZXJuOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W2YsZCwiIl0sZWRpdFR5cGU6ImNhbGMifSx2YWx1ZXM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn19LGR2YWx1ZTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjAsZGZsdDpjfSxlZGl0VHlwZToiY2FsYyJ9KSx0aWNrbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxpbmVhciIsImFycmF5Il0sZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2swOnZvaWQgMCxkdGljazp2b2lkIDB9fSxudGlja3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToidGlja3MifSx0aWNrMDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MiLGltcGxpZWRFZGl0czp7dGlja21vZGU6ImxpbmVhciJ9fSxkdGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MiLGltcGxpZWRFZGl0czp7dGlja21vZGU6ImxpbmVhciJ9fSx0aWNrdmFsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvdXRzaWRlIiwiaW5zaWRlIiwiIl0sZWRpdFR5cGU6InRpY2tzIn0sdGlja3Nvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGFiZWxzIiwiYm91bmRhcmllcyJdLGRmbHQ6ImxhYmVscyIsZWRpdFR5cGU6InRpY2tzIn0sdGlja2xhYmVsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zdGFudCIsInBlcmlvZCJdLGRmbHQ6Imluc3RhbnQiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tsYWJlbHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvdXRzaWRlIiwiaW5zaWRlIiwib3V0c2lkZSB0b3AiLCJpbnNpZGUgdG9wIiwib3V0c2lkZSBsZWZ0IiwiaW5zaWRlIGxlZnQiLCJvdXRzaWRlIHJpZ2h0IiwiaW5zaWRlIHJpZ2h0Iiwib3V0c2lkZSBib3R0b20iLCJpbnNpZGUgYm90dG9tIl0sZGZsdDoib3V0c2lkZSIsZWRpdFR5cGU6ImNhbGMifSx0aWNrbGFiZWxvdmVyZmxvdzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsb3ciLCJoaWRlIHBhc3QgZGl2IiwiaGlkZSBwYXN0IGRvbWFpbiJdLGVkaXRUeXBlOiJjYWxjIn0sbWlycm9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCJ0aWNrcyIsITEsImFsbCIsImFsbHRpY2tzIl0sZGZsdDohMSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NSxlZGl0VHlwZToidGlja3MifSx0aWNrd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToidGlja3MifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxhdXRvbWFyZ2luOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3dzcGlrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6Im1vZGViYXIifSxzcGlrZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpudWxsLGVkaXRUeXBlOiJub25lIn0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozLGVkaXRUeXBlOiJub25lIn0sc3Bpa2VkYXNoOm8oe30saSx7ZGZsdDoiZGFzaCIsZWRpdFR5cGU6Im5vbmUifSksc3Bpa2Vtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJ0b2F4aXMiLCJhY3Jvc3MiLCJtYXJrZXIiXSxkZmx0OiJ0b2F4aXMiLGVkaXRUeXBlOiJub25lIn0sc3Bpa2VzbmFwOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJkYXRhIiwiY3Vyc29yIiwiaG92ZXJlZCBkYXRhIl0sZGZsdDoiaG92ZXJlZCBkYXRhIixlZGl0VHlwZToibm9uZSJ9LHRpY2tmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIixlZGl0VHlwZToidGlja3MifSx0aWNrcHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd2V4cG9uZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXSxkZmx0OiJCIixlZGl0VHlwZToidGlja3MifSxtaW5leHBvbmVudDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjMsbWluOjAsZWRpdFR5cGU6InRpY2tzIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzIn0sdGlja2Zvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJ0aWNrcyIsZGVzY3JpcHRpb246cygidGljayBsYWJlbCIpfSx0aWNrZm9ybWF0c3RvcHM6bCgidGlja2Zvcm1hdHN0b3AiLHtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJ0aWNrcyJ9LGR0aWNrcmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MifV0sZWRpdFR5cGU6InRpY2tzIn0sdmFsdWU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxlZGl0VHlwZToidGlja3MifSksaG92ZXJmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToibm9uZSIsZGVzY3JpcHRpb246cygiaG92ZXIgdGV4dCIpfSxzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmxpZ2h0TGluZSxlZGl0VHlwZToidGlja3MifSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5lOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSx6ZXJvbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3dkaXZpZGVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxkaXZpZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sZGl2aWRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSxhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLHUuaWRSZWdleC54LnRvU3RyaW5nKCksdS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LG92ZXJsYXlpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLHUuaWRSZWdleC54LnRvU3RyaW5nKCksdS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWJvdmUgdHJhY2VzIiwiYmVsb3cgdHJhY2VzIl0sZGZsdDoiYWJvdmUgdHJhY2VzIixlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifV0sZGZsdDpbMCwxXSxlZGl0VHlwZToicGxvdCJ9LHBvc2l0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGNhdGVnb3J5b3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRyYWNlIiwiY2F0ZWdvcnkgYXNjZW5kaW5nIiwiY2F0ZWdvcnkgZGVzY2VuZGluZyIsImFycmF5IiwidG90YWwgYXNjZW5kaW5nIiwidG90YWwgZGVzY2VuZGluZyIsIm1pbiBhc2NlbmRpbmciLCJtaW4gZGVzY2VuZGluZyIsIm1heCBhc2NlbmRpbmciLCJtYXggZGVzY2VuZGluZyIsInN1bSBhc2NlbmRpbmciLCJzdW0gZGVzY2VuZGluZyIsIm1lYW4gYXNjZW5kaW5nIiwibWVhbiBkZXNjZW5kaW5nIiwibWVkaWFuIGFzY2VuZGluZyIsIm1lZGlhbiBkZXNjZW5kaW5nIl0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJjYWxjIn0sY2F0ZWdvcnlhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOnthdXRvdGljazp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MTAxLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6MTIzLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjoyMTIsIi4uLy4uL2xpYi9leHRlbmQiOjIyNiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjY4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6MjgyLCIuLi9mb250X2F0dHJpYnV0ZXMiOjMxMCwiLi9jb25zdGFudHMiOjI4Nn1dLDI5NTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPWUoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmlzVW5pZmllZEhvdmVyLG89ZSgiLi4vLi4vY29tcG9uZW50cy9meC9ob3Zlcm1vZGVfZGVmYXVsdHMiKSxsPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxzPWUoIi4uL2xheW91dF9hdHRyaWJ1dGVzIiksYz1lKCIuL2xheW91dF9hdHRyaWJ1dGVzIiksdT1lKCIuL3R5cGVfZGVmYXVsdHMiKSxkPWUoIi4vYXhpc19kZWZhdWx0cyIpLGY9ZSgiLi9jb25zdHJhaW50cyIpLHA9ZSgiLi9wb3NpdGlvbl9kZWZhdWx0cyIpLGg9ZSgiLi9heGlzX2lkcyIpLGc9aC5pZDJuYW1lLG09aC5uYW1lMmlkLHY9ZSgiLi9jb25zdGFudHMiKS5BWF9JRF9QQVRURVJOLHk9ZSgiLi4vLi4vcmVnaXN0cnkiKSx4PXkudHJhY2VJcyxiPXkuZ2V0Q29tcG9uZW50TWV0aG9kO2Z1bmN0aW9uIF8oZSx0LHIpe0FycmF5LmlzQXJyYXkoZVt0XSk/ZVt0XS5wdXNoKHIpOmVbdF09W3JdfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIHksdyxUPXQuYXV0b3R5cGVudW1iZXJzLE09e30saz17fSxBPXt9LEw9e30sUz17fSxEPXt9LEM9e30sTz17fSxQPXt9LEk9e307Zm9yKHk9MDt5PHIubGVuZ3RoO3krKyl7dmFyIFI9clt5XTtpZih4KFIsImNhcnRlc2lhbiIpfHx4KFIsImdsMmQiKSl7dmFyIHosTjtpZihSLnhheGlzKXo9ZyhSLnhheGlzKSxfKE0seixSKTtlbHNlIGlmKFIueGF4ZXMpZm9yKHc9MDt3PFIueGF4ZXMubGVuZ3RoO3crKylfKE0sZyhSLnhheGVzW3ddKSxSKTtpZihSLnlheGlzKU49ZyhSLnlheGlzKSxfKE0sTixSKTtlbHNlIGlmKFIueWF4ZXMpZm9yKHc9MDt3PFIueWF4ZXMubGVuZ3RoO3crKylfKE0sZyhSLnlheGVzW3ddKSxSKTtpZigiZnVubmVsIj09PVIudHlwZT8iaCI9PT1SLm9yaWVudGF0aW9uPyh6JiYoa1t6XT0hMCksTiYmKENbTl09ITApKTpOJiYoQVtOXT0hMCk6ImltYWdlIj09PVIudHlwZT8oTiYmKE9bTl09ITApLHomJihPW3pdPSEwKSk6KE4mJihTW05dPSEwLERbTl09ITApLHgoUiwiY2FycGV0IikmJigiY2FycGV0IiE9PVIudHlwZXx8Ui5fY2hlYXRlcil8fHomJihMW3pdPSEwKSksImNhcnBldCI9PT1SLnR5cGUmJlIuX2NoZWF0ZXImJnomJihrW3pdPSEwKSx4KFIsIjJkTWFwIikmJihQW3pdPSEwLFBbTl09ITApLHgoUiwib3JpZW50ZWQiKSlJWyJoIj09PVIub3JpZW50YXRpb24/Tjp6XT0hMH19dmFyIEY9dC5fc3VicGxvdHMsRT1GLnhheGlzLGo9Ri55YXhpcyxIPW4uc2ltcGxlTWFwKEUsZyksQj1uLnNpbXBsZU1hcChqLGcpLFk9SC5jb25jYXQoQiksVj1hLmJhY2tncm91bmQ7RS5sZW5ndGgmJmoubGVuZ3RoJiYoVj1uLmNvZXJjZShlLHQscywicGxvdF9iZ2NvbG9yIikpO3ZhciBVLHEsRyxaLFcsWD1hLmNvbWJpbmUoVix0LnBhcGVyX2JnY29sb3IpO2Z1bmN0aW9uIEooKXt2YXIgZT1NW1VdfHxbXTtXLl90cmFjZUluZGljZXM9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLl9leHBhbmRlZEluZGV4fSkpLFcuX2FubkluZGljZXM9W10sVy5fc2hhcGVJbmRpY2VzPVtdLFcuX2ltZ0luZGljZXM9W10sVy5fc3VicGxvdHNXaXRoPVtdLFcuX2NvdW50ZXJBeGVzPVtdLFcuX25hbWU9Vy5fYXR0cj1VLFcuX2lkPXF9ZnVuY3Rpb24gUShlLHQpe3JldHVybiBuLmNvZXJjZShaLFcsYyxlLHQpfWZ1bmN0aW9uIEsoZSx0KXtyZXR1cm4gbi5jb2VyY2UyKFosVyxjLGUsdCl9ZnVuY3Rpb24gJChlKXtyZXR1cm4ieCI9PT1lP2o6RX1mdW5jdGlvbiBlZSh0LHIpe2Zvcih2YXIgbj0ieCI9PT10P0g6QixhPVtdLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXTtvPT09cnx8KGVbb118fHt9KS5vdmVybGF5aW5nfHxhLnB1c2gobShvKSl9cmV0dXJuIGF9dmFyIHRlPXt4OiQoIngiKSx5OiQoInkiKX0scmU9dGUueC5jb25jYXQodGUueSksbmU9e30sYWU9W107ZnVuY3Rpb24gaWUoKXt2YXIgZT1aLm1hdGNoZXM7di50ZXN0KGUpJiYtMT09PXJlLmluZGV4T2YoZSkmJihuZVtlXT1aLnR5cGUsYWU9T2JqZWN0LmtleXMobmUpKX12YXIgb2U9byhlLHQpLGxlPWkob2UpO2Zvcih5PTA7eTxZLmxlbmd0aDt5Kyspe1U9WVt5XSxxPW0oVSksRz1VLmNoYXJBdCgwKSxuLmlzUGxhaW5PYmplY3QoZVtVXSl8fChlW1VdPXt9KSxaPWVbVV0sVz1sLm5ld0NvbnRhaW5lcih0LFUsRysiYXhpcyIpLEooKTt2YXIgc2U9IngiPT09RyYmIUxbVV0mJmtbVV18fCJ5Ij09PUcmJiFTW1VdJiZBW1VdLGNlPSJ5Ij09PUcmJighRFtVXSYmQ1tVXXx8T1tVXSksdWU9e2xldHRlcjpHLGZvbnQ6dC5mb250LG91dGVyVGlja3M6UFtVXSxzaG93R3JpZDohSVtVXSxkYXRhOk1bVV18fFtdLGJnQ29sb3I6WCxjYWxlbmRhcjp0LmNhbGVuZGFyLGF1dG9tYXJnaW46ITAsdmlzaWJsZURmbHQ6c2UscmV2ZXJzZURmbHQ6Y2UsYXV0b3R5cGVudW1iZXJzRGZsdDpULHNwbG9tU3Rhc2g6KCh0Ll9zcGxvbUF4ZXN8fHt9KVtHXXx8e30pW3FdfTtRKCJ1aXJldmlzaW9uIix0LnVpcmV2aXNpb24pLHUoWixXLFEsdWUpLGQoWixXLFEsdWUsdCk7dmFyIGRlPWxlJiZHPT09b2UuY2hhckF0KDApLGZlPUsoInNwaWtlY29sb3IiLGxlP1cuY29sb3I6dm9pZCAwKSxwZT1LKCJzcGlrZXRoaWNrbmVzcyIsbGU/MS41OnZvaWQgMCksaGU9Sygic3Bpa2VkYXNoIixsZT8iZG90Ijp2b2lkIDApLGdlPUsoInNwaWtlbW9kZSIsbGU/ImFjcm9zcyI6dm9pZCAwKSxtZT1LKCJzcGlrZXNuYXAiKTtRKCJzaG93c3Bpa2VzIiwhIShkZXx8ZmV8fHBlfHxoZXx8Z2V8fG1lKSl8fChkZWxldGUgVy5zcGlrZWNvbG9yLGRlbGV0ZSBXLnNwaWtldGhpY2tuZXNzLGRlbGV0ZSBXLnNwaWtlZGFzaCxkZWxldGUgVy5zcGlrZW1vZGUsZGVsZXRlIFcuc3Bpa2VzbmFwKSxwKFosVyxRLHtsZXR0ZXI6Ryxjb3VudGVyQXhlczp0ZVtHXSxvdmVybGF5YWJsZUF4ZXM6ZWUoRyxVKSxncmlkOnQuZ3JpZH0pLFEoInRpdGxlLnN0YW5kb2ZmIiksaWUoKSxXLl9pbnB1dD1afWZvcih5PTA7eTxhZS5sZW5ndGg7KXtxPWFlW3krK10sRz0oVT1nKHEpKS5jaGFyQXQoMCksbi5pc1BsYWluT2JqZWN0KGVbVV0pfHwoZVtVXT17fSksWj1lW1VdLFc9bC5uZXdDb250YWluZXIodCxVLEcrImF4aXMiKSxKKCk7dmFyIHZlPXtsZXR0ZXI6Ryxmb250OnQuZm9udCxvdXRlclRpY2tzOlBbVV0sc2hvd0dyaWQ6IUlbVV0sZGF0YTpbXSxiZ0NvbG9yOlgsY2FsZW5kYXI6dC5jYWxlbmRhcixhdXRvbWFyZ2luOiEwLHZpc2libGVEZmx0OiExLHJldmVyc2VEZmx0OiExLGF1dG90eXBlbnVtYmVyc0RmbHQ6VCxzcGxvbVN0YXNoOigodC5fc3Bsb21BeGVzfHx7fSlbR118fHt9KVtxXX07USgidWlyZXZpc2lvbiIsdC51aXJldmlzaW9uKSxXLnR5cGU9bmVbcV18fCJsaW5lYXIiLGQoWixXLFEsdmUsdCkscChaLFcsUSx7bGV0dGVyOkcsY291bnRlckF4ZXM6dGVbR10sb3ZlcmxheWFibGVBeGVzOmVlKEcsVSksZ3JpZDp0LmdyaWR9KSxRKCJmaXhlZHJhbmdlIiksaWUoKSxXLl9pbnB1dD1afXZhciB5ZT1iKCJyYW5nZXNsaWRlciIsImhhbmRsZURlZmF1bHRzIikseGU9YigicmFuZ2VzZWxlY3RvciIsImhhbmRsZURlZmF1bHRzIik7Zm9yKHk9MDt5PEgubGVuZ3RoO3krKylVPUhbeV0sWj1lW1VdLFc9dFtVXSx5ZShlLHQsVSksImRhdGUiPT09Vy50eXBlJiZ4ZShaLFcsdCxCLFcuY2FsZW5kYXIpLFEoImZpeGVkcmFuZ2UiKTtmb3IoeT0wO3k8Qi5sZW5ndGg7eSsrKXtVPUJbeV0sWj1lW1VdLFc9dFtVXTt2YXIgYmU9dFtnKFcuYW5jaG9yKV07USgiZml4ZWRyYW5nZSIsYigicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShiZSkpfWYuaGFuZGxlRGVmYXVsdHMoZSx0LHtheElkczpyZS5jb25jYXQoYWUpLnNvcnQoaC5pZFNvcnQpLGF4SGFzSW1hZ2U6T30pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjoxMDIsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6MTM4LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybW9kZV9kZWZhdWx0cyI6MTQxLCIuLi8uLi9saWIiOjIzMiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjY4LCIuLi8uLi9yZWdpc3RyeSI6MzE4LCIuLi9sYXlvdXRfYXR0cmlidXRlcyI6MzE0LCIuL2F4aXNfZGVmYXVsdHMiOjI4MSwiLi9heGlzX2lkcyI6MjgzLCIuL2NvbnN0YW50cyI6Mjg2LCIuL2NvbnN0cmFpbnRzIjoyODcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjI5NCwiLi9wb3NpdGlvbl9kZWZhdWx0cyI6Mjk3LCIuL3R5cGVfZGVmYXVsdHMiOjMwN31dLDI5NjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJ0aW55Y29sb3IyIikubWl4LGE9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikubGlnaHRGcmFjdGlvbixpPWUoIi4uLy4uL2xpYiIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixvKXt2YXIgbD0obz1vfHx7fSkuZGZsdENvbG9yO2Z1bmN0aW9uIHMocixuKXtyZXR1cm4gaS5jb2VyY2UyKGUsdCxvLmF0dHJpYnV0ZXMscixuKX12YXIgYz1zKCJsaW5lY29sb3IiLGwpLHU9cygibGluZXdpZHRoIik7cigic2hvd2xpbmUiLG8uc2hvd0xpbmV8fCEhY3x8ISF1KXx8KGRlbGV0ZSB0LmxpbmVjb2xvcixkZWxldGUgdC5saW5ld2lkdGgpO3ZhciBkPXMoImdyaWRjb2xvciIsbihsLG8uYmdDb2xvcixvLmJsZW5kfHxhKS50b1JnYlN0cmluZygpKSxmPXMoImdyaWR3aWR0aCIpO2lmKHIoInNob3dncmlkIixvLnNob3dHcmlkfHwhIWR8fCEhZil8fChkZWxldGUgdC5ncmlkY29sb3IsZGVsZXRlIHQuZ3JpZHdpZHRoKSwhby5ub1plcm9MaW5lKXt2YXIgcD1zKCJ6ZXJvbGluZWNvbG9yIixsKSxoPXMoInplcm9saW5ld2lkdGgiKTtyKCJ6ZXJvbGluZSIsby5zaG93R3JpZHx8ISFwfHwhIWgpfHwoZGVsZXRlIHQuemVyb2xpbmVjb2xvcixkZWxldGUgdC56ZXJvbGluZXdpZHRoKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MTAxLCIuLi8uLi9saWIiOjIzMix0aW55Y29sb3IyOjY3fV0sMjk3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuLi8uLi9saWIiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG8sbCxzLGMsdT1pLmNvdW50ZXJBeGVzfHxbXSxkPWkub3ZlcmxheWFibGVBeGVzfHxbXSxmPWkubGV0dGVyLHA9aS5ncmlkO3AmJihsPXAuX2RvbWFpbnNbZl1bcC5fYXhpc01hcFt0Ll9pZF1dLG89cC5fYW5jaG9yc1t0Ll9pZF0sbCYmKHM9cFtmKyJzaWRlIl0uc3BsaXQoIiAiKVswXSxjPXAuZG9tYWluW2ZdWyJyaWdodCI9PT1zfHwidG9wIj09PXM/MTowXSkpLGw9bHx8WzAsMV0sbz1vfHwobihlLnBvc2l0aW9uKT8iZnJlZSI6dVswXXx8ImZyZWUiKSxzPXN8fCgieCI9PT1mPyJib3R0b20iOiJsZWZ0IiksYz1jfHwwLCJmcmVlIj09PWEuY29lcmNlKGUsdCx7YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmVlIl0uY29uY2F0KHUpLGRmbHQ6b319LCJhbmNob3IiKSYmcigicG9zaXRpb24iLGMpLGEuY29lcmNlKGUsdCx7c2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOiJ4Ij09PWY/WyJib3R0b20iLCJ0b3AiXTpbImxlZnQiLCJyaWdodCJdLGRmbHQ6c319LCJzaWRlIik7dmFyIGg9ITE7aWYoZC5sZW5ndGgmJihoPWEuY29lcmNlKGUsdCx7b3ZlcmxheWluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMV0uY29uY2F0KGQpLGRmbHQ6ITF9fSwib3ZlcmxheWluZyIpKSwhaCl7dmFyIGc9cigiZG9tYWluIixsKTtnWzBdPmdbMV0tMS80MDk2JiYodC5kb21haW49bCksYS5ub25lT3JBbGwoZS5kb21haW4sdC5kb21haW4sbCl9cmV0dXJuIHIoImxheWVyIiksdH19LHsiLi4vLi4vbGliIjoyMzIsImZhc3QtaXNudW1lcmljIjoxN31dLDI5ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL3Nob3dfZGZsdCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixhLGkpe2l8fChpPXt9KTt2YXIgbz1pLnRpY2tTdWZmaXhEZmx0LGw9bihlKTtyKCJ0aWNrcHJlZml4IikmJnIoInNob3d0aWNrcHJlZml4IixsKSxyKCJ0aWNrc3VmZml4IixvKSYmcigic2hvd3RpY2tzdWZmaXgiLGwpfX0seyIuL3Nob3dfZGZsdCI6MzAyfV0sMjk5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX0JMO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dm9pZCAwPT09ciYmKHI9bltlLmNvbnN0cmFpbnRvd2FyZHx8ImNlbnRlciJdKTt2YXIgYT1bZS5yMmwoZS5yYW5nZVswXSksZS5yMmwoZS5yYW5nZVsxXSldLGk9YVswXSsoYVsxXS1hWzBdKSpyO2UucmFuZ2U9ZS5faW5wdXQucmFuZ2U9W2UubDJyKGkrKGFbMF0taSkqdCksZS5sMnIoaSsoYVsxXS1pKSp0KV0sZS5zZXRTY2FsZSgpfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IjoyMDd9XSwzMDA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgicG9seWJvb2xqcyIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLmRhc2hTdHlsZSxvPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxsPWUoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxzPWUoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLm1ha2VFdmVudERhdGEsYz1lKCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKSx1PWMuZnJlZU1vZGUsZD1jLnJlY3RNb2RlLGY9Yy5kcmF3TW9kZSxwPWMub3Blbk1vZGUsaD1jLnNlbGVjdE1vZGUsZz1lKCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2Rpc3BsYXlfb3V0bGluZXMiKSxtPWUoIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvaGVscGVycyIpLmhhbmRsZUVsbGlwc2Usdj1lKCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL25ld3NoYXBlcyIpLHk9ZSgiLi4vLi4vbGliIikseD1lKCIuLi8uLi9saWIvcG9seWdvbiIpLGI9ZSgiLi4vLi4vbGliL3Rocm90dGxlIiksXz1lKCIuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLHc9ZSgiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksVD1lKCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyIpLnJlZHJhd1JlZ2xUcmFjZXMsTT1lKCIuL2NvbnN0YW50cyIpLGs9TS5NSU5TRUxFQ1QsQT14LmZpbHRlcixMPXgudGVzdGVyLFM9ZSgiLi9oYW5kbGVfb3V0bGluZSIpLmNsZWFyU2VsZWN0LEQ9ZSgiLi9oZWxwZXJzIiksQz1ELnAycixPPUQuYXhWYWx1ZSxQPUQuZ2V0VHJhbnNmb3JtO2Z1bmN0aW9uIEkoZSx0LHIsbixhLGksbyl7dmFyIGwscyxjLHUsZCxmLGgsbSx2LHk9dC5faG92ZXJkYXRhLHg9dC5fZnVsbExheW91dC5jbGlja21vZGUuaW5kZXhPZigiZXZlbnQiKT4tMSxiPVtdO2lmKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZBcnJheS5pc0FycmF5KGUpJiYhMCE9PWVbMF0uaG92ZXJPbkJveH0oeSkpe0YoZSx0LGkpO3ZhciBfPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhPWVbMF0saT0tMSxvPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYocj10W25dLGEuZnVsbERhdGEuX2V4cGFuZGVkSW5kZXg9PT1yLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4KXtpZighMD09PWEuaG92ZXJPbkJveClicmVhazt2b2lkIDAhPT1hLnBvaW50TnVtYmVyP2k9YS5wb2ludE51bWJlcjp2b2lkIDAhPT1hLmJpbk51bWJlciYmKGk9YS5iaW5OdW1iZXIsbz1hLnBvaW50TnVtYmVycyk7YnJlYWt9cmV0dXJue3BvaW50TnVtYmVyOmkscG9pbnROdW1iZXJzOm8sc2VhcmNoSW5mbzpyfX0oeSxsPWoodCxyLG4sYSkpO2lmKF8ucG9pbnROdW1iZXJzLmxlbmd0aD4wP2Z1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9W107Zm9yKGE9MDthPGUubGVuZ3RoO2ErKykocj1lW2FdKS5jZFswXS50cmFjZS5zZWxlY3RlZHBvaW50cyYmci5jZFswXS50cmFjZS5zZWxlY3RlZHBvaW50cy5sZW5ndGg+MCYmaS5wdXNoKHIpO2lmKDE9PT1pLmxlbmd0aCYmaVswXT09PXQuc2VhcmNoSW5mbyYmKG49dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cy5sZW5ndGg9PT10LnBvaW50TnVtYmVycy5sZW5ndGgpe2ZvcihhPTA7YTx0LnBvaW50TnVtYmVycy5sZW5ndGg7YSsrKWlmKG4uc2VsZWN0ZWRwb2ludHMuaW5kZXhPZih0LnBvaW50TnVtYmVyc1thXSk8MClyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0obCxfKTpmdW5jdGlvbihlKXt2YXIgdCxyLG4sYT0wO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYodD1lW25dLChyPXQuY2RbMF0udHJhY2UpLnNlbGVjdGVkcG9pbnRzKXtpZihyLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD4xKXJldHVybiExO2lmKChhKz1yLnNlbGVjdGVkcG9pbnRzLmxlbmd0aCk+MSlyZXR1cm4hMX1yZXR1cm4gMT09PWF9KGwpJiYoZj1IKF8pKSl7Zm9yKG8mJm8ucmVtb3ZlKCksdj0wO3Y8bC5sZW5ndGg7disrKShzPWxbdl0pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKHMsITEpO0IodCxsKSxFKGkpLHgmJnQuZW1pdCgicGxvdGx5X2Rlc2VsZWN0IixudWxsKX1lbHNle2ZvcihoPWUuc2hpZnRLZXkmJih2b2lkIDAhPT1mP2Y6SChfKSksYz1mdW5jdGlvbihlLHQscil7cmV0dXJue3BvaW50TnVtYmVyOmUsc2VhcmNoSW5mbzp0LHN1YnRyYWN0OnJ9fShfLnBvaW50TnVtYmVyLF8uc2VhcmNoSW5mbyxoKSx1PU4oaS5zZWxlY3Rpb25EZWZzLmNvbmNhdChbY10pKSx2PTA7djxsLmxlbmd0aDt2KyspaWYoZD1ZKGxbdl0uX21vZHVsZS5zZWxlY3RQb2ludHMobFt2XSx1KSxsW3ZdKSxiLmxlbmd0aClmb3IodmFyIHc9MDt3PGQubGVuZ3RoO3crKyliLnB1c2goZFt3XSk7ZWxzZSBiPWQ7aWYoQih0LGwsbT17cG9pbnRzOmJ9KSxjJiZpJiZpLnNlbGVjdGlvbkRlZnMucHVzaChjKSxvKXt2YXIgVD1pLm1lcmdlZFBvbHlnb25zLE09cChpLmRyYWdtb2RlKTtnKFYoVCxNKSxvLGkpfXgmJnQuZW1pdCgicGxvdGx5X3NlbGVjdGVkIixtKX19fWZ1bmN0aW9uIFIoZSl7cmV0dXJuInBvaW50TnVtYmVyImluIGUmJiJzZWFyY2hJbmZvImluIGV9ZnVuY3Rpb24geihlKXtyZXR1cm57eG1pbjowLHhtYXg6MCx5bWluOjAseW1heDowLHB0czpbXSxjb250YWluczpmdW5jdGlvbih0LHIsbixhKXt2YXIgaT1lLnNlYXJjaEluZm8uY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXg7cmV0dXJuIGEuY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXg9PT1pJiZuPT09ZS5wb2ludE51bWJlcn0saXNSZWN0OiExLGRlZ2VuZXJhdGU6ITEsc3VidHJhY3Q6ZS5zdWJ0cmFjdH19ZnVuY3Rpb24gTihlKXtmb3IodmFyIHQ9W10scj1SKGVbMF0pPzA6ZVswXVswXVswXSxuPXIsYT1SKGVbMF0pPzA6ZVswXVswXVsxXSxpPWEsbz0wO288ZS5sZW5ndGg7bysrKWlmKFIoZVtvXSkpdC5wdXNoKHooZVtvXSkpO2Vsc2V7dmFyIGw9eC50ZXN0ZXIoZVtvXSk7bC5zdWJ0cmFjdD1lW29dLnN1YnRyYWN0LHQucHVzaChsKSxyPU1hdGgubWluKHIsbC54bWluKSxuPU1hdGgubWF4KG4sbC54bWF4KSxhPU1hdGgubWluKGEsbC55bWluKSxpPU1hdGgubWF4KGksbC55bWF4KX1yZXR1cm57eG1pbjpyLHhtYXg6bix5bWluOmEseW1heDppLHB0czpbXSxjb250YWluczpmdW5jdGlvbihlLHIsbixhKXtmb3IodmFyIGk9ITEsbz0wO288dC5sZW5ndGg7bysrKXRbb10uY29udGFpbnMoZSxyLG4sYSkmJihpPSExPT09dFtvXS5zdWJ0cmFjdCk7cmV0dXJuIGl9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExfX1mdW5jdGlvbiBGKGUsdCxyKXt0Ll9mdWxsTGF5b3V0Ll9kcmF3aW5nPSExO3ZhciBuPXQuX2Z1bGxMYXlvdXQsYT1yLnBsb3RpbmZvLGk9ci5kcmFnbW9kZSxvPW4uX2xhc3RTZWxlY3RlZFN1YnBsb3QmJm4uX2xhc3RTZWxlY3RlZFN1YnBsb3Q9PT1hLmlkLGw9KGUuc2hpZnRLZXl8fGUuYWx0S2V5KSYmIShmKGkpJiZwKGkpKTtvJiZsJiZhLnNlbGVjdGlvbiYmYS5zZWxlY3Rpb24uc2VsZWN0aW9uRGVmcyYmIXIuc2VsZWN0aW9uRGVmcz8oci5zZWxlY3Rpb25EZWZzPWEuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnMsci5tZXJnZWRQb2x5Z29ucz1hLnNlbGVjdGlvbi5tZXJnZWRQb2x5Z29ucyk6bCYmYS5zZWxlY3Rpb258fEUociksb3x8KFModCksbi5fbGFzdFNlbGVjdGVkU3VicGxvdD1hLmlkKX1mdW5jdGlvbiBFKGUpe3ZhciB0PWUuZHJhZ21vZGUscj1lLnBsb3RpbmZvLG49ZS5nZDtpZihuLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wJiZuLl9mdWxsTGF5b3V0Ll9kZWFjdGl2YXRlU2hhcGUobiksZih0KSl7dmFyIGk9bi5fZnVsbExheW91dC5fem9vbWxheWVyLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lLSIrci5pZCk7aWYoaSYmbi5fZnVsbExheW91dC5fZHJhd2luZyl7dmFyIG89dihpLGUpO28mJmEuY2FsbCgiX2d1aVJlbGF5b3V0IixuLHtzaGFwZXM6b30pLG4uX2Z1bGxMYXlvdXQuX2RyYXdpbmc9ITF9fXIuc2VsZWN0aW9uPXt9LHIuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnM9ZS5zZWxlY3Rpb25EZWZzPVtdLHIuc2VsZWN0aW9uLm1lcmdlZFBvbHlnb25zPWUubWVyZ2VkUG9seWdvbnM9W119ZnVuY3Rpb24gaihlLHQscixuKXt2YXIgYSxpLG8sbD1bXSxzPXQubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5faWR9KSksYz1yLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2lkfSkpO2ZvcihvPTA7bzxlLmNhbGNkYXRhLmxlbmd0aDtvKyspaWYoITA9PT0oaT0oYT1lLmNhbGNkYXRhW29dKVswXS50cmFjZSkudmlzaWJsZSYmaS5fbW9kdWxlJiZpLl9tb2R1bGUuc2VsZWN0UG9pbnRzKWlmKCFufHxpLnN1YnBsb3QhPT1uJiZpLmdlbyE9PW4paWYoInNwbG9tIj09PWkudHlwZSYmaS5feGF4ZXNbc1swXV0mJmkuX3lheGVzW2NbMF1dKXt2YXIgdT1mKGkuX21vZHVsZSxhLHRbMF0sclswXSk7dS5zY2VuZT1lLl9mdWxsTGF5b3V0Ll9zcGxvbVNjZW5lc1tpLnVpZF0sbC5wdXNoKHUpfWVsc2UgaWYoInNhbmtleSI9PT1pLnR5cGUpe3ZhciBkPWYoaS5fbW9kdWxlLGEsdFswXSxyWzBdKTtsLnB1c2goZCl9ZWxzZXtpZigtMT09PXMuaW5kZXhPZihpLnhheGlzKSljb250aW51ZTtpZigtMT09PWMuaW5kZXhPZihpLnlheGlzKSljb250aW51ZTtsLnB1c2goZihpLl9tb2R1bGUsYSxfKGUsaS54YXhpcyksXyhlLGkueWF4aXMpKSl9ZWxzZSBsLnB1c2goZihpLl9tb2R1bGUsYSx0WzBdLHJbMF0pKTtyZXR1cm4gbDtmdW5jdGlvbiBmKGUsdCxyLG4pe3JldHVybntfbW9kdWxlOmUsY2Q6dCx4YXhpczpyLHlheGlzOm59fX1mdW5jdGlvbiBIKGUpe3ZhciB0PWUuc2VhcmNoSW5mby5jZFswXS50cmFjZSxyPWUucG9pbnROdW1iZXIsbj1lLnBvaW50TnVtYmVycyxhPW4ubGVuZ3RoPjA/blswXTpyO3JldHVybiEhdC5zZWxlY3RlZHBvaW50cyYmdC5zZWxlY3RlZHBvaW50cy5pbmRleE9mKGEpPi0xfWZ1bmN0aW9uIEIoZSx0LHIpe3ZhciBuLGksbyxsO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBzPXRbbl0uY2RbMF0udHJhY2UuX2Z1bGxJbnB1dCxjPWUuX2Z1bGxMYXlvdXQuX3RyYWNlUHJlR1VJW3MudWlkXXx8e307dm9pZCAwPT09Yy5zZWxlY3RlZHBvaW50cyYmKGMuc2VsZWN0ZWRwb2ludHM9cy5faW5wdXQuc2VsZWN0ZWRwb2ludHN8fG51bGwpfWlmKHIpe3ZhciB1PXIucG9pbnRzfHxbXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKShsPXRbbl0uY2RbMF0udHJhY2UpLl9pbnB1dC5zZWxlY3RlZHBvaW50cz1sLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM9W10sbC5fZnVsbElucHV0IT09bCYmKGwuc2VsZWN0ZWRwb2ludHM9W10pO2ZvcihuPTA7bjx1Lmxlbmd0aDtuKyspe3ZhciBkPXVbbl0sZj1kLmRhdGEscD1kLmZ1bGxEYXRhO2QucG9pbnRJbmRpY2VzPyhbXS5wdXNoLmFwcGx5KGYuc2VsZWN0ZWRwb2ludHMsZC5wb2ludEluZGljZXMpLGwuX2Z1bGxJbnB1dCE9PWwmJltdLnB1c2guYXBwbHkocC5zZWxlY3RlZHBvaW50cyxkLnBvaW50SW5kaWNlcykpOihmLnNlbGVjdGVkcG9pbnRzLnB1c2goZC5wb2ludEluZGV4KSxsLl9mdWxsSW5wdXQhPT1sJiZwLnNlbGVjdGVkcG9pbnRzLnB1c2goZC5wb2ludEluZGV4KSl9fWVsc2UgZm9yKG49MDtuPHQubGVuZ3RoO24rKylkZWxldGUobD10W25dLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cyxkZWxldGUgbC5faW5wdXQuc2VsZWN0ZWRwb2ludHMsbC5fZnVsbElucHV0IT09bCYmZGVsZXRlIGwuX2Z1bGxJbnB1dC5zZWxlY3RlZHBvaW50czt2YXIgaD0hMTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXtsPShvPShpPXRbbl0pLmNkKVswXS50cmFjZSxhLnRyYWNlSXMobCwicmVnbCIpJiYoaD0hMCk7dmFyIGc9aS5fbW9kdWxlLG09Zy5zdHlsZU9uU2VsZWN0fHxnLnN0eWxlO20mJihtKGUsbyxvWzBdLm5vZGUzKSxvWzBdLm5vZGVSYW5nZVBsb3QzJiZtKGUsbyxvWzBdLm5vZGVSYW5nZVBsb3QzKSl9aCYmKHcoZSksVChlKSl9ZnVuY3Rpb24gWShlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciByPXQuY2Qsbj10LmNkWzBdLnRyYWNlLGE9MDthPGUubGVuZ3RoO2ErKyllW2FdPXMoZVthXSxuLHIpO3JldHVybiBlfWZ1bmN0aW9uIFYoZSx0KXtmb3IodmFyIHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXtyW25dPVtdO2Zvcih2YXIgYT0wO2E8ZVtuXS5sZW5ndGg7YSsrKXtyW25dW2FdPVtdLHJbbl1bYV1bMF09YT8iTCI6Ik0iO2Zvcih2YXIgaT0wO2k8ZVtuXVthXS5sZW5ndGg7aSsrKXJbbl1bYV0ucHVzaChlW25dW2FdW2ldKX10fHxyW25dLnB1c2goWyJaIixyW25dWzBdWzFdLHJbbl1bMF1bMl1dKX1yZXR1cm4gcn10LmV4cG9ydHM9e3ByZXBTZWxlY3Q6ZnVuY3Rpb24oZSx0LHIsYSxzKXt2YXIgYz11KHMpLHY9ZChzKSx4PXAocyksXz1mKHMpLHc9aChzKSxUPSJkcmF3Y2lyY2xlIj09PXMsUz0iZHJhd2xpbmUiPT09c3x8VCxEPWEuZ2QsUj1ELl9mdWxsTGF5b3V0LHo9Ui5fem9vbWxheWVyLEg9YS5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFU9YS5wbG90aW5mbyxxPVAoVSksRz10LUgubGVmdCxaPXItSC50b3A7Ui5fY2FsY0ludmVyc2VUcmFuc2Zvcm0oRCk7dmFyIFc9eS5hcHBseTNEVHJhbnNmb3JtKFIuX2ludlRyYW5zZm9ybSkoRyxaKTtHPVdbMF0sWj1XWzFdO3ZhciBYLEosUSxLLCQsZWUsdGUscmU9Ui5faW52U2NhbGVYLG5lPVIuX2ludlNjYWxlWSxhZT1HLGllPVosb2U9Ik0iK0crIiwiK1osbGU9YS54YXhlc1swXS5fbGVuZ3RoLHNlPWEueWF4ZXNbMF0uX2xlbmd0aCxjZT1hLnhheGVzLmNvbmNhdChhLnlheGVzKSx1ZT1lLmFsdEtleSYmIShmKHMpJiZ4KTtGKGUsRCxhKSxjJiYoWD1BKFtbRyxaXV0sTS5CRU5EUFgpKTt2YXIgZGU9ei5zZWxlY3RBbGwoInBhdGguc2VsZWN0LW91dGxpbmUtIitVLmlkKS5kYXRhKF8/WzBdOlsxLDJdKSxmZT1SLm5ld3NoYXBlO2RlLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbihlKXtyZXR1cm4ic2VsZWN0LW91dGxpbmUgc2VsZWN0LW91dGxpbmUtIitlKyIgc2VsZWN0LW91dGxpbmUtIitVLmlkfSkpLnN0eWxlKF8/e29wYWNpdHk6ZmUub3BhY2l0eS8yLGZpbGw6eD92b2lkIDA6ZmUuZmlsbGNvbG9yLHN0cm9rZTpmZS5saW5lLmNvbG9yLCJzdHJva2UtZGFzaGFycmF5IjppKGZlLmxpbmUuZGFzaCxmZS5saW5lLndpZHRoKSwic3Ryb2tlLXdpZHRoIjpmZS5saW5lLndpZHRoKyJweCJ9Ont9KS5hdHRyKCJmaWxsLXJ1bGUiLGZlLmZpbGxydWxlKS5jbGFzc2VkKCJjdXJzb3ItbW92ZSIsISFfKS5hdHRyKCJ0cmFuc2Zvcm0iLHEpLmF0dHIoImQiLG9lKyJaIik7dmFyIHBlLGhlPXouYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94LWNvcm5lcnMiKS5zdHlsZSh7ZmlsbDpvLmJhY2tncm91bmQsc3Ryb2tlOm8uZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MX0pLmF0dHIoInRyYW5zZm9ybSIscSkuYXR0cigiZCIsIk0wLDBaIiksZ2U9Ui5fdWlkK00uU0VMRUNUSUQsbWU9W10sdmU9aihELGEueGF4ZXMsYS55YXhlcyxhLnN1YnBsb3QpO2Z1bmN0aW9uIHllKGUsdCl7cmV0dXJuIGUtdH1wZT1VLmZpbGxSYW5nZUl0ZW1zP1UuZmlsbFJhbmdlSXRlbXM6dj9mdW5jdGlvbihlLHQpe3ZhciByPWUucmFuZ2U9e307Zm9yKCQ9MDskPGNlLmxlbmd0aDskKyspe3ZhciBuPWNlWyRdLGE9bi5faWQuY2hhckF0KDApO3Jbbi5faWRdPVtDKG4sdFthKyJtaW4iXSksQyhuLHRbYSsibWF4Il0pXS5zb3J0KHllKX19OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmxhc3NvUG9pbnRzPXt9O2ZvcigkPTA7JDxjZS5sZW5ndGg7JCsrKXt2YXIgYT1jZVskXTtuW2EuX2lkXT1yLmZpbHRlcmVkLm1hcChPKGEpKX19LGEubW92ZUZuPWZ1bmN0aW9uKGUsdCl7YWU9TWF0aC5tYXgoMCxNYXRoLm1pbihsZSxyZSplK0cpKSxpZT1NYXRoLm1heCgwLE1hdGgubWluKHNlLG5lKnQrWikpO3ZhciByPU1hdGguYWJzKGFlLUcpLGk9TWF0aC5hYnMoaWUtWik7aWYodil7dmFyIG8sbCxzO2lmKHcpe3ZhciB1PVIuc2VsZWN0ZGlyZWN0aW9uO3N3aXRjaChvPSJhbnkiPT09dT9pPE1hdGgubWluKC42KnIsayk/ImgiOnI8TWF0aC5taW4oLjYqaSxrKT8idiI6ImQiOnUpe2Nhc2UiaCI6bD1UP3NlLzI6MCxzPXNlO2JyZWFrO2Nhc2UidiI6bD1UP2xlLzI6MCxzPWxlfX1pZihfKXN3aXRjaChSLm5ld3NoYXBlLmRyYXdkaXJlY3Rpb24pe2Nhc2UidmVydGljYWwiOm89ImgiLGw9VD9zZS8yOjAscz1zZTticmVhaztjYXNlImhvcml6b250YWwiOm89InYiLGw9VD9sZS8yOjAscz1sZTticmVhaztjYXNlIm9ydGhvIjpyPGk/KG89ImgiLGw9WixzPWllKToobz0idiIsbD1HLHM9YWUpO2JyZWFrO2RlZmF1bHQ6bz0iZCJ9ImgiPT09bz8oKEs9Uz9tKFQsW2FlLGxdLFthZSxzXSk6W1tHLGxdLFtHLHNdLFthZSxzXSxbYWUsbF1dKS54bWluPVM/YWU6TWF0aC5taW4oRyxhZSksSy54bWF4PVM/YWU6TWF0aC5tYXgoRyxhZSksSy55bWluPU1hdGgubWluKGwscyksSy55bWF4PU1hdGgubWF4KGwscyksaGUuYXR0cigiZCIsIk0iK0sueG1pbisiLCIrKFotaykrImgtNHYiKzIqaysiaDRaTSIrKEsueG1heC0xKSsiLCIrKFotaykrImg0diIrMiprKyJoLTRaIikpOiJ2Ij09PW8/KChLPVM/bShULFtsLGllXSxbcyxpZV0pOltbbCxaXSxbbCxpZV0sW3MsaWVdLFtzLFpdXSkueG1pbj1NYXRoLm1pbihsLHMpLEsueG1heD1NYXRoLm1heChsLHMpLEsueW1pbj1TP2llOk1hdGgubWluKFosaWUpLEsueW1heD1TP2llOk1hdGgubWF4KFosaWUpLGhlLmF0dHIoImQiLCJNIisoRy1rKSsiLCIrSy55bWluKyJ2LTRoIisyKmsrInY0Wk0iKyhHLWspKyIsIisoSy55bWF4LTEpKyJ2NGgiKzIqaysidi00WiIpKToiZCI9PT1vJiYoKEs9Uz9tKFQsW0csWl0sW2FlLGllXSk6W1tHLFpdLFtHLGllXSxbYWUsaWVdLFthZSxaXV0pLnhtaW49TWF0aC5taW4oRyxhZSksSy54bWF4PU1hdGgubWF4KEcsYWUpLEsueW1pbj1NYXRoLm1pbihaLGllKSxLLnltYXg9TWF0aC5tYXgoWixpZSksaGUuYXR0cigiZCIsIk0wLDBaIikpfWVsc2UgYyYmKFguYWRkUHQoW2FlLGllXSksSz1YLmZpbHRlcmVkKTthLnNlbGVjdGlvbkRlZnMmJmEuc2VsZWN0aW9uRGVmcy5sZW5ndGg/KFE9ZnVuY3Rpb24oZSx0LHIpe2lmKHIpcmV0dXJuIG4uZGlmZmVyZW5jZSh7cmVnaW9uczplLGludmVydGVkOiExfSx7cmVnaW9uczpbdF0saW52ZXJ0ZWQ6ITF9KS5yZWdpb25zO3JldHVybiBuLnVuaW9uKHtyZWdpb25zOmUsaW52ZXJ0ZWQ6ITF9LHtyZWdpb25zOlt0XSxpbnZlcnRlZDohMX0pLnJlZ2lvbnN9KGEubWVyZ2VkUG9seWdvbnMsSyx1ZSksSy5zdWJ0cmFjdD11ZSxKPU4oYS5zZWxlY3Rpb25EZWZzLmNvbmNhdChbS10pKSk6KFE9W0tdLEo9TChLKSksZyhWKFEseCksZGUsYSksdyYmYi50aHJvdHRsZShnZSxNLlNFTEVDVERFTEFZLChmdW5jdGlvbigpe3ZhciBlO21lPVtdO3ZhciB0LHI9W107Zm9yKCQ9MDskPHZlLmxlbmd0aDskKyspaWYodD0oZWU9dmVbJF0pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKGVlLEopLHIucHVzaCh0KSxlPVkodCxlZSksbWUubGVuZ3RoKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKW1lLnB1c2goZVtuXSk7ZWxzZSBtZT1lO0IoRCx2ZSx0ZT17cG9pbnRzOm1lfSkscGUodGUsSyxYKSxhLmdkLmVtaXQoInBsb3RseV9zZWxlY3RpbmciLHRlKX0pKX0sYS5jbGlja0ZuPWZ1bmN0aW9uKGUsdCl7aWYoaGUucmVtb3ZlKCksRC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD49MClELl9mdWxsTGF5b3V0Ll9kZWFjdGl2YXRlU2hhcGUoRCk7ZWxzZSBpZighXyl7dmFyIHI9Ui5jbGlja21vZGU7Yi5kb25lKGdlKS50aGVuKChmdW5jdGlvbigpe2lmKGIuY2xlYXIoZ2UpLDI9PT1lKXtmb3IoZGUucmVtb3ZlKCksJD0wOyQ8dmUubGVuZ3RoOyQrKykoZWU9dmVbJF0pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKGVlLCExKTtCKEQsdmUpLEUoYSksRC5lbWl0KCJwbG90bHlfZGVzZWxlY3QiLG51bGwpfWVsc2Ugci5pbmRleE9mKCJzZWxlY3QiKT4tMSYmSSh0LEQsYS54YXhlcyxhLnlheGVzLGEuc3VicGxvdCxhLGRlKSwiZXZlbnQiPT09ciYmRC5lbWl0KCJwbG90bHlfc2VsZWN0ZWQiLHZvaWQgMCk7bC5jbGljayhELHQpfSkpLmNhdGNoKHkuZXJyb3IpfX0sYS5kb25lRm49ZnVuY3Rpb24oKXtoZS5yZW1vdmUoKSxiLmRvbmUoZ2UpLnRoZW4oKGZ1bmN0aW9uKCl7Yi5jbGVhcihnZSksYS5nZC5lbWl0KCJwbG90bHlfc2VsZWN0ZWQiLHRlKSxLJiZhLnNlbGVjdGlvbkRlZnMmJihLLnN1YnRyYWN0PXVlLGEuc2VsZWN0aW9uRGVmcy5wdXNoKEspLGEubWVyZ2VkUG9seWdvbnMubGVuZ3RoPTAsW10ucHVzaC5hcHBseShhLm1lcmdlZFBvbHlnb25zLFEpKSxhLmRvbmVGbkNvbXBsZXRlZCYmYS5kb25lRm5Db21wbGV0ZWQobWUpfSkpLmNhdGNoKHkuZXJyb3IpLF8mJkUoYSl9fSxjbGVhclNlbGVjdDpTLGNsZWFyU2VsZWN0aW9uc0NhY2hlOkUsc2VsZWN0T25DbGljazpJfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjoxMDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6MTIwLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjEyNCwiLi4vLi4vY29tcG9uZW50cy9meCI6MTQyLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjEzOCwiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9kaXNwbGF5X291dGxpbmVzIjoxOTAsIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvaGVscGVycyI6MTkxLCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL25ld3NoYXBlcyI6MTkyLCIuLi8uLi9saWIiOjIzMiwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjoyMjAsIi4uLy4uL2xpYi9wb2x5Z29uIjoyNDQsIi4uLy4uL2xpYi90aHJvdHRsZSI6MjU2LCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyI6MjY5LCIuLi8uLi9yZWdpc3RyeSI6MzE4LCIuL2F4aXNfaWRzIjoyODMsIi4vY29uc3RhbnRzIjoyODYsIi4vaGFuZGxlX291dGxpbmUiOjI5MCwiLi9oZWxwZXJzIjoyOTEscG9seWJvb2xqczo1N31dLDMwMTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJAcGxvdGx5L2QzIiksYT1lKCJkMy10aW1lLWZvcm1hdCIpLnV0Y0Zvcm1hdCxpPWUoIi4uLy4uL2xpYiIpLG89aS5udW1iZXJGb3JtYXQsbD1lKCJmYXN0LWlzbnVtZXJpYyIpLHM9aS5jbGVhbk51bWJlcixjPWkubXMyRGF0ZVRpbWUsdT1pLmRhdGVUaW1lMm1zLGQ9aS5lbnN1cmVOdW1iZXIsZj1pLmlzQXJyYXlPclR5cGVkQXJyYXkscD1lKCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksaD1wLkZQX1NBRkUsZz1wLkJBRE5VTSxtPXAuTE9HX0NMSVAsdj1wLk9ORVdFRUsseT1wLk9ORURBWSx4PXAuT05FSE9VUixiPXAuT05FTUlOLF89cC5PTkVTRUMsdz1lKCIuL2F4aXNfaWRzIiksVD1lKCIuL2NvbnN0YW50cyIpLE09VC5IT1VSX1BBVFRFUk4saz1ULldFRUtEQVlfUEFUVEVSTjtmdW5jdGlvbiBBKGUpe3JldHVybiBNYXRoLnBvdygxMCxlKX1mdW5jdGlvbiBMKGUpe3JldHVybiBudWxsIT1lfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9ZS5faWR8fCJ4IixwPXIuY2hhckF0KDApO2Z1bmN0aW9uIFModCxyKXtpZih0PjApcmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMDtpZih0PD0wJiZyJiZlLnJhbmdlJiYyPT09ZS5yYW5nZS5sZW5ndGgpe3ZhciBuPWUucmFuZ2VbMF0sYT1lLnJhbmdlWzFdO3JldHVybi41KihuK2EtMiptKk1hdGguYWJzKG4tYSkpfXJldHVybiBnfWZ1bmN0aW9uIEQodCxyLG4sYSl7aWYoKGF8fHt9KS5tc1VUQyYmbCh0KSlyZXR1cm4rdDt2YXIgbz11KHQsbnx8ZS5jYWxlbmRhcik7aWYobz09PWcpe2lmKCFsKHQpKXJldHVybiBnO3Q9K3Q7dmFyIHM9TWF0aC5mbG9vcigxMCppLm1vZCh0Ky4wNSwxKSksYz1NYXRoLnJvdW5kKHQtcy8xMCk7bz11KG5ldyBEYXRlKGMpKStzLzEwfXJldHVybiBvfWZ1bmN0aW9uIEModCxyLG4pe3JldHVybiBjKHQscixufHxlLmNhbGVuZGFyKX1mdW5jdGlvbiBPKHQpe3JldHVybiBlLl9jYXRlZ29yaWVzW01hdGgucm91bmQodCldfWZ1bmN0aW9uIFAodCl7aWYoTCh0KSl7aWYodm9pZCAwPT09ZS5fY2F0ZWdvcmllc01hcCYmKGUuX2NhdGVnb3JpZXNNYXA9e30pLHZvaWQgMCE9PWUuX2NhdGVnb3JpZXNNYXBbdF0pcmV0dXJuIGUuX2NhdGVnb3JpZXNNYXBbdF07ZS5fY2F0ZWdvcmllcy5wdXNoKCJudW1iZXIiPT10eXBlb2YgdD9TdHJpbmcodCk6dCk7dmFyIHI9ZS5fY2F0ZWdvcmllcy5sZW5ndGgtMTtyZXR1cm4gZS5fY2F0ZWdvcmllc01hcFt0XT1yLHJ9cmV0dXJuIGd9ZnVuY3Rpb24gSSh0KXtpZihlLl9jYXRlZ29yaWVzTWFwKXJldHVybiBlLl9jYXRlZ29yaWVzTWFwW3RdfWZ1bmN0aW9uIFIoZSl7dmFyIHQ9SShlKTtyZXR1cm4gdm9pZCAwIT09dD90OmwoZSk/K2U6dm9pZCAwfWZ1bmN0aW9uIHooZSl7cmV0dXJuIGwoZSk/K2U6SShlKX1mdW5jdGlvbiBOKGUsdCxyKXtyZXR1cm4gbi5yb3VuZChyK3QqZSwyKX1mdW5jdGlvbiBGKGUsdCxyKXtyZXR1cm4oZS1yKS90fXZhciBFPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQpP04odCxlLl9tLGUuX2IpOmd9LGo9ZnVuY3Rpb24odCl7cmV0dXJuIEYodCxlLl9tLGUuX2IpfTtpZihlLnJhbmdlYnJlYWtzKXt2YXIgSD0ieSI9PT1wO0U9ZnVuY3Rpb24odCl7aWYoIWwodCkpcmV0dXJuIGc7dmFyIHI9ZS5fcmFuZ2VicmVha3MubGVuZ3RoO2lmKCFyKXJldHVybiBOKHQsZS5fbSxlLl9iKTt2YXIgbj1IO2UucmFuZ2VbMF0+ZS5yYW5nZVsxXSYmKG49IW4pO2Zvcih2YXIgYT1uPy0xOjEsaT1hKnQsbz0wLHM9MDtzPHI7cysrKXt2YXIgYz1hKmUuX3JhbmdlYnJlYWtzW3NdLm1pbix1PWEqZS5fcmFuZ2VicmVha3Nbc10ubWF4O2lmKGk8YylicmVhaztpZighKGk+dSkpe289aTwoYyt1KS8yP3M6cysxO2JyZWFrfW89cysxfXZhciBkPWUuX0Jbb118fDA7cmV0dXJuIGlzRmluaXRlKGQpP04odCxlLl9tMixkKTowfSxqPWZ1bmN0aW9uKHQpe3ZhciByPWUuX3JhbmdlYnJlYWtzLmxlbmd0aDtpZighcilyZXR1cm4gRih0LGUuX20sZS5fYik7Zm9yKHZhciBuPTAsYT0wO2E8ciYmISh0PGUuX3JhbmdlYnJlYWtzW2FdLnBtaW4pO2ErKyl0PmUuX3JhbmdlYnJlYWtzW2FdLnBtYXgmJihuPWErMSk7cmV0dXJuIEYodCxlLl9tMixlLl9CW25dKX19ZS5jMmw9ImxvZyI9PT1lLnR5cGU/UzpkLGUubDJjPSJsb2ciPT09ZS50eXBlP0E6ZCxlLmwycD1FLGUucDJsPWosZS5jMnA9ImxvZyI9PT1lLnR5cGU/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRShTKGUsdCkpfTpFLGUucDJjPSJsb2ciPT09ZS50eXBlP2Z1bmN0aW9uKGUpe3JldHVybiBBKGooZSkpfTpqLC0xIT09WyJsaW5lYXIiLCItIl0uaW5kZXhPZihlLnR5cGUpPyhlLmQycj1lLnIyZD1lLmQyYz1lLnIyYz1lLmQybD1lLnIybD1zLGUuYzJkPWUuYzJyPWUubDJkPWUubDJyPWQsZS5kMnA9ZS5yMnA9ZnVuY3Rpb24odCl7cmV0dXJuIGUubDJwKHModCkpfSxlLnAyZD1lLnAycj1qLGUuY2xlYW5Qb3M9ZCk6ImxvZyI9PT1lLnR5cGU/KGUuZDJyPWUuZDJsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFMocyhlKSx0KX0sZS5yMmQ9ZS5yMmM9ZnVuY3Rpb24oZSl7cmV0dXJuIEEocyhlKSl9LGUuZDJjPWUucjJsPXMsZS5jMmQ9ZS5sMnI9ZCxlLmMycj1TLGUubDJkPUEsZS5kMnA9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5sMnAoZS5kMnIodCxyKSl9LGUucDJkPWZ1bmN0aW9uKGUpe3JldHVybiBBKGooZSkpfSxlLnIycD1mdW5jdGlvbih0KXtyZXR1cm4gZS5sMnAocyh0KSl9LGUucDJyPWosZS5jbGVhblBvcz1kKToiZGF0ZSI9PT1lLnR5cGU/KGUuZDJyPWUucjJkPWkuaWRlbnRpdHksZS5kMmM9ZS5yMmM9ZS5kMmw9ZS5yMmw9RCxlLmMyZD1lLmMycj1lLmwyZD1lLmwycj1DLGUuZDJwPWUucjJwPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZS5sMnAoRCh0LDAsbikpfSxlLnAyZD1lLnAycj1mdW5jdGlvbihlLHQscil7cmV0dXJuIEMoaihlKSx0LHIpfSxlLmNsZWFuUG9zPWZ1bmN0aW9uKHQpe3JldHVybiBpLmNsZWFuRGF0ZSh0LGcsZS5jYWxlbmRhcil9KToiY2F0ZWdvcnkiPT09ZS50eXBlPyhlLmQyYz1lLmQybD1QLGUucjJkPWUuYzJkPWUubDJkPU8sZS5kMnI9ZS5kMmxfbm9hZGQ9UixlLnIyYz1mdW5jdGlvbih0KXt2YXIgcj16KHQpO3JldHVybiB2b2lkIDAhPT1yP3I6ZS5mcmFjdGlvbjJyKC41KX0sZS5sMnI9ZS5jMnI9ZCxlLnIybD16LGUuZDJwPWZ1bmN0aW9uKHQpe3JldHVybiBlLmwycChlLnIyYyh0KSl9LGUucDJkPWZ1bmN0aW9uKGUpe3JldHVybiBPKGooZSkpfSxlLnIycD1lLmQycCxlLnAycj1qLGUuY2xlYW5Qb3M9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWU/ZTpkKGUpfSk6Im11bHRpY2F0ZWdvcnkiPT09ZS50eXBlJiYoZS5yMmQ9ZS5jMmQ9ZS5sMmQ9TyxlLmQycj1lLmQybF9ub2FkZD1SLGUucjJjPWZ1bmN0aW9uKHQpe3ZhciByPVIodCk7cmV0dXJuIHZvaWQgMCE9PXI/cjplLmZyYWN0aW9uMnIoLjUpfSxlLnIyY19qdXN0X2luZGljZXM9SSxlLmwycj1lLmMycj1kLGUucjJsPVIsZS5kMnA9ZnVuY3Rpb24odCl7cmV0dXJuIGUubDJwKGUucjJjKHQpKX0sZS5wMmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE8oaihlKSl9LGUucjJwPWUuZDJwLGUucDJyPWosZS5jbGVhblBvcz1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8InN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWU/ZTpkKGUpfSxlLnNldHVwTXVsdGlDYXRlZ29yeT1mdW5jdGlvbihuKXt2YXIgYSxvLGw9ZS5fdHJhY2VJbmRpY2VzLHM9ZS5fbWF0Y2hHcm91cDtpZihzJiYwPT09ZS5fY2F0ZWdvcmllcy5sZW5ndGgpZm9yKHZhciBjIGluIHMpaWYoYyE9PXIpe3ZhciB1PXRbdy5pZDJuYW1lKGMpXTtsPWwuY29uY2F0KHUuX3RyYWNlSW5kaWNlcyl9dmFyIGQ9W1swLHt9XSxbMCx7fV1dLGg9W107Zm9yKGE9MDthPGwubGVuZ3RoO2ErKyl7dmFyIGc9bltsW2FdXTtpZihwIGluIGcpe3ZhciBtPWdbcF0sdj1nLl9sZW5ndGh8fGkubWluUm93TGVuZ3RoKG0pO2lmKGYobVswXSkmJmYobVsxXSkpZm9yKG89MDtvPHY7bysrKXt2YXIgeT1tWzBdW29dLHg9bVsxXVtvXTtMKHkpJiZMKHgpJiYoaC5wdXNoKFt5LHhdKSx5IGluIGRbMF1bMV18fChkWzBdWzFdW3ldPWRbMF1bMF0rKykseCBpbiBkWzFdWzFdfHwoZFsxXVsxXVt4XT1kWzFdWzBdKyspKX19fWZvcihoLnNvcnQoKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZFswXVsxXSxuPXJbZVswXV0tclt0WzBdXTtpZihuKXJldHVybiBuO3ZhciBhPWRbMV1bMV07cmV0dXJuIGFbZVsxXV0tYVt0WzFdXX0pKSxhPTA7YTxoLmxlbmd0aDthKyspUChoW2FdKX0pLGUuZnJhY3Rpb24ycj1mdW5jdGlvbih0KXt2YXIgcj1lLnIybChlLnJhbmdlWzBdKSxuPWUucjJsKGUucmFuZ2VbMV0pO3JldHVybiBlLmwycihyK3QqKG4tcikpfSxlLnIyZnJhY3Rpb249ZnVuY3Rpb24odCl7dmFyIHI9ZS5yMmwoZS5yYW5nZVswXSksbj1lLnIybChlLnJhbmdlWzFdKTtyZXR1cm4oZS5yMmwodCktcikvKG4tcil9LGUuY2xlYW5SYW5nZT1mdW5jdGlvbih0LHIpe3J8fChyPXt9KSx0fHwodD0icmFuZ2UiKTt2YXIgbixhLG89aS5uZXN0ZWRQcm9wZXJ0eShlLHQpLmdldCgpO2lmKGE9KGE9ImRhdGUiPT09ZS50eXBlP2kuZGZsdFJhbmdlKGUuY2FsZW5kYXIpOiJ5Ij09PXA/VC5ERkxUUkFOR0VZOiJyZWFsYXhpcyI9PT1lLl9uYW1lP1swLDFdOnIuZGZsdFJhbmdlfHxULkRGTFRSQU5HRVgpLnNsaWNlKCksInRvemVybyIhPT1lLnJhbmdlbW9kZSYmIm5vbm5lZ2F0aXZlIiE9PWUucmFuZ2Vtb2RlfHwoYVswXT0wKSxvJiYyPT09by5sZW5ndGgpZm9yKCJkYXRlIiE9PWUudHlwZXx8ZS5hdXRvcmFuZ2V8fChvWzBdPWkuY2xlYW5EYXRlKG9bMF0sZyxlLmNhbGVuZGFyKSxvWzFdPWkuY2xlYW5EYXRlKG9bMV0sZyxlLmNhbGVuZGFyKSksbj0wO248MjtuKyspaWYoImRhdGUiPT09ZS50eXBlKXtpZighaS5pc0RhdGVUaW1lKG9bbl0sZS5jYWxlbmRhcikpe2VbdF09YTticmVha31pZihlLnIybChvWzBdKT09PWUucjJsKG9bMV0pKXt2YXIgcz1pLmNvbnN0cmFpbihlLnIybChvWzBdKSxpLk1JTl9NUysxZTMsaS5NQVhfTVMtMWUzKTtvWzBdPWUubDJyKHMtMWUzKSxvWzFdPWUubDJyKHMrMWUzKTticmVha319ZWxzZXtpZighbChvW25dKSl7aWYoIWwob1sxLW5dKSl7ZVt0XT1hO2JyZWFrfW9bbl09b1sxLW5dKihuPzEwOi4xKX1pZihvW25dPC1oP29bbl09LWg6b1tuXT5oJiYob1tuXT1oKSxvWzBdPT09b1sxXSl7dmFyIGM9TWF0aC5tYXgoMSxNYXRoLmFicygxZS02Km9bMF0pKTtvWzBdLT1jLG9bMV0rPWN9fWVsc2UgaS5uZXN0ZWRQcm9wZXJ0eShlLHQpLnNldChhKX0sZS5zZXRTY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10Ll9zaXplO2lmKGUub3ZlcmxheWluZyl7dmFyIGE9dy5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OnR9LGUub3ZlcmxheWluZyk7ZS5kb21haW49YS5kb21haW59dmFyIGk9ciYmZS5fcj8iX3IiOiJyYW5nZSIsbz1lLmNhbGVuZGFyO2UuY2xlYW5SYW5nZShpKTt2YXIgbCxzLGM9ZS5yMmwoZVtpXVswXSxvKSx1PWUucjJsKGVbaV1bMV0sbyksZD0ieSI9PT1wO2lmKChkPyhlLl9vZmZzZXQ9bi50KygxLWUuZG9tYWluWzFdKSpuLmgsZS5fbGVuZ3RoPW4uaCooZS5kb21haW5bMV0tZS5kb21haW5bMF0pLGUuX209ZS5fbGVuZ3RoLyhjLXUpLGUuX2I9LWUuX20qdSk6KGUuX29mZnNldD1uLmwrZS5kb21haW5bMF0qbi53LGUuX2xlbmd0aD1uLncqKGUuZG9tYWluWzFdLWUuZG9tYWluWzBdKSxlLl9tPWUuX2xlbmd0aC8odS1jKSxlLl9iPS1lLl9tKmMpLGUuX3JhbmdlYnJlYWtzPVtdLGUuX2xCcmVha3M9MCxlLl9tMj0wLGUuX0I9W10sZS5yYW5nZWJyZWFrcykmJihlLl9yYW5nZWJyZWFrcz1lLmxvY2F0ZUJyZWFrcyhNYXRoLm1pbihjLHUpLE1hdGgubWF4KGMsdSkpLGUuX3JhbmdlYnJlYWtzLmxlbmd0aCkpe2ZvcihsPTA7bDxlLl9yYW5nZWJyZWFrcy5sZW5ndGg7bCsrKXM9ZS5fcmFuZ2VicmVha3NbbF0sZS5fbEJyZWFrcys9TWF0aC5hYnMocy5tYXgtcy5taW4pO3ZhciBmPWQ7Yz51JiYoZj0hZiksZiYmZS5fcmFuZ2VicmVha3MucmV2ZXJzZSgpO3ZhciBoPWY/LTE6MTtmb3IoZS5fbTI9aCplLl9sZW5ndGgvKE1hdGguYWJzKHUtYyktZS5fbEJyZWFrcyksZS5fQi5wdXNoKC1lLl9tMiooZD91OmMpKSxsPTA7bDxlLl9yYW5nZWJyZWFrcy5sZW5ndGg7bCsrKXM9ZS5fcmFuZ2VicmVha3NbbF0sZS5fQi5wdXNoKGUuX0JbZS5fQi5sZW5ndGgtMV0taCplLl9tMioocy5tYXgtcy5taW4pKTtmb3IobD0wO2w8ZS5fcmFuZ2VicmVha3MubGVuZ3RoO2wrKykocz1lLl9yYW5nZWJyZWFrc1tsXSkucG1pbj1FKHMubWluKSxzLnBtYXg9RShzLm1heCl9aWYoIWlzRmluaXRlKGUuX20pfHwhaXNGaW5pdGUoZS5fYil8fGUuX2xlbmd0aDwwKXRocm93IHQuX3JlcGxvdHRpbmc9ITEsbmV3IEVycm9yKCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGF4aXMgc2NhbGluZyIpfSxlLm1hc2tCcmVha3M9ZnVuY3Rpb24odCl7dmFyIHIsbixhLG8sbCxjPWUucmFuZ2VicmVha3N8fFtdO2MuX2NhY2hlZFBhdHRlcm5zfHwoYy5fY2FjaGVkUGF0dGVybnM9Yy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuYWJsZWQmJnQuYm91bmRzP2kuc2ltcGxlTWFwKHQuYm91bmRzLHQucGF0dGVybj9zOmUuZDJjKTpudWxsfSkpKSxjLl9jYWNoZWRWYWx1ZXN8fChjLl9jYWNoZWRWYWx1ZXM9Yy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuYWJsZWQmJnQudmFsdWVzP2kuc2ltcGxlTWFwKHQudmFsdWVzLGUuZDJjKS5zb3J0KGkuc29ydGVyQXNjKTpudWxsfSkpKTtmb3IodmFyIHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGQ9Y1t1XTtpZihkLmVuYWJsZWQpaWYoZC5ib3VuZHMpe3ZhciBmPWQucGF0dGVybjtzd2l0Y2gobj0ocj1jLl9jYWNoZWRQYXR0ZXJuc1t1XSlbMF0sYT1yWzFdLGYpe2Nhc2UgazpvPShsPW5ldyBEYXRlKHQpKS5nZXRVVENEYXkoKSxuPmEmJihhKz03LG88biYmKG8rPTcpKTticmVhaztjYXNlIE06bz0obD1uZXcgRGF0ZSh0KSkuZ2V0VVRDSG91cnMoKSsobC5nZXRVVENNaW51dGVzKCkvNjArbC5nZXRVVENTZWNvbmRzKCkvMzYwMCtsLmdldFVUQ01pbGxpc2Vjb25kcygpLzM2ZTUpLG4+YSYmKGErPTI0LG88biYmKG8rPTI0KSk7YnJlYWs7Y2FzZSIiOm89dH1pZihvPj1uJiZvPGEpcmV0dXJuIGd9ZWxzZSBmb3IodmFyIHA9Yy5fY2FjaGVkVmFsdWVzW3VdLGg9MDtoPHAubGVuZ3RoO2grKylpZihhPShuPXBbaF0pK2QuZHZhbHVlLHQ+PW4mJnQ8YSlyZXR1cm4gZ31yZXR1cm4gdH0sZS5sb2NhdGVCcmVha3M9ZnVuY3Rpb24odCxyKXt2YXIgbixhLG8sbCxjPVtdO2lmKCFlLnJhbmdlYnJlYWtzKXJldHVybiBjO3ZhciB1PWUucmFuZ2VicmVha3Muc2xpY2UoKS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLnBhdHRlcm49PT1rJiZ0LnBhdHRlcm49PT1NPy0xOnQucGF0dGVybj09PWsmJmUucGF0dGVybj09PU0/MTowfSkpLGQ9ZnVuY3Rpb24oZSxuKXtpZigoZT1pLmNvbnN0cmFpbihlLHQscikpIT09KG49aS5jb25zdHJhaW4obix0LHIpKSl7Zm9yKHZhciBhPSEwLG89MDtvPGMubGVuZ3RoO28rKyl7dmFyIGw9Y1tvXTtlPGwubWF4JiZuPj1sLm1pbiYmKGU8bC5taW4mJihsLm1pbj1lKSxuPmwubWF4JiYobC5tYXg9biksYT0hMSl9YSYmYy5wdXNoKHttaW46ZSxtYXg6bn0pfX07Zm9yKG49MDtuPHUubGVuZ3RoO24rKyl7dmFyIGY9dVtuXTtpZihmLmVuYWJsZWQpaWYoZi5ib3VuZHMpe3ZhciBwPXQsaD1yO2YucGF0dGVybiYmKHA9TWF0aC5mbG9vcihwKSksbz0oYT1pLnNpbXBsZU1hcChmLmJvdW5kcyxmLnBhdHRlcm4/czplLnIybCkpWzBdLGw9YVsxXTt2YXIgZyxtLHc9bmV3IERhdGUocCk7c3dpdGNoKGYucGF0dGVybil7Y2FzZSBrOm09dixnPShsLW8rKGw8bz83OjApKSp5LHArPW8qeS0ody5nZXRVVENEYXkoKSp5K3cuZ2V0VVRDSG91cnMoKSp4K3cuZ2V0VVRDTWludXRlcygpKmIrdy5nZXRVVENTZWNvbmRzKCkqXyt3LmdldFVUQ01pbGxpc2Vjb25kcygpKTticmVhaztjYXNlIE06bT15LGc9KGwtbysobDxvPzI0OjApKSp4LHArPW8qeC0ody5nZXRVVENIb3VycygpKngrdy5nZXRVVENNaW51dGVzKCkqYit3LmdldFVUQ1NlY29uZHMoKSpfK3cuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO2JyZWFrO2RlZmF1bHQ6cD1NYXRoLm1pbihhWzBdLGFbMV0pLGc9bT0oaD1NYXRoLm1heChhWzBdLGFbMV0pKS1wfWZvcih2YXIgVD1wO1Q8aDtUKz1tKWQoVCxUK2cpfWVsc2UgZm9yKHZhciBBPWkuc2ltcGxlTWFwKGYudmFsdWVzLGUuZDJjKSxMPTA7TDxBLmxlbmd0aDtMKyspZChvPUFbTF0sbD1vK2YuZHZhbHVlKX1yZXR1cm4gYy5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLm1pbi10Lm1pbn0pKSxjfSxlLm1ha2VDYWxjZGF0YT1mdW5jdGlvbih0LHIsbil7dmFyIGEsbyxsLHMsYz1lLnR5cGUsdT0iZGF0ZSI9PT1jJiZ0W3IrImNhbGVuZGFyIl07aWYociBpbiB0KXtpZihhPXRbcl0scz10Ll9sZW5ndGh8fGkubWluUm93TGVuZ3RoKGEpLGkuaXNUeXBlZEFycmF5KGEpJiYoImxpbmVhciI9PT1jfHwibG9nIj09PWMpKXtpZihzPT09YS5sZW5ndGgpcmV0dXJuIGE7aWYoYS5zdWJhcnJheSlyZXR1cm4gYS5zdWJhcnJheSgwLHMpfWlmKCJtdWx0aWNhdGVnb3J5Ij09PWMpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKyl7dmFyIGE9KGVbMF18fFtdKVtuXSxpPShlWzFdfHxbXSlbbl07cltuXT1JKFthLGldKX1yZXR1cm4gcn0oYSxzKTtmb3Iobz1uZXcgQXJyYXkocyksbD0wO2w8cztsKyspb1tsXT1lLmQyYyhhW2xdLDAsdSxuKX1lbHNle3ZhciBkPXIrIjAiaW4gdD9lLmQyYyh0W3IrIjAiXSwwLHUpOjAsZj10WyJkIityXT9OdW1iZXIodFsiZCIrcl0pOjE7Zm9yKGE9dFt7eDoieSIseToieCJ9W3JdXSxzPXQuX2xlbmd0aHx8YS5sZW5ndGgsbz1uZXcgQXJyYXkocyksbD0wO2w8cztsKyspb1tsXT1kK2wqZn1pZihlLnJhbmdlYnJlYWtzKWZvcihsPTA7bDxzO2wrKylvW2xdPWUubWFza0JyZWFrcyhvW2xdKTtyZXR1cm4gb30sZS5pc1ZhbGlkUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJjI9PT10Lmxlbmd0aCYmbChlLnIybCh0WzBdKSkmJmwoZS5yMmwodFsxXSkpfSxlLmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYzJsKHRbcF0sbnVsbCxyKSxhPWUucjJsKGUucmFuZ2VbMF0pLGk9ZS5yMmwoZS5yYW5nZVsxXSk7cmV0dXJuIGE8aT9hPD1uJiZuPD1pOmk8PW4mJm48PWF9LGUuX2VtcHR5Q2F0ZWdvcmllcz1mdW5jdGlvbigpe2UuX2NhdGVnb3JpZXM9W10sZS5fY2F0ZWdvcmllc01hcD17fX0sZS5jbGVhckNhbGM9ZnVuY3Rpb24oKXt2YXIgcj1lLl9tYXRjaEdyb3VwO2lmKHIpe3ZhciBuPW51bGwsYT1udWxsO2Zvcih2YXIgaSBpbiByKXt2YXIgbz10W3cuaWQybmFtZShpKV07aWYoby5fY2F0ZWdvcmllcyl7bj1vLl9jYXRlZ29yaWVzLGE9by5fY2F0ZWdvcmllc01hcDticmVha319biYmYT8oZS5fY2F0ZWdvcmllcz1uLGUuX2NhdGVnb3JpZXNNYXA9YSk6ZS5fZW1wdHlDYXRlZ29yaWVzKCl9ZWxzZSBlLl9lbXB0eUNhdGVnb3JpZXMoKTtpZihlLl9pbml0aWFsQ2F0ZWdvcmllcylmb3IodmFyIGw9MDtsPGUuX2luaXRpYWxDYXRlZ29yaWVzLmxlbmd0aDtsKyspUChlLl9pbml0aWFsQ2F0ZWdvcmllc1tsXSl9LGUuc29ydEJ5SW5pdGlhbENhdGVnb3JpZXM9ZnVuY3Rpb24oKXt2YXIgbj1bXTtpZihlLl9lbXB0eUNhdGVnb3JpZXMoKSxlLl9pbml0aWFsQ2F0ZWdvcmllcylmb3IodmFyIGE9MDthPGUuX2luaXRpYWxDYXRlZ29yaWVzLmxlbmd0aDthKyspUChlLl9pbml0aWFsQ2F0ZWdvcmllc1thXSk7bj1uLmNvbmNhdChlLl90cmFjZUluZGljZXMpO3ZhciBpPWUuX21hdGNoR3JvdXA7Zm9yKHZhciBvIGluIGkpaWYociE9PW8pe3ZhciBsPXRbdy5pZDJuYW1lKG8pXTtsLl9jYXRlZ29yaWVzPWUuX2NhdGVnb3JpZXMsbC5fY2F0ZWdvcmllc01hcD1lLl9jYXRlZ29yaWVzTWFwLG49bi5jb25jYXQobC5fdHJhY2VJbmRpY2VzKX1yZXR1cm4gbn07dmFyIEI9dC5fZDNsb2NhbGU7ImRhdGUiPT09ZS50eXBlJiYoZS5fZGF0ZUZvcm1hdD1CP0IudGltZUZvcm1hdDphLGUuX2V4dHJhRm9ybWF0PXQuX2V4dHJhRm9ybWF0KSxlLl9zZXBhcmF0b3JzPXQuc2VwYXJhdG9ycyxlLl9udW1Gb3JtYXQ9Qj9CLm51bWJlckZvcm1hdDpvLGRlbGV0ZSBlLl9taW5EdGljayxkZWxldGUgZS5fZm9yY2VUaWNrMH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6MjEyLCIuLi8uLi9saWIiOjIzMiwiLi9heGlzX2lkcyI6MjgzLCIuL2NvbnN0YW50cyI6Mjg2LCJAcGxvdGx5L2QzIjoxMSwiZDMtdGltZS1mb3JtYXQiOjE0LCJmYXN0LWlzbnVtZXJpYyI6MTd9XSwzMDI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVsic2hvd2V4cG9uZW50Iiwic2hvd3RpY2twcmVmaXgiLCJzaG93dGlja3N1ZmZpeCJdLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PWVbdF19KSk7aWYodC5ldmVyeSgoZnVuY3Rpb24ocil7cmV0dXJuIGVbcl09PT1lW3RbMF1dfSkpfHwxPT09dC5sZW5ndGgpcmV0dXJuIGVbdFswXV19fSx7fV0sMzAzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLmNvbnRyYXN0LGk9ZSgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89ZSgiLi9zaG93X2RmbHQiKSxsPWUoIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpO2Z1bmN0aW9uIHMoZSx0KXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKGUsdCxpLnRpY2tmb3JtYXRzdG9wcyxyLGEpfXIoImVuYWJsZWQiKSYmKHIoImR0aWNrcmFuZ2UiKSxyKCJ2YWx1ZSIpKX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsYyx1KXt1fHwodT17fSk7dmFyIGQ9byhlKTtpZihyKCJzaG93dGlja2xhYmVscyIpKXt2YXIgZj11LmZvbnR8fHt9LHA9dC5jb2xvcixoPS0xIT09KHQudGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKT9hKHUuYmdDb2xvcik6cCYmcCE9PWkuY29sb3IuZGZsdD9wOmYuY29sb3I7aWYobi5jb2VyY2VGb250KHIsInRpY2tmb250Iix7ZmFtaWx5OmYuZmFtaWx5LHNpemU6Zi5zaXplLGNvbG9yOmh9KSx1Lm5vQW5nfHxyKCJ0aWNrYW5nbGUiKSwiY2F0ZWdvcnkiIT09Yyl7dmFyIGc9cigidGlja2Zvcm1hdCIpO2woZSx0LHtuYW1lOiJ0aWNrZm9ybWF0c3RvcHMiLGluY2x1c2lvbkF0dHI6ImVuYWJsZWQiLGhhbmRsZUl0ZW1EZWZhdWx0czpzfSksdC50aWNrZm9ybWF0c3RvcHMubGVuZ3RofHxkZWxldGUgdC50aWNrZm9ybWF0c3RvcHMsdS5ub0V4cHx8Z3x8ImRhdGUiPT09Y3x8KHIoInNob3dleHBvbmVudCIsZCkscigiZXhwb25lbnRmb3JtYXQiKSxyKCJtaW5leHBvbmVudCIpLHIoInNlcGFyYXRldGhvdXNhbmRzIikpfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjEwMiwiLi4vLi4vbGliIjoyMzIsIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6Mjc0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoyOTQsIi4vc2hvd19kZmx0IjozMDJ9XSwzMDQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuL2xheW91dF9hdHRyaWJ1dGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBvPW4uY29lcmNlMihlLHQsYSwidGlja2xlbiIpLGw9bi5jb2VyY2UyKGUsdCxhLCJ0aWNrd2lkdGgiKSxzPW4uY29lcmNlMihlLHQsYSwidGlja2NvbG9yIix0LmNvbG9yKTtyKCJ0aWNrcyIsaS5vdXRlclRpY2tzfHxvfHxsfHxzPyJvdXRzaWRlIjoiIil8fChkZWxldGUgdC50aWNrbGVuLGRlbGV0ZSB0LnRpY2t3aWR0aCxkZWxldGUgdC50aWNrY29sb3IpfX0seyIuLi8uLi9saWIiOjIzMiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6Mjk0fV0sMzA1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vY2xlYW5fdGlja3MiKSxhPWUoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGkpe2Z1bmN0aW9uIG8ocil7dmFyIG49ZVtyXTtyZXR1cm4gdm9pZCAwIT09bj9uOih0Ll90ZW1wbGF0ZXx8e30pW3JdfXZhciBsPW8oInRpY2swIikscz1vKCJkdGljayIpLGM9bygidGlja3ZhbHMiKSx1PXIoInRpY2ttb2RlIixhKGMpPyJhcnJheSI6cz8ibGluZWFyIjoiYXV0byIpO2lmKCJhdXRvIj09PXUpcigibnRpY2tzIik7ZWxzZSBpZigibGluZWFyIj09PXUpe3ZhciBkPXQuZHRpY2s9bi5kdGljayhzLGkpO3QudGljazA9bi50aWNrMChsLGksdC5jYWxlbmRhcixkKX1lbHNlIGlmKCJtdWx0aWNhdGVnb3J5IiE9PWkpe3ZvaWQgMD09PXIoInRpY2t2YWxzIik/dC50aWNrbW9kZT0iYXV0byI6cigidGlja3RleHQiKX19fSx7Ii4uLy4uL2xpYiI6MjMyLCIuL2NsZWFuX3RpY2tzIjoyODV9XSwzMDY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL2xpYiIpLG89ZSgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD1lKCIuL2F4ZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7dmFyIGM9ZS5fZnVsbExheW91dDtpZigwIT09dC5sZW5ndGgpe3ZhciB1LGQsZixwO3MmJih1PXMoKSk7dmFyIGg9bi5lYXNlKHIuZWFzaW5nKTtyZXR1cm4gZS5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocCkscD1udWxsLGZ1bmN0aW9uKCl7Zm9yKHZhciByPXt9LG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxvPWkucGxvdGluZm8ueGF4aXMsbD1pLnBsb3RpbmZvLnlheGlzO2kueHIwJiYocltvLl9uYW1lKyIucmFuZ2UiXT1pLnhyMC5zbGljZSgpKSxpLnlyMCYmKHJbbC5fbmFtZSsiLnJhbmdlIl09aS55cjAuc2xpY2UoKSl9cmV0dXJuIGEuY2FsbCgicmVsYXlvdXQiLGUscikudGhlbigoZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylnKHRbZV0ucGxvdGluZm8pfSkpfSgpfSkpLGQ9RGF0ZS5ub3coKSxwPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uIG4oKXtmPURhdGUubm93KCk7Zm9yKHZhciBpPU1hdGgubWluKDEsKGYtZCkvci5kdXJhdGlvbiksbz1oKGkpLGw9MDtsPHQubGVuZ3RoO2wrKyltKHRbbF0sbyk7Zi1kPnIuZHVyYXRpb24/KCFmdW5jdGlvbigpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sbz1pLnBsb3RpbmZvLnhheGlzLGw9aS5wbG90aW5mby55YXhpcztpLnhyMSYmKHJbby5fbmFtZSsiLnJhbmdlIl09aS54cjEuc2xpY2UoKSksaS55cjEmJihyW2wuX25hbWUrIi5yYW5nZSJdPWkueXIxLnNsaWNlKCkpfXUmJnUoKSxhLmNhbGwoInJlbGF5b3V0IixlLHIpLnRoZW4oKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspZyh0W2VdLnBsb3RpbmZvKX0pKX0oKSxwPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShuKSk6cD13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSkpLFByb21pc2UucmVzb2x2ZSgpfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9ZS54YXhpcyxyPWUueWF4aXM7Yy5fZGVmcy5zZWxlY3QoIiMiK2UuY2xpcElkKyI+IHJlY3QiKS5jYWxsKG8uc2V0VHJhbnNsYXRlLDAsMCkuY2FsbChvLnNldFNjYWxlLDEsMSksZS5wbG90LmNhbGwoby5zZXRUcmFuc2xhdGUsdC5fb2Zmc2V0LHIuX29mZnNldCkuY2FsbChvLnNldFNjYWxlLDEsMSk7dmFyIG49ZS5wbG90LnNlbGVjdEFsbCgiLnNjYXR0ZXJsYXllciAudHJhY2UiKTtuLnNlbGVjdEFsbCgiLnBvaW50IikuY2FsbChvLnNldFBvaW50R3JvdXBTY2FsZSwxLDEpLG4uc2VsZWN0QWxsKCIudGV4dHBvaW50IikuY2FsbChvLnNldFRleHRQb2ludHNTY2FsZSwxLDEpLG4uY2FsbChvLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMsZSl9ZnVuY3Rpb24gbSh0LHIpe3ZhciBuPXQucGxvdGluZm8sYT1uLnhheGlzLHM9bi55YXhpcyxjPWEuX2xlbmd0aCx1PXMuX2xlbmd0aCxkPSEhdC54cjEsZj0hIXQueXIxLHA9W107aWYoZCl7dmFyIGg9aS5zaW1wbGVNYXAodC54cjAsYS5yMmwpLGc9aS5zaW1wbGVNYXAodC54cjEsYS5yMmwpLG09aFsxXS1oWzBdLHY9Z1sxXS1nWzBdO3BbMF09KGhbMF0qKDEtcikrcipnWzBdLWhbMF0pLyhoWzFdLWhbMF0pKmMscFsyXT1jKigxLXIrcip2L20pLGEucmFuZ2VbMF09YS5sMnIoaFswXSooMS1yKStyKmdbMF0pLGEucmFuZ2VbMV09YS5sMnIoaFsxXSooMS1yKStyKmdbMV0pfWVsc2UgcFswXT0wLHBbMl09YztpZihmKXt2YXIgeT1pLnNpbXBsZU1hcCh0LnlyMCxzLnIybCkseD1pLnNpbXBsZU1hcCh0LnlyMSxzLnIybCksYj15WzFdLXlbMF0sXz14WzFdLXhbMF07cFsxXT0oeVsxXSooMS1yKStyKnhbMV0teVsxXSkvKHlbMF0teVsxXSkqdSxwWzNdPXUqKDEtcityKl8vYikscy5yYW5nZVswXT1hLmwycih5WzBdKigxLXIpK3IqeFswXSkscy5yYW5nZVsxXT1zLmwycih5WzFdKigxLXIpK3IqeFsxXSl9ZWxzZSBwWzFdPTAscFszXT11O2wuZHJhd09uZShlLGEse3NraXBUaXRsZTohMH0pLGwuZHJhd09uZShlLHMse3NraXBUaXRsZTohMH0pLGwucmVkcmF3Q29tcG9uZW50cyhlLFthLl9pZCxzLl9pZF0pO3ZhciB3PWQ/Yy9wWzJdOjEsVD1mP3UvcFszXToxLE09ZD9wWzBdOjAsaz1mP3BbMV06MCxBPWQ/cFswXS9wWzJdKmM6MCxMPWY/cFsxXS9wWzNdKnU6MCxTPWEuX29mZnNldC1BLEQ9cy5fb2Zmc2V0LUw7bi5jbGlwUmVjdC5jYWxsKG8uc2V0VHJhbnNsYXRlLE0saykuY2FsbChvLnNldFNjYWxlLDEvdywxL1QpLG4ucGxvdC5jYWxsKG8uc2V0VHJhbnNsYXRlLFMsRCkuY2FsbChvLnNldFNjYWxlLHcsVCksby5zZXRQb2ludEdyb3VwU2NhbGUobi56b29tU2NhbGVQdHMsMS93LDEvVCksby5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQsMS93LDEvVCl9bC5yZWRyYXdDb21wb25lbnRzKGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjEyNCwiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4vYXhlcyI6Mjc5LCJAcGxvdGx5L2QzIjoxMX1dLDMwNzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9yZWdpc3RyeSIpLnRyYWNlSXMsYT1lKCIuL2F4aXNfYXV0b3R5cGUiKTtmdW5jdGlvbiBpKGUpe3JldHVybnt2OiJ4IixoOiJ5In1bZS5vcmllbnRhdGlvbnx8InYiXX1mdW5jdGlvbiBvKGUsdCl7dmFyIHI9aShlKSxhPW4oZSwiYm94LXZpb2xpbiIpLG89bihlLl9mdWxsSW5wdXR8fHt9LCJjYW5kbGVzdGljayIpO3JldHVybiBhJiYhbyYmdD09PXImJnZvaWQgMD09PWVbcl0mJnZvaWQgMD09PWVbcisiMCJdfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQscixsKXtyKCJhdXRvdHlwZW51bWJlcnMiLGwuYXV0b3R5cGVudW1iZXJzRGZsdCksIi0iPT09cigidHlwZSIsKGwuc3Bsb21TdGFzaHx8e30pLnR5cGUpJiYoIWZ1bmN0aW9uKGUsdCl7aWYoIi0iIT09ZS50eXBlKXJldHVybjt2YXIgcixsPWUuX2lkLHM9bC5jaGFyQXQoMCk7LTEhPT1sLmluZGV4T2YoInNjZW5lIikmJihsPXMpO3ZhciBjPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXTtpZigic3Bsb20iPT09YS50eXBlJiZhLl9sZW5ndGg+MCYmKGFbIl8iK3IrImF4ZXMiXXx8e30pW3RdKXJldHVybiBhO2lmKChhW3IrImF4aXMiXXx8cik9PT10KXtpZihvKGEscikpcmV0dXJuIGE7aWYoKGFbcl18fFtdKS5sZW5ndGh8fGFbcisiMCJdKXJldHVybiBhfX19KHQsbCxzKTtpZighYylyZXR1cm47aWYoImhpc3RvZ3JhbSI9PT1jLnR5cGUmJnM9PT17djoieSIsaDoieCJ9W2Mub3JpZW50YXRpb258fCJ2Il0pcmV0dXJuIHZvaWQoZS50eXBlPSJsaW5lYXIiKTt2YXIgdT1zKyJjYWxlbmRhciIsZD1jW3VdLGY9e25vTXVsdGlDYXRlZ29yeTohbihjLCJjYXJ0ZXNpYW4iKXx8bihjLCJub011bHRpQ2F0ZWdvcnkiKX07ImJveCI9PT1jLnR5cGUmJmMuX2hhc1ByZUNvbXBTdGF0cyYmcz09PXtoOiJ4Iix2OiJ5In1bYy5vcmllbnRhdGlvbnx8InYiXSYmKGYubm9NdWx0aUNhdGVnb3J5PSEwKTtpZihmLmF1dG90eXBlbnVtYmVycz1lLmF1dG90eXBlbnVtYmVycyxvKGMscykpe3ZhciBwPWkoYyksaD1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgZz10W3JdO24oZywiYm94LXZpb2xpbiIpJiYoZ1tzKyJheGlzIl18fHMpPT09bCYmKHZvaWQgMCE9PWdbcF0/aC5wdXNoKGdbcF1bMF0pOnZvaWQgMCE9PWcubmFtZT9oLnB1c2goZy5uYW1lKTpoLnB1c2goInRleHQiKSxnW3VdIT09ZCYmKGQ9dm9pZCAwKSl9ZS50eXBlPWEoaCxkLGYpfWVsc2UgaWYoInNwbG9tIj09PWMudHlwZSl7dmFyIG09Yy5kaW1lbnNpb25zW2MuX2F4ZXNEaW1bbF1dO20udmlzaWJsZSYmKGUudHlwZT1hKG0udmFsdWVzLGQsZikpfWVsc2UgZS50eXBlPWEoY1tzXXx8W2NbcysiMCJdXSxkLGYpfSh0LGwuZGF0YSksIi0iPT09dC50eXBlP3QudHlwZT0ibGluZWFyIjplLnR5cGU9dC50eXBlKX19LHsiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi9heGlzX2F1dG90eXBlIjoyODB9XSwzMDg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vcmVnaXN0cnkiKSxhPWUoIi4uL2xpYiIpO2Z1bmN0aW9uIGkoZSx0LHIpe3ZhciBuLGksbyxsPSExO2lmKCJkYXRhIj09PXQudHlwZSluPWUuX2Z1bGxEYXRhW251bGwhPT10LnRyYWNlcz90LnRyYWNlc1swXTowXTtlbHNle2lmKCJsYXlvdXQiIT09dC50eXBlKXJldHVybiExO249ZS5fZnVsbExheW91dH1yZXR1cm4gaT1hLm5lc3RlZFByb3BlcnR5KG4sdC5wcm9wKS5nZXQoKSwobz1yW3QudHlwZV09clt0LnR5cGVdfHx7fSkuaGFzT3duUHJvcGVydHkodC5wcm9wKSYmb1t0LnByb3BdIT09aSYmKGw9ITApLG9bdC5wcm9wXT1pLHtjaGFuZ2VkOmwsdmFsdWU6aX19ZnVuY3Rpb24gbyhlLHQpe3ZhciByPVtdLG49dFswXSxpPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgbilpW25dPXRbMV07ZWxzZXtpZighYS5pc1BsYWluT2JqZWN0KG4pKXJldHVybiByO2k9bn1yZXR1cm4gcyhpLChmdW5jdGlvbihlLHQsbil7ci5wdXNoKHt0eXBlOiJsYXlvdXQiLHByb3A6ZSx2YWx1ZTpufSl9KSwiIiwwKSxyfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcixuLGksbyxsPVtdO2lmKG49dFswXSxpPXRbMV0scj10WzJdLG89e30sInN0cmluZyI9PXR5cGVvZiBuKW9bbl09aTtlbHNle2lmKCFhLmlzUGxhaW5PYmplY3QobikpcmV0dXJuIGw7bz1uLHZvaWQgMD09PXImJihyPWkpfXJldHVybiB2b2lkIDA9PT1yJiYocj1udWxsKSxzKG8sKGZ1bmN0aW9uKHQsbixhKXt2YXIgaSxvO2lmKEFycmF5LmlzQXJyYXkoYSkpe289YS5zbGljZSgpO3ZhciBzPU1hdGgubWluKG8ubGVuZ3RoLGUuZGF0YS5sZW5ndGgpO3ImJihzPU1hdGgubWluKHMsci5sZW5ndGgpKSxpPVtdO2Zvcih2YXIgYz0wO2M8cztjKyspaVtjXT1yP3JbY106Y31lbHNlIG89YSxpPXI/ci5zbGljZSgpOm51bGw7aWYobnVsbD09PWkpQXJyYXkuaXNBcnJheShvKSYmKG89b1swXSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGkpKXtpZighQXJyYXkuaXNBcnJheShvKSl7dmFyIHU9bztvPVtdO2Zvcih2YXIgZD0wO2Q8aS5sZW5ndGg7ZCsrKW9bZF09dX1vLmxlbmd0aD1NYXRoLm1pbihpLmxlbmd0aCxvLmxlbmd0aCl9bC5wdXNoKHt0eXBlOiJkYXRhIixwcm9wOnQsdHJhY2VzOmksdmFsdWU6b30pfSksIiIsMCksbH1mdW5jdGlvbiBzKGUsdCxyLG4pe09iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBvPWVbaV07aWYoIl8iIT09aVswXSl7dmFyIGw9cisobj4wPyIuIjoiIikraTthLmlzUGxhaW5PYmplY3Qobyk/cyhvLHQsbCxuKzEpOnQobCxpLG8pfX0pKX1yLm1hbmFnZUNvbW1hbmRPYnNlcnZlcj1mdW5jdGlvbihlLHQsbixvKXt2YXIgbD17fSxzPSEwO3QmJnQuX2NvbW1hbmRPYnNlcnZlciYmKGw9dC5fY29tbWFuZE9ic2VydmVyKSxsLmNhY2hlfHwobC5jYWNoZT17fSksbC5sb29rdXBUYWJsZT17fTt2YXIgYz1yLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncyhlLG4sbC5sb29rdXBUYWJsZSk7aWYodCYmdC5fY29tbWFuZE9ic2VydmVyKXtpZihjKXJldHVybiBsO2lmKHQuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUpcmV0dXJuIHQuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUoKSx0Ll9jb21tYW5kT2JzZXJ2ZXI9bnVsbCxsfWlmKGMpe2koZSxjLGwuY2FjaGUpLGwuY2hlY2s9ZnVuY3Rpb24oKXtpZihzKXt2YXIgdD1pKGUsYyxsLmNhY2hlKTtyZXR1cm4gdC5jaGFuZ2VkJiZvJiZ2b2lkIDAhPT1sLmxvb2t1cFRhYmxlW3QudmFsdWVdJiYobC5kaXNhYmxlKCksUHJvbWlzZS5yZXNvbHZlKG8oe3ZhbHVlOnQudmFsdWUsdHlwZTpjLnR5cGUscHJvcDpjLnByb3AsdHJhY2VzOmMudHJhY2VzLGluZGV4OmwubG9va3VwVGFibGVbdC52YWx1ZV19KSkudGhlbihsLmVuYWJsZSxsLmVuYWJsZSkpLHQuY2hhbmdlZH19O2Zvcih2YXIgdT1bInBsb3RseV9yZWxheW91dCIsInBsb3RseV9yZWRyYXciLCJwbG90bHlfcmVzdHlsZSIsInBsb3RseV91cGRhdGUiLCJwbG90bHlfYW5pbWF0aW5nZnJhbWUiLCJwbG90bHlfYWZ0ZXJwbG90Il0sZD0wO2Q8dS5sZW5ndGg7ZCsrKWUuX2ludGVybmFsT24odVtkXSxsLmNoZWNrKTtsLnJlbW92ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dS5sZW5ndGg7dCsrKWUuX3JlbW92ZUludGVybmFsTGlzdGVuZXIodVt0XSxsLmNoZWNrKX19ZWxzZSBhLmxvZygiVW5hYmxlIHRvIGF1dG9tYXRpY2FsbHkgYmluZCBwbG90IHVwZGF0ZXMgdG8gQVBJIGNvbW1hbmQiKSxsLmxvb2t1cFRhYmxlPXt9LGwucmVtb3ZlPWZ1bmN0aW9uKCl7fTtyZXR1cm4gbC5kaXNhYmxlPWZ1bmN0aW9uKCl7cz0hMX0sbC5lbmFibGU9ZnVuY3Rpb24oKXtzPSEwfSx0JiYodC5fY29tbWFuZE9ic2VydmVyPWwpLGx9LHIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgYSxpLG89dC5sZW5ndGg7Zm9yKGE9MDthPG87YSsrKXt2YXIgbCxzPXRbYV0sYz1zLm1ldGhvZCx1PXMuYXJncztpZihBcnJheS5pc0FycmF5KHUpfHwodT1bXSksIWMpcmV0dXJuITE7dmFyIGQ9ci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzKGUsYyx1KTtpZigxIT09ZC5sZW5ndGgpcmV0dXJuITE7aWYoaSl7aWYoKGw9ZFswXSkudHlwZSE9PWkudHlwZSlyZXR1cm4hMTtpZihsLnByb3AhPT1pLnByb3ApcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShpLnRyYWNlcykpe2lmKCFBcnJheS5pc0FycmF5KGwudHJhY2VzKSlyZXR1cm4hMTtsLnRyYWNlcy5zb3J0KCk7Zm9yKHZhciBmPTA7ZjxpLnRyYWNlcy5sZW5ndGg7ZisrKWlmKGkudHJhY2VzW2ZdIT09bC50cmFjZXNbZl0pcmV0dXJuITF9ZWxzZSBpZihsLnByb3AhPT1pLnByb3ApcmV0dXJuITF9ZWxzZSBpPWRbMF0sQXJyYXkuaXNBcnJheShpLnRyYWNlcykmJmkudHJhY2VzLnNvcnQoKTt2YXIgcD0obD1kWzBdKS52YWx1ZTtpZihBcnJheS5pc0FycmF5KHApKXtpZigxIT09cC5sZW5ndGgpcmV0dXJuITE7cD1wWzBdfW4mJihuW3BdPWEpfXJldHVybiBpfSxyLmV4ZWN1dGVBUElDb21tYW5kPWZ1bmN0aW9uKGUsdCxyKXtpZigic2tpcCI9PT10KXJldHVybiBQcm9taXNlLnJlc29sdmUoKTt2YXIgaT1uLmFwaU1ldGhvZFJlZ2lzdHJ5W3RdLG89W2VdO0FycmF5LmlzQXJyYXkocil8fChyPVtdKTtmb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKylvLnB1c2gocltsXSk7cmV0dXJuIGkuYXBwbHkobnVsbCxvKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGEud2FybigiQVBJIGNhbGwgdG8gUGxvdGx5LiIrdCsiIHJlamVjdGVkLiIsZSksUHJvbWlzZS5yZWplY3QoZSl9KSl9LHIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz1mdW5jdGlvbihlLHQscil7dmFyIG47c3dpdGNoKEFycmF5LmlzQXJyYXkocil8fChyPVtdKSx0KXtjYXNlInJlc3R5bGUiOm49bChlLHIpO2JyZWFrO2Nhc2UicmVsYXlvdXQiOm49byhlLHIpO2JyZWFrO2Nhc2UidXBkYXRlIjpuPWwoZSxbclswXSxyWzJdXSkuY29uY2F0KG8oZSxbclsxXV0pKTticmVhaztjYXNlImFuaW1hdGUiOm49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0WzBdKSYmMT09PXRbMF0ubGVuZ3RoJiYtMSE9PVsic3RyaW5nIiwibnVtYmVyIl0uaW5kZXhPZih0eXBlb2YgdFswXVswXSk/W3t0eXBlOiJsYXlvdXQiLHByb3A6Il9jdXJyZW50RnJhbWUiLHZhbHVlOnRbMF1bMF0udG9TdHJpbmcoKX1dOltdfSgwLHIpO2JyZWFrO2RlZmF1bHQ6bj1bXX1yZXR1cm4gbn19LHsiLi4vbGliIjoyMzIsIi4uL3JlZ2lzdHJ5IjozMTh9XSwzMDk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ci5hdHRyaWJ1dGVzPWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgcj17dmFsVHlwZToiaW5mb19hcnJheSIsZWRpdFR5cGU6KGU9ZXx8e30pLmVkaXRUeXBlLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZTplLmVkaXRUeXBlfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZTplLmVkaXRUeXBlfV0sZGZsdDpbMCwxXX0sYT0oZS5uYW1lJiZlLm5hbWUsZS50cmFjZSx0LmRlc2NyaXB0aW9uJiZ0LmRlc2NyaXB0aW9uLHt4Om4oe30scix7fSkseTpuKHt9LHIse30pLGVkaXRUeXBlOmUuZWRpdFR5cGV9KTtyZXR1cm4gZS5ub0dyaWRDZWxsfHwoYS5yb3c9e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTplLmVkaXRUeXBlfSxhLmNvbHVtbj17dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOmUuZWRpdFR5cGV9KSxhfSxyLmRlZmF1bHRzPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPW4mJm4ueHx8WzAsMV0saT1uJiZuLnl8fFswLDFdLG89dC5ncmlkO2lmKG8pe3ZhciBsPXIoImRvbWFpbi5jb2x1bW4iKTt2b2lkIDAhPT1sJiYobDxvLmNvbHVtbnM/YT1vLl9kb21haW5zLnhbbF06ZGVsZXRlIGUuZG9tYWluLmNvbHVtbik7dmFyIHM9cigiZG9tYWluLnJvdyIpO3ZvaWQgMCE9PXMmJihzPG8ucm93cz9pPW8uX2RvbWFpbnMueVtzXTpkZWxldGUgZS5kb21haW4ucm93KX12YXIgYz1yKCJkb21haW4ueCIsYSksdT1yKCJkb21haW4ueSIsaSk7Y1swXTxjWzFdfHwoZS5kb21haW4ueD1hLnNsaWNlKCkpLHVbMF08dVsxXXx8KGUuZG9tYWluLnk9aS5zbGljZSgpKX19LHsiLi4vbGliL2V4dGVuZCI6MjI2fV0sMzEwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLmVkaXRUeXBlLHI9ZS5jb2xvckVkaXRUeXBlO3ZvaWQgMD09PXImJihyPXQpO3ZhciBuPXtmYW1pbHk6e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITAsZWRpdFR5cGU6dH0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MSxlZGl0VHlwZTp0fSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOnJ9LGVkaXRUeXBlOnR9O3JldHVybiBlLmF1dG9TaXplJiYobi5zaXplLmRmbHQ9ImF1dG8iKSxlLmF1dG9Db2xvciYmKG4uY29sb3IuZGZsdD0iYXV0byIpLGUuYXJyYXlPayYmKG4uZmFtaWx5LmFycmF5T2s9ITAsbi5zaXplLmFycmF5T2s9ITAsbi5jb2xvci5hcnJheU9rPSEwKSxufX0se31dLDMxMTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6ImZyYW1lc19lbnRyeSIsZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyJ9LG5hbWU6e3ZhbFR5cGU6InN0cmluZyJ9LHRyYWNlczp7dmFsVHlwZToiYW55In0sYmFzZWZyYW1lOnt2YWxUeXBlOiJzdHJpbmcifSxkYXRhOnt2YWxUeXBlOiJhbnkifSxsYXlvdXQ6e3ZhbFR5cGU6ImFueSJ9fX0se31dLDMxMjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9yZWdpc3RyeSIpLGE9ZSgiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuU1VCUExPVF9QQVRURVJOO3IuZ2V0U3VicGxvdENhbGNEYXRhPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1uLnN1YnBsb3RzUmVnaXN0cnlbdF07aWYoIWEpcmV0dXJuW107Zm9yKHZhciBpPWEuYXR0cixvPVtdLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIHM9ZVtsXTtzWzBdLnRyYWNlW2ldPT09ciYmby5wdXNoKHMpfXJldHVybiBvfSxyLmdldE1vZHVsZUNhbGNEYXRhPWZ1bmN0aW9uKGUsdCl7dmFyIHIsYT1bXSxpPVtdO2lmKCEocj0ic3RyaW5nIj09dHlwZW9mIHQ/bi5nZXRNb2R1bGUodCkucGxvdDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnQucGxvdCkpcmV0dXJuW2EsZV07Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPWVbb10scz1sWzBdLnRyYWNlOyEwPT09cy52aXNpYmxlJiYwIT09cy5fbGVuZ3RoJiYocy5fbW9kdWxlLnBsb3Q9PT1yP2EucHVzaChsKTppLnB1c2gobCkpfXJldHVyblthLGldfSxyLmdldFN1YnBsb3REYXRhPWZ1bmN0aW9uKGUsdCxyKXtpZighbi5zdWJwbG90c1JlZ2lzdHJ5W3RdKXJldHVybltdO3ZhciBpLG8sbCxzPW4uc3VicGxvdHNSZWdpc3RyeVt0XS5hdHRyLGM9W107aWYoImdsMmQiPT09dCl7dmFyIHU9ci5tYXRjaChhKTtvPSJ4Iit1WzFdLGw9InkiK3VbMl19Zm9yKHZhciBkPTA7ZDxlLmxlbmd0aDtkKyspaT1lW2RdLCJnbDJkIj09PXQmJm4udHJhY2VJcyhpLCJnbDJkIik/aVtzWzBdXT09PW8mJmlbc1sxXV09PT1sJiZjLnB1c2goaSk6aVtzXT09PXImJmMucHVzaChpKTtyZXR1cm4gY319LHsiLi4vcmVnaXN0cnkiOjMxOCwiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjoyODZ9XSwzMTM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3ZhciByLG4sYT1bMCwwLDAsMF07Zm9yKHI9MDtyPDQ7KytyKWZvcihuPTA7bjw0OysrbilhW25dKz1lWzQqcituXSp0W3JdO3JldHVybiBhfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBuKGUucHJvamVjdGlvbixuKGUudmlldyxuKGUubW9kZWwsW3RbMF0sdFsxXSx0WzJdLDFdKSkpfX0se31dLDMxNDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL2ZvbnRfYXR0cmlidXRlcyIpLGE9ZSgiLi9hbmltYXRpb25fYXR0cmlidXRlcyIpLGk9ZSgiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz1lKCIuLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2F0dHJpYnV0ZXMiKSxsPWUoIi4vcGFkX2F0dHJpYnV0ZXMiKSxzPWUoIi4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9bih7ZWRpdFR5cGU6ImNhbGMifSk7Yy5mYW1pbHkuZGZsdD0nIk9wZW4gU2FucyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxjLnNpemUuZGZsdD0xMixjLmNvbG9yLmRmbHQ9aS5kZWZhdWx0TGluZSx0LmV4cG9ydHM9e2ZvbnQ6Yyx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSxmb250Om4oe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjb250YWluZXIiLHZhbHVlczpbImNvbnRhaW5lciIsInBhcGVyIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiY29udGFpbmVyIix2YWx1ZXM6WyJjb250YWluZXIiLCJwYXBlciJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImF1dG8iLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhdXRvIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0scGFkOnMobCh7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pLHt9KSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx1bmlmb3JtdGV4dDp7bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwiaGlkZSIsInNob3ciXSxkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbWluc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGF1dG9zaXplOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJub25lIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEwLGRmbHQ6NzAwLGVkaXRUeXBlOiJwbG90In0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjoxMCxkZmx0OjQ1MCxlZGl0VHlwZToicGxvdCJ9LG1hcmdpbjp7bDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0scjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0sdDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwMCxlZGl0VHlwZToicGxvdCJ9LGI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4MCxlZGl0VHlwZToicGxvdCJ9LHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxhdXRvZXhwYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxjb21wdXRlZDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHBhcGVyX2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuYmFja2dyb3VuZCxlZGl0VHlwZToicGxvdCJ9LHBsb3RfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LGF1dG90eXBlbnVtYmVyczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY29udmVydCB0eXBlcyIsInN0cmljdCJdLGRmbHQ6ImNvbnZlcnQgdHlwZXMiLGVkaXRUeXBlOiJjYWxjIn0sc2VwYXJhdG9yczp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGhpZGVzb3VyY2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGRmbHQ6aS5kZWZhdWx0cyxlZGl0VHlwZToiY2FsYyJ9LGRhdGFyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0cmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxzZWxlY3Rpb25yZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHRlbXBsYXRlOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sbmV3c2hhcGU6by5uZXdzaGFwZSxhY3RpdmVzaGFwZTpvLmFjdGl2ZXNoYXBlLG1ldGE6e3ZhbFR5cGU6ImFueSIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHRyYW5zaXRpb246cyh7fSxhLnRyYW5zaXRpb24se2VkaXRUeXBlOiJub25lIn0pLF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pfX19LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjoxMDEsIi4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvYXR0cmlidXRlcyI6MTg3LCIuLi9saWIvZXh0ZW5kIjoyMjYsIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjI3MywiLi9mb250X2F0dHJpYnV0ZXMiOjMxMCwiLi9wYWRfYXR0cmlidXRlcyI6MzE1fV0sMzE1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLmVkaXRUeXBlO3JldHVybnt0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTp0fSxyOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTp0fSxiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTp0fSxsOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTp0fSxlZGl0VHlwZTp0fX19LHt9XSwzMTY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgiZDMtdGltZS1mb3JtYXQiKS50aW1lRm9ybWF0TG9jYWxlLGk9ZSgiZDMtZm9ybWF0IikuZm9ybWF0TG9jYWxlLG89ZSgiZmFzdC1pc251bWVyaWMiKSxsPWUoIi4uL3JlZ2lzdHJ5Iikscz1lKCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLGM9ZSgiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHU9ZSgiLi4vbGliIiksZD1lKCIuLi9jb21wb25lbnRzL2NvbG9yIiksZj1lKCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHA9ZSgiLi9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxoPWUoIi4vY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJTZWxlY3QsZz1lKCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksbT1lKCIuL2ZyYW1lX2F0dHJpYnV0ZXMiKSx2PWUoIi4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEseT11LnJlbGlua1ByaXZhdGVLZXlzLHg9dS5fLGI9dC5leHBvcnRzPXt9O3UuZXh0ZW5kRmxhdChiLGwpLGIuYXR0cmlidXRlcz1lKCIuL2F0dHJpYnV0ZXMiKSxiLmF0dHJpYnV0ZXMudHlwZS52YWx1ZXM9Yi5hbGxUeXBlcyxiLmZvbnRBdHRycz1lKCIuL2ZvbnRfYXR0cmlidXRlcyIpLGIubGF5b3V0QXR0cmlidXRlcz1lKCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYi5mb250V2VpZ2h0PSJub3JtYWwiO3ZhciBfPWIudHJhbnNmb3Jtc1JlZ2lzdHJ5LHc9ZSgiLi9jb21tYW5kIik7Yi5leGVjdXRlQVBJQ29tbWFuZD13LmV4ZWN1dGVBUElDb21tYW5kLGIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz13LmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3MsYi5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9dy5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIsYi5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9dy5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3MsYi5yZWRyYXdUZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlPXUuZ2V0R3JhcGhEaXYoZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5fZnVsbExheW91dCYmKGwuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXciKShlKSxsLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKGUpLGwuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKShlKSx0KGIucHJldmlvdXNQcm9taXNlcyhlKSkpfSksMzAwKX0pKX0sYi5yZXNpemU9ZnVuY3Rpb24oZSl7dmFyIHQ7ZT11LmdldEdyYXBoRGl2KGUpO3ZhciByPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UmJiF1LmlzSGlkZGVuKGUpfHxuKG5ldyBFcnJvcigiUmVzaXplIG11c3QgYmUgcGFzc2VkIGEgZGlzcGxheWVkIHBsb3QgZGl2IGVsZW1lbnQuIikpLGUuX3JlZHJhd1RpbWVyJiZjbGVhclRpbWVvdXQoZS5fcmVkcmF3VGltZXIpLGUuX3Jlc29sdmVSZXNpemUmJih0PWUuX3Jlc29sdmVSZXNpemUpLGUuX3Jlc29sdmVSZXNpemU9cixlLl9yZWRyYXdUaW1lcj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2lmKCFlLmxheW91dHx8ZS5sYXlvdXQud2lkdGgmJmUubGF5b3V0LmhlaWdodHx8dS5pc0hpZGRlbihlKSlyKGUpO2Vsc2V7ZGVsZXRlIGUubGF5b3V0LndpZHRoLGRlbGV0ZSBlLmxheW91dC5oZWlnaHQ7dmFyIHQ9ZS5jaGFuZ2VkO2UuYXV0b3BsYXk9ITAsbC5jYWxsKCJyZWxheW91dCIsZSx7YXV0b3NpemU6ITB9KS50aGVuKChmdW5jdGlvbigpe2UuY2hhbmdlZD10LGUuX3Jlc29sdmVSZXNpemU9PT1yJiYoZGVsZXRlIGUuX3Jlc29sdmVSZXNpemUscihlKSl9KSl9fSksMTAwKX0pKTtyZXR1cm4gdCYmdChyKSxyfSxiLnByZXZpb3VzUHJvbWlzZXM9ZnVuY3Rpb24oZSl7aWYoKGUuX3Byb21pc2VzfHxbXSkubGVuZ3RoKXJldHVybiBQcm9taXNlLmFsbChlLl9wcm9taXNlcykudGhlbigoZnVuY3Rpb24oKXtlLl9wcm9taXNlcz1bXX0pKX0sYi5hZGRMaW5rcz1mdW5jdGlvbihlKXtpZihlLl9jb250ZXh0LnNob3dMaW5rfHxlLl9jb250ZXh0LnNob3dTb3VyY2VzKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9dS5lbnN1cmVTaW5nbGUodC5fcGFwZXIsInRleHQiLCJqcy1wbG90LWxpbmstY29udGFpbmVyIiwoZnVuY3Rpb24oZSl7ZS5zdHlsZSh7ImZvbnQtZmFtaWx5IjonIk9wZW4gU2FucyIsIEFyaWFsLCBzYW5zLXNlcmlmJywiZm9udC1zaXplIjoiMTJweCIsZmlsbDpkLmRlZmF1bHRMaW5lLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2UuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstdG8tdG9vbCIsITApLGUuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstc3BhY2VyIiwhMCksZS5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtc291cmNlbGlua3MiLCEwKX0pKX0pKSxhPXIubm9kZSgpLGk9e3k6dC5fcGFwZXIuYXR0cigiaGVpZ2h0IiktOX07ZG9jdW1lbnQuYm9keS5jb250YWlucyhhKSYmYS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT49dC53aWR0aC0yMD8oaVsidGV4dC1hbmNob3IiXT0ic3RhcnQiLGkueD01KTooaVsidGV4dC1hbmNob3IiXT0iZW5kIixpLng9dC5fcGFwZXIuYXR0cigid2lkdGgiKS03KSxyLmF0dHIoaSk7dmFyIG89ci5zZWxlY3QoIi5qcy1saW5rLXRvLXRvb2wiKSxsPXIuc2VsZWN0KCIuanMtbGluay1zcGFjZXIiKSxzPXIuc2VsZWN0KCIuanMtc291cmNlbGlua3MiKTtlLl9jb250ZXh0LnNob3dTb3VyY2VzJiZlLl9jb250ZXh0LnNob3dTb3VyY2VzKGUpLGUuX2NvbnRleHQuc2hvd0xpbmsmJmZ1bmN0aW9uKGUsdCl7dC50ZXh0KCIiKTt2YXIgcj10LmFwcGVuZCgiYSIpLmF0dHIoeyJ4bGluazp4bGluazpocmVmIjoiIyIsY2xhc3M6ImxpbmstLWltcHQgbGluay0tZW1iZWR2aWV3IiwiZm9udC13ZWlnaHQiOiJib2xkIn0pLnRleHQoZS5fY29udGV4dC5saW5rVGV4dCsiICIrU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpKTtpZihlLl9jb250ZXh0LnNlbmREYXRhKXIub24oImNsaWNrIiwoZnVuY3Rpb24oKXtiLnNlbmREYXRhVG9DbG91ZChlKX0pKTtlbHNle3ZhciBuPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgiLyIpLGE9d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyLmF0dHIoeyJ4bGluazp4bGluazpzaG93IjoibmV3IiwieGxpbms6eGxpbms6aHJlZiI6Ii8iK25bMl0uc3BsaXQoIi4iKVswXSsiLyIrblsxXSthfSl9fShlLG8pLGwudGV4dChvLnRleHQoKSYmcy50ZXh0KCk/IiAtICI6IiIpfX0sYi5zZW5kRGF0YVRvQ2xvdWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9KHdpbmRvdy5QTE9UTFlFTlZ8fHt9KS5CQVNFX1VSTHx8ZS5fY29udGV4dC5wbG90bHlTZXJ2ZXJVUkw7aWYodCl7ZS5lbWl0KCJwbG90bHlfYmVmb3JlZXhwb3J0Iik7dmFyIHI9bi5zZWxlY3QoZSkuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImhpZGRlbmZvcm0iKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxhPXIuYXBwZW5kKCJmb3JtIikuYXR0cih7YWN0aW9uOnQrIi9leHRlcm5hbCIsbWV0aG9kOiJwb3N0Iix0YXJnZXQ6Il9ibGFuayJ9KTtyZXR1cm4gYS5hcHBlbmQoImlucHV0IikuYXR0cih7dHlwZToidGV4dCIsbmFtZToiZGF0YSJ9KS5ub2RlKCkudmFsdWU9Yi5ncmFwaEpzb24oZSwhMSwia2VlcGRhdGEiKSxhLm5vZGUoKS5zdWJtaXQoKSxyLnJlbW92ZSgpLGUuZW1pdCgicGxvdGx5X2FmdGVyZXhwb3J0IiksITF9fTt2YXIgVD1bImRheXMiLCJzaG9ydERheXMiLCJtb250aHMiLCJzaG9ydE1vbnRocyIsInBlcmlvZHMiLCJkYXRlVGltZSIsImRhdGUiLCJ0aW1lIiwiZGVjaW1hbCIsInRob3VzYW5kcyIsImdyb3VwaW5nIiwiY3VycmVuY3kiXSxNPVsieWVhciIsIm1vbnRoIiwiZGF5TW9udGgiLCJkYXlNb250aFllYXIiXTtmdW5jdGlvbiBrKGUsdCl7dmFyIHI9ZS5fY29udGV4dC5sb2NhbGU7cnx8KHI9ImVuLVVTIik7dmFyIG49ITEsYT17fTtmdW5jdGlvbiBpKGUpe2Zvcih2YXIgcj0hMCxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07YVtvXXx8KGVbb10/YVtvXT1lW29dOnI9ITEpfXImJihuPSEwKX1mb3IodmFyIG89MDtvPDI7bysrKXtmb3IodmFyIHM9ZS5fY29udGV4dC5sb2NhbGVzLGM9MDtjPDI7YysrKXt2YXIgdT0oc1tyXXx8e30pLmZvcm1hdDtpZih1JiYoaSh1KSxuKSlicmVhaztzPWwubG9jYWxlUmVnaXN0cnl9dmFyIGQ9ci5zcGxpdCgiLSIpWzBdO2lmKG58fGQ9PT1yKWJyZWFrO3I9ZH1yZXR1cm4gbnx8aShsLmxvY2FsZVJlZ2lzdHJ5LmVuLmZvcm1hdCksYX1mdW5jdGlvbiBBKGUsdCl7dmFyIHI9e19mdWxsTGF5b3V0OnR9LG49IngiPT09ZS5faWQuY2hhckF0KDApLGE9ZS5fbWFpbkF4aXMuX2FuY2hvckF4aXMsaT0iIixvPSIiLGw9IiI7aWYoYSYmKGw9YS5fbWFpbkF4aXMuX2lkLGk9bj9lLl9pZCtsOmwrZS5faWQpLCFpfHwhdC5fcGxvdHNbaV0pe2k9IiI7Zm9yKHZhciBzPWUuX2NvdW50ZXJBeGVzLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXSxkPW4/ZS5faWQrdTp1K2UuX2lkO298fChvPWQpO3ZhciBmPXAuZ2V0RnJvbUlkKHIsdSk7aWYobCYmZi5vdmVybGF5aW5nPT09bCl7aT1kO2JyZWFrfX19cmV0dXJuIGl8fG99ZnVuY3Rpb24gTChlKXt2YXIgdD1lLnRyYW5zZm9ybXM7aWYoQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGgpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl0sYT1uLl9tb2R1bGV8fF9bbi50eXBlXTtpZihhJiZhLm1ha2VzRGF0YSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBTKGUsdCxyLG4pe2Zvcih2YXIgYT1lLnRyYW5zZm9ybXMsaT1bZV0sbz0wO288YS5sZW5ndGg7bysrKXt2YXIgbD1hW29dLHM9X1tsLnR5cGVdO3MmJnMudHJhbnNmb3JtJiYoaT1zLnRyYW5zZm9ybShpLHt0cmFuc2Zvcm06bCxmdWxsVHJhY2U6ZSxmdWxsRGF0YTp0LGxheW91dDpyLGZ1bGxMYXlvdXQ6bix0cmFuc2Zvcm1JbmRleDpvfSkpfXJldHVybiBpfWZ1bmN0aW9uIEQoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYicHgiPT09ZS5zdWJzdHIoZS5sZW5ndGgtMikmJnBhcnNlRmxvYXQoZSl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLm1hcmdpbjtpZighZS5fc2l6ZSl7dmFyIHI9ZS5fc2l6ZT17bDpNYXRoLnJvdW5kKHQubCkscjpNYXRoLnJvdW5kKHQuciksdDpNYXRoLnJvdW5kKHQudCksYjpNYXRoLnJvdW5kKHQuYikscDpNYXRoLnJvdW5kKHQucGFkKX07ci53PU1hdGgucm91bmQoZS53aWR0aCktci5sLXIucixyLmg9TWF0aC5yb3VuZChlLmhlaWdodCktci50LXIuYn1lLl9wdXNobWFyZ2lufHwoZS5fcHVzaG1hcmdpbj17fSksZS5fcHVzaG1hcmdpbklkc3x8KGUuX3B1c2htYXJnaW5JZHM9e30pfWIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10JiZ0LnNraXBVcGRhdGVDYWxjLG49ZS5fZnVsbExheW91dHx8e307aWYobi5fc2tpcERlZmF1bHRzKWRlbGV0ZSBuLl9za2lwRGVmYXVsdHM7ZWxzZXt2YXIgbyxzPWUuX2Z1bGxMYXlvdXQ9e30sYz1lLmxheW91dHx8e30sZD1lLl9mdWxsRGF0YXx8W10sZj1lLl9mdWxsRGF0YT1bXSxwPWUuZGF0YXx8W10sZz1lLmNhbGNkYXRhfHxbXSxtPWUuX2NvbnRleHR8fHt9O2UuX3RyYW5zaXRpb25EYXRhfHxiLmNyZWF0ZVRyYW5zaXRpb25EYXRhKGUpLHMuX2RmbHRUaXRsZT17cGxvdDp4KGUsIkNsaWNrIHRvIGVudGVyIFBsb3QgdGl0bGUiKSx4OngoZSwiQ2xpY2sgdG8gZW50ZXIgWCBheGlzIHRpdGxlIikseTp4KGUsIkNsaWNrIHRvIGVudGVyIFkgYXhpcyB0aXRsZSIpLGNvbG9yYmFyOngoZSwiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSIpLGFubm90YXRpb246eChlLCJuZXcgdGV4dCIpfSxzLl90cmFjZVdvcmQ9eChlLCJ0cmFjZSIpO3ZhciB2PWsoZSxUKTtpZihzLl9tYXBib3hBY2Nlc3NUb2tlbj1tLm1hcGJveEFjY2Vzc1Rva2VuLG4uX2luaXRpYWxBdXRvU2l6ZUlzRG9uZSl7dmFyIF89bi53aWR0aCx3PW4uaGVpZ2h0O2Iuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMoYyxzLHYpLGMud2lkdGh8fChzLndpZHRoPV8pLGMuaGVpZ2h0fHwocy5oZWlnaHQ9dyksYi5zYW5pdGl6ZU1hcmdpbnMocyl9ZWxzZXtiLnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKGMscyx2KTt2YXIgQT0hYy53aWR0aHx8IWMuaGVpZ2h0LEw9cy5hdXRvc2l6ZSxTPW0uYXV0b3NpemFibGU7QSYmKEx8fFMpP2IucGxvdEF1dG9TaXplKGUsYyxzKTpBJiZiLnNhbml0aXplTWFyZ2lucyhzKSwhTCYmQSYmKGMud2lkdGg9cy53aWR0aCxjLmhlaWdodD1zLmhlaWdodCl9cy5fZDNsb2NhbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kZWNpbWFsPXQuY2hhckF0KDApLGUudGhvdXNhbmRzPXQuY2hhckF0KDEpLHtudW1iZXJGb3JtYXQ6ZnVuY3Rpb24odCl7dHJ5e3Q9aShlKS5mb3JtYXQodS5hZGp1c3RGb3JtYXQodCkpfWNhdGNoKGUpe3JldHVybiB1Lndhcm5CYWRGb3JtYXQodCksdS5ub0Zvcm1hdH1yZXR1cm4gdH0sdGltZUZvcm1hdDphKGUpLnV0Y0Zvcm1hdH19KHYscy5zZXBhcmF0b3JzKSxzLl9leHRyYUZvcm1hdD1rKGUsTSkscy5faW5pdGlhbEF1dG9TaXplSXNEb25lPSEwLHMuX2RhdGFMZW5ndGg9cC5sZW5ndGgscy5fbW9kdWxlcz1bXSxzLl92aXNpYmxlTW9kdWxlcz1bXSxzLl9iYXNlUGxvdE1vZHVsZXM9W107dmFyIEQ9cy5fc3VicGxvdHM9ZnVuY3Rpb24oKXt2YXIgZSx0LHI9bC5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcyxuPXt9O2lmKCFyKXtyPVtdO3ZhciBhPWwuc3VicGxvdHNSZWdpc3RyeTtmb3IodmFyIGkgaW4gYSl7dmFyIG89YVtpXS5hdHRyO2lmKG8mJihyLnB1c2goaSksQXJyYXkuaXNBcnJheShvKSkpZm9yKHQ9MDt0PG8ubGVuZ3RoO3QrKyl1LnB1c2hVbmlxdWUocixvW3RdKX19Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKyluW3JbZV1dPVtdO3JldHVybiBufSgpLE89cy5fc3Bsb21BeGVzPXt4Ont9LHk6e319LFA9cy5fc3Bsb21TdWJwbG90cz17fTtzLl9zcGxvbUdyaWREZmx0PXt9LHMuX3NjYXR0ZXJTdGFja09wdHM9e30scy5fZmlyc3RTY2F0dGVyPXt9LHMuX2FsaWdubWVudE9wdHM9e30scy5fY29sb3JBeGVzPXt9LHMuX3JlcXVlc3RSYW5nZXNsaWRlcj17fSxzLl90cmFjZVVpZHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGE9dC5sZW5ndGgsaT1bXTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdLl9mdWxsSW5wdXQ7byE9PW4mJmkucHVzaChvKSxuPW99dmFyIGw9aS5sZW5ndGgscz1uZXcgQXJyYXkoYSksYz17fTtmdW5jdGlvbiBkKGUsdCl7c1t0XT1lLGNbZV09MX1mdW5jdGlvbiBmKGUsdCl7aWYoZSYmInN0cmluZyI9PXR5cGVvZiBlJiYhY1tlXSlyZXR1cm4gZChlLHQpLCEwfWZvcihyPTA7cjxhO3IrKyl7dmFyIHA9dFtyXS51aWQ7Im51bWJlciI9PXR5cGVvZiBwJiYocD1TdHJpbmcocCkpLGYocCxyKXx8KHI8bCYmZihpW3JdLnVpZCxyKXx8ZCh1LnJhbmRzdHIoYykscikpfXJldHVybiBzfShkLHApLHMuX2dsb2JhbFRyYW5zZm9ybXM9KGUuX2NvbnRleHR8fHt9KS5nbG9iYWxUcmFuc2Zvcm1zLGIuc3VwcGx5RGF0YURlZmF1bHRzKHAsZixjLHMpO3ZhciBJPU9iamVjdC5rZXlzKE8ueCksUj1PYmplY3Qua2V5cyhPLnkpO2lmKEkubGVuZ3RoPjEmJlIubGVuZ3RoPjEpe2ZvcihsLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsInNpemVEZWZhdWx0cyIpKGMscyksbz0wO288SS5sZW5ndGg7bysrKXUucHVzaFVuaXF1ZShELnhheGlzLElbb10pO2ZvcihvPTA7bzxSLmxlbmd0aDtvKyspdS5wdXNoVW5pcXVlKEQueWF4aXMsUltvXSk7Zm9yKHZhciB6IGluIFApdS5wdXNoVW5pcXVlKEQuY2FydGVzaWFuLHopfWlmKHMuX2hhcz1iLl9oYXNQbG90VHlwZS5iaW5kKHMpLGQubGVuZ3RoPT09Zi5sZW5ndGgpZm9yKG89MDtvPGYubGVuZ3RoO28rKyl5KGZbb10sZFtvXSk7Yi5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cyhjLHMsZixlLl90cmFuc2l0aW9uRGF0YSk7dmFyIE49cy5fdmlzaWJsZU1vZHVsZXMsRj1bXTtmb3Iobz0wO288Ti5sZW5ndGg7bysrKXt2YXIgRT1OW29dLmNyb3NzVHJhY2VEZWZhdWx0cztFJiZ1LnB1c2hVbmlxdWUoRixFKX1mb3Iobz0wO288Ri5sZW5ndGg7bysrKUZbb10oZixzKTtzLl9oYXNPbmx5TGFyZ2VTcGxvbXM9MT09PXMuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGgmJiJzcGxvbSI9PT1zLl9iYXNlUGxvdE1vZHVsZXNbMF0ubmFtZSYmSS5sZW5ndGg+MTUmJlIubGVuZ3RoPjE1JiYwPT09cy5zaGFwZXMubGVuZ3RoJiYwPT09cy5pbWFnZXMubGVuZ3RoLGIubGlua1N1YnBsb3RzKGYscyxkLG4pLGIuY2xlYW5QbG90KGYscyxkLG4pO3ZhciBqPSEoIW4uX2hhc3x8IW4uX2hhcygiZ2wyZCIpKSxIPSEoIXMuX2hhc3x8IXMuX2hhcygiZ2wyZCIpKSxCPSEoIW4uX2hhc3x8IW4uX2hhcygiY2FydGVzaWFuIikpfHxqLFk9ISghcy5faGFzfHwhcy5faGFzKCJjYXJ0ZXNpYW4iKSl8fEg7QiYmIVk/bi5fYmdMYXllci5yZW1vdmUoKTpZJiYhQiYmKHMuX3Nob3VsZENyZWF0ZUJnTGF5ZXI9ITApLG4uX3pvb21sYXllciYmIWUuX2RyYWdnaW5nJiZoKHtfZnVsbExheW91dDpufSksZnVuY3Rpb24oZSx0KXt2YXIgcixuPVtdO3QubWV0YSYmKHI9dC5fbWV0YT17bWV0YTp0Lm1ldGEsbGF5b3V0OnttZXRhOnQubWV0YX19KTtmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIGk9ZVthXTtpLm1ldGE/bltpLmluZGV4XT1pLl9tZXRhPXttZXRhOmkubWV0YX06dC5tZXRhJiYoaS5fbWV0YT17bWV0YTp0Lm1ldGF9KSx0Lm1ldGEmJihpLl9tZXRhLmxheW91dD17bWV0YTp0Lm1ldGF9KX1uLmxlbmd0aCYmKHJ8fChyPXQuX21ldGE9e30pLHIuZGF0YT1uKX0oZixzKSx5KHMsbiksbC5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yc2NhbGUiLCJjcm9zc1RyYWNlRGVmYXVsdHMiKShmLHMpLHMuX3ByZUdVSXx8KHMuX3ByZUdVST17fSkscy5fdHJhY2VQcmVHVUl8fChzLl90cmFjZVByZUdVST17fSk7dmFyIFYsVT1zLl90cmFjZVByZUdVSSxxPXt9O2ZvcihWIGluIFUpcVtWXT0ib2xkIjtmb3Iobz0wO288Zi5sZW5ndGg7bysrKXFbVj1mW29dLl9mdWxsSW5wdXQudWlkXXx8KFVbVl09e30pLHFbVl09Im5ldyI7Zm9yKFYgaW4gcSkib2xkIj09PXFbVl0mJmRlbGV0ZSBVW1ZdO0MocyksbC5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwibWFrZURhdGEiKShzKSxyfHxnLmxlbmd0aCE9PWYubGVuZ3RofHxiLnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyhnLGYpfX0sYi5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXSxhPShlW3JdfHxbXSlbMF07aWYoYSYmYS50cmFjZSl7dmFyIGk9YS50cmFjZTtpZihpLl9oYXNDYWxjVHJhbnNmb3JtKXt2YXIgbyxsLHMsYz1pLl9hcnJheUF0dHJzO2ZvcihvPTA7bzxjLmxlbmd0aDtvKyspbD1jW29dLHM9dS5uZXN0ZWRQcm9wZXJ0eShpLGwpLmdldCgpLnNsaWNlKCksdS5uZXN0ZWRQcm9wZXJ0eShuLGwpLnNldChzKX1hLnRyYWNlPW59fX0sYi5jcmVhdGVUcmFuc2l0aW9uRGF0YT1mdW5jdGlvbihlKXtlLl90cmFuc2l0aW9uRGF0YXx8KGUuX3RyYW5zaXRpb25EYXRhPXt9KSxlLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVzfHwoZS5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcz1bXSksZS5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaHx8KGUuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30pLGUuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyfHwoZS5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXI9MCksZS5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrc3x8KGUuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3M9W10pfSxiLl9oYXNQbG90VHlwZT1mdW5jdGlvbihlKXt2YXIgdCxyPXRoaXMuX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKHQ9MDt0PHIubGVuZ3RoO3QrKylpZihyW3RdLm5hbWU9PT1lKXJldHVybiEwO3ZhciBuPXRoaXMuX21vZHVsZXN8fFtdO2Zvcih0PTA7dDxuLmxlbmd0aDt0Kyspe3ZhciBhPW5bdF0ubmFtZTtpZihhPT09ZSlyZXR1cm4hMDt2YXIgaT1sLm1vZHVsZXNbYV07aWYoaSYmaS5jYXRlZ29yaWVzW2VdKXJldHVybiEwfXJldHVybiExfSxiLmNsZWFuUGxvdD1mdW5jdGlvbihlLHQscixuKXt2YXIgYSxpLG89bi5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgbD1vW2FdO2wuY2xlYW4mJmwuY2xlYW4oZSx0LHIsbil9dmFyIHM9bi5faGFzJiZuLl9oYXMoImdsIiksYz10Ll9oYXMmJnQuX2hhcygiZ2wiKTtzJiYhYyYmdm9pZCAwIT09bi5fZ2xjb250YWluZXImJihuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5yZW1vdmUoKSxuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5uby13ZWJnbCIpLnJlbW92ZSgpLG4uX2dsY2FudmFzPW51bGwpO3ZhciB1PSEhbi5faW5mb2xheWVyO2U6Zm9yKGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGQ9clthXS51aWQ7Zm9yKGk9MDtpPGUubGVuZ3RoO2krKyl7aWYoZD09PWVbaV0udWlkKWNvbnRpbnVlIGV9dSYmbi5faW5mb2xheWVyLnNlbGVjdCgiLmNiIitkKS5yZW1vdmUoKX19LGIubGlua1N1YnBsb3RzPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbz1uLl9wbG90c3x8e30scz10Ll9wbG90cz17fSxjPXQuX3N1YnBsb3RzLGQ9e19mdWxsRGF0YTplLF9mdWxsTGF5b3V0OnR9LGY9Yy5jYXJ0ZXNpYW4uY29uY2F0KGMuZ2wyZHx8W10pO2ZvcihhPTA7YTxmLmxlbmd0aDthKyspe3ZhciBoLGc9ZlthXSxtPW9bZ10sdj1wLmdldEZyb21JZChkLGcsIngiKSx5PXAuZ2V0RnJvbUlkKGQsZywieSIpO2ZvcihtP2g9c1tnXT1tOihoPXNbZ109e30pLmlkPWcsdi5fY291bnRlckF4ZXMucHVzaCh5Ll9pZCkseS5fY291bnRlckF4ZXMucHVzaCh2Ll9pZCksdi5fc3VicGxvdHNXaXRoLnB1c2goZykseS5fc3VicGxvdHNXaXRoLnB1c2goZyksaC54YXhpcz12LGgueWF4aXM9eSxoLl9oYXNDbGlwT25BeGlzRmFsc2U9ITEsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgeD1lW2ldO2lmKHgueGF4aXM9PT1oLnhheGlzLl9pZCYmeC55YXhpcz09PWgueWF4aXMuX2lkJiYhMT09PXguY2xpcG9uYXhpcyl7aC5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX19dmFyIGIsXz1wLmxpc3QoZCxudWxsLCEwKTtmb3IoYT0wO2E8Xy5sZW5ndGg7YSsrKXt2YXIgdz1udWxsOyhiPV9bYV0pLm92ZXJsYXlpbmcmJih3PXAuZ2V0RnJvbUlkKGQsYi5vdmVybGF5aW5nKSkmJncub3ZlcmxheWluZyYmKGIub3ZlcmxheWluZz0hMSx3PW51bGwpLGIuX21haW5BeGlzPXd8fGIsdyYmKGIuZG9tYWluPXcuZG9tYWluLnNsaWNlKCkpLGIuX2FuY2hvckF4aXM9ImZyZWUiPT09Yi5hbmNob3I/bnVsbDpwLmdldEZyb21JZChkLGIuYW5jaG9yKX1mb3IoYT0wO2E8Xy5sZW5ndGg7YSsrKWlmKChiPV9bYV0pLl9jb3VudGVyQXhlcy5zb3J0KHAuaWRTb3J0KSxiLl9zdWJwbG90c1dpdGguc29ydCh1LnN1YnBsb3RTb3J0KSxiLl9tYWluU3VicGxvdD1BKGIsdCksYi5fY291bnRlckF4ZXMubGVuZ3RoJiYoYi5zcGlrZW1vZGUmJi0xIT09Yi5zcGlrZW1vZGUuaW5kZXhPZigiYWNyb3NzIil8fGIuYXV0b21hcmdpbiYmYi5taXJyb3ImJiJmcmVlIiE9PWIuYW5jaG9yfHxsLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShiKSkpe3ZhciBUPTEsTT0wO2ZvcihpPTA7aTxiLl9jb3VudGVyQXhlcy5sZW5ndGg7aSsrKXt2YXIgaz1wLmdldEZyb21JZChkLGIuX2NvdW50ZXJBeGVzW2ldKTtUPU1hdGgubWluKFQsay5kb21haW5bMF0pLE09TWF0aC5tYXgoTSxrLmRvbWFpblsxXSl9VDxNJiYoYi5fY291bnRlckRvbWFpbk1pbj1ULGIuX2NvdW50ZXJEb21haW5NYXg9TSl9fSxiLmNsZWFyRXhwYW5kZWRUcmFjZURlZmF1bHRDb2xvcnM9ZnVuY3Rpb24oZSl7dmFyIHQscixuO2ZvcihyPVtdLCh0PWUuX21vZHVsZS5fY29sb3JBdHRycyl8fChlLl9tb2R1bGUuX2NvbG9yQXR0cnM9dD1bXSxzLmNyYXdsKGUuX21vZHVsZS5hdHRyaWJ1dGVzLChmdW5jdGlvbihlLG4sYSxpKXtyW2ldPW4sci5sZW5ndGg9aSsxLCJjb2xvciI9PT1lLnZhbFR5cGUmJnZvaWQgMD09PWUuZGZsdCYmdC5wdXNoKHIuam9pbigiLiIpKX0pKSksbj0wO248dC5sZW5ndGg7bisrKXt1Lm5lc3RlZFByb3BlcnR5KGUsIl9pbnB1dC4iK3Rbbl0pLmdldCgpfHx1Lm5lc3RlZFByb3BlcnR5KGUsdFtuXSkuc2V0KG51bGwpfX0sYi5zdXBwbHlEYXRhRGVmYXVsdHM9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaSxvLHM9bi5fbW9kdWxlcyxkPW4uX3Zpc2libGVNb2R1bGVzLGY9bi5fYmFzZVBsb3RNb2R1bGVzLHA9MCxoPTA7ZnVuY3Rpb24gZyhlKXt0LnB1c2goZSk7dmFyIHI9ZS5fbW9kdWxlO3ImJih1LnB1c2hVbmlxdWUocyxyKSwhMD09PWUudmlzaWJsZSYmdS5wdXNoVW5pcXVlKGQsciksdS5wdXNoVW5pcXVlKGYsZS5fbW9kdWxlLmJhc2VQbG90TW9kdWxlKSxwKyssITEhPT1lLl9pbnB1dC52aXNpYmxlJiZoKyspfW4uX3RyYW5zZm9ybU1vZHVsZXM9W107dmFyIG09e30sdj1bXSx4PShyLnRlbXBsYXRlfHx7fSkuZGF0YXx8e30sXz1jLnRyYWNlVGVtcGxhdGVyKHgpO2ZvcihhPTA7YTxlLmxlbmd0aDthKyspe2lmKG89ZVthXSwoaT1fLm5ld1RyYWNlKG8pKS51aWQ9bi5fdHJhY2VVaWRzW2FdLGIuc3VwcGx5VHJhY2VEZWZhdWx0cyhvLGksaCxuLGEpLGkuaW5kZXg9YSxpLl9pbnB1dD1vLGkuX2V4cGFuZGVkSW5kZXg9cCxpLnRyYW5zZm9ybXMmJmkudHJhbnNmb3Jtcy5sZW5ndGgpZm9yKHZhciB3PSExIT09by52aXNpYmxlJiYhMT09PWkudmlzaWJsZSxUPVMoaSx0LHIsbiksTT0wO008VC5sZW5ndGg7TSsrKXt2YXIgaz1UW01dLEE9e190ZW1wbGF0ZTppLl90ZW1wbGF0ZSx0eXBlOmkudHlwZSx1aWQ6aS51aWQrTX07dyYmITE9PT1rLnZpc2libGUmJmRlbGV0ZSBrLnZpc2libGUsYi5zdXBwbHlUcmFjZURlZmF1bHRzKGssQSxwLG4sYSkseShBLGspLEEuaW5kZXg9YSxBLl9pbnB1dD1vLEEuX2Z1bGxJbnB1dD1pLEEuX2V4cGFuZGVkSW5kZXg9cCxBLl9leHBhbmRlZElucHV0PWssZyhBKX1lbHNlIGkuX2Z1bGxJbnB1dD1pLGkuX2V4cGFuZGVkSW5wdXQ9aSxnKGkpO2wudHJhY2VJcyhpLCJjYXJwZXRBeGlzIikmJihtW2kuY2FycGV0XT1pKSxsLnRyYWNlSXMoaSwiY2FycGV0RGVwZW5kZW50IikmJnYucHVzaChhKX1mb3IoYT0wO2E8di5sZW5ndGg7YSsrKWlmKChpPXRbdlthXV0pLnZpc2libGUpe3ZhciBMPW1baS5jYXJwZXRdO2kuX2NhcnBldD1MLEwmJkwudmlzaWJsZT8oaS54YXhpcz1MLnhheGlzLGkueWF4aXM9TC55YXhpcyk6aS52aXNpYmxlPSExfX0sYi5zdXBwbHlBbmltYXRpb25EZWZhdWx0cz1mdW5jdGlvbihlKXt2YXIgdDtlPWV8fHt9O3ZhciByPXt9O2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdS5jb2VyY2UoZXx8e30scixnLHQsbil9aWYobigibW9kZSIpLG4oImRpcmVjdGlvbiIpLG4oImZyb21jdXJyZW50IiksQXJyYXkuaXNBcnJheShlLmZyYW1lKSlmb3Ioci5mcmFtZT1bXSx0PTA7dDxlLmZyYW1lLmxlbmd0aDt0Kyspci5mcmFtZVt0XT1iLnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHMoZS5mcmFtZVt0XXx8e30pO2Vsc2Ugci5mcmFtZT1iLnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHMoZS5mcmFtZXx8e30pO2lmKEFycmF5LmlzQXJyYXkoZS50cmFuc2l0aW9uKSlmb3Ioci50cmFuc2l0aW9uPVtdLHQ9MDt0PGUudHJhbnNpdGlvbi5sZW5ndGg7dCsrKXIudHJhbnNpdGlvblt0XT1iLnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyhlLnRyYW5zaXRpb25bdF18fHt9KTtlbHNlIHIudHJhbnNpdGlvbj1iLnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyhlLnRyYW5zaXRpb258fHt9KTtyZXR1cm4gcn0sYi5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gdS5jb2VyY2UoZXx8e30sdCxnLmZyYW1lLHIsbil9cmV0dXJuIHIoImR1cmF0aW9uIikscigicmVkcmF3IiksdH0sYi5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiB1LmNvZXJjZShlfHx7fSx0LGcudHJhbnNpdGlvbixyLG4pfXJldHVybiByKCJkdXJhdGlvbiIpLHIoImVhc2luZyIpLHR9LGIuc3VwcGx5RnJhbWVEZWZhdWx0cz1mdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIHUuY29lcmNlKGUsdCxtLHIsbil9cmV0dXJuIHIoImdyb3VwIikscigibmFtZSIpLHIoInRyYWNlcyIpLHIoImJhc2VmcmFtZSIpLHIoImRhdGEiKSxyKCJsYXlvdXQiKSx0fSxiLnN1cHBseVRyYWNlRGVmYXVsdHM9ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaSxvPW4uY29sb3J3YXl8fGQuZGVmYXVsdHMscz1vW3Ilby5sZW5ndGhdO2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gdS5jb2VyY2UoZSx0LGIuYXR0cmlidXRlcyxyLG4pfXZhciBmPWMoInZpc2libGUiKTtjKCJ0eXBlIiksYygibmFtZSIsbi5fdHJhY2VXb3JkKyIgIithKSxjKCJ1aXJldmlzaW9uIixuLnVpcmV2aXNpb24pO3ZhciBwPWIuZ2V0TW9kdWxlKHQpO2lmKHQuX21vZHVsZT1wLHApe3ZhciBoPXAuYmFzZVBsb3RNb2R1bGUsZz1oLmF0dHIsbT1oLmF0dHJpYnV0ZXM7aWYoZyYmbSl7dmFyIHY9bi5fc3VicGxvdHMseT0iIjtpZihmfHwiZ2wyZCIhPT1oLm5hbWUpe2lmKEFycmF5LmlzQXJyYXkoZykpZm9yKGk9MDtpPGcubGVuZ3RoO2krKyl7dmFyIHg9Z1tpXSxfPXUuY29lcmNlKGUsdCxtLHgpO3ZbeF0mJnUucHVzaFVuaXF1ZSh2W3hdLF8pLHkrPV99ZWxzZSB5PXUuY29lcmNlKGUsdCxtLGcpO3ZbaC5uYW1lXSYmdS5wdXNoVW5pcXVlKHZbaC5uYW1lXSx5KX19fXJldHVybiBmJiYoYygiY3VzdG9tZGF0YSIpLGMoImlkcyIpLGMoIm1ldGEiKSxsLnRyYWNlSXModCwic2hvd0xlZ2VuZCIpPyh1LmNvZXJjZShlLHQscC5hdHRyaWJ1dGVzLnNob3dsZWdlbmQ/cC5hdHRyaWJ1dGVzOmIuYXR0cmlidXRlcywic2hvd2xlZ2VuZCIpLGMoImxlZ2VuZGdyb3VwIiksYygibGVnZW5kZ3JvdXB0aXRsZS50ZXh0IiksYygibGVnZW5kcmFuayIpLHQuX2RmbHRTaG93TGVnZW5kPSEwKTp0Ll9kZmx0U2hvd0xlZ2VuZD0hMSxwJiZwLnN1cHBseURlZmF1bHRzKGUsdCxzLG4pLGwudHJhY2VJcyh0LCJub09wYWNpdHkiKXx8Yygib3BhY2l0eSIpLGwudHJhY2VJcyh0LCJub3RMZWdlbmRJc29sYXRhYmxlIikmJih0LnZpc2libGU9ISF0LnZpc2libGUpLGwudHJhY2VJcyh0LCJub0hvdmVyIil8fCh0LmhvdmVydGVtcGxhdGV8fHUuY29lcmNlSG92ZXJpbmZvKGUsdCxuKSwicGFyY2F0cyIhPT10LnR5cGUmJmwuZ2V0Q29tcG9uZW50TWV0aG9kKCJmeCIsInN1cHBseURlZmF1bHRzIikoZSx0LHMsbikpLHAmJnAuc2VsZWN0UG9pbnRzJiZjKCJzZWxlY3RlZHBvaW50cyIpLGIuc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHMoZSx0LG4pKSx0fSxiLmhhc01ha2VzRGF0YVRyYW5zZm9ybT1MLGIuc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHM9ZnVuY3Rpb24oZSx0LHIpe2lmKHQuX2xlbmd0aHx8TChlKSl7dmFyIG49ci5fZ2xvYmFsVHJhbnNmb3Jtc3x8W10sYT1yLl90cmFuc2Zvcm1Nb2R1bGVzfHxbXTtpZihBcnJheS5pc0FycmF5KGUudHJhbnNmb3Jtcyl8fDAhPT1uLmxlbmd0aClmb3IodmFyIGk9ZS50cmFuc2Zvcm1zfHxbXSxvPW4uY29uY2F0KGkpLGw9dC50cmFuc2Zvcm1zPVtdLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGMsZD1vW3NdLGY9ZC50eXBlLHA9X1tmXSxoPSEoZC5fbW9kdWxlJiZkLl9tb2R1bGU9PT1wKSxnPXAmJiJmdW5jdGlvbiI9PXR5cGVvZiBwLnRyYW5zZm9ybTtwfHx1Lndhcm4oIlVucmVjb2duaXplZCB0cmFuc2Zvcm0gdHlwZSAiK2YrIi4iKSxwJiZwLnN1cHBseURlZmF1bHRzJiYoaHx8Zyk/KChjPXAuc3VwcGx5RGVmYXVsdHMoZCx0LHIsZSkpLnR5cGU9ZixjLl9tb2R1bGU9cCx1LnB1c2hVbmlxdWUoYSxwKSk6Yz11LmV4dGVuZEZsYXQoe30sZCksbC5wdXNoKGMpfX19LGIuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gdS5jb2VyY2UoZSx0LGIubGF5b3V0QXR0cmlidXRlcyxyLG4pfXZhciBhPWUudGVtcGxhdGU7dS5pc1BsYWluT2JqZWN0KGEpJiYodC50ZW1wbGF0ZT1hLHQuX3RlbXBsYXRlPWEubGF5b3V0LHQuX2RhdGFUZW1wbGF0ZT1hLmRhdGEpLG4oImF1dG90eXBlbnVtYmVycyIpO3ZhciBpPXUuY29lcmNlRm9udChuLCJmb250Iiksbz1pLnNpemU7dS5jb2VyY2VGb250KG4sInRpdGxlLmZvbnQiLHUuZXh0ZW5kRmxhdCh7fSxpLHtzaXplOk1hdGgucm91bmQoMS40Km8pfSkpLG4oInRpdGxlLnRleHQiLHQuX2RmbHRUaXRsZS5wbG90KSxuKCJ0aXRsZS54cmVmIiksbigidGl0bGUueXJlZiIpLG4oInRpdGxlLngiKSxuKCJ0aXRsZS55IiksbigidGl0bGUueGFuY2hvciIpLG4oInRpdGxlLnlhbmNob3IiKSxuKCJ0aXRsZS5wYWQudCIpLG4oInRpdGxlLnBhZC5yIiksbigidGl0bGUucGFkLmIiKSxuKCJ0aXRsZS5wYWQubCIpLG4oInVuaWZvcm10ZXh0Lm1vZGUiKSYmbigidW5pZm9ybXRleHQubWluc2l6ZSIpLG4oImF1dG9zaXplIiwhKGUud2lkdGgmJmUuaGVpZ2h0KSksbigid2lkdGgiKSxuKCJoZWlnaHQiKSxuKCJtYXJnaW4ubCIpLG4oIm1hcmdpbi5yIiksbigibWFyZ2luLnQiKSxuKCJtYXJnaW4uYiIpLG4oIm1hcmdpbi5wYWQiKSxuKCJtYXJnaW4uYXV0b2V4cGFuZCIpLGUud2lkdGgmJmUuaGVpZ2h0JiZiLnNhbml0aXplTWFyZ2lucyh0KSxsLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsInNpemVEZWZhdWx0cyIpKGUsdCksbigicGFwZXJfYmdjb2xvciIpLG4oInNlcGFyYXRvcnMiLHIuZGVjaW1hbCtyLnRob3VzYW5kcyksbigiaGlkZXNvdXJjZXMiKSxuKCJjb2xvcndheSIpLG4oImRhdGFyZXZpc2lvbiIpO3ZhciBzPW4oInVpcmV2aXNpb24iKTtuKCJlZGl0cmV2aXNpb24iLHMpLG4oInNlbGVjdGlvbnJldmlzaW9uIixzKSxsLmdldENvbXBvbmVudE1ldGhvZCgibW9kZWJhciIsInN1cHBseUxheW91dERlZmF1bHRzIikoZSx0KSxsLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwic3VwcGx5RHJhd05ld1NoYXBlRGVmYXVsdHMiKShlLHQsbiksbigibWV0YSIpLHUuaXNQbGFpbk9iamVjdChlLnRyYW5zaXRpb24pJiYobigidHJhbnNpdGlvbi5kdXJhdGlvbiIpLG4oInRyYW5zaXRpb24uZWFzaW5nIiksbigidHJhbnNpdGlvbi5vcmRlcmluZyIpKSxsLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKShlLHQsImNhbGVuZGFyIiksbC5nZXRDb21wb25lbnRNZXRob2QoImZ4Iiwic3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMiKShlLHQsbil9LGIucGxvdEF1dG9TaXplPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9ZS5fY29udGV4dHx8e30sbD1pLmZyYW1lTWFyZ2lucyxzPXUuaXNQbG90RGl2KGUpO2lmKHMmJmUuZW1pdCgicGxvdGx5X2F1dG9zaXplIiksaS5maWxsRnJhbWUpbj13aW5kb3cuaW5uZXJXaWR0aCxhPXdpbmRvdy5pbm5lckhlaWdodCxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Vsc2V7dmFyIGM9cz93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKTp7fTtpZihuPUQoYy53aWR0aCl8fEQoYy5tYXhXaWR0aCl8fHIud2lkdGgsYT1EKGMuaGVpZ2h0KXx8RChjLm1heEhlaWdodCl8fHIuaGVpZ2h0LG8obCkmJmw+MCl7dmFyIGQ9MS0yKmw7bj1NYXRoLnJvdW5kKGQqbiksYT1NYXRoLnJvdW5kKGQqYSl9fXZhciBmPWIubGF5b3V0QXR0cmlidXRlcy53aWR0aC5taW4scD1iLmxheW91dEF0dHJpYnV0ZXMuaGVpZ2h0Lm1pbjtuPGYmJihuPWYpLGE8cCYmKGE9cCk7dmFyIGg9IXQud2lkdGgmJk1hdGguYWJzKHIud2lkdGgtbik+MSxnPSF0LmhlaWdodCYmTWF0aC5hYnMoci5oZWlnaHQtYSk+MTsoZ3x8aCkmJihoJiYoci53aWR0aD1uKSxnJiYoci5oZWlnaHQ9YSkpLGUuX2luaXRpYWxBdXRvU2l6ZXx8KGUuX2luaXRpYWxBdXRvU2l6ZT17d2lkdGg6bixoZWlnaHQ6YX0pLGIuc2FuaXRpemVNYXJnaW5zKHIpfSxiLnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbyxzPWwuY29tcG9uZW50c1JlZ2lzdHJ5LGM9dC5fYmFzZVBsb3RNb2R1bGVzLGQ9bC5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbjtmb3IoYSBpbiBzKShvPXNbYV0pLmluY2x1ZGVCYXNlUGxvdCYmby5pbmNsdWRlQmFzZVBsb3QoZSx0KTtmb3IodmFyIGYgaW4gYy5sZW5ndGh8fGMucHVzaChkKSx0Ll9oYXMoImNhcnRlc2lhbiIpJiYobC5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJjb250ZW50RGVmYXVsdHMiKShlLHQpLGQuZmluYWxpemVTdWJwbG90cyhlLHQpKSx0Ll9zdWJwbG90cyl0Ll9zdWJwbG90c1tmXS5zb3J0KHUuc3VicGxvdFNvcnQpO2ZvcihpPTA7aTxjLmxlbmd0aDtpKyspKG89Y1tpXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJm8uc3VwcGx5TGF5b3V0RGVmYXVsdHMoZSx0LHIpO3ZhciBwPXQuX21vZHVsZXM7Zm9yKGk9MDtpPHAubGVuZ3RoO2krKykobz1wW2ldKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmby5zdXBwbHlMYXlvdXREZWZhdWx0cyhlLHQscik7dmFyIGg9dC5fdHJhbnNmb3JtTW9kdWxlcztmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKShvPWhbaV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZvLnN1cHBseUxheW91dERlZmF1bHRzKGUsdCxyLG4pO2ZvcihhIGluIHMpKG89c1thXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJm8uc3VwcGx5TGF5b3V0RGVmYXVsdHMoZSx0LHIpfSxiLnB1cmdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXR8fHt9O3ZvaWQgMCE9PXQuX2dsY29udGFpbmVyJiYodC5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIuZ2wtY2FudmFzIikucmVtb3ZlKCksdC5fZ2xjb250YWluZXIucmVtb3ZlKCksdC5fZ2xjYW52YXM9bnVsbCksdC5fbW9kZUJhciYmdC5fbW9kZUJhci5kZXN0cm95KCksZS5fdHJhbnNpdGlvbkRhdGEmJihlLl90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzJiYoZS5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5sZW5ndGg9MCksZS5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZiYmd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGUuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYpKSx1LmNsZWFyVGhyb3R0bGUoKSx1LmNsZWFyUmVzcG9uc2l2ZShlKSxkZWxldGUgZS5kYXRhLGRlbGV0ZSBlLmxheW91dCxkZWxldGUgZS5fZnVsbERhdGEsZGVsZXRlIGUuX2Z1bGxMYXlvdXQsZGVsZXRlIGUuY2FsY2RhdGEsZGVsZXRlIGUuZW1wdHksZGVsZXRlIGUuZmlkLGRlbGV0ZSBlLnVuZG9xdWV1ZSxkZWxldGUgZS51bmRvbnVtLGRlbGV0ZSBlLmF1dG9wbGF5LGRlbGV0ZSBlLmNoYW5nZWQsZGVsZXRlIGUuX3Byb21pc2VzLGRlbGV0ZSBlLl9yZWRyYXdUaW1lcixkZWxldGUgZS5faG1sdW1jb3VudCxkZWxldGUgZS5faG1waXhjb3VudCxkZWxldGUgZS5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIGUuX3RyYW5zaXRpb25pbmcsZGVsZXRlIGUuX2luaXRpYWxBdXRvU2l6ZSxkZWxldGUgZS5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbixkZWxldGUgZS5fZHJhZ2dpbmcsZGVsZXRlIGUuX2RyYWdnZWQsZGVsZXRlIGUuX2RyYWdkYXRhLGRlbGV0ZSBlLl9ob3ZlcmRhdGEsZGVsZXRlIGUuX3NuYXBzaG90SW5Qcm9ncmVzcyxkZWxldGUgZS5fZWRpdGluZyxkZWxldGUgZS5fbW91c2VEb3duVGltZSxkZWxldGUgZS5fbGVnZW5kTW91c2VEb3duVGltZSxlLnJlbW92ZUFsbExpc3RlbmVycyYmZS5yZW1vdmVBbGxMaXN0ZW5lcnMoKX0sYi5zdHlsZT1mdW5jdGlvbihlKXt2YXIgdCxyPWUuX2Z1bGxMYXlvdXQuX3Zpc2libGVNb2R1bGVzLG49W107Zm9yKHQ9MDt0PHIubGVuZ3RoO3QrKyl7dmFyIGE9clt0XTthLnN0eWxlJiZ1LnB1c2hVbmlxdWUobixhLnN0eWxlKX1mb3IodD0wO3Q8bi5sZW5ndGg7dCsrKW5bdF0oZSl9LGIuc2FuaXRpemVNYXJnaW5zPWZ1bmN0aW9uKGUpe2lmKGUmJmUubWFyZ2luKXt2YXIgdCxyPWUud2lkdGgsbj1lLmhlaWdodCxhPWUubWFyZ2luLGk9ci0oYS5sK2Euciksbz1uLShhLnQrYS5iKTtpPDAmJih0PShyLTEpLyhhLmwrYS5yKSxhLmw9TWF0aC5mbG9vcih0KmEubCksYS5yPU1hdGguZmxvb3IodCphLnIpKSxvPDAmJih0PShuLTEpLyhhLnQrYS5iKSxhLnQ9TWF0aC5mbG9vcih0KmEudCksYS5iPU1hdGguZmxvb3IodCphLmIpKX19LGIuY2xlYXJBdXRvTWFyZ2luSWRzPWZ1bmN0aW9uKGUpe2UuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW5JZHM9e319LGIuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKGUsdCl7ZS5fZnVsbExheW91dC5fcHVzaG1hcmdpbklkc1t0XT0xfTtiLmF1dG9NYXJnaW49ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuX2Z1bGxMYXlvdXQsYT1uLndpZHRoLGk9bi5oZWlnaHQsbz1uLm1hcmdpbixsPXUuY29uc3RyYWluKGEtby5sLW8uciwyLDY0KSxzPXUuY29uc3RyYWluKGktby50LW8uYiwyLDY0KSxjPU1hdGgubWF4KDAsYS1sKSxkPU1hdGgubWF4KDAsaS1zKSxmPW4uX3B1c2htYXJnaW4scD1uLl9wdXNobWFyZ2luSWRzO2lmKCExIT09by5hdXRvZXhwYW5kKXtpZihyKXt2YXIgaD1yLnBhZDtpZih2b2lkIDA9PT1oJiYoaD1NYXRoLm1pbigxMixvLmwsby5yLG8udCxvLmIpKSxjKXt2YXIgZz0oci5sK3IucikvYztnPjEmJihyLmwvPWcsci5yLz1nKX1pZihkKXt2YXIgbT0oci50K3IuYikvZDttPjEmJihyLnQvPW0sci5iLz1tKX12YXIgdj12b2lkIDAhPT1yLnhsP3IueGw6ci54LHk9dm9pZCAwIT09ci54cj9yLnhyOnIueCx4PXZvaWQgMCE9PXIueXQ/ci55dDpyLnksXz12b2lkIDAhPT1yLnliP3IueWI6ci55O2ZbdF09e2w6e3ZhbDp2LHNpemU6ci5sK2h9LHI6e3ZhbDp5LHNpemU6ci5yK2h9LGI6e3ZhbDpfLHNpemU6ci5iK2h9LHQ6e3ZhbDp4LHNpemU6ci50K2h9fSxwW3RdPTF9ZWxzZSBkZWxldGUgZlt0XSxkZWxldGUgcFt0XTtpZighbi5fcmVwbG90dGluZylyZXR1cm4gYi5kb0F1dG9NYXJnaW4oZSl9fSxiLmRvQXV0b01hcmdpbj1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9dC53aWR0aCxuPXQuaGVpZ2h0O3QuX3NpemV8fCh0Ll9zaXplPXt9KSxDKHQpO3ZhciBhPXQuX3NpemUsaT10Lm1hcmdpbixzPXUuZXh0ZW5kRmxhdCh7fSxhKSxjPWkubCxkPWkucixmPWkudCxoPWkuYixnPXQuX3B1c2htYXJnaW4sbT10Ll9wdXNobWFyZ2luSWRzO2lmKCExIT09dC5tYXJnaW4uYXV0b2V4cGFuZCl7Zm9yKHZhciB2IGluIGcpbVt2XXx8ZGVsZXRlIGdbdl07Zm9yKHZhciB5IGluIGcuYmFzZT17bDp7dmFsOjAsc2l6ZTpjfSxyOnt2YWw6MSxzaXplOmR9LHQ6e3ZhbDoxLHNpemU6Zn0sYjp7dmFsOjAsc2l6ZTpofX0sZyl7dmFyIHg9Z1t5XS5sfHx7fSxfPWdbeV0uYnx8e30sdz14LnZhbCxUPXguc2l6ZSxNPV8udmFsLGs9Xy5zaXplO2Zvcih2YXIgQSBpbiBnKXtpZihvKFQpJiZnW0FdLnIpe3ZhciBMPWdbQV0uci52YWwsUz1nW0FdLnIuc2l6ZTtpZihMPncpe3ZhciBEPShUKkwrKFMtcikqdykvKEwtdyksTz0oUyooMS13KSsoVC1yKSooMS1MKSkvKEwtdyk7RCtPPmMrZCYmKGM9RCxkPU8pfX1pZihvKGspJiZnW0FdLnQpe3ZhciBQPWdbQV0udC52YWwsST1nW0FdLnQuc2l6ZTtpZihQPk0pe3ZhciBSPShrKlArKEktbikqTSkvKFAtTSksej0oSSooMS1NKSsoay1uKSooMS1QKSkvKFAtTSk7Uit6PmgrZiYmKGg9UixmPXopfX19fX12YXIgTj11LmNvbnN0cmFpbihyLWkubC1pLnIsMiw2NCksRj11LmNvbnN0cmFpbihuLWkudC1pLmIsMiw2NCksRT1NYXRoLm1heCgwLHItTiksaj1NYXRoLm1heCgwLG4tRik7aWYoRSl7dmFyIEg9KGMrZCkvRTtIPjEmJihjLz1ILGQvPUgpfWlmKGope3ZhciBCPShoK2YpL2o7Qj4xJiYoaC89QixmLz1CKX1pZihhLmw9TWF0aC5yb3VuZChjKSxhLnI9TWF0aC5yb3VuZChkKSxhLnQ9TWF0aC5yb3VuZChmKSxhLmI9TWF0aC5yb3VuZChoKSxhLnA9TWF0aC5yb3VuZChpLnBhZCksYS53PU1hdGgucm91bmQociktYS5sLWEucixhLmg9TWF0aC5yb3VuZChuKS1hLnQtYS5iLCF0Ll9yZXBsb3R0aW5nJiZiLmRpZE1hcmdpbkNoYW5nZShzLGEpKXsiX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQiaW4gdD90Ll9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50Kys6dC5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD0xO3ZhciBZPTMqKDErT2JqZWN0LmtleXMobSkubGVuZ3RoKTtpZih0Ll9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50PFkpcmV0dXJuIGwuY2FsbCgiX2RvUGxvdCIsZSk7dC5fc2l6ZT1zLHUud2FybigiVG9vIG1hbnkgYXV0by1tYXJnaW4gcmVkcmF3cy4iKX0hZnVuY3Rpb24oZSl7dmFyIHQ9cC5saXN0KGUsIiIsITApO1siX2FkanVzdFRpY2tMYWJlbHNPdmVyZmxvdyIsIl9oaWRlQ291bnRlckF4aXNJbnNpZGVUaWNrTGFiZWxzIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl1bZV07biYmbigpfX0pKX0oZSl9O3ZhciBPPVsibCIsInIiLCJ0IiwiYiIsInAiLCJ3IiwiaCJdO2Z1bmN0aW9uIFAoZSx0LHIpe3ZhciBuPSExO3ZhciBhPVtiLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtpZihlLl90cmFuc2l0aW9uRGF0YSlyZXR1cm4gZS5fdHJhbnNpdGlvbmluZz0hMSxmdW5jdGlvbihlKXt2YXIgdD1Qcm9taXNlLnJlc29sdmUoKTtpZighZSlyZXR1cm4gdDtmb3IoO2UubGVuZ3RoOyl0PXQudGhlbihlLnNoaWZ0KCkpO3JldHVybiB0fShlLl90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKX0sci5wcmVwYXJlRm4sYi5yZWhvdmVyLGZ1bmN0aW9uKCl7cmV0dXJuIGUuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbmciLFtdKSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSl7ZS5fdHJhbnNpdGlvbmluZz0hMCx0LmR1cmF0aW9uPjAmJihlLl90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSEwKSxlLl90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goKGZ1bmN0aW9uKCl7bj0hMH0pKSxyLnJlZHJhdyYmZS5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe3JldHVybiBsLmNhbGwoInJlZHJhdyIsZSl9KSksZS5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe2UuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbnRlcnJ1cHRlZCIsW10pfSkpO3ZhciBpPTAsbz0wO2Z1bmN0aW9uIHMoKXtyZXR1cm4gaSsrLGZ1bmN0aW9uKCl7bysrLG58fG8hPT1pfHxmdW5jdGlvbih0KXtpZighZS5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuOyhmdW5jdGlvbihlKXtpZihlKWZvcig7ZS5sZW5ndGg7KWUuc2hpZnQoKX0pKGUuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7aWYoci5yZWRyYXcpcmV0dXJuIGwuY2FsbCgicmVkcmF3IixlKX0pKS50aGVuKChmdW5jdGlvbigpe2UuX3RyYW5zaXRpb25pbmc9ITEsZS5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbj0hMSxlLmVtaXQoInBsb3RseV90cmFuc2l0aW9uZWQiLFtdKX0pKS50aGVuKHQpfShhKX19ci5ydW5GbihzKSxzZXRUaW1lb3V0KHMoKSl9KSl9XSxpPXUuc3luY09yQXN5bmMoYSxlKTtyZXR1cm4gaSYmaS50aGVufHwoaT1Qcm9taXNlLnJlc29sdmUoKSksaS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlfSkpfWIuZGlkTWFyZ2luQ2hhbmdlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjxPLmxlbmd0aDtyKyspe3ZhciBuPU9bcl0sYT1lW25dLGk9dFtuXTtpZighbyhhKXx8TWF0aC5hYnMoaS1hKT4xKXJldHVybiEwfXJldHVybiExfSxiLmdyYXBoSnNvbj1mdW5jdGlvbihlLHQscixuLGEsaSl7KGEmJnQmJiFlLl9mdWxsRGF0YXx8YSYmIXQmJiFlLl9mdWxsTGF5b3V0KSYmYi5zdXBwbHlEZWZhdWx0cyhlKTt2YXIgbz1hP2UuX2Z1bGxEYXRhOmUuZGF0YSxsPWE/ZS5fZnVsbExheW91dDplLmxheW91dCxzPShlLl90cmFuc2l0aW9uRGF0YXx8e30pLl9mcmFtZXM7ZnVuY3Rpb24gYyhlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiB0PyJfZnVuY3Rpb25fIjpudWxsO2lmKHUuaXNQbGFpbk9iamVjdChlKSl7dmFyIG4sYT17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuc29ydCgpLmZvckVhY2goKGZ1bmN0aW9uKGkpe2lmKC0xPT09WyJfIiwiWyJdLmluZGV4T2YoaS5jaGFyQXQoMCkpKWlmKCJmdW5jdGlvbiIhPXR5cGVvZiBlW2ldKXtpZigia2VlcGRhdGEiPT09cil7aWYoInNyYyI9PT1pLnN1YnN0cihpLmxlbmd0aC0zKSlyZXR1cm59ZWxzZSBpZigia2VlcHN0cmVhbSI9PT1yKXtpZigic3RyaW5nIj09dHlwZW9mKG49ZVtpKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjAmJiF1LmlzUGxhaW5PYmplY3QoZS5zdHJlYW0pKXJldHVybn1lbHNlIGlmKCJrZWVwYWxsIiE9PXImJiJzdHJpbmciPT10eXBlb2Yobj1lW2krInNyYyJdKSYmbi5pbmRleE9mKCI6Iik+MClyZXR1cm47YVtpXT1jKGVbaV0sdCl9ZWxzZSB0JiYoYVtpXT0iX2Z1bmN0aW9uIil9KSksYX1yZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSx0KX0pKTp1LmlzVHlwZWRBcnJheShlKT91LnNpbXBsZU1hcChlLHUuaWRlbnRpdHkpOnUuaXNKU0RhdGUoZSk/dS5tczJEYXRlVGltZUxvY2FsKCtlKTplfXZhciBkPXtkYXRhOihvfHxbXSkubWFwKChmdW5jdGlvbihlKXt2YXIgcj1jKGUpO3JldHVybiB0JiZkZWxldGUgci5maXQscn0pKX07aWYoIXQmJihkLmxheW91dD1jKGwpLGEpKXt2YXIgZj1sLl9zaXplO2QubGF5b3V0LmNvbXB1dGVkPXttYXJnaW46e2I6Zi5iLGw6Zi5sLHI6Zi5yLHQ6Zi50fX19cmV0dXJuIHMmJihkLmZyYW1lcz1jKHMpKSxpJiYoZC5jb25maWc9YyhlLl9jb250ZXh0LCEwKSksIm9iamVjdCI9PT1uP2Q6SlNPTi5zdHJpbmdpZnkoZCl9LGIubW9kaWZ5RnJhbWVzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9ZS5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxvPWUuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylzd2l0Y2goKG49dFtyXSkudHlwZSl7Y2FzZSJyZXBsYWNlIjphPW4udmFsdWU7dmFyIGw9KGlbbi5pbmRleF18fHt9KS5uYW1lLHM9YS5uYW1lO2lbbi5pbmRleF09b1tzXT1hLHMhPT1sJiYoZGVsZXRlIG9bbF0sb1tzXT1hKTticmVhaztjYXNlImluc2VydCI6b1soYT1uLnZhbHVlKS5uYW1lXT1hLGkuc3BsaWNlKG4uaW5kZXgsMCxhKTticmVhaztjYXNlImRlbGV0ZSI6ZGVsZXRlIG9bKGE9aVtuLmluZGV4XSkubmFtZV0saS5zcGxpY2Uobi5pbmRleCwxKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LGIuY29tcHV0ZUZyYW1lPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGksbz1lLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2lmKCF0KXRocm93IG5ldyBFcnJvcigiY29tcHV0ZUZyYW1lIG11c3QgYmUgZ2l2ZW4gYSBzdHJpbmcgZnJhbWUgbmFtZSIpO3ZhciBsPW9bdC50b1N0cmluZygpXTtpZighbClyZXR1cm4hMTtmb3IodmFyIHM9W2xdLGM9W2wubmFtZV07bC5iYXNlZnJhbWUmJihsPW9bbC5iYXNlZnJhbWUudG9TdHJpbmcoKV0pJiYtMT09PWMuaW5kZXhPZihsLm5hbWUpOylzLnB1c2gobCksYy5wdXNoKGwubmFtZSk7Zm9yKHZhciB1PXt9O2w9cy5wb3AoKTspaWYobC5sYXlvdXQmJih1LmxheW91dD1iLmV4dGVuZExheW91dCh1LmxheW91dCxsLmxheW91dCkpLGwuZGF0YSl7aWYodS5kYXRhfHwodS5kYXRhPVtdKSwhKG49bC50cmFjZXMpKWZvcihuPVtdLHI9MDtyPGwuZGF0YS5sZW5ndGg7cisrKW5bcl09cjtmb3IodS50cmFjZXN8fCh1LnRyYWNlcz1bXSkscj0wO3I8bC5kYXRhLmxlbmd0aDtyKyspbnVsbCE9KGE9bltyXSkmJigtMT09PShpPXUudHJhY2VzLmluZGV4T2YoYSkpJiYoaT11LmRhdGEubGVuZ3RoLHUudHJhY2VzW2ldPWEpLHUuZGF0YVtpXT1iLmV4dGVuZFRyYWNlKHUuZGF0YVtpXSxsLmRhdGFbcl0pKX1yZXR1cm4gdX0sYi5yZWNvbXB1dGVGcmFtZUhhc2g9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30scj1lLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGE9cltuXTthJiZhLm5hbWUmJih0W2EubmFtZV09YSl9fSxiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxsLHMsYyxkPXUuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHR8fHt9KSxmPXUuZXhwYW5kT2JqZWN0UGF0aHMoZCkscD17fTtpZihyJiZyLmxlbmd0aClmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXZvaWQgMD09PShhPShuPXUubmVzdGVkUHJvcGVydHkoZixyW2ldKSkuZ2V0KCkpP3UubmVzdGVkUHJvcGVydHkocCxyW2ldKS5zZXQobnVsbCk6KG4uc2V0KG51bGwpLHUubmVzdGVkUHJvcGVydHkocCxyW2ldKS5zZXQoYSkpO2lmKGU9dS5leHRlbmREZWVwTm9BcnJheXMoZXx8e30sZiksciYmci5sZW5ndGgpZm9yKGk9MDtpPHIubGVuZ3RoO2krKylpZihzPXUubmVzdGVkUHJvcGVydHkocCxyW2ldKS5nZXQoKSl7Zm9yKGM9KGw9dS5uZXN0ZWRQcm9wZXJ0eShlLHJbaV0pKS5nZXQoKSxBcnJheS5pc0FycmF5KGMpfHwoYz1bXSxsLnNldChjKSksbz0wO288cy5sZW5ndGg7bysrKXt2YXIgaD1zW29dO2Nbb109bnVsbD09PWg/bnVsbDpiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKGNbb10saCl9bC5zZXQoYyl9cmV0dXJuIGV9LGIuZGF0YUFycmF5Q29udGFpbmVycz1bInRyYW5zZm9ybXMiLCJkaW1lbnNpb25zIl0sYi5sYXlvdXRBcnJheUNvbnRhaW5lcnM9bC5sYXlvdXRBcnJheUNvbnRhaW5lcnMsYi5leHRlbmRUcmFjZT1mdW5jdGlvbihlLHQpe3JldHVybiBiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKGUsdCxiLmRhdGFBcnJheUNvbnRhaW5lcnMpfSxiLmV4dGVuZExheW91dD1mdW5jdGlvbihlLHQpe3JldHVybiBiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKGUsdCxiLmxheW91dEFycmF5Q29udGFpbmVycyl9LGIudHJhbnNpdGlvbj1mdW5jdGlvbihlLHQscixuLGEsaSl7dmFyIG89e3JlZHJhdzphLnJlZHJhd30sbD17fSxzPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe2Zvcih2YXIgYT1BcnJheS5pc0FycmF5KHQpP3QubGVuZ3RoOjAsaT1uLnNsaWNlKDAsYSksbz0wO288aS5sZW5ndGg7bysrKXt2YXIgYz1pW29dLGQ9ZS5fZnVsbERhdGFbY10uX21vZHVsZTtpZihkKXtpZihkLmFuaW1hdGFibGUpe3ZhciBmPWQuYmFzZVBsb3RNb2R1bGUubmFtZTtsW2ZdfHwobFtmXT1bXSksbFtmXS5wdXNoKGMpfWUuZGF0YVtpW29dXT1iLmV4dGVuZFRyYWNlKGUuZGF0YVtpW29dXSx0W29dKX19dmFyIHA9dS5leHBhbmRPYmplY3RQYXRocyh1LmV4dGVuZERlZXBOb0FycmF5cyh7fSxyKSksaD0vXlt4eV1heGlzWzAtOV0qJC87Zm9yKHZhciBnIGluIHApaC50ZXN0KGcpJiZkZWxldGUgcFtnXS5yYW5nZTtiLmV4dGVuZExheW91dChlLmxheW91dCxwKSxkZWxldGUgZS5jYWxjZGF0YSxiLnN1cHBseURlZmF1bHRzKGUpLGIuZG9DYWxjZGF0YShlKTt2YXIgbT11LmV4cGFuZE9iamVjdFBhdGhzKHIpO2lmKG0pe3ZhciB2PWUuX2Z1bGxMYXlvdXQuX3Bsb3RzO2Zvcih2YXIgeSBpbiB2KXt2YXIgeD12W3ldLF89eC54YXhpcyx3PXgueWF4aXMsVD1fLnJhbmdlLnNsaWNlKCksTT13LnJhbmdlLnNsaWNlKCksaz1udWxsLEE9bnVsbCxMPW51bGwsUz1udWxsO0FycmF5LmlzQXJyYXkobVtfLl9uYW1lKyIucmFuZ2UiXSk/az1tW18uX25hbWUrIi5yYW5nZSJdLnNsaWNlKCk6QXJyYXkuaXNBcnJheSgobVtfLl9uYW1lXXx8e30pLnJhbmdlKSYmKGs9bVtfLl9uYW1lXS5yYW5nZS5zbGljZSgpKSxBcnJheS5pc0FycmF5KG1bdy5fbmFtZSsiLnJhbmdlIl0pP0E9bVt3Ll9uYW1lKyIucmFuZ2UiXS5zbGljZSgpOkFycmF5LmlzQXJyYXkoKG1bdy5fbmFtZV18fHt9KS5yYW5nZSkmJihBPW1bdy5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSksVCYmayYmKF8ucjJsKFRbMF0pIT09Xy5yMmwoa1swXSl8fF8ucjJsKFRbMV0pIT09Xy5yMmwoa1sxXSkpJiYoTD17eHIwOlQseHIxOmt9KSxNJiZBJiYody5yMmwoTVswXSkhPT13LnIybChBWzBdKXx8dy5yMmwoTVsxXSkhPT13LnIybChBWzFdKSkmJihTPXt5cjA6TSx5cjE6QX0pLChMfHxTKSYmcy5wdXNoKHUuZXh0ZW5kRmxhdCh7cGxvdGluZm86eH0sTCxTKSl9fXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbih0KXt2YXIgbixhLG89ZS5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLGM9cy5sZW5ndGg7aWYocilmb3IoYT0wO2E8by5sZW5ndGg7YSsrKW9bYV0udHJhbnNpdGlvbkF4ZXMmJm9bYV0udHJhbnNpdGlvbkF4ZXMoZSxzLGksdCk7Zm9yKHZhciBkIGluIGM/KChuPXUuZXh0ZW5kRmxhdCh7fSxpKSkuZHVyYXRpb249MCxkZWxldGUgbC5jYXJ0ZXNpYW4pOm49aSxsKXt2YXIgZj1sW2RdO2UuX2Z1bGxEYXRhW2ZbMF1dLl9tb2R1bGUuYmFzZVBsb3RNb2R1bGUucGxvdChlLGYsbix0KX19LFAoZSxpLG8pfSxiLnRyYW5zaXRpb25Gcm9tUmVhY3Q9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9ZS5fZnVsbExheW91dCxpPWEudHJhbnNpdGlvbixvPXt9LGw9W107cmV0dXJuIG8ucHJlcGFyZUZuPWZ1bmN0aW9uKCl7dmFyIGU9YS5fcGxvdHM7Zm9yKHZhciBpIGluIG8ucmVkcmF3PSExLCJzb21lIj09PXQuYW5pbSYmKG8ucmVkcmF3PSEwKSwic29tZSI9PT1yLmFuaW0mJihvLnJlZHJhdz0hMCksZSl7dmFyIHM9ZVtpXSxjPXMueGF4aXMsZD1zLnlheGlzLGY9bltjLl9uYW1lXS5yYW5nZS5zbGljZSgpLHA9bltkLl9uYW1lXS5yYW5nZS5zbGljZSgpLGg9Yy5yYW5nZS5zbGljZSgpLGc9ZC5yYW5nZS5zbGljZSgpO2Muc2V0U2NhbGUoKSxkLnNldFNjYWxlKCk7dmFyIG09bnVsbCx2PW51bGw7Yy5yMmwoZlswXSk9PT1jLnIybChoWzBdKSYmYy5yMmwoZlsxXSk9PT1jLnIybChoWzFdKXx8KG09e3hyMDpmLHhyMTpofSksZC5yMmwocFswXSk9PT1kLnIybChnWzBdKSYmZC5yMmwocFsxXSk9PT1kLnIybChnWzFdKXx8KHY9e3lyMDpwLHlyMTpnfSksKG18fHYpJiZsLnB1c2godS5leHRlbmRGbGF0KHtwbG90aW5mbzpzfSxtLHYpKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LG8ucnVuRm49ZnVuY3Rpb24ocil7Zm9yKHZhciBuLGEsbyxzPWUuX2Z1bGxEYXRhLGM9ZS5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLGQ9W10sZj0wO2Y8cy5sZW5ndGg7ZisrKWQucHVzaChmKTtmdW5jdGlvbiBwKCl7aWYoZS5fZnVsbExheW91dClmb3IodmFyIHQ9MDt0PGMubGVuZ3RoO3QrKyljW3RdLnRyYW5zaXRpb25BeGVzJiZjW3RdLnRyYW5zaXRpb25BeGVzKGUsbCxuLHIpfWZ1bmN0aW9uIGgoKXtpZihlLl9mdWxsTGF5b3V0KWZvcih2YXIgdD0wO3Q8Yy5sZW5ndGg7dCsrKWNbdF0ucGxvdChlLG8sYSxyKX1sLmxlbmd0aCYmdC5hbmltPyJ0cmFjZXMgZmlyc3QiPT09aS5vcmRlcmluZz8obj11LmV4dGVuZEZsYXQoe30saSx7ZHVyYXRpb246MH0pLG89ZCxhPWksc2V0VGltZW91dChwLGkuZHVyYXRpb24pLGgoKSk6KG49aSxvPW51bGwsYT11LmV4dGVuZEZsYXQoe30saSx7ZHVyYXRpb246MH0pLHNldFRpbWVvdXQoaCxuLmR1cmF0aW9uKSxwKCkpOmwubGVuZ3RoPyhuPWkscCgpKTp0LmFuaW0mJihvPWQsYT1pLGgoKSl9LFAoZSxpLG8pfSxiLmRvQ2FsY2RhdGE9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaSxvPXAubGlzdChlKSxjPWUuX2Z1bGxEYXRhLGQ9ZS5fZnVsbExheW91dCxoPW5ldyBBcnJheShjLmxlbmd0aCksZz0oZS5jYWxjZGF0YXx8W10pLnNsaWNlKCk7Zm9yKGUuY2FsY2RhdGE9aCxkLl9udW1Cb3hlcz0wLGQuX251bVZpb2xpbnM9MCxkLl92aW9saW5TY2FsZUdyb3VwU3RhdHM9e30sZS5faG1waXhjb3VudD0wLGUuX2htbHVtY291bnQ9MCxkLl9waWVjb2xvcm1hcD17fSxkLl9zdW5idXJzdGNvbG9ybWFwPXt9LGQuX3RyZWVtYXBjb2xvcm1hcD17fSxkLl9pY2ljbGVjb2xvcm1hcD17fSxkLl9mdW5uZWxhcmVhY29sb3JtYXA9e30sYT0wO2E8Yy5sZW5ndGg7YSsrKUFycmF5LmlzQXJyYXkodCkmJi0xPT09dC5pbmRleE9mKGEpJiYoaFthXT1nW2FdKTtmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKShyPWNbYV0pLl9hcnJheUF0dHJzPXMuZmluZEFycmF5QXR0cmlidXRlcyhyKSxyLl9leHRyZW1lcz17fTt2YXIgbT1kLl9zdWJwbG90cy5wb2xhcnx8W107Zm9yKGE9MDthPG0ubGVuZ3RoO2ErKylvLnB1c2goZFttW2FdXS5yYWRpYWxheGlzLGRbbVthXV0uYW5ndWxhcmF4aXMpO2Zvcih2YXIgdiBpbiBkLl9jb2xvckF4ZXMpe3ZhciB5PWRbdl07ITEhPT15LmNhdXRvJiYoZGVsZXRlIHkuY21pbixkZWxldGUgeS5jbWF4KX12YXIgeD0hMTtmdW5jdGlvbiBiKHQpe2lmKHI9Y1t0XSxuPXIuX21vZHVsZSwhMD09PXIudmlzaWJsZSYmci50cmFuc2Zvcm1zKXtpZihuJiZuLmNhbGMpe3ZhciBhPW4uY2FsYyhlLHIpO2FbMF0mJmFbMF0udCYmYVswXS50Ll9zY2VuZSYmZGVsZXRlIGFbMF0udC5fc2NlbmUuZGlydHl9Zm9yKGk9MDtpPHIudHJhbnNmb3Jtcy5sZW5ndGg7aSsrKXt2YXIgbz1yLnRyYW5zZm9ybXNbaV07KG49X1tvLnR5cGVdKSYmbi5jYWxjVHJhbnNmb3JtJiYoci5faGFzQ2FsY1RyYW5zZm9ybT0hMCx4PSEwLG4uY2FsY1RyYW5zZm9ybShlLHIsbykpfX19ZnVuY3Rpb24gdyh0LGEpe2lmKHI9Y1t0XSwhIShuPXIuX21vZHVsZSkuaXNDb250YWluZXI9PT1hKXt2YXIgbz1bXTtpZighMD09PXIudmlzaWJsZSYmMCE9PXIuX2xlbmd0aCl7ZGVsZXRlIHIuX2luZGV4VG9Qb2ludHM7dmFyIGw9ci50cmFuc2Zvcm1zfHxbXTtmb3IoaT1sLmxlbmd0aC0xO2k+PTA7aS0tKWlmKGxbaV0uZW5hYmxlZCl7ci5faW5kZXhUb1BvaW50cz1sW2ldLl9pbmRleFRvUG9pbnRzO2JyZWFrfW4mJm4uY2FsYyYmKG89bi5jYWxjKGUscikpfUFycmF5LmlzQXJyYXkobykmJm9bMF18fChvPVt7eDpmLHk6Zn1dKSxvWzBdLnR8fChvWzBdLnQ9e30pLG9bMF0udHJhY2U9cixoW3RdPW99fWZvcihSKG8sYyxkKSxhPTA7YTxjLmxlbmd0aDthKyspdyhhLCEwKTtmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKWIoYSk7Zm9yKHgmJlIobyxjLGQpLGE9MDthPGMubGVuZ3RoO2ErKyl3KGEsITApO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspdyhhLCExKTt6KGUpO3ZhciBUPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGksbyxzPVtdO2Z1bmN0aW9uIGMoZSxyLG4pe3ZhciBhPXIuX2lkLmNoYXJBdCgwKTtpZigiaGlzdG9ncmFtMmRjb250b3VyIj09PWUpe3ZhciBpPXIuX2NvdW50ZXJBeGVzWzBdLG89cC5nZXRGcm9tSWQodCxpKSxsPSJ4Ij09PWF8fCJ4Ij09PWkmJiJjYXRlZ29yeSI9PT1vLnR5cGUscz0ieSI9PT1hfHwieSI9PT1pJiYiY2F0ZWdvcnkiPT09by50eXBlO3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiAwPT09ZXx8MD09PXR8fGwmJmU9PT1uW3RdLmxlbmd0aC0xfHxzJiZ0PT09bi5sZW5ndGgtMT8tMTooInkiPT09YT90OmUpLTF9fXJldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiJ5Ij09PWE/dDplfX12YXIgZD17bWluOmZ1bmN0aW9uKGUpe3JldHVybiB1LmFnZ051bXMoTWF0aC5taW4sbnVsbCxlKX0sbWF4OmZ1bmN0aW9uKGUpe3JldHVybiB1LmFnZ051bXMoTWF0aC5tYXgsbnVsbCxlKX0sc3VtOmZ1bmN0aW9uKGUpe3JldHVybiB1LmFnZ051bXMoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLG51bGwsZSl9LHRvdGFsOmZ1bmN0aW9uKGUpe3JldHVybiB1LmFnZ051bXMoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLG51bGwsZSl9LG1lYW46ZnVuY3Rpb24oZSl7cmV0dXJuIHUubWVhbihlKX0sbWVkaWFuOmZ1bmN0aW9uKGUpe3JldHVybiB1Lm1lZGlhbihlKX19O2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBmPWVbcl07aWYoImNhdGVnb3J5Ij09PWYudHlwZSl7dmFyIGg9Zi5jYXRlZ29yeW9yZGVyLm1hdGNoKEkpO2lmKGgpe3ZhciBnPWhbMV0sbT1oWzJdLHY9Zi5faWQuY2hhckF0KDApLHk9IngiPT09dix4PVtdO2ZvcihuPTA7bjxmLl9jYXRlZ29yaWVzLmxlbmd0aDtuKyspeC5wdXNoKFtmLl9jYXRlZ29yaWVzW25dLFtdXSk7Zm9yKG49MDtuPGYuX3RyYWNlSW5kaWNlcy5sZW5ndGg7bisrKXt2YXIgYj1mLl90cmFjZUluZGljZXNbbl0sXz10Ll9mdWxsRGF0YVtiXTtpZighMD09PV8udmlzaWJsZSl7dmFyIHc9Xy50eXBlO2wudHJhY2VJcyhfLCJoaXN0b2dyYW0iKSYmKGRlbGV0ZSBfLl94YXV0b0JpbkZpbmlzaGVkLGRlbGV0ZSBfLl95YXV0b0JpbkZpbmlzaGVkKTt2YXIgVD0ic3Bsb20iPT09dyxNPSJzY2F0dGVyZ2wiPT09dyxrPXQuY2FsY2RhdGFbYl07Zm9yKGE9MDthPGsubGVuZ3RoO2ErKyl7dmFyIEEsTCxTPWtbYV07aWYoVCl7dmFyIEQ9Xy5fYXhlc0RpbVtmLl9pZF07aWYoIXkpe3ZhciBDPV8uX2RpYWdbRF1bMF07QyYmKGY9dC5fZnVsbExheW91dFtwLmlkMm5hbWUoQyldKX12YXIgTz1TLnRyYWNlLmRpbWVuc2lvbnNbRF0udmFsdWVzO2ZvcihpPTA7aTxPLmxlbmd0aDtpKyspZm9yKEE9Zi5fY2F0ZWdvcmllc01hcFtPW2ldXSxvPTA7bzxTLnRyYWNlLmRpbWVuc2lvbnMubGVuZ3RoO28rKylpZihvIT09RCl7dmFyIFA9Uy50cmFjZS5kaW1lbnNpb25zW29dO3hbQV1bMV0ucHVzaChQLnZhbHVlc1tpXSl9fWVsc2UgaWYoTSl7Zm9yKGk9MDtpPFMudC54Lmxlbmd0aDtpKyspeT8oQT1TLnQueFtpXSxMPVMudC55W2ldKTooQT1TLnQueVtpXSxMPVMudC54W2ldKSx4W0FdWzFdLnB1c2goTCk7Uy50JiZTLnQuX3NjZW5lJiZkZWxldGUgUy50Ll9zY2VuZS5kaXJ0eX1lbHNlIGlmKFMuaGFzT3duUHJvcGVydHkoInoiKSl7TD1TLno7dmFyIFI9YyhfLnR5cGUsZixMKTtmb3IoaT0wO2k8TC5sZW5ndGg7aSsrKWZvcihvPTA7bzxMW2ldLmxlbmd0aDtvKyspKEE9UihvLGkpKSsxJiZ4W0FdWzFdLnB1c2goTFtpXVtvXSl9ZWxzZSBmb3Iodm9pZCAwPT09KEE9Uy5wKSYmKEE9U1t2XSksdm9pZCAwPT09KEw9Uy5zKSYmKEw9Uy52KSx2b2lkIDA9PT1MJiYoTD15P1MueTpTLngpLEFycmF5LmlzQXJyYXkoTCl8fChMPXZvaWQgMD09PUw/W106W0xdKSxpPTA7aTxMLmxlbmd0aDtpKyspeFtBXVsxXS5wdXNoKExbaV0pfX19Zi5fY2F0ZWdvcmllc1ZhbHVlPXg7dmFyIHo9W107Zm9yKG49MDtuPHgubGVuZ3RoO24rKyl6LnB1c2goW3hbbl1bMF0sZFtnXSh4W25dWzFdKV0pO3ouc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVsxXS10WzFdfSkpLGYuX2NhdGVnb3JpZXNBZ2dyZWdhdGVkVmFsdWU9eixmLl9pbml0aWFsQ2F0ZWdvcmllcz16Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19KSksImRlc2NlbmRpbmciPT09bSYmZi5faW5pdGlhbENhdGVnb3JpZXMucmV2ZXJzZSgpLHM9cy5jb25jYXQoZi5zb3J0QnlJbml0aWFsQ2F0ZWdvcmllcygpKX19fXJldHVybiBzfShvLGUpO2lmKFQubGVuZ3RoKXtmb3IoZC5fbnVtQm94ZXM9MCxkLl9udW1WaW9saW5zPTAsYT0wO2E8VC5sZW5ndGg7YSsrKXcoVFthXSwhMCk7Zm9yKGE9MDthPFQubGVuZ3RoO2ErKyl3KFRbYV0sITEpO3ooZSl9bC5nZXRDb21wb25lbnRNZXRob2QoImZ4IiwiY2FsYyIpKGUpLGwuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJjYWxjIikoZSl9O3ZhciBJPS8odG90YWx8c3VtfG1pbnxtYXh8bWVhbnxtZWRpYW4pIChhc2NlbmRpbmd8ZGVzY2VuZGluZykvO2Z1bmN0aW9uIFIoZSx0LHIpe3ZhciBuPXt9O2Z1bmN0aW9uIGEoZSl7ZS5jbGVhckNhbGMoKSwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUmJmUuc2V0dXBNdWx0aUNhdGVnb3J5KHQpLG5bZS5faWRdPTF9dS5zaW1wbGVNYXAoZSxhKTtmb3IodmFyIGk9ci5fYXhpc01hdGNoR3JvdXBzfHxbXSxvPTA7bzxpLmxlbmd0aDtvKyspZm9yKHZhciBsIGluIGlbb10pbltsXXx8YShyW3AuaWQybmFtZShsKV0pfWZ1bmN0aW9uIHooZSl7dmFyIHQscixuLGE9ZS5fZnVsbExheW91dCxpPWEuX3Zpc2libGVNb2R1bGVzLG89e307Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyl7dmFyIGw9aVtyXSxzPWwuY3Jvc3NUcmFjZUNhbGM7aWYocyl7dmFyIGM9bC5iYXNlUGxvdE1vZHVsZS5uYW1lO29bY10/dS5wdXNoVW5pcXVlKG9bY10scyk6b1tjXT1bc119fWZvcihuIGluIG8pe3ZhciBkPW9bbl0sZj1hLl9zdWJwbG90c1tuXTtpZihBcnJheS5pc0FycmF5KGYpKWZvcih0PTA7dDxmLmxlbmd0aDt0Kyspe3ZhciBwPWZbdF0saD0iY2FydGVzaWFuIj09PW4/YS5fcGxvdHNbcF06YVtwXTtmb3Iocj0wO3I8ZC5sZW5ndGg7cisrKWRbcl0oZSxoLHApfWVsc2UgZm9yKHI9MDtyPGQubGVuZ3RoO3IrKylkW3JdKGUpfX1iLnJlaG92ZXI9ZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5fcmVob3ZlciYmZS5fZnVsbExheW91dC5fcmVob3ZlcigpfSxiLnJlZHJhZz1mdW5jdGlvbihlKXtlLl9mdWxsTGF5b3V0Ll9yZWRyYWcmJmUuX2Z1bGxMYXlvdXQuX3JlZHJhZygpfSxiLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZT1mdW5jdGlvbihlLHQscixuKXt2YXIgYSxpPXQudHJhY2VIYXNoLG89e307Zm9yKGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGw9clthXSxzPWxbMF0udHJhY2U7cy52aXNpYmxlJiYob1tzLnR5cGVdPW9bcy50eXBlXXx8W10sb1tzLnR5cGVdLnB1c2gobCkpfWZvcih2YXIgYyBpbiBpKWlmKCFvW2NdKXt2YXIgZD1pW2NdWzBdO2RbMF0udHJhY2UudmlzaWJsZT0hMSxvW2NdPVtkXX1mb3IodmFyIGYgaW4gbyl7dmFyIHA9b1tmXTtwWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdChlLHQsdS5maWx0ZXJWaXNpYmxlKHApLG4pfXQudHJhY2VIYXNoPW99LGIucGxvdEJhc2VQbG90PWZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9bC5nZXRNb2R1bGUoZSksbz12KHQuY2FsY2RhdGEsaSlbMF07aS5wbG90KHQsbyxuLGEpfSxiLmNsZWFuQmFzZVBsb3Q9ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaT1hLl9oYXMmJmEuX2hhcyhlKSxvPXIuX2hhcyYmci5faGFzKGUpO2kmJiFvJiZhWyJfIitlKyJsYXllciJdLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjoxMDIsIi4uL2NvbnN0YW50cy9udW1lcmljYWwiOjIxMiwiLi4vbGliIjoyMzIsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjoyNjcsIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjI2OCwiLi4vcGxvdHMvZ2V0X2RhdGEiOjMxMiwiLi4vcmVnaXN0cnkiOjMxOCwiLi9hbmltYXRpb25fYXR0cmlidXRlcyI6MjczLCIuL2F0dHJpYnV0ZXMiOjI3NSwiLi9jYXJ0ZXNpYW4vYXhpc19pZHMiOjI4MywiLi9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiOjI5MCwiLi9jb21tYW5kIjozMDgsIi4vZm9udF9hdHRyaWJ1dGVzIjozMTAsIi4vZnJhbWVfYXR0cmlidXRlcyI6MzExLCIuL2xheW91dF9hdHRyaWJ1dGVzIjozMTQsIkBwbG90bHkvZDMiOjExLCJkMy1mb3JtYXQiOjEzLCJkMy10aW1lLWZvcm1hdCI6MTQsImZhc3QtaXNudW1lcmljIjoxN31dLDMxNzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9jb25zdGFudHMvZG9jcyIpO24uRk9STUFUX0xJTkssbi5EQVRFX0ZPUk1BVF9MSU5LO2Z1bmN0aW9uIGEoZSl7dmFyIHQ9ZS5kZXNjcmlwdGlvbj8iICIrZS5kZXNjcmlwdGlvbjoiIixyPWUua2V5c3x8W107aWYoci5sZW5ndGg+MCl7Zm9yKHZhciBuPVtdLGE9MDthPHIubGVuZ3RoO2ErKyluW2FdPSJgIityW2FdKyJgIjt0Kz0iRmluYWxseSwgdGhlIHRlbXBsYXRlIHN0cmluZyBoYXMgYWNjZXNzIHRvICIsdD0xPT09ci5sZW5ndGg/InZhcmlhYmxlICIrblswXToidmFyaWFibGVzICIrbi5zbGljZSgwLC0xKS5qb2luKCIsICIpKyIgYW5kICIrbi5zbGljZSgtMSkrIi4ifXJldHVybiB0fXIuaG92ZXJ0ZW1wbGF0ZUF0dHJzPWZ1bmN0aW9uKGUsdCl7ZT1lfHx7fTthKHQ9dHx8e30pO3ZhciByPXt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ZS5lZGl0VHlwZXx8Im5vbmUifTtyZXR1cm4hMSE9PWUuYXJyYXlPayYmKHIuYXJyYXlPaz0hMCkscn0sci50ZXh0dGVtcGxhdGVBdHRycz1mdW5jdGlvbihlLHQpe2U9ZXx8e307YSh0PXR8fHt9KTt2YXIgcj17dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOmUuZWRpdFR5cGV8fCJjYWxjIn07cmV0dXJuITEhPT1lLmFycmF5T2smJihyLmFycmF5T2s9ITApLHJ9fSx7Ii4uL2NvbnN0YW50cy9kb2NzIjoyMDl9XSwzMTg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9saWIvbG9nZ2VycyIpLGE9ZSgiLi9saWIvbm9vcCIpLGk9ZSgiLi9saWIvcHVzaF91bmlxdWUiKSxvPWUoIi4vbGliL2lzX3BsYWluX29iamVjdCIpLGw9ZSgiLi9saWIvZG9tIikuYWRkU3R5bGVSdWxlLHM9ZSgiLi9saWIvZXh0ZW5kIiksYz1lKCIuL3Bsb3RzL2F0dHJpYnV0ZXMiKSx1PWUoIi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxkPXMuZXh0ZW5kRmxhdCxmPXMuZXh0ZW5kRGVlcEFsbDtmdW5jdGlvbiBwKGUpe3ZhciB0PWUubmFtZSxhPWUuY2F0ZWdvcmllcyxpPWUubWV0YTtpZihyLm1vZHVsZXNbdF0pbi5sb2coIlR5cGUgIit0KyIgYWxyZWFkeSByZWdpc3RlcmVkIik7ZWxzZXtyLnN1YnBsb3RzUmVnaXN0cnlbZS5iYXNlUGxvdE1vZHVsZS5uYW1lXXx8ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lO2lmKHIuc3VicGxvdHNSZWdpc3RyeVt0XSlyZXR1cm4gdm9pZCBuLmxvZygiUGxvdCB0eXBlICIrdCsiIGFscmVhZHkgcmVnaXN0ZXJlZC4iKTtmb3IodmFyIGEgaW4gdihlKSxyLnN1YnBsb3RzUmVnaXN0cnlbdF09ZSxyLmNvbXBvbmVudHNSZWdpc3RyeSliKGEsZS5uYW1lKX0oZS5iYXNlUGxvdE1vZHVsZSk7Zm9yKHZhciBvPXt9LHM9MDtzPGEubGVuZ3RoO3MrKylvW2Fbc11dPSEwLHIuYWxsQ2F0ZWdvcmllc1thW3NdXT0hMDtmb3IodmFyIGMgaW4gci5tb2R1bGVzW3RdPXtfbW9kdWxlOmUsY2F0ZWdvcmllczpvfSxpJiZPYmplY3Qua2V5cyhpKS5sZW5ndGgmJihyLm1vZHVsZXNbdF0ubWV0YT1pKSxyLmFsbFR5cGVzLnB1c2godCksci5jb21wb25lbnRzUmVnaXN0cnkpeShjLHQpO2UubGF5b3V0QXR0cmlidXRlcyYmZChyLnRyYWNlTGF5b3V0QXR0cmlidXRlcyxlLmxheW91dEF0dHJpYnV0ZXMpO3ZhciB1PWUuYmFzZVBsb3RNb2R1bGUsZj11Lm5hbWU7aWYoIm1hcGJveCI9PT1mKXt2YXIgcD11LmNvbnN0YW50cy5zdHlsZVJ1bGVzO2Zvcih2YXIgaCBpbiBwKWwoIi5qcy1wbG90bHktcGxvdCAucGxvdGx5IC5tYXBib3hnbC0iK2gscFtoXSl9ImdlbyIhPT1mJiYibWFwYm94IiE9PWZ8fHZvaWQgMD09PXR5cGVvZiB3aW5kb3d8fHZvaWQgMCE9PXdpbmRvdy5QbG90bHlHZW9Bc3NldHN8fCh3aW5kb3cuUGxvdGx5R2VvQXNzZXRzPXt0b3BvanNvbjp7fX0pfX1mdW5jdGlvbiBoKGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZS5uYW1lKXRocm93IG5ldyBFcnJvcigiQ29tcG9uZW50IG1vZHVsZSAqbmFtZSogbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgdD1lLm5hbWU7Zm9yKHZhciBuIGluIHIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdPWUsZS5sYXlvdXRBdHRyaWJ1dGVzJiYoZS5sYXlvdXRBdHRyaWJ1dGVzLl9pc0xpbmtlZFRvQXJyYXkmJmkoci5sYXlvdXRBcnJheUNvbnRhaW5lcnMsdCksdihlKSksci5tb2R1bGVzKXkodCxuKTtmb3IodmFyIGEgaW4gci5zdWJwbG90c1JlZ2lzdHJ5KWIodCxhKTtmb3IodmFyIG8gaW4gci50cmFuc2Zvcm1zUmVnaXN0cnkpeCh0LG8pO2Uuc2NoZW1hJiZlLnNjaGVtYS5sYXlvdXQmJmYodSxlLnNjaGVtYS5sYXlvdXQpfWZ1bmN0aW9uIGcoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJUcmFuc2Zvcm0gbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLiIpO3ZhciB0PSJUcmFuc2Zvcm0gbW9kdWxlICIrZS5uYW1lLGE9ImZ1bmN0aW9uIj09dHlwZW9mIGUudHJhbnNmb3JtLGk9ImZ1bmN0aW9uIj09dHlwZW9mIGUuY2FsY1RyYW5zZm9ybTtpZighYSYmIWkpdGhyb3cgbmV3IEVycm9yKHQrIiBpcyBtaXNzaW5nIGEgKnRyYW5zZm9ybSogb3IgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZC4iKTtmb3IodmFyIGwgaW4gYSYmaSYmbi5sb2coW3QrIiBoYXMgYm90aCBhICp0cmFuc2Zvcm0qIGFuZCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy4iLCJQbGVhc2Ugbm90ZSB0aGF0IGFsbCAqdHJhbnNmb3JtKiBtZXRob2RzIGFyZSBleGVjdXRlZCIsImJlZm9yZSBhbGwgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuIl0uam9pbigiICIpKSxvKGUuYXR0cmlidXRlcyl8fG4ubG9nKHQrIiByZWdpc3RlcmVkIHdpdGhvdXQgYW4gKmF0dHJpYnV0ZXMqIG9iamVjdC4iKSwiZnVuY3Rpb24iIT10eXBlb2YgZS5zdXBwbHlEZWZhdWx0cyYmbi5sb2codCsiIHJlZ2lzdGVyZWQgd2l0aG91dCBhICpzdXBwbHlEZWZhdWx0cyogbWV0aG9kLiIpLHIudHJhbnNmb3Jtc1JlZ2lzdHJ5W2UubmFtZV09ZSxyLmNvbXBvbmVudHNSZWdpc3RyeSl4KGwsZS5uYW1lKX1mdW5jdGlvbiBtKGUpe3ZhciB0PWUubmFtZSxuPXQuc3BsaXQoIi0iKVswXSxhPWUuZGljdGlvbmFyeSxpPWUuZm9ybWF0LG89YSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoLGw9aSYmT2JqZWN0LmtleXMoaSkubGVuZ3RoLHM9ci5sb2NhbGVSZWdpc3RyeSxjPXNbdF07aWYoY3x8KHNbdF09Yz17fSksbiE9PXQpe3ZhciB1PXNbbl07dXx8KHNbbl09dT17fSksbyYmdS5kaWN0aW9uYXJ5PT09Yy5kaWN0aW9uYXJ5JiYodS5kaWN0aW9uYXJ5PWEpLGwmJnUuZm9ybWF0PT09Yy5mb3JtYXQmJih1LmZvcm1hdD1pKX1vJiYoYy5kaWN0aW9uYXJ5PWEpLGwmJihjLmZvcm1hdD1pKX1mdW5jdGlvbiB2KGUpe2lmKGUubGF5b3V0QXR0cmlidXRlcyl7dmFyIHQ9ZS5sYXlvdXRBdHRyaWJ1dGVzLl9hcnJheUF0dHJSZWdleHBzO2lmKHQpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaShyLmxheW91dEFycmF5UmVnZXhlcyx0W25dKX19ZnVuY3Rpb24geShlLHQpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W2VdLnNjaGVtYTtpZihuJiZuLnRyYWNlcyl7dmFyIGE9bi50cmFjZXNbdF07YSYmZihyLm1vZHVsZXNbdF0uX21vZHVsZS5hdHRyaWJ1dGVzLGEpfX1mdW5jdGlvbiB4KGUsdCl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbZV0uc2NoZW1hO2lmKG4mJm4udHJhbnNmb3Jtcyl7dmFyIGE9bi50cmFuc2Zvcm1zW3RdO2EmJmYoci50cmFuc2Zvcm1zUmVnaXN0cnlbdF0uYXR0cmlidXRlcyxhKX19ZnVuY3Rpb24gYihlLHQpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W2VdLnNjaGVtYTtpZihuJiZuLnN1YnBsb3RzKXt2YXIgYT1yLnN1YnBsb3RzUmVnaXN0cnlbdF0saT1hLmxheW91dEF0dHJpYnV0ZXMsbz0ic3VicGxvdCI9PT1hLmF0dHI/YS5uYW1lOmEuYXR0cjtBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTt2YXIgbD1uLnN1YnBsb3RzW29dO2kmJmwmJmYoaSxsKX19ZnVuY3Rpb24gXyhlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJihlPWUudHlwZSksZX1yLm1vZHVsZXM9e30sci5hbGxDYXRlZ29yaWVzPXt9LHIuYWxsVHlwZXM9W10sci5zdWJwbG90c1JlZ2lzdHJ5PXt9LHIudHJhbnNmb3Jtc1JlZ2lzdHJ5PXt9LHIuY29tcG9uZW50c1JlZ2lzdHJ5PXt9LHIubGF5b3V0QXJyYXlDb250YWluZXJzPVtdLHIubGF5b3V0QXJyYXlSZWdleGVzPVtdLHIudHJhY2VMYXlvdXRBdHRyaWJ1dGVzPXt9LHIubG9jYWxlUmVnaXN0cnk9e30sci5hcGlNZXRob2RSZWdpc3RyeT17fSxyLmNvbGxlY3RhYmxlU3VicGxvdFR5cGVzPW51bGwsci5yZWdpc3Rlcj1mdW5jdGlvbihlKXtpZihyLmNvbGxlY3RhYmxlU3VicGxvdFR5cGVzPW51bGwsIWUpdGhyb3cgbmV3IEVycm9yKCJObyBhcmd1bWVudCBwYXNzZWQgdG8gUGxvdGx5LnJlZ2lzdGVyLiIpO2UmJiFBcnJheS5pc0FycmF5KGUpJiYoZT1bZV0pO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdO2lmKCFuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtb2R1bGUgd2FzIGF0dGVtcHRlZCB0byBiZSByZWdpc3RlcmVkISIpO3N3aXRjaChuLm1vZHVsZVR5cGUpe2Nhc2UidHJhY2UiOnAobik7YnJlYWs7Y2FzZSJ0cmFuc2Zvcm0iOmcobik7YnJlYWs7Y2FzZSJjb21wb25lbnQiOmgobik7YnJlYWs7Y2FzZSJsb2NhbGUiOm0obik7YnJlYWs7Y2FzZSJhcGlNZXRob2QiOnZhciBhPW4ubmFtZTtyLmFwaU1ldGhvZFJlZ2lzdHJ5W2FdPW4uZm47YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbW9kdWxlIHdhcyBhdHRlbXB0ZWQgdG8gYmUgcmVnaXN0ZXJlZCEiKX19fSxyLmdldE1vZHVsZT1mdW5jdGlvbihlKXt2YXIgdD1yLm1vZHVsZXNbXyhlKV07cmV0dXJuISF0JiZ0Ll9tb2R1bGV9LHIudHJhY2VJcz1mdW5jdGlvbihlLHQpe2lmKCJ2YXJpb3VzIj09PShlPV8oZSkpKXJldHVybiExO3ZhciBhPXIubW9kdWxlc1tlXTtyZXR1cm4gYXx8KGUmJm4ubG9nKCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSAiK2UrIi4iKSxhPXIubW9kdWxlc1tjLnR5cGUuZGZsdF0pLCEhYS5jYXRlZ29yaWVzW3RdfSxyLmdldFRyYW5zZm9ybUluZGljZXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sbj1lLnRyYW5zZm9ybXN8fFtdLGE9MDthPG4ubGVuZ3RoO2ErKyluW2FdLnR5cGU9PT10JiZyLnB1c2goYSk7cmV0dXJuIHJ9LHIuaGFzVHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUudHJhbnNmb3Jtc3x8W10sbj0wO248ci5sZW5ndGg7bisrKWlmKHJbbl0udHlwZT09PXQpcmV0dXJuITA7cmV0dXJuITF9LHIuZ2V0Q29tcG9uZW50TWV0aG9kPWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbZV07cmV0dXJuIG4mJm5bdF18fGF9LHIuY2FsbD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50c1swXSx0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiByLmFwaU1ldGhvZFJlZ2lzdHJ5W2VdLmFwcGx5KG51bGwsdCl9fSx7Ii4vbGliL2RvbSI6MjI0LCIuL2xpYi9leHRlbmQiOjIyNiwiLi9saWIvaXNfcGxhaW5fb2JqZWN0IjoyMzMsIi4vbGliL2xvZ2dlcnMiOjIzNiwiLi9saWIvbm9vcCI6MjQxLCIuL2xpYi9wdXNoX3VuaXF1ZSI6MjQ2LCIuL3Bsb3RzL2F0dHJpYnV0ZXMiOjI3NSwiLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6MzE0fV0sMzE5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL3JlZ2lzdHJ5IiksYT1lKCIuLi9saWIiKSxpPWEuZXh0ZW5kRmxhdCxvPWEuZXh0ZW5kRGVlcDtmdW5jdGlvbiBsKGUpe3ZhciB0O3N3aXRjaChlKXtjYXNlInRoZW1lc19fdGh1bWIiOnQ9e2F1dG9zaXplOiEwLHdpZHRoOjE1MCxoZWlnaHQ6MTUwLHRpdGxlOnt0ZXh0OiIifSxzaG93bGVnZW5kOiExLG1hcmdpbjp7bDo1LHI6NSx0OjUsYjo1LHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7Y2FzZSJ0aHVtYm5haWwiOnQ9e3RpdGxlOnt0ZXh0OiIifSxoaWRlc291cmNlczohMCxzaG93bGVnZW5kOiExLGJvcmRlcndpZHRoOjAsYm9yZGVyY29sb3I6IiIsbWFyZ2luOntsOjEscjoxLHQ6MSxiOjEscGFkOjB9LGFubm90YXRpb25zOltdfTticmVhaztkZWZhdWx0OnQ9e319cmV0dXJuIHR9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsYSxzPWUuZGF0YSxjPWUubGF5b3V0LHU9byhbXSxzKSxkPW8oe30sYyxsKHQudGlsZUNsYXNzKSksZj1lLl9jb250ZXh0fHx7fTtpZih0LndpZHRoJiYoZC53aWR0aD10LndpZHRoKSx0LmhlaWdodCYmKGQuaGVpZ2h0PXQuaGVpZ2h0KSwidGh1bWJuYWlsIj09PXQudGlsZUNsYXNzfHwidGhlbWVzX190aHVtYiI9PT10LnRpbGVDbGFzcyl7ZC5hbm5vdGF0aW9ucz1bXTt2YXIgcD1PYmplY3Qua2V5cyhkKTtmb3Iocj0wO3I8cC5sZW5ndGg7cisrKWE9cFtyXSxbInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdLmluZGV4T2YoYS5zbGljZSgwLDUpKT4tMSYmKGRbcFtyXV0udGl0bGU9e3RleHQ6IiJ9KTtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKXt2YXIgaD11W3JdO2guc2hvd3NjYWxlPSExLGgubWFya2VyJiYoaC5tYXJrZXIuc2hvd3NjYWxlPSExKSxuLnRyYWNlSXMoaCwicGllLWxpa2UiKSYmKGgudGV4dHBvc2l0aW9uPSJub25lIil9fWlmKEFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucykpZm9yKHI9MDtyPHQuYW5ub3RhdGlvbnMubGVuZ3RoO3IrKylkLmFubm90YXRpb25zLnB1c2godC5hbm5vdGF0aW9uc1tyXSk7dmFyIGc9T2JqZWN0LmtleXMoZCkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaCgvXnNjZW5lXGQqJC8pfSkpO2lmKGcubGVuZ3RoKXt2YXIgbT17fTtmb3IoInRodW1ibmFpbCI9PT10LnRpbGVDbGFzcyYmKG09e3RpdGxlOnt0ZXh0OiIifSxzaG93YXhlc2xhYmVsczohMSxzaG93dGlja2xhYmVsczohMSxsaW5ldGlja2VuYWJsZTohMX0pLHI9MDtyPGcubGVuZ3RoO3IrKyl7dmFyIHY9ZFtnW3JdXTt2LnhheGlzfHwodi54YXhpcz17fSksdi55YXhpc3x8KHYueWF4aXM9e30pLHYuemF4aXN8fCh2LnpheGlzPXt9KSxpKHYueGF4aXMsbSksaSh2LnlheGlzLG0pLGkodi56YXhpcyxtKSx2Ll9zY2VuZT1udWxsfX12YXIgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LnRpbGVDbGFzcyYmKHkuY2xhc3NOYW1lPXQudGlsZUNsYXNzKTt2YXIgeD17Z2Q6eSx0ZDp5LGxheW91dDpkLGRhdGE6dSxjb25maWc6e3N0YXRpY1Bsb3Q6dm9pZCAwPT09dC5zdGF0aWNQbG90fHx0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp2b2lkIDA9PT10LnBsb3RHbFBpeGVsUmF0aW8/Mjp0LnBsb3RHbFBpeGVsUmF0aW8sZGlzcGxheWxvZ286dC5kaXNwbGF5bG9nb3x8ITEsc2hvd0xpbms6dC5zaG93TGlua3x8ITEsc2hvd1RpcHM6dC5zaG93VGlwc3x8ITEsbWFwYm94QWNjZXNzVG9rZW46Zi5tYXBib3hBY2Nlc3NUb2tlbn19O3JldHVybiJ0cmFuc3BhcmVudCIhPT10LnNldEJhY2tncm91bmQmJih4LmNvbmZpZy5zZXRCYWNrZ3JvdW5kPXQuc2V0QmFja2dyb3VuZHx8Im9wYXF1ZSIpLHguZ2QuZGVmYXVsdExheW91dD1sKHQudGlsZUNsYXNzKSx4fX0seyIuLi9saWIiOjIzMiwiLi4vcmVnaXN0cnkiOjMxOH1dLDMyMDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIiKSxhPWUoIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIiksaT1lKCIuL2ZpbGVzYXZlciIpLG89ZSgiLi9oZWxwZXJzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIG4uaXNQbGFpbk9iamVjdChlKXx8KHI9bi5nZXRHcmFwaERpdihlKSksKHQ9dHx8e30pLmZvcm1hdD10LmZvcm1hdHx8InBuZyIsdC53aWR0aD10LndpZHRofHxudWxsLHQuaGVpZ2h0PXQuaGVpZ2h0fHxudWxsLHQuaW1hZ2VEYXRhT25seT0hMCxuZXcgUHJvbWlzZSgoZnVuY3Rpb24obCxzKXtyJiZyLl9zbmFwc2hvdEluUHJvZ3Jlc3MmJnMobmV3IEVycm9yKCJTbmFwc2hvdHRpbmcgYWxyZWFkeSBpbiBwcm9ncmVzcy4iKSksbi5pc0lFKCkmJiJzdmciIT09dC5mb3JtYXQmJnMobmV3IEVycm9yKG8uTVNHX0lFX0JBRF9GT1JNQVQpKSxyJiYoci5fc25hcHNob3RJblByb2dyZXNzPSEwKTt2YXIgYz1hKGUsdCksdT10LmZpbGVuYW1lfHxlLmZufHwibmV3cGxvdCI7dSs9Ii4iK3QuZm9ybWF0LnJlcGxhY2UoIi0iLCIuIiksYy50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gciYmKHIuX3NuYXBzaG90SW5Qcm9ncmVzcz0hMSksaShlLHUsdC5mb3JtYXQpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2woZSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3ImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEpLHMoZSl9KSl9KSl9fSx7Ii4uL2xpYiI6MjMyLCIuLi9wbG90X2FwaS90b19pbWFnZSI6MjcxLCIuL2ZpbGVzYXZlciI6MzIxLCIuL2hlbHBlcnMiOjMyMn1dLDMyMTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIiKSxhPWUoIi4vaGVscGVycyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG89ImRvd25sb2FkImluIGk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihsLHMpe3ZhciBjLHU7aWYobi5pc0lFKCkpcmV0dXJuIGM9YS5jcmVhdGVCbG9iKGUsInN2ZyIpLHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihjLHQpLGM9bnVsbCxsKHQpO2lmKG8pcmV0dXJuIGM9YS5jcmVhdGVCbG9iKGUsciksdT1hLmNyZWF0ZU9iamVjdFVSTChjKSxpLmhyZWY9dSxpLmRvd25sb2FkPXQsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKSxpLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpKSxhLnJldm9rZU9iamVjdFVSTCh1KSxjPW51bGwsbCh0KTtpZihuLmlzU2FmYXJpKCkpe3ZhciBkPSJzdmciPT09cj8iLCI6IjtiYXNlNjQsIjtyZXR1cm4gYS5vY3RldFN0cmVhbShkK2VuY29kZVVSSUNvbXBvbmVudChlKSksbCh0KX1zKG5ldyBFcnJvcigiZG93bmxvYWQgZXJyb3IiKSl9KSl9fSx7Ii4uL2xpYiI6MjMyLCIuL2hlbHBlcnMiOjMyMn1dLDMyMjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9yZWdpc3RyeSIpO3IuZ2V0RGVsYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2hhcyYmKGUuX2hhcygiZ2wzZCIpfHxlLl9oYXMoImdsMmQiKXx8ZS5faGFzKCJtYXBib3giKSk/NTAwOjB9LHIuZ2V0UmVkcmF3RnVuYz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtuLmdldENvbXBvbmVudE1ldGhvZCgiY29sb3JiYXIiLCJkcmF3IikoZSl9fSxyLmVuY29kZVNWRz1mdW5jdGlvbihlKXtyZXR1cm4iZGF0YTppbWFnZS9zdmcreG1sLCIrZW5jb2RlVVJJQ29tcG9uZW50KGUpfSxyLmVuY29kZUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuImRhdGE6YXBwbGljYXRpb24vanNvbiwiK2VuY29kZVVSSUNvbXBvbmVudChlKX07dmFyIGE9d2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTDtyLmNyZWF0ZU9iamVjdFVSTD1mdW5jdGlvbihlKXtyZXR1cm4gYS5jcmVhdGVPYmplY3RVUkwoZSl9LHIucmV2b2tlT2JqZWN0VVJMPWZ1bmN0aW9uKGUpe3JldHVybiBhLnJldm9rZU9iamVjdFVSTChlKX0sci5jcmVhdGVCbG9iPWZ1bmN0aW9uKGUsdCl7aWYoInN2ZyI9PT10KXJldHVybiBuZXcgd2luZG93LkJsb2IoW2VdLHt0eXBlOiJpbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgifSk7aWYoImZ1bGwtanNvbiI9PT10KXJldHVybiBuZXcgd2luZG93LkJsb2IoW2VdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTgifSk7dmFyIHI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9bmV3IEFycmF5QnVmZmVyKHQpLG49bmV3IFVpbnQ4QXJyYXkociksYT0wO2E8dDthKyspblthXT1lLmNoYXJDb2RlQXQoYSk7cmV0dXJuIHJ9KHdpbmRvdy5hdG9iKGUpKTtyZXR1cm4gbmV3IHdpbmRvdy5CbG9iKFtyXSx7dHlwZToiaW1hZ2UvIit0fSl9LHIub2N0ZXRTdHJlYW09ZnVuY3Rpb24oZSl7ZG9jdW1lbnQubG9jYXRpb24uaHJlZj0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iK2V9LHIuSU1BR0VfVVJMX1BSRUZJWD0vXmRhdGE6aW1hZ2VcL1x3KztiYXNlNjQsLyxyLk1TR19JRV9CQURfRk9STUFUPSJTb3JyeSBJRSBkb2VzIG5vdCBzdXBwb3J0IGRvd25sb2FkaW5nIGZyb20gY2FudmFzLiBUcnkge2Zvcm1hdDonc3ZnJ30gaW5zdGVhZC4ifSx7Ii4uL3JlZ2lzdHJ5IjozMTh9XSwzMjM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9oZWxwZXJzIiksYT17Z2V0RGVsYXk6bi5nZXREZWxheSxnZXRSZWRyYXdGdW5jOm4uZ2V0UmVkcmF3RnVuYyxjbG9uZTplKCIuL2Nsb25lcGxvdCIpLHRvU1ZHOmUoIi4vdG9zdmciKSxzdmdUb0ltZzplKCIuL3N2Z3RvaW1nIiksdG9JbWFnZTplKCIuL3RvaW1hZ2UiKSxkb3dubG9hZEltYWdlOmUoIi4vZG93bmxvYWQiKX07dC5leHBvcnRzPWF9LHsiLi9jbG9uZXBsb3QiOjMxOSwiLi9kb3dubG9hZCI6MzIwLCIuL2hlbHBlcnMiOjMyMiwiLi9zdmd0b2ltZyI6MzI0LCIuL3RvaW1hZ2UiOjMyNSwiLi90b3N2ZyI6MzI2fV0sMzI0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL2xpYiIpLGE9ZSgiZXZlbnRzIikuRXZlbnRFbWl0dGVyLGk9ZSgiLi9oZWxwZXJzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZW1pdHRlcnx8bmV3IGEscj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxvKXt2YXIgbD13aW5kb3cuSW1hZ2Uscz1lLnN2ZyxjPWUuZm9ybWF0fHwicG5nIjtpZihuLmlzSUUoKSYmInN2ZyIhPT1jKXt2YXIgdT1uZXcgRXJyb3IoaS5NU0dfSUVfQkFEX0ZPUk1BVCk7cmV0dXJuIG8odSksZS5wcm9taXNlP3I6dC5lbWl0KCJlcnJvciIsdSl9dmFyIGQsZixwPWUuY2FudmFzLGg9ZS5zY2FsZXx8MSxnPWUud2lkdGh8fDMwMCxtPWUuaGVpZ2h0fHwxNTAsdj1oKmcseT1oKm0seD1wLmdldENvbnRleHQoIjJkIiksYj1uZXcgbDsic3ZnIj09PWN8fG4uaXNTYWZhcmkoKT9mPWkuZW5jb2RlU1ZHKHMpOihkPWkuY3JlYXRlQmxvYihzLCJzdmciKSxmPWkuY3JlYXRlT2JqZWN0VVJMKGQpKSxwLndpZHRoPXYscC5oZWlnaHQ9eSxiLm9ubG9hZD1mdW5jdGlvbigpe3ZhciByO3N3aXRjaChkPW51bGwsaS5yZXZva2VPYmplY3RVUkwoZiksInN2ZyIhPT1jJiZ4LmRyYXdJbWFnZShiLDAsMCx2LHkpLGMpe2Nhc2UianBlZyI6cj1wLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIpO2JyZWFrO2Nhc2UicG5nIjpyPXAudG9EYXRhVVJMKCJpbWFnZS9wbmciKTticmVhaztjYXNlIndlYnAiOnI9cC50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztjYXNlInN2ZyI6cj1mO2JyZWFrO2RlZmF1bHQ6dmFyIG49IkltYWdlIGZvcm1hdCBpcyBub3QganBlZywgcG5nLCBzdmcgb3Igd2VicC4iO2lmKG8obmV3IEVycm9yKG4pKSwhZS5wcm9taXNlKXJldHVybiB0LmVtaXQoImVycm9yIixuKX1hKHIpLGUucHJvbWlzZXx8dC5lbWl0KCJzdWNjZXNzIixyKX0sYi5vbmVycm9yPWZ1bmN0aW9uKHIpe2lmKGQ9bnVsbCxpLnJldm9rZU9iamVjdFVSTChmKSxvKHIpLCFlLnByb21pc2UpcmV0dXJuIHQuZW1pdCgiZXJyb3IiLHIpfSxiLnNyYz1mfSkpO3JldHVybiBlLnByb21pc2U/cjp0fX0seyIuLi9saWIiOjIzMiwiLi9oZWxwZXJzIjozMjIsZXZlbnRzOjEyfV0sMzI1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixhPWUoIi4uL3JlZ2lzdHJ5IiksaT1lKCIuLi9saWIiKSxvPWUoIi4vaGVscGVycyIpLGw9ZSgiLi9jbG9uZXBsb3QiKSxzPWUoIi4vdG9zdmciKSxjPWUoIi4vc3ZndG9pbWciKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgbix1PWwoZSx7Zm9ybWF0OiJwbmcifSksZD11LmdkO2Quc3R5bGUucG9zaXRpb249ImFic29sdXRlIixkLnN0eWxlLmxlZnQ9Ii01MDAwcHgiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZCk7dmFyIGY9by5nZXRSZWRyYXdGdW5jKGQpO3JldHVybiBhLmNhbGwoIl9kb1Bsb3QiLGQsdS5kYXRhLHUubGF5b3V0LHUuY29uZmlnKS50aGVuKGYpLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIGU9by5nZXREZWxheShkLl9mdWxsTGF5b3V0KTtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3ZhciBlPXMoZCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLmlkPWkucmFuZHN0cigpLChyPWMoe2Zvcm1hdDp0LmZvcm1hdCx3aWR0aDpkLl9mdWxsTGF5b3V0LndpZHRoLGhlaWdodDpkLl9mdWxsTGF5b3V0LmhlaWdodCxjYW52YXM6bixlbWl0dGVyOnIsc3ZnOmV9KSkuY2xlYW49ZnVuY3Rpb24oKXtkJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGQpfX0pLGUpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyLmVtaXQoImVycm9yIixlKX0pKSxyfX0seyIuLi9saWIiOjIzMiwiLi4vcmVnaXN0cnkiOjMxOCwiLi9jbG9uZXBsb3QiOjMxOSwiLi9oZWxwZXJzIjozMjIsIi4vc3ZndG9pbWciOjMyNCwiLi90b3N2ZyI6MzI2LGV2ZW50czoxMn1dLDMyNjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJAcGxvdGx5L2QzIiksYT1lKCIuLi9saWIiKSxpPWUoIi4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89ZSgiLi4vY29tcG9uZW50cy9jb2xvciIpLGw9ZSgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxzPS8iL2csYz1uZXcgUmVnRXhwKCcoIlRPQkVTVFJJUFBFRCl8KFRPQkVTVFJJUFBFRCIpJywiZyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIHUsZCxmPWUuX2Z1bGxMYXlvdXQscD1mLl9wYXBlcixoPWYuX3RvcHBhcGVyLGc9Zi53aWR0aCxtPWYuaGVpZ2h0O3AuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuY2FsbChpLnNldFJlY3QsMCwwLGcsbSkuY2FsbChvLmZpbGwsZi5wYXBlcl9iZ2NvbG9yKTt2YXIgdj1mLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2Zvcih1PTA7dTx2Lmxlbmd0aDt1Kyspe3ZhciB5PXZbdV07eS50b1NWRyYmeS50b1NWRyhlKX1pZihoKXt2YXIgeD1oLm5vZGUoKS5jaGlsZE5vZGVzLGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeCk7Zm9yKHU9MDt1PGIubGVuZ3RoO3UrKyl7dmFyIF89Ylt1XTtfLmNoaWxkTm9kZXMubGVuZ3RoJiZwLm5vZGUoKS5hcHBlbmRDaGlsZChfKX19Zi5fZHJhZ2dlcnMmJmYuX2RyYWdnZXJzLnJlbW92ZSgpLHAubm9kZSgpLnN0eWxlLmJhY2tncm91bmQ9IiIscC5zZWxlY3RBbGwoInRleHQiKS5hdHRyKHsiZGF0YS11bmZvcm1hdHRlZCI6bnVsbCwiZGF0YS1tYXRoIjpudWxsfSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKTtpZigiaGlkZGVuIiE9PXRoaXMuc3R5bGUudmlzaWJpbGl0eSYmIm5vbmUiIT09dGhpcy5zdHlsZS5kaXNwbGF5KXtlLnN0eWxlKHt2aXNpYmlsaXR5Om51bGwsZGlzcGxheTpudWxsfSk7dmFyIHQ9dGhpcy5zdHlsZS5mb250RmFtaWx5O3QmJi0xIT09dC5pbmRleE9mKCciJykmJmUuc3R5bGUoImZvbnQtZmFtaWx5Iix0LnJlcGxhY2UocywiVE9CRVNUUklQUEVEIikpfWVsc2UgZS5yZW1vdmUoKX0pKTt2YXIgdz1bXTtpZihmLl9ncmFkaWVudFVybFF1ZXJ5UGFydHMpZm9yKGQgaW4gZi5fZ3JhZGllbnRVcmxRdWVyeVBhcnRzKXcucHVzaChkKTtpZihmLl9wYXR0ZXJuVXJsUXVlcnlQYXJ0cylmb3IoZCBpbiBmLl9wYXR0ZXJuVXJsUXVlcnlQYXJ0cyl3LnB1c2goZCk7dy5sZW5ndGgmJnAuc2VsZWN0QWxsKHcuam9pbigiLCIpKS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHQ9dGhpcy5zdHlsZS5maWxsO3QmJi0xIT09dC5pbmRleE9mKCJ1cmwoIikmJmUuc3R5bGUoImZpbGwiLHQucmVwbGFjZShzLCJUT0JFU1RSSVBQRUQiKSk7dmFyIHI9dGhpcy5zdHlsZS5zdHJva2U7ciYmLTEhPT1yLmluZGV4T2YoInVybCgiKSYmZS5zdHlsZSgic3Ryb2tlIixyLnJlcGxhY2UocywiVE9CRVNUUklQUEVEIikpfSkpLCJwZGYiIT09dCYmImVwcyIhPT10fHxwLnNlbGVjdEFsbCgiI01hdGhKYXhfU1ZHX2dseXBocyBwYXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwwKSxwLm5vZGUoKS5zZXRBdHRyaWJ1dGVOUyhsLnhtbG5zLCJ4bWxucyIsbC5zdmcpLHAubm9kZSgpLnNldEF0dHJpYnV0ZU5TKGwueG1sbnMsInhtbG5zOnhsaW5rIixsLnhsaW5rKSwic3ZnIj09PXQmJnImJihwLmF0dHIoIndpZHRoIixyKmcpLHAuYXR0cigiaGVpZ2h0IixyKm0pLHAuYXR0cigidmlld0JveCIsIjAgMCAiK2crIiAiK20pKTt2YXIgVD0obmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKS5zZXJpYWxpemVUb1N0cmluZyhwLm5vZGUoKSk7cmV0dXJuIFQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoImRpdiIpLnN0eWxlKHtkaXNwbGF5OiJub25lIn0pLmh0bWwoIiIpLHI9ZS5yZXBsYWNlKC8oJlteO10qOykvZ2ksKGZ1bmN0aW9uKGUpe3JldHVybiImbHQ7Ij09PWU/IiYjNjA7IjoiJnJ0OyI9PT1lPyImIzYyOyI6LTEhPT1lLmluZGV4T2YoIjwiKXx8LTEhPT1lLmluZGV4T2YoIj4iKT8iIjp0Lmh0bWwoZSkudGV4dCgpfSkpO3JldHVybiB0LnJlbW92ZSgpLHJ9KFQpLFQ9KFQ9VC5yZXBsYWNlKC8mKD8hXHcrO3xcI1swLTldKzt8IFwjeFswLTlBLUZdKzspL2csIiZhbXA7IikpLnJlcGxhY2UoYywiJyIpLGEuaXNJRSgpJiYoVD0oVD0oVD1ULnJlcGxhY2UoLyIvZ2ksIiciKSkucmVwbGFjZSgvKFwoJyMpKFteJ10qKSgnXCkpL2dpLCcoIiMkMiIpJykpLnJlcGxhY2UoLyhcXCcpL2dpLCciJykpLFR9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjEwMiwiLi4vY29tcG9uZW50cy9kcmF3aW5nIjoxMjQsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjoyMTMsIi4uL2xpYiI6MjMyLCJAcGxvdGx5L2QzIjoxMX1dLDMyNzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLmk9cjtuLm1lcmdlQXJyYXkodC50ZXh0LGUsInR4Iiksbi5tZXJnZUFycmF5KHQuaG92ZXJ0ZXh0LGUsImh0eCIpO3ZhciBhPXQubWFya2VyO2lmKGEpe24ubWVyZ2VBcnJheShhLm9wYWNpdHksZSwibW8iLCEwKSxuLm1lcmdlQXJyYXkoYS5jb2xvcixlLCJtYyIpO3ZhciBpPWEubGluZTtpJiYobi5tZXJnZUFycmF5KGkuY29sb3IsZSwibWxjIiksbi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGkud2lkdGgsZSwibWx3IikpfX19LHsiLi4vLi4vbGliIjoyMzJ9XSwzMjg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksYT1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxpPWUoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz1lKCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsbD1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9ZSgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYz1lKCIuL2NvbnN0YW50cyIpLHU9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5wYXR0ZXJuLGQ9ZSgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsZj1zKHtlZGl0VHlwZToiY2FsYyIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxwPWQoe30sbi5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDowfSksaD1kKHt3aWR0aDpwLGVkaXRUeXBlOiJjYWxjIn0sbCgibWFya2VyLmxpbmUiKSksZz1kKHtsaW5lOmgsZWRpdFR5cGU6ImNhbGMifSxsKCJtYXJrZXIiKSx7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MSxtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifSxwYXR0ZXJuOnV9KTt0LmV4cG9ydHM9e3g6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHkseHBlcmlvZDpuLnhwZXJpb2QseXBlcmlvZDpuLnlwZXJpb2QseHBlcmlvZDA6bi54cGVyaW9kMCx5cGVyaW9kMDpuLnlwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6bi54cGVyaW9kYWxpZ25tZW50LHlwZXJpb2RhbGlnbm1lbnQ6bi55cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDphKCJ4IikseWhvdmVyZm9ybWF0OmEoInkiKSx0ZXh0Om4udGV4dCx0ZXh0dGVtcGxhdGU6byh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoiYXV0byIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGluc2lkZXRleHRhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImVuZCIsIm1pZGRsZSIsInN0YXJ0Il0sZGZsdDoiZW5kIixlZGl0VHlwZToicGxvdCJ9LHRleHRhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJwbG90In0sdGV4dGZvbnQ6ZCh7fSxmLHt9KSxpbnNpZGV0ZXh0Zm9udDpkKHt9LGYse30pLG91dHNpZGV0ZXh0Zm9udDpkKHt9LGYse30pLGNvbnN0cmFpbnRleHQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJib3RoIiwibm9uZSJdLGRmbHQ6ImJvdGgiLGVkaXRUeXBlOiJjYWxjIn0sY2xpcG9uYXhpczpkKHt9LG4uY2xpcG9uYXhpcyx7fSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxiYXNlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6bnVsbCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6ZyxvZmZzZXRncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sYWxpZ25tZW50Z3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxjb2xvcjpuLnNlbGVjdGVkLm1hcmtlci5jb2xvcixlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDpuLnNlbGVjdGVkLnRleHRmb250LGVkaXRUeXBlOiJzdHlsZSJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpuLnVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksY29sb3I6bi51bnNlbGVjdGVkLm1hcmtlci5jb2xvcixlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDpuLnVuc2VsZWN0ZWQudGV4dGZvbnQsZWRpdFR5cGU6InN0eWxlIn0sX2RlcHJlY2F0ZWQ6e2JhcmRpcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZWRpdFR5cGU6ImNhbGMiLHZhbHVlczpbInYiLCJoIl19fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjEwOSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjEyMywiLi4vLi4vbGliL2V4dGVuZCI6MjI2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6MjgyLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjMxMCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6MzE3LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjM1OCwiLi9jb25zdGFudHMiOjMzMH1dLDMyOTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLGk9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLG89ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxsPWUoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIikscz1lKCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsYyx1LGQsZixwLGg9bi5nZXRGcm9tSWQoZSx0LnhheGlzfHwieCIpLGc9bi5nZXRGcm9tSWQoZSx0LnlheGlzfHwieSIpLG09e21zVVRDOiEoIXQuYmFzZSYmMCE9PXQuYmFzZSl9OyJoIj09PXQub3JpZW50YXRpb24/KHI9aC5tYWtlQ2FsY2RhdGEodCwieCIsbSksdT1nLm1ha2VDYWxjZGF0YSh0LCJ5IiksZD1hKHQsZywieSIsdSksZj0hIXQueXBlcmlvZGFsaWdubWVudCxwPSJ5Iik6KHI9Zy5tYWtlQ2FsY2RhdGEodCwieSIsbSksdT1oLm1ha2VDYWxjZGF0YSh0LCJ4IiksZD1hKHQsaCwieCIsdSksZj0hIXQueHBlcmlvZGFsaWdubWVudCxwPSJ4IiksYz1kLnZhbHM7Zm9yKHZhciB2PU1hdGgubWluKGMubGVuZ3RoLHIubGVuZ3RoKSx5PW5ldyBBcnJheSh2KSx4PTA7eDx2O3grKyl5W3hdPXtwOmNbeF0sczpyW3hdfSxmJiYoeVt4XS5vcmlnX3A9dVt4XSx5W3hdW3ArIkVuZCJdPWQuZW5kc1t4XSx5W3hdW3ArIlN0YXJ0Il09ZC5zdGFydHNbeF0pLHQuaWRzJiYoeVt4XS5pZD1TdHJpbmcodC5pZHNbeF0pKTtyZXR1cm4gaSh0LCJtYXJrZXIiKSYmbyhlLHQse3ZhbHM6dC5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIiLGNMZXR0ZXI6ImMifSksaSh0LCJtYXJrZXIubGluZSIpJiZvKGUsdCx7dmFsczp0Lm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyLmxpbmUiLGNMZXR0ZXI6ImMifSksbCh5LHQpLHMoeSx0KSx5fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6MTEwLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6MTEzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjoyNzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjoyNzksIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjM2MCwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjMyN31dLDMzMDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e1RFWFRQQUQ6MyxldmVudERhdGFLZXlzOlsidmFsdWUiLCJsYWJlbCJdfX0se31dLDMzMTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxpPWUoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz1lKCIuLi8uLi9yZWdpc3RyeSIpLGw9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLmdldEF4aXNHcm91cCxjPWUoIi4vc2lldmUuanMiKTtmdW5jdGlvbiB1KGUsdCxyLG8sdSl7aWYoby5sZW5ndGgpe3ZhciBiLF8sdyxUO3N3aXRjaChmdW5jdGlvbihlLHQpe3ZhciByLGk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG8sbD10W3JdLHM9bFswXS50cmFjZSxjPSJmdW5uZWwiPT09cy50eXBlP3MuX2Jhc2U6cy5iYXNlLHU9ImgiPT09cy5vcmllbnRhdGlvbj9zLnhjYWxlbmRhcjpzLnljYWxlbmRhcixkPSJjYXRlZ29yeSI9PT1lLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZT9mdW5jdGlvbigpe3JldHVybiBudWxsfTplLmQyYztpZihhKGMpKXtmb3IoaT0wO2k8TWF0aC5taW4oYy5sZW5ndGgsbC5sZW5ndGgpO2krKylvPWQoY1tpXSwwLHUpLG4obyk/KGxbaV0uYj0rbyxsW2ldLmhhc0I9MSk6bFtpXS5iPTA7Zm9yKDtpPGwubGVuZ3RoO2krKylsW2ldLmI9MH1lbHNle289ZChjLDAsdSk7dmFyIGY9bihvKTtmb3Iobz1mP286MCxpPTA7aTxsLmxlbmd0aDtpKyspbFtpXS5iPW8sZiYmKGxbaV0uaGFzQj0xKX19fShyLG8pLHUubW9kZSl7Y2FzZSJvdmVybGF5IjpkKHQscixvLHUpO2JyZWFrO2Nhc2UiZ3JvdXAiOmZvcihiPVtdLF89W10sdz0wO3c8by5sZW5ndGg7dysrKXZvaWQgMD09PShUPW9bd10pWzBdLnRyYWNlLm9mZnNldD9fLnB1c2goVCk6Yi5wdXNoKFQpO18ubGVuZ3RoJiZmdW5jdGlvbihlLHQscixuLGEpe3ZhciBvPW5ldyBjKG4se3Bvc0F4aXM6dCxzZXBOZWdWYWw6ITEsb3ZlcmxhcE5vTWVyZ2U6IWEubm9ybX0pOyhmdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGE9ZS5fZnVsbExheW91dCxpPXIucG9zaXRpb25zLG89ci5kaXN0aW5jdFBvc2l0aW9ucyxsPXIubWluRGlmZixjPXIudHJhY2VzLHU9Yy5sZW5ndGgsZD1pLmxlbmd0aCE9PW8ubGVuZ3RoLGY9bCooMS1uLmdhcCksbT1zKGEsdC5faWQpK2NbMF1bMF0udHJhY2Uub3JpZW50YXRpb24sdj1hLl9hbGlnbm1lbnRPcHRzW21dfHx7fSx5PTA7eTx1O3krKyl7dmFyIHgsYixfPWNbeV0sdz1fWzBdLnRyYWNlLFQ9dlt3LmFsaWdubWVudGdyb3VwXXx8e30sTT1PYmplY3Qua2V5cyhULm9mZnNldEdyb3Vwc3x8e30pLmxlbmd0aCxrPSh4PU0/Zi9NOmQ/Zi91OmYpKigxLShuLmdyb3VwZ2FwfHwwKSk7Yj1NPygoMip3Ll9vZmZzZXRJbmRleCsxLU0pKngtaykvMjpkPygoMip5KzEtdSkqeC1rKS8yOi1rLzI7dmFyIEE9X1swXS50O0EuYmFyd2lkdGg9ayxBLnBvZmZzZXQ9YixBLmJhcmdyb3Vwd2lkdGg9ZixBLmJhcmRlbHRhPWx9ci5iaW5XaWR0aD1jWzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAociksaCh0LHIpLGcodCxyLGQpfSkoZSx0LG8sYSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS50cmFjZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgYT1yW25dO2lmKHZvaWQgMD09PWFbMF0udHJhY2UuYmFzZSlmb3IodmFyIG89bmV3IGMoW2FdLHtwb3NBeGlzOnQsc2VwTmVnVmFsOiEwLG92ZXJsYXBOb01lcmdlOiEwfSksbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgcz1hW2xdO2lmKHMucCE9PWkpe3ZhciB1PW8ucHV0KHMucCxzLmIrcy5zKTt1JiYocy5iPXUpfX19fShvLHQpLGEubm9ybT8odihvKSx5KHIsbyxhKSk6bShyLG8pfShlLHQscixfLHUpLGIubGVuZ3RoJiZkKHQscixiLHUpO2JyZWFrO2Nhc2Uic3RhY2siOmNhc2UicmVsYXRpdmUiOmZvcihiPVtdLF89W10sdz0wO3c8by5sZW5ndGg7dysrKXZvaWQgMD09PShUPW9bd10pWzBdLnRyYWNlLmJhc2U/Xy5wdXNoKFQpOmIucHVzaChUKTtfLmxlbmd0aCYmZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgbz1uZXcgYyhuLHtwb3NBeGlzOnQsc2VwTmVnVmFsOiJyZWxhdGl2ZSI9PT1hLm1vZGUsb3ZlcmxhcE5vTWVyZ2U6IShhLm5vcm18fCJzdGFjayI9PT1hLm1vZGV8fCJyZWxhdGl2ZSI9PT1hLm1vZGUpfSk7Zih0LG8sYSksZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsbyxzLGMsdSxkPXgoZSksZj10LnRyYWNlcztmb3Iocz0wO3M8Zi5sZW5ndGg7cysrKWlmKG49ZltzXSwiZnVubmVsIj09PShhPW5bMF0udHJhY2UpLnR5cGUpZm9yKGM9MDtjPG4ubGVuZ3RoO2MrKykodT1uW2NdKS5zIT09aSYmdC5wdXQodS5wLC0uNSp1LnMpO2ZvcihzPTA7czxmLmxlbmd0aDtzKyspe249ZltzXSxhPW5bMF0udHJhY2Usbz0iZnVubmVsIj09PWEudHlwZTt2YXIgcD1bXTtmb3IoYz0wO2M8bi5sZW5ndGg7YysrKWlmKCh1PW5bY10pLnMhPT1pKXt2YXIgaDtoPW8/dS5zOnUucyt1LmI7dmFyIGc9dC5wdXQodS5wLGgpLG09ZytoO3UuYj1nLHVbZF09bSxyLm5vcm18fChwLnB1c2gobSksdS5oYXNCJiZwLnB1c2goZykpfXIubm9ybXx8KGEuX2V4dHJlbWVzW2UuX2lkXT1sLmZpbmRFeHRyZW1lcyhlLHAse3RvemVybzohMCxwYWRkZWQ6ITB9KSl9fShyLG8sYSk7Zm9yKHZhciBzPTA7czxuLmxlbmd0aDtzKyspZm9yKHZhciB1PW5bc10sZD0wO2Q8dS5sZW5ndGg7ZCsrKXt2YXIgcD11W2RdO2lmKHAucyE9PWkpcC5iK3Aucz09PW8uZ2V0KHAucCxwLnMpJiYocC5fb3V0bW9zdD0hMCl9YS5ub3JtJiZ5KHIsbyxhKX0oMCx0LHIsXyx1KSxiLmxlbmd0aCYmZCh0LHIsYix1KX0hZnVuY3Rpb24oZSx0KXt2YXIgcixhLGksbz14KHQpLGw9e30scz0xLzAsYz0tMS8wO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspZm9yKGk9ZVtyXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciB1PWlbYV0ucDtuKHUpJiYocz1NYXRoLm1pbihzLHUpLGM9TWF0aC5tYXgoYyx1KSl9dmFyIGQ9MWU0LyhjLXMpLGY9bC5yb3VuZD1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKE1hdGgucm91bmQoZCooZS1zKSkpfTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXsoaT1lW3JdKVswXS50LmV4dGVudHM9bDt2YXIgcD1pWzBdLnQucG9mZnNldCxoPUFycmF5LmlzQXJyYXkocCk7Zm9yKGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIGc9aVthXSxtPWdbb10tZy53LzI7aWYobihtKSl7dmFyIHY9Z1tvXStnLncvMix5PWYoZy5wKTtsW3ldP2xbeV09W01hdGgubWluKG0sbFt5XVswXSksTWF0aC5tYXgodixsW3ldWzFdKV06bFt5XT1bbSx2XX1nLnAwPWcucCsoaD9wW2FdOnApLGcucDE9Zy5wMCtnLncsZy5zMD1nLmIsZy5zMT1nLnMwK2cuc319fShvLHQpfX1mdW5jdGlvbiBkKGUsdCxyLG4pe2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaT1yW2FdLG89bmV3IGMoW2ldLHtwb3NBeGlzOmUsc2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFuLm5vcm19KTtmKGUsbyxuKSxuLm5vcm0/KHYobykseSh0LG8sbikpOm0odCxvKX19ZnVuY3Rpb24gZihlLHQscil7Zm9yKHZhciBuPXQubWluRGlmZixhPXQudHJhY2VzLGk9biooMS1yLmdhcCksbz1pKigxLShyLmdyb3VwZ2FwfHwwKSksbD0tby8yLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGM9YVtzXVswXS50O2MuYmFyd2lkdGg9byxjLnBvZmZzZXQ9bCxjLmJhcmdyb3Vwd2lkdGg9aSxjLmJhcmRlbHRhPW59dC5iaW5XaWR0aD1hWzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAodCksaChlLHQpLGcoZSx0KX1mdW5jdGlvbiBwKGUpe3ZhciB0LHIsaT1lLnRyYWNlcztmb3IodD0wO3Q8aS5sZW5ndGg7dCsrKXt2YXIgbyxsPWlbdF0scz1sWzBdLGM9cy50cmFjZSx1PXMudCxkPWMuX29mZnNldHx8Yy5vZmZzZXQsZj11LnBvZmZzZXQ7aWYoYShkKSl7Zm9yKG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZCwwLGwubGVuZ3RoKSxyPTA7cjxvLmxlbmd0aDtyKyspbihvW3JdKXx8KG9bcl09Zik7Zm9yKHI9by5sZW5ndGg7cjxsLmxlbmd0aDtyKyspby5wdXNoKGYpO3UucG9mZnNldD1vfWVsc2Ugdm9pZCAwIT09ZCYmKHUucG9mZnNldD1kKTt2YXIgcD1jLl93aWR0aHx8Yy53aWR0aCxoPXUuYmFyd2lkdGg7aWYoYShwKSl7dmFyIGc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocCwwLGwubGVuZ3RoKTtmb3Iocj0wO3I8Zy5sZW5ndGg7cisrKW4oZ1tyXSl8fChnW3JdPWgpO2ZvcihyPWcubGVuZ3RoO3I8bC5sZW5ndGg7cisrKWcucHVzaChoKTtpZih1LmJhcndpZHRoPWcsdm9pZCAwPT09ZCl7Zm9yKG89W10scj0wO3I8bC5sZW5ndGg7cisrKW8ucHVzaChmKyhoLWdbcl0pLzIpO3UucG9mZnNldD1vfX1lbHNlIHZvaWQgMCE9PXAmJih1LmJhcndpZHRoPXAsdm9pZCAwPT09ZCYmKHUucG9mZnNldD1mKyhoLXApLzIpKX19ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgcj10LnRyYWNlcyxuPXgoZSksYT0wO2E8ci5sZW5ndGg7YSsrKWZvcih2YXIgaT1yW2FdLG89aVswXS50LGw9by5wb2Zmc2V0LHM9QXJyYXkuaXNBcnJheShsKSxjPW8uYmFyd2lkdGgsdT1BcnJheS5pc0FycmF5KGMpLGQ9MDtkPGkubGVuZ3RoO2QrKyl7dmFyIGY9aVtkXSxwPWYudz11P2NbZF06YztmW25dPWYucCsocz9sW2RdOmwpK3AvMn19ZnVuY3Rpb24gZyhlLHQscil7dmFyIG49dC50cmFjZXMsYT10Lm1pbkRpZmYvMjtsLm1pbkR0aWNrKGUsdC5taW5EaWZmLHQuZGlzdGluY3RQb3NpdGlvbnNbMF0scik7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvLHMsYyx1LGQ9bltpXSxmPWRbMF0scD1mLnRyYWNlLGg9W107Zm9yKHU9MDt1PGQubGVuZ3RoO3UrKylzPShvPWRbdV0pLnAtYSxjPW8ucCthLGgucHVzaChzLGMpO2lmKHAud2lkdGh8fHAub2Zmc2V0KXt2YXIgZz1mLnQsbT1nLnBvZmZzZXQsdj1nLmJhcndpZHRoLHk9QXJyYXkuaXNBcnJheShtKSx4PUFycmF5LmlzQXJyYXkodik7Zm9yKHU9MDt1PGQubGVuZ3RoO3UrKyl7bz1kW3VdO3ZhciBiPXk/bVt1XTptLF89eD92W3VdOnY7Yz0ocz1vLnArYikrXyxoLnB1c2gocyxjKX19cC5fZXh0cmVtZXNbZS5faWRdPWwuZmluZEV4dHJlbWVzKGUsaCx7cGFkZGVkOiExfSl9fWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIHI9dC50cmFjZXMsbj14KGUpLGE9MDthPHIubGVuZ3RoO2ErKyl7Zm9yKHZhciBpPXJbYV0sbz1pWzBdLnRyYWNlLHM9W10sYz0hMSx1PTA7dTxpLmxlbmd0aDt1Kyspe3ZhciBkPWlbdV0sZj1kLmIscD1mK2QucztkW25dPXAscy5wdXNoKHApLGQuaGFzQiYmcy5wdXNoKGYpLGQuaGFzQiYmZC5ifHwoYz0hMCl9by5fZXh0cmVtZXNbZS5faWRdPWwuZmluZEV4dHJlbWVzKGUscyx7dG96ZXJvOmMscGFkZGVkOiEwfSl9fWZ1bmN0aW9uIHYoZSl7Zm9yKHZhciB0PWUudHJhY2VzLHI9MDtyPHQubGVuZ3RoO3IrKylmb3IodmFyIG49dFtyXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV07by5zIT09aSYmZS5wdXQoby5wLG8uYitvLnMpfX1mdW5jdGlvbiB5KGUsdCxyKXt2YXIgYT10LnRyYWNlcyxvPXgoZSkscz0iZnJhY3Rpb24iPT09ci5ub3JtPzE6MTAwLGM9cy8xZTksdT1lLmwyYyhlLmMybCgwKSksZD0ic3RhY2siPT09ci5tb2RlP3M6dTtmdW5jdGlvbiBmKHQpe3JldHVybiBuKGUuYzJsKHQpKSYmKHQ8dS1jfHx0PmQrY3x8IW4odSkpfWZvcih2YXIgcD0wO3A8YS5sZW5ndGg7cCsrKXtmb3IodmFyIGg9YVtwXSxnPWhbMF0udHJhY2UsbT1bXSx2PSExLHk9ITEsYj0wO2I8aC5sZW5ndGg7YisrKXt2YXIgXz1oW2JdO2lmKF8ucyE9PWkpe3ZhciB3PU1hdGguYWJzKHMvdC5nZXQoXy5wLF8ucykpO18uYio9dyxfLnMqPXc7dmFyIFQ9Xy5iLE09VCtfLnM7X1tvXT1NLG0ucHVzaChNKSx5PXl8fGYoTSksXy5oYXNCJiYobS5wdXNoKFQpLHk9eXx8ZihUKSksXy5oYXNCJiZfLmJ8fCh2PSEwKX19Zy5fZXh0cmVtZXNbZS5faWRdPWwuZmluZEV4dHJlbWVzKGUsbSx7dG96ZXJvOnYscGFkZGVkOnl9KX19ZnVuY3Rpb24geChlKXtyZXR1cm4gZS5faWQuY2hhckF0KDApfXQuZXhwb3J0cz17Y3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dC54YXhpcyxuPXQueWF4aXMsYT1lLl9mdWxsTGF5b3V0LGk9ZS5fZnVsbERhdGEsbD1lLmNhbGNkYXRhLHM9W10sYz1bXSxkPTA7ZDxpLmxlbmd0aDtkKyspe3ZhciBmPWlbZF07aWYoITA9PT1mLnZpc2libGUmJm8udHJhY2VJcyhmLCJiYXIiKSYmZi54YXhpcz09PXIuX2lkJiZmLnlheGlzPT09bi5faWQmJigiaCI9PT1mLm9yaWVudGF0aW9uP3MucHVzaChsW2RdKTpjLnB1c2gobFtkXSksZi5fY29tcHV0ZVBoKSlmb3IodmFyIHA9ZS5jYWxjZGF0YVtkXSxoPTA7aDxwLmxlbmd0aDtoKyspImZ1bmN0aW9uIj09dHlwZW9mIHBbaF0ucGgwJiYocFtoXS5waDA9cFtoXS5waDAoKSksImZ1bmN0aW9uIj09dHlwZW9mIHBbaF0ucGgxJiYocFtoXS5waDE9cFtoXS5waDEoKSl9dmFyIGc9e3hDYXQ6ImNhdGVnb3J5Ij09PXIudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlLHlDYXQ6ImNhdGVnb3J5Ij09PW4udHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09bi50eXBlLG1vZGU6YS5iYXJtb2RlLG5vcm06YS5iYXJub3JtLGdhcDphLmJhcmdhcCxncm91cGdhcDphLmJhcmdyb3VwZ2FwfTt1KGUscixuLGMsZyksdShlLG4scixzLGcpfSxzZXRHcm91cFBvc2l0aW9uczp1fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjoyMTIsIi4uLy4uL2xpYiI6MjMyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Mjc5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjI4NywiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi9zaWV2ZS5qcyI6MzQxLCJmYXN0LWlzbnVtZXJpYyI6MTd9XSwzMzI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT1lKCIuLi8uLi9yZWdpc3RyeSIpLG89ZSgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLGw9ZSgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxzPWUoIi4vc3R5bGVfZGVmYXVsdHMiKSxjPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLmdldEF4aXNHcm91cCx1PWUoIi4vYXR0cmlidXRlcyIpLGQ9bi5jb2VyY2VGb250O2Z1bmN0aW9uIGYoZSx0LHIsbil7dmFyIGE9dC5vcmllbnRhdGlvbixpPXRbe3Y6IngiLGg6InkifVthXSsiYXhpcyJdLG89YyhyLGkpK2EsbD1yLl9hbGlnbm1lbnRPcHRzfHx7fSxzPW4oImFsaWdubWVudGdyb3VwIiksdT1sW29dO3V8fCh1PWxbb109e30pO3ZhciBkPXVbc107ZD9kLnRyYWNlcy5wdXNoKHQpOmQ9dVtzXT17dHJhY2VzOlt0XSxhbGlnbm1lbnRJbmRleDpPYmplY3Qua2V5cyh1KS5sZW5ndGgsb2Zmc2V0R3JvdXBzOnt9fTt2YXIgZj1uKCJvZmZzZXRncm91cCIpLHA9ZC5vZmZzZXRHcm91cHMsaD1wW2ZdO2YmJihofHwoaD1wW2ZdPXtvZmZzZXRJbmRleDpPYmplY3Qua2V5cyhwKS5sZW5ndGh9KSx0Ll9vZmZzZXRJbmRleD1oLm9mZnNldEluZGV4KX1mdW5jdGlvbiBwKGUsdCxyLGEsaSxvKXt2YXIgbD0hKCExPT09KG89b3x8e30pLm1vZHVsZUhhc1NlbGVjdGVkKSxzPSEoITE9PT1vLm1vZHVsZUhhc1Vuc2VsZWN0ZWQpLGM9ISghMT09PW8ubW9kdWxlSGFzQ29uc3RyYWluKSx1PSEoITE9PT1vLm1vZHVsZUhhc0NsaXBvbmF4aXMpLGY9ISghMT09PW8ubW9kdWxlSGFzVGV4dGFuZ2xlKSxwPSEoITE9PT1vLm1vZHVsZUhhc0luc2lkZWFuY2hvciksaD0hIW8uaGFzUGF0aGJhcixnPUFycmF5LmlzQXJyYXkoaSl8fCJhdXRvIj09PWksbT1nfHwiaW5zaWRlIj09PWksdj1nfHwib3V0c2lkZSI9PT1pO2lmKG18fHYpe3ZhciB5PWQoYSwidGV4dGZvbnQiLHIuZm9udCkseD1uLmV4dGVuZEZsYXQoe30seSksYj0hKGUudGV4dGZvbnQmJmUudGV4dGZvbnQuY29sb3IpO2lmKGImJmRlbGV0ZSB4LmNvbG9yLGQoYSwiaW5zaWRldGV4dGZvbnQiLHgpLGgpe3ZhciBfPW4uZXh0ZW5kRmxhdCh7fSx5KTtiJiZkZWxldGUgXy5jb2xvcixkKGEsInBhdGhiYXIudGV4dGZvbnQiLF8pfXYmJmQoYSwib3V0c2lkZXRleHRmb250Iix5KSxsJiZhKCJzZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpLHMmJmEoInVuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxjJiZhKCJjb25zdHJhaW50ZXh0IiksdSYmYSgiY2xpcG9uYXhpcyIpLGYmJmEoInRleHRhbmdsZSIpLGEoInRleHR0ZW1wbGF0ZSIpfW0mJnAmJmEoImluc2lkZXRleHRhbmNob3IiKX10LmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKGUsdCxyLGMpe2Z1bmN0aW9uIGQocixhKXtyZXR1cm4gbi5jb2VyY2UoZSx0LHUscixhKX1pZihvKGUsdCxjLGQpKXtsKGUsdCxjLGQpLGQoInhob3ZlcmZvcm1hdCIpLGQoInlob3ZlcmZvcm1hdCIpLGQoIm9yaWVudGF0aW9uIix0LngmJiF0Lnk/ImgiOiJ2IiksZCgiYmFzZSIpLGQoIm9mZnNldCIpLGQoIndpZHRoIiksZCgidGV4dCIpLGQoImhvdmVydGV4dCIpLGQoImhvdmVydGVtcGxhdGUiKTt2YXIgZj1kKCJ0ZXh0cG9zaXRpb24iKTtwKGUsdCxjLGQsZix7bW9kdWxlSGFzU2VsZWN0ZWQ6ITAsbW9kdWxlSGFzVW5zZWxlY3RlZDohMCxtb2R1bGVIYXNDb25zdHJhaW46ITAsbW9kdWxlSGFzQ2xpcG9uYXhpczohMCxtb2R1bGVIYXNUZXh0YW5nbGU6ITAsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiEwfSkscyhlLHQsZCxyLGMpO3ZhciBoPSh0Lm1hcmtlci5saW5lfHx7fSkuY29sb3IsZz1pLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTtnKGUsdCxofHxhLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLGcoZSx0LGh8fGEuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KHQsZCl9ZWxzZSB0LnZpc2libGU9ITF9LGNyb3NzVHJhY2VEZWZhdWx0czpmdW5jdGlvbihlLHQpe3ZhciByO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIG4uY29lcmNlKHIuX2lucHV0LHIsdSxlKX1pZigiZ3JvdXAiPT09dC5iYXJtb2RlKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKSJiYXIiPT09KHI9ZVtpXSkudHlwZSYmKHIuX2lucHV0LGYoMCxyLHQsYSkpfSxoYW5kbGVHcm91cGluZ0RlZmF1bHRzOmYsaGFuZGxlVGV4dDpwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjoxMDIsIi4uLy4uL2xpYiI6MjMyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjI4NywiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjM3OCwiLi4vc2NhdHRlci94eV9kZWZhdWx0cyI6Mzg1LCIuL2F0dHJpYnV0ZXMiOjMyOCwiLi9zdHlsZV9kZWZhdWx0cyI6MzQzfV0sMzMzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGUueD0ieFZhbCJpbiB0P3QueFZhbDp0LngsZS55PSJ5VmFsImluIHQ/dC55VmFsOnQueSx0LnhhJiYoZS54YXhpcz10LnhhKSx0LnlhJiYoZS55YXhpcz10LnlhKSwiaCI9PT1yLm9yaWVudGF0aW9uPyhlLmxhYmVsPWUueSxlLnZhbHVlPWUueCk6KGUubGFiZWw9ZS54LGUudmFsdWU9ZS55KSxlfX0se31dLDMzNDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgidGlueWNvbG9yMiIpLGk9ZSgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtyLmNvZXJjZVN0cmluZz1mdW5jdGlvbihlLHQscil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZih0fHwhZS5ub0JsYW5rKXJldHVybiB0fWVsc2UgaWYoKCJudW1iZXIiPT10eXBlb2YgdHx8ITA9PT10KSYmIWUuc3RyaWN0KXJldHVybiBTdHJpbmcodCk7cmV0dXJuIHZvaWQgMCE9PXI/cjplLmRmbHR9LHIuY29lcmNlTnVtYmVyPWZ1bmN0aW9uKGUsdCxyKXtpZihuKHQpKXt0PSt0O3ZhciBhPWUubWluLGk9ZS5tYXg7aWYoISh2b2lkIDAhPT1hJiZ0PGF8fHZvaWQgMCE9PWkmJnQ+aSkpcmV0dXJuIHR9cmV0dXJuIHZvaWQgMCE9PXI/cjplLmRmbHR9LHIuY29lcmNlQ29sb3I9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhKHQpLmlzVmFsaWQoKT90OnZvaWQgMCE9PXI/cjplLmRmbHR9LHIuY29lcmNlRW51bWVyYXRlZD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGUuY29lcmNlTnVtYmVyJiYodD0rdCksLTEhPT1lLnZhbHVlcy5pbmRleE9mKHQpP3Q6dm9pZCAwIT09cj9yOmUuZGZsdH0sci5nZXRWYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciByO3JldHVybiBBcnJheS5pc0FycmF5KGUpP3Q8ZS5sZW5ndGgmJihyPWVbdF0pOnI9ZSxyfSxyLmdldExpbmVXaWR0aD1mdW5jdGlvbihlLHQpe3JldHVybiAwPHQubWx3P3QubWx3OmkoZS5tYXJrZXIubGluZS53aWR0aCk/MDplLm1hcmtlci5saW5lLndpZHRofX0seyIuLi8uLi9saWIiOjIzMiwiZmFzdC1pc251bWVyaWMiOjE3LHRpbnljb2xvcjI6Njd9XSwzMzU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPWUoIi4uLy4uL2xpYiIpLmZpbGxUZXh0LGw9ZSgiLi9oZWxwZXJzIikuZ2V0TGluZVdpZHRoLHM9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dCxjPWUoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gdShlLHQscixhLGkpe3ZhciBsLHUsZCxmLHAsaCxnLG09ZS5jZCx2PW1bMF0udHJhY2UseT1tWzBdLnQseD0iY2xvc2VzdCI9PT1hLGI9IndhdGVyZmFsbCI9PT12LnR5cGUsXz1lLm1heEhvdmVyRGlzdGFuY2Usdz1lLm1heFNwaWtlRGlzdGFuY2U7ImgiPT09di5vcmllbnRhdGlvbj8obD1yLHU9dCxkPSJ5IixmPSJ4IixwPVIsaD1QKToobD10LHU9cixkPSJ4IixmPSJ5IixoPVIscD1QKTt2YXIgVD12W2QrInBlcmlvZCJdLE09eHx8VDtmdW5jdGlvbiBrKGUpe3JldHVybiBMKGUsLTEpfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIEwoZSwxKX1mdW5jdGlvbiBMKGUsdCl7dmFyIHI9ZS53O3JldHVybiBlW2RdK3Qqci8yfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIGVbZCsiRW5kIl0tZVtkKyJTdGFydCJdfXZhciBEPXg/azpUP2Z1bmN0aW9uKGUpe3JldHVybiBlLnAtUyhlKS8yfTpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5taW4oayhlKSxlLnAteS5iYXJkZWx0YS8yKX0sQz14P0E6VD9mdW5jdGlvbihlKXtyZXR1cm4gZS5wK1MoZSkvMn06ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KEEoZSksZS5wK3kuYmFyZGVsdGEvMil9O2Z1bmN0aW9uIE8oZSx0LHIpe3JldHVybiBpLmZpbml0ZVJhbmdlJiYocj0wKSxuLmluYm94KGUtbCx0LWwscitNYXRoLm1pbigxLE1hdGguYWJzKHQtZSkvZyktMSl9ZnVuY3Rpb24gUChlKXtyZXR1cm4gTyhEKGUpLEMoZSksXyl9ZnVuY3Rpb24gSShlKXt2YXIgdD1lW2ZdO2lmKGIpe3ZhciByPU1hdGguYWJzKGUucmF3Uyl8fDA7dT4wP3QrPXI6dTwwJiYodC09cil9cmV0dXJuIHR9ZnVuY3Rpb24gUihlKXt2YXIgdD11LHI9ZS5iLGE9SShlKTtyZXR1cm4gbi5pbmJveChyLXQsYS10LF8rKGEtdCkvKGEtciktMSl9dmFyIHo9ZVtkKyJhIl0sTj1lW2YrImEiXTtnPU1hdGguYWJzKHoucjJjKHoucmFuZ2VbMV0pLXoucjJjKHoucmFuZ2VbMF0pKTt2YXIgRj1uLmdldERpc3RhbmNlRnVuY3Rpb24oYSxwLGgsKGZ1bmN0aW9uKGUpe3JldHVybihwKGUpK2goZSkpLzJ9KSk7aWYobi5nZXRDbG9zZXN0KG0sRixlKSwhMSE9PWUuaW5kZXgmJm1bZS5pbmRleF0ucCE9PWMpe018fChEPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1pbihrKGUpLGUucC15LmJhcmdyb3Vwd2lkdGgvMil9LEM9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KEEoZSksZS5wK3kuYmFyZ3JvdXB3aWR0aC8yKX0pO3ZhciBFPW1bZS5pbmRleF0saj12LmJhc2U/RS5iK0UuczpFLnM7ZVtmKyIwIl09ZVtmKyIxIl09Ti5jMnAoRVtmXSwhMCksZVtmKyJMYWJlbFZhbCJdPWo7dmFyIEg9eS5leHRlbnRzW3kuZXh0ZW50cy5yb3VuZChFLnApXTtlW2QrIjAiXT16LmMycCh4P0QoRSk6SFswXSwhMCksZVtkKyIxIl09ei5jMnAoeD9DKEUpOkhbMV0sITApO3ZhciBCPXZvaWQgMCE9PUUub3JpZ19wO3JldHVybiBlW2QrIkxhYmVsVmFsIl09Qj9FLm9yaWdfcDpFLnAsZS5sYWJlbExhYmVsPXMoeixlW2QrIkxhYmVsVmFsIl0sdltkKyJob3ZlcmZvcm1hdCJdKSxlLnZhbHVlTGFiZWw9cyhOLGVbZisiTGFiZWxWYWwiXSx2W2YrImhvdmVyZm9ybWF0Il0pLGUuYmFzZUxhYmVsPXMoTixFLmIsdltmKyJob3ZlcmZvcm1hdCJdKSxlLnNwaWtlRGlzdGFuY2U9KGZ1bmN0aW9uKGUpe3ZhciB0PXUscj1lLmIsYT1JKGUpO3JldHVybiBuLmluYm94KHItdCxhLXQsdysoYS10KS8oYS1yKS0xKX0oRSkrZnVuY3Rpb24oZSl7cmV0dXJuIE8oayhlKSxBKGUpLHcpfShFKSkvMixlW2QrIlNwaWtlIl09ei5jMnAoRS5wLCEwKSxvKEUsdixlKSxlLmhvdmVydGVtcGxhdGU9di5ob3ZlcnRlbXBsYXRlLGV9fWZ1bmN0aW9uIGQoZSx0KXt2YXIgcj10Lm1jY3x8ZS5tYXJrZXIuY29sb3Isbj10Lm1sY2N8fGUubWFya2VyLmxpbmUuY29sb3IsYT1sKGUsdCk7cmV0dXJuIGkub3BhY2l0eShyKT9yOmkub3BhY2l0eShuKSYmYT9uOnZvaWQgMH10LmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKGUsdCxyLG4saSl7dmFyIG89dShlLHQscixuLGkpO2lmKG8pe3ZhciBsPW8uY2Qscz1sWzBdLnRyYWNlLGM9bFtvLmluZGV4XTtyZXR1cm4gby5jb2xvcj1kKHMsYyksYS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsImhvdmVySW5mbyIpKGMscyxvKSxbb119fSxob3Zlck9uQmFyczp1LGdldFRyYWNlQ29sb3I6ZH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MTAyLCIuLi8uLi9jb21wb25lbnRzL2Z4IjoxNDIsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjIxMiwiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjoyNzksIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4vaGVscGVycyI6MzM0fV0sMzM2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17YXR0cmlidXRlczplKCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOmUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czplKCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6ZSgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOmUoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOmUoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLmNyb3NzVHJhY2VDYWxjLGNvbG9yYmFyOmUoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksYXJyYXlzVG9DYWxjZGF0YTplKCIuL2FycmF5c190b19jYWxjZGF0YSIpLHBsb3Q6ZSgiLi9wbG90IikucGxvdCxzdHlsZTplKCIuL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDplKCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czplKCIuL2hvdmVyIikuaG92ZXJQb2ludHMsZXZlbnREYXRhOmUoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czplKCIuL3NlbGVjdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJiYXIiLGJhc2VQbG90TW9kdWxlOmUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJiYXItbGlrZSIsImNhcnRlc2lhbiIsInN2ZyIsImJhciIsIm9yaWVudGVkIiwiZXJyb3JCYXJzT0siLCJzaG93TGVnZW5kIiwiem9vbVNjYWxlIl0sYW5pbWF0YWJsZTohMCxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjI5MywiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjM3NiwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjMyNywiLi9hdHRyaWJ1dGVzIjozMjgsIi4vY2FsYyI6MzI5LCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjMzMSwiLi9kZWZhdWx0cyI6MzMyLCIuL2V2ZW50X2RhdGEiOjMzMywiLi9ob3ZlciI6MzM1LCIuL2xheW91dF9hdHRyaWJ1dGVzIjozMzcsIi4vbGF5b3V0X2RlZmF1bHRzIjozMzgsIi4vcGxvdCI6MzM5LCIuL3NlbGVjdCI6MzQwLCIuL3N0eWxlIjozNDJ9XSwzMzc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFjayIsImdyb3VwIiwib3ZlcmxheSIsInJlbGF0aXZlIl0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sYmFybm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwiZnJhY3Rpb24iLCJwZXJjZW50Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGJhcmdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LGJhcmdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDMzODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9yZWdpc3RyeSIpLGE9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPWUoIi4uLy4uL2xpYiIpLG89ZSgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbChyLG4pe3JldHVybiBpLmNvZXJjZShlLHQsbyxyLG4pfWZvcih2YXIgcz0hMSxjPSExLHU9ITEsZD17fSxmPWwoImJhcm1vZGUiKSxwPTA7cDxyLmxlbmd0aDtwKyspe3ZhciBoPXJbcF07aWYobi50cmFjZUlzKGgsImJhciIpJiZoLnZpc2libGUpe2lmKHM9ITAsImdyb3VwIj09PWYpe3ZhciBnPWgueGF4aXMraC55YXhpcztkW2ddJiYodT0hMCksZFtnXT0hMH1pZihoLnZpc2libGUmJiJoaXN0b2dyYW0iPT09aC50eXBlKSJjYXRlZ29yeSIhPT1hLmdldEZyb21JZCh7X2Z1bGxMYXlvdXQ6dH0saFsidiI9PT1oLm9yaWVudGF0aW9uPyJ4YXhpcyI6InlheGlzIl0pLnR5cGUmJihjPSEwKX19cz8oIm92ZXJsYXkiIT09ZiYmbCgiYmFybm9ybSIpLGwoImJhcmdhcCIsYyYmIXU/MDouMiksbCgiYmFyZ3JvdXBnYXAiKSk6ZGVsZXRlIHQuYmFybW9kZX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjoyNzksIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjMzN31dLDMzOTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJAcGxvdGx5L2QzIiksYT1lKCJmYXN0LWlzbnVtZXJpYyIpLGk9ZSgiLi4vLi4vbGliIiksbz1lKCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxsPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9ZSgiLi4vLi4vcmVnaXN0cnkiKSx1PWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikudGlja1RleHQsZD1lKCIuL3VuaWZvcm1fdGV4dCIpLGY9ZC5yZWNvcmRNaW5UZXh0U2l6ZSxwPWQuY2xlYXJNaW5UZXh0U2l6ZSxoPWUoIi4vc3R5bGUiKSxnPWUoIi4vaGVscGVycyIpLG09ZSgiLi9jb25zdGFudHMiKSx2PWUoIi4vYXR0cmlidXRlcyIpLHk9di50ZXh0LHg9di50ZXh0cG9zaXRpb24sYj1lKCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUsXz1tLlRFWFRQQUQ7ZnVuY3Rpb24gdyhlKXtyZXR1cm4gZS5pZH1mdW5jdGlvbiBUKGUpe2lmKGUuaWRzKXJldHVybiB3fWZ1bmN0aW9uIE0oZSx0KXtyZXR1cm4gZTx0PzE6LTF9ZnVuY3Rpb24gayhlLHQscixuKXt2YXIgYTtyZXR1cm4hdC51bmlmb3JtdGV4dC5tb2RlJiZBKHIpPyhuJiYoYT1uKCkpLGUudHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7YSYmYSgpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7YSYmYSgpfSkpKTplfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIGUmJmUuZHVyYXRpb24+MH1mdW5jdGlvbiBMKGUpe3JldHVybiJhdXRvIj09PWU/MDplfWZ1bmN0aW9uIFMoZSx0KXt2YXIgcj1NYXRoLlBJLzE4MCp0LG49TWF0aC5hYnMoTWF0aC5zaW4ocikpLGE9TWF0aC5hYnMoTWF0aC5jb3MocikpO3JldHVybnt4OmUud2lkdGgqYStlLmhlaWdodCpuLHk6ZS53aWR0aCpuK2UuaGVpZ2h0KmF9fWZ1bmN0aW9uIEQoZSx0LHIsbixhLGkpe3ZhciBvPSEhaS5pc0hvcml6b250YWwsbD0hIWkuY29uc3RyYWluZWQscz1pLmFuZ2xlfHwwLGM9aS5hbmNob3J8fCJlbmQiLHU9ImVuZCI9PT1jLGQ9InN0YXJ0Ij09PWMsZj0oKGkubGVmdFRvUmlnaHR8fDApKzEpLzIscD0xLWYsaD1hLndpZHRoLGc9YS5oZWlnaHQsbT1NYXRoLmFicyh0LWUpLHY9TWF0aC5hYnMobi1yKSx5PW0+MipfJiZ2PjIqXz9fOjA7bS09Mip5LHYtPTIqeTt2YXIgeD1MKHMpOyJhdXRvIiE9PXN8fGg8PW0mJmc8PXZ8fCEoaD5tfHxnPnYpfHwoaD52fHxnPm0pJiZoPGc9PW08dnx8KHgrPTkwKTt2YXIgYj1TKGEseCksdz0xO2wmJih3PU1hdGgubWluKDEsbS9iLngsdi9iLnkpKTt2YXIgVD1hLmxlZnQqcCthLnJpZ2h0KmYsaz0oYS50b3ArYS5ib3R0b20pLzIsQT0oZStfKSpwKyh0LV8pKmYsRD0ocituKS8yLEM9MCxPPTA7aWYoZHx8dSl7dmFyIFA9KG8/Yi54OmIueSkvMixJPW8/TShlLHQpOk0ocixuKTtvP2Q/KEE9ZStJKnksQz0tSSpQKTooQT10LUkqeSxDPUkqUCk6ZD8oRD1yK0kqeSxPPS1JKlApOihEPW4tSSp5LE89SSpQKX1yZXR1cm57dGV4dFg6VCx0ZXh0WTprLHRhcmdldFg6QSx0YXJnZXRZOkQsYW5jaG9yWDpDLGFuY2hvclk6TyxzY2FsZTp3LHJvdGF0ZTp4fX10LmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24oZSx0LHIsZCxtLHYpe3ZhciB3PXQueGF4aXMsQz10LnlheGlzLE89ZS5fZnVsbExheW91dDttfHwobT17bW9kZTpPLmJhcm1vZGUsbm9ybTpPLmJhcm1vZGUsZ2FwOk8uYmFyZ2FwLGdyb3VwZ2FwOk8uYmFyZ3JvdXBnYXB9LHAoImJhciIsTykpO3ZhciBQPWkubWFrZVRyYWNlR3JvdXBzKGQsciwidHJhY2UgYmFycyIpLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBjPW4uc2VsZWN0KHRoaXMpLGQ9clswXS50cmFjZSxwPSJ3YXRlcmZhbGwiPT09ZC50eXBlLFA9ImZ1bm5lbCI9PT1kLnR5cGUsST0iYmFyIj09PWQudHlwZXx8UCxSPTA7cCYmZC5jb25uZWN0b3IudmlzaWJsZSYmImJldHdlZW4iPT09ZC5jb25uZWN0b3IubW9kZSYmKFI9ZC5jb25uZWN0b3IubGluZS53aWR0aC8yKTt2YXIgej0iaCI9PT1kLm9yaWVudGF0aW9uLE49QShtKSxGPWkuZW5zdXJlU2luZ2xlKGMsImciLCJwb2ludHMiKSxFPVQoZCksaj1GLnNlbGVjdEFsbCgiZy5wb2ludCIpLmRhdGEoaS5pZGVudGl0eSxFKTtqLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicG9pbnQiLCEwKSxqLmV4aXQoKS5yZW1vdmUoKSxqLmVhY2goKGZ1bmN0aW9uKGMscCl7dmFyIFQsQSxQPW4uc2VsZWN0KHRoaXMpLEY9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9W10saT1bXSxvPW4/dDpyLGw9bj9yOnQ7cmV0dXJuIGFbMF09by5jMnAoZS5zMCwhMCksaVswXT1sLmMycChlLnAwLCEwKSxhWzFdPW8uYzJwKGUuczEsITApLGlbMV09bC5jMnAoZS5wMSwhMCksbj9bYSxpXTpbaSxhXX0oYyx3LEMseiksRT1GWzBdWzBdLGo9RlswXVsxXSxIPUZbMV1bMF0sQj1GWzFdWzFdLFk9MD09KHo/ai1FOkItSCk7aWYoWSYmSSYmZy5nZXRMaW5lV2lkdGgoZCxjKSYmKFk9ITEpLFl8fChZPSEoYShFKSYmYShqKSYmYShIKSYmYShCKSkpLGMuaXNCbGFuaz1ZLFkmJih6P2o9RTpCPUgpLFImJiFZJiYoej8oRS09TShFLGopKlIsais9TShFLGopKlIpOihILT1NKEgsQikqUixCKz1NKEgsQikqUikpLCJ3YXRlcmZhbGwiPT09ZC50eXBlKXtpZighWSl7dmFyIFY9ZFtjLmRpcl0ubWFya2VyO1Q9Vi5saW5lLndpZHRoLEE9Vi5jb2xvcn19ZWxzZSBUPWcuZ2V0TGluZVdpZHRoKGQsYyksQT1jLm1jfHxkLm1hcmtlci5jb2xvcjtmdW5jdGlvbiBVKGUpe3ZhciB0PW4ucm91bmQoVC8yJTEsMik7cmV0dXJuIDA9PT1tLmdhcCYmMD09PW0uZ3JvdXBnYXA/bi5yb3VuZChNYXRoLnJvdW5kKGUpLXQsMik6ZX1pZighZS5fY29udGV4dC5zdGF0aWNQbG90KXt2YXIgcT1sLm9wYWNpdHkoQSk8MXx8VD4uMDE/VTpmdW5jdGlvbihlLHQscil7cmV0dXJuIHImJmU9PT10P2U6TWF0aC5hYnMoZS10KT49Mj9VKGUpOmU+dD9NYXRoLmNlaWwoZSk6TWF0aC5mbG9vcihlKX07RT1xKEUsaix6KSxqPXEoaixFLHopLEg9cShILEIsIXopLEI9cShCLEgsIXopfXZhciBHPWsoaS5lbnN1cmVTaW5nbGUoUCwicGF0aCIpLE8sbSx2KTtpZihHLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuYXR0cigiZCIsaXNOYU4oKGotRSkqKEItSCkpfHxZJiZlLl9jb250ZXh0LnN0YXRpY1Bsb3Q/Ik0wLDBaIjoiTSIrRSsiLCIrSCsiViIrQisiSCIraisiViIrSCsiWiIpLmNhbGwocy5zZXRDbGlwVXJsLHQubGF5ZXJDbGlwSWQsZSksIU8udW5pZm9ybXRleHQubW9kZSYmTil7dmFyIFo9cy5tYWtlUG9pbnRTdHlsZUZucyhkKTtzLnNpbmdsZVBvaW50U3R5bGUoYyxHLGQsWixlKX0hZnVuY3Rpb24oZSx0LHIsbixhLGwsYyxkLHAsbSx2KXt2YXIgdyxUPXQueGF4aXMsQT10LnlheGlzLEM9ZS5fZnVsbExheW91dDtmdW5jdGlvbiBPKHQscixuKXtyZXR1cm4gaS5lbnN1cmVTaW5nbGUodCwidGV4dCIpLnRleHQocikuYXR0cih7Y2xhc3M6ImJhcnRleHQgYmFydGV4dC0iK3csInRleHQtYW5jaG9yIjoibWlkZGxlIiwiZGF0YS1ub3RleCI6MX0pLmNhbGwocy5mb250LG4pLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsZSl9dmFyIFA9blswXS50cmFjZSxJPSJoIj09PVAub3JpZW50YXRpb24sUj1mdW5jdGlvbihlLHQscixuLGEpe3ZhciBvLGw9dFswXS50cmFjZTtvPWwudGV4dHRlbXBsYXRlP2Z1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG89dFswXS50cmFjZSxsPWkuY2FzdE9wdGlvbihvLHIsInRleHR0ZW1wbGF0ZSIpO2lmKCFsKXJldHVybiIiO3ZhciBzLGMsZCxmLHA9IndhdGVyZmFsbCI9PT1vLnR5cGUsaD0iZnVubmVsIj09PW8udHlwZTsiaCI9PT1vLm9yaWVudGF0aW9uPyhzPSJ5IixjPWEsZD0ieCIsZj1uKToocz0ieCIsYz1uLGQ9InkiLGY9YSk7ZnVuY3Rpb24gZyhlKXtyZXR1cm4gdShmLGYuYzJsKGUpLCEwKS50ZXh0fXZhciBtPXRbcl0sdj17fTt2LmxhYmVsPW0ucCx2LmxhYmVsTGFiZWw9dltzKyJMYWJlbCJdPSh5PW0ucCx1KGMsYy5jMmwoeSksITApLnRleHQpO3ZhciB5O3ZhciB4PWkuY2FzdE9wdGlvbihvLG0uaSwidGV4dCIpOygwPT09eHx8eCkmJih2LnRleHQ9eCk7di52YWx1ZT1tLnMsdi52YWx1ZUxhYmVsPXZbZCsiTGFiZWwiXT1nKG0ucyk7dmFyIF89e307YihfLG8sbS5pKSxwJiYodi5kZWx0YT0rbS5yYXdTfHxtLnMsdi5kZWx0YUxhYmVsPWcodi5kZWx0YSksdi5maW5hbD1tLnYsdi5maW5hbExhYmVsPWcodi5maW5hbCksdi5pbml0aWFsPXYuZmluYWwtdi5kZWx0YSx2LmluaXRpYWxMYWJlbD1nKHYuaW5pdGlhbCkpO2gmJih2LnZhbHVlPW0ucyx2LnZhbHVlTGFiZWw9Zyh2LnZhbHVlKSx2LnBlcmNlbnRJbml0aWFsPW0uYmVnUix2LnBlcmNlbnRJbml0aWFsTGFiZWw9aS5mb3JtYXRQZXJjZW50KG0uYmVnUiksdi5wZXJjZW50UHJldmlvdXM9bS5kaWZSLHYucGVyY2VudFByZXZpb3VzTGFiZWw9aS5mb3JtYXRQZXJjZW50KG0uZGlmUiksdi5wZXJjZW50VG90YWw9bS5zdW1SLHYucGVyY2VuVG90YWxMYWJlbD1pLmZvcm1hdFBlcmNlbnQobS5zdW1SKSk7dmFyIHc9aS5jYXN0T3B0aW9uKG8sbS5pLCJjdXN0b21kYXRhIik7dyYmKHYuY3VzdG9tZGF0YT13KTtyZXR1cm4gaS50ZXh0dGVtcGxhdGVTdHJpbmcobCx2LGUuX2QzbG9jYWxlLF8sdixvLl9tZXRhfHx7fSl9KGUsdCxyLG4sYSk6bC50ZXh0aW5mbz9mdW5jdGlvbihlLHQscixuKXt2YXIgYT1lWzBdLnRyYWNlLG89ImgiPT09YS5vcmllbnRhdGlvbixsPSJ3YXRlcmZhbGwiPT09YS50eXBlLHM9ImZ1bm5lbCI9PT1hLnR5cGU7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gdShvP3I6biwrZSwhMCkudGV4dH12YXIgZCxmPWEudGV4dGluZm8scD1lW3RdLGg9Zi5zcGxpdCgiKyIpLGc9W10sbT1mdW5jdGlvbihlKXtyZXR1cm4tMSE9PWguaW5kZXhPZihlKX07bSgibGFiZWwiKSYmZy5wdXNoKCh2PWVbdF0ucCx1KG8/bjpyLHYsITApLnRleHQpKTt2YXIgdjttKCJ0ZXh0IikmJigwPT09KGQ9aS5jYXN0T3B0aW9uKGEscC5pLCJ0ZXh0IikpfHxkKSYmZy5wdXNoKGQpO2lmKGwpe3ZhciB5PStwLnJhd1N8fHAucyx4PXAudixiPXgteTttKCJpbml0aWFsIikmJmcucHVzaChjKGIpKSxtKCJkZWx0YSIpJiZnLnB1c2goYyh5KSksbSgiZmluYWwiKSYmZy5wdXNoKGMoeCkpfWlmKHMpe20oInZhbHVlIikmJmcucHVzaChjKHAucykpO3ZhciBfPTA7bSgicGVyY2VudCBpbml0aWFsIikmJl8rKyxtKCJwZXJjZW50IHByZXZpb3VzIikmJl8rKyxtKCJwZXJjZW50IHRvdGFsIikmJl8rKzt2YXIgdz1fPjE7bSgicGVyY2VudCBpbml0aWFsIikmJihkPWkuZm9ybWF0UGVyY2VudChwLmJlZ1IpLHcmJihkKz0iIG9mIGluaXRpYWwiKSxnLnB1c2goZCkpLG0oInBlcmNlbnQgcHJldmlvdXMiKSYmKGQ9aS5mb3JtYXRQZXJjZW50KHAuZGlmUiksdyYmKGQrPSIgb2YgcHJldmlvdXMiKSxnLnB1c2goZCkpLG0oInBlcmNlbnQgdG90YWwiKSYmKGQ9aS5mb3JtYXRQZXJjZW50KHAuc3VtUiksdyYmKGQrPSIgb2YgdG90YWwiKSxnLnB1c2goZCkpfXJldHVybiBnLmpvaW4oIjxicj4iKX0odCxyLG4sYSk6Zy5nZXRWYWx1ZShsLnRleHQscik7cmV0dXJuIGcuY29lcmNlU3RyaW5nKHksbyl9KEMsbixhLFQsQSk7dz1mdW5jdGlvbihlLHQpe3ZhciByPWcuZ2V0VmFsdWUoZS50ZXh0cG9zaXRpb24sdCk7cmV0dXJuIGcuY29lcmNlRW51bWVyYXRlZCh4LHIpfShQLGEpO3ZhciB6PSJzdGFjayI9PT1tLm1vZGV8fCJyZWxhdGl2ZSI9PT1tLm1vZGUsTj1uW2FdLEY9IXp8fE4uX291dG1vc3Q7aWYoIVJ8fCJub25lIj09PXd8fChOLmlzQmxhbmt8fGw9PT1jfHxkPT09cCkmJigiYXV0byI9PT13fHwiaW5zaWRlIj09PXcpKXJldHVybiB2b2lkIHIuc2VsZWN0KCJ0ZXh0IikucmVtb3ZlKCk7dmFyIEU9Qy5mb250LGo9aC5nZXRCYXJDb2xvcihuW2FdLFApLEg9aC5nZXRJbnNpZGVUZXh0Rm9udChQLGEsRSxqKSxCPWguZ2V0T3V0c2lkZVRleHRGb250KFAsYSxFKSxZPXIuZGF0dW0oKTtJPyJsb2ciPT09VC50eXBlJiZZLnMwPD0wJiYobD1ULnJhbmdlWzBdPFQucmFuZ2VbMV0/MDpULl9sZW5ndGgpOiJsb2ciPT09QS50eXBlJiZZLnMwPD0wJiYoZD1BLnJhbmdlWzBdPEEucmFuZ2VbMV0/QS5fbGVuZ3RoOjApO3ZhciBWLFUscSxHLFosVz1NYXRoLmFicyhjLWwpLTIqXyxYPU1hdGguYWJzKHAtZCktMipfOyJvdXRzaWRlIj09PXcmJihGfHxOLmhhc0J8fCh3PSJpbnNpZGUiKSk7aWYoImF1dG8iPT09dylpZihGKXt3PSJpbnNpZGUiLFo9aS5lbnN1cmVVbmlmb3JtRm9udFNpemUoZSxIKSxWPU8ocixSLFopLFU9cy5iQm94KFYubm9kZSgpKSxxPVUud2lkdGgsRz1VLmhlaWdodDt2YXIgSj1xPD1XJiZHPD1YLFE9cTw9WCYmRzw9VyxLPUk/Vz49cSooWC9HKTpYPj1HKihXL3EpO3E+MCYmRz4wJiYoSnx8UXx8Syk/dz0iaW5zaWRlIjoodz0ib3V0c2lkZSIsVi5yZW1vdmUoKSxWPW51bGwpfWVsc2Ugdz0iaW5zaWRlIjtpZighVil7Wj1pLmVuc3VyZVVuaWZvcm1Gb250U2l6ZShlLCJvdXRzaWRlIj09PXc/QjpIKTt2YXIgJD0oVj1PKHIsUixaKSkuYXR0cigidHJhbnNmb3JtIik7aWYoVi5hdHRyKCJ0cmFuc2Zvcm0iLCIiKSxVPXMuYkJveChWLm5vZGUoKSkscT1VLndpZHRoLEc9VS5oZWlnaHQsVi5hdHRyKCJ0cmFuc2Zvcm0iLCQpLHE8PTB8fEc8PTApcmV0dXJuIHZvaWQgVi5yZW1vdmUoKX12YXIgZWUsdGUscmU9UC50ZXh0YW5nbGU7Im91dHNpZGUiPT09dz8odGU9ImJvdGgiPT09UC5jb25zdHJhaW50ZXh0fHwib3V0c2lkZSI9PT1QLmNvbnN0cmFpbnRleHQsZWU9ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvLGw9ISFpLmlzSG9yaXpvbnRhbCxzPSEhaS5jb25zdHJhaW5lZCxjPWkuYW5nbGV8fDAsdT1hLndpZHRoLGQ9YS5oZWlnaHQsZj1NYXRoLmFicyh0LWUpLHA9TWF0aC5hYnMobi1yKTtvPWw/cD4yKl8/XzowOmY+MipfP186MDt2YXIgaD0xO3MmJihoPWw/TWF0aC5taW4oMSxwL2QpOk1hdGgubWluKDEsZi91KSk7dmFyIGc9TChjKSxtPVMoYSxnKSx2PShsP20ueDptLnkpLzIseT0oYS5sZWZ0K2EucmlnaHQpLzIseD0oYS50b3ArYS5ib3R0b20pLzIsYj0oZSt0KS8yLHc9KHIrbikvMixUPTAsaz0wLEE9bD9NKHQsZSk6TShyLG4pO2w/KGI9dC1BKm8sVD1BKnYpOih3PW4rQSpvLGs9LUEqdik7cmV0dXJue3RleHRYOnksdGV4dFk6eCx0YXJnZXRYOmIsdGFyZ2V0WTp3LGFuY2hvclg6VCxhbmNob3JZOmssc2NhbGU6aCxyb3RhdGU6Z319KGwsYyxkLHAsVSx7aXNIb3Jpem9udGFsOkksY29uc3RyYWluZWQ6dGUsYW5nbGU6cmV9KSk6KHRlPSJib3RoIj09PVAuY29uc3RyYWludGV4dHx8Imluc2lkZSI9PT1QLmNvbnN0cmFpbnRleHQsZWU9RChsLGMsZCxwLFUse2lzSG9yaXpvbnRhbDpJLGNvbnN0cmFpbmVkOnRlLGFuZ2xlOnJlLGFuY2hvcjpQLmluc2lkZXRleHRhbmNob3J9KSk7ZWUuZm9udFNpemU9Wi5zaXplLGYoImhpc3RvZ3JhbSI9PT1QLnR5cGU/ImJhciI6UC50eXBlLGVlLEMpLE4udHJhbnNmb3JtPWVlLGsoVixDLG0sdikuYXR0cigidHJhbnNmb3JtIixpLmdldFRleHRUcmFuc2Zvcm0oZWUpKX0oZSx0LFAscixwLEUsaixILEIsbSx2KSx0LmxheWVyQ2xpcElkJiZzLmhpZGVPdXRzaWRlUmFuZ2VQb2ludChjLFAuc2VsZWN0KCJ0ZXh0IiksdyxDLGQueGNhbGVuZGFyLGQueWNhbGVuZGFyKX0pKTt2YXIgSD0hMT09PWQuY2xpcG9uYXhpcztzLnNldENsaXBVcmwoYyxIP251bGw6dC5sYXllckNsaXBJZCxlKX0pKTtjLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwicGxvdCIpKGUsUCx0LG0pfSx0b01vdmVJbnNpZGVCYXI6RH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MTAyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjEyNCwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjoxMzgsIi4uLy4uL2xpYiI6MjMyLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjI1NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI3OSwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi9hdHRyaWJ1dGVzIjozMjgsIi4vY29uc3RhbnRzIjozMzAsIi4vaGVscGVycyI6MzM0LCIuL3N0eWxlIjozNDIsIi4vdW5pZm9ybV90ZXh0IjozNDQsIkBwbG90bHkvZDMiOjExLCJmYXN0LWlzbnVtZXJpYyI6MTd9XSwzNDA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQscixuLGEpe3ZhciBpPXQuYzJwKG4/ZS5zMDplLnAwLCEwKSxvPXQuYzJwKG4/ZS5zMTplLnAxLCEwKSxsPXIuYzJwKG4/ZS5wMDplLnMwLCEwKSxzPXIuYzJwKG4/ZS5wMTplLnMxLCEwKTtyZXR1cm4gYT9bKGkrbykvMiwobCtzKS8yXTpuP1tvLChsK3MpLzJdOlsoaStvKS8yLHNdfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByLGE9ZS5jZCxpPWUueGF4aXMsbz1lLnlheGlzLGw9YVswXS50cmFjZSxzPSJmdW5uZWwiPT09bC50eXBlLGM9ImgiPT09bC5vcmllbnRhdGlvbix1PVtdO2lmKCExPT09dClmb3Iocj0wO3I8YS5sZW5ndGg7cisrKWFbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBkPWFbcl0sZj0iY3QiaW4gZD9kLmN0Om4oZCxpLG8sYyxzKTt0LmNvbnRhaW5zKGYsITEscixlKT8odS5wdXNoKHtwb2ludE51bWJlcjpyLHg6aS5jMmQoZC54KSx5Om8uYzJkKGQueSl9KSxkLnNlbGVjdGVkPTEpOmQuc2VsZWN0ZWQ9MH1yZXR1cm4gdX19LHt9XSwzNDE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWk7dmFyIG49ZSgiLi4vLi4vbGliIikuZGlzdGluY3RWYWxzLGE9ZSgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBpKGUsdCl7dGhpcy50cmFjZXM9ZSx0aGlzLnNlcE5lZ1ZhbD10LnNlcE5lZ1ZhbCx0aGlzLm92ZXJsYXBOb01lcmdlPXQub3ZlcmxhcE5vTWVyZ2U7Zm9yKHZhciByPTEvMCxpPVtdLG89MDtvPGUubGVuZ3RoO28rKyl7Zm9yKHZhciBsPWVbb10scz0wO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdO2MucCE9PWEmJmkucHVzaChjLnApfWxbMF0mJmxbMF0ud2lkdGgxJiYocj1NYXRoLm1pbihsWzBdLndpZHRoMSxyKSl9dGhpcy5wb3NpdGlvbnM9aTt2YXIgdT1uKGkpO3RoaXMuZGlzdGluY3RQb3NpdGlvbnM9dS52YWxzLDE9PT11LnZhbHMubGVuZ3RoJiZyIT09MS8wP3RoaXMubWluRGlmZj1yOnRoaXMubWluRGlmZj1NYXRoLm1pbih1Lm1pbkRpZmYscik7dmFyIGQ9KHQucG9zQXhpc3x8e30pLnR5cGU7ImNhdGVnb3J5IiE9PWQmJiJtdWx0aWNhdGVnb3J5IiE9PWR8fCh0aGlzLm1pbkRpZmY9MSksdGhpcy5iaW5XaWR0aD10aGlzLm1pbkRpZmYsdGhpcy5iaW5zPXt9fWkucHJvdG90eXBlLnB1dD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0TGFiZWwoZSx0KSxuPXRoaXMuYmluc1tyXXx8MDtyZXR1cm4gdGhpcy5iaW5zW3JdPW4rdCxufSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldExhYmVsKGUsdCk7cmV0dXJuIHRoaXMuYmluc1tyXXx8MH0saS5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4odDwwJiZ0aGlzLnNlcE5lZ1ZhbD8idiI6Il4iKSsodGhpcy5vdmVybGFwTm9NZXJnZT9lOk1hdGgucm91bmQoZS90aGlzLmJpbldpZHRoKSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjIxMiwiLi4vLi4vbGliIjoyMzJ9XSwzNDI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz1lKCIuLi8uLi9saWIiKSxsPWUoIi4uLy4uL3JlZ2lzdHJ5Iikscz1lKCIuL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQsYz1lKCIuL2F0dHJpYnV0ZXMiKSx1PWMudGV4dGZvbnQsZD1jLmluc2lkZXRleHRmb250LGY9Yy5vdXRzaWRldGV4dGZvbnQscD1lKCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBoKGUsdCxyKXtpLnBvaW50U3R5bGUoZS5zZWxlY3RBbGwoInBhdGgiKSx0LHIpLGcoZSx0LHIpfWZ1bmN0aW9uIGcoZSx0LHIpe2Uuc2VsZWN0QWxsKCJ0ZXh0IikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGE9bi5zZWxlY3QodGhpcyksbD1vLmVuc3VyZVVuaWZvcm1Gb250U2l6ZShyLG0oYSxlLHQscikpO2kuZm9udChhLGwpfSkpfWZ1bmN0aW9uIG0oZSx0LHIsbil7dmFyIGE9bi5fZnVsbExheW91dC5mb250LGk9ci50ZXh0Zm9udDtpZihlLmNsYXNzZWQoImJhcnRleHQtaW5zaWRlIikpe3ZhciBvPV8odCxyKTtpPXkocix0LmksYSxvKX1lbHNlIGUuY2xhc3NlZCgiYmFydGV4dC1vdXRzaWRlIikmJihpPXgocix0LmksYSkpO3JldHVybiBpfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiBiKHUsZS50ZXh0Zm9udCx0LHIpfWZ1bmN0aW9uIHkoZSx0LHIsbil7dmFyIGk9dihlLHQscik7cmV0dXJuKHZvaWQgMD09PWUuX2lucHV0LnRleHRmb250fHx2b2lkIDA9PT1lLl9pbnB1dC50ZXh0Zm9udC5jb2xvcnx8QXJyYXkuaXNBcnJheShlLnRleHRmb250LmNvbG9yKSYmdm9pZCAwPT09ZS50ZXh0Zm9udC5jb2xvclt0XSkmJihpPXtjb2xvcjphLmNvbnRyYXN0KG4pLGZhbWlseTppLmZhbWlseSxzaXplOmkuc2l6ZX0pLGIoZCxlLmluc2lkZXRleHRmb250LHQsaSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49dihlLHQscik7cmV0dXJuIGIoZixlLm91dHNpZGV0ZXh0Zm9udCx0LG4pfWZ1bmN0aW9uIGIoZSx0LHIsbil7dD10fHx7fTt2YXIgYT1wLmdldFZhbHVlKHQuZmFtaWx5LHIpLGk9cC5nZXRWYWx1ZSh0LnNpemUsciksbz1wLmdldFZhbHVlKHQuY29sb3Iscik7cmV0dXJue2ZhbWlseTpwLmNvZXJjZVN0cmluZyhlLmZhbWlseSxhLG4uZmFtaWx5KSxzaXplOnAuY29lcmNlTnVtYmVyKGUuc2l6ZSxpLG4uc2l6ZSksY29sb3I6cC5jb2VyY2VDb2xvcihlLmNvbG9yLG8sbi5jb2xvcil9fWZ1bmN0aW9uIF8oZSx0KXtyZXR1cm4id2F0ZXJmYWxsIj09PXQudHlwZT90W2UuZGlyXS5tYXJrZXIuY29sb3I6ZS5tY2N8fGUubWN8fHQubWFya2VyLmNvbG9yfXQuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5zZWxlY3QoZSkuc2VsZWN0QWxsKCJnLmJhcmxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7cyhlLHQsImJhciIpO3ZhciByPXQuc2l6ZSgpLGE9ZS5fZnVsbExheW91dDt0LnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF0udHJhY2Uub3BhY2l0eX0pKS5lYWNoKChmdW5jdGlvbihlKXsoInN0YWNrIj09PWEuYmFybW9kZSYmcj4xfHwwPT09YS5iYXJnYXAmJjA9PT1hLmJhcmdyb3VwZ2FwJiYhZVswXS50cmFjZS5tYXJrZXIubGluZS53aWR0aCkmJm4uc2VsZWN0KHRoaXMpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pKSx0LnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKChmdW5jdGlvbih0KXtoKG4uc2VsZWN0KHRoaXMpLHRbMF0udHJhY2UsZSl9KSksbC5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikodCl9LHN0eWxlVGV4dFBvaW50czpnLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXRbMF0udHJhY2U7YS5zZWxlY3RlZHBvaW50cz9mdW5jdGlvbihlLHQscil7aS5zZWxlY3RlZFBvaW50U3R5bGUoZS5zZWxlY3RBbGwoInBhdGgiKSx0KSxmdW5jdGlvbihlLHQscil7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgYSxsPW4uc2VsZWN0KHRoaXMpO2lmKGUuc2VsZWN0ZWQpe2E9by5lbnN1cmVVbmlmb3JtRm9udFNpemUocixtKGwsZSx0LHIpKTt2YXIgcz10LnNlbGVjdGVkLnRleHRmb250JiZ0LnNlbGVjdGVkLnRleHRmb250LmNvbG9yO3MmJihhLmNvbG9yPXMpLGkuZm9udChsLGEpfWVsc2UgaS5zZWxlY3RlZFRleHRTdHlsZShsLHQpfSkpfShlLnNlbGVjdEFsbCgidGV4dCIpLHQscil9KHIsYSxlKTooaChyLGEsZSksbC5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikocikpfSxnZXRJbnNpZGVUZXh0Rm9udDp5LGdldE91dHNpZGVUZXh0Rm9udDp4LGdldEJhckNvbG9yOl8scmVzaXplVGV4dDpzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjoxMDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MTI0LCIuLi8uLi9saWIiOjIzMiwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi9hdHRyaWJ1dGVzIjozMjgsIi4vaGVscGVycyI6MzM0LCIuL3VuaWZvcm1fdGV4dCI6MzQ0LCJAcGxvdGx5L2QzIjoxMX1dLDM0MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsaT1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPWUoIi4uLy4uL2xpYiIpLmNvZXJjZVBhdHRlcm47dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGwscyl7dmFyIGM9cigibWFya2VyLmNvbG9yIixsKSx1PWEoZSwibWFya2VyIik7dSYmaShlLHQscyxyLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUuY29sb3IiLG4uZGVmYXVsdExpbmUpLGEoZSwibWFya2VyLmxpbmUiKSYmaShlLHQscyxyLHtwcmVmaXg6Im1hcmtlci5saW5lLiIsY0xldHRlcjoiYyJ9KSxyKCJtYXJrZXIubGluZS53aWR0aCIpLHIoIm1hcmtlci5vcGFjaXR5IiksbyhyLCJtYXJrZXIucGF0dGVybiIsYyx1KSxyKCJzZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvciIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjoxMDIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6MTEyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6MTEzLCIuLi8uLi9saWIiOjIzMn1dLDM0NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJAcGxvdGx5L2QzIiksYT1lKCIuLi8uLi9saWIiKTtmdW5jdGlvbiBpKGUpe3JldHVybiJfIitlKyJUZXh0X21pbnNpemUifXQuZXhwb3J0cz17cmVjb3JkTWluVGV4dFNpemU6ZnVuY3Rpb24oZSx0LHIpe2lmKHIudW5pZm9ybXRleHQubW9kZSl7dmFyIG49aShlKSxhPXIudW5pZm9ybXRleHQubWluc2l6ZSxvPXQuc2NhbGUqdC5mb250U2l6ZTt0LmhpZGU9bzxhLHJbbl09cltuXXx8MS8wLHQuaGlkZXx8KHJbbl09TWF0aC5taW4ocltuXSxNYXRoLm1heChvLGEpKSl9fSxjbGVhck1pblRleHRTaXplOmZ1bmN0aW9uKGUsdCl7dFtpKGUpXT12b2lkIDB9LHJlc2l6ZVRleHQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPWUuX2Z1bGxMYXlvdXQsbz1pWyJfIityKyJUZXh0X21pbnNpemUiXTtpZihvKXt2YXIgbCxzPSJoaWRlIj09PWkudW5pZm9ybXRleHQubW9kZTtzd2l0Y2gocil7Y2FzZSJmdW5uZWxhcmVhIjpjYXNlInBpZSI6Y2FzZSJzdW5idXJzdCI6bD0iZy5zbGljZSI7YnJlYWs7Y2FzZSJ0cmVlbWFwIjpjYXNlImljaWNsZSI6bD0iZy5zbGljZSwgZy5wYXRoYmFyIjticmVhaztkZWZhdWx0Omw9ImcucG9pbnRzID4gZy5wb2ludCJ9dC5zZWxlY3RBbGwobCkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS50cmFuc2Zvcm07dCYmKHQuc2NhbGU9cyYmdC5oaWRlPzA6by90LmZvbnRTaXplLG4uc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsYS5nZXRUZXh0VHJhbnNmb3JtKHQpKSl9KSl9fX19LHsiLi4vLi4vbGliIjoyMzIsIkBwbG90bHkvZDMiOjExfV0sMzQ1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPWUoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsaT1lKCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxvPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGw9ZSgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxzPWUoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxjPWUoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9aSh7ZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZToicGxvdCJ9KTt0LmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsYWJlbDA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZGxhYmVsOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6e2NvbG9yczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6by5kZWZhdWx0TGluZSxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sc2NhbGVncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToiY2FsYyJ9LGhvdmVyaW5mbzpjKHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bCh7fSx7a2V5czpbImxhYmVsIiwiY29sb3IiLCJ2YWx1ZSIsInBlcmNlbnQiLCJ0ZXh0Il19KSx0ZXh0dGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImxhYmVsIiwiY29sb3IiLCJ2YWx1ZSIsInBlcmNlbnQiLCJ0ZXh0Il19KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJhdXRvIiwibm9uZSJdLGRmbHQ6ImF1dG8iLGFycmF5T2s6ITAsZWRpdFR5cGU6InBsb3QifSx0ZXh0Zm9udDpjKHt9LHUse30pLGluc2lkZXRleHRvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaG9yaXpvbnRhbCIsInJhZGlhbCIsInRhbmdlbnRpYWwiLCJhdXRvIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6InBsb3QifSxpbnNpZGV0ZXh0Zm9udDpjKHt9LHUse30pLG91dHNpZGV0ZXh0Zm9udDpjKHt9LHUse30pLGF1dG9tYXJnaW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sZm9udDpjKHt9LHUse30pLHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgY2VudGVyIiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjphKHtuYW1lOiJwaWUiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLGhvbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sc29ydDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNvdW50ZXJjbG9ja3dpc2UiLGVkaXRUeXBlOiJjYWxjIn0scm90YXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOi0zNjAsbWF4OjM2MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxwdWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6Yyh7fSx1LHt9KSx0aXRsZXBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgY2VudGVyIiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZWRpdFR5cGU6ImNhbGMifX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MTAxLCIuLi8uLi9saWIvZXh0ZW5kIjoyMjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjI3NSwiLi4vLi4vcGxvdHMvZG9tYWluIjozMDksIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6MzEwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjozMTd9XSwzNDY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9InBpZSIsci5wbG90PWZ1bmN0aW9uKGUsdCxhLGkpe24ucGxvdEJhc2VQbG90KHIubmFtZSxlLHQsYSxpKX0sci5jbGVhbj1mdW5jdGlvbihlLHQsYSxpKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLGUsdCxhLGkpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6MzE2fV0sMzQ3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCJ0aW55Y29sb3IyIiksaT1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz17fTtmdW5jdGlvbiBsKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiEhdCYmKCEhKHQ9YSh0KSkuaXNWYWxpZCgpJiYodD1pLmFkZE9wYWNpdHkodCx0LmdldEFscGhhKCkpLGVbcl18fChlW3JdPXQpLHQpKX19ZnVuY3Rpb24gcyhlLHQpe3ZhciByLG49SlNPTi5zdHJpbmdpZnkoZSksaT10W25dO2lmKCFpKXtmb3IoaT1lLnNsaWNlKCkscj0wO3I8ZS5sZW5ndGg7cisrKWkucHVzaChhKGVbcl0pLmxpZ2h0ZW4oMjApLnRvSGV4U3RyaW5nKCkpO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspaS5wdXNoKGEoZVtyXSkuZGFya2VuKDIwKS50b0hleFN0cmluZygpKTt0W25dPWl9cmV0dXJuIGl9dC5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYSxpPVtdLG89ZS5fZnVsbExheW91dCxzPW8uaGlkZGVubGFiZWxzfHxbXSxjPXQubGFiZWxzLHU9dC5tYXJrZXIuY29sb3JzfHxbXSxkPXQudmFsdWVzLGY9dC5fbGVuZ3RoLHA9dC5faGFzVmFsdWVzJiZmO2lmKHQuZGxhYmVsKWZvcihjPW5ldyBBcnJheShmKSxyPTA7cjxmO3IrKyljW3JdPVN0cmluZyh0LmxhYmVsMCtyKnQuZGxhYmVsKTt2YXIgaD17fSxnPWwob1siXyIrdC50eXBlKyJjb2xvcm1hcCJdKSxtPTAsdj0hMTtmb3Iocj0wO3I8ZjtyKyspe3ZhciB5LHgsYjtpZihwKXtpZih5PWRbcl0sIW4oeSkpY29udGludWU7eT0reX1lbHNlIHk9MTt2b2lkIDAhPT0oeD1jW3JdKSYmIiIhPT14fHwoeD1yKTt2YXIgXz1oW3g9U3RyaW5nKHgpXTt2b2lkIDA9PT1fPyhoW3hdPWkubGVuZ3RoLChiPS0xIT09cy5pbmRleE9mKHgpKXx8KG0rPXkpLGkucHVzaCh7djp5LGxhYmVsOngsY29sb3I6Zyh1W3JdLHgpLGk6cixwdHM6W3JdLGhpZGRlbjpifSkpOih2PSEwLChhPWlbX10pLnYrPXksYS5wdHMucHVzaChyKSxhLmhpZGRlbnx8KG0rPXkpLCExPT09YS5jb2xvciYmdVtyXSYmKGEuY29sb3I9Zyh1W3JdLHgpKSl9cmV0dXJuIGk9aS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnY+PTB9KSksKCJmdW5uZWxhcmVhIj09PXQudHlwZT92OnQuc29ydCkmJmkuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC52LWUudn0pKSxpWzBdJiYoaVswXS52VG90YWw9bSksaX0sY3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24oZSx0KXt2YXIgcj0odHx8e30pLnR5cGU7cnx8KHI9InBpZSIpO3ZhciBuPWUuX2Z1bGxMYXlvdXQsYT1lLmNhbGNkYXRhLGk9bltyKyJjb2xvcndheSJdLGw9blsiXyIrcisiY29sb3JtYXAiXTtuWyJleHRlbmQiK3IrImNvbG9ycyJdJiYoaT1zKGksbykpO2Zvcih2YXIgYz0wLHU9MDt1PGEubGVuZ3RoO3UrKyl7dmFyIGQ9YVt1XTtpZihkWzBdLnRyYWNlLnR5cGU9PT1yKWZvcih2YXIgZj0wO2Y8ZC5sZW5ndGg7ZisrKXt2YXIgcD1kW2ZdOyExPT09cC5jb2xvciYmKGxbcC5sYWJlbF0/cC5jb2xvcj1sW3AubGFiZWxdOihsW3AubGFiZWxdPXAuY29sb3I9aVtjJWkubGVuZ3RoXSxjKyspKX19fSxtYWtlUHVsbENvbG9yRm46bCxnZW5lcmF0ZUV4dGVuZGVkQ29sb3JzOnN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjEwMiwiZmFzdC1pc251bWVyaWMiOjE3LHRpbnljb2xvcjI6Njd9XSwzNDg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZmFzdC1pc251bWVyaWMiKSxhPWUoIi4uLy4uL2xpYiIpLGk9ZSgiLi9hdHRyaWJ1dGVzIiksbz1lKCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxsPWUoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQ7ZnVuY3Rpb24gcyhlLHQpe3ZhciByPUFycmF5LmlzQXJyYXkoZSksaT1hLmlzQXJyYXlPclR5cGVkQXJyYXkodCksbz1NYXRoLm1pbihyP2UubGVuZ3RoOjEvMCxpP3QubGVuZ3RoOjEvMCk7aWYoaXNGaW5pdGUobyl8fChvPTApLG8mJmkpe2Zvcih2YXIgbCxzPTA7czxvO3MrKyl7dmFyIGM9dFtzXTtpZihuKGMpJiZjPjApe2w9ITA7YnJlYWt9fWx8fChvPTApfXJldHVybntoYXNMYWJlbHM6cixoYXNWYWx1ZXM6aSxsZW46b319dC5leHBvcnRzPXtoYW5kbGVMYWJlbHNBbmRWYWx1ZXM6cyxzdXBwbHlEZWZhdWx0czpmdW5jdGlvbihlLHQscixuKXtmdW5jdGlvbiBjKHIsbil7cmV0dXJuIGEuY29lcmNlKGUsdCxpLHIsbil9dmFyIHU9cyhjKCJsYWJlbHMiKSxjKCJ2YWx1ZXMiKSksZD11LmxlbjtpZih0Ll9oYXNMYWJlbHM9dS5oYXNMYWJlbHMsdC5faGFzVmFsdWVzPXUuaGFzVmFsdWVzLCF0Ll9oYXNMYWJlbHMmJnQuX2hhc1ZhbHVlcyYmKGMoImxhYmVsMCIpLGMoImRsYWJlbCIpKSxkKXt0Ll9sZW5ndGg9ZCxjKCJtYXJrZXIubGluZS53aWR0aCIpJiZjKCJtYXJrZXIubGluZS5jb2xvciIpLGMoIm1hcmtlci5jb2xvcnMiKSxjKCJzY2FsZWdyb3VwIik7dmFyIGYscD1jKCJ0ZXh0IiksaD1jKCJ0ZXh0dGVtcGxhdGUiKTtpZihofHwoZj1jKCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheShwKT8idGV4dCtwZXJjZW50IjoicGVyY2VudCIpKSxjKCJob3ZlcnRleHQiKSxjKCJob3ZlcnRlbXBsYXRlIiksaHx8ZiYmIm5vbmUiIT09Zil7dmFyIGc9YygidGV4dHBvc2l0aW9uIik7bChlLHQsbixjLGcse21vZHVsZUhhc1NlbGVjdGVkOiExLG1vZHVsZUhhc1Vuc2VsZWN0ZWQ6ITEsbW9kdWxlSGFzQ29uc3RyYWluOiExLG1vZHVsZUhhc0NsaXBvbmF4aXM6ITEsbW9kdWxlSGFzVGV4dGFuZ2xlOiExLG1vZHVsZUhhc0luc2lkZWFuY2hvcjohMX0pLChBcnJheS5pc0FycmF5KGcpfHwiYXV0byI9PT1nfHwib3V0c2lkZSI9PT1nKSYmYygiYXV0b21hcmdpbiIpLCgiaW5zaWRlIj09PWd8fCJhdXRvIj09PWd8fEFycmF5LmlzQXJyYXkoZykpJiZjKCJpbnNpZGV0ZXh0b3JpZW50YXRpb24iKX1vKHQsbixjKTt2YXIgbT1jKCJob2xlIik7aWYoYygidGl0bGUudGV4dCIpKXt2YXIgdj1jKCJ0aXRsZS5wb3NpdGlvbiIsbT8ibWlkZGxlIGNlbnRlciI6InRvcCBjZW50ZXIiKTttfHwibWlkZGxlIGNlbnRlciIhPT12fHwodC50aXRsZS5wb3NpdGlvbj0idG9wIGNlbnRlciIpLGEuY29lcmNlRm9udChjLCJ0aXRsZS5mb250IixuLmZvbnQpfWMoInNvcnQiKSxjKCJkaXJlY3Rpb24iKSxjKCJyb3RhdGlvbiIpLGMoInB1bGwiKX1lbHNlIHQudmlzaWJsZT0hMX19fSx7Ii4uLy4uL2xpYiI6MjMyLCIuLi8uLi9wbG90cy9kb21haW4iOjMwOSwiLi4vYmFyL2RlZmF1bHRzIjozMzIsIi4vYXR0cmlidXRlcyI6MzQ1LCJmYXN0LWlzbnVtZXJpYyI6MTd9XSwzNDk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlNdWx0aVBvaW50VmFsdWVzO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPXtjdXJ2ZU51bWJlcjp0LmluZGV4LHBvaW50TnVtYmVyczplLnB0cyxkYXRhOnQuX2lucHV0LGZ1bGxEYXRhOnQsbGFiZWw6ZS5sYWJlbCxjb2xvcjplLmNvbG9yLHZhbHVlOmUudixwZXJjZW50OmUucGVyY2VudCx0ZXh0OmUudGV4dCxiYm94OmUuYmJveCx2OmUudn07cmV0dXJuIDE9PT1lLnB0cy5sZW5ndGgmJihyLnBvaW50TnVtYmVyPXIuaT1lLnB0c1swXSksbihyLHQsZS5wdHMpLCJmdW5uZWxhcmVhIj09PXQudHlwZSYmKGRlbGV0ZSByLnYsZGVsZXRlIHIuaSkscn19LHsiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjoxMzh9XSwzNTA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIik7ZnVuY3Rpb24gYShlKXtyZXR1cm4tMSE9PWUuaW5kZXhPZigiZSIpP2UucmVwbGFjZSgvWy5dPzArZS8sImUiKTotMSE9PWUuaW5kZXhPZigiLiIpP2UucmVwbGFjZSgvWy5dPzArJC8sIiIpOmV9ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKGUsdCl7dmFyIHI9YSgoMTAwKmUpLnRvUHJlY2lzaW9uKDMpKTtyZXR1cm4gbi5udW1TZXBhcmF0ZShyLHQpKyIlIn0sci5mb3JtYXRQaWVWYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciByPWEoZS50b1ByZWNpc2lvbigxMCkpO3JldHVybiBuLm51bVNlcGFyYXRlKHIsdCl9LHIuZ2V0Rmlyc3RGaWxsZWQ9ZnVuY3Rpb24oZSx0KXtpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1lW3Rbcl1dO2lmKG58fDA9PT1ufHwiIj09PW4pcmV0dXJuIG59fSxyLmNhc3RPcHRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9yLmdldEZpcnN0RmlsbGVkKGUsdCk6ZXx8dm9pZCAwfSxyLmdldFJvdGF0aW9uQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuKCJhdXRvIj09PWU/MDplKSpNYXRoLlBJLzE4MH19LHsiLi4vLi4vbGliIjoyMzJ9XSwzNTE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXthdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czplKCIuL2xheW91dF9kZWZhdWx0cyIpLGxheW91dEF0dHJpYnV0ZXM6ZSgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGNhbGM6ZSgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzplKCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OmUoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6ZSgiLi9zdHlsZSIpLHN0eWxlT25lOmUoIi4vc3R5bGVfb25lIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InBpZSIsYmFzZVBsb3RNb2R1bGU6ZSgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsicGllLWxpa2UiLCJwaWUiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjozNDUsIi4vYmFzZV9wbG90IjozNDYsIi4vY2FsYyI6MzQ3LCIuL2RlZmF1bHRzIjozNDgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjM1MiwiLi9sYXlvdXRfZGVmYXVsdHMiOjM1MywiLi9wbG90IjozNTQsIi4vc3R5bGUiOjM1NSwiLi9zdHlsZV9vbmUiOjM1Nn1dLDM1MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e2hpZGRlbmxhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxwaWVjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZHBpZWNvbG9yczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDM1MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKGUsdCxhLHIsaSl9cigiaGlkZGVubGFiZWxzIikscigicGllY29sb3J3YXkiLHQuY29sb3J3YXkpLHIoImV4dGVuZHBpZWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjIzMiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MzUyfV0sMzU0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIkBwbG90bHkvZDMiKSxhPWUoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaT1lKCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD1lKCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPWUoIi4uLy4uL2xpYiIpLGM9cy5zdHJTY2FsZSx1PXMuc3RyVHJhbnNsYXRlLGQ9ZSgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj1lKCIuLi9iYXIvdW5pZm9ybV90ZXh0IikscD1mLnJlY29yZE1pblRleHRTaXplLGg9Zi5jbGVhck1pblRleHRTaXplLGc9ZSgiLi4vYmFyL2NvbnN0YW50cyIpLlRFWFRQQUQsbT1lKCIuL2hlbHBlcnMiKSx2PWUoIi4vZXZlbnRfZGF0YSIpLHk9ZSgiLi4vLi4vbGliIikuaXNWYWxpZFRleHRWYWx1ZTtmdW5jdGlvbiB4KGUsdCxyKXt2YXIgYT1yWzBdLG89YS5jeCxsPWEuY3ksYz1hLnRyYWNlLHU9ImZ1bm5lbGFyZWEiPT09Yy50eXBlOyJfaGFzSG92ZXJMYWJlbCJpbiBjfHwoYy5faGFzSG92ZXJMYWJlbD0hMSksIl9oYXNIb3ZlckV2ZW50ImluIGN8fChjLl9oYXNIb3ZlckV2ZW50PSExKSxlLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbihlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGQ9dC5fZnVsbERhdGFbYy5pbmRleF07aWYoIXQuX2RyYWdnaW5nJiYhMSE9PXIuaG92ZXJtb2RlKXt2YXIgZj1kLmhvdmVyaW5mbztpZihBcnJheS5pc0FycmF5KGYpJiYoZj1pLmNhc3RIb3ZlcmluZm8oe2hvdmVyaW5mbzpbbS5jYXN0T3B0aW9uKGYsZS5wdHMpXSxfbW9kdWxlOmMuX21vZHVsZX0sciwwKSksImFsbCI9PT1mJiYoZj0ibGFiZWwrdGV4dCt2YWx1ZStwZXJjZW50K25hbWUiKSxkLmhvdmVydGVtcGxhdGV8fCJub25lIiE9PWYmJiJza2lwIiE9PWYmJmYpe3ZhciBwPWUuckluc2NyaWJlZHx8MCxoPW8rZS5weG1pZFswXSooMS1wKSxnPWwrZS5weG1pZFsxXSooMS1wKSx5PXIuc2VwYXJhdG9ycyx4PVtdO2lmKGYmJi0xIT09Zi5pbmRleE9mKCJsYWJlbCIpJiZ4LnB1c2goZS5sYWJlbCksZS50ZXh0PW0uY2FzdE9wdGlvbihkLmhvdmVydGV4dHx8ZC50ZXh0LGUucHRzKSxmJiYtMSE9PWYuaW5kZXhPZigidGV4dCIpKXt2YXIgYj1lLnRleHQ7cy5pc1ZhbGlkVGV4dFZhbHVlKGIpJiZ4LnB1c2goYil9ZS52YWx1ZT1lLnYsZS52YWx1ZUxhYmVsPW0uZm9ybWF0UGllVmFsdWUoZS52LHkpLGYmJi0xIT09Zi5pbmRleE9mKCJ2YWx1ZSIpJiZ4LnB1c2goZS52YWx1ZUxhYmVsKSxlLnBlcmNlbnQ9ZS52L2EudlRvdGFsLGUucGVyY2VudExhYmVsPW0uZm9ybWF0UGllUGVyY2VudChlLnBlcmNlbnQseSksZiYmLTEhPT1mLmluZGV4T2YoInBlcmNlbnQiKSYmeC5wdXNoKGUucGVyY2VudExhYmVsKTt2YXIgXz1kLmhvdmVybGFiZWwsdz1fLmZvbnQsVD1bXTtpLmxvbmVIb3Zlcih7dHJhY2U6Yyx4MDpoLXAqYS5yLHgxOmgrcCphLnIseTpnLF94MDp1P28rZS5UTFswXTpoLXAqYS5yLF94MTp1P28rZS5UUlswXTpoK3AqYS5yLF95MDp1P2wrZS5UTFsxXTpnLXAqYS5yLF95MTp1P2wrZS5CTFsxXTpnK3AqYS5yLHRleHQ6eC5qb2luKCI8YnI+IiksbmFtZTpkLmhvdmVydGVtcGxhdGV8fC0xIT09Zi5pbmRleE9mKCJuYW1lIik/ZC5uYW1lOnZvaWQgMCxpZGVhbEFsaWduOmUucHhtaWRbMF08MD8ibGVmdCI6InJpZ2h0Iixjb2xvcjptLmNhc3RPcHRpb24oXy5iZ2NvbG9yLGUucHRzKXx8ZS5jb2xvcixib3JkZXJDb2xvcjptLmNhc3RPcHRpb24oXy5ib3JkZXJjb2xvcixlLnB0cyksZm9udEZhbWlseTptLmNhc3RPcHRpb24ody5mYW1pbHksZS5wdHMpLGZvbnRTaXplOm0uY2FzdE9wdGlvbih3LnNpemUsZS5wdHMpLGZvbnRDb2xvcjptLmNhc3RPcHRpb24ody5jb2xvcixlLnB0cyksbmFtZUxlbmd0aDptLmNhc3RPcHRpb24oXy5uYW1lbGVuZ3RoLGUucHRzKSx0ZXh0QWxpZ246bS5jYXN0T3B0aW9uKF8uYWxpZ24sZS5wdHMpLGhvdmVydGVtcGxhdGU6bS5jYXN0T3B0aW9uKGQuaG92ZXJ0ZW1wbGF0ZSxlLnB0cyksaG92ZXJ0ZW1wbGF0ZUxhYmVsczplLGV2ZW50RGF0YTpbdihlLGQpXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dCxpbk91dF9iYm94OlR9KSxlLmJib3g9VFswXSxjLl9oYXNIb3ZlckxhYmVsPSEwfWMuX2hhc0hvdmVyRXZlbnQ9ITAsdC5lbWl0KCJwbG90bHlfaG92ZXIiLHtwb2ludHM6W3YoZSxkKV0sZXZlbnQ6bi5ldmVudH0pfX0pKSxlLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsYT10Ll9mdWxsRGF0YVtjLmluZGV4XSxvPW4uc2VsZWN0KHRoaXMpLmRhdHVtKCk7Yy5faGFzSG92ZXJFdmVudCYmKGUub3JpZ2luYWxFdmVudD1uLmV2ZW50LHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6W3YobyxhKV0sZXZlbnQ6bi5ldmVudH0pLGMuX2hhc0hvdmVyRXZlbnQ9ITEpLGMuX2hhc0hvdmVyTGFiZWwmJihpLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSxjLl9oYXNIb3ZlckxhYmVsPSExKX0pKSxlLm9uKCJjbGljayIsKGZ1bmN0aW9uKGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsYT10Ll9mdWxsRGF0YVtjLmluZGV4XTt0Ll9kcmFnZ2luZ3x8ITE9PT1yLmhvdmVybW9kZXx8KHQuX2hvdmVyZGF0YT1bdihlLGEpXSxpLmNsaWNrKHQsbi5ldmVudCkpfSkpfWZ1bmN0aW9uIGIoZSx0LHIpe3ZhciBuPW0uY2FzdE9wdGlvbihlLmluc2lkZXRleHRmb250LmNvbG9yLHQucHRzKTshbiYmZS5faW5wdXQudGV4dGZvbnQmJihuPW0uY2FzdE9wdGlvbihlLl9pbnB1dC50ZXh0Zm9udC5jb2xvcix0LnB0cykpO3ZhciBhPW0uY2FzdE9wdGlvbihlLmluc2lkZXRleHRmb250LmZhbWlseSx0LnB0cyl8fG0uY2FzdE9wdGlvbihlLnRleHRmb250LmZhbWlseSx0LnB0cyl8fHIuZmFtaWx5LGk9bS5jYXN0T3B0aW9uKGUuaW5zaWRldGV4dGZvbnQuc2l6ZSx0LnB0cyl8fG0uY2FzdE9wdGlvbihlLnRleHRmb250LnNpemUsdC5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm58fG8uY29udHJhc3QodC5jb2xvciksZmFtaWx5OmEsc2l6ZTppfX1mdW5jdGlvbiBfKGUsdCl7Zm9yKHZhciByLG4sYT0wO2E8ZS5sZW5ndGg7YSsrKWlmKChuPShyPWVbYV1bMF0pLnRyYWNlKS50aXRsZS50ZXh0KXt2YXIgaT1uLnRpdGxlLnRleHQ7bi5fbWV0YSYmKGk9cy50ZW1wbGF0ZVN0cmluZyhpLG4uX21ldGEpKTt2YXIgbz1sLnRlc3Rlci5hcHBlbmQoInRleHQiKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS50ZXh0KGkpLmNhbGwobC5mb250LG4udGl0bGUuZm9udCkuY2FsbChkLmNvbnZlcnRUb1RzcGFucyx0KSxjPWwuYkJveChvLm5vZGUoKSwhMCk7ci50aXRsZUJveD17d2lkdGg6Yy53aWR0aCxoZWlnaHQ6Yy5oZWlnaHR9LG8ucmVtb3ZlKCl9fWZ1bmN0aW9uIHcoZSx0LHIpe3ZhciBuPXIucnx8dC5ycHgxLGE9dC5ySW5zY3JpYmVkO2lmKHQuc3RhcnRhbmdsZT09PXQuc3RvcGFuZ2xlKXJldHVybntyQ2VudGVyOjEtYSxzY2FsZTowLHJvdGF0ZTowLHRleHRQb3NBbmdsZTowfTt2YXIgaSxvPXQucmluZyxsPTE9PT1vJiZNYXRoLmFicyh0LnN0YXJ0YW5nbGUtdC5zdG9wYW5nbGUpPT09MipNYXRoLlBJLHM9dC5oYWxmYW5nbGUsYz10Lm1pZGFuZ2xlLHU9ci50cmFjZS5pbnNpZGV0ZXh0b3JpZW50YXRpb24sZD0iaG9yaXpvbnRhbCI9PT11LGY9InRhbmdlbnRpYWwiPT09dSxwPSJyYWRpYWwiPT09dSxoPSJhdXRvIj09PXUsZz1bXTtpZighaCl7dmFyIG0sdj1mdW5jdGlvbihyLGEpe2lmKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5zdGFydGFuZ2xlLG49ZS5zdG9wYW5nbGU7cmV0dXJuIHI+dCYmdD5ufHxyPHQmJnQ8bn0odCxyKSl7dmFyIGw9TWF0aC5hYnMoci10LnN0YXJ0YW5nbGUpLHM9TWF0aC5hYnMoci10LnN0b3BhbmdsZSksYz1sPHM/bDpzOyhpPSJ0YW4iPT09YT9NKGUsbixvLGMsMCk6VChlLG4sbyxjLE1hdGguUEkvMikpLnRleHRQb3NBbmdsZT1yLGcucHVzaChpKX19O2lmKGR8fGYpe2ZvcihtPTQ7bT49LTQ7bS09Mil2KE1hdGguUEkqbSwidGFuIik7Zm9yKG09NDttPj0tNDttLT0yKXYoTWF0aC5QSSoobSsxKSwidGFuIil9aWYoZHx8cCl7Zm9yKG09NDttPj0tNDttLT0yKXYoTWF0aC5QSSoobSsxLjUpLCJyYWQiKTtmb3IobT00O20+PS00O20tPTIpdihNYXRoLlBJKihtKy41KSwicmFkIil9fWlmKGx8fGh8fGQpe3ZhciB5PU1hdGguc3FydChlLndpZHRoKmUud2lkdGgrZS5oZWlnaHQqZS5oZWlnaHQpO2lmKChpPXtzY2FsZTphKm4qMi95LHJDZW50ZXI6MS1hLHJvdGF0ZTowfSkudGV4dFBvc0FuZ2xlPSh0LnN0YXJ0YW5nbGUrdC5zdG9wYW5nbGUpLzIsaS5zY2FsZT49MSlyZXR1cm4gaTtnLnB1c2goaSl9KGh8fHApJiYoKGk9VChlLG4sbyxzLGMpKS50ZXh0UG9zQW5nbGU9KHQuc3RhcnRhbmdsZSt0LnN0b3BhbmdsZSkvMixnLnB1c2goaSkpLChofHxmKSYmKChpPU0oZSxuLG8scyxjKSkudGV4dFBvc0FuZ2xlPSh0LnN0YXJ0YW5nbGUrdC5zdG9wYW5nbGUpLzIsZy5wdXNoKGkpKTtmb3IodmFyIHg9MCxiPTAsXz0wO188Zy5sZW5ndGg7XysrKXt2YXIgdz1nW19dLnNjYWxlO2lmKGI8dyYmKGI9dyx4PV8pLCFoJiZiPj0xKWJyZWFrfXJldHVybiBnW3hdfWZ1bmN0aW9uIFQoZSx0LHIsbixhKXt0PU1hdGgubWF4KDAsdC0yKmcpO3ZhciBpPWUud2lkdGgvZS5oZWlnaHQsbz1MKGksbix0LHIpO3JldHVybntzY2FsZToyKm8vZS5oZWlnaHQsckNlbnRlcjprKGksby90KSxyb3RhdGU6QShhKX19ZnVuY3Rpb24gTShlLHQscixuLGEpe3Q9TWF0aC5tYXgoMCx0LTIqZyk7dmFyIGk9ZS5oZWlnaHQvZS53aWR0aCxvPUwoaSxuLHQscik7cmV0dXJue3NjYWxlOjIqby9lLndpZHRoLHJDZW50ZXI6ayhpLG8vdCkscm90YXRlOkEoYStNYXRoLlBJLzIpfX1mdW5jdGlvbiBrKGUsdCl7cmV0dXJuIE1hdGguY29zKHQpLWUqdH1mdW5jdGlvbiBBKGUpe3JldHVybigxODAvTWF0aC5QSSplKzcyMCklMTgwLTkwfWZ1bmN0aW9uIEwoZSx0LHIsbil7dmFyIGE9ZSsxLygyKk1hdGgudGFuKHQpKTtyZXR1cm4gcipNYXRoLm1pbigxLyhNYXRoLnNxcnQoYSphKy41KSthKSxuLyhNYXRoLnNxcnQoZSplK24vMikrZSkpfWZ1bmN0aW9uIFMoZSx0KXtyZXR1cm4gZS52IT09dC52VG90YWx8fHQudHJhY2UuaG9sZT9NYXRoLm1pbigxLygxKzEvTWF0aC5zaW4oZS5oYWxmYW5nbGUpKSxlLnJpbmcvMik6MX1mdW5jdGlvbiBEKGUsdCl7dmFyIHI9dC5weG1pZFswXSxuPXQucHhtaWRbMV0sYT1lLndpZHRoLzIsaT1lLmhlaWdodC8yO3JldHVybiByPDAmJihhKj0tMSksbjwwJiYoaSo9LTEpLHtzY2FsZToxLHJDZW50ZXI6MSxyb3RhdGU6MCx4OmErTWF0aC5hYnMoaSkqKGE+MD8xOi0xKS8yLHk6aS8oMStyKnIvKG4qbikpLG91dHNpZGU6ITB9fWZ1bmN0aW9uIEMoZSx0KXt2YXIgcixuLGEsaT1lLnRyYWNlLG89e3g6ZS5jeCx5OmUuY3l9LGw9e3R4OjAsdHk6MH07bC50eSs9aS50aXRsZS5mb250LnNpemUsYT1QKGkpLC0xIT09aS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJ0b3AiKT8oby55LT0oMSthKSplLnIsbC50eS09ZS50aXRsZUJveC5oZWlnaHQpOi0xIT09aS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSYmKG8ueSs9KDErYSkqZS5yKTt2YXIgcyxjLHU9KHM9ZS5yLGM9ZS50cmFjZS5hc3BlY3RyYXRpbyxzLyh2b2lkIDA9PT1jPzE6YykpLGQ9dC53KihpLmRvbWFpbi54WzFdLWkuZG9tYWluLnhbMF0pLzI7cmV0dXJuLTEhPT1pLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImxlZnQiKT8oZCs9dSxvLngtPSgxK2EpKnUsbC50eCs9ZS50aXRsZUJveC53aWR0aC8yKTotMSE9PWkudGl0bGUucG9zaXRpb24uaW5kZXhPZigiY2VudGVyIik/ZCo9MjotMSE9PWkudGl0bGUucG9zaXRpb24uaW5kZXhPZigicmlnaHQiKSYmKGQrPXUsby54Kz0oMSthKSp1LGwudHgtPWUudGl0bGVCb3gud2lkdGgvMikscj1kL2UudGl0bGVCb3gud2lkdGgsbj1PKGUsdCkvZS50aXRsZUJveC5oZWlnaHQse3g6by54LHk6by55LHNjYWxlOk1hdGgubWluKHIsbiksdHg6bC50eCx0eTpsLnR5fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9ZS50cmFjZSxuPXQuaCooci5kb21haW4ueVsxXS1yLmRvbWFpbi55WzBdKTtyZXR1cm4gTWF0aC5taW4oZS50aXRsZUJveC5oZWlnaHQsbi8yKX1mdW5jdGlvbiBQKGUpe3ZhciB0LHI9ZS5wdWxsO2lmKCFyKXJldHVybiAwO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHI9MCx0PTA7dDxlLnB1bGwubGVuZ3RoO3QrKyllLnB1bGxbdF0+ciYmKHI9ZS5wdWxsW3RdKTtyZXR1cm4gcn1mdW5jdGlvbiBJKGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXVswXSxpPWEudHJhY2Usbz1pLmRvbWFpbixsPXQudyooby54WzFdLW8ueFswXSkscz10LmgqKG8ueVsxXS1vLnlbMF0pO2kudGl0bGUudGV4dCYmIm1pZGRsZSBjZW50ZXIiIT09aS50aXRsZS5wb3NpdGlvbiYmKHMtPU8oYSx0KSk7dmFyIGM9bC8yLHU9cy8yOyJmdW5uZWxhcmVhIiE9PWkudHlwZXx8aS5zY2FsZWdyb3VwfHwodS89aS5hc3BlY3RyYXRpbyksYS5yPU1hdGgubWluKGMsdSkvKDErUChpKSksYS5jeD10LmwrdC53KihpLmRvbWFpbi54WzFdK2kuZG9tYWluLnhbMF0pLzIsYS5jeT10LnQrdC5oKigxLWkuZG9tYWluLnlbMF0pLXMvMixpLnRpdGxlLnRleHQmJi0xIT09aS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSYmKGEuY3ktPU8oYSx0KSksaS5zY2FsZWdyb3VwJiYtMT09PXIuaW5kZXhPZihpLnNjYWxlZ3JvdXApJiZyLnB1c2goaS5zY2FsZWdyb3VwKX0hZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixhLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89MS8wLGw9dFtpXTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKHI9ZVtuXVswXSwoYT1yLnRyYWNlKS5zY2FsZWdyb3VwPT09bCl7dmFyIHM7aWYoInBpZSI9PT1hLnR5cGUpcz1yLnIqci5yO2Vsc2UgaWYoImZ1bm5lbGFyZWEiPT09YS50eXBlKXt2YXIgYyx1O2EuYXNwZWN0cmF0aW8+MT8oYz1yLnIsdT1jL2EuYXNwZWN0cmF0aW8pOih1PXIucixjPXUqYS5hc3BlY3RyYXRpbyksYyo9KDErYS5iYXNlcmF0aW8pLzIscz1jKnV9bz1NYXRoLm1pbihvLHMvci52VG90YWwpfWZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYocj1lW25dWzBdLChhPXIudHJhY2UpLnNjYWxlZ3JvdXA9PT1sKXt2YXIgZD1vKnIudlRvdGFsOyJmdW5uZWxhcmVhIj09PWEudHlwZSYmKGQvPSgxK2EuYmFzZXJhdGlvKS8yLGQvPWEuYXNwZWN0cmF0aW8pLHIucj1NYXRoLnNxcnQoZCl9fX0oZSxyKX1mdW5jdGlvbiBSKGUsdCl7cmV0dXJuW2UqTWF0aC5zaW4odCksLWUqTWF0aC5jb3ModCldfWZ1bmN0aW9uIHooZSx0LHIpe3ZhciBuPWUuX2Z1bGxMYXlvdXQsYT1yLnRyYWNlLGk9YS50ZXh0dGVtcGxhdGUsbz1hLnRleHRpbmZvO2lmKCFpJiZvJiYibm9uZSIhPT1vKXt2YXIgbCxjPW8uc3BsaXQoIisiKSx1PWZ1bmN0aW9uKGUpe3JldHVybi0xIT09Yy5pbmRleE9mKGUpfSxkPXUoImxhYmVsIiksZj11KCJ0ZXh0IikscD11KCJ2YWx1ZSIpLGg9dSgicGVyY2VudCIpLGc9bi5zZXBhcmF0b3JzO2lmKGw9ZD9bdC5sYWJlbF06W10sZil7dmFyIHY9bS5nZXRGaXJzdEZpbGxlZChhLnRleHQsdC5wdHMpO3kodikmJmwucHVzaCh2KX1wJiZsLnB1c2gobS5mb3JtYXRQaWVWYWx1ZSh0LnYsZykpLGgmJmwucHVzaChtLmZvcm1hdFBpZVBlcmNlbnQodC52L3IudlRvdGFsLGcpKSx0LnRleHQ9bC5qb2luKCI8YnI+Iil9aWYoaSl7dmFyIHg9cy5jYXN0T3B0aW9uKGEsdC5pLCJ0ZXh0dGVtcGxhdGUiKTtpZih4KXt2YXIgYj1mdW5jdGlvbihlKXtyZXR1cm57bGFiZWw6ZS5sYWJlbCx2YWx1ZTplLnYsdmFsdWVMYWJlbDptLmZvcm1hdFBpZVZhbHVlKGUudixuLnNlcGFyYXRvcnMpLHBlcmNlbnQ6ZS52L3IudlRvdGFsLHBlcmNlbnRMYWJlbDptLmZvcm1hdFBpZVBlcmNlbnQoZS52L3IudlRvdGFsLG4uc2VwYXJhdG9ycyksY29sb3I6ZS5jb2xvcix0ZXh0OmUudGV4dCxjdXN0b21kYXRhOnMuY2FzdE9wdGlvbihhLGUuaSwiY3VzdG9tZGF0YSIpfX0odCksXz1tLmdldEZpcnN0RmlsbGVkKGEudGV4dCx0LnB0cyk7KHkoXyl8fCIiPT09XykmJihiLnRleHQ9XyksdC50ZXh0PXMudGV4dHRlbXBsYXRlU3RyaW5nKHgsYixlLl9mdWxsTGF5b3V0Ll9kM2xvY2FsZSxiLGEuX21ldGF8fHt9KX1lbHNlIHQudGV4dD0iIn19ZnVuY3Rpb24gTihlLHQpe3ZhciByPWUucm90YXRlKk1hdGguUEkvMTgwLG49TWF0aC5jb3MociksYT1NYXRoLnNpbihyKSxpPSh0LmxlZnQrdC5yaWdodCkvMixvPSh0LnRvcCt0LmJvdHRvbSkvMjtlLnRleHRYPWkqbi1vKmEsZS50ZXh0WT1pKmErbypuLGUubm9DZW50ZXI9ITB9dC5leHBvcnRzPXtwbG90OmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fZnVsbExheW91dCxpPXIuX3NpemU7aCgicGllIixyKSxfKHQsZSksSSh0LGkpO3ZhciBmPXMubWFrZVRyYWNlR3JvdXBzKHIuX3BpZWxheWVyLHQsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGY9bi5zZWxlY3QodGhpcyksaD10WzBdLGc9aC50cmFjZTshZnVuY3Rpb24oZSl7dmFyIHQscixuLGE9ZVswXSxpPWEucixvPWEudHJhY2UsbD1tLmdldFJvdGF0aW9uQW5nbGUoby5yb3RhdGlvbikscz0yKk1hdGguUEkvYS52VG90YWwsYz0icHgwIix1PSJweDEiO2lmKCJjb3VudGVyY2xvY2t3aXNlIj09PW8uZGlyZWN0aW9uKXtmb3IodD0wO3Q8ZS5sZW5ndGgmJmVbdF0uaGlkZGVuO3QrKyk7aWYodD09PWUubGVuZ3RoKXJldHVybjtsKz1zKmVbdF0udixzKj0tMSxjPSJweDEiLHU9InB4MCJ9Zm9yKG49UihpLGwpLHQ9MDt0PGUubGVuZ3RoO3QrKykocj1lW3RdKS5oaWRkZW58fChyW2NdPW4sci5zdGFydGFuZ2xlPWwsbCs9cypyLnYvMixyLnB4bWlkPVIoaSxsKSxyLm1pZGFuZ2xlPWwsbCs9cypyLnYvMixuPVIoaSxsKSxyLnN0b3BhbmdsZT1sLHJbdV09bixyLmxhcmdlQXJjPXIudj5hLnZUb3RhbC8yPzE6MCxyLmhhbGZhbmdsZT1NYXRoLlBJKk1hdGgubWluKHIudi9hLnZUb3RhbCwuNSksci5yaW5nPTEtby5ob2xlLHIuckluc2NyaWJlZD1TKHIsYSkpfSh0KSxmLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIiksZi5lYWNoKChmdW5jdGlvbigpe3ZhciB2PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5zbGljZSIpLmRhdGEodCk7di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCksdi5leGl0KCkucmVtb3ZlKCk7dmFyIHk9W1tbXSxbXV0sW1tdLFtdXV0sXz0hMTt2LmVhY2goKGZ1bmN0aW9uKGEsaSl7aWYoYS5oaWRkZW4pbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlbHNle2EucG9pbnROdW1iZXI9YS5pLGEuY3VydmVOdW1iZXI9Zy5pbmRleCx5W2EucHhtaWRbMV08MD8wOjFdW2EucHhtaWRbMF08MD8wOjFdLnB1c2goYSk7dmFyIG89aC5jeCxjPWguY3ksdT1uLnNlbGVjdCh0aGlzKSxmPXUuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5kYXRhKFthXSk7aWYoZi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInN1cmZhY2UiLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLHUuY2FsbCh4LGUsdCksZy5wdWxsKXt2YXIgdj0rbS5jYXN0T3B0aW9uKGcucHVsbCxhLnB0cyl8fDA7dj4wJiYobys9diphLnB4bWlkWzBdLGMrPXYqYS5weG1pZFsxXSl9YS5jeEZpbmFsPW8sYS5jeUZpbmFsPWM7dmFyIFQ9Zy5ob2xlO2lmKGEudj09PWgudlRvdGFsKXt2YXIgTT0iTSIrKG8rYS5weDBbMF0pKyIsIisoYythLnB4MFsxXSkrQyhhLnB4MCxhLnB4bWlkLCEwLDEpK0MoYS5weG1pZCxhLnB4MCwhMCwxKSsiWiI7VD9mLmF0dHIoImQiLCJNIisobytUKmEucHgwWzBdKSsiLCIrKGMrVCphLnB4MFsxXSkrQyhhLnB4MCxhLnB4bWlkLCExLFQpK0MoYS5weG1pZCxhLnB4MCwhMSxUKSsiWiIrTSk6Zi5hdHRyKCJkIixNKX1lbHNle3ZhciBrPUMoYS5weDAsYS5weDEsITAsMSk7aWYoVCl7dmFyIEE9MS1UO2YuYXR0cigiZCIsIk0iKyhvK1QqYS5weDFbMF0pKyIsIisoYytUKmEucHgxWzFdKStDKGEucHgxLGEucHgwLCExLFQpKyJsIitBKmEucHgwWzBdKyIsIitBKmEucHgwWzFdK2srIloiKX1lbHNlIGYuYXR0cigiZCIsIk0iK28rIiwiK2MrImwiK2EucHgwWzBdKyIsIithLnB4MFsxXStrKyJaIil9eihlLGEsaCk7dmFyIEw9bS5jYXN0T3B0aW9uKGcudGV4dHBvc2l0aW9uLGEucHRzKSxTPXUuc2VsZWN0QWxsKCJnLnNsaWNldGV4dCIpLmRhdGEoYS50ZXh0JiYibm9uZSIhPT1MP1swXTpbXSk7Uy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLFMuZXhpdCgpLnJlbW92ZSgpLFMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdT1zLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwidGV4dCIsIiIsKGZ1bmN0aW9uKGUpe2UuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksZj1zLmVuc3VyZVVuaWZvcm1Gb250U2l6ZShlLCJvdXRzaWRlIj09PUw/ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPW0uY2FzdE9wdGlvbihlLm91dHNpZGV0ZXh0Zm9udC5jb2xvcix0LnB0cyl8fG0uY2FzdE9wdGlvbihlLnRleHRmb250LmNvbG9yLHQucHRzKXx8ci5jb2xvcixhPW0uY2FzdE9wdGlvbihlLm91dHNpZGV0ZXh0Zm9udC5mYW1pbHksdC5wdHMpfHxtLmNhc3RPcHRpb24oZS50ZXh0Zm9udC5mYW1pbHksdC5wdHMpfHxyLmZhbWlseSxpPW0uY2FzdE9wdGlvbihlLm91dHNpZGV0ZXh0Zm9udC5zaXplLHQucHRzKXx8bS5jYXN0T3B0aW9uKGUudGV4dGZvbnQuc2l6ZSx0LnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bixmYW1pbHk6YSxzaXplOml9fShnLGEsci5mb250KTpiKGcsYSxyLmZvbnQpKTt1LnRleHQoYS50ZXh0KS5hdHRyKHtjbGFzczoic2xpY2V0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwobC5mb250LGYpLmNhbGwoZC5jb252ZXJ0VG9Uc3BhbnMsZSk7dmFyIHYseT1sLmJCb3godS5ub2RlKCkpO2lmKCJvdXRzaWRlIj09PUwpdj1EKHksYSk7ZWxzZSBpZih2PXcoeSxhLGgpLCJhdXRvIj09PUwmJnYuc2NhbGU8MSl7dmFyIHg9cy5lbnN1cmVVbmlmb3JtRm9udFNpemUoZSxnLm91dHNpZGV0ZXh0Zm9udCk7dS5jYWxsKGwuZm9udCx4KSx2PUQoeT1sLmJCb3godS5ub2RlKCkpLGEpfXZhciBUPXYudGV4dFBvc0FuZ2xlLE09dm9pZCAwPT09VD9hLnB4bWlkOlIoaC5yLFQpO2lmKHYudGFyZ2V0WD1vK01bMF0qdi5yQ2VudGVyKyh2Lnh8fDApLHYudGFyZ2V0WT1jK01bMV0qdi5yQ2VudGVyKyh2Lnl8fDApLE4odix5KSx2Lm91dHNpZGUpe3ZhciBrPXYudGFyZ2V0WTthLnlMYWJlbE1pbj1rLXkuaGVpZ2h0LzIsYS55TGFiZWxNaWQ9ayxhLnlMYWJlbE1heD1rK3kuaGVpZ2h0LzIsYS5sYWJlbEV4dHJhWD0wLGEubGFiZWxFeHRyYVk9MCxfPSEwfXYuZm9udFNpemU9Zi5zaXplLHAoZy50eXBlLHYsciksdFtpXS50cmFuc2Zvcm09dix1LmF0dHIoInRyYW5zZm9ybSIscy5nZXRUZXh0VHJhbnNmb3JtKHYpKX0pKX1mdW5jdGlvbiBDKGUsdCxyLG4pe3ZhciBpPW4qKHRbMF0tZVswXSksbz1uKih0WzFdLWVbMV0pO3JldHVybiJhIituKmgucisiLCIrbipoLnIrIiAwICIrYS5sYXJnZUFyYysocj8iIDEgIjoiIDAgIikraSsiLCIrb319KSk7dmFyIFQ9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRpdGxldGV4dCIpLmRhdGEoZy50aXRsZS50ZXh0P1swXTpbXSk7aWYoVC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRpdGxldGV4dCIsITApLFQuZXhpdCgpLnJlbW92ZSgpLFQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdCxyPXMuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIiwoZnVuY3Rpb24oZSl7ZS5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxhPWcudGl0bGUudGV4dDtnLl9tZXRhJiYoYT1zLnRlbXBsYXRlU3RyaW5nKGEsZy5fbWV0YSkpLHIudGV4dChhKS5hdHRyKHtjbGFzczoidGl0bGV0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwobC5mb250LGcudGl0bGUuZm9udCkuY2FsbChkLmNvbnZlcnRUb1RzcGFucyxlKSx0PSJtaWRkbGUgY2VudGVyIj09PWcudGl0bGUucG9zaXRpb24/ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5zcXJ0KGUudGl0bGVCb3gud2lkdGgqZS50aXRsZUJveC53aWR0aCtlLnRpdGxlQm94LmhlaWdodCplLnRpdGxlQm94LmhlaWdodCk7cmV0dXJue3g6ZS5jeCx5OmUuY3ksc2NhbGU6ZS50cmFjZS5ob2xlKmUucioyL3QsdHg6MCx0eTotZS50aXRsZUJveC5oZWlnaHQvMitlLnRyYWNlLnRpdGxlLmZvbnQuc2l6ZX19KGgpOkMoaCxpKSxyLmF0dHIoInRyYW5zZm9ybSIsdSh0LngsdC55KStjKE1hdGgubWluKDEsdC5zY2FsZSkpK3UodC50eCx0LnR5KSl9KSksXyYmZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaSxvLGwscyxjLHUsZCxmLHAsaDtmdW5jdGlvbiBnKGUsdCl7cmV0dXJuIGUucHhtaWRbMV0tdC5weG1pZFsxXX1mdW5jdGlvbiB2KGUsdCl7cmV0dXJuIHQucHhtaWRbMV0tZS5weG1pZFsxXX1mdW5jdGlvbiB5KGUscil7cnx8KHI9e30pO3ZhciBhLGMsdSxmLHA9ci5sYWJlbEV4dHJhWSsobj9yLnlMYWJlbE1heDpyLnlMYWJlbE1pbiksaD1uP2UueUxhYmVsTWluOmUueUxhYmVsTWF4LGc9bj9lLnlMYWJlbE1heDplLnlMYWJlbE1pbix2PWUuY3lGaW5hbCtvKGUucHgwWzFdLGUucHgxWzFdKSx5PXAtaDtpZih5KnM+MCYmKGUubGFiZWxFeHRyYVk9eSksQXJyYXkuaXNBcnJheSh0LnB1bGwpKWZvcihjPTA7YzxkLmxlbmd0aDtjKyspKHU9ZFtjXSk9PT1lfHwobS5jYXN0T3B0aW9uKHQucHVsbCxlLnB0cyl8fDApPj0obS5jYXN0T3B0aW9uKHQucHVsbCx1LnB0cyl8fDApfHwoKGUucHhtaWRbMV0tdS5weG1pZFsxXSkqcz4wPyh5PXUuY3lGaW5hbCtvKHUucHgwWzFdLHUucHgxWzFdKS1oLWUubGFiZWxFeHRyYVkpKnM+MCYmKGUubGFiZWxFeHRyYVkrPXkpOihnK2UubGFiZWxFeHRyYVktdikqcz4wJiYoYT0zKmwqTWF0aC5hYnMoYy1kLmluZGV4T2YoZSkpLChmPXUuY3hGaW5hbCtpKHUucHgwWzBdLHUucHgxWzBdKSthLShlLmN4RmluYWwrZS5weG1pZFswXSktZS5sYWJlbEV4dHJhWCkqbD4wJiYoZS5sYWJlbEV4dHJhWCs9ZikpKX1mb3Iobj0wO248MjtuKyspZm9yKGE9bj9nOnYsbz1uP01hdGgubWF4Ok1hdGgubWluLHM9bj8xOi0xLHI9MDtyPDI7cisrKXtmb3IoaT1yP01hdGgubWF4Ok1hdGgubWluLGw9cj8xOi0xLChjPWVbbl1bcl0pLnNvcnQoYSksdT1lWzEtbl1bcl0sZD11LmNvbmNhdChjKSxwPVtdLGY9MDtmPGMubGVuZ3RoO2YrKyl2b2lkIDAhPT1jW2ZdLnlMYWJlbE1pZCYmcC5wdXNoKGNbZl0pO2ZvcihoPSExLGY9MDtuJiZmPHUubGVuZ3RoO2YrKylpZih2b2lkIDAhPT11W2ZdLnlMYWJlbE1pZCl7aD11W2ZdO2JyZWFrfWZvcihmPTA7ZjxwLmxlbmd0aDtmKyspe3ZhciB4PWYmJnBbZi0xXTtoJiYhZiYmKHg9aCkseShwW2ZdLHgpfX19KHksZyksZnVuY3Rpb24oZSx0KXtlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKGUubGFiZWxFeHRyYVh8fGUubGFiZWxFeHRyYVkpe3ZhciBhPXIuc2VsZWN0KCJnLnNsaWNldGV4dCB0ZXh0Iik7ZS50cmFuc2Zvcm0udGFyZ2V0WCs9ZS5sYWJlbEV4dHJhWCxlLnRyYW5zZm9ybS50YXJnZXRZKz1lLmxhYmVsRXh0cmFZLGEuYXR0cigidHJhbnNmb3JtIixzLmdldFRleHRUcmFuc2Zvcm0oZS50cmFuc2Zvcm0pKTt2YXIgaT1lLmN4RmluYWwrZS5weG1pZFswXSxsPSJNIitpKyIsIisoZS5jeUZpbmFsK2UucHhtaWRbMV0pLGM9KGUueUxhYmVsTWF4LWUueUxhYmVsTWluKSooZS5weG1pZFswXTwwPy0xOjEpLzQ7aWYoZS5sYWJlbEV4dHJhWCl7dmFyIHU9ZS5sYWJlbEV4dHJhWCplLnB4bWlkWzFdL2UucHhtaWRbMF0sZD1lLnlMYWJlbE1pZCtlLmxhYmVsRXh0cmFZLShlLmN5RmluYWwrZS5weG1pZFsxXSk7TWF0aC5hYnModSk+TWF0aC5hYnMoZCk/bCs9ImwiK2QqZS5weG1pZFswXS9lLnB4bWlkWzFdKyIsIitkKyJIIisoaStlLmxhYmVsRXh0cmFYK2MpOmwrPSJsIitlLmxhYmVsRXh0cmFYKyIsIit1KyJ2IisoZC11KSsiaCIrY31lbHNlIGwrPSJWIisoZS55TGFiZWxNaWQrZS5sYWJlbEV4dHJhWSkrImgiK2M7cy5lbnN1cmVTaW5nbGUociwicGF0aCIsInRleHRsaW5lIikuY2FsbChvLnN0cm9rZSx0Lm91dHNpZGV0ZXh0Zm9udC5jb2xvcikuYXR0cih7InN0cm9rZS13aWR0aCI6TWF0aC5taW4oMix0Lm91dHNpZGV0ZXh0Zm9udC5zaXplLzgpLGQ6bCxmaWxsOiJub25lIn0pfWVsc2Ugci5zZWxlY3QoInBhdGgudGV4dGxpbmUiKS5yZW1vdmUoKX0pKX0odixnKSxfJiZnLmF1dG9tYXJnaW4pe3ZhciBNPWwuYkJveChmLm5vZGUoKSksaz1nLmRvbWFpbixBPWkudyooay54WzFdLWsueFswXSksTD1pLmgqKGsueVsxXS1rLnlbMF0pLFM9KC41KkEtaC5yKS9pLncsTz0oLjUqTC1oLnIpL2kuaDthLmF1dG9NYXJnaW4oZSwicGllLiIrZy51aWQrIi5hdXRvbWFyZ2luIix7eGw6ay54WzBdLVMseHI6ay54WzFdK1MseWI6ay55WzBdLU8seXQ6ay55WzFdK08sbDpNYXRoLm1heChoLmN4LWguci1NLmxlZnQsMCkscjpNYXRoLm1heChNLnJpZ2h0LShoLmN4K2guciksMCksYjpNYXRoLm1heChNLmJvdHRvbS0oaC5jeStoLnIpLDApLHQ6TWF0aC5tYXgoaC5jeS1oLnItTS50b3AsMCkscGFkOjV9KX19KSl9KSk7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtmLnNlbGVjdEFsbCgidHNwYW4iKS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2UuYXR0cigiZHkiKSYmZS5hdHRyKCJkeSIsZS5hdHRyKCJkeSIpKX0pKX0pLDApfSxmb3JtYXRTbGljZUxhYmVsOnosdHJhbnNmb3JtSW5zaWRlVGV4dDp3LGRldGVybWluZUluc2lkZVRleHRGb250OmIscG9zaXRpb25UaXRsZU91dHNpZGU6QyxwcmVyZW5kZXJUaXRsZXM6XyxsYXlvdXRBcmVhczpJLGF0dGFjaEZ4SGFuZGxlcnM6eCxjb21wdXRlVHJhbnNmb3JtOk59fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjEwMiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjoxMjQsIi4uLy4uL2NvbXBvbmVudHMvZngiOjE0MiwiLi4vLi4vbGliIjoyMzIsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6MjU1LCIuLi8uLi9wbG90cy9wbG90cyI6MzE2LCIuLi9iYXIvY29uc3RhbnRzIjozMzAsIi4uL2Jhci91bmlmb3JtX3RleHQiOjM0NCwiLi9ldmVudF9kYXRhIjozNDksIi4vaGVscGVycyI6MzUwLCJAcGxvdGx5L2QzIjoxMX1dLDM1NTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJAcGxvdGx5L2QzIiksYT1lKCIuL3N0eWxlX29uZSIpLGk9ZSgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQuX3BpZWxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7aShlLHQsInBpZSIpLHQuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpO3Iuc3R5bGUoe29wYWNpdHk6dC5vcGFjaXR5fSksci5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goKGZ1bmN0aW9uKGUpe24uc2VsZWN0KHRoaXMpLmNhbGwoYSxlLHQpfSkpfSkpfX0seyIuLi9iYXIvdW5pZm9ybV90ZXh0IjozNDQsIi4vc3R5bGVfb25lIjozNTYsIkBwbG90bHkvZDMiOjExfV0sMzU2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPWUoIi4vaGVscGVycyIpLmNhc3RPcHRpb247dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1yLm1hcmtlci5saW5lLG89YShpLmNvbG9yLHQucHRzKXx8bi5kZWZhdWx0TGluZSxsPWEoaS53aWR0aCx0LnB0cyl8fDA7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIixsKS5jYWxsKG4uZmlsbCx0LmNvbG9yKS5jYWxsKG4uc3Ryb2tlLG8pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjoxMDIsIi4vaGVscGVycyI6MzUwfV0sMzU3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWVbcl0uaT1yO24ubWVyZ2VBcnJheSh0LnRleHQsZSwidHgiKSxuLm1lcmdlQXJyYXkodC50ZXh0dGVtcGxhdGUsZSwidHh0Iiksbi5tZXJnZUFycmF5KHQuaG92ZXJ0ZXh0LGUsImh0eCIpLG4ubWVyZ2VBcnJheSh0LmN1c3RvbWRhdGEsZSwiZGF0YSIpLG4ubWVyZ2VBcnJheSh0LnRleHRwb3NpdGlvbixlLCJ0cCIpLHQudGV4dGZvbnQmJihuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUodC50ZXh0Zm9udC5zaXplLGUsInRzIiksbi5tZXJnZUFycmF5KHQudGV4dGZvbnQuY29sb3IsZSwidGMiKSxuLm1lcmdlQXJyYXkodC50ZXh0Zm9udC5mYW1pbHksZSwidGYiKSk7dmFyIGE9dC5tYXJrZXI7aWYoYSl7bi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGEuc2l6ZSxlLCJtcyIpLG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShhLm9wYWNpdHksZSwibW8iKSxuLm1lcmdlQXJyYXkoYS5zeW1ib2wsZSwibXgiKSxuLm1lcmdlQXJyYXkoYS5jb2xvcixlLCJtYyIpO3ZhciBpPWEubGluZTthLmxpbmUmJihuLm1lcmdlQXJyYXkoaS5jb2xvcixlLCJtbGMiKSxuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoaS53aWR0aCxlLCJtbHciKSk7dmFyIG89YS5ncmFkaWVudDtvJiYibm9uZSIhPT1vLnR5cGUmJihuLm1lcmdlQXJyYXkoby50eXBlLGUsIm1ndCIpLG4ubWVyZ2VBcnJheShvLmNvbG9yLGUsIm1nYyIpKX19fSx7Ii4uLy4uL2xpYiI6MjMyfV0sMzU4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9ZSgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGk9ZSgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD1lKCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxzPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxjPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHU9ZSgiLi9jb25zdGFudHMiKSxkPWUoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O3QuZXhwb3J0cz17eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LHgwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0sZHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIixhbmltOiEwfSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0seTA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSxkeTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LHhwZXJpb2Q6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0seXBlcmlvZDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx4cGVyaW9kMDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHlwZXJpb2QwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0seHBlcmlvZGFsaWdubWVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhcnQiLCJtaWRkbGUiLCJlbmQiXSxkZmx0OiJtaWRkbGUiLGVkaXRUeXBlOiJjYWxjIn0seXBlcmlvZGFsaWdubWVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhcnQiLCJtaWRkbGUiLCJlbmQiXSxkZmx0OiJtaWRkbGUiLGVkaXRUeXBlOiJjYWxjIn0seGhvdmVyZm9ybWF0Om4oIngiKSx5aG92ZXJmb3JtYXQ6bigieSIpLHN0YWNrZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjIn0sZ3JvdXBub3JtOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyIiLCJmcmFjdGlvbiIsInBlcmNlbnQiXSxkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc3RhY2tnYXBzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmZlciB6ZXJvIiwiaW50ZXJwb2xhdGUiXSxkZmx0OiJpbmZlciB6ZXJvIixlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sdGV4dHRlbXBsYXRlOmEoe30se30pLGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGluZXMiLCJtYXJrZXJzIiwidGV4dCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToiY2FsYyJ9LGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInBvaW50cyIsImZpbGxzIl0sZWRpdFR5cGU6InN0eWxlIn0saG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOnUuZXZlbnREYXRhS2V5c30pLGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIixhbmltOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6InN0eWxlIixhbmltOiEwfSxzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwic3BsaW5lIiwiaHYiLCJ2aCIsImh2aCIsInZodiJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxzbW9vdGhpbmc6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEuMyxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxkYXNoOmQoe30scyx7ZWRpdFR5cGU6InN0eWxlIn0pLHNpbXBsaWZ5Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxjb25uZWN0Z2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNsaXBvbmF4aXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxmaWxsOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwidG96ZXJveSIsInRvemVyb3giLCJ0b25leHR5IiwidG9uZXh0eCIsInRvc2VsZiIsInRvbmV4dCJdLGVkaXRUeXBlOiJjYWxjIn0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIixhbmltOiEwfSxtYXJrZXI6ZCh7c3ltYm9sOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6Yy5zeW1ib2xMaXN0LGRmbHQ6ImNpcmNsZSIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIixhbmltOiEwfSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIixhbmltOiEwfSxtYXhkaXNwbGF5ZWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sc2l6ZXJlZjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxzaXplbWluOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJkaWFtZXRlciIsImFyZWEiXSxkZmx0OiJkaWFtZXRlciIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOmQoe3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIixhbmltOiEwfSxlZGl0VHlwZToiY2FsYyJ9LG8oIm1hcmtlci5saW5lIix7YW5pbTohMH0pKSxncmFkaWVudDp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFkaWFsIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwibm9uZSJdLGFycmF5T2s6ITAsZGZsdDoibm9uZSIsZWRpdFR5cGU6ImNhbGMifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbygibWFya2VyIix7YW5pbTohMH0pKSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIGxlZnQiLCJ0b3AgY2VudGVyIiwidG9wIHJpZ2h0IiwibWlkZGxlIGxlZnQiLCJtaWRkbGUgY2VudGVyIiwibWlkZGxlIHJpZ2h0IiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZGZsdDoibWlkZGxlIGNlbnRlciIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHRmb250Omwoe2VkaXRUeXBlOiJjYWxjIixjb2xvckVkaXRUeXBlOiJzdHlsZSIsYXJyYXlPazohMH0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MTA5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjEyNCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjEyMywiLi4vLi4vbGliL2V4dGVuZCI6MjI2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6MjgyLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjMxMCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6MzE3LCIuL2NvbnN0YW50cyI6MzYyfV0sMzU5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuLi8uLi9saWIiKSxpPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIiksbD1lKCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHM9ZSgiLi9zdWJ0eXBlcyIpLGM9ZSgiLi9jb2xvcnNjYWxlX2NhbGMiKSx1PWUoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIiksZD1lKCIuL2NhbGNfc2VsZWN0aW9uIik7ZnVuY3Rpb24gZihlLHQscixuLGEsbyxsKXt2YXIgYz10Ll9sZW5ndGgsdT1lLl9mdWxsTGF5b3V0LGQ9ci5faWQsZj1uLl9pZCxwPXUuX2ZpcnN0U2NhdHRlcltnKHQpXT09PXQudWlkLGg9KG0odCx1LHIsbil8fHt9KS5vcmllbnRhdGlvbix2PXQuZmlsbDtyLl9taW5EdGljaz0wLG4uX21pbkR0aWNrPTA7dmFyIHk9e3BhZGRlZDohMH0seD17cGFkZGVkOiEwfTtsJiYoeS5wcGFkPXgucHBhZD1sKTt2YXIgYj1jPDJ8fGFbMF0hPT1hW2MtMV18fG9bMF0hPT1vW2MtMV07YiYmKCJ0b3plcm94Ij09PXZ8fCJ0b25leHR4Ij09PXYmJihwfHwiaCI9PT1oKSk/eS50b3plcm89ITA6KHQuZXJyb3JfeXx8e30pLnZpc2libGV8fCJ0b25leHR5IiE9PXYmJiJ0b3plcm95IiE9PXYmJihzLmhhc01hcmtlcnModCl8fHMuaGFzVGV4dCh0KSl8fCh5LnBhZGRlZD0hMSx5LnBwYWQ9MCksYiYmKCJ0b3plcm95Ij09PXZ8fCJ0b25leHR5Ij09PXYmJihwfHwidiI9PT1oKSk/eC50b3plcm89ITA6InRvbmV4dHgiIT09diYmInRvemVyb3giIT09dnx8KHgucGFkZGVkPSExKSxkJiYodC5fZXh0cmVtZXNbZF09aS5maW5kRXh0cmVtZXMocixhLHkpKSxmJiYodC5fZXh0cmVtZXNbZl09aS5maW5kRXh0cmVtZXMobixvLHgpKX1mdW5jdGlvbiBwKGUsdCl7aWYocy5oYXNNYXJrZXJzKGUpKXt2YXIgcixuPWUubWFya2VyLG89MS42KihlLm1hcmtlci5zaXplcmVmfHwxKTtpZihyPSJhcmVhIj09PWUubWFya2VyLnNpemVtb2RlP2Z1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQoKGV8fDApL28pLDMpfTpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoKGV8fDApL28sMyl9LGEuaXNBcnJheU9yVHlwZWRBcnJheShuLnNpemUpKXt2YXIgbD17dHlwZToibGluZWFyIn07aS5zZXRDb252ZXJ0KGwpO2Zvcih2YXIgYz1sLm1ha2VDYWxjZGF0YShlLm1hcmtlciwic2l6ZSIpLHU9bmV3IEFycmF5KHQpLGQ9MDtkPHQ7ZCsrKXVbZF09cihjW2RdKTtyZXR1cm4gdX1yZXR1cm4gcihuLnNpemUpfX1mdW5jdGlvbiBoKGUsdCl7dmFyIHI9Zyh0KSxuPWUuX2ZpcnN0U2NhdHRlcjtuW3JdfHwobltyXT10LnVpZCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD1lLnN0YWNrZ3JvdXA7cmV0dXJuIGUueGF4aXMrZS55YXhpcytlLnR5cGUrKHQ/Ii0iK3Q6IiIpfWZ1bmN0aW9uIG0oZSx0LHIsbil7dmFyIGE9ZS5zdGFja2dyb3VwO2lmKGEpe3ZhciBpPXQuX3NjYXR0ZXJTdGFja09wdHNbci5faWQrbi5faWRdW2FdLG89InYiPT09aS5vcmllbnRhdGlvbj9uOnI7cmV0dXJuImxpbmVhciI9PT1vLnR5cGV8fCJsb2ciPT09by50eXBlP2k6dm9pZCAwfX10LmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24oZSx0KXt2YXIgcixzLGcsdix5LHgsYj1lLl9mdWxsTGF5b3V0LF89aS5nZXRGcm9tSWQoZSx0LnhheGlzfHwieCIpLHc9aS5nZXRGcm9tSWQoZSx0LnlheGlzfHwieSIpLFQ9Xy5tYWtlQ2FsY2RhdGEodCwieCIpLE09dy5tYWtlQ2FsY2RhdGEodCwieSIpLGs9byh0LF8sIngiLFQpLEE9byh0LHcsInkiLE0pLEw9ay52YWxzLFM9QS52YWxzLEQ9dC5fbGVuZ3RoLEM9bmV3IEFycmF5KEQpLE89dC5pZHMsUD1tKHQsYixfLHcpLEk9ITE7aChiLHQpO3ZhciBSLHo9IngiLE49InkiO1A/KGEucHVzaFVuaXF1ZShQLnRyYWNlSW5kaWNlcyx0Ll9leHBhbmRlZEluZGV4KSwocj0idiI9PT1QLm9yaWVudGF0aW9uKT8oTj0icyIsUj0ieCIpOih6PSJzIixSPSJ5IikseT0iaW50ZXJwb2xhdGUiPT09UC5zdGFja2dhcHMpOmYoZSx0LF8sdyxMLFMscCh0LEQpKTt2YXIgRj0hIXQueHBlcmlvZGFsaWdubWVudCxFPSEhdC55cGVyaW9kYWxpZ25tZW50O2ZvcihzPTA7czxEO3MrKyl7dmFyIGo9Q1tzXT17fSxIPW4oTFtzXSksQj1uKFNbc10pO0gmJkI/KGpbel09TFtzXSxqW05dPVNbc10sRiYmKGoub3JpZ194PVRbc10sai54RW5kPWsuZW5kc1tzXSxqLnhTdGFydD1rLnN0YXJ0c1tzXSksRSYmKGoub3JpZ195PU1bc10sai55RW5kPUEuZW5kc1tzXSxqLnlTdGFydD1BLnN0YXJ0c1tzXSkpOlAmJihyP0g6Qik/KGpbUl09cj9MW3NdOlNbc10sai5nYXA9ITAseT8oai5zPWwsST0hMCk6ai5zPTApOmpbel09altOXT1sLE8mJihqLmlkPVN0cmluZyhPW3NdKSl9aWYodShDLHQpLGMoZSx0KSxkKEMsdCksUCl7Zm9yKHM9MDtzPEMubGVuZ3RoOylDW3NdW1JdPT09bD9DLnNwbGljZShzLDEpOnMrKztpZihhLnNvcnQoQywoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVtSXS10W1JdfHxlLmktdC5pfSkpLEkpe2ZvcihzPTA7czxDLmxlbmd0aC0xJiZDW3NdLmdhcDspcysrO2ZvcigoeD1DW3NdLnMpfHwoeD1DW3NdLnM9MCksZz0wO2c8cztnKyspQ1tnXS5zPXg7Zm9yKHY9Qy5sZW5ndGgtMTt2PnMmJkNbdl0uZ2FwOyl2LS07Zm9yKHg9Q1t2XS5zLGc9Qy5sZW5ndGgtMTtnPnY7Zy0tKUNbZ10ucz14O2Zvcig7czx2OylpZihDWysrc10uZ2FwKXtmb3IoZz1zKzE7Q1tnXS5nYXA7KWcrKztmb3IodmFyIFk9Q1tzLTFdW1JdLFY9Q1tzLTFdLnMsVT0oQ1tnXS5zLVYpLyhDW2ddW1JdLVkpO3M8ZzspQ1tzXS5zPVYrKENbc11bUl0tWSkqVSxzKyt9fX1yZXR1cm4gQ30sY2FsY01hcmtlclNpemU6cCxjYWxjQXhpc0V4cGFuc2lvbjpmLHNldEZpcnN0U2NhdHRlcjpoLGdldFN0YWNrT3B0czptfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjoyMTIsIi4uLy4uL2xpYiI6MjMyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjoyNzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjoyNzksIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjozNTcsIi4vY2FsY19zZWxlY3Rpb24iOjM2MCwiLi9jb2xvcnNjYWxlX2NhbGMiOjM2MSwiLi9zdWJ0eXBlcyI6MzgzLCJmYXN0LWlzbnVtZXJpYyI6MTd9XSwzNjA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7bi5pc0FycmF5T3JUeXBlZEFycmF5KHQuc2VsZWN0ZWRwb2ludHMpJiZuLnRhZ1NlbGVjdGVkKGUsdCl9fSx7Ii4uLy4uL2xpYiI6MjMyfV0sMzYxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksaT1lKCIuL3N1YnR5cGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5oYXNMaW5lcyh0KSYmbih0LCJsaW5lIikmJmEoZSx0LHt2YWxzOnQubGluZS5jb2xvcixjb250YWluZXJTdHI6ImxpbmUiLGNMZXR0ZXI6ImMifSksaS5oYXNNYXJrZXJzKHQpJiYobih0LCJtYXJrZXIiKSYmYShlLHQse3ZhbHM6dC5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIiLGNMZXR0ZXI6ImMifSksbih0LCJtYXJrZXIubGluZSIpJiZhKGUsdCx7dmFsczp0Lm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyLmxpbmUiLGNMZXR0ZXI6ImMifSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6MTEwLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6MTEzLCIuL3N1YnR5cGVzIjozODN9XSwzNjI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtQVFNfTElORVNPTkxZOjIwLG1pblRvbGVyYW5jZTouMix0b2xlcmFuY2VHcm93dGg6MTAsbWF4U2NyZWVuc0F3YXk6MjAsZXZlbnREYXRhS2V5czpbXX19LHt9XSwzNjM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9jYWxjIik7ZnVuY3Rpb24gYShlLHQscixuLGEsaSxvKXthW25dPSEwO3ZhciBsPXtpOm51bGwsZ2FwOiEwLHM6MH07aWYobFtvXT1yLGUuc3BsaWNlKHQsMCxsKSx0JiZyPT09ZVt0LTFdW29dKXt2YXIgcz1lW3QtMV07bC5zPXMucyxsLmk9cy5pLGwuZ2FwPXMuZ2FwfWVsc2UgaSYmKGwucz1mdW5jdGlvbihlLHQscixuKXt2YXIgYT1lW3QtMV0saT1lW3QrMV07cmV0dXJuIGk/YT9hLnMrKGkucy1hLnMpKihyLWFbbl0pLyhpW25dLWFbbl0pOmkuczphLnN9KGUsdCxyLG8pKTt0fHwoZVswXS50PWVbMV0udCxlWzBdLnRyYWNlPWVbMV0udHJhY2UsZGVsZXRlIGVbMV0udCxkZWxldGUgZVsxXS50cmFjZSl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC54YXhpcyxpPXQueWF4aXMsbz1yLl9pZCtpLl9pZCxsPWUuX2Z1bGxMYXlvdXQuX3NjYXR0ZXJTdGFja09wdHNbb107aWYobCl7dmFyIHMsYyx1LGQsZixwLGgsZyxtLHYseSx4LGIsXyx3LFQ9ZS5jYWxjZGF0YTtmb3IodmFyIE0gaW4gbCl7dmFyIGs9KHY9bFtNXSkudHJhY2VJbmRpY2VzO2lmKGsubGVuZ3RoKXtmb3IoeT0iaW50ZXJwb2xhdGUiPT09di5zdGFja2dhcHMseD12Lmdyb3Vwbm9ybSwidiI9PT12Lm9yaWVudGF0aW9uPyhiPSJ4IixfPSJ5Iik6KGI9InkiLF89IngiKSx3PW5ldyBBcnJheShrLmxlbmd0aCkscz0wO3M8dy5sZW5ndGg7cysrKXdbc109ITE7cD1UW2tbMF1dO3ZhciBBPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHM9MDtzPHAubGVuZ3RoO3MrKylBW3NdPXBbc11bYl07Zm9yKHM9MTtzPGsubGVuZ3RoO3MrKyl7Zm9yKGY9VFtrW3NdXSxjPXU9MDtjPGYubGVuZ3RoO2MrKyl7Zm9yKGg9ZltjXVtiXTtoPkFbdV0mJnU8QS5sZW5ndGg7dSsrKWEoZixjLEFbdV0scyx3LHksYiksYysrO2lmKGghPT1BW3VdKXtmb3IoZD0wO2Q8cztkKyspYShUW2tbZF1dLHUsaCxkLHcseSxiKTtBLnNwbGljZSh1LDAsaCl9dSsrfWZvcig7dTxBLmxlbmd0aDt1KyspYShmLGMsQVt1XSxzLHcseSxiKSxjKyt9dmFyIEw9QS5sZW5ndGg7Zm9yKGM9MDtjPHAubGVuZ3RoO2MrKyl7Zm9yKGc9cFtjXVtfXT1wW2NdLnMscz0xO3M8ay5sZW5ndGg7cysrKShmPVRba1tzXV0pWzBdLnRyYWNlLl9yYXdMZW5ndGg9ZlswXS50cmFjZS5fbGVuZ3RoLGZbMF0udHJhY2UuX2xlbmd0aD1MLGcrPWZbY10ucyxmW2NdW19dPWc7aWYoeClmb3IobT0oImZyYWN0aW9uIj09PXg/ZzpnLzEwMCl8fDEscz0wO3M8ay5sZW5ndGg7cysrKXt2YXIgUz1UW2tbc11dW2NdO1NbX10vPW0sUy5zTm9ybT1TLnMvbX19Zm9yKHM9MDtzPGsubGVuZ3RoO3MrKyl7dmFyIEQ9KGY9VFtrW3NdXSlbMF0udHJhY2UsQz1uLmNhbGNNYXJrZXJTaXplKEQsRC5fcmF3TGVuZ3RoKSxPPUFycmF5LmlzQXJyYXkoQyk7aWYoQyYmd1tzXXx8Tyl7dmFyIFA9Qztmb3IoQz1uZXcgQXJyYXkoTCksYz0wO2M8TDtjKyspQ1tjXT1mW2NdLmdhcD8wOk8/UFtmW2NdLmldOlB9dmFyIEk9bmV3IEFycmF5KEwpLFI9bmV3IEFycmF5KEwpO2ZvcihjPTA7YzxMO2MrKylJW2NdPWZbY10ueCxSW2NdPWZbY10ueTtuLmNhbGNBeGlzRXhwYW5zaW9uKGUsRCxyLGksSSxSLEMpLGZbMF0udC5vcmllbnRhdGlvbj12Lm9yaWVudGF0aW9ufX19fX19LHsiLi9jYWxjIjozNTl9XSwzNjQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgcj1lW3RdO2lmKCJzY2F0dGVyIj09PXIudHlwZSl7dmFyIG49ci5maWxsO2lmKCJub25lIiE9PW4mJiJ0b3NlbGYiIT09biYmKHIub3BhY2l0eT12b2lkIDAsInRvbmV4dHkiPT09bnx8InRvbmV4dHgiPT09bikpZm9yKHZhciBhPXQtMTthPj0wO2EtLSl7dmFyIGk9ZVthXTtpZigic2NhdHRlciI9PT1pLnR5cGUmJmkueGF4aXM9PT1yLnhheGlzJiZpLnlheGlzPT09ci55YXhpcyl7aS5vcGFjaXR5PXZvaWQgMDticmVha319fX19fSx7fV0sMzY1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4vYXR0cmlidXRlcyIpLG89ZSgiLi9jb25zdGFudHMiKSxsPWUoIi4vc3VidHlwZXMiKSxzPWUoIi4veHlfZGVmYXVsdHMiKSxjPWUoIi4vcGVyaW9kX2RlZmF1bHRzIiksdT1lKCIuL3N0YWNrX2RlZmF1bHRzIiksZD1lKCIuL21hcmtlcl9kZWZhdWx0cyIpLGY9ZSgiLi9saW5lX2RlZmF1bHRzIikscD1lKCIuL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxoPWUoIi4vdGV4dF9kZWZhdWx0cyIpLGc9ZSgiLi9maWxsY29sb3JfZGVmYXVsdHMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbSl7ZnVuY3Rpb24gdihyLGEpe3JldHVybiBuLmNvZXJjZShlLHQsaSxyLGEpfXZhciB5PXMoZSx0LG0sdik7aWYoeXx8KHQudmlzaWJsZT0hMSksdC52aXNpYmxlKXtjKGUsdCxtLHYpLHYoInhob3ZlcmZvcm1hdCIpLHYoInlob3ZlcmZvcm1hdCIpO3ZhciB4PXUoZSx0LG0sdiksYj0heCYmeTxvLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyI7digidGV4dCIpLHYoImhvdmVydGV4dCIpLHYoIm1vZGUiLGIpLGwuaGFzTGluZXModCkmJihmKGUsdCxyLG0sdikscChlLHQsdiksdigiY29ubmVjdGdhcHMiKSx2KCJsaW5lLnNpbXBsaWZ5IikpLGwuaGFzTWFya2Vycyh0KSYmZChlLHQscixtLHYse2dyYWRpZW50OiEwfSksbC5oYXNUZXh0KHQpJiYodigidGV4dHRlbXBsYXRlIiksaChlLHQsbSx2KSk7dmFyIF89W107KGwuaGFzTWFya2Vycyh0KXx8bC5oYXNUZXh0KHQpKSYmKHYoImNsaXBvbmF4aXMiKSx2KCJtYXJrZXIubWF4ZGlzcGxheWVkIiksXy5wdXNoKCJwb2ludHMiKSksdigiZmlsbCIseD94LmZpbGxEZmx0OiJub25lIiksIm5vbmUiIT09dC5maWxsJiYoZyhlLHQscix2KSxsLmhhc0xpbmVzKHQpfHxwKGUsdCx2KSk7dmFyIHc9KHQubGluZXx8e30pLmNvbG9yLFQ9KHQubWFya2VyfHx7fSkuY29sb3I7InRvbmV4dCIhPT10LmZpbGwmJiJ0b3NlbGYiIT09dC5maWxsfHxfLnB1c2goImZpbGxzIiksdigiaG92ZXJvbiIsXy5qb2luKCIrIil8fCJwb2ludHMiKSwiZmlsbHMiIT09dC5ob3Zlcm9uJiZ2KCJob3ZlcnRlbXBsYXRlIik7dmFyIE09YS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN1cHBseURlZmF1bHRzIik7TShlLHQsd3x8VHx8cix7YXhpczoieSJ9KSxNKGUsdCx3fHxUfHxyLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eSh0LHYpfX19LHsiLi4vLi4vbGliIjoyMzIsIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIi4vYXR0cmlidXRlcyI6MzU4LCIuL2NvbnN0YW50cyI6MzYyLCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MzY2LCIuL2xpbmVfZGVmYXVsdHMiOjM3MSwiLi9saW5lX3NoYXBlX2RlZmF1bHRzIjozNzMsIi4vbWFya2VyX2RlZmF1bHRzIjozNzcsIi4vcGVyaW9kX2RlZmF1bHRzIjozNzgsIi4vc3RhY2tfZGVmYXVsdHMiOjM4MSwiLi9zdWJ0eXBlcyI6MzgzLCIuL3RleHRfZGVmYXVsdHMiOjM4NCwiLi94eV9kZWZhdWx0cyI6Mzg1fV0sMzY2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPWUoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBvPSExO2lmKHQubWFya2VyKXt2YXIgbD10Lm1hcmtlci5jb2xvcixzPSh0Lm1hcmtlci5saW5lfHx7fSkuY29sb3I7bCYmIWEobCk/bz1sOnMmJiFhKHMpJiYobz1zKX1pKCJmaWxsY29sb3IiLG4uYWRkT3BhY2l0eSgodC5saW5lfHx7fSkuY29sb3J8fG98fHIsLjUpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MTAyLCIuLi8uLi9saWIiOjIzMn1dLDM2NzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIGE9e30saT17X2Z1bGxMYXlvdXQ6cn0sbz1uLmdldEZyb21UcmFjZShpLHQsIngiKSxsPW4uZ2V0RnJvbVRyYWNlKGksdCwieSIpO3JldHVybiBhLnhMYWJlbD1uLnRpY2tUZXh0KG8sby5jMmwoZS54KSwhMCkudGV4dCxhLnlMYWJlbD1uLnRpY2tUZXh0KGwsbC5jMmwoZS55KSwhMCkudGV4dCxhfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Mjc5fV0sMzY4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPWUoIi4vc3VidHlwZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixpO2lmKCJsaW5lcyI9PT1lLm1vZGUpcmV0dXJuKHI9ZS5saW5lLmNvbG9yKSYmbi5vcGFjaXR5KHIpP3I6ZS5maWxsY29sb3I7aWYoIm5vbmUiPT09ZS5tb2RlKXJldHVybiBlLmZpbGw/ZS5maWxsY29sb3I6IiI7dmFyIG89dC5tY2N8fChlLm1hcmtlcnx8e30pLmNvbG9yLGw9dC5tbGNjfHwoKGUubWFya2VyfHx7fSkubGluZXx8e30pLmNvbG9yO3JldHVybihpPW8mJm4ub3BhY2l0eShvKT9vOmwmJm4ub3BhY2l0eShsKSYmKHQubWx3fHwoKGUubWFya2VyfHx7fSkubGluZXx8e30pLndpZHRoKT9sOiIiKT9uLm9wYWNpdHkoaSk8LjM/bi5hZGRPcGFjaXR5KGksLjMpOmk6KHI9KGUubGluZXx8e30pLmNvbG9yKSYmbi5vcGFjaXR5KHIpJiZhLmhhc0xpbmVzKGUpJiZlLmxpbmUud2lkdGg/cjplLmZpbGxjb2xvcn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MTAyLCIuL3N1YnR5cGVzIjozODN9XSwzNjk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT1lKCIuLi8uLi9yZWdpc3RyeSIpLG89ZSgiLi9nZXRfdHJhY2VfY29sb3IiKSxsPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPW4uZmlsbFRleHQ7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGMpe3ZhciB1PWUuY2QsZD11WzBdLnRyYWNlLGY9ZS54YSxwPWUueWEsaD1mLmMycCh0KSxnPXAuYzJwKHIpLG09W2gsZ10sdj1kLmhvdmVyb258fCIiLHk9LTEhPT1kLm1vZGUuaW5kZXhPZigibWFya2VycyIpPzM6LjUseD0hIWQueHBlcmlvZGFsaWdubWVudCxiPSEhZC55cGVyaW9kYWxpZ25tZW50O2lmKC0xIT09di5pbmRleE9mKCJwb2ludHMiKSl7dmFyIF89ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5tYXgoeSxlLm1yY3x8MCkscj1mLmMycChlLngpLWgsbj1wLmMycChlLnkpLWc7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChyKnIrbipuKS10LDEteS90KX0sdz1hLmdldERpc3RhbmNlRnVuY3Rpb24oYywoZnVuY3Rpb24oZSl7aWYoeCl7dmFyIHQ9Zi5jMnAoZS54U3RhcnQpLHI9Zi5jMnAoZS54RW5kKTtyZXR1cm4gaD49TWF0aC5taW4odCxyKSYmaDw9TWF0aC5tYXgodCxyKT8wOjEvMH12YXIgbj1NYXRoLm1heCgzLGUubXJjfHwwKSxhPTEtMS9uLGk9TWF0aC5hYnMoZi5jMnAoZS54KS1oKTtyZXR1cm4gaTxuP2EqaS9uOmktbithfSksKGZ1bmN0aW9uKGUpe2lmKGIpe3ZhciB0PXAuYzJwKGUueVN0YXJ0KSxyPXAuYzJwKGUueUVuZCk7cmV0dXJuIGc+PU1hdGgubWluKHQscikmJmc8PU1hdGgubWF4KHQscik/MDoxLzB9dmFyIG49TWF0aC5tYXgoMyxlLm1yY3x8MCksYT0xLTEvbixpPU1hdGguYWJzKHAuYzJwKGUueSktZyk7cmV0dXJuIGk8bj9hKmkvbjppLW4rYX0pLF8pO2lmKGEuZ2V0Q2xvc2VzdCh1LHcsZSksITEhPT1lLmluZGV4KXt2YXIgVD11W2UuaW5kZXhdLE09Zi5jMnAoVC54LCEwKSxrPXAuYzJwKFQueSwhMCksQT1ULm1yY3x8MTtlLmluZGV4PVQuaTt2YXIgTD11WzBdLnQub3JpZW50YXRpb24sUz1MJiYoVC5zTm9ybXx8VC5zKSxEPSJoIj09PUw/Uzp2b2lkIDAhPT1ULm9yaWdfeD9ULm9yaWdfeDpULngsQz0idiI9PT1MP1M6dm9pZCAwIT09VC5vcmlnX3k/VC5vcmlnX3k6VC55O3JldHVybiBuLmV4dGVuZEZsYXQoZSx7Y29sb3I6byhkLFQpLHgwOk0tQSx4MTpNK0EseExhYmVsVmFsOkQseTA6ay1BLHkxOmsrQSx5TGFiZWxWYWw6QyxzcGlrZURpc3RhbmNlOl8oVCksaG92ZXJ0ZW1wbGF0ZTpkLmhvdmVydGVtcGxhdGV9KSxzKFQsZCxlKSxpLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikoVCxkLGUpLFtlXX19aWYoLTEhPT12LmluZGV4T2YoImZpbGxzIikmJmQuX3BvbHlnb25zKXt2YXIgTyxQLEksUix6LE4sRixFLGosSD1kLl9wb2x5Z29ucyxCPVtdLFk9ITEsVj0xLzAsVT0tMS8wLHE9MS8wLEc9LTEvMDtmb3IoTz0wO088SC5sZW5ndGg7TysrKShJPUhbT10pLmNvbnRhaW5zKG0pJiYoWT0hWSxCLnB1c2goSSkscT1NYXRoLm1pbihxLEkueW1pbiksRz1NYXRoLm1heChHLEkueW1heCkpO2lmKFkpe3ZhciBaPSgocT1NYXRoLm1heChxLDApKSsoRz1NYXRoLm1pbihHLHAuX2xlbmd0aCkpKS8yO2ZvcihPPTA7TzxCLmxlbmd0aDtPKyspZm9yKFI9QltPXS5wdHMsUD0xO1A8Ui5sZW5ndGg7UCsrKShFPVJbUC0xXVsxXSk+WiE9KGo9UltQXVsxXSk+PVomJihOPVJbUC0xXVswXSxGPVJbUF1bMF0sai1FJiYoej1OKyhGLU4pKihaLUUpLyhqLUUpLFY9TWF0aC5taW4oVix6KSxVPU1hdGgubWF4KFUseikpKTtWPU1hdGgubWF4KFYsMCksVT1NYXRoLm1pbihVLGYuX2xlbmd0aCk7dmFyIFc9bC5kZWZhdWx0TGluZTtyZXR1cm4gbC5vcGFjaXR5KGQuZmlsbGNvbG9yKT9XPWQuZmlsbGNvbG9yOmwub3BhY2l0eSgoZC5saW5lfHx7fSkuY29sb3IpJiYoVz1kLmxpbmUuY29sb3IpLG4uZXh0ZW5kRmxhdChlLHtkaXN0YW5jZTplLm1heEhvdmVyRGlzdGFuY2UseDA6Vix4MTpVLHkwOloseTE6Wixjb2xvcjpXLGhvdmVydGVtcGxhdGU6ITF9KSxkZWxldGUgZS5pbmRleCxkLnRleHQmJiFBcnJheS5pc0FycmF5KGQudGV4dCk/ZS50ZXh0PVN0cmluZyhkLnRleHQpOmUudGV4dD1kLm5hbWUsW2VdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjEwMiwiLi4vLi4vY29tcG9uZW50cy9meCI6MTQyLCIuLi8uLi9saWIiOjIzMiwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi9nZXRfdHJhY2VfY29sb3IiOjM2OH1dLDM3MDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL3N1YnR5cGVzIik7dC5leHBvcnRzPXtoYXNMaW5lczpuLmhhc0xpbmVzLGhhc01hcmtlcnM6bi5oYXNNYXJrZXJzLGhhc1RleHQ6bi5oYXNUZXh0LGlzQnViYmxlOm4uaXNCdWJibGUsYXR0cmlidXRlczplKCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czplKCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOmUoIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiKSxjYWxjOmUoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6ZSgiLi9jcm9zc190cmFjZV9jYWxjIiksYXJyYXlzVG9DYWxjZGF0YTplKCIuL2FycmF5c190b19jYWxjZGF0YSIpLHBsb3Q6ZSgiLi9wbG90IiksY29sb3JiYXI6ZSgiLi9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6ZSgiLi9mb3JtYXRfbGFiZWxzIiksc3R5bGU6ZSgiLi9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6ZSgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6ZSgiLi9ob3ZlciIpLHNlbGVjdFBvaW50czplKCIuL3NlbGVjdCIpLGFuaW1hdGFibGU6ITAsbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXIiLGJhc2VQbG90TW9kdWxlOmUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzeW1ib2xzIiwiZXJyb3JCYXJzT0siLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIiwiem9vbVNjYWxlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjoyOTMsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjozNTcsIi4vYXR0cmlidXRlcyI6MzU4LCIuL2NhbGMiOjM1OSwiLi9jcm9zc190cmFjZV9jYWxjIjozNjMsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjM2NCwiLi9kZWZhdWx0cyI6MzY1LCIuL2Zvcm1hdF9sYWJlbHMiOjM2NywiLi9ob3ZlciI6MzY5LCIuL21hcmtlcl9jb2xvcmJhciI6Mzc2LCIuL3Bsb3QiOjM3OSwiLi9zZWxlY3QiOjM4MCwiLi9zdHlsZSI6MzgyLCIuL3N1YnR5cGVzIjozODN9XSwzNzE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxhPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixvLGwscyl7dmFyIGM9KGUubWFya2VyfHx7fSkuY29sb3I7KGwoImxpbmUuY29sb3IiLHIpLGEoZSwibGluZSIpKT9pKGUsdCxvLGwse3ByZWZpeDoibGluZS4iLGNMZXR0ZXI6ImMifSk6bCgibGluZS5jb2xvciIsIW4oYykmJmN8fHIpO2woImxpbmUud2lkdGgiKSwoc3x8e30pLm5vRGFzaHx8bCgibGluZS5kYXNoIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6MTEyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6MTEzLCIuLi8uLi9saWIiOjIzMn1dLDM3MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksYT1uLkJBRE5VTSxpPW4uTE9HX0NMSVAsbz1pKy41LGw9aS0uNSxzPWUoIi4uLy4uL2xpYiIpLGM9cy5zZWdtZW50c0ludGVyc2VjdCx1PXMuY29uc3RyYWluLGQ9ZSgiLi9jb25zdGFudHMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksZixwLGgsZyxtLHYseSx4LGIsXyx3LFQsTSxrLEEsTD10LnhheGlzLFM9dC55YXhpcyxEPSJsb2ciPT09TC50eXBlLEM9ImxvZyI9PT1TLnR5cGUsTz1MLl9sZW5ndGgsUD1TLl9sZW5ndGgsST10LmNvbm5lY3RHYXBzLFI9dC5iYXNlVG9sZXJhbmNlLHo9dC5zaGFwZSxOPSJsaW5lYXIiPT09eixGPXQuZmlsbCYmIm5vbmUiIT09dC5maWxsLEU9W10saj1kLm1pblRvbGVyYW5jZSxIPWUubGVuZ3RoLEI9bmV3IEFycmF5KEgpLFk9MDtmdW5jdGlvbiBWKHIpe3ZhciBuPWVbcl07aWYoIW4pcmV0dXJuITE7dmFyIGk9dC5saW5lYXJpemVkP0wubDJwKG4ueCk6TC5jMnAobi54KSxzPXQubGluZWFyaXplZD9TLmwycChuLnkpOlMuYzJwKG4ueSk7aWYoaT09PWEpe2lmKEQmJihpPUwuYzJwKG4ueCwhMCkpLGk9PT1hKXJldHVybiExO0MmJnM9PT1hJiYoaSo9TWF0aC5hYnMoTC5fbSpQKihMLl9tPjA/bzpsKS8oUy5fbSpPKihTLl9tPjA/bzpsKSkpKSxpKj0xZTN9aWYocz09PWEpe2lmKEMmJihzPVMuYzJwKG4ueSwhMCkpLHM9PT1hKXJldHVybiExO3MqPTFlM31yZXR1cm5baSxzXX1mdW5jdGlvbiBVKGUsdCxyLG4pe3ZhciBhPXItZSxpPW4tdCxvPS41LWUsbD0uNS10LHM9YSphK2kqaSxjPWEqbytpKmw7aWYoYz4wJiZjPHMpe3ZhciB1PW8qaS1sKmE7aWYodSp1PHMpcmV0dXJuITB9fWZ1bmN0aW9uIHEoZSx0KXt2YXIgcj1lWzBdL08sbj1lWzFdL1AsYT1NYXRoLm1heCgwLC1yLHItMSwtbixuLTEpO3JldHVybiBhJiZ2b2lkIDAhPT1rJiZVKHIsbixrLEEpJiYoYT0wKSxhJiZ0JiZVKHIsbix0WzBdL08sdFsxXS9QKSYmKGE9MCksKDErZC50b2xlcmFuY2VHcm93dGgqYSkqUn1mdW5jdGlvbiBHKGUsdCl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdO3JldHVybiBNYXRoLnNxcnQocipyK24qbil9dmFyIFosVyxYLEosUSxLLCQsZWU9ZC5tYXhTY3JlZW5zQXdheSx0ZT0tTyplZSxyZT1PKigxK2VlKSxuZT0tUCplZSxhZT1QKigxK2VlKSxpZT1bW3RlLG5lLHJlLG5lXSxbcmUsbmUscmUsYWVdLFtyZSxhZSx0ZSxhZV0sW3RlLGFlLHRlLG5lXV07ZnVuY3Rpb24gb2UoZSl7aWYoZVswXTx0ZXx8ZVswXT5yZXx8ZVsxXTxuZXx8ZVsxXT5hZSlyZXR1cm5bdShlWzBdLHRlLHJlKSx1KGVbMV0sbmUsYWUpXX1mdW5jdGlvbiBsZShlLHQpe3JldHVybiBlWzBdPT09dFswXSYmKGVbMF09PT10ZXx8ZVswXT09PXJlKXx8KGVbMV09PT10WzFdJiYoZVsxXT09PW5lfHxlWzFdPT09YWUpfHx2b2lkIDApfWZ1bmN0aW9uIHNlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obixhKXt2YXIgaT1vZShuKSxvPW9lKGEpLGw9W107aWYoaSYmbyYmbGUoaSxvKSlyZXR1cm4gbDtpJiZsLnB1c2goaSksbyYmbC5wdXNoKG8pO3ZhciBjPTIqcy5jb25zdHJhaW4oKG5bZV0rYVtlXSkvMix0LHIpLSgoaXx8bilbZV0rKG98fGEpW2VdKTtjJiYoKGkmJm8/Yz4wPT1pW2VdPm9bZV0/aTpvOml8fG8pW2VdKz1jKTtyZXR1cm4gbH19ZnVuY3Rpb24gY2UoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj10PT09QltZLTFdWzBdLGE9cj09PUJbWS0xXVsxXTtpZighbnx8IWEpaWYoWT4xKXt2YXIgaT10PT09QltZLTJdWzBdLG89cj09PUJbWS0yXVsxXTtuJiYodD09PXRlfHx0PT09cmUpJiZpP28/WS0tOkJbWS0xXT1lOmEmJihyPT09bmV8fHI9PT1hZSkmJm8/aT9ZLS06QltZLTFdPWU6QltZKytdPWV9ZWxzZSBCW1krK109ZX1mdW5jdGlvbiB1ZShlKXtCW1ktMV1bMF0hPT1lWzBdJiZCW1ktMV1bMV0hPT1lWzFdJiZjZShbWCxKXSksY2UoZSksUT1udWxsLFg9Sj0wfWZ1bmN0aW9uIGRlKGUpe2lmKGs9ZVswXS9PLEE9ZVsxXS9QLFo9ZVswXTx0ZT90ZTplWzBdPnJlP3JlOjAsVz1lWzFdPG5lP25lOmVbMV0+YWU/YWU6MCxafHxXKXtpZihZKWlmKFEpe3ZhciB0PSQoUSxlKTt0Lmxlbmd0aD4xJiYodWUodFswXSksQltZKytdPXRbMV0pfWVsc2UgSz0kKEJbWS0xXSxlKVswXSxCW1krK109SztlbHNlIEJbWSsrXT1bWnx8ZVswXSxXfHxlWzFdXTt2YXIgcj1CW1ktMV07WiYmVyYmKHJbMF0hPT1afHxyWzFdIT09Vyk/KFEmJihYIT09WiYmSiE9PVc/Y2UoWCYmSj8obj1RLGk9KGE9ZSlbMF0tblswXSxvPShhWzFdLW5bMV0pL2ksKG5bMV0qYVswXS1hWzFdKm5bMF0pL2k+MD9bbz4wP3RlOnJlLGFlXTpbbz4wP3JlOnRlLG5lXSk6W1h8fFosSnx8V10pOlgmJkomJmNlKFtYLEpdKSksY2UoW1osV10pKTpYLVomJkotVyYmY2UoW1p8fFgsV3x8Sl0pLFE9ZSxYPVosSj1XfWVsc2UgUSYmdWUoJChRLGUpWzBdKSxCW1krK109ZTt2YXIgbixhLGksb31mb3IoImxpbmVhciI9PT16fHwic3BsaW5lIj09PXo/JD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxuPTAsYT0wO2E8NDthKyspe3ZhciBpPWllW2FdLG89YyhlWzBdLGVbMV0sdFswXSx0WzFdLGlbMF0saVsxXSxpWzJdLGlbM10pO28mJighbnx8TWF0aC5hYnMoby54LXJbMF1bMF0pPjF8fE1hdGguYWJzKG8ueS1yWzBdWzFdKT4xKSYmKG89W28ueCxvLnldLG4mJkcobyxlKTxHKHJbMF0sZSk/ci51bnNoaWZ0KG8pOnIucHVzaChvKSxuKyspfXJldHVybiByfToiaHYiPT09enx8InZoIj09PXo/JD1mdW5jdGlvbihlLHQpe3ZhciByPVtdLG49b2UoZSksYT1vZSh0KTtyZXR1cm4gbiYmYSYmbGUobixhKXx8KG4mJnIucHVzaChuKSxhJiZyLnB1c2goYSkpLHJ9OiJodmgiPT09ej8kPXNlKDAsdGUscmUpOiJ2aHYiPT09eiYmKCQ9c2UoMSxuZSxhZSkpLHI9MDtyPEg7cisrKWlmKG49VihyKSl7Zm9yKFk9MCxRPW51bGwsZGUobikscisrO3I8SDtyKyspe2lmKCEoZj1WKHIpKSl7aWYoSSljb250aW51ZTticmVha31pZihOJiZ0LnNpbXBsaWZ5KXt2YXIgZmU9VihyKzEpO2lmKHk9RyhmLG4pLEYmJigwPT09WXx8WT09PUgtMSl8fCEoeTxxKGYsZmUpKmopKXtmb3IobT1bKGZbMF0tblswXSkveSwoZlsxXS1uWzFdKS95XSxwPW4seD15LGI9dz1UPTAsZz0hMSxpPWYscisrO3I8ZS5sZW5ndGg7cisrKXtpZihoPWZlLGZlPVYocisxKSwhaCl7aWYoSSljb250aW51ZTticmVha31pZihNPSh2PVtoWzBdLW5bMF0saFsxXS1uWzFdXSlbMF0qbVsxXS12WzFdKm1bMF0sdz1NYXRoLm1pbih3LE0pLChUPU1hdGgubWF4KFQsTSkpLXc+cShoLGZlKSlicmVhaztpPWgsKF89dlswXSptWzBdK3ZbMV0qbVsxXSk+eD8oeD1fLGY9aCxnPSExKTpfPGImJihiPV8scD1oLGc9ITApfWlmKGc/KGRlKGYpLGkhPT1wJiZkZShwKSk6KHAhPT1uJiZkZShwKSxpIT09ZiYmZGUoZikpLGRlKGkpLHI+PWUubGVuZ3RofHwhaClicmVhaztkZShoKSxuPWh9fWVsc2UgZGUoZil9USYmY2UoW1h8fFFbMF0sSnx8UVsxXV0pLEUucHVzaChCLnNsaWNlKDAsWSkpfXJldHVybiBFfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjoyMTIsIi4uLy4uL2xpYiI6MjMyLCIuL2NvbnN0YW50cyI6MzYyfV0sMzczOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7InNwbGluZSI9PT1yKCJsaW5lLnNoYXBlIikmJnIoImxpbmUuc21vb3RoaW5nIil9fSx7fV0sMzc0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXt0b25leHR4OjEsdG9uZXh0eToxLHRvbmV4dDoxfTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhLGksbyxsLHMsYz17fSx1PSExLGQ9LTEsZj0wLHA9LTE7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKykobz0oYT1yW2ldWzBdLnRyYWNlKS5zdGFja2dyb3VwfHwiIik/byBpbiBjP3M9Y1tvXToocz1jW29dPWYsZisrKTphLmZpbGwgaW4gbiYmcD49MD9zPXA6KHM9cD1mLGYrKyksczxkJiYodT0hMCksYS5fZ3JvdXBJbmRleD1kPXM7dmFyIGg9ci5zbGljZSgpO3UmJmguc29ydCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1lWzBdLnRyYWNlLG49dFswXS50cmFjZTtyZXR1cm4gci5fZ3JvdXBJbmRleC1uLl9ncm91cEluZGV4fHxyLmluZGV4LW4uaW5kZXh9KSk7dmFyIGc9e307Zm9yKGk9MDtpPGgubGVuZ3RoO2krKylvPShhPWhbaV1bMF0udHJhY2UpLnN0YWNrZ3JvdXB8fCIiLCEwPT09YS52aXNpYmxlPyhhLl9uZXh0dHJhY2U9bnVsbCxhLmZpbGwgaW4gbiYmKGw9Z1tvXSxhLl9wcmV2dHJhY2U9bHx8bnVsbCxsJiYobC5fbmV4dHRyYWNlPWEpKSxhLl9vd25maWxsPWEuZmlsbCYmKCJ0b3plcm8iPT09YS5maWxsLnN1YnN0cigwLDYpfHwidG9zZWxmIj09PWEuZmlsbHx8InRvIj09PWEuZmlsbC5zdWJzdHIoMCwyKSYmIWEuX3ByZXZ0cmFjZSksZ1tvXT1hKTphLl9wcmV2dHJhY2U9YS5fbmV4dHRyYWNlPWEuX293bmZpbGw9bnVsbDtyZXR1cm4gaH19LHt9XSwzNzU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZmFzdC1pc251bWVyaWMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0fHwodD0yKTt2YXIgcj1lLm1hcmtlcixhPXIuc2l6ZXJlZnx8MSxpPXIuc2l6ZW1pbnx8MCxvPSJhcmVhIj09PXIuc2l6ZW1vZGU/ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc3FydChlL2EpfTpmdW5jdGlvbihlKXtyZXR1cm4gZS9hfTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9byhlL3QpO3JldHVybiBuKHIpJiZyPjA/TWF0aC5tYXgocixpKTowfX19LHsiZmFzdC1pc251bWVyaWMiOjE3fV0sMzc2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17Y29udGFpbmVyOiJtYXJrZXIiLG1pbjoiY21pbiIsbWF4OiJjbWF4In19LHt9XSwzNzc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGk9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz1lKCIuL3N1YnR5cGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGwscyxjKXt2YXIgdT1vLmlzQnViYmxlKGUpLGQ9KGUubGluZXx8e30pLmNvbG9yOyhjPWN8fHt9LGQmJihyPWQpLHMoIm1hcmtlci5zeW1ib2wiKSxzKCJtYXJrZXIub3BhY2l0eSIsdT8uNzoxKSxzKCJtYXJrZXIuc2l6ZSIpLHMoIm1hcmtlci5jb2xvciIsciksYShlLCJtYXJrZXIiKSYmaShlLHQsbCxzLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSksYy5ub1NlbGVjdHx8KHMoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHMoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIikscygic2VsZWN0ZWQubWFya2VyLnNpemUiKSxzKCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplIikpLGMubm9MaW5lfHwocygibWFya2VyLmxpbmUuY29sb3IiLGQmJiFBcnJheS5pc0FycmF5KGQpJiZ0Lm1hcmtlci5jb2xvciE9PWQ/ZDp1P24uYmFja2dyb3VuZDpuLmRlZmF1bHRMaW5lKSxhKGUsIm1hcmtlci5saW5lIikmJmkoZSx0LGwscyx7cHJlZml4OiJtYXJrZXIubGluZS4iLGNMZXR0ZXI6ImMifSkscygibWFya2VyLmxpbmUud2lkdGgiLHU/MTowKSksdSYmKHMoIm1hcmtlci5zaXplcmVmIikscygibWFya2VyLnNpemVtaW4iKSxzKCJtYXJrZXIuc2l6ZW1vZGUiKSksYy5ncmFkaWVudCkmJigibm9uZSIhPT1zKCJtYXJrZXIuZ3JhZGllbnQudHlwZSIpJiZzKCJtYXJrZXIuZ3JhZGllbnQuY29sb3IiKSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjEwMiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjoxMTIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjoxMTMsIi4vc3VidHlwZXMiOjM4M31dLDM3ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKS5kYXRlVGljazAsYT1lKCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuT05FV0VFSztmdW5jdGlvbiBpKGUsdCl7cmV0dXJuIG4odCxlJWE9PTA/MTowKX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbixhKXtpZihhfHwoYT17eDohMCx5OiEwfSksYS54KXt2YXIgbz1uKCJ4cGVyaW9kIik7byYmKG4oInhwZXJpb2QwIixpKG8sdC54Y2FsZW5kYXIpKSxuKCJ4cGVyaW9kYWxpZ25tZW50IikpfWlmKGEueSl7dmFyIGw9bigieXBlcmlvZCIpO2wmJihuKCJ5cGVyaW9kMCIsaShsLHQueWNhbGVuZGFyKSksbigieXBlcmlvZGFsaWdubWVudCIpKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjIxMiwiLi4vLi4vbGliIjoyMzJ9XSwzNzk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL2xpYiIpLG89aS5lbnN1cmVTaW5nbGUsbD1pLmlkZW50aXR5LHM9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz1lKCIuL3N1YnR5cGVzIiksdT1lKCIuL2xpbmVfcG9pbnRzIiksZD1lKCIuL2xpbmtfdHJhY2VzIiksZj1lKCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcjtmdW5jdGlvbiBwKGUsdCxyLGQscCxoLGcpe3ZhciBtOyFmdW5jdGlvbihlLHQscixhLG8pe3ZhciBsPXIueGF4aXMscz1yLnlheGlzLHU9bi5leHRlbnQoaS5zaW1wbGVNYXAobC5yYW5nZSxsLnIyYykpLGQ9bi5leHRlbnQoaS5zaW1wbGVNYXAocy5yYW5nZSxzLnIyYykpLGY9YVswXS50cmFjZTtpZighYy5oYXNNYXJrZXJzKGYpKXJldHVybjt2YXIgcD1mLm1hcmtlci5tYXhkaXNwbGF5ZWQ7aWYoMD09PXApcmV0dXJuO3ZhciBoPWEuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS54Pj11WzBdJiZlLng8PXVbMV0mJmUueT49ZFswXSYmZS55PD1kWzFdfSkpLGc9TWF0aC5jZWlsKGgubGVuZ3RoL3ApLG09MDtvLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dmFyIG49ZVswXS50cmFjZTtjLmhhc01hcmtlcnMobikmJm4ubWFya2VyLm1heGRpc3BsYXllZD4wJiZyPHQmJm0rK30pKTt2YXIgdj1NYXRoLnJvdW5kKG0qZy8zK01hdGguZmxvb3IobS8zKSpnLzcuMSk7YS5mb3JFYWNoKChmdW5jdGlvbihlKXtkZWxldGUgZS52aXN9KSksaC5mb3JFYWNoKChmdW5jdGlvbihlLHQpezA9PT1NYXRoLnJvdW5kKCh0K3YpJWcpJiYoZS52aXM9ITApfSkpfSgwLHQscixkLHApO3ZhciB2PSEhZyYmZy5kdXJhdGlvbj4wO2Z1bmN0aW9uIHkoZSl7cmV0dXJuIHY/ZS50cmFuc2l0aW9uKCk6ZX12YXIgeD1yLnhheGlzLGI9ci55YXhpcyxfPWRbMF0udHJhY2Usdz1fLmxpbmUsVD1uLnNlbGVjdChoKSxNPW8oVCwiZyIsImVycm9yYmFycyIpLGs9byhULCJnIiwibGluZXMiKSxBPW8oVCwiZyIsInBvaW50cyIpLEw9byhULCJnIiwidGV4dCIpO2lmKGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJwbG90IikoZSxNLHIsZyksITA9PT1fLnZpc2libGUpe3ZhciBTLEQ7eShUKS5zdHlsZSgib3BhY2l0eSIsXy5vcGFjaXR5KTt2YXIgQz1fLmZpbGwuY2hhckF0KF8uZmlsbC5sZW5ndGgtMSk7IngiIT09QyYmInkiIT09QyYmKEM9IiIpLGRbMF1bci5pc1JhbmdlUGxvdD8ibm9kZVJhbmdlUGxvdDMiOiJub2RlMyJdPVQ7dmFyIE8sUCxJPSIiLFI9W10sej1fLl9wcmV2dHJhY2U7eiYmKEk9ei5fcHJldlJldnBhdGh8fCIiLEQ9ei5fbmV4dEZpbGwsUj16Ll9wb2x5Z29ucyk7dmFyIE4sRixFLGosSCxCLFksVj0iIixVPSIiLHE9W10sRz1pLm5vb3A7aWYoUz1fLl9vd25GaWxsLGMuaGFzTGluZXMoXyl8fCJub25lIiE9PV8uZmlsbCl7Zm9yKEQmJkQuZGF0dW0oZCksLTEhPT1bImh2IiwidmgiLCJodmgiLCJ2aHYiXS5pbmRleE9mKHcuc2hhcGUpPyhOPXMuc3RlcHMody5zaGFwZSksRj1zLnN0ZXBzKHcuc2hhcGUuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSkpOk49Rj0ic3BsaW5lIj09PXcuc2hhcGU/ZnVuY3Rpb24oZSl7dmFyIHQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gZS5sZW5ndGg+MSYmZVswXVswXT09PXRbMF0mJmVbMF1bMV09PT10WzFdP3Muc21vb3RoY2xvc2VkKGUuc2xpY2UoMSksdy5zbW9vdGhpbmcpOnMuc21vb3Rob3BlbihlLHcuc21vb3RoaW5nKX06ZnVuY3Rpb24oZSl7cmV0dXJuIk0iK2Uuam9pbigiTCIpfSxFPWZ1bmN0aW9uKGUpe3JldHVybiBGKGUucmV2ZXJzZSgpKX0scT11KGQse3hheGlzOngseWF4aXM6Yixjb25uZWN0R2FwczpfLmNvbm5lY3RnYXBzLGJhc2VUb2xlcmFuY2U6TWF0aC5tYXgody53aWR0aHx8MSwzKS80LHNoYXBlOncuc2hhcGUsc2ltcGxpZnk6dy5zaW1wbGlmeSxmaWxsOl8uZmlsbH0pLFk9Xy5fcG9seWdvbnM9bmV3IEFycmF5KHEubGVuZ3RoKSxtPTA7bTxxLmxlbmd0aDttKyspXy5fcG9seWdvbnNbbV09ZihxW21dKTtxLmxlbmd0aCYmKGo9cVswXVswXSxCPShIPXFbcS5sZW5ndGgtMV0pW0gubGVuZ3RoLTFdKSxHPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihPPU4odCksUD1FKHQpLFY/Qz8oVis9IkwiK08uc3Vic3RyKDEpLFU9UCsiTCIrVS5zdWJzdHIoMSkpOihWKz0iWiIrTyxVPVArIloiK1UpOihWPU8sVT1QKSxjLmhhc0xpbmVzKF8pJiZ0Lmxlbmd0aD4xKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZihyLmRhdHVtKGQpLGUpeShyLnN0eWxlKCJvcGFjaXR5IiwwKS5hdHRyKCJkIixPKS5jYWxsKHMubGluZUdyb3VwU3R5bGUpKS5zdHlsZSgib3BhY2l0eSIsMSk7ZWxzZXt2YXIgYT15KHIpO2EuYXR0cigiZCIsTykscy5zaW5nbGVMaW5lU3R5bGUoZCxhKX19fX19dmFyIFo9ay5zZWxlY3RBbGwoIi5qcy1saW5lIikuZGF0YShxKTt5KFouZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksWi5lYWNoKEcoITEpKSxaLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtbGluZSIsITApLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2FsbChzLmxpbmVHcm91cFN0eWxlKS5lYWNoKEcoITApKSxzLnNldENsaXBVcmwoWixyLmxheWVyQ2xpcElkLGUpLHEubGVuZ3RoPyhTPyhTLmRhdHVtKGQpLGomJkImJihDPygieSI9PT1DP2pbMV09QlsxXT1iLmMycCgwLCEwKToieCI9PT1DJiYoalswXT1CWzBdPXguYzJwKDAsITApKSx5KFMpLmF0dHIoImQiLCJNIitCKyJMIitqKyJMIitWLnN1YnN0cigxKSkuY2FsbChzLnNpbmdsZUZpbGxTdHlsZSkpOnkoUykuYXR0cigiZCIsVisiWiIpLmNhbGwocy5zaW5nbGVGaWxsU3R5bGUpKSk6RCYmKCJ0b25leHQiPT09Xy5maWxsLnN1YnN0cigwLDYpJiZWJiZJPygidG9uZXh0Ij09PV8uZmlsbD95KEQpLmF0dHIoImQiLFYrIloiK0krIloiKS5jYWxsKHMuc2luZ2xlRmlsbFN0eWxlKTp5KEQpLmF0dHIoImQiLFYrIkwiK0kuc3Vic3RyKDEpKyJaIikuY2FsbChzLnNpbmdsZUZpbGxTdHlsZSksXy5fcG9seWdvbnM9Xy5fcG9seWdvbnMuY29uY2F0KFIpKTooWChEKSxfLl9wb2x5Z29ucz1udWxsKSksXy5fcHJldlJldnBhdGg9VSxfLl9wcmV2UG9seWdvbnM9WSk6KFM/WChTKTpEJiZYKEQpLF8uX3BvbHlnb25zPV8uX3ByZXZSZXZwYXRoPV8uX3ByZXZQb2x5Z29ucz1udWxsKSxBLmRhdHVtKGQpLEwuZGF0dW0oZCksZnVuY3Rpb24odCxhLGkpe3ZhciBvLHU9aVswXS50cmFjZSxkPWMuaGFzTWFya2Vycyh1KSxmPWMuaGFzVGV4dCh1KSxwPWVlKHUpLGg9dGUsZz10ZTtpZihkfHxmKXt2YXIgbT1sLF89dS5zdGFja2dyb3VwLHc9XyYmImluZmVyIHplcm8iPT09ZS5fZnVsbExheW91dC5fc2NhdHRlclN0YWNrT3B0c1t4Ll9pZCtiLl9pZF1bX10uc3RhY2tnYXBzO3UubWFya2VyLm1heGRpc3BsYXllZHx8dS5fbmVlZHNDdWxsP209dz9ROko6XyYmIXcmJihtPUspLGQmJihoPW0pLGYmJihnPW0pfXZhciBULE09KG89dC5zZWxlY3RBbGwoInBhdGgucG9pbnQiKS5kYXRhKGgscCkpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKTt2JiZNLmNhbGwocy5wb2ludFN0eWxlLHUsZSkuY2FsbChzLnRyYW5zbGF0ZVBvaW50cyx4LGIpLnN0eWxlKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLG8ub3JkZXIoKSxkJiYoVD1zLm1ha2VQb2ludFN0eWxlRm5zKHUpKSxvLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLGk9eShhKTtzLnRyYW5zbGF0ZVBvaW50KHQsaSx4LGIpPyhzLnNpbmdsZVBvaW50U3R5bGUodCxpLHUsVCxlKSxyLmxheWVyQ2xpcElkJiZzLmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh0LGkseCxiLHUueGNhbGVuZGFyLHUueWNhbGVuZGFyKSx1LmN1c3RvbWRhdGEmJmEuY2xhc3NlZCgicGxvdGx5LWN1c3RvbWRhdGEiLG51bGwhPT10LmRhdGEmJnZvaWQgMCE9PXQuZGF0YSkpOmkucmVtb3ZlKCl9KSksdj9vLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpOm8uZXhpdCgpLnJlbW92ZSgpLChvPWEuc2VsZWN0QWxsKCJnIikuZGF0YShnLHApKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRleHRwb2ludCIsITApLmFwcGVuZCgidGV4dCIpLG8ub3JkZXIoKSxvLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGE9eSh0LnNlbGVjdCgidGV4dCIpKTtzLnRyYW5zbGF0ZVBvaW50KGUsYSx4LGIpP3IubGF5ZXJDbGlwSWQmJnMuaGlkZU91dHNpZGVSYW5nZVBvaW50KGUsdCx4LGIsdS54Y2FsZW5kYXIsdS55Y2FsZW5kYXIpOnQucmVtb3ZlKCl9KSksby5zZWxlY3RBbGwoInRleHQiKS5jYWxsKHMudGV4dFBvaW50U3R5bGUsdSxlKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD14LmMycChlLngpLHI9Yi5jMnAoZS55KTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5lYWNoKChmdW5jdGlvbigpe3kobi5zZWxlY3QodGhpcykpLmF0dHIoe3g6dCx5OnJ9KX0pKX0pKSxvLmV4aXQoKS5yZW1vdmUoKX0oQSxMLGQpO3ZhciBXPSExPT09Xy5jbGlwb25heGlzP251bGw6ci5sYXllckNsaXBJZDtzLnNldENsaXBVcmwoQSxXLGUpLHMuc2V0Q2xpcFVybChMLFcsZSl9ZnVuY3Rpb24gWChlKXt5KGUpLmF0dHIoImQiLCJNMCwwWiIpfWZ1bmN0aW9uIEooZSl7cmV0dXJuIGUuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5nYXAmJmUudmlzfSkpfWZ1bmN0aW9uIFEoZSl7cmV0dXJuIGUuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS52aXN9KSl9ZnVuY3Rpb24gSyhlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmdhcH0pKX1mdW5jdGlvbiAkKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uIGVlKGUpe2lmKGUuaWRzKXJldHVybiAkfWZ1bmN0aW9uIHRlKCl7cmV0dXJuITF9fXQuZXhwb3J0cz1mdW5jdGlvbihlLHQscixhLGksYyl7dmFyIHUsZixoPSFpLGc9ISFpJiZpLmR1cmF0aW9uPjAsbT1kKGUsdCxyKTsoKHU9YS5zZWxlY3RBbGwoImcudHJhY2UiKS5kYXRhKG0sKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdLnRyYWNlLnVpZH0pKSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFjZSBzY2F0dGVyIHRyYWNlIitlWzBdLnRyYWNlLnVpZH0pKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDIpLHUub3JkZXIoKSxmdW5jdGlvbihlLHQscil7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgYT1vKG4uc2VsZWN0KHRoaXMpLCJnIiwiZmlsbHMiKTtzLnNldENsaXBVcmwoYSxyLmxheWVyQ2xpcElkLGUpO3ZhciBpPXRbMF0udHJhY2UsYz1bXTtpLl9vd25maWxsJiZjLnB1c2goIl9vd25GaWxsIiksaS5fbmV4dHRyYWNlJiZjLnB1c2goIl9uZXh0RmlsbCIpO3ZhciB1PWEuc2VsZWN0QWxsKCJnIikuZGF0YShjLGwpO3UuZW50ZXIoKS5hcHBlbmQoImciKSx1LmV4aXQoKS5lYWNoKChmdW5jdGlvbihlKXtpW2VdPW51bGx9KSkucmVtb3ZlKCksdS5vcmRlcigpLmVhY2goKGZ1bmN0aW9uKGUpe2lbZV09byhuLnNlbGVjdCh0aGlzKSwicGF0aCIsImpzLWZpbGwiKX0pKX0pKX0oZSx1LHQpLGcpPyhjJiYoZj1jKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKGkuZHVyYXRpb24pLmVhc2UoaS5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7ZiYmZigpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7ZiYmZigpfSkpLmVhY2goKGZ1bmN0aW9uKCl7YS5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKChmdW5jdGlvbihyLG4pe3AoZSxuLHQscixtLHRoaXMsaSl9KSl9KSkpOnUuZWFjaCgoZnVuY3Rpb24ocixuKXtwKGUsbix0LHIsbSx0aGlzLGkpfSkpO2gmJnUuZXhpdCgpLnJlbW92ZSgpLGEuc2VsZWN0QWxsKCJwYXRoOm5vdChbZF0pIikucmVtb3ZlKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MTI0LCIuLi8uLi9saWIiOjIzMiwiLi4vLi4vbGliL3BvbHlnb24iOjI0NCwiLi4vLi4vcmVnaXN0cnkiOjMxOCwiLi9saW5lX3BvaW50cyI6MzcyLCIuL2xpbmtfdHJhY2VzIjozNzQsIi4vc3VidHlwZXMiOjM4MywiQHBsb3RseS9kMyI6MTF9XSwzODA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9zdWJ0eXBlcyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByLGEsaSxvLGw9ZS5jZCxzPWUueGF4aXMsYz1lLnlheGlzLHU9W10sZD1sWzBdLnRyYWNlO2lmKCFuLmhhc01hcmtlcnMoZCkmJiFuLmhhc1RleHQoZCkpcmV0dXJuW107aWYoITE9PT10KWZvcihyPTA7cjxsLmxlbmd0aDtyKyspbFtyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPGwubGVuZ3RoO3IrKylhPWxbcl0saT1zLmMycChhLngpLG89Yy5jMnAoYS55KSxudWxsIT09YS5pJiZ0LmNvbnRhaW5zKFtpLG9dLCExLHIsZSk/KHUucHVzaCh7cG9pbnROdW1iZXI6YS5pLHg6cy5jMmQoYS54KSx5OmMuYzJkKGEueSl9KSxhLnNlbGVjdGVkPTEpOmEuc2VsZWN0ZWQ9MDtyZXR1cm4gdX19LHsiLi9zdWJ0eXBlcyI6MzgzfV0sMzgxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPVsib3JpZW50YXRpb24iLCJncm91cG5vcm0iLCJzdGFja2dhcHMiXTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIGk9ci5fc2NhdHRlclN0YWNrT3B0cyxvPWEoInN0YWNrZ3JvdXAiKTtpZihvKXt2YXIgbD10LnhheGlzK3QueWF4aXMscz1pW2xdO3N8fChzPWlbbF09e30pO3ZhciBjPXNbb10sdT0hMTtjP2MudHJhY2VzLnB1c2godCk6KGM9c1tvXT17dHJhY2VJbmRpY2VzOltdLHRyYWNlczpbdF19LHU9ITApO2Zvcih2YXIgZD17b3JpZW50YXRpb246dC54JiYhdC55PyJoIjoidiJ9LGY9MDtmPG4ubGVuZ3RoO2YrKyl7dmFyIHA9bltmXSxoPXArIkZvdW5kIjtpZighY1toXSl7dmFyIGc9dm9pZCAwIT09ZVtwXSxtPSJvcmllbnRhdGlvbiI9PT1wO2lmKChnfHx1KSYmKGNbcF09YShwLGRbcF0pLG0mJihjLmZpbGxEZmx0PSJoIj09PWNbcF0/InRvbmV4dHgiOiJ0b25leHR5IiksZyYmKGNbaF09ITAsIXUmJihkZWxldGUgYy50cmFjZXNbMF1bcF0sbSkpKSlmb3IodmFyIHY9MDt2PGMudHJhY2VzLmxlbmd0aC0xO3YrKyl7dmFyIHk9Yy50cmFjZXNbdl07eS5faW5wdXQuZmlsbCE9PXkuZmlsbCYmKHkuZmlsbD1jLmZpbGxEZmx0KX19fXJldHVybiBjfX19LHt9XSwzODI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiQHBsb3RseS9kMyIpLGE9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksaT1lKCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIG8oZSx0LHIpe2EucG9pbnRTdHlsZShlLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLHQscil9ZnVuY3Rpb24gbChlLHQscil7YS50ZXh0UG9pbnRTdHlsZShlLnNlbGVjdEFsbCgidGV4dCIpLHQscil9dC5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbihlKXt2YXIgdD1uLnNlbGVjdChlKS5zZWxlY3RBbGwoImcudHJhY2Uuc2NhdHRlciIpO3Quc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbihlKXtyZXR1cm4gZVswXS50cmFjZS5vcGFjaXR5fSkpLHQuc2VsZWN0QWxsKCJnLnBvaW50cyIpLmVhY2goKGZ1bmN0aW9uKHQpe28obi5zZWxlY3QodGhpcyksdC50cmFjZXx8dFswXS50cmFjZSxlKX0pKSx0LnNlbGVjdEFsbCgiZy50ZXh0IikuZWFjaCgoZnVuY3Rpb24odCl7bChuLnNlbGVjdCh0aGlzKSx0LnRyYWNlfHx0WzBdLnRyYWNlLGUpfSkpLHQuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtbGluZSIpLmNhbGwoYS5saW5lR3JvdXBTdHlsZSksdC5zZWxlY3RBbGwoImcudHJhY2UgcGF0aC5qcy1maWxsIikuY2FsbChhLmZpbGxHcm91cFN0eWxlKSxpLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3R5bGUiKSh0KX0sc3R5bGVQb2ludHM6byxzdHlsZVRleHQ6bCxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10WzBdLnRyYWNlO24uc2VsZWN0ZWRwb2ludHM/KGEuc2VsZWN0ZWRQb2ludFN0eWxlKHIuc2VsZWN0QWxsKCJwYXRoLnBvaW50IiksbiksYS5zZWxlY3RlZFRleHRTdHlsZShyLnNlbGVjdEFsbCgidGV4dCIpLG4pKToobyhyLG4sZSksbChyLG4sZSkpfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjoxMjQsIi4uLy4uL3JlZ2lzdHJ5IjozMTgsIkBwbG90bHkvZDMiOjExfV0sMzgzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpO3QuZXhwb3J0cz17aGFzTGluZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmlzaWJsZSYmZS5tb2RlJiYtMSE9PWUubW9kZS5pbmRleE9mKCJsaW5lcyIpfSxoYXNNYXJrZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnZpc2libGUmJihlLm1vZGUmJi0xIT09ZS5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKXx8InNwbG9tIj09PWUudHlwZSl9LGhhc1RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmlzaWJsZSYmZS5tb2RlJiYtMSE9PWUubW9kZS5pbmRleE9mKCJ0ZXh0Iil9LGlzQnViYmxlOmZ1bmN0aW9uKGUpe3JldHVybiBuLmlzUGxhaW5PYmplY3QoZS5tYXJrZXIpJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5tYXJrZXIuc2l6ZSl9fX0seyIuLi8uLi9saWIiOjIzMn1dLDM4NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsYSxpKXtpPWl8fHt9LGEoInRleHRwb3NpdGlvbiIpLG4uY29lcmNlRm9udChhLCJ0ZXh0Zm9udCIsci5mb250KSxpLm5vU2VsZWN0fHwoYSgic2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxhKCJ1bnNlbGVjdGVkLnRleHRmb250LmNvbG9yIikpfX0seyIuLi8uLi9saWIiOjIzMn1dLDM4NTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL3JlZ2lzdHJ5Iik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBvLGw9aSgieCIpLHM9aSgieSIpO2lmKGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikoZSx0LFsieCIsInkiXSxyKSxsKXt2YXIgYz1uLm1pblJvd0xlbmd0aChsKTtzP289TWF0aC5taW4oYyxuLm1pblJvd0xlbmd0aChzKSk6KG89YyxpKCJ5MCIpLGkoImR5IikpfWVsc2V7aWYoIXMpcmV0dXJuIDA7bz1uLm1pblJvd0xlbmd0aChzKSxpKCJ4MCIpLGkoImR4Iil9cmV0dXJuIHQuX2xlbmd0aD1vLG99fSx7Ii4uLy4uL2xpYiI6MjMyLCIuLi8uLi9yZWdpc3RyeSI6MzE4fV0sMzg2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT1lKCIuLi9saWIiKSxpPWUoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksbz1lKCIuL2hlbHBlcnMiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uLGw9ZSgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtyLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJhZ2dyZWdhdGUiO3ZhciBzPXIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGdyb3Vwczp7dmFsVHlwZToic3RyaW5nIixzdHJpY3Q6ITAsbm9CbGFuazohMCxhcnJheU9rOiEwLGRmbHQ6IngiLGVkaXRUeXBlOiJjYWxjIn0sYWdncmVnYXRpb25zOntfaXNMaW5rZWRUb0FycmF5OiJhZ2dyZWdhdGlvbiIsdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sZnVuYzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY291bnQiLCJzdW0iLCJhdmciLCJtZWRpYW4iLCJtb2RlIiwicm1zIiwic3RkZGV2IiwibWluIiwibWF4IiwiZmlyc3QiLCJsYXN0IiwiY2hhbmdlIiwicmFuZ2UiXSxkZmx0OiJmaXJzdCIsZWRpdFR5cGU6ImNhbGMifSxmdW5jbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2FtcGxlIiwicG9wdWxhdGlvbiJdLGRmbHQ6InNhbXBsZSIsZWRpdFR5cGU6ImNhbGMifSxlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGM9cy5hZ2dyZWdhdGlvbnM7ZnVuY3Rpb24gdShlLHQscixpKXtpZihpLmVuYWJsZWQpe2Zvcih2YXIgbz1pLnRhcmdldCxzPWEubmVzdGVkUHJvcGVydHkodCxvKSxjPXMuZ2V0KCksdT1mdW5jdGlvbihlLHQpe3ZhciByPWUuZnVuYyxuPXQuZDJjLGk9dC5jMmQ7c3dpdGNoKHIpe2Nhc2UiY291bnQiOnJldHVybiBkO2Nhc2UiZmlyc3QiOnJldHVybiBmO2Nhc2UibGFzdCI6cmV0dXJuIHA7Y2FzZSJzdW0iOnJldHVybiBmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89bihlW3RbYV1dKTtvIT09bCYmKHIrPW8pfXJldHVybiBpKHIpfTtjYXNlImF2ZyI6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTAsYT0wLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9bihlW3Rbb11dKTtzIT09bCYmKHIrPXMsYSsrKX1yZXR1cm4gYT9pKHIvYSk6bH07Y2FzZSJtaW4iOnJldHVybiBmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1uKGVbdFthXV0pO28hPT1sJiYocj1NYXRoLm1pbihyLG8pKX1yZXR1cm4gcj09PTEvMD9sOmkocil9O2Nhc2UibWF4IjpyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9LTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPW4oZVt0W2FdXSk7byE9PWwmJihyPU1hdGgubWF4KHIsbykpfXJldHVybiByPT09LTEvMD9sOmkocil9O2Nhc2UicmFuZ2UiOnJldHVybiBmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0xLzAsYT0tMS8wLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9bihlW3Rbb11dKTtzIT09bCYmKHI9TWF0aC5taW4ocixzKSxhPU1hdGgubWF4KGEscykpfXJldHVybiBhPT09LTEvMHx8cj09PTEvMD9sOmkoYS1yKX07Y2FzZSJjaGFuZ2UiOnJldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPW4oZVt0WzBdXSksYT1uKGVbdFt0Lmxlbmd0aC0xXV0pO3JldHVybiByPT09bHx8YT09PWw/bDppKGEtcil9O2Nhc2UibWVkaWFuIjpyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz1uKGVbdFtvXV0pO3MhPT1sJiZyLnB1c2gocyl9aWYoIXIubGVuZ3RoKXJldHVybiBsO3Iuc29ydChhLnNvcnRlckFzYyk7dmFyIGM9KHIubGVuZ3RoLTEpLzI7cmV0dXJuIGkoKHJbTWF0aC5mbG9vcihjKV0rcltNYXRoLmNlaWwoYyldKS8yKX07Y2FzZSJtb2RlIjpyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9e30sYT0wLG89bCxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBjPW4oZVt0W3NdXSk7aWYoYyE9PWwpe3ZhciB1PXJbY109KHJbY118fDApKzE7dT5hJiYoYT11LG89Yyl9fXJldHVybiBhP2kobyk6bH07Y2FzZSJybXMiOnJldHVybiBmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wLGE9MCxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPW4oZVt0W29dXSk7cyE9PWwmJihyKz1zKnMsYSsrKX1yZXR1cm4gYT9pKE1hdGguc3FydChyL2EpKTpsfTtjYXNlInN0ZGRldiI6cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIGEsaT0wLG89MCxzPTEsYz1sO2ZvcihhPTA7YTxyLmxlbmd0aCYmYz09PWw7YSsrKWM9bih0W3JbYV1dKTtpZihjPT09bClyZXR1cm4gbDtmb3IoO2E8ci5sZW5ndGg7YSsrKXt2YXIgdT1uKHRbclthXV0pO2lmKHUhPT1sKXt2YXIgZD11LWM7aSs9ZCxvKz1kKmQscysrfX12YXIgZj0ic2FtcGxlIj09PWUuZnVuY21vZGU/cy0xOnM7cmV0dXJuIGY/TWF0aC5zcXJ0KChvLWkqaS9zKS9mKTowfX19KGksbi5nZXREYXRhQ29udmVyc2lvbnMoZSx0LG8sYykpLGg9bmV3IEFycmF5KHIubGVuZ3RoKSxnPTA7ZzxyLmxlbmd0aDtnKyspaFtnXT11KGMscltnXSk7cy5zZXQoaCksImNvdW50Ij09PWkuZnVuYyYmYS5wdXNoVW5pcXVlKHQuX2FycmF5QXR0cnMsbyl9fWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gZihlLHQpe3JldHVybiBlW3RbMF1dfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gZVt0W3QubGVuZ3RoLTFdXX1yLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj17fTtmdW5jdGlvbiBvKHQscil7cmV0dXJuIGEuY29lcmNlKGUsbixzLHQscil9aWYoIW8oImVuYWJsZWQiKSlyZXR1cm4gbjt2YXIgbD1pLmZpbmRBcnJheUF0dHJpYnV0ZXModCksdT17fTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKXVbbFtyXV09MTt2YXIgZD1vKCJncm91cHMiKTtpZighQXJyYXkuaXNBcnJheShkKSl7aWYoIXVbZF0pcmV0dXJuIG4uZW5hYmxlZD0hMSxuO3VbZF09MH12YXIgZixwPWUuYWdncmVnYXRpb25zfHxbXSxoPW4uYWdncmVnYXRpb25zPW5ldyBBcnJheShwLmxlbmd0aCk7ZnVuY3Rpb24gZyhlLHQpe3JldHVybiBhLmNvZXJjZShwW3JdLGYsYyxlLHQpfWZvcihyPTA7cjxwLmxlbmd0aDtyKyspe2Y9e19pbmRleDpyfTt2YXIgbT1nKCJ0YXJnZXQiKSx2PWcoImZ1bmMiKTtnKCJlbmFibGVkIikmJm0mJih1W21dfHwiY291bnQiPT09diYmdm9pZCAwPT09dVttXSk/KCJzdGRkZXYiPT09diYmZygiZnVuY21vZGUiKSx1W21dPTAsaFtyXT1mKTpoW3JdPXtlbmFibGVkOiExLF9pbmRleDpyfX1mb3Iocj0wO3I8bC5sZW5ndGg7cisrKXVbbFtyXV0mJmgucHVzaCh7dGFyZ2V0Omxbcl0sZnVuYzpjLmZ1bmMuZGZsdCxlbmFibGVkOiEwLF9pbmRleDotMX0pO3JldHVybiBufSxyLmNhbGNUcmFuc2Zvcm09ZnVuY3Rpb24oZSx0LHIpe2lmKHIuZW5hYmxlZCl7dmFyIG49ci5ncm91cHMsaT1hLmdldFRhcmdldEFycmF5KHQse3RhcmdldDpufSk7aWYoaSl7dmFyIGwscyxjLGQsZj17fSxwPXt9LGg9W10sZz1vKHQudHJhbnNmb3JtcyxyKSxtPWkubGVuZ3RoO2Zvcih0Ll9sZW5ndGgmJihtPU1hdGgubWluKG0sdC5fbGVuZ3RoKSksbD0wO2w8bTtsKyspdm9pZCAwPT09KGM9ZltzPWlbbF1dKT8oZltzXT1oLmxlbmd0aCxkPVtsXSxoLnB1c2goZCkscFtmW3NdXT1nKGwpKTooaFtjXS5wdXNoKGwpLHBbZltzXV09KHBbZltzXV18fFtdKS5jb25jYXQoZyhsKSkpO3IuX2luZGV4VG9Qb2ludHM9cDt2YXIgdj1yLmFnZ3JlZ2F0aW9ucztmb3IobD0wO2w8di5sZW5ndGg7bCsrKXUoZSx0LGgsdltsXSk7InN0cmluZyI9PXR5cGVvZiBuJiZ1KGUsdCxoLHt0YXJnZXQ6bixmdW5jOiJmaXJzdCIsZW5hYmxlZDohMH0pLHQuX2xlbmd0aD1oLmxlbmd0aH19fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjoyMTIsIi4uL2xpYiI6MjMyLCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6MjY3LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Mjc5LCIuL2hlbHBlcnMiOjM4OX1dLDM4NzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIiKSxhPWUoIi4uL3JlZ2lzdHJ5IiksaT1lKCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89ZSgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixsPWUoIi4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIikscz1sLkNPTVBBUklTT05fT1BTLGM9bC5JTlRFUlZBTF9PUFMsdT1sLlNFVF9PUFM7ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZmlsdGVyIixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9wZXJhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltdLmNvbmNhdChzKS5jb25jYXQoYykuY29uY2F0KHUpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0scHJlc2VydmVnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIGkoYSxpKXtyZXR1cm4gbi5jb2VyY2UoZSx0LHIuYXR0cmlidXRlcyxhLGkpfWlmKGkoImVuYWJsZWQiKSl7dmFyIG89aSgidGFyZ2V0Iik7aWYobi5pc0FycmF5T3JUeXBlZEFycmF5KG8pJiYwPT09by5sZW5ndGgpcmV0dXJuIHQuZW5hYmxlZD0hMSx0O2koInByZXNlcnZlZ2FwcyIpLGkoIm9wZXJhdGlvbiIpLGkoInZhbHVlIik7dmFyIGw9YS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIik7bChlLHQsInZhbHVlY2FsZW5kYXIiLG51bGwpLGwoZSx0LCJ0YXJnZXRjYWxlbmRhciIsbnVsbCl9cmV0dXJuIHR9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbihlLHQscil7aWYoci5lbmFibGVkKXt2YXIgYT1uLmdldFRhcmdldEFycmF5KHQscik7aWYoYSl7dmFyIGw9ci50YXJnZXQsZD1hLmxlbmd0aDt0Ll9sZW5ndGgmJihkPU1hdGgubWluKGQsdC5fbGVuZ3RoKSk7dmFyIGY9ci50YXJnZXRjYWxlbmRhcixwPXQuX2FycmF5QXR0cnMsaD1yLnByZXNlcnZlZ2FwcztpZigic3RyaW5nIj09dHlwZW9mIGwpe3ZhciBnPW4ubmVzdGVkUHJvcGVydHkodCxsKyJjYWxlbmRhciIpLmdldCgpO2cmJihmPWcpfXZhciBtLHYseT1mdW5jdGlvbihlLHQscil7dmFyIG49ZS5vcGVyYXRpb24sYT1lLnZhbHVlLGk9QXJyYXkuaXNBcnJheShhKTtmdW5jdGlvbiBvKGUpe3JldHVybi0xIT09ZS5pbmRleE9mKG4pfXZhciBsLGQ9ZnVuY3Rpb24ocil7cmV0dXJuIHQociwwLGUudmFsdWVjYWxlbmRhcil9LGY9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSwwLHIpfTtvKHMpP2w9ZChpP2FbMF06YSk6byhjKT9sPWk/W2QoYVswXSksZChhWzFdKV06W2QoYSksZChhKV06byh1KSYmKGw9aT9hLm1hcChkKTpbZChhKV0pO3N3aXRjaChuKXtjYXNlIj0iOnJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZihlKT09PWx9O2Nhc2UiIT0iOnJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZihlKSE9PWx9O2Nhc2UiPCI6cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBmKGUpPGx9O2Nhc2UiPD0iOnJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZihlKTw9bH07Y2FzZSI+IjpyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSk+bH07Y2FzZSI+PSI6cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBmKGUpPj1sfTtjYXNlIltdIjpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZihlKTtyZXR1cm4gdD49bFswXSYmdDw9bFsxXX07Y2FzZSIoKSI6cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWYoZSk7cmV0dXJuIHQ+bFswXSYmdDxsWzFdfTtjYXNlIlspIjpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZihlKTtyZXR1cm4gdD49bFswXSYmdDxsWzFdfTtjYXNlIihdIjpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZihlKTtyZXR1cm4gdD5sWzBdJiZ0PD1sWzFdfTtjYXNlIl1bIjpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZihlKTtyZXR1cm4gdDw9bFswXXx8dD49bFsxXX07Y2FzZSIpKCI6cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWYoZSk7cmV0dXJuIHQ8bFswXXx8dD5sWzFdfTtjYXNlIl0oIjpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZihlKTtyZXR1cm4gdDw9bFswXXx8dD5sWzFdfTtjYXNlIilbIjpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZihlKTtyZXR1cm4gdDxsWzBdfHx0Pj1sWzFdfTtjYXNlInt9IjpyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1sLmluZGV4T2YoZihlKSl9O2Nhc2UifXsiOnJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMT09PWwuaW5kZXhPZihmKGUpKX19fShyLGkuZ2V0RGF0YVRvQ29vcmRGdW5jKGUsdCxsLGEpLGYpLHg9e30sYj17fSxfPTA7aD8obT1mdW5jdGlvbihlKXt4W2UuYXN0cl09bi5leHRlbmREZWVwKFtdLGUuZ2V0KCkpLGUuc2V0KG5ldyBBcnJheShkKSl9LHY9ZnVuY3Rpb24oZSx0KXt2YXIgcj14W2UuYXN0cl1bdF07ZS5nZXQoKVt0XT1yfSk6KG09ZnVuY3Rpb24oZSl7eFtlLmFzdHJdPW4uZXh0ZW5kRGVlcChbXSxlLmdldCgpKSxlLnNldChbXSl9LHY9ZnVuY3Rpb24oZSx0KXt2YXIgcj14W2UuYXN0cl1bdF07ZS5nZXQoKS5wdXNoKHIpfSksTShtKTtmb3IodmFyIHc9byh0LnRyYW5zZm9ybXMsciksVD0wO1Q8ZDtUKyspe3koYVtUXSk/KE0odixUKSxiW18rK109dyhUKSk6aCYmXysrfXIuX2luZGV4VG9Qb2ludHM9Yix0Ll9sZW5ndGg9X319ZnVuY3Rpb24gTShlLHIpe2Zvcih2YXIgYT0wO2E8cC5sZW5ndGg7YSsrKXtlKG4ubmVzdGVkUHJvcGVydHkodCxwW2FdKSxyKX19fX0seyIuLi9jb25zdGFudHMvZmlsdGVyX29wcyI6MjEwLCIuLi9saWIiOjIzMiwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI3OSwiLi4vcmVnaXN0cnkiOjMxOCwiLi9oZWxwZXJzIjozODl9XSwzODg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vbGliIiksYT1lKCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLGk9ZSgiLi4vcGxvdHMvcGxvdHMiKSxvPWUoIi4vaGVscGVycyIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb247ZnVuY3Rpb24gbChlLHQpe3ZhciByLGwscyxjLHUsZCxmLHAsaCxnLG09dC50cmFuc2Zvcm0sdj10LnRyYW5zZm9ybUluZGV4LHk9ZS50cmFuc2Zvcm1zW3ZdLmdyb3Vwcyx4PW8oZS50cmFuc2Zvcm1zLG0pO2lmKCFuLmlzQXJyYXlPclR5cGVkQXJyYXkoeSl8fDA9PT15Lmxlbmd0aClyZXR1cm5bZV07dmFyIGI9bi5maWx0ZXJVbmlxdWUoeSksXz1uZXcgQXJyYXkoYi5sZW5ndGgpLHc9eS5sZW5ndGgsVD1hLmZpbmRBcnJheUF0dHJpYnV0ZXMoZSksTT1tLnN0eWxlc3x8W10saz17fTtmb3Iocj0wO3I8TS5sZW5ndGg7cisrKWtbTVtyXS50YXJnZXRdPU1bcl0udmFsdWU7bS5zdHlsZXMmJihnPW4ua2V5ZWRDb250YWluZXIobSwic3R5bGVzIiwidGFyZ2V0IiwidmFsdWUubmFtZSIpKTt2YXIgQT17fSxMPXt9O2ZvcihyPTA7cjxiLmxlbmd0aDtyKyspe0FbZD1iW3JdXT1yLExbZF09MCwoZj1fW3JdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LGUpKS5fZ3JvdXA9ZCxmLnRyYW5zZm9ybXNbdl0uX2luZGV4VG9Qb2ludHM9e307dmFyIFM9bnVsbDtmb3IoZyYmKFM9Zy5nZXQoZCkpLGYubmFtZT1TfHwiIj09PVM/UzpuLnRlbXBsYXRlU3RyaW5nKG0ubmFtZWZvcm1hdCx7dHJhY2U6ZS5uYW1lLGdyb3VwOmR9KSxwPWYudHJhbnNmb3JtcyxmLnRyYW5zZm9ybXM9W10sbD0wO2w8cC5sZW5ndGg7bCsrKWYudHJhbnNmb3Jtc1tsXT1uLmV4dGVuZERlZXBOb0FycmF5cyh7fSxwW2xdKTtmb3IobD0wO2w8VC5sZW5ndGg7bCsrKW4ubmVzdGVkUHJvcGVydHkoZixUW2xdKS5zZXQoW10pfWZvcihzPTA7czxULmxlbmd0aDtzKyspe2ZvcihjPVRbc10sbD0wLGg9W107bDxiLmxlbmd0aDtsKyspaFtsXT1uLm5lc3RlZFByb3BlcnR5KF9bbF0sYykuZ2V0KCk7Zm9yKHU9bi5uZXN0ZWRQcm9wZXJ0eShlLGMpLmdldCgpLGw9MDtsPHc7bCsrKWhbQVt5W2xdXV0ucHVzaCh1W2xdKX1mb3IobD0wO2w8dztsKyspeyhmPV9bQVt5W2xdXV0pLnRyYW5zZm9ybXNbdl0uX2luZGV4VG9Qb2ludHNbTFt5W2xdXV09eChsKSxMW3lbbF1dKyt9Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKylkPWJbcl0sZj1fW3JdLGkuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycyhmKSxmPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKGYsa1tkXXx8e30pO3JldHVybiBffXIubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9Imdyb3VwYnkiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGdyb3Vwczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LG5hbWVmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxzdHlsZXM6e19pc0xpbmtlZFRvQXJyYXk6InN0eWxlIix0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZTp7dmFsVHlwZToiYW55IixkZmx0Ont9LGVkaXRUeXBlOiJjYWxjIixfY29tcGFyZUFzSlNPTjohMH0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oZSx0LGEpe3ZhciBpLG89e307ZnVuY3Rpb24gbCh0LGEpe3JldHVybiBuLmNvZXJjZShlLG8sci5hdHRyaWJ1dGVzLHQsYSl9aWYoIWwoImVuYWJsZWQiKSlyZXR1cm4gbztsKCJncm91cHMiKSxsKCJuYW1lZm9ybWF0IixhLl9kYXRhTGVuZ3RoPjE/IiV7Z3JvdXB9ICgle3RyYWNlfSkiOiIle2dyb3VwfSIpO3ZhciBzPWUuc3R5bGVzLGM9by5zdHlsZXM9W107aWYocylmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKXt2YXIgdT1jW2ldPXt9O24uY29lcmNlKHNbaV0sY1tpXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLCJ0YXJnZXQiKTt2YXIgZD1uLmNvZXJjZShzW2ldLGNbaV0sci5hdHRyaWJ1dGVzLnN0eWxlcywidmFsdWUiKTtuLmlzUGxhaW5PYmplY3QoZCk/dS52YWx1ZT1uLmV4dGVuZERlZXAoe30sZCk6ZCYmZGVsZXRlIHUudmFsdWV9cmV0dXJuIG99LHIudHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKylmb3Iocj1sKGVbbl0sdCksYT0wO2E8ci5sZW5ndGg7YSsrKWkucHVzaChyW2FdKTtyZXR1cm4gaX19LHsiLi4vbGliIjoyMzIsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjoyNjcsIi4uL3Bsb3RzL3Bsb3RzIjozMTYsIi4vaGVscGVycyI6Mzg5fV0sMzg5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IucG9pbnRzQWNjZXNzb3JGdW5jdGlvbj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGE9MDthPGUubGVuZ3RoJiYocj1lW2FdKSE9PXQ7YSsrKXIuX2luZGV4VG9Qb2ludHMmJiExIT09ci5lbmFibGVkJiYobj1yLl9pbmRleFRvUG9pbnRzKTtyZXR1cm4gbj9mdW5jdGlvbihlKXtyZXR1cm4gbltlXX06ZnVuY3Rpb24oZSl7cmV0dXJuW2VdfX19LHt9XSwzOTA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vbGliIiksYT1lKCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9ZSgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixvPWUoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0ic29ydCIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMifSxvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXNjZW5kaW5nIiwiZGVzY2VuZGluZyJdLGRmbHQ6ImFzY2VuZGluZyIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307ZnVuY3Rpb24gYShhLGkpe3JldHVybiBuLmNvZXJjZShlLHQsci5hdHRyaWJ1dGVzLGEsaSl9cmV0dXJuIGEoImVuYWJsZWQiKSYmKGEoInRhcmdldCIpLGEoIm9yZGVyIikpLHR9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbihlLHQscil7aWYoci5lbmFibGVkKXt2YXIgbD1uLmdldFRhcmdldEFycmF5KHQscik7aWYobCl7dmFyIHM9ci50YXJnZXQsYz1sLmxlbmd0aDt0Ll9sZW5ndGgmJihjPU1hdGgubWluKGMsdC5fbGVuZ3RoKSk7dmFyIHUsZCxmPXQuX2FycmF5QXR0cnMscD1mdW5jdGlvbihlLHQscixuKXt2YXIgYSxpPW5ldyBBcnJheShuKSxsPW5ldyBBcnJheShuKTtmb3IoYT0wO2E8bjthKyspaVthXT17djp0W2FdLGk6YX07Zm9yKGkuc29ydChmdW5jdGlvbihlLHQpe3N3aXRjaChlLm9yZGVyKXtjYXNlImFzY2VuZGluZyI6cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49dChlLnYpLGE9dChyLnYpO3JldHVybiBuPT09bz8xOmE9PT1vPy0xOm4tYX07Y2FzZSJkZXNjZW5kaW5nIjpyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj10KGUudiksYT10KHIudik7cmV0dXJuIG49PT1vPzE6YT09PW8/LTE6YS1ufX19KGUscikpLGE9MDthPG47YSsrKWxbYV09aVthXS5pO3JldHVybiBsfShyLGwsYS5nZXREYXRhVG9Db29yZEZ1bmMoZSx0LHMsbCksYyksaD1pKHQudHJhbnNmb3JtcyxyKSxnPXt9O2Zvcih1PTA7dTxmLmxlbmd0aDt1Kyspe3ZhciBtPW4ubmVzdGVkUHJvcGVydHkodCxmW3VdKSx2PW0uZ2V0KCkseT1uZXcgQXJyYXkoYyk7Zm9yKGQ9MDtkPGM7ZCsrKXlbZF09dltwW2RdXTttLnNldCh5KX1mb3IoZD0wO2Q8YztkKyspZ1tkXT1oKHBbZF0pO3IuX2luZGV4VG9Qb2ludHM9Zyx0Ll9sZW5ndGg9Y319fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjoyMTIsIi4uL2xpYiI6MjMyLCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Mjc5LCIuL2hlbHBlcnMiOjM4OX1dLDM5MTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyLnZlcnNpb249IjIuOC4xIn0se31dfSx7fSxbOF0pKDgpfSkpOw==`; export default content;